diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.4.5`
-
+ 
+`2.0` - Derived from API version @2016-11-15@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 The provided lenses should be compatible with any of the major lens libraries
 [lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
 
-See [Network.AWS.EC2](http://hackage.haskell.org/package/amazonka-ec2/docs/Network-AWS-EC2.html)
+See [Amazonka.EC2](http://hackage.haskell.org/package/amazonka-ec2/docs/Amazonka-EC2.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-ec2.cabal b/amazonka-ec2.cabal
--- a/amazonka-ec2.cabal
+++ b/amazonka-ec2.cabal
@@ -1,302 +1,1645 @@
-name:                  amazonka-ec2
-version:               1.4.5
-synopsis:              Amazon Elastic Compute Cloud SDK.
-homepage:              https://github.com/brendanhay/amazonka
-bug-reports:           https://github.com/brendanhay/amazonka/issues
-license:               OtherLicense
-license-file:          LICENSE
-author:                Brendan Hay
-maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2016 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
-description:
-    The types from this library are intended to be used with
-    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
-    mechanisms for specifying AuthN/AuthZ information, sending requests,
-    and receiving responses.
-    .
-    Lenses are used for constructing and manipulating types,
-    due to the depth of nesting of AWS types and transparency regarding
-    de/serialisation into more palatable Haskell values.
-    The provided lenses should be compatible with any of the major lens libraries
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.EC2" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
-
-source-repository head
-    type:     git
-    location: git://github.com/brendanhay/amazonka.git
-
-library
-    default-language:  Haskell2010
-    hs-source-dirs:    src gen
-
-    ghc-options:       -Wall
-
-    exposed-modules:
-          Network.AWS.EC2
-        , Network.AWS.EC2.AcceptReservedInstancesExchangeQuote
-        , Network.AWS.EC2.AcceptVPCPeeringConnection
-        , Network.AWS.EC2.AllocateAddress
-        , Network.AWS.EC2.AllocateHosts
-        , Network.AWS.EC2.AssignIPv6Addresses
-        , Network.AWS.EC2.AssignPrivateIPAddresses
-        , Network.AWS.EC2.AssociateAddress
-        , Network.AWS.EC2.AssociateDHCPOptions
-        , Network.AWS.EC2.AssociateRouteTable
-        , Network.AWS.EC2.AssociateSubnetCidrBlock
-        , Network.AWS.EC2.AssociateVPCCidrBlock
-        , Network.AWS.EC2.AttachClassicLinkVPC
-        , Network.AWS.EC2.AttachInternetGateway
-        , Network.AWS.EC2.AttachNetworkInterface
-        , Network.AWS.EC2.AttachVPNGateway
-        , Network.AWS.EC2.AttachVolume
-        , Network.AWS.EC2.AuthorizeSecurityGroupEgress
-        , Network.AWS.EC2.AuthorizeSecurityGroupIngress
-        , Network.AWS.EC2.BundleInstance
-        , Network.AWS.EC2.CancelBundleTask
-        , Network.AWS.EC2.CancelConversionTask
-        , Network.AWS.EC2.CancelExportTask
-        , Network.AWS.EC2.CancelImportTask
-        , Network.AWS.EC2.CancelReservedInstancesListing
-        , Network.AWS.EC2.CancelSpotFleetRequests
-        , Network.AWS.EC2.CancelSpotInstanceRequests
-        , Network.AWS.EC2.ConfirmProductInstance
-        , Network.AWS.EC2.CopyImage
-        , Network.AWS.EC2.CopySnapshot
-        , Network.AWS.EC2.CreateCustomerGateway
-        , Network.AWS.EC2.CreateDHCPOptions
-        , Network.AWS.EC2.CreateEgressOnlyInternetGateway
-        , Network.AWS.EC2.CreateFlowLogs
-        , Network.AWS.EC2.CreateImage
-        , Network.AWS.EC2.CreateInstanceExportTask
-        , Network.AWS.EC2.CreateInternetGateway
-        , Network.AWS.EC2.CreateKeyPair
-        , Network.AWS.EC2.CreateNatGateway
-        , Network.AWS.EC2.CreateNetworkACL
-        , Network.AWS.EC2.CreateNetworkACLEntry
-        , Network.AWS.EC2.CreateNetworkInterface
-        , Network.AWS.EC2.CreatePlacementGroup
-        , Network.AWS.EC2.CreateReservedInstancesListing
-        , Network.AWS.EC2.CreateRoute
-        , Network.AWS.EC2.CreateRouteTable
-        , Network.AWS.EC2.CreateSecurityGroup
-        , Network.AWS.EC2.CreateSnapshot
-        , Network.AWS.EC2.CreateSpotDatafeedSubscription
-        , Network.AWS.EC2.CreateSubnet
-        , Network.AWS.EC2.CreateTags
-        , Network.AWS.EC2.CreateVPC
-        , Network.AWS.EC2.CreateVPCEndpoint
-        , Network.AWS.EC2.CreateVPCPeeringConnection
-        , Network.AWS.EC2.CreateVPNConnection
-        , Network.AWS.EC2.CreateVPNConnectionRoute
-        , Network.AWS.EC2.CreateVPNGateway
-        , Network.AWS.EC2.CreateVolume
-        , Network.AWS.EC2.DeleteCustomerGateway
-        , Network.AWS.EC2.DeleteDHCPOptions
-        , Network.AWS.EC2.DeleteEgressOnlyInternetGateway
-        , Network.AWS.EC2.DeleteFlowLogs
-        , Network.AWS.EC2.DeleteInternetGateway
-        , Network.AWS.EC2.DeleteKeyPair
-        , Network.AWS.EC2.DeleteNatGateway
-        , Network.AWS.EC2.DeleteNetworkACL
-        , Network.AWS.EC2.DeleteNetworkACLEntry
-        , Network.AWS.EC2.DeleteNetworkInterface
-        , Network.AWS.EC2.DeletePlacementGroup
-        , Network.AWS.EC2.DeleteRoute
-        , Network.AWS.EC2.DeleteRouteTable
-        , Network.AWS.EC2.DeleteSecurityGroup
-        , Network.AWS.EC2.DeleteSnapshot
-        , Network.AWS.EC2.DeleteSpotDatafeedSubscription
-        , Network.AWS.EC2.DeleteSubnet
-        , Network.AWS.EC2.DeleteTags
-        , Network.AWS.EC2.DeleteVPC
-        , Network.AWS.EC2.DeleteVPCEndpoints
-        , Network.AWS.EC2.DeleteVPCPeeringConnection
-        , Network.AWS.EC2.DeleteVPNConnection
-        , Network.AWS.EC2.DeleteVPNConnectionRoute
-        , Network.AWS.EC2.DeleteVPNGateway
-        , Network.AWS.EC2.DeleteVolume
-        , Network.AWS.EC2.DeregisterImage
-        , Network.AWS.EC2.DescribeAccountAttributes
-        , Network.AWS.EC2.DescribeAddresses
-        , Network.AWS.EC2.DescribeAvailabilityZones
-        , Network.AWS.EC2.DescribeBundleTasks
-        , Network.AWS.EC2.DescribeClassicLinkInstances
-        , Network.AWS.EC2.DescribeConversionTasks
-        , Network.AWS.EC2.DescribeCustomerGateways
-        , Network.AWS.EC2.DescribeDHCPOptions
-        , Network.AWS.EC2.DescribeEgressOnlyInternetGateways
-        , Network.AWS.EC2.DescribeExportTasks
-        , Network.AWS.EC2.DescribeFlowLogs
-        , Network.AWS.EC2.DescribeHostReservationOfferings
-        , Network.AWS.EC2.DescribeHostReservations
-        , Network.AWS.EC2.DescribeHosts
-        , Network.AWS.EC2.DescribeIdFormat
-        , Network.AWS.EC2.DescribeIdentityIdFormat
-        , Network.AWS.EC2.DescribeImageAttribute
-        , Network.AWS.EC2.DescribeImages
-        , Network.AWS.EC2.DescribeImportImageTasks
-        , Network.AWS.EC2.DescribeImportSnapshotTasks
-        , Network.AWS.EC2.DescribeInstanceAttribute
-        , Network.AWS.EC2.DescribeInstanceStatus
-        , Network.AWS.EC2.DescribeInstances
-        , Network.AWS.EC2.DescribeInternetGateways
-        , Network.AWS.EC2.DescribeKeyPairs
-        , Network.AWS.EC2.DescribeMovingAddresses
-        , Network.AWS.EC2.DescribeNatGateways
-        , Network.AWS.EC2.DescribeNetworkACLs
-        , Network.AWS.EC2.DescribeNetworkInterfaceAttribute
-        , Network.AWS.EC2.DescribeNetworkInterfaces
-        , Network.AWS.EC2.DescribePlacementGroups
-        , Network.AWS.EC2.DescribePrefixLists
-        , Network.AWS.EC2.DescribeRegions
-        , Network.AWS.EC2.DescribeReservedInstances
-        , Network.AWS.EC2.DescribeReservedInstancesListings
-        , Network.AWS.EC2.DescribeReservedInstancesModifications
-        , Network.AWS.EC2.DescribeReservedInstancesOfferings
-        , Network.AWS.EC2.DescribeRouteTables
-        , Network.AWS.EC2.DescribeScheduledInstanceAvailability
-        , Network.AWS.EC2.DescribeScheduledInstances
-        , Network.AWS.EC2.DescribeSecurityGroupReferences
-        , Network.AWS.EC2.DescribeSecurityGroups
-        , Network.AWS.EC2.DescribeSnapshotAttribute
-        , Network.AWS.EC2.DescribeSnapshots
-        , Network.AWS.EC2.DescribeSpotDatafeedSubscription
-        , Network.AWS.EC2.DescribeSpotFleetInstances
-        , Network.AWS.EC2.DescribeSpotFleetRequestHistory
-        , Network.AWS.EC2.DescribeSpotFleetRequests
-        , Network.AWS.EC2.DescribeSpotInstanceRequests
-        , Network.AWS.EC2.DescribeSpotPriceHistory
-        , Network.AWS.EC2.DescribeStaleSecurityGroups
-        , Network.AWS.EC2.DescribeSubnets
-        , Network.AWS.EC2.DescribeTags
-        , Network.AWS.EC2.DescribeVPCAttribute
-        , Network.AWS.EC2.DescribeVPCClassicLink
-        , Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
-        , Network.AWS.EC2.DescribeVPCEndpointServices
-        , Network.AWS.EC2.DescribeVPCEndpoints
-        , Network.AWS.EC2.DescribeVPCPeeringConnections
-        , Network.AWS.EC2.DescribeVPCs
-        , Network.AWS.EC2.DescribeVPNConnections
-        , Network.AWS.EC2.DescribeVPNGateways
-        , Network.AWS.EC2.DescribeVolumeAttribute
-        , Network.AWS.EC2.DescribeVolumeStatus
-        , Network.AWS.EC2.DescribeVolumes
-        , Network.AWS.EC2.DetachClassicLinkVPC
-        , Network.AWS.EC2.DetachInternetGateway
-        , Network.AWS.EC2.DetachNetworkInterface
-        , Network.AWS.EC2.DetachVPNGateway
-        , Network.AWS.EC2.DetachVolume
-        , Network.AWS.EC2.DisableVGWRoutePropagation
-        , Network.AWS.EC2.DisableVPCClassicLink
-        , Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
-        , Network.AWS.EC2.DisassociateAddress
-        , Network.AWS.EC2.DisassociateRouteTable
-        , Network.AWS.EC2.DisassociateSubnetCidrBlock
-        , Network.AWS.EC2.DisassociateVPCCidrBlock
-        , Network.AWS.EC2.EnableVGWRoutePropagation
-        , Network.AWS.EC2.EnableVPCClassicLink
-        , Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
-        , Network.AWS.EC2.EnableVolumeIO
-        , Network.AWS.EC2.GetConsoleOutput
-        , Network.AWS.EC2.GetConsoleScreenshot
-        , Network.AWS.EC2.GetHostReservationPurchasePreview
-        , Network.AWS.EC2.GetPasswordData
-        , Network.AWS.EC2.GetReservedInstancesExchangeQuote
-        , Network.AWS.EC2.ImportImage
-        , Network.AWS.EC2.ImportInstance
-        , Network.AWS.EC2.ImportKeyPair
-        , Network.AWS.EC2.ImportSnapshot
-        , Network.AWS.EC2.ImportVolume
-        , Network.AWS.EC2.ModifyHosts
-        , Network.AWS.EC2.ModifyIdFormat
-        , Network.AWS.EC2.ModifyIdentityIdFormat
-        , Network.AWS.EC2.ModifyImageAttribute
-        , Network.AWS.EC2.ModifyInstanceAttribute
-        , Network.AWS.EC2.ModifyInstancePlacement
-        , Network.AWS.EC2.ModifyNetworkInterfaceAttribute
-        , Network.AWS.EC2.ModifyReservedInstances
-        , Network.AWS.EC2.ModifySnapshotAttribute
-        , Network.AWS.EC2.ModifySpotFleetRequest
-        , Network.AWS.EC2.ModifySubnetAttribute
-        , Network.AWS.EC2.ModifyVPCAttribute
-        , Network.AWS.EC2.ModifyVPCEndpoint
-        , Network.AWS.EC2.ModifyVPCPeeringConnectionOptions
-        , Network.AWS.EC2.ModifyVolumeAttribute
-        , Network.AWS.EC2.MonitorInstances
-        , Network.AWS.EC2.MoveAddressToVPC
-        , Network.AWS.EC2.PurchaseHostReservation
-        , Network.AWS.EC2.PurchaseReservedInstancesOffering
-        , Network.AWS.EC2.PurchaseScheduledInstances
-        , Network.AWS.EC2.RebootInstances
-        , Network.AWS.EC2.RegisterImage
-        , Network.AWS.EC2.RejectVPCPeeringConnection
-        , Network.AWS.EC2.ReleaseAddress
-        , Network.AWS.EC2.ReleaseHosts
-        , Network.AWS.EC2.ReplaceNetworkACLAssociation
-        , Network.AWS.EC2.ReplaceNetworkACLEntry
-        , Network.AWS.EC2.ReplaceRoute
-        , Network.AWS.EC2.ReplaceRouteTableAssociation
-        , Network.AWS.EC2.ReportInstanceStatus
-        , Network.AWS.EC2.RequestSpotFleet
-        , Network.AWS.EC2.RequestSpotInstances
-        , Network.AWS.EC2.ResetImageAttribute
-        , Network.AWS.EC2.ResetInstanceAttribute
-        , Network.AWS.EC2.ResetNetworkInterfaceAttribute
-        , Network.AWS.EC2.ResetSnapshotAttribute
-        , Network.AWS.EC2.RestoreAddressToClassic
-        , Network.AWS.EC2.RevokeSecurityGroupEgress
-        , Network.AWS.EC2.RevokeSecurityGroupIngress
-        , Network.AWS.EC2.RunInstances
-        , Network.AWS.EC2.RunScheduledInstances
-        , Network.AWS.EC2.StartInstances
-        , Network.AWS.EC2.StopInstances
-        , Network.AWS.EC2.TerminateInstances
-        , Network.AWS.EC2.Types
-        , Network.AWS.EC2.UnassignIPv6Addresses
-        , Network.AWS.EC2.UnassignPrivateIPAddresses
-        , Network.AWS.EC2.UnmonitorInstances
-        , Network.AWS.EC2.Waiters
-
-    other-modules:
-          Network.AWS.EC2.Internal
-        , Network.AWS.EC2.Types.Product
-        , Network.AWS.EC2.Types.Sum
-
-    build-depends:
-          amazonka-core == 1.4.5.*
-        , base          >= 4.7     && < 5
-
-test-suite amazonka-ec2-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
-
-    -- This section is encoded by the template and any modules added by
-    -- hand outside these namespaces will not correctly be added to the
-    -- distribution package.
-    other-modules:
-          Test.AWS.EC2
-        , Test.AWS.Gen.EC2
-        , Test.AWS.EC2.Internal
-
-    build-depends:
-          amazonka-core == 1.4.5.*
-        , amazonka-test == 1.4.5.*
-        , amazonka-ec2 == 1.4.5.*
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+cabal-version:      2.2
+name:               amazonka-ec2
+version:            2.0
+synopsis:           Amazon Elastic Compute Cloud SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2016-11-15@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.EC2.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.EC2" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-ec2
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.EC2
+    Amazonka.EC2.AcceptAddressTransfer
+    Amazonka.EC2.AcceptReservedInstancesExchangeQuote
+    Amazonka.EC2.AcceptTransitGatewayMulticastDomainAssociations
+    Amazonka.EC2.AcceptTransitGatewayPeeringAttachment
+    Amazonka.EC2.AcceptTransitGatewayVpcAttachment
+    Amazonka.EC2.AcceptVpcEndpointConnections
+    Amazonka.EC2.AcceptVpcPeeringConnection
+    Amazonka.EC2.AdvertiseByoipCidr
+    Amazonka.EC2.AllocateAddress
+    Amazonka.EC2.AllocateHosts
+    Amazonka.EC2.AllocateIpamPoolCidr
+    Amazonka.EC2.ApplySecurityGroupsToClientVpnTargetNetwork
+    Amazonka.EC2.AssignIpv6Addresses
+    Amazonka.EC2.AssignPrivateIpAddresses
+    Amazonka.EC2.AssociateAddress
+    Amazonka.EC2.AssociateClientVpnTargetNetwork
+    Amazonka.EC2.AssociateDhcpOptions
+    Amazonka.EC2.AssociateEnclaveCertificateIamRole
+    Amazonka.EC2.AssociateIamInstanceProfile
+    Amazonka.EC2.AssociateInstanceEventWindow
+    Amazonka.EC2.AssociateRouteTable
+    Amazonka.EC2.AssociateSubnetCidrBlock
+    Amazonka.EC2.AssociateTransitGatewayMulticastDomain
+    Amazonka.EC2.AssociateTransitGatewayPolicyTable
+    Amazonka.EC2.AssociateTransitGatewayRouteTable
+    Amazonka.EC2.AssociateTrunkInterface
+    Amazonka.EC2.AssociateVpcCidrBlock
+    Amazonka.EC2.AttachClassicLinkVpc
+    Amazonka.EC2.AttachInternetGateway
+    Amazonka.EC2.AttachNetworkInterface
+    Amazonka.EC2.AttachVerifiedAccessTrustProvider
+    Amazonka.EC2.AttachVolume
+    Amazonka.EC2.AttachVpnGateway
+    Amazonka.EC2.AuthorizeClientVpnIngress
+    Amazonka.EC2.AuthorizeSecurityGroupEgress
+    Amazonka.EC2.AuthorizeSecurityGroupIngress
+    Amazonka.EC2.BundleInstance
+    Amazonka.EC2.CancelBundleTask
+    Amazonka.EC2.CancelCapacityReservation
+    Amazonka.EC2.CancelCapacityReservationFleets
+    Amazonka.EC2.CancelConversionTask
+    Amazonka.EC2.CancelExportTask
+    Amazonka.EC2.CancelImageLaunchPermission
+    Amazonka.EC2.CancelImportTask
+    Amazonka.EC2.CancelReservedInstancesListing
+    Amazonka.EC2.CancelSpotFleetRequests
+    Amazonka.EC2.CancelSpotInstanceRequests
+    Amazonka.EC2.ConfirmProductInstance
+    Amazonka.EC2.CopyFpgaImage
+    Amazonka.EC2.CopyImage
+    Amazonka.EC2.CopySnapshot
+    Amazonka.EC2.CreateCapacityReservation
+    Amazonka.EC2.CreateCapacityReservationFleet
+    Amazonka.EC2.CreateCarrierGateway
+    Amazonka.EC2.CreateClientVpnEndpoint
+    Amazonka.EC2.CreateClientVpnRoute
+    Amazonka.EC2.CreateCoipCidr
+    Amazonka.EC2.CreateCoipPool
+    Amazonka.EC2.CreateCustomerGateway
+    Amazonka.EC2.CreateDefaultSubnet
+    Amazonka.EC2.CreateDefaultVpc
+    Amazonka.EC2.CreateDhcpOptions
+    Amazonka.EC2.CreateEgressOnlyInternetGateway
+    Amazonka.EC2.CreateFleet
+    Amazonka.EC2.CreateFlowLogs
+    Amazonka.EC2.CreateFpgaImage
+    Amazonka.EC2.CreateImage
+    Amazonka.EC2.CreateInstanceEventWindow
+    Amazonka.EC2.CreateInstanceExportTask
+    Amazonka.EC2.CreateInternetGateway
+    Amazonka.EC2.CreateIpam
+    Amazonka.EC2.CreateIpamPool
+    Amazonka.EC2.CreateIpamScope
+    Amazonka.EC2.CreateKeyPair
+    Amazonka.EC2.CreateLaunchTemplate
+    Amazonka.EC2.CreateLaunchTemplateVersion
+    Amazonka.EC2.CreateLocalGatewayRoute
+    Amazonka.EC2.CreateLocalGatewayRouteTable
+    Amazonka.EC2.CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    Amazonka.EC2.CreateLocalGatewayRouteTableVpcAssociation
+    Amazonka.EC2.CreateManagedPrefixList
+    Amazonka.EC2.CreateNatGateway
+    Amazonka.EC2.CreateNetworkAcl
+    Amazonka.EC2.CreateNetworkAclEntry
+    Amazonka.EC2.CreateNetworkInsightsAccessScope
+    Amazonka.EC2.CreateNetworkInsightsPath
+    Amazonka.EC2.CreateNetworkInterface
+    Amazonka.EC2.CreateNetworkInterfacePermission
+    Amazonka.EC2.CreatePlacementGroup
+    Amazonka.EC2.CreatePublicIpv4Pool
+    Amazonka.EC2.CreateReplaceRootVolumeTask
+    Amazonka.EC2.CreateReservedInstancesListing
+    Amazonka.EC2.CreateRestoreImageTask
+    Amazonka.EC2.CreateRoute
+    Amazonka.EC2.CreateRouteTable
+    Amazonka.EC2.CreateSecurityGroup
+    Amazonka.EC2.CreateSnapshot
+    Amazonka.EC2.CreateSnapshots
+    Amazonka.EC2.CreateSpotDatafeedSubscription
+    Amazonka.EC2.CreateStoreImageTask
+    Amazonka.EC2.CreateSubnet
+    Amazonka.EC2.CreateSubnetCidrReservation
+    Amazonka.EC2.CreateTags
+    Amazonka.EC2.CreateTrafficMirrorFilter
+    Amazonka.EC2.CreateTrafficMirrorFilterRule
+    Amazonka.EC2.CreateTrafficMirrorSession
+    Amazonka.EC2.CreateTrafficMirrorTarget
+    Amazonka.EC2.CreateTransitGateway
+    Amazonka.EC2.CreateTransitGatewayConnect
+    Amazonka.EC2.CreateTransitGatewayConnectPeer
+    Amazonka.EC2.CreateTransitGatewayMulticastDomain
+    Amazonka.EC2.CreateTransitGatewayPeeringAttachment
+    Amazonka.EC2.CreateTransitGatewayPolicyTable
+    Amazonka.EC2.CreateTransitGatewayPrefixListReference
+    Amazonka.EC2.CreateTransitGatewayRoute
+    Amazonka.EC2.CreateTransitGatewayRouteTable
+    Amazonka.EC2.CreateTransitGatewayRouteTableAnnouncement
+    Amazonka.EC2.CreateTransitGatewayVpcAttachment
+    Amazonka.EC2.CreateVerifiedAccessEndpoint
+    Amazonka.EC2.CreateVerifiedAccessGroup
+    Amazonka.EC2.CreateVerifiedAccessInstance
+    Amazonka.EC2.CreateVerifiedAccessTrustProvider
+    Amazonka.EC2.CreateVolume
+    Amazonka.EC2.CreateVpc
+    Amazonka.EC2.CreateVpcEndpoint
+    Amazonka.EC2.CreateVpcEndpointConnectionNotification
+    Amazonka.EC2.CreateVpcEndpointServiceConfiguration
+    Amazonka.EC2.CreateVpcPeeringConnection
+    Amazonka.EC2.CreateVpnConnection
+    Amazonka.EC2.CreateVpnConnectionRoute
+    Amazonka.EC2.CreateVpnGateway
+    Amazonka.EC2.DeleteCarrierGateway
+    Amazonka.EC2.DeleteClientVpnEndpoint
+    Amazonka.EC2.DeleteClientVpnRoute
+    Amazonka.EC2.DeleteCoipCidr
+    Amazonka.EC2.DeleteCoipPool
+    Amazonka.EC2.DeleteCustomerGateway
+    Amazonka.EC2.DeleteDhcpOptions
+    Amazonka.EC2.DeleteEgressOnlyInternetGateway
+    Amazonka.EC2.DeleteFleets
+    Amazonka.EC2.DeleteFlowLogs
+    Amazonka.EC2.DeleteFpgaImage
+    Amazonka.EC2.DeleteInstanceEventWindow
+    Amazonka.EC2.DeleteInternetGateway
+    Amazonka.EC2.DeleteIpam
+    Amazonka.EC2.DeleteIpamPool
+    Amazonka.EC2.DeleteIpamScope
+    Amazonka.EC2.DeleteKeyPair
+    Amazonka.EC2.DeleteLaunchTemplate
+    Amazonka.EC2.DeleteLaunchTemplateVersions
+    Amazonka.EC2.DeleteLocalGatewayRoute
+    Amazonka.EC2.DeleteLocalGatewayRouteTable
+    Amazonka.EC2.DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    Amazonka.EC2.DeleteLocalGatewayRouteTableVpcAssociation
+    Amazonka.EC2.DeleteManagedPrefixList
+    Amazonka.EC2.DeleteNatGateway
+    Amazonka.EC2.DeleteNetworkAcl
+    Amazonka.EC2.DeleteNetworkAclEntry
+    Amazonka.EC2.DeleteNetworkInsightsAccessScope
+    Amazonka.EC2.DeleteNetworkInsightsAccessScopeAnalysis
+    Amazonka.EC2.DeleteNetworkInsightsAnalysis
+    Amazonka.EC2.DeleteNetworkInsightsPath
+    Amazonka.EC2.DeleteNetworkInterface
+    Amazonka.EC2.DeleteNetworkInterfacePermission
+    Amazonka.EC2.DeletePlacementGroup
+    Amazonka.EC2.DeletePublicIpv4Pool
+    Amazonka.EC2.DeleteQueuedReservedInstances
+    Amazonka.EC2.DeleteRoute
+    Amazonka.EC2.DeleteRouteTable
+    Amazonka.EC2.DeleteSecurityGroup
+    Amazonka.EC2.DeleteSnapshot
+    Amazonka.EC2.DeleteSpotDatafeedSubscription
+    Amazonka.EC2.DeleteSubnet
+    Amazonka.EC2.DeleteSubnetCidrReservation
+    Amazonka.EC2.DeleteTags
+    Amazonka.EC2.DeleteTrafficMirrorFilter
+    Amazonka.EC2.DeleteTrafficMirrorFilterRule
+    Amazonka.EC2.DeleteTrafficMirrorSession
+    Amazonka.EC2.DeleteTrafficMirrorTarget
+    Amazonka.EC2.DeleteTransitGateway
+    Amazonka.EC2.DeleteTransitGatewayConnect
+    Amazonka.EC2.DeleteTransitGatewayConnectPeer
+    Amazonka.EC2.DeleteTransitGatewayMulticastDomain
+    Amazonka.EC2.DeleteTransitGatewayPeeringAttachment
+    Amazonka.EC2.DeleteTransitGatewayPolicyTable
+    Amazonka.EC2.DeleteTransitGatewayPrefixListReference
+    Amazonka.EC2.DeleteTransitGatewayRoute
+    Amazonka.EC2.DeleteTransitGatewayRouteTable
+    Amazonka.EC2.DeleteTransitGatewayRouteTableAnnouncement
+    Amazonka.EC2.DeleteTransitGatewayVpcAttachment
+    Amazonka.EC2.DeleteVerifiedAccessEndpoint
+    Amazonka.EC2.DeleteVerifiedAccessGroup
+    Amazonka.EC2.DeleteVerifiedAccessInstance
+    Amazonka.EC2.DeleteVerifiedAccessTrustProvider
+    Amazonka.EC2.DeleteVolume
+    Amazonka.EC2.DeleteVpc
+    Amazonka.EC2.DeleteVpcEndpointConnectionNotifications
+    Amazonka.EC2.DeleteVpcEndpoints
+    Amazonka.EC2.DeleteVpcEndpointServiceConfigurations
+    Amazonka.EC2.DeleteVpcPeeringConnection
+    Amazonka.EC2.DeleteVpnConnection
+    Amazonka.EC2.DeleteVpnConnectionRoute
+    Amazonka.EC2.DeleteVpnGateway
+    Amazonka.EC2.DeprovisionByoipCidr
+    Amazonka.EC2.DeprovisionIpamPoolCidr
+    Amazonka.EC2.DeprovisionPublicIpv4PoolCidr
+    Amazonka.EC2.DeregisterImage
+    Amazonka.EC2.DeregisterInstanceEventNotificationAttributes
+    Amazonka.EC2.DeregisterTransitGatewayMulticastGroupMembers
+    Amazonka.EC2.DeregisterTransitGatewayMulticastGroupSources
+    Amazonka.EC2.DescribeAccountAttributes
+    Amazonka.EC2.DescribeAddresses
+    Amazonka.EC2.DescribeAddressesAttribute
+    Amazonka.EC2.DescribeAddressTransfers
+    Amazonka.EC2.DescribeAggregateIdFormat
+    Amazonka.EC2.DescribeAvailabilityZones
+    Amazonka.EC2.DescribeAwsNetworkPerformanceMetricSubscriptions
+    Amazonka.EC2.DescribeBundleTasks
+    Amazonka.EC2.DescribeByoipCidrs
+    Amazonka.EC2.DescribeCapacityReservationFleets
+    Amazonka.EC2.DescribeCapacityReservations
+    Amazonka.EC2.DescribeCarrierGateways
+    Amazonka.EC2.DescribeClassicLinkInstances
+    Amazonka.EC2.DescribeClientVpnAuthorizationRules
+    Amazonka.EC2.DescribeClientVpnConnections
+    Amazonka.EC2.DescribeClientVpnEndpoints
+    Amazonka.EC2.DescribeClientVpnRoutes
+    Amazonka.EC2.DescribeClientVpnTargetNetworks
+    Amazonka.EC2.DescribeCoipPools
+    Amazonka.EC2.DescribeConversionTasks
+    Amazonka.EC2.DescribeCustomerGateways
+    Amazonka.EC2.DescribeDhcpOptions
+    Amazonka.EC2.DescribeEgressOnlyInternetGateways
+    Amazonka.EC2.DescribeElasticGpus
+    Amazonka.EC2.DescribeExportImageTasks
+    Amazonka.EC2.DescribeExportTasks
+    Amazonka.EC2.DescribeFastLaunchImages
+    Amazonka.EC2.DescribeFastSnapshotRestores
+    Amazonka.EC2.DescribeFleetHistory
+    Amazonka.EC2.DescribeFleetInstances
+    Amazonka.EC2.DescribeFleets
+    Amazonka.EC2.DescribeFlowLogs
+    Amazonka.EC2.DescribeFpgaImageAttribute
+    Amazonka.EC2.DescribeFpgaImages
+    Amazonka.EC2.DescribeHostReservationOfferings
+    Amazonka.EC2.DescribeHostReservations
+    Amazonka.EC2.DescribeHosts
+    Amazonka.EC2.DescribeIamInstanceProfileAssociations
+    Amazonka.EC2.DescribeIdentityIdFormat
+    Amazonka.EC2.DescribeIdFormat
+    Amazonka.EC2.DescribeImageAttribute
+    Amazonka.EC2.DescribeImages
+    Amazonka.EC2.DescribeImportImageTasks
+    Amazonka.EC2.DescribeImportSnapshotTasks
+    Amazonka.EC2.DescribeInstanceAttribute
+    Amazonka.EC2.DescribeInstanceCreditSpecifications
+    Amazonka.EC2.DescribeInstanceEventNotificationAttributes
+    Amazonka.EC2.DescribeInstanceEventWindows
+    Amazonka.EC2.DescribeInstances
+    Amazonka.EC2.DescribeInstanceStatus
+    Amazonka.EC2.DescribeInstanceTypeOfferings
+    Amazonka.EC2.DescribeInstanceTypes
+    Amazonka.EC2.DescribeInternetGateways
+    Amazonka.EC2.DescribeIpamPools
+    Amazonka.EC2.DescribeIpams
+    Amazonka.EC2.DescribeIpamScopes
+    Amazonka.EC2.DescribeIpv6Pools
+    Amazonka.EC2.DescribeKeyPairs
+    Amazonka.EC2.DescribeLaunchTemplates
+    Amazonka.EC2.DescribeLaunchTemplateVersions
+    Amazonka.EC2.DescribeLocalGatewayRouteTables
+    Amazonka.EC2.DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+    Amazonka.EC2.DescribeLocalGatewayRouteTableVpcAssociations
+    Amazonka.EC2.DescribeLocalGateways
+    Amazonka.EC2.DescribeLocalGatewayVirtualInterfaceGroups
+    Amazonka.EC2.DescribeLocalGatewayVirtualInterfaces
+    Amazonka.EC2.DescribeManagedPrefixLists
+    Amazonka.EC2.DescribeMovingAddresses
+    Amazonka.EC2.DescribeNatGateways
+    Amazonka.EC2.DescribeNetworkAcls
+    Amazonka.EC2.DescribeNetworkInsightsAccessScopeAnalyses
+    Amazonka.EC2.DescribeNetworkInsightsAccessScopes
+    Amazonka.EC2.DescribeNetworkInsightsAnalyses
+    Amazonka.EC2.DescribeNetworkInsightsPaths
+    Amazonka.EC2.DescribeNetworkInterfaceAttribute
+    Amazonka.EC2.DescribeNetworkInterfacePermissions
+    Amazonka.EC2.DescribeNetworkInterfaces
+    Amazonka.EC2.DescribePlacementGroups
+    Amazonka.EC2.DescribePrefixLists
+    Amazonka.EC2.DescribePrincipalIdFormat
+    Amazonka.EC2.DescribePublicIpv4Pools
+    Amazonka.EC2.DescribeRegions
+    Amazonka.EC2.DescribeReplaceRootVolumeTasks
+    Amazonka.EC2.DescribeReservedInstances
+    Amazonka.EC2.DescribeReservedInstancesListings
+    Amazonka.EC2.DescribeReservedInstancesModifications
+    Amazonka.EC2.DescribeReservedInstancesOfferings
+    Amazonka.EC2.DescribeRouteTables
+    Amazonka.EC2.DescribeScheduledInstanceAvailability
+    Amazonka.EC2.DescribeScheduledInstances
+    Amazonka.EC2.DescribeSecurityGroupReferences
+    Amazonka.EC2.DescribeSecurityGroupRules
+    Amazonka.EC2.DescribeSecurityGroups
+    Amazonka.EC2.DescribeSnapshotAttribute
+    Amazonka.EC2.DescribeSnapshots
+    Amazonka.EC2.DescribeSnapshotTierStatus
+    Amazonka.EC2.DescribeSpotDatafeedSubscription
+    Amazonka.EC2.DescribeSpotFleetInstances
+    Amazonka.EC2.DescribeSpotFleetRequestHistory
+    Amazonka.EC2.DescribeSpotFleetRequests
+    Amazonka.EC2.DescribeSpotInstanceRequests
+    Amazonka.EC2.DescribeSpotPriceHistory
+    Amazonka.EC2.DescribeStaleSecurityGroups
+    Amazonka.EC2.DescribeStoreImageTasks
+    Amazonka.EC2.DescribeSubnets
+    Amazonka.EC2.DescribeTags
+    Amazonka.EC2.DescribeTrafficMirrorFilters
+    Amazonka.EC2.DescribeTrafficMirrorSessions
+    Amazonka.EC2.DescribeTrafficMirrorTargets
+    Amazonka.EC2.DescribeTransitGatewayAttachments
+    Amazonka.EC2.DescribeTransitGatewayConnectPeers
+    Amazonka.EC2.DescribeTransitGatewayConnects
+    Amazonka.EC2.DescribeTransitGatewayMulticastDomains
+    Amazonka.EC2.DescribeTransitGatewayPeeringAttachments
+    Amazonka.EC2.DescribeTransitGatewayPolicyTables
+    Amazonka.EC2.DescribeTransitGatewayRouteTableAnnouncements
+    Amazonka.EC2.DescribeTransitGatewayRouteTables
+    Amazonka.EC2.DescribeTransitGateways
+    Amazonka.EC2.DescribeTransitGatewayVpcAttachments
+    Amazonka.EC2.DescribeTrunkInterfaceAssociations
+    Amazonka.EC2.DescribeVerifiedAccessEndpoints
+    Amazonka.EC2.DescribeVerifiedAccessGroups
+    Amazonka.EC2.DescribeVerifiedAccessInstanceLoggingConfigurations
+    Amazonka.EC2.DescribeVerifiedAccessInstances
+    Amazonka.EC2.DescribeVerifiedAccessTrustProviders
+    Amazonka.EC2.DescribeVolumeAttribute
+    Amazonka.EC2.DescribeVolumes
+    Amazonka.EC2.DescribeVolumesModifications
+    Amazonka.EC2.DescribeVolumeStatus
+    Amazonka.EC2.DescribeVpcAttribute
+    Amazonka.EC2.DescribeVpcClassicLink
+    Amazonka.EC2.DescribeVpcClassicLinkDnsSupport
+    Amazonka.EC2.DescribeVpcEndpointConnectionNotifications
+    Amazonka.EC2.DescribeVpcEndpointConnections
+    Amazonka.EC2.DescribeVpcEndpoints
+    Amazonka.EC2.DescribeVpcEndpointServiceConfigurations
+    Amazonka.EC2.DescribeVpcEndpointServicePermissions
+    Amazonka.EC2.DescribeVpcEndpointServices
+    Amazonka.EC2.DescribeVpcPeeringConnections
+    Amazonka.EC2.DescribeVpcs
+    Amazonka.EC2.DescribeVpnConnections
+    Amazonka.EC2.DescribeVpnGateways
+    Amazonka.EC2.DetachClassicLinkVpc
+    Amazonka.EC2.DetachInternetGateway
+    Amazonka.EC2.DetachNetworkInterface
+    Amazonka.EC2.DetachVerifiedAccessTrustProvider
+    Amazonka.EC2.DetachVolume
+    Amazonka.EC2.DetachVpnGateway
+    Amazonka.EC2.DisableAddressTransfer
+    Amazonka.EC2.DisableAwsNetworkPerformanceMetricSubscription
+    Amazonka.EC2.DisableEbsEncryptionByDefault
+    Amazonka.EC2.DisableFastLaunch
+    Amazonka.EC2.DisableFastSnapshotRestores
+    Amazonka.EC2.DisableImageDeprecation
+    Amazonka.EC2.DisableIpamOrganizationAdminAccount
+    Amazonka.EC2.DisableSerialConsoleAccess
+    Amazonka.EC2.DisableTransitGatewayRouteTablePropagation
+    Amazonka.EC2.DisableVgwRoutePropagation
+    Amazonka.EC2.DisableVpcClassicLink
+    Amazonka.EC2.DisableVpcClassicLinkDnsSupport
+    Amazonka.EC2.DisassociateAddress
+    Amazonka.EC2.DisassociateClientVpnTargetNetwork
+    Amazonka.EC2.DisassociateEnclaveCertificateIamRole
+    Amazonka.EC2.DisassociateIamInstanceProfile
+    Amazonka.EC2.DisassociateInstanceEventWindow
+    Amazonka.EC2.DisassociateRouteTable
+    Amazonka.EC2.DisassociateSubnetCidrBlock
+    Amazonka.EC2.DisassociateTransitGatewayMulticastDomain
+    Amazonka.EC2.DisassociateTransitGatewayPolicyTable
+    Amazonka.EC2.DisassociateTransitGatewayRouteTable
+    Amazonka.EC2.DisassociateTrunkInterface
+    Amazonka.EC2.DisassociateVpcCidrBlock
+    Amazonka.EC2.EnableAddressTransfer
+    Amazonka.EC2.EnableAwsNetworkPerformanceMetricSubscription
+    Amazonka.EC2.EnableEbsEncryptionByDefault
+    Amazonka.EC2.EnableFastLaunch
+    Amazonka.EC2.EnableFastSnapshotRestores
+    Amazonka.EC2.EnableImageDeprecation
+    Amazonka.EC2.EnableIpamOrganizationAdminAccount
+    Amazonka.EC2.EnableReachabilityAnalyzerOrganizationSharing
+    Amazonka.EC2.EnableSerialConsoleAccess
+    Amazonka.EC2.EnableTransitGatewayRouteTablePropagation
+    Amazonka.EC2.EnableVgwRoutePropagation
+    Amazonka.EC2.EnableVolumeIO
+    Amazonka.EC2.EnableVpcClassicLink
+    Amazonka.EC2.EnableVpcClassicLinkDnsSupport
+    Amazonka.EC2.ExportClientVpnClientCertificateRevocationList
+    Amazonka.EC2.ExportClientVpnClientConfiguration
+    Amazonka.EC2.ExportImage
+    Amazonka.EC2.ExportTransitGatewayRoutes
+    Amazonka.EC2.GetAssociatedEnclaveCertificateIamRoles
+    Amazonka.EC2.GetAssociatedIpv6PoolCidrs
+    Amazonka.EC2.GetAwsNetworkPerformanceData
+    Amazonka.EC2.GetCapacityReservationUsage
+    Amazonka.EC2.GetCoipPoolUsage
+    Amazonka.EC2.GetConsoleOutput
+    Amazonka.EC2.GetConsoleScreenshot
+    Amazonka.EC2.GetDefaultCreditSpecification
+    Amazonka.EC2.GetEbsDefaultKmsKeyId
+    Amazonka.EC2.GetEbsEncryptionByDefault
+    Amazonka.EC2.GetFlowLogsIntegrationTemplate
+    Amazonka.EC2.GetGroupsForCapacityReservation
+    Amazonka.EC2.GetHostReservationPurchasePreview
+    Amazonka.EC2.GetInstanceTypesFromInstanceRequirements
+    Amazonka.EC2.GetInstanceUefiData
+    Amazonka.EC2.GetIpamAddressHistory
+    Amazonka.EC2.GetIpamPoolAllocations
+    Amazonka.EC2.GetIpamPoolCidrs
+    Amazonka.EC2.GetIpamResourceCidrs
+    Amazonka.EC2.GetLaunchTemplateData
+    Amazonka.EC2.GetManagedPrefixListAssociations
+    Amazonka.EC2.GetManagedPrefixListEntries
+    Amazonka.EC2.GetNetworkInsightsAccessScopeAnalysisFindings
+    Amazonka.EC2.GetNetworkInsightsAccessScopeContent
+    Amazonka.EC2.GetPasswordData
+    Amazonka.EC2.GetReservedInstancesExchangeQuote
+    Amazonka.EC2.GetSerialConsoleAccessStatus
+    Amazonka.EC2.GetSpotPlacementScores
+    Amazonka.EC2.GetSubnetCidrReservations
+    Amazonka.EC2.GetTransitGatewayAttachmentPropagations
+    Amazonka.EC2.GetTransitGatewayMulticastDomainAssociations
+    Amazonka.EC2.GetTransitGatewayPolicyTableAssociations
+    Amazonka.EC2.GetTransitGatewayPolicyTableEntries
+    Amazonka.EC2.GetTransitGatewayPrefixListReferences
+    Amazonka.EC2.GetTransitGatewayRouteTableAssociations
+    Amazonka.EC2.GetTransitGatewayRouteTablePropagations
+    Amazonka.EC2.GetVerifiedAccessEndpointPolicy
+    Amazonka.EC2.GetVerifiedAccessGroupPolicy
+    Amazonka.EC2.GetVpnConnectionDeviceSampleConfiguration
+    Amazonka.EC2.GetVpnConnectionDeviceTypes
+    Amazonka.EC2.ImportClientVpnClientCertificateRevocationList
+    Amazonka.EC2.ImportImage
+    Amazonka.EC2.ImportInstance
+    Amazonka.EC2.ImportKeyPair
+    Amazonka.EC2.ImportSnapshot
+    Amazonka.EC2.ImportVolume
+    Amazonka.EC2.Internal
+    Amazonka.EC2.Lens
+    Amazonka.EC2.ListImagesInRecycleBin
+    Amazonka.EC2.ListSnapshotsInRecycleBin
+    Amazonka.EC2.ModifyAddressAttribute
+    Amazonka.EC2.ModifyAvailabilityZoneGroup
+    Amazonka.EC2.ModifyCapacityReservation
+    Amazonka.EC2.ModifyCapacityReservationFleet
+    Amazonka.EC2.ModifyClientVpnEndpoint
+    Amazonka.EC2.ModifyDefaultCreditSpecification
+    Amazonka.EC2.ModifyEbsDefaultKmsKeyId
+    Amazonka.EC2.ModifyFleet
+    Amazonka.EC2.ModifyFpgaImageAttribute
+    Amazonka.EC2.ModifyHosts
+    Amazonka.EC2.ModifyIdentityIdFormat
+    Amazonka.EC2.ModifyIdFormat
+    Amazonka.EC2.ModifyImageAttribute
+    Amazonka.EC2.ModifyInstanceAttribute
+    Amazonka.EC2.ModifyInstanceCapacityReservationAttributes
+    Amazonka.EC2.ModifyInstanceCreditSpecification
+    Amazonka.EC2.ModifyInstanceEventStartTime
+    Amazonka.EC2.ModifyInstanceEventWindow
+    Amazonka.EC2.ModifyInstanceMaintenanceOptions
+    Amazonka.EC2.ModifyInstanceMetadataOptions
+    Amazonka.EC2.ModifyInstancePlacement
+    Amazonka.EC2.ModifyIpam
+    Amazonka.EC2.ModifyIpamPool
+    Amazonka.EC2.ModifyIpamResourceCidr
+    Amazonka.EC2.ModifyIpamScope
+    Amazonka.EC2.ModifyLaunchTemplate
+    Amazonka.EC2.ModifyLocalGatewayRoute
+    Amazonka.EC2.ModifyManagedPrefixList
+    Amazonka.EC2.ModifyNetworkInterfaceAttribute
+    Amazonka.EC2.ModifyPrivateDnsNameOptions
+    Amazonka.EC2.ModifyReservedInstances
+    Amazonka.EC2.ModifySecurityGroupRules
+    Amazonka.EC2.ModifySnapshotAttribute
+    Amazonka.EC2.ModifySnapshotTier
+    Amazonka.EC2.ModifySpotFleetRequest
+    Amazonka.EC2.ModifySubnetAttribute
+    Amazonka.EC2.ModifyTrafficMirrorFilterNetworkServices
+    Amazonka.EC2.ModifyTrafficMirrorFilterRule
+    Amazonka.EC2.ModifyTrafficMirrorSession
+    Amazonka.EC2.ModifyTransitGateway
+    Amazonka.EC2.ModifyTransitGatewayPrefixListReference
+    Amazonka.EC2.ModifyTransitGatewayVpcAttachment
+    Amazonka.EC2.ModifyVerifiedAccessEndpoint
+    Amazonka.EC2.ModifyVerifiedAccessEndpointPolicy
+    Amazonka.EC2.ModifyVerifiedAccessGroup
+    Amazonka.EC2.ModifyVerifiedAccessGroupPolicy
+    Amazonka.EC2.ModifyVerifiedAccessInstance
+    Amazonka.EC2.ModifyVerifiedAccessInstanceLoggingConfiguration
+    Amazonka.EC2.ModifyVerifiedAccessTrustProvider
+    Amazonka.EC2.ModifyVolume
+    Amazonka.EC2.ModifyVolumeAttribute
+    Amazonka.EC2.ModifyVpcAttribute
+    Amazonka.EC2.ModifyVpcEndpoint
+    Amazonka.EC2.ModifyVpcEndpointConnectionNotification
+    Amazonka.EC2.ModifyVpcEndpointServiceConfiguration
+    Amazonka.EC2.ModifyVpcEndpointServicePayerResponsibility
+    Amazonka.EC2.ModifyVpcEndpointServicePermissions
+    Amazonka.EC2.ModifyVpcPeeringConnectionOptions
+    Amazonka.EC2.ModifyVpcTenancy
+    Amazonka.EC2.ModifyVpnConnection
+    Amazonka.EC2.ModifyVpnConnectionOptions
+    Amazonka.EC2.ModifyVpnTunnelCertificate
+    Amazonka.EC2.ModifyVpnTunnelOptions
+    Amazonka.EC2.MonitorInstances
+    Amazonka.EC2.MoveAddressToVpc
+    Amazonka.EC2.MoveByoipCidrToIpam
+    Amazonka.EC2.ProvisionByoipCidr
+    Amazonka.EC2.ProvisionIpamPoolCidr
+    Amazonka.EC2.ProvisionPublicIpv4PoolCidr
+    Amazonka.EC2.PurchaseHostReservation
+    Amazonka.EC2.PurchaseReservedInstancesOffering
+    Amazonka.EC2.PurchaseScheduledInstances
+    Amazonka.EC2.RebootInstances
+    Amazonka.EC2.RegisterImage
+    Amazonka.EC2.RegisterInstanceEventNotificationAttributes
+    Amazonka.EC2.RegisterTransitGatewayMulticastGroupMembers
+    Amazonka.EC2.RegisterTransitGatewayMulticastGroupSources
+    Amazonka.EC2.RejectTransitGatewayMulticastDomainAssociations
+    Amazonka.EC2.RejectTransitGatewayPeeringAttachment
+    Amazonka.EC2.RejectTransitGatewayVpcAttachment
+    Amazonka.EC2.RejectVpcEndpointConnections
+    Amazonka.EC2.RejectVpcPeeringConnection
+    Amazonka.EC2.ReleaseAddress
+    Amazonka.EC2.ReleaseHosts
+    Amazonka.EC2.ReleaseIpamPoolAllocation
+    Amazonka.EC2.ReplaceIamInstanceProfileAssociation
+    Amazonka.EC2.ReplaceNetworkAclAssociation
+    Amazonka.EC2.ReplaceNetworkAclEntry
+    Amazonka.EC2.ReplaceRoute
+    Amazonka.EC2.ReplaceRouteTableAssociation
+    Amazonka.EC2.ReplaceTransitGatewayRoute
+    Amazonka.EC2.ReportInstanceStatus
+    Amazonka.EC2.RequestSpotFleet
+    Amazonka.EC2.RequestSpotInstances
+    Amazonka.EC2.ResetAddressAttribute
+    Amazonka.EC2.ResetEbsDefaultKmsKeyId
+    Amazonka.EC2.ResetFpgaImageAttribute
+    Amazonka.EC2.ResetImageAttribute
+    Amazonka.EC2.ResetInstanceAttribute
+    Amazonka.EC2.ResetNetworkInterfaceAttribute
+    Amazonka.EC2.ResetSnapshotAttribute
+    Amazonka.EC2.RestoreAddressToClassic
+    Amazonka.EC2.RestoreImageFromRecycleBin
+    Amazonka.EC2.RestoreManagedPrefixListVersion
+    Amazonka.EC2.RestoreSnapshotFromRecycleBin
+    Amazonka.EC2.RestoreSnapshotTier
+    Amazonka.EC2.RevokeClientVpnIngress
+    Amazonka.EC2.RevokeSecurityGroupEgress
+    Amazonka.EC2.RevokeSecurityGroupIngress
+    Amazonka.EC2.RunInstances
+    Amazonka.EC2.RunScheduledInstances
+    Amazonka.EC2.SearchLocalGatewayRoutes
+    Amazonka.EC2.SearchTransitGatewayMulticastGroups
+    Amazonka.EC2.SearchTransitGatewayRoutes
+    Amazonka.EC2.SendDiagnosticInterrupt
+    Amazonka.EC2.StartInstances
+    Amazonka.EC2.StartNetworkInsightsAccessScopeAnalysis
+    Amazonka.EC2.StartNetworkInsightsAnalysis
+    Amazonka.EC2.StartVpcEndpointServicePrivateDnsVerification
+    Amazonka.EC2.StopInstances
+    Amazonka.EC2.TerminateClientVpnConnections
+    Amazonka.EC2.TerminateInstances
+    Amazonka.EC2.Types
+    Amazonka.EC2.Types.AcceleratorCount
+    Amazonka.EC2.Types.AcceleratorCountRequest
+    Amazonka.EC2.Types.AcceleratorManufacturer
+    Amazonka.EC2.Types.AcceleratorName
+    Amazonka.EC2.Types.AcceleratorTotalMemoryMiB
+    Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest
+    Amazonka.EC2.Types.AcceleratorType
+    Amazonka.EC2.Types.AccessScopeAnalysisFinding
+    Amazonka.EC2.Types.AccessScopePath
+    Amazonka.EC2.Types.AccessScopePathRequest
+    Amazonka.EC2.Types.AccountAttribute
+    Amazonka.EC2.Types.AccountAttributeName
+    Amazonka.EC2.Types.AccountAttributeValue
+    Amazonka.EC2.Types.ActiveInstance
+    Amazonka.EC2.Types.ActivityStatus
+    Amazonka.EC2.Types.AddedPrincipal
+    Amazonka.EC2.Types.AddIpamOperatingRegion
+    Amazonka.EC2.Types.AdditionalDetail
+    Amazonka.EC2.Types.AddPrefixListEntry
+    Amazonka.EC2.Types.Address
+    Amazonka.EC2.Types.AddressAttribute
+    Amazonka.EC2.Types.AddressAttributeName
+    Amazonka.EC2.Types.AddressFamily
+    Amazonka.EC2.Types.AddressStatus
+    Amazonka.EC2.Types.AddressTransfer
+    Amazonka.EC2.Types.AddressTransferStatus
+    Amazonka.EC2.Types.Affinity
+    Amazonka.EC2.Types.AllocationState
+    Amazonka.EC2.Types.AllocationStrategy
+    Amazonka.EC2.Types.AllocationType
+    Amazonka.EC2.Types.AllowedPrincipal
+    Amazonka.EC2.Types.AllowsMultipleInstanceTypes
+    Amazonka.EC2.Types.AlternatePathHint
+    Amazonka.EC2.Types.AnalysisAclRule
+    Amazonka.EC2.Types.AnalysisComponent
+    Amazonka.EC2.Types.AnalysisLoadBalancerListener
+    Amazonka.EC2.Types.AnalysisLoadBalancerTarget
+    Amazonka.EC2.Types.AnalysisPacketHeader
+    Amazonka.EC2.Types.AnalysisRouteTableRoute
+    Amazonka.EC2.Types.AnalysisSecurityGroupRule
+    Amazonka.EC2.Types.AnalysisStatus
+    Amazonka.EC2.Types.ApplianceModeSupportValue
+    Amazonka.EC2.Types.ArchitectureType
+    Amazonka.EC2.Types.ArchitectureValues
+    Amazonka.EC2.Types.AssignedPrivateIpAddress
+    Amazonka.EC2.Types.AssociatedNetworkType
+    Amazonka.EC2.Types.AssociatedRole
+    Amazonka.EC2.Types.AssociatedTargetNetwork
+    Amazonka.EC2.Types.AssociationStatus
+    Amazonka.EC2.Types.AssociationStatusCode
+    Amazonka.EC2.Types.AthenaIntegration
+    Amazonka.EC2.Types.AttachmentEnaSrdSpecification
+    Amazonka.EC2.Types.AttachmentEnaSrdUdpSpecification
+    Amazonka.EC2.Types.AttachmentStatus
+    Amazonka.EC2.Types.AttributeBooleanValue
+    Amazonka.EC2.Types.AttributeValue
+    Amazonka.EC2.Types.AuthorizationRule
+    Amazonka.EC2.Types.AutoAcceptSharedAssociationsValue
+    Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+    Amazonka.EC2.Types.AutoPlacement
+    Amazonka.EC2.Types.AvailabilityZone
+    Amazonka.EC2.Types.AvailabilityZoneMessage
+    Amazonka.EC2.Types.AvailabilityZoneOptInStatus
+    Amazonka.EC2.Types.AvailabilityZoneState
+    Amazonka.EC2.Types.AvailableCapacity
+    Amazonka.EC2.Types.BareMetal
+    Amazonka.EC2.Types.BaselineEbsBandwidthMbps
+    Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest
+    Amazonka.EC2.Types.BatchState
+    Amazonka.EC2.Types.BgpStatus
+    Amazonka.EC2.Types.BlobAttributeValue
+    Amazonka.EC2.Types.BlockDeviceMapping
+    Amazonka.EC2.Types.BootModeType
+    Amazonka.EC2.Types.BootModeValues
+    Amazonka.EC2.Types.BundleTask
+    Amazonka.EC2.Types.BundleTaskError
+    Amazonka.EC2.Types.BundleTaskState
+    Amazonka.EC2.Types.BurstablePerformance
+    Amazonka.EC2.Types.ByoipCidr
+    Amazonka.EC2.Types.ByoipCidrState
+    Amazonka.EC2.Types.CancelBatchErrorCode
+    Amazonka.EC2.Types.CancelCapacityReservationFleetError
+    Amazonka.EC2.Types.CancelledSpotInstanceRequest
+    Amazonka.EC2.Types.CancelSpotFleetRequestsError
+    Amazonka.EC2.Types.CancelSpotFleetRequestsErrorItem
+    Amazonka.EC2.Types.CancelSpotFleetRequestsSuccessItem
+    Amazonka.EC2.Types.CancelSpotInstanceRequestState
+    Amazonka.EC2.Types.CapacityAllocation
+    Amazonka.EC2.Types.CapacityReservation
+    Amazonka.EC2.Types.CapacityReservationFleet
+    Amazonka.EC2.Types.CapacityReservationFleetCancellationState
+    Amazonka.EC2.Types.CapacityReservationFleetState
+    Amazonka.EC2.Types.CapacityReservationGroup
+    Amazonka.EC2.Types.CapacityReservationInstancePlatform
+    Amazonka.EC2.Types.CapacityReservationOptions
+    Amazonka.EC2.Types.CapacityReservationOptionsRequest
+    Amazonka.EC2.Types.CapacityReservationPreference
+    Amazonka.EC2.Types.CapacityReservationSpecification
+    Amazonka.EC2.Types.CapacityReservationSpecificationResponse
+    Amazonka.EC2.Types.CapacityReservationState
+    Amazonka.EC2.Types.CapacityReservationTarget
+    Amazonka.EC2.Types.CapacityReservationTargetResponse
+    Amazonka.EC2.Types.CapacityReservationTenancy
+    Amazonka.EC2.Types.CarrierGateway
+    Amazonka.EC2.Types.CarrierGatewayState
+    Amazonka.EC2.Types.CertificateAuthentication
+    Amazonka.EC2.Types.CertificateAuthenticationRequest
+    Amazonka.EC2.Types.CidrAuthorizationContext
+    Amazonka.EC2.Types.CidrBlock
+    Amazonka.EC2.Types.ClassicLinkDnsSupport
+    Amazonka.EC2.Types.ClassicLinkInstance
+    Amazonka.EC2.Types.ClassicLoadBalancer
+    Amazonka.EC2.Types.ClassicLoadBalancersConfig
+    Amazonka.EC2.Types.ClientCertificateRevocationListStatus
+    Amazonka.EC2.Types.ClientCertificateRevocationListStatusCode
+    Amazonka.EC2.Types.ClientConnectOptions
+    Amazonka.EC2.Types.ClientConnectResponseOptions
+    Amazonka.EC2.Types.ClientData
+    Amazonka.EC2.Types.ClientLoginBannerOptions
+    Amazonka.EC2.Types.ClientLoginBannerResponseOptions
+    Amazonka.EC2.Types.ClientVpnAuthentication
+    Amazonka.EC2.Types.ClientVpnAuthenticationRequest
+    Amazonka.EC2.Types.ClientVpnAuthenticationType
+    Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatus
+    Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatusCode
+    Amazonka.EC2.Types.ClientVpnConnection
+    Amazonka.EC2.Types.ClientVpnConnectionStatus
+    Amazonka.EC2.Types.ClientVpnConnectionStatusCode
+    Amazonka.EC2.Types.ClientVpnEndpoint
+    Amazonka.EC2.Types.ClientVpnEndpointAttributeStatus
+    Amazonka.EC2.Types.ClientVpnEndpointAttributeStatusCode
+    Amazonka.EC2.Types.ClientVpnEndpointStatus
+    Amazonka.EC2.Types.ClientVpnEndpointStatusCode
+    Amazonka.EC2.Types.ClientVpnRoute
+    Amazonka.EC2.Types.ClientVpnRouteStatus
+    Amazonka.EC2.Types.ClientVpnRouteStatusCode
+    Amazonka.EC2.Types.CloudWatchLogOptions
+    Amazonka.EC2.Types.CloudWatchLogOptionsSpecification
+    Amazonka.EC2.Types.CoipAddressUsage
+    Amazonka.EC2.Types.CoipCidr
+    Amazonka.EC2.Types.CoipPool
+    Amazonka.EC2.Types.ConnectionLogOptions
+    Amazonka.EC2.Types.ConnectionLogResponseOptions
+    Amazonka.EC2.Types.ConnectionNotification
+    Amazonka.EC2.Types.ConnectionNotificationState
+    Amazonka.EC2.Types.ConnectionNotificationType
+    Amazonka.EC2.Types.ConnectivityType
+    Amazonka.EC2.Types.ContainerFormat
+    Amazonka.EC2.Types.ConversionTask
+    Amazonka.EC2.Types.ConversionTaskState
+    Amazonka.EC2.Types.CopyTagsFromSource
+    Amazonka.EC2.Types.CpuManufacturer
+    Amazonka.EC2.Types.CpuOptions
+    Amazonka.EC2.Types.CpuOptionsRequest
+    Amazonka.EC2.Types.CreateFleetError
+    Amazonka.EC2.Types.CreateFleetInstance
+    Amazonka.EC2.Types.CreateTransitGatewayConnectRequestOptions
+    Amazonka.EC2.Types.CreateTransitGatewayMulticastDomainRequestOptions
+    Amazonka.EC2.Types.CreateTransitGatewayPeeringAttachmentRequestOptions
+    Amazonka.EC2.Types.CreateTransitGatewayVpcAttachmentRequestOptions
+    Amazonka.EC2.Types.CreateVerifiedAccessEndpointEniOptions
+    Amazonka.EC2.Types.CreateVerifiedAccessEndpointLoadBalancerOptions
+    Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderDeviceOptions
+    Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderOidcOptions
+    Amazonka.EC2.Types.CreateVolumePermission
+    Amazonka.EC2.Types.CreateVolumePermissionModifications
+    Amazonka.EC2.Types.CreditSpecification
+    Amazonka.EC2.Types.CreditSpecificationRequest
+    Amazonka.EC2.Types.CurrencyCodeValues
+    Amazonka.EC2.Types.CustomerGateway
+    Amazonka.EC2.Types.DatafeedSubscriptionState
+    Amazonka.EC2.Types.DataQuery
+    Amazonka.EC2.Types.DataResponse
+    Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+    Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+    Amazonka.EC2.Types.DefaultTargetCapacityType
+    Amazonka.EC2.Types.DeleteFleetError
+    Amazonka.EC2.Types.DeleteFleetErrorCode
+    Amazonka.EC2.Types.DeleteFleetErrorItem
+    Amazonka.EC2.Types.DeleteFleetSuccessItem
+    Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseErrorItem
+    Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseSuccessItem
+    Amazonka.EC2.Types.DeleteQueuedReservedInstancesError
+    Amazonka.EC2.Types.DeleteQueuedReservedInstancesErrorCode
+    Amazonka.EC2.Types.DeregisterInstanceTagAttributeRequest
+    Amazonka.EC2.Types.DescribeFastLaunchImagesSuccessItem
+    Amazonka.EC2.Types.DescribeFastSnapshotRestoreSuccessItem
+    Amazonka.EC2.Types.DescribeFleetError
+    Amazonka.EC2.Types.DescribeFleetsInstances
+    Amazonka.EC2.Types.DestinationFileFormat
+    Amazonka.EC2.Types.DestinationOptionsRequest
+    Amazonka.EC2.Types.DestinationOptionsResponse
+    Amazonka.EC2.Types.DeviceOptions
+    Amazonka.EC2.Types.DeviceTrustProviderType
+    Amazonka.EC2.Types.DeviceType
+    Amazonka.EC2.Types.DhcpConfiguration
+    Amazonka.EC2.Types.DhcpOptions
+    Amazonka.EC2.Types.DirectoryServiceAuthentication
+    Amazonka.EC2.Types.DirectoryServiceAuthenticationRequest
+    Amazonka.EC2.Types.DisableFastSnapshotRestoreErrorItem
+    Amazonka.EC2.Types.DisableFastSnapshotRestoreStateError
+    Amazonka.EC2.Types.DisableFastSnapshotRestoreStateErrorItem
+    Amazonka.EC2.Types.DisableFastSnapshotRestoreSuccessItem
+    Amazonka.EC2.Types.DiskImage
+    Amazonka.EC2.Types.DiskImageDescription
+    Amazonka.EC2.Types.DiskImageDetail
+    Amazonka.EC2.Types.DiskImageFormat
+    Amazonka.EC2.Types.DiskImageVolumeDescription
+    Amazonka.EC2.Types.DiskInfo
+    Amazonka.EC2.Types.DiskType
+    Amazonka.EC2.Types.DnsEntry
+    Amazonka.EC2.Types.DnsNameState
+    Amazonka.EC2.Types.DnsOptions
+    Amazonka.EC2.Types.DnsOptionsSpecification
+    Amazonka.EC2.Types.DnsRecordIpType
+    Amazonka.EC2.Types.DnsServersOptionsModifyStructure
+    Amazonka.EC2.Types.DnsSupportValue
+    Amazonka.EC2.Types.DomainType
+    Amazonka.EC2.Types.DynamicRoutingValue
+    Amazonka.EC2.Types.EbsBlockDevice
+    Amazonka.EC2.Types.EbsEncryptionSupport
+    Amazonka.EC2.Types.EbsInfo
+    Amazonka.EC2.Types.EbsInstanceBlockDevice
+    Amazonka.EC2.Types.EbsInstanceBlockDeviceSpecification
+    Amazonka.EC2.Types.EbsNvmeSupport
+    Amazonka.EC2.Types.EbsOptimizedInfo
+    Amazonka.EC2.Types.EbsOptimizedSupport
+    Amazonka.EC2.Types.EfaInfo
+    Amazonka.EC2.Types.EgressOnlyInternetGateway
+    Amazonka.EC2.Types.ElasticGpuAssociation
+    Amazonka.EC2.Types.ElasticGpuHealth
+    Amazonka.EC2.Types.ElasticGpus
+    Amazonka.EC2.Types.ElasticGpuSpecification
+    Amazonka.EC2.Types.ElasticGpuSpecificationResponse
+    Amazonka.EC2.Types.ElasticGpuState
+    Amazonka.EC2.Types.ElasticGpuStatus
+    Amazonka.EC2.Types.ElasticInferenceAccelerator
+    Amazonka.EC2.Types.ElasticInferenceAcceleratorAssociation
+    Amazonka.EC2.Types.EnableFastSnapshotRestoreErrorItem
+    Amazonka.EC2.Types.EnableFastSnapshotRestoreStateError
+    Amazonka.EC2.Types.EnableFastSnapshotRestoreStateErrorItem
+    Amazonka.EC2.Types.EnableFastSnapshotRestoreSuccessItem
+    Amazonka.EC2.Types.EnaSrdSpecification
+    Amazonka.EC2.Types.EnaSrdUdpSpecification
+    Amazonka.EC2.Types.EnaSupport
+    Amazonka.EC2.Types.EnclaveOptions
+    Amazonka.EC2.Types.EnclaveOptionsRequest
+    Amazonka.EC2.Types.EndDateType
+    Amazonka.EC2.Types.EphemeralNvmeSupport
+    Amazonka.EC2.Types.EventCode
+    Amazonka.EC2.Types.EventInformation
+    Amazonka.EC2.Types.EventType
+    Amazonka.EC2.Types.ExcessCapacityTerminationPolicy
+    Amazonka.EC2.Types.Explanation
+    Amazonka.EC2.Types.ExportEnvironment
+    Amazonka.EC2.Types.ExportImageTask
+    Amazonka.EC2.Types.ExportTask
+    Amazonka.EC2.Types.ExportTaskS3Location
+    Amazonka.EC2.Types.ExportTaskS3LocationRequest
+    Amazonka.EC2.Types.ExportTaskState
+    Amazonka.EC2.Types.ExportToS3Task
+    Amazonka.EC2.Types.ExportToS3TaskSpecification
+    Amazonka.EC2.Types.FailedCapacityReservationFleetCancellationResult
+    Amazonka.EC2.Types.FailedQueuedPurchaseDeletion
+    Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationRequest
+    Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationResponse
+    Amazonka.EC2.Types.FastLaunchResourceType
+    Amazonka.EC2.Types.FastLaunchSnapshotConfigurationRequest
+    Amazonka.EC2.Types.FastLaunchSnapshotConfigurationResponse
+    Amazonka.EC2.Types.FastLaunchStateCode
+    Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+    Amazonka.EC2.Types.FederatedAuthentication
+    Amazonka.EC2.Types.FederatedAuthenticationRequest
+    Amazonka.EC2.Types.Filter
+    Amazonka.EC2.Types.FindingsFound
+    Amazonka.EC2.Types.FleetActivityStatus
+    Amazonka.EC2.Types.FleetCapacityReservation
+    Amazonka.EC2.Types.FleetCapacityReservationTenancy
+    Amazonka.EC2.Types.FleetCapacityReservationUsageStrategy
+    Amazonka.EC2.Types.FleetData
+    Amazonka.EC2.Types.FleetEventType
+    Amazonka.EC2.Types.FleetExcessCapacityTerminationPolicy
+    Amazonka.EC2.Types.FleetInstanceMatchCriteria
+    Amazonka.EC2.Types.FleetLaunchTemplateConfig
+    Amazonka.EC2.Types.FleetLaunchTemplateConfigRequest
+    Amazonka.EC2.Types.FleetLaunchTemplateOverrides
+    Amazonka.EC2.Types.FleetLaunchTemplateOverridesRequest
+    Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+    Amazonka.EC2.Types.FleetLaunchTemplateSpecificationRequest
+    Amazonka.EC2.Types.FleetOnDemandAllocationStrategy
+    Amazonka.EC2.Types.FleetReplacementStrategy
+    Amazonka.EC2.Types.FleetSpotCapacityRebalance
+    Amazonka.EC2.Types.FleetSpotCapacityRebalanceRequest
+    Amazonka.EC2.Types.FleetSpotMaintenanceStrategies
+    Amazonka.EC2.Types.FleetSpotMaintenanceStrategiesRequest
+    Amazonka.EC2.Types.FleetStateCode
+    Amazonka.EC2.Types.FleetType
+    Amazonka.EC2.Types.FlowLog
+    Amazonka.EC2.Types.FlowLogsResourceType
+    Amazonka.EC2.Types.FpgaDeviceInfo
+    Amazonka.EC2.Types.FpgaDeviceMemoryInfo
+    Amazonka.EC2.Types.FpgaImage
+    Amazonka.EC2.Types.FpgaImageAttribute
+    Amazonka.EC2.Types.FpgaImageAttributeName
+    Amazonka.EC2.Types.FpgaImageState
+    Amazonka.EC2.Types.FpgaImageStateCode
+    Amazonka.EC2.Types.FpgaInfo
+    Amazonka.EC2.Types.GatewayAssociationState
+    Amazonka.EC2.Types.GatewayType
+    Amazonka.EC2.Types.GpuDeviceInfo
+    Amazonka.EC2.Types.GpuDeviceMemoryInfo
+    Amazonka.EC2.Types.GpuInfo
+    Amazonka.EC2.Types.GroupIdentifier
+    Amazonka.EC2.Types.HibernationOptions
+    Amazonka.EC2.Types.HibernationOptionsRequest
+    Amazonka.EC2.Types.HistoryRecord
+    Amazonka.EC2.Types.HistoryRecordEntry
+    Amazonka.EC2.Types.Host
+    Amazonka.EC2.Types.HostInstance
+    Amazonka.EC2.Types.HostnameType
+    Amazonka.EC2.Types.HostOffering
+    Amazonka.EC2.Types.HostProperties
+    Amazonka.EC2.Types.HostRecovery
+    Amazonka.EC2.Types.HostReservation
+    Amazonka.EC2.Types.HostTenancy
+    Amazonka.EC2.Types.HttpTokensState
+    Amazonka.EC2.Types.HypervisorType
+    Amazonka.EC2.Types.IamInstanceProfile
+    Amazonka.EC2.Types.IamInstanceProfileAssociation
+    Amazonka.EC2.Types.IamInstanceProfileAssociationState
+    Amazonka.EC2.Types.IamInstanceProfileSpecification
+    Amazonka.EC2.Types.IcmpTypeCode
+    Amazonka.EC2.Types.IdFormat
+    Amazonka.EC2.Types.Igmpv2SupportValue
+    Amazonka.EC2.Types.IKEVersionsListValue
+    Amazonka.EC2.Types.IKEVersionsRequestListValue
+    Amazonka.EC2.Types.Image
+    Amazonka.EC2.Types.ImageAttributeName
+    Amazonka.EC2.Types.ImageDiskContainer
+    Amazonka.EC2.Types.ImageRecycleBinInfo
+    Amazonka.EC2.Types.ImageState
+    Amazonka.EC2.Types.ImageTypeValues
+    Amazonka.EC2.Types.ImdsSupportValues
+    Amazonka.EC2.Types.ImportImageLicenseConfigurationRequest
+    Amazonka.EC2.Types.ImportImageLicenseConfigurationResponse
+    Amazonka.EC2.Types.ImportImageTask
+    Amazonka.EC2.Types.ImportInstanceLaunchSpecification
+    Amazonka.EC2.Types.ImportInstanceTaskDetails
+    Amazonka.EC2.Types.ImportInstanceVolumeDetailItem
+    Amazonka.EC2.Types.ImportSnapshotTask
+    Amazonka.EC2.Types.ImportVolumeTaskDetails
+    Amazonka.EC2.Types.InferenceAcceleratorInfo
+    Amazonka.EC2.Types.InferenceDeviceInfo
+    Amazonka.EC2.Types.Instance
+    Amazonka.EC2.Types.InstanceAttributeName
+    Amazonka.EC2.Types.InstanceAutoRecoveryState
+    Amazonka.EC2.Types.InstanceBlockDeviceMapping
+    Amazonka.EC2.Types.InstanceBlockDeviceMappingSpecification
+    Amazonka.EC2.Types.InstanceCapacity
+    Amazonka.EC2.Types.InstanceCount
+    Amazonka.EC2.Types.InstanceCreditSpecification
+    Amazonka.EC2.Types.InstanceCreditSpecificationRequest
+    Amazonka.EC2.Types.InstanceEventWindow
+    Amazonka.EC2.Types.InstanceEventWindowAssociationRequest
+    Amazonka.EC2.Types.InstanceEventWindowAssociationTarget
+    Amazonka.EC2.Types.InstanceEventWindowDisassociationRequest
+    Amazonka.EC2.Types.InstanceEventWindowState
+    Amazonka.EC2.Types.InstanceEventWindowStateChange
+    Amazonka.EC2.Types.InstanceEventWindowTimeRange
+    Amazonka.EC2.Types.InstanceEventWindowTimeRangeRequest
+    Amazonka.EC2.Types.InstanceExportDetails
+    Amazonka.EC2.Types.InstanceFamilyCreditSpecification
+    Amazonka.EC2.Types.InstanceGeneration
+    Amazonka.EC2.Types.InstanceHealthStatus
+    Amazonka.EC2.Types.InstanceInterruptionBehavior
+    Amazonka.EC2.Types.InstanceIpv4Prefix
+    Amazonka.EC2.Types.InstanceIpv6Address
+    Amazonka.EC2.Types.InstanceIpv6AddressRequest
+    Amazonka.EC2.Types.InstanceIpv6Prefix
+    Amazonka.EC2.Types.InstanceLifecycle
+    Amazonka.EC2.Types.InstanceLifecycleType
+    Amazonka.EC2.Types.InstanceMaintenanceOptions
+    Amazonka.EC2.Types.InstanceMaintenanceOptionsRequest
+    Amazonka.EC2.Types.InstanceMarketOptionsRequest
+    Amazonka.EC2.Types.InstanceMatchCriteria
+    Amazonka.EC2.Types.InstanceMetadataEndpointState
+    Amazonka.EC2.Types.InstanceMetadataOptionsRequest
+    Amazonka.EC2.Types.InstanceMetadataOptionsResponse
+    Amazonka.EC2.Types.InstanceMetadataOptionsState
+    Amazonka.EC2.Types.InstanceMetadataProtocolState
+    Amazonka.EC2.Types.InstanceMetadataTagsState
+    Amazonka.EC2.Types.InstanceMonitoring
+    Amazonka.EC2.Types.InstanceNetworkInterface
+    Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation
+    Amazonka.EC2.Types.InstanceNetworkInterfaceAttachment
+    Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+    Amazonka.EC2.Types.InstancePrivateIpAddress
+    Amazonka.EC2.Types.InstanceRequirements
+    Amazonka.EC2.Types.InstanceRequirementsRequest
+    Amazonka.EC2.Types.InstanceRequirementsWithMetadataRequest
+    Amazonka.EC2.Types.InstanceSpecification
+    Amazonka.EC2.Types.InstanceState
+    Amazonka.EC2.Types.InstanceStateChange
+    Amazonka.EC2.Types.InstanceStateName
+    Amazonka.EC2.Types.InstanceStatus
+    Amazonka.EC2.Types.InstanceStatusDetails
+    Amazonka.EC2.Types.InstanceStatusEvent
+    Amazonka.EC2.Types.InstanceStatusSummary
+    Amazonka.EC2.Types.InstanceStorageEncryptionSupport
+    Amazonka.EC2.Types.InstanceStorageInfo
+    Amazonka.EC2.Types.InstanceTagNotificationAttribute
+    Amazonka.EC2.Types.InstanceType
+    Amazonka.EC2.Types.InstanceTypeHypervisor
+    Amazonka.EC2.Types.InstanceTypeInfo
+    Amazonka.EC2.Types.InstanceTypeInfoFromInstanceRequirements
+    Amazonka.EC2.Types.InstanceTypeOffering
+    Amazonka.EC2.Types.InstanceUsage
+    Amazonka.EC2.Types.IntegrateServices
+    Amazonka.EC2.Types.InterfacePermissionType
+    Amazonka.EC2.Types.InterfaceProtocolType
+    Amazonka.EC2.Types.InternetGateway
+    Amazonka.EC2.Types.InternetGatewayAttachment
+    Amazonka.EC2.Types.IpAddressType
+    Amazonka.EC2.Types.Ipam
+    Amazonka.EC2.Types.IpamAddressHistoryRecord
+    Amazonka.EC2.Types.IpamAddressHistoryResourceType
+    Amazonka.EC2.Types.IpamCidrAuthorizationContext
+    Amazonka.EC2.Types.IpamComplianceStatus
+    Amazonka.EC2.Types.IpamManagementState
+    Amazonka.EC2.Types.IpamOperatingRegion
+    Amazonka.EC2.Types.IpamOverlapStatus
+    Amazonka.EC2.Types.IpamPool
+    Amazonka.EC2.Types.IpamPoolAllocation
+    Amazonka.EC2.Types.IpamPoolAllocationResourceType
+    Amazonka.EC2.Types.IpamPoolAwsService
+    Amazonka.EC2.Types.IpamPoolCidr
+    Amazonka.EC2.Types.IpamPoolCidrFailureCode
+    Amazonka.EC2.Types.IpamPoolCidrFailureReason
+    Amazonka.EC2.Types.IpamPoolCidrState
+    Amazonka.EC2.Types.IpamPoolState
+    Amazonka.EC2.Types.IpamResourceCidr
+    Amazonka.EC2.Types.IpamResourceTag
+    Amazonka.EC2.Types.IpamResourceType
+    Amazonka.EC2.Types.IpamScope
+    Amazonka.EC2.Types.IpamScopeState
+    Amazonka.EC2.Types.IpamScopeType
+    Amazonka.EC2.Types.IpamState
+    Amazonka.EC2.Types.IpPermission
+    Amazonka.EC2.Types.IpRange
+    Amazonka.EC2.Types.Ipv4PrefixSpecification
+    Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest
+    Amazonka.EC2.Types.Ipv4PrefixSpecificationResponse
+    Amazonka.EC2.Types.Ipv6CidrAssociation
+    Amazonka.EC2.Types.Ipv6CidrBlock
+    Amazonka.EC2.Types.Ipv6Pool
+    Amazonka.EC2.Types.Ipv6PrefixSpecification
+    Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest
+    Amazonka.EC2.Types.Ipv6PrefixSpecificationResponse
+    Amazonka.EC2.Types.Ipv6Range
+    Amazonka.EC2.Types.Ipv6SupportValue
+    Amazonka.EC2.Types.KeyFormat
+    Amazonka.EC2.Types.KeyPairInfo
+    Amazonka.EC2.Types.KeyType
+    Amazonka.EC2.Types.LastError
+    Amazonka.EC2.Types.LaunchPermission
+    Amazonka.EC2.Types.LaunchPermissionModifications
+    Amazonka.EC2.Types.LaunchSpecification
+    Amazonka.EC2.Types.LaunchTemplate
+    Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+    Amazonka.EC2.Types.LaunchTemplateAutoRecoveryState
+    Amazonka.EC2.Types.LaunchTemplateBlockDeviceMapping
+    Amazonka.EC2.Types.LaunchTemplateBlockDeviceMappingRequest
+    Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationRequest
+    Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationResponse
+    Amazonka.EC2.Types.LaunchTemplateConfig
+    Amazonka.EC2.Types.LaunchTemplateCpuOptions
+    Amazonka.EC2.Types.LaunchTemplateCpuOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateEbsBlockDevice
+    Amazonka.EC2.Types.LaunchTemplateEbsBlockDeviceRequest
+    Amazonka.EC2.Types.LaunchTemplateElasticInferenceAccelerator
+    Amazonka.EC2.Types.LaunchTemplateElasticInferenceAcceleratorResponse
+    Amazonka.EC2.Types.LaunchTemplateEnclaveOptions
+    Amazonka.EC2.Types.LaunchTemplateEnclaveOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateErrorCode
+    Amazonka.EC2.Types.LaunchTemplateHibernationOptions
+    Amazonka.EC2.Types.LaunchTemplateHibernationOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateHttpTokensState
+    Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecification
+    Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecificationRequest
+    Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptions
+    Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptions
+    Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateInstanceMetadataEndpointState
+    Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptions
+    Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsState
+    Amazonka.EC2.Types.LaunchTemplateInstanceMetadataProtocolIpv6
+    Amazonka.EC2.Types.LaunchTemplateInstanceMetadataTagsState
+    Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecification
+    Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+    Amazonka.EC2.Types.LaunchTemplateLicenseConfiguration
+    Amazonka.EC2.Types.LaunchTemplateLicenseConfigurationRequest
+    Amazonka.EC2.Types.LaunchTemplateOverrides
+    Amazonka.EC2.Types.LaunchTemplatePlacement
+    Amazonka.EC2.Types.LaunchTemplatePlacementRequest
+    Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptions
+    Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplatesMonitoring
+    Amazonka.EC2.Types.LaunchTemplatesMonitoringRequest
+    Amazonka.EC2.Types.LaunchTemplateSpecification
+    Amazonka.EC2.Types.LaunchTemplateSpotMarketOptions
+    Amazonka.EC2.Types.LaunchTemplateSpotMarketOptionsRequest
+    Amazonka.EC2.Types.LaunchTemplateTagSpecification
+    Amazonka.EC2.Types.LaunchTemplateTagSpecificationRequest
+    Amazonka.EC2.Types.LaunchTemplateVersion
+    Amazonka.EC2.Types.LicenseConfiguration
+    Amazonka.EC2.Types.LicenseConfigurationRequest
+    Amazonka.EC2.Types.ListingState
+    Amazonka.EC2.Types.ListingStatus
+    Amazonka.EC2.Types.LoadBalancersConfig
+    Amazonka.EC2.Types.LoadPermission
+    Amazonka.EC2.Types.LoadPermissionModifications
+    Amazonka.EC2.Types.LoadPermissionRequest
+    Amazonka.EC2.Types.LocalGateway
+    Amazonka.EC2.Types.LocalGatewayRoute
+    Amazonka.EC2.Types.LocalGatewayRouteState
+    Amazonka.EC2.Types.LocalGatewayRouteTable
+    Amazonka.EC2.Types.LocalGatewayRouteTableMode
+    Amazonka.EC2.Types.LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    Amazonka.EC2.Types.LocalGatewayRouteTableVpcAssociation
+    Amazonka.EC2.Types.LocalGatewayRouteType
+    Amazonka.EC2.Types.LocalGatewayVirtualInterface
+    Amazonka.EC2.Types.LocalGatewayVirtualInterfaceGroup
+    Amazonka.EC2.Types.LocalStorage
+    Amazonka.EC2.Types.LocalStorageType
+    Amazonka.EC2.Types.LocationType
+    Amazonka.EC2.Types.LogDestinationType
+    Amazonka.EC2.Types.ManagedPrefixList
+    Amazonka.EC2.Types.MarketType
+    Amazonka.EC2.Types.MembershipType
+    Amazonka.EC2.Types.MemoryGiBPerVCpu
+    Amazonka.EC2.Types.MemoryGiBPerVCpuRequest
+    Amazonka.EC2.Types.MemoryInfo
+    Amazonka.EC2.Types.MemoryMiB
+    Amazonka.EC2.Types.MemoryMiBRequest
+    Amazonka.EC2.Types.MetricPoint
+    Amazonka.EC2.Types.MetricType
+    Amazonka.EC2.Types.ModifyAvailabilityZoneOptInStatus
+    Amazonka.EC2.Types.ModifyTransitGatewayOptions
+    Amazonka.EC2.Types.ModifyTransitGatewayVpcAttachmentRequestOptions
+    Amazonka.EC2.Types.ModifyVerifiedAccessEndpointEniOptions
+    Amazonka.EC2.Types.ModifyVerifiedAccessEndpointLoadBalancerOptions
+    Amazonka.EC2.Types.ModifyVerifiedAccessTrustProviderOidcOptions
+    Amazonka.EC2.Types.ModifyVpnTunnelOptionsSpecification
+    Amazonka.EC2.Types.Monitoring
+    Amazonka.EC2.Types.MonitoringState
+    Amazonka.EC2.Types.MoveStatus
+    Amazonka.EC2.Types.MovingAddressStatus
+    Amazonka.EC2.Types.MulticastSupportValue
+    Amazonka.EC2.Types.NatGateway
+    Amazonka.EC2.Types.NatGatewayAddress
+    Amazonka.EC2.Types.NatGatewayState
+    Amazonka.EC2.Types.NetworkAcl
+    Amazonka.EC2.Types.NetworkAclAssociation
+    Amazonka.EC2.Types.NetworkAclEntry
+    Amazonka.EC2.Types.NetworkBandwidthGbps
+    Amazonka.EC2.Types.NetworkBandwidthGbpsRequest
+    Amazonka.EC2.Types.NetworkCardInfo
+    Amazonka.EC2.Types.NetworkInfo
+    Amazonka.EC2.Types.NetworkInsightsAccessScope
+    Amazonka.EC2.Types.NetworkInsightsAccessScopeAnalysis
+    Amazonka.EC2.Types.NetworkInsightsAccessScopeContent
+    Amazonka.EC2.Types.NetworkInsightsAnalysis
+    Amazonka.EC2.Types.NetworkInsightsPath
+    Amazonka.EC2.Types.NetworkInterface
+    Amazonka.EC2.Types.NetworkInterfaceAssociation
+    Amazonka.EC2.Types.NetworkInterfaceAttachment
+    Amazonka.EC2.Types.NetworkInterfaceAttachmentChanges
+    Amazonka.EC2.Types.NetworkInterfaceAttribute
+    Amazonka.EC2.Types.NetworkInterfaceCount
+    Amazonka.EC2.Types.NetworkInterfaceCountRequest
+    Amazonka.EC2.Types.NetworkInterfaceCreationType
+    Amazonka.EC2.Types.NetworkInterfaceIpv6Address
+    Amazonka.EC2.Types.NetworkInterfacePermission
+    Amazonka.EC2.Types.NetworkInterfacePermissionState
+    Amazonka.EC2.Types.NetworkInterfacePermissionStateCode
+    Amazonka.EC2.Types.NetworkInterfacePrivateIpAddress
+    Amazonka.EC2.Types.NetworkInterfaceStatus
+    Amazonka.EC2.Types.NetworkInterfaceType
+    Amazonka.EC2.Types.NewDhcpConfiguration
+    Amazonka.EC2.Types.OfferingClassType
+    Amazonka.EC2.Types.OfferingTypeValues
+    Amazonka.EC2.Types.OidcOptions
+    Amazonka.EC2.Types.OnDemandAllocationStrategy
+    Amazonka.EC2.Types.OnDemandOptions
+    Amazonka.EC2.Types.OnDemandOptionsRequest
+    Amazonka.EC2.Types.OperationType
+    Amazonka.EC2.Types.PacketHeaderStatement
+    Amazonka.EC2.Types.PacketHeaderStatementRequest
+    Amazonka.EC2.Types.PartitionLoadFrequency
+    Amazonka.EC2.Types.PathComponent
+    Amazonka.EC2.Types.PathStatement
+    Amazonka.EC2.Types.PathStatementRequest
+    Amazonka.EC2.Types.PayerResponsibility
+    Amazonka.EC2.Types.PaymentOption
+    Amazonka.EC2.Types.PciId
+    Amazonka.EC2.Types.PeeringAttachmentStatus
+    Amazonka.EC2.Types.PeeringConnectionOptions
+    Amazonka.EC2.Types.PeeringConnectionOptionsRequest
+    Amazonka.EC2.Types.PeeringTgwInfo
+    Amazonka.EC2.Types.PeriodType
+    Amazonka.EC2.Types.PermissionGroup
+    Amazonka.EC2.Types.Phase1DHGroupNumbersListValue
+    Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue
+    Amazonka.EC2.Types.Phase1EncryptionAlgorithmsListValue
+    Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue
+    Amazonka.EC2.Types.Phase1IntegrityAlgorithmsListValue
+    Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue
+    Amazonka.EC2.Types.Phase2DHGroupNumbersListValue
+    Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue
+    Amazonka.EC2.Types.Phase2EncryptionAlgorithmsListValue
+    Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue
+    Amazonka.EC2.Types.Phase2IntegrityAlgorithmsListValue
+    Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue
+    Amazonka.EC2.Types.Placement
+    Amazonka.EC2.Types.PlacementGroup
+    Amazonka.EC2.Types.PlacementGroupInfo
+    Amazonka.EC2.Types.PlacementGroupState
+    Amazonka.EC2.Types.PlacementGroupStrategy
+    Amazonka.EC2.Types.PlacementResponse
+    Amazonka.EC2.Types.PlacementStrategy
+    Amazonka.EC2.Types.PlatformValues
+    Amazonka.EC2.Types.PoolCidrBlock
+    Amazonka.EC2.Types.PortRange
+    Amazonka.EC2.Types.PrefixList
+    Amazonka.EC2.Types.PrefixListAssociation
+    Amazonka.EC2.Types.PrefixListEntry
+    Amazonka.EC2.Types.PrefixListId
+    Amazonka.EC2.Types.PrefixListState
+    Amazonka.EC2.Types.PriceSchedule
+    Amazonka.EC2.Types.PriceScheduleSpecification
+    Amazonka.EC2.Types.PricingDetail
+    Amazonka.EC2.Types.PrincipalIdFormat
+    Amazonka.EC2.Types.PrincipalType
+    Amazonka.EC2.Types.PrivateDnsDetails
+    Amazonka.EC2.Types.PrivateDnsNameConfiguration
+    Amazonka.EC2.Types.PrivateDnsNameOptionsOnLaunch
+    Amazonka.EC2.Types.PrivateDnsNameOptionsRequest
+    Amazonka.EC2.Types.PrivateDnsNameOptionsResponse
+    Amazonka.EC2.Types.PrivateIpAddressSpecification
+    Amazonka.EC2.Types.ProcessorInfo
+    Amazonka.EC2.Types.ProductCode
+    Amazonka.EC2.Types.ProductCodeValues
+    Amazonka.EC2.Types.PropagatingVgw
+    Amazonka.EC2.Types.Protocol
+    Amazonka.EC2.Types.ProtocolValue
+    Amazonka.EC2.Types.ProvisionedBandwidth
+    Amazonka.EC2.Types.PtrUpdateStatus
+    Amazonka.EC2.Types.PublicIpv4Pool
+    Amazonka.EC2.Types.PublicIpv4PoolRange
+    Amazonka.EC2.Types.Purchase
+    Amazonka.EC2.Types.PurchaseRequest
+    Amazonka.EC2.Types.RecurringCharge
+    Amazonka.EC2.Types.RecurringChargeFrequency
+    Amazonka.EC2.Types.ReferencedSecurityGroup
+    Amazonka.EC2.Types.RegionInfo
+    Amazonka.EC2.Types.RegisterInstanceTagAttributeRequest
+    Amazonka.EC2.Types.RemoveIpamOperatingRegion
+    Amazonka.EC2.Types.RemovePrefixListEntry
+    Amazonka.EC2.Types.ReplacementStrategy
+    Amazonka.EC2.Types.ReplaceRootVolumeTask
+    Amazonka.EC2.Types.ReplaceRootVolumeTaskState
+    Amazonka.EC2.Types.ReportInstanceReasonCodes
+    Amazonka.EC2.Types.ReportStatusType
+    Amazonka.EC2.Types.RequestIpamResourceTag
+    Amazonka.EC2.Types.RequestLaunchTemplateData
+    Amazonka.EC2.Types.RequestSpotLaunchSpecification
+    Amazonka.EC2.Types.Reservation
+    Amazonka.EC2.Types.ReservationFleetInstanceSpecification
+    Amazonka.EC2.Types.ReservationState
+    Amazonka.EC2.Types.ReservationValue
+    Amazonka.EC2.Types.ReservedInstanceLimitPrice
+    Amazonka.EC2.Types.ReservedInstanceReservationValue
+    Amazonka.EC2.Types.ReservedInstances
+    Amazonka.EC2.Types.ReservedInstancesConfiguration
+    Amazonka.EC2.Types.ReservedInstancesId
+    Amazonka.EC2.Types.ReservedInstancesListing
+    Amazonka.EC2.Types.ReservedInstancesModification
+    Amazonka.EC2.Types.ReservedInstancesModificationResult
+    Amazonka.EC2.Types.ReservedInstancesOffering
+    Amazonka.EC2.Types.ReservedInstanceState
+    Amazonka.EC2.Types.ResetFpgaImageAttributeName
+    Amazonka.EC2.Types.ResetImageAttributeName
+    Amazonka.EC2.Types.ResourceStatement
+    Amazonka.EC2.Types.ResourceStatementRequest
+    Amazonka.EC2.Types.ResourceType
+    Amazonka.EC2.Types.ResponseError
+    Amazonka.EC2.Types.ResponseLaunchTemplateData
+    Amazonka.EC2.Types.RIProductDescription
+    Amazonka.EC2.Types.RootDeviceType
+    Amazonka.EC2.Types.Route
+    Amazonka.EC2.Types.RouteOrigin
+    Amazonka.EC2.Types.RouteState
+    Amazonka.EC2.Types.RouteTable
+    Amazonka.EC2.Types.RouteTableAssociation
+    Amazonka.EC2.Types.RouteTableAssociationState
+    Amazonka.EC2.Types.RouteTableAssociationStateCode
+    Amazonka.EC2.Types.RuleAction
+    Amazonka.EC2.Types.RunInstancesMonitoringEnabled
+    Amazonka.EC2.Types.S3ObjectTag
+    Amazonka.EC2.Types.S3Storage
+    Amazonka.EC2.Types.ScheduledInstance
+    Amazonka.EC2.Types.ScheduledInstanceAvailability
+    Amazonka.EC2.Types.ScheduledInstanceRecurrence
+    Amazonka.EC2.Types.ScheduledInstanceRecurrenceRequest
+    Amazonka.EC2.Types.ScheduledInstancesBlockDeviceMapping
+    Amazonka.EC2.Types.ScheduledInstancesEbs
+    Amazonka.EC2.Types.ScheduledInstancesIamInstanceProfile
+    Amazonka.EC2.Types.ScheduledInstancesIpv6Address
+    Amazonka.EC2.Types.ScheduledInstancesLaunchSpecification
+    Amazonka.EC2.Types.ScheduledInstancesMonitoring
+    Amazonka.EC2.Types.ScheduledInstancesNetworkInterface
+    Amazonka.EC2.Types.ScheduledInstancesPlacement
+    Amazonka.EC2.Types.ScheduledInstancesPrivateIpAddressConfig
+    Amazonka.EC2.Types.Scope
+    Amazonka.EC2.Types.SecurityGroup
+    Amazonka.EC2.Types.SecurityGroupIdentifier
+    Amazonka.EC2.Types.SecurityGroupReference
+    Amazonka.EC2.Types.SecurityGroupRule
+    Amazonka.EC2.Types.SecurityGroupRuleDescription
+    Amazonka.EC2.Types.SecurityGroupRuleRequest
+    Amazonka.EC2.Types.SecurityGroupRuleUpdate
+    Amazonka.EC2.Types.SelfServicePortal
+    Amazonka.EC2.Types.ServiceConfiguration
+    Amazonka.EC2.Types.ServiceConnectivityType
+    Amazonka.EC2.Types.ServiceDetail
+    Amazonka.EC2.Types.ServiceState
+    Amazonka.EC2.Types.ServiceType
+    Amazonka.EC2.Types.ServiceTypeDetail
+    Amazonka.EC2.Types.ShutdownBehavior
+    Amazonka.EC2.Types.SlotDateTimeRangeRequest
+    Amazonka.EC2.Types.SlotStartTimeRangeRequest
+    Amazonka.EC2.Types.Snapshot
+    Amazonka.EC2.Types.SnapshotAttributeName
+    Amazonka.EC2.Types.SnapshotDetail
+    Amazonka.EC2.Types.SnapshotDiskContainer
+    Amazonka.EC2.Types.SnapshotInfo
+    Amazonka.EC2.Types.SnapshotRecycleBinInfo
+    Amazonka.EC2.Types.SnapshotState
+    Amazonka.EC2.Types.SnapshotTaskDetail
+    Amazonka.EC2.Types.SnapshotTierStatus
+    Amazonka.EC2.Types.SpotAllocationStrategy
+    Amazonka.EC2.Types.SpotCapacityRebalance
+    Amazonka.EC2.Types.SpotDatafeedSubscription
+    Amazonka.EC2.Types.SpotFleetLaunchSpecification
+    Amazonka.EC2.Types.SpotFleetMonitoring
+    Amazonka.EC2.Types.SpotFleetRequestConfig
+    Amazonka.EC2.Types.SpotFleetRequestConfigData
+    Amazonka.EC2.Types.SpotFleetTagSpecification
+    Amazonka.EC2.Types.SpotInstanceInterruptionBehavior
+    Amazonka.EC2.Types.SpotInstanceRequest
+    Amazonka.EC2.Types.SpotInstanceState
+    Amazonka.EC2.Types.SpotInstanceStateFault
+    Amazonka.EC2.Types.SpotInstanceStatus
+    Amazonka.EC2.Types.SpotInstanceType
+    Amazonka.EC2.Types.SpotMaintenanceStrategies
+    Amazonka.EC2.Types.SpotMarketOptions
+    Amazonka.EC2.Types.SpotOptions
+    Amazonka.EC2.Types.SpotOptionsRequest
+    Amazonka.EC2.Types.SpotPlacement
+    Amazonka.EC2.Types.SpotPlacementScore
+    Amazonka.EC2.Types.SpotPrice
+    Amazonka.EC2.Types.SpreadLevel
+    Amazonka.EC2.Types.StaleIpPermission
+    Amazonka.EC2.Types.StaleSecurityGroup
+    Amazonka.EC2.Types.State
+    Amazonka.EC2.Types.StateReason
+    Amazonka.EC2.Types.StaticSourcesSupportValue
+    Amazonka.EC2.Types.StatisticType
+    Amazonka.EC2.Types.StatusName
+    Amazonka.EC2.Types.StatusType
+    Amazonka.EC2.Types.Storage
+    Amazonka.EC2.Types.StorageLocation
+    Amazonka.EC2.Types.StorageTier
+    Amazonka.EC2.Types.StoreImageTaskResult
+    Amazonka.EC2.Types.Subnet
+    Amazonka.EC2.Types.SubnetAssociation
+    Amazonka.EC2.Types.SubnetCidrBlockState
+    Amazonka.EC2.Types.SubnetCidrBlockStateCode
+    Amazonka.EC2.Types.SubnetCidrReservation
+    Amazonka.EC2.Types.SubnetCidrReservationType
+    Amazonka.EC2.Types.SubnetIpv6CidrBlockAssociation
+    Amazonka.EC2.Types.SubnetState
+    Amazonka.EC2.Types.Subscription
+    Amazonka.EC2.Types.SuccessfulInstanceCreditSpecificationItem
+    Amazonka.EC2.Types.SuccessfulQueuedPurchaseDeletion
+    Amazonka.EC2.Types.SummaryStatus
+    Amazonka.EC2.Types.Tag
+    Amazonka.EC2.Types.TagDescription
+    Amazonka.EC2.Types.TagSpecification
+    Amazonka.EC2.Types.TargetCapacitySpecification
+    Amazonka.EC2.Types.TargetCapacitySpecificationRequest
+    Amazonka.EC2.Types.TargetCapacityUnitType
+    Amazonka.EC2.Types.TargetConfiguration
+    Amazonka.EC2.Types.TargetConfigurationRequest
+    Amazonka.EC2.Types.TargetGroup
+    Amazonka.EC2.Types.TargetGroupsConfig
+    Amazonka.EC2.Types.TargetNetwork
+    Amazonka.EC2.Types.TargetReservationValue
+    Amazonka.EC2.Types.TargetStorageTier
+    Amazonka.EC2.Types.TelemetryStatus
+    Amazonka.EC2.Types.Tenancy
+    Amazonka.EC2.Types.TerminateConnectionStatus
+    Amazonka.EC2.Types.ThroughResourcesStatement
+    Amazonka.EC2.Types.ThroughResourcesStatementRequest
+    Amazonka.EC2.Types.TieringOperationStatus
+    Amazonka.EC2.Types.TotalLocalStorageGB
+    Amazonka.EC2.Types.TotalLocalStorageGBRequest
+    Amazonka.EC2.Types.TpmSupportValues
+    Amazonka.EC2.Types.TrafficDirection
+    Amazonka.EC2.Types.TrafficMirrorFilter
+    Amazonka.EC2.Types.TrafficMirrorFilterRule
+    Amazonka.EC2.Types.TrafficMirrorFilterRuleField
+    Amazonka.EC2.Types.TrafficMirrorNetworkService
+    Amazonka.EC2.Types.TrafficMirrorPortRange
+    Amazonka.EC2.Types.TrafficMirrorPortRangeRequest
+    Amazonka.EC2.Types.TrafficMirrorRuleAction
+    Amazonka.EC2.Types.TrafficMirrorSession
+    Amazonka.EC2.Types.TrafficMirrorSessionField
+    Amazonka.EC2.Types.TrafficMirrorTarget
+    Amazonka.EC2.Types.TrafficMirrorTargetType
+    Amazonka.EC2.Types.TrafficType
+    Amazonka.EC2.Types.TransitGateway
+    Amazonka.EC2.Types.TransitGatewayAssociation
+    Amazonka.EC2.Types.TransitGatewayAssociationState
+    Amazonka.EC2.Types.TransitGatewayAttachment
+    Amazonka.EC2.Types.TransitGatewayAttachmentAssociation
+    Amazonka.EC2.Types.TransitGatewayAttachmentBgpConfiguration
+    Amazonka.EC2.Types.TransitGatewayAttachmentPropagation
+    Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+    Amazonka.EC2.Types.TransitGatewayAttachmentState
+    Amazonka.EC2.Types.TransitGatewayConnect
+    Amazonka.EC2.Types.TransitGatewayConnectOptions
+    Amazonka.EC2.Types.TransitGatewayConnectPeer
+    Amazonka.EC2.Types.TransitGatewayConnectPeerConfiguration
+    Amazonka.EC2.Types.TransitGatewayConnectPeerState
+    Amazonka.EC2.Types.TransitGatewayConnectRequestBgpOptions
+    Amazonka.EC2.Types.TransitGatewayMulitcastDomainAssociationState
+    Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupMembers
+    Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupSources
+    Amazonka.EC2.Types.TransitGatewayMulticastDomain
+    Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociation
+    Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociations
+    Amazonka.EC2.Types.TransitGatewayMulticastDomainOptions
+    Amazonka.EC2.Types.TransitGatewayMulticastDomainState
+    Amazonka.EC2.Types.TransitGatewayMulticastGroup
+    Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupMembers
+    Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupSources
+    Amazonka.EC2.Types.TransitGatewayOptions
+    Amazonka.EC2.Types.TransitGatewayPeeringAttachment
+    Amazonka.EC2.Types.TransitGatewayPeeringAttachmentOptions
+    Amazonka.EC2.Types.TransitGatewayPolicyRule
+    Amazonka.EC2.Types.TransitGatewayPolicyRuleMetaData
+    Amazonka.EC2.Types.TransitGatewayPolicyTable
+    Amazonka.EC2.Types.TransitGatewayPolicyTableAssociation
+    Amazonka.EC2.Types.TransitGatewayPolicyTableEntry
+    Amazonka.EC2.Types.TransitGatewayPolicyTableState
+    Amazonka.EC2.Types.TransitGatewayPrefixListAttachment
+    Amazonka.EC2.Types.TransitGatewayPrefixListReference
+    Amazonka.EC2.Types.TransitGatewayPrefixListReferenceState
+    Amazonka.EC2.Types.TransitGatewayPropagation
+    Amazonka.EC2.Types.TransitGatewayPropagationState
+    Amazonka.EC2.Types.TransitGatewayRequestOptions
+    Amazonka.EC2.Types.TransitGatewayRoute
+    Amazonka.EC2.Types.TransitGatewayRouteAttachment
+    Amazonka.EC2.Types.TransitGatewayRouteState
+    Amazonka.EC2.Types.TransitGatewayRouteTable
+    Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncement
+    Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementDirection
+    Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementState
+    Amazonka.EC2.Types.TransitGatewayRouteTableAssociation
+    Amazonka.EC2.Types.TransitGatewayRouteTablePropagation
+    Amazonka.EC2.Types.TransitGatewayRouteTableRoute
+    Amazonka.EC2.Types.TransitGatewayRouteTableState
+    Amazonka.EC2.Types.TransitGatewayRouteType
+    Amazonka.EC2.Types.TransitGatewayState
+    Amazonka.EC2.Types.TransitGatewayVpcAttachment
+    Amazonka.EC2.Types.TransitGatewayVpcAttachmentOptions
+    Amazonka.EC2.Types.TransportProtocol
+    Amazonka.EC2.Types.TrunkInterfaceAssociation
+    Amazonka.EC2.Types.TrustProviderType
+    Amazonka.EC2.Types.TunnelInsideIpVersion
+    Amazonka.EC2.Types.TunnelOption
+    Amazonka.EC2.Types.UnlimitedSupportedInstanceFamily
+    Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationErrorCode
+    Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItem
+    Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItemError
+    Amazonka.EC2.Types.UnsuccessfulItem
+    Amazonka.EC2.Types.UnsuccessfulItemError
+    Amazonka.EC2.Types.UsageClassType
+    Amazonka.EC2.Types.UserBucket
+    Amazonka.EC2.Types.UserBucketDetails
+    Amazonka.EC2.Types.UserData
+    Amazonka.EC2.Types.UserIdGroupPair
+    Amazonka.EC2.Types.UserTrustProviderType
+    Amazonka.EC2.Types.ValidationError
+    Amazonka.EC2.Types.ValidationWarning
+    Amazonka.EC2.Types.VCpuCountRange
+    Amazonka.EC2.Types.VCpuCountRangeRequest
+    Amazonka.EC2.Types.VCpuInfo
+    Amazonka.EC2.Types.VerifiedAccessEndpoint
+    Amazonka.EC2.Types.VerifiedAccessEndpointAttachmentType
+    Amazonka.EC2.Types.VerifiedAccessEndpointEniOptions
+    Amazonka.EC2.Types.VerifiedAccessEndpointLoadBalancerOptions
+    Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+    Amazonka.EC2.Types.VerifiedAccessEndpointStatus
+    Amazonka.EC2.Types.VerifiedAccessEndpointStatusCode
+    Amazonka.EC2.Types.VerifiedAccessEndpointType
+    Amazonka.EC2.Types.VerifiedAccessGroup
+    Amazonka.EC2.Types.VerifiedAccessInstance
+    Amazonka.EC2.Types.VerifiedAccessInstanceLoggingConfiguration
+    Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestination
+    Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestinationOptions
+    Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+    Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatusCode
+    Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestination
+    Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+    Amazonka.EC2.Types.VerifiedAccessLogOptions
+    Amazonka.EC2.Types.VerifiedAccessLogs
+    Amazonka.EC2.Types.VerifiedAccessLogS3Destination
+    Amazonka.EC2.Types.VerifiedAccessLogS3DestinationOptions
+    Amazonka.EC2.Types.VerifiedAccessTrustProvider
+    Amazonka.EC2.Types.VerifiedAccessTrustProviderCondensed
+    Amazonka.EC2.Types.VgwTelemetry
+    Amazonka.EC2.Types.VirtualizationType
+    Amazonka.EC2.Types.Volume
+    Amazonka.EC2.Types.VolumeAttachment
+    Amazonka.EC2.Types.VolumeAttachmentState
+    Amazonka.EC2.Types.VolumeAttributeName
+    Amazonka.EC2.Types.VolumeDetail
+    Amazonka.EC2.Types.VolumeModification
+    Amazonka.EC2.Types.VolumeModificationState
+    Amazonka.EC2.Types.VolumeState
+    Amazonka.EC2.Types.VolumeStatusAction
+    Amazonka.EC2.Types.VolumeStatusAttachmentStatus
+    Amazonka.EC2.Types.VolumeStatusDetails
+    Amazonka.EC2.Types.VolumeStatusEvent
+    Amazonka.EC2.Types.VolumeStatusInfo
+    Amazonka.EC2.Types.VolumeStatusInfoStatus
+    Amazonka.EC2.Types.VolumeStatusItem
+    Amazonka.EC2.Types.VolumeStatusName
+    Amazonka.EC2.Types.VolumeType
+    Amazonka.EC2.Types.Vpc
+    Amazonka.EC2.Types.VpcAttachment
+    Amazonka.EC2.Types.VpcAttributeName
+    Amazonka.EC2.Types.VpcCidrBlockAssociation
+    Amazonka.EC2.Types.VpcCidrBlockState
+    Amazonka.EC2.Types.VpcCidrBlockStateCode
+    Amazonka.EC2.Types.VpcClassicLink
+    Amazonka.EC2.Types.VpcEndpoint
+    Amazonka.EC2.Types.VpcEndpointConnection
+    Amazonka.EC2.Types.VpcEndpointType
+    Amazonka.EC2.Types.VpcIpv6CidrBlockAssociation
+    Amazonka.EC2.Types.VpcPeeringConnection
+    Amazonka.EC2.Types.VpcPeeringConnectionOptionsDescription
+    Amazonka.EC2.Types.VpcPeeringConnectionStateReason
+    Amazonka.EC2.Types.VpcPeeringConnectionStateReasonCode
+    Amazonka.EC2.Types.VpcPeeringConnectionVpcInfo
+    Amazonka.EC2.Types.VpcState
+    Amazonka.EC2.Types.VpcTenancy
+    Amazonka.EC2.Types.VpnConnection
+    Amazonka.EC2.Types.VpnConnectionDeviceType
+    Amazonka.EC2.Types.VpnConnectionOptions
+    Amazonka.EC2.Types.VpnConnectionOptionsSpecification
+    Amazonka.EC2.Types.VpnEcmpSupportValue
+    Amazonka.EC2.Types.VpnGateway
+    Amazonka.EC2.Types.VpnProtocol
+    Amazonka.EC2.Types.VpnState
+    Amazonka.EC2.Types.VpnStaticRoute
+    Amazonka.EC2.Types.VpnStaticRouteSource
+    Amazonka.EC2.Types.VpnTunnelLogOptions
+    Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification
+    Amazonka.EC2.Types.VpnTunnelOptionsSpecification
+    Amazonka.EC2.Types.WeekDay
+    Amazonka.EC2.UnassignIpv6Addresses
+    Amazonka.EC2.UnassignPrivateIpAddresses
+    Amazonka.EC2.UnmonitorInstances
+    Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsEgress
+    Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsIngress
+    Amazonka.EC2.Waiters
+    Amazonka.EC2.WithdrawByoipCidr
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-ec2-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.EC2
+    Test.Amazonka.EC2.Internal
+    Test.Amazonka.Gen.EC2
+
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-ec2
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AcceptAddressTransfer.yaml b/fixture/AcceptAddressTransfer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptAddressTransfer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptAddressTransferResponse.proto b/fixture/AcceptAddressTransferResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptAddressTransferResponse.proto
diff --git a/fixture/AcceptReservedInstancesExchangeQuote.yaml b/fixture/AcceptReservedInstancesExchangeQuote.yaml
--- a/fixture/AcceptReservedInstancesExchangeQuote.yaml
+++ b/fixture/AcceptReservedInstancesExchangeQuote.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptTransitGatewayMulticastDomainAssociations.yaml b/fixture/AcceptTransitGatewayMulticastDomainAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptTransitGatewayMulticastDomainAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptTransitGatewayMulticastDomainAssociationsResponse.proto b/fixture/AcceptTransitGatewayMulticastDomainAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptTransitGatewayMulticastDomainAssociationsResponse.proto
diff --git a/fixture/AcceptTransitGatewayPeeringAttachment.yaml b/fixture/AcceptTransitGatewayPeeringAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptTransitGatewayPeeringAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptTransitGatewayPeeringAttachmentResponse.proto b/fixture/AcceptTransitGatewayPeeringAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptTransitGatewayPeeringAttachmentResponse.proto
diff --git a/fixture/AcceptTransitGatewayVpcAttachment.yaml b/fixture/AcceptTransitGatewayVpcAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptTransitGatewayVpcAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptTransitGatewayVpcAttachmentResponse.proto b/fixture/AcceptTransitGatewayVpcAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptTransitGatewayVpcAttachmentResponse.proto
diff --git a/fixture/AcceptVPCPeeringConnection.yaml b/fixture/AcceptVPCPeeringConnection.yaml
deleted file mode 100644
--- a/fixture/AcceptVPCPeeringConnection.yaml
+++ /dev/null
diff --git a/fixture/AcceptVPCPeeringConnectionResponse.proto b/fixture/AcceptVPCPeeringConnectionResponse.proto
deleted file mode 100644
--- a/fixture/AcceptVPCPeeringConnectionResponse.proto
+++ /dev/null
diff --git a/fixture/AcceptVpcEndpointConnections.yaml b/fixture/AcceptVpcEndpointConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptVpcEndpointConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptVpcEndpointConnectionsResponse.proto b/fixture/AcceptVpcEndpointConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptVpcEndpointConnectionsResponse.proto
diff --git a/fixture/AcceptVpcPeeringConnection.yaml b/fixture/AcceptVpcPeeringConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptVpcPeeringConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AcceptVpcPeeringConnectionResponse.proto b/fixture/AcceptVpcPeeringConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AcceptVpcPeeringConnectionResponse.proto
diff --git a/fixture/AdvertiseByoipCidr.yaml b/fixture/AdvertiseByoipCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AdvertiseByoipCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AdvertiseByoipCidrResponse.proto b/fixture/AdvertiseByoipCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AdvertiseByoipCidrResponse.proto
diff --git a/fixture/AllocateAddress.yaml b/fixture/AllocateAddress.yaml
--- a/fixture/AllocateAddress.yaml
+++ b/fixture/AllocateAddress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AllocateHosts.yaml b/fixture/AllocateHosts.yaml
--- a/fixture/AllocateHosts.yaml
+++ b/fixture/AllocateHosts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AllocateIpamPoolCidr.yaml b/fixture/AllocateIpamPoolCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AllocateIpamPoolCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AllocateIpamPoolCidrResponse.proto b/fixture/AllocateIpamPoolCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AllocateIpamPoolCidrResponse.proto
diff --git a/fixture/ApplySecurityGroupsToClientVpnTargetNetwork.yaml b/fixture/ApplySecurityGroupsToClientVpnTargetNetwork.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ApplySecurityGroupsToClientVpnTargetNetwork.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ApplySecurityGroupsToClientVpnTargetNetworkResponse.proto b/fixture/ApplySecurityGroupsToClientVpnTargetNetworkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ApplySecurityGroupsToClientVpnTargetNetworkResponse.proto
diff --git a/fixture/AssignIPv6Addresses.yaml b/fixture/AssignIPv6Addresses.yaml
deleted file mode 100644
--- a/fixture/AssignIPv6Addresses.yaml
+++ /dev/null
diff --git a/fixture/AssignIPv6AddressesResponse.proto b/fixture/AssignIPv6AddressesResponse.proto
deleted file mode 100644
--- a/fixture/AssignIPv6AddressesResponse.proto
+++ /dev/null
diff --git a/fixture/AssignIpv6Addresses.yaml b/fixture/AssignIpv6Addresses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssignIpv6Addresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssignIpv6AddressesResponse.proto b/fixture/AssignIpv6AddressesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssignIpv6AddressesResponse.proto
diff --git a/fixture/AssignPrivateIPAddresses.yaml b/fixture/AssignPrivateIPAddresses.yaml
deleted file mode 100644
--- a/fixture/AssignPrivateIPAddresses.yaml
+++ /dev/null
diff --git a/fixture/AssignPrivateIPAddressesResponse.proto b/fixture/AssignPrivateIPAddressesResponse.proto
deleted file mode 100644
--- a/fixture/AssignPrivateIPAddressesResponse.proto
+++ /dev/null
diff --git a/fixture/AssignPrivateIpAddresses.yaml b/fixture/AssignPrivateIpAddresses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssignPrivateIpAddresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssignPrivateIpAddressesResponse.proto b/fixture/AssignPrivateIpAddressesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssignPrivateIpAddressesResponse.proto
diff --git a/fixture/AssociateAddress.yaml b/fixture/AssociateAddress.yaml
--- a/fixture/AssociateAddress.yaml
+++ b/fixture/AssociateAddress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateClientVpnTargetNetwork.yaml b/fixture/AssociateClientVpnTargetNetwork.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateClientVpnTargetNetwork.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateClientVpnTargetNetworkResponse.proto b/fixture/AssociateClientVpnTargetNetworkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateClientVpnTargetNetworkResponse.proto
diff --git a/fixture/AssociateDHCPOptions.yaml b/fixture/AssociateDHCPOptions.yaml
deleted file mode 100644
--- a/fixture/AssociateDHCPOptions.yaml
+++ /dev/null
diff --git a/fixture/AssociateDHCPOptionsResponse.proto b/fixture/AssociateDHCPOptionsResponse.proto
deleted file mode 100644
--- a/fixture/AssociateDHCPOptionsResponse.proto
+++ /dev/null
diff --git a/fixture/AssociateDhcpOptions.yaml b/fixture/AssociateDhcpOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateDhcpOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateDhcpOptionsResponse.proto b/fixture/AssociateDhcpOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateDhcpOptionsResponse.proto
diff --git a/fixture/AssociateEnclaveCertificateIamRole.yaml b/fixture/AssociateEnclaveCertificateIamRole.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateEnclaveCertificateIamRole.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateEnclaveCertificateIamRoleResponse.proto b/fixture/AssociateEnclaveCertificateIamRoleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateEnclaveCertificateIamRoleResponse.proto
diff --git a/fixture/AssociateIamInstanceProfile.yaml b/fixture/AssociateIamInstanceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIamInstanceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateIamInstanceProfileResponse.proto b/fixture/AssociateIamInstanceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateIamInstanceProfileResponse.proto
diff --git a/fixture/AssociateInstanceEventWindow.yaml b/fixture/AssociateInstanceEventWindow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateInstanceEventWindow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateInstanceEventWindowResponse.proto b/fixture/AssociateInstanceEventWindowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateInstanceEventWindowResponse.proto
diff --git a/fixture/AssociateRouteTable.yaml b/fixture/AssociateRouteTable.yaml
--- a/fixture/AssociateRouteTable.yaml
+++ b/fixture/AssociateRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateSubnetCIdRBlock.yaml b/fixture/AssociateSubnetCIdRBlock.yaml
deleted file mode 100644
--- a/fixture/AssociateSubnetCIdRBlock.yaml
+++ /dev/null
diff --git a/fixture/AssociateSubnetCIdRBlockResponse.proto b/fixture/AssociateSubnetCIdRBlockResponse.proto
deleted file mode 100644
--- a/fixture/AssociateSubnetCIdRBlockResponse.proto
+++ /dev/null
diff --git a/fixture/AssociateTransitGatewayMulticastDomain.yaml b/fixture/AssociateTransitGatewayMulticastDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTransitGatewayMulticastDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateTransitGatewayMulticastDomainResponse.proto b/fixture/AssociateTransitGatewayMulticastDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTransitGatewayMulticastDomainResponse.proto
diff --git a/fixture/AssociateTransitGatewayPolicyTable.yaml b/fixture/AssociateTransitGatewayPolicyTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTransitGatewayPolicyTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateTransitGatewayPolicyTableResponse.proto b/fixture/AssociateTransitGatewayPolicyTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTransitGatewayPolicyTableResponse.proto
diff --git a/fixture/AssociateTransitGatewayRouteTable.yaml b/fixture/AssociateTransitGatewayRouteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTransitGatewayRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateTransitGatewayRouteTableResponse.proto b/fixture/AssociateTransitGatewayRouteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTransitGatewayRouteTableResponse.proto
diff --git a/fixture/AssociateTrunkInterface.yaml b/fixture/AssociateTrunkInterface.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTrunkInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateTrunkInterfaceResponse.proto b/fixture/AssociateTrunkInterfaceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateTrunkInterfaceResponse.proto
diff --git a/fixture/AssociateVPCCIdRBlock.yaml b/fixture/AssociateVPCCIdRBlock.yaml
deleted file mode 100644
--- a/fixture/AssociateVPCCIdRBlock.yaml
+++ /dev/null
diff --git a/fixture/AssociateVPCCIdRBlockResponse.proto b/fixture/AssociateVPCCIdRBlockResponse.proto
deleted file mode 100644
--- a/fixture/AssociateVPCCIdRBlockResponse.proto
+++ /dev/null
diff --git a/fixture/AssociateVPCCidrBlock.yaml b/fixture/AssociateVPCCidrBlock.yaml
deleted file mode 100644
--- a/fixture/AssociateVPCCidrBlock.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  ec2.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/AssociateVPCCidrBlockResponse.proto b/fixture/AssociateVPCCidrBlockResponse.proto
deleted file mode 100644
--- a/fixture/AssociateVPCCidrBlockResponse.proto
+++ /dev/null
diff --git a/fixture/AssociateVpcCidrBlock.yaml b/fixture/AssociateVpcCidrBlock.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateVpcCidrBlock.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AssociateVpcCidrBlockResponse.proto b/fixture/AssociateVpcCidrBlockResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateVpcCidrBlockResponse.proto
diff --git a/fixture/AttachClassicLinkVPC.yaml b/fixture/AttachClassicLinkVPC.yaml
deleted file mode 100644
--- a/fixture/AttachClassicLinkVPC.yaml
+++ /dev/null
diff --git a/fixture/AttachClassicLinkVPCResponse.proto b/fixture/AttachClassicLinkVPCResponse.proto
deleted file mode 100644
--- a/fixture/AttachClassicLinkVPCResponse.proto
+++ /dev/null
diff --git a/fixture/AttachClassicLinkVpc.yaml b/fixture/AttachClassicLinkVpc.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AttachClassicLinkVpc.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AttachClassicLinkVpcResponse.proto b/fixture/AttachClassicLinkVpcResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AttachClassicLinkVpcResponse.proto
diff --git a/fixture/AttachInternetGateway.yaml b/fixture/AttachInternetGateway.yaml
--- a/fixture/AttachInternetGateway.yaml
+++ b/fixture/AttachInternetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AttachNetworkInterface.yaml b/fixture/AttachNetworkInterface.yaml
--- a/fixture/AttachNetworkInterface.yaml
+++ b/fixture/AttachNetworkInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AttachVPNGateway.yaml b/fixture/AttachVPNGateway.yaml
deleted file mode 100644
--- a/fixture/AttachVPNGateway.yaml
+++ /dev/null
diff --git a/fixture/AttachVPNGatewayResponse.proto b/fixture/AttachVPNGatewayResponse.proto
deleted file mode 100644
--- a/fixture/AttachVPNGatewayResponse.proto
+++ /dev/null
diff --git a/fixture/AttachVerifiedAccessTrustProvider.yaml b/fixture/AttachVerifiedAccessTrustProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AttachVerifiedAccessTrustProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AttachVerifiedAccessTrustProviderResponse.proto b/fixture/AttachVerifiedAccessTrustProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AttachVerifiedAccessTrustProviderResponse.proto
diff --git a/fixture/AttachVolume.yaml b/fixture/AttachVolume.yaml
--- a/fixture/AttachVolume.yaml
+++ b/fixture/AttachVolume.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AttachVpnGateway.yaml b/fixture/AttachVpnGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AttachVpnGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AttachVpnGatewayResponse.proto b/fixture/AttachVpnGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AttachVpnGatewayResponse.proto
diff --git a/fixture/AuthorizeClientVpnIngress.yaml b/fixture/AuthorizeClientVpnIngress.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AuthorizeClientVpnIngress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AuthorizeClientVpnIngressResponse.proto b/fixture/AuthorizeClientVpnIngressResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AuthorizeClientVpnIngressResponse.proto
diff --git a/fixture/AuthorizeSecurityGroupEgress.yaml b/fixture/AuthorizeSecurityGroupEgress.yaml
--- a/fixture/AuthorizeSecurityGroupEgress.yaml
+++ b/fixture/AuthorizeSecurityGroupEgress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/AuthorizeSecurityGroupIngress.yaml b/fixture/AuthorizeSecurityGroupIngress.yaml
--- a/fixture/AuthorizeSecurityGroupIngress.yaml
+++ b/fixture/AuthorizeSecurityGroupIngress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BundleInstance.yaml b/fixture/BundleInstance.yaml
--- a/fixture/BundleInstance.yaml
+++ b/fixture/BundleInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelBundleTask.yaml b/fixture/CancelBundleTask.yaml
--- a/fixture/CancelBundleTask.yaml
+++ b/fixture/CancelBundleTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelCapacityReservation.yaml b/fixture/CancelCapacityReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelCapacityReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelCapacityReservationFleets.yaml b/fixture/CancelCapacityReservationFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelCapacityReservationFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelCapacityReservationFleetsResponse.proto b/fixture/CancelCapacityReservationFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelCapacityReservationFleetsResponse.proto
diff --git a/fixture/CancelCapacityReservationResponse.proto b/fixture/CancelCapacityReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelCapacityReservationResponse.proto
diff --git a/fixture/CancelConversionTask.yaml b/fixture/CancelConversionTask.yaml
--- a/fixture/CancelConversionTask.yaml
+++ b/fixture/CancelConversionTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelExportTask.yaml b/fixture/CancelExportTask.yaml
--- a/fixture/CancelExportTask.yaml
+++ b/fixture/CancelExportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelImageLaunchPermission.yaml b/fixture/CancelImageLaunchPermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CancelImageLaunchPermission.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelImageLaunchPermissionResponse.proto b/fixture/CancelImageLaunchPermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CancelImageLaunchPermissionResponse.proto
diff --git a/fixture/CancelImportTask.yaml b/fixture/CancelImportTask.yaml
--- a/fixture/CancelImportTask.yaml
+++ b/fixture/CancelImportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelReservedInstancesListing.yaml b/fixture/CancelReservedInstancesListing.yaml
--- a/fixture/CancelReservedInstancesListing.yaml
+++ b/fixture/CancelReservedInstancesListing.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelSpotFleetRequests.yaml b/fixture/CancelSpotFleetRequests.yaml
--- a/fixture/CancelSpotFleetRequests.yaml
+++ b/fixture/CancelSpotFleetRequests.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CancelSpotInstanceRequests.yaml b/fixture/CancelSpotInstanceRequests.yaml
--- a/fixture/CancelSpotInstanceRequests.yaml
+++ b/fixture/CancelSpotInstanceRequests.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ConfirmProductInstance.yaml b/fixture/ConfirmProductInstance.yaml
--- a/fixture/ConfirmProductInstance.yaml
+++ b/fixture/ConfirmProductInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CopyFpgaImage.yaml b/fixture/CopyFpgaImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CopyFpgaImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CopyFpgaImageResponse.proto b/fixture/CopyFpgaImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CopyFpgaImageResponse.proto
diff --git a/fixture/CopyImage.yaml b/fixture/CopyImage.yaml
--- a/fixture/CopyImage.yaml
+++ b/fixture/CopyImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CopySnapshot.yaml b/fixture/CopySnapshot.yaml
--- a/fixture/CopySnapshot.yaml
+++ b/fixture/CopySnapshot.yaml
@@ -1,10 +1,10 @@
 ---
 method: POST
 headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=5ccda6010a55db39bc3e5c2c7dca58074f65f5f6ef570a2f9726caea09fc2d3f
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
   Host:                  ec2.us-east-1.amazonaws.com
   Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  af36e85245bdd28911551faba7ebb9bf1d5f1880d41201d3413d412f738eadc7
+  X-Amz-Content-SHA256:  abcdef
   X-Amz-Date:            20091028T223200Z
 body:
-  Action=CopySnapshot&Description=My_snapshot&SourceRegion=us-west-1&SourceSnapshotId=snap-1a2b3c4d&Version=2016-11-15
+  ''
diff --git a/fixture/CreateCapacityReservation.yaml b/fixture/CreateCapacityReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCapacityReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCapacityReservationFleet.yaml b/fixture/CreateCapacityReservationFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCapacityReservationFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCapacityReservationFleetResponse.proto b/fixture/CreateCapacityReservationFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCapacityReservationFleetResponse.proto
diff --git a/fixture/CreateCapacityReservationResponse.proto b/fixture/CreateCapacityReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCapacityReservationResponse.proto
diff --git a/fixture/CreateCarrierGateway.yaml b/fixture/CreateCarrierGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCarrierGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCarrierGatewayResponse.proto b/fixture/CreateCarrierGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCarrierGatewayResponse.proto
diff --git a/fixture/CreateClientVpnEndpoint.yaml b/fixture/CreateClientVpnEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClientVpnEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateClientVpnEndpointResponse.proto b/fixture/CreateClientVpnEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClientVpnEndpointResponse.proto
diff --git a/fixture/CreateClientVpnRoute.yaml b/fixture/CreateClientVpnRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClientVpnRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateClientVpnRouteResponse.proto b/fixture/CreateClientVpnRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClientVpnRouteResponse.proto
diff --git a/fixture/CreateCoipCidr.yaml b/fixture/CreateCoipCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCoipCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCoipCidrResponse.proto b/fixture/CreateCoipCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCoipCidrResponse.proto
diff --git a/fixture/CreateCoipPool.yaml b/fixture/CreateCoipPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCoipPool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCoipPoolResponse.proto b/fixture/CreateCoipPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCoipPoolResponse.proto
diff --git a/fixture/CreateCustomerGateway.yaml b/fixture/CreateCustomerGateway.yaml
--- a/fixture/CreateCustomerGateway.yaml
+++ b/fixture/CreateCustomerGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDHCPOptions.yaml b/fixture/CreateDHCPOptions.yaml
deleted file mode 100644
--- a/fixture/CreateDHCPOptions.yaml
+++ /dev/null
diff --git a/fixture/CreateDHCPOptionsResponse.proto b/fixture/CreateDHCPOptionsResponse.proto
deleted file mode 100644
--- a/fixture/CreateDHCPOptionsResponse.proto
+++ /dev/null
diff --git a/fixture/CreateDefaultSubnet.yaml b/fixture/CreateDefaultSubnet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDefaultSubnet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDefaultSubnetResponse.proto b/fixture/CreateDefaultSubnetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDefaultSubnetResponse.proto
diff --git a/fixture/CreateDefaultVpc.yaml b/fixture/CreateDefaultVpc.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDefaultVpc.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDefaultVpcResponse.proto b/fixture/CreateDefaultVpcResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDefaultVpcResponse.proto
diff --git a/fixture/CreateDhcpOptions.yaml b/fixture/CreateDhcpOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDhcpOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDhcpOptionsResponse.proto b/fixture/CreateDhcpOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDhcpOptionsResponse.proto
diff --git a/fixture/CreateEgressOnlyInternetGateway.yaml b/fixture/CreateEgressOnlyInternetGateway.yaml
--- a/fixture/CreateEgressOnlyInternetGateway.yaml
+++ b/fixture/CreateEgressOnlyInternetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateFleet.yaml b/fixture/CreateFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateFleetResponse.proto b/fixture/CreateFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleetResponse.proto
diff --git a/fixture/CreateFlowLogs.yaml b/fixture/CreateFlowLogs.yaml
--- a/fixture/CreateFlowLogs.yaml
+++ b/fixture/CreateFlowLogs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateFpgaImage.yaml b/fixture/CreateFpgaImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFpgaImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateFpgaImageResponse.proto b/fixture/CreateFpgaImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFpgaImageResponse.proto
diff --git a/fixture/CreateImage.yaml b/fixture/CreateImage.yaml
--- a/fixture/CreateImage.yaml
+++ b/fixture/CreateImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateInstanceEventWindow.yaml b/fixture/CreateInstanceEventWindow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInstanceEventWindow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateInstanceEventWindowResponse.proto b/fixture/CreateInstanceEventWindowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateInstanceEventWindowResponse.proto
diff --git a/fixture/CreateInstanceExportTask.yaml b/fixture/CreateInstanceExportTask.yaml
--- a/fixture/CreateInstanceExportTask.yaml
+++ b/fixture/CreateInstanceExportTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateInternetGateway.yaml b/fixture/CreateInternetGateway.yaml
--- a/fixture/CreateInternetGateway.yaml
+++ b/fixture/CreateInternetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIpam.yaml b/fixture/CreateIpam.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpam.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIpamPool.yaml b/fixture/CreateIpamPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpamPool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIpamPoolResponse.proto b/fixture/CreateIpamPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpamPoolResponse.proto
diff --git a/fixture/CreateIpamResponse.proto b/fixture/CreateIpamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpamResponse.proto
diff --git a/fixture/CreateIpamScope.yaml b/fixture/CreateIpamScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpamScope.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateIpamScopeResponse.proto b/fixture/CreateIpamScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateIpamScopeResponse.proto
diff --git a/fixture/CreateKeyPair.yaml b/fixture/CreateKeyPair.yaml
--- a/fixture/CreateKeyPair.yaml
+++ b/fixture/CreateKeyPair.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLaunchTemplate.yaml b/fixture/CreateLaunchTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLaunchTemplateResponse.proto b/fixture/CreateLaunchTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchTemplateResponse.proto
diff --git a/fixture/CreateLaunchTemplateVersion.yaml b/fixture/CreateLaunchTemplateVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchTemplateVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLaunchTemplateVersionResponse.proto b/fixture/CreateLaunchTemplateVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLaunchTemplateVersionResponse.proto
diff --git a/fixture/CreateLocalGatewayRoute.yaml b/fixture/CreateLocalGatewayRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLocalGatewayRouteResponse.proto b/fixture/CreateLocalGatewayRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteResponse.proto
diff --git a/fixture/CreateLocalGatewayRouteTable.yaml b/fixture/CreateLocalGatewayRouteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLocalGatewayRouteTableResponse.proto b/fixture/CreateLocalGatewayRouteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteTableResponse.proto
diff --git a/fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml b/fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto b/fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto
diff --git a/fixture/CreateLocalGatewayRouteTableVpcAssociation.yaml b/fixture/CreateLocalGatewayRouteTableVpcAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteTableVpcAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateLocalGatewayRouteTableVpcAssociationResponse.proto b/fixture/CreateLocalGatewayRouteTableVpcAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLocalGatewayRouteTableVpcAssociationResponse.proto
diff --git a/fixture/CreateManagedPrefixList.yaml b/fixture/CreateManagedPrefixList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateManagedPrefixList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateManagedPrefixListResponse.proto b/fixture/CreateManagedPrefixListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateManagedPrefixListResponse.proto
diff --git a/fixture/CreateNatGateway.yaml b/fixture/CreateNatGateway.yaml
--- a/fixture/CreateNatGateway.yaml
+++ b/fixture/CreateNatGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkACL.yaml b/fixture/CreateNetworkACL.yaml
deleted file mode 100644
--- a/fixture/CreateNetworkACL.yaml
+++ /dev/null
diff --git a/fixture/CreateNetworkACLEntry.yaml b/fixture/CreateNetworkACLEntry.yaml
deleted file mode 100644
--- a/fixture/CreateNetworkACLEntry.yaml
+++ /dev/null
diff --git a/fixture/CreateNetworkACLEntryResponse.proto b/fixture/CreateNetworkACLEntryResponse.proto
deleted file mode 100644
--- a/fixture/CreateNetworkACLEntryResponse.proto
+++ /dev/null
diff --git a/fixture/CreateNetworkACLResponse.proto b/fixture/CreateNetworkACLResponse.proto
deleted file mode 100644
--- a/fixture/CreateNetworkACLResponse.proto
+++ /dev/null
diff --git a/fixture/CreateNetworkAcl.yaml b/fixture/CreateNetworkAcl.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkAcl.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkAclEntry.yaml b/fixture/CreateNetworkAclEntry.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkAclEntry.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkAclEntryResponse.proto b/fixture/CreateNetworkAclEntryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkAclEntryResponse.proto
diff --git a/fixture/CreateNetworkAclResponse.proto b/fixture/CreateNetworkAclResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkAclResponse.proto
diff --git a/fixture/CreateNetworkInsightsAccessScope.yaml b/fixture/CreateNetworkInsightsAccessScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkInsightsAccessScope.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkInsightsAccessScopeResponse.proto b/fixture/CreateNetworkInsightsAccessScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkInsightsAccessScopeResponse.proto
diff --git a/fixture/CreateNetworkInsightsPath.yaml b/fixture/CreateNetworkInsightsPath.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkInsightsPath.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkInsightsPathResponse.proto b/fixture/CreateNetworkInsightsPathResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkInsightsPathResponse.proto
diff --git a/fixture/CreateNetworkInterface.yaml b/fixture/CreateNetworkInterface.yaml
--- a/fixture/CreateNetworkInterface.yaml
+++ b/fixture/CreateNetworkInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkInterfacePermission.yaml b/fixture/CreateNetworkInterfacePermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkInterfacePermission.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateNetworkInterfacePermissionResponse.proto b/fixture/CreateNetworkInterfacePermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateNetworkInterfacePermissionResponse.proto
diff --git a/fixture/CreatePlacementGroup.yaml b/fixture/CreatePlacementGroup.yaml
--- a/fixture/CreatePlacementGroup.yaml
+++ b/fixture/CreatePlacementGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreatePublicIpv4Pool.yaml b/fixture/CreatePublicIpv4Pool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePublicIpv4Pool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreatePublicIpv4PoolResponse.proto b/fixture/CreatePublicIpv4PoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePublicIpv4PoolResponse.proto
diff --git a/fixture/CreateReplaceRootVolumeTask.yaml b/fixture/CreateReplaceRootVolumeTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplaceRootVolumeTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateReplaceRootVolumeTaskResponse.proto b/fixture/CreateReplaceRootVolumeTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplaceRootVolumeTaskResponse.proto
diff --git a/fixture/CreateReservedInstancesListing.yaml b/fixture/CreateReservedInstancesListing.yaml
--- a/fixture/CreateReservedInstancesListing.yaml
+++ b/fixture/CreateReservedInstancesListing.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRestoreImageTask.yaml b/fixture/CreateRestoreImageTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRestoreImageTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRestoreImageTaskResponse.proto b/fixture/CreateRestoreImageTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateRestoreImageTaskResponse.proto
diff --git a/fixture/CreateRoute.yaml b/fixture/CreateRoute.yaml
--- a/fixture/CreateRoute.yaml
+++ b/fixture/CreateRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateRouteTable.yaml b/fixture/CreateRouteTable.yaml
--- a/fixture/CreateRouteTable.yaml
+++ b/fixture/CreateRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateSecurityGroup.yaml b/fixture/CreateSecurityGroup.yaml
--- a/fixture/CreateSecurityGroup.yaml
+++ b/fixture/CreateSecurityGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateSnapshot.yaml b/fixture/CreateSnapshot.yaml
--- a/fixture/CreateSnapshot.yaml
+++ b/fixture/CreateSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateSnapshots.yaml b/fixture/CreateSnapshots.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSnapshots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateSnapshotsResponse.proto b/fixture/CreateSnapshotsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSnapshotsResponse.proto
diff --git a/fixture/CreateSpotDatafeedSubscription.yaml b/fixture/CreateSpotDatafeedSubscription.yaml
--- a/fixture/CreateSpotDatafeedSubscription.yaml
+++ b/fixture/CreateSpotDatafeedSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateStoreImageTask.yaml b/fixture/CreateStoreImageTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStoreImageTask.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateStoreImageTaskResponse.proto b/fixture/CreateStoreImageTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateStoreImageTaskResponse.proto
diff --git a/fixture/CreateSubnet.yaml b/fixture/CreateSubnet.yaml
--- a/fixture/CreateSubnet.yaml
+++ b/fixture/CreateSubnet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateSubnetCidrReservation.yaml b/fixture/CreateSubnetCidrReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSubnetCidrReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateSubnetCidrReservationResponse.proto b/fixture/CreateSubnetCidrReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateSubnetCidrReservationResponse.proto
diff --git a/fixture/CreateTags.yaml b/fixture/CreateTags.yaml
--- a/fixture/CreateTags.yaml
+++ b/fixture/CreateTags.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTrafficMirrorFilter.yaml b/fixture/CreateTrafficMirrorFilter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTrafficMirrorFilterResponse.proto b/fixture/CreateTrafficMirrorFilterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorFilterResponse.proto
diff --git a/fixture/CreateTrafficMirrorFilterRule.yaml b/fixture/CreateTrafficMirrorFilterRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorFilterRule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTrafficMirrorFilterRuleResponse.proto b/fixture/CreateTrafficMirrorFilterRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorFilterRuleResponse.proto
diff --git a/fixture/CreateTrafficMirrorSession.yaml b/fixture/CreateTrafficMirrorSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTrafficMirrorSessionResponse.proto b/fixture/CreateTrafficMirrorSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorSessionResponse.proto
diff --git a/fixture/CreateTrafficMirrorTarget.yaml b/fixture/CreateTrafficMirrorTarget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorTarget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTrafficMirrorTargetResponse.proto b/fixture/CreateTrafficMirrorTargetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrafficMirrorTargetResponse.proto
diff --git a/fixture/CreateTransitGateway.yaml b/fixture/CreateTransitGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayConnect.yaml b/fixture/CreateTransitGatewayConnect.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayConnect.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayConnectPeer.yaml b/fixture/CreateTransitGatewayConnectPeer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayConnectPeer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayConnectPeerResponse.proto b/fixture/CreateTransitGatewayConnectPeerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayConnectPeerResponse.proto
diff --git a/fixture/CreateTransitGatewayConnectResponse.proto b/fixture/CreateTransitGatewayConnectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayConnectResponse.proto
diff --git a/fixture/CreateTransitGatewayMulticastDomain.yaml b/fixture/CreateTransitGatewayMulticastDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayMulticastDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayMulticastDomainResponse.proto b/fixture/CreateTransitGatewayMulticastDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayMulticastDomainResponse.proto
diff --git a/fixture/CreateTransitGatewayPeeringAttachment.yaml b/fixture/CreateTransitGatewayPeeringAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayPeeringAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayPeeringAttachmentResponse.proto b/fixture/CreateTransitGatewayPeeringAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayPeeringAttachmentResponse.proto
diff --git a/fixture/CreateTransitGatewayPolicyTable.yaml b/fixture/CreateTransitGatewayPolicyTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayPolicyTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayPolicyTableResponse.proto b/fixture/CreateTransitGatewayPolicyTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayPolicyTableResponse.proto
diff --git a/fixture/CreateTransitGatewayPrefixListReference.yaml b/fixture/CreateTransitGatewayPrefixListReference.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayPrefixListReference.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayPrefixListReferenceResponse.proto b/fixture/CreateTransitGatewayPrefixListReferenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayPrefixListReferenceResponse.proto
diff --git a/fixture/CreateTransitGatewayResponse.proto b/fixture/CreateTransitGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayResponse.proto
diff --git a/fixture/CreateTransitGatewayRoute.yaml b/fixture/CreateTransitGatewayRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayRouteResponse.proto b/fixture/CreateTransitGatewayRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayRouteResponse.proto
diff --git a/fixture/CreateTransitGatewayRouteTable.yaml b/fixture/CreateTransitGatewayRouteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayRouteTableAnnouncement.yaml b/fixture/CreateTransitGatewayRouteTableAnnouncement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayRouteTableAnnouncement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayRouteTableAnnouncementResponse.proto b/fixture/CreateTransitGatewayRouteTableAnnouncementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayRouteTableAnnouncementResponse.proto
diff --git a/fixture/CreateTransitGatewayRouteTableResponse.proto b/fixture/CreateTransitGatewayRouteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayRouteTableResponse.proto
diff --git a/fixture/CreateTransitGatewayVpcAttachment.yaml b/fixture/CreateTransitGatewayVpcAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayVpcAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTransitGatewayVpcAttachmentResponse.proto b/fixture/CreateTransitGatewayVpcAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTransitGatewayVpcAttachmentResponse.proto
diff --git a/fixture/CreateVPC.yaml b/fixture/CreateVPC.yaml
deleted file mode 100644
--- a/fixture/CreateVPC.yaml
+++ /dev/null
diff --git a/fixture/CreateVPCEndpoint.yaml b/fixture/CreateVPCEndpoint.yaml
deleted file mode 100644
--- a/fixture/CreateVPCEndpoint.yaml
+++ /dev/null
diff --git a/fixture/CreateVPCEndpointResponse.proto b/fixture/CreateVPCEndpointResponse.proto
deleted file mode 100644
--- a/fixture/CreateVPCEndpointResponse.proto
+++ /dev/null
diff --git a/fixture/CreateVPCPeeringConnection.yaml b/fixture/CreateVPCPeeringConnection.yaml
deleted file mode 100644
--- a/fixture/CreateVPCPeeringConnection.yaml
+++ /dev/null
diff --git a/fixture/CreateVPCPeeringConnectionResponse.proto b/fixture/CreateVPCPeeringConnectionResponse.proto
deleted file mode 100644
--- a/fixture/CreateVPCPeeringConnectionResponse.proto
+++ /dev/null
diff --git a/fixture/CreateVPCResponse.proto b/fixture/CreateVPCResponse.proto
deleted file mode 100644
--- a/fixture/CreateVPCResponse.proto
+++ /dev/null
diff --git a/fixture/CreateVPNConnection.yaml b/fixture/CreateVPNConnection.yaml
deleted file mode 100644
--- a/fixture/CreateVPNConnection.yaml
+++ /dev/null
diff --git a/fixture/CreateVPNConnectionResponse.proto b/fixture/CreateVPNConnectionResponse.proto
deleted file mode 100644
--- a/fixture/CreateVPNConnectionResponse.proto
+++ /dev/null
diff --git a/fixture/CreateVPNConnectionRoute.yaml b/fixture/CreateVPNConnectionRoute.yaml
deleted file mode 100644
--- a/fixture/CreateVPNConnectionRoute.yaml
+++ /dev/null
diff --git a/fixture/CreateVPNConnectionRouteResponse.proto b/fixture/CreateVPNConnectionRouteResponse.proto
deleted file mode 100644
--- a/fixture/CreateVPNConnectionRouteResponse.proto
+++ /dev/null
diff --git a/fixture/CreateVPNGateway.yaml b/fixture/CreateVPNGateway.yaml
deleted file mode 100644
--- a/fixture/CreateVPNGateway.yaml
+++ /dev/null
diff --git a/fixture/CreateVPNGatewayResponse.proto b/fixture/CreateVPNGatewayResponse.proto
deleted file mode 100644
--- a/fixture/CreateVPNGatewayResponse.proto
+++ /dev/null
diff --git a/fixture/CreateVerifiedAccessEndpoint.yaml b/fixture/CreateVerifiedAccessEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVerifiedAccessEndpointResponse.proto b/fixture/CreateVerifiedAccessEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessEndpointResponse.proto
diff --git a/fixture/CreateVerifiedAccessGroup.yaml b/fixture/CreateVerifiedAccessGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVerifiedAccessGroupResponse.proto b/fixture/CreateVerifiedAccessGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessGroupResponse.proto
diff --git a/fixture/CreateVerifiedAccessInstance.yaml b/fixture/CreateVerifiedAccessInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVerifiedAccessInstanceResponse.proto b/fixture/CreateVerifiedAccessInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessInstanceResponse.proto
diff --git a/fixture/CreateVerifiedAccessTrustProvider.yaml b/fixture/CreateVerifiedAccessTrustProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessTrustProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVerifiedAccessTrustProviderResponse.proto b/fixture/CreateVerifiedAccessTrustProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVerifiedAccessTrustProviderResponse.proto
diff --git a/fixture/CreateVolume.yaml b/fixture/CreateVolume.yaml
--- a/fixture/CreateVolume.yaml
+++ b/fixture/CreateVolume.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpc.yaml b/fixture/CreateVpc.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpc.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcEndpoint.yaml b/fixture/CreateVpcEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcEndpointConnectionNotification.yaml b/fixture/CreateVpcEndpointConnectionNotification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpointConnectionNotification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcEndpointConnectionNotificationResponse.proto b/fixture/CreateVpcEndpointConnectionNotificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpointConnectionNotificationResponse.proto
diff --git a/fixture/CreateVpcEndpointResponse.proto b/fixture/CreateVpcEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpointResponse.proto
diff --git a/fixture/CreateVpcEndpointServiceConfiguration.yaml b/fixture/CreateVpcEndpointServiceConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpointServiceConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcEndpointServiceConfigurationResponse.proto b/fixture/CreateVpcEndpointServiceConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcEndpointServiceConfigurationResponse.proto
diff --git a/fixture/CreateVpcPeeringConnection.yaml b/fixture/CreateVpcPeeringConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcPeeringConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpcPeeringConnectionResponse.proto b/fixture/CreateVpcPeeringConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcPeeringConnectionResponse.proto
diff --git a/fixture/CreateVpcResponse.proto b/fixture/CreateVpcResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpcResponse.proto
diff --git a/fixture/CreateVpnConnection.yaml b/fixture/CreateVpnConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpnConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpnConnectionResponse.proto b/fixture/CreateVpnConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpnConnectionResponse.proto
diff --git a/fixture/CreateVpnConnectionRoute.yaml b/fixture/CreateVpnConnectionRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpnConnectionRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpnConnectionRouteResponse.proto b/fixture/CreateVpnConnectionRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpnConnectionRouteResponse.proto
diff --git a/fixture/CreateVpnGateway.yaml b/fixture/CreateVpnGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpnGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateVpnGatewayResponse.proto b/fixture/CreateVpnGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateVpnGatewayResponse.proto
diff --git a/fixture/DeleteCarrierGateway.yaml b/fixture/DeleteCarrierGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCarrierGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCarrierGatewayResponse.proto b/fixture/DeleteCarrierGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCarrierGatewayResponse.proto
diff --git a/fixture/DeleteClientVpnEndpoint.yaml b/fixture/DeleteClientVpnEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClientVpnEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteClientVpnEndpointResponse.proto b/fixture/DeleteClientVpnEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClientVpnEndpointResponse.proto
diff --git a/fixture/DeleteClientVpnRoute.yaml b/fixture/DeleteClientVpnRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClientVpnRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteClientVpnRouteResponse.proto b/fixture/DeleteClientVpnRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClientVpnRouteResponse.proto
diff --git a/fixture/DeleteCoipCidr.yaml b/fixture/DeleteCoipCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCoipCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCoipCidrResponse.proto b/fixture/DeleteCoipCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCoipCidrResponse.proto
diff --git a/fixture/DeleteCoipPool.yaml b/fixture/DeleteCoipPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCoipPool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCoipPoolResponse.proto b/fixture/DeleteCoipPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCoipPoolResponse.proto
diff --git a/fixture/DeleteCustomerGateway.yaml b/fixture/DeleteCustomerGateway.yaml
--- a/fixture/DeleteCustomerGateway.yaml
+++ b/fixture/DeleteCustomerGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDHCPOptions.yaml b/fixture/DeleteDHCPOptions.yaml
deleted file mode 100644
--- a/fixture/DeleteDHCPOptions.yaml
+++ /dev/null
diff --git a/fixture/DeleteDHCPOptionsResponse.proto b/fixture/DeleteDHCPOptionsResponse.proto
deleted file mode 100644
--- a/fixture/DeleteDHCPOptionsResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteDhcpOptions.yaml b/fixture/DeleteDhcpOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDhcpOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDhcpOptionsResponse.proto b/fixture/DeleteDhcpOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDhcpOptionsResponse.proto
diff --git a/fixture/DeleteEgressOnlyInternetGateway.yaml b/fixture/DeleteEgressOnlyInternetGateway.yaml
--- a/fixture/DeleteEgressOnlyInternetGateway.yaml
+++ b/fixture/DeleteEgressOnlyInternetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteFleets.yaml b/fixture/DeleteFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteFleetsResponse.proto b/fixture/DeleteFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleetsResponse.proto
diff --git a/fixture/DeleteFlowLogs.yaml b/fixture/DeleteFlowLogs.yaml
--- a/fixture/DeleteFlowLogs.yaml
+++ b/fixture/DeleteFlowLogs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteFpgaImage.yaml b/fixture/DeleteFpgaImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFpgaImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteFpgaImageResponse.proto b/fixture/DeleteFpgaImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFpgaImageResponse.proto
diff --git a/fixture/DeleteInstanceEventWindow.yaml b/fixture/DeleteInstanceEventWindow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInstanceEventWindow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteInstanceEventWindowResponse.proto b/fixture/DeleteInstanceEventWindowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteInstanceEventWindowResponse.proto
diff --git a/fixture/DeleteInternetGateway.yaml b/fixture/DeleteInternetGateway.yaml
--- a/fixture/DeleteInternetGateway.yaml
+++ b/fixture/DeleteInternetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIpam.yaml b/fixture/DeleteIpam.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpam.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIpamPool.yaml b/fixture/DeleteIpamPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpamPool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIpamPoolResponse.proto b/fixture/DeleteIpamPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpamPoolResponse.proto
diff --git a/fixture/DeleteIpamResponse.proto b/fixture/DeleteIpamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpamResponse.proto
diff --git a/fixture/DeleteIpamScope.yaml b/fixture/DeleteIpamScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpamScope.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteIpamScopeResponse.proto b/fixture/DeleteIpamScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteIpamScopeResponse.proto
diff --git a/fixture/DeleteKeyPair.yaml b/fixture/DeleteKeyPair.yaml
--- a/fixture/DeleteKeyPair.yaml
+++ b/fixture/DeleteKeyPair.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLaunchTemplate.yaml b/fixture/DeleteLaunchTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLaunchTemplateResponse.proto b/fixture/DeleteLaunchTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchTemplateResponse.proto
diff --git a/fixture/DeleteLaunchTemplateVersions.yaml b/fixture/DeleteLaunchTemplateVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchTemplateVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLaunchTemplateVersionsResponse.proto b/fixture/DeleteLaunchTemplateVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLaunchTemplateVersionsResponse.proto
diff --git a/fixture/DeleteLocalGatewayRoute.yaml b/fixture/DeleteLocalGatewayRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLocalGatewayRouteResponse.proto b/fixture/DeleteLocalGatewayRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteResponse.proto
diff --git a/fixture/DeleteLocalGatewayRouteTable.yaml b/fixture/DeleteLocalGatewayRouteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLocalGatewayRouteTableResponse.proto b/fixture/DeleteLocalGatewayRouteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteTableResponse.proto
diff --git a/fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml b/fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto b/fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto
diff --git a/fixture/DeleteLocalGatewayRouteTableVpcAssociation.yaml b/fixture/DeleteLocalGatewayRouteTableVpcAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteTableVpcAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteLocalGatewayRouteTableVpcAssociationResponse.proto b/fixture/DeleteLocalGatewayRouteTableVpcAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteLocalGatewayRouteTableVpcAssociationResponse.proto
diff --git a/fixture/DeleteManagedPrefixList.yaml b/fixture/DeleteManagedPrefixList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteManagedPrefixList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteManagedPrefixListResponse.proto b/fixture/DeleteManagedPrefixListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteManagedPrefixListResponse.proto
diff --git a/fixture/DeleteNatGateway.yaml b/fixture/DeleteNatGateway.yaml
--- a/fixture/DeleteNatGateway.yaml
+++ b/fixture/DeleteNatGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkACL.yaml b/fixture/DeleteNetworkACL.yaml
deleted file mode 100644
--- a/fixture/DeleteNetworkACL.yaml
+++ /dev/null
diff --git a/fixture/DeleteNetworkACLEntry.yaml b/fixture/DeleteNetworkACLEntry.yaml
deleted file mode 100644
--- a/fixture/DeleteNetworkACLEntry.yaml
+++ /dev/null
diff --git a/fixture/DeleteNetworkACLEntryResponse.proto b/fixture/DeleteNetworkACLEntryResponse.proto
deleted file mode 100644
--- a/fixture/DeleteNetworkACLEntryResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteNetworkACLResponse.proto b/fixture/DeleteNetworkACLResponse.proto
deleted file mode 100644
--- a/fixture/DeleteNetworkACLResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteNetworkAcl.yaml b/fixture/DeleteNetworkAcl.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkAcl.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkAclEntry.yaml b/fixture/DeleteNetworkAclEntry.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkAclEntry.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkAclEntryResponse.proto b/fixture/DeleteNetworkAclEntryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkAclEntryResponse.proto
diff --git a/fixture/DeleteNetworkAclResponse.proto b/fixture/DeleteNetworkAclResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkAclResponse.proto
diff --git a/fixture/DeleteNetworkInsightsAccessScope.yaml b/fixture/DeleteNetworkInsightsAccessScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsAccessScope.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkInsightsAccessScopeAnalysis.yaml b/fixture/DeleteNetworkInsightsAccessScopeAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsAccessScopeAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkInsightsAccessScopeAnalysisResponse.proto b/fixture/DeleteNetworkInsightsAccessScopeAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsAccessScopeAnalysisResponse.proto
diff --git a/fixture/DeleteNetworkInsightsAccessScopeResponse.proto b/fixture/DeleteNetworkInsightsAccessScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsAccessScopeResponse.proto
diff --git a/fixture/DeleteNetworkInsightsAnalysis.yaml b/fixture/DeleteNetworkInsightsAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkInsightsAnalysisResponse.proto b/fixture/DeleteNetworkInsightsAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsAnalysisResponse.proto
diff --git a/fixture/DeleteNetworkInsightsPath.yaml b/fixture/DeleteNetworkInsightsPath.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsPath.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkInsightsPathResponse.proto b/fixture/DeleteNetworkInsightsPathResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInsightsPathResponse.proto
diff --git a/fixture/DeleteNetworkInterface.yaml b/fixture/DeleteNetworkInterface.yaml
--- a/fixture/DeleteNetworkInterface.yaml
+++ b/fixture/DeleteNetworkInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkInterfacePermission.yaml b/fixture/DeleteNetworkInterfacePermission.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInterfacePermission.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteNetworkInterfacePermissionResponse.proto b/fixture/DeleteNetworkInterfacePermissionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteNetworkInterfacePermissionResponse.proto
diff --git a/fixture/DeletePlacementGroup.yaml b/fixture/DeletePlacementGroup.yaml
--- a/fixture/DeletePlacementGroup.yaml
+++ b/fixture/DeletePlacementGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeletePublicIpv4Pool.yaml b/fixture/DeletePublicIpv4Pool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePublicIpv4Pool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeletePublicIpv4PoolResponse.proto b/fixture/DeletePublicIpv4PoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePublicIpv4PoolResponse.proto
diff --git a/fixture/DeleteQueuedReservedInstances.yaml b/fixture/DeleteQueuedReservedInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQueuedReservedInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteQueuedReservedInstancesResponse.proto b/fixture/DeleteQueuedReservedInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteQueuedReservedInstancesResponse.proto
diff --git a/fixture/DeleteRoute.yaml b/fixture/DeleteRoute.yaml
--- a/fixture/DeleteRoute.yaml
+++ b/fixture/DeleteRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteRouteTable.yaml b/fixture/DeleteRouteTable.yaml
--- a/fixture/DeleteRouteTable.yaml
+++ b/fixture/DeleteRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSecurityGroup.yaml b/fixture/DeleteSecurityGroup.yaml
--- a/fixture/DeleteSecurityGroup.yaml
+++ b/fixture/DeleteSecurityGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSnapshot.yaml b/fixture/DeleteSnapshot.yaml
--- a/fixture/DeleteSnapshot.yaml
+++ b/fixture/DeleteSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSpotDatafeedSubscription.yaml b/fixture/DeleteSpotDatafeedSubscription.yaml
--- a/fixture/DeleteSpotDatafeedSubscription.yaml
+++ b/fixture/DeleteSpotDatafeedSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSubnet.yaml b/fixture/DeleteSubnet.yaml
--- a/fixture/DeleteSubnet.yaml
+++ b/fixture/DeleteSubnet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSubnetCidrReservation.yaml b/fixture/DeleteSubnetCidrReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSubnetCidrReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteSubnetCidrReservationResponse.proto b/fixture/DeleteSubnetCidrReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteSubnetCidrReservationResponse.proto
diff --git a/fixture/DeleteTags.yaml b/fixture/DeleteTags.yaml
--- a/fixture/DeleteTags.yaml
+++ b/fixture/DeleteTags.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTrafficMirrorFilter.yaml b/fixture/DeleteTrafficMirrorFilter.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorFilter.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTrafficMirrorFilterResponse.proto b/fixture/DeleteTrafficMirrorFilterResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorFilterResponse.proto
diff --git a/fixture/DeleteTrafficMirrorFilterRule.yaml b/fixture/DeleteTrafficMirrorFilterRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorFilterRule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTrafficMirrorFilterRuleResponse.proto b/fixture/DeleteTrafficMirrorFilterRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorFilterRuleResponse.proto
diff --git a/fixture/DeleteTrafficMirrorSession.yaml b/fixture/DeleteTrafficMirrorSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTrafficMirrorSessionResponse.proto b/fixture/DeleteTrafficMirrorSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorSessionResponse.proto
diff --git a/fixture/DeleteTrafficMirrorTarget.yaml b/fixture/DeleteTrafficMirrorTarget.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorTarget.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTrafficMirrorTargetResponse.proto b/fixture/DeleteTrafficMirrorTargetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrafficMirrorTargetResponse.proto
diff --git a/fixture/DeleteTransitGateway.yaml b/fixture/DeleteTransitGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayConnect.yaml b/fixture/DeleteTransitGatewayConnect.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayConnect.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayConnectPeer.yaml b/fixture/DeleteTransitGatewayConnectPeer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayConnectPeer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayConnectPeerResponse.proto b/fixture/DeleteTransitGatewayConnectPeerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayConnectPeerResponse.proto
diff --git a/fixture/DeleteTransitGatewayConnectResponse.proto b/fixture/DeleteTransitGatewayConnectResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayConnectResponse.proto
diff --git a/fixture/DeleteTransitGatewayMulticastDomain.yaml b/fixture/DeleteTransitGatewayMulticastDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayMulticastDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayMulticastDomainResponse.proto b/fixture/DeleteTransitGatewayMulticastDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayMulticastDomainResponse.proto
diff --git a/fixture/DeleteTransitGatewayPeeringAttachment.yaml b/fixture/DeleteTransitGatewayPeeringAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayPeeringAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayPeeringAttachmentResponse.proto b/fixture/DeleteTransitGatewayPeeringAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayPeeringAttachmentResponse.proto
diff --git a/fixture/DeleteTransitGatewayPolicyTable.yaml b/fixture/DeleteTransitGatewayPolicyTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayPolicyTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayPolicyTableResponse.proto b/fixture/DeleteTransitGatewayPolicyTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayPolicyTableResponse.proto
diff --git a/fixture/DeleteTransitGatewayPrefixListReference.yaml b/fixture/DeleteTransitGatewayPrefixListReference.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayPrefixListReference.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayPrefixListReferenceResponse.proto b/fixture/DeleteTransitGatewayPrefixListReferenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayPrefixListReferenceResponse.proto
diff --git a/fixture/DeleteTransitGatewayResponse.proto b/fixture/DeleteTransitGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayResponse.proto
diff --git a/fixture/DeleteTransitGatewayRoute.yaml b/fixture/DeleteTransitGatewayRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayRouteResponse.proto b/fixture/DeleteTransitGatewayRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayRouteResponse.proto
diff --git a/fixture/DeleteTransitGatewayRouteTable.yaml b/fixture/DeleteTransitGatewayRouteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayRouteTableAnnouncement.yaml b/fixture/DeleteTransitGatewayRouteTableAnnouncement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayRouteTableAnnouncement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayRouteTableAnnouncementResponse.proto b/fixture/DeleteTransitGatewayRouteTableAnnouncementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayRouteTableAnnouncementResponse.proto
diff --git a/fixture/DeleteTransitGatewayRouteTableResponse.proto b/fixture/DeleteTransitGatewayRouteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayRouteTableResponse.proto
diff --git a/fixture/DeleteTransitGatewayVpcAttachment.yaml b/fixture/DeleteTransitGatewayVpcAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayVpcAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTransitGatewayVpcAttachmentResponse.proto b/fixture/DeleteTransitGatewayVpcAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTransitGatewayVpcAttachmentResponse.proto
diff --git a/fixture/DeleteVPC.yaml b/fixture/DeleteVPC.yaml
deleted file mode 100644
--- a/fixture/DeleteVPC.yaml
+++ /dev/null
diff --git a/fixture/DeleteVPCEndpoints.yaml b/fixture/DeleteVPCEndpoints.yaml
deleted file mode 100644
--- a/fixture/DeleteVPCEndpoints.yaml
+++ /dev/null
diff --git a/fixture/DeleteVPCEndpointsResponse.proto b/fixture/DeleteVPCEndpointsResponse.proto
deleted file mode 100644
--- a/fixture/DeleteVPCEndpointsResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteVPCPeeringConnection.yaml b/fixture/DeleteVPCPeeringConnection.yaml
deleted file mode 100644
--- a/fixture/DeleteVPCPeeringConnection.yaml
+++ /dev/null
diff --git a/fixture/DeleteVPCPeeringConnectionResponse.proto b/fixture/DeleteVPCPeeringConnectionResponse.proto
deleted file mode 100644
--- a/fixture/DeleteVPCPeeringConnectionResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteVPCResponse.proto b/fixture/DeleteVPCResponse.proto
deleted file mode 100644
--- a/fixture/DeleteVPCResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteVPNConnection.yaml b/fixture/DeleteVPNConnection.yaml
deleted file mode 100644
--- a/fixture/DeleteVPNConnection.yaml
+++ /dev/null
diff --git a/fixture/DeleteVPNConnectionResponse.proto b/fixture/DeleteVPNConnectionResponse.proto
deleted file mode 100644
--- a/fixture/DeleteVPNConnectionResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteVPNConnectionRoute.yaml b/fixture/DeleteVPNConnectionRoute.yaml
deleted file mode 100644
--- a/fixture/DeleteVPNConnectionRoute.yaml
+++ /dev/null
diff --git a/fixture/DeleteVPNConnectionRouteResponse.proto b/fixture/DeleteVPNConnectionRouteResponse.proto
deleted file mode 100644
--- a/fixture/DeleteVPNConnectionRouteResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteVPNGateway.yaml b/fixture/DeleteVPNGateway.yaml
deleted file mode 100644
--- a/fixture/DeleteVPNGateway.yaml
+++ /dev/null
diff --git a/fixture/DeleteVPNGatewayResponse.proto b/fixture/DeleteVPNGatewayResponse.proto
deleted file mode 100644
--- a/fixture/DeleteVPNGatewayResponse.proto
+++ /dev/null
diff --git a/fixture/DeleteVerifiedAccessEndpoint.yaml b/fixture/DeleteVerifiedAccessEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVerifiedAccessEndpointResponse.proto b/fixture/DeleteVerifiedAccessEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessEndpointResponse.proto
diff --git a/fixture/DeleteVerifiedAccessGroup.yaml b/fixture/DeleteVerifiedAccessGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVerifiedAccessGroupResponse.proto b/fixture/DeleteVerifiedAccessGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessGroupResponse.proto
diff --git a/fixture/DeleteVerifiedAccessInstance.yaml b/fixture/DeleteVerifiedAccessInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVerifiedAccessInstanceResponse.proto b/fixture/DeleteVerifiedAccessInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessInstanceResponse.proto
diff --git a/fixture/DeleteVerifiedAccessTrustProvider.yaml b/fixture/DeleteVerifiedAccessTrustProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessTrustProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVerifiedAccessTrustProviderResponse.proto b/fixture/DeleteVerifiedAccessTrustProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVerifiedAccessTrustProviderResponse.proto
diff --git a/fixture/DeleteVolume.yaml b/fixture/DeleteVolume.yaml
--- a/fixture/DeleteVolume.yaml
+++ b/fixture/DeleteVolume.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpc.yaml b/fixture/DeleteVpc.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpc.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcEndpointConnectionNotifications.yaml b/fixture/DeleteVpcEndpointConnectionNotifications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpointConnectionNotifications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcEndpointConnectionNotificationsResponse.proto b/fixture/DeleteVpcEndpointConnectionNotificationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpointConnectionNotificationsResponse.proto
diff --git a/fixture/DeleteVpcEndpointServiceConfigurations.yaml b/fixture/DeleteVpcEndpointServiceConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpointServiceConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcEndpointServiceConfigurationsResponse.proto b/fixture/DeleteVpcEndpointServiceConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpointServiceConfigurationsResponse.proto
diff --git a/fixture/DeleteVpcEndpoints.yaml b/fixture/DeleteVpcEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcEndpointsResponse.proto b/fixture/DeleteVpcEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcEndpointsResponse.proto
diff --git a/fixture/DeleteVpcPeeringConnection.yaml b/fixture/DeleteVpcPeeringConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcPeeringConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpcPeeringConnectionResponse.proto b/fixture/DeleteVpcPeeringConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcPeeringConnectionResponse.proto
diff --git a/fixture/DeleteVpcResponse.proto b/fixture/DeleteVpcResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpcResponse.proto
diff --git a/fixture/DeleteVpnConnection.yaml b/fixture/DeleteVpnConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpnConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpnConnectionResponse.proto b/fixture/DeleteVpnConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpnConnectionResponse.proto
diff --git a/fixture/DeleteVpnConnectionRoute.yaml b/fixture/DeleteVpnConnectionRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpnConnectionRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpnConnectionRouteResponse.proto b/fixture/DeleteVpnConnectionRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpnConnectionRouteResponse.proto
diff --git a/fixture/DeleteVpnGateway.yaml b/fixture/DeleteVpnGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpnGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteVpnGatewayResponse.proto b/fixture/DeleteVpnGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteVpnGatewayResponse.proto
diff --git a/fixture/DeprovisionByoipCidr.yaml b/fixture/DeprovisionByoipCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeprovisionByoipCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeprovisionByoipCidrResponse.proto b/fixture/DeprovisionByoipCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeprovisionByoipCidrResponse.proto
diff --git a/fixture/DeprovisionIpamPoolCidr.yaml b/fixture/DeprovisionIpamPoolCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeprovisionIpamPoolCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeprovisionIpamPoolCidrResponse.proto b/fixture/DeprovisionIpamPoolCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeprovisionIpamPoolCidrResponse.proto
diff --git a/fixture/DeprovisionPublicIpv4PoolCidr.yaml b/fixture/DeprovisionPublicIpv4PoolCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeprovisionPublicIpv4PoolCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeprovisionPublicIpv4PoolCidrResponse.proto b/fixture/DeprovisionPublicIpv4PoolCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeprovisionPublicIpv4PoolCidrResponse.proto
diff --git a/fixture/DeregisterImage.yaml b/fixture/DeregisterImage.yaml
--- a/fixture/DeregisterImage.yaml
+++ b/fixture/DeregisterImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeregisterInstanceEventNotificationAttributes.yaml b/fixture/DeregisterInstanceEventNotificationAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterInstanceEventNotificationAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeregisterInstanceEventNotificationAttributesResponse.proto b/fixture/DeregisterInstanceEventNotificationAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterInstanceEventNotificationAttributesResponse.proto
diff --git a/fixture/DeregisterTransitGatewayMulticastGroupMembers.yaml b/fixture/DeregisterTransitGatewayMulticastGroupMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterTransitGatewayMulticastGroupMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeregisterTransitGatewayMulticastGroupMembersResponse.proto b/fixture/DeregisterTransitGatewayMulticastGroupMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterTransitGatewayMulticastGroupMembersResponse.proto
diff --git a/fixture/DeregisterTransitGatewayMulticastGroupSources.yaml b/fixture/DeregisterTransitGatewayMulticastGroupSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterTransitGatewayMulticastGroupSources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeregisterTransitGatewayMulticastGroupSourcesResponse.proto b/fixture/DeregisterTransitGatewayMulticastGroupSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeregisterTransitGatewayMulticastGroupSourcesResponse.proto
diff --git a/fixture/DescribeAccountAttributes.yaml b/fixture/DescribeAccountAttributes.yaml
--- a/fixture/DescribeAccountAttributes.yaml
+++ b/fixture/DescribeAccountAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddressTransfers.yaml b/fixture/DescribeAddressTransfers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddressTransfers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddressTransfersResponse.proto b/fixture/DescribeAddressTransfersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddressTransfersResponse.proto
diff --git a/fixture/DescribeAddresses.yaml b/fixture/DescribeAddresses.yaml
--- a/fixture/DescribeAddresses.yaml
+++ b/fixture/DescribeAddresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddressesAttribute.yaml b/fixture/DescribeAddressesAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddressesAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAddressesAttributeResponse.proto b/fixture/DescribeAddressesAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAddressesAttributeResponse.proto
diff --git a/fixture/DescribeAggregateIdFormat.yaml b/fixture/DescribeAggregateIdFormat.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAggregateIdFormat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAggregateIdFormatResponse.proto b/fixture/DescribeAggregateIdFormatResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAggregateIdFormatResponse.proto
diff --git a/fixture/DescribeAvailabilityZones.yaml b/fixture/DescribeAvailabilityZones.yaml
--- a/fixture/DescribeAvailabilityZones.yaml
+++ b/fixture/DescribeAvailabilityZones.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAwsNetworkPerformanceMetricSubscriptions.yaml b/fixture/DescribeAwsNetworkPerformanceMetricSubscriptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAwsNetworkPerformanceMetricSubscriptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeAwsNetworkPerformanceMetricSubscriptionsResponse.proto b/fixture/DescribeAwsNetworkPerformanceMetricSubscriptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAwsNetworkPerformanceMetricSubscriptionsResponse.proto
diff --git a/fixture/DescribeBundleTasks.yaml b/fixture/DescribeBundleTasks.yaml
--- a/fixture/DescribeBundleTasks.yaml
+++ b/fixture/DescribeBundleTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeByoipCidrs.yaml b/fixture/DescribeByoipCidrs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeByoipCidrs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeByoipCidrsResponse.proto b/fixture/DescribeByoipCidrsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeByoipCidrsResponse.proto
diff --git a/fixture/DescribeCapacityReservationFleets.yaml b/fixture/DescribeCapacityReservationFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCapacityReservationFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCapacityReservationFleetsResponse.proto b/fixture/DescribeCapacityReservationFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCapacityReservationFleetsResponse.proto
diff --git a/fixture/DescribeCapacityReservations.yaml b/fixture/DescribeCapacityReservations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCapacityReservations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCapacityReservationsResponse.proto b/fixture/DescribeCapacityReservationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCapacityReservationsResponse.proto
diff --git a/fixture/DescribeCarrierGateways.yaml b/fixture/DescribeCarrierGateways.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCarrierGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCarrierGatewaysResponse.proto b/fixture/DescribeCarrierGatewaysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCarrierGatewaysResponse.proto
diff --git a/fixture/DescribeClassicLinkInstances.yaml b/fixture/DescribeClassicLinkInstances.yaml
--- a/fixture/DescribeClassicLinkInstances.yaml
+++ b/fixture/DescribeClassicLinkInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientVpnAuthorizationRules.yaml b/fixture/DescribeClientVpnAuthorizationRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnAuthorizationRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientVpnAuthorizationRulesResponse.proto b/fixture/DescribeClientVpnAuthorizationRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnAuthorizationRulesResponse.proto
diff --git a/fixture/DescribeClientVpnConnections.yaml b/fixture/DescribeClientVpnConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientVpnConnectionsResponse.proto b/fixture/DescribeClientVpnConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnConnectionsResponse.proto
diff --git a/fixture/DescribeClientVpnEndpoints.yaml b/fixture/DescribeClientVpnEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientVpnEndpointsResponse.proto b/fixture/DescribeClientVpnEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnEndpointsResponse.proto
diff --git a/fixture/DescribeClientVpnRoutes.yaml b/fixture/DescribeClientVpnRoutes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnRoutes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientVpnRoutesResponse.proto b/fixture/DescribeClientVpnRoutesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnRoutesResponse.proto
diff --git a/fixture/DescribeClientVpnTargetNetworks.yaml b/fixture/DescribeClientVpnTargetNetworks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnTargetNetworks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeClientVpnTargetNetworksResponse.proto b/fixture/DescribeClientVpnTargetNetworksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeClientVpnTargetNetworksResponse.proto
diff --git a/fixture/DescribeCoipPools.yaml b/fixture/DescribeCoipPools.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCoipPools.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCoipPoolsResponse.proto b/fixture/DescribeCoipPoolsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeCoipPoolsResponse.proto
diff --git a/fixture/DescribeConversionTasks.yaml b/fixture/DescribeConversionTasks.yaml
--- a/fixture/DescribeConversionTasks.yaml
+++ b/fixture/DescribeConversionTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeCustomerGateways.yaml b/fixture/DescribeCustomerGateways.yaml
--- a/fixture/DescribeCustomerGateways.yaml
+++ b/fixture/DescribeCustomerGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDHCPOptions.yaml b/fixture/DescribeDHCPOptions.yaml
deleted file mode 100644
--- a/fixture/DescribeDHCPOptions.yaml
+++ /dev/null
diff --git a/fixture/DescribeDHCPOptionsResponse.proto b/fixture/DescribeDHCPOptionsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeDHCPOptionsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeDhcpOptions.yaml b/fixture/DescribeDhcpOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDhcpOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeDhcpOptionsResponse.proto b/fixture/DescribeDhcpOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeDhcpOptionsResponse.proto
diff --git a/fixture/DescribeEgressOnlyInternetGateways.yaml b/fixture/DescribeEgressOnlyInternetGateways.yaml
--- a/fixture/DescribeEgressOnlyInternetGateways.yaml
+++ b/fixture/DescribeEgressOnlyInternetGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeElasticGpus.yaml b/fixture/DescribeElasticGpus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeElasticGpus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeElasticGpusResponse.proto b/fixture/DescribeElasticGpusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeElasticGpusResponse.proto
diff --git a/fixture/DescribeExportImageTasks.yaml b/fixture/DescribeExportImageTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExportImageTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeExportImageTasksResponse.proto b/fixture/DescribeExportImageTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeExportImageTasksResponse.proto
diff --git a/fixture/DescribeExportTasks.yaml b/fixture/DescribeExportTasks.yaml
--- a/fixture/DescribeExportTasks.yaml
+++ b/fixture/DescribeExportTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFastLaunchImages.yaml b/fixture/DescribeFastLaunchImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFastLaunchImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFastLaunchImagesResponse.proto b/fixture/DescribeFastLaunchImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFastLaunchImagesResponse.proto
diff --git a/fixture/DescribeFastSnapshotRestores.yaml b/fixture/DescribeFastSnapshotRestores.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFastSnapshotRestores.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFastSnapshotRestoresResponse.proto b/fixture/DescribeFastSnapshotRestoresResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFastSnapshotRestoresResponse.proto
diff --git a/fixture/DescribeFleetHistory.yaml b/fixture/DescribeFleetHistory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFleetHistoryResponse.proto b/fixture/DescribeFleetHistoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetHistoryResponse.proto
diff --git a/fixture/DescribeFleetInstances.yaml b/fixture/DescribeFleetInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFleetInstancesResponse.proto b/fixture/DescribeFleetInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetInstancesResponse.proto
diff --git a/fixture/DescribeFleets.yaml b/fixture/DescribeFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFleetsResponse.proto b/fixture/DescribeFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetsResponse.proto
diff --git a/fixture/DescribeFlowLogs.yaml b/fixture/DescribeFlowLogs.yaml
--- a/fixture/DescribeFlowLogs.yaml
+++ b/fixture/DescribeFlowLogs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFpgaImageAttribute.yaml b/fixture/DescribeFpgaImageAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFpgaImageAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFpgaImageAttributeResponse.proto b/fixture/DescribeFpgaImageAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFpgaImageAttributeResponse.proto
diff --git a/fixture/DescribeFpgaImages.yaml b/fixture/DescribeFpgaImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFpgaImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeFpgaImagesResponse.proto b/fixture/DescribeFpgaImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFpgaImagesResponse.proto
diff --git a/fixture/DescribeHostReservationOfferings.yaml b/fixture/DescribeHostReservationOfferings.yaml
--- a/fixture/DescribeHostReservationOfferings.yaml
+++ b/fixture/DescribeHostReservationOfferings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeHostReservations.yaml b/fixture/DescribeHostReservations.yaml
--- a/fixture/DescribeHostReservations.yaml
+++ b/fixture/DescribeHostReservations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeHosts.yaml b/fixture/DescribeHosts.yaml
--- a/fixture/DescribeHosts.yaml
+++ b/fixture/DescribeHosts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIamInstanceProfileAssociations.yaml b/fixture/DescribeIamInstanceProfileAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIamInstanceProfileAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIamInstanceProfileAssociationsResponse.proto b/fixture/DescribeIamInstanceProfileAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIamInstanceProfileAssociationsResponse.proto
diff --git a/fixture/DescribeIdFormat.yaml b/fixture/DescribeIdFormat.yaml
--- a/fixture/DescribeIdFormat.yaml
+++ b/fixture/DescribeIdFormat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIdentityIdFormat.yaml b/fixture/DescribeIdentityIdFormat.yaml
--- a/fixture/DescribeIdentityIdFormat.yaml
+++ b/fixture/DescribeIdentityIdFormat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeImageAttribute.yaml b/fixture/DescribeImageAttribute.yaml
--- a/fixture/DescribeImageAttribute.yaml
+++ b/fixture/DescribeImageAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeImages.yaml b/fixture/DescribeImages.yaml
--- a/fixture/DescribeImages.yaml
+++ b/fixture/DescribeImages.yaml
@@ -1,10 +1,10 @@
 ---
 method: POST
 headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=e810ca5f5663b8744c0147849e18d90dcd8ecd55d144ba8c8e3ae4269ae8f1c9
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
   Host:                  ec2.us-east-1.amazonaws.com
   Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  0492dc39feb964e763bac88cbf63daca20d8113880b84ace9aae14951cb777b2
+  X-Amz-Content-SHA256:  abcdef
   X-Amz-Date:            20091028T223200Z
 body:
-  Action=DescribeImages&Filter.1.Name=is-public&Filter.1.Value.1=true&Filter.2.Name=architecture&Filter.2.Value.1=x86_64&Filter.3.Name=platform&Filter.3.Value.1=windows&Version=2016-11-15
+  ''
diff --git a/fixture/DescribeImportImageTasks.yaml b/fixture/DescribeImportImageTasks.yaml
--- a/fixture/DescribeImportImageTasks.yaml
+++ b/fixture/DescribeImportImageTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeImportSnapshotTasks.yaml b/fixture/DescribeImportSnapshotTasks.yaml
--- a/fixture/DescribeImportSnapshotTasks.yaml
+++ b/fixture/DescribeImportSnapshotTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceAttribute.yaml b/fixture/DescribeInstanceAttribute.yaml
--- a/fixture/DescribeInstanceAttribute.yaml
+++ b/fixture/DescribeInstanceAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceCreditSpecifications.yaml b/fixture/DescribeInstanceCreditSpecifications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceCreditSpecifications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceCreditSpecificationsResponse.proto b/fixture/DescribeInstanceCreditSpecificationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceCreditSpecificationsResponse.proto
diff --git a/fixture/DescribeInstanceEventNotificationAttributes.yaml b/fixture/DescribeInstanceEventNotificationAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceEventNotificationAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceEventNotificationAttributesResponse.proto b/fixture/DescribeInstanceEventNotificationAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceEventNotificationAttributesResponse.proto
diff --git a/fixture/DescribeInstanceEventWindows.yaml b/fixture/DescribeInstanceEventWindows.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceEventWindows.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceEventWindowsResponse.proto b/fixture/DescribeInstanceEventWindowsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceEventWindowsResponse.proto
diff --git a/fixture/DescribeInstanceStatus.yaml b/fixture/DescribeInstanceStatus.yaml
--- a/fixture/DescribeInstanceStatus.yaml
+++ b/fixture/DescribeInstanceStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceTypeOfferings.yaml b/fixture/DescribeInstanceTypeOfferings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceTypeOfferings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceTypeOfferingsResponse.proto b/fixture/DescribeInstanceTypeOfferingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceTypeOfferingsResponse.proto
diff --git a/fixture/DescribeInstanceTypes.yaml b/fixture/DescribeInstanceTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeInstanceTypesResponse.proto b/fixture/DescribeInstanceTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeInstanceTypesResponse.proto
diff --git a/fixture/DescribeInstances.yaml b/fixture/DescribeInstances.yaml
--- a/fixture/DescribeInstances.yaml
+++ b/fixture/DescribeInstances.yaml
@@ -1,10 +1,10 @@
 ---
 method: POST
 headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=7c4a5eb8327a6a95a69451313f49b8eddd3fdc410915d93c8f91edb6ff0f5889
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
   Host:                  ec2.us-east-1.amazonaws.com
   Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  04c1b478780e3048ac5af908d2df878415c39c89d3115f9836e9d5f53a69f94d
+  X-Amz-Content-SHA256:  abcdef
   X-Amz-Date:            20091028T223200Z
 body:
-  Action=DescribeInstances&Filter.1.Name=instance-type&Filter.1.Value.1=m1.small&Filter.1.Value.2=m1.large&Filter.2.Name=block-device-mapping.status&Filter.2.Value.1=attached&InstanceId.1=i-foo&InstanceId.2=i-bar&InstanceId.3=i-baz&Version=2016-11-15
+  ''
diff --git a/fixture/DescribeInstancesResponse.proto b/fixture/DescribeInstancesResponse.proto
--- a/fixture/DescribeInstancesResponse.proto
+++ b/fixture/DescribeInstancesResponse.proto
@@ -1,106 +0,0 @@
-<DescribeInstancesResponse xmlns="http://ec2.amazonaws.com/doc/2015-10-01/">
-  <requestId>fdcdcab1-ae5c-489e-9c33-4637c5dda355</requestId>
-  <reservationSet>
-    <item>
-      <reservationId>r-1a2b3c4d</reservationId>
-      <ownerId>123456789012</ownerId>
-      <groupSet>
-        <item>
-          <groupId>sg-1a2b3c4d</groupId>
-          <groupName>my-security-group</groupName>
-        </item>
-      </groupSet>
-      <instancesSet>
-        <item>
-          <instanceId>i-1a2b3c4d</instanceId>
-          <imageId>ami-1a2b3c4d</imageId>
-          <instanceState>
-            <code>16</code>
-            <name>running</name>
-          </instanceState>
-          <privateDnsName/>
-          <dnsName/>
-          <reason/>
-          <keyName>my-key-pair</keyName>
-          <amiLaunchIndex>0</amiLaunchIndex>
-          <productCodes/>
-          <instanceType>c1.medium</instanceType>
-          <launchTime>2014-03-18T21:47:02+0000</launchTime>
-          <placement>
-            <availabilityZone>us-west-2a</availabilityZone>
-            <groupName/>
-            <tenancy>default</tenancy>
-          </placement>
-          <platform>windows</platform>
-          <monitoring>
-            <state>disabled</state>
-          </monitoring>
-          <subnetId>subnet-1a2b3c4d</subnetId>
-          <vpcId>vpc-1a2b3c4d</vpcId>
-          <privateIpAddress>10.0.0.12</privateIpAddress>
-          <ipAddress>46.51.219.63</ipAddress>
-          <sourceDestCheck>true</sourceDestCheck>
-          <groupSet>
-            <item>
-              <groupId>sg-1a2b3c4d</groupId>
-              <groupName>my-security-group</groupName>
-            </item>
-          </groupSet>
-          <architecture>x86_64</architecture>
-          <rootDeviceType>ebs</rootDeviceType>
-          <rootDeviceName>/dev/sda1</rootDeviceName>
-          <blockDeviceMapping>
-            <item>
-              <deviceName>/dev/sda1</deviceName>
-              <ebs>
-                <volumeId>vol-1a2b3c4d</volumeId>
-                <status>attached</status>
-                <attachTime>2014-03-18T21:47:02+0000</attachTime>
-                <deleteOnTermination>true</deleteOnTermination>
-              </ebs>
-            </item>
-          </blockDeviceMapping>
-          <virtualizationType>hvm</virtualizationType>
-          <clientToken>ABCDE1234567890123</clientToken>
-          <tagSet>
-            <item>
-              <key>Name</key>
-              <value>Windows Instance</value>
-            </item>
-          </tagSet>
-          <hypervisor>xen</hypervisor>
-          <networkInterfaceSet>
-            <item>
-              <networkInterfaceId>eni-1a2b3c4d</networkInterfaceId>
-              <subnetId>subnet-1a2b3c4d</subnetId>
-              <vpcId>vpc-1a2b3c4d</vpcId>
-              <description>Primary network interface</description>
-              <ownerId>123456789012</ownerId>
-              <status>in-use</status>
-              <macAddress>1b:2b:3c:4d:5e:6f</macAddress>
-              <privateIpAddress>10.0.0.12</privateIpAddress>
-              <sourceDestCheck>true</sourceDestCheck>
-              <groupSet>
-                <item>
-                  <groupId>sg-1a2b3c4d</groupId>
-                  <groupName>my-security-group</groupName>
-                </item>
-              </groupSet>
-              <attachment>
-                <attachmentId>eni-attach-1a2b3c4d</attachmentId>
-                <deviceIndex>0</deviceIndex>
-                <status>attached</status>
-                <attachTime>2014-03-18T21:47:02+0000</attachTime>
-                <deleteOnTermination>true</deleteOnTermination>
-              </attachment>
-              <association>
-                <publicIp>198.51.100.63</publicIp>
-                <ipOwnerId>123456789012</ipOwnerId>
-              </association>
-            </item>
-          </networkInterfaceSet>
-        </item>
-      </instancesSet>
-    </item>
-  </reservationSet>
-</DescribeInstancesResponse>
diff --git a/fixture/DescribeInternetGateways.yaml b/fixture/DescribeInternetGateways.yaml
--- a/fixture/DescribeInternetGateways.yaml
+++ b/fixture/DescribeInternetGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIpamPools.yaml b/fixture/DescribeIpamPools.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpamPools.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIpamPoolsResponse.proto b/fixture/DescribeIpamPoolsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpamPoolsResponse.proto
diff --git a/fixture/DescribeIpamScopes.yaml b/fixture/DescribeIpamScopes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpamScopes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIpamScopesResponse.proto b/fixture/DescribeIpamScopesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpamScopesResponse.proto
diff --git a/fixture/DescribeIpams.yaml b/fixture/DescribeIpams.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpams.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIpamsResponse.proto b/fixture/DescribeIpamsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpamsResponse.proto
diff --git a/fixture/DescribeIpv6Pools.yaml b/fixture/DescribeIpv6Pools.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpv6Pools.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeIpv6PoolsResponse.proto b/fixture/DescribeIpv6PoolsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeIpv6PoolsResponse.proto
diff --git a/fixture/DescribeKeyPairs.yaml b/fixture/DescribeKeyPairs.yaml
--- a/fixture/DescribeKeyPairs.yaml
+++ b/fixture/DescribeKeyPairs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLaunchTemplateVersions.yaml b/fixture/DescribeLaunchTemplateVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLaunchTemplateVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLaunchTemplateVersionsResponse.proto b/fixture/DescribeLaunchTemplateVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLaunchTemplateVersionsResponse.proto
diff --git a/fixture/DescribeLaunchTemplates.yaml b/fixture/DescribeLaunchTemplates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLaunchTemplates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLaunchTemplatesResponse.proto b/fixture/DescribeLaunchTemplatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLaunchTemplatesResponse.proto
diff --git a/fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.yaml b/fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse.proto b/fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse.proto
diff --git a/fixture/DescribeLocalGatewayRouteTableVpcAssociations.yaml b/fixture/DescribeLocalGatewayRouteTableVpcAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayRouteTableVpcAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLocalGatewayRouteTableVpcAssociationsResponse.proto b/fixture/DescribeLocalGatewayRouteTableVpcAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayRouteTableVpcAssociationsResponse.proto
diff --git a/fixture/DescribeLocalGatewayRouteTables.yaml b/fixture/DescribeLocalGatewayRouteTables.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayRouteTables.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLocalGatewayRouteTablesResponse.proto b/fixture/DescribeLocalGatewayRouteTablesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayRouteTablesResponse.proto
diff --git a/fixture/DescribeLocalGatewayVirtualInterfaceGroups.yaml b/fixture/DescribeLocalGatewayVirtualInterfaceGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayVirtualInterfaceGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLocalGatewayVirtualInterfaceGroupsResponse.proto b/fixture/DescribeLocalGatewayVirtualInterfaceGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayVirtualInterfaceGroupsResponse.proto
diff --git a/fixture/DescribeLocalGatewayVirtualInterfaces.yaml b/fixture/DescribeLocalGatewayVirtualInterfaces.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayVirtualInterfaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLocalGatewayVirtualInterfacesResponse.proto b/fixture/DescribeLocalGatewayVirtualInterfacesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewayVirtualInterfacesResponse.proto
diff --git a/fixture/DescribeLocalGateways.yaml b/fixture/DescribeLocalGateways.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeLocalGatewaysResponse.proto b/fixture/DescribeLocalGatewaysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeLocalGatewaysResponse.proto
diff --git a/fixture/DescribeManagedPrefixLists.yaml b/fixture/DescribeManagedPrefixLists.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeManagedPrefixLists.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeManagedPrefixListsResponse.proto b/fixture/DescribeManagedPrefixListsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeManagedPrefixListsResponse.proto
diff --git a/fixture/DescribeMovingAddresses.yaml b/fixture/DescribeMovingAddresses.yaml
--- a/fixture/DescribeMovingAddresses.yaml
+++ b/fixture/DescribeMovingAddresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNatGateways.yaml b/fixture/DescribeNatGateways.yaml
--- a/fixture/DescribeNatGateways.yaml
+++ b/fixture/DescribeNatGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkACLs.yaml b/fixture/DescribeNetworkACLs.yaml
deleted file mode 100644
--- a/fixture/DescribeNetworkACLs.yaml
+++ /dev/null
diff --git a/fixture/DescribeNetworkACLsResponse.proto b/fixture/DescribeNetworkACLsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeNetworkACLsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeNetworkAcls.yaml b/fixture/DescribeNetworkAcls.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkAcls.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkAclsResponse.proto b/fixture/DescribeNetworkAclsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkAclsResponse.proto
diff --git a/fixture/DescribeNetworkInsightsAccessScopeAnalyses.yaml b/fixture/DescribeNetworkInsightsAccessScopeAnalyses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsAccessScopeAnalyses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkInsightsAccessScopeAnalysesResponse.proto b/fixture/DescribeNetworkInsightsAccessScopeAnalysesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsAccessScopeAnalysesResponse.proto
diff --git a/fixture/DescribeNetworkInsightsAccessScopes.yaml b/fixture/DescribeNetworkInsightsAccessScopes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsAccessScopes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkInsightsAccessScopesResponse.proto b/fixture/DescribeNetworkInsightsAccessScopesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsAccessScopesResponse.proto
diff --git a/fixture/DescribeNetworkInsightsAnalyses.yaml b/fixture/DescribeNetworkInsightsAnalyses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsAnalyses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkInsightsAnalysesResponse.proto b/fixture/DescribeNetworkInsightsAnalysesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsAnalysesResponse.proto
diff --git a/fixture/DescribeNetworkInsightsPaths.yaml b/fixture/DescribeNetworkInsightsPaths.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsPaths.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkInsightsPathsResponse.proto b/fixture/DescribeNetworkInsightsPathsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInsightsPathsResponse.proto
diff --git a/fixture/DescribeNetworkInterfaceAttribute.yaml b/fixture/DescribeNetworkInterfaceAttribute.yaml
--- a/fixture/DescribeNetworkInterfaceAttribute.yaml
+++ b/fixture/DescribeNetworkInterfaceAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkInterfacePermissions.yaml b/fixture/DescribeNetworkInterfacePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInterfacePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeNetworkInterfacePermissionsResponse.proto b/fixture/DescribeNetworkInterfacePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeNetworkInterfacePermissionsResponse.proto
diff --git a/fixture/DescribeNetworkInterfaces.yaml b/fixture/DescribeNetworkInterfaces.yaml
--- a/fixture/DescribeNetworkInterfaces.yaml
+++ b/fixture/DescribeNetworkInterfaces.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePlacementGroups.yaml b/fixture/DescribePlacementGroups.yaml
--- a/fixture/DescribePlacementGroups.yaml
+++ b/fixture/DescribePlacementGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePrefixLists.yaml b/fixture/DescribePrefixLists.yaml
--- a/fixture/DescribePrefixLists.yaml
+++ b/fixture/DescribePrefixLists.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePrincipalIdFormat.yaml b/fixture/DescribePrincipalIdFormat.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePrincipalIdFormat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePrincipalIdFormatResponse.proto b/fixture/DescribePrincipalIdFormatResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePrincipalIdFormatResponse.proto
diff --git a/fixture/DescribePublicIpv4Pools.yaml b/fixture/DescribePublicIpv4Pools.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePublicIpv4Pools.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribePublicIpv4PoolsResponse.proto b/fixture/DescribePublicIpv4PoolsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePublicIpv4PoolsResponse.proto
diff --git a/fixture/DescribeRegions.yaml b/fixture/DescribeRegions.yaml
--- a/fixture/DescribeRegions.yaml
+++ b/fixture/DescribeRegions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeReplaceRootVolumeTasks.yaml b/fixture/DescribeReplaceRootVolumeTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplaceRootVolumeTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeReplaceRootVolumeTasksResponse.proto b/fixture/DescribeReplaceRootVolumeTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplaceRootVolumeTasksResponse.proto
diff --git a/fixture/DescribeReservedInstances.yaml b/fixture/DescribeReservedInstances.yaml
--- a/fixture/DescribeReservedInstances.yaml
+++ b/fixture/DescribeReservedInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeReservedInstancesListings.yaml b/fixture/DescribeReservedInstancesListings.yaml
--- a/fixture/DescribeReservedInstancesListings.yaml
+++ b/fixture/DescribeReservedInstancesListings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeReservedInstancesModifications.yaml b/fixture/DescribeReservedInstancesModifications.yaml
--- a/fixture/DescribeReservedInstancesModifications.yaml
+++ b/fixture/DescribeReservedInstancesModifications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeReservedInstancesOfferings.yaml b/fixture/DescribeReservedInstancesOfferings.yaml
--- a/fixture/DescribeReservedInstancesOfferings.yaml
+++ b/fixture/DescribeReservedInstancesOfferings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeRouteTables.yaml b/fixture/DescribeRouteTables.yaml
--- a/fixture/DescribeRouteTables.yaml
+++ b/fixture/DescribeRouteTables.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeScheduledInstanceAvailability.yaml b/fixture/DescribeScheduledInstanceAvailability.yaml
--- a/fixture/DescribeScheduledInstanceAvailability.yaml
+++ b/fixture/DescribeScheduledInstanceAvailability.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeScheduledInstances.yaml b/fixture/DescribeScheduledInstances.yaml
--- a/fixture/DescribeScheduledInstances.yaml
+++ b/fixture/DescribeScheduledInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSecurityGroupReferences.yaml b/fixture/DescribeSecurityGroupReferences.yaml
--- a/fixture/DescribeSecurityGroupReferences.yaml
+++ b/fixture/DescribeSecurityGroupReferences.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSecurityGroupRules.yaml b/fixture/DescribeSecurityGroupRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSecurityGroupRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSecurityGroupRulesResponse.proto b/fixture/DescribeSecurityGroupRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSecurityGroupRulesResponse.proto
diff --git a/fixture/DescribeSecurityGroups.yaml b/fixture/DescribeSecurityGroups.yaml
--- a/fixture/DescribeSecurityGroups.yaml
+++ b/fixture/DescribeSecurityGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSnapshotAttribute.yaml b/fixture/DescribeSnapshotAttribute.yaml
--- a/fixture/DescribeSnapshotAttribute.yaml
+++ b/fixture/DescribeSnapshotAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSnapshotTierStatus.yaml b/fixture/DescribeSnapshotTierStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSnapshotTierStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSnapshotTierStatusResponse.proto b/fixture/DescribeSnapshotTierStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSnapshotTierStatusResponse.proto
diff --git a/fixture/DescribeSnapshots.yaml b/fixture/DescribeSnapshots.yaml
--- a/fixture/DescribeSnapshots.yaml
+++ b/fixture/DescribeSnapshots.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSpotDatafeedSubscription.yaml b/fixture/DescribeSpotDatafeedSubscription.yaml
--- a/fixture/DescribeSpotDatafeedSubscription.yaml
+++ b/fixture/DescribeSpotDatafeedSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSpotFleetInstances.yaml b/fixture/DescribeSpotFleetInstances.yaml
--- a/fixture/DescribeSpotFleetInstances.yaml
+++ b/fixture/DescribeSpotFleetInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSpotFleetRequestHistory.yaml b/fixture/DescribeSpotFleetRequestHistory.yaml
--- a/fixture/DescribeSpotFleetRequestHistory.yaml
+++ b/fixture/DescribeSpotFleetRequestHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSpotFleetRequests.yaml b/fixture/DescribeSpotFleetRequests.yaml
--- a/fixture/DescribeSpotFleetRequests.yaml
+++ b/fixture/DescribeSpotFleetRequests.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSpotInstanceRequests.yaml b/fixture/DescribeSpotInstanceRequests.yaml
--- a/fixture/DescribeSpotInstanceRequests.yaml
+++ b/fixture/DescribeSpotInstanceRequests.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeSpotPriceHistory.yaml b/fixture/DescribeSpotPriceHistory.yaml
--- a/fixture/DescribeSpotPriceHistory.yaml
+++ b/fixture/DescribeSpotPriceHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeStaleSecurityGroups.yaml b/fixture/DescribeStaleSecurityGroups.yaml
--- a/fixture/DescribeStaleSecurityGroups.yaml
+++ b/fixture/DescribeStaleSecurityGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeStoreImageTasks.yaml b/fixture/DescribeStoreImageTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeStoreImageTasks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeStoreImageTasksResponse.proto b/fixture/DescribeStoreImageTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeStoreImageTasksResponse.proto
diff --git a/fixture/DescribeSubnets.yaml b/fixture/DescribeSubnets.yaml
--- a/fixture/DescribeSubnets.yaml
+++ b/fixture/DescribeSubnets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTags.yaml b/fixture/DescribeTags.yaml
--- a/fixture/DescribeTags.yaml
+++ b/fixture/DescribeTags.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTrafficMirrorFilters.yaml b/fixture/DescribeTrafficMirrorFilters.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrafficMirrorFilters.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTrafficMirrorFiltersResponse.proto b/fixture/DescribeTrafficMirrorFiltersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrafficMirrorFiltersResponse.proto
diff --git a/fixture/DescribeTrafficMirrorSessions.yaml b/fixture/DescribeTrafficMirrorSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrafficMirrorSessions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTrafficMirrorSessionsResponse.proto b/fixture/DescribeTrafficMirrorSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrafficMirrorSessionsResponse.proto
diff --git a/fixture/DescribeTrafficMirrorTargets.yaml b/fixture/DescribeTrafficMirrorTargets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrafficMirrorTargets.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTrafficMirrorTargetsResponse.proto b/fixture/DescribeTrafficMirrorTargetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrafficMirrorTargetsResponse.proto
diff --git a/fixture/DescribeTransitGatewayAttachments.yaml b/fixture/DescribeTransitGatewayAttachments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayAttachments.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayAttachmentsResponse.proto b/fixture/DescribeTransitGatewayAttachmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayAttachmentsResponse.proto
diff --git a/fixture/DescribeTransitGatewayConnectPeers.yaml b/fixture/DescribeTransitGatewayConnectPeers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayConnectPeers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayConnectPeersResponse.proto b/fixture/DescribeTransitGatewayConnectPeersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayConnectPeersResponse.proto
diff --git a/fixture/DescribeTransitGatewayConnects.yaml b/fixture/DescribeTransitGatewayConnects.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayConnects.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayConnectsResponse.proto b/fixture/DescribeTransitGatewayConnectsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayConnectsResponse.proto
diff --git a/fixture/DescribeTransitGatewayMulticastDomains.yaml b/fixture/DescribeTransitGatewayMulticastDomains.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayMulticastDomains.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayMulticastDomainsResponse.proto b/fixture/DescribeTransitGatewayMulticastDomainsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayMulticastDomainsResponse.proto
diff --git a/fixture/DescribeTransitGatewayPeeringAttachments.yaml b/fixture/DescribeTransitGatewayPeeringAttachments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayPeeringAttachments.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayPeeringAttachmentsResponse.proto b/fixture/DescribeTransitGatewayPeeringAttachmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayPeeringAttachmentsResponse.proto
diff --git a/fixture/DescribeTransitGatewayPolicyTables.yaml b/fixture/DescribeTransitGatewayPolicyTables.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayPolicyTables.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayPolicyTablesResponse.proto b/fixture/DescribeTransitGatewayPolicyTablesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayPolicyTablesResponse.proto
diff --git a/fixture/DescribeTransitGatewayRouteTableAnnouncements.yaml b/fixture/DescribeTransitGatewayRouteTableAnnouncements.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayRouteTableAnnouncements.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayRouteTableAnnouncementsResponse.proto b/fixture/DescribeTransitGatewayRouteTableAnnouncementsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayRouteTableAnnouncementsResponse.proto
diff --git a/fixture/DescribeTransitGatewayRouteTables.yaml b/fixture/DescribeTransitGatewayRouteTables.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayRouteTables.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayRouteTablesResponse.proto b/fixture/DescribeTransitGatewayRouteTablesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayRouteTablesResponse.proto
diff --git a/fixture/DescribeTransitGatewayVpcAttachments.yaml b/fixture/DescribeTransitGatewayVpcAttachments.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayVpcAttachments.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewayVpcAttachmentsResponse.proto b/fixture/DescribeTransitGatewayVpcAttachmentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewayVpcAttachmentsResponse.proto
diff --git a/fixture/DescribeTransitGateways.yaml b/fixture/DescribeTransitGateways.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTransitGatewaysResponse.proto b/fixture/DescribeTransitGatewaysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTransitGatewaysResponse.proto
diff --git a/fixture/DescribeTrunkInterfaceAssociations.yaml b/fixture/DescribeTrunkInterfaceAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrunkInterfaceAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeTrunkInterfaceAssociationsResponse.proto b/fixture/DescribeTrunkInterfaceAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTrunkInterfaceAssociationsResponse.proto
diff --git a/fixture/DescribeVPCAttribute.yaml b/fixture/DescribeVPCAttribute.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCAttribute.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCAttributeResponse.proto b/fixture/DescribeVPCAttributeResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCAttributeResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPCClassicLink.yaml b/fixture/DescribeVPCClassicLink.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCClassicLink.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCClassicLinkDNSSupport.yaml b/fixture/DescribeVPCClassicLinkDNSSupport.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCClassicLinkDNSSupport.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCClassicLinkDNSSupportResponse.proto b/fixture/DescribeVPCClassicLinkDNSSupportResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCClassicLinkDNSSupportResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPCClassicLinkResponse.proto b/fixture/DescribeVPCClassicLinkResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCClassicLinkResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPCEndpointServices.yaml b/fixture/DescribeVPCEndpointServices.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCEndpointServices.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCEndpointServicesResponse.proto b/fixture/DescribeVPCEndpointServicesResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCEndpointServicesResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPCEndpoints.yaml b/fixture/DescribeVPCEndpoints.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCEndpoints.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCEndpointsResponse.proto b/fixture/DescribeVPCEndpointsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCEndpointsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPCPeeringConnections.yaml b/fixture/DescribeVPCPeeringConnections.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCPeeringConnections.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCPeeringConnectionsResponse.proto b/fixture/DescribeVPCPeeringConnectionsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCPeeringConnectionsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPCs.yaml b/fixture/DescribeVPCs.yaml
deleted file mode 100644
--- a/fixture/DescribeVPCs.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPCsResponse.proto b/fixture/DescribeVPCsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPCsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPNConnections.yaml b/fixture/DescribeVPNConnections.yaml
deleted file mode 100644
--- a/fixture/DescribeVPNConnections.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPNConnectionsResponse.proto b/fixture/DescribeVPNConnectionsResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPNConnectionsResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVPNGateways.yaml b/fixture/DescribeVPNGateways.yaml
deleted file mode 100644
--- a/fixture/DescribeVPNGateways.yaml
+++ /dev/null
diff --git a/fixture/DescribeVPNGatewaysResponse.proto b/fixture/DescribeVPNGatewaysResponse.proto
deleted file mode 100644
--- a/fixture/DescribeVPNGatewaysResponse.proto
+++ /dev/null
diff --git a/fixture/DescribeVerifiedAccessEndpoints.yaml b/fixture/DescribeVerifiedAccessEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVerifiedAccessEndpointsResponse.proto b/fixture/DescribeVerifiedAccessEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessEndpointsResponse.proto
diff --git a/fixture/DescribeVerifiedAccessGroups.yaml b/fixture/DescribeVerifiedAccessGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVerifiedAccessGroupsResponse.proto b/fixture/DescribeVerifiedAccessGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessGroupsResponse.proto
diff --git a/fixture/DescribeVerifiedAccessInstanceLoggingConfigurations.yaml b/fixture/DescribeVerifiedAccessInstanceLoggingConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessInstanceLoggingConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVerifiedAccessInstanceLoggingConfigurationsResponse.proto b/fixture/DescribeVerifiedAccessInstanceLoggingConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessInstanceLoggingConfigurationsResponse.proto
diff --git a/fixture/DescribeVerifiedAccessInstances.yaml b/fixture/DescribeVerifiedAccessInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVerifiedAccessInstancesResponse.proto b/fixture/DescribeVerifiedAccessInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessInstancesResponse.proto
diff --git a/fixture/DescribeVerifiedAccessTrustProviders.yaml b/fixture/DescribeVerifiedAccessTrustProviders.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessTrustProviders.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVerifiedAccessTrustProvidersResponse.proto b/fixture/DescribeVerifiedAccessTrustProvidersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVerifiedAccessTrustProvidersResponse.proto
diff --git a/fixture/DescribeVolumeAttribute.yaml b/fixture/DescribeVolumeAttribute.yaml
--- a/fixture/DescribeVolumeAttribute.yaml
+++ b/fixture/DescribeVolumeAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVolumeStatus.yaml b/fixture/DescribeVolumeStatus.yaml
--- a/fixture/DescribeVolumeStatus.yaml
+++ b/fixture/DescribeVolumeStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVolumes.yaml b/fixture/DescribeVolumes.yaml
--- a/fixture/DescribeVolumes.yaml
+++ b/fixture/DescribeVolumes.yaml
@@ -1,10 +1,10 @@
 ---
 method: POST
 headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=6ca922b3947bc1979267af0221937d7ec465c13b02115cf4b51b5ec6b81fdb0a
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
   Host:                  ec2.us-east-1.amazonaws.com
   Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  47762738fe3ef466cf1abd914fd0cf227a43196dc664120d78e05099c19270af
+  X-Amz-Content-SHA256:  abcdef
   X-Amz-Date:            20091028T223200Z
 body:
-  Action=DescribeVolumes&Filter.1.Name=tag%3AName&Filter.1.Value.1=octopus&Filter.2.Name=tag%3ARole&Filter.2.Value.1=database&Filter.2.Value.2=server&Version=2016-11-15&VolumeId.1=foo&VolumeId.2=bar&VolumeId.3=baz
+  ''
diff --git a/fixture/DescribeVolumesModifications.yaml b/fixture/DescribeVolumesModifications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVolumesModifications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVolumesModificationsResponse.proto b/fixture/DescribeVolumesModificationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVolumesModificationsResponse.proto
diff --git a/fixture/DescribeVpcAttribute.yaml b/fixture/DescribeVpcAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcAttributeResponse.proto b/fixture/DescribeVpcAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcAttributeResponse.proto
diff --git a/fixture/DescribeVpcClassicLink.yaml b/fixture/DescribeVpcClassicLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcClassicLink.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcClassicLinkDnsSupport.yaml b/fixture/DescribeVpcClassicLinkDnsSupport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcClassicLinkDnsSupport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcClassicLinkDnsSupportResponse.proto b/fixture/DescribeVpcClassicLinkDnsSupportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcClassicLinkDnsSupportResponse.proto
diff --git a/fixture/DescribeVpcClassicLinkResponse.proto b/fixture/DescribeVpcClassicLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcClassicLinkResponse.proto
diff --git a/fixture/DescribeVpcEndpointConnectionNotifications.yaml b/fixture/DescribeVpcEndpointConnectionNotifications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointConnectionNotifications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcEndpointConnectionNotificationsResponse.proto b/fixture/DescribeVpcEndpointConnectionNotificationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointConnectionNotificationsResponse.proto
diff --git a/fixture/DescribeVpcEndpointConnections.yaml b/fixture/DescribeVpcEndpointConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcEndpointConnectionsResponse.proto b/fixture/DescribeVpcEndpointConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointConnectionsResponse.proto
diff --git a/fixture/DescribeVpcEndpointServiceConfigurations.yaml b/fixture/DescribeVpcEndpointServiceConfigurations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointServiceConfigurations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcEndpointServiceConfigurationsResponse.proto b/fixture/DescribeVpcEndpointServiceConfigurationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointServiceConfigurationsResponse.proto
diff --git a/fixture/DescribeVpcEndpointServicePermissions.yaml b/fixture/DescribeVpcEndpointServicePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointServicePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcEndpointServicePermissionsResponse.proto b/fixture/DescribeVpcEndpointServicePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointServicePermissionsResponse.proto
diff --git a/fixture/DescribeVpcEndpointServices.yaml b/fixture/DescribeVpcEndpointServices.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointServices.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcEndpointServicesResponse.proto b/fixture/DescribeVpcEndpointServicesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointServicesResponse.proto
diff --git a/fixture/DescribeVpcEndpoints.yaml b/fixture/DescribeVpcEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcEndpointsResponse.proto b/fixture/DescribeVpcEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcEndpointsResponse.proto
diff --git a/fixture/DescribeVpcPeeringConnections.yaml b/fixture/DescribeVpcPeeringConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcPeeringConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcPeeringConnectionsResponse.proto b/fixture/DescribeVpcPeeringConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcPeeringConnectionsResponse.proto
diff --git a/fixture/DescribeVpcs.yaml b/fixture/DescribeVpcs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpcsResponse.proto b/fixture/DescribeVpcsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpcsResponse.proto
diff --git a/fixture/DescribeVpnConnections.yaml b/fixture/DescribeVpnConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpnConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpnConnectionsResponse.proto b/fixture/DescribeVpnConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpnConnectionsResponse.proto
diff --git a/fixture/DescribeVpnGateways.yaml b/fixture/DescribeVpnGateways.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpnGateways.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DescribeVpnGatewaysResponse.proto b/fixture/DescribeVpnGatewaysResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVpnGatewaysResponse.proto
diff --git a/fixture/DetachClassicLinkVPC.yaml b/fixture/DetachClassicLinkVPC.yaml
deleted file mode 100644
--- a/fixture/DetachClassicLinkVPC.yaml
+++ /dev/null
diff --git a/fixture/DetachClassicLinkVPCResponse.proto b/fixture/DetachClassicLinkVPCResponse.proto
deleted file mode 100644
--- a/fixture/DetachClassicLinkVPCResponse.proto
+++ /dev/null
diff --git a/fixture/DetachClassicLinkVpc.yaml b/fixture/DetachClassicLinkVpc.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DetachClassicLinkVpc.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetachClassicLinkVpcResponse.proto b/fixture/DetachClassicLinkVpcResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DetachClassicLinkVpcResponse.proto
diff --git a/fixture/DetachInternetGateway.yaml b/fixture/DetachInternetGateway.yaml
--- a/fixture/DetachInternetGateway.yaml
+++ b/fixture/DetachInternetGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetachNetworkInterface.yaml b/fixture/DetachNetworkInterface.yaml
--- a/fixture/DetachNetworkInterface.yaml
+++ b/fixture/DetachNetworkInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetachVPNGateway.yaml b/fixture/DetachVPNGateway.yaml
deleted file mode 100644
--- a/fixture/DetachVPNGateway.yaml
+++ /dev/null
diff --git a/fixture/DetachVPNGatewayResponse.proto b/fixture/DetachVPNGatewayResponse.proto
deleted file mode 100644
--- a/fixture/DetachVPNGatewayResponse.proto
+++ /dev/null
diff --git a/fixture/DetachVerifiedAccessTrustProvider.yaml b/fixture/DetachVerifiedAccessTrustProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DetachVerifiedAccessTrustProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetachVerifiedAccessTrustProviderResponse.proto b/fixture/DetachVerifiedAccessTrustProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DetachVerifiedAccessTrustProviderResponse.proto
diff --git a/fixture/DetachVolume.yaml b/fixture/DetachVolume.yaml
--- a/fixture/DetachVolume.yaml
+++ b/fixture/DetachVolume.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetachVpnGateway.yaml b/fixture/DetachVpnGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DetachVpnGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DetachVpnGatewayResponse.proto b/fixture/DetachVpnGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DetachVpnGatewayResponse.proto
diff --git a/fixture/DisableAddressTransfer.yaml b/fixture/DisableAddressTransfer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableAddressTransfer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableAddressTransferResponse.proto b/fixture/DisableAddressTransferResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableAddressTransferResponse.proto
diff --git a/fixture/DisableAwsNetworkPerformanceMetricSubscription.yaml b/fixture/DisableAwsNetworkPerformanceMetricSubscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableAwsNetworkPerformanceMetricSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableAwsNetworkPerformanceMetricSubscriptionResponse.proto b/fixture/DisableAwsNetworkPerformanceMetricSubscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableAwsNetworkPerformanceMetricSubscriptionResponse.proto
diff --git a/fixture/DisableEbsEncryptionByDefault.yaml b/fixture/DisableEbsEncryptionByDefault.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableEbsEncryptionByDefault.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableEbsEncryptionByDefaultResponse.proto b/fixture/DisableEbsEncryptionByDefaultResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableEbsEncryptionByDefaultResponse.proto
diff --git a/fixture/DisableFastLaunch.yaml b/fixture/DisableFastLaunch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableFastLaunch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableFastLaunchResponse.proto b/fixture/DisableFastLaunchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableFastLaunchResponse.proto
diff --git a/fixture/DisableFastSnapshotRestores.yaml b/fixture/DisableFastSnapshotRestores.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableFastSnapshotRestores.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableFastSnapshotRestoresResponse.proto b/fixture/DisableFastSnapshotRestoresResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableFastSnapshotRestoresResponse.proto
diff --git a/fixture/DisableImageDeprecation.yaml b/fixture/DisableImageDeprecation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableImageDeprecation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableImageDeprecationResponse.proto b/fixture/DisableImageDeprecationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableImageDeprecationResponse.proto
diff --git a/fixture/DisableIpamOrganizationAdminAccount.yaml b/fixture/DisableIpamOrganizationAdminAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableIpamOrganizationAdminAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableIpamOrganizationAdminAccountResponse.proto b/fixture/DisableIpamOrganizationAdminAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableIpamOrganizationAdminAccountResponse.proto
diff --git a/fixture/DisableSerialConsoleAccess.yaml b/fixture/DisableSerialConsoleAccess.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableSerialConsoleAccess.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableSerialConsoleAccessResponse.proto b/fixture/DisableSerialConsoleAccessResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableSerialConsoleAccessResponse.proto
diff --git a/fixture/DisableTransitGatewayRouteTablePropagation.yaml b/fixture/DisableTransitGatewayRouteTablePropagation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableTransitGatewayRouteTablePropagation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableTransitGatewayRouteTablePropagationResponse.proto b/fixture/DisableTransitGatewayRouteTablePropagationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableTransitGatewayRouteTablePropagationResponse.proto
diff --git a/fixture/DisableVGWRoutePropagation.yaml b/fixture/DisableVGWRoutePropagation.yaml
deleted file mode 100644
--- a/fixture/DisableVGWRoutePropagation.yaml
+++ /dev/null
diff --git a/fixture/DisableVGWRoutePropagationResponse.proto b/fixture/DisableVGWRoutePropagationResponse.proto
deleted file mode 100644
--- a/fixture/DisableVGWRoutePropagationResponse.proto
+++ /dev/null
diff --git a/fixture/DisableVPCClassicLink.yaml b/fixture/DisableVPCClassicLink.yaml
deleted file mode 100644
--- a/fixture/DisableVPCClassicLink.yaml
+++ /dev/null
diff --git a/fixture/DisableVPCClassicLinkDNSSupport.yaml b/fixture/DisableVPCClassicLinkDNSSupport.yaml
deleted file mode 100644
--- a/fixture/DisableVPCClassicLinkDNSSupport.yaml
+++ /dev/null
diff --git a/fixture/DisableVPCClassicLinkDNSSupportResponse.proto b/fixture/DisableVPCClassicLinkDNSSupportResponse.proto
deleted file mode 100644
--- a/fixture/DisableVPCClassicLinkDNSSupportResponse.proto
+++ /dev/null
diff --git a/fixture/DisableVPCClassicLinkResponse.proto b/fixture/DisableVPCClassicLinkResponse.proto
deleted file mode 100644
--- a/fixture/DisableVPCClassicLinkResponse.proto
+++ /dev/null
diff --git a/fixture/DisableVgwRoutePropagation.yaml b/fixture/DisableVgwRoutePropagation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVgwRoutePropagation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableVgwRoutePropagationResponse.proto b/fixture/DisableVgwRoutePropagationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVgwRoutePropagationResponse.proto
diff --git a/fixture/DisableVpcClassicLink.yaml b/fixture/DisableVpcClassicLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVpcClassicLink.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableVpcClassicLinkDnsSupport.yaml b/fixture/DisableVpcClassicLinkDnsSupport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVpcClassicLinkDnsSupport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisableVpcClassicLinkDnsSupportResponse.proto b/fixture/DisableVpcClassicLinkDnsSupportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVpcClassicLinkDnsSupportResponse.proto
diff --git a/fixture/DisableVpcClassicLinkResponse.proto b/fixture/DisableVpcClassicLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVpcClassicLinkResponse.proto
diff --git a/fixture/DisassociateAddress.yaml b/fixture/DisassociateAddress.yaml
--- a/fixture/DisassociateAddress.yaml
+++ b/fixture/DisassociateAddress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateClientVpnTargetNetwork.yaml b/fixture/DisassociateClientVpnTargetNetwork.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateClientVpnTargetNetwork.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateClientVpnTargetNetworkResponse.proto b/fixture/DisassociateClientVpnTargetNetworkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateClientVpnTargetNetworkResponse.proto
diff --git a/fixture/DisassociateEnclaveCertificateIamRole.yaml b/fixture/DisassociateEnclaveCertificateIamRole.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateEnclaveCertificateIamRole.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateEnclaveCertificateIamRoleResponse.proto b/fixture/DisassociateEnclaveCertificateIamRoleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateEnclaveCertificateIamRoleResponse.proto
diff --git a/fixture/DisassociateIamInstanceProfile.yaml b/fixture/DisassociateIamInstanceProfile.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIamInstanceProfile.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateIamInstanceProfileResponse.proto b/fixture/DisassociateIamInstanceProfileResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateIamInstanceProfileResponse.proto
diff --git a/fixture/DisassociateInstanceEventWindow.yaml b/fixture/DisassociateInstanceEventWindow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateInstanceEventWindow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateInstanceEventWindowResponse.proto b/fixture/DisassociateInstanceEventWindowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateInstanceEventWindowResponse.proto
diff --git a/fixture/DisassociateRouteTable.yaml b/fixture/DisassociateRouteTable.yaml
--- a/fixture/DisassociateRouteTable.yaml
+++ b/fixture/DisassociateRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateSubnetCIdRBlock.yaml b/fixture/DisassociateSubnetCIdRBlock.yaml
deleted file mode 100644
--- a/fixture/DisassociateSubnetCIdRBlock.yaml
+++ /dev/null
diff --git a/fixture/DisassociateSubnetCIdRBlockResponse.proto b/fixture/DisassociateSubnetCIdRBlockResponse.proto
deleted file mode 100644
--- a/fixture/DisassociateSubnetCIdRBlockResponse.proto
+++ /dev/null
diff --git a/fixture/DisassociateTransitGatewayMulticastDomain.yaml b/fixture/DisassociateTransitGatewayMulticastDomain.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTransitGatewayMulticastDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateTransitGatewayMulticastDomainResponse.proto b/fixture/DisassociateTransitGatewayMulticastDomainResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTransitGatewayMulticastDomainResponse.proto
diff --git a/fixture/DisassociateTransitGatewayPolicyTable.yaml b/fixture/DisassociateTransitGatewayPolicyTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTransitGatewayPolicyTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateTransitGatewayPolicyTableResponse.proto b/fixture/DisassociateTransitGatewayPolicyTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTransitGatewayPolicyTableResponse.proto
diff --git a/fixture/DisassociateTransitGatewayRouteTable.yaml b/fixture/DisassociateTransitGatewayRouteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTransitGatewayRouteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateTransitGatewayRouteTableResponse.proto b/fixture/DisassociateTransitGatewayRouteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTransitGatewayRouteTableResponse.proto
diff --git a/fixture/DisassociateTrunkInterface.yaml b/fixture/DisassociateTrunkInterface.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTrunkInterface.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateTrunkInterfaceResponse.proto b/fixture/DisassociateTrunkInterfaceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateTrunkInterfaceResponse.proto
diff --git a/fixture/DisassociateVPCCIdRBlock.yaml b/fixture/DisassociateVPCCIdRBlock.yaml
deleted file mode 100644
--- a/fixture/DisassociateVPCCIdRBlock.yaml
+++ /dev/null
diff --git a/fixture/DisassociateVPCCIdRBlockResponse.proto b/fixture/DisassociateVPCCIdRBlockResponse.proto
deleted file mode 100644
--- a/fixture/DisassociateVPCCIdRBlockResponse.proto
+++ /dev/null
diff --git a/fixture/DisassociateVPCCidrBlock.yaml b/fixture/DisassociateVPCCidrBlock.yaml
deleted file mode 100644
--- a/fixture/DisassociateVPCCidrBlock.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-method: POST
-headers:
-  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
-  Host:                  ec2.us-east-1.amazonaws.com
-  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
-  X-Amz-Content-SHA256:  abcdef
-  X-Amz-Date:            20091028T223200Z
-body:
-  ''
diff --git a/fixture/DisassociateVPCCidrBlockResponse.proto b/fixture/DisassociateVPCCidrBlockResponse.proto
deleted file mode 100644
--- a/fixture/DisassociateVPCCidrBlockResponse.proto
+++ /dev/null
diff --git a/fixture/DisassociateVpcCidrBlock.yaml b/fixture/DisassociateVpcCidrBlock.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateVpcCidrBlock.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DisassociateVpcCidrBlockResponse.proto b/fixture/DisassociateVpcCidrBlockResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateVpcCidrBlockResponse.proto
diff --git a/fixture/EnableAddressTransfer.yaml b/fixture/EnableAddressTransfer.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableAddressTransfer.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableAddressTransferResponse.proto b/fixture/EnableAddressTransferResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableAddressTransferResponse.proto
diff --git a/fixture/EnableAwsNetworkPerformanceMetricSubscription.yaml b/fixture/EnableAwsNetworkPerformanceMetricSubscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableAwsNetworkPerformanceMetricSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableAwsNetworkPerformanceMetricSubscriptionResponse.proto b/fixture/EnableAwsNetworkPerformanceMetricSubscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableAwsNetworkPerformanceMetricSubscriptionResponse.proto
diff --git a/fixture/EnableEbsEncryptionByDefault.yaml b/fixture/EnableEbsEncryptionByDefault.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableEbsEncryptionByDefault.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableEbsEncryptionByDefaultResponse.proto b/fixture/EnableEbsEncryptionByDefaultResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableEbsEncryptionByDefaultResponse.proto
diff --git a/fixture/EnableFastLaunch.yaml b/fixture/EnableFastLaunch.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableFastLaunch.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableFastLaunchResponse.proto b/fixture/EnableFastLaunchResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableFastLaunchResponse.proto
diff --git a/fixture/EnableFastSnapshotRestores.yaml b/fixture/EnableFastSnapshotRestores.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableFastSnapshotRestores.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableFastSnapshotRestoresResponse.proto b/fixture/EnableFastSnapshotRestoresResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableFastSnapshotRestoresResponse.proto
diff --git a/fixture/EnableImageDeprecation.yaml b/fixture/EnableImageDeprecation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableImageDeprecation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableImageDeprecationResponse.proto b/fixture/EnableImageDeprecationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableImageDeprecationResponse.proto
diff --git a/fixture/EnableIpamOrganizationAdminAccount.yaml b/fixture/EnableIpamOrganizationAdminAccount.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableIpamOrganizationAdminAccount.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableIpamOrganizationAdminAccountResponse.proto b/fixture/EnableIpamOrganizationAdminAccountResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableIpamOrganizationAdminAccountResponse.proto
diff --git a/fixture/EnableReachabilityAnalyzerOrganizationSharing.yaml b/fixture/EnableReachabilityAnalyzerOrganizationSharing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableReachabilityAnalyzerOrganizationSharing.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableReachabilityAnalyzerOrganizationSharingResponse.proto b/fixture/EnableReachabilityAnalyzerOrganizationSharingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableReachabilityAnalyzerOrganizationSharingResponse.proto
diff --git a/fixture/EnableSerialConsoleAccess.yaml b/fixture/EnableSerialConsoleAccess.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableSerialConsoleAccess.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableSerialConsoleAccessResponse.proto b/fixture/EnableSerialConsoleAccessResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableSerialConsoleAccessResponse.proto
diff --git a/fixture/EnableTransitGatewayRouteTablePropagation.yaml b/fixture/EnableTransitGatewayRouteTablePropagation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableTransitGatewayRouteTablePropagation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableTransitGatewayRouteTablePropagationResponse.proto b/fixture/EnableTransitGatewayRouteTablePropagationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableTransitGatewayRouteTablePropagationResponse.proto
diff --git a/fixture/EnableVGWRoutePropagation.yaml b/fixture/EnableVGWRoutePropagation.yaml
deleted file mode 100644
--- a/fixture/EnableVGWRoutePropagation.yaml
+++ /dev/null
diff --git a/fixture/EnableVGWRoutePropagationResponse.proto b/fixture/EnableVGWRoutePropagationResponse.proto
deleted file mode 100644
--- a/fixture/EnableVGWRoutePropagationResponse.proto
+++ /dev/null
diff --git a/fixture/EnableVPCClassicLink.yaml b/fixture/EnableVPCClassicLink.yaml
deleted file mode 100644
--- a/fixture/EnableVPCClassicLink.yaml
+++ /dev/null
diff --git a/fixture/EnableVPCClassicLinkDNSSupport.yaml b/fixture/EnableVPCClassicLinkDNSSupport.yaml
deleted file mode 100644
--- a/fixture/EnableVPCClassicLinkDNSSupport.yaml
+++ /dev/null
diff --git a/fixture/EnableVPCClassicLinkDNSSupportResponse.proto b/fixture/EnableVPCClassicLinkDNSSupportResponse.proto
deleted file mode 100644
--- a/fixture/EnableVPCClassicLinkDNSSupportResponse.proto
+++ /dev/null
diff --git a/fixture/EnableVPCClassicLinkResponse.proto b/fixture/EnableVPCClassicLinkResponse.proto
deleted file mode 100644
--- a/fixture/EnableVPCClassicLinkResponse.proto
+++ /dev/null
diff --git a/fixture/EnableVgwRoutePropagation.yaml b/fixture/EnableVgwRoutePropagation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVgwRoutePropagation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableVgwRoutePropagationResponse.proto b/fixture/EnableVgwRoutePropagationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVgwRoutePropagationResponse.proto
diff --git a/fixture/EnableVolumeIO.yaml b/fixture/EnableVolumeIO.yaml
--- a/fixture/EnableVolumeIO.yaml
+++ b/fixture/EnableVolumeIO.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableVpcClassicLink.yaml b/fixture/EnableVpcClassicLink.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVpcClassicLink.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableVpcClassicLinkDnsSupport.yaml b/fixture/EnableVpcClassicLinkDnsSupport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVpcClassicLinkDnsSupport.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/EnableVpcClassicLinkDnsSupportResponse.proto b/fixture/EnableVpcClassicLinkDnsSupportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVpcClassicLinkDnsSupportResponse.proto
diff --git a/fixture/EnableVpcClassicLinkResponse.proto b/fixture/EnableVpcClassicLinkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVpcClassicLinkResponse.proto
diff --git a/fixture/ExportClientVpnClientCertificateRevocationList.yaml b/fixture/ExportClientVpnClientCertificateRevocationList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportClientVpnClientCertificateRevocationList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportClientVpnClientCertificateRevocationListResponse.proto b/fixture/ExportClientVpnClientCertificateRevocationListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportClientVpnClientCertificateRevocationListResponse.proto
diff --git a/fixture/ExportClientVpnClientConfiguration.yaml b/fixture/ExportClientVpnClientConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportClientVpnClientConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportClientVpnClientConfigurationResponse.proto b/fixture/ExportClientVpnClientConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportClientVpnClientConfigurationResponse.proto
diff --git a/fixture/ExportImage.yaml b/fixture/ExportImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportImageResponse.proto b/fixture/ExportImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportImageResponse.proto
diff --git a/fixture/ExportTransitGatewayRoutes.yaml b/fixture/ExportTransitGatewayRoutes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportTransitGatewayRoutes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportTransitGatewayRoutesResponse.proto b/fixture/ExportTransitGatewayRoutesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportTransitGatewayRoutesResponse.proto
diff --git a/fixture/GetAssociatedEnclaveCertificateIamRoles.yaml b/fixture/GetAssociatedEnclaveCertificateIamRoles.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssociatedEnclaveCertificateIamRoles.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAssociatedEnclaveCertificateIamRolesResponse.proto b/fixture/GetAssociatedEnclaveCertificateIamRolesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssociatedEnclaveCertificateIamRolesResponse.proto
diff --git a/fixture/GetAssociatedIpv6PoolCidrs.yaml b/fixture/GetAssociatedIpv6PoolCidrs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssociatedIpv6PoolCidrs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAssociatedIpv6PoolCidrsResponse.proto b/fixture/GetAssociatedIpv6PoolCidrsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAssociatedIpv6PoolCidrsResponse.proto
diff --git a/fixture/GetAwsNetworkPerformanceData.yaml b/fixture/GetAwsNetworkPerformanceData.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAwsNetworkPerformanceData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetAwsNetworkPerformanceDataResponse.proto b/fixture/GetAwsNetworkPerformanceDataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAwsNetworkPerformanceDataResponse.proto
diff --git a/fixture/GetCapacityReservationUsage.yaml b/fixture/GetCapacityReservationUsage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCapacityReservationUsage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCapacityReservationUsageResponse.proto b/fixture/GetCapacityReservationUsageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCapacityReservationUsageResponse.proto
diff --git a/fixture/GetCoipPoolUsage.yaml b/fixture/GetCoipPoolUsage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCoipPoolUsage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCoipPoolUsageResponse.proto b/fixture/GetCoipPoolUsageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCoipPoolUsageResponse.proto
diff --git a/fixture/GetConsoleOutput.yaml b/fixture/GetConsoleOutput.yaml
--- a/fixture/GetConsoleOutput.yaml
+++ b/fixture/GetConsoleOutput.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConsoleScreenshot.yaml b/fixture/GetConsoleScreenshot.yaml
--- a/fixture/GetConsoleScreenshot.yaml
+++ b/fixture/GetConsoleScreenshot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDefaultCreditSpecification.yaml b/fixture/GetDefaultCreditSpecification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDefaultCreditSpecification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDefaultCreditSpecificationResponse.proto b/fixture/GetDefaultCreditSpecificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDefaultCreditSpecificationResponse.proto
diff --git a/fixture/GetEbsDefaultKmsKeyId.yaml b/fixture/GetEbsDefaultKmsKeyId.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEbsDefaultKmsKeyId.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetEbsDefaultKmsKeyIdResponse.proto b/fixture/GetEbsDefaultKmsKeyIdResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEbsDefaultKmsKeyIdResponse.proto
diff --git a/fixture/GetEbsEncryptionByDefault.yaml b/fixture/GetEbsEncryptionByDefault.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetEbsEncryptionByDefault.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetEbsEncryptionByDefaultResponse.proto b/fixture/GetEbsEncryptionByDefaultResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetEbsEncryptionByDefaultResponse.proto
diff --git a/fixture/GetFlowLogsIntegrationTemplate.yaml b/fixture/GetFlowLogsIntegrationTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetFlowLogsIntegrationTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetFlowLogsIntegrationTemplateResponse.proto b/fixture/GetFlowLogsIntegrationTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFlowLogsIntegrationTemplateResponse.proto
diff --git a/fixture/GetGroupsForCapacityReservation.yaml b/fixture/GetGroupsForCapacityReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGroupsForCapacityReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetGroupsForCapacityReservationResponse.proto b/fixture/GetGroupsForCapacityReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGroupsForCapacityReservationResponse.proto
diff --git a/fixture/GetHostReservationPurchasePreview.yaml b/fixture/GetHostReservationPurchasePreview.yaml
--- a/fixture/GetHostReservationPurchasePreview.yaml
+++ b/fixture/GetHostReservationPurchasePreview.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetInstanceTypesFromInstanceRequirements.yaml b/fixture/GetInstanceTypesFromInstanceRequirements.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetInstanceTypesFromInstanceRequirements.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetInstanceTypesFromInstanceRequirementsResponse.proto b/fixture/GetInstanceTypesFromInstanceRequirementsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetInstanceTypesFromInstanceRequirementsResponse.proto
diff --git a/fixture/GetInstanceUefiData.yaml b/fixture/GetInstanceUefiData.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetInstanceUefiData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetInstanceUefiDataResponse.proto b/fixture/GetInstanceUefiDataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetInstanceUefiDataResponse.proto
diff --git a/fixture/GetIpamAddressHistory.yaml b/fixture/GetIpamAddressHistory.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamAddressHistory.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIpamAddressHistoryResponse.proto b/fixture/GetIpamAddressHistoryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamAddressHistoryResponse.proto
diff --git a/fixture/GetIpamPoolAllocations.yaml b/fixture/GetIpamPoolAllocations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamPoolAllocations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIpamPoolAllocationsResponse.proto b/fixture/GetIpamPoolAllocationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamPoolAllocationsResponse.proto
diff --git a/fixture/GetIpamPoolCidrs.yaml b/fixture/GetIpamPoolCidrs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamPoolCidrs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIpamPoolCidrsResponse.proto b/fixture/GetIpamPoolCidrsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamPoolCidrsResponse.proto
diff --git a/fixture/GetIpamResourceCidrs.yaml b/fixture/GetIpamResourceCidrs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamResourceCidrs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetIpamResourceCidrsResponse.proto b/fixture/GetIpamResourceCidrsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetIpamResourceCidrsResponse.proto
diff --git a/fixture/GetLaunchTemplateData.yaml b/fixture/GetLaunchTemplateData.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchTemplateData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetLaunchTemplateDataResponse.proto b/fixture/GetLaunchTemplateDataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetLaunchTemplateDataResponse.proto
diff --git a/fixture/GetManagedPrefixListAssociations.yaml b/fixture/GetManagedPrefixListAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetManagedPrefixListAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetManagedPrefixListAssociationsResponse.proto b/fixture/GetManagedPrefixListAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetManagedPrefixListAssociationsResponse.proto
diff --git a/fixture/GetManagedPrefixListEntries.yaml b/fixture/GetManagedPrefixListEntries.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetManagedPrefixListEntries.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetManagedPrefixListEntriesResponse.proto b/fixture/GetManagedPrefixListEntriesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetManagedPrefixListEntriesResponse.proto
diff --git a/fixture/GetNetworkInsightsAccessScopeAnalysisFindings.yaml b/fixture/GetNetworkInsightsAccessScopeAnalysisFindings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkInsightsAccessScopeAnalysisFindings.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetNetworkInsightsAccessScopeAnalysisFindingsResponse.proto b/fixture/GetNetworkInsightsAccessScopeAnalysisFindingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkInsightsAccessScopeAnalysisFindingsResponse.proto
diff --git a/fixture/GetNetworkInsightsAccessScopeContent.yaml b/fixture/GetNetworkInsightsAccessScopeContent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkInsightsAccessScopeContent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetNetworkInsightsAccessScopeContentResponse.proto b/fixture/GetNetworkInsightsAccessScopeContentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetNetworkInsightsAccessScopeContentResponse.proto
diff --git a/fixture/GetPasswordData.yaml b/fixture/GetPasswordData.yaml
--- a/fixture/GetPasswordData.yaml
+++ b/fixture/GetPasswordData.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetReservedInstancesExchangeQuote.yaml b/fixture/GetReservedInstancesExchangeQuote.yaml
--- a/fixture/GetReservedInstancesExchangeQuote.yaml
+++ b/fixture/GetReservedInstancesExchangeQuote.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSerialConsoleAccessStatus.yaml b/fixture/GetSerialConsoleAccessStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSerialConsoleAccessStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSerialConsoleAccessStatusResponse.proto b/fixture/GetSerialConsoleAccessStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSerialConsoleAccessStatusResponse.proto
diff --git a/fixture/GetSpotPlacementScores.yaml b/fixture/GetSpotPlacementScores.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSpotPlacementScores.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSpotPlacementScoresResponse.proto b/fixture/GetSpotPlacementScoresResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSpotPlacementScoresResponse.proto
diff --git a/fixture/GetSubnetCidrReservations.yaml b/fixture/GetSubnetCidrReservations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSubnetCidrReservations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetSubnetCidrReservationsResponse.proto b/fixture/GetSubnetCidrReservationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSubnetCidrReservationsResponse.proto
diff --git a/fixture/GetTransitGatewayAttachmentPropagations.yaml b/fixture/GetTransitGatewayAttachmentPropagations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayAttachmentPropagations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayAttachmentPropagationsResponse.proto b/fixture/GetTransitGatewayAttachmentPropagationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayAttachmentPropagationsResponse.proto
diff --git a/fixture/GetTransitGatewayMulticastDomainAssociations.yaml b/fixture/GetTransitGatewayMulticastDomainAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayMulticastDomainAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayMulticastDomainAssociationsResponse.proto b/fixture/GetTransitGatewayMulticastDomainAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayMulticastDomainAssociationsResponse.proto
diff --git a/fixture/GetTransitGatewayPolicyTableAssociations.yaml b/fixture/GetTransitGatewayPolicyTableAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayPolicyTableAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayPolicyTableAssociationsResponse.proto b/fixture/GetTransitGatewayPolicyTableAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayPolicyTableAssociationsResponse.proto
diff --git a/fixture/GetTransitGatewayPolicyTableEntries.yaml b/fixture/GetTransitGatewayPolicyTableEntries.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayPolicyTableEntries.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayPolicyTableEntriesResponse.proto b/fixture/GetTransitGatewayPolicyTableEntriesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayPolicyTableEntriesResponse.proto
diff --git a/fixture/GetTransitGatewayPrefixListReferences.yaml b/fixture/GetTransitGatewayPrefixListReferences.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayPrefixListReferences.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayPrefixListReferencesResponse.proto b/fixture/GetTransitGatewayPrefixListReferencesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayPrefixListReferencesResponse.proto
diff --git a/fixture/GetTransitGatewayRouteTableAssociations.yaml b/fixture/GetTransitGatewayRouteTableAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayRouteTableAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayRouteTableAssociationsResponse.proto b/fixture/GetTransitGatewayRouteTableAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayRouteTableAssociationsResponse.proto
diff --git a/fixture/GetTransitGatewayRouteTablePropagations.yaml b/fixture/GetTransitGatewayRouteTablePropagations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayRouteTablePropagations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTransitGatewayRouteTablePropagationsResponse.proto b/fixture/GetTransitGatewayRouteTablePropagationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTransitGatewayRouteTablePropagationsResponse.proto
diff --git a/fixture/GetVerifiedAccessEndpointPolicy.yaml b/fixture/GetVerifiedAccessEndpointPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVerifiedAccessEndpointPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetVerifiedAccessEndpointPolicyResponse.proto b/fixture/GetVerifiedAccessEndpointPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVerifiedAccessEndpointPolicyResponse.proto
diff --git a/fixture/GetVerifiedAccessGroupPolicy.yaml b/fixture/GetVerifiedAccessGroupPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVerifiedAccessGroupPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetVerifiedAccessGroupPolicyResponse.proto b/fixture/GetVerifiedAccessGroupPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVerifiedAccessGroupPolicyResponse.proto
diff --git a/fixture/GetVpnConnectionDeviceSampleConfiguration.yaml b/fixture/GetVpnConnectionDeviceSampleConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpnConnectionDeviceSampleConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetVpnConnectionDeviceSampleConfigurationResponse.proto b/fixture/GetVpnConnectionDeviceSampleConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpnConnectionDeviceSampleConfigurationResponse.proto
diff --git a/fixture/GetVpnConnectionDeviceTypes.yaml b/fixture/GetVpnConnectionDeviceTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpnConnectionDeviceTypes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetVpnConnectionDeviceTypesResponse.proto b/fixture/GetVpnConnectionDeviceTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetVpnConnectionDeviceTypesResponse.proto
diff --git a/fixture/ImportClientVpnClientCertificateRevocationList.yaml b/fixture/ImportClientVpnClientCertificateRevocationList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportClientVpnClientCertificateRevocationList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportClientVpnClientCertificateRevocationListResponse.proto b/fixture/ImportClientVpnClientCertificateRevocationListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportClientVpnClientCertificateRevocationListResponse.proto
diff --git a/fixture/ImportImage.yaml b/fixture/ImportImage.yaml
--- a/fixture/ImportImage.yaml
+++ b/fixture/ImportImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportInstance.yaml b/fixture/ImportInstance.yaml
--- a/fixture/ImportInstance.yaml
+++ b/fixture/ImportInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportKeyPair.yaml b/fixture/ImportKeyPair.yaml
--- a/fixture/ImportKeyPair.yaml
+++ b/fixture/ImportKeyPair.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportSnapshot.yaml b/fixture/ImportSnapshot.yaml
--- a/fixture/ImportSnapshot.yaml
+++ b/fixture/ImportSnapshot.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportVolume.yaml b/fixture/ImportVolume.yaml
--- a/fixture/ImportVolume.yaml
+++ b/fixture/ImportVolume.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImagesInRecycleBin.yaml b/fixture/ListImagesInRecycleBin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagesInRecycleBin.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListImagesInRecycleBinResponse.proto b/fixture/ListImagesInRecycleBinResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListImagesInRecycleBinResponse.proto
diff --git a/fixture/ListSnapshotsInRecycleBin.yaml b/fixture/ListSnapshotsInRecycleBin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListSnapshotsInRecycleBin.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListSnapshotsInRecycleBinResponse.proto b/fixture/ListSnapshotsInRecycleBinResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListSnapshotsInRecycleBinResponse.proto
diff --git a/fixture/ModifyAddressAttribute.yaml b/fixture/ModifyAddressAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyAddressAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyAddressAttributeResponse.proto b/fixture/ModifyAddressAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyAddressAttributeResponse.proto
diff --git a/fixture/ModifyAvailabilityZoneGroup.yaml b/fixture/ModifyAvailabilityZoneGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyAvailabilityZoneGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyAvailabilityZoneGroupResponse.proto b/fixture/ModifyAvailabilityZoneGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyAvailabilityZoneGroupResponse.proto
diff --git a/fixture/ModifyCapacityReservation.yaml b/fixture/ModifyCapacityReservation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyCapacityReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyCapacityReservationFleet.yaml b/fixture/ModifyCapacityReservationFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyCapacityReservationFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyCapacityReservationFleetResponse.proto b/fixture/ModifyCapacityReservationFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyCapacityReservationFleetResponse.proto
diff --git a/fixture/ModifyCapacityReservationResponse.proto b/fixture/ModifyCapacityReservationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyCapacityReservationResponse.proto
diff --git a/fixture/ModifyClientVpnEndpoint.yaml b/fixture/ModifyClientVpnEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyClientVpnEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyClientVpnEndpointResponse.proto b/fixture/ModifyClientVpnEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyClientVpnEndpointResponse.proto
diff --git a/fixture/ModifyDefaultCreditSpecification.yaml b/fixture/ModifyDefaultCreditSpecification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyDefaultCreditSpecification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyDefaultCreditSpecificationResponse.proto b/fixture/ModifyDefaultCreditSpecificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyDefaultCreditSpecificationResponse.proto
diff --git a/fixture/ModifyEbsDefaultKmsKeyId.yaml b/fixture/ModifyEbsDefaultKmsKeyId.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyEbsDefaultKmsKeyId.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyEbsDefaultKmsKeyIdResponse.proto b/fixture/ModifyEbsDefaultKmsKeyIdResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyEbsDefaultKmsKeyIdResponse.proto
diff --git a/fixture/ModifyFleet.yaml b/fixture/ModifyFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyFleetResponse.proto b/fixture/ModifyFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyFleetResponse.proto
diff --git a/fixture/ModifyFpgaImageAttribute.yaml b/fixture/ModifyFpgaImageAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyFpgaImageAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyFpgaImageAttributeResponse.proto b/fixture/ModifyFpgaImageAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyFpgaImageAttributeResponse.proto
diff --git a/fixture/ModifyHosts.yaml b/fixture/ModifyHosts.yaml
--- a/fixture/ModifyHosts.yaml
+++ b/fixture/ModifyHosts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIdFormat.yaml b/fixture/ModifyIdFormat.yaml
--- a/fixture/ModifyIdFormat.yaml
+++ b/fixture/ModifyIdFormat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIdentityIdFormat.yaml b/fixture/ModifyIdentityIdFormat.yaml
--- a/fixture/ModifyIdentityIdFormat.yaml
+++ b/fixture/ModifyIdentityIdFormat.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyImageAttribute.yaml b/fixture/ModifyImageAttribute.yaml
--- a/fixture/ModifyImageAttribute.yaml
+++ b/fixture/ModifyImageAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceAttribute.yaml b/fixture/ModifyInstanceAttribute.yaml
--- a/fixture/ModifyInstanceAttribute.yaml
+++ b/fixture/ModifyInstanceAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceCapacityReservationAttributes.yaml b/fixture/ModifyInstanceCapacityReservationAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceCapacityReservationAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceCapacityReservationAttributesResponse.proto b/fixture/ModifyInstanceCapacityReservationAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceCapacityReservationAttributesResponse.proto
diff --git a/fixture/ModifyInstanceCreditSpecification.yaml b/fixture/ModifyInstanceCreditSpecification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceCreditSpecification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceCreditSpecificationResponse.proto b/fixture/ModifyInstanceCreditSpecificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceCreditSpecificationResponse.proto
diff --git a/fixture/ModifyInstanceEventStartTime.yaml b/fixture/ModifyInstanceEventStartTime.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceEventStartTime.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceEventStartTimeResponse.proto b/fixture/ModifyInstanceEventStartTimeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceEventStartTimeResponse.proto
diff --git a/fixture/ModifyInstanceEventWindow.yaml b/fixture/ModifyInstanceEventWindow.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceEventWindow.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceEventWindowResponse.proto b/fixture/ModifyInstanceEventWindowResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceEventWindowResponse.proto
diff --git a/fixture/ModifyInstanceMaintenanceOptions.yaml b/fixture/ModifyInstanceMaintenanceOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceMaintenanceOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceMaintenanceOptionsResponse.proto b/fixture/ModifyInstanceMaintenanceOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceMaintenanceOptionsResponse.proto
diff --git a/fixture/ModifyInstanceMetadataOptions.yaml b/fixture/ModifyInstanceMetadataOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceMetadataOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyInstanceMetadataOptionsResponse.proto b/fixture/ModifyInstanceMetadataOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyInstanceMetadataOptionsResponse.proto
diff --git a/fixture/ModifyInstancePlacement.yaml b/fixture/ModifyInstancePlacement.yaml
--- a/fixture/ModifyInstancePlacement.yaml
+++ b/fixture/ModifyInstancePlacement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIpam.yaml b/fixture/ModifyIpam.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpam.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIpamPool.yaml b/fixture/ModifyIpamPool.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamPool.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIpamPoolResponse.proto b/fixture/ModifyIpamPoolResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamPoolResponse.proto
diff --git a/fixture/ModifyIpamResourceCidr.yaml b/fixture/ModifyIpamResourceCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamResourceCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIpamResourceCidrResponse.proto b/fixture/ModifyIpamResourceCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamResourceCidrResponse.proto
diff --git a/fixture/ModifyIpamResponse.proto b/fixture/ModifyIpamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamResponse.proto
diff --git a/fixture/ModifyIpamScope.yaml b/fixture/ModifyIpamScope.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamScope.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyIpamScopeResponse.proto b/fixture/ModifyIpamScopeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyIpamScopeResponse.proto
diff --git a/fixture/ModifyLaunchTemplate.yaml b/fixture/ModifyLaunchTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyLaunchTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyLaunchTemplateResponse.proto b/fixture/ModifyLaunchTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyLaunchTemplateResponse.proto
diff --git a/fixture/ModifyLocalGatewayRoute.yaml b/fixture/ModifyLocalGatewayRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyLocalGatewayRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyLocalGatewayRouteResponse.proto b/fixture/ModifyLocalGatewayRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyLocalGatewayRouteResponse.proto
diff --git a/fixture/ModifyManagedPrefixList.yaml b/fixture/ModifyManagedPrefixList.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyManagedPrefixList.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyManagedPrefixListResponse.proto b/fixture/ModifyManagedPrefixListResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyManagedPrefixListResponse.proto
diff --git a/fixture/ModifyNetworkInterfaceAttribute.yaml b/fixture/ModifyNetworkInterfaceAttribute.yaml
--- a/fixture/ModifyNetworkInterfaceAttribute.yaml
+++ b/fixture/ModifyNetworkInterfaceAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyPrivateDnsNameOptions.yaml b/fixture/ModifyPrivateDnsNameOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyPrivateDnsNameOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyPrivateDnsNameOptionsResponse.proto b/fixture/ModifyPrivateDnsNameOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyPrivateDnsNameOptionsResponse.proto
diff --git a/fixture/ModifyReservedInstances.yaml b/fixture/ModifyReservedInstances.yaml
--- a/fixture/ModifyReservedInstances.yaml
+++ b/fixture/ModifyReservedInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySecurityGroupRules.yaml b/fixture/ModifySecurityGroupRules.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySecurityGroupRules.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySecurityGroupRulesResponse.proto b/fixture/ModifySecurityGroupRulesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySecurityGroupRulesResponse.proto
diff --git a/fixture/ModifySnapshotAttribute.yaml b/fixture/ModifySnapshotAttribute.yaml
--- a/fixture/ModifySnapshotAttribute.yaml
+++ b/fixture/ModifySnapshotAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySnapshotTier.yaml b/fixture/ModifySnapshotTier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySnapshotTier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySnapshotTierResponse.proto b/fixture/ModifySnapshotTierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifySnapshotTierResponse.proto
diff --git a/fixture/ModifySpotFleetRequest.yaml b/fixture/ModifySpotFleetRequest.yaml
--- a/fixture/ModifySpotFleetRequest.yaml
+++ b/fixture/ModifySpotFleetRequest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifySubnetAttribute.yaml b/fixture/ModifySubnetAttribute.yaml
--- a/fixture/ModifySubnetAttribute.yaml
+++ b/fixture/ModifySubnetAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTrafficMirrorFilterNetworkServices.yaml b/fixture/ModifyTrafficMirrorFilterNetworkServices.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTrafficMirrorFilterNetworkServices.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTrafficMirrorFilterNetworkServicesResponse.proto b/fixture/ModifyTrafficMirrorFilterNetworkServicesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTrafficMirrorFilterNetworkServicesResponse.proto
diff --git a/fixture/ModifyTrafficMirrorFilterRule.yaml b/fixture/ModifyTrafficMirrorFilterRule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTrafficMirrorFilterRule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTrafficMirrorFilterRuleResponse.proto b/fixture/ModifyTrafficMirrorFilterRuleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTrafficMirrorFilterRuleResponse.proto
diff --git a/fixture/ModifyTrafficMirrorSession.yaml b/fixture/ModifyTrafficMirrorSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTrafficMirrorSession.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTrafficMirrorSessionResponse.proto b/fixture/ModifyTrafficMirrorSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTrafficMirrorSessionResponse.proto
diff --git a/fixture/ModifyTransitGateway.yaml b/fixture/ModifyTransitGateway.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTransitGateway.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTransitGatewayPrefixListReference.yaml b/fixture/ModifyTransitGatewayPrefixListReference.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTransitGatewayPrefixListReference.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTransitGatewayPrefixListReferenceResponse.proto b/fixture/ModifyTransitGatewayPrefixListReferenceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTransitGatewayPrefixListReferenceResponse.proto
diff --git a/fixture/ModifyTransitGatewayResponse.proto b/fixture/ModifyTransitGatewayResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTransitGatewayResponse.proto
diff --git a/fixture/ModifyTransitGatewayVpcAttachment.yaml b/fixture/ModifyTransitGatewayVpcAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTransitGatewayVpcAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyTransitGatewayVpcAttachmentResponse.proto b/fixture/ModifyTransitGatewayVpcAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyTransitGatewayVpcAttachmentResponse.proto
diff --git a/fixture/ModifyVPCAttribute.yaml b/fixture/ModifyVPCAttribute.yaml
deleted file mode 100644
--- a/fixture/ModifyVPCAttribute.yaml
+++ /dev/null
diff --git a/fixture/ModifyVPCAttributeResponse.proto b/fixture/ModifyVPCAttributeResponse.proto
deleted file mode 100644
--- a/fixture/ModifyVPCAttributeResponse.proto
+++ /dev/null
diff --git a/fixture/ModifyVPCEndpoint.yaml b/fixture/ModifyVPCEndpoint.yaml
deleted file mode 100644
--- a/fixture/ModifyVPCEndpoint.yaml
+++ /dev/null
diff --git a/fixture/ModifyVPCEndpointResponse.proto b/fixture/ModifyVPCEndpointResponse.proto
deleted file mode 100644
--- a/fixture/ModifyVPCEndpointResponse.proto
+++ /dev/null
diff --git a/fixture/ModifyVPCPeeringConnectionOptions.yaml b/fixture/ModifyVPCPeeringConnectionOptions.yaml
deleted file mode 100644
--- a/fixture/ModifyVPCPeeringConnectionOptions.yaml
+++ /dev/null
diff --git a/fixture/ModifyVPCPeeringConnectionOptionsResponse.proto b/fixture/ModifyVPCPeeringConnectionOptionsResponse.proto
deleted file mode 100644
--- a/fixture/ModifyVPCPeeringConnectionOptionsResponse.proto
+++ /dev/null
diff --git a/fixture/ModifyVerifiedAccessEndpoint.yaml b/fixture/ModifyVerifiedAccessEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessEndpointPolicy.yaml b/fixture/ModifyVerifiedAccessEndpointPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessEndpointPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessEndpointPolicyResponse.proto b/fixture/ModifyVerifiedAccessEndpointPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessEndpointPolicyResponse.proto
diff --git a/fixture/ModifyVerifiedAccessEndpointResponse.proto b/fixture/ModifyVerifiedAccessEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessEndpointResponse.proto
diff --git a/fixture/ModifyVerifiedAccessGroup.yaml b/fixture/ModifyVerifiedAccessGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessGroup.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessGroupPolicy.yaml b/fixture/ModifyVerifiedAccessGroupPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessGroupPolicy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessGroupPolicyResponse.proto b/fixture/ModifyVerifiedAccessGroupPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessGroupPolicyResponse.proto
diff --git a/fixture/ModifyVerifiedAccessGroupResponse.proto b/fixture/ModifyVerifiedAccessGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessGroupResponse.proto
diff --git a/fixture/ModifyVerifiedAccessInstance.yaml b/fixture/ModifyVerifiedAccessInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessInstance.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessInstanceLoggingConfiguration.yaml b/fixture/ModifyVerifiedAccessInstanceLoggingConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessInstanceLoggingConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessInstanceLoggingConfigurationResponse.proto b/fixture/ModifyVerifiedAccessInstanceLoggingConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessInstanceLoggingConfigurationResponse.proto
diff --git a/fixture/ModifyVerifiedAccessInstanceResponse.proto b/fixture/ModifyVerifiedAccessInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessInstanceResponse.proto
diff --git a/fixture/ModifyVerifiedAccessTrustProvider.yaml b/fixture/ModifyVerifiedAccessTrustProvider.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessTrustProvider.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVerifiedAccessTrustProviderResponse.proto b/fixture/ModifyVerifiedAccessTrustProviderResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVerifiedAccessTrustProviderResponse.proto
diff --git a/fixture/ModifyVolume.yaml b/fixture/ModifyVolume.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVolume.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVolumeAttribute.yaml b/fixture/ModifyVolumeAttribute.yaml
--- a/fixture/ModifyVolumeAttribute.yaml
+++ b/fixture/ModifyVolumeAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVolumeResponse.proto b/fixture/ModifyVolumeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVolumeResponse.proto
diff --git a/fixture/ModifyVpcAttribute.yaml b/fixture/ModifyVpcAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcAttributeResponse.proto b/fixture/ModifyVpcAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcAttributeResponse.proto
diff --git a/fixture/ModifyVpcEndpoint.yaml b/fixture/ModifyVpcEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcEndpointConnectionNotification.yaml b/fixture/ModifyVpcEndpointConnectionNotification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointConnectionNotification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcEndpointConnectionNotificationResponse.proto b/fixture/ModifyVpcEndpointConnectionNotificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointConnectionNotificationResponse.proto
diff --git a/fixture/ModifyVpcEndpointResponse.proto b/fixture/ModifyVpcEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointResponse.proto
diff --git a/fixture/ModifyVpcEndpointServiceConfiguration.yaml b/fixture/ModifyVpcEndpointServiceConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointServiceConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcEndpointServiceConfigurationResponse.proto b/fixture/ModifyVpcEndpointServiceConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointServiceConfigurationResponse.proto
diff --git a/fixture/ModifyVpcEndpointServicePayerResponsibility.yaml b/fixture/ModifyVpcEndpointServicePayerResponsibility.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointServicePayerResponsibility.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcEndpointServicePayerResponsibilityResponse.proto b/fixture/ModifyVpcEndpointServicePayerResponsibilityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointServicePayerResponsibilityResponse.proto
diff --git a/fixture/ModifyVpcEndpointServicePermissions.yaml b/fixture/ModifyVpcEndpointServicePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointServicePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcEndpointServicePermissionsResponse.proto b/fixture/ModifyVpcEndpointServicePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcEndpointServicePermissionsResponse.proto
diff --git a/fixture/ModifyVpcPeeringConnectionOptions.yaml b/fixture/ModifyVpcPeeringConnectionOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcPeeringConnectionOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcPeeringConnectionOptionsResponse.proto b/fixture/ModifyVpcPeeringConnectionOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcPeeringConnectionOptionsResponse.proto
diff --git a/fixture/ModifyVpcTenancy.yaml b/fixture/ModifyVpcTenancy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcTenancy.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpcTenancyResponse.proto b/fixture/ModifyVpcTenancyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpcTenancyResponse.proto
diff --git a/fixture/ModifyVpnConnection.yaml b/fixture/ModifyVpnConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpnConnectionOptions.yaml b/fixture/ModifyVpnConnectionOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnConnectionOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpnConnectionOptionsResponse.proto b/fixture/ModifyVpnConnectionOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnConnectionOptionsResponse.proto
diff --git a/fixture/ModifyVpnConnectionResponse.proto b/fixture/ModifyVpnConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnConnectionResponse.proto
diff --git a/fixture/ModifyVpnTunnelCertificate.yaml b/fixture/ModifyVpnTunnelCertificate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnTunnelCertificate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpnTunnelCertificateResponse.proto b/fixture/ModifyVpnTunnelCertificateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnTunnelCertificateResponse.proto
diff --git a/fixture/ModifyVpnTunnelOptions.yaml b/fixture/ModifyVpnTunnelOptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnTunnelOptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ModifyVpnTunnelOptionsResponse.proto b/fixture/ModifyVpnTunnelOptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyVpnTunnelOptionsResponse.proto
diff --git a/fixture/MonitorInstances.yaml b/fixture/MonitorInstances.yaml
--- a/fixture/MonitorInstances.yaml
+++ b/fixture/MonitorInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/MoveAddressToVPC.yaml b/fixture/MoveAddressToVPC.yaml
deleted file mode 100644
--- a/fixture/MoveAddressToVPC.yaml
+++ /dev/null
diff --git a/fixture/MoveAddressToVPCResponse.proto b/fixture/MoveAddressToVPCResponse.proto
deleted file mode 100644
--- a/fixture/MoveAddressToVPCResponse.proto
+++ /dev/null
diff --git a/fixture/MoveAddressToVpc.yaml b/fixture/MoveAddressToVpc.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/MoveAddressToVpc.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/MoveAddressToVpcResponse.proto b/fixture/MoveAddressToVpcResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/MoveAddressToVpcResponse.proto
diff --git a/fixture/MoveByoipCidrToIpam.yaml b/fixture/MoveByoipCidrToIpam.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/MoveByoipCidrToIpam.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/MoveByoipCidrToIpamResponse.proto b/fixture/MoveByoipCidrToIpamResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/MoveByoipCidrToIpamResponse.proto
diff --git a/fixture/ProvisionByoipCidr.yaml b/fixture/ProvisionByoipCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ProvisionByoipCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ProvisionByoipCidrResponse.proto b/fixture/ProvisionByoipCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ProvisionByoipCidrResponse.proto
diff --git a/fixture/ProvisionIpamPoolCidr.yaml b/fixture/ProvisionIpamPoolCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ProvisionIpamPoolCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ProvisionIpamPoolCidrResponse.proto b/fixture/ProvisionIpamPoolCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ProvisionIpamPoolCidrResponse.proto
diff --git a/fixture/ProvisionPublicIpv4PoolCidr.yaml b/fixture/ProvisionPublicIpv4PoolCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ProvisionPublicIpv4PoolCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ProvisionPublicIpv4PoolCidrResponse.proto b/fixture/ProvisionPublicIpv4PoolCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ProvisionPublicIpv4PoolCidrResponse.proto
diff --git a/fixture/PurchaseHostReservation.yaml b/fixture/PurchaseHostReservation.yaml
--- a/fixture/PurchaseHostReservation.yaml
+++ b/fixture/PurchaseHostReservation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PurchaseReservedInstancesOffering.yaml b/fixture/PurchaseReservedInstancesOffering.yaml
--- a/fixture/PurchaseReservedInstancesOffering.yaml
+++ b/fixture/PurchaseReservedInstancesOffering.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PurchaseScheduledInstances.yaml b/fixture/PurchaseScheduledInstances.yaml
--- a/fixture/PurchaseScheduledInstances.yaml
+++ b/fixture/PurchaseScheduledInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RebootInstances.yaml b/fixture/RebootInstances.yaml
--- a/fixture/RebootInstances.yaml
+++ b/fixture/RebootInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterImage.yaml b/fixture/RegisterImage.yaml
--- a/fixture/RegisterImage.yaml
+++ b/fixture/RegisterImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterInstanceEventNotificationAttributes.yaml b/fixture/RegisterInstanceEventNotificationAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterInstanceEventNotificationAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterInstanceEventNotificationAttributesResponse.proto b/fixture/RegisterInstanceEventNotificationAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterInstanceEventNotificationAttributesResponse.proto
diff --git a/fixture/RegisterTransitGatewayMulticastGroupMembers.yaml b/fixture/RegisterTransitGatewayMulticastGroupMembers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterTransitGatewayMulticastGroupMembers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterTransitGatewayMulticastGroupMembersResponse.proto b/fixture/RegisterTransitGatewayMulticastGroupMembersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterTransitGatewayMulticastGroupMembersResponse.proto
diff --git a/fixture/RegisterTransitGatewayMulticastGroupSources.yaml b/fixture/RegisterTransitGatewayMulticastGroupSources.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterTransitGatewayMulticastGroupSources.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RegisterTransitGatewayMulticastGroupSourcesResponse.proto b/fixture/RegisterTransitGatewayMulticastGroupSourcesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RegisterTransitGatewayMulticastGroupSourcesResponse.proto
diff --git a/fixture/RejectTransitGatewayMulticastDomainAssociations.yaml b/fixture/RejectTransitGatewayMulticastDomainAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectTransitGatewayMulticastDomainAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectTransitGatewayMulticastDomainAssociationsResponse.proto b/fixture/RejectTransitGatewayMulticastDomainAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectTransitGatewayMulticastDomainAssociationsResponse.proto
diff --git a/fixture/RejectTransitGatewayPeeringAttachment.yaml b/fixture/RejectTransitGatewayPeeringAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectTransitGatewayPeeringAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectTransitGatewayPeeringAttachmentResponse.proto b/fixture/RejectTransitGatewayPeeringAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectTransitGatewayPeeringAttachmentResponse.proto
diff --git a/fixture/RejectTransitGatewayVpcAttachment.yaml b/fixture/RejectTransitGatewayVpcAttachment.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectTransitGatewayVpcAttachment.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectTransitGatewayVpcAttachmentResponse.proto b/fixture/RejectTransitGatewayVpcAttachmentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectTransitGatewayVpcAttachmentResponse.proto
diff --git a/fixture/RejectVPCPeeringConnection.yaml b/fixture/RejectVPCPeeringConnection.yaml
deleted file mode 100644
--- a/fixture/RejectVPCPeeringConnection.yaml
+++ /dev/null
diff --git a/fixture/RejectVPCPeeringConnectionResponse.proto b/fixture/RejectVPCPeeringConnectionResponse.proto
deleted file mode 100644
--- a/fixture/RejectVPCPeeringConnectionResponse.proto
+++ /dev/null
diff --git a/fixture/RejectVpcEndpointConnections.yaml b/fixture/RejectVpcEndpointConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectVpcEndpointConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectVpcEndpointConnectionsResponse.proto b/fixture/RejectVpcEndpointConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectVpcEndpointConnectionsResponse.proto
diff --git a/fixture/RejectVpcPeeringConnection.yaml b/fixture/RejectVpcPeeringConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RejectVpcPeeringConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RejectVpcPeeringConnectionResponse.proto b/fixture/RejectVpcPeeringConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RejectVpcPeeringConnectionResponse.proto
diff --git a/fixture/ReleaseAddress.yaml b/fixture/ReleaseAddress.yaml
--- a/fixture/ReleaseAddress.yaml
+++ b/fixture/ReleaseAddress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReleaseHosts.yaml b/fixture/ReleaseHosts.yaml
--- a/fixture/ReleaseHosts.yaml
+++ b/fixture/ReleaseHosts.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReleaseIpamPoolAllocation.yaml b/fixture/ReleaseIpamPoolAllocation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReleaseIpamPoolAllocation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReleaseIpamPoolAllocationResponse.proto b/fixture/ReleaseIpamPoolAllocationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReleaseIpamPoolAllocationResponse.proto
diff --git a/fixture/ReplaceIamInstanceProfileAssociation.yaml b/fixture/ReplaceIamInstanceProfileAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceIamInstanceProfileAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReplaceIamInstanceProfileAssociationResponse.proto b/fixture/ReplaceIamInstanceProfileAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceIamInstanceProfileAssociationResponse.proto
diff --git a/fixture/ReplaceNetworkACLAssociation.yaml b/fixture/ReplaceNetworkACLAssociation.yaml
deleted file mode 100644
--- a/fixture/ReplaceNetworkACLAssociation.yaml
+++ /dev/null
diff --git a/fixture/ReplaceNetworkACLAssociationResponse.proto b/fixture/ReplaceNetworkACLAssociationResponse.proto
deleted file mode 100644
--- a/fixture/ReplaceNetworkACLAssociationResponse.proto
+++ /dev/null
diff --git a/fixture/ReplaceNetworkACLEntry.yaml b/fixture/ReplaceNetworkACLEntry.yaml
deleted file mode 100644
--- a/fixture/ReplaceNetworkACLEntry.yaml
+++ /dev/null
diff --git a/fixture/ReplaceNetworkACLEntryResponse.proto b/fixture/ReplaceNetworkACLEntryResponse.proto
deleted file mode 100644
--- a/fixture/ReplaceNetworkACLEntryResponse.proto
+++ /dev/null
diff --git a/fixture/ReplaceNetworkAclAssociation.yaml b/fixture/ReplaceNetworkAclAssociation.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceNetworkAclAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReplaceNetworkAclAssociationResponse.proto b/fixture/ReplaceNetworkAclAssociationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceNetworkAclAssociationResponse.proto
diff --git a/fixture/ReplaceNetworkAclEntry.yaml b/fixture/ReplaceNetworkAclEntry.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceNetworkAclEntry.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReplaceNetworkAclEntryResponse.proto b/fixture/ReplaceNetworkAclEntryResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceNetworkAclEntryResponse.proto
diff --git a/fixture/ReplaceRoute.yaml b/fixture/ReplaceRoute.yaml
--- a/fixture/ReplaceRoute.yaml
+++ b/fixture/ReplaceRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReplaceRouteTableAssociation.yaml b/fixture/ReplaceRouteTableAssociation.yaml
--- a/fixture/ReplaceRouteTableAssociation.yaml
+++ b/fixture/ReplaceRouteTableAssociation.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReplaceTransitGatewayRoute.yaml b/fixture/ReplaceTransitGatewayRoute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceTransitGatewayRoute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ReplaceTransitGatewayRouteResponse.proto b/fixture/ReplaceTransitGatewayRouteResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ReplaceTransitGatewayRouteResponse.proto
diff --git a/fixture/ReportInstanceStatus.yaml b/fixture/ReportInstanceStatus.yaml
--- a/fixture/ReportInstanceStatus.yaml
+++ b/fixture/ReportInstanceStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RequestSpotFleet.yaml b/fixture/RequestSpotFleet.yaml
--- a/fixture/RequestSpotFleet.yaml
+++ b/fixture/RequestSpotFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RequestSpotInstances.yaml b/fixture/RequestSpotInstances.yaml
--- a/fixture/RequestSpotInstances.yaml
+++ b/fixture/RequestSpotInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetAddressAttribute.yaml b/fixture/ResetAddressAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetAddressAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetAddressAttributeResponse.proto b/fixture/ResetAddressAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetAddressAttributeResponse.proto
diff --git a/fixture/ResetEbsDefaultKmsKeyId.yaml b/fixture/ResetEbsDefaultKmsKeyId.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetEbsDefaultKmsKeyId.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetEbsDefaultKmsKeyIdResponse.proto b/fixture/ResetEbsDefaultKmsKeyIdResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetEbsDefaultKmsKeyIdResponse.proto
diff --git a/fixture/ResetFpgaImageAttribute.yaml b/fixture/ResetFpgaImageAttribute.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetFpgaImageAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetFpgaImageAttributeResponse.proto b/fixture/ResetFpgaImageAttributeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetFpgaImageAttributeResponse.proto
diff --git a/fixture/ResetImageAttribute.yaml b/fixture/ResetImageAttribute.yaml
--- a/fixture/ResetImageAttribute.yaml
+++ b/fixture/ResetImageAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetInstanceAttribute.yaml b/fixture/ResetInstanceAttribute.yaml
--- a/fixture/ResetInstanceAttribute.yaml
+++ b/fixture/ResetInstanceAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetNetworkInterfaceAttribute.yaml b/fixture/ResetNetworkInterfaceAttribute.yaml
--- a/fixture/ResetNetworkInterfaceAttribute.yaml
+++ b/fixture/ResetNetworkInterfaceAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetSnapshotAttribute.yaml b/fixture/ResetSnapshotAttribute.yaml
--- a/fixture/ResetSnapshotAttribute.yaml
+++ b/fixture/ResetSnapshotAttribute.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreAddressToClassic.yaml b/fixture/RestoreAddressToClassic.yaml
--- a/fixture/RestoreAddressToClassic.yaml
+++ b/fixture/RestoreAddressToClassic.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreImageFromRecycleBin.yaml b/fixture/RestoreImageFromRecycleBin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreImageFromRecycleBin.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreImageFromRecycleBinResponse.proto b/fixture/RestoreImageFromRecycleBinResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreImageFromRecycleBinResponse.proto
diff --git a/fixture/RestoreManagedPrefixListVersion.yaml b/fixture/RestoreManagedPrefixListVersion.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreManagedPrefixListVersion.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreManagedPrefixListVersionResponse.proto b/fixture/RestoreManagedPrefixListVersionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreManagedPrefixListVersionResponse.proto
diff --git a/fixture/RestoreSnapshotFromRecycleBin.yaml b/fixture/RestoreSnapshotFromRecycleBin.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreSnapshotFromRecycleBin.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreSnapshotFromRecycleBinResponse.proto b/fixture/RestoreSnapshotFromRecycleBinResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreSnapshotFromRecycleBinResponse.proto
diff --git a/fixture/RestoreSnapshotTier.yaml b/fixture/RestoreSnapshotTier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreSnapshotTier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RestoreSnapshotTierResponse.proto b/fixture/RestoreSnapshotTierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RestoreSnapshotTierResponse.proto
diff --git a/fixture/RevokeClientVpnIngress.yaml b/fixture/RevokeClientVpnIngress.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeClientVpnIngress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RevokeClientVpnIngressResponse.proto b/fixture/RevokeClientVpnIngressResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RevokeClientVpnIngressResponse.proto
diff --git a/fixture/RevokeSecurityGroupEgress.yaml b/fixture/RevokeSecurityGroupEgress.yaml
--- a/fixture/RevokeSecurityGroupEgress.yaml
+++ b/fixture/RevokeSecurityGroupEgress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RevokeSecurityGroupIngress.yaml b/fixture/RevokeSecurityGroupIngress.yaml
--- a/fixture/RevokeSecurityGroupIngress.yaml
+++ b/fixture/RevokeSecurityGroupIngress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RunInstances.yaml b/fixture/RunInstances.yaml
--- a/fixture/RunInstances.yaml
+++ b/fixture/RunInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RunScheduledInstances.yaml b/fixture/RunScheduledInstances.yaml
--- a/fixture/RunScheduledInstances.yaml
+++ b/fixture/RunScheduledInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SearchLocalGatewayRoutes.yaml b/fixture/SearchLocalGatewayRoutes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchLocalGatewayRoutes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SearchLocalGatewayRoutesResponse.proto b/fixture/SearchLocalGatewayRoutesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchLocalGatewayRoutesResponse.proto
diff --git a/fixture/SearchTransitGatewayMulticastGroups.yaml b/fixture/SearchTransitGatewayMulticastGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchTransitGatewayMulticastGroups.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SearchTransitGatewayMulticastGroupsResponse.proto b/fixture/SearchTransitGatewayMulticastGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchTransitGatewayMulticastGroupsResponse.proto
diff --git a/fixture/SearchTransitGatewayRoutes.yaml b/fixture/SearchTransitGatewayRoutes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SearchTransitGatewayRoutes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SearchTransitGatewayRoutesResponse.proto b/fixture/SearchTransitGatewayRoutesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SearchTransitGatewayRoutesResponse.proto
diff --git a/fixture/SendDiagnosticInterrupt.yaml b/fixture/SendDiagnosticInterrupt.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/SendDiagnosticInterrupt.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/SendDiagnosticInterruptResponse.proto b/fixture/SendDiagnosticInterruptResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/SendDiagnosticInterruptResponse.proto
diff --git a/fixture/StartInstances.yaml b/fixture/StartInstances.yaml
--- a/fixture/StartInstances.yaml
+++ b/fixture/StartInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartNetworkInsightsAccessScopeAnalysis.yaml b/fixture/StartNetworkInsightsAccessScopeAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartNetworkInsightsAccessScopeAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartNetworkInsightsAccessScopeAnalysisResponse.proto b/fixture/StartNetworkInsightsAccessScopeAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartNetworkInsightsAccessScopeAnalysisResponse.proto
diff --git a/fixture/StartNetworkInsightsAnalysis.yaml b/fixture/StartNetworkInsightsAnalysis.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartNetworkInsightsAnalysis.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartNetworkInsightsAnalysisResponse.proto b/fixture/StartNetworkInsightsAnalysisResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartNetworkInsightsAnalysisResponse.proto
diff --git a/fixture/StartVpcEndpointServicePrivateDnsVerification.yaml b/fixture/StartVpcEndpointServicePrivateDnsVerification.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartVpcEndpointServicePrivateDnsVerification.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartVpcEndpointServicePrivateDnsVerificationResponse.proto b/fixture/StartVpcEndpointServicePrivateDnsVerificationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartVpcEndpointServicePrivateDnsVerificationResponse.proto
diff --git a/fixture/StopInstances.yaml b/fixture/StopInstances.yaml
--- a/fixture/StopInstances.yaml
+++ b/fixture/StopInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TerminateClientVpnConnections.yaml b/fixture/TerminateClientVpnConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateClientVpnConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TerminateClientVpnConnectionsResponse.proto b/fixture/TerminateClientVpnConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateClientVpnConnectionsResponse.proto
diff --git a/fixture/TerminateInstances.yaml b/fixture/TerminateInstances.yaml
--- a/fixture/TerminateInstances.yaml
+++ b/fixture/TerminateInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UnassignIPv6Addresses.yaml b/fixture/UnassignIPv6Addresses.yaml
deleted file mode 100644
--- a/fixture/UnassignIPv6Addresses.yaml
+++ /dev/null
diff --git a/fixture/UnassignIPv6AddressesResponse.proto b/fixture/UnassignIPv6AddressesResponse.proto
deleted file mode 100644
--- a/fixture/UnassignIPv6AddressesResponse.proto
+++ /dev/null
diff --git a/fixture/UnassignIpv6Addresses.yaml b/fixture/UnassignIpv6Addresses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UnassignIpv6Addresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UnassignIpv6AddressesResponse.proto b/fixture/UnassignIpv6AddressesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UnassignIpv6AddressesResponse.proto
diff --git a/fixture/UnassignPrivateIPAddresses.yaml b/fixture/UnassignPrivateIPAddresses.yaml
deleted file mode 100644
--- a/fixture/UnassignPrivateIPAddresses.yaml
+++ /dev/null
diff --git a/fixture/UnassignPrivateIPAddressesResponse.proto b/fixture/UnassignPrivateIPAddressesResponse.proto
deleted file mode 100644
--- a/fixture/UnassignPrivateIPAddressesResponse.proto
+++ /dev/null
diff --git a/fixture/UnassignPrivateIpAddresses.yaml b/fixture/UnassignPrivateIpAddresses.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UnassignPrivateIpAddresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UnassignPrivateIpAddressesResponse.proto b/fixture/UnassignPrivateIpAddressesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UnassignPrivateIpAddressesResponse.proto
diff --git a/fixture/UnmonitorInstances.yaml b/fixture/UnmonitorInstances.yaml
--- a/fixture/UnmonitorInstances.yaml
+++ b/fixture/UnmonitorInstances.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateSecurityGroupRuleDescriptionsEgress.yaml b/fixture/UpdateSecurityGroupRuleDescriptionsEgress.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityGroupRuleDescriptionsEgress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateSecurityGroupRuleDescriptionsEgressResponse.proto b/fixture/UpdateSecurityGroupRuleDescriptionsEgressResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityGroupRuleDescriptionsEgressResponse.proto
diff --git a/fixture/UpdateSecurityGroupRuleDescriptionsIngress.yaml b/fixture/UpdateSecurityGroupRuleDescriptionsIngress.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityGroupRuleDescriptionsIngress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateSecurityGroupRuleDescriptionsIngressResponse.proto b/fixture/UpdateSecurityGroupRuleDescriptionsIngressResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateSecurityGroupRuleDescriptionsIngressResponse.proto
diff --git a/fixture/WithdrawByoipCidr.yaml b/fixture/WithdrawByoipCidr.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/WithdrawByoipCidr.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/ec2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  ec2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/WithdrawByoipCidrResponse.proto b/fixture/WithdrawByoipCidrResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/WithdrawByoipCidrResponse.proto
diff --git a/gen/Amazonka/EC2.hs b/gen/Amazonka/EC2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2.hs
@@ -0,0 +1,7868 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.EC2
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2016-11-15@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon Elastic Compute Cloud
+--
+-- Amazon Elastic Compute Cloud (Amazon EC2) provides secure and resizable
+-- computing capacity in the Amazon Web Services Cloud. Using Amazon EC2
+-- eliminates the need to invest in hardware up front, so you can develop
+-- and deploy applications faster. Amazon Virtual Private Cloud (Amazon
+-- VPC) enables you to provision a logically isolated section of the Amazon
+-- Web Services Cloud where you can launch Amazon Web Services resources in
+-- a virtual network that you\'ve defined. Amazon Elastic Block Store
+-- (Amazon EBS) provides block level storage volumes for use with EC2
+-- instances. EBS volumes are highly available and reliable storage volumes
+-- that can be attached to any running instance and used like a hard drive.
+--
+-- To learn more, see the following resources:
+--
+-- -   Amazon EC2: <http://aws.amazon.com/ec2 AmazonEC2 product page>,
+--     <http://aws.amazon.com/documentation/ec2 Amazon EC2 documentation>
+--
+-- -   Amazon EBS: <http://aws.amazon.com/ebs Amazon EBS product page>,
+--     <http://aws.amazon.com/documentation/ebs Amazon EBS documentation>
+--
+-- -   Amazon VPC: <http://aws.amazon.com/vpc Amazon VPC product page>,
+--     <http://aws.amazon.com/documentation/vpc Amazon VPC documentation>
+--
+-- -   Amazon Web Services VPN:
+--     <http://aws.amazon.com/vpn Amazon Web Services VPN product page>,
+--     <http://aws.amazon.com/documentation/vpn Amazon Web Services VPN documentation>
+module Amazonka.EC2
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** BundleTaskComplete
+    newBundleTaskComplete,
+
+    -- ** ConversionTaskCancelled
+    newConversionTaskCancelled,
+
+    -- ** ConversionTaskCompleted
+    newConversionTaskCompleted,
+
+    -- ** ConversionTaskDeleted
+    newConversionTaskDeleted,
+
+    -- ** CustomerGatewayAvailable
+    newCustomerGatewayAvailable,
+
+    -- ** ExportTaskCancelled
+    newExportTaskCancelled,
+
+    -- ** ExportTaskCompleted
+    newExportTaskCompleted,
+
+    -- ** ImageAvailable
+    newImageAvailable,
+
+    -- ** ImageExists
+    newImageExists,
+
+    -- ** InstanceExists
+    newInstanceExists,
+
+    -- ** InstanceRunning
+    newInstanceRunning,
+
+    -- ** InstanceStatusOk
+    newInstanceStatusOk,
+
+    -- ** InstanceStopped
+    newInstanceStopped,
+
+    -- ** InstanceTerminated
+    newInstanceTerminated,
+
+    -- ** InternetGatewayExists
+    newInternetGatewayExists,
+
+    -- ** KeyPairExists
+    newKeyPairExists,
+
+    -- ** NatGatewayAvailable
+    newNatGatewayAvailable,
+
+    -- ** NatGatewayDeleted
+    newNatGatewayDeleted,
+
+    -- ** NetworkInterfaceAvailable
+    newNetworkInterfaceAvailable,
+
+    -- ** PasswordDataAvailable
+    newPasswordDataAvailable,
+
+    -- ** SecurityGroupExists
+    newSecurityGroupExists,
+
+    -- ** SnapshotCompleted
+    newSnapshotCompleted,
+
+    -- ** SpotInstanceRequestFulfilled
+    newSpotInstanceRequestFulfilled,
+
+    -- ** SubnetAvailable
+    newSubnetAvailable,
+
+    -- ** SystemStatusOk
+    newSystemStatusOk,
+
+    -- ** VolumeAvailable
+    newVolumeAvailable,
+
+    -- ** VolumeDeleted
+    newVolumeDeleted,
+
+    -- ** VolumeInUse
+    newVolumeInUse,
+
+    -- ** VpcAvailable
+    newVpcAvailable,
+
+    -- ** VpcExists
+    newVpcExists,
+
+    -- ** VpcPeeringConnectionDeleted
+    newVpcPeeringConnectionDeleted,
+
+    -- ** VpcPeeringConnectionExists
+    newVpcPeeringConnectionExists,
+
+    -- ** VpnConnectionAvailable
+    newVpnConnectionAvailable,
+
+    -- ** VpnConnectionDeleted
+    newVpnConnectionDeleted,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AcceptAddressTransfer
+    AcceptAddressTransfer (AcceptAddressTransfer'),
+    newAcceptAddressTransfer,
+    AcceptAddressTransferResponse (AcceptAddressTransferResponse'),
+    newAcceptAddressTransferResponse,
+
+    -- ** AcceptReservedInstancesExchangeQuote
+    AcceptReservedInstancesExchangeQuote (AcceptReservedInstancesExchangeQuote'),
+    newAcceptReservedInstancesExchangeQuote,
+    AcceptReservedInstancesExchangeQuoteResponse (AcceptReservedInstancesExchangeQuoteResponse'),
+    newAcceptReservedInstancesExchangeQuoteResponse,
+
+    -- ** AcceptTransitGatewayMulticastDomainAssociations
+    AcceptTransitGatewayMulticastDomainAssociations (AcceptTransitGatewayMulticastDomainAssociations'),
+    newAcceptTransitGatewayMulticastDomainAssociations,
+    AcceptTransitGatewayMulticastDomainAssociationsResponse (AcceptTransitGatewayMulticastDomainAssociationsResponse'),
+    newAcceptTransitGatewayMulticastDomainAssociationsResponse,
+
+    -- ** AcceptTransitGatewayPeeringAttachment
+    AcceptTransitGatewayPeeringAttachment (AcceptTransitGatewayPeeringAttachment'),
+    newAcceptTransitGatewayPeeringAttachment,
+    AcceptTransitGatewayPeeringAttachmentResponse (AcceptTransitGatewayPeeringAttachmentResponse'),
+    newAcceptTransitGatewayPeeringAttachmentResponse,
+
+    -- ** AcceptTransitGatewayVpcAttachment
+    AcceptTransitGatewayVpcAttachment (AcceptTransitGatewayVpcAttachment'),
+    newAcceptTransitGatewayVpcAttachment,
+    AcceptTransitGatewayVpcAttachmentResponse (AcceptTransitGatewayVpcAttachmentResponse'),
+    newAcceptTransitGatewayVpcAttachmentResponse,
+
+    -- ** AcceptVpcEndpointConnections
+    AcceptVpcEndpointConnections (AcceptVpcEndpointConnections'),
+    newAcceptVpcEndpointConnections,
+    AcceptVpcEndpointConnectionsResponse (AcceptVpcEndpointConnectionsResponse'),
+    newAcceptVpcEndpointConnectionsResponse,
+
+    -- ** AcceptVpcPeeringConnection
+    AcceptVpcPeeringConnection (AcceptVpcPeeringConnection'),
+    newAcceptVpcPeeringConnection,
+    AcceptVpcPeeringConnectionResponse (AcceptVpcPeeringConnectionResponse'),
+    newAcceptVpcPeeringConnectionResponse,
+
+    -- ** AdvertiseByoipCidr
+    AdvertiseByoipCidr (AdvertiseByoipCidr'),
+    newAdvertiseByoipCidr,
+    AdvertiseByoipCidrResponse (AdvertiseByoipCidrResponse'),
+    newAdvertiseByoipCidrResponse,
+
+    -- ** AllocateAddress
+    AllocateAddress (AllocateAddress'),
+    newAllocateAddress,
+    AllocateAddressResponse (AllocateAddressResponse'),
+    newAllocateAddressResponse,
+
+    -- ** AllocateHosts
+    AllocateHosts (AllocateHosts'),
+    newAllocateHosts,
+    AllocateHostsResponse (AllocateHostsResponse'),
+    newAllocateHostsResponse,
+
+    -- ** AllocateIpamPoolCidr
+    AllocateIpamPoolCidr (AllocateIpamPoolCidr'),
+    newAllocateIpamPoolCidr,
+    AllocateIpamPoolCidrResponse (AllocateIpamPoolCidrResponse'),
+    newAllocateIpamPoolCidrResponse,
+
+    -- ** ApplySecurityGroupsToClientVpnTargetNetwork
+    ApplySecurityGroupsToClientVpnTargetNetwork (ApplySecurityGroupsToClientVpnTargetNetwork'),
+    newApplySecurityGroupsToClientVpnTargetNetwork,
+    ApplySecurityGroupsToClientVpnTargetNetworkResponse (ApplySecurityGroupsToClientVpnTargetNetworkResponse'),
+    newApplySecurityGroupsToClientVpnTargetNetworkResponse,
+
+    -- ** AssignIpv6Addresses
+    AssignIpv6Addresses (AssignIpv6Addresses'),
+    newAssignIpv6Addresses,
+    AssignIpv6AddressesResponse (AssignIpv6AddressesResponse'),
+    newAssignIpv6AddressesResponse,
+
+    -- ** AssignPrivateIpAddresses
+    AssignPrivateIpAddresses (AssignPrivateIpAddresses'),
+    newAssignPrivateIpAddresses,
+    AssignPrivateIpAddressesResponse (AssignPrivateIpAddressesResponse'),
+    newAssignPrivateIpAddressesResponse,
+
+    -- ** AssociateAddress
+    AssociateAddress (AssociateAddress'),
+    newAssociateAddress,
+    AssociateAddressResponse (AssociateAddressResponse'),
+    newAssociateAddressResponse,
+
+    -- ** AssociateClientVpnTargetNetwork
+    AssociateClientVpnTargetNetwork (AssociateClientVpnTargetNetwork'),
+    newAssociateClientVpnTargetNetwork,
+    AssociateClientVpnTargetNetworkResponse (AssociateClientVpnTargetNetworkResponse'),
+    newAssociateClientVpnTargetNetworkResponse,
+
+    -- ** AssociateDhcpOptions
+    AssociateDhcpOptions (AssociateDhcpOptions'),
+    newAssociateDhcpOptions,
+    AssociateDhcpOptionsResponse (AssociateDhcpOptionsResponse'),
+    newAssociateDhcpOptionsResponse,
+
+    -- ** AssociateEnclaveCertificateIamRole
+    AssociateEnclaveCertificateIamRole (AssociateEnclaveCertificateIamRole'),
+    newAssociateEnclaveCertificateIamRole,
+    AssociateEnclaveCertificateIamRoleResponse (AssociateEnclaveCertificateIamRoleResponse'),
+    newAssociateEnclaveCertificateIamRoleResponse,
+
+    -- ** AssociateIamInstanceProfile
+    AssociateIamInstanceProfile (AssociateIamInstanceProfile'),
+    newAssociateIamInstanceProfile,
+    AssociateIamInstanceProfileResponse (AssociateIamInstanceProfileResponse'),
+    newAssociateIamInstanceProfileResponse,
+
+    -- ** AssociateInstanceEventWindow
+    AssociateInstanceEventWindow (AssociateInstanceEventWindow'),
+    newAssociateInstanceEventWindow,
+    AssociateInstanceEventWindowResponse (AssociateInstanceEventWindowResponse'),
+    newAssociateInstanceEventWindowResponse,
+
+    -- ** AssociateRouteTable
+    AssociateRouteTable (AssociateRouteTable'),
+    newAssociateRouteTable,
+    AssociateRouteTableResponse (AssociateRouteTableResponse'),
+    newAssociateRouteTableResponse,
+
+    -- ** AssociateSubnetCidrBlock
+    AssociateSubnetCidrBlock (AssociateSubnetCidrBlock'),
+    newAssociateSubnetCidrBlock,
+    AssociateSubnetCidrBlockResponse (AssociateSubnetCidrBlockResponse'),
+    newAssociateSubnetCidrBlockResponse,
+
+    -- ** AssociateTransitGatewayMulticastDomain
+    AssociateTransitGatewayMulticastDomain (AssociateTransitGatewayMulticastDomain'),
+    newAssociateTransitGatewayMulticastDomain,
+    AssociateTransitGatewayMulticastDomainResponse (AssociateTransitGatewayMulticastDomainResponse'),
+    newAssociateTransitGatewayMulticastDomainResponse,
+
+    -- ** AssociateTransitGatewayPolicyTable
+    AssociateTransitGatewayPolicyTable (AssociateTransitGatewayPolicyTable'),
+    newAssociateTransitGatewayPolicyTable,
+    AssociateTransitGatewayPolicyTableResponse (AssociateTransitGatewayPolicyTableResponse'),
+    newAssociateTransitGatewayPolicyTableResponse,
+
+    -- ** AssociateTransitGatewayRouteTable
+    AssociateTransitGatewayRouteTable (AssociateTransitGatewayRouteTable'),
+    newAssociateTransitGatewayRouteTable,
+    AssociateTransitGatewayRouteTableResponse (AssociateTransitGatewayRouteTableResponse'),
+    newAssociateTransitGatewayRouteTableResponse,
+
+    -- ** AssociateTrunkInterface
+    AssociateTrunkInterface (AssociateTrunkInterface'),
+    newAssociateTrunkInterface,
+    AssociateTrunkInterfaceResponse (AssociateTrunkInterfaceResponse'),
+    newAssociateTrunkInterfaceResponse,
+
+    -- ** AssociateVpcCidrBlock
+    AssociateVpcCidrBlock (AssociateVpcCidrBlock'),
+    newAssociateVpcCidrBlock,
+    AssociateVpcCidrBlockResponse (AssociateVpcCidrBlockResponse'),
+    newAssociateVpcCidrBlockResponse,
+
+    -- ** AttachClassicLinkVpc
+    AttachClassicLinkVpc (AttachClassicLinkVpc'),
+    newAttachClassicLinkVpc,
+    AttachClassicLinkVpcResponse (AttachClassicLinkVpcResponse'),
+    newAttachClassicLinkVpcResponse,
+
+    -- ** AttachInternetGateway
+    AttachInternetGateway (AttachInternetGateway'),
+    newAttachInternetGateway,
+    AttachInternetGatewayResponse (AttachInternetGatewayResponse'),
+    newAttachInternetGatewayResponse,
+
+    -- ** AttachNetworkInterface
+    AttachNetworkInterface (AttachNetworkInterface'),
+    newAttachNetworkInterface,
+    AttachNetworkInterfaceResponse (AttachNetworkInterfaceResponse'),
+    newAttachNetworkInterfaceResponse,
+
+    -- ** AttachVerifiedAccessTrustProvider
+    AttachVerifiedAccessTrustProvider (AttachVerifiedAccessTrustProvider'),
+    newAttachVerifiedAccessTrustProvider,
+    AttachVerifiedAccessTrustProviderResponse (AttachVerifiedAccessTrustProviderResponse'),
+    newAttachVerifiedAccessTrustProviderResponse,
+
+    -- ** AttachVolume
+    AttachVolume (AttachVolume'),
+    newAttachVolume,
+    VolumeAttachment (VolumeAttachment'),
+    newVolumeAttachment,
+
+    -- ** AttachVpnGateway
+    AttachVpnGateway (AttachVpnGateway'),
+    newAttachVpnGateway,
+    AttachVpnGatewayResponse (AttachVpnGatewayResponse'),
+    newAttachVpnGatewayResponse,
+
+    -- ** AuthorizeClientVpnIngress
+    AuthorizeClientVpnIngress (AuthorizeClientVpnIngress'),
+    newAuthorizeClientVpnIngress,
+    AuthorizeClientVpnIngressResponse (AuthorizeClientVpnIngressResponse'),
+    newAuthorizeClientVpnIngressResponse,
+
+    -- ** AuthorizeSecurityGroupEgress
+    AuthorizeSecurityGroupEgress (AuthorizeSecurityGroupEgress'),
+    newAuthorizeSecurityGroupEgress,
+    AuthorizeSecurityGroupEgressResponse (AuthorizeSecurityGroupEgressResponse'),
+    newAuthorizeSecurityGroupEgressResponse,
+
+    -- ** AuthorizeSecurityGroupIngress
+    AuthorizeSecurityGroupIngress (AuthorizeSecurityGroupIngress'),
+    newAuthorizeSecurityGroupIngress,
+    AuthorizeSecurityGroupIngressResponse (AuthorizeSecurityGroupIngressResponse'),
+    newAuthorizeSecurityGroupIngressResponse,
+
+    -- ** BundleInstance
+    BundleInstance (BundleInstance'),
+    newBundleInstance,
+    BundleInstanceResponse (BundleInstanceResponse'),
+    newBundleInstanceResponse,
+
+    -- ** CancelBundleTask
+    CancelBundleTask (CancelBundleTask'),
+    newCancelBundleTask,
+    CancelBundleTaskResponse (CancelBundleTaskResponse'),
+    newCancelBundleTaskResponse,
+
+    -- ** CancelCapacityReservation
+    CancelCapacityReservation (CancelCapacityReservation'),
+    newCancelCapacityReservation,
+    CancelCapacityReservationResponse (CancelCapacityReservationResponse'),
+    newCancelCapacityReservationResponse,
+
+    -- ** CancelCapacityReservationFleets
+    CancelCapacityReservationFleets (CancelCapacityReservationFleets'),
+    newCancelCapacityReservationFleets,
+    CancelCapacityReservationFleetsResponse (CancelCapacityReservationFleetsResponse'),
+    newCancelCapacityReservationFleetsResponse,
+
+    -- ** CancelConversionTask
+    CancelConversionTask (CancelConversionTask'),
+    newCancelConversionTask,
+    CancelConversionTaskResponse (CancelConversionTaskResponse'),
+    newCancelConversionTaskResponse,
+
+    -- ** CancelExportTask
+    CancelExportTask (CancelExportTask'),
+    newCancelExportTask,
+    CancelExportTaskResponse (CancelExportTaskResponse'),
+    newCancelExportTaskResponse,
+
+    -- ** CancelImageLaunchPermission
+    CancelImageLaunchPermission (CancelImageLaunchPermission'),
+    newCancelImageLaunchPermission,
+    CancelImageLaunchPermissionResponse (CancelImageLaunchPermissionResponse'),
+    newCancelImageLaunchPermissionResponse,
+
+    -- ** CancelImportTask
+    CancelImportTask (CancelImportTask'),
+    newCancelImportTask,
+    CancelImportTaskResponse (CancelImportTaskResponse'),
+    newCancelImportTaskResponse,
+
+    -- ** CancelReservedInstancesListing
+    CancelReservedInstancesListing (CancelReservedInstancesListing'),
+    newCancelReservedInstancesListing,
+    CancelReservedInstancesListingResponse (CancelReservedInstancesListingResponse'),
+    newCancelReservedInstancesListingResponse,
+
+    -- ** CancelSpotFleetRequests
+    CancelSpotFleetRequests (CancelSpotFleetRequests'),
+    newCancelSpotFleetRequests,
+    CancelSpotFleetRequestsResponse (CancelSpotFleetRequestsResponse'),
+    newCancelSpotFleetRequestsResponse,
+
+    -- ** CancelSpotInstanceRequests
+    CancelSpotInstanceRequests (CancelSpotInstanceRequests'),
+    newCancelSpotInstanceRequests,
+    CancelSpotInstanceRequestsResponse (CancelSpotInstanceRequestsResponse'),
+    newCancelSpotInstanceRequestsResponse,
+
+    -- ** ConfirmProductInstance
+    ConfirmProductInstance (ConfirmProductInstance'),
+    newConfirmProductInstance,
+    ConfirmProductInstanceResponse (ConfirmProductInstanceResponse'),
+    newConfirmProductInstanceResponse,
+
+    -- ** CopyFpgaImage
+    CopyFpgaImage (CopyFpgaImage'),
+    newCopyFpgaImage,
+    CopyFpgaImageResponse (CopyFpgaImageResponse'),
+    newCopyFpgaImageResponse,
+
+    -- ** CopyImage
+    CopyImage (CopyImage'),
+    newCopyImage,
+    CopyImageResponse (CopyImageResponse'),
+    newCopyImageResponse,
+
+    -- ** CopySnapshot
+    CopySnapshot (CopySnapshot'),
+    newCopySnapshot,
+    CopySnapshotResponse (CopySnapshotResponse'),
+    newCopySnapshotResponse,
+
+    -- ** CreateCapacityReservation
+    CreateCapacityReservation (CreateCapacityReservation'),
+    newCreateCapacityReservation,
+    CreateCapacityReservationResponse (CreateCapacityReservationResponse'),
+    newCreateCapacityReservationResponse,
+
+    -- ** CreateCapacityReservationFleet
+    CreateCapacityReservationFleet (CreateCapacityReservationFleet'),
+    newCreateCapacityReservationFleet,
+    CreateCapacityReservationFleetResponse (CreateCapacityReservationFleetResponse'),
+    newCreateCapacityReservationFleetResponse,
+
+    -- ** CreateCarrierGateway
+    CreateCarrierGateway (CreateCarrierGateway'),
+    newCreateCarrierGateway,
+    CreateCarrierGatewayResponse (CreateCarrierGatewayResponse'),
+    newCreateCarrierGatewayResponse,
+
+    -- ** CreateClientVpnEndpoint
+    CreateClientVpnEndpoint (CreateClientVpnEndpoint'),
+    newCreateClientVpnEndpoint,
+    CreateClientVpnEndpointResponse (CreateClientVpnEndpointResponse'),
+    newCreateClientVpnEndpointResponse,
+
+    -- ** CreateClientVpnRoute
+    CreateClientVpnRoute (CreateClientVpnRoute'),
+    newCreateClientVpnRoute,
+    CreateClientVpnRouteResponse (CreateClientVpnRouteResponse'),
+    newCreateClientVpnRouteResponse,
+
+    -- ** CreateCoipCidr
+    CreateCoipCidr (CreateCoipCidr'),
+    newCreateCoipCidr,
+    CreateCoipCidrResponse (CreateCoipCidrResponse'),
+    newCreateCoipCidrResponse,
+
+    -- ** CreateCoipPool
+    CreateCoipPool (CreateCoipPool'),
+    newCreateCoipPool,
+    CreateCoipPoolResponse (CreateCoipPoolResponse'),
+    newCreateCoipPoolResponse,
+
+    -- ** CreateCustomerGateway
+    CreateCustomerGateway (CreateCustomerGateway'),
+    newCreateCustomerGateway,
+    CreateCustomerGatewayResponse (CreateCustomerGatewayResponse'),
+    newCreateCustomerGatewayResponse,
+
+    -- ** CreateDefaultSubnet
+    CreateDefaultSubnet (CreateDefaultSubnet'),
+    newCreateDefaultSubnet,
+    CreateDefaultSubnetResponse (CreateDefaultSubnetResponse'),
+    newCreateDefaultSubnetResponse,
+
+    -- ** CreateDefaultVpc
+    CreateDefaultVpc (CreateDefaultVpc'),
+    newCreateDefaultVpc,
+    CreateDefaultVpcResponse (CreateDefaultVpcResponse'),
+    newCreateDefaultVpcResponse,
+
+    -- ** CreateDhcpOptions
+    CreateDhcpOptions (CreateDhcpOptions'),
+    newCreateDhcpOptions,
+    CreateDhcpOptionsResponse (CreateDhcpOptionsResponse'),
+    newCreateDhcpOptionsResponse,
+
+    -- ** CreateEgressOnlyInternetGateway
+    CreateEgressOnlyInternetGateway (CreateEgressOnlyInternetGateway'),
+    newCreateEgressOnlyInternetGateway,
+    CreateEgressOnlyInternetGatewayResponse (CreateEgressOnlyInternetGatewayResponse'),
+    newCreateEgressOnlyInternetGatewayResponse,
+
+    -- ** CreateFleet
+    CreateFleet (CreateFleet'),
+    newCreateFleet,
+    CreateFleetResponse (CreateFleetResponse'),
+    newCreateFleetResponse,
+
+    -- ** CreateFlowLogs
+    CreateFlowLogs (CreateFlowLogs'),
+    newCreateFlowLogs,
+    CreateFlowLogsResponse (CreateFlowLogsResponse'),
+    newCreateFlowLogsResponse,
+
+    -- ** CreateFpgaImage
+    CreateFpgaImage (CreateFpgaImage'),
+    newCreateFpgaImage,
+    CreateFpgaImageResponse (CreateFpgaImageResponse'),
+    newCreateFpgaImageResponse,
+
+    -- ** CreateImage
+    CreateImage (CreateImage'),
+    newCreateImage,
+    CreateImageResponse (CreateImageResponse'),
+    newCreateImageResponse,
+
+    -- ** CreateInstanceEventWindow
+    CreateInstanceEventWindow (CreateInstanceEventWindow'),
+    newCreateInstanceEventWindow,
+    CreateInstanceEventWindowResponse (CreateInstanceEventWindowResponse'),
+    newCreateInstanceEventWindowResponse,
+
+    -- ** CreateInstanceExportTask
+    CreateInstanceExportTask (CreateInstanceExportTask'),
+    newCreateInstanceExportTask,
+    CreateInstanceExportTaskResponse (CreateInstanceExportTaskResponse'),
+    newCreateInstanceExportTaskResponse,
+
+    -- ** CreateInternetGateway
+    CreateInternetGateway (CreateInternetGateway'),
+    newCreateInternetGateway,
+    CreateInternetGatewayResponse (CreateInternetGatewayResponse'),
+    newCreateInternetGatewayResponse,
+
+    -- ** CreateIpam
+    CreateIpam (CreateIpam'),
+    newCreateIpam,
+    CreateIpamResponse (CreateIpamResponse'),
+    newCreateIpamResponse,
+
+    -- ** CreateIpamPool
+    CreateIpamPool (CreateIpamPool'),
+    newCreateIpamPool,
+    CreateIpamPoolResponse (CreateIpamPoolResponse'),
+    newCreateIpamPoolResponse,
+
+    -- ** CreateIpamScope
+    CreateIpamScope (CreateIpamScope'),
+    newCreateIpamScope,
+    CreateIpamScopeResponse (CreateIpamScopeResponse'),
+    newCreateIpamScopeResponse,
+
+    -- ** CreateKeyPair
+    CreateKeyPair (CreateKeyPair'),
+    newCreateKeyPair,
+    CreateKeyPairResponse (CreateKeyPairResponse'),
+    newCreateKeyPairResponse,
+
+    -- ** CreateLaunchTemplate
+    CreateLaunchTemplate (CreateLaunchTemplate'),
+    newCreateLaunchTemplate,
+    CreateLaunchTemplateResponse (CreateLaunchTemplateResponse'),
+    newCreateLaunchTemplateResponse,
+
+    -- ** CreateLaunchTemplateVersion
+    CreateLaunchTemplateVersion (CreateLaunchTemplateVersion'),
+    newCreateLaunchTemplateVersion,
+    CreateLaunchTemplateVersionResponse (CreateLaunchTemplateVersionResponse'),
+    newCreateLaunchTemplateVersionResponse,
+
+    -- ** CreateLocalGatewayRoute
+    CreateLocalGatewayRoute (CreateLocalGatewayRoute'),
+    newCreateLocalGatewayRoute,
+    CreateLocalGatewayRouteResponse (CreateLocalGatewayRouteResponse'),
+    newCreateLocalGatewayRouteResponse,
+
+    -- ** CreateLocalGatewayRouteTable
+    CreateLocalGatewayRouteTable (CreateLocalGatewayRouteTable'),
+    newCreateLocalGatewayRouteTable,
+    CreateLocalGatewayRouteTableResponse (CreateLocalGatewayRouteTableResponse'),
+    newCreateLocalGatewayRouteTableResponse,
+
+    -- ** CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation (CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation'),
+    newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse (CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'),
+    newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse,
+
+    -- ** CreateLocalGatewayRouteTableVpcAssociation
+    CreateLocalGatewayRouteTableVpcAssociation (CreateLocalGatewayRouteTableVpcAssociation'),
+    newCreateLocalGatewayRouteTableVpcAssociation,
+    CreateLocalGatewayRouteTableVpcAssociationResponse (CreateLocalGatewayRouteTableVpcAssociationResponse'),
+    newCreateLocalGatewayRouteTableVpcAssociationResponse,
+
+    -- ** CreateManagedPrefixList
+    CreateManagedPrefixList (CreateManagedPrefixList'),
+    newCreateManagedPrefixList,
+    CreateManagedPrefixListResponse (CreateManagedPrefixListResponse'),
+    newCreateManagedPrefixListResponse,
+
+    -- ** CreateNatGateway
+    CreateNatGateway (CreateNatGateway'),
+    newCreateNatGateway,
+    CreateNatGatewayResponse (CreateNatGatewayResponse'),
+    newCreateNatGatewayResponse,
+
+    -- ** CreateNetworkAcl
+    CreateNetworkAcl (CreateNetworkAcl'),
+    newCreateNetworkAcl,
+    CreateNetworkAclResponse (CreateNetworkAclResponse'),
+    newCreateNetworkAclResponse,
+
+    -- ** CreateNetworkAclEntry
+    CreateNetworkAclEntry (CreateNetworkAclEntry'),
+    newCreateNetworkAclEntry,
+    CreateNetworkAclEntryResponse (CreateNetworkAclEntryResponse'),
+    newCreateNetworkAclEntryResponse,
+
+    -- ** CreateNetworkInsightsAccessScope
+    CreateNetworkInsightsAccessScope (CreateNetworkInsightsAccessScope'),
+    newCreateNetworkInsightsAccessScope,
+    CreateNetworkInsightsAccessScopeResponse (CreateNetworkInsightsAccessScopeResponse'),
+    newCreateNetworkInsightsAccessScopeResponse,
+
+    -- ** CreateNetworkInsightsPath
+    CreateNetworkInsightsPath (CreateNetworkInsightsPath'),
+    newCreateNetworkInsightsPath,
+    CreateNetworkInsightsPathResponse (CreateNetworkInsightsPathResponse'),
+    newCreateNetworkInsightsPathResponse,
+
+    -- ** CreateNetworkInterface
+    CreateNetworkInterface (CreateNetworkInterface'),
+    newCreateNetworkInterface,
+    CreateNetworkInterfaceResponse (CreateNetworkInterfaceResponse'),
+    newCreateNetworkInterfaceResponse,
+
+    -- ** CreateNetworkInterfacePermission
+    CreateNetworkInterfacePermission (CreateNetworkInterfacePermission'),
+    newCreateNetworkInterfacePermission,
+    CreateNetworkInterfacePermissionResponse (CreateNetworkInterfacePermissionResponse'),
+    newCreateNetworkInterfacePermissionResponse,
+
+    -- ** CreatePlacementGroup
+    CreatePlacementGroup (CreatePlacementGroup'),
+    newCreatePlacementGroup,
+    CreatePlacementGroupResponse (CreatePlacementGroupResponse'),
+    newCreatePlacementGroupResponse,
+
+    -- ** CreatePublicIpv4Pool
+    CreatePublicIpv4Pool (CreatePublicIpv4Pool'),
+    newCreatePublicIpv4Pool,
+    CreatePublicIpv4PoolResponse (CreatePublicIpv4PoolResponse'),
+    newCreatePublicIpv4PoolResponse,
+
+    -- ** CreateReplaceRootVolumeTask
+    CreateReplaceRootVolumeTask (CreateReplaceRootVolumeTask'),
+    newCreateReplaceRootVolumeTask,
+    CreateReplaceRootVolumeTaskResponse (CreateReplaceRootVolumeTaskResponse'),
+    newCreateReplaceRootVolumeTaskResponse,
+
+    -- ** CreateReservedInstancesListing
+    CreateReservedInstancesListing (CreateReservedInstancesListing'),
+    newCreateReservedInstancesListing,
+    CreateReservedInstancesListingResponse (CreateReservedInstancesListingResponse'),
+    newCreateReservedInstancesListingResponse,
+
+    -- ** CreateRestoreImageTask
+    CreateRestoreImageTask (CreateRestoreImageTask'),
+    newCreateRestoreImageTask,
+    CreateRestoreImageTaskResponse (CreateRestoreImageTaskResponse'),
+    newCreateRestoreImageTaskResponse,
+
+    -- ** CreateRoute
+    CreateRoute (CreateRoute'),
+    newCreateRoute,
+    CreateRouteResponse (CreateRouteResponse'),
+    newCreateRouteResponse,
+
+    -- ** CreateRouteTable
+    CreateRouteTable (CreateRouteTable'),
+    newCreateRouteTable,
+    CreateRouteTableResponse (CreateRouteTableResponse'),
+    newCreateRouteTableResponse,
+
+    -- ** CreateSecurityGroup
+    CreateSecurityGroup (CreateSecurityGroup'),
+    newCreateSecurityGroup,
+    CreateSecurityGroupResponse (CreateSecurityGroupResponse'),
+    newCreateSecurityGroupResponse,
+
+    -- ** CreateSnapshot
+    CreateSnapshot (CreateSnapshot'),
+    newCreateSnapshot,
+    Snapshot (Snapshot'),
+    newSnapshot,
+
+    -- ** CreateSnapshots
+    CreateSnapshots (CreateSnapshots'),
+    newCreateSnapshots,
+    CreateSnapshotsResponse (CreateSnapshotsResponse'),
+    newCreateSnapshotsResponse,
+
+    -- ** CreateSpotDatafeedSubscription
+    CreateSpotDatafeedSubscription (CreateSpotDatafeedSubscription'),
+    newCreateSpotDatafeedSubscription,
+    CreateSpotDatafeedSubscriptionResponse (CreateSpotDatafeedSubscriptionResponse'),
+    newCreateSpotDatafeedSubscriptionResponse,
+
+    -- ** CreateStoreImageTask
+    CreateStoreImageTask (CreateStoreImageTask'),
+    newCreateStoreImageTask,
+    CreateStoreImageTaskResponse (CreateStoreImageTaskResponse'),
+    newCreateStoreImageTaskResponse,
+
+    -- ** CreateSubnet
+    CreateSubnet (CreateSubnet'),
+    newCreateSubnet,
+    CreateSubnetResponse (CreateSubnetResponse'),
+    newCreateSubnetResponse,
+
+    -- ** CreateSubnetCidrReservation
+    CreateSubnetCidrReservation (CreateSubnetCidrReservation'),
+    newCreateSubnetCidrReservation,
+    CreateSubnetCidrReservationResponse (CreateSubnetCidrReservationResponse'),
+    newCreateSubnetCidrReservationResponse,
+
+    -- ** CreateTags
+    CreateTags (CreateTags'),
+    newCreateTags,
+    CreateTagsResponse (CreateTagsResponse'),
+    newCreateTagsResponse,
+
+    -- ** CreateTrafficMirrorFilter
+    CreateTrafficMirrorFilter (CreateTrafficMirrorFilter'),
+    newCreateTrafficMirrorFilter,
+    CreateTrafficMirrorFilterResponse (CreateTrafficMirrorFilterResponse'),
+    newCreateTrafficMirrorFilterResponse,
+
+    -- ** CreateTrafficMirrorFilterRule
+    CreateTrafficMirrorFilterRule (CreateTrafficMirrorFilterRule'),
+    newCreateTrafficMirrorFilterRule,
+    CreateTrafficMirrorFilterRuleResponse (CreateTrafficMirrorFilterRuleResponse'),
+    newCreateTrafficMirrorFilterRuleResponse,
+
+    -- ** CreateTrafficMirrorSession
+    CreateTrafficMirrorSession (CreateTrafficMirrorSession'),
+    newCreateTrafficMirrorSession,
+    CreateTrafficMirrorSessionResponse (CreateTrafficMirrorSessionResponse'),
+    newCreateTrafficMirrorSessionResponse,
+
+    -- ** CreateTrafficMirrorTarget
+    CreateTrafficMirrorTarget (CreateTrafficMirrorTarget'),
+    newCreateTrafficMirrorTarget,
+    CreateTrafficMirrorTargetResponse (CreateTrafficMirrorTargetResponse'),
+    newCreateTrafficMirrorTargetResponse,
+
+    -- ** CreateTransitGateway
+    CreateTransitGateway (CreateTransitGateway'),
+    newCreateTransitGateway,
+    CreateTransitGatewayResponse (CreateTransitGatewayResponse'),
+    newCreateTransitGatewayResponse,
+
+    -- ** CreateTransitGatewayConnect
+    CreateTransitGatewayConnect (CreateTransitGatewayConnect'),
+    newCreateTransitGatewayConnect,
+    CreateTransitGatewayConnectResponse (CreateTransitGatewayConnectResponse'),
+    newCreateTransitGatewayConnectResponse,
+
+    -- ** CreateTransitGatewayConnectPeer
+    CreateTransitGatewayConnectPeer (CreateTransitGatewayConnectPeer'),
+    newCreateTransitGatewayConnectPeer,
+    CreateTransitGatewayConnectPeerResponse (CreateTransitGatewayConnectPeerResponse'),
+    newCreateTransitGatewayConnectPeerResponse,
+
+    -- ** CreateTransitGatewayMulticastDomain
+    CreateTransitGatewayMulticastDomain (CreateTransitGatewayMulticastDomain'),
+    newCreateTransitGatewayMulticastDomain,
+    CreateTransitGatewayMulticastDomainResponse (CreateTransitGatewayMulticastDomainResponse'),
+    newCreateTransitGatewayMulticastDomainResponse,
+
+    -- ** CreateTransitGatewayPeeringAttachment
+    CreateTransitGatewayPeeringAttachment (CreateTransitGatewayPeeringAttachment'),
+    newCreateTransitGatewayPeeringAttachment,
+    CreateTransitGatewayPeeringAttachmentResponse (CreateTransitGatewayPeeringAttachmentResponse'),
+    newCreateTransitGatewayPeeringAttachmentResponse,
+
+    -- ** CreateTransitGatewayPolicyTable
+    CreateTransitGatewayPolicyTable (CreateTransitGatewayPolicyTable'),
+    newCreateTransitGatewayPolicyTable,
+    CreateTransitGatewayPolicyTableResponse (CreateTransitGatewayPolicyTableResponse'),
+    newCreateTransitGatewayPolicyTableResponse,
+
+    -- ** CreateTransitGatewayPrefixListReference
+    CreateTransitGatewayPrefixListReference (CreateTransitGatewayPrefixListReference'),
+    newCreateTransitGatewayPrefixListReference,
+    CreateTransitGatewayPrefixListReferenceResponse (CreateTransitGatewayPrefixListReferenceResponse'),
+    newCreateTransitGatewayPrefixListReferenceResponse,
+
+    -- ** CreateTransitGatewayRoute
+    CreateTransitGatewayRoute (CreateTransitGatewayRoute'),
+    newCreateTransitGatewayRoute,
+    CreateTransitGatewayRouteResponse (CreateTransitGatewayRouteResponse'),
+    newCreateTransitGatewayRouteResponse,
+
+    -- ** CreateTransitGatewayRouteTable
+    CreateTransitGatewayRouteTable (CreateTransitGatewayRouteTable'),
+    newCreateTransitGatewayRouteTable,
+    CreateTransitGatewayRouteTableResponse (CreateTransitGatewayRouteTableResponse'),
+    newCreateTransitGatewayRouteTableResponse,
+
+    -- ** CreateTransitGatewayRouteTableAnnouncement
+    CreateTransitGatewayRouteTableAnnouncement (CreateTransitGatewayRouteTableAnnouncement'),
+    newCreateTransitGatewayRouteTableAnnouncement,
+    CreateTransitGatewayRouteTableAnnouncementResponse (CreateTransitGatewayRouteTableAnnouncementResponse'),
+    newCreateTransitGatewayRouteTableAnnouncementResponse,
+
+    -- ** CreateTransitGatewayVpcAttachment
+    CreateTransitGatewayVpcAttachment (CreateTransitGatewayVpcAttachment'),
+    newCreateTransitGatewayVpcAttachment,
+    CreateTransitGatewayVpcAttachmentResponse (CreateTransitGatewayVpcAttachmentResponse'),
+    newCreateTransitGatewayVpcAttachmentResponse,
+
+    -- ** CreateVerifiedAccessEndpoint
+    CreateVerifiedAccessEndpoint (CreateVerifiedAccessEndpoint'),
+    newCreateVerifiedAccessEndpoint,
+    CreateVerifiedAccessEndpointResponse (CreateVerifiedAccessEndpointResponse'),
+    newCreateVerifiedAccessEndpointResponse,
+
+    -- ** CreateVerifiedAccessGroup
+    CreateVerifiedAccessGroup (CreateVerifiedAccessGroup'),
+    newCreateVerifiedAccessGroup,
+    CreateVerifiedAccessGroupResponse (CreateVerifiedAccessGroupResponse'),
+    newCreateVerifiedAccessGroupResponse,
+
+    -- ** CreateVerifiedAccessInstance
+    CreateVerifiedAccessInstance (CreateVerifiedAccessInstance'),
+    newCreateVerifiedAccessInstance,
+    CreateVerifiedAccessInstanceResponse (CreateVerifiedAccessInstanceResponse'),
+    newCreateVerifiedAccessInstanceResponse,
+
+    -- ** CreateVerifiedAccessTrustProvider
+    CreateVerifiedAccessTrustProvider (CreateVerifiedAccessTrustProvider'),
+    newCreateVerifiedAccessTrustProvider,
+    CreateVerifiedAccessTrustProviderResponse (CreateVerifiedAccessTrustProviderResponse'),
+    newCreateVerifiedAccessTrustProviderResponse,
+
+    -- ** CreateVolume
+    CreateVolume (CreateVolume'),
+    newCreateVolume,
+    Volume (Volume'),
+    newVolume,
+
+    -- ** CreateVpc
+    CreateVpc (CreateVpc'),
+    newCreateVpc,
+    CreateVpcResponse (CreateVpcResponse'),
+    newCreateVpcResponse,
+
+    -- ** CreateVpcEndpoint
+    CreateVpcEndpoint (CreateVpcEndpoint'),
+    newCreateVpcEndpoint,
+    CreateVpcEndpointResponse (CreateVpcEndpointResponse'),
+    newCreateVpcEndpointResponse,
+
+    -- ** CreateVpcEndpointConnectionNotification
+    CreateVpcEndpointConnectionNotification (CreateVpcEndpointConnectionNotification'),
+    newCreateVpcEndpointConnectionNotification,
+    CreateVpcEndpointConnectionNotificationResponse (CreateVpcEndpointConnectionNotificationResponse'),
+    newCreateVpcEndpointConnectionNotificationResponse,
+
+    -- ** CreateVpcEndpointServiceConfiguration
+    CreateVpcEndpointServiceConfiguration (CreateVpcEndpointServiceConfiguration'),
+    newCreateVpcEndpointServiceConfiguration,
+    CreateVpcEndpointServiceConfigurationResponse (CreateVpcEndpointServiceConfigurationResponse'),
+    newCreateVpcEndpointServiceConfigurationResponse,
+
+    -- ** CreateVpcPeeringConnection
+    CreateVpcPeeringConnection (CreateVpcPeeringConnection'),
+    newCreateVpcPeeringConnection,
+    CreateVpcPeeringConnectionResponse (CreateVpcPeeringConnectionResponse'),
+    newCreateVpcPeeringConnectionResponse,
+
+    -- ** CreateVpnConnection
+    CreateVpnConnection (CreateVpnConnection'),
+    newCreateVpnConnection,
+    CreateVpnConnectionResponse (CreateVpnConnectionResponse'),
+    newCreateVpnConnectionResponse,
+
+    -- ** CreateVpnConnectionRoute
+    CreateVpnConnectionRoute (CreateVpnConnectionRoute'),
+    newCreateVpnConnectionRoute,
+    CreateVpnConnectionRouteResponse (CreateVpnConnectionRouteResponse'),
+    newCreateVpnConnectionRouteResponse,
+
+    -- ** CreateVpnGateway
+    CreateVpnGateway (CreateVpnGateway'),
+    newCreateVpnGateway,
+    CreateVpnGatewayResponse (CreateVpnGatewayResponse'),
+    newCreateVpnGatewayResponse,
+
+    -- ** DeleteCarrierGateway
+    DeleteCarrierGateway (DeleteCarrierGateway'),
+    newDeleteCarrierGateway,
+    DeleteCarrierGatewayResponse (DeleteCarrierGatewayResponse'),
+    newDeleteCarrierGatewayResponse,
+
+    -- ** DeleteClientVpnEndpoint
+    DeleteClientVpnEndpoint (DeleteClientVpnEndpoint'),
+    newDeleteClientVpnEndpoint,
+    DeleteClientVpnEndpointResponse (DeleteClientVpnEndpointResponse'),
+    newDeleteClientVpnEndpointResponse,
+
+    -- ** DeleteClientVpnRoute
+    DeleteClientVpnRoute (DeleteClientVpnRoute'),
+    newDeleteClientVpnRoute,
+    DeleteClientVpnRouteResponse (DeleteClientVpnRouteResponse'),
+    newDeleteClientVpnRouteResponse,
+
+    -- ** DeleteCoipCidr
+    DeleteCoipCidr (DeleteCoipCidr'),
+    newDeleteCoipCidr,
+    DeleteCoipCidrResponse (DeleteCoipCidrResponse'),
+    newDeleteCoipCidrResponse,
+
+    -- ** DeleteCoipPool
+    DeleteCoipPool (DeleteCoipPool'),
+    newDeleteCoipPool,
+    DeleteCoipPoolResponse (DeleteCoipPoolResponse'),
+    newDeleteCoipPoolResponse,
+
+    -- ** DeleteCustomerGateway
+    DeleteCustomerGateway (DeleteCustomerGateway'),
+    newDeleteCustomerGateway,
+    DeleteCustomerGatewayResponse (DeleteCustomerGatewayResponse'),
+    newDeleteCustomerGatewayResponse,
+
+    -- ** DeleteDhcpOptions
+    DeleteDhcpOptions (DeleteDhcpOptions'),
+    newDeleteDhcpOptions,
+    DeleteDhcpOptionsResponse (DeleteDhcpOptionsResponse'),
+    newDeleteDhcpOptionsResponse,
+
+    -- ** DeleteEgressOnlyInternetGateway
+    DeleteEgressOnlyInternetGateway (DeleteEgressOnlyInternetGateway'),
+    newDeleteEgressOnlyInternetGateway,
+    DeleteEgressOnlyInternetGatewayResponse (DeleteEgressOnlyInternetGatewayResponse'),
+    newDeleteEgressOnlyInternetGatewayResponse,
+
+    -- ** DeleteFleets
+    DeleteFleets (DeleteFleets'),
+    newDeleteFleets,
+    DeleteFleetsResponse (DeleteFleetsResponse'),
+    newDeleteFleetsResponse,
+
+    -- ** DeleteFlowLogs
+    DeleteFlowLogs (DeleteFlowLogs'),
+    newDeleteFlowLogs,
+    DeleteFlowLogsResponse (DeleteFlowLogsResponse'),
+    newDeleteFlowLogsResponse,
+
+    -- ** DeleteFpgaImage
+    DeleteFpgaImage (DeleteFpgaImage'),
+    newDeleteFpgaImage,
+    DeleteFpgaImageResponse (DeleteFpgaImageResponse'),
+    newDeleteFpgaImageResponse,
+
+    -- ** DeleteInstanceEventWindow
+    DeleteInstanceEventWindow (DeleteInstanceEventWindow'),
+    newDeleteInstanceEventWindow,
+    DeleteInstanceEventWindowResponse (DeleteInstanceEventWindowResponse'),
+    newDeleteInstanceEventWindowResponse,
+
+    -- ** DeleteInternetGateway
+    DeleteInternetGateway (DeleteInternetGateway'),
+    newDeleteInternetGateway,
+    DeleteInternetGatewayResponse (DeleteInternetGatewayResponse'),
+    newDeleteInternetGatewayResponse,
+
+    -- ** DeleteIpam
+    DeleteIpam (DeleteIpam'),
+    newDeleteIpam,
+    DeleteIpamResponse (DeleteIpamResponse'),
+    newDeleteIpamResponse,
+
+    -- ** DeleteIpamPool
+    DeleteIpamPool (DeleteIpamPool'),
+    newDeleteIpamPool,
+    DeleteIpamPoolResponse (DeleteIpamPoolResponse'),
+    newDeleteIpamPoolResponse,
+
+    -- ** DeleteIpamScope
+    DeleteIpamScope (DeleteIpamScope'),
+    newDeleteIpamScope,
+    DeleteIpamScopeResponse (DeleteIpamScopeResponse'),
+    newDeleteIpamScopeResponse,
+
+    -- ** DeleteKeyPair
+    DeleteKeyPair (DeleteKeyPair'),
+    newDeleteKeyPair,
+    DeleteKeyPairResponse (DeleteKeyPairResponse'),
+    newDeleteKeyPairResponse,
+
+    -- ** DeleteLaunchTemplate
+    DeleteLaunchTemplate (DeleteLaunchTemplate'),
+    newDeleteLaunchTemplate,
+    DeleteLaunchTemplateResponse (DeleteLaunchTemplateResponse'),
+    newDeleteLaunchTemplateResponse,
+
+    -- ** DeleteLaunchTemplateVersions
+    DeleteLaunchTemplateVersions (DeleteLaunchTemplateVersions'),
+    newDeleteLaunchTemplateVersions,
+    DeleteLaunchTemplateVersionsResponse (DeleteLaunchTemplateVersionsResponse'),
+    newDeleteLaunchTemplateVersionsResponse,
+
+    -- ** DeleteLocalGatewayRoute
+    DeleteLocalGatewayRoute (DeleteLocalGatewayRoute'),
+    newDeleteLocalGatewayRoute,
+    DeleteLocalGatewayRouteResponse (DeleteLocalGatewayRouteResponse'),
+    newDeleteLocalGatewayRouteResponse,
+
+    -- ** DeleteLocalGatewayRouteTable
+    DeleteLocalGatewayRouteTable (DeleteLocalGatewayRouteTable'),
+    newDeleteLocalGatewayRouteTable,
+    DeleteLocalGatewayRouteTableResponse (DeleteLocalGatewayRouteTableResponse'),
+    newDeleteLocalGatewayRouteTableResponse,
+
+    -- ** DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation (DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation'),
+    newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse (DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'),
+    newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse,
+
+    -- ** DeleteLocalGatewayRouteTableVpcAssociation
+    DeleteLocalGatewayRouteTableVpcAssociation (DeleteLocalGatewayRouteTableVpcAssociation'),
+    newDeleteLocalGatewayRouteTableVpcAssociation,
+    DeleteLocalGatewayRouteTableVpcAssociationResponse (DeleteLocalGatewayRouteTableVpcAssociationResponse'),
+    newDeleteLocalGatewayRouteTableVpcAssociationResponse,
+
+    -- ** DeleteManagedPrefixList
+    DeleteManagedPrefixList (DeleteManagedPrefixList'),
+    newDeleteManagedPrefixList,
+    DeleteManagedPrefixListResponse (DeleteManagedPrefixListResponse'),
+    newDeleteManagedPrefixListResponse,
+
+    -- ** DeleteNatGateway
+    DeleteNatGateway (DeleteNatGateway'),
+    newDeleteNatGateway,
+    DeleteNatGatewayResponse (DeleteNatGatewayResponse'),
+    newDeleteNatGatewayResponse,
+
+    -- ** DeleteNetworkAcl
+    DeleteNetworkAcl (DeleteNetworkAcl'),
+    newDeleteNetworkAcl,
+    DeleteNetworkAclResponse (DeleteNetworkAclResponse'),
+    newDeleteNetworkAclResponse,
+
+    -- ** DeleteNetworkAclEntry
+    DeleteNetworkAclEntry (DeleteNetworkAclEntry'),
+    newDeleteNetworkAclEntry,
+    DeleteNetworkAclEntryResponse (DeleteNetworkAclEntryResponse'),
+    newDeleteNetworkAclEntryResponse,
+
+    -- ** DeleteNetworkInsightsAccessScope
+    DeleteNetworkInsightsAccessScope (DeleteNetworkInsightsAccessScope'),
+    newDeleteNetworkInsightsAccessScope,
+    DeleteNetworkInsightsAccessScopeResponse (DeleteNetworkInsightsAccessScopeResponse'),
+    newDeleteNetworkInsightsAccessScopeResponse,
+
+    -- ** DeleteNetworkInsightsAccessScopeAnalysis
+    DeleteNetworkInsightsAccessScopeAnalysis (DeleteNetworkInsightsAccessScopeAnalysis'),
+    newDeleteNetworkInsightsAccessScopeAnalysis,
+    DeleteNetworkInsightsAccessScopeAnalysisResponse (DeleteNetworkInsightsAccessScopeAnalysisResponse'),
+    newDeleteNetworkInsightsAccessScopeAnalysisResponse,
+
+    -- ** DeleteNetworkInsightsAnalysis
+    DeleteNetworkInsightsAnalysis (DeleteNetworkInsightsAnalysis'),
+    newDeleteNetworkInsightsAnalysis,
+    DeleteNetworkInsightsAnalysisResponse (DeleteNetworkInsightsAnalysisResponse'),
+    newDeleteNetworkInsightsAnalysisResponse,
+
+    -- ** DeleteNetworkInsightsPath
+    DeleteNetworkInsightsPath (DeleteNetworkInsightsPath'),
+    newDeleteNetworkInsightsPath,
+    DeleteNetworkInsightsPathResponse (DeleteNetworkInsightsPathResponse'),
+    newDeleteNetworkInsightsPathResponse,
+
+    -- ** DeleteNetworkInterface
+    DeleteNetworkInterface (DeleteNetworkInterface'),
+    newDeleteNetworkInterface,
+    DeleteNetworkInterfaceResponse (DeleteNetworkInterfaceResponse'),
+    newDeleteNetworkInterfaceResponse,
+
+    -- ** DeleteNetworkInterfacePermission
+    DeleteNetworkInterfacePermission (DeleteNetworkInterfacePermission'),
+    newDeleteNetworkInterfacePermission,
+    DeleteNetworkInterfacePermissionResponse (DeleteNetworkInterfacePermissionResponse'),
+    newDeleteNetworkInterfacePermissionResponse,
+
+    -- ** DeletePlacementGroup
+    DeletePlacementGroup (DeletePlacementGroup'),
+    newDeletePlacementGroup,
+    DeletePlacementGroupResponse (DeletePlacementGroupResponse'),
+    newDeletePlacementGroupResponse,
+
+    -- ** DeletePublicIpv4Pool
+    DeletePublicIpv4Pool (DeletePublicIpv4Pool'),
+    newDeletePublicIpv4Pool,
+    DeletePublicIpv4PoolResponse (DeletePublicIpv4PoolResponse'),
+    newDeletePublicIpv4PoolResponse,
+
+    -- ** DeleteQueuedReservedInstances
+    DeleteQueuedReservedInstances (DeleteQueuedReservedInstances'),
+    newDeleteQueuedReservedInstances,
+    DeleteQueuedReservedInstancesResponse (DeleteQueuedReservedInstancesResponse'),
+    newDeleteQueuedReservedInstancesResponse,
+
+    -- ** DeleteRoute
+    DeleteRoute (DeleteRoute'),
+    newDeleteRoute,
+    DeleteRouteResponse (DeleteRouteResponse'),
+    newDeleteRouteResponse,
+
+    -- ** DeleteRouteTable
+    DeleteRouteTable (DeleteRouteTable'),
+    newDeleteRouteTable,
+    DeleteRouteTableResponse (DeleteRouteTableResponse'),
+    newDeleteRouteTableResponse,
+
+    -- ** DeleteSecurityGroup
+    DeleteSecurityGroup (DeleteSecurityGroup'),
+    newDeleteSecurityGroup,
+    DeleteSecurityGroupResponse (DeleteSecurityGroupResponse'),
+    newDeleteSecurityGroupResponse,
+
+    -- ** DeleteSnapshot
+    DeleteSnapshot (DeleteSnapshot'),
+    newDeleteSnapshot,
+    DeleteSnapshotResponse (DeleteSnapshotResponse'),
+    newDeleteSnapshotResponse,
+
+    -- ** DeleteSpotDatafeedSubscription
+    DeleteSpotDatafeedSubscription (DeleteSpotDatafeedSubscription'),
+    newDeleteSpotDatafeedSubscription,
+    DeleteSpotDatafeedSubscriptionResponse (DeleteSpotDatafeedSubscriptionResponse'),
+    newDeleteSpotDatafeedSubscriptionResponse,
+
+    -- ** DeleteSubnet
+    DeleteSubnet (DeleteSubnet'),
+    newDeleteSubnet,
+    DeleteSubnetResponse (DeleteSubnetResponse'),
+    newDeleteSubnetResponse,
+
+    -- ** DeleteSubnetCidrReservation
+    DeleteSubnetCidrReservation (DeleteSubnetCidrReservation'),
+    newDeleteSubnetCidrReservation,
+    DeleteSubnetCidrReservationResponse (DeleteSubnetCidrReservationResponse'),
+    newDeleteSubnetCidrReservationResponse,
+
+    -- ** DeleteTags
+    DeleteTags (DeleteTags'),
+    newDeleteTags,
+    DeleteTagsResponse (DeleteTagsResponse'),
+    newDeleteTagsResponse,
+
+    -- ** DeleteTrafficMirrorFilter
+    DeleteTrafficMirrorFilter (DeleteTrafficMirrorFilter'),
+    newDeleteTrafficMirrorFilter,
+    DeleteTrafficMirrorFilterResponse (DeleteTrafficMirrorFilterResponse'),
+    newDeleteTrafficMirrorFilterResponse,
+
+    -- ** DeleteTrafficMirrorFilterRule
+    DeleteTrafficMirrorFilterRule (DeleteTrafficMirrorFilterRule'),
+    newDeleteTrafficMirrorFilterRule,
+    DeleteTrafficMirrorFilterRuleResponse (DeleteTrafficMirrorFilterRuleResponse'),
+    newDeleteTrafficMirrorFilterRuleResponse,
+
+    -- ** DeleteTrafficMirrorSession
+    DeleteTrafficMirrorSession (DeleteTrafficMirrorSession'),
+    newDeleteTrafficMirrorSession,
+    DeleteTrafficMirrorSessionResponse (DeleteTrafficMirrorSessionResponse'),
+    newDeleteTrafficMirrorSessionResponse,
+
+    -- ** DeleteTrafficMirrorTarget
+    DeleteTrafficMirrorTarget (DeleteTrafficMirrorTarget'),
+    newDeleteTrafficMirrorTarget,
+    DeleteTrafficMirrorTargetResponse (DeleteTrafficMirrorTargetResponse'),
+    newDeleteTrafficMirrorTargetResponse,
+
+    -- ** DeleteTransitGateway
+    DeleteTransitGateway (DeleteTransitGateway'),
+    newDeleteTransitGateway,
+    DeleteTransitGatewayResponse (DeleteTransitGatewayResponse'),
+    newDeleteTransitGatewayResponse,
+
+    -- ** DeleteTransitGatewayConnect
+    DeleteTransitGatewayConnect (DeleteTransitGatewayConnect'),
+    newDeleteTransitGatewayConnect,
+    DeleteTransitGatewayConnectResponse (DeleteTransitGatewayConnectResponse'),
+    newDeleteTransitGatewayConnectResponse,
+
+    -- ** DeleteTransitGatewayConnectPeer
+    DeleteTransitGatewayConnectPeer (DeleteTransitGatewayConnectPeer'),
+    newDeleteTransitGatewayConnectPeer,
+    DeleteTransitGatewayConnectPeerResponse (DeleteTransitGatewayConnectPeerResponse'),
+    newDeleteTransitGatewayConnectPeerResponse,
+
+    -- ** DeleteTransitGatewayMulticastDomain
+    DeleteTransitGatewayMulticastDomain (DeleteTransitGatewayMulticastDomain'),
+    newDeleteTransitGatewayMulticastDomain,
+    DeleteTransitGatewayMulticastDomainResponse (DeleteTransitGatewayMulticastDomainResponse'),
+    newDeleteTransitGatewayMulticastDomainResponse,
+
+    -- ** DeleteTransitGatewayPeeringAttachment
+    DeleteTransitGatewayPeeringAttachment (DeleteTransitGatewayPeeringAttachment'),
+    newDeleteTransitGatewayPeeringAttachment,
+    DeleteTransitGatewayPeeringAttachmentResponse (DeleteTransitGatewayPeeringAttachmentResponse'),
+    newDeleteTransitGatewayPeeringAttachmentResponse,
+
+    -- ** DeleteTransitGatewayPolicyTable
+    DeleteTransitGatewayPolicyTable (DeleteTransitGatewayPolicyTable'),
+    newDeleteTransitGatewayPolicyTable,
+    DeleteTransitGatewayPolicyTableResponse (DeleteTransitGatewayPolicyTableResponse'),
+    newDeleteTransitGatewayPolicyTableResponse,
+
+    -- ** DeleteTransitGatewayPrefixListReference
+    DeleteTransitGatewayPrefixListReference (DeleteTransitGatewayPrefixListReference'),
+    newDeleteTransitGatewayPrefixListReference,
+    DeleteTransitGatewayPrefixListReferenceResponse (DeleteTransitGatewayPrefixListReferenceResponse'),
+    newDeleteTransitGatewayPrefixListReferenceResponse,
+
+    -- ** DeleteTransitGatewayRoute
+    DeleteTransitGatewayRoute (DeleteTransitGatewayRoute'),
+    newDeleteTransitGatewayRoute,
+    DeleteTransitGatewayRouteResponse (DeleteTransitGatewayRouteResponse'),
+    newDeleteTransitGatewayRouteResponse,
+
+    -- ** DeleteTransitGatewayRouteTable
+    DeleteTransitGatewayRouteTable (DeleteTransitGatewayRouteTable'),
+    newDeleteTransitGatewayRouteTable,
+    DeleteTransitGatewayRouteTableResponse (DeleteTransitGatewayRouteTableResponse'),
+    newDeleteTransitGatewayRouteTableResponse,
+
+    -- ** DeleteTransitGatewayRouteTableAnnouncement
+    DeleteTransitGatewayRouteTableAnnouncement (DeleteTransitGatewayRouteTableAnnouncement'),
+    newDeleteTransitGatewayRouteTableAnnouncement,
+    DeleteTransitGatewayRouteTableAnnouncementResponse (DeleteTransitGatewayRouteTableAnnouncementResponse'),
+    newDeleteTransitGatewayRouteTableAnnouncementResponse,
+
+    -- ** DeleteTransitGatewayVpcAttachment
+    DeleteTransitGatewayVpcAttachment (DeleteTransitGatewayVpcAttachment'),
+    newDeleteTransitGatewayVpcAttachment,
+    DeleteTransitGatewayVpcAttachmentResponse (DeleteTransitGatewayVpcAttachmentResponse'),
+    newDeleteTransitGatewayVpcAttachmentResponse,
+
+    -- ** DeleteVerifiedAccessEndpoint
+    DeleteVerifiedAccessEndpoint (DeleteVerifiedAccessEndpoint'),
+    newDeleteVerifiedAccessEndpoint,
+    DeleteVerifiedAccessEndpointResponse (DeleteVerifiedAccessEndpointResponse'),
+    newDeleteVerifiedAccessEndpointResponse,
+
+    -- ** DeleteVerifiedAccessGroup
+    DeleteVerifiedAccessGroup (DeleteVerifiedAccessGroup'),
+    newDeleteVerifiedAccessGroup,
+    DeleteVerifiedAccessGroupResponse (DeleteVerifiedAccessGroupResponse'),
+    newDeleteVerifiedAccessGroupResponse,
+
+    -- ** DeleteVerifiedAccessInstance
+    DeleteVerifiedAccessInstance (DeleteVerifiedAccessInstance'),
+    newDeleteVerifiedAccessInstance,
+    DeleteVerifiedAccessInstanceResponse (DeleteVerifiedAccessInstanceResponse'),
+    newDeleteVerifiedAccessInstanceResponse,
+
+    -- ** DeleteVerifiedAccessTrustProvider
+    DeleteVerifiedAccessTrustProvider (DeleteVerifiedAccessTrustProvider'),
+    newDeleteVerifiedAccessTrustProvider,
+    DeleteVerifiedAccessTrustProviderResponse (DeleteVerifiedAccessTrustProviderResponse'),
+    newDeleteVerifiedAccessTrustProviderResponse,
+
+    -- ** DeleteVolume
+    DeleteVolume (DeleteVolume'),
+    newDeleteVolume,
+    DeleteVolumeResponse (DeleteVolumeResponse'),
+    newDeleteVolumeResponse,
+
+    -- ** DeleteVpc
+    DeleteVpc (DeleteVpc'),
+    newDeleteVpc,
+    DeleteVpcResponse (DeleteVpcResponse'),
+    newDeleteVpcResponse,
+
+    -- ** DeleteVpcEndpointConnectionNotifications
+    DeleteVpcEndpointConnectionNotifications (DeleteVpcEndpointConnectionNotifications'),
+    newDeleteVpcEndpointConnectionNotifications,
+    DeleteVpcEndpointConnectionNotificationsResponse (DeleteVpcEndpointConnectionNotificationsResponse'),
+    newDeleteVpcEndpointConnectionNotificationsResponse,
+
+    -- ** DeleteVpcEndpointServiceConfigurations
+    DeleteVpcEndpointServiceConfigurations (DeleteVpcEndpointServiceConfigurations'),
+    newDeleteVpcEndpointServiceConfigurations,
+    DeleteVpcEndpointServiceConfigurationsResponse (DeleteVpcEndpointServiceConfigurationsResponse'),
+    newDeleteVpcEndpointServiceConfigurationsResponse,
+
+    -- ** DeleteVpcEndpoints
+    DeleteVpcEndpoints (DeleteVpcEndpoints'),
+    newDeleteVpcEndpoints,
+    DeleteVpcEndpointsResponse (DeleteVpcEndpointsResponse'),
+    newDeleteVpcEndpointsResponse,
+
+    -- ** DeleteVpcPeeringConnection
+    DeleteVpcPeeringConnection (DeleteVpcPeeringConnection'),
+    newDeleteVpcPeeringConnection,
+    DeleteVpcPeeringConnectionResponse (DeleteVpcPeeringConnectionResponse'),
+    newDeleteVpcPeeringConnectionResponse,
+
+    -- ** DeleteVpnConnection
+    DeleteVpnConnection (DeleteVpnConnection'),
+    newDeleteVpnConnection,
+    DeleteVpnConnectionResponse (DeleteVpnConnectionResponse'),
+    newDeleteVpnConnectionResponse,
+
+    -- ** DeleteVpnConnectionRoute
+    DeleteVpnConnectionRoute (DeleteVpnConnectionRoute'),
+    newDeleteVpnConnectionRoute,
+    DeleteVpnConnectionRouteResponse (DeleteVpnConnectionRouteResponse'),
+    newDeleteVpnConnectionRouteResponse,
+
+    -- ** DeleteVpnGateway
+    DeleteVpnGateway (DeleteVpnGateway'),
+    newDeleteVpnGateway,
+    DeleteVpnGatewayResponse (DeleteVpnGatewayResponse'),
+    newDeleteVpnGatewayResponse,
+
+    -- ** DeprovisionByoipCidr
+    DeprovisionByoipCidr (DeprovisionByoipCidr'),
+    newDeprovisionByoipCidr,
+    DeprovisionByoipCidrResponse (DeprovisionByoipCidrResponse'),
+    newDeprovisionByoipCidrResponse,
+
+    -- ** DeprovisionIpamPoolCidr
+    DeprovisionIpamPoolCidr (DeprovisionIpamPoolCidr'),
+    newDeprovisionIpamPoolCidr,
+    DeprovisionIpamPoolCidrResponse (DeprovisionIpamPoolCidrResponse'),
+    newDeprovisionIpamPoolCidrResponse,
+
+    -- ** DeprovisionPublicIpv4PoolCidr
+    DeprovisionPublicIpv4PoolCidr (DeprovisionPublicIpv4PoolCidr'),
+    newDeprovisionPublicIpv4PoolCidr,
+    DeprovisionPublicIpv4PoolCidrResponse (DeprovisionPublicIpv4PoolCidrResponse'),
+    newDeprovisionPublicIpv4PoolCidrResponse,
+
+    -- ** DeregisterImage
+    DeregisterImage (DeregisterImage'),
+    newDeregisterImage,
+    DeregisterImageResponse (DeregisterImageResponse'),
+    newDeregisterImageResponse,
+
+    -- ** DeregisterInstanceEventNotificationAttributes
+    DeregisterInstanceEventNotificationAttributes (DeregisterInstanceEventNotificationAttributes'),
+    newDeregisterInstanceEventNotificationAttributes,
+    DeregisterInstanceEventNotificationAttributesResponse (DeregisterInstanceEventNotificationAttributesResponse'),
+    newDeregisterInstanceEventNotificationAttributesResponse,
+
+    -- ** DeregisterTransitGatewayMulticastGroupMembers
+    DeregisterTransitGatewayMulticastGroupMembers (DeregisterTransitGatewayMulticastGroupMembers'),
+    newDeregisterTransitGatewayMulticastGroupMembers,
+    DeregisterTransitGatewayMulticastGroupMembersResponse (DeregisterTransitGatewayMulticastGroupMembersResponse'),
+    newDeregisterTransitGatewayMulticastGroupMembersResponse,
+
+    -- ** DeregisterTransitGatewayMulticastGroupSources
+    DeregisterTransitGatewayMulticastGroupSources (DeregisterTransitGatewayMulticastGroupSources'),
+    newDeregisterTransitGatewayMulticastGroupSources,
+    DeregisterTransitGatewayMulticastGroupSourcesResponse (DeregisterTransitGatewayMulticastGroupSourcesResponse'),
+    newDeregisterTransitGatewayMulticastGroupSourcesResponse,
+
+    -- ** DescribeAccountAttributes
+    DescribeAccountAttributes (DescribeAccountAttributes'),
+    newDescribeAccountAttributes,
+    DescribeAccountAttributesResponse (DescribeAccountAttributesResponse'),
+    newDescribeAccountAttributesResponse,
+
+    -- ** DescribeAddressTransfers (Paginated)
+    DescribeAddressTransfers (DescribeAddressTransfers'),
+    newDescribeAddressTransfers,
+    DescribeAddressTransfersResponse (DescribeAddressTransfersResponse'),
+    newDescribeAddressTransfersResponse,
+
+    -- ** DescribeAddresses
+    DescribeAddresses (DescribeAddresses'),
+    newDescribeAddresses,
+    DescribeAddressesResponse (DescribeAddressesResponse'),
+    newDescribeAddressesResponse,
+
+    -- ** DescribeAddressesAttribute (Paginated)
+    DescribeAddressesAttribute (DescribeAddressesAttribute'),
+    newDescribeAddressesAttribute,
+    DescribeAddressesAttributeResponse (DescribeAddressesAttributeResponse'),
+    newDescribeAddressesAttributeResponse,
+
+    -- ** DescribeAggregateIdFormat
+    DescribeAggregateIdFormat (DescribeAggregateIdFormat'),
+    newDescribeAggregateIdFormat,
+    DescribeAggregateIdFormatResponse (DescribeAggregateIdFormatResponse'),
+    newDescribeAggregateIdFormatResponse,
+
+    -- ** DescribeAvailabilityZones
+    DescribeAvailabilityZones (DescribeAvailabilityZones'),
+    newDescribeAvailabilityZones,
+    DescribeAvailabilityZonesResponse (DescribeAvailabilityZonesResponse'),
+    newDescribeAvailabilityZonesResponse,
+
+    -- ** DescribeAwsNetworkPerformanceMetricSubscriptions (Paginated)
+    DescribeAwsNetworkPerformanceMetricSubscriptions (DescribeAwsNetworkPerformanceMetricSubscriptions'),
+    newDescribeAwsNetworkPerformanceMetricSubscriptions,
+    DescribeAwsNetworkPerformanceMetricSubscriptionsResponse (DescribeAwsNetworkPerformanceMetricSubscriptionsResponse'),
+    newDescribeAwsNetworkPerformanceMetricSubscriptionsResponse,
+
+    -- ** DescribeBundleTasks
+    DescribeBundleTasks (DescribeBundleTasks'),
+    newDescribeBundleTasks,
+    DescribeBundleTasksResponse (DescribeBundleTasksResponse'),
+    newDescribeBundleTasksResponse,
+
+    -- ** DescribeByoipCidrs (Paginated)
+    DescribeByoipCidrs (DescribeByoipCidrs'),
+    newDescribeByoipCidrs,
+    DescribeByoipCidrsResponse (DescribeByoipCidrsResponse'),
+    newDescribeByoipCidrsResponse,
+
+    -- ** DescribeCapacityReservationFleets (Paginated)
+    DescribeCapacityReservationFleets (DescribeCapacityReservationFleets'),
+    newDescribeCapacityReservationFleets,
+    DescribeCapacityReservationFleetsResponse (DescribeCapacityReservationFleetsResponse'),
+    newDescribeCapacityReservationFleetsResponse,
+
+    -- ** DescribeCapacityReservations (Paginated)
+    DescribeCapacityReservations (DescribeCapacityReservations'),
+    newDescribeCapacityReservations,
+    DescribeCapacityReservationsResponse (DescribeCapacityReservationsResponse'),
+    newDescribeCapacityReservationsResponse,
+
+    -- ** DescribeCarrierGateways (Paginated)
+    DescribeCarrierGateways (DescribeCarrierGateways'),
+    newDescribeCarrierGateways,
+    DescribeCarrierGatewaysResponse (DescribeCarrierGatewaysResponse'),
+    newDescribeCarrierGatewaysResponse,
+
+    -- ** DescribeClassicLinkInstances (Paginated)
+    DescribeClassicLinkInstances (DescribeClassicLinkInstances'),
+    newDescribeClassicLinkInstances,
+    DescribeClassicLinkInstancesResponse (DescribeClassicLinkInstancesResponse'),
+    newDescribeClassicLinkInstancesResponse,
+
+    -- ** DescribeClientVpnAuthorizationRules (Paginated)
+    DescribeClientVpnAuthorizationRules (DescribeClientVpnAuthorizationRules'),
+    newDescribeClientVpnAuthorizationRules,
+    DescribeClientVpnAuthorizationRulesResponse (DescribeClientVpnAuthorizationRulesResponse'),
+    newDescribeClientVpnAuthorizationRulesResponse,
+
+    -- ** DescribeClientVpnConnections (Paginated)
+    DescribeClientVpnConnections (DescribeClientVpnConnections'),
+    newDescribeClientVpnConnections,
+    DescribeClientVpnConnectionsResponse (DescribeClientVpnConnectionsResponse'),
+    newDescribeClientVpnConnectionsResponse,
+
+    -- ** DescribeClientVpnEndpoints (Paginated)
+    DescribeClientVpnEndpoints (DescribeClientVpnEndpoints'),
+    newDescribeClientVpnEndpoints,
+    DescribeClientVpnEndpointsResponse (DescribeClientVpnEndpointsResponse'),
+    newDescribeClientVpnEndpointsResponse,
+
+    -- ** DescribeClientVpnRoutes (Paginated)
+    DescribeClientVpnRoutes (DescribeClientVpnRoutes'),
+    newDescribeClientVpnRoutes,
+    DescribeClientVpnRoutesResponse (DescribeClientVpnRoutesResponse'),
+    newDescribeClientVpnRoutesResponse,
+
+    -- ** DescribeClientVpnTargetNetworks (Paginated)
+    DescribeClientVpnTargetNetworks (DescribeClientVpnTargetNetworks'),
+    newDescribeClientVpnTargetNetworks,
+    DescribeClientVpnTargetNetworksResponse (DescribeClientVpnTargetNetworksResponse'),
+    newDescribeClientVpnTargetNetworksResponse,
+
+    -- ** DescribeCoipPools (Paginated)
+    DescribeCoipPools (DescribeCoipPools'),
+    newDescribeCoipPools,
+    DescribeCoipPoolsResponse (DescribeCoipPoolsResponse'),
+    newDescribeCoipPoolsResponse,
+
+    -- ** DescribeConversionTasks
+    DescribeConversionTasks (DescribeConversionTasks'),
+    newDescribeConversionTasks,
+    DescribeConversionTasksResponse (DescribeConversionTasksResponse'),
+    newDescribeConversionTasksResponse,
+
+    -- ** DescribeCustomerGateways
+    DescribeCustomerGateways (DescribeCustomerGateways'),
+    newDescribeCustomerGateways,
+    DescribeCustomerGatewaysResponse (DescribeCustomerGatewaysResponse'),
+    newDescribeCustomerGatewaysResponse,
+
+    -- ** DescribeDhcpOptions (Paginated)
+    DescribeDhcpOptions (DescribeDhcpOptions'),
+    newDescribeDhcpOptions,
+    DescribeDhcpOptionsResponse (DescribeDhcpOptionsResponse'),
+    newDescribeDhcpOptionsResponse,
+
+    -- ** DescribeEgressOnlyInternetGateways (Paginated)
+    DescribeEgressOnlyInternetGateways (DescribeEgressOnlyInternetGateways'),
+    newDescribeEgressOnlyInternetGateways,
+    DescribeEgressOnlyInternetGatewaysResponse (DescribeEgressOnlyInternetGatewaysResponse'),
+    newDescribeEgressOnlyInternetGatewaysResponse,
+
+    -- ** DescribeElasticGpus
+    DescribeElasticGpus (DescribeElasticGpus'),
+    newDescribeElasticGpus,
+    DescribeElasticGpusResponse (DescribeElasticGpusResponse'),
+    newDescribeElasticGpusResponse,
+
+    -- ** DescribeExportImageTasks (Paginated)
+    DescribeExportImageTasks (DescribeExportImageTasks'),
+    newDescribeExportImageTasks,
+    DescribeExportImageTasksResponse (DescribeExportImageTasksResponse'),
+    newDescribeExportImageTasksResponse,
+
+    -- ** DescribeExportTasks
+    DescribeExportTasks (DescribeExportTasks'),
+    newDescribeExportTasks,
+    DescribeExportTasksResponse (DescribeExportTasksResponse'),
+    newDescribeExportTasksResponse,
+
+    -- ** DescribeFastLaunchImages (Paginated)
+    DescribeFastLaunchImages (DescribeFastLaunchImages'),
+    newDescribeFastLaunchImages,
+    DescribeFastLaunchImagesResponse (DescribeFastLaunchImagesResponse'),
+    newDescribeFastLaunchImagesResponse,
+
+    -- ** DescribeFastSnapshotRestores (Paginated)
+    DescribeFastSnapshotRestores (DescribeFastSnapshotRestores'),
+    newDescribeFastSnapshotRestores,
+    DescribeFastSnapshotRestoresResponse (DescribeFastSnapshotRestoresResponse'),
+    newDescribeFastSnapshotRestoresResponse,
+
+    -- ** DescribeFleetHistory
+    DescribeFleetHistory (DescribeFleetHistory'),
+    newDescribeFleetHistory,
+    DescribeFleetHistoryResponse (DescribeFleetHistoryResponse'),
+    newDescribeFleetHistoryResponse,
+
+    -- ** DescribeFleetInstances
+    DescribeFleetInstances (DescribeFleetInstances'),
+    newDescribeFleetInstances,
+    DescribeFleetInstancesResponse (DescribeFleetInstancesResponse'),
+    newDescribeFleetInstancesResponse,
+
+    -- ** DescribeFleets (Paginated)
+    DescribeFleets (DescribeFleets'),
+    newDescribeFleets,
+    DescribeFleetsResponse (DescribeFleetsResponse'),
+    newDescribeFleetsResponse,
+
+    -- ** DescribeFlowLogs (Paginated)
+    DescribeFlowLogs (DescribeFlowLogs'),
+    newDescribeFlowLogs,
+    DescribeFlowLogsResponse (DescribeFlowLogsResponse'),
+    newDescribeFlowLogsResponse,
+
+    -- ** DescribeFpgaImageAttribute
+    DescribeFpgaImageAttribute (DescribeFpgaImageAttribute'),
+    newDescribeFpgaImageAttribute,
+    DescribeFpgaImageAttributeResponse (DescribeFpgaImageAttributeResponse'),
+    newDescribeFpgaImageAttributeResponse,
+
+    -- ** DescribeFpgaImages (Paginated)
+    DescribeFpgaImages (DescribeFpgaImages'),
+    newDescribeFpgaImages,
+    DescribeFpgaImagesResponse (DescribeFpgaImagesResponse'),
+    newDescribeFpgaImagesResponse,
+
+    -- ** DescribeHostReservationOfferings (Paginated)
+    DescribeHostReservationOfferings (DescribeHostReservationOfferings'),
+    newDescribeHostReservationOfferings,
+    DescribeHostReservationOfferingsResponse (DescribeHostReservationOfferingsResponse'),
+    newDescribeHostReservationOfferingsResponse,
+
+    -- ** DescribeHostReservations (Paginated)
+    DescribeHostReservations (DescribeHostReservations'),
+    newDescribeHostReservations,
+    DescribeHostReservationsResponse (DescribeHostReservationsResponse'),
+    newDescribeHostReservationsResponse,
+
+    -- ** DescribeHosts (Paginated)
+    DescribeHosts (DescribeHosts'),
+    newDescribeHosts,
+    DescribeHostsResponse (DescribeHostsResponse'),
+    newDescribeHostsResponse,
+
+    -- ** DescribeIamInstanceProfileAssociations (Paginated)
+    DescribeIamInstanceProfileAssociations (DescribeIamInstanceProfileAssociations'),
+    newDescribeIamInstanceProfileAssociations,
+    DescribeIamInstanceProfileAssociationsResponse (DescribeIamInstanceProfileAssociationsResponse'),
+    newDescribeIamInstanceProfileAssociationsResponse,
+
+    -- ** DescribeIdFormat
+    DescribeIdFormat (DescribeIdFormat'),
+    newDescribeIdFormat,
+    DescribeIdFormatResponse (DescribeIdFormatResponse'),
+    newDescribeIdFormatResponse,
+
+    -- ** DescribeIdentityIdFormat
+    DescribeIdentityIdFormat (DescribeIdentityIdFormat'),
+    newDescribeIdentityIdFormat,
+    DescribeIdentityIdFormatResponse (DescribeIdentityIdFormatResponse'),
+    newDescribeIdentityIdFormatResponse,
+
+    -- ** DescribeImageAttribute
+    DescribeImageAttribute (DescribeImageAttribute'),
+    newDescribeImageAttribute,
+    DescribeImageAttributeResponse (DescribeImageAttributeResponse'),
+    newDescribeImageAttributeResponse,
+
+    -- ** DescribeImages (Paginated)
+    DescribeImages (DescribeImages'),
+    newDescribeImages,
+    DescribeImagesResponse (DescribeImagesResponse'),
+    newDescribeImagesResponse,
+
+    -- ** DescribeImportImageTasks (Paginated)
+    DescribeImportImageTasks (DescribeImportImageTasks'),
+    newDescribeImportImageTasks,
+    DescribeImportImageTasksResponse (DescribeImportImageTasksResponse'),
+    newDescribeImportImageTasksResponse,
+
+    -- ** DescribeImportSnapshotTasks (Paginated)
+    DescribeImportSnapshotTasks (DescribeImportSnapshotTasks'),
+    newDescribeImportSnapshotTasks,
+    DescribeImportSnapshotTasksResponse (DescribeImportSnapshotTasksResponse'),
+    newDescribeImportSnapshotTasksResponse,
+
+    -- ** DescribeInstanceAttribute
+    DescribeInstanceAttribute (DescribeInstanceAttribute'),
+    newDescribeInstanceAttribute,
+    DescribeInstanceAttributeResponse (DescribeInstanceAttributeResponse'),
+    newDescribeInstanceAttributeResponse,
+
+    -- ** DescribeInstanceCreditSpecifications (Paginated)
+    DescribeInstanceCreditSpecifications (DescribeInstanceCreditSpecifications'),
+    newDescribeInstanceCreditSpecifications,
+    DescribeInstanceCreditSpecificationsResponse (DescribeInstanceCreditSpecificationsResponse'),
+    newDescribeInstanceCreditSpecificationsResponse,
+
+    -- ** DescribeInstanceEventNotificationAttributes
+    DescribeInstanceEventNotificationAttributes (DescribeInstanceEventNotificationAttributes'),
+    newDescribeInstanceEventNotificationAttributes,
+    DescribeInstanceEventNotificationAttributesResponse (DescribeInstanceEventNotificationAttributesResponse'),
+    newDescribeInstanceEventNotificationAttributesResponse,
+
+    -- ** DescribeInstanceEventWindows (Paginated)
+    DescribeInstanceEventWindows (DescribeInstanceEventWindows'),
+    newDescribeInstanceEventWindows,
+    DescribeInstanceEventWindowsResponse (DescribeInstanceEventWindowsResponse'),
+    newDescribeInstanceEventWindowsResponse,
+
+    -- ** DescribeInstanceStatus (Paginated)
+    DescribeInstanceStatus (DescribeInstanceStatus'),
+    newDescribeInstanceStatus,
+    DescribeInstanceStatusResponse (DescribeInstanceStatusResponse'),
+    newDescribeInstanceStatusResponse,
+
+    -- ** DescribeInstanceTypeOfferings (Paginated)
+    DescribeInstanceTypeOfferings (DescribeInstanceTypeOfferings'),
+    newDescribeInstanceTypeOfferings,
+    DescribeInstanceTypeOfferingsResponse (DescribeInstanceTypeOfferingsResponse'),
+    newDescribeInstanceTypeOfferingsResponse,
+
+    -- ** DescribeInstanceTypes (Paginated)
+    DescribeInstanceTypes (DescribeInstanceTypes'),
+    newDescribeInstanceTypes,
+    DescribeInstanceTypesResponse (DescribeInstanceTypesResponse'),
+    newDescribeInstanceTypesResponse,
+
+    -- ** DescribeInstances (Paginated)
+    DescribeInstances (DescribeInstances'),
+    newDescribeInstances,
+    DescribeInstancesResponse (DescribeInstancesResponse'),
+    newDescribeInstancesResponse,
+
+    -- ** DescribeInternetGateways (Paginated)
+    DescribeInternetGateways (DescribeInternetGateways'),
+    newDescribeInternetGateways,
+    DescribeInternetGatewaysResponse (DescribeInternetGatewaysResponse'),
+    newDescribeInternetGatewaysResponse,
+
+    -- ** DescribeIpamPools (Paginated)
+    DescribeIpamPools (DescribeIpamPools'),
+    newDescribeIpamPools,
+    DescribeIpamPoolsResponse (DescribeIpamPoolsResponse'),
+    newDescribeIpamPoolsResponse,
+
+    -- ** DescribeIpamScopes (Paginated)
+    DescribeIpamScopes (DescribeIpamScopes'),
+    newDescribeIpamScopes,
+    DescribeIpamScopesResponse (DescribeIpamScopesResponse'),
+    newDescribeIpamScopesResponse,
+
+    -- ** DescribeIpams (Paginated)
+    DescribeIpams (DescribeIpams'),
+    newDescribeIpams,
+    DescribeIpamsResponse (DescribeIpamsResponse'),
+    newDescribeIpamsResponse,
+
+    -- ** DescribeIpv6Pools (Paginated)
+    DescribeIpv6Pools (DescribeIpv6Pools'),
+    newDescribeIpv6Pools,
+    DescribeIpv6PoolsResponse (DescribeIpv6PoolsResponse'),
+    newDescribeIpv6PoolsResponse,
+
+    -- ** DescribeKeyPairs
+    DescribeKeyPairs (DescribeKeyPairs'),
+    newDescribeKeyPairs,
+    DescribeKeyPairsResponse (DescribeKeyPairsResponse'),
+    newDescribeKeyPairsResponse,
+
+    -- ** DescribeLaunchTemplateVersions (Paginated)
+    DescribeLaunchTemplateVersions (DescribeLaunchTemplateVersions'),
+    newDescribeLaunchTemplateVersions,
+    DescribeLaunchTemplateVersionsResponse (DescribeLaunchTemplateVersionsResponse'),
+    newDescribeLaunchTemplateVersionsResponse,
+
+    -- ** DescribeLaunchTemplates (Paginated)
+    DescribeLaunchTemplates (DescribeLaunchTemplates'),
+    newDescribeLaunchTemplates,
+    DescribeLaunchTemplatesResponse (DescribeLaunchTemplatesResponse'),
+    newDescribeLaunchTemplatesResponse,
+
+    -- ** DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (Paginated)
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations'),
+    newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations,
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse (DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse'),
+    newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse,
+
+    -- ** DescribeLocalGatewayRouteTableVpcAssociations (Paginated)
+    DescribeLocalGatewayRouteTableVpcAssociations (DescribeLocalGatewayRouteTableVpcAssociations'),
+    newDescribeLocalGatewayRouteTableVpcAssociations,
+    DescribeLocalGatewayRouteTableVpcAssociationsResponse (DescribeLocalGatewayRouteTableVpcAssociationsResponse'),
+    newDescribeLocalGatewayRouteTableVpcAssociationsResponse,
+
+    -- ** DescribeLocalGatewayRouteTables (Paginated)
+    DescribeLocalGatewayRouteTables (DescribeLocalGatewayRouteTables'),
+    newDescribeLocalGatewayRouteTables,
+    DescribeLocalGatewayRouteTablesResponse (DescribeLocalGatewayRouteTablesResponse'),
+    newDescribeLocalGatewayRouteTablesResponse,
+
+    -- ** DescribeLocalGatewayVirtualInterfaceGroups (Paginated)
+    DescribeLocalGatewayVirtualInterfaceGroups (DescribeLocalGatewayVirtualInterfaceGroups'),
+    newDescribeLocalGatewayVirtualInterfaceGroups,
+    DescribeLocalGatewayVirtualInterfaceGroupsResponse (DescribeLocalGatewayVirtualInterfaceGroupsResponse'),
+    newDescribeLocalGatewayVirtualInterfaceGroupsResponse,
+
+    -- ** DescribeLocalGatewayVirtualInterfaces (Paginated)
+    DescribeLocalGatewayVirtualInterfaces (DescribeLocalGatewayVirtualInterfaces'),
+    newDescribeLocalGatewayVirtualInterfaces,
+    DescribeLocalGatewayVirtualInterfacesResponse (DescribeLocalGatewayVirtualInterfacesResponse'),
+    newDescribeLocalGatewayVirtualInterfacesResponse,
+
+    -- ** DescribeLocalGateways (Paginated)
+    DescribeLocalGateways (DescribeLocalGateways'),
+    newDescribeLocalGateways,
+    DescribeLocalGatewaysResponse (DescribeLocalGatewaysResponse'),
+    newDescribeLocalGatewaysResponse,
+
+    -- ** DescribeManagedPrefixLists (Paginated)
+    DescribeManagedPrefixLists (DescribeManagedPrefixLists'),
+    newDescribeManagedPrefixLists,
+    DescribeManagedPrefixListsResponse (DescribeManagedPrefixListsResponse'),
+    newDescribeManagedPrefixListsResponse,
+
+    -- ** DescribeMovingAddresses (Paginated)
+    DescribeMovingAddresses (DescribeMovingAddresses'),
+    newDescribeMovingAddresses,
+    DescribeMovingAddressesResponse (DescribeMovingAddressesResponse'),
+    newDescribeMovingAddressesResponse,
+
+    -- ** DescribeNatGateways (Paginated)
+    DescribeNatGateways (DescribeNatGateways'),
+    newDescribeNatGateways,
+    DescribeNatGatewaysResponse (DescribeNatGatewaysResponse'),
+    newDescribeNatGatewaysResponse,
+
+    -- ** DescribeNetworkAcls (Paginated)
+    DescribeNetworkAcls (DescribeNetworkAcls'),
+    newDescribeNetworkAcls,
+    DescribeNetworkAclsResponse (DescribeNetworkAclsResponse'),
+    newDescribeNetworkAclsResponse,
+
+    -- ** DescribeNetworkInsightsAccessScopeAnalyses (Paginated)
+    DescribeNetworkInsightsAccessScopeAnalyses (DescribeNetworkInsightsAccessScopeAnalyses'),
+    newDescribeNetworkInsightsAccessScopeAnalyses,
+    DescribeNetworkInsightsAccessScopeAnalysesResponse (DescribeNetworkInsightsAccessScopeAnalysesResponse'),
+    newDescribeNetworkInsightsAccessScopeAnalysesResponse,
+
+    -- ** DescribeNetworkInsightsAccessScopes (Paginated)
+    DescribeNetworkInsightsAccessScopes (DescribeNetworkInsightsAccessScopes'),
+    newDescribeNetworkInsightsAccessScopes,
+    DescribeNetworkInsightsAccessScopesResponse (DescribeNetworkInsightsAccessScopesResponse'),
+    newDescribeNetworkInsightsAccessScopesResponse,
+
+    -- ** DescribeNetworkInsightsAnalyses (Paginated)
+    DescribeNetworkInsightsAnalyses (DescribeNetworkInsightsAnalyses'),
+    newDescribeNetworkInsightsAnalyses,
+    DescribeNetworkInsightsAnalysesResponse (DescribeNetworkInsightsAnalysesResponse'),
+    newDescribeNetworkInsightsAnalysesResponse,
+
+    -- ** DescribeNetworkInsightsPaths (Paginated)
+    DescribeNetworkInsightsPaths (DescribeNetworkInsightsPaths'),
+    newDescribeNetworkInsightsPaths,
+    DescribeNetworkInsightsPathsResponse (DescribeNetworkInsightsPathsResponse'),
+    newDescribeNetworkInsightsPathsResponse,
+
+    -- ** DescribeNetworkInterfaceAttribute
+    DescribeNetworkInterfaceAttribute (DescribeNetworkInterfaceAttribute'),
+    newDescribeNetworkInterfaceAttribute,
+    DescribeNetworkInterfaceAttributeResponse (DescribeNetworkInterfaceAttributeResponse'),
+    newDescribeNetworkInterfaceAttributeResponse,
+
+    -- ** DescribeNetworkInterfacePermissions (Paginated)
+    DescribeNetworkInterfacePermissions (DescribeNetworkInterfacePermissions'),
+    newDescribeNetworkInterfacePermissions,
+    DescribeNetworkInterfacePermissionsResponse (DescribeNetworkInterfacePermissionsResponse'),
+    newDescribeNetworkInterfacePermissionsResponse,
+
+    -- ** DescribeNetworkInterfaces (Paginated)
+    DescribeNetworkInterfaces (DescribeNetworkInterfaces'),
+    newDescribeNetworkInterfaces,
+    DescribeNetworkInterfacesResponse (DescribeNetworkInterfacesResponse'),
+    newDescribeNetworkInterfacesResponse,
+
+    -- ** DescribePlacementGroups
+    DescribePlacementGroups (DescribePlacementGroups'),
+    newDescribePlacementGroups,
+    DescribePlacementGroupsResponse (DescribePlacementGroupsResponse'),
+    newDescribePlacementGroupsResponse,
+
+    -- ** DescribePrefixLists (Paginated)
+    DescribePrefixLists (DescribePrefixLists'),
+    newDescribePrefixLists,
+    DescribePrefixListsResponse (DescribePrefixListsResponse'),
+    newDescribePrefixListsResponse,
+
+    -- ** DescribePrincipalIdFormat (Paginated)
+    DescribePrincipalIdFormat (DescribePrincipalIdFormat'),
+    newDescribePrincipalIdFormat,
+    DescribePrincipalIdFormatResponse (DescribePrincipalIdFormatResponse'),
+    newDescribePrincipalIdFormatResponse,
+
+    -- ** DescribePublicIpv4Pools (Paginated)
+    DescribePublicIpv4Pools (DescribePublicIpv4Pools'),
+    newDescribePublicIpv4Pools,
+    DescribePublicIpv4PoolsResponse (DescribePublicIpv4PoolsResponse'),
+    newDescribePublicIpv4PoolsResponse,
+
+    -- ** DescribeRegions
+    DescribeRegions (DescribeRegions'),
+    newDescribeRegions,
+    DescribeRegionsResponse (DescribeRegionsResponse'),
+    newDescribeRegionsResponse,
+
+    -- ** DescribeReplaceRootVolumeTasks (Paginated)
+    DescribeReplaceRootVolumeTasks (DescribeReplaceRootVolumeTasks'),
+    newDescribeReplaceRootVolumeTasks,
+    DescribeReplaceRootVolumeTasksResponse (DescribeReplaceRootVolumeTasksResponse'),
+    newDescribeReplaceRootVolumeTasksResponse,
+
+    -- ** DescribeReservedInstances
+    DescribeReservedInstances (DescribeReservedInstances'),
+    newDescribeReservedInstances,
+    DescribeReservedInstancesResponse (DescribeReservedInstancesResponse'),
+    newDescribeReservedInstancesResponse,
+
+    -- ** DescribeReservedInstancesListings
+    DescribeReservedInstancesListings (DescribeReservedInstancesListings'),
+    newDescribeReservedInstancesListings,
+    DescribeReservedInstancesListingsResponse (DescribeReservedInstancesListingsResponse'),
+    newDescribeReservedInstancesListingsResponse,
+
+    -- ** DescribeReservedInstancesModifications (Paginated)
+    DescribeReservedInstancesModifications (DescribeReservedInstancesModifications'),
+    newDescribeReservedInstancesModifications,
+    DescribeReservedInstancesModificationsResponse (DescribeReservedInstancesModificationsResponse'),
+    newDescribeReservedInstancesModificationsResponse,
+
+    -- ** DescribeReservedInstancesOfferings (Paginated)
+    DescribeReservedInstancesOfferings (DescribeReservedInstancesOfferings'),
+    newDescribeReservedInstancesOfferings,
+    DescribeReservedInstancesOfferingsResponse (DescribeReservedInstancesOfferingsResponse'),
+    newDescribeReservedInstancesOfferingsResponse,
+
+    -- ** DescribeRouteTables (Paginated)
+    DescribeRouteTables (DescribeRouteTables'),
+    newDescribeRouteTables,
+    DescribeRouteTablesResponse (DescribeRouteTablesResponse'),
+    newDescribeRouteTablesResponse,
+
+    -- ** DescribeScheduledInstanceAvailability (Paginated)
+    DescribeScheduledInstanceAvailability (DescribeScheduledInstanceAvailability'),
+    newDescribeScheduledInstanceAvailability,
+    DescribeScheduledInstanceAvailabilityResponse (DescribeScheduledInstanceAvailabilityResponse'),
+    newDescribeScheduledInstanceAvailabilityResponse,
+
+    -- ** DescribeScheduledInstances (Paginated)
+    DescribeScheduledInstances (DescribeScheduledInstances'),
+    newDescribeScheduledInstances,
+    DescribeScheduledInstancesResponse (DescribeScheduledInstancesResponse'),
+    newDescribeScheduledInstancesResponse,
+
+    -- ** DescribeSecurityGroupReferences
+    DescribeSecurityGroupReferences (DescribeSecurityGroupReferences'),
+    newDescribeSecurityGroupReferences,
+    DescribeSecurityGroupReferencesResponse (DescribeSecurityGroupReferencesResponse'),
+    newDescribeSecurityGroupReferencesResponse,
+
+    -- ** DescribeSecurityGroupRules (Paginated)
+    DescribeSecurityGroupRules (DescribeSecurityGroupRules'),
+    newDescribeSecurityGroupRules,
+    DescribeSecurityGroupRulesResponse (DescribeSecurityGroupRulesResponse'),
+    newDescribeSecurityGroupRulesResponse,
+
+    -- ** DescribeSecurityGroups (Paginated)
+    DescribeSecurityGroups (DescribeSecurityGroups'),
+    newDescribeSecurityGroups,
+    DescribeSecurityGroupsResponse (DescribeSecurityGroupsResponse'),
+    newDescribeSecurityGroupsResponse,
+
+    -- ** DescribeSnapshotAttribute
+    DescribeSnapshotAttribute (DescribeSnapshotAttribute'),
+    newDescribeSnapshotAttribute,
+    DescribeSnapshotAttributeResponse (DescribeSnapshotAttributeResponse'),
+    newDescribeSnapshotAttributeResponse,
+
+    -- ** DescribeSnapshotTierStatus (Paginated)
+    DescribeSnapshotTierStatus (DescribeSnapshotTierStatus'),
+    newDescribeSnapshotTierStatus,
+    DescribeSnapshotTierStatusResponse (DescribeSnapshotTierStatusResponse'),
+    newDescribeSnapshotTierStatusResponse,
+
+    -- ** DescribeSnapshots (Paginated)
+    DescribeSnapshots (DescribeSnapshots'),
+    newDescribeSnapshots,
+    DescribeSnapshotsResponse (DescribeSnapshotsResponse'),
+    newDescribeSnapshotsResponse,
+
+    -- ** DescribeSpotDatafeedSubscription
+    DescribeSpotDatafeedSubscription (DescribeSpotDatafeedSubscription'),
+    newDescribeSpotDatafeedSubscription,
+    DescribeSpotDatafeedSubscriptionResponse (DescribeSpotDatafeedSubscriptionResponse'),
+    newDescribeSpotDatafeedSubscriptionResponse,
+
+    -- ** DescribeSpotFleetInstances (Paginated)
+    DescribeSpotFleetInstances (DescribeSpotFleetInstances'),
+    newDescribeSpotFleetInstances,
+    DescribeSpotFleetInstancesResponse (DescribeSpotFleetInstancesResponse'),
+    newDescribeSpotFleetInstancesResponse,
+
+    -- ** DescribeSpotFleetRequestHistory
+    DescribeSpotFleetRequestHistory (DescribeSpotFleetRequestHistory'),
+    newDescribeSpotFleetRequestHistory,
+    DescribeSpotFleetRequestHistoryResponse (DescribeSpotFleetRequestHistoryResponse'),
+    newDescribeSpotFleetRequestHistoryResponse,
+
+    -- ** DescribeSpotFleetRequests (Paginated)
+    DescribeSpotFleetRequests (DescribeSpotFleetRequests'),
+    newDescribeSpotFleetRequests,
+    DescribeSpotFleetRequestsResponse (DescribeSpotFleetRequestsResponse'),
+    newDescribeSpotFleetRequestsResponse,
+
+    -- ** DescribeSpotInstanceRequests (Paginated)
+    DescribeSpotInstanceRequests (DescribeSpotInstanceRequests'),
+    newDescribeSpotInstanceRequests,
+    DescribeSpotInstanceRequestsResponse (DescribeSpotInstanceRequestsResponse'),
+    newDescribeSpotInstanceRequestsResponse,
+
+    -- ** DescribeSpotPriceHistory (Paginated)
+    DescribeSpotPriceHistory (DescribeSpotPriceHistory'),
+    newDescribeSpotPriceHistory,
+    DescribeSpotPriceHistoryResponse (DescribeSpotPriceHistoryResponse'),
+    newDescribeSpotPriceHistoryResponse,
+
+    -- ** DescribeStaleSecurityGroups (Paginated)
+    DescribeStaleSecurityGroups (DescribeStaleSecurityGroups'),
+    newDescribeStaleSecurityGroups,
+    DescribeStaleSecurityGroupsResponse (DescribeStaleSecurityGroupsResponse'),
+    newDescribeStaleSecurityGroupsResponse,
+
+    -- ** DescribeStoreImageTasks (Paginated)
+    DescribeStoreImageTasks (DescribeStoreImageTasks'),
+    newDescribeStoreImageTasks,
+    DescribeStoreImageTasksResponse (DescribeStoreImageTasksResponse'),
+    newDescribeStoreImageTasksResponse,
+
+    -- ** DescribeSubnets (Paginated)
+    DescribeSubnets (DescribeSubnets'),
+    newDescribeSubnets,
+    DescribeSubnetsResponse (DescribeSubnetsResponse'),
+    newDescribeSubnetsResponse,
+
+    -- ** DescribeTags (Paginated)
+    DescribeTags (DescribeTags'),
+    newDescribeTags,
+    DescribeTagsResponse (DescribeTagsResponse'),
+    newDescribeTagsResponse,
+
+    -- ** DescribeTrafficMirrorFilters (Paginated)
+    DescribeTrafficMirrorFilters (DescribeTrafficMirrorFilters'),
+    newDescribeTrafficMirrorFilters,
+    DescribeTrafficMirrorFiltersResponse (DescribeTrafficMirrorFiltersResponse'),
+    newDescribeTrafficMirrorFiltersResponse,
+
+    -- ** DescribeTrafficMirrorSessions (Paginated)
+    DescribeTrafficMirrorSessions (DescribeTrafficMirrorSessions'),
+    newDescribeTrafficMirrorSessions,
+    DescribeTrafficMirrorSessionsResponse (DescribeTrafficMirrorSessionsResponse'),
+    newDescribeTrafficMirrorSessionsResponse,
+
+    -- ** DescribeTrafficMirrorTargets (Paginated)
+    DescribeTrafficMirrorTargets (DescribeTrafficMirrorTargets'),
+    newDescribeTrafficMirrorTargets,
+    DescribeTrafficMirrorTargetsResponse (DescribeTrafficMirrorTargetsResponse'),
+    newDescribeTrafficMirrorTargetsResponse,
+
+    -- ** DescribeTransitGatewayAttachments (Paginated)
+    DescribeTransitGatewayAttachments (DescribeTransitGatewayAttachments'),
+    newDescribeTransitGatewayAttachments,
+    DescribeTransitGatewayAttachmentsResponse (DescribeTransitGatewayAttachmentsResponse'),
+    newDescribeTransitGatewayAttachmentsResponse,
+
+    -- ** DescribeTransitGatewayConnectPeers (Paginated)
+    DescribeTransitGatewayConnectPeers (DescribeTransitGatewayConnectPeers'),
+    newDescribeTransitGatewayConnectPeers,
+    DescribeTransitGatewayConnectPeersResponse (DescribeTransitGatewayConnectPeersResponse'),
+    newDescribeTransitGatewayConnectPeersResponse,
+
+    -- ** DescribeTransitGatewayConnects (Paginated)
+    DescribeTransitGatewayConnects (DescribeTransitGatewayConnects'),
+    newDescribeTransitGatewayConnects,
+    DescribeTransitGatewayConnectsResponse (DescribeTransitGatewayConnectsResponse'),
+    newDescribeTransitGatewayConnectsResponse,
+
+    -- ** DescribeTransitGatewayMulticastDomains (Paginated)
+    DescribeTransitGatewayMulticastDomains (DescribeTransitGatewayMulticastDomains'),
+    newDescribeTransitGatewayMulticastDomains,
+    DescribeTransitGatewayMulticastDomainsResponse (DescribeTransitGatewayMulticastDomainsResponse'),
+    newDescribeTransitGatewayMulticastDomainsResponse,
+
+    -- ** DescribeTransitGatewayPeeringAttachments (Paginated)
+    DescribeTransitGatewayPeeringAttachments (DescribeTransitGatewayPeeringAttachments'),
+    newDescribeTransitGatewayPeeringAttachments,
+    DescribeTransitGatewayPeeringAttachmentsResponse (DescribeTransitGatewayPeeringAttachmentsResponse'),
+    newDescribeTransitGatewayPeeringAttachmentsResponse,
+
+    -- ** DescribeTransitGatewayPolicyTables (Paginated)
+    DescribeTransitGatewayPolicyTables (DescribeTransitGatewayPolicyTables'),
+    newDescribeTransitGatewayPolicyTables,
+    DescribeTransitGatewayPolicyTablesResponse (DescribeTransitGatewayPolicyTablesResponse'),
+    newDescribeTransitGatewayPolicyTablesResponse,
+
+    -- ** DescribeTransitGatewayRouteTableAnnouncements (Paginated)
+    DescribeTransitGatewayRouteTableAnnouncements (DescribeTransitGatewayRouteTableAnnouncements'),
+    newDescribeTransitGatewayRouteTableAnnouncements,
+    DescribeTransitGatewayRouteTableAnnouncementsResponse (DescribeTransitGatewayRouteTableAnnouncementsResponse'),
+    newDescribeTransitGatewayRouteTableAnnouncementsResponse,
+
+    -- ** DescribeTransitGatewayRouteTables (Paginated)
+    DescribeTransitGatewayRouteTables (DescribeTransitGatewayRouteTables'),
+    newDescribeTransitGatewayRouteTables,
+    DescribeTransitGatewayRouteTablesResponse (DescribeTransitGatewayRouteTablesResponse'),
+    newDescribeTransitGatewayRouteTablesResponse,
+
+    -- ** DescribeTransitGatewayVpcAttachments (Paginated)
+    DescribeTransitGatewayVpcAttachments (DescribeTransitGatewayVpcAttachments'),
+    newDescribeTransitGatewayVpcAttachments,
+    DescribeTransitGatewayVpcAttachmentsResponse (DescribeTransitGatewayVpcAttachmentsResponse'),
+    newDescribeTransitGatewayVpcAttachmentsResponse,
+
+    -- ** DescribeTransitGateways (Paginated)
+    DescribeTransitGateways (DescribeTransitGateways'),
+    newDescribeTransitGateways,
+    DescribeTransitGatewaysResponse (DescribeTransitGatewaysResponse'),
+    newDescribeTransitGatewaysResponse,
+
+    -- ** DescribeTrunkInterfaceAssociations (Paginated)
+    DescribeTrunkInterfaceAssociations (DescribeTrunkInterfaceAssociations'),
+    newDescribeTrunkInterfaceAssociations,
+    DescribeTrunkInterfaceAssociationsResponse (DescribeTrunkInterfaceAssociationsResponse'),
+    newDescribeTrunkInterfaceAssociationsResponse,
+
+    -- ** DescribeVerifiedAccessEndpoints (Paginated)
+    DescribeVerifiedAccessEndpoints (DescribeVerifiedAccessEndpoints'),
+    newDescribeVerifiedAccessEndpoints,
+    DescribeVerifiedAccessEndpointsResponse (DescribeVerifiedAccessEndpointsResponse'),
+    newDescribeVerifiedAccessEndpointsResponse,
+
+    -- ** DescribeVerifiedAccessGroups (Paginated)
+    DescribeVerifiedAccessGroups (DescribeVerifiedAccessGroups'),
+    newDescribeVerifiedAccessGroups,
+    DescribeVerifiedAccessGroupsResponse (DescribeVerifiedAccessGroupsResponse'),
+    newDescribeVerifiedAccessGroupsResponse,
+
+    -- ** DescribeVerifiedAccessInstanceLoggingConfigurations (Paginated)
+    DescribeVerifiedAccessInstanceLoggingConfigurations (DescribeVerifiedAccessInstanceLoggingConfigurations'),
+    newDescribeVerifiedAccessInstanceLoggingConfigurations,
+    DescribeVerifiedAccessInstanceLoggingConfigurationsResponse (DescribeVerifiedAccessInstanceLoggingConfigurationsResponse'),
+    newDescribeVerifiedAccessInstanceLoggingConfigurationsResponse,
+
+    -- ** DescribeVerifiedAccessInstances (Paginated)
+    DescribeVerifiedAccessInstances (DescribeVerifiedAccessInstances'),
+    newDescribeVerifiedAccessInstances,
+    DescribeVerifiedAccessInstancesResponse (DescribeVerifiedAccessInstancesResponse'),
+    newDescribeVerifiedAccessInstancesResponse,
+
+    -- ** DescribeVerifiedAccessTrustProviders (Paginated)
+    DescribeVerifiedAccessTrustProviders (DescribeVerifiedAccessTrustProviders'),
+    newDescribeVerifiedAccessTrustProviders,
+    DescribeVerifiedAccessTrustProvidersResponse (DescribeVerifiedAccessTrustProvidersResponse'),
+    newDescribeVerifiedAccessTrustProvidersResponse,
+
+    -- ** DescribeVolumeAttribute
+    DescribeVolumeAttribute (DescribeVolumeAttribute'),
+    newDescribeVolumeAttribute,
+    DescribeVolumeAttributeResponse (DescribeVolumeAttributeResponse'),
+    newDescribeVolumeAttributeResponse,
+
+    -- ** DescribeVolumeStatus (Paginated)
+    DescribeVolumeStatus (DescribeVolumeStatus'),
+    newDescribeVolumeStatus,
+    DescribeVolumeStatusResponse (DescribeVolumeStatusResponse'),
+    newDescribeVolumeStatusResponse,
+
+    -- ** DescribeVolumes (Paginated)
+    DescribeVolumes (DescribeVolumes'),
+    newDescribeVolumes,
+    DescribeVolumesResponse (DescribeVolumesResponse'),
+    newDescribeVolumesResponse,
+
+    -- ** DescribeVolumesModifications (Paginated)
+    DescribeVolumesModifications (DescribeVolumesModifications'),
+    newDescribeVolumesModifications,
+    DescribeVolumesModificationsResponse (DescribeVolumesModificationsResponse'),
+    newDescribeVolumesModificationsResponse,
+
+    -- ** DescribeVpcAttribute
+    DescribeVpcAttribute (DescribeVpcAttribute'),
+    newDescribeVpcAttribute,
+    DescribeVpcAttributeResponse (DescribeVpcAttributeResponse'),
+    newDescribeVpcAttributeResponse,
+
+    -- ** DescribeVpcClassicLink
+    DescribeVpcClassicLink (DescribeVpcClassicLink'),
+    newDescribeVpcClassicLink,
+    DescribeVpcClassicLinkResponse (DescribeVpcClassicLinkResponse'),
+    newDescribeVpcClassicLinkResponse,
+
+    -- ** DescribeVpcClassicLinkDnsSupport (Paginated)
+    DescribeVpcClassicLinkDnsSupport (DescribeVpcClassicLinkDnsSupport'),
+    newDescribeVpcClassicLinkDnsSupport,
+    DescribeVpcClassicLinkDnsSupportResponse (DescribeVpcClassicLinkDnsSupportResponse'),
+    newDescribeVpcClassicLinkDnsSupportResponse,
+
+    -- ** DescribeVpcEndpointConnectionNotifications (Paginated)
+    DescribeVpcEndpointConnectionNotifications (DescribeVpcEndpointConnectionNotifications'),
+    newDescribeVpcEndpointConnectionNotifications,
+    DescribeVpcEndpointConnectionNotificationsResponse (DescribeVpcEndpointConnectionNotificationsResponse'),
+    newDescribeVpcEndpointConnectionNotificationsResponse,
+
+    -- ** DescribeVpcEndpointConnections (Paginated)
+    DescribeVpcEndpointConnections (DescribeVpcEndpointConnections'),
+    newDescribeVpcEndpointConnections,
+    DescribeVpcEndpointConnectionsResponse (DescribeVpcEndpointConnectionsResponse'),
+    newDescribeVpcEndpointConnectionsResponse,
+
+    -- ** DescribeVpcEndpointServiceConfigurations (Paginated)
+    DescribeVpcEndpointServiceConfigurations (DescribeVpcEndpointServiceConfigurations'),
+    newDescribeVpcEndpointServiceConfigurations,
+    DescribeVpcEndpointServiceConfigurationsResponse (DescribeVpcEndpointServiceConfigurationsResponse'),
+    newDescribeVpcEndpointServiceConfigurationsResponse,
+
+    -- ** DescribeVpcEndpointServicePermissions (Paginated)
+    DescribeVpcEndpointServicePermissions (DescribeVpcEndpointServicePermissions'),
+    newDescribeVpcEndpointServicePermissions,
+    DescribeVpcEndpointServicePermissionsResponse (DescribeVpcEndpointServicePermissionsResponse'),
+    newDescribeVpcEndpointServicePermissionsResponse,
+
+    -- ** DescribeVpcEndpointServices (Paginated)
+    DescribeVpcEndpointServices (DescribeVpcEndpointServices'),
+    newDescribeVpcEndpointServices,
+    DescribeVpcEndpointServicesResponse (DescribeVpcEndpointServicesResponse'),
+    newDescribeVpcEndpointServicesResponse,
+
+    -- ** DescribeVpcEndpoints (Paginated)
+    DescribeVpcEndpoints (DescribeVpcEndpoints'),
+    newDescribeVpcEndpoints,
+    DescribeVpcEndpointsResponse (DescribeVpcEndpointsResponse'),
+    newDescribeVpcEndpointsResponse,
+
+    -- ** DescribeVpcPeeringConnections (Paginated)
+    DescribeVpcPeeringConnections (DescribeVpcPeeringConnections'),
+    newDescribeVpcPeeringConnections,
+    DescribeVpcPeeringConnectionsResponse (DescribeVpcPeeringConnectionsResponse'),
+    newDescribeVpcPeeringConnectionsResponse,
+
+    -- ** DescribeVpcs (Paginated)
+    DescribeVpcs (DescribeVpcs'),
+    newDescribeVpcs,
+    DescribeVpcsResponse (DescribeVpcsResponse'),
+    newDescribeVpcsResponse,
+
+    -- ** DescribeVpnConnections
+    DescribeVpnConnections (DescribeVpnConnections'),
+    newDescribeVpnConnections,
+    DescribeVpnConnectionsResponse (DescribeVpnConnectionsResponse'),
+    newDescribeVpnConnectionsResponse,
+
+    -- ** DescribeVpnGateways
+    DescribeVpnGateways (DescribeVpnGateways'),
+    newDescribeVpnGateways,
+    DescribeVpnGatewaysResponse (DescribeVpnGatewaysResponse'),
+    newDescribeVpnGatewaysResponse,
+
+    -- ** DetachClassicLinkVpc
+    DetachClassicLinkVpc (DetachClassicLinkVpc'),
+    newDetachClassicLinkVpc,
+    DetachClassicLinkVpcResponse (DetachClassicLinkVpcResponse'),
+    newDetachClassicLinkVpcResponse,
+
+    -- ** DetachInternetGateway
+    DetachInternetGateway (DetachInternetGateway'),
+    newDetachInternetGateway,
+    DetachInternetGatewayResponse (DetachInternetGatewayResponse'),
+    newDetachInternetGatewayResponse,
+
+    -- ** DetachNetworkInterface
+    DetachNetworkInterface (DetachNetworkInterface'),
+    newDetachNetworkInterface,
+    DetachNetworkInterfaceResponse (DetachNetworkInterfaceResponse'),
+    newDetachNetworkInterfaceResponse,
+
+    -- ** DetachVerifiedAccessTrustProvider
+    DetachVerifiedAccessTrustProvider (DetachVerifiedAccessTrustProvider'),
+    newDetachVerifiedAccessTrustProvider,
+    DetachVerifiedAccessTrustProviderResponse (DetachVerifiedAccessTrustProviderResponse'),
+    newDetachVerifiedAccessTrustProviderResponse,
+
+    -- ** DetachVolume
+    DetachVolume (DetachVolume'),
+    newDetachVolume,
+    VolumeAttachment (VolumeAttachment'),
+    newVolumeAttachment,
+
+    -- ** DetachVpnGateway
+    DetachVpnGateway (DetachVpnGateway'),
+    newDetachVpnGateway,
+    DetachVpnGatewayResponse (DetachVpnGatewayResponse'),
+    newDetachVpnGatewayResponse,
+
+    -- ** DisableAddressTransfer
+    DisableAddressTransfer (DisableAddressTransfer'),
+    newDisableAddressTransfer,
+    DisableAddressTransferResponse (DisableAddressTransferResponse'),
+    newDisableAddressTransferResponse,
+
+    -- ** DisableAwsNetworkPerformanceMetricSubscription
+    DisableAwsNetworkPerformanceMetricSubscription (DisableAwsNetworkPerformanceMetricSubscription'),
+    newDisableAwsNetworkPerformanceMetricSubscription,
+    DisableAwsNetworkPerformanceMetricSubscriptionResponse (DisableAwsNetworkPerformanceMetricSubscriptionResponse'),
+    newDisableAwsNetworkPerformanceMetricSubscriptionResponse,
+
+    -- ** DisableEbsEncryptionByDefault
+    DisableEbsEncryptionByDefault (DisableEbsEncryptionByDefault'),
+    newDisableEbsEncryptionByDefault,
+    DisableEbsEncryptionByDefaultResponse (DisableEbsEncryptionByDefaultResponse'),
+    newDisableEbsEncryptionByDefaultResponse,
+
+    -- ** DisableFastLaunch
+    DisableFastLaunch (DisableFastLaunch'),
+    newDisableFastLaunch,
+    DisableFastLaunchResponse (DisableFastLaunchResponse'),
+    newDisableFastLaunchResponse,
+
+    -- ** DisableFastSnapshotRestores
+    DisableFastSnapshotRestores (DisableFastSnapshotRestores'),
+    newDisableFastSnapshotRestores,
+    DisableFastSnapshotRestoresResponse (DisableFastSnapshotRestoresResponse'),
+    newDisableFastSnapshotRestoresResponse,
+
+    -- ** DisableImageDeprecation
+    DisableImageDeprecation (DisableImageDeprecation'),
+    newDisableImageDeprecation,
+    DisableImageDeprecationResponse (DisableImageDeprecationResponse'),
+    newDisableImageDeprecationResponse,
+
+    -- ** DisableIpamOrganizationAdminAccount
+    DisableIpamOrganizationAdminAccount (DisableIpamOrganizationAdminAccount'),
+    newDisableIpamOrganizationAdminAccount,
+    DisableIpamOrganizationAdminAccountResponse (DisableIpamOrganizationAdminAccountResponse'),
+    newDisableIpamOrganizationAdminAccountResponse,
+
+    -- ** DisableSerialConsoleAccess
+    DisableSerialConsoleAccess (DisableSerialConsoleAccess'),
+    newDisableSerialConsoleAccess,
+    DisableSerialConsoleAccessResponse (DisableSerialConsoleAccessResponse'),
+    newDisableSerialConsoleAccessResponse,
+
+    -- ** DisableTransitGatewayRouteTablePropagation
+    DisableTransitGatewayRouteTablePropagation (DisableTransitGatewayRouteTablePropagation'),
+    newDisableTransitGatewayRouteTablePropagation,
+    DisableTransitGatewayRouteTablePropagationResponse (DisableTransitGatewayRouteTablePropagationResponse'),
+    newDisableTransitGatewayRouteTablePropagationResponse,
+
+    -- ** DisableVgwRoutePropagation
+    DisableVgwRoutePropagation (DisableVgwRoutePropagation'),
+    newDisableVgwRoutePropagation,
+    DisableVgwRoutePropagationResponse (DisableVgwRoutePropagationResponse'),
+    newDisableVgwRoutePropagationResponse,
+
+    -- ** DisableVpcClassicLink
+    DisableVpcClassicLink (DisableVpcClassicLink'),
+    newDisableVpcClassicLink,
+    DisableVpcClassicLinkResponse (DisableVpcClassicLinkResponse'),
+    newDisableVpcClassicLinkResponse,
+
+    -- ** DisableVpcClassicLinkDnsSupport
+    DisableVpcClassicLinkDnsSupport (DisableVpcClassicLinkDnsSupport'),
+    newDisableVpcClassicLinkDnsSupport,
+    DisableVpcClassicLinkDnsSupportResponse (DisableVpcClassicLinkDnsSupportResponse'),
+    newDisableVpcClassicLinkDnsSupportResponse,
+
+    -- ** DisassociateAddress
+    DisassociateAddress (DisassociateAddress'),
+    newDisassociateAddress,
+    DisassociateAddressResponse (DisassociateAddressResponse'),
+    newDisassociateAddressResponse,
+
+    -- ** DisassociateClientVpnTargetNetwork
+    DisassociateClientVpnTargetNetwork (DisassociateClientVpnTargetNetwork'),
+    newDisassociateClientVpnTargetNetwork,
+    DisassociateClientVpnTargetNetworkResponse (DisassociateClientVpnTargetNetworkResponse'),
+    newDisassociateClientVpnTargetNetworkResponse,
+
+    -- ** DisassociateEnclaveCertificateIamRole
+    DisassociateEnclaveCertificateIamRole (DisassociateEnclaveCertificateIamRole'),
+    newDisassociateEnclaveCertificateIamRole,
+    DisassociateEnclaveCertificateIamRoleResponse (DisassociateEnclaveCertificateIamRoleResponse'),
+    newDisassociateEnclaveCertificateIamRoleResponse,
+
+    -- ** DisassociateIamInstanceProfile
+    DisassociateIamInstanceProfile (DisassociateIamInstanceProfile'),
+    newDisassociateIamInstanceProfile,
+    DisassociateIamInstanceProfileResponse (DisassociateIamInstanceProfileResponse'),
+    newDisassociateIamInstanceProfileResponse,
+
+    -- ** DisassociateInstanceEventWindow
+    DisassociateInstanceEventWindow (DisassociateInstanceEventWindow'),
+    newDisassociateInstanceEventWindow,
+    DisassociateInstanceEventWindowResponse (DisassociateInstanceEventWindowResponse'),
+    newDisassociateInstanceEventWindowResponse,
+
+    -- ** DisassociateRouteTable
+    DisassociateRouteTable (DisassociateRouteTable'),
+    newDisassociateRouteTable,
+    DisassociateRouteTableResponse (DisassociateRouteTableResponse'),
+    newDisassociateRouteTableResponse,
+
+    -- ** DisassociateSubnetCidrBlock
+    DisassociateSubnetCidrBlock (DisassociateSubnetCidrBlock'),
+    newDisassociateSubnetCidrBlock,
+    DisassociateSubnetCidrBlockResponse (DisassociateSubnetCidrBlockResponse'),
+    newDisassociateSubnetCidrBlockResponse,
+
+    -- ** DisassociateTransitGatewayMulticastDomain
+    DisassociateTransitGatewayMulticastDomain (DisassociateTransitGatewayMulticastDomain'),
+    newDisassociateTransitGatewayMulticastDomain,
+    DisassociateTransitGatewayMulticastDomainResponse (DisassociateTransitGatewayMulticastDomainResponse'),
+    newDisassociateTransitGatewayMulticastDomainResponse,
+
+    -- ** DisassociateTransitGatewayPolicyTable
+    DisassociateTransitGatewayPolicyTable (DisassociateTransitGatewayPolicyTable'),
+    newDisassociateTransitGatewayPolicyTable,
+    DisassociateTransitGatewayPolicyTableResponse (DisassociateTransitGatewayPolicyTableResponse'),
+    newDisassociateTransitGatewayPolicyTableResponse,
+
+    -- ** DisassociateTransitGatewayRouteTable
+    DisassociateTransitGatewayRouteTable (DisassociateTransitGatewayRouteTable'),
+    newDisassociateTransitGatewayRouteTable,
+    DisassociateTransitGatewayRouteTableResponse (DisassociateTransitGatewayRouteTableResponse'),
+    newDisassociateTransitGatewayRouteTableResponse,
+
+    -- ** DisassociateTrunkInterface
+    DisassociateTrunkInterface (DisassociateTrunkInterface'),
+    newDisassociateTrunkInterface,
+    DisassociateTrunkInterfaceResponse (DisassociateTrunkInterfaceResponse'),
+    newDisassociateTrunkInterfaceResponse,
+
+    -- ** DisassociateVpcCidrBlock
+    DisassociateVpcCidrBlock (DisassociateVpcCidrBlock'),
+    newDisassociateVpcCidrBlock,
+    DisassociateVpcCidrBlockResponse (DisassociateVpcCidrBlockResponse'),
+    newDisassociateVpcCidrBlockResponse,
+
+    -- ** EnableAddressTransfer
+    EnableAddressTransfer (EnableAddressTransfer'),
+    newEnableAddressTransfer,
+    EnableAddressTransferResponse (EnableAddressTransferResponse'),
+    newEnableAddressTransferResponse,
+
+    -- ** EnableAwsNetworkPerformanceMetricSubscription
+    EnableAwsNetworkPerformanceMetricSubscription (EnableAwsNetworkPerformanceMetricSubscription'),
+    newEnableAwsNetworkPerformanceMetricSubscription,
+    EnableAwsNetworkPerformanceMetricSubscriptionResponse (EnableAwsNetworkPerformanceMetricSubscriptionResponse'),
+    newEnableAwsNetworkPerformanceMetricSubscriptionResponse,
+
+    -- ** EnableEbsEncryptionByDefault
+    EnableEbsEncryptionByDefault (EnableEbsEncryptionByDefault'),
+    newEnableEbsEncryptionByDefault,
+    EnableEbsEncryptionByDefaultResponse (EnableEbsEncryptionByDefaultResponse'),
+    newEnableEbsEncryptionByDefaultResponse,
+
+    -- ** EnableFastLaunch
+    EnableFastLaunch (EnableFastLaunch'),
+    newEnableFastLaunch,
+    EnableFastLaunchResponse (EnableFastLaunchResponse'),
+    newEnableFastLaunchResponse,
+
+    -- ** EnableFastSnapshotRestores
+    EnableFastSnapshotRestores (EnableFastSnapshotRestores'),
+    newEnableFastSnapshotRestores,
+    EnableFastSnapshotRestoresResponse (EnableFastSnapshotRestoresResponse'),
+    newEnableFastSnapshotRestoresResponse,
+
+    -- ** EnableImageDeprecation
+    EnableImageDeprecation (EnableImageDeprecation'),
+    newEnableImageDeprecation,
+    EnableImageDeprecationResponse (EnableImageDeprecationResponse'),
+    newEnableImageDeprecationResponse,
+
+    -- ** EnableIpamOrganizationAdminAccount
+    EnableIpamOrganizationAdminAccount (EnableIpamOrganizationAdminAccount'),
+    newEnableIpamOrganizationAdminAccount,
+    EnableIpamOrganizationAdminAccountResponse (EnableIpamOrganizationAdminAccountResponse'),
+    newEnableIpamOrganizationAdminAccountResponse,
+
+    -- ** EnableReachabilityAnalyzerOrganizationSharing
+    EnableReachabilityAnalyzerOrganizationSharing (EnableReachabilityAnalyzerOrganizationSharing'),
+    newEnableReachabilityAnalyzerOrganizationSharing,
+    EnableReachabilityAnalyzerOrganizationSharingResponse (EnableReachabilityAnalyzerOrganizationSharingResponse'),
+    newEnableReachabilityAnalyzerOrganizationSharingResponse,
+
+    -- ** EnableSerialConsoleAccess
+    EnableSerialConsoleAccess (EnableSerialConsoleAccess'),
+    newEnableSerialConsoleAccess,
+    EnableSerialConsoleAccessResponse (EnableSerialConsoleAccessResponse'),
+    newEnableSerialConsoleAccessResponse,
+
+    -- ** EnableTransitGatewayRouteTablePropagation
+    EnableTransitGatewayRouteTablePropagation (EnableTransitGatewayRouteTablePropagation'),
+    newEnableTransitGatewayRouteTablePropagation,
+    EnableTransitGatewayRouteTablePropagationResponse (EnableTransitGatewayRouteTablePropagationResponse'),
+    newEnableTransitGatewayRouteTablePropagationResponse,
+
+    -- ** EnableVgwRoutePropagation
+    EnableVgwRoutePropagation (EnableVgwRoutePropagation'),
+    newEnableVgwRoutePropagation,
+    EnableVgwRoutePropagationResponse (EnableVgwRoutePropagationResponse'),
+    newEnableVgwRoutePropagationResponse,
+
+    -- ** EnableVolumeIO
+    EnableVolumeIO (EnableVolumeIO'),
+    newEnableVolumeIO,
+    EnableVolumeIOResponse (EnableVolumeIOResponse'),
+    newEnableVolumeIOResponse,
+
+    -- ** EnableVpcClassicLink
+    EnableVpcClassicLink (EnableVpcClassicLink'),
+    newEnableVpcClassicLink,
+    EnableVpcClassicLinkResponse (EnableVpcClassicLinkResponse'),
+    newEnableVpcClassicLinkResponse,
+
+    -- ** EnableVpcClassicLinkDnsSupport
+    EnableVpcClassicLinkDnsSupport (EnableVpcClassicLinkDnsSupport'),
+    newEnableVpcClassicLinkDnsSupport,
+    EnableVpcClassicLinkDnsSupportResponse (EnableVpcClassicLinkDnsSupportResponse'),
+    newEnableVpcClassicLinkDnsSupportResponse,
+
+    -- ** ExportClientVpnClientCertificateRevocationList
+    ExportClientVpnClientCertificateRevocationList (ExportClientVpnClientCertificateRevocationList'),
+    newExportClientVpnClientCertificateRevocationList,
+    ExportClientVpnClientCertificateRevocationListResponse (ExportClientVpnClientCertificateRevocationListResponse'),
+    newExportClientVpnClientCertificateRevocationListResponse,
+
+    -- ** ExportClientVpnClientConfiguration
+    ExportClientVpnClientConfiguration (ExportClientVpnClientConfiguration'),
+    newExportClientVpnClientConfiguration,
+    ExportClientVpnClientConfigurationResponse (ExportClientVpnClientConfigurationResponse'),
+    newExportClientVpnClientConfigurationResponse,
+
+    -- ** ExportImage
+    ExportImage (ExportImage'),
+    newExportImage,
+    ExportImageResponse (ExportImageResponse'),
+    newExportImageResponse,
+
+    -- ** ExportTransitGatewayRoutes
+    ExportTransitGatewayRoutes (ExportTransitGatewayRoutes'),
+    newExportTransitGatewayRoutes,
+    ExportTransitGatewayRoutesResponse (ExportTransitGatewayRoutesResponse'),
+    newExportTransitGatewayRoutesResponse,
+
+    -- ** GetAssociatedEnclaveCertificateIamRoles
+    GetAssociatedEnclaveCertificateIamRoles (GetAssociatedEnclaveCertificateIamRoles'),
+    newGetAssociatedEnclaveCertificateIamRoles,
+    GetAssociatedEnclaveCertificateIamRolesResponse (GetAssociatedEnclaveCertificateIamRolesResponse'),
+    newGetAssociatedEnclaveCertificateIamRolesResponse,
+
+    -- ** GetAssociatedIpv6PoolCidrs (Paginated)
+    GetAssociatedIpv6PoolCidrs (GetAssociatedIpv6PoolCidrs'),
+    newGetAssociatedIpv6PoolCidrs,
+    GetAssociatedIpv6PoolCidrsResponse (GetAssociatedIpv6PoolCidrsResponse'),
+    newGetAssociatedIpv6PoolCidrsResponse,
+
+    -- ** GetAwsNetworkPerformanceData (Paginated)
+    GetAwsNetworkPerformanceData (GetAwsNetworkPerformanceData'),
+    newGetAwsNetworkPerformanceData,
+    GetAwsNetworkPerformanceDataResponse (GetAwsNetworkPerformanceDataResponse'),
+    newGetAwsNetworkPerformanceDataResponse,
+
+    -- ** GetCapacityReservationUsage
+    GetCapacityReservationUsage (GetCapacityReservationUsage'),
+    newGetCapacityReservationUsage,
+    GetCapacityReservationUsageResponse (GetCapacityReservationUsageResponse'),
+    newGetCapacityReservationUsageResponse,
+
+    -- ** GetCoipPoolUsage
+    GetCoipPoolUsage (GetCoipPoolUsage'),
+    newGetCoipPoolUsage,
+    GetCoipPoolUsageResponse (GetCoipPoolUsageResponse'),
+    newGetCoipPoolUsageResponse,
+
+    -- ** GetConsoleOutput
+    GetConsoleOutput (GetConsoleOutput'),
+    newGetConsoleOutput,
+    GetConsoleOutputResponse (GetConsoleOutputResponse'),
+    newGetConsoleOutputResponse,
+
+    -- ** GetConsoleScreenshot
+    GetConsoleScreenshot (GetConsoleScreenshot'),
+    newGetConsoleScreenshot,
+    GetConsoleScreenshotResponse (GetConsoleScreenshotResponse'),
+    newGetConsoleScreenshotResponse,
+
+    -- ** GetDefaultCreditSpecification
+    GetDefaultCreditSpecification (GetDefaultCreditSpecification'),
+    newGetDefaultCreditSpecification,
+    GetDefaultCreditSpecificationResponse (GetDefaultCreditSpecificationResponse'),
+    newGetDefaultCreditSpecificationResponse,
+
+    -- ** GetEbsDefaultKmsKeyId
+    GetEbsDefaultKmsKeyId (GetEbsDefaultKmsKeyId'),
+    newGetEbsDefaultKmsKeyId,
+    GetEbsDefaultKmsKeyIdResponse (GetEbsDefaultKmsKeyIdResponse'),
+    newGetEbsDefaultKmsKeyIdResponse,
+
+    -- ** GetEbsEncryptionByDefault
+    GetEbsEncryptionByDefault (GetEbsEncryptionByDefault'),
+    newGetEbsEncryptionByDefault,
+    GetEbsEncryptionByDefaultResponse (GetEbsEncryptionByDefaultResponse'),
+    newGetEbsEncryptionByDefaultResponse,
+
+    -- ** GetFlowLogsIntegrationTemplate
+    GetFlowLogsIntegrationTemplate (GetFlowLogsIntegrationTemplate'),
+    newGetFlowLogsIntegrationTemplate,
+    GetFlowLogsIntegrationTemplateResponse (GetFlowLogsIntegrationTemplateResponse'),
+    newGetFlowLogsIntegrationTemplateResponse,
+
+    -- ** GetGroupsForCapacityReservation (Paginated)
+    GetGroupsForCapacityReservation (GetGroupsForCapacityReservation'),
+    newGetGroupsForCapacityReservation,
+    GetGroupsForCapacityReservationResponse (GetGroupsForCapacityReservationResponse'),
+    newGetGroupsForCapacityReservationResponse,
+
+    -- ** GetHostReservationPurchasePreview
+    GetHostReservationPurchasePreview (GetHostReservationPurchasePreview'),
+    newGetHostReservationPurchasePreview,
+    GetHostReservationPurchasePreviewResponse (GetHostReservationPurchasePreviewResponse'),
+    newGetHostReservationPurchasePreviewResponse,
+
+    -- ** GetInstanceTypesFromInstanceRequirements (Paginated)
+    GetInstanceTypesFromInstanceRequirements (GetInstanceTypesFromInstanceRequirements'),
+    newGetInstanceTypesFromInstanceRequirements,
+    GetInstanceTypesFromInstanceRequirementsResponse (GetInstanceTypesFromInstanceRequirementsResponse'),
+    newGetInstanceTypesFromInstanceRequirementsResponse,
+
+    -- ** GetInstanceUefiData
+    GetInstanceUefiData (GetInstanceUefiData'),
+    newGetInstanceUefiData,
+    GetInstanceUefiDataResponse (GetInstanceUefiDataResponse'),
+    newGetInstanceUefiDataResponse,
+
+    -- ** GetIpamAddressHistory (Paginated)
+    GetIpamAddressHistory (GetIpamAddressHistory'),
+    newGetIpamAddressHistory,
+    GetIpamAddressHistoryResponse (GetIpamAddressHistoryResponse'),
+    newGetIpamAddressHistoryResponse,
+
+    -- ** GetIpamPoolAllocations (Paginated)
+    GetIpamPoolAllocations (GetIpamPoolAllocations'),
+    newGetIpamPoolAllocations,
+    GetIpamPoolAllocationsResponse (GetIpamPoolAllocationsResponse'),
+    newGetIpamPoolAllocationsResponse,
+
+    -- ** GetIpamPoolCidrs (Paginated)
+    GetIpamPoolCidrs (GetIpamPoolCidrs'),
+    newGetIpamPoolCidrs,
+    GetIpamPoolCidrsResponse (GetIpamPoolCidrsResponse'),
+    newGetIpamPoolCidrsResponse,
+
+    -- ** GetIpamResourceCidrs (Paginated)
+    GetIpamResourceCidrs (GetIpamResourceCidrs'),
+    newGetIpamResourceCidrs,
+    GetIpamResourceCidrsResponse (GetIpamResourceCidrsResponse'),
+    newGetIpamResourceCidrsResponse,
+
+    -- ** GetLaunchTemplateData
+    GetLaunchTemplateData (GetLaunchTemplateData'),
+    newGetLaunchTemplateData,
+    GetLaunchTemplateDataResponse (GetLaunchTemplateDataResponse'),
+    newGetLaunchTemplateDataResponse,
+
+    -- ** GetManagedPrefixListAssociations (Paginated)
+    GetManagedPrefixListAssociations (GetManagedPrefixListAssociations'),
+    newGetManagedPrefixListAssociations,
+    GetManagedPrefixListAssociationsResponse (GetManagedPrefixListAssociationsResponse'),
+    newGetManagedPrefixListAssociationsResponse,
+
+    -- ** GetManagedPrefixListEntries (Paginated)
+    GetManagedPrefixListEntries (GetManagedPrefixListEntries'),
+    newGetManagedPrefixListEntries,
+    GetManagedPrefixListEntriesResponse (GetManagedPrefixListEntriesResponse'),
+    newGetManagedPrefixListEntriesResponse,
+
+    -- ** GetNetworkInsightsAccessScopeAnalysisFindings
+    GetNetworkInsightsAccessScopeAnalysisFindings (GetNetworkInsightsAccessScopeAnalysisFindings'),
+    newGetNetworkInsightsAccessScopeAnalysisFindings,
+    GetNetworkInsightsAccessScopeAnalysisFindingsResponse (GetNetworkInsightsAccessScopeAnalysisFindingsResponse'),
+    newGetNetworkInsightsAccessScopeAnalysisFindingsResponse,
+
+    -- ** GetNetworkInsightsAccessScopeContent
+    GetNetworkInsightsAccessScopeContent (GetNetworkInsightsAccessScopeContent'),
+    newGetNetworkInsightsAccessScopeContent,
+    GetNetworkInsightsAccessScopeContentResponse (GetNetworkInsightsAccessScopeContentResponse'),
+    newGetNetworkInsightsAccessScopeContentResponse,
+
+    -- ** GetPasswordData
+    GetPasswordData (GetPasswordData'),
+    newGetPasswordData,
+    GetPasswordDataResponse (GetPasswordDataResponse'),
+    newGetPasswordDataResponse,
+
+    -- ** GetReservedInstancesExchangeQuote
+    GetReservedInstancesExchangeQuote (GetReservedInstancesExchangeQuote'),
+    newGetReservedInstancesExchangeQuote,
+    GetReservedInstancesExchangeQuoteResponse (GetReservedInstancesExchangeQuoteResponse'),
+    newGetReservedInstancesExchangeQuoteResponse,
+
+    -- ** GetSerialConsoleAccessStatus
+    GetSerialConsoleAccessStatus (GetSerialConsoleAccessStatus'),
+    newGetSerialConsoleAccessStatus,
+    GetSerialConsoleAccessStatusResponse (GetSerialConsoleAccessStatusResponse'),
+    newGetSerialConsoleAccessStatusResponse,
+
+    -- ** GetSpotPlacementScores (Paginated)
+    GetSpotPlacementScores (GetSpotPlacementScores'),
+    newGetSpotPlacementScores,
+    GetSpotPlacementScoresResponse (GetSpotPlacementScoresResponse'),
+    newGetSpotPlacementScoresResponse,
+
+    -- ** GetSubnetCidrReservations
+    GetSubnetCidrReservations (GetSubnetCidrReservations'),
+    newGetSubnetCidrReservations,
+    GetSubnetCidrReservationsResponse (GetSubnetCidrReservationsResponse'),
+    newGetSubnetCidrReservationsResponse,
+
+    -- ** GetTransitGatewayAttachmentPropagations (Paginated)
+    GetTransitGatewayAttachmentPropagations (GetTransitGatewayAttachmentPropagations'),
+    newGetTransitGatewayAttachmentPropagations,
+    GetTransitGatewayAttachmentPropagationsResponse (GetTransitGatewayAttachmentPropagationsResponse'),
+    newGetTransitGatewayAttachmentPropagationsResponse,
+
+    -- ** GetTransitGatewayMulticastDomainAssociations (Paginated)
+    GetTransitGatewayMulticastDomainAssociations (GetTransitGatewayMulticastDomainAssociations'),
+    newGetTransitGatewayMulticastDomainAssociations,
+    GetTransitGatewayMulticastDomainAssociationsResponse (GetTransitGatewayMulticastDomainAssociationsResponse'),
+    newGetTransitGatewayMulticastDomainAssociationsResponse,
+
+    -- ** GetTransitGatewayPolicyTableAssociations (Paginated)
+    GetTransitGatewayPolicyTableAssociations (GetTransitGatewayPolicyTableAssociations'),
+    newGetTransitGatewayPolicyTableAssociations,
+    GetTransitGatewayPolicyTableAssociationsResponse (GetTransitGatewayPolicyTableAssociationsResponse'),
+    newGetTransitGatewayPolicyTableAssociationsResponse,
+
+    -- ** GetTransitGatewayPolicyTableEntries
+    GetTransitGatewayPolicyTableEntries (GetTransitGatewayPolicyTableEntries'),
+    newGetTransitGatewayPolicyTableEntries,
+    GetTransitGatewayPolicyTableEntriesResponse (GetTransitGatewayPolicyTableEntriesResponse'),
+    newGetTransitGatewayPolicyTableEntriesResponse,
+
+    -- ** GetTransitGatewayPrefixListReferences (Paginated)
+    GetTransitGatewayPrefixListReferences (GetTransitGatewayPrefixListReferences'),
+    newGetTransitGatewayPrefixListReferences,
+    GetTransitGatewayPrefixListReferencesResponse (GetTransitGatewayPrefixListReferencesResponse'),
+    newGetTransitGatewayPrefixListReferencesResponse,
+
+    -- ** GetTransitGatewayRouteTableAssociations (Paginated)
+    GetTransitGatewayRouteTableAssociations (GetTransitGatewayRouteTableAssociations'),
+    newGetTransitGatewayRouteTableAssociations,
+    GetTransitGatewayRouteTableAssociationsResponse (GetTransitGatewayRouteTableAssociationsResponse'),
+    newGetTransitGatewayRouteTableAssociationsResponse,
+
+    -- ** GetTransitGatewayRouteTablePropagations (Paginated)
+    GetTransitGatewayRouteTablePropagations (GetTransitGatewayRouteTablePropagations'),
+    newGetTransitGatewayRouteTablePropagations,
+    GetTransitGatewayRouteTablePropagationsResponse (GetTransitGatewayRouteTablePropagationsResponse'),
+    newGetTransitGatewayRouteTablePropagationsResponse,
+
+    -- ** GetVerifiedAccessEndpointPolicy
+    GetVerifiedAccessEndpointPolicy (GetVerifiedAccessEndpointPolicy'),
+    newGetVerifiedAccessEndpointPolicy,
+    GetVerifiedAccessEndpointPolicyResponse (GetVerifiedAccessEndpointPolicyResponse'),
+    newGetVerifiedAccessEndpointPolicyResponse,
+
+    -- ** GetVerifiedAccessGroupPolicy
+    GetVerifiedAccessGroupPolicy (GetVerifiedAccessGroupPolicy'),
+    newGetVerifiedAccessGroupPolicy,
+    GetVerifiedAccessGroupPolicyResponse (GetVerifiedAccessGroupPolicyResponse'),
+    newGetVerifiedAccessGroupPolicyResponse,
+
+    -- ** GetVpnConnectionDeviceSampleConfiguration
+    GetVpnConnectionDeviceSampleConfiguration (GetVpnConnectionDeviceSampleConfiguration'),
+    newGetVpnConnectionDeviceSampleConfiguration,
+    GetVpnConnectionDeviceSampleConfigurationResponse (GetVpnConnectionDeviceSampleConfigurationResponse'),
+    newGetVpnConnectionDeviceSampleConfigurationResponse,
+
+    -- ** GetVpnConnectionDeviceTypes (Paginated)
+    GetVpnConnectionDeviceTypes (GetVpnConnectionDeviceTypes'),
+    newGetVpnConnectionDeviceTypes,
+    GetVpnConnectionDeviceTypesResponse (GetVpnConnectionDeviceTypesResponse'),
+    newGetVpnConnectionDeviceTypesResponse,
+
+    -- ** ImportClientVpnClientCertificateRevocationList
+    ImportClientVpnClientCertificateRevocationList (ImportClientVpnClientCertificateRevocationList'),
+    newImportClientVpnClientCertificateRevocationList,
+    ImportClientVpnClientCertificateRevocationListResponse (ImportClientVpnClientCertificateRevocationListResponse'),
+    newImportClientVpnClientCertificateRevocationListResponse,
+
+    -- ** ImportImage
+    ImportImage (ImportImage'),
+    newImportImage,
+    ImportImageResponse (ImportImageResponse'),
+    newImportImageResponse,
+
+    -- ** ImportInstance
+    ImportInstance (ImportInstance'),
+    newImportInstance,
+    ImportInstanceResponse (ImportInstanceResponse'),
+    newImportInstanceResponse,
+
+    -- ** ImportKeyPair
+    ImportKeyPair (ImportKeyPair'),
+    newImportKeyPair,
+    ImportKeyPairResponse (ImportKeyPairResponse'),
+    newImportKeyPairResponse,
+
+    -- ** ImportSnapshot
+    ImportSnapshot (ImportSnapshot'),
+    newImportSnapshot,
+    ImportSnapshotResponse (ImportSnapshotResponse'),
+    newImportSnapshotResponse,
+
+    -- ** ImportVolume
+    ImportVolume (ImportVolume'),
+    newImportVolume,
+    ImportVolumeResponse (ImportVolumeResponse'),
+    newImportVolumeResponse,
+
+    -- ** ListImagesInRecycleBin (Paginated)
+    ListImagesInRecycleBin (ListImagesInRecycleBin'),
+    newListImagesInRecycleBin,
+    ListImagesInRecycleBinResponse (ListImagesInRecycleBinResponse'),
+    newListImagesInRecycleBinResponse,
+
+    -- ** ListSnapshotsInRecycleBin (Paginated)
+    ListSnapshotsInRecycleBin (ListSnapshotsInRecycleBin'),
+    newListSnapshotsInRecycleBin,
+    ListSnapshotsInRecycleBinResponse (ListSnapshotsInRecycleBinResponse'),
+    newListSnapshotsInRecycleBinResponse,
+
+    -- ** ModifyAddressAttribute
+    ModifyAddressAttribute (ModifyAddressAttribute'),
+    newModifyAddressAttribute,
+    ModifyAddressAttributeResponse (ModifyAddressAttributeResponse'),
+    newModifyAddressAttributeResponse,
+
+    -- ** ModifyAvailabilityZoneGroup
+    ModifyAvailabilityZoneGroup (ModifyAvailabilityZoneGroup'),
+    newModifyAvailabilityZoneGroup,
+    ModifyAvailabilityZoneGroupResponse (ModifyAvailabilityZoneGroupResponse'),
+    newModifyAvailabilityZoneGroupResponse,
+
+    -- ** ModifyCapacityReservation
+    ModifyCapacityReservation (ModifyCapacityReservation'),
+    newModifyCapacityReservation,
+    ModifyCapacityReservationResponse (ModifyCapacityReservationResponse'),
+    newModifyCapacityReservationResponse,
+
+    -- ** ModifyCapacityReservationFleet
+    ModifyCapacityReservationFleet (ModifyCapacityReservationFleet'),
+    newModifyCapacityReservationFleet,
+    ModifyCapacityReservationFleetResponse (ModifyCapacityReservationFleetResponse'),
+    newModifyCapacityReservationFleetResponse,
+
+    -- ** ModifyClientVpnEndpoint
+    ModifyClientVpnEndpoint (ModifyClientVpnEndpoint'),
+    newModifyClientVpnEndpoint,
+    ModifyClientVpnEndpointResponse (ModifyClientVpnEndpointResponse'),
+    newModifyClientVpnEndpointResponse,
+
+    -- ** ModifyDefaultCreditSpecification
+    ModifyDefaultCreditSpecification (ModifyDefaultCreditSpecification'),
+    newModifyDefaultCreditSpecification,
+    ModifyDefaultCreditSpecificationResponse (ModifyDefaultCreditSpecificationResponse'),
+    newModifyDefaultCreditSpecificationResponse,
+
+    -- ** ModifyEbsDefaultKmsKeyId
+    ModifyEbsDefaultKmsKeyId (ModifyEbsDefaultKmsKeyId'),
+    newModifyEbsDefaultKmsKeyId,
+    ModifyEbsDefaultKmsKeyIdResponse (ModifyEbsDefaultKmsKeyIdResponse'),
+    newModifyEbsDefaultKmsKeyIdResponse,
+
+    -- ** ModifyFleet
+    ModifyFleet (ModifyFleet'),
+    newModifyFleet,
+    ModifyFleetResponse (ModifyFleetResponse'),
+    newModifyFleetResponse,
+
+    -- ** ModifyFpgaImageAttribute
+    ModifyFpgaImageAttribute (ModifyFpgaImageAttribute'),
+    newModifyFpgaImageAttribute,
+    ModifyFpgaImageAttributeResponse (ModifyFpgaImageAttributeResponse'),
+    newModifyFpgaImageAttributeResponse,
+
+    -- ** ModifyHosts
+    ModifyHosts (ModifyHosts'),
+    newModifyHosts,
+    ModifyHostsResponse (ModifyHostsResponse'),
+    newModifyHostsResponse,
+
+    -- ** ModifyIdFormat
+    ModifyIdFormat (ModifyIdFormat'),
+    newModifyIdFormat,
+    ModifyIdFormatResponse (ModifyIdFormatResponse'),
+    newModifyIdFormatResponse,
+
+    -- ** ModifyIdentityIdFormat
+    ModifyIdentityIdFormat (ModifyIdentityIdFormat'),
+    newModifyIdentityIdFormat,
+    ModifyIdentityIdFormatResponse (ModifyIdentityIdFormatResponse'),
+    newModifyIdentityIdFormatResponse,
+
+    -- ** ModifyImageAttribute
+    ModifyImageAttribute (ModifyImageAttribute'),
+    newModifyImageAttribute,
+    ModifyImageAttributeResponse (ModifyImageAttributeResponse'),
+    newModifyImageAttributeResponse,
+
+    -- ** ModifyInstanceAttribute
+    ModifyInstanceAttribute (ModifyInstanceAttribute'),
+    newModifyInstanceAttribute,
+    ModifyInstanceAttributeResponse (ModifyInstanceAttributeResponse'),
+    newModifyInstanceAttributeResponse,
+
+    -- ** ModifyInstanceCapacityReservationAttributes
+    ModifyInstanceCapacityReservationAttributes (ModifyInstanceCapacityReservationAttributes'),
+    newModifyInstanceCapacityReservationAttributes,
+    ModifyInstanceCapacityReservationAttributesResponse (ModifyInstanceCapacityReservationAttributesResponse'),
+    newModifyInstanceCapacityReservationAttributesResponse,
+
+    -- ** ModifyInstanceCreditSpecification
+    ModifyInstanceCreditSpecification (ModifyInstanceCreditSpecification'),
+    newModifyInstanceCreditSpecification,
+    ModifyInstanceCreditSpecificationResponse (ModifyInstanceCreditSpecificationResponse'),
+    newModifyInstanceCreditSpecificationResponse,
+
+    -- ** ModifyInstanceEventStartTime
+    ModifyInstanceEventStartTime (ModifyInstanceEventStartTime'),
+    newModifyInstanceEventStartTime,
+    ModifyInstanceEventStartTimeResponse (ModifyInstanceEventStartTimeResponse'),
+    newModifyInstanceEventStartTimeResponse,
+
+    -- ** ModifyInstanceEventWindow
+    ModifyInstanceEventWindow (ModifyInstanceEventWindow'),
+    newModifyInstanceEventWindow,
+    ModifyInstanceEventWindowResponse (ModifyInstanceEventWindowResponse'),
+    newModifyInstanceEventWindowResponse,
+
+    -- ** ModifyInstanceMaintenanceOptions
+    ModifyInstanceMaintenanceOptions (ModifyInstanceMaintenanceOptions'),
+    newModifyInstanceMaintenanceOptions,
+    ModifyInstanceMaintenanceOptionsResponse (ModifyInstanceMaintenanceOptionsResponse'),
+    newModifyInstanceMaintenanceOptionsResponse,
+
+    -- ** ModifyInstanceMetadataOptions
+    ModifyInstanceMetadataOptions (ModifyInstanceMetadataOptions'),
+    newModifyInstanceMetadataOptions,
+    ModifyInstanceMetadataOptionsResponse (ModifyInstanceMetadataOptionsResponse'),
+    newModifyInstanceMetadataOptionsResponse,
+
+    -- ** ModifyInstancePlacement
+    ModifyInstancePlacement (ModifyInstancePlacement'),
+    newModifyInstancePlacement,
+    ModifyInstancePlacementResponse (ModifyInstancePlacementResponse'),
+    newModifyInstancePlacementResponse,
+
+    -- ** ModifyIpam
+    ModifyIpam (ModifyIpam'),
+    newModifyIpam,
+    ModifyIpamResponse (ModifyIpamResponse'),
+    newModifyIpamResponse,
+
+    -- ** ModifyIpamPool
+    ModifyIpamPool (ModifyIpamPool'),
+    newModifyIpamPool,
+    ModifyIpamPoolResponse (ModifyIpamPoolResponse'),
+    newModifyIpamPoolResponse,
+
+    -- ** ModifyIpamResourceCidr
+    ModifyIpamResourceCidr (ModifyIpamResourceCidr'),
+    newModifyIpamResourceCidr,
+    ModifyIpamResourceCidrResponse (ModifyIpamResourceCidrResponse'),
+    newModifyIpamResourceCidrResponse,
+
+    -- ** ModifyIpamScope
+    ModifyIpamScope (ModifyIpamScope'),
+    newModifyIpamScope,
+    ModifyIpamScopeResponse (ModifyIpamScopeResponse'),
+    newModifyIpamScopeResponse,
+
+    -- ** ModifyLaunchTemplate
+    ModifyLaunchTemplate (ModifyLaunchTemplate'),
+    newModifyLaunchTemplate,
+    ModifyLaunchTemplateResponse (ModifyLaunchTemplateResponse'),
+    newModifyLaunchTemplateResponse,
+
+    -- ** ModifyLocalGatewayRoute
+    ModifyLocalGatewayRoute (ModifyLocalGatewayRoute'),
+    newModifyLocalGatewayRoute,
+    ModifyLocalGatewayRouteResponse (ModifyLocalGatewayRouteResponse'),
+    newModifyLocalGatewayRouteResponse,
+
+    -- ** ModifyManagedPrefixList
+    ModifyManagedPrefixList (ModifyManagedPrefixList'),
+    newModifyManagedPrefixList,
+    ModifyManagedPrefixListResponse (ModifyManagedPrefixListResponse'),
+    newModifyManagedPrefixListResponse,
+
+    -- ** ModifyNetworkInterfaceAttribute
+    ModifyNetworkInterfaceAttribute (ModifyNetworkInterfaceAttribute'),
+    newModifyNetworkInterfaceAttribute,
+    ModifyNetworkInterfaceAttributeResponse (ModifyNetworkInterfaceAttributeResponse'),
+    newModifyNetworkInterfaceAttributeResponse,
+
+    -- ** ModifyPrivateDnsNameOptions
+    ModifyPrivateDnsNameOptions (ModifyPrivateDnsNameOptions'),
+    newModifyPrivateDnsNameOptions,
+    ModifyPrivateDnsNameOptionsResponse (ModifyPrivateDnsNameOptionsResponse'),
+    newModifyPrivateDnsNameOptionsResponse,
+
+    -- ** ModifyReservedInstances
+    ModifyReservedInstances (ModifyReservedInstances'),
+    newModifyReservedInstances,
+    ModifyReservedInstancesResponse (ModifyReservedInstancesResponse'),
+    newModifyReservedInstancesResponse,
+
+    -- ** ModifySecurityGroupRules
+    ModifySecurityGroupRules (ModifySecurityGroupRules'),
+    newModifySecurityGroupRules,
+    ModifySecurityGroupRulesResponse (ModifySecurityGroupRulesResponse'),
+    newModifySecurityGroupRulesResponse,
+
+    -- ** ModifySnapshotAttribute
+    ModifySnapshotAttribute (ModifySnapshotAttribute'),
+    newModifySnapshotAttribute,
+    ModifySnapshotAttributeResponse (ModifySnapshotAttributeResponse'),
+    newModifySnapshotAttributeResponse,
+
+    -- ** ModifySnapshotTier
+    ModifySnapshotTier (ModifySnapshotTier'),
+    newModifySnapshotTier,
+    ModifySnapshotTierResponse (ModifySnapshotTierResponse'),
+    newModifySnapshotTierResponse,
+
+    -- ** ModifySpotFleetRequest
+    ModifySpotFleetRequest (ModifySpotFleetRequest'),
+    newModifySpotFleetRequest,
+    ModifySpotFleetRequestResponse (ModifySpotFleetRequestResponse'),
+    newModifySpotFleetRequestResponse,
+
+    -- ** ModifySubnetAttribute
+    ModifySubnetAttribute (ModifySubnetAttribute'),
+    newModifySubnetAttribute,
+    ModifySubnetAttributeResponse (ModifySubnetAttributeResponse'),
+    newModifySubnetAttributeResponse,
+
+    -- ** ModifyTrafficMirrorFilterNetworkServices
+    ModifyTrafficMirrorFilterNetworkServices (ModifyTrafficMirrorFilterNetworkServices'),
+    newModifyTrafficMirrorFilterNetworkServices,
+    ModifyTrafficMirrorFilterNetworkServicesResponse (ModifyTrafficMirrorFilterNetworkServicesResponse'),
+    newModifyTrafficMirrorFilterNetworkServicesResponse,
+
+    -- ** ModifyTrafficMirrorFilterRule
+    ModifyTrafficMirrorFilterRule (ModifyTrafficMirrorFilterRule'),
+    newModifyTrafficMirrorFilterRule,
+    ModifyTrafficMirrorFilterRuleResponse (ModifyTrafficMirrorFilterRuleResponse'),
+    newModifyTrafficMirrorFilterRuleResponse,
+
+    -- ** ModifyTrafficMirrorSession
+    ModifyTrafficMirrorSession (ModifyTrafficMirrorSession'),
+    newModifyTrafficMirrorSession,
+    ModifyTrafficMirrorSessionResponse (ModifyTrafficMirrorSessionResponse'),
+    newModifyTrafficMirrorSessionResponse,
+
+    -- ** ModifyTransitGateway
+    ModifyTransitGateway (ModifyTransitGateway'),
+    newModifyTransitGateway,
+    ModifyTransitGatewayResponse (ModifyTransitGatewayResponse'),
+    newModifyTransitGatewayResponse,
+
+    -- ** ModifyTransitGatewayPrefixListReference
+    ModifyTransitGatewayPrefixListReference (ModifyTransitGatewayPrefixListReference'),
+    newModifyTransitGatewayPrefixListReference,
+    ModifyTransitGatewayPrefixListReferenceResponse (ModifyTransitGatewayPrefixListReferenceResponse'),
+    newModifyTransitGatewayPrefixListReferenceResponse,
+
+    -- ** ModifyTransitGatewayVpcAttachment
+    ModifyTransitGatewayVpcAttachment (ModifyTransitGatewayVpcAttachment'),
+    newModifyTransitGatewayVpcAttachment,
+    ModifyTransitGatewayVpcAttachmentResponse (ModifyTransitGatewayVpcAttachmentResponse'),
+    newModifyTransitGatewayVpcAttachmentResponse,
+
+    -- ** ModifyVerifiedAccessEndpoint
+    ModifyVerifiedAccessEndpoint (ModifyVerifiedAccessEndpoint'),
+    newModifyVerifiedAccessEndpoint,
+    ModifyVerifiedAccessEndpointResponse (ModifyVerifiedAccessEndpointResponse'),
+    newModifyVerifiedAccessEndpointResponse,
+
+    -- ** ModifyVerifiedAccessEndpointPolicy
+    ModifyVerifiedAccessEndpointPolicy (ModifyVerifiedAccessEndpointPolicy'),
+    newModifyVerifiedAccessEndpointPolicy,
+    ModifyVerifiedAccessEndpointPolicyResponse (ModifyVerifiedAccessEndpointPolicyResponse'),
+    newModifyVerifiedAccessEndpointPolicyResponse,
+
+    -- ** ModifyVerifiedAccessGroup
+    ModifyVerifiedAccessGroup (ModifyVerifiedAccessGroup'),
+    newModifyVerifiedAccessGroup,
+    ModifyVerifiedAccessGroupResponse (ModifyVerifiedAccessGroupResponse'),
+    newModifyVerifiedAccessGroupResponse,
+
+    -- ** ModifyVerifiedAccessGroupPolicy
+    ModifyVerifiedAccessGroupPolicy (ModifyVerifiedAccessGroupPolicy'),
+    newModifyVerifiedAccessGroupPolicy,
+    ModifyVerifiedAccessGroupPolicyResponse (ModifyVerifiedAccessGroupPolicyResponse'),
+    newModifyVerifiedAccessGroupPolicyResponse,
+
+    -- ** ModifyVerifiedAccessInstance
+    ModifyVerifiedAccessInstance (ModifyVerifiedAccessInstance'),
+    newModifyVerifiedAccessInstance,
+    ModifyVerifiedAccessInstanceResponse (ModifyVerifiedAccessInstanceResponse'),
+    newModifyVerifiedAccessInstanceResponse,
+
+    -- ** ModifyVerifiedAccessInstanceLoggingConfiguration
+    ModifyVerifiedAccessInstanceLoggingConfiguration (ModifyVerifiedAccessInstanceLoggingConfiguration'),
+    newModifyVerifiedAccessInstanceLoggingConfiguration,
+    ModifyVerifiedAccessInstanceLoggingConfigurationResponse (ModifyVerifiedAccessInstanceLoggingConfigurationResponse'),
+    newModifyVerifiedAccessInstanceLoggingConfigurationResponse,
+
+    -- ** ModifyVerifiedAccessTrustProvider
+    ModifyVerifiedAccessTrustProvider (ModifyVerifiedAccessTrustProvider'),
+    newModifyVerifiedAccessTrustProvider,
+    ModifyVerifiedAccessTrustProviderResponse (ModifyVerifiedAccessTrustProviderResponse'),
+    newModifyVerifiedAccessTrustProviderResponse,
+
+    -- ** ModifyVolume
+    ModifyVolume (ModifyVolume'),
+    newModifyVolume,
+    ModifyVolumeResponse (ModifyVolumeResponse'),
+    newModifyVolumeResponse,
+
+    -- ** ModifyVolumeAttribute
+    ModifyVolumeAttribute (ModifyVolumeAttribute'),
+    newModifyVolumeAttribute,
+    ModifyVolumeAttributeResponse (ModifyVolumeAttributeResponse'),
+    newModifyVolumeAttributeResponse,
+
+    -- ** ModifyVpcAttribute
+    ModifyVpcAttribute (ModifyVpcAttribute'),
+    newModifyVpcAttribute,
+    ModifyVpcAttributeResponse (ModifyVpcAttributeResponse'),
+    newModifyVpcAttributeResponse,
+
+    -- ** ModifyVpcEndpoint
+    ModifyVpcEndpoint (ModifyVpcEndpoint'),
+    newModifyVpcEndpoint,
+    ModifyVpcEndpointResponse (ModifyVpcEndpointResponse'),
+    newModifyVpcEndpointResponse,
+
+    -- ** ModifyVpcEndpointConnectionNotification
+    ModifyVpcEndpointConnectionNotification (ModifyVpcEndpointConnectionNotification'),
+    newModifyVpcEndpointConnectionNotification,
+    ModifyVpcEndpointConnectionNotificationResponse (ModifyVpcEndpointConnectionNotificationResponse'),
+    newModifyVpcEndpointConnectionNotificationResponse,
+
+    -- ** ModifyVpcEndpointServiceConfiguration
+    ModifyVpcEndpointServiceConfiguration (ModifyVpcEndpointServiceConfiguration'),
+    newModifyVpcEndpointServiceConfiguration,
+    ModifyVpcEndpointServiceConfigurationResponse (ModifyVpcEndpointServiceConfigurationResponse'),
+    newModifyVpcEndpointServiceConfigurationResponse,
+
+    -- ** ModifyVpcEndpointServicePayerResponsibility
+    ModifyVpcEndpointServicePayerResponsibility (ModifyVpcEndpointServicePayerResponsibility'),
+    newModifyVpcEndpointServicePayerResponsibility,
+    ModifyVpcEndpointServicePayerResponsibilityResponse (ModifyVpcEndpointServicePayerResponsibilityResponse'),
+    newModifyVpcEndpointServicePayerResponsibilityResponse,
+
+    -- ** ModifyVpcEndpointServicePermissions
+    ModifyVpcEndpointServicePermissions (ModifyVpcEndpointServicePermissions'),
+    newModifyVpcEndpointServicePermissions,
+    ModifyVpcEndpointServicePermissionsResponse (ModifyVpcEndpointServicePermissionsResponse'),
+    newModifyVpcEndpointServicePermissionsResponse,
+
+    -- ** ModifyVpcPeeringConnectionOptions
+    ModifyVpcPeeringConnectionOptions (ModifyVpcPeeringConnectionOptions'),
+    newModifyVpcPeeringConnectionOptions,
+    ModifyVpcPeeringConnectionOptionsResponse (ModifyVpcPeeringConnectionOptionsResponse'),
+    newModifyVpcPeeringConnectionOptionsResponse,
+
+    -- ** ModifyVpcTenancy
+    ModifyVpcTenancy (ModifyVpcTenancy'),
+    newModifyVpcTenancy,
+    ModifyVpcTenancyResponse (ModifyVpcTenancyResponse'),
+    newModifyVpcTenancyResponse,
+
+    -- ** ModifyVpnConnection
+    ModifyVpnConnection (ModifyVpnConnection'),
+    newModifyVpnConnection,
+    ModifyVpnConnectionResponse (ModifyVpnConnectionResponse'),
+    newModifyVpnConnectionResponse,
+
+    -- ** ModifyVpnConnectionOptions
+    ModifyVpnConnectionOptions (ModifyVpnConnectionOptions'),
+    newModifyVpnConnectionOptions,
+    ModifyVpnConnectionOptionsResponse (ModifyVpnConnectionOptionsResponse'),
+    newModifyVpnConnectionOptionsResponse,
+
+    -- ** ModifyVpnTunnelCertificate
+    ModifyVpnTunnelCertificate (ModifyVpnTunnelCertificate'),
+    newModifyVpnTunnelCertificate,
+    ModifyVpnTunnelCertificateResponse (ModifyVpnTunnelCertificateResponse'),
+    newModifyVpnTunnelCertificateResponse,
+
+    -- ** ModifyVpnTunnelOptions
+    ModifyVpnTunnelOptions (ModifyVpnTunnelOptions'),
+    newModifyVpnTunnelOptions,
+    ModifyVpnTunnelOptionsResponse (ModifyVpnTunnelOptionsResponse'),
+    newModifyVpnTunnelOptionsResponse,
+
+    -- ** MonitorInstances
+    MonitorInstances (MonitorInstances'),
+    newMonitorInstances,
+    MonitorInstancesResponse (MonitorInstancesResponse'),
+    newMonitorInstancesResponse,
+
+    -- ** MoveAddressToVpc
+    MoveAddressToVpc (MoveAddressToVpc'),
+    newMoveAddressToVpc,
+    MoveAddressToVpcResponse (MoveAddressToVpcResponse'),
+    newMoveAddressToVpcResponse,
+
+    -- ** MoveByoipCidrToIpam
+    MoveByoipCidrToIpam (MoveByoipCidrToIpam'),
+    newMoveByoipCidrToIpam,
+    MoveByoipCidrToIpamResponse (MoveByoipCidrToIpamResponse'),
+    newMoveByoipCidrToIpamResponse,
+
+    -- ** ProvisionByoipCidr
+    ProvisionByoipCidr (ProvisionByoipCidr'),
+    newProvisionByoipCidr,
+    ProvisionByoipCidrResponse (ProvisionByoipCidrResponse'),
+    newProvisionByoipCidrResponse,
+
+    -- ** ProvisionIpamPoolCidr
+    ProvisionIpamPoolCidr (ProvisionIpamPoolCidr'),
+    newProvisionIpamPoolCidr,
+    ProvisionIpamPoolCidrResponse (ProvisionIpamPoolCidrResponse'),
+    newProvisionIpamPoolCidrResponse,
+
+    -- ** ProvisionPublicIpv4PoolCidr
+    ProvisionPublicIpv4PoolCidr (ProvisionPublicIpv4PoolCidr'),
+    newProvisionPublicIpv4PoolCidr,
+    ProvisionPublicIpv4PoolCidrResponse (ProvisionPublicIpv4PoolCidrResponse'),
+    newProvisionPublicIpv4PoolCidrResponse,
+
+    -- ** PurchaseHostReservation
+    PurchaseHostReservation (PurchaseHostReservation'),
+    newPurchaseHostReservation,
+    PurchaseHostReservationResponse (PurchaseHostReservationResponse'),
+    newPurchaseHostReservationResponse,
+
+    -- ** PurchaseReservedInstancesOffering
+    PurchaseReservedInstancesOffering (PurchaseReservedInstancesOffering'),
+    newPurchaseReservedInstancesOffering,
+    PurchaseReservedInstancesOfferingResponse (PurchaseReservedInstancesOfferingResponse'),
+    newPurchaseReservedInstancesOfferingResponse,
+
+    -- ** PurchaseScheduledInstances
+    PurchaseScheduledInstances (PurchaseScheduledInstances'),
+    newPurchaseScheduledInstances,
+    PurchaseScheduledInstancesResponse (PurchaseScheduledInstancesResponse'),
+    newPurchaseScheduledInstancesResponse,
+
+    -- ** RebootInstances
+    RebootInstances (RebootInstances'),
+    newRebootInstances,
+    RebootInstancesResponse (RebootInstancesResponse'),
+    newRebootInstancesResponse,
+
+    -- ** RegisterImage
+    RegisterImage (RegisterImage'),
+    newRegisterImage,
+    RegisterImageResponse (RegisterImageResponse'),
+    newRegisterImageResponse,
+
+    -- ** RegisterInstanceEventNotificationAttributes
+    RegisterInstanceEventNotificationAttributes (RegisterInstanceEventNotificationAttributes'),
+    newRegisterInstanceEventNotificationAttributes,
+    RegisterInstanceEventNotificationAttributesResponse (RegisterInstanceEventNotificationAttributesResponse'),
+    newRegisterInstanceEventNotificationAttributesResponse,
+
+    -- ** RegisterTransitGatewayMulticastGroupMembers
+    RegisterTransitGatewayMulticastGroupMembers (RegisterTransitGatewayMulticastGroupMembers'),
+    newRegisterTransitGatewayMulticastGroupMembers,
+    RegisterTransitGatewayMulticastGroupMembersResponse (RegisterTransitGatewayMulticastGroupMembersResponse'),
+    newRegisterTransitGatewayMulticastGroupMembersResponse,
+
+    -- ** RegisterTransitGatewayMulticastGroupSources
+    RegisterTransitGatewayMulticastGroupSources (RegisterTransitGatewayMulticastGroupSources'),
+    newRegisterTransitGatewayMulticastGroupSources,
+    RegisterTransitGatewayMulticastGroupSourcesResponse (RegisterTransitGatewayMulticastGroupSourcesResponse'),
+    newRegisterTransitGatewayMulticastGroupSourcesResponse,
+
+    -- ** RejectTransitGatewayMulticastDomainAssociations
+    RejectTransitGatewayMulticastDomainAssociations (RejectTransitGatewayMulticastDomainAssociations'),
+    newRejectTransitGatewayMulticastDomainAssociations,
+    RejectTransitGatewayMulticastDomainAssociationsResponse (RejectTransitGatewayMulticastDomainAssociationsResponse'),
+    newRejectTransitGatewayMulticastDomainAssociationsResponse,
+
+    -- ** RejectTransitGatewayPeeringAttachment
+    RejectTransitGatewayPeeringAttachment (RejectTransitGatewayPeeringAttachment'),
+    newRejectTransitGatewayPeeringAttachment,
+    RejectTransitGatewayPeeringAttachmentResponse (RejectTransitGatewayPeeringAttachmentResponse'),
+    newRejectTransitGatewayPeeringAttachmentResponse,
+
+    -- ** RejectTransitGatewayVpcAttachment
+    RejectTransitGatewayVpcAttachment (RejectTransitGatewayVpcAttachment'),
+    newRejectTransitGatewayVpcAttachment,
+    RejectTransitGatewayVpcAttachmentResponse (RejectTransitGatewayVpcAttachmentResponse'),
+    newRejectTransitGatewayVpcAttachmentResponse,
+
+    -- ** RejectVpcEndpointConnections
+    RejectVpcEndpointConnections (RejectVpcEndpointConnections'),
+    newRejectVpcEndpointConnections,
+    RejectVpcEndpointConnectionsResponse (RejectVpcEndpointConnectionsResponse'),
+    newRejectVpcEndpointConnectionsResponse,
+
+    -- ** RejectVpcPeeringConnection
+    RejectVpcPeeringConnection (RejectVpcPeeringConnection'),
+    newRejectVpcPeeringConnection,
+    RejectVpcPeeringConnectionResponse (RejectVpcPeeringConnectionResponse'),
+    newRejectVpcPeeringConnectionResponse,
+
+    -- ** ReleaseAddress
+    ReleaseAddress (ReleaseAddress'),
+    newReleaseAddress,
+    ReleaseAddressResponse (ReleaseAddressResponse'),
+    newReleaseAddressResponse,
+
+    -- ** ReleaseHosts
+    ReleaseHosts (ReleaseHosts'),
+    newReleaseHosts,
+    ReleaseHostsResponse (ReleaseHostsResponse'),
+    newReleaseHostsResponse,
+
+    -- ** ReleaseIpamPoolAllocation
+    ReleaseIpamPoolAllocation (ReleaseIpamPoolAllocation'),
+    newReleaseIpamPoolAllocation,
+    ReleaseIpamPoolAllocationResponse (ReleaseIpamPoolAllocationResponse'),
+    newReleaseIpamPoolAllocationResponse,
+
+    -- ** ReplaceIamInstanceProfileAssociation
+    ReplaceIamInstanceProfileAssociation (ReplaceIamInstanceProfileAssociation'),
+    newReplaceIamInstanceProfileAssociation,
+    ReplaceIamInstanceProfileAssociationResponse (ReplaceIamInstanceProfileAssociationResponse'),
+    newReplaceIamInstanceProfileAssociationResponse,
+
+    -- ** ReplaceNetworkAclAssociation
+    ReplaceNetworkAclAssociation (ReplaceNetworkAclAssociation'),
+    newReplaceNetworkAclAssociation,
+    ReplaceNetworkAclAssociationResponse (ReplaceNetworkAclAssociationResponse'),
+    newReplaceNetworkAclAssociationResponse,
+
+    -- ** ReplaceNetworkAclEntry
+    ReplaceNetworkAclEntry (ReplaceNetworkAclEntry'),
+    newReplaceNetworkAclEntry,
+    ReplaceNetworkAclEntryResponse (ReplaceNetworkAclEntryResponse'),
+    newReplaceNetworkAclEntryResponse,
+
+    -- ** ReplaceRoute
+    ReplaceRoute (ReplaceRoute'),
+    newReplaceRoute,
+    ReplaceRouteResponse (ReplaceRouteResponse'),
+    newReplaceRouteResponse,
+
+    -- ** ReplaceRouteTableAssociation
+    ReplaceRouteTableAssociation (ReplaceRouteTableAssociation'),
+    newReplaceRouteTableAssociation,
+    ReplaceRouteTableAssociationResponse (ReplaceRouteTableAssociationResponse'),
+    newReplaceRouteTableAssociationResponse,
+
+    -- ** ReplaceTransitGatewayRoute
+    ReplaceTransitGatewayRoute (ReplaceTransitGatewayRoute'),
+    newReplaceTransitGatewayRoute,
+    ReplaceTransitGatewayRouteResponse (ReplaceTransitGatewayRouteResponse'),
+    newReplaceTransitGatewayRouteResponse,
+
+    -- ** ReportInstanceStatus
+    ReportInstanceStatus (ReportInstanceStatus'),
+    newReportInstanceStatus,
+    ReportInstanceStatusResponse (ReportInstanceStatusResponse'),
+    newReportInstanceStatusResponse,
+
+    -- ** RequestSpotFleet
+    RequestSpotFleet (RequestSpotFleet'),
+    newRequestSpotFleet,
+    RequestSpotFleetResponse (RequestSpotFleetResponse'),
+    newRequestSpotFleetResponse,
+
+    -- ** RequestSpotInstances
+    RequestSpotInstances (RequestSpotInstances'),
+    newRequestSpotInstances,
+    RequestSpotInstancesResponse (RequestSpotInstancesResponse'),
+    newRequestSpotInstancesResponse,
+
+    -- ** ResetAddressAttribute
+    ResetAddressAttribute (ResetAddressAttribute'),
+    newResetAddressAttribute,
+    ResetAddressAttributeResponse (ResetAddressAttributeResponse'),
+    newResetAddressAttributeResponse,
+
+    -- ** ResetEbsDefaultKmsKeyId
+    ResetEbsDefaultKmsKeyId (ResetEbsDefaultKmsKeyId'),
+    newResetEbsDefaultKmsKeyId,
+    ResetEbsDefaultKmsKeyIdResponse (ResetEbsDefaultKmsKeyIdResponse'),
+    newResetEbsDefaultKmsKeyIdResponse,
+
+    -- ** ResetFpgaImageAttribute
+    ResetFpgaImageAttribute (ResetFpgaImageAttribute'),
+    newResetFpgaImageAttribute,
+    ResetFpgaImageAttributeResponse (ResetFpgaImageAttributeResponse'),
+    newResetFpgaImageAttributeResponse,
+
+    -- ** ResetImageAttribute
+    ResetImageAttribute (ResetImageAttribute'),
+    newResetImageAttribute,
+    ResetImageAttributeResponse (ResetImageAttributeResponse'),
+    newResetImageAttributeResponse,
+
+    -- ** ResetInstanceAttribute
+    ResetInstanceAttribute (ResetInstanceAttribute'),
+    newResetInstanceAttribute,
+    ResetInstanceAttributeResponse (ResetInstanceAttributeResponse'),
+    newResetInstanceAttributeResponse,
+
+    -- ** ResetNetworkInterfaceAttribute
+    ResetNetworkInterfaceAttribute (ResetNetworkInterfaceAttribute'),
+    newResetNetworkInterfaceAttribute,
+    ResetNetworkInterfaceAttributeResponse (ResetNetworkInterfaceAttributeResponse'),
+    newResetNetworkInterfaceAttributeResponse,
+
+    -- ** ResetSnapshotAttribute
+    ResetSnapshotAttribute (ResetSnapshotAttribute'),
+    newResetSnapshotAttribute,
+    ResetSnapshotAttributeResponse (ResetSnapshotAttributeResponse'),
+    newResetSnapshotAttributeResponse,
+
+    -- ** RestoreAddressToClassic
+    RestoreAddressToClassic (RestoreAddressToClassic'),
+    newRestoreAddressToClassic,
+    RestoreAddressToClassicResponse (RestoreAddressToClassicResponse'),
+    newRestoreAddressToClassicResponse,
+
+    -- ** RestoreImageFromRecycleBin
+    RestoreImageFromRecycleBin (RestoreImageFromRecycleBin'),
+    newRestoreImageFromRecycleBin,
+    RestoreImageFromRecycleBinResponse (RestoreImageFromRecycleBinResponse'),
+    newRestoreImageFromRecycleBinResponse,
+
+    -- ** RestoreManagedPrefixListVersion
+    RestoreManagedPrefixListVersion (RestoreManagedPrefixListVersion'),
+    newRestoreManagedPrefixListVersion,
+    RestoreManagedPrefixListVersionResponse (RestoreManagedPrefixListVersionResponse'),
+    newRestoreManagedPrefixListVersionResponse,
+
+    -- ** RestoreSnapshotFromRecycleBin
+    RestoreSnapshotFromRecycleBin (RestoreSnapshotFromRecycleBin'),
+    newRestoreSnapshotFromRecycleBin,
+    RestoreSnapshotFromRecycleBinResponse (RestoreSnapshotFromRecycleBinResponse'),
+    newRestoreSnapshotFromRecycleBinResponse,
+
+    -- ** RestoreSnapshotTier
+    RestoreSnapshotTier (RestoreSnapshotTier'),
+    newRestoreSnapshotTier,
+    RestoreSnapshotTierResponse (RestoreSnapshotTierResponse'),
+    newRestoreSnapshotTierResponse,
+
+    -- ** RevokeClientVpnIngress
+    RevokeClientVpnIngress (RevokeClientVpnIngress'),
+    newRevokeClientVpnIngress,
+    RevokeClientVpnIngressResponse (RevokeClientVpnIngressResponse'),
+    newRevokeClientVpnIngressResponse,
+
+    -- ** RevokeSecurityGroupEgress
+    RevokeSecurityGroupEgress (RevokeSecurityGroupEgress'),
+    newRevokeSecurityGroupEgress,
+    RevokeSecurityGroupEgressResponse (RevokeSecurityGroupEgressResponse'),
+    newRevokeSecurityGroupEgressResponse,
+
+    -- ** RevokeSecurityGroupIngress
+    RevokeSecurityGroupIngress (RevokeSecurityGroupIngress'),
+    newRevokeSecurityGroupIngress,
+    RevokeSecurityGroupIngressResponse (RevokeSecurityGroupIngressResponse'),
+    newRevokeSecurityGroupIngressResponse,
+
+    -- ** RunInstances
+    RunInstances (RunInstances'),
+    newRunInstances,
+    Reservation (Reservation'),
+    newReservation,
+
+    -- ** RunScheduledInstances
+    RunScheduledInstances (RunScheduledInstances'),
+    newRunScheduledInstances,
+    RunScheduledInstancesResponse (RunScheduledInstancesResponse'),
+    newRunScheduledInstancesResponse,
+
+    -- ** SearchLocalGatewayRoutes (Paginated)
+    SearchLocalGatewayRoutes (SearchLocalGatewayRoutes'),
+    newSearchLocalGatewayRoutes,
+    SearchLocalGatewayRoutesResponse (SearchLocalGatewayRoutesResponse'),
+    newSearchLocalGatewayRoutesResponse,
+
+    -- ** SearchTransitGatewayMulticastGroups (Paginated)
+    SearchTransitGatewayMulticastGroups (SearchTransitGatewayMulticastGroups'),
+    newSearchTransitGatewayMulticastGroups,
+    SearchTransitGatewayMulticastGroupsResponse (SearchTransitGatewayMulticastGroupsResponse'),
+    newSearchTransitGatewayMulticastGroupsResponse,
+
+    -- ** SearchTransitGatewayRoutes
+    SearchTransitGatewayRoutes (SearchTransitGatewayRoutes'),
+    newSearchTransitGatewayRoutes,
+    SearchTransitGatewayRoutesResponse (SearchTransitGatewayRoutesResponse'),
+    newSearchTransitGatewayRoutesResponse,
+
+    -- ** SendDiagnosticInterrupt
+    SendDiagnosticInterrupt (SendDiagnosticInterrupt'),
+    newSendDiagnosticInterrupt,
+    SendDiagnosticInterruptResponse (SendDiagnosticInterruptResponse'),
+    newSendDiagnosticInterruptResponse,
+
+    -- ** StartInstances
+    StartInstances (StartInstances'),
+    newStartInstances,
+    StartInstancesResponse (StartInstancesResponse'),
+    newStartInstancesResponse,
+
+    -- ** StartNetworkInsightsAccessScopeAnalysis
+    StartNetworkInsightsAccessScopeAnalysis (StartNetworkInsightsAccessScopeAnalysis'),
+    newStartNetworkInsightsAccessScopeAnalysis,
+    StartNetworkInsightsAccessScopeAnalysisResponse (StartNetworkInsightsAccessScopeAnalysisResponse'),
+    newStartNetworkInsightsAccessScopeAnalysisResponse,
+
+    -- ** StartNetworkInsightsAnalysis
+    StartNetworkInsightsAnalysis (StartNetworkInsightsAnalysis'),
+    newStartNetworkInsightsAnalysis,
+    StartNetworkInsightsAnalysisResponse (StartNetworkInsightsAnalysisResponse'),
+    newStartNetworkInsightsAnalysisResponse,
+
+    -- ** StartVpcEndpointServicePrivateDnsVerification
+    StartVpcEndpointServicePrivateDnsVerification (StartVpcEndpointServicePrivateDnsVerification'),
+    newStartVpcEndpointServicePrivateDnsVerification,
+    StartVpcEndpointServicePrivateDnsVerificationResponse (StartVpcEndpointServicePrivateDnsVerificationResponse'),
+    newStartVpcEndpointServicePrivateDnsVerificationResponse,
+
+    -- ** StopInstances
+    StopInstances (StopInstances'),
+    newStopInstances,
+    StopInstancesResponse (StopInstancesResponse'),
+    newStopInstancesResponse,
+
+    -- ** TerminateClientVpnConnections
+    TerminateClientVpnConnections (TerminateClientVpnConnections'),
+    newTerminateClientVpnConnections,
+    TerminateClientVpnConnectionsResponse (TerminateClientVpnConnectionsResponse'),
+    newTerminateClientVpnConnectionsResponse,
+
+    -- ** TerminateInstances
+    TerminateInstances (TerminateInstances'),
+    newTerminateInstances,
+    TerminateInstancesResponse (TerminateInstancesResponse'),
+    newTerminateInstancesResponse,
+
+    -- ** UnassignIpv6Addresses
+    UnassignIpv6Addresses (UnassignIpv6Addresses'),
+    newUnassignIpv6Addresses,
+    UnassignIpv6AddressesResponse (UnassignIpv6AddressesResponse'),
+    newUnassignIpv6AddressesResponse,
+
+    -- ** UnassignPrivateIpAddresses
+    UnassignPrivateIpAddresses (UnassignPrivateIpAddresses'),
+    newUnassignPrivateIpAddresses,
+    UnassignPrivateIpAddressesResponse (UnassignPrivateIpAddressesResponse'),
+    newUnassignPrivateIpAddressesResponse,
+
+    -- ** UnmonitorInstances
+    UnmonitorInstances (UnmonitorInstances'),
+    newUnmonitorInstances,
+    UnmonitorInstancesResponse (UnmonitorInstancesResponse'),
+    newUnmonitorInstancesResponse,
+
+    -- ** UpdateSecurityGroupRuleDescriptionsEgress
+    UpdateSecurityGroupRuleDescriptionsEgress (UpdateSecurityGroupRuleDescriptionsEgress'),
+    newUpdateSecurityGroupRuleDescriptionsEgress,
+    UpdateSecurityGroupRuleDescriptionsEgressResponse (UpdateSecurityGroupRuleDescriptionsEgressResponse'),
+    newUpdateSecurityGroupRuleDescriptionsEgressResponse,
+
+    -- ** UpdateSecurityGroupRuleDescriptionsIngress
+    UpdateSecurityGroupRuleDescriptionsIngress (UpdateSecurityGroupRuleDescriptionsIngress'),
+    newUpdateSecurityGroupRuleDescriptionsIngress,
+    UpdateSecurityGroupRuleDescriptionsIngressResponse (UpdateSecurityGroupRuleDescriptionsIngressResponse'),
+    newUpdateSecurityGroupRuleDescriptionsIngressResponse,
+
+    -- ** WithdrawByoipCidr
+    WithdrawByoipCidr (WithdrawByoipCidr'),
+    newWithdrawByoipCidr,
+    WithdrawByoipCidrResponse (WithdrawByoipCidrResponse'),
+    newWithdrawByoipCidrResponse,
+
+    -- * Types
+
+    -- ** Common
+    module Amazonka.EC2.Internal,
+
+    -- ** AcceleratorManufacturer
+    AcceleratorManufacturer (..),
+
+    -- ** AcceleratorName
+    AcceleratorName (..),
+
+    -- ** AcceleratorType
+    AcceleratorType (..),
+
+    -- ** AccountAttributeName
+    AccountAttributeName (..),
+
+    -- ** ActivityStatus
+    ActivityStatus (..),
+
+    -- ** AddressAttributeName
+    AddressAttributeName (..),
+
+    -- ** AddressFamily
+    AddressFamily (..),
+
+    -- ** AddressStatus
+    AddressStatus (..),
+
+    -- ** AddressTransferStatus
+    AddressTransferStatus (..),
+
+    -- ** Affinity
+    Affinity (..),
+
+    -- ** AllocationState
+    AllocationState (..),
+
+    -- ** AllocationStrategy
+    AllocationStrategy (..),
+
+    -- ** AllocationType
+    AllocationType (..),
+
+    -- ** AllowsMultipleInstanceTypes
+    AllowsMultipleInstanceTypes (..),
+
+    -- ** AnalysisStatus
+    AnalysisStatus (..),
+
+    -- ** ApplianceModeSupportValue
+    ApplianceModeSupportValue (..),
+
+    -- ** ArchitectureType
+    ArchitectureType (..),
+
+    -- ** ArchitectureValues
+    ArchitectureValues (..),
+
+    -- ** AssociatedNetworkType
+    AssociatedNetworkType (..),
+
+    -- ** AssociationStatusCode
+    AssociationStatusCode (..),
+
+    -- ** AttachmentStatus
+    AttachmentStatus (..),
+
+    -- ** AutoAcceptSharedAssociationsValue
+    AutoAcceptSharedAssociationsValue (..),
+
+    -- ** AutoAcceptSharedAttachmentsValue
+    AutoAcceptSharedAttachmentsValue (..),
+
+    -- ** AutoPlacement
+    AutoPlacement (..),
+
+    -- ** AvailabilityZoneOptInStatus
+    AvailabilityZoneOptInStatus (..),
+
+    -- ** AvailabilityZoneState
+    AvailabilityZoneState (..),
+
+    -- ** BareMetal
+    BareMetal (..),
+
+    -- ** BatchState
+    BatchState (..),
+
+    -- ** BgpStatus
+    BgpStatus (..),
+
+    -- ** BootModeType
+    BootModeType (..),
+
+    -- ** BootModeValues
+    BootModeValues (..),
+
+    -- ** BundleTaskState
+    BundleTaskState (..),
+
+    -- ** BurstablePerformance
+    BurstablePerformance (..),
+
+    -- ** ByoipCidrState
+    ByoipCidrState (..),
+
+    -- ** CancelBatchErrorCode
+    CancelBatchErrorCode (..),
+
+    -- ** CancelSpotInstanceRequestState
+    CancelSpotInstanceRequestState (..),
+
+    -- ** CapacityReservationFleetState
+    CapacityReservationFleetState (..),
+
+    -- ** CapacityReservationInstancePlatform
+    CapacityReservationInstancePlatform (..),
+
+    -- ** CapacityReservationPreference
+    CapacityReservationPreference (..),
+
+    -- ** CapacityReservationState
+    CapacityReservationState (..),
+
+    -- ** CapacityReservationTenancy
+    CapacityReservationTenancy (..),
+
+    -- ** CarrierGatewayState
+    CarrierGatewayState (..),
+
+    -- ** ClientCertificateRevocationListStatusCode
+    ClientCertificateRevocationListStatusCode (..),
+
+    -- ** ClientVpnAuthenticationType
+    ClientVpnAuthenticationType (..),
+
+    -- ** ClientVpnAuthorizationRuleStatusCode
+    ClientVpnAuthorizationRuleStatusCode (..),
+
+    -- ** ClientVpnConnectionStatusCode
+    ClientVpnConnectionStatusCode (..),
+
+    -- ** ClientVpnEndpointAttributeStatusCode
+    ClientVpnEndpointAttributeStatusCode (..),
+
+    -- ** ClientVpnEndpointStatusCode
+    ClientVpnEndpointStatusCode (..),
+
+    -- ** ClientVpnRouteStatusCode
+    ClientVpnRouteStatusCode (..),
+
+    -- ** ConnectionNotificationState
+    ConnectionNotificationState (..),
+
+    -- ** ConnectionNotificationType
+    ConnectionNotificationType (..),
+
+    -- ** ConnectivityType
+    ConnectivityType (..),
+
+    -- ** ContainerFormat
+    ContainerFormat (..),
+
+    -- ** ConversionTaskState
+    ConversionTaskState (..),
+
+    -- ** CopyTagsFromSource
+    CopyTagsFromSource (..),
+
+    -- ** CpuManufacturer
+    CpuManufacturer (..),
+
+    -- ** CurrencyCodeValues
+    CurrencyCodeValues (..),
+
+    -- ** DatafeedSubscriptionState
+    DatafeedSubscriptionState (..),
+
+    -- ** DefaultRouteTableAssociationValue
+    DefaultRouteTableAssociationValue (..),
+
+    -- ** DefaultRouteTablePropagationValue
+    DefaultRouteTablePropagationValue (..),
+
+    -- ** DefaultTargetCapacityType
+    DefaultTargetCapacityType (..),
+
+    -- ** DeleteFleetErrorCode
+    DeleteFleetErrorCode (..),
+
+    -- ** DeleteQueuedReservedInstancesErrorCode
+    DeleteQueuedReservedInstancesErrorCode (..),
+
+    -- ** DestinationFileFormat
+    DestinationFileFormat (..),
+
+    -- ** DeviceTrustProviderType
+    DeviceTrustProviderType (..),
+
+    -- ** DeviceType
+    DeviceType (..),
+
+    -- ** DiskImageFormat
+    DiskImageFormat (..),
+
+    -- ** DiskType
+    DiskType (..),
+
+    -- ** DnsNameState
+    DnsNameState (..),
+
+    -- ** DnsRecordIpType
+    DnsRecordIpType (..),
+
+    -- ** DnsSupportValue
+    DnsSupportValue (..),
+
+    -- ** DomainType
+    DomainType (..),
+
+    -- ** DynamicRoutingValue
+    DynamicRoutingValue (..),
+
+    -- ** EbsEncryptionSupport
+    EbsEncryptionSupport (..),
+
+    -- ** EbsNvmeSupport
+    EbsNvmeSupport (..),
+
+    -- ** EbsOptimizedSupport
+    EbsOptimizedSupport (..),
+
+    -- ** ElasticGpuState
+    ElasticGpuState (..),
+
+    -- ** ElasticGpuStatus
+    ElasticGpuStatus (..),
+
+    -- ** EnaSupport
+    EnaSupport (..),
+
+    -- ** EndDateType
+    EndDateType (..),
+
+    -- ** EphemeralNvmeSupport
+    EphemeralNvmeSupport (..),
+
+    -- ** EventCode
+    EventCode (..),
+
+    -- ** EventType
+    EventType (..),
+
+    -- ** ExcessCapacityTerminationPolicy
+    ExcessCapacityTerminationPolicy (..),
+
+    -- ** ExportEnvironment
+    ExportEnvironment (..),
+
+    -- ** ExportTaskState
+    ExportTaskState (..),
+
+    -- ** FastLaunchResourceType
+    FastLaunchResourceType (..),
+
+    -- ** FastLaunchStateCode
+    FastLaunchStateCode (..),
+
+    -- ** FastSnapshotRestoreStateCode
+    FastSnapshotRestoreStateCode (..),
+
+    -- ** FindingsFound
+    FindingsFound (..),
+
+    -- ** FleetActivityStatus
+    FleetActivityStatus (..),
+
+    -- ** FleetCapacityReservationTenancy
+    FleetCapacityReservationTenancy (..),
+
+    -- ** FleetCapacityReservationUsageStrategy
+    FleetCapacityReservationUsageStrategy (..),
+
+    -- ** FleetEventType
+    FleetEventType (..),
+
+    -- ** FleetExcessCapacityTerminationPolicy
+    FleetExcessCapacityTerminationPolicy (..),
+
+    -- ** FleetInstanceMatchCriteria
+    FleetInstanceMatchCriteria (..),
+
+    -- ** FleetOnDemandAllocationStrategy
+    FleetOnDemandAllocationStrategy (..),
+
+    -- ** FleetReplacementStrategy
+    FleetReplacementStrategy (..),
+
+    -- ** FleetStateCode
+    FleetStateCode (..),
+
+    -- ** FleetType
+    FleetType (..),
+
+    -- ** FlowLogsResourceType
+    FlowLogsResourceType (..),
+
+    -- ** FpgaImageAttributeName
+    FpgaImageAttributeName (..),
+
+    -- ** FpgaImageStateCode
+    FpgaImageStateCode (..),
+
+    -- ** GatewayAssociationState
+    GatewayAssociationState (..),
+
+    -- ** GatewayType
+    GatewayType (..),
+
+    -- ** HostRecovery
+    HostRecovery (..),
+
+    -- ** HostTenancy
+    HostTenancy (..),
+
+    -- ** HostnameType
+    HostnameType (..),
+
+    -- ** HttpTokensState
+    HttpTokensState (..),
+
+    -- ** HypervisorType
+    HypervisorType (..),
+
+    -- ** IamInstanceProfileAssociationState
+    IamInstanceProfileAssociationState (..),
+
+    -- ** Igmpv2SupportValue
+    Igmpv2SupportValue (..),
+
+    -- ** ImageAttributeName
+    ImageAttributeName (..),
+
+    -- ** ImageState
+    ImageState (..),
+
+    -- ** ImageTypeValues
+    ImageTypeValues (..),
+
+    -- ** ImdsSupportValues
+    ImdsSupportValues (..),
+
+    -- ** InstanceAttributeName
+    InstanceAttributeName (..),
+
+    -- ** InstanceAutoRecoveryState
+    InstanceAutoRecoveryState (..),
+
+    -- ** InstanceEventWindowState
+    InstanceEventWindowState (..),
+
+    -- ** InstanceGeneration
+    InstanceGeneration (..),
+
+    -- ** InstanceHealthStatus
+    InstanceHealthStatus (..),
+
+    -- ** InstanceInterruptionBehavior
+    InstanceInterruptionBehavior (..),
+
+    -- ** InstanceLifecycle
+    InstanceLifecycle (..),
+
+    -- ** InstanceLifecycleType
+    InstanceLifecycleType (..),
+
+    -- ** InstanceMatchCriteria
+    InstanceMatchCriteria (..),
+
+    -- ** InstanceMetadataEndpointState
+    InstanceMetadataEndpointState (..),
+
+    -- ** InstanceMetadataOptionsState
+    InstanceMetadataOptionsState (..),
+
+    -- ** InstanceMetadataProtocolState
+    InstanceMetadataProtocolState (..),
+
+    -- ** InstanceMetadataTagsState
+    InstanceMetadataTagsState (..),
+
+    -- ** InstanceStateName
+    InstanceStateName (..),
+
+    -- ** InstanceStorageEncryptionSupport
+    InstanceStorageEncryptionSupport (..),
+
+    -- ** InstanceType
+    InstanceType (..),
+
+    -- ** InstanceTypeHypervisor
+    InstanceTypeHypervisor (..),
+
+    -- ** InterfacePermissionType
+    InterfacePermissionType (..),
+
+    -- ** InterfaceProtocolType
+    InterfaceProtocolType (..),
+
+    -- ** IpAddressType
+    IpAddressType (..),
+
+    -- ** IpamAddressHistoryResourceType
+    IpamAddressHistoryResourceType (..),
+
+    -- ** IpamComplianceStatus
+    IpamComplianceStatus (..),
+
+    -- ** IpamManagementState
+    IpamManagementState (..),
+
+    -- ** IpamOverlapStatus
+    IpamOverlapStatus (..),
+
+    -- ** IpamPoolAllocationResourceType
+    IpamPoolAllocationResourceType (..),
+
+    -- ** IpamPoolAwsService
+    IpamPoolAwsService (..),
+
+    -- ** IpamPoolCidrFailureCode
+    IpamPoolCidrFailureCode (..),
+
+    -- ** IpamPoolCidrState
+    IpamPoolCidrState (..),
+
+    -- ** IpamPoolState
+    IpamPoolState (..),
+
+    -- ** IpamResourceType
+    IpamResourceType (..),
+
+    -- ** IpamScopeState
+    IpamScopeState (..),
+
+    -- ** IpamScopeType
+    IpamScopeType (..),
+
+    -- ** IpamState
+    IpamState (..),
+
+    -- ** Ipv6SupportValue
+    Ipv6SupportValue (..),
+
+    -- ** KeyFormat
+    KeyFormat (..),
+
+    -- ** KeyType
+    KeyType (..),
+
+    -- ** LaunchTemplateAutoRecoveryState
+    LaunchTemplateAutoRecoveryState (..),
+
+    -- ** LaunchTemplateErrorCode
+    LaunchTemplateErrorCode (..),
+
+    -- ** LaunchTemplateHttpTokensState
+    LaunchTemplateHttpTokensState (..),
+
+    -- ** LaunchTemplateInstanceMetadataEndpointState
+    LaunchTemplateInstanceMetadataEndpointState (..),
+
+    -- ** LaunchTemplateInstanceMetadataOptionsState
+    LaunchTemplateInstanceMetadataOptionsState (..),
+
+    -- ** LaunchTemplateInstanceMetadataProtocolIpv6
+    LaunchTemplateInstanceMetadataProtocolIpv6 (..),
+
+    -- ** LaunchTemplateInstanceMetadataTagsState
+    LaunchTemplateInstanceMetadataTagsState (..),
+
+    -- ** ListingState
+    ListingState (..),
+
+    -- ** ListingStatus
+    ListingStatus (..),
+
+    -- ** LocalGatewayRouteState
+    LocalGatewayRouteState (..),
+
+    -- ** LocalGatewayRouteTableMode
+    LocalGatewayRouteTableMode (..),
+
+    -- ** LocalGatewayRouteType
+    LocalGatewayRouteType (..),
+
+    -- ** LocalStorage
+    LocalStorage (..),
+
+    -- ** LocalStorageType
+    LocalStorageType (..),
+
+    -- ** LocationType
+    LocationType (..),
+
+    -- ** LogDestinationType
+    LogDestinationType (..),
+
+    -- ** MarketType
+    MarketType (..),
+
+    -- ** MembershipType
+    MembershipType (..),
+
+    -- ** MetricType
+    MetricType (..),
+
+    -- ** ModifyAvailabilityZoneOptInStatus
+    ModifyAvailabilityZoneOptInStatus (..),
+
+    -- ** MonitoringState
+    MonitoringState (..),
+
+    -- ** MoveStatus
+    MoveStatus (..),
+
+    -- ** MulticastSupportValue
+    MulticastSupportValue (..),
+
+    -- ** NatGatewayState
+    NatGatewayState (..),
+
+    -- ** NetworkInterfaceAttribute
+    NetworkInterfaceAttribute (..),
+
+    -- ** NetworkInterfaceCreationType
+    NetworkInterfaceCreationType (..),
+
+    -- ** NetworkInterfacePermissionStateCode
+    NetworkInterfacePermissionStateCode (..),
+
+    -- ** NetworkInterfaceStatus
+    NetworkInterfaceStatus (..),
+
+    -- ** NetworkInterfaceType
+    NetworkInterfaceType (..),
+
+    -- ** OfferingClassType
+    OfferingClassType (..),
+
+    -- ** OfferingTypeValues
+    OfferingTypeValues (..),
+
+    -- ** OnDemandAllocationStrategy
+    OnDemandAllocationStrategy (..),
+
+    -- ** OperationType
+    OperationType (..),
+
+    -- ** PartitionLoadFrequency
+    PartitionLoadFrequency (..),
+
+    -- ** PayerResponsibility
+    PayerResponsibility (..),
+
+    -- ** PaymentOption
+    PaymentOption (..),
+
+    -- ** PeriodType
+    PeriodType (..),
+
+    -- ** PermissionGroup
+    PermissionGroup (..),
+
+    -- ** PlacementGroupState
+    PlacementGroupState (..),
+
+    -- ** PlacementGroupStrategy
+    PlacementGroupStrategy (..),
+
+    -- ** PlacementStrategy
+    PlacementStrategy (..),
+
+    -- ** PlatformValues
+    PlatformValues (..),
+
+    -- ** PrefixListState
+    PrefixListState (..),
+
+    -- ** PrincipalType
+    PrincipalType (..),
+
+    -- ** ProductCodeValues
+    ProductCodeValues (..),
+
+    -- ** Protocol
+    Protocol (..),
+
+    -- ** ProtocolValue
+    ProtocolValue (..),
+
+    -- ** RIProductDescription
+    RIProductDescription (..),
+
+    -- ** RecurringChargeFrequency
+    RecurringChargeFrequency (..),
+
+    -- ** ReplaceRootVolumeTaskState
+    ReplaceRootVolumeTaskState (..),
+
+    -- ** ReplacementStrategy
+    ReplacementStrategy (..),
+
+    -- ** ReportInstanceReasonCodes
+    ReportInstanceReasonCodes (..),
+
+    -- ** ReportStatusType
+    ReportStatusType (..),
+
+    -- ** ReservationState
+    ReservationState (..),
+
+    -- ** ReservedInstanceState
+    ReservedInstanceState (..),
+
+    -- ** ResetFpgaImageAttributeName
+    ResetFpgaImageAttributeName (..),
+
+    -- ** ResetImageAttributeName
+    ResetImageAttributeName (..),
+
+    -- ** ResourceType
+    ResourceType (..),
+
+    -- ** RootDeviceType
+    RootDeviceType (..),
+
+    -- ** RouteOrigin
+    RouteOrigin (..),
+
+    -- ** RouteState
+    RouteState (..),
+
+    -- ** RouteTableAssociationStateCode
+    RouteTableAssociationStateCode (..),
+
+    -- ** RuleAction
+    RuleAction (..),
+
+    -- ** Scope
+    Scope (..),
+
+    -- ** SelfServicePortal
+    SelfServicePortal (..),
+
+    -- ** ServiceConnectivityType
+    ServiceConnectivityType (..),
+
+    -- ** ServiceState
+    ServiceState (..),
+
+    -- ** ServiceType
+    ServiceType (..),
+
+    -- ** ShutdownBehavior
+    ShutdownBehavior (..),
+
+    -- ** SnapshotAttributeName
+    SnapshotAttributeName (..),
+
+    -- ** SnapshotState
+    SnapshotState (..),
+
+    -- ** SpotAllocationStrategy
+    SpotAllocationStrategy (..),
+
+    -- ** SpotInstanceInterruptionBehavior
+    SpotInstanceInterruptionBehavior (..),
+
+    -- ** SpotInstanceState
+    SpotInstanceState (..),
+
+    -- ** SpotInstanceType
+    SpotInstanceType (..),
+
+    -- ** SpreadLevel
+    SpreadLevel (..),
+
+    -- ** State
+    State (..),
+
+    -- ** StaticSourcesSupportValue
+    StaticSourcesSupportValue (..),
+
+    -- ** StatisticType
+    StatisticType (..),
+
+    -- ** StatusName
+    StatusName (..),
+
+    -- ** StatusType
+    StatusType (..),
+
+    -- ** StorageTier
+    StorageTier (..),
+
+    -- ** SubnetCidrBlockStateCode
+    SubnetCidrBlockStateCode (..),
+
+    -- ** SubnetCidrReservationType
+    SubnetCidrReservationType (..),
+
+    -- ** SubnetState
+    SubnetState (..),
+
+    -- ** SummaryStatus
+    SummaryStatus (..),
+
+    -- ** TargetCapacityUnitType
+    TargetCapacityUnitType (..),
+
+    -- ** TargetStorageTier
+    TargetStorageTier (..),
+
+    -- ** TelemetryStatus
+    TelemetryStatus (..),
+
+    -- ** Tenancy
+    Tenancy (..),
+
+    -- ** TieringOperationStatus
+    TieringOperationStatus (..),
+
+    -- ** TpmSupportValues
+    TpmSupportValues (..),
+
+    -- ** TrafficDirection
+    TrafficDirection (..),
+
+    -- ** TrafficMirrorFilterRuleField
+    TrafficMirrorFilterRuleField (..),
+
+    -- ** TrafficMirrorNetworkService
+    TrafficMirrorNetworkService (..),
+
+    -- ** TrafficMirrorRuleAction
+    TrafficMirrorRuleAction (..),
+
+    -- ** TrafficMirrorSessionField
+    TrafficMirrorSessionField (..),
+
+    -- ** TrafficMirrorTargetType
+    TrafficMirrorTargetType (..),
+
+    -- ** TrafficType
+    TrafficType (..),
+
+    -- ** TransitGatewayAssociationState
+    TransitGatewayAssociationState (..),
+
+    -- ** TransitGatewayAttachmentResourceType
+    TransitGatewayAttachmentResourceType (..),
+
+    -- ** TransitGatewayAttachmentState
+    TransitGatewayAttachmentState (..),
+
+    -- ** TransitGatewayConnectPeerState
+    TransitGatewayConnectPeerState (..),
+
+    -- ** TransitGatewayMulitcastDomainAssociationState
+    TransitGatewayMulitcastDomainAssociationState (..),
+
+    -- ** TransitGatewayMulticastDomainState
+    TransitGatewayMulticastDomainState (..),
+
+    -- ** TransitGatewayPolicyTableState
+    TransitGatewayPolicyTableState (..),
+
+    -- ** TransitGatewayPrefixListReferenceState
+    TransitGatewayPrefixListReferenceState (..),
+
+    -- ** TransitGatewayPropagationState
+    TransitGatewayPropagationState (..),
+
+    -- ** TransitGatewayRouteState
+    TransitGatewayRouteState (..),
+
+    -- ** TransitGatewayRouteTableAnnouncementDirection
+    TransitGatewayRouteTableAnnouncementDirection (..),
+
+    -- ** TransitGatewayRouteTableAnnouncementState
+    TransitGatewayRouteTableAnnouncementState (..),
+
+    -- ** TransitGatewayRouteTableState
+    TransitGatewayRouteTableState (..),
+
+    -- ** TransitGatewayRouteType
+    TransitGatewayRouteType (..),
+
+    -- ** TransitGatewayState
+    TransitGatewayState (..),
+
+    -- ** TransportProtocol
+    TransportProtocol (..),
+
+    -- ** TrustProviderType
+    TrustProviderType (..),
+
+    -- ** TunnelInsideIpVersion
+    TunnelInsideIpVersion (..),
+
+    -- ** UnlimitedSupportedInstanceFamily
+    UnlimitedSupportedInstanceFamily (..),
+
+    -- ** UnsuccessfulInstanceCreditSpecificationErrorCode
+    UnsuccessfulInstanceCreditSpecificationErrorCode (..),
+
+    -- ** UsageClassType
+    UsageClassType (..),
+
+    -- ** UserTrustProviderType
+    UserTrustProviderType (..),
+
+    -- ** VerifiedAccessEndpointAttachmentType
+    VerifiedAccessEndpointAttachmentType (..),
+
+    -- ** VerifiedAccessEndpointProtocol
+    VerifiedAccessEndpointProtocol (..),
+
+    -- ** VerifiedAccessEndpointStatusCode
+    VerifiedAccessEndpointStatusCode (..),
+
+    -- ** VerifiedAccessEndpointType
+    VerifiedAccessEndpointType (..),
+
+    -- ** VerifiedAccessLogDeliveryStatusCode
+    VerifiedAccessLogDeliveryStatusCode (..),
+
+    -- ** VirtualizationType
+    VirtualizationType (..),
+
+    -- ** VolumeAttachmentState
+    VolumeAttachmentState (..),
+
+    -- ** VolumeAttributeName
+    VolumeAttributeName (..),
+
+    -- ** VolumeModificationState
+    VolumeModificationState (..),
+
+    -- ** VolumeState
+    VolumeState (..),
+
+    -- ** VolumeStatusInfoStatus
+    VolumeStatusInfoStatus (..),
+
+    -- ** VolumeStatusName
+    VolumeStatusName (..),
+
+    -- ** VolumeType
+    VolumeType (..),
+
+    -- ** VpcAttributeName
+    VpcAttributeName (..),
+
+    -- ** VpcCidrBlockStateCode
+    VpcCidrBlockStateCode (..),
+
+    -- ** VpcEndpointType
+    VpcEndpointType (..),
+
+    -- ** VpcPeeringConnectionStateReasonCode
+    VpcPeeringConnectionStateReasonCode (..),
+
+    -- ** VpcState
+    VpcState (..),
+
+    -- ** VpcTenancy
+    VpcTenancy (..),
+
+    -- ** VpnEcmpSupportValue
+    VpnEcmpSupportValue (..),
+
+    -- ** VpnProtocol
+    VpnProtocol (..),
+
+    -- ** VpnState
+    VpnState (..),
+
+    -- ** VpnStaticRouteSource
+    VpnStaticRouteSource (..),
+
+    -- ** WeekDay
+    WeekDay (..),
+
+    -- ** AcceleratorCount
+    AcceleratorCount (AcceleratorCount'),
+    newAcceleratorCount,
+
+    -- ** AcceleratorCountRequest
+    AcceleratorCountRequest (AcceleratorCountRequest'),
+    newAcceleratorCountRequest,
+
+    -- ** AcceleratorTotalMemoryMiB
+    AcceleratorTotalMemoryMiB (AcceleratorTotalMemoryMiB'),
+    newAcceleratorTotalMemoryMiB,
+
+    -- ** AcceleratorTotalMemoryMiBRequest
+    AcceleratorTotalMemoryMiBRequest (AcceleratorTotalMemoryMiBRequest'),
+    newAcceleratorTotalMemoryMiBRequest,
+
+    -- ** AccessScopeAnalysisFinding
+    AccessScopeAnalysisFinding (AccessScopeAnalysisFinding'),
+    newAccessScopeAnalysisFinding,
+
+    -- ** AccessScopePath
+    AccessScopePath (AccessScopePath'),
+    newAccessScopePath,
+
+    -- ** AccessScopePathRequest
+    AccessScopePathRequest (AccessScopePathRequest'),
+    newAccessScopePathRequest,
+
+    -- ** AccountAttribute
+    AccountAttribute (AccountAttribute'),
+    newAccountAttribute,
+
+    -- ** AccountAttributeValue
+    AccountAttributeValue (AccountAttributeValue'),
+    newAccountAttributeValue,
+
+    -- ** ActiveInstance
+    ActiveInstance (ActiveInstance'),
+    newActiveInstance,
+
+    -- ** AddIpamOperatingRegion
+    AddIpamOperatingRegion (AddIpamOperatingRegion'),
+    newAddIpamOperatingRegion,
+
+    -- ** AddPrefixListEntry
+    AddPrefixListEntry (AddPrefixListEntry'),
+    newAddPrefixListEntry,
+
+    -- ** AddedPrincipal
+    AddedPrincipal (AddedPrincipal'),
+    newAddedPrincipal,
+
+    -- ** AdditionalDetail
+    AdditionalDetail (AdditionalDetail'),
+    newAdditionalDetail,
+
+    -- ** Address
+    Address (Address'),
+    newAddress,
+
+    -- ** AddressAttribute
+    AddressAttribute (AddressAttribute'),
+    newAddressAttribute,
+
+    -- ** AddressTransfer
+    AddressTransfer (AddressTransfer'),
+    newAddressTransfer,
+
+    -- ** AllowedPrincipal
+    AllowedPrincipal (AllowedPrincipal'),
+    newAllowedPrincipal,
+
+    -- ** AlternatePathHint
+    AlternatePathHint (AlternatePathHint'),
+    newAlternatePathHint,
+
+    -- ** AnalysisAclRule
+    AnalysisAclRule (AnalysisAclRule'),
+    newAnalysisAclRule,
+
+    -- ** AnalysisComponent
+    AnalysisComponent (AnalysisComponent'),
+    newAnalysisComponent,
+
+    -- ** AnalysisLoadBalancerListener
+    AnalysisLoadBalancerListener (AnalysisLoadBalancerListener'),
+    newAnalysisLoadBalancerListener,
+
+    -- ** AnalysisLoadBalancerTarget
+    AnalysisLoadBalancerTarget (AnalysisLoadBalancerTarget'),
+    newAnalysisLoadBalancerTarget,
+
+    -- ** AnalysisPacketHeader
+    AnalysisPacketHeader (AnalysisPacketHeader'),
+    newAnalysisPacketHeader,
+
+    -- ** AnalysisRouteTableRoute
+    AnalysisRouteTableRoute (AnalysisRouteTableRoute'),
+    newAnalysisRouteTableRoute,
+
+    -- ** AnalysisSecurityGroupRule
+    AnalysisSecurityGroupRule (AnalysisSecurityGroupRule'),
+    newAnalysisSecurityGroupRule,
+
+    -- ** AssignedPrivateIpAddress
+    AssignedPrivateIpAddress (AssignedPrivateIpAddress'),
+    newAssignedPrivateIpAddress,
+
+    -- ** AssociatedRole
+    AssociatedRole (AssociatedRole'),
+    newAssociatedRole,
+
+    -- ** AssociatedTargetNetwork
+    AssociatedTargetNetwork (AssociatedTargetNetwork'),
+    newAssociatedTargetNetwork,
+
+    -- ** AssociationStatus
+    AssociationStatus (AssociationStatus'),
+    newAssociationStatus,
+
+    -- ** AthenaIntegration
+    AthenaIntegration (AthenaIntegration'),
+    newAthenaIntegration,
+
+    -- ** AttachmentEnaSrdSpecification
+    AttachmentEnaSrdSpecification (AttachmentEnaSrdSpecification'),
+    newAttachmentEnaSrdSpecification,
+
+    -- ** AttachmentEnaSrdUdpSpecification
+    AttachmentEnaSrdUdpSpecification (AttachmentEnaSrdUdpSpecification'),
+    newAttachmentEnaSrdUdpSpecification,
+
+    -- ** AttributeBooleanValue
+    AttributeBooleanValue (AttributeBooleanValue'),
+    newAttributeBooleanValue,
+
+    -- ** AttributeValue
+    AttributeValue (AttributeValue'),
+    newAttributeValue,
+
+    -- ** AuthorizationRule
+    AuthorizationRule (AuthorizationRule'),
+    newAuthorizationRule,
+
+    -- ** AvailabilityZone
+    AvailabilityZone (AvailabilityZone'),
+    newAvailabilityZone,
+
+    -- ** AvailabilityZoneMessage
+    AvailabilityZoneMessage (AvailabilityZoneMessage'),
+    newAvailabilityZoneMessage,
+
+    -- ** AvailableCapacity
+    AvailableCapacity (AvailableCapacity'),
+    newAvailableCapacity,
+
+    -- ** BaselineEbsBandwidthMbps
+    BaselineEbsBandwidthMbps (BaselineEbsBandwidthMbps'),
+    newBaselineEbsBandwidthMbps,
+
+    -- ** BaselineEbsBandwidthMbpsRequest
+    BaselineEbsBandwidthMbpsRequest (BaselineEbsBandwidthMbpsRequest'),
+    newBaselineEbsBandwidthMbpsRequest,
+
+    -- ** BlobAttributeValue
+    BlobAttributeValue (BlobAttributeValue'),
+    newBlobAttributeValue,
+
+    -- ** BlockDeviceMapping
+    BlockDeviceMapping (BlockDeviceMapping'),
+    newBlockDeviceMapping,
+
+    -- ** BundleTask
+    BundleTask (BundleTask'),
+    newBundleTask,
+
+    -- ** BundleTaskError
+    BundleTaskError (BundleTaskError'),
+    newBundleTaskError,
+
+    -- ** ByoipCidr
+    ByoipCidr (ByoipCidr'),
+    newByoipCidr,
+
+    -- ** CancelCapacityReservationFleetError
+    CancelCapacityReservationFleetError (CancelCapacityReservationFleetError'),
+    newCancelCapacityReservationFleetError,
+
+    -- ** CancelSpotFleetRequestsError
+    CancelSpotFleetRequestsError (CancelSpotFleetRequestsError'),
+    newCancelSpotFleetRequestsError,
+
+    -- ** CancelSpotFleetRequestsErrorItem
+    CancelSpotFleetRequestsErrorItem (CancelSpotFleetRequestsErrorItem'),
+    newCancelSpotFleetRequestsErrorItem,
+
+    -- ** CancelSpotFleetRequestsSuccessItem
+    CancelSpotFleetRequestsSuccessItem (CancelSpotFleetRequestsSuccessItem'),
+    newCancelSpotFleetRequestsSuccessItem,
+
+    -- ** CancelledSpotInstanceRequest
+    CancelledSpotInstanceRequest (CancelledSpotInstanceRequest'),
+    newCancelledSpotInstanceRequest,
+
+    -- ** CapacityAllocation
+    CapacityAllocation (CapacityAllocation'),
+    newCapacityAllocation,
+
+    -- ** CapacityReservation
+    CapacityReservation (CapacityReservation'),
+    newCapacityReservation,
+
+    -- ** CapacityReservationFleet
+    CapacityReservationFleet (CapacityReservationFleet'),
+    newCapacityReservationFleet,
+
+    -- ** CapacityReservationFleetCancellationState
+    CapacityReservationFleetCancellationState (CapacityReservationFleetCancellationState'),
+    newCapacityReservationFleetCancellationState,
+
+    -- ** CapacityReservationGroup
+    CapacityReservationGroup (CapacityReservationGroup'),
+    newCapacityReservationGroup,
+
+    -- ** CapacityReservationOptions
+    CapacityReservationOptions (CapacityReservationOptions'),
+    newCapacityReservationOptions,
+
+    -- ** CapacityReservationOptionsRequest
+    CapacityReservationOptionsRequest (CapacityReservationOptionsRequest'),
+    newCapacityReservationOptionsRequest,
+
+    -- ** CapacityReservationSpecification
+    CapacityReservationSpecification (CapacityReservationSpecification'),
+    newCapacityReservationSpecification,
+
+    -- ** CapacityReservationSpecificationResponse
+    CapacityReservationSpecificationResponse (CapacityReservationSpecificationResponse'),
+    newCapacityReservationSpecificationResponse,
+
+    -- ** CapacityReservationTarget
+    CapacityReservationTarget (CapacityReservationTarget'),
+    newCapacityReservationTarget,
+
+    -- ** CapacityReservationTargetResponse
+    CapacityReservationTargetResponse (CapacityReservationTargetResponse'),
+    newCapacityReservationTargetResponse,
+
+    -- ** CarrierGateway
+    CarrierGateway (CarrierGateway'),
+    newCarrierGateway,
+
+    -- ** CertificateAuthentication
+    CertificateAuthentication (CertificateAuthentication'),
+    newCertificateAuthentication,
+
+    -- ** CertificateAuthenticationRequest
+    CertificateAuthenticationRequest (CertificateAuthenticationRequest'),
+    newCertificateAuthenticationRequest,
+
+    -- ** CidrAuthorizationContext
+    CidrAuthorizationContext (CidrAuthorizationContext'),
+    newCidrAuthorizationContext,
+
+    -- ** CidrBlock
+    CidrBlock (CidrBlock'),
+    newCidrBlock,
+
+    -- ** ClassicLinkDnsSupport
+    ClassicLinkDnsSupport (ClassicLinkDnsSupport'),
+    newClassicLinkDnsSupport,
+
+    -- ** ClassicLinkInstance
+    ClassicLinkInstance (ClassicLinkInstance'),
+    newClassicLinkInstance,
+
+    -- ** ClassicLoadBalancer
+    ClassicLoadBalancer (ClassicLoadBalancer'),
+    newClassicLoadBalancer,
+
+    -- ** ClassicLoadBalancersConfig
+    ClassicLoadBalancersConfig (ClassicLoadBalancersConfig'),
+    newClassicLoadBalancersConfig,
+
+    -- ** ClientCertificateRevocationListStatus
+    ClientCertificateRevocationListStatus (ClientCertificateRevocationListStatus'),
+    newClientCertificateRevocationListStatus,
+
+    -- ** ClientConnectOptions
+    ClientConnectOptions (ClientConnectOptions'),
+    newClientConnectOptions,
+
+    -- ** ClientConnectResponseOptions
+    ClientConnectResponseOptions (ClientConnectResponseOptions'),
+    newClientConnectResponseOptions,
+
+    -- ** ClientData
+    ClientData (ClientData'),
+    newClientData,
+
+    -- ** ClientLoginBannerOptions
+    ClientLoginBannerOptions (ClientLoginBannerOptions'),
+    newClientLoginBannerOptions,
+
+    -- ** ClientLoginBannerResponseOptions
+    ClientLoginBannerResponseOptions (ClientLoginBannerResponseOptions'),
+    newClientLoginBannerResponseOptions,
+
+    -- ** ClientVpnAuthentication
+    ClientVpnAuthentication (ClientVpnAuthentication'),
+    newClientVpnAuthentication,
+
+    -- ** ClientVpnAuthenticationRequest
+    ClientVpnAuthenticationRequest (ClientVpnAuthenticationRequest'),
+    newClientVpnAuthenticationRequest,
+
+    -- ** ClientVpnAuthorizationRuleStatus
+    ClientVpnAuthorizationRuleStatus (ClientVpnAuthorizationRuleStatus'),
+    newClientVpnAuthorizationRuleStatus,
+
+    -- ** ClientVpnConnection
+    ClientVpnConnection (ClientVpnConnection'),
+    newClientVpnConnection,
+
+    -- ** ClientVpnConnectionStatus
+    ClientVpnConnectionStatus (ClientVpnConnectionStatus'),
+    newClientVpnConnectionStatus,
+
+    -- ** ClientVpnEndpoint
+    ClientVpnEndpoint (ClientVpnEndpoint'),
+    newClientVpnEndpoint,
+
+    -- ** ClientVpnEndpointAttributeStatus
+    ClientVpnEndpointAttributeStatus (ClientVpnEndpointAttributeStatus'),
+    newClientVpnEndpointAttributeStatus,
+
+    -- ** ClientVpnEndpointStatus
+    ClientVpnEndpointStatus (ClientVpnEndpointStatus'),
+    newClientVpnEndpointStatus,
+
+    -- ** ClientVpnRoute
+    ClientVpnRoute (ClientVpnRoute'),
+    newClientVpnRoute,
+
+    -- ** ClientVpnRouteStatus
+    ClientVpnRouteStatus (ClientVpnRouteStatus'),
+    newClientVpnRouteStatus,
+
+    -- ** CloudWatchLogOptions
+    CloudWatchLogOptions (CloudWatchLogOptions'),
+    newCloudWatchLogOptions,
+
+    -- ** CloudWatchLogOptionsSpecification
+    CloudWatchLogOptionsSpecification (CloudWatchLogOptionsSpecification'),
+    newCloudWatchLogOptionsSpecification,
+
+    -- ** CoipAddressUsage
+    CoipAddressUsage (CoipAddressUsage'),
+    newCoipAddressUsage,
+
+    -- ** CoipCidr
+    CoipCidr (CoipCidr'),
+    newCoipCidr,
+
+    -- ** CoipPool
+    CoipPool (CoipPool'),
+    newCoipPool,
+
+    -- ** ConnectionLogOptions
+    ConnectionLogOptions (ConnectionLogOptions'),
+    newConnectionLogOptions,
+
+    -- ** ConnectionLogResponseOptions
+    ConnectionLogResponseOptions (ConnectionLogResponseOptions'),
+    newConnectionLogResponseOptions,
+
+    -- ** ConnectionNotification
+    ConnectionNotification (ConnectionNotification'),
+    newConnectionNotification,
+
+    -- ** ConversionTask
+    ConversionTask (ConversionTask'),
+    newConversionTask,
+
+    -- ** CpuOptions
+    CpuOptions (CpuOptions'),
+    newCpuOptions,
+
+    -- ** CpuOptionsRequest
+    CpuOptionsRequest (CpuOptionsRequest'),
+    newCpuOptionsRequest,
+
+    -- ** CreateFleetError
+    CreateFleetError (CreateFleetError'),
+    newCreateFleetError,
+
+    -- ** CreateFleetInstance
+    CreateFleetInstance (CreateFleetInstance'),
+    newCreateFleetInstance,
+
+    -- ** CreateTransitGatewayConnectRequestOptions
+    CreateTransitGatewayConnectRequestOptions (CreateTransitGatewayConnectRequestOptions'),
+    newCreateTransitGatewayConnectRequestOptions,
+
+    -- ** CreateTransitGatewayMulticastDomainRequestOptions
+    CreateTransitGatewayMulticastDomainRequestOptions (CreateTransitGatewayMulticastDomainRequestOptions'),
+    newCreateTransitGatewayMulticastDomainRequestOptions,
+
+    -- ** CreateTransitGatewayPeeringAttachmentRequestOptions
+    CreateTransitGatewayPeeringAttachmentRequestOptions (CreateTransitGatewayPeeringAttachmentRequestOptions'),
+    newCreateTransitGatewayPeeringAttachmentRequestOptions,
+
+    -- ** CreateTransitGatewayVpcAttachmentRequestOptions
+    CreateTransitGatewayVpcAttachmentRequestOptions (CreateTransitGatewayVpcAttachmentRequestOptions'),
+    newCreateTransitGatewayVpcAttachmentRequestOptions,
+
+    -- ** CreateVerifiedAccessEndpointEniOptions
+    CreateVerifiedAccessEndpointEniOptions (CreateVerifiedAccessEndpointEniOptions'),
+    newCreateVerifiedAccessEndpointEniOptions,
+
+    -- ** CreateVerifiedAccessEndpointLoadBalancerOptions
+    CreateVerifiedAccessEndpointLoadBalancerOptions (CreateVerifiedAccessEndpointLoadBalancerOptions'),
+    newCreateVerifiedAccessEndpointLoadBalancerOptions,
+
+    -- ** CreateVerifiedAccessTrustProviderDeviceOptions
+    CreateVerifiedAccessTrustProviderDeviceOptions (CreateVerifiedAccessTrustProviderDeviceOptions'),
+    newCreateVerifiedAccessTrustProviderDeviceOptions,
+
+    -- ** CreateVerifiedAccessTrustProviderOidcOptions
+    CreateVerifiedAccessTrustProviderOidcOptions (CreateVerifiedAccessTrustProviderOidcOptions'),
+    newCreateVerifiedAccessTrustProviderOidcOptions,
+
+    -- ** CreateVolumePermission
+    CreateVolumePermission (CreateVolumePermission'),
+    newCreateVolumePermission,
+
+    -- ** CreateVolumePermissionModifications
+    CreateVolumePermissionModifications (CreateVolumePermissionModifications'),
+    newCreateVolumePermissionModifications,
+
+    -- ** CreditSpecification
+    CreditSpecification (CreditSpecification'),
+    newCreditSpecification,
+
+    -- ** CreditSpecificationRequest
+    CreditSpecificationRequest (CreditSpecificationRequest'),
+    newCreditSpecificationRequest,
+
+    -- ** CustomerGateway
+    CustomerGateway (CustomerGateway'),
+    newCustomerGateway,
+
+    -- ** DataQuery
+    DataQuery (DataQuery'),
+    newDataQuery,
+
+    -- ** DataResponse
+    DataResponse (DataResponse'),
+    newDataResponse,
+
+    -- ** DeleteFleetError
+    DeleteFleetError (DeleteFleetError'),
+    newDeleteFleetError,
+
+    -- ** DeleteFleetErrorItem
+    DeleteFleetErrorItem (DeleteFleetErrorItem'),
+    newDeleteFleetErrorItem,
+
+    -- ** DeleteFleetSuccessItem
+    DeleteFleetSuccessItem (DeleteFleetSuccessItem'),
+    newDeleteFleetSuccessItem,
+
+    -- ** DeleteLaunchTemplateVersionsResponseErrorItem
+    DeleteLaunchTemplateVersionsResponseErrorItem (DeleteLaunchTemplateVersionsResponseErrorItem'),
+    newDeleteLaunchTemplateVersionsResponseErrorItem,
+
+    -- ** DeleteLaunchTemplateVersionsResponseSuccessItem
+    DeleteLaunchTemplateVersionsResponseSuccessItem (DeleteLaunchTemplateVersionsResponseSuccessItem'),
+    newDeleteLaunchTemplateVersionsResponseSuccessItem,
+
+    -- ** DeleteQueuedReservedInstancesError
+    DeleteQueuedReservedInstancesError (DeleteQueuedReservedInstancesError'),
+    newDeleteQueuedReservedInstancesError,
+
+    -- ** DeregisterInstanceTagAttributeRequest
+    DeregisterInstanceTagAttributeRequest (DeregisterInstanceTagAttributeRequest'),
+    newDeregisterInstanceTagAttributeRequest,
+
+    -- ** DescribeFastLaunchImagesSuccessItem
+    DescribeFastLaunchImagesSuccessItem (DescribeFastLaunchImagesSuccessItem'),
+    newDescribeFastLaunchImagesSuccessItem,
+
+    -- ** DescribeFastSnapshotRestoreSuccessItem
+    DescribeFastSnapshotRestoreSuccessItem (DescribeFastSnapshotRestoreSuccessItem'),
+    newDescribeFastSnapshotRestoreSuccessItem,
+
+    -- ** DescribeFleetError
+    DescribeFleetError (DescribeFleetError'),
+    newDescribeFleetError,
+
+    -- ** DescribeFleetsInstances
+    DescribeFleetsInstances (DescribeFleetsInstances'),
+    newDescribeFleetsInstances,
+
+    -- ** DestinationOptionsRequest
+    DestinationOptionsRequest (DestinationOptionsRequest'),
+    newDestinationOptionsRequest,
+
+    -- ** DestinationOptionsResponse
+    DestinationOptionsResponse (DestinationOptionsResponse'),
+    newDestinationOptionsResponse,
+
+    -- ** DeviceOptions
+    DeviceOptions (DeviceOptions'),
+    newDeviceOptions,
+
+    -- ** DhcpConfiguration
+    DhcpConfiguration (DhcpConfiguration'),
+    newDhcpConfiguration,
+
+    -- ** DhcpOptions
+    DhcpOptions (DhcpOptions'),
+    newDhcpOptions,
+
+    -- ** DirectoryServiceAuthentication
+    DirectoryServiceAuthentication (DirectoryServiceAuthentication'),
+    newDirectoryServiceAuthentication,
+
+    -- ** DirectoryServiceAuthenticationRequest
+    DirectoryServiceAuthenticationRequest (DirectoryServiceAuthenticationRequest'),
+    newDirectoryServiceAuthenticationRequest,
+
+    -- ** DisableFastSnapshotRestoreErrorItem
+    DisableFastSnapshotRestoreErrorItem (DisableFastSnapshotRestoreErrorItem'),
+    newDisableFastSnapshotRestoreErrorItem,
+
+    -- ** DisableFastSnapshotRestoreStateError
+    DisableFastSnapshotRestoreStateError (DisableFastSnapshotRestoreStateError'),
+    newDisableFastSnapshotRestoreStateError,
+
+    -- ** DisableFastSnapshotRestoreStateErrorItem
+    DisableFastSnapshotRestoreStateErrorItem (DisableFastSnapshotRestoreStateErrorItem'),
+    newDisableFastSnapshotRestoreStateErrorItem,
+
+    -- ** DisableFastSnapshotRestoreSuccessItem
+    DisableFastSnapshotRestoreSuccessItem (DisableFastSnapshotRestoreSuccessItem'),
+    newDisableFastSnapshotRestoreSuccessItem,
+
+    -- ** DiskImage
+    DiskImage (DiskImage'),
+    newDiskImage,
+
+    -- ** DiskImageDescription
+    DiskImageDescription (DiskImageDescription'),
+    newDiskImageDescription,
+
+    -- ** DiskImageDetail
+    DiskImageDetail (DiskImageDetail'),
+    newDiskImageDetail,
+
+    -- ** DiskImageVolumeDescription
+    DiskImageVolumeDescription (DiskImageVolumeDescription'),
+    newDiskImageVolumeDescription,
+
+    -- ** DiskInfo
+    DiskInfo (DiskInfo'),
+    newDiskInfo,
+
+    -- ** DnsEntry
+    DnsEntry (DnsEntry'),
+    newDnsEntry,
+
+    -- ** DnsOptions
+    DnsOptions (DnsOptions'),
+    newDnsOptions,
+
+    -- ** DnsOptionsSpecification
+    DnsOptionsSpecification (DnsOptionsSpecification'),
+    newDnsOptionsSpecification,
+
+    -- ** DnsServersOptionsModifyStructure
+    DnsServersOptionsModifyStructure (DnsServersOptionsModifyStructure'),
+    newDnsServersOptionsModifyStructure,
+
+    -- ** EbsBlockDevice
+    EbsBlockDevice (EbsBlockDevice'),
+    newEbsBlockDevice,
+
+    -- ** EbsInfo
+    EbsInfo (EbsInfo'),
+    newEbsInfo,
+
+    -- ** EbsInstanceBlockDevice
+    EbsInstanceBlockDevice (EbsInstanceBlockDevice'),
+    newEbsInstanceBlockDevice,
+
+    -- ** EbsInstanceBlockDeviceSpecification
+    EbsInstanceBlockDeviceSpecification (EbsInstanceBlockDeviceSpecification'),
+    newEbsInstanceBlockDeviceSpecification,
+
+    -- ** EbsOptimizedInfo
+    EbsOptimizedInfo (EbsOptimizedInfo'),
+    newEbsOptimizedInfo,
+
+    -- ** EfaInfo
+    EfaInfo (EfaInfo'),
+    newEfaInfo,
+
+    -- ** EgressOnlyInternetGateway
+    EgressOnlyInternetGateway (EgressOnlyInternetGateway'),
+    newEgressOnlyInternetGateway,
+
+    -- ** ElasticGpuAssociation
+    ElasticGpuAssociation (ElasticGpuAssociation'),
+    newElasticGpuAssociation,
+
+    -- ** ElasticGpuHealth
+    ElasticGpuHealth (ElasticGpuHealth'),
+    newElasticGpuHealth,
+
+    -- ** ElasticGpuSpecification
+    ElasticGpuSpecification (ElasticGpuSpecification'),
+    newElasticGpuSpecification,
+
+    -- ** ElasticGpuSpecificationResponse
+    ElasticGpuSpecificationResponse (ElasticGpuSpecificationResponse'),
+    newElasticGpuSpecificationResponse,
+
+    -- ** ElasticGpus
+    ElasticGpus (ElasticGpus'),
+    newElasticGpus,
+
+    -- ** ElasticInferenceAccelerator
+    ElasticInferenceAccelerator (ElasticInferenceAccelerator'),
+    newElasticInferenceAccelerator,
+
+    -- ** ElasticInferenceAcceleratorAssociation
+    ElasticInferenceAcceleratorAssociation (ElasticInferenceAcceleratorAssociation'),
+    newElasticInferenceAcceleratorAssociation,
+
+    -- ** EnaSrdSpecification
+    EnaSrdSpecification (EnaSrdSpecification'),
+    newEnaSrdSpecification,
+
+    -- ** EnaSrdUdpSpecification
+    EnaSrdUdpSpecification (EnaSrdUdpSpecification'),
+    newEnaSrdUdpSpecification,
+
+    -- ** EnableFastSnapshotRestoreErrorItem
+    EnableFastSnapshotRestoreErrorItem (EnableFastSnapshotRestoreErrorItem'),
+    newEnableFastSnapshotRestoreErrorItem,
+
+    -- ** EnableFastSnapshotRestoreStateError
+    EnableFastSnapshotRestoreStateError (EnableFastSnapshotRestoreStateError'),
+    newEnableFastSnapshotRestoreStateError,
+
+    -- ** EnableFastSnapshotRestoreStateErrorItem
+    EnableFastSnapshotRestoreStateErrorItem (EnableFastSnapshotRestoreStateErrorItem'),
+    newEnableFastSnapshotRestoreStateErrorItem,
+
+    -- ** EnableFastSnapshotRestoreSuccessItem
+    EnableFastSnapshotRestoreSuccessItem (EnableFastSnapshotRestoreSuccessItem'),
+    newEnableFastSnapshotRestoreSuccessItem,
+
+    -- ** EnclaveOptions
+    EnclaveOptions (EnclaveOptions'),
+    newEnclaveOptions,
+
+    -- ** EnclaveOptionsRequest
+    EnclaveOptionsRequest (EnclaveOptionsRequest'),
+    newEnclaveOptionsRequest,
+
+    -- ** EventInformation
+    EventInformation (EventInformation'),
+    newEventInformation,
+
+    -- ** Explanation
+    Explanation (Explanation'),
+    newExplanation,
+
+    -- ** ExportImageTask
+    ExportImageTask (ExportImageTask'),
+    newExportImageTask,
+
+    -- ** ExportTask
+    ExportTask (ExportTask'),
+    newExportTask,
+
+    -- ** ExportTaskS3Location
+    ExportTaskS3Location (ExportTaskS3Location'),
+    newExportTaskS3Location,
+
+    -- ** ExportTaskS3LocationRequest
+    ExportTaskS3LocationRequest (ExportTaskS3LocationRequest'),
+    newExportTaskS3LocationRequest,
+
+    -- ** ExportToS3Task
+    ExportToS3Task (ExportToS3Task'),
+    newExportToS3Task,
+
+    -- ** ExportToS3TaskSpecification
+    ExportToS3TaskSpecification (ExportToS3TaskSpecification'),
+    newExportToS3TaskSpecification,
+
+    -- ** FailedCapacityReservationFleetCancellationResult
+    FailedCapacityReservationFleetCancellationResult (FailedCapacityReservationFleetCancellationResult'),
+    newFailedCapacityReservationFleetCancellationResult,
+
+    -- ** FailedQueuedPurchaseDeletion
+    FailedQueuedPurchaseDeletion (FailedQueuedPurchaseDeletion'),
+    newFailedQueuedPurchaseDeletion,
+
+    -- ** FastLaunchLaunchTemplateSpecificationRequest
+    FastLaunchLaunchTemplateSpecificationRequest (FastLaunchLaunchTemplateSpecificationRequest'),
+    newFastLaunchLaunchTemplateSpecificationRequest,
+
+    -- ** FastLaunchLaunchTemplateSpecificationResponse
+    FastLaunchLaunchTemplateSpecificationResponse (FastLaunchLaunchTemplateSpecificationResponse'),
+    newFastLaunchLaunchTemplateSpecificationResponse,
+
+    -- ** FastLaunchSnapshotConfigurationRequest
+    FastLaunchSnapshotConfigurationRequest (FastLaunchSnapshotConfigurationRequest'),
+    newFastLaunchSnapshotConfigurationRequest,
+
+    -- ** FastLaunchSnapshotConfigurationResponse
+    FastLaunchSnapshotConfigurationResponse (FastLaunchSnapshotConfigurationResponse'),
+    newFastLaunchSnapshotConfigurationResponse,
+
+    -- ** FederatedAuthentication
+    FederatedAuthentication (FederatedAuthentication'),
+    newFederatedAuthentication,
+
+    -- ** FederatedAuthenticationRequest
+    FederatedAuthenticationRequest (FederatedAuthenticationRequest'),
+    newFederatedAuthenticationRequest,
+
+    -- ** Filter
+    Filter (Filter'),
+    newFilter,
+
+    -- ** FleetCapacityReservation
+    FleetCapacityReservation (FleetCapacityReservation'),
+    newFleetCapacityReservation,
+
+    -- ** FleetData
+    FleetData (FleetData'),
+    newFleetData,
+
+    -- ** FleetLaunchTemplateConfig
+    FleetLaunchTemplateConfig (FleetLaunchTemplateConfig'),
+    newFleetLaunchTemplateConfig,
+
+    -- ** FleetLaunchTemplateConfigRequest
+    FleetLaunchTemplateConfigRequest (FleetLaunchTemplateConfigRequest'),
+    newFleetLaunchTemplateConfigRequest,
+
+    -- ** FleetLaunchTemplateOverrides
+    FleetLaunchTemplateOverrides (FleetLaunchTemplateOverrides'),
+    newFleetLaunchTemplateOverrides,
+
+    -- ** FleetLaunchTemplateOverridesRequest
+    FleetLaunchTemplateOverridesRequest (FleetLaunchTemplateOverridesRequest'),
+    newFleetLaunchTemplateOverridesRequest,
+
+    -- ** FleetLaunchTemplateSpecification
+    FleetLaunchTemplateSpecification (FleetLaunchTemplateSpecification'),
+    newFleetLaunchTemplateSpecification,
+
+    -- ** FleetLaunchTemplateSpecificationRequest
+    FleetLaunchTemplateSpecificationRequest (FleetLaunchTemplateSpecificationRequest'),
+    newFleetLaunchTemplateSpecificationRequest,
+
+    -- ** FleetSpotCapacityRebalance
+    FleetSpotCapacityRebalance (FleetSpotCapacityRebalance'),
+    newFleetSpotCapacityRebalance,
+
+    -- ** FleetSpotCapacityRebalanceRequest
+    FleetSpotCapacityRebalanceRequest (FleetSpotCapacityRebalanceRequest'),
+    newFleetSpotCapacityRebalanceRequest,
+
+    -- ** FleetSpotMaintenanceStrategies
+    FleetSpotMaintenanceStrategies (FleetSpotMaintenanceStrategies'),
+    newFleetSpotMaintenanceStrategies,
+
+    -- ** FleetSpotMaintenanceStrategiesRequest
+    FleetSpotMaintenanceStrategiesRequest (FleetSpotMaintenanceStrategiesRequest'),
+    newFleetSpotMaintenanceStrategiesRequest,
+
+    -- ** FlowLog
+    FlowLog (FlowLog'),
+    newFlowLog,
+
+    -- ** FpgaDeviceInfo
+    FpgaDeviceInfo (FpgaDeviceInfo'),
+    newFpgaDeviceInfo,
+
+    -- ** FpgaDeviceMemoryInfo
+    FpgaDeviceMemoryInfo (FpgaDeviceMemoryInfo'),
+    newFpgaDeviceMemoryInfo,
+
+    -- ** FpgaImage
+    FpgaImage (FpgaImage'),
+    newFpgaImage,
+
+    -- ** FpgaImageAttribute
+    FpgaImageAttribute (FpgaImageAttribute'),
+    newFpgaImageAttribute,
+
+    -- ** FpgaImageState
+    FpgaImageState (FpgaImageState'),
+    newFpgaImageState,
+
+    -- ** FpgaInfo
+    FpgaInfo (FpgaInfo'),
+    newFpgaInfo,
+
+    -- ** GpuDeviceInfo
+    GpuDeviceInfo (GpuDeviceInfo'),
+    newGpuDeviceInfo,
+
+    -- ** GpuDeviceMemoryInfo
+    GpuDeviceMemoryInfo (GpuDeviceMemoryInfo'),
+    newGpuDeviceMemoryInfo,
+
+    -- ** GpuInfo
+    GpuInfo (GpuInfo'),
+    newGpuInfo,
+
+    -- ** GroupIdentifier
+    GroupIdentifier (GroupIdentifier'),
+    newGroupIdentifier,
+
+    -- ** HibernationOptions
+    HibernationOptions (HibernationOptions'),
+    newHibernationOptions,
+
+    -- ** HibernationOptionsRequest
+    HibernationOptionsRequest (HibernationOptionsRequest'),
+    newHibernationOptionsRequest,
+
+    -- ** HistoryRecord
+    HistoryRecord (HistoryRecord'),
+    newHistoryRecord,
+
+    -- ** HistoryRecordEntry
+    HistoryRecordEntry (HistoryRecordEntry'),
+    newHistoryRecordEntry,
+
+    -- ** Host
+    Host (Host'),
+    newHost,
+
+    -- ** HostInstance
+    HostInstance (HostInstance'),
+    newHostInstance,
+
+    -- ** HostOffering
+    HostOffering (HostOffering'),
+    newHostOffering,
+
+    -- ** HostProperties
+    HostProperties (HostProperties'),
+    newHostProperties,
+
+    -- ** HostReservation
+    HostReservation (HostReservation'),
+    newHostReservation,
+
+    -- ** IKEVersionsListValue
+    IKEVersionsListValue (IKEVersionsListValue'),
+    newIKEVersionsListValue,
+
+    -- ** IKEVersionsRequestListValue
+    IKEVersionsRequestListValue (IKEVersionsRequestListValue'),
+    newIKEVersionsRequestListValue,
+
+    -- ** IamInstanceProfile
+    IamInstanceProfile (IamInstanceProfile'),
+    newIamInstanceProfile,
+
+    -- ** IamInstanceProfileAssociation
+    IamInstanceProfileAssociation (IamInstanceProfileAssociation'),
+    newIamInstanceProfileAssociation,
+
+    -- ** IamInstanceProfileSpecification
+    IamInstanceProfileSpecification (IamInstanceProfileSpecification'),
+    newIamInstanceProfileSpecification,
+
+    -- ** IcmpTypeCode
+    IcmpTypeCode (IcmpTypeCode'),
+    newIcmpTypeCode,
+
+    -- ** IdFormat
+    IdFormat (IdFormat'),
+    newIdFormat,
+
+    -- ** Image
+    Image (Image'),
+    newImage,
+
+    -- ** ImageDiskContainer
+    ImageDiskContainer (ImageDiskContainer'),
+    newImageDiskContainer,
+
+    -- ** ImageRecycleBinInfo
+    ImageRecycleBinInfo (ImageRecycleBinInfo'),
+    newImageRecycleBinInfo,
+
+    -- ** ImportImageLicenseConfigurationRequest
+    ImportImageLicenseConfigurationRequest (ImportImageLicenseConfigurationRequest'),
+    newImportImageLicenseConfigurationRequest,
+
+    -- ** ImportImageLicenseConfigurationResponse
+    ImportImageLicenseConfigurationResponse (ImportImageLicenseConfigurationResponse'),
+    newImportImageLicenseConfigurationResponse,
+
+    -- ** ImportImageTask
+    ImportImageTask (ImportImageTask'),
+    newImportImageTask,
+
+    -- ** ImportInstanceLaunchSpecification
+    ImportInstanceLaunchSpecification (ImportInstanceLaunchSpecification'),
+    newImportInstanceLaunchSpecification,
+
+    -- ** ImportInstanceTaskDetails
+    ImportInstanceTaskDetails (ImportInstanceTaskDetails'),
+    newImportInstanceTaskDetails,
+
+    -- ** ImportInstanceVolumeDetailItem
+    ImportInstanceVolumeDetailItem (ImportInstanceVolumeDetailItem'),
+    newImportInstanceVolumeDetailItem,
+
+    -- ** ImportSnapshotTask
+    ImportSnapshotTask (ImportSnapshotTask'),
+    newImportSnapshotTask,
+
+    -- ** ImportVolumeTaskDetails
+    ImportVolumeTaskDetails (ImportVolumeTaskDetails'),
+    newImportVolumeTaskDetails,
+
+    -- ** InferenceAcceleratorInfo
+    InferenceAcceleratorInfo (InferenceAcceleratorInfo'),
+    newInferenceAcceleratorInfo,
+
+    -- ** InferenceDeviceInfo
+    InferenceDeviceInfo (InferenceDeviceInfo'),
+    newInferenceDeviceInfo,
+
+    -- ** Instance
+    Instance (Instance'),
+    newInstance,
+
+    -- ** InstanceBlockDeviceMapping
+    InstanceBlockDeviceMapping (InstanceBlockDeviceMapping'),
+    newInstanceBlockDeviceMapping,
+
+    -- ** InstanceBlockDeviceMappingSpecification
+    InstanceBlockDeviceMappingSpecification (InstanceBlockDeviceMappingSpecification'),
+    newInstanceBlockDeviceMappingSpecification,
+
+    -- ** InstanceCapacity
+    InstanceCapacity (InstanceCapacity'),
+    newInstanceCapacity,
+
+    -- ** InstanceCount
+    InstanceCount (InstanceCount'),
+    newInstanceCount,
+
+    -- ** InstanceCreditSpecification
+    InstanceCreditSpecification (InstanceCreditSpecification'),
+    newInstanceCreditSpecification,
+
+    -- ** InstanceCreditSpecificationRequest
+    InstanceCreditSpecificationRequest (InstanceCreditSpecificationRequest'),
+    newInstanceCreditSpecificationRequest,
+
+    -- ** InstanceEventWindow
+    InstanceEventWindow (InstanceEventWindow'),
+    newInstanceEventWindow,
+
+    -- ** InstanceEventWindowAssociationRequest
+    InstanceEventWindowAssociationRequest (InstanceEventWindowAssociationRequest'),
+    newInstanceEventWindowAssociationRequest,
+
+    -- ** InstanceEventWindowAssociationTarget
+    InstanceEventWindowAssociationTarget (InstanceEventWindowAssociationTarget'),
+    newInstanceEventWindowAssociationTarget,
+
+    -- ** InstanceEventWindowDisassociationRequest
+    InstanceEventWindowDisassociationRequest (InstanceEventWindowDisassociationRequest'),
+    newInstanceEventWindowDisassociationRequest,
+
+    -- ** InstanceEventWindowStateChange
+    InstanceEventWindowStateChange (InstanceEventWindowStateChange'),
+    newInstanceEventWindowStateChange,
+
+    -- ** InstanceEventWindowTimeRange
+    InstanceEventWindowTimeRange (InstanceEventWindowTimeRange'),
+    newInstanceEventWindowTimeRange,
+
+    -- ** InstanceEventWindowTimeRangeRequest
+    InstanceEventWindowTimeRangeRequest (InstanceEventWindowTimeRangeRequest'),
+    newInstanceEventWindowTimeRangeRequest,
+
+    -- ** InstanceExportDetails
+    InstanceExportDetails (InstanceExportDetails'),
+    newInstanceExportDetails,
+
+    -- ** InstanceFamilyCreditSpecification
+    InstanceFamilyCreditSpecification (InstanceFamilyCreditSpecification'),
+    newInstanceFamilyCreditSpecification,
+
+    -- ** InstanceIpv4Prefix
+    InstanceIpv4Prefix (InstanceIpv4Prefix'),
+    newInstanceIpv4Prefix,
+
+    -- ** InstanceIpv6Address
+    InstanceIpv6Address (InstanceIpv6Address'),
+    newInstanceIpv6Address,
+
+    -- ** InstanceIpv6AddressRequest
+    InstanceIpv6AddressRequest (InstanceIpv6AddressRequest'),
+    newInstanceIpv6AddressRequest,
+
+    -- ** InstanceIpv6Prefix
+    InstanceIpv6Prefix (InstanceIpv6Prefix'),
+    newInstanceIpv6Prefix,
+
+    -- ** InstanceMaintenanceOptions
+    InstanceMaintenanceOptions (InstanceMaintenanceOptions'),
+    newInstanceMaintenanceOptions,
+
+    -- ** InstanceMaintenanceOptionsRequest
+    InstanceMaintenanceOptionsRequest (InstanceMaintenanceOptionsRequest'),
+    newInstanceMaintenanceOptionsRequest,
+
+    -- ** InstanceMarketOptionsRequest
+    InstanceMarketOptionsRequest (InstanceMarketOptionsRequest'),
+    newInstanceMarketOptionsRequest,
+
+    -- ** InstanceMetadataOptionsRequest
+    InstanceMetadataOptionsRequest (InstanceMetadataOptionsRequest'),
+    newInstanceMetadataOptionsRequest,
+
+    -- ** InstanceMetadataOptionsResponse
+    InstanceMetadataOptionsResponse (InstanceMetadataOptionsResponse'),
+    newInstanceMetadataOptionsResponse,
+
+    -- ** InstanceMonitoring
+    InstanceMonitoring (InstanceMonitoring'),
+    newInstanceMonitoring,
+
+    -- ** InstanceNetworkInterface
+    InstanceNetworkInterface (InstanceNetworkInterface'),
+    newInstanceNetworkInterface,
+
+    -- ** InstanceNetworkInterfaceAssociation
+    InstanceNetworkInterfaceAssociation (InstanceNetworkInterfaceAssociation'),
+    newInstanceNetworkInterfaceAssociation,
+
+    -- ** InstanceNetworkInterfaceAttachment
+    InstanceNetworkInterfaceAttachment (InstanceNetworkInterfaceAttachment'),
+    newInstanceNetworkInterfaceAttachment,
+
+    -- ** InstanceNetworkInterfaceSpecification
+    InstanceNetworkInterfaceSpecification (InstanceNetworkInterfaceSpecification'),
+    newInstanceNetworkInterfaceSpecification,
+
+    -- ** InstancePrivateIpAddress
+    InstancePrivateIpAddress (InstancePrivateIpAddress'),
+    newInstancePrivateIpAddress,
+
+    -- ** InstanceRequirements
+    InstanceRequirements (InstanceRequirements'),
+    newInstanceRequirements,
+
+    -- ** InstanceRequirementsRequest
+    InstanceRequirementsRequest (InstanceRequirementsRequest'),
+    newInstanceRequirementsRequest,
+
+    -- ** InstanceRequirementsWithMetadataRequest
+    InstanceRequirementsWithMetadataRequest (InstanceRequirementsWithMetadataRequest'),
+    newInstanceRequirementsWithMetadataRequest,
+
+    -- ** InstanceSpecification
+    InstanceSpecification (InstanceSpecification'),
+    newInstanceSpecification,
+
+    -- ** InstanceState
+    InstanceState (InstanceState'),
+    newInstanceState,
+
+    -- ** InstanceStateChange
+    InstanceStateChange (InstanceStateChange'),
+    newInstanceStateChange,
+
+    -- ** InstanceStatus
+    InstanceStatus (InstanceStatus'),
+    newInstanceStatus,
+
+    -- ** InstanceStatusDetails
+    InstanceStatusDetails (InstanceStatusDetails'),
+    newInstanceStatusDetails,
+
+    -- ** InstanceStatusEvent
+    InstanceStatusEvent (InstanceStatusEvent'),
+    newInstanceStatusEvent,
+
+    -- ** InstanceStatusSummary
+    InstanceStatusSummary (InstanceStatusSummary'),
+    newInstanceStatusSummary,
+
+    -- ** InstanceStorageInfo
+    InstanceStorageInfo (InstanceStorageInfo'),
+    newInstanceStorageInfo,
+
+    -- ** InstanceTagNotificationAttribute
+    InstanceTagNotificationAttribute (InstanceTagNotificationAttribute'),
+    newInstanceTagNotificationAttribute,
+
+    -- ** InstanceTypeInfo
+    InstanceTypeInfo (InstanceTypeInfo'),
+    newInstanceTypeInfo,
+
+    -- ** InstanceTypeInfoFromInstanceRequirements
+    InstanceTypeInfoFromInstanceRequirements (InstanceTypeInfoFromInstanceRequirements'),
+    newInstanceTypeInfoFromInstanceRequirements,
+
+    -- ** InstanceTypeOffering
+    InstanceTypeOffering (InstanceTypeOffering'),
+    newInstanceTypeOffering,
+
+    -- ** InstanceUsage
+    InstanceUsage (InstanceUsage'),
+    newInstanceUsage,
+
+    -- ** IntegrateServices
+    IntegrateServices (IntegrateServices'),
+    newIntegrateServices,
+
+    -- ** InternetGateway
+    InternetGateway (InternetGateway'),
+    newInternetGateway,
+
+    -- ** InternetGatewayAttachment
+    InternetGatewayAttachment (InternetGatewayAttachment'),
+    newInternetGatewayAttachment,
+
+    -- ** IpPermission
+    IpPermission (IpPermission'),
+    newIpPermission,
+
+    -- ** IpRange
+    IpRange (IpRange'),
+    newIpRange,
+
+    -- ** Ipam
+    Ipam (Ipam'),
+    newIpam,
+
+    -- ** IpamAddressHistoryRecord
+    IpamAddressHistoryRecord (IpamAddressHistoryRecord'),
+    newIpamAddressHistoryRecord,
+
+    -- ** IpamCidrAuthorizationContext
+    IpamCidrAuthorizationContext (IpamCidrAuthorizationContext'),
+    newIpamCidrAuthorizationContext,
+
+    -- ** IpamOperatingRegion
+    IpamOperatingRegion (IpamOperatingRegion'),
+    newIpamOperatingRegion,
+
+    -- ** IpamPool
+    IpamPool (IpamPool'),
+    newIpamPool,
+
+    -- ** IpamPoolAllocation
+    IpamPoolAllocation (IpamPoolAllocation'),
+    newIpamPoolAllocation,
+
+    -- ** IpamPoolCidr
+    IpamPoolCidr (IpamPoolCidr'),
+    newIpamPoolCidr,
+
+    -- ** IpamPoolCidrFailureReason
+    IpamPoolCidrFailureReason (IpamPoolCidrFailureReason'),
+    newIpamPoolCidrFailureReason,
+
+    -- ** IpamResourceCidr
+    IpamResourceCidr (IpamResourceCidr'),
+    newIpamResourceCidr,
+
+    -- ** IpamResourceTag
+    IpamResourceTag (IpamResourceTag'),
+    newIpamResourceTag,
+
+    -- ** IpamScope
+    IpamScope (IpamScope'),
+    newIpamScope,
+
+    -- ** Ipv4PrefixSpecification
+    Ipv4PrefixSpecification (Ipv4PrefixSpecification'),
+    newIpv4PrefixSpecification,
+
+    -- ** Ipv4PrefixSpecificationRequest
+    Ipv4PrefixSpecificationRequest (Ipv4PrefixSpecificationRequest'),
+    newIpv4PrefixSpecificationRequest,
+
+    -- ** Ipv4PrefixSpecificationResponse
+    Ipv4PrefixSpecificationResponse (Ipv4PrefixSpecificationResponse'),
+    newIpv4PrefixSpecificationResponse,
+
+    -- ** Ipv6CidrAssociation
+    Ipv6CidrAssociation (Ipv6CidrAssociation'),
+    newIpv6CidrAssociation,
+
+    -- ** Ipv6CidrBlock
+    Ipv6CidrBlock (Ipv6CidrBlock'),
+    newIpv6CidrBlock,
+
+    -- ** Ipv6Pool
+    Ipv6Pool (Ipv6Pool'),
+    newIpv6Pool,
+
+    -- ** Ipv6PrefixSpecification
+    Ipv6PrefixSpecification (Ipv6PrefixSpecification'),
+    newIpv6PrefixSpecification,
+
+    -- ** Ipv6PrefixSpecificationRequest
+    Ipv6PrefixSpecificationRequest (Ipv6PrefixSpecificationRequest'),
+    newIpv6PrefixSpecificationRequest,
+
+    -- ** Ipv6PrefixSpecificationResponse
+    Ipv6PrefixSpecificationResponse (Ipv6PrefixSpecificationResponse'),
+    newIpv6PrefixSpecificationResponse,
+
+    -- ** Ipv6Range
+    Ipv6Range (Ipv6Range'),
+    newIpv6Range,
+
+    -- ** KeyPairInfo
+    KeyPairInfo (KeyPairInfo'),
+    newKeyPairInfo,
+
+    -- ** LastError
+    LastError (LastError'),
+    newLastError,
+
+    -- ** LaunchPermission
+    LaunchPermission (LaunchPermission'),
+    newLaunchPermission,
+
+    -- ** LaunchPermissionModifications
+    LaunchPermissionModifications (LaunchPermissionModifications'),
+    newLaunchPermissionModifications,
+
+    -- ** LaunchSpecification
+    LaunchSpecification (LaunchSpecification'),
+    newLaunchSpecification,
+
+    -- ** LaunchTemplate
+    LaunchTemplate (LaunchTemplate'),
+    newLaunchTemplate,
+
+    -- ** LaunchTemplateAndOverridesResponse
+    LaunchTemplateAndOverridesResponse (LaunchTemplateAndOverridesResponse'),
+    newLaunchTemplateAndOverridesResponse,
+
+    -- ** LaunchTemplateBlockDeviceMapping
+    LaunchTemplateBlockDeviceMapping (LaunchTemplateBlockDeviceMapping'),
+    newLaunchTemplateBlockDeviceMapping,
+
+    -- ** LaunchTemplateBlockDeviceMappingRequest
+    LaunchTemplateBlockDeviceMappingRequest (LaunchTemplateBlockDeviceMappingRequest'),
+    newLaunchTemplateBlockDeviceMappingRequest,
+
+    -- ** LaunchTemplateCapacityReservationSpecificationRequest
+    LaunchTemplateCapacityReservationSpecificationRequest (LaunchTemplateCapacityReservationSpecificationRequest'),
+    newLaunchTemplateCapacityReservationSpecificationRequest,
+
+    -- ** LaunchTemplateCapacityReservationSpecificationResponse
+    LaunchTemplateCapacityReservationSpecificationResponse (LaunchTemplateCapacityReservationSpecificationResponse'),
+    newLaunchTemplateCapacityReservationSpecificationResponse,
+
+    -- ** LaunchTemplateConfig
+    LaunchTemplateConfig (LaunchTemplateConfig'),
+    newLaunchTemplateConfig,
+
+    -- ** LaunchTemplateCpuOptions
+    LaunchTemplateCpuOptions (LaunchTemplateCpuOptions'),
+    newLaunchTemplateCpuOptions,
+
+    -- ** LaunchTemplateCpuOptionsRequest
+    LaunchTemplateCpuOptionsRequest (LaunchTemplateCpuOptionsRequest'),
+    newLaunchTemplateCpuOptionsRequest,
+
+    -- ** LaunchTemplateEbsBlockDevice
+    LaunchTemplateEbsBlockDevice (LaunchTemplateEbsBlockDevice'),
+    newLaunchTemplateEbsBlockDevice,
+
+    -- ** LaunchTemplateEbsBlockDeviceRequest
+    LaunchTemplateEbsBlockDeviceRequest (LaunchTemplateEbsBlockDeviceRequest'),
+    newLaunchTemplateEbsBlockDeviceRequest,
+
+    -- ** LaunchTemplateElasticInferenceAccelerator
+    LaunchTemplateElasticInferenceAccelerator (LaunchTemplateElasticInferenceAccelerator'),
+    newLaunchTemplateElasticInferenceAccelerator,
+
+    -- ** LaunchTemplateElasticInferenceAcceleratorResponse
+    LaunchTemplateElasticInferenceAcceleratorResponse (LaunchTemplateElasticInferenceAcceleratorResponse'),
+    newLaunchTemplateElasticInferenceAcceleratorResponse,
+
+    -- ** LaunchTemplateEnclaveOptions
+    LaunchTemplateEnclaveOptions (LaunchTemplateEnclaveOptions'),
+    newLaunchTemplateEnclaveOptions,
+
+    -- ** LaunchTemplateEnclaveOptionsRequest
+    LaunchTemplateEnclaveOptionsRequest (LaunchTemplateEnclaveOptionsRequest'),
+    newLaunchTemplateEnclaveOptionsRequest,
+
+    -- ** LaunchTemplateHibernationOptions
+    LaunchTemplateHibernationOptions (LaunchTemplateHibernationOptions'),
+    newLaunchTemplateHibernationOptions,
+
+    -- ** LaunchTemplateHibernationOptionsRequest
+    LaunchTemplateHibernationOptionsRequest (LaunchTemplateHibernationOptionsRequest'),
+    newLaunchTemplateHibernationOptionsRequest,
+
+    -- ** LaunchTemplateIamInstanceProfileSpecification
+    LaunchTemplateIamInstanceProfileSpecification (LaunchTemplateIamInstanceProfileSpecification'),
+    newLaunchTemplateIamInstanceProfileSpecification,
+
+    -- ** LaunchTemplateIamInstanceProfileSpecificationRequest
+    LaunchTemplateIamInstanceProfileSpecificationRequest (LaunchTemplateIamInstanceProfileSpecificationRequest'),
+    newLaunchTemplateIamInstanceProfileSpecificationRequest,
+
+    -- ** LaunchTemplateInstanceMaintenanceOptions
+    LaunchTemplateInstanceMaintenanceOptions (LaunchTemplateInstanceMaintenanceOptions'),
+    newLaunchTemplateInstanceMaintenanceOptions,
+
+    -- ** LaunchTemplateInstanceMaintenanceOptionsRequest
+    LaunchTemplateInstanceMaintenanceOptionsRequest (LaunchTemplateInstanceMaintenanceOptionsRequest'),
+    newLaunchTemplateInstanceMaintenanceOptionsRequest,
+
+    -- ** LaunchTemplateInstanceMarketOptions
+    LaunchTemplateInstanceMarketOptions (LaunchTemplateInstanceMarketOptions'),
+    newLaunchTemplateInstanceMarketOptions,
+
+    -- ** LaunchTemplateInstanceMarketOptionsRequest
+    LaunchTemplateInstanceMarketOptionsRequest (LaunchTemplateInstanceMarketOptionsRequest'),
+    newLaunchTemplateInstanceMarketOptionsRequest,
+
+    -- ** LaunchTemplateInstanceMetadataOptions
+    LaunchTemplateInstanceMetadataOptions (LaunchTemplateInstanceMetadataOptions'),
+    newLaunchTemplateInstanceMetadataOptions,
+
+    -- ** LaunchTemplateInstanceMetadataOptionsRequest
+    LaunchTemplateInstanceMetadataOptionsRequest (LaunchTemplateInstanceMetadataOptionsRequest'),
+    newLaunchTemplateInstanceMetadataOptionsRequest,
+
+    -- ** LaunchTemplateInstanceNetworkInterfaceSpecification
+    LaunchTemplateInstanceNetworkInterfaceSpecification (LaunchTemplateInstanceNetworkInterfaceSpecification'),
+    newLaunchTemplateInstanceNetworkInterfaceSpecification,
+
+    -- ** LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (LaunchTemplateInstanceNetworkInterfaceSpecificationRequest'),
+    newLaunchTemplateInstanceNetworkInterfaceSpecificationRequest,
+
+    -- ** LaunchTemplateLicenseConfiguration
+    LaunchTemplateLicenseConfiguration (LaunchTemplateLicenseConfiguration'),
+    newLaunchTemplateLicenseConfiguration,
+
+    -- ** LaunchTemplateLicenseConfigurationRequest
+    LaunchTemplateLicenseConfigurationRequest (LaunchTemplateLicenseConfigurationRequest'),
+    newLaunchTemplateLicenseConfigurationRequest,
+
+    -- ** LaunchTemplateOverrides
+    LaunchTemplateOverrides (LaunchTemplateOverrides'),
+    newLaunchTemplateOverrides,
+
+    -- ** LaunchTemplatePlacement
+    LaunchTemplatePlacement (LaunchTemplatePlacement'),
+    newLaunchTemplatePlacement,
+
+    -- ** LaunchTemplatePlacementRequest
+    LaunchTemplatePlacementRequest (LaunchTemplatePlacementRequest'),
+    newLaunchTemplatePlacementRequest,
+
+    -- ** LaunchTemplatePrivateDnsNameOptions
+    LaunchTemplatePrivateDnsNameOptions (LaunchTemplatePrivateDnsNameOptions'),
+    newLaunchTemplatePrivateDnsNameOptions,
+
+    -- ** LaunchTemplatePrivateDnsNameOptionsRequest
+    LaunchTemplatePrivateDnsNameOptionsRequest (LaunchTemplatePrivateDnsNameOptionsRequest'),
+    newLaunchTemplatePrivateDnsNameOptionsRequest,
+
+    -- ** LaunchTemplateSpecification
+    LaunchTemplateSpecification (LaunchTemplateSpecification'),
+    newLaunchTemplateSpecification,
+
+    -- ** LaunchTemplateSpotMarketOptions
+    LaunchTemplateSpotMarketOptions (LaunchTemplateSpotMarketOptions'),
+    newLaunchTemplateSpotMarketOptions,
+
+    -- ** LaunchTemplateSpotMarketOptionsRequest
+    LaunchTemplateSpotMarketOptionsRequest (LaunchTemplateSpotMarketOptionsRequest'),
+    newLaunchTemplateSpotMarketOptionsRequest,
+
+    -- ** LaunchTemplateTagSpecification
+    LaunchTemplateTagSpecification (LaunchTemplateTagSpecification'),
+    newLaunchTemplateTagSpecification,
+
+    -- ** LaunchTemplateTagSpecificationRequest
+    LaunchTemplateTagSpecificationRequest (LaunchTemplateTagSpecificationRequest'),
+    newLaunchTemplateTagSpecificationRequest,
+
+    -- ** LaunchTemplateVersion
+    LaunchTemplateVersion (LaunchTemplateVersion'),
+    newLaunchTemplateVersion,
+
+    -- ** LaunchTemplatesMonitoring
+    LaunchTemplatesMonitoring (LaunchTemplatesMonitoring'),
+    newLaunchTemplatesMonitoring,
+
+    -- ** LaunchTemplatesMonitoringRequest
+    LaunchTemplatesMonitoringRequest (LaunchTemplatesMonitoringRequest'),
+    newLaunchTemplatesMonitoringRequest,
+
+    -- ** LicenseConfiguration
+    LicenseConfiguration (LicenseConfiguration'),
+    newLicenseConfiguration,
+
+    -- ** LicenseConfigurationRequest
+    LicenseConfigurationRequest (LicenseConfigurationRequest'),
+    newLicenseConfigurationRequest,
+
+    -- ** LoadBalancersConfig
+    LoadBalancersConfig (LoadBalancersConfig'),
+    newLoadBalancersConfig,
+
+    -- ** LoadPermission
+    LoadPermission (LoadPermission'),
+    newLoadPermission,
+
+    -- ** LoadPermissionModifications
+    LoadPermissionModifications (LoadPermissionModifications'),
+    newLoadPermissionModifications,
+
+    -- ** LoadPermissionRequest
+    LoadPermissionRequest (LoadPermissionRequest'),
+    newLoadPermissionRequest,
+
+    -- ** LocalGateway
+    LocalGateway (LocalGateway'),
+    newLocalGateway,
+
+    -- ** LocalGatewayRoute
+    LocalGatewayRoute (LocalGatewayRoute'),
+    newLocalGatewayRoute,
+
+    -- ** LocalGatewayRouteTable
+    LocalGatewayRouteTable (LocalGatewayRouteTable'),
+    newLocalGatewayRouteTable,
+
+    -- ** LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation (LocalGatewayRouteTableVirtualInterfaceGroupAssociation'),
+    newLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+
+    -- ** LocalGatewayRouteTableVpcAssociation
+    LocalGatewayRouteTableVpcAssociation (LocalGatewayRouteTableVpcAssociation'),
+    newLocalGatewayRouteTableVpcAssociation,
+
+    -- ** LocalGatewayVirtualInterface
+    LocalGatewayVirtualInterface (LocalGatewayVirtualInterface'),
+    newLocalGatewayVirtualInterface,
+
+    -- ** LocalGatewayVirtualInterfaceGroup
+    LocalGatewayVirtualInterfaceGroup (LocalGatewayVirtualInterfaceGroup'),
+    newLocalGatewayVirtualInterfaceGroup,
+
+    -- ** ManagedPrefixList
+    ManagedPrefixList (ManagedPrefixList'),
+    newManagedPrefixList,
+
+    -- ** MemoryGiBPerVCpu
+    MemoryGiBPerVCpu (MemoryGiBPerVCpu'),
+    newMemoryGiBPerVCpu,
+
+    -- ** MemoryGiBPerVCpuRequest
+    MemoryGiBPerVCpuRequest (MemoryGiBPerVCpuRequest'),
+    newMemoryGiBPerVCpuRequest,
+
+    -- ** MemoryInfo
+    MemoryInfo (MemoryInfo'),
+    newMemoryInfo,
+
+    -- ** MemoryMiB
+    MemoryMiB (MemoryMiB'),
+    newMemoryMiB,
+
+    -- ** MemoryMiBRequest
+    MemoryMiBRequest (MemoryMiBRequest'),
+    newMemoryMiBRequest,
+
+    -- ** MetricPoint
+    MetricPoint (MetricPoint'),
+    newMetricPoint,
+
+    -- ** ModifyTransitGatewayOptions
+    ModifyTransitGatewayOptions (ModifyTransitGatewayOptions'),
+    newModifyTransitGatewayOptions,
+
+    -- ** ModifyTransitGatewayVpcAttachmentRequestOptions
+    ModifyTransitGatewayVpcAttachmentRequestOptions (ModifyTransitGatewayVpcAttachmentRequestOptions'),
+    newModifyTransitGatewayVpcAttachmentRequestOptions,
+
+    -- ** ModifyVerifiedAccessEndpointEniOptions
+    ModifyVerifiedAccessEndpointEniOptions (ModifyVerifiedAccessEndpointEniOptions'),
+    newModifyVerifiedAccessEndpointEniOptions,
+
+    -- ** ModifyVerifiedAccessEndpointLoadBalancerOptions
+    ModifyVerifiedAccessEndpointLoadBalancerOptions (ModifyVerifiedAccessEndpointLoadBalancerOptions'),
+    newModifyVerifiedAccessEndpointLoadBalancerOptions,
+
+    -- ** ModifyVerifiedAccessTrustProviderOidcOptions
+    ModifyVerifiedAccessTrustProviderOidcOptions (ModifyVerifiedAccessTrustProviderOidcOptions'),
+    newModifyVerifiedAccessTrustProviderOidcOptions,
+
+    -- ** ModifyVpnTunnelOptionsSpecification
+    ModifyVpnTunnelOptionsSpecification (ModifyVpnTunnelOptionsSpecification'),
+    newModifyVpnTunnelOptionsSpecification,
+
+    -- ** Monitoring
+    Monitoring (Monitoring'),
+    newMonitoring,
+
+    -- ** MovingAddressStatus
+    MovingAddressStatus (MovingAddressStatus'),
+    newMovingAddressStatus,
+
+    -- ** NatGateway
+    NatGateway (NatGateway'),
+    newNatGateway,
+
+    -- ** NatGatewayAddress
+    NatGatewayAddress (NatGatewayAddress'),
+    newNatGatewayAddress,
+
+    -- ** NetworkAcl
+    NetworkAcl (NetworkAcl'),
+    newNetworkAcl,
+
+    -- ** NetworkAclAssociation
+    NetworkAclAssociation (NetworkAclAssociation'),
+    newNetworkAclAssociation,
+
+    -- ** NetworkAclEntry
+    NetworkAclEntry (NetworkAclEntry'),
+    newNetworkAclEntry,
+
+    -- ** NetworkBandwidthGbps
+    NetworkBandwidthGbps (NetworkBandwidthGbps'),
+    newNetworkBandwidthGbps,
+
+    -- ** NetworkBandwidthGbpsRequest
+    NetworkBandwidthGbpsRequest (NetworkBandwidthGbpsRequest'),
+    newNetworkBandwidthGbpsRequest,
+
+    -- ** NetworkCardInfo
+    NetworkCardInfo (NetworkCardInfo'),
+    newNetworkCardInfo,
+
+    -- ** NetworkInfo
+    NetworkInfo (NetworkInfo'),
+    newNetworkInfo,
+
+    -- ** NetworkInsightsAccessScope
+    NetworkInsightsAccessScope (NetworkInsightsAccessScope'),
+    newNetworkInsightsAccessScope,
+
+    -- ** NetworkInsightsAccessScopeAnalysis
+    NetworkInsightsAccessScopeAnalysis (NetworkInsightsAccessScopeAnalysis'),
+    newNetworkInsightsAccessScopeAnalysis,
+
+    -- ** NetworkInsightsAccessScopeContent
+    NetworkInsightsAccessScopeContent (NetworkInsightsAccessScopeContent'),
+    newNetworkInsightsAccessScopeContent,
+
+    -- ** NetworkInsightsAnalysis
+    NetworkInsightsAnalysis (NetworkInsightsAnalysis'),
+    newNetworkInsightsAnalysis,
+
+    -- ** NetworkInsightsPath
+    NetworkInsightsPath (NetworkInsightsPath'),
+    newNetworkInsightsPath,
+
+    -- ** NetworkInterface
+    NetworkInterface (NetworkInterface'),
+    newNetworkInterface,
+
+    -- ** NetworkInterfaceAssociation
+    NetworkInterfaceAssociation (NetworkInterfaceAssociation'),
+    newNetworkInterfaceAssociation,
+
+    -- ** NetworkInterfaceAttachment
+    NetworkInterfaceAttachment (NetworkInterfaceAttachment'),
+    newNetworkInterfaceAttachment,
+
+    -- ** NetworkInterfaceAttachmentChanges
+    NetworkInterfaceAttachmentChanges (NetworkInterfaceAttachmentChanges'),
+    newNetworkInterfaceAttachmentChanges,
+
+    -- ** NetworkInterfaceCount
+    NetworkInterfaceCount (NetworkInterfaceCount'),
+    newNetworkInterfaceCount,
+
+    -- ** NetworkInterfaceCountRequest
+    NetworkInterfaceCountRequest (NetworkInterfaceCountRequest'),
+    newNetworkInterfaceCountRequest,
+
+    -- ** NetworkInterfaceIpv6Address
+    NetworkInterfaceIpv6Address (NetworkInterfaceIpv6Address'),
+    newNetworkInterfaceIpv6Address,
+
+    -- ** NetworkInterfacePermission
+    NetworkInterfacePermission (NetworkInterfacePermission'),
+    newNetworkInterfacePermission,
+
+    -- ** NetworkInterfacePermissionState
+    NetworkInterfacePermissionState (NetworkInterfacePermissionState'),
+    newNetworkInterfacePermissionState,
+
+    -- ** NetworkInterfacePrivateIpAddress
+    NetworkInterfacePrivateIpAddress (NetworkInterfacePrivateIpAddress'),
+    newNetworkInterfacePrivateIpAddress,
+
+    -- ** NewDhcpConfiguration
+    NewDhcpConfiguration (NewDhcpConfiguration'),
+    newNewDhcpConfiguration,
+
+    -- ** OidcOptions
+    OidcOptions (OidcOptions'),
+    newOidcOptions,
+
+    -- ** OnDemandOptions
+    OnDemandOptions (OnDemandOptions'),
+    newOnDemandOptions,
+
+    -- ** OnDemandOptionsRequest
+    OnDemandOptionsRequest (OnDemandOptionsRequest'),
+    newOnDemandOptionsRequest,
+
+    -- ** PacketHeaderStatement
+    PacketHeaderStatement (PacketHeaderStatement'),
+    newPacketHeaderStatement,
+
+    -- ** PacketHeaderStatementRequest
+    PacketHeaderStatementRequest (PacketHeaderStatementRequest'),
+    newPacketHeaderStatementRequest,
+
+    -- ** PathComponent
+    PathComponent (PathComponent'),
+    newPathComponent,
+
+    -- ** PathStatement
+    PathStatement (PathStatement'),
+    newPathStatement,
+
+    -- ** PathStatementRequest
+    PathStatementRequest (PathStatementRequest'),
+    newPathStatementRequest,
+
+    -- ** PciId
+    PciId (PciId'),
+    newPciId,
+
+    -- ** PeeringAttachmentStatus
+    PeeringAttachmentStatus (PeeringAttachmentStatus'),
+    newPeeringAttachmentStatus,
+
+    -- ** PeeringConnectionOptions
+    PeeringConnectionOptions (PeeringConnectionOptions'),
+    newPeeringConnectionOptions,
+
+    -- ** PeeringConnectionOptionsRequest
+    PeeringConnectionOptionsRequest (PeeringConnectionOptionsRequest'),
+    newPeeringConnectionOptionsRequest,
+
+    -- ** PeeringTgwInfo
+    PeeringTgwInfo (PeeringTgwInfo'),
+    newPeeringTgwInfo,
+
+    -- ** Phase1DHGroupNumbersListValue
+    Phase1DHGroupNumbersListValue (Phase1DHGroupNumbersListValue'),
+    newPhase1DHGroupNumbersListValue,
+
+    -- ** Phase1DHGroupNumbersRequestListValue
+    Phase1DHGroupNumbersRequestListValue (Phase1DHGroupNumbersRequestListValue'),
+    newPhase1DHGroupNumbersRequestListValue,
+
+    -- ** Phase1EncryptionAlgorithmsListValue
+    Phase1EncryptionAlgorithmsListValue (Phase1EncryptionAlgorithmsListValue'),
+    newPhase1EncryptionAlgorithmsListValue,
+
+    -- ** Phase1EncryptionAlgorithmsRequestListValue
+    Phase1EncryptionAlgorithmsRequestListValue (Phase1EncryptionAlgorithmsRequestListValue'),
+    newPhase1EncryptionAlgorithmsRequestListValue,
+
+    -- ** Phase1IntegrityAlgorithmsListValue
+    Phase1IntegrityAlgorithmsListValue (Phase1IntegrityAlgorithmsListValue'),
+    newPhase1IntegrityAlgorithmsListValue,
+
+    -- ** Phase1IntegrityAlgorithmsRequestListValue
+    Phase1IntegrityAlgorithmsRequestListValue (Phase1IntegrityAlgorithmsRequestListValue'),
+    newPhase1IntegrityAlgorithmsRequestListValue,
+
+    -- ** Phase2DHGroupNumbersListValue
+    Phase2DHGroupNumbersListValue (Phase2DHGroupNumbersListValue'),
+    newPhase2DHGroupNumbersListValue,
+
+    -- ** Phase2DHGroupNumbersRequestListValue
+    Phase2DHGroupNumbersRequestListValue (Phase2DHGroupNumbersRequestListValue'),
+    newPhase2DHGroupNumbersRequestListValue,
+
+    -- ** Phase2EncryptionAlgorithmsListValue
+    Phase2EncryptionAlgorithmsListValue (Phase2EncryptionAlgorithmsListValue'),
+    newPhase2EncryptionAlgorithmsListValue,
+
+    -- ** Phase2EncryptionAlgorithmsRequestListValue
+    Phase2EncryptionAlgorithmsRequestListValue (Phase2EncryptionAlgorithmsRequestListValue'),
+    newPhase2EncryptionAlgorithmsRequestListValue,
+
+    -- ** Phase2IntegrityAlgorithmsListValue
+    Phase2IntegrityAlgorithmsListValue (Phase2IntegrityAlgorithmsListValue'),
+    newPhase2IntegrityAlgorithmsListValue,
+
+    -- ** Phase2IntegrityAlgorithmsRequestListValue
+    Phase2IntegrityAlgorithmsRequestListValue (Phase2IntegrityAlgorithmsRequestListValue'),
+    newPhase2IntegrityAlgorithmsRequestListValue,
+
+    -- ** Placement
+    Placement (Placement'),
+    newPlacement,
+
+    -- ** PlacementGroup
+    PlacementGroup (PlacementGroup'),
+    newPlacementGroup,
+
+    -- ** PlacementGroupInfo
+    PlacementGroupInfo (PlacementGroupInfo'),
+    newPlacementGroupInfo,
+
+    -- ** PlacementResponse
+    PlacementResponse (PlacementResponse'),
+    newPlacementResponse,
+
+    -- ** PoolCidrBlock
+    PoolCidrBlock (PoolCidrBlock'),
+    newPoolCidrBlock,
+
+    -- ** PortRange
+    PortRange (PortRange'),
+    newPortRange,
+
+    -- ** PrefixList
+    PrefixList (PrefixList'),
+    newPrefixList,
+
+    -- ** PrefixListAssociation
+    PrefixListAssociation (PrefixListAssociation'),
+    newPrefixListAssociation,
+
+    -- ** PrefixListEntry
+    PrefixListEntry (PrefixListEntry'),
+    newPrefixListEntry,
+
+    -- ** PrefixListId
+    PrefixListId (PrefixListId'),
+    newPrefixListId,
+
+    -- ** PriceSchedule
+    PriceSchedule (PriceSchedule'),
+    newPriceSchedule,
+
+    -- ** PriceScheduleSpecification
+    PriceScheduleSpecification (PriceScheduleSpecification'),
+    newPriceScheduleSpecification,
+
+    -- ** PricingDetail
+    PricingDetail (PricingDetail'),
+    newPricingDetail,
+
+    -- ** PrincipalIdFormat
+    PrincipalIdFormat (PrincipalIdFormat'),
+    newPrincipalIdFormat,
+
+    -- ** PrivateDnsDetails
+    PrivateDnsDetails (PrivateDnsDetails'),
+    newPrivateDnsDetails,
+
+    -- ** PrivateDnsNameConfiguration
+    PrivateDnsNameConfiguration (PrivateDnsNameConfiguration'),
+    newPrivateDnsNameConfiguration,
+
+    -- ** PrivateDnsNameOptionsOnLaunch
+    PrivateDnsNameOptionsOnLaunch (PrivateDnsNameOptionsOnLaunch'),
+    newPrivateDnsNameOptionsOnLaunch,
+
+    -- ** PrivateDnsNameOptionsRequest
+    PrivateDnsNameOptionsRequest (PrivateDnsNameOptionsRequest'),
+    newPrivateDnsNameOptionsRequest,
+
+    -- ** PrivateDnsNameOptionsResponse
+    PrivateDnsNameOptionsResponse (PrivateDnsNameOptionsResponse'),
+    newPrivateDnsNameOptionsResponse,
+
+    -- ** PrivateIpAddressSpecification
+    PrivateIpAddressSpecification (PrivateIpAddressSpecification'),
+    newPrivateIpAddressSpecification,
+
+    -- ** ProcessorInfo
+    ProcessorInfo (ProcessorInfo'),
+    newProcessorInfo,
+
+    -- ** ProductCode
+    ProductCode (ProductCode'),
+    newProductCode,
+
+    -- ** PropagatingVgw
+    PropagatingVgw (PropagatingVgw'),
+    newPropagatingVgw,
+
+    -- ** ProvisionedBandwidth
+    ProvisionedBandwidth (ProvisionedBandwidth'),
+    newProvisionedBandwidth,
+
+    -- ** PtrUpdateStatus
+    PtrUpdateStatus (PtrUpdateStatus'),
+    newPtrUpdateStatus,
+
+    -- ** PublicIpv4Pool
+    PublicIpv4Pool (PublicIpv4Pool'),
+    newPublicIpv4Pool,
+
+    -- ** PublicIpv4PoolRange
+    PublicIpv4PoolRange (PublicIpv4PoolRange'),
+    newPublicIpv4PoolRange,
+
+    -- ** Purchase
+    Purchase (Purchase'),
+    newPurchase,
+
+    -- ** PurchaseRequest
+    PurchaseRequest (PurchaseRequest'),
+    newPurchaseRequest,
+
+    -- ** RecurringCharge
+    RecurringCharge (RecurringCharge'),
+    newRecurringCharge,
+
+    -- ** ReferencedSecurityGroup
+    ReferencedSecurityGroup (ReferencedSecurityGroup'),
+    newReferencedSecurityGroup,
+
+    -- ** RegionInfo
+    RegionInfo (RegionInfo'),
+    newRegionInfo,
+
+    -- ** RegisterInstanceTagAttributeRequest
+    RegisterInstanceTagAttributeRequest (RegisterInstanceTagAttributeRequest'),
+    newRegisterInstanceTagAttributeRequest,
+
+    -- ** RemoveIpamOperatingRegion
+    RemoveIpamOperatingRegion (RemoveIpamOperatingRegion'),
+    newRemoveIpamOperatingRegion,
+
+    -- ** RemovePrefixListEntry
+    RemovePrefixListEntry (RemovePrefixListEntry'),
+    newRemovePrefixListEntry,
+
+    -- ** ReplaceRootVolumeTask
+    ReplaceRootVolumeTask (ReplaceRootVolumeTask'),
+    newReplaceRootVolumeTask,
+
+    -- ** RequestIpamResourceTag
+    RequestIpamResourceTag (RequestIpamResourceTag'),
+    newRequestIpamResourceTag,
+
+    -- ** RequestLaunchTemplateData
+    RequestLaunchTemplateData (RequestLaunchTemplateData'),
+    newRequestLaunchTemplateData,
+
+    -- ** RequestSpotLaunchSpecification
+    RequestSpotLaunchSpecification (RequestSpotLaunchSpecification'),
+    newRequestSpotLaunchSpecification,
+
+    -- ** Reservation
+    Reservation (Reservation'),
+    newReservation,
+
+    -- ** ReservationFleetInstanceSpecification
+    ReservationFleetInstanceSpecification (ReservationFleetInstanceSpecification'),
+    newReservationFleetInstanceSpecification,
+
+    -- ** ReservationValue
+    ReservationValue (ReservationValue'),
+    newReservationValue,
+
+    -- ** ReservedInstanceLimitPrice
+    ReservedInstanceLimitPrice (ReservedInstanceLimitPrice'),
+    newReservedInstanceLimitPrice,
+
+    -- ** ReservedInstanceReservationValue
+    ReservedInstanceReservationValue (ReservedInstanceReservationValue'),
+    newReservedInstanceReservationValue,
+
+    -- ** ReservedInstances
+    ReservedInstances (ReservedInstances'),
+    newReservedInstances,
+
+    -- ** ReservedInstancesConfiguration
+    ReservedInstancesConfiguration (ReservedInstancesConfiguration'),
+    newReservedInstancesConfiguration,
+
+    -- ** ReservedInstancesId
+    ReservedInstancesId (ReservedInstancesId'),
+    newReservedInstancesId,
+
+    -- ** ReservedInstancesListing
+    ReservedInstancesListing (ReservedInstancesListing'),
+    newReservedInstancesListing,
+
+    -- ** ReservedInstancesModification
+    ReservedInstancesModification (ReservedInstancesModification'),
+    newReservedInstancesModification,
+
+    -- ** ReservedInstancesModificationResult
+    ReservedInstancesModificationResult (ReservedInstancesModificationResult'),
+    newReservedInstancesModificationResult,
+
+    -- ** ReservedInstancesOffering
+    ReservedInstancesOffering (ReservedInstancesOffering'),
+    newReservedInstancesOffering,
+
+    -- ** ResourceStatement
+    ResourceStatement (ResourceStatement'),
+    newResourceStatement,
+
+    -- ** ResourceStatementRequest
+    ResourceStatementRequest (ResourceStatementRequest'),
+    newResourceStatementRequest,
+
+    -- ** ResponseError
+    ResponseError (ResponseError'),
+    newResponseError,
+
+    -- ** ResponseLaunchTemplateData
+    ResponseLaunchTemplateData (ResponseLaunchTemplateData'),
+    newResponseLaunchTemplateData,
+
+    -- ** Route
+    Route (Route'),
+    newRoute,
+
+    -- ** RouteTable
+    RouteTable (RouteTable'),
+    newRouteTable,
+
+    -- ** RouteTableAssociation
+    RouteTableAssociation (RouteTableAssociation'),
+    newRouteTableAssociation,
+
+    -- ** RouteTableAssociationState
+    RouteTableAssociationState (RouteTableAssociationState'),
+    newRouteTableAssociationState,
+
+    -- ** RunInstancesMonitoringEnabled
+    RunInstancesMonitoringEnabled (RunInstancesMonitoringEnabled'),
+    newRunInstancesMonitoringEnabled,
+
+    -- ** S3ObjectTag
+    S3ObjectTag (S3ObjectTag'),
+    newS3ObjectTag,
+
+    -- ** S3Storage
+    S3Storage (S3Storage'),
+    newS3Storage,
+
+    -- ** ScheduledInstance
+    ScheduledInstance (ScheduledInstance'),
+    newScheduledInstance,
+
+    -- ** ScheduledInstanceAvailability
+    ScheduledInstanceAvailability (ScheduledInstanceAvailability'),
+    newScheduledInstanceAvailability,
+
+    -- ** ScheduledInstanceRecurrence
+    ScheduledInstanceRecurrence (ScheduledInstanceRecurrence'),
+    newScheduledInstanceRecurrence,
+
+    -- ** ScheduledInstanceRecurrenceRequest
+    ScheduledInstanceRecurrenceRequest (ScheduledInstanceRecurrenceRequest'),
+    newScheduledInstanceRecurrenceRequest,
+
+    -- ** ScheduledInstancesBlockDeviceMapping
+    ScheduledInstancesBlockDeviceMapping (ScheduledInstancesBlockDeviceMapping'),
+    newScheduledInstancesBlockDeviceMapping,
+
+    -- ** ScheduledInstancesEbs
+    ScheduledInstancesEbs (ScheduledInstancesEbs'),
+    newScheduledInstancesEbs,
+
+    -- ** ScheduledInstancesIamInstanceProfile
+    ScheduledInstancesIamInstanceProfile (ScheduledInstancesIamInstanceProfile'),
+    newScheduledInstancesIamInstanceProfile,
+
+    -- ** ScheduledInstancesIpv6Address
+    ScheduledInstancesIpv6Address (ScheduledInstancesIpv6Address'),
+    newScheduledInstancesIpv6Address,
+
+    -- ** ScheduledInstancesLaunchSpecification
+    ScheduledInstancesLaunchSpecification (ScheduledInstancesLaunchSpecification'),
+    newScheduledInstancesLaunchSpecification,
+
+    -- ** ScheduledInstancesMonitoring
+    ScheduledInstancesMonitoring (ScheduledInstancesMonitoring'),
+    newScheduledInstancesMonitoring,
+
+    -- ** ScheduledInstancesNetworkInterface
+    ScheduledInstancesNetworkInterface (ScheduledInstancesNetworkInterface'),
+    newScheduledInstancesNetworkInterface,
+
+    -- ** ScheduledInstancesPlacement
+    ScheduledInstancesPlacement (ScheduledInstancesPlacement'),
+    newScheduledInstancesPlacement,
+
+    -- ** ScheduledInstancesPrivateIpAddressConfig
+    ScheduledInstancesPrivateIpAddressConfig (ScheduledInstancesPrivateIpAddressConfig'),
+    newScheduledInstancesPrivateIpAddressConfig,
+
+    -- ** SecurityGroup
+    SecurityGroup (SecurityGroup'),
+    newSecurityGroup,
+
+    -- ** SecurityGroupIdentifier
+    SecurityGroupIdentifier (SecurityGroupIdentifier'),
+    newSecurityGroupIdentifier,
+
+    -- ** SecurityGroupReference
+    SecurityGroupReference (SecurityGroupReference'),
+    newSecurityGroupReference,
+
+    -- ** SecurityGroupRule
+    SecurityGroupRule (SecurityGroupRule'),
+    newSecurityGroupRule,
+
+    -- ** SecurityGroupRuleDescription
+    SecurityGroupRuleDescription (SecurityGroupRuleDescription'),
+    newSecurityGroupRuleDescription,
+
+    -- ** SecurityGroupRuleRequest
+    SecurityGroupRuleRequest (SecurityGroupRuleRequest'),
+    newSecurityGroupRuleRequest,
+
+    -- ** SecurityGroupRuleUpdate
+    SecurityGroupRuleUpdate (SecurityGroupRuleUpdate'),
+    newSecurityGroupRuleUpdate,
+
+    -- ** ServiceConfiguration
+    ServiceConfiguration (ServiceConfiguration'),
+    newServiceConfiguration,
+
+    -- ** ServiceDetail
+    ServiceDetail (ServiceDetail'),
+    newServiceDetail,
+
+    -- ** ServiceTypeDetail
+    ServiceTypeDetail (ServiceTypeDetail'),
+    newServiceTypeDetail,
+
+    -- ** SlotDateTimeRangeRequest
+    SlotDateTimeRangeRequest (SlotDateTimeRangeRequest'),
+    newSlotDateTimeRangeRequest,
+
+    -- ** SlotStartTimeRangeRequest
+    SlotStartTimeRangeRequest (SlotStartTimeRangeRequest'),
+    newSlotStartTimeRangeRequest,
+
+    -- ** Snapshot
+    Snapshot (Snapshot'),
+    newSnapshot,
+
+    -- ** SnapshotDetail
+    SnapshotDetail (SnapshotDetail'),
+    newSnapshotDetail,
+
+    -- ** SnapshotDiskContainer
+    SnapshotDiskContainer (SnapshotDiskContainer'),
+    newSnapshotDiskContainer,
+
+    -- ** SnapshotInfo
+    SnapshotInfo (SnapshotInfo'),
+    newSnapshotInfo,
+
+    -- ** SnapshotRecycleBinInfo
+    SnapshotRecycleBinInfo (SnapshotRecycleBinInfo'),
+    newSnapshotRecycleBinInfo,
+
+    -- ** SnapshotTaskDetail
+    SnapshotTaskDetail (SnapshotTaskDetail'),
+    newSnapshotTaskDetail,
+
+    -- ** SnapshotTierStatus
+    SnapshotTierStatus (SnapshotTierStatus'),
+    newSnapshotTierStatus,
+
+    -- ** SpotCapacityRebalance
+    SpotCapacityRebalance (SpotCapacityRebalance'),
+    newSpotCapacityRebalance,
+
+    -- ** SpotDatafeedSubscription
+    SpotDatafeedSubscription (SpotDatafeedSubscription'),
+    newSpotDatafeedSubscription,
+
+    -- ** SpotFleetLaunchSpecification
+    SpotFleetLaunchSpecification (SpotFleetLaunchSpecification'),
+    newSpotFleetLaunchSpecification,
+
+    -- ** SpotFleetMonitoring
+    SpotFleetMonitoring (SpotFleetMonitoring'),
+    newSpotFleetMonitoring,
+
+    -- ** SpotFleetRequestConfig
+    SpotFleetRequestConfig (SpotFleetRequestConfig'),
+    newSpotFleetRequestConfig,
+
+    -- ** SpotFleetRequestConfigData
+    SpotFleetRequestConfigData (SpotFleetRequestConfigData'),
+    newSpotFleetRequestConfigData,
+
+    -- ** SpotFleetTagSpecification
+    SpotFleetTagSpecification (SpotFleetTagSpecification'),
+    newSpotFleetTagSpecification,
+
+    -- ** SpotInstanceRequest
+    SpotInstanceRequest (SpotInstanceRequest'),
+    newSpotInstanceRequest,
+
+    -- ** SpotInstanceStateFault
+    SpotInstanceStateFault (SpotInstanceStateFault'),
+    newSpotInstanceStateFault,
+
+    -- ** SpotInstanceStatus
+    SpotInstanceStatus (SpotInstanceStatus'),
+    newSpotInstanceStatus,
+
+    -- ** SpotMaintenanceStrategies
+    SpotMaintenanceStrategies (SpotMaintenanceStrategies'),
+    newSpotMaintenanceStrategies,
+
+    -- ** SpotMarketOptions
+    SpotMarketOptions (SpotMarketOptions'),
+    newSpotMarketOptions,
+
+    -- ** SpotOptions
+    SpotOptions (SpotOptions'),
+    newSpotOptions,
+
+    -- ** SpotOptionsRequest
+    SpotOptionsRequest (SpotOptionsRequest'),
+    newSpotOptionsRequest,
+
+    -- ** SpotPlacement
+    SpotPlacement (SpotPlacement'),
+    newSpotPlacement,
+
+    -- ** SpotPlacementScore
+    SpotPlacementScore (SpotPlacementScore'),
+    newSpotPlacementScore,
+
+    -- ** SpotPrice
+    SpotPrice (SpotPrice'),
+    newSpotPrice,
+
+    -- ** StaleIpPermission
+    StaleIpPermission (StaleIpPermission'),
+    newStaleIpPermission,
+
+    -- ** StaleSecurityGroup
+    StaleSecurityGroup (StaleSecurityGroup'),
+    newStaleSecurityGroup,
+
+    -- ** StateReason
+    StateReason (StateReason'),
+    newStateReason,
+
+    -- ** Storage
+    Storage (Storage'),
+    newStorage,
+
+    -- ** StorageLocation
+    StorageLocation (StorageLocation'),
+    newStorageLocation,
+
+    -- ** StoreImageTaskResult
+    StoreImageTaskResult (StoreImageTaskResult'),
+    newStoreImageTaskResult,
+
+    -- ** Subnet
+    Subnet (Subnet'),
+    newSubnet,
+
+    -- ** SubnetAssociation
+    SubnetAssociation (SubnetAssociation'),
+    newSubnetAssociation,
+
+    -- ** SubnetCidrBlockState
+    SubnetCidrBlockState (SubnetCidrBlockState'),
+    newSubnetCidrBlockState,
+
+    -- ** SubnetCidrReservation
+    SubnetCidrReservation (SubnetCidrReservation'),
+    newSubnetCidrReservation,
+
+    -- ** SubnetIpv6CidrBlockAssociation
+    SubnetIpv6CidrBlockAssociation (SubnetIpv6CidrBlockAssociation'),
+    newSubnetIpv6CidrBlockAssociation,
+
+    -- ** Subscription
+    Subscription (Subscription'),
+    newSubscription,
+
+    -- ** SuccessfulInstanceCreditSpecificationItem
+    SuccessfulInstanceCreditSpecificationItem (SuccessfulInstanceCreditSpecificationItem'),
+    newSuccessfulInstanceCreditSpecificationItem,
+
+    -- ** SuccessfulQueuedPurchaseDeletion
+    SuccessfulQueuedPurchaseDeletion (SuccessfulQueuedPurchaseDeletion'),
+    newSuccessfulQueuedPurchaseDeletion,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** TagDescription
+    TagDescription (TagDescription'),
+    newTagDescription,
+
+    -- ** TagSpecification
+    TagSpecification (TagSpecification'),
+    newTagSpecification,
+
+    -- ** TargetCapacitySpecification
+    TargetCapacitySpecification (TargetCapacitySpecification'),
+    newTargetCapacitySpecification,
+
+    -- ** TargetCapacitySpecificationRequest
+    TargetCapacitySpecificationRequest (TargetCapacitySpecificationRequest'),
+    newTargetCapacitySpecificationRequest,
+
+    -- ** TargetConfiguration
+    TargetConfiguration (TargetConfiguration'),
+    newTargetConfiguration,
+
+    -- ** TargetConfigurationRequest
+    TargetConfigurationRequest (TargetConfigurationRequest'),
+    newTargetConfigurationRequest,
+
+    -- ** TargetGroup
+    TargetGroup (TargetGroup'),
+    newTargetGroup,
+
+    -- ** TargetGroupsConfig
+    TargetGroupsConfig (TargetGroupsConfig'),
+    newTargetGroupsConfig,
+
+    -- ** TargetNetwork
+    TargetNetwork (TargetNetwork'),
+    newTargetNetwork,
+
+    -- ** TargetReservationValue
+    TargetReservationValue (TargetReservationValue'),
+    newTargetReservationValue,
+
+    -- ** TerminateConnectionStatus
+    TerminateConnectionStatus (TerminateConnectionStatus'),
+    newTerminateConnectionStatus,
+
+    -- ** ThroughResourcesStatement
+    ThroughResourcesStatement (ThroughResourcesStatement'),
+    newThroughResourcesStatement,
+
+    -- ** ThroughResourcesStatementRequest
+    ThroughResourcesStatementRequest (ThroughResourcesStatementRequest'),
+    newThroughResourcesStatementRequest,
+
+    -- ** TotalLocalStorageGB
+    TotalLocalStorageGB (TotalLocalStorageGB'),
+    newTotalLocalStorageGB,
+
+    -- ** TotalLocalStorageGBRequest
+    TotalLocalStorageGBRequest (TotalLocalStorageGBRequest'),
+    newTotalLocalStorageGBRequest,
+
+    -- ** TrafficMirrorFilter
+    TrafficMirrorFilter (TrafficMirrorFilter'),
+    newTrafficMirrorFilter,
+
+    -- ** TrafficMirrorFilterRule
+    TrafficMirrorFilterRule (TrafficMirrorFilterRule'),
+    newTrafficMirrorFilterRule,
+
+    -- ** TrafficMirrorPortRange
+    TrafficMirrorPortRange (TrafficMirrorPortRange'),
+    newTrafficMirrorPortRange,
+
+    -- ** TrafficMirrorPortRangeRequest
+    TrafficMirrorPortRangeRequest (TrafficMirrorPortRangeRequest'),
+    newTrafficMirrorPortRangeRequest,
+
+    -- ** TrafficMirrorSession
+    TrafficMirrorSession (TrafficMirrorSession'),
+    newTrafficMirrorSession,
+
+    -- ** TrafficMirrorTarget
+    TrafficMirrorTarget (TrafficMirrorTarget'),
+    newTrafficMirrorTarget,
+
+    -- ** TransitGateway
+    TransitGateway (TransitGateway'),
+    newTransitGateway,
+
+    -- ** TransitGatewayAssociation
+    TransitGatewayAssociation (TransitGatewayAssociation'),
+    newTransitGatewayAssociation,
+
+    -- ** TransitGatewayAttachment
+    TransitGatewayAttachment (TransitGatewayAttachment'),
+    newTransitGatewayAttachment,
+
+    -- ** TransitGatewayAttachmentAssociation
+    TransitGatewayAttachmentAssociation (TransitGatewayAttachmentAssociation'),
+    newTransitGatewayAttachmentAssociation,
+
+    -- ** TransitGatewayAttachmentBgpConfiguration
+    TransitGatewayAttachmentBgpConfiguration (TransitGatewayAttachmentBgpConfiguration'),
+    newTransitGatewayAttachmentBgpConfiguration,
+
+    -- ** TransitGatewayAttachmentPropagation
+    TransitGatewayAttachmentPropagation (TransitGatewayAttachmentPropagation'),
+    newTransitGatewayAttachmentPropagation,
+
+    -- ** TransitGatewayConnect
+    TransitGatewayConnect (TransitGatewayConnect'),
+    newTransitGatewayConnect,
+
+    -- ** TransitGatewayConnectOptions
+    TransitGatewayConnectOptions (TransitGatewayConnectOptions'),
+    newTransitGatewayConnectOptions,
+
+    -- ** TransitGatewayConnectPeer
+    TransitGatewayConnectPeer (TransitGatewayConnectPeer'),
+    newTransitGatewayConnectPeer,
+
+    -- ** TransitGatewayConnectPeerConfiguration
+    TransitGatewayConnectPeerConfiguration (TransitGatewayConnectPeerConfiguration'),
+    newTransitGatewayConnectPeerConfiguration,
+
+    -- ** TransitGatewayConnectRequestBgpOptions
+    TransitGatewayConnectRequestBgpOptions (TransitGatewayConnectRequestBgpOptions'),
+    newTransitGatewayConnectRequestBgpOptions,
+
+    -- ** TransitGatewayMulticastDeregisteredGroupMembers
+    TransitGatewayMulticastDeregisteredGroupMembers (TransitGatewayMulticastDeregisteredGroupMembers'),
+    newTransitGatewayMulticastDeregisteredGroupMembers,
+
+    -- ** TransitGatewayMulticastDeregisteredGroupSources
+    TransitGatewayMulticastDeregisteredGroupSources (TransitGatewayMulticastDeregisteredGroupSources'),
+    newTransitGatewayMulticastDeregisteredGroupSources,
+
+    -- ** TransitGatewayMulticastDomain
+    TransitGatewayMulticastDomain (TransitGatewayMulticastDomain'),
+    newTransitGatewayMulticastDomain,
+
+    -- ** TransitGatewayMulticastDomainAssociation
+    TransitGatewayMulticastDomainAssociation (TransitGatewayMulticastDomainAssociation'),
+    newTransitGatewayMulticastDomainAssociation,
+
+    -- ** TransitGatewayMulticastDomainAssociations
+    TransitGatewayMulticastDomainAssociations (TransitGatewayMulticastDomainAssociations'),
+    newTransitGatewayMulticastDomainAssociations,
+
+    -- ** TransitGatewayMulticastDomainOptions
+    TransitGatewayMulticastDomainOptions (TransitGatewayMulticastDomainOptions'),
+    newTransitGatewayMulticastDomainOptions,
+
+    -- ** TransitGatewayMulticastGroup
+    TransitGatewayMulticastGroup (TransitGatewayMulticastGroup'),
+    newTransitGatewayMulticastGroup,
+
+    -- ** TransitGatewayMulticastRegisteredGroupMembers
+    TransitGatewayMulticastRegisteredGroupMembers (TransitGatewayMulticastRegisteredGroupMembers'),
+    newTransitGatewayMulticastRegisteredGroupMembers,
+
+    -- ** TransitGatewayMulticastRegisteredGroupSources
+    TransitGatewayMulticastRegisteredGroupSources (TransitGatewayMulticastRegisteredGroupSources'),
+    newTransitGatewayMulticastRegisteredGroupSources,
+
+    -- ** TransitGatewayOptions
+    TransitGatewayOptions (TransitGatewayOptions'),
+    newTransitGatewayOptions,
+
+    -- ** TransitGatewayPeeringAttachment
+    TransitGatewayPeeringAttachment (TransitGatewayPeeringAttachment'),
+    newTransitGatewayPeeringAttachment,
+
+    -- ** TransitGatewayPeeringAttachmentOptions
+    TransitGatewayPeeringAttachmentOptions (TransitGatewayPeeringAttachmentOptions'),
+    newTransitGatewayPeeringAttachmentOptions,
+
+    -- ** TransitGatewayPolicyRule
+    TransitGatewayPolicyRule (TransitGatewayPolicyRule'),
+    newTransitGatewayPolicyRule,
+
+    -- ** TransitGatewayPolicyRuleMetaData
+    TransitGatewayPolicyRuleMetaData (TransitGatewayPolicyRuleMetaData'),
+    newTransitGatewayPolicyRuleMetaData,
+
+    -- ** TransitGatewayPolicyTable
+    TransitGatewayPolicyTable (TransitGatewayPolicyTable'),
+    newTransitGatewayPolicyTable,
+
+    -- ** TransitGatewayPolicyTableAssociation
+    TransitGatewayPolicyTableAssociation (TransitGatewayPolicyTableAssociation'),
+    newTransitGatewayPolicyTableAssociation,
+
+    -- ** TransitGatewayPolicyTableEntry
+    TransitGatewayPolicyTableEntry (TransitGatewayPolicyTableEntry'),
+    newTransitGatewayPolicyTableEntry,
+
+    -- ** TransitGatewayPrefixListAttachment
+    TransitGatewayPrefixListAttachment (TransitGatewayPrefixListAttachment'),
+    newTransitGatewayPrefixListAttachment,
+
+    -- ** TransitGatewayPrefixListReference
+    TransitGatewayPrefixListReference (TransitGatewayPrefixListReference'),
+    newTransitGatewayPrefixListReference,
+
+    -- ** TransitGatewayPropagation
+    TransitGatewayPropagation (TransitGatewayPropagation'),
+    newTransitGatewayPropagation,
+
+    -- ** TransitGatewayRequestOptions
+    TransitGatewayRequestOptions (TransitGatewayRequestOptions'),
+    newTransitGatewayRequestOptions,
+
+    -- ** TransitGatewayRoute
+    TransitGatewayRoute (TransitGatewayRoute'),
+    newTransitGatewayRoute,
+
+    -- ** TransitGatewayRouteAttachment
+    TransitGatewayRouteAttachment (TransitGatewayRouteAttachment'),
+    newTransitGatewayRouteAttachment,
+
+    -- ** TransitGatewayRouteTable
+    TransitGatewayRouteTable (TransitGatewayRouteTable'),
+    newTransitGatewayRouteTable,
+
+    -- ** TransitGatewayRouteTableAnnouncement
+    TransitGatewayRouteTableAnnouncement (TransitGatewayRouteTableAnnouncement'),
+    newTransitGatewayRouteTableAnnouncement,
+
+    -- ** TransitGatewayRouteTableAssociation
+    TransitGatewayRouteTableAssociation (TransitGatewayRouteTableAssociation'),
+    newTransitGatewayRouteTableAssociation,
+
+    -- ** TransitGatewayRouteTablePropagation
+    TransitGatewayRouteTablePropagation (TransitGatewayRouteTablePropagation'),
+    newTransitGatewayRouteTablePropagation,
+
+    -- ** TransitGatewayRouteTableRoute
+    TransitGatewayRouteTableRoute (TransitGatewayRouteTableRoute'),
+    newTransitGatewayRouteTableRoute,
+
+    -- ** TransitGatewayVpcAttachment
+    TransitGatewayVpcAttachment (TransitGatewayVpcAttachment'),
+    newTransitGatewayVpcAttachment,
+
+    -- ** TransitGatewayVpcAttachmentOptions
+    TransitGatewayVpcAttachmentOptions (TransitGatewayVpcAttachmentOptions'),
+    newTransitGatewayVpcAttachmentOptions,
+
+    -- ** TrunkInterfaceAssociation
+    TrunkInterfaceAssociation (TrunkInterfaceAssociation'),
+    newTrunkInterfaceAssociation,
+
+    -- ** TunnelOption
+    TunnelOption (TunnelOption'),
+    newTunnelOption,
+
+    -- ** UnsuccessfulInstanceCreditSpecificationItem
+    UnsuccessfulInstanceCreditSpecificationItem (UnsuccessfulInstanceCreditSpecificationItem'),
+    newUnsuccessfulInstanceCreditSpecificationItem,
+
+    -- ** UnsuccessfulInstanceCreditSpecificationItemError
+    UnsuccessfulInstanceCreditSpecificationItemError (UnsuccessfulInstanceCreditSpecificationItemError'),
+    newUnsuccessfulInstanceCreditSpecificationItemError,
+
+    -- ** UnsuccessfulItem
+    UnsuccessfulItem (UnsuccessfulItem'),
+    newUnsuccessfulItem,
+
+    -- ** UnsuccessfulItemError
+    UnsuccessfulItemError (UnsuccessfulItemError'),
+    newUnsuccessfulItemError,
+
+    -- ** UserBucket
+    UserBucket (UserBucket'),
+    newUserBucket,
+
+    -- ** UserBucketDetails
+    UserBucketDetails (UserBucketDetails'),
+    newUserBucketDetails,
+
+    -- ** UserData
+    UserData (UserData'),
+    newUserData,
+
+    -- ** UserIdGroupPair
+    UserIdGroupPair (UserIdGroupPair'),
+    newUserIdGroupPair,
+
+    -- ** VCpuCountRange
+    VCpuCountRange (VCpuCountRange'),
+    newVCpuCountRange,
+
+    -- ** VCpuCountRangeRequest
+    VCpuCountRangeRequest (VCpuCountRangeRequest'),
+    newVCpuCountRangeRequest,
+
+    -- ** VCpuInfo
+    VCpuInfo (VCpuInfo'),
+    newVCpuInfo,
+
+    -- ** ValidationError
+    ValidationError (ValidationError'),
+    newValidationError,
+
+    -- ** ValidationWarning
+    ValidationWarning (ValidationWarning'),
+    newValidationWarning,
+
+    -- ** VerifiedAccessEndpoint
+    VerifiedAccessEndpoint (VerifiedAccessEndpoint'),
+    newVerifiedAccessEndpoint,
+
+    -- ** VerifiedAccessEndpointEniOptions
+    VerifiedAccessEndpointEniOptions (VerifiedAccessEndpointEniOptions'),
+    newVerifiedAccessEndpointEniOptions,
+
+    -- ** VerifiedAccessEndpointLoadBalancerOptions
+    VerifiedAccessEndpointLoadBalancerOptions (VerifiedAccessEndpointLoadBalancerOptions'),
+    newVerifiedAccessEndpointLoadBalancerOptions,
+
+    -- ** VerifiedAccessEndpointStatus
+    VerifiedAccessEndpointStatus (VerifiedAccessEndpointStatus'),
+    newVerifiedAccessEndpointStatus,
+
+    -- ** VerifiedAccessGroup
+    VerifiedAccessGroup (VerifiedAccessGroup'),
+    newVerifiedAccessGroup,
+
+    -- ** VerifiedAccessInstance
+    VerifiedAccessInstance (VerifiedAccessInstance'),
+    newVerifiedAccessInstance,
+
+    -- ** VerifiedAccessInstanceLoggingConfiguration
+    VerifiedAccessInstanceLoggingConfiguration (VerifiedAccessInstanceLoggingConfiguration'),
+    newVerifiedAccessInstanceLoggingConfiguration,
+
+    -- ** VerifiedAccessLogCloudWatchLogsDestination
+    VerifiedAccessLogCloudWatchLogsDestination (VerifiedAccessLogCloudWatchLogsDestination'),
+    newVerifiedAccessLogCloudWatchLogsDestination,
+
+    -- ** VerifiedAccessLogCloudWatchLogsDestinationOptions
+    VerifiedAccessLogCloudWatchLogsDestinationOptions (VerifiedAccessLogCloudWatchLogsDestinationOptions'),
+    newVerifiedAccessLogCloudWatchLogsDestinationOptions,
+
+    -- ** VerifiedAccessLogDeliveryStatus
+    VerifiedAccessLogDeliveryStatus (VerifiedAccessLogDeliveryStatus'),
+    newVerifiedAccessLogDeliveryStatus,
+
+    -- ** VerifiedAccessLogKinesisDataFirehoseDestination
+    VerifiedAccessLogKinesisDataFirehoseDestination (VerifiedAccessLogKinesisDataFirehoseDestination'),
+    newVerifiedAccessLogKinesisDataFirehoseDestination,
+
+    -- ** VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions (VerifiedAccessLogKinesisDataFirehoseDestinationOptions'),
+    newVerifiedAccessLogKinesisDataFirehoseDestinationOptions,
+
+    -- ** VerifiedAccessLogOptions
+    VerifiedAccessLogOptions (VerifiedAccessLogOptions'),
+    newVerifiedAccessLogOptions,
+
+    -- ** VerifiedAccessLogS3Destination
+    VerifiedAccessLogS3Destination (VerifiedAccessLogS3Destination'),
+    newVerifiedAccessLogS3Destination,
+
+    -- ** VerifiedAccessLogS3DestinationOptions
+    VerifiedAccessLogS3DestinationOptions (VerifiedAccessLogS3DestinationOptions'),
+    newVerifiedAccessLogS3DestinationOptions,
+
+    -- ** VerifiedAccessLogs
+    VerifiedAccessLogs (VerifiedAccessLogs'),
+    newVerifiedAccessLogs,
+
+    -- ** VerifiedAccessTrustProvider
+    VerifiedAccessTrustProvider (VerifiedAccessTrustProvider'),
+    newVerifiedAccessTrustProvider,
+
+    -- ** VerifiedAccessTrustProviderCondensed
+    VerifiedAccessTrustProviderCondensed (VerifiedAccessTrustProviderCondensed'),
+    newVerifiedAccessTrustProviderCondensed,
+
+    -- ** VgwTelemetry
+    VgwTelemetry (VgwTelemetry'),
+    newVgwTelemetry,
+
+    -- ** Volume
+    Volume (Volume'),
+    newVolume,
+
+    -- ** VolumeAttachment
+    VolumeAttachment (VolumeAttachment'),
+    newVolumeAttachment,
+
+    -- ** VolumeDetail
+    VolumeDetail (VolumeDetail'),
+    newVolumeDetail,
+
+    -- ** VolumeModification
+    VolumeModification (VolumeModification'),
+    newVolumeModification,
+
+    -- ** VolumeStatusAction
+    VolumeStatusAction (VolumeStatusAction'),
+    newVolumeStatusAction,
+
+    -- ** VolumeStatusAttachmentStatus
+    VolumeStatusAttachmentStatus (VolumeStatusAttachmentStatus'),
+    newVolumeStatusAttachmentStatus,
+
+    -- ** VolumeStatusDetails
+    VolumeStatusDetails (VolumeStatusDetails'),
+    newVolumeStatusDetails,
+
+    -- ** VolumeStatusEvent
+    VolumeStatusEvent (VolumeStatusEvent'),
+    newVolumeStatusEvent,
+
+    -- ** VolumeStatusInfo
+    VolumeStatusInfo (VolumeStatusInfo'),
+    newVolumeStatusInfo,
+
+    -- ** VolumeStatusItem
+    VolumeStatusItem (VolumeStatusItem'),
+    newVolumeStatusItem,
+
+    -- ** Vpc
+    Vpc (Vpc'),
+    newVpc,
+
+    -- ** VpcAttachment
+    VpcAttachment (VpcAttachment'),
+    newVpcAttachment,
+
+    -- ** VpcCidrBlockAssociation
+    VpcCidrBlockAssociation (VpcCidrBlockAssociation'),
+    newVpcCidrBlockAssociation,
+
+    -- ** VpcCidrBlockState
+    VpcCidrBlockState (VpcCidrBlockState'),
+    newVpcCidrBlockState,
+
+    -- ** VpcClassicLink
+    VpcClassicLink (VpcClassicLink'),
+    newVpcClassicLink,
+
+    -- ** VpcEndpoint
+    VpcEndpoint (VpcEndpoint'),
+    newVpcEndpoint,
+
+    -- ** VpcEndpointConnection
+    VpcEndpointConnection (VpcEndpointConnection'),
+    newVpcEndpointConnection,
+
+    -- ** VpcIpv6CidrBlockAssociation
+    VpcIpv6CidrBlockAssociation (VpcIpv6CidrBlockAssociation'),
+    newVpcIpv6CidrBlockAssociation,
+
+    -- ** VpcPeeringConnection
+    VpcPeeringConnection (VpcPeeringConnection'),
+    newVpcPeeringConnection,
+
+    -- ** VpcPeeringConnectionOptionsDescription
+    VpcPeeringConnectionOptionsDescription (VpcPeeringConnectionOptionsDescription'),
+    newVpcPeeringConnectionOptionsDescription,
+
+    -- ** VpcPeeringConnectionStateReason
+    VpcPeeringConnectionStateReason (VpcPeeringConnectionStateReason'),
+    newVpcPeeringConnectionStateReason,
+
+    -- ** VpcPeeringConnectionVpcInfo
+    VpcPeeringConnectionVpcInfo (VpcPeeringConnectionVpcInfo'),
+    newVpcPeeringConnectionVpcInfo,
+
+    -- ** VpnConnection
+    VpnConnection (VpnConnection'),
+    newVpnConnection,
+
+    -- ** VpnConnectionDeviceType
+    VpnConnectionDeviceType (VpnConnectionDeviceType'),
+    newVpnConnectionDeviceType,
+
+    -- ** VpnConnectionOptions
+    VpnConnectionOptions (VpnConnectionOptions'),
+    newVpnConnectionOptions,
+
+    -- ** VpnConnectionOptionsSpecification
+    VpnConnectionOptionsSpecification (VpnConnectionOptionsSpecification'),
+    newVpnConnectionOptionsSpecification,
+
+    -- ** VpnGateway
+    VpnGateway (VpnGateway'),
+    newVpnGateway,
+
+    -- ** VpnStaticRoute
+    VpnStaticRoute (VpnStaticRoute'),
+    newVpnStaticRoute,
+
+    -- ** VpnTunnelLogOptions
+    VpnTunnelLogOptions (VpnTunnelLogOptions'),
+    newVpnTunnelLogOptions,
+
+    -- ** VpnTunnelLogOptionsSpecification
+    VpnTunnelLogOptionsSpecification (VpnTunnelLogOptionsSpecification'),
+    newVpnTunnelLogOptionsSpecification,
+
+    -- ** VpnTunnelOptionsSpecification
+    VpnTunnelOptionsSpecification (VpnTunnelOptionsSpecification'),
+    newVpnTunnelOptionsSpecification,
+  )
+where
+
+import Amazonka.EC2.AcceptAddressTransfer
+import Amazonka.EC2.AcceptReservedInstancesExchangeQuote
+import Amazonka.EC2.AcceptTransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.AcceptTransitGatewayPeeringAttachment
+import Amazonka.EC2.AcceptTransitGatewayVpcAttachment
+import Amazonka.EC2.AcceptVpcEndpointConnections
+import Amazonka.EC2.AcceptVpcPeeringConnection
+import Amazonka.EC2.AdvertiseByoipCidr
+import Amazonka.EC2.AllocateAddress
+import Amazonka.EC2.AllocateHosts
+import Amazonka.EC2.AllocateIpamPoolCidr
+import Amazonka.EC2.ApplySecurityGroupsToClientVpnTargetNetwork
+import Amazonka.EC2.AssignIpv6Addresses
+import Amazonka.EC2.AssignPrivateIpAddresses
+import Amazonka.EC2.AssociateAddress
+import Amazonka.EC2.AssociateClientVpnTargetNetwork
+import Amazonka.EC2.AssociateDhcpOptions
+import Amazonka.EC2.AssociateEnclaveCertificateIamRole
+import Amazonka.EC2.AssociateIamInstanceProfile
+import Amazonka.EC2.AssociateInstanceEventWindow
+import Amazonka.EC2.AssociateRouteTable
+import Amazonka.EC2.AssociateSubnetCidrBlock
+import Amazonka.EC2.AssociateTransitGatewayMulticastDomain
+import Amazonka.EC2.AssociateTransitGatewayPolicyTable
+import Amazonka.EC2.AssociateTransitGatewayRouteTable
+import Amazonka.EC2.AssociateTrunkInterface
+import Amazonka.EC2.AssociateVpcCidrBlock
+import Amazonka.EC2.AttachClassicLinkVpc
+import Amazonka.EC2.AttachInternetGateway
+import Amazonka.EC2.AttachNetworkInterface
+import Amazonka.EC2.AttachVerifiedAccessTrustProvider
+import Amazonka.EC2.AttachVolume
+import Amazonka.EC2.AttachVpnGateway
+import Amazonka.EC2.AuthorizeClientVpnIngress
+import Amazonka.EC2.AuthorizeSecurityGroupEgress
+import Amazonka.EC2.AuthorizeSecurityGroupIngress
+import Amazonka.EC2.BundleInstance
+import Amazonka.EC2.CancelBundleTask
+import Amazonka.EC2.CancelCapacityReservation
+import Amazonka.EC2.CancelCapacityReservationFleets
+import Amazonka.EC2.CancelConversionTask
+import Amazonka.EC2.CancelExportTask
+import Amazonka.EC2.CancelImageLaunchPermission
+import Amazonka.EC2.CancelImportTask
+import Amazonka.EC2.CancelReservedInstancesListing
+import Amazonka.EC2.CancelSpotFleetRequests
+import Amazonka.EC2.CancelSpotInstanceRequests
+import Amazonka.EC2.ConfirmProductInstance
+import Amazonka.EC2.CopyFpgaImage
+import Amazonka.EC2.CopyImage
+import Amazonka.EC2.CopySnapshot
+import Amazonka.EC2.CreateCapacityReservation
+import Amazonka.EC2.CreateCapacityReservationFleet
+import Amazonka.EC2.CreateCarrierGateway
+import Amazonka.EC2.CreateClientVpnEndpoint
+import Amazonka.EC2.CreateClientVpnRoute
+import Amazonka.EC2.CreateCoipCidr
+import Amazonka.EC2.CreateCoipPool
+import Amazonka.EC2.CreateCustomerGateway
+import Amazonka.EC2.CreateDefaultSubnet
+import Amazonka.EC2.CreateDefaultVpc
+import Amazonka.EC2.CreateDhcpOptions
+import Amazonka.EC2.CreateEgressOnlyInternetGateway
+import Amazonka.EC2.CreateFleet
+import Amazonka.EC2.CreateFlowLogs
+import Amazonka.EC2.CreateFpgaImage
+import Amazonka.EC2.CreateImage
+import Amazonka.EC2.CreateInstanceEventWindow
+import Amazonka.EC2.CreateInstanceExportTask
+import Amazonka.EC2.CreateInternetGateway
+import Amazonka.EC2.CreateIpam
+import Amazonka.EC2.CreateIpamPool
+import Amazonka.EC2.CreateIpamScope
+import Amazonka.EC2.CreateKeyPair
+import Amazonka.EC2.CreateLaunchTemplate
+import Amazonka.EC2.CreateLaunchTemplateVersion
+import Amazonka.EC2.CreateLocalGatewayRoute
+import Amazonka.EC2.CreateLocalGatewayRouteTable
+import Amazonka.EC2.CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+import Amazonka.EC2.CreateLocalGatewayRouteTableVpcAssociation
+import Amazonka.EC2.CreateManagedPrefixList
+import Amazonka.EC2.CreateNatGateway
+import Amazonka.EC2.CreateNetworkAcl
+import Amazonka.EC2.CreateNetworkAclEntry
+import Amazonka.EC2.CreateNetworkInsightsAccessScope
+import Amazonka.EC2.CreateNetworkInsightsPath
+import Amazonka.EC2.CreateNetworkInterface
+import Amazonka.EC2.CreateNetworkInterfacePermission
+import Amazonka.EC2.CreatePlacementGroup
+import Amazonka.EC2.CreatePublicIpv4Pool
+import Amazonka.EC2.CreateReplaceRootVolumeTask
+import Amazonka.EC2.CreateReservedInstancesListing
+import Amazonka.EC2.CreateRestoreImageTask
+import Amazonka.EC2.CreateRoute
+import Amazonka.EC2.CreateRouteTable
+import Amazonka.EC2.CreateSecurityGroup
+import Amazonka.EC2.CreateSnapshot
+import Amazonka.EC2.CreateSnapshots
+import Amazonka.EC2.CreateSpotDatafeedSubscription
+import Amazonka.EC2.CreateStoreImageTask
+import Amazonka.EC2.CreateSubnet
+import Amazonka.EC2.CreateSubnetCidrReservation
+import Amazonka.EC2.CreateTags
+import Amazonka.EC2.CreateTrafficMirrorFilter
+import Amazonka.EC2.CreateTrafficMirrorFilterRule
+import Amazonka.EC2.CreateTrafficMirrorSession
+import Amazonka.EC2.CreateTrafficMirrorTarget
+import Amazonka.EC2.CreateTransitGateway
+import Amazonka.EC2.CreateTransitGatewayConnect
+import Amazonka.EC2.CreateTransitGatewayConnectPeer
+import Amazonka.EC2.CreateTransitGatewayMulticastDomain
+import Amazonka.EC2.CreateTransitGatewayPeeringAttachment
+import Amazonka.EC2.CreateTransitGatewayPolicyTable
+import Amazonka.EC2.CreateTransitGatewayPrefixListReference
+import Amazonka.EC2.CreateTransitGatewayRoute
+import Amazonka.EC2.CreateTransitGatewayRouteTable
+import Amazonka.EC2.CreateTransitGatewayRouteTableAnnouncement
+import Amazonka.EC2.CreateTransitGatewayVpcAttachment
+import Amazonka.EC2.CreateVerifiedAccessEndpoint
+import Amazonka.EC2.CreateVerifiedAccessGroup
+import Amazonka.EC2.CreateVerifiedAccessInstance
+import Amazonka.EC2.CreateVerifiedAccessTrustProvider
+import Amazonka.EC2.CreateVolume
+import Amazonka.EC2.CreateVpc
+import Amazonka.EC2.CreateVpcEndpoint
+import Amazonka.EC2.CreateVpcEndpointConnectionNotification
+import Amazonka.EC2.CreateVpcEndpointServiceConfiguration
+import Amazonka.EC2.CreateVpcPeeringConnection
+import Amazonka.EC2.CreateVpnConnection
+import Amazonka.EC2.CreateVpnConnectionRoute
+import Amazonka.EC2.CreateVpnGateway
+import Amazonka.EC2.DeleteCarrierGateway
+import Amazonka.EC2.DeleteClientVpnEndpoint
+import Amazonka.EC2.DeleteClientVpnRoute
+import Amazonka.EC2.DeleteCoipCidr
+import Amazonka.EC2.DeleteCoipPool
+import Amazonka.EC2.DeleteCustomerGateway
+import Amazonka.EC2.DeleteDhcpOptions
+import Amazonka.EC2.DeleteEgressOnlyInternetGateway
+import Amazonka.EC2.DeleteFleets
+import Amazonka.EC2.DeleteFlowLogs
+import Amazonka.EC2.DeleteFpgaImage
+import Amazonka.EC2.DeleteInstanceEventWindow
+import Amazonka.EC2.DeleteInternetGateway
+import Amazonka.EC2.DeleteIpam
+import Amazonka.EC2.DeleteIpamPool
+import Amazonka.EC2.DeleteIpamScope
+import Amazonka.EC2.DeleteKeyPair
+import Amazonka.EC2.DeleteLaunchTemplate
+import Amazonka.EC2.DeleteLaunchTemplateVersions
+import Amazonka.EC2.DeleteLocalGatewayRoute
+import Amazonka.EC2.DeleteLocalGatewayRouteTable
+import Amazonka.EC2.DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+import Amazonka.EC2.DeleteLocalGatewayRouteTableVpcAssociation
+import Amazonka.EC2.DeleteManagedPrefixList
+import Amazonka.EC2.DeleteNatGateway
+import Amazonka.EC2.DeleteNetworkAcl
+import Amazonka.EC2.DeleteNetworkAclEntry
+import Amazonka.EC2.DeleteNetworkInsightsAccessScope
+import Amazonka.EC2.DeleteNetworkInsightsAccessScopeAnalysis
+import Amazonka.EC2.DeleteNetworkInsightsAnalysis
+import Amazonka.EC2.DeleteNetworkInsightsPath
+import Amazonka.EC2.DeleteNetworkInterface
+import Amazonka.EC2.DeleteNetworkInterfacePermission
+import Amazonka.EC2.DeletePlacementGroup
+import Amazonka.EC2.DeletePublicIpv4Pool
+import Amazonka.EC2.DeleteQueuedReservedInstances
+import Amazonka.EC2.DeleteRoute
+import Amazonka.EC2.DeleteRouteTable
+import Amazonka.EC2.DeleteSecurityGroup
+import Amazonka.EC2.DeleteSnapshot
+import Amazonka.EC2.DeleteSpotDatafeedSubscription
+import Amazonka.EC2.DeleteSubnet
+import Amazonka.EC2.DeleteSubnetCidrReservation
+import Amazonka.EC2.DeleteTags
+import Amazonka.EC2.DeleteTrafficMirrorFilter
+import Amazonka.EC2.DeleteTrafficMirrorFilterRule
+import Amazonka.EC2.DeleteTrafficMirrorSession
+import Amazonka.EC2.DeleteTrafficMirrorTarget
+import Amazonka.EC2.DeleteTransitGateway
+import Amazonka.EC2.DeleteTransitGatewayConnect
+import Amazonka.EC2.DeleteTransitGatewayConnectPeer
+import Amazonka.EC2.DeleteTransitGatewayMulticastDomain
+import Amazonka.EC2.DeleteTransitGatewayPeeringAttachment
+import Amazonka.EC2.DeleteTransitGatewayPolicyTable
+import Amazonka.EC2.DeleteTransitGatewayPrefixListReference
+import Amazonka.EC2.DeleteTransitGatewayRoute
+import Amazonka.EC2.DeleteTransitGatewayRouteTable
+import Amazonka.EC2.DeleteTransitGatewayRouteTableAnnouncement
+import Amazonka.EC2.DeleteTransitGatewayVpcAttachment
+import Amazonka.EC2.DeleteVerifiedAccessEndpoint
+import Amazonka.EC2.DeleteVerifiedAccessGroup
+import Amazonka.EC2.DeleteVerifiedAccessInstance
+import Amazonka.EC2.DeleteVerifiedAccessTrustProvider
+import Amazonka.EC2.DeleteVolume
+import Amazonka.EC2.DeleteVpc
+import Amazonka.EC2.DeleteVpcEndpointConnectionNotifications
+import Amazonka.EC2.DeleteVpcEndpointServiceConfigurations
+import Amazonka.EC2.DeleteVpcEndpoints
+import Amazonka.EC2.DeleteVpcPeeringConnection
+import Amazonka.EC2.DeleteVpnConnection
+import Amazonka.EC2.DeleteVpnConnectionRoute
+import Amazonka.EC2.DeleteVpnGateway
+import Amazonka.EC2.DeprovisionByoipCidr
+import Amazonka.EC2.DeprovisionIpamPoolCidr
+import Amazonka.EC2.DeprovisionPublicIpv4PoolCidr
+import Amazonka.EC2.DeregisterImage
+import Amazonka.EC2.DeregisterInstanceEventNotificationAttributes
+import Amazonka.EC2.DeregisterTransitGatewayMulticastGroupMembers
+import Amazonka.EC2.DeregisterTransitGatewayMulticastGroupSources
+import Amazonka.EC2.DescribeAccountAttributes
+import Amazonka.EC2.DescribeAddressTransfers
+import Amazonka.EC2.DescribeAddresses
+import Amazonka.EC2.DescribeAddressesAttribute
+import Amazonka.EC2.DescribeAggregateIdFormat
+import Amazonka.EC2.DescribeAvailabilityZones
+import Amazonka.EC2.DescribeAwsNetworkPerformanceMetricSubscriptions
+import Amazonka.EC2.DescribeBundleTasks
+import Amazonka.EC2.DescribeByoipCidrs
+import Amazonka.EC2.DescribeCapacityReservationFleets
+import Amazonka.EC2.DescribeCapacityReservations
+import Amazonka.EC2.DescribeCarrierGateways
+import Amazonka.EC2.DescribeClassicLinkInstances
+import Amazonka.EC2.DescribeClientVpnAuthorizationRules
+import Amazonka.EC2.DescribeClientVpnConnections
+import Amazonka.EC2.DescribeClientVpnEndpoints
+import Amazonka.EC2.DescribeClientVpnRoutes
+import Amazonka.EC2.DescribeClientVpnTargetNetworks
+import Amazonka.EC2.DescribeCoipPools
+import Amazonka.EC2.DescribeConversionTasks
+import Amazonka.EC2.DescribeCustomerGateways
+import Amazonka.EC2.DescribeDhcpOptions
+import Amazonka.EC2.DescribeEgressOnlyInternetGateways
+import Amazonka.EC2.DescribeElasticGpus
+import Amazonka.EC2.DescribeExportImageTasks
+import Amazonka.EC2.DescribeExportTasks
+import Amazonka.EC2.DescribeFastLaunchImages
+import Amazonka.EC2.DescribeFastSnapshotRestores
+import Amazonka.EC2.DescribeFleetHistory
+import Amazonka.EC2.DescribeFleetInstances
+import Amazonka.EC2.DescribeFleets
+import Amazonka.EC2.DescribeFlowLogs
+import Amazonka.EC2.DescribeFpgaImageAttribute
+import Amazonka.EC2.DescribeFpgaImages
+import Amazonka.EC2.DescribeHostReservationOfferings
+import Amazonka.EC2.DescribeHostReservations
+import Amazonka.EC2.DescribeHosts
+import Amazonka.EC2.DescribeIamInstanceProfileAssociations
+import Amazonka.EC2.DescribeIdFormat
+import Amazonka.EC2.DescribeIdentityIdFormat
+import Amazonka.EC2.DescribeImageAttribute
+import Amazonka.EC2.DescribeImages
+import Amazonka.EC2.DescribeImportImageTasks
+import Amazonka.EC2.DescribeImportSnapshotTasks
+import Amazonka.EC2.DescribeInstanceAttribute
+import Amazonka.EC2.DescribeInstanceCreditSpecifications
+import Amazonka.EC2.DescribeInstanceEventNotificationAttributes
+import Amazonka.EC2.DescribeInstanceEventWindows
+import Amazonka.EC2.DescribeInstanceStatus
+import Amazonka.EC2.DescribeInstanceTypeOfferings
+import Amazonka.EC2.DescribeInstanceTypes
+import Amazonka.EC2.DescribeInstances
+import Amazonka.EC2.DescribeInternetGateways
+import Amazonka.EC2.DescribeIpamPools
+import Amazonka.EC2.DescribeIpamScopes
+import Amazonka.EC2.DescribeIpams
+import Amazonka.EC2.DescribeIpv6Pools
+import Amazonka.EC2.DescribeKeyPairs
+import Amazonka.EC2.DescribeLaunchTemplateVersions
+import Amazonka.EC2.DescribeLaunchTemplates
+import Amazonka.EC2.DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+import Amazonka.EC2.DescribeLocalGatewayRouteTableVpcAssociations
+import Amazonka.EC2.DescribeLocalGatewayRouteTables
+import Amazonka.EC2.DescribeLocalGatewayVirtualInterfaceGroups
+import Amazonka.EC2.DescribeLocalGatewayVirtualInterfaces
+import Amazonka.EC2.DescribeLocalGateways
+import Amazonka.EC2.DescribeManagedPrefixLists
+import Amazonka.EC2.DescribeMovingAddresses
+import Amazonka.EC2.DescribeNatGateways
+import Amazonka.EC2.DescribeNetworkAcls
+import Amazonka.EC2.DescribeNetworkInsightsAccessScopeAnalyses
+import Amazonka.EC2.DescribeNetworkInsightsAccessScopes
+import Amazonka.EC2.DescribeNetworkInsightsAnalyses
+import Amazonka.EC2.DescribeNetworkInsightsPaths
+import Amazonka.EC2.DescribeNetworkInterfaceAttribute
+import Amazonka.EC2.DescribeNetworkInterfacePermissions
+import Amazonka.EC2.DescribeNetworkInterfaces
+import Amazonka.EC2.DescribePlacementGroups
+import Amazonka.EC2.DescribePrefixLists
+import Amazonka.EC2.DescribePrincipalIdFormat
+import Amazonka.EC2.DescribePublicIpv4Pools
+import Amazonka.EC2.DescribeRegions
+import Amazonka.EC2.DescribeReplaceRootVolumeTasks
+import Amazonka.EC2.DescribeReservedInstances
+import Amazonka.EC2.DescribeReservedInstancesListings
+import Amazonka.EC2.DescribeReservedInstancesModifications
+import Amazonka.EC2.DescribeReservedInstancesOfferings
+import Amazonka.EC2.DescribeRouteTables
+import Amazonka.EC2.DescribeScheduledInstanceAvailability
+import Amazonka.EC2.DescribeScheduledInstances
+import Amazonka.EC2.DescribeSecurityGroupReferences
+import Amazonka.EC2.DescribeSecurityGroupRules
+import Amazonka.EC2.DescribeSecurityGroups
+import Amazonka.EC2.DescribeSnapshotAttribute
+import Amazonka.EC2.DescribeSnapshotTierStatus
+import Amazonka.EC2.DescribeSnapshots
+import Amazonka.EC2.DescribeSpotDatafeedSubscription
+import Amazonka.EC2.DescribeSpotFleetInstances
+import Amazonka.EC2.DescribeSpotFleetRequestHistory
+import Amazonka.EC2.DescribeSpotFleetRequests
+import Amazonka.EC2.DescribeSpotInstanceRequests
+import Amazonka.EC2.DescribeSpotPriceHistory
+import Amazonka.EC2.DescribeStaleSecurityGroups
+import Amazonka.EC2.DescribeStoreImageTasks
+import Amazonka.EC2.DescribeSubnets
+import Amazonka.EC2.DescribeTags
+import Amazonka.EC2.DescribeTrafficMirrorFilters
+import Amazonka.EC2.DescribeTrafficMirrorSessions
+import Amazonka.EC2.DescribeTrafficMirrorTargets
+import Amazonka.EC2.DescribeTransitGatewayAttachments
+import Amazonka.EC2.DescribeTransitGatewayConnectPeers
+import Amazonka.EC2.DescribeTransitGatewayConnects
+import Amazonka.EC2.DescribeTransitGatewayMulticastDomains
+import Amazonka.EC2.DescribeTransitGatewayPeeringAttachments
+import Amazonka.EC2.DescribeTransitGatewayPolicyTables
+import Amazonka.EC2.DescribeTransitGatewayRouteTableAnnouncements
+import Amazonka.EC2.DescribeTransitGatewayRouteTables
+import Amazonka.EC2.DescribeTransitGatewayVpcAttachments
+import Amazonka.EC2.DescribeTransitGateways
+import Amazonka.EC2.DescribeTrunkInterfaceAssociations
+import Amazonka.EC2.DescribeVerifiedAccessEndpoints
+import Amazonka.EC2.DescribeVerifiedAccessGroups
+import Amazonka.EC2.DescribeVerifiedAccessInstanceLoggingConfigurations
+import Amazonka.EC2.DescribeVerifiedAccessInstances
+import Amazonka.EC2.DescribeVerifiedAccessTrustProviders
+import Amazonka.EC2.DescribeVolumeAttribute
+import Amazonka.EC2.DescribeVolumeStatus
+import Amazonka.EC2.DescribeVolumes
+import Amazonka.EC2.DescribeVolumesModifications
+import Amazonka.EC2.DescribeVpcAttribute
+import Amazonka.EC2.DescribeVpcClassicLink
+import Amazonka.EC2.DescribeVpcClassicLinkDnsSupport
+import Amazonka.EC2.DescribeVpcEndpointConnectionNotifications
+import Amazonka.EC2.DescribeVpcEndpointConnections
+import Amazonka.EC2.DescribeVpcEndpointServiceConfigurations
+import Amazonka.EC2.DescribeVpcEndpointServicePermissions
+import Amazonka.EC2.DescribeVpcEndpointServices
+import Amazonka.EC2.DescribeVpcEndpoints
+import Amazonka.EC2.DescribeVpcPeeringConnections
+import Amazonka.EC2.DescribeVpcs
+import Amazonka.EC2.DescribeVpnConnections
+import Amazonka.EC2.DescribeVpnGateways
+import Amazonka.EC2.DetachClassicLinkVpc
+import Amazonka.EC2.DetachInternetGateway
+import Amazonka.EC2.DetachNetworkInterface
+import Amazonka.EC2.DetachVerifiedAccessTrustProvider
+import Amazonka.EC2.DetachVolume
+import Amazonka.EC2.DetachVpnGateway
+import Amazonka.EC2.DisableAddressTransfer
+import Amazonka.EC2.DisableAwsNetworkPerformanceMetricSubscription
+import Amazonka.EC2.DisableEbsEncryptionByDefault
+import Amazonka.EC2.DisableFastLaunch
+import Amazonka.EC2.DisableFastSnapshotRestores
+import Amazonka.EC2.DisableImageDeprecation
+import Amazonka.EC2.DisableIpamOrganizationAdminAccount
+import Amazonka.EC2.DisableSerialConsoleAccess
+import Amazonka.EC2.DisableTransitGatewayRouteTablePropagation
+import Amazonka.EC2.DisableVgwRoutePropagation
+import Amazonka.EC2.DisableVpcClassicLink
+import Amazonka.EC2.DisableVpcClassicLinkDnsSupport
+import Amazonka.EC2.DisassociateAddress
+import Amazonka.EC2.DisassociateClientVpnTargetNetwork
+import Amazonka.EC2.DisassociateEnclaveCertificateIamRole
+import Amazonka.EC2.DisassociateIamInstanceProfile
+import Amazonka.EC2.DisassociateInstanceEventWindow
+import Amazonka.EC2.DisassociateRouteTable
+import Amazonka.EC2.DisassociateSubnetCidrBlock
+import Amazonka.EC2.DisassociateTransitGatewayMulticastDomain
+import Amazonka.EC2.DisassociateTransitGatewayPolicyTable
+import Amazonka.EC2.DisassociateTransitGatewayRouteTable
+import Amazonka.EC2.DisassociateTrunkInterface
+import Amazonka.EC2.DisassociateVpcCidrBlock
+import Amazonka.EC2.EnableAddressTransfer
+import Amazonka.EC2.EnableAwsNetworkPerformanceMetricSubscription
+import Amazonka.EC2.EnableEbsEncryptionByDefault
+import Amazonka.EC2.EnableFastLaunch
+import Amazonka.EC2.EnableFastSnapshotRestores
+import Amazonka.EC2.EnableImageDeprecation
+import Amazonka.EC2.EnableIpamOrganizationAdminAccount
+import Amazonka.EC2.EnableReachabilityAnalyzerOrganizationSharing
+import Amazonka.EC2.EnableSerialConsoleAccess
+import Amazonka.EC2.EnableTransitGatewayRouteTablePropagation
+import Amazonka.EC2.EnableVgwRoutePropagation
+import Amazonka.EC2.EnableVolumeIO
+import Amazonka.EC2.EnableVpcClassicLink
+import Amazonka.EC2.EnableVpcClassicLinkDnsSupport
+import Amazonka.EC2.ExportClientVpnClientCertificateRevocationList
+import Amazonka.EC2.ExportClientVpnClientConfiguration
+import Amazonka.EC2.ExportImage
+import Amazonka.EC2.ExportTransitGatewayRoutes
+import Amazonka.EC2.GetAssociatedEnclaveCertificateIamRoles
+import Amazonka.EC2.GetAssociatedIpv6PoolCidrs
+import Amazonka.EC2.GetAwsNetworkPerformanceData
+import Amazonka.EC2.GetCapacityReservationUsage
+import Amazonka.EC2.GetCoipPoolUsage
+import Amazonka.EC2.GetConsoleOutput
+import Amazonka.EC2.GetConsoleScreenshot
+import Amazonka.EC2.GetDefaultCreditSpecification
+import Amazonka.EC2.GetEbsDefaultKmsKeyId
+import Amazonka.EC2.GetEbsEncryptionByDefault
+import Amazonka.EC2.GetFlowLogsIntegrationTemplate
+import Amazonka.EC2.GetGroupsForCapacityReservation
+import Amazonka.EC2.GetHostReservationPurchasePreview
+import Amazonka.EC2.GetInstanceTypesFromInstanceRequirements
+import Amazonka.EC2.GetInstanceUefiData
+import Amazonka.EC2.GetIpamAddressHistory
+import Amazonka.EC2.GetIpamPoolAllocations
+import Amazonka.EC2.GetIpamPoolCidrs
+import Amazonka.EC2.GetIpamResourceCidrs
+import Amazonka.EC2.GetLaunchTemplateData
+import Amazonka.EC2.GetManagedPrefixListAssociations
+import Amazonka.EC2.GetManagedPrefixListEntries
+import Amazonka.EC2.GetNetworkInsightsAccessScopeAnalysisFindings
+import Amazonka.EC2.GetNetworkInsightsAccessScopeContent
+import Amazonka.EC2.GetPasswordData
+import Amazonka.EC2.GetReservedInstancesExchangeQuote
+import Amazonka.EC2.GetSerialConsoleAccessStatus
+import Amazonka.EC2.GetSpotPlacementScores
+import Amazonka.EC2.GetSubnetCidrReservations
+import Amazonka.EC2.GetTransitGatewayAttachmentPropagations
+import Amazonka.EC2.GetTransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.GetTransitGatewayPolicyTableAssociations
+import Amazonka.EC2.GetTransitGatewayPolicyTableEntries
+import Amazonka.EC2.GetTransitGatewayPrefixListReferences
+import Amazonka.EC2.GetTransitGatewayRouteTableAssociations
+import Amazonka.EC2.GetTransitGatewayRouteTablePropagations
+import Amazonka.EC2.GetVerifiedAccessEndpointPolicy
+import Amazonka.EC2.GetVerifiedAccessGroupPolicy
+import Amazonka.EC2.GetVpnConnectionDeviceSampleConfiguration
+import Amazonka.EC2.GetVpnConnectionDeviceTypes
+import Amazonka.EC2.ImportClientVpnClientCertificateRevocationList
+import Amazonka.EC2.ImportImage
+import Amazonka.EC2.ImportInstance
+import Amazonka.EC2.ImportKeyPair
+import Amazonka.EC2.ImportSnapshot
+import Amazonka.EC2.ImportVolume
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Lens
+import Amazonka.EC2.ListImagesInRecycleBin
+import Amazonka.EC2.ListSnapshotsInRecycleBin
+import Amazonka.EC2.ModifyAddressAttribute
+import Amazonka.EC2.ModifyAvailabilityZoneGroup
+import Amazonka.EC2.ModifyCapacityReservation
+import Amazonka.EC2.ModifyCapacityReservationFleet
+import Amazonka.EC2.ModifyClientVpnEndpoint
+import Amazonka.EC2.ModifyDefaultCreditSpecification
+import Amazonka.EC2.ModifyEbsDefaultKmsKeyId
+import Amazonka.EC2.ModifyFleet
+import Amazonka.EC2.ModifyFpgaImageAttribute
+import Amazonka.EC2.ModifyHosts
+import Amazonka.EC2.ModifyIdFormat
+import Amazonka.EC2.ModifyIdentityIdFormat
+import Amazonka.EC2.ModifyImageAttribute
+import Amazonka.EC2.ModifyInstanceAttribute
+import Amazonka.EC2.ModifyInstanceCapacityReservationAttributes
+import Amazonka.EC2.ModifyInstanceCreditSpecification
+import Amazonka.EC2.ModifyInstanceEventStartTime
+import Amazonka.EC2.ModifyInstanceEventWindow
+import Amazonka.EC2.ModifyInstanceMaintenanceOptions
+import Amazonka.EC2.ModifyInstanceMetadataOptions
+import Amazonka.EC2.ModifyInstancePlacement
+import Amazonka.EC2.ModifyIpam
+import Amazonka.EC2.ModifyIpamPool
+import Amazonka.EC2.ModifyIpamResourceCidr
+import Amazonka.EC2.ModifyIpamScope
+import Amazonka.EC2.ModifyLaunchTemplate
+import Amazonka.EC2.ModifyLocalGatewayRoute
+import Amazonka.EC2.ModifyManagedPrefixList
+import Amazonka.EC2.ModifyNetworkInterfaceAttribute
+import Amazonka.EC2.ModifyPrivateDnsNameOptions
+import Amazonka.EC2.ModifyReservedInstances
+import Amazonka.EC2.ModifySecurityGroupRules
+import Amazonka.EC2.ModifySnapshotAttribute
+import Amazonka.EC2.ModifySnapshotTier
+import Amazonka.EC2.ModifySpotFleetRequest
+import Amazonka.EC2.ModifySubnetAttribute
+import Amazonka.EC2.ModifyTrafficMirrorFilterNetworkServices
+import Amazonka.EC2.ModifyTrafficMirrorFilterRule
+import Amazonka.EC2.ModifyTrafficMirrorSession
+import Amazonka.EC2.ModifyTransitGateway
+import Amazonka.EC2.ModifyTransitGatewayPrefixListReference
+import Amazonka.EC2.ModifyTransitGatewayVpcAttachment
+import Amazonka.EC2.ModifyVerifiedAccessEndpoint
+import Amazonka.EC2.ModifyVerifiedAccessEndpointPolicy
+import Amazonka.EC2.ModifyVerifiedAccessGroup
+import Amazonka.EC2.ModifyVerifiedAccessGroupPolicy
+import Amazonka.EC2.ModifyVerifiedAccessInstance
+import Amazonka.EC2.ModifyVerifiedAccessInstanceLoggingConfiguration
+import Amazonka.EC2.ModifyVerifiedAccessTrustProvider
+import Amazonka.EC2.ModifyVolume
+import Amazonka.EC2.ModifyVolumeAttribute
+import Amazonka.EC2.ModifyVpcAttribute
+import Amazonka.EC2.ModifyVpcEndpoint
+import Amazonka.EC2.ModifyVpcEndpointConnectionNotification
+import Amazonka.EC2.ModifyVpcEndpointServiceConfiguration
+import Amazonka.EC2.ModifyVpcEndpointServicePayerResponsibility
+import Amazonka.EC2.ModifyVpcEndpointServicePermissions
+import Amazonka.EC2.ModifyVpcPeeringConnectionOptions
+import Amazonka.EC2.ModifyVpcTenancy
+import Amazonka.EC2.ModifyVpnConnection
+import Amazonka.EC2.ModifyVpnConnectionOptions
+import Amazonka.EC2.ModifyVpnTunnelCertificate
+import Amazonka.EC2.ModifyVpnTunnelOptions
+import Amazonka.EC2.MonitorInstances
+import Amazonka.EC2.MoveAddressToVpc
+import Amazonka.EC2.MoveByoipCidrToIpam
+import Amazonka.EC2.ProvisionByoipCidr
+import Amazonka.EC2.ProvisionIpamPoolCidr
+import Amazonka.EC2.ProvisionPublicIpv4PoolCidr
+import Amazonka.EC2.PurchaseHostReservation
+import Amazonka.EC2.PurchaseReservedInstancesOffering
+import Amazonka.EC2.PurchaseScheduledInstances
+import Amazonka.EC2.RebootInstances
+import Amazonka.EC2.RegisterImage
+import Amazonka.EC2.RegisterInstanceEventNotificationAttributes
+import Amazonka.EC2.RegisterTransitGatewayMulticastGroupMembers
+import Amazonka.EC2.RegisterTransitGatewayMulticastGroupSources
+import Amazonka.EC2.RejectTransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.RejectTransitGatewayPeeringAttachment
+import Amazonka.EC2.RejectTransitGatewayVpcAttachment
+import Amazonka.EC2.RejectVpcEndpointConnections
+import Amazonka.EC2.RejectVpcPeeringConnection
+import Amazonka.EC2.ReleaseAddress
+import Amazonka.EC2.ReleaseHosts
+import Amazonka.EC2.ReleaseIpamPoolAllocation
+import Amazonka.EC2.ReplaceIamInstanceProfileAssociation
+import Amazonka.EC2.ReplaceNetworkAclAssociation
+import Amazonka.EC2.ReplaceNetworkAclEntry
+import Amazonka.EC2.ReplaceRoute
+import Amazonka.EC2.ReplaceRouteTableAssociation
+import Amazonka.EC2.ReplaceTransitGatewayRoute
+import Amazonka.EC2.ReportInstanceStatus
+import Amazonka.EC2.RequestSpotFleet
+import Amazonka.EC2.RequestSpotInstances
+import Amazonka.EC2.ResetAddressAttribute
+import Amazonka.EC2.ResetEbsDefaultKmsKeyId
+import Amazonka.EC2.ResetFpgaImageAttribute
+import Amazonka.EC2.ResetImageAttribute
+import Amazonka.EC2.ResetInstanceAttribute
+import Amazonka.EC2.ResetNetworkInterfaceAttribute
+import Amazonka.EC2.ResetSnapshotAttribute
+import Amazonka.EC2.RestoreAddressToClassic
+import Amazonka.EC2.RestoreImageFromRecycleBin
+import Amazonka.EC2.RestoreManagedPrefixListVersion
+import Amazonka.EC2.RestoreSnapshotFromRecycleBin
+import Amazonka.EC2.RestoreSnapshotTier
+import Amazonka.EC2.RevokeClientVpnIngress
+import Amazonka.EC2.RevokeSecurityGroupEgress
+import Amazonka.EC2.RevokeSecurityGroupIngress
+import Amazonka.EC2.RunInstances
+import Amazonka.EC2.RunScheduledInstances
+import Amazonka.EC2.SearchLocalGatewayRoutes
+import Amazonka.EC2.SearchTransitGatewayMulticastGroups
+import Amazonka.EC2.SearchTransitGatewayRoutes
+import Amazonka.EC2.SendDiagnosticInterrupt
+import Amazonka.EC2.StartInstances
+import Amazonka.EC2.StartNetworkInsightsAccessScopeAnalysis
+import Amazonka.EC2.StartNetworkInsightsAnalysis
+import Amazonka.EC2.StartVpcEndpointServicePrivateDnsVerification
+import Amazonka.EC2.StopInstances
+import Amazonka.EC2.TerminateClientVpnConnections
+import Amazonka.EC2.TerminateInstances
+import Amazonka.EC2.Types
+import Amazonka.EC2.UnassignIpv6Addresses
+import Amazonka.EC2.UnassignPrivateIpAddresses
+import Amazonka.EC2.UnmonitorInstances
+import Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsEgress
+import Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsIngress
+import Amazonka.EC2.Waiters
+import Amazonka.EC2.WithdrawByoipCidr
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'EC2'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/EC2/AcceptAddressTransfer.hs b/gen/Amazonka/EC2/AcceptAddressTransfer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptAddressTransfer.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptAddressTransfer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts an Elastic IP address transfer. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#using-instance-addressing-eips-transfer-accept Accept a transferred Elastic IP address>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.AcceptAddressTransfer
+  ( -- * Creating a Request
+    AcceptAddressTransfer (..),
+    newAcceptAddressTransfer,
+
+    -- * Request Lenses
+    acceptAddressTransfer_dryRun,
+    acceptAddressTransfer_tagSpecifications,
+    acceptAddressTransfer_address,
+
+    -- * Destructuring the Response
+    AcceptAddressTransferResponse (..),
+    newAcceptAddressTransferResponse,
+
+    -- * Response Lenses
+    acceptAddressTransferResponse_addressTransfer,
+    acceptAddressTransferResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptAddressTransfer' smart constructor.
+data AcceptAddressTransfer = AcceptAddressTransfer'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for the
+    -- filter name and @TeamA@ for the filter value.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The Elastic IP address you are accepting for transfer.
+    address :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptAddressTransfer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptAddressTransfer_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'acceptAddressTransfer_tagSpecifications' - @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for the
+-- filter name and @TeamA@ for the filter value.
+--
+-- 'address', 'acceptAddressTransfer_address' - The Elastic IP address you are accepting for transfer.
+newAcceptAddressTransfer ::
+  -- | 'address'
+  Prelude.Text ->
+  AcceptAddressTransfer
+newAcceptAddressTransfer pAddress_ =
+  AcceptAddressTransfer'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      address = pAddress_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptAddressTransfer_dryRun :: Lens.Lens' AcceptAddressTransfer (Prelude.Maybe Prelude.Bool)
+acceptAddressTransfer_dryRun = Lens.lens (\AcceptAddressTransfer' {dryRun} -> dryRun) (\s@AcceptAddressTransfer' {} a -> s {dryRun = a} :: AcceptAddressTransfer)
+
+-- | @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for the
+-- filter name and @TeamA@ for the filter value.
+acceptAddressTransfer_tagSpecifications :: Lens.Lens' AcceptAddressTransfer (Prelude.Maybe [TagSpecification])
+acceptAddressTransfer_tagSpecifications = Lens.lens (\AcceptAddressTransfer' {tagSpecifications} -> tagSpecifications) (\s@AcceptAddressTransfer' {} a -> s {tagSpecifications = a} :: AcceptAddressTransfer) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Elastic IP address you are accepting for transfer.
+acceptAddressTransfer_address :: Lens.Lens' AcceptAddressTransfer Prelude.Text
+acceptAddressTransfer_address = Lens.lens (\AcceptAddressTransfer' {address} -> address) (\s@AcceptAddressTransfer' {} a -> s {address = a} :: AcceptAddressTransfer)
+
+instance Core.AWSRequest AcceptAddressTransfer where
+  type
+    AWSResponse AcceptAddressTransfer =
+      AcceptAddressTransferResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptAddressTransferResponse'
+            Prelude.<$> (x Data..@? "addressTransfer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AcceptAddressTransfer where
+  hashWithSalt _salt AcceptAddressTransfer' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` address
+
+instance Prelude.NFData AcceptAddressTransfer where
+  rnf AcceptAddressTransfer' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf address
+
+instance Data.ToHeaders AcceptAddressTransfer where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AcceptAddressTransfer where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AcceptAddressTransfer where
+  toQuery AcceptAddressTransfer' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AcceptAddressTransfer" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Address" Data.=: address
+      ]
+
+-- | /See:/ 'newAcceptAddressTransferResponse' smart constructor.
+data AcceptAddressTransferResponse = AcceptAddressTransferResponse'
+  { -- | An Elastic IP address transfer.
+    addressTransfer :: Prelude.Maybe AddressTransfer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptAddressTransferResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressTransfer', 'acceptAddressTransferResponse_addressTransfer' - An Elastic IP address transfer.
+--
+-- 'httpStatus', 'acceptAddressTransferResponse_httpStatus' - The response's http status code.
+newAcceptAddressTransferResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptAddressTransferResponse
+newAcceptAddressTransferResponse pHttpStatus_ =
+  AcceptAddressTransferResponse'
+    { addressTransfer =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An Elastic IP address transfer.
+acceptAddressTransferResponse_addressTransfer :: Lens.Lens' AcceptAddressTransferResponse (Prelude.Maybe AddressTransfer)
+acceptAddressTransferResponse_addressTransfer = Lens.lens (\AcceptAddressTransferResponse' {addressTransfer} -> addressTransfer) (\s@AcceptAddressTransferResponse' {} a -> s {addressTransfer = a} :: AcceptAddressTransferResponse)
+
+-- | The response's http status code.
+acceptAddressTransferResponse_httpStatus :: Lens.Lens' AcceptAddressTransferResponse Prelude.Int
+acceptAddressTransferResponse_httpStatus = Lens.lens (\AcceptAddressTransferResponse' {httpStatus} -> httpStatus) (\s@AcceptAddressTransferResponse' {} a -> s {httpStatus = a} :: AcceptAddressTransferResponse)
+
+instance Prelude.NFData AcceptAddressTransferResponse where
+  rnf AcceptAddressTransferResponse' {..} =
+    Prelude.rnf addressTransfer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AcceptReservedInstancesExchangeQuote.hs b/gen/Amazonka/EC2/AcceptReservedInstancesExchangeQuote.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptReservedInstancesExchangeQuote.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptReservedInstancesExchangeQuote
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts the Convertible Reserved Instance exchange quote described in
+-- the GetReservedInstancesExchangeQuote call.
+module Amazonka.EC2.AcceptReservedInstancesExchangeQuote
+  ( -- * Creating a Request
+    AcceptReservedInstancesExchangeQuote (..),
+    newAcceptReservedInstancesExchangeQuote,
+
+    -- * Request Lenses
+    acceptReservedInstancesExchangeQuote_dryRun,
+    acceptReservedInstancesExchangeQuote_targetConfigurations,
+    acceptReservedInstancesExchangeQuote_reservedInstanceIds,
+
+    -- * Destructuring the Response
+    AcceptReservedInstancesExchangeQuoteResponse (..),
+    newAcceptReservedInstancesExchangeQuoteResponse,
+
+    -- * Response Lenses
+    acceptReservedInstancesExchangeQuoteResponse_exchangeId,
+    acceptReservedInstancesExchangeQuoteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for accepting the quote.
+--
+-- /See:/ 'newAcceptReservedInstancesExchangeQuote' smart constructor.
+data AcceptReservedInstancesExchangeQuote = AcceptReservedInstancesExchangeQuote'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The configuration of the target Convertible Reserved Instance to
+    -- exchange for your current Convertible Reserved Instances.
+    targetConfigurations :: Prelude.Maybe [TargetConfigurationRequest],
+    -- | The IDs of the Convertible Reserved Instances to exchange for another
+    -- Convertible Reserved Instance of the same or higher value.
+    reservedInstanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptReservedInstancesExchangeQuote' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptReservedInstancesExchangeQuote_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'targetConfigurations', 'acceptReservedInstancesExchangeQuote_targetConfigurations' - The configuration of the target Convertible Reserved Instance to
+-- exchange for your current Convertible Reserved Instances.
+--
+-- 'reservedInstanceIds', 'acceptReservedInstancesExchangeQuote_reservedInstanceIds' - The IDs of the Convertible Reserved Instances to exchange for another
+-- Convertible Reserved Instance of the same or higher value.
+newAcceptReservedInstancesExchangeQuote ::
+  AcceptReservedInstancesExchangeQuote
+newAcceptReservedInstancesExchangeQuote =
+  AcceptReservedInstancesExchangeQuote'
+    { dryRun =
+        Prelude.Nothing,
+      targetConfigurations =
+        Prelude.Nothing,
+      reservedInstanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptReservedInstancesExchangeQuote_dryRun :: Lens.Lens' AcceptReservedInstancesExchangeQuote (Prelude.Maybe Prelude.Bool)
+acceptReservedInstancesExchangeQuote_dryRun = Lens.lens (\AcceptReservedInstancesExchangeQuote' {dryRun} -> dryRun) (\s@AcceptReservedInstancesExchangeQuote' {} a -> s {dryRun = a} :: AcceptReservedInstancesExchangeQuote)
+
+-- | The configuration of the target Convertible Reserved Instance to
+-- exchange for your current Convertible Reserved Instances.
+acceptReservedInstancesExchangeQuote_targetConfigurations :: Lens.Lens' AcceptReservedInstancesExchangeQuote (Prelude.Maybe [TargetConfigurationRequest])
+acceptReservedInstancesExchangeQuote_targetConfigurations = Lens.lens (\AcceptReservedInstancesExchangeQuote' {targetConfigurations} -> targetConfigurations) (\s@AcceptReservedInstancesExchangeQuote' {} a -> s {targetConfigurations = a} :: AcceptReservedInstancesExchangeQuote) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Convertible Reserved Instances to exchange for another
+-- Convertible Reserved Instance of the same or higher value.
+acceptReservedInstancesExchangeQuote_reservedInstanceIds :: Lens.Lens' AcceptReservedInstancesExchangeQuote [Prelude.Text]
+acceptReservedInstancesExchangeQuote_reservedInstanceIds = Lens.lens (\AcceptReservedInstancesExchangeQuote' {reservedInstanceIds} -> reservedInstanceIds) (\s@AcceptReservedInstancesExchangeQuote' {} a -> s {reservedInstanceIds = a} :: AcceptReservedInstancesExchangeQuote) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    AcceptReservedInstancesExchangeQuote
+  where
+  type
+    AWSResponse AcceptReservedInstancesExchangeQuote =
+      AcceptReservedInstancesExchangeQuoteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptReservedInstancesExchangeQuoteResponse'
+            Prelude.<$> (x Data..@? "exchangeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AcceptReservedInstancesExchangeQuote
+  where
+  hashWithSalt
+    _salt
+    AcceptReservedInstancesExchangeQuote' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` targetConfigurations
+        `Prelude.hashWithSalt` reservedInstanceIds
+
+instance
+  Prelude.NFData
+    AcceptReservedInstancesExchangeQuote
+  where
+  rnf AcceptReservedInstancesExchangeQuote' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf targetConfigurations
+      `Prelude.seq` Prelude.rnf reservedInstanceIds
+
+instance
+  Data.ToHeaders
+    AcceptReservedInstancesExchangeQuote
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AcceptReservedInstancesExchangeQuote
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AcceptReservedInstancesExchangeQuote
+  where
+  toQuery AcceptReservedInstancesExchangeQuote' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AcceptReservedInstancesExchangeQuote" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TargetConfiguration"
+              Prelude.<$> targetConfigurations
+          ),
+        Data.toQueryList
+          "ReservedInstanceId"
+          reservedInstanceIds
+      ]
+
+-- | The result of the exchange and whether it was @successful@.
+--
+-- /See:/ 'newAcceptReservedInstancesExchangeQuoteResponse' smart constructor.
+data AcceptReservedInstancesExchangeQuoteResponse = AcceptReservedInstancesExchangeQuoteResponse'
+  { -- | The ID of the successful exchange.
+    exchangeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptReservedInstancesExchangeQuoteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exchangeId', 'acceptReservedInstancesExchangeQuoteResponse_exchangeId' - The ID of the successful exchange.
+--
+-- 'httpStatus', 'acceptReservedInstancesExchangeQuoteResponse_httpStatus' - The response's http status code.
+newAcceptReservedInstancesExchangeQuoteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptReservedInstancesExchangeQuoteResponse
+newAcceptReservedInstancesExchangeQuoteResponse
+  pHttpStatus_ =
+    AcceptReservedInstancesExchangeQuoteResponse'
+      { exchangeId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the successful exchange.
+acceptReservedInstancesExchangeQuoteResponse_exchangeId :: Lens.Lens' AcceptReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text)
+acceptReservedInstancesExchangeQuoteResponse_exchangeId = Lens.lens (\AcceptReservedInstancesExchangeQuoteResponse' {exchangeId} -> exchangeId) (\s@AcceptReservedInstancesExchangeQuoteResponse' {} a -> s {exchangeId = a} :: AcceptReservedInstancesExchangeQuoteResponse)
+
+-- | The response's http status code.
+acceptReservedInstancesExchangeQuoteResponse_httpStatus :: Lens.Lens' AcceptReservedInstancesExchangeQuoteResponse Prelude.Int
+acceptReservedInstancesExchangeQuoteResponse_httpStatus = Lens.lens (\AcceptReservedInstancesExchangeQuoteResponse' {httpStatus} -> httpStatus) (\s@AcceptReservedInstancesExchangeQuoteResponse' {} a -> s {httpStatus = a} :: AcceptReservedInstancesExchangeQuoteResponse)
+
+instance
+  Prelude.NFData
+    AcceptReservedInstancesExchangeQuoteResponse
+  where
+  rnf AcceptReservedInstancesExchangeQuoteResponse' {..} =
+    Prelude.rnf exchangeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AcceptTransitGatewayMulticastDomainAssociations.hs b/gen/Amazonka/EC2/AcceptTransitGatewayMulticastDomainAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptTransitGatewayMulticastDomainAssociations.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptTransitGatewayMulticastDomainAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts a request to associate subnets with a transit gateway multicast
+-- domain.
+module Amazonka.EC2.AcceptTransitGatewayMulticastDomainAssociations
+  ( -- * Creating a Request
+    AcceptTransitGatewayMulticastDomainAssociations (..),
+    newAcceptTransitGatewayMulticastDomainAssociations,
+
+    -- * Request Lenses
+    acceptTransitGatewayMulticastDomainAssociations_dryRun,
+    acceptTransitGatewayMulticastDomainAssociations_subnetIds,
+    acceptTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId,
+    acceptTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    AcceptTransitGatewayMulticastDomainAssociationsResponse (..),
+    newAcceptTransitGatewayMulticastDomainAssociationsResponse,
+
+    -- * Response Lenses
+    acceptTransitGatewayMulticastDomainAssociationsResponse_associations,
+    acceptTransitGatewayMulticastDomainAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptTransitGatewayMulticastDomainAssociations' smart constructor.
+data AcceptTransitGatewayMulticastDomainAssociations = AcceptTransitGatewayMulticastDomainAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the subnets to associate with the transit gateway multicast
+    -- domain.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptTransitGatewayMulticastDomainAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptTransitGatewayMulticastDomainAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'subnetIds', 'acceptTransitGatewayMulticastDomainAssociations_subnetIds' - The IDs of the subnets to associate with the transit gateway multicast
+-- domain.
+--
+-- 'transitGatewayAttachmentId', 'acceptTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+--
+-- 'transitGatewayMulticastDomainId', 'acceptTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newAcceptTransitGatewayMulticastDomainAssociations ::
+  AcceptTransitGatewayMulticastDomainAssociations
+newAcceptTransitGatewayMulticastDomainAssociations =
+  AcceptTransitGatewayMulticastDomainAssociations'
+    { dryRun =
+        Prelude.Nothing,
+      subnetIds =
+        Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptTransitGatewayMulticastDomainAssociations_dryRun :: Lens.Lens' AcceptTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Bool)
+acceptTransitGatewayMulticastDomainAssociations_dryRun = Lens.lens (\AcceptTransitGatewayMulticastDomainAssociations' {dryRun} -> dryRun) (\s@AcceptTransitGatewayMulticastDomainAssociations' {} a -> s {dryRun = a} :: AcceptTransitGatewayMulticastDomainAssociations)
+
+-- | The IDs of the subnets to associate with the transit gateway multicast
+-- domain.
+acceptTransitGatewayMulticastDomainAssociations_subnetIds :: Lens.Lens' AcceptTransitGatewayMulticastDomainAssociations (Prelude.Maybe [Prelude.Text])
+acceptTransitGatewayMulticastDomainAssociations_subnetIds = Lens.lens (\AcceptTransitGatewayMulticastDomainAssociations' {subnetIds} -> subnetIds) (\s@AcceptTransitGatewayMulticastDomainAssociations' {} a -> s {subnetIds = a} :: AcceptTransitGatewayMulticastDomainAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway attachment.
+acceptTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId :: Lens.Lens' AcceptTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+acceptTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId = Lens.lens (\AcceptTransitGatewayMulticastDomainAssociations' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@AcceptTransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayAttachmentId = a} :: AcceptTransitGatewayMulticastDomainAssociations)
+
+-- | The ID of the transit gateway multicast domain.
+acceptTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId :: Lens.Lens' AcceptTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+acceptTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId = Lens.lens (\AcceptTransitGatewayMulticastDomainAssociations' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@AcceptTransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayMulticastDomainId = a} :: AcceptTransitGatewayMulticastDomainAssociations)
+
+instance
+  Core.AWSRequest
+    AcceptTransitGatewayMulticastDomainAssociations
+  where
+  type
+    AWSResponse
+      AcceptTransitGatewayMulticastDomainAssociations =
+      AcceptTransitGatewayMulticastDomainAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptTransitGatewayMulticastDomainAssociationsResponse'
+            Prelude.<$> (x Data..@? "associations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AcceptTransitGatewayMulticastDomainAssociations
+  where
+  hashWithSalt
+    _salt
+    AcceptTransitGatewayMulticastDomainAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` subnetIds
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    AcceptTransitGatewayMulticastDomainAssociations
+  where
+  rnf
+    AcceptTransitGatewayMulticastDomainAssociations' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf subnetIds
+        `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    AcceptTransitGatewayMulticastDomainAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AcceptTransitGatewayMulticastDomainAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AcceptTransitGatewayMulticastDomainAssociations
+  where
+  toQuery
+    AcceptTransitGatewayMulticastDomainAssociations' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "AcceptTransitGatewayMulticastDomainAssociations" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "SubnetIds" Prelude.<$> subnetIds),
+          "TransitGatewayAttachmentId"
+            Data.=: transitGatewayAttachmentId,
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newAcceptTransitGatewayMulticastDomainAssociationsResponse' smart constructor.
+data AcceptTransitGatewayMulticastDomainAssociationsResponse = AcceptTransitGatewayMulticastDomainAssociationsResponse'
+  { -- | Information about the multicast domain associations.
+    associations :: Prelude.Maybe TransitGatewayMulticastDomainAssociations,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptTransitGatewayMulticastDomainAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'acceptTransitGatewayMulticastDomainAssociationsResponse_associations' - Information about the multicast domain associations.
+--
+-- 'httpStatus', 'acceptTransitGatewayMulticastDomainAssociationsResponse_httpStatus' - The response's http status code.
+newAcceptTransitGatewayMulticastDomainAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptTransitGatewayMulticastDomainAssociationsResponse
+newAcceptTransitGatewayMulticastDomainAssociationsResponse
+  pHttpStatus_ =
+    AcceptTransitGatewayMulticastDomainAssociationsResponse'
+      { associations =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the multicast domain associations.
+acceptTransitGatewayMulticastDomainAssociationsResponse_associations :: Lens.Lens' AcceptTransitGatewayMulticastDomainAssociationsResponse (Prelude.Maybe TransitGatewayMulticastDomainAssociations)
+acceptTransitGatewayMulticastDomainAssociationsResponse_associations = Lens.lens (\AcceptTransitGatewayMulticastDomainAssociationsResponse' {associations} -> associations) (\s@AcceptTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {associations = a} :: AcceptTransitGatewayMulticastDomainAssociationsResponse)
+
+-- | The response's http status code.
+acceptTransitGatewayMulticastDomainAssociationsResponse_httpStatus :: Lens.Lens' AcceptTransitGatewayMulticastDomainAssociationsResponse Prelude.Int
+acceptTransitGatewayMulticastDomainAssociationsResponse_httpStatus = Lens.lens (\AcceptTransitGatewayMulticastDomainAssociationsResponse' {httpStatus} -> httpStatus) (\s@AcceptTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {httpStatus = a} :: AcceptTransitGatewayMulticastDomainAssociationsResponse)
+
+instance
+  Prelude.NFData
+    AcceptTransitGatewayMulticastDomainAssociationsResponse
+  where
+  rnf
+    AcceptTransitGatewayMulticastDomainAssociationsResponse' {..} =
+      Prelude.rnf associations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AcceptTransitGatewayPeeringAttachment.hs b/gen/Amazonka/EC2/AcceptTransitGatewayPeeringAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptTransitGatewayPeeringAttachment.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptTransitGatewayPeeringAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts a transit gateway peering attachment request. The peering
+-- attachment must be in the @pendingAcceptance@ state.
+module Amazonka.EC2.AcceptTransitGatewayPeeringAttachment
+  ( -- * Creating a Request
+    AcceptTransitGatewayPeeringAttachment (..),
+    newAcceptTransitGatewayPeeringAttachment,
+
+    -- * Request Lenses
+    acceptTransitGatewayPeeringAttachment_dryRun,
+    acceptTransitGatewayPeeringAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    AcceptTransitGatewayPeeringAttachmentResponse (..),
+    newAcceptTransitGatewayPeeringAttachmentResponse,
+
+    -- * Response Lenses
+    acceptTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    acceptTransitGatewayPeeringAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptTransitGatewayPeeringAttachment' smart constructor.
+data AcceptTransitGatewayPeeringAttachment = AcceptTransitGatewayPeeringAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptTransitGatewayPeeringAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptTransitGatewayPeeringAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'acceptTransitGatewayPeeringAttachment_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+newAcceptTransitGatewayPeeringAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  AcceptTransitGatewayPeeringAttachment
+newAcceptTransitGatewayPeeringAttachment
+  pTransitGatewayAttachmentId_ =
+    AcceptTransitGatewayPeeringAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptTransitGatewayPeeringAttachment_dryRun :: Lens.Lens' AcceptTransitGatewayPeeringAttachment (Prelude.Maybe Prelude.Bool)
+acceptTransitGatewayPeeringAttachment_dryRun = Lens.lens (\AcceptTransitGatewayPeeringAttachment' {dryRun} -> dryRun) (\s@AcceptTransitGatewayPeeringAttachment' {} a -> s {dryRun = a} :: AcceptTransitGatewayPeeringAttachment)
+
+-- | The ID of the transit gateway attachment.
+acceptTransitGatewayPeeringAttachment_transitGatewayAttachmentId :: Lens.Lens' AcceptTransitGatewayPeeringAttachment Prelude.Text
+acceptTransitGatewayPeeringAttachment_transitGatewayAttachmentId = Lens.lens (\AcceptTransitGatewayPeeringAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@AcceptTransitGatewayPeeringAttachment' {} a -> s {transitGatewayAttachmentId = a} :: AcceptTransitGatewayPeeringAttachment)
+
+instance
+  Core.AWSRequest
+    AcceptTransitGatewayPeeringAttachment
+  where
+  type
+    AWSResponse
+      AcceptTransitGatewayPeeringAttachment =
+      AcceptTransitGatewayPeeringAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptTransitGatewayPeeringAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPeeringAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AcceptTransitGatewayPeeringAttachment
+  where
+  hashWithSalt
+    _salt
+    AcceptTransitGatewayPeeringAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    AcceptTransitGatewayPeeringAttachment
+  where
+  rnf AcceptTransitGatewayPeeringAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    AcceptTransitGatewayPeeringAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AcceptTransitGatewayPeeringAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AcceptTransitGatewayPeeringAttachment
+  where
+  toQuery AcceptTransitGatewayPeeringAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AcceptTransitGatewayPeeringAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newAcceptTransitGatewayPeeringAttachmentResponse' smart constructor.
+data AcceptTransitGatewayPeeringAttachmentResponse = AcceptTransitGatewayPeeringAttachmentResponse'
+  { -- | The transit gateway peering attachment.
+    transitGatewayPeeringAttachment :: Prelude.Maybe TransitGatewayPeeringAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptTransitGatewayPeeringAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPeeringAttachment', 'acceptTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment' - The transit gateway peering attachment.
+--
+-- 'httpStatus', 'acceptTransitGatewayPeeringAttachmentResponse_httpStatus' - The response's http status code.
+newAcceptTransitGatewayPeeringAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptTransitGatewayPeeringAttachmentResponse
+newAcceptTransitGatewayPeeringAttachmentResponse
+  pHttpStatus_ =
+    AcceptTransitGatewayPeeringAttachmentResponse'
+      { transitGatewayPeeringAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The transit gateway peering attachment.
+acceptTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment :: Lens.Lens' AcceptTransitGatewayPeeringAttachmentResponse (Prelude.Maybe TransitGatewayPeeringAttachment)
+acceptTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment = Lens.lens (\AcceptTransitGatewayPeeringAttachmentResponse' {transitGatewayPeeringAttachment} -> transitGatewayPeeringAttachment) (\s@AcceptTransitGatewayPeeringAttachmentResponse' {} a -> s {transitGatewayPeeringAttachment = a} :: AcceptTransitGatewayPeeringAttachmentResponse)
+
+-- | The response's http status code.
+acceptTransitGatewayPeeringAttachmentResponse_httpStatus :: Lens.Lens' AcceptTransitGatewayPeeringAttachmentResponse Prelude.Int
+acceptTransitGatewayPeeringAttachmentResponse_httpStatus = Lens.lens (\AcceptTransitGatewayPeeringAttachmentResponse' {httpStatus} -> httpStatus) (\s@AcceptTransitGatewayPeeringAttachmentResponse' {} a -> s {httpStatus = a} :: AcceptTransitGatewayPeeringAttachmentResponse)
+
+instance
+  Prelude.NFData
+    AcceptTransitGatewayPeeringAttachmentResponse
+  where
+  rnf
+    AcceptTransitGatewayPeeringAttachmentResponse' {..} =
+      Prelude.rnf transitGatewayPeeringAttachment
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AcceptTransitGatewayVpcAttachment.hs b/gen/Amazonka/EC2/AcceptTransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptTransitGatewayVpcAttachment.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptTransitGatewayVpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts a request to attach a VPC to a transit gateway.
+--
+-- The VPC attachment must be in the @pendingAcceptance@ state. Use
+-- DescribeTransitGatewayVpcAttachments to view your pending VPC attachment
+-- requests. Use RejectTransitGatewayVpcAttachment to reject a VPC
+-- attachment request.
+module Amazonka.EC2.AcceptTransitGatewayVpcAttachment
+  ( -- * Creating a Request
+    AcceptTransitGatewayVpcAttachment (..),
+    newAcceptTransitGatewayVpcAttachment,
+
+    -- * Request Lenses
+    acceptTransitGatewayVpcAttachment_dryRun,
+    acceptTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    AcceptTransitGatewayVpcAttachmentResponse (..),
+    newAcceptTransitGatewayVpcAttachmentResponse,
+
+    -- * Response Lenses
+    acceptTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    acceptTransitGatewayVpcAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptTransitGatewayVpcAttachment' smart constructor.
+data AcceptTransitGatewayVpcAttachment = AcceptTransitGatewayVpcAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptTransitGatewayVpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptTransitGatewayVpcAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'acceptTransitGatewayVpcAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+newAcceptTransitGatewayVpcAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  AcceptTransitGatewayVpcAttachment
+newAcceptTransitGatewayVpcAttachment
+  pTransitGatewayAttachmentId_ =
+    AcceptTransitGatewayVpcAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptTransitGatewayVpcAttachment_dryRun :: Lens.Lens' AcceptTransitGatewayVpcAttachment (Prelude.Maybe Prelude.Bool)
+acceptTransitGatewayVpcAttachment_dryRun = Lens.lens (\AcceptTransitGatewayVpcAttachment' {dryRun} -> dryRun) (\s@AcceptTransitGatewayVpcAttachment' {} a -> s {dryRun = a} :: AcceptTransitGatewayVpcAttachment)
+
+-- | The ID of the attachment.
+acceptTransitGatewayVpcAttachment_transitGatewayAttachmentId :: Lens.Lens' AcceptTransitGatewayVpcAttachment Prelude.Text
+acceptTransitGatewayVpcAttachment_transitGatewayAttachmentId = Lens.lens (\AcceptTransitGatewayVpcAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@AcceptTransitGatewayVpcAttachment' {} a -> s {transitGatewayAttachmentId = a} :: AcceptTransitGatewayVpcAttachment)
+
+instance
+  Core.AWSRequest
+    AcceptTransitGatewayVpcAttachment
+  where
+  type
+    AWSResponse AcceptTransitGatewayVpcAttachment =
+      AcceptTransitGatewayVpcAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptTransitGatewayVpcAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayVpcAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AcceptTransitGatewayVpcAttachment
+  where
+  hashWithSalt
+    _salt
+    AcceptTransitGatewayVpcAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    AcceptTransitGatewayVpcAttachment
+  where
+  rnf AcceptTransitGatewayVpcAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    AcceptTransitGatewayVpcAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AcceptTransitGatewayVpcAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AcceptTransitGatewayVpcAttachment
+  where
+  toQuery AcceptTransitGatewayVpcAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AcceptTransitGatewayVpcAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newAcceptTransitGatewayVpcAttachmentResponse' smart constructor.
+data AcceptTransitGatewayVpcAttachmentResponse = AcceptTransitGatewayVpcAttachmentResponse'
+  { -- | The VPC attachment.
+    transitGatewayVpcAttachment :: Prelude.Maybe TransitGatewayVpcAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptTransitGatewayVpcAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayVpcAttachment', 'acceptTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment' - The VPC attachment.
+--
+-- 'httpStatus', 'acceptTransitGatewayVpcAttachmentResponse_httpStatus' - The response's http status code.
+newAcceptTransitGatewayVpcAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptTransitGatewayVpcAttachmentResponse
+newAcceptTransitGatewayVpcAttachmentResponse
+  pHttpStatus_ =
+    AcceptTransitGatewayVpcAttachmentResponse'
+      { transitGatewayVpcAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The VPC attachment.
+acceptTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment :: Lens.Lens' AcceptTransitGatewayVpcAttachmentResponse (Prelude.Maybe TransitGatewayVpcAttachment)
+acceptTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment = Lens.lens (\AcceptTransitGatewayVpcAttachmentResponse' {transitGatewayVpcAttachment} -> transitGatewayVpcAttachment) (\s@AcceptTransitGatewayVpcAttachmentResponse' {} a -> s {transitGatewayVpcAttachment = a} :: AcceptTransitGatewayVpcAttachmentResponse)
+
+-- | The response's http status code.
+acceptTransitGatewayVpcAttachmentResponse_httpStatus :: Lens.Lens' AcceptTransitGatewayVpcAttachmentResponse Prelude.Int
+acceptTransitGatewayVpcAttachmentResponse_httpStatus = Lens.lens (\AcceptTransitGatewayVpcAttachmentResponse' {httpStatus} -> httpStatus) (\s@AcceptTransitGatewayVpcAttachmentResponse' {} a -> s {httpStatus = a} :: AcceptTransitGatewayVpcAttachmentResponse)
+
+instance
+  Prelude.NFData
+    AcceptTransitGatewayVpcAttachmentResponse
+  where
+  rnf AcceptTransitGatewayVpcAttachmentResponse' {..} =
+    Prelude.rnf transitGatewayVpcAttachment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AcceptVpcEndpointConnections.hs b/gen/Amazonka/EC2/AcceptVpcEndpointConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptVpcEndpointConnections.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptVpcEndpointConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accepts one or more interface VPC endpoint connection requests to your
+-- VPC endpoint service.
+module Amazonka.EC2.AcceptVpcEndpointConnections
+  ( -- * Creating a Request
+    AcceptVpcEndpointConnections (..),
+    newAcceptVpcEndpointConnections,
+
+    -- * Request Lenses
+    acceptVpcEndpointConnections_dryRun,
+    acceptVpcEndpointConnections_serviceId,
+    acceptVpcEndpointConnections_vpcEndpointIds,
+
+    -- * Destructuring the Response
+    AcceptVpcEndpointConnectionsResponse (..),
+    newAcceptVpcEndpointConnectionsResponse,
+
+    -- * Response Lenses
+    acceptVpcEndpointConnectionsResponse_unsuccessful,
+    acceptVpcEndpointConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptVpcEndpointConnections' smart constructor.
+data AcceptVpcEndpointConnections = AcceptVpcEndpointConnections'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC endpoint service.
+    serviceId :: Prelude.Text,
+    -- | The IDs of one or more interface VPC endpoints.
+    vpcEndpointIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptVpcEndpointConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptVpcEndpointConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'serviceId', 'acceptVpcEndpointConnections_serviceId' - The ID of the VPC endpoint service.
+--
+-- 'vpcEndpointIds', 'acceptVpcEndpointConnections_vpcEndpointIds' - The IDs of one or more interface VPC endpoints.
+newAcceptVpcEndpointConnections ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  AcceptVpcEndpointConnections
+newAcceptVpcEndpointConnections pServiceId_ =
+  AcceptVpcEndpointConnections'
+    { dryRun =
+        Prelude.Nothing,
+      serviceId = pServiceId_,
+      vpcEndpointIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptVpcEndpointConnections_dryRun :: Lens.Lens' AcceptVpcEndpointConnections (Prelude.Maybe Prelude.Bool)
+acceptVpcEndpointConnections_dryRun = Lens.lens (\AcceptVpcEndpointConnections' {dryRun} -> dryRun) (\s@AcceptVpcEndpointConnections' {} a -> s {dryRun = a} :: AcceptVpcEndpointConnections)
+
+-- | The ID of the VPC endpoint service.
+acceptVpcEndpointConnections_serviceId :: Lens.Lens' AcceptVpcEndpointConnections Prelude.Text
+acceptVpcEndpointConnections_serviceId = Lens.lens (\AcceptVpcEndpointConnections' {serviceId} -> serviceId) (\s@AcceptVpcEndpointConnections' {} a -> s {serviceId = a} :: AcceptVpcEndpointConnections)
+
+-- | The IDs of one or more interface VPC endpoints.
+acceptVpcEndpointConnections_vpcEndpointIds :: Lens.Lens' AcceptVpcEndpointConnections [Prelude.Text]
+acceptVpcEndpointConnections_vpcEndpointIds = Lens.lens (\AcceptVpcEndpointConnections' {vpcEndpointIds} -> vpcEndpointIds) (\s@AcceptVpcEndpointConnections' {} a -> s {vpcEndpointIds = a} :: AcceptVpcEndpointConnections) Prelude.. Lens.coerced
+
+instance Core.AWSRequest AcceptVpcEndpointConnections where
+  type
+    AWSResponse AcceptVpcEndpointConnections =
+      AcceptVpcEndpointConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptVpcEndpointConnectionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AcceptVpcEndpointConnections
+  where
+  hashWithSalt _salt AcceptVpcEndpointConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` vpcEndpointIds
+
+instance Prelude.NFData AcceptVpcEndpointConnections where
+  rnf AcceptVpcEndpointConnections' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf vpcEndpointIds
+
+instance Data.ToHeaders AcceptVpcEndpointConnections where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AcceptVpcEndpointConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AcceptVpcEndpointConnections where
+  toQuery AcceptVpcEndpointConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AcceptVpcEndpointConnections" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ServiceId" Data.=: serviceId,
+        Data.toQueryList "VpcEndpointId" vpcEndpointIds
+      ]
+
+-- | /See:/ 'newAcceptVpcEndpointConnectionsResponse' smart constructor.
+data AcceptVpcEndpointConnectionsResponse = AcceptVpcEndpointConnectionsResponse'
+  { -- | Information about the interface endpoints that were not accepted, if
+    -- applicable.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptVpcEndpointConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unsuccessful', 'acceptVpcEndpointConnectionsResponse_unsuccessful' - Information about the interface endpoints that were not accepted, if
+-- applicable.
+--
+-- 'httpStatus', 'acceptVpcEndpointConnectionsResponse_httpStatus' - The response's http status code.
+newAcceptVpcEndpointConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptVpcEndpointConnectionsResponse
+newAcceptVpcEndpointConnectionsResponse pHttpStatus_ =
+  AcceptVpcEndpointConnectionsResponse'
+    { unsuccessful =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the interface endpoints that were not accepted, if
+-- applicable.
+acceptVpcEndpointConnectionsResponse_unsuccessful :: Lens.Lens' AcceptVpcEndpointConnectionsResponse (Prelude.Maybe [UnsuccessfulItem])
+acceptVpcEndpointConnectionsResponse_unsuccessful = Lens.lens (\AcceptVpcEndpointConnectionsResponse' {unsuccessful} -> unsuccessful) (\s@AcceptVpcEndpointConnectionsResponse' {} a -> s {unsuccessful = a} :: AcceptVpcEndpointConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+acceptVpcEndpointConnectionsResponse_httpStatus :: Lens.Lens' AcceptVpcEndpointConnectionsResponse Prelude.Int
+acceptVpcEndpointConnectionsResponse_httpStatus = Lens.lens (\AcceptVpcEndpointConnectionsResponse' {httpStatus} -> httpStatus) (\s@AcceptVpcEndpointConnectionsResponse' {} a -> s {httpStatus = a} :: AcceptVpcEndpointConnectionsResponse)
+
+instance
+  Prelude.NFData
+    AcceptVpcEndpointConnectionsResponse
+  where
+  rnf AcceptVpcEndpointConnectionsResponse' {..} =
+    Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AcceptVpcPeeringConnection.hs b/gen/Amazonka/EC2/AcceptVpcPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AcceptVpcPeeringConnection.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AcceptVpcPeeringConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accept a VPC peering connection request. To accept a request, the VPC
+-- peering connection must be in the @pending-acceptance@ state, and you
+-- must be the owner of the peer VPC. Use DescribeVpcPeeringConnections to
+-- view your outstanding VPC peering connection requests.
+--
+-- For an inter-Region VPC peering connection request, you must accept the
+-- VPC peering connection in the Region of the accepter VPC.
+module Amazonka.EC2.AcceptVpcPeeringConnection
+  ( -- * Creating a Request
+    AcceptVpcPeeringConnection (..),
+    newAcceptVpcPeeringConnection,
+
+    -- * Request Lenses
+    acceptVpcPeeringConnection_dryRun,
+    acceptVpcPeeringConnection_vpcPeeringConnectionId,
+
+    -- * Destructuring the Response
+    AcceptVpcPeeringConnectionResponse (..),
+    newAcceptVpcPeeringConnectionResponse,
+
+    -- * Response Lenses
+    acceptVpcPeeringConnectionResponse_vpcPeeringConnection,
+    acceptVpcPeeringConnectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAcceptVpcPeeringConnection' smart constructor.
+data AcceptVpcPeeringConnection = AcceptVpcPeeringConnection'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC peering connection. You must specify this parameter in
+    -- the request.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptVpcPeeringConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'acceptVpcPeeringConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcPeeringConnectionId', 'acceptVpcPeeringConnection_vpcPeeringConnectionId' - The ID of the VPC peering connection. You must specify this parameter in
+-- the request.
+newAcceptVpcPeeringConnection ::
+  AcceptVpcPeeringConnection
+newAcceptVpcPeeringConnection =
+  AcceptVpcPeeringConnection'
+    { dryRun =
+        Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+acceptVpcPeeringConnection_dryRun :: Lens.Lens' AcceptVpcPeeringConnection (Prelude.Maybe Prelude.Bool)
+acceptVpcPeeringConnection_dryRun = Lens.lens (\AcceptVpcPeeringConnection' {dryRun} -> dryRun) (\s@AcceptVpcPeeringConnection' {} a -> s {dryRun = a} :: AcceptVpcPeeringConnection)
+
+-- | The ID of the VPC peering connection. You must specify this parameter in
+-- the request.
+acceptVpcPeeringConnection_vpcPeeringConnectionId :: Lens.Lens' AcceptVpcPeeringConnection (Prelude.Maybe Prelude.Text)
+acceptVpcPeeringConnection_vpcPeeringConnectionId = Lens.lens (\AcceptVpcPeeringConnection' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@AcceptVpcPeeringConnection' {} a -> s {vpcPeeringConnectionId = a} :: AcceptVpcPeeringConnection)
+
+instance Core.AWSRequest AcceptVpcPeeringConnection where
+  type
+    AWSResponse AcceptVpcPeeringConnection =
+      AcceptVpcPeeringConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AcceptVpcPeeringConnectionResponse'
+            Prelude.<$> (x Data..@? "vpcPeeringConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AcceptVpcPeeringConnection where
+  hashWithSalt _salt AcceptVpcPeeringConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData AcceptVpcPeeringConnection where
+  rnf AcceptVpcPeeringConnection' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+
+instance Data.ToHeaders AcceptVpcPeeringConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AcceptVpcPeeringConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AcceptVpcPeeringConnection where
+  toQuery AcceptVpcPeeringConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AcceptVpcPeeringConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId
+      ]
+
+-- | /See:/ 'newAcceptVpcPeeringConnectionResponse' smart constructor.
+data AcceptVpcPeeringConnectionResponse = AcceptVpcPeeringConnectionResponse'
+  { -- | Information about the VPC peering connection.
+    vpcPeeringConnection :: Prelude.Maybe VpcPeeringConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceptVpcPeeringConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcPeeringConnection', 'acceptVpcPeeringConnectionResponse_vpcPeeringConnection' - Information about the VPC peering connection.
+--
+-- 'httpStatus', 'acceptVpcPeeringConnectionResponse_httpStatus' - The response's http status code.
+newAcceptVpcPeeringConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AcceptVpcPeeringConnectionResponse
+newAcceptVpcPeeringConnectionResponse pHttpStatus_ =
+  AcceptVpcPeeringConnectionResponse'
+    { vpcPeeringConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPC peering connection.
+acceptVpcPeeringConnectionResponse_vpcPeeringConnection :: Lens.Lens' AcceptVpcPeeringConnectionResponse (Prelude.Maybe VpcPeeringConnection)
+acceptVpcPeeringConnectionResponse_vpcPeeringConnection = Lens.lens (\AcceptVpcPeeringConnectionResponse' {vpcPeeringConnection} -> vpcPeeringConnection) (\s@AcceptVpcPeeringConnectionResponse' {} a -> s {vpcPeeringConnection = a} :: AcceptVpcPeeringConnectionResponse)
+
+-- | The response's http status code.
+acceptVpcPeeringConnectionResponse_httpStatus :: Lens.Lens' AcceptVpcPeeringConnectionResponse Prelude.Int
+acceptVpcPeeringConnectionResponse_httpStatus = Lens.lens (\AcceptVpcPeeringConnectionResponse' {httpStatus} -> httpStatus) (\s@AcceptVpcPeeringConnectionResponse' {} a -> s {httpStatus = a} :: AcceptVpcPeeringConnectionResponse)
+
+instance
+  Prelude.NFData
+    AcceptVpcPeeringConnectionResponse
+  where
+  rnf AcceptVpcPeeringConnectionResponse' {..} =
+    Prelude.rnf vpcPeeringConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AdvertiseByoipCidr.hs b/gen/Amazonka/EC2/AdvertiseByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AdvertiseByoipCidr.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AdvertiseByoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Advertises an IPv4 or IPv6 address range that is provisioned for use
+-- with your Amazon Web Services resources through bring your own IP
+-- addresses (BYOIP).
+--
+-- You can perform this operation at most once every 10 seconds, even if
+-- you specify different address ranges each time.
+--
+-- We recommend that you stop advertising the BYOIP CIDR from other
+-- locations when you advertise it from Amazon Web Services. To minimize
+-- down time, you can configure your Amazon Web Services resources to use
+-- an address from a BYOIP CIDR before it is advertised, and then
+-- simultaneously stop advertising it from the current location and start
+-- advertising it through Amazon Web Services.
+--
+-- It can take a few minutes before traffic to the specified addresses
+-- starts routing to Amazon Web Services because of BGP propagation delays.
+--
+-- To stop advertising the BYOIP CIDR, use WithdrawByoipCidr.
+module Amazonka.EC2.AdvertiseByoipCidr
+  ( -- * Creating a Request
+    AdvertiseByoipCidr (..),
+    newAdvertiseByoipCidr,
+
+    -- * Request Lenses
+    advertiseByoipCidr_dryRun,
+    advertiseByoipCidr_cidr,
+
+    -- * Destructuring the Response
+    AdvertiseByoipCidrResponse (..),
+    newAdvertiseByoipCidrResponse,
+
+    -- * Response Lenses
+    advertiseByoipCidrResponse_byoipCidr,
+    advertiseByoipCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAdvertiseByoipCidr' smart constructor.
+data AdvertiseByoipCidr = AdvertiseByoipCidr'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdvertiseByoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'advertiseByoipCidr_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'cidr', 'advertiseByoipCidr_cidr' - 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.
+newAdvertiseByoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  AdvertiseByoipCidr
+newAdvertiseByoipCidr pCidr_ =
+  AdvertiseByoipCidr'
+    { dryRun = Prelude.Nothing,
+      cidr = pCidr_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+advertiseByoipCidr_dryRun :: Lens.Lens' AdvertiseByoipCidr (Prelude.Maybe Prelude.Bool)
+advertiseByoipCidr_dryRun = Lens.lens (\AdvertiseByoipCidr' {dryRun} -> dryRun) (\s@AdvertiseByoipCidr' {} a -> s {dryRun = a} :: AdvertiseByoipCidr)
+
+-- | 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.
+advertiseByoipCidr_cidr :: Lens.Lens' AdvertiseByoipCidr Prelude.Text
+advertiseByoipCidr_cidr = Lens.lens (\AdvertiseByoipCidr' {cidr} -> cidr) (\s@AdvertiseByoipCidr' {} a -> s {cidr = a} :: AdvertiseByoipCidr)
+
+instance Core.AWSRequest AdvertiseByoipCidr where
+  type
+    AWSResponse AdvertiseByoipCidr =
+      AdvertiseByoipCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AdvertiseByoipCidrResponse'
+            Prelude.<$> (x Data..@? "byoipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AdvertiseByoipCidr where
+  hashWithSalt _salt AdvertiseByoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData AdvertiseByoipCidr where
+  rnf AdvertiseByoipCidr' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf cidr
+
+instance Data.ToHeaders AdvertiseByoipCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AdvertiseByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AdvertiseByoipCidr where
+  toQuery AdvertiseByoipCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AdvertiseByoipCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Cidr" Data.=: cidr
+      ]
+
+-- | /See:/ 'newAdvertiseByoipCidrResponse' smart constructor.
+data AdvertiseByoipCidrResponse = AdvertiseByoipCidrResponse'
+  { -- | Information about the address range.
+    byoipCidr :: Prelude.Maybe ByoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdvertiseByoipCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byoipCidr', 'advertiseByoipCidrResponse_byoipCidr' - Information about the address range.
+--
+-- 'httpStatus', 'advertiseByoipCidrResponse_httpStatus' - The response's http status code.
+newAdvertiseByoipCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AdvertiseByoipCidrResponse
+newAdvertiseByoipCidrResponse pHttpStatus_ =
+  AdvertiseByoipCidrResponse'
+    { byoipCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address range.
+advertiseByoipCidrResponse_byoipCidr :: Lens.Lens' AdvertiseByoipCidrResponse (Prelude.Maybe ByoipCidr)
+advertiseByoipCidrResponse_byoipCidr = Lens.lens (\AdvertiseByoipCidrResponse' {byoipCidr} -> byoipCidr) (\s@AdvertiseByoipCidrResponse' {} a -> s {byoipCidr = a} :: AdvertiseByoipCidrResponse)
+
+-- | The response's http status code.
+advertiseByoipCidrResponse_httpStatus :: Lens.Lens' AdvertiseByoipCidrResponse Prelude.Int
+advertiseByoipCidrResponse_httpStatus = Lens.lens (\AdvertiseByoipCidrResponse' {httpStatus} -> httpStatus) (\s@AdvertiseByoipCidrResponse' {} a -> s {httpStatus = a} :: AdvertiseByoipCidrResponse)
+
+instance Prelude.NFData AdvertiseByoipCidrResponse where
+  rnf AdvertiseByoipCidrResponse' {..} =
+    Prelude.rnf byoipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AllocateAddress.hs b/gen/Amazonka/EC2/AllocateAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AllocateAddress.hs
@@ -0,0 +1,444 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AllocateAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allocates an Elastic IP address to your Amazon Web Services account.
+-- After you allocate the Elastic IP address you can associate it with an
+-- instance or network interface. After you release an Elastic IP address,
+-- it is released to the IP address pool and can be allocated to a
+-- different Amazon Web Services account.
+--
+-- You can allocate an Elastic IP address from an address pool owned by
+-- Amazon Web Services or from an address pool created from a public IPv4
+-- address range that you have brought to Amazon Web Services for use with
+-- your Amazon Web Services resources using bring your own IP addresses
+-- (BYOIP). For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html Bring Your Own IP Addresses (BYOIP)>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- [EC2-VPC] If you release an Elastic IP address, you might be able to
+-- recover it. You cannot recover an Elastic IP address that you released
+-- after it is allocated to another Amazon Web Services account. You cannot
+-- recover an Elastic IP address for EC2-Classic. To attempt to recover an
+-- Elastic IP address that you released, specify it in this operation.
+--
+-- An Elastic IP address is for use either in the EC2-Classic platform or
+-- in a VPC. By default, you can allocate 5 Elastic IP addresses for
+-- EC2-Classic per Region and 5 Elastic IP addresses for EC2-VPC per
+-- Region.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- You can allocate a carrier IP address which is a public IP address from
+-- a telecommunication carrier, to a network interface which resides in a
+-- subnet in a Wavelength Zone (for example an EC2 instance).
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.AllocateAddress
+  ( -- * Creating a Request
+    AllocateAddress (..),
+    newAllocateAddress,
+
+    -- * Request Lenses
+    allocateAddress_address,
+    allocateAddress_customerOwnedIpv4Pool,
+    allocateAddress_domain,
+    allocateAddress_dryRun,
+    allocateAddress_networkBorderGroup,
+    allocateAddress_publicIpv4Pool,
+    allocateAddress_tagSpecifications,
+
+    -- * Destructuring the Response
+    AllocateAddressResponse (..),
+    newAllocateAddressResponse,
+
+    -- * Response Lenses
+    allocateAddressResponse_allocationId,
+    allocateAddressResponse_carrierIp,
+    allocateAddressResponse_customerOwnedIp,
+    allocateAddressResponse_customerOwnedIpv4Pool,
+    allocateAddressResponse_domain,
+    allocateAddressResponse_networkBorderGroup,
+    allocateAddressResponse_publicIp,
+    allocateAddressResponse_publicIpv4Pool,
+    allocateAddressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAllocateAddress' smart constructor.
+data AllocateAddress = AllocateAddress'
+  { -- | [EC2-VPC] The Elastic IP address to recover or an IPv4 address from an
+    -- address pool.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | 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.
+    customerOwnedIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the Elastic IP address is for use with instances in a
+    -- VPC or instances in EC2-Classic.
+    --
+    -- Default: If the Region supports EC2-Classic, the default is @standard@.
+    -- Otherwise, the default is @vpc@.
+    domain :: Prelude.Maybe DomainType,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | A unique set of Availability Zones, Local Zones, or Wavelength Zones
+    -- from which Amazon Web Services advertises IP addresses. Use this
+    -- parameter to limit the IP address to this location. IP addresses cannot
+    -- move between network border groups.
+    --
+    -- Use
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html DescribeAvailabilityZones>
+    -- to view the network border groups.
+    --
+    -- You cannot use a network border group with EC2 Classic. If you attempt
+    -- this operation on EC2 Classic, you receive an
+    -- @InvalidParameterCombination@ error.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | 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 @Address@ parameter instead.
+    publicIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the Elastic IP address.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllocateAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'allocateAddress_address' - [EC2-VPC] The Elastic IP address to recover or an IPv4 address from an
+-- address pool.
+--
+-- 'customerOwnedIpv4Pool', 'allocateAddress_customerOwnedIpv4Pool' - 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.
+--
+-- 'domain', 'allocateAddress_domain' - Indicates whether the Elastic IP address is for use with instances in a
+-- VPC or instances in EC2-Classic.
+--
+-- Default: If the Region supports EC2-Classic, the default is @standard@.
+-- Otherwise, the default is @vpc@.
+--
+-- 'dryRun', 'allocateAddress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkBorderGroup', 'allocateAddress_networkBorderGroup' - A unique set of Availability Zones, Local Zones, or Wavelength Zones
+-- from which Amazon Web Services advertises IP addresses. Use this
+-- parameter to limit the IP address to this location. IP addresses cannot
+-- move between network border groups.
+--
+-- Use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html DescribeAvailabilityZones>
+-- to view the network border groups.
+--
+-- You cannot use a network border group with EC2 Classic. If you attempt
+-- this operation on EC2 Classic, you receive an
+-- @InvalidParameterCombination@ error.
+--
+-- 'publicIpv4Pool', 'allocateAddress_publicIpv4Pool' - 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 @Address@ parameter instead.
+--
+-- 'tagSpecifications', 'allocateAddress_tagSpecifications' - The tags to assign to the Elastic IP address.
+newAllocateAddress ::
+  AllocateAddress
+newAllocateAddress =
+  AllocateAddress'
+    { address = Prelude.Nothing,
+      customerOwnedIpv4Pool = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing,
+      publicIpv4Pool = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] The Elastic IP address to recover or an IPv4 address from an
+-- address pool.
+allocateAddress_address :: Lens.Lens' AllocateAddress (Prelude.Maybe Prelude.Text)
+allocateAddress_address = Lens.lens (\AllocateAddress' {address} -> address) (\s@AllocateAddress' {} a -> s {address = a} :: AllocateAddress)
+
+-- | 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.
+allocateAddress_customerOwnedIpv4Pool :: Lens.Lens' AllocateAddress (Prelude.Maybe Prelude.Text)
+allocateAddress_customerOwnedIpv4Pool = Lens.lens (\AllocateAddress' {customerOwnedIpv4Pool} -> customerOwnedIpv4Pool) (\s@AllocateAddress' {} a -> s {customerOwnedIpv4Pool = a} :: AllocateAddress)
+
+-- | Indicates whether the Elastic IP address is for use with instances in a
+-- VPC or instances in EC2-Classic.
+--
+-- Default: If the Region supports EC2-Classic, the default is @standard@.
+-- Otherwise, the default is @vpc@.
+allocateAddress_domain :: Lens.Lens' AllocateAddress (Prelude.Maybe DomainType)
+allocateAddress_domain = Lens.lens (\AllocateAddress' {domain} -> domain) (\s@AllocateAddress' {} a -> s {domain = a} :: AllocateAddress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+allocateAddress_dryRun :: Lens.Lens' AllocateAddress (Prelude.Maybe Prelude.Bool)
+allocateAddress_dryRun = Lens.lens (\AllocateAddress' {dryRun} -> dryRun) (\s@AllocateAddress' {} a -> s {dryRun = a} :: AllocateAddress)
+
+-- | A unique set of Availability Zones, Local Zones, or Wavelength Zones
+-- from which Amazon Web Services advertises IP addresses. Use this
+-- parameter to limit the IP address to this location. IP addresses cannot
+-- move between network border groups.
+--
+-- Use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html DescribeAvailabilityZones>
+-- to view the network border groups.
+--
+-- You cannot use a network border group with EC2 Classic. If you attempt
+-- this operation on EC2 Classic, you receive an
+-- @InvalidParameterCombination@ error.
+allocateAddress_networkBorderGroup :: Lens.Lens' AllocateAddress (Prelude.Maybe Prelude.Text)
+allocateAddress_networkBorderGroup = Lens.lens (\AllocateAddress' {networkBorderGroup} -> networkBorderGroup) (\s@AllocateAddress' {} a -> s {networkBorderGroup = a} :: AllocateAddress)
+
+-- | 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 @Address@ parameter instead.
+allocateAddress_publicIpv4Pool :: Lens.Lens' AllocateAddress (Prelude.Maybe Prelude.Text)
+allocateAddress_publicIpv4Pool = Lens.lens (\AllocateAddress' {publicIpv4Pool} -> publicIpv4Pool) (\s@AllocateAddress' {} a -> s {publicIpv4Pool = a} :: AllocateAddress)
+
+-- | The tags to assign to the Elastic IP address.
+allocateAddress_tagSpecifications :: Lens.Lens' AllocateAddress (Prelude.Maybe [TagSpecification])
+allocateAddress_tagSpecifications = Lens.lens (\AllocateAddress' {tagSpecifications} -> tagSpecifications) (\s@AllocateAddress' {} a -> s {tagSpecifications = a} :: AllocateAddress) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest AllocateAddress where
+  type
+    AWSResponse AllocateAddress =
+      AllocateAddressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AllocateAddressResponse'
+            Prelude.<$> (x Data..@? "allocationId")
+            Prelude.<*> (x Data..@? "carrierIp")
+            Prelude.<*> (x Data..@? "customerOwnedIp")
+            Prelude.<*> (x Data..@? "customerOwnedIpv4Pool")
+            Prelude.<*> (x Data..@? "domain")
+            Prelude.<*> (x Data..@? "networkBorderGroup")
+            Prelude.<*> (x Data..@? "publicIp")
+            Prelude.<*> (x Data..@? "publicIpv4Pool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AllocateAddress where
+  hashWithSalt _salt AllocateAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` customerOwnedIpv4Pool
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` networkBorderGroup
+      `Prelude.hashWithSalt` publicIpv4Pool
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData AllocateAddress where
+  rnf AllocateAddress' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf customerOwnedIpv4Pool
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkBorderGroup
+      `Prelude.seq` Prelude.rnf publicIpv4Pool
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders AllocateAddress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AllocateAddress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AllocateAddress where
+  toQuery AllocateAddress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AllocateAddress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Address" Data.=: address,
+        "CustomerOwnedIpv4Pool"
+          Data.=: customerOwnedIpv4Pool,
+        "Domain" Data.=: domain,
+        "DryRun" Data.=: dryRun,
+        "NetworkBorderGroup" Data.=: networkBorderGroup,
+        "PublicIpv4Pool" Data.=: publicIpv4Pool,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newAllocateAddressResponse' smart constructor.
+data AllocateAddressResponse = AllocateAddressResponse'
+  { -- | [EC2-VPC] The ID that Amazon Web Services assigns to represent the
+    -- allocation of the Elastic IP address for use with instances in a VPC.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The carrier IP address. This option is only available for network
+    -- interfaces which reside in a subnet in a Wavelength Zone (for example an
+    -- EC2 instance).
+    carrierIp :: Prelude.Maybe Prelude.Text,
+    -- | The customer-owned IP address.
+    customerOwnedIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the customer-owned address pool.
+    customerOwnedIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the Elastic IP address is for use with instances in a
+    -- VPC (@vpc@) or instances in EC2-Classic (@standard@).
+    domain :: Prelude.Maybe DomainType,
+    -- | The set of Availability Zones, Local Zones, or Wavelength Zones from
+    -- which Amazon Web Services advertises IP addresses.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | The Elastic IP address.
+    publicIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an address pool.
+    publicIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllocateAddressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'allocateAddressResponse_allocationId' - [EC2-VPC] The ID that Amazon Web Services assigns to represent the
+-- allocation of the Elastic IP address for use with instances in a VPC.
+--
+-- 'carrierIp', 'allocateAddressResponse_carrierIp' - The carrier IP address. This option is only available for network
+-- interfaces which reside in a subnet in a Wavelength Zone (for example an
+-- EC2 instance).
+--
+-- 'customerOwnedIp', 'allocateAddressResponse_customerOwnedIp' - The customer-owned IP address.
+--
+-- 'customerOwnedIpv4Pool', 'allocateAddressResponse_customerOwnedIpv4Pool' - The ID of the customer-owned address pool.
+--
+-- 'domain', 'allocateAddressResponse_domain' - Indicates whether the Elastic IP address is for use with instances in a
+-- VPC (@vpc@) or instances in EC2-Classic (@standard@).
+--
+-- 'networkBorderGroup', 'allocateAddressResponse_networkBorderGroup' - The set of Availability Zones, Local Zones, or Wavelength Zones from
+-- which Amazon Web Services advertises IP addresses.
+--
+-- 'publicIp', 'allocateAddressResponse_publicIp' - The Elastic IP address.
+--
+-- 'publicIpv4Pool', 'allocateAddressResponse_publicIpv4Pool' - The ID of an address pool.
+--
+-- 'httpStatus', 'allocateAddressResponse_httpStatus' - The response's http status code.
+newAllocateAddressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AllocateAddressResponse
+newAllocateAddressResponse pHttpStatus_ =
+  AllocateAddressResponse'
+    { allocationId =
+        Prelude.Nothing,
+      carrierIp = Prelude.Nothing,
+      customerOwnedIp = Prelude.Nothing,
+      customerOwnedIpv4Pool = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing,
+      publicIp = Prelude.Nothing,
+      publicIpv4Pool = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | [EC2-VPC] The ID that Amazon Web Services assigns to represent the
+-- allocation of the Elastic IP address for use with instances in a VPC.
+allocateAddressResponse_allocationId :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_allocationId = Lens.lens (\AllocateAddressResponse' {allocationId} -> allocationId) (\s@AllocateAddressResponse' {} a -> s {allocationId = a} :: AllocateAddressResponse)
+
+-- | The carrier IP address. This option is only available for network
+-- interfaces which reside in a subnet in a Wavelength Zone (for example an
+-- EC2 instance).
+allocateAddressResponse_carrierIp :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_carrierIp = Lens.lens (\AllocateAddressResponse' {carrierIp} -> carrierIp) (\s@AllocateAddressResponse' {} a -> s {carrierIp = a} :: AllocateAddressResponse)
+
+-- | The customer-owned IP address.
+allocateAddressResponse_customerOwnedIp :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_customerOwnedIp = Lens.lens (\AllocateAddressResponse' {customerOwnedIp} -> customerOwnedIp) (\s@AllocateAddressResponse' {} a -> s {customerOwnedIp = a} :: AllocateAddressResponse)
+
+-- | The ID of the customer-owned address pool.
+allocateAddressResponse_customerOwnedIpv4Pool :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_customerOwnedIpv4Pool = Lens.lens (\AllocateAddressResponse' {customerOwnedIpv4Pool} -> customerOwnedIpv4Pool) (\s@AllocateAddressResponse' {} a -> s {customerOwnedIpv4Pool = a} :: AllocateAddressResponse)
+
+-- | Indicates whether the Elastic IP address is for use with instances in a
+-- VPC (@vpc@) or instances in EC2-Classic (@standard@).
+allocateAddressResponse_domain :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe DomainType)
+allocateAddressResponse_domain = Lens.lens (\AllocateAddressResponse' {domain} -> domain) (\s@AllocateAddressResponse' {} a -> s {domain = a} :: AllocateAddressResponse)
+
+-- | The set of Availability Zones, Local Zones, or Wavelength Zones from
+-- which Amazon Web Services advertises IP addresses.
+allocateAddressResponse_networkBorderGroup :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_networkBorderGroup = Lens.lens (\AllocateAddressResponse' {networkBorderGroup} -> networkBorderGroup) (\s@AllocateAddressResponse' {} a -> s {networkBorderGroup = a} :: AllocateAddressResponse)
+
+-- | The Elastic IP address.
+allocateAddressResponse_publicIp :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_publicIp = Lens.lens (\AllocateAddressResponse' {publicIp} -> publicIp) (\s@AllocateAddressResponse' {} a -> s {publicIp = a} :: AllocateAddressResponse)
+
+-- | The ID of an address pool.
+allocateAddressResponse_publicIpv4Pool :: Lens.Lens' AllocateAddressResponse (Prelude.Maybe Prelude.Text)
+allocateAddressResponse_publicIpv4Pool = Lens.lens (\AllocateAddressResponse' {publicIpv4Pool} -> publicIpv4Pool) (\s@AllocateAddressResponse' {} a -> s {publicIpv4Pool = a} :: AllocateAddressResponse)
+
+-- | The response's http status code.
+allocateAddressResponse_httpStatus :: Lens.Lens' AllocateAddressResponse Prelude.Int
+allocateAddressResponse_httpStatus = Lens.lens (\AllocateAddressResponse' {httpStatus} -> httpStatus) (\s@AllocateAddressResponse' {} a -> s {httpStatus = a} :: AllocateAddressResponse)
+
+instance Prelude.NFData AllocateAddressResponse where
+  rnf AllocateAddressResponse' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf carrierIp
+      `Prelude.seq` Prelude.rnf customerOwnedIp
+      `Prelude.seq` Prelude.rnf customerOwnedIpv4Pool
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf networkBorderGroup
+      `Prelude.seq` Prelude.rnf publicIp
+      `Prelude.seq` Prelude.rnf publicIpv4Pool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AllocateHosts.hs b/gen/Amazonka/EC2/AllocateHosts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AllocateHosts.hs
@@ -0,0 +1,369 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AllocateHosts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allocates a Dedicated Host to your account. At a minimum, specify the
+-- supported instance type or instance family, the Availability Zone in
+-- which to allocate the host, and the number of hosts to allocate.
+module Amazonka.EC2.AllocateHosts
+  ( -- * Creating a Request
+    AllocateHosts (..),
+    newAllocateHosts,
+
+    -- * Request Lenses
+    allocateHosts_autoPlacement,
+    allocateHosts_clientToken,
+    allocateHosts_hostRecovery,
+    allocateHosts_instanceFamily,
+    allocateHosts_instanceType,
+    allocateHosts_outpostArn,
+    allocateHosts_tagSpecifications,
+    allocateHosts_availabilityZone,
+    allocateHosts_quantity,
+
+    -- * Destructuring the Response
+    AllocateHostsResponse (..),
+    newAllocateHostsResponse,
+
+    -- * Response Lenses
+    allocateHostsResponse_hostIds,
+    allocateHostsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAllocateHosts' smart constructor.
+data AllocateHosts = AllocateHosts'
+  { -- | Indicates whether the host accepts any untargeted instance launches that
+    -- match its instance type configuration, or if it only accepts Host
+    -- tenancy instance launches that specify its unique host ID. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding Understanding auto-placement and affinity>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: @on@
+    autoPlacement :: Prelude.Maybe AutoPlacement,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to enable or disable host recovery for the Dedicated
+    -- Host. Host recovery is disabled by default. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html Host recovery>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: @off@
+    hostRecovery :: Prelude.Maybe HostRecovery,
+    -- | 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.
+    --
+    -- If you want the Dedicated Hosts to support a specific instance type
+    -- only, omit this parameter and specify __InstanceType__ instead. You
+    -- cannot specify __InstanceFamily__ and __InstanceType__ in the same
+    -- request.
+    instanceFamily :: Prelude.Maybe Prelude.Text,
+    -- | 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.
+    --
+    -- If you want the Dedicated Hosts to support multiple instance types in a
+    -- specific instance family, omit this parameter and specify
+    -- __InstanceFamily__ instead. You cannot specify __InstanceType__ and
+    -- __InstanceFamily__ in the same request.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
+    -- which to allocate the Dedicated Host.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the Dedicated Host during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The Availability Zone in which to allocate the Dedicated Host.
+    availabilityZone :: Prelude.Text,
+    -- | The number of Dedicated Hosts to allocate to your account with these
+    -- parameters.
+    quantity :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllocateHosts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoPlacement', 'allocateHosts_autoPlacement' - Indicates whether the host accepts any untargeted instance launches that
+-- match its instance type configuration, or if it only accepts Host
+-- tenancy instance launches that specify its unique host ID. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding Understanding auto-placement and affinity>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @on@
+--
+-- 'clientToken', 'allocateHosts_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'hostRecovery', 'allocateHosts_hostRecovery' - Indicates whether to enable or disable host recovery for the Dedicated
+-- Host. Host recovery is disabled by default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html Host recovery>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @off@
+--
+-- 'instanceFamily', 'allocateHosts_instanceFamily' - 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.
+--
+-- If you want the Dedicated Hosts to support a specific instance type
+-- only, omit this parameter and specify __InstanceType__ instead. You
+-- cannot specify __InstanceFamily__ and __InstanceType__ in the same
+-- request.
+--
+-- 'instanceType', 'allocateHosts_instanceType' - 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.
+--
+-- If you want the Dedicated Hosts to support multiple instance types in a
+-- specific instance family, omit this parameter and specify
+-- __InstanceFamily__ instead. You cannot specify __InstanceType__ and
+-- __InstanceFamily__ in the same request.
+--
+-- 'outpostArn', 'allocateHosts_outpostArn' - The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
+-- which to allocate the Dedicated Host.
+--
+-- 'tagSpecifications', 'allocateHosts_tagSpecifications' - The tags to apply to the Dedicated Host during creation.
+--
+-- 'availabilityZone', 'allocateHosts_availabilityZone' - The Availability Zone in which to allocate the Dedicated Host.
+--
+-- 'quantity', 'allocateHosts_quantity' - The number of Dedicated Hosts to allocate to your account with these
+-- parameters.
+newAllocateHosts ::
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  -- | 'quantity'
+  Prelude.Int ->
+  AllocateHosts
+newAllocateHosts pAvailabilityZone_ pQuantity_ =
+  AllocateHosts'
+    { autoPlacement = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      hostRecovery = Prelude.Nothing,
+      instanceFamily = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      availabilityZone = pAvailabilityZone_,
+      quantity = pQuantity_
+    }
+
+-- | Indicates whether the host accepts any untargeted instance launches that
+-- match its instance type configuration, or if it only accepts Host
+-- tenancy instance launches that specify its unique host ID. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/how-dedicated-hosts-work.html#dedicated-hosts-understanding Understanding auto-placement and affinity>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @on@
+allocateHosts_autoPlacement :: Lens.Lens' AllocateHosts (Prelude.Maybe AutoPlacement)
+allocateHosts_autoPlacement = Lens.lens (\AllocateHosts' {autoPlacement} -> autoPlacement) (\s@AllocateHosts' {} a -> s {autoPlacement = a} :: AllocateHosts)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+allocateHosts_clientToken :: Lens.Lens' AllocateHosts (Prelude.Maybe Prelude.Text)
+allocateHosts_clientToken = Lens.lens (\AllocateHosts' {clientToken} -> clientToken) (\s@AllocateHosts' {} a -> s {clientToken = a} :: AllocateHosts)
+
+-- | Indicates whether to enable or disable host recovery for the Dedicated
+-- Host. Host recovery is disabled by default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html Host recovery>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @off@
+allocateHosts_hostRecovery :: Lens.Lens' AllocateHosts (Prelude.Maybe HostRecovery)
+allocateHosts_hostRecovery = Lens.lens (\AllocateHosts' {hostRecovery} -> hostRecovery) (\s@AllocateHosts' {} a -> s {hostRecovery = a} :: AllocateHosts)
+
+-- | 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.
+--
+-- If you want the Dedicated Hosts to support a specific instance type
+-- only, omit this parameter and specify __InstanceType__ instead. You
+-- cannot specify __InstanceFamily__ and __InstanceType__ in the same
+-- request.
+allocateHosts_instanceFamily :: Lens.Lens' AllocateHosts (Prelude.Maybe Prelude.Text)
+allocateHosts_instanceFamily = Lens.lens (\AllocateHosts' {instanceFamily} -> instanceFamily) (\s@AllocateHosts' {} a -> s {instanceFamily = a} :: AllocateHosts)
+
+-- | 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.
+--
+-- If you want the Dedicated Hosts to support multiple instance types in a
+-- specific instance family, omit this parameter and specify
+-- __InstanceFamily__ instead. You cannot specify __InstanceType__ and
+-- __InstanceFamily__ in the same request.
+allocateHosts_instanceType :: Lens.Lens' AllocateHosts (Prelude.Maybe Prelude.Text)
+allocateHosts_instanceType = Lens.lens (\AllocateHosts' {instanceType} -> instanceType) (\s@AllocateHosts' {} a -> s {instanceType = a} :: AllocateHosts)
+
+-- | The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
+-- which to allocate the Dedicated Host.
+allocateHosts_outpostArn :: Lens.Lens' AllocateHosts (Prelude.Maybe Prelude.Text)
+allocateHosts_outpostArn = Lens.lens (\AllocateHosts' {outpostArn} -> outpostArn) (\s@AllocateHosts' {} a -> s {outpostArn = a} :: AllocateHosts)
+
+-- | The tags to apply to the Dedicated Host during creation.
+allocateHosts_tagSpecifications :: Lens.Lens' AllocateHosts (Prelude.Maybe [TagSpecification])
+allocateHosts_tagSpecifications = Lens.lens (\AllocateHosts' {tagSpecifications} -> tagSpecifications) (\s@AllocateHosts' {} a -> s {tagSpecifications = a} :: AllocateHosts) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Availability Zone in which to allocate the Dedicated Host.
+allocateHosts_availabilityZone :: Lens.Lens' AllocateHosts Prelude.Text
+allocateHosts_availabilityZone = Lens.lens (\AllocateHosts' {availabilityZone} -> availabilityZone) (\s@AllocateHosts' {} a -> s {availabilityZone = a} :: AllocateHosts)
+
+-- | The number of Dedicated Hosts to allocate to your account with these
+-- parameters.
+allocateHosts_quantity :: Lens.Lens' AllocateHosts Prelude.Int
+allocateHosts_quantity = Lens.lens (\AllocateHosts' {quantity} -> quantity) (\s@AllocateHosts' {} a -> s {quantity = a} :: AllocateHosts)
+
+instance Core.AWSRequest AllocateHosts where
+  type
+    AWSResponse AllocateHosts =
+      AllocateHostsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AllocateHostsResponse'
+            Prelude.<$> ( x
+                            Data..@? "hostIdSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AllocateHosts where
+  hashWithSalt _salt AllocateHosts' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoPlacement
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` hostRecovery
+      `Prelude.hashWithSalt` instanceFamily
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` quantity
+
+instance Prelude.NFData AllocateHosts where
+  rnf AllocateHosts' {..} =
+    Prelude.rnf autoPlacement
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf hostRecovery
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf quantity
+
+instance Data.ToHeaders AllocateHosts where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AllocateHosts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AllocateHosts where
+  toQuery AllocateHosts' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AllocateHosts" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AutoPlacement" Data.=: autoPlacement,
+        "ClientToken" Data.=: clientToken,
+        "HostRecovery" Data.=: hostRecovery,
+        "InstanceFamily" Data.=: instanceFamily,
+        "InstanceType" Data.=: instanceType,
+        "OutpostArn" Data.=: outpostArn,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "AvailabilityZone" Data.=: availabilityZone,
+        "Quantity" Data.=: quantity
+      ]
+
+-- | Contains the output of AllocateHosts.
+--
+-- /See:/ 'newAllocateHostsResponse' smart constructor.
+data AllocateHostsResponse = AllocateHostsResponse'
+  { -- | The ID of the allocated Dedicated Host. This is used to launch an
+    -- instance onto a specific host.
+    hostIds :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllocateHostsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostIds', 'allocateHostsResponse_hostIds' - The ID of the allocated Dedicated Host. This is used to launch an
+-- instance onto a specific host.
+--
+-- 'httpStatus', 'allocateHostsResponse_httpStatus' - The response's http status code.
+newAllocateHostsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AllocateHostsResponse
+newAllocateHostsResponse pHttpStatus_ =
+  AllocateHostsResponse'
+    { hostIds = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the allocated Dedicated Host. This is used to launch an
+-- instance onto a specific host.
+allocateHostsResponse_hostIds :: Lens.Lens' AllocateHostsResponse (Prelude.Maybe [Prelude.Text])
+allocateHostsResponse_hostIds = Lens.lens (\AllocateHostsResponse' {hostIds} -> hostIds) (\s@AllocateHostsResponse' {} a -> s {hostIds = a} :: AllocateHostsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+allocateHostsResponse_httpStatus :: Lens.Lens' AllocateHostsResponse Prelude.Int
+allocateHostsResponse_httpStatus = Lens.lens (\AllocateHostsResponse' {httpStatus} -> httpStatus) (\s@AllocateHostsResponse' {} a -> s {httpStatus = a} :: AllocateHostsResponse)
+
+instance Prelude.NFData AllocateHostsResponse where
+  rnf AllocateHostsResponse' {..} =
+    Prelude.rnf hostIds
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AllocateIpamPoolCidr.hs b/gen/Amazonka/EC2/AllocateIpamPoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AllocateIpamPoolCidr.hs
@@ -0,0 +1,342 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AllocateIpamPoolCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allocate a CIDR from an IPAM pool. In IPAM, an allocation is a CIDR
+-- assignment from an IPAM pool to another resource or IPAM pool. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/allocate-cidrs-ipam.html Allocate CIDRs>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.AllocateIpamPoolCidr
+  ( -- * Creating a Request
+    AllocateIpamPoolCidr (..),
+    newAllocateIpamPoolCidr,
+
+    -- * Request Lenses
+    allocateIpamPoolCidr_cidr,
+    allocateIpamPoolCidr_clientToken,
+    allocateIpamPoolCidr_description,
+    allocateIpamPoolCidr_disallowedCidrs,
+    allocateIpamPoolCidr_dryRun,
+    allocateIpamPoolCidr_netmaskLength,
+    allocateIpamPoolCidr_previewNextCidr,
+    allocateIpamPoolCidr_ipamPoolId,
+
+    -- * Destructuring the Response
+    AllocateIpamPoolCidrResponse (..),
+    newAllocateIpamPoolCidrResponse,
+
+    -- * Response Lenses
+    allocateIpamPoolCidrResponse_ipamPoolAllocation,
+    allocateIpamPoolCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAllocateIpamPoolCidr' smart constructor.
+data AllocateIpamPoolCidr = AllocateIpamPoolCidr'
+  { -- | The CIDR you would like to allocate from the IPAM pool. Note the
+    -- following:
+    --
+    -- -   If there is no DefaultNetmaskLength allocation rule set on the pool,
+    --     you must specify either the NetmaskLength or the CIDR.
+    --
+    -- -   If the DefaultNetmaskLength allocation rule is set on the pool, you
+    --     can specify either the NetmaskLength or the CIDR and the
+    --     DefaultNetmaskLength allocation rule will be ignored.
+    --
+    -- Possible values: Any available IPv4 or IPv6 CIDR.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the allocation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Exclude a particular CIDR range from being returned by the pool.
+    -- Disallowed CIDRs are only allowed if using netmask length for
+    -- allocation.
+    disallowedCidrs :: Prelude.Maybe [Prelude.Text],
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The netmask length of the CIDR you would like to allocate from the IPAM
+    -- pool. Note the following:
+    --
+    -- -   If there is no DefaultNetmaskLength allocation rule set on the pool,
+    --     you must specify either the NetmaskLength or the CIDR.
+    --
+    -- -   If the DefaultNetmaskLength allocation rule is set on the pool, you
+    --     can specify either the NetmaskLength or the CIDR and the
+    --     DefaultNetmaskLength allocation rule will be ignored.
+    --
+    -- Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask
+    -- lengths for IPv6 addresses are 0 - 128.
+    netmaskLength :: Prelude.Maybe Prelude.Int,
+    -- | A preview of the next available CIDR in a pool.
+    previewNextCidr :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the IPAM pool from which you would like to allocate a CIDR.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllocateIpamPoolCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'allocateIpamPoolCidr_cidr' - The CIDR you would like to allocate from the IPAM pool. Note the
+-- following:
+--
+-- -   If there is no DefaultNetmaskLength allocation rule set on the pool,
+--     you must specify either the NetmaskLength or the CIDR.
+--
+-- -   If the DefaultNetmaskLength allocation rule is set on the pool, you
+--     can specify either the NetmaskLength or the CIDR and the
+--     DefaultNetmaskLength allocation rule will be ignored.
+--
+-- Possible values: Any available IPv4 or IPv6 CIDR.
+--
+-- 'clientToken', 'allocateIpamPoolCidr_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'allocateIpamPoolCidr_description' - A description for the allocation.
+--
+-- 'disallowedCidrs', 'allocateIpamPoolCidr_disallowedCidrs' - Exclude a particular CIDR range from being returned by the pool.
+-- Disallowed CIDRs are only allowed if using netmask length for
+-- allocation.
+--
+-- 'dryRun', 'allocateIpamPoolCidr_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'netmaskLength', 'allocateIpamPoolCidr_netmaskLength' - The netmask length of the CIDR you would like to allocate from the IPAM
+-- pool. Note the following:
+--
+-- -   If there is no DefaultNetmaskLength allocation rule set on the pool,
+--     you must specify either the NetmaskLength or the CIDR.
+--
+-- -   If the DefaultNetmaskLength allocation rule is set on the pool, you
+--     can specify either the NetmaskLength or the CIDR and the
+--     DefaultNetmaskLength allocation rule will be ignored.
+--
+-- Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask
+-- lengths for IPv6 addresses are 0 - 128.
+--
+-- 'previewNextCidr', 'allocateIpamPoolCidr_previewNextCidr' - A preview of the next available CIDR in a pool.
+--
+-- 'ipamPoolId', 'allocateIpamPoolCidr_ipamPoolId' - The ID of the IPAM pool from which you would like to allocate a CIDR.
+newAllocateIpamPoolCidr ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  AllocateIpamPoolCidr
+newAllocateIpamPoolCidr pIpamPoolId_ =
+  AllocateIpamPoolCidr'
+    { cidr = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disallowedCidrs = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      netmaskLength = Prelude.Nothing,
+      previewNextCidr = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | The CIDR you would like to allocate from the IPAM pool. Note the
+-- following:
+--
+-- -   If there is no DefaultNetmaskLength allocation rule set on the pool,
+--     you must specify either the NetmaskLength or the CIDR.
+--
+-- -   If the DefaultNetmaskLength allocation rule is set on the pool, you
+--     can specify either the NetmaskLength or the CIDR and the
+--     DefaultNetmaskLength allocation rule will be ignored.
+--
+-- Possible values: Any available IPv4 or IPv6 CIDR.
+allocateIpamPoolCidr_cidr :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe Prelude.Text)
+allocateIpamPoolCidr_cidr = Lens.lens (\AllocateIpamPoolCidr' {cidr} -> cidr) (\s@AllocateIpamPoolCidr' {} a -> s {cidr = a} :: AllocateIpamPoolCidr)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+allocateIpamPoolCidr_clientToken :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe Prelude.Text)
+allocateIpamPoolCidr_clientToken = Lens.lens (\AllocateIpamPoolCidr' {clientToken} -> clientToken) (\s@AllocateIpamPoolCidr' {} a -> s {clientToken = a} :: AllocateIpamPoolCidr)
+
+-- | A description for the allocation.
+allocateIpamPoolCidr_description :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe Prelude.Text)
+allocateIpamPoolCidr_description = Lens.lens (\AllocateIpamPoolCidr' {description} -> description) (\s@AllocateIpamPoolCidr' {} a -> s {description = a} :: AllocateIpamPoolCidr)
+
+-- | Exclude a particular CIDR range from being returned by the pool.
+-- Disallowed CIDRs are only allowed if using netmask length for
+-- allocation.
+allocateIpamPoolCidr_disallowedCidrs :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe [Prelude.Text])
+allocateIpamPoolCidr_disallowedCidrs = Lens.lens (\AllocateIpamPoolCidr' {disallowedCidrs} -> disallowedCidrs) (\s@AllocateIpamPoolCidr' {} a -> s {disallowedCidrs = a} :: AllocateIpamPoolCidr) Prelude.. Lens.mapping Lens.coerced
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+allocateIpamPoolCidr_dryRun :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe Prelude.Bool)
+allocateIpamPoolCidr_dryRun = Lens.lens (\AllocateIpamPoolCidr' {dryRun} -> dryRun) (\s@AllocateIpamPoolCidr' {} a -> s {dryRun = a} :: AllocateIpamPoolCidr)
+
+-- | The netmask length of the CIDR you would like to allocate from the IPAM
+-- pool. Note the following:
+--
+-- -   If there is no DefaultNetmaskLength allocation rule set on the pool,
+--     you must specify either the NetmaskLength or the CIDR.
+--
+-- -   If the DefaultNetmaskLength allocation rule is set on the pool, you
+--     can specify either the NetmaskLength or the CIDR and the
+--     DefaultNetmaskLength allocation rule will be ignored.
+--
+-- Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask
+-- lengths for IPv6 addresses are 0 - 128.
+allocateIpamPoolCidr_netmaskLength :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe Prelude.Int)
+allocateIpamPoolCidr_netmaskLength = Lens.lens (\AllocateIpamPoolCidr' {netmaskLength} -> netmaskLength) (\s@AllocateIpamPoolCidr' {} a -> s {netmaskLength = a} :: AllocateIpamPoolCidr)
+
+-- | A preview of the next available CIDR in a pool.
+allocateIpamPoolCidr_previewNextCidr :: Lens.Lens' AllocateIpamPoolCidr (Prelude.Maybe Prelude.Bool)
+allocateIpamPoolCidr_previewNextCidr = Lens.lens (\AllocateIpamPoolCidr' {previewNextCidr} -> previewNextCidr) (\s@AllocateIpamPoolCidr' {} a -> s {previewNextCidr = a} :: AllocateIpamPoolCidr)
+
+-- | The ID of the IPAM pool from which you would like to allocate a CIDR.
+allocateIpamPoolCidr_ipamPoolId :: Lens.Lens' AllocateIpamPoolCidr Prelude.Text
+allocateIpamPoolCidr_ipamPoolId = Lens.lens (\AllocateIpamPoolCidr' {ipamPoolId} -> ipamPoolId) (\s@AllocateIpamPoolCidr' {} a -> s {ipamPoolId = a} :: AllocateIpamPoolCidr)
+
+instance Core.AWSRequest AllocateIpamPoolCidr where
+  type
+    AWSResponse AllocateIpamPoolCidr =
+      AllocateIpamPoolCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AllocateIpamPoolCidrResponse'
+            Prelude.<$> (x Data..@? "ipamPoolAllocation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AllocateIpamPoolCidr where
+  hashWithSalt _salt AllocateIpamPoolCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disallowedCidrs
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` netmaskLength
+      `Prelude.hashWithSalt` previewNextCidr
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData AllocateIpamPoolCidr where
+  rnf AllocateIpamPoolCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disallowedCidrs
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf netmaskLength
+      `Prelude.seq` Prelude.rnf previewNextCidr
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders AllocateIpamPoolCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AllocateIpamPoolCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AllocateIpamPoolCidr where
+  toQuery AllocateIpamPoolCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AllocateIpamPoolCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Cidr" Data.=: cidr,
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        Data.toQuery
+          ( Data.toQueryList "DisallowedCidr"
+              Prelude.<$> disallowedCidrs
+          ),
+        "DryRun" Data.=: dryRun,
+        "NetmaskLength" Data.=: netmaskLength,
+        "PreviewNextCidr" Data.=: previewNextCidr,
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newAllocateIpamPoolCidrResponse' smart constructor.
+data AllocateIpamPoolCidrResponse = AllocateIpamPoolCidrResponse'
+  { -- | Information about the allocation created.
+    ipamPoolAllocation :: Prelude.Maybe IpamPoolAllocation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllocateIpamPoolCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPoolAllocation', 'allocateIpamPoolCidrResponse_ipamPoolAllocation' - Information about the allocation created.
+--
+-- 'httpStatus', 'allocateIpamPoolCidrResponse_httpStatus' - The response's http status code.
+newAllocateIpamPoolCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AllocateIpamPoolCidrResponse
+newAllocateIpamPoolCidrResponse pHttpStatus_ =
+  AllocateIpamPoolCidrResponse'
+    { ipamPoolAllocation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the allocation created.
+allocateIpamPoolCidrResponse_ipamPoolAllocation :: Lens.Lens' AllocateIpamPoolCidrResponse (Prelude.Maybe IpamPoolAllocation)
+allocateIpamPoolCidrResponse_ipamPoolAllocation = Lens.lens (\AllocateIpamPoolCidrResponse' {ipamPoolAllocation} -> ipamPoolAllocation) (\s@AllocateIpamPoolCidrResponse' {} a -> s {ipamPoolAllocation = a} :: AllocateIpamPoolCidrResponse)
+
+-- | The response's http status code.
+allocateIpamPoolCidrResponse_httpStatus :: Lens.Lens' AllocateIpamPoolCidrResponse Prelude.Int
+allocateIpamPoolCidrResponse_httpStatus = Lens.lens (\AllocateIpamPoolCidrResponse' {httpStatus} -> httpStatus) (\s@AllocateIpamPoolCidrResponse' {} a -> s {httpStatus = a} :: AllocateIpamPoolCidrResponse)
+
+instance Prelude.NFData AllocateIpamPoolCidrResponse where
+  rnf AllocateIpamPoolCidrResponse' {..} =
+    Prelude.rnf ipamPoolAllocation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ApplySecurityGroupsToClientVpnTargetNetwork.hs b/gen/Amazonka/EC2/ApplySecurityGroupsToClientVpnTargetNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ApplySecurityGroupsToClientVpnTargetNetwork.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ApplySecurityGroupsToClientVpnTargetNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Applies a security group to the association between the target network
+-- and the Client VPN endpoint. This action replaces the existing security
+-- groups with the specified security groups.
+module Amazonka.EC2.ApplySecurityGroupsToClientVpnTargetNetwork
+  ( -- * Creating a Request
+    ApplySecurityGroupsToClientVpnTargetNetwork (..),
+    newApplySecurityGroupsToClientVpnTargetNetwork,
+
+    -- * Request Lenses
+    applySecurityGroupsToClientVpnTargetNetwork_dryRun,
+    applySecurityGroupsToClientVpnTargetNetwork_clientVpnEndpointId,
+    applySecurityGroupsToClientVpnTargetNetwork_vpcId,
+    applySecurityGroupsToClientVpnTargetNetwork_securityGroupIds,
+
+    -- * Destructuring the Response
+    ApplySecurityGroupsToClientVpnTargetNetworkResponse (..),
+    newApplySecurityGroupsToClientVpnTargetNetworkResponse,
+
+    -- * Response Lenses
+    applySecurityGroupsToClientVpnTargetNetworkResponse_securityGroupIds,
+    applySecurityGroupsToClientVpnTargetNetworkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newApplySecurityGroupsToClientVpnTargetNetwork' smart constructor.
+data ApplySecurityGroupsToClientVpnTargetNetwork = ApplySecurityGroupsToClientVpnTargetNetwork'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The ID of the VPC in which the associated target network is located.
+    vpcId :: Prelude.Text,
+    -- | The IDs of the security groups to apply to the associated target
+    -- network. Up to 5 security groups can be applied to an associated target
+    -- network.
+    securityGroupIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplySecurityGroupsToClientVpnTargetNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'applySecurityGroupsToClientVpnTargetNetwork_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'applySecurityGroupsToClientVpnTargetNetwork_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+--
+-- 'vpcId', 'applySecurityGroupsToClientVpnTargetNetwork_vpcId' - The ID of the VPC in which the associated target network is located.
+--
+-- 'securityGroupIds', 'applySecurityGroupsToClientVpnTargetNetwork_securityGroupIds' - The IDs of the security groups to apply to the associated target
+-- network. Up to 5 security groups can be applied to an associated target
+-- network.
+newApplySecurityGroupsToClientVpnTargetNetwork ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  ApplySecurityGroupsToClientVpnTargetNetwork
+newApplySecurityGroupsToClientVpnTargetNetwork
+  pClientVpnEndpointId_
+  pVpcId_ =
+    ApplySecurityGroupsToClientVpnTargetNetwork'
+      { dryRun =
+          Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_,
+        vpcId = pVpcId_,
+        securityGroupIds =
+          Prelude.mempty
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+applySecurityGroupsToClientVpnTargetNetwork_dryRun :: Lens.Lens' ApplySecurityGroupsToClientVpnTargetNetwork (Prelude.Maybe Prelude.Bool)
+applySecurityGroupsToClientVpnTargetNetwork_dryRun = Lens.lens (\ApplySecurityGroupsToClientVpnTargetNetwork' {dryRun} -> dryRun) (\s@ApplySecurityGroupsToClientVpnTargetNetwork' {} a -> s {dryRun = a} :: ApplySecurityGroupsToClientVpnTargetNetwork)
+
+-- | The ID of the Client VPN endpoint.
+applySecurityGroupsToClientVpnTargetNetwork_clientVpnEndpointId :: Lens.Lens' ApplySecurityGroupsToClientVpnTargetNetwork Prelude.Text
+applySecurityGroupsToClientVpnTargetNetwork_clientVpnEndpointId = Lens.lens (\ApplySecurityGroupsToClientVpnTargetNetwork' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ApplySecurityGroupsToClientVpnTargetNetwork' {} a -> s {clientVpnEndpointId = a} :: ApplySecurityGroupsToClientVpnTargetNetwork)
+
+-- | The ID of the VPC in which the associated target network is located.
+applySecurityGroupsToClientVpnTargetNetwork_vpcId :: Lens.Lens' ApplySecurityGroupsToClientVpnTargetNetwork Prelude.Text
+applySecurityGroupsToClientVpnTargetNetwork_vpcId = Lens.lens (\ApplySecurityGroupsToClientVpnTargetNetwork' {vpcId} -> vpcId) (\s@ApplySecurityGroupsToClientVpnTargetNetwork' {} a -> s {vpcId = a} :: ApplySecurityGroupsToClientVpnTargetNetwork)
+
+-- | The IDs of the security groups to apply to the associated target
+-- network. Up to 5 security groups can be applied to an associated target
+-- network.
+applySecurityGroupsToClientVpnTargetNetwork_securityGroupIds :: Lens.Lens' ApplySecurityGroupsToClientVpnTargetNetwork [Prelude.Text]
+applySecurityGroupsToClientVpnTargetNetwork_securityGroupIds = Lens.lens (\ApplySecurityGroupsToClientVpnTargetNetwork' {securityGroupIds} -> securityGroupIds) (\s@ApplySecurityGroupsToClientVpnTargetNetwork' {} a -> s {securityGroupIds = a} :: ApplySecurityGroupsToClientVpnTargetNetwork) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    ApplySecurityGroupsToClientVpnTargetNetwork
+  where
+  type
+    AWSResponse
+      ApplySecurityGroupsToClientVpnTargetNetwork =
+      ApplySecurityGroupsToClientVpnTargetNetworkResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ApplySecurityGroupsToClientVpnTargetNetworkResponse'
+            Prelude.<$> ( x
+                            Data..@? "securityGroupIds"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ApplySecurityGroupsToClientVpnTargetNetwork
+  where
+  hashWithSalt
+    _salt
+    ApplySecurityGroupsToClientVpnTargetNetwork' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` clientVpnEndpointId
+        `Prelude.hashWithSalt` vpcId
+        `Prelude.hashWithSalt` securityGroupIds
+
+instance
+  Prelude.NFData
+    ApplySecurityGroupsToClientVpnTargetNetwork
+  where
+  rnf ApplySecurityGroupsToClientVpnTargetNetwork' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf securityGroupIds
+
+instance
+  Data.ToHeaders
+    ApplySecurityGroupsToClientVpnTargetNetwork
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ApplySecurityGroupsToClientVpnTargetNetwork
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ApplySecurityGroupsToClientVpnTargetNetwork
+  where
+  toQuery
+    ApplySecurityGroupsToClientVpnTargetNetwork' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "ApplySecurityGroupsToClientVpnTargetNetwork" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+          "VpcId" Data.=: vpcId,
+          Data.toQueryList "SecurityGroupId" securityGroupIds
+        ]
+
+-- | /See:/ 'newApplySecurityGroupsToClientVpnTargetNetworkResponse' smart constructor.
+data ApplySecurityGroupsToClientVpnTargetNetworkResponse = ApplySecurityGroupsToClientVpnTargetNetworkResponse'
+  { -- | The IDs of the applied security groups.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplySecurityGroupsToClientVpnTargetNetworkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroupIds', 'applySecurityGroupsToClientVpnTargetNetworkResponse_securityGroupIds' - The IDs of the applied security groups.
+--
+-- 'httpStatus', 'applySecurityGroupsToClientVpnTargetNetworkResponse_httpStatus' - The response's http status code.
+newApplySecurityGroupsToClientVpnTargetNetworkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ApplySecurityGroupsToClientVpnTargetNetworkResponse
+newApplySecurityGroupsToClientVpnTargetNetworkResponse
+  pHttpStatus_ =
+    ApplySecurityGroupsToClientVpnTargetNetworkResponse'
+      { securityGroupIds =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The IDs of the applied security groups.
+applySecurityGroupsToClientVpnTargetNetworkResponse_securityGroupIds :: Lens.Lens' ApplySecurityGroupsToClientVpnTargetNetworkResponse (Prelude.Maybe [Prelude.Text])
+applySecurityGroupsToClientVpnTargetNetworkResponse_securityGroupIds = Lens.lens (\ApplySecurityGroupsToClientVpnTargetNetworkResponse' {securityGroupIds} -> securityGroupIds) (\s@ApplySecurityGroupsToClientVpnTargetNetworkResponse' {} a -> s {securityGroupIds = a} :: ApplySecurityGroupsToClientVpnTargetNetworkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+applySecurityGroupsToClientVpnTargetNetworkResponse_httpStatus :: Lens.Lens' ApplySecurityGroupsToClientVpnTargetNetworkResponse Prelude.Int
+applySecurityGroupsToClientVpnTargetNetworkResponse_httpStatus = Lens.lens (\ApplySecurityGroupsToClientVpnTargetNetworkResponse' {httpStatus} -> httpStatus) (\s@ApplySecurityGroupsToClientVpnTargetNetworkResponse' {} a -> s {httpStatus = a} :: ApplySecurityGroupsToClientVpnTargetNetworkResponse)
+
+instance
+  Prelude.NFData
+    ApplySecurityGroupsToClientVpnTargetNetworkResponse
+  where
+  rnf
+    ApplySecurityGroupsToClientVpnTargetNetworkResponse' {..} =
+      Prelude.rnf securityGroupIds
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssignIpv6Addresses.hs b/gen/Amazonka/EC2/AssignIpv6Addresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssignIpv6Addresses.hs
@@ -0,0 +1,300 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssignIpv6Addresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Assigns one or more IPv6 addresses to the specified network interface.
+-- You can specify one or more specific IPv6 addresses, or you can specify
+-- the number of IPv6 addresses to be automatically assigned from within
+-- the subnet\'s IPv6 CIDR block range. You can assign as many IPv6
+-- addresses to a network interface as you can assign private IPv4
+-- addresses, and the limit varies per instance type. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI IP Addresses Per Network Interface Per Instance Type>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- You must specify either the IPv6 addresses or the IPv6 address count in
+-- the request.
+--
+-- You can optionally use Prefix Delegation on the network interface. You
+-- must specify either the IPV6 Prefix Delegation prefixes, or the IPv6
+-- Prefix Delegation count. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.AssignIpv6Addresses
+  ( -- * Creating a Request
+    AssignIpv6Addresses (..),
+    newAssignIpv6Addresses,
+
+    -- * Request Lenses
+    assignIpv6Addresses_ipv6AddressCount,
+    assignIpv6Addresses_ipv6Addresses,
+    assignIpv6Addresses_ipv6PrefixCount,
+    assignIpv6Addresses_ipv6Prefixes,
+    assignIpv6Addresses_networkInterfaceId,
+
+    -- * Destructuring the Response
+    AssignIpv6AddressesResponse (..),
+    newAssignIpv6AddressesResponse,
+
+    -- * Response Lenses
+    assignIpv6AddressesResponse_assignedIpv6Addresses,
+    assignIpv6AddressesResponse_assignedIpv6Prefixes,
+    assignIpv6AddressesResponse_networkInterfaceId,
+    assignIpv6AddressesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssignIpv6Addresses' smart constructor.
+data AssignIpv6Addresses = AssignIpv6Addresses'
+  { -- | The number of additional IPv6 addresses to assign to the network
+    -- interface. The specified number of IPv6 addresses are assigned in
+    -- addition to the existing IPv6 addresses that are already assigned to the
+    -- network interface. Amazon EC2 automatically selects the IPv6 addresses
+    -- from the subnet range. You can\'t use this option if specifying specific
+    -- IPv6 addresses.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 addresses to be assigned to the network interface. You can\'t
+    -- use this option if you\'re specifying a number of IPv6 addresses.
+    ipv6Addresses :: Prelude.Maybe [Prelude.Text],
+    -- | The number of IPv6 prefixes that Amazon Web Services automatically
+    -- assigns to the network interface. You cannot use this option if you use
+    -- the @Ipv6Prefixes@ option.
+    ipv6PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more IPv6 prefixes assigned to the network interface. You cannot
+    -- use this option if you use the @Ipv6PrefixCount@ option.
+    ipv6Prefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssignIpv6Addresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6AddressCount', 'assignIpv6Addresses_ipv6AddressCount' - The number of additional IPv6 addresses to assign to the network
+-- interface. The specified number of IPv6 addresses are assigned in
+-- addition to the existing IPv6 addresses that are already assigned to the
+-- network interface. Amazon EC2 automatically selects the IPv6 addresses
+-- from the subnet range. You can\'t use this option if specifying specific
+-- IPv6 addresses.
+--
+-- 'ipv6Addresses', 'assignIpv6Addresses_ipv6Addresses' - The IPv6 addresses to be assigned to the network interface. You can\'t
+-- use this option if you\'re specifying a number of IPv6 addresses.
+--
+-- 'ipv6PrefixCount', 'assignIpv6Addresses_ipv6PrefixCount' - The number of IPv6 prefixes that Amazon Web Services automatically
+-- assigns to the network interface. You cannot use this option if you use
+-- the @Ipv6Prefixes@ option.
+--
+-- 'ipv6Prefixes', 'assignIpv6Addresses_ipv6Prefixes' - One or more IPv6 prefixes assigned to the network interface. You cannot
+-- use this option if you use the @Ipv6PrefixCount@ option.
+--
+-- 'networkInterfaceId', 'assignIpv6Addresses_networkInterfaceId' - The ID of the network interface.
+newAssignIpv6Addresses ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  AssignIpv6Addresses
+newAssignIpv6Addresses pNetworkInterfaceId_ =
+  AssignIpv6Addresses'
+    { ipv6AddressCount =
+        Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      ipv6PrefixCount = Prelude.Nothing,
+      ipv6Prefixes = Prelude.Nothing,
+      networkInterfaceId = pNetworkInterfaceId_
+    }
+
+-- | The number of additional IPv6 addresses to assign to the network
+-- interface. The specified number of IPv6 addresses are assigned in
+-- addition to the existing IPv6 addresses that are already assigned to the
+-- network interface. Amazon EC2 automatically selects the IPv6 addresses
+-- from the subnet range. You can\'t use this option if specifying specific
+-- IPv6 addresses.
+assignIpv6Addresses_ipv6AddressCount :: Lens.Lens' AssignIpv6Addresses (Prelude.Maybe Prelude.Int)
+assignIpv6Addresses_ipv6AddressCount = Lens.lens (\AssignIpv6Addresses' {ipv6AddressCount} -> ipv6AddressCount) (\s@AssignIpv6Addresses' {} a -> s {ipv6AddressCount = a} :: AssignIpv6Addresses)
+
+-- | The IPv6 addresses to be assigned to the network interface. You can\'t
+-- use this option if you\'re specifying a number of IPv6 addresses.
+assignIpv6Addresses_ipv6Addresses :: Lens.Lens' AssignIpv6Addresses (Prelude.Maybe [Prelude.Text])
+assignIpv6Addresses_ipv6Addresses = Lens.lens (\AssignIpv6Addresses' {ipv6Addresses} -> ipv6Addresses) (\s@AssignIpv6Addresses' {} a -> s {ipv6Addresses = a} :: AssignIpv6Addresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 prefixes that Amazon Web Services automatically
+-- assigns to the network interface. You cannot use this option if you use
+-- the @Ipv6Prefixes@ option.
+assignIpv6Addresses_ipv6PrefixCount :: Lens.Lens' AssignIpv6Addresses (Prelude.Maybe Prelude.Int)
+assignIpv6Addresses_ipv6PrefixCount = Lens.lens (\AssignIpv6Addresses' {ipv6PrefixCount} -> ipv6PrefixCount) (\s@AssignIpv6Addresses' {} a -> s {ipv6PrefixCount = a} :: AssignIpv6Addresses)
+
+-- | One or more IPv6 prefixes assigned to the network interface. You cannot
+-- use this option if you use the @Ipv6PrefixCount@ option.
+assignIpv6Addresses_ipv6Prefixes :: Lens.Lens' AssignIpv6Addresses (Prelude.Maybe [Prelude.Text])
+assignIpv6Addresses_ipv6Prefixes = Lens.lens (\AssignIpv6Addresses' {ipv6Prefixes} -> ipv6Prefixes) (\s@AssignIpv6Addresses' {} a -> s {ipv6Prefixes = a} :: AssignIpv6Addresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+assignIpv6Addresses_networkInterfaceId :: Lens.Lens' AssignIpv6Addresses Prelude.Text
+assignIpv6Addresses_networkInterfaceId = Lens.lens (\AssignIpv6Addresses' {networkInterfaceId} -> networkInterfaceId) (\s@AssignIpv6Addresses' {} a -> s {networkInterfaceId = a} :: AssignIpv6Addresses)
+
+instance Core.AWSRequest AssignIpv6Addresses where
+  type
+    AWSResponse AssignIpv6Addresses =
+      AssignIpv6AddressesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssignIpv6AddressesResponse'
+            Prelude.<$> ( x
+                            Data..@? "assignedIpv6Addresses"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "assignedIpv6PrefixSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "networkInterfaceId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssignIpv6Addresses where
+  hashWithSalt _salt AssignIpv6Addresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipv6AddressCount
+      `Prelude.hashWithSalt` ipv6Addresses
+      `Prelude.hashWithSalt` ipv6PrefixCount
+      `Prelude.hashWithSalt` ipv6Prefixes
+      `Prelude.hashWithSalt` networkInterfaceId
+
+instance Prelude.NFData AssignIpv6Addresses where
+  rnf AssignIpv6Addresses' {..} =
+    Prelude.rnf ipv6AddressCount
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf ipv6PrefixCount
+      `Prelude.seq` Prelude.rnf ipv6Prefixes
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance Data.ToHeaders AssignIpv6Addresses where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssignIpv6Addresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssignIpv6Addresses where
+  toQuery AssignIpv6Addresses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssignIpv6Addresses" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Ipv6AddressCount" Data.=: ipv6AddressCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Addresses"
+              Prelude.<$> ipv6Addresses
+          ),
+        "Ipv6PrefixCount" Data.=: ipv6PrefixCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Prefix"
+              Prelude.<$> ipv6Prefixes
+          ),
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newAssignIpv6AddressesResponse' smart constructor.
+data AssignIpv6AddressesResponse = AssignIpv6AddressesResponse'
+  { -- | The new IPv6 addresses assigned to the network interface. Existing IPv6
+    -- addresses that were assigned to the network interface before the request
+    -- are not included.
+    assignedIpv6Addresses :: Prelude.Maybe [Prelude.Text],
+    -- | The IPv6 prefixes that are assigned to the network interface.
+    assignedIpv6Prefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssignIpv6AddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assignedIpv6Addresses', 'assignIpv6AddressesResponse_assignedIpv6Addresses' - The new IPv6 addresses assigned to the network interface. Existing IPv6
+-- addresses that were assigned to the network interface before the request
+-- are not included.
+--
+-- 'assignedIpv6Prefixes', 'assignIpv6AddressesResponse_assignedIpv6Prefixes' - The IPv6 prefixes that are assigned to the network interface.
+--
+-- 'networkInterfaceId', 'assignIpv6AddressesResponse_networkInterfaceId' - The ID of the network interface.
+--
+-- 'httpStatus', 'assignIpv6AddressesResponse_httpStatus' - The response's http status code.
+newAssignIpv6AddressesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssignIpv6AddressesResponse
+newAssignIpv6AddressesResponse pHttpStatus_ =
+  AssignIpv6AddressesResponse'
+    { assignedIpv6Addresses =
+        Prelude.Nothing,
+      assignedIpv6Prefixes = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The new IPv6 addresses assigned to the network interface. Existing IPv6
+-- addresses that were assigned to the network interface before the request
+-- are not included.
+assignIpv6AddressesResponse_assignedIpv6Addresses :: Lens.Lens' AssignIpv6AddressesResponse (Prelude.Maybe [Prelude.Text])
+assignIpv6AddressesResponse_assignedIpv6Addresses = Lens.lens (\AssignIpv6AddressesResponse' {assignedIpv6Addresses} -> assignedIpv6Addresses) (\s@AssignIpv6AddressesResponse' {} a -> s {assignedIpv6Addresses = a} :: AssignIpv6AddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv6 prefixes that are assigned to the network interface.
+assignIpv6AddressesResponse_assignedIpv6Prefixes :: Lens.Lens' AssignIpv6AddressesResponse (Prelude.Maybe [Prelude.Text])
+assignIpv6AddressesResponse_assignedIpv6Prefixes = Lens.lens (\AssignIpv6AddressesResponse' {assignedIpv6Prefixes} -> assignedIpv6Prefixes) (\s@AssignIpv6AddressesResponse' {} a -> s {assignedIpv6Prefixes = a} :: AssignIpv6AddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+assignIpv6AddressesResponse_networkInterfaceId :: Lens.Lens' AssignIpv6AddressesResponse (Prelude.Maybe Prelude.Text)
+assignIpv6AddressesResponse_networkInterfaceId = Lens.lens (\AssignIpv6AddressesResponse' {networkInterfaceId} -> networkInterfaceId) (\s@AssignIpv6AddressesResponse' {} a -> s {networkInterfaceId = a} :: AssignIpv6AddressesResponse)
+
+-- | The response's http status code.
+assignIpv6AddressesResponse_httpStatus :: Lens.Lens' AssignIpv6AddressesResponse Prelude.Int
+assignIpv6AddressesResponse_httpStatus = Lens.lens (\AssignIpv6AddressesResponse' {httpStatus} -> httpStatus) (\s@AssignIpv6AddressesResponse' {} a -> s {httpStatus = a} :: AssignIpv6AddressesResponse)
+
+instance Prelude.NFData AssignIpv6AddressesResponse where
+  rnf AssignIpv6AddressesResponse' {..} =
+    Prelude.rnf assignedIpv6Addresses
+      `Prelude.seq` Prelude.rnf assignedIpv6Prefixes
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssignPrivateIpAddresses.hs b/gen/Amazonka/EC2/AssignPrivateIpAddresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssignPrivateIpAddresses.hs
@@ -0,0 +1,337 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssignPrivateIpAddresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Assigns one or more secondary private IP addresses to the specified
+-- network interface.
+--
+-- You can specify one or more specific secondary IP addresses, or you can
+-- specify the number of secondary IP addresses to be automatically
+-- assigned within the subnet\'s CIDR block range. The number of secondary
+-- IP addresses that you can assign to an instance varies by instance type.
+-- For information about instance types, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types>
+-- in the /Amazon Elastic Compute Cloud User Guide/. For more information
+-- about Elastic IP addresses, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- When you move a secondary private IP address to another network
+-- interface, any Elastic IP address that is associated with the IP address
+-- is also moved.
+--
+-- Remapping an IP address is an asynchronous operation. When you move an
+-- IP address from one network interface to another, check
+-- @network\/interfaces\/macs\/mac\/local-ipv4s@ in the instance metadata
+-- to confirm that the remapping is complete.
+--
+-- You must specify either the IP addresses or the IP address count in the
+-- request.
+--
+-- You can optionally use Prefix Delegation on the network interface. You
+-- must specify either the IPv4 Prefix Delegation prefixes, or the IPv4
+-- Prefix Delegation count. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.AssignPrivateIpAddresses
+  ( -- * Creating a Request
+    AssignPrivateIpAddresses (..),
+    newAssignPrivateIpAddresses,
+
+    -- * Request Lenses
+    assignPrivateIpAddresses_allowReassignment,
+    assignPrivateIpAddresses_ipv4PrefixCount,
+    assignPrivateIpAddresses_ipv4Prefixes,
+    assignPrivateIpAddresses_privateIpAddresses,
+    assignPrivateIpAddresses_secondaryPrivateIpAddressCount,
+    assignPrivateIpAddresses_networkInterfaceId,
+
+    -- * Destructuring the Response
+    AssignPrivateIpAddressesResponse (..),
+    newAssignPrivateIpAddressesResponse,
+
+    -- * Response Lenses
+    assignPrivateIpAddressesResponse_assignedIpv4Prefixes,
+    assignPrivateIpAddressesResponse_assignedPrivateIpAddresses,
+    assignPrivateIpAddressesResponse_networkInterfaceId,
+    assignPrivateIpAddressesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for AssignPrivateIpAddresses.
+--
+-- /See:/ 'newAssignPrivateIpAddresses' smart constructor.
+data AssignPrivateIpAddresses = AssignPrivateIpAddresses'
+  { -- | Indicates whether to allow an IP address that is already assigned to
+    -- another network interface or instance to be reassigned to the specified
+    -- network interface.
+    allowReassignment :: Prelude.Maybe Prelude.Bool,
+    -- | The number of IPv4 prefixes that Amazon Web Services automatically
+    -- assigns to the network interface. You cannot use this option if you use
+    -- the @Ipv4 Prefixes@ option.
+    ipv4PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more IPv4 prefixes assigned to the network interface. You cannot
+    -- use this option if you use the @Ipv4PrefixCount@ option.
+    ipv4Prefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The IP addresses to be assigned as a secondary private IP address to the
+    -- network interface. You can\'t specify this parameter when also
+    -- specifying a number of secondary IP addresses.
+    --
+    -- If you don\'t specify an IP address, Amazon EC2 automatically selects an
+    -- IP address within the subnet range.
+    privateIpAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The number of secondary IP addresses to assign to the network interface.
+    -- You can\'t specify this parameter when also specifying private IP
+    -- addresses.
+    secondaryPrivateIpAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssignPrivateIpAddresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowReassignment', 'assignPrivateIpAddresses_allowReassignment' - Indicates whether to allow an IP address that is already assigned to
+-- another network interface or instance to be reassigned to the specified
+-- network interface.
+--
+-- 'ipv4PrefixCount', 'assignPrivateIpAddresses_ipv4PrefixCount' - The number of IPv4 prefixes that Amazon Web Services automatically
+-- assigns to the network interface. You cannot use this option if you use
+-- the @Ipv4 Prefixes@ option.
+--
+-- 'ipv4Prefixes', 'assignPrivateIpAddresses_ipv4Prefixes' - One or more IPv4 prefixes assigned to the network interface. You cannot
+-- use this option if you use the @Ipv4PrefixCount@ option.
+--
+-- 'privateIpAddresses', 'assignPrivateIpAddresses_privateIpAddresses' - The IP addresses to be assigned as a secondary private IP address to the
+-- network interface. You can\'t specify this parameter when also
+-- specifying a number of secondary IP addresses.
+--
+-- If you don\'t specify an IP address, Amazon EC2 automatically selects an
+-- IP address within the subnet range.
+--
+-- 'secondaryPrivateIpAddressCount', 'assignPrivateIpAddresses_secondaryPrivateIpAddressCount' - The number of secondary IP addresses to assign to the network interface.
+-- You can\'t specify this parameter when also specifying private IP
+-- addresses.
+--
+-- 'networkInterfaceId', 'assignPrivateIpAddresses_networkInterfaceId' - The ID of the network interface.
+newAssignPrivateIpAddresses ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  AssignPrivateIpAddresses
+newAssignPrivateIpAddresses pNetworkInterfaceId_ =
+  AssignPrivateIpAddresses'
+    { allowReassignment =
+        Prelude.Nothing,
+      ipv4PrefixCount = Prelude.Nothing,
+      ipv4Prefixes = Prelude.Nothing,
+      privateIpAddresses = Prelude.Nothing,
+      secondaryPrivateIpAddressCount = Prelude.Nothing,
+      networkInterfaceId = pNetworkInterfaceId_
+    }
+
+-- | Indicates whether to allow an IP address that is already assigned to
+-- another network interface or instance to be reassigned to the specified
+-- network interface.
+assignPrivateIpAddresses_allowReassignment :: Lens.Lens' AssignPrivateIpAddresses (Prelude.Maybe Prelude.Bool)
+assignPrivateIpAddresses_allowReassignment = Lens.lens (\AssignPrivateIpAddresses' {allowReassignment} -> allowReassignment) (\s@AssignPrivateIpAddresses' {} a -> s {allowReassignment = a} :: AssignPrivateIpAddresses)
+
+-- | The number of IPv4 prefixes that Amazon Web Services automatically
+-- assigns to the network interface. You cannot use this option if you use
+-- the @Ipv4 Prefixes@ option.
+assignPrivateIpAddresses_ipv4PrefixCount :: Lens.Lens' AssignPrivateIpAddresses (Prelude.Maybe Prelude.Int)
+assignPrivateIpAddresses_ipv4PrefixCount = Lens.lens (\AssignPrivateIpAddresses' {ipv4PrefixCount} -> ipv4PrefixCount) (\s@AssignPrivateIpAddresses' {} a -> s {ipv4PrefixCount = a} :: AssignPrivateIpAddresses)
+
+-- | One or more IPv4 prefixes assigned to the network interface. You cannot
+-- use this option if you use the @Ipv4PrefixCount@ option.
+assignPrivateIpAddresses_ipv4Prefixes :: Lens.Lens' AssignPrivateIpAddresses (Prelude.Maybe [Prelude.Text])
+assignPrivateIpAddresses_ipv4Prefixes = Lens.lens (\AssignPrivateIpAddresses' {ipv4Prefixes} -> ipv4Prefixes) (\s@AssignPrivateIpAddresses' {} a -> s {ipv4Prefixes = a} :: AssignPrivateIpAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP addresses to be assigned as a secondary private IP address to the
+-- network interface. You can\'t specify this parameter when also
+-- specifying a number of secondary IP addresses.
+--
+-- If you don\'t specify an IP address, Amazon EC2 automatically selects an
+-- IP address within the subnet range.
+assignPrivateIpAddresses_privateIpAddresses :: Lens.Lens' AssignPrivateIpAddresses (Prelude.Maybe [Prelude.Text])
+assignPrivateIpAddresses_privateIpAddresses = Lens.lens (\AssignPrivateIpAddresses' {privateIpAddresses} -> privateIpAddresses) (\s@AssignPrivateIpAddresses' {} a -> s {privateIpAddresses = a} :: AssignPrivateIpAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of secondary IP addresses to assign to the network interface.
+-- You can\'t specify this parameter when also specifying private IP
+-- addresses.
+assignPrivateIpAddresses_secondaryPrivateIpAddressCount :: Lens.Lens' AssignPrivateIpAddresses (Prelude.Maybe Prelude.Int)
+assignPrivateIpAddresses_secondaryPrivateIpAddressCount = Lens.lens (\AssignPrivateIpAddresses' {secondaryPrivateIpAddressCount} -> secondaryPrivateIpAddressCount) (\s@AssignPrivateIpAddresses' {} a -> s {secondaryPrivateIpAddressCount = a} :: AssignPrivateIpAddresses)
+
+-- | The ID of the network interface.
+assignPrivateIpAddresses_networkInterfaceId :: Lens.Lens' AssignPrivateIpAddresses Prelude.Text
+assignPrivateIpAddresses_networkInterfaceId = Lens.lens (\AssignPrivateIpAddresses' {networkInterfaceId} -> networkInterfaceId) (\s@AssignPrivateIpAddresses' {} a -> s {networkInterfaceId = a} :: AssignPrivateIpAddresses)
+
+instance Core.AWSRequest AssignPrivateIpAddresses where
+  type
+    AWSResponse AssignPrivateIpAddresses =
+      AssignPrivateIpAddressesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssignPrivateIpAddressesResponse'
+            Prelude.<$> ( x
+                            Data..@? "assignedIpv4PrefixSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "assignedPrivateIpAddressesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "networkInterfaceId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssignPrivateIpAddresses where
+  hashWithSalt _salt AssignPrivateIpAddresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowReassignment
+      `Prelude.hashWithSalt` ipv4PrefixCount
+      `Prelude.hashWithSalt` ipv4Prefixes
+      `Prelude.hashWithSalt` privateIpAddresses
+      `Prelude.hashWithSalt` secondaryPrivateIpAddressCount
+      `Prelude.hashWithSalt` networkInterfaceId
+
+instance Prelude.NFData AssignPrivateIpAddresses where
+  rnf AssignPrivateIpAddresses' {..} =
+    Prelude.rnf allowReassignment
+      `Prelude.seq` Prelude.rnf ipv4PrefixCount
+      `Prelude.seq` Prelude.rnf ipv4Prefixes
+      `Prelude.seq` Prelude.rnf privateIpAddresses
+      `Prelude.seq` Prelude.rnf secondaryPrivateIpAddressCount
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance Data.ToHeaders AssignPrivateIpAddresses where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssignPrivateIpAddresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssignPrivateIpAddresses where
+  toQuery AssignPrivateIpAddresses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssignPrivateIpAddresses" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllowReassignment" Data.=: allowReassignment,
+        "Ipv4PrefixCount" Data.=: ipv4PrefixCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv4Prefix"
+              Prelude.<$> ipv4Prefixes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "PrivateIpAddress"
+              Prelude.<$> privateIpAddresses
+          ),
+        "SecondaryPrivateIpAddressCount"
+          Data.=: secondaryPrivateIpAddressCount,
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newAssignPrivateIpAddressesResponse' smart constructor.
+data AssignPrivateIpAddressesResponse = AssignPrivateIpAddressesResponse'
+  { -- | The IPv4 prefixes that are assigned to the network interface.
+    assignedIpv4Prefixes :: Prelude.Maybe [Ipv4PrefixSpecification],
+    -- | The private IP addresses assigned to the network interface.
+    assignedPrivateIpAddresses :: Prelude.Maybe [AssignedPrivateIpAddress],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssignPrivateIpAddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assignedIpv4Prefixes', 'assignPrivateIpAddressesResponse_assignedIpv4Prefixes' - The IPv4 prefixes that are assigned to the network interface.
+--
+-- 'assignedPrivateIpAddresses', 'assignPrivateIpAddressesResponse_assignedPrivateIpAddresses' - The private IP addresses assigned to the network interface.
+--
+-- 'networkInterfaceId', 'assignPrivateIpAddressesResponse_networkInterfaceId' - The ID of the network interface.
+--
+-- 'httpStatus', 'assignPrivateIpAddressesResponse_httpStatus' - The response's http status code.
+newAssignPrivateIpAddressesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssignPrivateIpAddressesResponse
+newAssignPrivateIpAddressesResponse pHttpStatus_ =
+  AssignPrivateIpAddressesResponse'
+    { assignedIpv4Prefixes =
+        Prelude.Nothing,
+      assignedPrivateIpAddresses =
+        Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IPv4 prefixes that are assigned to the network interface.
+assignPrivateIpAddressesResponse_assignedIpv4Prefixes :: Lens.Lens' AssignPrivateIpAddressesResponse (Prelude.Maybe [Ipv4PrefixSpecification])
+assignPrivateIpAddressesResponse_assignedIpv4Prefixes = Lens.lens (\AssignPrivateIpAddressesResponse' {assignedIpv4Prefixes} -> assignedIpv4Prefixes) (\s@AssignPrivateIpAddressesResponse' {} a -> s {assignedIpv4Prefixes = a} :: AssignPrivateIpAddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The private IP addresses assigned to the network interface.
+assignPrivateIpAddressesResponse_assignedPrivateIpAddresses :: Lens.Lens' AssignPrivateIpAddressesResponse (Prelude.Maybe [AssignedPrivateIpAddress])
+assignPrivateIpAddressesResponse_assignedPrivateIpAddresses = Lens.lens (\AssignPrivateIpAddressesResponse' {assignedPrivateIpAddresses} -> assignedPrivateIpAddresses) (\s@AssignPrivateIpAddressesResponse' {} a -> s {assignedPrivateIpAddresses = a} :: AssignPrivateIpAddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+assignPrivateIpAddressesResponse_networkInterfaceId :: Lens.Lens' AssignPrivateIpAddressesResponse (Prelude.Maybe Prelude.Text)
+assignPrivateIpAddressesResponse_networkInterfaceId = Lens.lens (\AssignPrivateIpAddressesResponse' {networkInterfaceId} -> networkInterfaceId) (\s@AssignPrivateIpAddressesResponse' {} a -> s {networkInterfaceId = a} :: AssignPrivateIpAddressesResponse)
+
+-- | The response's http status code.
+assignPrivateIpAddressesResponse_httpStatus :: Lens.Lens' AssignPrivateIpAddressesResponse Prelude.Int
+assignPrivateIpAddressesResponse_httpStatus = Lens.lens (\AssignPrivateIpAddressesResponse' {httpStatus} -> httpStatus) (\s@AssignPrivateIpAddressesResponse' {} a -> s {httpStatus = a} :: AssignPrivateIpAddressesResponse)
+
+instance
+  Prelude.NFData
+    AssignPrivateIpAddressesResponse
+  where
+  rnf AssignPrivateIpAddressesResponse' {..} =
+    Prelude.rnf assignedIpv4Prefixes
+      `Prelude.seq` Prelude.rnf assignedPrivateIpAddresses
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateAddress.hs b/gen/Amazonka/EC2/AssociateAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateAddress.hs
@@ -0,0 +1,335 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates an Elastic IP address, or carrier IP address (for instances
+-- that are in subnets in Wavelength Zones) with an instance or a network
+-- interface. Before you can use an Elastic IP address, you must allocate
+-- it to your account.
+--
+-- An Elastic IP address is for use in either the EC2-Classic platform or
+-- in a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- [EC2-Classic, VPC in an EC2-VPC-only account] If the Elastic IP address
+-- is already associated with a different instance, it is disassociated
+-- from that instance and associated with the specified instance. If you
+-- associate an Elastic IP address with an instance that has an existing
+-- Elastic IP address, the existing address is disassociated from the
+-- instance, but remains allocated to your account.
+--
+-- [VPC in an EC2-Classic account] If you don\'t specify a private IP
+-- address, the Elastic IP address is associated with the primary IP
+-- address. If the Elastic IP address is already associated with a
+-- different instance or a network interface, you get an error unless you
+-- allow reassociation. You cannot associate an Elastic IP address with an
+-- instance or network interface that has an existing Elastic IP address.
+--
+-- [Subnets in Wavelength Zones] You can associate an IP address from the
+-- telecommunication carrier to the instance or network interface.
+--
+-- You cannot associate an Elastic IP address with an interface in a
+-- different network border group.
+--
+-- This is an idempotent operation. If you perform the operation more than
+-- once, Amazon EC2 doesn\'t return an error, and you may be charged for
+-- each time the Elastic IP address is remapped to the same instance. For
+-- more information, see the /Elastic IP Addresses/ section of
+-- <http://aws.amazon.com/ec2/pricing/ Amazon EC2 Pricing>.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.AssociateAddress
+  ( -- * Creating a Request
+    AssociateAddress (..),
+    newAssociateAddress,
+
+    -- * Request Lenses
+    associateAddress_allocationId,
+    associateAddress_allowReassociation,
+    associateAddress_dryRun,
+    associateAddress_instanceId,
+    associateAddress_networkInterfaceId,
+    associateAddress_privateIpAddress,
+    associateAddress_publicIp,
+
+    -- * Destructuring the Response
+    AssociateAddressResponse (..),
+    newAssociateAddressResponse,
+
+    -- * Response Lenses
+    associateAddressResponse_associationId,
+    associateAddressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateAddress' smart constructor.
+data AssociateAddress = AssociateAddress'
+  { -- | [EC2-VPC] The allocation ID. This is required for EC2-VPC.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an
+    -- Elastic IP address that is already associated with an instance or
+    -- network interface to be reassociated with the specified instance or
+    -- network interface. Otherwise, the operation fails. In a VPC in an
+    -- EC2-VPC-only account, reassociation is automatic, therefore you can
+    -- specify false to ensure the operation fails if the Elastic IP address is
+    -- already associated with another resource.
+    allowReassociation :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance. The instance must have exactly one attached
+    -- network interface. For EC2-VPC, you can specify either the instance ID
+    -- or the network interface ID, but not both. For EC2-Classic, you must
+    -- specify an instance ID and the instance must be in the running state.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-VPC] The ID of the network interface. If the instance has more than
+    -- one network interface, you must specify a network interface ID.
+    --
+    -- For EC2-VPC, you can specify either the instance ID or the network
+    -- interface ID, but not both.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-VPC] The primary or secondary private IP address to associate with
+    -- the Elastic IP address. If no private IP address is specified, the
+    -- Elastic IP address is associated with the primary private IP address.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic] The Elastic IP address to associate with the instance.
+    -- This is required for EC2-Classic.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'associateAddress_allocationId' - [EC2-VPC] The allocation ID. This is required for EC2-VPC.
+--
+-- 'allowReassociation', 'associateAddress_allowReassociation' - [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an
+-- Elastic IP address that is already associated with an instance or
+-- network interface to be reassociated with the specified instance or
+-- network interface. Otherwise, the operation fails. In a VPC in an
+-- EC2-VPC-only account, reassociation is automatic, therefore you can
+-- specify false to ensure the operation fails if the Elastic IP address is
+-- already associated with another resource.
+--
+-- 'dryRun', 'associateAddress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'associateAddress_instanceId' - The ID of the instance. The instance must have exactly one attached
+-- network interface. For EC2-VPC, you can specify either the instance ID
+-- or the network interface ID, but not both. For EC2-Classic, you must
+-- specify an instance ID and the instance must be in the running state.
+--
+-- 'networkInterfaceId', 'associateAddress_networkInterfaceId' - [EC2-VPC] The ID of the network interface. If the instance has more than
+-- one network interface, you must specify a network interface ID.
+--
+-- For EC2-VPC, you can specify either the instance ID or the network
+-- interface ID, but not both.
+--
+-- 'privateIpAddress', 'associateAddress_privateIpAddress' - [EC2-VPC] The primary or secondary private IP address to associate with
+-- the Elastic IP address. If no private IP address is specified, the
+-- Elastic IP address is associated with the primary private IP address.
+--
+-- 'publicIp', 'associateAddress_publicIp' - [EC2-Classic] The Elastic IP address to associate with the instance.
+-- This is required for EC2-Classic.
+newAssociateAddress ::
+  AssociateAddress
+newAssociateAddress =
+  AssociateAddress'
+    { allocationId = Prelude.Nothing,
+      allowReassociation = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] The allocation ID. This is required for EC2-VPC.
+associateAddress_allocationId :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Text)
+associateAddress_allocationId = Lens.lens (\AssociateAddress' {allocationId} -> allocationId) (\s@AssociateAddress' {} a -> s {allocationId = a} :: AssociateAddress)
+
+-- | [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an
+-- Elastic IP address that is already associated with an instance or
+-- network interface to be reassociated with the specified instance or
+-- network interface. Otherwise, the operation fails. In a VPC in an
+-- EC2-VPC-only account, reassociation is automatic, therefore you can
+-- specify false to ensure the operation fails if the Elastic IP address is
+-- already associated with another resource.
+associateAddress_allowReassociation :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Bool)
+associateAddress_allowReassociation = Lens.lens (\AssociateAddress' {allowReassociation} -> allowReassociation) (\s@AssociateAddress' {} a -> s {allowReassociation = a} :: AssociateAddress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateAddress_dryRun :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Bool)
+associateAddress_dryRun = Lens.lens (\AssociateAddress' {dryRun} -> dryRun) (\s@AssociateAddress' {} a -> s {dryRun = a} :: AssociateAddress)
+
+-- | The ID of the instance. The instance must have exactly one attached
+-- network interface. For EC2-VPC, you can specify either the instance ID
+-- or the network interface ID, but not both. For EC2-Classic, you must
+-- specify an instance ID and the instance must be in the running state.
+associateAddress_instanceId :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Text)
+associateAddress_instanceId = Lens.lens (\AssociateAddress' {instanceId} -> instanceId) (\s@AssociateAddress' {} a -> s {instanceId = a} :: AssociateAddress)
+
+-- | [EC2-VPC] The ID of the network interface. If the instance has more than
+-- one network interface, you must specify a network interface ID.
+--
+-- For EC2-VPC, you can specify either the instance ID or the network
+-- interface ID, but not both.
+associateAddress_networkInterfaceId :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Text)
+associateAddress_networkInterfaceId = Lens.lens (\AssociateAddress' {networkInterfaceId} -> networkInterfaceId) (\s@AssociateAddress' {} a -> s {networkInterfaceId = a} :: AssociateAddress)
+
+-- | [EC2-VPC] The primary or secondary private IP address to associate with
+-- the Elastic IP address. If no private IP address is specified, the
+-- Elastic IP address is associated with the primary private IP address.
+associateAddress_privateIpAddress :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Text)
+associateAddress_privateIpAddress = Lens.lens (\AssociateAddress' {privateIpAddress} -> privateIpAddress) (\s@AssociateAddress' {} a -> s {privateIpAddress = a} :: AssociateAddress)
+
+-- | [EC2-Classic] The Elastic IP address to associate with the instance.
+-- This is required for EC2-Classic.
+associateAddress_publicIp :: Lens.Lens' AssociateAddress (Prelude.Maybe Prelude.Text)
+associateAddress_publicIp = Lens.lens (\AssociateAddress' {publicIp} -> publicIp) (\s@AssociateAddress' {} a -> s {publicIp = a} :: AssociateAddress)
+
+instance Core.AWSRequest AssociateAddress where
+  type
+    AWSResponse AssociateAddress =
+      AssociateAddressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateAddressResponse'
+            Prelude.<$> (x Data..@? "associationId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateAddress where
+  hashWithSalt _salt AssociateAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` allowReassociation
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData AssociateAddress where
+  rnf AssociateAddress' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf allowReassociation
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf publicIp
+
+instance Data.ToHeaders AssociateAddress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateAddress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateAddress where
+  toQuery AssociateAddress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssociateAddress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllocationId" Data.=: allocationId,
+        "AllowReassociation" Data.=: allowReassociation,
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        "PublicIp" Data.=: publicIp
+      ]
+
+-- | /See:/ 'newAssociateAddressResponse' smart constructor.
+data AssociateAddressResponse = AssociateAddressResponse'
+  { -- | [EC2-VPC] The ID that represents the association of the Elastic IP
+    -- address with an instance.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateAddressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'associateAddressResponse_associationId' - [EC2-VPC] The ID that represents the association of the Elastic IP
+-- address with an instance.
+--
+-- 'httpStatus', 'associateAddressResponse_httpStatus' - The response's http status code.
+newAssociateAddressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateAddressResponse
+newAssociateAddressResponse pHttpStatus_ =
+  AssociateAddressResponse'
+    { associationId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | [EC2-VPC] The ID that represents the association of the Elastic IP
+-- address with an instance.
+associateAddressResponse_associationId :: Lens.Lens' AssociateAddressResponse (Prelude.Maybe Prelude.Text)
+associateAddressResponse_associationId = Lens.lens (\AssociateAddressResponse' {associationId} -> associationId) (\s@AssociateAddressResponse' {} a -> s {associationId = a} :: AssociateAddressResponse)
+
+-- | The response's http status code.
+associateAddressResponse_httpStatus :: Lens.Lens' AssociateAddressResponse Prelude.Int
+associateAddressResponse_httpStatus = Lens.lens (\AssociateAddressResponse' {httpStatus} -> httpStatus) (\s@AssociateAddressResponse' {} a -> s {httpStatus = a} :: AssociateAddressResponse)
+
+instance Prelude.NFData AssociateAddressResponse where
+  rnf AssociateAddressResponse' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateClientVpnTargetNetwork.hs b/gen/Amazonka/EC2/AssociateClientVpnTargetNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateClientVpnTargetNetwork.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateClientVpnTargetNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a target network with a Client VPN endpoint. A target network
+-- is a subnet in a VPC. You can associate multiple subnets from the same
+-- VPC with a Client VPN endpoint. You can associate only one subnet in
+-- each Availability Zone. We recommend that you associate at least two
+-- subnets to provide Availability Zone redundancy.
+--
+-- If you specified a VPC when you created the Client VPN endpoint or if
+-- you have previous subnet associations, the specified subnet must be in
+-- the same VPC. To specify a subnet that\'s in a different VPC, you must
+-- first modify the Client VPN endpoint (ModifyClientVpnEndpoint) and
+-- change the VPC that\'s associated with it.
+module Amazonka.EC2.AssociateClientVpnTargetNetwork
+  ( -- * Creating a Request
+    AssociateClientVpnTargetNetwork (..),
+    newAssociateClientVpnTargetNetwork,
+
+    -- * Request Lenses
+    associateClientVpnTargetNetwork_clientToken,
+    associateClientVpnTargetNetwork_dryRun,
+    associateClientVpnTargetNetwork_clientVpnEndpointId,
+    associateClientVpnTargetNetwork_subnetId,
+
+    -- * Destructuring the Response
+    AssociateClientVpnTargetNetworkResponse (..),
+    newAssociateClientVpnTargetNetworkResponse,
+
+    -- * Response Lenses
+    associateClientVpnTargetNetworkResponse_associationId,
+    associateClientVpnTargetNetworkResponse_status,
+    associateClientVpnTargetNetworkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateClientVpnTargetNetwork' smart constructor.
+data AssociateClientVpnTargetNetwork = AssociateClientVpnTargetNetwork'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The ID of the subnet to associate with the Client VPN endpoint.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateClientVpnTargetNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'associateClientVpnTargetNetwork_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'dryRun', 'associateClientVpnTargetNetwork_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'associateClientVpnTargetNetwork_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+--
+-- 'subnetId', 'associateClientVpnTargetNetwork_subnetId' - The ID of the subnet to associate with the Client VPN endpoint.
+newAssociateClientVpnTargetNetwork ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'subnetId'
+  Prelude.Text ->
+  AssociateClientVpnTargetNetwork
+newAssociateClientVpnTargetNetwork
+  pClientVpnEndpointId_
+  pSubnetId_ =
+    AssociateClientVpnTargetNetwork'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_,
+        subnetId = pSubnetId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+associateClientVpnTargetNetwork_clientToken :: Lens.Lens' AssociateClientVpnTargetNetwork (Prelude.Maybe Prelude.Text)
+associateClientVpnTargetNetwork_clientToken = Lens.lens (\AssociateClientVpnTargetNetwork' {clientToken} -> clientToken) (\s@AssociateClientVpnTargetNetwork' {} a -> s {clientToken = a} :: AssociateClientVpnTargetNetwork)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateClientVpnTargetNetwork_dryRun :: Lens.Lens' AssociateClientVpnTargetNetwork (Prelude.Maybe Prelude.Bool)
+associateClientVpnTargetNetwork_dryRun = Lens.lens (\AssociateClientVpnTargetNetwork' {dryRun} -> dryRun) (\s@AssociateClientVpnTargetNetwork' {} a -> s {dryRun = a} :: AssociateClientVpnTargetNetwork)
+
+-- | The ID of the Client VPN endpoint.
+associateClientVpnTargetNetwork_clientVpnEndpointId :: Lens.Lens' AssociateClientVpnTargetNetwork Prelude.Text
+associateClientVpnTargetNetwork_clientVpnEndpointId = Lens.lens (\AssociateClientVpnTargetNetwork' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@AssociateClientVpnTargetNetwork' {} a -> s {clientVpnEndpointId = a} :: AssociateClientVpnTargetNetwork)
+
+-- | The ID of the subnet to associate with the Client VPN endpoint.
+associateClientVpnTargetNetwork_subnetId :: Lens.Lens' AssociateClientVpnTargetNetwork Prelude.Text
+associateClientVpnTargetNetwork_subnetId = Lens.lens (\AssociateClientVpnTargetNetwork' {subnetId} -> subnetId) (\s@AssociateClientVpnTargetNetwork' {} a -> s {subnetId = a} :: AssociateClientVpnTargetNetwork)
+
+instance
+  Core.AWSRequest
+    AssociateClientVpnTargetNetwork
+  where
+  type
+    AWSResponse AssociateClientVpnTargetNetwork =
+      AssociateClientVpnTargetNetworkResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateClientVpnTargetNetworkResponse'
+            Prelude.<$> (x Data..@? "associationId")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateClientVpnTargetNetwork
+  where
+  hashWithSalt
+    _salt
+    AssociateClientVpnTargetNetwork' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` clientVpnEndpointId
+        `Prelude.hashWithSalt` subnetId
+
+instance
+  Prelude.NFData
+    AssociateClientVpnTargetNetwork
+  where
+  rnf AssociateClientVpnTargetNetwork' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance
+  Data.ToHeaders
+    AssociateClientVpnTargetNetwork
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateClientVpnTargetNetwork where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateClientVpnTargetNetwork where
+  toQuery AssociateClientVpnTargetNetwork' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateClientVpnTargetNetwork" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newAssociateClientVpnTargetNetworkResponse' smart constructor.
+data AssociateClientVpnTargetNetworkResponse = AssociateClientVpnTargetNetworkResponse'
+  { -- | The unique ID of the target network association.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the target network association.
+    status :: Prelude.Maybe AssociationStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateClientVpnTargetNetworkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'associateClientVpnTargetNetworkResponse_associationId' - The unique ID of the target network association.
+--
+-- 'status', 'associateClientVpnTargetNetworkResponse_status' - The current state of the target network association.
+--
+-- 'httpStatus', 'associateClientVpnTargetNetworkResponse_httpStatus' - The response's http status code.
+newAssociateClientVpnTargetNetworkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateClientVpnTargetNetworkResponse
+newAssociateClientVpnTargetNetworkResponse
+  pHttpStatus_ =
+    AssociateClientVpnTargetNetworkResponse'
+      { associationId =
+          Prelude.Nothing,
+        status = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The unique ID of the target network association.
+associateClientVpnTargetNetworkResponse_associationId :: Lens.Lens' AssociateClientVpnTargetNetworkResponse (Prelude.Maybe Prelude.Text)
+associateClientVpnTargetNetworkResponse_associationId = Lens.lens (\AssociateClientVpnTargetNetworkResponse' {associationId} -> associationId) (\s@AssociateClientVpnTargetNetworkResponse' {} a -> s {associationId = a} :: AssociateClientVpnTargetNetworkResponse)
+
+-- | The current state of the target network association.
+associateClientVpnTargetNetworkResponse_status :: Lens.Lens' AssociateClientVpnTargetNetworkResponse (Prelude.Maybe AssociationStatus)
+associateClientVpnTargetNetworkResponse_status = Lens.lens (\AssociateClientVpnTargetNetworkResponse' {status} -> status) (\s@AssociateClientVpnTargetNetworkResponse' {} a -> s {status = a} :: AssociateClientVpnTargetNetworkResponse)
+
+-- | The response's http status code.
+associateClientVpnTargetNetworkResponse_httpStatus :: Lens.Lens' AssociateClientVpnTargetNetworkResponse Prelude.Int
+associateClientVpnTargetNetworkResponse_httpStatus = Lens.lens (\AssociateClientVpnTargetNetworkResponse' {httpStatus} -> httpStatus) (\s@AssociateClientVpnTargetNetworkResponse' {} a -> s {httpStatus = a} :: AssociateClientVpnTargetNetworkResponse)
+
+instance
+  Prelude.NFData
+    AssociateClientVpnTargetNetworkResponse
+  where
+  rnf AssociateClientVpnTargetNetworkResponse' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateDhcpOptions.hs b/gen/Amazonka/EC2/AssociateDhcpOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateDhcpOptions.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateDhcpOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a set of DHCP options (that you\'ve previously created) with
+-- the specified VPC, or associates no DHCP options with the VPC.
+--
+-- After you associate the options with the VPC, any existing instances and
+-- all new instances that you launch in that VPC use the options. You
+-- don\'t need to restart or relaunch the instances. They automatically
+-- pick up the changes within a few hours, depending on how frequently the
+-- instance renews its DHCP lease. You can explicitly renew the lease using
+-- the operating system on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html DHCP options sets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.AssociateDhcpOptions
+  ( -- * Creating a Request
+    AssociateDhcpOptions (..),
+    newAssociateDhcpOptions,
+
+    -- * Request Lenses
+    associateDhcpOptions_dryRun,
+    associateDhcpOptions_dhcpOptionsId,
+    associateDhcpOptions_vpcId,
+
+    -- * Destructuring the Response
+    AssociateDhcpOptionsResponse (..),
+    newAssociateDhcpOptionsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateDhcpOptions' smart constructor.
+data AssociateDhcpOptions = AssociateDhcpOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the DHCP options set, or @default@ to associate no DHCP
+    -- options with the VPC.
+    dhcpOptionsId :: Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateDhcpOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'associateDhcpOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'dhcpOptionsId', 'associateDhcpOptions_dhcpOptionsId' - The ID of the DHCP options set, or @default@ to associate no DHCP
+-- options with the VPC.
+--
+-- 'vpcId', 'associateDhcpOptions_vpcId' - The ID of the VPC.
+newAssociateDhcpOptions ::
+  -- | 'dhcpOptionsId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  AssociateDhcpOptions
+newAssociateDhcpOptions pDhcpOptionsId_ pVpcId_ =
+  AssociateDhcpOptions'
+    { dryRun = Prelude.Nothing,
+      dhcpOptionsId = pDhcpOptionsId_,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateDhcpOptions_dryRun :: Lens.Lens' AssociateDhcpOptions (Prelude.Maybe Prelude.Bool)
+associateDhcpOptions_dryRun = Lens.lens (\AssociateDhcpOptions' {dryRun} -> dryRun) (\s@AssociateDhcpOptions' {} a -> s {dryRun = a} :: AssociateDhcpOptions)
+
+-- | The ID of the DHCP options set, or @default@ to associate no DHCP
+-- options with the VPC.
+associateDhcpOptions_dhcpOptionsId :: Lens.Lens' AssociateDhcpOptions Prelude.Text
+associateDhcpOptions_dhcpOptionsId = Lens.lens (\AssociateDhcpOptions' {dhcpOptionsId} -> dhcpOptionsId) (\s@AssociateDhcpOptions' {} a -> s {dhcpOptionsId = a} :: AssociateDhcpOptions)
+
+-- | The ID of the VPC.
+associateDhcpOptions_vpcId :: Lens.Lens' AssociateDhcpOptions Prelude.Text
+associateDhcpOptions_vpcId = Lens.lens (\AssociateDhcpOptions' {vpcId} -> vpcId) (\s@AssociateDhcpOptions' {} a -> s {vpcId = a} :: AssociateDhcpOptions)
+
+instance Core.AWSRequest AssociateDhcpOptions where
+  type
+    AWSResponse AssociateDhcpOptions =
+      AssociateDhcpOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull AssociateDhcpOptionsResponse'
+
+instance Prelude.Hashable AssociateDhcpOptions where
+  hashWithSalt _salt AssociateDhcpOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` dhcpOptionsId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData AssociateDhcpOptions where
+  rnf AssociateDhcpOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf dhcpOptionsId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders AssociateDhcpOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateDhcpOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateDhcpOptions where
+  toQuery AssociateDhcpOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssociateDhcpOptions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "DhcpOptionsId" Data.=: dhcpOptionsId,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newAssociateDhcpOptionsResponse' smart constructor.
+data AssociateDhcpOptionsResponse = AssociateDhcpOptionsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateDhcpOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newAssociateDhcpOptionsResponse ::
+  AssociateDhcpOptionsResponse
+newAssociateDhcpOptionsResponse =
+  AssociateDhcpOptionsResponse'
+
+instance Prelude.NFData AssociateDhcpOptionsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/AssociateEnclaveCertificateIamRole.hs b/gen/Amazonka/EC2/AssociateEnclaveCertificateIamRole.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateEnclaveCertificateIamRole.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateEnclaveCertificateIamRole
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates an Identity and Access Management (IAM) role with an
+-- Certificate Manager (ACM) certificate. This enables the certificate to
+-- be used by the ACM for Nitro Enclaves application inside an enclave. For
+-- more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html Certificate Manager for Nitro Enclaves>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- When the IAM role is associated with the ACM certificate, the
+-- certificate, certificate chain, and encrypted private key are placed in
+-- an Amazon S3 location that only the associated IAM role can access. The
+-- private key of the certificate is encrypted with an Amazon Web Services
+-- managed key that has an attached attestation-based key policy.
+--
+-- To enable the IAM role to access the Amazon S3 object, you must grant it
+-- permission to call @s3:GetObject@ on the Amazon S3 bucket returned by
+-- the command. To enable the IAM role to access the KMS key, you must
+-- grant it permission to call @kms:Decrypt@ on the KMS key returned by the
+-- command. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html#add-policy Grant the role permission to access the certificate and encryption key>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+module Amazonka.EC2.AssociateEnclaveCertificateIamRole
+  ( -- * Creating a Request
+    AssociateEnclaveCertificateIamRole (..),
+    newAssociateEnclaveCertificateIamRole,
+
+    -- * Request Lenses
+    associateEnclaveCertificateIamRole_certificateArn,
+    associateEnclaveCertificateIamRole_dryRun,
+    associateEnclaveCertificateIamRole_roleArn,
+
+    -- * Destructuring the Response
+    AssociateEnclaveCertificateIamRoleResponse (..),
+    newAssociateEnclaveCertificateIamRoleResponse,
+
+    -- * Response Lenses
+    associateEnclaveCertificateIamRoleResponse_certificateS3BucketName,
+    associateEnclaveCertificateIamRoleResponse_certificateS3ObjectKey,
+    associateEnclaveCertificateIamRoleResponse_encryptionKmsKeyId,
+    associateEnclaveCertificateIamRoleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateEnclaveCertificateIamRole' smart constructor.
+data AssociateEnclaveCertificateIamRole = AssociateEnclaveCertificateIamRole'
+  { -- | The ARN of the ACM certificate with which to associate the IAM role.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the IAM role to associate with the ACM certificate. You can
+    -- associate up to 16 IAM roles with an ACM certificate.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateEnclaveCertificateIamRole' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateArn', 'associateEnclaveCertificateIamRole_certificateArn' - The ARN of the ACM certificate with which to associate the IAM role.
+--
+-- 'dryRun', 'associateEnclaveCertificateIamRole_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'roleArn', 'associateEnclaveCertificateIamRole_roleArn' - The ARN of the IAM role to associate with the ACM certificate. You can
+-- associate up to 16 IAM roles with an ACM certificate.
+newAssociateEnclaveCertificateIamRole ::
+  AssociateEnclaveCertificateIamRole
+newAssociateEnclaveCertificateIamRole =
+  AssociateEnclaveCertificateIamRole'
+    { certificateArn =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | The ARN of the ACM certificate with which to associate the IAM role.
+associateEnclaveCertificateIamRole_certificateArn :: Lens.Lens' AssociateEnclaveCertificateIamRole (Prelude.Maybe Prelude.Text)
+associateEnclaveCertificateIamRole_certificateArn = Lens.lens (\AssociateEnclaveCertificateIamRole' {certificateArn} -> certificateArn) (\s@AssociateEnclaveCertificateIamRole' {} a -> s {certificateArn = a} :: AssociateEnclaveCertificateIamRole)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateEnclaveCertificateIamRole_dryRun :: Lens.Lens' AssociateEnclaveCertificateIamRole (Prelude.Maybe Prelude.Bool)
+associateEnclaveCertificateIamRole_dryRun = Lens.lens (\AssociateEnclaveCertificateIamRole' {dryRun} -> dryRun) (\s@AssociateEnclaveCertificateIamRole' {} a -> s {dryRun = a} :: AssociateEnclaveCertificateIamRole)
+
+-- | The ARN of the IAM role to associate with the ACM certificate. You can
+-- associate up to 16 IAM roles with an ACM certificate.
+associateEnclaveCertificateIamRole_roleArn :: Lens.Lens' AssociateEnclaveCertificateIamRole (Prelude.Maybe Prelude.Text)
+associateEnclaveCertificateIamRole_roleArn = Lens.lens (\AssociateEnclaveCertificateIamRole' {roleArn} -> roleArn) (\s@AssociateEnclaveCertificateIamRole' {} a -> s {roleArn = a} :: AssociateEnclaveCertificateIamRole)
+
+instance
+  Core.AWSRequest
+    AssociateEnclaveCertificateIamRole
+  where
+  type
+    AWSResponse AssociateEnclaveCertificateIamRole =
+      AssociateEnclaveCertificateIamRoleResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateEnclaveCertificateIamRoleResponse'
+            Prelude.<$> (x Data..@? "certificateS3BucketName")
+            Prelude.<*> (x Data..@? "certificateS3ObjectKey")
+            Prelude.<*> (x Data..@? "encryptionKmsKeyId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateEnclaveCertificateIamRole
+  where
+  hashWithSalt
+    _salt
+    AssociateEnclaveCertificateIamRole' {..} =
+      _salt
+        `Prelude.hashWithSalt` certificateArn
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` roleArn
+
+instance
+  Prelude.NFData
+    AssociateEnclaveCertificateIamRole
+  where
+  rnf AssociateEnclaveCertificateIamRole' {..} =
+    Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance
+  Data.ToHeaders
+    AssociateEnclaveCertificateIamRole
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AssociateEnclaveCertificateIamRole
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AssociateEnclaveCertificateIamRole
+  where
+  toQuery AssociateEnclaveCertificateIamRole' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateEnclaveCertificateIamRole" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CertificateArn" Data.=: certificateArn,
+        "DryRun" Data.=: dryRun,
+        "RoleArn" Data.=: roleArn
+      ]
+
+-- | /See:/ 'newAssociateEnclaveCertificateIamRoleResponse' smart constructor.
+data AssociateEnclaveCertificateIamRoleResponse = AssociateEnclaveCertificateIamRoleResponse'
+  { -- | The name of the Amazon S3 bucket to which the certificate was uploaded.
+    certificateS3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 object key where the certificate, certificate chain, and
+    -- encrypted private key bundle are stored. The object key is formatted as
+    -- follows: @role_arn@\/@certificate_arn@.
+    certificateS3ObjectKey :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the KMS key used to encrypt the private key of the
+    -- certificate.
+    encryptionKmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateEnclaveCertificateIamRoleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateS3BucketName', 'associateEnclaveCertificateIamRoleResponse_certificateS3BucketName' - The name of the Amazon S3 bucket to which the certificate was uploaded.
+--
+-- 'certificateS3ObjectKey', 'associateEnclaveCertificateIamRoleResponse_certificateS3ObjectKey' - The Amazon S3 object key where the certificate, certificate chain, and
+-- encrypted private key bundle are stored. The object key is formatted as
+-- follows: @role_arn@\/@certificate_arn@.
+--
+-- 'encryptionKmsKeyId', 'associateEnclaveCertificateIamRoleResponse_encryptionKmsKeyId' - The ID of the KMS key used to encrypt the private key of the
+-- certificate.
+--
+-- 'httpStatus', 'associateEnclaveCertificateIamRoleResponse_httpStatus' - The response's http status code.
+newAssociateEnclaveCertificateIamRoleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateEnclaveCertificateIamRoleResponse
+newAssociateEnclaveCertificateIamRoleResponse
+  pHttpStatus_ =
+    AssociateEnclaveCertificateIamRoleResponse'
+      { certificateS3BucketName =
+          Prelude.Nothing,
+        certificateS3ObjectKey =
+          Prelude.Nothing,
+        encryptionKmsKeyId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The name of the Amazon S3 bucket to which the certificate was uploaded.
+associateEnclaveCertificateIamRoleResponse_certificateS3BucketName :: Lens.Lens' AssociateEnclaveCertificateIamRoleResponse (Prelude.Maybe Prelude.Text)
+associateEnclaveCertificateIamRoleResponse_certificateS3BucketName = Lens.lens (\AssociateEnclaveCertificateIamRoleResponse' {certificateS3BucketName} -> certificateS3BucketName) (\s@AssociateEnclaveCertificateIamRoleResponse' {} a -> s {certificateS3BucketName = a} :: AssociateEnclaveCertificateIamRoleResponse)
+
+-- | The Amazon S3 object key where the certificate, certificate chain, and
+-- encrypted private key bundle are stored. The object key is formatted as
+-- follows: @role_arn@\/@certificate_arn@.
+associateEnclaveCertificateIamRoleResponse_certificateS3ObjectKey :: Lens.Lens' AssociateEnclaveCertificateIamRoleResponse (Prelude.Maybe Prelude.Text)
+associateEnclaveCertificateIamRoleResponse_certificateS3ObjectKey = Lens.lens (\AssociateEnclaveCertificateIamRoleResponse' {certificateS3ObjectKey} -> certificateS3ObjectKey) (\s@AssociateEnclaveCertificateIamRoleResponse' {} a -> s {certificateS3ObjectKey = a} :: AssociateEnclaveCertificateIamRoleResponse)
+
+-- | The ID of the KMS key used to encrypt the private key of the
+-- certificate.
+associateEnclaveCertificateIamRoleResponse_encryptionKmsKeyId :: Lens.Lens' AssociateEnclaveCertificateIamRoleResponse (Prelude.Maybe Prelude.Text)
+associateEnclaveCertificateIamRoleResponse_encryptionKmsKeyId = Lens.lens (\AssociateEnclaveCertificateIamRoleResponse' {encryptionKmsKeyId} -> encryptionKmsKeyId) (\s@AssociateEnclaveCertificateIamRoleResponse' {} a -> s {encryptionKmsKeyId = a} :: AssociateEnclaveCertificateIamRoleResponse)
+
+-- | The response's http status code.
+associateEnclaveCertificateIamRoleResponse_httpStatus :: Lens.Lens' AssociateEnclaveCertificateIamRoleResponse Prelude.Int
+associateEnclaveCertificateIamRoleResponse_httpStatus = Lens.lens (\AssociateEnclaveCertificateIamRoleResponse' {httpStatus} -> httpStatus) (\s@AssociateEnclaveCertificateIamRoleResponse' {} a -> s {httpStatus = a} :: AssociateEnclaveCertificateIamRoleResponse)
+
+instance
+  Prelude.NFData
+    AssociateEnclaveCertificateIamRoleResponse
+  where
+  rnf AssociateEnclaveCertificateIamRoleResponse' {..} =
+    Prelude.rnf certificateS3BucketName
+      `Prelude.seq` Prelude.rnf certificateS3ObjectKey
+      `Prelude.seq` Prelude.rnf encryptionKmsKeyId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateIamInstanceProfile.hs b/gen/Amazonka/EC2/AssociateIamInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateIamInstanceProfile.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateIamInstanceProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates an IAM instance profile with a running or stopped instance.
+-- You cannot associate more than one IAM instance profile with an
+-- instance.
+module Amazonka.EC2.AssociateIamInstanceProfile
+  ( -- * Creating a Request
+    AssociateIamInstanceProfile (..),
+    newAssociateIamInstanceProfile,
+
+    -- * Request Lenses
+    associateIamInstanceProfile_iamInstanceProfile,
+    associateIamInstanceProfile_instanceId,
+
+    -- * Destructuring the Response
+    AssociateIamInstanceProfileResponse (..),
+    newAssociateIamInstanceProfileResponse,
+
+    -- * Response Lenses
+    associateIamInstanceProfileResponse_iamInstanceProfileAssociation,
+    associateIamInstanceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateIamInstanceProfile' smart constructor.
+data AssociateIamInstanceProfile = AssociateIamInstanceProfile'
+  { -- | The IAM instance profile.
+    iamInstanceProfile :: IamInstanceProfileSpecification,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateIamInstanceProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamInstanceProfile', 'associateIamInstanceProfile_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'instanceId', 'associateIamInstanceProfile_instanceId' - The ID of the instance.
+newAssociateIamInstanceProfile ::
+  -- | 'iamInstanceProfile'
+  IamInstanceProfileSpecification ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  AssociateIamInstanceProfile
+newAssociateIamInstanceProfile
+  pIamInstanceProfile_
+  pInstanceId_ =
+    AssociateIamInstanceProfile'
+      { iamInstanceProfile =
+          pIamInstanceProfile_,
+        instanceId = pInstanceId_
+      }
+
+-- | The IAM instance profile.
+associateIamInstanceProfile_iamInstanceProfile :: Lens.Lens' AssociateIamInstanceProfile IamInstanceProfileSpecification
+associateIamInstanceProfile_iamInstanceProfile = Lens.lens (\AssociateIamInstanceProfile' {iamInstanceProfile} -> iamInstanceProfile) (\s@AssociateIamInstanceProfile' {} a -> s {iamInstanceProfile = a} :: AssociateIamInstanceProfile)
+
+-- | The ID of the instance.
+associateIamInstanceProfile_instanceId :: Lens.Lens' AssociateIamInstanceProfile Prelude.Text
+associateIamInstanceProfile_instanceId = Lens.lens (\AssociateIamInstanceProfile' {instanceId} -> instanceId) (\s@AssociateIamInstanceProfile' {} a -> s {instanceId = a} :: AssociateIamInstanceProfile)
+
+instance Core.AWSRequest AssociateIamInstanceProfile where
+  type
+    AWSResponse AssociateIamInstanceProfile =
+      AssociateIamInstanceProfileResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateIamInstanceProfileResponse'
+            Prelude.<$> (x Data..@? "iamInstanceProfileAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateIamInstanceProfile where
+  hashWithSalt _salt AssociateIamInstanceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData AssociateIamInstanceProfile where
+  rnf AssociateIamInstanceProfile' {..} =
+    Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders AssociateIamInstanceProfile where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateIamInstanceProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateIamInstanceProfile where
+  toQuery AssociateIamInstanceProfile' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateIamInstanceProfile" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newAssociateIamInstanceProfileResponse' smart constructor.
+data AssociateIamInstanceProfileResponse = AssociateIamInstanceProfileResponse'
+  { -- | Information about the IAM instance profile association.
+    iamInstanceProfileAssociation :: Prelude.Maybe IamInstanceProfileAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateIamInstanceProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamInstanceProfileAssociation', 'associateIamInstanceProfileResponse_iamInstanceProfileAssociation' - Information about the IAM instance profile association.
+--
+-- 'httpStatus', 'associateIamInstanceProfileResponse_httpStatus' - The response's http status code.
+newAssociateIamInstanceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateIamInstanceProfileResponse
+newAssociateIamInstanceProfileResponse pHttpStatus_ =
+  AssociateIamInstanceProfileResponse'
+    { iamInstanceProfileAssociation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IAM instance profile association.
+associateIamInstanceProfileResponse_iamInstanceProfileAssociation :: Lens.Lens' AssociateIamInstanceProfileResponse (Prelude.Maybe IamInstanceProfileAssociation)
+associateIamInstanceProfileResponse_iamInstanceProfileAssociation = Lens.lens (\AssociateIamInstanceProfileResponse' {iamInstanceProfileAssociation} -> iamInstanceProfileAssociation) (\s@AssociateIamInstanceProfileResponse' {} a -> s {iamInstanceProfileAssociation = a} :: AssociateIamInstanceProfileResponse)
+
+-- | The response's http status code.
+associateIamInstanceProfileResponse_httpStatus :: Lens.Lens' AssociateIamInstanceProfileResponse Prelude.Int
+associateIamInstanceProfileResponse_httpStatus = Lens.lens (\AssociateIamInstanceProfileResponse' {httpStatus} -> httpStatus) (\s@AssociateIamInstanceProfileResponse' {} a -> s {httpStatus = a} :: AssociateIamInstanceProfileResponse)
+
+instance
+  Prelude.NFData
+    AssociateIamInstanceProfileResponse
+  where
+  rnf AssociateIamInstanceProfileResponse' {..} =
+    Prelude.rnf iamInstanceProfileAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateInstanceEventWindow.hs b/gen/Amazonka/EC2/AssociateInstanceEventWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateInstanceEventWindow.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateInstanceEventWindow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates one or more targets with an event window. Only one type of
+-- target (instance IDs, Dedicated Host IDs, or tags) can be specified with
+-- an event window.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html Define event windows for scheduled events>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.AssociateInstanceEventWindow
+  ( -- * Creating a Request
+    AssociateInstanceEventWindow (..),
+    newAssociateInstanceEventWindow,
+
+    -- * Request Lenses
+    associateInstanceEventWindow_dryRun,
+    associateInstanceEventWindow_instanceEventWindowId,
+    associateInstanceEventWindow_associationTarget,
+
+    -- * Destructuring the Response
+    AssociateInstanceEventWindowResponse (..),
+    newAssociateInstanceEventWindowResponse,
+
+    -- * Response Lenses
+    associateInstanceEventWindowResponse_instanceEventWindow,
+    associateInstanceEventWindowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateInstanceEventWindow' smart constructor.
+data AssociateInstanceEventWindow = AssociateInstanceEventWindow'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the event window.
+    instanceEventWindowId :: Prelude.Text,
+    -- | One or more targets associated with the specified event window.
+    associationTarget :: InstanceEventWindowAssociationRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateInstanceEventWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'associateInstanceEventWindow_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceEventWindowId', 'associateInstanceEventWindow_instanceEventWindowId' - The ID of the event window.
+--
+-- 'associationTarget', 'associateInstanceEventWindow_associationTarget' - One or more targets associated with the specified event window.
+newAssociateInstanceEventWindow ::
+  -- | 'instanceEventWindowId'
+  Prelude.Text ->
+  -- | 'associationTarget'
+  InstanceEventWindowAssociationRequest ->
+  AssociateInstanceEventWindow
+newAssociateInstanceEventWindow
+  pInstanceEventWindowId_
+  pAssociationTarget_ =
+    AssociateInstanceEventWindow'
+      { dryRun =
+          Prelude.Nothing,
+        instanceEventWindowId =
+          pInstanceEventWindowId_,
+        associationTarget = pAssociationTarget_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateInstanceEventWindow_dryRun :: Lens.Lens' AssociateInstanceEventWindow (Prelude.Maybe Prelude.Bool)
+associateInstanceEventWindow_dryRun = Lens.lens (\AssociateInstanceEventWindow' {dryRun} -> dryRun) (\s@AssociateInstanceEventWindow' {} a -> s {dryRun = a} :: AssociateInstanceEventWindow)
+
+-- | The ID of the event window.
+associateInstanceEventWindow_instanceEventWindowId :: Lens.Lens' AssociateInstanceEventWindow Prelude.Text
+associateInstanceEventWindow_instanceEventWindowId = Lens.lens (\AssociateInstanceEventWindow' {instanceEventWindowId} -> instanceEventWindowId) (\s@AssociateInstanceEventWindow' {} a -> s {instanceEventWindowId = a} :: AssociateInstanceEventWindow)
+
+-- | One or more targets associated with the specified event window.
+associateInstanceEventWindow_associationTarget :: Lens.Lens' AssociateInstanceEventWindow InstanceEventWindowAssociationRequest
+associateInstanceEventWindow_associationTarget = Lens.lens (\AssociateInstanceEventWindow' {associationTarget} -> associationTarget) (\s@AssociateInstanceEventWindow' {} a -> s {associationTarget = a} :: AssociateInstanceEventWindow)
+
+instance Core.AWSRequest AssociateInstanceEventWindow where
+  type
+    AWSResponse AssociateInstanceEventWindow =
+      AssociateInstanceEventWindowResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateInstanceEventWindowResponse'
+            Prelude.<$> (x Data..@? "instanceEventWindow")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateInstanceEventWindow
+  where
+  hashWithSalt _salt AssociateInstanceEventWindow' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceEventWindowId
+      `Prelude.hashWithSalt` associationTarget
+
+instance Prelude.NFData AssociateInstanceEventWindow where
+  rnf AssociateInstanceEventWindow' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceEventWindowId
+      `Prelude.seq` Prelude.rnf associationTarget
+
+instance Data.ToHeaders AssociateInstanceEventWindow where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateInstanceEventWindow where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateInstanceEventWindow where
+  toQuery AssociateInstanceEventWindow' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateInstanceEventWindow" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceEventWindowId"
+          Data.=: instanceEventWindowId,
+        "AssociationTarget" Data.=: associationTarget
+      ]
+
+-- | /See:/ 'newAssociateInstanceEventWindowResponse' smart constructor.
+data AssociateInstanceEventWindowResponse = AssociateInstanceEventWindowResponse'
+  { -- | Information about the event window.
+    instanceEventWindow :: Prelude.Maybe InstanceEventWindow,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateInstanceEventWindowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindow', 'associateInstanceEventWindowResponse_instanceEventWindow' - Information about the event window.
+--
+-- 'httpStatus', 'associateInstanceEventWindowResponse_httpStatus' - The response's http status code.
+newAssociateInstanceEventWindowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateInstanceEventWindowResponse
+newAssociateInstanceEventWindowResponse pHttpStatus_ =
+  AssociateInstanceEventWindowResponse'
+    { instanceEventWindow =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the event window.
+associateInstanceEventWindowResponse_instanceEventWindow :: Lens.Lens' AssociateInstanceEventWindowResponse (Prelude.Maybe InstanceEventWindow)
+associateInstanceEventWindowResponse_instanceEventWindow = Lens.lens (\AssociateInstanceEventWindowResponse' {instanceEventWindow} -> instanceEventWindow) (\s@AssociateInstanceEventWindowResponse' {} a -> s {instanceEventWindow = a} :: AssociateInstanceEventWindowResponse)
+
+-- | The response's http status code.
+associateInstanceEventWindowResponse_httpStatus :: Lens.Lens' AssociateInstanceEventWindowResponse Prelude.Int
+associateInstanceEventWindowResponse_httpStatus = Lens.lens (\AssociateInstanceEventWindowResponse' {httpStatus} -> httpStatus) (\s@AssociateInstanceEventWindowResponse' {} a -> s {httpStatus = a} :: AssociateInstanceEventWindowResponse)
+
+instance
+  Prelude.NFData
+    AssociateInstanceEventWindowResponse
+  where
+  rnf AssociateInstanceEventWindowResponse' {..} =
+    Prelude.rnf instanceEventWindow
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateRouteTable.hs b/gen/Amazonka/EC2/AssociateRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateRouteTable.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a subnet in your VPC or an internet gateway or virtual
+-- private gateway attached to your VPC with a route table in your VPC.
+-- This association causes traffic from the subnet or gateway to be routed
+-- according to the routes in the route table. The action returns an
+-- association ID, which you need in order to disassociate the route table
+-- later. A route table can be associated with multiple subnets.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.AssociateRouteTable
+  ( -- * Creating a Request
+    AssociateRouteTable (..),
+    newAssociateRouteTable,
+
+    -- * Request Lenses
+    associateRouteTable_dryRun,
+    associateRouteTable_gatewayId,
+    associateRouteTable_subnetId,
+    associateRouteTable_routeTableId,
+
+    -- * Destructuring the Response
+    AssociateRouteTableResponse (..),
+    newAssociateRouteTableResponse,
+
+    -- * Response Lenses
+    associateRouteTableResponse_associationId,
+    associateRouteTableResponse_associationState,
+    associateRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateRouteTable' smart constructor.
+data AssociateRouteTable = AssociateRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the internet gateway or virtual private gateway.
+    gatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'associateRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'gatewayId', 'associateRouteTable_gatewayId' - The ID of the internet gateway or virtual private gateway.
+--
+-- 'subnetId', 'associateRouteTable_subnetId' - The ID of the subnet.
+--
+-- 'routeTableId', 'associateRouteTable_routeTableId' - The ID of the route table.
+newAssociateRouteTable ::
+  -- | 'routeTableId'
+  Prelude.Text ->
+  AssociateRouteTable
+newAssociateRouteTable pRouteTableId_ =
+  AssociateRouteTable'
+    { dryRun = Prelude.Nothing,
+      gatewayId = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      routeTableId = pRouteTableId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateRouteTable_dryRun :: Lens.Lens' AssociateRouteTable (Prelude.Maybe Prelude.Bool)
+associateRouteTable_dryRun = Lens.lens (\AssociateRouteTable' {dryRun} -> dryRun) (\s@AssociateRouteTable' {} a -> s {dryRun = a} :: AssociateRouteTable)
+
+-- | The ID of the internet gateway or virtual private gateway.
+associateRouteTable_gatewayId :: Lens.Lens' AssociateRouteTable (Prelude.Maybe Prelude.Text)
+associateRouteTable_gatewayId = Lens.lens (\AssociateRouteTable' {gatewayId} -> gatewayId) (\s@AssociateRouteTable' {} a -> s {gatewayId = a} :: AssociateRouteTable)
+
+-- | The ID of the subnet.
+associateRouteTable_subnetId :: Lens.Lens' AssociateRouteTable (Prelude.Maybe Prelude.Text)
+associateRouteTable_subnetId = Lens.lens (\AssociateRouteTable' {subnetId} -> subnetId) (\s@AssociateRouteTable' {} a -> s {subnetId = a} :: AssociateRouteTable)
+
+-- | The ID of the route table.
+associateRouteTable_routeTableId :: Lens.Lens' AssociateRouteTable Prelude.Text
+associateRouteTable_routeTableId = Lens.lens (\AssociateRouteTable' {routeTableId} -> routeTableId) (\s@AssociateRouteTable' {} a -> s {routeTableId = a} :: AssociateRouteTable)
+
+instance Core.AWSRequest AssociateRouteTable where
+  type
+    AWSResponse AssociateRouteTable =
+      AssociateRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateRouteTableResponse'
+            Prelude.<$> (x Data..@? "associationId")
+            Prelude.<*> (x Data..@? "associationState")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateRouteTable where
+  hashWithSalt _salt AssociateRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData AssociateRouteTable where
+  rnf AssociateRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders AssociateRouteTable where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateRouteTable where
+  toQuery AssociateRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssociateRouteTable" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GatewayId" Data.=: gatewayId,
+        "SubnetId" Data.=: subnetId,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newAssociateRouteTableResponse' smart constructor.
+data AssociateRouteTableResponse = AssociateRouteTableResponse'
+  { -- | The route table association ID. This ID is required for disassociating
+    -- the route table.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the association.
+    associationState :: Prelude.Maybe RouteTableAssociationState,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'associateRouteTableResponse_associationId' - The route table association ID. This ID is required for disassociating
+-- the route table.
+--
+-- 'associationState', 'associateRouteTableResponse_associationState' - The state of the association.
+--
+-- 'httpStatus', 'associateRouteTableResponse_httpStatus' - The response's http status code.
+newAssociateRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateRouteTableResponse
+newAssociateRouteTableResponse pHttpStatus_ =
+  AssociateRouteTableResponse'
+    { associationId =
+        Prelude.Nothing,
+      associationState = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The route table association ID. This ID is required for disassociating
+-- the route table.
+associateRouteTableResponse_associationId :: Lens.Lens' AssociateRouteTableResponse (Prelude.Maybe Prelude.Text)
+associateRouteTableResponse_associationId = Lens.lens (\AssociateRouteTableResponse' {associationId} -> associationId) (\s@AssociateRouteTableResponse' {} a -> s {associationId = a} :: AssociateRouteTableResponse)
+
+-- | The state of the association.
+associateRouteTableResponse_associationState :: Lens.Lens' AssociateRouteTableResponse (Prelude.Maybe RouteTableAssociationState)
+associateRouteTableResponse_associationState = Lens.lens (\AssociateRouteTableResponse' {associationState} -> associationState) (\s@AssociateRouteTableResponse' {} a -> s {associationState = a} :: AssociateRouteTableResponse)
+
+-- | The response's http status code.
+associateRouteTableResponse_httpStatus :: Lens.Lens' AssociateRouteTableResponse Prelude.Int
+associateRouteTableResponse_httpStatus = Lens.lens (\AssociateRouteTableResponse' {httpStatus} -> httpStatus) (\s@AssociateRouteTableResponse' {} a -> s {httpStatus = a} :: AssociateRouteTableResponse)
+
+instance Prelude.NFData AssociateRouteTableResponse where
+  rnf AssociateRouteTableResponse' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf associationState
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateSubnetCidrBlock.hs b/gen/Amazonka/EC2/AssociateSubnetCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateSubnetCidrBlock.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateSubnetCidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a CIDR block with your subnet. You can only associate a
+-- single IPv6 CIDR block with your subnet. An IPv6 CIDR block must have a
+-- prefix length of \/64.
+module Amazonka.EC2.AssociateSubnetCidrBlock
+  ( -- * Creating a Request
+    AssociateSubnetCidrBlock (..),
+    newAssociateSubnetCidrBlock,
+
+    -- * Request Lenses
+    associateSubnetCidrBlock_ipv6CidrBlock,
+    associateSubnetCidrBlock_subnetId,
+
+    -- * Destructuring the Response
+    AssociateSubnetCidrBlockResponse (..),
+    newAssociateSubnetCidrBlockResponse,
+
+    -- * Response Lenses
+    associateSubnetCidrBlockResponse_ipv6CidrBlockAssociation,
+    associateSubnetCidrBlockResponse_subnetId,
+    associateSubnetCidrBlockResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateSubnetCidrBlock' smart constructor.
+data AssociateSubnetCidrBlock = AssociateSubnetCidrBlock'
+  { -- | The IPv6 CIDR block for your subnet. The subnet must have a \/64 prefix
+    -- length.
+    ipv6CidrBlock :: Prelude.Text,
+    -- | The ID of your subnet.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSubnetCidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6CidrBlock', 'associateSubnetCidrBlock_ipv6CidrBlock' - The IPv6 CIDR block for your subnet. The subnet must have a \/64 prefix
+-- length.
+--
+-- 'subnetId', 'associateSubnetCidrBlock_subnetId' - The ID of your subnet.
+newAssociateSubnetCidrBlock ::
+  -- | 'ipv6CidrBlock'
+  Prelude.Text ->
+  -- | 'subnetId'
+  Prelude.Text ->
+  AssociateSubnetCidrBlock
+newAssociateSubnetCidrBlock
+  pIpv6CidrBlock_
+  pSubnetId_ =
+    AssociateSubnetCidrBlock'
+      { ipv6CidrBlock =
+          pIpv6CidrBlock_,
+        subnetId = pSubnetId_
+      }
+
+-- | The IPv6 CIDR block for your subnet. The subnet must have a \/64 prefix
+-- length.
+associateSubnetCidrBlock_ipv6CidrBlock :: Lens.Lens' AssociateSubnetCidrBlock Prelude.Text
+associateSubnetCidrBlock_ipv6CidrBlock = Lens.lens (\AssociateSubnetCidrBlock' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@AssociateSubnetCidrBlock' {} a -> s {ipv6CidrBlock = a} :: AssociateSubnetCidrBlock)
+
+-- | The ID of your subnet.
+associateSubnetCidrBlock_subnetId :: Lens.Lens' AssociateSubnetCidrBlock Prelude.Text
+associateSubnetCidrBlock_subnetId = Lens.lens (\AssociateSubnetCidrBlock' {subnetId} -> subnetId) (\s@AssociateSubnetCidrBlock' {} a -> s {subnetId = a} :: AssociateSubnetCidrBlock)
+
+instance Core.AWSRequest AssociateSubnetCidrBlock where
+  type
+    AWSResponse AssociateSubnetCidrBlock =
+      AssociateSubnetCidrBlockResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateSubnetCidrBlockResponse'
+            Prelude.<$> (x Data..@? "ipv6CidrBlockAssociation")
+            Prelude.<*> (x Data..@? "subnetId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateSubnetCidrBlock where
+  hashWithSalt _salt AssociateSubnetCidrBlock' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData AssociateSubnetCidrBlock where
+  rnf AssociateSubnetCidrBlock' {..} =
+    Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance Data.ToHeaders AssociateSubnetCidrBlock where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateSubnetCidrBlock where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateSubnetCidrBlock where
+  toQuery AssociateSubnetCidrBlock' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssociateSubnetCidrBlock" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Ipv6CidrBlock" Data.=: ipv6CidrBlock,
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newAssociateSubnetCidrBlockResponse' smart constructor.
+data AssociateSubnetCidrBlockResponse = AssociateSubnetCidrBlockResponse'
+  { -- | Information about the IPv6 association.
+    ipv6CidrBlockAssociation :: Prelude.Maybe SubnetIpv6CidrBlockAssociation,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateSubnetCidrBlockResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6CidrBlockAssociation', 'associateSubnetCidrBlockResponse_ipv6CidrBlockAssociation' - Information about the IPv6 association.
+--
+-- 'subnetId', 'associateSubnetCidrBlockResponse_subnetId' - The ID of the subnet.
+--
+-- 'httpStatus', 'associateSubnetCidrBlockResponse_httpStatus' - The response's http status code.
+newAssociateSubnetCidrBlockResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateSubnetCidrBlockResponse
+newAssociateSubnetCidrBlockResponse pHttpStatus_ =
+  AssociateSubnetCidrBlockResponse'
+    { ipv6CidrBlockAssociation =
+        Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPv6 association.
+associateSubnetCidrBlockResponse_ipv6CidrBlockAssociation :: Lens.Lens' AssociateSubnetCidrBlockResponse (Prelude.Maybe SubnetIpv6CidrBlockAssociation)
+associateSubnetCidrBlockResponse_ipv6CidrBlockAssociation = Lens.lens (\AssociateSubnetCidrBlockResponse' {ipv6CidrBlockAssociation} -> ipv6CidrBlockAssociation) (\s@AssociateSubnetCidrBlockResponse' {} a -> s {ipv6CidrBlockAssociation = a} :: AssociateSubnetCidrBlockResponse)
+
+-- | The ID of the subnet.
+associateSubnetCidrBlockResponse_subnetId :: Lens.Lens' AssociateSubnetCidrBlockResponse (Prelude.Maybe Prelude.Text)
+associateSubnetCidrBlockResponse_subnetId = Lens.lens (\AssociateSubnetCidrBlockResponse' {subnetId} -> subnetId) (\s@AssociateSubnetCidrBlockResponse' {} a -> s {subnetId = a} :: AssociateSubnetCidrBlockResponse)
+
+-- | The response's http status code.
+associateSubnetCidrBlockResponse_httpStatus :: Lens.Lens' AssociateSubnetCidrBlockResponse Prelude.Int
+associateSubnetCidrBlockResponse_httpStatus = Lens.lens (\AssociateSubnetCidrBlockResponse' {httpStatus} -> httpStatus) (\s@AssociateSubnetCidrBlockResponse' {} a -> s {httpStatus = a} :: AssociateSubnetCidrBlockResponse)
+
+instance
+  Prelude.NFData
+    AssociateSubnetCidrBlockResponse
+  where
+  rnf AssociateSubnetCidrBlockResponse' {..} =
+    Prelude.rnf ipv6CidrBlockAssociation
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateTransitGatewayMulticastDomain.hs b/gen/Amazonka/EC2/AssociateTransitGatewayMulticastDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateTransitGatewayMulticastDomain.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateTransitGatewayMulticastDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified subnets and transit gateway attachments with
+-- the specified transit gateway multicast domain.
+--
+-- The transit gateway attachment must be in the available state before you
+-- can add a resource. Use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGatewayAttachments.html DescribeTransitGatewayAttachments>
+-- to see the state of the attachment.
+module Amazonka.EC2.AssociateTransitGatewayMulticastDomain
+  ( -- * Creating a Request
+    AssociateTransitGatewayMulticastDomain (..),
+    newAssociateTransitGatewayMulticastDomain,
+
+    -- * Request Lenses
+    associateTransitGatewayMulticastDomain_dryRun,
+    associateTransitGatewayMulticastDomain_subnetIds,
+    associateTransitGatewayMulticastDomain_transitGatewayAttachmentId,
+    associateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    AssociateTransitGatewayMulticastDomainResponse (..),
+    newAssociateTransitGatewayMulticastDomainResponse,
+
+    -- * Response Lenses
+    associateTransitGatewayMulticastDomainResponse_associations,
+    associateTransitGatewayMulticastDomainResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateTransitGatewayMulticastDomain' smart constructor.
+data AssociateTransitGatewayMulticastDomain = AssociateTransitGatewayMulticastDomain'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the subnets to associate with the transit gateway multicast
+    -- domain.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway attachment to associate with the transit
+    -- gateway multicast domain.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTransitGatewayMulticastDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'associateTransitGatewayMulticastDomain_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'subnetIds', 'associateTransitGatewayMulticastDomain_subnetIds' - The IDs of the subnets to associate with the transit gateway multicast
+-- domain.
+--
+-- 'transitGatewayAttachmentId', 'associateTransitGatewayMulticastDomain_transitGatewayAttachmentId' - The ID of the transit gateway attachment to associate with the transit
+-- gateway multicast domain.
+--
+-- 'transitGatewayMulticastDomainId', 'associateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newAssociateTransitGatewayMulticastDomain ::
+  AssociateTransitGatewayMulticastDomain
+newAssociateTransitGatewayMulticastDomain =
+  AssociateTransitGatewayMulticastDomain'
+    { dryRun =
+        Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateTransitGatewayMulticastDomain_dryRun :: Lens.Lens' AssociateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Bool)
+associateTransitGatewayMulticastDomain_dryRun = Lens.lens (\AssociateTransitGatewayMulticastDomain' {dryRun} -> dryRun) (\s@AssociateTransitGatewayMulticastDomain' {} a -> s {dryRun = a} :: AssociateTransitGatewayMulticastDomain)
+
+-- | The IDs of the subnets to associate with the transit gateway multicast
+-- domain.
+associateTransitGatewayMulticastDomain_subnetIds :: Lens.Lens' AssociateTransitGatewayMulticastDomain (Prelude.Maybe [Prelude.Text])
+associateTransitGatewayMulticastDomain_subnetIds = Lens.lens (\AssociateTransitGatewayMulticastDomain' {subnetIds} -> subnetIds) (\s@AssociateTransitGatewayMulticastDomain' {} a -> s {subnetIds = a} :: AssociateTransitGatewayMulticastDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway attachment to associate with the transit
+-- gateway multicast domain.
+associateTransitGatewayMulticastDomain_transitGatewayAttachmentId :: Lens.Lens' AssociateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+associateTransitGatewayMulticastDomain_transitGatewayAttachmentId = Lens.lens (\AssociateTransitGatewayMulticastDomain' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@AssociateTransitGatewayMulticastDomain' {} a -> s {transitGatewayAttachmentId = a} :: AssociateTransitGatewayMulticastDomain)
+
+-- | The ID of the transit gateway multicast domain.
+associateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId :: Lens.Lens' AssociateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+associateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId = Lens.lens (\AssociateTransitGatewayMulticastDomain' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@AssociateTransitGatewayMulticastDomain' {} a -> s {transitGatewayMulticastDomainId = a} :: AssociateTransitGatewayMulticastDomain)
+
+instance
+  Core.AWSRequest
+    AssociateTransitGatewayMulticastDomain
+  where
+  type
+    AWSResponse
+      AssociateTransitGatewayMulticastDomain =
+      AssociateTransitGatewayMulticastDomainResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateTransitGatewayMulticastDomainResponse'
+            Prelude.<$> (x Data..@? "associations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateTransitGatewayMulticastDomain
+  where
+  hashWithSalt
+    _salt
+    AssociateTransitGatewayMulticastDomain' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` subnetIds
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    AssociateTransitGatewayMulticastDomain
+  where
+  rnf AssociateTransitGatewayMulticastDomain' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    AssociateTransitGatewayMulticastDomain
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AssociateTransitGatewayMulticastDomain
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AssociateTransitGatewayMulticastDomain
+  where
+  toQuery AssociateTransitGatewayMulticastDomain' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateTransitGatewayMulticastDomain" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "SubnetIds" Prelude.<$> subnetIds),
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId,
+        "TransitGatewayMulticastDomainId"
+          Data.=: transitGatewayMulticastDomainId
+      ]
+
+-- | /See:/ 'newAssociateTransitGatewayMulticastDomainResponse' smart constructor.
+data AssociateTransitGatewayMulticastDomainResponse = AssociateTransitGatewayMulticastDomainResponse'
+  { -- | Information about the transit gateway multicast domain associations.
+    associations :: Prelude.Maybe TransitGatewayMulticastDomainAssociations,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTransitGatewayMulticastDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'associateTransitGatewayMulticastDomainResponse_associations' - Information about the transit gateway multicast domain associations.
+--
+-- 'httpStatus', 'associateTransitGatewayMulticastDomainResponse_httpStatus' - The response's http status code.
+newAssociateTransitGatewayMulticastDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateTransitGatewayMulticastDomainResponse
+newAssociateTransitGatewayMulticastDomainResponse
+  pHttpStatus_ =
+    AssociateTransitGatewayMulticastDomainResponse'
+      { associations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the transit gateway multicast domain associations.
+associateTransitGatewayMulticastDomainResponse_associations :: Lens.Lens' AssociateTransitGatewayMulticastDomainResponse (Prelude.Maybe TransitGatewayMulticastDomainAssociations)
+associateTransitGatewayMulticastDomainResponse_associations = Lens.lens (\AssociateTransitGatewayMulticastDomainResponse' {associations} -> associations) (\s@AssociateTransitGatewayMulticastDomainResponse' {} a -> s {associations = a} :: AssociateTransitGatewayMulticastDomainResponse)
+
+-- | The response's http status code.
+associateTransitGatewayMulticastDomainResponse_httpStatus :: Lens.Lens' AssociateTransitGatewayMulticastDomainResponse Prelude.Int
+associateTransitGatewayMulticastDomainResponse_httpStatus = Lens.lens (\AssociateTransitGatewayMulticastDomainResponse' {httpStatus} -> httpStatus) (\s@AssociateTransitGatewayMulticastDomainResponse' {} a -> s {httpStatus = a} :: AssociateTransitGatewayMulticastDomainResponse)
+
+instance
+  Prelude.NFData
+    AssociateTransitGatewayMulticastDomainResponse
+  where
+  rnf
+    AssociateTransitGatewayMulticastDomainResponse' {..} =
+      Prelude.rnf associations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateTransitGatewayPolicyTable.hs b/gen/Amazonka/EC2/AssociateTransitGatewayPolicyTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateTransitGatewayPolicyTable.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateTransitGatewayPolicyTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified transit gateway attachment with a transit
+-- gateway policy table.
+module Amazonka.EC2.AssociateTransitGatewayPolicyTable
+  ( -- * Creating a Request
+    AssociateTransitGatewayPolicyTable (..),
+    newAssociateTransitGatewayPolicyTable,
+
+    -- * Request Lenses
+    associateTransitGatewayPolicyTable_dryRun,
+    associateTransitGatewayPolicyTable_transitGatewayPolicyTableId,
+    associateTransitGatewayPolicyTable_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    AssociateTransitGatewayPolicyTableResponse (..),
+    newAssociateTransitGatewayPolicyTableResponse,
+
+    -- * Response Lenses
+    associateTransitGatewayPolicyTableResponse_association,
+    associateTransitGatewayPolicyTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateTransitGatewayPolicyTable' smart constructor.
+data AssociateTransitGatewayPolicyTable = AssociateTransitGatewayPolicyTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway policy table to associate with the transit
+    -- gateway attachment.
+    transitGatewayPolicyTableId :: Prelude.Text,
+    -- | The ID of the transit gateway attachment to associate with the policy
+    -- table.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTransitGatewayPolicyTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'associateTransitGatewayPolicyTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayPolicyTableId', 'associateTransitGatewayPolicyTable_transitGatewayPolicyTableId' - The ID of the transit gateway policy table to associate with the transit
+-- gateway attachment.
+--
+-- 'transitGatewayAttachmentId', 'associateTransitGatewayPolicyTable_transitGatewayAttachmentId' - The ID of the transit gateway attachment to associate with the policy
+-- table.
+newAssociateTransitGatewayPolicyTable ::
+  -- | 'transitGatewayPolicyTableId'
+  Prelude.Text ->
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  AssociateTransitGatewayPolicyTable
+newAssociateTransitGatewayPolicyTable
+  pTransitGatewayPolicyTableId_
+  pTransitGatewayAttachmentId_ =
+    AssociateTransitGatewayPolicyTable'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayPolicyTableId =
+          pTransitGatewayPolicyTableId_,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateTransitGatewayPolicyTable_dryRun :: Lens.Lens' AssociateTransitGatewayPolicyTable (Prelude.Maybe Prelude.Bool)
+associateTransitGatewayPolicyTable_dryRun = Lens.lens (\AssociateTransitGatewayPolicyTable' {dryRun} -> dryRun) (\s@AssociateTransitGatewayPolicyTable' {} a -> s {dryRun = a} :: AssociateTransitGatewayPolicyTable)
+
+-- | The ID of the transit gateway policy table to associate with the transit
+-- gateway attachment.
+associateTransitGatewayPolicyTable_transitGatewayPolicyTableId :: Lens.Lens' AssociateTransitGatewayPolicyTable Prelude.Text
+associateTransitGatewayPolicyTable_transitGatewayPolicyTableId = Lens.lens (\AssociateTransitGatewayPolicyTable' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@AssociateTransitGatewayPolicyTable' {} a -> s {transitGatewayPolicyTableId = a} :: AssociateTransitGatewayPolicyTable)
+
+-- | The ID of the transit gateway attachment to associate with the policy
+-- table.
+associateTransitGatewayPolicyTable_transitGatewayAttachmentId :: Lens.Lens' AssociateTransitGatewayPolicyTable Prelude.Text
+associateTransitGatewayPolicyTable_transitGatewayAttachmentId = Lens.lens (\AssociateTransitGatewayPolicyTable' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@AssociateTransitGatewayPolicyTable' {} a -> s {transitGatewayAttachmentId = a} :: AssociateTransitGatewayPolicyTable)
+
+instance
+  Core.AWSRequest
+    AssociateTransitGatewayPolicyTable
+  where
+  type
+    AWSResponse AssociateTransitGatewayPolicyTable =
+      AssociateTransitGatewayPolicyTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateTransitGatewayPolicyTableResponse'
+            Prelude.<$> (x Data..@? "association")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateTransitGatewayPolicyTable
+  where
+  hashWithSalt
+    _salt
+    AssociateTransitGatewayPolicyTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayPolicyTableId
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    AssociateTransitGatewayPolicyTable
+  where
+  rnf AssociateTransitGatewayPolicyTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    AssociateTransitGatewayPolicyTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AssociateTransitGatewayPolicyTable
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AssociateTransitGatewayPolicyTable
+  where
+  toQuery AssociateTransitGatewayPolicyTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateTransitGatewayPolicyTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayPolicyTableId"
+          Data.=: transitGatewayPolicyTableId,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newAssociateTransitGatewayPolicyTableResponse' smart constructor.
+data AssociateTransitGatewayPolicyTableResponse = AssociateTransitGatewayPolicyTableResponse'
+  { -- | Describes the association of a transit gateway and a transit gateway
+    -- policy table.
+    association :: Prelude.Maybe TransitGatewayPolicyTableAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTransitGatewayPolicyTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'associateTransitGatewayPolicyTableResponse_association' - Describes the association of a transit gateway and a transit gateway
+-- policy table.
+--
+-- 'httpStatus', 'associateTransitGatewayPolicyTableResponse_httpStatus' - The response's http status code.
+newAssociateTransitGatewayPolicyTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateTransitGatewayPolicyTableResponse
+newAssociateTransitGatewayPolicyTableResponse
+  pHttpStatus_ =
+    AssociateTransitGatewayPolicyTableResponse'
+      { association =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Describes the association of a transit gateway and a transit gateway
+-- policy table.
+associateTransitGatewayPolicyTableResponse_association :: Lens.Lens' AssociateTransitGatewayPolicyTableResponse (Prelude.Maybe TransitGatewayPolicyTableAssociation)
+associateTransitGatewayPolicyTableResponse_association = Lens.lens (\AssociateTransitGatewayPolicyTableResponse' {association} -> association) (\s@AssociateTransitGatewayPolicyTableResponse' {} a -> s {association = a} :: AssociateTransitGatewayPolicyTableResponse)
+
+-- | The response's http status code.
+associateTransitGatewayPolicyTableResponse_httpStatus :: Lens.Lens' AssociateTransitGatewayPolicyTableResponse Prelude.Int
+associateTransitGatewayPolicyTableResponse_httpStatus = Lens.lens (\AssociateTransitGatewayPolicyTableResponse' {httpStatus} -> httpStatus) (\s@AssociateTransitGatewayPolicyTableResponse' {} a -> s {httpStatus = a} :: AssociateTransitGatewayPolicyTableResponse)
+
+instance
+  Prelude.NFData
+    AssociateTransitGatewayPolicyTableResponse
+  where
+  rnf AssociateTransitGatewayPolicyTableResponse' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateTransitGatewayRouteTable.hs b/gen/Amazonka/EC2/AssociateTransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateTransitGatewayRouteTable.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateTransitGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified attachment with the specified transit gateway
+-- route table. You can associate only one route table with an attachment.
+module Amazonka.EC2.AssociateTransitGatewayRouteTable
+  ( -- * Creating a Request
+    AssociateTransitGatewayRouteTable (..),
+    newAssociateTransitGatewayRouteTable,
+
+    -- * Request Lenses
+    associateTransitGatewayRouteTable_dryRun,
+    associateTransitGatewayRouteTable_transitGatewayRouteTableId,
+    associateTransitGatewayRouteTable_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    AssociateTransitGatewayRouteTableResponse (..),
+    newAssociateTransitGatewayRouteTableResponse,
+
+    -- * Response Lenses
+    associateTransitGatewayRouteTableResponse_association,
+    associateTransitGatewayRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateTransitGatewayRouteTable' smart constructor.
+data AssociateTransitGatewayRouteTable = AssociateTransitGatewayRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTransitGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'associateTransitGatewayRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayRouteTableId', 'associateTransitGatewayRouteTable_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'transitGatewayAttachmentId', 'associateTransitGatewayRouteTable_transitGatewayAttachmentId' - The ID of the attachment.
+newAssociateTransitGatewayRouteTable ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  AssociateTransitGatewayRouteTable
+newAssociateTransitGatewayRouteTable
+  pTransitGatewayRouteTableId_
+  pTransitGatewayAttachmentId_ =
+    AssociateTransitGatewayRouteTable'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateTransitGatewayRouteTable_dryRun :: Lens.Lens' AssociateTransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+associateTransitGatewayRouteTable_dryRun = Lens.lens (\AssociateTransitGatewayRouteTable' {dryRun} -> dryRun) (\s@AssociateTransitGatewayRouteTable' {} a -> s {dryRun = a} :: AssociateTransitGatewayRouteTable)
+
+-- | The ID of the transit gateway route table.
+associateTransitGatewayRouteTable_transitGatewayRouteTableId :: Lens.Lens' AssociateTransitGatewayRouteTable Prelude.Text
+associateTransitGatewayRouteTable_transitGatewayRouteTableId = Lens.lens (\AssociateTransitGatewayRouteTable' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@AssociateTransitGatewayRouteTable' {} a -> s {transitGatewayRouteTableId = a} :: AssociateTransitGatewayRouteTable)
+
+-- | The ID of the attachment.
+associateTransitGatewayRouteTable_transitGatewayAttachmentId :: Lens.Lens' AssociateTransitGatewayRouteTable Prelude.Text
+associateTransitGatewayRouteTable_transitGatewayAttachmentId = Lens.lens (\AssociateTransitGatewayRouteTable' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@AssociateTransitGatewayRouteTable' {} a -> s {transitGatewayAttachmentId = a} :: AssociateTransitGatewayRouteTable)
+
+instance
+  Core.AWSRequest
+    AssociateTransitGatewayRouteTable
+  where
+  type
+    AWSResponse AssociateTransitGatewayRouteTable =
+      AssociateTransitGatewayRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateTransitGatewayRouteTableResponse'
+            Prelude.<$> (x Data..@? "association")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateTransitGatewayRouteTable
+  where
+  hashWithSalt
+    _salt
+    AssociateTransitGatewayRouteTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    AssociateTransitGatewayRouteTable
+  where
+  rnf AssociateTransitGatewayRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    AssociateTransitGatewayRouteTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AssociateTransitGatewayRouteTable
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AssociateTransitGatewayRouteTable
+  where
+  toQuery AssociateTransitGatewayRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AssociateTransitGatewayRouteTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newAssociateTransitGatewayRouteTableResponse' smart constructor.
+data AssociateTransitGatewayRouteTableResponse = AssociateTransitGatewayRouteTableResponse'
+  { -- | The ID of the association.
+    association :: Prelude.Maybe TransitGatewayAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTransitGatewayRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'associateTransitGatewayRouteTableResponse_association' - The ID of the association.
+--
+-- 'httpStatus', 'associateTransitGatewayRouteTableResponse_httpStatus' - The response's http status code.
+newAssociateTransitGatewayRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateTransitGatewayRouteTableResponse
+newAssociateTransitGatewayRouteTableResponse
+  pHttpStatus_ =
+    AssociateTransitGatewayRouteTableResponse'
+      { association =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the association.
+associateTransitGatewayRouteTableResponse_association :: Lens.Lens' AssociateTransitGatewayRouteTableResponse (Prelude.Maybe TransitGatewayAssociation)
+associateTransitGatewayRouteTableResponse_association = Lens.lens (\AssociateTransitGatewayRouteTableResponse' {association} -> association) (\s@AssociateTransitGatewayRouteTableResponse' {} a -> s {association = a} :: AssociateTransitGatewayRouteTableResponse)
+
+-- | The response's http status code.
+associateTransitGatewayRouteTableResponse_httpStatus :: Lens.Lens' AssociateTransitGatewayRouteTableResponse Prelude.Int
+associateTransitGatewayRouteTableResponse_httpStatus = Lens.lens (\AssociateTransitGatewayRouteTableResponse' {httpStatus} -> httpStatus) (\s@AssociateTransitGatewayRouteTableResponse' {} a -> s {httpStatus = a} :: AssociateTransitGatewayRouteTableResponse)
+
+instance
+  Prelude.NFData
+    AssociateTransitGatewayRouteTableResponse
+  where
+  rnf AssociateTransitGatewayRouteTableResponse' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateTrunkInterface.hs b/gen/Amazonka/EC2/AssociateTrunkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateTrunkInterface.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateTrunkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This API action is currently in __limited preview only__. If you are
+-- interested in using this feature, contact your account manager.
+--
+-- Associates a branch network interface with a trunk network interface.
+--
+-- Before you create the association, run the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html create-network-interface>
+-- command and set @--interface-type@ to @trunk@. You must also create a
+-- network interface for each branch network interface that you want to
+-- associate with the trunk network interface.
+module Amazonka.EC2.AssociateTrunkInterface
+  ( -- * Creating a Request
+    AssociateTrunkInterface (..),
+    newAssociateTrunkInterface,
+
+    -- * Request Lenses
+    associateTrunkInterface_clientToken,
+    associateTrunkInterface_dryRun,
+    associateTrunkInterface_greKey,
+    associateTrunkInterface_vlanId,
+    associateTrunkInterface_branchInterfaceId,
+    associateTrunkInterface_trunkInterfaceId,
+
+    -- * Destructuring the Response
+    AssociateTrunkInterfaceResponse (..),
+    newAssociateTrunkInterfaceResponse,
+
+    -- * Response Lenses
+    associateTrunkInterfaceResponse_clientToken,
+    associateTrunkInterfaceResponse_interfaceAssociation,
+    associateTrunkInterfaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateTrunkInterface' smart constructor.
+data AssociateTrunkInterface = AssociateTrunkInterface'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The application key. This applies to the GRE protocol.
+    greKey :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the VLAN. This applies to the VLAN protocol.
+    vlanId :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the branch network interface.
+    branchInterfaceId :: Prelude.Text,
+    -- | The ID of the trunk network interface.
+    trunkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTrunkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'associateTrunkInterface_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+--
+-- 'dryRun', 'associateTrunkInterface_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'greKey', 'associateTrunkInterface_greKey' - The application key. This applies to the GRE protocol.
+--
+-- 'vlanId', 'associateTrunkInterface_vlanId' - The ID of the VLAN. This applies to the VLAN protocol.
+--
+-- 'branchInterfaceId', 'associateTrunkInterface_branchInterfaceId' - The ID of the branch network interface.
+--
+-- 'trunkInterfaceId', 'associateTrunkInterface_trunkInterfaceId' - The ID of the trunk network interface.
+newAssociateTrunkInterface ::
+  -- | 'branchInterfaceId'
+  Prelude.Text ->
+  -- | 'trunkInterfaceId'
+  Prelude.Text ->
+  AssociateTrunkInterface
+newAssociateTrunkInterface
+  pBranchInterfaceId_
+  pTrunkInterfaceId_ =
+    AssociateTrunkInterface'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        greKey = Prelude.Nothing,
+        vlanId = Prelude.Nothing,
+        branchInterfaceId = pBranchInterfaceId_,
+        trunkInterfaceId = pTrunkInterfaceId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+associateTrunkInterface_clientToken :: Lens.Lens' AssociateTrunkInterface (Prelude.Maybe Prelude.Text)
+associateTrunkInterface_clientToken = Lens.lens (\AssociateTrunkInterface' {clientToken} -> clientToken) (\s@AssociateTrunkInterface' {} a -> s {clientToken = a} :: AssociateTrunkInterface)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+associateTrunkInterface_dryRun :: Lens.Lens' AssociateTrunkInterface (Prelude.Maybe Prelude.Bool)
+associateTrunkInterface_dryRun = Lens.lens (\AssociateTrunkInterface' {dryRun} -> dryRun) (\s@AssociateTrunkInterface' {} a -> s {dryRun = a} :: AssociateTrunkInterface)
+
+-- | The application key. This applies to the GRE protocol.
+associateTrunkInterface_greKey :: Lens.Lens' AssociateTrunkInterface (Prelude.Maybe Prelude.Int)
+associateTrunkInterface_greKey = Lens.lens (\AssociateTrunkInterface' {greKey} -> greKey) (\s@AssociateTrunkInterface' {} a -> s {greKey = a} :: AssociateTrunkInterface)
+
+-- | The ID of the VLAN. This applies to the VLAN protocol.
+associateTrunkInterface_vlanId :: Lens.Lens' AssociateTrunkInterface (Prelude.Maybe Prelude.Int)
+associateTrunkInterface_vlanId = Lens.lens (\AssociateTrunkInterface' {vlanId} -> vlanId) (\s@AssociateTrunkInterface' {} a -> s {vlanId = a} :: AssociateTrunkInterface)
+
+-- | The ID of the branch network interface.
+associateTrunkInterface_branchInterfaceId :: Lens.Lens' AssociateTrunkInterface Prelude.Text
+associateTrunkInterface_branchInterfaceId = Lens.lens (\AssociateTrunkInterface' {branchInterfaceId} -> branchInterfaceId) (\s@AssociateTrunkInterface' {} a -> s {branchInterfaceId = a} :: AssociateTrunkInterface)
+
+-- | The ID of the trunk network interface.
+associateTrunkInterface_trunkInterfaceId :: Lens.Lens' AssociateTrunkInterface Prelude.Text
+associateTrunkInterface_trunkInterfaceId = Lens.lens (\AssociateTrunkInterface' {trunkInterfaceId} -> trunkInterfaceId) (\s@AssociateTrunkInterface' {} a -> s {trunkInterfaceId = a} :: AssociateTrunkInterface)
+
+instance Core.AWSRequest AssociateTrunkInterface where
+  type
+    AWSResponse AssociateTrunkInterface =
+      AssociateTrunkInterfaceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateTrunkInterfaceResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "interfaceAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateTrunkInterface where
+  hashWithSalt _salt AssociateTrunkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` greKey
+      `Prelude.hashWithSalt` vlanId
+      `Prelude.hashWithSalt` branchInterfaceId
+      `Prelude.hashWithSalt` trunkInterfaceId
+
+instance Prelude.NFData AssociateTrunkInterface where
+  rnf AssociateTrunkInterface' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf greKey
+      `Prelude.seq` Prelude.rnf vlanId
+      `Prelude.seq` Prelude.rnf branchInterfaceId
+      `Prelude.seq` Prelude.rnf trunkInterfaceId
+
+instance Data.ToHeaders AssociateTrunkInterface where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateTrunkInterface where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateTrunkInterface where
+  toQuery AssociateTrunkInterface' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssociateTrunkInterface" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "GreKey" Data.=: greKey,
+        "VlanId" Data.=: vlanId,
+        "BranchInterfaceId" Data.=: branchInterfaceId,
+        "TrunkInterfaceId" Data.=: trunkInterfaceId
+      ]
+
+-- | /See:/ 'newAssociateTrunkInterfaceResponse' smart constructor.
+data AssociateTrunkInterfaceResponse = AssociateTrunkInterfaceResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the association between the trunk network interface
+    -- and branch network interface.
+    interfaceAssociation :: Prelude.Maybe TrunkInterfaceAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateTrunkInterfaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'associateTrunkInterfaceResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+--
+-- 'interfaceAssociation', 'associateTrunkInterfaceResponse_interfaceAssociation' - Information about the association between the trunk network interface
+-- and branch network interface.
+--
+-- 'httpStatus', 'associateTrunkInterfaceResponse_httpStatus' - The response's http status code.
+newAssociateTrunkInterfaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateTrunkInterfaceResponse
+newAssociateTrunkInterfaceResponse pHttpStatus_ =
+  AssociateTrunkInterfaceResponse'
+    { clientToken =
+        Prelude.Nothing,
+      interfaceAssociation = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+associateTrunkInterfaceResponse_clientToken :: Lens.Lens' AssociateTrunkInterfaceResponse (Prelude.Maybe Prelude.Text)
+associateTrunkInterfaceResponse_clientToken = Lens.lens (\AssociateTrunkInterfaceResponse' {clientToken} -> clientToken) (\s@AssociateTrunkInterfaceResponse' {} a -> s {clientToken = a} :: AssociateTrunkInterfaceResponse)
+
+-- | Information about the association between the trunk network interface
+-- and branch network interface.
+associateTrunkInterfaceResponse_interfaceAssociation :: Lens.Lens' AssociateTrunkInterfaceResponse (Prelude.Maybe TrunkInterfaceAssociation)
+associateTrunkInterfaceResponse_interfaceAssociation = Lens.lens (\AssociateTrunkInterfaceResponse' {interfaceAssociation} -> interfaceAssociation) (\s@AssociateTrunkInterfaceResponse' {} a -> s {interfaceAssociation = a} :: AssociateTrunkInterfaceResponse)
+
+-- | The response's http status code.
+associateTrunkInterfaceResponse_httpStatus :: Lens.Lens' AssociateTrunkInterfaceResponse Prelude.Int
+associateTrunkInterfaceResponse_httpStatus = Lens.lens (\AssociateTrunkInterfaceResponse' {httpStatus} -> httpStatus) (\s@AssociateTrunkInterfaceResponse' {} a -> s {httpStatus = a} :: AssociateTrunkInterfaceResponse)
+
+instance
+  Prelude.NFData
+    AssociateTrunkInterfaceResponse
+  where
+  rnf AssociateTrunkInterfaceResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf interfaceAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AssociateVpcCidrBlock.hs b/gen/Amazonka/EC2/AssociateVpcCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AssociateVpcCidrBlock.hs
@@ -0,0 +1,395 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AssociateVpcCidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates a CIDR block with your VPC. You can associate a secondary
+-- IPv4 CIDR block, an Amazon-provided IPv6 CIDR block, or an IPv6 CIDR
+-- block from an IPv6 address pool that you provisioned through bring your
+-- own IP addresses
+-- (<https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html BYOIP>).
+-- The IPv6 CIDR block size is fixed at \/56.
+--
+-- You must specify one of the following in the request: an IPv4 CIDR
+-- block, an IPv6 pool, or an Amazon-provided IPv6 CIDR block.
+--
+-- For more information about associating CIDR blocks with your VPC and
+-- applicable restrictions, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing VPC and subnet sizing>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.AssociateVpcCidrBlock
+  ( -- * Creating a Request
+    AssociateVpcCidrBlock (..),
+    newAssociateVpcCidrBlock,
+
+    -- * Request Lenses
+    associateVpcCidrBlock_amazonProvidedIpv6CidrBlock,
+    associateVpcCidrBlock_cidrBlock,
+    associateVpcCidrBlock_ipv4IpamPoolId,
+    associateVpcCidrBlock_ipv4NetmaskLength,
+    associateVpcCidrBlock_ipv6CidrBlock,
+    associateVpcCidrBlock_ipv6CidrBlockNetworkBorderGroup,
+    associateVpcCidrBlock_ipv6IpamPoolId,
+    associateVpcCidrBlock_ipv6NetmaskLength,
+    associateVpcCidrBlock_ipv6Pool,
+    associateVpcCidrBlock_vpcId,
+
+    -- * Destructuring the Response
+    AssociateVpcCidrBlockResponse (..),
+    newAssociateVpcCidrBlockResponse,
+
+    -- * Response Lenses
+    associateVpcCidrBlockResponse_cidrBlockAssociation,
+    associateVpcCidrBlockResponse_ipv6CidrBlockAssociation,
+    associateVpcCidrBlockResponse_vpcId,
+    associateVpcCidrBlockResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateVpcCidrBlock' smart constructor.
+data AssociateVpcCidrBlock = AssociateVpcCidrBlock'
+  { -- | Requests an Amazon-provided IPv6 CIDR block with a \/56 prefix length
+    -- for the VPC. You cannot specify the range of IPv6 addresses, or the size
+    -- of the CIDR block.
+    amazonProvidedIpv6CidrBlock :: Prelude.Maybe Prelude.Bool,
+    -- | An IPv4 CIDR block to associate with the VPC.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more
+    -- information about Amazon VPC IP Address Manager (IPAM), see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv4IpamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The netmask length of the IPv4 CIDR you would like to associate from an
+    -- Amazon VPC IP Address Manager (IPAM) pool. For more information about
+    -- IPAM, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv4NetmaskLength :: Prelude.Maybe Prelude.Int,
+    -- | An IPv6 CIDR block from the IPv6 address pool. You must also specify
+    -- @Ipv6Pool@ in the request.
+    --
+    -- To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The name of the location from which we advertise the IPV6 CIDR block.
+    -- Use this parameter to limit the CIDR block to this location.
+    --
+    -- You must set @AmazonProvidedIpv6CidrBlock@ to @true@ to use this
+    -- parameter.
+    --
+    -- You can have one IPv6 CIDR block association per network border group.
+    ipv6CidrBlockNetworkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more
+    -- information about Amazon VPC IP Address Manager (IPAM), see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv6IpamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The netmask length of the IPv6 CIDR you would like to associate from an
+    -- Amazon VPC IP Address Manager (IPAM) pool. For more information about
+    -- IPAM, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv6NetmaskLength :: Prelude.Maybe Prelude.Int,
+    -- | The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
+    -- block.
+    ipv6Pool :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateVpcCidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amazonProvidedIpv6CidrBlock', 'associateVpcCidrBlock_amazonProvidedIpv6CidrBlock' - Requests an Amazon-provided IPv6 CIDR block with a \/56 prefix length
+-- for the VPC. You cannot specify the range of IPv6 addresses, or the size
+-- of the CIDR block.
+--
+-- 'cidrBlock', 'associateVpcCidrBlock_cidrBlock' - An IPv4 CIDR block to associate with the VPC.
+--
+-- 'ipv4IpamPoolId', 'associateVpcCidrBlock_ipv4IpamPoolId' - Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more
+-- information about Amazon VPC IP Address Manager (IPAM), see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv4NetmaskLength', 'associateVpcCidrBlock_ipv4NetmaskLength' - The netmask length of the IPv4 CIDR you would like to associate from an
+-- Amazon VPC IP Address Manager (IPAM) pool. For more information about
+-- IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv6CidrBlock', 'associateVpcCidrBlock_ipv6CidrBlock' - An IPv6 CIDR block from the IPv6 address pool. You must also specify
+-- @Ipv6Pool@ in the request.
+--
+-- To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
+--
+-- 'ipv6CidrBlockNetworkBorderGroup', 'associateVpcCidrBlock_ipv6CidrBlockNetworkBorderGroup' - The name of the location from which we advertise the IPV6 CIDR block.
+-- Use this parameter to limit the CIDR block to this location.
+--
+-- You must set @AmazonProvidedIpv6CidrBlock@ to @true@ to use this
+-- parameter.
+--
+-- You can have one IPv6 CIDR block association per network border group.
+--
+-- 'ipv6IpamPoolId', 'associateVpcCidrBlock_ipv6IpamPoolId' - Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more
+-- information about Amazon VPC IP Address Manager (IPAM), see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv6NetmaskLength', 'associateVpcCidrBlock_ipv6NetmaskLength' - The netmask length of the IPv6 CIDR you would like to associate from an
+-- Amazon VPC IP Address Manager (IPAM) pool. For more information about
+-- IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv6Pool', 'associateVpcCidrBlock_ipv6Pool' - The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
+-- block.
+--
+-- 'vpcId', 'associateVpcCidrBlock_vpcId' - The ID of the VPC.
+newAssociateVpcCidrBlock ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  AssociateVpcCidrBlock
+newAssociateVpcCidrBlock pVpcId_ =
+  AssociateVpcCidrBlock'
+    { amazonProvidedIpv6CidrBlock =
+        Prelude.Nothing,
+      cidrBlock = Prelude.Nothing,
+      ipv4IpamPoolId = Prelude.Nothing,
+      ipv4NetmaskLength = Prelude.Nothing,
+      ipv6CidrBlock = Prelude.Nothing,
+      ipv6CidrBlockNetworkBorderGroup = Prelude.Nothing,
+      ipv6IpamPoolId = Prelude.Nothing,
+      ipv6NetmaskLength = Prelude.Nothing,
+      ipv6Pool = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Requests an Amazon-provided IPv6 CIDR block with a \/56 prefix length
+-- for the VPC. You cannot specify the range of IPv6 addresses, or the size
+-- of the CIDR block.
+associateVpcCidrBlock_amazonProvidedIpv6CidrBlock :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Bool)
+associateVpcCidrBlock_amazonProvidedIpv6CidrBlock = Lens.lens (\AssociateVpcCidrBlock' {amazonProvidedIpv6CidrBlock} -> amazonProvidedIpv6CidrBlock) (\s@AssociateVpcCidrBlock' {} a -> s {amazonProvidedIpv6CidrBlock = a} :: AssociateVpcCidrBlock)
+
+-- | An IPv4 CIDR block to associate with the VPC.
+associateVpcCidrBlock_cidrBlock :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlock_cidrBlock = Lens.lens (\AssociateVpcCidrBlock' {cidrBlock} -> cidrBlock) (\s@AssociateVpcCidrBlock' {} a -> s {cidrBlock = a} :: AssociateVpcCidrBlock)
+
+-- | Associate a CIDR allocated from an IPv4 IPAM pool to a VPC. For more
+-- information about Amazon VPC IP Address Manager (IPAM), see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+associateVpcCidrBlock_ipv4IpamPoolId :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlock_ipv4IpamPoolId = Lens.lens (\AssociateVpcCidrBlock' {ipv4IpamPoolId} -> ipv4IpamPoolId) (\s@AssociateVpcCidrBlock' {} a -> s {ipv4IpamPoolId = a} :: AssociateVpcCidrBlock)
+
+-- | The netmask length of the IPv4 CIDR you would like to associate from an
+-- Amazon VPC IP Address Manager (IPAM) pool. For more information about
+-- IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+associateVpcCidrBlock_ipv4NetmaskLength :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Int)
+associateVpcCidrBlock_ipv4NetmaskLength = Lens.lens (\AssociateVpcCidrBlock' {ipv4NetmaskLength} -> ipv4NetmaskLength) (\s@AssociateVpcCidrBlock' {} a -> s {ipv4NetmaskLength = a} :: AssociateVpcCidrBlock)
+
+-- | An IPv6 CIDR block from the IPv6 address pool. You must also specify
+-- @Ipv6Pool@ in the request.
+--
+-- To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
+associateVpcCidrBlock_ipv6CidrBlock :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlock_ipv6CidrBlock = Lens.lens (\AssociateVpcCidrBlock' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@AssociateVpcCidrBlock' {} a -> s {ipv6CidrBlock = a} :: AssociateVpcCidrBlock)
+
+-- | The name of the location from which we advertise the IPV6 CIDR block.
+-- Use this parameter to limit the CIDR block to this location.
+--
+-- You must set @AmazonProvidedIpv6CidrBlock@ to @true@ to use this
+-- parameter.
+--
+-- You can have one IPv6 CIDR block association per network border group.
+associateVpcCidrBlock_ipv6CidrBlockNetworkBorderGroup :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlock_ipv6CidrBlockNetworkBorderGroup = Lens.lens (\AssociateVpcCidrBlock' {ipv6CidrBlockNetworkBorderGroup} -> ipv6CidrBlockNetworkBorderGroup) (\s@AssociateVpcCidrBlock' {} a -> s {ipv6CidrBlockNetworkBorderGroup = a} :: AssociateVpcCidrBlock)
+
+-- | Associates a CIDR allocated from an IPv6 IPAM pool to a VPC. For more
+-- information about Amazon VPC IP Address Manager (IPAM), see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+associateVpcCidrBlock_ipv6IpamPoolId :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlock_ipv6IpamPoolId = Lens.lens (\AssociateVpcCidrBlock' {ipv6IpamPoolId} -> ipv6IpamPoolId) (\s@AssociateVpcCidrBlock' {} a -> s {ipv6IpamPoolId = a} :: AssociateVpcCidrBlock)
+
+-- | The netmask length of the IPv6 CIDR you would like to associate from an
+-- Amazon VPC IP Address Manager (IPAM) pool. For more information about
+-- IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+associateVpcCidrBlock_ipv6NetmaskLength :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Int)
+associateVpcCidrBlock_ipv6NetmaskLength = Lens.lens (\AssociateVpcCidrBlock' {ipv6NetmaskLength} -> ipv6NetmaskLength) (\s@AssociateVpcCidrBlock' {} a -> s {ipv6NetmaskLength = a} :: AssociateVpcCidrBlock)
+
+-- | The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
+-- block.
+associateVpcCidrBlock_ipv6Pool :: Lens.Lens' AssociateVpcCidrBlock (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlock_ipv6Pool = Lens.lens (\AssociateVpcCidrBlock' {ipv6Pool} -> ipv6Pool) (\s@AssociateVpcCidrBlock' {} a -> s {ipv6Pool = a} :: AssociateVpcCidrBlock)
+
+-- | The ID of the VPC.
+associateVpcCidrBlock_vpcId :: Lens.Lens' AssociateVpcCidrBlock Prelude.Text
+associateVpcCidrBlock_vpcId = Lens.lens (\AssociateVpcCidrBlock' {vpcId} -> vpcId) (\s@AssociateVpcCidrBlock' {} a -> s {vpcId = a} :: AssociateVpcCidrBlock)
+
+instance Core.AWSRequest AssociateVpcCidrBlock where
+  type
+    AWSResponse AssociateVpcCidrBlock =
+      AssociateVpcCidrBlockResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AssociateVpcCidrBlockResponse'
+            Prelude.<$> (x Data..@? "cidrBlockAssociation")
+            Prelude.<*> (x Data..@? "ipv6CidrBlockAssociation")
+            Prelude.<*> (x Data..@? "vpcId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateVpcCidrBlock where
+  hashWithSalt _salt AssociateVpcCidrBlock' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonProvidedIpv6CidrBlock
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` ipv4IpamPoolId
+      `Prelude.hashWithSalt` ipv4NetmaskLength
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` ipv6CidrBlockNetworkBorderGroup
+      `Prelude.hashWithSalt` ipv6IpamPoolId
+      `Prelude.hashWithSalt` ipv6NetmaskLength
+      `Prelude.hashWithSalt` ipv6Pool
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData AssociateVpcCidrBlock where
+  rnf AssociateVpcCidrBlock' {..} =
+    Prelude.rnf amazonProvidedIpv6CidrBlock
+      `Prelude.seq` Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf ipv4IpamPoolId
+      `Prelude.seq` Prelude.rnf ipv4NetmaskLength
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockNetworkBorderGroup
+      `Prelude.seq` Prelude.rnf ipv6IpamPoolId
+      `Prelude.seq` Prelude.rnf ipv6NetmaskLength
+      `Prelude.seq` Prelude.rnf ipv6Pool
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders AssociateVpcCidrBlock where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AssociateVpcCidrBlock where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateVpcCidrBlock where
+  toQuery AssociateVpcCidrBlock' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AssociateVpcCidrBlock" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AmazonProvidedIpv6CidrBlock"
+          Data.=: amazonProvidedIpv6CidrBlock,
+        "CidrBlock" Data.=: cidrBlock,
+        "Ipv4IpamPoolId" Data.=: ipv4IpamPoolId,
+        "Ipv4NetmaskLength" Data.=: ipv4NetmaskLength,
+        "Ipv6CidrBlock" Data.=: ipv6CidrBlock,
+        "Ipv6CidrBlockNetworkBorderGroup"
+          Data.=: ipv6CidrBlockNetworkBorderGroup,
+        "Ipv6IpamPoolId" Data.=: ipv6IpamPoolId,
+        "Ipv6NetmaskLength" Data.=: ipv6NetmaskLength,
+        "Ipv6Pool" Data.=: ipv6Pool,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newAssociateVpcCidrBlockResponse' smart constructor.
+data AssociateVpcCidrBlockResponse = AssociateVpcCidrBlockResponse'
+  { -- | Information about the IPv4 CIDR block association.
+    cidrBlockAssociation :: Prelude.Maybe VpcCidrBlockAssociation,
+    -- | Information about the IPv6 CIDR block association.
+    ipv6CidrBlockAssociation :: Prelude.Maybe VpcIpv6CidrBlockAssociation,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateVpcCidrBlockResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlockAssociation', 'associateVpcCidrBlockResponse_cidrBlockAssociation' - Information about the IPv4 CIDR block association.
+--
+-- 'ipv6CidrBlockAssociation', 'associateVpcCidrBlockResponse_ipv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
+--
+-- 'vpcId', 'associateVpcCidrBlockResponse_vpcId' - The ID of the VPC.
+--
+-- 'httpStatus', 'associateVpcCidrBlockResponse_httpStatus' - The response's http status code.
+newAssociateVpcCidrBlockResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateVpcCidrBlockResponse
+newAssociateVpcCidrBlockResponse pHttpStatus_ =
+  AssociateVpcCidrBlockResponse'
+    { cidrBlockAssociation =
+        Prelude.Nothing,
+      ipv6CidrBlockAssociation = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPv4 CIDR block association.
+associateVpcCidrBlockResponse_cidrBlockAssociation :: Lens.Lens' AssociateVpcCidrBlockResponse (Prelude.Maybe VpcCidrBlockAssociation)
+associateVpcCidrBlockResponse_cidrBlockAssociation = Lens.lens (\AssociateVpcCidrBlockResponse' {cidrBlockAssociation} -> cidrBlockAssociation) (\s@AssociateVpcCidrBlockResponse' {} a -> s {cidrBlockAssociation = a} :: AssociateVpcCidrBlockResponse)
+
+-- | Information about the IPv6 CIDR block association.
+associateVpcCidrBlockResponse_ipv6CidrBlockAssociation :: Lens.Lens' AssociateVpcCidrBlockResponse (Prelude.Maybe VpcIpv6CidrBlockAssociation)
+associateVpcCidrBlockResponse_ipv6CidrBlockAssociation = Lens.lens (\AssociateVpcCidrBlockResponse' {ipv6CidrBlockAssociation} -> ipv6CidrBlockAssociation) (\s@AssociateVpcCidrBlockResponse' {} a -> s {ipv6CidrBlockAssociation = a} :: AssociateVpcCidrBlockResponse)
+
+-- | The ID of the VPC.
+associateVpcCidrBlockResponse_vpcId :: Lens.Lens' AssociateVpcCidrBlockResponse (Prelude.Maybe Prelude.Text)
+associateVpcCidrBlockResponse_vpcId = Lens.lens (\AssociateVpcCidrBlockResponse' {vpcId} -> vpcId) (\s@AssociateVpcCidrBlockResponse' {} a -> s {vpcId = a} :: AssociateVpcCidrBlockResponse)
+
+-- | The response's http status code.
+associateVpcCidrBlockResponse_httpStatus :: Lens.Lens' AssociateVpcCidrBlockResponse Prelude.Int
+associateVpcCidrBlockResponse_httpStatus = Lens.lens (\AssociateVpcCidrBlockResponse' {httpStatus} -> httpStatus) (\s@AssociateVpcCidrBlockResponse' {} a -> s {httpStatus = a} :: AssociateVpcCidrBlockResponse)
+
+instance Prelude.NFData AssociateVpcCidrBlockResponse where
+  rnf AssociateVpcCidrBlockResponse' {..} =
+    Prelude.rnf cidrBlockAssociation
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockAssociation
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AttachClassicLinkVpc.hs b/gen/Amazonka/EC2/AttachClassicLinkVpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AttachClassicLinkVpc.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AttachClassicLinkVpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Links an EC2-Classic instance to a ClassicLink-enabled VPC through one
+-- or more of the VPC\'s security groups. You cannot link an EC2-Classic
+-- instance to more than one VPC at a time. You can only link an instance
+-- that\'s in the @running@ state. An instance is automatically unlinked
+-- from a VPC when it\'s stopped - you can link it to the VPC again when
+-- you restart it.
+--
+-- After you\'ve linked an instance, you cannot change the VPC security
+-- groups that are associated with it. To change the security groups, you
+-- must first unlink the instance, and then link it again.
+--
+-- Linking your instance to a VPC is sometimes referred to as /attaching/
+-- your instance.
+module Amazonka.EC2.AttachClassicLinkVpc
+  ( -- * Creating a Request
+    AttachClassicLinkVpc (..),
+    newAttachClassicLinkVpc,
+
+    -- * Request Lenses
+    attachClassicLinkVpc_dryRun,
+    attachClassicLinkVpc_groups,
+    attachClassicLinkVpc_instanceId,
+    attachClassicLinkVpc_vpcId,
+
+    -- * Destructuring the Response
+    AttachClassicLinkVpcResponse (..),
+    newAttachClassicLinkVpcResponse,
+
+    -- * Response Lenses
+    attachClassicLinkVpcResponse_return,
+    attachClassicLinkVpcResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAttachClassicLinkVpc' smart constructor.
+data AttachClassicLinkVpc = AttachClassicLinkVpc'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of one or more of the VPC\'s security groups. You cannot specify
+    -- security groups from a different VPC.
+    groups :: [Prelude.Text],
+    -- | The ID of an EC2-Classic instance to link to the ClassicLink-enabled
+    -- VPC.
+    instanceId :: Prelude.Text,
+    -- | The ID of a ClassicLink-enabled VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachClassicLinkVpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'attachClassicLinkVpc_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groups', 'attachClassicLinkVpc_groups' - The ID of one or more of the VPC\'s security groups. You cannot specify
+-- security groups from a different VPC.
+--
+-- 'instanceId', 'attachClassicLinkVpc_instanceId' - The ID of an EC2-Classic instance to link to the ClassicLink-enabled
+-- VPC.
+--
+-- 'vpcId', 'attachClassicLinkVpc_vpcId' - The ID of a ClassicLink-enabled VPC.
+newAttachClassicLinkVpc ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  AttachClassicLinkVpc
+newAttachClassicLinkVpc pInstanceId_ pVpcId_ =
+  AttachClassicLinkVpc'
+    { dryRun = Prelude.Nothing,
+      groups = Prelude.mempty,
+      instanceId = pInstanceId_,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+attachClassicLinkVpc_dryRun :: Lens.Lens' AttachClassicLinkVpc (Prelude.Maybe Prelude.Bool)
+attachClassicLinkVpc_dryRun = Lens.lens (\AttachClassicLinkVpc' {dryRun} -> dryRun) (\s@AttachClassicLinkVpc' {} a -> s {dryRun = a} :: AttachClassicLinkVpc)
+
+-- | The ID of one or more of the VPC\'s security groups. You cannot specify
+-- security groups from a different VPC.
+attachClassicLinkVpc_groups :: Lens.Lens' AttachClassicLinkVpc [Prelude.Text]
+attachClassicLinkVpc_groups = Lens.lens (\AttachClassicLinkVpc' {groups} -> groups) (\s@AttachClassicLinkVpc' {} a -> s {groups = a} :: AttachClassicLinkVpc) Prelude.. Lens.coerced
+
+-- | The ID of an EC2-Classic instance to link to the ClassicLink-enabled
+-- VPC.
+attachClassicLinkVpc_instanceId :: Lens.Lens' AttachClassicLinkVpc Prelude.Text
+attachClassicLinkVpc_instanceId = Lens.lens (\AttachClassicLinkVpc' {instanceId} -> instanceId) (\s@AttachClassicLinkVpc' {} a -> s {instanceId = a} :: AttachClassicLinkVpc)
+
+-- | The ID of a ClassicLink-enabled VPC.
+attachClassicLinkVpc_vpcId :: Lens.Lens' AttachClassicLinkVpc Prelude.Text
+attachClassicLinkVpc_vpcId = Lens.lens (\AttachClassicLinkVpc' {vpcId} -> vpcId) (\s@AttachClassicLinkVpc' {} a -> s {vpcId = a} :: AttachClassicLinkVpc)
+
+instance Core.AWSRequest AttachClassicLinkVpc where
+  type
+    AWSResponse AttachClassicLinkVpc =
+      AttachClassicLinkVpcResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AttachClassicLinkVpcResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AttachClassicLinkVpc where
+  hashWithSalt _salt AttachClassicLinkVpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData AttachClassicLinkVpc where
+  rnf AttachClassicLinkVpc' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders AttachClassicLinkVpc where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AttachClassicLinkVpc where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AttachClassicLinkVpc where
+  toQuery AttachClassicLinkVpc' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AttachClassicLinkVpc" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "SecurityGroupId" groups,
+        "InstanceId" Data.=: instanceId,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newAttachClassicLinkVpcResponse' smart constructor.
+data AttachClassicLinkVpcResponse = AttachClassicLinkVpcResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachClassicLinkVpcResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'attachClassicLinkVpcResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'attachClassicLinkVpcResponse_httpStatus' - The response's http status code.
+newAttachClassicLinkVpcResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AttachClassicLinkVpcResponse
+newAttachClassicLinkVpcResponse pHttpStatus_ =
+  AttachClassicLinkVpcResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+attachClassicLinkVpcResponse_return :: Lens.Lens' AttachClassicLinkVpcResponse (Prelude.Maybe Prelude.Bool)
+attachClassicLinkVpcResponse_return = Lens.lens (\AttachClassicLinkVpcResponse' {return'} -> return') (\s@AttachClassicLinkVpcResponse' {} a -> s {return' = a} :: AttachClassicLinkVpcResponse)
+
+-- | The response's http status code.
+attachClassicLinkVpcResponse_httpStatus :: Lens.Lens' AttachClassicLinkVpcResponse Prelude.Int
+attachClassicLinkVpcResponse_httpStatus = Lens.lens (\AttachClassicLinkVpcResponse' {httpStatus} -> httpStatus) (\s@AttachClassicLinkVpcResponse' {} a -> s {httpStatus = a} :: AttachClassicLinkVpcResponse)
+
+instance Prelude.NFData AttachClassicLinkVpcResponse where
+  rnf AttachClassicLinkVpcResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AttachInternetGateway.hs b/gen/Amazonka/EC2/AttachInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AttachInternetGateway.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AttachInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Attaches an internet gateway or a virtual private gateway to a VPC,
+-- enabling connectivity between the internet and the VPC. For more
+-- information about your VPC and internet gateway, see the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/ Amazon Virtual Private Cloud User Guide>.
+module Amazonka.EC2.AttachInternetGateway
+  ( -- * Creating a Request
+    AttachInternetGateway (..),
+    newAttachInternetGateway,
+
+    -- * Request Lenses
+    attachInternetGateway_dryRun,
+    attachInternetGateway_internetGatewayId,
+    attachInternetGateway_vpcId,
+
+    -- * Destructuring the Response
+    AttachInternetGatewayResponse (..),
+    newAttachInternetGatewayResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAttachInternetGateway' smart constructor.
+data AttachInternetGateway = AttachInternetGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the internet gateway.
+    internetGatewayId :: Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'attachInternetGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'internetGatewayId', 'attachInternetGateway_internetGatewayId' - The ID of the internet gateway.
+--
+-- 'vpcId', 'attachInternetGateway_vpcId' - The ID of the VPC.
+newAttachInternetGateway ::
+  -- | 'internetGatewayId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  AttachInternetGateway
+newAttachInternetGateway pInternetGatewayId_ pVpcId_ =
+  AttachInternetGateway'
+    { dryRun = Prelude.Nothing,
+      internetGatewayId = pInternetGatewayId_,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+attachInternetGateway_dryRun :: Lens.Lens' AttachInternetGateway (Prelude.Maybe Prelude.Bool)
+attachInternetGateway_dryRun = Lens.lens (\AttachInternetGateway' {dryRun} -> dryRun) (\s@AttachInternetGateway' {} a -> s {dryRun = a} :: AttachInternetGateway)
+
+-- | The ID of the internet gateway.
+attachInternetGateway_internetGatewayId :: Lens.Lens' AttachInternetGateway Prelude.Text
+attachInternetGateway_internetGatewayId = Lens.lens (\AttachInternetGateway' {internetGatewayId} -> internetGatewayId) (\s@AttachInternetGateway' {} a -> s {internetGatewayId = a} :: AttachInternetGateway)
+
+-- | The ID of the VPC.
+attachInternetGateway_vpcId :: Lens.Lens' AttachInternetGateway Prelude.Text
+attachInternetGateway_vpcId = Lens.lens (\AttachInternetGateway' {vpcId} -> vpcId) (\s@AttachInternetGateway' {} a -> s {vpcId = a} :: AttachInternetGateway)
+
+instance Core.AWSRequest AttachInternetGateway where
+  type
+    AWSResponse AttachInternetGateway =
+      AttachInternetGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull AttachInternetGatewayResponse'
+
+instance Prelude.Hashable AttachInternetGateway where
+  hashWithSalt _salt AttachInternetGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` internetGatewayId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData AttachInternetGateway where
+  rnf AttachInternetGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf internetGatewayId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders AttachInternetGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AttachInternetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AttachInternetGateway where
+  toQuery AttachInternetGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AttachInternetGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InternetGatewayId" Data.=: internetGatewayId,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newAttachInternetGatewayResponse' smart constructor.
+data AttachInternetGatewayResponse = AttachInternetGatewayResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachInternetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newAttachInternetGatewayResponse ::
+  AttachInternetGatewayResponse
+newAttachInternetGatewayResponse =
+  AttachInternetGatewayResponse'
+
+instance Prelude.NFData AttachInternetGatewayResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/AttachNetworkInterface.hs b/gen/Amazonka/EC2/AttachNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AttachNetworkInterface.hs
@@ -0,0 +1,269 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AttachNetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Attaches a network interface to an instance.
+module Amazonka.EC2.AttachNetworkInterface
+  ( -- * Creating a Request
+    AttachNetworkInterface (..),
+    newAttachNetworkInterface,
+
+    -- * Request Lenses
+    attachNetworkInterface_dryRun,
+    attachNetworkInterface_enaSrdSpecification,
+    attachNetworkInterface_networkCardIndex,
+    attachNetworkInterface_deviceIndex,
+    attachNetworkInterface_instanceId,
+    attachNetworkInterface_networkInterfaceId,
+
+    -- * Destructuring the Response
+    AttachNetworkInterfaceResponse (..),
+    newAttachNetworkInterfaceResponse,
+
+    -- * Response Lenses
+    attachNetworkInterfaceResponse_attachmentId,
+    attachNetworkInterfaceResponse_networkCardIndex,
+    attachNetworkInterfaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for AttachNetworkInterface.
+--
+-- /See:/ 'newAttachNetworkInterface' smart constructor.
+data AttachNetworkInterface = AttachNetworkInterface'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Configures ENA Express for the network interface that this action
+    -- attaches to the instance.
+    enaSrdSpecification :: Prelude.Maybe EnaSrdSpecification,
+    -- | The index of the network card. Some instance types support multiple
+    -- network cards. The primary network interface must be assigned to network
+    -- card index 0. The default is network card index 0.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The index of the device for the network interface attachment.
+    deviceIndex :: Prelude.Int,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachNetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'attachNetworkInterface_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'enaSrdSpecification', 'attachNetworkInterface_enaSrdSpecification' - Configures ENA Express for the network interface that this action
+-- attaches to the instance.
+--
+-- 'networkCardIndex', 'attachNetworkInterface_networkCardIndex' - The index of the network card. Some instance types support multiple
+-- network cards. The primary network interface must be assigned to network
+-- card index 0. The default is network card index 0.
+--
+-- 'deviceIndex', 'attachNetworkInterface_deviceIndex' - The index of the device for the network interface attachment.
+--
+-- 'instanceId', 'attachNetworkInterface_instanceId' - The ID of the instance.
+--
+-- 'networkInterfaceId', 'attachNetworkInterface_networkInterfaceId' - The ID of the network interface.
+newAttachNetworkInterface ::
+  -- | 'deviceIndex'
+  Prelude.Int ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  AttachNetworkInterface
+newAttachNetworkInterface
+  pDeviceIndex_
+  pInstanceId_
+  pNetworkInterfaceId_ =
+    AttachNetworkInterface'
+      { dryRun = Prelude.Nothing,
+        enaSrdSpecification = Prelude.Nothing,
+        networkCardIndex = Prelude.Nothing,
+        deviceIndex = pDeviceIndex_,
+        instanceId = pInstanceId_,
+        networkInterfaceId = pNetworkInterfaceId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+attachNetworkInterface_dryRun :: Lens.Lens' AttachNetworkInterface (Prelude.Maybe Prelude.Bool)
+attachNetworkInterface_dryRun = Lens.lens (\AttachNetworkInterface' {dryRun} -> dryRun) (\s@AttachNetworkInterface' {} a -> s {dryRun = a} :: AttachNetworkInterface)
+
+-- | Configures ENA Express for the network interface that this action
+-- attaches to the instance.
+attachNetworkInterface_enaSrdSpecification :: Lens.Lens' AttachNetworkInterface (Prelude.Maybe EnaSrdSpecification)
+attachNetworkInterface_enaSrdSpecification = Lens.lens (\AttachNetworkInterface' {enaSrdSpecification} -> enaSrdSpecification) (\s@AttachNetworkInterface' {} a -> s {enaSrdSpecification = a} :: AttachNetworkInterface)
+
+-- | The index of the network card. Some instance types support multiple
+-- network cards. The primary network interface must be assigned to network
+-- card index 0. The default is network card index 0.
+attachNetworkInterface_networkCardIndex :: Lens.Lens' AttachNetworkInterface (Prelude.Maybe Prelude.Int)
+attachNetworkInterface_networkCardIndex = Lens.lens (\AttachNetworkInterface' {networkCardIndex} -> networkCardIndex) (\s@AttachNetworkInterface' {} a -> s {networkCardIndex = a} :: AttachNetworkInterface)
+
+-- | The index of the device for the network interface attachment.
+attachNetworkInterface_deviceIndex :: Lens.Lens' AttachNetworkInterface Prelude.Int
+attachNetworkInterface_deviceIndex = Lens.lens (\AttachNetworkInterface' {deviceIndex} -> deviceIndex) (\s@AttachNetworkInterface' {} a -> s {deviceIndex = a} :: AttachNetworkInterface)
+
+-- | The ID of the instance.
+attachNetworkInterface_instanceId :: Lens.Lens' AttachNetworkInterface Prelude.Text
+attachNetworkInterface_instanceId = Lens.lens (\AttachNetworkInterface' {instanceId} -> instanceId) (\s@AttachNetworkInterface' {} a -> s {instanceId = a} :: AttachNetworkInterface)
+
+-- | The ID of the network interface.
+attachNetworkInterface_networkInterfaceId :: Lens.Lens' AttachNetworkInterface Prelude.Text
+attachNetworkInterface_networkInterfaceId = Lens.lens (\AttachNetworkInterface' {networkInterfaceId} -> networkInterfaceId) (\s@AttachNetworkInterface' {} a -> s {networkInterfaceId = a} :: AttachNetworkInterface)
+
+instance Core.AWSRequest AttachNetworkInterface where
+  type
+    AWSResponse AttachNetworkInterface =
+      AttachNetworkInterfaceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AttachNetworkInterfaceResponse'
+            Prelude.<$> (x Data..@? "attachmentId")
+            Prelude.<*> (x Data..@? "networkCardIndex")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AttachNetworkInterface where
+  hashWithSalt _salt AttachNetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` enaSrdSpecification
+      `Prelude.hashWithSalt` networkCardIndex
+      `Prelude.hashWithSalt` deviceIndex
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` networkInterfaceId
+
+instance Prelude.NFData AttachNetworkInterface where
+  rnf AttachNetworkInterface' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf enaSrdSpecification
+      `Prelude.seq` Prelude.rnf networkCardIndex
+      `Prelude.seq` Prelude.rnf deviceIndex
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance Data.ToHeaders AttachNetworkInterface where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AttachNetworkInterface where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AttachNetworkInterface where
+  toQuery AttachNetworkInterface' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AttachNetworkInterface" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EnaSrdSpecification" Data.=: enaSrdSpecification,
+        "NetworkCardIndex" Data.=: networkCardIndex,
+        "DeviceIndex" Data.=: deviceIndex,
+        "InstanceId" Data.=: instanceId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | Contains the output of AttachNetworkInterface.
+--
+-- /See:/ 'newAttachNetworkInterfaceResponse' smart constructor.
+data AttachNetworkInterfaceResponse = AttachNetworkInterfaceResponse'
+  { -- | The ID of the network interface attachment.
+    attachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The index of the network card.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachNetworkInterfaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentId', 'attachNetworkInterfaceResponse_attachmentId' - The ID of the network interface attachment.
+--
+-- 'networkCardIndex', 'attachNetworkInterfaceResponse_networkCardIndex' - The index of the network card.
+--
+-- 'httpStatus', 'attachNetworkInterfaceResponse_httpStatus' - The response's http status code.
+newAttachNetworkInterfaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AttachNetworkInterfaceResponse
+newAttachNetworkInterfaceResponse pHttpStatus_ =
+  AttachNetworkInterfaceResponse'
+    { attachmentId =
+        Prelude.Nothing,
+      networkCardIndex = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the network interface attachment.
+attachNetworkInterfaceResponse_attachmentId :: Lens.Lens' AttachNetworkInterfaceResponse (Prelude.Maybe Prelude.Text)
+attachNetworkInterfaceResponse_attachmentId = Lens.lens (\AttachNetworkInterfaceResponse' {attachmentId} -> attachmentId) (\s@AttachNetworkInterfaceResponse' {} a -> s {attachmentId = a} :: AttachNetworkInterfaceResponse)
+
+-- | The index of the network card.
+attachNetworkInterfaceResponse_networkCardIndex :: Lens.Lens' AttachNetworkInterfaceResponse (Prelude.Maybe Prelude.Int)
+attachNetworkInterfaceResponse_networkCardIndex = Lens.lens (\AttachNetworkInterfaceResponse' {networkCardIndex} -> networkCardIndex) (\s@AttachNetworkInterfaceResponse' {} a -> s {networkCardIndex = a} :: AttachNetworkInterfaceResponse)
+
+-- | The response's http status code.
+attachNetworkInterfaceResponse_httpStatus :: Lens.Lens' AttachNetworkInterfaceResponse Prelude.Int
+attachNetworkInterfaceResponse_httpStatus = Lens.lens (\AttachNetworkInterfaceResponse' {httpStatus} -> httpStatus) (\s@AttachNetworkInterfaceResponse' {} a -> s {httpStatus = a} :: AttachNetworkInterfaceResponse)
+
+instance
+  Prelude.NFData
+    AttachNetworkInterfaceResponse
+  where
+  rnf AttachNetworkInterfaceResponse' {..} =
+    Prelude.rnf attachmentId
+      `Prelude.seq` Prelude.rnf networkCardIndex
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AttachVerifiedAccessTrustProvider.hs b/gen/Amazonka/EC2/AttachVerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AttachVerifiedAccessTrustProvider.hs
@@ -0,0 +1,265 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AttachVerifiedAccessTrustProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A trust provider is a third-party entity that creates, maintains, and
+-- manages identity information for users and devices. One or more trust
+-- providers can be attached to an Amazon Web Services Verified Access
+-- instance.
+module Amazonka.EC2.AttachVerifiedAccessTrustProvider
+  ( -- * Creating a Request
+    AttachVerifiedAccessTrustProvider (..),
+    newAttachVerifiedAccessTrustProvider,
+
+    -- * Request Lenses
+    attachVerifiedAccessTrustProvider_clientToken,
+    attachVerifiedAccessTrustProvider_dryRun,
+    attachVerifiedAccessTrustProvider_verifiedAccessInstanceId,
+    attachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+
+    -- * Destructuring the Response
+    AttachVerifiedAccessTrustProviderResponse (..),
+    newAttachVerifiedAccessTrustProviderResponse,
+
+    -- * Response Lenses
+    attachVerifiedAccessTrustProviderResponse_verifiedAccessInstance,
+    attachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    attachVerifiedAccessTrustProviderResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAttachVerifiedAccessTrustProvider' smart constructor.
+data AttachVerifiedAccessTrustProvider = AttachVerifiedAccessTrustProvider'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProviderId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachVerifiedAccessTrustProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'attachVerifiedAccessTrustProvider_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'attachVerifiedAccessTrustProvider_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessInstanceId', 'attachVerifiedAccessTrustProvider_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'verifiedAccessTrustProviderId', 'attachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId' - The ID of the Amazon Web Services Verified Access trust provider.
+newAttachVerifiedAccessTrustProvider ::
+  -- | 'verifiedAccessInstanceId'
+  Prelude.Text ->
+  -- | 'verifiedAccessTrustProviderId'
+  Prelude.Text ->
+  AttachVerifiedAccessTrustProvider
+newAttachVerifiedAccessTrustProvider
+  pVerifiedAccessInstanceId_
+  pVerifiedAccessTrustProviderId_ =
+    AttachVerifiedAccessTrustProvider'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessInstanceId =
+          pVerifiedAccessInstanceId_,
+        verifiedAccessTrustProviderId =
+          pVerifiedAccessTrustProviderId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+attachVerifiedAccessTrustProvider_clientToken :: Lens.Lens' AttachVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+attachVerifiedAccessTrustProvider_clientToken = Lens.lens (\AttachVerifiedAccessTrustProvider' {clientToken} -> clientToken) (\s@AttachVerifiedAccessTrustProvider' {} a -> s {clientToken = a} :: AttachVerifiedAccessTrustProvider)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+attachVerifiedAccessTrustProvider_dryRun :: Lens.Lens' AttachVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Bool)
+attachVerifiedAccessTrustProvider_dryRun = Lens.lens (\AttachVerifiedAccessTrustProvider' {dryRun} -> dryRun) (\s@AttachVerifiedAccessTrustProvider' {} a -> s {dryRun = a} :: AttachVerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+attachVerifiedAccessTrustProvider_verifiedAccessInstanceId :: Lens.Lens' AttachVerifiedAccessTrustProvider Prelude.Text
+attachVerifiedAccessTrustProvider_verifiedAccessInstanceId = Lens.lens (\AttachVerifiedAccessTrustProvider' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@AttachVerifiedAccessTrustProvider' {} a -> s {verifiedAccessInstanceId = a} :: AttachVerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+attachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId :: Lens.Lens' AttachVerifiedAccessTrustProvider Prelude.Text
+attachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId = Lens.lens (\AttachVerifiedAccessTrustProvider' {verifiedAccessTrustProviderId} -> verifiedAccessTrustProviderId) (\s@AttachVerifiedAccessTrustProvider' {} a -> s {verifiedAccessTrustProviderId = a} :: AttachVerifiedAccessTrustProvider)
+
+instance
+  Core.AWSRequest
+    AttachVerifiedAccessTrustProvider
+  where
+  type
+    AWSResponse AttachVerifiedAccessTrustProvider =
+      AttachVerifiedAccessTrustProviderResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AttachVerifiedAccessTrustProviderResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessInstance")
+            Prelude.<*> (x Data..@? "verifiedAccessTrustProvider")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AttachVerifiedAccessTrustProvider
+  where
+  hashWithSalt
+    _salt
+    AttachVerifiedAccessTrustProvider' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` verifiedAccessInstanceId
+        `Prelude.hashWithSalt` verifiedAccessTrustProviderId
+
+instance
+  Prelude.NFData
+    AttachVerifiedAccessTrustProvider
+  where
+  rnf AttachVerifiedAccessTrustProvider' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderId
+
+instance
+  Data.ToHeaders
+    AttachVerifiedAccessTrustProvider
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    AttachVerifiedAccessTrustProvider
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AttachVerifiedAccessTrustProvider
+  where
+  toQuery AttachVerifiedAccessTrustProvider' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AttachVerifiedAccessTrustProvider" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId,
+        "VerifiedAccessTrustProviderId"
+          Data.=: verifiedAccessTrustProviderId
+      ]
+
+-- | /See:/ 'newAttachVerifiedAccessTrustProviderResponse' smart constructor.
+data AttachVerifiedAccessTrustProviderResponse = AttachVerifiedAccessTrustProviderResponse'
+  { -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstance :: Prelude.Maybe VerifiedAccessInstance,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProvider :: Prelude.Maybe VerifiedAccessTrustProvider,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachVerifiedAccessTrustProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessInstance', 'attachVerifiedAccessTrustProviderResponse_verifiedAccessInstance' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'verifiedAccessTrustProvider', 'attachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider' - The ID of the Amazon Web Services Verified Access trust provider.
+--
+-- 'httpStatus', 'attachVerifiedAccessTrustProviderResponse_httpStatus' - The response's http status code.
+newAttachVerifiedAccessTrustProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AttachVerifiedAccessTrustProviderResponse
+newAttachVerifiedAccessTrustProviderResponse
+  pHttpStatus_ =
+    AttachVerifiedAccessTrustProviderResponse'
+      { verifiedAccessInstance =
+          Prelude.Nothing,
+        verifiedAccessTrustProvider =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+attachVerifiedAccessTrustProviderResponse_verifiedAccessInstance :: Lens.Lens' AttachVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessInstance)
+attachVerifiedAccessTrustProviderResponse_verifiedAccessInstance = Lens.lens (\AttachVerifiedAccessTrustProviderResponse' {verifiedAccessInstance} -> verifiedAccessInstance) (\s@AttachVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessInstance = a} :: AttachVerifiedAccessTrustProviderResponse)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+attachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider :: Lens.Lens' AttachVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessTrustProvider)
+attachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider = Lens.lens (\AttachVerifiedAccessTrustProviderResponse' {verifiedAccessTrustProvider} -> verifiedAccessTrustProvider) (\s@AttachVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessTrustProvider = a} :: AttachVerifiedAccessTrustProviderResponse)
+
+-- | The response's http status code.
+attachVerifiedAccessTrustProviderResponse_httpStatus :: Lens.Lens' AttachVerifiedAccessTrustProviderResponse Prelude.Int
+attachVerifiedAccessTrustProviderResponse_httpStatus = Lens.lens (\AttachVerifiedAccessTrustProviderResponse' {httpStatus} -> httpStatus) (\s@AttachVerifiedAccessTrustProviderResponse' {} a -> s {httpStatus = a} :: AttachVerifiedAccessTrustProviderResponse)
+
+instance
+  Prelude.NFData
+    AttachVerifiedAccessTrustProviderResponse
+  where
+  rnf AttachVerifiedAccessTrustProviderResponse' {..} =
+    Prelude.rnf verifiedAccessInstance
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProvider
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AttachVolume.hs b/gen/Amazonka/EC2/AttachVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AttachVolume.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AttachVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Attaches an EBS volume to a running or stopped instance and exposes it
+-- to the instance with the specified device name.
+--
+-- Encrypted EBS volumes must be attached to instances that support Amazon
+-- EBS encryption. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- After you attach an EBS volume, you must make it available. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html Make an EBS volume available for use>.
+--
+-- If a volume has an Amazon Web Services Marketplace product code:
+--
+-- -   The volume can be attached only to a stopped instance.
+--
+-- -   Amazon Web Services Marketplace product codes are copied from the
+--     volume to the instance.
+--
+-- -   You must be subscribed to the product.
+--
+-- -   The instance type and operating system of the instance must support
+--     the product. For example, you can\'t detach a volume from a Windows
+--     instance and attach it to a Linux instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html Attach an Amazon EBS volume to an instance>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.AttachVolume
+  ( -- * Creating a Request
+    AttachVolume (..),
+    newAttachVolume,
+
+    -- * Request Lenses
+    attachVolume_dryRun,
+    attachVolume_device,
+    attachVolume_instanceId,
+    attachVolume_volumeId,
+
+    -- * Destructuring the Response
+    VolumeAttachment (..),
+    newVolumeAttachment,
+
+    -- * Response Lenses
+    volumeAttachment_attachTime,
+    volumeAttachment_deleteOnTermination,
+    volumeAttachment_device,
+    volumeAttachment_instanceId,
+    volumeAttachment_state,
+    volumeAttachment_volumeId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAttachVolume' smart constructor.
+data AttachVolume = AttachVolume'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+    device :: Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text,
+    -- | The ID of the EBS volume. The volume and instance must be within the
+    -- same Availability Zone.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'attachVolume_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'device', 'attachVolume_device' - The device name (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- 'instanceId', 'attachVolume_instanceId' - The ID of the instance.
+--
+-- 'volumeId', 'attachVolume_volumeId' - The ID of the EBS volume. The volume and instance must be within the
+-- same Availability Zone.
+newAttachVolume ::
+  -- | 'device'
+  Prelude.Text ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'volumeId'
+  Prelude.Text ->
+  AttachVolume
+newAttachVolume pDevice_ pInstanceId_ pVolumeId_ =
+  AttachVolume'
+    { dryRun = Prelude.Nothing,
+      device = pDevice_,
+      instanceId = pInstanceId_,
+      volumeId = pVolumeId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+attachVolume_dryRun :: Lens.Lens' AttachVolume (Prelude.Maybe Prelude.Bool)
+attachVolume_dryRun = Lens.lens (\AttachVolume' {dryRun} -> dryRun) (\s@AttachVolume' {} a -> s {dryRun = a} :: AttachVolume)
+
+-- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+attachVolume_device :: Lens.Lens' AttachVolume Prelude.Text
+attachVolume_device = Lens.lens (\AttachVolume' {device} -> device) (\s@AttachVolume' {} a -> s {device = a} :: AttachVolume)
+
+-- | The ID of the instance.
+attachVolume_instanceId :: Lens.Lens' AttachVolume Prelude.Text
+attachVolume_instanceId = Lens.lens (\AttachVolume' {instanceId} -> instanceId) (\s@AttachVolume' {} a -> s {instanceId = a} :: AttachVolume)
+
+-- | The ID of the EBS volume. The volume and instance must be within the
+-- same Availability Zone.
+attachVolume_volumeId :: Lens.Lens' AttachVolume Prelude.Text
+attachVolume_volumeId = Lens.lens (\AttachVolume' {volumeId} -> volumeId) (\s@AttachVolume' {} a -> s {volumeId = a} :: AttachVolume)
+
+instance Core.AWSRequest AttachVolume where
+  type AWSResponse AttachVolume = VolumeAttachment
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML (\s h x -> Data.parseXML x)
+
+instance Prelude.Hashable AttachVolume where
+  hashWithSalt _salt AttachVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` device
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData AttachVolume where
+  rnf AttachVolume' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf device
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders AttachVolume where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AttachVolume where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AttachVolume where
+  toQuery AttachVolume' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AttachVolume" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Device" Data.=: device,
+        "InstanceId" Data.=: instanceId,
+        "VolumeId" Data.=: volumeId
+      ]
diff --git a/gen/Amazonka/EC2/AttachVpnGateway.hs b/gen/Amazonka/EC2/AttachVpnGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AttachVpnGateway.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AttachVpnGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Attaches a virtual private gateway to a VPC. You can attach one virtual
+-- private gateway to one VPC at a time.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.AttachVpnGateway
+  ( -- * Creating a Request
+    AttachVpnGateway (..),
+    newAttachVpnGateway,
+
+    -- * Request Lenses
+    attachVpnGateway_dryRun,
+    attachVpnGateway_vpcId,
+    attachVpnGateway_vpnGatewayId,
+
+    -- * Destructuring the Response
+    AttachVpnGatewayResponse (..),
+    newAttachVpnGatewayResponse,
+
+    -- * Response Lenses
+    attachVpnGatewayResponse_vpcAttachment,
+    attachVpnGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for AttachVpnGateway.
+--
+-- /See:/ 'newAttachVpnGateway' smart constructor.
+data AttachVpnGateway = AttachVpnGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text,
+    -- | The ID of the virtual private gateway.
+    vpnGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachVpnGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'attachVpnGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcId', 'attachVpnGateway_vpcId' - The ID of the VPC.
+--
+-- 'vpnGatewayId', 'attachVpnGateway_vpnGatewayId' - The ID of the virtual private gateway.
+newAttachVpnGateway ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  -- | 'vpnGatewayId'
+  Prelude.Text ->
+  AttachVpnGateway
+newAttachVpnGateway pVpcId_ pVpnGatewayId_ =
+  AttachVpnGateway'
+    { dryRun = Prelude.Nothing,
+      vpcId = pVpcId_,
+      vpnGatewayId = pVpnGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+attachVpnGateway_dryRun :: Lens.Lens' AttachVpnGateway (Prelude.Maybe Prelude.Bool)
+attachVpnGateway_dryRun = Lens.lens (\AttachVpnGateway' {dryRun} -> dryRun) (\s@AttachVpnGateway' {} a -> s {dryRun = a} :: AttachVpnGateway)
+
+-- | The ID of the VPC.
+attachVpnGateway_vpcId :: Lens.Lens' AttachVpnGateway Prelude.Text
+attachVpnGateway_vpcId = Lens.lens (\AttachVpnGateway' {vpcId} -> vpcId) (\s@AttachVpnGateway' {} a -> s {vpcId = a} :: AttachVpnGateway)
+
+-- | The ID of the virtual private gateway.
+attachVpnGateway_vpnGatewayId :: Lens.Lens' AttachVpnGateway Prelude.Text
+attachVpnGateway_vpnGatewayId = Lens.lens (\AttachVpnGateway' {vpnGatewayId} -> vpnGatewayId) (\s@AttachVpnGateway' {} a -> s {vpnGatewayId = a} :: AttachVpnGateway)
+
+instance Core.AWSRequest AttachVpnGateway where
+  type
+    AWSResponse AttachVpnGateway =
+      AttachVpnGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AttachVpnGatewayResponse'
+            Prelude.<$> (x Data..@? "attachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AttachVpnGateway where
+  hashWithSalt _salt AttachVpnGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpnGatewayId
+
+instance Prelude.NFData AttachVpnGateway where
+  rnf AttachVpnGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpnGatewayId
+
+instance Data.ToHeaders AttachVpnGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AttachVpnGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AttachVpnGateway where
+  toQuery AttachVpnGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AttachVpnGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcId" Data.=: vpcId,
+        "VpnGatewayId" Data.=: vpnGatewayId
+      ]
+
+-- | Contains the output of AttachVpnGateway.
+--
+-- /See:/ 'newAttachVpnGatewayResponse' smart constructor.
+data AttachVpnGatewayResponse = AttachVpnGatewayResponse'
+  { -- | Information about the attachment.
+    vpcAttachment :: Prelude.Maybe VpcAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachVpnGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcAttachment', 'attachVpnGatewayResponse_vpcAttachment' - Information about the attachment.
+--
+-- 'httpStatus', 'attachVpnGatewayResponse_httpStatus' - The response's http status code.
+newAttachVpnGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AttachVpnGatewayResponse
+newAttachVpnGatewayResponse pHttpStatus_ =
+  AttachVpnGatewayResponse'
+    { vpcAttachment =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the attachment.
+attachVpnGatewayResponse_vpcAttachment :: Lens.Lens' AttachVpnGatewayResponse (Prelude.Maybe VpcAttachment)
+attachVpnGatewayResponse_vpcAttachment = Lens.lens (\AttachVpnGatewayResponse' {vpcAttachment} -> vpcAttachment) (\s@AttachVpnGatewayResponse' {} a -> s {vpcAttachment = a} :: AttachVpnGatewayResponse)
+
+-- | The response's http status code.
+attachVpnGatewayResponse_httpStatus :: Lens.Lens' AttachVpnGatewayResponse Prelude.Int
+attachVpnGatewayResponse_httpStatus = Lens.lens (\AttachVpnGatewayResponse' {httpStatus} -> httpStatus) (\s@AttachVpnGatewayResponse' {} a -> s {httpStatus = a} :: AttachVpnGatewayResponse)
+
+instance Prelude.NFData AttachVpnGatewayResponse where
+  rnf AttachVpnGatewayResponse' {..} =
+    Prelude.rnf vpcAttachment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AuthorizeClientVpnIngress.hs b/gen/Amazonka/EC2/AuthorizeClientVpnIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AuthorizeClientVpnIngress.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AuthorizeClientVpnIngress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds an ingress authorization rule to a Client VPN endpoint. Ingress
+-- authorization rules act as firewall rules that grant access to networks.
+-- You must configure ingress authorization rules to enable clients to
+-- access resources in Amazon Web Services or on-premises networks.
+module Amazonka.EC2.AuthorizeClientVpnIngress
+  ( -- * Creating a Request
+    AuthorizeClientVpnIngress (..),
+    newAuthorizeClientVpnIngress,
+
+    -- * Request Lenses
+    authorizeClientVpnIngress_accessGroupId,
+    authorizeClientVpnIngress_authorizeAllGroups,
+    authorizeClientVpnIngress_clientToken,
+    authorizeClientVpnIngress_description,
+    authorizeClientVpnIngress_dryRun,
+    authorizeClientVpnIngress_clientVpnEndpointId,
+    authorizeClientVpnIngress_targetNetworkCidr,
+
+    -- * Destructuring the Response
+    AuthorizeClientVpnIngressResponse (..),
+    newAuthorizeClientVpnIngressResponse,
+
+    -- * Response Lenses
+    authorizeClientVpnIngressResponse_status,
+    authorizeClientVpnIngressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAuthorizeClientVpnIngress' smart constructor.
+data AuthorizeClientVpnIngress = AuthorizeClientVpnIngress'
+  { -- | The ID of the group to grant access to, for example, the Active
+    -- Directory group or identity provider (IdP) group. Required if
+    -- @AuthorizeAllGroups@ is @false@ or not specified.
+    accessGroupId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to grant access to all clients. Specify @true@ to
+    -- grant all clients who successfully establish a VPN connection access to
+    -- the network. Must be set to @true@ if @AccessGroupId@ is not specified.
+    authorizeAllGroups :: Prelude.Maybe Prelude.Bool,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the authorization rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The IPv4 address range, in CIDR notation, of the network for which
+    -- access is being authorized.
+    targetNetworkCidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeClientVpnIngress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessGroupId', 'authorizeClientVpnIngress_accessGroupId' - The ID of the group to grant access to, for example, the Active
+-- Directory group or identity provider (IdP) group. Required if
+-- @AuthorizeAllGroups@ is @false@ or not specified.
+--
+-- 'authorizeAllGroups', 'authorizeClientVpnIngress_authorizeAllGroups' - Indicates whether to grant access to all clients. Specify @true@ to
+-- grant all clients who successfully establish a VPN connection access to
+-- the network. Must be set to @true@ if @AccessGroupId@ is not specified.
+--
+-- 'clientToken', 'authorizeClientVpnIngress_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'authorizeClientVpnIngress_description' - A brief description of the authorization rule.
+--
+-- 'dryRun', 'authorizeClientVpnIngress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'authorizeClientVpnIngress_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+--
+-- 'targetNetworkCidr', 'authorizeClientVpnIngress_targetNetworkCidr' - The IPv4 address range, in CIDR notation, of the network for which
+-- access is being authorized.
+newAuthorizeClientVpnIngress ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'targetNetworkCidr'
+  Prelude.Text ->
+  AuthorizeClientVpnIngress
+newAuthorizeClientVpnIngress
+  pClientVpnEndpointId_
+  pTargetNetworkCidr_ =
+    AuthorizeClientVpnIngress'
+      { accessGroupId =
+          Prelude.Nothing,
+        authorizeAllGroups = Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        clientVpnEndpointId = pClientVpnEndpointId_,
+        targetNetworkCidr = pTargetNetworkCidr_
+      }
+
+-- | The ID of the group to grant access to, for example, the Active
+-- Directory group or identity provider (IdP) group. Required if
+-- @AuthorizeAllGroups@ is @false@ or not specified.
+authorizeClientVpnIngress_accessGroupId :: Lens.Lens' AuthorizeClientVpnIngress (Prelude.Maybe Prelude.Text)
+authorizeClientVpnIngress_accessGroupId = Lens.lens (\AuthorizeClientVpnIngress' {accessGroupId} -> accessGroupId) (\s@AuthorizeClientVpnIngress' {} a -> s {accessGroupId = a} :: AuthorizeClientVpnIngress)
+
+-- | Indicates whether to grant access to all clients. Specify @true@ to
+-- grant all clients who successfully establish a VPN connection access to
+-- the network. Must be set to @true@ if @AccessGroupId@ is not specified.
+authorizeClientVpnIngress_authorizeAllGroups :: Lens.Lens' AuthorizeClientVpnIngress (Prelude.Maybe Prelude.Bool)
+authorizeClientVpnIngress_authorizeAllGroups = Lens.lens (\AuthorizeClientVpnIngress' {authorizeAllGroups} -> authorizeAllGroups) (\s@AuthorizeClientVpnIngress' {} a -> s {authorizeAllGroups = a} :: AuthorizeClientVpnIngress)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+authorizeClientVpnIngress_clientToken :: Lens.Lens' AuthorizeClientVpnIngress (Prelude.Maybe Prelude.Text)
+authorizeClientVpnIngress_clientToken = Lens.lens (\AuthorizeClientVpnIngress' {clientToken} -> clientToken) (\s@AuthorizeClientVpnIngress' {} a -> s {clientToken = a} :: AuthorizeClientVpnIngress)
+
+-- | A brief description of the authorization rule.
+authorizeClientVpnIngress_description :: Lens.Lens' AuthorizeClientVpnIngress (Prelude.Maybe Prelude.Text)
+authorizeClientVpnIngress_description = Lens.lens (\AuthorizeClientVpnIngress' {description} -> description) (\s@AuthorizeClientVpnIngress' {} a -> s {description = a} :: AuthorizeClientVpnIngress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+authorizeClientVpnIngress_dryRun :: Lens.Lens' AuthorizeClientVpnIngress (Prelude.Maybe Prelude.Bool)
+authorizeClientVpnIngress_dryRun = Lens.lens (\AuthorizeClientVpnIngress' {dryRun} -> dryRun) (\s@AuthorizeClientVpnIngress' {} a -> s {dryRun = a} :: AuthorizeClientVpnIngress)
+
+-- | The ID of the Client VPN endpoint.
+authorizeClientVpnIngress_clientVpnEndpointId :: Lens.Lens' AuthorizeClientVpnIngress Prelude.Text
+authorizeClientVpnIngress_clientVpnEndpointId = Lens.lens (\AuthorizeClientVpnIngress' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@AuthorizeClientVpnIngress' {} a -> s {clientVpnEndpointId = a} :: AuthorizeClientVpnIngress)
+
+-- | The IPv4 address range, in CIDR notation, of the network for which
+-- access is being authorized.
+authorizeClientVpnIngress_targetNetworkCidr :: Lens.Lens' AuthorizeClientVpnIngress Prelude.Text
+authorizeClientVpnIngress_targetNetworkCidr = Lens.lens (\AuthorizeClientVpnIngress' {targetNetworkCidr} -> targetNetworkCidr) (\s@AuthorizeClientVpnIngress' {} a -> s {targetNetworkCidr = a} :: AuthorizeClientVpnIngress)
+
+instance Core.AWSRequest AuthorizeClientVpnIngress where
+  type
+    AWSResponse AuthorizeClientVpnIngress =
+      AuthorizeClientVpnIngressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AuthorizeClientVpnIngressResponse'
+            Prelude.<$> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AuthorizeClientVpnIngress where
+  hashWithSalt _salt AuthorizeClientVpnIngress' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessGroupId
+      `Prelude.hashWithSalt` authorizeAllGroups
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` targetNetworkCidr
+
+instance Prelude.NFData AuthorizeClientVpnIngress where
+  rnf AuthorizeClientVpnIngress' {..} =
+    Prelude.rnf accessGroupId
+      `Prelude.seq` Prelude.rnf authorizeAllGroups
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf targetNetworkCidr
+
+instance Data.ToHeaders AuthorizeClientVpnIngress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AuthorizeClientVpnIngress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AuthorizeClientVpnIngress where
+  toQuery AuthorizeClientVpnIngress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("AuthorizeClientVpnIngress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AccessGroupId" Data.=: accessGroupId,
+        "AuthorizeAllGroups" Data.=: authorizeAllGroups,
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+        "TargetNetworkCidr" Data.=: targetNetworkCidr
+      ]
+
+-- | /See:/ 'newAuthorizeClientVpnIngressResponse' smart constructor.
+data AuthorizeClientVpnIngressResponse = AuthorizeClientVpnIngressResponse'
+  { -- | The current state of the authorization rule.
+    status :: Prelude.Maybe ClientVpnAuthorizationRuleStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeClientVpnIngressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'authorizeClientVpnIngressResponse_status' - The current state of the authorization rule.
+--
+-- 'httpStatus', 'authorizeClientVpnIngressResponse_httpStatus' - The response's http status code.
+newAuthorizeClientVpnIngressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AuthorizeClientVpnIngressResponse
+newAuthorizeClientVpnIngressResponse pHttpStatus_ =
+  AuthorizeClientVpnIngressResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current state of the authorization rule.
+authorizeClientVpnIngressResponse_status :: Lens.Lens' AuthorizeClientVpnIngressResponse (Prelude.Maybe ClientVpnAuthorizationRuleStatus)
+authorizeClientVpnIngressResponse_status = Lens.lens (\AuthorizeClientVpnIngressResponse' {status} -> status) (\s@AuthorizeClientVpnIngressResponse' {} a -> s {status = a} :: AuthorizeClientVpnIngressResponse)
+
+-- | The response's http status code.
+authorizeClientVpnIngressResponse_httpStatus :: Lens.Lens' AuthorizeClientVpnIngressResponse Prelude.Int
+authorizeClientVpnIngressResponse_httpStatus = Lens.lens (\AuthorizeClientVpnIngressResponse' {httpStatus} -> httpStatus) (\s@AuthorizeClientVpnIngressResponse' {} a -> s {httpStatus = a} :: AuthorizeClientVpnIngressResponse)
+
+instance
+  Prelude.NFData
+    AuthorizeClientVpnIngressResponse
+  where
+  rnf AuthorizeClientVpnIngressResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AuthorizeSecurityGroupEgress.hs b/gen/Amazonka/EC2/AuthorizeSecurityGroupEgress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AuthorizeSecurityGroupEgress.hs
@@ -0,0 +1,352 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AuthorizeSecurityGroupEgress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- [VPC only] Adds the specified outbound (egress) rules to a security
+-- group for use with a VPC.
+--
+-- An outbound rule permits instances to send traffic to the specified IPv4
+-- or IPv6 CIDR address ranges, or to the instances that are associated
+-- with the specified source security groups. When specifying an outbound
+-- rule for your security group in a VPC, the @IpPermissions@ must include
+-- a destination for the traffic.
+--
+-- You specify a protocol for each rule (for example, TCP). For the TCP and
+-- UDP protocols, you must also specify the destination port or port range.
+-- For the ICMP protocol, you must also specify the ICMP type and code. You
+-- can use -1 for the type or code to mean all types or all codes.
+--
+-- Rule changes are propagated to affected instances as quickly as
+-- possible. However, a small delay might occur.
+--
+-- For information about VPC security group quotas, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html Amazon VPC quotas>.
+module Amazonka.EC2.AuthorizeSecurityGroupEgress
+  ( -- * Creating a Request
+    AuthorizeSecurityGroupEgress (..),
+    newAuthorizeSecurityGroupEgress,
+
+    -- * Request Lenses
+    authorizeSecurityGroupEgress_cidrIp,
+    authorizeSecurityGroupEgress_dryRun,
+    authorizeSecurityGroupEgress_fromPort,
+    authorizeSecurityGroupEgress_ipPermissions,
+    authorizeSecurityGroupEgress_ipProtocol,
+    authorizeSecurityGroupEgress_sourceSecurityGroupName,
+    authorizeSecurityGroupEgress_sourceSecurityGroupOwnerId,
+    authorizeSecurityGroupEgress_tagSpecifications,
+    authorizeSecurityGroupEgress_toPort,
+    authorizeSecurityGroupEgress_groupId,
+
+    -- * Destructuring the Response
+    AuthorizeSecurityGroupEgressResponse (..),
+    newAuthorizeSecurityGroupEgressResponse,
+
+    -- * Response Lenses
+    authorizeSecurityGroupEgressResponse_return,
+    authorizeSecurityGroupEgressResponse_securityGroupRules,
+    authorizeSecurityGroupEgressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAuthorizeSecurityGroupEgress' smart constructor.
+data AuthorizeSecurityGroupEgress = AuthorizeSecurityGroupEgress'
+  { -- | Not supported. Use a set of IP permissions to specify the CIDR.
+    cidrIp :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Not supported. Use a set of IP permissions to specify the port.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The sets of IP permissions. You can\'t specify a destination security
+    -- group and a CIDR IP address range in the same set of permissions.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | Not supported. Use a set of IP permissions to specify the protocol name
+    -- or number.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | Not supported. Use a set of IP permissions to specify a destination
+    -- security group.
+    sourceSecurityGroupName :: Prelude.Maybe Prelude.Text,
+    -- | Not supported. Use a set of IP permissions to specify a destination
+    -- security group.
+    sourceSecurityGroupOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The tags applied to the security group rule.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | Not supported. Use a set of IP permissions to specify the port.
+    toPort :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the security group.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeSecurityGroupEgress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIp', 'authorizeSecurityGroupEgress_cidrIp' - Not supported. Use a set of IP permissions to specify the CIDR.
+--
+-- 'dryRun', 'authorizeSecurityGroupEgress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fromPort', 'authorizeSecurityGroupEgress_fromPort' - Not supported. Use a set of IP permissions to specify the port.
+--
+-- 'ipPermissions', 'authorizeSecurityGroupEgress_ipPermissions' - The sets of IP permissions. You can\'t specify a destination security
+-- group and a CIDR IP address range in the same set of permissions.
+--
+-- 'ipProtocol', 'authorizeSecurityGroupEgress_ipProtocol' - Not supported. Use a set of IP permissions to specify the protocol name
+-- or number.
+--
+-- 'sourceSecurityGroupName', 'authorizeSecurityGroupEgress_sourceSecurityGroupName' - Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+--
+-- 'sourceSecurityGroupOwnerId', 'authorizeSecurityGroupEgress_sourceSecurityGroupOwnerId' - Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+--
+-- 'tagSpecifications', 'authorizeSecurityGroupEgress_tagSpecifications' - The tags applied to the security group rule.
+--
+-- 'toPort', 'authorizeSecurityGroupEgress_toPort' - Not supported. Use a set of IP permissions to specify the port.
+--
+-- 'groupId', 'authorizeSecurityGroupEgress_groupId' - The ID of the security group.
+newAuthorizeSecurityGroupEgress ::
+  -- | 'groupId'
+  Prelude.Text ->
+  AuthorizeSecurityGroupEgress
+newAuthorizeSecurityGroupEgress pGroupId_ =
+  AuthorizeSecurityGroupEgress'
+    { cidrIp =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      fromPort = Prelude.Nothing,
+      ipPermissions = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      sourceSecurityGroupName = Prelude.Nothing,
+      sourceSecurityGroupOwnerId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      toPort = Prelude.Nothing,
+      groupId = pGroupId_
+    }
+
+-- | Not supported. Use a set of IP permissions to specify the CIDR.
+authorizeSecurityGroupEgress_cidrIp :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupEgress_cidrIp = Lens.lens (\AuthorizeSecurityGroupEgress' {cidrIp} -> cidrIp) (\s@AuthorizeSecurityGroupEgress' {} a -> s {cidrIp = a} :: AuthorizeSecurityGroupEgress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+authorizeSecurityGroupEgress_dryRun :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Bool)
+authorizeSecurityGroupEgress_dryRun = Lens.lens (\AuthorizeSecurityGroupEgress' {dryRun} -> dryRun) (\s@AuthorizeSecurityGroupEgress' {} a -> s {dryRun = a} :: AuthorizeSecurityGroupEgress)
+
+-- | Not supported. Use a set of IP permissions to specify the port.
+authorizeSecurityGroupEgress_fromPort :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Int)
+authorizeSecurityGroupEgress_fromPort = Lens.lens (\AuthorizeSecurityGroupEgress' {fromPort} -> fromPort) (\s@AuthorizeSecurityGroupEgress' {} a -> s {fromPort = a} :: AuthorizeSecurityGroupEgress)
+
+-- | The sets of IP permissions. You can\'t specify a destination security
+-- group and a CIDR IP address range in the same set of permissions.
+authorizeSecurityGroupEgress_ipPermissions :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe [IpPermission])
+authorizeSecurityGroupEgress_ipPermissions = Lens.lens (\AuthorizeSecurityGroupEgress' {ipPermissions} -> ipPermissions) (\s@AuthorizeSecurityGroupEgress' {} a -> s {ipPermissions = a} :: AuthorizeSecurityGroupEgress) Prelude.. Lens.mapping Lens.coerced
+
+-- | Not supported. Use a set of IP permissions to specify the protocol name
+-- or number.
+authorizeSecurityGroupEgress_ipProtocol :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupEgress_ipProtocol = Lens.lens (\AuthorizeSecurityGroupEgress' {ipProtocol} -> ipProtocol) (\s@AuthorizeSecurityGroupEgress' {} a -> s {ipProtocol = a} :: AuthorizeSecurityGroupEgress)
+
+-- | Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+authorizeSecurityGroupEgress_sourceSecurityGroupName :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupEgress_sourceSecurityGroupName = Lens.lens (\AuthorizeSecurityGroupEgress' {sourceSecurityGroupName} -> sourceSecurityGroupName) (\s@AuthorizeSecurityGroupEgress' {} a -> s {sourceSecurityGroupName = a} :: AuthorizeSecurityGroupEgress)
+
+-- | Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+authorizeSecurityGroupEgress_sourceSecurityGroupOwnerId :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupEgress_sourceSecurityGroupOwnerId = Lens.lens (\AuthorizeSecurityGroupEgress' {sourceSecurityGroupOwnerId} -> sourceSecurityGroupOwnerId) (\s@AuthorizeSecurityGroupEgress' {} a -> s {sourceSecurityGroupOwnerId = a} :: AuthorizeSecurityGroupEgress)
+
+-- | The tags applied to the security group rule.
+authorizeSecurityGroupEgress_tagSpecifications :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe [TagSpecification])
+authorizeSecurityGroupEgress_tagSpecifications = Lens.lens (\AuthorizeSecurityGroupEgress' {tagSpecifications} -> tagSpecifications) (\s@AuthorizeSecurityGroupEgress' {} a -> s {tagSpecifications = a} :: AuthorizeSecurityGroupEgress) Prelude.. Lens.mapping Lens.coerced
+
+-- | Not supported. Use a set of IP permissions to specify the port.
+authorizeSecurityGroupEgress_toPort :: Lens.Lens' AuthorizeSecurityGroupEgress (Prelude.Maybe Prelude.Int)
+authorizeSecurityGroupEgress_toPort = Lens.lens (\AuthorizeSecurityGroupEgress' {toPort} -> toPort) (\s@AuthorizeSecurityGroupEgress' {} a -> s {toPort = a} :: AuthorizeSecurityGroupEgress)
+
+-- | The ID of the security group.
+authorizeSecurityGroupEgress_groupId :: Lens.Lens' AuthorizeSecurityGroupEgress Prelude.Text
+authorizeSecurityGroupEgress_groupId = Lens.lens (\AuthorizeSecurityGroupEgress' {groupId} -> groupId) (\s@AuthorizeSecurityGroupEgress' {} a -> s {groupId = a} :: AuthorizeSecurityGroupEgress)
+
+instance Core.AWSRequest AuthorizeSecurityGroupEgress where
+  type
+    AWSResponse AuthorizeSecurityGroupEgress =
+      AuthorizeSecurityGroupEgressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AuthorizeSecurityGroupEgressResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> ( x
+                            Data..@? "securityGroupRuleSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AuthorizeSecurityGroupEgress
+  where
+  hashWithSalt _salt AuthorizeSecurityGroupEgress' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIp
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` ipPermissions
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` sourceSecurityGroupName
+      `Prelude.hashWithSalt` sourceSecurityGroupOwnerId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` toPort
+      `Prelude.hashWithSalt` groupId
+
+instance Prelude.NFData AuthorizeSecurityGroupEgress where
+  rnf AuthorizeSecurityGroupEgress' {..} =
+    Prelude.rnf cidrIp
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupName
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupOwnerId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf toPort
+      `Prelude.seq` Prelude.rnf groupId
+
+instance Data.ToHeaders AuthorizeSecurityGroupEgress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AuthorizeSecurityGroupEgress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AuthorizeSecurityGroupEgress where
+  toQuery AuthorizeSecurityGroupEgress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AuthorizeSecurityGroupEgress" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrIp" Data.=: cidrIp,
+        "DryRun" Data.=: dryRun,
+        "FromPort" Data.=: fromPort,
+        Data.toQuery
+          ( Data.toQueryList "IpPermissions"
+              Prelude.<$> ipPermissions
+          ),
+        "IpProtocol" Data.=: ipProtocol,
+        "SourceSecurityGroupName"
+          Data.=: sourceSecurityGroupName,
+        "SourceSecurityGroupOwnerId"
+          Data.=: sourceSecurityGroupOwnerId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "ToPort" Data.=: toPort,
+        "GroupId" Data.=: groupId
+      ]
+
+-- | /See:/ 'newAuthorizeSecurityGroupEgressResponse' smart constructor.
+data AuthorizeSecurityGroupEgressResponse = AuthorizeSecurityGroupEgressResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the outbound (egress) security group rules that were
+    -- added.
+    securityGroupRules :: Prelude.Maybe [SecurityGroupRule],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeSecurityGroupEgressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'authorizeSecurityGroupEgressResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'securityGroupRules', 'authorizeSecurityGroupEgressResponse_securityGroupRules' - Information about the outbound (egress) security group rules that were
+-- added.
+--
+-- 'httpStatus', 'authorizeSecurityGroupEgressResponse_httpStatus' - The response's http status code.
+newAuthorizeSecurityGroupEgressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AuthorizeSecurityGroupEgressResponse
+newAuthorizeSecurityGroupEgressResponse pHttpStatus_ =
+  AuthorizeSecurityGroupEgressResponse'
+    { return' =
+        Prelude.Nothing,
+      securityGroupRules = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+authorizeSecurityGroupEgressResponse_return :: Lens.Lens' AuthorizeSecurityGroupEgressResponse (Prelude.Maybe Prelude.Bool)
+authorizeSecurityGroupEgressResponse_return = Lens.lens (\AuthorizeSecurityGroupEgressResponse' {return'} -> return') (\s@AuthorizeSecurityGroupEgressResponse' {} a -> s {return' = a} :: AuthorizeSecurityGroupEgressResponse)
+
+-- | Information about the outbound (egress) security group rules that were
+-- added.
+authorizeSecurityGroupEgressResponse_securityGroupRules :: Lens.Lens' AuthorizeSecurityGroupEgressResponse (Prelude.Maybe [SecurityGroupRule])
+authorizeSecurityGroupEgressResponse_securityGroupRules = Lens.lens (\AuthorizeSecurityGroupEgressResponse' {securityGroupRules} -> securityGroupRules) (\s@AuthorizeSecurityGroupEgressResponse' {} a -> s {securityGroupRules = a} :: AuthorizeSecurityGroupEgressResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+authorizeSecurityGroupEgressResponse_httpStatus :: Lens.Lens' AuthorizeSecurityGroupEgressResponse Prelude.Int
+authorizeSecurityGroupEgressResponse_httpStatus = Lens.lens (\AuthorizeSecurityGroupEgressResponse' {httpStatus} -> httpStatus) (\s@AuthorizeSecurityGroupEgressResponse' {} a -> s {httpStatus = a} :: AuthorizeSecurityGroupEgressResponse)
+
+instance
+  Prelude.NFData
+    AuthorizeSecurityGroupEgressResponse
+  where
+  rnf AuthorizeSecurityGroupEgressResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf securityGroupRules
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/AuthorizeSecurityGroupIngress.hs b/gen/Amazonka/EC2/AuthorizeSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/AuthorizeSecurityGroupIngress.hs
@@ -0,0 +1,481 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.AuthorizeSecurityGroupIngress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds the specified inbound (ingress) rules to a security group.
+--
+-- An inbound rule permits instances to receive traffic from the specified
+-- IPv4 or IPv6 CIDR address range, or from the instances that are
+-- associated with the specified destination security groups. When
+-- specifying an inbound rule for your security group in a VPC, the
+-- @IpPermissions@ must include a source for the traffic.
+--
+-- You specify a protocol for each rule (for example, TCP). For TCP and
+-- UDP, you must also specify the destination port or port range. For
+-- ICMP\/ICMPv6, you must also specify the ICMP\/ICMPv6 type and code. You
+-- can use -1 to mean all types or all codes.
+--
+-- Rule changes are propagated to instances within the security group as
+-- quickly as possible. However, a small delay might occur.
+--
+-- For more information about VPC security group quotas, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html Amazon VPC quotas>.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.AuthorizeSecurityGroupIngress
+  ( -- * Creating a Request
+    AuthorizeSecurityGroupIngress (..),
+    newAuthorizeSecurityGroupIngress,
+
+    -- * Request Lenses
+    authorizeSecurityGroupIngress_cidrIp,
+    authorizeSecurityGroupIngress_dryRun,
+    authorizeSecurityGroupIngress_fromPort,
+    authorizeSecurityGroupIngress_groupId,
+    authorizeSecurityGroupIngress_groupName,
+    authorizeSecurityGroupIngress_ipPermissions,
+    authorizeSecurityGroupIngress_ipProtocol,
+    authorizeSecurityGroupIngress_sourceSecurityGroupName,
+    authorizeSecurityGroupIngress_sourceSecurityGroupOwnerId,
+    authorizeSecurityGroupIngress_tagSpecifications,
+    authorizeSecurityGroupIngress_toPort,
+
+    -- * Destructuring the Response
+    AuthorizeSecurityGroupIngressResponse (..),
+    newAuthorizeSecurityGroupIngressResponse,
+
+    -- * Response Lenses
+    authorizeSecurityGroupIngressResponse_return,
+    authorizeSecurityGroupIngressResponse_securityGroupRules,
+    authorizeSecurityGroupIngressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAuthorizeSecurityGroupIngress' smart constructor.
+data AuthorizeSecurityGroupIngress = AuthorizeSecurityGroupIngress'
+  { -- | The IPv4 address range, in CIDR format. You can\'t specify this
+    -- parameter when specifying a source security group. To specify an IPv6
+    -- address range, use a set of IP permissions.
+    --
+    -- Alternatively, use a set of IP permissions to specify multiple rules and
+    -- a description for the rule.
+    cidrIp :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The start of port range for the TCP and UDP protocols, or an ICMP type
+    -- number. For the ICMP type number, use @-1@ to specify all types. If you
+    -- specify all ICMP types, you must specify all codes.
+    --
+    -- Alternatively, use a set of IP permissions to specify multiple rules and
+    -- a description for the rule.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | 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.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic, default VPC] The name 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.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The sets of IP permissions.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | The IP protocol name (@tcp@, @udp@, @icmp@) or number (see
+    -- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+    -- To specify @icmpv6@, use a set of IP permissions.
+    --
+    -- [VPC only] Use @-1@ to specify all protocols. If you specify @-1@ or a
+    -- protocol other than @tcp@, @udp@, or @icmp@, traffic on all ports is
+    -- allowed, regardless of any ports you specify.
+    --
+    -- Alternatively, use a set of IP permissions to specify multiple rules and
+    -- a description for the rule.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic, default VPC] The name of the source security group. You
+    -- can\'t specify this parameter in combination with the following
+    -- parameters: the CIDR IP address range, the start of the port range, the
+    -- IP protocol, and the end of the port range. Creates rules that grant
+    -- full ICMP, UDP, and TCP access. To create a rule with a specific IP
+    -- protocol and port range, use a set of IP permissions instead. For
+    -- EC2-VPC, the source security group must be in the same VPC.
+    sourceSecurityGroupName :: Prelude.Maybe Prelude.Text,
+    -- | [nondefault VPC] The Amazon Web Services account ID for the source
+    -- security group, if the source security group is in a different account.
+    -- You can\'t specify this parameter in combination with the following
+    -- parameters: the CIDR IP address range, the IP protocol, the start of the
+    -- port range, and the end of the port range. Creates rules that grant full
+    -- ICMP, UDP, and TCP access. To create a rule with a specific IP protocol
+    -- and port range, use a set of IP permissions instead.
+    sourceSecurityGroupOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | [VPC Only] The tags applied to the security group rule.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The end of port range for the TCP and UDP protocols, or an ICMP code
+    -- number. For the ICMP code number, use @-1@ to specify all codes. If you
+    -- specify all ICMP types, you must specify all codes.
+    --
+    -- Alternatively, use a set of IP permissions to specify multiple rules and
+    -- a description for the rule.
+    toPort :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeSecurityGroupIngress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIp', 'authorizeSecurityGroupIngress_cidrIp' - The IPv4 address range, in CIDR format. You can\'t specify this
+-- parameter when specifying a source security group. To specify an IPv6
+-- address range, use a set of IP permissions.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+--
+-- 'dryRun', 'authorizeSecurityGroupIngress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fromPort', 'authorizeSecurityGroupIngress_fromPort' - The start of port range for the TCP and UDP protocols, or an ICMP type
+-- number. For the ICMP type number, use @-1@ to specify all types. If you
+-- specify all ICMP types, you must specify all codes.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+--
+-- 'groupId', 'authorizeSecurityGroupIngress_groupId' - 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.
+--
+-- 'groupName', 'authorizeSecurityGroupIngress_groupName' - [EC2-Classic, default VPC] The name 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.
+--
+-- 'ipPermissions', 'authorizeSecurityGroupIngress_ipPermissions' - The sets of IP permissions.
+--
+-- 'ipProtocol', 'authorizeSecurityGroupIngress_ipProtocol' - The IP protocol name (@tcp@, @udp@, @icmp@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+-- To specify @icmpv6@, use a set of IP permissions.
+--
+-- [VPC only] Use @-1@ to specify all protocols. If you specify @-1@ or a
+-- protocol other than @tcp@, @udp@, or @icmp@, traffic on all ports is
+-- allowed, regardless of any ports you specify.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+--
+-- 'sourceSecurityGroupName', 'authorizeSecurityGroupIngress_sourceSecurityGroupName' - [EC2-Classic, default VPC] The name of the source security group. You
+-- can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the start of the port range, the
+-- IP protocol, and the end of the port range. Creates rules that grant
+-- full ICMP, UDP, and TCP access. To create a rule with a specific IP
+-- protocol and port range, use a set of IP permissions instead. For
+-- EC2-VPC, the source security group must be in the same VPC.
+--
+-- 'sourceSecurityGroupOwnerId', 'authorizeSecurityGroupIngress_sourceSecurityGroupOwnerId' - [nondefault VPC] The Amazon Web Services account ID for the source
+-- security group, if the source security group is in a different account.
+-- You can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the IP protocol, the start of the
+-- port range, and the end of the port range. Creates rules that grant full
+-- ICMP, UDP, and TCP access. To create a rule with a specific IP protocol
+-- and port range, use a set of IP permissions instead.
+--
+-- 'tagSpecifications', 'authorizeSecurityGroupIngress_tagSpecifications' - [VPC Only] The tags applied to the security group rule.
+--
+-- 'toPort', 'authorizeSecurityGroupIngress_toPort' - The end of port range for the TCP and UDP protocols, or an ICMP code
+-- number. For the ICMP code number, use @-1@ to specify all codes. If you
+-- specify all ICMP types, you must specify all codes.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+newAuthorizeSecurityGroupIngress ::
+  AuthorizeSecurityGroupIngress
+newAuthorizeSecurityGroupIngress =
+  AuthorizeSecurityGroupIngress'
+    { cidrIp =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      fromPort = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      ipPermissions = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      sourceSecurityGroupName = Prelude.Nothing,
+      sourceSecurityGroupOwnerId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The IPv4 address range, in CIDR format. You can\'t specify this
+-- parameter when specifying a source security group. To specify an IPv6
+-- address range, use a set of IP permissions.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+authorizeSecurityGroupIngress_cidrIp :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupIngress_cidrIp = Lens.lens (\AuthorizeSecurityGroupIngress' {cidrIp} -> cidrIp) (\s@AuthorizeSecurityGroupIngress' {} a -> s {cidrIp = a} :: AuthorizeSecurityGroupIngress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+authorizeSecurityGroupIngress_dryRun :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Bool)
+authorizeSecurityGroupIngress_dryRun = Lens.lens (\AuthorizeSecurityGroupIngress' {dryRun} -> dryRun) (\s@AuthorizeSecurityGroupIngress' {} a -> s {dryRun = a} :: AuthorizeSecurityGroupIngress)
+
+-- | The start of port range for the TCP and UDP protocols, or an ICMP type
+-- number. For the ICMP type number, use @-1@ to specify all types. If you
+-- specify all ICMP types, you must specify all codes.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+authorizeSecurityGroupIngress_fromPort :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Int)
+authorizeSecurityGroupIngress_fromPort = Lens.lens (\AuthorizeSecurityGroupIngress' {fromPort} -> fromPort) (\s@AuthorizeSecurityGroupIngress' {} a -> s {fromPort = a} :: AuthorizeSecurityGroupIngress)
+
+-- | 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.
+authorizeSecurityGroupIngress_groupId :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupIngress_groupId = Lens.lens (\AuthorizeSecurityGroupIngress' {groupId} -> groupId) (\s@AuthorizeSecurityGroupIngress' {} a -> s {groupId = a} :: AuthorizeSecurityGroupIngress)
+
+-- | [EC2-Classic, default VPC] The name 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.
+authorizeSecurityGroupIngress_groupName :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupIngress_groupName = Lens.lens (\AuthorizeSecurityGroupIngress' {groupName} -> groupName) (\s@AuthorizeSecurityGroupIngress' {} a -> s {groupName = a} :: AuthorizeSecurityGroupIngress)
+
+-- | The sets of IP permissions.
+authorizeSecurityGroupIngress_ipPermissions :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe [IpPermission])
+authorizeSecurityGroupIngress_ipPermissions = Lens.lens (\AuthorizeSecurityGroupIngress' {ipPermissions} -> ipPermissions) (\s@AuthorizeSecurityGroupIngress' {} a -> s {ipPermissions = a} :: AuthorizeSecurityGroupIngress) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP protocol name (@tcp@, @udp@, @icmp@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+-- To specify @icmpv6@, use a set of IP permissions.
+--
+-- [VPC only] Use @-1@ to specify all protocols. If you specify @-1@ or a
+-- protocol other than @tcp@, @udp@, or @icmp@, traffic on all ports is
+-- allowed, regardless of any ports you specify.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+authorizeSecurityGroupIngress_ipProtocol :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupIngress_ipProtocol = Lens.lens (\AuthorizeSecurityGroupIngress' {ipProtocol} -> ipProtocol) (\s@AuthorizeSecurityGroupIngress' {} a -> s {ipProtocol = a} :: AuthorizeSecurityGroupIngress)
+
+-- | [EC2-Classic, default VPC] The name of the source security group. You
+-- can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the start of the port range, the
+-- IP protocol, and the end of the port range. Creates rules that grant
+-- full ICMP, UDP, and TCP access. To create a rule with a specific IP
+-- protocol and port range, use a set of IP permissions instead. For
+-- EC2-VPC, the source security group must be in the same VPC.
+authorizeSecurityGroupIngress_sourceSecurityGroupName :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupIngress_sourceSecurityGroupName = Lens.lens (\AuthorizeSecurityGroupIngress' {sourceSecurityGroupName} -> sourceSecurityGroupName) (\s@AuthorizeSecurityGroupIngress' {} a -> s {sourceSecurityGroupName = a} :: AuthorizeSecurityGroupIngress)
+
+-- | [nondefault VPC] The Amazon Web Services account ID for the source
+-- security group, if the source security group is in a different account.
+-- You can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the IP protocol, the start of the
+-- port range, and the end of the port range. Creates rules that grant full
+-- ICMP, UDP, and TCP access. To create a rule with a specific IP protocol
+-- and port range, use a set of IP permissions instead.
+authorizeSecurityGroupIngress_sourceSecurityGroupOwnerId :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+authorizeSecurityGroupIngress_sourceSecurityGroupOwnerId = Lens.lens (\AuthorizeSecurityGroupIngress' {sourceSecurityGroupOwnerId} -> sourceSecurityGroupOwnerId) (\s@AuthorizeSecurityGroupIngress' {} a -> s {sourceSecurityGroupOwnerId = a} :: AuthorizeSecurityGroupIngress)
+
+-- | [VPC Only] The tags applied to the security group rule.
+authorizeSecurityGroupIngress_tagSpecifications :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe [TagSpecification])
+authorizeSecurityGroupIngress_tagSpecifications = Lens.lens (\AuthorizeSecurityGroupIngress' {tagSpecifications} -> tagSpecifications) (\s@AuthorizeSecurityGroupIngress' {} a -> s {tagSpecifications = a} :: AuthorizeSecurityGroupIngress) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end of port range for the TCP and UDP protocols, or an ICMP code
+-- number. For the ICMP code number, use @-1@ to specify all codes. If you
+-- specify all ICMP types, you must specify all codes.
+--
+-- Alternatively, use a set of IP permissions to specify multiple rules and
+-- a description for the rule.
+authorizeSecurityGroupIngress_toPort :: Lens.Lens' AuthorizeSecurityGroupIngress (Prelude.Maybe Prelude.Int)
+authorizeSecurityGroupIngress_toPort = Lens.lens (\AuthorizeSecurityGroupIngress' {toPort} -> toPort) (\s@AuthorizeSecurityGroupIngress' {} a -> s {toPort = a} :: AuthorizeSecurityGroupIngress)
+
+instance
+  Core.AWSRequest
+    AuthorizeSecurityGroupIngress
+  where
+  type
+    AWSResponse AuthorizeSecurityGroupIngress =
+      AuthorizeSecurityGroupIngressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          AuthorizeSecurityGroupIngressResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> ( x
+                            Data..@? "securityGroupRuleSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AuthorizeSecurityGroupIngress
+  where
+  hashWithSalt _salt AuthorizeSecurityGroupIngress' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIp
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` ipPermissions
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` sourceSecurityGroupName
+      `Prelude.hashWithSalt` sourceSecurityGroupOwnerId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData AuthorizeSecurityGroupIngress where
+  rnf AuthorizeSecurityGroupIngress' {..} =
+    Prelude.rnf cidrIp
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupName
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupOwnerId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf toPort
+
+instance Data.ToHeaders AuthorizeSecurityGroupIngress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath AuthorizeSecurityGroupIngress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AuthorizeSecurityGroupIngress where
+  toQuery AuthorizeSecurityGroupIngress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "AuthorizeSecurityGroupIngress" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrIp" Data.=: cidrIp,
+        "DryRun" Data.=: dryRun,
+        "FromPort" Data.=: fromPort,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName,
+        Data.toQuery
+          ( Data.toQueryList "IpPermissions"
+              Prelude.<$> ipPermissions
+          ),
+        "IpProtocol" Data.=: ipProtocol,
+        "SourceSecurityGroupName"
+          Data.=: sourceSecurityGroupName,
+        "SourceSecurityGroupOwnerId"
+          Data.=: sourceSecurityGroupOwnerId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "ToPort" Data.=: toPort
+      ]
+
+-- | /See:/ 'newAuthorizeSecurityGroupIngressResponse' smart constructor.
+data AuthorizeSecurityGroupIngressResponse = AuthorizeSecurityGroupIngressResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the inbound (ingress) security group rules that were
+    -- added.
+    securityGroupRules :: Prelude.Maybe [SecurityGroupRule],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizeSecurityGroupIngressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'authorizeSecurityGroupIngressResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'securityGroupRules', 'authorizeSecurityGroupIngressResponse_securityGroupRules' - Information about the inbound (ingress) security group rules that were
+-- added.
+--
+-- 'httpStatus', 'authorizeSecurityGroupIngressResponse_httpStatus' - The response's http status code.
+newAuthorizeSecurityGroupIngressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AuthorizeSecurityGroupIngressResponse
+newAuthorizeSecurityGroupIngressResponse pHttpStatus_ =
+  AuthorizeSecurityGroupIngressResponse'
+    { return' =
+        Prelude.Nothing,
+      securityGroupRules = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+authorizeSecurityGroupIngressResponse_return :: Lens.Lens' AuthorizeSecurityGroupIngressResponse (Prelude.Maybe Prelude.Bool)
+authorizeSecurityGroupIngressResponse_return = Lens.lens (\AuthorizeSecurityGroupIngressResponse' {return'} -> return') (\s@AuthorizeSecurityGroupIngressResponse' {} a -> s {return' = a} :: AuthorizeSecurityGroupIngressResponse)
+
+-- | Information about the inbound (ingress) security group rules that were
+-- added.
+authorizeSecurityGroupIngressResponse_securityGroupRules :: Lens.Lens' AuthorizeSecurityGroupIngressResponse (Prelude.Maybe [SecurityGroupRule])
+authorizeSecurityGroupIngressResponse_securityGroupRules = Lens.lens (\AuthorizeSecurityGroupIngressResponse' {securityGroupRules} -> securityGroupRules) (\s@AuthorizeSecurityGroupIngressResponse' {} a -> s {securityGroupRules = a} :: AuthorizeSecurityGroupIngressResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+authorizeSecurityGroupIngressResponse_httpStatus :: Lens.Lens' AuthorizeSecurityGroupIngressResponse Prelude.Int
+authorizeSecurityGroupIngressResponse_httpStatus = Lens.lens (\AuthorizeSecurityGroupIngressResponse' {httpStatus} -> httpStatus) (\s@AuthorizeSecurityGroupIngressResponse' {} a -> s {httpStatus = a} :: AuthorizeSecurityGroupIngressResponse)
+
+instance
+  Prelude.NFData
+    AuthorizeSecurityGroupIngressResponse
+  where
+  rnf AuthorizeSecurityGroupIngressResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf securityGroupRules
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/BundleInstance.hs b/gen/Amazonka/EC2/BundleInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/BundleInstance.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.BundleInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Bundles an Amazon instance store-backed Windows instance.
+--
+-- During bundling, only the root device volume (C:\\) is bundled. Data on
+-- other instance store volumes is not preserved.
+--
+-- This action is not applicable for Linux\/Unix instances or Windows
+-- instances that are backed by Amazon EBS.
+module Amazonka.EC2.BundleInstance
+  ( -- * Creating a Request
+    BundleInstance (..),
+    newBundleInstance,
+
+    -- * Request Lenses
+    bundleInstance_dryRun,
+    bundleInstance_instanceId,
+    bundleInstance_storage,
+
+    -- * Destructuring the Response
+    BundleInstanceResponse (..),
+    newBundleInstanceResponse,
+
+    -- * Response Lenses
+    bundleInstanceResponse_bundleTask,
+    bundleInstanceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for BundleInstance.
+--
+-- /See:/ 'newBundleInstance' smart constructor.
+data BundleInstance = BundleInstance'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance to bundle.
+    --
+    -- Type: String
+    --
+    -- Default: None
+    --
+    -- Required: Yes
+    instanceId :: Prelude.Text,
+    -- | The bucket in which to store the AMI. You can specify a bucket that you
+    -- already own or a new bucket that Amazon EC2 creates on your behalf. If
+    -- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+    -- error.
+    storage :: Storage
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BundleInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'bundleInstance_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'bundleInstance_instanceId' - The ID of the instance to bundle.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Required: Yes
+--
+-- 'storage', 'bundleInstance_storage' - The bucket in which to store the AMI. You can specify a bucket that you
+-- already own or a new bucket that Amazon EC2 creates on your behalf. If
+-- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+-- error.
+newBundleInstance ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'storage'
+  Storage ->
+  BundleInstance
+newBundleInstance pInstanceId_ pStorage_ =
+  BundleInstance'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_,
+      storage = pStorage_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+bundleInstance_dryRun :: Lens.Lens' BundleInstance (Prelude.Maybe Prelude.Bool)
+bundleInstance_dryRun = Lens.lens (\BundleInstance' {dryRun} -> dryRun) (\s@BundleInstance' {} a -> s {dryRun = a} :: BundleInstance)
+
+-- | The ID of the instance to bundle.
+--
+-- Type: String
+--
+-- Default: None
+--
+-- Required: Yes
+bundleInstance_instanceId :: Lens.Lens' BundleInstance Prelude.Text
+bundleInstance_instanceId = Lens.lens (\BundleInstance' {instanceId} -> instanceId) (\s@BundleInstance' {} a -> s {instanceId = a} :: BundleInstance)
+
+-- | The bucket in which to store the AMI. You can specify a bucket that you
+-- already own or a new bucket that Amazon EC2 creates on your behalf. If
+-- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+-- error.
+bundleInstance_storage :: Lens.Lens' BundleInstance Storage
+bundleInstance_storage = Lens.lens (\BundleInstance' {storage} -> storage) (\s@BundleInstance' {} a -> s {storage = a} :: BundleInstance)
+
+instance Core.AWSRequest BundleInstance where
+  type
+    AWSResponse BundleInstance =
+      BundleInstanceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          BundleInstanceResponse'
+            Prelude.<$> (x Data..@? "bundleInstanceTask")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BundleInstance where
+  hashWithSalt _salt BundleInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` storage
+
+instance Prelude.NFData BundleInstance where
+  rnf BundleInstance' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf storage
+
+instance Data.ToHeaders BundleInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath BundleInstance where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BundleInstance where
+  toQuery BundleInstance' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("BundleInstance" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId,
+        "Storage" Data.=: storage
+      ]
+
+-- | Contains the output of BundleInstance.
+--
+-- /See:/ 'newBundleInstanceResponse' smart constructor.
+data BundleInstanceResponse = BundleInstanceResponse'
+  { -- | Information about the bundle task.
+    bundleTask :: Prelude.Maybe BundleTask,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BundleInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleTask', 'bundleInstanceResponse_bundleTask' - Information about the bundle task.
+--
+-- 'httpStatus', 'bundleInstanceResponse_httpStatus' - The response's http status code.
+newBundleInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BundleInstanceResponse
+newBundleInstanceResponse pHttpStatus_ =
+  BundleInstanceResponse'
+    { bundleTask =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the bundle task.
+bundleInstanceResponse_bundleTask :: Lens.Lens' BundleInstanceResponse (Prelude.Maybe BundleTask)
+bundleInstanceResponse_bundleTask = Lens.lens (\BundleInstanceResponse' {bundleTask} -> bundleTask) (\s@BundleInstanceResponse' {} a -> s {bundleTask = a} :: BundleInstanceResponse)
+
+-- | The response's http status code.
+bundleInstanceResponse_httpStatus :: Lens.Lens' BundleInstanceResponse Prelude.Int
+bundleInstanceResponse_httpStatus = Lens.lens (\BundleInstanceResponse' {httpStatus} -> httpStatus) (\s@BundleInstanceResponse' {} a -> s {httpStatus = a} :: BundleInstanceResponse)
+
+instance Prelude.NFData BundleInstanceResponse where
+  rnf BundleInstanceResponse' {..} =
+    Prelude.rnf bundleTask
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelBundleTask.hs b/gen/Amazonka/EC2/CancelBundleTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelBundleTask.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelBundleTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels a bundling operation for an instance store-backed Windows
+-- instance.
+module Amazonka.EC2.CancelBundleTask
+  ( -- * Creating a Request
+    CancelBundleTask (..),
+    newCancelBundleTask,
+
+    -- * Request Lenses
+    cancelBundleTask_dryRun,
+    cancelBundleTask_bundleId,
+
+    -- * Destructuring the Response
+    CancelBundleTaskResponse (..),
+    newCancelBundleTaskResponse,
+
+    -- * Response Lenses
+    cancelBundleTaskResponse_bundleTask,
+    cancelBundleTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CancelBundleTask.
+--
+-- /See:/ 'newCancelBundleTask' smart constructor.
+data CancelBundleTask = CancelBundleTask'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the bundle task.
+    bundleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBundleTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelBundleTask_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'bundleId', 'cancelBundleTask_bundleId' - The ID of the bundle task.
+newCancelBundleTask ::
+  -- | 'bundleId'
+  Prelude.Text ->
+  CancelBundleTask
+newCancelBundleTask pBundleId_ =
+  CancelBundleTask'
+    { dryRun = Prelude.Nothing,
+      bundleId = pBundleId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelBundleTask_dryRun :: Lens.Lens' CancelBundleTask (Prelude.Maybe Prelude.Bool)
+cancelBundleTask_dryRun = Lens.lens (\CancelBundleTask' {dryRun} -> dryRun) (\s@CancelBundleTask' {} a -> s {dryRun = a} :: CancelBundleTask)
+
+-- | The ID of the bundle task.
+cancelBundleTask_bundleId :: Lens.Lens' CancelBundleTask Prelude.Text
+cancelBundleTask_bundleId = Lens.lens (\CancelBundleTask' {bundleId} -> bundleId) (\s@CancelBundleTask' {} a -> s {bundleId = a} :: CancelBundleTask)
+
+instance Core.AWSRequest CancelBundleTask where
+  type
+    AWSResponse CancelBundleTask =
+      CancelBundleTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelBundleTaskResponse'
+            Prelude.<$> (x Data..@? "bundleInstanceTask")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelBundleTask where
+  hashWithSalt _salt CancelBundleTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` bundleId
+
+instance Prelude.NFData CancelBundleTask where
+  rnf CancelBundleTask' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf bundleId
+
+instance Data.ToHeaders CancelBundleTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelBundleTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelBundleTask where
+  toQuery CancelBundleTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelBundleTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "BundleId" Data.=: bundleId
+      ]
+
+-- | Contains the output of CancelBundleTask.
+--
+-- /See:/ 'newCancelBundleTaskResponse' smart constructor.
+data CancelBundleTaskResponse = CancelBundleTaskResponse'
+  { -- | Information about the bundle task.
+    bundleTask :: Prelude.Maybe BundleTask,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelBundleTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleTask', 'cancelBundleTaskResponse_bundleTask' - Information about the bundle task.
+--
+-- 'httpStatus', 'cancelBundleTaskResponse_httpStatus' - The response's http status code.
+newCancelBundleTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelBundleTaskResponse
+newCancelBundleTaskResponse pHttpStatus_ =
+  CancelBundleTaskResponse'
+    { bundleTask =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the bundle task.
+cancelBundleTaskResponse_bundleTask :: Lens.Lens' CancelBundleTaskResponse (Prelude.Maybe BundleTask)
+cancelBundleTaskResponse_bundleTask = Lens.lens (\CancelBundleTaskResponse' {bundleTask} -> bundleTask) (\s@CancelBundleTaskResponse' {} a -> s {bundleTask = a} :: CancelBundleTaskResponse)
+
+-- | The response's http status code.
+cancelBundleTaskResponse_httpStatus :: Lens.Lens' CancelBundleTaskResponse Prelude.Int
+cancelBundleTaskResponse_httpStatus = Lens.lens (\CancelBundleTaskResponse' {httpStatus} -> httpStatus) (\s@CancelBundleTaskResponse' {} a -> s {httpStatus = a} :: CancelBundleTaskResponse)
+
+instance Prelude.NFData CancelBundleTaskResponse where
+  rnf CancelBundleTaskResponse' {..} =
+    Prelude.rnf bundleTask
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelCapacityReservation.hs b/gen/Amazonka/EC2/CancelCapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelCapacityReservation.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelCapacityReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified Capacity Reservation, releases the reserved
+-- capacity, and changes the Capacity Reservation\'s state to @cancelled@.
+--
+-- Instances running in the reserved capacity continue running until you
+-- stop them. Stopped instances that target the Capacity Reservation can no
+-- longer launch. Modify these instances to either target a different
+-- Capacity Reservation, launch On-Demand Instance capacity, or run in any
+-- open Capacity Reservation that has matching attributes and sufficient
+-- capacity.
+module Amazonka.EC2.CancelCapacityReservation
+  ( -- * Creating a Request
+    CancelCapacityReservation (..),
+    newCancelCapacityReservation,
+
+    -- * Request Lenses
+    cancelCapacityReservation_dryRun,
+    cancelCapacityReservation_capacityReservationId,
+
+    -- * Destructuring the Response
+    CancelCapacityReservationResponse (..),
+    newCancelCapacityReservationResponse,
+
+    -- * Response Lenses
+    cancelCapacityReservationResponse_return,
+    cancelCapacityReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelCapacityReservation' smart constructor.
+data CancelCapacityReservation = CancelCapacityReservation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Capacity Reservation to be cancelled.
+    capacityReservationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelCapacityReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelCapacityReservation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'capacityReservationId', 'cancelCapacityReservation_capacityReservationId' - The ID of the Capacity Reservation to be cancelled.
+newCancelCapacityReservation ::
+  -- | 'capacityReservationId'
+  Prelude.Text ->
+  CancelCapacityReservation
+newCancelCapacityReservation pCapacityReservationId_ =
+  CancelCapacityReservation'
+    { dryRun =
+        Prelude.Nothing,
+      capacityReservationId = pCapacityReservationId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelCapacityReservation_dryRun :: Lens.Lens' CancelCapacityReservation (Prelude.Maybe Prelude.Bool)
+cancelCapacityReservation_dryRun = Lens.lens (\CancelCapacityReservation' {dryRun} -> dryRun) (\s@CancelCapacityReservation' {} a -> s {dryRun = a} :: CancelCapacityReservation)
+
+-- | The ID of the Capacity Reservation to be cancelled.
+cancelCapacityReservation_capacityReservationId :: Lens.Lens' CancelCapacityReservation Prelude.Text
+cancelCapacityReservation_capacityReservationId = Lens.lens (\CancelCapacityReservation' {capacityReservationId} -> capacityReservationId) (\s@CancelCapacityReservation' {} a -> s {capacityReservationId = a} :: CancelCapacityReservation)
+
+instance Core.AWSRequest CancelCapacityReservation where
+  type
+    AWSResponse CancelCapacityReservation =
+      CancelCapacityReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelCapacityReservationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelCapacityReservation where
+  hashWithSalt _salt CancelCapacityReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` capacityReservationId
+
+instance Prelude.NFData CancelCapacityReservation where
+  rnf CancelCapacityReservation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf capacityReservationId
+
+instance Data.ToHeaders CancelCapacityReservation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelCapacityReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelCapacityReservation where
+  toQuery CancelCapacityReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelCapacityReservation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "CapacityReservationId"
+          Data.=: capacityReservationId
+      ]
+
+-- | /See:/ 'newCancelCapacityReservationResponse' smart constructor.
+data CancelCapacityReservationResponse = CancelCapacityReservationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelCapacityReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'cancelCapacityReservationResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'cancelCapacityReservationResponse_httpStatus' - The response's http status code.
+newCancelCapacityReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelCapacityReservationResponse
+newCancelCapacityReservationResponse pHttpStatus_ =
+  CancelCapacityReservationResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+cancelCapacityReservationResponse_return :: Lens.Lens' CancelCapacityReservationResponse (Prelude.Maybe Prelude.Bool)
+cancelCapacityReservationResponse_return = Lens.lens (\CancelCapacityReservationResponse' {return'} -> return') (\s@CancelCapacityReservationResponse' {} a -> s {return' = a} :: CancelCapacityReservationResponse)
+
+-- | The response's http status code.
+cancelCapacityReservationResponse_httpStatus :: Lens.Lens' CancelCapacityReservationResponse Prelude.Int
+cancelCapacityReservationResponse_httpStatus = Lens.lens (\CancelCapacityReservationResponse' {httpStatus} -> httpStatus) (\s@CancelCapacityReservationResponse' {} a -> s {httpStatus = a} :: CancelCapacityReservationResponse)
+
+instance
+  Prelude.NFData
+    CancelCapacityReservationResponse
+  where
+  rnf CancelCapacityReservationResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelCapacityReservationFleets.hs b/gen/Amazonka/EC2/CancelCapacityReservationFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelCapacityReservationFleets.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelCapacityReservationFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels one or more Capacity Reservation Fleets. When you cancel a
+-- Capacity Reservation Fleet, the following happens:
+--
+-- -   The Capacity Reservation Fleet\'s status changes to @cancelled@.
+--
+-- -   The individual Capacity Reservations in the Fleet are cancelled.
+--     Instances running in the Capacity Reservations at the time of
+--     cancelling the Fleet continue to run in shared capacity.
+--
+-- -   The Fleet stops creating new Capacity Reservations.
+module Amazonka.EC2.CancelCapacityReservationFleets
+  ( -- * Creating a Request
+    CancelCapacityReservationFleets (..),
+    newCancelCapacityReservationFleets,
+
+    -- * Request Lenses
+    cancelCapacityReservationFleets_dryRun,
+    cancelCapacityReservationFleets_capacityReservationFleetIds,
+
+    -- * Destructuring the Response
+    CancelCapacityReservationFleetsResponse (..),
+    newCancelCapacityReservationFleetsResponse,
+
+    -- * Response Lenses
+    cancelCapacityReservationFleetsResponse_failedFleetCancellations,
+    cancelCapacityReservationFleetsResponse_successfulFleetCancellations,
+    cancelCapacityReservationFleetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelCapacityReservationFleets' smart constructor.
+data CancelCapacityReservationFleets = CancelCapacityReservationFleets'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the Capacity Reservation Fleets to cancel.
+    capacityReservationFleetIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelCapacityReservationFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelCapacityReservationFleets_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'capacityReservationFleetIds', 'cancelCapacityReservationFleets_capacityReservationFleetIds' - The IDs of the Capacity Reservation Fleets to cancel.
+newCancelCapacityReservationFleets ::
+  CancelCapacityReservationFleets
+newCancelCapacityReservationFleets =
+  CancelCapacityReservationFleets'
+    { dryRun =
+        Prelude.Nothing,
+      capacityReservationFleetIds =
+        Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelCapacityReservationFleets_dryRun :: Lens.Lens' CancelCapacityReservationFleets (Prelude.Maybe Prelude.Bool)
+cancelCapacityReservationFleets_dryRun = Lens.lens (\CancelCapacityReservationFleets' {dryRun} -> dryRun) (\s@CancelCapacityReservationFleets' {} a -> s {dryRun = a} :: CancelCapacityReservationFleets)
+
+-- | The IDs of the Capacity Reservation Fleets to cancel.
+cancelCapacityReservationFleets_capacityReservationFleetIds :: Lens.Lens' CancelCapacityReservationFleets [Prelude.Text]
+cancelCapacityReservationFleets_capacityReservationFleetIds = Lens.lens (\CancelCapacityReservationFleets' {capacityReservationFleetIds} -> capacityReservationFleetIds) (\s@CancelCapacityReservationFleets' {} a -> s {capacityReservationFleetIds = a} :: CancelCapacityReservationFleets) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    CancelCapacityReservationFleets
+  where
+  type
+    AWSResponse CancelCapacityReservationFleets =
+      CancelCapacityReservationFleetsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelCapacityReservationFleetsResponse'
+            Prelude.<$> ( x
+                            Data..@? "failedFleetCancellationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "successfulFleetCancellationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CancelCapacityReservationFleets
+  where
+  hashWithSalt
+    _salt
+    CancelCapacityReservationFleets' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` capacityReservationFleetIds
+
+instance
+  Prelude.NFData
+    CancelCapacityReservationFleets
+  where
+  rnf CancelCapacityReservationFleets' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf capacityReservationFleetIds
+
+instance
+  Data.ToHeaders
+    CancelCapacityReservationFleets
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelCapacityReservationFleets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelCapacityReservationFleets where
+  toQuery CancelCapacityReservationFleets' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CancelCapacityReservationFleets" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "CapacityReservationFleetId"
+          capacityReservationFleetIds
+      ]
+
+-- | /See:/ 'newCancelCapacityReservationFleetsResponse' smart constructor.
+data CancelCapacityReservationFleetsResponse = CancelCapacityReservationFleetsResponse'
+  { -- | Information about the Capacity Reservation Fleets that could not be
+    -- cancelled.
+    failedFleetCancellations :: Prelude.Maybe [FailedCapacityReservationFleetCancellationResult],
+    -- | Information about the Capacity Reservation Fleets that were successfully
+    -- cancelled.
+    successfulFleetCancellations :: Prelude.Maybe [CapacityReservationFleetCancellationState],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelCapacityReservationFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedFleetCancellations', 'cancelCapacityReservationFleetsResponse_failedFleetCancellations' - Information about the Capacity Reservation Fleets that could not be
+-- cancelled.
+--
+-- 'successfulFleetCancellations', 'cancelCapacityReservationFleetsResponse_successfulFleetCancellations' - Information about the Capacity Reservation Fleets that were successfully
+-- cancelled.
+--
+-- 'httpStatus', 'cancelCapacityReservationFleetsResponse_httpStatus' - The response's http status code.
+newCancelCapacityReservationFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelCapacityReservationFleetsResponse
+newCancelCapacityReservationFleetsResponse
+  pHttpStatus_ =
+    CancelCapacityReservationFleetsResponse'
+      { failedFleetCancellations =
+          Prelude.Nothing,
+        successfulFleetCancellations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the Capacity Reservation Fleets that could not be
+-- cancelled.
+cancelCapacityReservationFleetsResponse_failedFleetCancellations :: Lens.Lens' CancelCapacityReservationFleetsResponse (Prelude.Maybe [FailedCapacityReservationFleetCancellationResult])
+cancelCapacityReservationFleetsResponse_failedFleetCancellations = Lens.lens (\CancelCapacityReservationFleetsResponse' {failedFleetCancellations} -> failedFleetCancellations) (\s@CancelCapacityReservationFleetsResponse' {} a -> s {failedFleetCancellations = a} :: CancelCapacityReservationFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the Capacity Reservation Fleets that were successfully
+-- cancelled.
+cancelCapacityReservationFleetsResponse_successfulFleetCancellations :: Lens.Lens' CancelCapacityReservationFleetsResponse (Prelude.Maybe [CapacityReservationFleetCancellationState])
+cancelCapacityReservationFleetsResponse_successfulFleetCancellations = Lens.lens (\CancelCapacityReservationFleetsResponse' {successfulFleetCancellations} -> successfulFleetCancellations) (\s@CancelCapacityReservationFleetsResponse' {} a -> s {successfulFleetCancellations = a} :: CancelCapacityReservationFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+cancelCapacityReservationFleetsResponse_httpStatus :: Lens.Lens' CancelCapacityReservationFleetsResponse Prelude.Int
+cancelCapacityReservationFleetsResponse_httpStatus = Lens.lens (\CancelCapacityReservationFleetsResponse' {httpStatus} -> httpStatus) (\s@CancelCapacityReservationFleetsResponse' {} a -> s {httpStatus = a} :: CancelCapacityReservationFleetsResponse)
+
+instance
+  Prelude.NFData
+    CancelCapacityReservationFleetsResponse
+  where
+  rnf CancelCapacityReservationFleetsResponse' {..} =
+    Prelude.rnf failedFleetCancellations
+      `Prelude.seq` Prelude.rnf successfulFleetCancellations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelConversionTask.hs b/gen/Amazonka/EC2/CancelConversionTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelConversionTask.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelConversionTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels an active conversion task. The task can be the import of an
+-- instance or volume. The action removes all artifacts of the conversion,
+-- including a partially uploaded volume or instance. If the conversion is
+-- complete or is in the process of transferring the final disk image, the
+-- command fails and returns an exception.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html Importing a Virtual Machine Using the Amazon EC2 CLI>.
+module Amazonka.EC2.CancelConversionTask
+  ( -- * Creating a Request
+    CancelConversionTask (..),
+    newCancelConversionTask,
+
+    -- * Request Lenses
+    cancelConversionTask_dryRun,
+    cancelConversionTask_reasonMessage,
+    cancelConversionTask_conversionTaskId,
+
+    -- * Destructuring the Response
+    CancelConversionTaskResponse (..),
+    newCancelConversionTaskResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelConversionTask' smart constructor.
+data CancelConversionTask = CancelConversionTask'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The reason for canceling the conversion task.
+    reasonMessage :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the conversion task.
+    conversionTaskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelConversionTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelConversionTask_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'reasonMessage', 'cancelConversionTask_reasonMessage' - The reason for canceling the conversion task.
+--
+-- 'conversionTaskId', 'cancelConversionTask_conversionTaskId' - The ID of the conversion task.
+newCancelConversionTask ::
+  -- | 'conversionTaskId'
+  Prelude.Text ->
+  CancelConversionTask
+newCancelConversionTask pConversionTaskId_ =
+  CancelConversionTask'
+    { dryRun = Prelude.Nothing,
+      reasonMessage = Prelude.Nothing,
+      conversionTaskId = pConversionTaskId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelConversionTask_dryRun :: Lens.Lens' CancelConversionTask (Prelude.Maybe Prelude.Bool)
+cancelConversionTask_dryRun = Lens.lens (\CancelConversionTask' {dryRun} -> dryRun) (\s@CancelConversionTask' {} a -> s {dryRun = a} :: CancelConversionTask)
+
+-- | The reason for canceling the conversion task.
+cancelConversionTask_reasonMessage :: Lens.Lens' CancelConversionTask (Prelude.Maybe Prelude.Text)
+cancelConversionTask_reasonMessage = Lens.lens (\CancelConversionTask' {reasonMessage} -> reasonMessage) (\s@CancelConversionTask' {} a -> s {reasonMessage = a} :: CancelConversionTask)
+
+-- | The ID of the conversion task.
+cancelConversionTask_conversionTaskId :: Lens.Lens' CancelConversionTask Prelude.Text
+cancelConversionTask_conversionTaskId = Lens.lens (\CancelConversionTask' {conversionTaskId} -> conversionTaskId) (\s@CancelConversionTask' {} a -> s {conversionTaskId = a} :: CancelConversionTask)
+
+instance Core.AWSRequest CancelConversionTask where
+  type
+    AWSResponse CancelConversionTask =
+      CancelConversionTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull CancelConversionTaskResponse'
+
+instance Prelude.Hashable CancelConversionTask where
+  hashWithSalt _salt CancelConversionTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` reasonMessage
+      `Prelude.hashWithSalt` conversionTaskId
+
+instance Prelude.NFData CancelConversionTask where
+  rnf CancelConversionTask' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf reasonMessage
+      `Prelude.seq` Prelude.rnf conversionTaskId
+
+instance Data.ToHeaders CancelConversionTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelConversionTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelConversionTask where
+  toQuery CancelConversionTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelConversionTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ReasonMessage" Data.=: reasonMessage,
+        "ConversionTaskId" Data.=: conversionTaskId
+      ]
+
+-- | /See:/ 'newCancelConversionTaskResponse' smart constructor.
+data CancelConversionTaskResponse = CancelConversionTaskResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelConversionTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCancelConversionTaskResponse ::
+  CancelConversionTaskResponse
+newCancelConversionTaskResponse =
+  CancelConversionTaskResponse'
+
+instance Prelude.NFData CancelConversionTaskResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/CancelExportTask.hs b/gen/Amazonka/EC2/CancelExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelExportTask.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelExportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels an active export task. The request removes all artifacts of the
+-- export, including any partially-created Amazon S3 objects. If the export
+-- task is complete or is in the process of transferring the final disk
+-- image, the command fails and returns an error.
+module Amazonka.EC2.CancelExportTask
+  ( -- * Creating a Request
+    CancelExportTask (..),
+    newCancelExportTask,
+
+    -- * Request Lenses
+    cancelExportTask_exportTaskId,
+
+    -- * Destructuring the Response
+    CancelExportTaskResponse (..),
+    newCancelExportTaskResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelExportTask' smart constructor.
+data CancelExportTask = CancelExportTask'
+  { -- | The ID of the export task. This is the ID returned by
+    -- @CreateInstanceExportTask@.
+    exportTaskId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelExportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportTaskId', 'cancelExportTask_exportTaskId' - The ID of the export task. This is the ID returned by
+-- @CreateInstanceExportTask@.
+newCancelExportTask ::
+  -- | 'exportTaskId'
+  Prelude.Text ->
+  CancelExportTask
+newCancelExportTask pExportTaskId_ =
+  CancelExportTask' {exportTaskId = pExportTaskId_}
+
+-- | The ID of the export task. This is the ID returned by
+-- @CreateInstanceExportTask@.
+cancelExportTask_exportTaskId :: Lens.Lens' CancelExportTask Prelude.Text
+cancelExportTask_exportTaskId = Lens.lens (\CancelExportTask' {exportTaskId} -> exportTaskId) (\s@CancelExportTask' {} a -> s {exportTaskId = a} :: CancelExportTask)
+
+instance Core.AWSRequest CancelExportTask where
+  type
+    AWSResponse CancelExportTask =
+      CancelExportTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull CancelExportTaskResponse'
+
+instance Prelude.Hashable CancelExportTask where
+  hashWithSalt _salt CancelExportTask' {..} =
+    _salt `Prelude.hashWithSalt` exportTaskId
+
+instance Prelude.NFData CancelExportTask where
+  rnf CancelExportTask' {..} = Prelude.rnf exportTaskId
+
+instance Data.ToHeaders CancelExportTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelExportTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelExportTask where
+  toQuery CancelExportTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelExportTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ExportTaskId" Data.=: exportTaskId
+      ]
+
+-- | /See:/ 'newCancelExportTaskResponse' smart constructor.
+data CancelExportTaskResponse = CancelExportTaskResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelExportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCancelExportTaskResponse ::
+  CancelExportTaskResponse
+newCancelExportTaskResponse =
+  CancelExportTaskResponse'
+
+instance Prelude.NFData CancelExportTaskResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/CancelImageLaunchPermission.hs b/gen/Amazonka/EC2/CancelImageLaunchPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelImageLaunchPermission.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelImageLaunchPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes your Amazon Web Services account from the launch permissions for
+-- the specified AMI. For more information, see
+-- <https://docs.aws.amazon.com/ Cancel having an AMI shared with your Amazon Web Services account>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CancelImageLaunchPermission
+  ( -- * Creating a Request
+    CancelImageLaunchPermission (..),
+    newCancelImageLaunchPermission,
+
+    -- * Request Lenses
+    cancelImageLaunchPermission_dryRun,
+    cancelImageLaunchPermission_imageId,
+
+    -- * Destructuring the Response
+    CancelImageLaunchPermissionResponse (..),
+    newCancelImageLaunchPermissionResponse,
+
+    -- * Response Lenses
+    cancelImageLaunchPermissionResponse_return,
+    cancelImageLaunchPermissionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelImageLaunchPermission' smart constructor.
+data CancelImageLaunchPermission = CancelImageLaunchPermission'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI that was shared with your Amazon Web Services account.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelImageLaunchPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelImageLaunchPermission_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'cancelImageLaunchPermission_imageId' - The ID of the AMI that was shared with your Amazon Web Services account.
+newCancelImageLaunchPermission ::
+  -- | 'imageId'
+  Prelude.Text ->
+  CancelImageLaunchPermission
+newCancelImageLaunchPermission pImageId_ =
+  CancelImageLaunchPermission'
+    { dryRun =
+        Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelImageLaunchPermission_dryRun :: Lens.Lens' CancelImageLaunchPermission (Prelude.Maybe Prelude.Bool)
+cancelImageLaunchPermission_dryRun = Lens.lens (\CancelImageLaunchPermission' {dryRun} -> dryRun) (\s@CancelImageLaunchPermission' {} a -> s {dryRun = a} :: CancelImageLaunchPermission)
+
+-- | The ID of the AMI that was shared with your Amazon Web Services account.
+cancelImageLaunchPermission_imageId :: Lens.Lens' CancelImageLaunchPermission Prelude.Text
+cancelImageLaunchPermission_imageId = Lens.lens (\CancelImageLaunchPermission' {imageId} -> imageId) (\s@CancelImageLaunchPermission' {} a -> s {imageId = a} :: CancelImageLaunchPermission)
+
+instance Core.AWSRequest CancelImageLaunchPermission where
+  type
+    AWSResponse CancelImageLaunchPermission =
+      CancelImageLaunchPermissionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelImageLaunchPermissionResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelImageLaunchPermission where
+  hashWithSalt _salt CancelImageLaunchPermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData CancelImageLaunchPermission where
+  rnf CancelImageLaunchPermission' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders CancelImageLaunchPermission where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelImageLaunchPermission where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelImageLaunchPermission where
+  toQuery CancelImageLaunchPermission' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CancelImageLaunchPermission" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newCancelImageLaunchPermissionResponse' smart constructor.
+data CancelImageLaunchPermissionResponse = CancelImageLaunchPermissionResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelImageLaunchPermissionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'cancelImageLaunchPermissionResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'cancelImageLaunchPermissionResponse_httpStatus' - The response's http status code.
+newCancelImageLaunchPermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelImageLaunchPermissionResponse
+newCancelImageLaunchPermissionResponse pHttpStatus_ =
+  CancelImageLaunchPermissionResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+cancelImageLaunchPermissionResponse_return :: Lens.Lens' CancelImageLaunchPermissionResponse (Prelude.Maybe Prelude.Bool)
+cancelImageLaunchPermissionResponse_return = Lens.lens (\CancelImageLaunchPermissionResponse' {return'} -> return') (\s@CancelImageLaunchPermissionResponse' {} a -> s {return' = a} :: CancelImageLaunchPermissionResponse)
+
+-- | The response's http status code.
+cancelImageLaunchPermissionResponse_httpStatus :: Lens.Lens' CancelImageLaunchPermissionResponse Prelude.Int
+cancelImageLaunchPermissionResponse_httpStatus = Lens.lens (\CancelImageLaunchPermissionResponse' {httpStatus} -> httpStatus) (\s@CancelImageLaunchPermissionResponse' {} a -> s {httpStatus = a} :: CancelImageLaunchPermissionResponse)
+
+instance
+  Prelude.NFData
+    CancelImageLaunchPermissionResponse
+  where
+  rnf CancelImageLaunchPermissionResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelImportTask.hs b/gen/Amazonka/EC2/CancelImportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelImportTask.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelImportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels an in-process import virtual machine or import snapshot task.
+module Amazonka.EC2.CancelImportTask
+  ( -- * Creating a Request
+    CancelImportTask (..),
+    newCancelImportTask,
+
+    -- * Request Lenses
+    cancelImportTask_cancelReason,
+    cancelImportTask_dryRun,
+    cancelImportTask_importTaskId,
+
+    -- * Destructuring the Response
+    CancelImportTaskResponse (..),
+    newCancelImportTaskResponse,
+
+    -- * Response Lenses
+    cancelImportTaskResponse_importTaskId,
+    cancelImportTaskResponse_previousState,
+    cancelImportTaskResponse_state,
+    cancelImportTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCancelImportTask' smart constructor.
+data CancelImportTask = CancelImportTask'
+  { -- | The reason for canceling the task.
+    cancelReason :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the import image or import snapshot task to be canceled.
+    importTaskId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelImportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cancelReason', 'cancelImportTask_cancelReason' - The reason for canceling the task.
+--
+-- 'dryRun', 'cancelImportTask_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'importTaskId', 'cancelImportTask_importTaskId' - The ID of the import image or import snapshot task to be canceled.
+newCancelImportTask ::
+  CancelImportTask
+newCancelImportTask =
+  CancelImportTask'
+    { cancelReason = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      importTaskId = Prelude.Nothing
+    }
+
+-- | The reason for canceling the task.
+cancelImportTask_cancelReason :: Lens.Lens' CancelImportTask (Prelude.Maybe Prelude.Text)
+cancelImportTask_cancelReason = Lens.lens (\CancelImportTask' {cancelReason} -> cancelReason) (\s@CancelImportTask' {} a -> s {cancelReason = a} :: CancelImportTask)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelImportTask_dryRun :: Lens.Lens' CancelImportTask (Prelude.Maybe Prelude.Bool)
+cancelImportTask_dryRun = Lens.lens (\CancelImportTask' {dryRun} -> dryRun) (\s@CancelImportTask' {} a -> s {dryRun = a} :: CancelImportTask)
+
+-- | The ID of the import image or import snapshot task to be canceled.
+cancelImportTask_importTaskId :: Lens.Lens' CancelImportTask (Prelude.Maybe Prelude.Text)
+cancelImportTask_importTaskId = Lens.lens (\CancelImportTask' {importTaskId} -> importTaskId) (\s@CancelImportTask' {} a -> s {importTaskId = a} :: CancelImportTask)
+
+instance Core.AWSRequest CancelImportTask where
+  type
+    AWSResponse CancelImportTask =
+      CancelImportTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelImportTaskResponse'
+            Prelude.<$> (x Data..@? "importTaskId")
+            Prelude.<*> (x Data..@? "previousState")
+            Prelude.<*> (x Data..@? "state")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelImportTask where
+  hashWithSalt _salt CancelImportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` cancelReason
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` importTaskId
+
+instance Prelude.NFData CancelImportTask where
+  rnf CancelImportTask' {..} =
+    Prelude.rnf cancelReason
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf importTaskId
+
+instance Data.ToHeaders CancelImportTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelImportTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelImportTask where
+  toQuery CancelImportTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelImportTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CancelReason" Data.=: cancelReason,
+        "DryRun" Data.=: dryRun,
+        "ImportTaskId" Data.=: importTaskId
+      ]
+
+-- | /See:/ 'newCancelImportTaskResponse' smart constructor.
+data CancelImportTaskResponse = CancelImportTaskResponse'
+  { -- | The ID of the task being canceled.
+    importTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the task being canceled.
+    previousState :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the task being canceled.
+    state :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelImportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importTaskId', 'cancelImportTaskResponse_importTaskId' - The ID of the task being canceled.
+--
+-- 'previousState', 'cancelImportTaskResponse_previousState' - The current state of the task being canceled.
+--
+-- 'state', 'cancelImportTaskResponse_state' - The current state of the task being canceled.
+--
+-- 'httpStatus', 'cancelImportTaskResponse_httpStatus' - The response's http status code.
+newCancelImportTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelImportTaskResponse
+newCancelImportTaskResponse pHttpStatus_ =
+  CancelImportTaskResponse'
+    { importTaskId =
+        Prelude.Nothing,
+      previousState = Prelude.Nothing,
+      state = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the task being canceled.
+cancelImportTaskResponse_importTaskId :: Lens.Lens' CancelImportTaskResponse (Prelude.Maybe Prelude.Text)
+cancelImportTaskResponse_importTaskId = Lens.lens (\CancelImportTaskResponse' {importTaskId} -> importTaskId) (\s@CancelImportTaskResponse' {} a -> s {importTaskId = a} :: CancelImportTaskResponse)
+
+-- | The current state of the task being canceled.
+cancelImportTaskResponse_previousState :: Lens.Lens' CancelImportTaskResponse (Prelude.Maybe Prelude.Text)
+cancelImportTaskResponse_previousState = Lens.lens (\CancelImportTaskResponse' {previousState} -> previousState) (\s@CancelImportTaskResponse' {} a -> s {previousState = a} :: CancelImportTaskResponse)
+
+-- | The current state of the task being canceled.
+cancelImportTaskResponse_state :: Lens.Lens' CancelImportTaskResponse (Prelude.Maybe Prelude.Text)
+cancelImportTaskResponse_state = Lens.lens (\CancelImportTaskResponse' {state} -> state) (\s@CancelImportTaskResponse' {} a -> s {state = a} :: CancelImportTaskResponse)
+
+-- | The response's http status code.
+cancelImportTaskResponse_httpStatus :: Lens.Lens' CancelImportTaskResponse Prelude.Int
+cancelImportTaskResponse_httpStatus = Lens.lens (\CancelImportTaskResponse' {httpStatus} -> httpStatus) (\s@CancelImportTaskResponse' {} a -> s {httpStatus = a} :: CancelImportTaskResponse)
+
+instance Prelude.NFData CancelImportTaskResponse where
+  rnf CancelImportTaskResponse' {..} =
+    Prelude.rnf importTaskId
+      `Prelude.seq` Prelude.rnf previousState
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelReservedInstancesListing.hs b/gen/Amazonka/EC2/CancelReservedInstancesListing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelReservedInstancesListing.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelReservedInstancesListing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified Reserved Instance listing in the Reserved Instance
+-- Marketplace.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CancelReservedInstancesListing
+  ( -- * Creating a Request
+    CancelReservedInstancesListing (..),
+    newCancelReservedInstancesListing,
+
+    -- * Request Lenses
+    cancelReservedInstancesListing_reservedInstancesListingId,
+
+    -- * Destructuring the Response
+    CancelReservedInstancesListingResponse (..),
+    newCancelReservedInstancesListingResponse,
+
+    -- * Response Lenses
+    cancelReservedInstancesListingResponse_reservedInstancesListings,
+    cancelReservedInstancesListingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CancelReservedInstancesListing.
+--
+-- /See:/ 'newCancelReservedInstancesListing' smart constructor.
+data CancelReservedInstancesListing = CancelReservedInstancesListing'
+  { -- | The ID of the Reserved Instance listing.
+    reservedInstancesListingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelReservedInstancesListing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesListingId', 'cancelReservedInstancesListing_reservedInstancesListingId' - The ID of the Reserved Instance listing.
+newCancelReservedInstancesListing ::
+  -- | 'reservedInstancesListingId'
+  Prelude.Text ->
+  CancelReservedInstancesListing
+newCancelReservedInstancesListing
+  pReservedInstancesListingId_ =
+    CancelReservedInstancesListing'
+      { reservedInstancesListingId =
+          pReservedInstancesListingId_
+      }
+
+-- | The ID of the Reserved Instance listing.
+cancelReservedInstancesListing_reservedInstancesListingId :: Lens.Lens' CancelReservedInstancesListing Prelude.Text
+cancelReservedInstancesListing_reservedInstancesListingId = Lens.lens (\CancelReservedInstancesListing' {reservedInstancesListingId} -> reservedInstancesListingId) (\s@CancelReservedInstancesListing' {} a -> s {reservedInstancesListingId = a} :: CancelReservedInstancesListing)
+
+instance
+  Core.AWSRequest
+    CancelReservedInstancesListing
+  where
+  type
+    AWSResponse CancelReservedInstancesListing =
+      CancelReservedInstancesListingResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelReservedInstancesListingResponse'
+            Prelude.<$> ( x
+                            Data..@? "reservedInstancesListingsSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CancelReservedInstancesListing
+  where
+  hashWithSalt
+    _salt
+    CancelReservedInstancesListing' {..} =
+      _salt
+        `Prelude.hashWithSalt` reservedInstancesListingId
+
+instance
+  Prelude.NFData
+    CancelReservedInstancesListing
+  where
+  rnf CancelReservedInstancesListing' {..} =
+    Prelude.rnf reservedInstancesListingId
+
+instance
+  Data.ToHeaders
+    CancelReservedInstancesListing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelReservedInstancesListing where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelReservedInstancesListing where
+  toQuery CancelReservedInstancesListing' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CancelReservedInstancesListing" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ReservedInstancesListingId"
+          Data.=: reservedInstancesListingId
+      ]
+
+-- | Contains the output of CancelReservedInstancesListing.
+--
+-- /See:/ 'newCancelReservedInstancesListingResponse' smart constructor.
+data CancelReservedInstancesListingResponse = CancelReservedInstancesListingResponse'
+  { -- | The Reserved Instance listing.
+    reservedInstancesListings :: Prelude.Maybe [ReservedInstancesListing],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelReservedInstancesListingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesListings', 'cancelReservedInstancesListingResponse_reservedInstancesListings' - The Reserved Instance listing.
+--
+-- 'httpStatus', 'cancelReservedInstancesListingResponse_httpStatus' - The response's http status code.
+newCancelReservedInstancesListingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelReservedInstancesListingResponse
+newCancelReservedInstancesListingResponse
+  pHttpStatus_ =
+    CancelReservedInstancesListingResponse'
+      { reservedInstancesListings =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Reserved Instance listing.
+cancelReservedInstancesListingResponse_reservedInstancesListings :: Lens.Lens' CancelReservedInstancesListingResponse (Prelude.Maybe [ReservedInstancesListing])
+cancelReservedInstancesListingResponse_reservedInstancesListings = Lens.lens (\CancelReservedInstancesListingResponse' {reservedInstancesListings} -> reservedInstancesListings) (\s@CancelReservedInstancesListingResponse' {} a -> s {reservedInstancesListings = a} :: CancelReservedInstancesListingResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+cancelReservedInstancesListingResponse_httpStatus :: Lens.Lens' CancelReservedInstancesListingResponse Prelude.Int
+cancelReservedInstancesListingResponse_httpStatus = Lens.lens (\CancelReservedInstancesListingResponse' {httpStatus} -> httpStatus) (\s@CancelReservedInstancesListingResponse' {} a -> s {httpStatus = a} :: CancelReservedInstancesListingResponse)
+
+instance
+  Prelude.NFData
+    CancelReservedInstancesListingResponse
+  where
+  rnf CancelReservedInstancesListingResponse' {..} =
+    Prelude.rnf reservedInstancesListings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelSpotFleetRequests.hs b/gen/Amazonka/EC2/CancelSpotFleetRequests.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelSpotFleetRequests.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelSpotFleetRequests
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified Spot Fleet requests.
+--
+-- After you cancel a Spot Fleet request, the Spot Fleet launches no new
+-- Spot Instances. You must specify whether the Spot Fleet should also
+-- terminate its Spot Instances. If you terminate the instances, the Spot
+-- Fleet request enters the @cancelled_terminating@ state. Otherwise, the
+-- Spot Fleet request enters the @cancelled_running@ state and the
+-- instances continue to run until they are interrupted or you terminate
+-- them manually.
+module Amazonka.EC2.CancelSpotFleetRequests
+  ( -- * Creating a Request
+    CancelSpotFleetRequests (..),
+    newCancelSpotFleetRequests,
+
+    -- * Request Lenses
+    cancelSpotFleetRequests_dryRun,
+    cancelSpotFleetRequests_spotFleetRequestIds,
+    cancelSpotFleetRequests_terminateInstances,
+
+    -- * Destructuring the Response
+    CancelSpotFleetRequestsResponse (..),
+    newCancelSpotFleetRequestsResponse,
+
+    -- * Response Lenses
+    cancelSpotFleetRequestsResponse_successfulFleetRequests,
+    cancelSpotFleetRequestsResponse_unsuccessfulFleetRequests,
+    cancelSpotFleetRequestsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CancelSpotFleetRequests.
+--
+-- /See:/ 'newCancelSpotFleetRequests' smart constructor.
+data CancelSpotFleetRequests = CancelSpotFleetRequests'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the Spot Fleet requests.
+    spotFleetRequestIds :: [Prelude.Text],
+    -- | Indicates whether to terminate instances for a Spot Fleet request if it
+    -- is canceled successfully.
+    terminateInstances :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotFleetRequests' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelSpotFleetRequests_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'spotFleetRequestIds', 'cancelSpotFleetRequests_spotFleetRequestIds' - The IDs of the Spot Fleet requests.
+--
+-- 'terminateInstances', 'cancelSpotFleetRequests_terminateInstances' - Indicates whether to terminate instances for a Spot Fleet request if it
+-- is canceled successfully.
+newCancelSpotFleetRequests ::
+  -- | 'terminateInstances'
+  Prelude.Bool ->
+  CancelSpotFleetRequests
+newCancelSpotFleetRequests pTerminateInstances_ =
+  CancelSpotFleetRequests'
+    { dryRun = Prelude.Nothing,
+      spotFleetRequestIds = Prelude.mempty,
+      terminateInstances = pTerminateInstances_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelSpotFleetRequests_dryRun :: Lens.Lens' CancelSpotFleetRequests (Prelude.Maybe Prelude.Bool)
+cancelSpotFleetRequests_dryRun = Lens.lens (\CancelSpotFleetRequests' {dryRun} -> dryRun) (\s@CancelSpotFleetRequests' {} a -> s {dryRun = a} :: CancelSpotFleetRequests)
+
+-- | The IDs of the Spot Fleet requests.
+cancelSpotFleetRequests_spotFleetRequestIds :: Lens.Lens' CancelSpotFleetRequests [Prelude.Text]
+cancelSpotFleetRequests_spotFleetRequestIds = Lens.lens (\CancelSpotFleetRequests' {spotFleetRequestIds} -> spotFleetRequestIds) (\s@CancelSpotFleetRequests' {} a -> s {spotFleetRequestIds = a} :: CancelSpotFleetRequests) Prelude.. Lens.coerced
+
+-- | Indicates whether to terminate instances for a Spot Fleet request if it
+-- is canceled successfully.
+cancelSpotFleetRequests_terminateInstances :: Lens.Lens' CancelSpotFleetRequests Prelude.Bool
+cancelSpotFleetRequests_terminateInstances = Lens.lens (\CancelSpotFleetRequests' {terminateInstances} -> terminateInstances) (\s@CancelSpotFleetRequests' {} a -> s {terminateInstances = a} :: CancelSpotFleetRequests)
+
+instance Core.AWSRequest CancelSpotFleetRequests where
+  type
+    AWSResponse CancelSpotFleetRequests =
+      CancelSpotFleetRequestsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelSpotFleetRequestsResponse'
+            Prelude.<$> ( x
+                            Data..@? "successfulFleetRequestSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessfulFleetRequestSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelSpotFleetRequests where
+  hashWithSalt _salt CancelSpotFleetRequests' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` spotFleetRequestIds
+      `Prelude.hashWithSalt` terminateInstances
+
+instance Prelude.NFData CancelSpotFleetRequests where
+  rnf CancelSpotFleetRequests' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf spotFleetRequestIds
+      `Prelude.seq` Prelude.rnf terminateInstances
+
+instance Data.ToHeaders CancelSpotFleetRequests where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelSpotFleetRequests where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelSpotFleetRequests where
+  toQuery CancelSpotFleetRequests' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelSpotFleetRequests" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "SpotFleetRequestId"
+          spotFleetRequestIds,
+        "TerminateInstances" Data.=: terminateInstances
+      ]
+
+-- | Contains the output of CancelSpotFleetRequests.
+--
+-- /See:/ 'newCancelSpotFleetRequestsResponse' smart constructor.
+data CancelSpotFleetRequestsResponse = CancelSpotFleetRequestsResponse'
+  { -- | Information about the Spot Fleet requests that are successfully
+    -- canceled.
+    successfulFleetRequests :: Prelude.Maybe [CancelSpotFleetRequestsSuccessItem],
+    -- | Information about the Spot Fleet requests that are not successfully
+    -- canceled.
+    unsuccessfulFleetRequests :: Prelude.Maybe [CancelSpotFleetRequestsErrorItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotFleetRequestsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successfulFleetRequests', 'cancelSpotFleetRequestsResponse_successfulFleetRequests' - Information about the Spot Fleet requests that are successfully
+-- canceled.
+--
+-- 'unsuccessfulFleetRequests', 'cancelSpotFleetRequestsResponse_unsuccessfulFleetRequests' - Information about the Spot Fleet requests that are not successfully
+-- canceled.
+--
+-- 'httpStatus', 'cancelSpotFleetRequestsResponse_httpStatus' - The response's http status code.
+newCancelSpotFleetRequestsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelSpotFleetRequestsResponse
+newCancelSpotFleetRequestsResponse pHttpStatus_ =
+  CancelSpotFleetRequestsResponse'
+    { successfulFleetRequests =
+        Prelude.Nothing,
+      unsuccessfulFleetRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Spot Fleet requests that are successfully
+-- canceled.
+cancelSpotFleetRequestsResponse_successfulFleetRequests :: Lens.Lens' CancelSpotFleetRequestsResponse (Prelude.Maybe [CancelSpotFleetRequestsSuccessItem])
+cancelSpotFleetRequestsResponse_successfulFleetRequests = Lens.lens (\CancelSpotFleetRequestsResponse' {successfulFleetRequests} -> successfulFleetRequests) (\s@CancelSpotFleetRequestsResponse' {} a -> s {successfulFleetRequests = a} :: CancelSpotFleetRequestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the Spot Fleet requests that are not successfully
+-- canceled.
+cancelSpotFleetRequestsResponse_unsuccessfulFleetRequests :: Lens.Lens' CancelSpotFleetRequestsResponse (Prelude.Maybe [CancelSpotFleetRequestsErrorItem])
+cancelSpotFleetRequestsResponse_unsuccessfulFleetRequests = Lens.lens (\CancelSpotFleetRequestsResponse' {unsuccessfulFleetRequests} -> unsuccessfulFleetRequests) (\s@CancelSpotFleetRequestsResponse' {} a -> s {unsuccessfulFleetRequests = a} :: CancelSpotFleetRequestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+cancelSpotFleetRequestsResponse_httpStatus :: Lens.Lens' CancelSpotFleetRequestsResponse Prelude.Int
+cancelSpotFleetRequestsResponse_httpStatus = Lens.lens (\CancelSpotFleetRequestsResponse' {httpStatus} -> httpStatus) (\s@CancelSpotFleetRequestsResponse' {} a -> s {httpStatus = a} :: CancelSpotFleetRequestsResponse)
+
+instance
+  Prelude.NFData
+    CancelSpotFleetRequestsResponse
+  where
+  rnf CancelSpotFleetRequestsResponse' {..} =
+    Prelude.rnf successfulFleetRequests
+      `Prelude.seq` Prelude.rnf unsuccessfulFleetRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CancelSpotInstanceRequests.hs b/gen/Amazonka/EC2/CancelSpotInstanceRequests.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CancelSpotInstanceRequests.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CancelSpotInstanceRequests
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels one or more Spot Instance requests.
+--
+-- Canceling a Spot Instance request does not terminate running Spot
+-- Instances associated with the request.
+module Amazonka.EC2.CancelSpotInstanceRequests
+  ( -- * Creating a Request
+    CancelSpotInstanceRequests (..),
+    newCancelSpotInstanceRequests,
+
+    -- * Request Lenses
+    cancelSpotInstanceRequests_dryRun,
+    cancelSpotInstanceRequests_spotInstanceRequestIds,
+
+    -- * Destructuring the Response
+    CancelSpotInstanceRequestsResponse (..),
+    newCancelSpotInstanceRequestsResponse,
+
+    -- * Response Lenses
+    cancelSpotInstanceRequestsResponse_cancelledSpotInstanceRequests,
+    cancelSpotInstanceRequestsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CancelSpotInstanceRequests.
+--
+-- /See:/ 'newCancelSpotInstanceRequests' smart constructor.
+data CancelSpotInstanceRequests = CancelSpotInstanceRequests'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more Spot Instance request IDs.
+    spotInstanceRequestIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotInstanceRequests' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'cancelSpotInstanceRequests_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'spotInstanceRequestIds', 'cancelSpotInstanceRequests_spotInstanceRequestIds' - One or more Spot Instance request IDs.
+newCancelSpotInstanceRequests ::
+  CancelSpotInstanceRequests
+newCancelSpotInstanceRequests =
+  CancelSpotInstanceRequests'
+    { dryRun =
+        Prelude.Nothing,
+      spotInstanceRequestIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+cancelSpotInstanceRequests_dryRun :: Lens.Lens' CancelSpotInstanceRequests (Prelude.Maybe Prelude.Bool)
+cancelSpotInstanceRequests_dryRun = Lens.lens (\CancelSpotInstanceRequests' {dryRun} -> dryRun) (\s@CancelSpotInstanceRequests' {} a -> s {dryRun = a} :: CancelSpotInstanceRequests)
+
+-- | One or more Spot Instance request IDs.
+cancelSpotInstanceRequests_spotInstanceRequestIds :: Lens.Lens' CancelSpotInstanceRequests [Prelude.Text]
+cancelSpotInstanceRequests_spotInstanceRequestIds = Lens.lens (\CancelSpotInstanceRequests' {spotInstanceRequestIds} -> spotInstanceRequestIds) (\s@CancelSpotInstanceRequests' {} a -> s {spotInstanceRequestIds = a} :: CancelSpotInstanceRequests) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CancelSpotInstanceRequests where
+  type
+    AWSResponse CancelSpotInstanceRequests =
+      CancelSpotInstanceRequestsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CancelSpotInstanceRequestsResponse'
+            Prelude.<$> ( x
+                            Data..@? "spotInstanceRequestSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelSpotInstanceRequests where
+  hashWithSalt _salt CancelSpotInstanceRequests' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` spotInstanceRequestIds
+
+instance Prelude.NFData CancelSpotInstanceRequests where
+  rnf CancelSpotInstanceRequests' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf spotInstanceRequestIds
+
+instance Data.ToHeaders CancelSpotInstanceRequests where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CancelSpotInstanceRequests where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelSpotInstanceRequests where
+  toQuery CancelSpotInstanceRequests' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CancelSpotInstanceRequests" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "SpotInstanceRequestId"
+          spotInstanceRequestIds
+      ]
+
+-- | Contains the output of CancelSpotInstanceRequests.
+--
+-- /See:/ 'newCancelSpotInstanceRequestsResponse' smart constructor.
+data CancelSpotInstanceRequestsResponse = CancelSpotInstanceRequestsResponse'
+  { -- | One or more Spot Instance requests.
+    cancelledSpotInstanceRequests :: Prelude.Maybe [CancelledSpotInstanceRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotInstanceRequestsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cancelledSpotInstanceRequests', 'cancelSpotInstanceRequestsResponse_cancelledSpotInstanceRequests' - One or more Spot Instance requests.
+--
+-- 'httpStatus', 'cancelSpotInstanceRequestsResponse_httpStatus' - The response's http status code.
+newCancelSpotInstanceRequestsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelSpotInstanceRequestsResponse
+newCancelSpotInstanceRequestsResponse pHttpStatus_ =
+  CancelSpotInstanceRequestsResponse'
+    { cancelledSpotInstanceRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | One or more Spot Instance requests.
+cancelSpotInstanceRequestsResponse_cancelledSpotInstanceRequests :: Lens.Lens' CancelSpotInstanceRequestsResponse (Prelude.Maybe [CancelledSpotInstanceRequest])
+cancelSpotInstanceRequestsResponse_cancelledSpotInstanceRequests = Lens.lens (\CancelSpotInstanceRequestsResponse' {cancelledSpotInstanceRequests} -> cancelledSpotInstanceRequests) (\s@CancelSpotInstanceRequestsResponse' {} a -> s {cancelledSpotInstanceRequests = a} :: CancelSpotInstanceRequestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+cancelSpotInstanceRequestsResponse_httpStatus :: Lens.Lens' CancelSpotInstanceRequestsResponse Prelude.Int
+cancelSpotInstanceRequestsResponse_httpStatus = Lens.lens (\CancelSpotInstanceRequestsResponse' {httpStatus} -> httpStatus) (\s@CancelSpotInstanceRequestsResponse' {} a -> s {httpStatus = a} :: CancelSpotInstanceRequestsResponse)
+
+instance
+  Prelude.NFData
+    CancelSpotInstanceRequestsResponse
+  where
+  rnf CancelSpotInstanceRequestsResponse' {..} =
+    Prelude.rnf cancelledSpotInstanceRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ConfirmProductInstance.hs b/gen/Amazonka/EC2/ConfirmProductInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ConfirmProductInstance.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ConfirmProductInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Determines whether a product code is associated with an instance. This
+-- action can only be used by the owner of the product code. It is useful
+-- when a product code owner must verify whether another user\'s instance
+-- is eligible for support.
+module Amazonka.EC2.ConfirmProductInstance
+  ( -- * Creating a Request
+    ConfirmProductInstance (..),
+    newConfirmProductInstance,
+
+    -- * Request Lenses
+    confirmProductInstance_dryRun,
+    confirmProductInstance_instanceId,
+    confirmProductInstance_productCode,
+
+    -- * Destructuring the Response
+    ConfirmProductInstanceResponse (..),
+    newConfirmProductInstanceResponse,
+
+    -- * Response Lenses
+    confirmProductInstanceResponse_ownerId,
+    confirmProductInstanceResponse_return,
+    confirmProductInstanceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newConfirmProductInstance' smart constructor.
+data ConfirmProductInstance = ConfirmProductInstance'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text,
+    -- | The product code. This must be a product code that you own.
+    productCode :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfirmProductInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'confirmProductInstance_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'confirmProductInstance_instanceId' - The ID of the instance.
+--
+-- 'productCode', 'confirmProductInstance_productCode' - The product code. This must be a product code that you own.
+newConfirmProductInstance ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'productCode'
+  Prelude.Text ->
+  ConfirmProductInstance
+newConfirmProductInstance pInstanceId_ pProductCode_ =
+  ConfirmProductInstance'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_,
+      productCode = pProductCode_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+confirmProductInstance_dryRun :: Lens.Lens' ConfirmProductInstance (Prelude.Maybe Prelude.Bool)
+confirmProductInstance_dryRun = Lens.lens (\ConfirmProductInstance' {dryRun} -> dryRun) (\s@ConfirmProductInstance' {} a -> s {dryRun = a} :: ConfirmProductInstance)
+
+-- | The ID of the instance.
+confirmProductInstance_instanceId :: Lens.Lens' ConfirmProductInstance Prelude.Text
+confirmProductInstance_instanceId = Lens.lens (\ConfirmProductInstance' {instanceId} -> instanceId) (\s@ConfirmProductInstance' {} a -> s {instanceId = a} :: ConfirmProductInstance)
+
+-- | The product code. This must be a product code that you own.
+confirmProductInstance_productCode :: Lens.Lens' ConfirmProductInstance Prelude.Text
+confirmProductInstance_productCode = Lens.lens (\ConfirmProductInstance' {productCode} -> productCode) (\s@ConfirmProductInstance' {} a -> s {productCode = a} :: ConfirmProductInstance)
+
+instance Core.AWSRequest ConfirmProductInstance where
+  type
+    AWSResponse ConfirmProductInstance =
+      ConfirmProductInstanceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ConfirmProductInstanceResponse'
+            Prelude.<$> (x Data..@? "ownerId")
+            Prelude.<*> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ConfirmProductInstance where
+  hashWithSalt _salt ConfirmProductInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` productCode
+
+instance Prelude.NFData ConfirmProductInstance where
+  rnf ConfirmProductInstance' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf productCode
+
+instance Data.ToHeaders ConfirmProductInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ConfirmProductInstance where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ConfirmProductInstance where
+  toQuery ConfirmProductInstance' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ConfirmProductInstance" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId,
+        "ProductCode" Data.=: productCode
+      ]
+
+-- | /See:/ 'newConfirmProductInstanceResponse' smart constructor.
+data ConfirmProductInstanceResponse = ConfirmProductInstanceResponse'
+  { -- | The Amazon Web Services account ID of the instance owner. This is only
+    -- present if the product code is attached to the instance.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The return value of the request. Returns @true@ if the specified product
+    -- code is owned by the requester and associated with the specified
+    -- instance.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConfirmProductInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ownerId', 'confirmProductInstanceResponse_ownerId' - The Amazon Web Services account ID of the instance owner. This is only
+-- present if the product code is attached to the instance.
+--
+-- 'return'', 'confirmProductInstanceResponse_return' - The return value of the request. Returns @true@ if the specified product
+-- code is owned by the requester and associated with the specified
+-- instance.
+--
+-- 'httpStatus', 'confirmProductInstanceResponse_httpStatus' - The response's http status code.
+newConfirmProductInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ConfirmProductInstanceResponse
+newConfirmProductInstanceResponse pHttpStatus_ =
+  ConfirmProductInstanceResponse'
+    { ownerId =
+        Prelude.Nothing,
+      return' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Web Services account ID of the instance owner. This is only
+-- present if the product code is attached to the instance.
+confirmProductInstanceResponse_ownerId :: Lens.Lens' ConfirmProductInstanceResponse (Prelude.Maybe Prelude.Text)
+confirmProductInstanceResponse_ownerId = Lens.lens (\ConfirmProductInstanceResponse' {ownerId} -> ownerId) (\s@ConfirmProductInstanceResponse' {} a -> s {ownerId = a} :: ConfirmProductInstanceResponse)
+
+-- | The return value of the request. Returns @true@ if the specified product
+-- code is owned by the requester and associated with the specified
+-- instance.
+confirmProductInstanceResponse_return :: Lens.Lens' ConfirmProductInstanceResponse (Prelude.Maybe Prelude.Bool)
+confirmProductInstanceResponse_return = Lens.lens (\ConfirmProductInstanceResponse' {return'} -> return') (\s@ConfirmProductInstanceResponse' {} a -> s {return' = a} :: ConfirmProductInstanceResponse)
+
+-- | The response's http status code.
+confirmProductInstanceResponse_httpStatus :: Lens.Lens' ConfirmProductInstanceResponse Prelude.Int
+confirmProductInstanceResponse_httpStatus = Lens.lens (\ConfirmProductInstanceResponse' {httpStatus} -> httpStatus) (\s@ConfirmProductInstanceResponse' {} a -> s {httpStatus = a} :: ConfirmProductInstanceResponse)
+
+instance
+  Prelude.NFData
+    ConfirmProductInstanceResponse
+  where
+  rnf ConfirmProductInstanceResponse' {..} =
+    Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CopyFpgaImage.hs b/gen/Amazonka/EC2/CopyFpgaImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CopyFpgaImage.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CopyFpgaImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Copies the specified Amazon FPGA Image (AFI) to the current Region.
+module Amazonka.EC2.CopyFpgaImage
+  ( -- * Creating a Request
+    CopyFpgaImage (..),
+    newCopyFpgaImage,
+
+    -- * Request Lenses
+    copyFpgaImage_clientToken,
+    copyFpgaImage_description,
+    copyFpgaImage_dryRun,
+    copyFpgaImage_name,
+    copyFpgaImage_sourceFpgaImageId,
+    copyFpgaImage_sourceRegion,
+
+    -- * Destructuring the Response
+    CopyFpgaImageResponse (..),
+    newCopyFpgaImageResponse,
+
+    -- * Response Lenses
+    copyFpgaImageResponse_fpgaImageId,
+    copyFpgaImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCopyFpgaImage' smart constructor.
+data CopyFpgaImage = CopyFpgaImage'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html Ensuring idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description for the new AFI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name for the new AFI. The default is the name of the source AFI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the source AFI.
+    sourceFpgaImageId :: Prelude.Text,
+    -- | The Region that contains the source AFI.
+    sourceRegion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyFpgaImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'copyFpgaImage_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- 'description', 'copyFpgaImage_description' - The description for the new AFI.
+--
+-- 'dryRun', 'copyFpgaImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'name', 'copyFpgaImage_name' - The name for the new AFI. The default is the name of the source AFI.
+--
+-- 'sourceFpgaImageId', 'copyFpgaImage_sourceFpgaImageId' - The ID of the source AFI.
+--
+-- 'sourceRegion', 'copyFpgaImage_sourceRegion' - The Region that contains the source AFI.
+newCopyFpgaImage ::
+  -- | 'sourceFpgaImageId'
+  Prelude.Text ->
+  -- | 'sourceRegion'
+  Prelude.Text ->
+  CopyFpgaImage
+newCopyFpgaImage pSourceFpgaImageId_ pSourceRegion_ =
+  CopyFpgaImage'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      name = Prelude.Nothing,
+      sourceFpgaImageId = pSourceFpgaImageId_,
+      sourceRegion = pSourceRegion_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html Ensuring idempotency>.
+copyFpgaImage_clientToken :: Lens.Lens' CopyFpgaImage (Prelude.Maybe Prelude.Text)
+copyFpgaImage_clientToken = Lens.lens (\CopyFpgaImage' {clientToken} -> clientToken) (\s@CopyFpgaImage' {} a -> s {clientToken = a} :: CopyFpgaImage)
+
+-- | The description for the new AFI.
+copyFpgaImage_description :: Lens.Lens' CopyFpgaImage (Prelude.Maybe Prelude.Text)
+copyFpgaImage_description = Lens.lens (\CopyFpgaImage' {description} -> description) (\s@CopyFpgaImage' {} a -> s {description = a} :: CopyFpgaImage)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+copyFpgaImage_dryRun :: Lens.Lens' CopyFpgaImage (Prelude.Maybe Prelude.Bool)
+copyFpgaImage_dryRun = Lens.lens (\CopyFpgaImage' {dryRun} -> dryRun) (\s@CopyFpgaImage' {} a -> s {dryRun = a} :: CopyFpgaImage)
+
+-- | The name for the new AFI. The default is the name of the source AFI.
+copyFpgaImage_name :: Lens.Lens' CopyFpgaImage (Prelude.Maybe Prelude.Text)
+copyFpgaImage_name = Lens.lens (\CopyFpgaImage' {name} -> name) (\s@CopyFpgaImage' {} a -> s {name = a} :: CopyFpgaImage)
+
+-- | The ID of the source AFI.
+copyFpgaImage_sourceFpgaImageId :: Lens.Lens' CopyFpgaImage Prelude.Text
+copyFpgaImage_sourceFpgaImageId = Lens.lens (\CopyFpgaImage' {sourceFpgaImageId} -> sourceFpgaImageId) (\s@CopyFpgaImage' {} a -> s {sourceFpgaImageId = a} :: CopyFpgaImage)
+
+-- | The Region that contains the source AFI.
+copyFpgaImage_sourceRegion :: Lens.Lens' CopyFpgaImage Prelude.Text
+copyFpgaImage_sourceRegion = Lens.lens (\CopyFpgaImage' {sourceRegion} -> sourceRegion) (\s@CopyFpgaImage' {} a -> s {sourceRegion = a} :: CopyFpgaImage)
+
+instance Core.AWSRequest CopyFpgaImage where
+  type
+    AWSResponse CopyFpgaImage =
+      CopyFpgaImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CopyFpgaImageResponse'
+            Prelude.<$> (x Data..@? "fpgaImageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CopyFpgaImage where
+  hashWithSalt _salt CopyFpgaImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sourceFpgaImageId
+      `Prelude.hashWithSalt` sourceRegion
+
+instance Prelude.NFData CopyFpgaImage where
+  rnf CopyFpgaImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceFpgaImageId
+      `Prelude.seq` Prelude.rnf sourceRegion
+
+instance Data.ToHeaders CopyFpgaImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CopyFpgaImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CopyFpgaImage where
+  toQuery CopyFpgaImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CopyFpgaImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "Name" Data.=: name,
+        "SourceFpgaImageId" Data.=: sourceFpgaImageId,
+        "SourceRegion" Data.=: sourceRegion
+      ]
+
+-- | /See:/ 'newCopyFpgaImageResponse' smart constructor.
+data CopyFpgaImageResponse = CopyFpgaImageResponse'
+  { -- | The ID of the new AFI.
+    fpgaImageId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyFpgaImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpgaImageId', 'copyFpgaImageResponse_fpgaImageId' - The ID of the new AFI.
+--
+-- 'httpStatus', 'copyFpgaImageResponse_httpStatus' - The response's http status code.
+newCopyFpgaImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CopyFpgaImageResponse
+newCopyFpgaImageResponse pHttpStatus_ =
+  CopyFpgaImageResponse'
+    { fpgaImageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the new AFI.
+copyFpgaImageResponse_fpgaImageId :: Lens.Lens' CopyFpgaImageResponse (Prelude.Maybe Prelude.Text)
+copyFpgaImageResponse_fpgaImageId = Lens.lens (\CopyFpgaImageResponse' {fpgaImageId} -> fpgaImageId) (\s@CopyFpgaImageResponse' {} a -> s {fpgaImageId = a} :: CopyFpgaImageResponse)
+
+-- | The response's http status code.
+copyFpgaImageResponse_httpStatus :: Lens.Lens' CopyFpgaImageResponse Prelude.Int
+copyFpgaImageResponse_httpStatus = Lens.lens (\CopyFpgaImageResponse' {httpStatus} -> httpStatus) (\s@CopyFpgaImageResponse' {} a -> s {httpStatus = a} :: CopyFpgaImageResponse)
+
+instance Prelude.NFData CopyFpgaImageResponse where
+  rnf CopyFpgaImageResponse' {..} =
+    Prelude.rnf fpgaImageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CopyImage.hs b/gen/Amazonka/EC2/CopyImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CopyImage.hs
@@ -0,0 +1,471 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CopyImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates the copy of an AMI. You can copy an AMI from one Region to
+-- another, or from a Region to an Outpost. You can\'t copy an AMI from an
+-- Outpost to a Region, from one Outpost to another, or within the same
+-- Outpost. To copy an AMI to another partition, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html CreateStoreImageTask>.
+--
+-- To copy an AMI from one Region to another, specify the source Region
+-- using the __SourceRegion__ parameter, and specify the destination Region
+-- using its endpoint. Copies of encrypted backing snapshots for the AMI
+-- are encrypted. Copies of unencrypted backing snapshots remain
+-- unencrypted, unless you set @Encrypted@ during the copy operation. You
+-- cannot create an unencrypted copy of an encrypted backing snapshot.
+--
+-- To copy an AMI from a Region to an Outpost, specify the source Region
+-- using the __SourceRegion__ parameter, and specify the ARN of the
+-- destination Outpost using __DestinationOutpostArn__. Backing snapshots
+-- copied to an Outpost are encrypted by default using the default
+-- encryption key for the Region, or a different key that you specify in
+-- the request using __KmsKeyId__. Outposts do not support unencrypted
+-- snapshots. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami Amazon EBS local snapshots on Outposts>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For more information about the prerequisites and limits when copying an
+-- AMI, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html Copy an AMI>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CopyImage
+  ( -- * Creating a Request
+    CopyImage (..),
+    newCopyImage,
+
+    -- * Request Lenses
+    copyImage_clientToken,
+    copyImage_copyImageTags,
+    copyImage_description,
+    copyImage_destinationOutpostArn,
+    copyImage_dryRun,
+    copyImage_encrypted,
+    copyImage_kmsKeyId,
+    copyImage_name,
+    copyImage_sourceImageId,
+    copyImage_sourceRegion,
+
+    -- * Destructuring the Response
+    CopyImageResponse (..),
+    newCopyImageResponse,
+
+    -- * Response Lenses
+    copyImageResponse_imageId,
+    copyImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CopyImage.
+--
+-- /See:/ 'newCopyImage' smart constructor.
+data CopyImage = CopyImage'
+  { -- | Unique, case-sensitive identifier you provide to ensure idempotency of
+    -- the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+    -- in the /Amazon EC2 API Reference/.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to include your user-defined AMI tags when copying the
+    -- AMI.
+    --
+    -- The following tags will not be copied:
+    --
+    -- -   System tags (prefixed with @aws:@)
+    --
+    -- -   For public and shared AMIs, user-defined tags that are attached by
+    --     other Amazon Web Services accounts
+    --
+    -- Default: Your user-defined AMI tags are not copied.
+    copyImageTags :: Prelude.Maybe Prelude.Bool,
+    -- | A description for the new AMI in the destination Region.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI.
+    -- Only specify this parameter when copying an AMI from an Amazon Web
+    -- Services Region to an Outpost. The AMI must be in the Region of the
+    -- destination Outpost. You cannot copy an AMI from an Outpost to a Region,
+    -- from one Outpost to another, or within the same Outpost.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-amis Copy AMIs from an Amazon Web Services Region to an Outpost>
+    -- in the /Amazon EC2 User Guide/.
+    destinationOutpostArn :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the destination snapshots of the copied image should
+    -- be encrypted. You can encrypt a copy of an unencrypted snapshot, but you
+    -- cannot create an unencrypted copy of an encrypted snapshot. The default
+    -- KMS key for Amazon EBS is used unless you specify a non-default Key
+    -- Management Service (KMS) KMS key using @KmsKeyId@. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+    -- in the /Amazon EC2 User Guide/.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the symmetric Key Management Service (KMS) KMS key to
+    -- use when creating encrypted volumes. If this parameter is not specified,
+    -- your Amazon Web Services managed KMS key for Amazon EBS is used. If you
+    -- specify a KMS key, you must also set the encrypted state to @true@.
+    --
+    -- You can specify a KMS key using any of the following:
+    --
+    -- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Key alias. For example, alias\/ExampleAlias.
+    --
+    -- -   Key ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Alias ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+    --
+    -- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+    -- if you specify an identifier that is not valid, the action can appear to
+    -- complete, but eventually fails.
+    --
+    -- The specified KMS key must exist in the destination Region.
+    --
+    -- Amazon EBS does not support asymmetric KMS keys.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the new AMI in the destination Region.
+    name :: Prelude.Text,
+    -- | The ID of the AMI to copy.
+    sourceImageId :: Prelude.Text,
+    -- | The name of the Region that contains the AMI to copy.
+    sourceRegion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'copyImage_clientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+-- in the /Amazon EC2 API Reference/.
+--
+-- 'copyImageTags', 'copyImage_copyImageTags' - Indicates whether to include your user-defined AMI tags when copying the
+-- AMI.
+--
+-- The following tags will not be copied:
+--
+-- -   System tags (prefixed with @aws:@)
+--
+-- -   For public and shared AMIs, user-defined tags that are attached by
+--     other Amazon Web Services accounts
+--
+-- Default: Your user-defined AMI tags are not copied.
+--
+-- 'description', 'copyImage_description' - A description for the new AMI in the destination Region.
+--
+-- 'destinationOutpostArn', 'copyImage_destinationOutpostArn' - The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI.
+-- Only specify this parameter when copying an AMI from an Amazon Web
+-- Services Region to an Outpost. The AMI must be in the Region of the
+-- destination Outpost. You cannot copy an AMI from an Outpost to a Region,
+-- from one Outpost to another, or within the same Outpost.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-amis Copy AMIs from an Amazon Web Services Region to an Outpost>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'dryRun', 'copyImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'encrypted', 'copyImage_encrypted' - Specifies whether the destination snapshots of the copied image should
+-- be encrypted. You can encrypt a copy of an unencrypted snapshot, but you
+-- cannot create an unencrypted copy of an encrypted snapshot. The default
+-- KMS key for Amazon EBS is used unless you specify a non-default Key
+-- Management Service (KMS) KMS key using @KmsKeyId@. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'kmsKeyId', 'copyImage_kmsKeyId' - The identifier of the symmetric Key Management Service (KMS) KMS key to
+-- use when creating encrypted volumes. If this parameter is not specified,
+-- your Amazon Web Services managed KMS key for Amazon EBS is used. If you
+-- specify a KMS key, you must also set the encrypted state to @true@.
+--
+-- You can specify a KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an identifier that is not valid, the action can appear to
+-- complete, but eventually fails.
+--
+-- The specified KMS key must exist in the destination Region.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+--
+-- 'name', 'copyImage_name' - The name of the new AMI in the destination Region.
+--
+-- 'sourceImageId', 'copyImage_sourceImageId' - The ID of the AMI to copy.
+--
+-- 'sourceRegion', 'copyImage_sourceRegion' - The name of the Region that contains the AMI to copy.
+newCopyImage ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sourceImageId'
+  Prelude.Text ->
+  -- | 'sourceRegion'
+  Prelude.Text ->
+  CopyImage
+newCopyImage pName_ pSourceImageId_ pSourceRegion_ =
+  CopyImage'
+    { clientToken = Prelude.Nothing,
+      copyImageTags = Prelude.Nothing,
+      description = Prelude.Nothing,
+      destinationOutpostArn = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      name = pName_,
+      sourceImageId = pSourceImageId_,
+      sourceRegion = pSourceRegion_
+    }
+
+-- | Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>
+-- in the /Amazon EC2 API Reference/.
+copyImage_clientToken :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Text)
+copyImage_clientToken = Lens.lens (\CopyImage' {clientToken} -> clientToken) (\s@CopyImage' {} a -> s {clientToken = a} :: CopyImage)
+
+-- | Indicates whether to include your user-defined AMI tags when copying the
+-- AMI.
+--
+-- The following tags will not be copied:
+--
+-- -   System tags (prefixed with @aws:@)
+--
+-- -   For public and shared AMIs, user-defined tags that are attached by
+--     other Amazon Web Services accounts
+--
+-- Default: Your user-defined AMI tags are not copied.
+copyImage_copyImageTags :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Bool)
+copyImage_copyImageTags = Lens.lens (\CopyImage' {copyImageTags} -> copyImageTags) (\s@CopyImage' {} a -> s {copyImageTags = a} :: CopyImage)
+
+-- | A description for the new AMI in the destination Region.
+copyImage_description :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Text)
+copyImage_description = Lens.lens (\CopyImage' {description} -> description) (\s@CopyImage' {} a -> s {description = a} :: CopyImage)
+
+-- | The Amazon Resource Name (ARN) of the Outpost to which to copy the AMI.
+-- Only specify this parameter when copying an AMI from an Amazon Web
+-- Services Region to an Outpost. The AMI must be in the Region of the
+-- destination Outpost. You cannot copy an AMI from an Outpost to a Region,
+-- from one Outpost to another, or within the same Outpost.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-amis Copy AMIs from an Amazon Web Services Region to an Outpost>
+-- in the /Amazon EC2 User Guide/.
+copyImage_destinationOutpostArn :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Text)
+copyImage_destinationOutpostArn = Lens.lens (\CopyImage' {destinationOutpostArn} -> destinationOutpostArn) (\s@CopyImage' {} a -> s {destinationOutpostArn = a} :: CopyImage)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+copyImage_dryRun :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Bool)
+copyImage_dryRun = Lens.lens (\CopyImage' {dryRun} -> dryRun) (\s@CopyImage' {} a -> s {dryRun = a} :: CopyImage)
+
+-- | Specifies whether the destination snapshots of the copied image should
+-- be encrypted. You can encrypt a copy of an unencrypted snapshot, but you
+-- cannot create an unencrypted copy of an encrypted snapshot. The default
+-- KMS key for Amazon EBS is used unless you specify a non-default Key
+-- Management Service (KMS) KMS key using @KmsKeyId@. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon EC2 User Guide/.
+copyImage_encrypted :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Bool)
+copyImage_encrypted = Lens.lens (\CopyImage' {encrypted} -> encrypted) (\s@CopyImage' {} a -> s {encrypted = a} :: CopyImage)
+
+-- | The identifier of the symmetric Key Management Service (KMS) KMS key to
+-- use when creating encrypted volumes. If this parameter is not specified,
+-- your Amazon Web Services managed KMS key for Amazon EBS is used. If you
+-- specify a KMS key, you must also set the encrypted state to @true@.
+--
+-- You can specify a KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an identifier that is not valid, the action can appear to
+-- complete, but eventually fails.
+--
+-- The specified KMS key must exist in the destination Region.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+copyImage_kmsKeyId :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Text)
+copyImage_kmsKeyId = Lens.lens (\CopyImage' {kmsKeyId} -> kmsKeyId) (\s@CopyImage' {} a -> s {kmsKeyId = a} :: CopyImage)
+
+-- | The name of the new AMI in the destination Region.
+copyImage_name :: Lens.Lens' CopyImage Prelude.Text
+copyImage_name = Lens.lens (\CopyImage' {name} -> name) (\s@CopyImage' {} a -> s {name = a} :: CopyImage)
+
+-- | The ID of the AMI to copy.
+copyImage_sourceImageId :: Lens.Lens' CopyImage Prelude.Text
+copyImage_sourceImageId = Lens.lens (\CopyImage' {sourceImageId} -> sourceImageId) (\s@CopyImage' {} a -> s {sourceImageId = a} :: CopyImage)
+
+-- | The name of the Region that contains the AMI to copy.
+copyImage_sourceRegion :: Lens.Lens' CopyImage Prelude.Text
+copyImage_sourceRegion = Lens.lens (\CopyImage' {sourceRegion} -> sourceRegion) (\s@CopyImage' {} a -> s {sourceRegion = a} :: CopyImage)
+
+instance Core.AWSRequest CopyImage where
+  type AWSResponse CopyImage = CopyImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CopyImageResponse'
+            Prelude.<$> (x Data..@? "imageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CopyImage where
+  hashWithSalt _salt CopyImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` copyImageTags
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationOutpostArn
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sourceImageId
+      `Prelude.hashWithSalt` sourceRegion
+
+instance Prelude.NFData CopyImage where
+  rnf CopyImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf copyImageTags
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationOutpostArn
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceImageId
+      `Prelude.seq` Prelude.rnf sourceRegion
+
+instance Data.ToHeaders CopyImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CopyImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CopyImage where
+  toQuery CopyImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CopyImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "CopyImageTags" Data.=: copyImageTags,
+        "Description" Data.=: description,
+        "DestinationOutpostArn"
+          Data.=: destinationOutpostArn,
+        "DryRun" Data.=: dryRun,
+        "Encrypted" Data.=: encrypted,
+        "KmsKeyId" Data.=: kmsKeyId,
+        "Name" Data.=: name,
+        "SourceImageId" Data.=: sourceImageId,
+        "SourceRegion" Data.=: sourceRegion
+      ]
+
+-- | Contains the output of CopyImage.
+--
+-- /See:/ 'newCopyImageResponse' smart constructor.
+data CopyImageResponse = CopyImageResponse'
+  { -- | The ID of the new AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'copyImageResponse_imageId' - The ID of the new AMI.
+--
+-- 'httpStatus', 'copyImageResponse_httpStatus' - The response's http status code.
+newCopyImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CopyImageResponse
+newCopyImageResponse pHttpStatus_ =
+  CopyImageResponse'
+    { imageId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the new AMI.
+copyImageResponse_imageId :: Lens.Lens' CopyImageResponse (Prelude.Maybe Prelude.Text)
+copyImageResponse_imageId = Lens.lens (\CopyImageResponse' {imageId} -> imageId) (\s@CopyImageResponse' {} a -> s {imageId = a} :: CopyImageResponse)
+
+-- | The response's http status code.
+copyImageResponse_httpStatus :: Lens.Lens' CopyImageResponse Prelude.Int
+copyImageResponse_httpStatus = Lens.lens (\CopyImageResponse' {httpStatus} -> httpStatus) (\s@CopyImageResponse' {} a -> s {httpStatus = a} :: CopyImageResponse)
+
+instance Prelude.NFData CopyImageResponse where
+  rnf CopyImageResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CopySnapshot.hs b/gen/Amazonka/EC2/CopySnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CopySnapshot.hs
@@ -0,0 +1,499 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CopySnapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Copies a point-in-time snapshot of an EBS volume and stores it in Amazon
+-- S3. You can copy a snapshot within the same Region, from one Region to
+-- another, or from a Region to an Outpost. You can\'t copy a snapshot from
+-- an Outpost to a Region, from one Outpost to another, or within the same
+-- Outpost.
+--
+-- You can use the snapshot to create EBS volumes or Amazon Machine Images
+-- (AMIs).
+--
+-- When copying snapshots to a Region, copies of encrypted EBS snapshots
+-- remain encrypted. Copies of unencrypted snapshots remain unencrypted,
+-- unless you enable encryption for the snapshot copy operation. By
+-- default, encrypted snapshot copies use the default Key Management
+-- Service (KMS) KMS key; however, you can specify a different KMS key. To
+-- copy an encrypted snapshot that has been shared from another account,
+-- you must have permissions for the KMS key used to encrypt the snapshot.
+--
+-- Snapshots copied to an Outpost are encrypted by default using the
+-- default encryption key for the Region, or a different key that you
+-- specify in the request using __KmsKeyId__. Outposts do not support
+-- unencrypted snapshots. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Snapshots created by copying another snapshot have an arbitrary volume
+-- ID that should not be used for any purpose.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html Copy an Amazon EBS snapshot>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CopySnapshot
+  ( -- * Creating a Request
+    CopySnapshot (..),
+    newCopySnapshot,
+
+    -- * Request Lenses
+    copySnapshot_description,
+    copySnapshot_destinationOutpostArn,
+    copySnapshot_destinationRegion,
+    copySnapshot_dryRun,
+    copySnapshot_encrypted,
+    copySnapshot_kmsKeyId,
+    copySnapshot_presignedUrl,
+    copySnapshot_tagSpecifications,
+    copySnapshot_sourceRegion,
+    copySnapshot_sourceSnapshotId,
+
+    -- * Destructuring the Response
+    CopySnapshotResponse (..),
+    newCopySnapshotResponse,
+
+    -- * Response Lenses
+    copySnapshotResponse_snapshotId,
+    copySnapshotResponse_tags,
+    copySnapshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCopySnapshot' smart constructor.
+data CopySnapshot = CopySnapshot'
+  { -- | A description for the EBS snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Outpost to which to copy the
+    -- snapshot. Only specify this parameter when copying a snapshot from an
+    -- Amazon Web Services Region to an Outpost. The snapshot must be in the
+    -- Region for the destination Outpost. You cannot copy a snapshot from an
+    -- Outpost to a Region, from one Outpost to another, or within the same
+    -- Outpost.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-snapshots Copy snapshots from an Amazon Web Services Region to an Outpost>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    destinationOutpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The destination Region to use in the @PresignedUrl@ parameter of a
+    -- snapshot copy operation. This parameter is only valid for specifying the
+    -- destination Region in a @PresignedUrl@ parameter, where it is required.
+    --
+    -- The snapshot copy is sent to the regional endpoint that you sent the
+    -- HTTP request to (for example, @ec2.us-east-1.amazonaws.com@). With the
+    -- CLI, this is specified using the @--region@ parameter or the default
+    -- Region in your Amazon Web Services configuration file.
+    destinationRegion :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | To encrypt a copy of an unencrypted snapshot if encryption by default is
+    -- not enabled, enable encryption using this parameter. Otherwise, omit
+    -- this parameter. Encrypted snapshots are encrypted, even if you omit this
+    -- parameter and encryption by default is not enabled. You cannot set this
+    -- parameter to false. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the Key Management Service (KMS) KMS key to use for
+    -- Amazon EBS encryption. If this parameter is not specified, your KMS key
+    -- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+    -- must be @true@.
+    --
+    -- You can specify the KMS key using any of the following:
+    --
+    -- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Key alias. For example, alias\/ExampleAlias.
+    --
+    -- -   Key ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Alias ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+    --
+    -- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+    -- if you specify an ID, alias, or ARN that is not valid, the action can
+    -- appear to complete, but eventually fails.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | When you copy an encrypted source snapshot using the Amazon EC2 Query
+    -- API, you must supply a pre-signed URL. This parameter is optional for
+    -- unencrypted snapshots. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html Query requests>.
+    --
+    -- The @PresignedUrl@ should use the snapshot source endpoint, the
+    -- @CopySnapshot@ action, and include the @SourceRegion@,
+    -- @SourceSnapshotId@, and @DestinationRegion@ parameters. The
+    -- @PresignedUrl@ must be signed using Amazon Web Services Signature
+    -- Version 4. Because EBS snapshots are stored in Amazon S3, the signing
+    -- algorithm for this parameter uses the same logic that is described in
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)>
+    -- in the /Amazon Simple Storage Service API Reference/. An invalid or
+    -- improperly signed @PresignedUrl@ will cause the copy operation to fail
+    -- asynchronously, and the snapshot will move to an @error@ state.
+    presignedUrl :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the new snapshot.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the Region that contains the snapshot to be copied.
+    sourceRegion :: Prelude.Text,
+    -- | The ID of the EBS snapshot to copy.
+    sourceSnapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopySnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'copySnapshot_description' - A description for the EBS snapshot.
+--
+-- 'destinationOutpostArn', 'copySnapshot_destinationOutpostArn' - The Amazon Resource Name (ARN) of the Outpost to which to copy the
+-- snapshot. Only specify this parameter when copying a snapshot from an
+-- Amazon Web Services Region to an Outpost. The snapshot must be in the
+-- Region for the destination Outpost. You cannot copy a snapshot from an
+-- Outpost to a Region, from one Outpost to another, or within the same
+-- Outpost.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-snapshots Copy snapshots from an Amazon Web Services Region to an Outpost>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'destinationRegion', 'copySnapshot_destinationRegion' - The destination Region to use in the @PresignedUrl@ parameter of a
+-- snapshot copy operation. This parameter is only valid for specifying the
+-- destination Region in a @PresignedUrl@ parameter, where it is required.
+--
+-- The snapshot copy is sent to the regional endpoint that you sent the
+-- HTTP request to (for example, @ec2.us-east-1.amazonaws.com@). With the
+-- CLI, this is specified using the @--region@ parameter or the default
+-- Region in your Amazon Web Services configuration file.
+--
+-- 'dryRun', 'copySnapshot_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'encrypted', 'copySnapshot_encrypted' - To encrypt a copy of an unencrypted snapshot if encryption by default is
+-- not enabled, enable encryption using this parameter. Otherwise, omit
+-- this parameter. Encrypted snapshots are encrypted, even if you omit this
+-- parameter and encryption by default is not enabled. You cannot set this
+-- parameter to false. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'kmsKeyId', 'copySnapshot_kmsKeyId' - The identifier of the Key Management Service (KMS) KMS key to use for
+-- Amazon EBS encryption. If this parameter is not specified, your KMS key
+-- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+-- must be @true@.
+--
+-- You can specify the KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an ID, alias, or ARN that is not valid, the action can
+-- appear to complete, but eventually fails.
+--
+-- 'presignedUrl', 'copySnapshot_presignedUrl' - When you copy an encrypted source snapshot using the Amazon EC2 Query
+-- API, you must supply a pre-signed URL. This parameter is optional for
+-- unencrypted snapshots. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html Query requests>.
+--
+-- The @PresignedUrl@ should use the snapshot source endpoint, the
+-- @CopySnapshot@ action, and include the @SourceRegion@,
+-- @SourceSnapshotId@, and @DestinationRegion@ parameters. The
+-- @PresignedUrl@ must be signed using Amazon Web Services Signature
+-- Version 4. Because EBS snapshots are stored in Amazon S3, the signing
+-- algorithm for this parameter uses the same logic that is described in
+-- <https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)>
+-- in the /Amazon Simple Storage Service API Reference/. An invalid or
+-- improperly signed @PresignedUrl@ will cause the copy operation to fail
+-- asynchronously, and the snapshot will move to an @error@ state.
+--
+-- 'tagSpecifications', 'copySnapshot_tagSpecifications' - The tags to apply to the new snapshot.
+--
+-- 'sourceRegion', 'copySnapshot_sourceRegion' - The ID of the Region that contains the snapshot to be copied.
+--
+-- 'sourceSnapshotId', 'copySnapshot_sourceSnapshotId' - The ID of the EBS snapshot to copy.
+newCopySnapshot ::
+  -- | 'sourceRegion'
+  Prelude.Text ->
+  -- | 'sourceSnapshotId'
+  Prelude.Text ->
+  CopySnapshot
+newCopySnapshot pSourceRegion_ pSourceSnapshotId_ =
+  CopySnapshot'
+    { description = Prelude.Nothing,
+      destinationOutpostArn = Prelude.Nothing,
+      destinationRegion = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      presignedUrl = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      sourceRegion = pSourceRegion_,
+      sourceSnapshotId = pSourceSnapshotId_
+    }
+
+-- | A description for the EBS snapshot.
+copySnapshot_description :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Text)
+copySnapshot_description = Lens.lens (\CopySnapshot' {description} -> description) (\s@CopySnapshot' {} a -> s {description = a} :: CopySnapshot)
+
+-- | The Amazon Resource Name (ARN) of the Outpost to which to copy the
+-- snapshot. Only specify this parameter when copying a snapshot from an
+-- Amazon Web Services Region to an Outpost. The snapshot must be in the
+-- Region for the destination Outpost. You cannot copy a snapshot from an
+-- Outpost to a Region, from one Outpost to another, or within the same
+-- Outpost.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#copy-snapshots Copy snapshots from an Amazon Web Services Region to an Outpost>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+copySnapshot_destinationOutpostArn :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Text)
+copySnapshot_destinationOutpostArn = Lens.lens (\CopySnapshot' {destinationOutpostArn} -> destinationOutpostArn) (\s@CopySnapshot' {} a -> s {destinationOutpostArn = a} :: CopySnapshot)
+
+-- | The destination Region to use in the @PresignedUrl@ parameter of a
+-- snapshot copy operation. This parameter is only valid for specifying the
+-- destination Region in a @PresignedUrl@ parameter, where it is required.
+--
+-- The snapshot copy is sent to the regional endpoint that you sent the
+-- HTTP request to (for example, @ec2.us-east-1.amazonaws.com@). With the
+-- CLI, this is specified using the @--region@ parameter or the default
+-- Region in your Amazon Web Services configuration file.
+copySnapshot_destinationRegion :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Text)
+copySnapshot_destinationRegion = Lens.lens (\CopySnapshot' {destinationRegion} -> destinationRegion) (\s@CopySnapshot' {} a -> s {destinationRegion = a} :: CopySnapshot)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+copySnapshot_dryRun :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Bool)
+copySnapshot_dryRun = Lens.lens (\CopySnapshot' {dryRun} -> dryRun) (\s@CopySnapshot' {} a -> s {dryRun = a} :: CopySnapshot)
+
+-- | To encrypt a copy of an unencrypted snapshot if encryption by default is
+-- not enabled, enable encryption using this parameter. Otherwise, omit
+-- this parameter. Encrypted snapshots are encrypted, even if you omit this
+-- parameter and encryption by default is not enabled. You cannot set this
+-- parameter to false. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+copySnapshot_encrypted :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Bool)
+copySnapshot_encrypted = Lens.lens (\CopySnapshot' {encrypted} -> encrypted) (\s@CopySnapshot' {} a -> s {encrypted = a} :: CopySnapshot)
+
+-- | The identifier of the Key Management Service (KMS) KMS key to use for
+-- Amazon EBS encryption. If this parameter is not specified, your KMS key
+-- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+-- must be @true@.
+--
+-- You can specify the KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an ID, alias, or ARN that is not valid, the action can
+-- appear to complete, but eventually fails.
+copySnapshot_kmsKeyId :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Text)
+copySnapshot_kmsKeyId = Lens.lens (\CopySnapshot' {kmsKeyId} -> kmsKeyId) (\s@CopySnapshot' {} a -> s {kmsKeyId = a} :: CopySnapshot)
+
+-- | When you copy an encrypted source snapshot using the Amazon EC2 Query
+-- API, you must supply a pre-signed URL. This parameter is optional for
+-- unencrypted snapshots. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html Query requests>.
+--
+-- The @PresignedUrl@ should use the snapshot source endpoint, the
+-- @CopySnapshot@ action, and include the @SourceRegion@,
+-- @SourceSnapshotId@, and @DestinationRegion@ parameters. The
+-- @PresignedUrl@ must be signed using Amazon Web Services Signature
+-- Version 4. Because EBS snapshots are stored in Amazon S3, the signing
+-- algorithm for this parameter uses the same logic that is described in
+-- <https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html Authenticating Requests: Using Query Parameters (Amazon Web Services Signature Version 4)>
+-- in the /Amazon Simple Storage Service API Reference/. An invalid or
+-- improperly signed @PresignedUrl@ will cause the copy operation to fail
+-- asynchronously, and the snapshot will move to an @error@ state.
+copySnapshot_presignedUrl :: Lens.Lens' CopySnapshot (Prelude.Maybe Prelude.Text)
+copySnapshot_presignedUrl = Lens.lens (\CopySnapshot' {presignedUrl} -> presignedUrl) (\s@CopySnapshot' {} a -> s {presignedUrl = a} :: CopySnapshot)
+
+-- | The tags to apply to the new snapshot.
+copySnapshot_tagSpecifications :: Lens.Lens' CopySnapshot (Prelude.Maybe [TagSpecification])
+copySnapshot_tagSpecifications = Lens.lens (\CopySnapshot' {tagSpecifications} -> tagSpecifications) (\s@CopySnapshot' {} a -> s {tagSpecifications = a} :: CopySnapshot) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Region that contains the snapshot to be copied.
+copySnapshot_sourceRegion :: Lens.Lens' CopySnapshot Prelude.Text
+copySnapshot_sourceRegion = Lens.lens (\CopySnapshot' {sourceRegion} -> sourceRegion) (\s@CopySnapshot' {} a -> s {sourceRegion = a} :: CopySnapshot)
+
+-- | The ID of the EBS snapshot to copy.
+copySnapshot_sourceSnapshotId :: Lens.Lens' CopySnapshot Prelude.Text
+copySnapshot_sourceSnapshotId = Lens.lens (\CopySnapshot' {sourceSnapshotId} -> sourceSnapshotId) (\s@CopySnapshot' {} a -> s {sourceSnapshotId = a} :: CopySnapshot)
+
+instance Core.AWSRequest CopySnapshot where
+  type AWSResponse CopySnapshot = CopySnapshotResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CopySnapshotResponse'
+            Prelude.<$> (x Data..@? "snapshotId")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CopySnapshot where
+  hashWithSalt _salt CopySnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationOutpostArn
+      `Prelude.hashWithSalt` destinationRegion
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` presignedUrl
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` sourceRegion
+      `Prelude.hashWithSalt` sourceSnapshotId
+
+instance Prelude.NFData CopySnapshot where
+  rnf CopySnapshot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationOutpostArn
+      `Prelude.seq` Prelude.rnf destinationRegion
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf presignedUrl
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf sourceRegion
+      `Prelude.seq` Prelude.rnf sourceSnapshotId
+
+instance Data.ToHeaders CopySnapshot where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CopySnapshot where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CopySnapshot where
+  toQuery CopySnapshot' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CopySnapshot" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DestinationOutpostArn"
+          Data.=: destinationOutpostArn,
+        "DestinationRegion" Data.=: destinationRegion,
+        "DryRun" Data.=: dryRun,
+        "Encrypted" Data.=: encrypted,
+        "KmsKeyId" Data.=: kmsKeyId,
+        "PresignedUrl" Data.=: presignedUrl,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "SourceRegion" Data.=: sourceRegion,
+        "SourceSnapshotId" Data.=: sourceSnapshotId
+      ]
+
+-- | /See:/ 'newCopySnapshotResponse' smart constructor.
+data CopySnapshotResponse = CopySnapshotResponse'
+  { -- | The ID of the new snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags applied to the new snapshot.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopySnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshotId', 'copySnapshotResponse_snapshotId' - The ID of the new snapshot.
+--
+-- 'tags', 'copySnapshotResponse_tags' - Any tags applied to the new snapshot.
+--
+-- 'httpStatus', 'copySnapshotResponse_httpStatus' - The response's http status code.
+newCopySnapshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CopySnapshotResponse
+newCopySnapshotResponse pHttpStatus_ =
+  CopySnapshotResponse'
+    { snapshotId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the new snapshot.
+copySnapshotResponse_snapshotId :: Lens.Lens' CopySnapshotResponse (Prelude.Maybe Prelude.Text)
+copySnapshotResponse_snapshotId = Lens.lens (\CopySnapshotResponse' {snapshotId} -> snapshotId) (\s@CopySnapshotResponse' {} a -> s {snapshotId = a} :: CopySnapshotResponse)
+
+-- | Any tags applied to the new snapshot.
+copySnapshotResponse_tags :: Lens.Lens' CopySnapshotResponse (Prelude.Maybe [Tag])
+copySnapshotResponse_tags = Lens.lens (\CopySnapshotResponse' {tags} -> tags) (\s@CopySnapshotResponse' {} a -> s {tags = a} :: CopySnapshotResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+copySnapshotResponse_httpStatus :: Lens.Lens' CopySnapshotResponse Prelude.Int
+copySnapshotResponse_httpStatus = Lens.lens (\CopySnapshotResponse' {httpStatus} -> httpStatus) (\s@CopySnapshotResponse' {} a -> s {httpStatus = a} :: CopySnapshotResponse)
+
+instance Prelude.NFData CopySnapshotResponse where
+  rnf CopySnapshotResponse' {..} =
+    Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateCapacityReservation.hs b/gen/Amazonka/EC2/CreateCapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateCapacityReservation.hs
@@ -0,0 +1,576 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateCapacityReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new Capacity Reservation with the specified attributes.
+--
+-- Capacity Reservations enable you to reserve capacity for your Amazon EC2
+-- instances in a specific Availability Zone for any duration. This gives
+-- you the flexibility to selectively add capacity reservations and still
+-- get the Regional RI discounts for that usage. By creating Capacity
+-- Reservations, you ensure that you always have access to Amazon EC2
+-- capacity when you need it, for as long as you need it. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html Capacity Reservations>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Your request to create a Capacity Reservation could fail if Amazon EC2
+-- does not have sufficient capacity to fulfill the request. If your
+-- request fails due to Amazon EC2 capacity constraints, either try again
+-- at a later time, try in a different Availability Zone, or request a
+-- smaller capacity reservation. If your application is flexible across
+-- instance types and sizes, try to create a Capacity Reservation with
+-- different instance attributes.
+--
+-- Your request could also fail if the requested quantity exceeds your
+-- On-Demand Instance limit for the selected instance type. If your request
+-- fails due to limit constraints, increase your On-Demand Instance limit
+-- for the required instance type and try again. For more information about
+-- increasing your instance limits, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html Amazon EC2 Service Quotas>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreateCapacityReservation
+  ( -- * Creating a Request
+    CreateCapacityReservation (..),
+    newCreateCapacityReservation,
+
+    -- * Request Lenses
+    createCapacityReservation_availabilityZone,
+    createCapacityReservation_availabilityZoneId,
+    createCapacityReservation_clientToken,
+    createCapacityReservation_dryRun,
+    createCapacityReservation_ebsOptimized,
+    createCapacityReservation_endDate,
+    createCapacityReservation_endDateType,
+    createCapacityReservation_ephemeralStorage,
+    createCapacityReservation_instanceMatchCriteria,
+    createCapacityReservation_outpostArn,
+    createCapacityReservation_placementGroupArn,
+    createCapacityReservation_tagSpecifications,
+    createCapacityReservation_tenancy,
+    createCapacityReservation_instanceType,
+    createCapacityReservation_instancePlatform,
+    createCapacityReservation_instanceCount,
+
+    -- * Destructuring the Response
+    CreateCapacityReservationResponse (..),
+    newCreateCapacityReservationResponse,
+
+    -- * Response Lenses
+    createCapacityReservationResponse_capacityReservation,
+    createCapacityReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCapacityReservation' smart constructor.
+data CreateCapacityReservation = CreateCapacityReservation'
+  { -- | The Availability Zone in which to create the Capacity Reservation.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Availability Zone in which to create the Capacity
+    -- Reservation.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the Capacity Reservation supports EBS-optimized
+    -- instances. This optimization provides dedicated throughput to Amazon EBS
+    -- and an optimized configuration stack to provide optimal I\/O
+    -- performance. This optimization isn\'t available with all instance types.
+    -- Additional usage charges apply when using an EBS- optimized instance.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    --
+    -- You must provide an @EndDate@ value if @EndDateType@ is @limited@. Omit
+    -- @EndDate@ if @EndDateType@ is @unlimited@.
+    --
+    -- If the @EndDateType@ is @limited@, the Capacity Reservation is cancelled
+    -- within an hour from the specified time. For example, if you specify
+    -- 5\/31\/2019, 13:30:55, the Capacity Reservation is guaranteed to end
+    -- between 13:30:55 and 14:30:55 on 5\/31\/2019.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | 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. Do not provide an @EndDate@ if the
+    --     @EndDateType@ is @unlimited@.
+    --
+    -- -   @limited@ - The Capacity Reservation expires automatically at a
+    --     specified date and time. You must provide an @EndDate@ value if the
+    --     @EndDateType@ value is @limited@.
+    endDateType :: Prelude.Maybe EndDateType,
+    -- | /Deprecated./
+    ephemeralStorage :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates the type of instance launches that the Capacity Reservation
+    -- accepts. The options include:
+    --
+    -- -   @open@ - The Capacity Reservation automatically matches all
+    --     instances that have matching attributes (instance type, platform,
+    --     and Availability Zone). Instances that have matching attributes run
+    --     in 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.
+    --
+    -- Default: @open@
+    instanceMatchCriteria :: Prelude.Maybe InstanceMatchCriteria,
+    -- | The Amazon Resource Name (ARN) of the Outpost on which to create the
+    -- Capacity Reservation.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the cluster placement group in which
+    -- to create the Capacity Reservation. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html Capacity Reservations for cluster placement groups>
+    -- in the /Amazon EC2 User Guide/.
+    placementGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the Capacity Reservation during launch.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | 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 Amazon Web Services accounts.
+    --
+    -- -   @dedicated@ - The Capacity Reservation is created on single-tenant
+    --     hardware that is dedicated to a single Amazon Web Services account.
+    tenancy :: Prelude.Maybe CapacityReservationTenancy,
+    -- | The instance type for which to reserve capacity. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    instanceType :: Prelude.Text,
+    -- | The type of operating system for which to reserve capacity.
+    instancePlatform :: CapacityReservationInstancePlatform,
+    -- | The number of instances for which to reserve capacity.
+    --
+    -- Valid range: 1 - 1000
+    instanceCount :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCapacityReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'createCapacityReservation_availabilityZone' - The Availability Zone in which to create the Capacity Reservation.
+--
+-- 'availabilityZoneId', 'createCapacityReservation_availabilityZoneId' - The ID of the Availability Zone in which to create the Capacity
+-- Reservation.
+--
+-- 'clientToken', 'createCapacityReservation_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+--
+-- 'dryRun', 'createCapacityReservation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ebsOptimized', 'createCapacityReservation_ebsOptimized' - Indicates whether the Capacity Reservation supports EBS-optimized
+-- instances. This optimization provides dedicated throughput to Amazon EBS
+-- and an optimized configuration stack to provide optimal I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS- optimized instance.
+--
+-- 'endDate', 'createCapacityReservation_endDate' - 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.
+--
+-- You must provide an @EndDate@ value if @EndDateType@ is @limited@. Omit
+-- @EndDate@ if @EndDateType@ is @unlimited@.
+--
+-- If the @EndDateType@ is @limited@, the Capacity Reservation is cancelled
+-- within an hour from the specified time. For example, if you specify
+-- 5\/31\/2019, 13:30:55, the Capacity Reservation is guaranteed to end
+-- between 13:30:55 and 14:30:55 on 5\/31\/2019.
+--
+-- 'endDateType', 'createCapacityReservation_endDateType' - 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. Do not provide an @EndDate@ if the
+--     @EndDateType@ is @unlimited@.
+--
+-- -   @limited@ - The Capacity Reservation expires automatically at a
+--     specified date and time. You must provide an @EndDate@ value if the
+--     @EndDateType@ value is @limited@.
+--
+-- 'ephemeralStorage', 'createCapacityReservation_ephemeralStorage' - /Deprecated./
+--
+-- 'instanceMatchCriteria', 'createCapacityReservation_instanceMatchCriteria' - Indicates the type of instance launches that the Capacity Reservation
+-- accepts. The options include:
+--
+-- -   @open@ - The Capacity Reservation automatically matches all
+--     instances that have matching attributes (instance type, platform,
+--     and Availability Zone). Instances that have matching attributes run
+--     in 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.
+--
+-- Default: @open@
+--
+-- 'outpostArn', 'createCapacityReservation_outpostArn' - The Amazon Resource Name (ARN) of the Outpost on which to create the
+-- Capacity Reservation.
+--
+-- 'placementGroupArn', 'createCapacityReservation_placementGroupArn' - The Amazon Resource Name (ARN) of the cluster placement group in which
+-- to create the Capacity Reservation. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html Capacity Reservations for cluster placement groups>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'tagSpecifications', 'createCapacityReservation_tagSpecifications' - The tags to apply to the Capacity Reservation during launch.
+--
+-- 'tenancy', 'createCapacityReservation_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 Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservation is created on single-tenant
+--     hardware that is dedicated to a single Amazon Web Services account.
+--
+-- 'instanceType', 'createCapacityReservation_instanceType' - The instance type for which to reserve capacity. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'instancePlatform', 'createCapacityReservation_instancePlatform' - The type of operating system for which to reserve capacity.
+--
+-- 'instanceCount', 'createCapacityReservation_instanceCount' - The number of instances for which to reserve capacity.
+--
+-- Valid range: 1 - 1000
+newCreateCapacityReservation ::
+  -- | 'instanceType'
+  Prelude.Text ->
+  -- | 'instancePlatform'
+  CapacityReservationInstancePlatform ->
+  -- | 'instanceCount'
+  Prelude.Int ->
+  CreateCapacityReservation
+newCreateCapacityReservation
+  pInstanceType_
+  pInstancePlatform_
+  pInstanceCount_ =
+    CreateCapacityReservation'
+      { availabilityZone =
+          Prelude.Nothing,
+        availabilityZoneId = Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        ebsOptimized = Prelude.Nothing,
+        endDate = Prelude.Nothing,
+        endDateType = Prelude.Nothing,
+        ephemeralStorage = Prelude.Nothing,
+        instanceMatchCriteria = Prelude.Nothing,
+        outpostArn = Prelude.Nothing,
+        placementGroupArn = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        tenancy = Prelude.Nothing,
+        instanceType = pInstanceType_,
+        instancePlatform = pInstancePlatform_,
+        instanceCount = pInstanceCount_
+      }
+
+-- | The Availability Zone in which to create the Capacity Reservation.
+createCapacityReservation_availabilityZone :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Text)
+createCapacityReservation_availabilityZone = Lens.lens (\CreateCapacityReservation' {availabilityZone} -> availabilityZone) (\s@CreateCapacityReservation' {} a -> s {availabilityZone = a} :: CreateCapacityReservation)
+
+-- | The ID of the Availability Zone in which to create the Capacity
+-- Reservation.
+createCapacityReservation_availabilityZoneId :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Text)
+createCapacityReservation_availabilityZoneId = Lens.lens (\CreateCapacityReservation' {availabilityZoneId} -> availabilityZoneId) (\s@CreateCapacityReservation' {} a -> s {availabilityZoneId = a} :: CreateCapacityReservation)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+createCapacityReservation_clientToken :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Text)
+createCapacityReservation_clientToken = Lens.lens (\CreateCapacityReservation' {clientToken} -> clientToken) (\s@CreateCapacityReservation' {} a -> s {clientToken = a} :: CreateCapacityReservation)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createCapacityReservation_dryRun :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Bool)
+createCapacityReservation_dryRun = Lens.lens (\CreateCapacityReservation' {dryRun} -> dryRun) (\s@CreateCapacityReservation' {} a -> s {dryRun = a} :: CreateCapacityReservation)
+
+-- | Indicates whether the Capacity Reservation supports EBS-optimized
+-- instances. This optimization provides dedicated throughput to Amazon EBS
+-- and an optimized configuration stack to provide optimal I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS- optimized instance.
+createCapacityReservation_ebsOptimized :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Bool)
+createCapacityReservation_ebsOptimized = Lens.lens (\CreateCapacityReservation' {ebsOptimized} -> ebsOptimized) (\s@CreateCapacityReservation' {} a -> s {ebsOptimized = a} :: CreateCapacityReservation)
+
+-- | 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.
+--
+-- You must provide an @EndDate@ value if @EndDateType@ is @limited@. Omit
+-- @EndDate@ if @EndDateType@ is @unlimited@.
+--
+-- If the @EndDateType@ is @limited@, the Capacity Reservation is cancelled
+-- within an hour from the specified time. For example, if you specify
+-- 5\/31\/2019, 13:30:55, the Capacity Reservation is guaranteed to end
+-- between 13:30:55 and 14:30:55 on 5\/31\/2019.
+createCapacityReservation_endDate :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.UTCTime)
+createCapacityReservation_endDate = Lens.lens (\CreateCapacityReservation' {endDate} -> endDate) (\s@CreateCapacityReservation' {} a -> s {endDate = a} :: CreateCapacityReservation) Prelude.. Lens.mapping Data._Time
+
+-- | 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. Do not provide an @EndDate@ if the
+--     @EndDateType@ is @unlimited@.
+--
+-- -   @limited@ - The Capacity Reservation expires automatically at a
+--     specified date and time. You must provide an @EndDate@ value if the
+--     @EndDateType@ value is @limited@.
+createCapacityReservation_endDateType :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe EndDateType)
+createCapacityReservation_endDateType = Lens.lens (\CreateCapacityReservation' {endDateType} -> endDateType) (\s@CreateCapacityReservation' {} a -> s {endDateType = a} :: CreateCapacityReservation)
+
+-- | /Deprecated./
+createCapacityReservation_ephemeralStorage :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Bool)
+createCapacityReservation_ephemeralStorage = Lens.lens (\CreateCapacityReservation' {ephemeralStorage} -> ephemeralStorage) (\s@CreateCapacityReservation' {} a -> s {ephemeralStorage = a} :: CreateCapacityReservation)
+
+-- | Indicates the type of instance launches that the Capacity Reservation
+-- accepts. The options include:
+--
+-- -   @open@ - The Capacity Reservation automatically matches all
+--     instances that have matching attributes (instance type, platform,
+--     and Availability Zone). Instances that have matching attributes run
+--     in 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.
+--
+-- Default: @open@
+createCapacityReservation_instanceMatchCriteria :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe InstanceMatchCriteria)
+createCapacityReservation_instanceMatchCriteria = Lens.lens (\CreateCapacityReservation' {instanceMatchCriteria} -> instanceMatchCriteria) (\s@CreateCapacityReservation' {} a -> s {instanceMatchCriteria = a} :: CreateCapacityReservation)
+
+-- | The Amazon Resource Name (ARN) of the Outpost on which to create the
+-- Capacity Reservation.
+createCapacityReservation_outpostArn :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Text)
+createCapacityReservation_outpostArn = Lens.lens (\CreateCapacityReservation' {outpostArn} -> outpostArn) (\s@CreateCapacityReservation' {} a -> s {outpostArn = a} :: CreateCapacityReservation)
+
+-- | The Amazon Resource Name (ARN) of the cluster placement group in which
+-- to create the Capacity Reservation. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html Capacity Reservations for cluster placement groups>
+-- in the /Amazon EC2 User Guide/.
+createCapacityReservation_placementGroupArn :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe Prelude.Text)
+createCapacityReservation_placementGroupArn = Lens.lens (\CreateCapacityReservation' {placementGroupArn} -> placementGroupArn) (\s@CreateCapacityReservation' {} a -> s {placementGroupArn = a} :: CreateCapacityReservation)
+
+-- | The tags to apply to the Capacity Reservation during launch.
+createCapacityReservation_tagSpecifications :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe [TagSpecification])
+createCapacityReservation_tagSpecifications = Lens.lens (\CreateCapacityReservation' {tagSpecifications} -> tagSpecifications) (\s@CreateCapacityReservation' {} a -> s {tagSpecifications = a} :: CreateCapacityReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | 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 Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservation is created on single-tenant
+--     hardware that is dedicated to a single Amazon Web Services account.
+createCapacityReservation_tenancy :: Lens.Lens' CreateCapacityReservation (Prelude.Maybe CapacityReservationTenancy)
+createCapacityReservation_tenancy = Lens.lens (\CreateCapacityReservation' {tenancy} -> tenancy) (\s@CreateCapacityReservation' {} a -> s {tenancy = a} :: CreateCapacityReservation)
+
+-- | The instance type for which to reserve capacity. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+createCapacityReservation_instanceType :: Lens.Lens' CreateCapacityReservation Prelude.Text
+createCapacityReservation_instanceType = Lens.lens (\CreateCapacityReservation' {instanceType} -> instanceType) (\s@CreateCapacityReservation' {} a -> s {instanceType = a} :: CreateCapacityReservation)
+
+-- | The type of operating system for which to reserve capacity.
+createCapacityReservation_instancePlatform :: Lens.Lens' CreateCapacityReservation CapacityReservationInstancePlatform
+createCapacityReservation_instancePlatform = Lens.lens (\CreateCapacityReservation' {instancePlatform} -> instancePlatform) (\s@CreateCapacityReservation' {} a -> s {instancePlatform = a} :: CreateCapacityReservation)
+
+-- | The number of instances for which to reserve capacity.
+--
+-- Valid range: 1 - 1000
+createCapacityReservation_instanceCount :: Lens.Lens' CreateCapacityReservation Prelude.Int
+createCapacityReservation_instanceCount = Lens.lens (\CreateCapacityReservation' {instanceCount} -> instanceCount) (\s@CreateCapacityReservation' {} a -> s {instanceCount = a} :: CreateCapacityReservation)
+
+instance Core.AWSRequest CreateCapacityReservation where
+  type
+    AWSResponse CreateCapacityReservation =
+      CreateCapacityReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateCapacityReservationResponse'
+            Prelude.<$> (x Data..@? "capacityReservation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCapacityReservation where
+  hashWithSalt _salt CreateCapacityReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` endDateType
+      `Prelude.hashWithSalt` ephemeralStorage
+      `Prelude.hashWithSalt` instanceMatchCriteria
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` placementGroupArn
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` tenancy
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` instancePlatform
+      `Prelude.hashWithSalt` instanceCount
+
+instance Prelude.NFData CreateCapacityReservation where
+  rnf CreateCapacityReservation' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf endDateType
+      `Prelude.seq` Prelude.rnf ephemeralStorage
+      `Prelude.seq` Prelude.rnf instanceMatchCriteria
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf placementGroupArn
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf instancePlatform
+      `Prelude.seq` Prelude.rnf instanceCount
+
+instance Data.ToHeaders CreateCapacityReservation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateCapacityReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCapacityReservation where
+  toQuery CreateCapacityReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateCapacityReservation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AvailabilityZone" Data.=: availabilityZone,
+        "AvailabilityZoneId" Data.=: availabilityZoneId,
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "EbsOptimized" Data.=: ebsOptimized,
+        "EndDate" Data.=: endDate,
+        "EndDateType" Data.=: endDateType,
+        "EphemeralStorage" Data.=: ephemeralStorage,
+        "InstanceMatchCriteria"
+          Data.=: instanceMatchCriteria,
+        "OutpostArn" Data.=: outpostArn,
+        "PlacementGroupArn" Data.=: placementGroupArn,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecifications"
+              Prelude.<$> tagSpecifications
+          ),
+        "Tenancy" Data.=: tenancy,
+        "InstanceType" Data.=: instanceType,
+        "InstancePlatform" Data.=: instancePlatform,
+        "InstanceCount" Data.=: instanceCount
+      ]
+
+-- | /See:/ 'newCreateCapacityReservationResponse' smart constructor.
+data CreateCapacityReservationResponse = CreateCapacityReservationResponse'
+  { -- | Information about the Capacity Reservation.
+    capacityReservation :: Prelude.Maybe CapacityReservation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCapacityReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservation', 'createCapacityReservationResponse_capacityReservation' - Information about the Capacity Reservation.
+--
+-- 'httpStatus', 'createCapacityReservationResponse_httpStatus' - The response's http status code.
+newCreateCapacityReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCapacityReservationResponse
+newCreateCapacityReservationResponse pHttpStatus_ =
+  CreateCapacityReservationResponse'
+    { capacityReservation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Capacity Reservation.
+createCapacityReservationResponse_capacityReservation :: Lens.Lens' CreateCapacityReservationResponse (Prelude.Maybe CapacityReservation)
+createCapacityReservationResponse_capacityReservation = Lens.lens (\CreateCapacityReservationResponse' {capacityReservation} -> capacityReservation) (\s@CreateCapacityReservationResponse' {} a -> s {capacityReservation = a} :: CreateCapacityReservationResponse)
+
+-- | The response's http status code.
+createCapacityReservationResponse_httpStatus :: Lens.Lens' CreateCapacityReservationResponse Prelude.Int
+createCapacityReservationResponse_httpStatus = Lens.lens (\CreateCapacityReservationResponse' {httpStatus} -> httpStatus) (\s@CreateCapacityReservationResponse' {} a -> s {httpStatus = a} :: CreateCapacityReservationResponse)
+
+instance
+  Prelude.NFData
+    CreateCapacityReservationResponse
+  where
+  rnf CreateCapacityReservationResponse' {..} =
+    Prelude.rnf capacityReservation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateCapacityReservationFleet.hs b/gen/Amazonka/EC2/CreateCapacityReservationFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateCapacityReservationFleet.hs
@@ -0,0 +1,562 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateCapacityReservationFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Capacity Reservation Fleet. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/work-with-cr-fleets.html#create-crfleet Create a Capacity Reservation Fleet>
+-- in the Amazon EC2 User Guide.
+module Amazonka.EC2.CreateCapacityReservationFleet
+  ( -- * Creating a Request
+    CreateCapacityReservationFleet (..),
+    newCreateCapacityReservationFleet,
+
+    -- * Request Lenses
+    createCapacityReservationFleet_allocationStrategy,
+    createCapacityReservationFleet_clientToken,
+    createCapacityReservationFleet_dryRun,
+    createCapacityReservationFleet_endDate,
+    createCapacityReservationFleet_instanceMatchCriteria,
+    createCapacityReservationFleet_tagSpecifications,
+    createCapacityReservationFleet_tenancy,
+    createCapacityReservationFleet_instanceTypeSpecifications,
+    createCapacityReservationFleet_totalTargetCapacity,
+
+    -- * Destructuring the Response
+    CreateCapacityReservationFleetResponse (..),
+    newCreateCapacityReservationFleetResponse,
+
+    -- * Response Lenses
+    createCapacityReservationFleetResponse_allocationStrategy,
+    createCapacityReservationFleetResponse_capacityReservationFleetId,
+    createCapacityReservationFleetResponse_createTime,
+    createCapacityReservationFleetResponse_endDate,
+    createCapacityReservationFleetResponse_fleetCapacityReservations,
+    createCapacityReservationFleetResponse_instanceMatchCriteria,
+    createCapacityReservationFleetResponse_state,
+    createCapacityReservationFleetResponse_tags,
+    createCapacityReservationFleetResponse_tenancy,
+    createCapacityReservationFleetResponse_totalFulfilledCapacity,
+    createCapacityReservationFleetResponse_totalTargetCapacity,
+    createCapacityReservationFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCapacityReservationFleet' smart constructor.
+data CreateCapacityReservationFleet = CreateCapacityReservationFleet'
+  { -- | The strategy used by the Capacity Reservation Fleet to determine which
+    -- of the specified instance types to use. Currently, only the
+    -- @prioritized@ allocation strategy is supported. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
+    -- in the Amazon EC2 User Guide.
+    --
+    -- Valid values: @prioritized@
+    allocationStrategy :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time at which the Capacity Reservation Fleet expires. When
+    -- the Capacity Reservation Fleet expires, its state changes to @expired@
+    -- and all of the Capacity Reservations in the Fleet expire.
+    --
+    -- The Capacity Reservation Fleet expires within an hour after the
+    -- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
+    -- the Capacity Reservation Fleet is guaranteed to expire between
+    -- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates the type of instance launches that the Capacity Reservation
+    -- Fleet accepts. All Capacity Reservations in the Fleet inherit this
+    -- instance matching criteria.
+    --
+    -- Currently, Capacity Reservation Fleets support @open@ instance matching
+    -- criteria only. This means that instances that have matching attributes
+    -- (instance type, platform, and Availability Zone) run in the Capacity
+    -- Reservations automatically. Instances do not need to explicitly target a
+    -- Capacity Reservation Fleet to use its reserved capacity.
+    instanceMatchCriteria :: Prelude.Maybe FleetInstanceMatchCriteria,
+    -- | The tags to assign to the Capacity Reservation Fleet. The tags are
+    -- automatically assigned to the Capacity Reservations in the Fleet.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | Indicates the tenancy of the Capacity Reservation Fleet. All Capacity
+    -- Reservations in the Fleet inherit this tenancy. The Capacity Reservation
+    -- Fleet can have one of the following tenancy settings:
+    --
+    -- -   @default@ - The Capacity Reservation Fleet is created on hardware
+    --     that is shared with other Amazon Web Services accounts.
+    --
+    -- -   @dedicated@ - The Capacity Reservations are created on single-tenant
+    --     hardware that is dedicated to a single Amazon Web Services account.
+    tenancy :: Prelude.Maybe FleetCapacityReservationTenancy,
+    -- | Information about the instance types for which to reserve the capacity.
+    instanceTypeSpecifications :: [ReservationFleetInstanceSpecification],
+    -- | The total number of capacity units to be reserved by the Capacity
+    -- Reservation Fleet. This value, together with the instance type weights
+    -- that you assign to each instance type used by the Fleet determine the
+    -- number of instances for which the Fleet reserves capacity. Both values
+    -- are based on units that make sense for your workload. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+    -- in the Amazon EC2 User Guide.
+    totalTargetCapacity :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCapacityReservationFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'createCapacityReservationFleet_allocationStrategy' - The strategy used by the Capacity Reservation Fleet to determine which
+-- of the specified instance types to use. Currently, only the
+-- @prioritized@ allocation strategy is supported. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
+-- in the Amazon EC2 User Guide.
+--
+-- Valid values: @prioritized@
+--
+-- 'clientToken', 'createCapacityReservationFleet_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+--
+-- 'dryRun', 'createCapacityReservationFleet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endDate', 'createCapacityReservationFleet_endDate' - The date and time at which the Capacity Reservation Fleet expires. When
+-- the Capacity Reservation Fleet expires, its state changes to @expired@
+-- and all of the Capacity Reservations in the Fleet expire.
+--
+-- The Capacity Reservation Fleet expires within an hour after the
+-- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
+-- the Capacity Reservation Fleet is guaranteed to expire between
+-- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
+--
+-- 'instanceMatchCriteria', 'createCapacityReservationFleet_instanceMatchCriteria' - Indicates the type of instance launches that the Capacity Reservation
+-- Fleet accepts. All Capacity Reservations in the Fleet inherit this
+-- instance matching criteria.
+--
+-- Currently, Capacity Reservation Fleets support @open@ instance matching
+-- criteria only. This means that instances that have matching attributes
+-- (instance type, platform, and Availability Zone) run in the Capacity
+-- Reservations automatically. Instances do not need to explicitly target a
+-- Capacity Reservation Fleet to use its reserved capacity.
+--
+-- 'tagSpecifications', 'createCapacityReservationFleet_tagSpecifications' - The tags to assign to the Capacity Reservation Fleet. The tags are
+-- automatically assigned to the Capacity Reservations in the Fleet.
+--
+-- 'tenancy', 'createCapacityReservationFleet_tenancy' - Indicates the tenancy of the Capacity Reservation Fleet. All Capacity
+-- Reservations in the Fleet inherit this tenancy. The Capacity Reservation
+-- Fleet can have one of the following tenancy settings:
+--
+-- -   @default@ - The Capacity Reservation Fleet is created on hardware
+--     that is shared with other Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservations are created on single-tenant
+--     hardware that is dedicated to a single Amazon Web Services account.
+--
+-- 'instanceTypeSpecifications', 'createCapacityReservationFleet_instanceTypeSpecifications' - Information about the instance types for which to reserve the capacity.
+--
+-- 'totalTargetCapacity', 'createCapacityReservationFleet_totalTargetCapacity' - The total number of capacity units to be reserved by the Capacity
+-- Reservation Fleet. This value, together with the instance type weights
+-- that you assign to each instance type used by the Fleet determine the
+-- number of instances for which the Fleet reserves capacity. Both values
+-- are based on units that make sense for your workload. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+newCreateCapacityReservationFleet ::
+  -- | 'totalTargetCapacity'
+  Prelude.Int ->
+  CreateCapacityReservationFleet
+newCreateCapacityReservationFleet
+  pTotalTargetCapacity_ =
+    CreateCapacityReservationFleet'
+      { allocationStrategy =
+          Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        endDate = Prelude.Nothing,
+        instanceMatchCriteria = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        tenancy = Prelude.Nothing,
+        instanceTypeSpecifications = Prelude.mempty,
+        totalTargetCapacity = pTotalTargetCapacity_
+      }
+
+-- | The strategy used by the Capacity Reservation Fleet to determine which
+-- of the specified instance types to use. Currently, only the
+-- @prioritized@ allocation strategy is supported. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
+-- in the Amazon EC2 User Guide.
+--
+-- Valid values: @prioritized@
+createCapacityReservationFleet_allocationStrategy :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe Prelude.Text)
+createCapacityReservationFleet_allocationStrategy = Lens.lens (\CreateCapacityReservationFleet' {allocationStrategy} -> allocationStrategy) (\s@CreateCapacityReservationFleet' {} a -> s {allocationStrategy = a} :: CreateCapacityReservationFleet)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+createCapacityReservationFleet_clientToken :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe Prelude.Text)
+createCapacityReservationFleet_clientToken = Lens.lens (\CreateCapacityReservationFleet' {clientToken} -> clientToken) (\s@CreateCapacityReservationFleet' {} a -> s {clientToken = a} :: CreateCapacityReservationFleet)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createCapacityReservationFleet_dryRun :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe Prelude.Bool)
+createCapacityReservationFleet_dryRun = Lens.lens (\CreateCapacityReservationFleet' {dryRun} -> dryRun) (\s@CreateCapacityReservationFleet' {} a -> s {dryRun = a} :: CreateCapacityReservationFleet)
+
+-- | The date and time at which the Capacity Reservation Fleet expires. When
+-- the Capacity Reservation Fleet expires, its state changes to @expired@
+-- and all of the Capacity Reservations in the Fleet expire.
+--
+-- The Capacity Reservation Fleet expires within an hour after the
+-- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
+-- the Capacity Reservation Fleet is guaranteed to expire between
+-- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
+createCapacityReservationFleet_endDate :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
+createCapacityReservationFleet_endDate = Lens.lens (\CreateCapacityReservationFleet' {endDate} -> endDate) (\s@CreateCapacityReservationFleet' {} a -> s {endDate = a} :: CreateCapacityReservationFleet) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates the type of instance launches that the Capacity Reservation
+-- Fleet accepts. All Capacity Reservations in the Fleet inherit this
+-- instance matching criteria.
+--
+-- Currently, Capacity Reservation Fleets support @open@ instance matching
+-- criteria only. This means that instances that have matching attributes
+-- (instance type, platform, and Availability Zone) run in the Capacity
+-- Reservations automatically. Instances do not need to explicitly target a
+-- Capacity Reservation Fleet to use its reserved capacity.
+createCapacityReservationFleet_instanceMatchCriteria :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe FleetInstanceMatchCriteria)
+createCapacityReservationFleet_instanceMatchCriteria = Lens.lens (\CreateCapacityReservationFleet' {instanceMatchCriteria} -> instanceMatchCriteria) (\s@CreateCapacityReservationFleet' {} a -> s {instanceMatchCriteria = a} :: CreateCapacityReservationFleet)
+
+-- | The tags to assign to the Capacity Reservation Fleet. The tags are
+-- automatically assigned to the Capacity Reservations in the Fleet.
+createCapacityReservationFleet_tagSpecifications :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe [TagSpecification])
+createCapacityReservationFleet_tagSpecifications = Lens.lens (\CreateCapacityReservationFleet' {tagSpecifications} -> tagSpecifications) (\s@CreateCapacityReservationFleet' {} a -> s {tagSpecifications = a} :: CreateCapacityReservationFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates the tenancy of the Capacity Reservation Fleet. All Capacity
+-- Reservations in the Fleet inherit this tenancy. The Capacity Reservation
+-- Fleet can have one of the following tenancy settings:
+--
+-- -   @default@ - The Capacity Reservation Fleet is created on hardware
+--     that is shared with other Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservations are created on single-tenant
+--     hardware that is dedicated to a single Amazon Web Services account.
+createCapacityReservationFleet_tenancy :: Lens.Lens' CreateCapacityReservationFleet (Prelude.Maybe FleetCapacityReservationTenancy)
+createCapacityReservationFleet_tenancy = Lens.lens (\CreateCapacityReservationFleet' {tenancy} -> tenancy) (\s@CreateCapacityReservationFleet' {} a -> s {tenancy = a} :: CreateCapacityReservationFleet)
+
+-- | Information about the instance types for which to reserve the capacity.
+createCapacityReservationFleet_instanceTypeSpecifications :: Lens.Lens' CreateCapacityReservationFleet [ReservationFleetInstanceSpecification]
+createCapacityReservationFleet_instanceTypeSpecifications = Lens.lens (\CreateCapacityReservationFleet' {instanceTypeSpecifications} -> instanceTypeSpecifications) (\s@CreateCapacityReservationFleet' {} a -> s {instanceTypeSpecifications = a} :: CreateCapacityReservationFleet) Prelude.. Lens.coerced
+
+-- | The total number of capacity units to be reserved by the Capacity
+-- Reservation Fleet. This value, together with the instance type weights
+-- that you assign to each instance type used by the Fleet determine the
+-- number of instances for which the Fleet reserves capacity. Both values
+-- are based on units that make sense for your workload. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+createCapacityReservationFleet_totalTargetCapacity :: Lens.Lens' CreateCapacityReservationFleet Prelude.Int
+createCapacityReservationFleet_totalTargetCapacity = Lens.lens (\CreateCapacityReservationFleet' {totalTargetCapacity} -> totalTargetCapacity) (\s@CreateCapacityReservationFleet' {} a -> s {totalTargetCapacity = a} :: CreateCapacityReservationFleet)
+
+instance
+  Core.AWSRequest
+    CreateCapacityReservationFleet
+  where
+  type
+    AWSResponse CreateCapacityReservationFleet =
+      CreateCapacityReservationFleetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateCapacityReservationFleetResponse'
+            Prelude.<$> (x Data..@? "allocationStrategy")
+            Prelude.<*> (x Data..@? "capacityReservationFleetId")
+            Prelude.<*> (x Data..@? "createTime")
+            Prelude.<*> (x Data..@? "endDate")
+            Prelude.<*> ( x
+                            Data..@? "fleetCapacityReservationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "instanceMatchCriteria")
+            Prelude.<*> (x Data..@? "state")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "tenancy")
+            Prelude.<*> (x Data..@? "totalFulfilledCapacity")
+            Prelude.<*> (x Data..@? "totalTargetCapacity")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateCapacityReservationFleet
+  where
+  hashWithSalt
+    _salt
+    CreateCapacityReservationFleet' {..} =
+      _salt
+        `Prelude.hashWithSalt` allocationStrategy
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` endDate
+        `Prelude.hashWithSalt` instanceMatchCriteria
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` tenancy
+        `Prelude.hashWithSalt` instanceTypeSpecifications
+        `Prelude.hashWithSalt` totalTargetCapacity
+
+instance
+  Prelude.NFData
+    CreateCapacityReservationFleet
+  where
+  rnf CreateCapacityReservationFleet' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf instanceMatchCriteria
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf instanceTypeSpecifications
+      `Prelude.seq` Prelude.rnf totalTargetCapacity
+
+instance
+  Data.ToHeaders
+    CreateCapacityReservationFleet
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateCapacityReservationFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCapacityReservationFleet where
+  toQuery CreateCapacityReservationFleet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateCapacityReservationFleet" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllocationStrategy" Data.=: allocationStrategy,
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "EndDate" Data.=: endDate,
+        "InstanceMatchCriteria"
+          Data.=: instanceMatchCriteria,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Tenancy" Data.=: tenancy,
+        Data.toQueryList
+          "InstanceTypeSpecification"
+          instanceTypeSpecifications,
+        "TotalTargetCapacity" Data.=: totalTargetCapacity
+      ]
+
+-- | /See:/ 'newCreateCapacityReservationFleetResponse' smart constructor.
+data CreateCapacityReservationFleetResponse = CreateCapacityReservationFleetResponse'
+  { -- | The allocation strategy used by the Capacity Reservation Fleet.
+    allocationStrategy :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation Fleet.
+    capacityReservationFleetId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time at which the Capacity Reservation Fleet was created.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time at which the Capacity Reservation Fleet expires.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | Information about the individual Capacity Reservations in the Capacity
+    -- Reservation Fleet.
+    fleetCapacityReservations :: Prelude.Maybe [FleetCapacityReservation],
+    -- | The instance matching criteria for the Capacity Reservation Fleet.
+    instanceMatchCriteria :: Prelude.Maybe FleetInstanceMatchCriteria,
+    -- | The status of the Capacity Reservation Fleet.
+    state :: Prelude.Maybe CapacityReservationFleetState,
+    -- | The tags assigned to the Capacity Reservation Fleet.
+    tags :: Prelude.Maybe [Tag],
+    -- | Indicates the tenancy of Capacity Reservation Fleet.
+    tenancy :: Prelude.Maybe FleetCapacityReservationTenancy,
+    -- | The requested capacity units that have been successfully reserved.
+    totalFulfilledCapacity :: Prelude.Maybe Prelude.Double,
+    -- | The total number of capacity units for which the Capacity Reservation
+    -- Fleet reserves capacity.
+    totalTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCapacityReservationFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'createCapacityReservationFleetResponse_allocationStrategy' - The allocation strategy used by the Capacity Reservation Fleet.
+--
+-- 'capacityReservationFleetId', 'createCapacityReservationFleetResponse_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet.
+--
+-- 'createTime', 'createCapacityReservationFleetResponse_createTime' - The date and time at which the Capacity Reservation Fleet was created.
+--
+-- 'endDate', 'createCapacityReservationFleetResponse_endDate' - The date and time at which the Capacity Reservation Fleet expires.
+--
+-- 'fleetCapacityReservations', 'createCapacityReservationFleetResponse_fleetCapacityReservations' - Information about the individual Capacity Reservations in the Capacity
+-- Reservation Fleet.
+--
+-- 'instanceMatchCriteria', 'createCapacityReservationFleetResponse_instanceMatchCriteria' - The instance matching criteria for the Capacity Reservation Fleet.
+--
+-- 'state', 'createCapacityReservationFleetResponse_state' - The status of the Capacity Reservation Fleet.
+--
+-- 'tags', 'createCapacityReservationFleetResponse_tags' - The tags assigned to the Capacity Reservation Fleet.
+--
+-- 'tenancy', 'createCapacityReservationFleetResponse_tenancy' - Indicates the tenancy of Capacity Reservation Fleet.
+--
+-- 'totalFulfilledCapacity', 'createCapacityReservationFleetResponse_totalFulfilledCapacity' - The requested capacity units that have been successfully reserved.
+--
+-- 'totalTargetCapacity', 'createCapacityReservationFleetResponse_totalTargetCapacity' - The total number of capacity units for which the Capacity Reservation
+-- Fleet reserves capacity.
+--
+-- 'httpStatus', 'createCapacityReservationFleetResponse_httpStatus' - The response's http status code.
+newCreateCapacityReservationFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCapacityReservationFleetResponse
+newCreateCapacityReservationFleetResponse
+  pHttpStatus_ =
+    CreateCapacityReservationFleetResponse'
+      { allocationStrategy =
+          Prelude.Nothing,
+        capacityReservationFleetId =
+          Prelude.Nothing,
+        createTime = Prelude.Nothing,
+        endDate = Prelude.Nothing,
+        fleetCapacityReservations =
+          Prelude.Nothing,
+        instanceMatchCriteria =
+          Prelude.Nothing,
+        state = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        tenancy = Prelude.Nothing,
+        totalFulfilledCapacity =
+          Prelude.Nothing,
+        totalTargetCapacity =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The allocation strategy used by the Capacity Reservation Fleet.
+createCapacityReservationFleetResponse_allocationStrategy :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe Prelude.Text)
+createCapacityReservationFleetResponse_allocationStrategy = Lens.lens (\CreateCapacityReservationFleetResponse' {allocationStrategy} -> allocationStrategy) (\s@CreateCapacityReservationFleetResponse' {} a -> s {allocationStrategy = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The ID of the Capacity Reservation Fleet.
+createCapacityReservationFleetResponse_capacityReservationFleetId :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe Prelude.Text)
+createCapacityReservationFleetResponse_capacityReservationFleetId = Lens.lens (\CreateCapacityReservationFleetResponse' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@CreateCapacityReservationFleetResponse' {} a -> s {capacityReservationFleetId = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The date and time at which the Capacity Reservation Fleet was created.
+createCapacityReservationFleetResponse_createTime :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe Prelude.UTCTime)
+createCapacityReservationFleetResponse_createTime = Lens.lens (\CreateCapacityReservationFleetResponse' {createTime} -> createTime) (\s@CreateCapacityReservationFleetResponse' {} a -> s {createTime = a} :: CreateCapacityReservationFleetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time at which the Capacity Reservation Fleet expires.
+createCapacityReservationFleetResponse_endDate :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe Prelude.UTCTime)
+createCapacityReservationFleetResponse_endDate = Lens.lens (\CreateCapacityReservationFleetResponse' {endDate} -> endDate) (\s@CreateCapacityReservationFleetResponse' {} a -> s {endDate = a} :: CreateCapacityReservationFleetResponse) Prelude.. Lens.mapping Data._Time
+
+-- | Information about the individual Capacity Reservations in the Capacity
+-- Reservation Fleet.
+createCapacityReservationFleetResponse_fleetCapacityReservations :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe [FleetCapacityReservation])
+createCapacityReservationFleetResponse_fleetCapacityReservations = Lens.lens (\CreateCapacityReservationFleetResponse' {fleetCapacityReservations} -> fleetCapacityReservations) (\s@CreateCapacityReservationFleetResponse' {} a -> s {fleetCapacityReservations = a} :: CreateCapacityReservationFleetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance matching criteria for the Capacity Reservation Fleet.
+createCapacityReservationFleetResponse_instanceMatchCriteria :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe FleetInstanceMatchCriteria)
+createCapacityReservationFleetResponse_instanceMatchCriteria = Lens.lens (\CreateCapacityReservationFleetResponse' {instanceMatchCriteria} -> instanceMatchCriteria) (\s@CreateCapacityReservationFleetResponse' {} a -> s {instanceMatchCriteria = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The status of the Capacity Reservation Fleet.
+createCapacityReservationFleetResponse_state :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe CapacityReservationFleetState)
+createCapacityReservationFleetResponse_state = Lens.lens (\CreateCapacityReservationFleetResponse' {state} -> state) (\s@CreateCapacityReservationFleetResponse' {} a -> s {state = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The tags assigned to the Capacity Reservation Fleet.
+createCapacityReservationFleetResponse_tags :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe [Tag])
+createCapacityReservationFleetResponse_tags = Lens.lens (\CreateCapacityReservationFleetResponse' {tags} -> tags) (\s@CreateCapacityReservationFleetResponse' {} a -> s {tags = a} :: CreateCapacityReservationFleetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates the tenancy of Capacity Reservation Fleet.
+createCapacityReservationFleetResponse_tenancy :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe FleetCapacityReservationTenancy)
+createCapacityReservationFleetResponse_tenancy = Lens.lens (\CreateCapacityReservationFleetResponse' {tenancy} -> tenancy) (\s@CreateCapacityReservationFleetResponse' {} a -> s {tenancy = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The requested capacity units that have been successfully reserved.
+createCapacityReservationFleetResponse_totalFulfilledCapacity :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe Prelude.Double)
+createCapacityReservationFleetResponse_totalFulfilledCapacity = Lens.lens (\CreateCapacityReservationFleetResponse' {totalFulfilledCapacity} -> totalFulfilledCapacity) (\s@CreateCapacityReservationFleetResponse' {} a -> s {totalFulfilledCapacity = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The total number of capacity units for which the Capacity Reservation
+-- Fleet reserves capacity.
+createCapacityReservationFleetResponse_totalTargetCapacity :: Lens.Lens' CreateCapacityReservationFleetResponse (Prelude.Maybe Prelude.Int)
+createCapacityReservationFleetResponse_totalTargetCapacity = Lens.lens (\CreateCapacityReservationFleetResponse' {totalTargetCapacity} -> totalTargetCapacity) (\s@CreateCapacityReservationFleetResponse' {} a -> s {totalTargetCapacity = a} :: CreateCapacityReservationFleetResponse)
+
+-- | The response's http status code.
+createCapacityReservationFleetResponse_httpStatus :: Lens.Lens' CreateCapacityReservationFleetResponse Prelude.Int
+createCapacityReservationFleetResponse_httpStatus = Lens.lens (\CreateCapacityReservationFleetResponse' {httpStatus} -> httpStatus) (\s@CreateCapacityReservationFleetResponse' {} a -> s {httpStatus = a} :: CreateCapacityReservationFleetResponse)
+
+instance
+  Prelude.NFData
+    CreateCapacityReservationFleetResponse
+  where
+  rnf CreateCapacityReservationFleetResponse' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf capacityReservationFleetId
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf fleetCapacityReservations
+      `Prelude.seq` Prelude.rnf instanceMatchCriteria
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf totalFulfilledCapacity
+      `Prelude.seq` Prelude.rnf totalTargetCapacity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateCarrierGateway.hs b/gen/Amazonka/EC2/CreateCarrierGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateCarrierGateway.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateCarrierGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a carrier gateway. For more information about carrier gateways,
+-- see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#wavelength-carrier-gateway Carrier gateways>
+-- in the /Amazon Web Services Wavelength Developer Guide/.
+module Amazonka.EC2.CreateCarrierGateway
+  ( -- * Creating a Request
+    CreateCarrierGateway (..),
+    newCreateCarrierGateway,
+
+    -- * Request Lenses
+    createCarrierGateway_clientToken,
+    createCarrierGateway_dryRun,
+    createCarrierGateway_tagSpecifications,
+    createCarrierGateway_vpcId,
+
+    -- * Destructuring the Response
+    CreateCarrierGatewayResponse (..),
+    newCreateCarrierGatewayResponse,
+
+    -- * Response Lenses
+    createCarrierGatewayResponse_carrierGateway,
+    createCarrierGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCarrierGateway' smart constructor.
+data CreateCarrierGateway = CreateCarrierGateway'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to associate with the carrier gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the VPC to associate with the carrier gateway.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCarrierGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createCarrierGateway_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'dryRun', 'createCarrierGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createCarrierGateway_tagSpecifications' - The tags to associate with the carrier gateway.
+--
+-- 'vpcId', 'createCarrierGateway_vpcId' - The ID of the VPC to associate with the carrier gateway.
+newCreateCarrierGateway ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateCarrierGateway
+newCreateCarrierGateway pVpcId_ =
+  CreateCarrierGateway'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+createCarrierGateway_clientToken :: Lens.Lens' CreateCarrierGateway (Prelude.Maybe Prelude.Text)
+createCarrierGateway_clientToken = Lens.lens (\CreateCarrierGateway' {clientToken} -> clientToken) (\s@CreateCarrierGateway' {} a -> s {clientToken = a} :: CreateCarrierGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createCarrierGateway_dryRun :: Lens.Lens' CreateCarrierGateway (Prelude.Maybe Prelude.Bool)
+createCarrierGateway_dryRun = Lens.lens (\CreateCarrierGateway' {dryRun} -> dryRun) (\s@CreateCarrierGateway' {} a -> s {dryRun = a} :: CreateCarrierGateway)
+
+-- | The tags to associate with the carrier gateway.
+createCarrierGateway_tagSpecifications :: Lens.Lens' CreateCarrierGateway (Prelude.Maybe [TagSpecification])
+createCarrierGateway_tagSpecifications = Lens.lens (\CreateCarrierGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateCarrierGateway' {} a -> s {tagSpecifications = a} :: CreateCarrierGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC to associate with the carrier gateway.
+createCarrierGateway_vpcId :: Lens.Lens' CreateCarrierGateway Prelude.Text
+createCarrierGateway_vpcId = Lens.lens (\CreateCarrierGateway' {vpcId} -> vpcId) (\s@CreateCarrierGateway' {} a -> s {vpcId = a} :: CreateCarrierGateway)
+
+instance Core.AWSRequest CreateCarrierGateway where
+  type
+    AWSResponse CreateCarrierGateway =
+      CreateCarrierGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateCarrierGatewayResponse'
+            Prelude.<$> (x Data..@? "carrierGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCarrierGateway where
+  hashWithSalt _salt CreateCarrierGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CreateCarrierGateway where
+  rnf CreateCarrierGateway' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders CreateCarrierGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateCarrierGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCarrierGateway where
+  toQuery CreateCarrierGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateCarrierGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newCreateCarrierGatewayResponse' smart constructor.
+data CreateCarrierGatewayResponse = CreateCarrierGatewayResponse'
+  { -- | Information about the carrier gateway.
+    carrierGateway :: Prelude.Maybe CarrierGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCarrierGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGateway', 'createCarrierGatewayResponse_carrierGateway' - Information about the carrier gateway.
+--
+-- 'httpStatus', 'createCarrierGatewayResponse_httpStatus' - The response's http status code.
+newCreateCarrierGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCarrierGatewayResponse
+newCreateCarrierGatewayResponse pHttpStatus_ =
+  CreateCarrierGatewayResponse'
+    { carrierGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the carrier gateway.
+createCarrierGatewayResponse_carrierGateway :: Lens.Lens' CreateCarrierGatewayResponse (Prelude.Maybe CarrierGateway)
+createCarrierGatewayResponse_carrierGateway = Lens.lens (\CreateCarrierGatewayResponse' {carrierGateway} -> carrierGateway) (\s@CreateCarrierGatewayResponse' {} a -> s {carrierGateway = a} :: CreateCarrierGatewayResponse)
+
+-- | The response's http status code.
+createCarrierGatewayResponse_httpStatus :: Lens.Lens' CreateCarrierGatewayResponse Prelude.Int
+createCarrierGatewayResponse_httpStatus = Lens.lens (\CreateCarrierGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateCarrierGatewayResponse' {} a -> s {httpStatus = a} :: CreateCarrierGatewayResponse)
+
+instance Prelude.NFData CreateCarrierGatewayResponse where
+  rnf CreateCarrierGatewayResponse' {..} =
+    Prelude.rnf carrierGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateClientVpnEndpoint.hs b/gen/Amazonka/EC2/CreateClientVpnEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateClientVpnEndpoint.hs
@@ -0,0 +1,589 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateClientVpnEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Client VPN endpoint. A Client VPN endpoint is the resource you
+-- create and configure to enable and manage client VPN sessions. It is the
+-- destination endpoint at which all client VPN sessions are terminated.
+module Amazonka.EC2.CreateClientVpnEndpoint
+  ( -- * Creating a Request
+    CreateClientVpnEndpoint (..),
+    newCreateClientVpnEndpoint,
+
+    -- * Request Lenses
+    createClientVpnEndpoint_clientConnectOptions,
+    createClientVpnEndpoint_clientLoginBannerOptions,
+    createClientVpnEndpoint_clientToken,
+    createClientVpnEndpoint_description,
+    createClientVpnEndpoint_dnsServers,
+    createClientVpnEndpoint_dryRun,
+    createClientVpnEndpoint_securityGroupIds,
+    createClientVpnEndpoint_selfServicePortal,
+    createClientVpnEndpoint_sessionTimeoutHours,
+    createClientVpnEndpoint_splitTunnel,
+    createClientVpnEndpoint_tagSpecifications,
+    createClientVpnEndpoint_transportProtocol,
+    createClientVpnEndpoint_vpcId,
+    createClientVpnEndpoint_vpnPort,
+    createClientVpnEndpoint_clientCidrBlock,
+    createClientVpnEndpoint_serverCertificateArn,
+    createClientVpnEndpoint_authenticationOptions,
+    createClientVpnEndpoint_connectionLogOptions,
+
+    -- * Destructuring the Response
+    CreateClientVpnEndpointResponse (..),
+    newCreateClientVpnEndpointResponse,
+
+    -- * Response Lenses
+    createClientVpnEndpointResponse_clientVpnEndpointId,
+    createClientVpnEndpointResponse_dnsName,
+    createClientVpnEndpointResponse_status,
+    createClientVpnEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateClientVpnEndpoint' smart constructor.
+data CreateClientVpnEndpoint = CreateClientVpnEndpoint'
+  { -- | The options for managing connection authorization for new client
+    -- connections.
+    clientConnectOptions :: Prelude.Maybe ClientConnectOptions,
+    -- | Options for enabling a customizable text banner that will be displayed
+    -- on Amazon Web Services provided clients when a VPN session is
+    -- established.
+    clientLoginBannerOptions :: Prelude.Maybe ClientLoginBannerOptions,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the Client VPN endpoint.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about the DNS servers to be used for DNS resolution. A
+    -- Client VPN endpoint can have up to two DNS servers. If no DNS server is
+    -- specified, the DNS address configured on the device is used for the DNS
+    -- server.
+    dnsServers :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of one or more security groups to apply to the target network.
+    -- You must also specify the ID of the VPC that contains the security
+    -- groups.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Specify whether to enable the self-service portal for the Client VPN
+    -- endpoint.
+    --
+    -- Default Value: @enabled@
+    selfServicePortal :: Prelude.Maybe SelfServicePortal,
+    -- | The maximum VPN session duration time in hours.
+    --
+    -- Valid values: @8 | 10 | 12 | 24@
+    --
+    -- Default value: @24@
+    sessionTimeoutHours :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether split-tunnel is enabled on the Client VPN endpoint.
+    --
+    -- By default, split-tunnel on a VPN endpoint is disabled.
+    --
+    -- For information about split-tunnel VPN endpoints, see
+    -- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-tunnel Client VPN endpoint>
+    -- in the /Client VPN Administrator Guide/.
+    splitTunnel :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the Client VPN endpoint during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The transport protocol to be used by the VPN session.
+    --
+    -- Default value: @udp@
+    transportProtocol :: Prelude.Maybe TransportProtocol,
+    -- | The ID of the VPC to associate with the Client VPN endpoint. If no
+    -- security group IDs are specified in the request, the default security
+    -- group for the VPC is applied.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The port number to assign to the Client VPN endpoint for TCP and UDP
+    -- traffic.
+    --
+    -- Valid Values: @443@ | @1194@
+    --
+    -- Default Value: @443@
+    vpnPort :: Prelude.Maybe Prelude.Int,
+    -- | The IPv4 address range, in CIDR notation, from which to assign client IP
+    -- addresses. The address range cannot overlap with the local CIDR of the
+    -- VPC in which the associated subnet is located, or the routes that you
+    -- add manually. The address range cannot be changed after the Client VPN
+    -- endpoint has been created. The CIDR block should be \/22 or greater.
+    clientCidrBlock :: Prelude.Text,
+    -- | The ARN of the server certificate. For more information, see the
+    -- <https://docs.aws.amazon.com/acm/latest/userguide/ Certificate Manager User Guide>.
+    serverCertificateArn :: Prelude.Text,
+    -- | Information about the authentication method to be used to authenticate
+    -- clients.
+    authenticationOptions :: [ClientVpnAuthenticationRequest],
+    -- | Information about the client connection logging options.
+    --
+    -- If you enable client connection logging, data about client connections
+    -- is sent to a Cloudwatch Logs log stream. The following information is
+    -- logged:
+    --
+    -- -   Client connection requests
+    --
+    -- -   Client connection results (successful and unsuccessful)
+    --
+    -- -   Reasons for unsuccessful client connection requests
+    --
+    -- -   Client connection termination time
+    connectionLogOptions :: ConnectionLogOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateClientVpnEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientConnectOptions', 'createClientVpnEndpoint_clientConnectOptions' - The options for managing connection authorization for new client
+-- connections.
+--
+-- 'clientLoginBannerOptions', 'createClientVpnEndpoint_clientLoginBannerOptions' - Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+--
+-- 'clientToken', 'createClientVpnEndpoint_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'createClientVpnEndpoint_description' - A brief description of the Client VPN endpoint.
+--
+-- 'dnsServers', 'createClientVpnEndpoint_dnsServers' - Information about the DNS servers to be used for DNS resolution. A
+-- Client VPN endpoint can have up to two DNS servers. If no DNS server is
+-- specified, the DNS address configured on the device is used for the DNS
+-- server.
+--
+-- 'dryRun', 'createClientVpnEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'securityGroupIds', 'createClientVpnEndpoint_securityGroupIds' - The IDs of one or more security groups to apply to the target network.
+-- You must also specify the ID of the VPC that contains the security
+-- groups.
+--
+-- 'selfServicePortal', 'createClientVpnEndpoint_selfServicePortal' - Specify whether to enable the self-service portal for the Client VPN
+-- endpoint.
+--
+-- Default Value: @enabled@
+--
+-- 'sessionTimeoutHours', 'createClientVpnEndpoint_sessionTimeoutHours' - The maximum VPN session duration time in hours.
+--
+-- Valid values: @8 | 10 | 12 | 24@
+--
+-- Default value: @24@
+--
+-- 'splitTunnel', 'createClientVpnEndpoint_splitTunnel' - Indicates whether split-tunnel is enabled on the Client VPN endpoint.
+--
+-- By default, split-tunnel on a VPN endpoint is disabled.
+--
+-- For information about split-tunnel VPN endpoints, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-tunnel Client VPN endpoint>
+-- in the /Client VPN Administrator Guide/.
+--
+-- 'tagSpecifications', 'createClientVpnEndpoint_tagSpecifications' - The tags to apply to the Client VPN endpoint during creation.
+--
+-- 'transportProtocol', 'createClientVpnEndpoint_transportProtocol' - The transport protocol to be used by the VPN session.
+--
+-- Default value: @udp@
+--
+-- 'vpcId', 'createClientVpnEndpoint_vpcId' - The ID of the VPC to associate with the Client VPN endpoint. If no
+-- security group IDs are specified in the request, the default security
+-- group for the VPC is applied.
+--
+-- 'vpnPort', 'createClientVpnEndpoint_vpnPort' - The port number to assign to the Client VPN endpoint for TCP and UDP
+-- traffic.
+--
+-- Valid Values: @443@ | @1194@
+--
+-- Default Value: @443@
+--
+-- 'clientCidrBlock', 'createClientVpnEndpoint_clientCidrBlock' - The IPv4 address range, in CIDR notation, from which to assign client IP
+-- addresses. The address range cannot overlap with the local CIDR of the
+-- VPC in which the associated subnet is located, or the routes that you
+-- add manually. The address range cannot be changed after the Client VPN
+-- endpoint has been created. The CIDR block should be \/22 or greater.
+--
+-- 'serverCertificateArn', 'createClientVpnEndpoint_serverCertificateArn' - The ARN of the server certificate. For more information, see the
+-- <https://docs.aws.amazon.com/acm/latest/userguide/ Certificate Manager User Guide>.
+--
+-- 'authenticationOptions', 'createClientVpnEndpoint_authenticationOptions' - Information about the authentication method to be used to authenticate
+-- clients.
+--
+-- 'connectionLogOptions', 'createClientVpnEndpoint_connectionLogOptions' - Information about the client connection logging options.
+--
+-- If you enable client connection logging, data about client connections
+-- is sent to a Cloudwatch Logs log stream. The following information is
+-- logged:
+--
+-- -   Client connection requests
+--
+-- -   Client connection results (successful and unsuccessful)
+--
+-- -   Reasons for unsuccessful client connection requests
+--
+-- -   Client connection termination time
+newCreateClientVpnEndpoint ::
+  -- | 'clientCidrBlock'
+  Prelude.Text ->
+  -- | 'serverCertificateArn'
+  Prelude.Text ->
+  -- | 'connectionLogOptions'
+  ConnectionLogOptions ->
+  CreateClientVpnEndpoint
+newCreateClientVpnEndpoint
+  pClientCidrBlock_
+  pServerCertificateArn_
+  pConnectionLogOptions_ =
+    CreateClientVpnEndpoint'
+      { clientConnectOptions =
+          Prelude.Nothing,
+        clientLoginBannerOptions = Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        description = Prelude.Nothing,
+        dnsServers = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        securityGroupIds = Prelude.Nothing,
+        selfServicePortal = Prelude.Nothing,
+        sessionTimeoutHours = Prelude.Nothing,
+        splitTunnel = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        transportProtocol = Prelude.Nothing,
+        vpcId = Prelude.Nothing,
+        vpnPort = Prelude.Nothing,
+        clientCidrBlock = pClientCidrBlock_,
+        serverCertificateArn = pServerCertificateArn_,
+        authenticationOptions = Prelude.mempty,
+        connectionLogOptions = pConnectionLogOptions_
+      }
+
+-- | The options for managing connection authorization for new client
+-- connections.
+createClientVpnEndpoint_clientConnectOptions :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe ClientConnectOptions)
+createClientVpnEndpoint_clientConnectOptions = Lens.lens (\CreateClientVpnEndpoint' {clientConnectOptions} -> clientConnectOptions) (\s@CreateClientVpnEndpoint' {} a -> s {clientConnectOptions = a} :: CreateClientVpnEndpoint)
+
+-- | Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+createClientVpnEndpoint_clientLoginBannerOptions :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe ClientLoginBannerOptions)
+createClientVpnEndpoint_clientLoginBannerOptions = Lens.lens (\CreateClientVpnEndpoint' {clientLoginBannerOptions} -> clientLoginBannerOptions) (\s@CreateClientVpnEndpoint' {} a -> s {clientLoginBannerOptions = a} :: CreateClientVpnEndpoint)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createClientVpnEndpoint_clientToken :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+createClientVpnEndpoint_clientToken = Lens.lens (\CreateClientVpnEndpoint' {clientToken} -> clientToken) (\s@CreateClientVpnEndpoint' {} a -> s {clientToken = a} :: CreateClientVpnEndpoint)
+
+-- | A brief description of the Client VPN endpoint.
+createClientVpnEndpoint_description :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+createClientVpnEndpoint_description = Lens.lens (\CreateClientVpnEndpoint' {description} -> description) (\s@CreateClientVpnEndpoint' {} a -> s {description = a} :: CreateClientVpnEndpoint)
+
+-- | Information about the DNS servers to be used for DNS resolution. A
+-- Client VPN endpoint can have up to two DNS servers. If no DNS server is
+-- specified, the DNS address configured on the device is used for the DNS
+-- server.
+createClientVpnEndpoint_dnsServers :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
+createClientVpnEndpoint_dnsServers = Lens.lens (\CreateClientVpnEndpoint' {dnsServers} -> dnsServers) (\s@CreateClientVpnEndpoint' {} a -> s {dnsServers = a} :: CreateClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createClientVpnEndpoint_dryRun :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
+createClientVpnEndpoint_dryRun = Lens.lens (\CreateClientVpnEndpoint' {dryRun} -> dryRun) (\s@CreateClientVpnEndpoint' {} a -> s {dryRun = a} :: CreateClientVpnEndpoint)
+
+-- | The IDs of one or more security groups to apply to the target network.
+-- You must also specify the ID of the VPC that contains the security
+-- groups.
+createClientVpnEndpoint_securityGroupIds :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
+createClientVpnEndpoint_securityGroupIds = Lens.lens (\CreateClientVpnEndpoint' {securityGroupIds} -> securityGroupIds) (\s@CreateClientVpnEndpoint' {} a -> s {securityGroupIds = a} :: CreateClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify whether to enable the self-service portal for the Client VPN
+-- endpoint.
+--
+-- Default Value: @enabled@
+createClientVpnEndpoint_selfServicePortal :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe SelfServicePortal)
+createClientVpnEndpoint_selfServicePortal = Lens.lens (\CreateClientVpnEndpoint' {selfServicePortal} -> selfServicePortal) (\s@CreateClientVpnEndpoint' {} a -> s {selfServicePortal = a} :: CreateClientVpnEndpoint)
+
+-- | The maximum VPN session duration time in hours.
+--
+-- Valid values: @8 | 10 | 12 | 24@
+--
+-- Default value: @24@
+createClientVpnEndpoint_sessionTimeoutHours :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Int)
+createClientVpnEndpoint_sessionTimeoutHours = Lens.lens (\CreateClientVpnEndpoint' {sessionTimeoutHours} -> sessionTimeoutHours) (\s@CreateClientVpnEndpoint' {} a -> s {sessionTimeoutHours = a} :: CreateClientVpnEndpoint)
+
+-- | Indicates whether split-tunnel is enabled on the Client VPN endpoint.
+--
+-- By default, split-tunnel on a VPN endpoint is disabled.
+--
+-- For information about split-tunnel VPN endpoints, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-tunnel Client VPN endpoint>
+-- in the /Client VPN Administrator Guide/.
+createClientVpnEndpoint_splitTunnel :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
+createClientVpnEndpoint_splitTunnel = Lens.lens (\CreateClientVpnEndpoint' {splitTunnel} -> splitTunnel) (\s@CreateClientVpnEndpoint' {} a -> s {splitTunnel = a} :: CreateClientVpnEndpoint)
+
+-- | The tags to apply to the Client VPN endpoint during creation.
+createClientVpnEndpoint_tagSpecifications :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe [TagSpecification])
+createClientVpnEndpoint_tagSpecifications = Lens.lens (\CreateClientVpnEndpoint' {tagSpecifications} -> tagSpecifications) (\s@CreateClientVpnEndpoint' {} a -> s {tagSpecifications = a} :: CreateClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The transport protocol to be used by the VPN session.
+--
+-- Default value: @udp@
+createClientVpnEndpoint_transportProtocol :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe TransportProtocol)
+createClientVpnEndpoint_transportProtocol = Lens.lens (\CreateClientVpnEndpoint' {transportProtocol} -> transportProtocol) (\s@CreateClientVpnEndpoint' {} a -> s {transportProtocol = a} :: CreateClientVpnEndpoint)
+
+-- | The ID of the VPC to associate with the Client VPN endpoint. If no
+-- security group IDs are specified in the request, the default security
+-- group for the VPC is applied.
+createClientVpnEndpoint_vpcId :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+createClientVpnEndpoint_vpcId = Lens.lens (\CreateClientVpnEndpoint' {vpcId} -> vpcId) (\s@CreateClientVpnEndpoint' {} a -> s {vpcId = a} :: CreateClientVpnEndpoint)
+
+-- | The port number to assign to the Client VPN endpoint for TCP and UDP
+-- traffic.
+--
+-- Valid Values: @443@ | @1194@
+--
+-- Default Value: @443@
+createClientVpnEndpoint_vpnPort :: Lens.Lens' CreateClientVpnEndpoint (Prelude.Maybe Prelude.Int)
+createClientVpnEndpoint_vpnPort = Lens.lens (\CreateClientVpnEndpoint' {vpnPort} -> vpnPort) (\s@CreateClientVpnEndpoint' {} a -> s {vpnPort = a} :: CreateClientVpnEndpoint)
+
+-- | The IPv4 address range, in CIDR notation, from which to assign client IP
+-- addresses. The address range cannot overlap with the local CIDR of the
+-- VPC in which the associated subnet is located, or the routes that you
+-- add manually. The address range cannot be changed after the Client VPN
+-- endpoint has been created. The CIDR block should be \/22 or greater.
+createClientVpnEndpoint_clientCidrBlock :: Lens.Lens' CreateClientVpnEndpoint Prelude.Text
+createClientVpnEndpoint_clientCidrBlock = Lens.lens (\CreateClientVpnEndpoint' {clientCidrBlock} -> clientCidrBlock) (\s@CreateClientVpnEndpoint' {} a -> s {clientCidrBlock = a} :: CreateClientVpnEndpoint)
+
+-- | The ARN of the server certificate. For more information, see the
+-- <https://docs.aws.amazon.com/acm/latest/userguide/ Certificate Manager User Guide>.
+createClientVpnEndpoint_serverCertificateArn :: Lens.Lens' CreateClientVpnEndpoint Prelude.Text
+createClientVpnEndpoint_serverCertificateArn = Lens.lens (\CreateClientVpnEndpoint' {serverCertificateArn} -> serverCertificateArn) (\s@CreateClientVpnEndpoint' {} a -> s {serverCertificateArn = a} :: CreateClientVpnEndpoint)
+
+-- | Information about the authentication method to be used to authenticate
+-- clients.
+createClientVpnEndpoint_authenticationOptions :: Lens.Lens' CreateClientVpnEndpoint [ClientVpnAuthenticationRequest]
+createClientVpnEndpoint_authenticationOptions = Lens.lens (\CreateClientVpnEndpoint' {authenticationOptions} -> authenticationOptions) (\s@CreateClientVpnEndpoint' {} a -> s {authenticationOptions = a} :: CreateClientVpnEndpoint) Prelude.. Lens.coerced
+
+-- | Information about the client connection logging options.
+--
+-- If you enable client connection logging, data about client connections
+-- is sent to a Cloudwatch Logs log stream. The following information is
+-- logged:
+--
+-- -   Client connection requests
+--
+-- -   Client connection results (successful and unsuccessful)
+--
+-- -   Reasons for unsuccessful client connection requests
+--
+-- -   Client connection termination time
+createClientVpnEndpoint_connectionLogOptions :: Lens.Lens' CreateClientVpnEndpoint ConnectionLogOptions
+createClientVpnEndpoint_connectionLogOptions = Lens.lens (\CreateClientVpnEndpoint' {connectionLogOptions} -> connectionLogOptions) (\s@CreateClientVpnEndpoint' {} a -> s {connectionLogOptions = a} :: CreateClientVpnEndpoint)
+
+instance Core.AWSRequest CreateClientVpnEndpoint where
+  type
+    AWSResponse CreateClientVpnEndpoint =
+      CreateClientVpnEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateClientVpnEndpointResponse'
+            Prelude.<$> (x Data..@? "clientVpnEndpointId")
+            Prelude.<*> (x Data..@? "dnsName")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateClientVpnEndpoint where
+  hashWithSalt _salt CreateClientVpnEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientConnectOptions
+      `Prelude.hashWithSalt` clientLoginBannerOptions
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dnsServers
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` selfServicePortal
+      `Prelude.hashWithSalt` sessionTimeoutHours
+      `Prelude.hashWithSalt` splitTunnel
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` transportProtocol
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpnPort
+      `Prelude.hashWithSalt` clientCidrBlock
+      `Prelude.hashWithSalt` serverCertificateArn
+      `Prelude.hashWithSalt` authenticationOptions
+      `Prelude.hashWithSalt` connectionLogOptions
+
+instance Prelude.NFData CreateClientVpnEndpoint where
+  rnf CreateClientVpnEndpoint' {..} =
+    Prelude.rnf clientConnectOptions
+      `Prelude.seq` Prelude.rnf clientLoginBannerOptions
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dnsServers
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf selfServicePortal
+      `Prelude.seq` Prelude.rnf sessionTimeoutHours
+      `Prelude.seq` Prelude.rnf splitTunnel
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transportProtocol
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpnPort
+      `Prelude.seq` Prelude.rnf clientCidrBlock
+      `Prelude.seq` Prelude.rnf serverCertificateArn
+      `Prelude.seq` Prelude.rnf authenticationOptions
+      `Prelude.seq` Prelude.rnf connectionLogOptions
+
+instance Data.ToHeaders CreateClientVpnEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateClientVpnEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateClientVpnEndpoint where
+  toQuery CreateClientVpnEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateClientVpnEndpoint" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientConnectOptions" Data.=: clientConnectOptions,
+        "ClientLoginBannerOptions"
+          Data.=: clientLoginBannerOptions,
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        Data.toQuery
+          ( Data.toQueryList "DnsServers"
+              Prelude.<$> dnsServers
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        "SelfServicePortal" Data.=: selfServicePortal,
+        "SessionTimeoutHours" Data.=: sessionTimeoutHours,
+        "SplitTunnel" Data.=: splitTunnel,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransportProtocol" Data.=: transportProtocol,
+        "VpcId" Data.=: vpcId,
+        "VpnPort" Data.=: vpnPort,
+        "ClientCidrBlock" Data.=: clientCidrBlock,
+        "ServerCertificateArn" Data.=: serverCertificateArn,
+        Data.toQueryList
+          "Authentication"
+          authenticationOptions,
+        "ConnectionLogOptions" Data.=: connectionLogOptions
+      ]
+
+-- | /See:/ 'newCreateClientVpnEndpointResponse' smart constructor.
+data CreateClientVpnEndpointResponse = CreateClientVpnEndpointResponse'
+  { -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The DNS name to be used by clients when establishing their VPN session.
+    dnsName :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the Client VPN endpoint.
+    status :: Prelude.Maybe ClientVpnEndpointStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateClientVpnEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientVpnEndpointId', 'createClientVpnEndpointResponse_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+--
+-- 'dnsName', 'createClientVpnEndpointResponse_dnsName' - The DNS name to be used by clients when establishing their VPN session.
+--
+-- 'status', 'createClientVpnEndpointResponse_status' - The current state of the Client VPN endpoint.
+--
+-- 'httpStatus', 'createClientVpnEndpointResponse_httpStatus' - The response's http status code.
+newCreateClientVpnEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateClientVpnEndpointResponse
+newCreateClientVpnEndpointResponse pHttpStatus_ =
+  CreateClientVpnEndpointResponse'
+    { clientVpnEndpointId =
+        Prelude.Nothing,
+      dnsName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Client VPN endpoint.
+createClientVpnEndpointResponse_clientVpnEndpointId :: Lens.Lens' CreateClientVpnEndpointResponse (Prelude.Maybe Prelude.Text)
+createClientVpnEndpointResponse_clientVpnEndpointId = Lens.lens (\CreateClientVpnEndpointResponse' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@CreateClientVpnEndpointResponse' {} a -> s {clientVpnEndpointId = a} :: CreateClientVpnEndpointResponse)
+
+-- | The DNS name to be used by clients when establishing their VPN session.
+createClientVpnEndpointResponse_dnsName :: Lens.Lens' CreateClientVpnEndpointResponse (Prelude.Maybe Prelude.Text)
+createClientVpnEndpointResponse_dnsName = Lens.lens (\CreateClientVpnEndpointResponse' {dnsName} -> dnsName) (\s@CreateClientVpnEndpointResponse' {} a -> s {dnsName = a} :: CreateClientVpnEndpointResponse)
+
+-- | The current state of the Client VPN endpoint.
+createClientVpnEndpointResponse_status :: Lens.Lens' CreateClientVpnEndpointResponse (Prelude.Maybe ClientVpnEndpointStatus)
+createClientVpnEndpointResponse_status = Lens.lens (\CreateClientVpnEndpointResponse' {status} -> status) (\s@CreateClientVpnEndpointResponse' {} a -> s {status = a} :: CreateClientVpnEndpointResponse)
+
+-- | The response's http status code.
+createClientVpnEndpointResponse_httpStatus :: Lens.Lens' CreateClientVpnEndpointResponse Prelude.Int
+createClientVpnEndpointResponse_httpStatus = Lens.lens (\CreateClientVpnEndpointResponse' {httpStatus} -> httpStatus) (\s@CreateClientVpnEndpointResponse' {} a -> s {httpStatus = a} :: CreateClientVpnEndpointResponse)
+
+instance
+  Prelude.NFData
+    CreateClientVpnEndpointResponse
+  where
+  rnf CreateClientVpnEndpointResponse' {..} =
+    Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf dnsName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateClientVpnRoute.hs b/gen/Amazonka/EC2/CreateClientVpnRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateClientVpnRoute.hs
@@ -0,0 +1,299 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateClientVpnRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds a route to a network to a Client VPN endpoint. Each Client VPN
+-- endpoint has a route table that describes the available destination
+-- network routes. Each route in the route table specifies the path for
+-- traﬃc to speciﬁc resources or networks.
+module Amazonka.EC2.CreateClientVpnRoute
+  ( -- * Creating a Request
+    CreateClientVpnRoute (..),
+    newCreateClientVpnRoute,
+
+    -- * Request Lenses
+    createClientVpnRoute_clientToken,
+    createClientVpnRoute_description,
+    createClientVpnRoute_dryRun,
+    createClientVpnRoute_clientVpnEndpointId,
+    createClientVpnRoute_destinationCidrBlock,
+    createClientVpnRoute_targetVpcSubnetId,
+
+    -- * Destructuring the Response
+    CreateClientVpnRouteResponse (..),
+    newCreateClientVpnRouteResponse,
+
+    -- * Response Lenses
+    createClientVpnRouteResponse_status,
+    createClientVpnRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateClientVpnRoute' smart constructor.
+data CreateClientVpnRoute = CreateClientVpnRoute'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the route.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint to which to add the route.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The IPv4 address range, in CIDR notation, of the route destination. For
+    -- example:
+    --
+    -- -   To add a route for Internet access, enter @0.0.0.0\/0@
+    --
+    -- -   To add a route for a peered VPC, enter the peered VPC\'s IPv4 CIDR
+    --     range
+    --
+    -- -   To add a route for an on-premises network, enter the Amazon Web
+    --     Services Site-to-Site VPN connection\'s IPv4 CIDR range
+    --
+    -- -   To add a route for the local network, enter the client CIDR range
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the subnet through which you want to route traffic. The
+    -- specified subnet must be an existing target network of the Client VPN
+    -- endpoint.
+    --
+    -- Alternatively, if you\'re adding a route for the local network, specify
+    -- @local@.
+    targetVpcSubnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateClientVpnRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createClientVpnRoute_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'createClientVpnRoute_description' - A brief description of the route.
+--
+-- 'dryRun', 'createClientVpnRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'createClientVpnRoute_clientVpnEndpointId' - The ID of the Client VPN endpoint to which to add the route.
+--
+-- 'destinationCidrBlock', 'createClientVpnRoute_destinationCidrBlock' - The IPv4 address range, in CIDR notation, of the route destination. For
+-- example:
+--
+-- -   To add a route for Internet access, enter @0.0.0.0\/0@
+--
+-- -   To add a route for a peered VPC, enter the peered VPC\'s IPv4 CIDR
+--     range
+--
+-- -   To add a route for an on-premises network, enter the Amazon Web
+--     Services Site-to-Site VPN connection\'s IPv4 CIDR range
+--
+-- -   To add a route for the local network, enter the client CIDR range
+--
+-- 'targetVpcSubnetId', 'createClientVpnRoute_targetVpcSubnetId' - The ID of the subnet through which you want to route traffic. The
+-- specified subnet must be an existing target network of the Client VPN
+-- endpoint.
+--
+-- Alternatively, if you\'re adding a route for the local network, specify
+-- @local@.
+newCreateClientVpnRoute ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'targetVpcSubnetId'
+  Prelude.Text ->
+  CreateClientVpnRoute
+newCreateClientVpnRoute
+  pClientVpnEndpointId_
+  pDestinationCidrBlock_
+  pTargetVpcSubnetId_ =
+    CreateClientVpnRoute'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        clientVpnEndpointId = pClientVpnEndpointId_,
+        destinationCidrBlock = pDestinationCidrBlock_,
+        targetVpcSubnetId = pTargetVpcSubnetId_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createClientVpnRoute_clientToken :: Lens.Lens' CreateClientVpnRoute (Prelude.Maybe Prelude.Text)
+createClientVpnRoute_clientToken = Lens.lens (\CreateClientVpnRoute' {clientToken} -> clientToken) (\s@CreateClientVpnRoute' {} a -> s {clientToken = a} :: CreateClientVpnRoute)
+
+-- | A brief description of the route.
+createClientVpnRoute_description :: Lens.Lens' CreateClientVpnRoute (Prelude.Maybe Prelude.Text)
+createClientVpnRoute_description = Lens.lens (\CreateClientVpnRoute' {description} -> description) (\s@CreateClientVpnRoute' {} a -> s {description = a} :: CreateClientVpnRoute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createClientVpnRoute_dryRun :: Lens.Lens' CreateClientVpnRoute (Prelude.Maybe Prelude.Bool)
+createClientVpnRoute_dryRun = Lens.lens (\CreateClientVpnRoute' {dryRun} -> dryRun) (\s@CreateClientVpnRoute' {} a -> s {dryRun = a} :: CreateClientVpnRoute)
+
+-- | The ID of the Client VPN endpoint to which to add the route.
+createClientVpnRoute_clientVpnEndpointId :: Lens.Lens' CreateClientVpnRoute Prelude.Text
+createClientVpnRoute_clientVpnEndpointId = Lens.lens (\CreateClientVpnRoute' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@CreateClientVpnRoute' {} a -> s {clientVpnEndpointId = a} :: CreateClientVpnRoute)
+
+-- | The IPv4 address range, in CIDR notation, of the route destination. For
+-- example:
+--
+-- -   To add a route for Internet access, enter @0.0.0.0\/0@
+--
+-- -   To add a route for a peered VPC, enter the peered VPC\'s IPv4 CIDR
+--     range
+--
+-- -   To add a route for an on-premises network, enter the Amazon Web
+--     Services Site-to-Site VPN connection\'s IPv4 CIDR range
+--
+-- -   To add a route for the local network, enter the client CIDR range
+createClientVpnRoute_destinationCidrBlock :: Lens.Lens' CreateClientVpnRoute Prelude.Text
+createClientVpnRoute_destinationCidrBlock = Lens.lens (\CreateClientVpnRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@CreateClientVpnRoute' {} a -> s {destinationCidrBlock = a} :: CreateClientVpnRoute)
+
+-- | The ID of the subnet through which you want to route traffic. The
+-- specified subnet must be an existing target network of the Client VPN
+-- endpoint.
+--
+-- Alternatively, if you\'re adding a route for the local network, specify
+-- @local@.
+createClientVpnRoute_targetVpcSubnetId :: Lens.Lens' CreateClientVpnRoute Prelude.Text
+createClientVpnRoute_targetVpcSubnetId = Lens.lens (\CreateClientVpnRoute' {targetVpcSubnetId} -> targetVpcSubnetId) (\s@CreateClientVpnRoute' {} a -> s {targetVpcSubnetId = a} :: CreateClientVpnRoute)
+
+instance Core.AWSRequest CreateClientVpnRoute where
+  type
+    AWSResponse CreateClientVpnRoute =
+      CreateClientVpnRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateClientVpnRouteResponse'
+            Prelude.<$> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateClientVpnRoute where
+  hashWithSalt _salt CreateClientVpnRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` targetVpcSubnetId
+
+instance Prelude.NFData CreateClientVpnRoute where
+  rnf CreateClientVpnRoute' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf targetVpcSubnetId
+
+instance Data.ToHeaders CreateClientVpnRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateClientVpnRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateClientVpnRoute where
+  toQuery CreateClientVpnRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateClientVpnRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "TargetVpcSubnetId" Data.=: targetVpcSubnetId
+      ]
+
+-- | /See:/ 'newCreateClientVpnRouteResponse' smart constructor.
+data CreateClientVpnRouteResponse = CreateClientVpnRouteResponse'
+  { -- | The current state of the route.
+    status :: Prelude.Maybe ClientVpnRouteStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateClientVpnRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'createClientVpnRouteResponse_status' - The current state of the route.
+--
+-- 'httpStatus', 'createClientVpnRouteResponse_httpStatus' - The response's http status code.
+newCreateClientVpnRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateClientVpnRouteResponse
+newCreateClientVpnRouteResponse pHttpStatus_ =
+  CreateClientVpnRouteResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current state of the route.
+createClientVpnRouteResponse_status :: Lens.Lens' CreateClientVpnRouteResponse (Prelude.Maybe ClientVpnRouteStatus)
+createClientVpnRouteResponse_status = Lens.lens (\CreateClientVpnRouteResponse' {status} -> status) (\s@CreateClientVpnRouteResponse' {} a -> s {status = a} :: CreateClientVpnRouteResponse)
+
+-- | The response's http status code.
+createClientVpnRouteResponse_httpStatus :: Lens.Lens' CreateClientVpnRouteResponse Prelude.Int
+createClientVpnRouteResponse_httpStatus = Lens.lens (\CreateClientVpnRouteResponse' {httpStatus} -> httpStatus) (\s@CreateClientVpnRouteResponse' {} a -> s {httpStatus = a} :: CreateClientVpnRouteResponse)
+
+instance Prelude.NFData CreateClientVpnRouteResponse where
+  rnf CreateClientVpnRouteResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateCoipCidr.hs b/gen/Amazonka/EC2/CreateCoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateCoipCidr.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateCoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a range of customer-owned IP addresses.
+module Amazonka.EC2.CreateCoipCidr
+  ( -- * Creating a Request
+    CreateCoipCidr (..),
+    newCreateCoipCidr,
+
+    -- * Request Lenses
+    createCoipCidr_dryRun,
+    createCoipCidr_cidr,
+    createCoipCidr_coipPoolId,
+
+    -- * Destructuring the Response
+    CreateCoipCidrResponse (..),
+    newCreateCoipCidrResponse,
+
+    -- * Response Lenses
+    createCoipCidrResponse_coipCidr,
+    createCoipCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCoipCidr' smart constructor.
+data CreateCoipCidr = CreateCoipCidr'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | A customer-owned IP address range to create.
+    cidr :: Prelude.Text,
+    -- | The ID of the address pool.
+    coipPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createCoipCidr_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'cidr', 'createCoipCidr_cidr' - A customer-owned IP address range to create.
+--
+-- 'coipPoolId', 'createCoipCidr_coipPoolId' - The ID of the address pool.
+newCreateCoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'coipPoolId'
+  Prelude.Text ->
+  CreateCoipCidr
+newCreateCoipCidr pCidr_ pCoipPoolId_ =
+  CreateCoipCidr'
+    { dryRun = Prelude.Nothing,
+      cidr = pCidr_,
+      coipPoolId = pCoipPoolId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createCoipCidr_dryRun :: Lens.Lens' CreateCoipCidr (Prelude.Maybe Prelude.Bool)
+createCoipCidr_dryRun = Lens.lens (\CreateCoipCidr' {dryRun} -> dryRun) (\s@CreateCoipCidr' {} a -> s {dryRun = a} :: CreateCoipCidr)
+
+-- | A customer-owned IP address range to create.
+createCoipCidr_cidr :: Lens.Lens' CreateCoipCidr Prelude.Text
+createCoipCidr_cidr = Lens.lens (\CreateCoipCidr' {cidr} -> cidr) (\s@CreateCoipCidr' {} a -> s {cidr = a} :: CreateCoipCidr)
+
+-- | The ID of the address pool.
+createCoipCidr_coipPoolId :: Lens.Lens' CreateCoipCidr Prelude.Text
+createCoipCidr_coipPoolId = Lens.lens (\CreateCoipCidr' {coipPoolId} -> coipPoolId) (\s@CreateCoipCidr' {} a -> s {coipPoolId = a} :: CreateCoipCidr)
+
+instance Core.AWSRequest CreateCoipCidr where
+  type
+    AWSResponse CreateCoipCidr =
+      CreateCoipCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateCoipCidrResponse'
+            Prelude.<$> (x Data..@? "coipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCoipCidr where
+  hashWithSalt _salt CreateCoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` coipPoolId
+
+instance Prelude.NFData CreateCoipCidr where
+  rnf CreateCoipCidr' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf coipPoolId
+
+instance Data.ToHeaders CreateCoipCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateCoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCoipCidr where
+  toQuery CreateCoipCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateCoipCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Cidr" Data.=: cidr,
+        "CoipPoolId" Data.=: coipPoolId
+      ]
+
+-- | /See:/ 'newCreateCoipCidrResponse' smart constructor.
+data CreateCoipCidrResponse = CreateCoipCidrResponse'
+  { -- | Information about a range of customer-owned IP addresses.
+    coipCidr :: Prelude.Maybe CoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCoipCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipCidr', 'createCoipCidrResponse_coipCidr' - Information about a range of customer-owned IP addresses.
+--
+-- 'httpStatus', 'createCoipCidrResponse_httpStatus' - The response's http status code.
+newCreateCoipCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCoipCidrResponse
+newCreateCoipCidrResponse pHttpStatus_ =
+  CreateCoipCidrResponse'
+    { coipCidr = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about a range of customer-owned IP addresses.
+createCoipCidrResponse_coipCidr :: Lens.Lens' CreateCoipCidrResponse (Prelude.Maybe CoipCidr)
+createCoipCidrResponse_coipCidr = Lens.lens (\CreateCoipCidrResponse' {coipCidr} -> coipCidr) (\s@CreateCoipCidrResponse' {} a -> s {coipCidr = a} :: CreateCoipCidrResponse)
+
+-- | The response's http status code.
+createCoipCidrResponse_httpStatus :: Lens.Lens' CreateCoipCidrResponse Prelude.Int
+createCoipCidrResponse_httpStatus = Lens.lens (\CreateCoipCidrResponse' {httpStatus} -> httpStatus) (\s@CreateCoipCidrResponse' {} a -> s {httpStatus = a} :: CreateCoipCidrResponse)
+
+instance Prelude.NFData CreateCoipCidrResponse where
+  rnf CreateCoipCidrResponse' {..} =
+    Prelude.rnf coipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateCoipPool.hs b/gen/Amazonka/EC2/CreateCoipPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateCoipPool.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateCoipPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a pool of customer-owned IP (CoIP) addresses.
+module Amazonka.EC2.CreateCoipPool
+  ( -- * Creating a Request
+    CreateCoipPool (..),
+    newCreateCoipPool,
+
+    -- * Request Lenses
+    createCoipPool_dryRun,
+    createCoipPool_tagSpecifications,
+    createCoipPool_localGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    CreateCoipPoolResponse (..),
+    newCreateCoipPoolResponse,
+
+    -- * Response Lenses
+    createCoipPoolResponse_coipPool,
+    createCoipPoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateCoipPool' smart constructor.
+data CreateCoipPool = CreateCoipPool'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the CoIP address pool.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCoipPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createCoipPool_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createCoipPool_tagSpecifications' - The tags to assign to the CoIP address pool.
+--
+-- 'localGatewayRouteTableId', 'createCoipPool_localGatewayRouteTableId' - The ID of the local gateway route table.
+newCreateCoipPool ::
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  CreateCoipPool
+newCreateCoipPool pLocalGatewayRouteTableId_ =
+  CreateCoipPool'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      localGatewayRouteTableId =
+        pLocalGatewayRouteTableId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createCoipPool_dryRun :: Lens.Lens' CreateCoipPool (Prelude.Maybe Prelude.Bool)
+createCoipPool_dryRun = Lens.lens (\CreateCoipPool' {dryRun} -> dryRun) (\s@CreateCoipPool' {} a -> s {dryRun = a} :: CreateCoipPool)
+
+-- | The tags to assign to the CoIP address pool.
+createCoipPool_tagSpecifications :: Lens.Lens' CreateCoipPool (Prelude.Maybe [TagSpecification])
+createCoipPool_tagSpecifications = Lens.lens (\CreateCoipPool' {tagSpecifications} -> tagSpecifications) (\s@CreateCoipPool' {} a -> s {tagSpecifications = a} :: CreateCoipPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the local gateway route table.
+createCoipPool_localGatewayRouteTableId :: Lens.Lens' CreateCoipPool Prelude.Text
+createCoipPool_localGatewayRouteTableId = Lens.lens (\CreateCoipPool' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@CreateCoipPool' {} a -> s {localGatewayRouteTableId = a} :: CreateCoipPool)
+
+instance Core.AWSRequest CreateCoipPool where
+  type
+    AWSResponse CreateCoipPool =
+      CreateCoipPoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateCoipPoolResponse'
+            Prelude.<$> (x Data..@? "coipPool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCoipPool where
+  hashWithSalt _salt CreateCoipPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData CreateCoipPool where
+  rnf CreateCoipPool' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+
+instance Data.ToHeaders CreateCoipPool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateCoipPool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCoipPool where
+  toQuery CreateCoipPool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateCoipPool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "LocalGatewayRouteTableId"
+          Data.=: localGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newCreateCoipPoolResponse' smart constructor.
+data CreateCoipPoolResponse = CreateCoipPoolResponse'
+  { -- | Information about the CoIP address pool.
+    coipPool :: Prelude.Maybe CoipPool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCoipPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipPool', 'createCoipPoolResponse_coipPool' - Information about the CoIP address pool.
+--
+-- 'httpStatus', 'createCoipPoolResponse_httpStatus' - The response's http status code.
+newCreateCoipPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCoipPoolResponse
+newCreateCoipPoolResponse pHttpStatus_ =
+  CreateCoipPoolResponse'
+    { coipPool = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the CoIP address pool.
+createCoipPoolResponse_coipPool :: Lens.Lens' CreateCoipPoolResponse (Prelude.Maybe CoipPool)
+createCoipPoolResponse_coipPool = Lens.lens (\CreateCoipPoolResponse' {coipPool} -> coipPool) (\s@CreateCoipPoolResponse' {} a -> s {coipPool = a} :: CreateCoipPoolResponse)
+
+-- | The response's http status code.
+createCoipPoolResponse_httpStatus :: Lens.Lens' CreateCoipPoolResponse Prelude.Int
+createCoipPoolResponse_httpStatus = Lens.lens (\CreateCoipPoolResponse' {httpStatus} -> httpStatus) (\s@CreateCoipPoolResponse' {} a -> s {httpStatus = a} :: CreateCoipPoolResponse)
+
+instance Prelude.NFData CreateCoipPoolResponse where
+  rnf CreateCoipPoolResponse' {..} =
+    Prelude.rnf coipPool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateCustomerGateway.hs b/gen/Amazonka/EC2/CreateCustomerGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateCustomerGateway.hs
@@ -0,0 +1,307 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateCustomerGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides information to Amazon Web Services about your customer gateway
+-- device. The customer gateway device is the appliance at your end of the
+-- VPN connection. You must provide the IP address of the customer gateway
+-- device’s external interface. The IP address must be static and can be
+-- behind a device performing network address translation (NAT).
+--
+-- For devices that use Border Gateway Protocol (BGP), you can also provide
+-- the device\'s BGP Autonomous System Number (ASN). You can use an
+-- existing ASN assigned to your network. If you don\'t have an ASN
+-- already, you can use a private ASN. For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/cgw-options.html Customer gateway options for your Site-to-Site VPN connection>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+--
+-- To create more than one customer gateway with the same VPN type, IP
+-- address, and BGP ASN, specify a unique device name for each customer
+-- gateway. An identical request returns information about the existing
+-- customer gateway; it doesn\'t create a new customer gateway.
+module Amazonka.EC2.CreateCustomerGateway
+  ( -- * Creating a Request
+    CreateCustomerGateway (..),
+    newCreateCustomerGateway,
+
+    -- * Request Lenses
+    createCustomerGateway_certificateArn,
+    createCustomerGateway_deviceName,
+    createCustomerGateway_dryRun,
+    createCustomerGateway_ipAddress,
+    createCustomerGateway_publicIp,
+    createCustomerGateway_tagSpecifications,
+    createCustomerGateway_bgpAsn,
+    createCustomerGateway_type,
+
+    -- * Destructuring the Response
+    CreateCustomerGatewayResponse (..),
+    newCreateCustomerGatewayResponse,
+
+    -- * Response Lenses
+    createCustomerGatewayResponse_customerGateway,
+    createCustomerGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateCustomerGateway.
+--
+-- /See:/ 'newCreateCustomerGateway' smart constructor.
+data CreateCustomerGateway = CreateCustomerGateway'
+  { -- | The Amazon Resource Name (ARN) for the customer gateway certificate.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | A name for the customer gateway device.
+    --
+    -- Length Constraints: Up to 255 characters.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | IPv4 address for the customer gateway device\'s outside interface. The
+    -- address must be static.
+    ipAddress :: Prelude.Maybe Prelude.Text,
+    -- | /This member has been deprecated./ The Internet-routable IP address for
+    -- the customer gateway\'s outside interface. The address must be static.
+    publicIp :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the customer gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | For devices that support BGP, the customer gateway\'s BGP ASN.
+    --
+    -- Default: 65000
+    bgpAsn :: Prelude.Int,
+    -- | The type of VPN connection that this customer gateway supports
+    -- (@ipsec.1@).
+    type' :: GatewayType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomerGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateArn', 'createCustomerGateway_certificateArn' - The Amazon Resource Name (ARN) for the customer gateway certificate.
+--
+-- 'deviceName', 'createCustomerGateway_deviceName' - A name for the customer gateway device.
+--
+-- Length Constraints: Up to 255 characters.
+--
+-- 'dryRun', 'createCustomerGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipAddress', 'createCustomerGateway_ipAddress' - IPv4 address for the customer gateway device\'s outside interface. The
+-- address must be static.
+--
+-- 'publicIp', 'createCustomerGateway_publicIp' - /This member has been deprecated./ The Internet-routable IP address for
+-- the customer gateway\'s outside interface. The address must be static.
+--
+-- 'tagSpecifications', 'createCustomerGateway_tagSpecifications' - The tags to apply to the customer gateway.
+--
+-- 'bgpAsn', 'createCustomerGateway_bgpAsn' - For devices that support BGP, the customer gateway\'s BGP ASN.
+--
+-- Default: 65000
+--
+-- 'type'', 'createCustomerGateway_type' - The type of VPN connection that this customer gateway supports
+-- (@ipsec.1@).
+newCreateCustomerGateway ::
+  -- | 'bgpAsn'
+  Prelude.Int ->
+  -- | 'type''
+  GatewayType ->
+  CreateCustomerGateway
+newCreateCustomerGateway pBgpAsn_ pType_ =
+  CreateCustomerGateway'
+    { certificateArn =
+        Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipAddress = Prelude.Nothing,
+      publicIp = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      bgpAsn = pBgpAsn_,
+      type' = pType_
+    }
+
+-- | The Amazon Resource Name (ARN) for the customer gateway certificate.
+createCustomerGateway_certificateArn :: Lens.Lens' CreateCustomerGateway (Prelude.Maybe Prelude.Text)
+createCustomerGateway_certificateArn = Lens.lens (\CreateCustomerGateway' {certificateArn} -> certificateArn) (\s@CreateCustomerGateway' {} a -> s {certificateArn = a} :: CreateCustomerGateway)
+
+-- | A name for the customer gateway device.
+--
+-- Length Constraints: Up to 255 characters.
+createCustomerGateway_deviceName :: Lens.Lens' CreateCustomerGateway (Prelude.Maybe Prelude.Text)
+createCustomerGateway_deviceName = Lens.lens (\CreateCustomerGateway' {deviceName} -> deviceName) (\s@CreateCustomerGateway' {} a -> s {deviceName = a} :: CreateCustomerGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createCustomerGateway_dryRun :: Lens.Lens' CreateCustomerGateway (Prelude.Maybe Prelude.Bool)
+createCustomerGateway_dryRun = Lens.lens (\CreateCustomerGateway' {dryRun} -> dryRun) (\s@CreateCustomerGateway' {} a -> s {dryRun = a} :: CreateCustomerGateway)
+
+-- | IPv4 address for the customer gateway device\'s outside interface. The
+-- address must be static.
+createCustomerGateway_ipAddress :: Lens.Lens' CreateCustomerGateway (Prelude.Maybe Prelude.Text)
+createCustomerGateway_ipAddress = Lens.lens (\CreateCustomerGateway' {ipAddress} -> ipAddress) (\s@CreateCustomerGateway' {} a -> s {ipAddress = a} :: CreateCustomerGateway)
+
+-- | /This member has been deprecated./ The Internet-routable IP address for
+-- the customer gateway\'s outside interface. The address must be static.
+createCustomerGateway_publicIp :: Lens.Lens' CreateCustomerGateway (Prelude.Maybe Prelude.Text)
+createCustomerGateway_publicIp = Lens.lens (\CreateCustomerGateway' {publicIp} -> publicIp) (\s@CreateCustomerGateway' {} a -> s {publicIp = a} :: CreateCustomerGateway)
+
+-- | The tags to apply to the customer gateway.
+createCustomerGateway_tagSpecifications :: Lens.Lens' CreateCustomerGateway (Prelude.Maybe [TagSpecification])
+createCustomerGateway_tagSpecifications = Lens.lens (\CreateCustomerGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateCustomerGateway' {} a -> s {tagSpecifications = a} :: CreateCustomerGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | For devices that support BGP, the customer gateway\'s BGP ASN.
+--
+-- Default: 65000
+createCustomerGateway_bgpAsn :: Lens.Lens' CreateCustomerGateway Prelude.Int
+createCustomerGateway_bgpAsn = Lens.lens (\CreateCustomerGateway' {bgpAsn} -> bgpAsn) (\s@CreateCustomerGateway' {} a -> s {bgpAsn = a} :: CreateCustomerGateway)
+
+-- | The type of VPN connection that this customer gateway supports
+-- (@ipsec.1@).
+createCustomerGateway_type :: Lens.Lens' CreateCustomerGateway GatewayType
+createCustomerGateway_type = Lens.lens (\CreateCustomerGateway' {type'} -> type') (\s@CreateCustomerGateway' {} a -> s {type' = a} :: CreateCustomerGateway)
+
+instance Core.AWSRequest CreateCustomerGateway where
+  type
+    AWSResponse CreateCustomerGateway =
+      CreateCustomerGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateCustomerGatewayResponse'
+            Prelude.<$> (x Data..@? "customerGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCustomerGateway where
+  hashWithSalt _salt CreateCustomerGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateArn
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipAddress
+      `Prelude.hashWithSalt` publicIp
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` bgpAsn
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateCustomerGateway where
+  rnf CreateCustomerGateway' {..} =
+    Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipAddress
+      `Prelude.seq` Prelude.rnf publicIp
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf bgpAsn
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateCustomerGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateCustomerGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCustomerGateway where
+  toQuery CreateCustomerGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateCustomerGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CertificateArn" Data.=: certificateArn,
+        "DeviceName" Data.=: deviceName,
+        "DryRun" Data.=: dryRun,
+        "IpAddress" Data.=: ipAddress,
+        "PublicIp" Data.=: publicIp,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "BgpAsn" Data.=: bgpAsn,
+        "Type" Data.=: type'
+      ]
+
+-- | Contains the output of CreateCustomerGateway.
+--
+-- /See:/ 'newCreateCustomerGatewayResponse' smart constructor.
+data CreateCustomerGatewayResponse = CreateCustomerGatewayResponse'
+  { -- | Information about the customer gateway.
+    customerGateway :: Prelude.Maybe CustomerGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCustomerGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customerGateway', 'createCustomerGatewayResponse_customerGateway' - Information about the customer gateway.
+--
+-- 'httpStatus', 'createCustomerGatewayResponse_httpStatus' - The response's http status code.
+newCreateCustomerGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateCustomerGatewayResponse
+newCreateCustomerGatewayResponse pHttpStatus_ =
+  CreateCustomerGatewayResponse'
+    { customerGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the customer gateway.
+createCustomerGatewayResponse_customerGateway :: Lens.Lens' CreateCustomerGatewayResponse (Prelude.Maybe CustomerGateway)
+createCustomerGatewayResponse_customerGateway = Lens.lens (\CreateCustomerGatewayResponse' {customerGateway} -> customerGateway) (\s@CreateCustomerGatewayResponse' {} a -> s {customerGateway = a} :: CreateCustomerGatewayResponse)
+
+-- | The response's http status code.
+createCustomerGatewayResponse_httpStatus :: Lens.Lens' CreateCustomerGatewayResponse Prelude.Int
+createCustomerGatewayResponse_httpStatus = Lens.lens (\CreateCustomerGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateCustomerGatewayResponse' {} a -> s {httpStatus = a} :: CreateCustomerGatewayResponse)
+
+instance Prelude.NFData CreateCustomerGatewayResponse where
+  rnf CreateCustomerGatewayResponse' {..} =
+    Prelude.rnf customerGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateDefaultSubnet.hs b/gen/Amazonka/EC2/CreateDefaultSubnet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateDefaultSubnet.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateDefaultSubnet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a default subnet with a size @\/20@ IPv4 CIDR block in the
+-- specified Availability Zone in your default VPC. You can have only one
+-- default subnet per Availability Zone. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet Creating a default subnet>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateDefaultSubnet
+  ( -- * Creating a Request
+    CreateDefaultSubnet (..),
+    newCreateDefaultSubnet,
+
+    -- * Request Lenses
+    createDefaultSubnet_dryRun,
+    createDefaultSubnet_ipv6Native,
+    createDefaultSubnet_availabilityZone,
+
+    -- * Destructuring the Response
+    CreateDefaultSubnetResponse (..),
+    newCreateDefaultSubnetResponse,
+
+    -- * Response Lenses
+    createDefaultSubnetResponse_subnet,
+    createDefaultSubnetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDefaultSubnet' smart constructor.
+data CreateDefaultSubnet = CreateDefaultSubnet'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to create an IPv6 only subnet. If you already have a
+    -- default subnet for this Availability Zone, you must delete it before you
+    -- can create an IPv6 only subnet.
+    ipv6Native :: Prelude.Maybe Prelude.Bool,
+    -- | The Availability Zone in which to create the default subnet.
+    availabilityZone :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDefaultSubnet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createDefaultSubnet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipv6Native', 'createDefaultSubnet_ipv6Native' - Indicates whether to create an IPv6 only subnet. If you already have a
+-- default subnet for this Availability Zone, you must delete it before you
+-- can create an IPv6 only subnet.
+--
+-- 'availabilityZone', 'createDefaultSubnet_availabilityZone' - The Availability Zone in which to create the default subnet.
+newCreateDefaultSubnet ::
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  CreateDefaultSubnet
+newCreateDefaultSubnet pAvailabilityZone_ =
+  CreateDefaultSubnet'
+    { dryRun = Prelude.Nothing,
+      ipv6Native = Prelude.Nothing,
+      availabilityZone = pAvailabilityZone_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createDefaultSubnet_dryRun :: Lens.Lens' CreateDefaultSubnet (Prelude.Maybe Prelude.Bool)
+createDefaultSubnet_dryRun = Lens.lens (\CreateDefaultSubnet' {dryRun} -> dryRun) (\s@CreateDefaultSubnet' {} a -> s {dryRun = a} :: CreateDefaultSubnet)
+
+-- | Indicates whether to create an IPv6 only subnet. If you already have a
+-- default subnet for this Availability Zone, you must delete it before you
+-- can create an IPv6 only subnet.
+createDefaultSubnet_ipv6Native :: Lens.Lens' CreateDefaultSubnet (Prelude.Maybe Prelude.Bool)
+createDefaultSubnet_ipv6Native = Lens.lens (\CreateDefaultSubnet' {ipv6Native} -> ipv6Native) (\s@CreateDefaultSubnet' {} a -> s {ipv6Native = a} :: CreateDefaultSubnet)
+
+-- | The Availability Zone in which to create the default subnet.
+createDefaultSubnet_availabilityZone :: Lens.Lens' CreateDefaultSubnet Prelude.Text
+createDefaultSubnet_availabilityZone = Lens.lens (\CreateDefaultSubnet' {availabilityZone} -> availabilityZone) (\s@CreateDefaultSubnet' {} a -> s {availabilityZone = a} :: CreateDefaultSubnet)
+
+instance Core.AWSRequest CreateDefaultSubnet where
+  type
+    AWSResponse CreateDefaultSubnet =
+      CreateDefaultSubnetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateDefaultSubnetResponse'
+            Prelude.<$> (x Data..@? "subnet")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDefaultSubnet where
+  hashWithSalt _salt CreateDefaultSubnet' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipv6Native
+      `Prelude.hashWithSalt` availabilityZone
+
+instance Prelude.NFData CreateDefaultSubnet where
+  rnf CreateDefaultSubnet' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipv6Native
+      `Prelude.seq` Prelude.rnf availabilityZone
+
+instance Data.ToHeaders CreateDefaultSubnet where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateDefaultSubnet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDefaultSubnet where
+  toQuery CreateDefaultSubnet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateDefaultSubnet" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Ipv6Native" Data.=: ipv6Native,
+        "AvailabilityZone" Data.=: availabilityZone
+      ]
+
+-- | /See:/ 'newCreateDefaultSubnetResponse' smart constructor.
+data CreateDefaultSubnetResponse = CreateDefaultSubnetResponse'
+  { -- | Information about the subnet.
+    subnet :: Prelude.Maybe Subnet,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDefaultSubnetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subnet', 'createDefaultSubnetResponse_subnet' - Information about the subnet.
+--
+-- 'httpStatus', 'createDefaultSubnetResponse_httpStatus' - The response's http status code.
+newCreateDefaultSubnetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDefaultSubnetResponse
+newCreateDefaultSubnetResponse pHttpStatus_ =
+  CreateDefaultSubnetResponse'
+    { subnet =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the subnet.
+createDefaultSubnetResponse_subnet :: Lens.Lens' CreateDefaultSubnetResponse (Prelude.Maybe Subnet)
+createDefaultSubnetResponse_subnet = Lens.lens (\CreateDefaultSubnetResponse' {subnet} -> subnet) (\s@CreateDefaultSubnetResponse' {} a -> s {subnet = a} :: CreateDefaultSubnetResponse)
+
+-- | The response's http status code.
+createDefaultSubnetResponse_httpStatus :: Lens.Lens' CreateDefaultSubnetResponse Prelude.Int
+createDefaultSubnetResponse_httpStatus = Lens.lens (\CreateDefaultSubnetResponse' {httpStatus} -> httpStatus) (\s@CreateDefaultSubnetResponse' {} a -> s {httpStatus = a} :: CreateDefaultSubnetResponse)
+
+instance Prelude.NFData CreateDefaultSubnetResponse where
+  rnf CreateDefaultSubnetResponse' {..} =
+    Prelude.rnf subnet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateDefaultVpc.hs b/gen/Amazonka/EC2/CreateDefaultVpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateDefaultVpc.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateDefaultVpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a default VPC with a size @\/16@ IPv4 CIDR block and a default
+-- subnet in each Availability Zone. For more information about the
+-- components of a default VPC, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html Default VPC and default subnets>
+-- in the /Amazon Virtual Private Cloud User Guide/. You cannot specify the
+-- components of the default VPC yourself.
+--
+-- If you deleted your previous default VPC, you can create a default VPC.
+-- You cannot have more than one default VPC per Region.
+--
+-- If your account supports EC2-Classic, you cannot use this action to
+-- create a default VPC in a Region that supports EC2-Classic. If you want
+-- a default VPC in a Region that supports EC2-Classic, see \"I really want
+-- a default VPC for my existing EC2 account. Is that possible?\" in the
+-- <http://aws.amazon.com/vpc/faqs/#Default_VPCs Default VPCs FAQ>.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateDefaultVpc
+  ( -- * Creating a Request
+    CreateDefaultVpc (..),
+    newCreateDefaultVpc,
+
+    -- * Request Lenses
+    createDefaultVpc_dryRun,
+
+    -- * Destructuring the Response
+    CreateDefaultVpcResponse (..),
+    newCreateDefaultVpcResponse,
+
+    -- * Response Lenses
+    createDefaultVpcResponse_vpc,
+    createDefaultVpcResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDefaultVpc' smart constructor.
+data CreateDefaultVpc = CreateDefaultVpc'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDefaultVpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createDefaultVpc_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newCreateDefaultVpc ::
+  CreateDefaultVpc
+newCreateDefaultVpc =
+  CreateDefaultVpc' {dryRun = Prelude.Nothing}
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createDefaultVpc_dryRun :: Lens.Lens' CreateDefaultVpc (Prelude.Maybe Prelude.Bool)
+createDefaultVpc_dryRun = Lens.lens (\CreateDefaultVpc' {dryRun} -> dryRun) (\s@CreateDefaultVpc' {} a -> s {dryRun = a} :: CreateDefaultVpc)
+
+instance Core.AWSRequest CreateDefaultVpc where
+  type
+    AWSResponse CreateDefaultVpc =
+      CreateDefaultVpcResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateDefaultVpcResponse'
+            Prelude.<$> (x Data..@? "vpc")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDefaultVpc where
+  hashWithSalt _salt CreateDefaultVpc' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData CreateDefaultVpc where
+  rnf CreateDefaultVpc' {..} = Prelude.rnf dryRun
+
+instance Data.ToHeaders CreateDefaultVpc where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateDefaultVpc where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDefaultVpc where
+  toQuery CreateDefaultVpc' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateDefaultVpc" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newCreateDefaultVpcResponse' smart constructor.
+data CreateDefaultVpcResponse = CreateDefaultVpcResponse'
+  { -- | Information about the VPC.
+    vpc :: Prelude.Maybe Vpc,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDefaultVpcResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpc', 'createDefaultVpcResponse_vpc' - Information about the VPC.
+--
+-- 'httpStatus', 'createDefaultVpcResponse_httpStatus' - The response's http status code.
+newCreateDefaultVpcResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDefaultVpcResponse
+newCreateDefaultVpcResponse pHttpStatus_ =
+  CreateDefaultVpcResponse'
+    { vpc = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPC.
+createDefaultVpcResponse_vpc :: Lens.Lens' CreateDefaultVpcResponse (Prelude.Maybe Vpc)
+createDefaultVpcResponse_vpc = Lens.lens (\CreateDefaultVpcResponse' {vpc} -> vpc) (\s@CreateDefaultVpcResponse' {} a -> s {vpc = a} :: CreateDefaultVpcResponse)
+
+-- | The response's http status code.
+createDefaultVpcResponse_httpStatus :: Lens.Lens' CreateDefaultVpcResponse Prelude.Int
+createDefaultVpcResponse_httpStatus = Lens.lens (\CreateDefaultVpcResponse' {httpStatus} -> httpStatus) (\s@CreateDefaultVpcResponse' {} a -> s {httpStatus = a} :: CreateDefaultVpcResponse)
+
+instance Prelude.NFData CreateDefaultVpcResponse where
+  rnf CreateDefaultVpcResponse' {..} =
+    Prelude.rnf vpc
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateDhcpOptions.hs b/gen/Amazonka/EC2/CreateDhcpOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateDhcpOptions.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateDhcpOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a set of DHCP options for your VPC. After creating the set, you
+-- must associate it with the VPC, causing all existing and new instances
+-- that you launch in the VPC to use this set of DHCP options. The
+-- following are the individual DHCP options you can specify. For more
+-- information about the options, see
+-- <http://www.ietf.org/rfc/rfc2132.txt RFC 2132>.
+--
+-- -   @domain-name-servers@ - The IP addresses of up to four domain name
+--     servers, or AmazonProvidedDNS. The default DHCP option set specifies
+--     AmazonProvidedDNS. If specifying more than one domain name server,
+--     specify the IP addresses in a single parameter, separated by commas.
+--     To have your instance receive a custom DNS hostname as specified in
+--     @domain-name@, you must set @domain-name-servers@ to a custom DNS
+--     server.
+--
+-- -   @domain-name@ - If you\'re using AmazonProvidedDNS in @us-east-1@,
+--     specify @ec2.internal@. If you\'re using AmazonProvidedDNS in
+--     another Region, specify @region.compute.internal@ (for example,
+--     @ap-northeast-1.compute.internal@). Otherwise, specify a domain name
+--     (for example, @ExampleCompany.com@). This value is used to complete
+--     unqualified DNS hostnames. __Important__: Some Linux operating
+--     systems accept multiple domain names separated by spaces. However,
+--     Windows and other Linux operating systems treat the value as a
+--     single domain, which results in unexpected behavior. If your DHCP
+--     options set is associated with a VPC that has instances with
+--     multiple operating systems, specify only one domain name.
+--
+-- -   @ntp-servers@ - The IP addresses of up to four Network Time Protocol
+--     (NTP) servers.
+--
+-- -   @netbios-name-servers@ - The IP addresses of up to four NetBIOS name
+--     servers.
+--
+-- -   @netbios-node-type@ - The NetBIOS node type (1, 2, 4, or 8). We
+--     recommend that you specify 2 (broadcast and multicast are not
+--     currently supported). For more information about these node types,
+--     see <http://www.ietf.org/rfc/rfc2132.txt RFC 2132>.
+--
+-- Your VPC automatically starts out with a set of DHCP options that
+-- includes only a DNS server that we provide (AmazonProvidedDNS). If you
+-- create a set of options, and if your VPC has an internet gateway, make
+-- sure to set the @domain-name-servers@ option either to
+-- @AmazonProvidedDNS@ or to a domain name server of your choice. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html DHCP options sets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateDhcpOptions
+  ( -- * Creating a Request
+    CreateDhcpOptions (..),
+    newCreateDhcpOptions,
+
+    -- * Request Lenses
+    createDhcpOptions_dryRun,
+    createDhcpOptions_tagSpecifications,
+    createDhcpOptions_dhcpConfigurations,
+
+    -- * Destructuring the Response
+    CreateDhcpOptionsResponse (..),
+    newCreateDhcpOptionsResponse,
+
+    -- * Response Lenses
+    createDhcpOptionsResponse_dhcpOptions,
+    createDhcpOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDhcpOptions' smart constructor.
+data CreateDhcpOptions = CreateDhcpOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the DHCP option.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | A DHCP configuration option.
+    dhcpConfigurations :: [NewDhcpConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDhcpOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createDhcpOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createDhcpOptions_tagSpecifications' - The tags to assign to the DHCP option.
+--
+-- 'dhcpConfigurations', 'createDhcpOptions_dhcpConfigurations' - A DHCP configuration option.
+newCreateDhcpOptions ::
+  CreateDhcpOptions
+newCreateDhcpOptions =
+  CreateDhcpOptions'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      dhcpConfigurations = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createDhcpOptions_dryRun :: Lens.Lens' CreateDhcpOptions (Prelude.Maybe Prelude.Bool)
+createDhcpOptions_dryRun = Lens.lens (\CreateDhcpOptions' {dryRun} -> dryRun) (\s@CreateDhcpOptions' {} a -> s {dryRun = a} :: CreateDhcpOptions)
+
+-- | The tags to assign to the DHCP option.
+createDhcpOptions_tagSpecifications :: Lens.Lens' CreateDhcpOptions (Prelude.Maybe [TagSpecification])
+createDhcpOptions_tagSpecifications = Lens.lens (\CreateDhcpOptions' {tagSpecifications} -> tagSpecifications) (\s@CreateDhcpOptions' {} a -> s {tagSpecifications = a} :: CreateDhcpOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | A DHCP configuration option.
+createDhcpOptions_dhcpConfigurations :: Lens.Lens' CreateDhcpOptions [NewDhcpConfiguration]
+createDhcpOptions_dhcpConfigurations = Lens.lens (\CreateDhcpOptions' {dhcpConfigurations} -> dhcpConfigurations) (\s@CreateDhcpOptions' {} a -> s {dhcpConfigurations = a} :: CreateDhcpOptions) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateDhcpOptions where
+  type
+    AWSResponse CreateDhcpOptions =
+      CreateDhcpOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateDhcpOptionsResponse'
+            Prelude.<$> (x Data..@? "dhcpOptions")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDhcpOptions where
+  hashWithSalt _salt CreateDhcpOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` dhcpConfigurations
+
+instance Prelude.NFData CreateDhcpOptions where
+  rnf CreateDhcpOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf dhcpConfigurations
+
+instance Data.ToHeaders CreateDhcpOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateDhcpOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDhcpOptions where
+  toQuery CreateDhcpOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateDhcpOptions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        Data.toQueryList
+          "DhcpConfiguration"
+          dhcpConfigurations
+      ]
+
+-- | /See:/ 'newCreateDhcpOptionsResponse' smart constructor.
+data CreateDhcpOptionsResponse = CreateDhcpOptionsResponse'
+  { -- | A set of DHCP options.
+    dhcpOptions :: Prelude.Maybe DhcpOptions,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDhcpOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dhcpOptions', 'createDhcpOptionsResponse_dhcpOptions' - A set of DHCP options.
+--
+-- 'httpStatus', 'createDhcpOptionsResponse_httpStatus' - The response's http status code.
+newCreateDhcpOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDhcpOptionsResponse
+newCreateDhcpOptionsResponse pHttpStatus_ =
+  CreateDhcpOptionsResponse'
+    { dhcpOptions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A set of DHCP options.
+createDhcpOptionsResponse_dhcpOptions :: Lens.Lens' CreateDhcpOptionsResponse (Prelude.Maybe DhcpOptions)
+createDhcpOptionsResponse_dhcpOptions = Lens.lens (\CreateDhcpOptionsResponse' {dhcpOptions} -> dhcpOptions) (\s@CreateDhcpOptionsResponse' {} a -> s {dhcpOptions = a} :: CreateDhcpOptionsResponse)
+
+-- | The response's http status code.
+createDhcpOptionsResponse_httpStatus :: Lens.Lens' CreateDhcpOptionsResponse Prelude.Int
+createDhcpOptionsResponse_httpStatus = Lens.lens (\CreateDhcpOptionsResponse' {httpStatus} -> httpStatus) (\s@CreateDhcpOptionsResponse' {} a -> s {httpStatus = a} :: CreateDhcpOptionsResponse)
+
+instance Prelude.NFData CreateDhcpOptionsResponse where
+  rnf CreateDhcpOptionsResponse' {..} =
+    Prelude.rnf dhcpOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateEgressOnlyInternetGateway.hs b/gen/Amazonka/EC2/CreateEgressOnlyInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateEgressOnlyInternetGateway.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateEgressOnlyInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- [IPv6 only] Creates an egress-only internet gateway for your VPC. An
+-- egress-only internet gateway is used to enable outbound communication
+-- over IPv6 from instances in your VPC to the internet, and prevents hosts
+-- outside of your VPC from initiating an IPv6 connection with your
+-- instance.
+module Amazonka.EC2.CreateEgressOnlyInternetGateway
+  ( -- * Creating a Request
+    CreateEgressOnlyInternetGateway (..),
+    newCreateEgressOnlyInternetGateway,
+
+    -- * Request Lenses
+    createEgressOnlyInternetGateway_clientToken,
+    createEgressOnlyInternetGateway_dryRun,
+    createEgressOnlyInternetGateway_tagSpecifications,
+    createEgressOnlyInternetGateway_vpcId,
+
+    -- * Destructuring the Response
+    CreateEgressOnlyInternetGatewayResponse (..),
+    newCreateEgressOnlyInternetGatewayResponse,
+
+    -- * Response Lenses
+    createEgressOnlyInternetGatewayResponse_clientToken,
+    createEgressOnlyInternetGatewayResponse_egressOnlyInternetGateway,
+    createEgressOnlyInternetGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateEgressOnlyInternetGateway' smart constructor.
+data CreateEgressOnlyInternetGateway = CreateEgressOnlyInternetGateway'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the egress-only internet gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the VPC for which to create the egress-only internet gateway.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEgressOnlyInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createEgressOnlyInternetGateway_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'dryRun', 'createEgressOnlyInternetGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createEgressOnlyInternetGateway_tagSpecifications' - The tags to assign to the egress-only internet gateway.
+--
+-- 'vpcId', 'createEgressOnlyInternetGateway_vpcId' - The ID of the VPC for which to create the egress-only internet gateway.
+newCreateEgressOnlyInternetGateway ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateEgressOnlyInternetGateway
+newCreateEgressOnlyInternetGateway pVpcId_ =
+  CreateEgressOnlyInternetGateway'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+createEgressOnlyInternetGateway_clientToken :: Lens.Lens' CreateEgressOnlyInternetGateway (Prelude.Maybe Prelude.Text)
+createEgressOnlyInternetGateway_clientToken = Lens.lens (\CreateEgressOnlyInternetGateway' {clientToken} -> clientToken) (\s@CreateEgressOnlyInternetGateway' {} a -> s {clientToken = a} :: CreateEgressOnlyInternetGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createEgressOnlyInternetGateway_dryRun :: Lens.Lens' CreateEgressOnlyInternetGateway (Prelude.Maybe Prelude.Bool)
+createEgressOnlyInternetGateway_dryRun = Lens.lens (\CreateEgressOnlyInternetGateway' {dryRun} -> dryRun) (\s@CreateEgressOnlyInternetGateway' {} a -> s {dryRun = a} :: CreateEgressOnlyInternetGateway)
+
+-- | The tags to assign to the egress-only internet gateway.
+createEgressOnlyInternetGateway_tagSpecifications :: Lens.Lens' CreateEgressOnlyInternetGateway (Prelude.Maybe [TagSpecification])
+createEgressOnlyInternetGateway_tagSpecifications = Lens.lens (\CreateEgressOnlyInternetGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateEgressOnlyInternetGateway' {} a -> s {tagSpecifications = a} :: CreateEgressOnlyInternetGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC for which to create the egress-only internet gateway.
+createEgressOnlyInternetGateway_vpcId :: Lens.Lens' CreateEgressOnlyInternetGateway Prelude.Text
+createEgressOnlyInternetGateway_vpcId = Lens.lens (\CreateEgressOnlyInternetGateway' {vpcId} -> vpcId) (\s@CreateEgressOnlyInternetGateway' {} a -> s {vpcId = a} :: CreateEgressOnlyInternetGateway)
+
+instance
+  Core.AWSRequest
+    CreateEgressOnlyInternetGateway
+  where
+  type
+    AWSResponse CreateEgressOnlyInternetGateway =
+      CreateEgressOnlyInternetGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateEgressOnlyInternetGatewayResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "egressOnlyInternetGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateEgressOnlyInternetGateway
+  where
+  hashWithSalt
+    _salt
+    CreateEgressOnlyInternetGateway' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` vpcId
+
+instance
+  Prelude.NFData
+    CreateEgressOnlyInternetGateway
+  where
+  rnf CreateEgressOnlyInternetGateway' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance
+  Data.ToHeaders
+    CreateEgressOnlyInternetGateway
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateEgressOnlyInternetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateEgressOnlyInternetGateway where
+  toQuery CreateEgressOnlyInternetGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateEgressOnlyInternetGateway" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newCreateEgressOnlyInternetGatewayResponse' smart constructor.
+data CreateEgressOnlyInternetGatewayResponse = CreateEgressOnlyInternetGatewayResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the egress-only internet gateway.
+    egressOnlyInternetGateway :: Prelude.Maybe EgressOnlyInternetGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEgressOnlyInternetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createEgressOnlyInternetGatewayResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'egressOnlyInternetGateway', 'createEgressOnlyInternetGatewayResponse_egressOnlyInternetGateway' - Information about the egress-only internet gateway.
+--
+-- 'httpStatus', 'createEgressOnlyInternetGatewayResponse_httpStatus' - The response's http status code.
+newCreateEgressOnlyInternetGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEgressOnlyInternetGatewayResponse
+newCreateEgressOnlyInternetGatewayResponse
+  pHttpStatus_ =
+    CreateEgressOnlyInternetGatewayResponse'
+      { clientToken =
+          Prelude.Nothing,
+        egressOnlyInternetGateway =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createEgressOnlyInternetGatewayResponse_clientToken :: Lens.Lens' CreateEgressOnlyInternetGatewayResponse (Prelude.Maybe Prelude.Text)
+createEgressOnlyInternetGatewayResponse_clientToken = Lens.lens (\CreateEgressOnlyInternetGatewayResponse' {clientToken} -> clientToken) (\s@CreateEgressOnlyInternetGatewayResponse' {} a -> s {clientToken = a} :: CreateEgressOnlyInternetGatewayResponse)
+
+-- | Information about the egress-only internet gateway.
+createEgressOnlyInternetGatewayResponse_egressOnlyInternetGateway :: Lens.Lens' CreateEgressOnlyInternetGatewayResponse (Prelude.Maybe EgressOnlyInternetGateway)
+createEgressOnlyInternetGatewayResponse_egressOnlyInternetGateway = Lens.lens (\CreateEgressOnlyInternetGatewayResponse' {egressOnlyInternetGateway} -> egressOnlyInternetGateway) (\s@CreateEgressOnlyInternetGatewayResponse' {} a -> s {egressOnlyInternetGateway = a} :: CreateEgressOnlyInternetGatewayResponse)
+
+-- | The response's http status code.
+createEgressOnlyInternetGatewayResponse_httpStatus :: Lens.Lens' CreateEgressOnlyInternetGatewayResponse Prelude.Int
+createEgressOnlyInternetGatewayResponse_httpStatus = Lens.lens (\CreateEgressOnlyInternetGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateEgressOnlyInternetGatewayResponse' {} a -> s {httpStatus = a} :: CreateEgressOnlyInternetGatewayResponse)
+
+instance
+  Prelude.NFData
+    CreateEgressOnlyInternetGatewayResponse
+  where
+  rnf CreateEgressOnlyInternetGatewayResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateFleet.hs b/gen/Amazonka/EC2/CreateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateFleet.hs
@@ -0,0 +1,511 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launches an EC2 Fleet.
+--
+-- You can create a single EC2 Fleet that includes multiple launch
+-- specifications that vary by instance type, AMI, Availability Zone, or
+-- subnet.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet.html EC2 Fleet>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreateFleet
+  ( -- * Creating a Request
+    CreateFleet (..),
+    newCreateFleet,
+
+    -- * Request Lenses
+    createFleet_clientToken,
+    createFleet_context,
+    createFleet_dryRun,
+    createFleet_excessCapacityTerminationPolicy,
+    createFleet_onDemandOptions,
+    createFleet_replaceUnhealthyInstances,
+    createFleet_spotOptions,
+    createFleet_tagSpecifications,
+    createFleet_terminateInstancesWithExpiration,
+    createFleet_type,
+    createFleet_validFrom,
+    createFleet_validUntil,
+    createFleet_launchTemplateConfigs,
+    createFleet_targetCapacitySpecification,
+
+    -- * Destructuring the Response
+    CreateFleetResponse (..),
+    newCreateFleetResponse,
+
+    -- * Response Lenses
+    createFleetResponse_errors,
+    createFleetResponse_fleetId,
+    createFleetResponse_instances,
+    createFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFleet' smart constructor.
+data CreateFleet = CreateFleet'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Reserved.
+    context :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    excessCapacityTerminationPolicy :: Prelude.Maybe FleetExcessCapacityTerminationPolicy,
+    -- | Describes the configuration of On-Demand Instances in an EC2 Fleet.
+    onDemandOptions :: Prelude.Maybe OnDemandOptionsRequest,
+    -- | Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
+    -- Supported only for fleets of type @maintain@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks EC2 Fleet health checks>
+    -- in the /Amazon EC2 User Guide/.
+    replaceUnhealthyInstances :: Prelude.Maybe Prelude.Bool,
+    -- | Describes the configuration of Spot Instances in an EC2 Fleet.
+    spotOptions :: Prelude.Maybe SpotOptionsRequest,
+    -- | The key-value pair for tagging the EC2 Fleet request on creation. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources Tagging your resources>.
+    --
+    -- If the fleet type is @instant@, specify a resource type of @fleet@ to
+    -- tag the fleet or @instance@ to tag the instances at launch.
+    --
+    -- If the fleet type is @maintain@ or @request@, specify a resource type of
+    -- @fleet@ to tag the fleet. You cannot specify a resource type of
+    -- @instance@. To tag instances at launch, specify the tags in a
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template launch template>.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | Indicates whether running instances should be terminated when the EC2
+    -- Fleet expires.
+    terminateInstancesWithExpiration :: Prelude.Maybe Prelude.Bool,
+    -- | The fleet type. The default value is @maintain@.
+    --
+    -- -   @maintain@ - The EC2 Fleet places an asynchronous request for your
+    --     desired capacity, and continues to maintain your desired Spot
+    --     capacity by replenishing interrupted Spot Instances.
+    --
+    -- -   @request@ - The EC2 Fleet places an asynchronous one-time request
+    --     for your desired capacity, but does submit Spot requests in
+    --     alternative capacity pools if Spot capacity is unavailable, and does
+    --     not maintain Spot capacity if Spot Instances are interrupted.
+    --
+    -- -   @instant@ - The EC2 Fleet places a synchronous one-time request for
+    --     your desired capacity, and returns errors for any instances that
+    --     could not be launched.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html EC2 Fleet request types>
+    -- in the /Amazon EC2 User Guide/.
+    type' :: Prelude.Maybe FleetType,
+    -- | The start date and time of the request, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+    -- the request immediately.
+    validFrom :: Prelude.Maybe Data.ISO8601,
+    -- | The end date and time of the request, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new EC2 Fleet
+    -- requests are placed or able to fulfill the request. If no value is
+    -- specified, the request remains until you cancel it.
+    validUntil :: Prelude.Maybe Data.ISO8601,
+    -- | The configuration for the EC2 Fleet.
+    launchTemplateConfigs :: [FleetLaunchTemplateConfigRequest],
+    -- | The number of units to request.
+    targetCapacitySpecification :: TargetCapacitySpecificationRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createFleet_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- 'context', 'createFleet_context' - Reserved.
+--
+-- 'dryRun', 'createFleet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'excessCapacityTerminationPolicy', 'createFleet_excessCapacityTerminationPolicy' - 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.
+--
+-- 'onDemandOptions', 'createFleet_onDemandOptions' - Describes the configuration of On-Demand Instances in an EC2 Fleet.
+--
+-- 'replaceUnhealthyInstances', 'createFleet_replaceUnhealthyInstances' - Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
+-- Supported only for fleets of type @maintain@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks EC2 Fleet health checks>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'spotOptions', 'createFleet_spotOptions' - Describes the configuration of Spot Instances in an EC2 Fleet.
+--
+-- 'tagSpecifications', 'createFleet_tagSpecifications' - The key-value pair for tagging the EC2 Fleet request on creation. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources Tagging your resources>.
+--
+-- If the fleet type is @instant@, specify a resource type of @fleet@ to
+-- tag the fleet or @instance@ to tag the instances at launch.
+--
+-- If the fleet type is @maintain@ or @request@, specify a resource type of
+-- @fleet@ to tag the fleet. You cannot specify a resource type of
+-- @instance@. To tag instances at launch, specify the tags in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template launch template>.
+--
+-- 'terminateInstancesWithExpiration', 'createFleet_terminateInstancesWithExpiration' - Indicates whether running instances should be terminated when the EC2
+-- Fleet expires.
+--
+-- 'type'', 'createFleet_type' - The fleet type. The default value is @maintain@.
+--
+-- -   @maintain@ - The EC2 Fleet places an asynchronous request for your
+--     desired capacity, and continues to maintain your desired Spot
+--     capacity by replenishing interrupted Spot Instances.
+--
+-- -   @request@ - The EC2 Fleet places an asynchronous one-time request
+--     for your desired capacity, but does submit Spot requests in
+--     alternative capacity pools if Spot capacity is unavailable, and does
+--     not maintain Spot capacity if Spot Instances are interrupted.
+--
+-- -   @instant@ - The EC2 Fleet places a synchronous one-time request for
+--     your desired capacity, and returns errors for any instances that
+--     could not be launched.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html EC2 Fleet request types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'validFrom', 'createFleet_validFrom' - The start date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+-- the request immediately.
+--
+-- 'validUntil', 'createFleet_validUntil' - The end date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new EC2 Fleet
+-- requests are placed or able to fulfill the request. If no value is
+-- specified, the request remains until you cancel it.
+--
+-- 'launchTemplateConfigs', 'createFleet_launchTemplateConfigs' - The configuration for the EC2 Fleet.
+--
+-- 'targetCapacitySpecification', 'createFleet_targetCapacitySpecification' - The number of units to request.
+newCreateFleet ::
+  -- | 'targetCapacitySpecification'
+  TargetCapacitySpecificationRequest ->
+  CreateFleet
+newCreateFleet pTargetCapacitySpecification_ =
+  CreateFleet'
+    { clientToken = Prelude.Nothing,
+      context = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      excessCapacityTerminationPolicy = Prelude.Nothing,
+      onDemandOptions = Prelude.Nothing,
+      replaceUnhealthyInstances = Prelude.Nothing,
+      spotOptions = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      terminateInstancesWithExpiration = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validFrom = Prelude.Nothing,
+      validUntil = Prelude.Nothing,
+      launchTemplateConfigs = Prelude.mempty,
+      targetCapacitySpecification =
+        pTargetCapacitySpecification_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+createFleet_clientToken :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_clientToken = Lens.lens (\CreateFleet' {clientToken} -> clientToken) (\s@CreateFleet' {} a -> s {clientToken = a} :: CreateFleet)
+
+-- | Reserved.
+createFleet_context :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_context = Lens.lens (\CreateFleet' {context} -> context) (\s@CreateFleet' {} a -> s {context = a} :: CreateFleet)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createFleet_dryRun :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Bool)
+createFleet_dryRun = Lens.lens (\CreateFleet' {dryRun} -> dryRun) (\s@CreateFleet' {} a -> s {dryRun = a} :: CreateFleet)
+
+-- | 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.
+createFleet_excessCapacityTerminationPolicy :: Lens.Lens' CreateFleet (Prelude.Maybe FleetExcessCapacityTerminationPolicy)
+createFleet_excessCapacityTerminationPolicy = Lens.lens (\CreateFleet' {excessCapacityTerminationPolicy} -> excessCapacityTerminationPolicy) (\s@CreateFleet' {} a -> s {excessCapacityTerminationPolicy = a} :: CreateFleet)
+
+-- | Describes the configuration of On-Demand Instances in an EC2 Fleet.
+createFleet_onDemandOptions :: Lens.Lens' CreateFleet (Prelude.Maybe OnDemandOptionsRequest)
+createFleet_onDemandOptions = Lens.lens (\CreateFleet' {onDemandOptions} -> onDemandOptions) (\s@CreateFleet' {} a -> s {onDemandOptions = a} :: CreateFleet)
+
+-- | Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
+-- Supported only for fleets of type @maintain@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks EC2 Fleet health checks>
+-- in the /Amazon EC2 User Guide/.
+createFleet_replaceUnhealthyInstances :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Bool)
+createFleet_replaceUnhealthyInstances = Lens.lens (\CreateFleet' {replaceUnhealthyInstances} -> replaceUnhealthyInstances) (\s@CreateFleet' {} a -> s {replaceUnhealthyInstances = a} :: CreateFleet)
+
+-- | Describes the configuration of Spot Instances in an EC2 Fleet.
+createFleet_spotOptions :: Lens.Lens' CreateFleet (Prelude.Maybe SpotOptionsRequest)
+createFleet_spotOptions = Lens.lens (\CreateFleet' {spotOptions} -> spotOptions) (\s@CreateFleet' {} a -> s {spotOptions = a} :: CreateFleet)
+
+-- | The key-value pair for tagging the EC2 Fleet request on creation. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources Tagging your resources>.
+--
+-- If the fleet type is @instant@, specify a resource type of @fleet@ to
+-- tag the fleet or @instance@ to tag the instances at launch.
+--
+-- If the fleet type is @maintain@ or @request@, specify a resource type of
+-- @fleet@ to tag the fleet. You cannot specify a resource type of
+-- @instance@. To tag instances at launch, specify the tags in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template launch template>.
+createFleet_tagSpecifications :: Lens.Lens' CreateFleet (Prelude.Maybe [TagSpecification])
+createFleet_tagSpecifications = Lens.lens (\CreateFleet' {tagSpecifications} -> tagSpecifications) (\s@CreateFleet' {} a -> s {tagSpecifications = a} :: CreateFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether running instances should be terminated when the EC2
+-- Fleet expires.
+createFleet_terminateInstancesWithExpiration :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Bool)
+createFleet_terminateInstancesWithExpiration = Lens.lens (\CreateFleet' {terminateInstancesWithExpiration} -> terminateInstancesWithExpiration) (\s@CreateFleet' {} a -> s {terminateInstancesWithExpiration = a} :: CreateFleet)
+
+-- | The fleet type. The default value is @maintain@.
+--
+-- -   @maintain@ - The EC2 Fleet places an asynchronous request for your
+--     desired capacity, and continues to maintain your desired Spot
+--     capacity by replenishing interrupted Spot Instances.
+--
+-- -   @request@ - The EC2 Fleet places an asynchronous one-time request
+--     for your desired capacity, but does submit Spot requests in
+--     alternative capacity pools if Spot capacity is unavailable, and does
+--     not maintain Spot capacity if Spot Instances are interrupted.
+--
+-- -   @instant@ - The EC2 Fleet places a synchronous one-time request for
+--     your desired capacity, and returns errors for any instances that
+--     could not be launched.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-request-type.html EC2 Fleet request types>
+-- in the /Amazon EC2 User Guide/.
+createFleet_type :: Lens.Lens' CreateFleet (Prelude.Maybe FleetType)
+createFleet_type = Lens.lens (\CreateFleet' {type'} -> type') (\s@CreateFleet' {} a -> s {type' = a} :: CreateFleet)
+
+-- | The start date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+-- the request immediately.
+createFleet_validFrom :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.UTCTime)
+createFleet_validFrom = Lens.lens (\CreateFleet' {validFrom} -> validFrom) (\s@CreateFleet' {} a -> s {validFrom = a} :: CreateFleet) Prelude.. Lens.mapping Data._Time
+
+-- | The end date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new EC2 Fleet
+-- requests are placed or able to fulfill the request. If no value is
+-- specified, the request remains until you cancel it.
+createFleet_validUntil :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.UTCTime)
+createFleet_validUntil = Lens.lens (\CreateFleet' {validUntil} -> validUntil) (\s@CreateFleet' {} a -> s {validUntil = a} :: CreateFleet) Prelude.. Lens.mapping Data._Time
+
+-- | The configuration for the EC2 Fleet.
+createFleet_launchTemplateConfigs :: Lens.Lens' CreateFleet [FleetLaunchTemplateConfigRequest]
+createFleet_launchTemplateConfigs = Lens.lens (\CreateFleet' {launchTemplateConfigs} -> launchTemplateConfigs) (\s@CreateFleet' {} a -> s {launchTemplateConfigs = a} :: CreateFleet) Prelude.. Lens.coerced
+
+-- | The number of units to request.
+createFleet_targetCapacitySpecification :: Lens.Lens' CreateFleet TargetCapacitySpecificationRequest
+createFleet_targetCapacitySpecification = Lens.lens (\CreateFleet' {targetCapacitySpecification} -> targetCapacitySpecification) (\s@CreateFleet' {} a -> s {targetCapacitySpecification = a} :: CreateFleet)
+
+instance Core.AWSRequest CreateFleet where
+  type AWSResponse CreateFleet = CreateFleetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateFleetResponse'
+            Prelude.<$> ( x
+                            Data..@? "errorSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "fleetId")
+            Prelude.<*> ( x
+                            Data..@? "fleetInstanceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFleet where
+  hashWithSalt _salt CreateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` context
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` excessCapacityTerminationPolicy
+      `Prelude.hashWithSalt` onDemandOptions
+      `Prelude.hashWithSalt` replaceUnhealthyInstances
+      `Prelude.hashWithSalt` spotOptions
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` terminateInstancesWithExpiration
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validFrom
+      `Prelude.hashWithSalt` validUntil
+      `Prelude.hashWithSalt` launchTemplateConfigs
+      `Prelude.hashWithSalt` targetCapacitySpecification
+
+instance Prelude.NFData CreateFleet where
+  rnf CreateFleet' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf context
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf excessCapacityTerminationPolicy
+      `Prelude.seq` Prelude.rnf onDemandOptions
+      `Prelude.seq` Prelude.rnf replaceUnhealthyInstances
+      `Prelude.seq` Prelude.rnf spotOptions
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf terminateInstancesWithExpiration
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validFrom
+      `Prelude.seq` Prelude.rnf validUntil
+      `Prelude.seq` Prelude.rnf launchTemplateConfigs
+      `Prelude.seq` Prelude.rnf targetCapacitySpecification
+
+instance Data.ToHeaders CreateFleet where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateFleet where
+  toQuery CreateFleet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateFleet" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Context" Data.=: context,
+        "DryRun" Data.=: dryRun,
+        "ExcessCapacityTerminationPolicy"
+          Data.=: excessCapacityTerminationPolicy,
+        "OnDemandOptions" Data.=: onDemandOptions,
+        "ReplaceUnhealthyInstances"
+          Data.=: replaceUnhealthyInstances,
+        "SpotOptions" Data.=: spotOptions,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TerminateInstancesWithExpiration"
+          Data.=: terminateInstancesWithExpiration,
+        "Type" Data.=: type',
+        "ValidFrom" Data.=: validFrom,
+        "ValidUntil" Data.=: validUntil,
+        Data.toQueryList
+          "LaunchTemplateConfigs"
+          launchTemplateConfigs,
+        "TargetCapacitySpecification"
+          Data.=: targetCapacitySpecification
+      ]
+
+-- | /See:/ 'newCreateFleetResponse' smart constructor.
+data CreateFleetResponse = CreateFleetResponse'
+  { -- | Information about the instances that could not be launched by the fleet.
+    -- Supported only for fleets of type @instant@.
+    errors :: Prelude.Maybe [CreateFleetError],
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the instances that were launched by the fleet.
+    -- Supported only for fleets of type @instant@.
+    instances :: Prelude.Maybe [CreateFleetInstance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'createFleetResponse_errors' - Information about the instances that could not be launched by the fleet.
+-- Supported only for fleets of type @instant@.
+--
+-- 'fleetId', 'createFleetResponse_fleetId' - The ID of the EC2 Fleet.
+--
+-- 'instances', 'createFleetResponse_instances' - Information about the instances that were launched by the fleet.
+-- Supported only for fleets of type @instant@.
+--
+-- 'httpStatus', 'createFleetResponse_httpStatus' - The response's http status code.
+newCreateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFleetResponse
+newCreateFleetResponse pHttpStatus_ =
+  CreateFleetResponse'
+    { errors = Prelude.Nothing,
+      fleetId = Prelude.Nothing,
+      instances = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the instances that could not be launched by the fleet.
+-- Supported only for fleets of type @instant@.
+createFleetResponse_errors :: Lens.Lens' CreateFleetResponse (Prelude.Maybe [CreateFleetError])
+createFleetResponse_errors = Lens.lens (\CreateFleetResponse' {errors} -> errors) (\s@CreateFleetResponse' {} a -> s {errors = a} :: CreateFleetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the EC2 Fleet.
+createFleetResponse_fleetId :: Lens.Lens' CreateFleetResponse (Prelude.Maybe Prelude.Text)
+createFleetResponse_fleetId = Lens.lens (\CreateFleetResponse' {fleetId} -> fleetId) (\s@CreateFleetResponse' {} a -> s {fleetId = a} :: CreateFleetResponse)
+
+-- | Information about the instances that were launched by the fleet.
+-- Supported only for fleets of type @instant@.
+createFleetResponse_instances :: Lens.Lens' CreateFleetResponse (Prelude.Maybe [CreateFleetInstance])
+createFleetResponse_instances = Lens.lens (\CreateFleetResponse' {instances} -> instances) (\s@CreateFleetResponse' {} a -> s {instances = a} :: CreateFleetResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createFleetResponse_httpStatus :: Lens.Lens' CreateFleetResponse Prelude.Int
+createFleetResponse_httpStatus = Lens.lens (\CreateFleetResponse' {httpStatus} -> httpStatus) (\s@CreateFleetResponse' {} a -> s {httpStatus = a} :: CreateFleetResponse)
+
+instance Prelude.NFData CreateFleetResponse where
+  rnf CreateFleetResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf instances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateFlowLogs.hs b/gen/Amazonka/EC2/CreateFlowLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateFlowLogs.hs
@@ -0,0 +1,582 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateFlowLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates one or more flow logs to capture information about IP traffic
+-- for a specific network interface, subnet, or VPC.
+--
+-- Flow log data for a monitored network interface is recorded as flow log
+-- records, which are log events consisting of fields that describe the
+-- traffic flow. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records Flow log records>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- When publishing to CloudWatch Logs, flow log records are published to a
+-- log group, and each network interface has a unique log stream in the log
+-- group. When publishing to Amazon S3, flow log records for all of the
+-- monitored network interfaces are published to a single log file object
+-- that is stored in the specified bucket.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html VPC Flow Logs>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateFlowLogs
+  ( -- * Creating a Request
+    CreateFlowLogs (..),
+    newCreateFlowLogs,
+
+    -- * Request Lenses
+    createFlowLogs_clientToken,
+    createFlowLogs_deliverCrossAccountRole,
+    createFlowLogs_deliverLogsPermissionArn,
+    createFlowLogs_destinationOptions,
+    createFlowLogs_dryRun,
+    createFlowLogs_logDestination,
+    createFlowLogs_logDestinationType,
+    createFlowLogs_logFormat,
+    createFlowLogs_logGroupName,
+    createFlowLogs_maxAggregationInterval,
+    createFlowLogs_tagSpecifications,
+    createFlowLogs_trafficType,
+    createFlowLogs_resourceIds,
+    createFlowLogs_resourceType,
+
+    -- * Destructuring the Response
+    CreateFlowLogsResponse (..),
+    newCreateFlowLogsResponse,
+
+    -- * Response Lenses
+    createFlowLogsResponse_clientToken,
+    createFlowLogsResponse_flowLogIds,
+    createFlowLogsResponse_unsuccessful,
+    createFlowLogsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFlowLogs' smart constructor.
+data CreateFlowLogs = CreateFlowLogs'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM role that allows Amazon EC2 to publish flow logs
+    -- across accounts.
+    deliverCrossAccountRole :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM role that allows Amazon EC2 to publish flow logs to a
+    -- CloudWatch Logs log group in your account.
+    --
+    -- This parameter is required if the destination type is @cloud-watch-logs@
+    -- and unsupported otherwise.
+    deliverLogsPermissionArn :: Prelude.Maybe Prelude.Text,
+    -- | The destination options.
+    destinationOptions :: Prelude.Maybe DestinationOptionsRequest,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The destination for the flow log data. The meaning of this parameter
+    -- depends on the destination type.
+    --
+    -- -   If the destination type is @cloud-watch-logs@, specify the ARN of a
+    --     CloudWatch Logs log group. For example:
+    --
+    --     arn:aws:logs:/region/:/account_id/:log-group:/my_group/
+    --
+    --     Alternatively, use the @LogGroupName@ parameter.
+    --
+    -- -   If the destination type is @s3@, specify the ARN of an S3 bucket.
+    --     For example:
+    --
+    --     arn:aws:s3:::/my_bucket/\//my_subfolder/\/
+    --
+    --     The subfolder is optional. Note that you can\'t use @AWSLogs@ as a
+    --     subfolder name.
+    --
+    -- -   If the destination type is @kinesis-data-firehose@, specify the ARN
+    --     of a Kinesis Data Firehose delivery stream. For example:
+    --
+    --     arn:aws:firehose:/region/:/account_id/:deliverystream:/my_stream/
+    logDestination :: Prelude.Maybe Prelude.Text,
+    -- | The type of destination for the flow log data.
+    --
+    -- Default: @cloud-watch-logs@
+    logDestinationType :: Prelude.Maybe LogDestinationType,
+    -- | The fields to include in the flow log record. List the fields in the
+    -- order in which they should appear. If you omit this parameter, the flow
+    -- log is created using the default format. If you specify this parameter,
+    -- you must include at least one field. For more information about the
+    -- available fields, see
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records Flow log records>
+    -- in the /Amazon VPC User Guide/ or
+    -- <https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records Transit Gateway Flow Log records>
+    -- in the /Amazon Web Services Transit Gateway Guide/.
+    --
+    -- Specify the fields using the @${field-id}@ format, separated by spaces.
+    -- For the CLI, surround this parameter value with single quotes on Linux
+    -- or double quotes on Windows.
+    logFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of a new or existing CloudWatch Logs log group where Amazon EC2
+    -- publishes your flow logs.
+    --
+    -- This parameter is valid only if the destination type is
+    -- @cloud-watch-logs@.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum interval of time during which a flow of packets is captured
+    -- and aggregated into a flow log record. The possible values are 60
+    -- seconds (1 minute) or 600 seconds (10 minutes). This parameter must be
+    -- 60 seconds for transit gateway resource types.
+    --
+    -- When a network interface is attached to a
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instance>,
+    -- the aggregation interval is always 60 seconds or less, regardless of the
+    -- value that you specify.
+    --
+    -- Default: 600
+    maxAggregationInterval :: Prelude.Maybe Prelude.Int,
+    -- | The tags to apply to the flow logs.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The type of traffic to monitor (accepted traffic, rejected traffic, or
+    -- all traffic). This parameter is not supported for transit gateway
+    -- resource types. It is required for the other resource types.
+    trafficType :: Prelude.Maybe TrafficType,
+    -- | The IDs of the resources to monitor. For example, if the resource type
+    -- is @VPC@, specify the IDs of the VPCs.
+    --
+    -- Constraints: Maximum of 25 for transit gateway resource types. Maximum
+    -- of 1000 for the other resource types.
+    resourceIds :: [Prelude.Text],
+    -- | The type of resource to monitor.
+    resourceType :: FlowLogsResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFlowLogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createFlowLogs_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'deliverCrossAccountRole', 'createFlowLogs_deliverCrossAccountRole' - The ARN of the IAM role that allows Amazon EC2 to publish flow logs
+-- across accounts.
+--
+-- 'deliverLogsPermissionArn', 'createFlowLogs_deliverLogsPermissionArn' - The ARN of the IAM role that allows Amazon EC2 to publish flow logs to a
+-- CloudWatch Logs log group in your account.
+--
+-- This parameter is required if the destination type is @cloud-watch-logs@
+-- and unsupported otherwise.
+--
+-- 'destinationOptions', 'createFlowLogs_destinationOptions' - The destination options.
+--
+-- 'dryRun', 'createFlowLogs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'logDestination', 'createFlowLogs_logDestination' - The destination for the flow log data. The meaning of this parameter
+-- depends on the destination type.
+--
+-- -   If the destination type is @cloud-watch-logs@, specify the ARN of a
+--     CloudWatch Logs log group. For example:
+--
+--     arn:aws:logs:/region/:/account_id/:log-group:/my_group/
+--
+--     Alternatively, use the @LogGroupName@ parameter.
+--
+-- -   If the destination type is @s3@, specify the ARN of an S3 bucket.
+--     For example:
+--
+--     arn:aws:s3:::/my_bucket/\//my_subfolder/\/
+--
+--     The subfolder is optional. Note that you can\'t use @AWSLogs@ as a
+--     subfolder name.
+--
+-- -   If the destination type is @kinesis-data-firehose@, specify the ARN
+--     of a Kinesis Data Firehose delivery stream. For example:
+--
+--     arn:aws:firehose:/region/:/account_id/:deliverystream:/my_stream/
+--
+-- 'logDestinationType', 'createFlowLogs_logDestinationType' - The type of destination for the flow log data.
+--
+-- Default: @cloud-watch-logs@
+--
+-- 'logFormat', 'createFlowLogs_logFormat' - The fields to include in the flow log record. List the fields in the
+-- order in which they should appear. If you omit this parameter, the flow
+-- log is created using the default format. If you specify this parameter,
+-- you must include at least one field. For more information about the
+-- available fields, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records Flow log records>
+-- in the /Amazon VPC User Guide/ or
+-- <https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records Transit Gateway Flow Log records>
+-- in the /Amazon Web Services Transit Gateway Guide/.
+--
+-- Specify the fields using the @${field-id}@ format, separated by spaces.
+-- For the CLI, surround this parameter value with single quotes on Linux
+-- or double quotes on Windows.
+--
+-- 'logGroupName', 'createFlowLogs_logGroupName' - The name of a new or existing CloudWatch Logs log group where Amazon EC2
+-- publishes your flow logs.
+--
+-- This parameter is valid only if the destination type is
+-- @cloud-watch-logs@.
+--
+-- 'maxAggregationInterval', 'createFlowLogs_maxAggregationInterval' - The maximum interval of time during which a flow of packets is captured
+-- and aggregated into a flow log record. The possible values are 60
+-- seconds (1 minute) or 600 seconds (10 minutes). This parameter must be
+-- 60 seconds for transit gateway resource types.
+--
+-- When a network interface is attached to a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instance>,
+-- the aggregation interval is always 60 seconds or less, regardless of the
+-- value that you specify.
+--
+-- Default: 600
+--
+-- 'tagSpecifications', 'createFlowLogs_tagSpecifications' - The tags to apply to the flow logs.
+--
+-- 'trafficType', 'createFlowLogs_trafficType' - The type of traffic to monitor (accepted traffic, rejected traffic, or
+-- all traffic). This parameter is not supported for transit gateway
+-- resource types. It is required for the other resource types.
+--
+-- 'resourceIds', 'createFlowLogs_resourceIds' - The IDs of the resources to monitor. For example, if the resource type
+-- is @VPC@, specify the IDs of the VPCs.
+--
+-- Constraints: Maximum of 25 for transit gateway resource types. Maximum
+-- of 1000 for the other resource types.
+--
+-- 'resourceType', 'createFlowLogs_resourceType' - The type of resource to monitor.
+newCreateFlowLogs ::
+  -- | 'resourceType'
+  FlowLogsResourceType ->
+  CreateFlowLogs
+newCreateFlowLogs pResourceType_ =
+  CreateFlowLogs'
+    { clientToken = Prelude.Nothing,
+      deliverCrossAccountRole = Prelude.Nothing,
+      deliverLogsPermissionArn = Prelude.Nothing,
+      destinationOptions = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      logDestination = Prelude.Nothing,
+      logDestinationType = Prelude.Nothing,
+      logFormat = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      maxAggregationInterval = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      trafficType = Prelude.Nothing,
+      resourceIds = Prelude.mempty,
+      resourceType = pResourceType_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+createFlowLogs_clientToken :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Text)
+createFlowLogs_clientToken = Lens.lens (\CreateFlowLogs' {clientToken} -> clientToken) (\s@CreateFlowLogs' {} a -> s {clientToken = a} :: CreateFlowLogs)
+
+-- | The ARN of the IAM role that allows Amazon EC2 to publish flow logs
+-- across accounts.
+createFlowLogs_deliverCrossAccountRole :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Text)
+createFlowLogs_deliverCrossAccountRole = Lens.lens (\CreateFlowLogs' {deliverCrossAccountRole} -> deliverCrossAccountRole) (\s@CreateFlowLogs' {} a -> s {deliverCrossAccountRole = a} :: CreateFlowLogs)
+
+-- | The ARN of the IAM role that allows Amazon EC2 to publish flow logs to a
+-- CloudWatch Logs log group in your account.
+--
+-- This parameter is required if the destination type is @cloud-watch-logs@
+-- and unsupported otherwise.
+createFlowLogs_deliverLogsPermissionArn :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Text)
+createFlowLogs_deliverLogsPermissionArn = Lens.lens (\CreateFlowLogs' {deliverLogsPermissionArn} -> deliverLogsPermissionArn) (\s@CreateFlowLogs' {} a -> s {deliverLogsPermissionArn = a} :: CreateFlowLogs)
+
+-- | The destination options.
+createFlowLogs_destinationOptions :: Lens.Lens' CreateFlowLogs (Prelude.Maybe DestinationOptionsRequest)
+createFlowLogs_destinationOptions = Lens.lens (\CreateFlowLogs' {destinationOptions} -> destinationOptions) (\s@CreateFlowLogs' {} a -> s {destinationOptions = a} :: CreateFlowLogs)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createFlowLogs_dryRun :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Bool)
+createFlowLogs_dryRun = Lens.lens (\CreateFlowLogs' {dryRun} -> dryRun) (\s@CreateFlowLogs' {} a -> s {dryRun = a} :: CreateFlowLogs)
+
+-- | The destination for the flow log data. The meaning of this parameter
+-- depends on the destination type.
+--
+-- -   If the destination type is @cloud-watch-logs@, specify the ARN of a
+--     CloudWatch Logs log group. For example:
+--
+--     arn:aws:logs:/region/:/account_id/:log-group:/my_group/
+--
+--     Alternatively, use the @LogGroupName@ parameter.
+--
+-- -   If the destination type is @s3@, specify the ARN of an S3 bucket.
+--     For example:
+--
+--     arn:aws:s3:::/my_bucket/\//my_subfolder/\/
+--
+--     The subfolder is optional. Note that you can\'t use @AWSLogs@ as a
+--     subfolder name.
+--
+-- -   If the destination type is @kinesis-data-firehose@, specify the ARN
+--     of a Kinesis Data Firehose delivery stream. For example:
+--
+--     arn:aws:firehose:/region/:/account_id/:deliverystream:/my_stream/
+createFlowLogs_logDestination :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Text)
+createFlowLogs_logDestination = Lens.lens (\CreateFlowLogs' {logDestination} -> logDestination) (\s@CreateFlowLogs' {} a -> s {logDestination = a} :: CreateFlowLogs)
+
+-- | The type of destination for the flow log data.
+--
+-- Default: @cloud-watch-logs@
+createFlowLogs_logDestinationType :: Lens.Lens' CreateFlowLogs (Prelude.Maybe LogDestinationType)
+createFlowLogs_logDestinationType = Lens.lens (\CreateFlowLogs' {logDestinationType} -> logDestinationType) (\s@CreateFlowLogs' {} a -> s {logDestinationType = a} :: CreateFlowLogs)
+
+-- | The fields to include in the flow log record. List the fields in the
+-- order in which they should appear. If you omit this parameter, the flow
+-- log is created using the default format. If you specify this parameter,
+-- you must include at least one field. For more information about the
+-- available fields, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records Flow log records>
+-- in the /Amazon VPC User Guide/ or
+-- <https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html#flow-log-records Transit Gateway Flow Log records>
+-- in the /Amazon Web Services Transit Gateway Guide/.
+--
+-- Specify the fields using the @${field-id}@ format, separated by spaces.
+-- For the CLI, surround this parameter value with single quotes on Linux
+-- or double quotes on Windows.
+createFlowLogs_logFormat :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Text)
+createFlowLogs_logFormat = Lens.lens (\CreateFlowLogs' {logFormat} -> logFormat) (\s@CreateFlowLogs' {} a -> s {logFormat = a} :: CreateFlowLogs)
+
+-- | The name of a new or existing CloudWatch Logs log group where Amazon EC2
+-- publishes your flow logs.
+--
+-- This parameter is valid only if the destination type is
+-- @cloud-watch-logs@.
+createFlowLogs_logGroupName :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Text)
+createFlowLogs_logGroupName = Lens.lens (\CreateFlowLogs' {logGroupName} -> logGroupName) (\s@CreateFlowLogs' {} a -> s {logGroupName = a} :: CreateFlowLogs)
+
+-- | The maximum interval of time during which a flow of packets is captured
+-- and aggregated into a flow log record. The possible values are 60
+-- seconds (1 minute) or 600 seconds (10 minutes). This parameter must be
+-- 60 seconds for transit gateway resource types.
+--
+-- When a network interface is attached to a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instance>,
+-- the aggregation interval is always 60 seconds or less, regardless of the
+-- value that you specify.
+--
+-- Default: 600
+createFlowLogs_maxAggregationInterval :: Lens.Lens' CreateFlowLogs (Prelude.Maybe Prelude.Int)
+createFlowLogs_maxAggregationInterval = Lens.lens (\CreateFlowLogs' {maxAggregationInterval} -> maxAggregationInterval) (\s@CreateFlowLogs' {} a -> s {maxAggregationInterval = a} :: CreateFlowLogs)
+
+-- | The tags to apply to the flow logs.
+createFlowLogs_tagSpecifications :: Lens.Lens' CreateFlowLogs (Prelude.Maybe [TagSpecification])
+createFlowLogs_tagSpecifications = Lens.lens (\CreateFlowLogs' {tagSpecifications} -> tagSpecifications) (\s@CreateFlowLogs' {} a -> s {tagSpecifications = a} :: CreateFlowLogs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of traffic to monitor (accepted traffic, rejected traffic, or
+-- all traffic). This parameter is not supported for transit gateway
+-- resource types. It is required for the other resource types.
+createFlowLogs_trafficType :: Lens.Lens' CreateFlowLogs (Prelude.Maybe TrafficType)
+createFlowLogs_trafficType = Lens.lens (\CreateFlowLogs' {trafficType} -> trafficType) (\s@CreateFlowLogs' {} a -> s {trafficType = a} :: CreateFlowLogs)
+
+-- | The IDs of the resources to monitor. For example, if the resource type
+-- is @VPC@, specify the IDs of the VPCs.
+--
+-- Constraints: Maximum of 25 for transit gateway resource types. Maximum
+-- of 1000 for the other resource types.
+createFlowLogs_resourceIds :: Lens.Lens' CreateFlowLogs [Prelude.Text]
+createFlowLogs_resourceIds = Lens.lens (\CreateFlowLogs' {resourceIds} -> resourceIds) (\s@CreateFlowLogs' {} a -> s {resourceIds = a} :: CreateFlowLogs) Prelude.. Lens.coerced
+
+-- | The type of resource to monitor.
+createFlowLogs_resourceType :: Lens.Lens' CreateFlowLogs FlowLogsResourceType
+createFlowLogs_resourceType = Lens.lens (\CreateFlowLogs' {resourceType} -> resourceType) (\s@CreateFlowLogs' {} a -> s {resourceType = a} :: CreateFlowLogs)
+
+instance Core.AWSRequest CreateFlowLogs where
+  type
+    AWSResponse CreateFlowLogs =
+      CreateFlowLogsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateFlowLogsResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> ( x
+                            Data..@? "flowLogIdSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFlowLogs where
+  hashWithSalt _salt CreateFlowLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` deliverCrossAccountRole
+      `Prelude.hashWithSalt` deliverLogsPermissionArn
+      `Prelude.hashWithSalt` destinationOptions
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` logDestination
+      `Prelude.hashWithSalt` logDestinationType
+      `Prelude.hashWithSalt` logFormat
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` maxAggregationInterval
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` trafficType
+      `Prelude.hashWithSalt` resourceIds
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData CreateFlowLogs where
+  rnf CreateFlowLogs' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf deliverCrossAccountRole
+      `Prelude.seq` Prelude.rnf deliverLogsPermissionArn
+      `Prelude.seq` Prelude.rnf destinationOptions
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf logDestination
+      `Prelude.seq` Prelude.rnf logDestinationType
+      `Prelude.seq` Prelude.rnf logFormat
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf maxAggregationInterval
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf trafficType
+      `Prelude.seq` Prelude.rnf resourceIds
+      `Prelude.seq` Prelude.rnf resourceType
+
+instance Data.ToHeaders CreateFlowLogs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateFlowLogs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateFlowLogs where
+  toQuery CreateFlowLogs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateFlowLogs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DeliverCrossAccountRole"
+          Data.=: deliverCrossAccountRole,
+        "DeliverLogsPermissionArn"
+          Data.=: deliverLogsPermissionArn,
+        "DestinationOptions" Data.=: destinationOptions,
+        "DryRun" Data.=: dryRun,
+        "LogDestination" Data.=: logDestination,
+        "LogDestinationType" Data.=: logDestinationType,
+        "LogFormat" Data.=: logFormat,
+        "LogGroupName" Data.=: logGroupName,
+        "MaxAggregationInterval"
+          Data.=: maxAggregationInterval,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TrafficType" Data.=: trafficType,
+        Data.toQueryList "ResourceId" resourceIds,
+        "ResourceType" Data.=: resourceType
+      ]
+
+-- | /See:/ 'newCreateFlowLogsResponse' smart constructor.
+data CreateFlowLogsResponse = CreateFlowLogsResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the flow logs.
+    flowLogIds :: Prelude.Maybe [Prelude.Text],
+    -- | Information about the flow logs that could not be created successfully.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFlowLogsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createFlowLogsResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'flowLogIds', 'createFlowLogsResponse_flowLogIds' - The IDs of the flow logs.
+--
+-- 'unsuccessful', 'createFlowLogsResponse_unsuccessful' - Information about the flow logs that could not be created successfully.
+--
+-- 'httpStatus', 'createFlowLogsResponse_httpStatus' - The response's http status code.
+newCreateFlowLogsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFlowLogsResponse
+newCreateFlowLogsResponse pHttpStatus_ =
+  CreateFlowLogsResponse'
+    { clientToken =
+        Prelude.Nothing,
+      flowLogIds = Prelude.Nothing,
+      unsuccessful = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createFlowLogsResponse_clientToken :: Lens.Lens' CreateFlowLogsResponse (Prelude.Maybe Prelude.Text)
+createFlowLogsResponse_clientToken = Lens.lens (\CreateFlowLogsResponse' {clientToken} -> clientToken) (\s@CreateFlowLogsResponse' {} a -> s {clientToken = a} :: CreateFlowLogsResponse)
+
+-- | The IDs of the flow logs.
+createFlowLogsResponse_flowLogIds :: Lens.Lens' CreateFlowLogsResponse (Prelude.Maybe [Prelude.Text])
+createFlowLogsResponse_flowLogIds = Lens.lens (\CreateFlowLogsResponse' {flowLogIds} -> flowLogIds) (\s@CreateFlowLogsResponse' {} a -> s {flowLogIds = a} :: CreateFlowLogsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the flow logs that could not be created successfully.
+createFlowLogsResponse_unsuccessful :: Lens.Lens' CreateFlowLogsResponse (Prelude.Maybe [UnsuccessfulItem])
+createFlowLogsResponse_unsuccessful = Lens.lens (\CreateFlowLogsResponse' {unsuccessful} -> unsuccessful) (\s@CreateFlowLogsResponse' {} a -> s {unsuccessful = a} :: CreateFlowLogsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createFlowLogsResponse_httpStatus :: Lens.Lens' CreateFlowLogsResponse Prelude.Int
+createFlowLogsResponse_httpStatus = Lens.lens (\CreateFlowLogsResponse' {httpStatus} -> httpStatus) (\s@CreateFlowLogsResponse' {} a -> s {httpStatus = a} :: CreateFlowLogsResponse)
+
+instance Prelude.NFData CreateFlowLogsResponse where
+  rnf CreateFlowLogsResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf flowLogIds
+      `Prelude.seq` Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateFpgaImage.hs b/gen/Amazonka/EC2/CreateFpgaImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateFpgaImage.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateFpgaImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon FPGA Image (AFI) from the specified design checkpoint
+-- (DCP).
+--
+-- The create operation is asynchronous. To verify that the AFI is ready
+-- for use, check the output logs.
+--
+-- An AFI contains the FPGA bitstream that is ready to download to an FPGA.
+-- You can securely deploy an AFI on multiple FPGA-accelerated instances.
+-- For more information, see the
+-- <https://github.com/aws/aws-fpga/ Amazon Web Services FPGA Hardware Development Kit>.
+module Amazonka.EC2.CreateFpgaImage
+  ( -- * Creating a Request
+    CreateFpgaImage (..),
+    newCreateFpgaImage,
+
+    -- * Request Lenses
+    createFpgaImage_clientToken,
+    createFpgaImage_description,
+    createFpgaImage_dryRun,
+    createFpgaImage_logsStorageLocation,
+    createFpgaImage_name,
+    createFpgaImage_tagSpecifications,
+    createFpgaImage_inputStorageLocation,
+
+    -- * Destructuring the Response
+    CreateFpgaImageResponse (..),
+    newCreateFpgaImageResponse,
+
+    -- * Response Lenses
+    createFpgaImageResponse_fpgaImageGlobalId,
+    createFpgaImageResponse_fpgaImageId,
+    createFpgaImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFpgaImage' smart constructor.
+data CreateFpgaImage = CreateFpgaImage'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the AFI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The location in Amazon S3 for the output logs.
+    logsStorageLocation :: Prelude.Maybe StorageLocation,
+    -- | A name for the AFI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the FPGA image during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The location of the encrypted design checkpoint in Amazon S3. The input
+    -- must be a tarball.
+    inputStorageLocation :: StorageLocation
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFpgaImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createFpgaImage_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createFpgaImage_description' - A description for the AFI.
+--
+-- 'dryRun', 'createFpgaImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'logsStorageLocation', 'createFpgaImage_logsStorageLocation' - The location in Amazon S3 for the output logs.
+--
+-- 'name', 'createFpgaImage_name' - A name for the AFI.
+--
+-- 'tagSpecifications', 'createFpgaImage_tagSpecifications' - The tags to apply to the FPGA image during creation.
+--
+-- 'inputStorageLocation', 'createFpgaImage_inputStorageLocation' - The location of the encrypted design checkpoint in Amazon S3. The input
+-- must be a tarball.
+newCreateFpgaImage ::
+  -- | 'inputStorageLocation'
+  StorageLocation ->
+  CreateFpgaImage
+newCreateFpgaImage pInputStorageLocation_ =
+  CreateFpgaImage'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      logsStorageLocation = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      inputStorageLocation = pInputStorageLocation_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createFpgaImage_clientToken :: Lens.Lens' CreateFpgaImage (Prelude.Maybe Prelude.Text)
+createFpgaImage_clientToken = Lens.lens (\CreateFpgaImage' {clientToken} -> clientToken) (\s@CreateFpgaImage' {} a -> s {clientToken = a} :: CreateFpgaImage)
+
+-- | A description for the AFI.
+createFpgaImage_description :: Lens.Lens' CreateFpgaImage (Prelude.Maybe Prelude.Text)
+createFpgaImage_description = Lens.lens (\CreateFpgaImage' {description} -> description) (\s@CreateFpgaImage' {} a -> s {description = a} :: CreateFpgaImage)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createFpgaImage_dryRun :: Lens.Lens' CreateFpgaImage (Prelude.Maybe Prelude.Bool)
+createFpgaImage_dryRun = Lens.lens (\CreateFpgaImage' {dryRun} -> dryRun) (\s@CreateFpgaImage' {} a -> s {dryRun = a} :: CreateFpgaImage)
+
+-- | The location in Amazon S3 for the output logs.
+createFpgaImage_logsStorageLocation :: Lens.Lens' CreateFpgaImage (Prelude.Maybe StorageLocation)
+createFpgaImage_logsStorageLocation = Lens.lens (\CreateFpgaImage' {logsStorageLocation} -> logsStorageLocation) (\s@CreateFpgaImage' {} a -> s {logsStorageLocation = a} :: CreateFpgaImage)
+
+-- | A name for the AFI.
+createFpgaImage_name :: Lens.Lens' CreateFpgaImage (Prelude.Maybe Prelude.Text)
+createFpgaImage_name = Lens.lens (\CreateFpgaImage' {name} -> name) (\s@CreateFpgaImage' {} a -> s {name = a} :: CreateFpgaImage)
+
+-- | The tags to apply to the FPGA image during creation.
+createFpgaImage_tagSpecifications :: Lens.Lens' CreateFpgaImage (Prelude.Maybe [TagSpecification])
+createFpgaImage_tagSpecifications = Lens.lens (\CreateFpgaImage' {tagSpecifications} -> tagSpecifications) (\s@CreateFpgaImage' {} a -> s {tagSpecifications = a} :: CreateFpgaImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The location of the encrypted design checkpoint in Amazon S3. The input
+-- must be a tarball.
+createFpgaImage_inputStorageLocation :: Lens.Lens' CreateFpgaImage StorageLocation
+createFpgaImage_inputStorageLocation = Lens.lens (\CreateFpgaImage' {inputStorageLocation} -> inputStorageLocation) (\s@CreateFpgaImage' {} a -> s {inputStorageLocation = a} :: CreateFpgaImage)
+
+instance Core.AWSRequest CreateFpgaImage where
+  type
+    AWSResponse CreateFpgaImage =
+      CreateFpgaImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateFpgaImageResponse'
+            Prelude.<$> (x Data..@? "fpgaImageGlobalId")
+            Prelude.<*> (x Data..@? "fpgaImageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFpgaImage where
+  hashWithSalt _salt CreateFpgaImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` logsStorageLocation
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` inputStorageLocation
+
+instance Prelude.NFData CreateFpgaImage where
+  rnf CreateFpgaImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf logsStorageLocation
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf inputStorageLocation
+
+instance Data.ToHeaders CreateFpgaImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateFpgaImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateFpgaImage where
+  toQuery CreateFpgaImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateFpgaImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "LogsStorageLocation" Data.=: logsStorageLocation,
+        "Name" Data.=: name,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "InputStorageLocation" Data.=: inputStorageLocation
+      ]
+
+-- | /See:/ 'newCreateFpgaImageResponse' smart constructor.
+data CreateFpgaImageResponse = CreateFpgaImageResponse'
+  { -- | The global FPGA image identifier (AGFI ID).
+    fpgaImageGlobalId :: Prelude.Maybe Prelude.Text,
+    -- | The FPGA image identifier (AFI ID).
+    fpgaImageId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFpgaImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpgaImageGlobalId', 'createFpgaImageResponse_fpgaImageGlobalId' - The global FPGA image identifier (AGFI ID).
+--
+-- 'fpgaImageId', 'createFpgaImageResponse_fpgaImageId' - The FPGA image identifier (AFI ID).
+--
+-- 'httpStatus', 'createFpgaImageResponse_httpStatus' - The response's http status code.
+newCreateFpgaImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFpgaImageResponse
+newCreateFpgaImageResponse pHttpStatus_ =
+  CreateFpgaImageResponse'
+    { fpgaImageGlobalId =
+        Prelude.Nothing,
+      fpgaImageId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The global FPGA image identifier (AGFI ID).
+createFpgaImageResponse_fpgaImageGlobalId :: Lens.Lens' CreateFpgaImageResponse (Prelude.Maybe Prelude.Text)
+createFpgaImageResponse_fpgaImageGlobalId = Lens.lens (\CreateFpgaImageResponse' {fpgaImageGlobalId} -> fpgaImageGlobalId) (\s@CreateFpgaImageResponse' {} a -> s {fpgaImageGlobalId = a} :: CreateFpgaImageResponse)
+
+-- | The FPGA image identifier (AFI ID).
+createFpgaImageResponse_fpgaImageId :: Lens.Lens' CreateFpgaImageResponse (Prelude.Maybe Prelude.Text)
+createFpgaImageResponse_fpgaImageId = Lens.lens (\CreateFpgaImageResponse' {fpgaImageId} -> fpgaImageId) (\s@CreateFpgaImageResponse' {} a -> s {fpgaImageId = a} :: CreateFpgaImageResponse)
+
+-- | The response's http status code.
+createFpgaImageResponse_httpStatus :: Lens.Lens' CreateFpgaImageResponse Prelude.Int
+createFpgaImageResponse_httpStatus = Lens.lens (\CreateFpgaImageResponse' {httpStatus} -> httpStatus) (\s@CreateFpgaImageResponse' {} a -> s {httpStatus = a} :: CreateFpgaImageResponse)
+
+instance Prelude.NFData CreateFpgaImageResponse where
+  rnf CreateFpgaImageResponse' {..} =
+    Prelude.rnf fpgaImageGlobalId
+      `Prelude.seq` Prelude.rnf fpgaImageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateImage.hs b/gen/Amazonka/EC2/CreateImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateImage.hs
@@ -0,0 +1,368 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that
+-- is either running or stopped.
+--
+-- By default, when Amazon EC2 creates the new AMI, it reboots the instance
+-- so that it can take snapshots of the attached volumes while data is at
+-- rest, in order to ensure a consistent state. You can set the @NoReboot@
+-- parameter to @true@ in the API request, or use the @--no-reboot@ option
+-- in the CLI to prevent Amazon EC2 from shutting down and rebooting the
+-- instance.
+--
+-- If you choose to bypass the shutdown and reboot process by setting the
+-- @NoReboot@ parameter to @true@ in the API request, or by using the
+-- @--no-reboot@ option in the CLI, we can\'t guarantee the file system
+-- integrity of the created image.
+--
+-- If you customized your instance with instance store volumes or Amazon
+-- EBS volumes in addition to the root device volume, the new AMI contains
+-- block device mapping information for those volumes. When you launch an
+-- instance from this new AMI, the instance automatically launches with
+-- those additional volumes.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html Create an Amazon EBS-backed Linux AMI>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateImage
+  ( -- * Creating a Request
+    CreateImage (..),
+    newCreateImage,
+
+    -- * Request Lenses
+    createImage_blockDeviceMappings,
+    createImage_description,
+    createImage_dryRun,
+    createImage_noReboot,
+    createImage_tagSpecifications,
+    createImage_instanceId,
+    createImage_name,
+
+    -- * Destructuring the Response
+    CreateImageResponse (..),
+    newCreateImageResponse,
+
+    -- * Response Lenses
+    createImageResponse_imageId,
+    createImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateImage' smart constructor.
+data CreateImage = CreateImage'
+  { -- | The block device mappings. This parameter cannot be used to modify the
+    -- encryption status of existing volumes or snapshots. To create an AMI
+    -- with encrypted snapshots, use the CopyImage action.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | A description for the new image.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | By default, when Amazon EC2 creates the new AMI, it reboots the instance
+    -- so that it can take snapshots of the attached volumes while data is at
+    -- rest, in order to ensure a consistent state. You can set the @NoReboot@
+    -- parameter to @true@ in the API request, or use the @--no-reboot@ option
+    -- in the CLI to prevent Amazon EC2 from shutting down and rebooting the
+    -- instance.
+    --
+    -- If you choose to bypass the shutdown and reboot process by setting the
+    -- @NoReboot@ parameter to @true@ in the API request, or by using the
+    -- @--no-reboot@ option in the CLI, we can\'t guarantee the file system
+    -- integrity of the created image.
+    --
+    -- Default: @false@ (follow standard reboot process)
+    noReboot :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the AMI and snapshots on creation. You can tag the
+    -- AMI, the snapshots, or both.
+    --
+    -- -   To tag the AMI, the value for @ResourceType@ must be @image@.
+    --
+    -- -   To tag the snapshots that are created of the root volume and of
+    --     other Amazon EBS volumes that are attached to the instance, the
+    --     value for @ResourceType@ must be @snapshot@. The same tag is applied
+    --     to all of the snapshots that are created.
+    --
+    -- If you specify other values for @ResourceType@, the request fails.
+    --
+    -- To tag an AMI or snapshot after it has been created, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text,
+    -- | A name for the new image.
+    --
+    -- Constraints: 3-128 alphanumeric characters, parentheses (()), square
+    -- brackets ([]), spaces ( ), periods (.), slashes (\/), dashes (-), single
+    -- quotes (\'), at-signs (\@), or underscores(_)
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'createImage_blockDeviceMappings' - The block device mappings. This parameter cannot be used to modify the
+-- encryption status of existing volumes or snapshots. To create an AMI
+-- with encrypted snapshots, use the CopyImage action.
+--
+-- 'description', 'createImage_description' - A description for the new image.
+--
+-- 'dryRun', 'createImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'noReboot', 'createImage_noReboot' - By default, when Amazon EC2 creates the new AMI, it reboots the instance
+-- so that it can take snapshots of the attached volumes while data is at
+-- rest, in order to ensure a consistent state. You can set the @NoReboot@
+-- parameter to @true@ in the API request, or use the @--no-reboot@ option
+-- in the CLI to prevent Amazon EC2 from shutting down and rebooting the
+-- instance.
+--
+-- If you choose to bypass the shutdown and reboot process by setting the
+-- @NoReboot@ parameter to @true@ in the API request, or by using the
+-- @--no-reboot@ option in the CLI, we can\'t guarantee the file system
+-- integrity of the created image.
+--
+-- Default: @false@ (follow standard reboot process)
+--
+-- 'tagSpecifications', 'createImage_tagSpecifications' - The tags to apply to the AMI and snapshots on creation. You can tag the
+-- AMI, the snapshots, or both.
+--
+-- -   To tag the AMI, the value for @ResourceType@ must be @image@.
+--
+-- -   To tag the snapshots that are created of the root volume and of
+--     other Amazon EBS volumes that are attached to the instance, the
+--     value for @ResourceType@ must be @snapshot@. The same tag is applied
+--     to all of the snapshots that are created.
+--
+-- If you specify other values for @ResourceType@, the request fails.
+--
+-- To tag an AMI or snapshot after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+--
+-- 'instanceId', 'createImage_instanceId' - The ID of the instance.
+--
+-- 'name', 'createImage_name' - A name for the new image.
+--
+-- Constraints: 3-128 alphanumeric characters, parentheses (()), square
+-- brackets ([]), spaces ( ), periods (.), slashes (\/), dashes (-), single
+-- quotes (\'), at-signs (\@), or underscores(_)
+newCreateImage ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateImage
+newCreateImage pInstanceId_ pName_ =
+  CreateImage'
+    { blockDeviceMappings = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      noReboot = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      instanceId = pInstanceId_,
+      name = pName_
+    }
+
+-- | The block device mappings. This parameter cannot be used to modify the
+-- encryption status of existing volumes or snapshots. To create an AMI
+-- with encrypted snapshots, use the CopyImage action.
+createImage_blockDeviceMappings :: Lens.Lens' CreateImage (Prelude.Maybe [BlockDeviceMapping])
+createImage_blockDeviceMappings = Lens.lens (\CreateImage' {blockDeviceMappings} -> blockDeviceMappings) (\s@CreateImage' {} a -> s {blockDeviceMappings = a} :: CreateImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description for the new image.
+createImage_description :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Text)
+createImage_description = Lens.lens (\CreateImage' {description} -> description) (\s@CreateImage' {} a -> s {description = a} :: CreateImage)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createImage_dryRun :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Bool)
+createImage_dryRun = Lens.lens (\CreateImage' {dryRun} -> dryRun) (\s@CreateImage' {} a -> s {dryRun = a} :: CreateImage)
+
+-- | By default, when Amazon EC2 creates the new AMI, it reboots the instance
+-- so that it can take snapshots of the attached volumes while data is at
+-- rest, in order to ensure a consistent state. You can set the @NoReboot@
+-- parameter to @true@ in the API request, or use the @--no-reboot@ option
+-- in the CLI to prevent Amazon EC2 from shutting down and rebooting the
+-- instance.
+--
+-- If you choose to bypass the shutdown and reboot process by setting the
+-- @NoReboot@ parameter to @true@ in the API request, or by using the
+-- @--no-reboot@ option in the CLI, we can\'t guarantee the file system
+-- integrity of the created image.
+--
+-- Default: @false@ (follow standard reboot process)
+createImage_noReboot :: Lens.Lens' CreateImage (Prelude.Maybe Prelude.Bool)
+createImage_noReboot = Lens.lens (\CreateImage' {noReboot} -> noReboot) (\s@CreateImage' {} a -> s {noReboot = a} :: CreateImage)
+
+-- | The tags to apply to the AMI and snapshots on creation. You can tag the
+-- AMI, the snapshots, or both.
+--
+-- -   To tag the AMI, the value for @ResourceType@ must be @image@.
+--
+-- -   To tag the snapshots that are created of the root volume and of
+--     other Amazon EBS volumes that are attached to the instance, the
+--     value for @ResourceType@ must be @snapshot@. The same tag is applied
+--     to all of the snapshots that are created.
+--
+-- If you specify other values for @ResourceType@, the request fails.
+--
+-- To tag an AMI or snapshot after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+createImage_tagSpecifications :: Lens.Lens' CreateImage (Prelude.Maybe [TagSpecification])
+createImage_tagSpecifications = Lens.lens (\CreateImage' {tagSpecifications} -> tagSpecifications) (\s@CreateImage' {} a -> s {tagSpecifications = a} :: CreateImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the instance.
+createImage_instanceId :: Lens.Lens' CreateImage Prelude.Text
+createImage_instanceId = Lens.lens (\CreateImage' {instanceId} -> instanceId) (\s@CreateImage' {} a -> s {instanceId = a} :: CreateImage)
+
+-- | A name for the new image.
+--
+-- Constraints: 3-128 alphanumeric characters, parentheses (()), square
+-- brackets ([]), spaces ( ), periods (.), slashes (\/), dashes (-), single
+-- quotes (\'), at-signs (\@), or underscores(_)
+createImage_name :: Lens.Lens' CreateImage Prelude.Text
+createImage_name = Lens.lens (\CreateImage' {name} -> name) (\s@CreateImage' {} a -> s {name = a} :: CreateImage)
+
+instance Core.AWSRequest CreateImage where
+  type AWSResponse CreateImage = CreateImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateImageResponse'
+            Prelude.<$> (x Data..@? "imageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateImage where
+  hashWithSalt _salt CreateImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` noReboot
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateImage where
+  rnf CreateImage' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf noReboot
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateImage where
+  toQuery CreateImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "NoReboot" Data.=: noReboot,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "InstanceId" Data.=: instanceId,
+        "Name" Data.=: name
+      ]
+
+-- | /See:/ 'newCreateImageResponse' smart constructor.
+data CreateImageResponse = CreateImageResponse'
+  { -- | The ID of the new AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'createImageResponse_imageId' - The ID of the new AMI.
+--
+-- 'httpStatus', 'createImageResponse_httpStatus' - The response's http status code.
+newCreateImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImageResponse
+newCreateImageResponse pHttpStatus_ =
+  CreateImageResponse'
+    { imageId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the new AMI.
+createImageResponse_imageId :: Lens.Lens' CreateImageResponse (Prelude.Maybe Prelude.Text)
+createImageResponse_imageId = Lens.lens (\CreateImageResponse' {imageId} -> imageId) (\s@CreateImageResponse' {} a -> s {imageId = a} :: CreateImageResponse)
+
+-- | The response's http status code.
+createImageResponse_httpStatus :: Lens.Lens' CreateImageResponse Prelude.Int
+createImageResponse_httpStatus = Lens.lens (\CreateImageResponse' {httpStatus} -> httpStatus) (\s@CreateImageResponse' {} a -> s {httpStatus = a} :: CreateImageResponse)
+
+instance Prelude.NFData CreateImageResponse where
+  rnf CreateImageResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateInstanceEventWindow.hs b/gen/Amazonka/EC2/CreateInstanceEventWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateInstanceEventWindow.hs
@@ -0,0 +1,323 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateInstanceEventWindow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an event window in which scheduled events for the associated
+-- Amazon EC2 instances can run.
+--
+-- You can define either a set of time ranges or a cron expression when
+-- creating the event window, but not both. All event window times are in
+-- UTC.
+--
+-- You can create up to 200 event windows per Amazon Web Services Region.
+--
+-- When you create the event window, targets (instance IDs, Dedicated Host
+-- IDs, or tags) are not yet associated with it. To ensure that the event
+-- window can be used, you must associate one or more targets with it by
+-- using the AssociateInstanceEventWindow API.
+--
+-- Event windows are applicable only for scheduled events that stop,
+-- reboot, or terminate instances.
+--
+-- Event windows are /not/ applicable for:
+--
+-- -   Expedited scheduled events and network maintenance events.
+--
+-- -   Unscheduled maintenance such as AutoRecovery and unplanned reboots.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html Define event windows for scheduled events>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreateInstanceEventWindow
+  ( -- * Creating a Request
+    CreateInstanceEventWindow (..),
+    newCreateInstanceEventWindow,
+
+    -- * Request Lenses
+    createInstanceEventWindow_cronExpression,
+    createInstanceEventWindow_dryRun,
+    createInstanceEventWindow_name,
+    createInstanceEventWindow_tagSpecifications,
+    createInstanceEventWindow_timeRanges,
+
+    -- * Destructuring the Response
+    CreateInstanceEventWindowResponse (..),
+    newCreateInstanceEventWindowResponse,
+
+    -- * Response Lenses
+    createInstanceEventWindowResponse_instanceEventWindow,
+    createInstanceEventWindowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateInstanceEventWindow' smart constructor.
+data CreateInstanceEventWindow = CreateInstanceEventWindow'
+  { -- | The cron expression for the event window, for example,
+    -- @* 0-4,20-23 * * 1,5@. If you specify a cron expression, you can\'t
+    -- specify a time range.
+    --
+    -- Constraints:
+    --
+    -- -   Only hour and day of the week values are supported.
+    --
+    -- -   For day of the week values, you can specify either integers @0@
+    --     through @6@, or alternative single values @SUN@ through @SAT@.
+    --
+    -- -   The minute, month, and year must be specified by @*@.
+    --
+    -- -   The hour value must be one or a multiple range, for example, @0-4@
+    --     or @0-4,20-23@.
+    --
+    -- -   Each hour range must be >= 2 hours, for example, @0-2@ or @20-23@.
+    --
+    -- -   The event window must be >= 4 hours. The combined total time ranges
+    --     in the event window must be >= 4 hours.
+    --
+    -- For more information about cron expressions, see
+    -- <https://en.wikipedia.org/wiki/Cron cron> on the /Wikipedia website/.
+    cronExpression :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the event window.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the event window.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The time range for the event window. If you specify a time range, you
+    -- can\'t specify a cron expression.
+    timeRanges :: Prelude.Maybe [InstanceEventWindowTimeRangeRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInstanceEventWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cronExpression', 'createInstanceEventWindow_cronExpression' - The cron expression for the event window, for example,
+-- @* 0-4,20-23 * * 1,5@. If you specify a cron expression, you can\'t
+-- specify a time range.
+--
+-- Constraints:
+--
+-- -   Only hour and day of the week values are supported.
+--
+-- -   For day of the week values, you can specify either integers @0@
+--     through @6@, or alternative single values @SUN@ through @SAT@.
+--
+-- -   The minute, month, and year must be specified by @*@.
+--
+-- -   The hour value must be one or a multiple range, for example, @0-4@
+--     or @0-4,20-23@.
+--
+-- -   Each hour range must be >= 2 hours, for example, @0-2@ or @20-23@.
+--
+-- -   The event window must be >= 4 hours. The combined total time ranges
+--     in the event window must be >= 4 hours.
+--
+-- For more information about cron expressions, see
+-- <https://en.wikipedia.org/wiki/Cron cron> on the /Wikipedia website/.
+--
+-- 'dryRun', 'createInstanceEventWindow_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'name', 'createInstanceEventWindow_name' - The name of the event window.
+--
+-- 'tagSpecifications', 'createInstanceEventWindow_tagSpecifications' - The tags to apply to the event window.
+--
+-- 'timeRanges', 'createInstanceEventWindow_timeRanges' - The time range for the event window. If you specify a time range, you
+-- can\'t specify a cron expression.
+newCreateInstanceEventWindow ::
+  CreateInstanceEventWindow
+newCreateInstanceEventWindow =
+  CreateInstanceEventWindow'
+    { cronExpression =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      timeRanges = Prelude.Nothing
+    }
+
+-- | The cron expression for the event window, for example,
+-- @* 0-4,20-23 * * 1,5@. If you specify a cron expression, you can\'t
+-- specify a time range.
+--
+-- Constraints:
+--
+-- -   Only hour and day of the week values are supported.
+--
+-- -   For day of the week values, you can specify either integers @0@
+--     through @6@, or alternative single values @SUN@ through @SAT@.
+--
+-- -   The minute, month, and year must be specified by @*@.
+--
+-- -   The hour value must be one or a multiple range, for example, @0-4@
+--     or @0-4,20-23@.
+--
+-- -   Each hour range must be >= 2 hours, for example, @0-2@ or @20-23@.
+--
+-- -   The event window must be >= 4 hours. The combined total time ranges
+--     in the event window must be >= 4 hours.
+--
+-- For more information about cron expressions, see
+-- <https://en.wikipedia.org/wiki/Cron cron> on the /Wikipedia website/.
+createInstanceEventWindow_cronExpression :: Lens.Lens' CreateInstanceEventWindow (Prelude.Maybe Prelude.Text)
+createInstanceEventWindow_cronExpression = Lens.lens (\CreateInstanceEventWindow' {cronExpression} -> cronExpression) (\s@CreateInstanceEventWindow' {} a -> s {cronExpression = a} :: CreateInstanceEventWindow)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createInstanceEventWindow_dryRun :: Lens.Lens' CreateInstanceEventWindow (Prelude.Maybe Prelude.Bool)
+createInstanceEventWindow_dryRun = Lens.lens (\CreateInstanceEventWindow' {dryRun} -> dryRun) (\s@CreateInstanceEventWindow' {} a -> s {dryRun = a} :: CreateInstanceEventWindow)
+
+-- | The name of the event window.
+createInstanceEventWindow_name :: Lens.Lens' CreateInstanceEventWindow (Prelude.Maybe Prelude.Text)
+createInstanceEventWindow_name = Lens.lens (\CreateInstanceEventWindow' {name} -> name) (\s@CreateInstanceEventWindow' {} a -> s {name = a} :: CreateInstanceEventWindow)
+
+-- | The tags to apply to the event window.
+createInstanceEventWindow_tagSpecifications :: Lens.Lens' CreateInstanceEventWindow (Prelude.Maybe [TagSpecification])
+createInstanceEventWindow_tagSpecifications = Lens.lens (\CreateInstanceEventWindow' {tagSpecifications} -> tagSpecifications) (\s@CreateInstanceEventWindow' {} a -> s {tagSpecifications = a} :: CreateInstanceEventWindow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time range for the event window. If you specify a time range, you
+-- can\'t specify a cron expression.
+createInstanceEventWindow_timeRanges :: Lens.Lens' CreateInstanceEventWindow (Prelude.Maybe [InstanceEventWindowTimeRangeRequest])
+createInstanceEventWindow_timeRanges = Lens.lens (\CreateInstanceEventWindow' {timeRanges} -> timeRanges) (\s@CreateInstanceEventWindow' {} a -> s {timeRanges = a} :: CreateInstanceEventWindow) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateInstanceEventWindow where
+  type
+    AWSResponse CreateInstanceEventWindow =
+      CreateInstanceEventWindowResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateInstanceEventWindowResponse'
+            Prelude.<$> (x Data..@? "instanceEventWindow")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateInstanceEventWindow where
+  hashWithSalt _salt CreateInstanceEventWindow' {..} =
+    _salt
+      `Prelude.hashWithSalt` cronExpression
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` timeRanges
+
+instance Prelude.NFData CreateInstanceEventWindow where
+  rnf CreateInstanceEventWindow' {..} =
+    Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf timeRanges
+
+instance Data.ToHeaders CreateInstanceEventWindow where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateInstanceEventWindow where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateInstanceEventWindow where
+  toQuery CreateInstanceEventWindow' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateInstanceEventWindow" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CronExpression" Data.=: cronExpression,
+        "DryRun" Data.=: dryRun,
+        "Name" Data.=: name,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TimeRange"
+              Prelude.<$> timeRanges
+          )
+      ]
+
+-- | /See:/ 'newCreateInstanceEventWindowResponse' smart constructor.
+data CreateInstanceEventWindowResponse = CreateInstanceEventWindowResponse'
+  { -- | Information about the event window.
+    instanceEventWindow :: Prelude.Maybe InstanceEventWindow,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInstanceEventWindowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindow', 'createInstanceEventWindowResponse_instanceEventWindow' - Information about the event window.
+--
+-- 'httpStatus', 'createInstanceEventWindowResponse_httpStatus' - The response's http status code.
+newCreateInstanceEventWindowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateInstanceEventWindowResponse
+newCreateInstanceEventWindowResponse pHttpStatus_ =
+  CreateInstanceEventWindowResponse'
+    { instanceEventWindow =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the event window.
+createInstanceEventWindowResponse_instanceEventWindow :: Lens.Lens' CreateInstanceEventWindowResponse (Prelude.Maybe InstanceEventWindow)
+createInstanceEventWindowResponse_instanceEventWindow = Lens.lens (\CreateInstanceEventWindowResponse' {instanceEventWindow} -> instanceEventWindow) (\s@CreateInstanceEventWindowResponse' {} a -> s {instanceEventWindow = a} :: CreateInstanceEventWindowResponse)
+
+-- | The response's http status code.
+createInstanceEventWindowResponse_httpStatus :: Lens.Lens' CreateInstanceEventWindowResponse Prelude.Int
+createInstanceEventWindowResponse_httpStatus = Lens.lens (\CreateInstanceEventWindowResponse' {httpStatus} -> httpStatus) (\s@CreateInstanceEventWindowResponse' {} a -> s {httpStatus = a} :: CreateInstanceEventWindowResponse)
+
+instance
+  Prelude.NFData
+    CreateInstanceEventWindowResponse
+  where
+  rnf CreateInstanceEventWindowResponse' {..} =
+    Prelude.rnf instanceEventWindow
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateInstanceExportTask.hs b/gen/Amazonka/EC2/CreateInstanceExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateInstanceExportTask.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateInstanceExportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports a running or stopped instance to an Amazon S3 bucket.
+--
+-- For information about the supported operating systems, image formats,
+-- and known limitations for the types of instances you can export, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html Exporting an instance as a VM Using VM Import\/Export>
+-- in the /VM Import\/Export User Guide/.
+module Amazonka.EC2.CreateInstanceExportTask
+  ( -- * Creating a Request
+    CreateInstanceExportTask (..),
+    newCreateInstanceExportTask,
+
+    -- * Request Lenses
+    createInstanceExportTask_description,
+    createInstanceExportTask_tagSpecifications,
+    createInstanceExportTask_exportToS3Task,
+    createInstanceExportTask_instanceId,
+    createInstanceExportTask_targetEnvironment,
+
+    -- * Destructuring the Response
+    CreateInstanceExportTaskResponse (..),
+    newCreateInstanceExportTaskResponse,
+
+    -- * Response Lenses
+    createInstanceExportTaskResponse_exportTask,
+    createInstanceExportTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateInstanceExportTask' smart constructor.
+data CreateInstanceExportTask = CreateInstanceExportTask'
+  { -- | A description for the conversion task or the resource being exported.
+    -- The maximum length is 255 characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the export instance task during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The format and location for an export instance task.
+    exportToS3Task :: ExportToS3TaskSpecification,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text,
+    -- | The target virtualization environment.
+    targetEnvironment :: ExportEnvironment
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInstanceExportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createInstanceExportTask_description' - A description for the conversion task or the resource being exported.
+-- The maximum length is 255 characters.
+--
+-- 'tagSpecifications', 'createInstanceExportTask_tagSpecifications' - The tags to apply to the export instance task during creation.
+--
+-- 'exportToS3Task', 'createInstanceExportTask_exportToS3Task' - The format and location for an export instance task.
+--
+-- 'instanceId', 'createInstanceExportTask_instanceId' - The ID of the instance.
+--
+-- 'targetEnvironment', 'createInstanceExportTask_targetEnvironment' - The target virtualization environment.
+newCreateInstanceExportTask ::
+  -- | 'exportToS3Task'
+  ExportToS3TaskSpecification ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'targetEnvironment'
+  ExportEnvironment ->
+  CreateInstanceExportTask
+newCreateInstanceExportTask
+  pExportToS3Task_
+  pInstanceId_
+  pTargetEnvironment_ =
+    CreateInstanceExportTask'
+      { description =
+          Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        exportToS3Task = pExportToS3Task_,
+        instanceId = pInstanceId_,
+        targetEnvironment = pTargetEnvironment_
+      }
+
+-- | A description for the conversion task or the resource being exported.
+-- The maximum length is 255 characters.
+createInstanceExportTask_description :: Lens.Lens' CreateInstanceExportTask (Prelude.Maybe Prelude.Text)
+createInstanceExportTask_description = Lens.lens (\CreateInstanceExportTask' {description} -> description) (\s@CreateInstanceExportTask' {} a -> s {description = a} :: CreateInstanceExportTask)
+
+-- | The tags to apply to the export instance task during creation.
+createInstanceExportTask_tagSpecifications :: Lens.Lens' CreateInstanceExportTask (Prelude.Maybe [TagSpecification])
+createInstanceExportTask_tagSpecifications = Lens.lens (\CreateInstanceExportTask' {tagSpecifications} -> tagSpecifications) (\s@CreateInstanceExportTask' {} a -> s {tagSpecifications = a} :: CreateInstanceExportTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The format and location for an export instance task.
+createInstanceExportTask_exportToS3Task :: Lens.Lens' CreateInstanceExportTask ExportToS3TaskSpecification
+createInstanceExportTask_exportToS3Task = Lens.lens (\CreateInstanceExportTask' {exportToS3Task} -> exportToS3Task) (\s@CreateInstanceExportTask' {} a -> s {exportToS3Task = a} :: CreateInstanceExportTask)
+
+-- | The ID of the instance.
+createInstanceExportTask_instanceId :: Lens.Lens' CreateInstanceExportTask Prelude.Text
+createInstanceExportTask_instanceId = Lens.lens (\CreateInstanceExportTask' {instanceId} -> instanceId) (\s@CreateInstanceExportTask' {} a -> s {instanceId = a} :: CreateInstanceExportTask)
+
+-- | The target virtualization environment.
+createInstanceExportTask_targetEnvironment :: Lens.Lens' CreateInstanceExportTask ExportEnvironment
+createInstanceExportTask_targetEnvironment = Lens.lens (\CreateInstanceExportTask' {targetEnvironment} -> targetEnvironment) (\s@CreateInstanceExportTask' {} a -> s {targetEnvironment = a} :: CreateInstanceExportTask)
+
+instance Core.AWSRequest CreateInstanceExportTask where
+  type
+    AWSResponse CreateInstanceExportTask =
+      CreateInstanceExportTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateInstanceExportTaskResponse'
+            Prelude.<$> (x Data..@? "exportTask")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateInstanceExportTask where
+  hashWithSalt _salt CreateInstanceExportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` exportToS3Task
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` targetEnvironment
+
+instance Prelude.NFData CreateInstanceExportTask where
+  rnf CreateInstanceExportTask' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf exportToS3Task
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf targetEnvironment
+
+instance Data.ToHeaders CreateInstanceExportTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateInstanceExportTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateInstanceExportTask where
+  toQuery CreateInstanceExportTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateInstanceExportTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "ExportToS3" Data.=: exportToS3Task,
+        "InstanceId" Data.=: instanceId,
+        "TargetEnvironment" Data.=: targetEnvironment
+      ]
+
+-- | /See:/ 'newCreateInstanceExportTaskResponse' smart constructor.
+data CreateInstanceExportTaskResponse = CreateInstanceExportTaskResponse'
+  { -- | Information about the export instance task.
+    exportTask :: Prelude.Maybe ExportTask,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInstanceExportTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportTask', 'createInstanceExportTaskResponse_exportTask' - Information about the export instance task.
+--
+-- 'httpStatus', 'createInstanceExportTaskResponse_httpStatus' - The response's http status code.
+newCreateInstanceExportTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateInstanceExportTaskResponse
+newCreateInstanceExportTaskResponse pHttpStatus_ =
+  CreateInstanceExportTaskResponse'
+    { exportTask =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the export instance task.
+createInstanceExportTaskResponse_exportTask :: Lens.Lens' CreateInstanceExportTaskResponse (Prelude.Maybe ExportTask)
+createInstanceExportTaskResponse_exportTask = Lens.lens (\CreateInstanceExportTaskResponse' {exportTask} -> exportTask) (\s@CreateInstanceExportTaskResponse' {} a -> s {exportTask = a} :: CreateInstanceExportTaskResponse)
+
+-- | The response's http status code.
+createInstanceExportTaskResponse_httpStatus :: Lens.Lens' CreateInstanceExportTaskResponse Prelude.Int
+createInstanceExportTaskResponse_httpStatus = Lens.lens (\CreateInstanceExportTaskResponse' {httpStatus} -> httpStatus) (\s@CreateInstanceExportTaskResponse' {} a -> s {httpStatus = a} :: CreateInstanceExportTaskResponse)
+
+instance
+  Prelude.NFData
+    CreateInstanceExportTaskResponse
+  where
+  rnf CreateInstanceExportTaskResponse' {..} =
+    Prelude.rnf exportTask
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateInternetGateway.hs b/gen/Amazonka/EC2/CreateInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateInternetGateway.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an internet gateway for use with a VPC. After creating the
+-- internet gateway, you attach it to a VPC using AttachInternetGateway.
+--
+-- For more information about your VPC and internet gateway, see the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/ Amazon Virtual Private Cloud User Guide>.
+module Amazonka.EC2.CreateInternetGateway
+  ( -- * Creating a Request
+    CreateInternetGateway (..),
+    newCreateInternetGateway,
+
+    -- * Request Lenses
+    createInternetGateway_dryRun,
+    createInternetGateway_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateInternetGatewayResponse (..),
+    newCreateInternetGatewayResponse,
+
+    -- * Response Lenses
+    createInternetGatewayResponse_internetGateway,
+    createInternetGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateInternetGateway' smart constructor.
+data CreateInternetGateway = CreateInternetGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the internet gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createInternetGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createInternetGateway_tagSpecifications' - The tags to assign to the internet gateway.
+newCreateInternetGateway ::
+  CreateInternetGateway
+newCreateInternetGateway =
+  CreateInternetGateway'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createInternetGateway_dryRun :: Lens.Lens' CreateInternetGateway (Prelude.Maybe Prelude.Bool)
+createInternetGateway_dryRun = Lens.lens (\CreateInternetGateway' {dryRun} -> dryRun) (\s@CreateInternetGateway' {} a -> s {dryRun = a} :: CreateInternetGateway)
+
+-- | The tags to assign to the internet gateway.
+createInternetGateway_tagSpecifications :: Lens.Lens' CreateInternetGateway (Prelude.Maybe [TagSpecification])
+createInternetGateway_tagSpecifications = Lens.lens (\CreateInternetGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateInternetGateway' {} a -> s {tagSpecifications = a} :: CreateInternetGateway) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateInternetGateway where
+  type
+    AWSResponse CreateInternetGateway =
+      CreateInternetGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateInternetGatewayResponse'
+            Prelude.<$> (x Data..@? "internetGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateInternetGateway where
+  hashWithSalt _salt CreateInternetGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateInternetGateway where
+  rnf CreateInternetGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateInternetGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateInternetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateInternetGateway where
+  toQuery CreateInternetGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateInternetGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateInternetGatewayResponse' smart constructor.
+data CreateInternetGatewayResponse = CreateInternetGatewayResponse'
+  { -- | Information about the internet gateway.
+    internetGateway :: Prelude.Maybe InternetGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateInternetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'internetGateway', 'createInternetGatewayResponse_internetGateway' - Information about the internet gateway.
+--
+-- 'httpStatus', 'createInternetGatewayResponse_httpStatus' - The response's http status code.
+newCreateInternetGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateInternetGatewayResponse
+newCreateInternetGatewayResponse pHttpStatus_ =
+  CreateInternetGatewayResponse'
+    { internetGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the internet gateway.
+createInternetGatewayResponse_internetGateway :: Lens.Lens' CreateInternetGatewayResponse (Prelude.Maybe InternetGateway)
+createInternetGatewayResponse_internetGateway = Lens.lens (\CreateInternetGatewayResponse' {internetGateway} -> internetGateway) (\s@CreateInternetGatewayResponse' {} a -> s {internetGateway = a} :: CreateInternetGatewayResponse)
+
+-- | The response's http status code.
+createInternetGatewayResponse_httpStatus :: Lens.Lens' CreateInternetGatewayResponse Prelude.Int
+createInternetGatewayResponse_httpStatus = Lens.lens (\CreateInternetGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateInternetGatewayResponse' {} a -> s {httpStatus = a} :: CreateInternetGatewayResponse)
+
+instance Prelude.NFData CreateInternetGatewayResponse where
+  rnf CreateInternetGatewayResponse' {..} =
+    Prelude.rnf internetGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateIpam.hs b/gen/Amazonka/EC2/CreateIpam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateIpam.hs
@@ -0,0 +1,269 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateIpam
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an IPAM. Amazon VPC IP Address Manager (IPAM) is a VPC feature
+-- that you can use to automate your IP address management workflows
+-- including assigning, tracking, troubleshooting, and auditing IP
+-- addresses across Amazon Web Services Regions and accounts throughout
+-- your Amazon Web Services Organization.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.CreateIpam
+  ( -- * Creating a Request
+    CreateIpam (..),
+    newCreateIpam,
+
+    -- * Request Lenses
+    createIpam_clientToken,
+    createIpam_description,
+    createIpam_dryRun,
+    createIpam_operatingRegions,
+    createIpam_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateIpamResponse (..),
+    newCreateIpamResponse,
+
+    -- * Response Lenses
+    createIpamResponse_ipam,
+    createIpamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateIpam' smart constructor.
+data CreateIpam = CreateIpam'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the IPAM.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The operating Regions for the IPAM. Operating Regions are Amazon Web
+    -- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+    -- IPAM only discovers and monitors resources in the Amazon Web Services
+    -- Regions you select as operating Regions.
+    --
+    -- For more information about operating Regions, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+    -- in the /Amazon VPC IPAM User Guide/.
+    operatingRegions :: Prelude.Maybe [AddIpamOperatingRegion],
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpam' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createIpam_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createIpam_description' - A description for the IPAM.
+--
+-- 'dryRun', 'createIpam_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'operatingRegions', 'createIpam_operatingRegions' - The operating Regions for the IPAM. Operating Regions are Amazon Web
+-- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+-- IPAM only discovers and monitors resources in the Amazon Web Services
+-- Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'tagSpecifications', 'createIpam_tagSpecifications' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+newCreateIpam ::
+  CreateIpam
+newCreateIpam =
+  CreateIpam'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      operatingRegions = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createIpam_clientToken :: Lens.Lens' CreateIpam (Prelude.Maybe Prelude.Text)
+createIpam_clientToken = Lens.lens (\CreateIpam' {clientToken} -> clientToken) (\s@CreateIpam' {} a -> s {clientToken = a} :: CreateIpam)
+
+-- | A description for the IPAM.
+createIpam_description :: Lens.Lens' CreateIpam (Prelude.Maybe Prelude.Text)
+createIpam_description = Lens.lens (\CreateIpam' {description} -> description) (\s@CreateIpam' {} a -> s {description = a} :: CreateIpam)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+createIpam_dryRun :: Lens.Lens' CreateIpam (Prelude.Maybe Prelude.Bool)
+createIpam_dryRun = Lens.lens (\CreateIpam' {dryRun} -> dryRun) (\s@CreateIpam' {} a -> s {dryRun = a} :: CreateIpam)
+
+-- | The operating Regions for the IPAM. Operating Regions are Amazon Web
+-- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+-- IPAM only discovers and monitors resources in the Amazon Web Services
+-- Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+createIpam_operatingRegions :: Lens.Lens' CreateIpam (Prelude.Maybe [AddIpamOperatingRegion])
+createIpam_operatingRegions = Lens.lens (\CreateIpam' {operatingRegions} -> operatingRegions) (\s@CreateIpam' {} a -> s {operatingRegions = a} :: CreateIpam) Prelude.. Lens.mapping Lens.coerced
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+createIpam_tagSpecifications :: Lens.Lens' CreateIpam (Prelude.Maybe [TagSpecification])
+createIpam_tagSpecifications = Lens.lens (\CreateIpam' {tagSpecifications} -> tagSpecifications) (\s@CreateIpam' {} a -> s {tagSpecifications = a} :: CreateIpam) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateIpam where
+  type AWSResponse CreateIpam = CreateIpamResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateIpamResponse'
+            Prelude.<$> (x Data..@? "ipam")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIpam where
+  hashWithSalt _salt CreateIpam' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` operatingRegions
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateIpam where
+  rnf CreateIpam' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf operatingRegions
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateIpam where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateIpam where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateIpam where
+  toQuery CreateIpam' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateIpam" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "OperatingRegion"
+              Prelude.<$> operatingRegions
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateIpamResponse' smart constructor.
+data CreateIpamResponse = CreateIpamResponse'
+  { -- | Information about the IPAM created.
+    ipam :: Prelude.Maybe Ipam,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipam', 'createIpamResponse_ipam' - Information about the IPAM created.
+--
+-- 'httpStatus', 'createIpamResponse_httpStatus' - The response's http status code.
+newCreateIpamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIpamResponse
+newCreateIpamResponse pHttpStatus_ =
+  CreateIpamResponse'
+    { ipam = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPAM created.
+createIpamResponse_ipam :: Lens.Lens' CreateIpamResponse (Prelude.Maybe Ipam)
+createIpamResponse_ipam = Lens.lens (\CreateIpamResponse' {ipam} -> ipam) (\s@CreateIpamResponse' {} a -> s {ipam = a} :: CreateIpamResponse)
+
+-- | The response's http status code.
+createIpamResponse_httpStatus :: Lens.Lens' CreateIpamResponse Prelude.Int
+createIpamResponse_httpStatus = Lens.lens (\CreateIpamResponse' {httpStatus} -> httpStatus) (\s@CreateIpamResponse' {} a -> s {httpStatus = a} :: CreateIpamResponse)
+
+instance Prelude.NFData CreateIpamResponse where
+  rnf CreateIpamResponse' {..} =
+    Prelude.rnf ipam
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateIpamPool.hs b/gen/Amazonka/EC2/CreateIpamPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateIpamPool.hs
@@ -0,0 +1,503 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateIpamPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an IP address pool for Amazon VPC IP Address Manager (IPAM). In
+-- IPAM, a pool is a collection of contiguous IP addresses CIDRs. Pools
+-- enable you to organize your IP addresses according to your routing and
+-- security needs. For example, if you have separate routing and security
+-- needs for development and production applications, you can create a pool
+-- for each.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html Create a top-level pool>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.CreateIpamPool
+  ( -- * Creating a Request
+    CreateIpamPool (..),
+    newCreateIpamPool,
+
+    -- * Request Lenses
+    createIpamPool_allocationDefaultNetmaskLength,
+    createIpamPool_allocationMaxNetmaskLength,
+    createIpamPool_allocationMinNetmaskLength,
+    createIpamPool_allocationResourceTags,
+    createIpamPool_autoImport,
+    createIpamPool_awsService,
+    createIpamPool_clientToken,
+    createIpamPool_description,
+    createIpamPool_dryRun,
+    createIpamPool_locale,
+    createIpamPool_publiclyAdvertisable,
+    createIpamPool_sourceIpamPoolId,
+    createIpamPool_tagSpecifications,
+    createIpamPool_ipamScopeId,
+    createIpamPool_addressFamily,
+
+    -- * Destructuring the Response
+    CreateIpamPoolResponse (..),
+    newCreateIpamPoolResponse,
+
+    -- * Response Lenses
+    createIpamPoolResponse_ipamPool,
+    createIpamPoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateIpamPool' smart constructor.
+data CreateIpamPool = CreateIpamPool'
+  { -- | The default netmask length for allocations added to this pool. If, for
+    -- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+    -- here, new allocations will default to 10.0.0.0\/16.
+    allocationDefaultNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum netmask length possible for CIDR allocations in this IPAM
+    -- pool to be compliant. The maximum netmask length must be greater than
+    -- the minimum netmask length. Possible netmask lengths for IPv4 addresses
+    -- are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+    allocationMaxNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum netmask length required for CIDR allocations in this IPAM
+    -- pool to be compliant. The minimum netmask length must be less than the
+    -- maximum netmask length. Possible netmask lengths for IPv4 addresses are
+    -- 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+    allocationMinNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | Tags that are required for resources that use CIDRs from this IPAM pool.
+    -- Resources that do not have these tags will not be allowed to allocate
+    -- space from the pool. If the resources have their tags changed after they
+    -- have allocated space or if the allocation tagging requirements are
+    -- changed on the pool, the resource may be marked as noncompliant.
+    allocationResourceTags :: Prelude.Maybe [RequestIpamResourceTag],
+    -- | If selected, IPAM will continuously look for resources within the CIDR
+    -- range of this pool and automatically import them as allocations into
+    -- your IPAM. The CIDRs that will be allocated for these resources must not
+    -- already be allocated to other resources in order for the import to
+    -- succeed. IPAM will import a CIDR regardless of its compliance with the
+    -- pool\'s allocation rules, so a resource might be imported and
+    -- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+    -- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+    -- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+    -- them only.
+    --
+    -- A locale must be set on the pool for this feature to work.
+    autoImport :: Prelude.Maybe Prelude.Bool,
+    -- | Limits which service in Amazon Web Services that the pool can be used
+    -- in. \"ec2\", for example, allows users to use space for Elastic IP
+    -- addresses and VPCs.
+    awsService :: Prelude.Maybe IpamPoolAwsService,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the IPAM pool.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | In IPAM, the locale is the Amazon Web Services Region where you want to
+    -- make an IPAM pool available for allocations. Only resources in the same
+    -- Region as the locale of the pool can get IP address allocations from the
+    -- pool. You can only allocate a CIDR for a VPC, for example, from an IPAM
+    -- pool that shares a locale with the VPC’s Region. Note that once you
+    -- choose a Locale for a pool, you cannot modify it. If you do not choose a
+    -- locale, resources in Regions others than the IPAM\'s home region cannot
+    -- use CIDRs from this pool.
+    --
+    -- Possible values: Any Amazon Web Services Region, such as us-east-1.
+    locale :: Prelude.Maybe Prelude.Text,
+    -- | Determines if the pool is publicly advertisable. This option is not
+    -- available for pools with AddressFamily set to @ipv4@.
+    publiclyAdvertisable :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the source IPAM pool. Use this option to create a pool within
+    -- an existing pool. Note that the CIDR you provision for the pool within
+    -- the source pool must be available in the source pool\'s CIDR range.
+    sourceIpamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the scope in which you would like to create the IPAM pool.
+    ipamScopeId :: Prelude.Text,
+    -- | The IP protocol assigned to this IPAM pool. You must choose either IPv4
+    -- or IPv6 protocol for a pool.
+    addressFamily :: AddressFamily
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpamPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationDefaultNetmaskLength', 'createIpamPool_allocationDefaultNetmaskLength' - The default netmask length for allocations added to this pool. If, for
+-- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+-- here, new allocations will default to 10.0.0.0\/16.
+--
+-- 'allocationMaxNetmaskLength', 'createIpamPool_allocationMaxNetmaskLength' - The maximum netmask length possible for CIDR allocations in this IPAM
+-- pool to be compliant. The maximum netmask length must be greater than
+-- the minimum netmask length. Possible netmask lengths for IPv4 addresses
+-- are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+--
+-- 'allocationMinNetmaskLength', 'createIpamPool_allocationMinNetmaskLength' - The minimum netmask length required for CIDR allocations in this IPAM
+-- pool to be compliant. The minimum netmask length must be less than the
+-- maximum netmask length. Possible netmask lengths for IPv4 addresses are
+-- 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+--
+-- 'allocationResourceTags', 'createIpamPool_allocationResourceTags' - Tags that are required for resources that use CIDRs from this IPAM pool.
+-- Resources that do not have these tags will not be allowed to allocate
+-- space from the pool. If the resources have their tags changed after they
+-- have allocated space or if the allocation tagging requirements are
+-- changed on the pool, the resource may be marked as noncompliant.
+--
+-- 'autoImport', 'createIpamPool_autoImport' - If selected, IPAM will continuously look for resources within the CIDR
+-- range of this pool and automatically import them as allocations into
+-- your IPAM. The CIDRs that will be allocated for these resources must not
+-- already be allocated to other resources in order for the import to
+-- succeed. IPAM will import a CIDR regardless of its compliance with the
+-- pool\'s allocation rules, so a resource might be imported and
+-- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+-- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+-- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+-- them only.
+--
+-- A locale must be set on the pool for this feature to work.
+--
+-- 'awsService', 'createIpamPool_awsService' - Limits which service in Amazon Web Services that the pool can be used
+-- in. \"ec2\", for example, allows users to use space for Elastic IP
+-- addresses and VPCs.
+--
+-- 'clientToken', 'createIpamPool_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createIpamPool_description' - A description for the IPAM pool.
+--
+-- 'dryRun', 'createIpamPool_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'locale', 'createIpamPool_locale' - In IPAM, the locale is the Amazon Web Services Region where you want to
+-- make an IPAM pool available for allocations. Only resources in the same
+-- Region as the locale of the pool can get IP address allocations from the
+-- pool. You can only allocate a CIDR for a VPC, for example, from an IPAM
+-- pool that shares a locale with the VPC’s Region. Note that once you
+-- choose a Locale for a pool, you cannot modify it. If you do not choose a
+-- locale, resources in Regions others than the IPAM\'s home region cannot
+-- use CIDRs from this pool.
+--
+-- Possible values: Any Amazon Web Services Region, such as us-east-1.
+--
+-- 'publiclyAdvertisable', 'createIpamPool_publiclyAdvertisable' - Determines if the pool is publicly advertisable. This option is not
+-- available for pools with AddressFamily set to @ipv4@.
+--
+-- 'sourceIpamPoolId', 'createIpamPool_sourceIpamPoolId' - The ID of the source IPAM pool. Use this option to create a pool within
+-- an existing pool. Note that the CIDR you provision for the pool within
+-- the source pool must be available in the source pool\'s CIDR range.
+--
+-- 'tagSpecifications', 'createIpamPool_tagSpecifications' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+--
+-- 'ipamScopeId', 'createIpamPool_ipamScopeId' - The ID of the scope in which you would like to create the IPAM pool.
+--
+-- 'addressFamily', 'createIpamPool_addressFamily' - The IP protocol assigned to this IPAM pool. You must choose either IPv4
+-- or IPv6 protocol for a pool.
+newCreateIpamPool ::
+  -- | 'ipamScopeId'
+  Prelude.Text ->
+  -- | 'addressFamily'
+  AddressFamily ->
+  CreateIpamPool
+newCreateIpamPool pIpamScopeId_ pAddressFamily_ =
+  CreateIpamPool'
+    { allocationDefaultNetmaskLength =
+        Prelude.Nothing,
+      allocationMaxNetmaskLength = Prelude.Nothing,
+      allocationMinNetmaskLength = Prelude.Nothing,
+      allocationResourceTags = Prelude.Nothing,
+      autoImport = Prelude.Nothing,
+      awsService = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      locale = Prelude.Nothing,
+      publiclyAdvertisable = Prelude.Nothing,
+      sourceIpamPoolId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      ipamScopeId = pIpamScopeId_,
+      addressFamily = pAddressFamily_
+    }
+
+-- | The default netmask length for allocations added to this pool. If, for
+-- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+-- here, new allocations will default to 10.0.0.0\/16.
+createIpamPool_allocationDefaultNetmaskLength :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Natural)
+createIpamPool_allocationDefaultNetmaskLength = Lens.lens (\CreateIpamPool' {allocationDefaultNetmaskLength} -> allocationDefaultNetmaskLength) (\s@CreateIpamPool' {} a -> s {allocationDefaultNetmaskLength = a} :: CreateIpamPool)
+
+-- | The maximum netmask length possible for CIDR allocations in this IPAM
+-- pool to be compliant. The maximum netmask length must be greater than
+-- the minimum netmask length. Possible netmask lengths for IPv4 addresses
+-- are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+createIpamPool_allocationMaxNetmaskLength :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Natural)
+createIpamPool_allocationMaxNetmaskLength = Lens.lens (\CreateIpamPool' {allocationMaxNetmaskLength} -> allocationMaxNetmaskLength) (\s@CreateIpamPool' {} a -> s {allocationMaxNetmaskLength = a} :: CreateIpamPool)
+
+-- | The minimum netmask length required for CIDR allocations in this IPAM
+-- pool to be compliant. The minimum netmask length must be less than the
+-- maximum netmask length. Possible netmask lengths for IPv4 addresses are
+-- 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+createIpamPool_allocationMinNetmaskLength :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Natural)
+createIpamPool_allocationMinNetmaskLength = Lens.lens (\CreateIpamPool' {allocationMinNetmaskLength} -> allocationMinNetmaskLength) (\s@CreateIpamPool' {} a -> s {allocationMinNetmaskLength = a} :: CreateIpamPool)
+
+-- | Tags that are required for resources that use CIDRs from this IPAM pool.
+-- Resources that do not have these tags will not be allowed to allocate
+-- space from the pool. If the resources have their tags changed after they
+-- have allocated space or if the allocation tagging requirements are
+-- changed on the pool, the resource may be marked as noncompliant.
+createIpamPool_allocationResourceTags :: Lens.Lens' CreateIpamPool (Prelude.Maybe [RequestIpamResourceTag])
+createIpamPool_allocationResourceTags = Lens.lens (\CreateIpamPool' {allocationResourceTags} -> allocationResourceTags) (\s@CreateIpamPool' {} a -> s {allocationResourceTags = a} :: CreateIpamPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | If selected, IPAM will continuously look for resources within the CIDR
+-- range of this pool and automatically import them as allocations into
+-- your IPAM. The CIDRs that will be allocated for these resources must not
+-- already be allocated to other resources in order for the import to
+-- succeed. IPAM will import a CIDR regardless of its compliance with the
+-- pool\'s allocation rules, so a resource might be imported and
+-- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+-- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+-- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+-- them only.
+--
+-- A locale must be set on the pool for this feature to work.
+createIpamPool_autoImport :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Bool)
+createIpamPool_autoImport = Lens.lens (\CreateIpamPool' {autoImport} -> autoImport) (\s@CreateIpamPool' {} a -> s {autoImport = a} :: CreateIpamPool)
+
+-- | Limits which service in Amazon Web Services that the pool can be used
+-- in. \"ec2\", for example, allows users to use space for Elastic IP
+-- addresses and VPCs.
+createIpamPool_awsService :: Lens.Lens' CreateIpamPool (Prelude.Maybe IpamPoolAwsService)
+createIpamPool_awsService = Lens.lens (\CreateIpamPool' {awsService} -> awsService) (\s@CreateIpamPool' {} a -> s {awsService = a} :: CreateIpamPool)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createIpamPool_clientToken :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Text)
+createIpamPool_clientToken = Lens.lens (\CreateIpamPool' {clientToken} -> clientToken) (\s@CreateIpamPool' {} a -> s {clientToken = a} :: CreateIpamPool)
+
+-- | A description for the IPAM pool.
+createIpamPool_description :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Text)
+createIpamPool_description = Lens.lens (\CreateIpamPool' {description} -> description) (\s@CreateIpamPool' {} a -> s {description = a} :: CreateIpamPool)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+createIpamPool_dryRun :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Bool)
+createIpamPool_dryRun = Lens.lens (\CreateIpamPool' {dryRun} -> dryRun) (\s@CreateIpamPool' {} a -> s {dryRun = a} :: CreateIpamPool)
+
+-- | In IPAM, the locale is the Amazon Web Services Region where you want to
+-- make an IPAM pool available for allocations. Only resources in the same
+-- Region as the locale of the pool can get IP address allocations from the
+-- pool. You can only allocate a CIDR for a VPC, for example, from an IPAM
+-- pool that shares a locale with the VPC’s Region. Note that once you
+-- choose a Locale for a pool, you cannot modify it. If you do not choose a
+-- locale, resources in Regions others than the IPAM\'s home region cannot
+-- use CIDRs from this pool.
+--
+-- Possible values: Any Amazon Web Services Region, such as us-east-1.
+createIpamPool_locale :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Text)
+createIpamPool_locale = Lens.lens (\CreateIpamPool' {locale} -> locale) (\s@CreateIpamPool' {} a -> s {locale = a} :: CreateIpamPool)
+
+-- | Determines if the pool is publicly advertisable. This option is not
+-- available for pools with AddressFamily set to @ipv4@.
+createIpamPool_publiclyAdvertisable :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Bool)
+createIpamPool_publiclyAdvertisable = Lens.lens (\CreateIpamPool' {publiclyAdvertisable} -> publiclyAdvertisable) (\s@CreateIpamPool' {} a -> s {publiclyAdvertisable = a} :: CreateIpamPool)
+
+-- | The ID of the source IPAM pool. Use this option to create a pool within
+-- an existing pool. Note that the CIDR you provision for the pool within
+-- the source pool must be available in the source pool\'s CIDR range.
+createIpamPool_sourceIpamPoolId :: Lens.Lens' CreateIpamPool (Prelude.Maybe Prelude.Text)
+createIpamPool_sourceIpamPoolId = Lens.lens (\CreateIpamPool' {sourceIpamPoolId} -> sourceIpamPoolId) (\s@CreateIpamPool' {} a -> s {sourceIpamPoolId = a} :: CreateIpamPool)
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+createIpamPool_tagSpecifications :: Lens.Lens' CreateIpamPool (Prelude.Maybe [TagSpecification])
+createIpamPool_tagSpecifications = Lens.lens (\CreateIpamPool' {tagSpecifications} -> tagSpecifications) (\s@CreateIpamPool' {} a -> s {tagSpecifications = a} :: CreateIpamPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the scope in which you would like to create the IPAM pool.
+createIpamPool_ipamScopeId :: Lens.Lens' CreateIpamPool Prelude.Text
+createIpamPool_ipamScopeId = Lens.lens (\CreateIpamPool' {ipamScopeId} -> ipamScopeId) (\s@CreateIpamPool' {} a -> s {ipamScopeId = a} :: CreateIpamPool)
+
+-- | The IP protocol assigned to this IPAM pool. You must choose either IPv4
+-- or IPv6 protocol for a pool.
+createIpamPool_addressFamily :: Lens.Lens' CreateIpamPool AddressFamily
+createIpamPool_addressFamily = Lens.lens (\CreateIpamPool' {addressFamily} -> addressFamily) (\s@CreateIpamPool' {} a -> s {addressFamily = a} :: CreateIpamPool)
+
+instance Core.AWSRequest CreateIpamPool where
+  type
+    AWSResponse CreateIpamPool =
+      CreateIpamPoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateIpamPoolResponse'
+            Prelude.<$> (x Data..@? "ipamPool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIpamPool where
+  hashWithSalt _salt CreateIpamPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationDefaultNetmaskLength
+      `Prelude.hashWithSalt` allocationMaxNetmaskLength
+      `Prelude.hashWithSalt` allocationMinNetmaskLength
+      `Prelude.hashWithSalt` allocationResourceTags
+      `Prelude.hashWithSalt` autoImport
+      `Prelude.hashWithSalt` awsService
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` publiclyAdvertisable
+      `Prelude.hashWithSalt` sourceIpamPoolId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` ipamScopeId
+      `Prelude.hashWithSalt` addressFamily
+
+instance Prelude.NFData CreateIpamPool where
+  rnf CreateIpamPool' {..} =
+    Prelude.rnf allocationDefaultNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationMaxNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationMinNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationResourceTags
+      `Prelude.seq` Prelude.rnf autoImport
+      `Prelude.seq` Prelude.rnf awsService
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf publiclyAdvertisable
+      `Prelude.seq` Prelude.rnf sourceIpamPoolId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf ipamScopeId
+      `Prelude.seq` Prelude.rnf addressFamily
+
+instance Data.ToHeaders CreateIpamPool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateIpamPool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateIpamPool where
+  toQuery CreateIpamPool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateIpamPool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllocationDefaultNetmaskLength"
+          Data.=: allocationDefaultNetmaskLength,
+        "AllocationMaxNetmaskLength"
+          Data.=: allocationMaxNetmaskLength,
+        "AllocationMinNetmaskLength"
+          Data.=: allocationMinNetmaskLength,
+        Data.toQuery
+          ( Data.toQueryList "AllocationResourceTag"
+              Prelude.<$> allocationResourceTags
+          ),
+        "AutoImport" Data.=: autoImport,
+        "AwsService" Data.=: awsService,
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "Locale" Data.=: locale,
+        "PubliclyAdvertisable" Data.=: publiclyAdvertisable,
+        "SourceIpamPoolId" Data.=: sourceIpamPoolId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "IpamScopeId" Data.=: ipamScopeId,
+        "AddressFamily" Data.=: addressFamily
+      ]
+
+-- | /See:/ 'newCreateIpamPoolResponse' smart constructor.
+data CreateIpamPoolResponse = CreateIpamPoolResponse'
+  { -- | Information about the IPAM pool created.
+    ipamPool :: Prelude.Maybe IpamPool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpamPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPool', 'createIpamPoolResponse_ipamPool' - Information about the IPAM pool created.
+--
+-- 'httpStatus', 'createIpamPoolResponse_httpStatus' - The response's http status code.
+newCreateIpamPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIpamPoolResponse
+newCreateIpamPoolResponse pHttpStatus_ =
+  CreateIpamPoolResponse'
+    { ipamPool = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPAM pool created.
+createIpamPoolResponse_ipamPool :: Lens.Lens' CreateIpamPoolResponse (Prelude.Maybe IpamPool)
+createIpamPoolResponse_ipamPool = Lens.lens (\CreateIpamPoolResponse' {ipamPool} -> ipamPool) (\s@CreateIpamPoolResponse' {} a -> s {ipamPool = a} :: CreateIpamPoolResponse)
+
+-- | The response's http status code.
+createIpamPoolResponse_httpStatus :: Lens.Lens' CreateIpamPoolResponse Prelude.Int
+createIpamPoolResponse_httpStatus = Lens.lens (\CreateIpamPoolResponse' {httpStatus} -> httpStatus) (\s@CreateIpamPoolResponse' {} a -> s {httpStatus = a} :: CreateIpamPoolResponse)
+
+instance Prelude.NFData CreateIpamPoolResponse where
+  rnf CreateIpamPoolResponse' {..} =
+    Prelude.rnf ipamPool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateIpamScope.hs b/gen/Amazonka/EC2/CreateIpamScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateIpamScope.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateIpamScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create an IPAM scope. In IPAM, a scope is the highest-level container
+-- within IPAM. An IPAM contains two default scopes. Each scope represents
+-- the IP space for a single network. The private scope is intended for all
+-- private IP address space. The public scope is intended for all public IP
+-- address space. Scopes enable you to reuse IP addresses across multiple
+-- unconnected networks without causing IP address overlap or conflict.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/add-scope-ipam.html Add a scope>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.CreateIpamScope
+  ( -- * Creating a Request
+    CreateIpamScope (..),
+    newCreateIpamScope,
+
+    -- * Request Lenses
+    createIpamScope_clientToken,
+    createIpamScope_description,
+    createIpamScope_dryRun,
+    createIpamScope_tagSpecifications,
+    createIpamScope_ipamId,
+
+    -- * Destructuring the Response
+    CreateIpamScopeResponse (..),
+    newCreateIpamScopeResponse,
+
+    -- * Response Lenses
+    createIpamScopeResponse_ipamScope,
+    createIpamScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateIpamScope' smart constructor.
+data CreateIpamScope = CreateIpamScope'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the scope you\'re creating.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the IPAM for which you\'re creating this scope.
+    ipamId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpamScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createIpamScope_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createIpamScope_description' - A description for the scope you\'re creating.
+--
+-- 'dryRun', 'createIpamScope_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createIpamScope_tagSpecifications' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+--
+-- 'ipamId', 'createIpamScope_ipamId' - The ID of the IPAM for which you\'re creating this scope.
+newCreateIpamScope ::
+  -- | 'ipamId'
+  Prelude.Text ->
+  CreateIpamScope
+newCreateIpamScope pIpamId_ =
+  CreateIpamScope'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      ipamId = pIpamId_
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createIpamScope_clientToken :: Lens.Lens' CreateIpamScope (Prelude.Maybe Prelude.Text)
+createIpamScope_clientToken = Lens.lens (\CreateIpamScope' {clientToken} -> clientToken) (\s@CreateIpamScope' {} a -> s {clientToken = a} :: CreateIpamScope)
+
+-- | A description for the scope you\'re creating.
+createIpamScope_description :: Lens.Lens' CreateIpamScope (Prelude.Maybe Prelude.Text)
+createIpamScope_description = Lens.lens (\CreateIpamScope' {description} -> description) (\s@CreateIpamScope' {} a -> s {description = a} :: CreateIpamScope)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+createIpamScope_dryRun :: Lens.Lens' CreateIpamScope (Prelude.Maybe Prelude.Bool)
+createIpamScope_dryRun = Lens.lens (\CreateIpamScope' {dryRun} -> dryRun) (\s@CreateIpamScope' {} a -> s {dryRun = a} :: CreateIpamScope)
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+createIpamScope_tagSpecifications :: Lens.Lens' CreateIpamScope (Prelude.Maybe [TagSpecification])
+createIpamScope_tagSpecifications = Lens.lens (\CreateIpamScope' {tagSpecifications} -> tagSpecifications) (\s@CreateIpamScope' {} a -> s {tagSpecifications = a} :: CreateIpamScope) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the IPAM for which you\'re creating this scope.
+createIpamScope_ipamId :: Lens.Lens' CreateIpamScope Prelude.Text
+createIpamScope_ipamId = Lens.lens (\CreateIpamScope' {ipamId} -> ipamId) (\s@CreateIpamScope' {} a -> s {ipamId = a} :: CreateIpamScope)
+
+instance Core.AWSRequest CreateIpamScope where
+  type
+    AWSResponse CreateIpamScope =
+      CreateIpamScopeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateIpamScopeResponse'
+            Prelude.<$> (x Data..@? "ipamScope")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateIpamScope where
+  hashWithSalt _salt CreateIpamScope' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` ipamId
+
+instance Prelude.NFData CreateIpamScope where
+  rnf CreateIpamScope' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf ipamId
+
+instance Data.ToHeaders CreateIpamScope where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateIpamScope where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateIpamScope where
+  toQuery CreateIpamScope' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateIpamScope" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "IpamId" Data.=: ipamId
+      ]
+
+-- | /See:/ 'newCreateIpamScopeResponse' smart constructor.
+data CreateIpamScopeResponse = CreateIpamScopeResponse'
+  { -- | Information about the created scope.
+    ipamScope :: Prelude.Maybe IpamScope,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateIpamScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamScope', 'createIpamScopeResponse_ipamScope' - Information about the created scope.
+--
+-- 'httpStatus', 'createIpamScopeResponse_httpStatus' - The response's http status code.
+newCreateIpamScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateIpamScopeResponse
+newCreateIpamScopeResponse pHttpStatus_ =
+  CreateIpamScopeResponse'
+    { ipamScope =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the created scope.
+createIpamScopeResponse_ipamScope :: Lens.Lens' CreateIpamScopeResponse (Prelude.Maybe IpamScope)
+createIpamScopeResponse_ipamScope = Lens.lens (\CreateIpamScopeResponse' {ipamScope} -> ipamScope) (\s@CreateIpamScopeResponse' {} a -> s {ipamScope = a} :: CreateIpamScopeResponse)
+
+-- | The response's http status code.
+createIpamScopeResponse_httpStatus :: Lens.Lens' CreateIpamScopeResponse Prelude.Int
+createIpamScopeResponse_httpStatus = Lens.lens (\CreateIpamScopeResponse' {httpStatus} -> httpStatus) (\s@CreateIpamScopeResponse' {} a -> s {httpStatus = a} :: CreateIpamScopeResponse)
+
+instance Prelude.NFData CreateIpamScopeResponse where
+  rnf CreateIpamScopeResponse' {..} =
+    Prelude.rnf ipamScope
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateKeyPair.hs b/gen/Amazonka/EC2/CreateKeyPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateKeyPair.hs
@@ -0,0 +1,339 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateKeyPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an ED25519 or 2048-bit RSA key pair with the specified name and
+-- in the specified PEM or PPK format. Amazon EC2 stores the public key and
+-- displays the private key for you to save to a file. The private key is
+-- returned as an unencrypted PEM encoded PKCS#1 private key or an
+-- unencrypted PPK formatted private key for use with PuTTY. If a key with
+-- the specified name already exists, Amazon EC2 returns an error.
+--
+-- The key pair returned to you is available only in the Amazon Web
+-- Services Region in which you create it. If you prefer, you can create
+-- your own key pair using a third-party tool and upload it to any Region
+-- using ImportKeyPair.
+--
+-- You can have up to 5,000 key pairs per Amazon Web Services Region.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 key pairs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateKeyPair
+  ( -- * Creating a Request
+    CreateKeyPair (..),
+    newCreateKeyPair,
+
+    -- * Request Lenses
+    createKeyPair_dryRun,
+    createKeyPair_keyFormat,
+    createKeyPair_keyType,
+    createKeyPair_tagSpecifications,
+    createKeyPair_keyName,
+
+    -- * Destructuring the Response
+    CreateKeyPairResponse (..),
+    newCreateKeyPairResponse,
+
+    -- * Response Lenses
+    createKeyPairResponse_keyPairId,
+    createKeyPairResponse_tags,
+    createKeyPairResponse_httpStatus,
+    createKeyPairResponse_keyName,
+    createKeyPairResponse_keyFingerprint,
+    createKeyPairResponse_keyMaterial,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateKeyPair' smart constructor.
+data CreateKeyPair = CreateKeyPair'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The format of the key pair.
+    --
+    -- Default: @pem@
+    keyFormat :: Prelude.Maybe KeyFormat,
+    -- | The type of key pair. Note that ED25519 keys are not supported for
+    -- Windows instances.
+    --
+    -- Default: @rsa@
+    keyType :: Prelude.Maybe KeyType,
+    -- | The tags to apply to the new key pair.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | A unique name for the key pair.
+    --
+    -- Constraints: Up to 255 ASCII characters
+    keyName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateKeyPair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createKeyPair_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'keyFormat', 'createKeyPair_keyFormat' - The format of the key pair.
+--
+-- Default: @pem@
+--
+-- 'keyType', 'createKeyPair_keyType' - The type of key pair. Note that ED25519 keys are not supported for
+-- Windows instances.
+--
+-- Default: @rsa@
+--
+-- 'tagSpecifications', 'createKeyPair_tagSpecifications' - The tags to apply to the new key pair.
+--
+-- 'keyName', 'createKeyPair_keyName' - A unique name for the key pair.
+--
+-- Constraints: Up to 255 ASCII characters
+newCreateKeyPair ::
+  -- | 'keyName'
+  Prelude.Text ->
+  CreateKeyPair
+newCreateKeyPair pKeyName_ =
+  CreateKeyPair'
+    { dryRun = Prelude.Nothing,
+      keyFormat = Prelude.Nothing,
+      keyType = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      keyName = pKeyName_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createKeyPair_dryRun :: Lens.Lens' CreateKeyPair (Prelude.Maybe Prelude.Bool)
+createKeyPair_dryRun = Lens.lens (\CreateKeyPair' {dryRun} -> dryRun) (\s@CreateKeyPair' {} a -> s {dryRun = a} :: CreateKeyPair)
+
+-- | The format of the key pair.
+--
+-- Default: @pem@
+createKeyPair_keyFormat :: Lens.Lens' CreateKeyPair (Prelude.Maybe KeyFormat)
+createKeyPair_keyFormat = Lens.lens (\CreateKeyPair' {keyFormat} -> keyFormat) (\s@CreateKeyPair' {} a -> s {keyFormat = a} :: CreateKeyPair)
+
+-- | The type of key pair. Note that ED25519 keys are not supported for
+-- Windows instances.
+--
+-- Default: @rsa@
+createKeyPair_keyType :: Lens.Lens' CreateKeyPair (Prelude.Maybe KeyType)
+createKeyPair_keyType = Lens.lens (\CreateKeyPair' {keyType} -> keyType) (\s@CreateKeyPair' {} a -> s {keyType = a} :: CreateKeyPair)
+
+-- | The tags to apply to the new key pair.
+createKeyPair_tagSpecifications :: Lens.Lens' CreateKeyPair (Prelude.Maybe [TagSpecification])
+createKeyPair_tagSpecifications = Lens.lens (\CreateKeyPair' {tagSpecifications} -> tagSpecifications) (\s@CreateKeyPair' {} a -> s {tagSpecifications = a} :: CreateKeyPair) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique name for the key pair.
+--
+-- Constraints: Up to 255 ASCII characters
+createKeyPair_keyName :: Lens.Lens' CreateKeyPair Prelude.Text
+createKeyPair_keyName = Lens.lens (\CreateKeyPair' {keyName} -> keyName) (\s@CreateKeyPair' {} a -> s {keyName = a} :: CreateKeyPair)
+
+instance Core.AWSRequest CreateKeyPair where
+  type
+    AWSResponse CreateKeyPair =
+      CreateKeyPairResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateKeyPairResponse'
+            Prelude.<$> (x Data..@? "keyPairId")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..@ "keyName")
+            Prelude.<*> (x Data..@ "keyFingerprint")
+            Prelude.<*> (x Data..@ "keyMaterial")
+      )
+
+instance Prelude.Hashable CreateKeyPair where
+  hashWithSalt _salt CreateKeyPair' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` keyFormat
+      `Prelude.hashWithSalt` keyType
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` keyName
+
+instance Prelude.NFData CreateKeyPair where
+  rnf CreateKeyPair' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf keyFormat
+      `Prelude.seq` Prelude.rnf keyType
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf keyName
+
+instance Data.ToHeaders CreateKeyPair where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateKeyPair where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateKeyPair where
+  toQuery CreateKeyPair' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateKeyPair" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "KeyFormat" Data.=: keyFormat,
+        "KeyType" Data.=: keyType,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "KeyName" Data.=: keyName
+      ]
+
+-- | Describes a key pair.
+--
+-- /See:/ 'newCreateKeyPairResponse' smart constructor.
+data CreateKeyPairResponse = CreateKeyPairResponse'
+  { -- | The ID of the key pair.
+    keyPairId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags applied to the key pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The name of the key pair.
+    keyName :: Prelude.Text,
+    -- | -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
+    --     DER encoded private key.
+    --
+    -- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+    --     SHA-256 digest, which is the default for OpenSSH, starting with
+    --     OpenSSH 6.8.
+    keyFingerprint :: Prelude.Text,
+    -- | An unencrypted PEM encoded RSA or ED25519 private key.
+    keyMaterial :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateKeyPairResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPairId', 'createKeyPairResponse_keyPairId' - The ID of the key pair.
+--
+-- 'tags', 'createKeyPairResponse_tags' - Any tags applied to the key pair.
+--
+-- 'httpStatus', 'createKeyPairResponse_httpStatus' - The response's http status code.
+--
+-- 'keyName', 'createKeyPairResponse_keyName' - The name of the key pair.
+--
+-- 'keyFingerprint', 'createKeyPairResponse_keyFingerprint' - -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
+--     DER encoded private key.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     OpenSSH 6.8.
+--
+-- 'keyMaterial', 'createKeyPairResponse_keyMaterial' - An unencrypted PEM encoded RSA or ED25519 private key.
+newCreateKeyPairResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'keyName'
+  Prelude.Text ->
+  -- | 'keyFingerprint'
+  Prelude.Text ->
+  -- | 'keyMaterial'
+  Prelude.Text ->
+  CreateKeyPairResponse
+newCreateKeyPairResponse
+  pHttpStatus_
+  pKeyName_
+  pKeyFingerprint_
+  pKeyMaterial_ =
+    CreateKeyPairResponse'
+      { keyPairId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        httpStatus = pHttpStatus_,
+        keyName = pKeyName_,
+        keyFingerprint = pKeyFingerprint_,
+        keyMaterial = Data._Sensitive Lens.# pKeyMaterial_
+      }
+
+-- | The ID of the key pair.
+createKeyPairResponse_keyPairId :: Lens.Lens' CreateKeyPairResponse (Prelude.Maybe Prelude.Text)
+createKeyPairResponse_keyPairId = Lens.lens (\CreateKeyPairResponse' {keyPairId} -> keyPairId) (\s@CreateKeyPairResponse' {} a -> s {keyPairId = a} :: CreateKeyPairResponse)
+
+-- | Any tags applied to the key pair.
+createKeyPairResponse_tags :: Lens.Lens' CreateKeyPairResponse (Prelude.Maybe [Tag])
+createKeyPairResponse_tags = Lens.lens (\CreateKeyPairResponse' {tags} -> tags) (\s@CreateKeyPairResponse' {} a -> s {tags = a} :: CreateKeyPairResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createKeyPairResponse_httpStatus :: Lens.Lens' CreateKeyPairResponse Prelude.Int
+createKeyPairResponse_httpStatus = Lens.lens (\CreateKeyPairResponse' {httpStatus} -> httpStatus) (\s@CreateKeyPairResponse' {} a -> s {httpStatus = a} :: CreateKeyPairResponse)
+
+-- | The name of the key pair.
+createKeyPairResponse_keyName :: Lens.Lens' CreateKeyPairResponse Prelude.Text
+createKeyPairResponse_keyName = Lens.lens (\CreateKeyPairResponse' {keyName} -> keyName) (\s@CreateKeyPairResponse' {} a -> s {keyName = a} :: CreateKeyPairResponse)
+
+-- | -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
+--     DER encoded private key.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     OpenSSH 6.8.
+createKeyPairResponse_keyFingerprint :: Lens.Lens' CreateKeyPairResponse Prelude.Text
+createKeyPairResponse_keyFingerprint = Lens.lens (\CreateKeyPairResponse' {keyFingerprint} -> keyFingerprint) (\s@CreateKeyPairResponse' {} a -> s {keyFingerprint = a} :: CreateKeyPairResponse)
+
+-- | An unencrypted PEM encoded RSA or ED25519 private key.
+createKeyPairResponse_keyMaterial :: Lens.Lens' CreateKeyPairResponse Prelude.Text
+createKeyPairResponse_keyMaterial = Lens.lens (\CreateKeyPairResponse' {keyMaterial} -> keyMaterial) (\s@CreateKeyPairResponse' {} a -> s {keyMaterial = a} :: CreateKeyPairResponse) Prelude.. Data._Sensitive
+
+instance Prelude.NFData CreateKeyPairResponse where
+  rnf CreateKeyPairResponse' {..} =
+    Prelude.rnf keyPairId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf keyFingerprint
+      `Prelude.seq` Prelude.rnf keyMaterial
diff --git a/gen/Amazonka/EC2/CreateLaunchTemplate.hs b/gen/Amazonka/EC2/CreateLaunchTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateLaunchTemplate.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateLaunchTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a launch template.
+--
+-- A launch template contains the parameters to launch an instance. When
+-- you launch an instance using RunInstances, you can specify a launch
+-- template instead of providing the launch parameters in the request. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html Launch an instance from a launch template>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you want to clone an existing launch template as the basis for
+-- creating a new launch template, you can use the Amazon EC2 console. The
+-- API, SDKs, and CLI do not support cloning a template. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template-from-existing-launch-template Create a launch template from an existing launch template>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateLaunchTemplate
+  ( -- * Creating a Request
+    CreateLaunchTemplate (..),
+    newCreateLaunchTemplate,
+
+    -- * Request Lenses
+    createLaunchTemplate_clientToken,
+    createLaunchTemplate_dryRun,
+    createLaunchTemplate_tagSpecifications,
+    createLaunchTemplate_versionDescription,
+    createLaunchTemplate_launchTemplateName,
+    createLaunchTemplate_launchTemplateData,
+
+    -- * Destructuring the Response
+    CreateLaunchTemplateResponse (..),
+    newCreateLaunchTemplateResponse,
+
+    -- * Response Lenses
+    createLaunchTemplateResponse_launchTemplate,
+    createLaunchTemplateResponse_warning,
+    createLaunchTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLaunchTemplate' smart constructor.
+data CreateLaunchTemplate = CreateLaunchTemplate'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+    --
+    -- Constraint: Maximum 128 ASCII characters.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the launch template on creation. To tag the launch
+    -- template, the resource type must be @launch-template@.
+    --
+    -- To specify the tags for the resources that are created when an instance
+    -- is launched, you must use the @TagSpecifications@ parameter in the
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html launch template data>
+    -- structure.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | A description for the first version of the launch template.
+    versionDescription :: Prelude.Maybe Prelude.Text,
+    -- | A name for the launch template.
+    launchTemplateName :: Prelude.Text,
+    -- | The information for the launch template.
+    launchTemplateData :: Data.Sensitive RequestLaunchTemplateData
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createLaunchTemplate_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraint: Maximum 128 ASCII characters.
+--
+-- 'dryRun', 'createLaunchTemplate_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createLaunchTemplate_tagSpecifications' - The tags to apply to the launch template on creation. To tag the launch
+-- template, the resource type must be @launch-template@.
+--
+-- To specify the tags for the resources that are created when an instance
+-- is launched, you must use the @TagSpecifications@ parameter in the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html launch template data>
+-- structure.
+--
+-- 'versionDescription', 'createLaunchTemplate_versionDescription' - A description for the first version of the launch template.
+--
+-- 'launchTemplateName', 'createLaunchTemplate_launchTemplateName' - A name for the launch template.
+--
+-- 'launchTemplateData', 'createLaunchTemplate_launchTemplateData' - The information for the launch template.
+newCreateLaunchTemplate ::
+  -- | 'launchTemplateName'
+  Prelude.Text ->
+  -- | 'launchTemplateData'
+  RequestLaunchTemplateData ->
+  CreateLaunchTemplate
+newCreateLaunchTemplate
+  pLaunchTemplateName_
+  pLaunchTemplateData_ =
+    CreateLaunchTemplate'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        versionDescription = Prelude.Nothing,
+        launchTemplateName = pLaunchTemplateName_,
+        launchTemplateData =
+          Data._Sensitive Lens.# pLaunchTemplateData_
+      }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraint: Maximum 128 ASCII characters.
+createLaunchTemplate_clientToken :: Lens.Lens' CreateLaunchTemplate (Prelude.Maybe Prelude.Text)
+createLaunchTemplate_clientToken = Lens.lens (\CreateLaunchTemplate' {clientToken} -> clientToken) (\s@CreateLaunchTemplate' {} a -> s {clientToken = a} :: CreateLaunchTemplate)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createLaunchTemplate_dryRun :: Lens.Lens' CreateLaunchTemplate (Prelude.Maybe Prelude.Bool)
+createLaunchTemplate_dryRun = Lens.lens (\CreateLaunchTemplate' {dryRun} -> dryRun) (\s@CreateLaunchTemplate' {} a -> s {dryRun = a} :: CreateLaunchTemplate)
+
+-- | The tags to apply to the launch template on creation. To tag the launch
+-- template, the resource type must be @launch-template@.
+--
+-- To specify the tags for the resources that are created when an instance
+-- is launched, you must use the @TagSpecifications@ parameter in the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestLaunchTemplateData.html launch template data>
+-- structure.
+createLaunchTemplate_tagSpecifications :: Lens.Lens' CreateLaunchTemplate (Prelude.Maybe [TagSpecification])
+createLaunchTemplate_tagSpecifications = Lens.lens (\CreateLaunchTemplate' {tagSpecifications} -> tagSpecifications) (\s@CreateLaunchTemplate' {} a -> s {tagSpecifications = a} :: CreateLaunchTemplate) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description for the first version of the launch template.
+createLaunchTemplate_versionDescription :: Lens.Lens' CreateLaunchTemplate (Prelude.Maybe Prelude.Text)
+createLaunchTemplate_versionDescription = Lens.lens (\CreateLaunchTemplate' {versionDescription} -> versionDescription) (\s@CreateLaunchTemplate' {} a -> s {versionDescription = a} :: CreateLaunchTemplate)
+
+-- | A name for the launch template.
+createLaunchTemplate_launchTemplateName :: Lens.Lens' CreateLaunchTemplate Prelude.Text
+createLaunchTemplate_launchTemplateName = Lens.lens (\CreateLaunchTemplate' {launchTemplateName} -> launchTemplateName) (\s@CreateLaunchTemplate' {} a -> s {launchTemplateName = a} :: CreateLaunchTemplate)
+
+-- | The information for the launch template.
+createLaunchTemplate_launchTemplateData :: Lens.Lens' CreateLaunchTemplate RequestLaunchTemplateData
+createLaunchTemplate_launchTemplateData = Lens.lens (\CreateLaunchTemplate' {launchTemplateData} -> launchTemplateData) (\s@CreateLaunchTemplate' {} a -> s {launchTemplateData = a} :: CreateLaunchTemplate) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateLaunchTemplate where
+  type
+    AWSResponse CreateLaunchTemplate =
+      CreateLaunchTemplateResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateLaunchTemplateResponse'
+            Prelude.<$> (x Data..@? "launchTemplate")
+            Prelude.<*> (x Data..@? "warning")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLaunchTemplate where
+  hashWithSalt _salt CreateLaunchTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` versionDescription
+      `Prelude.hashWithSalt` launchTemplateName
+      `Prelude.hashWithSalt` launchTemplateData
+
+instance Prelude.NFData CreateLaunchTemplate where
+  rnf CreateLaunchTemplate' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf versionDescription
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf launchTemplateData
+
+instance Data.ToHeaders CreateLaunchTemplate where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateLaunchTemplate where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLaunchTemplate where
+  toQuery CreateLaunchTemplate' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateLaunchTemplate" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VersionDescription" Data.=: versionDescription,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        "LaunchTemplateData" Data.=: launchTemplateData
+      ]
+
+-- | /See:/ 'newCreateLaunchTemplateResponse' smart constructor.
+data CreateLaunchTemplateResponse = CreateLaunchTemplateResponse'
+  { -- | Information about the launch template.
+    launchTemplate :: Prelude.Maybe LaunchTemplate,
+    -- | If the launch template contains parameters or parameter combinations
+    -- that are not valid, an error code and an error message are returned for
+    -- each issue that\'s found.
+    warning :: Prelude.Maybe ValidationWarning,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplate', 'createLaunchTemplateResponse_launchTemplate' - Information about the launch template.
+--
+-- 'warning', 'createLaunchTemplateResponse_warning' - If the launch template contains parameters or parameter combinations
+-- that are not valid, an error code and an error message are returned for
+-- each issue that\'s found.
+--
+-- 'httpStatus', 'createLaunchTemplateResponse_httpStatus' - The response's http status code.
+newCreateLaunchTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLaunchTemplateResponse
+newCreateLaunchTemplateResponse pHttpStatus_ =
+  CreateLaunchTemplateResponse'
+    { launchTemplate =
+        Prelude.Nothing,
+      warning = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the launch template.
+createLaunchTemplateResponse_launchTemplate :: Lens.Lens' CreateLaunchTemplateResponse (Prelude.Maybe LaunchTemplate)
+createLaunchTemplateResponse_launchTemplate = Lens.lens (\CreateLaunchTemplateResponse' {launchTemplate} -> launchTemplate) (\s@CreateLaunchTemplateResponse' {} a -> s {launchTemplate = a} :: CreateLaunchTemplateResponse)
+
+-- | If the launch template contains parameters or parameter combinations
+-- that are not valid, an error code and an error message are returned for
+-- each issue that\'s found.
+createLaunchTemplateResponse_warning :: Lens.Lens' CreateLaunchTemplateResponse (Prelude.Maybe ValidationWarning)
+createLaunchTemplateResponse_warning = Lens.lens (\CreateLaunchTemplateResponse' {warning} -> warning) (\s@CreateLaunchTemplateResponse' {} a -> s {warning = a} :: CreateLaunchTemplateResponse)
+
+-- | The response's http status code.
+createLaunchTemplateResponse_httpStatus :: Lens.Lens' CreateLaunchTemplateResponse Prelude.Int
+createLaunchTemplateResponse_httpStatus = Lens.lens (\CreateLaunchTemplateResponse' {httpStatus} -> httpStatus) (\s@CreateLaunchTemplateResponse' {} a -> s {httpStatus = a} :: CreateLaunchTemplateResponse)
+
+instance Prelude.NFData CreateLaunchTemplateResponse where
+  rnf CreateLaunchTemplateResponse' {..} =
+    Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf warning
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateLaunchTemplateVersion.hs b/gen/Amazonka/EC2/CreateLaunchTemplateVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateLaunchTemplateVersion.hs
@@ -0,0 +1,327 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateLaunchTemplateVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new version of a launch template. You can specify an existing
+-- version of launch template from which to base the new version.
+--
+-- Launch template versions are numbered in the order in which they are
+-- created. You cannot specify, change, or replace the numbering of launch
+-- template versions.
+--
+-- Launch templates are immutable; after you create a launch template, you
+-- can\'t modify it. Instead, you can create a new version of the launch
+-- template that includes any changes you require.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#manage-launch-template-versions Modify a launch template (manage launch template versions)>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateLaunchTemplateVersion
+  ( -- * Creating a Request
+    CreateLaunchTemplateVersion (..),
+    newCreateLaunchTemplateVersion,
+
+    -- * Request Lenses
+    createLaunchTemplateVersion_clientToken,
+    createLaunchTemplateVersion_dryRun,
+    createLaunchTemplateVersion_launchTemplateId,
+    createLaunchTemplateVersion_launchTemplateName,
+    createLaunchTemplateVersion_sourceVersion,
+    createLaunchTemplateVersion_versionDescription,
+    createLaunchTemplateVersion_launchTemplateData,
+
+    -- * Destructuring the Response
+    CreateLaunchTemplateVersionResponse (..),
+    newCreateLaunchTemplateVersionResponse,
+
+    -- * Response Lenses
+    createLaunchTemplateVersionResponse_launchTemplateVersion,
+    createLaunchTemplateVersionResponse_warning,
+    createLaunchTemplateVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLaunchTemplateVersion' smart constructor.
+data CreateLaunchTemplateVersion = CreateLaunchTemplateVersion'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+    --
+    -- Constraint: Maximum 128 ASCII characters.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateId@ or the
+    -- @LaunchTemplateName@, but not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+    -- not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the launch template version on which to base the
+    -- new version. The new version inherits the same launch parameters as the
+    -- source version, except for parameters that you specify in
+    -- @LaunchTemplateData@. Snapshots applied to the block device mapping are
+    -- ignored when creating a new version unless they are explicitly included.
+    sourceVersion :: Prelude.Maybe Prelude.Text,
+    -- | A description for the version of the launch template.
+    versionDescription :: Prelude.Maybe Prelude.Text,
+    -- | The information for the launch template.
+    launchTemplateData :: Data.Sensitive RequestLaunchTemplateData
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchTemplateVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createLaunchTemplateVersion_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraint: Maximum 128 ASCII characters.
+--
+-- 'dryRun', 'createLaunchTemplateVersion_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchTemplateId', 'createLaunchTemplateVersion_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+--
+-- 'launchTemplateName', 'createLaunchTemplateVersion_launchTemplateName' - The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+--
+-- 'sourceVersion', 'createLaunchTemplateVersion_sourceVersion' - The version number of the launch template version on which to base the
+-- new version. The new version inherits the same launch parameters as the
+-- source version, except for parameters that you specify in
+-- @LaunchTemplateData@. Snapshots applied to the block device mapping are
+-- ignored when creating a new version unless they are explicitly included.
+--
+-- 'versionDescription', 'createLaunchTemplateVersion_versionDescription' - A description for the version of the launch template.
+--
+-- 'launchTemplateData', 'createLaunchTemplateVersion_launchTemplateData' - The information for the launch template.
+newCreateLaunchTemplateVersion ::
+  -- | 'launchTemplateData'
+  RequestLaunchTemplateData ->
+  CreateLaunchTemplateVersion
+newCreateLaunchTemplateVersion pLaunchTemplateData_ =
+  CreateLaunchTemplateVersion'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      sourceVersion = Prelude.Nothing,
+      versionDescription = Prelude.Nothing,
+      launchTemplateData =
+        Data._Sensitive Lens.# pLaunchTemplateData_
+    }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraint: Maximum 128 ASCII characters.
+createLaunchTemplateVersion_clientToken :: Lens.Lens' CreateLaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+createLaunchTemplateVersion_clientToken = Lens.lens (\CreateLaunchTemplateVersion' {clientToken} -> clientToken) (\s@CreateLaunchTemplateVersion' {} a -> s {clientToken = a} :: CreateLaunchTemplateVersion)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createLaunchTemplateVersion_dryRun :: Lens.Lens' CreateLaunchTemplateVersion (Prelude.Maybe Prelude.Bool)
+createLaunchTemplateVersion_dryRun = Lens.lens (\CreateLaunchTemplateVersion' {dryRun} -> dryRun) (\s@CreateLaunchTemplateVersion' {} a -> s {dryRun = a} :: CreateLaunchTemplateVersion)
+
+-- | The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+createLaunchTemplateVersion_launchTemplateId :: Lens.Lens' CreateLaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+createLaunchTemplateVersion_launchTemplateId = Lens.lens (\CreateLaunchTemplateVersion' {launchTemplateId} -> launchTemplateId) (\s@CreateLaunchTemplateVersion' {} a -> s {launchTemplateId = a} :: CreateLaunchTemplateVersion)
+
+-- | The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+createLaunchTemplateVersion_launchTemplateName :: Lens.Lens' CreateLaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+createLaunchTemplateVersion_launchTemplateName = Lens.lens (\CreateLaunchTemplateVersion' {launchTemplateName} -> launchTemplateName) (\s@CreateLaunchTemplateVersion' {} a -> s {launchTemplateName = a} :: CreateLaunchTemplateVersion)
+
+-- | The version number of the launch template version on which to base the
+-- new version. The new version inherits the same launch parameters as the
+-- source version, except for parameters that you specify in
+-- @LaunchTemplateData@. Snapshots applied to the block device mapping are
+-- ignored when creating a new version unless they are explicitly included.
+createLaunchTemplateVersion_sourceVersion :: Lens.Lens' CreateLaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+createLaunchTemplateVersion_sourceVersion = Lens.lens (\CreateLaunchTemplateVersion' {sourceVersion} -> sourceVersion) (\s@CreateLaunchTemplateVersion' {} a -> s {sourceVersion = a} :: CreateLaunchTemplateVersion)
+
+-- | A description for the version of the launch template.
+createLaunchTemplateVersion_versionDescription :: Lens.Lens' CreateLaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+createLaunchTemplateVersion_versionDescription = Lens.lens (\CreateLaunchTemplateVersion' {versionDescription} -> versionDescription) (\s@CreateLaunchTemplateVersion' {} a -> s {versionDescription = a} :: CreateLaunchTemplateVersion)
+
+-- | The information for the launch template.
+createLaunchTemplateVersion_launchTemplateData :: Lens.Lens' CreateLaunchTemplateVersion RequestLaunchTemplateData
+createLaunchTemplateVersion_launchTemplateData = Lens.lens (\CreateLaunchTemplateVersion' {launchTemplateData} -> launchTemplateData) (\s@CreateLaunchTemplateVersion' {} a -> s {launchTemplateData = a} :: CreateLaunchTemplateVersion) Prelude.. Data._Sensitive
+
+instance Core.AWSRequest CreateLaunchTemplateVersion where
+  type
+    AWSResponse CreateLaunchTemplateVersion =
+      CreateLaunchTemplateVersionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateLaunchTemplateVersionResponse'
+            Prelude.<$> (x Data..@? "launchTemplateVersion")
+            Prelude.<*> (x Data..@? "warning")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLaunchTemplateVersion where
+  hashWithSalt _salt CreateLaunchTemplateVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+      `Prelude.hashWithSalt` sourceVersion
+      `Prelude.hashWithSalt` versionDescription
+      `Prelude.hashWithSalt` launchTemplateData
+
+instance Prelude.NFData CreateLaunchTemplateVersion where
+  rnf CreateLaunchTemplateVersion' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf sourceVersion
+      `Prelude.seq` Prelude.rnf versionDescription
+      `Prelude.seq` Prelude.rnf launchTemplateData
+
+instance Data.ToHeaders CreateLaunchTemplateVersion where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateLaunchTemplateVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLaunchTemplateVersion where
+  toQuery CreateLaunchTemplateVersion' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateLaunchTemplateVersion" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        "SourceVersion" Data.=: sourceVersion,
+        "VersionDescription" Data.=: versionDescription,
+        "LaunchTemplateData" Data.=: launchTemplateData
+      ]
+
+-- | /See:/ 'newCreateLaunchTemplateVersionResponse' smart constructor.
+data CreateLaunchTemplateVersionResponse = CreateLaunchTemplateVersionResponse'
+  { -- | Information about the launch template version.
+    launchTemplateVersion :: Prelude.Maybe LaunchTemplateVersion,
+    -- | If the new version of the launch template contains parameters or
+    -- parameter combinations that are not valid, an error code and an error
+    -- message are returned for each issue that\'s found.
+    warning :: Prelude.Maybe ValidationWarning,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLaunchTemplateVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateVersion', 'createLaunchTemplateVersionResponse_launchTemplateVersion' - Information about the launch template version.
+--
+-- 'warning', 'createLaunchTemplateVersionResponse_warning' - If the new version of the launch template contains parameters or
+-- parameter combinations that are not valid, an error code and an error
+-- message are returned for each issue that\'s found.
+--
+-- 'httpStatus', 'createLaunchTemplateVersionResponse_httpStatus' - The response's http status code.
+newCreateLaunchTemplateVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLaunchTemplateVersionResponse
+newCreateLaunchTemplateVersionResponse pHttpStatus_ =
+  CreateLaunchTemplateVersionResponse'
+    { launchTemplateVersion =
+        Prelude.Nothing,
+      warning = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the launch template version.
+createLaunchTemplateVersionResponse_launchTemplateVersion :: Lens.Lens' CreateLaunchTemplateVersionResponse (Prelude.Maybe LaunchTemplateVersion)
+createLaunchTemplateVersionResponse_launchTemplateVersion = Lens.lens (\CreateLaunchTemplateVersionResponse' {launchTemplateVersion} -> launchTemplateVersion) (\s@CreateLaunchTemplateVersionResponse' {} a -> s {launchTemplateVersion = a} :: CreateLaunchTemplateVersionResponse)
+
+-- | If the new version of the launch template contains parameters or
+-- parameter combinations that are not valid, an error code and an error
+-- message are returned for each issue that\'s found.
+createLaunchTemplateVersionResponse_warning :: Lens.Lens' CreateLaunchTemplateVersionResponse (Prelude.Maybe ValidationWarning)
+createLaunchTemplateVersionResponse_warning = Lens.lens (\CreateLaunchTemplateVersionResponse' {warning} -> warning) (\s@CreateLaunchTemplateVersionResponse' {} a -> s {warning = a} :: CreateLaunchTemplateVersionResponse)
+
+-- | The response's http status code.
+createLaunchTemplateVersionResponse_httpStatus :: Lens.Lens' CreateLaunchTemplateVersionResponse Prelude.Int
+createLaunchTemplateVersionResponse_httpStatus = Lens.lens (\CreateLaunchTemplateVersionResponse' {httpStatus} -> httpStatus) (\s@CreateLaunchTemplateVersionResponse' {} a -> s {httpStatus = a} :: CreateLaunchTemplateVersionResponse)
+
+instance
+  Prelude.NFData
+    CreateLaunchTemplateVersionResponse
+  where
+  rnf CreateLaunchTemplateVersionResponse' {..} =
+    Prelude.rnf launchTemplateVersion
+      `Prelude.seq` Prelude.rnf warning
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateLocalGatewayRoute.hs b/gen/Amazonka/EC2/CreateLocalGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateLocalGatewayRoute.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateLocalGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a static route for the specified local gateway route table. You
+-- must specify one of the following targets:
+--
+-- -   @LocalGatewayVirtualInterfaceGroupId@
+--
+-- -   @NetworkInterfaceId@
+module Amazonka.EC2.CreateLocalGatewayRoute
+  ( -- * Creating a Request
+    CreateLocalGatewayRoute (..),
+    newCreateLocalGatewayRoute,
+
+    -- * Request Lenses
+    createLocalGatewayRoute_dryRun,
+    createLocalGatewayRoute_localGatewayVirtualInterfaceGroupId,
+    createLocalGatewayRoute_networkInterfaceId,
+    createLocalGatewayRoute_destinationCidrBlock,
+    createLocalGatewayRoute_localGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    CreateLocalGatewayRouteResponse (..),
+    newCreateLocalGatewayRouteResponse,
+
+    -- * Response Lenses
+    createLocalGatewayRouteResponse_route,
+    createLocalGatewayRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocalGatewayRoute' smart constructor.
+data CreateLocalGatewayRoute = CreateLocalGatewayRoute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the virtual interface group.
+    localGatewayVirtualInterfaceGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR range used for destination matches. Routing decisions are based
+    -- on the most specific match.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createLocalGatewayRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'localGatewayVirtualInterfaceGroupId', 'createLocalGatewayRoute_localGatewayVirtualInterfaceGroupId' - The ID of the virtual interface group.
+--
+-- 'networkInterfaceId', 'createLocalGatewayRoute_networkInterfaceId' - The ID of the network interface.
+--
+-- 'destinationCidrBlock', 'createLocalGatewayRoute_destinationCidrBlock' - The CIDR range used for destination matches. Routing decisions are based
+-- on the most specific match.
+--
+-- 'localGatewayRouteTableId', 'createLocalGatewayRoute_localGatewayRouteTableId' - The ID of the local gateway route table.
+newCreateLocalGatewayRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  CreateLocalGatewayRoute
+newCreateLocalGatewayRoute
+  pDestinationCidrBlock_
+  pLocalGatewayRouteTableId_ =
+    CreateLocalGatewayRoute'
+      { dryRun = Prelude.Nothing,
+        localGatewayVirtualInterfaceGroupId =
+          Prelude.Nothing,
+        networkInterfaceId = Prelude.Nothing,
+        destinationCidrBlock = pDestinationCidrBlock_,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createLocalGatewayRoute_dryRun :: Lens.Lens' CreateLocalGatewayRoute (Prelude.Maybe Prelude.Bool)
+createLocalGatewayRoute_dryRun = Lens.lens (\CreateLocalGatewayRoute' {dryRun} -> dryRun) (\s@CreateLocalGatewayRoute' {} a -> s {dryRun = a} :: CreateLocalGatewayRoute)
+
+-- | The ID of the virtual interface group.
+createLocalGatewayRoute_localGatewayVirtualInterfaceGroupId :: Lens.Lens' CreateLocalGatewayRoute (Prelude.Maybe Prelude.Text)
+createLocalGatewayRoute_localGatewayVirtualInterfaceGroupId = Lens.lens (\CreateLocalGatewayRoute' {localGatewayVirtualInterfaceGroupId} -> localGatewayVirtualInterfaceGroupId) (\s@CreateLocalGatewayRoute' {} a -> s {localGatewayVirtualInterfaceGroupId = a} :: CreateLocalGatewayRoute)
+
+-- | The ID of the network interface.
+createLocalGatewayRoute_networkInterfaceId :: Lens.Lens' CreateLocalGatewayRoute (Prelude.Maybe Prelude.Text)
+createLocalGatewayRoute_networkInterfaceId = Lens.lens (\CreateLocalGatewayRoute' {networkInterfaceId} -> networkInterfaceId) (\s@CreateLocalGatewayRoute' {} a -> s {networkInterfaceId = a} :: CreateLocalGatewayRoute)
+
+-- | The CIDR range used for destination matches. Routing decisions are based
+-- on the most specific match.
+createLocalGatewayRoute_destinationCidrBlock :: Lens.Lens' CreateLocalGatewayRoute Prelude.Text
+createLocalGatewayRoute_destinationCidrBlock = Lens.lens (\CreateLocalGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@CreateLocalGatewayRoute' {} a -> s {destinationCidrBlock = a} :: CreateLocalGatewayRoute)
+
+-- | The ID of the local gateway route table.
+createLocalGatewayRoute_localGatewayRouteTableId :: Lens.Lens' CreateLocalGatewayRoute Prelude.Text
+createLocalGatewayRoute_localGatewayRouteTableId = Lens.lens (\CreateLocalGatewayRoute' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@CreateLocalGatewayRoute' {} a -> s {localGatewayRouteTableId = a} :: CreateLocalGatewayRoute)
+
+instance Core.AWSRequest CreateLocalGatewayRoute where
+  type
+    AWSResponse CreateLocalGatewayRoute =
+      CreateLocalGatewayRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateLocalGatewayRouteResponse'
+            Prelude.<$> (x Data..@? "route")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLocalGatewayRoute where
+  hashWithSalt _salt CreateLocalGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData CreateLocalGatewayRoute where
+  rnf CreateLocalGatewayRoute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+
+instance Data.ToHeaders CreateLocalGatewayRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateLocalGatewayRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocalGatewayRoute where
+  toQuery CreateLocalGatewayRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateLocalGatewayRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LocalGatewayVirtualInterfaceGroupId"
+          Data.=: localGatewayVirtualInterfaceGroupId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "LocalGatewayRouteTableId"
+          Data.=: localGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newCreateLocalGatewayRouteResponse' smart constructor.
+data CreateLocalGatewayRouteResponse = CreateLocalGatewayRouteResponse'
+  { -- | Information about the route.
+    route :: Prelude.Maybe LocalGatewayRoute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'route', 'createLocalGatewayRouteResponse_route' - Information about the route.
+--
+-- 'httpStatus', 'createLocalGatewayRouteResponse_httpStatus' - The response's http status code.
+newCreateLocalGatewayRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocalGatewayRouteResponse
+newCreateLocalGatewayRouteResponse pHttpStatus_ =
+  CreateLocalGatewayRouteResponse'
+    { route =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the route.
+createLocalGatewayRouteResponse_route :: Lens.Lens' CreateLocalGatewayRouteResponse (Prelude.Maybe LocalGatewayRoute)
+createLocalGatewayRouteResponse_route = Lens.lens (\CreateLocalGatewayRouteResponse' {route} -> route) (\s@CreateLocalGatewayRouteResponse' {} a -> s {route = a} :: CreateLocalGatewayRouteResponse)
+
+-- | The response's http status code.
+createLocalGatewayRouteResponse_httpStatus :: Lens.Lens' CreateLocalGatewayRouteResponse Prelude.Int
+createLocalGatewayRouteResponse_httpStatus = Lens.lens (\CreateLocalGatewayRouteResponse' {httpStatus} -> httpStatus) (\s@CreateLocalGatewayRouteResponse' {} a -> s {httpStatus = a} :: CreateLocalGatewayRouteResponse)
+
+instance
+  Prelude.NFData
+    CreateLocalGatewayRouteResponse
+  where
+  rnf CreateLocalGatewayRouteResponse' {..} =
+    Prelude.rnf route
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateLocalGatewayRouteTable.hs b/gen/Amazonka/EC2/CreateLocalGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateLocalGatewayRouteTable.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateLocalGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a local gateway route table.
+module Amazonka.EC2.CreateLocalGatewayRouteTable
+  ( -- * Creating a Request
+    CreateLocalGatewayRouteTable (..),
+    newCreateLocalGatewayRouteTable,
+
+    -- * Request Lenses
+    createLocalGatewayRouteTable_dryRun,
+    createLocalGatewayRouteTable_mode,
+    createLocalGatewayRouteTable_tagSpecifications,
+    createLocalGatewayRouteTable_localGatewayId,
+
+    -- * Destructuring the Response
+    CreateLocalGatewayRouteTableResponse (..),
+    newCreateLocalGatewayRouteTableResponse,
+
+    -- * Response Lenses
+    createLocalGatewayRouteTableResponse_localGatewayRouteTable,
+    createLocalGatewayRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocalGatewayRouteTable' smart constructor.
+data CreateLocalGatewayRouteTable = CreateLocalGatewayRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The mode of the local gateway route table.
+    mode :: Prelude.Maybe LocalGatewayRouteTableMode,
+    -- | The tags assigned to the local gateway route table.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createLocalGatewayRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'mode', 'createLocalGatewayRouteTable_mode' - The mode of the local gateway route table.
+--
+-- 'tagSpecifications', 'createLocalGatewayRouteTable_tagSpecifications' - The tags assigned to the local gateway route table.
+--
+-- 'localGatewayId', 'createLocalGatewayRouteTable_localGatewayId' - The ID of the local gateway.
+newCreateLocalGatewayRouteTable ::
+  -- | 'localGatewayId'
+  Prelude.Text ->
+  CreateLocalGatewayRouteTable
+newCreateLocalGatewayRouteTable pLocalGatewayId_ =
+  CreateLocalGatewayRouteTable'
+    { dryRun =
+        Prelude.Nothing,
+      mode = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      localGatewayId = pLocalGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createLocalGatewayRouteTable_dryRun :: Lens.Lens' CreateLocalGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+createLocalGatewayRouteTable_dryRun = Lens.lens (\CreateLocalGatewayRouteTable' {dryRun} -> dryRun) (\s@CreateLocalGatewayRouteTable' {} a -> s {dryRun = a} :: CreateLocalGatewayRouteTable)
+
+-- | The mode of the local gateway route table.
+createLocalGatewayRouteTable_mode :: Lens.Lens' CreateLocalGatewayRouteTable (Prelude.Maybe LocalGatewayRouteTableMode)
+createLocalGatewayRouteTable_mode = Lens.lens (\CreateLocalGatewayRouteTable' {mode} -> mode) (\s@CreateLocalGatewayRouteTable' {} a -> s {mode = a} :: CreateLocalGatewayRouteTable)
+
+-- | The tags assigned to the local gateway route table.
+createLocalGatewayRouteTable_tagSpecifications :: Lens.Lens' CreateLocalGatewayRouteTable (Prelude.Maybe [TagSpecification])
+createLocalGatewayRouteTable_tagSpecifications = Lens.lens (\CreateLocalGatewayRouteTable' {tagSpecifications} -> tagSpecifications) (\s@CreateLocalGatewayRouteTable' {} a -> s {tagSpecifications = a} :: CreateLocalGatewayRouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the local gateway.
+createLocalGatewayRouteTable_localGatewayId :: Lens.Lens' CreateLocalGatewayRouteTable Prelude.Text
+createLocalGatewayRouteTable_localGatewayId = Lens.lens (\CreateLocalGatewayRouteTable' {localGatewayId} -> localGatewayId) (\s@CreateLocalGatewayRouteTable' {} a -> s {localGatewayId = a} :: CreateLocalGatewayRouteTable)
+
+instance Core.AWSRequest CreateLocalGatewayRouteTable where
+  type
+    AWSResponse CreateLocalGatewayRouteTable =
+      CreateLocalGatewayRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateLocalGatewayRouteTableResponse'
+            Prelude.<$> (x Data..@? "localGatewayRouteTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateLocalGatewayRouteTable
+  where
+  hashWithSalt _salt CreateLocalGatewayRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` mode
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` localGatewayId
+
+instance Prelude.NFData CreateLocalGatewayRouteTable where
+  rnf CreateLocalGatewayRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf mode
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf localGatewayId
+
+instance Data.ToHeaders CreateLocalGatewayRouteTable where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateLocalGatewayRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLocalGatewayRouteTable where
+  toQuery CreateLocalGatewayRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateLocalGatewayRouteTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Mode" Data.=: mode,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "LocalGatewayId" Data.=: localGatewayId
+      ]
+
+-- | /See:/ 'newCreateLocalGatewayRouteTableResponse' smart constructor.
+data CreateLocalGatewayRouteTableResponse = CreateLocalGatewayRouteTableResponse'
+  { -- | Information about the local gateway route table.
+    localGatewayRouteTable :: Prelude.Maybe LocalGatewayRouteTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTable', 'createLocalGatewayRouteTableResponse_localGatewayRouteTable' - Information about the local gateway route table.
+--
+-- 'httpStatus', 'createLocalGatewayRouteTableResponse_httpStatus' - The response's http status code.
+newCreateLocalGatewayRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocalGatewayRouteTableResponse
+newCreateLocalGatewayRouteTableResponse pHttpStatus_ =
+  CreateLocalGatewayRouteTableResponse'
+    { localGatewayRouteTable =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the local gateway route table.
+createLocalGatewayRouteTableResponse_localGatewayRouteTable :: Lens.Lens' CreateLocalGatewayRouteTableResponse (Prelude.Maybe LocalGatewayRouteTable)
+createLocalGatewayRouteTableResponse_localGatewayRouteTable = Lens.lens (\CreateLocalGatewayRouteTableResponse' {localGatewayRouteTable} -> localGatewayRouteTable) (\s@CreateLocalGatewayRouteTableResponse' {} a -> s {localGatewayRouteTable = a} :: CreateLocalGatewayRouteTableResponse)
+
+-- | The response's http status code.
+createLocalGatewayRouteTableResponse_httpStatus :: Lens.Lens' CreateLocalGatewayRouteTableResponse Prelude.Int
+createLocalGatewayRouteTableResponse_httpStatus = Lens.lens (\CreateLocalGatewayRouteTableResponse' {httpStatus} -> httpStatus) (\s@CreateLocalGatewayRouteTableResponse' {} a -> s {httpStatus = a} :: CreateLocalGatewayRouteTableResponse)
+
+instance
+  Prelude.NFData
+    CreateLocalGatewayRouteTableResponse
+  where
+  rnf CreateLocalGatewayRouteTableResponse' {..} =
+    Prelude.rnf localGatewayRouteTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs b/gen/Amazonka/EC2/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a local gateway route table virtual interface group association.
+module Amazonka.EC2.CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  ( -- * Creating a Request
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation (..),
+    newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+
+    -- * Request Lenses
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_tagSpecifications,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId,
+
+    -- * Destructuring the Response
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse (..),
+    newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse,
+
+    -- * Response Lenses
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' smart constructor.
+data CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation = CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags assigned to the local gateway route table virtual interface
+    -- group association.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the local gateway route table virtual interface group
+    -- association.
+    localGatewayVirtualInterfaceGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_tagSpecifications' - The tags assigned to the local gateway route table virtual interface
+-- group association.
+--
+-- 'localGatewayRouteTableId', 'createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'localGatewayVirtualInterfaceGroupId', 'createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId' - The ID of the local gateway route table virtual interface group
+-- association.
+newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation ::
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'localGatewayVirtualInterfaceGroupId'
+  Prelude.Text ->
+  CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  pLocalGatewayRouteTableId_
+  pLocalGatewayVirtualInterfaceGroupId_ =
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+      { dryRun =
+          Prelude.Nothing,
+        tagSpecifications =
+          Prelude.Nothing,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_,
+        localGatewayVirtualInterfaceGroupId =
+          pLocalGatewayVirtualInterfaceGroupId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun :: Lens.Lens' CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Bool)
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun = Lens.lens (\CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {dryRun} -> dryRun) (\s@CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {dryRun = a} :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The tags assigned to the local gateway route table virtual interface
+-- group association.
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_tagSpecifications :: Lens.Lens' CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe [TagSpecification])
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_tagSpecifications = Lens.lens (\CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {tagSpecifications} -> tagSpecifications) (\s@CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {tagSpecifications = a} :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the local gateway route table.
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId :: Lens.Lens' CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation Prelude.Text
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId = Lens.lens (\CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayRouteTableId = a} :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The ID of the local gateway route table virtual interface group
+-- association.
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId :: Lens.Lens' CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation Prelude.Text
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId = Lens.lens (\CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayVirtualInterfaceGroupId} -> localGatewayVirtualInterfaceGroupId) (\s@CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayVirtualInterfaceGroupId = a} :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+instance
+  Core.AWSRequest
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  type
+    AWSResponse
+      CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+      CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayRouteTableVirtualInterfaceGroupAssociation"
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  hashWithSalt
+    _salt
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` localGatewayRouteTableId
+        `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupId
+
+instance
+  Prelude.NFData
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  rnf
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf tagSpecifications
+        `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+        `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupId
+
+instance
+  Data.ToHeaders
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  toQuery
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            ( Data.toQueryList "TagSpecification"
+                Prelude.<$> tagSpecifications
+            ),
+          "LocalGatewayRouteTableId"
+            Data.=: localGatewayRouteTableId,
+          "LocalGatewayVirtualInterfaceGroupId"
+            Data.=: localGatewayVirtualInterfaceGroupId
+        ]
+
+-- | /See:/ 'newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' smart constructor.
+data CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse = CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'
+  { -- | Information about the local gateway route table virtual interface group
+    -- association.
+    localGatewayRouteTableVirtualInterfaceGroupAssociation :: Prelude.Maybe LocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableVirtualInterfaceGroupAssociation', 'createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation' - Information about the local gateway route table virtual interface group
+-- association.
+--
+-- 'httpStatus', 'createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus' - The response's http status code.
+newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+  pHttpStatus_ =
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'
+      { localGatewayRouteTableVirtualInterfaceGroupAssociation =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the local gateway route table virtual interface group
+-- association.
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation :: Lens.Lens' CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse (Prelude.Maybe LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation = Lens.lens (\CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {localGatewayRouteTableVirtualInterfaceGroupAssociation} -> localGatewayRouteTableVirtualInterfaceGroupAssociation) (\s@CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {} a -> s {localGatewayRouteTableVirtualInterfaceGroupAssociation = a} :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse)
+
+-- | The response's http status code.
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus :: Lens.Lens' CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse Prelude.Int
+createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus = Lens.lens (\CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {httpStatus} -> httpStatus) (\s@CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {} a -> s {httpStatus = a} :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse)
+
+instance
+  Prelude.NFData
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+  where
+  rnf
+    CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {..} =
+      Prelude.rnf
+        localGatewayRouteTableVirtualInterfaceGroupAssociation
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateLocalGatewayRouteTableVpcAssociation.hs b/gen/Amazonka/EC2/CreateLocalGatewayRouteTableVpcAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateLocalGatewayRouteTableVpcAssociation.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateLocalGatewayRouteTableVpcAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified VPC with the specified local gateway route
+-- table.
+module Amazonka.EC2.CreateLocalGatewayRouteTableVpcAssociation
+  ( -- * Creating a Request
+    CreateLocalGatewayRouteTableVpcAssociation (..),
+    newCreateLocalGatewayRouteTableVpcAssociation,
+
+    -- * Request Lenses
+    createLocalGatewayRouteTableVpcAssociation_dryRun,
+    createLocalGatewayRouteTableVpcAssociation_tagSpecifications,
+    createLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableId,
+    createLocalGatewayRouteTableVpcAssociation_vpcId,
+
+    -- * Destructuring the Response
+    CreateLocalGatewayRouteTableVpcAssociationResponse (..),
+    newCreateLocalGatewayRouteTableVpcAssociationResponse,
+
+    -- * Response Lenses
+    createLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation,
+    createLocalGatewayRouteTableVpcAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateLocalGatewayRouteTableVpcAssociation' smart constructor.
+data CreateLocalGatewayRouteTableVpcAssociation = CreateLocalGatewayRouteTableVpcAssociation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the local gateway route table VPC association.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteTableVpcAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createLocalGatewayRouteTableVpcAssociation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createLocalGatewayRouteTableVpcAssociation_tagSpecifications' - The tags to assign to the local gateway route table VPC association.
+--
+-- 'localGatewayRouteTableId', 'createLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'vpcId', 'createLocalGatewayRouteTableVpcAssociation_vpcId' - The ID of the VPC.
+newCreateLocalGatewayRouteTableVpcAssociation ::
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateLocalGatewayRouteTableVpcAssociation
+newCreateLocalGatewayRouteTableVpcAssociation
+  pLocalGatewayRouteTableId_
+  pVpcId_ =
+    CreateLocalGatewayRouteTableVpcAssociation'
+      { dryRun =
+          Prelude.Nothing,
+        tagSpecifications =
+          Prelude.Nothing,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_,
+        vpcId = pVpcId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createLocalGatewayRouteTableVpcAssociation_dryRun :: Lens.Lens' CreateLocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Bool)
+createLocalGatewayRouteTableVpcAssociation_dryRun = Lens.lens (\CreateLocalGatewayRouteTableVpcAssociation' {dryRun} -> dryRun) (\s@CreateLocalGatewayRouteTableVpcAssociation' {} a -> s {dryRun = a} :: CreateLocalGatewayRouteTableVpcAssociation)
+
+-- | The tags to assign to the local gateway route table VPC association.
+createLocalGatewayRouteTableVpcAssociation_tagSpecifications :: Lens.Lens' CreateLocalGatewayRouteTableVpcAssociation (Prelude.Maybe [TagSpecification])
+createLocalGatewayRouteTableVpcAssociation_tagSpecifications = Lens.lens (\CreateLocalGatewayRouteTableVpcAssociation' {tagSpecifications} -> tagSpecifications) (\s@CreateLocalGatewayRouteTableVpcAssociation' {} a -> s {tagSpecifications = a} :: CreateLocalGatewayRouteTableVpcAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the local gateway route table.
+createLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableId :: Lens.Lens' CreateLocalGatewayRouteTableVpcAssociation Prelude.Text
+createLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableId = Lens.lens (\CreateLocalGatewayRouteTableVpcAssociation' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@CreateLocalGatewayRouteTableVpcAssociation' {} a -> s {localGatewayRouteTableId = a} :: CreateLocalGatewayRouteTableVpcAssociation)
+
+-- | The ID of the VPC.
+createLocalGatewayRouteTableVpcAssociation_vpcId :: Lens.Lens' CreateLocalGatewayRouteTableVpcAssociation Prelude.Text
+createLocalGatewayRouteTableVpcAssociation_vpcId = Lens.lens (\CreateLocalGatewayRouteTableVpcAssociation' {vpcId} -> vpcId) (\s@CreateLocalGatewayRouteTableVpcAssociation' {} a -> s {vpcId = a} :: CreateLocalGatewayRouteTableVpcAssociation)
+
+instance
+  Core.AWSRequest
+    CreateLocalGatewayRouteTableVpcAssociation
+  where
+  type
+    AWSResponse
+      CreateLocalGatewayRouteTableVpcAssociation =
+      CreateLocalGatewayRouteTableVpcAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateLocalGatewayRouteTableVpcAssociationResponse'
+            Prelude.<$> (x Data..@? "localGatewayRouteTableVpcAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateLocalGatewayRouteTableVpcAssociation
+  where
+  hashWithSalt
+    _salt
+    CreateLocalGatewayRouteTableVpcAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` localGatewayRouteTableId
+        `Prelude.hashWithSalt` vpcId
+
+instance
+  Prelude.NFData
+    CreateLocalGatewayRouteTableVpcAssociation
+  where
+  rnf CreateLocalGatewayRouteTableVpcAssociation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance
+  Data.ToHeaders
+    CreateLocalGatewayRouteTableVpcAssociation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateLocalGatewayRouteTableVpcAssociation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateLocalGatewayRouteTableVpcAssociation
+  where
+  toQuery
+    CreateLocalGatewayRouteTableVpcAssociation' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "CreateLocalGatewayRouteTableVpcAssociation" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            ( Data.toQueryList "TagSpecification"
+                Prelude.<$> tagSpecifications
+            ),
+          "LocalGatewayRouteTableId"
+            Data.=: localGatewayRouteTableId,
+          "VpcId" Data.=: vpcId
+        ]
+
+-- | /See:/ 'newCreateLocalGatewayRouteTableVpcAssociationResponse' smart constructor.
+data CreateLocalGatewayRouteTableVpcAssociationResponse = CreateLocalGatewayRouteTableVpcAssociationResponse'
+  { -- | Information about the association.
+    localGatewayRouteTableVpcAssociation :: Prelude.Maybe LocalGatewayRouteTableVpcAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLocalGatewayRouteTableVpcAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableVpcAssociation', 'createLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation' - Information about the association.
+--
+-- 'httpStatus', 'createLocalGatewayRouteTableVpcAssociationResponse_httpStatus' - The response's http status code.
+newCreateLocalGatewayRouteTableVpcAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLocalGatewayRouteTableVpcAssociationResponse
+newCreateLocalGatewayRouteTableVpcAssociationResponse
+  pHttpStatus_ =
+    CreateLocalGatewayRouteTableVpcAssociationResponse'
+      { localGatewayRouteTableVpcAssociation =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the association.
+createLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation :: Lens.Lens' CreateLocalGatewayRouteTableVpcAssociationResponse (Prelude.Maybe LocalGatewayRouteTableVpcAssociation)
+createLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation = Lens.lens (\CreateLocalGatewayRouteTableVpcAssociationResponse' {localGatewayRouteTableVpcAssociation} -> localGatewayRouteTableVpcAssociation) (\s@CreateLocalGatewayRouteTableVpcAssociationResponse' {} a -> s {localGatewayRouteTableVpcAssociation = a} :: CreateLocalGatewayRouteTableVpcAssociationResponse)
+
+-- | The response's http status code.
+createLocalGatewayRouteTableVpcAssociationResponse_httpStatus :: Lens.Lens' CreateLocalGatewayRouteTableVpcAssociationResponse Prelude.Int
+createLocalGatewayRouteTableVpcAssociationResponse_httpStatus = Lens.lens (\CreateLocalGatewayRouteTableVpcAssociationResponse' {httpStatus} -> httpStatus) (\s@CreateLocalGatewayRouteTableVpcAssociationResponse' {} a -> s {httpStatus = a} :: CreateLocalGatewayRouteTableVpcAssociationResponse)
+
+instance
+  Prelude.NFData
+    CreateLocalGatewayRouteTableVpcAssociationResponse
+  where
+  rnf
+    CreateLocalGatewayRouteTableVpcAssociationResponse' {..} =
+      Prelude.rnf localGatewayRouteTableVpcAssociation
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateManagedPrefixList.hs b/gen/Amazonka/EC2/CreateManagedPrefixList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateManagedPrefixList.hs
@@ -0,0 +1,291 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateManagedPrefixList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a managed prefix list. You can specify one or more entries for
+-- the prefix list. Each entry consists of a CIDR block and an optional
+-- description.
+module Amazonka.EC2.CreateManagedPrefixList
+  ( -- * Creating a Request
+    CreateManagedPrefixList (..),
+    newCreateManagedPrefixList,
+
+    -- * Request Lenses
+    createManagedPrefixList_clientToken,
+    createManagedPrefixList_dryRun,
+    createManagedPrefixList_entries,
+    createManagedPrefixList_tagSpecifications,
+    createManagedPrefixList_prefixListName,
+    createManagedPrefixList_maxEntries,
+    createManagedPrefixList_addressFamily,
+
+    -- * Destructuring the Response
+    CreateManagedPrefixListResponse (..),
+    newCreateManagedPrefixListResponse,
+
+    -- * Response Lenses
+    createManagedPrefixListResponse_prefixList,
+    createManagedPrefixListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateManagedPrefixList' smart constructor.
+data CreateManagedPrefixList = CreateManagedPrefixList'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    --
+    -- Constraints: Up to 255 UTF-8 characters in length.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more entries for the prefix list.
+    entries :: Prelude.Maybe [AddPrefixListEntry],
+    -- | The tags to apply to the prefix list during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | A name for the prefix list.
+    --
+    -- Constraints: Up to 255 characters in length. The name cannot start with
+    -- @com.amazonaws@.
+    prefixListName :: Prelude.Text,
+    -- | The maximum number of entries for the prefix list.
+    maxEntries :: Prelude.Int,
+    -- | The IP address type.
+    --
+    -- Valid Values: @IPv4@ | @IPv6@
+    addressFamily :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateManagedPrefixList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createManagedPrefixList_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- Constraints: Up to 255 UTF-8 characters in length.
+--
+-- 'dryRun', 'createManagedPrefixList_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'entries', 'createManagedPrefixList_entries' - One or more entries for the prefix list.
+--
+-- 'tagSpecifications', 'createManagedPrefixList_tagSpecifications' - The tags to apply to the prefix list during creation.
+--
+-- 'prefixListName', 'createManagedPrefixList_prefixListName' - A name for the prefix list.
+--
+-- Constraints: Up to 255 characters in length. The name cannot start with
+-- @com.amazonaws@.
+--
+-- 'maxEntries', 'createManagedPrefixList_maxEntries' - The maximum number of entries for the prefix list.
+--
+-- 'addressFamily', 'createManagedPrefixList_addressFamily' - The IP address type.
+--
+-- Valid Values: @IPv4@ | @IPv6@
+newCreateManagedPrefixList ::
+  -- | 'prefixListName'
+  Prelude.Text ->
+  -- | 'maxEntries'
+  Prelude.Int ->
+  -- | 'addressFamily'
+  Prelude.Text ->
+  CreateManagedPrefixList
+newCreateManagedPrefixList
+  pPrefixListName_
+  pMaxEntries_
+  pAddressFamily_ =
+    CreateManagedPrefixList'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        entries = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        prefixListName = pPrefixListName_,
+        maxEntries = pMaxEntries_,
+        addressFamily = pAddressFamily_
+      }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- Constraints: Up to 255 UTF-8 characters in length.
+createManagedPrefixList_clientToken :: Lens.Lens' CreateManagedPrefixList (Prelude.Maybe Prelude.Text)
+createManagedPrefixList_clientToken = Lens.lens (\CreateManagedPrefixList' {clientToken} -> clientToken) (\s@CreateManagedPrefixList' {} a -> s {clientToken = a} :: CreateManagedPrefixList)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createManagedPrefixList_dryRun :: Lens.Lens' CreateManagedPrefixList (Prelude.Maybe Prelude.Bool)
+createManagedPrefixList_dryRun = Lens.lens (\CreateManagedPrefixList' {dryRun} -> dryRun) (\s@CreateManagedPrefixList' {} a -> s {dryRun = a} :: CreateManagedPrefixList)
+
+-- | One or more entries for the prefix list.
+createManagedPrefixList_entries :: Lens.Lens' CreateManagedPrefixList (Prelude.Maybe [AddPrefixListEntry])
+createManagedPrefixList_entries = Lens.lens (\CreateManagedPrefixList' {entries} -> entries) (\s@CreateManagedPrefixList' {} a -> s {entries = a} :: CreateManagedPrefixList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to apply to the prefix list during creation.
+createManagedPrefixList_tagSpecifications :: Lens.Lens' CreateManagedPrefixList (Prelude.Maybe [TagSpecification])
+createManagedPrefixList_tagSpecifications = Lens.lens (\CreateManagedPrefixList' {tagSpecifications} -> tagSpecifications) (\s@CreateManagedPrefixList' {} a -> s {tagSpecifications = a} :: CreateManagedPrefixList) Prelude.. Lens.mapping Lens.coerced
+
+-- | A name for the prefix list.
+--
+-- Constraints: Up to 255 characters in length. The name cannot start with
+-- @com.amazonaws@.
+createManagedPrefixList_prefixListName :: Lens.Lens' CreateManagedPrefixList Prelude.Text
+createManagedPrefixList_prefixListName = Lens.lens (\CreateManagedPrefixList' {prefixListName} -> prefixListName) (\s@CreateManagedPrefixList' {} a -> s {prefixListName = a} :: CreateManagedPrefixList)
+
+-- | The maximum number of entries for the prefix list.
+createManagedPrefixList_maxEntries :: Lens.Lens' CreateManagedPrefixList Prelude.Int
+createManagedPrefixList_maxEntries = Lens.lens (\CreateManagedPrefixList' {maxEntries} -> maxEntries) (\s@CreateManagedPrefixList' {} a -> s {maxEntries = a} :: CreateManagedPrefixList)
+
+-- | The IP address type.
+--
+-- Valid Values: @IPv4@ | @IPv6@
+createManagedPrefixList_addressFamily :: Lens.Lens' CreateManagedPrefixList Prelude.Text
+createManagedPrefixList_addressFamily = Lens.lens (\CreateManagedPrefixList' {addressFamily} -> addressFamily) (\s@CreateManagedPrefixList' {} a -> s {addressFamily = a} :: CreateManagedPrefixList)
+
+instance Core.AWSRequest CreateManagedPrefixList where
+  type
+    AWSResponse CreateManagedPrefixList =
+      CreateManagedPrefixListResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateManagedPrefixListResponse'
+            Prelude.<$> (x Data..@? "prefixList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateManagedPrefixList where
+  hashWithSalt _salt CreateManagedPrefixList' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` entries
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` prefixListName
+      `Prelude.hashWithSalt` maxEntries
+      `Prelude.hashWithSalt` addressFamily
+
+instance Prelude.NFData CreateManagedPrefixList where
+  rnf CreateManagedPrefixList' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf entries
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf prefixListName
+      `Prelude.seq` Prelude.rnf maxEntries
+      `Prelude.seq` Prelude.rnf addressFamily
+
+instance Data.ToHeaders CreateManagedPrefixList where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateManagedPrefixList where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateManagedPrefixList where
+  toQuery CreateManagedPrefixList' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateManagedPrefixList" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Entry" Prelude.<$> entries),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "PrefixListName" Data.=: prefixListName,
+        "MaxEntries" Data.=: maxEntries,
+        "AddressFamily" Data.=: addressFamily
+      ]
+
+-- | /See:/ 'newCreateManagedPrefixListResponse' smart constructor.
+data CreateManagedPrefixListResponse = CreateManagedPrefixListResponse'
+  { -- | Information about the prefix list.
+    prefixList :: Prelude.Maybe ManagedPrefixList,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateManagedPrefixListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'prefixList', 'createManagedPrefixListResponse_prefixList' - Information about the prefix list.
+--
+-- 'httpStatus', 'createManagedPrefixListResponse_httpStatus' - The response's http status code.
+newCreateManagedPrefixListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateManagedPrefixListResponse
+newCreateManagedPrefixListResponse pHttpStatus_ =
+  CreateManagedPrefixListResponse'
+    { prefixList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the prefix list.
+createManagedPrefixListResponse_prefixList :: Lens.Lens' CreateManagedPrefixListResponse (Prelude.Maybe ManagedPrefixList)
+createManagedPrefixListResponse_prefixList = Lens.lens (\CreateManagedPrefixListResponse' {prefixList} -> prefixList) (\s@CreateManagedPrefixListResponse' {} a -> s {prefixList = a} :: CreateManagedPrefixListResponse)
+
+-- | The response's http status code.
+createManagedPrefixListResponse_httpStatus :: Lens.Lens' CreateManagedPrefixListResponse Prelude.Int
+createManagedPrefixListResponse_httpStatus = Lens.lens (\CreateManagedPrefixListResponse' {httpStatus} -> httpStatus) (\s@CreateManagedPrefixListResponse' {} a -> s {httpStatus = a} :: CreateManagedPrefixListResponse)
+
+instance
+  Prelude.NFData
+    CreateManagedPrefixListResponse
+  where
+  rnf CreateManagedPrefixListResponse' {..} =
+    Prelude.rnf prefixList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateNatGateway.hs b/gen/Amazonka/EC2/CreateNatGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNatGateway.hs
@@ -0,0 +1,312 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNatGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a NAT gateway in the specified subnet. This action creates a
+-- network interface in the specified subnet with a private IP address from
+-- the IP address range of the subnet. You can create either a public NAT
+-- gateway or a private NAT gateway.
+--
+-- With a public NAT gateway, internet-bound traffic from a private subnet
+-- can be routed to the NAT gateway, so that instances in a private subnet
+-- can connect to the internet.
+--
+-- With a private NAT gateway, private communication is routed across VPCs
+-- and on-premises networks through a transit gateway or virtual private
+-- gateway. Common use cases include running large workloads behind a small
+-- pool of allowlisted IPv4 addresses, preserving private IPv4 addresses,
+-- and communicating between overlapping networks.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html NAT gateways>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateNatGateway
+  ( -- * Creating a Request
+    CreateNatGateway (..),
+    newCreateNatGateway,
+
+    -- * Request Lenses
+    createNatGateway_allocationId,
+    createNatGateway_clientToken,
+    createNatGateway_connectivityType,
+    createNatGateway_dryRun,
+    createNatGateway_privateIpAddress,
+    createNatGateway_tagSpecifications,
+    createNatGateway_subnetId,
+
+    -- * Destructuring the Response
+    CreateNatGatewayResponse (..),
+    newCreateNatGatewayResponse,
+
+    -- * Response Lenses
+    createNatGatewayResponse_clientToken,
+    createNatGatewayResponse_natGateway,
+    createNatGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNatGateway' smart constructor.
+data CreateNatGateway = CreateNatGateway'
+  { -- | [Public NAT gateways only] The allocation ID of an Elastic IP address to
+    -- associate with the NAT gateway. You cannot specify an Elastic IP address
+    -- with a private NAT gateway. If the Elastic IP address is associated with
+    -- another resource, you must first disassociate it.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    --
+    -- Constraint: Maximum 64 ASCII characters.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the NAT gateway supports public or private
+    -- connectivity. The default is public connectivity.
+    connectivityType :: Prelude.Maybe ConnectivityType,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The private IPv4 address to assign to the NAT gateway. If you don\'t
+    -- provide an address, a private IPv4 address will be automatically
+    -- assigned.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the NAT gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The subnet in which to create the NAT gateway.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNatGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'createNatGateway_allocationId' - [Public NAT gateways only] The allocation ID of an Elastic IP address to
+-- associate with the NAT gateway. You cannot specify an Elastic IP address
+-- with a private NAT gateway. If the Elastic IP address is associated with
+-- another resource, you must first disassociate it.
+--
+-- 'clientToken', 'createNatGateway_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- Constraint: Maximum 64 ASCII characters.
+--
+-- 'connectivityType', 'createNatGateway_connectivityType' - Indicates whether the NAT gateway supports public or private
+-- connectivity. The default is public connectivity.
+--
+-- 'dryRun', 'createNatGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'privateIpAddress', 'createNatGateway_privateIpAddress' - The private IPv4 address to assign to the NAT gateway. If you don\'t
+-- provide an address, a private IPv4 address will be automatically
+-- assigned.
+--
+-- 'tagSpecifications', 'createNatGateway_tagSpecifications' - The tags to assign to the NAT gateway.
+--
+-- 'subnetId', 'createNatGateway_subnetId' - The subnet in which to create the NAT gateway.
+newCreateNatGateway ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  CreateNatGateway
+newCreateNatGateway pSubnetId_ =
+  CreateNatGateway'
+    { allocationId = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      connectivityType = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      subnetId = pSubnetId_
+    }
+
+-- | [Public NAT gateways only] The allocation ID of an Elastic IP address to
+-- associate with the NAT gateway. You cannot specify an Elastic IP address
+-- with a private NAT gateway. If the Elastic IP address is associated with
+-- another resource, you must first disassociate it.
+createNatGateway_allocationId :: Lens.Lens' CreateNatGateway (Prelude.Maybe Prelude.Text)
+createNatGateway_allocationId = Lens.lens (\CreateNatGateway' {allocationId} -> allocationId) (\s@CreateNatGateway' {} a -> s {allocationId = a} :: CreateNatGateway)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- Constraint: Maximum 64 ASCII characters.
+createNatGateway_clientToken :: Lens.Lens' CreateNatGateway (Prelude.Maybe Prelude.Text)
+createNatGateway_clientToken = Lens.lens (\CreateNatGateway' {clientToken} -> clientToken) (\s@CreateNatGateway' {} a -> s {clientToken = a} :: CreateNatGateway)
+
+-- | Indicates whether the NAT gateway supports public or private
+-- connectivity. The default is public connectivity.
+createNatGateway_connectivityType :: Lens.Lens' CreateNatGateway (Prelude.Maybe ConnectivityType)
+createNatGateway_connectivityType = Lens.lens (\CreateNatGateway' {connectivityType} -> connectivityType) (\s@CreateNatGateway' {} a -> s {connectivityType = a} :: CreateNatGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNatGateway_dryRun :: Lens.Lens' CreateNatGateway (Prelude.Maybe Prelude.Bool)
+createNatGateway_dryRun = Lens.lens (\CreateNatGateway' {dryRun} -> dryRun) (\s@CreateNatGateway' {} a -> s {dryRun = a} :: CreateNatGateway)
+
+-- | The private IPv4 address to assign to the NAT gateway. If you don\'t
+-- provide an address, a private IPv4 address will be automatically
+-- assigned.
+createNatGateway_privateIpAddress :: Lens.Lens' CreateNatGateway (Prelude.Maybe Prelude.Text)
+createNatGateway_privateIpAddress = Lens.lens (\CreateNatGateway' {privateIpAddress} -> privateIpAddress) (\s@CreateNatGateway' {} a -> s {privateIpAddress = a} :: CreateNatGateway)
+
+-- | The tags to assign to the NAT gateway.
+createNatGateway_tagSpecifications :: Lens.Lens' CreateNatGateway (Prelude.Maybe [TagSpecification])
+createNatGateway_tagSpecifications = Lens.lens (\CreateNatGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateNatGateway' {} a -> s {tagSpecifications = a} :: CreateNatGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The subnet in which to create the NAT gateway.
+createNatGateway_subnetId :: Lens.Lens' CreateNatGateway Prelude.Text
+createNatGateway_subnetId = Lens.lens (\CreateNatGateway' {subnetId} -> subnetId) (\s@CreateNatGateway' {} a -> s {subnetId = a} :: CreateNatGateway)
+
+instance Core.AWSRequest CreateNatGateway where
+  type
+    AWSResponse CreateNatGateway =
+      CreateNatGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateNatGatewayResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "natGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNatGateway where
+  hashWithSalt _salt CreateNatGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` connectivityType
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData CreateNatGateway where
+  rnf CreateNatGateway' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf connectivityType
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance Data.ToHeaders CreateNatGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNatGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateNatGateway where
+  toQuery CreateNatGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateNatGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllocationId" Data.=: allocationId,
+        "ClientToken" Data.=: clientToken,
+        "ConnectivityType" Data.=: connectivityType,
+        "DryRun" Data.=: dryRun,
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newCreateNatGatewayResponse' smart constructor.
+data CreateNatGatewayResponse = CreateNatGatewayResponse'
+  { -- | Unique, case-sensitive identifier to ensure the idempotency of the
+    -- request. Only returned if a client token was provided in the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the NAT gateway.
+    natGateway :: Prelude.Maybe NatGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNatGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createNatGatewayResponse_clientToken' - Unique, case-sensitive identifier to ensure the idempotency of the
+-- request. Only returned if a client token was provided in the request.
+--
+-- 'natGateway', 'createNatGatewayResponse_natGateway' - Information about the NAT gateway.
+--
+-- 'httpStatus', 'createNatGatewayResponse_httpStatus' - The response's http status code.
+newCreateNatGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNatGatewayResponse
+newCreateNatGatewayResponse pHttpStatus_ =
+  CreateNatGatewayResponse'
+    { clientToken =
+        Prelude.Nothing,
+      natGateway = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier to ensure the idempotency of the
+-- request. Only returned if a client token was provided in the request.
+createNatGatewayResponse_clientToken :: Lens.Lens' CreateNatGatewayResponse (Prelude.Maybe Prelude.Text)
+createNatGatewayResponse_clientToken = Lens.lens (\CreateNatGatewayResponse' {clientToken} -> clientToken) (\s@CreateNatGatewayResponse' {} a -> s {clientToken = a} :: CreateNatGatewayResponse)
+
+-- | Information about the NAT gateway.
+createNatGatewayResponse_natGateway :: Lens.Lens' CreateNatGatewayResponse (Prelude.Maybe NatGateway)
+createNatGatewayResponse_natGateway = Lens.lens (\CreateNatGatewayResponse' {natGateway} -> natGateway) (\s@CreateNatGatewayResponse' {} a -> s {natGateway = a} :: CreateNatGatewayResponse)
+
+-- | The response's http status code.
+createNatGatewayResponse_httpStatus :: Lens.Lens' CreateNatGatewayResponse Prelude.Int
+createNatGatewayResponse_httpStatus = Lens.lens (\CreateNatGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateNatGatewayResponse' {} a -> s {httpStatus = a} :: CreateNatGatewayResponse)
+
+instance Prelude.NFData CreateNatGatewayResponse where
+  rnf CreateNatGatewayResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf natGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateNetworkAcl.hs b/gen/Amazonka/EC2/CreateNetworkAcl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNetworkAcl.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNetworkAcl
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a network ACL in a VPC. Network ACLs provide an optional layer
+-- of security (in addition to security groups) for the instances in your
+-- VPC.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html Network ACLs>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateNetworkAcl
+  ( -- * Creating a Request
+    CreateNetworkAcl (..),
+    newCreateNetworkAcl,
+
+    -- * Request Lenses
+    createNetworkAcl_dryRun,
+    createNetworkAcl_tagSpecifications,
+    createNetworkAcl_vpcId,
+
+    -- * Destructuring the Response
+    CreateNetworkAclResponse (..),
+    newCreateNetworkAclResponse,
+
+    -- * Response Lenses
+    createNetworkAclResponse_networkAcl,
+    createNetworkAclResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkAcl' smart constructor.
+data CreateNetworkAcl = CreateNetworkAcl'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the network ACL.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkAcl' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createNetworkAcl_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createNetworkAcl_tagSpecifications' - The tags to assign to the network ACL.
+--
+-- 'vpcId', 'createNetworkAcl_vpcId' - The ID of the VPC.
+newCreateNetworkAcl ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateNetworkAcl
+newCreateNetworkAcl pVpcId_ =
+  CreateNetworkAcl'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNetworkAcl_dryRun :: Lens.Lens' CreateNetworkAcl (Prelude.Maybe Prelude.Bool)
+createNetworkAcl_dryRun = Lens.lens (\CreateNetworkAcl' {dryRun} -> dryRun) (\s@CreateNetworkAcl' {} a -> s {dryRun = a} :: CreateNetworkAcl)
+
+-- | The tags to assign to the network ACL.
+createNetworkAcl_tagSpecifications :: Lens.Lens' CreateNetworkAcl (Prelude.Maybe [TagSpecification])
+createNetworkAcl_tagSpecifications = Lens.lens (\CreateNetworkAcl' {tagSpecifications} -> tagSpecifications) (\s@CreateNetworkAcl' {} a -> s {tagSpecifications = a} :: CreateNetworkAcl) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+createNetworkAcl_vpcId :: Lens.Lens' CreateNetworkAcl Prelude.Text
+createNetworkAcl_vpcId = Lens.lens (\CreateNetworkAcl' {vpcId} -> vpcId) (\s@CreateNetworkAcl' {} a -> s {vpcId = a} :: CreateNetworkAcl)
+
+instance Core.AWSRequest CreateNetworkAcl where
+  type
+    AWSResponse CreateNetworkAcl =
+      CreateNetworkAclResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateNetworkAclResponse'
+            Prelude.<$> (x Data..@? "networkAcl")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNetworkAcl where
+  hashWithSalt _salt CreateNetworkAcl' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CreateNetworkAcl where
+  rnf CreateNetworkAcl' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders CreateNetworkAcl where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNetworkAcl where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateNetworkAcl where
+  toQuery CreateNetworkAcl' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateNetworkAcl" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newCreateNetworkAclResponse' smart constructor.
+data CreateNetworkAclResponse = CreateNetworkAclResponse'
+  { -- | Information about the network ACL.
+    networkAcl :: Prelude.Maybe NetworkAcl,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkAclResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkAcl', 'createNetworkAclResponse_networkAcl' - Information about the network ACL.
+--
+-- 'httpStatus', 'createNetworkAclResponse_httpStatus' - The response's http status code.
+newCreateNetworkAclResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkAclResponse
+newCreateNetworkAclResponse pHttpStatus_ =
+  CreateNetworkAclResponse'
+    { networkAcl =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the network ACL.
+createNetworkAclResponse_networkAcl :: Lens.Lens' CreateNetworkAclResponse (Prelude.Maybe NetworkAcl)
+createNetworkAclResponse_networkAcl = Lens.lens (\CreateNetworkAclResponse' {networkAcl} -> networkAcl) (\s@CreateNetworkAclResponse' {} a -> s {networkAcl = a} :: CreateNetworkAclResponse)
+
+-- | The response's http status code.
+createNetworkAclResponse_httpStatus :: Lens.Lens' CreateNetworkAclResponse Prelude.Int
+createNetworkAclResponse_httpStatus = Lens.lens (\CreateNetworkAclResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkAclResponse' {} a -> s {httpStatus = a} :: CreateNetworkAclResponse)
+
+instance Prelude.NFData CreateNetworkAclResponse where
+  rnf CreateNetworkAclResponse' {..} =
+    Prelude.rnf networkAcl
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateNetworkAclEntry.hs b/gen/Amazonka/EC2/CreateNetworkAclEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNetworkAclEntry.hs
@@ -0,0 +1,336 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNetworkAclEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an entry (a rule) in a network ACL with the specified rule
+-- number. Each network ACL has a set of numbered ingress rules and a
+-- separate set of numbered egress rules. When determining whether a packet
+-- should be allowed in or out of a subnet associated with the ACL, we
+-- process the entries in the ACL according to the rule numbers, in
+-- ascending order. Each network ACL has a set of ingress rules and a
+-- separate set of egress rules.
+--
+-- We recommend that you leave room between the rule numbers (for example,
+-- 100, 110, 120, ...), and not number them one right after the other (for
+-- example, 101, 102, 103, ...). This makes it easier to add a rule between
+-- existing ones without having to renumber the rules.
+--
+-- After you add an entry, you can\'t modify it; you must either replace
+-- it, or create an entry and delete the old one.
+--
+-- For more information about network ACLs, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html Network ACLs>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateNetworkAclEntry
+  ( -- * Creating a Request
+    CreateNetworkAclEntry (..),
+    newCreateNetworkAclEntry,
+
+    -- * Request Lenses
+    createNetworkAclEntry_cidrBlock,
+    createNetworkAclEntry_dryRun,
+    createNetworkAclEntry_icmpTypeCode,
+    createNetworkAclEntry_ipv6CidrBlock,
+    createNetworkAclEntry_portRange,
+    createNetworkAclEntry_egress,
+    createNetworkAclEntry_networkAclId,
+    createNetworkAclEntry_protocol,
+    createNetworkAclEntry_ruleAction,
+    createNetworkAclEntry_ruleNumber,
+
+    -- * Destructuring the Response
+    CreateNetworkAclEntryResponse (..),
+    newCreateNetworkAclEntryResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkAclEntry' smart constructor.
+data CreateNetworkAclEntry = CreateNetworkAclEntry'
+  { -- | The IPv4 network range to allow or deny, in CIDR notation (for example
+    -- @172.16.0.0\/24@). We modify the specified CIDR block to its canonical
+    -- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+    -- @100.68.0.0\/18@.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
+    -- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
+    icmpTypeCode :: Prelude.Maybe IcmpTypeCode,
+    -- | The IPv6 network range to allow or deny, in CIDR notation (for example
+    -- @2001:db8:1234:1a00::\/64@).
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | TCP or UDP protocols: The range of ports the rule applies to. Required
+    -- if specifying protocol 6 (TCP) or 17 (UDP).
+    portRange :: Prelude.Maybe PortRange,
+    -- | Indicates whether this is an egress rule (rule is applied to traffic
+    -- leaving the subnet).
+    egress :: Prelude.Bool,
+    -- | The ID of the network ACL.
+    networkAclId :: Prelude.Text,
+    -- | The protocol number. A value of \"-1\" means all protocols. If you
+    -- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
+    -- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
+    -- any ports or ICMP types or codes that you specify. If you specify
+    -- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
+    -- ICMP types and codes allowed, regardless of any that you specify. If you
+    -- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
+    -- must specify an ICMP type and code.
+    protocol :: Prelude.Text,
+    -- | Indicates whether to allow or deny the traffic that matches the rule.
+    ruleAction :: RuleAction,
+    -- | The rule number for the entry (for example, 100). ACL entries are
+    -- processed in ascending order by rule number.
+    --
+    -- Constraints: Positive integer from 1 to 32766. The range 32767 to 65535
+    -- is reserved for internal use.
+    ruleNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkAclEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlock', 'createNetworkAclEntry_cidrBlock' - The IPv4 network range to allow or deny, in CIDR notation (for example
+-- @172.16.0.0\/24@). We modify the specified CIDR block to its canonical
+-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+-- @100.68.0.0\/18@.
+--
+-- 'dryRun', 'createNetworkAclEntry_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'icmpTypeCode', 'createNetworkAclEntry_icmpTypeCode' - ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
+-- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
+--
+-- 'ipv6CidrBlock', 'createNetworkAclEntry_ipv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation (for example
+-- @2001:db8:1234:1a00::\/64@).
+--
+-- 'portRange', 'createNetworkAclEntry_portRange' - TCP or UDP protocols: The range of ports the rule applies to. Required
+-- if specifying protocol 6 (TCP) or 17 (UDP).
+--
+-- 'egress', 'createNetworkAclEntry_egress' - Indicates whether this is an egress rule (rule is applied to traffic
+-- leaving the subnet).
+--
+-- 'networkAclId', 'createNetworkAclEntry_networkAclId' - The ID of the network ACL.
+--
+-- 'protocol', 'createNetworkAclEntry_protocol' - The protocol number. A value of \"-1\" means all protocols. If you
+-- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
+-- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
+-- any ports or ICMP types or codes that you specify. If you specify
+-- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
+-- ICMP types and codes allowed, regardless of any that you specify. If you
+-- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
+-- must specify an ICMP type and code.
+--
+-- 'ruleAction', 'createNetworkAclEntry_ruleAction' - Indicates whether to allow or deny the traffic that matches the rule.
+--
+-- 'ruleNumber', 'createNetworkAclEntry_ruleNumber' - The rule number for the entry (for example, 100). ACL entries are
+-- processed in ascending order by rule number.
+--
+-- Constraints: Positive integer from 1 to 32766. The range 32767 to 65535
+-- is reserved for internal use.
+newCreateNetworkAclEntry ::
+  -- | 'egress'
+  Prelude.Bool ->
+  -- | 'networkAclId'
+  Prelude.Text ->
+  -- | 'protocol'
+  Prelude.Text ->
+  -- | 'ruleAction'
+  RuleAction ->
+  -- | 'ruleNumber'
+  Prelude.Int ->
+  CreateNetworkAclEntry
+newCreateNetworkAclEntry
+  pEgress_
+  pNetworkAclId_
+  pProtocol_
+  pRuleAction_
+  pRuleNumber_ =
+    CreateNetworkAclEntry'
+      { cidrBlock = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        icmpTypeCode = Prelude.Nothing,
+        ipv6CidrBlock = Prelude.Nothing,
+        portRange = Prelude.Nothing,
+        egress = pEgress_,
+        networkAclId = pNetworkAclId_,
+        protocol = pProtocol_,
+        ruleAction = pRuleAction_,
+        ruleNumber = pRuleNumber_
+      }
+
+-- | The IPv4 network range to allow or deny, in CIDR notation (for example
+-- @172.16.0.0\/24@). We modify the specified CIDR block to its canonical
+-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+-- @100.68.0.0\/18@.
+createNetworkAclEntry_cidrBlock :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe Prelude.Text)
+createNetworkAclEntry_cidrBlock = Lens.lens (\CreateNetworkAclEntry' {cidrBlock} -> cidrBlock) (\s@CreateNetworkAclEntry' {} a -> s {cidrBlock = a} :: CreateNetworkAclEntry)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNetworkAclEntry_dryRun :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe Prelude.Bool)
+createNetworkAclEntry_dryRun = Lens.lens (\CreateNetworkAclEntry' {dryRun} -> dryRun) (\s@CreateNetworkAclEntry' {} a -> s {dryRun = a} :: CreateNetworkAclEntry)
+
+-- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
+-- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
+createNetworkAclEntry_icmpTypeCode :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe IcmpTypeCode)
+createNetworkAclEntry_icmpTypeCode = Lens.lens (\CreateNetworkAclEntry' {icmpTypeCode} -> icmpTypeCode) (\s@CreateNetworkAclEntry' {} a -> s {icmpTypeCode = a} :: CreateNetworkAclEntry)
+
+-- | The IPv6 network range to allow or deny, in CIDR notation (for example
+-- @2001:db8:1234:1a00::\/64@).
+createNetworkAclEntry_ipv6CidrBlock :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe Prelude.Text)
+createNetworkAclEntry_ipv6CidrBlock = Lens.lens (\CreateNetworkAclEntry' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@CreateNetworkAclEntry' {} a -> s {ipv6CidrBlock = a} :: CreateNetworkAclEntry)
+
+-- | TCP or UDP protocols: The range of ports the rule applies to. Required
+-- if specifying protocol 6 (TCP) or 17 (UDP).
+createNetworkAclEntry_portRange :: Lens.Lens' CreateNetworkAclEntry (Prelude.Maybe PortRange)
+createNetworkAclEntry_portRange = Lens.lens (\CreateNetworkAclEntry' {portRange} -> portRange) (\s@CreateNetworkAclEntry' {} a -> s {portRange = a} :: CreateNetworkAclEntry)
+
+-- | Indicates whether this is an egress rule (rule is applied to traffic
+-- leaving the subnet).
+createNetworkAclEntry_egress :: Lens.Lens' CreateNetworkAclEntry Prelude.Bool
+createNetworkAclEntry_egress = Lens.lens (\CreateNetworkAclEntry' {egress} -> egress) (\s@CreateNetworkAclEntry' {} a -> s {egress = a} :: CreateNetworkAclEntry)
+
+-- | The ID of the network ACL.
+createNetworkAclEntry_networkAclId :: Lens.Lens' CreateNetworkAclEntry Prelude.Text
+createNetworkAclEntry_networkAclId = Lens.lens (\CreateNetworkAclEntry' {networkAclId} -> networkAclId) (\s@CreateNetworkAclEntry' {} a -> s {networkAclId = a} :: CreateNetworkAclEntry)
+
+-- | The protocol number. A value of \"-1\" means all protocols. If you
+-- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
+-- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
+-- any ports or ICMP types or codes that you specify. If you specify
+-- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
+-- ICMP types and codes allowed, regardless of any that you specify. If you
+-- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
+-- must specify an ICMP type and code.
+createNetworkAclEntry_protocol :: Lens.Lens' CreateNetworkAclEntry Prelude.Text
+createNetworkAclEntry_protocol = Lens.lens (\CreateNetworkAclEntry' {protocol} -> protocol) (\s@CreateNetworkAclEntry' {} a -> s {protocol = a} :: CreateNetworkAclEntry)
+
+-- | Indicates whether to allow or deny the traffic that matches the rule.
+createNetworkAclEntry_ruleAction :: Lens.Lens' CreateNetworkAclEntry RuleAction
+createNetworkAclEntry_ruleAction = Lens.lens (\CreateNetworkAclEntry' {ruleAction} -> ruleAction) (\s@CreateNetworkAclEntry' {} a -> s {ruleAction = a} :: CreateNetworkAclEntry)
+
+-- | The rule number for the entry (for example, 100). ACL entries are
+-- processed in ascending order by rule number.
+--
+-- Constraints: Positive integer from 1 to 32766. The range 32767 to 65535
+-- is reserved for internal use.
+createNetworkAclEntry_ruleNumber :: Lens.Lens' CreateNetworkAclEntry Prelude.Int
+createNetworkAclEntry_ruleNumber = Lens.lens (\CreateNetworkAclEntry' {ruleNumber} -> ruleNumber) (\s@CreateNetworkAclEntry' {} a -> s {ruleNumber = a} :: CreateNetworkAclEntry)
+
+instance Core.AWSRequest CreateNetworkAclEntry where
+  type
+    AWSResponse CreateNetworkAclEntry =
+      CreateNetworkAclEntryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull CreateNetworkAclEntryResponse'
+
+instance Prelude.Hashable CreateNetworkAclEntry where
+  hashWithSalt _salt CreateNetworkAclEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` icmpTypeCode
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` portRange
+      `Prelude.hashWithSalt` egress
+      `Prelude.hashWithSalt` networkAclId
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` ruleNumber
+
+instance Prelude.NFData CreateNetworkAclEntry where
+  rnf CreateNetworkAclEntry' {..} =
+    Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf icmpTypeCode
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf portRange
+      `Prelude.seq` Prelude.rnf egress
+      `Prelude.seq` Prelude.rnf networkAclId
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf ruleNumber
+
+instance Data.ToHeaders CreateNetworkAclEntry where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNetworkAclEntry where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateNetworkAclEntry where
+  toQuery CreateNetworkAclEntry' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateNetworkAclEntry" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrBlock" Data.=: cidrBlock,
+        "DryRun" Data.=: dryRun,
+        "Icmp" Data.=: icmpTypeCode,
+        "Ipv6CidrBlock" Data.=: ipv6CidrBlock,
+        "PortRange" Data.=: portRange,
+        "Egress" Data.=: egress,
+        "NetworkAclId" Data.=: networkAclId,
+        "Protocol" Data.=: protocol,
+        "RuleAction" Data.=: ruleAction,
+        "RuleNumber" Data.=: ruleNumber
+      ]
+
+-- | /See:/ 'newCreateNetworkAclEntryResponse' smart constructor.
+data CreateNetworkAclEntryResponse = CreateNetworkAclEntryResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkAclEntryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateNetworkAclEntryResponse ::
+  CreateNetworkAclEntryResponse
+newCreateNetworkAclEntryResponse =
+  CreateNetworkAclEntryResponse'
+
+instance Prelude.NFData CreateNetworkAclEntryResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/CreateNetworkInsightsAccessScope.hs b/gen/Amazonka/EC2/CreateNetworkInsightsAccessScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNetworkInsightsAccessScope.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNetworkInsightsAccessScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Network Access Scope.
+--
+-- Amazon Web Services Network Access Analyzer enables cloud networking and
+-- cloud operations teams to verify that their networks on Amazon Web
+-- Services conform to their network security and governance objectives.
+-- For more information, see the
+-- <https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/ Amazon Web Services Network Access Analyzer Guide>.
+module Amazonka.EC2.CreateNetworkInsightsAccessScope
+  ( -- * Creating a Request
+    CreateNetworkInsightsAccessScope (..),
+    newCreateNetworkInsightsAccessScope,
+
+    -- * Request Lenses
+    createNetworkInsightsAccessScope_dryRun,
+    createNetworkInsightsAccessScope_excludePaths,
+    createNetworkInsightsAccessScope_matchPaths,
+    createNetworkInsightsAccessScope_tagSpecifications,
+    createNetworkInsightsAccessScope_clientToken,
+
+    -- * Destructuring the Response
+    CreateNetworkInsightsAccessScopeResponse (..),
+    newCreateNetworkInsightsAccessScopeResponse,
+
+    -- * Response Lenses
+    createNetworkInsightsAccessScopeResponse_networkInsightsAccessScope,
+    createNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeContent,
+    createNetworkInsightsAccessScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkInsightsAccessScope' smart constructor.
+data CreateNetworkInsightsAccessScope = CreateNetworkInsightsAccessScope'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The paths to exclude.
+    excludePaths :: Prelude.Maybe [AccessScopePathRequest],
+    -- | The paths to match.
+    matchPaths :: Prelude.Maybe [AccessScopePathRequest],
+    -- | The tags to apply.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInsightsAccessScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createNetworkInsightsAccessScope_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'excludePaths', 'createNetworkInsightsAccessScope_excludePaths' - The paths to exclude.
+--
+-- 'matchPaths', 'createNetworkInsightsAccessScope_matchPaths' - The paths to match.
+--
+-- 'tagSpecifications', 'createNetworkInsightsAccessScope_tagSpecifications' - The tags to apply.
+--
+-- 'clientToken', 'createNetworkInsightsAccessScope_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+newCreateNetworkInsightsAccessScope ::
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateNetworkInsightsAccessScope
+newCreateNetworkInsightsAccessScope pClientToken_ =
+  CreateNetworkInsightsAccessScope'
+    { dryRun =
+        Prelude.Nothing,
+      excludePaths = Prelude.Nothing,
+      matchPaths = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      clientToken = pClientToken_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNetworkInsightsAccessScope_dryRun :: Lens.Lens' CreateNetworkInsightsAccessScope (Prelude.Maybe Prelude.Bool)
+createNetworkInsightsAccessScope_dryRun = Lens.lens (\CreateNetworkInsightsAccessScope' {dryRun} -> dryRun) (\s@CreateNetworkInsightsAccessScope' {} a -> s {dryRun = a} :: CreateNetworkInsightsAccessScope)
+
+-- | The paths to exclude.
+createNetworkInsightsAccessScope_excludePaths :: Lens.Lens' CreateNetworkInsightsAccessScope (Prelude.Maybe [AccessScopePathRequest])
+createNetworkInsightsAccessScope_excludePaths = Lens.lens (\CreateNetworkInsightsAccessScope' {excludePaths} -> excludePaths) (\s@CreateNetworkInsightsAccessScope' {} a -> s {excludePaths = a} :: CreateNetworkInsightsAccessScope) Prelude.. Lens.mapping Lens.coerced
+
+-- | The paths to match.
+createNetworkInsightsAccessScope_matchPaths :: Lens.Lens' CreateNetworkInsightsAccessScope (Prelude.Maybe [AccessScopePathRequest])
+createNetworkInsightsAccessScope_matchPaths = Lens.lens (\CreateNetworkInsightsAccessScope' {matchPaths} -> matchPaths) (\s@CreateNetworkInsightsAccessScope' {} a -> s {matchPaths = a} :: CreateNetworkInsightsAccessScope) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to apply.
+createNetworkInsightsAccessScope_tagSpecifications :: Lens.Lens' CreateNetworkInsightsAccessScope (Prelude.Maybe [TagSpecification])
+createNetworkInsightsAccessScope_tagSpecifications = Lens.lens (\CreateNetworkInsightsAccessScope' {tagSpecifications} -> tagSpecifications) (\s@CreateNetworkInsightsAccessScope' {} a -> s {tagSpecifications = a} :: CreateNetworkInsightsAccessScope) Prelude.. Lens.mapping Lens.coerced
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createNetworkInsightsAccessScope_clientToken :: Lens.Lens' CreateNetworkInsightsAccessScope Prelude.Text
+createNetworkInsightsAccessScope_clientToken = Lens.lens (\CreateNetworkInsightsAccessScope' {clientToken} -> clientToken) (\s@CreateNetworkInsightsAccessScope' {} a -> s {clientToken = a} :: CreateNetworkInsightsAccessScope)
+
+instance
+  Core.AWSRequest
+    CreateNetworkInsightsAccessScope
+  where
+  type
+    AWSResponse CreateNetworkInsightsAccessScope =
+      CreateNetworkInsightsAccessScopeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateNetworkInsightsAccessScopeResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAccessScope")
+            Prelude.<*> (x Data..@? "networkInsightsAccessScopeContent")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateNetworkInsightsAccessScope
+  where
+  hashWithSalt
+    _salt
+    CreateNetworkInsightsAccessScope' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` excludePaths
+        `Prelude.hashWithSalt` matchPaths
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` clientToken
+
+instance
+  Prelude.NFData
+    CreateNetworkInsightsAccessScope
+  where
+  rnf CreateNetworkInsightsAccessScope' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf excludePaths
+      `Prelude.seq` Prelude.rnf matchPaths
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance
+  Data.ToHeaders
+    CreateNetworkInsightsAccessScope
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNetworkInsightsAccessScope where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateNetworkInsightsAccessScope
+  where
+  toQuery CreateNetworkInsightsAccessScope' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateNetworkInsightsAccessScope" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "ExcludePath"
+              Prelude.<$> excludePaths
+          ),
+        Data.toQuery
+          ( Data.toQueryList "MatchPath"
+              Prelude.<$> matchPaths
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "ClientToken" Data.=: clientToken
+      ]
+
+-- | /See:/ 'newCreateNetworkInsightsAccessScopeResponse' smart constructor.
+data CreateNetworkInsightsAccessScopeResponse = CreateNetworkInsightsAccessScopeResponse'
+  { -- | The Network Access Scope.
+    networkInsightsAccessScope :: Prelude.Maybe NetworkInsightsAccessScope,
+    -- | The Network Access Scope content.
+    networkInsightsAccessScopeContent :: Prelude.Maybe NetworkInsightsAccessScopeContent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInsightsAccessScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScope', 'createNetworkInsightsAccessScopeResponse_networkInsightsAccessScope' - The Network Access Scope.
+--
+-- 'networkInsightsAccessScopeContent', 'createNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeContent' - The Network Access Scope content.
+--
+-- 'httpStatus', 'createNetworkInsightsAccessScopeResponse_httpStatus' - The response's http status code.
+newCreateNetworkInsightsAccessScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkInsightsAccessScopeResponse
+newCreateNetworkInsightsAccessScopeResponse
+  pHttpStatus_ =
+    CreateNetworkInsightsAccessScopeResponse'
+      { networkInsightsAccessScope =
+          Prelude.Nothing,
+        networkInsightsAccessScopeContent =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Network Access Scope.
+createNetworkInsightsAccessScopeResponse_networkInsightsAccessScope :: Lens.Lens' CreateNetworkInsightsAccessScopeResponse (Prelude.Maybe NetworkInsightsAccessScope)
+createNetworkInsightsAccessScopeResponse_networkInsightsAccessScope = Lens.lens (\CreateNetworkInsightsAccessScopeResponse' {networkInsightsAccessScope} -> networkInsightsAccessScope) (\s@CreateNetworkInsightsAccessScopeResponse' {} a -> s {networkInsightsAccessScope = a} :: CreateNetworkInsightsAccessScopeResponse)
+
+-- | The Network Access Scope content.
+createNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeContent :: Lens.Lens' CreateNetworkInsightsAccessScopeResponse (Prelude.Maybe NetworkInsightsAccessScopeContent)
+createNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeContent = Lens.lens (\CreateNetworkInsightsAccessScopeResponse' {networkInsightsAccessScopeContent} -> networkInsightsAccessScopeContent) (\s@CreateNetworkInsightsAccessScopeResponse' {} a -> s {networkInsightsAccessScopeContent = a} :: CreateNetworkInsightsAccessScopeResponse)
+
+-- | The response's http status code.
+createNetworkInsightsAccessScopeResponse_httpStatus :: Lens.Lens' CreateNetworkInsightsAccessScopeResponse Prelude.Int
+createNetworkInsightsAccessScopeResponse_httpStatus = Lens.lens (\CreateNetworkInsightsAccessScopeResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkInsightsAccessScopeResponse' {} a -> s {httpStatus = a} :: CreateNetworkInsightsAccessScopeResponse)
+
+instance
+  Prelude.NFData
+    CreateNetworkInsightsAccessScopeResponse
+  where
+  rnf CreateNetworkInsightsAccessScopeResponse' {..} =
+    Prelude.rnf networkInsightsAccessScope
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeContent
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateNetworkInsightsPath.hs b/gen/Amazonka/EC2/CreateNetworkInsightsPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNetworkInsightsPath.hs
@@ -0,0 +1,307 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNetworkInsightsPath
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a path to analyze for reachability.
+--
+-- Reachability Analyzer enables you to analyze and debug network
+-- reachability between two resources in your virtual private cloud (VPC).
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/reachability/ What is Reachability Analyzer>.
+module Amazonka.EC2.CreateNetworkInsightsPath
+  ( -- * Creating a Request
+    CreateNetworkInsightsPath (..),
+    newCreateNetworkInsightsPath,
+
+    -- * Request Lenses
+    createNetworkInsightsPath_destinationIp,
+    createNetworkInsightsPath_destinationPort,
+    createNetworkInsightsPath_dryRun,
+    createNetworkInsightsPath_sourceIp,
+    createNetworkInsightsPath_tagSpecifications,
+    createNetworkInsightsPath_source,
+    createNetworkInsightsPath_destination,
+    createNetworkInsightsPath_protocol,
+    createNetworkInsightsPath_clientToken,
+
+    -- * Destructuring the Response
+    CreateNetworkInsightsPathResponse (..),
+    newCreateNetworkInsightsPathResponse,
+
+    -- * Response Lenses
+    createNetworkInsightsPathResponse_networkInsightsPath,
+    createNetworkInsightsPathResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkInsightsPath' smart constructor.
+data CreateNetworkInsightsPath = CreateNetworkInsightsPath'
+  { -- | The IP address of the Amazon Web Services resource that is the
+    -- destination of the path.
+    destinationIp :: Prelude.Maybe Prelude.Text,
+    -- | The destination port.
+    destinationPort :: Prelude.Maybe Prelude.Natural,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address of the Amazon Web Services resource that is the source of
+    -- the path.
+    sourceIp :: Prelude.Maybe Prelude.Text,
+    -- | The tags to add to the path.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The Amazon Web Services resource that is the source of the path.
+    source :: Prelude.Text,
+    -- | The Amazon Web Services resource that is the destination of the path.
+    destination :: Prelude.Text,
+    -- | The protocol.
+    protocol :: Protocol,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInsightsPath' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationIp', 'createNetworkInsightsPath_destinationIp' - The IP address of the Amazon Web Services resource that is the
+-- destination of the path.
+--
+-- 'destinationPort', 'createNetworkInsightsPath_destinationPort' - The destination port.
+--
+-- 'dryRun', 'createNetworkInsightsPath_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'sourceIp', 'createNetworkInsightsPath_sourceIp' - The IP address of the Amazon Web Services resource that is the source of
+-- the path.
+--
+-- 'tagSpecifications', 'createNetworkInsightsPath_tagSpecifications' - The tags to add to the path.
+--
+-- 'source', 'createNetworkInsightsPath_source' - The Amazon Web Services resource that is the source of the path.
+--
+-- 'destination', 'createNetworkInsightsPath_destination' - The Amazon Web Services resource that is the destination of the path.
+--
+-- 'protocol', 'createNetworkInsightsPath_protocol' - The protocol.
+--
+-- 'clientToken', 'createNetworkInsightsPath_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+newCreateNetworkInsightsPath ::
+  -- | 'source'
+  Prelude.Text ->
+  -- | 'destination'
+  Prelude.Text ->
+  -- | 'protocol'
+  Protocol ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  CreateNetworkInsightsPath
+newCreateNetworkInsightsPath
+  pSource_
+  pDestination_
+  pProtocol_
+  pClientToken_ =
+    CreateNetworkInsightsPath'
+      { destinationIp =
+          Prelude.Nothing,
+        destinationPort = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        sourceIp = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        source = pSource_,
+        destination = pDestination_,
+        protocol = pProtocol_,
+        clientToken = pClientToken_
+      }
+
+-- | The IP address of the Amazon Web Services resource that is the
+-- destination of the path.
+createNetworkInsightsPath_destinationIp :: Lens.Lens' CreateNetworkInsightsPath (Prelude.Maybe Prelude.Text)
+createNetworkInsightsPath_destinationIp = Lens.lens (\CreateNetworkInsightsPath' {destinationIp} -> destinationIp) (\s@CreateNetworkInsightsPath' {} a -> s {destinationIp = a} :: CreateNetworkInsightsPath)
+
+-- | The destination port.
+createNetworkInsightsPath_destinationPort :: Lens.Lens' CreateNetworkInsightsPath (Prelude.Maybe Prelude.Natural)
+createNetworkInsightsPath_destinationPort = Lens.lens (\CreateNetworkInsightsPath' {destinationPort} -> destinationPort) (\s@CreateNetworkInsightsPath' {} a -> s {destinationPort = a} :: CreateNetworkInsightsPath)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNetworkInsightsPath_dryRun :: Lens.Lens' CreateNetworkInsightsPath (Prelude.Maybe Prelude.Bool)
+createNetworkInsightsPath_dryRun = Lens.lens (\CreateNetworkInsightsPath' {dryRun} -> dryRun) (\s@CreateNetworkInsightsPath' {} a -> s {dryRun = a} :: CreateNetworkInsightsPath)
+
+-- | The IP address of the Amazon Web Services resource that is the source of
+-- the path.
+createNetworkInsightsPath_sourceIp :: Lens.Lens' CreateNetworkInsightsPath (Prelude.Maybe Prelude.Text)
+createNetworkInsightsPath_sourceIp = Lens.lens (\CreateNetworkInsightsPath' {sourceIp} -> sourceIp) (\s@CreateNetworkInsightsPath' {} a -> s {sourceIp = a} :: CreateNetworkInsightsPath)
+
+-- | The tags to add to the path.
+createNetworkInsightsPath_tagSpecifications :: Lens.Lens' CreateNetworkInsightsPath (Prelude.Maybe [TagSpecification])
+createNetworkInsightsPath_tagSpecifications = Lens.lens (\CreateNetworkInsightsPath' {tagSpecifications} -> tagSpecifications) (\s@CreateNetworkInsightsPath' {} a -> s {tagSpecifications = a} :: CreateNetworkInsightsPath) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services resource that is the source of the path.
+createNetworkInsightsPath_source :: Lens.Lens' CreateNetworkInsightsPath Prelude.Text
+createNetworkInsightsPath_source = Lens.lens (\CreateNetworkInsightsPath' {source} -> source) (\s@CreateNetworkInsightsPath' {} a -> s {source = a} :: CreateNetworkInsightsPath)
+
+-- | The Amazon Web Services resource that is the destination of the path.
+createNetworkInsightsPath_destination :: Lens.Lens' CreateNetworkInsightsPath Prelude.Text
+createNetworkInsightsPath_destination = Lens.lens (\CreateNetworkInsightsPath' {destination} -> destination) (\s@CreateNetworkInsightsPath' {} a -> s {destination = a} :: CreateNetworkInsightsPath)
+
+-- | The protocol.
+createNetworkInsightsPath_protocol :: Lens.Lens' CreateNetworkInsightsPath Protocol
+createNetworkInsightsPath_protocol = Lens.lens (\CreateNetworkInsightsPath' {protocol} -> protocol) (\s@CreateNetworkInsightsPath' {} a -> s {protocol = a} :: CreateNetworkInsightsPath)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createNetworkInsightsPath_clientToken :: Lens.Lens' CreateNetworkInsightsPath Prelude.Text
+createNetworkInsightsPath_clientToken = Lens.lens (\CreateNetworkInsightsPath' {clientToken} -> clientToken) (\s@CreateNetworkInsightsPath' {} a -> s {clientToken = a} :: CreateNetworkInsightsPath)
+
+instance Core.AWSRequest CreateNetworkInsightsPath where
+  type
+    AWSResponse CreateNetworkInsightsPath =
+      CreateNetworkInsightsPathResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateNetworkInsightsPathResponse'
+            Prelude.<$> (x Data..@? "networkInsightsPath")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNetworkInsightsPath where
+  hashWithSalt _salt CreateNetworkInsightsPath' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationIp
+      `Prelude.hashWithSalt` destinationPort
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` sourceIp
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData CreateNetworkInsightsPath where
+  rnf CreateNetworkInsightsPath' {..} =
+    Prelude.rnf destinationIp
+      `Prelude.seq` Prelude.rnf destinationPort
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf sourceIp
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders CreateNetworkInsightsPath where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNetworkInsightsPath where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateNetworkInsightsPath where
+  toQuery CreateNetworkInsightsPath' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateNetworkInsightsPath" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DestinationIp" Data.=: destinationIp,
+        "DestinationPort" Data.=: destinationPort,
+        "DryRun" Data.=: dryRun,
+        "SourceIp" Data.=: sourceIp,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Source" Data.=: source,
+        "Destination" Data.=: destination,
+        "Protocol" Data.=: protocol,
+        "ClientToken" Data.=: clientToken
+      ]
+
+-- | /See:/ 'newCreateNetworkInsightsPathResponse' smart constructor.
+data CreateNetworkInsightsPathResponse = CreateNetworkInsightsPathResponse'
+  { -- | Information about the path.
+    networkInsightsPath :: Prelude.Maybe NetworkInsightsPath,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInsightsPathResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsPath', 'createNetworkInsightsPathResponse_networkInsightsPath' - Information about the path.
+--
+-- 'httpStatus', 'createNetworkInsightsPathResponse_httpStatus' - The response's http status code.
+newCreateNetworkInsightsPathResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkInsightsPathResponse
+newCreateNetworkInsightsPathResponse pHttpStatus_ =
+  CreateNetworkInsightsPathResponse'
+    { networkInsightsPath =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the path.
+createNetworkInsightsPathResponse_networkInsightsPath :: Lens.Lens' CreateNetworkInsightsPathResponse (Prelude.Maybe NetworkInsightsPath)
+createNetworkInsightsPathResponse_networkInsightsPath = Lens.lens (\CreateNetworkInsightsPathResponse' {networkInsightsPath} -> networkInsightsPath) (\s@CreateNetworkInsightsPathResponse' {} a -> s {networkInsightsPath = a} :: CreateNetworkInsightsPathResponse)
+
+-- | The response's http status code.
+createNetworkInsightsPathResponse_httpStatus :: Lens.Lens' CreateNetworkInsightsPathResponse Prelude.Int
+createNetworkInsightsPathResponse_httpStatus = Lens.lens (\CreateNetworkInsightsPathResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkInsightsPathResponse' {} a -> s {httpStatus = a} :: CreateNetworkInsightsPathResponse)
+
+instance
+  Prelude.NFData
+    CreateNetworkInsightsPathResponse
+  where
+  rnf CreateNetworkInsightsPathResponse' {..} =
+    Prelude.rnf networkInsightsPath
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateNetworkInterface.hs b/gen/Amazonka/EC2/CreateNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNetworkInterface.hs
@@ -0,0 +1,561 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a network interface in the specified subnet.
+--
+-- The number of IP addresses you can assign to a network interface varies
+-- by instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI IP Addresses Per ENI Per Instance Type>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- For more information about network interfaces, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html Elastic network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateNetworkInterface
+  ( -- * Creating a Request
+    CreateNetworkInterface (..),
+    newCreateNetworkInterface,
+
+    -- * Request Lenses
+    createNetworkInterface_clientToken,
+    createNetworkInterface_description,
+    createNetworkInterface_dryRun,
+    createNetworkInterface_groups,
+    createNetworkInterface_interfaceType,
+    createNetworkInterface_ipv4PrefixCount,
+    createNetworkInterface_ipv4Prefixes,
+    createNetworkInterface_ipv6AddressCount,
+    createNetworkInterface_ipv6Addresses,
+    createNetworkInterface_ipv6PrefixCount,
+    createNetworkInterface_ipv6Prefixes,
+    createNetworkInterface_privateIpAddress,
+    createNetworkInterface_privateIpAddresses,
+    createNetworkInterface_secondaryPrivateIpAddressCount,
+    createNetworkInterface_tagSpecifications,
+    createNetworkInterface_subnetId,
+
+    -- * Destructuring the Response
+    CreateNetworkInterfaceResponse (..),
+    newCreateNetworkInterfaceResponse,
+
+    -- * Response Lenses
+    createNetworkInterfaceResponse_clientToken,
+    createNetworkInterfaceResponse_networkInterface,
+    createNetworkInterfaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateNetworkInterface' smart constructor.
+data CreateNetworkInterface = CreateNetworkInterface'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the network interface.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of one or more security groups.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | The type of network interface. The default is @interface@.
+    --
+    -- The only supported values are @efa@ and @trunk@.
+    interfaceType :: Prelude.Maybe NetworkInterfaceCreationType,
+    -- | The number of IPv4 prefixes that Amazon Web Services automatically
+    -- assigns to the network interface.
+    --
+    -- You can\'t specify a count of IPv4 prefixes if you\'ve specified one of
+    -- the following: specific IPv4 prefixes, specific private IPv4 addresses,
+    -- or a count of private IPv4 addresses.
+    ipv4PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv4 prefixes assigned to the network interface.
+    --
+    -- You can\'t specify IPv4 prefixes if you\'ve specified one of the
+    -- following: a count of IPv4 prefixes, specific private IPv4 addresses, or
+    -- a count of private IPv4 addresses.
+    ipv4Prefixes :: Prelude.Maybe [Ipv4PrefixSpecificationRequest],
+    -- | The number of IPv6 addresses to assign to a network interface. Amazon
+    -- EC2 automatically selects the IPv6 addresses from the subnet range.
+    --
+    -- You can\'t specify a count of IPv6 addresses using this parameter if
+    -- you\'ve specified one of the following: specific IPv6 addresses,
+    -- specific IPv6 prefixes, or a count of IPv6 prefixes.
+    --
+    -- If your subnet has the @AssignIpv6AddressOnCreation@ attribute set, you
+    -- can override that setting by specifying 0 as the IPv6 address count.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 addresses from the IPv6 CIDR block range of your subnet.
+    --
+    -- You can\'t specify IPv6 addresses using this parameter if you\'ve
+    -- specified one of the following: a count of IPv6 addresses, specific IPv6
+    -- prefixes, or a count of IPv6 prefixes.
+    ipv6Addresses :: Prelude.Maybe [InstanceIpv6Address],
+    -- | The number of IPv6 prefixes that Amazon Web Services automatically
+    -- assigns to the network interface.
+    --
+    -- You can\'t specify a count of IPv6 prefixes if you\'ve specified one of
+    -- the following: specific IPv6 prefixes, specific IPv6 addresses, or a
+    -- count of IPv6 addresses.
+    ipv6PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 prefixes assigned to the network interface.
+    --
+    -- You can\'t specify IPv6 prefixes if you\'ve specified one of the
+    -- following: a count of IPv6 prefixes, specific IPv6 addresses, or a count
+    -- of IPv6 addresses.
+    ipv6Prefixes :: Prelude.Maybe [Ipv6PrefixSpecificationRequest],
+    -- | The primary private IPv4 address of the network interface. If you don\'t
+    -- specify an IPv4 address, Amazon EC2 selects one for you from the
+    -- subnet\'s IPv4 CIDR range. If you specify an IP address, you cannot
+    -- indicate any IP addresses specified in @privateIpAddresses@ as primary
+    -- (only one IP address can be designated as primary).
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 addresses.
+    --
+    -- You can\'t specify private IPv4 addresses if you\'ve specified one of
+    -- the following: a count of private IPv4 addresses, specific IPv4
+    -- prefixes, or a count of IPv4 prefixes.
+    privateIpAddresses :: Prelude.Maybe [PrivateIpAddressSpecification],
+    -- | The number of secondary private IPv4 addresses to assign to a network
+    -- interface. When you specify a number of secondary IPv4 addresses, Amazon
+    -- EC2 selects these IP addresses within the subnet\'s IPv4 CIDR range. You
+    -- can\'t specify this option and specify more than one private IP address
+    -- using @privateIpAddresses@.
+    --
+    -- You can\'t specify a count of private IPv4 addresses if you\'ve
+    -- specified one of the following: specific private IPv4 addresses,
+    -- specific IPv4 prefixes, or a count of IPv4 prefixes.
+    secondaryPrivateIpAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The tags to apply to the new network interface.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the subnet to associate with the network interface.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createNetworkInterface_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createNetworkInterface_description' - A description for the network interface.
+--
+-- 'dryRun', 'createNetworkInterface_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groups', 'createNetworkInterface_groups' - The IDs of one or more security groups.
+--
+-- 'interfaceType', 'createNetworkInterface_interfaceType' - The type of network interface. The default is @interface@.
+--
+-- The only supported values are @efa@ and @trunk@.
+--
+-- 'ipv4PrefixCount', 'createNetworkInterface_ipv4PrefixCount' - The number of IPv4 prefixes that Amazon Web Services automatically
+-- assigns to the network interface.
+--
+-- You can\'t specify a count of IPv4 prefixes if you\'ve specified one of
+-- the following: specific IPv4 prefixes, specific private IPv4 addresses,
+-- or a count of private IPv4 addresses.
+--
+-- 'ipv4Prefixes', 'createNetworkInterface_ipv4Prefixes' - The IPv4 prefixes assigned to the network interface.
+--
+-- You can\'t specify IPv4 prefixes if you\'ve specified one of the
+-- following: a count of IPv4 prefixes, specific private IPv4 addresses, or
+-- a count of private IPv4 addresses.
+--
+-- 'ipv6AddressCount', 'createNetworkInterface_ipv6AddressCount' - The number of IPv6 addresses to assign to a network interface. Amazon
+-- EC2 automatically selects the IPv6 addresses from the subnet range.
+--
+-- You can\'t specify a count of IPv6 addresses using this parameter if
+-- you\'ve specified one of the following: specific IPv6 addresses,
+-- specific IPv6 prefixes, or a count of IPv6 prefixes.
+--
+-- If your subnet has the @AssignIpv6AddressOnCreation@ attribute set, you
+-- can override that setting by specifying 0 as the IPv6 address count.
+--
+-- 'ipv6Addresses', 'createNetworkInterface_ipv6Addresses' - The IPv6 addresses from the IPv6 CIDR block range of your subnet.
+--
+-- You can\'t specify IPv6 addresses using this parameter if you\'ve
+-- specified one of the following: a count of IPv6 addresses, specific IPv6
+-- prefixes, or a count of IPv6 prefixes.
+--
+-- 'ipv6PrefixCount', 'createNetworkInterface_ipv6PrefixCount' - The number of IPv6 prefixes that Amazon Web Services automatically
+-- assigns to the network interface.
+--
+-- You can\'t specify a count of IPv6 prefixes if you\'ve specified one of
+-- the following: specific IPv6 prefixes, specific IPv6 addresses, or a
+-- count of IPv6 addresses.
+--
+-- 'ipv6Prefixes', 'createNetworkInterface_ipv6Prefixes' - The IPv6 prefixes assigned to the network interface.
+--
+-- You can\'t specify IPv6 prefixes if you\'ve specified one of the
+-- following: a count of IPv6 prefixes, specific IPv6 addresses, or a count
+-- of IPv6 addresses.
+--
+-- 'privateIpAddress', 'createNetworkInterface_privateIpAddress' - The primary private IPv4 address of the network interface. If you don\'t
+-- specify an IPv4 address, Amazon EC2 selects one for you from the
+-- subnet\'s IPv4 CIDR range. If you specify an IP address, you cannot
+-- indicate any IP addresses specified in @privateIpAddresses@ as primary
+-- (only one IP address can be designated as primary).
+--
+-- 'privateIpAddresses', 'createNetworkInterface_privateIpAddresses' - The private IPv4 addresses.
+--
+-- You can\'t specify private IPv4 addresses if you\'ve specified one of
+-- the following: a count of private IPv4 addresses, specific IPv4
+-- prefixes, or a count of IPv4 prefixes.
+--
+-- 'secondaryPrivateIpAddressCount', 'createNetworkInterface_secondaryPrivateIpAddressCount' - The number of secondary private IPv4 addresses to assign to a network
+-- interface. When you specify a number of secondary IPv4 addresses, Amazon
+-- EC2 selects these IP addresses within the subnet\'s IPv4 CIDR range. You
+-- can\'t specify this option and specify more than one private IP address
+-- using @privateIpAddresses@.
+--
+-- You can\'t specify a count of private IPv4 addresses if you\'ve
+-- specified one of the following: specific private IPv4 addresses,
+-- specific IPv4 prefixes, or a count of IPv4 prefixes.
+--
+-- 'tagSpecifications', 'createNetworkInterface_tagSpecifications' - The tags to apply to the new network interface.
+--
+-- 'subnetId', 'createNetworkInterface_subnetId' - The ID of the subnet to associate with the network interface.
+newCreateNetworkInterface ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  CreateNetworkInterface
+newCreateNetworkInterface pSubnetId_ =
+  CreateNetworkInterface'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      interfaceType = Prelude.Nothing,
+      ipv4PrefixCount = Prelude.Nothing,
+      ipv4Prefixes = Prelude.Nothing,
+      ipv6AddressCount = Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      ipv6PrefixCount = Prelude.Nothing,
+      ipv6Prefixes = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      privateIpAddresses = Prelude.Nothing,
+      secondaryPrivateIpAddressCount = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      subnetId = pSubnetId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createNetworkInterface_clientToken :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Text)
+createNetworkInterface_clientToken = Lens.lens (\CreateNetworkInterface' {clientToken} -> clientToken) (\s@CreateNetworkInterface' {} a -> s {clientToken = a} :: CreateNetworkInterface)
+
+-- | A description for the network interface.
+createNetworkInterface_description :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Text)
+createNetworkInterface_description = Lens.lens (\CreateNetworkInterface' {description} -> description) (\s@CreateNetworkInterface' {} a -> s {description = a} :: CreateNetworkInterface)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNetworkInterface_dryRun :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Bool)
+createNetworkInterface_dryRun = Lens.lens (\CreateNetworkInterface' {dryRun} -> dryRun) (\s@CreateNetworkInterface' {} a -> s {dryRun = a} :: CreateNetworkInterface)
+
+-- | The IDs of one or more security groups.
+createNetworkInterface_groups :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe [Prelude.Text])
+createNetworkInterface_groups = Lens.lens (\CreateNetworkInterface' {groups} -> groups) (\s@CreateNetworkInterface' {} a -> s {groups = a} :: CreateNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of network interface. The default is @interface@.
+--
+-- The only supported values are @efa@ and @trunk@.
+createNetworkInterface_interfaceType :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe NetworkInterfaceCreationType)
+createNetworkInterface_interfaceType = Lens.lens (\CreateNetworkInterface' {interfaceType} -> interfaceType) (\s@CreateNetworkInterface' {} a -> s {interfaceType = a} :: CreateNetworkInterface)
+
+-- | The number of IPv4 prefixes that Amazon Web Services automatically
+-- assigns to the network interface.
+--
+-- You can\'t specify a count of IPv4 prefixes if you\'ve specified one of
+-- the following: specific IPv4 prefixes, specific private IPv4 addresses,
+-- or a count of private IPv4 addresses.
+createNetworkInterface_ipv4PrefixCount :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Int)
+createNetworkInterface_ipv4PrefixCount = Lens.lens (\CreateNetworkInterface' {ipv4PrefixCount} -> ipv4PrefixCount) (\s@CreateNetworkInterface' {} a -> s {ipv4PrefixCount = a} :: CreateNetworkInterface)
+
+-- | The IPv4 prefixes assigned to the network interface.
+--
+-- You can\'t specify IPv4 prefixes if you\'ve specified one of the
+-- following: a count of IPv4 prefixes, specific private IPv4 addresses, or
+-- a count of private IPv4 addresses.
+createNetworkInterface_ipv4Prefixes :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe [Ipv4PrefixSpecificationRequest])
+createNetworkInterface_ipv4Prefixes = Lens.lens (\CreateNetworkInterface' {ipv4Prefixes} -> ipv4Prefixes) (\s@CreateNetworkInterface' {} a -> s {ipv4Prefixes = a} :: CreateNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 addresses to assign to a network interface. Amazon
+-- EC2 automatically selects the IPv6 addresses from the subnet range.
+--
+-- You can\'t specify a count of IPv6 addresses using this parameter if
+-- you\'ve specified one of the following: specific IPv6 addresses,
+-- specific IPv6 prefixes, or a count of IPv6 prefixes.
+--
+-- If your subnet has the @AssignIpv6AddressOnCreation@ attribute set, you
+-- can override that setting by specifying 0 as the IPv6 address count.
+createNetworkInterface_ipv6AddressCount :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Int)
+createNetworkInterface_ipv6AddressCount = Lens.lens (\CreateNetworkInterface' {ipv6AddressCount} -> ipv6AddressCount) (\s@CreateNetworkInterface' {} a -> s {ipv6AddressCount = a} :: CreateNetworkInterface)
+
+-- | The IPv6 addresses from the IPv6 CIDR block range of your subnet.
+--
+-- You can\'t specify IPv6 addresses using this parameter if you\'ve
+-- specified one of the following: a count of IPv6 addresses, specific IPv6
+-- prefixes, or a count of IPv6 prefixes.
+createNetworkInterface_ipv6Addresses :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe [InstanceIpv6Address])
+createNetworkInterface_ipv6Addresses = Lens.lens (\CreateNetworkInterface' {ipv6Addresses} -> ipv6Addresses) (\s@CreateNetworkInterface' {} a -> s {ipv6Addresses = a} :: CreateNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 prefixes that Amazon Web Services automatically
+-- assigns to the network interface.
+--
+-- You can\'t specify a count of IPv6 prefixes if you\'ve specified one of
+-- the following: specific IPv6 prefixes, specific IPv6 addresses, or a
+-- count of IPv6 addresses.
+createNetworkInterface_ipv6PrefixCount :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Int)
+createNetworkInterface_ipv6PrefixCount = Lens.lens (\CreateNetworkInterface' {ipv6PrefixCount} -> ipv6PrefixCount) (\s@CreateNetworkInterface' {} a -> s {ipv6PrefixCount = a} :: CreateNetworkInterface)
+
+-- | The IPv6 prefixes assigned to the network interface.
+--
+-- You can\'t specify IPv6 prefixes if you\'ve specified one of the
+-- following: a count of IPv6 prefixes, specific IPv6 addresses, or a count
+-- of IPv6 addresses.
+createNetworkInterface_ipv6Prefixes :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe [Ipv6PrefixSpecificationRequest])
+createNetworkInterface_ipv6Prefixes = Lens.lens (\CreateNetworkInterface' {ipv6Prefixes} -> ipv6Prefixes) (\s@CreateNetworkInterface' {} a -> s {ipv6Prefixes = a} :: CreateNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The primary private IPv4 address of the network interface. If you don\'t
+-- specify an IPv4 address, Amazon EC2 selects one for you from the
+-- subnet\'s IPv4 CIDR range. If you specify an IP address, you cannot
+-- indicate any IP addresses specified in @privateIpAddresses@ as primary
+-- (only one IP address can be designated as primary).
+createNetworkInterface_privateIpAddress :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Text)
+createNetworkInterface_privateIpAddress = Lens.lens (\CreateNetworkInterface' {privateIpAddress} -> privateIpAddress) (\s@CreateNetworkInterface' {} a -> s {privateIpAddress = a} :: CreateNetworkInterface)
+
+-- | The private IPv4 addresses.
+--
+-- You can\'t specify private IPv4 addresses if you\'ve specified one of
+-- the following: a count of private IPv4 addresses, specific IPv4
+-- prefixes, or a count of IPv4 prefixes.
+createNetworkInterface_privateIpAddresses :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe [PrivateIpAddressSpecification])
+createNetworkInterface_privateIpAddresses = Lens.lens (\CreateNetworkInterface' {privateIpAddresses} -> privateIpAddresses) (\s@CreateNetworkInterface' {} a -> s {privateIpAddresses = a} :: CreateNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of secondary private IPv4 addresses to assign to a network
+-- interface. When you specify a number of secondary IPv4 addresses, Amazon
+-- EC2 selects these IP addresses within the subnet\'s IPv4 CIDR range. You
+-- can\'t specify this option and specify more than one private IP address
+-- using @privateIpAddresses@.
+--
+-- You can\'t specify a count of private IPv4 addresses if you\'ve
+-- specified one of the following: specific private IPv4 addresses,
+-- specific IPv4 prefixes, or a count of IPv4 prefixes.
+createNetworkInterface_secondaryPrivateIpAddressCount :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe Prelude.Int)
+createNetworkInterface_secondaryPrivateIpAddressCount = Lens.lens (\CreateNetworkInterface' {secondaryPrivateIpAddressCount} -> secondaryPrivateIpAddressCount) (\s@CreateNetworkInterface' {} a -> s {secondaryPrivateIpAddressCount = a} :: CreateNetworkInterface)
+
+-- | The tags to apply to the new network interface.
+createNetworkInterface_tagSpecifications :: Lens.Lens' CreateNetworkInterface (Prelude.Maybe [TagSpecification])
+createNetworkInterface_tagSpecifications = Lens.lens (\CreateNetworkInterface' {tagSpecifications} -> tagSpecifications) (\s@CreateNetworkInterface' {} a -> s {tagSpecifications = a} :: CreateNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the subnet to associate with the network interface.
+createNetworkInterface_subnetId :: Lens.Lens' CreateNetworkInterface Prelude.Text
+createNetworkInterface_subnetId = Lens.lens (\CreateNetworkInterface' {subnetId} -> subnetId) (\s@CreateNetworkInterface' {} a -> s {subnetId = a} :: CreateNetworkInterface)
+
+instance Core.AWSRequest CreateNetworkInterface where
+  type
+    AWSResponse CreateNetworkInterface =
+      CreateNetworkInterfaceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateNetworkInterfaceResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "networkInterface")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateNetworkInterface where
+  hashWithSalt _salt CreateNetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` interfaceType
+      `Prelude.hashWithSalt` ipv4PrefixCount
+      `Prelude.hashWithSalt` ipv4Prefixes
+      `Prelude.hashWithSalt` ipv6AddressCount
+      `Prelude.hashWithSalt` ipv6Addresses
+      `Prelude.hashWithSalt` ipv6PrefixCount
+      `Prelude.hashWithSalt` ipv6Prefixes
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` privateIpAddresses
+      `Prelude.hashWithSalt` secondaryPrivateIpAddressCount
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData CreateNetworkInterface where
+  rnf CreateNetworkInterface' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf interfaceType
+      `Prelude.seq` Prelude.rnf ipv4PrefixCount
+      `Prelude.seq` Prelude.rnf ipv4Prefixes
+      `Prelude.seq` Prelude.rnf ipv6AddressCount
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf ipv6PrefixCount
+      `Prelude.seq` Prelude.rnf ipv6Prefixes
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf privateIpAddresses
+      `Prelude.seq` Prelude.rnf secondaryPrivateIpAddressCount
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance Data.ToHeaders CreateNetworkInterface where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNetworkInterface where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateNetworkInterface where
+  toQuery CreateNetworkInterface' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateNetworkInterface" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> groups
+          ),
+        "InterfaceType" Data.=: interfaceType,
+        "Ipv4PrefixCount" Data.=: ipv4PrefixCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv4Prefix"
+              Prelude.<$> ipv4Prefixes
+          ),
+        "Ipv6AddressCount" Data.=: ipv6AddressCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Addresses"
+              Prelude.<$> ipv6Addresses
+          ),
+        "Ipv6PrefixCount" Data.=: ipv6PrefixCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Prefix"
+              Prelude.<$> ipv6Prefixes
+          ),
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        Data.toQuery
+          ( Data.toQueryList "PrivateIpAddresses"
+              Prelude.<$> privateIpAddresses
+          ),
+        "SecondaryPrivateIpAddressCount"
+          Data.=: secondaryPrivateIpAddressCount,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newCreateNetworkInterfaceResponse' smart constructor.
+data CreateNetworkInterfaceResponse = CreateNetworkInterfaceResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the network interface.
+    networkInterface :: Prelude.Maybe NetworkInterface,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInterfaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createNetworkInterfaceResponse_clientToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'networkInterface', 'createNetworkInterfaceResponse_networkInterface' - Information about the network interface.
+--
+-- 'httpStatus', 'createNetworkInterfaceResponse_httpStatus' - The response's http status code.
+newCreateNetworkInterfaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkInterfaceResponse
+newCreateNetworkInterfaceResponse pHttpStatus_ =
+  CreateNetworkInterfaceResponse'
+    { clientToken =
+        Prelude.Nothing,
+      networkInterface = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+createNetworkInterfaceResponse_clientToken :: Lens.Lens' CreateNetworkInterfaceResponse (Prelude.Maybe Prelude.Text)
+createNetworkInterfaceResponse_clientToken = Lens.lens (\CreateNetworkInterfaceResponse' {clientToken} -> clientToken) (\s@CreateNetworkInterfaceResponse' {} a -> s {clientToken = a} :: CreateNetworkInterfaceResponse)
+
+-- | Information about the network interface.
+createNetworkInterfaceResponse_networkInterface :: Lens.Lens' CreateNetworkInterfaceResponse (Prelude.Maybe NetworkInterface)
+createNetworkInterfaceResponse_networkInterface = Lens.lens (\CreateNetworkInterfaceResponse' {networkInterface} -> networkInterface) (\s@CreateNetworkInterfaceResponse' {} a -> s {networkInterface = a} :: CreateNetworkInterfaceResponse)
+
+-- | The response's http status code.
+createNetworkInterfaceResponse_httpStatus :: Lens.Lens' CreateNetworkInterfaceResponse Prelude.Int
+createNetworkInterfaceResponse_httpStatus = Lens.lens (\CreateNetworkInterfaceResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkInterfaceResponse' {} a -> s {httpStatus = a} :: CreateNetworkInterfaceResponse)
+
+instance
+  Prelude.NFData
+    CreateNetworkInterfaceResponse
+  where
+  rnf CreateNetworkInterfaceResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf networkInterface
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateNetworkInterfacePermission.hs b/gen/Amazonka/EC2/CreateNetworkInterfacePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateNetworkInterfacePermission.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateNetworkInterfacePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Grants an Amazon Web Services-authorized account permission to attach
+-- the specified network interface to an instance in their account.
+--
+-- You can grant permission to a single Amazon Web Services account only,
+-- and only one account at a time.
+module Amazonka.EC2.CreateNetworkInterfacePermission
+  ( -- * Creating a Request
+    CreateNetworkInterfacePermission (..),
+    newCreateNetworkInterfacePermission,
+
+    -- * Request Lenses
+    createNetworkInterfacePermission_awsAccountId,
+    createNetworkInterfacePermission_awsService,
+    createNetworkInterfacePermission_dryRun,
+    createNetworkInterfacePermission_networkInterfaceId,
+    createNetworkInterfacePermission_permission,
+
+    -- * Destructuring the Response
+    CreateNetworkInterfacePermissionResponse (..),
+    newCreateNetworkInterfacePermissionResponse,
+
+    -- * Response Lenses
+    createNetworkInterfacePermissionResponse_interfacePermission,
+    createNetworkInterfacePermissionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateNetworkInterfacePermission.
+--
+-- /See:/ 'newCreateNetworkInterfacePermission' smart constructor.
+data CreateNetworkInterfacePermission = CreateNetworkInterfacePermission'
+  { -- | The Amazon Web Services account ID.
+    awsAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Service. Currently not supported.
+    awsService :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text,
+    -- | The type of permission to grant.
+    permission :: InterfacePermissionType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInterfacePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'awsAccountId', 'createNetworkInterfacePermission_awsAccountId' - The Amazon Web Services account ID.
+--
+-- 'awsService', 'createNetworkInterfacePermission_awsService' - The Amazon Web Service. Currently not supported.
+--
+-- 'dryRun', 'createNetworkInterfacePermission_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInterfaceId', 'createNetworkInterfacePermission_networkInterfaceId' - The ID of the network interface.
+--
+-- 'permission', 'createNetworkInterfacePermission_permission' - The type of permission to grant.
+newCreateNetworkInterfacePermission ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  -- | 'permission'
+  InterfacePermissionType ->
+  CreateNetworkInterfacePermission
+newCreateNetworkInterfacePermission
+  pNetworkInterfaceId_
+  pPermission_ =
+    CreateNetworkInterfacePermission'
+      { awsAccountId =
+          Prelude.Nothing,
+        awsService = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        networkInterfaceId = pNetworkInterfaceId_,
+        permission = pPermission_
+      }
+
+-- | The Amazon Web Services account ID.
+createNetworkInterfacePermission_awsAccountId :: Lens.Lens' CreateNetworkInterfacePermission (Prelude.Maybe Prelude.Text)
+createNetworkInterfacePermission_awsAccountId = Lens.lens (\CreateNetworkInterfacePermission' {awsAccountId} -> awsAccountId) (\s@CreateNetworkInterfacePermission' {} a -> s {awsAccountId = a} :: CreateNetworkInterfacePermission)
+
+-- | The Amazon Web Service. Currently not supported.
+createNetworkInterfacePermission_awsService :: Lens.Lens' CreateNetworkInterfacePermission (Prelude.Maybe Prelude.Text)
+createNetworkInterfacePermission_awsService = Lens.lens (\CreateNetworkInterfacePermission' {awsService} -> awsService) (\s@CreateNetworkInterfacePermission' {} a -> s {awsService = a} :: CreateNetworkInterfacePermission)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createNetworkInterfacePermission_dryRun :: Lens.Lens' CreateNetworkInterfacePermission (Prelude.Maybe Prelude.Bool)
+createNetworkInterfacePermission_dryRun = Lens.lens (\CreateNetworkInterfacePermission' {dryRun} -> dryRun) (\s@CreateNetworkInterfacePermission' {} a -> s {dryRun = a} :: CreateNetworkInterfacePermission)
+
+-- | The ID of the network interface.
+createNetworkInterfacePermission_networkInterfaceId :: Lens.Lens' CreateNetworkInterfacePermission Prelude.Text
+createNetworkInterfacePermission_networkInterfaceId = Lens.lens (\CreateNetworkInterfacePermission' {networkInterfaceId} -> networkInterfaceId) (\s@CreateNetworkInterfacePermission' {} a -> s {networkInterfaceId = a} :: CreateNetworkInterfacePermission)
+
+-- | The type of permission to grant.
+createNetworkInterfacePermission_permission :: Lens.Lens' CreateNetworkInterfacePermission InterfacePermissionType
+createNetworkInterfacePermission_permission = Lens.lens (\CreateNetworkInterfacePermission' {permission} -> permission) (\s@CreateNetworkInterfacePermission' {} a -> s {permission = a} :: CreateNetworkInterfacePermission)
+
+instance
+  Core.AWSRequest
+    CreateNetworkInterfacePermission
+  where
+  type
+    AWSResponse CreateNetworkInterfacePermission =
+      CreateNetworkInterfacePermissionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateNetworkInterfacePermissionResponse'
+            Prelude.<$> (x Data..@? "interfacePermission")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateNetworkInterfacePermission
+  where
+  hashWithSalt
+    _salt
+    CreateNetworkInterfacePermission' {..} =
+      _salt
+        `Prelude.hashWithSalt` awsAccountId
+        `Prelude.hashWithSalt` awsService
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` permission
+
+instance
+  Prelude.NFData
+    CreateNetworkInterfacePermission
+  where
+  rnf CreateNetworkInterfacePermission' {..} =
+    Prelude.rnf awsAccountId
+      `Prelude.seq` Prelude.rnf awsService
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf permission
+
+instance
+  Data.ToHeaders
+    CreateNetworkInterfacePermission
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateNetworkInterfacePermission where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateNetworkInterfacePermission
+  where
+  toQuery CreateNetworkInterfacePermission' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateNetworkInterfacePermission" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AwsAccountId" Data.=: awsAccountId,
+        "AwsService" Data.=: awsService,
+        "DryRun" Data.=: dryRun,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "Permission" Data.=: permission
+      ]
+
+-- | Contains the output of CreateNetworkInterfacePermission.
+--
+-- /See:/ 'newCreateNetworkInterfacePermissionResponse' smart constructor.
+data CreateNetworkInterfacePermissionResponse = CreateNetworkInterfacePermissionResponse'
+  { -- | Information about the permission for the network interface.
+    interfacePermission :: Prelude.Maybe NetworkInterfacePermission,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateNetworkInterfacePermissionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'interfacePermission', 'createNetworkInterfacePermissionResponse_interfacePermission' - Information about the permission for the network interface.
+--
+-- 'httpStatus', 'createNetworkInterfacePermissionResponse_httpStatus' - The response's http status code.
+newCreateNetworkInterfacePermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateNetworkInterfacePermissionResponse
+newCreateNetworkInterfacePermissionResponse
+  pHttpStatus_ =
+    CreateNetworkInterfacePermissionResponse'
+      { interfacePermission =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the permission for the network interface.
+createNetworkInterfacePermissionResponse_interfacePermission :: Lens.Lens' CreateNetworkInterfacePermissionResponse (Prelude.Maybe NetworkInterfacePermission)
+createNetworkInterfacePermissionResponse_interfacePermission = Lens.lens (\CreateNetworkInterfacePermissionResponse' {interfacePermission} -> interfacePermission) (\s@CreateNetworkInterfacePermissionResponse' {} a -> s {interfacePermission = a} :: CreateNetworkInterfacePermissionResponse)
+
+-- | The response's http status code.
+createNetworkInterfacePermissionResponse_httpStatus :: Lens.Lens' CreateNetworkInterfacePermissionResponse Prelude.Int
+createNetworkInterfacePermissionResponse_httpStatus = Lens.lens (\CreateNetworkInterfacePermissionResponse' {httpStatus} -> httpStatus) (\s@CreateNetworkInterfacePermissionResponse' {} a -> s {httpStatus = a} :: CreateNetworkInterfacePermissionResponse)
+
+instance
+  Prelude.NFData
+    CreateNetworkInterfacePermissionResponse
+  where
+  rnf CreateNetworkInterfacePermissionResponse' {..} =
+    Prelude.rnf interfacePermission
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreatePlacementGroup.hs b/gen/Amazonka/EC2/CreatePlacementGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreatePlacementGroup.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreatePlacementGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a placement group in which to launch instances. The strategy of
+-- the placement group determines how the instances are organized within
+-- the group.
+--
+-- A @cluster@ placement group is a logical grouping of instances within a
+-- single Availability Zone that benefit from low network latency, high
+-- network throughput. A @spread@ placement group places instances on
+-- distinct hardware. A @partition@ placement group places groups of
+-- instances in different partitions, where instances in one partition do
+-- not share the same hardware with instances in another partition.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html Placement groups>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreatePlacementGroup
+  ( -- * Creating a Request
+    CreatePlacementGroup (..),
+    newCreatePlacementGroup,
+
+    -- * Request Lenses
+    createPlacementGroup_dryRun,
+    createPlacementGroup_groupName,
+    createPlacementGroup_partitionCount,
+    createPlacementGroup_spreadLevel,
+    createPlacementGroup_strategy,
+    createPlacementGroup_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreatePlacementGroupResponse (..),
+    newCreatePlacementGroupResponse,
+
+    -- * Response Lenses
+    createPlacementGroupResponse_placementGroup,
+    createPlacementGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreatePlacementGroup' smart constructor.
+data CreatePlacementGroup = CreatePlacementGroup'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | A name for the placement group. Must be unique within the scope of your
+    -- account for the Region.
+    --
+    -- Constraints: Up to 255 ASCII characters
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The number of partitions. Valid only when __Strategy__ is set to
+    -- @partition@.
+    partitionCount :: Prelude.Maybe Prelude.Int,
+    -- | Determines how placement groups spread instances.
+    --
+    -- -   Host – You can use @host@ only with Outpost placement groups.
+    --
+    -- -   Rack – No usage restrictions.
+    spreadLevel :: Prelude.Maybe SpreadLevel,
+    -- | The placement strategy.
+    strategy :: Prelude.Maybe PlacementStrategy,
+    -- | The tags to apply to the new placement group.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePlacementGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createPlacementGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupName', 'createPlacementGroup_groupName' - A name for the placement group. Must be unique within the scope of your
+-- account for the Region.
+--
+-- Constraints: Up to 255 ASCII characters
+--
+-- 'partitionCount', 'createPlacementGroup_partitionCount' - The number of partitions. Valid only when __Strategy__ is set to
+-- @partition@.
+--
+-- 'spreadLevel', 'createPlacementGroup_spreadLevel' - Determines how placement groups spread instances.
+--
+-- -   Host – You can use @host@ only with Outpost placement groups.
+--
+-- -   Rack – No usage restrictions.
+--
+-- 'strategy', 'createPlacementGroup_strategy' - The placement strategy.
+--
+-- 'tagSpecifications', 'createPlacementGroup_tagSpecifications' - The tags to apply to the new placement group.
+newCreatePlacementGroup ::
+  CreatePlacementGroup
+newCreatePlacementGroup =
+  CreatePlacementGroup'
+    { dryRun = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      partitionCount = Prelude.Nothing,
+      spreadLevel = Prelude.Nothing,
+      strategy = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createPlacementGroup_dryRun :: Lens.Lens' CreatePlacementGroup (Prelude.Maybe Prelude.Bool)
+createPlacementGroup_dryRun = Lens.lens (\CreatePlacementGroup' {dryRun} -> dryRun) (\s@CreatePlacementGroup' {} a -> s {dryRun = a} :: CreatePlacementGroup)
+
+-- | A name for the placement group. Must be unique within the scope of your
+-- account for the Region.
+--
+-- Constraints: Up to 255 ASCII characters
+createPlacementGroup_groupName :: Lens.Lens' CreatePlacementGroup (Prelude.Maybe Prelude.Text)
+createPlacementGroup_groupName = Lens.lens (\CreatePlacementGroup' {groupName} -> groupName) (\s@CreatePlacementGroup' {} a -> s {groupName = a} :: CreatePlacementGroup)
+
+-- | The number of partitions. Valid only when __Strategy__ is set to
+-- @partition@.
+createPlacementGroup_partitionCount :: Lens.Lens' CreatePlacementGroup (Prelude.Maybe Prelude.Int)
+createPlacementGroup_partitionCount = Lens.lens (\CreatePlacementGroup' {partitionCount} -> partitionCount) (\s@CreatePlacementGroup' {} a -> s {partitionCount = a} :: CreatePlacementGroup)
+
+-- | Determines how placement groups spread instances.
+--
+-- -   Host – You can use @host@ only with Outpost placement groups.
+--
+-- -   Rack – No usage restrictions.
+createPlacementGroup_spreadLevel :: Lens.Lens' CreatePlacementGroup (Prelude.Maybe SpreadLevel)
+createPlacementGroup_spreadLevel = Lens.lens (\CreatePlacementGroup' {spreadLevel} -> spreadLevel) (\s@CreatePlacementGroup' {} a -> s {spreadLevel = a} :: CreatePlacementGroup)
+
+-- | The placement strategy.
+createPlacementGroup_strategy :: Lens.Lens' CreatePlacementGroup (Prelude.Maybe PlacementStrategy)
+createPlacementGroup_strategy = Lens.lens (\CreatePlacementGroup' {strategy} -> strategy) (\s@CreatePlacementGroup' {} a -> s {strategy = a} :: CreatePlacementGroup)
+
+-- | The tags to apply to the new placement group.
+createPlacementGroup_tagSpecifications :: Lens.Lens' CreatePlacementGroup (Prelude.Maybe [TagSpecification])
+createPlacementGroup_tagSpecifications = Lens.lens (\CreatePlacementGroup' {tagSpecifications} -> tagSpecifications) (\s@CreatePlacementGroup' {} a -> s {tagSpecifications = a} :: CreatePlacementGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreatePlacementGroup where
+  type
+    AWSResponse CreatePlacementGroup =
+      CreatePlacementGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreatePlacementGroupResponse'
+            Prelude.<$> (x Data..@? "placementGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreatePlacementGroup where
+  hashWithSalt _salt CreatePlacementGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` partitionCount
+      `Prelude.hashWithSalt` spreadLevel
+      `Prelude.hashWithSalt` strategy
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreatePlacementGroup where
+  rnf CreatePlacementGroup' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf partitionCount
+      `Prelude.seq` Prelude.rnf spreadLevel
+      `Prelude.seq` Prelude.rnf strategy
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreatePlacementGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreatePlacementGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreatePlacementGroup where
+  toQuery CreatePlacementGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreatePlacementGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GroupName" Data.=: groupName,
+        "PartitionCount" Data.=: partitionCount,
+        "SpreadLevel" Data.=: spreadLevel,
+        "Strategy" Data.=: strategy,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreatePlacementGroupResponse' smart constructor.
+data CreatePlacementGroupResponse = CreatePlacementGroupResponse'
+  { -- | Information about the placement group.
+    placementGroup :: Prelude.Maybe PlacementGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePlacementGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'placementGroup', 'createPlacementGroupResponse_placementGroup' - Information about the placement group.
+--
+-- 'httpStatus', 'createPlacementGroupResponse_httpStatus' - The response's http status code.
+newCreatePlacementGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePlacementGroupResponse
+newCreatePlacementGroupResponse pHttpStatus_ =
+  CreatePlacementGroupResponse'
+    { placementGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the placement group.
+createPlacementGroupResponse_placementGroup :: Lens.Lens' CreatePlacementGroupResponse (Prelude.Maybe PlacementGroup)
+createPlacementGroupResponse_placementGroup = Lens.lens (\CreatePlacementGroupResponse' {placementGroup} -> placementGroup) (\s@CreatePlacementGroupResponse' {} a -> s {placementGroup = a} :: CreatePlacementGroupResponse)
+
+-- | The response's http status code.
+createPlacementGroupResponse_httpStatus :: Lens.Lens' CreatePlacementGroupResponse Prelude.Int
+createPlacementGroupResponse_httpStatus = Lens.lens (\CreatePlacementGroupResponse' {httpStatus} -> httpStatus) (\s@CreatePlacementGroupResponse' {} a -> s {httpStatus = a} :: CreatePlacementGroupResponse)
+
+instance Prelude.NFData CreatePlacementGroupResponse where
+  rnf CreatePlacementGroupResponse' {..} =
+    Prelude.rnf placementGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreatePublicIpv4Pool.hs b/gen/Amazonka/EC2/CreatePublicIpv4Pool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreatePublicIpv4Pool.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreatePublicIpv4Pool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a public IPv4 address pool. A public IPv4 pool is an EC2 IP
+-- address pool required for the public IPv4 CIDRs that you own and bring
+-- to Amazon Web Services to manage with IPAM. IPv6 addresses you bring to
+-- Amazon Web Services, however, use IPAM pools only. To monitor the status
+-- of pool creation, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribePublicIpv4Pools.html DescribePublicIpv4Pools>.
+module Amazonka.EC2.CreatePublicIpv4Pool
+  ( -- * Creating a Request
+    CreatePublicIpv4Pool (..),
+    newCreatePublicIpv4Pool,
+
+    -- * Request Lenses
+    createPublicIpv4Pool_dryRun,
+    createPublicIpv4Pool_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreatePublicIpv4PoolResponse (..),
+    newCreatePublicIpv4PoolResponse,
+
+    -- * Response Lenses
+    createPublicIpv4PoolResponse_poolId,
+    createPublicIpv4PoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreatePublicIpv4Pool' smart constructor.
+data CreatePublicIpv4Pool = CreatePublicIpv4Pool'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePublicIpv4Pool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createPublicIpv4Pool_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createPublicIpv4Pool_tagSpecifications' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+newCreatePublicIpv4Pool ::
+  CreatePublicIpv4Pool
+newCreatePublicIpv4Pool =
+  CreatePublicIpv4Pool'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+createPublicIpv4Pool_dryRun :: Lens.Lens' CreatePublicIpv4Pool (Prelude.Maybe Prelude.Bool)
+createPublicIpv4Pool_dryRun = Lens.lens (\CreatePublicIpv4Pool' {dryRun} -> dryRun) (\s@CreatePublicIpv4Pool' {} a -> s {dryRun = a} :: CreatePublicIpv4Pool)
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+createPublicIpv4Pool_tagSpecifications :: Lens.Lens' CreatePublicIpv4Pool (Prelude.Maybe [TagSpecification])
+createPublicIpv4Pool_tagSpecifications = Lens.lens (\CreatePublicIpv4Pool' {tagSpecifications} -> tagSpecifications) (\s@CreatePublicIpv4Pool' {} a -> s {tagSpecifications = a} :: CreatePublicIpv4Pool) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreatePublicIpv4Pool where
+  type
+    AWSResponse CreatePublicIpv4Pool =
+      CreatePublicIpv4PoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreatePublicIpv4PoolResponse'
+            Prelude.<$> (x Data..@? "poolId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreatePublicIpv4Pool where
+  hashWithSalt _salt CreatePublicIpv4Pool' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreatePublicIpv4Pool where
+  rnf CreatePublicIpv4Pool' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreatePublicIpv4Pool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreatePublicIpv4Pool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreatePublicIpv4Pool where
+  toQuery CreatePublicIpv4Pool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreatePublicIpv4Pool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreatePublicIpv4PoolResponse' smart constructor.
+data CreatePublicIpv4PoolResponse = CreatePublicIpv4PoolResponse'
+  { -- | The ID of the public IPv4 pool.
+    poolId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreatePublicIpv4PoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'poolId', 'createPublicIpv4PoolResponse_poolId' - The ID of the public IPv4 pool.
+--
+-- 'httpStatus', 'createPublicIpv4PoolResponse_httpStatus' - The response's http status code.
+newCreatePublicIpv4PoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreatePublicIpv4PoolResponse
+newCreatePublicIpv4PoolResponse pHttpStatus_ =
+  CreatePublicIpv4PoolResponse'
+    { poolId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the public IPv4 pool.
+createPublicIpv4PoolResponse_poolId :: Lens.Lens' CreatePublicIpv4PoolResponse (Prelude.Maybe Prelude.Text)
+createPublicIpv4PoolResponse_poolId = Lens.lens (\CreatePublicIpv4PoolResponse' {poolId} -> poolId) (\s@CreatePublicIpv4PoolResponse' {} a -> s {poolId = a} :: CreatePublicIpv4PoolResponse)
+
+-- | The response's http status code.
+createPublicIpv4PoolResponse_httpStatus :: Lens.Lens' CreatePublicIpv4PoolResponse Prelude.Int
+createPublicIpv4PoolResponse_httpStatus = Lens.lens (\CreatePublicIpv4PoolResponse' {httpStatus} -> httpStatus) (\s@CreatePublicIpv4PoolResponse' {} a -> s {httpStatus = a} :: CreatePublicIpv4PoolResponse)
+
+instance Prelude.NFData CreatePublicIpv4PoolResponse where
+  rnf CreatePublicIpv4PoolResponse' {..} =
+    Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateReplaceRootVolumeTask.hs b/gen/Amazonka/EC2/CreateReplaceRootVolumeTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateReplaceRootVolumeTask.hs
@@ -0,0 +1,322 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateReplaceRootVolumeTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces the EBS-backed root volume for a @running@ instance with a new
+-- volume that is restored to the original root volume\'s launch state,
+-- that is restored to a specific snapshot taken from the original root
+-- volume, or that is restored from an AMI that has the same key
+-- characteristics as that of the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html Replace a root volume>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateReplaceRootVolumeTask
+  ( -- * Creating a Request
+    CreateReplaceRootVolumeTask (..),
+    newCreateReplaceRootVolumeTask,
+
+    -- * Request Lenses
+    createReplaceRootVolumeTask_clientToken,
+    createReplaceRootVolumeTask_deleteReplacedRootVolume,
+    createReplaceRootVolumeTask_dryRun,
+    createReplaceRootVolumeTask_imageId,
+    createReplaceRootVolumeTask_snapshotId,
+    createReplaceRootVolumeTask_tagSpecifications,
+    createReplaceRootVolumeTask_instanceId,
+
+    -- * Destructuring the Response
+    CreateReplaceRootVolumeTaskResponse (..),
+    newCreateReplaceRootVolumeTaskResponse,
+
+    -- * Response Lenses
+    createReplaceRootVolumeTaskResponse_replaceRootVolumeTask,
+    createReplaceRootVolumeTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateReplaceRootVolumeTask' smart constructor.
+data CreateReplaceRootVolumeTask = CreateReplaceRootVolumeTask'
+  { -- | 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. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to automatically delete the original root volume after
+    -- the root volume replacement task completes. To delete the original root
+    -- volume, specify @true@. If you choose to keep the original root volume
+    -- after the replacement task completes, you must manually delete it when
+    -- you no longer need it.
+    deleteReplacedRootVolume :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI to use to restore the root volume. The specified AMI
+    -- must have the same product code, billing information, architecture type,
+    -- and virtualization type as that of the instance.
+    --
+    -- If you want to restore the replacement volume from a specific snapshot,
+    -- or if you want to restore it to its launch state, omit this parameter.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot from which to restore the replacement root
+    -- volume. The specified snapshot must be a snapshot that you previously
+    -- created from the original root volume.
+    --
+    -- If you want to restore the replacement root volume to the initial launch
+    -- state, or if you want to restore the replacement root volume from an
+    -- AMI, omit this parameter.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the root volume replacement task.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the instance for which to replace the root volume.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReplaceRootVolumeTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createReplaceRootVolumeTask_clientToken' - 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. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- 'deleteReplacedRootVolume', 'createReplaceRootVolumeTask_deleteReplacedRootVolume' - Indicates whether to automatically delete the original root volume after
+-- the root volume replacement task completes. To delete the original root
+-- volume, specify @true@. If you choose to keep the original root volume
+-- after the replacement task completes, you must manually delete it when
+-- you no longer need it.
+--
+-- 'dryRun', 'createReplaceRootVolumeTask_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'createReplaceRootVolumeTask_imageId' - The ID of the AMI to use to restore the root volume. The specified AMI
+-- must have the same product code, billing information, architecture type,
+-- and virtualization type as that of the instance.
+--
+-- If you want to restore the replacement volume from a specific snapshot,
+-- or if you want to restore it to its launch state, omit this parameter.
+--
+-- 'snapshotId', 'createReplaceRootVolumeTask_snapshotId' - The ID of the snapshot from which to restore the replacement root
+-- volume. The specified snapshot must be a snapshot that you previously
+-- created from the original root volume.
+--
+-- If you want to restore the replacement root volume to the initial launch
+-- state, or if you want to restore the replacement root volume from an
+-- AMI, omit this parameter.
+--
+-- 'tagSpecifications', 'createReplaceRootVolumeTask_tagSpecifications' - The tags to apply to the root volume replacement task.
+--
+-- 'instanceId', 'createReplaceRootVolumeTask_instanceId' - The ID of the instance for which to replace the root volume.
+newCreateReplaceRootVolumeTask ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  CreateReplaceRootVolumeTask
+newCreateReplaceRootVolumeTask pInstanceId_ =
+  CreateReplaceRootVolumeTask'
+    { clientToken =
+        Prelude.Nothing,
+      deleteReplacedRootVolume = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | 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. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+createReplaceRootVolumeTask_clientToken :: Lens.Lens' CreateReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+createReplaceRootVolumeTask_clientToken = Lens.lens (\CreateReplaceRootVolumeTask' {clientToken} -> clientToken) (\s@CreateReplaceRootVolumeTask' {} a -> s {clientToken = a} :: CreateReplaceRootVolumeTask)
+
+-- | Indicates whether to automatically delete the original root volume after
+-- the root volume replacement task completes. To delete the original root
+-- volume, specify @true@. If you choose to keep the original root volume
+-- after the replacement task completes, you must manually delete it when
+-- you no longer need it.
+createReplaceRootVolumeTask_deleteReplacedRootVolume :: Lens.Lens' CreateReplaceRootVolumeTask (Prelude.Maybe Prelude.Bool)
+createReplaceRootVolumeTask_deleteReplacedRootVolume = Lens.lens (\CreateReplaceRootVolumeTask' {deleteReplacedRootVolume} -> deleteReplacedRootVolume) (\s@CreateReplaceRootVolumeTask' {} a -> s {deleteReplacedRootVolume = a} :: CreateReplaceRootVolumeTask)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createReplaceRootVolumeTask_dryRun :: Lens.Lens' CreateReplaceRootVolumeTask (Prelude.Maybe Prelude.Bool)
+createReplaceRootVolumeTask_dryRun = Lens.lens (\CreateReplaceRootVolumeTask' {dryRun} -> dryRun) (\s@CreateReplaceRootVolumeTask' {} a -> s {dryRun = a} :: CreateReplaceRootVolumeTask)
+
+-- | The ID of the AMI to use to restore the root volume. The specified AMI
+-- must have the same product code, billing information, architecture type,
+-- and virtualization type as that of the instance.
+--
+-- If you want to restore the replacement volume from a specific snapshot,
+-- or if you want to restore it to its launch state, omit this parameter.
+createReplaceRootVolumeTask_imageId :: Lens.Lens' CreateReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+createReplaceRootVolumeTask_imageId = Lens.lens (\CreateReplaceRootVolumeTask' {imageId} -> imageId) (\s@CreateReplaceRootVolumeTask' {} a -> s {imageId = a} :: CreateReplaceRootVolumeTask)
+
+-- | The ID of the snapshot from which to restore the replacement root
+-- volume. The specified snapshot must be a snapshot that you previously
+-- created from the original root volume.
+--
+-- If you want to restore the replacement root volume to the initial launch
+-- state, or if you want to restore the replacement root volume from an
+-- AMI, omit this parameter.
+createReplaceRootVolumeTask_snapshotId :: Lens.Lens' CreateReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+createReplaceRootVolumeTask_snapshotId = Lens.lens (\CreateReplaceRootVolumeTask' {snapshotId} -> snapshotId) (\s@CreateReplaceRootVolumeTask' {} a -> s {snapshotId = a} :: CreateReplaceRootVolumeTask)
+
+-- | The tags to apply to the root volume replacement task.
+createReplaceRootVolumeTask_tagSpecifications :: Lens.Lens' CreateReplaceRootVolumeTask (Prelude.Maybe [TagSpecification])
+createReplaceRootVolumeTask_tagSpecifications = Lens.lens (\CreateReplaceRootVolumeTask' {tagSpecifications} -> tagSpecifications) (\s@CreateReplaceRootVolumeTask' {} a -> s {tagSpecifications = a} :: CreateReplaceRootVolumeTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the instance for which to replace the root volume.
+createReplaceRootVolumeTask_instanceId :: Lens.Lens' CreateReplaceRootVolumeTask Prelude.Text
+createReplaceRootVolumeTask_instanceId = Lens.lens (\CreateReplaceRootVolumeTask' {instanceId} -> instanceId) (\s@CreateReplaceRootVolumeTask' {} a -> s {instanceId = a} :: CreateReplaceRootVolumeTask)
+
+instance Core.AWSRequest CreateReplaceRootVolumeTask where
+  type
+    AWSResponse CreateReplaceRootVolumeTask =
+      CreateReplaceRootVolumeTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateReplaceRootVolumeTaskResponse'
+            Prelude.<$> (x Data..@? "replaceRootVolumeTask")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateReplaceRootVolumeTask where
+  hashWithSalt _salt CreateReplaceRootVolumeTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` deleteReplacedRootVolume
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData CreateReplaceRootVolumeTask where
+  rnf CreateReplaceRootVolumeTask' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf deleteReplacedRootVolume
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders CreateReplaceRootVolumeTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateReplaceRootVolumeTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateReplaceRootVolumeTask where
+  toQuery CreateReplaceRootVolumeTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateReplaceRootVolumeTask" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DeleteReplacedRootVolume"
+          Data.=: deleteReplacedRootVolume,
+        "DryRun" Data.=: dryRun,
+        "ImageId" Data.=: imageId,
+        "SnapshotId" Data.=: snapshotId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newCreateReplaceRootVolumeTaskResponse' smart constructor.
+data CreateReplaceRootVolumeTaskResponse = CreateReplaceRootVolumeTaskResponse'
+  { -- | Information about the root volume replacement task.
+    replaceRootVolumeTask :: Prelude.Maybe ReplaceRootVolumeTask,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReplaceRootVolumeTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replaceRootVolumeTask', 'createReplaceRootVolumeTaskResponse_replaceRootVolumeTask' - Information about the root volume replacement task.
+--
+-- 'httpStatus', 'createReplaceRootVolumeTaskResponse_httpStatus' - The response's http status code.
+newCreateReplaceRootVolumeTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateReplaceRootVolumeTaskResponse
+newCreateReplaceRootVolumeTaskResponse pHttpStatus_ =
+  CreateReplaceRootVolumeTaskResponse'
+    { replaceRootVolumeTask =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the root volume replacement task.
+createReplaceRootVolumeTaskResponse_replaceRootVolumeTask :: Lens.Lens' CreateReplaceRootVolumeTaskResponse (Prelude.Maybe ReplaceRootVolumeTask)
+createReplaceRootVolumeTaskResponse_replaceRootVolumeTask = Lens.lens (\CreateReplaceRootVolumeTaskResponse' {replaceRootVolumeTask} -> replaceRootVolumeTask) (\s@CreateReplaceRootVolumeTaskResponse' {} a -> s {replaceRootVolumeTask = a} :: CreateReplaceRootVolumeTaskResponse)
+
+-- | The response's http status code.
+createReplaceRootVolumeTaskResponse_httpStatus :: Lens.Lens' CreateReplaceRootVolumeTaskResponse Prelude.Int
+createReplaceRootVolumeTaskResponse_httpStatus = Lens.lens (\CreateReplaceRootVolumeTaskResponse' {httpStatus} -> httpStatus) (\s@CreateReplaceRootVolumeTaskResponse' {} a -> s {httpStatus = a} :: CreateReplaceRootVolumeTaskResponse)
+
+instance
+  Prelude.NFData
+    CreateReplaceRootVolumeTaskResponse
+  where
+  rnf CreateReplaceRootVolumeTaskResponse' {..} =
+    Prelude.rnf replaceRootVolumeTask
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateReservedInstancesListing.hs b/gen/Amazonka/EC2/CreateReservedInstancesListing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateReservedInstancesListing.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateReservedInstancesListing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a listing for Amazon EC2 Standard Reserved Instances to be sold
+-- in the Reserved Instance Marketplace. You can submit one Standard
+-- Reserved Instance listing at a time. To get a list of your Standard
+-- Reserved Instances, you can use the DescribeReservedInstances operation.
+--
+-- Only Standard Reserved Instances can be sold in the Reserved Instance
+-- Marketplace. Convertible Reserved Instances cannot be sold.
+--
+-- The Reserved Instance Marketplace matches sellers who want to resell
+-- Standard Reserved Instance capacity that they no longer need with buyers
+-- who want to purchase additional capacity. Reserved Instances bought and
+-- sold through the Reserved Instance Marketplace work like any other
+-- Reserved Instances.
+--
+-- To sell your Standard Reserved Instances, you must first register as a
+-- seller in the Reserved Instance Marketplace. After completing the
+-- registration process, you can create a Reserved Instance Marketplace
+-- listing of some or all of your Standard Reserved Instances, and specify
+-- the upfront price to receive for them. Your Standard Reserved Instance
+-- listings then become available for purchase. To view the details of your
+-- Standard Reserved Instance listing, you can use the
+-- DescribeReservedInstancesListings operation.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreateReservedInstancesListing
+  ( -- * Creating a Request
+    CreateReservedInstancesListing (..),
+    newCreateReservedInstancesListing,
+
+    -- * Request Lenses
+    createReservedInstancesListing_clientToken,
+    createReservedInstancesListing_instanceCount,
+    createReservedInstancesListing_priceSchedules,
+    createReservedInstancesListing_reservedInstancesId,
+
+    -- * Destructuring the Response
+    CreateReservedInstancesListingResponse (..),
+    newCreateReservedInstancesListingResponse,
+
+    -- * Response Lenses
+    createReservedInstancesListingResponse_reservedInstancesListings,
+    createReservedInstancesListingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateReservedInstancesListing.
+--
+-- /See:/ 'newCreateReservedInstancesListing' smart constructor.
+data CreateReservedInstancesListing = CreateReservedInstancesListing'
+  { -- | Unique, case-sensitive identifier you provide to ensure idempotency of
+    -- your listings. This helps avoid duplicate listings. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Text,
+    -- | The number of instances that are a part of a Reserved Instance account
+    -- to be listed in the Reserved Instance Marketplace. This number should be
+    -- less than or equal to the instance count associated with the Reserved
+    -- Instance ID specified in this call.
+    instanceCount :: Prelude.Int,
+    -- | A list specifying the price of the Standard Reserved Instance for each
+    -- month remaining in the Reserved Instance term.
+    priceSchedules :: [PriceScheduleSpecification],
+    -- | The ID of the active Standard Reserved Instance.
+    reservedInstancesId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReservedInstancesListing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createReservedInstancesListing_clientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of
+-- your listings. This helps avoid duplicate listings. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'instanceCount', 'createReservedInstancesListing_instanceCount' - The number of instances that are a part of a Reserved Instance account
+-- to be listed in the Reserved Instance Marketplace. This number should be
+-- less than or equal to the instance count associated with the Reserved
+-- Instance ID specified in this call.
+--
+-- 'priceSchedules', 'createReservedInstancesListing_priceSchedules' - A list specifying the price of the Standard Reserved Instance for each
+-- month remaining in the Reserved Instance term.
+--
+-- 'reservedInstancesId', 'createReservedInstancesListing_reservedInstancesId' - The ID of the active Standard Reserved Instance.
+newCreateReservedInstancesListing ::
+  -- | 'clientToken'
+  Prelude.Text ->
+  -- | 'instanceCount'
+  Prelude.Int ->
+  -- | 'reservedInstancesId'
+  Prelude.Text ->
+  CreateReservedInstancesListing
+newCreateReservedInstancesListing
+  pClientToken_
+  pInstanceCount_
+  pReservedInstancesId_ =
+    CreateReservedInstancesListing'
+      { clientToken =
+          pClientToken_,
+        instanceCount = pInstanceCount_,
+        priceSchedules = Prelude.mempty,
+        reservedInstancesId = pReservedInstancesId_
+      }
+
+-- | Unique, case-sensitive identifier you provide to ensure idempotency of
+-- your listings. This helps avoid duplicate listings. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createReservedInstancesListing_clientToken :: Lens.Lens' CreateReservedInstancesListing Prelude.Text
+createReservedInstancesListing_clientToken = Lens.lens (\CreateReservedInstancesListing' {clientToken} -> clientToken) (\s@CreateReservedInstancesListing' {} a -> s {clientToken = a} :: CreateReservedInstancesListing)
+
+-- | The number of instances that are a part of a Reserved Instance account
+-- to be listed in the Reserved Instance Marketplace. This number should be
+-- less than or equal to the instance count associated with the Reserved
+-- Instance ID specified in this call.
+createReservedInstancesListing_instanceCount :: Lens.Lens' CreateReservedInstancesListing Prelude.Int
+createReservedInstancesListing_instanceCount = Lens.lens (\CreateReservedInstancesListing' {instanceCount} -> instanceCount) (\s@CreateReservedInstancesListing' {} a -> s {instanceCount = a} :: CreateReservedInstancesListing)
+
+-- | A list specifying the price of the Standard Reserved Instance for each
+-- month remaining in the Reserved Instance term.
+createReservedInstancesListing_priceSchedules :: Lens.Lens' CreateReservedInstancesListing [PriceScheduleSpecification]
+createReservedInstancesListing_priceSchedules = Lens.lens (\CreateReservedInstancesListing' {priceSchedules} -> priceSchedules) (\s@CreateReservedInstancesListing' {} a -> s {priceSchedules = a} :: CreateReservedInstancesListing) Prelude.. Lens.coerced
+
+-- | The ID of the active Standard Reserved Instance.
+createReservedInstancesListing_reservedInstancesId :: Lens.Lens' CreateReservedInstancesListing Prelude.Text
+createReservedInstancesListing_reservedInstancesId = Lens.lens (\CreateReservedInstancesListing' {reservedInstancesId} -> reservedInstancesId) (\s@CreateReservedInstancesListing' {} a -> s {reservedInstancesId = a} :: CreateReservedInstancesListing)
+
+instance
+  Core.AWSRequest
+    CreateReservedInstancesListing
+  where
+  type
+    AWSResponse CreateReservedInstancesListing =
+      CreateReservedInstancesListingResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateReservedInstancesListingResponse'
+            Prelude.<$> ( x
+                            Data..@? "reservedInstancesListingsSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateReservedInstancesListing
+  where
+  hashWithSalt
+    _salt
+    CreateReservedInstancesListing' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` instanceCount
+        `Prelude.hashWithSalt` priceSchedules
+        `Prelude.hashWithSalt` reservedInstancesId
+
+instance
+  Prelude.NFData
+    CreateReservedInstancesListing
+  where
+  rnf CreateReservedInstancesListing' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf priceSchedules
+      `Prelude.seq` Prelude.rnf reservedInstancesId
+
+instance
+  Data.ToHeaders
+    CreateReservedInstancesListing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateReservedInstancesListing where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateReservedInstancesListing where
+  toQuery CreateReservedInstancesListing' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateReservedInstancesListing" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "InstanceCount" Data.=: instanceCount,
+        Data.toQueryList "PriceSchedules" priceSchedules,
+        "ReservedInstancesId" Data.=: reservedInstancesId
+      ]
+
+-- | Contains the output of CreateReservedInstancesListing.
+--
+-- /See:/ 'newCreateReservedInstancesListingResponse' smart constructor.
+data CreateReservedInstancesListingResponse = CreateReservedInstancesListingResponse'
+  { -- | Information about the Standard Reserved Instance listing.
+    reservedInstancesListings :: Prelude.Maybe [ReservedInstancesListing],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReservedInstancesListingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesListings', 'createReservedInstancesListingResponse_reservedInstancesListings' - Information about the Standard Reserved Instance listing.
+--
+-- 'httpStatus', 'createReservedInstancesListingResponse_httpStatus' - The response's http status code.
+newCreateReservedInstancesListingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateReservedInstancesListingResponse
+newCreateReservedInstancesListingResponse
+  pHttpStatus_ =
+    CreateReservedInstancesListingResponse'
+      { reservedInstancesListings =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the Standard Reserved Instance listing.
+createReservedInstancesListingResponse_reservedInstancesListings :: Lens.Lens' CreateReservedInstancesListingResponse (Prelude.Maybe [ReservedInstancesListing])
+createReservedInstancesListingResponse_reservedInstancesListings = Lens.lens (\CreateReservedInstancesListingResponse' {reservedInstancesListings} -> reservedInstancesListings) (\s@CreateReservedInstancesListingResponse' {} a -> s {reservedInstancesListings = a} :: CreateReservedInstancesListingResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createReservedInstancesListingResponse_httpStatus :: Lens.Lens' CreateReservedInstancesListingResponse Prelude.Int
+createReservedInstancesListingResponse_httpStatus = Lens.lens (\CreateReservedInstancesListingResponse' {httpStatus} -> httpStatus) (\s@CreateReservedInstancesListingResponse' {} a -> s {httpStatus = a} :: CreateReservedInstancesListingResponse)
+
+instance
+  Prelude.NFData
+    CreateReservedInstancesListingResponse
+  where
+  rnf CreateReservedInstancesListingResponse' {..} =
+    Prelude.rnf reservedInstancesListings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateRestoreImageTask.hs b/gen/Amazonka/EC2/CreateRestoreImageTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateRestoreImageTask.hs
@@ -0,0 +1,267 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateRestoreImageTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a task that restores an AMI from an Amazon S3 object that was
+-- previously created by using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateStoreImageTask.html CreateStoreImageTask>.
+--
+-- To use this API, you must have the required permissions. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions Permissions for storing and restoring AMIs using Amazon S3>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html Store and restore an AMI using Amazon S3>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreateRestoreImageTask
+  ( -- * Creating a Request
+    CreateRestoreImageTask (..),
+    newCreateRestoreImageTask,
+
+    -- * Request Lenses
+    createRestoreImageTask_dryRun,
+    createRestoreImageTask_name,
+    createRestoreImageTask_tagSpecifications,
+    createRestoreImageTask_bucket,
+    createRestoreImageTask_objectKey,
+
+    -- * Destructuring the Response
+    CreateRestoreImageTaskResponse (..),
+    newCreateRestoreImageTaskResponse,
+
+    -- * Response Lenses
+    createRestoreImageTaskResponse_imageId,
+    createRestoreImageTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRestoreImageTask' smart constructor.
+data CreateRestoreImageTask = CreateRestoreImageTask'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name for the restored AMI. The name must be unique for AMIs in the
+    -- Region for this account. If you do not provide a name, the new AMI gets
+    -- the same name as the original AMI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the AMI and snapshots on restoration. You can tag
+    -- the AMI, the snapshots, or both.
+    --
+    -- -   To tag the AMI, the value for @ResourceType@ must be @image@.
+    --
+    -- -   To tag the snapshots, the value for @ResourceType@ must be
+    --     @snapshot@. The same tag is applied to all of the snapshots that are
+    --     created.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The name of the Amazon S3 bucket that contains the stored AMI object.
+    bucket :: Prelude.Text,
+    -- | The name of the stored AMI object in the bucket.
+    objectKey :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRestoreImageTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createRestoreImageTask_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'name', 'createRestoreImageTask_name' - The name for the restored AMI. The name must be unique for AMIs in the
+-- Region for this account. If you do not provide a name, the new AMI gets
+-- the same name as the original AMI.
+--
+-- 'tagSpecifications', 'createRestoreImageTask_tagSpecifications' - The tags to apply to the AMI and snapshots on restoration. You can tag
+-- the AMI, the snapshots, or both.
+--
+-- -   To tag the AMI, the value for @ResourceType@ must be @image@.
+--
+-- -   To tag the snapshots, the value for @ResourceType@ must be
+--     @snapshot@. The same tag is applied to all of the snapshots that are
+--     created.
+--
+-- 'bucket', 'createRestoreImageTask_bucket' - The name of the Amazon S3 bucket that contains the stored AMI object.
+--
+-- 'objectKey', 'createRestoreImageTask_objectKey' - The name of the stored AMI object in the bucket.
+newCreateRestoreImageTask ::
+  -- | 'bucket'
+  Prelude.Text ->
+  -- | 'objectKey'
+  Prelude.Text ->
+  CreateRestoreImageTask
+newCreateRestoreImageTask pBucket_ pObjectKey_ =
+  CreateRestoreImageTask'
+    { dryRun = Prelude.Nothing,
+      name = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      bucket = pBucket_,
+      objectKey = pObjectKey_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createRestoreImageTask_dryRun :: Lens.Lens' CreateRestoreImageTask (Prelude.Maybe Prelude.Bool)
+createRestoreImageTask_dryRun = Lens.lens (\CreateRestoreImageTask' {dryRun} -> dryRun) (\s@CreateRestoreImageTask' {} a -> s {dryRun = a} :: CreateRestoreImageTask)
+
+-- | The name for the restored AMI. The name must be unique for AMIs in the
+-- Region for this account. If you do not provide a name, the new AMI gets
+-- the same name as the original AMI.
+createRestoreImageTask_name :: Lens.Lens' CreateRestoreImageTask (Prelude.Maybe Prelude.Text)
+createRestoreImageTask_name = Lens.lens (\CreateRestoreImageTask' {name} -> name) (\s@CreateRestoreImageTask' {} a -> s {name = a} :: CreateRestoreImageTask)
+
+-- | The tags to apply to the AMI and snapshots on restoration. You can tag
+-- the AMI, the snapshots, or both.
+--
+-- -   To tag the AMI, the value for @ResourceType@ must be @image@.
+--
+-- -   To tag the snapshots, the value for @ResourceType@ must be
+--     @snapshot@. The same tag is applied to all of the snapshots that are
+--     created.
+createRestoreImageTask_tagSpecifications :: Lens.Lens' CreateRestoreImageTask (Prelude.Maybe [TagSpecification])
+createRestoreImageTask_tagSpecifications = Lens.lens (\CreateRestoreImageTask' {tagSpecifications} -> tagSpecifications) (\s@CreateRestoreImageTask' {} a -> s {tagSpecifications = a} :: CreateRestoreImageTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the Amazon S3 bucket that contains the stored AMI object.
+createRestoreImageTask_bucket :: Lens.Lens' CreateRestoreImageTask Prelude.Text
+createRestoreImageTask_bucket = Lens.lens (\CreateRestoreImageTask' {bucket} -> bucket) (\s@CreateRestoreImageTask' {} a -> s {bucket = a} :: CreateRestoreImageTask)
+
+-- | The name of the stored AMI object in the bucket.
+createRestoreImageTask_objectKey :: Lens.Lens' CreateRestoreImageTask Prelude.Text
+createRestoreImageTask_objectKey = Lens.lens (\CreateRestoreImageTask' {objectKey} -> objectKey) (\s@CreateRestoreImageTask' {} a -> s {objectKey = a} :: CreateRestoreImageTask)
+
+instance Core.AWSRequest CreateRestoreImageTask where
+  type
+    AWSResponse CreateRestoreImageTask =
+      CreateRestoreImageTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateRestoreImageTaskResponse'
+            Prelude.<$> (x Data..@? "imageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRestoreImageTask where
+  hashWithSalt _salt CreateRestoreImageTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` objectKey
+
+instance Prelude.NFData CreateRestoreImageTask where
+  rnf CreateRestoreImageTask' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf objectKey
+
+instance Data.ToHeaders CreateRestoreImageTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateRestoreImageTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateRestoreImageTask where
+  toQuery CreateRestoreImageTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateRestoreImageTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Name" Data.=: name,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Bucket" Data.=: bucket,
+        "ObjectKey" Data.=: objectKey
+      ]
+
+-- | /See:/ 'newCreateRestoreImageTaskResponse' smart constructor.
+data CreateRestoreImageTaskResponse = CreateRestoreImageTaskResponse'
+  { -- | The AMI ID.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRestoreImageTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'createRestoreImageTaskResponse_imageId' - The AMI ID.
+--
+-- 'httpStatus', 'createRestoreImageTaskResponse_httpStatus' - The response's http status code.
+newCreateRestoreImageTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRestoreImageTaskResponse
+newCreateRestoreImageTaskResponse pHttpStatus_ =
+  CreateRestoreImageTaskResponse'
+    { imageId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The AMI ID.
+createRestoreImageTaskResponse_imageId :: Lens.Lens' CreateRestoreImageTaskResponse (Prelude.Maybe Prelude.Text)
+createRestoreImageTaskResponse_imageId = Lens.lens (\CreateRestoreImageTaskResponse' {imageId} -> imageId) (\s@CreateRestoreImageTaskResponse' {} a -> s {imageId = a} :: CreateRestoreImageTaskResponse)
+
+-- | The response's http status code.
+createRestoreImageTaskResponse_httpStatus :: Lens.Lens' CreateRestoreImageTaskResponse Prelude.Int
+createRestoreImageTaskResponse_httpStatus = Lens.lens (\CreateRestoreImageTaskResponse' {httpStatus} -> httpStatus) (\s@CreateRestoreImageTaskResponse' {} a -> s {httpStatus = a} :: CreateRestoreImageTaskResponse)
+
+instance
+  Prelude.NFData
+    CreateRestoreImageTaskResponse
+  where
+  rnf CreateRestoreImageTaskResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateRoute.hs b/gen/Amazonka/EC2/CreateRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateRoute.hs
@@ -0,0 +1,416 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a route in a route table within a VPC.
+--
+-- You must specify either a destination CIDR block or a prefix list ID.
+-- You must also specify exactly one of the resources from the parameter
+-- list.
+--
+-- When determining how to route traffic, we use the route with the most
+-- specific match. For example, traffic is destined for the IPv4 address
+-- @192.0.2.3@, and the route table includes the following two IPv4 routes:
+--
+-- -   @192.0.2.0\/24@ (goes to some target A)
+--
+-- -   @192.0.2.0\/28@ (goes to some target B)
+--
+-- Both routes apply to the traffic destined for @192.0.2.3@. However, the
+-- second route in the list covers a smaller number of IP addresses and is
+-- therefore more specific, so we use that route to determine where to
+-- target the traffic.
+--
+-- For more information about route tables, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateRoute
+  ( -- * Creating a Request
+    CreateRoute (..),
+    newCreateRoute,
+
+    -- * Request Lenses
+    createRoute_carrierGatewayId,
+    createRoute_coreNetworkArn,
+    createRoute_destinationCidrBlock,
+    createRoute_destinationIpv6CidrBlock,
+    createRoute_destinationPrefixListId,
+    createRoute_dryRun,
+    createRoute_egressOnlyInternetGatewayId,
+    createRoute_gatewayId,
+    createRoute_instanceId,
+    createRoute_localGatewayId,
+    createRoute_natGatewayId,
+    createRoute_networkInterfaceId,
+    createRoute_transitGatewayId,
+    createRoute_vpcEndpointId,
+    createRoute_vpcPeeringConnectionId,
+    createRoute_routeTableId,
+
+    -- * Destructuring the Response
+    CreateRouteResponse (..),
+    newCreateRouteResponse,
+
+    -- * Response Lenses
+    createRouteResponse_return,
+    createRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRoute' smart constructor.
+data CreateRoute = CreateRoute'
+  { -- | The ID of the carrier gateway.
+    --
+    -- You can only use this option when the VPC contains a subnet which is
+    -- associated with a Wavelength Zone.
+    carrierGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the core network.
+    coreNetworkArn :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR address block used for the destination match. Routing
+    -- decisions are based on the most specific match. We modify the specified
+    -- CIDR block to its canonical form; for example, if you specify
+    -- @100.68.0.18\/18@, we modify it to @100.68.0.0\/18@.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR block used for the destination match. Routing decisions
+    -- are based on the most specific match.
+    destinationIpv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a prefix list used for the destination match.
+    destinationPrefixListId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | [IPv6 traffic only] The ID of an egress-only internet gateway.
+    egressOnlyInternetGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an internet gateway or virtual private gateway attached to
+    -- your VPC.
+    gatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a NAT instance in your VPC. The operation fails if you specify
+    -- an instance ID unless exactly one network interface is attached.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | [IPv4 traffic only] The ID of a NAT gateway.
+    natGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints
+    -- only.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the route table for the route.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGatewayId', 'createRoute_carrierGatewayId' - The ID of the carrier gateway.
+--
+-- You can only use this option when the VPC contains a subnet which is
+-- associated with a Wavelength Zone.
+--
+-- 'coreNetworkArn', 'createRoute_coreNetworkArn' - The Amazon Resource Name (ARN) of the core network.
+--
+-- 'destinationCidrBlock', 'createRoute_destinationCidrBlock' - The IPv4 CIDR address block used for the destination match. Routing
+-- decisions are based on the most specific match. We modify the specified
+-- CIDR block to its canonical form; for example, if you specify
+-- @100.68.0.18\/18@, we modify it to @100.68.0.0\/18@.
+--
+-- 'destinationIpv6CidrBlock', 'createRoute_destinationIpv6CidrBlock' - The IPv6 CIDR block used for the destination match. Routing decisions
+-- are based on the most specific match.
+--
+-- 'destinationPrefixListId', 'createRoute_destinationPrefixListId' - The ID of a prefix list used for the destination match.
+--
+-- 'dryRun', 'createRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'egressOnlyInternetGatewayId', 'createRoute_egressOnlyInternetGatewayId' - [IPv6 traffic only] The ID of an egress-only internet gateway.
+--
+-- 'gatewayId', 'createRoute_gatewayId' - The ID of an internet gateway or virtual private gateway attached to
+-- your VPC.
+--
+-- 'instanceId', 'createRoute_instanceId' - The ID of a NAT instance in your VPC. The operation fails if you specify
+-- an instance ID unless exactly one network interface is attached.
+--
+-- 'localGatewayId', 'createRoute_localGatewayId' - The ID of the local gateway.
+--
+-- 'natGatewayId', 'createRoute_natGatewayId' - [IPv4 traffic only] The ID of a NAT gateway.
+--
+-- 'networkInterfaceId', 'createRoute_networkInterfaceId' - The ID of a network interface.
+--
+-- 'transitGatewayId', 'createRoute_transitGatewayId' - The ID of a transit gateway.
+--
+-- 'vpcEndpointId', 'createRoute_vpcEndpointId' - The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints
+-- only.
+--
+-- 'vpcPeeringConnectionId', 'createRoute_vpcPeeringConnectionId' - The ID of a VPC peering connection.
+--
+-- 'routeTableId', 'createRoute_routeTableId' - The ID of the route table for the route.
+newCreateRoute ::
+  -- | 'routeTableId'
+  Prelude.Text ->
+  CreateRoute
+newCreateRoute pRouteTableId_ =
+  CreateRoute'
+    { carrierGatewayId = Prelude.Nothing,
+      coreNetworkArn = Prelude.Nothing,
+      destinationCidrBlock = Prelude.Nothing,
+      destinationIpv6CidrBlock = Prelude.Nothing,
+      destinationPrefixListId = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      egressOnlyInternetGatewayId = Prelude.Nothing,
+      gatewayId = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      localGatewayId = Prelude.Nothing,
+      natGatewayId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing,
+      routeTableId = pRouteTableId_
+    }
+
+-- | The ID of the carrier gateway.
+--
+-- You can only use this option when the VPC contains a subnet which is
+-- associated with a Wavelength Zone.
+createRoute_carrierGatewayId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_carrierGatewayId = Lens.lens (\CreateRoute' {carrierGatewayId} -> carrierGatewayId) (\s@CreateRoute' {} a -> s {carrierGatewayId = a} :: CreateRoute)
+
+-- | The Amazon Resource Name (ARN) of the core network.
+createRoute_coreNetworkArn :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_coreNetworkArn = Lens.lens (\CreateRoute' {coreNetworkArn} -> coreNetworkArn) (\s@CreateRoute' {} a -> s {coreNetworkArn = a} :: CreateRoute)
+
+-- | The IPv4 CIDR address block used for the destination match. Routing
+-- decisions are based on the most specific match. We modify the specified
+-- CIDR block to its canonical form; for example, if you specify
+-- @100.68.0.18\/18@, we modify it to @100.68.0.0\/18@.
+createRoute_destinationCidrBlock :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_destinationCidrBlock = Lens.lens (\CreateRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@CreateRoute' {} a -> s {destinationCidrBlock = a} :: CreateRoute)
+
+-- | The IPv6 CIDR block used for the destination match. Routing decisions
+-- are based on the most specific match.
+createRoute_destinationIpv6CidrBlock :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_destinationIpv6CidrBlock = Lens.lens (\CreateRoute' {destinationIpv6CidrBlock} -> destinationIpv6CidrBlock) (\s@CreateRoute' {} a -> s {destinationIpv6CidrBlock = a} :: CreateRoute)
+
+-- | The ID of a prefix list used for the destination match.
+createRoute_destinationPrefixListId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_destinationPrefixListId = Lens.lens (\CreateRoute' {destinationPrefixListId} -> destinationPrefixListId) (\s@CreateRoute' {} a -> s {destinationPrefixListId = a} :: CreateRoute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createRoute_dryRun :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Bool)
+createRoute_dryRun = Lens.lens (\CreateRoute' {dryRun} -> dryRun) (\s@CreateRoute' {} a -> s {dryRun = a} :: CreateRoute)
+
+-- | [IPv6 traffic only] The ID of an egress-only internet gateway.
+createRoute_egressOnlyInternetGatewayId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_egressOnlyInternetGatewayId = Lens.lens (\CreateRoute' {egressOnlyInternetGatewayId} -> egressOnlyInternetGatewayId) (\s@CreateRoute' {} a -> s {egressOnlyInternetGatewayId = a} :: CreateRoute)
+
+-- | The ID of an internet gateway or virtual private gateway attached to
+-- your VPC.
+createRoute_gatewayId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_gatewayId = Lens.lens (\CreateRoute' {gatewayId} -> gatewayId) (\s@CreateRoute' {} a -> s {gatewayId = a} :: CreateRoute)
+
+-- | The ID of a NAT instance in your VPC. The operation fails if you specify
+-- an instance ID unless exactly one network interface is attached.
+createRoute_instanceId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_instanceId = Lens.lens (\CreateRoute' {instanceId} -> instanceId) (\s@CreateRoute' {} a -> s {instanceId = a} :: CreateRoute)
+
+-- | The ID of the local gateway.
+createRoute_localGatewayId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_localGatewayId = Lens.lens (\CreateRoute' {localGatewayId} -> localGatewayId) (\s@CreateRoute' {} a -> s {localGatewayId = a} :: CreateRoute)
+
+-- | [IPv4 traffic only] The ID of a NAT gateway.
+createRoute_natGatewayId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_natGatewayId = Lens.lens (\CreateRoute' {natGatewayId} -> natGatewayId) (\s@CreateRoute' {} a -> s {natGatewayId = a} :: CreateRoute)
+
+-- | The ID of a network interface.
+createRoute_networkInterfaceId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_networkInterfaceId = Lens.lens (\CreateRoute' {networkInterfaceId} -> networkInterfaceId) (\s@CreateRoute' {} a -> s {networkInterfaceId = a} :: CreateRoute)
+
+-- | The ID of a transit gateway.
+createRoute_transitGatewayId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_transitGatewayId = Lens.lens (\CreateRoute' {transitGatewayId} -> transitGatewayId) (\s@CreateRoute' {} a -> s {transitGatewayId = a} :: CreateRoute)
+
+-- | The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints
+-- only.
+createRoute_vpcEndpointId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_vpcEndpointId = Lens.lens (\CreateRoute' {vpcEndpointId} -> vpcEndpointId) (\s@CreateRoute' {} a -> s {vpcEndpointId = a} :: CreateRoute)
+
+-- | The ID of a VPC peering connection.
+createRoute_vpcPeeringConnectionId :: Lens.Lens' CreateRoute (Prelude.Maybe Prelude.Text)
+createRoute_vpcPeeringConnectionId = Lens.lens (\CreateRoute' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@CreateRoute' {} a -> s {vpcPeeringConnectionId = a} :: CreateRoute)
+
+-- | The ID of the route table for the route.
+createRoute_routeTableId :: Lens.Lens' CreateRoute Prelude.Text
+createRoute_routeTableId = Lens.lens (\CreateRoute' {routeTableId} -> routeTableId) (\s@CreateRoute' {} a -> s {routeTableId = a} :: CreateRoute)
+
+instance Core.AWSRequest CreateRoute where
+  type AWSResponse CreateRoute = CreateRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateRouteResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRoute where
+  hashWithSalt _salt CreateRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` carrierGatewayId
+      `Prelude.hashWithSalt` coreNetworkArn
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationIpv6CidrBlock
+      `Prelude.hashWithSalt` destinationPrefixListId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` egressOnlyInternetGatewayId
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` localGatewayId
+      `Prelude.hashWithSalt` natGatewayId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpcEndpointId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData CreateRoute where
+  rnf CreateRoute' {..} =
+    Prelude.rnf carrierGatewayId
+      `Prelude.seq` Prelude.rnf coreNetworkArn
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationIpv6CidrBlock
+      `Prelude.seq` Prelude.rnf destinationPrefixListId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayId
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf natGatewayId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders CreateRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateRoute where
+  toQuery CreateRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CarrierGatewayId" Data.=: carrierGatewayId,
+        "CoreNetworkArn" Data.=: coreNetworkArn,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "DestinationIpv6CidrBlock"
+          Data.=: destinationIpv6CidrBlock,
+        "DestinationPrefixListId"
+          Data.=: destinationPrefixListId,
+        "DryRun" Data.=: dryRun,
+        "EgressOnlyInternetGatewayId"
+          Data.=: egressOnlyInternetGatewayId,
+        "GatewayId" Data.=: gatewayId,
+        "InstanceId" Data.=: instanceId,
+        "LocalGatewayId" Data.=: localGatewayId,
+        "NatGatewayId" Data.=: natGatewayId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "TransitGatewayId" Data.=: transitGatewayId,
+        "VpcEndpointId" Data.=: vpcEndpointId,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newCreateRouteResponse' smart constructor.
+data CreateRouteResponse = CreateRouteResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'createRouteResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'createRouteResponse_httpStatus' - The response's http status code.
+newCreateRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRouteResponse
+newCreateRouteResponse pHttpStatus_ =
+  CreateRouteResponse'
+    { return' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+createRouteResponse_return :: Lens.Lens' CreateRouteResponse (Prelude.Maybe Prelude.Bool)
+createRouteResponse_return = Lens.lens (\CreateRouteResponse' {return'} -> return') (\s@CreateRouteResponse' {} a -> s {return' = a} :: CreateRouteResponse)
+
+-- | The response's http status code.
+createRouteResponse_httpStatus :: Lens.Lens' CreateRouteResponse Prelude.Int
+createRouteResponse_httpStatus = Lens.lens (\CreateRouteResponse' {httpStatus} -> httpStatus) (\s@CreateRouteResponse' {} a -> s {httpStatus = a} :: CreateRouteResponse)
+
+instance Prelude.NFData CreateRouteResponse where
+  rnf CreateRouteResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateRouteTable.hs b/gen/Amazonka/EC2/CreateRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateRouteTable.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a route table for the specified VPC. After you create a route
+-- table, you can add routes and associate the table with a subnet.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateRouteTable
+  ( -- * Creating a Request
+    CreateRouteTable (..),
+    newCreateRouteTable,
+
+    -- * Request Lenses
+    createRouteTable_dryRun,
+    createRouteTable_tagSpecifications,
+    createRouteTable_vpcId,
+
+    -- * Destructuring the Response
+    CreateRouteTableResponse (..),
+    newCreateRouteTableResponse,
+
+    -- * Response Lenses
+    createRouteTableResponse_routeTable,
+    createRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateRouteTable' smart constructor.
+data CreateRouteTable = CreateRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the route table.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createRouteTable_tagSpecifications' - The tags to assign to the route table.
+--
+-- 'vpcId', 'createRouteTable_vpcId' - The ID of the VPC.
+newCreateRouteTable ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateRouteTable
+newCreateRouteTable pVpcId_ =
+  CreateRouteTable'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createRouteTable_dryRun :: Lens.Lens' CreateRouteTable (Prelude.Maybe Prelude.Bool)
+createRouteTable_dryRun = Lens.lens (\CreateRouteTable' {dryRun} -> dryRun) (\s@CreateRouteTable' {} a -> s {dryRun = a} :: CreateRouteTable)
+
+-- | The tags to assign to the route table.
+createRouteTable_tagSpecifications :: Lens.Lens' CreateRouteTable (Prelude.Maybe [TagSpecification])
+createRouteTable_tagSpecifications = Lens.lens (\CreateRouteTable' {tagSpecifications} -> tagSpecifications) (\s@CreateRouteTable' {} a -> s {tagSpecifications = a} :: CreateRouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+createRouteTable_vpcId :: Lens.Lens' CreateRouteTable Prelude.Text
+createRouteTable_vpcId = Lens.lens (\CreateRouteTable' {vpcId} -> vpcId) (\s@CreateRouteTable' {} a -> s {vpcId = a} :: CreateRouteTable)
+
+instance Core.AWSRequest CreateRouteTable where
+  type
+    AWSResponse CreateRouteTable =
+      CreateRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateRouteTableResponse'
+            Prelude.<$> (x Data..@? "routeTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateRouteTable where
+  hashWithSalt _salt CreateRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CreateRouteTable where
+  rnf CreateRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders CreateRouteTable where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateRouteTable where
+  toQuery CreateRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateRouteTable" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newCreateRouteTableResponse' smart constructor.
+data CreateRouteTableResponse = CreateRouteTableResponse'
+  { -- | Information about the route table.
+    routeTable :: Prelude.Maybe RouteTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'routeTable', 'createRouteTableResponse_routeTable' - Information about the route table.
+--
+-- 'httpStatus', 'createRouteTableResponse_httpStatus' - The response's http status code.
+newCreateRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateRouteTableResponse
+newCreateRouteTableResponse pHttpStatus_ =
+  CreateRouteTableResponse'
+    { routeTable =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the route table.
+createRouteTableResponse_routeTable :: Lens.Lens' CreateRouteTableResponse (Prelude.Maybe RouteTable)
+createRouteTableResponse_routeTable = Lens.lens (\CreateRouteTableResponse' {routeTable} -> routeTable) (\s@CreateRouteTableResponse' {} a -> s {routeTable = a} :: CreateRouteTableResponse)
+
+-- | The response's http status code.
+createRouteTableResponse_httpStatus :: Lens.Lens' CreateRouteTableResponse Prelude.Int
+createRouteTableResponse_httpStatus = Lens.lens (\CreateRouteTableResponse' {httpStatus} -> httpStatus) (\s@CreateRouteTableResponse' {} a -> s {httpStatus = a} :: CreateRouteTableResponse)
+
+instance Prelude.NFData CreateRouteTableResponse where
+  rnf CreateRouteTableResponse' {..} =
+    Prelude.rnf routeTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateSecurityGroup.hs b/gen/Amazonka/EC2/CreateSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateSecurityGroup.hs
@@ -0,0 +1,318 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateSecurityGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a security group.
+--
+-- A security group acts as a virtual firewall for your instance to control
+-- inbound and outbound traffic. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Amazon EC2 security groups>
+-- in the /Amazon Elastic Compute Cloud User Guide/ and
+-- <https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security groups for your VPC>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- When you create a security group, you specify a friendly name of your
+-- choice. You can have a security group for use in EC2-Classic with the
+-- same name as a security group for use in a VPC. However, you can\'t have
+-- two security groups for use in EC2-Classic with the same name or two
+-- security groups for use in a VPC with the same name.
+--
+-- You have a default security group for use in EC2-Classic and a default
+-- security group for use in your VPC. If you don\'t specify a security
+-- group when you launch an instance, the instance is launched into the
+-- appropriate default security group. A default security group includes a
+-- default rule that grants instances unrestricted network access to each
+-- other.
+--
+-- You can add or remove rules from your security groups using
+-- AuthorizeSecurityGroupIngress, AuthorizeSecurityGroupEgress,
+-- RevokeSecurityGroupIngress, and RevokeSecurityGroupEgress.
+--
+-- For more information about VPC security group limits, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html Amazon VPC Limits>.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateSecurityGroup
+  ( -- * Creating a Request
+    CreateSecurityGroup (..),
+    newCreateSecurityGroup,
+
+    -- * Request Lenses
+    createSecurityGroup_dryRun,
+    createSecurityGroup_tagSpecifications,
+    createSecurityGroup_vpcId,
+    createSecurityGroup_description,
+    createSecurityGroup_groupName,
+
+    -- * Destructuring the Response
+    CreateSecurityGroupResponse (..),
+    newCreateSecurityGroupResponse,
+
+    -- * Response Lenses
+    createSecurityGroupResponse_tags,
+    createSecurityGroupResponse_httpStatus,
+    createSecurityGroupResponse_groupId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSecurityGroup' smart constructor.
+data CreateSecurityGroup = CreateSecurityGroup'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the security group.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | [EC2-VPC] The ID of the VPC. Required for EC2-VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | A description for the security group. This is informational only.
+    --
+    -- Constraints: Up to 255 characters in length
+    --
+    -- Constraints for EC2-Classic: ASCII characters
+    --
+    -- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and
+    -- ._-:\/()#,\@[]+=&;{}!$*
+    description :: Prelude.Text,
+    -- | The name of the security group.
+    --
+    -- Constraints: Up to 255 characters in length. Cannot start with @sg-@.
+    --
+    -- Constraints for EC2-Classic: ASCII characters
+    --
+    -- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and
+    -- ._-:\/()#,\@[]+=&;{}!$*
+    groupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSecurityGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createSecurityGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createSecurityGroup_tagSpecifications' - The tags to assign to the security group.
+--
+-- 'vpcId', 'createSecurityGroup_vpcId' - [EC2-VPC] The ID of the VPC. Required for EC2-VPC.
+--
+-- 'description', 'createSecurityGroup_description' - A description for the security group. This is informational only.
+--
+-- Constraints: Up to 255 characters in length
+--
+-- Constraints for EC2-Classic: ASCII characters
+--
+-- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and
+-- ._-:\/()#,\@[]+=&;{}!$*
+--
+-- 'groupName', 'createSecurityGroup_groupName' - The name of the security group.
+--
+-- Constraints: Up to 255 characters in length. Cannot start with @sg-@.
+--
+-- Constraints for EC2-Classic: ASCII characters
+--
+-- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and
+-- ._-:\/()#,\@[]+=&;{}!$*
+newCreateSecurityGroup ::
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'groupName'
+  Prelude.Text ->
+  CreateSecurityGroup
+newCreateSecurityGroup pDescription_ pGroupName_ =
+  CreateSecurityGroup'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      description = pDescription_,
+      groupName = pGroupName_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createSecurityGroup_dryRun :: Lens.Lens' CreateSecurityGroup (Prelude.Maybe Prelude.Bool)
+createSecurityGroup_dryRun = Lens.lens (\CreateSecurityGroup' {dryRun} -> dryRun) (\s@CreateSecurityGroup' {} a -> s {dryRun = a} :: CreateSecurityGroup)
+
+-- | The tags to assign to the security group.
+createSecurityGroup_tagSpecifications :: Lens.Lens' CreateSecurityGroup (Prelude.Maybe [TagSpecification])
+createSecurityGroup_tagSpecifications = Lens.lens (\CreateSecurityGroup' {tagSpecifications} -> tagSpecifications) (\s@CreateSecurityGroup' {} a -> s {tagSpecifications = a} :: CreateSecurityGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | [EC2-VPC] The ID of the VPC. Required for EC2-VPC.
+createSecurityGroup_vpcId :: Lens.Lens' CreateSecurityGroup (Prelude.Maybe Prelude.Text)
+createSecurityGroup_vpcId = Lens.lens (\CreateSecurityGroup' {vpcId} -> vpcId) (\s@CreateSecurityGroup' {} a -> s {vpcId = a} :: CreateSecurityGroup)
+
+-- | A description for the security group. This is informational only.
+--
+-- Constraints: Up to 255 characters in length
+--
+-- Constraints for EC2-Classic: ASCII characters
+--
+-- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and
+-- ._-:\/()#,\@[]+=&;{}!$*
+createSecurityGroup_description :: Lens.Lens' CreateSecurityGroup Prelude.Text
+createSecurityGroup_description = Lens.lens (\CreateSecurityGroup' {description} -> description) (\s@CreateSecurityGroup' {} a -> s {description = a} :: CreateSecurityGroup)
+
+-- | The name of the security group.
+--
+-- Constraints: Up to 255 characters in length. Cannot start with @sg-@.
+--
+-- Constraints for EC2-Classic: ASCII characters
+--
+-- Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and
+-- ._-:\/()#,\@[]+=&;{}!$*
+createSecurityGroup_groupName :: Lens.Lens' CreateSecurityGroup Prelude.Text
+createSecurityGroup_groupName = Lens.lens (\CreateSecurityGroup' {groupName} -> groupName) (\s@CreateSecurityGroup' {} a -> s {groupName = a} :: CreateSecurityGroup)
+
+instance Core.AWSRequest CreateSecurityGroup where
+  type
+    AWSResponse CreateSecurityGroup =
+      CreateSecurityGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateSecurityGroupResponse'
+            Prelude.<$> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..@ "groupId")
+      )
+
+instance Prelude.Hashable CreateSecurityGroup where
+  hashWithSalt _salt CreateSecurityGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData CreateSecurityGroup where
+  rnf CreateSecurityGroup' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf groupName
+
+instance Data.ToHeaders CreateSecurityGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateSecurityGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSecurityGroup where
+  toQuery CreateSecurityGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateSecurityGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId,
+        "GroupDescription" Data.=: description,
+        "GroupName" Data.=: groupName
+      ]
+
+-- | /See:/ 'newCreateSecurityGroupResponse' smart constructor.
+data CreateSecurityGroupResponse = CreateSecurityGroupResponse'
+  { -- | The tags assigned to the security group.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the security group.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSecurityGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'createSecurityGroupResponse_tags' - The tags assigned to the security group.
+--
+-- 'httpStatus', 'createSecurityGroupResponse_httpStatus' - The response's http status code.
+--
+-- 'groupId', 'createSecurityGroupResponse_groupId' - The ID of the security group.
+newCreateSecurityGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'groupId'
+  Prelude.Text ->
+  CreateSecurityGroupResponse
+newCreateSecurityGroupResponse pHttpStatus_ pGroupId_ =
+  CreateSecurityGroupResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      groupId = pGroupId_
+    }
+
+-- | The tags assigned to the security group.
+createSecurityGroupResponse_tags :: Lens.Lens' CreateSecurityGroupResponse (Prelude.Maybe [Tag])
+createSecurityGroupResponse_tags = Lens.lens (\CreateSecurityGroupResponse' {tags} -> tags) (\s@CreateSecurityGroupResponse' {} a -> s {tags = a} :: CreateSecurityGroupResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createSecurityGroupResponse_httpStatus :: Lens.Lens' CreateSecurityGroupResponse Prelude.Int
+createSecurityGroupResponse_httpStatus = Lens.lens (\CreateSecurityGroupResponse' {httpStatus} -> httpStatus) (\s@CreateSecurityGroupResponse' {} a -> s {httpStatus = a} :: CreateSecurityGroupResponse)
+
+-- | The ID of the security group.
+createSecurityGroupResponse_groupId :: Lens.Lens' CreateSecurityGroupResponse Prelude.Text
+createSecurityGroupResponse_groupId = Lens.lens (\CreateSecurityGroupResponse' {groupId} -> groupId) (\s@CreateSecurityGroupResponse' {} a -> s {groupId = a} :: CreateSecurityGroupResponse)
+
+instance Prelude.NFData CreateSecurityGroupResponse where
+  rnf CreateSecurityGroupResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf groupId
diff --git a/gen/Amazonka/EC2/CreateSnapshot.hs b/gen/Amazonka/EC2/CreateSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateSnapshot.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateSnapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a snapshot of an EBS volume and stores it in Amazon S3. You can
+-- use snapshots for backups, to make copies of EBS volumes, and to save
+-- data before shutting down an instance.
+--
+-- You can create snapshots of volumes in a Region and volumes on an
+-- Outpost. If you create a snapshot of a volume in a Region, the snapshot
+-- must be stored in the same Region as the volume. If you create a
+-- snapshot of a volume on an Outpost, the snapshot can be stored on the
+-- same Outpost as the volume, or in the Region for that Outpost.
+--
+-- When a snapshot is created, any Amazon Web Services Marketplace product
+-- codes that are associated with the source volume are propagated to the
+-- snapshot.
+--
+-- You can take a snapshot of an attached volume that is in use. However,
+-- snapshots only capture data that has been written to your Amazon EBS
+-- volume at the time the snapshot command is issued; this might exclude
+-- any data that has been cached by any applications or the operating
+-- system. If you can pause any file systems on the volume long enough to
+-- take a snapshot, your snapshot should be complete. However, if you
+-- cannot pause all file writes to the volume, you should unmount the
+-- volume from within the instance, issue the snapshot command, and then
+-- remount the volume to ensure a consistent and complete snapshot. You may
+-- remount and use your volume while the snapshot status is @pending@.
+--
+-- To create a snapshot for Amazon EBS volumes that serve as root devices,
+-- you should stop the instance before taking the snapshot.
+--
+-- Snapshots that are taken from encrypted volumes are automatically
+-- encrypted. Volumes that are created from encrypted snapshots are also
+-- automatically encrypted. Your encrypted volumes and any associated
+-- snapshots always remain protected.
+--
+-- You can tag your snapshots during creation. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tag your Amazon EC2 resources>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html Amazon Elastic Block Store>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateSnapshot
+  ( -- * Creating a Request
+    CreateSnapshot (..),
+    newCreateSnapshot,
+
+    -- * Request Lenses
+    createSnapshot_description,
+    createSnapshot_dryRun,
+    createSnapshot_outpostArn,
+    createSnapshot_tagSpecifications,
+    createSnapshot_volumeId,
+
+    -- * Destructuring the Response
+    Snapshot (..),
+    newSnapshot,
+
+    -- * Response Lenses
+    snapshot_dataEncryptionKeyId,
+    snapshot_kmsKeyId,
+    snapshot_outpostArn,
+    snapshot_ownerAlias,
+    snapshot_restoreExpiryTime,
+    snapshot_stateMessage,
+    snapshot_storageTier,
+    snapshot_tags,
+    snapshot_snapshotId,
+    snapshot_ownerId,
+    snapshot_volumeId,
+    snapshot_volumeSize,
+    snapshot_description,
+    snapshot_startTime,
+    snapshot_progress,
+    snapshot_state,
+    snapshot_encrypted,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSnapshot' smart constructor.
+data CreateSnapshot = CreateSnapshot'
+  { -- | A description for the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Outpost on which to create a local
+    -- snapshot.
+    --
+    -- -   To create a snapshot of a volume in a Region, omit this parameter.
+    --     The snapshot is created in the same Region as the volume.
+    --
+    -- -   To create a snapshot of a volume on an Outpost and store the
+    --     snapshot in the Region, omit this parameter. The snapshot is created
+    --     in the Region for the Outpost.
+    --
+    -- -   To create a snapshot of a volume on an Outpost and store the
+    --     snapshot on an Outpost, specify the ARN of the destination Outpost.
+    --     The snapshot must be created on the same Outpost as the volume.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-snapshot Create local snapshots from volumes on an Outpost>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the snapshot during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the Amazon EBS volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createSnapshot_description' - A description for the snapshot.
+--
+-- 'dryRun', 'createSnapshot_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'outpostArn', 'createSnapshot_outpostArn' - The Amazon Resource Name (ARN) of the Outpost on which to create a local
+-- snapshot.
+--
+-- -   To create a snapshot of a volume in a Region, omit this parameter.
+--     The snapshot is created in the same Region as the volume.
+--
+-- -   To create a snapshot of a volume on an Outpost and store the
+--     snapshot in the Region, omit this parameter. The snapshot is created
+--     in the Region for the Outpost.
+--
+-- -   To create a snapshot of a volume on an Outpost and store the
+--     snapshot on an Outpost, specify the ARN of the destination Outpost.
+--     The snapshot must be created on the same Outpost as the volume.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-snapshot Create local snapshots from volumes on an Outpost>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'tagSpecifications', 'createSnapshot_tagSpecifications' - The tags to apply to the snapshot during creation.
+--
+-- 'volumeId', 'createSnapshot_volumeId' - The ID of the Amazon EBS volume.
+newCreateSnapshot ::
+  -- | 'volumeId'
+  Prelude.Text ->
+  CreateSnapshot
+newCreateSnapshot pVolumeId_ =
+  CreateSnapshot'
+    { description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      volumeId = pVolumeId_
+    }
+
+-- | A description for the snapshot.
+createSnapshot_description :: Lens.Lens' CreateSnapshot (Prelude.Maybe Prelude.Text)
+createSnapshot_description = Lens.lens (\CreateSnapshot' {description} -> description) (\s@CreateSnapshot' {} a -> s {description = a} :: CreateSnapshot)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createSnapshot_dryRun :: Lens.Lens' CreateSnapshot (Prelude.Maybe Prelude.Bool)
+createSnapshot_dryRun = Lens.lens (\CreateSnapshot' {dryRun} -> dryRun) (\s@CreateSnapshot' {} a -> s {dryRun = a} :: CreateSnapshot)
+
+-- | The Amazon Resource Name (ARN) of the Outpost on which to create a local
+-- snapshot.
+--
+-- -   To create a snapshot of a volume in a Region, omit this parameter.
+--     The snapshot is created in the same Region as the volume.
+--
+-- -   To create a snapshot of a volume on an Outpost and store the
+--     snapshot in the Region, omit this parameter. The snapshot is created
+--     in the Region for the Outpost.
+--
+-- -   To create a snapshot of a volume on an Outpost and store the
+--     snapshot on an Outpost, specify the ARN of the destination Outpost.
+--     The snapshot must be created on the same Outpost as the volume.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-snapshot Create local snapshots from volumes on an Outpost>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+createSnapshot_outpostArn :: Lens.Lens' CreateSnapshot (Prelude.Maybe Prelude.Text)
+createSnapshot_outpostArn = Lens.lens (\CreateSnapshot' {outpostArn} -> outpostArn) (\s@CreateSnapshot' {} a -> s {outpostArn = a} :: CreateSnapshot)
+
+-- | The tags to apply to the snapshot during creation.
+createSnapshot_tagSpecifications :: Lens.Lens' CreateSnapshot (Prelude.Maybe [TagSpecification])
+createSnapshot_tagSpecifications = Lens.lens (\CreateSnapshot' {tagSpecifications} -> tagSpecifications) (\s@CreateSnapshot' {} a -> s {tagSpecifications = a} :: CreateSnapshot) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon EBS volume.
+createSnapshot_volumeId :: Lens.Lens' CreateSnapshot Prelude.Text
+createSnapshot_volumeId = Lens.lens (\CreateSnapshot' {volumeId} -> volumeId) (\s@CreateSnapshot' {} a -> s {volumeId = a} :: CreateSnapshot)
+
+instance Core.AWSRequest CreateSnapshot where
+  type AWSResponse CreateSnapshot = Snapshot
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML (\s h x -> Data.parseXML x)
+
+instance Prelude.Hashable CreateSnapshot where
+  hashWithSalt _salt CreateSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData CreateSnapshot where
+  rnf CreateSnapshot' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders CreateSnapshot where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateSnapshot where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSnapshot where
+  toQuery CreateSnapshot' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateSnapshot" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "OutpostArn" Data.=: outpostArn,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VolumeId" Data.=: volumeId
+      ]
diff --git a/gen/Amazonka/EC2/CreateSnapshots.hs b/gen/Amazonka/EC2/CreateSnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateSnapshots.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateSnapshots
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates crash-consistent snapshots of multiple EBS volumes and stores
+-- the data in S3. Volumes are chosen by specifying an instance. Any
+-- attached volumes will produce one snapshot each that is crash-consistent
+-- across the instance.
+--
+-- You can include all of the volumes currently attached to the instance,
+-- or you can exclude the root volume or specific data (non-root) volumes
+-- from the multi-volume snapshot set.
+--
+-- You can create multi-volume snapshots of instances in a Region and
+-- instances on an Outpost. If you create snapshots from an instance in a
+-- Region, the snapshots must be stored in the same Region as the instance.
+-- If you create snapshots from an instance on an Outpost, the snapshots
+-- can be stored on the same Outpost as the instance, or in the Region for
+-- that Outpost.
+module Amazonka.EC2.CreateSnapshots
+  ( -- * Creating a Request
+    CreateSnapshots (..),
+    newCreateSnapshots,
+
+    -- * Request Lenses
+    createSnapshots_copyTagsFromSource,
+    createSnapshots_description,
+    createSnapshots_dryRun,
+    createSnapshots_outpostArn,
+    createSnapshots_tagSpecifications,
+    createSnapshots_instanceSpecification,
+
+    -- * Destructuring the Response
+    CreateSnapshotsResponse (..),
+    newCreateSnapshotsResponse,
+
+    -- * Response Lenses
+    createSnapshotsResponse_snapshots,
+    createSnapshotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSnapshots' smart constructor.
+data CreateSnapshots = CreateSnapshots'
+  { -- | Copies the tags from the specified volume to corresponding snapshot.
+    copyTagsFromSource :: Prelude.Maybe CopyTagsFromSource,
+    -- | A description propagated to every snapshot specified by the instance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Outpost on which to create the
+    -- local snapshots.
+    --
+    -- -   To create snapshots from an instance in a Region, omit this
+    --     parameter. The snapshots are created in the same Region as the
+    --     instance.
+    --
+    -- -   To create snapshots from an instance on an Outpost and store the
+    --     snapshots in the Region, omit this parameter. The snapshots are
+    --     created in the Region for the Outpost.
+    --
+    -- -   To create snapshots from an instance on an Outpost and store the
+    --     snapshots on an Outpost, specify the ARN of the destination Outpost.
+    --     The snapshots must be created on the same Outpost as the instance.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-multivol-snapshot Create multi-volume local snapshots from instances on an Outpost>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | Tags to apply to every snapshot specified by the instance.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The instance to specify which volumes should be included in the
+    -- snapshots.
+    instanceSpecification :: InstanceSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSnapshots' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'copyTagsFromSource', 'createSnapshots_copyTagsFromSource' - Copies the tags from the specified volume to corresponding snapshot.
+--
+-- 'description', 'createSnapshots_description' - A description propagated to every snapshot specified by the instance.
+--
+-- 'dryRun', 'createSnapshots_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'outpostArn', 'createSnapshots_outpostArn' - The Amazon Resource Name (ARN) of the Outpost on which to create the
+-- local snapshots.
+--
+-- -   To create snapshots from an instance in a Region, omit this
+--     parameter. The snapshots are created in the same Region as the
+--     instance.
+--
+-- -   To create snapshots from an instance on an Outpost and store the
+--     snapshots in the Region, omit this parameter. The snapshots are
+--     created in the Region for the Outpost.
+--
+-- -   To create snapshots from an instance on an Outpost and store the
+--     snapshots on an Outpost, specify the ARN of the destination Outpost.
+--     The snapshots must be created on the same Outpost as the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-multivol-snapshot Create multi-volume local snapshots from instances on an Outpost>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'tagSpecifications', 'createSnapshots_tagSpecifications' - Tags to apply to every snapshot specified by the instance.
+--
+-- 'instanceSpecification', 'createSnapshots_instanceSpecification' - The instance to specify which volumes should be included in the
+-- snapshots.
+newCreateSnapshots ::
+  -- | 'instanceSpecification'
+  InstanceSpecification ->
+  CreateSnapshots
+newCreateSnapshots pInstanceSpecification_ =
+  CreateSnapshots'
+    { copyTagsFromSource =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      instanceSpecification = pInstanceSpecification_
+    }
+
+-- | Copies the tags from the specified volume to corresponding snapshot.
+createSnapshots_copyTagsFromSource :: Lens.Lens' CreateSnapshots (Prelude.Maybe CopyTagsFromSource)
+createSnapshots_copyTagsFromSource = Lens.lens (\CreateSnapshots' {copyTagsFromSource} -> copyTagsFromSource) (\s@CreateSnapshots' {} a -> s {copyTagsFromSource = a} :: CreateSnapshots)
+
+-- | A description propagated to every snapshot specified by the instance.
+createSnapshots_description :: Lens.Lens' CreateSnapshots (Prelude.Maybe Prelude.Text)
+createSnapshots_description = Lens.lens (\CreateSnapshots' {description} -> description) (\s@CreateSnapshots' {} a -> s {description = a} :: CreateSnapshots)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createSnapshots_dryRun :: Lens.Lens' CreateSnapshots (Prelude.Maybe Prelude.Bool)
+createSnapshots_dryRun = Lens.lens (\CreateSnapshots' {dryRun} -> dryRun) (\s@CreateSnapshots' {} a -> s {dryRun = a} :: CreateSnapshots)
+
+-- | The Amazon Resource Name (ARN) of the Outpost on which to create the
+-- local snapshots.
+--
+-- -   To create snapshots from an instance in a Region, omit this
+--     parameter. The snapshots are created in the same Region as the
+--     instance.
+--
+-- -   To create snapshots from an instance on an Outpost and store the
+--     snapshots in the Region, omit this parameter. The snapshots are
+--     created in the Region for the Outpost.
+--
+-- -   To create snapshots from an instance on an Outpost and store the
+--     snapshots on an Outpost, specify the ARN of the destination Outpost.
+--     The snapshots must be created on the same Outpost as the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#create-multivol-snapshot Create multi-volume local snapshots from instances on an Outpost>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+createSnapshots_outpostArn :: Lens.Lens' CreateSnapshots (Prelude.Maybe Prelude.Text)
+createSnapshots_outpostArn = Lens.lens (\CreateSnapshots' {outpostArn} -> outpostArn) (\s@CreateSnapshots' {} a -> s {outpostArn = a} :: CreateSnapshots)
+
+-- | Tags to apply to every snapshot specified by the instance.
+createSnapshots_tagSpecifications :: Lens.Lens' CreateSnapshots (Prelude.Maybe [TagSpecification])
+createSnapshots_tagSpecifications = Lens.lens (\CreateSnapshots' {tagSpecifications} -> tagSpecifications) (\s@CreateSnapshots' {} a -> s {tagSpecifications = a} :: CreateSnapshots) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance to specify which volumes should be included in the
+-- snapshots.
+createSnapshots_instanceSpecification :: Lens.Lens' CreateSnapshots InstanceSpecification
+createSnapshots_instanceSpecification = Lens.lens (\CreateSnapshots' {instanceSpecification} -> instanceSpecification) (\s@CreateSnapshots' {} a -> s {instanceSpecification = a} :: CreateSnapshots)
+
+instance Core.AWSRequest CreateSnapshots where
+  type
+    AWSResponse CreateSnapshots =
+      CreateSnapshotsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateSnapshotsResponse'
+            Prelude.<$> ( x
+                            Data..@? "snapshotSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSnapshots where
+  hashWithSalt _salt CreateSnapshots' {..} =
+    _salt
+      `Prelude.hashWithSalt` copyTagsFromSource
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` instanceSpecification
+
+instance Prelude.NFData CreateSnapshots where
+  rnf CreateSnapshots' {..} =
+    Prelude.rnf copyTagsFromSource
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf instanceSpecification
+
+instance Data.ToHeaders CreateSnapshots where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateSnapshots where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSnapshots where
+  toQuery CreateSnapshots' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateSnapshots" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CopyTagsFromSource" Data.=: copyTagsFromSource,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "OutpostArn" Data.=: outpostArn,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "InstanceSpecification"
+          Data.=: instanceSpecification
+      ]
+
+-- | /See:/ 'newCreateSnapshotsResponse' smart constructor.
+data CreateSnapshotsResponse = CreateSnapshotsResponse'
+  { -- | List of snapshots.
+    snapshots :: Prelude.Maybe [SnapshotInfo],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSnapshotsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshots', 'createSnapshotsResponse_snapshots' - List of snapshots.
+--
+-- 'httpStatus', 'createSnapshotsResponse_httpStatus' - The response's http status code.
+newCreateSnapshotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSnapshotsResponse
+newCreateSnapshotsResponse pHttpStatus_ =
+  CreateSnapshotsResponse'
+    { snapshots =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | List of snapshots.
+createSnapshotsResponse_snapshots :: Lens.Lens' CreateSnapshotsResponse (Prelude.Maybe [SnapshotInfo])
+createSnapshotsResponse_snapshots = Lens.lens (\CreateSnapshotsResponse' {snapshots} -> snapshots) (\s@CreateSnapshotsResponse' {} a -> s {snapshots = a} :: CreateSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createSnapshotsResponse_httpStatus :: Lens.Lens' CreateSnapshotsResponse Prelude.Int
+createSnapshotsResponse_httpStatus = Lens.lens (\CreateSnapshotsResponse' {httpStatus} -> httpStatus) (\s@CreateSnapshotsResponse' {} a -> s {httpStatus = a} :: CreateSnapshotsResponse)
+
+instance Prelude.NFData CreateSnapshotsResponse where
+  rnf CreateSnapshotsResponse' {..} =
+    Prelude.rnf snapshots
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateSpotDatafeedSubscription.hs b/gen/Amazonka/EC2/CreateSpotDatafeedSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateSpotDatafeedSubscription.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateSpotDatafeedSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a data feed for Spot Instances, enabling you to view Spot
+-- Instance usage logs. You can create one data feed per Amazon Web
+-- Services account. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html Spot Instance data feed>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+module Amazonka.EC2.CreateSpotDatafeedSubscription
+  ( -- * Creating a Request
+    CreateSpotDatafeedSubscription (..),
+    newCreateSpotDatafeedSubscription,
+
+    -- * Request Lenses
+    createSpotDatafeedSubscription_dryRun,
+    createSpotDatafeedSubscription_prefix,
+    createSpotDatafeedSubscription_bucket,
+
+    -- * Destructuring the Response
+    CreateSpotDatafeedSubscriptionResponse (..),
+    newCreateSpotDatafeedSubscriptionResponse,
+
+    -- * Response Lenses
+    createSpotDatafeedSubscriptionResponse_spotDatafeedSubscription,
+    createSpotDatafeedSubscriptionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateSpotDatafeedSubscription.
+--
+-- /See:/ 'newCreateSpotDatafeedSubscription' smart constructor.
+data CreateSpotDatafeedSubscription = CreateSpotDatafeedSubscription'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The prefix for the data feed file names.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon S3 bucket in which to store the Spot Instance
+    -- data feed. For more information about bucket names, see
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules Rules for bucket naming>
+    -- in the /Amazon S3 Developer Guide/.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSpotDatafeedSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createSpotDatafeedSubscription_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'prefix', 'createSpotDatafeedSubscription_prefix' - The prefix for the data feed file names.
+--
+-- 'bucket', 'createSpotDatafeedSubscription_bucket' - The name of the Amazon S3 bucket in which to store the Spot Instance
+-- data feed. For more information about bucket names, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules Rules for bucket naming>
+-- in the /Amazon S3 Developer Guide/.
+newCreateSpotDatafeedSubscription ::
+  -- | 'bucket'
+  Prelude.Text ->
+  CreateSpotDatafeedSubscription
+newCreateSpotDatafeedSubscription pBucket_ =
+  CreateSpotDatafeedSubscription'
+    { dryRun =
+        Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      bucket = pBucket_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createSpotDatafeedSubscription_dryRun :: Lens.Lens' CreateSpotDatafeedSubscription (Prelude.Maybe Prelude.Bool)
+createSpotDatafeedSubscription_dryRun = Lens.lens (\CreateSpotDatafeedSubscription' {dryRun} -> dryRun) (\s@CreateSpotDatafeedSubscription' {} a -> s {dryRun = a} :: CreateSpotDatafeedSubscription)
+
+-- | The prefix for the data feed file names.
+createSpotDatafeedSubscription_prefix :: Lens.Lens' CreateSpotDatafeedSubscription (Prelude.Maybe Prelude.Text)
+createSpotDatafeedSubscription_prefix = Lens.lens (\CreateSpotDatafeedSubscription' {prefix} -> prefix) (\s@CreateSpotDatafeedSubscription' {} a -> s {prefix = a} :: CreateSpotDatafeedSubscription)
+
+-- | The name of the Amazon S3 bucket in which to store the Spot Instance
+-- data feed. For more information about bucket names, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules Rules for bucket naming>
+-- in the /Amazon S3 Developer Guide/.
+createSpotDatafeedSubscription_bucket :: Lens.Lens' CreateSpotDatafeedSubscription Prelude.Text
+createSpotDatafeedSubscription_bucket = Lens.lens (\CreateSpotDatafeedSubscription' {bucket} -> bucket) (\s@CreateSpotDatafeedSubscription' {} a -> s {bucket = a} :: CreateSpotDatafeedSubscription)
+
+instance
+  Core.AWSRequest
+    CreateSpotDatafeedSubscription
+  where
+  type
+    AWSResponse CreateSpotDatafeedSubscription =
+      CreateSpotDatafeedSubscriptionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateSpotDatafeedSubscriptionResponse'
+            Prelude.<$> (x Data..@? "spotDatafeedSubscription")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateSpotDatafeedSubscription
+  where
+  hashWithSalt
+    _salt
+    CreateSpotDatafeedSubscription' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` prefix
+        `Prelude.hashWithSalt` bucket
+
+instance
+  Prelude.NFData
+    CreateSpotDatafeedSubscription
+  where
+  rnf CreateSpotDatafeedSubscription' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf bucket
+
+instance
+  Data.ToHeaders
+    CreateSpotDatafeedSubscription
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateSpotDatafeedSubscription where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSpotDatafeedSubscription where
+  toQuery CreateSpotDatafeedSubscription' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateSpotDatafeedSubscription" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Prefix" Data.=: prefix,
+        "Bucket" Data.=: bucket
+      ]
+
+-- | Contains the output of CreateSpotDatafeedSubscription.
+--
+-- /See:/ 'newCreateSpotDatafeedSubscriptionResponse' smart constructor.
+data CreateSpotDatafeedSubscriptionResponse = CreateSpotDatafeedSubscriptionResponse'
+  { -- | The Spot Instance data feed subscription.
+    spotDatafeedSubscription :: Prelude.Maybe SpotDatafeedSubscription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSpotDatafeedSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'spotDatafeedSubscription', 'createSpotDatafeedSubscriptionResponse_spotDatafeedSubscription' - The Spot Instance data feed subscription.
+--
+-- 'httpStatus', 'createSpotDatafeedSubscriptionResponse_httpStatus' - The response's http status code.
+newCreateSpotDatafeedSubscriptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSpotDatafeedSubscriptionResponse
+newCreateSpotDatafeedSubscriptionResponse
+  pHttpStatus_ =
+    CreateSpotDatafeedSubscriptionResponse'
+      { spotDatafeedSubscription =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Spot Instance data feed subscription.
+createSpotDatafeedSubscriptionResponse_spotDatafeedSubscription :: Lens.Lens' CreateSpotDatafeedSubscriptionResponse (Prelude.Maybe SpotDatafeedSubscription)
+createSpotDatafeedSubscriptionResponse_spotDatafeedSubscription = Lens.lens (\CreateSpotDatafeedSubscriptionResponse' {spotDatafeedSubscription} -> spotDatafeedSubscription) (\s@CreateSpotDatafeedSubscriptionResponse' {} a -> s {spotDatafeedSubscription = a} :: CreateSpotDatafeedSubscriptionResponse)
+
+-- | The response's http status code.
+createSpotDatafeedSubscriptionResponse_httpStatus :: Lens.Lens' CreateSpotDatafeedSubscriptionResponse Prelude.Int
+createSpotDatafeedSubscriptionResponse_httpStatus = Lens.lens (\CreateSpotDatafeedSubscriptionResponse' {httpStatus} -> httpStatus) (\s@CreateSpotDatafeedSubscriptionResponse' {} a -> s {httpStatus = a} :: CreateSpotDatafeedSubscriptionResponse)
+
+instance
+  Prelude.NFData
+    CreateSpotDatafeedSubscriptionResponse
+  where
+  rnf CreateSpotDatafeedSubscriptionResponse' {..} =
+    Prelude.rnf spotDatafeedSubscription
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateStoreImageTask.hs b/gen/Amazonka/EC2/CreateStoreImageTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateStoreImageTask.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateStoreImageTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stores an AMI as a single object in an Amazon S3 bucket.
+--
+-- To use this API, you must have the required permissions. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions Permissions for storing and restoring AMIs using Amazon S3>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html Store and restore an AMI using Amazon S3>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.CreateStoreImageTask
+  ( -- * Creating a Request
+    CreateStoreImageTask (..),
+    newCreateStoreImageTask,
+
+    -- * Request Lenses
+    createStoreImageTask_dryRun,
+    createStoreImageTask_s3ObjectTags,
+    createStoreImageTask_imageId,
+    createStoreImageTask_bucket,
+
+    -- * Destructuring the Response
+    CreateStoreImageTaskResponse (..),
+    newCreateStoreImageTaskResponse,
+
+    -- * Response Lenses
+    createStoreImageTaskResponse_objectKey,
+    createStoreImageTaskResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStoreImageTask' smart constructor.
+data CreateStoreImageTask = CreateStoreImageTask'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the AMI object that will be stored in the Amazon S3
+    -- bucket.
+    s3ObjectTags :: Prelude.Maybe [S3ObjectTag],
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text,
+    -- | The name of the Amazon S3 bucket in which the AMI object will be stored.
+    -- The bucket must be in the Region in which the request is being made. The
+    -- AMI object appears in the bucket only after the upload task has
+    -- completed.
+    bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStoreImageTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createStoreImageTask_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 's3ObjectTags', 'createStoreImageTask_s3ObjectTags' - The tags to apply to the AMI object that will be stored in the Amazon S3
+-- bucket.
+--
+-- 'imageId', 'createStoreImageTask_imageId' - The ID of the AMI.
+--
+-- 'bucket', 'createStoreImageTask_bucket' - The name of the Amazon S3 bucket in which the AMI object will be stored.
+-- The bucket must be in the Region in which the request is being made. The
+-- AMI object appears in the bucket only after the upload task has
+-- completed.
+newCreateStoreImageTask ::
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 'bucket'
+  Prelude.Text ->
+  CreateStoreImageTask
+newCreateStoreImageTask pImageId_ pBucket_ =
+  CreateStoreImageTask'
+    { dryRun = Prelude.Nothing,
+      s3ObjectTags = Prelude.Nothing,
+      imageId = pImageId_,
+      bucket = pBucket_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createStoreImageTask_dryRun :: Lens.Lens' CreateStoreImageTask (Prelude.Maybe Prelude.Bool)
+createStoreImageTask_dryRun = Lens.lens (\CreateStoreImageTask' {dryRun} -> dryRun) (\s@CreateStoreImageTask' {} a -> s {dryRun = a} :: CreateStoreImageTask)
+
+-- | The tags to apply to the AMI object that will be stored in the Amazon S3
+-- bucket.
+createStoreImageTask_s3ObjectTags :: Lens.Lens' CreateStoreImageTask (Prelude.Maybe [S3ObjectTag])
+createStoreImageTask_s3ObjectTags = Lens.lens (\CreateStoreImageTask' {s3ObjectTags} -> s3ObjectTags) (\s@CreateStoreImageTask' {} a -> s {s3ObjectTags = a} :: CreateStoreImageTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the AMI.
+createStoreImageTask_imageId :: Lens.Lens' CreateStoreImageTask Prelude.Text
+createStoreImageTask_imageId = Lens.lens (\CreateStoreImageTask' {imageId} -> imageId) (\s@CreateStoreImageTask' {} a -> s {imageId = a} :: CreateStoreImageTask)
+
+-- | The name of the Amazon S3 bucket in which the AMI object will be stored.
+-- The bucket must be in the Region in which the request is being made. The
+-- AMI object appears in the bucket only after the upload task has
+-- completed.
+createStoreImageTask_bucket :: Lens.Lens' CreateStoreImageTask Prelude.Text
+createStoreImageTask_bucket = Lens.lens (\CreateStoreImageTask' {bucket} -> bucket) (\s@CreateStoreImageTask' {} a -> s {bucket = a} :: CreateStoreImageTask)
+
+instance Core.AWSRequest CreateStoreImageTask where
+  type
+    AWSResponse CreateStoreImageTask =
+      CreateStoreImageTaskResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateStoreImageTaskResponse'
+            Prelude.<$> (x Data..@? "objectKey")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStoreImageTask where
+  hashWithSalt _salt CreateStoreImageTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` s3ObjectTags
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` bucket
+
+instance Prelude.NFData CreateStoreImageTask where
+  rnf CreateStoreImageTask' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf s3ObjectTags
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf bucket
+
+instance Data.ToHeaders CreateStoreImageTask where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateStoreImageTask where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateStoreImageTask where
+  toQuery CreateStoreImageTask' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateStoreImageTask" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "S3ObjectTag"
+              Prelude.<$> s3ObjectTags
+          ),
+        "ImageId" Data.=: imageId,
+        "Bucket" Data.=: bucket
+      ]
+
+-- | /See:/ 'newCreateStoreImageTaskResponse' smart constructor.
+data CreateStoreImageTaskResponse = CreateStoreImageTaskResponse'
+  { -- | The name of the stored AMI object in the S3 bucket.
+    objectKey :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStoreImageTaskResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'objectKey', 'createStoreImageTaskResponse_objectKey' - The name of the stored AMI object in the S3 bucket.
+--
+-- 'httpStatus', 'createStoreImageTaskResponse_httpStatus' - The response's http status code.
+newCreateStoreImageTaskResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStoreImageTaskResponse
+newCreateStoreImageTaskResponse pHttpStatus_ =
+  CreateStoreImageTaskResponse'
+    { objectKey =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the stored AMI object in the S3 bucket.
+createStoreImageTaskResponse_objectKey :: Lens.Lens' CreateStoreImageTaskResponse (Prelude.Maybe Prelude.Text)
+createStoreImageTaskResponse_objectKey = Lens.lens (\CreateStoreImageTaskResponse' {objectKey} -> objectKey) (\s@CreateStoreImageTaskResponse' {} a -> s {objectKey = a} :: CreateStoreImageTaskResponse)
+
+-- | The response's http status code.
+createStoreImageTaskResponse_httpStatus :: Lens.Lens' CreateStoreImageTaskResponse Prelude.Int
+createStoreImageTaskResponse_httpStatus = Lens.lens (\CreateStoreImageTaskResponse' {httpStatus} -> httpStatus) (\s@CreateStoreImageTaskResponse' {} a -> s {httpStatus = a} :: CreateStoreImageTaskResponse)
+
+instance Prelude.NFData CreateStoreImageTaskResponse where
+  rnf CreateStoreImageTaskResponse' {..} =
+    Prelude.rnf objectKey
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateSubnet.hs b/gen/Amazonka/EC2/CreateSubnet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateSubnet.hs
@@ -0,0 +1,363 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateSubnet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a subnet in a specified VPC.
+--
+-- You must specify an IPv4 CIDR block for the subnet. After you create a
+-- subnet, you can\'t change its CIDR block. The allowed block size is
+-- between a \/16 netmask (65,536 IP addresses) and \/28 netmask (16 IP
+-- addresses). The CIDR block must not overlap with the CIDR block of an
+-- existing subnet in the VPC.
+--
+-- If you\'ve associated an IPv6 CIDR block with your VPC, you can create a
+-- subnet with an IPv6 CIDR block that uses a \/64 prefix length.
+--
+-- Amazon Web Services reserves both the first four and the last IPv4
+-- address in each subnet\'s CIDR block. They\'re not available for use.
+--
+-- If you add more than one subnet to a VPC, they\'re set up in a star
+-- topology with a logical router in the middle.
+--
+-- When you stop an instance in a subnet, it retains its private IPv4
+-- address. It\'s therefore possible to have a subnet with no running
+-- instances (they\'re all stopped), but no remaining IP addresses
+-- available.
+--
+-- For more information about subnets, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html Your VPC and subnets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateSubnet
+  ( -- * Creating a Request
+    CreateSubnet (..),
+    newCreateSubnet,
+
+    -- * Request Lenses
+    createSubnet_availabilityZone,
+    createSubnet_availabilityZoneId,
+    createSubnet_cidrBlock,
+    createSubnet_dryRun,
+    createSubnet_ipv6CidrBlock,
+    createSubnet_ipv6Native,
+    createSubnet_outpostArn,
+    createSubnet_tagSpecifications,
+    createSubnet_vpcId,
+
+    -- * Destructuring the Response
+    CreateSubnetResponse (..),
+    newCreateSubnetResponse,
+
+    -- * Response Lenses
+    createSubnetResponse_subnet,
+    createSubnetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSubnet' smart constructor.
+data CreateSubnet = CreateSubnet'
+  { -- | The Availability Zone or Local Zone for the subnet.
+    --
+    -- Default: Amazon Web Services selects one for you. If you create more
+    -- than one subnet in your VPC, we do not necessarily select a different
+    -- zone for each subnet.
+    --
+    -- To create a subnet in a Local Zone, set this value to the Local Zone ID,
+    -- for example @us-west-2-lax-1a@. For information about the Regions that
+    -- support Local Zones, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions Available Regions>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- To create a subnet in an Outpost, set this value to the Availability
+    -- Zone for the Outpost and specify the Outpost ARN.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The AZ ID or the Local Zone ID of the subnet.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 network range for the subnet, in CIDR notation. For example,
+    -- @10.0.0.0\/24@. We modify the specified CIDR block to its canonical
+    -- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+    -- @100.68.0.0\/18@.
+    --
+    -- This parameter is not supported for an IPv6 only subnet.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv6 network range for the subnet, in CIDR notation. The subnet size
+    -- must use a \/64 prefix length.
+    --
+    -- This parameter is required for an IPv6 only subnet.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to create an IPv6 only subnet.
+    ipv6Native :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Outpost. If you specify an Outpost
+    -- ARN, you must also specify the Availability Zone of the Outpost subnet.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the subnet.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSubnet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'createSubnet_availabilityZone' - The Availability Zone or Local Zone for the subnet.
+--
+-- Default: Amazon Web Services selects one for you. If you create more
+-- than one subnet in your VPC, we do not necessarily select a different
+-- zone for each subnet.
+--
+-- To create a subnet in a Local Zone, set this value to the Local Zone ID,
+-- for example @us-west-2-lax-1a@. For information about the Regions that
+-- support Local Zones, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions Available Regions>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- To create a subnet in an Outpost, set this value to the Availability
+-- Zone for the Outpost and specify the Outpost ARN.
+--
+-- 'availabilityZoneId', 'createSubnet_availabilityZoneId' - The AZ ID or the Local Zone ID of the subnet.
+--
+-- 'cidrBlock', 'createSubnet_cidrBlock' - The IPv4 network range for the subnet, in CIDR notation. For example,
+-- @10.0.0.0\/24@. We modify the specified CIDR block to its canonical
+-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+-- @100.68.0.0\/18@.
+--
+-- This parameter is not supported for an IPv6 only subnet.
+--
+-- 'dryRun', 'createSubnet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipv6CidrBlock', 'createSubnet_ipv6CidrBlock' - The IPv6 network range for the subnet, in CIDR notation. The subnet size
+-- must use a \/64 prefix length.
+--
+-- This parameter is required for an IPv6 only subnet.
+--
+-- 'ipv6Native', 'createSubnet_ipv6Native' - Indicates whether to create an IPv6 only subnet.
+--
+-- 'outpostArn', 'createSubnet_outpostArn' - The Amazon Resource Name (ARN) of the Outpost. If you specify an Outpost
+-- ARN, you must also specify the Availability Zone of the Outpost subnet.
+--
+-- 'tagSpecifications', 'createSubnet_tagSpecifications' - The tags to assign to the subnet.
+--
+-- 'vpcId', 'createSubnet_vpcId' - The ID of the VPC.
+newCreateSubnet ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateSubnet
+newCreateSubnet pVpcId_ =
+  CreateSubnet'
+    { availabilityZone = Prelude.Nothing,
+      availabilityZoneId = Prelude.Nothing,
+      cidrBlock = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipv6CidrBlock = Prelude.Nothing,
+      ipv6Native = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | The Availability Zone or Local Zone for the subnet.
+--
+-- Default: Amazon Web Services selects one for you. If you create more
+-- than one subnet in your VPC, we do not necessarily select a different
+-- zone for each subnet.
+--
+-- To create a subnet in a Local Zone, set this value to the Local Zone ID,
+-- for example @us-west-2-lax-1a@. For information about the Regions that
+-- support Local Zones, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions Available Regions>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- To create a subnet in an Outpost, set this value to the Availability
+-- Zone for the Outpost and specify the Outpost ARN.
+createSubnet_availabilityZone :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Text)
+createSubnet_availabilityZone = Lens.lens (\CreateSubnet' {availabilityZone} -> availabilityZone) (\s@CreateSubnet' {} a -> s {availabilityZone = a} :: CreateSubnet)
+
+-- | The AZ ID or the Local Zone ID of the subnet.
+createSubnet_availabilityZoneId :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Text)
+createSubnet_availabilityZoneId = Lens.lens (\CreateSubnet' {availabilityZoneId} -> availabilityZoneId) (\s@CreateSubnet' {} a -> s {availabilityZoneId = a} :: CreateSubnet)
+
+-- | The IPv4 network range for the subnet, in CIDR notation. For example,
+-- @10.0.0.0\/24@. We modify the specified CIDR block to its canonical
+-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+-- @100.68.0.0\/18@.
+--
+-- This parameter is not supported for an IPv6 only subnet.
+createSubnet_cidrBlock :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Text)
+createSubnet_cidrBlock = Lens.lens (\CreateSubnet' {cidrBlock} -> cidrBlock) (\s@CreateSubnet' {} a -> s {cidrBlock = a} :: CreateSubnet)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createSubnet_dryRun :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Bool)
+createSubnet_dryRun = Lens.lens (\CreateSubnet' {dryRun} -> dryRun) (\s@CreateSubnet' {} a -> s {dryRun = a} :: CreateSubnet)
+
+-- | The IPv6 network range for the subnet, in CIDR notation. The subnet size
+-- must use a \/64 prefix length.
+--
+-- This parameter is required for an IPv6 only subnet.
+createSubnet_ipv6CidrBlock :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Text)
+createSubnet_ipv6CidrBlock = Lens.lens (\CreateSubnet' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@CreateSubnet' {} a -> s {ipv6CidrBlock = a} :: CreateSubnet)
+
+-- | Indicates whether to create an IPv6 only subnet.
+createSubnet_ipv6Native :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Bool)
+createSubnet_ipv6Native = Lens.lens (\CreateSubnet' {ipv6Native} -> ipv6Native) (\s@CreateSubnet' {} a -> s {ipv6Native = a} :: CreateSubnet)
+
+-- | The Amazon Resource Name (ARN) of the Outpost. If you specify an Outpost
+-- ARN, you must also specify the Availability Zone of the Outpost subnet.
+createSubnet_outpostArn :: Lens.Lens' CreateSubnet (Prelude.Maybe Prelude.Text)
+createSubnet_outpostArn = Lens.lens (\CreateSubnet' {outpostArn} -> outpostArn) (\s@CreateSubnet' {} a -> s {outpostArn = a} :: CreateSubnet)
+
+-- | The tags to assign to the subnet.
+createSubnet_tagSpecifications :: Lens.Lens' CreateSubnet (Prelude.Maybe [TagSpecification])
+createSubnet_tagSpecifications = Lens.lens (\CreateSubnet' {tagSpecifications} -> tagSpecifications) (\s@CreateSubnet' {} a -> s {tagSpecifications = a} :: CreateSubnet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+createSubnet_vpcId :: Lens.Lens' CreateSubnet Prelude.Text
+createSubnet_vpcId = Lens.lens (\CreateSubnet' {vpcId} -> vpcId) (\s@CreateSubnet' {} a -> s {vpcId = a} :: CreateSubnet)
+
+instance Core.AWSRequest CreateSubnet where
+  type AWSResponse CreateSubnet = CreateSubnetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateSubnetResponse'
+            Prelude.<$> (x Data..@? "subnet")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSubnet where
+  hashWithSalt _salt CreateSubnet' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` ipv6Native
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CreateSubnet where
+  rnf CreateSubnet' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf ipv6Native
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders CreateSubnet where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateSubnet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSubnet where
+  toQuery CreateSubnet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateSubnet" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AvailabilityZone" Data.=: availabilityZone,
+        "AvailabilityZoneId" Data.=: availabilityZoneId,
+        "CidrBlock" Data.=: cidrBlock,
+        "DryRun" Data.=: dryRun,
+        "Ipv6CidrBlock" Data.=: ipv6CidrBlock,
+        "Ipv6Native" Data.=: ipv6Native,
+        "OutpostArn" Data.=: outpostArn,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newCreateSubnetResponse' smart constructor.
+data CreateSubnetResponse = CreateSubnetResponse'
+  { -- | Information about the subnet.
+    subnet :: Prelude.Maybe Subnet,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSubnetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subnet', 'createSubnetResponse_subnet' - Information about the subnet.
+--
+-- 'httpStatus', 'createSubnetResponse_httpStatus' - The response's http status code.
+newCreateSubnetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSubnetResponse
+newCreateSubnetResponse pHttpStatus_ =
+  CreateSubnetResponse'
+    { subnet = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the subnet.
+createSubnetResponse_subnet :: Lens.Lens' CreateSubnetResponse (Prelude.Maybe Subnet)
+createSubnetResponse_subnet = Lens.lens (\CreateSubnetResponse' {subnet} -> subnet) (\s@CreateSubnetResponse' {} a -> s {subnet = a} :: CreateSubnetResponse)
+
+-- | The response's http status code.
+createSubnetResponse_httpStatus :: Lens.Lens' CreateSubnetResponse Prelude.Int
+createSubnetResponse_httpStatus = Lens.lens (\CreateSubnetResponse' {httpStatus} -> httpStatus) (\s@CreateSubnetResponse' {} a -> s {httpStatus = a} :: CreateSubnetResponse)
+
+instance Prelude.NFData CreateSubnetResponse where
+  rnf CreateSubnetResponse' {..} =
+    Prelude.rnf subnet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateSubnetCidrReservation.hs b/gen/Amazonka/EC2/CreateSubnetCidrReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateSubnetCidrReservation.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateSubnetCidrReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a subnet CIDR reservation. For information about subnet CIDR
+-- reservations, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/subnet-cidr-reservation.html Subnet CIDR reservations>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.CreateSubnetCidrReservation
+  ( -- * Creating a Request
+    CreateSubnetCidrReservation (..),
+    newCreateSubnetCidrReservation,
+
+    -- * Request Lenses
+    createSubnetCidrReservation_description,
+    createSubnetCidrReservation_dryRun,
+    createSubnetCidrReservation_tagSpecifications,
+    createSubnetCidrReservation_subnetId,
+    createSubnetCidrReservation_cidr,
+    createSubnetCidrReservation_reservationType,
+
+    -- * Destructuring the Response
+    CreateSubnetCidrReservationResponse (..),
+    newCreateSubnetCidrReservationResponse,
+
+    -- * Response Lenses
+    createSubnetCidrReservationResponse_subnetCidrReservation,
+    createSubnetCidrReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateSubnetCidrReservation' smart constructor.
+data CreateSubnetCidrReservation = CreateSubnetCidrReservation'
+  { -- | The description to assign to the subnet CIDR reservation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the subnet CIDR reservation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Text,
+    -- | The IPv4 or IPV6 CIDR range to reserve.
+    cidr :: Prelude.Text,
+    -- | The type of reservation.
+    --
+    -- The following are valid values:
+    --
+    -- -   @prefix@: The Amazon EC2 Prefix Delegation feature assigns the IP
+    --     addresses to network interfaces that are associated with an
+    --     instance. For information about Prefix Delegation, see
+    --     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-delegation.html Prefix Delegation for Amazon EC2 network interfaces>
+    --     in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- -   @explicit@: You manually assign the IP addresses to resources that
+    --     reside in your subnet.
+    reservationType :: SubnetCidrReservationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSubnetCidrReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createSubnetCidrReservation_description' - The description to assign to the subnet CIDR reservation.
+--
+-- 'dryRun', 'createSubnetCidrReservation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createSubnetCidrReservation_tagSpecifications' - The tags to assign to the subnet CIDR reservation.
+--
+-- 'subnetId', 'createSubnetCidrReservation_subnetId' - The ID of the subnet.
+--
+-- 'cidr', 'createSubnetCidrReservation_cidr' - The IPv4 or IPV6 CIDR range to reserve.
+--
+-- 'reservationType', 'createSubnetCidrReservation_reservationType' - The type of reservation.
+--
+-- The following are valid values:
+--
+-- -   @prefix@: The Amazon EC2 Prefix Delegation feature assigns the IP
+--     addresses to network interfaces that are associated with an
+--     instance. For information about Prefix Delegation, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-delegation.html Prefix Delegation for Amazon EC2 network interfaces>
+--     in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- -   @explicit@: You manually assign the IP addresses to resources that
+--     reside in your subnet.
+newCreateSubnetCidrReservation ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'reservationType'
+  SubnetCidrReservationType ->
+  CreateSubnetCidrReservation
+newCreateSubnetCidrReservation
+  pSubnetId_
+  pCidr_
+  pReservationType_ =
+    CreateSubnetCidrReservation'
+      { description =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        subnetId = pSubnetId_,
+        cidr = pCidr_,
+        reservationType = pReservationType_
+      }
+
+-- | The description to assign to the subnet CIDR reservation.
+createSubnetCidrReservation_description :: Lens.Lens' CreateSubnetCidrReservation (Prelude.Maybe Prelude.Text)
+createSubnetCidrReservation_description = Lens.lens (\CreateSubnetCidrReservation' {description} -> description) (\s@CreateSubnetCidrReservation' {} a -> s {description = a} :: CreateSubnetCidrReservation)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createSubnetCidrReservation_dryRun :: Lens.Lens' CreateSubnetCidrReservation (Prelude.Maybe Prelude.Bool)
+createSubnetCidrReservation_dryRun = Lens.lens (\CreateSubnetCidrReservation' {dryRun} -> dryRun) (\s@CreateSubnetCidrReservation' {} a -> s {dryRun = a} :: CreateSubnetCidrReservation)
+
+-- | The tags to assign to the subnet CIDR reservation.
+createSubnetCidrReservation_tagSpecifications :: Lens.Lens' CreateSubnetCidrReservation (Prelude.Maybe [TagSpecification])
+createSubnetCidrReservation_tagSpecifications = Lens.lens (\CreateSubnetCidrReservation' {tagSpecifications} -> tagSpecifications) (\s@CreateSubnetCidrReservation' {} a -> s {tagSpecifications = a} :: CreateSubnetCidrReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the subnet.
+createSubnetCidrReservation_subnetId :: Lens.Lens' CreateSubnetCidrReservation Prelude.Text
+createSubnetCidrReservation_subnetId = Lens.lens (\CreateSubnetCidrReservation' {subnetId} -> subnetId) (\s@CreateSubnetCidrReservation' {} a -> s {subnetId = a} :: CreateSubnetCidrReservation)
+
+-- | The IPv4 or IPV6 CIDR range to reserve.
+createSubnetCidrReservation_cidr :: Lens.Lens' CreateSubnetCidrReservation Prelude.Text
+createSubnetCidrReservation_cidr = Lens.lens (\CreateSubnetCidrReservation' {cidr} -> cidr) (\s@CreateSubnetCidrReservation' {} a -> s {cidr = a} :: CreateSubnetCidrReservation)
+
+-- | The type of reservation.
+--
+-- The following are valid values:
+--
+-- -   @prefix@: The Amazon EC2 Prefix Delegation feature assigns the IP
+--     addresses to network interfaces that are associated with an
+--     instance. For information about Prefix Delegation, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-delegation.html Prefix Delegation for Amazon EC2 network interfaces>
+--     in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- -   @explicit@: You manually assign the IP addresses to resources that
+--     reside in your subnet.
+createSubnetCidrReservation_reservationType :: Lens.Lens' CreateSubnetCidrReservation SubnetCidrReservationType
+createSubnetCidrReservation_reservationType = Lens.lens (\CreateSubnetCidrReservation' {reservationType} -> reservationType) (\s@CreateSubnetCidrReservation' {} a -> s {reservationType = a} :: CreateSubnetCidrReservation)
+
+instance Core.AWSRequest CreateSubnetCidrReservation where
+  type
+    AWSResponse CreateSubnetCidrReservation =
+      CreateSubnetCidrReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateSubnetCidrReservationResponse'
+            Prelude.<$> (x Data..@? "subnetCidrReservation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateSubnetCidrReservation where
+  hashWithSalt _salt CreateSubnetCidrReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` reservationType
+
+instance Prelude.NFData CreateSubnetCidrReservation where
+  rnf CreateSubnetCidrReservation' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf reservationType
+
+instance Data.ToHeaders CreateSubnetCidrReservation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateSubnetCidrReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateSubnetCidrReservation where
+  toQuery CreateSubnetCidrReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateSubnetCidrReservation" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "SubnetId" Data.=: subnetId,
+        "Cidr" Data.=: cidr,
+        "ReservationType" Data.=: reservationType
+      ]
+
+-- | /See:/ 'newCreateSubnetCidrReservationResponse' smart constructor.
+data CreateSubnetCidrReservationResponse = CreateSubnetCidrReservationResponse'
+  { -- | Information about the created subnet CIDR reservation.
+    subnetCidrReservation :: Prelude.Maybe SubnetCidrReservation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateSubnetCidrReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'subnetCidrReservation', 'createSubnetCidrReservationResponse_subnetCidrReservation' - Information about the created subnet CIDR reservation.
+--
+-- 'httpStatus', 'createSubnetCidrReservationResponse_httpStatus' - The response's http status code.
+newCreateSubnetCidrReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateSubnetCidrReservationResponse
+newCreateSubnetCidrReservationResponse pHttpStatus_ =
+  CreateSubnetCidrReservationResponse'
+    { subnetCidrReservation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the created subnet CIDR reservation.
+createSubnetCidrReservationResponse_subnetCidrReservation :: Lens.Lens' CreateSubnetCidrReservationResponse (Prelude.Maybe SubnetCidrReservation)
+createSubnetCidrReservationResponse_subnetCidrReservation = Lens.lens (\CreateSubnetCidrReservationResponse' {subnetCidrReservation} -> subnetCidrReservation) (\s@CreateSubnetCidrReservationResponse' {} a -> s {subnetCidrReservation = a} :: CreateSubnetCidrReservationResponse)
+
+-- | The response's http status code.
+createSubnetCidrReservationResponse_httpStatus :: Lens.Lens' CreateSubnetCidrReservationResponse Prelude.Int
+createSubnetCidrReservationResponse_httpStatus = Lens.lens (\CreateSubnetCidrReservationResponse' {httpStatus} -> httpStatus) (\s@CreateSubnetCidrReservationResponse' {} a -> s {httpStatus = a} :: CreateSubnetCidrReservationResponse)
+
+instance
+  Prelude.NFData
+    CreateSubnetCidrReservationResponse
+  where
+  rnf CreateSubnetCidrReservationResponse' {..} =
+    Prelude.rnf subnetCidrReservation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTags.hs b/gen/Amazonka/EC2/CreateTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTags.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or overwrites only the specified tags for the specified Amazon EC2
+-- resource or resources. When you specify an existing tag key, the value
+-- is overwritten with the new value. Each resource can have a maximum of
+-- 50 tags. Each tag consists of a key and optional value. Tag keys must be
+-- unique per resource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tag your Amazon EC2 resources>
+-- in the /Amazon Elastic Compute Cloud User Guide/. For more information
+-- about creating IAM policies that control users\' access to resources
+-- based on tags, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html Supported resource-level permissions for Amazon EC2 API actions>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateTags
+  ( -- * Creating a Request
+    CreateTags (..),
+    newCreateTags,
+
+    -- * Request Lenses
+    createTags_dryRun,
+    createTags_resources,
+    createTags_tags,
+
+    -- * Destructuring the Response
+    CreateTagsResponse (..),
+    newCreateTagsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTags' smart constructor.
+data CreateTags = CreateTags'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the resources, separated by spaces.
+    --
+    -- Constraints: Up to 1000 resource IDs. We recommend breaking up this
+    -- request into smaller batches.
+    resources :: [Prelude.Text],
+    -- | The tags. The @value@ parameter is required, but if you don\'t want the
+    -- tag to have a value, specify the parameter with no value, and we set the
+    -- value to an empty string.
+    tags :: [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTags_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'resources', 'createTags_resources' - The IDs of the resources, separated by spaces.
+--
+-- Constraints: Up to 1000 resource IDs. We recommend breaking up this
+-- request into smaller batches.
+--
+-- 'tags', 'createTags_tags' - The tags. The @value@ parameter is required, but if you don\'t want the
+-- tag to have a value, specify the parameter with no value, and we set the
+-- value to an empty string.
+newCreateTags ::
+  CreateTags
+newCreateTags =
+  CreateTags'
+    { dryRun = Prelude.Nothing,
+      resources = Prelude.mempty,
+      tags = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTags_dryRun :: Lens.Lens' CreateTags (Prelude.Maybe Prelude.Bool)
+createTags_dryRun = Lens.lens (\CreateTags' {dryRun} -> dryRun) (\s@CreateTags' {} a -> s {dryRun = a} :: CreateTags)
+
+-- | The IDs of the resources, separated by spaces.
+--
+-- Constraints: Up to 1000 resource IDs. We recommend breaking up this
+-- request into smaller batches.
+createTags_resources :: Lens.Lens' CreateTags [Prelude.Text]
+createTags_resources = Lens.lens (\CreateTags' {resources} -> resources) (\s@CreateTags' {} a -> s {resources = a} :: CreateTags) Prelude.. Lens.coerced
+
+-- | The tags. The @value@ parameter is required, but if you don\'t want the
+-- tag to have a value, specify the parameter with no value, and we set the
+-- value to an empty string.
+createTags_tags :: Lens.Lens' CreateTags [Tag]
+createTags_tags = Lens.lens (\CreateTags' {tags} -> tags) (\s@CreateTags' {} a -> s {tags = a} :: CreateTags) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateTags where
+  type AWSResponse CreateTags = CreateTagsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull CreateTagsResponse'
+
+instance Prelude.Hashable CreateTags where
+  hashWithSalt _salt CreateTags' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData CreateTags where
+  rnf CreateTags' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders CreateTags where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTags where
+  toQuery CreateTags' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateTags" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "ResourceId" resources,
+        Data.toQueryList "Tag" tags
+      ]
+
+-- | /See:/ 'newCreateTagsResponse' smart constructor.
+data CreateTagsResponse = CreateTagsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateTagsResponse ::
+  CreateTagsResponse
+newCreateTagsResponse = CreateTagsResponse'
+
+instance Prelude.NFData CreateTagsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/CreateTrafficMirrorFilter.hs b/gen/Amazonka/EC2/CreateTrafficMirrorFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTrafficMirrorFilter.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTrafficMirrorFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Traffic Mirror filter.
+--
+-- A Traffic Mirror filter is a set of rules that defines the traffic to
+-- mirror.
+--
+-- By default, no traffic is mirrored. To mirror traffic, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilterRule.htm CreateTrafficMirrorFilterRule>
+-- to add Traffic Mirror rules to the filter. The rules you add define what
+-- traffic gets mirrored. You can also use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyTrafficMirrorFilterNetworkServices.html ModifyTrafficMirrorFilterNetworkServices>
+-- to mirror supported network services.
+module Amazonka.EC2.CreateTrafficMirrorFilter
+  ( -- * Creating a Request
+    CreateTrafficMirrorFilter (..),
+    newCreateTrafficMirrorFilter,
+
+    -- * Request Lenses
+    createTrafficMirrorFilter_clientToken,
+    createTrafficMirrorFilter_description,
+    createTrafficMirrorFilter_dryRun,
+    createTrafficMirrorFilter_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateTrafficMirrorFilterResponse (..),
+    newCreateTrafficMirrorFilterResponse,
+
+    -- * Response Lenses
+    createTrafficMirrorFilterResponse_clientToken,
+    createTrafficMirrorFilterResponse_trafficMirrorFilter,
+    createTrafficMirrorFilterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTrafficMirrorFilter' smart constructor.
+data CreateTrafficMirrorFilter = CreateTrafficMirrorFilter'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the Traffic Mirror filter.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to a Traffic Mirror filter.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorFilter_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'createTrafficMirrorFilter_description' - The description of the Traffic Mirror filter.
+--
+-- 'dryRun', 'createTrafficMirrorFilter_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createTrafficMirrorFilter_tagSpecifications' - The tags to assign to a Traffic Mirror filter.
+newCreateTrafficMirrorFilter ::
+  CreateTrafficMirrorFilter
+newCreateTrafficMirrorFilter =
+  CreateTrafficMirrorFilter'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorFilter_clientToken :: Lens.Lens' CreateTrafficMirrorFilter (Prelude.Maybe Prelude.Text)
+createTrafficMirrorFilter_clientToken = Lens.lens (\CreateTrafficMirrorFilter' {clientToken} -> clientToken) (\s@CreateTrafficMirrorFilter' {} a -> s {clientToken = a} :: CreateTrafficMirrorFilter)
+
+-- | The description of the Traffic Mirror filter.
+createTrafficMirrorFilter_description :: Lens.Lens' CreateTrafficMirrorFilter (Prelude.Maybe Prelude.Text)
+createTrafficMirrorFilter_description = Lens.lens (\CreateTrafficMirrorFilter' {description} -> description) (\s@CreateTrafficMirrorFilter' {} a -> s {description = a} :: CreateTrafficMirrorFilter)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTrafficMirrorFilter_dryRun :: Lens.Lens' CreateTrafficMirrorFilter (Prelude.Maybe Prelude.Bool)
+createTrafficMirrorFilter_dryRun = Lens.lens (\CreateTrafficMirrorFilter' {dryRun} -> dryRun) (\s@CreateTrafficMirrorFilter' {} a -> s {dryRun = a} :: CreateTrafficMirrorFilter)
+
+-- | The tags to assign to a Traffic Mirror filter.
+createTrafficMirrorFilter_tagSpecifications :: Lens.Lens' CreateTrafficMirrorFilter (Prelude.Maybe [TagSpecification])
+createTrafficMirrorFilter_tagSpecifications = Lens.lens (\CreateTrafficMirrorFilter' {tagSpecifications} -> tagSpecifications) (\s@CreateTrafficMirrorFilter' {} a -> s {tagSpecifications = a} :: CreateTrafficMirrorFilter) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateTrafficMirrorFilter where
+  type
+    AWSResponse CreateTrafficMirrorFilter =
+      CreateTrafficMirrorFilterResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTrafficMirrorFilterResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "trafficMirrorFilter")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTrafficMirrorFilter where
+  hashWithSalt _salt CreateTrafficMirrorFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateTrafficMirrorFilter where
+  rnf CreateTrafficMirrorFilter' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateTrafficMirrorFilter where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTrafficMirrorFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTrafficMirrorFilter where
+  toQuery CreateTrafficMirrorFilter' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateTrafficMirrorFilter" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateTrafficMirrorFilterResponse' smart constructor.
+data CreateTrafficMirrorFilterResponse = CreateTrafficMirrorFilterResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Traffic Mirror filter.
+    trafficMirrorFilter :: Prelude.Maybe TrafficMirrorFilter,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorFilterResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'trafficMirrorFilter', 'createTrafficMirrorFilterResponse_trafficMirrorFilter' - Information about the Traffic Mirror filter.
+--
+-- 'httpStatus', 'createTrafficMirrorFilterResponse_httpStatus' - The response's http status code.
+newCreateTrafficMirrorFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTrafficMirrorFilterResponse
+newCreateTrafficMirrorFilterResponse pHttpStatus_ =
+  CreateTrafficMirrorFilterResponse'
+    { clientToken =
+        Prelude.Nothing,
+      trafficMirrorFilter = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorFilterResponse_clientToken :: Lens.Lens' CreateTrafficMirrorFilterResponse (Prelude.Maybe Prelude.Text)
+createTrafficMirrorFilterResponse_clientToken = Lens.lens (\CreateTrafficMirrorFilterResponse' {clientToken} -> clientToken) (\s@CreateTrafficMirrorFilterResponse' {} a -> s {clientToken = a} :: CreateTrafficMirrorFilterResponse)
+
+-- | Information about the Traffic Mirror filter.
+createTrafficMirrorFilterResponse_trafficMirrorFilter :: Lens.Lens' CreateTrafficMirrorFilterResponse (Prelude.Maybe TrafficMirrorFilter)
+createTrafficMirrorFilterResponse_trafficMirrorFilter = Lens.lens (\CreateTrafficMirrorFilterResponse' {trafficMirrorFilter} -> trafficMirrorFilter) (\s@CreateTrafficMirrorFilterResponse' {} a -> s {trafficMirrorFilter = a} :: CreateTrafficMirrorFilterResponse)
+
+-- | The response's http status code.
+createTrafficMirrorFilterResponse_httpStatus :: Lens.Lens' CreateTrafficMirrorFilterResponse Prelude.Int
+createTrafficMirrorFilterResponse_httpStatus = Lens.lens (\CreateTrafficMirrorFilterResponse' {httpStatus} -> httpStatus) (\s@CreateTrafficMirrorFilterResponse' {} a -> s {httpStatus = a} :: CreateTrafficMirrorFilterResponse)
+
+instance
+  Prelude.NFData
+    CreateTrafficMirrorFilterResponse
+  where
+  rnf CreateTrafficMirrorFilterResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf trafficMirrorFilter
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTrafficMirrorFilterRule.hs b/gen/Amazonka/EC2/CreateTrafficMirrorFilterRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTrafficMirrorFilterRule.hs
@@ -0,0 +1,391 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTrafficMirrorFilterRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Traffic Mirror filter rule.
+--
+-- A Traffic Mirror rule defines the Traffic Mirror source traffic to
+-- mirror.
+--
+-- You need the Traffic Mirror filter ID when you create the rule.
+module Amazonka.EC2.CreateTrafficMirrorFilterRule
+  ( -- * Creating a Request
+    CreateTrafficMirrorFilterRule (..),
+    newCreateTrafficMirrorFilterRule,
+
+    -- * Request Lenses
+    createTrafficMirrorFilterRule_clientToken,
+    createTrafficMirrorFilterRule_description,
+    createTrafficMirrorFilterRule_destinationPortRange,
+    createTrafficMirrorFilterRule_dryRun,
+    createTrafficMirrorFilterRule_protocol,
+    createTrafficMirrorFilterRule_sourcePortRange,
+    createTrafficMirrorFilterRule_trafficMirrorFilterId,
+    createTrafficMirrorFilterRule_trafficDirection,
+    createTrafficMirrorFilterRule_ruleNumber,
+    createTrafficMirrorFilterRule_ruleAction,
+    createTrafficMirrorFilterRule_destinationCidrBlock,
+    createTrafficMirrorFilterRule_sourceCidrBlock,
+
+    -- * Destructuring the Response
+    CreateTrafficMirrorFilterRuleResponse (..),
+    newCreateTrafficMirrorFilterRuleResponse,
+
+    -- * Response Lenses
+    createTrafficMirrorFilterRuleResponse_clientToken,
+    createTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule,
+    createTrafficMirrorFilterRuleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTrafficMirrorFilterRule' smart constructor.
+data CreateTrafficMirrorFilterRule = CreateTrafficMirrorFilterRule'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the Traffic Mirror rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The destination port range.
+    destinationPortRange :: Prelude.Maybe TrafficMirrorPortRangeRequest,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The protocol, for example UDP, to assign to the Traffic Mirror rule.
+    --
+    -- For information about the protocol value, see
+    -- <https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>
+    -- on the Internet Assigned Numbers Authority (IANA) website.
+    protocol :: Prelude.Maybe Prelude.Int,
+    -- | The source port range.
+    sourcePortRange :: Prelude.Maybe TrafficMirrorPortRangeRequest,
+    -- | The ID of the filter that this rule is associated with.
+    trafficMirrorFilterId :: Prelude.Text,
+    -- | The type of traffic.
+    trafficDirection :: TrafficDirection,
+    -- | The number of the Traffic Mirror rule. This number must be unique for
+    -- each Traffic Mirror rule in a given direction. The rules are processed
+    -- in ascending order by rule number.
+    ruleNumber :: Prelude.Int,
+    -- | The action to take on the filtered traffic.
+    ruleAction :: TrafficMirrorRuleAction,
+    -- | The destination CIDR block to assign to the Traffic Mirror rule.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The source CIDR block to assign to the Traffic Mirror rule.
+    sourceCidrBlock :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorFilterRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorFilterRule_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'createTrafficMirrorFilterRule_description' - The description of the Traffic Mirror rule.
+--
+-- 'destinationPortRange', 'createTrafficMirrorFilterRule_destinationPortRange' - The destination port range.
+--
+-- 'dryRun', 'createTrafficMirrorFilterRule_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'protocol', 'createTrafficMirrorFilterRule_protocol' - The protocol, for example UDP, to assign to the Traffic Mirror rule.
+--
+-- For information about the protocol value, see
+-- <https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>
+-- on the Internet Assigned Numbers Authority (IANA) website.
+--
+-- 'sourcePortRange', 'createTrafficMirrorFilterRule_sourcePortRange' - The source port range.
+--
+-- 'trafficMirrorFilterId', 'createTrafficMirrorFilterRule_trafficMirrorFilterId' - The ID of the filter that this rule is associated with.
+--
+-- 'trafficDirection', 'createTrafficMirrorFilterRule_trafficDirection' - The type of traffic.
+--
+-- 'ruleNumber', 'createTrafficMirrorFilterRule_ruleNumber' - The number of the Traffic Mirror rule. This number must be unique for
+-- each Traffic Mirror rule in a given direction. The rules are processed
+-- in ascending order by rule number.
+--
+-- 'ruleAction', 'createTrafficMirrorFilterRule_ruleAction' - The action to take on the filtered traffic.
+--
+-- 'destinationCidrBlock', 'createTrafficMirrorFilterRule_destinationCidrBlock' - The destination CIDR block to assign to the Traffic Mirror rule.
+--
+-- 'sourceCidrBlock', 'createTrafficMirrorFilterRule_sourceCidrBlock' - The source CIDR block to assign to the Traffic Mirror rule.
+newCreateTrafficMirrorFilterRule ::
+  -- | 'trafficMirrorFilterId'
+  Prelude.Text ->
+  -- | 'trafficDirection'
+  TrafficDirection ->
+  -- | 'ruleNumber'
+  Prelude.Int ->
+  -- | 'ruleAction'
+  TrafficMirrorRuleAction ->
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'sourceCidrBlock'
+  Prelude.Text ->
+  CreateTrafficMirrorFilterRule
+newCreateTrafficMirrorFilterRule
+  pTrafficMirrorFilterId_
+  pTrafficDirection_
+  pRuleNumber_
+  pRuleAction_
+  pDestinationCidrBlock_
+  pSourceCidrBlock_ =
+    CreateTrafficMirrorFilterRule'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        destinationPortRange = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        protocol = Prelude.Nothing,
+        sourcePortRange = Prelude.Nothing,
+        trafficMirrorFilterId =
+          pTrafficMirrorFilterId_,
+        trafficDirection = pTrafficDirection_,
+        ruleNumber = pRuleNumber_,
+        ruleAction = pRuleAction_,
+        destinationCidrBlock =
+          pDestinationCidrBlock_,
+        sourceCidrBlock = pSourceCidrBlock_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorFilterRule_clientToken :: Lens.Lens' CreateTrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+createTrafficMirrorFilterRule_clientToken = Lens.lens (\CreateTrafficMirrorFilterRule' {clientToken} -> clientToken) (\s@CreateTrafficMirrorFilterRule' {} a -> s {clientToken = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The description of the Traffic Mirror rule.
+createTrafficMirrorFilterRule_description :: Lens.Lens' CreateTrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+createTrafficMirrorFilterRule_description = Lens.lens (\CreateTrafficMirrorFilterRule' {description} -> description) (\s@CreateTrafficMirrorFilterRule' {} a -> s {description = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The destination port range.
+createTrafficMirrorFilterRule_destinationPortRange :: Lens.Lens' CreateTrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorPortRangeRequest)
+createTrafficMirrorFilterRule_destinationPortRange = Lens.lens (\CreateTrafficMirrorFilterRule' {destinationPortRange} -> destinationPortRange) (\s@CreateTrafficMirrorFilterRule' {} a -> s {destinationPortRange = a} :: CreateTrafficMirrorFilterRule)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTrafficMirrorFilterRule_dryRun :: Lens.Lens' CreateTrafficMirrorFilterRule (Prelude.Maybe Prelude.Bool)
+createTrafficMirrorFilterRule_dryRun = Lens.lens (\CreateTrafficMirrorFilterRule' {dryRun} -> dryRun) (\s@CreateTrafficMirrorFilterRule' {} a -> s {dryRun = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The protocol, for example UDP, to assign to the Traffic Mirror rule.
+--
+-- For information about the protocol value, see
+-- <https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>
+-- on the Internet Assigned Numbers Authority (IANA) website.
+createTrafficMirrorFilterRule_protocol :: Lens.Lens' CreateTrafficMirrorFilterRule (Prelude.Maybe Prelude.Int)
+createTrafficMirrorFilterRule_protocol = Lens.lens (\CreateTrafficMirrorFilterRule' {protocol} -> protocol) (\s@CreateTrafficMirrorFilterRule' {} a -> s {protocol = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The source port range.
+createTrafficMirrorFilterRule_sourcePortRange :: Lens.Lens' CreateTrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorPortRangeRequest)
+createTrafficMirrorFilterRule_sourcePortRange = Lens.lens (\CreateTrafficMirrorFilterRule' {sourcePortRange} -> sourcePortRange) (\s@CreateTrafficMirrorFilterRule' {} a -> s {sourcePortRange = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The ID of the filter that this rule is associated with.
+createTrafficMirrorFilterRule_trafficMirrorFilterId :: Lens.Lens' CreateTrafficMirrorFilterRule Prelude.Text
+createTrafficMirrorFilterRule_trafficMirrorFilterId = Lens.lens (\CreateTrafficMirrorFilterRule' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@CreateTrafficMirrorFilterRule' {} a -> s {trafficMirrorFilterId = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The type of traffic.
+createTrafficMirrorFilterRule_trafficDirection :: Lens.Lens' CreateTrafficMirrorFilterRule TrafficDirection
+createTrafficMirrorFilterRule_trafficDirection = Lens.lens (\CreateTrafficMirrorFilterRule' {trafficDirection} -> trafficDirection) (\s@CreateTrafficMirrorFilterRule' {} a -> s {trafficDirection = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The number of the Traffic Mirror rule. This number must be unique for
+-- each Traffic Mirror rule in a given direction. The rules are processed
+-- in ascending order by rule number.
+createTrafficMirrorFilterRule_ruleNumber :: Lens.Lens' CreateTrafficMirrorFilterRule Prelude.Int
+createTrafficMirrorFilterRule_ruleNumber = Lens.lens (\CreateTrafficMirrorFilterRule' {ruleNumber} -> ruleNumber) (\s@CreateTrafficMirrorFilterRule' {} a -> s {ruleNumber = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The action to take on the filtered traffic.
+createTrafficMirrorFilterRule_ruleAction :: Lens.Lens' CreateTrafficMirrorFilterRule TrafficMirrorRuleAction
+createTrafficMirrorFilterRule_ruleAction = Lens.lens (\CreateTrafficMirrorFilterRule' {ruleAction} -> ruleAction) (\s@CreateTrafficMirrorFilterRule' {} a -> s {ruleAction = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The destination CIDR block to assign to the Traffic Mirror rule.
+createTrafficMirrorFilterRule_destinationCidrBlock :: Lens.Lens' CreateTrafficMirrorFilterRule Prelude.Text
+createTrafficMirrorFilterRule_destinationCidrBlock = Lens.lens (\CreateTrafficMirrorFilterRule' {destinationCidrBlock} -> destinationCidrBlock) (\s@CreateTrafficMirrorFilterRule' {} a -> s {destinationCidrBlock = a} :: CreateTrafficMirrorFilterRule)
+
+-- | The source CIDR block to assign to the Traffic Mirror rule.
+createTrafficMirrorFilterRule_sourceCidrBlock :: Lens.Lens' CreateTrafficMirrorFilterRule Prelude.Text
+createTrafficMirrorFilterRule_sourceCidrBlock = Lens.lens (\CreateTrafficMirrorFilterRule' {sourceCidrBlock} -> sourceCidrBlock) (\s@CreateTrafficMirrorFilterRule' {} a -> s {sourceCidrBlock = a} :: CreateTrafficMirrorFilterRule)
+
+instance
+  Core.AWSRequest
+    CreateTrafficMirrorFilterRule
+  where
+  type
+    AWSResponse CreateTrafficMirrorFilterRule =
+      CreateTrafficMirrorFilterRuleResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTrafficMirrorFilterRuleResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "trafficMirrorFilterRule")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTrafficMirrorFilterRule
+  where
+  hashWithSalt _salt CreateTrafficMirrorFilterRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationPortRange
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` sourcePortRange
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+      `Prelude.hashWithSalt` trafficDirection
+      `Prelude.hashWithSalt` ruleNumber
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` sourceCidrBlock
+
+instance Prelude.NFData CreateTrafficMirrorFilterRule where
+  rnf CreateTrafficMirrorFilterRule' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationPortRange
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf sourcePortRange
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+      `Prelude.seq` Prelude.rnf trafficDirection
+      `Prelude.seq` Prelude.rnf ruleNumber
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf sourceCidrBlock
+
+instance Data.ToHeaders CreateTrafficMirrorFilterRule where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTrafficMirrorFilterRule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTrafficMirrorFilterRule where
+  toQuery CreateTrafficMirrorFilterRule' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTrafficMirrorFilterRule" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DestinationPortRange" Data.=: destinationPortRange,
+        "DryRun" Data.=: dryRun,
+        "Protocol" Data.=: protocol,
+        "SourcePortRange" Data.=: sourcePortRange,
+        "TrafficMirrorFilterId"
+          Data.=: trafficMirrorFilterId,
+        "TrafficDirection" Data.=: trafficDirection,
+        "RuleNumber" Data.=: ruleNumber,
+        "RuleAction" Data.=: ruleAction,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "SourceCidrBlock" Data.=: sourceCidrBlock
+      ]
+
+-- | /See:/ 'newCreateTrafficMirrorFilterRuleResponse' smart constructor.
+data CreateTrafficMirrorFilterRuleResponse = CreateTrafficMirrorFilterRuleResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The Traffic Mirror rule.
+    trafficMirrorFilterRule :: Prelude.Maybe TrafficMirrorFilterRule,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorFilterRuleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorFilterRuleResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'trafficMirrorFilterRule', 'createTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule' - The Traffic Mirror rule.
+--
+-- 'httpStatus', 'createTrafficMirrorFilterRuleResponse_httpStatus' - The response's http status code.
+newCreateTrafficMirrorFilterRuleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTrafficMirrorFilterRuleResponse
+newCreateTrafficMirrorFilterRuleResponse pHttpStatus_ =
+  CreateTrafficMirrorFilterRuleResponse'
+    { clientToken =
+        Prelude.Nothing,
+      trafficMirrorFilterRule =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorFilterRuleResponse_clientToken :: Lens.Lens' CreateTrafficMirrorFilterRuleResponse (Prelude.Maybe Prelude.Text)
+createTrafficMirrorFilterRuleResponse_clientToken = Lens.lens (\CreateTrafficMirrorFilterRuleResponse' {clientToken} -> clientToken) (\s@CreateTrafficMirrorFilterRuleResponse' {} a -> s {clientToken = a} :: CreateTrafficMirrorFilterRuleResponse)
+
+-- | The Traffic Mirror rule.
+createTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule :: Lens.Lens' CreateTrafficMirrorFilterRuleResponse (Prelude.Maybe TrafficMirrorFilterRule)
+createTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule = Lens.lens (\CreateTrafficMirrorFilterRuleResponse' {trafficMirrorFilterRule} -> trafficMirrorFilterRule) (\s@CreateTrafficMirrorFilterRuleResponse' {} a -> s {trafficMirrorFilterRule = a} :: CreateTrafficMirrorFilterRuleResponse)
+
+-- | The response's http status code.
+createTrafficMirrorFilterRuleResponse_httpStatus :: Lens.Lens' CreateTrafficMirrorFilterRuleResponse Prelude.Int
+createTrafficMirrorFilterRuleResponse_httpStatus = Lens.lens (\CreateTrafficMirrorFilterRuleResponse' {httpStatus} -> httpStatus) (\s@CreateTrafficMirrorFilterRuleResponse' {} a -> s {httpStatus = a} :: CreateTrafficMirrorFilterRuleResponse)
+
+instance
+  Prelude.NFData
+    CreateTrafficMirrorFilterRuleResponse
+  where
+  rnf CreateTrafficMirrorFilterRuleResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterRule
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTrafficMirrorSession.hs b/gen/Amazonka/EC2/CreateTrafficMirrorSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTrafficMirrorSession.hs
@@ -0,0 +1,387 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTrafficMirrorSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Traffic Mirror session.
+--
+-- A Traffic Mirror session actively copies packets from a Traffic Mirror
+-- source to a Traffic Mirror target. Create a filter, and then assign it
+-- to the session to define a subset of the traffic to mirror, for example
+-- all TCP traffic.
+--
+-- The Traffic Mirror source and the Traffic Mirror target (monitoring
+-- appliances) can be in the same VPC, or in a different VPC connected via
+-- VPC peering or a transit gateway.
+--
+-- By default, no traffic is mirrored. Use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorFilter.htm CreateTrafficMirrorFilter>
+-- to create filter rules that specify the traffic to mirror.
+module Amazonka.EC2.CreateTrafficMirrorSession
+  ( -- * Creating a Request
+    CreateTrafficMirrorSession (..),
+    newCreateTrafficMirrorSession,
+
+    -- * Request Lenses
+    createTrafficMirrorSession_clientToken,
+    createTrafficMirrorSession_description,
+    createTrafficMirrorSession_dryRun,
+    createTrafficMirrorSession_packetLength,
+    createTrafficMirrorSession_tagSpecifications,
+    createTrafficMirrorSession_virtualNetworkId,
+    createTrafficMirrorSession_networkInterfaceId,
+    createTrafficMirrorSession_trafficMirrorTargetId,
+    createTrafficMirrorSession_trafficMirrorFilterId,
+    createTrafficMirrorSession_sessionNumber,
+
+    -- * Destructuring the Response
+    CreateTrafficMirrorSessionResponse (..),
+    newCreateTrafficMirrorSessionResponse,
+
+    -- * Response Lenses
+    createTrafficMirrorSessionResponse_clientToken,
+    createTrafficMirrorSessionResponse_trafficMirrorSession,
+    createTrafficMirrorSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTrafficMirrorSession' smart constructor.
+data CreateTrafficMirrorSession = CreateTrafficMirrorSession'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the Traffic Mirror session.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The number of bytes in each packet to mirror. These are bytes after the
+    -- VXLAN header. Do not specify this parameter when you want to mirror the
+    -- entire packet. To mirror a subset of the packet, set this to the length
+    -- (in bytes) that you want to mirror. For example, if you set this value
+    -- to 100, then the first 100 bytes that meet the filter criteria are
+    -- copied to the target.
+    --
+    -- If you do not want to mirror the entire packet, use the @PacketLength@
+    -- parameter to specify the number of bytes in each packet to mirror.
+    packetLength :: Prelude.Maybe Prelude.Int,
+    -- | The tags to assign to a Traffic Mirror session.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The VXLAN ID for the Traffic Mirror session. For more information about
+    -- the VXLAN protocol, see <https://tools.ietf.org/html/rfc7348 RFC 7348>.
+    -- If you do not specify a @VirtualNetworkId@, an account-wide unique id is
+    -- chosen at random.
+    virtualNetworkId :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the source network interface.
+    networkInterfaceId :: Prelude.Text,
+    -- | The ID of the Traffic Mirror target.
+    trafficMirrorTargetId :: Prelude.Text,
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Text,
+    -- | The session number determines the order in which sessions are evaluated
+    -- when an interface is used by multiple sessions. The first session with a
+    -- matching filter is the one that mirrors the packets.
+    --
+    -- Valid values are 1-32766.
+    sessionNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorSession_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'createTrafficMirrorSession_description' - The description of the Traffic Mirror session.
+--
+-- 'dryRun', 'createTrafficMirrorSession_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'packetLength', 'createTrafficMirrorSession_packetLength' - The number of bytes in each packet to mirror. These are bytes after the
+-- VXLAN header. Do not specify this parameter when you want to mirror the
+-- entire packet. To mirror a subset of the packet, set this to the length
+-- (in bytes) that you want to mirror. For example, if you set this value
+-- to 100, then the first 100 bytes that meet the filter criteria are
+-- copied to the target.
+--
+-- If you do not want to mirror the entire packet, use the @PacketLength@
+-- parameter to specify the number of bytes in each packet to mirror.
+--
+-- 'tagSpecifications', 'createTrafficMirrorSession_tagSpecifications' - The tags to assign to a Traffic Mirror session.
+--
+-- 'virtualNetworkId', 'createTrafficMirrorSession_virtualNetworkId' - The VXLAN ID for the Traffic Mirror session. For more information about
+-- the VXLAN protocol, see <https://tools.ietf.org/html/rfc7348 RFC 7348>.
+-- If you do not specify a @VirtualNetworkId@, an account-wide unique id is
+-- chosen at random.
+--
+-- 'networkInterfaceId', 'createTrafficMirrorSession_networkInterfaceId' - The ID of the source network interface.
+--
+-- 'trafficMirrorTargetId', 'createTrafficMirrorSession_trafficMirrorTargetId' - The ID of the Traffic Mirror target.
+--
+-- 'trafficMirrorFilterId', 'createTrafficMirrorSession_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+--
+-- 'sessionNumber', 'createTrafficMirrorSession_sessionNumber' - The session number determines the order in which sessions are evaluated
+-- when an interface is used by multiple sessions. The first session with a
+-- matching filter is the one that mirrors the packets.
+--
+-- Valid values are 1-32766.
+newCreateTrafficMirrorSession ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  -- | 'trafficMirrorTargetId'
+  Prelude.Text ->
+  -- | 'trafficMirrorFilterId'
+  Prelude.Text ->
+  -- | 'sessionNumber'
+  Prelude.Int ->
+  CreateTrafficMirrorSession
+newCreateTrafficMirrorSession
+  pNetworkInterfaceId_
+  pTrafficMirrorTargetId_
+  pTrafficMirrorFilterId_
+  pSessionNumber_ =
+    CreateTrafficMirrorSession'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        packetLength = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        virtualNetworkId = Prelude.Nothing,
+        networkInterfaceId = pNetworkInterfaceId_,
+        trafficMirrorTargetId = pTrafficMirrorTargetId_,
+        trafficMirrorFilterId = pTrafficMirrorFilterId_,
+        sessionNumber = pSessionNumber_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorSession_clientToken :: Lens.Lens' CreateTrafficMirrorSession (Prelude.Maybe Prelude.Text)
+createTrafficMirrorSession_clientToken = Lens.lens (\CreateTrafficMirrorSession' {clientToken} -> clientToken) (\s@CreateTrafficMirrorSession' {} a -> s {clientToken = a} :: CreateTrafficMirrorSession)
+
+-- | The description of the Traffic Mirror session.
+createTrafficMirrorSession_description :: Lens.Lens' CreateTrafficMirrorSession (Prelude.Maybe Prelude.Text)
+createTrafficMirrorSession_description = Lens.lens (\CreateTrafficMirrorSession' {description} -> description) (\s@CreateTrafficMirrorSession' {} a -> s {description = a} :: CreateTrafficMirrorSession)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTrafficMirrorSession_dryRun :: Lens.Lens' CreateTrafficMirrorSession (Prelude.Maybe Prelude.Bool)
+createTrafficMirrorSession_dryRun = Lens.lens (\CreateTrafficMirrorSession' {dryRun} -> dryRun) (\s@CreateTrafficMirrorSession' {} a -> s {dryRun = a} :: CreateTrafficMirrorSession)
+
+-- | The number of bytes in each packet to mirror. These are bytes after the
+-- VXLAN header. Do not specify this parameter when you want to mirror the
+-- entire packet. To mirror a subset of the packet, set this to the length
+-- (in bytes) that you want to mirror. For example, if you set this value
+-- to 100, then the first 100 bytes that meet the filter criteria are
+-- copied to the target.
+--
+-- If you do not want to mirror the entire packet, use the @PacketLength@
+-- parameter to specify the number of bytes in each packet to mirror.
+createTrafficMirrorSession_packetLength :: Lens.Lens' CreateTrafficMirrorSession (Prelude.Maybe Prelude.Int)
+createTrafficMirrorSession_packetLength = Lens.lens (\CreateTrafficMirrorSession' {packetLength} -> packetLength) (\s@CreateTrafficMirrorSession' {} a -> s {packetLength = a} :: CreateTrafficMirrorSession)
+
+-- | The tags to assign to a Traffic Mirror session.
+createTrafficMirrorSession_tagSpecifications :: Lens.Lens' CreateTrafficMirrorSession (Prelude.Maybe [TagSpecification])
+createTrafficMirrorSession_tagSpecifications = Lens.lens (\CreateTrafficMirrorSession' {tagSpecifications} -> tagSpecifications) (\s@CreateTrafficMirrorSession' {} a -> s {tagSpecifications = a} :: CreateTrafficMirrorSession) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VXLAN ID for the Traffic Mirror session. For more information about
+-- the VXLAN protocol, see <https://tools.ietf.org/html/rfc7348 RFC 7348>.
+-- If you do not specify a @VirtualNetworkId@, an account-wide unique id is
+-- chosen at random.
+createTrafficMirrorSession_virtualNetworkId :: Lens.Lens' CreateTrafficMirrorSession (Prelude.Maybe Prelude.Int)
+createTrafficMirrorSession_virtualNetworkId = Lens.lens (\CreateTrafficMirrorSession' {virtualNetworkId} -> virtualNetworkId) (\s@CreateTrafficMirrorSession' {} a -> s {virtualNetworkId = a} :: CreateTrafficMirrorSession)
+
+-- | The ID of the source network interface.
+createTrafficMirrorSession_networkInterfaceId :: Lens.Lens' CreateTrafficMirrorSession Prelude.Text
+createTrafficMirrorSession_networkInterfaceId = Lens.lens (\CreateTrafficMirrorSession' {networkInterfaceId} -> networkInterfaceId) (\s@CreateTrafficMirrorSession' {} a -> s {networkInterfaceId = a} :: CreateTrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror target.
+createTrafficMirrorSession_trafficMirrorTargetId :: Lens.Lens' CreateTrafficMirrorSession Prelude.Text
+createTrafficMirrorSession_trafficMirrorTargetId = Lens.lens (\CreateTrafficMirrorSession' {trafficMirrorTargetId} -> trafficMirrorTargetId) (\s@CreateTrafficMirrorSession' {} a -> s {trafficMirrorTargetId = a} :: CreateTrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror filter.
+createTrafficMirrorSession_trafficMirrorFilterId :: Lens.Lens' CreateTrafficMirrorSession Prelude.Text
+createTrafficMirrorSession_trafficMirrorFilterId = Lens.lens (\CreateTrafficMirrorSession' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@CreateTrafficMirrorSession' {} a -> s {trafficMirrorFilterId = a} :: CreateTrafficMirrorSession)
+
+-- | The session number determines the order in which sessions are evaluated
+-- when an interface is used by multiple sessions. The first session with a
+-- matching filter is the one that mirrors the packets.
+--
+-- Valid values are 1-32766.
+createTrafficMirrorSession_sessionNumber :: Lens.Lens' CreateTrafficMirrorSession Prelude.Int
+createTrafficMirrorSession_sessionNumber = Lens.lens (\CreateTrafficMirrorSession' {sessionNumber} -> sessionNumber) (\s@CreateTrafficMirrorSession' {} a -> s {sessionNumber = a} :: CreateTrafficMirrorSession)
+
+instance Core.AWSRequest CreateTrafficMirrorSession where
+  type
+    AWSResponse CreateTrafficMirrorSession =
+      CreateTrafficMirrorSessionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTrafficMirrorSessionResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "trafficMirrorSession")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTrafficMirrorSession where
+  hashWithSalt _salt CreateTrafficMirrorSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` packetLength
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` virtualNetworkId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` trafficMirrorTargetId
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+      `Prelude.hashWithSalt` sessionNumber
+
+instance Prelude.NFData CreateTrafficMirrorSession where
+  rnf CreateTrafficMirrorSession' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf packetLength
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf virtualNetworkId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf trafficMirrorTargetId
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+      `Prelude.seq` Prelude.rnf sessionNumber
+
+instance Data.ToHeaders CreateTrafficMirrorSession where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTrafficMirrorSession where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTrafficMirrorSession where
+  toQuery CreateTrafficMirrorSession' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateTrafficMirrorSession" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "PacketLength" Data.=: packetLength,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VirtualNetworkId" Data.=: virtualNetworkId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "TrafficMirrorTargetId"
+          Data.=: trafficMirrorTargetId,
+        "TrafficMirrorFilterId"
+          Data.=: trafficMirrorFilterId,
+        "SessionNumber" Data.=: sessionNumber
+      ]
+
+-- | /See:/ 'newCreateTrafficMirrorSessionResponse' smart constructor.
+data CreateTrafficMirrorSessionResponse = CreateTrafficMirrorSessionResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Traffic Mirror session.
+    trafficMirrorSession :: Prelude.Maybe TrafficMirrorSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorSessionResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'trafficMirrorSession', 'createTrafficMirrorSessionResponse_trafficMirrorSession' - Information about the Traffic Mirror session.
+--
+-- 'httpStatus', 'createTrafficMirrorSessionResponse_httpStatus' - The response's http status code.
+newCreateTrafficMirrorSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTrafficMirrorSessionResponse
+newCreateTrafficMirrorSessionResponse pHttpStatus_ =
+  CreateTrafficMirrorSessionResponse'
+    { clientToken =
+        Prelude.Nothing,
+      trafficMirrorSession = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorSessionResponse_clientToken :: Lens.Lens' CreateTrafficMirrorSessionResponse (Prelude.Maybe Prelude.Text)
+createTrafficMirrorSessionResponse_clientToken = Lens.lens (\CreateTrafficMirrorSessionResponse' {clientToken} -> clientToken) (\s@CreateTrafficMirrorSessionResponse' {} a -> s {clientToken = a} :: CreateTrafficMirrorSessionResponse)
+
+-- | Information about the Traffic Mirror session.
+createTrafficMirrorSessionResponse_trafficMirrorSession :: Lens.Lens' CreateTrafficMirrorSessionResponse (Prelude.Maybe TrafficMirrorSession)
+createTrafficMirrorSessionResponse_trafficMirrorSession = Lens.lens (\CreateTrafficMirrorSessionResponse' {trafficMirrorSession} -> trafficMirrorSession) (\s@CreateTrafficMirrorSessionResponse' {} a -> s {trafficMirrorSession = a} :: CreateTrafficMirrorSessionResponse)
+
+-- | The response's http status code.
+createTrafficMirrorSessionResponse_httpStatus :: Lens.Lens' CreateTrafficMirrorSessionResponse Prelude.Int
+createTrafficMirrorSessionResponse_httpStatus = Lens.lens (\CreateTrafficMirrorSessionResponse' {httpStatus} -> httpStatus) (\s@CreateTrafficMirrorSessionResponse' {} a -> s {httpStatus = a} :: CreateTrafficMirrorSessionResponse)
+
+instance
+  Prelude.NFData
+    CreateTrafficMirrorSessionResponse
+  where
+  rnf CreateTrafficMirrorSessionResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf trafficMirrorSession
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTrafficMirrorTarget.hs b/gen/Amazonka/EC2/CreateTrafficMirrorTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTrafficMirrorTarget.hs
@@ -0,0 +1,292 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTrafficMirrorTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a target for your Traffic Mirror session.
+--
+-- A Traffic Mirror target is the destination for mirrored traffic. The
+-- Traffic Mirror source and the Traffic Mirror target (monitoring
+-- appliances) can be in the same VPC, or in different VPCs connected via
+-- VPC peering or a transit gateway.
+--
+-- A Traffic Mirror target can be a network interface, a Network Load
+-- Balancer, or a Gateway Load Balancer endpoint.
+--
+-- To use the target in a Traffic Mirror session, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTrafficMirrorSession.htm CreateTrafficMirrorSession>.
+module Amazonka.EC2.CreateTrafficMirrorTarget
+  ( -- * Creating a Request
+    CreateTrafficMirrorTarget (..),
+    newCreateTrafficMirrorTarget,
+
+    -- * Request Lenses
+    createTrafficMirrorTarget_clientToken,
+    createTrafficMirrorTarget_description,
+    createTrafficMirrorTarget_dryRun,
+    createTrafficMirrorTarget_gatewayLoadBalancerEndpointId,
+    createTrafficMirrorTarget_networkInterfaceId,
+    createTrafficMirrorTarget_networkLoadBalancerArn,
+    createTrafficMirrorTarget_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateTrafficMirrorTargetResponse (..),
+    newCreateTrafficMirrorTargetResponse,
+
+    -- * Response Lenses
+    createTrafficMirrorTargetResponse_clientToken,
+    createTrafficMirrorTargetResponse_trafficMirrorTarget,
+    createTrafficMirrorTargetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTrafficMirrorTarget' smart constructor.
+data CreateTrafficMirrorTarget = CreateTrafficMirrorTarget'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the Traffic Mirror target.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Gateway Load Balancer endpoint.
+    gatewayLoadBalancerEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The network interface ID that is associated with the target.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Network Load Balancer that is
+    -- associated with the target.
+    networkLoadBalancerArn :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the Traffic Mirror target.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorTarget_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'description', 'createTrafficMirrorTarget_description' - The description of the Traffic Mirror target.
+--
+-- 'dryRun', 'createTrafficMirrorTarget_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'gatewayLoadBalancerEndpointId', 'createTrafficMirrorTarget_gatewayLoadBalancerEndpointId' - The ID of the Gateway Load Balancer endpoint.
+--
+-- 'networkInterfaceId', 'createTrafficMirrorTarget_networkInterfaceId' - The network interface ID that is associated with the target.
+--
+-- 'networkLoadBalancerArn', 'createTrafficMirrorTarget_networkLoadBalancerArn' - The Amazon Resource Name (ARN) of the Network Load Balancer that is
+-- associated with the target.
+--
+-- 'tagSpecifications', 'createTrafficMirrorTarget_tagSpecifications' - The tags to assign to the Traffic Mirror target.
+newCreateTrafficMirrorTarget ::
+  CreateTrafficMirrorTarget
+newCreateTrafficMirrorTarget =
+  CreateTrafficMirrorTarget'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      gatewayLoadBalancerEndpointId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      networkLoadBalancerArn = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorTarget_clientToken :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+createTrafficMirrorTarget_clientToken = Lens.lens (\CreateTrafficMirrorTarget' {clientToken} -> clientToken) (\s@CreateTrafficMirrorTarget' {} a -> s {clientToken = a} :: CreateTrafficMirrorTarget)
+
+-- | The description of the Traffic Mirror target.
+createTrafficMirrorTarget_description :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+createTrafficMirrorTarget_description = Lens.lens (\CreateTrafficMirrorTarget' {description} -> description) (\s@CreateTrafficMirrorTarget' {} a -> s {description = a} :: CreateTrafficMirrorTarget)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTrafficMirrorTarget_dryRun :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Bool)
+createTrafficMirrorTarget_dryRun = Lens.lens (\CreateTrafficMirrorTarget' {dryRun} -> dryRun) (\s@CreateTrafficMirrorTarget' {} a -> s {dryRun = a} :: CreateTrafficMirrorTarget)
+
+-- | The ID of the Gateway Load Balancer endpoint.
+createTrafficMirrorTarget_gatewayLoadBalancerEndpointId :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+createTrafficMirrorTarget_gatewayLoadBalancerEndpointId = Lens.lens (\CreateTrafficMirrorTarget' {gatewayLoadBalancerEndpointId} -> gatewayLoadBalancerEndpointId) (\s@CreateTrafficMirrorTarget' {} a -> s {gatewayLoadBalancerEndpointId = a} :: CreateTrafficMirrorTarget)
+
+-- | The network interface ID that is associated with the target.
+createTrafficMirrorTarget_networkInterfaceId :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+createTrafficMirrorTarget_networkInterfaceId = Lens.lens (\CreateTrafficMirrorTarget' {networkInterfaceId} -> networkInterfaceId) (\s@CreateTrafficMirrorTarget' {} a -> s {networkInterfaceId = a} :: CreateTrafficMirrorTarget)
+
+-- | The Amazon Resource Name (ARN) of the Network Load Balancer that is
+-- associated with the target.
+createTrafficMirrorTarget_networkLoadBalancerArn :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+createTrafficMirrorTarget_networkLoadBalancerArn = Lens.lens (\CreateTrafficMirrorTarget' {networkLoadBalancerArn} -> networkLoadBalancerArn) (\s@CreateTrafficMirrorTarget' {} a -> s {networkLoadBalancerArn = a} :: CreateTrafficMirrorTarget)
+
+-- | The tags to assign to the Traffic Mirror target.
+createTrafficMirrorTarget_tagSpecifications :: Lens.Lens' CreateTrafficMirrorTarget (Prelude.Maybe [TagSpecification])
+createTrafficMirrorTarget_tagSpecifications = Lens.lens (\CreateTrafficMirrorTarget' {tagSpecifications} -> tagSpecifications) (\s@CreateTrafficMirrorTarget' {} a -> s {tagSpecifications = a} :: CreateTrafficMirrorTarget) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateTrafficMirrorTarget where
+  type
+    AWSResponse CreateTrafficMirrorTarget =
+      CreateTrafficMirrorTargetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTrafficMirrorTargetResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "trafficMirrorTarget")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTrafficMirrorTarget where
+  hashWithSalt _salt CreateTrafficMirrorTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` gatewayLoadBalancerEndpointId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` networkLoadBalancerArn
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateTrafficMirrorTarget where
+  rnf CreateTrafficMirrorTarget' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf gatewayLoadBalancerEndpointId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf networkLoadBalancerArn
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateTrafficMirrorTarget where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTrafficMirrorTarget where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTrafficMirrorTarget where
+  toQuery CreateTrafficMirrorTarget' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateTrafficMirrorTarget" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "GatewayLoadBalancerEndpointId"
+          Data.=: gatewayLoadBalancerEndpointId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "NetworkLoadBalancerArn"
+          Data.=: networkLoadBalancerArn,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateTrafficMirrorTargetResponse' smart constructor.
+data CreateTrafficMirrorTargetResponse = CreateTrafficMirrorTargetResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Traffic Mirror target.
+    trafficMirrorTarget :: Prelude.Maybe TrafficMirrorTarget,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTrafficMirrorTargetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTrafficMirrorTargetResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'trafficMirrorTarget', 'createTrafficMirrorTargetResponse_trafficMirrorTarget' - Information about the Traffic Mirror target.
+--
+-- 'httpStatus', 'createTrafficMirrorTargetResponse_httpStatus' - The response's http status code.
+newCreateTrafficMirrorTargetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTrafficMirrorTargetResponse
+newCreateTrafficMirrorTargetResponse pHttpStatus_ =
+  CreateTrafficMirrorTargetResponse'
+    { clientToken =
+        Prelude.Nothing,
+      trafficMirrorTarget = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createTrafficMirrorTargetResponse_clientToken :: Lens.Lens' CreateTrafficMirrorTargetResponse (Prelude.Maybe Prelude.Text)
+createTrafficMirrorTargetResponse_clientToken = Lens.lens (\CreateTrafficMirrorTargetResponse' {clientToken} -> clientToken) (\s@CreateTrafficMirrorTargetResponse' {} a -> s {clientToken = a} :: CreateTrafficMirrorTargetResponse)
+
+-- | Information about the Traffic Mirror target.
+createTrafficMirrorTargetResponse_trafficMirrorTarget :: Lens.Lens' CreateTrafficMirrorTargetResponse (Prelude.Maybe TrafficMirrorTarget)
+createTrafficMirrorTargetResponse_trafficMirrorTarget = Lens.lens (\CreateTrafficMirrorTargetResponse' {trafficMirrorTarget} -> trafficMirrorTarget) (\s@CreateTrafficMirrorTargetResponse' {} a -> s {trafficMirrorTarget = a} :: CreateTrafficMirrorTargetResponse)
+
+-- | The response's http status code.
+createTrafficMirrorTargetResponse_httpStatus :: Lens.Lens' CreateTrafficMirrorTargetResponse Prelude.Int
+createTrafficMirrorTargetResponse_httpStatus = Lens.lens (\CreateTrafficMirrorTargetResponse' {httpStatus} -> httpStatus) (\s@CreateTrafficMirrorTargetResponse' {} a -> s {httpStatus = a} :: CreateTrafficMirrorTargetResponse)
+
+instance
+  Prelude.NFData
+    CreateTrafficMirrorTargetResponse
+  where
+  rnf CreateTrafficMirrorTargetResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf trafficMirrorTarget
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGateway.hs b/gen/Amazonka/EC2/CreateTransitGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGateway.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a transit gateway.
+--
+-- You can use a transit gateway to interconnect your virtual private
+-- clouds (VPC) and on-premises networks. After the transit gateway enters
+-- the @available@ state, you can attach your VPCs and VPN connections to
+-- the transit gateway.
+--
+-- To attach your VPCs, use CreateTransitGatewayVpcAttachment.
+--
+-- To attach a VPN connection, use CreateCustomerGateway to create a
+-- customer gateway and specify the ID of the customer gateway and the ID
+-- of the transit gateway in a call to CreateVpnConnection.
+--
+-- When you create a transit gateway, we create a default transit gateway
+-- route table and use it as the default association route table and the
+-- default propagation route table. You can use
+-- CreateTransitGatewayRouteTable to create additional transit gateway
+-- route tables. If you disable automatic route propagation, we do not
+-- create a default transit gateway route table. You can use
+-- EnableTransitGatewayRouteTablePropagation to propagate routes from a
+-- resource attachment to a transit gateway route table. If you disable
+-- automatic associations, you can use AssociateTransitGatewayRouteTable to
+-- associate a resource attachment with a transit gateway route table.
+module Amazonka.EC2.CreateTransitGateway
+  ( -- * Creating a Request
+    CreateTransitGateway (..),
+    newCreateTransitGateway,
+
+    -- * Request Lenses
+    createTransitGateway_description,
+    createTransitGateway_dryRun,
+    createTransitGateway_options,
+    createTransitGateway_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayResponse (..),
+    newCreateTransitGatewayResponse,
+
+    -- * Response Lenses
+    createTransitGatewayResponse_transitGateway,
+    createTransitGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGateway' smart constructor.
+data CreateTransitGateway = CreateTransitGateway'
+  { -- | A description of the transit gateway.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The transit gateway options.
+    options :: Prelude.Maybe TransitGatewayRequestOptions,
+    -- | The tags to apply to the transit gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createTransitGateway_description' - A description of the transit gateway.
+--
+-- 'dryRun', 'createTransitGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'createTransitGateway_options' - The transit gateway options.
+--
+-- 'tagSpecifications', 'createTransitGateway_tagSpecifications' - The tags to apply to the transit gateway.
+newCreateTransitGateway ::
+  CreateTransitGateway
+newCreateTransitGateway =
+  CreateTransitGateway'
+    { description =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      options = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | A description of the transit gateway.
+createTransitGateway_description :: Lens.Lens' CreateTransitGateway (Prelude.Maybe Prelude.Text)
+createTransitGateway_description = Lens.lens (\CreateTransitGateway' {description} -> description) (\s@CreateTransitGateway' {} a -> s {description = a} :: CreateTransitGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGateway_dryRun :: Lens.Lens' CreateTransitGateway (Prelude.Maybe Prelude.Bool)
+createTransitGateway_dryRun = Lens.lens (\CreateTransitGateway' {dryRun} -> dryRun) (\s@CreateTransitGateway' {} a -> s {dryRun = a} :: CreateTransitGateway)
+
+-- | The transit gateway options.
+createTransitGateway_options :: Lens.Lens' CreateTransitGateway (Prelude.Maybe TransitGatewayRequestOptions)
+createTransitGateway_options = Lens.lens (\CreateTransitGateway' {options} -> options) (\s@CreateTransitGateway' {} a -> s {options = a} :: CreateTransitGateway)
+
+-- | The tags to apply to the transit gateway.
+createTransitGateway_tagSpecifications :: Lens.Lens' CreateTransitGateway (Prelude.Maybe [TagSpecification])
+createTransitGateway_tagSpecifications = Lens.lens (\CreateTransitGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGateway' {} a -> s {tagSpecifications = a} :: CreateTransitGateway) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateTransitGateway where
+  type
+    AWSResponse CreateTransitGateway =
+      CreateTransitGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayResponse'
+            Prelude.<$> (x Data..@? "transitGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTransitGateway where
+  hashWithSalt _salt CreateTransitGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateTransitGateway where
+  rnf CreateTransitGateway' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateTransitGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTransitGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTransitGateway where
+  toQuery CreateTransitGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateTransitGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayResponse' smart constructor.
+data CreateTransitGatewayResponse = CreateTransitGatewayResponse'
+  { -- | Information about the transit gateway.
+    transitGateway :: Prelude.Maybe TransitGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGateway', 'createTransitGatewayResponse_transitGateway' - Information about the transit gateway.
+--
+-- 'httpStatus', 'createTransitGatewayResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayResponse
+newCreateTransitGatewayResponse pHttpStatus_ =
+  CreateTransitGatewayResponse'
+    { transitGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the transit gateway.
+createTransitGatewayResponse_transitGateway :: Lens.Lens' CreateTransitGatewayResponse (Prelude.Maybe TransitGateway)
+createTransitGatewayResponse_transitGateway = Lens.lens (\CreateTransitGatewayResponse' {transitGateway} -> transitGateway) (\s@CreateTransitGatewayResponse' {} a -> s {transitGateway = a} :: CreateTransitGatewayResponse)
+
+-- | The response's http status code.
+createTransitGatewayResponse_httpStatus :: Lens.Lens' CreateTransitGatewayResponse Prelude.Int
+createTransitGatewayResponse_httpStatus = Lens.lens (\CreateTransitGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayResponse)
+
+instance Prelude.NFData CreateTransitGatewayResponse where
+  rnf CreateTransitGatewayResponse' {..} =
+    Prelude.rnf transitGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayConnect.hs b/gen/Amazonka/EC2/CreateTransitGatewayConnect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayConnect.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayConnect
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Connect attachment from a specified transit gateway
+-- attachment. A Connect attachment is a GRE-based tunnel attachment that
+-- you can use to establish a connection between a transit gateway and an
+-- appliance.
+--
+-- A Connect attachment uses an existing VPC or Amazon Web Services Direct
+-- Connect attachment as the underlying transport mechanism.
+module Amazonka.EC2.CreateTransitGatewayConnect
+  ( -- * Creating a Request
+    CreateTransitGatewayConnect (..),
+    newCreateTransitGatewayConnect,
+
+    -- * Request Lenses
+    createTransitGatewayConnect_dryRun,
+    createTransitGatewayConnect_tagSpecifications,
+    createTransitGatewayConnect_transportTransitGatewayAttachmentId,
+    createTransitGatewayConnect_options,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayConnectResponse (..),
+    newCreateTransitGatewayConnectResponse,
+
+    -- * Response Lenses
+    createTransitGatewayConnectResponse_transitGatewayConnect,
+    createTransitGatewayConnectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayConnect' smart constructor.
+data CreateTransitGatewayConnect = CreateTransitGatewayConnect'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the Connect attachment.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway attachment. You can specify a VPC
+    -- attachment or Amazon Web Services Direct Connect attachment.
+    transportTransitGatewayAttachmentId :: Prelude.Text,
+    -- | The Connect attachment options.
+    options :: CreateTransitGatewayConnectRequestOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayConnect' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayConnect_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createTransitGatewayConnect_tagSpecifications' - The tags to apply to the Connect attachment.
+--
+-- 'transportTransitGatewayAttachmentId', 'createTransitGatewayConnect_transportTransitGatewayAttachmentId' - The ID of the transit gateway attachment. You can specify a VPC
+-- attachment or Amazon Web Services Direct Connect attachment.
+--
+-- 'options', 'createTransitGatewayConnect_options' - The Connect attachment options.
+newCreateTransitGatewayConnect ::
+  -- | 'transportTransitGatewayAttachmentId'
+  Prelude.Text ->
+  -- | 'options'
+  CreateTransitGatewayConnectRequestOptions ->
+  CreateTransitGatewayConnect
+newCreateTransitGatewayConnect
+  pTransportTransitGatewayAttachmentId_
+  pOptions_ =
+    CreateTransitGatewayConnect'
+      { dryRun =
+          Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        transportTransitGatewayAttachmentId =
+          pTransportTransitGatewayAttachmentId_,
+        options = pOptions_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayConnect_dryRun :: Lens.Lens' CreateTransitGatewayConnect (Prelude.Maybe Prelude.Bool)
+createTransitGatewayConnect_dryRun = Lens.lens (\CreateTransitGatewayConnect' {dryRun} -> dryRun) (\s@CreateTransitGatewayConnect' {} a -> s {dryRun = a} :: CreateTransitGatewayConnect)
+
+-- | The tags to apply to the Connect attachment.
+createTransitGatewayConnect_tagSpecifications :: Lens.Lens' CreateTransitGatewayConnect (Prelude.Maybe [TagSpecification])
+createTransitGatewayConnect_tagSpecifications = Lens.lens (\CreateTransitGatewayConnect' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayConnect' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayConnect) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway attachment. You can specify a VPC
+-- attachment or Amazon Web Services Direct Connect attachment.
+createTransitGatewayConnect_transportTransitGatewayAttachmentId :: Lens.Lens' CreateTransitGatewayConnect Prelude.Text
+createTransitGatewayConnect_transportTransitGatewayAttachmentId = Lens.lens (\CreateTransitGatewayConnect' {transportTransitGatewayAttachmentId} -> transportTransitGatewayAttachmentId) (\s@CreateTransitGatewayConnect' {} a -> s {transportTransitGatewayAttachmentId = a} :: CreateTransitGatewayConnect)
+
+-- | The Connect attachment options.
+createTransitGatewayConnect_options :: Lens.Lens' CreateTransitGatewayConnect CreateTransitGatewayConnectRequestOptions
+createTransitGatewayConnect_options = Lens.lens (\CreateTransitGatewayConnect' {options} -> options) (\s@CreateTransitGatewayConnect' {} a -> s {options = a} :: CreateTransitGatewayConnect)
+
+instance Core.AWSRequest CreateTransitGatewayConnect where
+  type
+    AWSResponse CreateTransitGatewayConnect =
+      CreateTransitGatewayConnectResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayConnectResponse'
+            Prelude.<$> (x Data..@? "transitGatewayConnect")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTransitGatewayConnect where
+  hashWithSalt _salt CreateTransitGatewayConnect' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` transportTransitGatewayAttachmentId
+      `Prelude.hashWithSalt` options
+
+instance Prelude.NFData CreateTransitGatewayConnect where
+  rnf CreateTransitGatewayConnect' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transportTransitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf options
+
+instance Data.ToHeaders CreateTransitGatewayConnect where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTransitGatewayConnect where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTransitGatewayConnect where
+  toQuery CreateTransitGatewayConnect' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayConnect" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransportTransitGatewayAttachmentId"
+          Data.=: transportTransitGatewayAttachmentId,
+        "Options" Data.=: options
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayConnectResponse' smart constructor.
+data CreateTransitGatewayConnectResponse = CreateTransitGatewayConnectResponse'
+  { -- | Information about the Connect attachment.
+    transitGatewayConnect :: Prelude.Maybe TransitGatewayConnect,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayConnectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayConnect', 'createTransitGatewayConnectResponse_transitGatewayConnect' - Information about the Connect attachment.
+--
+-- 'httpStatus', 'createTransitGatewayConnectResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayConnectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayConnectResponse
+newCreateTransitGatewayConnectResponse pHttpStatus_ =
+  CreateTransitGatewayConnectResponse'
+    { transitGatewayConnect =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Connect attachment.
+createTransitGatewayConnectResponse_transitGatewayConnect :: Lens.Lens' CreateTransitGatewayConnectResponse (Prelude.Maybe TransitGatewayConnect)
+createTransitGatewayConnectResponse_transitGatewayConnect = Lens.lens (\CreateTransitGatewayConnectResponse' {transitGatewayConnect} -> transitGatewayConnect) (\s@CreateTransitGatewayConnectResponse' {} a -> s {transitGatewayConnect = a} :: CreateTransitGatewayConnectResponse)
+
+-- | The response's http status code.
+createTransitGatewayConnectResponse_httpStatus :: Lens.Lens' CreateTransitGatewayConnectResponse Prelude.Int
+createTransitGatewayConnectResponse_httpStatus = Lens.lens (\CreateTransitGatewayConnectResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayConnectResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayConnectResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayConnectResponse
+  where
+  rnf CreateTransitGatewayConnectResponse' {..} =
+    Prelude.rnf transitGatewayConnect
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayConnectPeer.hs b/gen/Amazonka/EC2/CreateTransitGatewayConnectPeer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayConnectPeer.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayConnectPeer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Connect peer for a specified transit gateway Connect
+-- attachment between a transit gateway and an appliance.
+--
+-- The peer address and transit gateway address must be the same IP address
+-- family (IPv4 or IPv6).
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/tgw/tgw-connect.html#tgw-connect-peer Connect peers>
+-- in the /Transit Gateways Guide/.
+module Amazonka.EC2.CreateTransitGatewayConnectPeer
+  ( -- * Creating a Request
+    CreateTransitGatewayConnectPeer (..),
+    newCreateTransitGatewayConnectPeer,
+
+    -- * Request Lenses
+    createTransitGatewayConnectPeer_bgpOptions,
+    createTransitGatewayConnectPeer_dryRun,
+    createTransitGatewayConnectPeer_tagSpecifications,
+    createTransitGatewayConnectPeer_transitGatewayAddress,
+    createTransitGatewayConnectPeer_transitGatewayAttachmentId,
+    createTransitGatewayConnectPeer_peerAddress,
+    createTransitGatewayConnectPeer_insideCidrBlocks,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayConnectPeerResponse (..),
+    newCreateTransitGatewayConnectPeerResponse,
+
+    -- * Response Lenses
+    createTransitGatewayConnectPeerResponse_transitGatewayConnectPeer,
+    createTransitGatewayConnectPeerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayConnectPeer' smart constructor.
+data CreateTransitGatewayConnectPeer = CreateTransitGatewayConnectPeer'
+  { -- | The BGP options for the Connect peer.
+    bgpOptions :: Prelude.Maybe TransitGatewayConnectRequestBgpOptions,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the Connect peer.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The peer IP address (GRE outer IP address) on the transit gateway side
+    -- of the Connect peer, which must be specified from a transit gateway CIDR
+    -- block. If not specified, Amazon automatically assigns the first
+    -- available IP address from the transit gateway CIDR block.
+    transitGatewayAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Connect attachment.
+    transitGatewayAttachmentId :: Prelude.Text,
+    -- | The peer IP address (GRE outer IP address) on the appliance side of the
+    -- Connect peer.
+    peerAddress :: Prelude.Text,
+    -- | The range of inside IP addresses that are used for BGP peering. You must
+    -- specify a size \/29 IPv4 CIDR block from the @169.254.0.0\/16@ range.
+    -- The first address from the range must be configured on the appliance as
+    -- the BGP IP address. You can also optionally specify a size \/125 IPv6
+    -- CIDR block from the @fd00::\/8@ range.
+    insideCidrBlocks :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayConnectPeer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bgpOptions', 'createTransitGatewayConnectPeer_bgpOptions' - The BGP options for the Connect peer.
+--
+-- 'dryRun', 'createTransitGatewayConnectPeer_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createTransitGatewayConnectPeer_tagSpecifications' - The tags to apply to the Connect peer.
+--
+-- 'transitGatewayAddress', 'createTransitGatewayConnectPeer_transitGatewayAddress' - The peer IP address (GRE outer IP address) on the transit gateway side
+-- of the Connect peer, which must be specified from a transit gateway CIDR
+-- block. If not specified, Amazon automatically assigns the first
+-- available IP address from the transit gateway CIDR block.
+--
+-- 'transitGatewayAttachmentId', 'createTransitGatewayConnectPeer_transitGatewayAttachmentId' - The ID of the Connect attachment.
+--
+-- 'peerAddress', 'createTransitGatewayConnectPeer_peerAddress' - The peer IP address (GRE outer IP address) on the appliance side of the
+-- Connect peer.
+--
+-- 'insideCidrBlocks', 'createTransitGatewayConnectPeer_insideCidrBlocks' - The range of inside IP addresses that are used for BGP peering. You must
+-- specify a size \/29 IPv4 CIDR block from the @169.254.0.0\/16@ range.
+-- The first address from the range must be configured on the appliance as
+-- the BGP IP address. You can also optionally specify a size \/125 IPv6
+-- CIDR block from the @fd00::\/8@ range.
+newCreateTransitGatewayConnectPeer ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  -- | 'peerAddress'
+  Prelude.Text ->
+  CreateTransitGatewayConnectPeer
+newCreateTransitGatewayConnectPeer
+  pTransitGatewayAttachmentId_
+  pPeerAddress_ =
+    CreateTransitGatewayConnectPeer'
+      { bgpOptions =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        transitGatewayAddress = Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_,
+        peerAddress = pPeerAddress_,
+        insideCidrBlocks = Prelude.mempty
+      }
+
+-- | The BGP options for the Connect peer.
+createTransitGatewayConnectPeer_bgpOptions :: Lens.Lens' CreateTransitGatewayConnectPeer (Prelude.Maybe TransitGatewayConnectRequestBgpOptions)
+createTransitGatewayConnectPeer_bgpOptions = Lens.lens (\CreateTransitGatewayConnectPeer' {bgpOptions} -> bgpOptions) (\s@CreateTransitGatewayConnectPeer' {} a -> s {bgpOptions = a} :: CreateTransitGatewayConnectPeer)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayConnectPeer_dryRun :: Lens.Lens' CreateTransitGatewayConnectPeer (Prelude.Maybe Prelude.Bool)
+createTransitGatewayConnectPeer_dryRun = Lens.lens (\CreateTransitGatewayConnectPeer' {dryRun} -> dryRun) (\s@CreateTransitGatewayConnectPeer' {} a -> s {dryRun = a} :: CreateTransitGatewayConnectPeer)
+
+-- | The tags to apply to the Connect peer.
+createTransitGatewayConnectPeer_tagSpecifications :: Lens.Lens' CreateTransitGatewayConnectPeer (Prelude.Maybe [TagSpecification])
+createTransitGatewayConnectPeer_tagSpecifications = Lens.lens (\CreateTransitGatewayConnectPeer' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayConnectPeer' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayConnectPeer) Prelude.. Lens.mapping Lens.coerced
+
+-- | The peer IP address (GRE outer IP address) on the transit gateway side
+-- of the Connect peer, which must be specified from a transit gateway CIDR
+-- block. If not specified, Amazon automatically assigns the first
+-- available IP address from the transit gateway CIDR block.
+createTransitGatewayConnectPeer_transitGatewayAddress :: Lens.Lens' CreateTransitGatewayConnectPeer (Prelude.Maybe Prelude.Text)
+createTransitGatewayConnectPeer_transitGatewayAddress = Lens.lens (\CreateTransitGatewayConnectPeer' {transitGatewayAddress} -> transitGatewayAddress) (\s@CreateTransitGatewayConnectPeer' {} a -> s {transitGatewayAddress = a} :: CreateTransitGatewayConnectPeer)
+
+-- | The ID of the Connect attachment.
+createTransitGatewayConnectPeer_transitGatewayAttachmentId :: Lens.Lens' CreateTransitGatewayConnectPeer Prelude.Text
+createTransitGatewayConnectPeer_transitGatewayAttachmentId = Lens.lens (\CreateTransitGatewayConnectPeer' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@CreateTransitGatewayConnectPeer' {} a -> s {transitGatewayAttachmentId = a} :: CreateTransitGatewayConnectPeer)
+
+-- | The peer IP address (GRE outer IP address) on the appliance side of the
+-- Connect peer.
+createTransitGatewayConnectPeer_peerAddress :: Lens.Lens' CreateTransitGatewayConnectPeer Prelude.Text
+createTransitGatewayConnectPeer_peerAddress = Lens.lens (\CreateTransitGatewayConnectPeer' {peerAddress} -> peerAddress) (\s@CreateTransitGatewayConnectPeer' {} a -> s {peerAddress = a} :: CreateTransitGatewayConnectPeer)
+
+-- | The range of inside IP addresses that are used for BGP peering. You must
+-- specify a size \/29 IPv4 CIDR block from the @169.254.0.0\/16@ range.
+-- The first address from the range must be configured on the appliance as
+-- the BGP IP address. You can also optionally specify a size \/125 IPv6
+-- CIDR block from the @fd00::\/8@ range.
+createTransitGatewayConnectPeer_insideCidrBlocks :: Lens.Lens' CreateTransitGatewayConnectPeer [Prelude.Text]
+createTransitGatewayConnectPeer_insideCidrBlocks = Lens.lens (\CreateTransitGatewayConnectPeer' {insideCidrBlocks} -> insideCidrBlocks) (\s@CreateTransitGatewayConnectPeer' {} a -> s {insideCidrBlocks = a} :: CreateTransitGatewayConnectPeer) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayConnectPeer
+  where
+  type
+    AWSResponse CreateTransitGatewayConnectPeer =
+      CreateTransitGatewayConnectPeerResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayConnectPeerResponse'
+            Prelude.<$> (x Data..@? "transitGatewayConnectPeer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayConnectPeer
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayConnectPeer' {..} =
+      _salt
+        `Prelude.hashWithSalt` bgpOptions
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayAddress
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` peerAddress
+        `Prelude.hashWithSalt` insideCidrBlocks
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayConnectPeer
+  where
+  rnf CreateTransitGatewayConnectPeer' {..} =
+    Prelude.rnf bgpOptions
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayAddress
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf peerAddress
+      `Prelude.seq` Prelude.rnf insideCidrBlocks
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayConnectPeer
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTransitGatewayConnectPeer where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTransitGatewayConnectPeer where
+  toQuery CreateTransitGatewayConnectPeer' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayConnectPeer" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "BgpOptions" Data.=: bgpOptions,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayAddress"
+          Data.=: transitGatewayAddress,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId,
+        "PeerAddress" Data.=: peerAddress,
+        Data.toQueryList "InsideCidrBlocks" insideCidrBlocks
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayConnectPeerResponse' smart constructor.
+data CreateTransitGatewayConnectPeerResponse = CreateTransitGatewayConnectPeerResponse'
+  { -- | Information about the Connect peer.
+    transitGatewayConnectPeer :: Prelude.Maybe TransitGatewayConnectPeer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayConnectPeerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayConnectPeer', 'createTransitGatewayConnectPeerResponse_transitGatewayConnectPeer' - Information about the Connect peer.
+--
+-- 'httpStatus', 'createTransitGatewayConnectPeerResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayConnectPeerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayConnectPeerResponse
+newCreateTransitGatewayConnectPeerResponse
+  pHttpStatus_ =
+    CreateTransitGatewayConnectPeerResponse'
+      { transitGatewayConnectPeer =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the Connect peer.
+createTransitGatewayConnectPeerResponse_transitGatewayConnectPeer :: Lens.Lens' CreateTransitGatewayConnectPeerResponse (Prelude.Maybe TransitGatewayConnectPeer)
+createTransitGatewayConnectPeerResponse_transitGatewayConnectPeer = Lens.lens (\CreateTransitGatewayConnectPeerResponse' {transitGatewayConnectPeer} -> transitGatewayConnectPeer) (\s@CreateTransitGatewayConnectPeerResponse' {} a -> s {transitGatewayConnectPeer = a} :: CreateTransitGatewayConnectPeerResponse)
+
+-- | The response's http status code.
+createTransitGatewayConnectPeerResponse_httpStatus :: Lens.Lens' CreateTransitGatewayConnectPeerResponse Prelude.Int
+createTransitGatewayConnectPeerResponse_httpStatus = Lens.lens (\CreateTransitGatewayConnectPeerResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayConnectPeerResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayConnectPeerResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayConnectPeerResponse
+  where
+  rnf CreateTransitGatewayConnectPeerResponse' {..} =
+    Prelude.rnf transitGatewayConnectPeer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayMulticastDomain.hs b/gen/Amazonka/EC2/CreateTransitGatewayMulticastDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayMulticastDomain.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayMulticastDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a multicast domain using the specified transit gateway.
+--
+-- The transit gateway must be in the available state before you create a
+-- domain. Use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTransitGateways.html DescribeTransitGateways>
+-- to see the state of transit gateway.
+module Amazonka.EC2.CreateTransitGatewayMulticastDomain
+  ( -- * Creating a Request
+    CreateTransitGatewayMulticastDomain (..),
+    newCreateTransitGatewayMulticastDomain,
+
+    -- * Request Lenses
+    createTransitGatewayMulticastDomain_dryRun,
+    createTransitGatewayMulticastDomain_options,
+    createTransitGatewayMulticastDomain_tagSpecifications,
+    createTransitGatewayMulticastDomain_transitGatewayId,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayMulticastDomainResponse (..),
+    newCreateTransitGatewayMulticastDomainResponse,
+
+    -- * Response Lenses
+    createTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain,
+    createTransitGatewayMulticastDomainResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayMulticastDomain' smart constructor.
+data CreateTransitGatewayMulticastDomain = CreateTransitGatewayMulticastDomain'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The options for the transit gateway multicast domain.
+    options :: Prelude.Maybe CreateTransitGatewayMulticastDomainRequestOptions,
+    -- | The tags for the transit gateway multicast domain.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayMulticastDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayMulticastDomain_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'createTransitGatewayMulticastDomain_options' - The options for the transit gateway multicast domain.
+--
+-- 'tagSpecifications', 'createTransitGatewayMulticastDomain_tagSpecifications' - The tags for the transit gateway multicast domain.
+--
+-- 'transitGatewayId', 'createTransitGatewayMulticastDomain_transitGatewayId' - The ID of the transit gateway.
+newCreateTransitGatewayMulticastDomain ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  CreateTransitGatewayMulticastDomain
+newCreateTransitGatewayMulticastDomain
+  pTransitGatewayId_ =
+    CreateTransitGatewayMulticastDomain'
+      { dryRun =
+          Prelude.Nothing,
+        options = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        transitGatewayId = pTransitGatewayId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayMulticastDomain_dryRun :: Lens.Lens' CreateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Bool)
+createTransitGatewayMulticastDomain_dryRun = Lens.lens (\CreateTransitGatewayMulticastDomain' {dryRun} -> dryRun) (\s@CreateTransitGatewayMulticastDomain' {} a -> s {dryRun = a} :: CreateTransitGatewayMulticastDomain)
+
+-- | The options for the transit gateway multicast domain.
+createTransitGatewayMulticastDomain_options :: Lens.Lens' CreateTransitGatewayMulticastDomain (Prelude.Maybe CreateTransitGatewayMulticastDomainRequestOptions)
+createTransitGatewayMulticastDomain_options = Lens.lens (\CreateTransitGatewayMulticastDomain' {options} -> options) (\s@CreateTransitGatewayMulticastDomain' {} a -> s {options = a} :: CreateTransitGatewayMulticastDomain)
+
+-- | The tags for the transit gateway multicast domain.
+createTransitGatewayMulticastDomain_tagSpecifications :: Lens.Lens' CreateTransitGatewayMulticastDomain (Prelude.Maybe [TagSpecification])
+createTransitGatewayMulticastDomain_tagSpecifications = Lens.lens (\CreateTransitGatewayMulticastDomain' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayMulticastDomain' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayMulticastDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+createTransitGatewayMulticastDomain_transitGatewayId :: Lens.Lens' CreateTransitGatewayMulticastDomain Prelude.Text
+createTransitGatewayMulticastDomain_transitGatewayId = Lens.lens (\CreateTransitGatewayMulticastDomain' {transitGatewayId} -> transitGatewayId) (\s@CreateTransitGatewayMulticastDomain' {} a -> s {transitGatewayId = a} :: CreateTransitGatewayMulticastDomain)
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayMulticastDomain
+  where
+  type
+    AWSResponse CreateTransitGatewayMulticastDomain =
+      CreateTransitGatewayMulticastDomainResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayMulticastDomainResponse'
+            Prelude.<$> (x Data..@? "transitGatewayMulticastDomain")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayMulticastDomain
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayMulticastDomain' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` options
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayId
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayMulticastDomain
+  where
+  rnf CreateTransitGatewayMulticastDomain' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayId
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayMulticastDomain
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateTransitGatewayMulticastDomain
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayMulticastDomain
+  where
+  toQuery CreateTransitGatewayMulticastDomain' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayMulticastDomain" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayId" Data.=: transitGatewayId
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayMulticastDomainResponse' smart constructor.
+data CreateTransitGatewayMulticastDomainResponse = CreateTransitGatewayMulticastDomainResponse'
+  { -- | Information about the transit gateway multicast domain.
+    transitGatewayMulticastDomain :: Prelude.Maybe TransitGatewayMulticastDomain,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayMulticastDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayMulticastDomain', 'createTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain' - Information about the transit gateway multicast domain.
+--
+-- 'httpStatus', 'createTransitGatewayMulticastDomainResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayMulticastDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayMulticastDomainResponse
+newCreateTransitGatewayMulticastDomainResponse
+  pHttpStatus_ =
+    CreateTransitGatewayMulticastDomainResponse'
+      { transitGatewayMulticastDomain =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the transit gateway multicast domain.
+createTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain :: Lens.Lens' CreateTransitGatewayMulticastDomainResponse (Prelude.Maybe TransitGatewayMulticastDomain)
+createTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain = Lens.lens (\CreateTransitGatewayMulticastDomainResponse' {transitGatewayMulticastDomain} -> transitGatewayMulticastDomain) (\s@CreateTransitGatewayMulticastDomainResponse' {} a -> s {transitGatewayMulticastDomain = a} :: CreateTransitGatewayMulticastDomainResponse)
+
+-- | The response's http status code.
+createTransitGatewayMulticastDomainResponse_httpStatus :: Lens.Lens' CreateTransitGatewayMulticastDomainResponse Prelude.Int
+createTransitGatewayMulticastDomainResponse_httpStatus = Lens.lens (\CreateTransitGatewayMulticastDomainResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayMulticastDomainResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayMulticastDomainResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayMulticastDomainResponse
+  where
+  rnf CreateTransitGatewayMulticastDomainResponse' {..} =
+    Prelude.rnf transitGatewayMulticastDomain
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayPeeringAttachment.hs b/gen/Amazonka/EC2/CreateTransitGatewayPeeringAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayPeeringAttachment.hs
@@ -0,0 +1,303 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayPeeringAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Requests a transit gateway peering attachment between the specified
+-- transit gateway (requester) and a peer transit gateway (accepter). The
+-- peer transit gateway can be in your account or a different Amazon Web
+-- Services account.
+--
+-- After you create the peering attachment, the owner of the accepter
+-- transit gateway must accept the attachment request.
+module Amazonka.EC2.CreateTransitGatewayPeeringAttachment
+  ( -- * Creating a Request
+    CreateTransitGatewayPeeringAttachment (..),
+    newCreateTransitGatewayPeeringAttachment,
+
+    -- * Request Lenses
+    createTransitGatewayPeeringAttachment_dryRun,
+    createTransitGatewayPeeringAttachment_options,
+    createTransitGatewayPeeringAttachment_tagSpecifications,
+    createTransitGatewayPeeringAttachment_transitGatewayId,
+    createTransitGatewayPeeringAttachment_peerTransitGatewayId,
+    createTransitGatewayPeeringAttachment_peerAccountId,
+    createTransitGatewayPeeringAttachment_peerRegion,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayPeeringAttachmentResponse (..),
+    newCreateTransitGatewayPeeringAttachmentResponse,
+
+    -- * Response Lenses
+    createTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    createTransitGatewayPeeringAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayPeeringAttachment' smart constructor.
+data CreateTransitGatewayPeeringAttachment = CreateTransitGatewayPeeringAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Requests a transit gateway peering attachment.
+    options :: Prelude.Maybe CreateTransitGatewayPeeringAttachmentRequestOptions,
+    -- | The tags to apply to the transit gateway peering attachment.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Text,
+    -- | The ID of the peer transit gateway with which to create the peering
+    -- attachment.
+    peerTransitGatewayId :: Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the peer transit
+    -- gateway.
+    peerAccountId :: Prelude.Text,
+    -- | The Region where the peer transit gateway is located.
+    peerRegion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPeeringAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayPeeringAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'createTransitGatewayPeeringAttachment_options' - Requests a transit gateway peering attachment.
+--
+-- 'tagSpecifications', 'createTransitGatewayPeeringAttachment_tagSpecifications' - The tags to apply to the transit gateway peering attachment.
+--
+-- 'transitGatewayId', 'createTransitGatewayPeeringAttachment_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'peerTransitGatewayId', 'createTransitGatewayPeeringAttachment_peerTransitGatewayId' - The ID of the peer transit gateway with which to create the peering
+-- attachment.
+--
+-- 'peerAccountId', 'createTransitGatewayPeeringAttachment_peerAccountId' - The ID of the Amazon Web Services account that owns the peer transit
+-- gateway.
+--
+-- 'peerRegion', 'createTransitGatewayPeeringAttachment_peerRegion' - The Region where the peer transit gateway is located.
+newCreateTransitGatewayPeeringAttachment ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  -- | 'peerTransitGatewayId'
+  Prelude.Text ->
+  -- | 'peerAccountId'
+  Prelude.Text ->
+  -- | 'peerRegion'
+  Prelude.Text ->
+  CreateTransitGatewayPeeringAttachment
+newCreateTransitGatewayPeeringAttachment
+  pTransitGatewayId_
+  pPeerTransitGatewayId_
+  pPeerAccountId_
+  pPeerRegion_ =
+    CreateTransitGatewayPeeringAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        options = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        transitGatewayId =
+          pTransitGatewayId_,
+        peerTransitGatewayId =
+          pPeerTransitGatewayId_,
+        peerAccountId = pPeerAccountId_,
+        peerRegion = pPeerRegion_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayPeeringAttachment_dryRun :: Lens.Lens' CreateTransitGatewayPeeringAttachment (Prelude.Maybe Prelude.Bool)
+createTransitGatewayPeeringAttachment_dryRun = Lens.lens (\CreateTransitGatewayPeeringAttachment' {dryRun} -> dryRun) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {dryRun = a} :: CreateTransitGatewayPeeringAttachment)
+
+-- | Requests a transit gateway peering attachment.
+createTransitGatewayPeeringAttachment_options :: Lens.Lens' CreateTransitGatewayPeeringAttachment (Prelude.Maybe CreateTransitGatewayPeeringAttachmentRequestOptions)
+createTransitGatewayPeeringAttachment_options = Lens.lens (\CreateTransitGatewayPeeringAttachment' {options} -> options) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {options = a} :: CreateTransitGatewayPeeringAttachment)
+
+-- | The tags to apply to the transit gateway peering attachment.
+createTransitGatewayPeeringAttachment_tagSpecifications :: Lens.Lens' CreateTransitGatewayPeeringAttachment (Prelude.Maybe [TagSpecification])
+createTransitGatewayPeeringAttachment_tagSpecifications = Lens.lens (\CreateTransitGatewayPeeringAttachment' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayPeeringAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+createTransitGatewayPeeringAttachment_transitGatewayId :: Lens.Lens' CreateTransitGatewayPeeringAttachment Prelude.Text
+createTransitGatewayPeeringAttachment_transitGatewayId = Lens.lens (\CreateTransitGatewayPeeringAttachment' {transitGatewayId} -> transitGatewayId) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {transitGatewayId = a} :: CreateTransitGatewayPeeringAttachment)
+
+-- | The ID of the peer transit gateway with which to create the peering
+-- attachment.
+createTransitGatewayPeeringAttachment_peerTransitGatewayId :: Lens.Lens' CreateTransitGatewayPeeringAttachment Prelude.Text
+createTransitGatewayPeeringAttachment_peerTransitGatewayId = Lens.lens (\CreateTransitGatewayPeeringAttachment' {peerTransitGatewayId} -> peerTransitGatewayId) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {peerTransitGatewayId = a} :: CreateTransitGatewayPeeringAttachment)
+
+-- | The ID of the Amazon Web Services account that owns the peer transit
+-- gateway.
+createTransitGatewayPeeringAttachment_peerAccountId :: Lens.Lens' CreateTransitGatewayPeeringAttachment Prelude.Text
+createTransitGatewayPeeringAttachment_peerAccountId = Lens.lens (\CreateTransitGatewayPeeringAttachment' {peerAccountId} -> peerAccountId) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {peerAccountId = a} :: CreateTransitGatewayPeeringAttachment)
+
+-- | The Region where the peer transit gateway is located.
+createTransitGatewayPeeringAttachment_peerRegion :: Lens.Lens' CreateTransitGatewayPeeringAttachment Prelude.Text
+createTransitGatewayPeeringAttachment_peerRegion = Lens.lens (\CreateTransitGatewayPeeringAttachment' {peerRegion} -> peerRegion) (\s@CreateTransitGatewayPeeringAttachment' {} a -> s {peerRegion = a} :: CreateTransitGatewayPeeringAttachment)
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayPeeringAttachment
+  where
+  type
+    AWSResponse
+      CreateTransitGatewayPeeringAttachment =
+      CreateTransitGatewayPeeringAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayPeeringAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPeeringAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayPeeringAttachment
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayPeeringAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` options
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayId
+        `Prelude.hashWithSalt` peerTransitGatewayId
+        `Prelude.hashWithSalt` peerAccountId
+        `Prelude.hashWithSalt` peerRegion
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPeeringAttachment
+  where
+  rnf CreateTransitGatewayPeeringAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf peerTransitGatewayId
+      `Prelude.seq` Prelude.rnf peerAccountId
+      `Prelude.seq` Prelude.rnf peerRegion
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayPeeringAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateTransitGatewayPeeringAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayPeeringAttachment
+  where
+  toQuery CreateTransitGatewayPeeringAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayPeeringAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayId" Data.=: transitGatewayId,
+        "PeerTransitGatewayId" Data.=: peerTransitGatewayId,
+        "PeerAccountId" Data.=: peerAccountId,
+        "PeerRegion" Data.=: peerRegion
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayPeeringAttachmentResponse' smart constructor.
+data CreateTransitGatewayPeeringAttachmentResponse = CreateTransitGatewayPeeringAttachmentResponse'
+  { -- | The transit gateway peering attachment.
+    transitGatewayPeeringAttachment :: Prelude.Maybe TransitGatewayPeeringAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPeeringAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPeeringAttachment', 'createTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment' - The transit gateway peering attachment.
+--
+-- 'httpStatus', 'createTransitGatewayPeeringAttachmentResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayPeeringAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayPeeringAttachmentResponse
+newCreateTransitGatewayPeeringAttachmentResponse
+  pHttpStatus_ =
+    CreateTransitGatewayPeeringAttachmentResponse'
+      { transitGatewayPeeringAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The transit gateway peering attachment.
+createTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment :: Lens.Lens' CreateTransitGatewayPeeringAttachmentResponse (Prelude.Maybe TransitGatewayPeeringAttachment)
+createTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment = Lens.lens (\CreateTransitGatewayPeeringAttachmentResponse' {transitGatewayPeeringAttachment} -> transitGatewayPeeringAttachment) (\s@CreateTransitGatewayPeeringAttachmentResponse' {} a -> s {transitGatewayPeeringAttachment = a} :: CreateTransitGatewayPeeringAttachmentResponse)
+
+-- | The response's http status code.
+createTransitGatewayPeeringAttachmentResponse_httpStatus :: Lens.Lens' CreateTransitGatewayPeeringAttachmentResponse Prelude.Int
+createTransitGatewayPeeringAttachmentResponse_httpStatus = Lens.lens (\CreateTransitGatewayPeeringAttachmentResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayPeeringAttachmentResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayPeeringAttachmentResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPeeringAttachmentResponse
+  where
+  rnf
+    CreateTransitGatewayPeeringAttachmentResponse' {..} =
+      Prelude.rnf transitGatewayPeeringAttachment
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayPolicyTable.hs b/gen/Amazonka/EC2/CreateTransitGatewayPolicyTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayPolicyTable.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayPolicyTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a transit gateway policy table.
+module Amazonka.EC2.CreateTransitGatewayPolicyTable
+  ( -- * Creating a Request
+    CreateTransitGatewayPolicyTable (..),
+    newCreateTransitGatewayPolicyTable,
+
+    -- * Request Lenses
+    createTransitGatewayPolicyTable_dryRun,
+    createTransitGatewayPolicyTable_tagSpecifications,
+    createTransitGatewayPolicyTable_transitGatewayId,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayPolicyTableResponse (..),
+    newCreateTransitGatewayPolicyTableResponse,
+
+    -- * Response Lenses
+    createTransitGatewayPolicyTableResponse_transitGatewayPolicyTable,
+    createTransitGatewayPolicyTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayPolicyTable' smart constructor.
+data CreateTransitGatewayPolicyTable = CreateTransitGatewayPolicyTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags specification for the transit gateway policy table created
+    -- during the request.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway used for the policy table.
+    transitGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPolicyTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayPolicyTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createTransitGatewayPolicyTable_tagSpecifications' - The tags specification for the transit gateway policy table created
+-- during the request.
+--
+-- 'transitGatewayId', 'createTransitGatewayPolicyTable_transitGatewayId' - The ID of the transit gateway used for the policy table.
+newCreateTransitGatewayPolicyTable ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  CreateTransitGatewayPolicyTable
+newCreateTransitGatewayPolicyTable pTransitGatewayId_ =
+  CreateTransitGatewayPolicyTable'
+    { dryRun =
+        Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      transitGatewayId = pTransitGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayPolicyTable_dryRun :: Lens.Lens' CreateTransitGatewayPolicyTable (Prelude.Maybe Prelude.Bool)
+createTransitGatewayPolicyTable_dryRun = Lens.lens (\CreateTransitGatewayPolicyTable' {dryRun} -> dryRun) (\s@CreateTransitGatewayPolicyTable' {} a -> s {dryRun = a} :: CreateTransitGatewayPolicyTable)
+
+-- | The tags specification for the transit gateway policy table created
+-- during the request.
+createTransitGatewayPolicyTable_tagSpecifications :: Lens.Lens' CreateTransitGatewayPolicyTable (Prelude.Maybe [TagSpecification])
+createTransitGatewayPolicyTable_tagSpecifications = Lens.lens (\CreateTransitGatewayPolicyTable' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayPolicyTable' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayPolicyTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway used for the policy table.
+createTransitGatewayPolicyTable_transitGatewayId :: Lens.Lens' CreateTransitGatewayPolicyTable Prelude.Text
+createTransitGatewayPolicyTable_transitGatewayId = Lens.lens (\CreateTransitGatewayPolicyTable' {transitGatewayId} -> transitGatewayId) (\s@CreateTransitGatewayPolicyTable' {} a -> s {transitGatewayId = a} :: CreateTransitGatewayPolicyTable)
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayPolicyTable
+  where
+  type
+    AWSResponse CreateTransitGatewayPolicyTable =
+      CreateTransitGatewayPolicyTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayPolicyTableResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPolicyTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayPolicyTable
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayPolicyTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayId
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPolicyTable
+  where
+  rnf CreateTransitGatewayPolicyTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayId
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayPolicyTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTransitGatewayPolicyTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTransitGatewayPolicyTable where
+  toQuery CreateTransitGatewayPolicyTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayPolicyTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecifications"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayId" Data.=: transitGatewayId
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayPolicyTableResponse' smart constructor.
+data CreateTransitGatewayPolicyTableResponse = CreateTransitGatewayPolicyTableResponse'
+  { -- | Describes the created transit gateway policy table.
+    transitGatewayPolicyTable :: Prelude.Maybe TransitGatewayPolicyTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPolicyTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPolicyTable', 'createTransitGatewayPolicyTableResponse_transitGatewayPolicyTable' - Describes the created transit gateway policy table.
+--
+-- 'httpStatus', 'createTransitGatewayPolicyTableResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayPolicyTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayPolicyTableResponse
+newCreateTransitGatewayPolicyTableResponse
+  pHttpStatus_ =
+    CreateTransitGatewayPolicyTableResponse'
+      { transitGatewayPolicyTable =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Describes the created transit gateway policy table.
+createTransitGatewayPolicyTableResponse_transitGatewayPolicyTable :: Lens.Lens' CreateTransitGatewayPolicyTableResponse (Prelude.Maybe TransitGatewayPolicyTable)
+createTransitGatewayPolicyTableResponse_transitGatewayPolicyTable = Lens.lens (\CreateTransitGatewayPolicyTableResponse' {transitGatewayPolicyTable} -> transitGatewayPolicyTable) (\s@CreateTransitGatewayPolicyTableResponse' {} a -> s {transitGatewayPolicyTable = a} :: CreateTransitGatewayPolicyTableResponse)
+
+-- | The response's http status code.
+createTransitGatewayPolicyTableResponse_httpStatus :: Lens.Lens' CreateTransitGatewayPolicyTableResponse Prelude.Int
+createTransitGatewayPolicyTableResponse_httpStatus = Lens.lens (\CreateTransitGatewayPolicyTableResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayPolicyTableResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayPolicyTableResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPolicyTableResponse
+  where
+  rnf CreateTransitGatewayPolicyTableResponse' {..} =
+    Prelude.rnf transitGatewayPolicyTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayPrefixListReference.hs b/gen/Amazonka/EC2/CreateTransitGatewayPrefixListReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayPrefixListReference.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayPrefixListReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a reference (route) to a prefix list in a specified transit
+-- gateway route table.
+module Amazonka.EC2.CreateTransitGatewayPrefixListReference
+  ( -- * Creating a Request
+    CreateTransitGatewayPrefixListReference (..),
+    newCreateTransitGatewayPrefixListReference,
+
+    -- * Request Lenses
+    createTransitGatewayPrefixListReference_blackhole,
+    createTransitGatewayPrefixListReference_dryRun,
+    createTransitGatewayPrefixListReference_transitGatewayAttachmentId,
+    createTransitGatewayPrefixListReference_transitGatewayRouteTableId,
+    createTransitGatewayPrefixListReference_prefixListId,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayPrefixListReferenceResponse (..),
+    newCreateTransitGatewayPrefixListReferenceResponse,
+
+    -- * Response Lenses
+    createTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference,
+    createTransitGatewayPrefixListReferenceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayPrefixListReference' smart constructor.
+data CreateTransitGatewayPrefixListReference = CreateTransitGatewayPrefixListReference'
+  { -- | Indicates whether to drop traffic that matches this route.
+    blackhole :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment to which traffic is routed.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the prefix list that is used for destination matches.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPrefixListReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blackhole', 'createTransitGatewayPrefixListReference_blackhole' - Indicates whether to drop traffic that matches this route.
+--
+-- 'dryRun', 'createTransitGatewayPrefixListReference_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'createTransitGatewayPrefixListReference_transitGatewayAttachmentId' - The ID of the attachment to which traffic is routed.
+--
+-- 'transitGatewayRouteTableId', 'createTransitGatewayPrefixListReference_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'prefixListId', 'createTransitGatewayPrefixListReference_prefixListId' - The ID of the prefix list that is used for destination matches.
+newCreateTransitGatewayPrefixListReference ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'prefixListId'
+  Prelude.Text ->
+  CreateTransitGatewayPrefixListReference
+newCreateTransitGatewayPrefixListReference
+  pTransitGatewayRouteTableId_
+  pPrefixListId_ =
+    CreateTransitGatewayPrefixListReference'
+      { blackhole =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        transitGatewayAttachmentId =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        prefixListId = pPrefixListId_
+      }
+
+-- | Indicates whether to drop traffic that matches this route.
+createTransitGatewayPrefixListReference_blackhole :: Lens.Lens' CreateTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Bool)
+createTransitGatewayPrefixListReference_blackhole = Lens.lens (\CreateTransitGatewayPrefixListReference' {blackhole} -> blackhole) (\s@CreateTransitGatewayPrefixListReference' {} a -> s {blackhole = a} :: CreateTransitGatewayPrefixListReference)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayPrefixListReference_dryRun :: Lens.Lens' CreateTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Bool)
+createTransitGatewayPrefixListReference_dryRun = Lens.lens (\CreateTransitGatewayPrefixListReference' {dryRun} -> dryRun) (\s@CreateTransitGatewayPrefixListReference' {} a -> s {dryRun = a} :: CreateTransitGatewayPrefixListReference)
+
+-- | The ID of the attachment to which traffic is routed.
+createTransitGatewayPrefixListReference_transitGatewayAttachmentId :: Lens.Lens' CreateTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Text)
+createTransitGatewayPrefixListReference_transitGatewayAttachmentId = Lens.lens (\CreateTransitGatewayPrefixListReference' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@CreateTransitGatewayPrefixListReference' {} a -> s {transitGatewayAttachmentId = a} :: CreateTransitGatewayPrefixListReference)
+
+-- | The ID of the transit gateway route table.
+createTransitGatewayPrefixListReference_transitGatewayRouteTableId :: Lens.Lens' CreateTransitGatewayPrefixListReference Prelude.Text
+createTransitGatewayPrefixListReference_transitGatewayRouteTableId = Lens.lens (\CreateTransitGatewayPrefixListReference' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@CreateTransitGatewayPrefixListReference' {} a -> s {transitGatewayRouteTableId = a} :: CreateTransitGatewayPrefixListReference)
+
+-- | The ID of the prefix list that is used for destination matches.
+createTransitGatewayPrefixListReference_prefixListId :: Lens.Lens' CreateTransitGatewayPrefixListReference Prelude.Text
+createTransitGatewayPrefixListReference_prefixListId = Lens.lens (\CreateTransitGatewayPrefixListReference' {prefixListId} -> prefixListId) (\s@CreateTransitGatewayPrefixListReference' {} a -> s {prefixListId = a} :: CreateTransitGatewayPrefixListReference)
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayPrefixListReference
+  where
+  type
+    AWSResponse
+      CreateTransitGatewayPrefixListReference =
+      CreateTransitGatewayPrefixListReferenceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayPrefixListReferenceResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPrefixListReference")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayPrefixListReference
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayPrefixListReference' {..} =
+      _salt
+        `Prelude.hashWithSalt` blackhole
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+        `Prelude.hashWithSalt` prefixListId
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPrefixListReference
+  where
+  rnf CreateTransitGatewayPrefixListReference' {..} =
+    Prelude.rnf blackhole
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayPrefixListReference
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateTransitGatewayPrefixListReference
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayPrefixListReference
+  where
+  toQuery CreateTransitGatewayPrefixListReference' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayPrefixListReference" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Blackhole" Data.=: blackhole,
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayPrefixListReferenceResponse' smart constructor.
+data CreateTransitGatewayPrefixListReferenceResponse = CreateTransitGatewayPrefixListReferenceResponse'
+  { -- | Information about the prefix list reference.
+    transitGatewayPrefixListReference :: Prelude.Maybe TransitGatewayPrefixListReference,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPrefixListReferenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPrefixListReference', 'createTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference' - Information about the prefix list reference.
+--
+-- 'httpStatus', 'createTransitGatewayPrefixListReferenceResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayPrefixListReferenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayPrefixListReferenceResponse
+newCreateTransitGatewayPrefixListReferenceResponse
+  pHttpStatus_ =
+    CreateTransitGatewayPrefixListReferenceResponse'
+      { transitGatewayPrefixListReference =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the prefix list reference.
+createTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference :: Lens.Lens' CreateTransitGatewayPrefixListReferenceResponse (Prelude.Maybe TransitGatewayPrefixListReference)
+createTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference = Lens.lens (\CreateTransitGatewayPrefixListReferenceResponse' {transitGatewayPrefixListReference} -> transitGatewayPrefixListReference) (\s@CreateTransitGatewayPrefixListReferenceResponse' {} a -> s {transitGatewayPrefixListReference = a} :: CreateTransitGatewayPrefixListReferenceResponse)
+
+-- | The response's http status code.
+createTransitGatewayPrefixListReferenceResponse_httpStatus :: Lens.Lens' CreateTransitGatewayPrefixListReferenceResponse Prelude.Int
+createTransitGatewayPrefixListReferenceResponse_httpStatus = Lens.lens (\CreateTransitGatewayPrefixListReferenceResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayPrefixListReferenceResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayPrefixListReferenceResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPrefixListReferenceResponse
+  where
+  rnf
+    CreateTransitGatewayPrefixListReferenceResponse' {..} =
+      Prelude.rnf transitGatewayPrefixListReference
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayRoute.hs b/gen/Amazonka/EC2/CreateTransitGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayRoute.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a static route for the specified transit gateway route table.
+module Amazonka.EC2.CreateTransitGatewayRoute
+  ( -- * Creating a Request
+    CreateTransitGatewayRoute (..),
+    newCreateTransitGatewayRoute,
+
+    -- * Request Lenses
+    createTransitGatewayRoute_blackhole,
+    createTransitGatewayRoute_dryRun,
+    createTransitGatewayRoute_transitGatewayAttachmentId,
+    createTransitGatewayRoute_destinationCidrBlock,
+    createTransitGatewayRoute_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayRouteResponse (..),
+    newCreateTransitGatewayRouteResponse,
+
+    -- * Response Lenses
+    createTransitGatewayRouteResponse_route,
+    createTransitGatewayRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayRoute' smart constructor.
+data CreateTransitGatewayRoute = CreateTransitGatewayRoute'
+  { -- | Indicates whether to drop traffic that matches this route.
+    blackhole :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR range used for destination matches. Routing decisions are based
+    -- on the most specific match.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blackhole', 'createTransitGatewayRoute_blackhole' - Indicates whether to drop traffic that matches this route.
+--
+-- 'dryRun', 'createTransitGatewayRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'createTransitGatewayRoute_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'destinationCidrBlock', 'createTransitGatewayRoute_destinationCidrBlock' - The CIDR range used for destination matches. Routing decisions are based
+-- on the most specific match.
+--
+-- 'transitGatewayRouteTableId', 'createTransitGatewayRoute_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newCreateTransitGatewayRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  CreateTransitGatewayRoute
+newCreateTransitGatewayRoute
+  pDestinationCidrBlock_
+  pTransitGatewayRouteTableId_ =
+    CreateTransitGatewayRoute'
+      { blackhole =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        transitGatewayAttachmentId = Prelude.Nothing,
+        destinationCidrBlock = pDestinationCidrBlock_,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Indicates whether to drop traffic that matches this route.
+createTransitGatewayRoute_blackhole :: Lens.Lens' CreateTransitGatewayRoute (Prelude.Maybe Prelude.Bool)
+createTransitGatewayRoute_blackhole = Lens.lens (\CreateTransitGatewayRoute' {blackhole} -> blackhole) (\s@CreateTransitGatewayRoute' {} a -> s {blackhole = a} :: CreateTransitGatewayRoute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayRoute_dryRun :: Lens.Lens' CreateTransitGatewayRoute (Prelude.Maybe Prelude.Bool)
+createTransitGatewayRoute_dryRun = Lens.lens (\CreateTransitGatewayRoute' {dryRun} -> dryRun) (\s@CreateTransitGatewayRoute' {} a -> s {dryRun = a} :: CreateTransitGatewayRoute)
+
+-- | The ID of the attachment.
+createTransitGatewayRoute_transitGatewayAttachmentId :: Lens.Lens' CreateTransitGatewayRoute (Prelude.Maybe Prelude.Text)
+createTransitGatewayRoute_transitGatewayAttachmentId = Lens.lens (\CreateTransitGatewayRoute' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@CreateTransitGatewayRoute' {} a -> s {transitGatewayAttachmentId = a} :: CreateTransitGatewayRoute)
+
+-- | The CIDR range used for destination matches. Routing decisions are based
+-- on the most specific match.
+createTransitGatewayRoute_destinationCidrBlock :: Lens.Lens' CreateTransitGatewayRoute Prelude.Text
+createTransitGatewayRoute_destinationCidrBlock = Lens.lens (\CreateTransitGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@CreateTransitGatewayRoute' {} a -> s {destinationCidrBlock = a} :: CreateTransitGatewayRoute)
+
+-- | The ID of the transit gateway route table.
+createTransitGatewayRoute_transitGatewayRouteTableId :: Lens.Lens' CreateTransitGatewayRoute Prelude.Text
+createTransitGatewayRoute_transitGatewayRouteTableId = Lens.lens (\CreateTransitGatewayRoute' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@CreateTransitGatewayRoute' {} a -> s {transitGatewayRouteTableId = a} :: CreateTransitGatewayRoute)
+
+instance Core.AWSRequest CreateTransitGatewayRoute where
+  type
+    AWSResponse CreateTransitGatewayRoute =
+      CreateTransitGatewayRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayRouteResponse'
+            Prelude.<$> (x Data..@? "route")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTransitGatewayRoute where
+  hashWithSalt _salt CreateTransitGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` blackhole
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance Prelude.NFData CreateTransitGatewayRoute where
+  rnf CreateTransitGatewayRoute' {..} =
+    Prelude.rnf blackhole
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance Data.ToHeaders CreateTransitGatewayRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTransitGatewayRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTransitGatewayRoute where
+  toQuery CreateTransitGatewayRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateTransitGatewayRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Blackhole" Data.=: blackhole,
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayRouteResponse' smart constructor.
+data CreateTransitGatewayRouteResponse = CreateTransitGatewayRouteResponse'
+  { -- | Information about the route.
+    route :: Prelude.Maybe TransitGatewayRoute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'route', 'createTransitGatewayRouteResponse_route' - Information about the route.
+--
+-- 'httpStatus', 'createTransitGatewayRouteResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayRouteResponse
+newCreateTransitGatewayRouteResponse pHttpStatus_ =
+  CreateTransitGatewayRouteResponse'
+    { route =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the route.
+createTransitGatewayRouteResponse_route :: Lens.Lens' CreateTransitGatewayRouteResponse (Prelude.Maybe TransitGatewayRoute)
+createTransitGatewayRouteResponse_route = Lens.lens (\CreateTransitGatewayRouteResponse' {route} -> route) (\s@CreateTransitGatewayRouteResponse' {} a -> s {route = a} :: CreateTransitGatewayRouteResponse)
+
+-- | The response's http status code.
+createTransitGatewayRouteResponse_httpStatus :: Lens.Lens' CreateTransitGatewayRouteResponse Prelude.Int
+createTransitGatewayRouteResponse_httpStatus = Lens.lens (\CreateTransitGatewayRouteResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayRouteResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayRouteResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayRouteResponse
+  where
+  rnf CreateTransitGatewayRouteResponse' {..} =
+    Prelude.rnf route
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayRouteTable.hs b/gen/Amazonka/EC2/CreateTransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayRouteTable.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a route table for the specified transit gateway.
+module Amazonka.EC2.CreateTransitGatewayRouteTable
+  ( -- * Creating a Request
+    CreateTransitGatewayRouteTable (..),
+    newCreateTransitGatewayRouteTable,
+
+    -- * Request Lenses
+    createTransitGatewayRouteTable_dryRun,
+    createTransitGatewayRouteTable_tagSpecifications,
+    createTransitGatewayRouteTable_transitGatewayId,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayRouteTableResponse (..),
+    newCreateTransitGatewayRouteTableResponse,
+
+    -- * Response Lenses
+    createTransitGatewayRouteTableResponse_transitGatewayRouteTable,
+    createTransitGatewayRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayRouteTable' smart constructor.
+data CreateTransitGatewayRouteTable = CreateTransitGatewayRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the transit gateway route table.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createTransitGatewayRouteTable_tagSpecifications' - The tags to apply to the transit gateway route table.
+--
+-- 'transitGatewayId', 'createTransitGatewayRouteTable_transitGatewayId' - The ID of the transit gateway.
+newCreateTransitGatewayRouteTable ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  CreateTransitGatewayRouteTable
+newCreateTransitGatewayRouteTable pTransitGatewayId_ =
+  CreateTransitGatewayRouteTable'
+    { dryRun =
+        Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      transitGatewayId = pTransitGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayRouteTable_dryRun :: Lens.Lens' CreateTransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+createTransitGatewayRouteTable_dryRun = Lens.lens (\CreateTransitGatewayRouteTable' {dryRun} -> dryRun) (\s@CreateTransitGatewayRouteTable' {} a -> s {dryRun = a} :: CreateTransitGatewayRouteTable)
+
+-- | The tags to apply to the transit gateway route table.
+createTransitGatewayRouteTable_tagSpecifications :: Lens.Lens' CreateTransitGatewayRouteTable (Prelude.Maybe [TagSpecification])
+createTransitGatewayRouteTable_tagSpecifications = Lens.lens (\CreateTransitGatewayRouteTable' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayRouteTable' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayRouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+createTransitGatewayRouteTable_transitGatewayId :: Lens.Lens' CreateTransitGatewayRouteTable Prelude.Text
+createTransitGatewayRouteTable_transitGatewayId = Lens.lens (\CreateTransitGatewayRouteTable' {transitGatewayId} -> transitGatewayId) (\s@CreateTransitGatewayRouteTable' {} a -> s {transitGatewayId = a} :: CreateTransitGatewayRouteTable)
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayRouteTable
+  where
+  type
+    AWSResponse CreateTransitGatewayRouteTable =
+      CreateTransitGatewayRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayRouteTableResponse'
+            Prelude.<$> (x Data..@? "transitGatewayRouteTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayRouteTable
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayRouteTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayId
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayRouteTable
+  where
+  rnf CreateTransitGatewayRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayId
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayRouteTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateTransitGatewayRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateTransitGatewayRouteTable where
+  toQuery CreateTransitGatewayRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayRouteTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecifications"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayId" Data.=: transitGatewayId
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayRouteTableResponse' smart constructor.
+data CreateTransitGatewayRouteTableResponse = CreateTransitGatewayRouteTableResponse'
+  { -- | Information about the transit gateway route table.
+    transitGatewayRouteTable :: Prelude.Maybe TransitGatewayRouteTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayRouteTable', 'createTransitGatewayRouteTableResponse_transitGatewayRouteTable' - Information about the transit gateway route table.
+--
+-- 'httpStatus', 'createTransitGatewayRouteTableResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayRouteTableResponse
+newCreateTransitGatewayRouteTableResponse
+  pHttpStatus_ =
+    CreateTransitGatewayRouteTableResponse'
+      { transitGatewayRouteTable =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the transit gateway route table.
+createTransitGatewayRouteTableResponse_transitGatewayRouteTable :: Lens.Lens' CreateTransitGatewayRouteTableResponse (Prelude.Maybe TransitGatewayRouteTable)
+createTransitGatewayRouteTableResponse_transitGatewayRouteTable = Lens.lens (\CreateTransitGatewayRouteTableResponse' {transitGatewayRouteTable} -> transitGatewayRouteTable) (\s@CreateTransitGatewayRouteTableResponse' {} a -> s {transitGatewayRouteTable = a} :: CreateTransitGatewayRouteTableResponse)
+
+-- | The response's http status code.
+createTransitGatewayRouteTableResponse_httpStatus :: Lens.Lens' CreateTransitGatewayRouteTableResponse Prelude.Int
+createTransitGatewayRouteTableResponse_httpStatus = Lens.lens (\CreateTransitGatewayRouteTableResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayRouteTableResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayRouteTableResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayRouteTableResponse
+  where
+  rnf CreateTransitGatewayRouteTableResponse' {..} =
+    Prelude.rnf transitGatewayRouteTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayRouteTableAnnouncement.hs b/gen/Amazonka/EC2/CreateTransitGatewayRouteTableAnnouncement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayRouteTableAnnouncement.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayRouteTableAnnouncement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Advertises a new transit gateway route table.
+module Amazonka.EC2.CreateTransitGatewayRouteTableAnnouncement
+  ( -- * Creating a Request
+    CreateTransitGatewayRouteTableAnnouncement (..),
+    newCreateTransitGatewayRouteTableAnnouncement,
+
+    -- * Request Lenses
+    createTransitGatewayRouteTableAnnouncement_dryRun,
+    createTransitGatewayRouteTableAnnouncement_tagSpecifications,
+    createTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableId,
+    createTransitGatewayRouteTableAnnouncement_peeringAttachmentId,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayRouteTableAnnouncementResponse (..),
+    newCreateTransitGatewayRouteTableAnnouncementResponse,
+
+    -- * Response Lenses
+    createTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement,
+    createTransitGatewayRouteTableAnnouncementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayRouteTableAnnouncement' smart constructor.
+data CreateTransitGatewayRouteTableAnnouncement = CreateTransitGatewayRouteTableAnnouncement'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags specifications applied to the transit gateway route table
+    -- announcement.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the peering attachment.
+    peeringAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayRouteTableAnnouncement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayRouteTableAnnouncement_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createTransitGatewayRouteTableAnnouncement_tagSpecifications' - The tags specifications applied to the transit gateway route table
+-- announcement.
+--
+-- 'transitGatewayRouteTableId', 'createTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'peeringAttachmentId', 'createTransitGatewayRouteTableAnnouncement_peeringAttachmentId' - The ID of the peering attachment.
+newCreateTransitGatewayRouteTableAnnouncement ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'peeringAttachmentId'
+  Prelude.Text ->
+  CreateTransitGatewayRouteTableAnnouncement
+newCreateTransitGatewayRouteTableAnnouncement
+  pTransitGatewayRouteTableId_
+  pPeeringAttachmentId_ =
+    CreateTransitGatewayRouteTableAnnouncement'
+      { dryRun =
+          Prelude.Nothing,
+        tagSpecifications =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        peeringAttachmentId =
+          pPeeringAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayRouteTableAnnouncement_dryRun :: Lens.Lens' CreateTransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Bool)
+createTransitGatewayRouteTableAnnouncement_dryRun = Lens.lens (\CreateTransitGatewayRouteTableAnnouncement' {dryRun} -> dryRun) (\s@CreateTransitGatewayRouteTableAnnouncement' {} a -> s {dryRun = a} :: CreateTransitGatewayRouteTableAnnouncement)
+
+-- | The tags specifications applied to the transit gateway route table
+-- announcement.
+createTransitGatewayRouteTableAnnouncement_tagSpecifications :: Lens.Lens' CreateTransitGatewayRouteTableAnnouncement (Prelude.Maybe [TagSpecification])
+createTransitGatewayRouteTableAnnouncement_tagSpecifications = Lens.lens (\CreateTransitGatewayRouteTableAnnouncement' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayRouteTableAnnouncement' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayRouteTableAnnouncement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway route table.
+createTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableId :: Lens.Lens' CreateTransitGatewayRouteTableAnnouncement Prelude.Text
+createTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableId = Lens.lens (\CreateTransitGatewayRouteTableAnnouncement' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@CreateTransitGatewayRouteTableAnnouncement' {} a -> s {transitGatewayRouteTableId = a} :: CreateTransitGatewayRouteTableAnnouncement)
+
+-- | The ID of the peering attachment.
+createTransitGatewayRouteTableAnnouncement_peeringAttachmentId :: Lens.Lens' CreateTransitGatewayRouteTableAnnouncement Prelude.Text
+createTransitGatewayRouteTableAnnouncement_peeringAttachmentId = Lens.lens (\CreateTransitGatewayRouteTableAnnouncement' {peeringAttachmentId} -> peeringAttachmentId) (\s@CreateTransitGatewayRouteTableAnnouncement' {} a -> s {peeringAttachmentId = a} :: CreateTransitGatewayRouteTableAnnouncement)
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayRouteTableAnnouncement
+  where
+  type
+    AWSResponse
+      CreateTransitGatewayRouteTableAnnouncement =
+      CreateTransitGatewayRouteTableAnnouncementResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayRouteTableAnnouncementResponse'
+            Prelude.<$> (x Data..@? "transitGatewayRouteTableAnnouncement")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayRouteTableAnnouncement
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayRouteTableAnnouncement' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+        `Prelude.hashWithSalt` peeringAttachmentId
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayRouteTableAnnouncement
+  where
+  rnf CreateTransitGatewayRouteTableAnnouncement' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf peeringAttachmentId
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayRouteTableAnnouncement
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateTransitGatewayRouteTableAnnouncement
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayRouteTableAnnouncement
+  where
+  toQuery
+    CreateTransitGatewayRouteTableAnnouncement' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "CreateTransitGatewayRouteTableAnnouncement" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            ( Data.toQueryList "TagSpecification"
+                Prelude.<$> tagSpecifications
+            ),
+          "TransitGatewayRouteTableId"
+            Data.=: transitGatewayRouteTableId,
+          "PeeringAttachmentId" Data.=: peeringAttachmentId
+        ]
+
+-- | /See:/ 'newCreateTransitGatewayRouteTableAnnouncementResponse' smart constructor.
+data CreateTransitGatewayRouteTableAnnouncementResponse = CreateTransitGatewayRouteTableAnnouncementResponse'
+  { -- | Provides details about the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncement :: Prelude.Maybe TransitGatewayRouteTableAnnouncement,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayRouteTableAnnouncementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayRouteTableAnnouncement', 'createTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement' - Provides details about the transit gateway route table announcement.
+--
+-- 'httpStatus', 'createTransitGatewayRouteTableAnnouncementResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayRouteTableAnnouncementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayRouteTableAnnouncementResponse
+newCreateTransitGatewayRouteTableAnnouncementResponse
+  pHttpStatus_ =
+    CreateTransitGatewayRouteTableAnnouncementResponse'
+      { transitGatewayRouteTableAnnouncement =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Provides details about the transit gateway route table announcement.
+createTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement :: Lens.Lens' CreateTransitGatewayRouteTableAnnouncementResponse (Prelude.Maybe TransitGatewayRouteTableAnnouncement)
+createTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement = Lens.lens (\CreateTransitGatewayRouteTableAnnouncementResponse' {transitGatewayRouteTableAnnouncement} -> transitGatewayRouteTableAnnouncement) (\s@CreateTransitGatewayRouteTableAnnouncementResponse' {} a -> s {transitGatewayRouteTableAnnouncement = a} :: CreateTransitGatewayRouteTableAnnouncementResponse)
+
+-- | The response's http status code.
+createTransitGatewayRouteTableAnnouncementResponse_httpStatus :: Lens.Lens' CreateTransitGatewayRouteTableAnnouncementResponse Prelude.Int
+createTransitGatewayRouteTableAnnouncementResponse_httpStatus = Lens.lens (\CreateTransitGatewayRouteTableAnnouncementResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayRouteTableAnnouncementResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayRouteTableAnnouncementResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayRouteTableAnnouncementResponse
+  where
+  rnf
+    CreateTransitGatewayRouteTableAnnouncementResponse' {..} =
+      Prelude.rnf transitGatewayRouteTableAnnouncement
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateTransitGatewayVpcAttachment.hs b/gen/Amazonka/EC2/CreateTransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateTransitGatewayVpcAttachment.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateTransitGatewayVpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Attaches the specified VPC to the specified transit gateway.
+--
+-- If you attach a VPC with a CIDR range that overlaps the CIDR range of a
+-- VPC that is already attached, the new VPC CIDR range is not propagated
+-- to the default propagation route table.
+--
+-- To send VPC traffic to an attached transit gateway, add a route to the
+-- VPC route table using CreateRoute.
+module Amazonka.EC2.CreateTransitGatewayVpcAttachment
+  ( -- * Creating a Request
+    CreateTransitGatewayVpcAttachment (..),
+    newCreateTransitGatewayVpcAttachment,
+
+    -- * Request Lenses
+    createTransitGatewayVpcAttachment_dryRun,
+    createTransitGatewayVpcAttachment_options,
+    createTransitGatewayVpcAttachment_tagSpecifications,
+    createTransitGatewayVpcAttachment_transitGatewayId,
+    createTransitGatewayVpcAttachment_vpcId,
+    createTransitGatewayVpcAttachment_subnetIds,
+
+    -- * Destructuring the Response
+    CreateTransitGatewayVpcAttachmentResponse (..),
+    newCreateTransitGatewayVpcAttachmentResponse,
+
+    -- * Response Lenses
+    createTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    createTransitGatewayVpcAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTransitGatewayVpcAttachment' smart constructor.
+data CreateTransitGatewayVpcAttachment = CreateTransitGatewayVpcAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The VPC attachment options.
+    options :: Prelude.Maybe CreateTransitGatewayVpcAttachmentRequestOptions,
+    -- | The tags to apply to the VPC attachment.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text,
+    -- | The IDs of one or more subnets. You can specify only one subnet per
+    -- Availability Zone. You must specify at least one subnet, but we
+    -- recommend that you specify two subnets for better availability. The
+    -- transit gateway uses one IP address from each specified subnet.
+    subnetIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayVpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createTransitGatewayVpcAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'createTransitGatewayVpcAttachment_options' - The VPC attachment options.
+--
+-- 'tagSpecifications', 'createTransitGatewayVpcAttachment_tagSpecifications' - The tags to apply to the VPC attachment.
+--
+-- 'transitGatewayId', 'createTransitGatewayVpcAttachment_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'vpcId', 'createTransitGatewayVpcAttachment_vpcId' - The ID of the VPC.
+--
+-- 'subnetIds', 'createTransitGatewayVpcAttachment_subnetIds' - The IDs of one or more subnets. You can specify only one subnet per
+-- Availability Zone. You must specify at least one subnet, but we
+-- recommend that you specify two subnets for better availability. The
+-- transit gateway uses one IP address from each specified subnet.
+newCreateTransitGatewayVpcAttachment ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  CreateTransitGatewayVpcAttachment
+newCreateTransitGatewayVpcAttachment
+  pTransitGatewayId_
+  pVpcId_ =
+    CreateTransitGatewayVpcAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        options = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        transitGatewayId = pTransitGatewayId_,
+        vpcId = pVpcId_,
+        subnetIds = Prelude.mempty
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createTransitGatewayVpcAttachment_dryRun :: Lens.Lens' CreateTransitGatewayVpcAttachment (Prelude.Maybe Prelude.Bool)
+createTransitGatewayVpcAttachment_dryRun = Lens.lens (\CreateTransitGatewayVpcAttachment' {dryRun} -> dryRun) (\s@CreateTransitGatewayVpcAttachment' {} a -> s {dryRun = a} :: CreateTransitGatewayVpcAttachment)
+
+-- | The VPC attachment options.
+createTransitGatewayVpcAttachment_options :: Lens.Lens' CreateTransitGatewayVpcAttachment (Prelude.Maybe CreateTransitGatewayVpcAttachmentRequestOptions)
+createTransitGatewayVpcAttachment_options = Lens.lens (\CreateTransitGatewayVpcAttachment' {options} -> options) (\s@CreateTransitGatewayVpcAttachment' {} a -> s {options = a} :: CreateTransitGatewayVpcAttachment)
+
+-- | The tags to apply to the VPC attachment.
+createTransitGatewayVpcAttachment_tagSpecifications :: Lens.Lens' CreateTransitGatewayVpcAttachment (Prelude.Maybe [TagSpecification])
+createTransitGatewayVpcAttachment_tagSpecifications = Lens.lens (\CreateTransitGatewayVpcAttachment' {tagSpecifications} -> tagSpecifications) (\s@CreateTransitGatewayVpcAttachment' {} a -> s {tagSpecifications = a} :: CreateTransitGatewayVpcAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+createTransitGatewayVpcAttachment_transitGatewayId :: Lens.Lens' CreateTransitGatewayVpcAttachment Prelude.Text
+createTransitGatewayVpcAttachment_transitGatewayId = Lens.lens (\CreateTransitGatewayVpcAttachment' {transitGatewayId} -> transitGatewayId) (\s@CreateTransitGatewayVpcAttachment' {} a -> s {transitGatewayId = a} :: CreateTransitGatewayVpcAttachment)
+
+-- | The ID of the VPC.
+createTransitGatewayVpcAttachment_vpcId :: Lens.Lens' CreateTransitGatewayVpcAttachment Prelude.Text
+createTransitGatewayVpcAttachment_vpcId = Lens.lens (\CreateTransitGatewayVpcAttachment' {vpcId} -> vpcId) (\s@CreateTransitGatewayVpcAttachment' {} a -> s {vpcId = a} :: CreateTransitGatewayVpcAttachment)
+
+-- | The IDs of one or more subnets. You can specify only one subnet per
+-- Availability Zone. You must specify at least one subnet, but we
+-- recommend that you specify two subnets for better availability. The
+-- transit gateway uses one IP address from each specified subnet.
+createTransitGatewayVpcAttachment_subnetIds :: Lens.Lens' CreateTransitGatewayVpcAttachment [Prelude.Text]
+createTransitGatewayVpcAttachment_subnetIds = Lens.lens (\CreateTransitGatewayVpcAttachment' {subnetIds} -> subnetIds) (\s@CreateTransitGatewayVpcAttachment' {} a -> s {subnetIds = a} :: CreateTransitGatewayVpcAttachment) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    CreateTransitGatewayVpcAttachment
+  where
+  type
+    AWSResponse CreateTransitGatewayVpcAttachment =
+      CreateTransitGatewayVpcAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateTransitGatewayVpcAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayVpcAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayVpcAttachment
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayVpcAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` options
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` transitGatewayId
+        `Prelude.hashWithSalt` vpcId
+        `Prelude.hashWithSalt` subnetIds
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayVpcAttachment
+  where
+  rnf CreateTransitGatewayVpcAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf subnetIds
+
+instance
+  Data.ToHeaders
+    CreateTransitGatewayVpcAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateTransitGatewayVpcAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayVpcAttachment
+  where
+  toQuery CreateTransitGatewayVpcAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateTransitGatewayVpcAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecifications"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayId" Data.=: transitGatewayId,
+        "VpcId" Data.=: vpcId,
+        Data.toQueryList "SubnetIds" subnetIds
+      ]
+
+-- | /See:/ 'newCreateTransitGatewayVpcAttachmentResponse' smart constructor.
+data CreateTransitGatewayVpcAttachmentResponse = CreateTransitGatewayVpcAttachmentResponse'
+  { -- | Information about the VPC attachment.
+    transitGatewayVpcAttachment :: Prelude.Maybe TransitGatewayVpcAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayVpcAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayVpcAttachment', 'createTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment' - Information about the VPC attachment.
+--
+-- 'httpStatus', 'createTransitGatewayVpcAttachmentResponse_httpStatus' - The response's http status code.
+newCreateTransitGatewayVpcAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateTransitGatewayVpcAttachmentResponse
+newCreateTransitGatewayVpcAttachmentResponse
+  pHttpStatus_ =
+    CreateTransitGatewayVpcAttachmentResponse'
+      { transitGatewayVpcAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the VPC attachment.
+createTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment :: Lens.Lens' CreateTransitGatewayVpcAttachmentResponse (Prelude.Maybe TransitGatewayVpcAttachment)
+createTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment = Lens.lens (\CreateTransitGatewayVpcAttachmentResponse' {transitGatewayVpcAttachment} -> transitGatewayVpcAttachment) (\s@CreateTransitGatewayVpcAttachmentResponse' {} a -> s {transitGatewayVpcAttachment = a} :: CreateTransitGatewayVpcAttachmentResponse)
+
+-- | The response's http status code.
+createTransitGatewayVpcAttachmentResponse_httpStatus :: Lens.Lens' CreateTransitGatewayVpcAttachmentResponse Prelude.Int
+createTransitGatewayVpcAttachmentResponse_httpStatus = Lens.lens (\CreateTransitGatewayVpcAttachmentResponse' {httpStatus} -> httpStatus) (\s@CreateTransitGatewayVpcAttachmentResponse' {} a -> s {httpStatus = a} :: CreateTransitGatewayVpcAttachmentResponse)
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayVpcAttachmentResponse
+  where
+  rnf CreateTransitGatewayVpcAttachmentResponse' {..} =
+    Prelude.rnf transitGatewayVpcAttachment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVerifiedAccessEndpoint.hs b/gen/Amazonka/EC2/CreateVerifiedAccessEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVerifiedAccessEndpoint.hs
@@ -0,0 +1,400 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVerifiedAccessEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- An Amazon Web Services Verified Access endpoint is where you define your
+-- application along with an optional endpoint-level access policy.
+module Amazonka.EC2.CreateVerifiedAccessEndpoint
+  ( -- * Creating a Request
+    CreateVerifiedAccessEndpoint (..),
+    newCreateVerifiedAccessEndpoint,
+
+    -- * Request Lenses
+    createVerifiedAccessEndpoint_clientToken,
+    createVerifiedAccessEndpoint_description,
+    createVerifiedAccessEndpoint_dryRun,
+    createVerifiedAccessEndpoint_loadBalancerOptions,
+    createVerifiedAccessEndpoint_networkInterfaceOptions,
+    createVerifiedAccessEndpoint_policyDocument,
+    createVerifiedAccessEndpoint_securityGroupIds,
+    createVerifiedAccessEndpoint_tagSpecifications,
+    createVerifiedAccessEndpoint_verifiedAccessGroupId,
+    createVerifiedAccessEndpoint_endpointType,
+    createVerifiedAccessEndpoint_attachmentType,
+    createVerifiedAccessEndpoint_domainCertificateArn,
+    createVerifiedAccessEndpoint_applicationDomain,
+    createVerifiedAccessEndpoint_endpointDomainPrefix,
+
+    -- * Destructuring the Response
+    CreateVerifiedAccessEndpointResponse (..),
+    newCreateVerifiedAccessEndpointResponse,
+
+    -- * Response Lenses
+    createVerifiedAccessEndpointResponse_verifiedAccessEndpoint,
+    createVerifiedAccessEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVerifiedAccessEndpoint' smart constructor.
+data CreateVerifiedAccessEndpoint = CreateVerifiedAccessEndpoint'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access endpoint.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The load balancer details if creating the Amazon Web Services Verified
+    -- Access endpoint as @load-balancer@type.
+    loadBalancerOptions :: Prelude.Maybe CreateVerifiedAccessEndpointLoadBalancerOptions,
+    -- | The network interface details if creating the Amazon Web Services
+    -- Verified Access endpoint as @network-interface@type.
+    networkInterfaceOptions :: Prelude.Maybe CreateVerifiedAccessEndpointEniOptions,
+    -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon EC2 security groups to associate with the Amazon Web Services
+    -- Verified Access endpoint.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to assign to the Amazon Web Services Verified Access endpoint.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the Verified Access group to associate the endpoint with.
+    verifiedAccessGroupId :: Prelude.Text,
+    -- | The type of Amazon Web Services Verified Access endpoint to create.
+    endpointType :: VerifiedAccessEndpointType,
+    -- | The Amazon Web Services network component Verified Access attaches to.
+    attachmentType :: VerifiedAccessEndpointAttachmentType,
+    -- | The ARN of the public TLS\/SSL certificate in Amazon Web Services
+    -- Certificate Manager to associate with the endpoint. The CN in the
+    -- certificate must match the DNS name your end users will use to reach
+    -- your application.
+    domainCertificateArn :: Prelude.Text,
+    -- | The DNS name for users to reach your application.
+    applicationDomain :: Prelude.Text,
+    -- | A custom identifier that gets prepended to a DNS name that is generated
+    -- for the endpoint.
+    endpointDomainPrefix :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVerifiedAccessEndpoint_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createVerifiedAccessEndpoint_description' - A description for the Amazon Web Services Verified Access endpoint.
+--
+-- 'dryRun', 'createVerifiedAccessEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'loadBalancerOptions', 'createVerifiedAccessEndpoint_loadBalancerOptions' - The load balancer details if creating the Amazon Web Services Verified
+-- Access endpoint as @load-balancer@type.
+--
+-- 'networkInterfaceOptions', 'createVerifiedAccessEndpoint_networkInterfaceOptions' - The network interface details if creating the Amazon Web Services
+-- Verified Access endpoint as @network-interface@type.
+--
+-- 'policyDocument', 'createVerifiedAccessEndpoint_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'securityGroupIds', 'createVerifiedAccessEndpoint_securityGroupIds' - The Amazon EC2 security groups to associate with the Amazon Web Services
+-- Verified Access endpoint.
+--
+-- 'tagSpecifications', 'createVerifiedAccessEndpoint_tagSpecifications' - The tags to assign to the Amazon Web Services Verified Access endpoint.
+--
+-- 'verifiedAccessGroupId', 'createVerifiedAccessEndpoint_verifiedAccessGroupId' - The ID of the Verified Access group to associate the endpoint with.
+--
+-- 'endpointType', 'createVerifiedAccessEndpoint_endpointType' - The type of Amazon Web Services Verified Access endpoint to create.
+--
+-- 'attachmentType', 'createVerifiedAccessEndpoint_attachmentType' - The Amazon Web Services network component Verified Access attaches to.
+--
+-- 'domainCertificateArn', 'createVerifiedAccessEndpoint_domainCertificateArn' - The ARN of the public TLS\/SSL certificate in Amazon Web Services
+-- Certificate Manager to associate with the endpoint. The CN in the
+-- certificate must match the DNS name your end users will use to reach
+-- your application.
+--
+-- 'applicationDomain', 'createVerifiedAccessEndpoint_applicationDomain' - The DNS name for users to reach your application.
+--
+-- 'endpointDomainPrefix', 'createVerifiedAccessEndpoint_endpointDomainPrefix' - A custom identifier that gets prepended to a DNS name that is generated
+-- for the endpoint.
+newCreateVerifiedAccessEndpoint ::
+  -- | 'verifiedAccessGroupId'
+  Prelude.Text ->
+  -- | 'endpointType'
+  VerifiedAccessEndpointType ->
+  -- | 'attachmentType'
+  VerifiedAccessEndpointAttachmentType ->
+  -- | 'domainCertificateArn'
+  Prelude.Text ->
+  -- | 'applicationDomain'
+  Prelude.Text ->
+  -- | 'endpointDomainPrefix'
+  Prelude.Text ->
+  CreateVerifiedAccessEndpoint
+newCreateVerifiedAccessEndpoint
+  pVerifiedAccessGroupId_
+  pEndpointType_
+  pAttachmentType_
+  pDomainCertificateArn_
+  pApplicationDomain_
+  pEndpointDomainPrefix_ =
+    CreateVerifiedAccessEndpoint'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        loadBalancerOptions = Prelude.Nothing,
+        networkInterfaceOptions = Prelude.Nothing,
+        policyDocument = Prelude.Nothing,
+        securityGroupIds = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        verifiedAccessGroupId =
+          pVerifiedAccessGroupId_,
+        endpointType = pEndpointType_,
+        attachmentType = pAttachmentType_,
+        domainCertificateArn = pDomainCertificateArn_,
+        applicationDomain = pApplicationDomain_,
+        endpointDomainPrefix = pEndpointDomainPrefix_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createVerifiedAccessEndpoint_clientToken :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+createVerifiedAccessEndpoint_clientToken = Lens.lens (\CreateVerifiedAccessEndpoint' {clientToken} -> clientToken) (\s@CreateVerifiedAccessEndpoint' {} a -> s {clientToken = a} :: CreateVerifiedAccessEndpoint)
+
+-- | A description for the Amazon Web Services Verified Access endpoint.
+createVerifiedAccessEndpoint_description :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+createVerifiedAccessEndpoint_description = Lens.lens (\CreateVerifiedAccessEndpoint' {description} -> description) (\s@CreateVerifiedAccessEndpoint' {} a -> s {description = a} :: CreateVerifiedAccessEndpoint)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVerifiedAccessEndpoint_dryRun :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe Prelude.Bool)
+createVerifiedAccessEndpoint_dryRun = Lens.lens (\CreateVerifiedAccessEndpoint' {dryRun} -> dryRun) (\s@CreateVerifiedAccessEndpoint' {} a -> s {dryRun = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The load balancer details if creating the Amazon Web Services Verified
+-- Access endpoint as @load-balancer@type.
+createVerifiedAccessEndpoint_loadBalancerOptions :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe CreateVerifiedAccessEndpointLoadBalancerOptions)
+createVerifiedAccessEndpoint_loadBalancerOptions = Lens.lens (\CreateVerifiedAccessEndpoint' {loadBalancerOptions} -> loadBalancerOptions) (\s@CreateVerifiedAccessEndpoint' {} a -> s {loadBalancerOptions = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The network interface details if creating the Amazon Web Services
+-- Verified Access endpoint as @network-interface@type.
+createVerifiedAccessEndpoint_networkInterfaceOptions :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe CreateVerifiedAccessEndpointEniOptions)
+createVerifiedAccessEndpoint_networkInterfaceOptions = Lens.lens (\CreateVerifiedAccessEndpoint' {networkInterfaceOptions} -> networkInterfaceOptions) (\s@CreateVerifiedAccessEndpoint' {} a -> s {networkInterfaceOptions = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The Amazon Web Services Verified Access policy document.
+createVerifiedAccessEndpoint_policyDocument :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+createVerifiedAccessEndpoint_policyDocument = Lens.lens (\CreateVerifiedAccessEndpoint' {policyDocument} -> policyDocument) (\s@CreateVerifiedAccessEndpoint' {} a -> s {policyDocument = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The Amazon EC2 security groups to associate with the Amazon Web Services
+-- Verified Access endpoint.
+createVerifiedAccessEndpoint_securityGroupIds :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe [Prelude.Text])
+createVerifiedAccessEndpoint_securityGroupIds = Lens.lens (\CreateVerifiedAccessEndpoint' {securityGroupIds} -> securityGroupIds) (\s@CreateVerifiedAccessEndpoint' {} a -> s {securityGroupIds = a} :: CreateVerifiedAccessEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to assign to the Amazon Web Services Verified Access endpoint.
+createVerifiedAccessEndpoint_tagSpecifications :: Lens.Lens' CreateVerifiedAccessEndpoint (Prelude.Maybe [TagSpecification])
+createVerifiedAccessEndpoint_tagSpecifications = Lens.lens (\CreateVerifiedAccessEndpoint' {tagSpecifications} -> tagSpecifications) (\s@CreateVerifiedAccessEndpoint' {} a -> s {tagSpecifications = a} :: CreateVerifiedAccessEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Verified Access group to associate the endpoint with.
+createVerifiedAccessEndpoint_verifiedAccessGroupId :: Lens.Lens' CreateVerifiedAccessEndpoint Prelude.Text
+createVerifiedAccessEndpoint_verifiedAccessGroupId = Lens.lens (\CreateVerifiedAccessEndpoint' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@CreateVerifiedAccessEndpoint' {} a -> s {verifiedAccessGroupId = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The type of Amazon Web Services Verified Access endpoint to create.
+createVerifiedAccessEndpoint_endpointType :: Lens.Lens' CreateVerifiedAccessEndpoint VerifiedAccessEndpointType
+createVerifiedAccessEndpoint_endpointType = Lens.lens (\CreateVerifiedAccessEndpoint' {endpointType} -> endpointType) (\s@CreateVerifiedAccessEndpoint' {} a -> s {endpointType = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The Amazon Web Services network component Verified Access attaches to.
+createVerifiedAccessEndpoint_attachmentType :: Lens.Lens' CreateVerifiedAccessEndpoint VerifiedAccessEndpointAttachmentType
+createVerifiedAccessEndpoint_attachmentType = Lens.lens (\CreateVerifiedAccessEndpoint' {attachmentType} -> attachmentType) (\s@CreateVerifiedAccessEndpoint' {} a -> s {attachmentType = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The ARN of the public TLS\/SSL certificate in Amazon Web Services
+-- Certificate Manager to associate with the endpoint. The CN in the
+-- certificate must match the DNS name your end users will use to reach
+-- your application.
+createVerifiedAccessEndpoint_domainCertificateArn :: Lens.Lens' CreateVerifiedAccessEndpoint Prelude.Text
+createVerifiedAccessEndpoint_domainCertificateArn = Lens.lens (\CreateVerifiedAccessEndpoint' {domainCertificateArn} -> domainCertificateArn) (\s@CreateVerifiedAccessEndpoint' {} a -> s {domainCertificateArn = a} :: CreateVerifiedAccessEndpoint)
+
+-- | The DNS name for users to reach your application.
+createVerifiedAccessEndpoint_applicationDomain :: Lens.Lens' CreateVerifiedAccessEndpoint Prelude.Text
+createVerifiedAccessEndpoint_applicationDomain = Lens.lens (\CreateVerifiedAccessEndpoint' {applicationDomain} -> applicationDomain) (\s@CreateVerifiedAccessEndpoint' {} a -> s {applicationDomain = a} :: CreateVerifiedAccessEndpoint)
+
+-- | A custom identifier that gets prepended to a DNS name that is generated
+-- for the endpoint.
+createVerifiedAccessEndpoint_endpointDomainPrefix :: Lens.Lens' CreateVerifiedAccessEndpoint Prelude.Text
+createVerifiedAccessEndpoint_endpointDomainPrefix = Lens.lens (\CreateVerifiedAccessEndpoint' {endpointDomainPrefix} -> endpointDomainPrefix) (\s@CreateVerifiedAccessEndpoint' {} a -> s {endpointDomainPrefix = a} :: CreateVerifiedAccessEndpoint)
+
+instance Core.AWSRequest CreateVerifiedAccessEndpoint where
+  type
+    AWSResponse CreateVerifiedAccessEndpoint =
+      CreateVerifiedAccessEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVerifiedAccessEndpointResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessEndpoint")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessEndpoint
+  where
+  hashWithSalt _salt CreateVerifiedAccessEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` loadBalancerOptions
+      `Prelude.hashWithSalt` networkInterfaceOptions
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+      `Prelude.hashWithSalt` endpointType
+      `Prelude.hashWithSalt` attachmentType
+      `Prelude.hashWithSalt` domainCertificateArn
+      `Prelude.hashWithSalt` applicationDomain
+      `Prelude.hashWithSalt` endpointDomainPrefix
+
+instance Prelude.NFData CreateVerifiedAccessEndpoint where
+  rnf CreateVerifiedAccessEndpoint' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf loadBalancerOptions
+      `Prelude.seq` Prelude.rnf networkInterfaceOptions
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+      `Prelude.seq` Prelude.rnf endpointType
+      `Prelude.seq` Prelude.rnf attachmentType
+      `Prelude.seq` Prelude.rnf domainCertificateArn
+      `Prelude.seq` Prelude.rnf applicationDomain
+      `Prelude.seq` Prelude.rnf endpointDomainPrefix
+
+instance Data.ToHeaders CreateVerifiedAccessEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVerifiedAccessEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVerifiedAccessEndpoint where
+  toQuery CreateVerifiedAccessEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateVerifiedAccessEndpoint" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "LoadBalancerOptions" Data.=: loadBalancerOptions,
+        "NetworkInterfaceOptions"
+          Data.=: networkInterfaceOptions,
+        "PolicyDocument" Data.=: policyDocument,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId,
+        "EndpointType" Data.=: endpointType,
+        "AttachmentType" Data.=: attachmentType,
+        "DomainCertificateArn" Data.=: domainCertificateArn,
+        "ApplicationDomain" Data.=: applicationDomain,
+        "EndpointDomainPrefix" Data.=: endpointDomainPrefix
+      ]
+
+-- | /See:/ 'newCreateVerifiedAccessEndpointResponse' smart constructor.
+data CreateVerifiedAccessEndpointResponse = CreateVerifiedAccessEndpointResponse'
+  { -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpoint :: Prelude.Maybe VerifiedAccessEndpoint,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessEndpoint', 'createVerifiedAccessEndpointResponse_verifiedAccessEndpoint' - The ID of the Amazon Web Services Verified Access endpoint.
+--
+-- 'httpStatus', 'createVerifiedAccessEndpointResponse_httpStatus' - The response's http status code.
+newCreateVerifiedAccessEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVerifiedAccessEndpointResponse
+newCreateVerifiedAccessEndpointResponse pHttpStatus_ =
+  CreateVerifiedAccessEndpointResponse'
+    { verifiedAccessEndpoint =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+createVerifiedAccessEndpointResponse_verifiedAccessEndpoint :: Lens.Lens' CreateVerifiedAccessEndpointResponse (Prelude.Maybe VerifiedAccessEndpoint)
+createVerifiedAccessEndpointResponse_verifiedAccessEndpoint = Lens.lens (\CreateVerifiedAccessEndpointResponse' {verifiedAccessEndpoint} -> verifiedAccessEndpoint) (\s@CreateVerifiedAccessEndpointResponse' {} a -> s {verifiedAccessEndpoint = a} :: CreateVerifiedAccessEndpointResponse)
+
+-- | The response's http status code.
+createVerifiedAccessEndpointResponse_httpStatus :: Lens.Lens' CreateVerifiedAccessEndpointResponse Prelude.Int
+createVerifiedAccessEndpointResponse_httpStatus = Lens.lens (\CreateVerifiedAccessEndpointResponse' {httpStatus} -> httpStatus) (\s@CreateVerifiedAccessEndpointResponse' {} a -> s {httpStatus = a} :: CreateVerifiedAccessEndpointResponse)
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessEndpointResponse
+  where
+  rnf CreateVerifiedAccessEndpointResponse' {..} =
+    Prelude.rnf verifiedAccessEndpoint
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVerifiedAccessGroup.hs b/gen/Amazonka/EC2/CreateVerifiedAccessGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVerifiedAccessGroup.hs
@@ -0,0 +1,256 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVerifiedAccessGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- An Amazon Web Services Verified Access group is a collection of Amazon
+-- Web Services Verified Access endpoints who\'s associated applications
+-- have similar security requirements. Each instance within an Amazon Web
+-- Services Verified Access group shares an Amazon Web Services Verified
+-- Access policy. For example, you can group all Amazon Web Services
+-- Verified Access instances associated with “sales” applications together
+-- and use one common Amazon Web Services Verified Access policy.
+module Amazonka.EC2.CreateVerifiedAccessGroup
+  ( -- * Creating a Request
+    CreateVerifiedAccessGroup (..),
+    newCreateVerifiedAccessGroup,
+
+    -- * Request Lenses
+    createVerifiedAccessGroup_clientToken,
+    createVerifiedAccessGroup_description,
+    createVerifiedAccessGroup_dryRun,
+    createVerifiedAccessGroup_policyDocument,
+    createVerifiedAccessGroup_tagSpecifications,
+    createVerifiedAccessGroup_verifiedAccessInstanceId,
+
+    -- * Destructuring the Response
+    CreateVerifiedAccessGroupResponse (..),
+    newCreateVerifiedAccessGroupResponse,
+
+    -- * Response Lenses
+    createVerifiedAccessGroupResponse_verifiedAccessGroup,
+    createVerifiedAccessGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVerifiedAccessGroup' smart constructor.
+data CreateVerifiedAccessGroup = CreateVerifiedAccessGroup'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the Amazon Web Services Verified Access group.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVerifiedAccessGroup_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createVerifiedAccessGroup_description' - A description for the Amazon Web Services Verified Access group.
+--
+-- 'dryRun', 'createVerifiedAccessGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'policyDocument', 'createVerifiedAccessGroup_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'tagSpecifications', 'createVerifiedAccessGroup_tagSpecifications' - The tags to assign to the Amazon Web Services Verified Access group.
+--
+-- 'verifiedAccessInstanceId', 'createVerifiedAccessGroup_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newCreateVerifiedAccessGroup ::
+  -- | 'verifiedAccessInstanceId'
+  Prelude.Text ->
+  CreateVerifiedAccessGroup
+newCreateVerifiedAccessGroup
+  pVerifiedAccessInstanceId_ =
+    CreateVerifiedAccessGroup'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        policyDocument = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        verifiedAccessInstanceId =
+          pVerifiedAccessInstanceId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createVerifiedAccessGroup_clientToken :: Lens.Lens' CreateVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+createVerifiedAccessGroup_clientToken = Lens.lens (\CreateVerifiedAccessGroup' {clientToken} -> clientToken) (\s@CreateVerifiedAccessGroup' {} a -> s {clientToken = a} :: CreateVerifiedAccessGroup)
+
+-- | A description for the Amazon Web Services Verified Access group.
+createVerifiedAccessGroup_description :: Lens.Lens' CreateVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+createVerifiedAccessGroup_description = Lens.lens (\CreateVerifiedAccessGroup' {description} -> description) (\s@CreateVerifiedAccessGroup' {} a -> s {description = a} :: CreateVerifiedAccessGroup)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVerifiedAccessGroup_dryRun :: Lens.Lens' CreateVerifiedAccessGroup (Prelude.Maybe Prelude.Bool)
+createVerifiedAccessGroup_dryRun = Lens.lens (\CreateVerifiedAccessGroup' {dryRun} -> dryRun) (\s@CreateVerifiedAccessGroup' {} a -> s {dryRun = a} :: CreateVerifiedAccessGroup)
+
+-- | The Amazon Web Services Verified Access policy document.
+createVerifiedAccessGroup_policyDocument :: Lens.Lens' CreateVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+createVerifiedAccessGroup_policyDocument = Lens.lens (\CreateVerifiedAccessGroup' {policyDocument} -> policyDocument) (\s@CreateVerifiedAccessGroup' {} a -> s {policyDocument = a} :: CreateVerifiedAccessGroup)
+
+-- | The tags to assign to the Amazon Web Services Verified Access group.
+createVerifiedAccessGroup_tagSpecifications :: Lens.Lens' CreateVerifiedAccessGroup (Prelude.Maybe [TagSpecification])
+createVerifiedAccessGroup_tagSpecifications = Lens.lens (\CreateVerifiedAccessGroup' {tagSpecifications} -> tagSpecifications) (\s@CreateVerifiedAccessGroup' {} a -> s {tagSpecifications = a} :: CreateVerifiedAccessGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+createVerifiedAccessGroup_verifiedAccessInstanceId :: Lens.Lens' CreateVerifiedAccessGroup Prelude.Text
+createVerifiedAccessGroup_verifiedAccessInstanceId = Lens.lens (\CreateVerifiedAccessGroup' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@CreateVerifiedAccessGroup' {} a -> s {verifiedAccessInstanceId = a} :: CreateVerifiedAccessGroup)
+
+instance Core.AWSRequest CreateVerifiedAccessGroup where
+  type
+    AWSResponse CreateVerifiedAccessGroup =
+      CreateVerifiedAccessGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVerifiedAccessGroupResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVerifiedAccessGroup where
+  hashWithSalt _salt CreateVerifiedAccessGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance Prelude.NFData CreateVerifiedAccessGroup where
+  rnf CreateVerifiedAccessGroup' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+
+instance Data.ToHeaders CreateVerifiedAccessGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVerifiedAccessGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVerifiedAccessGroup where
+  toQuery CreateVerifiedAccessGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVerifiedAccessGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "PolicyDocument" Data.=: policyDocument,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId
+      ]
+
+-- | /See:/ 'newCreateVerifiedAccessGroupResponse' smart constructor.
+data CreateVerifiedAccessGroupResponse = CreateVerifiedAccessGroupResponse'
+  { -- | The ID of the Verified Access group.
+    verifiedAccessGroup :: Prelude.Maybe VerifiedAccessGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessGroup', 'createVerifiedAccessGroupResponse_verifiedAccessGroup' - The ID of the Verified Access group.
+--
+-- 'httpStatus', 'createVerifiedAccessGroupResponse_httpStatus' - The response's http status code.
+newCreateVerifiedAccessGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVerifiedAccessGroupResponse
+newCreateVerifiedAccessGroupResponse pHttpStatus_ =
+  CreateVerifiedAccessGroupResponse'
+    { verifiedAccessGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Verified Access group.
+createVerifiedAccessGroupResponse_verifiedAccessGroup :: Lens.Lens' CreateVerifiedAccessGroupResponse (Prelude.Maybe VerifiedAccessGroup)
+createVerifiedAccessGroupResponse_verifiedAccessGroup = Lens.lens (\CreateVerifiedAccessGroupResponse' {verifiedAccessGroup} -> verifiedAccessGroup) (\s@CreateVerifiedAccessGroupResponse' {} a -> s {verifiedAccessGroup = a} :: CreateVerifiedAccessGroupResponse)
+
+-- | The response's http status code.
+createVerifiedAccessGroupResponse_httpStatus :: Lens.Lens' CreateVerifiedAccessGroupResponse Prelude.Int
+createVerifiedAccessGroupResponse_httpStatus = Lens.lens (\CreateVerifiedAccessGroupResponse' {httpStatus} -> httpStatus) (\s@CreateVerifiedAccessGroupResponse' {} a -> s {httpStatus = a} :: CreateVerifiedAccessGroupResponse)
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessGroupResponse
+  where
+  rnf CreateVerifiedAccessGroupResponse' {..} =
+    Prelude.rnf verifiedAccessGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVerifiedAccessInstance.hs b/gen/Amazonka/EC2/CreateVerifiedAccessInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVerifiedAccessInstance.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVerifiedAccessInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- An Amazon Web Services Verified Access instance is a regional entity
+-- that evaluates application requests and grants access only when your
+-- security requirements are met.
+module Amazonka.EC2.CreateVerifiedAccessInstance
+  ( -- * Creating a Request
+    CreateVerifiedAccessInstance (..),
+    newCreateVerifiedAccessInstance,
+
+    -- * Request Lenses
+    createVerifiedAccessInstance_clientToken,
+    createVerifiedAccessInstance_description,
+    createVerifiedAccessInstance_dryRun,
+    createVerifiedAccessInstance_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateVerifiedAccessInstanceResponse (..),
+    newCreateVerifiedAccessInstanceResponse,
+
+    -- * Response Lenses
+    createVerifiedAccessInstanceResponse_verifiedAccessInstance,
+    createVerifiedAccessInstanceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVerifiedAccessInstance' smart constructor.
+data CreateVerifiedAccessInstance = CreateVerifiedAccessInstance'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access instance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to assign to the Amazon Web Services Verified Access instance.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVerifiedAccessInstance_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createVerifiedAccessInstance_description' - A description for the Amazon Web Services Verified Access instance.
+--
+-- 'dryRun', 'createVerifiedAccessInstance_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createVerifiedAccessInstance_tagSpecifications' - The tags to assign to the Amazon Web Services Verified Access instance.
+newCreateVerifiedAccessInstance ::
+  CreateVerifiedAccessInstance
+newCreateVerifiedAccessInstance =
+  CreateVerifiedAccessInstance'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createVerifiedAccessInstance_clientToken :: Lens.Lens' CreateVerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+createVerifiedAccessInstance_clientToken = Lens.lens (\CreateVerifiedAccessInstance' {clientToken} -> clientToken) (\s@CreateVerifiedAccessInstance' {} a -> s {clientToken = a} :: CreateVerifiedAccessInstance)
+
+-- | A description for the Amazon Web Services Verified Access instance.
+createVerifiedAccessInstance_description :: Lens.Lens' CreateVerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+createVerifiedAccessInstance_description = Lens.lens (\CreateVerifiedAccessInstance' {description} -> description) (\s@CreateVerifiedAccessInstance' {} a -> s {description = a} :: CreateVerifiedAccessInstance)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVerifiedAccessInstance_dryRun :: Lens.Lens' CreateVerifiedAccessInstance (Prelude.Maybe Prelude.Bool)
+createVerifiedAccessInstance_dryRun = Lens.lens (\CreateVerifiedAccessInstance' {dryRun} -> dryRun) (\s@CreateVerifiedAccessInstance' {} a -> s {dryRun = a} :: CreateVerifiedAccessInstance)
+
+-- | The tags to assign to the Amazon Web Services Verified Access instance.
+createVerifiedAccessInstance_tagSpecifications :: Lens.Lens' CreateVerifiedAccessInstance (Prelude.Maybe [TagSpecification])
+createVerifiedAccessInstance_tagSpecifications = Lens.lens (\CreateVerifiedAccessInstance' {tagSpecifications} -> tagSpecifications) (\s@CreateVerifiedAccessInstance' {} a -> s {tagSpecifications = a} :: CreateVerifiedAccessInstance) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateVerifiedAccessInstance where
+  type
+    AWSResponse CreateVerifiedAccessInstance =
+      CreateVerifiedAccessInstanceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVerifiedAccessInstanceResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessInstance")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessInstance
+  where
+  hashWithSalt _salt CreateVerifiedAccessInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateVerifiedAccessInstance where
+  rnf CreateVerifiedAccessInstance' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateVerifiedAccessInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVerifiedAccessInstance where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVerifiedAccessInstance where
+  toQuery CreateVerifiedAccessInstance' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateVerifiedAccessInstance" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateVerifiedAccessInstanceResponse' smart constructor.
+data CreateVerifiedAccessInstanceResponse = CreateVerifiedAccessInstanceResponse'
+  { -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstance :: Prelude.Maybe VerifiedAccessInstance,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessInstance', 'createVerifiedAccessInstanceResponse_verifiedAccessInstance' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'httpStatus', 'createVerifiedAccessInstanceResponse_httpStatus' - The response's http status code.
+newCreateVerifiedAccessInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVerifiedAccessInstanceResponse
+newCreateVerifiedAccessInstanceResponse pHttpStatus_ =
+  CreateVerifiedAccessInstanceResponse'
+    { verifiedAccessInstance =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+createVerifiedAccessInstanceResponse_verifiedAccessInstance :: Lens.Lens' CreateVerifiedAccessInstanceResponse (Prelude.Maybe VerifiedAccessInstance)
+createVerifiedAccessInstanceResponse_verifiedAccessInstance = Lens.lens (\CreateVerifiedAccessInstanceResponse' {verifiedAccessInstance} -> verifiedAccessInstance) (\s@CreateVerifiedAccessInstanceResponse' {} a -> s {verifiedAccessInstance = a} :: CreateVerifiedAccessInstanceResponse)
+
+-- | The response's http status code.
+createVerifiedAccessInstanceResponse_httpStatus :: Lens.Lens' CreateVerifiedAccessInstanceResponse Prelude.Int
+createVerifiedAccessInstanceResponse_httpStatus = Lens.lens (\CreateVerifiedAccessInstanceResponse' {httpStatus} -> httpStatus) (\s@CreateVerifiedAccessInstanceResponse' {} a -> s {httpStatus = a} :: CreateVerifiedAccessInstanceResponse)
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessInstanceResponse
+  where
+  rnf CreateVerifiedAccessInstanceResponse' {..} =
+    Prelude.rnf verifiedAccessInstance
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVerifiedAccessTrustProvider.hs b/gen/Amazonka/EC2/CreateVerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVerifiedAccessTrustProvider.hs
@@ -0,0 +1,343 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVerifiedAccessTrustProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A trust provider is a third-party entity that creates, maintains, and
+-- manages identity information for users and devices. When an application
+-- request is made, the identity information sent by the trust provider
+-- will be evaluated by Amazon Web Services Verified Access, before
+-- allowing or denying the application request.
+module Amazonka.EC2.CreateVerifiedAccessTrustProvider
+  ( -- * Creating a Request
+    CreateVerifiedAccessTrustProvider (..),
+    newCreateVerifiedAccessTrustProvider,
+
+    -- * Request Lenses
+    createVerifiedAccessTrustProvider_clientToken,
+    createVerifiedAccessTrustProvider_description,
+    createVerifiedAccessTrustProvider_deviceOptions,
+    createVerifiedAccessTrustProvider_deviceTrustProviderType,
+    createVerifiedAccessTrustProvider_dryRun,
+    createVerifiedAccessTrustProvider_oidcOptions,
+    createVerifiedAccessTrustProvider_tagSpecifications,
+    createVerifiedAccessTrustProvider_userTrustProviderType,
+    createVerifiedAccessTrustProvider_trustProviderType,
+    createVerifiedAccessTrustProvider_policyReferenceName,
+
+    -- * Destructuring the Response
+    CreateVerifiedAccessTrustProviderResponse (..),
+    newCreateVerifiedAccessTrustProviderResponse,
+
+    -- * Response Lenses
+    createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    createVerifiedAccessTrustProviderResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVerifiedAccessTrustProvider' smart constructor.
+data CreateVerifiedAccessTrustProvider = CreateVerifiedAccessTrustProvider'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access trust
+    -- provider.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The options for device identity based trust providers.
+    deviceOptions :: Prelude.Maybe CreateVerifiedAccessTrustProviderDeviceOptions,
+    -- | The type of device-based trust provider.
+    deviceTrustProviderType :: Prelude.Maybe DeviceTrustProviderType,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The OpenID Connect details for an @oidc@-type, user-identity based trust
+    -- provider.
+    oidcOptions :: Prelude.Maybe CreateVerifiedAccessTrustProviderOidcOptions,
+    -- | The tags to assign to the Amazon Web Services Verified Access trust
+    -- provider.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The type of user-based trust provider.
+    userTrustProviderType :: Prelude.Maybe UserTrustProviderType,
+    -- | The type of trust provider can be either user or device-based.
+    trustProviderType :: TrustProviderType,
+    -- | The identifier to be used when working with policy rules.
+    policyReferenceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessTrustProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVerifiedAccessTrustProvider_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'createVerifiedAccessTrustProvider_description' - A description for the Amazon Web Services Verified Access trust
+-- provider.
+--
+-- 'deviceOptions', 'createVerifiedAccessTrustProvider_deviceOptions' - The options for device identity based trust providers.
+--
+-- 'deviceTrustProviderType', 'createVerifiedAccessTrustProvider_deviceTrustProviderType' - The type of device-based trust provider.
+--
+-- 'dryRun', 'createVerifiedAccessTrustProvider_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'oidcOptions', 'createVerifiedAccessTrustProvider_oidcOptions' - The OpenID Connect details for an @oidc@-type, user-identity based trust
+-- provider.
+--
+-- 'tagSpecifications', 'createVerifiedAccessTrustProvider_tagSpecifications' - The tags to assign to the Amazon Web Services Verified Access trust
+-- provider.
+--
+-- 'userTrustProviderType', 'createVerifiedAccessTrustProvider_userTrustProviderType' - The type of user-based trust provider.
+--
+-- 'trustProviderType', 'createVerifiedAccessTrustProvider_trustProviderType' - The type of trust provider can be either user or device-based.
+--
+-- 'policyReferenceName', 'createVerifiedAccessTrustProvider_policyReferenceName' - The identifier to be used when working with policy rules.
+newCreateVerifiedAccessTrustProvider ::
+  -- | 'trustProviderType'
+  TrustProviderType ->
+  -- | 'policyReferenceName'
+  Prelude.Text ->
+  CreateVerifiedAccessTrustProvider
+newCreateVerifiedAccessTrustProvider
+  pTrustProviderType_
+  pPolicyReferenceName_ =
+    CreateVerifiedAccessTrustProvider'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        deviceOptions = Prelude.Nothing,
+        deviceTrustProviderType =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        oidcOptions = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        userTrustProviderType = Prelude.Nothing,
+        trustProviderType = pTrustProviderType_,
+        policyReferenceName =
+          pPolicyReferenceName_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+createVerifiedAccessTrustProvider_clientToken :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProvider_clientToken = Lens.lens (\CreateVerifiedAccessTrustProvider' {clientToken} -> clientToken) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {clientToken = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | A description for the Amazon Web Services Verified Access trust
+-- provider.
+createVerifiedAccessTrustProvider_description :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProvider_description = Lens.lens (\CreateVerifiedAccessTrustProvider' {description} -> description) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {description = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | The options for device identity based trust providers.
+createVerifiedAccessTrustProvider_deviceOptions :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe CreateVerifiedAccessTrustProviderDeviceOptions)
+createVerifiedAccessTrustProvider_deviceOptions = Lens.lens (\CreateVerifiedAccessTrustProvider' {deviceOptions} -> deviceOptions) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {deviceOptions = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | The type of device-based trust provider.
+createVerifiedAccessTrustProvider_deviceTrustProviderType :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe DeviceTrustProviderType)
+createVerifiedAccessTrustProvider_deviceTrustProviderType = Lens.lens (\CreateVerifiedAccessTrustProvider' {deviceTrustProviderType} -> deviceTrustProviderType) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {deviceTrustProviderType = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVerifiedAccessTrustProvider_dryRun :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Bool)
+createVerifiedAccessTrustProvider_dryRun = Lens.lens (\CreateVerifiedAccessTrustProvider' {dryRun} -> dryRun) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {dryRun = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | The OpenID Connect details for an @oidc@-type, user-identity based trust
+-- provider.
+createVerifiedAccessTrustProvider_oidcOptions :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe CreateVerifiedAccessTrustProviderOidcOptions)
+createVerifiedAccessTrustProvider_oidcOptions = Lens.lens (\CreateVerifiedAccessTrustProvider' {oidcOptions} -> oidcOptions) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {oidcOptions = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | The tags to assign to the Amazon Web Services Verified Access trust
+-- provider.
+createVerifiedAccessTrustProvider_tagSpecifications :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe [TagSpecification])
+createVerifiedAccessTrustProvider_tagSpecifications = Lens.lens (\CreateVerifiedAccessTrustProvider' {tagSpecifications} -> tagSpecifications) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {tagSpecifications = a} :: CreateVerifiedAccessTrustProvider) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of user-based trust provider.
+createVerifiedAccessTrustProvider_userTrustProviderType :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe UserTrustProviderType)
+createVerifiedAccessTrustProvider_userTrustProviderType = Lens.lens (\CreateVerifiedAccessTrustProvider' {userTrustProviderType} -> userTrustProviderType) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {userTrustProviderType = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | The type of trust provider can be either user or device-based.
+createVerifiedAccessTrustProvider_trustProviderType :: Lens.Lens' CreateVerifiedAccessTrustProvider TrustProviderType
+createVerifiedAccessTrustProvider_trustProviderType = Lens.lens (\CreateVerifiedAccessTrustProvider' {trustProviderType} -> trustProviderType) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {trustProviderType = a} :: CreateVerifiedAccessTrustProvider)
+
+-- | The identifier to be used when working with policy rules.
+createVerifiedAccessTrustProvider_policyReferenceName :: Lens.Lens' CreateVerifiedAccessTrustProvider Prelude.Text
+createVerifiedAccessTrustProvider_policyReferenceName = Lens.lens (\CreateVerifiedAccessTrustProvider' {policyReferenceName} -> policyReferenceName) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {policyReferenceName = a} :: CreateVerifiedAccessTrustProvider)
+
+instance
+  Core.AWSRequest
+    CreateVerifiedAccessTrustProvider
+  where
+  type
+    AWSResponse CreateVerifiedAccessTrustProvider =
+      CreateVerifiedAccessTrustProviderResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVerifiedAccessTrustProviderResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessTrustProvider")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessTrustProvider
+  where
+  hashWithSalt
+    _salt
+    CreateVerifiedAccessTrustProvider' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` deviceOptions
+        `Prelude.hashWithSalt` deviceTrustProviderType
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` oidcOptions
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` userTrustProviderType
+        `Prelude.hashWithSalt` trustProviderType
+        `Prelude.hashWithSalt` policyReferenceName
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessTrustProvider
+  where
+  rnf CreateVerifiedAccessTrustProvider' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceOptions
+      `Prelude.seq` Prelude.rnf deviceTrustProviderType
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf oidcOptions
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf userTrustProviderType
+      `Prelude.seq` Prelude.rnf trustProviderType
+      `Prelude.seq` Prelude.rnf policyReferenceName
+
+instance
+  Data.ToHeaders
+    CreateVerifiedAccessTrustProvider
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateVerifiedAccessTrustProvider
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateVerifiedAccessTrustProvider
+  where
+  toQuery CreateVerifiedAccessTrustProvider' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateVerifiedAccessTrustProvider" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DeviceOptions" Data.=: deviceOptions,
+        "DeviceTrustProviderType"
+          Data.=: deviceTrustProviderType,
+        "DryRun" Data.=: dryRun,
+        "OidcOptions" Data.=: oidcOptions,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "UserTrustProviderType"
+          Data.=: userTrustProviderType,
+        "TrustProviderType" Data.=: trustProviderType,
+        "PolicyReferenceName" Data.=: policyReferenceName
+      ]
+
+-- | /See:/ 'newCreateVerifiedAccessTrustProviderResponse' smart constructor.
+data CreateVerifiedAccessTrustProviderResponse = CreateVerifiedAccessTrustProviderResponse'
+  { -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProvider :: Prelude.Maybe VerifiedAccessTrustProvider,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessTrustProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessTrustProvider', 'createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider' - The ID of the Amazon Web Services Verified Access trust provider.
+--
+-- 'httpStatus', 'createVerifiedAccessTrustProviderResponse_httpStatus' - The response's http status code.
+newCreateVerifiedAccessTrustProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVerifiedAccessTrustProviderResponse
+newCreateVerifiedAccessTrustProviderResponse
+  pHttpStatus_ =
+    CreateVerifiedAccessTrustProviderResponse'
+      { verifiedAccessTrustProvider =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider :: Lens.Lens' CreateVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessTrustProvider)
+createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider = Lens.lens (\CreateVerifiedAccessTrustProviderResponse' {verifiedAccessTrustProvider} -> verifiedAccessTrustProvider) (\s@CreateVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessTrustProvider = a} :: CreateVerifiedAccessTrustProviderResponse)
+
+-- | The response's http status code.
+createVerifiedAccessTrustProviderResponse_httpStatus :: Lens.Lens' CreateVerifiedAccessTrustProviderResponse Prelude.Int
+createVerifiedAccessTrustProviderResponse_httpStatus = Lens.lens (\CreateVerifiedAccessTrustProviderResponse' {httpStatus} -> httpStatus) (\s@CreateVerifiedAccessTrustProviderResponse' {} a -> s {httpStatus = a} :: CreateVerifiedAccessTrustProviderResponse)
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessTrustProviderResponse
+  where
+  rnf CreateVerifiedAccessTrustProviderResponse' {..} =
+    Prelude.rnf verifiedAccessTrustProvider
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVolume.hs b/gen/Amazonka/EC2/CreateVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVolume.hs
@@ -0,0 +1,584 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an EBS volume that can be attached to an instance in the same
+-- Availability Zone.
+--
+-- You can create a new empty volume or restore a volume from an EBS
+-- snapshot. Any Amazon Web Services Marketplace product codes from the
+-- snapshot are propagated to the volume.
+--
+-- You can create encrypted volumes. Encrypted volumes must be attached to
+-- instances that support Amazon EBS encryption. Volumes that are created
+-- from encrypted snapshots are also automatically encrypted. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- You can tag your volumes during creation. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tag your Amazon EC2 resources>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html Create an Amazon EBS volume>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateVolume
+  ( -- * Creating a Request
+    CreateVolume (..),
+    newCreateVolume,
+
+    -- * Request Lenses
+    createVolume_clientToken,
+    createVolume_dryRun,
+    createVolume_encrypted,
+    createVolume_iops,
+    createVolume_kmsKeyId,
+    createVolume_multiAttachEnabled,
+    createVolume_outpostArn,
+    createVolume_size,
+    createVolume_snapshotId,
+    createVolume_tagSpecifications,
+    createVolume_throughput,
+    createVolume_volumeType,
+    createVolume_availabilityZone,
+
+    -- * Destructuring the Response
+    Volume (..),
+    newVolume,
+
+    -- * Response Lenses
+    volume_attachments,
+    volume_fastRestored,
+    volume_iops,
+    volume_kmsKeyId,
+    volume_multiAttachEnabled,
+    volume_outpostArn,
+    volume_tags,
+    volume_throughput,
+    volume_availabilityZone,
+    volume_createTime,
+    volume_encrypted,
+    volume_size,
+    volume_snapshotId,
+    volume_state,
+    volume_volumeId,
+    volume_volumeType,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVolume' smart constructor.
+data CreateVolume = CreateVolume'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the volume should be encrypted. The effect of setting
+    -- the encryption state to @true@ depends on the volume origin (new or from
+    -- a snapshot), starting encryption state, ownership, and whether
+    -- encryption by default is enabled. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default Encryption by default>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- Encrypted Amazon EBS volumes must be attached to instances that support
+    -- Amazon EBS encryption. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+    -- @io2@ volumes, this represents the number of IOPS that are provisioned
+    -- for the volume. For @gp2@ volumes, this represents the baseline
+    -- performance of the volume and the rate at which the volume accumulates
+    -- I\/O credits for bursting.
+    --
+    -- The following are the supported values for each volume type:
+    --
+    -- -   @gp3@: 3,000-16,000 IOPS
+    --
+    -- -   @io1@: 100-64,000 IOPS
+    --
+    -- -   @io2@: 100-64,000 IOPS
+    --
+    -- @io1@ and @io2@ volumes support up to 64,000 IOPS only on
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+    -- Other instance families support performance up to 32,000 IOPS.
+    --
+    -- This parameter is required for @io1@ and @io2@ volumes. The default for
+    -- @gp3@ volumes is 3,000 IOPS. This parameter is not supported for @gp2@,
+    -- @st1@, @sc1@, or @standard@ volumes.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | The identifier of the Key Management Service (KMS) KMS key to use for
+    -- Amazon EBS encryption. If this parameter is not specified, your KMS key
+    -- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+    -- must be @true@.
+    --
+    -- You can specify the KMS key using any of the following:
+    --
+    -- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Key alias. For example, alias\/ExampleAlias.
+    --
+    -- -   Key ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Alias ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+    --
+    -- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+    -- if you specify an ID, alias, or ARN that is not valid, the action can
+    -- appear to complete, but eventually fails.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to enable Amazon EBS Multi-Attach. If you enable
+    -- Multi-Attach, you can attach the volume to up to 16
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>
+    -- in the same Availability Zone. This parameter is supported with @io1@
+    -- and @io2@ volumes only. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html Amazon EBS Multi-Attach>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    multiAttachEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The size of the volume, in GiBs. You must specify either a snapshot ID
+    -- or a volume size. If you specify a snapshot, the default is the snapshot
+    -- size. You can specify a volume size that is equal to or larger than the
+    -- snapshot size.
+    --
+    -- The following are the supported volumes sizes for each volume type:
+    --
+    -- -   @gp2@ and @gp3@: 1-16,384
+    --
+    -- -   @io1@ and @io2@: 4-16,384
+    --
+    -- -   @st1@ and @sc1@: 125-16,384
+    --
+    -- -   @standard@: 1-1,024
+    size :: Prelude.Maybe Prelude.Int,
+    -- | The snapshot from which to create the volume. You must specify either a
+    -- snapshot ID or a volume size.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the volume during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The throughput to provision for a volume, with a maximum of 1,000
+    -- MiB\/s.
+    --
+    -- This parameter is valid only for @gp3@ volumes.
+    --
+    -- Valid Range: Minimum value of 125. Maximum value of 1000.
+    throughput :: Prelude.Maybe Prelude.Int,
+    -- | The volume type. This parameter can be one of the following values:
+    --
+    -- -   General Purpose SSD: @gp2@ | @gp3@
+    --
+    -- -   Provisioned IOPS SSD: @io1@ | @io2@
+    --
+    -- -   Throughput Optimized HDD: @st1@
+    --
+    -- -   Cold HDD: @sc1@
+    --
+    -- -   Magnetic: @standard@
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- Default: @gp2@
+    volumeType :: Prelude.Maybe VolumeType,
+    -- | The Availability Zone in which to create the volume.
+    availabilityZone :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVolume_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+--
+-- 'dryRun', 'createVolume_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'encrypted', 'createVolume_encrypted' - Indicates whether the volume should be encrypted. The effect of setting
+-- the encryption state to @true@ depends on the volume origin (new or from
+-- a snapshot), starting encryption state, ownership, and whether
+-- encryption by default is enabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default Encryption by default>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Encrypted Amazon EBS volumes must be attached to instances that support
+-- Amazon EBS encryption. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+--
+-- 'iops', 'createVolume_iops' - The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- @io1@ and @io2@ volumes support up to 64,000 IOPS only on
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+-- Other instance families support performance up to 32,000 IOPS.
+--
+-- This parameter is required for @io1@ and @io2@ volumes. The default for
+-- @gp3@ volumes is 3,000 IOPS. This parameter is not supported for @gp2@,
+-- @st1@, @sc1@, or @standard@ volumes.
+--
+-- 'kmsKeyId', 'createVolume_kmsKeyId' - The identifier of the Key Management Service (KMS) KMS key to use for
+-- Amazon EBS encryption. If this parameter is not specified, your KMS key
+-- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+-- must be @true@.
+--
+-- You can specify the KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an ID, alias, or ARN that is not valid, the action can
+-- appear to complete, but eventually fails.
+--
+-- 'multiAttachEnabled', 'createVolume_multiAttachEnabled' - Indicates whether to enable Amazon EBS Multi-Attach. If you enable
+-- Multi-Attach, you can attach the volume to up to 16
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>
+-- in the same Availability Zone. This parameter is supported with @io1@
+-- and @io2@ volumes only. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html Amazon EBS Multi-Attach>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'outpostArn', 'createVolume_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'size', 'createVolume_size' - The size of the volume, in GiBs. You must specify either a snapshot ID
+-- or a volume size. If you specify a snapshot, the default is the snapshot
+-- size. You can specify a volume size that is equal to or larger than the
+-- snapshot size.
+--
+-- The following are the supported volumes sizes for each volume type:
+--
+-- -   @gp2@ and @gp3@: 1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+--
+-- 'snapshotId', 'createVolume_snapshotId' - The snapshot from which to create the volume. You must specify either a
+-- snapshot ID or a volume size.
+--
+-- 'tagSpecifications', 'createVolume_tagSpecifications' - The tags to apply to the volume during creation.
+--
+-- 'throughput', 'createVolume_throughput' - The throughput to provision for a volume, with a maximum of 1,000
+-- MiB\/s.
+--
+-- This parameter is valid only for @gp3@ volumes.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+--
+-- 'volumeType', 'createVolume_volumeType' - The volume type. This parameter can be one of the following values:
+--
+-- -   General Purpose SSD: @gp2@ | @gp3@
+--
+-- -   Provisioned IOPS SSD: @io1@ | @io2@
+--
+-- -   Throughput Optimized HDD: @st1@
+--
+-- -   Cold HDD: @sc1@
+--
+-- -   Magnetic: @standard@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Default: @gp2@
+--
+-- 'availabilityZone', 'createVolume_availabilityZone' - The Availability Zone in which to create the volume.
+newCreateVolume ::
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  CreateVolume
+newCreateVolume pAvailabilityZone_ =
+  CreateVolume'
+    { clientToken = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      multiAttachEnabled = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      size = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeType = Prelude.Nothing,
+      availabilityZone = pAvailabilityZone_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensure Idempotency>.
+createVolume_clientToken :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Text)
+createVolume_clientToken = Lens.lens (\CreateVolume' {clientToken} -> clientToken) (\s@CreateVolume' {} a -> s {clientToken = a} :: CreateVolume)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVolume_dryRun :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Bool)
+createVolume_dryRun = Lens.lens (\CreateVolume' {dryRun} -> dryRun) (\s@CreateVolume' {} a -> s {dryRun = a} :: CreateVolume)
+
+-- | Indicates whether the volume should be encrypted. The effect of setting
+-- the encryption state to @true@ depends on the volume origin (new or from
+-- a snapshot), starting encryption state, ownership, and whether
+-- encryption by default is enabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default Encryption by default>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Encrypted Amazon EBS volumes must be attached to instances that support
+-- Amazon EBS encryption. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+createVolume_encrypted :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Bool)
+createVolume_encrypted = Lens.lens (\CreateVolume' {encrypted} -> encrypted) (\s@CreateVolume' {} a -> s {encrypted = a} :: CreateVolume)
+
+-- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- @io1@ and @io2@ volumes support up to 64,000 IOPS only on
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+-- Other instance families support performance up to 32,000 IOPS.
+--
+-- This parameter is required for @io1@ and @io2@ volumes. The default for
+-- @gp3@ volumes is 3,000 IOPS. This parameter is not supported for @gp2@,
+-- @st1@, @sc1@, or @standard@ volumes.
+createVolume_iops :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Int)
+createVolume_iops = Lens.lens (\CreateVolume' {iops} -> iops) (\s@CreateVolume' {} a -> s {iops = a} :: CreateVolume)
+
+-- | The identifier of the Key Management Service (KMS) KMS key to use for
+-- Amazon EBS encryption. If this parameter is not specified, your KMS key
+-- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+-- must be @true@.
+--
+-- You can specify the KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an ID, alias, or ARN that is not valid, the action can
+-- appear to complete, but eventually fails.
+createVolume_kmsKeyId :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Text)
+createVolume_kmsKeyId = Lens.lens (\CreateVolume' {kmsKeyId} -> kmsKeyId) (\s@CreateVolume' {} a -> s {kmsKeyId = a} :: CreateVolume)
+
+-- | Indicates whether to enable Amazon EBS Multi-Attach. If you enable
+-- Multi-Attach, you can attach the volume to up to 16
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>
+-- in the same Availability Zone. This parameter is supported with @io1@
+-- and @io2@ volumes only. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html Amazon EBS Multi-Attach>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+createVolume_multiAttachEnabled :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Bool)
+createVolume_multiAttachEnabled = Lens.lens (\CreateVolume' {multiAttachEnabled} -> multiAttachEnabled) (\s@CreateVolume' {} a -> s {multiAttachEnabled = a} :: CreateVolume)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+createVolume_outpostArn :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Text)
+createVolume_outpostArn = Lens.lens (\CreateVolume' {outpostArn} -> outpostArn) (\s@CreateVolume' {} a -> s {outpostArn = a} :: CreateVolume)
+
+-- | The size of the volume, in GiBs. You must specify either a snapshot ID
+-- or a volume size. If you specify a snapshot, the default is the snapshot
+-- size. You can specify a volume size that is equal to or larger than the
+-- snapshot size.
+--
+-- The following are the supported volumes sizes for each volume type:
+--
+-- -   @gp2@ and @gp3@: 1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+createVolume_size :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Int)
+createVolume_size = Lens.lens (\CreateVolume' {size} -> size) (\s@CreateVolume' {} a -> s {size = a} :: CreateVolume)
+
+-- | The snapshot from which to create the volume. You must specify either a
+-- snapshot ID or a volume size.
+createVolume_snapshotId :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Text)
+createVolume_snapshotId = Lens.lens (\CreateVolume' {snapshotId} -> snapshotId) (\s@CreateVolume' {} a -> s {snapshotId = a} :: CreateVolume)
+
+-- | The tags to apply to the volume during creation.
+createVolume_tagSpecifications :: Lens.Lens' CreateVolume (Prelude.Maybe [TagSpecification])
+createVolume_tagSpecifications = Lens.lens (\CreateVolume' {tagSpecifications} -> tagSpecifications) (\s@CreateVolume' {} a -> s {tagSpecifications = a} :: CreateVolume) Prelude.. Lens.mapping Lens.coerced
+
+-- | The throughput to provision for a volume, with a maximum of 1,000
+-- MiB\/s.
+--
+-- This parameter is valid only for @gp3@ volumes.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+createVolume_throughput :: Lens.Lens' CreateVolume (Prelude.Maybe Prelude.Int)
+createVolume_throughput = Lens.lens (\CreateVolume' {throughput} -> throughput) (\s@CreateVolume' {} a -> s {throughput = a} :: CreateVolume)
+
+-- | The volume type. This parameter can be one of the following values:
+--
+-- -   General Purpose SSD: @gp2@ | @gp3@
+--
+-- -   Provisioned IOPS SSD: @io1@ | @io2@
+--
+-- -   Throughput Optimized HDD: @st1@
+--
+-- -   Cold HDD: @sc1@
+--
+-- -   Magnetic: @standard@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Default: @gp2@
+createVolume_volumeType :: Lens.Lens' CreateVolume (Prelude.Maybe VolumeType)
+createVolume_volumeType = Lens.lens (\CreateVolume' {volumeType} -> volumeType) (\s@CreateVolume' {} a -> s {volumeType = a} :: CreateVolume)
+
+-- | The Availability Zone in which to create the volume.
+createVolume_availabilityZone :: Lens.Lens' CreateVolume Prelude.Text
+createVolume_availabilityZone = Lens.lens (\CreateVolume' {availabilityZone} -> availabilityZone) (\s@CreateVolume' {} a -> s {availabilityZone = a} :: CreateVolume)
+
+instance Core.AWSRequest CreateVolume where
+  type AWSResponse CreateVolume = Volume
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML (\s h x -> Data.parseXML x)
+
+instance Prelude.Hashable CreateVolume where
+  hashWithSalt _salt CreateVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` multiAttachEnabled
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` throughput
+      `Prelude.hashWithSalt` volumeType
+      `Prelude.hashWithSalt` availabilityZone
+
+instance Prelude.NFData CreateVolume where
+  rnf CreateVolume' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf multiAttachEnabled
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeType
+      `Prelude.seq` Prelude.rnf availabilityZone
+
+instance Data.ToHeaders CreateVolume where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVolume where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVolume where
+  toQuery CreateVolume' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVolume" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "Encrypted" Data.=: encrypted,
+        "Iops" Data.=: iops,
+        "KmsKeyId" Data.=: kmsKeyId,
+        "MultiAttachEnabled" Data.=: multiAttachEnabled,
+        "OutpostArn" Data.=: outpostArn,
+        "Size" Data.=: size,
+        "SnapshotId" Data.=: snapshotId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Throughput" Data.=: throughput,
+        "VolumeType" Data.=: volumeType,
+        "AvailabilityZone" Data.=: availabilityZone
+      ]
diff --git a/gen/Amazonka/EC2/CreateVpc.hs b/gen/Amazonka/EC2/CreateVpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpc.hs
@@ -0,0 +1,459 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a VPC with the specified IPv4 CIDR block. The smallest VPC you
+-- can create uses a \/28 netmask (16 IPv4 addresses), and the largest uses
+-- a \/16 netmask (65,536 IPv4 addresses). For more information about how
+-- large to make your VPC, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html Your VPC and subnets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- You can optionally request an IPv6 CIDR block for the VPC. You can
+-- request an Amazon-provided IPv6 CIDR block from Amazon\'s pool of IPv6
+-- addresses, or an IPv6 CIDR block from an IPv6 address pool that you
+-- provisioned through bring your own IP addresses
+-- (<https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html BYOIP>).
+--
+-- By default, each instance you launch in the VPC has the default DHCP
+-- options, which include only a default DNS server that we provide
+-- (AmazonProvidedDNS). For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html DHCP options sets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- You can specify the instance tenancy value for the VPC when you create
+-- it. You can\'t change this value for the VPC after you create it. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html Dedicated Instances>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.CreateVpc
+  ( -- * Creating a Request
+    CreateVpc (..),
+    newCreateVpc,
+
+    -- * Request Lenses
+    createVpc_amazonProvidedIpv6CidrBlock,
+    createVpc_cidrBlock,
+    createVpc_dryRun,
+    createVpc_instanceTenancy,
+    createVpc_ipv4IpamPoolId,
+    createVpc_ipv4NetmaskLength,
+    createVpc_ipv6CidrBlock,
+    createVpc_ipv6CidrBlockNetworkBorderGroup,
+    createVpc_ipv6IpamPoolId,
+    createVpc_ipv6NetmaskLength,
+    createVpc_ipv6Pool,
+    createVpc_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateVpcResponse (..),
+    newCreateVpcResponse,
+
+    -- * Response Lenses
+    createVpcResponse_vpc,
+    createVpcResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVpc' smart constructor.
+data CreateVpc = CreateVpc'
+  { -- | Requests an Amazon-provided IPv6 CIDR block with a \/56 prefix length
+    -- for the VPC. You cannot specify the range of IP addresses, or the size
+    -- of the CIDR block.
+    amazonProvidedIpv6CidrBlock :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv4 network range for the VPC, in CIDR notation. For example,
+    -- @10.0.0.0\/16@. We modify the specified CIDR block to its canonical
+    -- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+    -- @100.68.0.0\/18@.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tenancy options for instances launched into the VPC. For @default@,
+    -- instances are launched with shared tenancy by default. You can launch
+    -- instances with any tenancy into a shared tenancy VPC. For @dedicated@,
+    -- instances are launched as dedicated tenancy instances by default. You
+    -- can only launch instances with a tenancy of @dedicated@ or @host@ into a
+    -- dedicated tenancy VPC.
+    --
+    -- __Important:__ The @host@ value cannot be used with this parameter. Use
+    -- the @default@ or @dedicated@ values only.
+    --
+    -- Default: @default@
+    instanceTenancy :: Prelude.Maybe Tenancy,
+    -- | The ID of an IPv4 IPAM pool you want to use for allocating this VPC\'s
+    -- CIDR. For more information, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv4IpamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The netmask length of the IPv4 CIDR you want to allocate to this VPC
+    -- from an Amazon VPC IP Address Manager (IPAM) pool. For more information
+    -- about IPAM, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv4NetmaskLength :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 CIDR block from the IPv6 address pool. You must also specify
+    -- @Ipv6Pool@ in the request.
+    --
+    -- To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The name of the location from which we advertise the IPV6 CIDR block.
+    -- Use this parameter to limit the address to this location.
+    --
+    -- You must set @AmazonProvidedIpv6CidrBlock@ to @true@ to use this
+    -- parameter.
+    ipv6CidrBlockNetworkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an IPv6 IPAM pool which will be used to allocate this VPC an
+    -- IPv6 CIDR. IPAM is a VPC feature that you can use to automate your IP
+    -- address management workflows including assigning, tracking,
+    -- troubleshooting, and auditing IP addresses across Amazon Web Services
+    -- Regions and accounts throughout your Amazon Web Services Organization.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv6IpamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The netmask length of the IPv6 CIDR you want to allocate to this VPC
+    -- from an Amazon VPC IP Address Manager (IPAM) pool. For more information
+    -- about IPAM, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+    -- in the /Amazon VPC IPAM User Guide/.
+    ipv6NetmaskLength :: Prelude.Maybe Prelude.Int,
+    -- | The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
+    -- block.
+    ipv6Pool :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the VPC.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amazonProvidedIpv6CidrBlock', 'createVpc_amazonProvidedIpv6CidrBlock' - Requests an Amazon-provided IPv6 CIDR block with a \/56 prefix length
+-- for the VPC. You cannot specify the range of IP addresses, or the size
+-- of the CIDR block.
+--
+-- 'cidrBlock', 'createVpc_cidrBlock' - The IPv4 network range for the VPC, in CIDR notation. For example,
+-- @10.0.0.0\/16@. We modify the specified CIDR block to its canonical
+-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+-- @100.68.0.0\/18@.
+--
+-- 'dryRun', 'createVpc_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceTenancy', 'createVpc_instanceTenancy' - The tenancy options for instances launched into the VPC. For @default@,
+-- instances are launched with shared tenancy by default. You can launch
+-- instances with any tenancy into a shared tenancy VPC. For @dedicated@,
+-- instances are launched as dedicated tenancy instances by default. You
+-- can only launch instances with a tenancy of @dedicated@ or @host@ into a
+-- dedicated tenancy VPC.
+--
+-- __Important:__ The @host@ value cannot be used with this parameter. Use
+-- the @default@ or @dedicated@ values only.
+--
+-- Default: @default@
+--
+-- 'ipv4IpamPoolId', 'createVpc_ipv4IpamPoolId' - The ID of an IPv4 IPAM pool you want to use for allocating this VPC\'s
+-- CIDR. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv4NetmaskLength', 'createVpc_ipv4NetmaskLength' - The netmask length of the IPv4 CIDR you want to allocate to this VPC
+-- from an Amazon VPC IP Address Manager (IPAM) pool. For more information
+-- about IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv6CidrBlock', 'createVpc_ipv6CidrBlock' - The IPv6 CIDR block from the IPv6 address pool. You must also specify
+-- @Ipv6Pool@ in the request.
+--
+-- To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
+--
+-- 'ipv6CidrBlockNetworkBorderGroup', 'createVpc_ipv6CidrBlockNetworkBorderGroup' - The name of the location from which we advertise the IPV6 CIDR block.
+-- Use this parameter to limit the address to this location.
+--
+-- You must set @AmazonProvidedIpv6CidrBlock@ to @true@ to use this
+-- parameter.
+--
+-- 'ipv6IpamPoolId', 'createVpc_ipv6IpamPoolId' - The ID of an IPv6 IPAM pool which will be used to allocate this VPC an
+-- IPv6 CIDR. IPAM is a VPC feature that you can use to automate your IP
+-- address management workflows including assigning, tracking,
+-- troubleshooting, and auditing IP addresses across Amazon Web Services
+-- Regions and accounts throughout your Amazon Web Services Organization.
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv6NetmaskLength', 'createVpc_ipv6NetmaskLength' - The netmask length of the IPv6 CIDR you want to allocate to this VPC
+-- from an Amazon VPC IP Address Manager (IPAM) pool. For more information
+-- about IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipv6Pool', 'createVpc_ipv6Pool' - The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
+-- block.
+--
+-- 'tagSpecifications', 'createVpc_tagSpecifications' - The tags to assign to the VPC.
+newCreateVpc ::
+  CreateVpc
+newCreateVpc =
+  CreateVpc'
+    { amazonProvidedIpv6CidrBlock =
+        Prelude.Nothing,
+      cidrBlock = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      instanceTenancy = Prelude.Nothing,
+      ipv4IpamPoolId = Prelude.Nothing,
+      ipv4NetmaskLength = Prelude.Nothing,
+      ipv6CidrBlock = Prelude.Nothing,
+      ipv6CidrBlockNetworkBorderGroup = Prelude.Nothing,
+      ipv6IpamPoolId = Prelude.Nothing,
+      ipv6NetmaskLength = Prelude.Nothing,
+      ipv6Pool = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | Requests an Amazon-provided IPv6 CIDR block with a \/56 prefix length
+-- for the VPC. You cannot specify the range of IP addresses, or the size
+-- of the CIDR block.
+createVpc_amazonProvidedIpv6CidrBlock :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Bool)
+createVpc_amazonProvidedIpv6CidrBlock = Lens.lens (\CreateVpc' {amazonProvidedIpv6CidrBlock} -> amazonProvidedIpv6CidrBlock) (\s@CreateVpc' {} a -> s {amazonProvidedIpv6CidrBlock = a} :: CreateVpc)
+
+-- | The IPv4 network range for the VPC, in CIDR notation. For example,
+-- @10.0.0.0\/16@. We modify the specified CIDR block to its canonical
+-- form; for example, if you specify @100.68.0.18\/18@, we modify it to
+-- @100.68.0.0\/18@.
+createVpc_cidrBlock :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Text)
+createVpc_cidrBlock = Lens.lens (\CreateVpc' {cidrBlock} -> cidrBlock) (\s@CreateVpc' {} a -> s {cidrBlock = a} :: CreateVpc)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpc_dryRun :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Bool)
+createVpc_dryRun = Lens.lens (\CreateVpc' {dryRun} -> dryRun) (\s@CreateVpc' {} a -> s {dryRun = a} :: CreateVpc)
+
+-- | The tenancy options for instances launched into the VPC. For @default@,
+-- instances are launched with shared tenancy by default. You can launch
+-- instances with any tenancy into a shared tenancy VPC. For @dedicated@,
+-- instances are launched as dedicated tenancy instances by default. You
+-- can only launch instances with a tenancy of @dedicated@ or @host@ into a
+-- dedicated tenancy VPC.
+--
+-- __Important:__ The @host@ value cannot be used with this parameter. Use
+-- the @default@ or @dedicated@ values only.
+--
+-- Default: @default@
+createVpc_instanceTenancy :: Lens.Lens' CreateVpc (Prelude.Maybe Tenancy)
+createVpc_instanceTenancy = Lens.lens (\CreateVpc' {instanceTenancy} -> instanceTenancy) (\s@CreateVpc' {} a -> s {instanceTenancy = a} :: CreateVpc)
+
+-- | The ID of an IPv4 IPAM pool you want to use for allocating this VPC\'s
+-- CIDR. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+createVpc_ipv4IpamPoolId :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Text)
+createVpc_ipv4IpamPoolId = Lens.lens (\CreateVpc' {ipv4IpamPoolId} -> ipv4IpamPoolId) (\s@CreateVpc' {} a -> s {ipv4IpamPoolId = a} :: CreateVpc)
+
+-- | The netmask length of the IPv4 CIDR you want to allocate to this VPC
+-- from an Amazon VPC IP Address Manager (IPAM) pool. For more information
+-- about IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+createVpc_ipv4NetmaskLength :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Int)
+createVpc_ipv4NetmaskLength = Lens.lens (\CreateVpc' {ipv4NetmaskLength} -> ipv4NetmaskLength) (\s@CreateVpc' {} a -> s {ipv4NetmaskLength = a} :: CreateVpc)
+
+-- | The IPv6 CIDR block from the IPv6 address pool. You must also specify
+-- @Ipv6Pool@ in the request.
+--
+-- To let Amazon choose the IPv6 CIDR block for you, omit this parameter.
+createVpc_ipv6CidrBlock :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Text)
+createVpc_ipv6CidrBlock = Lens.lens (\CreateVpc' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@CreateVpc' {} a -> s {ipv6CidrBlock = a} :: CreateVpc)
+
+-- | The name of the location from which we advertise the IPV6 CIDR block.
+-- Use this parameter to limit the address to this location.
+--
+-- You must set @AmazonProvidedIpv6CidrBlock@ to @true@ to use this
+-- parameter.
+createVpc_ipv6CidrBlockNetworkBorderGroup :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Text)
+createVpc_ipv6CidrBlockNetworkBorderGroup = Lens.lens (\CreateVpc' {ipv6CidrBlockNetworkBorderGroup} -> ipv6CidrBlockNetworkBorderGroup) (\s@CreateVpc' {} a -> s {ipv6CidrBlockNetworkBorderGroup = a} :: CreateVpc)
+
+-- | The ID of an IPv6 IPAM pool which will be used to allocate this VPC an
+-- IPv6 CIDR. IPAM is a VPC feature that you can use to automate your IP
+-- address management workflows including assigning, tracking,
+-- troubleshooting, and auditing IP addresses across Amazon Web Services
+-- Regions and accounts throughout your Amazon Web Services Organization.
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+createVpc_ipv6IpamPoolId :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Text)
+createVpc_ipv6IpamPoolId = Lens.lens (\CreateVpc' {ipv6IpamPoolId} -> ipv6IpamPoolId) (\s@CreateVpc' {} a -> s {ipv6IpamPoolId = a} :: CreateVpc)
+
+-- | The netmask length of the IPv6 CIDR you want to allocate to this VPC
+-- from an Amazon VPC IP Address Manager (IPAM) pool. For more information
+-- about IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+createVpc_ipv6NetmaskLength :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Int)
+createVpc_ipv6NetmaskLength = Lens.lens (\CreateVpc' {ipv6NetmaskLength} -> ipv6NetmaskLength) (\s@CreateVpc' {} a -> s {ipv6NetmaskLength = a} :: CreateVpc)
+
+-- | The ID of an IPv6 address pool from which to allocate the IPv6 CIDR
+-- block.
+createVpc_ipv6Pool :: Lens.Lens' CreateVpc (Prelude.Maybe Prelude.Text)
+createVpc_ipv6Pool = Lens.lens (\CreateVpc' {ipv6Pool} -> ipv6Pool) (\s@CreateVpc' {} a -> s {ipv6Pool = a} :: CreateVpc)
+
+-- | The tags to assign to the VPC.
+createVpc_tagSpecifications :: Lens.Lens' CreateVpc (Prelude.Maybe [TagSpecification])
+createVpc_tagSpecifications = Lens.lens (\CreateVpc' {tagSpecifications} -> tagSpecifications) (\s@CreateVpc' {} a -> s {tagSpecifications = a} :: CreateVpc) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateVpc where
+  type AWSResponse CreateVpc = CreateVpcResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpcResponse'
+            Prelude.<$> (x Data..@? "vpc")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpc where
+  hashWithSalt _salt CreateVpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonProvidedIpv6CidrBlock
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceTenancy
+      `Prelude.hashWithSalt` ipv4IpamPoolId
+      `Prelude.hashWithSalt` ipv4NetmaskLength
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` ipv6CidrBlockNetworkBorderGroup
+      `Prelude.hashWithSalt` ipv6IpamPoolId
+      `Prelude.hashWithSalt` ipv6NetmaskLength
+      `Prelude.hashWithSalt` ipv6Pool
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData CreateVpc where
+  rnf CreateVpc' {..} =
+    Prelude.rnf amazonProvidedIpv6CidrBlock
+      `Prelude.seq` Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceTenancy
+      `Prelude.seq` Prelude.rnf ipv4IpamPoolId
+      `Prelude.seq` Prelude.rnf ipv4NetmaskLength
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockNetworkBorderGroup
+      `Prelude.seq` Prelude.rnf ipv6IpamPoolId
+      `Prelude.seq` Prelude.rnf ipv6NetmaskLength
+      `Prelude.seq` Prelude.rnf ipv6Pool
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders CreateVpc where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVpc where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpc where
+  toQuery CreateVpc' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVpc" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AmazonProvidedIpv6CidrBlock"
+          Data.=: amazonProvidedIpv6CidrBlock,
+        "CidrBlock" Data.=: cidrBlock,
+        "DryRun" Data.=: dryRun,
+        "InstanceTenancy" Data.=: instanceTenancy,
+        "Ipv4IpamPoolId" Data.=: ipv4IpamPoolId,
+        "Ipv4NetmaskLength" Data.=: ipv4NetmaskLength,
+        "Ipv6CidrBlock" Data.=: ipv6CidrBlock,
+        "Ipv6CidrBlockNetworkBorderGroup"
+          Data.=: ipv6CidrBlockNetworkBorderGroup,
+        "Ipv6IpamPoolId" Data.=: ipv6IpamPoolId,
+        "Ipv6NetmaskLength" Data.=: ipv6NetmaskLength,
+        "Ipv6Pool" Data.=: ipv6Pool,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateVpcResponse' smart constructor.
+data CreateVpcResponse = CreateVpcResponse'
+  { -- | Information about the VPC.
+    vpc :: Prelude.Maybe Vpc,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpc', 'createVpcResponse_vpc' - Information about the VPC.
+--
+-- 'httpStatus', 'createVpcResponse_httpStatus' - The response's http status code.
+newCreateVpcResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcResponse
+newCreateVpcResponse pHttpStatus_ =
+  CreateVpcResponse'
+    { vpc = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPC.
+createVpcResponse_vpc :: Lens.Lens' CreateVpcResponse (Prelude.Maybe Vpc)
+createVpcResponse_vpc = Lens.lens (\CreateVpcResponse' {vpc} -> vpc) (\s@CreateVpcResponse' {} a -> s {vpc = a} :: CreateVpcResponse)
+
+-- | The response's http status code.
+createVpcResponse_httpStatus :: Lens.Lens' CreateVpcResponse Prelude.Int
+createVpcResponse_httpStatus = Lens.lens (\CreateVpcResponse' {httpStatus} -> httpStatus) (\s@CreateVpcResponse' {} a -> s {httpStatus = a} :: CreateVpcResponse)
+
+instance Prelude.NFData CreateVpcResponse where
+  rnf CreateVpcResponse' {..} =
+    Prelude.rnf vpc
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVpcEndpoint.hs b/gen/Amazonka/EC2/CreateVpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpcEndpoint.hs
@@ -0,0 +1,436 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a VPC endpoint for a specified service. An endpoint enables you
+-- to create a private connection between your VPC and the service. The
+-- service may be provided by Amazon Web Services, an Amazon Web Services
+-- Marketplace Partner, or another Amazon Web Services account. For more
+-- information, see the
+-- <https://docs.aws.amazon.com/vpc/latest/privatelink/ Amazon Web Services PrivateLink Guide>.
+module Amazonka.EC2.CreateVpcEndpoint
+  ( -- * Creating a Request
+    CreateVpcEndpoint (..),
+    newCreateVpcEndpoint,
+
+    -- * Request Lenses
+    createVpcEndpoint_clientToken,
+    createVpcEndpoint_dnsOptions,
+    createVpcEndpoint_dryRun,
+    createVpcEndpoint_ipAddressType,
+    createVpcEndpoint_policyDocument,
+    createVpcEndpoint_privateDnsEnabled,
+    createVpcEndpoint_routeTableIds,
+    createVpcEndpoint_securityGroupIds,
+    createVpcEndpoint_subnetIds,
+    createVpcEndpoint_tagSpecifications,
+    createVpcEndpoint_vpcEndpointType,
+    createVpcEndpoint_vpcId,
+    createVpcEndpoint_serviceName,
+
+    -- * Destructuring the Response
+    CreateVpcEndpointResponse (..),
+    newCreateVpcEndpointResponse,
+
+    -- * Response Lenses
+    createVpcEndpointResponse_clientToken,
+    createVpcEndpointResponse_vpcEndpoint,
+    createVpcEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateVpcEndpoint.
+--
+-- /See:/ 'newCreateVpcEndpoint' smart constructor.
+data CreateVpcEndpoint = CreateVpcEndpoint'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The DNS options for the endpoint.
+    dnsOptions :: Prelude.Maybe DnsOptionsSpecification,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type for the endpoint.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | (Interface and gateway endpoints) A policy to attach to the endpoint
+    -- that controls access to the service. The policy must be in valid JSON
+    -- format. If this parameter is not specified, we attach a default policy
+    -- that allows full access to the service.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | (Interface endpoint) Indicates whether to associate a private hosted
+    -- zone with the specified VPC. The private hosted zone contains a record
+    -- set for the default public DNS name for the service for the Region (for
+    -- example, @kinesis.us-east-1.amazonaws.com@), which resolves to the
+    -- private IP addresses of the endpoint network interfaces in the VPC. This
+    -- enables you to make requests to the default public DNS name for the
+    -- service instead of the public DNS names that are automatically generated
+    -- by the VPC endpoint service.
+    --
+    -- To use a private hosted zone, you must set the following VPC attributes
+    -- to @true@: @enableDnsHostnames@ and @enableDnsSupport@. Use
+    -- ModifyVpcAttribute to set the VPC attributes.
+    --
+    -- Default: @true@
+    privateDnsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | (Gateway endpoint) One or more route table IDs.
+    routeTableIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface endpoint) The ID of one or more security groups to associate
+    -- with the endpoint network interface.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface and Gateway Load Balancer endpoints) The ID of one or more
+    -- subnets in which to create an endpoint network interface. For a Gateway
+    -- Load Balancer endpoint, you can specify one subnet only.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to associate with the endpoint.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The type of endpoint.
+    --
+    -- Default: Gateway
+    vpcEndpointType :: Prelude.Maybe VpcEndpointType,
+    -- | The ID of the VPC in which the endpoint will be used.
+    vpcId :: Prelude.Text,
+    -- | The service name. To get a list of available services, use the
+    -- DescribeVpcEndpointServices request, or get the name from the service
+    -- provider.
+    serviceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVpcEndpoint_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'dnsOptions', 'createVpcEndpoint_dnsOptions' - The DNS options for the endpoint.
+--
+-- 'dryRun', 'createVpcEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipAddressType', 'createVpcEndpoint_ipAddressType' - The IP address type for the endpoint.
+--
+-- 'policyDocument', 'createVpcEndpoint_policyDocument' - (Interface and gateway endpoints) A policy to attach to the endpoint
+-- that controls access to the service. The policy must be in valid JSON
+-- format. If this parameter is not specified, we attach a default policy
+-- that allows full access to the service.
+--
+-- 'privateDnsEnabled', 'createVpcEndpoint_privateDnsEnabled' - (Interface endpoint) Indicates whether to associate a private hosted
+-- zone with the specified VPC. The private hosted zone contains a record
+-- set for the default public DNS name for the service for the Region (for
+-- example, @kinesis.us-east-1.amazonaws.com@), which resolves to the
+-- private IP addresses of the endpoint network interfaces in the VPC. This
+-- enables you to make requests to the default public DNS name for the
+-- service instead of the public DNS names that are automatically generated
+-- by the VPC endpoint service.
+--
+-- To use a private hosted zone, you must set the following VPC attributes
+-- to @true@: @enableDnsHostnames@ and @enableDnsSupport@. Use
+-- ModifyVpcAttribute to set the VPC attributes.
+--
+-- Default: @true@
+--
+-- 'routeTableIds', 'createVpcEndpoint_routeTableIds' - (Gateway endpoint) One or more route table IDs.
+--
+-- 'securityGroupIds', 'createVpcEndpoint_securityGroupIds' - (Interface endpoint) The ID of one or more security groups to associate
+-- with the endpoint network interface.
+--
+-- 'subnetIds', 'createVpcEndpoint_subnetIds' - (Interface and Gateway Load Balancer endpoints) The ID of one or more
+-- subnets in which to create an endpoint network interface. For a Gateway
+-- Load Balancer endpoint, you can specify one subnet only.
+--
+-- 'tagSpecifications', 'createVpcEndpoint_tagSpecifications' - The tags to associate with the endpoint.
+--
+-- 'vpcEndpointType', 'createVpcEndpoint_vpcEndpointType' - The type of endpoint.
+--
+-- Default: Gateway
+--
+-- 'vpcId', 'createVpcEndpoint_vpcId' - The ID of the VPC in which the endpoint will be used.
+--
+-- 'serviceName', 'createVpcEndpoint_serviceName' - The service name. To get a list of available services, use the
+-- DescribeVpcEndpointServices request, or get the name from the service
+-- provider.
+newCreateVpcEndpoint ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  -- | 'serviceName'
+  Prelude.Text ->
+  CreateVpcEndpoint
+newCreateVpcEndpoint pVpcId_ pServiceName_ =
+  CreateVpcEndpoint'
+    { clientToken = Prelude.Nothing,
+      dnsOptions = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      policyDocument = Prelude.Nothing,
+      privateDnsEnabled = Prelude.Nothing,
+      routeTableIds = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcEndpointType = Prelude.Nothing,
+      vpcId = pVpcId_,
+      serviceName = pServiceName_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createVpcEndpoint_clientToken :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe Prelude.Text)
+createVpcEndpoint_clientToken = Lens.lens (\CreateVpcEndpoint' {clientToken} -> clientToken) (\s@CreateVpcEndpoint' {} a -> s {clientToken = a} :: CreateVpcEndpoint)
+
+-- | The DNS options for the endpoint.
+createVpcEndpoint_dnsOptions :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe DnsOptionsSpecification)
+createVpcEndpoint_dnsOptions = Lens.lens (\CreateVpcEndpoint' {dnsOptions} -> dnsOptions) (\s@CreateVpcEndpoint' {} a -> s {dnsOptions = a} :: CreateVpcEndpoint)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpcEndpoint_dryRun :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe Prelude.Bool)
+createVpcEndpoint_dryRun = Lens.lens (\CreateVpcEndpoint' {dryRun} -> dryRun) (\s@CreateVpcEndpoint' {} a -> s {dryRun = a} :: CreateVpcEndpoint)
+
+-- | The IP address type for the endpoint.
+createVpcEndpoint_ipAddressType :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe IpAddressType)
+createVpcEndpoint_ipAddressType = Lens.lens (\CreateVpcEndpoint' {ipAddressType} -> ipAddressType) (\s@CreateVpcEndpoint' {} a -> s {ipAddressType = a} :: CreateVpcEndpoint)
+
+-- | (Interface and gateway endpoints) A policy to attach to the endpoint
+-- that controls access to the service. The policy must be in valid JSON
+-- format. If this parameter is not specified, we attach a default policy
+-- that allows full access to the service.
+createVpcEndpoint_policyDocument :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe Prelude.Text)
+createVpcEndpoint_policyDocument = Lens.lens (\CreateVpcEndpoint' {policyDocument} -> policyDocument) (\s@CreateVpcEndpoint' {} a -> s {policyDocument = a} :: CreateVpcEndpoint)
+
+-- | (Interface endpoint) Indicates whether to associate a private hosted
+-- zone with the specified VPC. The private hosted zone contains a record
+-- set for the default public DNS name for the service for the Region (for
+-- example, @kinesis.us-east-1.amazonaws.com@), which resolves to the
+-- private IP addresses of the endpoint network interfaces in the VPC. This
+-- enables you to make requests to the default public DNS name for the
+-- service instead of the public DNS names that are automatically generated
+-- by the VPC endpoint service.
+--
+-- To use a private hosted zone, you must set the following VPC attributes
+-- to @true@: @enableDnsHostnames@ and @enableDnsSupport@. Use
+-- ModifyVpcAttribute to set the VPC attributes.
+--
+-- Default: @true@
+createVpcEndpoint_privateDnsEnabled :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe Prelude.Bool)
+createVpcEndpoint_privateDnsEnabled = Lens.lens (\CreateVpcEndpoint' {privateDnsEnabled} -> privateDnsEnabled) (\s@CreateVpcEndpoint' {} a -> s {privateDnsEnabled = a} :: CreateVpcEndpoint)
+
+-- | (Gateway endpoint) One or more route table IDs.
+createVpcEndpoint_routeTableIds :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe [Prelude.Text])
+createVpcEndpoint_routeTableIds = Lens.lens (\CreateVpcEndpoint' {routeTableIds} -> routeTableIds) (\s@CreateVpcEndpoint' {} a -> s {routeTableIds = a} :: CreateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface endpoint) The ID of one or more security groups to associate
+-- with the endpoint network interface.
+createVpcEndpoint_securityGroupIds :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe [Prelude.Text])
+createVpcEndpoint_securityGroupIds = Lens.lens (\CreateVpcEndpoint' {securityGroupIds} -> securityGroupIds) (\s@CreateVpcEndpoint' {} a -> s {securityGroupIds = a} :: CreateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface and Gateway Load Balancer endpoints) The ID of one or more
+-- subnets in which to create an endpoint network interface. For a Gateway
+-- Load Balancer endpoint, you can specify one subnet only.
+createVpcEndpoint_subnetIds :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe [Prelude.Text])
+createVpcEndpoint_subnetIds = Lens.lens (\CreateVpcEndpoint' {subnetIds} -> subnetIds) (\s@CreateVpcEndpoint' {} a -> s {subnetIds = a} :: CreateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to associate with the endpoint.
+createVpcEndpoint_tagSpecifications :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe [TagSpecification])
+createVpcEndpoint_tagSpecifications = Lens.lens (\CreateVpcEndpoint' {tagSpecifications} -> tagSpecifications) (\s@CreateVpcEndpoint' {} a -> s {tagSpecifications = a} :: CreateVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of endpoint.
+--
+-- Default: Gateway
+createVpcEndpoint_vpcEndpointType :: Lens.Lens' CreateVpcEndpoint (Prelude.Maybe VpcEndpointType)
+createVpcEndpoint_vpcEndpointType = Lens.lens (\CreateVpcEndpoint' {vpcEndpointType} -> vpcEndpointType) (\s@CreateVpcEndpoint' {} a -> s {vpcEndpointType = a} :: CreateVpcEndpoint)
+
+-- | The ID of the VPC in which the endpoint will be used.
+createVpcEndpoint_vpcId :: Lens.Lens' CreateVpcEndpoint Prelude.Text
+createVpcEndpoint_vpcId = Lens.lens (\CreateVpcEndpoint' {vpcId} -> vpcId) (\s@CreateVpcEndpoint' {} a -> s {vpcId = a} :: CreateVpcEndpoint)
+
+-- | The service name. To get a list of available services, use the
+-- DescribeVpcEndpointServices request, or get the name from the service
+-- provider.
+createVpcEndpoint_serviceName :: Lens.Lens' CreateVpcEndpoint Prelude.Text
+createVpcEndpoint_serviceName = Lens.lens (\CreateVpcEndpoint' {serviceName} -> serviceName) (\s@CreateVpcEndpoint' {} a -> s {serviceName = a} :: CreateVpcEndpoint)
+
+instance Core.AWSRequest CreateVpcEndpoint where
+  type
+    AWSResponse CreateVpcEndpoint =
+      CreateVpcEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpcEndpointResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "vpcEndpoint")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpcEndpoint where
+  hashWithSalt _salt CreateVpcEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dnsOptions
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` privateDnsEnabled
+      `Prelude.hashWithSalt` routeTableIds
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcEndpointType
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` serviceName
+
+instance Prelude.NFData CreateVpcEndpoint where
+  rnf CreateVpcEndpoint' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dnsOptions
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf privateDnsEnabled
+      `Prelude.seq` Prelude.rnf routeTableIds
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcEndpointType
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf serviceName
+
+instance Data.ToHeaders CreateVpcEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVpcEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpcEndpoint where
+  toQuery CreateVpcEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVpcEndpoint" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DnsOptions" Data.=: dnsOptions,
+        "DryRun" Data.=: dryRun,
+        "IpAddressType" Data.=: ipAddressType,
+        "PolicyDocument" Data.=: policyDocument,
+        "PrivateDnsEnabled" Data.=: privateDnsEnabled,
+        Data.toQuery
+          ( Data.toQueryList "RouteTableId"
+              Prelude.<$> routeTableIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        Data.toQuery
+          (Data.toQueryList "SubnetId" Prelude.<$> subnetIds),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcEndpointType" Data.=: vpcEndpointType,
+        "VpcId" Data.=: vpcId,
+        "ServiceName" Data.=: serviceName
+      ]
+
+-- | Contains the output of CreateVpcEndpoint.
+--
+-- /See:/ 'newCreateVpcEndpointResponse' smart constructor.
+data CreateVpcEndpointResponse = CreateVpcEndpointResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the endpoint.
+    vpcEndpoint :: Prelude.Maybe VpcEndpoint,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVpcEndpointResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'vpcEndpoint', 'createVpcEndpointResponse_vpcEndpoint' - Information about the endpoint.
+--
+-- 'httpStatus', 'createVpcEndpointResponse_httpStatus' - The response's http status code.
+newCreateVpcEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcEndpointResponse
+newCreateVpcEndpointResponse pHttpStatus_ =
+  CreateVpcEndpointResponse'
+    { clientToken =
+        Prelude.Nothing,
+      vpcEndpoint = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createVpcEndpointResponse_clientToken :: Lens.Lens' CreateVpcEndpointResponse (Prelude.Maybe Prelude.Text)
+createVpcEndpointResponse_clientToken = Lens.lens (\CreateVpcEndpointResponse' {clientToken} -> clientToken) (\s@CreateVpcEndpointResponse' {} a -> s {clientToken = a} :: CreateVpcEndpointResponse)
+
+-- | Information about the endpoint.
+createVpcEndpointResponse_vpcEndpoint :: Lens.Lens' CreateVpcEndpointResponse (Prelude.Maybe VpcEndpoint)
+createVpcEndpointResponse_vpcEndpoint = Lens.lens (\CreateVpcEndpointResponse' {vpcEndpoint} -> vpcEndpoint) (\s@CreateVpcEndpointResponse' {} a -> s {vpcEndpoint = a} :: CreateVpcEndpointResponse)
+
+-- | The response's http status code.
+createVpcEndpointResponse_httpStatus :: Lens.Lens' CreateVpcEndpointResponse Prelude.Int
+createVpcEndpointResponse_httpStatus = Lens.lens (\CreateVpcEndpointResponse' {httpStatus} -> httpStatus) (\s@CreateVpcEndpointResponse' {} a -> s {httpStatus = a} :: CreateVpcEndpointResponse)
+
+instance Prelude.NFData CreateVpcEndpointResponse where
+  rnf CreateVpcEndpointResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf vpcEndpoint
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVpcEndpointConnectionNotification.hs b/gen/Amazonka/EC2/CreateVpcEndpointConnectionNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpcEndpointConnectionNotification.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpcEndpointConnectionNotification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a connection notification for a specified VPC endpoint or VPC
+-- endpoint service. A connection notification notifies you of specific
+-- endpoint events. You must create an SNS topic to receive notifications.
+-- For more information, see
+-- <https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html Create a Topic>
+-- in the /Amazon Simple Notification Service Developer Guide/.
+--
+-- You can create a connection notification for interface endpoints only.
+module Amazonka.EC2.CreateVpcEndpointConnectionNotification
+  ( -- * Creating a Request
+    CreateVpcEndpointConnectionNotification (..),
+    newCreateVpcEndpointConnectionNotification,
+
+    -- * Request Lenses
+    createVpcEndpointConnectionNotification_clientToken,
+    createVpcEndpointConnectionNotification_dryRun,
+    createVpcEndpointConnectionNotification_serviceId,
+    createVpcEndpointConnectionNotification_vpcEndpointId,
+    createVpcEndpointConnectionNotification_connectionNotificationArn,
+    createVpcEndpointConnectionNotification_connectionEvents,
+
+    -- * Destructuring the Response
+    CreateVpcEndpointConnectionNotificationResponse (..),
+    newCreateVpcEndpointConnectionNotificationResponse,
+
+    -- * Response Lenses
+    createVpcEndpointConnectionNotificationResponse_clientToken,
+    createVpcEndpointConnectionNotificationResponse_connectionNotification,
+    createVpcEndpointConnectionNotificationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVpcEndpointConnectionNotification' smart constructor.
+data CreateVpcEndpointConnectionNotification = CreateVpcEndpointConnectionNotification'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the endpoint service.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the endpoint.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the SNS topic for the notifications.
+    connectionNotificationArn :: Prelude.Text,
+    -- | One or more endpoint events for which to receive notifications. Valid
+    -- values are @Accept@, @Connect@, @Delete@, and @Reject@.
+    connectionEvents :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointConnectionNotification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVpcEndpointConnectionNotification_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'dryRun', 'createVpcEndpointConnectionNotification_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'serviceId', 'createVpcEndpointConnectionNotification_serviceId' - The ID of the endpoint service.
+--
+-- 'vpcEndpointId', 'createVpcEndpointConnectionNotification_vpcEndpointId' - The ID of the endpoint.
+--
+-- 'connectionNotificationArn', 'createVpcEndpointConnectionNotification_connectionNotificationArn' - The ARN of the SNS topic for the notifications.
+--
+-- 'connectionEvents', 'createVpcEndpointConnectionNotification_connectionEvents' - One or more endpoint events for which to receive notifications. Valid
+-- values are @Accept@, @Connect@, @Delete@, and @Reject@.
+newCreateVpcEndpointConnectionNotification ::
+  -- | 'connectionNotificationArn'
+  Prelude.Text ->
+  CreateVpcEndpointConnectionNotification
+newCreateVpcEndpointConnectionNotification
+  pConnectionNotificationArn_ =
+    CreateVpcEndpointConnectionNotification'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        serviceId = Prelude.Nothing,
+        vpcEndpointId = Prelude.Nothing,
+        connectionNotificationArn =
+          pConnectionNotificationArn_,
+        connectionEvents = Prelude.mempty
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+createVpcEndpointConnectionNotification_clientToken :: Lens.Lens' CreateVpcEndpointConnectionNotification (Prelude.Maybe Prelude.Text)
+createVpcEndpointConnectionNotification_clientToken = Lens.lens (\CreateVpcEndpointConnectionNotification' {clientToken} -> clientToken) (\s@CreateVpcEndpointConnectionNotification' {} a -> s {clientToken = a} :: CreateVpcEndpointConnectionNotification)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpcEndpointConnectionNotification_dryRun :: Lens.Lens' CreateVpcEndpointConnectionNotification (Prelude.Maybe Prelude.Bool)
+createVpcEndpointConnectionNotification_dryRun = Lens.lens (\CreateVpcEndpointConnectionNotification' {dryRun} -> dryRun) (\s@CreateVpcEndpointConnectionNotification' {} a -> s {dryRun = a} :: CreateVpcEndpointConnectionNotification)
+
+-- | The ID of the endpoint service.
+createVpcEndpointConnectionNotification_serviceId :: Lens.Lens' CreateVpcEndpointConnectionNotification (Prelude.Maybe Prelude.Text)
+createVpcEndpointConnectionNotification_serviceId = Lens.lens (\CreateVpcEndpointConnectionNotification' {serviceId} -> serviceId) (\s@CreateVpcEndpointConnectionNotification' {} a -> s {serviceId = a} :: CreateVpcEndpointConnectionNotification)
+
+-- | The ID of the endpoint.
+createVpcEndpointConnectionNotification_vpcEndpointId :: Lens.Lens' CreateVpcEndpointConnectionNotification (Prelude.Maybe Prelude.Text)
+createVpcEndpointConnectionNotification_vpcEndpointId = Lens.lens (\CreateVpcEndpointConnectionNotification' {vpcEndpointId} -> vpcEndpointId) (\s@CreateVpcEndpointConnectionNotification' {} a -> s {vpcEndpointId = a} :: CreateVpcEndpointConnectionNotification)
+
+-- | The ARN of the SNS topic for the notifications.
+createVpcEndpointConnectionNotification_connectionNotificationArn :: Lens.Lens' CreateVpcEndpointConnectionNotification Prelude.Text
+createVpcEndpointConnectionNotification_connectionNotificationArn = Lens.lens (\CreateVpcEndpointConnectionNotification' {connectionNotificationArn} -> connectionNotificationArn) (\s@CreateVpcEndpointConnectionNotification' {} a -> s {connectionNotificationArn = a} :: CreateVpcEndpointConnectionNotification)
+
+-- | One or more endpoint events for which to receive notifications. Valid
+-- values are @Accept@, @Connect@, @Delete@, and @Reject@.
+createVpcEndpointConnectionNotification_connectionEvents :: Lens.Lens' CreateVpcEndpointConnectionNotification [Prelude.Text]
+createVpcEndpointConnectionNotification_connectionEvents = Lens.lens (\CreateVpcEndpointConnectionNotification' {connectionEvents} -> connectionEvents) (\s@CreateVpcEndpointConnectionNotification' {} a -> s {connectionEvents = a} :: CreateVpcEndpointConnectionNotification) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    CreateVpcEndpointConnectionNotification
+  where
+  type
+    AWSResponse
+      CreateVpcEndpointConnectionNotification =
+      CreateVpcEndpointConnectionNotificationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpcEndpointConnectionNotificationResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "connectionNotification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateVpcEndpointConnectionNotification
+  where
+  hashWithSalt
+    _salt
+    CreateVpcEndpointConnectionNotification' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` serviceId
+        `Prelude.hashWithSalt` vpcEndpointId
+        `Prelude.hashWithSalt` connectionNotificationArn
+        `Prelude.hashWithSalt` connectionEvents
+
+instance
+  Prelude.NFData
+    CreateVpcEndpointConnectionNotification
+  where
+  rnf CreateVpcEndpointConnectionNotification' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf connectionNotificationArn
+      `Prelude.seq` Prelude.rnf connectionEvents
+
+instance
+  Data.ToHeaders
+    CreateVpcEndpointConnectionNotification
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateVpcEndpointConnectionNotification
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateVpcEndpointConnectionNotification
+  where
+  toQuery CreateVpcEndpointConnectionNotification' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateVpcEndpointConnectionNotification" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "ServiceId" Data.=: serviceId,
+        "VpcEndpointId" Data.=: vpcEndpointId,
+        "ConnectionNotificationArn"
+          Data.=: connectionNotificationArn,
+        Data.toQueryList "ConnectionEvents" connectionEvents
+      ]
+
+-- | /See:/ 'newCreateVpcEndpointConnectionNotificationResponse' smart constructor.
+data CreateVpcEndpointConnectionNotificationResponse = CreateVpcEndpointConnectionNotificationResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the notification.
+    connectionNotification :: Prelude.Maybe ConnectionNotification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointConnectionNotificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVpcEndpointConnectionNotificationResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'connectionNotification', 'createVpcEndpointConnectionNotificationResponse_connectionNotification' - Information about the notification.
+--
+-- 'httpStatus', 'createVpcEndpointConnectionNotificationResponse_httpStatus' - The response's http status code.
+newCreateVpcEndpointConnectionNotificationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcEndpointConnectionNotificationResponse
+newCreateVpcEndpointConnectionNotificationResponse
+  pHttpStatus_ =
+    CreateVpcEndpointConnectionNotificationResponse'
+      { clientToken =
+          Prelude.Nothing,
+        connectionNotification =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createVpcEndpointConnectionNotificationResponse_clientToken :: Lens.Lens' CreateVpcEndpointConnectionNotificationResponse (Prelude.Maybe Prelude.Text)
+createVpcEndpointConnectionNotificationResponse_clientToken = Lens.lens (\CreateVpcEndpointConnectionNotificationResponse' {clientToken} -> clientToken) (\s@CreateVpcEndpointConnectionNotificationResponse' {} a -> s {clientToken = a} :: CreateVpcEndpointConnectionNotificationResponse)
+
+-- | Information about the notification.
+createVpcEndpointConnectionNotificationResponse_connectionNotification :: Lens.Lens' CreateVpcEndpointConnectionNotificationResponse (Prelude.Maybe ConnectionNotification)
+createVpcEndpointConnectionNotificationResponse_connectionNotification = Lens.lens (\CreateVpcEndpointConnectionNotificationResponse' {connectionNotification} -> connectionNotification) (\s@CreateVpcEndpointConnectionNotificationResponse' {} a -> s {connectionNotification = a} :: CreateVpcEndpointConnectionNotificationResponse)
+
+-- | The response's http status code.
+createVpcEndpointConnectionNotificationResponse_httpStatus :: Lens.Lens' CreateVpcEndpointConnectionNotificationResponse Prelude.Int
+createVpcEndpointConnectionNotificationResponse_httpStatus = Lens.lens (\CreateVpcEndpointConnectionNotificationResponse' {httpStatus} -> httpStatus) (\s@CreateVpcEndpointConnectionNotificationResponse' {} a -> s {httpStatus = a} :: CreateVpcEndpointConnectionNotificationResponse)
+
+instance
+  Prelude.NFData
+    CreateVpcEndpointConnectionNotificationResponse
+  where
+  rnf
+    CreateVpcEndpointConnectionNotificationResponse' {..} =
+      Prelude.rnf clientToken
+        `Prelude.seq` Prelude.rnf connectionNotification
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVpcEndpointServiceConfiguration.hs b/gen/Amazonka/EC2/CreateVpcEndpointServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpcEndpointServiceConfiguration.hs
@@ -0,0 +1,356 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpcEndpointServiceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a VPC endpoint service to which service consumers (Amazon Web
+-- Services accounts, IAM users, and IAM roles) can connect.
+--
+-- Before you create an endpoint service, you must create one of the
+-- following for your service:
+--
+-- -   A
+--     <https://docs.aws.amazon.com/elasticloadbalancing/latest/network/ Network Load Balancer>.
+--     Service consumers connect to your service using an interface
+--     endpoint.
+--
+-- -   A
+--     <https://docs.aws.amazon.com/elasticloadbalancing/latest/gateway/ Gateway Load Balancer>.
+--     Service consumers connect to your service using a Gateway Load
+--     Balancer endpoint.
+--
+-- If you set the private DNS name, you must prove that you own the private
+-- DNS domain name.
+--
+-- For more information, see the
+-- <https://docs.aws.amazon.com/vpc/latest/privatelink/ Amazon Web Services PrivateLink Guide>.
+module Amazonka.EC2.CreateVpcEndpointServiceConfiguration
+  ( -- * Creating a Request
+    CreateVpcEndpointServiceConfiguration (..),
+    newCreateVpcEndpointServiceConfiguration,
+
+    -- * Request Lenses
+    createVpcEndpointServiceConfiguration_acceptanceRequired,
+    createVpcEndpointServiceConfiguration_clientToken,
+    createVpcEndpointServiceConfiguration_dryRun,
+    createVpcEndpointServiceConfiguration_gatewayLoadBalancerArns,
+    createVpcEndpointServiceConfiguration_networkLoadBalancerArns,
+    createVpcEndpointServiceConfiguration_privateDnsName,
+    createVpcEndpointServiceConfiguration_supportedIpAddressTypes,
+    createVpcEndpointServiceConfiguration_tagSpecifications,
+
+    -- * Destructuring the Response
+    CreateVpcEndpointServiceConfigurationResponse (..),
+    newCreateVpcEndpointServiceConfigurationResponse,
+
+    -- * Response Lenses
+    createVpcEndpointServiceConfigurationResponse_clientToken,
+    createVpcEndpointServiceConfigurationResponse_serviceConfiguration,
+    createVpcEndpointServiceConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVpcEndpointServiceConfiguration' smart constructor.
+data CreateVpcEndpointServiceConfiguration = CreateVpcEndpointServiceConfiguration'
+  { -- | Indicates whether requests from service consumers to create an endpoint
+    -- to your service must be accepted manually.
+    acceptanceRequired :: Prelude.Maybe Prelude.Bool,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Names (ARNs) of one or more Gateway Load Balancers.
+    gatewayLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Names (ARNs) of one or more Network Load Balancers
+    -- for your service.
+    networkLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface endpoint configuration) The private DNS name to assign to the
+    -- VPC endpoint service.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The supported IP address types. The possible values are @ipv4@ and
+    -- @ipv6@.
+    supportedIpAddressTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to associate with the service.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceptanceRequired', 'createVpcEndpointServiceConfiguration_acceptanceRequired' - Indicates whether requests from service consumers to create an endpoint
+-- to your service must be accepted manually.
+--
+-- 'clientToken', 'createVpcEndpointServiceConfiguration_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+--
+-- 'dryRun', 'createVpcEndpointServiceConfiguration_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'gatewayLoadBalancerArns', 'createVpcEndpointServiceConfiguration_gatewayLoadBalancerArns' - The Amazon Resource Names (ARNs) of one or more Gateway Load Balancers.
+--
+-- 'networkLoadBalancerArns', 'createVpcEndpointServiceConfiguration_networkLoadBalancerArns' - The Amazon Resource Names (ARNs) of one or more Network Load Balancers
+-- for your service.
+--
+-- 'privateDnsName', 'createVpcEndpointServiceConfiguration_privateDnsName' - (Interface endpoint configuration) The private DNS name to assign to the
+-- VPC endpoint service.
+--
+-- 'supportedIpAddressTypes', 'createVpcEndpointServiceConfiguration_supportedIpAddressTypes' - The supported IP address types. The possible values are @ipv4@ and
+-- @ipv6@.
+--
+-- 'tagSpecifications', 'createVpcEndpointServiceConfiguration_tagSpecifications' - The tags to associate with the service.
+newCreateVpcEndpointServiceConfiguration ::
+  CreateVpcEndpointServiceConfiguration
+newCreateVpcEndpointServiceConfiguration =
+  CreateVpcEndpointServiceConfiguration'
+    { acceptanceRequired =
+        Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      gatewayLoadBalancerArns =
+        Prelude.Nothing,
+      networkLoadBalancerArns =
+        Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      supportedIpAddressTypes =
+        Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | Indicates whether requests from service consumers to create an endpoint
+-- to your service must be accepted manually.
+createVpcEndpointServiceConfiguration_acceptanceRequired :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Bool)
+createVpcEndpointServiceConfiguration_acceptanceRequired = Lens.lens (\CreateVpcEndpointServiceConfiguration' {acceptanceRequired} -> acceptanceRequired) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {acceptanceRequired = a} :: CreateVpcEndpointServiceConfiguration)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to ensure idempotency>.
+createVpcEndpointServiceConfiguration_clientToken :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Text)
+createVpcEndpointServiceConfiguration_clientToken = Lens.lens (\CreateVpcEndpointServiceConfiguration' {clientToken} -> clientToken) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {clientToken = a} :: CreateVpcEndpointServiceConfiguration)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpcEndpointServiceConfiguration_dryRun :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Bool)
+createVpcEndpointServiceConfiguration_dryRun = Lens.lens (\CreateVpcEndpointServiceConfiguration' {dryRun} -> dryRun) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {dryRun = a} :: CreateVpcEndpointServiceConfiguration)
+
+-- | The Amazon Resource Names (ARNs) of one or more Gateway Load Balancers.
+createVpcEndpointServiceConfiguration_gatewayLoadBalancerArns :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+createVpcEndpointServiceConfiguration_gatewayLoadBalancerArns = Lens.lens (\CreateVpcEndpointServiceConfiguration' {gatewayLoadBalancerArns} -> gatewayLoadBalancerArns) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {gatewayLoadBalancerArns = a} :: CreateVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of one or more Network Load Balancers
+-- for your service.
+createVpcEndpointServiceConfiguration_networkLoadBalancerArns :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+createVpcEndpointServiceConfiguration_networkLoadBalancerArns = Lens.lens (\CreateVpcEndpointServiceConfiguration' {networkLoadBalancerArns} -> networkLoadBalancerArns) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {networkLoadBalancerArns = a} :: CreateVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface endpoint configuration) The private DNS name to assign to the
+-- VPC endpoint service.
+createVpcEndpointServiceConfiguration_privateDnsName :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Text)
+createVpcEndpointServiceConfiguration_privateDnsName = Lens.lens (\CreateVpcEndpointServiceConfiguration' {privateDnsName} -> privateDnsName) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {privateDnsName = a} :: CreateVpcEndpointServiceConfiguration)
+
+-- | The supported IP address types. The possible values are @ipv4@ and
+-- @ipv6@.
+createVpcEndpointServiceConfiguration_supportedIpAddressTypes :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+createVpcEndpointServiceConfiguration_supportedIpAddressTypes = Lens.lens (\CreateVpcEndpointServiceConfiguration' {supportedIpAddressTypes} -> supportedIpAddressTypes) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {supportedIpAddressTypes = a} :: CreateVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to associate with the service.
+createVpcEndpointServiceConfiguration_tagSpecifications :: Lens.Lens' CreateVpcEndpointServiceConfiguration (Prelude.Maybe [TagSpecification])
+createVpcEndpointServiceConfiguration_tagSpecifications = Lens.lens (\CreateVpcEndpointServiceConfiguration' {tagSpecifications} -> tagSpecifications) (\s@CreateVpcEndpointServiceConfiguration' {} a -> s {tagSpecifications = a} :: CreateVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    CreateVpcEndpointServiceConfiguration
+  where
+  type
+    AWSResponse
+      CreateVpcEndpointServiceConfiguration =
+      CreateVpcEndpointServiceConfigurationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpcEndpointServiceConfigurationResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "serviceConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateVpcEndpointServiceConfiguration
+  where
+  hashWithSalt
+    _salt
+    CreateVpcEndpointServiceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` acceptanceRequired
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` gatewayLoadBalancerArns
+        `Prelude.hashWithSalt` networkLoadBalancerArns
+        `Prelude.hashWithSalt` privateDnsName
+        `Prelude.hashWithSalt` supportedIpAddressTypes
+        `Prelude.hashWithSalt` tagSpecifications
+
+instance
+  Prelude.NFData
+    CreateVpcEndpointServiceConfiguration
+  where
+  rnf CreateVpcEndpointServiceConfiguration' {..} =
+    Prelude.rnf acceptanceRequired
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf gatewayLoadBalancerArns
+      `Prelude.seq` Prelude.rnf networkLoadBalancerArns
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf supportedIpAddressTypes
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance
+  Data.ToHeaders
+    CreateVpcEndpointServiceConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    CreateVpcEndpointServiceConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    CreateVpcEndpointServiceConfiguration
+  where
+  toQuery CreateVpcEndpointServiceConfiguration' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "CreateVpcEndpointServiceConfiguration" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AcceptanceRequired" Data.=: acceptanceRequired,
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "GatewayLoadBalancerArn"
+              Prelude.<$> gatewayLoadBalancerArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "NetworkLoadBalancerArn"
+              Prelude.<$> networkLoadBalancerArns
+          ),
+        "PrivateDnsName" Data.=: privateDnsName,
+        Data.toQuery
+          ( Data.toQueryList "SupportedIpAddressType"
+              Prelude.<$> supportedIpAddressTypes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newCreateVpcEndpointServiceConfigurationResponse' smart constructor.
+data CreateVpcEndpointServiceConfigurationResponse = CreateVpcEndpointServiceConfigurationResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the service configuration.
+    serviceConfiguration :: Prelude.Maybe ServiceConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcEndpointServiceConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createVpcEndpointServiceConfigurationResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+--
+-- 'serviceConfiguration', 'createVpcEndpointServiceConfigurationResponse_serviceConfiguration' - Information about the service configuration.
+--
+-- 'httpStatus', 'createVpcEndpointServiceConfigurationResponse_httpStatus' - The response's http status code.
+newCreateVpcEndpointServiceConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcEndpointServiceConfigurationResponse
+newCreateVpcEndpointServiceConfigurationResponse
+  pHttpStatus_ =
+    CreateVpcEndpointServiceConfigurationResponse'
+      { clientToken =
+          Prelude.Nothing,
+        serviceConfiguration =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request.
+createVpcEndpointServiceConfigurationResponse_clientToken :: Lens.Lens' CreateVpcEndpointServiceConfigurationResponse (Prelude.Maybe Prelude.Text)
+createVpcEndpointServiceConfigurationResponse_clientToken = Lens.lens (\CreateVpcEndpointServiceConfigurationResponse' {clientToken} -> clientToken) (\s@CreateVpcEndpointServiceConfigurationResponse' {} a -> s {clientToken = a} :: CreateVpcEndpointServiceConfigurationResponse)
+
+-- | Information about the service configuration.
+createVpcEndpointServiceConfigurationResponse_serviceConfiguration :: Lens.Lens' CreateVpcEndpointServiceConfigurationResponse (Prelude.Maybe ServiceConfiguration)
+createVpcEndpointServiceConfigurationResponse_serviceConfiguration = Lens.lens (\CreateVpcEndpointServiceConfigurationResponse' {serviceConfiguration} -> serviceConfiguration) (\s@CreateVpcEndpointServiceConfigurationResponse' {} a -> s {serviceConfiguration = a} :: CreateVpcEndpointServiceConfigurationResponse)
+
+-- | The response's http status code.
+createVpcEndpointServiceConfigurationResponse_httpStatus :: Lens.Lens' CreateVpcEndpointServiceConfigurationResponse Prelude.Int
+createVpcEndpointServiceConfigurationResponse_httpStatus = Lens.lens (\CreateVpcEndpointServiceConfigurationResponse' {httpStatus} -> httpStatus) (\s@CreateVpcEndpointServiceConfigurationResponse' {} a -> s {httpStatus = a} :: CreateVpcEndpointServiceConfigurationResponse)
+
+instance
+  Prelude.NFData
+    CreateVpcEndpointServiceConfigurationResponse
+  where
+  rnf
+    CreateVpcEndpointServiceConfigurationResponse' {..} =
+      Prelude.rnf clientToken
+        `Prelude.seq` Prelude.rnf serviceConfiguration
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVpcPeeringConnection.hs b/gen/Amazonka/EC2/CreateVpcPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpcPeeringConnection.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpcPeeringConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Requests a VPC peering connection between two VPCs: a requester VPC that
+-- you own and an accepter VPC with which to create the connection. The
+-- accepter VPC can belong to another Amazon Web Services account and can
+-- be in a different Region to the requester VPC. The requester VPC and
+-- accepter VPC cannot have overlapping CIDR blocks.
+--
+-- Limitations and rules apply to a VPC peering connection. For more
+-- information, see the
+-- <https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-basics.html#vpc-peering-limitations limitations>
+-- section in the /VPC Peering Guide/.
+--
+-- The owner of the accepter VPC must accept the peering request to
+-- activate the peering connection. The VPC peering connection request
+-- expires after 7 days, after which it cannot be accepted or rejected.
+--
+-- If you create a VPC peering connection request between VPCs with
+-- overlapping CIDR blocks, the VPC peering connection has a status of
+-- @failed@.
+module Amazonka.EC2.CreateVpcPeeringConnection
+  ( -- * Creating a Request
+    CreateVpcPeeringConnection (..),
+    newCreateVpcPeeringConnection,
+
+    -- * Request Lenses
+    createVpcPeeringConnection_dryRun,
+    createVpcPeeringConnection_peerOwnerId,
+    createVpcPeeringConnection_peerRegion,
+    createVpcPeeringConnection_peerVpcId,
+    createVpcPeeringConnection_tagSpecifications,
+    createVpcPeeringConnection_vpcId,
+
+    -- * Destructuring the Response
+    CreateVpcPeeringConnectionResponse (..),
+    newCreateVpcPeeringConnectionResponse,
+
+    -- * Response Lenses
+    createVpcPeeringConnectionResponse_vpcPeeringConnection,
+    createVpcPeeringConnectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateVpcPeeringConnection' smart constructor.
+data CreateVpcPeeringConnection = CreateVpcPeeringConnection'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services account ID of the owner of the accepter VPC.
+    --
+    -- Default: Your Amazon Web Services account ID
+    peerOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The Region code for the accepter VPC, if the accepter VPC is located in
+    -- a Region other than the Region in which you make the request.
+    --
+    -- Default: The Region in which you make the request.
+    peerRegion :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC with which you are creating the VPC peering
+    -- connection. You must specify this parameter in the request.
+    peerVpcId :: Prelude.Maybe Prelude.Text,
+    -- | The tags to assign to the peering connection.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the requester VPC. You must specify this parameter in the
+    -- request.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcPeeringConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createVpcPeeringConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'peerOwnerId', 'createVpcPeeringConnection_peerOwnerId' - The Amazon Web Services account ID of the owner of the accepter VPC.
+--
+-- Default: Your Amazon Web Services account ID
+--
+-- 'peerRegion', 'createVpcPeeringConnection_peerRegion' - The Region code for the accepter VPC, if the accepter VPC is located in
+-- a Region other than the Region in which you make the request.
+--
+-- Default: The Region in which you make the request.
+--
+-- 'peerVpcId', 'createVpcPeeringConnection_peerVpcId' - The ID of the VPC with which you are creating the VPC peering
+-- connection. You must specify this parameter in the request.
+--
+-- 'tagSpecifications', 'createVpcPeeringConnection_tagSpecifications' - The tags to assign to the peering connection.
+--
+-- 'vpcId', 'createVpcPeeringConnection_vpcId' - The ID of the requester VPC. You must specify this parameter in the
+-- request.
+newCreateVpcPeeringConnection ::
+  CreateVpcPeeringConnection
+newCreateVpcPeeringConnection =
+  CreateVpcPeeringConnection'
+    { dryRun =
+        Prelude.Nothing,
+      peerOwnerId = Prelude.Nothing,
+      peerRegion = Prelude.Nothing,
+      peerVpcId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpcPeeringConnection_dryRun :: Lens.Lens' CreateVpcPeeringConnection (Prelude.Maybe Prelude.Bool)
+createVpcPeeringConnection_dryRun = Lens.lens (\CreateVpcPeeringConnection' {dryRun} -> dryRun) (\s@CreateVpcPeeringConnection' {} a -> s {dryRun = a} :: CreateVpcPeeringConnection)
+
+-- | The Amazon Web Services account ID of the owner of the accepter VPC.
+--
+-- Default: Your Amazon Web Services account ID
+createVpcPeeringConnection_peerOwnerId :: Lens.Lens' CreateVpcPeeringConnection (Prelude.Maybe Prelude.Text)
+createVpcPeeringConnection_peerOwnerId = Lens.lens (\CreateVpcPeeringConnection' {peerOwnerId} -> peerOwnerId) (\s@CreateVpcPeeringConnection' {} a -> s {peerOwnerId = a} :: CreateVpcPeeringConnection)
+
+-- | The Region code for the accepter VPC, if the accepter VPC is located in
+-- a Region other than the Region in which you make the request.
+--
+-- Default: The Region in which you make the request.
+createVpcPeeringConnection_peerRegion :: Lens.Lens' CreateVpcPeeringConnection (Prelude.Maybe Prelude.Text)
+createVpcPeeringConnection_peerRegion = Lens.lens (\CreateVpcPeeringConnection' {peerRegion} -> peerRegion) (\s@CreateVpcPeeringConnection' {} a -> s {peerRegion = a} :: CreateVpcPeeringConnection)
+
+-- | The ID of the VPC with which you are creating the VPC peering
+-- connection. You must specify this parameter in the request.
+createVpcPeeringConnection_peerVpcId :: Lens.Lens' CreateVpcPeeringConnection (Prelude.Maybe Prelude.Text)
+createVpcPeeringConnection_peerVpcId = Lens.lens (\CreateVpcPeeringConnection' {peerVpcId} -> peerVpcId) (\s@CreateVpcPeeringConnection' {} a -> s {peerVpcId = a} :: CreateVpcPeeringConnection)
+
+-- | The tags to assign to the peering connection.
+createVpcPeeringConnection_tagSpecifications :: Lens.Lens' CreateVpcPeeringConnection (Prelude.Maybe [TagSpecification])
+createVpcPeeringConnection_tagSpecifications = Lens.lens (\CreateVpcPeeringConnection' {tagSpecifications} -> tagSpecifications) (\s@CreateVpcPeeringConnection' {} a -> s {tagSpecifications = a} :: CreateVpcPeeringConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the requester VPC. You must specify this parameter in the
+-- request.
+createVpcPeeringConnection_vpcId :: Lens.Lens' CreateVpcPeeringConnection (Prelude.Maybe Prelude.Text)
+createVpcPeeringConnection_vpcId = Lens.lens (\CreateVpcPeeringConnection' {vpcId} -> vpcId) (\s@CreateVpcPeeringConnection' {} a -> s {vpcId = a} :: CreateVpcPeeringConnection)
+
+instance Core.AWSRequest CreateVpcPeeringConnection where
+  type
+    AWSResponse CreateVpcPeeringConnection =
+      CreateVpcPeeringConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpcPeeringConnectionResponse'
+            Prelude.<$> (x Data..@? "vpcPeeringConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpcPeeringConnection where
+  hashWithSalt _salt CreateVpcPeeringConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` peerOwnerId
+      `Prelude.hashWithSalt` peerRegion
+      `Prelude.hashWithSalt` peerVpcId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CreateVpcPeeringConnection where
+  rnf CreateVpcPeeringConnection' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf peerOwnerId
+      `Prelude.seq` Prelude.rnf peerRegion
+      `Prelude.seq` Prelude.rnf peerVpcId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders CreateVpcPeeringConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVpcPeeringConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpcPeeringConnection where
+  toQuery CreateVpcPeeringConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVpcPeeringConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PeerOwnerId" Data.=: peerOwnerId,
+        "PeerRegion" Data.=: peerRegion,
+        "PeerVpcId" Data.=: peerVpcId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newCreateVpcPeeringConnectionResponse' smart constructor.
+data CreateVpcPeeringConnectionResponse = CreateVpcPeeringConnectionResponse'
+  { -- | Information about the VPC peering connection.
+    vpcPeeringConnection :: Prelude.Maybe VpcPeeringConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpcPeeringConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcPeeringConnection', 'createVpcPeeringConnectionResponse_vpcPeeringConnection' - Information about the VPC peering connection.
+--
+-- 'httpStatus', 'createVpcPeeringConnectionResponse_httpStatus' - The response's http status code.
+newCreateVpcPeeringConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpcPeeringConnectionResponse
+newCreateVpcPeeringConnectionResponse pHttpStatus_ =
+  CreateVpcPeeringConnectionResponse'
+    { vpcPeeringConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPC peering connection.
+createVpcPeeringConnectionResponse_vpcPeeringConnection :: Lens.Lens' CreateVpcPeeringConnectionResponse (Prelude.Maybe VpcPeeringConnection)
+createVpcPeeringConnectionResponse_vpcPeeringConnection = Lens.lens (\CreateVpcPeeringConnectionResponse' {vpcPeeringConnection} -> vpcPeeringConnection) (\s@CreateVpcPeeringConnectionResponse' {} a -> s {vpcPeeringConnection = a} :: CreateVpcPeeringConnectionResponse)
+
+-- | The response's http status code.
+createVpcPeeringConnectionResponse_httpStatus :: Lens.Lens' CreateVpcPeeringConnectionResponse Prelude.Int
+createVpcPeeringConnectionResponse_httpStatus = Lens.lens (\CreateVpcPeeringConnectionResponse' {httpStatus} -> httpStatus) (\s@CreateVpcPeeringConnectionResponse' {} a -> s {httpStatus = a} :: CreateVpcPeeringConnectionResponse)
+
+instance
+  Prelude.NFData
+    CreateVpcPeeringConnectionResponse
+  where
+  rnf CreateVpcPeeringConnectionResponse' {..} =
+    Prelude.rnf vpcPeeringConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVpnConnection.hs b/gen/Amazonka/EC2/CreateVpnConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpnConnection.hs
@@ -0,0 +1,282 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpnConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a VPN connection between an existing virtual private gateway or
+-- transit gateway and a customer gateway. The supported connection type is
+-- @ipsec.1@.
+--
+-- The response includes information that you need to give to your network
+-- administrator to configure your customer gateway.
+--
+-- We strongly recommend that you use HTTPS when calling this operation
+-- because the response contains sensitive cryptographic information for
+-- configuring your customer gateway device.
+--
+-- If you decide to shut down your VPN connection for any reason and later
+-- create a new VPN connection, you must reconfigure your customer gateway
+-- with the new information returned from this call.
+--
+-- This is an idempotent operation. If you perform the operation more than
+-- once, Amazon EC2 doesn\'t return an error.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.CreateVpnConnection
+  ( -- * Creating a Request
+    CreateVpnConnection (..),
+    newCreateVpnConnection,
+
+    -- * Request Lenses
+    createVpnConnection_dryRun,
+    createVpnConnection_options,
+    createVpnConnection_tagSpecifications,
+    createVpnConnection_transitGatewayId,
+    createVpnConnection_vpnGatewayId,
+    createVpnConnection_customerGatewayId,
+    createVpnConnection_type,
+
+    -- * Destructuring the Response
+    CreateVpnConnectionResponse (..),
+    newCreateVpnConnectionResponse,
+
+    -- * Response Lenses
+    createVpnConnectionResponse_vpnConnection,
+    createVpnConnectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateVpnConnection.
+--
+-- /See:/ 'newCreateVpnConnection' smart constructor.
+data CreateVpnConnection = CreateVpnConnection'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The options for the VPN connection.
+    options :: Prelude.Maybe VpnConnectionOptionsSpecification,
+    -- | The tags to apply to the VPN connection.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the transit gateway. If you specify a transit gateway, you
+    -- cannot specify a virtual private gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the virtual private gateway. If you specify a virtual private
+    -- gateway, you cannot specify a transit gateway.
+    vpnGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the customer gateway.
+    customerGatewayId :: Prelude.Text,
+    -- | The type of VPN connection (@ipsec.1@).
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpnConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createVpnConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'createVpnConnection_options' - The options for the VPN connection.
+--
+-- 'tagSpecifications', 'createVpnConnection_tagSpecifications' - The tags to apply to the VPN connection.
+--
+-- 'transitGatewayId', 'createVpnConnection_transitGatewayId' - The ID of the transit gateway. If you specify a transit gateway, you
+-- cannot specify a virtual private gateway.
+--
+-- 'vpnGatewayId', 'createVpnConnection_vpnGatewayId' - The ID of the virtual private gateway. If you specify a virtual private
+-- gateway, you cannot specify a transit gateway.
+--
+-- 'customerGatewayId', 'createVpnConnection_customerGatewayId' - The ID of the customer gateway.
+--
+-- 'type'', 'createVpnConnection_type' - The type of VPN connection (@ipsec.1@).
+newCreateVpnConnection ::
+  -- | 'customerGatewayId'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  CreateVpnConnection
+newCreateVpnConnection pCustomerGatewayId_ pType_ =
+  CreateVpnConnection'
+    { dryRun = Prelude.Nothing,
+      options = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpnGatewayId = Prelude.Nothing,
+      customerGatewayId = pCustomerGatewayId_,
+      type' = pType_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpnConnection_dryRun :: Lens.Lens' CreateVpnConnection (Prelude.Maybe Prelude.Bool)
+createVpnConnection_dryRun = Lens.lens (\CreateVpnConnection' {dryRun} -> dryRun) (\s@CreateVpnConnection' {} a -> s {dryRun = a} :: CreateVpnConnection)
+
+-- | The options for the VPN connection.
+createVpnConnection_options :: Lens.Lens' CreateVpnConnection (Prelude.Maybe VpnConnectionOptionsSpecification)
+createVpnConnection_options = Lens.lens (\CreateVpnConnection' {options} -> options) (\s@CreateVpnConnection' {} a -> s {options = a} :: CreateVpnConnection)
+
+-- | The tags to apply to the VPN connection.
+createVpnConnection_tagSpecifications :: Lens.Lens' CreateVpnConnection (Prelude.Maybe [TagSpecification])
+createVpnConnection_tagSpecifications = Lens.lens (\CreateVpnConnection' {tagSpecifications} -> tagSpecifications) (\s@CreateVpnConnection' {} a -> s {tagSpecifications = a} :: CreateVpnConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway. If you specify a transit gateway, you
+-- cannot specify a virtual private gateway.
+createVpnConnection_transitGatewayId :: Lens.Lens' CreateVpnConnection (Prelude.Maybe Prelude.Text)
+createVpnConnection_transitGatewayId = Lens.lens (\CreateVpnConnection' {transitGatewayId} -> transitGatewayId) (\s@CreateVpnConnection' {} a -> s {transitGatewayId = a} :: CreateVpnConnection)
+
+-- | The ID of the virtual private gateway. If you specify a virtual private
+-- gateway, you cannot specify a transit gateway.
+createVpnConnection_vpnGatewayId :: Lens.Lens' CreateVpnConnection (Prelude.Maybe Prelude.Text)
+createVpnConnection_vpnGatewayId = Lens.lens (\CreateVpnConnection' {vpnGatewayId} -> vpnGatewayId) (\s@CreateVpnConnection' {} a -> s {vpnGatewayId = a} :: CreateVpnConnection)
+
+-- | The ID of the customer gateway.
+createVpnConnection_customerGatewayId :: Lens.Lens' CreateVpnConnection Prelude.Text
+createVpnConnection_customerGatewayId = Lens.lens (\CreateVpnConnection' {customerGatewayId} -> customerGatewayId) (\s@CreateVpnConnection' {} a -> s {customerGatewayId = a} :: CreateVpnConnection)
+
+-- | The type of VPN connection (@ipsec.1@).
+createVpnConnection_type :: Lens.Lens' CreateVpnConnection Prelude.Text
+createVpnConnection_type = Lens.lens (\CreateVpnConnection' {type'} -> type') (\s@CreateVpnConnection' {} a -> s {type' = a} :: CreateVpnConnection)
+
+instance Core.AWSRequest CreateVpnConnection where
+  type
+    AWSResponse CreateVpnConnection =
+      CreateVpnConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpnConnectionResponse'
+            Prelude.<$> (x Data..@? "vpnConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpnConnection where
+  hashWithSalt _salt CreateVpnConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpnGatewayId
+      `Prelude.hashWithSalt` customerGatewayId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateVpnConnection where
+  rnf CreateVpnConnection' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpnGatewayId
+      `Prelude.seq` Prelude.rnf customerGatewayId
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateVpnConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVpnConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpnConnection where
+  toQuery CreateVpnConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVpnConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TransitGatewayId" Data.=: transitGatewayId,
+        "VpnGatewayId" Data.=: vpnGatewayId,
+        "CustomerGatewayId" Data.=: customerGatewayId,
+        "Type" Data.=: type'
+      ]
+
+-- | Contains the output of CreateVpnConnection.
+--
+-- /See:/ 'newCreateVpnConnectionResponse' smart constructor.
+data CreateVpnConnectionResponse = CreateVpnConnectionResponse'
+  { -- | Information about the VPN connection.
+    vpnConnection :: Prelude.Maybe VpnConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpnConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnection', 'createVpnConnectionResponse_vpnConnection' - Information about the VPN connection.
+--
+-- 'httpStatus', 'createVpnConnectionResponse_httpStatus' - The response's http status code.
+newCreateVpnConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpnConnectionResponse
+newCreateVpnConnectionResponse pHttpStatus_ =
+  CreateVpnConnectionResponse'
+    { vpnConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPN connection.
+createVpnConnectionResponse_vpnConnection :: Lens.Lens' CreateVpnConnectionResponse (Prelude.Maybe VpnConnection)
+createVpnConnectionResponse_vpnConnection = Lens.lens (\CreateVpnConnectionResponse' {vpnConnection} -> vpnConnection) (\s@CreateVpnConnectionResponse' {} a -> s {vpnConnection = a} :: CreateVpnConnectionResponse)
+
+-- | The response's http status code.
+createVpnConnectionResponse_httpStatus :: Lens.Lens' CreateVpnConnectionResponse Prelude.Int
+createVpnConnectionResponse_httpStatus = Lens.lens (\CreateVpnConnectionResponse' {httpStatus} -> httpStatus) (\s@CreateVpnConnectionResponse' {} a -> s {httpStatus = a} :: CreateVpnConnectionResponse)
+
+instance Prelude.NFData CreateVpnConnectionResponse where
+  rnf CreateVpnConnectionResponse' {..} =
+    Prelude.rnf vpnConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/CreateVpnConnectionRoute.hs b/gen/Amazonka/EC2/CreateVpnConnectionRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpnConnectionRoute.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpnConnectionRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a static route associated with a VPN connection between an
+-- existing virtual private gateway and a VPN customer gateway. The static
+-- route allows traffic to be routed from the virtual private gateway to
+-- the VPN customer gateway.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.CreateVpnConnectionRoute
+  ( -- * Creating a Request
+    CreateVpnConnectionRoute (..),
+    newCreateVpnConnectionRoute,
+
+    -- * Request Lenses
+    createVpnConnectionRoute_destinationCidrBlock,
+    createVpnConnectionRoute_vpnConnectionId,
+
+    -- * Destructuring the Response
+    CreateVpnConnectionRouteResponse (..),
+    newCreateVpnConnectionRouteResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateVpnConnectionRoute.
+--
+-- /See:/ 'newCreateVpnConnectionRoute' smart constructor.
+data CreateVpnConnectionRoute = CreateVpnConnectionRoute'
+  { -- | The CIDR block associated with the local subnet of the customer network.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the VPN connection.
+    vpnConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpnConnectionRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidrBlock', 'createVpnConnectionRoute_destinationCidrBlock' - The CIDR block associated with the local subnet of the customer network.
+--
+-- 'vpnConnectionId', 'createVpnConnectionRoute_vpnConnectionId' - The ID of the VPN connection.
+newCreateVpnConnectionRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  CreateVpnConnectionRoute
+newCreateVpnConnectionRoute
+  pDestinationCidrBlock_
+  pVpnConnectionId_ =
+    CreateVpnConnectionRoute'
+      { destinationCidrBlock =
+          pDestinationCidrBlock_,
+        vpnConnectionId = pVpnConnectionId_
+      }
+
+-- | The CIDR block associated with the local subnet of the customer network.
+createVpnConnectionRoute_destinationCidrBlock :: Lens.Lens' CreateVpnConnectionRoute Prelude.Text
+createVpnConnectionRoute_destinationCidrBlock = Lens.lens (\CreateVpnConnectionRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@CreateVpnConnectionRoute' {} a -> s {destinationCidrBlock = a} :: CreateVpnConnectionRoute)
+
+-- | The ID of the VPN connection.
+createVpnConnectionRoute_vpnConnectionId :: Lens.Lens' CreateVpnConnectionRoute Prelude.Text
+createVpnConnectionRoute_vpnConnectionId = Lens.lens (\CreateVpnConnectionRoute' {vpnConnectionId} -> vpnConnectionId) (\s@CreateVpnConnectionRoute' {} a -> s {vpnConnectionId = a} :: CreateVpnConnectionRoute)
+
+instance Core.AWSRequest CreateVpnConnectionRoute where
+  type
+    AWSResponse CreateVpnConnectionRoute =
+      CreateVpnConnectionRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      CreateVpnConnectionRouteResponse'
+
+instance Prelude.Hashable CreateVpnConnectionRoute where
+  hashWithSalt _salt CreateVpnConnectionRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` vpnConnectionId
+
+instance Prelude.NFData CreateVpnConnectionRoute where
+  rnf CreateVpnConnectionRoute' {..} =
+    Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+
+instance Data.ToHeaders CreateVpnConnectionRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVpnConnectionRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpnConnectionRoute where
+  toQuery CreateVpnConnectionRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVpnConnectionRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "VpnConnectionId" Data.=: vpnConnectionId
+      ]
+
+-- | /See:/ 'newCreateVpnConnectionRouteResponse' smart constructor.
+data CreateVpnConnectionRouteResponse = CreateVpnConnectionRouteResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpnConnectionRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateVpnConnectionRouteResponse ::
+  CreateVpnConnectionRouteResponse
+newCreateVpnConnectionRouteResponse =
+  CreateVpnConnectionRouteResponse'
+
+instance
+  Prelude.NFData
+    CreateVpnConnectionRouteResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/CreateVpnGateway.hs b/gen/Amazonka/EC2/CreateVpnGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/CreateVpnGateway.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.CreateVpnGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a virtual private gateway. A virtual private gateway is the
+-- endpoint on the VPC side of your VPN connection. You can create a
+-- virtual private gateway before creating the VPC itself.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.CreateVpnGateway
+  ( -- * Creating a Request
+    CreateVpnGateway (..),
+    newCreateVpnGateway,
+
+    -- * Request Lenses
+    createVpnGateway_amazonSideAsn,
+    createVpnGateway_availabilityZone,
+    createVpnGateway_dryRun,
+    createVpnGateway_tagSpecifications,
+    createVpnGateway_type,
+
+    -- * Destructuring the Response
+    CreateVpnGatewayResponse (..),
+    newCreateVpnGatewayResponse,
+
+    -- * Response Lenses
+    createVpnGatewayResponse_vpnGateway,
+    createVpnGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for CreateVpnGateway.
+--
+-- /See:/ 'newCreateVpnGateway' smart constructor.
+data CreateVpnGateway = CreateVpnGateway'
+  { -- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+    -- session. If you\'re using a 16-bit ASN, it must be in the 64512 to 65534
+    -- range. If you\'re using a 32-bit ASN, it must be in the 4200000000 to
+    -- 4294967294 range.
+    --
+    -- Default: 64512
+    amazonSideAsn :: Prelude.Maybe Prelude.Integer,
+    -- | The Availability Zone for the virtual private gateway.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the virtual private gateway.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The type of VPN connection this virtual private gateway supports.
+    type' :: GatewayType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpnGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amazonSideAsn', 'createVpnGateway_amazonSideAsn' - A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. If you\'re using a 16-bit ASN, it must be in the 64512 to 65534
+-- range. If you\'re using a 32-bit ASN, it must be in the 4200000000 to
+-- 4294967294 range.
+--
+-- Default: 64512
+--
+-- 'availabilityZone', 'createVpnGateway_availabilityZone' - The Availability Zone for the virtual private gateway.
+--
+-- 'dryRun', 'createVpnGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'createVpnGateway_tagSpecifications' - The tags to apply to the virtual private gateway.
+--
+-- 'type'', 'createVpnGateway_type' - The type of VPN connection this virtual private gateway supports.
+newCreateVpnGateway ::
+  -- | 'type''
+  GatewayType ->
+  CreateVpnGateway
+newCreateVpnGateway pType_ =
+  CreateVpnGateway'
+    { amazonSideAsn = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. If you\'re using a 16-bit ASN, it must be in the 64512 to 65534
+-- range. If you\'re using a 32-bit ASN, it must be in the 4200000000 to
+-- 4294967294 range.
+--
+-- Default: 64512
+createVpnGateway_amazonSideAsn :: Lens.Lens' CreateVpnGateway (Prelude.Maybe Prelude.Integer)
+createVpnGateway_amazonSideAsn = Lens.lens (\CreateVpnGateway' {amazonSideAsn} -> amazonSideAsn) (\s@CreateVpnGateway' {} a -> s {amazonSideAsn = a} :: CreateVpnGateway)
+
+-- | The Availability Zone for the virtual private gateway.
+createVpnGateway_availabilityZone :: Lens.Lens' CreateVpnGateway (Prelude.Maybe Prelude.Text)
+createVpnGateway_availabilityZone = Lens.lens (\CreateVpnGateway' {availabilityZone} -> availabilityZone) (\s@CreateVpnGateway' {} a -> s {availabilityZone = a} :: CreateVpnGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createVpnGateway_dryRun :: Lens.Lens' CreateVpnGateway (Prelude.Maybe Prelude.Bool)
+createVpnGateway_dryRun = Lens.lens (\CreateVpnGateway' {dryRun} -> dryRun) (\s@CreateVpnGateway' {} a -> s {dryRun = a} :: CreateVpnGateway)
+
+-- | The tags to apply to the virtual private gateway.
+createVpnGateway_tagSpecifications :: Lens.Lens' CreateVpnGateway (Prelude.Maybe [TagSpecification])
+createVpnGateway_tagSpecifications = Lens.lens (\CreateVpnGateway' {tagSpecifications} -> tagSpecifications) (\s@CreateVpnGateway' {} a -> s {tagSpecifications = a} :: CreateVpnGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of VPN connection this virtual private gateway supports.
+createVpnGateway_type :: Lens.Lens' CreateVpnGateway GatewayType
+createVpnGateway_type = Lens.lens (\CreateVpnGateway' {type'} -> type') (\s@CreateVpnGateway' {} a -> s {type' = a} :: CreateVpnGateway)
+
+instance Core.AWSRequest CreateVpnGateway where
+  type
+    AWSResponse CreateVpnGateway =
+      CreateVpnGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          CreateVpnGatewayResponse'
+            Prelude.<$> (x Data..@? "vpnGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateVpnGateway where
+  hashWithSalt _salt CreateVpnGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonSideAsn
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CreateVpnGateway where
+  rnf CreateVpnGateway' {..} =
+    Prelude.rnf amazonSideAsn
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders CreateVpnGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateVpnGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateVpnGateway where
+  toQuery CreateVpnGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateVpnGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AmazonSideAsn" Data.=: amazonSideAsn,
+        "AvailabilityZone" Data.=: availabilityZone,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Type" Data.=: type'
+      ]
+
+-- | Contains the output of CreateVpnGateway.
+--
+-- /See:/ 'newCreateVpnGatewayResponse' smart constructor.
+data CreateVpnGatewayResponse = CreateVpnGatewayResponse'
+  { -- | Information about the virtual private gateway.
+    vpnGateway :: Prelude.Maybe VpnGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVpnGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnGateway', 'createVpnGatewayResponse_vpnGateway' - Information about the virtual private gateway.
+--
+-- 'httpStatus', 'createVpnGatewayResponse_httpStatus' - The response's http status code.
+newCreateVpnGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateVpnGatewayResponse
+newCreateVpnGatewayResponse pHttpStatus_ =
+  CreateVpnGatewayResponse'
+    { vpnGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the virtual private gateway.
+createVpnGatewayResponse_vpnGateway :: Lens.Lens' CreateVpnGatewayResponse (Prelude.Maybe VpnGateway)
+createVpnGatewayResponse_vpnGateway = Lens.lens (\CreateVpnGatewayResponse' {vpnGateway} -> vpnGateway) (\s@CreateVpnGatewayResponse' {} a -> s {vpnGateway = a} :: CreateVpnGatewayResponse)
+
+-- | The response's http status code.
+createVpnGatewayResponse_httpStatus :: Lens.Lens' CreateVpnGatewayResponse Prelude.Int
+createVpnGatewayResponse_httpStatus = Lens.lens (\CreateVpnGatewayResponse' {httpStatus} -> httpStatus) (\s@CreateVpnGatewayResponse' {} a -> s {httpStatus = a} :: CreateVpnGatewayResponse)
+
+instance Prelude.NFData CreateVpnGatewayResponse where
+  rnf CreateVpnGatewayResponse' {..} =
+    Prelude.rnf vpnGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteCarrierGateway.hs b/gen/Amazonka/EC2/DeleteCarrierGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteCarrierGateway.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteCarrierGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a carrier gateway.
+--
+-- If you do not delete the route that contains the carrier gateway as the
+-- Target, the route is a blackhole route. For information about how to
+-- delete a route, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteRoute.html DeleteRoute>.
+module Amazonka.EC2.DeleteCarrierGateway
+  ( -- * Creating a Request
+    DeleteCarrierGateway (..),
+    newDeleteCarrierGateway,
+
+    -- * Request Lenses
+    deleteCarrierGateway_dryRun,
+    deleteCarrierGateway_carrierGatewayId,
+
+    -- * Destructuring the Response
+    DeleteCarrierGatewayResponse (..),
+    newDeleteCarrierGatewayResponse,
+
+    -- * Response Lenses
+    deleteCarrierGatewayResponse_carrierGateway,
+    deleteCarrierGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCarrierGateway' smart constructor.
+data DeleteCarrierGateway = DeleteCarrierGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the carrier gateway.
+    carrierGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCarrierGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteCarrierGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'carrierGatewayId', 'deleteCarrierGateway_carrierGatewayId' - The ID of the carrier gateway.
+newDeleteCarrierGateway ::
+  -- | 'carrierGatewayId'
+  Prelude.Text ->
+  DeleteCarrierGateway
+newDeleteCarrierGateway pCarrierGatewayId_ =
+  DeleteCarrierGateway'
+    { dryRun = Prelude.Nothing,
+      carrierGatewayId = pCarrierGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteCarrierGateway_dryRun :: Lens.Lens' DeleteCarrierGateway (Prelude.Maybe Prelude.Bool)
+deleteCarrierGateway_dryRun = Lens.lens (\DeleteCarrierGateway' {dryRun} -> dryRun) (\s@DeleteCarrierGateway' {} a -> s {dryRun = a} :: DeleteCarrierGateway)
+
+-- | The ID of the carrier gateway.
+deleteCarrierGateway_carrierGatewayId :: Lens.Lens' DeleteCarrierGateway Prelude.Text
+deleteCarrierGateway_carrierGatewayId = Lens.lens (\DeleteCarrierGateway' {carrierGatewayId} -> carrierGatewayId) (\s@DeleteCarrierGateway' {} a -> s {carrierGatewayId = a} :: DeleteCarrierGateway)
+
+instance Core.AWSRequest DeleteCarrierGateway where
+  type
+    AWSResponse DeleteCarrierGateway =
+      DeleteCarrierGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteCarrierGatewayResponse'
+            Prelude.<$> (x Data..@? "carrierGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCarrierGateway where
+  hashWithSalt _salt DeleteCarrierGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` carrierGatewayId
+
+instance Prelude.NFData DeleteCarrierGateway where
+  rnf DeleteCarrierGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf carrierGatewayId
+
+instance Data.ToHeaders DeleteCarrierGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteCarrierGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCarrierGateway where
+  toQuery DeleteCarrierGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteCarrierGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "CarrierGatewayId" Data.=: carrierGatewayId
+      ]
+
+-- | /See:/ 'newDeleteCarrierGatewayResponse' smart constructor.
+data DeleteCarrierGatewayResponse = DeleteCarrierGatewayResponse'
+  { -- | Information about the carrier gateway.
+    carrierGateway :: Prelude.Maybe CarrierGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCarrierGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGateway', 'deleteCarrierGatewayResponse_carrierGateway' - Information about the carrier gateway.
+--
+-- 'httpStatus', 'deleteCarrierGatewayResponse_httpStatus' - The response's http status code.
+newDeleteCarrierGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCarrierGatewayResponse
+newDeleteCarrierGatewayResponse pHttpStatus_ =
+  DeleteCarrierGatewayResponse'
+    { carrierGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the carrier gateway.
+deleteCarrierGatewayResponse_carrierGateway :: Lens.Lens' DeleteCarrierGatewayResponse (Prelude.Maybe CarrierGateway)
+deleteCarrierGatewayResponse_carrierGateway = Lens.lens (\DeleteCarrierGatewayResponse' {carrierGateway} -> carrierGateway) (\s@DeleteCarrierGatewayResponse' {} a -> s {carrierGateway = a} :: DeleteCarrierGatewayResponse)
+
+-- | The response's http status code.
+deleteCarrierGatewayResponse_httpStatus :: Lens.Lens' DeleteCarrierGatewayResponse Prelude.Int
+deleteCarrierGatewayResponse_httpStatus = Lens.lens (\DeleteCarrierGatewayResponse' {httpStatus} -> httpStatus) (\s@DeleteCarrierGatewayResponse' {} a -> s {httpStatus = a} :: DeleteCarrierGatewayResponse)
+
+instance Prelude.NFData DeleteCarrierGatewayResponse where
+  rnf DeleteCarrierGatewayResponse' {..} =
+    Prelude.rnf carrierGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteClientVpnEndpoint.hs b/gen/Amazonka/EC2/DeleteClientVpnEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteClientVpnEndpoint.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteClientVpnEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Client VPN endpoint. You must disassociate all
+-- target networks before you can delete a Client VPN endpoint.
+module Amazonka.EC2.DeleteClientVpnEndpoint
+  ( -- * Creating a Request
+    DeleteClientVpnEndpoint (..),
+    newDeleteClientVpnEndpoint,
+
+    -- * Request Lenses
+    deleteClientVpnEndpoint_dryRun,
+    deleteClientVpnEndpoint_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    DeleteClientVpnEndpointResponse (..),
+    newDeleteClientVpnEndpointResponse,
+
+    -- * Response Lenses
+    deleteClientVpnEndpointResponse_status,
+    deleteClientVpnEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteClientVpnEndpoint' smart constructor.
+data DeleteClientVpnEndpoint = DeleteClientVpnEndpoint'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN to be deleted.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClientVpnEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteClientVpnEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'deleteClientVpnEndpoint_clientVpnEndpointId' - The ID of the Client VPN to be deleted.
+newDeleteClientVpnEndpoint ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  DeleteClientVpnEndpoint
+newDeleteClientVpnEndpoint pClientVpnEndpointId_ =
+  DeleteClientVpnEndpoint'
+    { dryRun = Prelude.Nothing,
+      clientVpnEndpointId = pClientVpnEndpointId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteClientVpnEndpoint_dryRun :: Lens.Lens' DeleteClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
+deleteClientVpnEndpoint_dryRun = Lens.lens (\DeleteClientVpnEndpoint' {dryRun} -> dryRun) (\s@DeleteClientVpnEndpoint' {} a -> s {dryRun = a} :: DeleteClientVpnEndpoint)
+
+-- | The ID of the Client VPN to be deleted.
+deleteClientVpnEndpoint_clientVpnEndpointId :: Lens.Lens' DeleteClientVpnEndpoint Prelude.Text
+deleteClientVpnEndpoint_clientVpnEndpointId = Lens.lens (\DeleteClientVpnEndpoint' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DeleteClientVpnEndpoint' {} a -> s {clientVpnEndpointId = a} :: DeleteClientVpnEndpoint)
+
+instance Core.AWSRequest DeleteClientVpnEndpoint where
+  type
+    AWSResponse DeleteClientVpnEndpoint =
+      DeleteClientVpnEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteClientVpnEndpointResponse'
+            Prelude.<$> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteClientVpnEndpoint where
+  hashWithSalt _salt DeleteClientVpnEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance Prelude.NFData DeleteClientVpnEndpoint where
+  rnf DeleteClientVpnEndpoint' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance Data.ToHeaders DeleteClientVpnEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteClientVpnEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteClientVpnEndpoint where
+  toQuery DeleteClientVpnEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteClientVpnEndpoint" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newDeleteClientVpnEndpointResponse' smart constructor.
+data DeleteClientVpnEndpointResponse = DeleteClientVpnEndpointResponse'
+  { -- | The current state of the Client VPN endpoint.
+    status :: Prelude.Maybe ClientVpnEndpointStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClientVpnEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'deleteClientVpnEndpointResponse_status' - The current state of the Client VPN endpoint.
+--
+-- 'httpStatus', 'deleteClientVpnEndpointResponse_httpStatus' - The response's http status code.
+newDeleteClientVpnEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteClientVpnEndpointResponse
+newDeleteClientVpnEndpointResponse pHttpStatus_ =
+  DeleteClientVpnEndpointResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current state of the Client VPN endpoint.
+deleteClientVpnEndpointResponse_status :: Lens.Lens' DeleteClientVpnEndpointResponse (Prelude.Maybe ClientVpnEndpointStatus)
+deleteClientVpnEndpointResponse_status = Lens.lens (\DeleteClientVpnEndpointResponse' {status} -> status) (\s@DeleteClientVpnEndpointResponse' {} a -> s {status = a} :: DeleteClientVpnEndpointResponse)
+
+-- | The response's http status code.
+deleteClientVpnEndpointResponse_httpStatus :: Lens.Lens' DeleteClientVpnEndpointResponse Prelude.Int
+deleteClientVpnEndpointResponse_httpStatus = Lens.lens (\DeleteClientVpnEndpointResponse' {httpStatus} -> httpStatus) (\s@DeleteClientVpnEndpointResponse' {} a -> s {httpStatus = a} :: DeleteClientVpnEndpointResponse)
+
+instance
+  Prelude.NFData
+    DeleteClientVpnEndpointResponse
+  where
+  rnf DeleteClientVpnEndpointResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteClientVpnRoute.hs b/gen/Amazonka/EC2/DeleteClientVpnRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteClientVpnRoute.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteClientVpnRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a route from a Client VPN endpoint. You can only delete routes
+-- that you manually added using the __CreateClientVpnRoute__ action. You
+-- cannot delete routes that were automatically added when associating a
+-- subnet. To remove routes that have been automatically added,
+-- disassociate the target subnet from the Client VPN endpoint.
+module Amazonka.EC2.DeleteClientVpnRoute
+  ( -- * Creating a Request
+    DeleteClientVpnRoute (..),
+    newDeleteClientVpnRoute,
+
+    -- * Request Lenses
+    deleteClientVpnRoute_dryRun,
+    deleteClientVpnRoute_targetVpcSubnetId,
+    deleteClientVpnRoute_clientVpnEndpointId,
+    deleteClientVpnRoute_destinationCidrBlock,
+
+    -- * Destructuring the Response
+    DeleteClientVpnRouteResponse (..),
+    newDeleteClientVpnRouteResponse,
+
+    -- * Response Lenses
+    deleteClientVpnRouteResponse_status,
+    deleteClientVpnRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteClientVpnRoute' smart constructor.
+data DeleteClientVpnRoute = DeleteClientVpnRoute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the target subnet used by the route.
+    targetVpcSubnetId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint from which the route is to be deleted.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The IPv4 address range, in CIDR notation, of the route to be deleted.
+    destinationCidrBlock :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClientVpnRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteClientVpnRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'targetVpcSubnetId', 'deleteClientVpnRoute_targetVpcSubnetId' - The ID of the target subnet used by the route.
+--
+-- 'clientVpnEndpointId', 'deleteClientVpnRoute_clientVpnEndpointId' - The ID of the Client VPN endpoint from which the route is to be deleted.
+--
+-- 'destinationCidrBlock', 'deleteClientVpnRoute_destinationCidrBlock' - The IPv4 address range, in CIDR notation, of the route to be deleted.
+newDeleteClientVpnRoute ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  DeleteClientVpnRoute
+newDeleteClientVpnRoute
+  pClientVpnEndpointId_
+  pDestinationCidrBlock_ =
+    DeleteClientVpnRoute'
+      { dryRun = Prelude.Nothing,
+        targetVpcSubnetId = Prelude.Nothing,
+        clientVpnEndpointId = pClientVpnEndpointId_,
+        destinationCidrBlock = pDestinationCidrBlock_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteClientVpnRoute_dryRun :: Lens.Lens' DeleteClientVpnRoute (Prelude.Maybe Prelude.Bool)
+deleteClientVpnRoute_dryRun = Lens.lens (\DeleteClientVpnRoute' {dryRun} -> dryRun) (\s@DeleteClientVpnRoute' {} a -> s {dryRun = a} :: DeleteClientVpnRoute)
+
+-- | The ID of the target subnet used by the route.
+deleteClientVpnRoute_targetVpcSubnetId :: Lens.Lens' DeleteClientVpnRoute (Prelude.Maybe Prelude.Text)
+deleteClientVpnRoute_targetVpcSubnetId = Lens.lens (\DeleteClientVpnRoute' {targetVpcSubnetId} -> targetVpcSubnetId) (\s@DeleteClientVpnRoute' {} a -> s {targetVpcSubnetId = a} :: DeleteClientVpnRoute)
+
+-- | The ID of the Client VPN endpoint from which the route is to be deleted.
+deleteClientVpnRoute_clientVpnEndpointId :: Lens.Lens' DeleteClientVpnRoute Prelude.Text
+deleteClientVpnRoute_clientVpnEndpointId = Lens.lens (\DeleteClientVpnRoute' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DeleteClientVpnRoute' {} a -> s {clientVpnEndpointId = a} :: DeleteClientVpnRoute)
+
+-- | The IPv4 address range, in CIDR notation, of the route to be deleted.
+deleteClientVpnRoute_destinationCidrBlock :: Lens.Lens' DeleteClientVpnRoute Prelude.Text
+deleteClientVpnRoute_destinationCidrBlock = Lens.lens (\DeleteClientVpnRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@DeleteClientVpnRoute' {} a -> s {destinationCidrBlock = a} :: DeleteClientVpnRoute)
+
+instance Core.AWSRequest DeleteClientVpnRoute where
+  type
+    AWSResponse DeleteClientVpnRoute =
+      DeleteClientVpnRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteClientVpnRouteResponse'
+            Prelude.<$> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteClientVpnRoute where
+  hashWithSalt _salt DeleteClientVpnRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` targetVpcSubnetId
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` destinationCidrBlock
+
+instance Prelude.NFData DeleteClientVpnRoute where
+  rnf DeleteClientVpnRoute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf targetVpcSubnetId
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+
+instance Data.ToHeaders DeleteClientVpnRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteClientVpnRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteClientVpnRoute where
+  toQuery DeleteClientVpnRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteClientVpnRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TargetVpcSubnetId" Data.=: targetVpcSubnetId,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock
+      ]
+
+-- | /See:/ 'newDeleteClientVpnRouteResponse' smart constructor.
+data DeleteClientVpnRouteResponse = DeleteClientVpnRouteResponse'
+  { -- | The current state of the route.
+    status :: Prelude.Maybe ClientVpnRouteStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteClientVpnRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'deleteClientVpnRouteResponse_status' - The current state of the route.
+--
+-- 'httpStatus', 'deleteClientVpnRouteResponse_httpStatus' - The response's http status code.
+newDeleteClientVpnRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteClientVpnRouteResponse
+newDeleteClientVpnRouteResponse pHttpStatus_ =
+  DeleteClientVpnRouteResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current state of the route.
+deleteClientVpnRouteResponse_status :: Lens.Lens' DeleteClientVpnRouteResponse (Prelude.Maybe ClientVpnRouteStatus)
+deleteClientVpnRouteResponse_status = Lens.lens (\DeleteClientVpnRouteResponse' {status} -> status) (\s@DeleteClientVpnRouteResponse' {} a -> s {status = a} :: DeleteClientVpnRouteResponse)
+
+-- | The response's http status code.
+deleteClientVpnRouteResponse_httpStatus :: Lens.Lens' DeleteClientVpnRouteResponse Prelude.Int
+deleteClientVpnRouteResponse_httpStatus = Lens.lens (\DeleteClientVpnRouteResponse' {httpStatus} -> httpStatus) (\s@DeleteClientVpnRouteResponse' {} a -> s {httpStatus = a} :: DeleteClientVpnRouteResponse)
+
+instance Prelude.NFData DeleteClientVpnRouteResponse where
+  rnf DeleteClientVpnRouteResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteCoipCidr.hs b/gen/Amazonka/EC2/DeleteCoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteCoipCidr.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteCoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a range of customer-owned IP addresses.
+module Amazonka.EC2.DeleteCoipCidr
+  ( -- * Creating a Request
+    DeleteCoipCidr (..),
+    newDeleteCoipCidr,
+
+    -- * Request Lenses
+    deleteCoipCidr_dryRun,
+    deleteCoipCidr_cidr,
+    deleteCoipCidr_coipPoolId,
+
+    -- * Destructuring the Response
+    DeleteCoipCidrResponse (..),
+    newDeleteCoipCidrResponse,
+
+    -- * Response Lenses
+    deleteCoipCidrResponse_coipCidr,
+    deleteCoipCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCoipCidr' smart constructor.
+data DeleteCoipCidr = DeleteCoipCidr'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | A customer-owned IP address range that you want to delete.
+    cidr :: Prelude.Text,
+    -- | The ID of the customer-owned address pool.
+    coipPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteCoipCidr_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'cidr', 'deleteCoipCidr_cidr' - A customer-owned IP address range that you want to delete.
+--
+-- 'coipPoolId', 'deleteCoipCidr_coipPoolId' - The ID of the customer-owned address pool.
+newDeleteCoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'coipPoolId'
+  Prelude.Text ->
+  DeleteCoipCidr
+newDeleteCoipCidr pCidr_ pCoipPoolId_ =
+  DeleteCoipCidr'
+    { dryRun = Prelude.Nothing,
+      cidr = pCidr_,
+      coipPoolId = pCoipPoolId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteCoipCidr_dryRun :: Lens.Lens' DeleteCoipCidr (Prelude.Maybe Prelude.Bool)
+deleteCoipCidr_dryRun = Lens.lens (\DeleteCoipCidr' {dryRun} -> dryRun) (\s@DeleteCoipCidr' {} a -> s {dryRun = a} :: DeleteCoipCidr)
+
+-- | A customer-owned IP address range that you want to delete.
+deleteCoipCidr_cidr :: Lens.Lens' DeleteCoipCidr Prelude.Text
+deleteCoipCidr_cidr = Lens.lens (\DeleteCoipCidr' {cidr} -> cidr) (\s@DeleteCoipCidr' {} a -> s {cidr = a} :: DeleteCoipCidr)
+
+-- | The ID of the customer-owned address pool.
+deleteCoipCidr_coipPoolId :: Lens.Lens' DeleteCoipCidr Prelude.Text
+deleteCoipCidr_coipPoolId = Lens.lens (\DeleteCoipCidr' {coipPoolId} -> coipPoolId) (\s@DeleteCoipCidr' {} a -> s {coipPoolId = a} :: DeleteCoipCidr)
+
+instance Core.AWSRequest DeleteCoipCidr where
+  type
+    AWSResponse DeleteCoipCidr =
+      DeleteCoipCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteCoipCidrResponse'
+            Prelude.<$> (x Data..@? "coipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCoipCidr where
+  hashWithSalt _salt DeleteCoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` coipPoolId
+
+instance Prelude.NFData DeleteCoipCidr where
+  rnf DeleteCoipCidr' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf coipPoolId
+
+instance Data.ToHeaders DeleteCoipCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteCoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCoipCidr where
+  toQuery DeleteCoipCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteCoipCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Cidr" Data.=: cidr,
+        "CoipPoolId" Data.=: coipPoolId
+      ]
+
+-- | /See:/ 'newDeleteCoipCidrResponse' smart constructor.
+data DeleteCoipCidrResponse = DeleteCoipCidrResponse'
+  { -- | Information about a range of customer-owned IP addresses.
+    coipCidr :: Prelude.Maybe CoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCoipCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipCidr', 'deleteCoipCidrResponse_coipCidr' - Information about a range of customer-owned IP addresses.
+--
+-- 'httpStatus', 'deleteCoipCidrResponse_httpStatus' - The response's http status code.
+newDeleteCoipCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCoipCidrResponse
+newDeleteCoipCidrResponse pHttpStatus_ =
+  DeleteCoipCidrResponse'
+    { coipCidr = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about a range of customer-owned IP addresses.
+deleteCoipCidrResponse_coipCidr :: Lens.Lens' DeleteCoipCidrResponse (Prelude.Maybe CoipCidr)
+deleteCoipCidrResponse_coipCidr = Lens.lens (\DeleteCoipCidrResponse' {coipCidr} -> coipCidr) (\s@DeleteCoipCidrResponse' {} a -> s {coipCidr = a} :: DeleteCoipCidrResponse)
+
+-- | The response's http status code.
+deleteCoipCidrResponse_httpStatus :: Lens.Lens' DeleteCoipCidrResponse Prelude.Int
+deleteCoipCidrResponse_httpStatus = Lens.lens (\DeleteCoipCidrResponse' {httpStatus} -> httpStatus) (\s@DeleteCoipCidrResponse' {} a -> s {httpStatus = a} :: DeleteCoipCidrResponse)
+
+instance Prelude.NFData DeleteCoipCidrResponse where
+  rnf DeleteCoipCidrResponse' {..} =
+    Prelude.rnf coipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteCoipPool.hs b/gen/Amazonka/EC2/DeleteCoipPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteCoipPool.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteCoipPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a pool of customer-owned IP (CoIP) addresses.
+module Amazonka.EC2.DeleteCoipPool
+  ( -- * Creating a Request
+    DeleteCoipPool (..),
+    newDeleteCoipPool,
+
+    -- * Request Lenses
+    deleteCoipPool_dryRun,
+    deleteCoipPool_coipPoolId,
+
+    -- * Destructuring the Response
+    DeleteCoipPoolResponse (..),
+    newDeleteCoipPoolResponse,
+
+    -- * Response Lenses
+    deleteCoipPoolResponse_coipPool,
+    deleteCoipPoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteCoipPool' smart constructor.
+data DeleteCoipPool = DeleteCoipPool'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the CoIP pool that you want to delete.
+    coipPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCoipPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteCoipPool_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'coipPoolId', 'deleteCoipPool_coipPoolId' - The ID of the CoIP pool that you want to delete.
+newDeleteCoipPool ::
+  -- | 'coipPoolId'
+  Prelude.Text ->
+  DeleteCoipPool
+newDeleteCoipPool pCoipPoolId_ =
+  DeleteCoipPool'
+    { dryRun = Prelude.Nothing,
+      coipPoolId = pCoipPoolId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteCoipPool_dryRun :: Lens.Lens' DeleteCoipPool (Prelude.Maybe Prelude.Bool)
+deleteCoipPool_dryRun = Lens.lens (\DeleteCoipPool' {dryRun} -> dryRun) (\s@DeleteCoipPool' {} a -> s {dryRun = a} :: DeleteCoipPool)
+
+-- | The ID of the CoIP pool that you want to delete.
+deleteCoipPool_coipPoolId :: Lens.Lens' DeleteCoipPool Prelude.Text
+deleteCoipPool_coipPoolId = Lens.lens (\DeleteCoipPool' {coipPoolId} -> coipPoolId) (\s@DeleteCoipPool' {} a -> s {coipPoolId = a} :: DeleteCoipPool)
+
+instance Core.AWSRequest DeleteCoipPool where
+  type
+    AWSResponse DeleteCoipPool =
+      DeleteCoipPoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteCoipPoolResponse'
+            Prelude.<$> (x Data..@? "coipPool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteCoipPool where
+  hashWithSalt _salt DeleteCoipPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` coipPoolId
+
+instance Prelude.NFData DeleteCoipPool where
+  rnf DeleteCoipPool' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf coipPoolId
+
+instance Data.ToHeaders DeleteCoipPool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteCoipPool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCoipPool where
+  toQuery DeleteCoipPool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteCoipPool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "CoipPoolId" Data.=: coipPoolId
+      ]
+
+-- | /See:/ 'newDeleteCoipPoolResponse' smart constructor.
+data DeleteCoipPoolResponse = DeleteCoipPoolResponse'
+  { -- | Information about the CoIP address pool.
+    coipPool :: Prelude.Maybe CoipPool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCoipPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipPool', 'deleteCoipPoolResponse_coipPool' - Information about the CoIP address pool.
+--
+-- 'httpStatus', 'deleteCoipPoolResponse_httpStatus' - The response's http status code.
+newDeleteCoipPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteCoipPoolResponse
+newDeleteCoipPoolResponse pHttpStatus_ =
+  DeleteCoipPoolResponse'
+    { coipPool = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the CoIP address pool.
+deleteCoipPoolResponse_coipPool :: Lens.Lens' DeleteCoipPoolResponse (Prelude.Maybe CoipPool)
+deleteCoipPoolResponse_coipPool = Lens.lens (\DeleteCoipPoolResponse' {coipPool} -> coipPool) (\s@DeleteCoipPoolResponse' {} a -> s {coipPool = a} :: DeleteCoipPoolResponse)
+
+-- | The response's http status code.
+deleteCoipPoolResponse_httpStatus :: Lens.Lens' DeleteCoipPoolResponse Prelude.Int
+deleteCoipPoolResponse_httpStatus = Lens.lens (\DeleteCoipPoolResponse' {httpStatus} -> httpStatus) (\s@DeleteCoipPoolResponse' {} a -> s {httpStatus = a} :: DeleteCoipPoolResponse)
+
+instance Prelude.NFData DeleteCoipPoolResponse where
+  rnf DeleteCoipPoolResponse' {..} =
+    Prelude.rnf coipPool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteCustomerGateway.hs b/gen/Amazonka/EC2/DeleteCustomerGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteCustomerGateway.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteCustomerGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified customer gateway. You must delete the VPN
+-- connection before you can delete the customer gateway.
+module Amazonka.EC2.DeleteCustomerGateway
+  ( -- * Creating a Request
+    DeleteCustomerGateway (..),
+    newDeleteCustomerGateway,
+
+    -- * Request Lenses
+    deleteCustomerGateway_dryRun,
+    deleteCustomerGateway_customerGatewayId,
+
+    -- * Destructuring the Response
+    DeleteCustomerGatewayResponse (..),
+    newDeleteCustomerGatewayResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteCustomerGateway.
+--
+-- /See:/ 'newDeleteCustomerGateway' smart constructor.
+data DeleteCustomerGateway = DeleteCustomerGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the customer gateway.
+    customerGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomerGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteCustomerGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'customerGatewayId', 'deleteCustomerGateway_customerGatewayId' - The ID of the customer gateway.
+newDeleteCustomerGateway ::
+  -- | 'customerGatewayId'
+  Prelude.Text ->
+  DeleteCustomerGateway
+newDeleteCustomerGateway pCustomerGatewayId_ =
+  DeleteCustomerGateway'
+    { dryRun = Prelude.Nothing,
+      customerGatewayId = pCustomerGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteCustomerGateway_dryRun :: Lens.Lens' DeleteCustomerGateway (Prelude.Maybe Prelude.Bool)
+deleteCustomerGateway_dryRun = Lens.lens (\DeleteCustomerGateway' {dryRun} -> dryRun) (\s@DeleteCustomerGateway' {} a -> s {dryRun = a} :: DeleteCustomerGateway)
+
+-- | The ID of the customer gateway.
+deleteCustomerGateway_customerGatewayId :: Lens.Lens' DeleteCustomerGateway Prelude.Text
+deleteCustomerGateway_customerGatewayId = Lens.lens (\DeleteCustomerGateway' {customerGatewayId} -> customerGatewayId) (\s@DeleteCustomerGateway' {} a -> s {customerGatewayId = a} :: DeleteCustomerGateway)
+
+instance Core.AWSRequest DeleteCustomerGateway where
+  type
+    AWSResponse DeleteCustomerGateway =
+      DeleteCustomerGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteCustomerGatewayResponse'
+
+instance Prelude.Hashable DeleteCustomerGateway where
+  hashWithSalt _salt DeleteCustomerGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` customerGatewayId
+
+instance Prelude.NFData DeleteCustomerGateway where
+  rnf DeleteCustomerGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf customerGatewayId
+
+instance Data.ToHeaders DeleteCustomerGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteCustomerGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteCustomerGateway where
+  toQuery DeleteCustomerGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteCustomerGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "CustomerGatewayId" Data.=: customerGatewayId
+      ]
+
+-- | /See:/ 'newDeleteCustomerGatewayResponse' smart constructor.
+data DeleteCustomerGatewayResponse = DeleteCustomerGatewayResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteCustomerGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteCustomerGatewayResponse ::
+  DeleteCustomerGatewayResponse
+newDeleteCustomerGatewayResponse =
+  DeleteCustomerGatewayResponse'
+
+instance Prelude.NFData DeleteCustomerGatewayResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteDhcpOptions.hs b/gen/Amazonka/EC2/DeleteDhcpOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteDhcpOptions.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteDhcpOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified set of DHCP options. You must disassociate the set
+-- of DHCP options before you can delete it. You can disassociate the set
+-- of DHCP options by associating either a new set of options or the
+-- default set of options with the VPC.
+module Amazonka.EC2.DeleteDhcpOptions
+  ( -- * Creating a Request
+    DeleteDhcpOptions (..),
+    newDeleteDhcpOptions,
+
+    -- * Request Lenses
+    deleteDhcpOptions_dryRun,
+    deleteDhcpOptions_dhcpOptionsId,
+
+    -- * Destructuring the Response
+    DeleteDhcpOptionsResponse (..),
+    newDeleteDhcpOptionsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDhcpOptions' smart constructor.
+data DeleteDhcpOptions = DeleteDhcpOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the DHCP options set.
+    dhcpOptionsId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDhcpOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteDhcpOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'dhcpOptionsId', 'deleteDhcpOptions_dhcpOptionsId' - The ID of the DHCP options set.
+newDeleteDhcpOptions ::
+  -- | 'dhcpOptionsId'
+  Prelude.Text ->
+  DeleteDhcpOptions
+newDeleteDhcpOptions pDhcpOptionsId_ =
+  DeleteDhcpOptions'
+    { dryRun = Prelude.Nothing,
+      dhcpOptionsId = pDhcpOptionsId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteDhcpOptions_dryRun :: Lens.Lens' DeleteDhcpOptions (Prelude.Maybe Prelude.Bool)
+deleteDhcpOptions_dryRun = Lens.lens (\DeleteDhcpOptions' {dryRun} -> dryRun) (\s@DeleteDhcpOptions' {} a -> s {dryRun = a} :: DeleteDhcpOptions)
+
+-- | The ID of the DHCP options set.
+deleteDhcpOptions_dhcpOptionsId :: Lens.Lens' DeleteDhcpOptions Prelude.Text
+deleteDhcpOptions_dhcpOptionsId = Lens.lens (\DeleteDhcpOptions' {dhcpOptionsId} -> dhcpOptionsId) (\s@DeleteDhcpOptions' {} a -> s {dhcpOptionsId = a} :: DeleteDhcpOptions)
+
+instance Core.AWSRequest DeleteDhcpOptions where
+  type
+    AWSResponse DeleteDhcpOptions =
+      DeleteDhcpOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteDhcpOptionsResponse'
+
+instance Prelude.Hashable DeleteDhcpOptions where
+  hashWithSalt _salt DeleteDhcpOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` dhcpOptionsId
+
+instance Prelude.NFData DeleteDhcpOptions where
+  rnf DeleteDhcpOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf dhcpOptionsId
+
+instance Data.ToHeaders DeleteDhcpOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteDhcpOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDhcpOptions where
+  toQuery DeleteDhcpOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteDhcpOptions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "DhcpOptionsId" Data.=: dhcpOptionsId
+      ]
+
+-- | /See:/ 'newDeleteDhcpOptionsResponse' smart constructor.
+data DeleteDhcpOptionsResponse = DeleteDhcpOptionsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDhcpOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDhcpOptionsResponse ::
+  DeleteDhcpOptionsResponse
+newDeleteDhcpOptionsResponse =
+  DeleteDhcpOptionsResponse'
+
+instance Prelude.NFData DeleteDhcpOptionsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteEgressOnlyInternetGateway.hs b/gen/Amazonka/EC2/DeleteEgressOnlyInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteEgressOnlyInternetGateway.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteEgressOnlyInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an egress-only internet gateway.
+module Amazonka.EC2.DeleteEgressOnlyInternetGateway
+  ( -- * Creating a Request
+    DeleteEgressOnlyInternetGateway (..),
+    newDeleteEgressOnlyInternetGateway,
+
+    -- * Request Lenses
+    deleteEgressOnlyInternetGateway_dryRun,
+    deleteEgressOnlyInternetGateway_egressOnlyInternetGatewayId,
+
+    -- * Destructuring the Response
+    DeleteEgressOnlyInternetGatewayResponse (..),
+    newDeleteEgressOnlyInternetGatewayResponse,
+
+    -- * Response Lenses
+    deleteEgressOnlyInternetGatewayResponse_returnCode,
+    deleteEgressOnlyInternetGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEgressOnlyInternetGateway' smart constructor.
+data DeleteEgressOnlyInternetGateway = DeleteEgressOnlyInternetGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the egress-only internet gateway.
+    egressOnlyInternetGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEgressOnlyInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteEgressOnlyInternetGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'egressOnlyInternetGatewayId', 'deleteEgressOnlyInternetGateway_egressOnlyInternetGatewayId' - The ID of the egress-only internet gateway.
+newDeleteEgressOnlyInternetGateway ::
+  -- | 'egressOnlyInternetGatewayId'
+  Prelude.Text ->
+  DeleteEgressOnlyInternetGateway
+newDeleteEgressOnlyInternetGateway
+  pEgressOnlyInternetGatewayId_ =
+    DeleteEgressOnlyInternetGateway'
+      { dryRun =
+          Prelude.Nothing,
+        egressOnlyInternetGatewayId =
+          pEgressOnlyInternetGatewayId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteEgressOnlyInternetGateway_dryRun :: Lens.Lens' DeleteEgressOnlyInternetGateway (Prelude.Maybe Prelude.Bool)
+deleteEgressOnlyInternetGateway_dryRun = Lens.lens (\DeleteEgressOnlyInternetGateway' {dryRun} -> dryRun) (\s@DeleteEgressOnlyInternetGateway' {} a -> s {dryRun = a} :: DeleteEgressOnlyInternetGateway)
+
+-- | The ID of the egress-only internet gateway.
+deleteEgressOnlyInternetGateway_egressOnlyInternetGatewayId :: Lens.Lens' DeleteEgressOnlyInternetGateway Prelude.Text
+deleteEgressOnlyInternetGateway_egressOnlyInternetGatewayId = Lens.lens (\DeleteEgressOnlyInternetGateway' {egressOnlyInternetGatewayId} -> egressOnlyInternetGatewayId) (\s@DeleteEgressOnlyInternetGateway' {} a -> s {egressOnlyInternetGatewayId = a} :: DeleteEgressOnlyInternetGateway)
+
+instance
+  Core.AWSRequest
+    DeleteEgressOnlyInternetGateway
+  where
+  type
+    AWSResponse DeleteEgressOnlyInternetGateway =
+      DeleteEgressOnlyInternetGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteEgressOnlyInternetGatewayResponse'
+            Prelude.<$> (x Data..@? "returnCode")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteEgressOnlyInternetGateway
+  where
+  hashWithSalt
+    _salt
+    DeleteEgressOnlyInternetGateway' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` egressOnlyInternetGatewayId
+
+instance
+  Prelude.NFData
+    DeleteEgressOnlyInternetGateway
+  where
+  rnf DeleteEgressOnlyInternetGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayId
+
+instance
+  Data.ToHeaders
+    DeleteEgressOnlyInternetGateway
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteEgressOnlyInternetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEgressOnlyInternetGateway where
+  toQuery DeleteEgressOnlyInternetGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteEgressOnlyInternetGateway" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EgressOnlyInternetGatewayId"
+          Data.=: egressOnlyInternetGatewayId
+      ]
+
+-- | /See:/ 'newDeleteEgressOnlyInternetGatewayResponse' smart constructor.
+data DeleteEgressOnlyInternetGatewayResponse = DeleteEgressOnlyInternetGatewayResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    returnCode :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEgressOnlyInternetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnCode', 'deleteEgressOnlyInternetGatewayResponse_returnCode' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'deleteEgressOnlyInternetGatewayResponse_httpStatus' - The response's http status code.
+newDeleteEgressOnlyInternetGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEgressOnlyInternetGatewayResponse
+newDeleteEgressOnlyInternetGatewayResponse
+  pHttpStatus_ =
+    DeleteEgressOnlyInternetGatewayResponse'
+      { returnCode =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+deleteEgressOnlyInternetGatewayResponse_returnCode :: Lens.Lens' DeleteEgressOnlyInternetGatewayResponse (Prelude.Maybe Prelude.Bool)
+deleteEgressOnlyInternetGatewayResponse_returnCode = Lens.lens (\DeleteEgressOnlyInternetGatewayResponse' {returnCode} -> returnCode) (\s@DeleteEgressOnlyInternetGatewayResponse' {} a -> s {returnCode = a} :: DeleteEgressOnlyInternetGatewayResponse)
+
+-- | The response's http status code.
+deleteEgressOnlyInternetGatewayResponse_httpStatus :: Lens.Lens' DeleteEgressOnlyInternetGatewayResponse Prelude.Int
+deleteEgressOnlyInternetGatewayResponse_httpStatus = Lens.lens (\DeleteEgressOnlyInternetGatewayResponse' {httpStatus} -> httpStatus) (\s@DeleteEgressOnlyInternetGatewayResponse' {} a -> s {httpStatus = a} :: DeleteEgressOnlyInternetGatewayResponse)
+
+instance
+  Prelude.NFData
+    DeleteEgressOnlyInternetGatewayResponse
+  where
+  rnf DeleteEgressOnlyInternetGatewayResponse' {..} =
+    Prelude.rnf returnCode
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteFleets.hs b/gen/Amazonka/EC2/DeleteFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteFleets.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified EC2 Fleet.
+--
+-- After you delete an EC2 Fleet, it launches no new instances.
+--
+-- You must specify whether a deleted EC2 Fleet should also terminate its
+-- instances. If you choose to terminate the instances, the EC2 Fleet
+-- enters the @deleted_terminating@ state. Otherwise, the EC2 Fleet enters
+-- the @deleted_running@ state, and the instances continue to run until
+-- they are interrupted or you terminate them manually.
+--
+-- For @instant@ fleets, EC2 Fleet must terminate the instances when the
+-- fleet is deleted. A deleted @instant@ fleet with running instances is
+-- not supported.
+--
+-- __Restrictions__
+--
+-- -   You can delete up to 25 @instant@ fleets in a single request. If you
+--     exceed this number, no @instant@ fleets are deleted and an error is
+--     returned. There is no restriction on the number of fleets of type
+--     @maintain@ or @request@ that can be deleted in a single request.
+--
+-- -   Up to 1000 instances can be terminated in a single request to delete
+--     @instant@ fleets.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#delete-fleet Delete an EC2 Fleet>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DeleteFleets
+  ( -- * Creating a Request
+    DeleteFleets (..),
+    newDeleteFleets,
+
+    -- * Request Lenses
+    deleteFleets_dryRun,
+    deleteFleets_fleetIds,
+    deleteFleets_terminateInstances,
+
+    -- * Destructuring the Response
+    DeleteFleetsResponse (..),
+    newDeleteFleetsResponse,
+
+    -- * Response Lenses
+    deleteFleetsResponse_successfulFleetDeletions,
+    deleteFleetsResponse_unsuccessfulFleetDeletions,
+    deleteFleetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFleets' smart constructor.
+data DeleteFleets = DeleteFleets'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the EC2 Fleets.
+    fleetIds :: [Prelude.Text],
+    -- | Indicates whether to terminate the instances when the EC2 Fleet is
+    -- deleted. The default is to terminate the instances.
+    --
+    -- To let the instances continue to run after the EC2 Fleet is deleted,
+    -- specify @NoTerminateInstances@. Supported only for fleets of type
+    -- @maintain@ and @request@.
+    --
+    -- For @instant@ fleets, you cannot specify @NoTerminateInstances@. A
+    -- deleted @instant@ fleet with running instances is not supported.
+    terminateInstances :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteFleets_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fleetIds', 'deleteFleets_fleetIds' - The IDs of the EC2 Fleets.
+--
+-- 'terminateInstances', 'deleteFleets_terminateInstances' - Indicates whether to terminate the instances when the EC2 Fleet is
+-- deleted. The default is to terminate the instances.
+--
+-- To let the instances continue to run after the EC2 Fleet is deleted,
+-- specify @NoTerminateInstances@. Supported only for fleets of type
+-- @maintain@ and @request@.
+--
+-- For @instant@ fleets, you cannot specify @NoTerminateInstances@. A
+-- deleted @instant@ fleet with running instances is not supported.
+newDeleteFleets ::
+  -- | 'terminateInstances'
+  Prelude.Bool ->
+  DeleteFleets
+newDeleteFleets pTerminateInstances_ =
+  DeleteFleets'
+    { dryRun = Prelude.Nothing,
+      fleetIds = Prelude.mempty,
+      terminateInstances = pTerminateInstances_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteFleets_dryRun :: Lens.Lens' DeleteFleets (Prelude.Maybe Prelude.Bool)
+deleteFleets_dryRun = Lens.lens (\DeleteFleets' {dryRun} -> dryRun) (\s@DeleteFleets' {} a -> s {dryRun = a} :: DeleteFleets)
+
+-- | The IDs of the EC2 Fleets.
+deleteFleets_fleetIds :: Lens.Lens' DeleteFleets [Prelude.Text]
+deleteFleets_fleetIds = Lens.lens (\DeleteFleets' {fleetIds} -> fleetIds) (\s@DeleteFleets' {} a -> s {fleetIds = a} :: DeleteFleets) Prelude.. Lens.coerced
+
+-- | Indicates whether to terminate the instances when the EC2 Fleet is
+-- deleted. The default is to terminate the instances.
+--
+-- To let the instances continue to run after the EC2 Fleet is deleted,
+-- specify @NoTerminateInstances@. Supported only for fleets of type
+-- @maintain@ and @request@.
+--
+-- For @instant@ fleets, you cannot specify @NoTerminateInstances@. A
+-- deleted @instant@ fleet with running instances is not supported.
+deleteFleets_terminateInstances :: Lens.Lens' DeleteFleets Prelude.Bool
+deleteFleets_terminateInstances = Lens.lens (\DeleteFleets' {terminateInstances} -> terminateInstances) (\s@DeleteFleets' {} a -> s {terminateInstances = a} :: DeleteFleets)
+
+instance Core.AWSRequest DeleteFleets where
+  type AWSResponse DeleteFleets = DeleteFleetsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteFleetsResponse'
+            Prelude.<$> ( x
+                            Data..@? "successfulFleetDeletionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessfulFleetDeletionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFleets where
+  hashWithSalt _salt DeleteFleets' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fleetIds
+      `Prelude.hashWithSalt` terminateInstances
+
+instance Prelude.NFData DeleteFleets where
+  rnf DeleteFleets' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fleetIds
+      `Prelude.seq` Prelude.rnf terminateInstances
+
+instance Data.ToHeaders DeleteFleets where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteFleets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteFleets where
+  toQuery DeleteFleets' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteFleets" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "FleetId" fleetIds,
+        "TerminateInstances" Data.=: terminateInstances
+      ]
+
+-- | /See:/ 'newDeleteFleetsResponse' smart constructor.
+data DeleteFleetsResponse = DeleteFleetsResponse'
+  { -- | Information about the EC2 Fleets that are successfully deleted.
+    successfulFleetDeletions :: Prelude.Maybe [DeleteFleetSuccessItem],
+    -- | Information about the EC2 Fleets that are not successfully deleted.
+    unsuccessfulFleetDeletions :: Prelude.Maybe [DeleteFleetErrorItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successfulFleetDeletions', 'deleteFleetsResponse_successfulFleetDeletions' - Information about the EC2 Fleets that are successfully deleted.
+--
+-- 'unsuccessfulFleetDeletions', 'deleteFleetsResponse_unsuccessfulFleetDeletions' - Information about the EC2 Fleets that are not successfully deleted.
+--
+-- 'httpStatus', 'deleteFleetsResponse_httpStatus' - The response's http status code.
+newDeleteFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFleetsResponse
+newDeleteFleetsResponse pHttpStatus_ =
+  DeleteFleetsResponse'
+    { successfulFleetDeletions =
+        Prelude.Nothing,
+      unsuccessfulFleetDeletions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the EC2 Fleets that are successfully deleted.
+deleteFleetsResponse_successfulFleetDeletions :: Lens.Lens' DeleteFleetsResponse (Prelude.Maybe [DeleteFleetSuccessItem])
+deleteFleetsResponse_successfulFleetDeletions = Lens.lens (\DeleteFleetsResponse' {successfulFleetDeletions} -> successfulFleetDeletions) (\s@DeleteFleetsResponse' {} a -> s {successfulFleetDeletions = a} :: DeleteFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the EC2 Fleets that are not successfully deleted.
+deleteFleetsResponse_unsuccessfulFleetDeletions :: Lens.Lens' DeleteFleetsResponse (Prelude.Maybe [DeleteFleetErrorItem])
+deleteFleetsResponse_unsuccessfulFleetDeletions = Lens.lens (\DeleteFleetsResponse' {unsuccessfulFleetDeletions} -> unsuccessfulFleetDeletions) (\s@DeleteFleetsResponse' {} a -> s {unsuccessfulFleetDeletions = a} :: DeleteFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteFleetsResponse_httpStatus :: Lens.Lens' DeleteFleetsResponse Prelude.Int
+deleteFleetsResponse_httpStatus = Lens.lens (\DeleteFleetsResponse' {httpStatus} -> httpStatus) (\s@DeleteFleetsResponse' {} a -> s {httpStatus = a} :: DeleteFleetsResponse)
+
+instance Prelude.NFData DeleteFleetsResponse where
+  rnf DeleteFleetsResponse' {..} =
+    Prelude.rnf successfulFleetDeletions
+      `Prelude.seq` Prelude.rnf unsuccessfulFleetDeletions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteFlowLogs.hs b/gen/Amazonka/EC2/DeleteFlowLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteFlowLogs.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteFlowLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more flow logs.
+module Amazonka.EC2.DeleteFlowLogs
+  ( -- * Creating a Request
+    DeleteFlowLogs (..),
+    newDeleteFlowLogs,
+
+    -- * Request Lenses
+    deleteFlowLogs_dryRun,
+    deleteFlowLogs_flowLogIds,
+
+    -- * Destructuring the Response
+    DeleteFlowLogsResponse (..),
+    newDeleteFlowLogsResponse,
+
+    -- * Response Lenses
+    deleteFlowLogsResponse_unsuccessful,
+    deleteFlowLogsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFlowLogs' smart constructor.
+data DeleteFlowLogs = DeleteFlowLogs'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more flow log IDs.
+    --
+    -- Constraint: Maximum of 1000 flow log IDs.
+    flowLogIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFlowLogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteFlowLogs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'flowLogIds', 'deleteFlowLogs_flowLogIds' - One or more flow log IDs.
+--
+-- Constraint: Maximum of 1000 flow log IDs.
+newDeleteFlowLogs ::
+  DeleteFlowLogs
+newDeleteFlowLogs =
+  DeleteFlowLogs'
+    { dryRun = Prelude.Nothing,
+      flowLogIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteFlowLogs_dryRun :: Lens.Lens' DeleteFlowLogs (Prelude.Maybe Prelude.Bool)
+deleteFlowLogs_dryRun = Lens.lens (\DeleteFlowLogs' {dryRun} -> dryRun) (\s@DeleteFlowLogs' {} a -> s {dryRun = a} :: DeleteFlowLogs)
+
+-- | One or more flow log IDs.
+--
+-- Constraint: Maximum of 1000 flow log IDs.
+deleteFlowLogs_flowLogIds :: Lens.Lens' DeleteFlowLogs [Prelude.Text]
+deleteFlowLogs_flowLogIds = Lens.lens (\DeleteFlowLogs' {flowLogIds} -> flowLogIds) (\s@DeleteFlowLogs' {} a -> s {flowLogIds = a} :: DeleteFlowLogs) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteFlowLogs where
+  type
+    AWSResponse DeleteFlowLogs =
+      DeleteFlowLogsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteFlowLogsResponse'
+            Prelude.<$> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFlowLogs where
+  hashWithSalt _salt DeleteFlowLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` flowLogIds
+
+instance Prelude.NFData DeleteFlowLogs where
+  rnf DeleteFlowLogs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf flowLogIds
+
+instance Data.ToHeaders DeleteFlowLogs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteFlowLogs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteFlowLogs where
+  toQuery DeleteFlowLogs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteFlowLogs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "FlowLogId" flowLogIds
+      ]
+
+-- | /See:/ 'newDeleteFlowLogsResponse' smart constructor.
+data DeleteFlowLogsResponse = DeleteFlowLogsResponse'
+  { -- | Information about the flow logs that could not be deleted successfully.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFlowLogsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unsuccessful', 'deleteFlowLogsResponse_unsuccessful' - Information about the flow logs that could not be deleted successfully.
+--
+-- 'httpStatus', 'deleteFlowLogsResponse_httpStatus' - The response's http status code.
+newDeleteFlowLogsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFlowLogsResponse
+newDeleteFlowLogsResponse pHttpStatus_ =
+  DeleteFlowLogsResponse'
+    { unsuccessful =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the flow logs that could not be deleted successfully.
+deleteFlowLogsResponse_unsuccessful :: Lens.Lens' DeleteFlowLogsResponse (Prelude.Maybe [UnsuccessfulItem])
+deleteFlowLogsResponse_unsuccessful = Lens.lens (\DeleteFlowLogsResponse' {unsuccessful} -> unsuccessful) (\s@DeleteFlowLogsResponse' {} a -> s {unsuccessful = a} :: DeleteFlowLogsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteFlowLogsResponse_httpStatus :: Lens.Lens' DeleteFlowLogsResponse Prelude.Int
+deleteFlowLogsResponse_httpStatus = Lens.lens (\DeleteFlowLogsResponse' {httpStatus} -> httpStatus) (\s@DeleteFlowLogsResponse' {} a -> s {httpStatus = a} :: DeleteFlowLogsResponse)
+
+instance Prelude.NFData DeleteFlowLogsResponse where
+  rnf DeleteFlowLogsResponse' {..} =
+    Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteFpgaImage.hs b/gen/Amazonka/EC2/DeleteFpgaImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteFpgaImage.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteFpgaImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Amazon FPGA Image (AFI).
+module Amazonka.EC2.DeleteFpgaImage
+  ( -- * Creating a Request
+    DeleteFpgaImage (..),
+    newDeleteFpgaImage,
+
+    -- * Request Lenses
+    deleteFpgaImage_dryRun,
+    deleteFpgaImage_fpgaImageId,
+
+    -- * Destructuring the Response
+    DeleteFpgaImageResponse (..),
+    newDeleteFpgaImageResponse,
+
+    -- * Response Lenses
+    deleteFpgaImageResponse_return,
+    deleteFpgaImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFpgaImage' smart constructor.
+data DeleteFpgaImage = DeleteFpgaImage'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AFI.
+    fpgaImageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFpgaImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteFpgaImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fpgaImageId', 'deleteFpgaImage_fpgaImageId' - The ID of the AFI.
+newDeleteFpgaImage ::
+  -- | 'fpgaImageId'
+  Prelude.Text ->
+  DeleteFpgaImage
+newDeleteFpgaImage pFpgaImageId_ =
+  DeleteFpgaImage'
+    { dryRun = Prelude.Nothing,
+      fpgaImageId = pFpgaImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteFpgaImage_dryRun :: Lens.Lens' DeleteFpgaImage (Prelude.Maybe Prelude.Bool)
+deleteFpgaImage_dryRun = Lens.lens (\DeleteFpgaImage' {dryRun} -> dryRun) (\s@DeleteFpgaImage' {} a -> s {dryRun = a} :: DeleteFpgaImage)
+
+-- | The ID of the AFI.
+deleteFpgaImage_fpgaImageId :: Lens.Lens' DeleteFpgaImage Prelude.Text
+deleteFpgaImage_fpgaImageId = Lens.lens (\DeleteFpgaImage' {fpgaImageId} -> fpgaImageId) (\s@DeleteFpgaImage' {} a -> s {fpgaImageId = a} :: DeleteFpgaImage)
+
+instance Core.AWSRequest DeleteFpgaImage where
+  type
+    AWSResponse DeleteFpgaImage =
+      DeleteFpgaImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteFpgaImageResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFpgaImage where
+  hashWithSalt _salt DeleteFpgaImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fpgaImageId
+
+instance Prelude.NFData DeleteFpgaImage where
+  rnf DeleteFpgaImage' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fpgaImageId
+
+instance Data.ToHeaders DeleteFpgaImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteFpgaImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteFpgaImage where
+  toQuery DeleteFpgaImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteFpgaImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "FpgaImageId" Data.=: fpgaImageId
+      ]
+
+-- | /See:/ 'newDeleteFpgaImageResponse' smart constructor.
+data DeleteFpgaImageResponse = DeleteFpgaImageResponse'
+  { -- | Is @true@ if the request succeeds, and an error otherwise.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFpgaImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'deleteFpgaImageResponse_return' - Is @true@ if the request succeeds, and an error otherwise.
+--
+-- 'httpStatus', 'deleteFpgaImageResponse_httpStatus' - The response's http status code.
+newDeleteFpgaImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFpgaImageResponse
+newDeleteFpgaImageResponse pHttpStatus_ =
+  DeleteFpgaImageResponse'
+    { return' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Is @true@ if the request succeeds, and an error otherwise.
+deleteFpgaImageResponse_return :: Lens.Lens' DeleteFpgaImageResponse (Prelude.Maybe Prelude.Bool)
+deleteFpgaImageResponse_return = Lens.lens (\DeleteFpgaImageResponse' {return'} -> return') (\s@DeleteFpgaImageResponse' {} a -> s {return' = a} :: DeleteFpgaImageResponse)
+
+-- | The response's http status code.
+deleteFpgaImageResponse_httpStatus :: Lens.Lens' DeleteFpgaImageResponse Prelude.Int
+deleteFpgaImageResponse_httpStatus = Lens.lens (\DeleteFpgaImageResponse' {httpStatus} -> httpStatus) (\s@DeleteFpgaImageResponse' {} a -> s {httpStatus = a} :: DeleteFpgaImageResponse)
+
+instance Prelude.NFData DeleteFpgaImageResponse where
+  rnf DeleteFpgaImageResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteInstanceEventWindow.hs b/gen/Amazonka/EC2/DeleteInstanceEventWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteInstanceEventWindow.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteInstanceEventWindow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified event window.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html Define event windows for scheduled events>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DeleteInstanceEventWindow
+  ( -- * Creating a Request
+    DeleteInstanceEventWindow (..),
+    newDeleteInstanceEventWindow,
+
+    -- * Request Lenses
+    deleteInstanceEventWindow_dryRun,
+    deleteInstanceEventWindow_forceDelete,
+    deleteInstanceEventWindow_instanceEventWindowId,
+
+    -- * Destructuring the Response
+    DeleteInstanceEventWindowResponse (..),
+    newDeleteInstanceEventWindowResponse,
+
+    -- * Response Lenses
+    deleteInstanceEventWindowResponse_instanceEventWindowState,
+    deleteInstanceEventWindowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteInstanceEventWindow' smart constructor.
+data DeleteInstanceEventWindow = DeleteInstanceEventWindow'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specify @true@ to force delete the event window. Use the force delete
+    -- parameter if the event window is currently associated with targets.
+    forceDelete :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the event window.
+    instanceEventWindowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInstanceEventWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteInstanceEventWindow_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'forceDelete', 'deleteInstanceEventWindow_forceDelete' - Specify @true@ to force delete the event window. Use the force delete
+-- parameter if the event window is currently associated with targets.
+--
+-- 'instanceEventWindowId', 'deleteInstanceEventWindow_instanceEventWindowId' - The ID of the event window.
+newDeleteInstanceEventWindow ::
+  -- | 'instanceEventWindowId'
+  Prelude.Text ->
+  DeleteInstanceEventWindow
+newDeleteInstanceEventWindow pInstanceEventWindowId_ =
+  DeleteInstanceEventWindow'
+    { dryRun =
+        Prelude.Nothing,
+      forceDelete = Prelude.Nothing,
+      instanceEventWindowId = pInstanceEventWindowId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteInstanceEventWindow_dryRun :: Lens.Lens' DeleteInstanceEventWindow (Prelude.Maybe Prelude.Bool)
+deleteInstanceEventWindow_dryRun = Lens.lens (\DeleteInstanceEventWindow' {dryRun} -> dryRun) (\s@DeleteInstanceEventWindow' {} a -> s {dryRun = a} :: DeleteInstanceEventWindow)
+
+-- | Specify @true@ to force delete the event window. Use the force delete
+-- parameter if the event window is currently associated with targets.
+deleteInstanceEventWindow_forceDelete :: Lens.Lens' DeleteInstanceEventWindow (Prelude.Maybe Prelude.Bool)
+deleteInstanceEventWindow_forceDelete = Lens.lens (\DeleteInstanceEventWindow' {forceDelete} -> forceDelete) (\s@DeleteInstanceEventWindow' {} a -> s {forceDelete = a} :: DeleteInstanceEventWindow)
+
+-- | The ID of the event window.
+deleteInstanceEventWindow_instanceEventWindowId :: Lens.Lens' DeleteInstanceEventWindow Prelude.Text
+deleteInstanceEventWindow_instanceEventWindowId = Lens.lens (\DeleteInstanceEventWindow' {instanceEventWindowId} -> instanceEventWindowId) (\s@DeleteInstanceEventWindow' {} a -> s {instanceEventWindowId = a} :: DeleteInstanceEventWindow)
+
+instance Core.AWSRequest DeleteInstanceEventWindow where
+  type
+    AWSResponse DeleteInstanceEventWindow =
+      DeleteInstanceEventWindowResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteInstanceEventWindowResponse'
+            Prelude.<$> (x Data..@? "instanceEventWindowState")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteInstanceEventWindow where
+  hashWithSalt _salt DeleteInstanceEventWindow' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` forceDelete
+      `Prelude.hashWithSalt` instanceEventWindowId
+
+instance Prelude.NFData DeleteInstanceEventWindow where
+  rnf DeleteInstanceEventWindow' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf forceDelete
+      `Prelude.seq` Prelude.rnf instanceEventWindowId
+
+instance Data.ToHeaders DeleteInstanceEventWindow where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteInstanceEventWindow where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteInstanceEventWindow where
+  toQuery DeleteInstanceEventWindow' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteInstanceEventWindow" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ForceDelete" Data.=: forceDelete,
+        "InstanceEventWindowId"
+          Data.=: instanceEventWindowId
+      ]
+
+-- | /See:/ 'newDeleteInstanceEventWindowResponse' smart constructor.
+data DeleteInstanceEventWindowResponse = DeleteInstanceEventWindowResponse'
+  { -- | The state of the event window.
+    instanceEventWindowState :: Prelude.Maybe InstanceEventWindowStateChange,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInstanceEventWindowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindowState', 'deleteInstanceEventWindowResponse_instanceEventWindowState' - The state of the event window.
+--
+-- 'httpStatus', 'deleteInstanceEventWindowResponse_httpStatus' - The response's http status code.
+newDeleteInstanceEventWindowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteInstanceEventWindowResponse
+newDeleteInstanceEventWindowResponse pHttpStatus_ =
+  DeleteInstanceEventWindowResponse'
+    { instanceEventWindowState =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The state of the event window.
+deleteInstanceEventWindowResponse_instanceEventWindowState :: Lens.Lens' DeleteInstanceEventWindowResponse (Prelude.Maybe InstanceEventWindowStateChange)
+deleteInstanceEventWindowResponse_instanceEventWindowState = Lens.lens (\DeleteInstanceEventWindowResponse' {instanceEventWindowState} -> instanceEventWindowState) (\s@DeleteInstanceEventWindowResponse' {} a -> s {instanceEventWindowState = a} :: DeleteInstanceEventWindowResponse)
+
+-- | The response's http status code.
+deleteInstanceEventWindowResponse_httpStatus :: Lens.Lens' DeleteInstanceEventWindowResponse Prelude.Int
+deleteInstanceEventWindowResponse_httpStatus = Lens.lens (\DeleteInstanceEventWindowResponse' {httpStatus} -> httpStatus) (\s@DeleteInstanceEventWindowResponse' {} a -> s {httpStatus = a} :: DeleteInstanceEventWindowResponse)
+
+instance
+  Prelude.NFData
+    DeleteInstanceEventWindowResponse
+  where
+  rnf DeleteInstanceEventWindowResponse' {..} =
+    Prelude.rnf instanceEventWindowState
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteInternetGateway.hs b/gen/Amazonka/EC2/DeleteInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteInternetGateway.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified internet gateway. You must detach the internet
+-- gateway from the VPC before you can delete it.
+module Amazonka.EC2.DeleteInternetGateway
+  ( -- * Creating a Request
+    DeleteInternetGateway (..),
+    newDeleteInternetGateway,
+
+    -- * Request Lenses
+    deleteInternetGateway_dryRun,
+    deleteInternetGateway_internetGatewayId,
+
+    -- * Destructuring the Response
+    DeleteInternetGatewayResponse (..),
+    newDeleteInternetGatewayResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteInternetGateway' smart constructor.
+data DeleteInternetGateway = DeleteInternetGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the internet gateway.
+    internetGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteInternetGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'internetGatewayId', 'deleteInternetGateway_internetGatewayId' - The ID of the internet gateway.
+newDeleteInternetGateway ::
+  -- | 'internetGatewayId'
+  Prelude.Text ->
+  DeleteInternetGateway
+newDeleteInternetGateway pInternetGatewayId_ =
+  DeleteInternetGateway'
+    { dryRun = Prelude.Nothing,
+      internetGatewayId = pInternetGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteInternetGateway_dryRun :: Lens.Lens' DeleteInternetGateway (Prelude.Maybe Prelude.Bool)
+deleteInternetGateway_dryRun = Lens.lens (\DeleteInternetGateway' {dryRun} -> dryRun) (\s@DeleteInternetGateway' {} a -> s {dryRun = a} :: DeleteInternetGateway)
+
+-- | The ID of the internet gateway.
+deleteInternetGateway_internetGatewayId :: Lens.Lens' DeleteInternetGateway Prelude.Text
+deleteInternetGateway_internetGatewayId = Lens.lens (\DeleteInternetGateway' {internetGatewayId} -> internetGatewayId) (\s@DeleteInternetGateway' {} a -> s {internetGatewayId = a} :: DeleteInternetGateway)
+
+instance Core.AWSRequest DeleteInternetGateway where
+  type
+    AWSResponse DeleteInternetGateway =
+      DeleteInternetGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteInternetGatewayResponse'
+
+instance Prelude.Hashable DeleteInternetGateway where
+  hashWithSalt _salt DeleteInternetGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` internetGatewayId
+
+instance Prelude.NFData DeleteInternetGateway where
+  rnf DeleteInternetGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf internetGatewayId
+
+instance Data.ToHeaders DeleteInternetGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteInternetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteInternetGateway where
+  toQuery DeleteInternetGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteInternetGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InternetGatewayId" Data.=: internetGatewayId
+      ]
+
+-- | /See:/ 'newDeleteInternetGatewayResponse' smart constructor.
+data DeleteInternetGatewayResponse = DeleteInternetGatewayResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteInternetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteInternetGatewayResponse ::
+  DeleteInternetGatewayResponse
+newDeleteInternetGatewayResponse =
+  DeleteInternetGatewayResponse'
+
+instance Prelude.NFData DeleteInternetGatewayResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteIpam.hs b/gen/Amazonka/EC2/DeleteIpam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteIpam.hs
@@ -0,0 +1,254 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteIpam
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an IPAM. Deleting an IPAM removes all monitored data associated
+-- with the IPAM including the historical data for CIDRs.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/delete-ipam.html Delete an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.DeleteIpam
+  ( -- * Creating a Request
+    DeleteIpam (..),
+    newDeleteIpam,
+
+    -- * Request Lenses
+    deleteIpam_cascade,
+    deleteIpam_dryRun,
+    deleteIpam_ipamId,
+
+    -- * Destructuring the Response
+    DeleteIpamResponse (..),
+    newDeleteIpamResponse,
+
+    -- * Response Lenses
+    deleteIpamResponse_ipam,
+    deleteIpamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIpam' smart constructor.
+data DeleteIpam = DeleteIpam'
+  { -- | Enables you to quickly delete an IPAM, private scopes, pools in private
+    -- scopes, and any allocations in the pools in private scopes. You cannot
+    -- delete the IPAM with this option if there is a pool in your public
+    -- scope. If you use this option, IPAM does the following:
+    --
+    -- -   Deallocates any CIDRs allocated to VPC resources (such as VPCs) in
+    --     pools in private scopes.
+    --
+    --     No VPC resources are deleted as a result of enabling this option.
+    --     The CIDR associated with the resource will no longer be allocated
+    --     from an IPAM pool, but the CIDR itself will remain unchanged.
+    --
+    -- -   Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private
+    --     scopes.
+    --
+    -- -   Deletes all IPAM pools in private scopes.
+    --
+    -- -   Deletes all non-default private scopes in the IPAM.
+    --
+    -- -   Deletes the default public and private scopes and the IPAM.
+    cascade :: Prelude.Maybe Prelude.Bool,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the IPAM to delete.
+    ipamId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpam' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cascade', 'deleteIpam_cascade' - Enables you to quickly delete an IPAM, private scopes, pools in private
+-- scopes, and any allocations in the pools in private scopes. You cannot
+-- delete the IPAM with this option if there is a pool in your public
+-- scope. If you use this option, IPAM does the following:
+--
+-- -   Deallocates any CIDRs allocated to VPC resources (such as VPCs) in
+--     pools in private scopes.
+--
+--     No VPC resources are deleted as a result of enabling this option.
+--     The CIDR associated with the resource will no longer be allocated
+--     from an IPAM pool, but the CIDR itself will remain unchanged.
+--
+-- -   Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private
+--     scopes.
+--
+-- -   Deletes all IPAM pools in private scopes.
+--
+-- -   Deletes all non-default private scopes in the IPAM.
+--
+-- -   Deletes the default public and private scopes and the IPAM.
+--
+-- 'dryRun', 'deleteIpam_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamId', 'deleteIpam_ipamId' - The ID of the IPAM to delete.
+newDeleteIpam ::
+  -- | 'ipamId'
+  Prelude.Text ->
+  DeleteIpam
+newDeleteIpam pIpamId_ =
+  DeleteIpam'
+    { cascade = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipamId = pIpamId_
+    }
+
+-- | Enables you to quickly delete an IPAM, private scopes, pools in private
+-- scopes, and any allocations in the pools in private scopes. You cannot
+-- delete the IPAM with this option if there is a pool in your public
+-- scope. If you use this option, IPAM does the following:
+--
+-- -   Deallocates any CIDRs allocated to VPC resources (such as VPCs) in
+--     pools in private scopes.
+--
+--     No VPC resources are deleted as a result of enabling this option.
+--     The CIDR associated with the resource will no longer be allocated
+--     from an IPAM pool, but the CIDR itself will remain unchanged.
+--
+-- -   Deprovisions all IPv4 CIDRs provisioned to IPAM pools in private
+--     scopes.
+--
+-- -   Deletes all IPAM pools in private scopes.
+--
+-- -   Deletes all non-default private scopes in the IPAM.
+--
+-- -   Deletes the default public and private scopes and the IPAM.
+deleteIpam_cascade :: Lens.Lens' DeleteIpam (Prelude.Maybe Prelude.Bool)
+deleteIpam_cascade = Lens.lens (\DeleteIpam' {cascade} -> cascade) (\s@DeleteIpam' {} a -> s {cascade = a} :: DeleteIpam)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+deleteIpam_dryRun :: Lens.Lens' DeleteIpam (Prelude.Maybe Prelude.Bool)
+deleteIpam_dryRun = Lens.lens (\DeleteIpam' {dryRun} -> dryRun) (\s@DeleteIpam' {} a -> s {dryRun = a} :: DeleteIpam)
+
+-- | The ID of the IPAM to delete.
+deleteIpam_ipamId :: Lens.Lens' DeleteIpam Prelude.Text
+deleteIpam_ipamId = Lens.lens (\DeleteIpam' {ipamId} -> ipamId) (\s@DeleteIpam' {} a -> s {ipamId = a} :: DeleteIpam)
+
+instance Core.AWSRequest DeleteIpam where
+  type AWSResponse DeleteIpam = DeleteIpamResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteIpamResponse'
+            Prelude.<$> (x Data..@? "ipam")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteIpam where
+  hashWithSalt _salt DeleteIpam' {..} =
+    _salt
+      `Prelude.hashWithSalt` cascade
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamId
+
+instance Prelude.NFData DeleteIpam where
+  rnf DeleteIpam' {..} =
+    Prelude.rnf cascade
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamId
+
+instance Data.ToHeaders DeleteIpam where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteIpam where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteIpam where
+  toQuery DeleteIpam' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteIpam" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Cascade" Data.=: cascade,
+        "DryRun" Data.=: dryRun,
+        "IpamId" Data.=: ipamId
+      ]
+
+-- | /See:/ 'newDeleteIpamResponse' smart constructor.
+data DeleteIpamResponse = DeleteIpamResponse'
+  { -- | Information about the results of the deletion.
+    ipam :: Prelude.Maybe Ipam,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipam', 'deleteIpamResponse_ipam' - Information about the results of the deletion.
+--
+-- 'httpStatus', 'deleteIpamResponse_httpStatus' - The response's http status code.
+newDeleteIpamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteIpamResponse
+newDeleteIpamResponse pHttpStatus_ =
+  DeleteIpamResponse'
+    { ipam = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the results of the deletion.
+deleteIpamResponse_ipam :: Lens.Lens' DeleteIpamResponse (Prelude.Maybe Ipam)
+deleteIpamResponse_ipam = Lens.lens (\DeleteIpamResponse' {ipam} -> ipam) (\s@DeleteIpamResponse' {} a -> s {ipam = a} :: DeleteIpamResponse)
+
+-- | The response's http status code.
+deleteIpamResponse_httpStatus :: Lens.Lens' DeleteIpamResponse Prelude.Int
+deleteIpamResponse_httpStatus = Lens.lens (\DeleteIpamResponse' {httpStatus} -> httpStatus) (\s@DeleteIpamResponse' {} a -> s {httpStatus = a} :: DeleteIpamResponse)
+
+instance Prelude.NFData DeleteIpamResponse where
+  rnf DeleteIpamResponse' {..} =
+    Prelude.rnf ipam
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteIpamPool.hs b/gen/Amazonka/EC2/DeleteIpamPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteIpamPool.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteIpamPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an IPAM pool.
+--
+-- You cannot delete an IPAM pool if there are allocations in it or CIDRs
+-- provisioned to it. To release allocations, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ReleaseIpamPoolAllocation.html ReleaseIpamPoolAllocation>.
+-- To deprovision pool CIDRs, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeprovisionIpamPoolCidr.html DeprovisionIpamPoolCidr>.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/delete-pool-ipam.html Delete a pool>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.DeleteIpamPool
+  ( -- * Creating a Request
+    DeleteIpamPool (..),
+    newDeleteIpamPool,
+
+    -- * Request Lenses
+    deleteIpamPool_dryRun,
+    deleteIpamPool_ipamPoolId,
+
+    -- * Destructuring the Response
+    DeleteIpamPoolResponse (..),
+    newDeleteIpamPoolResponse,
+
+    -- * Response Lenses
+    deleteIpamPoolResponse_ipamPool,
+    deleteIpamPoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIpamPool' smart constructor.
+data DeleteIpamPool = DeleteIpamPool'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the pool to delete.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpamPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteIpamPool_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamPoolId', 'deleteIpamPool_ipamPoolId' - The ID of the pool to delete.
+newDeleteIpamPool ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  DeleteIpamPool
+newDeleteIpamPool pIpamPoolId_ =
+  DeleteIpamPool'
+    { dryRun = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+deleteIpamPool_dryRun :: Lens.Lens' DeleteIpamPool (Prelude.Maybe Prelude.Bool)
+deleteIpamPool_dryRun = Lens.lens (\DeleteIpamPool' {dryRun} -> dryRun) (\s@DeleteIpamPool' {} a -> s {dryRun = a} :: DeleteIpamPool)
+
+-- | The ID of the pool to delete.
+deleteIpamPool_ipamPoolId :: Lens.Lens' DeleteIpamPool Prelude.Text
+deleteIpamPool_ipamPoolId = Lens.lens (\DeleteIpamPool' {ipamPoolId} -> ipamPoolId) (\s@DeleteIpamPool' {} a -> s {ipamPoolId = a} :: DeleteIpamPool)
+
+instance Core.AWSRequest DeleteIpamPool where
+  type
+    AWSResponse DeleteIpamPool =
+      DeleteIpamPoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteIpamPoolResponse'
+            Prelude.<$> (x Data..@? "ipamPool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteIpamPool where
+  hashWithSalt _salt DeleteIpamPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData DeleteIpamPool where
+  rnf DeleteIpamPool' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders DeleteIpamPool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteIpamPool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteIpamPool where
+  toQuery DeleteIpamPool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteIpamPool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newDeleteIpamPoolResponse' smart constructor.
+data DeleteIpamPoolResponse = DeleteIpamPoolResponse'
+  { -- | Information about the results of the deletion.
+    ipamPool :: Prelude.Maybe IpamPool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpamPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPool', 'deleteIpamPoolResponse_ipamPool' - Information about the results of the deletion.
+--
+-- 'httpStatus', 'deleteIpamPoolResponse_httpStatus' - The response's http status code.
+newDeleteIpamPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteIpamPoolResponse
+newDeleteIpamPoolResponse pHttpStatus_ =
+  DeleteIpamPoolResponse'
+    { ipamPool = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the results of the deletion.
+deleteIpamPoolResponse_ipamPool :: Lens.Lens' DeleteIpamPoolResponse (Prelude.Maybe IpamPool)
+deleteIpamPoolResponse_ipamPool = Lens.lens (\DeleteIpamPoolResponse' {ipamPool} -> ipamPool) (\s@DeleteIpamPoolResponse' {} a -> s {ipamPool = a} :: DeleteIpamPoolResponse)
+
+-- | The response's http status code.
+deleteIpamPoolResponse_httpStatus :: Lens.Lens' DeleteIpamPoolResponse Prelude.Int
+deleteIpamPoolResponse_httpStatus = Lens.lens (\DeleteIpamPoolResponse' {httpStatus} -> httpStatus) (\s@DeleteIpamPoolResponse' {} a -> s {httpStatus = a} :: DeleteIpamPoolResponse)
+
+instance Prelude.NFData DeleteIpamPoolResponse where
+  rnf DeleteIpamPoolResponse' {..} =
+    Prelude.rnf ipamPool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteIpamScope.hs b/gen/Amazonka/EC2/DeleteIpamScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteIpamScope.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteIpamScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete the scope for an IPAM. You cannot delete the default scopes.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/delete-scope-ipam.html Delete a scope>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.DeleteIpamScope
+  ( -- * Creating a Request
+    DeleteIpamScope (..),
+    newDeleteIpamScope,
+
+    -- * Request Lenses
+    deleteIpamScope_dryRun,
+    deleteIpamScope_ipamScopeId,
+
+    -- * Destructuring the Response
+    DeleteIpamScopeResponse (..),
+    newDeleteIpamScopeResponse,
+
+    -- * Response Lenses
+    deleteIpamScopeResponse_ipamScope,
+    deleteIpamScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteIpamScope' smart constructor.
+data DeleteIpamScope = DeleteIpamScope'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the scope to delete.
+    ipamScopeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpamScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteIpamScope_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamScopeId', 'deleteIpamScope_ipamScopeId' - The ID of the scope to delete.
+newDeleteIpamScope ::
+  -- | 'ipamScopeId'
+  Prelude.Text ->
+  DeleteIpamScope
+newDeleteIpamScope pIpamScopeId_ =
+  DeleteIpamScope'
+    { dryRun = Prelude.Nothing,
+      ipamScopeId = pIpamScopeId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+deleteIpamScope_dryRun :: Lens.Lens' DeleteIpamScope (Prelude.Maybe Prelude.Bool)
+deleteIpamScope_dryRun = Lens.lens (\DeleteIpamScope' {dryRun} -> dryRun) (\s@DeleteIpamScope' {} a -> s {dryRun = a} :: DeleteIpamScope)
+
+-- | The ID of the scope to delete.
+deleteIpamScope_ipamScopeId :: Lens.Lens' DeleteIpamScope Prelude.Text
+deleteIpamScope_ipamScopeId = Lens.lens (\DeleteIpamScope' {ipamScopeId} -> ipamScopeId) (\s@DeleteIpamScope' {} a -> s {ipamScopeId = a} :: DeleteIpamScope)
+
+instance Core.AWSRequest DeleteIpamScope where
+  type
+    AWSResponse DeleteIpamScope =
+      DeleteIpamScopeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteIpamScopeResponse'
+            Prelude.<$> (x Data..@? "ipamScope")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteIpamScope where
+  hashWithSalt _salt DeleteIpamScope' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamScopeId
+
+instance Prelude.NFData DeleteIpamScope where
+  rnf DeleteIpamScope' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamScopeId
+
+instance Data.ToHeaders DeleteIpamScope where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteIpamScope where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteIpamScope where
+  toQuery DeleteIpamScope' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteIpamScope" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "IpamScopeId" Data.=: ipamScopeId
+      ]
+
+-- | /See:/ 'newDeleteIpamScopeResponse' smart constructor.
+data DeleteIpamScopeResponse = DeleteIpamScopeResponse'
+  { -- | Information about the results of the deletion.
+    ipamScope :: Prelude.Maybe IpamScope,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteIpamScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamScope', 'deleteIpamScopeResponse_ipamScope' - Information about the results of the deletion.
+--
+-- 'httpStatus', 'deleteIpamScopeResponse_httpStatus' - The response's http status code.
+newDeleteIpamScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteIpamScopeResponse
+newDeleteIpamScopeResponse pHttpStatus_ =
+  DeleteIpamScopeResponse'
+    { ipamScope =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the results of the deletion.
+deleteIpamScopeResponse_ipamScope :: Lens.Lens' DeleteIpamScopeResponse (Prelude.Maybe IpamScope)
+deleteIpamScopeResponse_ipamScope = Lens.lens (\DeleteIpamScopeResponse' {ipamScope} -> ipamScope) (\s@DeleteIpamScopeResponse' {} a -> s {ipamScope = a} :: DeleteIpamScopeResponse)
+
+-- | The response's http status code.
+deleteIpamScopeResponse_httpStatus :: Lens.Lens' DeleteIpamScopeResponse Prelude.Int
+deleteIpamScopeResponse_httpStatus = Lens.lens (\DeleteIpamScopeResponse' {httpStatus} -> httpStatus) (\s@DeleteIpamScopeResponse' {} a -> s {httpStatus = a} :: DeleteIpamScopeResponse)
+
+instance Prelude.NFData DeleteIpamScopeResponse where
+  rnf DeleteIpamScopeResponse' {..} =
+    Prelude.rnf ipamScope
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteKeyPair.hs b/gen/Amazonka/EC2/DeleteKeyPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteKeyPair.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteKeyPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified key pair, by removing the public key from Amazon
+-- EC2.
+module Amazonka.EC2.DeleteKeyPair
+  ( -- * Creating a Request
+    DeleteKeyPair (..),
+    newDeleteKeyPair,
+
+    -- * Request Lenses
+    deleteKeyPair_dryRun,
+    deleteKeyPair_keyName,
+    deleteKeyPair_keyPairId,
+
+    -- * Destructuring the Response
+    DeleteKeyPairResponse (..),
+    newDeleteKeyPairResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteKeyPair' smart constructor.
+data DeleteKeyPair = DeleteKeyPair'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the key pair.
+    keyPairId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteKeyPair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteKeyPair_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'keyName', 'deleteKeyPair_keyName' - The name of the key pair.
+--
+-- 'keyPairId', 'deleteKeyPair_keyPairId' - The ID of the key pair.
+newDeleteKeyPair ::
+  DeleteKeyPair
+newDeleteKeyPair =
+  DeleteKeyPair'
+    { dryRun = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      keyPairId = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteKeyPair_dryRun :: Lens.Lens' DeleteKeyPair (Prelude.Maybe Prelude.Bool)
+deleteKeyPair_dryRun = Lens.lens (\DeleteKeyPair' {dryRun} -> dryRun) (\s@DeleteKeyPair' {} a -> s {dryRun = a} :: DeleteKeyPair)
+
+-- | The name of the key pair.
+deleteKeyPair_keyName :: Lens.Lens' DeleteKeyPair (Prelude.Maybe Prelude.Text)
+deleteKeyPair_keyName = Lens.lens (\DeleteKeyPair' {keyName} -> keyName) (\s@DeleteKeyPair' {} a -> s {keyName = a} :: DeleteKeyPair)
+
+-- | The ID of the key pair.
+deleteKeyPair_keyPairId :: Lens.Lens' DeleteKeyPair (Prelude.Maybe Prelude.Text)
+deleteKeyPair_keyPairId = Lens.lens (\DeleteKeyPair' {keyPairId} -> keyPairId) (\s@DeleteKeyPair' {} a -> s {keyPairId = a} :: DeleteKeyPair)
+
+instance Core.AWSRequest DeleteKeyPair where
+  type
+    AWSResponse DeleteKeyPair =
+      DeleteKeyPairResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteKeyPairResponse'
+
+instance Prelude.Hashable DeleteKeyPair where
+  hashWithSalt _salt DeleteKeyPair' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` keyPairId
+
+instance Prelude.NFData DeleteKeyPair where
+  rnf DeleteKeyPair' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf keyPairId
+
+instance Data.ToHeaders DeleteKeyPair where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteKeyPair where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteKeyPair where
+  toQuery DeleteKeyPair' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteKeyPair" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "KeyName" Data.=: keyName,
+        "KeyPairId" Data.=: keyPairId
+      ]
+
+-- | /See:/ 'newDeleteKeyPairResponse' smart constructor.
+data DeleteKeyPairResponse = DeleteKeyPairResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteKeyPairResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteKeyPairResponse ::
+  DeleteKeyPairResponse
+newDeleteKeyPairResponse = DeleteKeyPairResponse'
+
+instance Prelude.NFData DeleteKeyPairResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteLaunchTemplate.hs b/gen/Amazonka/EC2/DeleteLaunchTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteLaunchTemplate.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteLaunchTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a launch template. Deleting a launch template deletes all of its
+-- versions.
+module Amazonka.EC2.DeleteLaunchTemplate
+  ( -- * Creating a Request
+    DeleteLaunchTemplate (..),
+    newDeleteLaunchTemplate,
+
+    -- * Request Lenses
+    deleteLaunchTemplate_dryRun,
+    deleteLaunchTemplate_launchTemplateId,
+    deleteLaunchTemplate_launchTemplateName,
+
+    -- * Destructuring the Response
+    DeleteLaunchTemplateResponse (..),
+    newDeleteLaunchTemplateResponse,
+
+    -- * Response Lenses
+    deleteLaunchTemplateResponse_launchTemplate,
+    deleteLaunchTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLaunchTemplate' smart constructor.
+data DeleteLaunchTemplate = DeleteLaunchTemplate'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateId@ or the
+    -- @LaunchTemplateName@, but not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateName@ or the
+    -- @LaunchTemplateId@, but not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteLaunchTemplate_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchTemplateId', 'deleteLaunchTemplate_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+--
+-- 'launchTemplateName', 'deleteLaunchTemplate_launchTemplateName' - The name of the launch template.
+--
+-- You must specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+newDeleteLaunchTemplate ::
+  DeleteLaunchTemplate
+newDeleteLaunchTemplate =
+  DeleteLaunchTemplate'
+    { dryRun = Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteLaunchTemplate_dryRun :: Lens.Lens' DeleteLaunchTemplate (Prelude.Maybe Prelude.Bool)
+deleteLaunchTemplate_dryRun = Lens.lens (\DeleteLaunchTemplate' {dryRun} -> dryRun) (\s@DeleteLaunchTemplate' {} a -> s {dryRun = a} :: DeleteLaunchTemplate)
+
+-- | The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+deleteLaunchTemplate_launchTemplateId :: Lens.Lens' DeleteLaunchTemplate (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplate_launchTemplateId = Lens.lens (\DeleteLaunchTemplate' {launchTemplateId} -> launchTemplateId) (\s@DeleteLaunchTemplate' {} a -> s {launchTemplateId = a} :: DeleteLaunchTemplate)
+
+-- | The name of the launch template.
+--
+-- You must specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+deleteLaunchTemplate_launchTemplateName :: Lens.Lens' DeleteLaunchTemplate (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplate_launchTemplateName = Lens.lens (\DeleteLaunchTemplate' {launchTemplateName} -> launchTemplateName) (\s@DeleteLaunchTemplate' {} a -> s {launchTemplateName = a} :: DeleteLaunchTemplate)
+
+instance Core.AWSRequest DeleteLaunchTemplate where
+  type
+    AWSResponse DeleteLaunchTemplate =
+      DeleteLaunchTemplateResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteLaunchTemplateResponse'
+            Prelude.<$> (x Data..@? "launchTemplate")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLaunchTemplate where
+  hashWithSalt _salt DeleteLaunchTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+
+instance Prelude.NFData DeleteLaunchTemplate where
+  rnf DeleteLaunchTemplate' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+
+instance Data.ToHeaders DeleteLaunchTemplate where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteLaunchTemplate where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLaunchTemplate where
+  toQuery DeleteLaunchTemplate' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteLaunchTemplate" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName
+      ]
+
+-- | /See:/ 'newDeleteLaunchTemplateResponse' smart constructor.
+data DeleteLaunchTemplateResponse = DeleteLaunchTemplateResponse'
+  { -- | Information about the launch template.
+    launchTemplate :: Prelude.Maybe LaunchTemplate,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplate', 'deleteLaunchTemplateResponse_launchTemplate' - Information about the launch template.
+--
+-- 'httpStatus', 'deleteLaunchTemplateResponse_httpStatus' - The response's http status code.
+newDeleteLaunchTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLaunchTemplateResponse
+newDeleteLaunchTemplateResponse pHttpStatus_ =
+  DeleteLaunchTemplateResponse'
+    { launchTemplate =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the launch template.
+deleteLaunchTemplateResponse_launchTemplate :: Lens.Lens' DeleteLaunchTemplateResponse (Prelude.Maybe LaunchTemplate)
+deleteLaunchTemplateResponse_launchTemplate = Lens.lens (\DeleteLaunchTemplateResponse' {launchTemplate} -> launchTemplate) (\s@DeleteLaunchTemplateResponse' {} a -> s {launchTemplate = a} :: DeleteLaunchTemplateResponse)
+
+-- | The response's http status code.
+deleteLaunchTemplateResponse_httpStatus :: Lens.Lens' DeleteLaunchTemplateResponse Prelude.Int
+deleteLaunchTemplateResponse_httpStatus = Lens.lens (\DeleteLaunchTemplateResponse' {httpStatus} -> httpStatus) (\s@DeleteLaunchTemplateResponse' {} a -> s {httpStatus = a} :: DeleteLaunchTemplateResponse)
+
+instance Prelude.NFData DeleteLaunchTemplateResponse where
+  rnf DeleteLaunchTemplateResponse' {..} =
+    Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteLaunchTemplateVersions.hs b/gen/Amazonka/EC2/DeleteLaunchTemplateVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteLaunchTemplateVersions.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteLaunchTemplateVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more versions of a launch template. You cannot delete the
+-- default version of a launch template; you must first assign a different
+-- version as the default. If the default version is the only version for
+-- the launch template, you must delete the entire launch template using
+-- DeleteLaunchTemplate.
+module Amazonka.EC2.DeleteLaunchTemplateVersions
+  ( -- * Creating a Request
+    DeleteLaunchTemplateVersions (..),
+    newDeleteLaunchTemplateVersions,
+
+    -- * Request Lenses
+    deleteLaunchTemplateVersions_dryRun,
+    deleteLaunchTemplateVersions_launchTemplateId,
+    deleteLaunchTemplateVersions_launchTemplateName,
+    deleteLaunchTemplateVersions_versions,
+
+    -- * Destructuring the Response
+    DeleteLaunchTemplateVersionsResponse (..),
+    newDeleteLaunchTemplateVersionsResponse,
+
+    -- * Response Lenses
+    deleteLaunchTemplateVersionsResponse_successfullyDeletedLaunchTemplateVersions,
+    deleteLaunchTemplateVersionsResponse_unsuccessfullyDeletedLaunchTemplateVersions,
+    deleteLaunchTemplateVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLaunchTemplateVersions' smart constructor.
+data DeleteLaunchTemplateVersions = DeleteLaunchTemplateVersions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateId@ or the
+    -- @LaunchTemplateName@, but not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateName@ or the
+    -- @LaunchTemplateId@, but not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The version numbers of one or more launch template versions to delete.
+    versions :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchTemplateVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteLaunchTemplateVersions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchTemplateId', 'deleteLaunchTemplateVersions_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+--
+-- 'launchTemplateName', 'deleteLaunchTemplateVersions_launchTemplateName' - The name of the launch template.
+--
+-- You must specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+--
+-- 'versions', 'deleteLaunchTemplateVersions_versions' - The version numbers of one or more launch template versions to delete.
+newDeleteLaunchTemplateVersions ::
+  DeleteLaunchTemplateVersions
+newDeleteLaunchTemplateVersions =
+  DeleteLaunchTemplateVersions'
+    { dryRun =
+        Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      versions = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteLaunchTemplateVersions_dryRun :: Lens.Lens' DeleteLaunchTemplateVersions (Prelude.Maybe Prelude.Bool)
+deleteLaunchTemplateVersions_dryRun = Lens.lens (\DeleteLaunchTemplateVersions' {dryRun} -> dryRun) (\s@DeleteLaunchTemplateVersions' {} a -> s {dryRun = a} :: DeleteLaunchTemplateVersions)
+
+-- | The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+deleteLaunchTemplateVersions_launchTemplateId :: Lens.Lens' DeleteLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplateVersions_launchTemplateId = Lens.lens (\DeleteLaunchTemplateVersions' {launchTemplateId} -> launchTemplateId) (\s@DeleteLaunchTemplateVersions' {} a -> s {launchTemplateId = a} :: DeleteLaunchTemplateVersions)
+
+-- | The name of the launch template.
+--
+-- You must specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+deleteLaunchTemplateVersions_launchTemplateName :: Lens.Lens' DeleteLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplateVersions_launchTemplateName = Lens.lens (\DeleteLaunchTemplateVersions' {launchTemplateName} -> launchTemplateName) (\s@DeleteLaunchTemplateVersions' {} a -> s {launchTemplateName = a} :: DeleteLaunchTemplateVersions)
+
+-- | The version numbers of one or more launch template versions to delete.
+deleteLaunchTemplateVersions_versions :: Lens.Lens' DeleteLaunchTemplateVersions [Prelude.Text]
+deleteLaunchTemplateVersions_versions = Lens.lens (\DeleteLaunchTemplateVersions' {versions} -> versions) (\s@DeleteLaunchTemplateVersions' {} a -> s {versions = a} :: DeleteLaunchTemplateVersions) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteLaunchTemplateVersions where
+  type
+    AWSResponse DeleteLaunchTemplateVersions =
+      DeleteLaunchTemplateVersionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteLaunchTemplateVersionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "successfullyDeletedLaunchTemplateVersionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessfullyDeletedLaunchTemplateVersionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteLaunchTemplateVersions
+  where
+  hashWithSalt _salt DeleteLaunchTemplateVersions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+      `Prelude.hashWithSalt` versions
+
+instance Prelude.NFData DeleteLaunchTemplateVersions where
+  rnf DeleteLaunchTemplateVersions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf versions
+
+instance Data.ToHeaders DeleteLaunchTemplateVersions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteLaunchTemplateVersions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLaunchTemplateVersions where
+  toQuery DeleteLaunchTemplateVersions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteLaunchTemplateVersions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        Data.toQueryList "LaunchTemplateVersion" versions
+      ]
+
+-- | /See:/ 'newDeleteLaunchTemplateVersionsResponse' smart constructor.
+data DeleteLaunchTemplateVersionsResponse = DeleteLaunchTemplateVersionsResponse'
+  { -- | Information about the launch template versions that were successfully
+    -- deleted.
+    successfullyDeletedLaunchTemplateVersions :: Prelude.Maybe [DeleteLaunchTemplateVersionsResponseSuccessItem],
+    -- | Information about the launch template versions that could not be
+    -- deleted.
+    unsuccessfullyDeletedLaunchTemplateVersions :: Prelude.Maybe [DeleteLaunchTemplateVersionsResponseErrorItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchTemplateVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successfullyDeletedLaunchTemplateVersions', 'deleteLaunchTemplateVersionsResponse_successfullyDeletedLaunchTemplateVersions' - Information about the launch template versions that were successfully
+-- deleted.
+--
+-- 'unsuccessfullyDeletedLaunchTemplateVersions', 'deleteLaunchTemplateVersionsResponse_unsuccessfullyDeletedLaunchTemplateVersions' - Information about the launch template versions that could not be
+-- deleted.
+--
+-- 'httpStatus', 'deleteLaunchTemplateVersionsResponse_httpStatus' - The response's http status code.
+newDeleteLaunchTemplateVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLaunchTemplateVersionsResponse
+newDeleteLaunchTemplateVersionsResponse pHttpStatus_ =
+  DeleteLaunchTemplateVersionsResponse'
+    { successfullyDeletedLaunchTemplateVersions =
+        Prelude.Nothing,
+      unsuccessfullyDeletedLaunchTemplateVersions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the launch template versions that were successfully
+-- deleted.
+deleteLaunchTemplateVersionsResponse_successfullyDeletedLaunchTemplateVersions :: Lens.Lens' DeleteLaunchTemplateVersionsResponse (Prelude.Maybe [DeleteLaunchTemplateVersionsResponseSuccessItem])
+deleteLaunchTemplateVersionsResponse_successfullyDeletedLaunchTemplateVersions = Lens.lens (\DeleteLaunchTemplateVersionsResponse' {successfullyDeletedLaunchTemplateVersions} -> successfullyDeletedLaunchTemplateVersions) (\s@DeleteLaunchTemplateVersionsResponse' {} a -> s {successfullyDeletedLaunchTemplateVersions = a} :: DeleteLaunchTemplateVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the launch template versions that could not be
+-- deleted.
+deleteLaunchTemplateVersionsResponse_unsuccessfullyDeletedLaunchTemplateVersions :: Lens.Lens' DeleteLaunchTemplateVersionsResponse (Prelude.Maybe [DeleteLaunchTemplateVersionsResponseErrorItem])
+deleteLaunchTemplateVersionsResponse_unsuccessfullyDeletedLaunchTemplateVersions = Lens.lens (\DeleteLaunchTemplateVersionsResponse' {unsuccessfullyDeletedLaunchTemplateVersions} -> unsuccessfullyDeletedLaunchTemplateVersions) (\s@DeleteLaunchTemplateVersionsResponse' {} a -> s {unsuccessfullyDeletedLaunchTemplateVersions = a} :: DeleteLaunchTemplateVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteLaunchTemplateVersionsResponse_httpStatus :: Lens.Lens' DeleteLaunchTemplateVersionsResponse Prelude.Int
+deleteLaunchTemplateVersionsResponse_httpStatus = Lens.lens (\DeleteLaunchTemplateVersionsResponse' {httpStatus} -> httpStatus) (\s@DeleteLaunchTemplateVersionsResponse' {} a -> s {httpStatus = a} :: DeleteLaunchTemplateVersionsResponse)
+
+instance
+  Prelude.NFData
+    DeleteLaunchTemplateVersionsResponse
+  where
+  rnf DeleteLaunchTemplateVersionsResponse' {..} =
+    Prelude.rnf
+      successfullyDeletedLaunchTemplateVersions
+      `Prelude.seq` Prelude.rnf
+        unsuccessfullyDeletedLaunchTemplateVersions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteLocalGatewayRoute.hs b/gen/Amazonka/EC2/DeleteLocalGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteLocalGatewayRoute.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteLocalGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified route from the specified local gateway route
+-- table.
+module Amazonka.EC2.DeleteLocalGatewayRoute
+  ( -- * Creating a Request
+    DeleteLocalGatewayRoute (..),
+    newDeleteLocalGatewayRoute,
+
+    -- * Request Lenses
+    deleteLocalGatewayRoute_dryRun,
+    deleteLocalGatewayRoute_destinationCidrBlock,
+    deleteLocalGatewayRoute_localGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    DeleteLocalGatewayRouteResponse (..),
+    newDeleteLocalGatewayRouteResponse,
+
+    -- * Response Lenses
+    deleteLocalGatewayRouteResponse_route,
+    deleteLocalGatewayRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLocalGatewayRoute' smart constructor.
+data DeleteLocalGatewayRoute = DeleteLocalGatewayRoute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The CIDR range for the route. This must match the CIDR for the route
+    -- exactly.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteLocalGatewayRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'destinationCidrBlock', 'deleteLocalGatewayRoute_destinationCidrBlock' - The CIDR range for the route. This must match the CIDR for the route
+-- exactly.
+--
+-- 'localGatewayRouteTableId', 'deleteLocalGatewayRoute_localGatewayRouteTableId' - The ID of the local gateway route table.
+newDeleteLocalGatewayRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  DeleteLocalGatewayRoute
+newDeleteLocalGatewayRoute
+  pDestinationCidrBlock_
+  pLocalGatewayRouteTableId_ =
+    DeleteLocalGatewayRoute'
+      { dryRun = Prelude.Nothing,
+        destinationCidrBlock = pDestinationCidrBlock_,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteLocalGatewayRoute_dryRun :: Lens.Lens' DeleteLocalGatewayRoute (Prelude.Maybe Prelude.Bool)
+deleteLocalGatewayRoute_dryRun = Lens.lens (\DeleteLocalGatewayRoute' {dryRun} -> dryRun) (\s@DeleteLocalGatewayRoute' {} a -> s {dryRun = a} :: DeleteLocalGatewayRoute)
+
+-- | The CIDR range for the route. This must match the CIDR for the route
+-- exactly.
+deleteLocalGatewayRoute_destinationCidrBlock :: Lens.Lens' DeleteLocalGatewayRoute Prelude.Text
+deleteLocalGatewayRoute_destinationCidrBlock = Lens.lens (\DeleteLocalGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@DeleteLocalGatewayRoute' {} a -> s {destinationCidrBlock = a} :: DeleteLocalGatewayRoute)
+
+-- | The ID of the local gateway route table.
+deleteLocalGatewayRoute_localGatewayRouteTableId :: Lens.Lens' DeleteLocalGatewayRoute Prelude.Text
+deleteLocalGatewayRoute_localGatewayRouteTableId = Lens.lens (\DeleteLocalGatewayRoute' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@DeleteLocalGatewayRoute' {} a -> s {localGatewayRouteTableId = a} :: DeleteLocalGatewayRoute)
+
+instance Core.AWSRequest DeleteLocalGatewayRoute where
+  type
+    AWSResponse DeleteLocalGatewayRoute =
+      DeleteLocalGatewayRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteLocalGatewayRouteResponse'
+            Prelude.<$> (x Data..@? "route")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteLocalGatewayRoute where
+  hashWithSalt _salt DeleteLocalGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData DeleteLocalGatewayRoute where
+  rnf DeleteLocalGatewayRoute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+
+instance Data.ToHeaders DeleteLocalGatewayRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteLocalGatewayRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLocalGatewayRoute where
+  toQuery DeleteLocalGatewayRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteLocalGatewayRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "LocalGatewayRouteTableId"
+          Data.=: localGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newDeleteLocalGatewayRouteResponse' smart constructor.
+data DeleteLocalGatewayRouteResponse = DeleteLocalGatewayRouteResponse'
+  { -- | Information about the route.
+    route :: Prelude.Maybe LocalGatewayRoute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'route', 'deleteLocalGatewayRouteResponse_route' - Information about the route.
+--
+-- 'httpStatus', 'deleteLocalGatewayRouteResponse_httpStatus' - The response's http status code.
+newDeleteLocalGatewayRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLocalGatewayRouteResponse
+newDeleteLocalGatewayRouteResponse pHttpStatus_ =
+  DeleteLocalGatewayRouteResponse'
+    { route =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the route.
+deleteLocalGatewayRouteResponse_route :: Lens.Lens' DeleteLocalGatewayRouteResponse (Prelude.Maybe LocalGatewayRoute)
+deleteLocalGatewayRouteResponse_route = Lens.lens (\DeleteLocalGatewayRouteResponse' {route} -> route) (\s@DeleteLocalGatewayRouteResponse' {} a -> s {route = a} :: DeleteLocalGatewayRouteResponse)
+
+-- | The response's http status code.
+deleteLocalGatewayRouteResponse_httpStatus :: Lens.Lens' DeleteLocalGatewayRouteResponse Prelude.Int
+deleteLocalGatewayRouteResponse_httpStatus = Lens.lens (\DeleteLocalGatewayRouteResponse' {httpStatus} -> httpStatus) (\s@DeleteLocalGatewayRouteResponse' {} a -> s {httpStatus = a} :: DeleteLocalGatewayRouteResponse)
+
+instance
+  Prelude.NFData
+    DeleteLocalGatewayRouteResponse
+  where
+  rnf DeleteLocalGatewayRouteResponse' {..} =
+    Prelude.rnf route
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteLocalGatewayRouteTable.hs b/gen/Amazonka/EC2/DeleteLocalGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteLocalGatewayRouteTable.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteLocalGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a local gateway route table.
+module Amazonka.EC2.DeleteLocalGatewayRouteTable
+  ( -- * Creating a Request
+    DeleteLocalGatewayRouteTable (..),
+    newDeleteLocalGatewayRouteTable,
+
+    -- * Request Lenses
+    deleteLocalGatewayRouteTable_dryRun,
+    deleteLocalGatewayRouteTable_localGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    DeleteLocalGatewayRouteTableResponse (..),
+    newDeleteLocalGatewayRouteTableResponse,
+
+    -- * Response Lenses
+    deleteLocalGatewayRouteTableResponse_localGatewayRouteTable,
+    deleteLocalGatewayRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLocalGatewayRouteTable' smart constructor.
+data DeleteLocalGatewayRouteTable = DeleteLocalGatewayRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteLocalGatewayRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'localGatewayRouteTableId', 'deleteLocalGatewayRouteTable_localGatewayRouteTableId' - The ID of the local gateway route table.
+newDeleteLocalGatewayRouteTable ::
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  DeleteLocalGatewayRouteTable
+newDeleteLocalGatewayRouteTable
+  pLocalGatewayRouteTableId_ =
+    DeleteLocalGatewayRouteTable'
+      { dryRun =
+          Prelude.Nothing,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteLocalGatewayRouteTable_dryRun :: Lens.Lens' DeleteLocalGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+deleteLocalGatewayRouteTable_dryRun = Lens.lens (\DeleteLocalGatewayRouteTable' {dryRun} -> dryRun) (\s@DeleteLocalGatewayRouteTable' {} a -> s {dryRun = a} :: DeleteLocalGatewayRouteTable)
+
+-- | The ID of the local gateway route table.
+deleteLocalGatewayRouteTable_localGatewayRouteTableId :: Lens.Lens' DeleteLocalGatewayRouteTable Prelude.Text
+deleteLocalGatewayRouteTable_localGatewayRouteTableId = Lens.lens (\DeleteLocalGatewayRouteTable' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@DeleteLocalGatewayRouteTable' {} a -> s {localGatewayRouteTableId = a} :: DeleteLocalGatewayRouteTable)
+
+instance Core.AWSRequest DeleteLocalGatewayRouteTable where
+  type
+    AWSResponse DeleteLocalGatewayRouteTable =
+      DeleteLocalGatewayRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteLocalGatewayRouteTableResponse'
+            Prelude.<$> (x Data..@? "localGatewayRouteTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteLocalGatewayRouteTable
+  where
+  hashWithSalt _salt DeleteLocalGatewayRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData DeleteLocalGatewayRouteTable where
+  rnf DeleteLocalGatewayRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+
+instance Data.ToHeaders DeleteLocalGatewayRouteTable where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteLocalGatewayRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteLocalGatewayRouteTable where
+  toQuery DeleteLocalGatewayRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteLocalGatewayRouteTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LocalGatewayRouteTableId"
+          Data.=: localGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newDeleteLocalGatewayRouteTableResponse' smart constructor.
+data DeleteLocalGatewayRouteTableResponse = DeleteLocalGatewayRouteTableResponse'
+  { -- | Information about the local gateway route table.
+    localGatewayRouteTable :: Prelude.Maybe LocalGatewayRouteTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTable', 'deleteLocalGatewayRouteTableResponse_localGatewayRouteTable' - Information about the local gateway route table.
+--
+-- 'httpStatus', 'deleteLocalGatewayRouteTableResponse_httpStatus' - The response's http status code.
+newDeleteLocalGatewayRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLocalGatewayRouteTableResponse
+newDeleteLocalGatewayRouteTableResponse pHttpStatus_ =
+  DeleteLocalGatewayRouteTableResponse'
+    { localGatewayRouteTable =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the local gateway route table.
+deleteLocalGatewayRouteTableResponse_localGatewayRouteTable :: Lens.Lens' DeleteLocalGatewayRouteTableResponse (Prelude.Maybe LocalGatewayRouteTable)
+deleteLocalGatewayRouteTableResponse_localGatewayRouteTable = Lens.lens (\DeleteLocalGatewayRouteTableResponse' {localGatewayRouteTable} -> localGatewayRouteTable) (\s@DeleteLocalGatewayRouteTableResponse' {} a -> s {localGatewayRouteTable = a} :: DeleteLocalGatewayRouteTableResponse)
+
+-- | The response's http status code.
+deleteLocalGatewayRouteTableResponse_httpStatus :: Lens.Lens' DeleteLocalGatewayRouteTableResponse Prelude.Int
+deleteLocalGatewayRouteTableResponse_httpStatus = Lens.lens (\DeleteLocalGatewayRouteTableResponse' {httpStatus} -> httpStatus) (\s@DeleteLocalGatewayRouteTableResponse' {} a -> s {httpStatus = a} :: DeleteLocalGatewayRouteTableResponse)
+
+instance
+  Prelude.NFData
+    DeleteLocalGatewayRouteTableResponse
+  where
+  rnf DeleteLocalGatewayRouteTableResponse' {..} =
+    Prelude.rnf localGatewayRouteTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs b/gen/Amazonka/EC2/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a local gateway route table virtual interface group association.
+module Amazonka.EC2.DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  ( -- * Creating a Request
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation (..),
+    newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+
+    -- * Request Lenses
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun,
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId,
+
+    -- * Destructuring the Response
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse (..),
+    newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse,
+
+    -- * Response Lenses
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation,
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' smart constructor.
+data DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation = DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the local gateway route table virtual interface group
+    -- association.
+    localGatewayRouteTableVirtualInterfaceGroupAssociationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'localGatewayRouteTableVirtualInterfaceGroupAssociationId', 'deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId' - The ID of the local gateway route table virtual interface group
+-- association.
+newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation ::
+  -- | 'localGatewayRouteTableVirtualInterfaceGroupAssociationId'
+  Prelude.Text ->
+  DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  pLocalGatewayRouteTableVirtualInterfaceGroupAssociationId_ =
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+      { dryRun =
+          Prelude.Nothing,
+        localGatewayRouteTableVirtualInterfaceGroupAssociationId =
+          pLocalGatewayRouteTableVirtualInterfaceGroupAssociationId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun :: Lens.Lens' DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Bool)
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun = Lens.lens (\DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {dryRun} -> dryRun) (\s@DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {dryRun = a} :: DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The ID of the local gateway route table virtual interface group
+-- association.
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId :: Lens.Lens' DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation Prelude.Text
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId = Lens.lens (\DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayRouteTableVirtualInterfaceGroupAssociationId} -> localGatewayRouteTableVirtualInterfaceGroupAssociationId) (\s@DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayRouteTableVirtualInterfaceGroupAssociationId = a} :: DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+instance
+  Core.AWSRequest
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  type
+    AWSResponse
+      DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+      DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayRouteTableVirtualInterfaceGroupAssociation"
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  hashWithSalt
+    _salt
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` localGatewayRouteTableVirtualInterfaceGroupAssociationId
+
+instance
+  Prelude.NFData
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  rnf
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf
+          localGatewayRouteTableVirtualInterfaceGroupAssociationId
+
+instance
+  Data.ToHeaders
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  toQuery
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "LocalGatewayRouteTableVirtualInterfaceGroupAssociationId"
+            Data.=: localGatewayRouteTableVirtualInterfaceGroupAssociationId
+        ]
+
+-- | /See:/ 'newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' smart constructor.
+data DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse = DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'
+  { -- | Information about the association.
+    localGatewayRouteTableVirtualInterfaceGroupAssociation :: Prelude.Maybe LocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableVirtualInterfaceGroupAssociation', 'deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation' - Information about the association.
+--
+-- 'httpStatus', 'deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus' - The response's http status code.
+newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+  pHttpStatus_ =
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse'
+      { localGatewayRouteTableVirtualInterfaceGroupAssociation =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the association.
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation :: Lens.Lens' DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse (Prelude.Maybe LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation = Lens.lens (\DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {localGatewayRouteTableVirtualInterfaceGroupAssociation} -> localGatewayRouteTableVirtualInterfaceGroupAssociation) (\s@DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {} a -> s {localGatewayRouteTableVirtualInterfaceGroupAssociation = a} :: DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse)
+
+-- | The response's http status code.
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus :: Lens.Lens' DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse Prelude.Int
+deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus = Lens.lens (\DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {httpStatus} -> httpStatus) (\s@DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {} a -> s {httpStatus = a} :: DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse)
+
+instance
+  Prelude.NFData
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+  where
+  rnf
+    DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse' {..} =
+      Prelude.rnf
+        localGatewayRouteTableVirtualInterfaceGroupAssociation
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteLocalGatewayRouteTableVpcAssociation.hs b/gen/Amazonka/EC2/DeleteLocalGatewayRouteTableVpcAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteLocalGatewayRouteTableVpcAssociation.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteLocalGatewayRouteTableVpcAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified association between a VPC and local gateway route
+-- table.
+module Amazonka.EC2.DeleteLocalGatewayRouteTableVpcAssociation
+  ( -- * Creating a Request
+    DeleteLocalGatewayRouteTableVpcAssociation (..),
+    newDeleteLocalGatewayRouteTableVpcAssociation,
+
+    -- * Request Lenses
+    deleteLocalGatewayRouteTableVpcAssociation_dryRun,
+    deleteLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId,
+
+    -- * Destructuring the Response
+    DeleteLocalGatewayRouteTableVpcAssociationResponse (..),
+    newDeleteLocalGatewayRouteTableVpcAssociationResponse,
+
+    -- * Response Lenses
+    deleteLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation,
+    deleteLocalGatewayRouteTableVpcAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteLocalGatewayRouteTableVpcAssociation' smart constructor.
+data DeleteLocalGatewayRouteTableVpcAssociation = DeleteLocalGatewayRouteTableVpcAssociation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the association.
+    localGatewayRouteTableVpcAssociationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteTableVpcAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteLocalGatewayRouteTableVpcAssociation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'localGatewayRouteTableVpcAssociationId', 'deleteLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId' - The ID of the association.
+newDeleteLocalGatewayRouteTableVpcAssociation ::
+  -- | 'localGatewayRouteTableVpcAssociationId'
+  Prelude.Text ->
+  DeleteLocalGatewayRouteTableVpcAssociation
+newDeleteLocalGatewayRouteTableVpcAssociation
+  pLocalGatewayRouteTableVpcAssociationId_ =
+    DeleteLocalGatewayRouteTableVpcAssociation'
+      { dryRun =
+          Prelude.Nothing,
+        localGatewayRouteTableVpcAssociationId =
+          pLocalGatewayRouteTableVpcAssociationId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteLocalGatewayRouteTableVpcAssociation_dryRun :: Lens.Lens' DeleteLocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Bool)
+deleteLocalGatewayRouteTableVpcAssociation_dryRun = Lens.lens (\DeleteLocalGatewayRouteTableVpcAssociation' {dryRun} -> dryRun) (\s@DeleteLocalGatewayRouteTableVpcAssociation' {} a -> s {dryRun = a} :: DeleteLocalGatewayRouteTableVpcAssociation)
+
+-- | The ID of the association.
+deleteLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId :: Lens.Lens' DeleteLocalGatewayRouteTableVpcAssociation Prelude.Text
+deleteLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId = Lens.lens (\DeleteLocalGatewayRouteTableVpcAssociation' {localGatewayRouteTableVpcAssociationId} -> localGatewayRouteTableVpcAssociationId) (\s@DeleteLocalGatewayRouteTableVpcAssociation' {} a -> s {localGatewayRouteTableVpcAssociationId = a} :: DeleteLocalGatewayRouteTableVpcAssociation)
+
+instance
+  Core.AWSRequest
+    DeleteLocalGatewayRouteTableVpcAssociation
+  where
+  type
+    AWSResponse
+      DeleteLocalGatewayRouteTableVpcAssociation =
+      DeleteLocalGatewayRouteTableVpcAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteLocalGatewayRouteTableVpcAssociationResponse'
+            Prelude.<$> (x Data..@? "localGatewayRouteTableVpcAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteLocalGatewayRouteTableVpcAssociation
+  where
+  hashWithSalt
+    _salt
+    DeleteLocalGatewayRouteTableVpcAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` localGatewayRouteTableVpcAssociationId
+
+instance
+  Prelude.NFData
+    DeleteLocalGatewayRouteTableVpcAssociation
+  where
+  rnf DeleteLocalGatewayRouteTableVpcAssociation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableVpcAssociationId
+
+instance
+  Data.ToHeaders
+    DeleteLocalGatewayRouteTableVpcAssociation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteLocalGatewayRouteTableVpcAssociation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteLocalGatewayRouteTableVpcAssociation
+  where
+  toQuery
+    DeleteLocalGatewayRouteTableVpcAssociation' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DeleteLocalGatewayRouteTableVpcAssociation" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "LocalGatewayRouteTableVpcAssociationId"
+            Data.=: localGatewayRouteTableVpcAssociationId
+        ]
+
+-- | /See:/ 'newDeleteLocalGatewayRouteTableVpcAssociationResponse' smart constructor.
+data DeleteLocalGatewayRouteTableVpcAssociationResponse = DeleteLocalGatewayRouteTableVpcAssociationResponse'
+  { -- | Information about the association.
+    localGatewayRouteTableVpcAssociation :: Prelude.Maybe LocalGatewayRouteTableVpcAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLocalGatewayRouteTableVpcAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableVpcAssociation', 'deleteLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation' - Information about the association.
+--
+-- 'httpStatus', 'deleteLocalGatewayRouteTableVpcAssociationResponse_httpStatus' - The response's http status code.
+newDeleteLocalGatewayRouteTableVpcAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteLocalGatewayRouteTableVpcAssociationResponse
+newDeleteLocalGatewayRouteTableVpcAssociationResponse
+  pHttpStatus_ =
+    DeleteLocalGatewayRouteTableVpcAssociationResponse'
+      { localGatewayRouteTableVpcAssociation =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the association.
+deleteLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation :: Lens.Lens' DeleteLocalGatewayRouteTableVpcAssociationResponse (Prelude.Maybe LocalGatewayRouteTableVpcAssociation)
+deleteLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation = Lens.lens (\DeleteLocalGatewayRouteTableVpcAssociationResponse' {localGatewayRouteTableVpcAssociation} -> localGatewayRouteTableVpcAssociation) (\s@DeleteLocalGatewayRouteTableVpcAssociationResponse' {} a -> s {localGatewayRouteTableVpcAssociation = a} :: DeleteLocalGatewayRouteTableVpcAssociationResponse)
+
+-- | The response's http status code.
+deleteLocalGatewayRouteTableVpcAssociationResponse_httpStatus :: Lens.Lens' DeleteLocalGatewayRouteTableVpcAssociationResponse Prelude.Int
+deleteLocalGatewayRouteTableVpcAssociationResponse_httpStatus = Lens.lens (\DeleteLocalGatewayRouteTableVpcAssociationResponse' {httpStatus} -> httpStatus) (\s@DeleteLocalGatewayRouteTableVpcAssociationResponse' {} a -> s {httpStatus = a} :: DeleteLocalGatewayRouteTableVpcAssociationResponse)
+
+instance
+  Prelude.NFData
+    DeleteLocalGatewayRouteTableVpcAssociationResponse
+  where
+  rnf
+    DeleteLocalGatewayRouteTableVpcAssociationResponse' {..} =
+      Prelude.rnf localGatewayRouteTableVpcAssociation
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteManagedPrefixList.hs b/gen/Amazonka/EC2/DeleteManagedPrefixList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteManagedPrefixList.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteManagedPrefixList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified managed prefix list. You must first remove all
+-- references to the prefix list in your resources.
+module Amazonka.EC2.DeleteManagedPrefixList
+  ( -- * Creating a Request
+    DeleteManagedPrefixList (..),
+    newDeleteManagedPrefixList,
+
+    -- * Request Lenses
+    deleteManagedPrefixList_dryRun,
+    deleteManagedPrefixList_prefixListId,
+
+    -- * Destructuring the Response
+    DeleteManagedPrefixListResponse (..),
+    newDeleteManagedPrefixListResponse,
+
+    -- * Response Lenses
+    deleteManagedPrefixListResponse_prefixList,
+    deleteManagedPrefixListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteManagedPrefixList' smart constructor.
+data DeleteManagedPrefixList = DeleteManagedPrefixList'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteManagedPrefixList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteManagedPrefixList_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'prefixListId', 'deleteManagedPrefixList_prefixListId' - The ID of the prefix list.
+newDeleteManagedPrefixList ::
+  -- | 'prefixListId'
+  Prelude.Text ->
+  DeleteManagedPrefixList
+newDeleteManagedPrefixList pPrefixListId_ =
+  DeleteManagedPrefixList'
+    { dryRun = Prelude.Nothing,
+      prefixListId = pPrefixListId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteManagedPrefixList_dryRun :: Lens.Lens' DeleteManagedPrefixList (Prelude.Maybe Prelude.Bool)
+deleteManagedPrefixList_dryRun = Lens.lens (\DeleteManagedPrefixList' {dryRun} -> dryRun) (\s@DeleteManagedPrefixList' {} a -> s {dryRun = a} :: DeleteManagedPrefixList)
+
+-- | The ID of the prefix list.
+deleteManagedPrefixList_prefixListId :: Lens.Lens' DeleteManagedPrefixList Prelude.Text
+deleteManagedPrefixList_prefixListId = Lens.lens (\DeleteManagedPrefixList' {prefixListId} -> prefixListId) (\s@DeleteManagedPrefixList' {} a -> s {prefixListId = a} :: DeleteManagedPrefixList)
+
+instance Core.AWSRequest DeleteManagedPrefixList where
+  type
+    AWSResponse DeleteManagedPrefixList =
+      DeleteManagedPrefixListResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteManagedPrefixListResponse'
+            Prelude.<$> (x Data..@? "prefixList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteManagedPrefixList where
+  hashWithSalt _salt DeleteManagedPrefixList' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` prefixListId
+
+instance Prelude.NFData DeleteManagedPrefixList where
+  rnf DeleteManagedPrefixList' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance Data.ToHeaders DeleteManagedPrefixList where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteManagedPrefixList where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteManagedPrefixList where
+  toQuery DeleteManagedPrefixList' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteManagedPrefixList" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newDeleteManagedPrefixListResponse' smart constructor.
+data DeleteManagedPrefixListResponse = DeleteManagedPrefixListResponse'
+  { -- | Information about the prefix list.
+    prefixList :: Prelude.Maybe ManagedPrefixList,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteManagedPrefixListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'prefixList', 'deleteManagedPrefixListResponse_prefixList' - Information about the prefix list.
+--
+-- 'httpStatus', 'deleteManagedPrefixListResponse_httpStatus' - The response's http status code.
+newDeleteManagedPrefixListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteManagedPrefixListResponse
+newDeleteManagedPrefixListResponse pHttpStatus_ =
+  DeleteManagedPrefixListResponse'
+    { prefixList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the prefix list.
+deleteManagedPrefixListResponse_prefixList :: Lens.Lens' DeleteManagedPrefixListResponse (Prelude.Maybe ManagedPrefixList)
+deleteManagedPrefixListResponse_prefixList = Lens.lens (\DeleteManagedPrefixListResponse' {prefixList} -> prefixList) (\s@DeleteManagedPrefixListResponse' {} a -> s {prefixList = a} :: DeleteManagedPrefixListResponse)
+
+-- | The response's http status code.
+deleteManagedPrefixListResponse_httpStatus :: Lens.Lens' DeleteManagedPrefixListResponse Prelude.Int
+deleteManagedPrefixListResponse_httpStatus = Lens.lens (\DeleteManagedPrefixListResponse' {httpStatus} -> httpStatus) (\s@DeleteManagedPrefixListResponse' {} a -> s {httpStatus = a} :: DeleteManagedPrefixListResponse)
+
+instance
+  Prelude.NFData
+    DeleteManagedPrefixListResponse
+  where
+  rnf DeleteManagedPrefixListResponse' {..} =
+    Prelude.rnf prefixList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteNatGateway.hs b/gen/Amazonka/EC2/DeleteNatGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNatGateway.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNatGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified NAT gateway. Deleting a public NAT gateway
+-- disassociates its Elastic IP address, but does not release the address
+-- from your account. Deleting a NAT gateway does not delete any NAT
+-- gateway routes in your route tables.
+module Amazonka.EC2.DeleteNatGateway
+  ( -- * Creating a Request
+    DeleteNatGateway (..),
+    newDeleteNatGateway,
+
+    -- * Request Lenses
+    deleteNatGateway_dryRun,
+    deleteNatGateway_natGatewayId,
+
+    -- * Destructuring the Response
+    DeleteNatGatewayResponse (..),
+    newDeleteNatGatewayResponse,
+
+    -- * Response Lenses
+    deleteNatGatewayResponse_natGatewayId,
+    deleteNatGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNatGateway' smart constructor.
+data DeleteNatGateway = DeleteNatGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the NAT gateway.
+    natGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNatGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNatGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'natGatewayId', 'deleteNatGateway_natGatewayId' - The ID of the NAT gateway.
+newDeleteNatGateway ::
+  -- | 'natGatewayId'
+  Prelude.Text ->
+  DeleteNatGateway
+newDeleteNatGateway pNatGatewayId_ =
+  DeleteNatGateway'
+    { dryRun = Prelude.Nothing,
+      natGatewayId = pNatGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNatGateway_dryRun :: Lens.Lens' DeleteNatGateway (Prelude.Maybe Prelude.Bool)
+deleteNatGateway_dryRun = Lens.lens (\DeleteNatGateway' {dryRun} -> dryRun) (\s@DeleteNatGateway' {} a -> s {dryRun = a} :: DeleteNatGateway)
+
+-- | The ID of the NAT gateway.
+deleteNatGateway_natGatewayId :: Lens.Lens' DeleteNatGateway Prelude.Text
+deleteNatGateway_natGatewayId = Lens.lens (\DeleteNatGateway' {natGatewayId} -> natGatewayId) (\s@DeleteNatGateway' {} a -> s {natGatewayId = a} :: DeleteNatGateway)
+
+instance Core.AWSRequest DeleteNatGateway where
+  type
+    AWSResponse DeleteNatGateway =
+      DeleteNatGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteNatGatewayResponse'
+            Prelude.<$> (x Data..@? "natGatewayId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteNatGateway where
+  hashWithSalt _salt DeleteNatGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` natGatewayId
+
+instance Prelude.NFData DeleteNatGateway where
+  rnf DeleteNatGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf natGatewayId
+
+instance Data.ToHeaders DeleteNatGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNatGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNatGateway where
+  toQuery DeleteNatGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteNatGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NatGatewayId" Data.=: natGatewayId
+      ]
+
+-- | /See:/ 'newDeleteNatGatewayResponse' smart constructor.
+data DeleteNatGatewayResponse = DeleteNatGatewayResponse'
+  { -- | The ID of the NAT gateway.
+    natGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNatGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'natGatewayId', 'deleteNatGatewayResponse_natGatewayId' - The ID of the NAT gateway.
+--
+-- 'httpStatus', 'deleteNatGatewayResponse_httpStatus' - The response's http status code.
+newDeleteNatGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNatGatewayResponse
+newDeleteNatGatewayResponse pHttpStatus_ =
+  DeleteNatGatewayResponse'
+    { natGatewayId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the NAT gateway.
+deleteNatGatewayResponse_natGatewayId :: Lens.Lens' DeleteNatGatewayResponse (Prelude.Maybe Prelude.Text)
+deleteNatGatewayResponse_natGatewayId = Lens.lens (\DeleteNatGatewayResponse' {natGatewayId} -> natGatewayId) (\s@DeleteNatGatewayResponse' {} a -> s {natGatewayId = a} :: DeleteNatGatewayResponse)
+
+-- | The response's http status code.
+deleteNatGatewayResponse_httpStatus :: Lens.Lens' DeleteNatGatewayResponse Prelude.Int
+deleteNatGatewayResponse_httpStatus = Lens.lens (\DeleteNatGatewayResponse' {httpStatus} -> httpStatus) (\s@DeleteNatGatewayResponse' {} a -> s {httpStatus = a} :: DeleteNatGatewayResponse)
+
+instance Prelude.NFData DeleteNatGatewayResponse where
+  rnf DeleteNatGatewayResponse' {..} =
+    Prelude.rnf natGatewayId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteNetworkAcl.hs b/gen/Amazonka/EC2/DeleteNetworkAcl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkAcl.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkAcl
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified network ACL. You can\'t delete the ACL if it\'s
+-- associated with any subnets. You can\'t delete the default network ACL.
+module Amazonka.EC2.DeleteNetworkAcl
+  ( -- * Creating a Request
+    DeleteNetworkAcl (..),
+    newDeleteNetworkAcl,
+
+    -- * Request Lenses
+    deleteNetworkAcl_dryRun,
+    deleteNetworkAcl_networkAclId,
+
+    -- * Destructuring the Response
+    DeleteNetworkAclResponse (..),
+    newDeleteNetworkAclResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkAcl' smart constructor.
+data DeleteNetworkAcl = DeleteNetworkAcl'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network ACL.
+    networkAclId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkAcl' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkAcl_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkAclId', 'deleteNetworkAcl_networkAclId' - The ID of the network ACL.
+newDeleteNetworkAcl ::
+  -- | 'networkAclId'
+  Prelude.Text ->
+  DeleteNetworkAcl
+newDeleteNetworkAcl pNetworkAclId_ =
+  DeleteNetworkAcl'
+    { dryRun = Prelude.Nothing,
+      networkAclId = pNetworkAclId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkAcl_dryRun :: Lens.Lens' DeleteNetworkAcl (Prelude.Maybe Prelude.Bool)
+deleteNetworkAcl_dryRun = Lens.lens (\DeleteNetworkAcl' {dryRun} -> dryRun) (\s@DeleteNetworkAcl' {} a -> s {dryRun = a} :: DeleteNetworkAcl)
+
+-- | The ID of the network ACL.
+deleteNetworkAcl_networkAclId :: Lens.Lens' DeleteNetworkAcl Prelude.Text
+deleteNetworkAcl_networkAclId = Lens.lens (\DeleteNetworkAcl' {networkAclId} -> networkAclId) (\s@DeleteNetworkAcl' {} a -> s {networkAclId = a} :: DeleteNetworkAcl)
+
+instance Core.AWSRequest DeleteNetworkAcl where
+  type
+    AWSResponse DeleteNetworkAcl =
+      DeleteNetworkAclResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteNetworkAclResponse'
+
+instance Prelude.Hashable DeleteNetworkAcl where
+  hashWithSalt _salt DeleteNetworkAcl' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` networkAclId
+
+instance Prelude.NFData DeleteNetworkAcl where
+  rnf DeleteNetworkAcl' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkAclId
+
+instance Data.ToHeaders DeleteNetworkAcl where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkAcl where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNetworkAcl where
+  toQuery DeleteNetworkAcl' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteNetworkAcl" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkAclId" Data.=: networkAclId
+      ]
+
+-- | /See:/ 'newDeleteNetworkAclResponse' smart constructor.
+data DeleteNetworkAclResponse = DeleteNetworkAclResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkAclResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteNetworkAclResponse ::
+  DeleteNetworkAclResponse
+newDeleteNetworkAclResponse =
+  DeleteNetworkAclResponse'
+
+instance Prelude.NFData DeleteNetworkAclResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteNetworkAclEntry.hs b/gen/Amazonka/EC2/DeleteNetworkAclEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkAclEntry.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkAclEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified ingress or egress entry (rule) from the specified
+-- network ACL.
+module Amazonka.EC2.DeleteNetworkAclEntry
+  ( -- * Creating a Request
+    DeleteNetworkAclEntry (..),
+    newDeleteNetworkAclEntry,
+
+    -- * Request Lenses
+    deleteNetworkAclEntry_dryRun,
+    deleteNetworkAclEntry_egress,
+    deleteNetworkAclEntry_networkAclId,
+    deleteNetworkAclEntry_ruleNumber,
+
+    -- * Destructuring the Response
+    DeleteNetworkAclEntryResponse (..),
+    newDeleteNetworkAclEntryResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkAclEntry' smart constructor.
+data DeleteNetworkAclEntry = DeleteNetworkAclEntry'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the rule is an egress rule.
+    egress :: Prelude.Bool,
+    -- | The ID of the network ACL.
+    networkAclId :: Prelude.Text,
+    -- | The rule number of the entry to delete.
+    ruleNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkAclEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkAclEntry_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'egress', 'deleteNetworkAclEntry_egress' - Indicates whether the rule is an egress rule.
+--
+-- 'networkAclId', 'deleteNetworkAclEntry_networkAclId' - The ID of the network ACL.
+--
+-- 'ruleNumber', 'deleteNetworkAclEntry_ruleNumber' - The rule number of the entry to delete.
+newDeleteNetworkAclEntry ::
+  -- | 'egress'
+  Prelude.Bool ->
+  -- | 'networkAclId'
+  Prelude.Text ->
+  -- | 'ruleNumber'
+  Prelude.Int ->
+  DeleteNetworkAclEntry
+newDeleteNetworkAclEntry
+  pEgress_
+  pNetworkAclId_
+  pRuleNumber_ =
+    DeleteNetworkAclEntry'
+      { dryRun = Prelude.Nothing,
+        egress = pEgress_,
+        networkAclId = pNetworkAclId_,
+        ruleNumber = pRuleNumber_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkAclEntry_dryRun :: Lens.Lens' DeleteNetworkAclEntry (Prelude.Maybe Prelude.Bool)
+deleteNetworkAclEntry_dryRun = Lens.lens (\DeleteNetworkAclEntry' {dryRun} -> dryRun) (\s@DeleteNetworkAclEntry' {} a -> s {dryRun = a} :: DeleteNetworkAclEntry)
+
+-- | Indicates whether the rule is an egress rule.
+deleteNetworkAclEntry_egress :: Lens.Lens' DeleteNetworkAclEntry Prelude.Bool
+deleteNetworkAclEntry_egress = Lens.lens (\DeleteNetworkAclEntry' {egress} -> egress) (\s@DeleteNetworkAclEntry' {} a -> s {egress = a} :: DeleteNetworkAclEntry)
+
+-- | The ID of the network ACL.
+deleteNetworkAclEntry_networkAclId :: Lens.Lens' DeleteNetworkAclEntry Prelude.Text
+deleteNetworkAclEntry_networkAclId = Lens.lens (\DeleteNetworkAclEntry' {networkAclId} -> networkAclId) (\s@DeleteNetworkAclEntry' {} a -> s {networkAclId = a} :: DeleteNetworkAclEntry)
+
+-- | The rule number of the entry to delete.
+deleteNetworkAclEntry_ruleNumber :: Lens.Lens' DeleteNetworkAclEntry Prelude.Int
+deleteNetworkAclEntry_ruleNumber = Lens.lens (\DeleteNetworkAclEntry' {ruleNumber} -> ruleNumber) (\s@DeleteNetworkAclEntry' {} a -> s {ruleNumber = a} :: DeleteNetworkAclEntry)
+
+instance Core.AWSRequest DeleteNetworkAclEntry where
+  type
+    AWSResponse DeleteNetworkAclEntry =
+      DeleteNetworkAclEntryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteNetworkAclEntryResponse'
+
+instance Prelude.Hashable DeleteNetworkAclEntry where
+  hashWithSalt _salt DeleteNetworkAclEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` egress
+      `Prelude.hashWithSalt` networkAclId
+      `Prelude.hashWithSalt` ruleNumber
+
+instance Prelude.NFData DeleteNetworkAclEntry where
+  rnf DeleteNetworkAclEntry' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf egress
+      `Prelude.seq` Prelude.rnf networkAclId
+      `Prelude.seq` Prelude.rnf ruleNumber
+
+instance Data.ToHeaders DeleteNetworkAclEntry where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkAclEntry where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNetworkAclEntry where
+  toQuery DeleteNetworkAclEntry' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteNetworkAclEntry" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Egress" Data.=: egress,
+        "NetworkAclId" Data.=: networkAclId,
+        "RuleNumber" Data.=: ruleNumber
+      ]
+
+-- | /See:/ 'newDeleteNetworkAclEntryResponse' smart constructor.
+data DeleteNetworkAclEntryResponse = DeleteNetworkAclEntryResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkAclEntryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteNetworkAclEntryResponse ::
+  DeleteNetworkAclEntryResponse
+newDeleteNetworkAclEntryResponse =
+  DeleteNetworkAclEntryResponse'
+
+instance Prelude.NFData DeleteNetworkAclEntryResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteNetworkInsightsAccessScope.hs b/gen/Amazonka/EC2/DeleteNetworkInsightsAccessScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkInsightsAccessScope.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkInsightsAccessScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Network Access Scope.
+module Amazonka.EC2.DeleteNetworkInsightsAccessScope
+  ( -- * Creating a Request
+    DeleteNetworkInsightsAccessScope (..),
+    newDeleteNetworkInsightsAccessScope,
+
+    -- * Request Lenses
+    deleteNetworkInsightsAccessScope_dryRun,
+    deleteNetworkInsightsAccessScope_networkInsightsAccessScopeId,
+
+    -- * Destructuring the Response
+    DeleteNetworkInsightsAccessScopeResponse (..),
+    newDeleteNetworkInsightsAccessScopeResponse,
+
+    -- * Response Lenses
+    deleteNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeId,
+    deleteNetworkInsightsAccessScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkInsightsAccessScope' smart constructor.
+data DeleteNetworkInsightsAccessScope = DeleteNetworkInsightsAccessScope'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsAccessScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkInsightsAccessScope_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInsightsAccessScopeId', 'deleteNetworkInsightsAccessScope_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+newDeleteNetworkInsightsAccessScope ::
+  -- | 'networkInsightsAccessScopeId'
+  Prelude.Text ->
+  DeleteNetworkInsightsAccessScope
+newDeleteNetworkInsightsAccessScope
+  pNetworkInsightsAccessScopeId_ =
+    DeleteNetworkInsightsAccessScope'
+      { dryRun =
+          Prelude.Nothing,
+        networkInsightsAccessScopeId =
+          pNetworkInsightsAccessScopeId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkInsightsAccessScope_dryRun :: Lens.Lens' DeleteNetworkInsightsAccessScope (Prelude.Maybe Prelude.Bool)
+deleteNetworkInsightsAccessScope_dryRun = Lens.lens (\DeleteNetworkInsightsAccessScope' {dryRun} -> dryRun) (\s@DeleteNetworkInsightsAccessScope' {} a -> s {dryRun = a} :: DeleteNetworkInsightsAccessScope)
+
+-- | The ID of the Network Access Scope.
+deleteNetworkInsightsAccessScope_networkInsightsAccessScopeId :: Lens.Lens' DeleteNetworkInsightsAccessScope Prelude.Text
+deleteNetworkInsightsAccessScope_networkInsightsAccessScopeId = Lens.lens (\DeleteNetworkInsightsAccessScope' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@DeleteNetworkInsightsAccessScope' {} a -> s {networkInsightsAccessScopeId = a} :: DeleteNetworkInsightsAccessScope)
+
+instance
+  Core.AWSRequest
+    DeleteNetworkInsightsAccessScope
+  where
+  type
+    AWSResponse DeleteNetworkInsightsAccessScope =
+      DeleteNetworkInsightsAccessScopeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteNetworkInsightsAccessScopeResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAccessScopeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteNetworkInsightsAccessScope
+  where
+  hashWithSalt
+    _salt
+    DeleteNetworkInsightsAccessScope' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` networkInsightsAccessScopeId
+
+instance
+  Prelude.NFData
+    DeleteNetworkInsightsAccessScope
+  where
+  rnf DeleteNetworkInsightsAccessScope' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
+
+instance
+  Data.ToHeaders
+    DeleteNetworkInsightsAccessScope
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkInsightsAccessScope where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteNetworkInsightsAccessScope
+  where
+  toQuery DeleteNetworkInsightsAccessScope' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteNetworkInsightsAccessScope" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkInsightsAccessScopeId"
+          Data.=: networkInsightsAccessScopeId
+      ]
+
+-- | /See:/ 'newDeleteNetworkInsightsAccessScopeResponse' smart constructor.
+data DeleteNetworkInsightsAccessScopeResponse = DeleteNetworkInsightsAccessScopeResponse'
+  { -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsAccessScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScopeId', 'deleteNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+--
+-- 'httpStatus', 'deleteNetworkInsightsAccessScopeResponse_httpStatus' - The response's http status code.
+newDeleteNetworkInsightsAccessScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkInsightsAccessScopeResponse
+newDeleteNetworkInsightsAccessScopeResponse
+  pHttpStatus_ =
+    DeleteNetworkInsightsAccessScopeResponse'
+      { networkInsightsAccessScopeId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Network Access Scope.
+deleteNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeId :: Lens.Lens' DeleteNetworkInsightsAccessScopeResponse (Prelude.Maybe Prelude.Text)
+deleteNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeId = Lens.lens (\DeleteNetworkInsightsAccessScopeResponse' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@DeleteNetworkInsightsAccessScopeResponse' {} a -> s {networkInsightsAccessScopeId = a} :: DeleteNetworkInsightsAccessScopeResponse)
+
+-- | The response's http status code.
+deleteNetworkInsightsAccessScopeResponse_httpStatus :: Lens.Lens' DeleteNetworkInsightsAccessScopeResponse Prelude.Int
+deleteNetworkInsightsAccessScopeResponse_httpStatus = Lens.lens (\DeleteNetworkInsightsAccessScopeResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkInsightsAccessScopeResponse' {} a -> s {httpStatus = a} :: DeleteNetworkInsightsAccessScopeResponse)
+
+instance
+  Prelude.NFData
+    DeleteNetworkInsightsAccessScopeResponse
+  where
+  rnf DeleteNetworkInsightsAccessScopeResponse' {..} =
+    Prelude.rnf networkInsightsAccessScopeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteNetworkInsightsAccessScopeAnalysis.hs b/gen/Amazonka/EC2/DeleteNetworkInsightsAccessScopeAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkInsightsAccessScopeAnalysis.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkInsightsAccessScopeAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Network Access Scope analysis.
+module Amazonka.EC2.DeleteNetworkInsightsAccessScopeAnalysis
+  ( -- * Creating a Request
+    DeleteNetworkInsightsAccessScopeAnalysis (..),
+    newDeleteNetworkInsightsAccessScopeAnalysis,
+
+    -- * Request Lenses
+    deleteNetworkInsightsAccessScopeAnalysis_dryRun,
+    deleteNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId,
+
+    -- * Destructuring the Response
+    DeleteNetworkInsightsAccessScopeAnalysisResponse (..),
+    newDeleteNetworkInsightsAccessScopeAnalysisResponse,
+
+    -- * Response Lenses
+    deleteNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysisId,
+    deleteNetworkInsightsAccessScopeAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkInsightsAccessScopeAnalysis' smart constructor.
+data DeleteNetworkInsightsAccessScopeAnalysis = DeleteNetworkInsightsAccessScopeAnalysis'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsAccessScopeAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkInsightsAccessScopeAnalysis_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInsightsAccessScopeAnalysisId', 'deleteNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId' - The ID of the Network Access Scope analysis.
+newDeleteNetworkInsightsAccessScopeAnalysis ::
+  -- | 'networkInsightsAccessScopeAnalysisId'
+  Prelude.Text ->
+  DeleteNetworkInsightsAccessScopeAnalysis
+newDeleteNetworkInsightsAccessScopeAnalysis
+  pNetworkInsightsAccessScopeAnalysisId_ =
+    DeleteNetworkInsightsAccessScopeAnalysis'
+      { dryRun =
+          Prelude.Nothing,
+        networkInsightsAccessScopeAnalysisId =
+          pNetworkInsightsAccessScopeAnalysisId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkInsightsAccessScopeAnalysis_dryRun :: Lens.Lens' DeleteNetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Bool)
+deleteNetworkInsightsAccessScopeAnalysis_dryRun = Lens.lens (\DeleteNetworkInsightsAccessScopeAnalysis' {dryRun} -> dryRun) (\s@DeleteNetworkInsightsAccessScopeAnalysis' {} a -> s {dryRun = a} :: DeleteNetworkInsightsAccessScopeAnalysis)
+
+-- | The ID of the Network Access Scope analysis.
+deleteNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId :: Lens.Lens' DeleteNetworkInsightsAccessScopeAnalysis Prelude.Text
+deleteNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId = Lens.lens (\DeleteNetworkInsightsAccessScopeAnalysis' {networkInsightsAccessScopeAnalysisId} -> networkInsightsAccessScopeAnalysisId) (\s@DeleteNetworkInsightsAccessScopeAnalysis' {} a -> s {networkInsightsAccessScopeAnalysisId = a} :: DeleteNetworkInsightsAccessScopeAnalysis)
+
+instance
+  Core.AWSRequest
+    DeleteNetworkInsightsAccessScopeAnalysis
+  where
+  type
+    AWSResponse
+      DeleteNetworkInsightsAccessScopeAnalysis =
+      DeleteNetworkInsightsAccessScopeAnalysisResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteNetworkInsightsAccessScopeAnalysisResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAccessScopeAnalysisId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteNetworkInsightsAccessScopeAnalysis
+  where
+  hashWithSalt
+    _salt
+    DeleteNetworkInsightsAccessScopeAnalysis' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` networkInsightsAccessScopeAnalysisId
+
+instance
+  Prelude.NFData
+    DeleteNetworkInsightsAccessScopeAnalysis
+  where
+  rnf DeleteNetworkInsightsAccessScopeAnalysis' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisId
+
+instance
+  Data.ToHeaders
+    DeleteNetworkInsightsAccessScopeAnalysis
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteNetworkInsightsAccessScopeAnalysis
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteNetworkInsightsAccessScopeAnalysis
+  where
+  toQuery DeleteNetworkInsightsAccessScopeAnalysis' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteNetworkInsightsAccessScopeAnalysis" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkInsightsAccessScopeAnalysisId"
+          Data.=: networkInsightsAccessScopeAnalysisId
+      ]
+
+-- | /See:/ 'newDeleteNetworkInsightsAccessScopeAnalysisResponse' smart constructor.
+data DeleteNetworkInsightsAccessScopeAnalysisResponse = DeleteNetworkInsightsAccessScopeAnalysisResponse'
+  { -- | The ID of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsAccessScopeAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScopeAnalysisId', 'deleteNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysisId' - The ID of the Network Access Scope analysis.
+--
+-- 'httpStatus', 'deleteNetworkInsightsAccessScopeAnalysisResponse_httpStatus' - The response's http status code.
+newDeleteNetworkInsightsAccessScopeAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkInsightsAccessScopeAnalysisResponse
+newDeleteNetworkInsightsAccessScopeAnalysisResponse
+  pHttpStatus_ =
+    DeleteNetworkInsightsAccessScopeAnalysisResponse'
+      { networkInsightsAccessScopeAnalysisId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Network Access Scope analysis.
+deleteNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysisId :: Lens.Lens' DeleteNetworkInsightsAccessScopeAnalysisResponse (Prelude.Maybe Prelude.Text)
+deleteNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysisId = Lens.lens (\DeleteNetworkInsightsAccessScopeAnalysisResponse' {networkInsightsAccessScopeAnalysisId} -> networkInsightsAccessScopeAnalysisId) (\s@DeleteNetworkInsightsAccessScopeAnalysisResponse' {} a -> s {networkInsightsAccessScopeAnalysisId = a} :: DeleteNetworkInsightsAccessScopeAnalysisResponse)
+
+-- | The response's http status code.
+deleteNetworkInsightsAccessScopeAnalysisResponse_httpStatus :: Lens.Lens' DeleteNetworkInsightsAccessScopeAnalysisResponse Prelude.Int
+deleteNetworkInsightsAccessScopeAnalysisResponse_httpStatus = Lens.lens (\DeleteNetworkInsightsAccessScopeAnalysisResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkInsightsAccessScopeAnalysisResponse' {} a -> s {httpStatus = a} :: DeleteNetworkInsightsAccessScopeAnalysisResponse)
+
+instance
+  Prelude.NFData
+    DeleteNetworkInsightsAccessScopeAnalysisResponse
+  where
+  rnf
+    DeleteNetworkInsightsAccessScopeAnalysisResponse' {..} =
+      Prelude.rnf networkInsightsAccessScopeAnalysisId
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteNetworkInsightsAnalysis.hs b/gen/Amazonka/EC2/DeleteNetworkInsightsAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkInsightsAnalysis.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkInsightsAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified network insights analysis.
+module Amazonka.EC2.DeleteNetworkInsightsAnalysis
+  ( -- * Creating a Request
+    DeleteNetworkInsightsAnalysis (..),
+    newDeleteNetworkInsightsAnalysis,
+
+    -- * Request Lenses
+    deleteNetworkInsightsAnalysis_dryRun,
+    deleteNetworkInsightsAnalysis_networkInsightsAnalysisId,
+
+    -- * Destructuring the Response
+    DeleteNetworkInsightsAnalysisResponse (..),
+    newDeleteNetworkInsightsAnalysisResponse,
+
+    -- * Response Lenses
+    deleteNetworkInsightsAnalysisResponse_networkInsightsAnalysisId,
+    deleteNetworkInsightsAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkInsightsAnalysis' smart constructor.
+data DeleteNetworkInsightsAnalysis = DeleteNetworkInsightsAnalysis'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network insights analysis.
+    networkInsightsAnalysisId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkInsightsAnalysis_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInsightsAnalysisId', 'deleteNetworkInsightsAnalysis_networkInsightsAnalysisId' - The ID of the network insights analysis.
+newDeleteNetworkInsightsAnalysis ::
+  -- | 'networkInsightsAnalysisId'
+  Prelude.Text ->
+  DeleteNetworkInsightsAnalysis
+newDeleteNetworkInsightsAnalysis
+  pNetworkInsightsAnalysisId_ =
+    DeleteNetworkInsightsAnalysis'
+      { dryRun =
+          Prelude.Nothing,
+        networkInsightsAnalysisId =
+          pNetworkInsightsAnalysisId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkInsightsAnalysis_dryRun :: Lens.Lens' DeleteNetworkInsightsAnalysis (Prelude.Maybe Prelude.Bool)
+deleteNetworkInsightsAnalysis_dryRun = Lens.lens (\DeleteNetworkInsightsAnalysis' {dryRun} -> dryRun) (\s@DeleteNetworkInsightsAnalysis' {} a -> s {dryRun = a} :: DeleteNetworkInsightsAnalysis)
+
+-- | The ID of the network insights analysis.
+deleteNetworkInsightsAnalysis_networkInsightsAnalysisId :: Lens.Lens' DeleteNetworkInsightsAnalysis Prelude.Text
+deleteNetworkInsightsAnalysis_networkInsightsAnalysisId = Lens.lens (\DeleteNetworkInsightsAnalysis' {networkInsightsAnalysisId} -> networkInsightsAnalysisId) (\s@DeleteNetworkInsightsAnalysis' {} a -> s {networkInsightsAnalysisId = a} :: DeleteNetworkInsightsAnalysis)
+
+instance
+  Core.AWSRequest
+    DeleteNetworkInsightsAnalysis
+  where
+  type
+    AWSResponse DeleteNetworkInsightsAnalysis =
+      DeleteNetworkInsightsAnalysisResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteNetworkInsightsAnalysisResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAnalysisId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteNetworkInsightsAnalysis
+  where
+  hashWithSalt _salt DeleteNetworkInsightsAnalysis' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` networkInsightsAnalysisId
+
+instance Prelude.NFData DeleteNetworkInsightsAnalysis where
+  rnf DeleteNetworkInsightsAnalysis' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInsightsAnalysisId
+
+instance Data.ToHeaders DeleteNetworkInsightsAnalysis where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkInsightsAnalysis where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNetworkInsightsAnalysis where
+  toQuery DeleteNetworkInsightsAnalysis' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteNetworkInsightsAnalysis" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkInsightsAnalysisId"
+          Data.=: networkInsightsAnalysisId
+      ]
+
+-- | /See:/ 'newDeleteNetworkInsightsAnalysisResponse' smart constructor.
+data DeleteNetworkInsightsAnalysisResponse = DeleteNetworkInsightsAnalysisResponse'
+  { -- | The ID of the network insights analysis.
+    networkInsightsAnalysisId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAnalysisId', 'deleteNetworkInsightsAnalysisResponse_networkInsightsAnalysisId' - The ID of the network insights analysis.
+--
+-- 'httpStatus', 'deleteNetworkInsightsAnalysisResponse_httpStatus' - The response's http status code.
+newDeleteNetworkInsightsAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkInsightsAnalysisResponse
+newDeleteNetworkInsightsAnalysisResponse pHttpStatus_ =
+  DeleteNetworkInsightsAnalysisResponse'
+    { networkInsightsAnalysisId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the network insights analysis.
+deleteNetworkInsightsAnalysisResponse_networkInsightsAnalysisId :: Lens.Lens' DeleteNetworkInsightsAnalysisResponse (Prelude.Maybe Prelude.Text)
+deleteNetworkInsightsAnalysisResponse_networkInsightsAnalysisId = Lens.lens (\DeleteNetworkInsightsAnalysisResponse' {networkInsightsAnalysisId} -> networkInsightsAnalysisId) (\s@DeleteNetworkInsightsAnalysisResponse' {} a -> s {networkInsightsAnalysisId = a} :: DeleteNetworkInsightsAnalysisResponse)
+
+-- | The response's http status code.
+deleteNetworkInsightsAnalysisResponse_httpStatus :: Lens.Lens' DeleteNetworkInsightsAnalysisResponse Prelude.Int
+deleteNetworkInsightsAnalysisResponse_httpStatus = Lens.lens (\DeleteNetworkInsightsAnalysisResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkInsightsAnalysisResponse' {} a -> s {httpStatus = a} :: DeleteNetworkInsightsAnalysisResponse)
+
+instance
+  Prelude.NFData
+    DeleteNetworkInsightsAnalysisResponse
+  where
+  rnf DeleteNetworkInsightsAnalysisResponse' {..} =
+    Prelude.rnf networkInsightsAnalysisId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteNetworkInsightsPath.hs b/gen/Amazonka/EC2/DeleteNetworkInsightsPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkInsightsPath.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkInsightsPath
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified path.
+module Amazonka.EC2.DeleteNetworkInsightsPath
+  ( -- * Creating a Request
+    DeleteNetworkInsightsPath (..),
+    newDeleteNetworkInsightsPath,
+
+    -- * Request Lenses
+    deleteNetworkInsightsPath_dryRun,
+    deleteNetworkInsightsPath_networkInsightsPathId,
+
+    -- * Destructuring the Response
+    DeleteNetworkInsightsPathResponse (..),
+    newDeleteNetworkInsightsPathResponse,
+
+    -- * Response Lenses
+    deleteNetworkInsightsPathResponse_networkInsightsPathId,
+    deleteNetworkInsightsPathResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteNetworkInsightsPath' smart constructor.
+data DeleteNetworkInsightsPath = DeleteNetworkInsightsPath'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the path.
+    networkInsightsPathId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsPath' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkInsightsPath_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInsightsPathId', 'deleteNetworkInsightsPath_networkInsightsPathId' - The ID of the path.
+newDeleteNetworkInsightsPath ::
+  -- | 'networkInsightsPathId'
+  Prelude.Text ->
+  DeleteNetworkInsightsPath
+newDeleteNetworkInsightsPath pNetworkInsightsPathId_ =
+  DeleteNetworkInsightsPath'
+    { dryRun =
+        Prelude.Nothing,
+      networkInsightsPathId = pNetworkInsightsPathId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkInsightsPath_dryRun :: Lens.Lens' DeleteNetworkInsightsPath (Prelude.Maybe Prelude.Bool)
+deleteNetworkInsightsPath_dryRun = Lens.lens (\DeleteNetworkInsightsPath' {dryRun} -> dryRun) (\s@DeleteNetworkInsightsPath' {} a -> s {dryRun = a} :: DeleteNetworkInsightsPath)
+
+-- | The ID of the path.
+deleteNetworkInsightsPath_networkInsightsPathId :: Lens.Lens' DeleteNetworkInsightsPath Prelude.Text
+deleteNetworkInsightsPath_networkInsightsPathId = Lens.lens (\DeleteNetworkInsightsPath' {networkInsightsPathId} -> networkInsightsPathId) (\s@DeleteNetworkInsightsPath' {} a -> s {networkInsightsPathId = a} :: DeleteNetworkInsightsPath)
+
+instance Core.AWSRequest DeleteNetworkInsightsPath where
+  type
+    AWSResponse DeleteNetworkInsightsPath =
+      DeleteNetworkInsightsPathResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteNetworkInsightsPathResponse'
+            Prelude.<$> (x Data..@? "networkInsightsPathId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteNetworkInsightsPath where
+  hashWithSalt _salt DeleteNetworkInsightsPath' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` networkInsightsPathId
+
+instance Prelude.NFData DeleteNetworkInsightsPath where
+  rnf DeleteNetworkInsightsPath' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInsightsPathId
+
+instance Data.ToHeaders DeleteNetworkInsightsPath where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkInsightsPath where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNetworkInsightsPath where
+  toQuery DeleteNetworkInsightsPath' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteNetworkInsightsPath" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkInsightsPathId"
+          Data.=: networkInsightsPathId
+      ]
+
+-- | /See:/ 'newDeleteNetworkInsightsPathResponse' smart constructor.
+data DeleteNetworkInsightsPathResponse = DeleteNetworkInsightsPathResponse'
+  { -- | The ID of the path.
+    networkInsightsPathId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInsightsPathResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsPathId', 'deleteNetworkInsightsPathResponse_networkInsightsPathId' - The ID of the path.
+--
+-- 'httpStatus', 'deleteNetworkInsightsPathResponse_httpStatus' - The response's http status code.
+newDeleteNetworkInsightsPathResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkInsightsPathResponse
+newDeleteNetworkInsightsPathResponse pHttpStatus_ =
+  DeleteNetworkInsightsPathResponse'
+    { networkInsightsPathId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the path.
+deleteNetworkInsightsPathResponse_networkInsightsPathId :: Lens.Lens' DeleteNetworkInsightsPathResponse (Prelude.Maybe Prelude.Text)
+deleteNetworkInsightsPathResponse_networkInsightsPathId = Lens.lens (\DeleteNetworkInsightsPathResponse' {networkInsightsPathId} -> networkInsightsPathId) (\s@DeleteNetworkInsightsPathResponse' {} a -> s {networkInsightsPathId = a} :: DeleteNetworkInsightsPathResponse)
+
+-- | The response's http status code.
+deleteNetworkInsightsPathResponse_httpStatus :: Lens.Lens' DeleteNetworkInsightsPathResponse Prelude.Int
+deleteNetworkInsightsPathResponse_httpStatus = Lens.lens (\DeleteNetworkInsightsPathResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkInsightsPathResponse' {} a -> s {httpStatus = a} :: DeleteNetworkInsightsPathResponse)
+
+instance
+  Prelude.NFData
+    DeleteNetworkInsightsPathResponse
+  where
+  rnf DeleteNetworkInsightsPathResponse' {..} =
+    Prelude.rnf networkInsightsPathId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteNetworkInterface.hs b/gen/Amazonka/EC2/DeleteNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkInterface.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified network interface. You must detach the network
+-- interface before you can delete it.
+module Amazonka.EC2.DeleteNetworkInterface
+  ( -- * Creating a Request
+    DeleteNetworkInterface (..),
+    newDeleteNetworkInterface,
+
+    -- * Request Lenses
+    deleteNetworkInterface_dryRun,
+    deleteNetworkInterface_networkInterfaceId,
+
+    -- * Destructuring the Response
+    DeleteNetworkInterfaceResponse (..),
+    newDeleteNetworkInterfaceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteNetworkInterface.
+--
+-- /See:/ 'newDeleteNetworkInterface' smart constructor.
+data DeleteNetworkInterface = DeleteNetworkInterface'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkInterface_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInterfaceId', 'deleteNetworkInterface_networkInterfaceId' - The ID of the network interface.
+newDeleteNetworkInterface ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  DeleteNetworkInterface
+newDeleteNetworkInterface pNetworkInterfaceId_ =
+  DeleteNetworkInterface'
+    { dryRun = Prelude.Nothing,
+      networkInterfaceId = pNetworkInterfaceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkInterface_dryRun :: Lens.Lens' DeleteNetworkInterface (Prelude.Maybe Prelude.Bool)
+deleteNetworkInterface_dryRun = Lens.lens (\DeleteNetworkInterface' {dryRun} -> dryRun) (\s@DeleteNetworkInterface' {} a -> s {dryRun = a} :: DeleteNetworkInterface)
+
+-- | The ID of the network interface.
+deleteNetworkInterface_networkInterfaceId :: Lens.Lens' DeleteNetworkInterface Prelude.Text
+deleteNetworkInterface_networkInterfaceId = Lens.lens (\DeleteNetworkInterface' {networkInterfaceId} -> networkInterfaceId) (\s@DeleteNetworkInterface' {} a -> s {networkInterfaceId = a} :: DeleteNetworkInterface)
+
+instance Core.AWSRequest DeleteNetworkInterface where
+  type
+    AWSResponse DeleteNetworkInterface =
+      DeleteNetworkInterfaceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteNetworkInterfaceResponse'
+
+instance Prelude.Hashable DeleteNetworkInterface where
+  hashWithSalt _salt DeleteNetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` networkInterfaceId
+
+instance Prelude.NFData DeleteNetworkInterface where
+  rnf DeleteNetworkInterface' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance Data.ToHeaders DeleteNetworkInterface where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkInterface where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteNetworkInterface where
+  toQuery DeleteNetworkInterface' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteNetworkInterface" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newDeleteNetworkInterfaceResponse' smart constructor.
+data DeleteNetworkInterfaceResponse = DeleteNetworkInterfaceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInterfaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteNetworkInterfaceResponse ::
+  DeleteNetworkInterfaceResponse
+newDeleteNetworkInterfaceResponse =
+  DeleteNetworkInterfaceResponse'
+
+instance
+  Prelude.NFData
+    DeleteNetworkInterfaceResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteNetworkInterfacePermission.hs b/gen/Amazonka/EC2/DeleteNetworkInterfacePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteNetworkInterfacePermission.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteNetworkInterfacePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a permission for a network interface. By default, you cannot
+-- delete the permission if the account for which you\'re removing the
+-- permission has attached the network interface to an instance. However,
+-- you can force delete the permission, regardless of any attachment.
+module Amazonka.EC2.DeleteNetworkInterfacePermission
+  ( -- * Creating a Request
+    DeleteNetworkInterfacePermission (..),
+    newDeleteNetworkInterfacePermission,
+
+    -- * Request Lenses
+    deleteNetworkInterfacePermission_dryRun,
+    deleteNetworkInterfacePermission_force,
+    deleteNetworkInterfacePermission_networkInterfacePermissionId,
+
+    -- * Destructuring the Response
+    DeleteNetworkInterfacePermissionResponse (..),
+    newDeleteNetworkInterfacePermissionResponse,
+
+    -- * Response Lenses
+    deleteNetworkInterfacePermissionResponse_return,
+    deleteNetworkInterfacePermissionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteNetworkInterfacePermission.
+--
+-- /See:/ 'newDeleteNetworkInterfacePermission' smart constructor.
+data DeleteNetworkInterfacePermission = DeleteNetworkInterfacePermission'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specify @true@ to remove the permission even if the network interface is
+    -- attached to an instance.
+    force :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network interface permission.
+    networkInterfacePermissionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInterfacePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteNetworkInterfacePermission_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'force', 'deleteNetworkInterfacePermission_force' - Specify @true@ to remove the permission even if the network interface is
+-- attached to an instance.
+--
+-- 'networkInterfacePermissionId', 'deleteNetworkInterfacePermission_networkInterfacePermissionId' - The ID of the network interface permission.
+newDeleteNetworkInterfacePermission ::
+  -- | 'networkInterfacePermissionId'
+  Prelude.Text ->
+  DeleteNetworkInterfacePermission
+newDeleteNetworkInterfacePermission
+  pNetworkInterfacePermissionId_ =
+    DeleteNetworkInterfacePermission'
+      { dryRun =
+          Prelude.Nothing,
+        force = Prelude.Nothing,
+        networkInterfacePermissionId =
+          pNetworkInterfacePermissionId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteNetworkInterfacePermission_dryRun :: Lens.Lens' DeleteNetworkInterfacePermission (Prelude.Maybe Prelude.Bool)
+deleteNetworkInterfacePermission_dryRun = Lens.lens (\DeleteNetworkInterfacePermission' {dryRun} -> dryRun) (\s@DeleteNetworkInterfacePermission' {} a -> s {dryRun = a} :: DeleteNetworkInterfacePermission)
+
+-- | Specify @true@ to remove the permission even if the network interface is
+-- attached to an instance.
+deleteNetworkInterfacePermission_force :: Lens.Lens' DeleteNetworkInterfacePermission (Prelude.Maybe Prelude.Bool)
+deleteNetworkInterfacePermission_force = Lens.lens (\DeleteNetworkInterfacePermission' {force} -> force) (\s@DeleteNetworkInterfacePermission' {} a -> s {force = a} :: DeleteNetworkInterfacePermission)
+
+-- | The ID of the network interface permission.
+deleteNetworkInterfacePermission_networkInterfacePermissionId :: Lens.Lens' DeleteNetworkInterfacePermission Prelude.Text
+deleteNetworkInterfacePermission_networkInterfacePermissionId = Lens.lens (\DeleteNetworkInterfacePermission' {networkInterfacePermissionId} -> networkInterfacePermissionId) (\s@DeleteNetworkInterfacePermission' {} a -> s {networkInterfacePermissionId = a} :: DeleteNetworkInterfacePermission)
+
+instance
+  Core.AWSRequest
+    DeleteNetworkInterfacePermission
+  where
+  type
+    AWSResponse DeleteNetworkInterfacePermission =
+      DeleteNetworkInterfacePermissionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteNetworkInterfacePermissionResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteNetworkInterfacePermission
+  where
+  hashWithSalt
+    _salt
+    DeleteNetworkInterfacePermission' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` force
+        `Prelude.hashWithSalt` networkInterfacePermissionId
+
+instance
+  Prelude.NFData
+    DeleteNetworkInterfacePermission
+  where
+  rnf DeleteNetworkInterfacePermission' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf force
+      `Prelude.seq` Prelude.rnf networkInterfacePermissionId
+
+instance
+  Data.ToHeaders
+    DeleteNetworkInterfacePermission
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteNetworkInterfacePermission where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteNetworkInterfacePermission
+  where
+  toQuery DeleteNetworkInterfacePermission' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteNetworkInterfacePermission" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Force" Data.=: force,
+        "NetworkInterfacePermissionId"
+          Data.=: networkInterfacePermissionId
+      ]
+
+-- | Contains the output for DeleteNetworkInterfacePermission.
+--
+-- /See:/ 'newDeleteNetworkInterfacePermissionResponse' smart constructor.
+data DeleteNetworkInterfacePermissionResponse = DeleteNetworkInterfacePermissionResponse'
+  { -- | Returns @true@ if the request succeeds, otherwise returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteNetworkInterfacePermissionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'deleteNetworkInterfacePermissionResponse_return' - Returns @true@ if the request succeeds, otherwise returns an error.
+--
+-- 'httpStatus', 'deleteNetworkInterfacePermissionResponse_httpStatus' - The response's http status code.
+newDeleteNetworkInterfacePermissionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteNetworkInterfacePermissionResponse
+newDeleteNetworkInterfacePermissionResponse
+  pHttpStatus_ =
+    DeleteNetworkInterfacePermissionResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds, otherwise returns an error.
+deleteNetworkInterfacePermissionResponse_return :: Lens.Lens' DeleteNetworkInterfacePermissionResponse (Prelude.Maybe Prelude.Bool)
+deleteNetworkInterfacePermissionResponse_return = Lens.lens (\DeleteNetworkInterfacePermissionResponse' {return'} -> return') (\s@DeleteNetworkInterfacePermissionResponse' {} a -> s {return' = a} :: DeleteNetworkInterfacePermissionResponse)
+
+-- | The response's http status code.
+deleteNetworkInterfacePermissionResponse_httpStatus :: Lens.Lens' DeleteNetworkInterfacePermissionResponse Prelude.Int
+deleteNetworkInterfacePermissionResponse_httpStatus = Lens.lens (\DeleteNetworkInterfacePermissionResponse' {httpStatus} -> httpStatus) (\s@DeleteNetworkInterfacePermissionResponse' {} a -> s {httpStatus = a} :: DeleteNetworkInterfacePermissionResponse)
+
+instance
+  Prelude.NFData
+    DeleteNetworkInterfacePermissionResponse
+  where
+  rnf DeleteNetworkInterfacePermissionResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeletePlacementGroup.hs b/gen/Amazonka/EC2/DeletePlacementGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeletePlacementGroup.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeletePlacementGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified placement group. You must terminate all instances
+-- in the placement group before you can delete the placement group. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html Placement groups>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DeletePlacementGroup
+  ( -- * Creating a Request
+    DeletePlacementGroup (..),
+    newDeletePlacementGroup,
+
+    -- * Request Lenses
+    deletePlacementGroup_dryRun,
+    deletePlacementGroup_groupName,
+
+    -- * Destructuring the Response
+    DeletePlacementGroupResponse (..),
+    newDeletePlacementGroupResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePlacementGroup' smart constructor.
+data DeletePlacementGroup = DeletePlacementGroup'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the placement group.
+    groupName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePlacementGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deletePlacementGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupName', 'deletePlacementGroup_groupName' - The name of the placement group.
+newDeletePlacementGroup ::
+  -- | 'groupName'
+  Prelude.Text ->
+  DeletePlacementGroup
+newDeletePlacementGroup pGroupName_ =
+  DeletePlacementGroup'
+    { dryRun = Prelude.Nothing,
+      groupName = pGroupName_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deletePlacementGroup_dryRun :: Lens.Lens' DeletePlacementGroup (Prelude.Maybe Prelude.Bool)
+deletePlacementGroup_dryRun = Lens.lens (\DeletePlacementGroup' {dryRun} -> dryRun) (\s@DeletePlacementGroup' {} a -> s {dryRun = a} :: DeletePlacementGroup)
+
+-- | The name of the placement group.
+deletePlacementGroup_groupName :: Lens.Lens' DeletePlacementGroup Prelude.Text
+deletePlacementGroup_groupName = Lens.lens (\DeletePlacementGroup' {groupName} -> groupName) (\s@DeletePlacementGroup' {} a -> s {groupName = a} :: DeletePlacementGroup)
+
+instance Core.AWSRequest DeletePlacementGroup where
+  type
+    AWSResponse DeletePlacementGroup =
+      DeletePlacementGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeletePlacementGroupResponse'
+
+instance Prelude.Hashable DeletePlacementGroup where
+  hashWithSalt _salt DeletePlacementGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData DeletePlacementGroup where
+  rnf DeletePlacementGroup' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupName
+
+instance Data.ToHeaders DeletePlacementGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeletePlacementGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeletePlacementGroup where
+  toQuery DeletePlacementGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeletePlacementGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GroupName" Data.=: groupName
+      ]
+
+-- | /See:/ 'newDeletePlacementGroupResponse' smart constructor.
+data DeletePlacementGroupResponse = DeletePlacementGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePlacementGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeletePlacementGroupResponse ::
+  DeletePlacementGroupResponse
+newDeletePlacementGroupResponse =
+  DeletePlacementGroupResponse'
+
+instance Prelude.NFData DeletePlacementGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeletePublicIpv4Pool.hs b/gen/Amazonka/EC2/DeletePublicIpv4Pool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeletePublicIpv4Pool.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeletePublicIpv4Pool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete a public IPv4 pool. A public IPv4 pool is an EC2 IP address pool
+-- required for the public IPv4 CIDRs that you own and bring to Amazon Web
+-- Services to manage with IPAM. IPv6 addresses you bring to Amazon Web
+-- Services, however, use IPAM pools only.
+module Amazonka.EC2.DeletePublicIpv4Pool
+  ( -- * Creating a Request
+    DeletePublicIpv4Pool (..),
+    newDeletePublicIpv4Pool,
+
+    -- * Request Lenses
+    deletePublicIpv4Pool_dryRun,
+    deletePublicIpv4Pool_poolId,
+
+    -- * Destructuring the Response
+    DeletePublicIpv4PoolResponse (..),
+    newDeletePublicIpv4PoolResponse,
+
+    -- * Response Lenses
+    deletePublicIpv4PoolResponse_returnValue,
+    deletePublicIpv4PoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeletePublicIpv4Pool' smart constructor.
+data DeletePublicIpv4Pool = DeletePublicIpv4Pool'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the public IPv4 pool you want to delete.
+    poolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePublicIpv4Pool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deletePublicIpv4Pool_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'poolId', 'deletePublicIpv4Pool_poolId' - The ID of the public IPv4 pool you want to delete.
+newDeletePublicIpv4Pool ::
+  -- | 'poolId'
+  Prelude.Text ->
+  DeletePublicIpv4Pool
+newDeletePublicIpv4Pool pPoolId_ =
+  DeletePublicIpv4Pool'
+    { dryRun = Prelude.Nothing,
+      poolId = pPoolId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+deletePublicIpv4Pool_dryRun :: Lens.Lens' DeletePublicIpv4Pool (Prelude.Maybe Prelude.Bool)
+deletePublicIpv4Pool_dryRun = Lens.lens (\DeletePublicIpv4Pool' {dryRun} -> dryRun) (\s@DeletePublicIpv4Pool' {} a -> s {dryRun = a} :: DeletePublicIpv4Pool)
+
+-- | The ID of the public IPv4 pool you want to delete.
+deletePublicIpv4Pool_poolId :: Lens.Lens' DeletePublicIpv4Pool Prelude.Text
+deletePublicIpv4Pool_poolId = Lens.lens (\DeletePublicIpv4Pool' {poolId} -> poolId) (\s@DeletePublicIpv4Pool' {} a -> s {poolId = a} :: DeletePublicIpv4Pool)
+
+instance Core.AWSRequest DeletePublicIpv4Pool where
+  type
+    AWSResponse DeletePublicIpv4Pool =
+      DeletePublicIpv4PoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeletePublicIpv4PoolResponse'
+            Prelude.<$> (x Data..@? "returnValue")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeletePublicIpv4Pool where
+  hashWithSalt _salt DeletePublicIpv4Pool' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` poolId
+
+instance Prelude.NFData DeletePublicIpv4Pool where
+  rnf DeletePublicIpv4Pool' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf poolId
+
+instance Data.ToHeaders DeletePublicIpv4Pool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeletePublicIpv4Pool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeletePublicIpv4Pool where
+  toQuery DeletePublicIpv4Pool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeletePublicIpv4Pool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PoolId" Data.=: poolId
+      ]
+
+-- | /See:/ 'newDeletePublicIpv4PoolResponse' smart constructor.
+data DeletePublicIpv4PoolResponse = DeletePublicIpv4PoolResponse'
+  { -- | Information about the result of deleting the public IPv4 pool.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletePublicIpv4PoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnValue', 'deletePublicIpv4PoolResponse_returnValue' - Information about the result of deleting the public IPv4 pool.
+--
+-- 'httpStatus', 'deletePublicIpv4PoolResponse_httpStatus' - The response's http status code.
+newDeletePublicIpv4PoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeletePublicIpv4PoolResponse
+newDeletePublicIpv4PoolResponse pHttpStatus_ =
+  DeletePublicIpv4PoolResponse'
+    { returnValue =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the result of deleting the public IPv4 pool.
+deletePublicIpv4PoolResponse_returnValue :: Lens.Lens' DeletePublicIpv4PoolResponse (Prelude.Maybe Prelude.Bool)
+deletePublicIpv4PoolResponse_returnValue = Lens.lens (\DeletePublicIpv4PoolResponse' {returnValue} -> returnValue) (\s@DeletePublicIpv4PoolResponse' {} a -> s {returnValue = a} :: DeletePublicIpv4PoolResponse)
+
+-- | The response's http status code.
+deletePublicIpv4PoolResponse_httpStatus :: Lens.Lens' DeletePublicIpv4PoolResponse Prelude.Int
+deletePublicIpv4PoolResponse_httpStatus = Lens.lens (\DeletePublicIpv4PoolResponse' {httpStatus} -> httpStatus) (\s@DeletePublicIpv4PoolResponse' {} a -> s {httpStatus = a} :: DeletePublicIpv4PoolResponse)
+
+instance Prelude.NFData DeletePublicIpv4PoolResponse where
+  rnf DeletePublicIpv4PoolResponse' {..} =
+    Prelude.rnf returnValue
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteQueuedReservedInstances.hs b/gen/Amazonka/EC2/DeleteQueuedReservedInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteQueuedReservedInstances.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteQueuedReservedInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the queued purchases for the specified Reserved Instances.
+module Amazonka.EC2.DeleteQueuedReservedInstances
+  ( -- * Creating a Request
+    DeleteQueuedReservedInstances (..),
+    newDeleteQueuedReservedInstances,
+
+    -- * Request Lenses
+    deleteQueuedReservedInstances_dryRun,
+    deleteQueuedReservedInstances_reservedInstancesIds,
+
+    -- * Destructuring the Response
+    DeleteQueuedReservedInstancesResponse (..),
+    newDeleteQueuedReservedInstancesResponse,
+
+    -- * Response Lenses
+    deleteQueuedReservedInstancesResponse_failedQueuedPurchaseDeletions,
+    deleteQueuedReservedInstancesResponse_successfulQueuedPurchaseDeletions,
+    deleteQueuedReservedInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteQueuedReservedInstances' smart constructor.
+data DeleteQueuedReservedInstances = DeleteQueuedReservedInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the Reserved Instances.
+    reservedInstancesIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueuedReservedInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteQueuedReservedInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'reservedInstancesIds', 'deleteQueuedReservedInstances_reservedInstancesIds' - The IDs of the Reserved Instances.
+newDeleteQueuedReservedInstances ::
+  -- | 'reservedInstancesIds'
+  Prelude.NonEmpty Prelude.Text ->
+  DeleteQueuedReservedInstances
+newDeleteQueuedReservedInstances
+  pReservedInstancesIds_ =
+    DeleteQueuedReservedInstances'
+      { dryRun =
+          Prelude.Nothing,
+        reservedInstancesIds =
+          Lens.coerced Lens.# pReservedInstancesIds_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteQueuedReservedInstances_dryRun :: Lens.Lens' DeleteQueuedReservedInstances (Prelude.Maybe Prelude.Bool)
+deleteQueuedReservedInstances_dryRun = Lens.lens (\DeleteQueuedReservedInstances' {dryRun} -> dryRun) (\s@DeleteQueuedReservedInstances' {} a -> s {dryRun = a} :: DeleteQueuedReservedInstances)
+
+-- | The IDs of the Reserved Instances.
+deleteQueuedReservedInstances_reservedInstancesIds :: Lens.Lens' DeleteQueuedReservedInstances (Prelude.NonEmpty Prelude.Text)
+deleteQueuedReservedInstances_reservedInstancesIds = Lens.lens (\DeleteQueuedReservedInstances' {reservedInstancesIds} -> reservedInstancesIds) (\s@DeleteQueuedReservedInstances' {} a -> s {reservedInstancesIds = a} :: DeleteQueuedReservedInstances) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    DeleteQueuedReservedInstances
+  where
+  type
+    AWSResponse DeleteQueuedReservedInstances =
+      DeleteQueuedReservedInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteQueuedReservedInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "failedQueuedPurchaseDeletionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "successfulQueuedPurchaseDeletionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteQueuedReservedInstances
+  where
+  hashWithSalt _salt DeleteQueuedReservedInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` reservedInstancesIds
+
+instance Prelude.NFData DeleteQueuedReservedInstances where
+  rnf DeleteQueuedReservedInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf reservedInstancesIds
+
+instance Data.ToHeaders DeleteQueuedReservedInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteQueuedReservedInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteQueuedReservedInstances where
+  toQuery DeleteQueuedReservedInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteQueuedReservedInstances" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "ReservedInstancesId"
+          reservedInstancesIds
+      ]
+
+-- | /See:/ 'newDeleteQueuedReservedInstancesResponse' smart constructor.
+data DeleteQueuedReservedInstancesResponse = DeleteQueuedReservedInstancesResponse'
+  { -- | Information about the queued purchases that could not be deleted.
+    failedQueuedPurchaseDeletions :: Prelude.Maybe [FailedQueuedPurchaseDeletion],
+    -- | Information about the queued purchases that were successfully deleted.
+    successfulQueuedPurchaseDeletions :: Prelude.Maybe [SuccessfulQueuedPurchaseDeletion],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueuedReservedInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failedQueuedPurchaseDeletions', 'deleteQueuedReservedInstancesResponse_failedQueuedPurchaseDeletions' - Information about the queued purchases that could not be deleted.
+--
+-- 'successfulQueuedPurchaseDeletions', 'deleteQueuedReservedInstancesResponse_successfulQueuedPurchaseDeletions' - Information about the queued purchases that were successfully deleted.
+--
+-- 'httpStatus', 'deleteQueuedReservedInstancesResponse_httpStatus' - The response's http status code.
+newDeleteQueuedReservedInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteQueuedReservedInstancesResponse
+newDeleteQueuedReservedInstancesResponse pHttpStatus_ =
+  DeleteQueuedReservedInstancesResponse'
+    { failedQueuedPurchaseDeletions =
+        Prelude.Nothing,
+      successfulQueuedPurchaseDeletions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the queued purchases that could not be deleted.
+deleteQueuedReservedInstancesResponse_failedQueuedPurchaseDeletions :: Lens.Lens' DeleteQueuedReservedInstancesResponse (Prelude.Maybe [FailedQueuedPurchaseDeletion])
+deleteQueuedReservedInstancesResponse_failedQueuedPurchaseDeletions = Lens.lens (\DeleteQueuedReservedInstancesResponse' {failedQueuedPurchaseDeletions} -> failedQueuedPurchaseDeletions) (\s@DeleteQueuedReservedInstancesResponse' {} a -> s {failedQueuedPurchaseDeletions = a} :: DeleteQueuedReservedInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the queued purchases that were successfully deleted.
+deleteQueuedReservedInstancesResponse_successfulQueuedPurchaseDeletions :: Lens.Lens' DeleteQueuedReservedInstancesResponse (Prelude.Maybe [SuccessfulQueuedPurchaseDeletion])
+deleteQueuedReservedInstancesResponse_successfulQueuedPurchaseDeletions = Lens.lens (\DeleteQueuedReservedInstancesResponse' {successfulQueuedPurchaseDeletions} -> successfulQueuedPurchaseDeletions) (\s@DeleteQueuedReservedInstancesResponse' {} a -> s {successfulQueuedPurchaseDeletions = a} :: DeleteQueuedReservedInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteQueuedReservedInstancesResponse_httpStatus :: Lens.Lens' DeleteQueuedReservedInstancesResponse Prelude.Int
+deleteQueuedReservedInstancesResponse_httpStatus = Lens.lens (\DeleteQueuedReservedInstancesResponse' {httpStatus} -> httpStatus) (\s@DeleteQueuedReservedInstancesResponse' {} a -> s {httpStatus = a} :: DeleteQueuedReservedInstancesResponse)
+
+instance
+  Prelude.NFData
+    DeleteQueuedReservedInstancesResponse
+  where
+  rnf DeleteQueuedReservedInstancesResponse' {..} =
+    Prelude.rnf failedQueuedPurchaseDeletions
+      `Prelude.seq` Prelude.rnf successfulQueuedPurchaseDeletions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteRoute.hs b/gen/Amazonka/EC2/DeleteRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteRoute.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified route from the specified route table.
+module Amazonka.EC2.DeleteRoute
+  ( -- * Creating a Request
+    DeleteRoute (..),
+    newDeleteRoute,
+
+    -- * Request Lenses
+    deleteRoute_destinationCidrBlock,
+    deleteRoute_destinationIpv6CidrBlock,
+    deleteRoute_destinationPrefixListId,
+    deleteRoute_dryRun,
+    deleteRoute_routeTableId,
+
+    -- * Destructuring the Response
+    DeleteRouteResponse (..),
+    newDeleteRouteResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRoute' smart constructor.
+data DeleteRoute = DeleteRoute'
+  { -- | The IPv4 CIDR range for the route. The value you specify must match the
+    -- CIDR for the route exactly.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR range for the route. The value you specify must match the
+    -- CIDR for the route exactly.
+    destinationIpv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list for the route.
+    destinationPrefixListId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidrBlock', 'deleteRoute_destinationCidrBlock' - The IPv4 CIDR range for the route. The value you specify must match the
+-- CIDR for the route exactly.
+--
+-- 'destinationIpv6CidrBlock', 'deleteRoute_destinationIpv6CidrBlock' - The IPv6 CIDR range for the route. The value you specify must match the
+-- CIDR for the route exactly.
+--
+-- 'destinationPrefixListId', 'deleteRoute_destinationPrefixListId' - The ID of the prefix list for the route.
+--
+-- 'dryRun', 'deleteRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'routeTableId', 'deleteRoute_routeTableId' - The ID of the route table.
+newDeleteRoute ::
+  -- | 'routeTableId'
+  Prelude.Text ->
+  DeleteRoute
+newDeleteRoute pRouteTableId_ =
+  DeleteRoute'
+    { destinationCidrBlock =
+        Prelude.Nothing,
+      destinationIpv6CidrBlock = Prelude.Nothing,
+      destinationPrefixListId = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      routeTableId = pRouteTableId_
+    }
+
+-- | The IPv4 CIDR range for the route. The value you specify must match the
+-- CIDR for the route exactly.
+deleteRoute_destinationCidrBlock :: Lens.Lens' DeleteRoute (Prelude.Maybe Prelude.Text)
+deleteRoute_destinationCidrBlock = Lens.lens (\DeleteRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@DeleteRoute' {} a -> s {destinationCidrBlock = a} :: DeleteRoute)
+
+-- | The IPv6 CIDR range for the route. The value you specify must match the
+-- CIDR for the route exactly.
+deleteRoute_destinationIpv6CidrBlock :: Lens.Lens' DeleteRoute (Prelude.Maybe Prelude.Text)
+deleteRoute_destinationIpv6CidrBlock = Lens.lens (\DeleteRoute' {destinationIpv6CidrBlock} -> destinationIpv6CidrBlock) (\s@DeleteRoute' {} a -> s {destinationIpv6CidrBlock = a} :: DeleteRoute)
+
+-- | The ID of the prefix list for the route.
+deleteRoute_destinationPrefixListId :: Lens.Lens' DeleteRoute (Prelude.Maybe Prelude.Text)
+deleteRoute_destinationPrefixListId = Lens.lens (\DeleteRoute' {destinationPrefixListId} -> destinationPrefixListId) (\s@DeleteRoute' {} a -> s {destinationPrefixListId = a} :: DeleteRoute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteRoute_dryRun :: Lens.Lens' DeleteRoute (Prelude.Maybe Prelude.Bool)
+deleteRoute_dryRun = Lens.lens (\DeleteRoute' {dryRun} -> dryRun) (\s@DeleteRoute' {} a -> s {dryRun = a} :: DeleteRoute)
+
+-- | The ID of the route table.
+deleteRoute_routeTableId :: Lens.Lens' DeleteRoute Prelude.Text
+deleteRoute_routeTableId = Lens.lens (\DeleteRoute' {routeTableId} -> routeTableId) (\s@DeleteRoute' {} a -> s {routeTableId = a} :: DeleteRoute)
+
+instance Core.AWSRequest DeleteRoute where
+  type AWSResponse DeleteRoute = DeleteRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull DeleteRouteResponse'
+
+instance Prelude.Hashable DeleteRoute where
+  hashWithSalt _salt DeleteRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationIpv6CidrBlock
+      `Prelude.hashWithSalt` destinationPrefixListId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData DeleteRoute where
+  rnf DeleteRoute' {..} =
+    Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationIpv6CidrBlock
+      `Prelude.seq` Prelude.rnf destinationPrefixListId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders DeleteRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteRoute where
+  toQuery DeleteRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "DestinationIpv6CidrBlock"
+          Data.=: destinationIpv6CidrBlock,
+        "DestinationPrefixListId"
+          Data.=: destinationPrefixListId,
+        "DryRun" Data.=: dryRun,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newDeleteRouteResponse' smart constructor.
+data DeleteRouteResponse = DeleteRouteResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRouteResponse ::
+  DeleteRouteResponse
+newDeleteRouteResponse = DeleteRouteResponse'
+
+instance Prelude.NFData DeleteRouteResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteRouteTable.hs b/gen/Amazonka/EC2/DeleteRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteRouteTable.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified route table. You must disassociate the route table
+-- from any subnets before you can delete it. You can\'t delete the main
+-- route table.
+module Amazonka.EC2.DeleteRouteTable
+  ( -- * Creating a Request
+    DeleteRouteTable (..),
+    newDeleteRouteTable,
+
+    -- * Request Lenses
+    deleteRouteTable_dryRun,
+    deleteRouteTable_routeTableId,
+
+    -- * Destructuring the Response
+    DeleteRouteTableResponse (..),
+    newDeleteRouteTableResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteRouteTable' smart constructor.
+data DeleteRouteTable = DeleteRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'routeTableId', 'deleteRouteTable_routeTableId' - The ID of the route table.
+newDeleteRouteTable ::
+  -- | 'routeTableId'
+  Prelude.Text ->
+  DeleteRouteTable
+newDeleteRouteTable pRouteTableId_ =
+  DeleteRouteTable'
+    { dryRun = Prelude.Nothing,
+      routeTableId = pRouteTableId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteRouteTable_dryRun :: Lens.Lens' DeleteRouteTable (Prelude.Maybe Prelude.Bool)
+deleteRouteTable_dryRun = Lens.lens (\DeleteRouteTable' {dryRun} -> dryRun) (\s@DeleteRouteTable' {} a -> s {dryRun = a} :: DeleteRouteTable)
+
+-- | The ID of the route table.
+deleteRouteTable_routeTableId :: Lens.Lens' DeleteRouteTable Prelude.Text
+deleteRouteTable_routeTableId = Lens.lens (\DeleteRouteTable' {routeTableId} -> routeTableId) (\s@DeleteRouteTable' {} a -> s {routeTableId = a} :: DeleteRouteTable)
+
+instance Core.AWSRequest DeleteRouteTable where
+  type
+    AWSResponse DeleteRouteTable =
+      DeleteRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteRouteTableResponse'
+
+instance Prelude.Hashable DeleteRouteTable where
+  hashWithSalt _salt DeleteRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData DeleteRouteTable where
+  rnf DeleteRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders DeleteRouteTable where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteRouteTable where
+  toQuery DeleteRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteRouteTable" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newDeleteRouteTableResponse' smart constructor.
+data DeleteRouteTableResponse = DeleteRouteTableResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteRouteTableResponse ::
+  DeleteRouteTableResponse
+newDeleteRouteTableResponse =
+  DeleteRouteTableResponse'
+
+instance Prelude.NFData DeleteRouteTableResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteSecurityGroup.hs b/gen/Amazonka/EC2/DeleteSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteSecurityGroup.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteSecurityGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a security group.
+--
+-- If you attempt to delete a security group that is associated with an
+-- instance, or is referenced by another security group, the operation
+-- fails with @InvalidGroup.InUse@ in EC2-Classic or @DependencyViolation@
+-- in EC2-VPC.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DeleteSecurityGroup
+  ( -- * Creating a Request
+    DeleteSecurityGroup (..),
+    newDeleteSecurityGroup,
+
+    -- * Request Lenses
+    deleteSecurityGroup_dryRun,
+    deleteSecurityGroup_groupId,
+    deleteSecurityGroup_groupName,
+
+    -- * Destructuring the Response
+    DeleteSecurityGroupResponse (..),
+    newDeleteSecurityGroupResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSecurityGroup' smart constructor.
+data DeleteSecurityGroup = DeleteSecurityGroup'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the security group. Required for a nondefault VPC.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic, default VPC] The name of the security group. You can
+    -- specify either the security group name or the security group ID. For
+    -- security groups in a nondefault VPC, you must specify the security group
+    -- ID.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSecurityGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteSecurityGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupId', 'deleteSecurityGroup_groupId' - The ID of the security group. Required for a nondefault VPC.
+--
+-- 'groupName', 'deleteSecurityGroup_groupName' - [EC2-Classic, default VPC] The name of the security group. You can
+-- specify either the security group name or the security group ID. For
+-- security groups in a nondefault VPC, you must specify the security group
+-- ID.
+newDeleteSecurityGroup ::
+  DeleteSecurityGroup
+newDeleteSecurityGroup =
+  DeleteSecurityGroup'
+    { dryRun = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteSecurityGroup_dryRun :: Lens.Lens' DeleteSecurityGroup (Prelude.Maybe Prelude.Bool)
+deleteSecurityGroup_dryRun = Lens.lens (\DeleteSecurityGroup' {dryRun} -> dryRun) (\s@DeleteSecurityGroup' {} a -> s {dryRun = a} :: DeleteSecurityGroup)
+
+-- | The ID of the security group. Required for a nondefault VPC.
+deleteSecurityGroup_groupId :: Lens.Lens' DeleteSecurityGroup (Prelude.Maybe Prelude.Text)
+deleteSecurityGroup_groupId = Lens.lens (\DeleteSecurityGroup' {groupId} -> groupId) (\s@DeleteSecurityGroup' {} a -> s {groupId = a} :: DeleteSecurityGroup)
+
+-- | [EC2-Classic, default VPC] The name of the security group. You can
+-- specify either the security group name or the security group ID. For
+-- security groups in a nondefault VPC, you must specify the security group
+-- ID.
+deleteSecurityGroup_groupName :: Lens.Lens' DeleteSecurityGroup (Prelude.Maybe Prelude.Text)
+deleteSecurityGroup_groupName = Lens.lens (\DeleteSecurityGroup' {groupName} -> groupName) (\s@DeleteSecurityGroup' {} a -> s {groupName = a} :: DeleteSecurityGroup)
+
+instance Core.AWSRequest DeleteSecurityGroup where
+  type
+    AWSResponse DeleteSecurityGroup =
+      DeleteSecurityGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteSecurityGroupResponse'
+
+instance Prelude.Hashable DeleteSecurityGroup where
+  hashWithSalt _salt DeleteSecurityGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData DeleteSecurityGroup where
+  rnf DeleteSecurityGroup' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+
+instance Data.ToHeaders DeleteSecurityGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteSecurityGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSecurityGroup where
+  toQuery DeleteSecurityGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteSecurityGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName
+      ]
+
+-- | /See:/ 'newDeleteSecurityGroupResponse' smart constructor.
+data DeleteSecurityGroupResponse = DeleteSecurityGroupResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSecurityGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteSecurityGroupResponse ::
+  DeleteSecurityGroupResponse
+newDeleteSecurityGroupResponse =
+  DeleteSecurityGroupResponse'
+
+instance Prelude.NFData DeleteSecurityGroupResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteSnapshot.hs b/gen/Amazonka/EC2/DeleteSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteSnapshot.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteSnapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified snapshot.
+--
+-- When you make periodic snapshots of a volume, the snapshots are
+-- incremental, and only the blocks on the device that have changed since
+-- your last snapshot are saved in the new snapshot. When you delete a
+-- snapshot, only the data not needed for any other snapshot is removed. So
+-- regardless of which prior snapshots have been deleted, all active
+-- snapshots will have access to all the information needed to restore the
+-- volume.
+--
+-- You cannot delete a snapshot of the root device of an EBS volume used by
+-- a registered AMI. You must first de-register the AMI before you can
+-- delete the snapshot.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html Delete an Amazon EBS snapshot>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DeleteSnapshot
+  ( -- * Creating a Request
+    DeleteSnapshot (..),
+    newDeleteSnapshot,
+
+    -- * Request Lenses
+    deleteSnapshot_dryRun,
+    deleteSnapshot_snapshotId,
+
+    -- * Destructuring the Response
+    DeleteSnapshotResponse (..),
+    newDeleteSnapshotResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSnapshot' smart constructor.
+data DeleteSnapshot = DeleteSnapshot'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the EBS snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteSnapshot_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'snapshotId', 'deleteSnapshot_snapshotId' - The ID of the EBS snapshot.
+newDeleteSnapshot ::
+  -- | 'snapshotId'
+  Prelude.Text ->
+  DeleteSnapshot
+newDeleteSnapshot pSnapshotId_ =
+  DeleteSnapshot'
+    { dryRun = Prelude.Nothing,
+      snapshotId = pSnapshotId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteSnapshot_dryRun :: Lens.Lens' DeleteSnapshot (Prelude.Maybe Prelude.Bool)
+deleteSnapshot_dryRun = Lens.lens (\DeleteSnapshot' {dryRun} -> dryRun) (\s@DeleteSnapshot' {} a -> s {dryRun = a} :: DeleteSnapshot)
+
+-- | The ID of the EBS snapshot.
+deleteSnapshot_snapshotId :: Lens.Lens' DeleteSnapshot Prelude.Text
+deleteSnapshot_snapshotId = Lens.lens (\DeleteSnapshot' {snapshotId} -> snapshotId) (\s@DeleteSnapshot' {} a -> s {snapshotId = a} :: DeleteSnapshot)
+
+instance Core.AWSRequest DeleteSnapshot where
+  type
+    AWSResponse DeleteSnapshot =
+      DeleteSnapshotResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteSnapshotResponse'
+
+instance Prelude.Hashable DeleteSnapshot where
+  hashWithSalt _salt DeleteSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData DeleteSnapshot where
+  rnf DeleteSnapshot' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders DeleteSnapshot where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteSnapshot where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSnapshot where
+  toQuery DeleteSnapshot' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteSnapshot" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newDeleteSnapshotResponse' smart constructor.
+data DeleteSnapshotResponse = DeleteSnapshotResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteSnapshotResponse ::
+  DeleteSnapshotResponse
+newDeleteSnapshotResponse = DeleteSnapshotResponse'
+
+instance Prelude.NFData DeleteSnapshotResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteSpotDatafeedSubscription.hs b/gen/Amazonka/EC2/DeleteSpotDatafeedSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteSpotDatafeedSubscription.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteSpotDatafeedSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the data feed for Spot Instances.
+module Amazonka.EC2.DeleteSpotDatafeedSubscription
+  ( -- * Creating a Request
+    DeleteSpotDatafeedSubscription (..),
+    newDeleteSpotDatafeedSubscription,
+
+    -- * Request Lenses
+    deleteSpotDatafeedSubscription_dryRun,
+
+    -- * Destructuring the Response
+    DeleteSpotDatafeedSubscriptionResponse (..),
+    newDeleteSpotDatafeedSubscriptionResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteSpotDatafeedSubscription.
+--
+-- /See:/ 'newDeleteSpotDatafeedSubscription' smart constructor.
+data DeleteSpotDatafeedSubscription = DeleteSpotDatafeedSubscription'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSpotDatafeedSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteSpotDatafeedSubscription_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDeleteSpotDatafeedSubscription ::
+  DeleteSpotDatafeedSubscription
+newDeleteSpotDatafeedSubscription =
+  DeleteSpotDatafeedSubscription'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteSpotDatafeedSubscription_dryRun :: Lens.Lens' DeleteSpotDatafeedSubscription (Prelude.Maybe Prelude.Bool)
+deleteSpotDatafeedSubscription_dryRun = Lens.lens (\DeleteSpotDatafeedSubscription' {dryRun} -> dryRun) (\s@DeleteSpotDatafeedSubscription' {} a -> s {dryRun = a} :: DeleteSpotDatafeedSubscription)
+
+instance
+  Core.AWSRequest
+    DeleteSpotDatafeedSubscription
+  where
+  type
+    AWSResponse DeleteSpotDatafeedSubscription =
+      DeleteSpotDatafeedSubscriptionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteSpotDatafeedSubscriptionResponse'
+
+instance
+  Prelude.Hashable
+    DeleteSpotDatafeedSubscription
+  where
+  hashWithSalt
+    _salt
+    DeleteSpotDatafeedSubscription' {..} =
+      _salt `Prelude.hashWithSalt` dryRun
+
+instance
+  Prelude.NFData
+    DeleteSpotDatafeedSubscription
+  where
+  rnf DeleteSpotDatafeedSubscription' {..} =
+    Prelude.rnf dryRun
+
+instance
+  Data.ToHeaders
+    DeleteSpotDatafeedSubscription
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteSpotDatafeedSubscription where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSpotDatafeedSubscription where
+  toQuery DeleteSpotDatafeedSubscription' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteSpotDatafeedSubscription" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newDeleteSpotDatafeedSubscriptionResponse' smart constructor.
+data DeleteSpotDatafeedSubscriptionResponse = DeleteSpotDatafeedSubscriptionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSpotDatafeedSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteSpotDatafeedSubscriptionResponse ::
+  DeleteSpotDatafeedSubscriptionResponse
+newDeleteSpotDatafeedSubscriptionResponse =
+  DeleteSpotDatafeedSubscriptionResponse'
+
+instance
+  Prelude.NFData
+    DeleteSpotDatafeedSubscriptionResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteSubnet.hs b/gen/Amazonka/EC2/DeleteSubnet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteSubnet.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteSubnet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified subnet. You must terminate all running instances
+-- in the subnet before you can delete the subnet.
+module Amazonka.EC2.DeleteSubnet
+  ( -- * Creating a Request
+    DeleteSubnet (..),
+    newDeleteSubnet,
+
+    -- * Request Lenses
+    deleteSubnet_dryRun,
+    deleteSubnet_subnetId,
+
+    -- * Destructuring the Response
+    DeleteSubnetResponse (..),
+    newDeleteSubnetResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSubnet' smart constructor.
+data DeleteSubnet = DeleteSubnet'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSubnet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteSubnet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'subnetId', 'deleteSubnet_subnetId' - The ID of the subnet.
+newDeleteSubnet ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  DeleteSubnet
+newDeleteSubnet pSubnetId_ =
+  DeleteSubnet'
+    { dryRun = Prelude.Nothing,
+      subnetId = pSubnetId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteSubnet_dryRun :: Lens.Lens' DeleteSubnet (Prelude.Maybe Prelude.Bool)
+deleteSubnet_dryRun = Lens.lens (\DeleteSubnet' {dryRun} -> dryRun) (\s@DeleteSubnet' {} a -> s {dryRun = a} :: DeleteSubnet)
+
+-- | The ID of the subnet.
+deleteSubnet_subnetId :: Lens.Lens' DeleteSubnet Prelude.Text
+deleteSubnet_subnetId = Lens.lens (\DeleteSubnet' {subnetId} -> subnetId) (\s@DeleteSubnet' {} a -> s {subnetId = a} :: DeleteSubnet)
+
+instance Core.AWSRequest DeleteSubnet where
+  type AWSResponse DeleteSubnet = DeleteSubnetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull DeleteSubnetResponse'
+
+instance Prelude.Hashable DeleteSubnet where
+  hashWithSalt _salt DeleteSubnet' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData DeleteSubnet where
+  rnf DeleteSubnet' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance Data.ToHeaders DeleteSubnet where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteSubnet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSubnet where
+  toQuery DeleteSubnet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteSubnet" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newDeleteSubnetResponse' smart constructor.
+data DeleteSubnetResponse = DeleteSubnetResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSubnetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteSubnetResponse ::
+  DeleteSubnetResponse
+newDeleteSubnetResponse = DeleteSubnetResponse'
+
+instance Prelude.NFData DeleteSubnetResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteSubnetCidrReservation.hs b/gen/Amazonka/EC2/DeleteSubnetCidrReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteSubnetCidrReservation.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteSubnetCidrReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a subnet CIDR reservation.
+module Amazonka.EC2.DeleteSubnetCidrReservation
+  ( -- * Creating a Request
+    DeleteSubnetCidrReservation (..),
+    newDeleteSubnetCidrReservation,
+
+    -- * Request Lenses
+    deleteSubnetCidrReservation_dryRun,
+    deleteSubnetCidrReservation_subnetCidrReservationId,
+
+    -- * Destructuring the Response
+    DeleteSubnetCidrReservationResponse (..),
+    newDeleteSubnetCidrReservationResponse,
+
+    -- * Response Lenses
+    deleteSubnetCidrReservationResponse_deletedSubnetCidrReservation,
+    deleteSubnetCidrReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteSubnetCidrReservation' smart constructor.
+data DeleteSubnetCidrReservation = DeleteSubnetCidrReservation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the subnet CIDR reservation.
+    subnetCidrReservationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSubnetCidrReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteSubnetCidrReservation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'subnetCidrReservationId', 'deleteSubnetCidrReservation_subnetCidrReservationId' - The ID of the subnet CIDR reservation.
+newDeleteSubnetCidrReservation ::
+  -- | 'subnetCidrReservationId'
+  Prelude.Text ->
+  DeleteSubnetCidrReservation
+newDeleteSubnetCidrReservation
+  pSubnetCidrReservationId_ =
+    DeleteSubnetCidrReservation'
+      { dryRun =
+          Prelude.Nothing,
+        subnetCidrReservationId =
+          pSubnetCidrReservationId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteSubnetCidrReservation_dryRun :: Lens.Lens' DeleteSubnetCidrReservation (Prelude.Maybe Prelude.Bool)
+deleteSubnetCidrReservation_dryRun = Lens.lens (\DeleteSubnetCidrReservation' {dryRun} -> dryRun) (\s@DeleteSubnetCidrReservation' {} a -> s {dryRun = a} :: DeleteSubnetCidrReservation)
+
+-- | The ID of the subnet CIDR reservation.
+deleteSubnetCidrReservation_subnetCidrReservationId :: Lens.Lens' DeleteSubnetCidrReservation Prelude.Text
+deleteSubnetCidrReservation_subnetCidrReservationId = Lens.lens (\DeleteSubnetCidrReservation' {subnetCidrReservationId} -> subnetCidrReservationId) (\s@DeleteSubnetCidrReservation' {} a -> s {subnetCidrReservationId = a} :: DeleteSubnetCidrReservation)
+
+instance Core.AWSRequest DeleteSubnetCidrReservation where
+  type
+    AWSResponse DeleteSubnetCidrReservation =
+      DeleteSubnetCidrReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteSubnetCidrReservationResponse'
+            Prelude.<$> (x Data..@? "deletedSubnetCidrReservation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteSubnetCidrReservation where
+  hashWithSalt _salt DeleteSubnetCidrReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` subnetCidrReservationId
+
+instance Prelude.NFData DeleteSubnetCidrReservation where
+  rnf DeleteSubnetCidrReservation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf subnetCidrReservationId
+
+instance Data.ToHeaders DeleteSubnetCidrReservation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteSubnetCidrReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteSubnetCidrReservation where
+  toQuery DeleteSubnetCidrReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteSubnetCidrReservation" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "SubnetCidrReservationId"
+          Data.=: subnetCidrReservationId
+      ]
+
+-- | /See:/ 'newDeleteSubnetCidrReservationResponse' smart constructor.
+data DeleteSubnetCidrReservationResponse = DeleteSubnetCidrReservationResponse'
+  { -- | Information about the deleted subnet CIDR reservation.
+    deletedSubnetCidrReservation :: Prelude.Maybe SubnetCidrReservation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteSubnetCidrReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deletedSubnetCidrReservation', 'deleteSubnetCidrReservationResponse_deletedSubnetCidrReservation' - Information about the deleted subnet CIDR reservation.
+--
+-- 'httpStatus', 'deleteSubnetCidrReservationResponse_httpStatus' - The response's http status code.
+newDeleteSubnetCidrReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteSubnetCidrReservationResponse
+newDeleteSubnetCidrReservationResponse pHttpStatus_ =
+  DeleteSubnetCidrReservationResponse'
+    { deletedSubnetCidrReservation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted subnet CIDR reservation.
+deleteSubnetCidrReservationResponse_deletedSubnetCidrReservation :: Lens.Lens' DeleteSubnetCidrReservationResponse (Prelude.Maybe SubnetCidrReservation)
+deleteSubnetCidrReservationResponse_deletedSubnetCidrReservation = Lens.lens (\DeleteSubnetCidrReservationResponse' {deletedSubnetCidrReservation} -> deletedSubnetCidrReservation) (\s@DeleteSubnetCidrReservationResponse' {} a -> s {deletedSubnetCidrReservation = a} :: DeleteSubnetCidrReservationResponse)
+
+-- | The response's http status code.
+deleteSubnetCidrReservationResponse_httpStatus :: Lens.Lens' DeleteSubnetCidrReservationResponse Prelude.Int
+deleteSubnetCidrReservationResponse_httpStatus = Lens.lens (\DeleteSubnetCidrReservationResponse' {httpStatus} -> httpStatus) (\s@DeleteSubnetCidrReservationResponse' {} a -> s {httpStatus = a} :: DeleteSubnetCidrReservationResponse)
+
+instance
+  Prelude.NFData
+    DeleteSubnetCidrReservationResponse
+  where
+  rnf DeleteSubnetCidrReservationResponse' {..} =
+    Prelude.rnf deletedSubnetCidrReservation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTags.hs b/gen/Amazonka/EC2/DeleteTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTags.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified set of tags from the specified set of resources.
+--
+-- To list the current tags, use DescribeTags. For more information about
+-- tags, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tag your Amazon EC2 resources>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DeleteTags
+  ( -- * Creating a Request
+    DeleteTags (..),
+    newDeleteTags,
+
+    -- * Request Lenses
+    deleteTags_dryRun,
+    deleteTags_tags,
+    deleteTags_resources,
+
+    -- * Destructuring the Response
+    DeleteTagsResponse (..),
+    newDeleteTagsResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTags' smart constructor.
+data DeleteTags = DeleteTags'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to delete. Specify a tag key and an optional tag value to
+    -- delete specific tags. If you specify a tag key without a tag value, we
+    -- delete any tag with this key regardless of its value. If you specify a
+    -- tag key with an empty string as the tag value, we delete the tag only if
+    -- its value is an empty string.
+    --
+    -- If you omit this parameter, we delete all user-defined tags for the
+    -- specified resources. We do not delete Amazon Web Services-generated tags
+    -- (tags that have the @aws:@ prefix).
+    --
+    -- Constraints: Up to 1000 tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The IDs of the resources, separated by spaces.
+    --
+    -- Constraints: Up to 1000 resource IDs. We recommend breaking up this
+    -- request into smaller batches.
+    resources :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTags_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tags', 'deleteTags_tags' - The tags to delete. Specify a tag key and an optional tag value to
+-- delete specific tags. If you specify a tag key without a tag value, we
+-- delete any tag with this key regardless of its value. If you specify a
+-- tag key with an empty string as the tag value, we delete the tag only if
+-- its value is an empty string.
+--
+-- If you omit this parameter, we delete all user-defined tags for the
+-- specified resources. We do not delete Amazon Web Services-generated tags
+-- (tags that have the @aws:@ prefix).
+--
+-- Constraints: Up to 1000 tags.
+--
+-- 'resources', 'deleteTags_resources' - The IDs of the resources, separated by spaces.
+--
+-- Constraints: Up to 1000 resource IDs. We recommend breaking up this
+-- request into smaller batches.
+newDeleteTags ::
+  DeleteTags
+newDeleteTags =
+  DeleteTags'
+    { dryRun = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      resources = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTags_dryRun :: Lens.Lens' DeleteTags (Prelude.Maybe Prelude.Bool)
+deleteTags_dryRun = Lens.lens (\DeleteTags' {dryRun} -> dryRun) (\s@DeleteTags' {} a -> s {dryRun = a} :: DeleteTags)
+
+-- | The tags to delete. Specify a tag key and an optional tag value to
+-- delete specific tags. If you specify a tag key without a tag value, we
+-- delete any tag with this key regardless of its value. If you specify a
+-- tag key with an empty string as the tag value, we delete the tag only if
+-- its value is an empty string.
+--
+-- If you omit this parameter, we delete all user-defined tags for the
+-- specified resources. We do not delete Amazon Web Services-generated tags
+-- (tags that have the @aws:@ prefix).
+--
+-- Constraints: Up to 1000 tags.
+deleteTags_tags :: Lens.Lens' DeleteTags (Prelude.Maybe [Tag])
+deleteTags_tags = Lens.lens (\DeleteTags' {tags} -> tags) (\s@DeleteTags' {} a -> s {tags = a} :: DeleteTags) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the resources, separated by spaces.
+--
+-- Constraints: Up to 1000 resource IDs. We recommend breaking up this
+-- request into smaller batches.
+deleteTags_resources :: Lens.Lens' DeleteTags [Prelude.Text]
+deleteTags_resources = Lens.lens (\DeleteTags' {resources} -> resources) (\s@DeleteTags' {} a -> s {resources = a} :: DeleteTags) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteTags where
+  type AWSResponse DeleteTags = DeleteTagsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull DeleteTagsResponse'
+
+instance Prelude.Hashable DeleteTags where
+  hashWithSalt _salt DeleteTags' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData DeleteTags where
+  rnf DeleteTags' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf resources
+
+instance Data.ToHeaders DeleteTags where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTags where
+  toQuery DeleteTags' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteTags" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Tag" Prelude.<$> tags),
+        Data.toQueryList "ResourceId" resources
+      ]
+
+-- | /See:/ 'newDeleteTagsResponse' smart constructor.
+data DeleteTagsResponse = DeleteTagsResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteTagsResponse ::
+  DeleteTagsResponse
+newDeleteTagsResponse = DeleteTagsResponse'
+
+instance Prelude.NFData DeleteTagsResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteTrafficMirrorFilter.hs b/gen/Amazonka/EC2/DeleteTrafficMirrorFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTrafficMirrorFilter.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTrafficMirrorFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Traffic Mirror filter.
+--
+-- You cannot delete a Traffic Mirror filter that is in use by a Traffic
+-- Mirror session.
+module Amazonka.EC2.DeleteTrafficMirrorFilter
+  ( -- * Creating a Request
+    DeleteTrafficMirrorFilter (..),
+    newDeleteTrafficMirrorFilter,
+
+    -- * Request Lenses
+    deleteTrafficMirrorFilter_dryRun,
+    deleteTrafficMirrorFilter_trafficMirrorFilterId,
+
+    -- * Destructuring the Response
+    DeleteTrafficMirrorFilterResponse (..),
+    newDeleteTrafficMirrorFilterResponse,
+
+    -- * Response Lenses
+    deleteTrafficMirrorFilterResponse_trafficMirrorFilterId,
+    deleteTrafficMirrorFilterResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTrafficMirrorFilter' smart constructor.
+data DeleteTrafficMirrorFilter = DeleteTrafficMirrorFilter'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTrafficMirrorFilter_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'trafficMirrorFilterId', 'deleteTrafficMirrorFilter_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+newDeleteTrafficMirrorFilter ::
+  -- | 'trafficMirrorFilterId'
+  Prelude.Text ->
+  DeleteTrafficMirrorFilter
+newDeleteTrafficMirrorFilter pTrafficMirrorFilterId_ =
+  DeleteTrafficMirrorFilter'
+    { dryRun =
+        Prelude.Nothing,
+      trafficMirrorFilterId = pTrafficMirrorFilterId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTrafficMirrorFilter_dryRun :: Lens.Lens' DeleteTrafficMirrorFilter (Prelude.Maybe Prelude.Bool)
+deleteTrafficMirrorFilter_dryRun = Lens.lens (\DeleteTrafficMirrorFilter' {dryRun} -> dryRun) (\s@DeleteTrafficMirrorFilter' {} a -> s {dryRun = a} :: DeleteTrafficMirrorFilter)
+
+-- | The ID of the Traffic Mirror filter.
+deleteTrafficMirrorFilter_trafficMirrorFilterId :: Lens.Lens' DeleteTrafficMirrorFilter Prelude.Text
+deleteTrafficMirrorFilter_trafficMirrorFilterId = Lens.lens (\DeleteTrafficMirrorFilter' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@DeleteTrafficMirrorFilter' {} a -> s {trafficMirrorFilterId = a} :: DeleteTrafficMirrorFilter)
+
+instance Core.AWSRequest DeleteTrafficMirrorFilter where
+  type
+    AWSResponse DeleteTrafficMirrorFilter =
+      DeleteTrafficMirrorFilterResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTrafficMirrorFilterResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorFilterId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTrafficMirrorFilter where
+  hashWithSalt _salt DeleteTrafficMirrorFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+
+instance Prelude.NFData DeleteTrafficMirrorFilter where
+  rnf DeleteTrafficMirrorFilter' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+
+instance Data.ToHeaders DeleteTrafficMirrorFilter where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTrafficMirrorFilter where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTrafficMirrorFilter where
+  toQuery DeleteTrafficMirrorFilter' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteTrafficMirrorFilter" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TrafficMirrorFilterId"
+          Data.=: trafficMirrorFilterId
+      ]
+
+-- | /See:/ 'newDeleteTrafficMirrorFilterResponse' smart constructor.
+data DeleteTrafficMirrorFilterResponse = DeleteTrafficMirrorFilterResponse'
+  { -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorFilterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorFilterId', 'deleteTrafficMirrorFilterResponse_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+--
+-- 'httpStatus', 'deleteTrafficMirrorFilterResponse_httpStatus' - The response's http status code.
+newDeleteTrafficMirrorFilterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTrafficMirrorFilterResponse
+newDeleteTrafficMirrorFilterResponse pHttpStatus_ =
+  DeleteTrafficMirrorFilterResponse'
+    { trafficMirrorFilterId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Traffic Mirror filter.
+deleteTrafficMirrorFilterResponse_trafficMirrorFilterId :: Lens.Lens' DeleteTrafficMirrorFilterResponse (Prelude.Maybe Prelude.Text)
+deleteTrafficMirrorFilterResponse_trafficMirrorFilterId = Lens.lens (\DeleteTrafficMirrorFilterResponse' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@DeleteTrafficMirrorFilterResponse' {} a -> s {trafficMirrorFilterId = a} :: DeleteTrafficMirrorFilterResponse)
+
+-- | The response's http status code.
+deleteTrafficMirrorFilterResponse_httpStatus :: Lens.Lens' DeleteTrafficMirrorFilterResponse Prelude.Int
+deleteTrafficMirrorFilterResponse_httpStatus = Lens.lens (\DeleteTrafficMirrorFilterResponse' {httpStatus} -> httpStatus) (\s@DeleteTrafficMirrorFilterResponse' {} a -> s {httpStatus = a} :: DeleteTrafficMirrorFilterResponse)
+
+instance
+  Prelude.NFData
+    DeleteTrafficMirrorFilterResponse
+  where
+  rnf DeleteTrafficMirrorFilterResponse' {..} =
+    Prelude.rnf trafficMirrorFilterId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTrafficMirrorFilterRule.hs b/gen/Amazonka/EC2/DeleteTrafficMirrorFilterRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTrafficMirrorFilterRule.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTrafficMirrorFilterRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Traffic Mirror rule.
+module Amazonka.EC2.DeleteTrafficMirrorFilterRule
+  ( -- * Creating a Request
+    DeleteTrafficMirrorFilterRule (..),
+    newDeleteTrafficMirrorFilterRule,
+
+    -- * Request Lenses
+    deleteTrafficMirrorFilterRule_dryRun,
+    deleteTrafficMirrorFilterRule_trafficMirrorFilterRuleId,
+
+    -- * Destructuring the Response
+    DeleteTrafficMirrorFilterRuleResponse (..),
+    newDeleteTrafficMirrorFilterRuleResponse,
+
+    -- * Response Lenses
+    deleteTrafficMirrorFilterRuleResponse_trafficMirrorFilterRuleId,
+    deleteTrafficMirrorFilterRuleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTrafficMirrorFilterRule' smart constructor.
+data DeleteTrafficMirrorFilterRule = DeleteTrafficMirrorFilterRule'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Traffic Mirror rule.
+    trafficMirrorFilterRuleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorFilterRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTrafficMirrorFilterRule_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'trafficMirrorFilterRuleId', 'deleteTrafficMirrorFilterRule_trafficMirrorFilterRuleId' - The ID of the Traffic Mirror rule.
+newDeleteTrafficMirrorFilterRule ::
+  -- | 'trafficMirrorFilterRuleId'
+  Prelude.Text ->
+  DeleteTrafficMirrorFilterRule
+newDeleteTrafficMirrorFilterRule
+  pTrafficMirrorFilterRuleId_ =
+    DeleteTrafficMirrorFilterRule'
+      { dryRun =
+          Prelude.Nothing,
+        trafficMirrorFilterRuleId =
+          pTrafficMirrorFilterRuleId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTrafficMirrorFilterRule_dryRun :: Lens.Lens' DeleteTrafficMirrorFilterRule (Prelude.Maybe Prelude.Bool)
+deleteTrafficMirrorFilterRule_dryRun = Lens.lens (\DeleteTrafficMirrorFilterRule' {dryRun} -> dryRun) (\s@DeleteTrafficMirrorFilterRule' {} a -> s {dryRun = a} :: DeleteTrafficMirrorFilterRule)
+
+-- | The ID of the Traffic Mirror rule.
+deleteTrafficMirrorFilterRule_trafficMirrorFilterRuleId :: Lens.Lens' DeleteTrafficMirrorFilterRule Prelude.Text
+deleteTrafficMirrorFilterRule_trafficMirrorFilterRuleId = Lens.lens (\DeleteTrafficMirrorFilterRule' {trafficMirrorFilterRuleId} -> trafficMirrorFilterRuleId) (\s@DeleteTrafficMirrorFilterRule' {} a -> s {trafficMirrorFilterRuleId = a} :: DeleteTrafficMirrorFilterRule)
+
+instance
+  Core.AWSRequest
+    DeleteTrafficMirrorFilterRule
+  where
+  type
+    AWSResponse DeleteTrafficMirrorFilterRule =
+      DeleteTrafficMirrorFilterRuleResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTrafficMirrorFilterRuleResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorFilterRuleId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTrafficMirrorFilterRule
+  where
+  hashWithSalt _salt DeleteTrafficMirrorFilterRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` trafficMirrorFilterRuleId
+
+instance Prelude.NFData DeleteTrafficMirrorFilterRule where
+  rnf DeleteTrafficMirrorFilterRule' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterRuleId
+
+instance Data.ToHeaders DeleteTrafficMirrorFilterRule where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTrafficMirrorFilterRule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTrafficMirrorFilterRule where
+  toQuery DeleteTrafficMirrorFilterRule' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTrafficMirrorFilterRule" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TrafficMirrorFilterRuleId"
+          Data.=: trafficMirrorFilterRuleId
+      ]
+
+-- | /See:/ 'newDeleteTrafficMirrorFilterRuleResponse' smart constructor.
+data DeleteTrafficMirrorFilterRuleResponse = DeleteTrafficMirrorFilterRuleResponse'
+  { -- | The ID of the deleted Traffic Mirror rule.
+    trafficMirrorFilterRuleId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorFilterRuleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorFilterRuleId', 'deleteTrafficMirrorFilterRuleResponse_trafficMirrorFilterRuleId' - The ID of the deleted Traffic Mirror rule.
+--
+-- 'httpStatus', 'deleteTrafficMirrorFilterRuleResponse_httpStatus' - The response's http status code.
+newDeleteTrafficMirrorFilterRuleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTrafficMirrorFilterRuleResponse
+newDeleteTrafficMirrorFilterRuleResponse pHttpStatus_ =
+  DeleteTrafficMirrorFilterRuleResponse'
+    { trafficMirrorFilterRuleId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the deleted Traffic Mirror rule.
+deleteTrafficMirrorFilterRuleResponse_trafficMirrorFilterRuleId :: Lens.Lens' DeleteTrafficMirrorFilterRuleResponse (Prelude.Maybe Prelude.Text)
+deleteTrafficMirrorFilterRuleResponse_trafficMirrorFilterRuleId = Lens.lens (\DeleteTrafficMirrorFilterRuleResponse' {trafficMirrorFilterRuleId} -> trafficMirrorFilterRuleId) (\s@DeleteTrafficMirrorFilterRuleResponse' {} a -> s {trafficMirrorFilterRuleId = a} :: DeleteTrafficMirrorFilterRuleResponse)
+
+-- | The response's http status code.
+deleteTrafficMirrorFilterRuleResponse_httpStatus :: Lens.Lens' DeleteTrafficMirrorFilterRuleResponse Prelude.Int
+deleteTrafficMirrorFilterRuleResponse_httpStatus = Lens.lens (\DeleteTrafficMirrorFilterRuleResponse' {httpStatus} -> httpStatus) (\s@DeleteTrafficMirrorFilterRuleResponse' {} a -> s {httpStatus = a} :: DeleteTrafficMirrorFilterRuleResponse)
+
+instance
+  Prelude.NFData
+    DeleteTrafficMirrorFilterRuleResponse
+  where
+  rnf DeleteTrafficMirrorFilterRuleResponse' {..} =
+    Prelude.rnf trafficMirrorFilterRuleId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTrafficMirrorSession.hs b/gen/Amazonka/EC2/DeleteTrafficMirrorSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTrafficMirrorSession.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTrafficMirrorSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Traffic Mirror session.
+module Amazonka.EC2.DeleteTrafficMirrorSession
+  ( -- * Creating a Request
+    DeleteTrafficMirrorSession (..),
+    newDeleteTrafficMirrorSession,
+
+    -- * Request Lenses
+    deleteTrafficMirrorSession_dryRun,
+    deleteTrafficMirrorSession_trafficMirrorSessionId,
+
+    -- * Destructuring the Response
+    DeleteTrafficMirrorSessionResponse (..),
+    newDeleteTrafficMirrorSessionResponse,
+
+    -- * Response Lenses
+    deleteTrafficMirrorSessionResponse_trafficMirrorSessionId,
+    deleteTrafficMirrorSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTrafficMirrorSession' smart constructor.
+data DeleteTrafficMirrorSession = DeleteTrafficMirrorSession'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Traffic Mirror session.
+    trafficMirrorSessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTrafficMirrorSession_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'trafficMirrorSessionId', 'deleteTrafficMirrorSession_trafficMirrorSessionId' - The ID of the Traffic Mirror session.
+newDeleteTrafficMirrorSession ::
+  -- | 'trafficMirrorSessionId'
+  Prelude.Text ->
+  DeleteTrafficMirrorSession
+newDeleteTrafficMirrorSession
+  pTrafficMirrorSessionId_ =
+    DeleteTrafficMirrorSession'
+      { dryRun =
+          Prelude.Nothing,
+        trafficMirrorSessionId =
+          pTrafficMirrorSessionId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTrafficMirrorSession_dryRun :: Lens.Lens' DeleteTrafficMirrorSession (Prelude.Maybe Prelude.Bool)
+deleteTrafficMirrorSession_dryRun = Lens.lens (\DeleteTrafficMirrorSession' {dryRun} -> dryRun) (\s@DeleteTrafficMirrorSession' {} a -> s {dryRun = a} :: DeleteTrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror session.
+deleteTrafficMirrorSession_trafficMirrorSessionId :: Lens.Lens' DeleteTrafficMirrorSession Prelude.Text
+deleteTrafficMirrorSession_trafficMirrorSessionId = Lens.lens (\DeleteTrafficMirrorSession' {trafficMirrorSessionId} -> trafficMirrorSessionId) (\s@DeleteTrafficMirrorSession' {} a -> s {trafficMirrorSessionId = a} :: DeleteTrafficMirrorSession)
+
+instance Core.AWSRequest DeleteTrafficMirrorSession where
+  type
+    AWSResponse DeleteTrafficMirrorSession =
+      DeleteTrafficMirrorSessionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTrafficMirrorSessionResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorSessionId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTrafficMirrorSession where
+  hashWithSalt _salt DeleteTrafficMirrorSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` trafficMirrorSessionId
+
+instance Prelude.NFData DeleteTrafficMirrorSession where
+  rnf DeleteTrafficMirrorSession' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf trafficMirrorSessionId
+
+instance Data.ToHeaders DeleteTrafficMirrorSession where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTrafficMirrorSession where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTrafficMirrorSession where
+  toQuery DeleteTrafficMirrorSession' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteTrafficMirrorSession" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TrafficMirrorSessionId"
+          Data.=: trafficMirrorSessionId
+      ]
+
+-- | /See:/ 'newDeleteTrafficMirrorSessionResponse' smart constructor.
+data DeleteTrafficMirrorSessionResponse = DeleteTrafficMirrorSessionResponse'
+  { -- | The ID of the deleted Traffic Mirror session.
+    trafficMirrorSessionId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorSessionId', 'deleteTrafficMirrorSessionResponse_trafficMirrorSessionId' - The ID of the deleted Traffic Mirror session.
+--
+-- 'httpStatus', 'deleteTrafficMirrorSessionResponse_httpStatus' - The response's http status code.
+newDeleteTrafficMirrorSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTrafficMirrorSessionResponse
+newDeleteTrafficMirrorSessionResponse pHttpStatus_ =
+  DeleteTrafficMirrorSessionResponse'
+    { trafficMirrorSessionId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the deleted Traffic Mirror session.
+deleteTrafficMirrorSessionResponse_trafficMirrorSessionId :: Lens.Lens' DeleteTrafficMirrorSessionResponse (Prelude.Maybe Prelude.Text)
+deleteTrafficMirrorSessionResponse_trafficMirrorSessionId = Lens.lens (\DeleteTrafficMirrorSessionResponse' {trafficMirrorSessionId} -> trafficMirrorSessionId) (\s@DeleteTrafficMirrorSessionResponse' {} a -> s {trafficMirrorSessionId = a} :: DeleteTrafficMirrorSessionResponse)
+
+-- | The response's http status code.
+deleteTrafficMirrorSessionResponse_httpStatus :: Lens.Lens' DeleteTrafficMirrorSessionResponse Prelude.Int
+deleteTrafficMirrorSessionResponse_httpStatus = Lens.lens (\DeleteTrafficMirrorSessionResponse' {httpStatus} -> httpStatus) (\s@DeleteTrafficMirrorSessionResponse' {} a -> s {httpStatus = a} :: DeleteTrafficMirrorSessionResponse)
+
+instance
+  Prelude.NFData
+    DeleteTrafficMirrorSessionResponse
+  where
+  rnf DeleteTrafficMirrorSessionResponse' {..} =
+    Prelude.rnf trafficMirrorSessionId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTrafficMirrorTarget.hs b/gen/Amazonka/EC2/DeleteTrafficMirrorTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTrafficMirrorTarget.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTrafficMirrorTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Traffic Mirror target.
+--
+-- You cannot delete a Traffic Mirror target that is in use by a Traffic
+-- Mirror session.
+module Amazonka.EC2.DeleteTrafficMirrorTarget
+  ( -- * Creating a Request
+    DeleteTrafficMirrorTarget (..),
+    newDeleteTrafficMirrorTarget,
+
+    -- * Request Lenses
+    deleteTrafficMirrorTarget_dryRun,
+    deleteTrafficMirrorTarget_trafficMirrorTargetId,
+
+    -- * Destructuring the Response
+    DeleteTrafficMirrorTargetResponse (..),
+    newDeleteTrafficMirrorTargetResponse,
+
+    -- * Response Lenses
+    deleteTrafficMirrorTargetResponse_trafficMirrorTargetId,
+    deleteTrafficMirrorTargetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTrafficMirrorTarget' smart constructor.
+data DeleteTrafficMirrorTarget = DeleteTrafficMirrorTarget'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Traffic Mirror target.
+    trafficMirrorTargetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTrafficMirrorTarget_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'trafficMirrorTargetId', 'deleteTrafficMirrorTarget_trafficMirrorTargetId' - The ID of the Traffic Mirror target.
+newDeleteTrafficMirrorTarget ::
+  -- | 'trafficMirrorTargetId'
+  Prelude.Text ->
+  DeleteTrafficMirrorTarget
+newDeleteTrafficMirrorTarget pTrafficMirrorTargetId_ =
+  DeleteTrafficMirrorTarget'
+    { dryRun =
+        Prelude.Nothing,
+      trafficMirrorTargetId = pTrafficMirrorTargetId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTrafficMirrorTarget_dryRun :: Lens.Lens' DeleteTrafficMirrorTarget (Prelude.Maybe Prelude.Bool)
+deleteTrafficMirrorTarget_dryRun = Lens.lens (\DeleteTrafficMirrorTarget' {dryRun} -> dryRun) (\s@DeleteTrafficMirrorTarget' {} a -> s {dryRun = a} :: DeleteTrafficMirrorTarget)
+
+-- | The ID of the Traffic Mirror target.
+deleteTrafficMirrorTarget_trafficMirrorTargetId :: Lens.Lens' DeleteTrafficMirrorTarget Prelude.Text
+deleteTrafficMirrorTarget_trafficMirrorTargetId = Lens.lens (\DeleteTrafficMirrorTarget' {trafficMirrorTargetId} -> trafficMirrorTargetId) (\s@DeleteTrafficMirrorTarget' {} a -> s {trafficMirrorTargetId = a} :: DeleteTrafficMirrorTarget)
+
+instance Core.AWSRequest DeleteTrafficMirrorTarget where
+  type
+    AWSResponse DeleteTrafficMirrorTarget =
+      DeleteTrafficMirrorTargetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTrafficMirrorTargetResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorTargetId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTrafficMirrorTarget where
+  hashWithSalt _salt DeleteTrafficMirrorTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` trafficMirrorTargetId
+
+instance Prelude.NFData DeleteTrafficMirrorTarget where
+  rnf DeleteTrafficMirrorTarget' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf trafficMirrorTargetId
+
+instance Data.ToHeaders DeleteTrafficMirrorTarget where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTrafficMirrorTarget where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTrafficMirrorTarget where
+  toQuery DeleteTrafficMirrorTarget' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteTrafficMirrorTarget" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TrafficMirrorTargetId"
+          Data.=: trafficMirrorTargetId
+      ]
+
+-- | /See:/ 'newDeleteTrafficMirrorTargetResponse' smart constructor.
+data DeleteTrafficMirrorTargetResponse = DeleteTrafficMirrorTargetResponse'
+  { -- | The ID of the deleted Traffic Mirror target.
+    trafficMirrorTargetId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTrafficMirrorTargetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorTargetId', 'deleteTrafficMirrorTargetResponse_trafficMirrorTargetId' - The ID of the deleted Traffic Mirror target.
+--
+-- 'httpStatus', 'deleteTrafficMirrorTargetResponse_httpStatus' - The response's http status code.
+newDeleteTrafficMirrorTargetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTrafficMirrorTargetResponse
+newDeleteTrafficMirrorTargetResponse pHttpStatus_ =
+  DeleteTrafficMirrorTargetResponse'
+    { trafficMirrorTargetId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the deleted Traffic Mirror target.
+deleteTrafficMirrorTargetResponse_trafficMirrorTargetId :: Lens.Lens' DeleteTrafficMirrorTargetResponse (Prelude.Maybe Prelude.Text)
+deleteTrafficMirrorTargetResponse_trafficMirrorTargetId = Lens.lens (\DeleteTrafficMirrorTargetResponse' {trafficMirrorTargetId} -> trafficMirrorTargetId) (\s@DeleteTrafficMirrorTargetResponse' {} a -> s {trafficMirrorTargetId = a} :: DeleteTrafficMirrorTargetResponse)
+
+-- | The response's http status code.
+deleteTrafficMirrorTargetResponse_httpStatus :: Lens.Lens' DeleteTrafficMirrorTargetResponse Prelude.Int
+deleteTrafficMirrorTargetResponse_httpStatus = Lens.lens (\DeleteTrafficMirrorTargetResponse' {httpStatus} -> httpStatus) (\s@DeleteTrafficMirrorTargetResponse' {} a -> s {httpStatus = a} :: DeleteTrafficMirrorTargetResponse)
+
+instance
+  Prelude.NFData
+    DeleteTrafficMirrorTargetResponse
+  where
+  rnf DeleteTrafficMirrorTargetResponse' {..} =
+    Prelude.rnf trafficMirrorTargetId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGateway.hs b/gen/Amazonka/EC2/DeleteTransitGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGateway.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified transit gateway.
+module Amazonka.EC2.DeleteTransitGateway
+  ( -- * Creating a Request
+    DeleteTransitGateway (..),
+    newDeleteTransitGateway,
+
+    -- * Request Lenses
+    deleteTransitGateway_dryRun,
+    deleteTransitGateway_transitGatewayId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayResponse (..),
+    newDeleteTransitGatewayResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayResponse_transitGateway,
+    deleteTransitGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGateway' smart constructor.
+data DeleteTransitGateway = DeleteTransitGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayId', 'deleteTransitGateway_transitGatewayId' - The ID of the transit gateway.
+newDeleteTransitGateway ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  DeleteTransitGateway
+newDeleteTransitGateway pTransitGatewayId_ =
+  DeleteTransitGateway'
+    { dryRun = Prelude.Nothing,
+      transitGatewayId = pTransitGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGateway_dryRun :: Lens.Lens' DeleteTransitGateway (Prelude.Maybe Prelude.Bool)
+deleteTransitGateway_dryRun = Lens.lens (\DeleteTransitGateway' {dryRun} -> dryRun) (\s@DeleteTransitGateway' {} a -> s {dryRun = a} :: DeleteTransitGateway)
+
+-- | The ID of the transit gateway.
+deleteTransitGateway_transitGatewayId :: Lens.Lens' DeleteTransitGateway Prelude.Text
+deleteTransitGateway_transitGatewayId = Lens.lens (\DeleteTransitGateway' {transitGatewayId} -> transitGatewayId) (\s@DeleteTransitGateway' {} a -> s {transitGatewayId = a} :: DeleteTransitGateway)
+
+instance Core.AWSRequest DeleteTransitGateway where
+  type
+    AWSResponse DeleteTransitGateway =
+      DeleteTransitGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayResponse'
+            Prelude.<$> (x Data..@? "transitGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTransitGateway where
+  hashWithSalt _salt DeleteTransitGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` transitGatewayId
+
+instance Prelude.NFData DeleteTransitGateway where
+  rnf DeleteTransitGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayId
+
+instance Data.ToHeaders DeleteTransitGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTransitGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTransitGateway where
+  toQuery DeleteTransitGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteTransitGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayId" Data.=: transitGatewayId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayResponse' smart constructor.
+data DeleteTransitGatewayResponse = DeleteTransitGatewayResponse'
+  { -- | Information about the deleted transit gateway.
+    transitGateway :: Prelude.Maybe TransitGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGateway', 'deleteTransitGatewayResponse_transitGateway' - Information about the deleted transit gateway.
+--
+-- 'httpStatus', 'deleteTransitGatewayResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayResponse
+newDeleteTransitGatewayResponse pHttpStatus_ =
+  DeleteTransitGatewayResponse'
+    { transitGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted transit gateway.
+deleteTransitGatewayResponse_transitGateway :: Lens.Lens' DeleteTransitGatewayResponse (Prelude.Maybe TransitGateway)
+deleteTransitGatewayResponse_transitGateway = Lens.lens (\DeleteTransitGatewayResponse' {transitGateway} -> transitGateway) (\s@DeleteTransitGatewayResponse' {} a -> s {transitGateway = a} :: DeleteTransitGatewayResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayResponse Prelude.Int
+deleteTransitGatewayResponse_httpStatus = Lens.lens (\DeleteTransitGatewayResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayResponse)
+
+instance Prelude.NFData DeleteTransitGatewayResponse where
+  rnf DeleteTransitGatewayResponse' {..} =
+    Prelude.rnf transitGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayConnect.hs b/gen/Amazonka/EC2/DeleteTransitGatewayConnect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayConnect.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayConnect
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Connect attachment. You must first delete any
+-- Connect peers for the attachment.
+module Amazonka.EC2.DeleteTransitGatewayConnect
+  ( -- * Creating a Request
+    DeleteTransitGatewayConnect (..),
+    newDeleteTransitGatewayConnect,
+
+    -- * Request Lenses
+    deleteTransitGatewayConnect_dryRun,
+    deleteTransitGatewayConnect_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayConnectResponse (..),
+    newDeleteTransitGatewayConnectResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayConnectResponse_transitGatewayConnect,
+    deleteTransitGatewayConnectResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayConnect' smart constructor.
+data DeleteTransitGatewayConnect = DeleteTransitGatewayConnect'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Connect attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayConnect' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayConnect_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'deleteTransitGatewayConnect_transitGatewayAttachmentId' - The ID of the Connect attachment.
+newDeleteTransitGatewayConnect ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  DeleteTransitGatewayConnect
+newDeleteTransitGatewayConnect
+  pTransitGatewayAttachmentId_ =
+    DeleteTransitGatewayConnect'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayConnect_dryRun :: Lens.Lens' DeleteTransitGatewayConnect (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayConnect_dryRun = Lens.lens (\DeleteTransitGatewayConnect' {dryRun} -> dryRun) (\s@DeleteTransitGatewayConnect' {} a -> s {dryRun = a} :: DeleteTransitGatewayConnect)
+
+-- | The ID of the Connect attachment.
+deleteTransitGatewayConnect_transitGatewayAttachmentId :: Lens.Lens' DeleteTransitGatewayConnect Prelude.Text
+deleteTransitGatewayConnect_transitGatewayAttachmentId = Lens.lens (\DeleteTransitGatewayConnect' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DeleteTransitGatewayConnect' {} a -> s {transitGatewayAttachmentId = a} :: DeleteTransitGatewayConnect)
+
+instance Core.AWSRequest DeleteTransitGatewayConnect where
+  type
+    AWSResponse DeleteTransitGatewayConnect =
+      DeleteTransitGatewayConnectResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayConnectResponse'
+            Prelude.<$> (x Data..@? "transitGatewayConnect")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTransitGatewayConnect where
+  hashWithSalt _salt DeleteTransitGatewayConnect' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance Prelude.NFData DeleteTransitGatewayConnect where
+  rnf DeleteTransitGatewayConnect' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance Data.ToHeaders DeleteTransitGatewayConnect where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTransitGatewayConnect where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTransitGatewayConnect where
+  toQuery DeleteTransitGatewayConnect' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayConnect" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayConnectResponse' smart constructor.
+data DeleteTransitGatewayConnectResponse = DeleteTransitGatewayConnectResponse'
+  { -- | Information about the deleted Connect attachment.
+    transitGatewayConnect :: Prelude.Maybe TransitGatewayConnect,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayConnectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayConnect', 'deleteTransitGatewayConnectResponse_transitGatewayConnect' - Information about the deleted Connect attachment.
+--
+-- 'httpStatus', 'deleteTransitGatewayConnectResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayConnectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayConnectResponse
+newDeleteTransitGatewayConnectResponse pHttpStatus_ =
+  DeleteTransitGatewayConnectResponse'
+    { transitGatewayConnect =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the deleted Connect attachment.
+deleteTransitGatewayConnectResponse_transitGatewayConnect :: Lens.Lens' DeleteTransitGatewayConnectResponse (Prelude.Maybe TransitGatewayConnect)
+deleteTransitGatewayConnectResponse_transitGatewayConnect = Lens.lens (\DeleteTransitGatewayConnectResponse' {transitGatewayConnect} -> transitGatewayConnect) (\s@DeleteTransitGatewayConnectResponse' {} a -> s {transitGatewayConnect = a} :: DeleteTransitGatewayConnectResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayConnectResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayConnectResponse Prelude.Int
+deleteTransitGatewayConnectResponse_httpStatus = Lens.lens (\DeleteTransitGatewayConnectResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayConnectResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayConnectResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayConnectResponse
+  where
+  rnf DeleteTransitGatewayConnectResponse' {..} =
+    Prelude.rnf transitGatewayConnect
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayConnectPeer.hs b/gen/Amazonka/EC2/DeleteTransitGatewayConnectPeer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayConnectPeer.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayConnectPeer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Connect peer.
+module Amazonka.EC2.DeleteTransitGatewayConnectPeer
+  ( -- * Creating a Request
+    DeleteTransitGatewayConnectPeer (..),
+    newDeleteTransitGatewayConnectPeer,
+
+    -- * Request Lenses
+    deleteTransitGatewayConnectPeer_dryRun,
+    deleteTransitGatewayConnectPeer_transitGatewayConnectPeerId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayConnectPeerResponse (..),
+    newDeleteTransitGatewayConnectPeerResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayConnectPeerResponse_transitGatewayConnectPeer,
+    deleteTransitGatewayConnectPeerResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayConnectPeer' smart constructor.
+data DeleteTransitGatewayConnectPeer = DeleteTransitGatewayConnectPeer'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Connect peer.
+    transitGatewayConnectPeerId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayConnectPeer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayConnectPeer_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayConnectPeerId', 'deleteTransitGatewayConnectPeer_transitGatewayConnectPeerId' - The ID of the Connect peer.
+newDeleteTransitGatewayConnectPeer ::
+  -- | 'transitGatewayConnectPeerId'
+  Prelude.Text ->
+  DeleteTransitGatewayConnectPeer
+newDeleteTransitGatewayConnectPeer
+  pTransitGatewayConnectPeerId_ =
+    DeleteTransitGatewayConnectPeer'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayConnectPeerId =
+          pTransitGatewayConnectPeerId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayConnectPeer_dryRun :: Lens.Lens' DeleteTransitGatewayConnectPeer (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayConnectPeer_dryRun = Lens.lens (\DeleteTransitGatewayConnectPeer' {dryRun} -> dryRun) (\s@DeleteTransitGatewayConnectPeer' {} a -> s {dryRun = a} :: DeleteTransitGatewayConnectPeer)
+
+-- | The ID of the Connect peer.
+deleteTransitGatewayConnectPeer_transitGatewayConnectPeerId :: Lens.Lens' DeleteTransitGatewayConnectPeer Prelude.Text
+deleteTransitGatewayConnectPeer_transitGatewayConnectPeerId = Lens.lens (\DeleteTransitGatewayConnectPeer' {transitGatewayConnectPeerId} -> transitGatewayConnectPeerId) (\s@DeleteTransitGatewayConnectPeer' {} a -> s {transitGatewayConnectPeerId = a} :: DeleteTransitGatewayConnectPeer)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayConnectPeer
+  where
+  type
+    AWSResponse DeleteTransitGatewayConnectPeer =
+      DeleteTransitGatewayConnectPeerResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayConnectPeerResponse'
+            Prelude.<$> (x Data..@? "transitGatewayConnectPeer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayConnectPeer
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayConnectPeer' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayConnectPeerId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayConnectPeer
+  where
+  rnf DeleteTransitGatewayConnectPeer' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayConnectPeerId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayConnectPeer
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTransitGatewayConnectPeer where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTransitGatewayConnectPeer where
+  toQuery DeleteTransitGatewayConnectPeer' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayConnectPeer" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayConnectPeerId"
+          Data.=: transitGatewayConnectPeerId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayConnectPeerResponse' smart constructor.
+data DeleteTransitGatewayConnectPeerResponse = DeleteTransitGatewayConnectPeerResponse'
+  { -- | Information about the deleted Connect peer.
+    transitGatewayConnectPeer :: Prelude.Maybe TransitGatewayConnectPeer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayConnectPeerResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayConnectPeer', 'deleteTransitGatewayConnectPeerResponse_transitGatewayConnectPeer' - Information about the deleted Connect peer.
+--
+-- 'httpStatus', 'deleteTransitGatewayConnectPeerResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayConnectPeerResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayConnectPeerResponse
+newDeleteTransitGatewayConnectPeerResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayConnectPeerResponse'
+      { transitGatewayConnectPeer =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the deleted Connect peer.
+deleteTransitGatewayConnectPeerResponse_transitGatewayConnectPeer :: Lens.Lens' DeleteTransitGatewayConnectPeerResponse (Prelude.Maybe TransitGatewayConnectPeer)
+deleteTransitGatewayConnectPeerResponse_transitGatewayConnectPeer = Lens.lens (\DeleteTransitGatewayConnectPeerResponse' {transitGatewayConnectPeer} -> transitGatewayConnectPeer) (\s@DeleteTransitGatewayConnectPeerResponse' {} a -> s {transitGatewayConnectPeer = a} :: DeleteTransitGatewayConnectPeerResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayConnectPeerResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayConnectPeerResponse Prelude.Int
+deleteTransitGatewayConnectPeerResponse_httpStatus = Lens.lens (\DeleteTransitGatewayConnectPeerResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayConnectPeerResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayConnectPeerResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayConnectPeerResponse
+  where
+  rnf DeleteTransitGatewayConnectPeerResponse' {..} =
+    Prelude.rnf transitGatewayConnectPeer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayMulticastDomain.hs b/gen/Amazonka/EC2/DeleteTransitGatewayMulticastDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayMulticastDomain.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayMulticastDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified transit gateway multicast domain.
+module Amazonka.EC2.DeleteTransitGatewayMulticastDomain
+  ( -- * Creating a Request
+    DeleteTransitGatewayMulticastDomain (..),
+    newDeleteTransitGatewayMulticastDomain,
+
+    -- * Request Lenses
+    deleteTransitGatewayMulticastDomain_dryRun,
+    deleteTransitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayMulticastDomainResponse (..),
+    newDeleteTransitGatewayMulticastDomainResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain,
+    deleteTransitGatewayMulticastDomainResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayMulticastDomain' smart constructor.
+data DeleteTransitGatewayMulticastDomain = DeleteTransitGatewayMulticastDomain'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayMulticastDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayMulticastDomain_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayMulticastDomainId', 'deleteTransitGatewayMulticastDomain_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newDeleteTransitGatewayMulticastDomain ::
+  -- | 'transitGatewayMulticastDomainId'
+  Prelude.Text ->
+  DeleteTransitGatewayMulticastDomain
+newDeleteTransitGatewayMulticastDomain
+  pTransitGatewayMulticastDomainId_ =
+    DeleteTransitGatewayMulticastDomain'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayMulticastDomainId =
+          pTransitGatewayMulticastDomainId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayMulticastDomain_dryRun :: Lens.Lens' DeleteTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayMulticastDomain_dryRun = Lens.lens (\DeleteTransitGatewayMulticastDomain' {dryRun} -> dryRun) (\s@DeleteTransitGatewayMulticastDomain' {} a -> s {dryRun = a} :: DeleteTransitGatewayMulticastDomain)
+
+-- | The ID of the transit gateway multicast domain.
+deleteTransitGatewayMulticastDomain_transitGatewayMulticastDomainId :: Lens.Lens' DeleteTransitGatewayMulticastDomain Prelude.Text
+deleteTransitGatewayMulticastDomain_transitGatewayMulticastDomainId = Lens.lens (\DeleteTransitGatewayMulticastDomain' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@DeleteTransitGatewayMulticastDomain' {} a -> s {transitGatewayMulticastDomainId = a} :: DeleteTransitGatewayMulticastDomain)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayMulticastDomain
+  where
+  type
+    AWSResponse DeleteTransitGatewayMulticastDomain =
+      DeleteTransitGatewayMulticastDomainResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayMulticastDomainResponse'
+            Prelude.<$> (x Data..@? "transitGatewayMulticastDomain")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayMulticastDomain
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayMulticastDomain' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayMulticastDomain
+  where
+  rnf DeleteTransitGatewayMulticastDomain' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayMulticastDomain
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteTransitGatewayMulticastDomain
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteTransitGatewayMulticastDomain
+  where
+  toQuery DeleteTransitGatewayMulticastDomain' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayMulticastDomain" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayMulticastDomainId"
+          Data.=: transitGatewayMulticastDomainId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayMulticastDomainResponse' smart constructor.
+data DeleteTransitGatewayMulticastDomainResponse = DeleteTransitGatewayMulticastDomainResponse'
+  { -- | Information about the deleted transit gateway multicast domain.
+    transitGatewayMulticastDomain :: Prelude.Maybe TransitGatewayMulticastDomain,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayMulticastDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayMulticastDomain', 'deleteTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain' - Information about the deleted transit gateway multicast domain.
+--
+-- 'httpStatus', 'deleteTransitGatewayMulticastDomainResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayMulticastDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayMulticastDomainResponse
+newDeleteTransitGatewayMulticastDomainResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayMulticastDomainResponse'
+      { transitGatewayMulticastDomain =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the deleted transit gateway multicast domain.
+deleteTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain :: Lens.Lens' DeleteTransitGatewayMulticastDomainResponse (Prelude.Maybe TransitGatewayMulticastDomain)
+deleteTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain = Lens.lens (\DeleteTransitGatewayMulticastDomainResponse' {transitGatewayMulticastDomain} -> transitGatewayMulticastDomain) (\s@DeleteTransitGatewayMulticastDomainResponse' {} a -> s {transitGatewayMulticastDomain = a} :: DeleteTransitGatewayMulticastDomainResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayMulticastDomainResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayMulticastDomainResponse Prelude.Int
+deleteTransitGatewayMulticastDomainResponse_httpStatus = Lens.lens (\DeleteTransitGatewayMulticastDomainResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayMulticastDomainResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayMulticastDomainResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayMulticastDomainResponse
+  where
+  rnf DeleteTransitGatewayMulticastDomainResponse' {..} =
+    Prelude.rnf transitGatewayMulticastDomain
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayPeeringAttachment.hs b/gen/Amazonka/EC2/DeleteTransitGatewayPeeringAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayPeeringAttachment.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayPeeringAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a transit gateway peering attachment.
+module Amazonka.EC2.DeleteTransitGatewayPeeringAttachment
+  ( -- * Creating a Request
+    DeleteTransitGatewayPeeringAttachment (..),
+    newDeleteTransitGatewayPeeringAttachment,
+
+    -- * Request Lenses
+    deleteTransitGatewayPeeringAttachment_dryRun,
+    deleteTransitGatewayPeeringAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayPeeringAttachmentResponse (..),
+    newDeleteTransitGatewayPeeringAttachmentResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    deleteTransitGatewayPeeringAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayPeeringAttachment' smart constructor.
+data DeleteTransitGatewayPeeringAttachment = DeleteTransitGatewayPeeringAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway peering attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayPeeringAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayPeeringAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'deleteTransitGatewayPeeringAttachment_transitGatewayAttachmentId' - The ID of the transit gateway peering attachment.
+newDeleteTransitGatewayPeeringAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  DeleteTransitGatewayPeeringAttachment
+newDeleteTransitGatewayPeeringAttachment
+  pTransitGatewayAttachmentId_ =
+    DeleteTransitGatewayPeeringAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayPeeringAttachment_dryRun :: Lens.Lens' DeleteTransitGatewayPeeringAttachment (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayPeeringAttachment_dryRun = Lens.lens (\DeleteTransitGatewayPeeringAttachment' {dryRun} -> dryRun) (\s@DeleteTransitGatewayPeeringAttachment' {} a -> s {dryRun = a} :: DeleteTransitGatewayPeeringAttachment)
+
+-- | The ID of the transit gateway peering attachment.
+deleteTransitGatewayPeeringAttachment_transitGatewayAttachmentId :: Lens.Lens' DeleteTransitGatewayPeeringAttachment Prelude.Text
+deleteTransitGatewayPeeringAttachment_transitGatewayAttachmentId = Lens.lens (\DeleteTransitGatewayPeeringAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DeleteTransitGatewayPeeringAttachment' {} a -> s {transitGatewayAttachmentId = a} :: DeleteTransitGatewayPeeringAttachment)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayPeeringAttachment
+  where
+  type
+    AWSResponse
+      DeleteTransitGatewayPeeringAttachment =
+      DeleteTransitGatewayPeeringAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayPeeringAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPeeringAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayPeeringAttachment
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayPeeringAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayPeeringAttachment
+  where
+  rnf DeleteTransitGatewayPeeringAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayPeeringAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteTransitGatewayPeeringAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteTransitGatewayPeeringAttachment
+  where
+  toQuery DeleteTransitGatewayPeeringAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayPeeringAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayPeeringAttachmentResponse' smart constructor.
+data DeleteTransitGatewayPeeringAttachmentResponse = DeleteTransitGatewayPeeringAttachmentResponse'
+  { -- | The transit gateway peering attachment.
+    transitGatewayPeeringAttachment :: Prelude.Maybe TransitGatewayPeeringAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayPeeringAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPeeringAttachment', 'deleteTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment' - The transit gateway peering attachment.
+--
+-- 'httpStatus', 'deleteTransitGatewayPeeringAttachmentResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayPeeringAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayPeeringAttachmentResponse
+newDeleteTransitGatewayPeeringAttachmentResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayPeeringAttachmentResponse'
+      { transitGatewayPeeringAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The transit gateway peering attachment.
+deleteTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment :: Lens.Lens' DeleteTransitGatewayPeeringAttachmentResponse (Prelude.Maybe TransitGatewayPeeringAttachment)
+deleteTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment = Lens.lens (\DeleteTransitGatewayPeeringAttachmentResponse' {transitGatewayPeeringAttachment} -> transitGatewayPeeringAttachment) (\s@DeleteTransitGatewayPeeringAttachmentResponse' {} a -> s {transitGatewayPeeringAttachment = a} :: DeleteTransitGatewayPeeringAttachmentResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayPeeringAttachmentResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayPeeringAttachmentResponse Prelude.Int
+deleteTransitGatewayPeeringAttachmentResponse_httpStatus = Lens.lens (\DeleteTransitGatewayPeeringAttachmentResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayPeeringAttachmentResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayPeeringAttachmentResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayPeeringAttachmentResponse
+  where
+  rnf
+    DeleteTransitGatewayPeeringAttachmentResponse' {..} =
+      Prelude.rnf transitGatewayPeeringAttachment
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayPolicyTable.hs b/gen/Amazonka/EC2/DeleteTransitGatewayPolicyTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayPolicyTable.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayPolicyTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified transit gateway policy table.
+module Amazonka.EC2.DeleteTransitGatewayPolicyTable
+  ( -- * Creating a Request
+    DeleteTransitGatewayPolicyTable (..),
+    newDeleteTransitGatewayPolicyTable,
+
+    -- * Request Lenses
+    deleteTransitGatewayPolicyTable_dryRun,
+    deleteTransitGatewayPolicyTable_transitGatewayPolicyTableId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayPolicyTableResponse (..),
+    newDeleteTransitGatewayPolicyTableResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayPolicyTableResponse_transitGatewayPolicyTable,
+    deleteTransitGatewayPolicyTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayPolicyTable' smart constructor.
+data DeleteTransitGatewayPolicyTable = DeleteTransitGatewayPolicyTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The transit gateway policy table to delete.
+    transitGatewayPolicyTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayPolicyTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayPolicyTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayPolicyTableId', 'deleteTransitGatewayPolicyTable_transitGatewayPolicyTableId' - The transit gateway policy table to delete.
+newDeleteTransitGatewayPolicyTable ::
+  -- | 'transitGatewayPolicyTableId'
+  Prelude.Text ->
+  DeleteTransitGatewayPolicyTable
+newDeleteTransitGatewayPolicyTable
+  pTransitGatewayPolicyTableId_ =
+    DeleteTransitGatewayPolicyTable'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayPolicyTableId =
+          pTransitGatewayPolicyTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayPolicyTable_dryRun :: Lens.Lens' DeleteTransitGatewayPolicyTable (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayPolicyTable_dryRun = Lens.lens (\DeleteTransitGatewayPolicyTable' {dryRun} -> dryRun) (\s@DeleteTransitGatewayPolicyTable' {} a -> s {dryRun = a} :: DeleteTransitGatewayPolicyTable)
+
+-- | The transit gateway policy table to delete.
+deleteTransitGatewayPolicyTable_transitGatewayPolicyTableId :: Lens.Lens' DeleteTransitGatewayPolicyTable Prelude.Text
+deleteTransitGatewayPolicyTable_transitGatewayPolicyTableId = Lens.lens (\DeleteTransitGatewayPolicyTable' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@DeleteTransitGatewayPolicyTable' {} a -> s {transitGatewayPolicyTableId = a} :: DeleteTransitGatewayPolicyTable)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayPolicyTable
+  where
+  type
+    AWSResponse DeleteTransitGatewayPolicyTable =
+      DeleteTransitGatewayPolicyTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayPolicyTableResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPolicyTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayPolicyTable
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayPolicyTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayPolicyTableId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayPolicyTable
+  where
+  rnf DeleteTransitGatewayPolicyTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayPolicyTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTransitGatewayPolicyTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTransitGatewayPolicyTable where
+  toQuery DeleteTransitGatewayPolicyTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayPolicyTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayPolicyTableId"
+          Data.=: transitGatewayPolicyTableId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayPolicyTableResponse' smart constructor.
+data DeleteTransitGatewayPolicyTableResponse = DeleteTransitGatewayPolicyTableResponse'
+  { -- | Provides details about the deleted transit gateway policy table.
+    transitGatewayPolicyTable :: Prelude.Maybe TransitGatewayPolicyTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayPolicyTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPolicyTable', 'deleteTransitGatewayPolicyTableResponse_transitGatewayPolicyTable' - Provides details about the deleted transit gateway policy table.
+--
+-- 'httpStatus', 'deleteTransitGatewayPolicyTableResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayPolicyTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayPolicyTableResponse
+newDeleteTransitGatewayPolicyTableResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayPolicyTableResponse'
+      { transitGatewayPolicyTable =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Provides details about the deleted transit gateway policy table.
+deleteTransitGatewayPolicyTableResponse_transitGatewayPolicyTable :: Lens.Lens' DeleteTransitGatewayPolicyTableResponse (Prelude.Maybe TransitGatewayPolicyTable)
+deleteTransitGatewayPolicyTableResponse_transitGatewayPolicyTable = Lens.lens (\DeleteTransitGatewayPolicyTableResponse' {transitGatewayPolicyTable} -> transitGatewayPolicyTable) (\s@DeleteTransitGatewayPolicyTableResponse' {} a -> s {transitGatewayPolicyTable = a} :: DeleteTransitGatewayPolicyTableResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayPolicyTableResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayPolicyTableResponse Prelude.Int
+deleteTransitGatewayPolicyTableResponse_httpStatus = Lens.lens (\DeleteTransitGatewayPolicyTableResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayPolicyTableResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayPolicyTableResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayPolicyTableResponse
+  where
+  rnf DeleteTransitGatewayPolicyTableResponse' {..} =
+    Prelude.rnf transitGatewayPolicyTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayPrefixListReference.hs b/gen/Amazonka/EC2/DeleteTransitGatewayPrefixListReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayPrefixListReference.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayPrefixListReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a reference (route) to a prefix list in a specified transit
+-- gateway route table.
+module Amazonka.EC2.DeleteTransitGatewayPrefixListReference
+  ( -- * Creating a Request
+    DeleteTransitGatewayPrefixListReference (..),
+    newDeleteTransitGatewayPrefixListReference,
+
+    -- * Request Lenses
+    deleteTransitGatewayPrefixListReference_dryRun,
+    deleteTransitGatewayPrefixListReference_transitGatewayRouteTableId,
+    deleteTransitGatewayPrefixListReference_prefixListId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayPrefixListReferenceResponse (..),
+    newDeleteTransitGatewayPrefixListReferenceResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference,
+    deleteTransitGatewayPrefixListReferenceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayPrefixListReference' smart constructor.
+data DeleteTransitGatewayPrefixListReference = DeleteTransitGatewayPrefixListReference'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayPrefixListReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayPrefixListReference_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayRouteTableId', 'deleteTransitGatewayPrefixListReference_transitGatewayRouteTableId' - The ID of the route table.
+--
+-- 'prefixListId', 'deleteTransitGatewayPrefixListReference_prefixListId' - The ID of the prefix list.
+newDeleteTransitGatewayPrefixListReference ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'prefixListId'
+  Prelude.Text ->
+  DeleteTransitGatewayPrefixListReference
+newDeleteTransitGatewayPrefixListReference
+  pTransitGatewayRouteTableId_
+  pPrefixListId_ =
+    DeleteTransitGatewayPrefixListReference'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        prefixListId = pPrefixListId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayPrefixListReference_dryRun :: Lens.Lens' DeleteTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayPrefixListReference_dryRun = Lens.lens (\DeleteTransitGatewayPrefixListReference' {dryRun} -> dryRun) (\s@DeleteTransitGatewayPrefixListReference' {} a -> s {dryRun = a} :: DeleteTransitGatewayPrefixListReference)
+
+-- | The ID of the route table.
+deleteTransitGatewayPrefixListReference_transitGatewayRouteTableId :: Lens.Lens' DeleteTransitGatewayPrefixListReference Prelude.Text
+deleteTransitGatewayPrefixListReference_transitGatewayRouteTableId = Lens.lens (\DeleteTransitGatewayPrefixListReference' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@DeleteTransitGatewayPrefixListReference' {} a -> s {transitGatewayRouteTableId = a} :: DeleteTransitGatewayPrefixListReference)
+
+-- | The ID of the prefix list.
+deleteTransitGatewayPrefixListReference_prefixListId :: Lens.Lens' DeleteTransitGatewayPrefixListReference Prelude.Text
+deleteTransitGatewayPrefixListReference_prefixListId = Lens.lens (\DeleteTransitGatewayPrefixListReference' {prefixListId} -> prefixListId) (\s@DeleteTransitGatewayPrefixListReference' {} a -> s {prefixListId = a} :: DeleteTransitGatewayPrefixListReference)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayPrefixListReference
+  where
+  type
+    AWSResponse
+      DeleteTransitGatewayPrefixListReference =
+      DeleteTransitGatewayPrefixListReferenceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayPrefixListReferenceResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPrefixListReference")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayPrefixListReference
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayPrefixListReference' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+        `Prelude.hashWithSalt` prefixListId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayPrefixListReference
+  where
+  rnf DeleteTransitGatewayPrefixListReference' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayPrefixListReference
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteTransitGatewayPrefixListReference
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteTransitGatewayPrefixListReference
+  where
+  toQuery DeleteTransitGatewayPrefixListReference' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayPrefixListReference" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayPrefixListReferenceResponse' smart constructor.
+data DeleteTransitGatewayPrefixListReferenceResponse = DeleteTransitGatewayPrefixListReferenceResponse'
+  { -- | Information about the deleted prefix list reference.
+    transitGatewayPrefixListReference :: Prelude.Maybe TransitGatewayPrefixListReference,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayPrefixListReferenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPrefixListReference', 'deleteTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference' - Information about the deleted prefix list reference.
+--
+-- 'httpStatus', 'deleteTransitGatewayPrefixListReferenceResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayPrefixListReferenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayPrefixListReferenceResponse
+newDeleteTransitGatewayPrefixListReferenceResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayPrefixListReferenceResponse'
+      { transitGatewayPrefixListReference =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the deleted prefix list reference.
+deleteTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference :: Lens.Lens' DeleteTransitGatewayPrefixListReferenceResponse (Prelude.Maybe TransitGatewayPrefixListReference)
+deleteTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference = Lens.lens (\DeleteTransitGatewayPrefixListReferenceResponse' {transitGatewayPrefixListReference} -> transitGatewayPrefixListReference) (\s@DeleteTransitGatewayPrefixListReferenceResponse' {} a -> s {transitGatewayPrefixListReference = a} :: DeleteTransitGatewayPrefixListReferenceResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayPrefixListReferenceResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayPrefixListReferenceResponse Prelude.Int
+deleteTransitGatewayPrefixListReferenceResponse_httpStatus = Lens.lens (\DeleteTransitGatewayPrefixListReferenceResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayPrefixListReferenceResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayPrefixListReferenceResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayPrefixListReferenceResponse
+  where
+  rnf
+    DeleteTransitGatewayPrefixListReferenceResponse' {..} =
+      Prelude.rnf transitGatewayPrefixListReference
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayRoute.hs b/gen/Amazonka/EC2/DeleteTransitGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayRoute.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified route from the specified transit gateway route
+-- table.
+module Amazonka.EC2.DeleteTransitGatewayRoute
+  ( -- * Creating a Request
+    DeleteTransitGatewayRoute (..),
+    newDeleteTransitGatewayRoute,
+
+    -- * Request Lenses
+    deleteTransitGatewayRoute_dryRun,
+    deleteTransitGatewayRoute_transitGatewayRouteTableId,
+    deleteTransitGatewayRoute_destinationCidrBlock,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayRouteResponse (..),
+    newDeleteTransitGatewayRouteResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayRouteResponse_route,
+    deleteTransitGatewayRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayRoute' smart constructor.
+data DeleteTransitGatewayRoute = DeleteTransitGatewayRoute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The CIDR range for the route. This must match the CIDR for the route
+    -- exactly.
+    destinationCidrBlock :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayRouteTableId', 'deleteTransitGatewayRoute_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'destinationCidrBlock', 'deleteTransitGatewayRoute_destinationCidrBlock' - The CIDR range for the route. This must match the CIDR for the route
+-- exactly.
+newDeleteTransitGatewayRoute ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  DeleteTransitGatewayRoute
+newDeleteTransitGatewayRoute
+  pTransitGatewayRouteTableId_
+  pDestinationCidrBlock_ =
+    DeleteTransitGatewayRoute'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        destinationCidrBlock = pDestinationCidrBlock_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayRoute_dryRun :: Lens.Lens' DeleteTransitGatewayRoute (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayRoute_dryRun = Lens.lens (\DeleteTransitGatewayRoute' {dryRun} -> dryRun) (\s@DeleteTransitGatewayRoute' {} a -> s {dryRun = a} :: DeleteTransitGatewayRoute)
+
+-- | The ID of the transit gateway route table.
+deleteTransitGatewayRoute_transitGatewayRouteTableId :: Lens.Lens' DeleteTransitGatewayRoute Prelude.Text
+deleteTransitGatewayRoute_transitGatewayRouteTableId = Lens.lens (\DeleteTransitGatewayRoute' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@DeleteTransitGatewayRoute' {} a -> s {transitGatewayRouteTableId = a} :: DeleteTransitGatewayRoute)
+
+-- | The CIDR range for the route. This must match the CIDR for the route
+-- exactly.
+deleteTransitGatewayRoute_destinationCidrBlock :: Lens.Lens' DeleteTransitGatewayRoute Prelude.Text
+deleteTransitGatewayRoute_destinationCidrBlock = Lens.lens (\DeleteTransitGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@DeleteTransitGatewayRoute' {} a -> s {destinationCidrBlock = a} :: DeleteTransitGatewayRoute)
+
+instance Core.AWSRequest DeleteTransitGatewayRoute where
+  type
+    AWSResponse DeleteTransitGatewayRoute =
+      DeleteTransitGatewayRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayRouteResponse'
+            Prelude.<$> (x Data..@? "route")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteTransitGatewayRoute where
+  hashWithSalt _salt DeleteTransitGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+      `Prelude.hashWithSalt` destinationCidrBlock
+
+instance Prelude.NFData DeleteTransitGatewayRoute where
+  rnf DeleteTransitGatewayRoute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+
+instance Data.ToHeaders DeleteTransitGatewayRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTransitGatewayRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTransitGatewayRoute where
+  toQuery DeleteTransitGatewayRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteTransitGatewayRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayRouteResponse' smart constructor.
+data DeleteTransitGatewayRouteResponse = DeleteTransitGatewayRouteResponse'
+  { -- | Information about the route.
+    route :: Prelude.Maybe TransitGatewayRoute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'route', 'deleteTransitGatewayRouteResponse_route' - Information about the route.
+--
+-- 'httpStatus', 'deleteTransitGatewayRouteResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayRouteResponse
+newDeleteTransitGatewayRouteResponse pHttpStatus_ =
+  DeleteTransitGatewayRouteResponse'
+    { route =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the route.
+deleteTransitGatewayRouteResponse_route :: Lens.Lens' DeleteTransitGatewayRouteResponse (Prelude.Maybe TransitGatewayRoute)
+deleteTransitGatewayRouteResponse_route = Lens.lens (\DeleteTransitGatewayRouteResponse' {route} -> route) (\s@DeleteTransitGatewayRouteResponse' {} a -> s {route = a} :: DeleteTransitGatewayRouteResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayRouteResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayRouteResponse Prelude.Int
+deleteTransitGatewayRouteResponse_httpStatus = Lens.lens (\DeleteTransitGatewayRouteResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayRouteResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayRouteResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayRouteResponse
+  where
+  rnf DeleteTransitGatewayRouteResponse' {..} =
+    Prelude.rnf route
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayRouteTable.hs b/gen/Amazonka/EC2/DeleteTransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayRouteTable.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified transit gateway route table. You must disassociate
+-- the route table from any transit gateway route tables before you can
+-- delete it.
+module Amazonka.EC2.DeleteTransitGatewayRouteTable
+  ( -- * Creating a Request
+    DeleteTransitGatewayRouteTable (..),
+    newDeleteTransitGatewayRouteTable,
+
+    -- * Request Lenses
+    deleteTransitGatewayRouteTable_dryRun,
+    deleteTransitGatewayRouteTable_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayRouteTableResponse (..),
+    newDeleteTransitGatewayRouteTableResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayRouteTableResponse_transitGatewayRouteTable,
+    deleteTransitGatewayRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayRouteTable' smart constructor.
+data DeleteTransitGatewayRouteTable = DeleteTransitGatewayRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayRouteTableId', 'deleteTransitGatewayRouteTable_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newDeleteTransitGatewayRouteTable ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  DeleteTransitGatewayRouteTable
+newDeleteTransitGatewayRouteTable
+  pTransitGatewayRouteTableId_ =
+    DeleteTransitGatewayRouteTable'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayRouteTable_dryRun :: Lens.Lens' DeleteTransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayRouteTable_dryRun = Lens.lens (\DeleteTransitGatewayRouteTable' {dryRun} -> dryRun) (\s@DeleteTransitGatewayRouteTable' {} a -> s {dryRun = a} :: DeleteTransitGatewayRouteTable)
+
+-- | The ID of the transit gateway route table.
+deleteTransitGatewayRouteTable_transitGatewayRouteTableId :: Lens.Lens' DeleteTransitGatewayRouteTable Prelude.Text
+deleteTransitGatewayRouteTable_transitGatewayRouteTableId = Lens.lens (\DeleteTransitGatewayRouteTable' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@DeleteTransitGatewayRouteTable' {} a -> s {transitGatewayRouteTableId = a} :: DeleteTransitGatewayRouteTable)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayRouteTable
+  where
+  type
+    AWSResponse DeleteTransitGatewayRouteTable =
+      DeleteTransitGatewayRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayRouteTableResponse'
+            Prelude.<$> (x Data..@? "transitGatewayRouteTable")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayRouteTable
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayRouteTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayRouteTable
+  where
+  rnf DeleteTransitGatewayRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayRouteTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteTransitGatewayRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteTransitGatewayRouteTable where
+  toQuery DeleteTransitGatewayRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayRouteTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayRouteTableResponse' smart constructor.
+data DeleteTransitGatewayRouteTableResponse = DeleteTransitGatewayRouteTableResponse'
+  { -- | Information about the deleted transit gateway route table.
+    transitGatewayRouteTable :: Prelude.Maybe TransitGatewayRouteTable,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayRouteTable', 'deleteTransitGatewayRouteTableResponse_transitGatewayRouteTable' - Information about the deleted transit gateway route table.
+--
+-- 'httpStatus', 'deleteTransitGatewayRouteTableResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayRouteTableResponse
+newDeleteTransitGatewayRouteTableResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayRouteTableResponse'
+      { transitGatewayRouteTable =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the deleted transit gateway route table.
+deleteTransitGatewayRouteTableResponse_transitGatewayRouteTable :: Lens.Lens' DeleteTransitGatewayRouteTableResponse (Prelude.Maybe TransitGatewayRouteTable)
+deleteTransitGatewayRouteTableResponse_transitGatewayRouteTable = Lens.lens (\DeleteTransitGatewayRouteTableResponse' {transitGatewayRouteTable} -> transitGatewayRouteTable) (\s@DeleteTransitGatewayRouteTableResponse' {} a -> s {transitGatewayRouteTable = a} :: DeleteTransitGatewayRouteTableResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayRouteTableResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayRouteTableResponse Prelude.Int
+deleteTransitGatewayRouteTableResponse_httpStatus = Lens.lens (\DeleteTransitGatewayRouteTableResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayRouteTableResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayRouteTableResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayRouteTableResponse
+  where
+  rnf DeleteTransitGatewayRouteTableResponse' {..} =
+    Prelude.rnf transitGatewayRouteTable
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayRouteTableAnnouncement.hs b/gen/Amazonka/EC2/DeleteTransitGatewayRouteTableAnnouncement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayRouteTableAnnouncement.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayRouteTableAnnouncement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Advertises to the transit gateway that a transit gateway route table is
+-- deleted.
+module Amazonka.EC2.DeleteTransitGatewayRouteTableAnnouncement
+  ( -- * Creating a Request
+    DeleteTransitGatewayRouteTableAnnouncement (..),
+    newDeleteTransitGatewayRouteTableAnnouncement,
+
+    -- * Request Lenses
+    deleteTransitGatewayRouteTableAnnouncement_dryRun,
+    deleteTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayRouteTableAnnouncementResponse (..),
+    newDeleteTransitGatewayRouteTableAnnouncementResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement,
+    deleteTransitGatewayRouteTableAnnouncementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayRouteTableAnnouncement' smart constructor.
+data DeleteTransitGatewayRouteTableAnnouncement = DeleteTransitGatewayRouteTableAnnouncement'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The transit gateway route table ID that\'s being deleted.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayRouteTableAnnouncement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayRouteTableAnnouncement_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'deleteTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId' - The transit gateway route table ID that\'s being deleted.
+newDeleteTransitGatewayRouteTableAnnouncement ::
+  -- | 'transitGatewayRouteTableAnnouncementId'
+  Prelude.Text ->
+  DeleteTransitGatewayRouteTableAnnouncement
+newDeleteTransitGatewayRouteTableAnnouncement
+  pTransitGatewayRouteTableAnnouncementId_ =
+    DeleteTransitGatewayRouteTableAnnouncement'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayRouteTableAnnouncementId =
+          pTransitGatewayRouteTableAnnouncementId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayRouteTableAnnouncement_dryRun :: Lens.Lens' DeleteTransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayRouteTableAnnouncement_dryRun = Lens.lens (\DeleteTransitGatewayRouteTableAnnouncement' {dryRun} -> dryRun) (\s@DeleteTransitGatewayRouteTableAnnouncement' {} a -> s {dryRun = a} :: DeleteTransitGatewayRouteTableAnnouncement)
+
+-- | The transit gateway route table ID that\'s being deleted.
+deleteTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId :: Lens.Lens' DeleteTransitGatewayRouteTableAnnouncement Prelude.Text
+deleteTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId = Lens.lens (\DeleteTransitGatewayRouteTableAnnouncement' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@DeleteTransitGatewayRouteTableAnnouncement' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: DeleteTransitGatewayRouteTableAnnouncement)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayRouteTableAnnouncement
+  where
+  type
+    AWSResponse
+      DeleteTransitGatewayRouteTableAnnouncement =
+      DeleteTransitGatewayRouteTableAnnouncementResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayRouteTableAnnouncementResponse'
+            Prelude.<$> (x Data..@? "transitGatewayRouteTableAnnouncement")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayRouteTableAnnouncement
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayRouteTableAnnouncement' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayRouteTableAnnouncement
+  where
+  rnf DeleteTransitGatewayRouteTableAnnouncement' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayRouteTableAnnouncement
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteTransitGatewayRouteTableAnnouncement
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteTransitGatewayRouteTableAnnouncement
+  where
+  toQuery
+    DeleteTransitGatewayRouteTableAnnouncement' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DeleteTransitGatewayRouteTableAnnouncement" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "TransitGatewayRouteTableAnnouncementId"
+            Data.=: transitGatewayRouteTableAnnouncementId
+        ]
+
+-- | /See:/ 'newDeleteTransitGatewayRouteTableAnnouncementResponse' smart constructor.
+data DeleteTransitGatewayRouteTableAnnouncementResponse = DeleteTransitGatewayRouteTableAnnouncementResponse'
+  { -- | Provides details about a deleted transit gateway route table.
+    transitGatewayRouteTableAnnouncement :: Prelude.Maybe TransitGatewayRouteTableAnnouncement,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayRouteTableAnnouncementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayRouteTableAnnouncement', 'deleteTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement' - Provides details about a deleted transit gateway route table.
+--
+-- 'httpStatus', 'deleteTransitGatewayRouteTableAnnouncementResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayRouteTableAnnouncementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayRouteTableAnnouncementResponse
+newDeleteTransitGatewayRouteTableAnnouncementResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayRouteTableAnnouncementResponse'
+      { transitGatewayRouteTableAnnouncement =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Provides details about a deleted transit gateway route table.
+deleteTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement :: Lens.Lens' DeleteTransitGatewayRouteTableAnnouncementResponse (Prelude.Maybe TransitGatewayRouteTableAnnouncement)
+deleteTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement = Lens.lens (\DeleteTransitGatewayRouteTableAnnouncementResponse' {transitGatewayRouteTableAnnouncement} -> transitGatewayRouteTableAnnouncement) (\s@DeleteTransitGatewayRouteTableAnnouncementResponse' {} a -> s {transitGatewayRouteTableAnnouncement = a} :: DeleteTransitGatewayRouteTableAnnouncementResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayRouteTableAnnouncementResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayRouteTableAnnouncementResponse Prelude.Int
+deleteTransitGatewayRouteTableAnnouncementResponse_httpStatus = Lens.lens (\DeleteTransitGatewayRouteTableAnnouncementResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayRouteTableAnnouncementResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayRouteTableAnnouncementResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayRouteTableAnnouncementResponse
+  where
+  rnf
+    DeleteTransitGatewayRouteTableAnnouncementResponse' {..} =
+      Prelude.rnf transitGatewayRouteTableAnnouncement
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteTransitGatewayVpcAttachment.hs b/gen/Amazonka/EC2/DeleteTransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteTransitGatewayVpcAttachment.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteTransitGatewayVpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified VPC attachment.
+module Amazonka.EC2.DeleteTransitGatewayVpcAttachment
+  ( -- * Creating a Request
+    DeleteTransitGatewayVpcAttachment (..),
+    newDeleteTransitGatewayVpcAttachment,
+
+    -- * Request Lenses
+    deleteTransitGatewayVpcAttachment_dryRun,
+    deleteTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    DeleteTransitGatewayVpcAttachmentResponse (..),
+    newDeleteTransitGatewayVpcAttachmentResponse,
+
+    -- * Response Lenses
+    deleteTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    deleteTransitGatewayVpcAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTransitGatewayVpcAttachment' smart constructor.
+data DeleteTransitGatewayVpcAttachment = DeleteTransitGatewayVpcAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayVpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteTransitGatewayVpcAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'deleteTransitGatewayVpcAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+newDeleteTransitGatewayVpcAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  DeleteTransitGatewayVpcAttachment
+newDeleteTransitGatewayVpcAttachment
+  pTransitGatewayAttachmentId_ =
+    DeleteTransitGatewayVpcAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteTransitGatewayVpcAttachment_dryRun :: Lens.Lens' DeleteTransitGatewayVpcAttachment (Prelude.Maybe Prelude.Bool)
+deleteTransitGatewayVpcAttachment_dryRun = Lens.lens (\DeleteTransitGatewayVpcAttachment' {dryRun} -> dryRun) (\s@DeleteTransitGatewayVpcAttachment' {} a -> s {dryRun = a} :: DeleteTransitGatewayVpcAttachment)
+
+-- | The ID of the attachment.
+deleteTransitGatewayVpcAttachment_transitGatewayAttachmentId :: Lens.Lens' DeleteTransitGatewayVpcAttachment Prelude.Text
+deleteTransitGatewayVpcAttachment_transitGatewayAttachmentId = Lens.lens (\DeleteTransitGatewayVpcAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DeleteTransitGatewayVpcAttachment' {} a -> s {transitGatewayAttachmentId = a} :: DeleteTransitGatewayVpcAttachment)
+
+instance
+  Core.AWSRequest
+    DeleteTransitGatewayVpcAttachment
+  where
+  type
+    AWSResponse DeleteTransitGatewayVpcAttachment =
+      DeleteTransitGatewayVpcAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteTransitGatewayVpcAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayVpcAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteTransitGatewayVpcAttachment
+  where
+  hashWithSalt
+    _salt
+    DeleteTransitGatewayVpcAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayVpcAttachment
+  where
+  rnf DeleteTransitGatewayVpcAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    DeleteTransitGatewayVpcAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteTransitGatewayVpcAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteTransitGatewayVpcAttachment
+  where
+  toQuery DeleteTransitGatewayVpcAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteTransitGatewayVpcAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newDeleteTransitGatewayVpcAttachmentResponse' smart constructor.
+data DeleteTransitGatewayVpcAttachmentResponse = DeleteTransitGatewayVpcAttachmentResponse'
+  { -- | Information about the deleted VPC attachment.
+    transitGatewayVpcAttachment :: Prelude.Maybe TransitGatewayVpcAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTransitGatewayVpcAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayVpcAttachment', 'deleteTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment' - Information about the deleted VPC attachment.
+--
+-- 'httpStatus', 'deleteTransitGatewayVpcAttachmentResponse_httpStatus' - The response's http status code.
+newDeleteTransitGatewayVpcAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteTransitGatewayVpcAttachmentResponse
+newDeleteTransitGatewayVpcAttachmentResponse
+  pHttpStatus_ =
+    DeleteTransitGatewayVpcAttachmentResponse'
+      { transitGatewayVpcAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the deleted VPC attachment.
+deleteTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment :: Lens.Lens' DeleteTransitGatewayVpcAttachmentResponse (Prelude.Maybe TransitGatewayVpcAttachment)
+deleteTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment = Lens.lens (\DeleteTransitGatewayVpcAttachmentResponse' {transitGatewayVpcAttachment} -> transitGatewayVpcAttachment) (\s@DeleteTransitGatewayVpcAttachmentResponse' {} a -> s {transitGatewayVpcAttachment = a} :: DeleteTransitGatewayVpcAttachmentResponse)
+
+-- | The response's http status code.
+deleteTransitGatewayVpcAttachmentResponse_httpStatus :: Lens.Lens' DeleteTransitGatewayVpcAttachmentResponse Prelude.Int
+deleteTransitGatewayVpcAttachmentResponse_httpStatus = Lens.lens (\DeleteTransitGatewayVpcAttachmentResponse' {httpStatus} -> httpStatus) (\s@DeleteTransitGatewayVpcAttachmentResponse' {} a -> s {httpStatus = a} :: DeleteTransitGatewayVpcAttachmentResponse)
+
+instance
+  Prelude.NFData
+    DeleteTransitGatewayVpcAttachmentResponse
+  where
+  rnf DeleteTransitGatewayVpcAttachmentResponse' {..} =
+    Prelude.rnf transitGatewayVpcAttachment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVerifiedAccessEndpoint.hs b/gen/Amazonka/EC2/DeleteVerifiedAccessEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVerifiedAccessEndpoint.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVerifiedAccessEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an Amazon Web Services Verified Access endpoint.
+module Amazonka.EC2.DeleteVerifiedAccessEndpoint
+  ( -- * Creating a Request
+    DeleteVerifiedAccessEndpoint (..),
+    newDeleteVerifiedAccessEndpoint,
+
+    -- * Request Lenses
+    deleteVerifiedAccessEndpoint_clientToken,
+    deleteVerifiedAccessEndpoint_dryRun,
+    deleteVerifiedAccessEndpoint_verifiedAccessEndpointId,
+
+    -- * Destructuring the Response
+    DeleteVerifiedAccessEndpointResponse (..),
+    newDeleteVerifiedAccessEndpointResponse,
+
+    -- * Response Lenses
+    deleteVerifiedAccessEndpointResponse_verifiedAccessEndpoint,
+    deleteVerifiedAccessEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVerifiedAccessEndpoint' smart constructor.
+data DeleteVerifiedAccessEndpoint = DeleteVerifiedAccessEndpoint'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteVerifiedAccessEndpoint_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'deleteVerifiedAccessEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessEndpointId', 'deleteVerifiedAccessEndpoint_verifiedAccessEndpointId' - The ID of the Amazon Web Services Verified Access endpoint.
+newDeleteVerifiedAccessEndpoint ::
+  -- | 'verifiedAccessEndpointId'
+  Prelude.Text ->
+  DeleteVerifiedAccessEndpoint
+newDeleteVerifiedAccessEndpoint
+  pVerifiedAccessEndpointId_ =
+    DeleteVerifiedAccessEndpoint'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessEndpointId =
+          pVerifiedAccessEndpointId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+deleteVerifiedAccessEndpoint_clientToken :: Lens.Lens' DeleteVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+deleteVerifiedAccessEndpoint_clientToken = Lens.lens (\DeleteVerifiedAccessEndpoint' {clientToken} -> clientToken) (\s@DeleteVerifiedAccessEndpoint' {} a -> s {clientToken = a} :: DeleteVerifiedAccessEndpoint)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVerifiedAccessEndpoint_dryRun :: Lens.Lens' DeleteVerifiedAccessEndpoint (Prelude.Maybe Prelude.Bool)
+deleteVerifiedAccessEndpoint_dryRun = Lens.lens (\DeleteVerifiedAccessEndpoint' {dryRun} -> dryRun) (\s@DeleteVerifiedAccessEndpoint' {} a -> s {dryRun = a} :: DeleteVerifiedAccessEndpoint)
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+deleteVerifiedAccessEndpoint_verifiedAccessEndpointId :: Lens.Lens' DeleteVerifiedAccessEndpoint Prelude.Text
+deleteVerifiedAccessEndpoint_verifiedAccessEndpointId = Lens.lens (\DeleteVerifiedAccessEndpoint' {verifiedAccessEndpointId} -> verifiedAccessEndpointId) (\s@DeleteVerifiedAccessEndpoint' {} a -> s {verifiedAccessEndpointId = a} :: DeleteVerifiedAccessEndpoint)
+
+instance Core.AWSRequest DeleteVerifiedAccessEndpoint where
+  type
+    AWSResponse DeleteVerifiedAccessEndpoint =
+      DeleteVerifiedAccessEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVerifiedAccessEndpointResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessEndpoint")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteVerifiedAccessEndpoint
+  where
+  hashWithSalt _salt DeleteVerifiedAccessEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` verifiedAccessEndpointId
+
+instance Prelude.NFData DeleteVerifiedAccessEndpoint where
+  rnf DeleteVerifiedAccessEndpoint' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpointId
+
+instance Data.ToHeaders DeleteVerifiedAccessEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVerifiedAccessEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVerifiedAccessEndpoint where
+  toQuery DeleteVerifiedAccessEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteVerifiedAccessEndpoint" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessEndpointId"
+          Data.=: verifiedAccessEndpointId
+      ]
+
+-- | /See:/ 'newDeleteVerifiedAccessEndpointResponse' smart constructor.
+data DeleteVerifiedAccessEndpointResponse = DeleteVerifiedAccessEndpointResponse'
+  { -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpoint :: Prelude.Maybe VerifiedAccessEndpoint,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessEndpoint', 'deleteVerifiedAccessEndpointResponse_verifiedAccessEndpoint' - The ID of the Amazon Web Services Verified Access endpoint.
+--
+-- 'httpStatus', 'deleteVerifiedAccessEndpointResponse_httpStatus' - The response's http status code.
+newDeleteVerifiedAccessEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVerifiedAccessEndpointResponse
+newDeleteVerifiedAccessEndpointResponse pHttpStatus_ =
+  DeleteVerifiedAccessEndpointResponse'
+    { verifiedAccessEndpoint =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+deleteVerifiedAccessEndpointResponse_verifiedAccessEndpoint :: Lens.Lens' DeleteVerifiedAccessEndpointResponse (Prelude.Maybe VerifiedAccessEndpoint)
+deleteVerifiedAccessEndpointResponse_verifiedAccessEndpoint = Lens.lens (\DeleteVerifiedAccessEndpointResponse' {verifiedAccessEndpoint} -> verifiedAccessEndpoint) (\s@DeleteVerifiedAccessEndpointResponse' {} a -> s {verifiedAccessEndpoint = a} :: DeleteVerifiedAccessEndpointResponse)
+
+-- | The response's http status code.
+deleteVerifiedAccessEndpointResponse_httpStatus :: Lens.Lens' DeleteVerifiedAccessEndpointResponse Prelude.Int
+deleteVerifiedAccessEndpointResponse_httpStatus = Lens.lens (\DeleteVerifiedAccessEndpointResponse' {httpStatus} -> httpStatus) (\s@DeleteVerifiedAccessEndpointResponse' {} a -> s {httpStatus = a} :: DeleteVerifiedAccessEndpointResponse)
+
+instance
+  Prelude.NFData
+    DeleteVerifiedAccessEndpointResponse
+  where
+  rnf DeleteVerifiedAccessEndpointResponse' {..} =
+    Prelude.rnf verifiedAccessEndpoint
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVerifiedAccessGroup.hs b/gen/Amazonka/EC2/DeleteVerifiedAccessGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVerifiedAccessGroup.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVerifiedAccessGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an Amazon Web Services Verified Access group.
+module Amazonka.EC2.DeleteVerifiedAccessGroup
+  ( -- * Creating a Request
+    DeleteVerifiedAccessGroup (..),
+    newDeleteVerifiedAccessGroup,
+
+    -- * Request Lenses
+    deleteVerifiedAccessGroup_clientToken,
+    deleteVerifiedAccessGroup_dryRun,
+    deleteVerifiedAccessGroup_verifiedAccessGroupId,
+
+    -- * Destructuring the Response
+    DeleteVerifiedAccessGroupResponse (..),
+    newDeleteVerifiedAccessGroupResponse,
+
+    -- * Response Lenses
+    deleteVerifiedAccessGroupResponse_verifiedAccessGroup,
+    deleteVerifiedAccessGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVerifiedAccessGroup' smart constructor.
+data DeleteVerifiedAccessGroup = DeleteVerifiedAccessGroup'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteVerifiedAccessGroup_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'deleteVerifiedAccessGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessGroupId', 'deleteVerifiedAccessGroup_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+newDeleteVerifiedAccessGroup ::
+  -- | 'verifiedAccessGroupId'
+  Prelude.Text ->
+  DeleteVerifiedAccessGroup
+newDeleteVerifiedAccessGroup pVerifiedAccessGroupId_ =
+  DeleteVerifiedAccessGroup'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      verifiedAccessGroupId = pVerifiedAccessGroupId_
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+deleteVerifiedAccessGroup_clientToken :: Lens.Lens' DeleteVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+deleteVerifiedAccessGroup_clientToken = Lens.lens (\DeleteVerifiedAccessGroup' {clientToken} -> clientToken) (\s@DeleteVerifiedAccessGroup' {} a -> s {clientToken = a} :: DeleteVerifiedAccessGroup)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVerifiedAccessGroup_dryRun :: Lens.Lens' DeleteVerifiedAccessGroup (Prelude.Maybe Prelude.Bool)
+deleteVerifiedAccessGroup_dryRun = Lens.lens (\DeleteVerifiedAccessGroup' {dryRun} -> dryRun) (\s@DeleteVerifiedAccessGroup' {} a -> s {dryRun = a} :: DeleteVerifiedAccessGroup)
+
+-- | The ID of the Amazon Web Services Verified Access group.
+deleteVerifiedAccessGroup_verifiedAccessGroupId :: Lens.Lens' DeleteVerifiedAccessGroup Prelude.Text
+deleteVerifiedAccessGroup_verifiedAccessGroupId = Lens.lens (\DeleteVerifiedAccessGroup' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@DeleteVerifiedAccessGroup' {} a -> s {verifiedAccessGroupId = a} :: DeleteVerifiedAccessGroup)
+
+instance Core.AWSRequest DeleteVerifiedAccessGroup where
+  type
+    AWSResponse DeleteVerifiedAccessGroup =
+      DeleteVerifiedAccessGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVerifiedAccessGroupResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVerifiedAccessGroup where
+  hashWithSalt _salt DeleteVerifiedAccessGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+
+instance Prelude.NFData DeleteVerifiedAccessGroup where
+  rnf DeleteVerifiedAccessGroup' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+
+instance Data.ToHeaders DeleteVerifiedAccessGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVerifiedAccessGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVerifiedAccessGroup where
+  toQuery DeleteVerifiedAccessGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVerifiedAccessGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId
+      ]
+
+-- | /See:/ 'newDeleteVerifiedAccessGroupResponse' smart constructor.
+data DeleteVerifiedAccessGroupResponse = DeleteVerifiedAccessGroupResponse'
+  { -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroup :: Prelude.Maybe VerifiedAccessGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessGroup', 'deleteVerifiedAccessGroupResponse_verifiedAccessGroup' - The ID of the Amazon Web Services Verified Access group.
+--
+-- 'httpStatus', 'deleteVerifiedAccessGroupResponse_httpStatus' - The response's http status code.
+newDeleteVerifiedAccessGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVerifiedAccessGroupResponse
+newDeleteVerifiedAccessGroupResponse pHttpStatus_ =
+  DeleteVerifiedAccessGroupResponse'
+    { verifiedAccessGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Amazon Web Services Verified Access group.
+deleteVerifiedAccessGroupResponse_verifiedAccessGroup :: Lens.Lens' DeleteVerifiedAccessGroupResponse (Prelude.Maybe VerifiedAccessGroup)
+deleteVerifiedAccessGroupResponse_verifiedAccessGroup = Lens.lens (\DeleteVerifiedAccessGroupResponse' {verifiedAccessGroup} -> verifiedAccessGroup) (\s@DeleteVerifiedAccessGroupResponse' {} a -> s {verifiedAccessGroup = a} :: DeleteVerifiedAccessGroupResponse)
+
+-- | The response's http status code.
+deleteVerifiedAccessGroupResponse_httpStatus :: Lens.Lens' DeleteVerifiedAccessGroupResponse Prelude.Int
+deleteVerifiedAccessGroupResponse_httpStatus = Lens.lens (\DeleteVerifiedAccessGroupResponse' {httpStatus} -> httpStatus) (\s@DeleteVerifiedAccessGroupResponse' {} a -> s {httpStatus = a} :: DeleteVerifiedAccessGroupResponse)
+
+instance
+  Prelude.NFData
+    DeleteVerifiedAccessGroupResponse
+  where
+  rnf DeleteVerifiedAccessGroupResponse' {..} =
+    Prelude.rnf verifiedAccessGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVerifiedAccessInstance.hs b/gen/Amazonka/EC2/DeleteVerifiedAccessInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVerifiedAccessInstance.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVerifiedAccessInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an Amazon Web Services Verified Access instance.
+module Amazonka.EC2.DeleteVerifiedAccessInstance
+  ( -- * Creating a Request
+    DeleteVerifiedAccessInstance (..),
+    newDeleteVerifiedAccessInstance,
+
+    -- * Request Lenses
+    deleteVerifiedAccessInstance_clientToken,
+    deleteVerifiedAccessInstance_dryRun,
+    deleteVerifiedAccessInstance_verifiedAccessInstanceId,
+
+    -- * Destructuring the Response
+    DeleteVerifiedAccessInstanceResponse (..),
+    newDeleteVerifiedAccessInstanceResponse,
+
+    -- * Response Lenses
+    deleteVerifiedAccessInstanceResponse_verifiedAccessInstance,
+    deleteVerifiedAccessInstanceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVerifiedAccessInstance' smart constructor.
+data DeleteVerifiedAccessInstance = DeleteVerifiedAccessInstance'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteVerifiedAccessInstance_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'deleteVerifiedAccessInstance_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessInstanceId', 'deleteVerifiedAccessInstance_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newDeleteVerifiedAccessInstance ::
+  -- | 'verifiedAccessInstanceId'
+  Prelude.Text ->
+  DeleteVerifiedAccessInstance
+newDeleteVerifiedAccessInstance
+  pVerifiedAccessInstanceId_ =
+    DeleteVerifiedAccessInstance'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessInstanceId =
+          pVerifiedAccessInstanceId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+deleteVerifiedAccessInstance_clientToken :: Lens.Lens' DeleteVerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+deleteVerifiedAccessInstance_clientToken = Lens.lens (\DeleteVerifiedAccessInstance' {clientToken} -> clientToken) (\s@DeleteVerifiedAccessInstance' {} a -> s {clientToken = a} :: DeleteVerifiedAccessInstance)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVerifiedAccessInstance_dryRun :: Lens.Lens' DeleteVerifiedAccessInstance (Prelude.Maybe Prelude.Bool)
+deleteVerifiedAccessInstance_dryRun = Lens.lens (\DeleteVerifiedAccessInstance' {dryRun} -> dryRun) (\s@DeleteVerifiedAccessInstance' {} a -> s {dryRun = a} :: DeleteVerifiedAccessInstance)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+deleteVerifiedAccessInstance_verifiedAccessInstanceId :: Lens.Lens' DeleteVerifiedAccessInstance Prelude.Text
+deleteVerifiedAccessInstance_verifiedAccessInstanceId = Lens.lens (\DeleteVerifiedAccessInstance' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@DeleteVerifiedAccessInstance' {} a -> s {verifiedAccessInstanceId = a} :: DeleteVerifiedAccessInstance)
+
+instance Core.AWSRequest DeleteVerifiedAccessInstance where
+  type
+    AWSResponse DeleteVerifiedAccessInstance =
+      DeleteVerifiedAccessInstanceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVerifiedAccessInstanceResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessInstance")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteVerifiedAccessInstance
+  where
+  hashWithSalt _salt DeleteVerifiedAccessInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance Prelude.NFData DeleteVerifiedAccessInstance where
+  rnf DeleteVerifiedAccessInstance' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+
+instance Data.ToHeaders DeleteVerifiedAccessInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVerifiedAccessInstance where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVerifiedAccessInstance where
+  toQuery DeleteVerifiedAccessInstance' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteVerifiedAccessInstance" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId
+      ]
+
+-- | /See:/ 'newDeleteVerifiedAccessInstanceResponse' smart constructor.
+data DeleteVerifiedAccessInstanceResponse = DeleteVerifiedAccessInstanceResponse'
+  { -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstance :: Prelude.Maybe VerifiedAccessInstance,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessInstance', 'deleteVerifiedAccessInstanceResponse_verifiedAccessInstance' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'httpStatus', 'deleteVerifiedAccessInstanceResponse_httpStatus' - The response's http status code.
+newDeleteVerifiedAccessInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVerifiedAccessInstanceResponse
+newDeleteVerifiedAccessInstanceResponse pHttpStatus_ =
+  DeleteVerifiedAccessInstanceResponse'
+    { verifiedAccessInstance =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+deleteVerifiedAccessInstanceResponse_verifiedAccessInstance :: Lens.Lens' DeleteVerifiedAccessInstanceResponse (Prelude.Maybe VerifiedAccessInstance)
+deleteVerifiedAccessInstanceResponse_verifiedAccessInstance = Lens.lens (\DeleteVerifiedAccessInstanceResponse' {verifiedAccessInstance} -> verifiedAccessInstance) (\s@DeleteVerifiedAccessInstanceResponse' {} a -> s {verifiedAccessInstance = a} :: DeleteVerifiedAccessInstanceResponse)
+
+-- | The response's http status code.
+deleteVerifiedAccessInstanceResponse_httpStatus :: Lens.Lens' DeleteVerifiedAccessInstanceResponse Prelude.Int
+deleteVerifiedAccessInstanceResponse_httpStatus = Lens.lens (\DeleteVerifiedAccessInstanceResponse' {httpStatus} -> httpStatus) (\s@DeleteVerifiedAccessInstanceResponse' {} a -> s {httpStatus = a} :: DeleteVerifiedAccessInstanceResponse)
+
+instance
+  Prelude.NFData
+    DeleteVerifiedAccessInstanceResponse
+  where
+  rnf DeleteVerifiedAccessInstanceResponse' {..} =
+    Prelude.rnf verifiedAccessInstance
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVerifiedAccessTrustProvider.hs b/gen/Amazonka/EC2/DeleteVerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVerifiedAccessTrustProvider.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVerifiedAccessTrustProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an Amazon Web Services Verified Access trust provider.
+module Amazonka.EC2.DeleteVerifiedAccessTrustProvider
+  ( -- * Creating a Request
+    DeleteVerifiedAccessTrustProvider (..),
+    newDeleteVerifiedAccessTrustProvider,
+
+    -- * Request Lenses
+    deleteVerifiedAccessTrustProvider_clientToken,
+    deleteVerifiedAccessTrustProvider_dryRun,
+    deleteVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+
+    -- * Destructuring the Response
+    DeleteVerifiedAccessTrustProviderResponse (..),
+    newDeleteVerifiedAccessTrustProviderResponse,
+
+    -- * Response Lenses
+    deleteVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    deleteVerifiedAccessTrustProviderResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVerifiedAccessTrustProvider' smart constructor.
+data DeleteVerifiedAccessTrustProvider = DeleteVerifiedAccessTrustProvider'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProviderId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessTrustProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'deleteVerifiedAccessTrustProvider_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'deleteVerifiedAccessTrustProvider_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessTrustProviderId', 'deleteVerifiedAccessTrustProvider_verifiedAccessTrustProviderId' - The ID of the Amazon Web Services Verified Access trust provider.
+newDeleteVerifiedAccessTrustProvider ::
+  -- | 'verifiedAccessTrustProviderId'
+  Prelude.Text ->
+  DeleteVerifiedAccessTrustProvider
+newDeleteVerifiedAccessTrustProvider
+  pVerifiedAccessTrustProviderId_ =
+    DeleteVerifiedAccessTrustProvider'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessTrustProviderId =
+          pVerifiedAccessTrustProviderId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+deleteVerifiedAccessTrustProvider_clientToken :: Lens.Lens' DeleteVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+deleteVerifiedAccessTrustProvider_clientToken = Lens.lens (\DeleteVerifiedAccessTrustProvider' {clientToken} -> clientToken) (\s@DeleteVerifiedAccessTrustProvider' {} a -> s {clientToken = a} :: DeleteVerifiedAccessTrustProvider)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVerifiedAccessTrustProvider_dryRun :: Lens.Lens' DeleteVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Bool)
+deleteVerifiedAccessTrustProvider_dryRun = Lens.lens (\DeleteVerifiedAccessTrustProvider' {dryRun} -> dryRun) (\s@DeleteVerifiedAccessTrustProvider' {} a -> s {dryRun = a} :: DeleteVerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+deleteVerifiedAccessTrustProvider_verifiedAccessTrustProviderId :: Lens.Lens' DeleteVerifiedAccessTrustProvider Prelude.Text
+deleteVerifiedAccessTrustProvider_verifiedAccessTrustProviderId = Lens.lens (\DeleteVerifiedAccessTrustProvider' {verifiedAccessTrustProviderId} -> verifiedAccessTrustProviderId) (\s@DeleteVerifiedAccessTrustProvider' {} a -> s {verifiedAccessTrustProviderId = a} :: DeleteVerifiedAccessTrustProvider)
+
+instance
+  Core.AWSRequest
+    DeleteVerifiedAccessTrustProvider
+  where
+  type
+    AWSResponse DeleteVerifiedAccessTrustProvider =
+      DeleteVerifiedAccessTrustProviderResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVerifiedAccessTrustProviderResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessTrustProvider")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteVerifiedAccessTrustProvider
+  where
+  hashWithSalt
+    _salt
+    DeleteVerifiedAccessTrustProvider' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` verifiedAccessTrustProviderId
+
+instance
+  Prelude.NFData
+    DeleteVerifiedAccessTrustProvider
+  where
+  rnf DeleteVerifiedAccessTrustProvider' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderId
+
+instance
+  Data.ToHeaders
+    DeleteVerifiedAccessTrustProvider
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteVerifiedAccessTrustProvider
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteVerifiedAccessTrustProvider
+  where
+  toQuery DeleteVerifiedAccessTrustProvider' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteVerifiedAccessTrustProvider" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessTrustProviderId"
+          Data.=: verifiedAccessTrustProviderId
+      ]
+
+-- | /See:/ 'newDeleteVerifiedAccessTrustProviderResponse' smart constructor.
+data DeleteVerifiedAccessTrustProviderResponse = DeleteVerifiedAccessTrustProviderResponse'
+  { -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProvider :: Prelude.Maybe VerifiedAccessTrustProvider,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVerifiedAccessTrustProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessTrustProvider', 'deleteVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider' - The ID of the Amazon Web Services Verified Access trust provider.
+--
+-- 'httpStatus', 'deleteVerifiedAccessTrustProviderResponse_httpStatus' - The response's http status code.
+newDeleteVerifiedAccessTrustProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVerifiedAccessTrustProviderResponse
+newDeleteVerifiedAccessTrustProviderResponse
+  pHttpStatus_ =
+    DeleteVerifiedAccessTrustProviderResponse'
+      { verifiedAccessTrustProvider =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+deleteVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider :: Lens.Lens' DeleteVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessTrustProvider)
+deleteVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider = Lens.lens (\DeleteVerifiedAccessTrustProviderResponse' {verifiedAccessTrustProvider} -> verifiedAccessTrustProvider) (\s@DeleteVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessTrustProvider = a} :: DeleteVerifiedAccessTrustProviderResponse)
+
+-- | The response's http status code.
+deleteVerifiedAccessTrustProviderResponse_httpStatus :: Lens.Lens' DeleteVerifiedAccessTrustProviderResponse Prelude.Int
+deleteVerifiedAccessTrustProviderResponse_httpStatus = Lens.lens (\DeleteVerifiedAccessTrustProviderResponse' {httpStatus} -> httpStatus) (\s@DeleteVerifiedAccessTrustProviderResponse' {} a -> s {httpStatus = a} :: DeleteVerifiedAccessTrustProviderResponse)
+
+instance
+  Prelude.NFData
+    DeleteVerifiedAccessTrustProviderResponse
+  where
+  rnf DeleteVerifiedAccessTrustProviderResponse' {..} =
+    Prelude.rnf verifiedAccessTrustProvider
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVolume.hs b/gen/Amazonka/EC2/DeleteVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVolume.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified EBS volume. The volume must be in the @available@
+-- state (not attached to an instance).
+--
+-- The volume can remain in the @deleting@ state for several minutes.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html Delete an Amazon EBS volume>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DeleteVolume
+  ( -- * Creating a Request
+    DeleteVolume (..),
+    newDeleteVolume,
+
+    -- * Request Lenses
+    deleteVolume_dryRun,
+    deleteVolume_volumeId,
+
+    -- * Destructuring the Response
+    DeleteVolumeResponse (..),
+    newDeleteVolumeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVolume' smart constructor.
+data DeleteVolume = DeleteVolume'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVolume_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'volumeId', 'deleteVolume_volumeId' - The ID of the volume.
+newDeleteVolume ::
+  -- | 'volumeId'
+  Prelude.Text ->
+  DeleteVolume
+newDeleteVolume pVolumeId_ =
+  DeleteVolume'
+    { dryRun = Prelude.Nothing,
+      volumeId = pVolumeId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVolume_dryRun :: Lens.Lens' DeleteVolume (Prelude.Maybe Prelude.Bool)
+deleteVolume_dryRun = Lens.lens (\DeleteVolume' {dryRun} -> dryRun) (\s@DeleteVolume' {} a -> s {dryRun = a} :: DeleteVolume)
+
+-- | The ID of the volume.
+deleteVolume_volumeId :: Lens.Lens' DeleteVolume Prelude.Text
+deleteVolume_volumeId = Lens.lens (\DeleteVolume' {volumeId} -> volumeId) (\s@DeleteVolume' {} a -> s {volumeId = a} :: DeleteVolume)
+
+instance Core.AWSRequest DeleteVolume where
+  type AWSResponse DeleteVolume = DeleteVolumeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull DeleteVolumeResponse'
+
+instance Prelude.Hashable DeleteVolume where
+  hashWithSalt _salt DeleteVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData DeleteVolume where
+  rnf DeleteVolume' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders DeleteVolume where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVolume where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVolume where
+  toQuery DeleteVolume' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVolume" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VolumeId" Data.=: volumeId
+      ]
+
+-- | /See:/ 'newDeleteVolumeResponse' smart constructor.
+data DeleteVolumeResponse = DeleteVolumeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVolumeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteVolumeResponse ::
+  DeleteVolumeResponse
+newDeleteVolumeResponse = DeleteVolumeResponse'
+
+instance Prelude.NFData DeleteVolumeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteVpc.hs b/gen/Amazonka/EC2/DeleteVpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpc.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified VPC. You must detach or delete all gateways and
+-- resources that are associated with the VPC before you can delete it. For
+-- example, you must terminate all instances running in the VPC, delete all
+-- security groups associated with the VPC (except the default one), delete
+-- all route tables associated with the VPC (except the default one), and
+-- so on.
+module Amazonka.EC2.DeleteVpc
+  ( -- * Creating a Request
+    DeleteVpc (..),
+    newDeleteVpc,
+
+    -- * Request Lenses
+    deleteVpc_dryRun,
+    deleteVpc_vpcId,
+
+    -- * Destructuring the Response
+    DeleteVpcResponse (..),
+    newDeleteVpcResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVpc' smart constructor.
+data DeleteVpc = DeleteVpc'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpc_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcId', 'deleteVpc_vpcId' - The ID of the VPC.
+newDeleteVpc ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  DeleteVpc
+newDeleteVpc pVpcId_ =
+  DeleteVpc'
+    { dryRun = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpc_dryRun :: Lens.Lens' DeleteVpc (Prelude.Maybe Prelude.Bool)
+deleteVpc_dryRun = Lens.lens (\DeleteVpc' {dryRun} -> dryRun) (\s@DeleteVpc' {} a -> s {dryRun = a} :: DeleteVpc)
+
+-- | The ID of the VPC.
+deleteVpc_vpcId :: Lens.Lens' DeleteVpc Prelude.Text
+deleteVpc_vpcId = Lens.lens (\DeleteVpc' {vpcId} -> vpcId) (\s@DeleteVpc' {} a -> s {vpcId = a} :: DeleteVpc)
+
+instance Core.AWSRequest DeleteVpc where
+  type AWSResponse DeleteVpc = DeleteVpcResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull DeleteVpcResponse'
+
+instance Prelude.Hashable DeleteVpc where
+  hashWithSalt _salt DeleteVpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData DeleteVpc where
+  rnf DeleteVpc' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders DeleteVpc where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVpc where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpc where
+  toQuery DeleteVpc' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVpc" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDeleteVpcResponse' smart constructor.
+data DeleteVpcResponse = DeleteVpcResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteVpcResponse ::
+  DeleteVpcResponse
+newDeleteVpcResponse = DeleteVpcResponse'
+
+instance Prelude.NFData DeleteVpcResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteVpcEndpointConnectionNotifications.hs b/gen/Amazonka/EC2/DeleteVpcEndpointConnectionNotifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpcEndpointConnectionNotifications.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpcEndpointConnectionNotifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more VPC endpoint connection notifications.
+module Amazonka.EC2.DeleteVpcEndpointConnectionNotifications
+  ( -- * Creating a Request
+    DeleteVpcEndpointConnectionNotifications (..),
+    newDeleteVpcEndpointConnectionNotifications,
+
+    -- * Request Lenses
+    deleteVpcEndpointConnectionNotifications_dryRun,
+    deleteVpcEndpointConnectionNotifications_connectionNotificationIds,
+
+    -- * Destructuring the Response
+    DeleteVpcEndpointConnectionNotificationsResponse (..),
+    newDeleteVpcEndpointConnectionNotificationsResponse,
+
+    -- * Response Lenses
+    deleteVpcEndpointConnectionNotificationsResponse_unsuccessful,
+    deleteVpcEndpointConnectionNotificationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVpcEndpointConnectionNotifications' smart constructor.
+data DeleteVpcEndpointConnectionNotifications = DeleteVpcEndpointConnectionNotifications'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more notification IDs.
+    connectionNotificationIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointConnectionNotifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpcEndpointConnectionNotifications_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'connectionNotificationIds', 'deleteVpcEndpointConnectionNotifications_connectionNotificationIds' - One or more notification IDs.
+newDeleteVpcEndpointConnectionNotifications ::
+  DeleteVpcEndpointConnectionNotifications
+newDeleteVpcEndpointConnectionNotifications =
+  DeleteVpcEndpointConnectionNotifications'
+    { dryRun =
+        Prelude.Nothing,
+      connectionNotificationIds =
+        Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpcEndpointConnectionNotifications_dryRun :: Lens.Lens' DeleteVpcEndpointConnectionNotifications (Prelude.Maybe Prelude.Bool)
+deleteVpcEndpointConnectionNotifications_dryRun = Lens.lens (\DeleteVpcEndpointConnectionNotifications' {dryRun} -> dryRun) (\s@DeleteVpcEndpointConnectionNotifications' {} a -> s {dryRun = a} :: DeleteVpcEndpointConnectionNotifications)
+
+-- | One or more notification IDs.
+deleteVpcEndpointConnectionNotifications_connectionNotificationIds :: Lens.Lens' DeleteVpcEndpointConnectionNotifications [Prelude.Text]
+deleteVpcEndpointConnectionNotifications_connectionNotificationIds = Lens.lens (\DeleteVpcEndpointConnectionNotifications' {connectionNotificationIds} -> connectionNotificationIds) (\s@DeleteVpcEndpointConnectionNotifications' {} a -> s {connectionNotificationIds = a} :: DeleteVpcEndpointConnectionNotifications) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    DeleteVpcEndpointConnectionNotifications
+  where
+  type
+    AWSResponse
+      DeleteVpcEndpointConnectionNotifications =
+      DeleteVpcEndpointConnectionNotificationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVpcEndpointConnectionNotificationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteVpcEndpointConnectionNotifications
+  where
+  hashWithSalt
+    _salt
+    DeleteVpcEndpointConnectionNotifications' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` connectionNotificationIds
+
+instance
+  Prelude.NFData
+    DeleteVpcEndpointConnectionNotifications
+  where
+  rnf DeleteVpcEndpointConnectionNotifications' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf connectionNotificationIds
+
+instance
+  Data.ToHeaders
+    DeleteVpcEndpointConnectionNotifications
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteVpcEndpointConnectionNotifications
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteVpcEndpointConnectionNotifications
+  where
+  toQuery DeleteVpcEndpointConnectionNotifications' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteVpcEndpointConnectionNotifications" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "ConnectionNotificationId"
+          connectionNotificationIds
+      ]
+
+-- | /See:/ 'newDeleteVpcEndpointConnectionNotificationsResponse' smart constructor.
+data DeleteVpcEndpointConnectionNotificationsResponse = DeleteVpcEndpointConnectionNotificationsResponse'
+  { -- | Information about the notifications that could not be deleted
+    -- successfully.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointConnectionNotificationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unsuccessful', 'deleteVpcEndpointConnectionNotificationsResponse_unsuccessful' - Information about the notifications that could not be deleted
+-- successfully.
+--
+-- 'httpStatus', 'deleteVpcEndpointConnectionNotificationsResponse_httpStatus' - The response's http status code.
+newDeleteVpcEndpointConnectionNotificationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVpcEndpointConnectionNotificationsResponse
+newDeleteVpcEndpointConnectionNotificationsResponse
+  pHttpStatus_ =
+    DeleteVpcEndpointConnectionNotificationsResponse'
+      { unsuccessful =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the notifications that could not be deleted
+-- successfully.
+deleteVpcEndpointConnectionNotificationsResponse_unsuccessful :: Lens.Lens' DeleteVpcEndpointConnectionNotificationsResponse (Prelude.Maybe [UnsuccessfulItem])
+deleteVpcEndpointConnectionNotificationsResponse_unsuccessful = Lens.lens (\DeleteVpcEndpointConnectionNotificationsResponse' {unsuccessful} -> unsuccessful) (\s@DeleteVpcEndpointConnectionNotificationsResponse' {} a -> s {unsuccessful = a} :: DeleteVpcEndpointConnectionNotificationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteVpcEndpointConnectionNotificationsResponse_httpStatus :: Lens.Lens' DeleteVpcEndpointConnectionNotificationsResponse Prelude.Int
+deleteVpcEndpointConnectionNotificationsResponse_httpStatus = Lens.lens (\DeleteVpcEndpointConnectionNotificationsResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcEndpointConnectionNotificationsResponse' {} a -> s {httpStatus = a} :: DeleteVpcEndpointConnectionNotificationsResponse)
+
+instance
+  Prelude.NFData
+    DeleteVpcEndpointConnectionNotificationsResponse
+  where
+  rnf
+    DeleteVpcEndpointConnectionNotificationsResponse' {..} =
+      Prelude.rnf unsuccessful
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVpcEndpointServiceConfigurations.hs b/gen/Amazonka/EC2/DeleteVpcEndpointServiceConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpcEndpointServiceConfigurations.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpcEndpointServiceConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more VPC endpoint service configurations in your account.
+-- Before you delete the endpoint service configuration, you must reject
+-- any @Available@ or @PendingAcceptance@ interface endpoint connections
+-- that are attached to the service.
+module Amazonka.EC2.DeleteVpcEndpointServiceConfigurations
+  ( -- * Creating a Request
+    DeleteVpcEndpointServiceConfigurations (..),
+    newDeleteVpcEndpointServiceConfigurations,
+
+    -- * Request Lenses
+    deleteVpcEndpointServiceConfigurations_dryRun,
+    deleteVpcEndpointServiceConfigurations_serviceIds,
+
+    -- * Destructuring the Response
+    DeleteVpcEndpointServiceConfigurationsResponse (..),
+    newDeleteVpcEndpointServiceConfigurationsResponse,
+
+    -- * Response Lenses
+    deleteVpcEndpointServiceConfigurationsResponse_unsuccessful,
+    deleteVpcEndpointServiceConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVpcEndpointServiceConfigurations' smart constructor.
+data DeleteVpcEndpointServiceConfigurations = DeleteVpcEndpointServiceConfigurations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of one or more services.
+    serviceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointServiceConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpcEndpointServiceConfigurations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'serviceIds', 'deleteVpcEndpointServiceConfigurations_serviceIds' - The IDs of one or more services.
+newDeleteVpcEndpointServiceConfigurations ::
+  DeleteVpcEndpointServiceConfigurations
+newDeleteVpcEndpointServiceConfigurations =
+  DeleteVpcEndpointServiceConfigurations'
+    { dryRun =
+        Prelude.Nothing,
+      serviceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpcEndpointServiceConfigurations_dryRun :: Lens.Lens' DeleteVpcEndpointServiceConfigurations (Prelude.Maybe Prelude.Bool)
+deleteVpcEndpointServiceConfigurations_dryRun = Lens.lens (\DeleteVpcEndpointServiceConfigurations' {dryRun} -> dryRun) (\s@DeleteVpcEndpointServiceConfigurations' {} a -> s {dryRun = a} :: DeleteVpcEndpointServiceConfigurations)
+
+-- | The IDs of one or more services.
+deleteVpcEndpointServiceConfigurations_serviceIds :: Lens.Lens' DeleteVpcEndpointServiceConfigurations [Prelude.Text]
+deleteVpcEndpointServiceConfigurations_serviceIds = Lens.lens (\DeleteVpcEndpointServiceConfigurations' {serviceIds} -> serviceIds) (\s@DeleteVpcEndpointServiceConfigurations' {} a -> s {serviceIds = a} :: DeleteVpcEndpointServiceConfigurations) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    DeleteVpcEndpointServiceConfigurations
+  where
+  type
+    AWSResponse
+      DeleteVpcEndpointServiceConfigurations =
+      DeleteVpcEndpointServiceConfigurationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVpcEndpointServiceConfigurationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteVpcEndpointServiceConfigurations
+  where
+  hashWithSalt
+    _salt
+    DeleteVpcEndpointServiceConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` serviceIds
+
+instance
+  Prelude.NFData
+    DeleteVpcEndpointServiceConfigurations
+  where
+  rnf DeleteVpcEndpointServiceConfigurations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf serviceIds
+
+instance
+  Data.ToHeaders
+    DeleteVpcEndpointServiceConfigurations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeleteVpcEndpointServiceConfigurations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteVpcEndpointServiceConfigurations
+  where
+  toQuery DeleteVpcEndpointServiceConfigurations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeleteVpcEndpointServiceConfigurations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "ServiceId" serviceIds
+      ]
+
+-- | /See:/ 'newDeleteVpcEndpointServiceConfigurationsResponse' smart constructor.
+data DeleteVpcEndpointServiceConfigurationsResponse = DeleteVpcEndpointServiceConfigurationsResponse'
+  { -- | Information about the service configurations that were not deleted, if
+    -- applicable.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointServiceConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unsuccessful', 'deleteVpcEndpointServiceConfigurationsResponse_unsuccessful' - Information about the service configurations that were not deleted, if
+-- applicable.
+--
+-- 'httpStatus', 'deleteVpcEndpointServiceConfigurationsResponse_httpStatus' - The response's http status code.
+newDeleteVpcEndpointServiceConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVpcEndpointServiceConfigurationsResponse
+newDeleteVpcEndpointServiceConfigurationsResponse
+  pHttpStatus_ =
+    DeleteVpcEndpointServiceConfigurationsResponse'
+      { unsuccessful =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the service configurations that were not deleted, if
+-- applicable.
+deleteVpcEndpointServiceConfigurationsResponse_unsuccessful :: Lens.Lens' DeleteVpcEndpointServiceConfigurationsResponse (Prelude.Maybe [UnsuccessfulItem])
+deleteVpcEndpointServiceConfigurationsResponse_unsuccessful = Lens.lens (\DeleteVpcEndpointServiceConfigurationsResponse' {unsuccessful} -> unsuccessful) (\s@DeleteVpcEndpointServiceConfigurationsResponse' {} a -> s {unsuccessful = a} :: DeleteVpcEndpointServiceConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteVpcEndpointServiceConfigurationsResponse_httpStatus :: Lens.Lens' DeleteVpcEndpointServiceConfigurationsResponse Prelude.Int
+deleteVpcEndpointServiceConfigurationsResponse_httpStatus = Lens.lens (\DeleteVpcEndpointServiceConfigurationsResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcEndpointServiceConfigurationsResponse' {} a -> s {httpStatus = a} :: DeleteVpcEndpointServiceConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    DeleteVpcEndpointServiceConfigurationsResponse
+  where
+  rnf
+    DeleteVpcEndpointServiceConfigurationsResponse' {..} =
+      Prelude.rnf unsuccessful
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVpcEndpoints.hs b/gen/Amazonka/EC2/DeleteVpcEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpcEndpoints.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpcEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more specified VPC endpoints. You can delete any of the
+-- following types of VPC endpoints.
+--
+-- -   Gateway endpoint,
+--
+-- -   Gateway Load Balancer endpoint,
+--
+-- -   Interface endpoint
+--
+-- The following rules apply when you delete a VPC endpoint:
+--
+-- -   When you delete a gateway endpoint, we delete the endpoint routes in
+--     the route tables that are associated with the endpoint.
+--
+-- -   When you delete a Gateway Load Balancer endpoint, we delete the
+--     endpoint network interfaces.
+--
+--     You can only delete Gateway Load Balancer endpoints when the routes
+--     that are associated with the endpoint are deleted.
+--
+-- -   When you delete an interface endpoint, we delete the endpoint
+--     network interfaces.
+module Amazonka.EC2.DeleteVpcEndpoints
+  ( -- * Creating a Request
+    DeleteVpcEndpoints (..),
+    newDeleteVpcEndpoints,
+
+    -- * Request Lenses
+    deleteVpcEndpoints_dryRun,
+    deleteVpcEndpoints_vpcEndpointIds,
+
+    -- * Destructuring the Response
+    DeleteVpcEndpointsResponse (..),
+    newDeleteVpcEndpointsResponse,
+
+    -- * Response Lenses
+    deleteVpcEndpointsResponse_unsuccessful,
+    deleteVpcEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteVpcEndpoints.
+--
+-- /See:/ 'newDeleteVpcEndpoints' smart constructor.
+data DeleteVpcEndpoints = DeleteVpcEndpoints'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more VPC endpoint IDs.
+    vpcEndpointIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpcEndpoints_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcEndpointIds', 'deleteVpcEndpoints_vpcEndpointIds' - One or more VPC endpoint IDs.
+newDeleteVpcEndpoints ::
+  DeleteVpcEndpoints
+newDeleteVpcEndpoints =
+  DeleteVpcEndpoints'
+    { dryRun = Prelude.Nothing,
+      vpcEndpointIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpcEndpoints_dryRun :: Lens.Lens' DeleteVpcEndpoints (Prelude.Maybe Prelude.Bool)
+deleteVpcEndpoints_dryRun = Lens.lens (\DeleteVpcEndpoints' {dryRun} -> dryRun) (\s@DeleteVpcEndpoints' {} a -> s {dryRun = a} :: DeleteVpcEndpoints)
+
+-- | One or more VPC endpoint IDs.
+deleteVpcEndpoints_vpcEndpointIds :: Lens.Lens' DeleteVpcEndpoints [Prelude.Text]
+deleteVpcEndpoints_vpcEndpointIds = Lens.lens (\DeleteVpcEndpoints' {vpcEndpointIds} -> vpcEndpointIds) (\s@DeleteVpcEndpoints' {} a -> s {vpcEndpointIds = a} :: DeleteVpcEndpoints) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DeleteVpcEndpoints where
+  type
+    AWSResponse DeleteVpcEndpoints =
+      DeleteVpcEndpointsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVpcEndpointsResponse'
+            Prelude.<$> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVpcEndpoints where
+  hashWithSalt _salt DeleteVpcEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcEndpointIds
+
+instance Prelude.NFData DeleteVpcEndpoints where
+  rnf DeleteVpcEndpoints' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcEndpointIds
+
+instance Data.ToHeaders DeleteVpcEndpoints where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVpcEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpcEndpoints where
+  toQuery DeleteVpcEndpoints' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVpcEndpoints" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "VpcEndpointId" vpcEndpointIds
+      ]
+
+-- | Contains the output of DeleteVpcEndpoints.
+--
+-- /See:/ 'newDeleteVpcEndpointsResponse' smart constructor.
+data DeleteVpcEndpointsResponse = DeleteVpcEndpointsResponse'
+  { -- | Information about the VPC endpoints that were not successfully deleted.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unsuccessful', 'deleteVpcEndpointsResponse_unsuccessful' - Information about the VPC endpoints that were not successfully deleted.
+--
+-- 'httpStatus', 'deleteVpcEndpointsResponse_httpStatus' - The response's http status code.
+newDeleteVpcEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVpcEndpointsResponse
+newDeleteVpcEndpointsResponse pHttpStatus_ =
+  DeleteVpcEndpointsResponse'
+    { unsuccessful =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPC endpoints that were not successfully deleted.
+deleteVpcEndpointsResponse_unsuccessful :: Lens.Lens' DeleteVpcEndpointsResponse (Prelude.Maybe [UnsuccessfulItem])
+deleteVpcEndpointsResponse_unsuccessful = Lens.lens (\DeleteVpcEndpointsResponse' {unsuccessful} -> unsuccessful) (\s@DeleteVpcEndpointsResponse' {} a -> s {unsuccessful = a} :: DeleteVpcEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+deleteVpcEndpointsResponse_httpStatus :: Lens.Lens' DeleteVpcEndpointsResponse Prelude.Int
+deleteVpcEndpointsResponse_httpStatus = Lens.lens (\DeleteVpcEndpointsResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcEndpointsResponse' {} a -> s {httpStatus = a} :: DeleteVpcEndpointsResponse)
+
+instance Prelude.NFData DeleteVpcEndpointsResponse where
+  rnf DeleteVpcEndpointsResponse' {..} =
+    Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVpcPeeringConnection.hs b/gen/Amazonka/EC2/DeleteVpcPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpcPeeringConnection.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpcPeeringConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a VPC peering connection. Either the owner of the requester VPC
+-- or the owner of the accepter VPC can delete the VPC peering connection
+-- if it\'s in the @active@ state. The owner of the requester VPC can
+-- delete a VPC peering connection in the @pending-acceptance@ state. You
+-- cannot delete a VPC peering connection that\'s in the @failed@ state.
+module Amazonka.EC2.DeleteVpcPeeringConnection
+  ( -- * Creating a Request
+    DeleteVpcPeeringConnection (..),
+    newDeleteVpcPeeringConnection,
+
+    -- * Request Lenses
+    deleteVpcPeeringConnection_dryRun,
+    deleteVpcPeeringConnection_vpcPeeringConnectionId,
+
+    -- * Destructuring the Response
+    DeleteVpcPeeringConnectionResponse (..),
+    newDeleteVpcPeeringConnectionResponse,
+
+    -- * Response Lenses
+    deleteVpcPeeringConnectionResponse_return,
+    deleteVpcPeeringConnectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteVpcPeeringConnection' smart constructor.
+data DeleteVpcPeeringConnection = DeleteVpcPeeringConnection'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcPeeringConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpcPeeringConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcPeeringConnectionId', 'deleteVpcPeeringConnection_vpcPeeringConnectionId' - The ID of the VPC peering connection.
+newDeleteVpcPeeringConnection ::
+  -- | 'vpcPeeringConnectionId'
+  Prelude.Text ->
+  DeleteVpcPeeringConnection
+newDeleteVpcPeeringConnection
+  pVpcPeeringConnectionId_ =
+    DeleteVpcPeeringConnection'
+      { dryRun =
+          Prelude.Nothing,
+        vpcPeeringConnectionId =
+          pVpcPeeringConnectionId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpcPeeringConnection_dryRun :: Lens.Lens' DeleteVpcPeeringConnection (Prelude.Maybe Prelude.Bool)
+deleteVpcPeeringConnection_dryRun = Lens.lens (\DeleteVpcPeeringConnection' {dryRun} -> dryRun) (\s@DeleteVpcPeeringConnection' {} a -> s {dryRun = a} :: DeleteVpcPeeringConnection)
+
+-- | The ID of the VPC peering connection.
+deleteVpcPeeringConnection_vpcPeeringConnectionId :: Lens.Lens' DeleteVpcPeeringConnection Prelude.Text
+deleteVpcPeeringConnection_vpcPeeringConnectionId = Lens.lens (\DeleteVpcPeeringConnection' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@DeleteVpcPeeringConnection' {} a -> s {vpcPeeringConnectionId = a} :: DeleteVpcPeeringConnection)
+
+instance Core.AWSRequest DeleteVpcPeeringConnection where
+  type
+    AWSResponse DeleteVpcPeeringConnection =
+      DeleteVpcPeeringConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeleteVpcPeeringConnectionResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteVpcPeeringConnection where
+  hashWithSalt _salt DeleteVpcPeeringConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData DeleteVpcPeeringConnection where
+  rnf DeleteVpcPeeringConnection' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+
+instance Data.ToHeaders DeleteVpcPeeringConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVpcPeeringConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpcPeeringConnection where
+  toQuery DeleteVpcPeeringConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVpcPeeringConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId
+      ]
+
+-- | /See:/ 'newDeleteVpcPeeringConnectionResponse' smart constructor.
+data DeleteVpcPeeringConnectionResponse = DeleteVpcPeeringConnectionResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpcPeeringConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'deleteVpcPeeringConnectionResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'deleteVpcPeeringConnectionResponse_httpStatus' - The response's http status code.
+newDeleteVpcPeeringConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteVpcPeeringConnectionResponse
+newDeleteVpcPeeringConnectionResponse pHttpStatus_ =
+  DeleteVpcPeeringConnectionResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+deleteVpcPeeringConnectionResponse_return :: Lens.Lens' DeleteVpcPeeringConnectionResponse (Prelude.Maybe Prelude.Bool)
+deleteVpcPeeringConnectionResponse_return = Lens.lens (\DeleteVpcPeeringConnectionResponse' {return'} -> return') (\s@DeleteVpcPeeringConnectionResponse' {} a -> s {return' = a} :: DeleteVpcPeeringConnectionResponse)
+
+-- | The response's http status code.
+deleteVpcPeeringConnectionResponse_httpStatus :: Lens.Lens' DeleteVpcPeeringConnectionResponse Prelude.Int
+deleteVpcPeeringConnectionResponse_httpStatus = Lens.lens (\DeleteVpcPeeringConnectionResponse' {httpStatus} -> httpStatus) (\s@DeleteVpcPeeringConnectionResponse' {} a -> s {httpStatus = a} :: DeleteVpcPeeringConnectionResponse)
+
+instance
+  Prelude.NFData
+    DeleteVpcPeeringConnectionResponse
+  where
+  rnf DeleteVpcPeeringConnectionResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeleteVpnConnection.hs b/gen/Amazonka/EC2/DeleteVpnConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpnConnection.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpnConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified VPN connection.
+--
+-- If you\'re deleting the VPC and its associated components, we recommend
+-- that you detach the virtual private gateway from the VPC and delete the
+-- VPC before deleting the VPN connection. If you believe that the tunnel
+-- credentials for your VPN connection have been compromised, you can
+-- delete the VPN connection and create a new one that has new keys,
+-- without needing to delete the VPC or virtual private gateway. If you
+-- create a new VPN connection, you must reconfigure the customer gateway
+-- device using the new configuration information returned with the new VPN
+-- connection ID.
+--
+-- For certificate-based authentication, delete all Certificate Manager
+-- (ACM) private certificates used for the Amazon Web Services-side tunnel
+-- endpoints for the VPN connection before deleting the VPN connection.
+module Amazonka.EC2.DeleteVpnConnection
+  ( -- * Creating a Request
+    DeleteVpnConnection (..),
+    newDeleteVpnConnection,
+
+    -- * Request Lenses
+    deleteVpnConnection_dryRun,
+    deleteVpnConnection_vpnConnectionId,
+
+    -- * Destructuring the Response
+    DeleteVpnConnectionResponse (..),
+    newDeleteVpnConnectionResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteVpnConnection.
+--
+-- /See:/ 'newDeleteVpnConnection' smart constructor.
+data DeleteVpnConnection = DeleteVpnConnection'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPN connection.
+    vpnConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpnConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpnConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpnConnectionId', 'deleteVpnConnection_vpnConnectionId' - The ID of the VPN connection.
+newDeleteVpnConnection ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  DeleteVpnConnection
+newDeleteVpnConnection pVpnConnectionId_ =
+  DeleteVpnConnection'
+    { dryRun = Prelude.Nothing,
+      vpnConnectionId = pVpnConnectionId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpnConnection_dryRun :: Lens.Lens' DeleteVpnConnection (Prelude.Maybe Prelude.Bool)
+deleteVpnConnection_dryRun = Lens.lens (\DeleteVpnConnection' {dryRun} -> dryRun) (\s@DeleteVpnConnection' {} a -> s {dryRun = a} :: DeleteVpnConnection)
+
+-- | The ID of the VPN connection.
+deleteVpnConnection_vpnConnectionId :: Lens.Lens' DeleteVpnConnection Prelude.Text
+deleteVpnConnection_vpnConnectionId = Lens.lens (\DeleteVpnConnection' {vpnConnectionId} -> vpnConnectionId) (\s@DeleteVpnConnection' {} a -> s {vpnConnectionId = a} :: DeleteVpnConnection)
+
+instance Core.AWSRequest DeleteVpnConnection where
+  type
+    AWSResponse DeleteVpnConnection =
+      DeleteVpnConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteVpnConnectionResponse'
+
+instance Prelude.Hashable DeleteVpnConnection where
+  hashWithSalt _salt DeleteVpnConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpnConnectionId
+
+instance Prelude.NFData DeleteVpnConnection where
+  rnf DeleteVpnConnection' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+
+instance Data.ToHeaders DeleteVpnConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVpnConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpnConnection where
+  toQuery DeleteVpnConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVpnConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpnConnectionId" Data.=: vpnConnectionId
+      ]
+
+-- | /See:/ 'newDeleteVpnConnectionResponse' smart constructor.
+data DeleteVpnConnectionResponse = DeleteVpnConnectionResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpnConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteVpnConnectionResponse ::
+  DeleteVpnConnectionResponse
+newDeleteVpnConnectionResponse =
+  DeleteVpnConnectionResponse'
+
+instance Prelude.NFData DeleteVpnConnectionResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteVpnConnectionRoute.hs b/gen/Amazonka/EC2/DeleteVpnConnectionRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpnConnectionRoute.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpnConnectionRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified static route associated with a VPN connection
+-- between an existing virtual private gateway and a VPN customer gateway.
+-- The static route allows traffic to be routed from the virtual private
+-- gateway to the VPN customer gateway.
+module Amazonka.EC2.DeleteVpnConnectionRoute
+  ( -- * Creating a Request
+    DeleteVpnConnectionRoute (..),
+    newDeleteVpnConnectionRoute,
+
+    -- * Request Lenses
+    deleteVpnConnectionRoute_destinationCidrBlock,
+    deleteVpnConnectionRoute_vpnConnectionId,
+
+    -- * Destructuring the Response
+    DeleteVpnConnectionRouteResponse (..),
+    newDeleteVpnConnectionRouteResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteVpnConnectionRoute.
+--
+-- /See:/ 'newDeleteVpnConnectionRoute' smart constructor.
+data DeleteVpnConnectionRoute = DeleteVpnConnectionRoute'
+  { -- | The CIDR block associated with the local subnet of the customer network.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the VPN connection.
+    vpnConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpnConnectionRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidrBlock', 'deleteVpnConnectionRoute_destinationCidrBlock' - The CIDR block associated with the local subnet of the customer network.
+--
+-- 'vpnConnectionId', 'deleteVpnConnectionRoute_vpnConnectionId' - The ID of the VPN connection.
+newDeleteVpnConnectionRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  DeleteVpnConnectionRoute
+newDeleteVpnConnectionRoute
+  pDestinationCidrBlock_
+  pVpnConnectionId_ =
+    DeleteVpnConnectionRoute'
+      { destinationCidrBlock =
+          pDestinationCidrBlock_,
+        vpnConnectionId = pVpnConnectionId_
+      }
+
+-- | The CIDR block associated with the local subnet of the customer network.
+deleteVpnConnectionRoute_destinationCidrBlock :: Lens.Lens' DeleteVpnConnectionRoute Prelude.Text
+deleteVpnConnectionRoute_destinationCidrBlock = Lens.lens (\DeleteVpnConnectionRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@DeleteVpnConnectionRoute' {} a -> s {destinationCidrBlock = a} :: DeleteVpnConnectionRoute)
+
+-- | The ID of the VPN connection.
+deleteVpnConnectionRoute_vpnConnectionId :: Lens.Lens' DeleteVpnConnectionRoute Prelude.Text
+deleteVpnConnectionRoute_vpnConnectionId = Lens.lens (\DeleteVpnConnectionRoute' {vpnConnectionId} -> vpnConnectionId) (\s@DeleteVpnConnectionRoute' {} a -> s {vpnConnectionId = a} :: DeleteVpnConnectionRoute)
+
+instance Core.AWSRequest DeleteVpnConnectionRoute where
+  type
+    AWSResponse DeleteVpnConnectionRoute =
+      DeleteVpnConnectionRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      DeleteVpnConnectionRouteResponse'
+
+instance Prelude.Hashable DeleteVpnConnectionRoute where
+  hashWithSalt _salt DeleteVpnConnectionRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` vpnConnectionId
+
+instance Prelude.NFData DeleteVpnConnectionRoute where
+  rnf DeleteVpnConnectionRoute' {..} =
+    Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+
+instance Data.ToHeaders DeleteVpnConnectionRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVpnConnectionRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpnConnectionRoute where
+  toQuery DeleteVpnConnectionRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVpnConnectionRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "VpnConnectionId" Data.=: vpnConnectionId
+      ]
+
+-- | /See:/ 'newDeleteVpnConnectionRouteResponse' smart constructor.
+data DeleteVpnConnectionRouteResponse = DeleteVpnConnectionRouteResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpnConnectionRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteVpnConnectionRouteResponse ::
+  DeleteVpnConnectionRouteResponse
+newDeleteVpnConnectionRouteResponse =
+  DeleteVpnConnectionRouteResponse'
+
+instance
+  Prelude.NFData
+    DeleteVpnConnectionRouteResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeleteVpnGateway.hs b/gen/Amazonka/EC2/DeleteVpnGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeleteVpnGateway.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeleteVpnGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified virtual private gateway. You must first detach the
+-- virtual private gateway from the VPC. Note that you don\'t need to
+-- delete the virtual private gateway if you plan to delete and recreate
+-- the VPN connection between your VPC and your network.
+module Amazonka.EC2.DeleteVpnGateway
+  ( -- * Creating a Request
+    DeleteVpnGateway (..),
+    newDeleteVpnGateway,
+
+    -- * Request Lenses
+    deleteVpnGateway_dryRun,
+    deleteVpnGateway_vpnGatewayId,
+
+    -- * Destructuring the Response
+    DeleteVpnGatewayResponse (..),
+    newDeleteVpnGatewayResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeleteVpnGateway.
+--
+-- /See:/ 'newDeleteVpnGateway' smart constructor.
+data DeleteVpnGateway = DeleteVpnGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the virtual private gateway.
+    vpnGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpnGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deleteVpnGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpnGatewayId', 'deleteVpnGateway_vpnGatewayId' - The ID of the virtual private gateway.
+newDeleteVpnGateway ::
+  -- | 'vpnGatewayId'
+  Prelude.Text ->
+  DeleteVpnGateway
+newDeleteVpnGateway pVpnGatewayId_ =
+  DeleteVpnGateway'
+    { dryRun = Prelude.Nothing,
+      vpnGatewayId = pVpnGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deleteVpnGateway_dryRun :: Lens.Lens' DeleteVpnGateway (Prelude.Maybe Prelude.Bool)
+deleteVpnGateway_dryRun = Lens.lens (\DeleteVpnGateway' {dryRun} -> dryRun) (\s@DeleteVpnGateway' {} a -> s {dryRun = a} :: DeleteVpnGateway)
+
+-- | The ID of the virtual private gateway.
+deleteVpnGateway_vpnGatewayId :: Lens.Lens' DeleteVpnGateway Prelude.Text
+deleteVpnGateway_vpnGatewayId = Lens.lens (\DeleteVpnGateway' {vpnGatewayId} -> vpnGatewayId) (\s@DeleteVpnGateway' {} a -> s {vpnGatewayId = a} :: DeleteVpnGateway)
+
+instance Core.AWSRequest DeleteVpnGateway where
+  type
+    AWSResponse DeleteVpnGateway =
+      DeleteVpnGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteVpnGatewayResponse'
+
+instance Prelude.Hashable DeleteVpnGateway where
+  hashWithSalt _salt DeleteVpnGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpnGatewayId
+
+instance Prelude.NFData DeleteVpnGateway where
+  rnf DeleteVpnGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpnGatewayId
+
+instance Data.ToHeaders DeleteVpnGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteVpnGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteVpnGateway where
+  toQuery DeleteVpnGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteVpnGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpnGatewayId" Data.=: vpnGatewayId
+      ]
+
+-- | /See:/ 'newDeleteVpnGatewayResponse' smart constructor.
+data DeleteVpnGatewayResponse = DeleteVpnGatewayResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteVpnGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteVpnGatewayResponse ::
+  DeleteVpnGatewayResponse
+newDeleteVpnGatewayResponse =
+  DeleteVpnGatewayResponse'
+
+instance Prelude.NFData DeleteVpnGatewayResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeprovisionByoipCidr.hs b/gen/Amazonka/EC2/DeprovisionByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeprovisionByoipCidr.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeprovisionByoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Releases the specified address range that you provisioned for use with
+-- your Amazon Web Services resources through bring your own IP addresses
+-- (BYOIP) and deletes the corresponding address pool.
+--
+-- Before you can release an address range, you must stop advertising it
+-- using WithdrawByoipCidr and you must not have any IP addresses allocated
+-- from its address range.
+module Amazonka.EC2.DeprovisionByoipCidr
+  ( -- * Creating a Request
+    DeprovisionByoipCidr (..),
+    newDeprovisionByoipCidr,
+
+    -- * Request Lenses
+    deprovisionByoipCidr_dryRun,
+    deprovisionByoipCidr_cidr,
+
+    -- * Destructuring the Response
+    DeprovisionByoipCidrResponse (..),
+    newDeprovisionByoipCidrResponse,
+
+    -- * Response Lenses
+    deprovisionByoipCidrResponse_byoipCidr,
+    deprovisionByoipCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeprovisionByoipCidr' smart constructor.
+data DeprovisionByoipCidr = DeprovisionByoipCidr'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The address range, in CIDR notation. The prefix must be the same prefix
+    -- that you specified when you provisioned the address range.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeprovisionByoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deprovisionByoipCidr_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'cidr', 'deprovisionByoipCidr_cidr' - The address range, in CIDR notation. The prefix must be the same prefix
+-- that you specified when you provisioned the address range.
+newDeprovisionByoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  DeprovisionByoipCidr
+newDeprovisionByoipCidr pCidr_ =
+  DeprovisionByoipCidr'
+    { dryRun = Prelude.Nothing,
+      cidr = pCidr_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deprovisionByoipCidr_dryRun :: Lens.Lens' DeprovisionByoipCidr (Prelude.Maybe Prelude.Bool)
+deprovisionByoipCidr_dryRun = Lens.lens (\DeprovisionByoipCidr' {dryRun} -> dryRun) (\s@DeprovisionByoipCidr' {} a -> s {dryRun = a} :: DeprovisionByoipCidr)
+
+-- | The address range, in CIDR notation. The prefix must be the same prefix
+-- that you specified when you provisioned the address range.
+deprovisionByoipCidr_cidr :: Lens.Lens' DeprovisionByoipCidr Prelude.Text
+deprovisionByoipCidr_cidr = Lens.lens (\DeprovisionByoipCidr' {cidr} -> cidr) (\s@DeprovisionByoipCidr' {} a -> s {cidr = a} :: DeprovisionByoipCidr)
+
+instance Core.AWSRequest DeprovisionByoipCidr where
+  type
+    AWSResponse DeprovisionByoipCidr =
+      DeprovisionByoipCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeprovisionByoipCidrResponse'
+            Prelude.<$> (x Data..@? "byoipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeprovisionByoipCidr where
+  hashWithSalt _salt DeprovisionByoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData DeprovisionByoipCidr where
+  rnf DeprovisionByoipCidr' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf cidr
+
+instance Data.ToHeaders DeprovisionByoipCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeprovisionByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeprovisionByoipCidr where
+  toQuery DeprovisionByoipCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeprovisionByoipCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Cidr" Data.=: cidr
+      ]
+
+-- | /See:/ 'newDeprovisionByoipCidrResponse' smart constructor.
+data DeprovisionByoipCidrResponse = DeprovisionByoipCidrResponse'
+  { -- | Information about the address range.
+    byoipCidr :: Prelude.Maybe ByoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeprovisionByoipCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byoipCidr', 'deprovisionByoipCidrResponse_byoipCidr' - Information about the address range.
+--
+-- 'httpStatus', 'deprovisionByoipCidrResponse_httpStatus' - The response's http status code.
+newDeprovisionByoipCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeprovisionByoipCidrResponse
+newDeprovisionByoipCidrResponse pHttpStatus_ =
+  DeprovisionByoipCidrResponse'
+    { byoipCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address range.
+deprovisionByoipCidrResponse_byoipCidr :: Lens.Lens' DeprovisionByoipCidrResponse (Prelude.Maybe ByoipCidr)
+deprovisionByoipCidrResponse_byoipCidr = Lens.lens (\DeprovisionByoipCidrResponse' {byoipCidr} -> byoipCidr) (\s@DeprovisionByoipCidrResponse' {} a -> s {byoipCidr = a} :: DeprovisionByoipCidrResponse)
+
+-- | The response's http status code.
+deprovisionByoipCidrResponse_httpStatus :: Lens.Lens' DeprovisionByoipCidrResponse Prelude.Int
+deprovisionByoipCidrResponse_httpStatus = Lens.lens (\DeprovisionByoipCidrResponse' {httpStatus} -> httpStatus) (\s@DeprovisionByoipCidrResponse' {} a -> s {httpStatus = a} :: DeprovisionByoipCidrResponse)
+
+instance Prelude.NFData DeprovisionByoipCidrResponse where
+  rnf DeprovisionByoipCidrResponse' {..} =
+    Prelude.rnf byoipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeprovisionIpamPoolCidr.hs b/gen/Amazonka/EC2/DeprovisionIpamPoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeprovisionIpamPoolCidr.hs
@@ -0,0 +1,202 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeprovisionIpamPoolCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deprovision a CIDR provisioned from an IPAM pool. If you deprovision a
+-- CIDR from a pool that has a source pool, the CIDR is recycled back into
+-- the source pool. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/depro-pool-cidr-ipam.html Deprovision pool CIDRs>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.DeprovisionIpamPoolCidr
+  ( -- * Creating a Request
+    DeprovisionIpamPoolCidr (..),
+    newDeprovisionIpamPoolCidr,
+
+    -- * Request Lenses
+    deprovisionIpamPoolCidr_cidr,
+    deprovisionIpamPoolCidr_dryRun,
+    deprovisionIpamPoolCidr_ipamPoolId,
+
+    -- * Destructuring the Response
+    DeprovisionIpamPoolCidrResponse (..),
+    newDeprovisionIpamPoolCidrResponse,
+
+    -- * Response Lenses
+    deprovisionIpamPoolCidrResponse_ipamPoolCidr,
+    deprovisionIpamPoolCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeprovisionIpamPoolCidr' smart constructor.
+data DeprovisionIpamPoolCidr = DeprovisionIpamPoolCidr'
+  { -- | The CIDR which you want to deprovision from the pool.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the pool that has the CIDR you want to deprovision.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeprovisionIpamPoolCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'deprovisionIpamPoolCidr_cidr' - The CIDR which you want to deprovision from the pool.
+--
+-- 'dryRun', 'deprovisionIpamPoolCidr_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamPoolId', 'deprovisionIpamPoolCidr_ipamPoolId' - The ID of the pool that has the CIDR you want to deprovision.
+newDeprovisionIpamPoolCidr ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  DeprovisionIpamPoolCidr
+newDeprovisionIpamPoolCidr pIpamPoolId_ =
+  DeprovisionIpamPoolCidr'
+    { cidr = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | The CIDR which you want to deprovision from the pool.
+deprovisionIpamPoolCidr_cidr :: Lens.Lens' DeprovisionIpamPoolCidr (Prelude.Maybe Prelude.Text)
+deprovisionIpamPoolCidr_cidr = Lens.lens (\DeprovisionIpamPoolCidr' {cidr} -> cidr) (\s@DeprovisionIpamPoolCidr' {} a -> s {cidr = a} :: DeprovisionIpamPoolCidr)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+deprovisionIpamPoolCidr_dryRun :: Lens.Lens' DeprovisionIpamPoolCidr (Prelude.Maybe Prelude.Bool)
+deprovisionIpamPoolCidr_dryRun = Lens.lens (\DeprovisionIpamPoolCidr' {dryRun} -> dryRun) (\s@DeprovisionIpamPoolCidr' {} a -> s {dryRun = a} :: DeprovisionIpamPoolCidr)
+
+-- | The ID of the pool that has the CIDR you want to deprovision.
+deprovisionIpamPoolCidr_ipamPoolId :: Lens.Lens' DeprovisionIpamPoolCidr Prelude.Text
+deprovisionIpamPoolCidr_ipamPoolId = Lens.lens (\DeprovisionIpamPoolCidr' {ipamPoolId} -> ipamPoolId) (\s@DeprovisionIpamPoolCidr' {} a -> s {ipamPoolId = a} :: DeprovisionIpamPoolCidr)
+
+instance Core.AWSRequest DeprovisionIpamPoolCidr where
+  type
+    AWSResponse DeprovisionIpamPoolCidr =
+      DeprovisionIpamPoolCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeprovisionIpamPoolCidrResponse'
+            Prelude.<$> (x Data..@? "ipamPoolCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeprovisionIpamPoolCidr where
+  hashWithSalt _salt DeprovisionIpamPoolCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData DeprovisionIpamPoolCidr where
+  rnf DeprovisionIpamPoolCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders DeprovisionIpamPoolCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeprovisionIpamPoolCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeprovisionIpamPoolCidr where
+  toQuery DeprovisionIpamPoolCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeprovisionIpamPoolCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Cidr" Data.=: cidr,
+        "DryRun" Data.=: dryRun,
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newDeprovisionIpamPoolCidrResponse' smart constructor.
+data DeprovisionIpamPoolCidrResponse = DeprovisionIpamPoolCidrResponse'
+  { -- | The deprovisioned pool CIDR.
+    ipamPoolCidr :: Prelude.Maybe IpamPoolCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeprovisionIpamPoolCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPoolCidr', 'deprovisionIpamPoolCidrResponse_ipamPoolCidr' - The deprovisioned pool CIDR.
+--
+-- 'httpStatus', 'deprovisionIpamPoolCidrResponse_httpStatus' - The response's http status code.
+newDeprovisionIpamPoolCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeprovisionIpamPoolCidrResponse
+newDeprovisionIpamPoolCidrResponse pHttpStatus_ =
+  DeprovisionIpamPoolCidrResponse'
+    { ipamPoolCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The deprovisioned pool CIDR.
+deprovisionIpamPoolCidrResponse_ipamPoolCidr :: Lens.Lens' DeprovisionIpamPoolCidrResponse (Prelude.Maybe IpamPoolCidr)
+deprovisionIpamPoolCidrResponse_ipamPoolCidr = Lens.lens (\DeprovisionIpamPoolCidrResponse' {ipamPoolCidr} -> ipamPoolCidr) (\s@DeprovisionIpamPoolCidrResponse' {} a -> s {ipamPoolCidr = a} :: DeprovisionIpamPoolCidrResponse)
+
+-- | The response's http status code.
+deprovisionIpamPoolCidrResponse_httpStatus :: Lens.Lens' DeprovisionIpamPoolCidrResponse Prelude.Int
+deprovisionIpamPoolCidrResponse_httpStatus = Lens.lens (\DeprovisionIpamPoolCidrResponse' {httpStatus} -> httpStatus) (\s@DeprovisionIpamPoolCidrResponse' {} a -> s {httpStatus = a} :: DeprovisionIpamPoolCidrResponse)
+
+instance
+  Prelude.NFData
+    DeprovisionIpamPoolCidrResponse
+  where
+  rnf DeprovisionIpamPoolCidrResponse' {..} =
+    Prelude.rnf ipamPoolCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeprovisionPublicIpv4PoolCidr.hs b/gen/Amazonka/EC2/DeprovisionPublicIpv4PoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeprovisionPublicIpv4PoolCidr.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeprovisionPublicIpv4PoolCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deprovision a CIDR from a public IPv4 pool.
+module Amazonka.EC2.DeprovisionPublicIpv4PoolCidr
+  ( -- * Creating a Request
+    DeprovisionPublicIpv4PoolCidr (..),
+    newDeprovisionPublicIpv4PoolCidr,
+
+    -- * Request Lenses
+    deprovisionPublicIpv4PoolCidr_dryRun,
+    deprovisionPublicIpv4PoolCidr_poolId,
+    deprovisionPublicIpv4PoolCidr_cidr,
+
+    -- * Destructuring the Response
+    DeprovisionPublicIpv4PoolCidrResponse (..),
+    newDeprovisionPublicIpv4PoolCidrResponse,
+
+    -- * Response Lenses
+    deprovisionPublicIpv4PoolCidrResponse_deprovisionedAddresses,
+    deprovisionPublicIpv4PoolCidrResponse_poolId,
+    deprovisionPublicIpv4PoolCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeprovisionPublicIpv4PoolCidr' smart constructor.
+data DeprovisionPublicIpv4PoolCidr = DeprovisionPublicIpv4PoolCidr'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the pool that you want to deprovision the CIDR from.
+    poolId :: Prelude.Text,
+    -- | The CIDR you want to deprovision from the pool.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeprovisionPublicIpv4PoolCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deprovisionPublicIpv4PoolCidr_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'poolId', 'deprovisionPublicIpv4PoolCidr_poolId' - The ID of the pool that you want to deprovision the CIDR from.
+--
+-- 'cidr', 'deprovisionPublicIpv4PoolCidr_cidr' - The CIDR you want to deprovision from the pool.
+newDeprovisionPublicIpv4PoolCidr ::
+  -- | 'poolId'
+  Prelude.Text ->
+  -- | 'cidr'
+  Prelude.Text ->
+  DeprovisionPublicIpv4PoolCidr
+newDeprovisionPublicIpv4PoolCidr pPoolId_ pCidr_ =
+  DeprovisionPublicIpv4PoolCidr'
+    { dryRun =
+        Prelude.Nothing,
+      poolId = pPoolId_,
+      cidr = pCidr_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+deprovisionPublicIpv4PoolCidr_dryRun :: Lens.Lens' DeprovisionPublicIpv4PoolCidr (Prelude.Maybe Prelude.Bool)
+deprovisionPublicIpv4PoolCidr_dryRun = Lens.lens (\DeprovisionPublicIpv4PoolCidr' {dryRun} -> dryRun) (\s@DeprovisionPublicIpv4PoolCidr' {} a -> s {dryRun = a} :: DeprovisionPublicIpv4PoolCidr)
+
+-- | The ID of the pool that you want to deprovision the CIDR from.
+deprovisionPublicIpv4PoolCidr_poolId :: Lens.Lens' DeprovisionPublicIpv4PoolCidr Prelude.Text
+deprovisionPublicIpv4PoolCidr_poolId = Lens.lens (\DeprovisionPublicIpv4PoolCidr' {poolId} -> poolId) (\s@DeprovisionPublicIpv4PoolCidr' {} a -> s {poolId = a} :: DeprovisionPublicIpv4PoolCidr)
+
+-- | The CIDR you want to deprovision from the pool.
+deprovisionPublicIpv4PoolCidr_cidr :: Lens.Lens' DeprovisionPublicIpv4PoolCidr Prelude.Text
+deprovisionPublicIpv4PoolCidr_cidr = Lens.lens (\DeprovisionPublicIpv4PoolCidr' {cidr} -> cidr) (\s@DeprovisionPublicIpv4PoolCidr' {} a -> s {cidr = a} :: DeprovisionPublicIpv4PoolCidr)
+
+instance
+  Core.AWSRequest
+    DeprovisionPublicIpv4PoolCidr
+  where
+  type
+    AWSResponse DeprovisionPublicIpv4PoolCidr =
+      DeprovisionPublicIpv4PoolCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeprovisionPublicIpv4PoolCidrResponse'
+            Prelude.<$> ( x
+                            Data..@? "deprovisionedAddressSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "poolId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeprovisionPublicIpv4PoolCidr
+  where
+  hashWithSalt _salt DeprovisionPublicIpv4PoolCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` poolId
+      `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData DeprovisionPublicIpv4PoolCidr where
+  rnf DeprovisionPublicIpv4PoolCidr' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf cidr
+
+instance Data.ToHeaders DeprovisionPublicIpv4PoolCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeprovisionPublicIpv4PoolCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeprovisionPublicIpv4PoolCidr where
+  toQuery DeprovisionPublicIpv4PoolCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DeprovisionPublicIpv4PoolCidr" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PoolId" Data.=: poolId,
+        "Cidr" Data.=: cidr
+      ]
+
+-- | /See:/ 'newDeprovisionPublicIpv4PoolCidrResponse' smart constructor.
+data DeprovisionPublicIpv4PoolCidrResponse = DeprovisionPublicIpv4PoolCidrResponse'
+  { -- | The deprovisioned CIDRs.
+    deprovisionedAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the pool that you deprovisioned the CIDR from.
+    poolId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeprovisionPublicIpv4PoolCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deprovisionedAddresses', 'deprovisionPublicIpv4PoolCidrResponse_deprovisionedAddresses' - The deprovisioned CIDRs.
+--
+-- 'poolId', 'deprovisionPublicIpv4PoolCidrResponse_poolId' - The ID of the pool that you deprovisioned the CIDR from.
+--
+-- 'httpStatus', 'deprovisionPublicIpv4PoolCidrResponse_httpStatus' - The response's http status code.
+newDeprovisionPublicIpv4PoolCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeprovisionPublicIpv4PoolCidrResponse
+newDeprovisionPublicIpv4PoolCidrResponse pHttpStatus_ =
+  DeprovisionPublicIpv4PoolCidrResponse'
+    { deprovisionedAddresses =
+        Prelude.Nothing,
+      poolId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The deprovisioned CIDRs.
+deprovisionPublicIpv4PoolCidrResponse_deprovisionedAddresses :: Lens.Lens' DeprovisionPublicIpv4PoolCidrResponse (Prelude.Maybe [Prelude.Text])
+deprovisionPublicIpv4PoolCidrResponse_deprovisionedAddresses = Lens.lens (\DeprovisionPublicIpv4PoolCidrResponse' {deprovisionedAddresses} -> deprovisionedAddresses) (\s@DeprovisionPublicIpv4PoolCidrResponse' {} a -> s {deprovisionedAddresses = a} :: DeprovisionPublicIpv4PoolCidrResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the pool that you deprovisioned the CIDR from.
+deprovisionPublicIpv4PoolCidrResponse_poolId :: Lens.Lens' DeprovisionPublicIpv4PoolCidrResponse (Prelude.Maybe Prelude.Text)
+deprovisionPublicIpv4PoolCidrResponse_poolId = Lens.lens (\DeprovisionPublicIpv4PoolCidrResponse' {poolId} -> poolId) (\s@DeprovisionPublicIpv4PoolCidrResponse' {} a -> s {poolId = a} :: DeprovisionPublicIpv4PoolCidrResponse)
+
+-- | The response's http status code.
+deprovisionPublicIpv4PoolCidrResponse_httpStatus :: Lens.Lens' DeprovisionPublicIpv4PoolCidrResponse Prelude.Int
+deprovisionPublicIpv4PoolCidrResponse_httpStatus = Lens.lens (\DeprovisionPublicIpv4PoolCidrResponse' {httpStatus} -> httpStatus) (\s@DeprovisionPublicIpv4PoolCidrResponse' {} a -> s {httpStatus = a} :: DeprovisionPublicIpv4PoolCidrResponse)
+
+instance
+  Prelude.NFData
+    DeprovisionPublicIpv4PoolCidrResponse
+  where
+  rnf DeprovisionPublicIpv4PoolCidrResponse' {..} =
+    Prelude.rnf deprovisionedAddresses
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeregisterImage.hs b/gen/Amazonka/EC2/DeregisterImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeregisterImage.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeregisterImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters the specified AMI. After you deregister an AMI, it can\'t be
+-- used to launch new instances.
+--
+-- If you deregister an AMI that matches a Recycle Bin retention rule, the
+-- AMI is retained in the Recycle Bin for the specified retention period.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html Recycle Bin>
+-- in the /Amazon EC2 User Guide/.
+--
+-- When you deregister an AMI, it doesn\'t affect any instances that
+-- you\'ve already launched from the AMI. You\'ll continue to incur usage
+-- costs for those instances until you terminate them.
+--
+-- When you deregister an Amazon EBS-backed AMI, it doesn\'t affect the
+-- snapshot that was created for the root volume of the instance during the
+-- AMI creation process. When you deregister an instance store-backed AMI,
+-- it doesn\'t affect the files that you uploaded to Amazon S3 when you
+-- created the AMI.
+module Amazonka.EC2.DeregisterImage
+  ( -- * Creating a Request
+    DeregisterImage (..),
+    newDeregisterImage,
+
+    -- * Request Lenses
+    deregisterImage_dryRun,
+    deregisterImage_imageId,
+
+    -- * Destructuring the Response
+    DeregisterImageResponse (..),
+    newDeregisterImageResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DeregisterImage.
+--
+-- /See:/ 'newDeregisterImage' smart constructor.
+data DeregisterImage = DeregisterImage'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deregisterImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'deregisterImage_imageId' - The ID of the AMI.
+newDeregisterImage ::
+  -- | 'imageId'
+  Prelude.Text ->
+  DeregisterImage
+newDeregisterImage pImageId_ =
+  DeregisterImage'
+    { dryRun = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deregisterImage_dryRun :: Lens.Lens' DeregisterImage (Prelude.Maybe Prelude.Bool)
+deregisterImage_dryRun = Lens.lens (\DeregisterImage' {dryRun} -> dryRun) (\s@DeregisterImage' {} a -> s {dryRun = a} :: DeregisterImage)
+
+-- | The ID of the AMI.
+deregisterImage_imageId :: Lens.Lens' DeregisterImage Prelude.Text
+deregisterImage_imageId = Lens.lens (\DeregisterImage' {imageId} -> imageId) (\s@DeregisterImage' {} a -> s {imageId = a} :: DeregisterImage)
+
+instance Core.AWSRequest DeregisterImage where
+  type
+    AWSResponse DeregisterImage =
+      DeregisterImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeregisterImageResponse'
+
+instance Prelude.Hashable DeregisterImage where
+  hashWithSalt _salt DeregisterImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData DeregisterImage where
+  rnf DeregisterImage' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders DeregisterImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeregisterImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeregisterImage where
+  toQuery DeregisterImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeregisterImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newDeregisterImageResponse' smart constructor.
+data DeregisterImageResponse = DeregisterImageResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeregisterImageResponse ::
+  DeregisterImageResponse
+newDeregisterImageResponse = DeregisterImageResponse'
+
+instance Prelude.NFData DeregisterImageResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DeregisterInstanceEventNotificationAttributes.hs b/gen/Amazonka/EC2/DeregisterInstanceEventNotificationAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeregisterInstanceEventNotificationAttributes.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeregisterInstanceEventNotificationAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters tag keys to prevent tags that have the specified tag keys
+-- from being included in scheduled event notifications for resources in
+-- the Region.
+module Amazonka.EC2.DeregisterInstanceEventNotificationAttributes
+  ( -- * Creating a Request
+    DeregisterInstanceEventNotificationAttributes (..),
+    newDeregisterInstanceEventNotificationAttributes,
+
+    -- * Request Lenses
+    deregisterInstanceEventNotificationAttributes_dryRun,
+    deregisterInstanceEventNotificationAttributes_instanceTagAttribute,
+
+    -- * Destructuring the Response
+    DeregisterInstanceEventNotificationAttributesResponse (..),
+    newDeregisterInstanceEventNotificationAttributesResponse,
+
+    -- * Response Lenses
+    deregisterInstanceEventNotificationAttributesResponse_instanceTagAttribute,
+    deregisterInstanceEventNotificationAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeregisterInstanceEventNotificationAttributes' smart constructor.
+data DeregisterInstanceEventNotificationAttributes = DeregisterInstanceEventNotificationAttributes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the tag keys to deregister.
+    instanceTagAttribute :: Prelude.Maybe DeregisterInstanceTagAttributeRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterInstanceEventNotificationAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deregisterInstanceEventNotificationAttributes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceTagAttribute', 'deregisterInstanceEventNotificationAttributes_instanceTagAttribute' - Information about the tag keys to deregister.
+newDeregisterInstanceEventNotificationAttributes ::
+  DeregisterInstanceEventNotificationAttributes
+newDeregisterInstanceEventNotificationAttributes =
+  DeregisterInstanceEventNotificationAttributes'
+    { dryRun =
+        Prelude.Nothing,
+      instanceTagAttribute =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deregisterInstanceEventNotificationAttributes_dryRun :: Lens.Lens' DeregisterInstanceEventNotificationAttributes (Prelude.Maybe Prelude.Bool)
+deregisterInstanceEventNotificationAttributes_dryRun = Lens.lens (\DeregisterInstanceEventNotificationAttributes' {dryRun} -> dryRun) (\s@DeregisterInstanceEventNotificationAttributes' {} a -> s {dryRun = a} :: DeregisterInstanceEventNotificationAttributes)
+
+-- | Information about the tag keys to deregister.
+deregisterInstanceEventNotificationAttributes_instanceTagAttribute :: Lens.Lens' DeregisterInstanceEventNotificationAttributes (Prelude.Maybe DeregisterInstanceTagAttributeRequest)
+deregisterInstanceEventNotificationAttributes_instanceTagAttribute = Lens.lens (\DeregisterInstanceEventNotificationAttributes' {instanceTagAttribute} -> instanceTagAttribute) (\s@DeregisterInstanceEventNotificationAttributes' {} a -> s {instanceTagAttribute = a} :: DeregisterInstanceEventNotificationAttributes)
+
+instance
+  Core.AWSRequest
+    DeregisterInstanceEventNotificationAttributes
+  where
+  type
+    AWSResponse
+      DeregisterInstanceEventNotificationAttributes =
+      DeregisterInstanceEventNotificationAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeregisterInstanceEventNotificationAttributesResponse'
+            Prelude.<$> (x Data..@? "instanceTagAttribute")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeregisterInstanceEventNotificationAttributes
+  where
+  hashWithSalt
+    _salt
+    DeregisterInstanceEventNotificationAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceTagAttribute
+
+instance
+  Prelude.NFData
+    DeregisterInstanceEventNotificationAttributes
+  where
+  rnf
+    DeregisterInstanceEventNotificationAttributes' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf instanceTagAttribute
+
+instance
+  Data.ToHeaders
+    DeregisterInstanceEventNotificationAttributes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeregisterInstanceEventNotificationAttributes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeregisterInstanceEventNotificationAttributes
+  where
+  toQuery
+    DeregisterInstanceEventNotificationAttributes' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DeregisterInstanceEventNotificationAttributes" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "InstanceTagAttribute" Data.=: instanceTagAttribute
+        ]
+
+-- | /See:/ 'newDeregisterInstanceEventNotificationAttributesResponse' smart constructor.
+data DeregisterInstanceEventNotificationAttributesResponse = DeregisterInstanceEventNotificationAttributesResponse'
+  { -- | The resulting set of tag keys.
+    instanceTagAttribute :: Prelude.Maybe InstanceTagNotificationAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterInstanceEventNotificationAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceTagAttribute', 'deregisterInstanceEventNotificationAttributesResponse_instanceTagAttribute' - The resulting set of tag keys.
+--
+-- 'httpStatus', 'deregisterInstanceEventNotificationAttributesResponse_httpStatus' - The response's http status code.
+newDeregisterInstanceEventNotificationAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeregisterInstanceEventNotificationAttributesResponse
+newDeregisterInstanceEventNotificationAttributesResponse
+  pHttpStatus_ =
+    DeregisterInstanceEventNotificationAttributesResponse'
+      { instanceTagAttribute =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The resulting set of tag keys.
+deregisterInstanceEventNotificationAttributesResponse_instanceTagAttribute :: Lens.Lens' DeregisterInstanceEventNotificationAttributesResponse (Prelude.Maybe InstanceTagNotificationAttribute)
+deregisterInstanceEventNotificationAttributesResponse_instanceTagAttribute = Lens.lens (\DeregisterInstanceEventNotificationAttributesResponse' {instanceTagAttribute} -> instanceTagAttribute) (\s@DeregisterInstanceEventNotificationAttributesResponse' {} a -> s {instanceTagAttribute = a} :: DeregisterInstanceEventNotificationAttributesResponse)
+
+-- | The response's http status code.
+deregisterInstanceEventNotificationAttributesResponse_httpStatus :: Lens.Lens' DeregisterInstanceEventNotificationAttributesResponse Prelude.Int
+deregisterInstanceEventNotificationAttributesResponse_httpStatus = Lens.lens (\DeregisterInstanceEventNotificationAttributesResponse' {httpStatus} -> httpStatus) (\s@DeregisterInstanceEventNotificationAttributesResponse' {} a -> s {httpStatus = a} :: DeregisterInstanceEventNotificationAttributesResponse)
+
+instance
+  Prelude.NFData
+    DeregisterInstanceEventNotificationAttributesResponse
+  where
+  rnf
+    DeregisterInstanceEventNotificationAttributesResponse' {..} =
+      Prelude.rnf instanceTagAttribute
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeregisterTransitGatewayMulticastGroupMembers.hs b/gen/Amazonka/EC2/DeregisterTransitGatewayMulticastGroupMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeregisterTransitGatewayMulticastGroupMembers.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeregisterTransitGatewayMulticastGroupMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters the specified members (network interfaces) from the transit
+-- gateway multicast group.
+module Amazonka.EC2.DeregisterTransitGatewayMulticastGroupMembers
+  ( -- * Creating a Request
+    DeregisterTransitGatewayMulticastGroupMembers (..),
+    newDeregisterTransitGatewayMulticastGroupMembers,
+
+    -- * Request Lenses
+    deregisterTransitGatewayMulticastGroupMembers_dryRun,
+    deregisterTransitGatewayMulticastGroupMembers_groupIpAddress,
+    deregisterTransitGatewayMulticastGroupMembers_networkInterfaceIds,
+    deregisterTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    DeregisterTransitGatewayMulticastGroupMembersResponse (..),
+    newDeregisterTransitGatewayMulticastGroupMembersResponse,
+
+    -- * Response Lenses
+    deregisterTransitGatewayMulticastGroupMembersResponse_deregisteredMulticastGroupMembers,
+    deregisterTransitGatewayMulticastGroupMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeregisterTransitGatewayMulticastGroupMembers' smart constructor.
+data DeregisterTransitGatewayMulticastGroupMembers = DeregisterTransitGatewayMulticastGroupMembers'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the group members\' network interfaces.
+    networkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterTransitGatewayMulticastGroupMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deregisterTransitGatewayMulticastGroupMembers_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupIpAddress', 'deregisterTransitGatewayMulticastGroupMembers_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'networkInterfaceIds', 'deregisterTransitGatewayMulticastGroupMembers_networkInterfaceIds' - The IDs of the group members\' network interfaces.
+--
+-- 'transitGatewayMulticastDomainId', 'deregisterTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newDeregisterTransitGatewayMulticastGroupMembers ::
+  DeregisterTransitGatewayMulticastGroupMembers
+newDeregisterTransitGatewayMulticastGroupMembers =
+  DeregisterTransitGatewayMulticastGroupMembers'
+    { dryRun =
+        Prelude.Nothing,
+      groupIpAddress =
+        Prelude.Nothing,
+      networkInterfaceIds =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deregisterTransitGatewayMulticastGroupMembers_dryRun :: Lens.Lens' DeregisterTransitGatewayMulticastGroupMembers (Prelude.Maybe Prelude.Bool)
+deregisterTransitGatewayMulticastGroupMembers_dryRun = Lens.lens (\DeregisterTransitGatewayMulticastGroupMembers' {dryRun} -> dryRun) (\s@DeregisterTransitGatewayMulticastGroupMembers' {} a -> s {dryRun = a} :: DeregisterTransitGatewayMulticastGroupMembers)
+
+-- | The IP address assigned to the transit gateway multicast group.
+deregisterTransitGatewayMulticastGroupMembers_groupIpAddress :: Lens.Lens' DeregisterTransitGatewayMulticastGroupMembers (Prelude.Maybe Prelude.Text)
+deregisterTransitGatewayMulticastGroupMembers_groupIpAddress = Lens.lens (\DeregisterTransitGatewayMulticastGroupMembers' {groupIpAddress} -> groupIpAddress) (\s@DeregisterTransitGatewayMulticastGroupMembers' {} a -> s {groupIpAddress = a} :: DeregisterTransitGatewayMulticastGroupMembers)
+
+-- | The IDs of the group members\' network interfaces.
+deregisterTransitGatewayMulticastGroupMembers_networkInterfaceIds :: Lens.Lens' DeregisterTransitGatewayMulticastGroupMembers (Prelude.Maybe [Prelude.Text])
+deregisterTransitGatewayMulticastGroupMembers_networkInterfaceIds = Lens.lens (\DeregisterTransitGatewayMulticastGroupMembers' {networkInterfaceIds} -> networkInterfaceIds) (\s@DeregisterTransitGatewayMulticastGroupMembers' {} a -> s {networkInterfaceIds = a} :: DeregisterTransitGatewayMulticastGroupMembers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway multicast domain.
+deregisterTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId :: Lens.Lens' DeregisterTransitGatewayMulticastGroupMembers (Prelude.Maybe Prelude.Text)
+deregisterTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId = Lens.lens (\DeregisterTransitGatewayMulticastGroupMembers' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@DeregisterTransitGatewayMulticastGroupMembers' {} a -> s {transitGatewayMulticastDomainId = a} :: DeregisterTransitGatewayMulticastGroupMembers)
+
+instance
+  Core.AWSRequest
+    DeregisterTransitGatewayMulticastGroupMembers
+  where
+  type
+    AWSResponse
+      DeregisterTransitGatewayMulticastGroupMembers =
+      DeregisterTransitGatewayMulticastGroupMembersResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeregisterTransitGatewayMulticastGroupMembersResponse'
+            Prelude.<$> (x Data..@? "deregisteredMulticastGroupMembers")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeregisterTransitGatewayMulticastGroupMembers
+  where
+  hashWithSalt
+    _salt
+    DeregisterTransitGatewayMulticastGroupMembers' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` networkInterfaceIds
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    DeregisterTransitGatewayMulticastGroupMembers
+  where
+  rnf
+    DeregisterTransitGatewayMulticastGroupMembers' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf groupIpAddress
+        `Prelude.seq` Prelude.rnf networkInterfaceIds
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    DeregisterTransitGatewayMulticastGroupMembers
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeregisterTransitGatewayMulticastGroupMembers
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeregisterTransitGatewayMulticastGroupMembers
+  where
+  toQuery
+    DeregisterTransitGatewayMulticastGroupMembers' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DeregisterTransitGatewayMulticastGroupMembers" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "GroupIpAddress" Data.=: groupIpAddress,
+          Data.toQuery
+            ( Data.toQueryList "NetworkInterfaceIds"
+                Prelude.<$> networkInterfaceIds
+            ),
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newDeregisterTransitGatewayMulticastGroupMembersResponse' smart constructor.
+data DeregisterTransitGatewayMulticastGroupMembersResponse = DeregisterTransitGatewayMulticastGroupMembersResponse'
+  { -- | Information about the deregistered members.
+    deregisteredMulticastGroupMembers :: Prelude.Maybe TransitGatewayMulticastDeregisteredGroupMembers,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterTransitGatewayMulticastGroupMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deregisteredMulticastGroupMembers', 'deregisterTransitGatewayMulticastGroupMembersResponse_deregisteredMulticastGroupMembers' - Information about the deregistered members.
+--
+-- 'httpStatus', 'deregisterTransitGatewayMulticastGroupMembersResponse_httpStatus' - The response's http status code.
+newDeregisterTransitGatewayMulticastGroupMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeregisterTransitGatewayMulticastGroupMembersResponse
+newDeregisterTransitGatewayMulticastGroupMembersResponse
+  pHttpStatus_ =
+    DeregisterTransitGatewayMulticastGroupMembersResponse'
+      { deregisteredMulticastGroupMembers =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the deregistered members.
+deregisterTransitGatewayMulticastGroupMembersResponse_deregisteredMulticastGroupMembers :: Lens.Lens' DeregisterTransitGatewayMulticastGroupMembersResponse (Prelude.Maybe TransitGatewayMulticastDeregisteredGroupMembers)
+deregisterTransitGatewayMulticastGroupMembersResponse_deregisteredMulticastGroupMembers = Lens.lens (\DeregisterTransitGatewayMulticastGroupMembersResponse' {deregisteredMulticastGroupMembers} -> deregisteredMulticastGroupMembers) (\s@DeregisterTransitGatewayMulticastGroupMembersResponse' {} a -> s {deregisteredMulticastGroupMembers = a} :: DeregisterTransitGatewayMulticastGroupMembersResponse)
+
+-- | The response's http status code.
+deregisterTransitGatewayMulticastGroupMembersResponse_httpStatus :: Lens.Lens' DeregisterTransitGatewayMulticastGroupMembersResponse Prelude.Int
+deregisterTransitGatewayMulticastGroupMembersResponse_httpStatus = Lens.lens (\DeregisterTransitGatewayMulticastGroupMembersResponse' {httpStatus} -> httpStatus) (\s@DeregisterTransitGatewayMulticastGroupMembersResponse' {} a -> s {httpStatus = a} :: DeregisterTransitGatewayMulticastGroupMembersResponse)
+
+instance
+  Prelude.NFData
+    DeregisterTransitGatewayMulticastGroupMembersResponse
+  where
+  rnf
+    DeregisterTransitGatewayMulticastGroupMembersResponse' {..} =
+      Prelude.rnf deregisteredMulticastGroupMembers
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DeregisterTransitGatewayMulticastGroupSources.hs b/gen/Amazonka/EC2/DeregisterTransitGatewayMulticastGroupSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DeregisterTransitGatewayMulticastGroupSources.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DeregisterTransitGatewayMulticastGroupSources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deregisters the specified sources (network interfaces) from the transit
+-- gateway multicast group.
+module Amazonka.EC2.DeregisterTransitGatewayMulticastGroupSources
+  ( -- * Creating a Request
+    DeregisterTransitGatewayMulticastGroupSources (..),
+    newDeregisterTransitGatewayMulticastGroupSources,
+
+    -- * Request Lenses
+    deregisterTransitGatewayMulticastGroupSources_dryRun,
+    deregisterTransitGatewayMulticastGroupSources_groupIpAddress,
+    deregisterTransitGatewayMulticastGroupSources_networkInterfaceIds,
+    deregisterTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    DeregisterTransitGatewayMulticastGroupSourcesResponse (..),
+    newDeregisterTransitGatewayMulticastGroupSourcesResponse,
+
+    -- * Response Lenses
+    deregisterTransitGatewayMulticastGroupSourcesResponse_deregisteredMulticastGroupSources,
+    deregisterTransitGatewayMulticastGroupSourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeregisterTransitGatewayMulticastGroupSources' smart constructor.
+data DeregisterTransitGatewayMulticastGroupSources = DeregisterTransitGatewayMulticastGroupSources'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the group sources\' network interfaces.
+    networkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterTransitGatewayMulticastGroupSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'deregisterTransitGatewayMulticastGroupSources_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupIpAddress', 'deregisterTransitGatewayMulticastGroupSources_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'networkInterfaceIds', 'deregisterTransitGatewayMulticastGroupSources_networkInterfaceIds' - The IDs of the group sources\' network interfaces.
+--
+-- 'transitGatewayMulticastDomainId', 'deregisterTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newDeregisterTransitGatewayMulticastGroupSources ::
+  DeregisterTransitGatewayMulticastGroupSources
+newDeregisterTransitGatewayMulticastGroupSources =
+  DeregisterTransitGatewayMulticastGroupSources'
+    { dryRun =
+        Prelude.Nothing,
+      groupIpAddress =
+        Prelude.Nothing,
+      networkInterfaceIds =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+deregisterTransitGatewayMulticastGroupSources_dryRun :: Lens.Lens' DeregisterTransitGatewayMulticastGroupSources (Prelude.Maybe Prelude.Bool)
+deregisterTransitGatewayMulticastGroupSources_dryRun = Lens.lens (\DeregisterTransitGatewayMulticastGroupSources' {dryRun} -> dryRun) (\s@DeregisterTransitGatewayMulticastGroupSources' {} a -> s {dryRun = a} :: DeregisterTransitGatewayMulticastGroupSources)
+
+-- | The IP address assigned to the transit gateway multicast group.
+deregisterTransitGatewayMulticastGroupSources_groupIpAddress :: Lens.Lens' DeregisterTransitGatewayMulticastGroupSources (Prelude.Maybe Prelude.Text)
+deregisterTransitGatewayMulticastGroupSources_groupIpAddress = Lens.lens (\DeregisterTransitGatewayMulticastGroupSources' {groupIpAddress} -> groupIpAddress) (\s@DeregisterTransitGatewayMulticastGroupSources' {} a -> s {groupIpAddress = a} :: DeregisterTransitGatewayMulticastGroupSources)
+
+-- | The IDs of the group sources\' network interfaces.
+deregisterTransitGatewayMulticastGroupSources_networkInterfaceIds :: Lens.Lens' DeregisterTransitGatewayMulticastGroupSources (Prelude.Maybe [Prelude.Text])
+deregisterTransitGatewayMulticastGroupSources_networkInterfaceIds = Lens.lens (\DeregisterTransitGatewayMulticastGroupSources' {networkInterfaceIds} -> networkInterfaceIds) (\s@DeregisterTransitGatewayMulticastGroupSources' {} a -> s {networkInterfaceIds = a} :: DeregisterTransitGatewayMulticastGroupSources) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway multicast domain.
+deregisterTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId :: Lens.Lens' DeregisterTransitGatewayMulticastGroupSources (Prelude.Maybe Prelude.Text)
+deregisterTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId = Lens.lens (\DeregisterTransitGatewayMulticastGroupSources' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@DeregisterTransitGatewayMulticastGroupSources' {} a -> s {transitGatewayMulticastDomainId = a} :: DeregisterTransitGatewayMulticastGroupSources)
+
+instance
+  Core.AWSRequest
+    DeregisterTransitGatewayMulticastGroupSources
+  where
+  type
+    AWSResponse
+      DeregisterTransitGatewayMulticastGroupSources =
+      DeregisterTransitGatewayMulticastGroupSourcesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DeregisterTransitGatewayMulticastGroupSourcesResponse'
+            Prelude.<$> (x Data..@? "deregisteredMulticastGroupSources")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeregisterTransitGatewayMulticastGroupSources
+  where
+  hashWithSalt
+    _salt
+    DeregisterTransitGatewayMulticastGroupSources' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` networkInterfaceIds
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    DeregisterTransitGatewayMulticastGroupSources
+  where
+  rnf
+    DeregisterTransitGatewayMulticastGroupSources' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf groupIpAddress
+        `Prelude.seq` Prelude.rnf networkInterfaceIds
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    DeregisterTransitGatewayMulticastGroupSources
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DeregisterTransitGatewayMulticastGroupSources
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeregisterTransitGatewayMulticastGroupSources
+  where
+  toQuery
+    DeregisterTransitGatewayMulticastGroupSources' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DeregisterTransitGatewayMulticastGroupSources" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "GroupIpAddress" Data.=: groupIpAddress,
+          Data.toQuery
+            ( Data.toQueryList "NetworkInterfaceIds"
+                Prelude.<$> networkInterfaceIds
+            ),
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newDeregisterTransitGatewayMulticastGroupSourcesResponse' smart constructor.
+data DeregisterTransitGatewayMulticastGroupSourcesResponse = DeregisterTransitGatewayMulticastGroupSourcesResponse'
+  { -- | Information about the deregistered group sources.
+    deregisteredMulticastGroupSources :: Prelude.Maybe TransitGatewayMulticastDeregisteredGroupSources,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterTransitGatewayMulticastGroupSourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deregisteredMulticastGroupSources', 'deregisterTransitGatewayMulticastGroupSourcesResponse_deregisteredMulticastGroupSources' - Information about the deregistered group sources.
+--
+-- 'httpStatus', 'deregisterTransitGatewayMulticastGroupSourcesResponse_httpStatus' - The response's http status code.
+newDeregisterTransitGatewayMulticastGroupSourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeregisterTransitGatewayMulticastGroupSourcesResponse
+newDeregisterTransitGatewayMulticastGroupSourcesResponse
+  pHttpStatus_ =
+    DeregisterTransitGatewayMulticastGroupSourcesResponse'
+      { deregisteredMulticastGroupSources =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the deregistered group sources.
+deregisterTransitGatewayMulticastGroupSourcesResponse_deregisteredMulticastGroupSources :: Lens.Lens' DeregisterTransitGatewayMulticastGroupSourcesResponse (Prelude.Maybe TransitGatewayMulticastDeregisteredGroupSources)
+deregisterTransitGatewayMulticastGroupSourcesResponse_deregisteredMulticastGroupSources = Lens.lens (\DeregisterTransitGatewayMulticastGroupSourcesResponse' {deregisteredMulticastGroupSources} -> deregisteredMulticastGroupSources) (\s@DeregisterTransitGatewayMulticastGroupSourcesResponse' {} a -> s {deregisteredMulticastGroupSources = a} :: DeregisterTransitGatewayMulticastGroupSourcesResponse)
+
+-- | The response's http status code.
+deregisterTransitGatewayMulticastGroupSourcesResponse_httpStatus :: Lens.Lens' DeregisterTransitGatewayMulticastGroupSourcesResponse Prelude.Int
+deregisterTransitGatewayMulticastGroupSourcesResponse_httpStatus = Lens.lens (\DeregisterTransitGatewayMulticastGroupSourcesResponse' {httpStatus} -> httpStatus) (\s@DeregisterTransitGatewayMulticastGroupSourcesResponse' {} a -> s {httpStatus = a} :: DeregisterTransitGatewayMulticastGroupSourcesResponse)
+
+instance
+  Prelude.NFData
+    DeregisterTransitGatewayMulticastGroupSourcesResponse
+  where
+  rnf
+    DeregisterTransitGatewayMulticastGroupSourcesResponse' {..} =
+      Prelude.rnf deregisteredMulticastGroupSources
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAccountAttributes.hs b/gen/Amazonka/EC2/DescribeAccountAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAccountAttributes.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAccountAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes attributes of your Amazon Web Services account. The following
+-- are the supported account attributes:
+--
+-- -   @supported-platforms@: Indicates whether your account can launch
+--     instances into EC2-Classic and EC2-VPC, or only into EC2-VPC.
+--
+-- -   @default-vpc@: The ID of the default VPC for your account, or
+--     @none@.
+--
+-- -   @max-instances@: This attribute is no longer supported. The returned
+--     value does not reflect your actual vCPU limit for running On-Demand
+--     Instances. For more information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-on-demand-instances.html#ec2-on-demand-instances-limits On-Demand Instance Limits>
+--     in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- -   @vpc-max-security-groups-per-interface@: The maximum number of
+--     security groups that you can assign to a network interface.
+--
+-- -   @max-elastic-ips@: The maximum number of Elastic IP addresses that
+--     you can allocate for use with EC2-Classic.
+--
+-- -   @vpc-max-elastic-ips@: The maximum number of Elastic IP addresses
+--     that you can allocate for use with EC2-VPC.
+--
+-- We are retiring EC2-Classic on August 15, 2022. We recommend that you
+-- migrate from EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribeAccountAttributes
+  ( -- * Creating a Request
+    DescribeAccountAttributes (..),
+    newDescribeAccountAttributes,
+
+    -- * Request Lenses
+    describeAccountAttributes_attributeNames,
+    describeAccountAttributes_dryRun,
+
+    -- * Destructuring the Response
+    DescribeAccountAttributesResponse (..),
+    newDescribeAccountAttributesResponse,
+
+    -- * Response Lenses
+    describeAccountAttributesResponse_accountAttributes,
+    describeAccountAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAccountAttributes' smart constructor.
+data DescribeAccountAttributes = DescribeAccountAttributes'
+  { -- | The account attribute names.
+    attributeNames :: Prelude.Maybe [AccountAttributeName],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeNames', 'describeAccountAttributes_attributeNames' - The account attribute names.
+--
+-- 'dryRun', 'describeAccountAttributes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDescribeAccountAttributes ::
+  DescribeAccountAttributes
+newDescribeAccountAttributes =
+  DescribeAccountAttributes'
+    { attributeNames =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing
+    }
+
+-- | The account attribute names.
+describeAccountAttributes_attributeNames :: Lens.Lens' DescribeAccountAttributes (Prelude.Maybe [AccountAttributeName])
+describeAccountAttributes_attributeNames = Lens.lens (\DescribeAccountAttributes' {attributeNames} -> attributeNames) (\s@DescribeAccountAttributes' {} a -> s {attributeNames = a} :: DescribeAccountAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAccountAttributes_dryRun :: Lens.Lens' DescribeAccountAttributes (Prelude.Maybe Prelude.Bool)
+describeAccountAttributes_dryRun = Lens.lens (\DescribeAccountAttributes' {dryRun} -> dryRun) (\s@DescribeAccountAttributes' {} a -> s {dryRun = a} :: DescribeAccountAttributes)
+
+instance Core.AWSRequest DescribeAccountAttributes where
+  type
+    AWSResponse DescribeAccountAttributes =
+      DescribeAccountAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAccountAttributesResponse'
+            Prelude.<$> ( x
+                            Data..@? "accountAttributeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAccountAttributes where
+  hashWithSalt _salt DescribeAccountAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeNames
+      `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData DescribeAccountAttributes where
+  rnf DescribeAccountAttributes' {..} =
+    Prelude.rnf attributeNames
+      `Prelude.seq` Prelude.rnf dryRun
+
+instance Data.ToHeaders DescribeAccountAttributes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAccountAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAccountAttributes where
+  toQuery DescribeAccountAttributes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeAccountAttributes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AttributeName"
+              Prelude.<$> attributeNames
+          ),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newDescribeAccountAttributesResponse' smart constructor.
+data DescribeAccountAttributesResponse = DescribeAccountAttributesResponse'
+  { -- | Information about the account attributes.
+    accountAttributes :: Prelude.Maybe [AccountAttribute],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAccountAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountAttributes', 'describeAccountAttributesResponse_accountAttributes' - Information about the account attributes.
+--
+-- 'httpStatus', 'describeAccountAttributesResponse_httpStatus' - The response's http status code.
+newDescribeAccountAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAccountAttributesResponse
+newDescribeAccountAttributesResponse pHttpStatus_ =
+  DescribeAccountAttributesResponse'
+    { accountAttributes =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the account attributes.
+describeAccountAttributesResponse_accountAttributes :: Lens.Lens' DescribeAccountAttributesResponse (Prelude.Maybe [AccountAttribute])
+describeAccountAttributesResponse_accountAttributes = Lens.lens (\DescribeAccountAttributesResponse' {accountAttributes} -> accountAttributes) (\s@DescribeAccountAttributesResponse' {} a -> s {accountAttributes = a} :: DescribeAccountAttributesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeAccountAttributesResponse_httpStatus :: Lens.Lens' DescribeAccountAttributesResponse Prelude.Int
+describeAccountAttributesResponse_httpStatus = Lens.lens (\DescribeAccountAttributesResponse' {httpStatus} -> httpStatus) (\s@DescribeAccountAttributesResponse' {} a -> s {httpStatus = a} :: DescribeAccountAttributesResponse)
+
+instance
+  Prelude.NFData
+    DescribeAccountAttributesResponse
+  where
+  rnf DescribeAccountAttributesResponse' {..} =
+    Prelude.rnf accountAttributes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAddressTransfers.hs b/gen/Amazonka/EC2/DescribeAddressTransfers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAddressTransfers.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAddressTransfers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes an Elastic IP address transfer. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro Transfer Elastic IP addresses>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeAddressTransfers
+  ( -- * Creating a Request
+    DescribeAddressTransfers (..),
+    newDescribeAddressTransfers,
+
+    -- * Request Lenses
+    describeAddressTransfers_allocationIds,
+    describeAddressTransfers_dryRun,
+    describeAddressTransfers_maxResults,
+    describeAddressTransfers_nextToken,
+
+    -- * Destructuring the Response
+    DescribeAddressTransfersResponse (..),
+    newDescribeAddressTransfersResponse,
+
+    -- * Response Lenses
+    describeAddressTransfersResponse_addressTransfers,
+    describeAddressTransfersResponse_nextToken,
+    describeAddressTransfersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAddressTransfers' smart constructor.
+data DescribeAddressTransfers = DescribeAddressTransfers'
+  { -- | The allocation IDs of Elastic IP addresses.
+    allocationIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of address transfers to return in one page of
+    -- results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Specify the pagination token from a previous request to retrieve the
+    -- next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddressTransfers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationIds', 'describeAddressTransfers_allocationIds' - The allocation IDs of Elastic IP addresses.
+--
+-- 'dryRun', 'describeAddressTransfers_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'describeAddressTransfers_maxResults' - The maximum number of address transfers to return in one page of
+-- results.
+--
+-- 'nextToken', 'describeAddressTransfers_nextToken' - Specify the pagination token from a previous request to retrieve the
+-- next page of results.
+newDescribeAddressTransfers ::
+  DescribeAddressTransfers
+newDescribeAddressTransfers =
+  DescribeAddressTransfers'
+    { allocationIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The allocation IDs of Elastic IP addresses.
+describeAddressTransfers_allocationIds :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe [Prelude.Text])
+describeAddressTransfers_allocationIds = Lens.lens (\DescribeAddressTransfers' {allocationIds} -> allocationIds) (\s@DescribeAddressTransfers' {} a -> s {allocationIds = a} :: DescribeAddressTransfers) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAddressTransfers_dryRun :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe Prelude.Bool)
+describeAddressTransfers_dryRun = Lens.lens (\DescribeAddressTransfers' {dryRun} -> dryRun) (\s@DescribeAddressTransfers' {} a -> s {dryRun = a} :: DescribeAddressTransfers)
+
+-- | The maximum number of address transfers to return in one page of
+-- results.
+describeAddressTransfers_maxResults :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe Prelude.Natural)
+describeAddressTransfers_maxResults = Lens.lens (\DescribeAddressTransfers' {maxResults} -> maxResults) (\s@DescribeAddressTransfers' {} a -> s {maxResults = a} :: DescribeAddressTransfers)
+
+-- | Specify the pagination token from a previous request to retrieve the
+-- next page of results.
+describeAddressTransfers_nextToken :: Lens.Lens' DescribeAddressTransfers (Prelude.Maybe Prelude.Text)
+describeAddressTransfers_nextToken = Lens.lens (\DescribeAddressTransfers' {nextToken} -> nextToken) (\s@DescribeAddressTransfers' {} a -> s {nextToken = a} :: DescribeAddressTransfers)
+
+instance Core.AWSPager DescribeAddressTransfers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeAddressTransfersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeAddressTransfersResponse_addressTransfers
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeAddressTransfers_nextToken
+          Lens..~ rs
+          Lens.^? describeAddressTransfersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeAddressTransfers where
+  type
+    AWSResponse DescribeAddressTransfers =
+      DescribeAddressTransfersResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAddressTransfersResponse'
+            Prelude.<$> ( x
+                            Data..@? "addressTransferSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddressTransfers where
+  hashWithSalt _salt DescribeAddressTransfers' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeAddressTransfers where
+  rnf DescribeAddressTransfers' {..} =
+    Prelude.rnf allocationIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeAddressTransfers where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAddressTransfers where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAddressTransfers where
+  toQuery DescribeAddressTransfers' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeAddressTransfers" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AllocationId"
+              Prelude.<$> allocationIds
+          ),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeAddressTransfersResponse' smart constructor.
+data DescribeAddressTransfersResponse = DescribeAddressTransfersResponse'
+  { -- | The Elastic IP address transfer.
+    addressTransfers :: Prelude.Maybe [AddressTransfer],
+    -- | Specify the pagination token from a previous request to retrieve the
+    -- next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddressTransfersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressTransfers', 'describeAddressTransfersResponse_addressTransfers' - The Elastic IP address transfer.
+--
+-- 'nextToken', 'describeAddressTransfersResponse_nextToken' - Specify the pagination token from a previous request to retrieve the
+-- next page of results.
+--
+-- 'httpStatus', 'describeAddressTransfersResponse_httpStatus' - The response's http status code.
+newDescribeAddressTransfersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddressTransfersResponse
+newDescribeAddressTransfersResponse pHttpStatus_ =
+  DescribeAddressTransfersResponse'
+    { addressTransfers =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Elastic IP address transfer.
+describeAddressTransfersResponse_addressTransfers :: Lens.Lens' DescribeAddressTransfersResponse (Prelude.Maybe [AddressTransfer])
+describeAddressTransfersResponse_addressTransfers = Lens.lens (\DescribeAddressTransfersResponse' {addressTransfers} -> addressTransfers) (\s@DescribeAddressTransfersResponse' {} a -> s {addressTransfers = a} :: DescribeAddressTransfersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify the pagination token from a previous request to retrieve the
+-- next page of results.
+describeAddressTransfersResponse_nextToken :: Lens.Lens' DescribeAddressTransfersResponse (Prelude.Maybe Prelude.Text)
+describeAddressTransfersResponse_nextToken = Lens.lens (\DescribeAddressTransfersResponse' {nextToken} -> nextToken) (\s@DescribeAddressTransfersResponse' {} a -> s {nextToken = a} :: DescribeAddressTransfersResponse)
+
+-- | The response's http status code.
+describeAddressTransfersResponse_httpStatus :: Lens.Lens' DescribeAddressTransfersResponse Prelude.Int
+describeAddressTransfersResponse_httpStatus = Lens.lens (\DescribeAddressTransfersResponse' {httpStatus} -> httpStatus) (\s@DescribeAddressTransfersResponse' {} a -> s {httpStatus = a} :: DescribeAddressTransfersResponse)
+
+instance
+  Prelude.NFData
+    DescribeAddressTransfersResponse
+  where
+  rnf DescribeAddressTransfersResponse' {..} =
+    Prelude.rnf addressTransfers
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAddresses.hs b/gen/Amazonka/EC2/DescribeAddresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAddresses.hs
@@ -0,0 +1,337 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAddresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified Elastic IP addresses or all of your Elastic IP
+-- addresses.
+--
+-- An Elastic IP address is for use in either the EC2-Classic platform or
+-- in a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DescribeAddresses
+  ( -- * Creating a Request
+    DescribeAddresses (..),
+    newDescribeAddresses,
+
+    -- * Request Lenses
+    describeAddresses_allocationIds,
+    describeAddresses_dryRun,
+    describeAddresses_filters,
+    describeAddresses_publicIps,
+
+    -- * Destructuring the Response
+    DescribeAddressesResponse (..),
+    newDescribeAddressesResponse,
+
+    -- * Response Lenses
+    describeAddressesResponse_addresses,
+    describeAddressesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAddresses' smart constructor.
+data DescribeAddresses = DescribeAddresses'
+  { -- | [EC2-VPC] Information about the allocation IDs.
+    allocationIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @allocation-id@ - [EC2-VPC] The allocation ID for the address.
+    --
+    -- -   @association-id@ - [EC2-VPC] The association ID for the address.
+    --
+    -- -   @domain@ - Indicates whether the address is for use in EC2-Classic
+    --     (@standard@) or in a VPC (@vpc@).
+    --
+    -- -   @instance-id@ - The ID of the instance the address is associated
+    --     with, if any.
+    --
+    -- -   @network-border-group@ - A unique set of Availability Zones, Local
+    --     Zones, or Wavelength Zones from where Amazon Web Services advertises
+    --     IP addresses.
+    --
+    -- -   @network-interface-id@ - [EC2-VPC] The ID of the network interface
+    --     that the address is associated with, if any.
+    --
+    -- -   @network-interface-owner-id@ - The Amazon Web Services account ID of
+    --     the owner.
+    --
+    -- -   @private-ip-address@ - [EC2-VPC] The private IP address associated
+    --     with the Elastic IP address.
+    --
+    -- -   @public-ip@ - The Elastic IP address, or the carrier IP address.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more Elastic IP addresses.
+    --
+    -- Default: Describes all your Elastic IP addresses.
+    publicIps :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationIds', 'describeAddresses_allocationIds' - [EC2-VPC] Information about the allocation IDs.
+--
+-- 'dryRun', 'describeAddresses_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeAddresses_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @allocation-id@ - [EC2-VPC] The allocation ID for the address.
+--
+-- -   @association-id@ - [EC2-VPC] The association ID for the address.
+--
+-- -   @domain@ - Indicates whether the address is for use in EC2-Classic
+--     (@standard@) or in a VPC (@vpc@).
+--
+-- -   @instance-id@ - The ID of the instance the address is associated
+--     with, if any.
+--
+-- -   @network-border-group@ - A unique set of Availability Zones, Local
+--     Zones, or Wavelength Zones from where Amazon Web Services advertises
+--     IP addresses.
+--
+-- -   @network-interface-id@ - [EC2-VPC] The ID of the network interface
+--     that the address is associated with, if any.
+--
+-- -   @network-interface-owner-id@ - The Amazon Web Services account ID of
+--     the owner.
+--
+-- -   @private-ip-address@ - [EC2-VPC] The private IP address associated
+--     with the Elastic IP address.
+--
+-- -   @public-ip@ - The Elastic IP address, or the carrier IP address.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'publicIps', 'describeAddresses_publicIps' - One or more Elastic IP addresses.
+--
+-- Default: Describes all your Elastic IP addresses.
+newDescribeAddresses ::
+  DescribeAddresses
+newDescribeAddresses =
+  DescribeAddresses'
+    { allocationIds = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      publicIps = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] Information about the allocation IDs.
+describeAddresses_allocationIds :: Lens.Lens' DescribeAddresses (Prelude.Maybe [Prelude.Text])
+describeAddresses_allocationIds = Lens.lens (\DescribeAddresses' {allocationIds} -> allocationIds) (\s@DescribeAddresses' {} a -> s {allocationIds = a} :: DescribeAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAddresses_dryRun :: Lens.Lens' DescribeAddresses (Prelude.Maybe Prelude.Bool)
+describeAddresses_dryRun = Lens.lens (\DescribeAddresses' {dryRun} -> dryRun) (\s@DescribeAddresses' {} a -> s {dryRun = a} :: DescribeAddresses)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @allocation-id@ - [EC2-VPC] The allocation ID for the address.
+--
+-- -   @association-id@ - [EC2-VPC] The association ID for the address.
+--
+-- -   @domain@ - Indicates whether the address is for use in EC2-Classic
+--     (@standard@) or in a VPC (@vpc@).
+--
+-- -   @instance-id@ - The ID of the instance the address is associated
+--     with, if any.
+--
+-- -   @network-border-group@ - A unique set of Availability Zones, Local
+--     Zones, or Wavelength Zones from where Amazon Web Services advertises
+--     IP addresses.
+--
+-- -   @network-interface-id@ - [EC2-VPC] The ID of the network interface
+--     that the address is associated with, if any.
+--
+-- -   @network-interface-owner-id@ - The Amazon Web Services account ID of
+--     the owner.
+--
+-- -   @private-ip-address@ - [EC2-VPC] The private IP address associated
+--     with the Elastic IP address.
+--
+-- -   @public-ip@ - The Elastic IP address, or the carrier IP address.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeAddresses_filters :: Lens.Lens' DescribeAddresses (Prelude.Maybe [Filter])
+describeAddresses_filters = Lens.lens (\DescribeAddresses' {filters} -> filters) (\s@DescribeAddresses' {} a -> s {filters = a} :: DescribeAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more Elastic IP addresses.
+--
+-- Default: Describes all your Elastic IP addresses.
+describeAddresses_publicIps :: Lens.Lens' DescribeAddresses (Prelude.Maybe [Prelude.Text])
+describeAddresses_publicIps = Lens.lens (\DescribeAddresses' {publicIps} -> publicIps) (\s@DescribeAddresses' {} a -> s {publicIps = a} :: DescribeAddresses) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeAddresses where
+  type
+    AWSResponse DescribeAddresses =
+      DescribeAddressesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAddressesResponse'
+            Prelude.<$> ( x
+                            Data..@? "addressesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddresses where
+  hashWithSalt _salt DescribeAddresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` publicIps
+
+instance Prelude.NFData DescribeAddresses where
+  rnf DescribeAddresses' {..} =
+    Prelude.rnf allocationIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf publicIps
+
+instance Data.ToHeaders DescribeAddresses where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAddresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAddresses where
+  toQuery DescribeAddresses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeAddresses" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AllocationId"
+              Prelude.<$> allocationIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "PublicIp" Prelude.<$> publicIps)
+      ]
+
+-- | /See:/ 'newDescribeAddressesResponse' smart constructor.
+data DescribeAddressesResponse = DescribeAddressesResponse'
+  { -- | Information about the Elastic IP addresses.
+    addresses :: Prelude.Maybe [Address],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addresses', 'describeAddressesResponse_addresses' - Information about the Elastic IP addresses.
+--
+-- 'httpStatus', 'describeAddressesResponse_httpStatus' - The response's http status code.
+newDescribeAddressesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddressesResponse
+newDescribeAddressesResponse pHttpStatus_ =
+  DescribeAddressesResponse'
+    { addresses =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Elastic IP addresses.
+describeAddressesResponse_addresses :: Lens.Lens' DescribeAddressesResponse (Prelude.Maybe [Address])
+describeAddressesResponse_addresses = Lens.lens (\DescribeAddressesResponse' {addresses} -> addresses) (\s@DescribeAddressesResponse' {} a -> s {addresses = a} :: DescribeAddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeAddressesResponse_httpStatus :: Lens.Lens' DescribeAddressesResponse Prelude.Int
+describeAddressesResponse_httpStatus = Lens.lens (\DescribeAddressesResponse' {httpStatus} -> httpStatus) (\s@DescribeAddressesResponse' {} a -> s {httpStatus = a} :: DescribeAddressesResponse)
+
+instance Prelude.NFData DescribeAddressesResponse where
+  rnf DescribeAddressesResponse' {..} =
+    Prelude.rnf addresses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAddressesAttribute.hs b/gen/Amazonka/EC2/DescribeAddressesAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAddressesAttribute.hs
@@ -0,0 +1,277 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAddressesAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the attributes of the specified Elastic IP addresses. For
+-- requirements, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS Using reverse DNS for email applications>.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeAddressesAttribute
+  ( -- * Creating a Request
+    DescribeAddressesAttribute (..),
+    newDescribeAddressesAttribute,
+
+    -- * Request Lenses
+    describeAddressesAttribute_allocationIds,
+    describeAddressesAttribute_attribute,
+    describeAddressesAttribute_dryRun,
+    describeAddressesAttribute_maxResults,
+    describeAddressesAttribute_nextToken,
+
+    -- * Destructuring the Response
+    DescribeAddressesAttributeResponse (..),
+    newDescribeAddressesAttributeResponse,
+
+    -- * Response Lenses
+    describeAddressesAttributeResponse_addresses,
+    describeAddressesAttributeResponse_nextToken,
+    describeAddressesAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAddressesAttribute' smart constructor.
+data DescribeAddressesAttribute = DescribeAddressesAttribute'
+  { -- | [EC2-VPC] The allocation IDs.
+    allocationIds :: Prelude.Maybe [Prelude.Text],
+    -- | The attribute of the IP address.
+    attribute :: Prelude.Maybe AddressAttributeName,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddressesAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationIds', 'describeAddressesAttribute_allocationIds' - [EC2-VPC] The allocation IDs.
+--
+-- 'attribute', 'describeAddressesAttribute_attribute' - The attribute of the IP address.
+--
+-- 'dryRun', 'describeAddressesAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'describeAddressesAttribute_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeAddressesAttribute_nextToken' - The token for the next page of results.
+newDescribeAddressesAttribute ::
+  DescribeAddressesAttribute
+newDescribeAddressesAttribute =
+  DescribeAddressesAttribute'
+    { allocationIds =
+        Prelude.Nothing,
+      attribute = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] The allocation IDs.
+describeAddressesAttribute_allocationIds :: Lens.Lens' DescribeAddressesAttribute (Prelude.Maybe [Prelude.Text])
+describeAddressesAttribute_allocationIds = Lens.lens (\DescribeAddressesAttribute' {allocationIds} -> allocationIds) (\s@DescribeAddressesAttribute' {} a -> s {allocationIds = a} :: DescribeAddressesAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The attribute of the IP address.
+describeAddressesAttribute_attribute :: Lens.Lens' DescribeAddressesAttribute (Prelude.Maybe AddressAttributeName)
+describeAddressesAttribute_attribute = Lens.lens (\DescribeAddressesAttribute' {attribute} -> attribute) (\s@DescribeAddressesAttribute' {} a -> s {attribute = a} :: DescribeAddressesAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAddressesAttribute_dryRun :: Lens.Lens' DescribeAddressesAttribute (Prelude.Maybe Prelude.Bool)
+describeAddressesAttribute_dryRun = Lens.lens (\DescribeAddressesAttribute' {dryRun} -> dryRun) (\s@DescribeAddressesAttribute' {} a -> s {dryRun = a} :: DescribeAddressesAttribute)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeAddressesAttribute_maxResults :: Lens.Lens' DescribeAddressesAttribute (Prelude.Maybe Prelude.Natural)
+describeAddressesAttribute_maxResults = Lens.lens (\DescribeAddressesAttribute' {maxResults} -> maxResults) (\s@DescribeAddressesAttribute' {} a -> s {maxResults = a} :: DescribeAddressesAttribute)
+
+-- | The token for the next page of results.
+describeAddressesAttribute_nextToken :: Lens.Lens' DescribeAddressesAttribute (Prelude.Maybe Prelude.Text)
+describeAddressesAttribute_nextToken = Lens.lens (\DescribeAddressesAttribute' {nextToken} -> nextToken) (\s@DescribeAddressesAttribute' {} a -> s {nextToken = a} :: DescribeAddressesAttribute)
+
+instance Core.AWSPager DescribeAddressesAttribute where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeAddressesAttributeResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeAddressesAttributeResponse_addresses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeAddressesAttribute_nextToken
+          Lens..~ rs
+          Lens.^? describeAddressesAttributeResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeAddressesAttribute where
+  type
+    AWSResponse DescribeAddressesAttribute =
+      DescribeAddressesAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAddressesAttributeResponse'
+            Prelude.<$> ( x
+                            Data..@? "addressSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddressesAttribute where
+  hashWithSalt _salt DescribeAddressesAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationIds
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeAddressesAttribute where
+  rnf DescribeAddressesAttribute' {..} =
+    Prelude.rnf allocationIds
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeAddressesAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAddressesAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAddressesAttribute where
+  toQuery DescribeAddressesAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeAddressesAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AllocationId"
+              Prelude.<$> allocationIds
+          ),
+        "Attribute" Data.=: attribute,
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeAddressesAttributeResponse' smart constructor.
+data DescribeAddressesAttributeResponse = DescribeAddressesAttributeResponse'
+  { -- | Information about the IP addresses.
+    addresses :: Prelude.Maybe [AddressAttribute],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddressesAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addresses', 'describeAddressesAttributeResponse_addresses' - Information about the IP addresses.
+--
+-- 'nextToken', 'describeAddressesAttributeResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeAddressesAttributeResponse_httpStatus' - The response's http status code.
+newDescribeAddressesAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddressesAttributeResponse
+newDescribeAddressesAttributeResponse pHttpStatus_ =
+  DescribeAddressesAttributeResponse'
+    { addresses =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IP addresses.
+describeAddressesAttributeResponse_addresses :: Lens.Lens' DescribeAddressesAttributeResponse (Prelude.Maybe [AddressAttribute])
+describeAddressesAttributeResponse_addresses = Lens.lens (\DescribeAddressesAttributeResponse' {addresses} -> addresses) (\s@DescribeAddressesAttributeResponse' {} a -> s {addresses = a} :: DescribeAddressesAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeAddressesAttributeResponse_nextToken :: Lens.Lens' DescribeAddressesAttributeResponse (Prelude.Maybe Prelude.Text)
+describeAddressesAttributeResponse_nextToken = Lens.lens (\DescribeAddressesAttributeResponse' {nextToken} -> nextToken) (\s@DescribeAddressesAttributeResponse' {} a -> s {nextToken = a} :: DescribeAddressesAttributeResponse)
+
+-- | The response's http status code.
+describeAddressesAttributeResponse_httpStatus :: Lens.Lens' DescribeAddressesAttributeResponse Prelude.Int
+describeAddressesAttributeResponse_httpStatus = Lens.lens (\DescribeAddressesAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeAddressesAttributeResponse' {} a -> s {httpStatus = a} :: DescribeAddressesAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeAddressesAttributeResponse
+  where
+  rnf DescribeAddressesAttributeResponse' {..} =
+    Prelude.rnf addresses
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAggregateIdFormat.hs b/gen/Amazonka/EC2/DescribeAggregateIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAggregateIdFormat.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAggregateIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the longer ID format settings for all resource types in a
+-- specific Region. This request is useful for performing a quick audit to
+-- determine whether a specific Region is fully opted in for longer IDs
+-- (17-character IDs).
+--
+-- This request only returns information about resource types that support
+-- longer IDs.
+--
+-- The following resource types support longer IDs: @bundle@ |
+-- @conversion-task@ | @customer-gateway@ | @dhcp-options@ |
+-- @elastic-ip-allocation@ | @elastic-ip-association@ | @export-task@ |
+-- @flow-log@ | @image@ | @import-task@ | @instance@ | @internet-gateway@ |
+-- @network-acl@ | @network-acl-association@ | @network-interface@ |
+-- @network-interface-attachment@ | @prefix-list@ | @reservation@ |
+-- @route-table@ | @route-table-association@ | @security-group@ |
+-- @snapshot@ | @subnet@ | @subnet-cidr-block-association@ | @volume@ |
+-- @vpc@ | @vpc-cidr-block-association@ | @vpc-endpoint@ |
+-- @vpc-peering-connection@ | @vpn-connection@ | @vpn-gateway@.
+module Amazonka.EC2.DescribeAggregateIdFormat
+  ( -- * Creating a Request
+    DescribeAggregateIdFormat (..),
+    newDescribeAggregateIdFormat,
+
+    -- * Request Lenses
+    describeAggregateIdFormat_dryRun,
+
+    -- * Destructuring the Response
+    DescribeAggregateIdFormatResponse (..),
+    newDescribeAggregateIdFormatResponse,
+
+    -- * Response Lenses
+    describeAggregateIdFormatResponse_statuses,
+    describeAggregateIdFormatResponse_useLongIdsAggregated,
+    describeAggregateIdFormatResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAggregateIdFormat' smart constructor.
+data DescribeAggregateIdFormat = DescribeAggregateIdFormat'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAggregateIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeAggregateIdFormat_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDescribeAggregateIdFormat ::
+  DescribeAggregateIdFormat
+newDescribeAggregateIdFormat =
+  DescribeAggregateIdFormat'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAggregateIdFormat_dryRun :: Lens.Lens' DescribeAggregateIdFormat (Prelude.Maybe Prelude.Bool)
+describeAggregateIdFormat_dryRun = Lens.lens (\DescribeAggregateIdFormat' {dryRun} -> dryRun) (\s@DescribeAggregateIdFormat' {} a -> s {dryRun = a} :: DescribeAggregateIdFormat)
+
+instance Core.AWSRequest DescribeAggregateIdFormat where
+  type
+    AWSResponse DescribeAggregateIdFormat =
+      DescribeAggregateIdFormatResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAggregateIdFormatResponse'
+            Prelude.<$> ( x
+                            Data..@? "statusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "useLongIdsAggregated")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAggregateIdFormat where
+  hashWithSalt _salt DescribeAggregateIdFormat' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData DescribeAggregateIdFormat where
+  rnf DescribeAggregateIdFormat' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders DescribeAggregateIdFormat where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAggregateIdFormat where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAggregateIdFormat where
+  toQuery DescribeAggregateIdFormat' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeAggregateIdFormat" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newDescribeAggregateIdFormatResponse' smart constructor.
+data DescribeAggregateIdFormatResponse = DescribeAggregateIdFormatResponse'
+  { -- | Information about each resource\'s ID format.
+    statuses :: Prelude.Maybe [IdFormat],
+    -- | Indicates whether all resource types in the Region are configured to use
+    -- longer IDs. This value is only @true@ if all users are configured to use
+    -- longer IDs for all resources types in the Region.
+    useLongIdsAggregated :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAggregateIdFormatResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statuses', 'describeAggregateIdFormatResponse_statuses' - Information about each resource\'s ID format.
+--
+-- 'useLongIdsAggregated', 'describeAggregateIdFormatResponse_useLongIdsAggregated' - Indicates whether all resource types in the Region are configured to use
+-- longer IDs. This value is only @true@ if all users are configured to use
+-- longer IDs for all resources types in the Region.
+--
+-- 'httpStatus', 'describeAggregateIdFormatResponse_httpStatus' - The response's http status code.
+newDescribeAggregateIdFormatResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAggregateIdFormatResponse
+newDescribeAggregateIdFormatResponse pHttpStatus_ =
+  DescribeAggregateIdFormatResponse'
+    { statuses =
+        Prelude.Nothing,
+      useLongIdsAggregated = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about each resource\'s ID format.
+describeAggregateIdFormatResponse_statuses :: Lens.Lens' DescribeAggregateIdFormatResponse (Prelude.Maybe [IdFormat])
+describeAggregateIdFormatResponse_statuses = Lens.lens (\DescribeAggregateIdFormatResponse' {statuses} -> statuses) (\s@DescribeAggregateIdFormatResponse' {} a -> s {statuses = a} :: DescribeAggregateIdFormatResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether all resource types in the Region are configured to use
+-- longer IDs. This value is only @true@ if all users are configured to use
+-- longer IDs for all resources types in the Region.
+describeAggregateIdFormatResponse_useLongIdsAggregated :: Lens.Lens' DescribeAggregateIdFormatResponse (Prelude.Maybe Prelude.Bool)
+describeAggregateIdFormatResponse_useLongIdsAggregated = Lens.lens (\DescribeAggregateIdFormatResponse' {useLongIdsAggregated} -> useLongIdsAggregated) (\s@DescribeAggregateIdFormatResponse' {} a -> s {useLongIdsAggregated = a} :: DescribeAggregateIdFormatResponse)
+
+-- | The response's http status code.
+describeAggregateIdFormatResponse_httpStatus :: Lens.Lens' DescribeAggregateIdFormatResponse Prelude.Int
+describeAggregateIdFormatResponse_httpStatus = Lens.lens (\DescribeAggregateIdFormatResponse' {httpStatus} -> httpStatus) (\s@DescribeAggregateIdFormatResponse' {} a -> s {httpStatus = a} :: DescribeAggregateIdFormatResponse)
+
+instance
+  Prelude.NFData
+    DescribeAggregateIdFormatResponse
+  where
+  rnf DescribeAggregateIdFormatResponse' {..} =
+    Prelude.rnf statuses
+      `Prelude.seq` Prelude.rnf useLongIdsAggregated
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAvailabilityZones.hs b/gen/Amazonka/EC2/DescribeAvailabilityZones.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAvailabilityZones.hs
@@ -0,0 +1,363 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAvailabilityZones
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the Availability Zones, Local Zones, and Wavelength Zones that
+-- are available to you. If there is an event impacting a zone, you can use
+-- this request to view the state and any provided messages for that zone.
+--
+-- For more information about Availability Zones, Local Zones, and
+-- Wavelength Zones, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html Regions and zones>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DescribeAvailabilityZones
+  ( -- * Creating a Request
+    DescribeAvailabilityZones (..),
+    newDescribeAvailabilityZones,
+
+    -- * Request Lenses
+    describeAvailabilityZones_allAvailabilityZones,
+    describeAvailabilityZones_dryRun,
+    describeAvailabilityZones_filters,
+    describeAvailabilityZones_zoneIds,
+    describeAvailabilityZones_zoneNames,
+
+    -- * Destructuring the Response
+    DescribeAvailabilityZonesResponse (..),
+    newDescribeAvailabilityZonesResponse,
+
+    -- * Response Lenses
+    describeAvailabilityZonesResponse_availabilityZones,
+    describeAvailabilityZonesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAvailabilityZones' smart constructor.
+data DescribeAvailabilityZones = DescribeAvailabilityZones'
+  { -- | Include all Availability Zones, Local Zones, and Wavelength Zones
+    -- regardless of your opt-in status.
+    --
+    -- If you do not use this parameter, the results include only the zones for
+    -- the Regions where you have chosen the option to opt in.
+    allAvailabilityZones :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @group-name@ - For Availability Zones, use the Region name. For
+    --     Local Zones, use the name of the group associated with the Local
+    --     Zone (for example, @us-west-2-lax-1@) For Wavelength Zones, use the
+    --     name of the group associated with the Wavelength Zone (for example,
+    --     @us-east-1-wl1-bos-wlz-1@).
+    --
+    -- -   @message@ - The Zone message.
+    --
+    -- -   @opt-in-status@ - The opt-in status (@opted-in@, and @not-opted-in@
+    --     | @opt-in-not-required@).
+    --
+    -- -   @parent-zoneID@ - The ID of the zone that handles some of the Local
+    --     Zone and Wavelength Zone control plane operations, such as API
+    --     calls.
+    --
+    -- -   @parent-zoneName@ - The ID of the zone that handles some of the
+    --     Local Zone and Wavelength Zone control plane operations, such as API
+    --     calls.
+    --
+    -- -   @region-name@ - The name of the Region for the Zone (for example,
+    --     @us-east-1@).
+    --
+    -- -   @state@ - The state of the Availability Zone, the Local Zone, or the
+    --     Wavelength Zone (@available@).
+    --
+    -- -   @zone-id@ - The ID of the Availability Zone (for example,
+    --     @use1-az1@), the Local Zone (for example, @usw2-lax1-az1@), or the
+    --     Wavelength Zone (for example, @us-east-1-wl1-bos-wlz-1@).
+    --
+    -- -   @zone-type@ - The type of zone, for example, @local-zone@.
+    --
+    -- -   @zone-name@ - The name of the Availability Zone (for example,
+    --     @us-east-1a@), the Local Zone (for example, @us-west-2-lax-1a@), or
+    --     the Wavelength Zone (for example, @us-east-1-wl1-bos-wlz-1@).
+    --
+    -- -   @zone-type@ - The type of zone, for example, @local-zone@.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the Availability Zones, Local Zones, and Wavelength Zones.
+    zoneIds :: Prelude.Maybe [Prelude.Text],
+    -- | The names of the Availability Zones, Local Zones, and Wavelength Zones.
+    zoneNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAvailabilityZones' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allAvailabilityZones', 'describeAvailabilityZones_allAvailabilityZones' - Include all Availability Zones, Local Zones, and Wavelength Zones
+-- regardless of your opt-in status.
+--
+-- If you do not use this parameter, the results include only the zones for
+-- the Regions where you have chosen the option to opt in.
+--
+-- 'dryRun', 'describeAvailabilityZones_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeAvailabilityZones_filters' - The filters.
+--
+-- -   @group-name@ - For Availability Zones, use the Region name. For
+--     Local Zones, use the name of the group associated with the Local
+--     Zone (for example, @us-west-2-lax-1@) For Wavelength Zones, use the
+--     name of the group associated with the Wavelength Zone (for example,
+--     @us-east-1-wl1-bos-wlz-1@).
+--
+-- -   @message@ - The Zone message.
+--
+-- -   @opt-in-status@ - The opt-in status (@opted-in@, and @not-opted-in@
+--     | @opt-in-not-required@).
+--
+-- -   @parent-zoneID@ - The ID of the zone that handles some of the Local
+--     Zone and Wavelength Zone control plane operations, such as API
+--     calls.
+--
+-- -   @parent-zoneName@ - The ID of the zone that handles some of the
+--     Local Zone and Wavelength Zone control plane operations, such as API
+--     calls.
+--
+-- -   @region-name@ - The name of the Region for the Zone (for example,
+--     @us-east-1@).
+--
+-- -   @state@ - The state of the Availability Zone, the Local Zone, or the
+--     Wavelength Zone (@available@).
+--
+-- -   @zone-id@ - The ID of the Availability Zone (for example,
+--     @use1-az1@), the Local Zone (for example, @usw2-lax1-az1@), or the
+--     Wavelength Zone (for example, @us-east-1-wl1-bos-wlz-1@).
+--
+-- -   @zone-type@ - The type of zone, for example, @local-zone@.
+--
+-- -   @zone-name@ - The name of the Availability Zone (for example,
+--     @us-east-1a@), the Local Zone (for example, @us-west-2-lax-1a@), or
+--     the Wavelength Zone (for example, @us-east-1-wl1-bos-wlz-1@).
+--
+-- -   @zone-type@ - The type of zone, for example, @local-zone@.
+--
+-- 'zoneIds', 'describeAvailabilityZones_zoneIds' - The IDs of the Availability Zones, Local Zones, and Wavelength Zones.
+--
+-- 'zoneNames', 'describeAvailabilityZones_zoneNames' - The names of the Availability Zones, Local Zones, and Wavelength Zones.
+newDescribeAvailabilityZones ::
+  DescribeAvailabilityZones
+newDescribeAvailabilityZones =
+  DescribeAvailabilityZones'
+    { allAvailabilityZones =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      zoneIds = Prelude.Nothing,
+      zoneNames = Prelude.Nothing
+    }
+
+-- | Include all Availability Zones, Local Zones, and Wavelength Zones
+-- regardless of your opt-in status.
+--
+-- If you do not use this parameter, the results include only the zones for
+-- the Regions where you have chosen the option to opt in.
+describeAvailabilityZones_allAvailabilityZones :: Lens.Lens' DescribeAvailabilityZones (Prelude.Maybe Prelude.Bool)
+describeAvailabilityZones_allAvailabilityZones = Lens.lens (\DescribeAvailabilityZones' {allAvailabilityZones} -> allAvailabilityZones) (\s@DescribeAvailabilityZones' {} a -> s {allAvailabilityZones = a} :: DescribeAvailabilityZones)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAvailabilityZones_dryRun :: Lens.Lens' DescribeAvailabilityZones (Prelude.Maybe Prelude.Bool)
+describeAvailabilityZones_dryRun = Lens.lens (\DescribeAvailabilityZones' {dryRun} -> dryRun) (\s@DescribeAvailabilityZones' {} a -> s {dryRun = a} :: DescribeAvailabilityZones)
+
+-- | The filters.
+--
+-- -   @group-name@ - For Availability Zones, use the Region name. For
+--     Local Zones, use the name of the group associated with the Local
+--     Zone (for example, @us-west-2-lax-1@) For Wavelength Zones, use the
+--     name of the group associated with the Wavelength Zone (for example,
+--     @us-east-1-wl1-bos-wlz-1@).
+--
+-- -   @message@ - The Zone message.
+--
+-- -   @opt-in-status@ - The opt-in status (@opted-in@, and @not-opted-in@
+--     | @opt-in-not-required@).
+--
+-- -   @parent-zoneID@ - The ID of the zone that handles some of the Local
+--     Zone and Wavelength Zone control plane operations, such as API
+--     calls.
+--
+-- -   @parent-zoneName@ - The ID of the zone that handles some of the
+--     Local Zone and Wavelength Zone control plane operations, such as API
+--     calls.
+--
+-- -   @region-name@ - The name of the Region for the Zone (for example,
+--     @us-east-1@).
+--
+-- -   @state@ - The state of the Availability Zone, the Local Zone, or the
+--     Wavelength Zone (@available@).
+--
+-- -   @zone-id@ - The ID of the Availability Zone (for example,
+--     @use1-az1@), the Local Zone (for example, @usw2-lax1-az1@), or the
+--     Wavelength Zone (for example, @us-east-1-wl1-bos-wlz-1@).
+--
+-- -   @zone-type@ - The type of zone, for example, @local-zone@.
+--
+-- -   @zone-name@ - The name of the Availability Zone (for example,
+--     @us-east-1a@), the Local Zone (for example, @us-west-2-lax-1a@), or
+--     the Wavelength Zone (for example, @us-east-1-wl1-bos-wlz-1@).
+--
+-- -   @zone-type@ - The type of zone, for example, @local-zone@.
+describeAvailabilityZones_filters :: Lens.Lens' DescribeAvailabilityZones (Prelude.Maybe [Filter])
+describeAvailabilityZones_filters = Lens.lens (\DescribeAvailabilityZones' {filters} -> filters) (\s@DescribeAvailabilityZones' {} a -> s {filters = a} :: DescribeAvailabilityZones) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Availability Zones, Local Zones, and Wavelength Zones.
+describeAvailabilityZones_zoneIds :: Lens.Lens' DescribeAvailabilityZones (Prelude.Maybe [Prelude.Text])
+describeAvailabilityZones_zoneIds = Lens.lens (\DescribeAvailabilityZones' {zoneIds} -> zoneIds) (\s@DescribeAvailabilityZones' {} a -> s {zoneIds = a} :: DescribeAvailabilityZones) Prelude.. Lens.mapping Lens.coerced
+
+-- | The names of the Availability Zones, Local Zones, and Wavelength Zones.
+describeAvailabilityZones_zoneNames :: Lens.Lens' DescribeAvailabilityZones (Prelude.Maybe [Prelude.Text])
+describeAvailabilityZones_zoneNames = Lens.lens (\DescribeAvailabilityZones' {zoneNames} -> zoneNames) (\s@DescribeAvailabilityZones' {} a -> s {zoneNames = a} :: DescribeAvailabilityZones) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeAvailabilityZones where
+  type
+    AWSResponse DescribeAvailabilityZones =
+      DescribeAvailabilityZonesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAvailabilityZonesResponse'
+            Prelude.<$> ( x
+                            Data..@? "availabilityZoneInfo"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAvailabilityZones where
+  hashWithSalt _salt DescribeAvailabilityZones' {..} =
+    _salt
+      `Prelude.hashWithSalt` allAvailabilityZones
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` zoneIds
+      `Prelude.hashWithSalt` zoneNames
+
+instance Prelude.NFData DescribeAvailabilityZones where
+  rnf DescribeAvailabilityZones' {..} =
+    Prelude.rnf allAvailabilityZones
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf zoneIds
+      `Prelude.seq` Prelude.rnf zoneNames
+
+instance Data.ToHeaders DescribeAvailabilityZones where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeAvailabilityZones where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAvailabilityZones where
+  toQuery DescribeAvailabilityZones' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeAvailabilityZones" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllAvailabilityZones" Data.=: allAvailabilityZones,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "ZoneId" Prelude.<$> zoneIds),
+        Data.toQuery
+          (Data.toQueryList "ZoneName" Prelude.<$> zoneNames)
+      ]
+
+-- | /See:/ 'newDescribeAvailabilityZonesResponse' smart constructor.
+data DescribeAvailabilityZonesResponse = DescribeAvailabilityZonesResponse'
+  { -- | Information about the Availability Zones, Local Zones, and Wavelength
+    -- Zones.
+    availabilityZones :: Prelude.Maybe [AvailabilityZone],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAvailabilityZonesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZones', 'describeAvailabilityZonesResponse_availabilityZones' - Information about the Availability Zones, Local Zones, and Wavelength
+-- Zones.
+--
+-- 'httpStatus', 'describeAvailabilityZonesResponse_httpStatus' - The response's http status code.
+newDescribeAvailabilityZonesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAvailabilityZonesResponse
+newDescribeAvailabilityZonesResponse pHttpStatus_ =
+  DescribeAvailabilityZonesResponse'
+    { availabilityZones =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Availability Zones, Local Zones, and Wavelength
+-- Zones.
+describeAvailabilityZonesResponse_availabilityZones :: Lens.Lens' DescribeAvailabilityZonesResponse (Prelude.Maybe [AvailabilityZone])
+describeAvailabilityZonesResponse_availabilityZones = Lens.lens (\DescribeAvailabilityZonesResponse' {availabilityZones} -> availabilityZones) (\s@DescribeAvailabilityZonesResponse' {} a -> s {availabilityZones = a} :: DescribeAvailabilityZonesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeAvailabilityZonesResponse_httpStatus :: Lens.Lens' DescribeAvailabilityZonesResponse Prelude.Int
+describeAvailabilityZonesResponse_httpStatus = Lens.lens (\DescribeAvailabilityZonesResponse' {httpStatus} -> httpStatus) (\s@DescribeAvailabilityZonesResponse' {} a -> s {httpStatus = a} :: DescribeAvailabilityZonesResponse)
+
+instance
+  Prelude.NFData
+    DescribeAvailabilityZonesResponse
+  where
+  rnf DescribeAvailabilityZonesResponse' {..} =
+    Prelude.rnf availabilityZones
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeAwsNetworkPerformanceMetricSubscriptions.hs b/gen/Amazonka/EC2/DescribeAwsNetworkPerformanceMetricSubscriptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeAwsNetworkPerformanceMetricSubscriptions.hs
@@ -0,0 +1,294 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeAwsNetworkPerformanceMetricSubscriptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the current Infrastructure Performance metric subscriptions.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeAwsNetworkPerformanceMetricSubscriptions
+  ( -- * Creating a Request
+    DescribeAwsNetworkPerformanceMetricSubscriptions (..),
+    newDescribeAwsNetworkPerformanceMetricSubscriptions,
+
+    -- * Request Lenses
+    describeAwsNetworkPerformanceMetricSubscriptions_dryRun,
+    describeAwsNetworkPerformanceMetricSubscriptions_filters,
+    describeAwsNetworkPerformanceMetricSubscriptions_maxResults,
+    describeAwsNetworkPerformanceMetricSubscriptions_nextToken,
+
+    -- * Destructuring the Response
+    DescribeAwsNetworkPerformanceMetricSubscriptionsResponse (..),
+    newDescribeAwsNetworkPerformanceMetricSubscriptionsResponse,
+
+    -- * Response Lenses
+    describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken,
+    describeAwsNetworkPerformanceMetricSubscriptionsResponse_subscriptions,
+    describeAwsNetworkPerformanceMetricSubscriptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAwsNetworkPerformanceMetricSubscriptions' smart constructor.
+data DescribeAwsNetworkPerformanceMetricSubscriptions = DescribeAwsNetworkPerformanceMetricSubscriptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAwsNetworkPerformanceMetricSubscriptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeAwsNetworkPerformanceMetricSubscriptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeAwsNetworkPerformanceMetricSubscriptions_filters' - One or more filters.
+--
+-- 'maxResults', 'describeAwsNetworkPerformanceMetricSubscriptions_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeAwsNetworkPerformanceMetricSubscriptions_nextToken' - The token for the next page of results.
+newDescribeAwsNetworkPerformanceMetricSubscriptions ::
+  DescribeAwsNetworkPerformanceMetricSubscriptions
+newDescribeAwsNetworkPerformanceMetricSubscriptions =
+  DescribeAwsNetworkPerformanceMetricSubscriptions'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults =
+        Prelude.Nothing,
+      nextToken =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeAwsNetworkPerformanceMetricSubscriptions_dryRun :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptions (Prelude.Maybe Prelude.Bool)
+describeAwsNetworkPerformanceMetricSubscriptions_dryRun = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptions' {dryRun} -> dryRun) (\s@DescribeAwsNetworkPerformanceMetricSubscriptions' {} a -> s {dryRun = a} :: DescribeAwsNetworkPerformanceMetricSubscriptions)
+
+-- | One or more filters.
+describeAwsNetworkPerformanceMetricSubscriptions_filters :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptions (Prelude.Maybe [Filter])
+describeAwsNetworkPerformanceMetricSubscriptions_filters = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptions' {filters} -> filters) (\s@DescribeAwsNetworkPerformanceMetricSubscriptions' {} a -> s {filters = a} :: DescribeAwsNetworkPerformanceMetricSubscriptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeAwsNetworkPerformanceMetricSubscriptions_maxResults :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptions (Prelude.Maybe Prelude.Natural)
+describeAwsNetworkPerformanceMetricSubscriptions_maxResults = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptions' {maxResults} -> maxResults) (\s@DescribeAwsNetworkPerformanceMetricSubscriptions' {} a -> s {maxResults = a} :: DescribeAwsNetworkPerformanceMetricSubscriptions)
+
+-- | The token for the next page of results.
+describeAwsNetworkPerformanceMetricSubscriptions_nextToken :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptions (Prelude.Maybe Prelude.Text)
+describeAwsNetworkPerformanceMetricSubscriptions_nextToken = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptions' {nextToken} -> nextToken) (\s@DescribeAwsNetworkPerformanceMetricSubscriptions' {} a -> s {nextToken = a} :: DescribeAwsNetworkPerformanceMetricSubscriptions)
+
+instance
+  Core.AWSPager
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeAwsNetworkPerformanceMetricSubscriptionsResponse_subscriptions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeAwsNetworkPerformanceMetricSubscriptions_nextToken
+          Lens..~ rs
+          Lens.^? describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  type
+    AWSResponse
+      DescribeAwsNetworkPerformanceMetricSubscriptions =
+      DescribeAwsNetworkPerformanceMetricSubscriptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeAwsNetworkPerformanceMetricSubscriptionsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "subscriptionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  hashWithSalt
+    _salt
+    DescribeAwsNetworkPerformanceMetricSubscriptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  rnf
+    DescribeAwsNetworkPerformanceMetricSubscriptions' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf filters
+        `Prelude.seq` Prelude.rnf maxResults
+        `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeAwsNetworkPerformanceMetricSubscriptions
+  where
+  toQuery
+    DescribeAwsNetworkPerformanceMetricSubscriptions' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeAwsNetworkPerformanceMetricSubscriptions" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken
+        ]
+
+-- | /See:/ 'newDescribeAwsNetworkPerformanceMetricSubscriptionsResponse' smart constructor.
+data DescribeAwsNetworkPerformanceMetricSubscriptionsResponse = DescribeAwsNetworkPerformanceMetricSubscriptionsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Describes the current Infrastructure Performance subscriptions.
+    subscriptions :: Prelude.Maybe [Subscription],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'subscriptions', 'describeAwsNetworkPerformanceMetricSubscriptionsResponse_subscriptions' - Describes the current Infrastructure Performance subscriptions.
+--
+-- 'httpStatus', 'describeAwsNetworkPerformanceMetricSubscriptionsResponse_httpStatus' - The response's http status code.
+newDescribeAwsNetworkPerformanceMetricSubscriptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAwsNetworkPerformanceMetricSubscriptionsResponse
+newDescribeAwsNetworkPerformanceMetricSubscriptionsResponse
+  pHttpStatus_ =
+    DescribeAwsNetworkPerformanceMetricSubscriptionsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        subscriptions =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptionsResponse (Prelude.Maybe Prelude.Text)
+describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {nextToken} -> nextToken) (\s@DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {} a -> s {nextToken = a} :: DescribeAwsNetworkPerformanceMetricSubscriptionsResponse)
+
+-- | Describes the current Infrastructure Performance subscriptions.
+describeAwsNetworkPerformanceMetricSubscriptionsResponse_subscriptions :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptionsResponse (Prelude.Maybe [Subscription])
+describeAwsNetworkPerformanceMetricSubscriptionsResponse_subscriptions = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {subscriptions} -> subscriptions) (\s@DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {} a -> s {subscriptions = a} :: DescribeAwsNetworkPerformanceMetricSubscriptionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeAwsNetworkPerformanceMetricSubscriptionsResponse_httpStatus :: Lens.Lens' DescribeAwsNetworkPerformanceMetricSubscriptionsResponse Prelude.Int
+describeAwsNetworkPerformanceMetricSubscriptionsResponse_httpStatus = Lens.lens (\DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {httpStatus} -> httpStatus) (\s@DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {} a -> s {httpStatus = a} :: DescribeAwsNetworkPerformanceMetricSubscriptionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeAwsNetworkPerformanceMetricSubscriptionsResponse
+  where
+  rnf
+    DescribeAwsNetworkPerformanceMetricSubscriptionsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf subscriptions
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeBundleTasks.hs b/gen/Amazonka/EC2/DescribeBundleTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeBundleTasks.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeBundleTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified bundle tasks or all of your bundle tasks.
+--
+-- Completed bundle tasks are listed for only a limited time. If your
+-- bundle task is no longer in the list, you can still register an AMI from
+-- it. Just use @RegisterImage@ with the Amazon S3 bucket name and image
+-- manifest name you provided to the bundle task.
+module Amazonka.EC2.DescribeBundleTasks
+  ( -- * Creating a Request
+    DescribeBundleTasks (..),
+    newDescribeBundleTasks,
+
+    -- * Request Lenses
+    describeBundleTasks_bundleIds,
+    describeBundleTasks_dryRun,
+    describeBundleTasks_filters,
+
+    -- * Destructuring the Response
+    DescribeBundleTasksResponse (..),
+    newDescribeBundleTasksResponse,
+
+    -- * Response Lenses
+    describeBundleTasksResponse_bundleTasks,
+    describeBundleTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeBundleTasks' smart constructor.
+data DescribeBundleTasks = DescribeBundleTasks'
+  { -- | The bundle task IDs.
+    --
+    -- Default: Describes all your bundle tasks.
+    bundleIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @bundle-id@ - The ID of the bundle task.
+    --
+    -- -   @error-code@ - If the task failed, the error code returned.
+    --
+    -- -   @error-message@ - If the task failed, the error message returned.
+    --
+    -- -   @instance-id@ - The ID of the instance.
+    --
+    -- -   @progress@ - The level of task completion, as a percentage (for
+    --     example, 20%).
+    --
+    -- -   @s3-bucket@ - The Amazon S3 bucket to store the AMI.
+    --
+    -- -   @s3-prefix@ - The beginning of the AMI name.
+    --
+    -- -   @start-time@ - The time the task started (for example,
+    --     2013-09-15T17:15:20.000Z).
+    --
+    -- -   @state@ - The state of the task (@pending@ | @waiting-for-shutdown@
+    --     | @bundling@ | @storing@ | @cancelling@ | @complete@ | @failed@).
+    --
+    -- -   @update-time@ - The time of the most recent update for the task.
+    filters :: Prelude.Maybe [Filter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBundleTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleIds', 'describeBundleTasks_bundleIds' - The bundle task IDs.
+--
+-- Default: Describes all your bundle tasks.
+--
+-- 'dryRun', 'describeBundleTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeBundleTasks_filters' - The filters.
+--
+-- -   @bundle-id@ - The ID of the bundle task.
+--
+-- -   @error-code@ - If the task failed, the error code returned.
+--
+-- -   @error-message@ - If the task failed, the error message returned.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @progress@ - The level of task completion, as a percentage (for
+--     example, 20%).
+--
+-- -   @s3-bucket@ - The Amazon S3 bucket to store the AMI.
+--
+-- -   @s3-prefix@ - The beginning of the AMI name.
+--
+-- -   @start-time@ - The time the task started (for example,
+--     2013-09-15T17:15:20.000Z).
+--
+-- -   @state@ - The state of the task (@pending@ | @waiting-for-shutdown@
+--     | @bundling@ | @storing@ | @cancelling@ | @complete@ | @failed@).
+--
+-- -   @update-time@ - The time of the most recent update for the task.
+newDescribeBundleTasks ::
+  DescribeBundleTasks
+newDescribeBundleTasks =
+  DescribeBundleTasks'
+    { bundleIds = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing
+    }
+
+-- | The bundle task IDs.
+--
+-- Default: Describes all your bundle tasks.
+describeBundleTasks_bundleIds :: Lens.Lens' DescribeBundleTasks (Prelude.Maybe [Prelude.Text])
+describeBundleTasks_bundleIds = Lens.lens (\DescribeBundleTasks' {bundleIds} -> bundleIds) (\s@DescribeBundleTasks' {} a -> s {bundleIds = a} :: DescribeBundleTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeBundleTasks_dryRun :: Lens.Lens' DescribeBundleTasks (Prelude.Maybe Prelude.Bool)
+describeBundleTasks_dryRun = Lens.lens (\DescribeBundleTasks' {dryRun} -> dryRun) (\s@DescribeBundleTasks' {} a -> s {dryRun = a} :: DescribeBundleTasks)
+
+-- | The filters.
+--
+-- -   @bundle-id@ - The ID of the bundle task.
+--
+-- -   @error-code@ - If the task failed, the error code returned.
+--
+-- -   @error-message@ - If the task failed, the error message returned.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @progress@ - The level of task completion, as a percentage (for
+--     example, 20%).
+--
+-- -   @s3-bucket@ - The Amazon S3 bucket to store the AMI.
+--
+-- -   @s3-prefix@ - The beginning of the AMI name.
+--
+-- -   @start-time@ - The time the task started (for example,
+--     2013-09-15T17:15:20.000Z).
+--
+-- -   @state@ - The state of the task (@pending@ | @waiting-for-shutdown@
+--     | @bundling@ | @storing@ | @cancelling@ | @complete@ | @failed@).
+--
+-- -   @update-time@ - The time of the most recent update for the task.
+describeBundleTasks_filters :: Lens.Lens' DescribeBundleTasks (Prelude.Maybe [Filter])
+describeBundleTasks_filters = Lens.lens (\DescribeBundleTasks' {filters} -> filters) (\s@DescribeBundleTasks' {} a -> s {filters = a} :: DescribeBundleTasks) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeBundleTasks where
+  type
+    AWSResponse DescribeBundleTasks =
+      DescribeBundleTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeBundleTasksResponse'
+            Prelude.<$> ( x
+                            Data..@? "bundleInstanceTasksSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeBundleTasks where
+  hashWithSalt _salt DescribeBundleTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData DescribeBundleTasks where
+  rnf DescribeBundleTasks' {..} =
+    Prelude.rnf bundleIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+
+instance Data.ToHeaders DescribeBundleTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeBundleTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeBundleTasks where
+  toQuery DescribeBundleTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeBundleTasks" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "BundleId" Prelude.<$> bundleIds),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters)
+      ]
+
+-- | /See:/ 'newDescribeBundleTasksResponse' smart constructor.
+data DescribeBundleTasksResponse = DescribeBundleTasksResponse'
+  { -- | Information about the bundle tasks.
+    bundleTasks :: Prelude.Maybe [BundleTask],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeBundleTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleTasks', 'describeBundleTasksResponse_bundleTasks' - Information about the bundle tasks.
+--
+-- 'httpStatus', 'describeBundleTasksResponse_httpStatus' - The response's http status code.
+newDescribeBundleTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeBundleTasksResponse
+newDescribeBundleTasksResponse pHttpStatus_ =
+  DescribeBundleTasksResponse'
+    { bundleTasks =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the bundle tasks.
+describeBundleTasksResponse_bundleTasks :: Lens.Lens' DescribeBundleTasksResponse (Prelude.Maybe [BundleTask])
+describeBundleTasksResponse_bundleTasks = Lens.lens (\DescribeBundleTasksResponse' {bundleTasks} -> bundleTasks) (\s@DescribeBundleTasksResponse' {} a -> s {bundleTasks = a} :: DescribeBundleTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeBundleTasksResponse_httpStatus :: Lens.Lens' DescribeBundleTasksResponse Prelude.Int
+describeBundleTasksResponse_httpStatus = Lens.lens (\DescribeBundleTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeBundleTasksResponse' {} a -> s {httpStatus = a} :: DescribeBundleTasksResponse)
+
+instance Prelude.NFData DescribeBundleTasksResponse where
+  rnf DescribeBundleTasksResponse' {..} =
+    Prelude.rnf bundleTasks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeByoipCidrs.hs b/gen/Amazonka/EC2/DescribeByoipCidrs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeByoipCidrs.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeByoipCidrs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the IP address ranges that were specified in calls to
+-- ProvisionByoipCidr.
+--
+-- To describe the address pools that were created when you provisioned the
+-- address ranges, use DescribePublicIpv4Pools or DescribeIpv6Pools.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeByoipCidrs
+  ( -- * Creating a Request
+    DescribeByoipCidrs (..),
+    newDescribeByoipCidrs,
+
+    -- * Request Lenses
+    describeByoipCidrs_dryRun,
+    describeByoipCidrs_nextToken,
+    describeByoipCidrs_maxResults,
+
+    -- * Destructuring the Response
+    DescribeByoipCidrsResponse (..),
+    newDescribeByoipCidrsResponse,
+
+    -- * Response Lenses
+    describeByoipCidrsResponse_byoipCidrs,
+    describeByoipCidrsResponse_nextToken,
+    describeByoipCidrsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeByoipCidrs' smart constructor.
+data DescribeByoipCidrs = DescribeByoipCidrs'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeByoipCidrs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeByoipCidrs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'nextToken', 'describeByoipCidrs_nextToken' - The token for the next page of results.
+--
+-- 'maxResults', 'describeByoipCidrs_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+newDescribeByoipCidrs ::
+  -- | 'maxResults'
+  Prelude.Natural ->
+  DescribeByoipCidrs
+newDescribeByoipCidrs pMaxResults_ =
+  DescribeByoipCidrs'
+    { dryRun = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      maxResults = pMaxResults_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeByoipCidrs_dryRun :: Lens.Lens' DescribeByoipCidrs (Prelude.Maybe Prelude.Bool)
+describeByoipCidrs_dryRun = Lens.lens (\DescribeByoipCidrs' {dryRun} -> dryRun) (\s@DescribeByoipCidrs' {} a -> s {dryRun = a} :: DescribeByoipCidrs)
+
+-- | The token for the next page of results.
+describeByoipCidrs_nextToken :: Lens.Lens' DescribeByoipCidrs (Prelude.Maybe Prelude.Text)
+describeByoipCidrs_nextToken = Lens.lens (\DescribeByoipCidrs' {nextToken} -> nextToken) (\s@DescribeByoipCidrs' {} a -> s {nextToken = a} :: DescribeByoipCidrs)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeByoipCidrs_maxResults :: Lens.Lens' DescribeByoipCidrs Prelude.Natural
+describeByoipCidrs_maxResults = Lens.lens (\DescribeByoipCidrs' {maxResults} -> maxResults) (\s@DescribeByoipCidrs' {} a -> s {maxResults = a} :: DescribeByoipCidrs)
+
+instance Core.AWSPager DescribeByoipCidrs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeByoipCidrsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeByoipCidrsResponse_byoipCidrs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeByoipCidrs_nextToken
+          Lens..~ rs
+          Lens.^? describeByoipCidrsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeByoipCidrs where
+  type
+    AWSResponse DescribeByoipCidrs =
+      DescribeByoipCidrsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeByoipCidrsResponse'
+            Prelude.<$> ( x
+                            Data..@? "byoipCidrSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeByoipCidrs where
+  hashWithSalt _salt DescribeByoipCidrs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` maxResults
+
+instance Prelude.NFData DescribeByoipCidrs where
+  rnf DescribeByoipCidrs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf maxResults
+
+instance Data.ToHeaders DescribeByoipCidrs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeByoipCidrs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeByoipCidrs where
+  toQuery DescribeByoipCidrs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeByoipCidrs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NextToken" Data.=: nextToken,
+        "MaxResults" Data.=: maxResults
+      ]
+
+-- | /See:/ 'newDescribeByoipCidrsResponse' smart constructor.
+data DescribeByoipCidrsResponse = DescribeByoipCidrsResponse'
+  { -- | Information about your address ranges.
+    byoipCidrs :: Prelude.Maybe [ByoipCidr],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeByoipCidrsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byoipCidrs', 'describeByoipCidrsResponse_byoipCidrs' - Information about your address ranges.
+--
+-- 'nextToken', 'describeByoipCidrsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeByoipCidrsResponse_httpStatus' - The response's http status code.
+newDescribeByoipCidrsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeByoipCidrsResponse
+newDescribeByoipCidrsResponse pHttpStatus_ =
+  DescribeByoipCidrsResponse'
+    { byoipCidrs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about your address ranges.
+describeByoipCidrsResponse_byoipCidrs :: Lens.Lens' DescribeByoipCidrsResponse (Prelude.Maybe [ByoipCidr])
+describeByoipCidrsResponse_byoipCidrs = Lens.lens (\DescribeByoipCidrsResponse' {byoipCidrs} -> byoipCidrs) (\s@DescribeByoipCidrsResponse' {} a -> s {byoipCidrs = a} :: DescribeByoipCidrsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeByoipCidrsResponse_nextToken :: Lens.Lens' DescribeByoipCidrsResponse (Prelude.Maybe Prelude.Text)
+describeByoipCidrsResponse_nextToken = Lens.lens (\DescribeByoipCidrsResponse' {nextToken} -> nextToken) (\s@DescribeByoipCidrsResponse' {} a -> s {nextToken = a} :: DescribeByoipCidrsResponse)
+
+-- | The response's http status code.
+describeByoipCidrsResponse_httpStatus :: Lens.Lens' DescribeByoipCidrsResponse Prelude.Int
+describeByoipCidrsResponse_httpStatus = Lens.lens (\DescribeByoipCidrsResponse' {httpStatus} -> httpStatus) (\s@DescribeByoipCidrsResponse' {} a -> s {httpStatus = a} :: DescribeByoipCidrsResponse)
+
+instance Prelude.NFData DescribeByoipCidrsResponse where
+  rnf DescribeByoipCidrsResponse' {..} =
+    Prelude.rnf byoipCidrs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeCapacityReservationFleets.hs b/gen/Amazonka/EC2/DescribeCapacityReservationFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeCapacityReservationFleets.hs
@@ -0,0 +1,341 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeCapacityReservationFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more Capacity Reservation Fleets.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeCapacityReservationFleets
+  ( -- * Creating a Request
+    DescribeCapacityReservationFleets (..),
+    newDescribeCapacityReservationFleets,
+
+    -- * Request Lenses
+    describeCapacityReservationFleets_capacityReservationFleetIds,
+    describeCapacityReservationFleets_dryRun,
+    describeCapacityReservationFleets_filters,
+    describeCapacityReservationFleets_maxResults,
+    describeCapacityReservationFleets_nextToken,
+
+    -- * Destructuring the Response
+    DescribeCapacityReservationFleetsResponse (..),
+    newDescribeCapacityReservationFleetsResponse,
+
+    -- * Response Lenses
+    describeCapacityReservationFleetsResponse_capacityReservationFleets,
+    describeCapacityReservationFleetsResponse_nextToken,
+    describeCapacityReservationFleetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCapacityReservationFleets' smart constructor.
+data DescribeCapacityReservationFleets = DescribeCapacityReservationFleets'
+  { -- | The IDs of the Capacity Reservation Fleets to describe.
+    capacityReservationFleetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @state@ - The state of the Fleet (@submitted@ | @modifying@ |
+    --     @active@ | @partially_fulfilled@ | @expiring@ | @expired@ |
+    --     @cancelling@ | @cancelled@ | @failed@).
+    --
+    -- -   @instance-match-criteria@ - The instance matching criteria for the
+    --     Fleet. Only @open@ is supported.
+    --
+    -- -   @tenancy@ - The tenancy of the Fleet (@default@ | @dedicated@).
+    --
+    -- -   @allocation-strategy@ - The allocation strategy used by the Fleet.
+    --     Only @prioritized@ is supported.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCapacityReservationFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationFleetIds', 'describeCapacityReservationFleets_capacityReservationFleetIds' - The IDs of the Capacity Reservation Fleets to describe.
+--
+-- 'dryRun', 'describeCapacityReservationFleets_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeCapacityReservationFleets_filters' - One or more filters.
+--
+-- -   @state@ - The state of the Fleet (@submitted@ | @modifying@ |
+--     @active@ | @partially_fulfilled@ | @expiring@ | @expired@ |
+--     @cancelling@ | @cancelled@ | @failed@).
+--
+-- -   @instance-match-criteria@ - The instance matching criteria for the
+--     Fleet. Only @open@ is supported.
+--
+-- -   @tenancy@ - The tenancy of the Fleet (@default@ | @dedicated@).
+--
+-- -   @allocation-strategy@ - The allocation strategy used by the Fleet.
+--     Only @prioritized@ is supported.
+--
+-- 'maxResults', 'describeCapacityReservationFleets_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- 'nextToken', 'describeCapacityReservationFleets_nextToken' - The token to use to retrieve the next page of results.
+newDescribeCapacityReservationFleets ::
+  DescribeCapacityReservationFleets
+newDescribeCapacityReservationFleets =
+  DescribeCapacityReservationFleets'
+    { capacityReservationFleetIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The IDs of the Capacity Reservation Fleets to describe.
+describeCapacityReservationFleets_capacityReservationFleetIds :: Lens.Lens' DescribeCapacityReservationFleets (Prelude.Maybe [Prelude.Text])
+describeCapacityReservationFleets_capacityReservationFleetIds = Lens.lens (\DescribeCapacityReservationFleets' {capacityReservationFleetIds} -> capacityReservationFleetIds) (\s@DescribeCapacityReservationFleets' {} a -> s {capacityReservationFleetIds = a} :: DescribeCapacityReservationFleets) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeCapacityReservationFleets_dryRun :: Lens.Lens' DescribeCapacityReservationFleets (Prelude.Maybe Prelude.Bool)
+describeCapacityReservationFleets_dryRun = Lens.lens (\DescribeCapacityReservationFleets' {dryRun} -> dryRun) (\s@DescribeCapacityReservationFleets' {} a -> s {dryRun = a} :: DescribeCapacityReservationFleets)
+
+-- | One or more filters.
+--
+-- -   @state@ - The state of the Fleet (@submitted@ | @modifying@ |
+--     @active@ | @partially_fulfilled@ | @expiring@ | @expired@ |
+--     @cancelling@ | @cancelled@ | @failed@).
+--
+-- -   @instance-match-criteria@ - The instance matching criteria for the
+--     Fleet. Only @open@ is supported.
+--
+-- -   @tenancy@ - The tenancy of the Fleet (@default@ | @dedicated@).
+--
+-- -   @allocation-strategy@ - The allocation strategy used by the Fleet.
+--     Only @prioritized@ is supported.
+describeCapacityReservationFleets_filters :: Lens.Lens' DescribeCapacityReservationFleets (Prelude.Maybe [Filter])
+describeCapacityReservationFleets_filters = Lens.lens (\DescribeCapacityReservationFleets' {filters} -> filters) (\s@DescribeCapacityReservationFleets' {} a -> s {filters = a} :: DescribeCapacityReservationFleets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+describeCapacityReservationFleets_maxResults :: Lens.Lens' DescribeCapacityReservationFleets (Prelude.Maybe Prelude.Natural)
+describeCapacityReservationFleets_maxResults = Lens.lens (\DescribeCapacityReservationFleets' {maxResults} -> maxResults) (\s@DescribeCapacityReservationFleets' {} a -> s {maxResults = a} :: DescribeCapacityReservationFleets)
+
+-- | The token to use to retrieve the next page of results.
+describeCapacityReservationFleets_nextToken :: Lens.Lens' DescribeCapacityReservationFleets (Prelude.Maybe Prelude.Text)
+describeCapacityReservationFleets_nextToken = Lens.lens (\DescribeCapacityReservationFleets' {nextToken} -> nextToken) (\s@DescribeCapacityReservationFleets' {} a -> s {nextToken = a} :: DescribeCapacityReservationFleets)
+
+instance
+  Core.AWSPager
+    DescribeCapacityReservationFleets
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeCapacityReservationFleetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeCapacityReservationFleetsResponse_capacityReservationFleets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeCapacityReservationFleets_nextToken
+          Lens..~ rs
+          Lens.^? describeCapacityReservationFleetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeCapacityReservationFleets
+  where
+  type
+    AWSResponse DescribeCapacityReservationFleets =
+      DescribeCapacityReservationFleetsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeCapacityReservationFleetsResponse'
+            Prelude.<$> ( x
+                            Data..@? "capacityReservationFleetSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCapacityReservationFleets
+  where
+  hashWithSalt
+    _salt
+    DescribeCapacityReservationFleets' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationFleetIds
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeCapacityReservationFleets
+  where
+  rnf DescribeCapacityReservationFleets' {..} =
+    Prelude.rnf capacityReservationFleetIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeCapacityReservationFleets
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeCapacityReservationFleets
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeCapacityReservationFleets
+  where
+  toQuery DescribeCapacityReservationFleets' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeCapacityReservationFleets" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "CapacityReservationFleetId"
+              Prelude.<$> capacityReservationFleetIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeCapacityReservationFleetsResponse' smart constructor.
+data DescribeCapacityReservationFleetsResponse = DescribeCapacityReservationFleetsResponse'
+  { -- | Information about the Capacity Reservation Fleets.
+    capacityReservationFleets :: Prelude.Maybe [CapacityReservationFleet],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCapacityReservationFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationFleets', 'describeCapacityReservationFleetsResponse_capacityReservationFleets' - Information about the Capacity Reservation Fleets.
+--
+-- 'nextToken', 'describeCapacityReservationFleetsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeCapacityReservationFleetsResponse_httpStatus' - The response's http status code.
+newDescribeCapacityReservationFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCapacityReservationFleetsResponse
+newDescribeCapacityReservationFleetsResponse
+  pHttpStatus_ =
+    DescribeCapacityReservationFleetsResponse'
+      { capacityReservationFleets =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the Capacity Reservation Fleets.
+describeCapacityReservationFleetsResponse_capacityReservationFleets :: Lens.Lens' DescribeCapacityReservationFleetsResponse (Prelude.Maybe [CapacityReservationFleet])
+describeCapacityReservationFleetsResponse_capacityReservationFleets = Lens.lens (\DescribeCapacityReservationFleetsResponse' {capacityReservationFleets} -> capacityReservationFleets) (\s@DescribeCapacityReservationFleetsResponse' {} a -> s {capacityReservationFleets = a} :: DescribeCapacityReservationFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeCapacityReservationFleetsResponse_nextToken :: Lens.Lens' DescribeCapacityReservationFleetsResponse (Prelude.Maybe Prelude.Text)
+describeCapacityReservationFleetsResponse_nextToken = Lens.lens (\DescribeCapacityReservationFleetsResponse' {nextToken} -> nextToken) (\s@DescribeCapacityReservationFleetsResponse' {} a -> s {nextToken = a} :: DescribeCapacityReservationFleetsResponse)
+
+-- | The response's http status code.
+describeCapacityReservationFleetsResponse_httpStatus :: Lens.Lens' DescribeCapacityReservationFleetsResponse Prelude.Int
+describeCapacityReservationFleetsResponse_httpStatus = Lens.lens (\DescribeCapacityReservationFleetsResponse' {httpStatus} -> httpStatus) (\s@DescribeCapacityReservationFleetsResponse' {} a -> s {httpStatus = a} :: DescribeCapacityReservationFleetsResponse)
+
+instance
+  Prelude.NFData
+    DescribeCapacityReservationFleetsResponse
+  where
+  rnf DescribeCapacityReservationFleetsResponse' {..} =
+    Prelude.rnf capacityReservationFleets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeCapacityReservations.hs b/gen/Amazonka/EC2/DescribeCapacityReservations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeCapacityReservations.hs
@@ -0,0 +1,535 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeCapacityReservations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your Capacity Reservations. The results
+-- describe only the Capacity Reservations in the Amazon Web Services
+-- Region that you\'re currently using.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeCapacityReservations
+  ( -- * Creating a Request
+    DescribeCapacityReservations (..),
+    newDescribeCapacityReservations,
+
+    -- * Request Lenses
+    describeCapacityReservations_capacityReservationIds,
+    describeCapacityReservations_dryRun,
+    describeCapacityReservations_filters,
+    describeCapacityReservations_maxResults,
+    describeCapacityReservations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeCapacityReservationsResponse (..),
+    newDescribeCapacityReservationsResponse,
+
+    -- * Response Lenses
+    describeCapacityReservationsResponse_capacityReservations,
+    describeCapacityReservationsResponse_nextToken,
+    describeCapacityReservationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCapacityReservations' smart constructor.
+data DescribeCapacityReservations = DescribeCapacityReservations'
+  { -- | The ID of the Capacity Reservation.
+    capacityReservationIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @instance-type@ - The type of instance for which the Capacity
+    --     Reservation reserves capacity.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     Capacity Reservation.
+    --
+    -- -   @instance-platform@ - The type of operating system for which the
+    --     Capacity Reservation reserves capacity.
+    --
+    -- -   @availability-zone@ - The Availability Zone 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 Amazon Web Services accounts.
+    --
+    --     -   @dedicated@ - The Capacity Reservation is created on
+    --         single-tenant hardware that is dedicated to a single Amazon Web
+    --         Services account.
+    --
+    -- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost on
+    --     which the Capacity Reservation was created.
+    --
+    -- -   @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 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.
+    --
+    -- -   @start-date@ - The date and time at which the Capacity Reservation
+    --     was started.
+    --
+    -- -   @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.
+    --
+    -- -   @placement-group-arn@ - The ARN of the cluster placement group in
+    --     which the Capacity Reservation was created.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCapacityReservations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationIds', 'describeCapacityReservations_capacityReservationIds' - The ID of the Capacity Reservation.
+--
+-- 'dryRun', 'describeCapacityReservations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeCapacityReservations_filters' - One or more filters.
+--
+-- -   @instance-type@ - The type of instance for which the Capacity
+--     Reservation reserves capacity.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     Capacity Reservation.
+--
+-- -   @instance-platform@ - The type of operating system for which the
+--     Capacity Reservation reserves capacity.
+--
+-- -   @availability-zone@ - The Availability Zone 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 Amazon Web Services accounts.
+--
+--     -   @dedicated@ - The Capacity Reservation is created on
+--         single-tenant hardware that is dedicated to a single Amazon Web
+--         Services account.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost on
+--     which the Capacity Reservation was created.
+--
+-- -   @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 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.
+--
+-- -   @start-date@ - The date and time at which the Capacity Reservation
+--     was started.
+--
+-- -   @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.
+--
+-- -   @placement-group-arn@ - The ARN of the cluster placement group in
+--     which the Capacity Reservation was created.
+--
+-- 'maxResults', 'describeCapacityReservations_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- 'nextToken', 'describeCapacityReservations_nextToken' - The token to use to retrieve the next page of results.
+newDescribeCapacityReservations ::
+  DescribeCapacityReservations
+newDescribeCapacityReservations =
+  DescribeCapacityReservations'
+    { capacityReservationIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ID of the Capacity Reservation.
+describeCapacityReservations_capacityReservationIds :: Lens.Lens' DescribeCapacityReservations (Prelude.Maybe [Prelude.Text])
+describeCapacityReservations_capacityReservationIds = Lens.lens (\DescribeCapacityReservations' {capacityReservationIds} -> capacityReservationIds) (\s@DescribeCapacityReservations' {} a -> s {capacityReservationIds = a} :: DescribeCapacityReservations) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeCapacityReservations_dryRun :: Lens.Lens' DescribeCapacityReservations (Prelude.Maybe Prelude.Bool)
+describeCapacityReservations_dryRun = Lens.lens (\DescribeCapacityReservations' {dryRun} -> dryRun) (\s@DescribeCapacityReservations' {} a -> s {dryRun = a} :: DescribeCapacityReservations)
+
+-- | One or more filters.
+--
+-- -   @instance-type@ - The type of instance for which the Capacity
+--     Reservation reserves capacity.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     Capacity Reservation.
+--
+-- -   @instance-platform@ - The type of operating system for which the
+--     Capacity Reservation reserves capacity.
+--
+-- -   @availability-zone@ - The Availability Zone 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 Amazon Web Services accounts.
+--
+--     -   @dedicated@ - The Capacity Reservation is created on
+--         single-tenant hardware that is dedicated to a single Amazon Web
+--         Services account.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost on
+--     which the Capacity Reservation was created.
+--
+-- -   @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 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.
+--
+-- -   @start-date@ - The date and time at which the Capacity Reservation
+--     was started.
+--
+-- -   @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.
+--
+-- -   @placement-group-arn@ - The ARN of the cluster placement group in
+--     which the Capacity Reservation was created.
+describeCapacityReservations_filters :: Lens.Lens' DescribeCapacityReservations (Prelude.Maybe [Filter])
+describeCapacityReservations_filters = Lens.lens (\DescribeCapacityReservations' {filters} -> filters) (\s@DescribeCapacityReservations' {} a -> s {filters = a} :: DescribeCapacityReservations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+describeCapacityReservations_maxResults :: Lens.Lens' DescribeCapacityReservations (Prelude.Maybe Prelude.Natural)
+describeCapacityReservations_maxResults = Lens.lens (\DescribeCapacityReservations' {maxResults} -> maxResults) (\s@DescribeCapacityReservations' {} a -> s {maxResults = a} :: DescribeCapacityReservations)
+
+-- | The token to use to retrieve the next page of results.
+describeCapacityReservations_nextToken :: Lens.Lens' DescribeCapacityReservations (Prelude.Maybe Prelude.Text)
+describeCapacityReservations_nextToken = Lens.lens (\DescribeCapacityReservations' {nextToken} -> nextToken) (\s@DescribeCapacityReservations' {} a -> s {nextToken = a} :: DescribeCapacityReservations)
+
+instance Core.AWSPager DescribeCapacityReservations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeCapacityReservationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeCapacityReservationsResponse_capacityReservations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeCapacityReservations_nextToken
+          Lens..~ rs
+          Lens.^? describeCapacityReservationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeCapacityReservations where
+  type
+    AWSResponse DescribeCapacityReservations =
+      DescribeCapacityReservationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeCapacityReservationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "capacityReservationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeCapacityReservations
+  where
+  hashWithSalt _salt DescribeCapacityReservations' {..} =
+    _salt
+      `Prelude.hashWithSalt` capacityReservationIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeCapacityReservations where
+  rnf DescribeCapacityReservations' {..} =
+    Prelude.rnf capacityReservationIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeCapacityReservations where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeCapacityReservations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCapacityReservations where
+  toQuery DescribeCapacityReservations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeCapacityReservations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "CapacityReservationId"
+              Prelude.<$> capacityReservationIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeCapacityReservationsResponse' smart constructor.
+data DescribeCapacityReservationsResponse = DescribeCapacityReservationsResponse'
+  { -- | Information about the Capacity Reservations.
+    capacityReservations :: Prelude.Maybe [CapacityReservation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCapacityReservationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservations', 'describeCapacityReservationsResponse_capacityReservations' - Information about the Capacity Reservations.
+--
+-- 'nextToken', 'describeCapacityReservationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeCapacityReservationsResponse_httpStatus' - The response's http status code.
+newDescribeCapacityReservationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCapacityReservationsResponse
+newDescribeCapacityReservationsResponse pHttpStatus_ =
+  DescribeCapacityReservationsResponse'
+    { capacityReservations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Capacity Reservations.
+describeCapacityReservationsResponse_capacityReservations :: Lens.Lens' DescribeCapacityReservationsResponse (Prelude.Maybe [CapacityReservation])
+describeCapacityReservationsResponse_capacityReservations = Lens.lens (\DescribeCapacityReservationsResponse' {capacityReservations} -> capacityReservations) (\s@DescribeCapacityReservationsResponse' {} a -> s {capacityReservations = a} :: DescribeCapacityReservationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeCapacityReservationsResponse_nextToken :: Lens.Lens' DescribeCapacityReservationsResponse (Prelude.Maybe Prelude.Text)
+describeCapacityReservationsResponse_nextToken = Lens.lens (\DescribeCapacityReservationsResponse' {nextToken} -> nextToken) (\s@DescribeCapacityReservationsResponse' {} a -> s {nextToken = a} :: DescribeCapacityReservationsResponse)
+
+-- | The response's http status code.
+describeCapacityReservationsResponse_httpStatus :: Lens.Lens' DescribeCapacityReservationsResponse Prelude.Int
+describeCapacityReservationsResponse_httpStatus = Lens.lens (\DescribeCapacityReservationsResponse' {httpStatus} -> httpStatus) (\s@DescribeCapacityReservationsResponse' {} a -> s {httpStatus = a} :: DescribeCapacityReservationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeCapacityReservationsResponse
+  where
+  rnf DescribeCapacityReservationsResponse' {..} =
+    Prelude.rnf capacityReservations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeCarrierGateways.hs b/gen/Amazonka/EC2/DescribeCarrierGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeCarrierGateways.hs
@@ -0,0 +1,336 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeCarrierGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your carrier gateways.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeCarrierGateways
+  ( -- * Creating a Request
+    DescribeCarrierGateways (..),
+    newDescribeCarrierGateways,
+
+    -- * Request Lenses
+    describeCarrierGateways_carrierGatewayIds,
+    describeCarrierGateways_dryRun,
+    describeCarrierGateways_filters,
+    describeCarrierGateways_maxResults,
+    describeCarrierGateways_nextToken,
+
+    -- * Destructuring the Response
+    DescribeCarrierGatewaysResponse (..),
+    newDescribeCarrierGatewaysResponse,
+
+    -- * Response Lenses
+    describeCarrierGatewaysResponse_carrierGateways,
+    describeCarrierGatewaysResponse_nextToken,
+    describeCarrierGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCarrierGateways' smart constructor.
+data DescribeCarrierGateways = DescribeCarrierGateways'
+  { -- | One or more carrier gateway IDs.
+    carrierGatewayIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @carrier-gateway-id@ - The ID of the carrier gateway.
+    --
+    -- -   @state@ - The state of the carrier gateway (@pending@ | @failed@ |
+    --     @available@ | @deleting@ | @deleted@).
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the owner of the
+    --     carrier gateway.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC associated with the carrier gateway.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCarrierGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGatewayIds', 'describeCarrierGateways_carrierGatewayIds' - One or more carrier gateway IDs.
+--
+-- 'dryRun', 'describeCarrierGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeCarrierGateways_filters' - One or more filters.
+--
+-- -   @carrier-gateway-id@ - The ID of the carrier gateway.
+--
+-- -   @state@ - The state of the carrier gateway (@pending@ | @failed@ |
+--     @available@ | @deleting@ | @deleted@).
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner of the
+--     carrier gateway.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC associated with the carrier gateway.
+--
+-- 'maxResults', 'describeCarrierGateways_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeCarrierGateways_nextToken' - The token for the next page of results.
+newDescribeCarrierGateways ::
+  DescribeCarrierGateways
+newDescribeCarrierGateways =
+  DescribeCarrierGateways'
+    { carrierGatewayIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | One or more carrier gateway IDs.
+describeCarrierGateways_carrierGatewayIds :: Lens.Lens' DescribeCarrierGateways (Prelude.Maybe [Prelude.Text])
+describeCarrierGateways_carrierGatewayIds = Lens.lens (\DescribeCarrierGateways' {carrierGatewayIds} -> carrierGatewayIds) (\s@DescribeCarrierGateways' {} a -> s {carrierGatewayIds = a} :: DescribeCarrierGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeCarrierGateways_dryRun :: Lens.Lens' DescribeCarrierGateways (Prelude.Maybe Prelude.Bool)
+describeCarrierGateways_dryRun = Lens.lens (\DescribeCarrierGateways' {dryRun} -> dryRun) (\s@DescribeCarrierGateways' {} a -> s {dryRun = a} :: DescribeCarrierGateways)
+
+-- | One or more filters.
+--
+-- -   @carrier-gateway-id@ - The ID of the carrier gateway.
+--
+-- -   @state@ - The state of the carrier gateway (@pending@ | @failed@ |
+--     @available@ | @deleting@ | @deleted@).
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner of the
+--     carrier gateway.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC associated with the carrier gateway.
+describeCarrierGateways_filters :: Lens.Lens' DescribeCarrierGateways (Prelude.Maybe [Filter])
+describeCarrierGateways_filters = Lens.lens (\DescribeCarrierGateways' {filters} -> filters) (\s@DescribeCarrierGateways' {} a -> s {filters = a} :: DescribeCarrierGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeCarrierGateways_maxResults :: Lens.Lens' DescribeCarrierGateways (Prelude.Maybe Prelude.Natural)
+describeCarrierGateways_maxResults = Lens.lens (\DescribeCarrierGateways' {maxResults} -> maxResults) (\s@DescribeCarrierGateways' {} a -> s {maxResults = a} :: DescribeCarrierGateways)
+
+-- | The token for the next page of results.
+describeCarrierGateways_nextToken :: Lens.Lens' DescribeCarrierGateways (Prelude.Maybe Prelude.Text)
+describeCarrierGateways_nextToken = Lens.lens (\DescribeCarrierGateways' {nextToken} -> nextToken) (\s@DescribeCarrierGateways' {} a -> s {nextToken = a} :: DescribeCarrierGateways)
+
+instance Core.AWSPager DescribeCarrierGateways where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeCarrierGatewaysResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeCarrierGatewaysResponse_carrierGateways
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeCarrierGateways_nextToken
+          Lens..~ rs
+          Lens.^? describeCarrierGatewaysResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeCarrierGateways where
+  type
+    AWSResponse DescribeCarrierGateways =
+      DescribeCarrierGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeCarrierGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "carrierGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCarrierGateways where
+  hashWithSalt _salt DescribeCarrierGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` carrierGatewayIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeCarrierGateways where
+  rnf DescribeCarrierGateways' {..} =
+    Prelude.rnf carrierGatewayIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeCarrierGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeCarrierGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCarrierGateways where
+  toQuery DescribeCarrierGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeCarrierGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "CarrierGatewayId"
+              Prelude.<$> carrierGatewayIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeCarrierGatewaysResponse' smart constructor.
+data DescribeCarrierGatewaysResponse = DescribeCarrierGatewaysResponse'
+  { -- | Information about the carrier gateway.
+    carrierGateways :: Prelude.Maybe [CarrierGateway],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCarrierGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGateways', 'describeCarrierGatewaysResponse_carrierGateways' - Information about the carrier gateway.
+--
+-- 'nextToken', 'describeCarrierGatewaysResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeCarrierGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeCarrierGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCarrierGatewaysResponse
+newDescribeCarrierGatewaysResponse pHttpStatus_ =
+  DescribeCarrierGatewaysResponse'
+    { carrierGateways =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the carrier gateway.
+describeCarrierGatewaysResponse_carrierGateways :: Lens.Lens' DescribeCarrierGatewaysResponse (Prelude.Maybe [CarrierGateway])
+describeCarrierGatewaysResponse_carrierGateways = Lens.lens (\DescribeCarrierGatewaysResponse' {carrierGateways} -> carrierGateways) (\s@DescribeCarrierGatewaysResponse' {} a -> s {carrierGateways = a} :: DescribeCarrierGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeCarrierGatewaysResponse_nextToken :: Lens.Lens' DescribeCarrierGatewaysResponse (Prelude.Maybe Prelude.Text)
+describeCarrierGatewaysResponse_nextToken = Lens.lens (\DescribeCarrierGatewaysResponse' {nextToken} -> nextToken) (\s@DescribeCarrierGatewaysResponse' {} a -> s {nextToken = a} :: DescribeCarrierGatewaysResponse)
+
+-- | The response's http status code.
+describeCarrierGatewaysResponse_httpStatus :: Lens.Lens' DescribeCarrierGatewaysResponse Prelude.Int
+describeCarrierGatewaysResponse_httpStatus = Lens.lens (\DescribeCarrierGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeCarrierGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeCarrierGatewaysResponse)
+
+instance
+  Prelude.NFData
+    DescribeCarrierGatewaysResponse
+  where
+  rnf DescribeCarrierGatewaysResponse' {..} =
+    Prelude.rnf carrierGateways
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeClassicLinkInstances.hs b/gen/Amazonka/EC2/DescribeClassicLinkInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeClassicLinkInstances.hs
@@ -0,0 +1,358 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeClassicLinkInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your linked EC2-Classic instances. This request
+-- only returns information about EC2-Classic instances linked to a VPC
+-- through ClassicLink. You cannot use this request to return information
+-- about other instances.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeClassicLinkInstances
+  ( -- * Creating a Request
+    DescribeClassicLinkInstances (..),
+    newDescribeClassicLinkInstances,
+
+    -- * Request Lenses
+    describeClassicLinkInstances_dryRun,
+    describeClassicLinkInstances_filters,
+    describeClassicLinkInstances_instanceIds,
+    describeClassicLinkInstances_maxResults,
+    describeClassicLinkInstances_nextToken,
+
+    -- * Destructuring the Response
+    DescribeClassicLinkInstancesResponse (..),
+    newDescribeClassicLinkInstancesResponse,
+
+    -- * Response Lenses
+    describeClassicLinkInstancesResponse_instances,
+    describeClassicLinkInstancesResponse_nextToken,
+    describeClassicLinkInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClassicLinkInstances' smart constructor.
+data DescribeClassicLinkInstances = DescribeClassicLinkInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @group-id@ - The ID of a VPC security group that\'s associated with
+    --     the instance.
+    --
+    -- -   @instance-id@ - The ID of the instance.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC to which the instance is linked.
+    --
+    --     @vpc-id@ - The ID of the VPC that the instance is linked to.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more instance IDs. Must be instances linked to a VPC through
+    -- ClassicLink.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    --
+    -- Constraint: If the value is greater than 1000, we return only 1000
+    -- items.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClassicLinkInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeClassicLinkInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeClassicLinkInstances_filters' - One or more filters.
+--
+-- -   @group-id@ - The ID of a VPC security group that\'s associated with
+--     the instance.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC to which the instance is linked.
+--
+--     @vpc-id@ - The ID of the VPC that the instance is linked to.
+--
+-- 'instanceIds', 'describeClassicLinkInstances_instanceIds' - One or more instance IDs. Must be instances linked to a VPC through
+-- ClassicLink.
+--
+-- 'maxResults', 'describeClassicLinkInstances_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- Constraint: If the value is greater than 1000, we return only 1000
+-- items.
+--
+-- 'nextToken', 'describeClassicLinkInstances_nextToken' - The token for the next page of results.
+newDescribeClassicLinkInstances ::
+  DescribeClassicLinkInstances
+newDescribeClassicLinkInstances =
+  DescribeClassicLinkInstances'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeClassicLinkInstances_dryRun :: Lens.Lens' DescribeClassicLinkInstances (Prelude.Maybe Prelude.Bool)
+describeClassicLinkInstances_dryRun = Lens.lens (\DescribeClassicLinkInstances' {dryRun} -> dryRun) (\s@DescribeClassicLinkInstances' {} a -> s {dryRun = a} :: DescribeClassicLinkInstances)
+
+-- | One or more filters.
+--
+-- -   @group-id@ - The ID of a VPC security group that\'s associated with
+--     the instance.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC to which the instance is linked.
+--
+--     @vpc-id@ - The ID of the VPC that the instance is linked to.
+describeClassicLinkInstances_filters :: Lens.Lens' DescribeClassicLinkInstances (Prelude.Maybe [Filter])
+describeClassicLinkInstances_filters = Lens.lens (\DescribeClassicLinkInstances' {filters} -> filters) (\s@DescribeClassicLinkInstances' {} a -> s {filters = a} :: DescribeClassicLinkInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more instance IDs. Must be instances linked to a VPC through
+-- ClassicLink.
+describeClassicLinkInstances_instanceIds :: Lens.Lens' DescribeClassicLinkInstances (Prelude.Maybe [Prelude.Text])
+describeClassicLinkInstances_instanceIds = Lens.lens (\DescribeClassicLinkInstances' {instanceIds} -> instanceIds) (\s@DescribeClassicLinkInstances' {} a -> s {instanceIds = a} :: DescribeClassicLinkInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- Constraint: If the value is greater than 1000, we return only 1000
+-- items.
+describeClassicLinkInstances_maxResults :: Lens.Lens' DescribeClassicLinkInstances (Prelude.Maybe Prelude.Natural)
+describeClassicLinkInstances_maxResults = Lens.lens (\DescribeClassicLinkInstances' {maxResults} -> maxResults) (\s@DescribeClassicLinkInstances' {} a -> s {maxResults = a} :: DescribeClassicLinkInstances)
+
+-- | The token for the next page of results.
+describeClassicLinkInstances_nextToken :: Lens.Lens' DescribeClassicLinkInstances (Prelude.Maybe Prelude.Text)
+describeClassicLinkInstances_nextToken = Lens.lens (\DescribeClassicLinkInstances' {nextToken} -> nextToken) (\s@DescribeClassicLinkInstances' {} a -> s {nextToken = a} :: DescribeClassicLinkInstances)
+
+instance Core.AWSPager DescribeClassicLinkInstances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeClassicLinkInstancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeClassicLinkInstancesResponse_instances
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeClassicLinkInstances_nextToken
+          Lens..~ rs
+          Lens.^? describeClassicLinkInstancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeClassicLinkInstances where
+  type
+    AWSResponse DescribeClassicLinkInstances =
+      DescribeClassicLinkInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeClassicLinkInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeClassicLinkInstances
+  where
+  hashWithSalt _salt DescribeClassicLinkInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` instanceIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeClassicLinkInstances where
+  rnf DescribeClassicLinkInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeClassicLinkInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeClassicLinkInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClassicLinkInstances where
+  toQuery DescribeClassicLinkInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeClassicLinkInstances" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InstanceId"
+              Prelude.<$> instanceIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeClassicLinkInstancesResponse' smart constructor.
+data DescribeClassicLinkInstancesResponse = DescribeClassicLinkInstancesResponse'
+  { -- | Information about one or more linked EC2-Classic instances.
+    instances :: Prelude.Maybe [ClassicLinkInstance],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClassicLinkInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instances', 'describeClassicLinkInstancesResponse_instances' - Information about one or more linked EC2-Classic instances.
+--
+-- 'nextToken', 'describeClassicLinkInstancesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeClassicLinkInstancesResponse_httpStatus' - The response's http status code.
+newDescribeClassicLinkInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClassicLinkInstancesResponse
+newDescribeClassicLinkInstancesResponse pHttpStatus_ =
+  DescribeClassicLinkInstancesResponse'
+    { instances =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more linked EC2-Classic instances.
+describeClassicLinkInstancesResponse_instances :: Lens.Lens' DescribeClassicLinkInstancesResponse (Prelude.Maybe [ClassicLinkInstance])
+describeClassicLinkInstancesResponse_instances = Lens.lens (\DescribeClassicLinkInstancesResponse' {instances} -> instances) (\s@DescribeClassicLinkInstancesResponse' {} a -> s {instances = a} :: DescribeClassicLinkInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeClassicLinkInstancesResponse_nextToken :: Lens.Lens' DescribeClassicLinkInstancesResponse (Prelude.Maybe Prelude.Text)
+describeClassicLinkInstancesResponse_nextToken = Lens.lens (\DescribeClassicLinkInstancesResponse' {nextToken} -> nextToken) (\s@DescribeClassicLinkInstancesResponse' {} a -> s {nextToken = a} :: DescribeClassicLinkInstancesResponse)
+
+-- | The response's http status code.
+describeClassicLinkInstancesResponse_httpStatus :: Lens.Lens' DescribeClassicLinkInstancesResponse Prelude.Int
+describeClassicLinkInstancesResponse_httpStatus = Lens.lens (\DescribeClassicLinkInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeClassicLinkInstancesResponse' {} a -> s {httpStatus = a} :: DescribeClassicLinkInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeClassicLinkInstancesResponse
+  where
+  rnf DescribeClassicLinkInstancesResponse' {..} =
+    Prelude.rnf instances
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeClientVpnAuthorizationRules.hs b/gen/Amazonka/EC2/DescribeClientVpnAuthorizationRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeClientVpnAuthorizationRules.hs
@@ -0,0 +1,327 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeClientVpnAuthorizationRules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the authorization rules for a specified Client VPN endpoint.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeClientVpnAuthorizationRules
+  ( -- * Creating a Request
+    DescribeClientVpnAuthorizationRules (..),
+    newDescribeClientVpnAuthorizationRules,
+
+    -- * Request Lenses
+    describeClientVpnAuthorizationRules_dryRun,
+    describeClientVpnAuthorizationRules_filters,
+    describeClientVpnAuthorizationRules_maxResults,
+    describeClientVpnAuthorizationRules_nextToken,
+    describeClientVpnAuthorizationRules_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    DescribeClientVpnAuthorizationRulesResponse (..),
+    newDescribeClientVpnAuthorizationRulesResponse,
+
+    -- * Response Lenses
+    describeClientVpnAuthorizationRulesResponse_authorizationRules,
+    describeClientVpnAuthorizationRulesResponse_nextToken,
+    describeClientVpnAuthorizationRulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClientVpnAuthorizationRules' smart constructor.
+data DescribeClientVpnAuthorizationRules = DescribeClientVpnAuthorizationRules'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @description@ - The description of the authorization rule.
+    --
+    -- -   @destination-cidr@ - The CIDR of the network to which the
+    --     authorization rule applies.
+    --
+    -- -   @group-id@ - The ID of the Active Directory group to which the
+    --     authorization rule grants access.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the nextToken value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnAuthorizationRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeClientVpnAuthorizationRules_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeClientVpnAuthorizationRules_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @description@ - The description of the authorization rule.
+--
+-- -   @destination-cidr@ - The CIDR of the network to which the
+--     authorization rule applies.
+--
+-- -   @group-id@ - The ID of the Active Directory group to which the
+--     authorization rule grants access.
+--
+-- 'maxResults', 'describeClientVpnAuthorizationRules_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+--
+-- 'nextToken', 'describeClientVpnAuthorizationRules_nextToken' - The token to retrieve the next page of results.
+--
+-- 'clientVpnEndpointId', 'describeClientVpnAuthorizationRules_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+newDescribeClientVpnAuthorizationRules ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  DescribeClientVpnAuthorizationRules
+newDescribeClientVpnAuthorizationRules
+  pClientVpnEndpointId_ =
+    DescribeClientVpnAuthorizationRules'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeClientVpnAuthorizationRules_dryRun :: Lens.Lens' DescribeClientVpnAuthorizationRules (Prelude.Maybe Prelude.Bool)
+describeClientVpnAuthorizationRules_dryRun = Lens.lens (\DescribeClientVpnAuthorizationRules' {dryRun} -> dryRun) (\s@DescribeClientVpnAuthorizationRules' {} a -> s {dryRun = a} :: DescribeClientVpnAuthorizationRules)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @description@ - The description of the authorization rule.
+--
+-- -   @destination-cidr@ - The CIDR of the network to which the
+--     authorization rule applies.
+--
+-- -   @group-id@ - The ID of the Active Directory group to which the
+--     authorization rule grants access.
+describeClientVpnAuthorizationRules_filters :: Lens.Lens' DescribeClientVpnAuthorizationRules (Prelude.Maybe [Filter])
+describeClientVpnAuthorizationRules_filters = Lens.lens (\DescribeClientVpnAuthorizationRules' {filters} -> filters) (\s@DescribeClientVpnAuthorizationRules' {} a -> s {filters = a} :: DescribeClientVpnAuthorizationRules) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+describeClientVpnAuthorizationRules_maxResults :: Lens.Lens' DescribeClientVpnAuthorizationRules (Prelude.Maybe Prelude.Natural)
+describeClientVpnAuthorizationRules_maxResults = Lens.lens (\DescribeClientVpnAuthorizationRules' {maxResults} -> maxResults) (\s@DescribeClientVpnAuthorizationRules' {} a -> s {maxResults = a} :: DescribeClientVpnAuthorizationRules)
+
+-- | The token to retrieve the next page of results.
+describeClientVpnAuthorizationRules_nextToken :: Lens.Lens' DescribeClientVpnAuthorizationRules (Prelude.Maybe Prelude.Text)
+describeClientVpnAuthorizationRules_nextToken = Lens.lens (\DescribeClientVpnAuthorizationRules' {nextToken} -> nextToken) (\s@DescribeClientVpnAuthorizationRules' {} a -> s {nextToken = a} :: DescribeClientVpnAuthorizationRules)
+
+-- | The ID of the Client VPN endpoint.
+describeClientVpnAuthorizationRules_clientVpnEndpointId :: Lens.Lens' DescribeClientVpnAuthorizationRules Prelude.Text
+describeClientVpnAuthorizationRules_clientVpnEndpointId = Lens.lens (\DescribeClientVpnAuthorizationRules' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DescribeClientVpnAuthorizationRules' {} a -> s {clientVpnEndpointId = a} :: DescribeClientVpnAuthorizationRules)
+
+instance
+  Core.AWSPager
+    DescribeClientVpnAuthorizationRules
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnAuthorizationRulesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnAuthorizationRulesResponse_authorizationRules
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeClientVpnAuthorizationRules_nextToken
+          Lens..~ rs
+          Lens.^? describeClientVpnAuthorizationRulesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeClientVpnAuthorizationRules
+  where
+  type
+    AWSResponse DescribeClientVpnAuthorizationRules =
+      DescribeClientVpnAuthorizationRulesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeClientVpnAuthorizationRulesResponse'
+            Prelude.<$> ( x
+                            Data..@? "authorizationRule"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeClientVpnAuthorizationRules
+  where
+  hashWithSalt
+    _salt
+    DescribeClientVpnAuthorizationRules' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance
+  Prelude.NFData
+    DescribeClientVpnAuthorizationRules
+  where
+  rnf DescribeClientVpnAuthorizationRules' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance
+  Data.ToHeaders
+    DescribeClientVpnAuthorizationRules
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeClientVpnAuthorizationRules
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeClientVpnAuthorizationRules
+  where
+  toQuery DescribeClientVpnAuthorizationRules' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeClientVpnAuthorizationRules" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newDescribeClientVpnAuthorizationRulesResponse' smart constructor.
+data DescribeClientVpnAuthorizationRulesResponse = DescribeClientVpnAuthorizationRulesResponse'
+  { -- | Information about the authorization rules.
+    authorizationRules :: Prelude.Maybe [AuthorizationRule],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnAuthorizationRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizationRules', 'describeClientVpnAuthorizationRulesResponse_authorizationRules' - Information about the authorization rules.
+--
+-- 'nextToken', 'describeClientVpnAuthorizationRulesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeClientVpnAuthorizationRulesResponse_httpStatus' - The response's http status code.
+newDescribeClientVpnAuthorizationRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientVpnAuthorizationRulesResponse
+newDescribeClientVpnAuthorizationRulesResponse
+  pHttpStatus_ =
+    DescribeClientVpnAuthorizationRulesResponse'
+      { authorizationRules =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the authorization rules.
+describeClientVpnAuthorizationRulesResponse_authorizationRules :: Lens.Lens' DescribeClientVpnAuthorizationRulesResponse (Prelude.Maybe [AuthorizationRule])
+describeClientVpnAuthorizationRulesResponse_authorizationRules = Lens.lens (\DescribeClientVpnAuthorizationRulesResponse' {authorizationRules} -> authorizationRules) (\s@DescribeClientVpnAuthorizationRulesResponse' {} a -> s {authorizationRules = a} :: DescribeClientVpnAuthorizationRulesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeClientVpnAuthorizationRulesResponse_nextToken :: Lens.Lens' DescribeClientVpnAuthorizationRulesResponse (Prelude.Maybe Prelude.Text)
+describeClientVpnAuthorizationRulesResponse_nextToken = Lens.lens (\DescribeClientVpnAuthorizationRulesResponse' {nextToken} -> nextToken) (\s@DescribeClientVpnAuthorizationRulesResponse' {} a -> s {nextToken = a} :: DescribeClientVpnAuthorizationRulesResponse)
+
+-- | The response's http status code.
+describeClientVpnAuthorizationRulesResponse_httpStatus :: Lens.Lens' DescribeClientVpnAuthorizationRulesResponse Prelude.Int
+describeClientVpnAuthorizationRulesResponse_httpStatus = Lens.lens (\DescribeClientVpnAuthorizationRulesResponse' {httpStatus} -> httpStatus) (\s@DescribeClientVpnAuthorizationRulesResponse' {} a -> s {httpStatus = a} :: DescribeClientVpnAuthorizationRulesResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientVpnAuthorizationRulesResponse
+  where
+  rnf DescribeClientVpnAuthorizationRulesResponse' {..} =
+    Prelude.rnf authorizationRules
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeClientVpnConnections.hs b/gen/Amazonka/EC2/DescribeClientVpnConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeClientVpnConnections.hs
@@ -0,0 +1,297 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeClientVpnConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes active client connections and connections that have been
+-- terminated within the last 60 minutes for the specified Client VPN
+-- endpoint.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeClientVpnConnections
+  ( -- * Creating a Request
+    DescribeClientVpnConnections (..),
+    newDescribeClientVpnConnections,
+
+    -- * Request Lenses
+    describeClientVpnConnections_dryRun,
+    describeClientVpnConnections_filters,
+    describeClientVpnConnections_maxResults,
+    describeClientVpnConnections_nextToken,
+    describeClientVpnConnections_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    DescribeClientVpnConnectionsResponse (..),
+    newDescribeClientVpnConnectionsResponse,
+
+    -- * Response Lenses
+    describeClientVpnConnectionsResponse_connections,
+    describeClientVpnConnectionsResponse_nextToken,
+    describeClientVpnConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClientVpnConnections' smart constructor.
+data DescribeClientVpnConnections = DescribeClientVpnConnections'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @connection-id@ - The ID of the connection.
+    --
+    -- -   @username@ - For Active Directory client authentication, the user
+    --     name of the client who established the client connection.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the nextToken value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeClientVpnConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeClientVpnConnections_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @connection-id@ - The ID of the connection.
+--
+-- -   @username@ - For Active Directory client authentication, the user
+--     name of the client who established the client connection.
+--
+-- 'maxResults', 'describeClientVpnConnections_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+--
+-- 'nextToken', 'describeClientVpnConnections_nextToken' - The token to retrieve the next page of results.
+--
+-- 'clientVpnEndpointId', 'describeClientVpnConnections_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+newDescribeClientVpnConnections ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  DescribeClientVpnConnections
+newDescribeClientVpnConnections pClientVpnEndpointId_ =
+  DescribeClientVpnConnections'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clientVpnEndpointId = pClientVpnEndpointId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeClientVpnConnections_dryRun :: Lens.Lens' DescribeClientVpnConnections (Prelude.Maybe Prelude.Bool)
+describeClientVpnConnections_dryRun = Lens.lens (\DescribeClientVpnConnections' {dryRun} -> dryRun) (\s@DescribeClientVpnConnections' {} a -> s {dryRun = a} :: DescribeClientVpnConnections)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @connection-id@ - The ID of the connection.
+--
+-- -   @username@ - For Active Directory client authentication, the user
+--     name of the client who established the client connection.
+describeClientVpnConnections_filters :: Lens.Lens' DescribeClientVpnConnections (Prelude.Maybe [Filter])
+describeClientVpnConnections_filters = Lens.lens (\DescribeClientVpnConnections' {filters} -> filters) (\s@DescribeClientVpnConnections' {} a -> s {filters = a} :: DescribeClientVpnConnections) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+describeClientVpnConnections_maxResults :: Lens.Lens' DescribeClientVpnConnections (Prelude.Maybe Prelude.Natural)
+describeClientVpnConnections_maxResults = Lens.lens (\DescribeClientVpnConnections' {maxResults} -> maxResults) (\s@DescribeClientVpnConnections' {} a -> s {maxResults = a} :: DescribeClientVpnConnections)
+
+-- | The token to retrieve the next page of results.
+describeClientVpnConnections_nextToken :: Lens.Lens' DescribeClientVpnConnections (Prelude.Maybe Prelude.Text)
+describeClientVpnConnections_nextToken = Lens.lens (\DescribeClientVpnConnections' {nextToken} -> nextToken) (\s@DescribeClientVpnConnections' {} a -> s {nextToken = a} :: DescribeClientVpnConnections)
+
+-- | The ID of the Client VPN endpoint.
+describeClientVpnConnections_clientVpnEndpointId :: Lens.Lens' DescribeClientVpnConnections Prelude.Text
+describeClientVpnConnections_clientVpnEndpointId = Lens.lens (\DescribeClientVpnConnections' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DescribeClientVpnConnections' {} a -> s {clientVpnEndpointId = a} :: DescribeClientVpnConnections)
+
+instance Core.AWSPager DescribeClientVpnConnections where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnConnectionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnConnectionsResponse_connections
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeClientVpnConnections_nextToken
+          Lens..~ rs
+          Lens.^? describeClientVpnConnectionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeClientVpnConnections where
+  type
+    AWSResponse DescribeClientVpnConnections =
+      DescribeClientVpnConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeClientVpnConnectionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "connections"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeClientVpnConnections
+  where
+  hashWithSalt _salt DescribeClientVpnConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance Prelude.NFData DescribeClientVpnConnections where
+  rnf DescribeClientVpnConnections' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance Data.ToHeaders DescribeClientVpnConnections where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeClientVpnConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClientVpnConnections where
+  toQuery DescribeClientVpnConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeClientVpnConnections" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newDescribeClientVpnConnectionsResponse' smart constructor.
+data DescribeClientVpnConnectionsResponse = DescribeClientVpnConnectionsResponse'
+  { -- | Information about the active and terminated client connections.
+    connections :: Prelude.Maybe [ClientVpnConnection],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connections', 'describeClientVpnConnectionsResponse_connections' - Information about the active and terminated client connections.
+--
+-- 'nextToken', 'describeClientVpnConnectionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeClientVpnConnectionsResponse_httpStatus' - The response's http status code.
+newDescribeClientVpnConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientVpnConnectionsResponse
+newDescribeClientVpnConnectionsResponse pHttpStatus_ =
+  DescribeClientVpnConnectionsResponse'
+    { connections =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the active and terminated client connections.
+describeClientVpnConnectionsResponse_connections :: Lens.Lens' DescribeClientVpnConnectionsResponse (Prelude.Maybe [ClientVpnConnection])
+describeClientVpnConnectionsResponse_connections = Lens.lens (\DescribeClientVpnConnectionsResponse' {connections} -> connections) (\s@DescribeClientVpnConnectionsResponse' {} a -> s {connections = a} :: DescribeClientVpnConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeClientVpnConnectionsResponse_nextToken :: Lens.Lens' DescribeClientVpnConnectionsResponse (Prelude.Maybe Prelude.Text)
+describeClientVpnConnectionsResponse_nextToken = Lens.lens (\DescribeClientVpnConnectionsResponse' {nextToken} -> nextToken) (\s@DescribeClientVpnConnectionsResponse' {} a -> s {nextToken = a} :: DescribeClientVpnConnectionsResponse)
+
+-- | The response's http status code.
+describeClientVpnConnectionsResponse_httpStatus :: Lens.Lens' DescribeClientVpnConnectionsResponse Prelude.Int
+describeClientVpnConnectionsResponse_httpStatus = Lens.lens (\DescribeClientVpnConnectionsResponse' {httpStatus} -> httpStatus) (\s@DescribeClientVpnConnectionsResponse' {} a -> s {httpStatus = a} :: DescribeClientVpnConnectionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientVpnConnectionsResponse
+  where
+  rnf DescribeClientVpnConnectionsResponse' {..} =
+    Prelude.rnf connections
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeClientVpnEndpoints.hs b/gen/Amazonka/EC2/DescribeClientVpnEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeClientVpnEndpoints.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeClientVpnEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more Client VPN endpoints in the account.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeClientVpnEndpoints
+  ( -- * Creating a Request
+    DescribeClientVpnEndpoints (..),
+    newDescribeClientVpnEndpoints,
+
+    -- * Request Lenses
+    describeClientVpnEndpoints_clientVpnEndpointIds,
+    describeClientVpnEndpoints_dryRun,
+    describeClientVpnEndpoints_filters,
+    describeClientVpnEndpoints_maxResults,
+    describeClientVpnEndpoints_nextToken,
+
+    -- * Destructuring the Response
+    DescribeClientVpnEndpointsResponse (..),
+    newDescribeClientVpnEndpointsResponse,
+
+    -- * Response Lenses
+    describeClientVpnEndpointsResponse_clientVpnEndpoints,
+    describeClientVpnEndpointsResponse_nextToken,
+    describeClientVpnEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClientVpnEndpoints' smart constructor.
+data DescribeClientVpnEndpoints = DescribeClientVpnEndpoints'
+  { -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @endpoint-id@ - The ID of the Client VPN endpoint.
+    --
+    -- -   @transport-protocol@ - The transport protocol (@tcp@ | @udp@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the nextToken value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientVpnEndpointIds', 'describeClientVpnEndpoints_clientVpnEndpointIds' - The ID of the Client VPN endpoint.
+--
+-- 'dryRun', 'describeClientVpnEndpoints_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeClientVpnEndpoints_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @endpoint-id@ - The ID of the Client VPN endpoint.
+--
+-- -   @transport-protocol@ - The transport protocol (@tcp@ | @udp@).
+--
+-- 'maxResults', 'describeClientVpnEndpoints_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+--
+-- 'nextToken', 'describeClientVpnEndpoints_nextToken' - The token to retrieve the next page of results.
+newDescribeClientVpnEndpoints ::
+  DescribeClientVpnEndpoints
+newDescribeClientVpnEndpoints =
+  DescribeClientVpnEndpoints'
+    { clientVpnEndpointIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ID of the Client VPN endpoint.
+describeClientVpnEndpoints_clientVpnEndpointIds :: Lens.Lens' DescribeClientVpnEndpoints (Prelude.Maybe [Prelude.Text])
+describeClientVpnEndpoints_clientVpnEndpointIds = Lens.lens (\DescribeClientVpnEndpoints' {clientVpnEndpointIds} -> clientVpnEndpointIds) (\s@DescribeClientVpnEndpoints' {} a -> s {clientVpnEndpointIds = a} :: DescribeClientVpnEndpoints) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeClientVpnEndpoints_dryRun :: Lens.Lens' DescribeClientVpnEndpoints (Prelude.Maybe Prelude.Bool)
+describeClientVpnEndpoints_dryRun = Lens.lens (\DescribeClientVpnEndpoints' {dryRun} -> dryRun) (\s@DescribeClientVpnEndpoints' {} a -> s {dryRun = a} :: DescribeClientVpnEndpoints)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @endpoint-id@ - The ID of the Client VPN endpoint.
+--
+-- -   @transport-protocol@ - The transport protocol (@tcp@ | @udp@).
+describeClientVpnEndpoints_filters :: Lens.Lens' DescribeClientVpnEndpoints (Prelude.Maybe [Filter])
+describeClientVpnEndpoints_filters = Lens.lens (\DescribeClientVpnEndpoints' {filters} -> filters) (\s@DescribeClientVpnEndpoints' {} a -> s {filters = a} :: DescribeClientVpnEndpoints) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+describeClientVpnEndpoints_maxResults :: Lens.Lens' DescribeClientVpnEndpoints (Prelude.Maybe Prelude.Natural)
+describeClientVpnEndpoints_maxResults = Lens.lens (\DescribeClientVpnEndpoints' {maxResults} -> maxResults) (\s@DescribeClientVpnEndpoints' {} a -> s {maxResults = a} :: DescribeClientVpnEndpoints)
+
+-- | The token to retrieve the next page of results.
+describeClientVpnEndpoints_nextToken :: Lens.Lens' DescribeClientVpnEndpoints (Prelude.Maybe Prelude.Text)
+describeClientVpnEndpoints_nextToken = Lens.lens (\DescribeClientVpnEndpoints' {nextToken} -> nextToken) (\s@DescribeClientVpnEndpoints' {} a -> s {nextToken = a} :: DescribeClientVpnEndpoints)
+
+instance Core.AWSPager DescribeClientVpnEndpoints where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnEndpointsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnEndpointsResponse_clientVpnEndpoints
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeClientVpnEndpoints_nextToken
+          Lens..~ rs
+          Lens.^? describeClientVpnEndpointsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeClientVpnEndpoints where
+  type
+    AWSResponse DescribeClientVpnEndpoints =
+      DescribeClientVpnEndpointsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeClientVpnEndpointsResponse'
+            Prelude.<$> ( x
+                            Data..@? "clientVpnEndpoint"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeClientVpnEndpoints where
+  hashWithSalt _salt DescribeClientVpnEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientVpnEndpointIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeClientVpnEndpoints where
+  rnf DescribeClientVpnEndpoints' {..} =
+    Prelude.rnf clientVpnEndpointIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeClientVpnEndpoints where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeClientVpnEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClientVpnEndpoints where
+  toQuery DescribeClientVpnEndpoints' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeClientVpnEndpoints" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "ClientVpnEndpointId"
+              Prelude.<$> clientVpnEndpointIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeClientVpnEndpointsResponse' smart constructor.
+data DescribeClientVpnEndpointsResponse = DescribeClientVpnEndpointsResponse'
+  { -- | Information about the Client VPN endpoints.
+    clientVpnEndpoints :: Prelude.Maybe [ClientVpnEndpoint],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientVpnEndpoints', 'describeClientVpnEndpointsResponse_clientVpnEndpoints' - Information about the Client VPN endpoints.
+--
+-- 'nextToken', 'describeClientVpnEndpointsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeClientVpnEndpointsResponse_httpStatus' - The response's http status code.
+newDescribeClientVpnEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientVpnEndpointsResponse
+newDescribeClientVpnEndpointsResponse pHttpStatus_ =
+  DescribeClientVpnEndpointsResponse'
+    { clientVpnEndpoints =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Client VPN endpoints.
+describeClientVpnEndpointsResponse_clientVpnEndpoints :: Lens.Lens' DescribeClientVpnEndpointsResponse (Prelude.Maybe [ClientVpnEndpoint])
+describeClientVpnEndpointsResponse_clientVpnEndpoints = Lens.lens (\DescribeClientVpnEndpointsResponse' {clientVpnEndpoints} -> clientVpnEndpoints) (\s@DescribeClientVpnEndpointsResponse' {} a -> s {clientVpnEndpoints = a} :: DescribeClientVpnEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeClientVpnEndpointsResponse_nextToken :: Lens.Lens' DescribeClientVpnEndpointsResponse (Prelude.Maybe Prelude.Text)
+describeClientVpnEndpointsResponse_nextToken = Lens.lens (\DescribeClientVpnEndpointsResponse' {nextToken} -> nextToken) (\s@DescribeClientVpnEndpointsResponse' {} a -> s {nextToken = a} :: DescribeClientVpnEndpointsResponse)
+
+-- | The response's http status code.
+describeClientVpnEndpointsResponse_httpStatus :: Lens.Lens' DescribeClientVpnEndpointsResponse Prelude.Int
+describeClientVpnEndpointsResponse_httpStatus = Lens.lens (\DescribeClientVpnEndpointsResponse' {httpStatus} -> httpStatus) (\s@DescribeClientVpnEndpointsResponse' {} a -> s {httpStatus = a} :: DescribeClientVpnEndpointsResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientVpnEndpointsResponse
+  where
+  rnf DescribeClientVpnEndpointsResponse' {..} =
+    Prelude.rnf clientVpnEndpoints
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeClientVpnRoutes.hs b/gen/Amazonka/EC2/DescribeClientVpnRoutes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeClientVpnRoutes.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeClientVpnRoutes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the routes for the specified Client VPN endpoint.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeClientVpnRoutes
+  ( -- * Creating a Request
+    DescribeClientVpnRoutes (..),
+    newDescribeClientVpnRoutes,
+
+    -- * Request Lenses
+    describeClientVpnRoutes_dryRun,
+    describeClientVpnRoutes_filters,
+    describeClientVpnRoutes_maxResults,
+    describeClientVpnRoutes_nextToken,
+    describeClientVpnRoutes_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    DescribeClientVpnRoutesResponse (..),
+    newDescribeClientVpnRoutesResponse,
+
+    -- * Response Lenses
+    describeClientVpnRoutesResponse_nextToken,
+    describeClientVpnRoutesResponse_routes,
+    describeClientVpnRoutesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClientVpnRoutes' smart constructor.
+data DescribeClientVpnRoutes = DescribeClientVpnRoutes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @destination-cidr@ - The CIDR of the route destination.
+    --
+    -- -   @origin@ - How the route was associated with the Client VPN endpoint
+    --     (@associate@ | @add-route@).
+    --
+    -- -   @target-subnet@ - The ID of the subnet through which traffic is
+    --     routed.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the nextToken value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnRoutes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeClientVpnRoutes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeClientVpnRoutes_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @destination-cidr@ - The CIDR of the route destination.
+--
+-- -   @origin@ - How the route was associated with the Client VPN endpoint
+--     (@associate@ | @add-route@).
+--
+-- -   @target-subnet@ - The ID of the subnet through which traffic is
+--     routed.
+--
+-- 'maxResults', 'describeClientVpnRoutes_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+--
+-- 'nextToken', 'describeClientVpnRoutes_nextToken' - The token to retrieve the next page of results.
+--
+-- 'clientVpnEndpointId', 'describeClientVpnRoutes_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+newDescribeClientVpnRoutes ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  DescribeClientVpnRoutes
+newDescribeClientVpnRoutes pClientVpnEndpointId_ =
+  DescribeClientVpnRoutes'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clientVpnEndpointId = pClientVpnEndpointId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeClientVpnRoutes_dryRun :: Lens.Lens' DescribeClientVpnRoutes (Prelude.Maybe Prelude.Bool)
+describeClientVpnRoutes_dryRun = Lens.lens (\DescribeClientVpnRoutes' {dryRun} -> dryRun) (\s@DescribeClientVpnRoutes' {} a -> s {dryRun = a} :: DescribeClientVpnRoutes)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @destination-cidr@ - The CIDR of the route destination.
+--
+-- -   @origin@ - How the route was associated with the Client VPN endpoint
+--     (@associate@ | @add-route@).
+--
+-- -   @target-subnet@ - The ID of the subnet through which traffic is
+--     routed.
+describeClientVpnRoutes_filters :: Lens.Lens' DescribeClientVpnRoutes (Prelude.Maybe [Filter])
+describeClientVpnRoutes_filters = Lens.lens (\DescribeClientVpnRoutes' {filters} -> filters) (\s@DescribeClientVpnRoutes' {} a -> s {filters = a} :: DescribeClientVpnRoutes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+describeClientVpnRoutes_maxResults :: Lens.Lens' DescribeClientVpnRoutes (Prelude.Maybe Prelude.Natural)
+describeClientVpnRoutes_maxResults = Lens.lens (\DescribeClientVpnRoutes' {maxResults} -> maxResults) (\s@DescribeClientVpnRoutes' {} a -> s {maxResults = a} :: DescribeClientVpnRoutes)
+
+-- | The token to retrieve the next page of results.
+describeClientVpnRoutes_nextToken :: Lens.Lens' DescribeClientVpnRoutes (Prelude.Maybe Prelude.Text)
+describeClientVpnRoutes_nextToken = Lens.lens (\DescribeClientVpnRoutes' {nextToken} -> nextToken) (\s@DescribeClientVpnRoutes' {} a -> s {nextToken = a} :: DescribeClientVpnRoutes)
+
+-- | The ID of the Client VPN endpoint.
+describeClientVpnRoutes_clientVpnEndpointId :: Lens.Lens' DescribeClientVpnRoutes Prelude.Text
+describeClientVpnRoutes_clientVpnEndpointId = Lens.lens (\DescribeClientVpnRoutes' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DescribeClientVpnRoutes' {} a -> s {clientVpnEndpointId = a} :: DescribeClientVpnRoutes)
+
+instance Core.AWSPager DescribeClientVpnRoutes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnRoutesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnRoutesResponse_routes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeClientVpnRoutes_nextToken
+          Lens..~ rs
+          Lens.^? describeClientVpnRoutesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeClientVpnRoutes where
+  type
+    AWSResponse DescribeClientVpnRoutes =
+      DescribeClientVpnRoutesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeClientVpnRoutesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "routes"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeClientVpnRoutes where
+  hashWithSalt _salt DescribeClientVpnRoutes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance Prelude.NFData DescribeClientVpnRoutes where
+  rnf DescribeClientVpnRoutes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance Data.ToHeaders DescribeClientVpnRoutes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeClientVpnRoutes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClientVpnRoutes where
+  toQuery DescribeClientVpnRoutes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeClientVpnRoutes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newDescribeClientVpnRoutesResponse' smart constructor.
+data DescribeClientVpnRoutesResponse = DescribeClientVpnRoutesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Client VPN endpoint routes.
+    routes :: Prelude.Maybe [ClientVpnRoute],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnRoutesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeClientVpnRoutesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'routes', 'describeClientVpnRoutesResponse_routes' - Information about the Client VPN endpoint routes.
+--
+-- 'httpStatus', 'describeClientVpnRoutesResponse_httpStatus' - The response's http status code.
+newDescribeClientVpnRoutesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientVpnRoutesResponse
+newDescribeClientVpnRoutesResponse pHttpStatus_ =
+  DescribeClientVpnRoutesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      routes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeClientVpnRoutesResponse_nextToken :: Lens.Lens' DescribeClientVpnRoutesResponse (Prelude.Maybe Prelude.Text)
+describeClientVpnRoutesResponse_nextToken = Lens.lens (\DescribeClientVpnRoutesResponse' {nextToken} -> nextToken) (\s@DescribeClientVpnRoutesResponse' {} a -> s {nextToken = a} :: DescribeClientVpnRoutesResponse)
+
+-- | Information about the Client VPN endpoint routes.
+describeClientVpnRoutesResponse_routes :: Lens.Lens' DescribeClientVpnRoutesResponse (Prelude.Maybe [ClientVpnRoute])
+describeClientVpnRoutesResponse_routes = Lens.lens (\DescribeClientVpnRoutesResponse' {routes} -> routes) (\s@DescribeClientVpnRoutesResponse' {} a -> s {routes = a} :: DescribeClientVpnRoutesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeClientVpnRoutesResponse_httpStatus :: Lens.Lens' DescribeClientVpnRoutesResponse Prelude.Int
+describeClientVpnRoutesResponse_httpStatus = Lens.lens (\DescribeClientVpnRoutesResponse' {httpStatus} -> httpStatus) (\s@DescribeClientVpnRoutesResponse' {} a -> s {httpStatus = a} :: DescribeClientVpnRoutesResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientVpnRoutesResponse
+  where
+  rnf DescribeClientVpnRoutesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf routes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeClientVpnTargetNetworks.hs b/gen/Amazonka/EC2/DescribeClientVpnTargetNetworks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeClientVpnTargetNetworks.hs
@@ -0,0 +1,335 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeClientVpnTargetNetworks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the target networks associated with the specified Client VPN
+-- endpoint.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeClientVpnTargetNetworks
+  ( -- * Creating a Request
+    DescribeClientVpnTargetNetworks (..),
+    newDescribeClientVpnTargetNetworks,
+
+    -- * Request Lenses
+    describeClientVpnTargetNetworks_associationIds,
+    describeClientVpnTargetNetworks_dryRun,
+    describeClientVpnTargetNetworks_filters,
+    describeClientVpnTargetNetworks_maxResults,
+    describeClientVpnTargetNetworks_nextToken,
+    describeClientVpnTargetNetworks_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    DescribeClientVpnTargetNetworksResponse (..),
+    newDescribeClientVpnTargetNetworksResponse,
+
+    -- * Response Lenses
+    describeClientVpnTargetNetworksResponse_clientVpnTargetNetworks,
+    describeClientVpnTargetNetworksResponse_nextToken,
+    describeClientVpnTargetNetworksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeClientVpnTargetNetworks' smart constructor.
+data DescribeClientVpnTargetNetworks = DescribeClientVpnTargetNetworks'
+  { -- | The IDs of the target network associations.
+    associationIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @association-id@ - The ID of the association.
+    --
+    -- -   @target-network-id@ - The ID of the subnet specified as the target
+    --     network.
+    --
+    -- -   @vpc-id@ - The ID of the VPC in which the target network is located.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the nextToken value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnTargetNetworks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationIds', 'describeClientVpnTargetNetworks_associationIds' - The IDs of the target network associations.
+--
+-- 'dryRun', 'describeClientVpnTargetNetworks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeClientVpnTargetNetworks_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @association-id@ - The ID of the association.
+--
+-- -   @target-network-id@ - The ID of the subnet specified as the target
+--     network.
+--
+-- -   @vpc-id@ - The ID of the VPC in which the target network is located.
+--
+-- 'maxResults', 'describeClientVpnTargetNetworks_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+--
+-- 'nextToken', 'describeClientVpnTargetNetworks_nextToken' - The token to retrieve the next page of results.
+--
+-- 'clientVpnEndpointId', 'describeClientVpnTargetNetworks_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+newDescribeClientVpnTargetNetworks ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  DescribeClientVpnTargetNetworks
+newDescribeClientVpnTargetNetworks
+  pClientVpnEndpointId_ =
+    DescribeClientVpnTargetNetworks'
+      { associationIds =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_
+      }
+
+-- | The IDs of the target network associations.
+describeClientVpnTargetNetworks_associationIds :: Lens.Lens' DescribeClientVpnTargetNetworks (Prelude.Maybe [Prelude.Text])
+describeClientVpnTargetNetworks_associationIds = Lens.lens (\DescribeClientVpnTargetNetworks' {associationIds} -> associationIds) (\s@DescribeClientVpnTargetNetworks' {} a -> s {associationIds = a} :: DescribeClientVpnTargetNetworks) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeClientVpnTargetNetworks_dryRun :: Lens.Lens' DescribeClientVpnTargetNetworks (Prelude.Maybe Prelude.Bool)
+describeClientVpnTargetNetworks_dryRun = Lens.lens (\DescribeClientVpnTargetNetworks' {dryRun} -> dryRun) (\s@DescribeClientVpnTargetNetworks' {} a -> s {dryRun = a} :: DescribeClientVpnTargetNetworks)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @association-id@ - The ID of the association.
+--
+-- -   @target-network-id@ - The ID of the subnet specified as the target
+--     network.
+--
+-- -   @vpc-id@ - The ID of the VPC in which the target network is located.
+describeClientVpnTargetNetworks_filters :: Lens.Lens' DescribeClientVpnTargetNetworks (Prelude.Maybe [Filter])
+describeClientVpnTargetNetworks_filters = Lens.lens (\DescribeClientVpnTargetNetworks' {filters} -> filters) (\s@DescribeClientVpnTargetNetworks' {} a -> s {filters = a} :: DescribeClientVpnTargetNetworks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the nextToken value.
+describeClientVpnTargetNetworks_maxResults :: Lens.Lens' DescribeClientVpnTargetNetworks (Prelude.Maybe Prelude.Natural)
+describeClientVpnTargetNetworks_maxResults = Lens.lens (\DescribeClientVpnTargetNetworks' {maxResults} -> maxResults) (\s@DescribeClientVpnTargetNetworks' {} a -> s {maxResults = a} :: DescribeClientVpnTargetNetworks)
+
+-- | The token to retrieve the next page of results.
+describeClientVpnTargetNetworks_nextToken :: Lens.Lens' DescribeClientVpnTargetNetworks (Prelude.Maybe Prelude.Text)
+describeClientVpnTargetNetworks_nextToken = Lens.lens (\DescribeClientVpnTargetNetworks' {nextToken} -> nextToken) (\s@DescribeClientVpnTargetNetworks' {} a -> s {nextToken = a} :: DescribeClientVpnTargetNetworks)
+
+-- | The ID of the Client VPN endpoint.
+describeClientVpnTargetNetworks_clientVpnEndpointId :: Lens.Lens' DescribeClientVpnTargetNetworks Prelude.Text
+describeClientVpnTargetNetworks_clientVpnEndpointId = Lens.lens (\DescribeClientVpnTargetNetworks' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DescribeClientVpnTargetNetworks' {} a -> s {clientVpnEndpointId = a} :: DescribeClientVpnTargetNetworks)
+
+instance
+  Core.AWSPager
+    DescribeClientVpnTargetNetworks
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnTargetNetworksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeClientVpnTargetNetworksResponse_clientVpnTargetNetworks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeClientVpnTargetNetworks_nextToken
+          Lens..~ rs
+          Lens.^? describeClientVpnTargetNetworksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeClientVpnTargetNetworks
+  where
+  type
+    AWSResponse DescribeClientVpnTargetNetworks =
+      DescribeClientVpnTargetNetworksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeClientVpnTargetNetworksResponse'
+            Prelude.<$> ( x
+                            Data..@? "clientVpnTargetNetworks"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeClientVpnTargetNetworks
+  where
+  hashWithSalt
+    _salt
+    DescribeClientVpnTargetNetworks' {..} =
+      _salt
+        `Prelude.hashWithSalt` associationIds
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance
+  Prelude.NFData
+    DescribeClientVpnTargetNetworks
+  where
+  rnf DescribeClientVpnTargetNetworks' {..} =
+    Prelude.rnf associationIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance
+  Data.ToHeaders
+    DescribeClientVpnTargetNetworks
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeClientVpnTargetNetworks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeClientVpnTargetNetworks where
+  toQuery DescribeClientVpnTargetNetworks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeClientVpnTargetNetworks" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AssociationIds"
+              Prelude.<$> associationIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newDescribeClientVpnTargetNetworksResponse' smart constructor.
+data DescribeClientVpnTargetNetworksResponse = DescribeClientVpnTargetNetworksResponse'
+  { -- | Information about the associated target networks.
+    clientVpnTargetNetworks :: Prelude.Maybe [TargetNetwork],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClientVpnTargetNetworksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientVpnTargetNetworks', 'describeClientVpnTargetNetworksResponse_clientVpnTargetNetworks' - Information about the associated target networks.
+--
+-- 'nextToken', 'describeClientVpnTargetNetworksResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeClientVpnTargetNetworksResponse_httpStatus' - The response's http status code.
+newDescribeClientVpnTargetNetworksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClientVpnTargetNetworksResponse
+newDescribeClientVpnTargetNetworksResponse
+  pHttpStatus_ =
+    DescribeClientVpnTargetNetworksResponse'
+      { clientVpnTargetNetworks =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the associated target networks.
+describeClientVpnTargetNetworksResponse_clientVpnTargetNetworks :: Lens.Lens' DescribeClientVpnTargetNetworksResponse (Prelude.Maybe [TargetNetwork])
+describeClientVpnTargetNetworksResponse_clientVpnTargetNetworks = Lens.lens (\DescribeClientVpnTargetNetworksResponse' {clientVpnTargetNetworks} -> clientVpnTargetNetworks) (\s@DescribeClientVpnTargetNetworksResponse' {} a -> s {clientVpnTargetNetworks = a} :: DescribeClientVpnTargetNetworksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeClientVpnTargetNetworksResponse_nextToken :: Lens.Lens' DescribeClientVpnTargetNetworksResponse (Prelude.Maybe Prelude.Text)
+describeClientVpnTargetNetworksResponse_nextToken = Lens.lens (\DescribeClientVpnTargetNetworksResponse' {nextToken} -> nextToken) (\s@DescribeClientVpnTargetNetworksResponse' {} a -> s {nextToken = a} :: DescribeClientVpnTargetNetworksResponse)
+
+-- | The response's http status code.
+describeClientVpnTargetNetworksResponse_httpStatus :: Lens.Lens' DescribeClientVpnTargetNetworksResponse Prelude.Int
+describeClientVpnTargetNetworksResponse_httpStatus = Lens.lens (\DescribeClientVpnTargetNetworksResponse' {httpStatus} -> httpStatus) (\s@DescribeClientVpnTargetNetworksResponse' {} a -> s {httpStatus = a} :: DescribeClientVpnTargetNetworksResponse)
+
+instance
+  Prelude.NFData
+    DescribeClientVpnTargetNetworksResponse
+  where
+  rnf DescribeClientVpnTargetNetworksResponse' {..} =
+    Prelude.rnf clientVpnTargetNetworks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeCoipPools.hs b/gen/Amazonka/EC2/DescribeCoipPools.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeCoipPools.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeCoipPools
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified customer-owned address pools or all of your
+-- customer-owned address pools.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeCoipPools
+  ( -- * Creating a Request
+    DescribeCoipPools (..),
+    newDescribeCoipPools,
+
+    -- * Request Lenses
+    describeCoipPools_dryRun,
+    describeCoipPools_filters,
+    describeCoipPools_maxResults,
+    describeCoipPools_nextToken,
+    describeCoipPools_poolIds,
+
+    -- * Destructuring the Response
+    DescribeCoipPoolsResponse (..),
+    newDescribeCoipPoolsResponse,
+
+    -- * Response Lenses
+    describeCoipPoolsResponse_coipPools,
+    describeCoipPoolsResponse_nextToken,
+    describeCoipPoolsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeCoipPools' smart constructor.
+data DescribeCoipPools = DescribeCoipPools'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @coip-pool.local-gateway-route-table-id@ - The ID of the local
+    --     gateway route table.
+    --
+    -- -   @coip-pool.pool-id@ - The ID of the address pool.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the address pools.
+    poolIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCoipPools' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeCoipPools_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeCoipPools_filters' - One or more filters.
+--
+-- -   @coip-pool.local-gateway-route-table-id@ - The ID of the local
+--     gateway route table.
+--
+-- -   @coip-pool.pool-id@ - The ID of the address pool.
+--
+-- 'maxResults', 'describeCoipPools_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeCoipPools_nextToken' - The token for the next page of results.
+--
+-- 'poolIds', 'describeCoipPools_poolIds' - The IDs of the address pools.
+newDescribeCoipPools ::
+  DescribeCoipPools
+newDescribeCoipPools =
+  DescribeCoipPools'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      poolIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeCoipPools_dryRun :: Lens.Lens' DescribeCoipPools (Prelude.Maybe Prelude.Bool)
+describeCoipPools_dryRun = Lens.lens (\DescribeCoipPools' {dryRun} -> dryRun) (\s@DescribeCoipPools' {} a -> s {dryRun = a} :: DescribeCoipPools)
+
+-- | One or more filters.
+--
+-- -   @coip-pool.local-gateway-route-table-id@ - The ID of the local
+--     gateway route table.
+--
+-- -   @coip-pool.pool-id@ - The ID of the address pool.
+describeCoipPools_filters :: Lens.Lens' DescribeCoipPools (Prelude.Maybe [Filter])
+describeCoipPools_filters = Lens.lens (\DescribeCoipPools' {filters} -> filters) (\s@DescribeCoipPools' {} a -> s {filters = a} :: DescribeCoipPools) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeCoipPools_maxResults :: Lens.Lens' DescribeCoipPools (Prelude.Maybe Prelude.Natural)
+describeCoipPools_maxResults = Lens.lens (\DescribeCoipPools' {maxResults} -> maxResults) (\s@DescribeCoipPools' {} a -> s {maxResults = a} :: DescribeCoipPools)
+
+-- | The token for the next page of results.
+describeCoipPools_nextToken :: Lens.Lens' DescribeCoipPools (Prelude.Maybe Prelude.Text)
+describeCoipPools_nextToken = Lens.lens (\DescribeCoipPools' {nextToken} -> nextToken) (\s@DescribeCoipPools' {} a -> s {nextToken = a} :: DescribeCoipPools)
+
+-- | The IDs of the address pools.
+describeCoipPools_poolIds :: Lens.Lens' DescribeCoipPools (Prelude.Maybe [Prelude.Text])
+describeCoipPools_poolIds = Lens.lens (\DescribeCoipPools' {poolIds} -> poolIds) (\s@DescribeCoipPools' {} a -> s {poolIds = a} :: DescribeCoipPools) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeCoipPools where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeCoipPoolsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeCoipPoolsResponse_coipPools
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeCoipPools_nextToken
+          Lens..~ rs
+          Lens.^? describeCoipPoolsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeCoipPools where
+  type
+    AWSResponse DescribeCoipPools =
+      DescribeCoipPoolsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeCoipPoolsResponse'
+            Prelude.<$> ( x
+                            Data..@? "coipPoolSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCoipPools where
+  hashWithSalt _salt DescribeCoipPools' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` poolIds
+
+instance Prelude.NFData DescribeCoipPools where
+  rnf DescribeCoipPools' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf poolIds
+
+instance Data.ToHeaders DescribeCoipPools where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeCoipPools where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCoipPools where
+  toQuery DescribeCoipPools' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeCoipPools" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "PoolId" Prelude.<$> poolIds)
+      ]
+
+-- | /See:/ 'newDescribeCoipPoolsResponse' smart constructor.
+data DescribeCoipPoolsResponse = DescribeCoipPoolsResponse'
+  { -- | Information about the address pools.
+    coipPools :: Prelude.Maybe [CoipPool],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCoipPoolsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipPools', 'describeCoipPoolsResponse_coipPools' - Information about the address pools.
+--
+-- 'nextToken', 'describeCoipPoolsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeCoipPoolsResponse_httpStatus' - The response's http status code.
+newDescribeCoipPoolsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCoipPoolsResponse
+newDescribeCoipPoolsResponse pHttpStatus_ =
+  DescribeCoipPoolsResponse'
+    { coipPools =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address pools.
+describeCoipPoolsResponse_coipPools :: Lens.Lens' DescribeCoipPoolsResponse (Prelude.Maybe [CoipPool])
+describeCoipPoolsResponse_coipPools = Lens.lens (\DescribeCoipPoolsResponse' {coipPools} -> coipPools) (\s@DescribeCoipPoolsResponse' {} a -> s {coipPools = a} :: DescribeCoipPoolsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeCoipPoolsResponse_nextToken :: Lens.Lens' DescribeCoipPoolsResponse (Prelude.Maybe Prelude.Text)
+describeCoipPoolsResponse_nextToken = Lens.lens (\DescribeCoipPoolsResponse' {nextToken} -> nextToken) (\s@DescribeCoipPoolsResponse' {} a -> s {nextToken = a} :: DescribeCoipPoolsResponse)
+
+-- | The response's http status code.
+describeCoipPoolsResponse_httpStatus :: Lens.Lens' DescribeCoipPoolsResponse Prelude.Int
+describeCoipPoolsResponse_httpStatus = Lens.lens (\DescribeCoipPoolsResponse' {httpStatus} -> httpStatus) (\s@DescribeCoipPoolsResponse' {} a -> s {httpStatus = a} :: DescribeCoipPoolsResponse)
+
+instance Prelude.NFData DescribeCoipPoolsResponse where
+  rnf DescribeCoipPoolsResponse' {..} =
+    Prelude.rnf coipPools
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeConversionTasks.hs b/gen/Amazonka/EC2/DescribeConversionTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeConversionTasks.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeConversionTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified conversion tasks or all your conversion tasks.
+-- For more information, see the
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/ VM Import\/Export User Guide>.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+module Amazonka.EC2.DescribeConversionTasks
+  ( -- * Creating a Request
+    DescribeConversionTasks (..),
+    newDescribeConversionTasks,
+
+    -- * Request Lenses
+    describeConversionTasks_conversionTaskIds,
+    describeConversionTasks_dryRun,
+
+    -- * Destructuring the Response
+    DescribeConversionTasksResponse (..),
+    newDescribeConversionTasksResponse,
+
+    -- * Response Lenses
+    describeConversionTasksResponse_conversionTasks,
+    describeConversionTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeConversionTasks' smart constructor.
+data DescribeConversionTasks = DescribeConversionTasks'
+  { -- | The conversion task IDs.
+    conversionTaskIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConversionTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conversionTaskIds', 'describeConversionTasks_conversionTaskIds' - The conversion task IDs.
+--
+-- 'dryRun', 'describeConversionTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDescribeConversionTasks ::
+  DescribeConversionTasks
+newDescribeConversionTasks =
+  DescribeConversionTasks'
+    { conversionTaskIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing
+    }
+
+-- | The conversion task IDs.
+describeConversionTasks_conversionTaskIds :: Lens.Lens' DescribeConversionTasks (Prelude.Maybe [Prelude.Text])
+describeConversionTasks_conversionTaskIds = Lens.lens (\DescribeConversionTasks' {conversionTaskIds} -> conversionTaskIds) (\s@DescribeConversionTasks' {} a -> s {conversionTaskIds = a} :: DescribeConversionTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeConversionTasks_dryRun :: Lens.Lens' DescribeConversionTasks (Prelude.Maybe Prelude.Bool)
+describeConversionTasks_dryRun = Lens.lens (\DescribeConversionTasks' {dryRun} -> dryRun) (\s@DescribeConversionTasks' {} a -> s {dryRun = a} :: DescribeConversionTasks)
+
+instance Core.AWSRequest DescribeConversionTasks where
+  type
+    AWSResponse DescribeConversionTasks =
+      DescribeConversionTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeConversionTasksResponse'
+            Prelude.<$> ( x
+                            Data..@? "conversionTasks"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeConversionTasks where
+  hashWithSalt _salt DescribeConversionTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` conversionTaskIds
+      `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData DescribeConversionTasks where
+  rnf DescribeConversionTasks' {..} =
+    Prelude.rnf conversionTaskIds
+      `Prelude.seq` Prelude.rnf dryRun
+
+instance Data.ToHeaders DescribeConversionTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeConversionTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeConversionTasks where
+  toQuery DescribeConversionTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeConversionTasks" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "ConversionTaskId"
+              Prelude.<$> conversionTaskIds
+          ),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newDescribeConversionTasksResponse' smart constructor.
+data DescribeConversionTasksResponse = DescribeConversionTasksResponse'
+  { -- | Information about the conversion tasks.
+    conversionTasks :: Prelude.Maybe [ConversionTask],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeConversionTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conversionTasks', 'describeConversionTasksResponse_conversionTasks' - Information about the conversion tasks.
+--
+-- 'httpStatus', 'describeConversionTasksResponse_httpStatus' - The response's http status code.
+newDescribeConversionTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeConversionTasksResponse
+newDescribeConversionTasksResponse pHttpStatus_ =
+  DescribeConversionTasksResponse'
+    { conversionTasks =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the conversion tasks.
+describeConversionTasksResponse_conversionTasks :: Lens.Lens' DescribeConversionTasksResponse (Prelude.Maybe [ConversionTask])
+describeConversionTasksResponse_conversionTasks = Lens.lens (\DescribeConversionTasksResponse' {conversionTasks} -> conversionTasks) (\s@DescribeConversionTasksResponse' {} a -> s {conversionTasks = a} :: DescribeConversionTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeConversionTasksResponse_httpStatus :: Lens.Lens' DescribeConversionTasksResponse Prelude.Int
+describeConversionTasksResponse_httpStatus = Lens.lens (\DescribeConversionTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeConversionTasksResponse' {} a -> s {httpStatus = a} :: DescribeConversionTasksResponse)
+
+instance
+  Prelude.NFData
+    DescribeConversionTasksResponse
+  where
+  rnf DescribeConversionTasksResponse' {..} =
+    Prelude.rnf conversionTasks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeCustomerGateways.hs b/gen/Amazonka/EC2/DescribeCustomerGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeCustomerGateways.hs
@@ -0,0 +1,291 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeCustomerGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your VPN customer gateways.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.DescribeCustomerGateways
+  ( -- * Creating a Request
+    DescribeCustomerGateways (..),
+    newDescribeCustomerGateways,
+
+    -- * Request Lenses
+    describeCustomerGateways_customerGatewayIds,
+    describeCustomerGateways_dryRun,
+    describeCustomerGateways_filters,
+
+    -- * Destructuring the Response
+    DescribeCustomerGatewaysResponse (..),
+    newDescribeCustomerGatewaysResponse,
+
+    -- * Response Lenses
+    describeCustomerGatewaysResponse_customerGateways,
+    describeCustomerGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeCustomerGateways.
+--
+-- /See:/ 'newDescribeCustomerGateways' smart constructor.
+data DescribeCustomerGateways = DescribeCustomerGateways'
+  { -- | One or more customer gateway IDs.
+    --
+    -- Default: Describes all your customer gateways.
+    customerGatewayIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @bgp-asn@ - The customer gateway\'s Border Gateway Protocol (BGP)
+    --     Autonomous System Number (ASN).
+    --
+    -- -   @customer-gateway-id@ - The ID of the customer gateway.
+    --
+    -- -   @ip-address@ - The IP address of the customer gateway device\'s
+    --     external interface.
+    --
+    -- -   @state@ - The state of the customer gateway (@pending@ | @available@
+    --     | @deleting@ | @deleted@).
+    --
+    -- -   @type@ - The type of customer gateway. Currently, the only supported
+    --     type is @ipsec.1@.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomerGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customerGatewayIds', 'describeCustomerGateways_customerGatewayIds' - One or more customer gateway IDs.
+--
+-- Default: Describes all your customer gateways.
+--
+-- 'dryRun', 'describeCustomerGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeCustomerGateways_filters' - One or more filters.
+--
+-- -   @bgp-asn@ - The customer gateway\'s Border Gateway Protocol (BGP)
+--     Autonomous System Number (ASN).
+--
+-- -   @customer-gateway-id@ - The ID of the customer gateway.
+--
+-- -   @ip-address@ - The IP address of the customer gateway device\'s
+--     external interface.
+--
+-- -   @state@ - The state of the customer gateway (@pending@ | @available@
+--     | @deleting@ | @deleted@).
+--
+-- -   @type@ - The type of customer gateway. Currently, the only supported
+--     type is @ipsec.1@.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+newDescribeCustomerGateways ::
+  DescribeCustomerGateways
+newDescribeCustomerGateways =
+  DescribeCustomerGateways'
+    { customerGatewayIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing
+    }
+
+-- | One or more customer gateway IDs.
+--
+-- Default: Describes all your customer gateways.
+describeCustomerGateways_customerGatewayIds :: Lens.Lens' DescribeCustomerGateways (Prelude.Maybe [Prelude.Text])
+describeCustomerGateways_customerGatewayIds = Lens.lens (\DescribeCustomerGateways' {customerGatewayIds} -> customerGatewayIds) (\s@DescribeCustomerGateways' {} a -> s {customerGatewayIds = a} :: DescribeCustomerGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeCustomerGateways_dryRun :: Lens.Lens' DescribeCustomerGateways (Prelude.Maybe Prelude.Bool)
+describeCustomerGateways_dryRun = Lens.lens (\DescribeCustomerGateways' {dryRun} -> dryRun) (\s@DescribeCustomerGateways' {} a -> s {dryRun = a} :: DescribeCustomerGateways)
+
+-- | One or more filters.
+--
+-- -   @bgp-asn@ - The customer gateway\'s Border Gateway Protocol (BGP)
+--     Autonomous System Number (ASN).
+--
+-- -   @customer-gateway-id@ - The ID of the customer gateway.
+--
+-- -   @ip-address@ - The IP address of the customer gateway device\'s
+--     external interface.
+--
+-- -   @state@ - The state of the customer gateway (@pending@ | @available@
+--     | @deleting@ | @deleted@).
+--
+-- -   @type@ - The type of customer gateway. Currently, the only supported
+--     type is @ipsec.1@.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeCustomerGateways_filters :: Lens.Lens' DescribeCustomerGateways (Prelude.Maybe [Filter])
+describeCustomerGateways_filters = Lens.lens (\DescribeCustomerGateways' {filters} -> filters) (\s@DescribeCustomerGateways' {} a -> s {filters = a} :: DescribeCustomerGateways) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeCustomerGateways where
+  type
+    AWSResponse DescribeCustomerGateways =
+      DescribeCustomerGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeCustomerGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "customerGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCustomerGateways where
+  hashWithSalt _salt DescribeCustomerGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` customerGatewayIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData DescribeCustomerGateways where
+  rnf DescribeCustomerGateways' {..} =
+    Prelude.rnf customerGatewayIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+
+instance Data.ToHeaders DescribeCustomerGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeCustomerGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCustomerGateways where
+  toQuery DescribeCustomerGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeCustomerGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "CustomerGatewayId"
+              Prelude.<$> customerGatewayIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters)
+      ]
+
+-- | Contains the output of DescribeCustomerGateways.
+--
+-- /See:/ 'newDescribeCustomerGatewaysResponse' smart constructor.
+data DescribeCustomerGatewaysResponse = DescribeCustomerGatewaysResponse'
+  { -- | Information about one or more customer gateways.
+    customerGateways :: Prelude.Maybe [CustomerGateway],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCustomerGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customerGateways', 'describeCustomerGatewaysResponse_customerGateways' - Information about one or more customer gateways.
+--
+-- 'httpStatus', 'describeCustomerGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeCustomerGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeCustomerGatewaysResponse
+newDescribeCustomerGatewaysResponse pHttpStatus_ =
+  DescribeCustomerGatewaysResponse'
+    { customerGateways =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more customer gateways.
+describeCustomerGatewaysResponse_customerGateways :: Lens.Lens' DescribeCustomerGatewaysResponse (Prelude.Maybe [CustomerGateway])
+describeCustomerGatewaysResponse_customerGateways = Lens.lens (\DescribeCustomerGatewaysResponse' {customerGateways} -> customerGateways) (\s@DescribeCustomerGatewaysResponse' {} a -> s {customerGateways = a} :: DescribeCustomerGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeCustomerGatewaysResponse_httpStatus :: Lens.Lens' DescribeCustomerGatewaysResponse Prelude.Int
+describeCustomerGatewaysResponse_httpStatus = Lens.lens (\DescribeCustomerGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeCustomerGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeCustomerGatewaysResponse)
+
+instance
+  Prelude.NFData
+    DescribeCustomerGatewaysResponse
+  where
+  rnf DescribeCustomerGatewaysResponse' {..} =
+    Prelude.rnf customerGateways
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeDhcpOptions.hs b/gen/Amazonka/EC2/DescribeDhcpOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeDhcpOptions.hs
@@ -0,0 +1,340 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeDhcpOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your DHCP options sets.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html DHCP options sets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeDhcpOptions
+  ( -- * Creating a Request
+    DescribeDhcpOptions (..),
+    newDescribeDhcpOptions,
+
+    -- * Request Lenses
+    describeDhcpOptions_dhcpOptionsIds,
+    describeDhcpOptions_dryRun,
+    describeDhcpOptions_filters,
+    describeDhcpOptions_maxResults,
+    describeDhcpOptions_nextToken,
+
+    -- * Destructuring the Response
+    DescribeDhcpOptionsResponse (..),
+    newDescribeDhcpOptionsResponse,
+
+    -- * Response Lenses
+    describeDhcpOptionsResponse_dhcpOptions,
+    describeDhcpOptionsResponse_nextToken,
+    describeDhcpOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDhcpOptions' smart constructor.
+data DescribeDhcpOptions = DescribeDhcpOptions'
+  { -- | The IDs of one or more DHCP options sets.
+    --
+    -- Default: Describes all your DHCP options sets.
+    dhcpOptionsIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @dhcp-options-id@ - The ID of a DHCP options set.
+    --
+    -- -   @key@ - The key for one of the options (for example, @domain-name@).
+    --
+    -- -   @value@ - The value for one of the options.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     DHCP options set.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDhcpOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dhcpOptionsIds', 'describeDhcpOptions_dhcpOptionsIds' - The IDs of one or more DHCP options sets.
+--
+-- Default: Describes all your DHCP options sets.
+--
+-- 'dryRun', 'describeDhcpOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeDhcpOptions_filters' - One or more filters.
+--
+-- -   @dhcp-options-id@ - The ID of a DHCP options set.
+--
+-- -   @key@ - The key for one of the options (for example, @domain-name@).
+--
+-- -   @value@ - The value for one of the options.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     DHCP options set.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'describeDhcpOptions_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeDhcpOptions_nextToken' - The token for the next page of results.
+newDescribeDhcpOptions ::
+  DescribeDhcpOptions
+newDescribeDhcpOptions =
+  DescribeDhcpOptions'
+    { dhcpOptionsIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The IDs of one or more DHCP options sets.
+--
+-- Default: Describes all your DHCP options sets.
+describeDhcpOptions_dhcpOptionsIds :: Lens.Lens' DescribeDhcpOptions (Prelude.Maybe [Prelude.Text])
+describeDhcpOptions_dhcpOptionsIds = Lens.lens (\DescribeDhcpOptions' {dhcpOptionsIds} -> dhcpOptionsIds) (\s@DescribeDhcpOptions' {} a -> s {dhcpOptionsIds = a} :: DescribeDhcpOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeDhcpOptions_dryRun :: Lens.Lens' DescribeDhcpOptions (Prelude.Maybe Prelude.Bool)
+describeDhcpOptions_dryRun = Lens.lens (\DescribeDhcpOptions' {dryRun} -> dryRun) (\s@DescribeDhcpOptions' {} a -> s {dryRun = a} :: DescribeDhcpOptions)
+
+-- | One or more filters.
+--
+-- -   @dhcp-options-id@ - The ID of a DHCP options set.
+--
+-- -   @key@ - The key for one of the options (for example, @domain-name@).
+--
+-- -   @value@ - The value for one of the options.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     DHCP options set.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeDhcpOptions_filters :: Lens.Lens' DescribeDhcpOptions (Prelude.Maybe [Filter])
+describeDhcpOptions_filters = Lens.lens (\DescribeDhcpOptions' {filters} -> filters) (\s@DescribeDhcpOptions' {} a -> s {filters = a} :: DescribeDhcpOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeDhcpOptions_maxResults :: Lens.Lens' DescribeDhcpOptions (Prelude.Maybe Prelude.Natural)
+describeDhcpOptions_maxResults = Lens.lens (\DescribeDhcpOptions' {maxResults} -> maxResults) (\s@DescribeDhcpOptions' {} a -> s {maxResults = a} :: DescribeDhcpOptions)
+
+-- | The token for the next page of results.
+describeDhcpOptions_nextToken :: Lens.Lens' DescribeDhcpOptions (Prelude.Maybe Prelude.Text)
+describeDhcpOptions_nextToken = Lens.lens (\DescribeDhcpOptions' {nextToken} -> nextToken) (\s@DescribeDhcpOptions' {} a -> s {nextToken = a} :: DescribeDhcpOptions)
+
+instance Core.AWSPager DescribeDhcpOptions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeDhcpOptionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeDhcpOptionsResponse_dhcpOptions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeDhcpOptions_nextToken
+          Lens..~ rs
+          Lens.^? describeDhcpOptionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeDhcpOptions where
+  type
+    AWSResponse DescribeDhcpOptions =
+      DescribeDhcpOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeDhcpOptionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "dhcpOptionsSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDhcpOptions where
+  hashWithSalt _salt DescribeDhcpOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dhcpOptionsIds
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeDhcpOptions where
+  rnf DescribeDhcpOptions' {..} =
+    Prelude.rnf dhcpOptionsIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeDhcpOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeDhcpOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDhcpOptions where
+  toQuery DescribeDhcpOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeDhcpOptions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "DhcpOptionsId"
+              Prelude.<$> dhcpOptionsIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeDhcpOptionsResponse' smart constructor.
+data DescribeDhcpOptionsResponse = DescribeDhcpOptionsResponse'
+  { -- | Information about one or more DHCP options sets.
+    dhcpOptions :: Prelude.Maybe [DhcpOptions],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDhcpOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dhcpOptions', 'describeDhcpOptionsResponse_dhcpOptions' - Information about one or more DHCP options sets.
+--
+-- 'nextToken', 'describeDhcpOptionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeDhcpOptionsResponse_httpStatus' - The response's http status code.
+newDescribeDhcpOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDhcpOptionsResponse
+newDescribeDhcpOptionsResponse pHttpStatus_ =
+  DescribeDhcpOptionsResponse'
+    { dhcpOptions =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more DHCP options sets.
+describeDhcpOptionsResponse_dhcpOptions :: Lens.Lens' DescribeDhcpOptionsResponse (Prelude.Maybe [DhcpOptions])
+describeDhcpOptionsResponse_dhcpOptions = Lens.lens (\DescribeDhcpOptionsResponse' {dhcpOptions} -> dhcpOptions) (\s@DescribeDhcpOptionsResponse' {} a -> s {dhcpOptions = a} :: DescribeDhcpOptionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeDhcpOptionsResponse_nextToken :: Lens.Lens' DescribeDhcpOptionsResponse (Prelude.Maybe Prelude.Text)
+describeDhcpOptionsResponse_nextToken = Lens.lens (\DescribeDhcpOptionsResponse' {nextToken} -> nextToken) (\s@DescribeDhcpOptionsResponse' {} a -> s {nextToken = a} :: DescribeDhcpOptionsResponse)
+
+-- | The response's http status code.
+describeDhcpOptionsResponse_httpStatus :: Lens.Lens' DescribeDhcpOptionsResponse Prelude.Int
+describeDhcpOptionsResponse_httpStatus = Lens.lens (\DescribeDhcpOptionsResponse' {httpStatus} -> httpStatus) (\s@DescribeDhcpOptionsResponse' {} a -> s {httpStatus = a} :: DescribeDhcpOptionsResponse)
+
+instance Prelude.NFData DescribeDhcpOptionsResponse where
+  rnf DescribeDhcpOptionsResponse' {..} =
+    Prelude.rnf dhcpOptions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeEgressOnlyInternetGateways.hs b/gen/Amazonka/EC2/DescribeEgressOnlyInternetGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeEgressOnlyInternetGateways.hs
@@ -0,0 +1,333 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeEgressOnlyInternetGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your egress-only internet gateways.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeEgressOnlyInternetGateways
+  ( -- * Creating a Request
+    DescribeEgressOnlyInternetGateways (..),
+    newDescribeEgressOnlyInternetGateways,
+
+    -- * Request Lenses
+    describeEgressOnlyInternetGateways_dryRun,
+    describeEgressOnlyInternetGateways_egressOnlyInternetGatewayIds,
+    describeEgressOnlyInternetGateways_filters,
+    describeEgressOnlyInternetGateways_maxResults,
+    describeEgressOnlyInternetGateways_nextToken,
+
+    -- * Destructuring the Response
+    DescribeEgressOnlyInternetGatewaysResponse (..),
+    newDescribeEgressOnlyInternetGatewaysResponse,
+
+    -- * Response Lenses
+    describeEgressOnlyInternetGatewaysResponse_egressOnlyInternetGateways,
+    describeEgressOnlyInternetGatewaysResponse_nextToken,
+    describeEgressOnlyInternetGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeEgressOnlyInternetGateways' smart constructor.
+data DescribeEgressOnlyInternetGateways = DescribeEgressOnlyInternetGateways'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more egress-only internet gateway IDs.
+    egressOnlyInternetGatewayIds :: Prelude.Maybe [Prelude.Text],
+    -- | One or more filters.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEgressOnlyInternetGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeEgressOnlyInternetGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'egressOnlyInternetGatewayIds', 'describeEgressOnlyInternetGateways_egressOnlyInternetGatewayIds' - One or more egress-only internet gateway IDs.
+--
+-- 'filters', 'describeEgressOnlyInternetGateways_filters' - One or more filters.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'describeEgressOnlyInternetGateways_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeEgressOnlyInternetGateways_nextToken' - The token for the next page of results.
+newDescribeEgressOnlyInternetGateways ::
+  DescribeEgressOnlyInternetGateways
+newDescribeEgressOnlyInternetGateways =
+  DescribeEgressOnlyInternetGateways'
+    { dryRun =
+        Prelude.Nothing,
+      egressOnlyInternetGatewayIds =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeEgressOnlyInternetGateways_dryRun :: Lens.Lens' DescribeEgressOnlyInternetGateways (Prelude.Maybe Prelude.Bool)
+describeEgressOnlyInternetGateways_dryRun = Lens.lens (\DescribeEgressOnlyInternetGateways' {dryRun} -> dryRun) (\s@DescribeEgressOnlyInternetGateways' {} a -> s {dryRun = a} :: DescribeEgressOnlyInternetGateways)
+
+-- | One or more egress-only internet gateway IDs.
+describeEgressOnlyInternetGateways_egressOnlyInternetGatewayIds :: Lens.Lens' DescribeEgressOnlyInternetGateways (Prelude.Maybe [Prelude.Text])
+describeEgressOnlyInternetGateways_egressOnlyInternetGatewayIds = Lens.lens (\DescribeEgressOnlyInternetGateways' {egressOnlyInternetGatewayIds} -> egressOnlyInternetGatewayIds) (\s@DescribeEgressOnlyInternetGateways' {} a -> s {egressOnlyInternetGatewayIds = a} :: DescribeEgressOnlyInternetGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more filters.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeEgressOnlyInternetGateways_filters :: Lens.Lens' DescribeEgressOnlyInternetGateways (Prelude.Maybe [Filter])
+describeEgressOnlyInternetGateways_filters = Lens.lens (\DescribeEgressOnlyInternetGateways' {filters} -> filters) (\s@DescribeEgressOnlyInternetGateways' {} a -> s {filters = a} :: DescribeEgressOnlyInternetGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeEgressOnlyInternetGateways_maxResults :: Lens.Lens' DescribeEgressOnlyInternetGateways (Prelude.Maybe Prelude.Natural)
+describeEgressOnlyInternetGateways_maxResults = Lens.lens (\DescribeEgressOnlyInternetGateways' {maxResults} -> maxResults) (\s@DescribeEgressOnlyInternetGateways' {} a -> s {maxResults = a} :: DescribeEgressOnlyInternetGateways)
+
+-- | The token for the next page of results.
+describeEgressOnlyInternetGateways_nextToken :: Lens.Lens' DescribeEgressOnlyInternetGateways (Prelude.Maybe Prelude.Text)
+describeEgressOnlyInternetGateways_nextToken = Lens.lens (\DescribeEgressOnlyInternetGateways' {nextToken} -> nextToken) (\s@DescribeEgressOnlyInternetGateways' {} a -> s {nextToken = a} :: DescribeEgressOnlyInternetGateways)
+
+instance
+  Core.AWSPager
+    DescribeEgressOnlyInternetGateways
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeEgressOnlyInternetGatewaysResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeEgressOnlyInternetGatewaysResponse_egressOnlyInternetGateways
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeEgressOnlyInternetGateways_nextToken
+          Lens..~ rs
+          Lens.^? describeEgressOnlyInternetGatewaysResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeEgressOnlyInternetGateways
+  where
+  type
+    AWSResponse DescribeEgressOnlyInternetGateways =
+      DescribeEgressOnlyInternetGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeEgressOnlyInternetGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "egressOnlyInternetGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeEgressOnlyInternetGateways
+  where
+  hashWithSalt
+    _salt
+    DescribeEgressOnlyInternetGateways' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` egressOnlyInternetGatewayIds
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeEgressOnlyInternetGateways
+  where
+  rnf DescribeEgressOnlyInternetGateways' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayIds
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeEgressOnlyInternetGateways
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeEgressOnlyInternetGateways
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeEgressOnlyInternetGateways
+  where
+  toQuery DescribeEgressOnlyInternetGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeEgressOnlyInternetGateways" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "EgressOnlyInternetGatewayId"
+              Prelude.<$> egressOnlyInternetGatewayIds
+          ),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeEgressOnlyInternetGatewaysResponse' smart constructor.
+data DescribeEgressOnlyInternetGatewaysResponse = DescribeEgressOnlyInternetGatewaysResponse'
+  { -- | Information about the egress-only internet gateways.
+    egressOnlyInternetGateways :: Prelude.Maybe [EgressOnlyInternetGateway],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEgressOnlyInternetGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'egressOnlyInternetGateways', 'describeEgressOnlyInternetGatewaysResponse_egressOnlyInternetGateways' - Information about the egress-only internet gateways.
+--
+-- 'nextToken', 'describeEgressOnlyInternetGatewaysResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeEgressOnlyInternetGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeEgressOnlyInternetGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEgressOnlyInternetGatewaysResponse
+newDescribeEgressOnlyInternetGatewaysResponse
+  pHttpStatus_ =
+    DescribeEgressOnlyInternetGatewaysResponse'
+      { egressOnlyInternetGateways =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the egress-only internet gateways.
+describeEgressOnlyInternetGatewaysResponse_egressOnlyInternetGateways :: Lens.Lens' DescribeEgressOnlyInternetGatewaysResponse (Prelude.Maybe [EgressOnlyInternetGateway])
+describeEgressOnlyInternetGatewaysResponse_egressOnlyInternetGateways = Lens.lens (\DescribeEgressOnlyInternetGatewaysResponse' {egressOnlyInternetGateways} -> egressOnlyInternetGateways) (\s@DescribeEgressOnlyInternetGatewaysResponse' {} a -> s {egressOnlyInternetGateways = a} :: DescribeEgressOnlyInternetGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeEgressOnlyInternetGatewaysResponse_nextToken :: Lens.Lens' DescribeEgressOnlyInternetGatewaysResponse (Prelude.Maybe Prelude.Text)
+describeEgressOnlyInternetGatewaysResponse_nextToken = Lens.lens (\DescribeEgressOnlyInternetGatewaysResponse' {nextToken} -> nextToken) (\s@DescribeEgressOnlyInternetGatewaysResponse' {} a -> s {nextToken = a} :: DescribeEgressOnlyInternetGatewaysResponse)
+
+-- | The response's http status code.
+describeEgressOnlyInternetGatewaysResponse_httpStatus :: Lens.Lens' DescribeEgressOnlyInternetGatewaysResponse Prelude.Int
+describeEgressOnlyInternetGatewaysResponse_httpStatus = Lens.lens (\DescribeEgressOnlyInternetGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeEgressOnlyInternetGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeEgressOnlyInternetGatewaysResponse)
+
+instance
+  Prelude.NFData
+    DescribeEgressOnlyInternetGatewaysResponse
+  where
+  rnf DescribeEgressOnlyInternetGatewaysResponse' {..} =
+    Prelude.rnf egressOnlyInternetGateways
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeElasticGpus.hs b/gen/Amazonka/EC2/DescribeElasticGpus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeElasticGpus.hs
@@ -0,0 +1,316 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeElasticGpus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the Elastic Graphics accelerator associated with your
+-- instances. For more information about Elastic Graphics, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html Amazon Elastic Graphics>.
+module Amazonka.EC2.DescribeElasticGpus
+  ( -- * Creating a Request
+    DescribeElasticGpus (..),
+    newDescribeElasticGpus,
+
+    -- * Request Lenses
+    describeElasticGpus_dryRun,
+    describeElasticGpus_elasticGpuIds,
+    describeElasticGpus_filters,
+    describeElasticGpus_maxResults,
+    describeElasticGpus_nextToken,
+
+    -- * Destructuring the Response
+    DescribeElasticGpusResponse (..),
+    newDescribeElasticGpusResponse,
+
+    -- * Response Lenses
+    describeElasticGpusResponse_elasticGpuSet,
+    describeElasticGpusResponse_maxResults,
+    describeElasticGpusResponse_nextToken,
+    describeElasticGpusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeElasticGpus' smart constructor.
+data DescribeElasticGpus = DescribeElasticGpus'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Elastic Graphics accelerator IDs.
+    elasticGpuIds :: Prelude.Maybe [Prelude.Text],
+    -- | The filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone in which the Elastic
+    --     Graphics accelerator resides.
+    --
+    -- -   @elastic-gpu-health@ - The status of the Elastic Graphics
+    --     accelerator (@OK@ | @IMPAIRED@).
+    --
+    -- -   @elastic-gpu-state@ - The state of the Elastic Graphics accelerator
+    --     (@ATTACHED@).
+    --
+    -- -   @elastic-gpu-type@ - The type of Elastic Graphics accelerator; for
+    --     example, @eg1.medium@.
+    --
+    -- -   @instance-id@ - The ID of the instance to which the Elastic Graphics
+    --     accelerator is associated.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 5 and 1000.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeElasticGpus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeElasticGpus_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'elasticGpuIds', 'describeElasticGpus_elasticGpuIds' - The Elastic Graphics accelerator IDs.
+--
+-- 'filters', 'describeElasticGpus_filters' - The filters.
+--
+-- -   @availability-zone@ - The Availability Zone in which the Elastic
+--     Graphics accelerator resides.
+--
+-- -   @elastic-gpu-health@ - The status of the Elastic Graphics
+--     accelerator (@OK@ | @IMPAIRED@).
+--
+-- -   @elastic-gpu-state@ - The state of the Elastic Graphics accelerator
+--     (@ATTACHED@).
+--
+-- -   @elastic-gpu-type@ - The type of Elastic Graphics accelerator; for
+--     example, @eg1.medium@.
+--
+-- -   @instance-id@ - The ID of the instance to which the Elastic Graphics
+--     accelerator is associated.
+--
+-- 'maxResults', 'describeElasticGpus_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000.
+--
+-- 'nextToken', 'describeElasticGpus_nextToken' - The token to request the next page of results.
+newDescribeElasticGpus ::
+  DescribeElasticGpus
+newDescribeElasticGpus =
+  DescribeElasticGpus'
+    { dryRun = Prelude.Nothing,
+      elasticGpuIds = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeElasticGpus_dryRun :: Lens.Lens' DescribeElasticGpus (Prelude.Maybe Prelude.Bool)
+describeElasticGpus_dryRun = Lens.lens (\DescribeElasticGpus' {dryRun} -> dryRun) (\s@DescribeElasticGpus' {} a -> s {dryRun = a} :: DescribeElasticGpus)
+
+-- | The Elastic Graphics accelerator IDs.
+describeElasticGpus_elasticGpuIds :: Lens.Lens' DescribeElasticGpus (Prelude.Maybe [Prelude.Text])
+describeElasticGpus_elasticGpuIds = Lens.lens (\DescribeElasticGpus' {elasticGpuIds} -> elasticGpuIds) (\s@DescribeElasticGpus' {} a -> s {elasticGpuIds = a} :: DescribeElasticGpus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The filters.
+--
+-- -   @availability-zone@ - The Availability Zone in which the Elastic
+--     Graphics accelerator resides.
+--
+-- -   @elastic-gpu-health@ - The status of the Elastic Graphics
+--     accelerator (@OK@ | @IMPAIRED@).
+--
+-- -   @elastic-gpu-state@ - The state of the Elastic Graphics accelerator
+--     (@ATTACHED@).
+--
+-- -   @elastic-gpu-type@ - The type of Elastic Graphics accelerator; for
+--     example, @eg1.medium@.
+--
+-- -   @instance-id@ - The ID of the instance to which the Elastic Graphics
+--     accelerator is associated.
+describeElasticGpus_filters :: Lens.Lens' DescribeElasticGpus (Prelude.Maybe [Filter])
+describeElasticGpus_filters = Lens.lens (\DescribeElasticGpus' {filters} -> filters) (\s@DescribeElasticGpus' {} a -> s {filters = a} :: DescribeElasticGpus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000.
+describeElasticGpus_maxResults :: Lens.Lens' DescribeElasticGpus (Prelude.Maybe Prelude.Natural)
+describeElasticGpus_maxResults = Lens.lens (\DescribeElasticGpus' {maxResults} -> maxResults) (\s@DescribeElasticGpus' {} a -> s {maxResults = a} :: DescribeElasticGpus)
+
+-- | The token to request the next page of results.
+describeElasticGpus_nextToken :: Lens.Lens' DescribeElasticGpus (Prelude.Maybe Prelude.Text)
+describeElasticGpus_nextToken = Lens.lens (\DescribeElasticGpus' {nextToken} -> nextToken) (\s@DescribeElasticGpus' {} a -> s {nextToken = a} :: DescribeElasticGpus)
+
+instance Core.AWSRequest DescribeElasticGpus where
+  type
+    AWSResponse DescribeElasticGpus =
+      DescribeElasticGpusResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeElasticGpusResponse'
+            Prelude.<$> ( x
+                            Data..@? "elasticGpuSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "maxResults")
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeElasticGpus where
+  hashWithSalt _salt DescribeElasticGpus' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` elasticGpuIds
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeElasticGpus where
+  rnf DescribeElasticGpus' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf elasticGpuIds
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeElasticGpus where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeElasticGpus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeElasticGpus where
+  toQuery DescribeElasticGpus' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeElasticGpus" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "ElasticGpuId"
+              Prelude.<$> elasticGpuIds
+          ),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeElasticGpusResponse' smart constructor.
+data DescribeElasticGpusResponse = DescribeElasticGpusResponse'
+  { -- | Information about the Elastic Graphics accelerators.
+    elasticGpuSet :: Prelude.Maybe [ElasticGpus],
+    -- | The total number of items to return. If the total number of items
+    -- available is more than the value specified in max-items then a
+    -- Next-Token will be provided in the output that you can use to resume
+    -- pagination.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeElasticGpusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'elasticGpuSet', 'describeElasticGpusResponse_elasticGpuSet' - Information about the Elastic Graphics accelerators.
+--
+-- 'maxResults', 'describeElasticGpusResponse_maxResults' - The total number of items to return. If the total number of items
+-- available is more than the value specified in max-items then a
+-- Next-Token will be provided in the output that you can use to resume
+-- pagination.
+--
+-- 'nextToken', 'describeElasticGpusResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeElasticGpusResponse_httpStatus' - The response's http status code.
+newDescribeElasticGpusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeElasticGpusResponse
+newDescribeElasticGpusResponse pHttpStatus_ =
+  DescribeElasticGpusResponse'
+    { elasticGpuSet =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Elastic Graphics accelerators.
+describeElasticGpusResponse_elasticGpuSet :: Lens.Lens' DescribeElasticGpusResponse (Prelude.Maybe [ElasticGpus])
+describeElasticGpusResponse_elasticGpuSet = Lens.lens (\DescribeElasticGpusResponse' {elasticGpuSet} -> elasticGpuSet) (\s@DescribeElasticGpusResponse' {} a -> s {elasticGpuSet = a} :: DescribeElasticGpusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of items to return. If the total number of items
+-- available is more than the value specified in max-items then a
+-- Next-Token will be provided in the output that you can use to resume
+-- pagination.
+describeElasticGpusResponse_maxResults :: Lens.Lens' DescribeElasticGpusResponse (Prelude.Maybe Prelude.Int)
+describeElasticGpusResponse_maxResults = Lens.lens (\DescribeElasticGpusResponse' {maxResults} -> maxResults) (\s@DescribeElasticGpusResponse' {} a -> s {maxResults = a} :: DescribeElasticGpusResponse)
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeElasticGpusResponse_nextToken :: Lens.Lens' DescribeElasticGpusResponse (Prelude.Maybe Prelude.Text)
+describeElasticGpusResponse_nextToken = Lens.lens (\DescribeElasticGpusResponse' {nextToken} -> nextToken) (\s@DescribeElasticGpusResponse' {} a -> s {nextToken = a} :: DescribeElasticGpusResponse)
+
+-- | The response's http status code.
+describeElasticGpusResponse_httpStatus :: Lens.Lens' DescribeElasticGpusResponse Prelude.Int
+describeElasticGpusResponse_httpStatus = Lens.lens (\DescribeElasticGpusResponse' {httpStatus} -> httpStatus) (\s@DescribeElasticGpusResponse' {} a -> s {httpStatus = a} :: DescribeElasticGpusResponse)
+
+instance Prelude.NFData DescribeElasticGpusResponse where
+  rnf DescribeElasticGpusResponse' {..} =
+    Prelude.rnf elasticGpuSet
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeExportImageTasks.hs b/gen/Amazonka/EC2/DescribeExportImageTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeExportImageTasks.hs
@@ -0,0 +1,273 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeExportImageTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified export image tasks or all of your export image
+-- tasks.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeExportImageTasks
+  ( -- * Creating a Request
+    DescribeExportImageTasks (..),
+    newDescribeExportImageTasks,
+
+    -- * Request Lenses
+    describeExportImageTasks_dryRun,
+    describeExportImageTasks_exportImageTaskIds,
+    describeExportImageTasks_filters,
+    describeExportImageTasks_maxResults,
+    describeExportImageTasks_nextToken,
+
+    -- * Destructuring the Response
+    DescribeExportImageTasksResponse (..),
+    newDescribeExportImageTasksResponse,
+
+    -- * Response Lenses
+    describeExportImageTasksResponse_exportImageTasks,
+    describeExportImageTasksResponse_nextToken,
+    describeExportImageTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExportImageTasks' smart constructor.
+data DescribeExportImageTasks = DescribeExportImageTasks'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the export image tasks.
+    exportImageTaskIds :: Prelude.Maybe [Prelude.Text],
+    -- | Filter tasks using the @task-state@ filter and one of the following
+    -- values: @active@, @completed@, @deleting@, or @deleted@.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | A token that indicates the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportImageTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeExportImageTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'exportImageTaskIds', 'describeExportImageTasks_exportImageTaskIds' - The IDs of the export image tasks.
+--
+-- 'filters', 'describeExportImageTasks_filters' - Filter tasks using the @task-state@ filter and one of the following
+-- values: @active@, @completed@, @deleting@, or @deleted@.
+--
+-- 'maxResults', 'describeExportImageTasks_maxResults' - The maximum number of results to return in a single call.
+--
+-- 'nextToken', 'describeExportImageTasks_nextToken' - A token that indicates the next page of results.
+newDescribeExportImageTasks ::
+  DescribeExportImageTasks
+newDescribeExportImageTasks =
+  DescribeExportImageTasks'
+    { dryRun = Prelude.Nothing,
+      exportImageTaskIds = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeExportImageTasks_dryRun :: Lens.Lens' DescribeExportImageTasks (Prelude.Maybe Prelude.Bool)
+describeExportImageTasks_dryRun = Lens.lens (\DescribeExportImageTasks' {dryRun} -> dryRun) (\s@DescribeExportImageTasks' {} a -> s {dryRun = a} :: DescribeExportImageTasks)
+
+-- | The IDs of the export image tasks.
+describeExportImageTasks_exportImageTaskIds :: Lens.Lens' DescribeExportImageTasks (Prelude.Maybe [Prelude.Text])
+describeExportImageTasks_exportImageTaskIds = Lens.lens (\DescribeExportImageTasks' {exportImageTaskIds} -> exportImageTaskIds) (\s@DescribeExportImageTasks' {} a -> s {exportImageTaskIds = a} :: DescribeExportImageTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | Filter tasks using the @task-state@ filter and one of the following
+-- values: @active@, @completed@, @deleting@, or @deleted@.
+describeExportImageTasks_filters :: Lens.Lens' DescribeExportImageTasks (Prelude.Maybe [Filter])
+describeExportImageTasks_filters = Lens.lens (\DescribeExportImageTasks' {filters} -> filters) (\s@DescribeExportImageTasks' {} a -> s {filters = a} :: DescribeExportImageTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call.
+describeExportImageTasks_maxResults :: Lens.Lens' DescribeExportImageTasks (Prelude.Maybe Prelude.Natural)
+describeExportImageTasks_maxResults = Lens.lens (\DescribeExportImageTasks' {maxResults} -> maxResults) (\s@DescribeExportImageTasks' {} a -> s {maxResults = a} :: DescribeExportImageTasks)
+
+-- | A token that indicates the next page of results.
+describeExportImageTasks_nextToken :: Lens.Lens' DescribeExportImageTasks (Prelude.Maybe Prelude.Text)
+describeExportImageTasks_nextToken = Lens.lens (\DescribeExportImageTasks' {nextToken} -> nextToken) (\s@DescribeExportImageTasks' {} a -> s {nextToken = a} :: DescribeExportImageTasks)
+
+instance Core.AWSPager DescribeExportImageTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeExportImageTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeExportImageTasksResponse_exportImageTasks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeExportImageTasks_nextToken
+          Lens..~ rs
+          Lens.^? describeExportImageTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeExportImageTasks where
+  type
+    AWSResponse DescribeExportImageTasks =
+      DescribeExportImageTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeExportImageTasksResponse'
+            Prelude.<$> ( x
+                            Data..@? "exportImageTaskSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeExportImageTasks where
+  hashWithSalt _salt DescribeExportImageTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` exportImageTaskIds
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeExportImageTasks where
+  rnf DescribeExportImageTasks' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf exportImageTaskIds
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeExportImageTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeExportImageTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeExportImageTasks where
+  toQuery DescribeExportImageTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeExportImageTasks" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "ExportImageTaskId"
+              Prelude.<$> exportImageTaskIds
+          ),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeExportImageTasksResponse' smart constructor.
+data DescribeExportImageTasksResponse = DescribeExportImageTasksResponse'
+  { -- | Information about the export image tasks.
+    exportImageTasks :: Prelude.Maybe [ExportImageTask],
+    -- | The token to use to get the next page of results. This value is @null@
+    -- when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportImageTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportImageTasks', 'describeExportImageTasksResponse_exportImageTasks' - Information about the export image tasks.
+--
+-- 'nextToken', 'describeExportImageTasksResponse_nextToken' - The token to use to get the next page of results. This value is @null@
+-- when there are no more results to return.
+--
+-- 'httpStatus', 'describeExportImageTasksResponse_httpStatus' - The response's http status code.
+newDescribeExportImageTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExportImageTasksResponse
+newDescribeExportImageTasksResponse pHttpStatus_ =
+  DescribeExportImageTasksResponse'
+    { exportImageTasks =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the export image tasks.
+describeExportImageTasksResponse_exportImageTasks :: Lens.Lens' DescribeExportImageTasksResponse (Prelude.Maybe [ExportImageTask])
+describeExportImageTasksResponse_exportImageTasks = Lens.lens (\DescribeExportImageTasksResponse' {exportImageTasks} -> exportImageTasks) (\s@DescribeExportImageTasksResponse' {} a -> s {exportImageTasks = a} :: DescribeExportImageTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results. This value is @null@
+-- when there are no more results to return.
+describeExportImageTasksResponse_nextToken :: Lens.Lens' DescribeExportImageTasksResponse (Prelude.Maybe Prelude.Text)
+describeExportImageTasksResponse_nextToken = Lens.lens (\DescribeExportImageTasksResponse' {nextToken} -> nextToken) (\s@DescribeExportImageTasksResponse' {} a -> s {nextToken = a} :: DescribeExportImageTasksResponse)
+
+-- | The response's http status code.
+describeExportImageTasksResponse_httpStatus :: Lens.Lens' DescribeExportImageTasksResponse Prelude.Int
+describeExportImageTasksResponse_httpStatus = Lens.lens (\DescribeExportImageTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeExportImageTasksResponse' {} a -> s {httpStatus = a} :: DescribeExportImageTasksResponse)
+
+instance
+  Prelude.NFData
+    DescribeExportImageTasksResponse
+  where
+  rnf DescribeExportImageTasksResponse' {..} =
+    Prelude.rnf exportImageTasks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeExportTasks.hs b/gen/Amazonka/EC2/DescribeExportTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeExportTasks.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeExportTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified export instance tasks or all of your export
+-- instance tasks.
+module Amazonka.EC2.DescribeExportTasks
+  ( -- * Creating a Request
+    DescribeExportTasks (..),
+    newDescribeExportTasks,
+
+    -- * Request Lenses
+    describeExportTasks_exportTaskIds,
+    describeExportTasks_filters,
+
+    -- * Destructuring the Response
+    DescribeExportTasksResponse (..),
+    newDescribeExportTasksResponse,
+
+    -- * Response Lenses
+    describeExportTasksResponse_exportTasks,
+    describeExportTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeExportTasks' smart constructor.
+data DescribeExportTasks = DescribeExportTasks'
+  { -- | The export task IDs.
+    exportTaskIds :: Prelude.Maybe [Prelude.Text],
+    -- | the filters for the export tasks.
+    filters :: Prelude.Maybe [Filter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportTaskIds', 'describeExportTasks_exportTaskIds' - The export task IDs.
+--
+-- 'filters', 'describeExportTasks_filters' - the filters for the export tasks.
+newDescribeExportTasks ::
+  DescribeExportTasks
+newDescribeExportTasks =
+  DescribeExportTasks'
+    { exportTaskIds =
+        Prelude.Nothing,
+      filters = Prelude.Nothing
+    }
+
+-- | The export task IDs.
+describeExportTasks_exportTaskIds :: Lens.Lens' DescribeExportTasks (Prelude.Maybe [Prelude.Text])
+describeExportTasks_exportTaskIds = Lens.lens (\DescribeExportTasks' {exportTaskIds} -> exportTaskIds) (\s@DescribeExportTasks' {} a -> s {exportTaskIds = a} :: DescribeExportTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | the filters for the export tasks.
+describeExportTasks_filters :: Lens.Lens' DescribeExportTasks (Prelude.Maybe [Filter])
+describeExportTasks_filters = Lens.lens (\DescribeExportTasks' {filters} -> filters) (\s@DescribeExportTasks' {} a -> s {filters = a} :: DescribeExportTasks) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeExportTasks where
+  type
+    AWSResponse DescribeExportTasks =
+      DescribeExportTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeExportTasksResponse'
+            Prelude.<$> ( x
+                            Data..@? "exportTaskSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeExportTasks where
+  hashWithSalt _salt DescribeExportTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` exportTaskIds
+      `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData DescribeExportTasks where
+  rnf DescribeExportTasks' {..} =
+    Prelude.rnf exportTaskIds
+      `Prelude.seq` Prelude.rnf filters
+
+instance Data.ToHeaders DescribeExportTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeExportTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeExportTasks where
+  toQuery DescribeExportTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeExportTasks" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "ExportTaskId"
+              Prelude.<$> exportTaskIds
+          ),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters)
+      ]
+
+-- | /See:/ 'newDescribeExportTasksResponse' smart constructor.
+data DescribeExportTasksResponse = DescribeExportTasksResponse'
+  { -- | Information about the export tasks.
+    exportTasks :: Prelude.Maybe [ExportTask],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeExportTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exportTasks', 'describeExportTasksResponse_exportTasks' - Information about the export tasks.
+--
+-- 'httpStatus', 'describeExportTasksResponse_httpStatus' - The response's http status code.
+newDescribeExportTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeExportTasksResponse
+newDescribeExportTasksResponse pHttpStatus_ =
+  DescribeExportTasksResponse'
+    { exportTasks =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the export tasks.
+describeExportTasksResponse_exportTasks :: Lens.Lens' DescribeExportTasksResponse (Prelude.Maybe [ExportTask])
+describeExportTasksResponse_exportTasks = Lens.lens (\DescribeExportTasksResponse' {exportTasks} -> exportTasks) (\s@DescribeExportTasksResponse' {} a -> s {exportTasks = a} :: DescribeExportTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeExportTasksResponse_httpStatus :: Lens.Lens' DescribeExportTasksResponse Prelude.Int
+describeExportTasksResponse_httpStatus = Lens.lens (\DescribeExportTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeExportTasksResponse' {} a -> s {httpStatus = a} :: DescribeExportTasksResponse)
+
+instance Prelude.NFData DescribeExportTasksResponse where
+  rnf DescribeExportTasksResponse' {..} =
+    Prelude.rnf exportTasks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFastLaunchImages.hs b/gen/Amazonka/EC2/DescribeFastLaunchImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFastLaunchImages.hs
@@ -0,0 +1,307 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFastLaunchImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describe details for Windows AMIs that are configured for faster
+-- launching.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeFastLaunchImages
+  ( -- * Creating a Request
+    DescribeFastLaunchImages (..),
+    newDescribeFastLaunchImages,
+
+    -- * Request Lenses
+    describeFastLaunchImages_dryRun,
+    describeFastLaunchImages_filters,
+    describeFastLaunchImages_imageIds,
+    describeFastLaunchImages_maxResults,
+    describeFastLaunchImages_nextToken,
+
+    -- * Destructuring the Response
+    DescribeFastLaunchImagesResponse (..),
+    newDescribeFastLaunchImagesResponse,
+
+    -- * Response Lenses
+    describeFastLaunchImagesResponse_fastLaunchImages,
+    describeFastLaunchImagesResponse_nextToken,
+    describeFastLaunchImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFastLaunchImages' smart constructor.
+data DescribeFastLaunchImages = DescribeFastLaunchImages'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Use the following filters to streamline results.
+    --
+    -- -   @resource-type@ - The resource type for pre-provisioning.
+    --
+    -- -   @launch-template@ - The launch template that is associated with the
+    --     pre-provisioned Windows AMI.
+    --
+    -- -   @owner-id@ - The owner ID for the pre-provisioning resource.
+    --
+    -- -   @state@ - The current state of fast launching for the Windows AMI.
+    filters :: Prelude.Maybe [Filter],
+    -- | Details for one or more Windows AMI image IDs.
+    imageIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another request with the returned NextToken
+    -- value. If this parameter is not specified, then all results are
+    -- returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFastLaunchImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFastLaunchImages_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeFastLaunchImages_filters' - Use the following filters to streamline results.
+--
+-- -   @resource-type@ - The resource type for pre-provisioning.
+--
+-- -   @launch-template@ - The launch template that is associated with the
+--     pre-provisioned Windows AMI.
+--
+-- -   @owner-id@ - The owner ID for the pre-provisioning resource.
+--
+-- -   @state@ - The current state of fast launching for the Windows AMI.
+--
+-- 'imageIds', 'describeFastLaunchImages_imageIds' - Details for one or more Windows AMI image IDs.
+--
+-- 'maxResults', 'describeFastLaunchImages_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned NextToken
+-- value. If this parameter is not specified, then all results are
+-- returned.
+--
+-- 'nextToken', 'describeFastLaunchImages_nextToken' - The token for the next set of results.
+newDescribeFastLaunchImages ::
+  DescribeFastLaunchImages
+newDescribeFastLaunchImages =
+  DescribeFastLaunchImages'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      imageIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFastLaunchImages_dryRun :: Lens.Lens' DescribeFastLaunchImages (Prelude.Maybe Prelude.Bool)
+describeFastLaunchImages_dryRun = Lens.lens (\DescribeFastLaunchImages' {dryRun} -> dryRun) (\s@DescribeFastLaunchImages' {} a -> s {dryRun = a} :: DescribeFastLaunchImages)
+
+-- | Use the following filters to streamline results.
+--
+-- -   @resource-type@ - The resource type for pre-provisioning.
+--
+-- -   @launch-template@ - The launch template that is associated with the
+--     pre-provisioned Windows AMI.
+--
+-- -   @owner-id@ - The owner ID for the pre-provisioning resource.
+--
+-- -   @state@ - The current state of fast launching for the Windows AMI.
+describeFastLaunchImages_filters :: Lens.Lens' DescribeFastLaunchImages (Prelude.Maybe [Filter])
+describeFastLaunchImages_filters = Lens.lens (\DescribeFastLaunchImages' {filters} -> filters) (\s@DescribeFastLaunchImages' {} a -> s {filters = a} :: DescribeFastLaunchImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | Details for one or more Windows AMI image IDs.
+describeFastLaunchImages_imageIds :: Lens.Lens' DescribeFastLaunchImages (Prelude.Maybe [Prelude.Text])
+describeFastLaunchImages_imageIds = Lens.lens (\DescribeFastLaunchImages' {imageIds} -> imageIds) (\s@DescribeFastLaunchImages' {} a -> s {imageIds = a} :: DescribeFastLaunchImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned NextToken
+-- value. If this parameter is not specified, then all results are
+-- returned.
+describeFastLaunchImages_maxResults :: Lens.Lens' DescribeFastLaunchImages (Prelude.Maybe Prelude.Natural)
+describeFastLaunchImages_maxResults = Lens.lens (\DescribeFastLaunchImages' {maxResults} -> maxResults) (\s@DescribeFastLaunchImages' {} a -> s {maxResults = a} :: DescribeFastLaunchImages)
+
+-- | The token for the next set of results.
+describeFastLaunchImages_nextToken :: Lens.Lens' DescribeFastLaunchImages (Prelude.Maybe Prelude.Text)
+describeFastLaunchImages_nextToken = Lens.lens (\DescribeFastLaunchImages' {nextToken} -> nextToken) (\s@DescribeFastLaunchImages' {} a -> s {nextToken = a} :: DescribeFastLaunchImages)
+
+instance Core.AWSPager DescribeFastLaunchImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeFastLaunchImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeFastLaunchImagesResponse_fastLaunchImages
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeFastLaunchImages_nextToken
+          Lens..~ rs
+          Lens.^? describeFastLaunchImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeFastLaunchImages where
+  type
+    AWSResponse DescribeFastLaunchImages =
+      DescribeFastLaunchImagesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFastLaunchImagesResponse'
+            Prelude.<$> ( x
+                            Data..@? "fastLaunchImageSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFastLaunchImages where
+  hashWithSalt _salt DescribeFastLaunchImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` imageIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeFastLaunchImages where
+  rnf DescribeFastLaunchImages' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf imageIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeFastLaunchImages where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFastLaunchImages where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFastLaunchImages where
+  toQuery DescribeFastLaunchImages' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFastLaunchImages" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "ImageId" Prelude.<$> imageIds),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeFastLaunchImagesResponse' smart constructor.
+data DescribeFastLaunchImagesResponse = DescribeFastLaunchImagesResponse'
+  { -- | A collection of details about the fast-launch enabled Windows images
+    -- that meet the requested criteria.
+    fastLaunchImages :: Prelude.Maybe [DescribeFastLaunchImagesSuccessItem],
+    -- | The token to use for the next set of results. This value is null when
+    -- there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFastLaunchImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fastLaunchImages', 'describeFastLaunchImagesResponse_fastLaunchImages' - A collection of details about the fast-launch enabled Windows images
+-- that meet the requested criteria.
+--
+-- 'nextToken', 'describeFastLaunchImagesResponse_nextToken' - The token to use for the next set of results. This value is null when
+-- there are no more results to return.
+--
+-- 'httpStatus', 'describeFastLaunchImagesResponse_httpStatus' - The response's http status code.
+newDescribeFastLaunchImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFastLaunchImagesResponse
+newDescribeFastLaunchImagesResponse pHttpStatus_ =
+  DescribeFastLaunchImagesResponse'
+    { fastLaunchImages =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A collection of details about the fast-launch enabled Windows images
+-- that meet the requested criteria.
+describeFastLaunchImagesResponse_fastLaunchImages :: Lens.Lens' DescribeFastLaunchImagesResponse (Prelude.Maybe [DescribeFastLaunchImagesSuccessItem])
+describeFastLaunchImagesResponse_fastLaunchImages = Lens.lens (\DescribeFastLaunchImagesResponse' {fastLaunchImages} -> fastLaunchImages) (\s@DescribeFastLaunchImagesResponse' {} a -> s {fastLaunchImages = a} :: DescribeFastLaunchImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use for the next set of results. This value is null when
+-- there are no more results to return.
+describeFastLaunchImagesResponse_nextToken :: Lens.Lens' DescribeFastLaunchImagesResponse (Prelude.Maybe Prelude.Text)
+describeFastLaunchImagesResponse_nextToken = Lens.lens (\DescribeFastLaunchImagesResponse' {nextToken} -> nextToken) (\s@DescribeFastLaunchImagesResponse' {} a -> s {nextToken = a} :: DescribeFastLaunchImagesResponse)
+
+-- | The response's http status code.
+describeFastLaunchImagesResponse_httpStatus :: Lens.Lens' DescribeFastLaunchImagesResponse Prelude.Int
+describeFastLaunchImagesResponse_httpStatus = Lens.lens (\DescribeFastLaunchImagesResponse' {httpStatus} -> httpStatus) (\s@DescribeFastLaunchImagesResponse' {} a -> s {httpStatus = a} :: DescribeFastLaunchImagesResponse)
+
+instance
+  Prelude.NFData
+    DescribeFastLaunchImagesResponse
+  where
+  rnf DescribeFastLaunchImagesResponse' {..} =
+    Prelude.rnf fastLaunchImages
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFastSnapshotRestores.hs b/gen/Amazonka/EC2/DescribeFastSnapshotRestores.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFastSnapshotRestores.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFastSnapshotRestores
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the state of fast snapshot restores for your snapshots.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeFastSnapshotRestores
+  ( -- * Creating a Request
+    DescribeFastSnapshotRestores (..),
+    newDescribeFastSnapshotRestores,
+
+    -- * Request Lenses
+    describeFastSnapshotRestores_dryRun,
+    describeFastSnapshotRestores_filters,
+    describeFastSnapshotRestores_maxResults,
+    describeFastSnapshotRestores_nextToken,
+
+    -- * Destructuring the Response
+    DescribeFastSnapshotRestoresResponse (..),
+    newDescribeFastSnapshotRestoresResponse,
+
+    -- * Response Lenses
+    describeFastSnapshotRestoresResponse_fastSnapshotRestores,
+    describeFastSnapshotRestoresResponse_nextToken,
+    describeFastSnapshotRestoresResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFastSnapshotRestores' smart constructor.
+data DescribeFastSnapshotRestores = DescribeFastSnapshotRestores'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters. The possible values are:
+    --
+    -- -   @availability-zone@: The Availability Zone of the snapshot.
+    --
+    -- -   @owner-id@: The ID of the Amazon Web Services account that enabled
+    --     fast snapshot restore on the snapshot.
+    --
+    -- -   @snapshot-id@: The ID of the snapshot.
+    --
+    -- -   @state@: The state of fast snapshot restores for the snapshot
+    --     (@enabling@ | @optimizing@ | @enabled@ | @disabling@ | @disabled@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFastSnapshotRestores' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFastSnapshotRestores_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeFastSnapshotRestores_filters' - The filters. The possible values are:
+--
+-- -   @availability-zone@: The Availability Zone of the snapshot.
+--
+-- -   @owner-id@: The ID of the Amazon Web Services account that enabled
+--     fast snapshot restore on the snapshot.
+--
+-- -   @snapshot-id@: The ID of the snapshot.
+--
+-- -   @state@: The state of fast snapshot restores for the snapshot
+--     (@enabling@ | @optimizing@ | @enabled@ | @disabling@ | @disabled@).
+--
+-- 'maxResults', 'describeFastSnapshotRestores_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeFastSnapshotRestores_nextToken' - The token for the next page of results.
+newDescribeFastSnapshotRestores ::
+  DescribeFastSnapshotRestores
+newDescribeFastSnapshotRestores =
+  DescribeFastSnapshotRestores'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFastSnapshotRestores_dryRun :: Lens.Lens' DescribeFastSnapshotRestores (Prelude.Maybe Prelude.Bool)
+describeFastSnapshotRestores_dryRun = Lens.lens (\DescribeFastSnapshotRestores' {dryRun} -> dryRun) (\s@DescribeFastSnapshotRestores' {} a -> s {dryRun = a} :: DescribeFastSnapshotRestores)
+
+-- | The filters. The possible values are:
+--
+-- -   @availability-zone@: The Availability Zone of the snapshot.
+--
+-- -   @owner-id@: The ID of the Amazon Web Services account that enabled
+--     fast snapshot restore on the snapshot.
+--
+-- -   @snapshot-id@: The ID of the snapshot.
+--
+-- -   @state@: The state of fast snapshot restores for the snapshot
+--     (@enabling@ | @optimizing@ | @enabled@ | @disabling@ | @disabled@).
+describeFastSnapshotRestores_filters :: Lens.Lens' DescribeFastSnapshotRestores (Prelude.Maybe [Filter])
+describeFastSnapshotRestores_filters = Lens.lens (\DescribeFastSnapshotRestores' {filters} -> filters) (\s@DescribeFastSnapshotRestores' {} a -> s {filters = a} :: DescribeFastSnapshotRestores) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeFastSnapshotRestores_maxResults :: Lens.Lens' DescribeFastSnapshotRestores (Prelude.Maybe Prelude.Natural)
+describeFastSnapshotRestores_maxResults = Lens.lens (\DescribeFastSnapshotRestores' {maxResults} -> maxResults) (\s@DescribeFastSnapshotRestores' {} a -> s {maxResults = a} :: DescribeFastSnapshotRestores)
+
+-- | The token for the next page of results.
+describeFastSnapshotRestores_nextToken :: Lens.Lens' DescribeFastSnapshotRestores (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestores_nextToken = Lens.lens (\DescribeFastSnapshotRestores' {nextToken} -> nextToken) (\s@DescribeFastSnapshotRestores' {} a -> s {nextToken = a} :: DescribeFastSnapshotRestores)
+
+instance Core.AWSPager DescribeFastSnapshotRestores where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeFastSnapshotRestoresResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeFastSnapshotRestoresResponse_fastSnapshotRestores
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeFastSnapshotRestores_nextToken
+          Lens..~ rs
+          Lens.^? describeFastSnapshotRestoresResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeFastSnapshotRestores where
+  type
+    AWSResponse DescribeFastSnapshotRestores =
+      DescribeFastSnapshotRestoresResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFastSnapshotRestoresResponse'
+            Prelude.<$> ( x
+                            Data..@? "fastSnapshotRestoreSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeFastSnapshotRestores
+  where
+  hashWithSalt _salt DescribeFastSnapshotRestores' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeFastSnapshotRestores where
+  rnf DescribeFastSnapshotRestores' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeFastSnapshotRestores where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFastSnapshotRestores where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFastSnapshotRestores where
+  toQuery DescribeFastSnapshotRestores' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeFastSnapshotRestores" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeFastSnapshotRestoresResponse' smart constructor.
+data DescribeFastSnapshotRestoresResponse = DescribeFastSnapshotRestoresResponse'
+  { -- | Information about the state of fast snapshot restores.
+    fastSnapshotRestores :: Prelude.Maybe [DescribeFastSnapshotRestoreSuccessItem],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFastSnapshotRestoresResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fastSnapshotRestores', 'describeFastSnapshotRestoresResponse_fastSnapshotRestores' - Information about the state of fast snapshot restores.
+--
+-- 'nextToken', 'describeFastSnapshotRestoresResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeFastSnapshotRestoresResponse_httpStatus' - The response's http status code.
+newDescribeFastSnapshotRestoresResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFastSnapshotRestoresResponse
+newDescribeFastSnapshotRestoresResponse pHttpStatus_ =
+  DescribeFastSnapshotRestoresResponse'
+    { fastSnapshotRestores =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the state of fast snapshot restores.
+describeFastSnapshotRestoresResponse_fastSnapshotRestores :: Lens.Lens' DescribeFastSnapshotRestoresResponse (Prelude.Maybe [DescribeFastSnapshotRestoreSuccessItem])
+describeFastSnapshotRestoresResponse_fastSnapshotRestores = Lens.lens (\DescribeFastSnapshotRestoresResponse' {fastSnapshotRestores} -> fastSnapshotRestores) (\s@DescribeFastSnapshotRestoresResponse' {} a -> s {fastSnapshotRestores = a} :: DescribeFastSnapshotRestoresResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeFastSnapshotRestoresResponse_nextToken :: Lens.Lens' DescribeFastSnapshotRestoresResponse (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestoresResponse_nextToken = Lens.lens (\DescribeFastSnapshotRestoresResponse' {nextToken} -> nextToken) (\s@DescribeFastSnapshotRestoresResponse' {} a -> s {nextToken = a} :: DescribeFastSnapshotRestoresResponse)
+
+-- | The response's http status code.
+describeFastSnapshotRestoresResponse_httpStatus :: Lens.Lens' DescribeFastSnapshotRestoresResponse Prelude.Int
+describeFastSnapshotRestoresResponse_httpStatus = Lens.lens (\DescribeFastSnapshotRestoresResponse' {httpStatus} -> httpStatus) (\s@DescribeFastSnapshotRestoresResponse' {} a -> s {httpStatus = a} :: DescribeFastSnapshotRestoresResponse)
+
+instance
+  Prelude.NFData
+    DescribeFastSnapshotRestoresResponse
+  where
+  rnf DescribeFastSnapshotRestoresResponse' {..} =
+    Prelude.rnf fastSnapshotRestores
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFleetHistory.hs b/gen/Amazonka/EC2/DescribeFleetHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFleetHistory.hs
@@ -0,0 +1,328 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFleetHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the events for the specified EC2 Fleet during the specified
+-- time.
+--
+-- EC2 Fleet events are delayed by up to 30 seconds before they can be
+-- described. This ensures that you can query by the last evaluated time
+-- and not miss a recorded event. EC2 Fleet events are available for 48
+-- hours.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-monitor.html Monitor fleet events using Amazon EventBridge>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribeFleetHistory
+  ( -- * Creating a Request
+    DescribeFleetHistory (..),
+    newDescribeFleetHistory,
+
+    -- * Request Lenses
+    describeFleetHistory_dryRun,
+    describeFleetHistory_eventType,
+    describeFleetHistory_maxResults,
+    describeFleetHistory_nextToken,
+    describeFleetHistory_fleetId,
+    describeFleetHistory_startTime,
+
+    -- * Destructuring the Response
+    DescribeFleetHistoryResponse (..),
+    newDescribeFleetHistoryResponse,
+
+    -- * Response Lenses
+    describeFleetHistoryResponse_fleetId,
+    describeFleetHistoryResponse_historyRecords,
+    describeFleetHistoryResponse_lastEvaluatedTime,
+    describeFleetHistoryResponse_nextToken,
+    describeFleetHistoryResponse_startTime,
+    describeFleetHistoryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFleetHistory' smart constructor.
+data DescribeFleetHistory = DescribeFleetHistory'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The type of events to describe. By default, all events are described.
+    eventType :: Prelude.Maybe FleetEventType,
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Text,
+    -- | The start date and time for the events, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    startTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFleetHistory_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'eventType', 'describeFleetHistory_eventType' - The type of events to describe. By default, all events are described.
+--
+-- 'maxResults', 'describeFleetHistory_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeFleetHistory_nextToken' - The token for the next set of results.
+--
+-- 'fleetId', 'describeFleetHistory_fleetId' - The ID of the EC2 Fleet.
+--
+-- 'startTime', 'describeFleetHistory_startTime' - The start date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newDescribeFleetHistory ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  DescribeFleetHistory
+newDescribeFleetHistory pFleetId_ pStartTime_ =
+  DescribeFleetHistory'
+    { dryRun = Prelude.Nothing,
+      eventType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      fleetId = pFleetId_,
+      startTime = Data._Time Lens.# pStartTime_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFleetHistory_dryRun :: Lens.Lens' DescribeFleetHistory (Prelude.Maybe Prelude.Bool)
+describeFleetHistory_dryRun = Lens.lens (\DescribeFleetHistory' {dryRun} -> dryRun) (\s@DescribeFleetHistory' {} a -> s {dryRun = a} :: DescribeFleetHistory)
+
+-- | The type of events to describe. By default, all events are described.
+describeFleetHistory_eventType :: Lens.Lens' DescribeFleetHistory (Prelude.Maybe FleetEventType)
+describeFleetHistory_eventType = Lens.lens (\DescribeFleetHistory' {eventType} -> eventType) (\s@DescribeFleetHistory' {} a -> s {eventType = a} :: DescribeFleetHistory)
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeFleetHistory_maxResults :: Lens.Lens' DescribeFleetHistory (Prelude.Maybe Prelude.Int)
+describeFleetHistory_maxResults = Lens.lens (\DescribeFleetHistory' {maxResults} -> maxResults) (\s@DescribeFleetHistory' {} a -> s {maxResults = a} :: DescribeFleetHistory)
+
+-- | The token for the next set of results.
+describeFleetHistory_nextToken :: Lens.Lens' DescribeFleetHistory (Prelude.Maybe Prelude.Text)
+describeFleetHistory_nextToken = Lens.lens (\DescribeFleetHistory' {nextToken} -> nextToken) (\s@DescribeFleetHistory' {} a -> s {nextToken = a} :: DescribeFleetHistory)
+
+-- | The ID of the EC2 Fleet.
+describeFleetHistory_fleetId :: Lens.Lens' DescribeFleetHistory Prelude.Text
+describeFleetHistory_fleetId = Lens.lens (\DescribeFleetHistory' {fleetId} -> fleetId) (\s@DescribeFleetHistory' {} a -> s {fleetId = a} :: DescribeFleetHistory)
+
+-- | The start date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+describeFleetHistory_startTime :: Lens.Lens' DescribeFleetHistory Prelude.UTCTime
+describeFleetHistory_startTime = Lens.lens (\DescribeFleetHistory' {startTime} -> startTime) (\s@DescribeFleetHistory' {} a -> s {startTime = a} :: DescribeFleetHistory) Prelude.. Data._Time
+
+instance Core.AWSRequest DescribeFleetHistory where
+  type
+    AWSResponse DescribeFleetHistory =
+      DescribeFleetHistoryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFleetHistoryResponse'
+            Prelude.<$> (x Data..@? "fleetId")
+            Prelude.<*> ( x
+                            Data..@? "historyRecordSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "lastEvaluatedTime")
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (x Data..@? "startTime")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFleetHistory where
+  hashWithSalt _salt DescribeFleetHistory' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` fleetId
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData DescribeFleetHistory where
+  rnf DescribeFleetHistory' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf startTime
+
+instance Data.ToHeaders DescribeFleetHistory where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFleetHistory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFleetHistory where
+  toQuery DescribeFleetHistory' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFleetHistory" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EventType" Data.=: eventType,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "FleetId" Data.=: fleetId,
+        "StartTime" Data.=: startTime
+      ]
+
+-- | /See:/ 'newDescribeFleetHistoryResponse' smart constructor.
+data DescribeFleetHistoryResponse = DescribeFleetHistoryResponse'
+  { -- | The ID of the EC Fleet.
+    fleetId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the events in the history of the EC2 Fleet.
+    historyRecords :: Prelude.Maybe [HistoryRecordEntry],
+    -- | The last date and time for the events, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). All records up to this time were
+    -- retrieved.
+    --
+    -- If @nextToken@ indicates that there are more results, this value is not
+    -- present.
+    lastEvaluatedTime :: Prelude.Maybe Data.ISO8601,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The start date and time for the events, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetId', 'describeFleetHistoryResponse_fleetId' - The ID of the EC Fleet.
+--
+-- 'historyRecords', 'describeFleetHistoryResponse_historyRecords' - Information about the events in the history of the EC2 Fleet.
+--
+-- 'lastEvaluatedTime', 'describeFleetHistoryResponse_lastEvaluatedTime' - The last date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). All records up to this time were
+-- retrieved.
+--
+-- If @nextToken@ indicates that there are more results, this value is not
+-- present.
+--
+-- 'nextToken', 'describeFleetHistoryResponse_nextToken' - The token for the next set of results.
+--
+-- 'startTime', 'describeFleetHistoryResponse_startTime' - The start date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- 'httpStatus', 'describeFleetHistoryResponse_httpStatus' - The response's http status code.
+newDescribeFleetHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFleetHistoryResponse
+newDescribeFleetHistoryResponse pHttpStatus_ =
+  DescribeFleetHistoryResponse'
+    { fleetId =
+        Prelude.Nothing,
+      historyRecords = Prelude.Nothing,
+      lastEvaluatedTime = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the EC Fleet.
+describeFleetHistoryResponse_fleetId :: Lens.Lens' DescribeFleetHistoryResponse (Prelude.Maybe Prelude.Text)
+describeFleetHistoryResponse_fleetId = Lens.lens (\DescribeFleetHistoryResponse' {fleetId} -> fleetId) (\s@DescribeFleetHistoryResponse' {} a -> s {fleetId = a} :: DescribeFleetHistoryResponse)
+
+-- | Information about the events in the history of the EC2 Fleet.
+describeFleetHistoryResponse_historyRecords :: Lens.Lens' DescribeFleetHistoryResponse (Prelude.Maybe [HistoryRecordEntry])
+describeFleetHistoryResponse_historyRecords = Lens.lens (\DescribeFleetHistoryResponse' {historyRecords} -> historyRecords) (\s@DescribeFleetHistoryResponse' {} a -> s {historyRecords = a} :: DescribeFleetHistoryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). All records up to this time were
+-- retrieved.
+--
+-- If @nextToken@ indicates that there are more results, this value is not
+-- present.
+describeFleetHistoryResponse_lastEvaluatedTime :: Lens.Lens' DescribeFleetHistoryResponse (Prelude.Maybe Prelude.UTCTime)
+describeFleetHistoryResponse_lastEvaluatedTime = Lens.lens (\DescribeFleetHistoryResponse' {lastEvaluatedTime} -> lastEvaluatedTime) (\s@DescribeFleetHistoryResponse' {} a -> s {lastEvaluatedTime = a} :: DescribeFleetHistoryResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The token for the next set of results.
+describeFleetHistoryResponse_nextToken :: Lens.Lens' DescribeFleetHistoryResponse (Prelude.Maybe Prelude.Text)
+describeFleetHistoryResponse_nextToken = Lens.lens (\DescribeFleetHistoryResponse' {nextToken} -> nextToken) (\s@DescribeFleetHistoryResponse' {} a -> s {nextToken = a} :: DescribeFleetHistoryResponse)
+
+-- | The start date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+describeFleetHistoryResponse_startTime :: Lens.Lens' DescribeFleetHistoryResponse (Prelude.Maybe Prelude.UTCTime)
+describeFleetHistoryResponse_startTime = Lens.lens (\DescribeFleetHistoryResponse' {startTime} -> startTime) (\s@DescribeFleetHistoryResponse' {} a -> s {startTime = a} :: DescribeFleetHistoryResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+describeFleetHistoryResponse_httpStatus :: Lens.Lens' DescribeFleetHistoryResponse Prelude.Int
+describeFleetHistoryResponse_httpStatus = Lens.lens (\DescribeFleetHistoryResponse' {httpStatus} -> httpStatus) (\s@DescribeFleetHistoryResponse' {} a -> s {httpStatus = a} :: DescribeFleetHistoryResponse)
+
+instance Prelude.NFData DescribeFleetHistoryResponse where
+  rnf DescribeFleetHistoryResponse' {..} =
+    Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf historyRecords
+      `Prelude.seq` Prelude.rnf lastEvaluatedTime
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFleetInstances.hs b/gen/Amazonka/EC2/DescribeFleetInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFleetInstances.hs
@@ -0,0 +1,275 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFleetInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the running instances for the specified EC2 Fleet.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#monitor-ec2-fleet Monitor your EC2 Fleet>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribeFleetInstances
+  ( -- * Creating a Request
+    DescribeFleetInstances (..),
+    newDescribeFleetInstances,
+
+    -- * Request Lenses
+    describeFleetInstances_dryRun,
+    describeFleetInstances_filters,
+    describeFleetInstances_maxResults,
+    describeFleetInstances_nextToken,
+    describeFleetInstances_fleetId,
+
+    -- * Destructuring the Response
+    DescribeFleetInstancesResponse (..),
+    newDescribeFleetInstancesResponse,
+
+    -- * Response Lenses
+    describeFleetInstancesResponse_activeInstances,
+    describeFleetInstancesResponse_fleetId,
+    describeFleetInstancesResponse_nextToken,
+    describeFleetInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFleetInstances' smart constructor.
+data DescribeFleetInstances = DescribeFleetInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @instance-type@ - The instance type.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFleetInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeFleetInstances_filters' - The filters.
+--
+-- -   @instance-type@ - The instance type.
+--
+-- 'maxResults', 'describeFleetInstances_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeFleetInstances_nextToken' - The token for the next set of results.
+--
+-- 'fleetId', 'describeFleetInstances_fleetId' - The ID of the EC2 Fleet.
+newDescribeFleetInstances ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  DescribeFleetInstances
+newDescribeFleetInstances pFleetId_ =
+  DescribeFleetInstances'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      fleetId = pFleetId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFleetInstances_dryRun :: Lens.Lens' DescribeFleetInstances (Prelude.Maybe Prelude.Bool)
+describeFleetInstances_dryRun = Lens.lens (\DescribeFleetInstances' {dryRun} -> dryRun) (\s@DescribeFleetInstances' {} a -> s {dryRun = a} :: DescribeFleetInstances)
+
+-- | The filters.
+--
+-- -   @instance-type@ - The instance type.
+describeFleetInstances_filters :: Lens.Lens' DescribeFleetInstances (Prelude.Maybe [Filter])
+describeFleetInstances_filters = Lens.lens (\DescribeFleetInstances' {filters} -> filters) (\s@DescribeFleetInstances' {} a -> s {filters = a} :: DescribeFleetInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeFleetInstances_maxResults :: Lens.Lens' DescribeFleetInstances (Prelude.Maybe Prelude.Int)
+describeFleetInstances_maxResults = Lens.lens (\DescribeFleetInstances' {maxResults} -> maxResults) (\s@DescribeFleetInstances' {} a -> s {maxResults = a} :: DescribeFleetInstances)
+
+-- | The token for the next set of results.
+describeFleetInstances_nextToken :: Lens.Lens' DescribeFleetInstances (Prelude.Maybe Prelude.Text)
+describeFleetInstances_nextToken = Lens.lens (\DescribeFleetInstances' {nextToken} -> nextToken) (\s@DescribeFleetInstances' {} a -> s {nextToken = a} :: DescribeFleetInstances)
+
+-- | The ID of the EC2 Fleet.
+describeFleetInstances_fleetId :: Lens.Lens' DescribeFleetInstances Prelude.Text
+describeFleetInstances_fleetId = Lens.lens (\DescribeFleetInstances' {fleetId} -> fleetId) (\s@DescribeFleetInstances' {} a -> s {fleetId = a} :: DescribeFleetInstances)
+
+instance Core.AWSRequest DescribeFleetInstances where
+  type
+    AWSResponse DescribeFleetInstances =
+      DescribeFleetInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFleetInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "activeInstanceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "fleetId")
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFleetInstances where
+  hashWithSalt _salt DescribeFleetInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData DescribeFleetInstances where
+  rnf DescribeFleetInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf fleetId
+
+instance Data.ToHeaders DescribeFleetInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFleetInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFleetInstances where
+  toQuery DescribeFleetInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFleetInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "FleetId" Data.=: fleetId
+      ]
+
+-- | /See:/ 'newDescribeFleetInstancesResponse' smart constructor.
+data DescribeFleetInstancesResponse = DescribeFleetInstancesResponse'
+  { -- | The running instances. This list is refreshed periodically and might be
+    -- out of date.
+    activeInstances :: Prelude.Maybe [ActiveInstance],
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeInstances', 'describeFleetInstancesResponse_activeInstances' - The running instances. This list is refreshed periodically and might be
+-- out of date.
+--
+-- 'fleetId', 'describeFleetInstancesResponse_fleetId' - The ID of the EC2 Fleet.
+--
+-- 'nextToken', 'describeFleetInstancesResponse_nextToken' - The token for the next set of results.
+--
+-- 'httpStatus', 'describeFleetInstancesResponse_httpStatus' - The response's http status code.
+newDescribeFleetInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFleetInstancesResponse
+newDescribeFleetInstancesResponse pHttpStatus_ =
+  DescribeFleetInstancesResponse'
+    { activeInstances =
+        Prelude.Nothing,
+      fleetId = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The running instances. This list is refreshed periodically and might be
+-- out of date.
+describeFleetInstancesResponse_activeInstances :: Lens.Lens' DescribeFleetInstancesResponse (Prelude.Maybe [ActiveInstance])
+describeFleetInstancesResponse_activeInstances = Lens.lens (\DescribeFleetInstancesResponse' {activeInstances} -> activeInstances) (\s@DescribeFleetInstancesResponse' {} a -> s {activeInstances = a} :: DescribeFleetInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the EC2 Fleet.
+describeFleetInstancesResponse_fleetId :: Lens.Lens' DescribeFleetInstancesResponse (Prelude.Maybe Prelude.Text)
+describeFleetInstancesResponse_fleetId = Lens.lens (\DescribeFleetInstancesResponse' {fleetId} -> fleetId) (\s@DescribeFleetInstancesResponse' {} a -> s {fleetId = a} :: DescribeFleetInstancesResponse)
+
+-- | The token for the next set of results.
+describeFleetInstancesResponse_nextToken :: Lens.Lens' DescribeFleetInstancesResponse (Prelude.Maybe Prelude.Text)
+describeFleetInstancesResponse_nextToken = Lens.lens (\DescribeFleetInstancesResponse' {nextToken} -> nextToken) (\s@DescribeFleetInstancesResponse' {} a -> s {nextToken = a} :: DescribeFleetInstancesResponse)
+
+-- | The response's http status code.
+describeFleetInstancesResponse_httpStatus :: Lens.Lens' DescribeFleetInstancesResponse Prelude.Int
+describeFleetInstancesResponse_httpStatus = Lens.lens (\DescribeFleetInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeFleetInstancesResponse' {} a -> s {httpStatus = a} :: DescribeFleetInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeFleetInstancesResponse
+  where
+  rnf DescribeFleetInstancesResponse' {..} =
+    Prelude.rnf activeInstances
+      `Prelude.seq` Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFleets.hs b/gen/Amazonka/EC2/DescribeFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFleets.hs
@@ -0,0 +1,330 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified EC2 Fleets or all of your EC2 Fleets.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#monitor-ec2-fleet Monitor your EC2 Fleet>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeFleets
+  ( -- * Creating a Request
+    DescribeFleets (..),
+    newDescribeFleets,
+
+    -- * Request Lenses
+    describeFleets_dryRun,
+    describeFleets_filters,
+    describeFleets_fleetIds,
+    describeFleets_maxResults,
+    describeFleets_nextToken,
+
+    -- * Destructuring the Response
+    DescribeFleetsResponse (..),
+    newDescribeFleetsResponse,
+
+    -- * Response Lenses
+    describeFleetsResponse_fleets,
+    describeFleetsResponse_nextToken,
+    describeFleetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFleets' smart constructor.
+data DescribeFleets = DescribeFleets'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @activity-status@ - The progress of the EC2 Fleet ( @error@ |
+    --     @pending-fulfillment@ | @pending-termination@ | @fulfilled@).
+    --
+    -- -   @excess-capacity-termination-policy@ - Indicates whether to
+    --     terminate running instances if the target capacity is decreased
+    --     below the current EC2 Fleet size (@true@ | @false@).
+    --
+    -- -   @fleet-state@ - The state of the EC2 Fleet (@submitted@ | @active@ |
+    --     @deleted@ | @failed@ | @deleted-running@ | @deleted-terminating@ |
+    --     @modifying@).
+    --
+    -- -   @replace-unhealthy-instances@ - Indicates whether EC2 Fleet should
+    --     replace unhealthy instances (@true@ | @false@).
+    --
+    -- -   @type@ - The type of request (@instant@ | @request@ | @maintain@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the EC2 Fleets.
+    --
+    -- If a fleet is of type @instant@, you must specify the fleet ID,
+    -- otherwise it does not appear in the response.
+    fleetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFleets_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeFleets_filters' - The filters.
+--
+-- -   @activity-status@ - The progress of the EC2 Fleet ( @error@ |
+--     @pending-fulfillment@ | @pending-termination@ | @fulfilled@).
+--
+-- -   @excess-capacity-termination-policy@ - Indicates whether to
+--     terminate running instances if the target capacity is decreased
+--     below the current EC2 Fleet size (@true@ | @false@).
+--
+-- -   @fleet-state@ - The state of the EC2 Fleet (@submitted@ | @active@ |
+--     @deleted@ | @failed@ | @deleted-running@ | @deleted-terminating@ |
+--     @modifying@).
+--
+-- -   @replace-unhealthy-instances@ - Indicates whether EC2 Fleet should
+--     replace unhealthy instances (@true@ | @false@).
+--
+-- -   @type@ - The type of request (@instant@ | @request@ | @maintain@).
+--
+-- 'fleetIds', 'describeFleets_fleetIds' - The IDs of the EC2 Fleets.
+--
+-- If a fleet is of type @instant@, you must specify the fleet ID,
+-- otherwise it does not appear in the response.
+--
+-- 'maxResults', 'describeFleets_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeFleets_nextToken' - The token for the next set of results.
+newDescribeFleets ::
+  DescribeFleets
+newDescribeFleets =
+  DescribeFleets'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      fleetIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFleets_dryRun :: Lens.Lens' DescribeFleets (Prelude.Maybe Prelude.Bool)
+describeFleets_dryRun = Lens.lens (\DescribeFleets' {dryRun} -> dryRun) (\s@DescribeFleets' {} a -> s {dryRun = a} :: DescribeFleets)
+
+-- | The filters.
+--
+-- -   @activity-status@ - The progress of the EC2 Fleet ( @error@ |
+--     @pending-fulfillment@ | @pending-termination@ | @fulfilled@).
+--
+-- -   @excess-capacity-termination-policy@ - Indicates whether to
+--     terminate running instances if the target capacity is decreased
+--     below the current EC2 Fleet size (@true@ | @false@).
+--
+-- -   @fleet-state@ - The state of the EC2 Fleet (@submitted@ | @active@ |
+--     @deleted@ | @failed@ | @deleted-running@ | @deleted-terminating@ |
+--     @modifying@).
+--
+-- -   @replace-unhealthy-instances@ - Indicates whether EC2 Fleet should
+--     replace unhealthy instances (@true@ | @false@).
+--
+-- -   @type@ - The type of request (@instant@ | @request@ | @maintain@).
+describeFleets_filters :: Lens.Lens' DescribeFleets (Prelude.Maybe [Filter])
+describeFleets_filters = Lens.lens (\DescribeFleets' {filters} -> filters) (\s@DescribeFleets' {} a -> s {filters = a} :: DescribeFleets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the EC2 Fleets.
+--
+-- If a fleet is of type @instant@, you must specify the fleet ID,
+-- otherwise it does not appear in the response.
+describeFleets_fleetIds :: Lens.Lens' DescribeFleets (Prelude.Maybe [Prelude.Text])
+describeFleets_fleetIds = Lens.lens (\DescribeFleets' {fleetIds} -> fleetIds) (\s@DescribeFleets' {} a -> s {fleetIds = a} :: DescribeFleets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeFleets_maxResults :: Lens.Lens' DescribeFleets (Prelude.Maybe Prelude.Int)
+describeFleets_maxResults = Lens.lens (\DescribeFleets' {maxResults} -> maxResults) (\s@DescribeFleets' {} a -> s {maxResults = a} :: DescribeFleets)
+
+-- | The token for the next set of results.
+describeFleets_nextToken :: Lens.Lens' DescribeFleets (Prelude.Maybe Prelude.Text)
+describeFleets_nextToken = Lens.lens (\DescribeFleets' {nextToken} -> nextToken) (\s@DescribeFleets' {} a -> s {nextToken = a} :: DescribeFleets)
+
+instance Core.AWSPager DescribeFleets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeFleetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeFleetsResponse_fleets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeFleets_nextToken
+          Lens..~ rs
+          Lens.^? describeFleetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeFleets where
+  type
+    AWSResponse DescribeFleets =
+      DescribeFleetsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFleetsResponse'
+            Prelude.<$> ( x
+                            Data..@? "fleetSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFleets where
+  hashWithSalt _salt DescribeFleets' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` fleetIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeFleets where
+  rnf DescribeFleets' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf fleetIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeFleets where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFleets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFleets where
+  toQuery DescribeFleets' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFleets" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "FleetId" Prelude.<$> fleetIds),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeFleetsResponse' smart constructor.
+data DescribeFleetsResponse = DescribeFleetsResponse'
+  { -- | Information about the EC2 Fleets.
+    fleets :: Prelude.Maybe [FleetData],
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleets', 'describeFleetsResponse_fleets' - Information about the EC2 Fleets.
+--
+-- 'nextToken', 'describeFleetsResponse_nextToken' - The token for the next set of results.
+--
+-- 'httpStatus', 'describeFleetsResponse_httpStatus' - The response's http status code.
+newDescribeFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFleetsResponse
+newDescribeFleetsResponse pHttpStatus_ =
+  DescribeFleetsResponse'
+    { fleets = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the EC2 Fleets.
+describeFleetsResponse_fleets :: Lens.Lens' DescribeFleetsResponse (Prelude.Maybe [FleetData])
+describeFleetsResponse_fleets = Lens.lens (\DescribeFleetsResponse' {fleets} -> fleets) (\s@DescribeFleetsResponse' {} a -> s {fleets = a} :: DescribeFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results.
+describeFleetsResponse_nextToken :: Lens.Lens' DescribeFleetsResponse (Prelude.Maybe Prelude.Text)
+describeFleetsResponse_nextToken = Lens.lens (\DescribeFleetsResponse' {nextToken} -> nextToken) (\s@DescribeFleetsResponse' {} a -> s {nextToken = a} :: DescribeFleetsResponse)
+
+-- | The response's http status code.
+describeFleetsResponse_httpStatus :: Lens.Lens' DescribeFleetsResponse Prelude.Int
+describeFleetsResponse_httpStatus = Lens.lens (\DescribeFleetsResponse' {httpStatus} -> httpStatus) (\s@DescribeFleetsResponse' {} a -> s {httpStatus = a} :: DescribeFleetsResponse)
+
+instance Prelude.NFData DescribeFleetsResponse where
+  rnf DescribeFleetsResponse' {..} =
+    Prelude.rnf fleets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFlowLogs.hs b/gen/Amazonka/EC2/DescribeFlowLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFlowLogs.hs
@@ -0,0 +1,354 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFlowLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more flow logs.
+--
+-- To view the published flow log records, you must view the log
+-- destination. For example, the CloudWatch Logs log group, the Amazon S3
+-- bucket, or the Kinesis Data Firehose delivery stream.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeFlowLogs
+  ( -- * Creating a Request
+    DescribeFlowLogs (..),
+    newDescribeFlowLogs,
+
+    -- * Request Lenses
+    describeFlowLogs_dryRun,
+    describeFlowLogs_filter,
+    describeFlowLogs_flowLogIds,
+    describeFlowLogs_maxResults,
+    describeFlowLogs_nextToken,
+
+    -- * Destructuring the Response
+    DescribeFlowLogsResponse (..),
+    newDescribeFlowLogsResponse,
+
+    -- * Response Lenses
+    describeFlowLogsResponse_flowLogs,
+    describeFlowLogsResponse_nextToken,
+    describeFlowLogsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFlowLogs' smart constructor.
+data DescribeFlowLogs = DescribeFlowLogs'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @deliver-log-status@ - The status of the logs delivery (@SUCCESS@ |
+    --     @FAILED@).
+    --
+    -- -   @log-destination-type@ - The type of destination for the flow log
+    --     data (@cloud-watch-logs@ | @s3@ | @kinesis-data-firehose@).
+    --
+    -- -   @flow-log-id@ - The ID of the flow log.
+    --
+    -- -   @log-group-name@ - The name of the log group.
+    --
+    -- -   @resource-id@ - The ID of the VPC, subnet, or network interface.
+    --
+    -- -   @traffic-type@ - The type of traffic (@ACCEPT@ | @REJECT@ | @ALL@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filter' :: Prelude.Maybe [Filter],
+    -- | One or more flow log IDs.
+    --
+    -- Constraint: Maximum of 1000 flow log IDs.
+    flowLogIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFlowLogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFlowLogs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filter'', 'describeFlowLogs_filter' - One or more filters.
+--
+-- -   @deliver-log-status@ - The status of the logs delivery (@SUCCESS@ |
+--     @FAILED@).
+--
+-- -   @log-destination-type@ - The type of destination for the flow log
+--     data (@cloud-watch-logs@ | @s3@ | @kinesis-data-firehose@).
+--
+-- -   @flow-log-id@ - The ID of the flow log.
+--
+-- -   @log-group-name@ - The name of the log group.
+--
+-- -   @resource-id@ - The ID of the VPC, subnet, or network interface.
+--
+-- -   @traffic-type@ - The type of traffic (@ACCEPT@ | @REJECT@ | @ALL@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'flowLogIds', 'describeFlowLogs_flowLogIds' - One or more flow log IDs.
+--
+-- Constraint: Maximum of 1000 flow log IDs.
+--
+-- 'maxResults', 'describeFlowLogs_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeFlowLogs_nextToken' - The token for the next page of results.
+newDescribeFlowLogs ::
+  DescribeFlowLogs
+newDescribeFlowLogs =
+  DescribeFlowLogs'
+    { dryRun = Prelude.Nothing,
+      filter' = Prelude.Nothing,
+      flowLogIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFlowLogs_dryRun :: Lens.Lens' DescribeFlowLogs (Prelude.Maybe Prelude.Bool)
+describeFlowLogs_dryRun = Lens.lens (\DescribeFlowLogs' {dryRun} -> dryRun) (\s@DescribeFlowLogs' {} a -> s {dryRun = a} :: DescribeFlowLogs)
+
+-- | One or more filters.
+--
+-- -   @deliver-log-status@ - The status of the logs delivery (@SUCCESS@ |
+--     @FAILED@).
+--
+-- -   @log-destination-type@ - The type of destination for the flow log
+--     data (@cloud-watch-logs@ | @s3@ | @kinesis-data-firehose@).
+--
+-- -   @flow-log-id@ - The ID of the flow log.
+--
+-- -   @log-group-name@ - The name of the log group.
+--
+-- -   @resource-id@ - The ID of the VPC, subnet, or network interface.
+--
+-- -   @traffic-type@ - The type of traffic (@ACCEPT@ | @REJECT@ | @ALL@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeFlowLogs_filter :: Lens.Lens' DescribeFlowLogs (Prelude.Maybe [Filter])
+describeFlowLogs_filter = Lens.lens (\DescribeFlowLogs' {filter'} -> filter') (\s@DescribeFlowLogs' {} a -> s {filter' = a} :: DescribeFlowLogs) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more flow log IDs.
+--
+-- Constraint: Maximum of 1000 flow log IDs.
+describeFlowLogs_flowLogIds :: Lens.Lens' DescribeFlowLogs (Prelude.Maybe [Prelude.Text])
+describeFlowLogs_flowLogIds = Lens.lens (\DescribeFlowLogs' {flowLogIds} -> flowLogIds) (\s@DescribeFlowLogs' {} a -> s {flowLogIds = a} :: DescribeFlowLogs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeFlowLogs_maxResults :: Lens.Lens' DescribeFlowLogs (Prelude.Maybe Prelude.Int)
+describeFlowLogs_maxResults = Lens.lens (\DescribeFlowLogs' {maxResults} -> maxResults) (\s@DescribeFlowLogs' {} a -> s {maxResults = a} :: DescribeFlowLogs)
+
+-- | The token for the next page of results.
+describeFlowLogs_nextToken :: Lens.Lens' DescribeFlowLogs (Prelude.Maybe Prelude.Text)
+describeFlowLogs_nextToken = Lens.lens (\DescribeFlowLogs' {nextToken} -> nextToken) (\s@DescribeFlowLogs' {} a -> s {nextToken = a} :: DescribeFlowLogs)
+
+instance Core.AWSPager DescribeFlowLogs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeFlowLogsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeFlowLogsResponse_flowLogs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeFlowLogs_nextToken
+          Lens..~ rs
+          Lens.^? describeFlowLogsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeFlowLogs where
+  type
+    AWSResponse DescribeFlowLogs =
+      DescribeFlowLogsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFlowLogsResponse'
+            Prelude.<$> ( x
+                            Data..@? "flowLogSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFlowLogs where
+  hashWithSalt _salt DescribeFlowLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` flowLogIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeFlowLogs where
+  rnf DescribeFlowLogs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf flowLogIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeFlowLogs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFlowLogs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFlowLogs where
+  toQuery DescribeFlowLogs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFlowLogs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filter'),
+        Data.toQuery
+          ( Data.toQueryList "FlowLogId"
+              Prelude.<$> flowLogIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeFlowLogsResponse' smart constructor.
+data DescribeFlowLogsResponse = DescribeFlowLogsResponse'
+  { -- | Information about the flow logs.
+    flowLogs :: Prelude.Maybe [FlowLog],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFlowLogsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'flowLogs', 'describeFlowLogsResponse_flowLogs' - Information about the flow logs.
+--
+-- 'nextToken', 'describeFlowLogsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeFlowLogsResponse_httpStatus' - The response's http status code.
+newDescribeFlowLogsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFlowLogsResponse
+newDescribeFlowLogsResponse pHttpStatus_ =
+  DescribeFlowLogsResponse'
+    { flowLogs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the flow logs.
+describeFlowLogsResponse_flowLogs :: Lens.Lens' DescribeFlowLogsResponse (Prelude.Maybe [FlowLog])
+describeFlowLogsResponse_flowLogs = Lens.lens (\DescribeFlowLogsResponse' {flowLogs} -> flowLogs) (\s@DescribeFlowLogsResponse' {} a -> s {flowLogs = a} :: DescribeFlowLogsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeFlowLogsResponse_nextToken :: Lens.Lens' DescribeFlowLogsResponse (Prelude.Maybe Prelude.Text)
+describeFlowLogsResponse_nextToken = Lens.lens (\DescribeFlowLogsResponse' {nextToken} -> nextToken) (\s@DescribeFlowLogsResponse' {} a -> s {nextToken = a} :: DescribeFlowLogsResponse)
+
+-- | The response's http status code.
+describeFlowLogsResponse_httpStatus :: Lens.Lens' DescribeFlowLogsResponse Prelude.Int
+describeFlowLogsResponse_httpStatus = Lens.lens (\DescribeFlowLogsResponse' {httpStatus} -> httpStatus) (\s@DescribeFlowLogsResponse' {} a -> s {httpStatus = a} :: DescribeFlowLogsResponse)
+
+instance Prelude.NFData DescribeFlowLogsResponse where
+  rnf DescribeFlowLogsResponse' {..} =
+    Prelude.rnf flowLogs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFpgaImageAttribute.hs b/gen/Amazonka/EC2/DescribeFpgaImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFpgaImageAttribute.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFpgaImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified attribute of the specified Amazon FPGA Image
+-- (AFI).
+module Amazonka.EC2.DescribeFpgaImageAttribute
+  ( -- * Creating a Request
+    DescribeFpgaImageAttribute (..),
+    newDescribeFpgaImageAttribute,
+
+    -- * Request Lenses
+    describeFpgaImageAttribute_dryRun,
+    describeFpgaImageAttribute_fpgaImageId,
+    describeFpgaImageAttribute_attribute,
+
+    -- * Destructuring the Response
+    DescribeFpgaImageAttributeResponse (..),
+    newDescribeFpgaImageAttributeResponse,
+
+    -- * Response Lenses
+    describeFpgaImageAttributeResponse_fpgaImageAttribute,
+    describeFpgaImageAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFpgaImageAttribute' smart constructor.
+data DescribeFpgaImageAttribute = DescribeFpgaImageAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AFI.
+    fpgaImageId :: Prelude.Text,
+    -- | The AFI attribute.
+    attribute :: FpgaImageAttributeName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFpgaImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFpgaImageAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fpgaImageId', 'describeFpgaImageAttribute_fpgaImageId' - The ID of the AFI.
+--
+-- 'attribute', 'describeFpgaImageAttribute_attribute' - The AFI attribute.
+newDescribeFpgaImageAttribute ::
+  -- | 'fpgaImageId'
+  Prelude.Text ->
+  -- | 'attribute'
+  FpgaImageAttributeName ->
+  DescribeFpgaImageAttribute
+newDescribeFpgaImageAttribute
+  pFpgaImageId_
+  pAttribute_ =
+    DescribeFpgaImageAttribute'
+      { dryRun =
+          Prelude.Nothing,
+        fpgaImageId = pFpgaImageId_,
+        attribute = pAttribute_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFpgaImageAttribute_dryRun :: Lens.Lens' DescribeFpgaImageAttribute (Prelude.Maybe Prelude.Bool)
+describeFpgaImageAttribute_dryRun = Lens.lens (\DescribeFpgaImageAttribute' {dryRun} -> dryRun) (\s@DescribeFpgaImageAttribute' {} a -> s {dryRun = a} :: DescribeFpgaImageAttribute)
+
+-- | The ID of the AFI.
+describeFpgaImageAttribute_fpgaImageId :: Lens.Lens' DescribeFpgaImageAttribute Prelude.Text
+describeFpgaImageAttribute_fpgaImageId = Lens.lens (\DescribeFpgaImageAttribute' {fpgaImageId} -> fpgaImageId) (\s@DescribeFpgaImageAttribute' {} a -> s {fpgaImageId = a} :: DescribeFpgaImageAttribute)
+
+-- | The AFI attribute.
+describeFpgaImageAttribute_attribute :: Lens.Lens' DescribeFpgaImageAttribute FpgaImageAttributeName
+describeFpgaImageAttribute_attribute = Lens.lens (\DescribeFpgaImageAttribute' {attribute} -> attribute) (\s@DescribeFpgaImageAttribute' {} a -> s {attribute = a} :: DescribeFpgaImageAttribute)
+
+instance Core.AWSRequest DescribeFpgaImageAttribute where
+  type
+    AWSResponse DescribeFpgaImageAttribute =
+      DescribeFpgaImageAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFpgaImageAttributeResponse'
+            Prelude.<$> (x Data..@? "fpgaImageAttribute")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFpgaImageAttribute where
+  hashWithSalt _salt DescribeFpgaImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fpgaImageId
+      `Prelude.hashWithSalt` attribute
+
+instance Prelude.NFData DescribeFpgaImageAttribute where
+  rnf DescribeFpgaImageAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fpgaImageId
+      `Prelude.seq` Prelude.rnf attribute
+
+instance Data.ToHeaders DescribeFpgaImageAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFpgaImageAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFpgaImageAttribute where
+  toQuery DescribeFpgaImageAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFpgaImageAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "FpgaImageId" Data.=: fpgaImageId,
+        "Attribute" Data.=: attribute
+      ]
+
+-- | /See:/ 'newDescribeFpgaImageAttributeResponse' smart constructor.
+data DescribeFpgaImageAttributeResponse = DescribeFpgaImageAttributeResponse'
+  { -- | Information about the attribute.
+    fpgaImageAttribute :: Prelude.Maybe FpgaImageAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFpgaImageAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpgaImageAttribute', 'describeFpgaImageAttributeResponse_fpgaImageAttribute' - Information about the attribute.
+--
+-- 'httpStatus', 'describeFpgaImageAttributeResponse_httpStatus' - The response's http status code.
+newDescribeFpgaImageAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFpgaImageAttributeResponse
+newDescribeFpgaImageAttributeResponse pHttpStatus_ =
+  DescribeFpgaImageAttributeResponse'
+    { fpgaImageAttribute =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the attribute.
+describeFpgaImageAttributeResponse_fpgaImageAttribute :: Lens.Lens' DescribeFpgaImageAttributeResponse (Prelude.Maybe FpgaImageAttribute)
+describeFpgaImageAttributeResponse_fpgaImageAttribute = Lens.lens (\DescribeFpgaImageAttributeResponse' {fpgaImageAttribute} -> fpgaImageAttribute) (\s@DescribeFpgaImageAttributeResponse' {} a -> s {fpgaImageAttribute = a} :: DescribeFpgaImageAttributeResponse)
+
+-- | The response's http status code.
+describeFpgaImageAttributeResponse_httpStatus :: Lens.Lens' DescribeFpgaImageAttributeResponse Prelude.Int
+describeFpgaImageAttributeResponse_httpStatus = Lens.lens (\DescribeFpgaImageAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeFpgaImageAttributeResponse' {} a -> s {httpStatus = a} :: DescribeFpgaImageAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeFpgaImageAttributeResponse
+  where
+  rnf DescribeFpgaImageAttributeResponse' {..} =
+    Prelude.rnf fpgaImageAttribute
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeFpgaImages.hs b/gen/Amazonka/EC2/DescribeFpgaImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeFpgaImages.hs
@@ -0,0 +1,378 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeFpgaImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the Amazon FPGA Images (AFIs) available to you. These include
+-- public AFIs, private AFIs that you own, and AFIs owned by other Amazon
+-- Web Services accounts for which you have load permissions.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeFpgaImages
+  ( -- * Creating a Request
+    DescribeFpgaImages (..),
+    newDescribeFpgaImages,
+
+    -- * Request Lenses
+    describeFpgaImages_dryRun,
+    describeFpgaImages_filters,
+    describeFpgaImages_fpgaImageIds,
+    describeFpgaImages_maxResults,
+    describeFpgaImages_nextToken,
+    describeFpgaImages_owners,
+
+    -- * Destructuring the Response
+    DescribeFpgaImagesResponse (..),
+    newDescribeFpgaImagesResponse,
+
+    -- * Response Lenses
+    describeFpgaImagesResponse_fpgaImages,
+    describeFpgaImagesResponse_nextToken,
+    describeFpgaImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFpgaImages' smart constructor.
+data DescribeFpgaImages = DescribeFpgaImages'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @create-time@ - The creation time of the AFI.
+    --
+    -- -   @fpga-image-id@ - The FPGA image identifier (AFI ID).
+    --
+    -- -   @fpga-image-global-id@ - The global FPGA image identifier (AGFI ID).
+    --
+    -- -   @name@ - The name of the AFI.
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the AFI owner.
+    --
+    -- -   @product-code@ - The product code.
+    --
+    -- -   @shell-version@ - The version of the Amazon Web Services Shell that
+    --     was used to create the bitstream.
+    --
+    -- -   @state@ - The state of the AFI (@pending@ | @failed@ | @available@ |
+    --     @unavailable@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @update-time@ - The time of the most recent update.
+    filters :: Prelude.Maybe [Filter],
+    -- | The AFI IDs.
+    fpgaImageIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filters the AFI by owner. Specify an Amazon Web Services account ID,
+    -- @self@ (owner is the sender of the request), or an Amazon Web Services
+    -- owner alias (valid values are @amazon@ | @aws-marketplace@).
+    owners :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFpgaImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeFpgaImages_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeFpgaImages_filters' - The filters.
+--
+-- -   @create-time@ - The creation time of the AFI.
+--
+-- -   @fpga-image-id@ - The FPGA image identifier (AFI ID).
+--
+-- -   @fpga-image-global-id@ - The global FPGA image identifier (AGFI ID).
+--
+-- -   @name@ - The name of the AFI.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the AFI owner.
+--
+-- -   @product-code@ - The product code.
+--
+-- -   @shell-version@ - The version of the Amazon Web Services Shell that
+--     was used to create the bitstream.
+--
+-- -   @state@ - The state of the AFI (@pending@ | @failed@ | @available@ |
+--     @unavailable@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @update-time@ - The time of the most recent update.
+--
+-- 'fpgaImageIds', 'describeFpgaImages_fpgaImageIds' - The AFI IDs.
+--
+-- 'maxResults', 'describeFpgaImages_maxResults' - The maximum number of results to return in a single call.
+--
+-- 'nextToken', 'describeFpgaImages_nextToken' - The token to retrieve the next page of results.
+--
+-- 'owners', 'describeFpgaImages_owners' - Filters the AFI by owner. Specify an Amazon Web Services account ID,
+-- @self@ (owner is the sender of the request), or an Amazon Web Services
+-- owner alias (valid values are @amazon@ | @aws-marketplace@).
+newDescribeFpgaImages ::
+  DescribeFpgaImages
+newDescribeFpgaImages =
+  DescribeFpgaImages'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      fpgaImageIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owners = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeFpgaImages_dryRun :: Lens.Lens' DescribeFpgaImages (Prelude.Maybe Prelude.Bool)
+describeFpgaImages_dryRun = Lens.lens (\DescribeFpgaImages' {dryRun} -> dryRun) (\s@DescribeFpgaImages' {} a -> s {dryRun = a} :: DescribeFpgaImages)
+
+-- | The filters.
+--
+-- -   @create-time@ - The creation time of the AFI.
+--
+-- -   @fpga-image-id@ - The FPGA image identifier (AFI ID).
+--
+-- -   @fpga-image-global-id@ - The global FPGA image identifier (AGFI ID).
+--
+-- -   @name@ - The name of the AFI.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the AFI owner.
+--
+-- -   @product-code@ - The product code.
+--
+-- -   @shell-version@ - The version of the Amazon Web Services Shell that
+--     was used to create the bitstream.
+--
+-- -   @state@ - The state of the AFI (@pending@ | @failed@ | @available@ |
+--     @unavailable@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @update-time@ - The time of the most recent update.
+describeFpgaImages_filters :: Lens.Lens' DescribeFpgaImages (Prelude.Maybe [Filter])
+describeFpgaImages_filters = Lens.lens (\DescribeFpgaImages' {filters} -> filters) (\s@DescribeFpgaImages' {} a -> s {filters = a} :: DescribeFpgaImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The AFI IDs.
+describeFpgaImages_fpgaImageIds :: Lens.Lens' DescribeFpgaImages (Prelude.Maybe [Prelude.Text])
+describeFpgaImages_fpgaImageIds = Lens.lens (\DescribeFpgaImages' {fpgaImageIds} -> fpgaImageIds) (\s@DescribeFpgaImages' {} a -> s {fpgaImageIds = a} :: DescribeFpgaImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call.
+describeFpgaImages_maxResults :: Lens.Lens' DescribeFpgaImages (Prelude.Maybe Prelude.Natural)
+describeFpgaImages_maxResults = Lens.lens (\DescribeFpgaImages' {maxResults} -> maxResults) (\s@DescribeFpgaImages' {} a -> s {maxResults = a} :: DescribeFpgaImages)
+
+-- | The token to retrieve the next page of results.
+describeFpgaImages_nextToken :: Lens.Lens' DescribeFpgaImages (Prelude.Maybe Prelude.Text)
+describeFpgaImages_nextToken = Lens.lens (\DescribeFpgaImages' {nextToken} -> nextToken) (\s@DescribeFpgaImages' {} a -> s {nextToken = a} :: DescribeFpgaImages)
+
+-- | Filters the AFI by owner. Specify an Amazon Web Services account ID,
+-- @self@ (owner is the sender of the request), or an Amazon Web Services
+-- owner alias (valid values are @amazon@ | @aws-marketplace@).
+describeFpgaImages_owners :: Lens.Lens' DescribeFpgaImages (Prelude.Maybe [Prelude.Text])
+describeFpgaImages_owners = Lens.lens (\DescribeFpgaImages' {owners} -> owners) (\s@DescribeFpgaImages' {} a -> s {owners = a} :: DescribeFpgaImages) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeFpgaImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeFpgaImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeFpgaImagesResponse_fpgaImages
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeFpgaImages_nextToken
+          Lens..~ rs
+          Lens.^? describeFpgaImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeFpgaImages where
+  type
+    AWSResponse DescribeFpgaImages =
+      DescribeFpgaImagesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeFpgaImagesResponse'
+            Prelude.<$> ( x
+                            Data..@? "fpgaImageSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFpgaImages where
+  hashWithSalt _salt DescribeFpgaImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` fpgaImageIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owners
+
+instance Prelude.NFData DescribeFpgaImages where
+  rnf DescribeFpgaImages' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf fpgaImageIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owners
+
+instance Data.ToHeaders DescribeFpgaImages where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeFpgaImages where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFpgaImages where
+  toQuery DescribeFpgaImages' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeFpgaImages" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "FpgaImageId"
+              Prelude.<$> fpgaImageIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "Owner" Prelude.<$> owners)
+      ]
+
+-- | /See:/ 'newDescribeFpgaImagesResponse' smart constructor.
+data DescribeFpgaImagesResponse = DescribeFpgaImagesResponse'
+  { -- | Information about the FPGA images.
+    fpgaImages :: Prelude.Maybe [FpgaImage],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFpgaImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpgaImages', 'describeFpgaImagesResponse_fpgaImages' - Information about the FPGA images.
+--
+-- 'nextToken', 'describeFpgaImagesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeFpgaImagesResponse_httpStatus' - The response's http status code.
+newDescribeFpgaImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFpgaImagesResponse
+newDescribeFpgaImagesResponse pHttpStatus_ =
+  DescribeFpgaImagesResponse'
+    { fpgaImages =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the FPGA images.
+describeFpgaImagesResponse_fpgaImages :: Lens.Lens' DescribeFpgaImagesResponse (Prelude.Maybe [FpgaImage])
+describeFpgaImagesResponse_fpgaImages = Lens.lens (\DescribeFpgaImagesResponse' {fpgaImages} -> fpgaImages) (\s@DescribeFpgaImagesResponse' {} a -> s {fpgaImages = a} :: DescribeFpgaImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeFpgaImagesResponse_nextToken :: Lens.Lens' DescribeFpgaImagesResponse (Prelude.Maybe Prelude.Text)
+describeFpgaImagesResponse_nextToken = Lens.lens (\DescribeFpgaImagesResponse' {nextToken} -> nextToken) (\s@DescribeFpgaImagesResponse' {} a -> s {nextToken = a} :: DescribeFpgaImagesResponse)
+
+-- | The response's http status code.
+describeFpgaImagesResponse_httpStatus :: Lens.Lens' DescribeFpgaImagesResponse Prelude.Int
+describeFpgaImagesResponse_httpStatus = Lens.lens (\DescribeFpgaImagesResponse' {httpStatus} -> httpStatus) (\s@DescribeFpgaImagesResponse' {} a -> s {httpStatus = a} :: DescribeFpgaImagesResponse)
+
+instance Prelude.NFData DescribeFpgaImagesResponse where
+  rnf DescribeFpgaImagesResponse' {..} =
+    Prelude.rnf fpgaImages
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeHostReservationOfferings.hs b/gen/Amazonka/EC2/DescribeHostReservationOfferings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeHostReservationOfferings.hs
@@ -0,0 +1,355 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeHostReservationOfferings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the Dedicated Host reservations that are available to
+-- purchase.
+--
+-- The results describe all of the Dedicated Host reservation offerings,
+-- including offerings that might not match the instance family and Region
+-- of your Dedicated Hosts. When purchasing an offering, ensure that the
+-- instance family and Region of the offering matches that of the Dedicated
+-- Hosts with which it is to be associated. For more information about
+-- supported instance types, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html Dedicated Hosts>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeHostReservationOfferings
+  ( -- * Creating a Request
+    DescribeHostReservationOfferings (..),
+    newDescribeHostReservationOfferings,
+
+    -- * Request Lenses
+    describeHostReservationOfferings_filter,
+    describeHostReservationOfferings_maxDuration,
+    describeHostReservationOfferings_maxResults,
+    describeHostReservationOfferings_minDuration,
+    describeHostReservationOfferings_nextToken,
+    describeHostReservationOfferings_offeringId,
+
+    -- * Destructuring the Response
+    DescribeHostReservationOfferingsResponse (..),
+    newDescribeHostReservationOfferingsResponse,
+
+    -- * Response Lenses
+    describeHostReservationOfferingsResponse_nextToken,
+    describeHostReservationOfferingsResponse_offeringSet,
+    describeHostReservationOfferingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeHostReservationOfferings' smart constructor.
+data DescribeHostReservationOfferings = DescribeHostReservationOfferings'
+  { -- | The filters.
+    --
+    -- -   @instance-family@ - The instance family of the offering (for
+    --     example, @m4@).
+    --
+    -- -   @payment-option@ - The payment option (@NoUpfront@ |
+    --     @PartialUpfront@ | @AllUpfront@).
+    filter' :: Prelude.Maybe [Filter],
+    -- | This is the maximum duration of the reservation to purchase, specified
+    -- in seconds. Reservations are available in one-year and three-year terms.
+    -- The number of seconds specified must be the number of seconds in a year
+    -- (365x24x60x60) times one of the supported durations (1 or 3). For
+    -- example, specify 94608000 for three years.
+    maxDuration :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | This is the minimum duration of the reservation you\'d like to purchase,
+    -- specified in seconds. Reservations are available in one-year and
+    -- three-year terms. The number of seconds specified must be the number of
+    -- seconds in a year (365x24x60x60) times one of the supported durations (1
+    -- or 3). For example, specify 31536000 for one year.
+    minDuration :: Prelude.Maybe Prelude.Int,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the reservation offering.
+    offeringId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeHostReservationOfferings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'describeHostReservationOfferings_filter' - The filters.
+--
+-- -   @instance-family@ - The instance family of the offering (for
+--     example, @m4@).
+--
+-- -   @payment-option@ - The payment option (@NoUpfront@ |
+--     @PartialUpfront@ | @AllUpfront@).
+--
+-- 'maxDuration', 'describeHostReservationOfferings_maxDuration' - This is the maximum duration of the reservation to purchase, specified
+-- in seconds. Reservations are available in one-year and three-year terms.
+-- The number of seconds specified must be the number of seconds in a year
+-- (365x24x60x60) times one of the supported durations (1 or 3). For
+-- example, specify 94608000 for three years.
+--
+-- 'maxResults', 'describeHostReservationOfferings_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- 'minDuration', 'describeHostReservationOfferings_minDuration' - This is the minimum duration of the reservation you\'d like to purchase,
+-- specified in seconds. Reservations are available in one-year and
+-- three-year terms. The number of seconds specified must be the number of
+-- seconds in a year (365x24x60x60) times one of the supported durations (1
+-- or 3). For example, specify 31536000 for one year.
+--
+-- 'nextToken', 'describeHostReservationOfferings_nextToken' - The token to use to retrieve the next page of results.
+--
+-- 'offeringId', 'describeHostReservationOfferings_offeringId' - The ID of the reservation offering.
+newDescribeHostReservationOfferings ::
+  DescribeHostReservationOfferings
+newDescribeHostReservationOfferings =
+  DescribeHostReservationOfferings'
+    { filter' =
+        Prelude.Nothing,
+      maxDuration = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      minDuration = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      offeringId = Prelude.Nothing
+    }
+
+-- | The filters.
+--
+-- -   @instance-family@ - The instance family of the offering (for
+--     example, @m4@).
+--
+-- -   @payment-option@ - The payment option (@NoUpfront@ |
+--     @PartialUpfront@ | @AllUpfront@).
+describeHostReservationOfferings_filter :: Lens.Lens' DescribeHostReservationOfferings (Prelude.Maybe [Filter])
+describeHostReservationOfferings_filter = Lens.lens (\DescribeHostReservationOfferings' {filter'} -> filter') (\s@DescribeHostReservationOfferings' {} a -> s {filter' = a} :: DescribeHostReservationOfferings) Prelude.. Lens.mapping Lens.coerced
+
+-- | This is the maximum duration of the reservation to purchase, specified
+-- in seconds. Reservations are available in one-year and three-year terms.
+-- The number of seconds specified must be the number of seconds in a year
+-- (365x24x60x60) times one of the supported durations (1 or 3). For
+-- example, specify 94608000 for three years.
+describeHostReservationOfferings_maxDuration :: Lens.Lens' DescribeHostReservationOfferings (Prelude.Maybe Prelude.Int)
+describeHostReservationOfferings_maxDuration = Lens.lens (\DescribeHostReservationOfferings' {maxDuration} -> maxDuration) (\s@DescribeHostReservationOfferings' {} a -> s {maxDuration = a} :: DescribeHostReservationOfferings)
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+describeHostReservationOfferings_maxResults :: Lens.Lens' DescribeHostReservationOfferings (Prelude.Maybe Prelude.Natural)
+describeHostReservationOfferings_maxResults = Lens.lens (\DescribeHostReservationOfferings' {maxResults} -> maxResults) (\s@DescribeHostReservationOfferings' {} a -> s {maxResults = a} :: DescribeHostReservationOfferings)
+
+-- | This is the minimum duration of the reservation you\'d like to purchase,
+-- specified in seconds. Reservations are available in one-year and
+-- three-year terms. The number of seconds specified must be the number of
+-- seconds in a year (365x24x60x60) times one of the supported durations (1
+-- or 3). For example, specify 31536000 for one year.
+describeHostReservationOfferings_minDuration :: Lens.Lens' DescribeHostReservationOfferings (Prelude.Maybe Prelude.Int)
+describeHostReservationOfferings_minDuration = Lens.lens (\DescribeHostReservationOfferings' {minDuration} -> minDuration) (\s@DescribeHostReservationOfferings' {} a -> s {minDuration = a} :: DescribeHostReservationOfferings)
+
+-- | The token to use to retrieve the next page of results.
+describeHostReservationOfferings_nextToken :: Lens.Lens' DescribeHostReservationOfferings (Prelude.Maybe Prelude.Text)
+describeHostReservationOfferings_nextToken = Lens.lens (\DescribeHostReservationOfferings' {nextToken} -> nextToken) (\s@DescribeHostReservationOfferings' {} a -> s {nextToken = a} :: DescribeHostReservationOfferings)
+
+-- | The ID of the reservation offering.
+describeHostReservationOfferings_offeringId :: Lens.Lens' DescribeHostReservationOfferings (Prelude.Maybe Prelude.Text)
+describeHostReservationOfferings_offeringId = Lens.lens (\DescribeHostReservationOfferings' {offeringId} -> offeringId) (\s@DescribeHostReservationOfferings' {} a -> s {offeringId = a} :: DescribeHostReservationOfferings)
+
+instance
+  Core.AWSPager
+    DescribeHostReservationOfferings
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeHostReservationOfferingsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeHostReservationOfferingsResponse_offeringSet
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeHostReservationOfferings_nextToken
+          Lens..~ rs
+          Lens.^? describeHostReservationOfferingsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeHostReservationOfferings
+  where
+  type
+    AWSResponse DescribeHostReservationOfferings =
+      DescribeHostReservationOfferingsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeHostReservationOfferingsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "offeringSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeHostReservationOfferings
+  where
+  hashWithSalt
+    _salt
+    DescribeHostReservationOfferings' {..} =
+      _salt
+        `Prelude.hashWithSalt` filter'
+        `Prelude.hashWithSalt` maxDuration
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` minDuration
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` offeringId
+
+instance
+  Prelude.NFData
+    DescribeHostReservationOfferings
+  where
+  rnf DescribeHostReservationOfferings' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxDuration
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf minDuration
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf offeringId
+
+instance
+  Data.ToHeaders
+    DescribeHostReservationOfferings
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeHostReservationOfferings where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeHostReservationOfferings
+  where
+  toQuery DescribeHostReservationOfferings' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeHostReservationOfferings" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filter'),
+        "MaxDuration" Data.=: maxDuration,
+        "MaxResults" Data.=: maxResults,
+        "MinDuration" Data.=: minDuration,
+        "NextToken" Data.=: nextToken,
+        "OfferingId" Data.=: offeringId
+      ]
+
+-- | /See:/ 'newDescribeHostReservationOfferingsResponse' smart constructor.
+data DescribeHostReservationOfferingsResponse = DescribeHostReservationOfferingsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the offerings.
+    offeringSet :: Prelude.Maybe [HostOffering],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeHostReservationOfferingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeHostReservationOfferingsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'offeringSet', 'describeHostReservationOfferingsResponse_offeringSet' - Information about the offerings.
+--
+-- 'httpStatus', 'describeHostReservationOfferingsResponse_httpStatus' - The response's http status code.
+newDescribeHostReservationOfferingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeHostReservationOfferingsResponse
+newDescribeHostReservationOfferingsResponse
+  pHttpStatus_ =
+    DescribeHostReservationOfferingsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        offeringSet = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeHostReservationOfferingsResponse_nextToken :: Lens.Lens' DescribeHostReservationOfferingsResponse (Prelude.Maybe Prelude.Text)
+describeHostReservationOfferingsResponse_nextToken = Lens.lens (\DescribeHostReservationOfferingsResponse' {nextToken} -> nextToken) (\s@DescribeHostReservationOfferingsResponse' {} a -> s {nextToken = a} :: DescribeHostReservationOfferingsResponse)
+
+-- | Information about the offerings.
+describeHostReservationOfferingsResponse_offeringSet :: Lens.Lens' DescribeHostReservationOfferingsResponse (Prelude.Maybe [HostOffering])
+describeHostReservationOfferingsResponse_offeringSet = Lens.lens (\DescribeHostReservationOfferingsResponse' {offeringSet} -> offeringSet) (\s@DescribeHostReservationOfferingsResponse' {} a -> s {offeringSet = a} :: DescribeHostReservationOfferingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeHostReservationOfferingsResponse_httpStatus :: Lens.Lens' DescribeHostReservationOfferingsResponse Prelude.Int
+describeHostReservationOfferingsResponse_httpStatus = Lens.lens (\DescribeHostReservationOfferingsResponse' {httpStatus} -> httpStatus) (\s@DescribeHostReservationOfferingsResponse' {} a -> s {httpStatus = a} :: DescribeHostReservationOfferingsResponse)
+
+instance
+  Prelude.NFData
+    DescribeHostReservationOfferingsResponse
+  where
+  rnf DescribeHostReservationOfferingsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf offeringSet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeHostReservations.hs b/gen/Amazonka/EC2/DescribeHostReservations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeHostReservations.hs
@@ -0,0 +1,312 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeHostReservations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes reservations that are associated with Dedicated Hosts in your
+-- account.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeHostReservations
+  ( -- * Creating a Request
+    DescribeHostReservations (..),
+    newDescribeHostReservations,
+
+    -- * Request Lenses
+    describeHostReservations_filter,
+    describeHostReservations_hostReservationIdSet,
+    describeHostReservations_maxResults,
+    describeHostReservations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeHostReservationsResponse (..),
+    newDescribeHostReservationsResponse,
+
+    -- * Response Lenses
+    describeHostReservationsResponse_hostReservationSet,
+    describeHostReservationsResponse_nextToken,
+    describeHostReservationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeHostReservations' smart constructor.
+data DescribeHostReservations = DescribeHostReservations'
+  { -- | The filters.
+    --
+    -- -   @instance-family@ - The instance family (for example, @m4@).
+    --
+    -- -   @payment-option@ - The payment option (@NoUpfront@ |
+    --     @PartialUpfront@ | @AllUpfront@).
+    --
+    -- -   @state@ - The state of the reservation (@payment-pending@ |
+    --     @payment-failed@ | @active@ | @retired@).
+    --
+    -- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filter' :: Prelude.Maybe [Filter],
+    -- | The host reservation IDs.
+    hostReservationIdSet :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeHostReservations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'describeHostReservations_filter' - The filters.
+--
+-- -   @instance-family@ - The instance family (for example, @m4@).
+--
+-- -   @payment-option@ - The payment option (@NoUpfront@ |
+--     @PartialUpfront@ | @AllUpfront@).
+--
+-- -   @state@ - The state of the reservation (@payment-pending@ |
+--     @payment-failed@ | @active@ | @retired@).
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'hostReservationIdSet', 'describeHostReservations_hostReservationIdSet' - The host reservation IDs.
+--
+-- 'maxResults', 'describeHostReservations_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- 'nextToken', 'describeHostReservations_nextToken' - The token to use to retrieve the next page of results.
+newDescribeHostReservations ::
+  DescribeHostReservations
+newDescribeHostReservations =
+  DescribeHostReservations'
+    { filter' =
+        Prelude.Nothing,
+      hostReservationIdSet = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The filters.
+--
+-- -   @instance-family@ - The instance family (for example, @m4@).
+--
+-- -   @payment-option@ - The payment option (@NoUpfront@ |
+--     @PartialUpfront@ | @AllUpfront@).
+--
+-- -   @state@ - The state of the reservation (@payment-pending@ |
+--     @payment-failed@ | @active@ | @retired@).
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeHostReservations_filter :: Lens.Lens' DescribeHostReservations (Prelude.Maybe [Filter])
+describeHostReservations_filter = Lens.lens (\DescribeHostReservations' {filter'} -> filter') (\s@DescribeHostReservations' {} a -> s {filter' = a} :: DescribeHostReservations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The host reservation IDs.
+describeHostReservations_hostReservationIdSet :: Lens.Lens' DescribeHostReservations (Prelude.Maybe [Prelude.Text])
+describeHostReservations_hostReservationIdSet = Lens.lens (\DescribeHostReservations' {hostReservationIdSet} -> hostReservationIdSet) (\s@DescribeHostReservations' {} a -> s {hostReservationIdSet = a} :: DescribeHostReservations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+describeHostReservations_maxResults :: Lens.Lens' DescribeHostReservations (Prelude.Maybe Prelude.Int)
+describeHostReservations_maxResults = Lens.lens (\DescribeHostReservations' {maxResults} -> maxResults) (\s@DescribeHostReservations' {} a -> s {maxResults = a} :: DescribeHostReservations)
+
+-- | The token to use to retrieve the next page of results.
+describeHostReservations_nextToken :: Lens.Lens' DescribeHostReservations (Prelude.Maybe Prelude.Text)
+describeHostReservations_nextToken = Lens.lens (\DescribeHostReservations' {nextToken} -> nextToken) (\s@DescribeHostReservations' {} a -> s {nextToken = a} :: DescribeHostReservations)
+
+instance Core.AWSPager DescribeHostReservations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeHostReservationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeHostReservationsResponse_hostReservationSet
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeHostReservations_nextToken
+          Lens..~ rs
+          Lens.^? describeHostReservationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeHostReservations where
+  type
+    AWSResponse DescribeHostReservations =
+      DescribeHostReservationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeHostReservationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "hostReservationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeHostReservations where
+  hashWithSalt _salt DescribeHostReservations' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` hostReservationIdSet
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeHostReservations where
+  rnf DescribeHostReservations' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf hostReservationIdSet
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeHostReservations where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeHostReservations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeHostReservations where
+  toQuery DescribeHostReservations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeHostReservations" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filter'),
+        Data.toQuery
+          ( Data.toQueryList "HostReservationIdSet"
+              Prelude.<$> hostReservationIdSet
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeHostReservationsResponse' smart constructor.
+data DescribeHostReservationsResponse = DescribeHostReservationsResponse'
+  { -- | Details about the reservation\'s configuration.
+    hostReservationSet :: Prelude.Maybe [HostReservation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeHostReservationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostReservationSet', 'describeHostReservationsResponse_hostReservationSet' - Details about the reservation\'s configuration.
+--
+-- 'nextToken', 'describeHostReservationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeHostReservationsResponse_httpStatus' - The response's http status code.
+newDescribeHostReservationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeHostReservationsResponse
+newDescribeHostReservationsResponse pHttpStatus_ =
+  DescribeHostReservationsResponse'
+    { hostReservationSet =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details about the reservation\'s configuration.
+describeHostReservationsResponse_hostReservationSet :: Lens.Lens' DescribeHostReservationsResponse (Prelude.Maybe [HostReservation])
+describeHostReservationsResponse_hostReservationSet = Lens.lens (\DescribeHostReservationsResponse' {hostReservationSet} -> hostReservationSet) (\s@DescribeHostReservationsResponse' {} a -> s {hostReservationSet = a} :: DescribeHostReservationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeHostReservationsResponse_nextToken :: Lens.Lens' DescribeHostReservationsResponse (Prelude.Maybe Prelude.Text)
+describeHostReservationsResponse_nextToken = Lens.lens (\DescribeHostReservationsResponse' {nextToken} -> nextToken) (\s@DescribeHostReservationsResponse' {} a -> s {nextToken = a} :: DescribeHostReservationsResponse)
+
+-- | The response's http status code.
+describeHostReservationsResponse_httpStatus :: Lens.Lens' DescribeHostReservationsResponse Prelude.Int
+describeHostReservationsResponse_httpStatus = Lens.lens (\DescribeHostReservationsResponse' {httpStatus} -> httpStatus) (\s@DescribeHostReservationsResponse' {} a -> s {httpStatus = a} :: DescribeHostReservationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeHostReservationsResponse
+  where
+  rnf DescribeHostReservationsResponse' {..} =
+    Prelude.rnf hostReservationSet
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeHosts.hs b/gen/Amazonka/EC2/DescribeHosts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeHosts.hs
@@ -0,0 +1,333 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeHosts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified Dedicated Hosts or all your Dedicated Hosts.
+--
+-- The results describe only the Dedicated Hosts in the Region you\'re
+-- currently using. All listed instances consume capacity on your Dedicated
+-- Host. Dedicated Hosts that have recently been released are listed with
+-- the state @released@.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeHosts
+  ( -- * Creating a Request
+    DescribeHosts (..),
+    newDescribeHosts,
+
+    -- * Request Lenses
+    describeHosts_filter,
+    describeHosts_hostIds,
+    describeHosts_maxResults,
+    describeHosts_nextToken,
+
+    -- * Destructuring the Response
+    DescribeHostsResponse (..),
+    newDescribeHostsResponse,
+
+    -- * Response Lenses
+    describeHostsResponse_hosts,
+    describeHostsResponse_nextToken,
+    describeHostsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeHosts' smart constructor.
+data DescribeHosts = DescribeHosts'
+  { -- | The filters.
+    --
+    -- -   @auto-placement@ - Whether auto-placement is enabled or disabled
+    --     (@on@ | @off@).
+    --
+    -- -   @availability-zone@ - The Availability Zone of the host.
+    --
+    -- -   @client-token@ - The idempotency token that you provided when you
+    --     allocated the host.
+    --
+    -- -   @host-reservation-id@ - The ID of the reservation assigned to this
+    --     host.
+    --
+    -- -   @instance-type@ - The instance type size that the Dedicated Host is
+    --     configured to support.
+    --
+    -- -   @state@ - The allocation state of the Dedicated Host (@available@ |
+    --     @under-assessment@ | @permanent-failure@ | @released@ |
+    --     @released-permanent-failure@).
+    --
+    -- -   @tag-key@ - 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.
+    filter' :: Prelude.Maybe [Filter],
+    -- | The IDs of the Dedicated Hosts. The IDs are used for targeted instance
+    -- launches.
+    hostIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    --
+    -- You cannot specify this parameter and the host IDs parameter in the same
+    -- request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeHosts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filter'', 'describeHosts_filter' - The filters.
+--
+-- -   @auto-placement@ - Whether auto-placement is enabled or disabled
+--     (@on@ | @off@).
+--
+-- -   @availability-zone@ - The Availability Zone of the host.
+--
+-- -   @client-token@ - The idempotency token that you provided when you
+--     allocated the host.
+--
+-- -   @host-reservation-id@ - The ID of the reservation assigned to this
+--     host.
+--
+-- -   @instance-type@ - The instance type size that the Dedicated Host is
+--     configured to support.
+--
+-- -   @state@ - The allocation state of the Dedicated Host (@available@ |
+--     @under-assessment@ | @permanent-failure@ | @released@ |
+--     @released-permanent-failure@).
+--
+-- -   @tag-key@ - 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.
+--
+-- 'hostIds', 'describeHosts_hostIds' - The IDs of the Dedicated Hosts. The IDs are used for targeted instance
+-- launches.
+--
+-- 'maxResults', 'describeHosts_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- You cannot specify this parameter and the host IDs parameter in the same
+-- request.
+--
+-- 'nextToken', 'describeHosts_nextToken' - The token to use to retrieve the next page of results.
+newDescribeHosts ::
+  DescribeHosts
+newDescribeHosts =
+  DescribeHosts'
+    { filter' = Prelude.Nothing,
+      hostIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The filters.
+--
+-- -   @auto-placement@ - Whether auto-placement is enabled or disabled
+--     (@on@ | @off@).
+--
+-- -   @availability-zone@ - The Availability Zone of the host.
+--
+-- -   @client-token@ - The idempotency token that you provided when you
+--     allocated the host.
+--
+-- -   @host-reservation-id@ - The ID of the reservation assigned to this
+--     host.
+--
+-- -   @instance-type@ - The instance type size that the Dedicated Host is
+--     configured to support.
+--
+-- -   @state@ - The allocation state of the Dedicated Host (@available@ |
+--     @under-assessment@ | @permanent-failure@ | @released@ |
+--     @released-permanent-failure@).
+--
+-- -   @tag-key@ - 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.
+describeHosts_filter :: Lens.Lens' DescribeHosts (Prelude.Maybe [Filter])
+describeHosts_filter = Lens.lens (\DescribeHosts' {filter'} -> filter') (\s@DescribeHosts' {} a -> s {filter' = a} :: DescribeHosts) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Dedicated Hosts. The IDs are used for targeted instance
+-- launches.
+describeHosts_hostIds :: Lens.Lens' DescribeHosts (Prelude.Maybe [Prelude.Text])
+describeHosts_hostIds = Lens.lens (\DescribeHosts' {hostIds} -> hostIds) (\s@DescribeHosts' {} a -> s {hostIds = a} :: DescribeHosts) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- You cannot specify this parameter and the host IDs parameter in the same
+-- request.
+describeHosts_maxResults :: Lens.Lens' DescribeHosts (Prelude.Maybe Prelude.Int)
+describeHosts_maxResults = Lens.lens (\DescribeHosts' {maxResults} -> maxResults) (\s@DescribeHosts' {} a -> s {maxResults = a} :: DescribeHosts)
+
+-- | The token to use to retrieve the next page of results.
+describeHosts_nextToken :: Lens.Lens' DescribeHosts (Prelude.Maybe Prelude.Text)
+describeHosts_nextToken = Lens.lens (\DescribeHosts' {nextToken} -> nextToken) (\s@DescribeHosts' {} a -> s {nextToken = a} :: DescribeHosts)
+
+instance Core.AWSPager DescribeHosts where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeHostsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeHostsResponse_hosts
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeHosts_nextToken
+          Lens..~ rs
+          Lens.^? describeHostsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeHosts where
+  type
+    AWSResponse DescribeHosts =
+      DescribeHostsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeHostsResponse'
+            Prelude.<$> ( x
+                            Data..@? "hostSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeHosts where
+  hashWithSalt _salt DescribeHosts' {..} =
+    _salt
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` hostIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeHosts where
+  rnf DescribeHosts' {..} =
+    Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf hostIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeHosts where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeHosts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeHosts where
+  toQuery DescribeHosts' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeHosts" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filter'),
+        Data.toQuery
+          (Data.toQueryList "HostId" Prelude.<$> hostIds),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeHostsResponse' smart constructor.
+data DescribeHostsResponse = DescribeHostsResponse'
+  { -- | Information about the Dedicated Hosts.
+    hosts :: Prelude.Maybe [Host],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeHostsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hosts', 'describeHostsResponse_hosts' - Information about the Dedicated Hosts.
+--
+-- 'nextToken', 'describeHostsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeHostsResponse_httpStatus' - The response's http status code.
+newDescribeHostsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeHostsResponse
+newDescribeHostsResponse pHttpStatus_ =
+  DescribeHostsResponse'
+    { hosts = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Dedicated Hosts.
+describeHostsResponse_hosts :: Lens.Lens' DescribeHostsResponse (Prelude.Maybe [Host])
+describeHostsResponse_hosts = Lens.lens (\DescribeHostsResponse' {hosts} -> hosts) (\s@DescribeHostsResponse' {} a -> s {hosts = a} :: DescribeHostsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeHostsResponse_nextToken :: Lens.Lens' DescribeHostsResponse (Prelude.Maybe Prelude.Text)
+describeHostsResponse_nextToken = Lens.lens (\DescribeHostsResponse' {nextToken} -> nextToken) (\s@DescribeHostsResponse' {} a -> s {nextToken = a} :: DescribeHostsResponse)
+
+-- | The response's http status code.
+describeHostsResponse_httpStatus :: Lens.Lens' DescribeHostsResponse Prelude.Int
+describeHostsResponse_httpStatus = Lens.lens (\DescribeHostsResponse' {httpStatus} -> httpStatus) (\s@DescribeHostsResponse' {} a -> s {httpStatus = a} :: DescribeHostsResponse)
+
+instance Prelude.NFData DescribeHostsResponse where
+  rnf DescribeHostsResponse' {..} =
+    Prelude.rnf hosts
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIamInstanceProfileAssociations.hs b/gen/Amazonka/EC2/DescribeIamInstanceProfileAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIamInstanceProfileAssociations.hs
@@ -0,0 +1,297 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIamInstanceProfileAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your IAM instance profile associations.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeIamInstanceProfileAssociations
+  ( -- * Creating a Request
+    DescribeIamInstanceProfileAssociations (..),
+    newDescribeIamInstanceProfileAssociations,
+
+    -- * Request Lenses
+    describeIamInstanceProfileAssociations_associationIds,
+    describeIamInstanceProfileAssociations_filters,
+    describeIamInstanceProfileAssociations_maxResults,
+    describeIamInstanceProfileAssociations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeIamInstanceProfileAssociationsResponse (..),
+    newDescribeIamInstanceProfileAssociationsResponse,
+
+    -- * Response Lenses
+    describeIamInstanceProfileAssociationsResponse_iamInstanceProfileAssociations,
+    describeIamInstanceProfileAssociationsResponse_nextToken,
+    describeIamInstanceProfileAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIamInstanceProfileAssociations' smart constructor.
+data DescribeIamInstanceProfileAssociations = DescribeIamInstanceProfileAssociations'
+  { -- | The IAM instance profile associations.
+    associationIds :: Prelude.Maybe [Prelude.Text],
+    -- | The filters.
+    --
+    -- -   @instance-id@ - The ID of the instance.
+    --
+    -- -   @state@ - The state of the association (@associating@ | @associated@
+    --     | @disassociating@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIamInstanceProfileAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationIds', 'describeIamInstanceProfileAssociations_associationIds' - The IAM instance profile associations.
+--
+-- 'filters', 'describeIamInstanceProfileAssociations_filters' - The filters.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @state@ - The state of the association (@associating@ | @associated@
+--     | @disassociating@).
+--
+-- 'maxResults', 'describeIamInstanceProfileAssociations_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeIamInstanceProfileAssociations_nextToken' - The token to request the next page of results.
+newDescribeIamInstanceProfileAssociations ::
+  DescribeIamInstanceProfileAssociations
+newDescribeIamInstanceProfileAssociations =
+  DescribeIamInstanceProfileAssociations'
+    { associationIds =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The IAM instance profile associations.
+describeIamInstanceProfileAssociations_associationIds :: Lens.Lens' DescribeIamInstanceProfileAssociations (Prelude.Maybe [Prelude.Text])
+describeIamInstanceProfileAssociations_associationIds = Lens.lens (\DescribeIamInstanceProfileAssociations' {associationIds} -> associationIds) (\s@DescribeIamInstanceProfileAssociations' {} a -> s {associationIds = a} :: DescribeIamInstanceProfileAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The filters.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @state@ - The state of the association (@associating@ | @associated@
+--     | @disassociating@).
+describeIamInstanceProfileAssociations_filters :: Lens.Lens' DescribeIamInstanceProfileAssociations (Prelude.Maybe [Filter])
+describeIamInstanceProfileAssociations_filters = Lens.lens (\DescribeIamInstanceProfileAssociations' {filters} -> filters) (\s@DescribeIamInstanceProfileAssociations' {} a -> s {filters = a} :: DescribeIamInstanceProfileAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value.
+describeIamInstanceProfileAssociations_maxResults :: Lens.Lens' DescribeIamInstanceProfileAssociations (Prelude.Maybe Prelude.Natural)
+describeIamInstanceProfileAssociations_maxResults = Lens.lens (\DescribeIamInstanceProfileAssociations' {maxResults} -> maxResults) (\s@DescribeIamInstanceProfileAssociations' {} a -> s {maxResults = a} :: DescribeIamInstanceProfileAssociations)
+
+-- | The token to request the next page of results.
+describeIamInstanceProfileAssociations_nextToken :: Lens.Lens' DescribeIamInstanceProfileAssociations (Prelude.Maybe Prelude.Text)
+describeIamInstanceProfileAssociations_nextToken = Lens.lens (\DescribeIamInstanceProfileAssociations' {nextToken} -> nextToken) (\s@DescribeIamInstanceProfileAssociations' {} a -> s {nextToken = a} :: DescribeIamInstanceProfileAssociations)
+
+instance
+  Core.AWSPager
+    DescribeIamInstanceProfileAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeIamInstanceProfileAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeIamInstanceProfileAssociationsResponse_iamInstanceProfileAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeIamInstanceProfileAssociations_nextToken
+          Lens..~ rs
+          Lens.^? describeIamInstanceProfileAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeIamInstanceProfileAssociations
+  where
+  type
+    AWSResponse
+      DescribeIamInstanceProfileAssociations =
+      DescribeIamInstanceProfileAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIamInstanceProfileAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "iamInstanceProfileAssociationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeIamInstanceProfileAssociations
+  where
+  hashWithSalt
+    _salt
+    DescribeIamInstanceProfileAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` associationIds
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeIamInstanceProfileAssociations
+  where
+  rnf DescribeIamInstanceProfileAssociations' {..} =
+    Prelude.rnf associationIds
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeIamInstanceProfileAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeIamInstanceProfileAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeIamInstanceProfileAssociations
+  where
+  toQuery DescribeIamInstanceProfileAssociations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeIamInstanceProfileAssociations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AssociationId"
+              Prelude.<$> associationIds
+          ),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeIamInstanceProfileAssociationsResponse' smart constructor.
+data DescribeIamInstanceProfileAssociationsResponse = DescribeIamInstanceProfileAssociationsResponse'
+  { -- | Information about the IAM instance profile associations.
+    iamInstanceProfileAssociations :: Prelude.Maybe [IamInstanceProfileAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIamInstanceProfileAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamInstanceProfileAssociations', 'describeIamInstanceProfileAssociationsResponse_iamInstanceProfileAssociations' - Information about the IAM instance profile associations.
+--
+-- 'nextToken', 'describeIamInstanceProfileAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeIamInstanceProfileAssociationsResponse_httpStatus' - The response's http status code.
+newDescribeIamInstanceProfileAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIamInstanceProfileAssociationsResponse
+newDescribeIamInstanceProfileAssociationsResponse
+  pHttpStatus_ =
+    DescribeIamInstanceProfileAssociationsResponse'
+      { iamInstanceProfileAssociations =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the IAM instance profile associations.
+describeIamInstanceProfileAssociationsResponse_iamInstanceProfileAssociations :: Lens.Lens' DescribeIamInstanceProfileAssociationsResponse (Prelude.Maybe [IamInstanceProfileAssociation])
+describeIamInstanceProfileAssociationsResponse_iamInstanceProfileAssociations = Lens.lens (\DescribeIamInstanceProfileAssociationsResponse' {iamInstanceProfileAssociations} -> iamInstanceProfileAssociations) (\s@DescribeIamInstanceProfileAssociationsResponse' {} a -> s {iamInstanceProfileAssociations = a} :: DescribeIamInstanceProfileAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeIamInstanceProfileAssociationsResponse_nextToken :: Lens.Lens' DescribeIamInstanceProfileAssociationsResponse (Prelude.Maybe Prelude.Text)
+describeIamInstanceProfileAssociationsResponse_nextToken = Lens.lens (\DescribeIamInstanceProfileAssociationsResponse' {nextToken} -> nextToken) (\s@DescribeIamInstanceProfileAssociationsResponse' {} a -> s {nextToken = a} :: DescribeIamInstanceProfileAssociationsResponse)
+
+-- | The response's http status code.
+describeIamInstanceProfileAssociationsResponse_httpStatus :: Lens.Lens' DescribeIamInstanceProfileAssociationsResponse Prelude.Int
+describeIamInstanceProfileAssociationsResponse_httpStatus = Lens.lens (\DescribeIamInstanceProfileAssociationsResponse' {httpStatus} -> httpStatus) (\s@DescribeIamInstanceProfileAssociationsResponse' {} a -> s {httpStatus = a} :: DescribeIamInstanceProfileAssociationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeIamInstanceProfileAssociationsResponse
+  where
+  rnf
+    DescribeIamInstanceProfileAssociationsResponse' {..} =
+      Prelude.rnf iamInstanceProfileAssociations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIdFormat.hs b/gen/Amazonka/EC2/DescribeIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIdFormat.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the ID format settings for your resources on a per-Region
+-- basis, for example, to view which resource types are enabled for longer
+-- IDs. This request only returns information about resource types whose ID
+-- formats can be modified; it does not return information about other
+-- resource types.
+--
+-- The following resource types support longer IDs: @bundle@ |
+-- @conversion-task@ | @customer-gateway@ | @dhcp-options@ |
+-- @elastic-ip-allocation@ | @elastic-ip-association@ | @export-task@ |
+-- @flow-log@ | @image@ | @import-task@ | @instance@ | @internet-gateway@ |
+-- @network-acl@ | @network-acl-association@ | @network-interface@ |
+-- @network-interface-attachment@ | @prefix-list@ | @reservation@ |
+-- @route-table@ | @route-table-association@ | @security-group@ |
+-- @snapshot@ | @subnet@ | @subnet-cidr-block-association@ | @volume@ |
+-- @vpc@ | @vpc-cidr-block-association@ | @vpc-endpoint@ |
+-- @vpc-peering-connection@ | @vpn-connection@ | @vpn-gateway@.
+--
+-- These settings apply to the IAM user who makes the request; they do not
+-- apply to the entire Amazon Web Services account. By default, an IAM user
+-- defaults to the same settings as the root user, unless they explicitly
+-- override the settings by running the ModifyIdFormat command. Resources
+-- created with longer IDs are visible to all IAM users, regardless of
+-- these settings and provided that they have permission to use the
+-- relevant @Describe@ command for the resource type.
+module Amazonka.EC2.DescribeIdFormat
+  ( -- * Creating a Request
+    DescribeIdFormat (..),
+    newDescribeIdFormat,
+
+    -- * Request Lenses
+    describeIdFormat_resource,
+
+    -- * Destructuring the Response
+    DescribeIdFormatResponse (..),
+    newDescribeIdFormatResponse,
+
+    -- * Response Lenses
+    describeIdFormatResponse_statuses,
+    describeIdFormatResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIdFormat' smart constructor.
+data DescribeIdFormat = DescribeIdFormat'
+  { -- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+    -- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+    -- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+    -- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+    -- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+    -- @reservation@ | @route-table@ | @route-table-association@ |
+    -- @security-group@ | @snapshot@ | @subnet@ |
+    -- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+    -- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+    -- | @vpn-connection@ | @vpn-gateway@
+    resource :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resource', 'describeIdFormat_resource' - The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @reservation@ | @route-table@ | @route-table-association@ |
+-- @security-group@ | @snapshot@ | @subnet@ |
+-- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+-- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+-- | @vpn-connection@ | @vpn-gateway@
+newDescribeIdFormat ::
+  DescribeIdFormat
+newDescribeIdFormat =
+  DescribeIdFormat' {resource = Prelude.Nothing}
+
+-- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @reservation@ | @route-table@ | @route-table-association@ |
+-- @security-group@ | @snapshot@ | @subnet@ |
+-- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+-- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+-- | @vpn-connection@ | @vpn-gateway@
+describeIdFormat_resource :: Lens.Lens' DescribeIdFormat (Prelude.Maybe Prelude.Text)
+describeIdFormat_resource = Lens.lens (\DescribeIdFormat' {resource} -> resource) (\s@DescribeIdFormat' {} a -> s {resource = a} :: DescribeIdFormat)
+
+instance Core.AWSRequest DescribeIdFormat where
+  type
+    AWSResponse DescribeIdFormat =
+      DescribeIdFormatResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIdFormatResponse'
+            Prelude.<$> ( x
+                            Data..@? "statusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIdFormat where
+  hashWithSalt _salt DescribeIdFormat' {..} =
+    _salt `Prelude.hashWithSalt` resource
+
+instance Prelude.NFData DescribeIdFormat where
+  rnf DescribeIdFormat' {..} = Prelude.rnf resource
+
+instance Data.ToHeaders DescribeIdFormat where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeIdFormat where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIdFormat where
+  toQuery DescribeIdFormat' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeIdFormat" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Resource" Data.=: resource
+      ]
+
+-- | /See:/ 'newDescribeIdFormatResponse' smart constructor.
+data DescribeIdFormatResponse = DescribeIdFormatResponse'
+  { -- | Information about the ID format for the resource.
+    statuses :: Prelude.Maybe [IdFormat],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIdFormatResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statuses', 'describeIdFormatResponse_statuses' - Information about the ID format for the resource.
+--
+-- 'httpStatus', 'describeIdFormatResponse_httpStatus' - The response's http status code.
+newDescribeIdFormatResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIdFormatResponse
+newDescribeIdFormatResponse pHttpStatus_ =
+  DescribeIdFormatResponse'
+    { statuses =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the ID format for the resource.
+describeIdFormatResponse_statuses :: Lens.Lens' DescribeIdFormatResponse (Prelude.Maybe [IdFormat])
+describeIdFormatResponse_statuses = Lens.lens (\DescribeIdFormatResponse' {statuses} -> statuses) (\s@DescribeIdFormatResponse' {} a -> s {statuses = a} :: DescribeIdFormatResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeIdFormatResponse_httpStatus :: Lens.Lens' DescribeIdFormatResponse Prelude.Int
+describeIdFormatResponse_httpStatus = Lens.lens (\DescribeIdFormatResponse' {httpStatus} -> httpStatus) (\s@DescribeIdFormatResponse' {} a -> s {httpStatus = a} :: DescribeIdFormatResponse)
+
+instance Prelude.NFData DescribeIdFormatResponse where
+  rnf DescribeIdFormatResponse' {..} =
+    Prelude.rnf statuses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIdentityIdFormat.hs b/gen/Amazonka/EC2/DescribeIdentityIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIdentityIdFormat.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIdentityIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the ID format settings for resources for the specified IAM
+-- user, IAM role, or root user. For example, you can view the resource
+-- types that are enabled for longer IDs. This request only returns
+-- information about resource types whose ID formats can be modified; it
+-- does not return information about other resource types. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html Resource IDs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- The following resource types support longer IDs: @bundle@ |
+-- @conversion-task@ | @customer-gateway@ | @dhcp-options@ |
+-- @elastic-ip-allocation@ | @elastic-ip-association@ | @export-task@ |
+-- @flow-log@ | @image@ | @import-task@ | @instance@ | @internet-gateway@ |
+-- @network-acl@ | @network-acl-association@ | @network-interface@ |
+-- @network-interface-attachment@ | @prefix-list@ | @reservation@ |
+-- @route-table@ | @route-table-association@ | @security-group@ |
+-- @snapshot@ | @subnet@ | @subnet-cidr-block-association@ | @volume@ |
+-- @vpc@ | @vpc-cidr-block-association@ | @vpc-endpoint@ |
+-- @vpc-peering-connection@ | @vpn-connection@ | @vpn-gateway@.
+--
+-- These settings apply to the principal specified in the request. They do
+-- not apply to the principal that makes the request.
+module Amazonka.EC2.DescribeIdentityIdFormat
+  ( -- * Creating a Request
+    DescribeIdentityIdFormat (..),
+    newDescribeIdentityIdFormat,
+
+    -- * Request Lenses
+    describeIdentityIdFormat_resource,
+    describeIdentityIdFormat_principalArn,
+
+    -- * Destructuring the Response
+    DescribeIdentityIdFormatResponse (..),
+    newDescribeIdentityIdFormatResponse,
+
+    -- * Response Lenses
+    describeIdentityIdFormatResponse_statuses,
+    describeIdentityIdFormatResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIdentityIdFormat' smart constructor.
+data DescribeIdentityIdFormat = DescribeIdentityIdFormat'
+  { -- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+    -- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+    -- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+    -- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+    -- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+    -- @reservation@ | @route-table@ | @route-table-association@ |
+    -- @security-group@ | @snapshot@ | @subnet@ |
+    -- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+    -- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+    -- | @vpn-connection@ | @vpn-gateway@
+    resource :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the principal, which can be an IAM role, IAM user, or the
+    -- root user.
+    principalArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIdentityIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resource', 'describeIdentityIdFormat_resource' - The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @reservation@ | @route-table@ | @route-table-association@ |
+-- @security-group@ | @snapshot@ | @subnet@ |
+-- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+-- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+-- | @vpn-connection@ | @vpn-gateway@
+--
+-- 'principalArn', 'describeIdentityIdFormat_principalArn' - The ARN of the principal, which can be an IAM role, IAM user, or the
+-- root user.
+newDescribeIdentityIdFormat ::
+  -- | 'principalArn'
+  Prelude.Text ->
+  DescribeIdentityIdFormat
+newDescribeIdentityIdFormat pPrincipalArn_ =
+  DescribeIdentityIdFormat'
+    { resource =
+        Prelude.Nothing,
+      principalArn = pPrincipalArn_
+    }
+
+-- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @reservation@ | @route-table@ | @route-table-association@ |
+-- @security-group@ | @snapshot@ | @subnet@ |
+-- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+-- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+-- | @vpn-connection@ | @vpn-gateway@
+describeIdentityIdFormat_resource :: Lens.Lens' DescribeIdentityIdFormat (Prelude.Maybe Prelude.Text)
+describeIdentityIdFormat_resource = Lens.lens (\DescribeIdentityIdFormat' {resource} -> resource) (\s@DescribeIdentityIdFormat' {} a -> s {resource = a} :: DescribeIdentityIdFormat)
+
+-- | The ARN of the principal, which can be an IAM role, IAM user, or the
+-- root user.
+describeIdentityIdFormat_principalArn :: Lens.Lens' DescribeIdentityIdFormat Prelude.Text
+describeIdentityIdFormat_principalArn = Lens.lens (\DescribeIdentityIdFormat' {principalArn} -> principalArn) (\s@DescribeIdentityIdFormat' {} a -> s {principalArn = a} :: DescribeIdentityIdFormat)
+
+instance Core.AWSRequest DescribeIdentityIdFormat where
+  type
+    AWSResponse DescribeIdentityIdFormat =
+      DescribeIdentityIdFormatResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIdentityIdFormatResponse'
+            Prelude.<$> ( x
+                            Data..@? "statusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIdentityIdFormat where
+  hashWithSalt _salt DescribeIdentityIdFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` principalArn
+
+instance Prelude.NFData DescribeIdentityIdFormat where
+  rnf DescribeIdentityIdFormat' {..} =
+    Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf principalArn
+
+instance Data.ToHeaders DescribeIdentityIdFormat where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeIdentityIdFormat where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIdentityIdFormat where
+  toQuery DescribeIdentityIdFormat' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeIdentityIdFormat" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Resource" Data.=: resource,
+        "PrincipalArn" Data.=: principalArn
+      ]
+
+-- | /See:/ 'newDescribeIdentityIdFormatResponse' smart constructor.
+data DescribeIdentityIdFormatResponse = DescribeIdentityIdFormatResponse'
+  { -- | Information about the ID format for the resources.
+    statuses :: Prelude.Maybe [IdFormat],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIdentityIdFormatResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'statuses', 'describeIdentityIdFormatResponse_statuses' - Information about the ID format for the resources.
+--
+-- 'httpStatus', 'describeIdentityIdFormatResponse_httpStatus' - The response's http status code.
+newDescribeIdentityIdFormatResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIdentityIdFormatResponse
+newDescribeIdentityIdFormatResponse pHttpStatus_ =
+  DescribeIdentityIdFormatResponse'
+    { statuses =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the ID format for the resources.
+describeIdentityIdFormatResponse_statuses :: Lens.Lens' DescribeIdentityIdFormatResponse (Prelude.Maybe [IdFormat])
+describeIdentityIdFormatResponse_statuses = Lens.lens (\DescribeIdentityIdFormatResponse' {statuses} -> statuses) (\s@DescribeIdentityIdFormatResponse' {} a -> s {statuses = a} :: DescribeIdentityIdFormatResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeIdentityIdFormatResponse_httpStatus :: Lens.Lens' DescribeIdentityIdFormatResponse Prelude.Int
+describeIdentityIdFormatResponse_httpStatus = Lens.lens (\DescribeIdentityIdFormatResponse' {httpStatus} -> httpStatus) (\s@DescribeIdentityIdFormatResponse' {} a -> s {httpStatus = a} :: DescribeIdentityIdFormatResponse)
+
+instance
+  Prelude.NFData
+    DescribeIdentityIdFormatResponse
+  where
+  rnf DescribeIdentityIdFormatResponse' {..} =
+    Prelude.rnf statuses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeImageAttribute.hs b/gen/Amazonka/EC2/DescribeImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeImageAttribute.hs
@@ -0,0 +1,433 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified attribute of the specified AMI. You can specify
+-- only one attribute at a time.
+module Amazonka.EC2.DescribeImageAttribute
+  ( -- * Creating a Request
+    DescribeImageAttribute (..),
+    newDescribeImageAttribute,
+
+    -- * Request Lenses
+    describeImageAttribute_dryRun,
+    describeImageAttribute_attribute,
+    describeImageAttribute_imageId,
+
+    -- * Destructuring the Response
+    DescribeImageAttributeResponse (..),
+    newDescribeImageAttributeResponse,
+
+    -- * Response Lenses
+    describeImageAttributeResponse_blockDeviceMappings,
+    describeImageAttributeResponse_bootMode,
+    describeImageAttributeResponse_description,
+    describeImageAttributeResponse_imageId,
+    describeImageAttributeResponse_imdsSupport,
+    describeImageAttributeResponse_kernelId,
+    describeImageAttributeResponse_lastLaunchedTime,
+    describeImageAttributeResponse_launchPermissions,
+    describeImageAttributeResponse_productCodes,
+    describeImageAttributeResponse_ramdiskId,
+    describeImageAttributeResponse_sriovNetSupport,
+    describeImageAttributeResponse_tpmSupport,
+    describeImageAttributeResponse_uefiData,
+    describeImageAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeImageAttribute.
+--
+-- /See:/ 'newDescribeImageAttribute' smart constructor.
+data DescribeImageAttribute = DescribeImageAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The AMI attribute.
+    --
+    -- __Note__: The @blockDeviceMapping@ attribute is deprecated. Using this
+    -- attribute returns the @Client.AuthFailure@ error. To get information
+    -- about the block device mappings for an AMI, use the DescribeImages
+    -- action.
+    attribute :: ImageAttributeName,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeImageAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'describeImageAttribute_attribute' - The AMI attribute.
+--
+-- __Note__: The @blockDeviceMapping@ attribute is deprecated. Using this
+-- attribute returns the @Client.AuthFailure@ error. To get information
+-- about the block device mappings for an AMI, use the DescribeImages
+-- action.
+--
+-- 'imageId', 'describeImageAttribute_imageId' - The ID of the AMI.
+newDescribeImageAttribute ::
+  -- | 'attribute'
+  ImageAttributeName ->
+  -- | 'imageId'
+  Prelude.Text ->
+  DescribeImageAttribute
+newDescribeImageAttribute pAttribute_ pImageId_ =
+  DescribeImageAttribute'
+    { dryRun = Prelude.Nothing,
+      attribute = pAttribute_,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeImageAttribute_dryRun :: Lens.Lens' DescribeImageAttribute (Prelude.Maybe Prelude.Bool)
+describeImageAttribute_dryRun = Lens.lens (\DescribeImageAttribute' {dryRun} -> dryRun) (\s@DescribeImageAttribute' {} a -> s {dryRun = a} :: DescribeImageAttribute)
+
+-- | The AMI attribute.
+--
+-- __Note__: The @blockDeviceMapping@ attribute is deprecated. Using this
+-- attribute returns the @Client.AuthFailure@ error. To get information
+-- about the block device mappings for an AMI, use the DescribeImages
+-- action.
+describeImageAttribute_attribute :: Lens.Lens' DescribeImageAttribute ImageAttributeName
+describeImageAttribute_attribute = Lens.lens (\DescribeImageAttribute' {attribute} -> attribute) (\s@DescribeImageAttribute' {} a -> s {attribute = a} :: DescribeImageAttribute)
+
+-- | The ID of the AMI.
+describeImageAttribute_imageId :: Lens.Lens' DescribeImageAttribute Prelude.Text
+describeImageAttribute_imageId = Lens.lens (\DescribeImageAttribute' {imageId} -> imageId) (\s@DescribeImageAttribute' {} a -> s {imageId = a} :: DescribeImageAttribute)
+
+instance Core.AWSRequest DescribeImageAttribute where
+  type
+    AWSResponse DescribeImageAttribute =
+      DescribeImageAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeImageAttributeResponse'
+            Prelude.<$> ( x
+                            Data..@? "blockDeviceMapping"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "bootMode")
+            Prelude.<*> (x Data..@? "description")
+            Prelude.<*> (x Data..@? "imageId")
+            Prelude.<*> (x Data..@? "imdsSupport")
+            Prelude.<*> (x Data..@? "kernel")
+            Prelude.<*> (x Data..@? "lastLaunchedTime")
+            Prelude.<*> ( x
+                            Data..@? "launchPermission"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "productCodes"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "ramdisk")
+            Prelude.<*> (x Data..@? "sriovNetSupport")
+            Prelude.<*> (x Data..@? "tpmSupport")
+            Prelude.<*> (x Data..@? "uefiData")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImageAttribute where
+  hashWithSalt _salt DescribeImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData DescribeImageAttribute where
+  rnf DescribeImageAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders DescribeImageAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeImageAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImageAttribute where
+  toQuery DescribeImageAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeImageAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | Describes an image attribute.
+--
+-- /See:/ 'newDescribeImageAttributeResponse' smart constructor.
+data DescribeImageAttributeResponse = DescribeImageAttributeResponse'
+  { -- | The block device mapping entries.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | The boot mode.
+    bootMode :: Prelude.Maybe AttributeValue,
+    -- | A description for the AMI.
+    description :: Prelude.Maybe AttributeValue,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | If @v2.0@, it indicates that IMDSv2 is specified in the AMI. Instances
+    -- launched from this AMI will have @HttpTokens@ automatically set to
+    -- @required@ so that, by default, the instance requires that IMDSv2 is
+    -- used when requesting instance metadata. In addition,
+    -- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+    -- in the /Amazon EC2 User Guide/.
+    imdsSupport :: Prelude.Maybe AttributeValue,
+    -- | The kernel ID.
+    kernelId :: Prelude.Maybe AttributeValue,
+    -- | The date and time, in
+    -- <http://www.iso.org/iso/iso8601 ISO 8601 date-time format>, when the AMI
+    -- was last used to launch an EC2 instance. When the AMI is used to launch
+    -- an instance, there is a 24-hour delay before that usage is reported.
+    --
+    -- @lastLaunchedTime@ data is available starting April 2017.
+    lastLaunchedTime :: Prelude.Maybe AttributeValue,
+    -- | The launch permissions.
+    launchPermissions :: Prelude.Maybe [LaunchPermission],
+    -- | The product codes.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | The RAM disk ID.
+    ramdiskId :: Prelude.Maybe AttributeValue,
+    -- | Indicates whether enhanced networking with the Intel 82599 Virtual
+    -- Function interface is enabled.
+    sriovNetSupport :: Prelude.Maybe AttributeValue,
+    -- | If the image is configured for NitroTPM support, the value is @v2.0@.
+    tpmSupport :: Prelude.Maybe AttributeValue,
+    -- | Base64 representation of the non-volatile UEFI variable store. To
+    -- retrieve the UEFI data, use the
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData GetInstanceUefiData>
+    -- command. You can inspect and modify the UEFI data by using the
+    -- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+    -- GitHub. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+    -- in the /Amazon EC2 User Guide/.
+    uefiData :: Prelude.Maybe AttributeValue,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImageAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'describeImageAttributeResponse_blockDeviceMappings' - The block device mapping entries.
+--
+-- 'bootMode', 'describeImageAttributeResponse_bootMode' - The boot mode.
+--
+-- 'description', 'describeImageAttributeResponse_description' - A description for the AMI.
+--
+-- 'imageId', 'describeImageAttributeResponse_imageId' - The ID of the AMI.
+--
+-- 'imdsSupport', 'describeImageAttributeResponse_imdsSupport' - If @v2.0@, it indicates that IMDSv2 is specified in the AMI. Instances
+-- launched from this AMI will have @HttpTokens@ automatically set to
+-- @required@ so that, by default, the instance requires that IMDSv2 is
+-- used when requesting instance metadata. In addition,
+-- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'kernelId', 'describeImageAttributeResponse_kernelId' - The kernel ID.
+--
+-- 'lastLaunchedTime', 'describeImageAttributeResponse_lastLaunchedTime' - The date and time, in
+-- <http://www.iso.org/iso/iso8601 ISO 8601 date-time format>, when the AMI
+-- was last used to launch an EC2 instance. When the AMI is used to launch
+-- an instance, there is a 24-hour delay before that usage is reported.
+--
+-- @lastLaunchedTime@ data is available starting April 2017.
+--
+-- 'launchPermissions', 'describeImageAttributeResponse_launchPermissions' - The launch permissions.
+--
+-- 'productCodes', 'describeImageAttributeResponse_productCodes' - The product codes.
+--
+-- 'ramdiskId', 'describeImageAttributeResponse_ramdiskId' - The RAM disk ID.
+--
+-- 'sriovNetSupport', 'describeImageAttributeResponse_sriovNetSupport' - Indicates whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+--
+-- 'tpmSupport', 'describeImageAttributeResponse_tpmSupport' - If the image is configured for NitroTPM support, the value is @v2.0@.
+--
+-- 'uefiData', 'describeImageAttributeResponse_uefiData' - Base64 representation of the non-volatile UEFI variable store. To
+-- retrieve the UEFI data, use the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData GetInstanceUefiData>
+-- command. You can inspect and modify the UEFI data by using the
+-- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+-- GitHub. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'httpStatus', 'describeImageAttributeResponse_httpStatus' - The response's http status code.
+newDescribeImageAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImageAttributeResponse
+newDescribeImageAttributeResponse pHttpStatus_ =
+  DescribeImageAttributeResponse'
+    { blockDeviceMappings =
+        Prelude.Nothing,
+      bootMode = Prelude.Nothing,
+      description = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      imdsSupport = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      lastLaunchedTime = Prelude.Nothing,
+      launchPermissions = Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      sriovNetSupport = Prelude.Nothing,
+      tpmSupport = Prelude.Nothing,
+      uefiData = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The block device mapping entries.
+describeImageAttributeResponse_blockDeviceMappings :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe [BlockDeviceMapping])
+describeImageAttributeResponse_blockDeviceMappings = Lens.lens (\DescribeImageAttributeResponse' {blockDeviceMappings} -> blockDeviceMappings) (\s@DescribeImageAttributeResponse' {} a -> s {blockDeviceMappings = a} :: DescribeImageAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The boot mode.
+describeImageAttributeResponse_bootMode :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_bootMode = Lens.lens (\DescribeImageAttributeResponse' {bootMode} -> bootMode) (\s@DescribeImageAttributeResponse' {} a -> s {bootMode = a} :: DescribeImageAttributeResponse)
+
+-- | A description for the AMI.
+describeImageAttributeResponse_description :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_description = Lens.lens (\DescribeImageAttributeResponse' {description} -> description) (\s@DescribeImageAttributeResponse' {} a -> s {description = a} :: DescribeImageAttributeResponse)
+
+-- | The ID of the AMI.
+describeImageAttributeResponse_imageId :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe Prelude.Text)
+describeImageAttributeResponse_imageId = Lens.lens (\DescribeImageAttributeResponse' {imageId} -> imageId) (\s@DescribeImageAttributeResponse' {} a -> s {imageId = a} :: DescribeImageAttributeResponse)
+
+-- | If @v2.0@, it indicates that IMDSv2 is specified in the AMI. Instances
+-- launched from this AMI will have @HttpTokens@ automatically set to
+-- @required@ so that, by default, the instance requires that IMDSv2 is
+-- used when requesting instance metadata. In addition,
+-- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+-- in the /Amazon EC2 User Guide/.
+describeImageAttributeResponse_imdsSupport :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_imdsSupport = Lens.lens (\DescribeImageAttributeResponse' {imdsSupport} -> imdsSupport) (\s@DescribeImageAttributeResponse' {} a -> s {imdsSupport = a} :: DescribeImageAttributeResponse)
+
+-- | The kernel ID.
+describeImageAttributeResponse_kernelId :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_kernelId = Lens.lens (\DescribeImageAttributeResponse' {kernelId} -> kernelId) (\s@DescribeImageAttributeResponse' {} a -> s {kernelId = a} :: DescribeImageAttributeResponse)
+
+-- | The date and time, in
+-- <http://www.iso.org/iso/iso8601 ISO 8601 date-time format>, when the AMI
+-- was last used to launch an EC2 instance. When the AMI is used to launch
+-- an instance, there is a 24-hour delay before that usage is reported.
+--
+-- @lastLaunchedTime@ data is available starting April 2017.
+describeImageAttributeResponse_lastLaunchedTime :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_lastLaunchedTime = Lens.lens (\DescribeImageAttributeResponse' {lastLaunchedTime} -> lastLaunchedTime) (\s@DescribeImageAttributeResponse' {} a -> s {lastLaunchedTime = a} :: DescribeImageAttributeResponse)
+
+-- | The launch permissions.
+describeImageAttributeResponse_launchPermissions :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe [LaunchPermission])
+describeImageAttributeResponse_launchPermissions = Lens.lens (\DescribeImageAttributeResponse' {launchPermissions} -> launchPermissions) (\s@DescribeImageAttributeResponse' {} a -> s {launchPermissions = a} :: DescribeImageAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The product codes.
+describeImageAttributeResponse_productCodes :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe [ProductCode])
+describeImageAttributeResponse_productCodes = Lens.lens (\DescribeImageAttributeResponse' {productCodes} -> productCodes) (\s@DescribeImageAttributeResponse' {} a -> s {productCodes = a} :: DescribeImageAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The RAM disk ID.
+describeImageAttributeResponse_ramdiskId :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_ramdiskId = Lens.lens (\DescribeImageAttributeResponse' {ramdiskId} -> ramdiskId) (\s@DescribeImageAttributeResponse' {} a -> s {ramdiskId = a} :: DescribeImageAttributeResponse)
+
+-- | Indicates whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+describeImageAttributeResponse_sriovNetSupport :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_sriovNetSupport = Lens.lens (\DescribeImageAttributeResponse' {sriovNetSupport} -> sriovNetSupport) (\s@DescribeImageAttributeResponse' {} a -> s {sriovNetSupport = a} :: DescribeImageAttributeResponse)
+
+-- | If the image is configured for NitroTPM support, the value is @v2.0@.
+describeImageAttributeResponse_tpmSupport :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_tpmSupport = Lens.lens (\DescribeImageAttributeResponse' {tpmSupport} -> tpmSupport) (\s@DescribeImageAttributeResponse' {} a -> s {tpmSupport = a} :: DescribeImageAttributeResponse)
+
+-- | Base64 representation of the non-volatile UEFI variable store. To
+-- retrieve the UEFI data, use the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData GetInstanceUefiData>
+-- command. You can inspect and modify the UEFI data by using the
+-- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+-- GitHub. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+-- in the /Amazon EC2 User Guide/.
+describeImageAttributeResponse_uefiData :: Lens.Lens' DescribeImageAttributeResponse (Prelude.Maybe AttributeValue)
+describeImageAttributeResponse_uefiData = Lens.lens (\DescribeImageAttributeResponse' {uefiData} -> uefiData) (\s@DescribeImageAttributeResponse' {} a -> s {uefiData = a} :: DescribeImageAttributeResponse)
+
+-- | The response's http status code.
+describeImageAttributeResponse_httpStatus :: Lens.Lens' DescribeImageAttributeResponse Prelude.Int
+describeImageAttributeResponse_httpStatus = Lens.lens (\DescribeImageAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeImageAttributeResponse' {} a -> s {httpStatus = a} :: DescribeImageAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeImageAttributeResponse
+  where
+  rnf DescribeImageAttributeResponse' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf imdsSupport
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf lastLaunchedTime
+      `Prelude.seq` Prelude.rnf launchPermissions
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf sriovNetSupport
+      `Prelude.seq` Prelude.rnf tpmSupport
+      `Prelude.seq` Prelude.rnf uefiData
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeImages.hs b/gen/Amazonka/EC2/DescribeImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeImages.hs
@@ -0,0 +1,680 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified images (AMIs, AKIs, and ARIs) available to you
+-- or all of the images available to you.
+--
+-- The images available to you include public images, private images that
+-- you own, and private images owned by other Amazon Web Services accounts
+-- for which you have explicit launch permissions.
+--
+-- Recently deregistered images appear in the returned results for a short
+-- interval and then return empty results. After all instances that
+-- reference a deregistered AMI are terminated, specifying the ID of the
+-- image will eventually return an error indicating that the AMI ID cannot
+-- be found.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeImages
+  ( -- * Creating a Request
+    DescribeImages (..),
+    newDescribeImages,
+
+    -- * Request Lenses
+    describeImages_dryRun,
+    describeImages_executableUsers,
+    describeImages_filters,
+    describeImages_imageIds,
+    describeImages_includeDeprecated,
+    describeImages_maxResults,
+    describeImages_nextToken,
+    describeImages_owners,
+
+    -- * Destructuring the Response
+    DescribeImagesResponse (..),
+    newDescribeImagesResponse,
+
+    -- * Response Lenses
+    describeImagesResponse_images,
+    describeImagesResponse_nextToken,
+    describeImagesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImages' smart constructor.
+data DescribeImages = DescribeImages'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Scopes the images by users with explicit launch permissions. Specify an
+    -- Amazon Web Services account ID, @self@ (the sender of the request), or
+    -- @all@ (public AMIs).
+    --
+    -- -   If you specify an Amazon Web Services account ID that is not your
+    --     own, only AMIs shared with that specific Amazon Web Services account
+    --     ID are returned. However, AMIs that are shared with the account’s
+    --     organization or organizational unit (OU) are not returned.
+    --
+    -- -   If you specify @self@ or your own Amazon Web Services account ID,
+    --     AMIs shared with your account are returned. In addition, AMIs that
+    --     are shared with the organization or OU of which you are member are
+    --     also returned.
+    --
+    -- -   If you specify @all@, all public AMIs are returned.
+    executableUsers :: Prelude.Maybe [Prelude.Text],
+    -- | The filters.
+    --
+    -- -   @architecture@ - The image architecture (@i386@ | @x86_64@ |
+    --     @arm64@).
+    --
+    -- -   @block-device-mapping.delete-on-termination@ - A Boolean value that
+    --     indicates whether the Amazon EBS volume is deleted on instance
+    --     termination.
+    --
+    -- -   @block-device-mapping.device-name@ - The device name specified in
+    --     the block device mapping (for example, @\/dev\/sdh@ or @xvdh@).
+    --
+    -- -   @block-device-mapping.snapshot-id@ - The ID of the snapshot used for
+    --     the Amazon EBS volume.
+    --
+    -- -   @block-device-mapping.volume-size@ - The volume size of the Amazon
+    --     EBS volume, in GiB.
+    --
+    -- -   @block-device-mapping.volume-type@ - The volume type of the Amazon
+    --     EBS volume (@io1@ | @io2@ | @gp2@ | @gp3@ | @sc1 @| @st1@ |
+    --     @standard@).
+    --
+    -- -   @block-device-mapping.encrypted@ - A Boolean that indicates whether
+    --     the Amazon EBS volume is encrypted.
+    --
+    -- -   @creation-date@ - The time when the image was created, in the ISO
+    --     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
+    --     example, @2021-09-29T11:04:43.305Z@. You can use a wildcard (@*@),
+    --     for example, @2021-09-29T*@, which matches an entire day.
+    --
+    -- -   @description@ - The description of the image (provided during image
+    --     creation).
+    --
+    -- -   @ena-support@ - A Boolean that indicates whether enhanced networking
+    --     with ENA is enabled.
+    --
+    -- -   @hypervisor@ - The hypervisor type (@ovm@ | @xen@).
+    --
+    -- -   @image-id@ - The ID of the image.
+    --
+    -- -   @image-type@ - The image type (@machine@ | @kernel@ | @ramdisk@).
+    --
+    -- -   @is-public@ - A Boolean that indicates whether the image is public.
+    --
+    -- -   @kernel-id@ - The kernel ID.
+    --
+    -- -   @manifest-location@ - The location of the image manifest.
+    --
+    -- -   @name@ - The name of the AMI (provided during image creation).
+    --
+    -- -   @owner-alias@ - The owner alias (@amazon@ | @aws-marketplace@). The
+    --     valid aliases are defined in an Amazon-maintained list. This is not
+    --     the Amazon Web Services account alias that can be set using the IAM
+    --     console. We recommend that you use the __Owner__ request parameter
+    --     instead of this filter.
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the owner. We
+    --     recommend that you use the __Owner__ request parameter instead of
+    --     this filter.
+    --
+    -- -   @platform@ - The platform. The only supported value is @windows@.
+    --
+    -- -   @product-code@ - The product code.
+    --
+    -- -   @product-code.type@ - The type of the product code (@marketplace@).
+    --
+    -- -   @ramdisk-id@ - The RAM disk ID.
+    --
+    -- -   @root-device-name@ - The device name of the root device volume (for
+    --     example, @\/dev\/sda1@).
+    --
+    -- -   @root-device-type@ - The type of the root device volume (@ebs@ |
+    --     @instance-store@).
+    --
+    -- -   @state@ - The state of the image (@available@ | @pending@ |
+    --     @failed@).
+    --
+    -- -   @state-reason-code@ - The reason code for the state change.
+    --
+    -- -   @state-reason-message@ - The message for the state change.
+    --
+    -- -   @sriov-net-support@ - A value of @simple@ indicates that enhanced
+    --     networking with the Intel 82599 VF interface is enabled.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @virtualization-type@ - The virtualization type (@paravirtual@ |
+    --     @hvm@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The image IDs.
+    --
+    -- Default: Describes all images available to you.
+    imageIds :: Prelude.Maybe [Prelude.Text],
+    -- | Specifies whether to include deprecated AMIs.
+    --
+    -- Default: No deprecated AMIs are included in the response.
+    --
+    -- If you are the AMI owner, all deprecated AMIs appear in the response
+    -- regardless of what you specify for this parameter.
+    includeDeprecated :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Scopes the results to images with the specified owners. You can specify
+    -- a combination of Amazon Web Services account IDs, @self@, @amazon@, and
+    -- @aws-marketplace@. If you omit this parameter, the results include all
+    -- images for which you have launch permissions, regardless of ownership.
+    owners :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeImages_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'executableUsers', 'describeImages_executableUsers' - Scopes the images by users with explicit launch permissions. Specify an
+-- Amazon Web Services account ID, @self@ (the sender of the request), or
+-- @all@ (public AMIs).
+--
+-- -   If you specify an Amazon Web Services account ID that is not your
+--     own, only AMIs shared with that specific Amazon Web Services account
+--     ID are returned. However, AMIs that are shared with the account’s
+--     organization or organizational unit (OU) are not returned.
+--
+-- -   If you specify @self@ or your own Amazon Web Services account ID,
+--     AMIs shared with your account are returned. In addition, AMIs that
+--     are shared with the organization or OU of which you are member are
+--     also returned.
+--
+-- -   If you specify @all@, all public AMIs are returned.
+--
+-- 'filters', 'describeImages_filters' - The filters.
+--
+-- -   @architecture@ - The image architecture (@i386@ | @x86_64@ |
+--     @arm64@).
+--
+-- -   @block-device-mapping.delete-on-termination@ - A Boolean value that
+--     indicates whether the Amazon EBS volume is deleted on instance
+--     termination.
+--
+-- -   @block-device-mapping.device-name@ - The device name specified in
+--     the block device mapping (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- -   @block-device-mapping.snapshot-id@ - The ID of the snapshot used for
+--     the Amazon EBS volume.
+--
+-- -   @block-device-mapping.volume-size@ - The volume size of the Amazon
+--     EBS volume, in GiB.
+--
+-- -   @block-device-mapping.volume-type@ - The volume type of the Amazon
+--     EBS volume (@io1@ | @io2@ | @gp2@ | @gp3@ | @sc1 @| @st1@ |
+--     @standard@).
+--
+-- -   @block-device-mapping.encrypted@ - A Boolean that indicates whether
+--     the Amazon EBS volume is encrypted.
+--
+-- -   @creation-date@ - The time when the image was created, in the ISO
+--     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
+--     example, @2021-09-29T11:04:43.305Z@. You can use a wildcard (@*@),
+--     for example, @2021-09-29T*@, which matches an entire day.
+--
+-- -   @description@ - The description of the image (provided during image
+--     creation).
+--
+-- -   @ena-support@ - A Boolean that indicates whether enhanced networking
+--     with ENA is enabled.
+--
+-- -   @hypervisor@ - The hypervisor type (@ovm@ | @xen@).
+--
+-- -   @image-id@ - The ID of the image.
+--
+-- -   @image-type@ - The image type (@machine@ | @kernel@ | @ramdisk@).
+--
+-- -   @is-public@ - A Boolean that indicates whether the image is public.
+--
+-- -   @kernel-id@ - The kernel ID.
+--
+-- -   @manifest-location@ - The location of the image manifest.
+--
+-- -   @name@ - The name of the AMI (provided during image creation).
+--
+-- -   @owner-alias@ - The owner alias (@amazon@ | @aws-marketplace@). The
+--     valid aliases are defined in an Amazon-maintained list. This is not
+--     the Amazon Web Services account alias that can be set using the IAM
+--     console. We recommend that you use the __Owner__ request parameter
+--     instead of this filter.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner. We
+--     recommend that you use the __Owner__ request parameter instead of
+--     this filter.
+--
+-- -   @platform@ - The platform. The only supported value is @windows@.
+--
+-- -   @product-code@ - The product code.
+--
+-- -   @product-code.type@ - The type of the product code (@marketplace@).
+--
+-- -   @ramdisk-id@ - The RAM disk ID.
+--
+-- -   @root-device-name@ - The device name of the root device volume (for
+--     example, @\/dev\/sda1@).
+--
+-- -   @root-device-type@ - The type of the root device volume (@ebs@ |
+--     @instance-store@).
+--
+-- -   @state@ - The state of the image (@available@ | @pending@ |
+--     @failed@).
+--
+-- -   @state-reason-code@ - The reason code for the state change.
+--
+-- -   @state-reason-message@ - The message for the state change.
+--
+-- -   @sriov-net-support@ - A value of @simple@ indicates that enhanced
+--     networking with the Intel 82599 VF interface is enabled.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @virtualization-type@ - The virtualization type (@paravirtual@ |
+--     @hvm@).
+--
+-- 'imageIds', 'describeImages_imageIds' - The image IDs.
+--
+-- Default: Describes all images available to you.
+--
+-- 'includeDeprecated', 'describeImages_includeDeprecated' - Specifies whether to include deprecated AMIs.
+--
+-- Default: No deprecated AMIs are included in the response.
+--
+-- If you are the AMI owner, all deprecated AMIs appear in the response
+-- regardless of what you specify for this parameter.
+--
+-- 'maxResults', 'describeImages_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeImages_nextToken' - The token for the next page of results.
+--
+-- 'owners', 'describeImages_owners' - Scopes the results to images with the specified owners. You can specify
+-- a combination of Amazon Web Services account IDs, @self@, @amazon@, and
+-- @aws-marketplace@. If you omit this parameter, the results include all
+-- images for which you have launch permissions, regardless of ownership.
+newDescribeImages ::
+  DescribeImages
+newDescribeImages =
+  DescribeImages'
+    { dryRun = Prelude.Nothing,
+      executableUsers = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      imageIds = Prelude.Nothing,
+      includeDeprecated = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      owners = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeImages_dryRun :: Lens.Lens' DescribeImages (Prelude.Maybe Prelude.Bool)
+describeImages_dryRun = Lens.lens (\DescribeImages' {dryRun} -> dryRun) (\s@DescribeImages' {} a -> s {dryRun = a} :: DescribeImages)
+
+-- | Scopes the images by users with explicit launch permissions. Specify an
+-- Amazon Web Services account ID, @self@ (the sender of the request), or
+-- @all@ (public AMIs).
+--
+-- -   If you specify an Amazon Web Services account ID that is not your
+--     own, only AMIs shared with that specific Amazon Web Services account
+--     ID are returned. However, AMIs that are shared with the account’s
+--     organization or organizational unit (OU) are not returned.
+--
+-- -   If you specify @self@ or your own Amazon Web Services account ID,
+--     AMIs shared with your account are returned. In addition, AMIs that
+--     are shared with the organization or OU of which you are member are
+--     also returned.
+--
+-- -   If you specify @all@, all public AMIs are returned.
+describeImages_executableUsers :: Lens.Lens' DescribeImages (Prelude.Maybe [Prelude.Text])
+describeImages_executableUsers = Lens.lens (\DescribeImages' {executableUsers} -> executableUsers) (\s@DescribeImages' {} a -> s {executableUsers = a} :: DescribeImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The filters.
+--
+-- -   @architecture@ - The image architecture (@i386@ | @x86_64@ |
+--     @arm64@).
+--
+-- -   @block-device-mapping.delete-on-termination@ - A Boolean value that
+--     indicates whether the Amazon EBS volume is deleted on instance
+--     termination.
+--
+-- -   @block-device-mapping.device-name@ - The device name specified in
+--     the block device mapping (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- -   @block-device-mapping.snapshot-id@ - The ID of the snapshot used for
+--     the Amazon EBS volume.
+--
+-- -   @block-device-mapping.volume-size@ - The volume size of the Amazon
+--     EBS volume, in GiB.
+--
+-- -   @block-device-mapping.volume-type@ - The volume type of the Amazon
+--     EBS volume (@io1@ | @io2@ | @gp2@ | @gp3@ | @sc1 @| @st1@ |
+--     @standard@).
+--
+-- -   @block-device-mapping.encrypted@ - A Boolean that indicates whether
+--     the Amazon EBS volume is encrypted.
+--
+-- -   @creation-date@ - The time when the image was created, in the ISO
+--     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
+--     example, @2021-09-29T11:04:43.305Z@. You can use a wildcard (@*@),
+--     for example, @2021-09-29T*@, which matches an entire day.
+--
+-- -   @description@ - The description of the image (provided during image
+--     creation).
+--
+-- -   @ena-support@ - A Boolean that indicates whether enhanced networking
+--     with ENA is enabled.
+--
+-- -   @hypervisor@ - The hypervisor type (@ovm@ | @xen@).
+--
+-- -   @image-id@ - The ID of the image.
+--
+-- -   @image-type@ - The image type (@machine@ | @kernel@ | @ramdisk@).
+--
+-- -   @is-public@ - A Boolean that indicates whether the image is public.
+--
+-- -   @kernel-id@ - The kernel ID.
+--
+-- -   @manifest-location@ - The location of the image manifest.
+--
+-- -   @name@ - The name of the AMI (provided during image creation).
+--
+-- -   @owner-alias@ - The owner alias (@amazon@ | @aws-marketplace@). The
+--     valid aliases are defined in an Amazon-maintained list. This is not
+--     the Amazon Web Services account alias that can be set using the IAM
+--     console. We recommend that you use the __Owner__ request parameter
+--     instead of this filter.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner. We
+--     recommend that you use the __Owner__ request parameter instead of
+--     this filter.
+--
+-- -   @platform@ - The platform. The only supported value is @windows@.
+--
+-- -   @product-code@ - The product code.
+--
+-- -   @product-code.type@ - The type of the product code (@marketplace@).
+--
+-- -   @ramdisk-id@ - The RAM disk ID.
+--
+-- -   @root-device-name@ - The device name of the root device volume (for
+--     example, @\/dev\/sda1@).
+--
+-- -   @root-device-type@ - The type of the root device volume (@ebs@ |
+--     @instance-store@).
+--
+-- -   @state@ - The state of the image (@available@ | @pending@ |
+--     @failed@).
+--
+-- -   @state-reason-code@ - The reason code for the state change.
+--
+-- -   @state-reason-message@ - The message for the state change.
+--
+-- -   @sriov-net-support@ - A value of @simple@ indicates that enhanced
+--     networking with the Intel 82599 VF interface is enabled.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @virtualization-type@ - The virtualization type (@paravirtual@ |
+--     @hvm@).
+describeImages_filters :: Lens.Lens' DescribeImages (Prelude.Maybe [Filter])
+describeImages_filters = Lens.lens (\DescribeImages' {filters} -> filters) (\s@DescribeImages' {} a -> s {filters = a} :: DescribeImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The image IDs.
+--
+-- Default: Describes all images available to you.
+describeImages_imageIds :: Lens.Lens' DescribeImages (Prelude.Maybe [Prelude.Text])
+describeImages_imageIds = Lens.lens (\DescribeImages' {imageIds} -> imageIds) (\s@DescribeImages' {} a -> s {imageIds = a} :: DescribeImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether to include deprecated AMIs.
+--
+-- Default: No deprecated AMIs are included in the response.
+--
+-- If you are the AMI owner, all deprecated AMIs appear in the response
+-- regardless of what you specify for this parameter.
+describeImages_includeDeprecated :: Lens.Lens' DescribeImages (Prelude.Maybe Prelude.Bool)
+describeImages_includeDeprecated = Lens.lens (\DescribeImages' {includeDeprecated} -> includeDeprecated) (\s@DescribeImages' {} a -> s {includeDeprecated = a} :: DescribeImages)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeImages_maxResults :: Lens.Lens' DescribeImages (Prelude.Maybe Prelude.Int)
+describeImages_maxResults = Lens.lens (\DescribeImages' {maxResults} -> maxResults) (\s@DescribeImages' {} a -> s {maxResults = a} :: DescribeImages)
+
+-- | The token for the next page of results.
+describeImages_nextToken :: Lens.Lens' DescribeImages (Prelude.Maybe Prelude.Text)
+describeImages_nextToken = Lens.lens (\DescribeImages' {nextToken} -> nextToken) (\s@DescribeImages' {} a -> s {nextToken = a} :: DescribeImages)
+
+-- | Scopes the results to images with the specified owners. You can specify
+-- a combination of Amazon Web Services account IDs, @self@, @amazon@, and
+-- @aws-marketplace@. If you omit this parameter, the results include all
+-- images for which you have launch permissions, regardless of ownership.
+describeImages_owners :: Lens.Lens' DescribeImages (Prelude.Maybe [Prelude.Text])
+describeImages_owners = Lens.lens (\DescribeImages' {owners} -> owners) (\s@DescribeImages' {} a -> s {owners = a} :: DescribeImages) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeImagesResponse_images
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeImages_nextToken
+          Lens..~ rs
+          Lens.^? describeImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeImages where
+  type
+    AWSResponse DescribeImages =
+      DescribeImagesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeImagesResponse'
+            Prelude.<$> ( x
+                            Data..@? "imagesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImages where
+  hashWithSalt _salt DescribeImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` executableUsers
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` imageIds
+      `Prelude.hashWithSalt` includeDeprecated
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` owners
+
+instance Prelude.NFData DescribeImages where
+  rnf DescribeImages' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf executableUsers
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf imageIds
+      `Prelude.seq` Prelude.rnf includeDeprecated
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf owners
+
+instance Data.ToHeaders DescribeImages where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeImages where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImages where
+  toQuery DescribeImages' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeImages" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "ExecutableBy"
+              Prelude.<$> executableUsers
+          ),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "ImageId" Prelude.<$> imageIds),
+        "IncludeDeprecated" Data.=: includeDeprecated,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "Owner" Prelude.<$> owners)
+      ]
+
+-- | /See:/ 'newDescribeImagesResponse' smart constructor.
+data DescribeImagesResponse = DescribeImagesResponse'
+  { -- | Information about the images.
+    images :: Prelude.Maybe [Image],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'images', 'describeImagesResponse_images' - Information about the images.
+--
+-- 'nextToken', 'describeImagesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeImagesResponse_httpStatus' - The response's http status code.
+newDescribeImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImagesResponse
+newDescribeImagesResponse pHttpStatus_ =
+  DescribeImagesResponse'
+    { images = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the images.
+describeImagesResponse_images :: Lens.Lens' DescribeImagesResponse (Prelude.Maybe [Image])
+describeImagesResponse_images = Lens.lens (\DescribeImagesResponse' {images} -> images) (\s@DescribeImagesResponse' {} a -> s {images = a} :: DescribeImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeImagesResponse_nextToken :: Lens.Lens' DescribeImagesResponse (Prelude.Maybe Prelude.Text)
+describeImagesResponse_nextToken = Lens.lens (\DescribeImagesResponse' {nextToken} -> nextToken) (\s@DescribeImagesResponse' {} a -> s {nextToken = a} :: DescribeImagesResponse)
+
+-- | The response's http status code.
+describeImagesResponse_httpStatus :: Lens.Lens' DescribeImagesResponse Prelude.Int
+describeImagesResponse_httpStatus = Lens.lens (\DescribeImagesResponse' {httpStatus} -> httpStatus) (\s@DescribeImagesResponse' {} a -> s {httpStatus = a} :: DescribeImagesResponse)
+
+instance Prelude.NFData DescribeImagesResponse where
+  rnf DescribeImagesResponse' {..} =
+    Prelude.rnf images
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeImportImageTasks.hs b/gen/Amazonka/EC2/DescribeImportImageTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeImportImageTasks.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeImportImageTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Displays details about an import virtual machine or import snapshot
+-- tasks that are already created.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeImportImageTasks
+  ( -- * Creating a Request
+    DescribeImportImageTasks (..),
+    newDescribeImportImageTasks,
+
+    -- * Request Lenses
+    describeImportImageTasks_dryRun,
+    describeImportImageTasks_filters,
+    describeImportImageTasks_importTaskIds,
+    describeImportImageTasks_maxResults,
+    describeImportImageTasks_nextToken,
+
+    -- * Destructuring the Response
+    DescribeImportImageTasksResponse (..),
+    newDescribeImportImageTasksResponse,
+
+    -- * Response Lenses
+    describeImportImageTasksResponse_importImageTasks,
+    describeImportImageTasksResponse_nextToken,
+    describeImportImageTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImportImageTasks' smart constructor.
+data DescribeImportImageTasks = DescribeImportImageTasks'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Filter tasks using the @task-state@ filter and one of the following
+    -- values: @active@, @completed@, @deleting@, or @deleted@.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the import image tasks.
+    importTaskIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | A token that indicates the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImportImageTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeImportImageTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeImportImageTasks_filters' - Filter tasks using the @task-state@ filter and one of the following
+-- values: @active@, @completed@, @deleting@, or @deleted@.
+--
+-- 'importTaskIds', 'describeImportImageTasks_importTaskIds' - The IDs of the import image tasks.
+--
+-- 'maxResults', 'describeImportImageTasks_maxResults' - The maximum number of results to return in a single call.
+--
+-- 'nextToken', 'describeImportImageTasks_nextToken' - A token that indicates the next page of results.
+newDescribeImportImageTasks ::
+  DescribeImportImageTasks
+newDescribeImportImageTasks =
+  DescribeImportImageTasks'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      importTaskIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeImportImageTasks_dryRun :: Lens.Lens' DescribeImportImageTasks (Prelude.Maybe Prelude.Bool)
+describeImportImageTasks_dryRun = Lens.lens (\DescribeImportImageTasks' {dryRun} -> dryRun) (\s@DescribeImportImageTasks' {} a -> s {dryRun = a} :: DescribeImportImageTasks)
+
+-- | Filter tasks using the @task-state@ filter and one of the following
+-- values: @active@, @completed@, @deleting@, or @deleted@.
+describeImportImageTasks_filters :: Lens.Lens' DescribeImportImageTasks (Prelude.Maybe [Filter])
+describeImportImageTasks_filters = Lens.lens (\DescribeImportImageTasks' {filters} -> filters) (\s@DescribeImportImageTasks' {} a -> s {filters = a} :: DescribeImportImageTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the import image tasks.
+describeImportImageTasks_importTaskIds :: Lens.Lens' DescribeImportImageTasks (Prelude.Maybe [Prelude.Text])
+describeImportImageTasks_importTaskIds = Lens.lens (\DescribeImportImageTasks' {importTaskIds} -> importTaskIds) (\s@DescribeImportImageTasks' {} a -> s {importTaskIds = a} :: DescribeImportImageTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call.
+describeImportImageTasks_maxResults :: Lens.Lens' DescribeImportImageTasks (Prelude.Maybe Prelude.Int)
+describeImportImageTasks_maxResults = Lens.lens (\DescribeImportImageTasks' {maxResults} -> maxResults) (\s@DescribeImportImageTasks' {} a -> s {maxResults = a} :: DescribeImportImageTasks)
+
+-- | A token that indicates the next page of results.
+describeImportImageTasks_nextToken :: Lens.Lens' DescribeImportImageTasks (Prelude.Maybe Prelude.Text)
+describeImportImageTasks_nextToken = Lens.lens (\DescribeImportImageTasks' {nextToken} -> nextToken) (\s@DescribeImportImageTasks' {} a -> s {nextToken = a} :: DescribeImportImageTasks)
+
+instance Core.AWSPager DescribeImportImageTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeImportImageTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeImportImageTasksResponse_importImageTasks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeImportImageTasks_nextToken
+          Lens..~ rs
+          Lens.^? describeImportImageTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeImportImageTasks where
+  type
+    AWSResponse DescribeImportImageTasks =
+      DescribeImportImageTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeImportImageTasksResponse'
+            Prelude.<$> ( x
+                            Data..@? "importImageTaskSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImportImageTasks where
+  hashWithSalt _salt DescribeImportImageTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` importTaskIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeImportImageTasks where
+  rnf DescribeImportImageTasks' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf importTaskIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeImportImageTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeImportImageTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImportImageTasks where
+  toQuery DescribeImportImageTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeImportImageTasks" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filters" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "ImportTaskId"
+              Prelude.<$> importTaskIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeImportImageTasksResponse' smart constructor.
+data DescribeImportImageTasksResponse = DescribeImportImageTasksResponse'
+  { -- | A list of zero or more import image tasks that are currently active or
+    -- were completed or canceled in the previous 7 days.
+    importImageTasks :: Prelude.Maybe [ImportImageTask],
+    -- | The token to use to get the next page of results. This value is @null@
+    -- when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImportImageTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importImageTasks', 'describeImportImageTasksResponse_importImageTasks' - A list of zero or more import image tasks that are currently active or
+-- were completed or canceled in the previous 7 days.
+--
+-- 'nextToken', 'describeImportImageTasksResponse_nextToken' - The token to use to get the next page of results. This value is @null@
+-- when there are no more results to return.
+--
+-- 'httpStatus', 'describeImportImageTasksResponse_httpStatus' - The response's http status code.
+newDescribeImportImageTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImportImageTasksResponse
+newDescribeImportImageTasksResponse pHttpStatus_ =
+  DescribeImportImageTasksResponse'
+    { importImageTasks =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of zero or more import image tasks that are currently active or
+-- were completed or canceled in the previous 7 days.
+describeImportImageTasksResponse_importImageTasks :: Lens.Lens' DescribeImportImageTasksResponse (Prelude.Maybe [ImportImageTask])
+describeImportImageTasksResponse_importImageTasks = Lens.lens (\DescribeImportImageTasksResponse' {importImageTasks} -> importImageTasks) (\s@DescribeImportImageTasksResponse' {} a -> s {importImageTasks = a} :: DescribeImportImageTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results. This value is @null@
+-- when there are no more results to return.
+describeImportImageTasksResponse_nextToken :: Lens.Lens' DescribeImportImageTasksResponse (Prelude.Maybe Prelude.Text)
+describeImportImageTasksResponse_nextToken = Lens.lens (\DescribeImportImageTasksResponse' {nextToken} -> nextToken) (\s@DescribeImportImageTasksResponse' {} a -> s {nextToken = a} :: DescribeImportImageTasksResponse)
+
+-- | The response's http status code.
+describeImportImageTasksResponse_httpStatus :: Lens.Lens' DescribeImportImageTasksResponse Prelude.Int
+describeImportImageTasksResponse_httpStatus = Lens.lens (\DescribeImportImageTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeImportImageTasksResponse' {} a -> s {httpStatus = a} :: DescribeImportImageTasksResponse)
+
+instance
+  Prelude.NFData
+    DescribeImportImageTasksResponse
+  where
+  rnf DescribeImportImageTasksResponse' {..} =
+    Prelude.rnf importImageTasks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeImportSnapshotTasks.hs b/gen/Amazonka/EC2/DescribeImportSnapshotTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeImportSnapshotTasks.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeImportSnapshotTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your import snapshot tasks.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeImportSnapshotTasks
+  ( -- * Creating a Request
+    DescribeImportSnapshotTasks (..),
+    newDescribeImportSnapshotTasks,
+
+    -- * Request Lenses
+    describeImportSnapshotTasks_dryRun,
+    describeImportSnapshotTasks_filters,
+    describeImportSnapshotTasks_importTaskIds,
+    describeImportSnapshotTasks_maxResults,
+    describeImportSnapshotTasks_nextToken,
+
+    -- * Destructuring the Response
+    DescribeImportSnapshotTasksResponse (..),
+    newDescribeImportSnapshotTasksResponse,
+
+    -- * Response Lenses
+    describeImportSnapshotTasksResponse_importSnapshotTasks,
+    describeImportSnapshotTasksResponse_nextToken,
+    describeImportSnapshotTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImportSnapshotTasks' smart constructor.
+data DescribeImportSnapshotTasks = DescribeImportSnapshotTasks'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    filters :: Prelude.Maybe [Filter],
+    -- | A list of import snapshot task IDs.
+    importTaskIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | A token that indicates the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImportSnapshotTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeImportSnapshotTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeImportSnapshotTasks_filters' - The filters.
+--
+-- 'importTaskIds', 'describeImportSnapshotTasks_importTaskIds' - A list of import snapshot task IDs.
+--
+-- 'maxResults', 'describeImportSnapshotTasks_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeImportSnapshotTasks_nextToken' - A token that indicates the next page of results.
+newDescribeImportSnapshotTasks ::
+  DescribeImportSnapshotTasks
+newDescribeImportSnapshotTasks =
+  DescribeImportSnapshotTasks'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      importTaskIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeImportSnapshotTasks_dryRun :: Lens.Lens' DescribeImportSnapshotTasks (Prelude.Maybe Prelude.Bool)
+describeImportSnapshotTasks_dryRun = Lens.lens (\DescribeImportSnapshotTasks' {dryRun} -> dryRun) (\s@DescribeImportSnapshotTasks' {} a -> s {dryRun = a} :: DescribeImportSnapshotTasks)
+
+-- | The filters.
+describeImportSnapshotTasks_filters :: Lens.Lens' DescribeImportSnapshotTasks (Prelude.Maybe [Filter])
+describeImportSnapshotTasks_filters = Lens.lens (\DescribeImportSnapshotTasks' {filters} -> filters) (\s@DescribeImportSnapshotTasks' {} a -> s {filters = a} :: DescribeImportSnapshotTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of import snapshot task IDs.
+describeImportSnapshotTasks_importTaskIds :: Lens.Lens' DescribeImportSnapshotTasks (Prelude.Maybe [Prelude.Text])
+describeImportSnapshotTasks_importTaskIds = Lens.lens (\DescribeImportSnapshotTasks' {importTaskIds} -> importTaskIds) (\s@DescribeImportSnapshotTasks' {} a -> s {importTaskIds = a} :: DescribeImportSnapshotTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value.
+describeImportSnapshotTasks_maxResults :: Lens.Lens' DescribeImportSnapshotTasks (Prelude.Maybe Prelude.Int)
+describeImportSnapshotTasks_maxResults = Lens.lens (\DescribeImportSnapshotTasks' {maxResults} -> maxResults) (\s@DescribeImportSnapshotTasks' {} a -> s {maxResults = a} :: DescribeImportSnapshotTasks)
+
+-- | A token that indicates the next page of results.
+describeImportSnapshotTasks_nextToken :: Lens.Lens' DescribeImportSnapshotTasks (Prelude.Maybe Prelude.Text)
+describeImportSnapshotTasks_nextToken = Lens.lens (\DescribeImportSnapshotTasks' {nextToken} -> nextToken) (\s@DescribeImportSnapshotTasks' {} a -> s {nextToken = a} :: DescribeImportSnapshotTasks)
+
+instance Core.AWSPager DescribeImportSnapshotTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeImportSnapshotTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeImportSnapshotTasksResponse_importSnapshotTasks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeImportSnapshotTasks_nextToken
+          Lens..~ rs
+          Lens.^? describeImportSnapshotTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeImportSnapshotTasks where
+  type
+    AWSResponse DescribeImportSnapshotTasks =
+      DescribeImportSnapshotTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeImportSnapshotTasksResponse'
+            Prelude.<$> ( x
+                            Data..@? "importSnapshotTaskSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImportSnapshotTasks where
+  hashWithSalt _salt DescribeImportSnapshotTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` importTaskIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeImportSnapshotTasks where
+  rnf DescribeImportSnapshotTasks' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf importTaskIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeImportSnapshotTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeImportSnapshotTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImportSnapshotTasks where
+  toQuery DescribeImportSnapshotTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeImportSnapshotTasks" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filters" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "ImportTaskId"
+              Prelude.<$> importTaskIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeImportSnapshotTasksResponse' smart constructor.
+data DescribeImportSnapshotTasksResponse = DescribeImportSnapshotTasksResponse'
+  { -- | A list of zero or more import snapshot tasks that are currently active
+    -- or were completed or canceled in the previous 7 days.
+    importSnapshotTasks :: Prelude.Maybe [ImportSnapshotTask],
+    -- | The token to use to get the next page of results. This value is @null@
+    -- when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImportSnapshotTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'importSnapshotTasks', 'describeImportSnapshotTasksResponse_importSnapshotTasks' - A list of zero or more import snapshot tasks that are currently active
+-- or were completed or canceled in the previous 7 days.
+--
+-- 'nextToken', 'describeImportSnapshotTasksResponse_nextToken' - The token to use to get the next page of results. This value is @null@
+-- when there are no more results to return.
+--
+-- 'httpStatus', 'describeImportSnapshotTasksResponse_httpStatus' - The response's http status code.
+newDescribeImportSnapshotTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImportSnapshotTasksResponse
+newDescribeImportSnapshotTasksResponse pHttpStatus_ =
+  DescribeImportSnapshotTasksResponse'
+    { importSnapshotTasks =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of zero or more import snapshot tasks that are currently active
+-- or were completed or canceled in the previous 7 days.
+describeImportSnapshotTasksResponse_importSnapshotTasks :: Lens.Lens' DescribeImportSnapshotTasksResponse (Prelude.Maybe [ImportSnapshotTask])
+describeImportSnapshotTasksResponse_importSnapshotTasks = Lens.lens (\DescribeImportSnapshotTasksResponse' {importSnapshotTasks} -> importSnapshotTasks) (\s@DescribeImportSnapshotTasksResponse' {} a -> s {importSnapshotTasks = a} :: DescribeImportSnapshotTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to get the next page of results. This value is @null@
+-- when there are no more results to return.
+describeImportSnapshotTasksResponse_nextToken :: Lens.Lens' DescribeImportSnapshotTasksResponse (Prelude.Maybe Prelude.Text)
+describeImportSnapshotTasksResponse_nextToken = Lens.lens (\DescribeImportSnapshotTasksResponse' {nextToken} -> nextToken) (\s@DescribeImportSnapshotTasksResponse' {} a -> s {nextToken = a} :: DescribeImportSnapshotTasksResponse)
+
+-- | The response's http status code.
+describeImportSnapshotTasksResponse_httpStatus :: Lens.Lens' DescribeImportSnapshotTasksResponse Prelude.Int
+describeImportSnapshotTasksResponse_httpStatus = Lens.lens (\DescribeImportSnapshotTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeImportSnapshotTasksResponse' {} a -> s {httpStatus = a} :: DescribeImportSnapshotTasksResponse)
+
+instance
+  Prelude.NFData
+    DescribeImportSnapshotTasksResponse
+  where
+  rnf DescribeImportSnapshotTasksResponse' {..} =
+    Prelude.rnf importSnapshotTasks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceAttribute.hs b/gen/Amazonka/EC2/DescribeInstanceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceAttribute.hs
@@ -0,0 +1,452 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified attribute of the specified instance. You can
+-- specify only one attribute at a time. Valid attribute values are:
+-- @instanceType@ | @kernel@ | @ramdisk@ | @userData@ |
+-- @disableApiTermination@ | @instanceInitiatedShutdownBehavior@ |
+-- @rootDeviceName@ | @blockDeviceMapping@ | @productCodes@ |
+-- @sourceDestCheck@ | @groupSet@ | @ebsOptimized@ | @sriovNetSupport@
+module Amazonka.EC2.DescribeInstanceAttribute
+  ( -- * Creating a Request
+    DescribeInstanceAttribute (..),
+    newDescribeInstanceAttribute,
+
+    -- * Request Lenses
+    describeInstanceAttribute_dryRun,
+    describeInstanceAttribute_attribute,
+    describeInstanceAttribute_instanceId,
+
+    -- * Destructuring the Response
+    DescribeInstanceAttributeResponse (..),
+    newDescribeInstanceAttributeResponse,
+
+    -- * Response Lenses
+    describeInstanceAttributeResponse_blockDeviceMappings,
+    describeInstanceAttributeResponse_disableApiStop,
+    describeInstanceAttributeResponse_disableApiTermination,
+    describeInstanceAttributeResponse_ebsOptimized,
+    describeInstanceAttributeResponse_enaSupport,
+    describeInstanceAttributeResponse_enclaveOptions,
+    describeInstanceAttributeResponse_groups,
+    describeInstanceAttributeResponse_instanceId,
+    describeInstanceAttributeResponse_instanceInitiatedShutdownBehavior,
+    describeInstanceAttributeResponse_instanceType,
+    describeInstanceAttributeResponse_kernelId,
+    describeInstanceAttributeResponse_productCodes,
+    describeInstanceAttributeResponse_ramdiskId,
+    describeInstanceAttributeResponse_rootDeviceName,
+    describeInstanceAttributeResponse_sourceDestCheck,
+    describeInstanceAttributeResponse_sriovNetSupport,
+    describeInstanceAttributeResponse_userData,
+    describeInstanceAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstanceAttribute' smart constructor.
+data DescribeInstanceAttribute = DescribeInstanceAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The instance attribute.
+    --
+    -- Note: The @enaSupport@ attribute is not supported at this time.
+    attribute :: InstanceAttributeName,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'describeInstanceAttribute_attribute' - The instance attribute.
+--
+-- Note: The @enaSupport@ attribute is not supported at this time.
+--
+-- 'instanceId', 'describeInstanceAttribute_instanceId' - The ID of the instance.
+newDescribeInstanceAttribute ::
+  -- | 'attribute'
+  InstanceAttributeName ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  DescribeInstanceAttribute
+newDescribeInstanceAttribute pAttribute_ pInstanceId_ =
+  DescribeInstanceAttribute'
+    { dryRun =
+        Prelude.Nothing,
+      attribute = pAttribute_,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceAttribute_dryRun :: Lens.Lens' DescribeInstanceAttribute (Prelude.Maybe Prelude.Bool)
+describeInstanceAttribute_dryRun = Lens.lens (\DescribeInstanceAttribute' {dryRun} -> dryRun) (\s@DescribeInstanceAttribute' {} a -> s {dryRun = a} :: DescribeInstanceAttribute)
+
+-- | The instance attribute.
+--
+-- Note: The @enaSupport@ attribute is not supported at this time.
+describeInstanceAttribute_attribute :: Lens.Lens' DescribeInstanceAttribute InstanceAttributeName
+describeInstanceAttribute_attribute = Lens.lens (\DescribeInstanceAttribute' {attribute} -> attribute) (\s@DescribeInstanceAttribute' {} a -> s {attribute = a} :: DescribeInstanceAttribute)
+
+-- | The ID of the instance.
+describeInstanceAttribute_instanceId :: Lens.Lens' DescribeInstanceAttribute Prelude.Text
+describeInstanceAttribute_instanceId = Lens.lens (\DescribeInstanceAttribute' {instanceId} -> instanceId) (\s@DescribeInstanceAttribute' {} a -> s {instanceId = a} :: DescribeInstanceAttribute)
+
+instance Core.AWSRequest DescribeInstanceAttribute where
+  type
+    AWSResponse DescribeInstanceAttribute =
+      DescribeInstanceAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceAttributeResponse'
+            Prelude.<$> ( x
+                            Data..@? "blockDeviceMapping"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "disableApiStop")
+            Prelude.<*> (x Data..@? "disableApiTermination")
+            Prelude.<*> (x Data..@? "ebsOptimized")
+            Prelude.<*> (x Data..@? "enaSupport")
+            Prelude.<*> (x Data..@? "enclaveOptions")
+            Prelude.<*> ( x
+                            Data..@? "groupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "instanceId")
+            Prelude.<*> (x Data..@? "instanceInitiatedShutdownBehavior")
+            Prelude.<*> (x Data..@? "instanceType")
+            Prelude.<*> (x Data..@? "kernel")
+            Prelude.<*> ( x
+                            Data..@? "productCodes"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "ramdisk")
+            Prelude.<*> (x Data..@? "rootDeviceName")
+            Prelude.<*> (x Data..@? "sourceDestCheck")
+            Prelude.<*> (x Data..@? "sriovNetSupport")
+            Prelude.<*> (x Data..@? "userData")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInstanceAttribute where
+  hashWithSalt _salt DescribeInstanceAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData DescribeInstanceAttribute where
+  rnf DescribeInstanceAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders DescribeInstanceAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInstanceAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInstanceAttribute where
+  toQuery DescribeInstanceAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeInstanceAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | Describes an instance attribute.
+--
+-- /See:/ 'newDescribeInstanceAttributeResponse' smart constructor.
+data DescribeInstanceAttributeResponse = DescribeInstanceAttributeResponse'
+  { -- | The block device mapping of the instance.
+    blockDeviceMappings :: Prelude.Maybe [InstanceBlockDeviceMapping],
+    -- | To enable the instance for Amazon Web Services Stop Protection, set this
+    -- parameter to @true@; otherwise, set it to @false@.
+    disableApiStop :: Prelude.Maybe AttributeBooleanValue,
+    -- | If the value is @true@, you can\'t terminate the instance through the
+    -- Amazon EC2 console, CLI, or API; otherwise, you can.
+    disableApiTermination :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether the instance is optimized for Amazon EBS I\/O.
+    ebsOptimized :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether enhanced networking with ENA is enabled.
+    enaSupport :: Prelude.Maybe AttributeBooleanValue,
+    -- | To enable the instance for Amazon Web Services Nitro Enclaves, set this
+    -- parameter to @true@; otherwise, set it to @false@.
+    enclaveOptions :: Prelude.Maybe EnclaveOptions,
+    -- | The security groups associated with the instance.
+    groups :: Prelude.Maybe [GroupIdentifier],
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether an instance stops or terminates when you initiate
+    -- shutdown from the instance (using the operating system command for
+    -- system shutdown).
+    instanceInitiatedShutdownBehavior :: Prelude.Maybe AttributeValue,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe AttributeValue,
+    -- | The kernel ID.
+    kernelId :: Prelude.Maybe AttributeValue,
+    -- | A list of product codes.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | The RAM disk ID.
+    ramdiskId :: Prelude.Maybe AttributeValue,
+    -- | The device name of the root device volume (for example, @\/dev\/sda1@).
+    rootDeviceName :: Prelude.Maybe AttributeValue,
+    -- | Enable or disable source\/destination checks, which ensure that the
+    -- instance is either the source or the destination of any traffic that it
+    -- receives. If the value is @true@, source\/destination checks are
+    -- enabled; otherwise, they are disabled. The default value is @true@. You
+    -- must disable source\/destination checks if the instance runs services
+    -- such as network address translation, routing, or firewalls.
+    sourceDestCheck :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether enhanced networking with the Intel 82599 Virtual
+    -- Function interface is enabled.
+    sriovNetSupport :: Prelude.Maybe AttributeValue,
+    -- | The user data.
+    userData :: Prelude.Maybe AttributeValue,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'describeInstanceAttributeResponse_blockDeviceMappings' - The block device mapping of the instance.
+--
+-- 'disableApiStop', 'describeInstanceAttributeResponse_disableApiStop' - To enable the instance for Amazon Web Services Stop Protection, set this
+-- parameter to @true@; otherwise, set it to @false@.
+--
+-- 'disableApiTermination', 'describeInstanceAttributeResponse_disableApiTermination' - If the value is @true@, you can\'t terminate the instance through the
+-- Amazon EC2 console, CLI, or API; otherwise, you can.
+--
+-- 'ebsOptimized', 'describeInstanceAttributeResponse_ebsOptimized' - Indicates whether the instance is optimized for Amazon EBS I\/O.
+--
+-- 'enaSupport', 'describeInstanceAttributeResponse_enaSupport' - Indicates whether enhanced networking with ENA is enabled.
+--
+-- 'enclaveOptions', 'describeInstanceAttributeResponse_enclaveOptions' - To enable the instance for Amazon Web Services Nitro Enclaves, set this
+-- parameter to @true@; otherwise, set it to @false@.
+--
+-- 'groups', 'describeInstanceAttributeResponse_groups' - The security groups associated with the instance.
+--
+-- 'instanceId', 'describeInstanceAttributeResponse_instanceId' - The ID of the instance.
+--
+-- 'instanceInitiatedShutdownBehavior', 'describeInstanceAttributeResponse_instanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- 'instanceType', 'describeInstanceAttributeResponse_instanceType' - The instance type.
+--
+-- 'kernelId', 'describeInstanceAttributeResponse_kernelId' - The kernel ID.
+--
+-- 'productCodes', 'describeInstanceAttributeResponse_productCodes' - A list of product codes.
+--
+-- 'ramdiskId', 'describeInstanceAttributeResponse_ramdiskId' - The RAM disk ID.
+--
+-- 'rootDeviceName', 'describeInstanceAttributeResponse_rootDeviceName' - The device name of the root device volume (for example, @\/dev\/sda1@).
+--
+-- 'sourceDestCheck', 'describeInstanceAttributeResponse_sourceDestCheck' - Enable or disable source\/destination checks, which ensure that the
+-- instance is either the source or the destination of any traffic that it
+-- receives. If the value is @true@, source\/destination checks are
+-- enabled; otherwise, they are disabled. The default value is @true@. You
+-- must disable source\/destination checks if the instance runs services
+-- such as network address translation, routing, or firewalls.
+--
+-- 'sriovNetSupport', 'describeInstanceAttributeResponse_sriovNetSupport' - Indicates whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+--
+-- 'userData', 'describeInstanceAttributeResponse_userData' - The user data.
+--
+-- 'httpStatus', 'describeInstanceAttributeResponse_httpStatus' - The response's http status code.
+newDescribeInstanceAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceAttributeResponse
+newDescribeInstanceAttributeResponse pHttpStatus_ =
+  DescribeInstanceAttributeResponse'
+    { blockDeviceMappings =
+        Prelude.Nothing,
+      disableApiStop = Prelude.Nothing,
+      disableApiTermination = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      enaSupport = Prelude.Nothing,
+      enclaveOptions = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      instanceInitiatedShutdownBehavior =
+        Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      rootDeviceName = Prelude.Nothing,
+      sourceDestCheck = Prelude.Nothing,
+      sriovNetSupport = Prelude.Nothing,
+      userData = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The block device mapping of the instance.
+describeInstanceAttributeResponse_blockDeviceMappings :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe [InstanceBlockDeviceMapping])
+describeInstanceAttributeResponse_blockDeviceMappings = Lens.lens (\DescribeInstanceAttributeResponse' {blockDeviceMappings} -> blockDeviceMappings) (\s@DescribeInstanceAttributeResponse' {} a -> s {blockDeviceMappings = a} :: DescribeInstanceAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | To enable the instance for Amazon Web Services Stop Protection, set this
+-- parameter to @true@; otherwise, set it to @false@.
+describeInstanceAttributeResponse_disableApiStop :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeInstanceAttributeResponse_disableApiStop = Lens.lens (\DescribeInstanceAttributeResponse' {disableApiStop} -> disableApiStop) (\s@DescribeInstanceAttributeResponse' {} a -> s {disableApiStop = a} :: DescribeInstanceAttributeResponse)
+
+-- | If the value is @true@, you can\'t terminate the instance through the
+-- Amazon EC2 console, CLI, or API; otherwise, you can.
+describeInstanceAttributeResponse_disableApiTermination :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeInstanceAttributeResponse_disableApiTermination = Lens.lens (\DescribeInstanceAttributeResponse' {disableApiTermination} -> disableApiTermination) (\s@DescribeInstanceAttributeResponse' {} a -> s {disableApiTermination = a} :: DescribeInstanceAttributeResponse)
+
+-- | Indicates whether the instance is optimized for Amazon EBS I\/O.
+describeInstanceAttributeResponse_ebsOptimized :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeInstanceAttributeResponse_ebsOptimized = Lens.lens (\DescribeInstanceAttributeResponse' {ebsOptimized} -> ebsOptimized) (\s@DescribeInstanceAttributeResponse' {} a -> s {ebsOptimized = a} :: DescribeInstanceAttributeResponse)
+
+-- | Indicates whether enhanced networking with ENA is enabled.
+describeInstanceAttributeResponse_enaSupport :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeInstanceAttributeResponse_enaSupport = Lens.lens (\DescribeInstanceAttributeResponse' {enaSupport} -> enaSupport) (\s@DescribeInstanceAttributeResponse' {} a -> s {enaSupport = a} :: DescribeInstanceAttributeResponse)
+
+-- | To enable the instance for Amazon Web Services Nitro Enclaves, set this
+-- parameter to @true@; otherwise, set it to @false@.
+describeInstanceAttributeResponse_enclaveOptions :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe EnclaveOptions)
+describeInstanceAttributeResponse_enclaveOptions = Lens.lens (\DescribeInstanceAttributeResponse' {enclaveOptions} -> enclaveOptions) (\s@DescribeInstanceAttributeResponse' {} a -> s {enclaveOptions = a} :: DescribeInstanceAttributeResponse)
+
+-- | The security groups associated with the instance.
+describeInstanceAttributeResponse_groups :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe [GroupIdentifier])
+describeInstanceAttributeResponse_groups = Lens.lens (\DescribeInstanceAttributeResponse' {groups} -> groups) (\s@DescribeInstanceAttributeResponse' {} a -> s {groups = a} :: DescribeInstanceAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the instance.
+describeInstanceAttributeResponse_instanceId :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe Prelude.Text)
+describeInstanceAttributeResponse_instanceId = Lens.lens (\DescribeInstanceAttributeResponse' {instanceId} -> instanceId) (\s@DescribeInstanceAttributeResponse' {} a -> s {instanceId = a} :: DescribeInstanceAttributeResponse)
+
+-- | Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+describeInstanceAttributeResponse_instanceInitiatedShutdownBehavior :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_instanceInitiatedShutdownBehavior = Lens.lens (\DescribeInstanceAttributeResponse' {instanceInitiatedShutdownBehavior} -> instanceInitiatedShutdownBehavior) (\s@DescribeInstanceAttributeResponse' {} a -> s {instanceInitiatedShutdownBehavior = a} :: DescribeInstanceAttributeResponse)
+
+-- | The instance type.
+describeInstanceAttributeResponse_instanceType :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_instanceType = Lens.lens (\DescribeInstanceAttributeResponse' {instanceType} -> instanceType) (\s@DescribeInstanceAttributeResponse' {} a -> s {instanceType = a} :: DescribeInstanceAttributeResponse)
+
+-- | The kernel ID.
+describeInstanceAttributeResponse_kernelId :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_kernelId = Lens.lens (\DescribeInstanceAttributeResponse' {kernelId} -> kernelId) (\s@DescribeInstanceAttributeResponse' {} a -> s {kernelId = a} :: DescribeInstanceAttributeResponse)
+
+-- | A list of product codes.
+describeInstanceAttributeResponse_productCodes :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe [ProductCode])
+describeInstanceAttributeResponse_productCodes = Lens.lens (\DescribeInstanceAttributeResponse' {productCodes} -> productCodes) (\s@DescribeInstanceAttributeResponse' {} a -> s {productCodes = a} :: DescribeInstanceAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The RAM disk ID.
+describeInstanceAttributeResponse_ramdiskId :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_ramdiskId = Lens.lens (\DescribeInstanceAttributeResponse' {ramdiskId} -> ramdiskId) (\s@DescribeInstanceAttributeResponse' {} a -> s {ramdiskId = a} :: DescribeInstanceAttributeResponse)
+
+-- | The device name of the root device volume (for example, @\/dev\/sda1@).
+describeInstanceAttributeResponse_rootDeviceName :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_rootDeviceName = Lens.lens (\DescribeInstanceAttributeResponse' {rootDeviceName} -> rootDeviceName) (\s@DescribeInstanceAttributeResponse' {} a -> s {rootDeviceName = a} :: DescribeInstanceAttributeResponse)
+
+-- | Enable or disable source\/destination checks, which ensure that the
+-- instance is either the source or the destination of any traffic that it
+-- receives. If the value is @true@, source\/destination checks are
+-- enabled; otherwise, they are disabled. The default value is @true@. You
+-- must disable source\/destination checks if the instance runs services
+-- such as network address translation, routing, or firewalls.
+describeInstanceAttributeResponse_sourceDestCheck :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeInstanceAttributeResponse_sourceDestCheck = Lens.lens (\DescribeInstanceAttributeResponse' {sourceDestCheck} -> sourceDestCheck) (\s@DescribeInstanceAttributeResponse' {} a -> s {sourceDestCheck = a} :: DescribeInstanceAttributeResponse)
+
+-- | Indicates whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+describeInstanceAttributeResponse_sriovNetSupport :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_sriovNetSupport = Lens.lens (\DescribeInstanceAttributeResponse' {sriovNetSupport} -> sriovNetSupport) (\s@DescribeInstanceAttributeResponse' {} a -> s {sriovNetSupport = a} :: DescribeInstanceAttributeResponse)
+
+-- | The user data.
+describeInstanceAttributeResponse_userData :: Lens.Lens' DescribeInstanceAttributeResponse (Prelude.Maybe AttributeValue)
+describeInstanceAttributeResponse_userData = Lens.lens (\DescribeInstanceAttributeResponse' {userData} -> userData) (\s@DescribeInstanceAttributeResponse' {} a -> s {userData = a} :: DescribeInstanceAttributeResponse)
+
+-- | The response's http status code.
+describeInstanceAttributeResponse_httpStatus :: Lens.Lens' DescribeInstanceAttributeResponse Prelude.Int
+describeInstanceAttributeResponse_httpStatus = Lens.lens (\DescribeInstanceAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceAttributeResponse' {} a -> s {httpStatus = a} :: DescribeInstanceAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeInstanceAttributeResponse
+  where
+  rnf DescribeInstanceAttributeResponse' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf disableApiStop
+      `Prelude.seq` Prelude.rnf disableApiTermination
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf enaSupport
+      `Prelude.seq` Prelude.rnf enclaveOptions
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceInitiatedShutdownBehavior
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf rootDeviceName
+      `Prelude.seq` Prelude.rnf sourceDestCheck
+      `Prelude.seq` Prelude.rnf sriovNetSupport
+      `Prelude.seq` Prelude.rnf userData
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceCreditSpecifications.hs b/gen/Amazonka/EC2/DescribeInstanceCreditSpecifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceCreditSpecifications.hs
@@ -0,0 +1,349 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceCreditSpecifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the credit option for CPU usage of the specified burstable
+-- performance instances. The credit options are @standard@ and
+-- @unlimited@.
+--
+-- If you do not specify an instance ID, Amazon EC2 returns burstable
+-- performance instances with the @unlimited@ credit option, as well as
+-- instances that were previously configured as T2, T3, and T3a with the
+-- @unlimited@ credit option. For example, if you resize a T2 instance,
+-- while it is configured as @unlimited@, to an M4 instance, Amazon EC2
+-- returns the M4 instance.
+--
+-- If you specify one or more instance IDs, Amazon EC2 returns the credit
+-- option (@standard@ or @unlimited@) of those instances. If you specify an
+-- instance ID that is not valid, such as an instance that is not a
+-- burstable performance instance, an error is returned.
+--
+-- Recently terminated instances might appear in the returned results. This
+-- interval is usually less than one hour.
+--
+-- If an Availability Zone is experiencing a service disruption and you
+-- specify instance IDs in the affected zone, or do not specify any
+-- instance IDs at all, the call fails. If you specify only instance IDs in
+-- an unaffected zone, the call works normally.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInstanceCreditSpecifications
+  ( -- * Creating a Request
+    DescribeInstanceCreditSpecifications (..),
+    newDescribeInstanceCreditSpecifications,
+
+    -- * Request Lenses
+    describeInstanceCreditSpecifications_dryRun,
+    describeInstanceCreditSpecifications_filters,
+    describeInstanceCreditSpecifications_instanceIds,
+    describeInstanceCreditSpecifications_maxResults,
+    describeInstanceCreditSpecifications_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInstanceCreditSpecificationsResponse (..),
+    newDescribeInstanceCreditSpecificationsResponse,
+
+    -- * Response Lenses
+    describeInstanceCreditSpecificationsResponse_instanceCreditSpecifications,
+    describeInstanceCreditSpecificationsResponse_nextToken,
+    describeInstanceCreditSpecificationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstanceCreditSpecifications' smart constructor.
+data DescribeInstanceCreditSpecifications = DescribeInstanceCreditSpecifications'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @instance-id@ - The ID of the instance.
+    filters :: Prelude.Maybe [Filter],
+    -- | The instance IDs.
+    --
+    -- Default: Describes all your instances.
+    --
+    -- Constraints: Maximum 1000 explicitly specified instance IDs.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 5 and 1000. You cannot specify this
+    -- parameter and the instance IDs parameter in the same call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceCreditSpecifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceCreditSpecifications_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInstanceCreditSpecifications_filters' - The filters.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- 'instanceIds', 'describeInstanceCreditSpecifications_instanceIds' - The instance IDs.
+--
+-- Default: Describes all your instances.
+--
+-- Constraints: Maximum 1000 explicitly specified instance IDs.
+--
+-- 'maxResults', 'describeInstanceCreditSpecifications_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000. You cannot specify this
+-- parameter and the instance IDs parameter in the same call.
+--
+-- 'nextToken', 'describeInstanceCreditSpecifications_nextToken' - The token to retrieve the next page of results.
+newDescribeInstanceCreditSpecifications ::
+  DescribeInstanceCreditSpecifications
+newDescribeInstanceCreditSpecifications =
+  DescribeInstanceCreditSpecifications'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceCreditSpecifications_dryRun :: Lens.Lens' DescribeInstanceCreditSpecifications (Prelude.Maybe Prelude.Bool)
+describeInstanceCreditSpecifications_dryRun = Lens.lens (\DescribeInstanceCreditSpecifications' {dryRun} -> dryRun) (\s@DescribeInstanceCreditSpecifications' {} a -> s {dryRun = a} :: DescribeInstanceCreditSpecifications)
+
+-- | The filters.
+--
+-- -   @instance-id@ - The ID of the instance.
+describeInstanceCreditSpecifications_filters :: Lens.Lens' DescribeInstanceCreditSpecifications (Prelude.Maybe [Filter])
+describeInstanceCreditSpecifications_filters = Lens.lens (\DescribeInstanceCreditSpecifications' {filters} -> filters) (\s@DescribeInstanceCreditSpecifications' {} a -> s {filters = a} :: DescribeInstanceCreditSpecifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance IDs.
+--
+-- Default: Describes all your instances.
+--
+-- Constraints: Maximum 1000 explicitly specified instance IDs.
+describeInstanceCreditSpecifications_instanceIds :: Lens.Lens' DescribeInstanceCreditSpecifications (Prelude.Maybe [Prelude.Text])
+describeInstanceCreditSpecifications_instanceIds = Lens.lens (\DescribeInstanceCreditSpecifications' {instanceIds} -> instanceIds) (\s@DescribeInstanceCreditSpecifications' {} a -> s {instanceIds = a} :: DescribeInstanceCreditSpecifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000. You cannot specify this
+-- parameter and the instance IDs parameter in the same call.
+describeInstanceCreditSpecifications_maxResults :: Lens.Lens' DescribeInstanceCreditSpecifications (Prelude.Maybe Prelude.Natural)
+describeInstanceCreditSpecifications_maxResults = Lens.lens (\DescribeInstanceCreditSpecifications' {maxResults} -> maxResults) (\s@DescribeInstanceCreditSpecifications' {} a -> s {maxResults = a} :: DescribeInstanceCreditSpecifications)
+
+-- | The token to retrieve the next page of results.
+describeInstanceCreditSpecifications_nextToken :: Lens.Lens' DescribeInstanceCreditSpecifications (Prelude.Maybe Prelude.Text)
+describeInstanceCreditSpecifications_nextToken = Lens.lens (\DescribeInstanceCreditSpecifications' {nextToken} -> nextToken) (\s@DescribeInstanceCreditSpecifications' {} a -> s {nextToken = a} :: DescribeInstanceCreditSpecifications)
+
+instance
+  Core.AWSPager
+    DescribeInstanceCreditSpecifications
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceCreditSpecificationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceCreditSpecificationsResponse_instanceCreditSpecifications
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInstanceCreditSpecifications_nextToken
+          Lens..~ rs
+          Lens.^? describeInstanceCreditSpecificationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeInstanceCreditSpecifications
+  where
+  type
+    AWSResponse DescribeInstanceCreditSpecifications =
+      DescribeInstanceCreditSpecificationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceCreditSpecificationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceCreditSpecificationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeInstanceCreditSpecifications
+  where
+  hashWithSalt
+    _salt
+    DescribeInstanceCreditSpecifications' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` instanceIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeInstanceCreditSpecifications
+  where
+  rnf DescribeInstanceCreditSpecifications' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeInstanceCreditSpecifications
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeInstanceCreditSpecifications
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeInstanceCreditSpecifications
+  where
+  toQuery DescribeInstanceCreditSpecifications' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeInstanceCreditSpecifications" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InstanceId"
+              Prelude.<$> instanceIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInstanceCreditSpecificationsResponse' smart constructor.
+data DescribeInstanceCreditSpecificationsResponse = DescribeInstanceCreditSpecificationsResponse'
+  { -- | Information about the credit option for CPU usage of an instance.
+    instanceCreditSpecifications :: Prelude.Maybe [InstanceCreditSpecification],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceCreditSpecificationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceCreditSpecifications', 'describeInstanceCreditSpecificationsResponse_instanceCreditSpecifications' - Information about the credit option for CPU usage of an instance.
+--
+-- 'nextToken', 'describeInstanceCreditSpecificationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeInstanceCreditSpecificationsResponse_httpStatus' - The response's http status code.
+newDescribeInstanceCreditSpecificationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceCreditSpecificationsResponse
+newDescribeInstanceCreditSpecificationsResponse
+  pHttpStatus_ =
+    DescribeInstanceCreditSpecificationsResponse'
+      { instanceCreditSpecifications =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the credit option for CPU usage of an instance.
+describeInstanceCreditSpecificationsResponse_instanceCreditSpecifications :: Lens.Lens' DescribeInstanceCreditSpecificationsResponse (Prelude.Maybe [InstanceCreditSpecification])
+describeInstanceCreditSpecificationsResponse_instanceCreditSpecifications = Lens.lens (\DescribeInstanceCreditSpecificationsResponse' {instanceCreditSpecifications} -> instanceCreditSpecifications) (\s@DescribeInstanceCreditSpecificationsResponse' {} a -> s {instanceCreditSpecifications = a} :: DescribeInstanceCreditSpecificationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInstanceCreditSpecificationsResponse_nextToken :: Lens.Lens' DescribeInstanceCreditSpecificationsResponse (Prelude.Maybe Prelude.Text)
+describeInstanceCreditSpecificationsResponse_nextToken = Lens.lens (\DescribeInstanceCreditSpecificationsResponse' {nextToken} -> nextToken) (\s@DescribeInstanceCreditSpecificationsResponse' {} a -> s {nextToken = a} :: DescribeInstanceCreditSpecificationsResponse)
+
+-- | The response's http status code.
+describeInstanceCreditSpecificationsResponse_httpStatus :: Lens.Lens' DescribeInstanceCreditSpecificationsResponse Prelude.Int
+describeInstanceCreditSpecificationsResponse_httpStatus = Lens.lens (\DescribeInstanceCreditSpecificationsResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceCreditSpecificationsResponse' {} a -> s {httpStatus = a} :: DescribeInstanceCreditSpecificationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeInstanceCreditSpecificationsResponse
+  where
+  rnf DescribeInstanceCreditSpecificationsResponse' {..} =
+    Prelude.rnf instanceCreditSpecifications
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceEventNotificationAttributes.hs b/gen/Amazonka/EC2/DescribeInstanceEventNotificationAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceEventNotificationAttributes.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceEventNotificationAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the tag keys that are registered to appear in scheduled event
+-- notifications for resources in the current Region.
+module Amazonka.EC2.DescribeInstanceEventNotificationAttributes
+  ( -- * Creating a Request
+    DescribeInstanceEventNotificationAttributes (..),
+    newDescribeInstanceEventNotificationAttributes,
+
+    -- * Request Lenses
+    describeInstanceEventNotificationAttributes_dryRun,
+
+    -- * Destructuring the Response
+    DescribeInstanceEventNotificationAttributesResponse (..),
+    newDescribeInstanceEventNotificationAttributesResponse,
+
+    -- * Response Lenses
+    describeInstanceEventNotificationAttributesResponse_instanceTagAttribute,
+    describeInstanceEventNotificationAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstanceEventNotificationAttributes' smart constructor.
+data DescribeInstanceEventNotificationAttributes = DescribeInstanceEventNotificationAttributes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceEventNotificationAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceEventNotificationAttributes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDescribeInstanceEventNotificationAttributes ::
+  DescribeInstanceEventNotificationAttributes
+newDescribeInstanceEventNotificationAttributes =
+  DescribeInstanceEventNotificationAttributes'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceEventNotificationAttributes_dryRun :: Lens.Lens' DescribeInstanceEventNotificationAttributes (Prelude.Maybe Prelude.Bool)
+describeInstanceEventNotificationAttributes_dryRun = Lens.lens (\DescribeInstanceEventNotificationAttributes' {dryRun} -> dryRun) (\s@DescribeInstanceEventNotificationAttributes' {} a -> s {dryRun = a} :: DescribeInstanceEventNotificationAttributes)
+
+instance
+  Core.AWSRequest
+    DescribeInstanceEventNotificationAttributes
+  where
+  type
+    AWSResponse
+      DescribeInstanceEventNotificationAttributes =
+      DescribeInstanceEventNotificationAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceEventNotificationAttributesResponse'
+            Prelude.<$> (x Data..@? "instanceTagAttribute")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeInstanceEventNotificationAttributes
+  where
+  hashWithSalt
+    _salt
+    DescribeInstanceEventNotificationAttributes' {..} =
+      _salt `Prelude.hashWithSalt` dryRun
+
+instance
+  Prelude.NFData
+    DescribeInstanceEventNotificationAttributes
+  where
+  rnf DescribeInstanceEventNotificationAttributes' {..} =
+    Prelude.rnf dryRun
+
+instance
+  Data.ToHeaders
+    DescribeInstanceEventNotificationAttributes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeInstanceEventNotificationAttributes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeInstanceEventNotificationAttributes
+  where
+  toQuery
+    DescribeInstanceEventNotificationAttributes' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeInstanceEventNotificationAttributes" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun
+        ]
+
+-- | /See:/ 'newDescribeInstanceEventNotificationAttributesResponse' smart constructor.
+data DescribeInstanceEventNotificationAttributesResponse = DescribeInstanceEventNotificationAttributesResponse'
+  { -- | Information about the registered tag keys.
+    instanceTagAttribute :: Prelude.Maybe InstanceTagNotificationAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceEventNotificationAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceTagAttribute', 'describeInstanceEventNotificationAttributesResponse_instanceTagAttribute' - Information about the registered tag keys.
+--
+-- 'httpStatus', 'describeInstanceEventNotificationAttributesResponse_httpStatus' - The response's http status code.
+newDescribeInstanceEventNotificationAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceEventNotificationAttributesResponse
+newDescribeInstanceEventNotificationAttributesResponse
+  pHttpStatus_ =
+    DescribeInstanceEventNotificationAttributesResponse'
+      { instanceTagAttribute =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the registered tag keys.
+describeInstanceEventNotificationAttributesResponse_instanceTagAttribute :: Lens.Lens' DescribeInstanceEventNotificationAttributesResponse (Prelude.Maybe InstanceTagNotificationAttribute)
+describeInstanceEventNotificationAttributesResponse_instanceTagAttribute = Lens.lens (\DescribeInstanceEventNotificationAttributesResponse' {instanceTagAttribute} -> instanceTagAttribute) (\s@DescribeInstanceEventNotificationAttributesResponse' {} a -> s {instanceTagAttribute = a} :: DescribeInstanceEventNotificationAttributesResponse)
+
+-- | The response's http status code.
+describeInstanceEventNotificationAttributesResponse_httpStatus :: Lens.Lens' DescribeInstanceEventNotificationAttributesResponse Prelude.Int
+describeInstanceEventNotificationAttributesResponse_httpStatus = Lens.lens (\DescribeInstanceEventNotificationAttributesResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceEventNotificationAttributesResponse' {} a -> s {httpStatus = a} :: DescribeInstanceEventNotificationAttributesResponse)
+
+instance
+  Prelude.NFData
+    DescribeInstanceEventNotificationAttributesResponse
+  where
+  rnf
+    DescribeInstanceEventNotificationAttributesResponse' {..} =
+      Prelude.rnf instanceTagAttribute
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceEventWindows.hs b/gen/Amazonka/EC2/DescribeInstanceEventWindows.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceEventWindows.hs
@@ -0,0 +1,394 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceEventWindows
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified event windows or all event windows.
+--
+-- If you specify event window IDs, the output includes information for
+-- only the specified event windows. If you specify filters, the output
+-- includes information for only those event windows that meet the filter
+-- criteria. If you do not specify event windows IDs or filters, the output
+-- includes information for all event windows, which can affect
+-- performance. We recommend that you use pagination to ensure that the
+-- operation returns quickly and successfully.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html Define event windows for scheduled events>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInstanceEventWindows
+  ( -- * Creating a Request
+    DescribeInstanceEventWindows (..),
+    newDescribeInstanceEventWindows,
+
+    -- * Request Lenses
+    describeInstanceEventWindows_dryRun,
+    describeInstanceEventWindows_filters,
+    describeInstanceEventWindows_instanceEventWindowIds,
+    describeInstanceEventWindows_maxResults,
+    describeInstanceEventWindows_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInstanceEventWindowsResponse (..),
+    newDescribeInstanceEventWindowsResponse,
+
+    -- * Response Lenses
+    describeInstanceEventWindowsResponse_instanceEventWindows,
+    describeInstanceEventWindowsResponse_nextToken,
+    describeInstanceEventWindowsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Describe instance event windows by InstanceEventWindow.
+--
+-- /See:/ 'newDescribeInstanceEventWindows' smart constructor.
+data DescribeInstanceEventWindows = DescribeInstanceEventWindows'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @dedicated-host-id@ - The event windows associated with the
+    --     specified Dedicated Host ID.
+    --
+    -- -   @event-window-name@ - The event windows associated with the
+    --     specified names.
+    --
+    -- -   @instance-id@ - The event windows associated with the specified
+    --     instance ID.
+    --
+    -- -   @instance-tag@ - The event windows associated with the specified tag
+    --     and value.
+    --
+    -- -   @instance-tag-key@ - The event windows associated with the specified
+    --     tag key, regardless of the value.
+    --
+    -- -   @instance-tag-value@ - The event windows associated with the
+    --     specified tag value, regardless of the key.
+    --
+    -- -   @tag:\<key>@ - The key\/value combination of a tag assigned to the
+    --     event window. 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 @Owner@ and the value @CMX@, specify @tag:Owner@
+    --     for the filter name and @CMX@ for the filter value.
+    --
+    -- -   @tag-key@ - The key of a tag assigned to the event window. Use this
+    --     filter to find all event windows that have a tag with a specific
+    --     key, regardless of the tag value.
+    --
+    -- -   @tag-value@ - The value of a tag assigned to the event window. Use
+    --     this filter to find all event windows that have a tag with a
+    --     specific value, regardless of the tag key.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the event windows.
+    instanceEventWindowIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 20 and 500. You cannot specify this
+    -- parameter and the event window IDs parameter in the same call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceEventWindows' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceEventWindows_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInstanceEventWindows_filters' - One or more filters.
+--
+-- -   @dedicated-host-id@ - The event windows associated with the
+--     specified Dedicated Host ID.
+--
+-- -   @event-window-name@ - The event windows associated with the
+--     specified names.
+--
+-- -   @instance-id@ - The event windows associated with the specified
+--     instance ID.
+--
+-- -   @instance-tag@ - The event windows associated with the specified tag
+--     and value.
+--
+-- -   @instance-tag-key@ - The event windows associated with the specified
+--     tag key, regardless of the value.
+--
+-- -   @instance-tag-value@ - The event windows associated with the
+--     specified tag value, regardless of the key.
+--
+-- -   @tag:\<key>@ - The key\/value combination of a tag assigned to the
+--     event window. 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 @Owner@ and the value @CMX@, specify @tag:Owner@
+--     for the filter name and @CMX@ for the filter value.
+--
+-- -   @tag-key@ - The key of a tag assigned to the event window. Use this
+--     filter to find all event windows that have a tag with a specific
+--     key, regardless of the tag value.
+--
+-- -   @tag-value@ - The value of a tag assigned to the event window. Use
+--     this filter to find all event windows that have a tag with a
+--     specific value, regardless of the tag key.
+--
+-- 'instanceEventWindowIds', 'describeInstanceEventWindows_instanceEventWindowIds' - The IDs of the event windows.
+--
+-- 'maxResults', 'describeInstanceEventWindows_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 20 and 500. You cannot specify this
+-- parameter and the event window IDs parameter in the same call.
+--
+-- 'nextToken', 'describeInstanceEventWindows_nextToken' - The token to request the next page of results.
+newDescribeInstanceEventWindows ::
+  DescribeInstanceEventWindows
+newDescribeInstanceEventWindows =
+  DescribeInstanceEventWindows'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      instanceEventWindowIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceEventWindows_dryRun :: Lens.Lens' DescribeInstanceEventWindows (Prelude.Maybe Prelude.Bool)
+describeInstanceEventWindows_dryRun = Lens.lens (\DescribeInstanceEventWindows' {dryRun} -> dryRun) (\s@DescribeInstanceEventWindows' {} a -> s {dryRun = a} :: DescribeInstanceEventWindows)
+
+-- | One or more filters.
+--
+-- -   @dedicated-host-id@ - The event windows associated with the
+--     specified Dedicated Host ID.
+--
+-- -   @event-window-name@ - The event windows associated with the
+--     specified names.
+--
+-- -   @instance-id@ - The event windows associated with the specified
+--     instance ID.
+--
+-- -   @instance-tag@ - The event windows associated with the specified tag
+--     and value.
+--
+-- -   @instance-tag-key@ - The event windows associated with the specified
+--     tag key, regardless of the value.
+--
+-- -   @instance-tag-value@ - The event windows associated with the
+--     specified tag value, regardless of the key.
+--
+-- -   @tag:\<key>@ - The key\/value combination of a tag assigned to the
+--     event window. 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 @Owner@ and the value @CMX@, specify @tag:Owner@
+--     for the filter name and @CMX@ for the filter value.
+--
+-- -   @tag-key@ - The key of a tag assigned to the event window. Use this
+--     filter to find all event windows that have a tag with a specific
+--     key, regardless of the tag value.
+--
+-- -   @tag-value@ - The value of a tag assigned to the event window. Use
+--     this filter to find all event windows that have a tag with a
+--     specific value, regardless of the tag key.
+describeInstanceEventWindows_filters :: Lens.Lens' DescribeInstanceEventWindows (Prelude.Maybe [Filter])
+describeInstanceEventWindows_filters = Lens.lens (\DescribeInstanceEventWindows' {filters} -> filters) (\s@DescribeInstanceEventWindows' {} a -> s {filters = a} :: DescribeInstanceEventWindows) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the event windows.
+describeInstanceEventWindows_instanceEventWindowIds :: Lens.Lens' DescribeInstanceEventWindows (Prelude.Maybe [Prelude.Text])
+describeInstanceEventWindows_instanceEventWindowIds = Lens.lens (\DescribeInstanceEventWindows' {instanceEventWindowIds} -> instanceEventWindowIds) (\s@DescribeInstanceEventWindows' {} a -> s {instanceEventWindowIds = a} :: DescribeInstanceEventWindows) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 20 and 500. You cannot specify this
+-- parameter and the event window IDs parameter in the same call.
+describeInstanceEventWindows_maxResults :: Lens.Lens' DescribeInstanceEventWindows (Prelude.Maybe Prelude.Natural)
+describeInstanceEventWindows_maxResults = Lens.lens (\DescribeInstanceEventWindows' {maxResults} -> maxResults) (\s@DescribeInstanceEventWindows' {} a -> s {maxResults = a} :: DescribeInstanceEventWindows)
+
+-- | The token to request the next page of results.
+describeInstanceEventWindows_nextToken :: Lens.Lens' DescribeInstanceEventWindows (Prelude.Maybe Prelude.Text)
+describeInstanceEventWindows_nextToken = Lens.lens (\DescribeInstanceEventWindows' {nextToken} -> nextToken) (\s@DescribeInstanceEventWindows' {} a -> s {nextToken = a} :: DescribeInstanceEventWindows)
+
+instance Core.AWSPager DescribeInstanceEventWindows where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceEventWindowsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceEventWindowsResponse_instanceEventWindows
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInstanceEventWindows_nextToken
+          Lens..~ rs
+          Lens.^? describeInstanceEventWindowsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeInstanceEventWindows where
+  type
+    AWSResponse DescribeInstanceEventWindows =
+      DescribeInstanceEventWindowsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceEventWindowsResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceEventWindowSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeInstanceEventWindows
+  where
+  hashWithSalt _salt DescribeInstanceEventWindows' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` instanceEventWindowIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeInstanceEventWindows where
+  rnf DescribeInstanceEventWindows' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf instanceEventWindowIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeInstanceEventWindows where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInstanceEventWindows where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInstanceEventWindows where
+  toQuery DescribeInstanceEventWindows' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeInstanceEventWindows" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InstanceEventWindowId"
+              Prelude.<$> instanceEventWindowIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInstanceEventWindowsResponse' smart constructor.
+data DescribeInstanceEventWindowsResponse = DescribeInstanceEventWindowsResponse'
+  { -- | Information about the event windows.
+    instanceEventWindows :: Prelude.Maybe [InstanceEventWindow],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceEventWindowsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindows', 'describeInstanceEventWindowsResponse_instanceEventWindows' - Information about the event windows.
+--
+-- 'nextToken', 'describeInstanceEventWindowsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeInstanceEventWindowsResponse_httpStatus' - The response's http status code.
+newDescribeInstanceEventWindowsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceEventWindowsResponse
+newDescribeInstanceEventWindowsResponse pHttpStatus_ =
+  DescribeInstanceEventWindowsResponse'
+    { instanceEventWindows =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the event windows.
+describeInstanceEventWindowsResponse_instanceEventWindows :: Lens.Lens' DescribeInstanceEventWindowsResponse (Prelude.Maybe [InstanceEventWindow])
+describeInstanceEventWindowsResponse_instanceEventWindows = Lens.lens (\DescribeInstanceEventWindowsResponse' {instanceEventWindows} -> instanceEventWindows) (\s@DescribeInstanceEventWindowsResponse' {} a -> s {instanceEventWindows = a} :: DescribeInstanceEventWindowsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInstanceEventWindowsResponse_nextToken :: Lens.Lens' DescribeInstanceEventWindowsResponse (Prelude.Maybe Prelude.Text)
+describeInstanceEventWindowsResponse_nextToken = Lens.lens (\DescribeInstanceEventWindowsResponse' {nextToken} -> nextToken) (\s@DescribeInstanceEventWindowsResponse' {} a -> s {nextToken = a} :: DescribeInstanceEventWindowsResponse)
+
+-- | The response's http status code.
+describeInstanceEventWindowsResponse_httpStatus :: Lens.Lens' DescribeInstanceEventWindowsResponse Prelude.Int
+describeInstanceEventWindowsResponse_httpStatus = Lens.lens (\DescribeInstanceEventWindowsResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceEventWindowsResponse' {} a -> s {httpStatus = a} :: DescribeInstanceEventWindowsResponse)
+
+instance
+  Prelude.NFData
+    DescribeInstanceEventWindowsResponse
+  where
+  rnf DescribeInstanceEventWindowsResponse' {..} =
+    Prelude.rnf instanceEventWindows
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceStatus.hs b/gen/Amazonka/EC2/DescribeInstanceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceStatus.hs
@@ -0,0 +1,474 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the status of the specified instances or all of your
+-- instances. By default, only running instances are described, unless you
+-- specifically indicate to return the status of all instances.
+--
+-- Instance status includes the following components:
+--
+-- -   __Status checks__ - Amazon EC2 performs status checks on running EC2
+--     instances to identify hardware and software issues. For more
+--     information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html Status checks for your instances>
+--     and
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html Troubleshoot instances with failed status checks>
+--     in the /Amazon EC2 User Guide/.
+--
+-- -   __Scheduled events__ - Amazon EC2 can schedule events (such as
+--     reboot, stop, or terminate) for your instances related to hardware
+--     issues, software updates, or system maintenance. For more
+--     information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html Scheduled events for your instances>
+--     in the /Amazon EC2 User Guide/.
+--
+-- -   __Instance state__ - You can manage your instances from the moment
+--     you launch them through their termination. For more information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance lifecycle>
+--     in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInstanceStatus
+  ( -- * Creating a Request
+    DescribeInstanceStatus (..),
+    newDescribeInstanceStatus,
+
+    -- * Request Lenses
+    describeInstanceStatus_dryRun,
+    describeInstanceStatus_filters,
+    describeInstanceStatus_includeAllInstances,
+    describeInstanceStatus_instanceIds,
+    describeInstanceStatus_maxResults,
+    describeInstanceStatus_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInstanceStatusResponse (..),
+    newDescribeInstanceStatusResponse,
+
+    -- * Response Lenses
+    describeInstanceStatusResponse_instanceStatuses,
+    describeInstanceStatusResponse_nextToken,
+    describeInstanceStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstanceStatus' smart constructor.
+data DescribeInstanceStatus = DescribeInstanceStatus'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone of the instance.
+    --
+    -- -   @event.code@ - The code for the scheduled event (@instance-reboot@ |
+    --     @system-reboot@ | @system-maintenance@ | @instance-retirement@ |
+    --     @instance-stop@).
+    --
+    -- -   @event.description@ - A description of the event.
+    --
+    -- -   @event.instance-event-id@ - The ID of the event whose date and time
+    --     you are modifying.
+    --
+    -- -   @event.not-after@ - The latest end time for the scheduled event (for
+    --     example, @2014-09-15T17:15:20.000Z@).
+    --
+    -- -   @event.not-before@ - The earliest start time for the scheduled event
+    --     (for example, @2014-09-15T17:15:20.000Z@).
+    --
+    -- -   @event.not-before-deadline@ - The deadline for starting the event
+    --     (for example, @2014-09-15T17:15:20.000Z@).
+    --
+    -- -   @instance-state-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).
+    --
+    -- -   @instance-state-name@ - The state of the instance (@pending@ |
+    --     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
+    --     @stopped@).
+    --
+    -- -   @instance-status.reachability@ - Filters on instance status where
+    --     the name is @reachability@ (@passed@ | @failed@ | @initializing@ |
+    --     @insufficient-data@).
+    --
+    -- -   @instance-status.status@ - The status of the instance (@ok@ |
+    --     @impaired@ | @initializing@ | @insufficient-data@ |
+    --     @not-applicable@).
+    --
+    -- -   @system-status.reachability@ - Filters on system status where the
+    --     name is @reachability@ (@passed@ | @failed@ | @initializing@ |
+    --     @insufficient-data@).
+    --
+    -- -   @system-status.status@ - The system status of the instance (@ok@ |
+    --     @impaired@ | @initializing@ | @insufficient-data@ |
+    --     @not-applicable@).
+    filters :: Prelude.Maybe [Filter],
+    -- | When @true@, includes the health status for all instances. When @false@,
+    -- includes the health status for running instances only.
+    --
+    -- Default: @false@
+    includeAllInstances :: Prelude.Maybe Prelude.Bool,
+    -- | The instance IDs.
+    --
+    -- Default: Describes all your instances.
+    --
+    -- Constraints: Maximum 100 explicitly specified instance IDs.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 5 and 1000. You cannot specify this
+    -- parameter and the instance IDs parameter in the same call.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceStatus_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInstanceStatus_filters' - The filters.
+--
+-- -   @availability-zone@ - The Availability Zone of the instance.
+--
+-- -   @event.code@ - The code for the scheduled event (@instance-reboot@ |
+--     @system-reboot@ | @system-maintenance@ | @instance-retirement@ |
+--     @instance-stop@).
+--
+-- -   @event.description@ - A description of the event.
+--
+-- -   @event.instance-event-id@ - The ID of the event whose date and time
+--     you are modifying.
+--
+-- -   @event.not-after@ - The latest end time for the scheduled event (for
+--     example, @2014-09-15T17:15:20.000Z@).
+--
+-- -   @event.not-before@ - The earliest start time for the scheduled event
+--     (for example, @2014-09-15T17:15:20.000Z@).
+--
+-- -   @event.not-before-deadline@ - The deadline for starting the event
+--     (for example, @2014-09-15T17:15:20.000Z@).
+--
+-- -   @instance-state-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).
+--
+-- -   @instance-state-name@ - The state of the instance (@pending@ |
+--     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
+--     @stopped@).
+--
+-- -   @instance-status.reachability@ - Filters on instance status where
+--     the name is @reachability@ (@passed@ | @failed@ | @initializing@ |
+--     @insufficient-data@).
+--
+-- -   @instance-status.status@ - The status of the instance (@ok@ |
+--     @impaired@ | @initializing@ | @insufficient-data@ |
+--     @not-applicable@).
+--
+-- -   @system-status.reachability@ - Filters on system status where the
+--     name is @reachability@ (@passed@ | @failed@ | @initializing@ |
+--     @insufficient-data@).
+--
+-- -   @system-status.status@ - The system status of the instance (@ok@ |
+--     @impaired@ | @initializing@ | @insufficient-data@ |
+--     @not-applicable@).
+--
+-- 'includeAllInstances', 'describeInstanceStatus_includeAllInstances' - When @true@, includes the health status for all instances. When @false@,
+-- includes the health status for running instances only.
+--
+-- Default: @false@
+--
+-- 'instanceIds', 'describeInstanceStatus_instanceIds' - The instance IDs.
+--
+-- Default: Describes all your instances.
+--
+-- Constraints: Maximum 100 explicitly specified instance IDs.
+--
+-- 'maxResults', 'describeInstanceStatus_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000. You cannot specify this
+-- parameter and the instance IDs parameter in the same call.
+--
+-- 'nextToken', 'describeInstanceStatus_nextToken' - The token to retrieve the next page of results.
+newDescribeInstanceStatus ::
+  DescribeInstanceStatus
+newDescribeInstanceStatus =
+  DescribeInstanceStatus'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      includeAllInstances = Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceStatus_dryRun :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Bool)
+describeInstanceStatus_dryRun = Lens.lens (\DescribeInstanceStatus' {dryRun} -> dryRun) (\s@DescribeInstanceStatus' {} a -> s {dryRun = a} :: DescribeInstanceStatus)
+
+-- | The filters.
+--
+-- -   @availability-zone@ - The Availability Zone of the instance.
+--
+-- -   @event.code@ - The code for the scheduled event (@instance-reboot@ |
+--     @system-reboot@ | @system-maintenance@ | @instance-retirement@ |
+--     @instance-stop@).
+--
+-- -   @event.description@ - A description of the event.
+--
+-- -   @event.instance-event-id@ - The ID of the event whose date and time
+--     you are modifying.
+--
+-- -   @event.not-after@ - The latest end time for the scheduled event (for
+--     example, @2014-09-15T17:15:20.000Z@).
+--
+-- -   @event.not-before@ - The earliest start time for the scheduled event
+--     (for example, @2014-09-15T17:15:20.000Z@).
+--
+-- -   @event.not-before-deadline@ - The deadline for starting the event
+--     (for example, @2014-09-15T17:15:20.000Z@).
+--
+-- -   @instance-state-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).
+--
+-- -   @instance-state-name@ - The state of the instance (@pending@ |
+--     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
+--     @stopped@).
+--
+-- -   @instance-status.reachability@ - Filters on instance status where
+--     the name is @reachability@ (@passed@ | @failed@ | @initializing@ |
+--     @insufficient-data@).
+--
+-- -   @instance-status.status@ - The status of the instance (@ok@ |
+--     @impaired@ | @initializing@ | @insufficient-data@ |
+--     @not-applicable@).
+--
+-- -   @system-status.reachability@ - Filters on system status where the
+--     name is @reachability@ (@passed@ | @failed@ | @initializing@ |
+--     @insufficient-data@).
+--
+-- -   @system-status.status@ - The system status of the instance (@ok@ |
+--     @impaired@ | @initializing@ | @insufficient-data@ |
+--     @not-applicable@).
+describeInstanceStatus_filters :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe [Filter])
+describeInstanceStatus_filters = Lens.lens (\DescribeInstanceStatus' {filters} -> filters) (\s@DescribeInstanceStatus' {} a -> s {filters = a} :: DescribeInstanceStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | When @true@, includes the health status for all instances. When @false@,
+-- includes the health status for running instances only.
+--
+-- Default: @false@
+describeInstanceStatus_includeAllInstances :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Bool)
+describeInstanceStatus_includeAllInstances = Lens.lens (\DescribeInstanceStatus' {includeAllInstances} -> includeAllInstances) (\s@DescribeInstanceStatus' {} a -> s {includeAllInstances = a} :: DescribeInstanceStatus)
+
+-- | The instance IDs.
+--
+-- Default: Describes all your instances.
+--
+-- Constraints: Maximum 100 explicitly specified instance IDs.
+describeInstanceStatus_instanceIds :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe [Prelude.Text])
+describeInstanceStatus_instanceIds = Lens.lens (\DescribeInstanceStatus' {instanceIds} -> instanceIds) (\s@DescribeInstanceStatus' {} a -> s {instanceIds = a} :: DescribeInstanceStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000. You cannot specify this
+-- parameter and the instance IDs parameter in the same call.
+describeInstanceStatus_maxResults :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Int)
+describeInstanceStatus_maxResults = Lens.lens (\DescribeInstanceStatus' {maxResults} -> maxResults) (\s@DescribeInstanceStatus' {} a -> s {maxResults = a} :: DescribeInstanceStatus)
+
+-- | The token to retrieve the next page of results.
+describeInstanceStatus_nextToken :: Lens.Lens' DescribeInstanceStatus (Prelude.Maybe Prelude.Text)
+describeInstanceStatus_nextToken = Lens.lens (\DescribeInstanceStatus' {nextToken} -> nextToken) (\s@DescribeInstanceStatus' {} a -> s {nextToken = a} :: DescribeInstanceStatus)
+
+instance Core.AWSPager DescribeInstanceStatus where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceStatusResponse_instanceStatuses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInstanceStatus_nextToken
+          Lens..~ rs
+          Lens.^? describeInstanceStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeInstanceStatus where
+  type
+    AWSResponse DescribeInstanceStatus =
+      DescribeInstanceStatusResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceStatusResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceStatusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInstanceStatus where
+  hashWithSalt _salt DescribeInstanceStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` includeAllInstances
+      `Prelude.hashWithSalt` instanceIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeInstanceStatus where
+  rnf DescribeInstanceStatus' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf includeAllInstances
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeInstanceStatus where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInstanceStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInstanceStatus where
+  toQuery DescribeInstanceStatus' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeInstanceStatus" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "IncludeAllInstances" Data.=: includeAllInstances,
+        Data.toQuery
+          ( Data.toQueryList "InstanceId"
+              Prelude.<$> instanceIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInstanceStatusResponse' smart constructor.
+data DescribeInstanceStatusResponse = DescribeInstanceStatusResponse'
+  { -- | Information about the status of the instances.
+    instanceStatuses :: Prelude.Maybe [InstanceStatus],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceStatuses', 'describeInstanceStatusResponse_instanceStatuses' - Information about the status of the instances.
+--
+-- 'nextToken', 'describeInstanceStatusResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeInstanceStatusResponse_httpStatus' - The response's http status code.
+newDescribeInstanceStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceStatusResponse
+newDescribeInstanceStatusResponse pHttpStatus_ =
+  DescribeInstanceStatusResponse'
+    { instanceStatuses =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the status of the instances.
+describeInstanceStatusResponse_instanceStatuses :: Lens.Lens' DescribeInstanceStatusResponse (Prelude.Maybe [InstanceStatus])
+describeInstanceStatusResponse_instanceStatuses = Lens.lens (\DescribeInstanceStatusResponse' {instanceStatuses} -> instanceStatuses) (\s@DescribeInstanceStatusResponse' {} a -> s {instanceStatuses = a} :: DescribeInstanceStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInstanceStatusResponse_nextToken :: Lens.Lens' DescribeInstanceStatusResponse (Prelude.Maybe Prelude.Text)
+describeInstanceStatusResponse_nextToken = Lens.lens (\DescribeInstanceStatusResponse' {nextToken} -> nextToken) (\s@DescribeInstanceStatusResponse' {} a -> s {nextToken = a} :: DescribeInstanceStatusResponse)
+
+-- | The response's http status code.
+describeInstanceStatusResponse_httpStatus :: Lens.Lens' DescribeInstanceStatusResponse Prelude.Int
+describeInstanceStatusResponse_httpStatus = Lens.lens (\DescribeInstanceStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceStatusResponse' {} a -> s {httpStatus = a} :: DescribeInstanceStatusResponse)
+
+instance
+  Prelude.NFData
+    DescribeInstanceStatusResponse
+  where
+  rnf DescribeInstanceStatusResponse' {..} =
+    Prelude.rnf instanceStatuses
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceTypeOfferings.hs b/gen/Amazonka/EC2/DescribeInstanceTypeOfferings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceTypeOfferings.hs
@@ -0,0 +1,302 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceTypeOfferings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of all instance types offered. The results can be
+-- filtered by location (Region or Availability Zone). If no location is
+-- specified, the instance types offered in the current Region are
+-- returned.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInstanceTypeOfferings
+  ( -- * Creating a Request
+    DescribeInstanceTypeOfferings (..),
+    newDescribeInstanceTypeOfferings,
+
+    -- * Request Lenses
+    describeInstanceTypeOfferings_dryRun,
+    describeInstanceTypeOfferings_filters,
+    describeInstanceTypeOfferings_locationType,
+    describeInstanceTypeOfferings_maxResults,
+    describeInstanceTypeOfferings_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInstanceTypeOfferingsResponse (..),
+    newDescribeInstanceTypeOfferingsResponse,
+
+    -- * Response Lenses
+    describeInstanceTypeOfferingsResponse_instanceTypeOfferings,
+    describeInstanceTypeOfferingsResponse_nextToken,
+    describeInstanceTypeOfferingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstanceTypeOfferings' smart constructor.
+data DescribeInstanceTypeOfferings = DescribeInstanceTypeOfferings'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @location@ - This depends on the location type. For example, if the
+    --     location type is @region@ (default), the location is the Region code
+    --     (for example, @us-east-2@.)
+    --
+    -- -   @instance-type@ - The instance type. For example, @c5.2xlarge@.
+    filters :: Prelude.Maybe [Filter],
+    -- | The location type.
+    locationType :: Prelude.Maybe LocationType,
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the next token value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceTypeOfferings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceTypeOfferings_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInstanceTypeOfferings_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @location@ - This depends on the location type. For example, if the
+--     location type is @region@ (default), the location is the Region code
+--     (for example, @us-east-2@.)
+--
+-- -   @instance-type@ - The instance type. For example, @c5.2xlarge@.
+--
+-- 'locationType', 'describeInstanceTypeOfferings_locationType' - The location type.
+--
+-- 'maxResults', 'describeInstanceTypeOfferings_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the next token value.
+--
+-- 'nextToken', 'describeInstanceTypeOfferings_nextToken' - The token to retrieve the next page of results.
+newDescribeInstanceTypeOfferings ::
+  DescribeInstanceTypeOfferings
+newDescribeInstanceTypeOfferings =
+  DescribeInstanceTypeOfferings'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      locationType = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceTypeOfferings_dryRun :: Lens.Lens' DescribeInstanceTypeOfferings (Prelude.Maybe Prelude.Bool)
+describeInstanceTypeOfferings_dryRun = Lens.lens (\DescribeInstanceTypeOfferings' {dryRun} -> dryRun) (\s@DescribeInstanceTypeOfferings' {} a -> s {dryRun = a} :: DescribeInstanceTypeOfferings)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @location@ - This depends on the location type. For example, if the
+--     location type is @region@ (default), the location is the Region code
+--     (for example, @us-east-2@.)
+--
+-- -   @instance-type@ - The instance type. For example, @c5.2xlarge@.
+describeInstanceTypeOfferings_filters :: Lens.Lens' DescribeInstanceTypeOfferings (Prelude.Maybe [Filter])
+describeInstanceTypeOfferings_filters = Lens.lens (\DescribeInstanceTypeOfferings' {filters} -> filters) (\s@DescribeInstanceTypeOfferings' {} a -> s {filters = a} :: DescribeInstanceTypeOfferings) Prelude.. Lens.mapping Lens.coerced
+
+-- | The location type.
+describeInstanceTypeOfferings_locationType :: Lens.Lens' DescribeInstanceTypeOfferings (Prelude.Maybe LocationType)
+describeInstanceTypeOfferings_locationType = Lens.lens (\DescribeInstanceTypeOfferings' {locationType} -> locationType) (\s@DescribeInstanceTypeOfferings' {} a -> s {locationType = a} :: DescribeInstanceTypeOfferings)
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the next token value.
+describeInstanceTypeOfferings_maxResults :: Lens.Lens' DescribeInstanceTypeOfferings (Prelude.Maybe Prelude.Natural)
+describeInstanceTypeOfferings_maxResults = Lens.lens (\DescribeInstanceTypeOfferings' {maxResults} -> maxResults) (\s@DescribeInstanceTypeOfferings' {} a -> s {maxResults = a} :: DescribeInstanceTypeOfferings)
+
+-- | The token to retrieve the next page of results.
+describeInstanceTypeOfferings_nextToken :: Lens.Lens' DescribeInstanceTypeOfferings (Prelude.Maybe Prelude.Text)
+describeInstanceTypeOfferings_nextToken = Lens.lens (\DescribeInstanceTypeOfferings' {nextToken} -> nextToken) (\s@DescribeInstanceTypeOfferings' {} a -> s {nextToken = a} :: DescribeInstanceTypeOfferings)
+
+instance Core.AWSPager DescribeInstanceTypeOfferings where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceTypeOfferingsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceTypeOfferingsResponse_instanceTypeOfferings
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInstanceTypeOfferings_nextToken
+          Lens..~ rs
+          Lens.^? describeInstanceTypeOfferingsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeInstanceTypeOfferings
+  where
+  type
+    AWSResponse DescribeInstanceTypeOfferings =
+      DescribeInstanceTypeOfferingsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceTypeOfferingsResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceTypeOfferingSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeInstanceTypeOfferings
+  where
+  hashWithSalt _salt DescribeInstanceTypeOfferings' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` locationType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeInstanceTypeOfferings where
+  rnf DescribeInstanceTypeOfferings' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf locationType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeInstanceTypeOfferings where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInstanceTypeOfferings where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInstanceTypeOfferings where
+  toQuery DescribeInstanceTypeOfferings' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeInstanceTypeOfferings" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "LocationType" Data.=: locationType,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInstanceTypeOfferingsResponse' smart constructor.
+data DescribeInstanceTypeOfferingsResponse = DescribeInstanceTypeOfferingsResponse'
+  { -- | The instance types offered.
+    instanceTypeOfferings :: Prelude.Maybe [InstanceTypeOffering],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceTypeOfferingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceTypeOfferings', 'describeInstanceTypeOfferingsResponse_instanceTypeOfferings' - The instance types offered.
+--
+-- 'nextToken', 'describeInstanceTypeOfferingsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeInstanceTypeOfferingsResponse_httpStatus' - The response's http status code.
+newDescribeInstanceTypeOfferingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceTypeOfferingsResponse
+newDescribeInstanceTypeOfferingsResponse pHttpStatus_ =
+  DescribeInstanceTypeOfferingsResponse'
+    { instanceTypeOfferings =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The instance types offered.
+describeInstanceTypeOfferingsResponse_instanceTypeOfferings :: Lens.Lens' DescribeInstanceTypeOfferingsResponse (Prelude.Maybe [InstanceTypeOffering])
+describeInstanceTypeOfferingsResponse_instanceTypeOfferings = Lens.lens (\DescribeInstanceTypeOfferingsResponse' {instanceTypeOfferings} -> instanceTypeOfferings) (\s@DescribeInstanceTypeOfferingsResponse' {} a -> s {instanceTypeOfferings = a} :: DescribeInstanceTypeOfferingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInstanceTypeOfferingsResponse_nextToken :: Lens.Lens' DescribeInstanceTypeOfferingsResponse (Prelude.Maybe Prelude.Text)
+describeInstanceTypeOfferingsResponse_nextToken = Lens.lens (\DescribeInstanceTypeOfferingsResponse' {nextToken} -> nextToken) (\s@DescribeInstanceTypeOfferingsResponse' {} a -> s {nextToken = a} :: DescribeInstanceTypeOfferingsResponse)
+
+-- | The response's http status code.
+describeInstanceTypeOfferingsResponse_httpStatus :: Lens.Lens' DescribeInstanceTypeOfferingsResponse Prelude.Int
+describeInstanceTypeOfferingsResponse_httpStatus = Lens.lens (\DescribeInstanceTypeOfferingsResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceTypeOfferingsResponse' {} a -> s {httpStatus = a} :: DescribeInstanceTypeOfferingsResponse)
+
+instance
+  Prelude.NFData
+    DescribeInstanceTypeOfferingsResponse
+  where
+  rnf DescribeInstanceTypeOfferingsResponse' {..} =
+    Prelude.rnf instanceTypeOfferings
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstanceTypes.hs b/gen/Amazonka/EC2/DescribeInstanceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstanceTypes.hs
@@ -0,0 +1,721 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstanceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the details of the instance types that are offered in a
+-- location. The results can be filtered by the attributes of the instance
+-- types.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInstanceTypes
+  ( -- * Creating a Request
+    DescribeInstanceTypes (..),
+    newDescribeInstanceTypes,
+
+    -- * Request Lenses
+    describeInstanceTypes_dryRun,
+    describeInstanceTypes_filters,
+    describeInstanceTypes_instanceTypes,
+    describeInstanceTypes_maxResults,
+    describeInstanceTypes_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInstanceTypesResponse (..),
+    newDescribeInstanceTypesResponse,
+
+    -- * Response Lenses
+    describeInstanceTypesResponse_instanceTypes,
+    describeInstanceTypesResponse_nextToken,
+    describeInstanceTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstanceTypes' smart constructor.
+data DescribeInstanceTypes = DescribeInstanceTypes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    --
+    -- -   @auto-recovery-supported@ - Indicates whether auto recovery is
+    --     supported (@true@ | @false@).
+    --
+    -- -   @bare-metal@ - Indicates whether it is a bare metal instance type
+    --     (@true@ | @false@).
+    --
+    -- -   @burstable-performance-supported@ - Indicates whether it is a
+    --     burstable performance instance type (@true@ | @false@).
+    --
+    -- -   @current-generation@ - Indicates whether this instance type is the
+    --     latest generation instance type of an instance family (@true@ |
+    --     @false@).
+    --
+    -- -   @ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps@ - The
+    --     baseline bandwidth performance for an EBS-optimized instance type,
+    --     in Mbps.
+    --
+    -- -   @ebs-info.ebs-optimized-info.baseline-iops@ - The baseline
+    --     input\/output storage operations per second for an EBS-optimized
+    --     instance type.
+    --
+    -- -   @ebs-info.ebs-optimized-info.baseline-throughput-in-mbps@ - The
+    --     baseline throughput performance for an EBS-optimized instance type,
+    --     in MB\/s.
+    --
+    -- -   @ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps@ - The
+    --     maximum bandwidth performance for an EBS-optimized instance type, in
+    --     Mbps.
+    --
+    -- -   @ebs-info.ebs-optimized-info.maximum-iops@ - The maximum
+    --     input\/output storage operations per second for an EBS-optimized
+    --     instance type.
+    --
+    -- -   @ebs-info.ebs-optimized-info.maximum-throughput-in-mbps@ - The
+    --     maximum throughput performance for an EBS-optimized instance type,
+    --     in MB\/s.
+    --
+    -- -   @ebs-info.ebs-optimized-support@ - Indicates whether the instance
+    --     type is EBS-optimized (@supported@ | @unsupported@ | @default@).
+    --
+    -- -   @ebs-info.encryption-support@ - Indicates whether EBS encryption is
+    --     supported (@supported@ | @unsupported@).
+    --
+    -- -   @ebs-info.nvme-support@ - Indicates whether non-volatile memory
+    --     express (NVMe) is supported for EBS volumes (@required@ |
+    --     @supported@ | @unsupported@).
+    --
+    -- -   @free-tier-eligible@ - Indicates whether the instance type is
+    --     eligible to use in the free tier (@true@ | @false@).
+    --
+    -- -   @hibernation-supported@ - Indicates whether On-Demand hibernation is
+    --     supported (@true@ | @false@).
+    --
+    -- -   @hypervisor@ - The hypervisor (@nitro@ | @xen@).
+    --
+    -- -   @instance-storage-info.disk.count@ - The number of local disks.
+    --
+    -- -   @instance-storage-info.disk.size-in-gb@ - The storage size of each
+    --     instance storage disk, in GB.
+    --
+    -- -   @instance-storage-info.disk.type@ - The storage technology for the
+    --     local instance storage disks (@hdd@ | @ssd@).
+    --
+    -- -   @instance-storage-info.encryption-support@ - Indicates whether data
+    --     is encrypted at rest (@required@ | @supported@ | @unsupported@).
+    --
+    -- -   @instance-storage-info.nvme-support@ - Indicates whether
+    --     non-volatile memory express (NVMe) is supported for instance store
+    --     (@required@ | @supported@ | @unsupported@).
+    --
+    -- -   @instance-storage-info.total-size-in-gb@ - The total amount of
+    --     storage available from all local instance storage, in GB.
+    --
+    -- -   @instance-storage-supported@ - Indicates whether the instance type
+    --     has local instance storage (@true@ | @false@).
+    --
+    -- -   @instance-type@ - The instance type (for example @c5.2xlarge@ or
+    --     c5*).
+    --
+    -- -   @memory-info.size-in-mib@ - The memory size.
+    --
+    -- -   @network-info.efa-info.maximum-efa-interfaces@ - The maximum number
+    --     of Elastic Fabric Adapters (EFAs) per instance.
+    --
+    -- -   @network-info.efa-supported@ - Indicates whether the instance type
+    --     supports Elastic Fabric Adapter (EFA) (@true@ | @false@).
+    --
+    -- -   @network-info.ena-support@ - Indicates whether Elastic Network
+    --     Adapter (ENA) is supported or required (@required@ | @supported@ |
+    --     @unsupported@).
+    --
+    -- -   @network-info.encryption-in-transit-supported@ - Indicates whether
+    --     the instance type automatically encrypts in-transit traffic between
+    --     instances (@true@ | @false@).
+    --
+    -- -   @network-info.ipv4-addresses-per-interface@ - The maximum number of
+    --     private IPv4 addresses per network interface.
+    --
+    -- -   @network-info.ipv6-addresses-per-interface@ - The maximum number of
+    --     private IPv6 addresses per network interface.
+    --
+    -- -   @network-info.ipv6-supported@ - Indicates whether the instance type
+    --     supports IPv6 (@true@ | @false@).
+    --
+    -- -   @network-info.maximum-network-cards@ - The maximum number of network
+    --     cards per instance.
+    --
+    -- -   @network-info.maximum-network-interfaces@ - The maximum number of
+    --     network interfaces per instance.
+    --
+    -- -   @network-info.network-performance@ - The network performance (for
+    --     example, \"25 Gigabit\").
+    --
+    -- -   @processor-info.supported-architecture@ - The CPU architecture
+    --     (@arm64@ | @i386@ | @x86_64@).
+    --
+    -- -   @processor-info.sustained-clock-speed-in-ghz@ - The CPU clock speed,
+    --     in GHz.
+    --
+    -- -   @supported-boot-mode@ - The boot mode (@legacy-bios@ | @uefi@).
+    --
+    -- -   @supported-root-device-type@ - The root device type (@ebs@ |
+    --     @instance-store@).
+    --
+    -- -   @supported-usage-class@ - The usage class (@on-demand@ | @spot@).
+    --
+    -- -   @supported-virtualization-type@ - The virtualization type (@hvm@ |
+    --     @paravirtual@).
+    --
+    -- -   @vcpu-info.default-cores@ - The default number of cores for the
+    --     instance type.
+    --
+    -- -   @vcpu-info.default-threads-per-core@ - The default number of threads
+    --     per core for the instance type.
+    --
+    -- -   @vcpu-info.default-vcpus@ - The default number of vCPUs for the
+    --     instance type.
+    --
+    -- -   @vcpu-info.valid-cores@ - The number of cores that can be configured
+    --     for the instance type.
+    --
+    -- -   @vcpu-info.valid-threads-per-core@ - The number of threads per core
+    --     that can be configured for the instance type. For example, \"1\" or
+    --     \"1,2\".
+    filters :: Prelude.Maybe [Filter],
+    -- | The instance types. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    instanceTypes :: Prelude.Maybe [InstanceType],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the next token value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceTypes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstanceTypes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInstanceTypes_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @auto-recovery-supported@ - Indicates whether auto recovery is
+--     supported (@true@ | @false@).
+--
+-- -   @bare-metal@ - Indicates whether it is a bare metal instance type
+--     (@true@ | @false@).
+--
+-- -   @burstable-performance-supported@ - Indicates whether it is a
+--     burstable performance instance type (@true@ | @false@).
+--
+-- -   @current-generation@ - Indicates whether this instance type is the
+--     latest generation instance type of an instance family (@true@ |
+--     @false@).
+--
+-- -   @ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps@ - The
+--     baseline bandwidth performance for an EBS-optimized instance type,
+--     in Mbps.
+--
+-- -   @ebs-info.ebs-optimized-info.baseline-iops@ - The baseline
+--     input\/output storage operations per second for an EBS-optimized
+--     instance type.
+--
+-- -   @ebs-info.ebs-optimized-info.baseline-throughput-in-mbps@ - The
+--     baseline throughput performance for an EBS-optimized instance type,
+--     in MB\/s.
+--
+-- -   @ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps@ - The
+--     maximum bandwidth performance for an EBS-optimized instance type, in
+--     Mbps.
+--
+-- -   @ebs-info.ebs-optimized-info.maximum-iops@ - The maximum
+--     input\/output storage operations per second for an EBS-optimized
+--     instance type.
+--
+-- -   @ebs-info.ebs-optimized-info.maximum-throughput-in-mbps@ - The
+--     maximum throughput performance for an EBS-optimized instance type,
+--     in MB\/s.
+--
+-- -   @ebs-info.ebs-optimized-support@ - Indicates whether the instance
+--     type is EBS-optimized (@supported@ | @unsupported@ | @default@).
+--
+-- -   @ebs-info.encryption-support@ - Indicates whether EBS encryption is
+--     supported (@supported@ | @unsupported@).
+--
+-- -   @ebs-info.nvme-support@ - Indicates whether non-volatile memory
+--     express (NVMe) is supported for EBS volumes (@required@ |
+--     @supported@ | @unsupported@).
+--
+-- -   @free-tier-eligible@ - Indicates whether the instance type is
+--     eligible to use in the free tier (@true@ | @false@).
+--
+-- -   @hibernation-supported@ - Indicates whether On-Demand hibernation is
+--     supported (@true@ | @false@).
+--
+-- -   @hypervisor@ - The hypervisor (@nitro@ | @xen@).
+--
+-- -   @instance-storage-info.disk.count@ - The number of local disks.
+--
+-- -   @instance-storage-info.disk.size-in-gb@ - The storage size of each
+--     instance storage disk, in GB.
+--
+-- -   @instance-storage-info.disk.type@ - The storage technology for the
+--     local instance storage disks (@hdd@ | @ssd@).
+--
+-- -   @instance-storage-info.encryption-support@ - Indicates whether data
+--     is encrypted at rest (@required@ | @supported@ | @unsupported@).
+--
+-- -   @instance-storage-info.nvme-support@ - Indicates whether
+--     non-volatile memory express (NVMe) is supported for instance store
+--     (@required@ | @supported@ | @unsupported@).
+--
+-- -   @instance-storage-info.total-size-in-gb@ - The total amount of
+--     storage available from all local instance storage, in GB.
+--
+-- -   @instance-storage-supported@ - Indicates whether the instance type
+--     has local instance storage (@true@ | @false@).
+--
+-- -   @instance-type@ - The instance type (for example @c5.2xlarge@ or
+--     c5*).
+--
+-- -   @memory-info.size-in-mib@ - The memory size.
+--
+-- -   @network-info.efa-info.maximum-efa-interfaces@ - The maximum number
+--     of Elastic Fabric Adapters (EFAs) per instance.
+--
+-- -   @network-info.efa-supported@ - Indicates whether the instance type
+--     supports Elastic Fabric Adapter (EFA) (@true@ | @false@).
+--
+-- -   @network-info.ena-support@ - Indicates whether Elastic Network
+--     Adapter (ENA) is supported or required (@required@ | @supported@ |
+--     @unsupported@).
+--
+-- -   @network-info.encryption-in-transit-supported@ - Indicates whether
+--     the instance type automatically encrypts in-transit traffic between
+--     instances (@true@ | @false@).
+--
+-- -   @network-info.ipv4-addresses-per-interface@ - The maximum number of
+--     private IPv4 addresses per network interface.
+--
+-- -   @network-info.ipv6-addresses-per-interface@ - The maximum number of
+--     private IPv6 addresses per network interface.
+--
+-- -   @network-info.ipv6-supported@ - Indicates whether the instance type
+--     supports IPv6 (@true@ | @false@).
+--
+-- -   @network-info.maximum-network-cards@ - The maximum number of network
+--     cards per instance.
+--
+-- -   @network-info.maximum-network-interfaces@ - The maximum number of
+--     network interfaces per instance.
+--
+-- -   @network-info.network-performance@ - The network performance (for
+--     example, \"25 Gigabit\").
+--
+-- -   @processor-info.supported-architecture@ - The CPU architecture
+--     (@arm64@ | @i386@ | @x86_64@).
+--
+-- -   @processor-info.sustained-clock-speed-in-ghz@ - The CPU clock speed,
+--     in GHz.
+--
+-- -   @supported-boot-mode@ - The boot mode (@legacy-bios@ | @uefi@).
+--
+-- -   @supported-root-device-type@ - The root device type (@ebs@ |
+--     @instance-store@).
+--
+-- -   @supported-usage-class@ - The usage class (@on-demand@ | @spot@).
+--
+-- -   @supported-virtualization-type@ - The virtualization type (@hvm@ |
+--     @paravirtual@).
+--
+-- -   @vcpu-info.default-cores@ - The default number of cores for the
+--     instance type.
+--
+-- -   @vcpu-info.default-threads-per-core@ - The default number of threads
+--     per core for the instance type.
+--
+-- -   @vcpu-info.default-vcpus@ - The default number of vCPUs for the
+--     instance type.
+--
+-- -   @vcpu-info.valid-cores@ - The number of cores that can be configured
+--     for the instance type.
+--
+-- -   @vcpu-info.valid-threads-per-core@ - The number of threads per core
+--     that can be configured for the instance type. For example, \"1\" or
+--     \"1,2\".
+--
+-- 'instanceTypes', 'describeInstanceTypes_instanceTypes' - The instance types. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'maxResults', 'describeInstanceTypes_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the next token value.
+--
+-- 'nextToken', 'describeInstanceTypes_nextToken' - The token to retrieve the next page of results.
+newDescribeInstanceTypes ::
+  DescribeInstanceTypes
+newDescribeInstanceTypes =
+  DescribeInstanceTypes'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstanceTypes_dryRun :: Lens.Lens' DescribeInstanceTypes (Prelude.Maybe Prelude.Bool)
+describeInstanceTypes_dryRun = Lens.lens (\DescribeInstanceTypes' {dryRun} -> dryRun) (\s@DescribeInstanceTypes' {} a -> s {dryRun = a} :: DescribeInstanceTypes)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+--
+-- -   @auto-recovery-supported@ - Indicates whether auto recovery is
+--     supported (@true@ | @false@).
+--
+-- -   @bare-metal@ - Indicates whether it is a bare metal instance type
+--     (@true@ | @false@).
+--
+-- -   @burstable-performance-supported@ - Indicates whether it is a
+--     burstable performance instance type (@true@ | @false@).
+--
+-- -   @current-generation@ - Indicates whether this instance type is the
+--     latest generation instance type of an instance family (@true@ |
+--     @false@).
+--
+-- -   @ebs-info.ebs-optimized-info.baseline-bandwidth-in-mbps@ - The
+--     baseline bandwidth performance for an EBS-optimized instance type,
+--     in Mbps.
+--
+-- -   @ebs-info.ebs-optimized-info.baseline-iops@ - The baseline
+--     input\/output storage operations per second for an EBS-optimized
+--     instance type.
+--
+-- -   @ebs-info.ebs-optimized-info.baseline-throughput-in-mbps@ - The
+--     baseline throughput performance for an EBS-optimized instance type,
+--     in MB\/s.
+--
+-- -   @ebs-info.ebs-optimized-info.maximum-bandwidth-in-mbps@ - The
+--     maximum bandwidth performance for an EBS-optimized instance type, in
+--     Mbps.
+--
+-- -   @ebs-info.ebs-optimized-info.maximum-iops@ - The maximum
+--     input\/output storage operations per second for an EBS-optimized
+--     instance type.
+--
+-- -   @ebs-info.ebs-optimized-info.maximum-throughput-in-mbps@ - The
+--     maximum throughput performance for an EBS-optimized instance type,
+--     in MB\/s.
+--
+-- -   @ebs-info.ebs-optimized-support@ - Indicates whether the instance
+--     type is EBS-optimized (@supported@ | @unsupported@ | @default@).
+--
+-- -   @ebs-info.encryption-support@ - Indicates whether EBS encryption is
+--     supported (@supported@ | @unsupported@).
+--
+-- -   @ebs-info.nvme-support@ - Indicates whether non-volatile memory
+--     express (NVMe) is supported for EBS volumes (@required@ |
+--     @supported@ | @unsupported@).
+--
+-- -   @free-tier-eligible@ - Indicates whether the instance type is
+--     eligible to use in the free tier (@true@ | @false@).
+--
+-- -   @hibernation-supported@ - Indicates whether On-Demand hibernation is
+--     supported (@true@ | @false@).
+--
+-- -   @hypervisor@ - The hypervisor (@nitro@ | @xen@).
+--
+-- -   @instance-storage-info.disk.count@ - The number of local disks.
+--
+-- -   @instance-storage-info.disk.size-in-gb@ - The storage size of each
+--     instance storage disk, in GB.
+--
+-- -   @instance-storage-info.disk.type@ - The storage technology for the
+--     local instance storage disks (@hdd@ | @ssd@).
+--
+-- -   @instance-storage-info.encryption-support@ - Indicates whether data
+--     is encrypted at rest (@required@ | @supported@ | @unsupported@).
+--
+-- -   @instance-storage-info.nvme-support@ - Indicates whether
+--     non-volatile memory express (NVMe) is supported for instance store
+--     (@required@ | @supported@ | @unsupported@).
+--
+-- -   @instance-storage-info.total-size-in-gb@ - The total amount of
+--     storage available from all local instance storage, in GB.
+--
+-- -   @instance-storage-supported@ - Indicates whether the instance type
+--     has local instance storage (@true@ | @false@).
+--
+-- -   @instance-type@ - The instance type (for example @c5.2xlarge@ or
+--     c5*).
+--
+-- -   @memory-info.size-in-mib@ - The memory size.
+--
+-- -   @network-info.efa-info.maximum-efa-interfaces@ - The maximum number
+--     of Elastic Fabric Adapters (EFAs) per instance.
+--
+-- -   @network-info.efa-supported@ - Indicates whether the instance type
+--     supports Elastic Fabric Adapter (EFA) (@true@ | @false@).
+--
+-- -   @network-info.ena-support@ - Indicates whether Elastic Network
+--     Adapter (ENA) is supported or required (@required@ | @supported@ |
+--     @unsupported@).
+--
+-- -   @network-info.encryption-in-transit-supported@ - Indicates whether
+--     the instance type automatically encrypts in-transit traffic between
+--     instances (@true@ | @false@).
+--
+-- -   @network-info.ipv4-addresses-per-interface@ - The maximum number of
+--     private IPv4 addresses per network interface.
+--
+-- -   @network-info.ipv6-addresses-per-interface@ - The maximum number of
+--     private IPv6 addresses per network interface.
+--
+-- -   @network-info.ipv6-supported@ - Indicates whether the instance type
+--     supports IPv6 (@true@ | @false@).
+--
+-- -   @network-info.maximum-network-cards@ - The maximum number of network
+--     cards per instance.
+--
+-- -   @network-info.maximum-network-interfaces@ - The maximum number of
+--     network interfaces per instance.
+--
+-- -   @network-info.network-performance@ - The network performance (for
+--     example, \"25 Gigabit\").
+--
+-- -   @processor-info.supported-architecture@ - The CPU architecture
+--     (@arm64@ | @i386@ | @x86_64@).
+--
+-- -   @processor-info.sustained-clock-speed-in-ghz@ - The CPU clock speed,
+--     in GHz.
+--
+-- -   @supported-boot-mode@ - The boot mode (@legacy-bios@ | @uefi@).
+--
+-- -   @supported-root-device-type@ - The root device type (@ebs@ |
+--     @instance-store@).
+--
+-- -   @supported-usage-class@ - The usage class (@on-demand@ | @spot@).
+--
+-- -   @supported-virtualization-type@ - The virtualization type (@hvm@ |
+--     @paravirtual@).
+--
+-- -   @vcpu-info.default-cores@ - The default number of cores for the
+--     instance type.
+--
+-- -   @vcpu-info.default-threads-per-core@ - The default number of threads
+--     per core for the instance type.
+--
+-- -   @vcpu-info.default-vcpus@ - The default number of vCPUs for the
+--     instance type.
+--
+-- -   @vcpu-info.valid-cores@ - The number of cores that can be configured
+--     for the instance type.
+--
+-- -   @vcpu-info.valid-threads-per-core@ - The number of threads per core
+--     that can be configured for the instance type. For example, \"1\" or
+--     \"1,2\".
+describeInstanceTypes_filters :: Lens.Lens' DescribeInstanceTypes (Prelude.Maybe [Filter])
+describeInstanceTypes_filters = Lens.lens (\DescribeInstanceTypes' {filters} -> filters) (\s@DescribeInstanceTypes' {} a -> s {filters = a} :: DescribeInstanceTypes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance types. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+describeInstanceTypes_instanceTypes :: Lens.Lens' DescribeInstanceTypes (Prelude.Maybe [InstanceType])
+describeInstanceTypes_instanceTypes = Lens.lens (\DescribeInstanceTypes' {instanceTypes} -> instanceTypes) (\s@DescribeInstanceTypes' {} a -> s {instanceTypes = a} :: DescribeInstanceTypes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the next token value.
+describeInstanceTypes_maxResults :: Lens.Lens' DescribeInstanceTypes (Prelude.Maybe Prelude.Natural)
+describeInstanceTypes_maxResults = Lens.lens (\DescribeInstanceTypes' {maxResults} -> maxResults) (\s@DescribeInstanceTypes' {} a -> s {maxResults = a} :: DescribeInstanceTypes)
+
+-- | The token to retrieve the next page of results.
+describeInstanceTypes_nextToken :: Lens.Lens' DescribeInstanceTypes (Prelude.Maybe Prelude.Text)
+describeInstanceTypes_nextToken = Lens.lens (\DescribeInstanceTypes' {nextToken} -> nextToken) (\s@DescribeInstanceTypes' {} a -> s {nextToken = a} :: DescribeInstanceTypes)
+
+instance Core.AWSPager DescribeInstanceTypes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceTypesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInstanceTypesResponse_instanceTypes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInstanceTypes_nextToken
+          Lens..~ rs
+          Lens.^? describeInstanceTypesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeInstanceTypes where
+  type
+    AWSResponse DescribeInstanceTypes =
+      DescribeInstanceTypesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstanceTypesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceTypeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInstanceTypes where
+  hashWithSalt _salt DescribeInstanceTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeInstanceTypes where
+  rnf DescribeInstanceTypes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeInstanceTypes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInstanceTypes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInstanceTypes where
+  toQuery DescribeInstanceTypes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeInstanceTypes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InstanceType"
+              Prelude.<$> instanceTypes
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInstanceTypesResponse' smart constructor.
+data DescribeInstanceTypesResponse = DescribeInstanceTypesResponse'
+  { -- | The instance type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    instanceTypes :: Prelude.Maybe [InstanceTypeInfo],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstanceTypesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceTypes', 'describeInstanceTypesResponse_instanceTypes' - The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'nextToken', 'describeInstanceTypesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeInstanceTypesResponse_httpStatus' - The response's http status code.
+newDescribeInstanceTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstanceTypesResponse
+newDescribeInstanceTypesResponse pHttpStatus_ =
+  DescribeInstanceTypesResponse'
+    { instanceTypes =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+describeInstanceTypesResponse_instanceTypes :: Lens.Lens' DescribeInstanceTypesResponse (Prelude.Maybe [InstanceTypeInfo])
+describeInstanceTypesResponse_instanceTypes = Lens.lens (\DescribeInstanceTypesResponse' {instanceTypes} -> instanceTypes) (\s@DescribeInstanceTypesResponse' {} a -> s {instanceTypes = a} :: DescribeInstanceTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInstanceTypesResponse_nextToken :: Lens.Lens' DescribeInstanceTypesResponse (Prelude.Maybe Prelude.Text)
+describeInstanceTypesResponse_nextToken = Lens.lens (\DescribeInstanceTypesResponse' {nextToken} -> nextToken) (\s@DescribeInstanceTypesResponse' {} a -> s {nextToken = a} :: DescribeInstanceTypesResponse)
+
+-- | The response's http status code.
+describeInstanceTypesResponse_httpStatus :: Lens.Lens' DescribeInstanceTypesResponse Prelude.Int
+describeInstanceTypesResponse_httpStatus = Lens.lens (\DescribeInstanceTypesResponse' {httpStatus} -> httpStatus) (\s@DescribeInstanceTypesResponse' {} a -> s {httpStatus = a} :: DescribeInstanceTypesResponse)
+
+instance Prelude.NFData DescribeInstanceTypesResponse where
+  rnf DescribeInstanceTypesResponse' {..} =
+    Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInstances.hs b/gen/Amazonka/EC2/DescribeInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInstances.hs
@@ -0,0 +1,1145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified instances or all instances.
+--
+-- If you specify instance IDs, the output includes information for only
+-- the specified instances. If you specify filters, the output includes
+-- information for only those instances that meet the filter criteria. If
+-- you do not specify instance IDs or filters, the output includes
+-- information for all instances, which can affect performance. We
+-- recommend that you use pagination to ensure that the operation returns
+-- quickly and successfully.
+--
+-- If you specify an instance ID that is not valid, an error is returned.
+-- If you specify an instance that you do not own, it is not included in
+-- the output.
+--
+-- Recently terminated instances might appear in the returned results. This
+-- interval is usually less than one hour.
+--
+-- If you describe instances in the rare case where an Availability Zone is
+-- experiencing a service disruption and you specify instance IDs that are
+-- in the affected zone, or do not specify any instance IDs at all, the
+-- call fails. If you describe instances and specify only instance IDs that
+-- are in an unaffected zone, the call works normally.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInstances
+  ( -- * Creating a Request
+    DescribeInstances (..),
+    newDescribeInstances,
+
+    -- * Request Lenses
+    describeInstances_dryRun,
+    describeInstances_filters,
+    describeInstances_instanceIds,
+    describeInstances_maxResults,
+    describeInstances_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInstancesResponse (..),
+    newDescribeInstancesResponse,
+
+    -- * Response Lenses
+    describeInstancesResponse_nextToken,
+    describeInstancesResponse_reservations,
+    describeInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInstances' smart constructor.
+data DescribeInstances = DescribeInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @affinity@ - The affinity setting for an instance running on a
+    --     Dedicated Host (@default@ | @host@).
+    --
+    -- -   @architecture@ - The instance architecture (@i386@ | @x86_64@ |
+    --     @arm64@).
+    --
+    -- -   @availability-zone@ - The Availability Zone of the instance.
+    --
+    -- -   @block-device-mapping.attach-time@ - The attach time for an EBS
+    --     volume mapped to the instance, for example,
+    --     @2010-09-15T17:15:20.000Z@.
+    --
+    -- -   @block-device-mapping.delete-on-termination@ - A Boolean that
+    --     indicates whether the EBS volume is deleted on instance termination.
+    --
+    -- -   @block-device-mapping.device-name@ - The device name specified in
+    --     the block device mapping (for example, @\/dev\/sdh@ or @xvdh@).
+    --
+    -- -   @block-device-mapping.status@ - The status for the EBS volume
+    --     (@attaching@ | @attached@ | @detaching@ | @detached@).
+    --
+    -- -   @block-device-mapping.volume-id@ - The volume ID of the EBS volume.
+    --
+    -- -   @capacity-reservation-id@ - The ID of the Capacity Reservation into
+    --     which the instance was launched.
+    --
+    -- -   @client-token@ - The idempotency token you provided when you
+    --     launched the instance.
+    --
+    -- -   @dns-name@ - The public DNS name of the instance.
+    --
+    -- -   @group-id@ - The ID of the security group for the instance.
+    --     EC2-Classic only.
+    --
+    -- -   @group-name@ - The name of the security group for the instance.
+    --     EC2-Classic only.
+    --
+    -- -   @hibernation-options.configured@ - A Boolean that indicates whether
+    --     the instance is enabled for hibernation. A value of @true@ means
+    --     that the instance is enabled for hibernation.
+    --
+    -- -   @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@).
+    --     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.
+    --
+    -- -   @image-id@ - The ID of the image used to launch the instance.
+    --
+    -- -   @instance-id@ - The ID of the instance.
+    --
+    -- -   @instance-lifecycle@ - Indicates whether this is a Spot Instance or
+    --     a Scheduled Instance (@spot@ | @scheduled@).
+    --
+    -- -   @instance-state-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).
+    --
+    -- -   @instance-state-name@ - The state of the instance (@pending@ |
+    --     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
+    --     @stopped@).
+    --
+    -- -   @instance-type@ - The type of instance (for example, @t2.micro@).
+    --
+    -- -   @instance.group-id@ - The ID of the security group for the instance.
+    --
+    -- -   @instance.group-name@ - The name of the security group for the
+    --     instance.
+    --
+    -- -   @ip-address@ - The public IPv4 address of the instance.
+    --
+    -- -   @kernel-id@ - The kernel ID.
+    --
+    -- -   @key-name@ - The name of the key pair used when the instance was
+    --     launched.
+    --
+    -- -   @launch-index@ - When launching multiple instances, this is the
+    --     index for the instance in the launch group (for example, 0, 1, 2,
+    --     and so on).
+    --
+    -- -   @launch-time@ - The time when the instance was launched, in the ISO
+    --     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
+    --     example, @2021-09-29T11:04:43.305Z@. You can use a wildcard (@*@),
+    --     for example, @2021-09-29T*@, which matches an entire day.
+    --
+    -- -   @metadata-options.http-tokens@ - The metadata request authorization
+    --     state (@optional@ | @required@)
+    --
+    -- -   @metadata-options.http-put-response-hop-limit@ - The http metadata
+    --     request put response hop limit (integer, possible values @1@ to
+    --     @64@)
+    --
+    -- -   @metadata-options.http-endpoint@ - Enable or disable metadata access
+    --     on http endpoint (@enabled@ | @disabled@)
+    --
+    -- -   @monitoring-state@ - Indicates whether detailed monitoring is
+    --     enabled (@disabled@ | @enabled@).
+    --
+    -- -   @network-interface.addresses.private-ip-address@ - The private IPv4
+    --     address associated with the network interface.
+    --
+    -- -   @network-interface.addresses.primary@ - Specifies whether the IPv4
+    --     address of the network interface is the primary private IPv4
+    --     address.
+    --
+    -- -   @network-interface.addresses.association.public-ip@ - The ID of the
+    --     association of an Elastic IP address (IPv4) with a network
+    --     interface.
+    --
+    -- -   @network-interface.addresses.association.ip-owner-id@ - The owner ID
+    --     of the private IPv4 address associated with the network interface.
+    --
+    -- -   @network-interface.association.public-ip@ - The address of the
+    --     Elastic IP address (IPv4) bound to the network interface.
+    --
+    -- -   @network-interface.association.ip-owner-id@ - The owner of the
+    --     Elastic IP address (IPv4) associated with the network interface.
+    --
+    -- -   @network-interface.association.allocation-id@ - The allocation ID
+    --     returned when you allocated the Elastic IP address (IPv4) for your
+    --     network interface.
+    --
+    -- -   @network-interface.association.association-id@ - The association ID
+    --     returned when the network interface was associated with an IPv4
+    --     address.
+    --
+    -- -   @network-interface.attachment.attachment-id@ - The ID of the
+    --     interface attachment.
+    --
+    -- -   @network-interface.attachment.instance-id@ - The ID of the instance
+    --     to which the network interface is attached.
+    --
+    -- -   @network-interface.attachment.instance-owner-id@ - The owner ID of
+    --     the instance to which the network interface is attached.
+    --
+    -- -   @network-interface.attachment.device-index@ - The device index to
+    --     which the network interface is attached.
+    --
+    -- -   @network-interface.attachment.status@ - The status of the attachment
+    --     (@attaching@ | @attached@ | @detaching@ | @detached@).
+    --
+    -- -   @network-interface.attachment.attach-time@ - The time that the
+    --     network interface was attached to an instance.
+    --
+    -- -   @network-interface.attachment.delete-on-termination@ - Specifies
+    --     whether the attachment is deleted when an instance is terminated.
+    --
+    -- -   @network-interface.availability-zone@ - The Availability Zone for
+    --     the network interface.
+    --
+    -- -   @network-interface.description@ - The description of the network
+    --     interface.
+    --
+    -- -   @network-interface.group-id@ - The ID of a security group associated
+    --     with the network interface.
+    --
+    -- -   @network-interface.group-name@ - The name of a security group
+    --     associated with the network interface.
+    --
+    -- -   @network-interface.ipv6-addresses.ipv6-address@ - The IPv6 address
+    --     associated with the network interface.
+    --
+    -- -   @network-interface.mac-address@ - The MAC address of the network
+    --     interface.
+    --
+    -- -   @network-interface.network-interface-id@ - The ID of the network
+    --     interface.
+    --
+    -- -   @network-interface.owner-id@ - The ID of the owner of the network
+    --     interface.
+    --
+    -- -   @network-interface.private-dns-name@ - The private DNS name of the
+    --     network interface.
+    --
+    -- -   @network-interface.requester-id@ - The requester ID for the network
+    --     interface.
+    --
+    -- -   @network-interface.requester-managed@ - Indicates whether the
+    --     network interface is being managed by Amazon Web Services.
+    --
+    -- -   @network-interface.status@ - The status of the network interface
+    --     (@available@) | @in-use@).
+    --
+    -- -   @network-interface.source-dest-check@ - Whether the network
+    --     interface performs source\/destination checking. A value of @true@
+    --     means that checking is enabled, and @false@ means that checking is
+    --     disabled. The value must be @false@ for the network interface to
+    --     perform network address translation (NAT) in your VPC.
+    --
+    -- -   @network-interface.subnet-id@ - The ID of the subnet for the network
+    --     interface.
+    --
+    -- -   @network-interface.vpc-id@ - The ID of the VPC for the network
+    --     interface.
+    --
+    -- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the instance
+    --     owner.
+    --
+    -- -   @placement-group-name@ - The name of the placement group for the
+    --     instance.
+    --
+    -- -   @placement-partition-number@ - The partition in which the instance
+    --     is located.
+    --
+    -- -   @platform@ - The platform. To list only Windows instances, use
+    --     @windows@.
+    --
+    -- -   @private-dns-name@ - The private IPv4 DNS name of the instance.
+    --
+    -- -   @private-ip-address@ - The private IPv4 address of the instance.
+    --
+    -- -   @product-code@ - The product code associated with the AMI used to
+    --     launch the instance.
+    --
+    -- -   @product-code.type@ - The type of product code (@devpay@ |
+    --     @marketplace@).
+    --
+    -- -   @ramdisk-id@ - The RAM disk ID.
+    --
+    -- -   @reason@ - 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.
+    --
+    -- -   @requester-id@ - The ID of the entity that launched the instance on
+    --     your behalf (for example, Amazon Web Services Management Console,
+    --     Auto Scaling, and so on).
+    --
+    -- -   @reservation-id@ - 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.
+    --
+    -- -   @root-device-name@ - The device name of the root device volume (for
+    --     example, @\/dev\/sda1@).
+    --
+    -- -   @root-device-type@ - The type of the root device volume (@ebs@ |
+    --     @instance-store@).
+    --
+    -- -   @source-dest-check@ - Indicates whether the instance performs
+    --     source\/destination checking. A value of @true@ means that checking
+    --     is enabled, and @false@ means that checking is disabled. The value
+    --     must be @false@ for the instance to perform network address
+    --     translation (NAT) in your VPC.
+    --
+    -- -   @spot-instance-request-id@ - The ID of the Spot Instance request.
+    --
+    -- -   @state-reason-code@ - The reason code for the state change.
+    --
+    -- -   @state-reason-message@ - A message that describes the state change.
+    --
+    -- -   @subnet-id@ - The ID of the subnet for the instance.
+    --
+    -- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @tenancy@ - The tenancy of an instance (@dedicated@ | @default@ |
+    --     @host@).
+    --
+    -- -   @virtualization-type@ - The virtualization type of the instance
+    --     (@paravirtual@ | @hvm@).
+    --
+    -- -   @vpc-id@ - The ID of the VPC that the instance is running in.
+    filters :: Prelude.Maybe [Filter],
+    -- | The instance IDs.
+    --
+    -- Default: Describes all your instances.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 5 and 1000. You cannot specify this
+    -- parameter and the instance IDs parameter in the same call.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInstances_filters' - The filters.
+--
+-- -   @affinity@ - The affinity setting for an instance running on a
+--     Dedicated Host (@default@ | @host@).
+--
+-- -   @architecture@ - The instance architecture (@i386@ | @x86_64@ |
+--     @arm64@).
+--
+-- -   @availability-zone@ - The Availability Zone of the instance.
+--
+-- -   @block-device-mapping.attach-time@ - The attach time for an EBS
+--     volume mapped to the instance, for example,
+--     @2010-09-15T17:15:20.000Z@.
+--
+-- -   @block-device-mapping.delete-on-termination@ - A Boolean that
+--     indicates whether the EBS volume is deleted on instance termination.
+--
+-- -   @block-device-mapping.device-name@ - The device name specified in
+--     the block device mapping (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- -   @block-device-mapping.status@ - The status for the EBS volume
+--     (@attaching@ | @attached@ | @detaching@ | @detached@).
+--
+-- -   @block-device-mapping.volume-id@ - The volume ID of the EBS volume.
+--
+-- -   @capacity-reservation-id@ - The ID of the Capacity Reservation into
+--     which the instance was launched.
+--
+-- -   @client-token@ - The idempotency token you provided when you
+--     launched the instance.
+--
+-- -   @dns-name@ - The public DNS name of the instance.
+--
+-- -   @group-id@ - The ID of the security group for the instance.
+--     EC2-Classic only.
+--
+-- -   @group-name@ - The name of the security group for the instance.
+--     EC2-Classic only.
+--
+-- -   @hibernation-options.configured@ - A Boolean that indicates whether
+--     the instance is enabled for hibernation. A value of @true@ means
+--     that the instance is enabled for hibernation.
+--
+-- -   @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@).
+--     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.
+--
+-- -   @image-id@ - The ID of the image used to launch the instance.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @instance-lifecycle@ - Indicates whether this is a Spot Instance or
+--     a Scheduled Instance (@spot@ | @scheduled@).
+--
+-- -   @instance-state-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).
+--
+-- -   @instance-state-name@ - The state of the instance (@pending@ |
+--     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
+--     @stopped@).
+--
+-- -   @instance-type@ - The type of instance (for example, @t2.micro@).
+--
+-- -   @instance.group-id@ - The ID of the security group for the instance.
+--
+-- -   @instance.group-name@ - The name of the security group for the
+--     instance.
+--
+-- -   @ip-address@ - The public IPv4 address of the instance.
+--
+-- -   @kernel-id@ - The kernel ID.
+--
+-- -   @key-name@ - The name of the key pair used when the instance was
+--     launched.
+--
+-- -   @launch-index@ - When launching multiple instances, this is the
+--     index for the instance in the launch group (for example, 0, 1, 2,
+--     and so on).
+--
+-- -   @launch-time@ - The time when the instance was launched, in the ISO
+--     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
+--     example, @2021-09-29T11:04:43.305Z@. You can use a wildcard (@*@),
+--     for example, @2021-09-29T*@, which matches an entire day.
+--
+-- -   @metadata-options.http-tokens@ - The metadata request authorization
+--     state (@optional@ | @required@)
+--
+-- -   @metadata-options.http-put-response-hop-limit@ - The http metadata
+--     request put response hop limit (integer, possible values @1@ to
+--     @64@)
+--
+-- -   @metadata-options.http-endpoint@ - Enable or disable metadata access
+--     on http endpoint (@enabled@ | @disabled@)
+--
+-- -   @monitoring-state@ - Indicates whether detailed monitoring is
+--     enabled (@disabled@ | @enabled@).
+--
+-- -   @network-interface.addresses.private-ip-address@ - The private IPv4
+--     address associated with the network interface.
+--
+-- -   @network-interface.addresses.primary@ - Specifies whether the IPv4
+--     address of the network interface is the primary private IPv4
+--     address.
+--
+-- -   @network-interface.addresses.association.public-ip@ - The ID of the
+--     association of an Elastic IP address (IPv4) with a network
+--     interface.
+--
+-- -   @network-interface.addresses.association.ip-owner-id@ - The owner ID
+--     of the private IPv4 address associated with the network interface.
+--
+-- -   @network-interface.association.public-ip@ - The address of the
+--     Elastic IP address (IPv4) bound to the network interface.
+--
+-- -   @network-interface.association.ip-owner-id@ - The owner of the
+--     Elastic IP address (IPv4) associated with the network interface.
+--
+-- -   @network-interface.association.allocation-id@ - The allocation ID
+--     returned when you allocated the Elastic IP address (IPv4) for your
+--     network interface.
+--
+-- -   @network-interface.association.association-id@ - The association ID
+--     returned when the network interface was associated with an IPv4
+--     address.
+--
+-- -   @network-interface.attachment.attachment-id@ - The ID of the
+--     interface attachment.
+--
+-- -   @network-interface.attachment.instance-id@ - The ID of the instance
+--     to which the network interface is attached.
+--
+-- -   @network-interface.attachment.instance-owner-id@ - The owner ID of
+--     the instance to which the network interface is attached.
+--
+-- -   @network-interface.attachment.device-index@ - The device index to
+--     which the network interface is attached.
+--
+-- -   @network-interface.attachment.status@ - The status of the attachment
+--     (@attaching@ | @attached@ | @detaching@ | @detached@).
+--
+-- -   @network-interface.attachment.attach-time@ - The time that the
+--     network interface was attached to an instance.
+--
+-- -   @network-interface.attachment.delete-on-termination@ - Specifies
+--     whether the attachment is deleted when an instance is terminated.
+--
+-- -   @network-interface.availability-zone@ - The Availability Zone for
+--     the network interface.
+--
+-- -   @network-interface.description@ - The description of the network
+--     interface.
+--
+-- -   @network-interface.group-id@ - The ID of a security group associated
+--     with the network interface.
+--
+-- -   @network-interface.group-name@ - The name of a security group
+--     associated with the network interface.
+--
+-- -   @network-interface.ipv6-addresses.ipv6-address@ - The IPv6 address
+--     associated with the network interface.
+--
+-- -   @network-interface.mac-address@ - The MAC address of the network
+--     interface.
+--
+-- -   @network-interface.network-interface-id@ - The ID of the network
+--     interface.
+--
+-- -   @network-interface.owner-id@ - The ID of the owner of the network
+--     interface.
+--
+-- -   @network-interface.private-dns-name@ - The private DNS name of the
+--     network interface.
+--
+-- -   @network-interface.requester-id@ - The requester ID for the network
+--     interface.
+--
+-- -   @network-interface.requester-managed@ - Indicates whether the
+--     network interface is being managed by Amazon Web Services.
+--
+-- -   @network-interface.status@ - The status of the network interface
+--     (@available@) | @in-use@).
+--
+-- -   @network-interface.source-dest-check@ - Whether the network
+--     interface performs source\/destination checking. A value of @true@
+--     means that checking is enabled, and @false@ means that checking is
+--     disabled. The value must be @false@ for the network interface to
+--     perform network address translation (NAT) in your VPC.
+--
+-- -   @network-interface.subnet-id@ - The ID of the subnet for the network
+--     interface.
+--
+-- -   @network-interface.vpc-id@ - The ID of the VPC for the network
+--     interface.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the instance
+--     owner.
+--
+-- -   @placement-group-name@ - The name of the placement group for the
+--     instance.
+--
+-- -   @placement-partition-number@ - The partition in which the instance
+--     is located.
+--
+-- -   @platform@ - The platform. To list only Windows instances, use
+--     @windows@.
+--
+-- -   @private-dns-name@ - The private IPv4 DNS name of the instance.
+--
+-- -   @private-ip-address@ - The private IPv4 address of the instance.
+--
+-- -   @product-code@ - The product code associated with the AMI used to
+--     launch the instance.
+--
+-- -   @product-code.type@ - The type of product code (@devpay@ |
+--     @marketplace@).
+--
+-- -   @ramdisk-id@ - The RAM disk ID.
+--
+-- -   @reason@ - 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.
+--
+-- -   @requester-id@ - The ID of the entity that launched the instance on
+--     your behalf (for example, Amazon Web Services Management Console,
+--     Auto Scaling, and so on).
+--
+-- -   @reservation-id@ - 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.
+--
+-- -   @root-device-name@ - The device name of the root device volume (for
+--     example, @\/dev\/sda1@).
+--
+-- -   @root-device-type@ - The type of the root device volume (@ebs@ |
+--     @instance-store@).
+--
+-- -   @source-dest-check@ - Indicates whether the instance performs
+--     source\/destination checking. A value of @true@ means that checking
+--     is enabled, and @false@ means that checking is disabled. The value
+--     must be @false@ for the instance to perform network address
+--     translation (NAT) in your VPC.
+--
+-- -   @spot-instance-request-id@ - The ID of the Spot Instance request.
+--
+-- -   @state-reason-code@ - The reason code for the state change.
+--
+-- -   @state-reason-message@ - A message that describes the state change.
+--
+-- -   @subnet-id@ - The ID of the subnet for the instance.
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @tenancy@ - The tenancy of an instance (@dedicated@ | @default@ |
+--     @host@).
+--
+-- -   @virtualization-type@ - The virtualization type of the instance
+--     (@paravirtual@ | @hvm@).
+--
+-- -   @vpc-id@ - The ID of the VPC that the instance is running in.
+--
+-- 'instanceIds', 'describeInstances_instanceIds' - The instance IDs.
+--
+-- Default: Describes all your instances.
+--
+-- 'maxResults', 'describeInstances_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000. You cannot specify this
+-- parameter and the instance IDs parameter in the same call.
+--
+-- 'nextToken', 'describeInstances_nextToken' - The token to request the next page of results.
+newDescribeInstances ::
+  DescribeInstances
+newDescribeInstances =
+  DescribeInstances'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInstances_dryRun :: Lens.Lens' DescribeInstances (Prelude.Maybe Prelude.Bool)
+describeInstances_dryRun = Lens.lens (\DescribeInstances' {dryRun} -> dryRun) (\s@DescribeInstances' {} a -> s {dryRun = a} :: DescribeInstances)
+
+-- | The filters.
+--
+-- -   @affinity@ - The affinity setting for an instance running on a
+--     Dedicated Host (@default@ | @host@).
+--
+-- -   @architecture@ - The instance architecture (@i386@ | @x86_64@ |
+--     @arm64@).
+--
+-- -   @availability-zone@ - The Availability Zone of the instance.
+--
+-- -   @block-device-mapping.attach-time@ - The attach time for an EBS
+--     volume mapped to the instance, for example,
+--     @2010-09-15T17:15:20.000Z@.
+--
+-- -   @block-device-mapping.delete-on-termination@ - A Boolean that
+--     indicates whether the EBS volume is deleted on instance termination.
+--
+-- -   @block-device-mapping.device-name@ - The device name specified in
+--     the block device mapping (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- -   @block-device-mapping.status@ - The status for the EBS volume
+--     (@attaching@ | @attached@ | @detaching@ | @detached@).
+--
+-- -   @block-device-mapping.volume-id@ - The volume ID of the EBS volume.
+--
+-- -   @capacity-reservation-id@ - The ID of the Capacity Reservation into
+--     which the instance was launched.
+--
+-- -   @client-token@ - The idempotency token you provided when you
+--     launched the instance.
+--
+-- -   @dns-name@ - The public DNS name of the instance.
+--
+-- -   @group-id@ - The ID of the security group for the instance.
+--     EC2-Classic only.
+--
+-- -   @group-name@ - The name of the security group for the instance.
+--     EC2-Classic only.
+--
+-- -   @hibernation-options.configured@ - A Boolean that indicates whether
+--     the instance is enabled for hibernation. A value of @true@ means
+--     that the instance is enabled for hibernation.
+--
+-- -   @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@).
+--     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.
+--
+-- -   @image-id@ - The ID of the image used to launch the instance.
+--
+-- -   @instance-id@ - The ID of the instance.
+--
+-- -   @instance-lifecycle@ - Indicates whether this is a Spot Instance or
+--     a Scheduled Instance (@spot@ | @scheduled@).
+--
+-- -   @instance-state-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).
+--
+-- -   @instance-state-name@ - The state of the instance (@pending@ |
+--     @running@ | @shutting-down@ | @terminated@ | @stopping@ |
+--     @stopped@).
+--
+-- -   @instance-type@ - The type of instance (for example, @t2.micro@).
+--
+-- -   @instance.group-id@ - The ID of the security group for the instance.
+--
+-- -   @instance.group-name@ - The name of the security group for the
+--     instance.
+--
+-- -   @ip-address@ - The public IPv4 address of the instance.
+--
+-- -   @kernel-id@ - The kernel ID.
+--
+-- -   @key-name@ - The name of the key pair used when the instance was
+--     launched.
+--
+-- -   @launch-index@ - When launching multiple instances, this is the
+--     index for the instance in the launch group (for example, 0, 1, 2,
+--     and so on).
+--
+-- -   @launch-time@ - The time when the instance was launched, in the ISO
+--     8601 format in the UTC time zone (YYYY-MM-DDThh:mm:ss.sssZ), for
+--     example, @2021-09-29T11:04:43.305Z@. You can use a wildcard (@*@),
+--     for example, @2021-09-29T*@, which matches an entire day.
+--
+-- -   @metadata-options.http-tokens@ - The metadata request authorization
+--     state (@optional@ | @required@)
+--
+-- -   @metadata-options.http-put-response-hop-limit@ - The http metadata
+--     request put response hop limit (integer, possible values @1@ to
+--     @64@)
+--
+-- -   @metadata-options.http-endpoint@ - Enable or disable metadata access
+--     on http endpoint (@enabled@ | @disabled@)
+--
+-- -   @monitoring-state@ - Indicates whether detailed monitoring is
+--     enabled (@disabled@ | @enabled@).
+--
+-- -   @network-interface.addresses.private-ip-address@ - The private IPv4
+--     address associated with the network interface.
+--
+-- -   @network-interface.addresses.primary@ - Specifies whether the IPv4
+--     address of the network interface is the primary private IPv4
+--     address.
+--
+-- -   @network-interface.addresses.association.public-ip@ - The ID of the
+--     association of an Elastic IP address (IPv4) with a network
+--     interface.
+--
+-- -   @network-interface.addresses.association.ip-owner-id@ - The owner ID
+--     of the private IPv4 address associated with the network interface.
+--
+-- -   @network-interface.association.public-ip@ - The address of the
+--     Elastic IP address (IPv4) bound to the network interface.
+--
+-- -   @network-interface.association.ip-owner-id@ - The owner of the
+--     Elastic IP address (IPv4) associated with the network interface.
+--
+-- -   @network-interface.association.allocation-id@ - The allocation ID
+--     returned when you allocated the Elastic IP address (IPv4) for your
+--     network interface.
+--
+-- -   @network-interface.association.association-id@ - The association ID
+--     returned when the network interface was associated with an IPv4
+--     address.
+--
+-- -   @network-interface.attachment.attachment-id@ - The ID of the
+--     interface attachment.
+--
+-- -   @network-interface.attachment.instance-id@ - The ID of the instance
+--     to which the network interface is attached.
+--
+-- -   @network-interface.attachment.instance-owner-id@ - The owner ID of
+--     the instance to which the network interface is attached.
+--
+-- -   @network-interface.attachment.device-index@ - The device index to
+--     which the network interface is attached.
+--
+-- -   @network-interface.attachment.status@ - The status of the attachment
+--     (@attaching@ | @attached@ | @detaching@ | @detached@).
+--
+-- -   @network-interface.attachment.attach-time@ - The time that the
+--     network interface was attached to an instance.
+--
+-- -   @network-interface.attachment.delete-on-termination@ - Specifies
+--     whether the attachment is deleted when an instance is terminated.
+--
+-- -   @network-interface.availability-zone@ - The Availability Zone for
+--     the network interface.
+--
+-- -   @network-interface.description@ - The description of the network
+--     interface.
+--
+-- -   @network-interface.group-id@ - The ID of a security group associated
+--     with the network interface.
+--
+-- -   @network-interface.group-name@ - The name of a security group
+--     associated with the network interface.
+--
+-- -   @network-interface.ipv6-addresses.ipv6-address@ - The IPv6 address
+--     associated with the network interface.
+--
+-- -   @network-interface.mac-address@ - The MAC address of the network
+--     interface.
+--
+-- -   @network-interface.network-interface-id@ - The ID of the network
+--     interface.
+--
+-- -   @network-interface.owner-id@ - The ID of the owner of the network
+--     interface.
+--
+-- -   @network-interface.private-dns-name@ - The private DNS name of the
+--     network interface.
+--
+-- -   @network-interface.requester-id@ - The requester ID for the network
+--     interface.
+--
+-- -   @network-interface.requester-managed@ - Indicates whether the
+--     network interface is being managed by Amazon Web Services.
+--
+-- -   @network-interface.status@ - The status of the network interface
+--     (@available@) | @in-use@).
+--
+-- -   @network-interface.source-dest-check@ - Whether the network
+--     interface performs source\/destination checking. A value of @true@
+--     means that checking is enabled, and @false@ means that checking is
+--     disabled. The value must be @false@ for the network interface to
+--     perform network address translation (NAT) in your VPC.
+--
+-- -   @network-interface.subnet-id@ - The ID of the subnet for the network
+--     interface.
+--
+-- -   @network-interface.vpc-id@ - The ID of the VPC for the network
+--     interface.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the instance
+--     owner.
+--
+-- -   @placement-group-name@ - The name of the placement group for the
+--     instance.
+--
+-- -   @placement-partition-number@ - The partition in which the instance
+--     is located.
+--
+-- -   @platform@ - The platform. To list only Windows instances, use
+--     @windows@.
+--
+-- -   @private-dns-name@ - The private IPv4 DNS name of the instance.
+--
+-- -   @private-ip-address@ - The private IPv4 address of the instance.
+--
+-- -   @product-code@ - The product code associated with the AMI used to
+--     launch the instance.
+--
+-- -   @product-code.type@ - The type of product code (@devpay@ |
+--     @marketplace@).
+--
+-- -   @ramdisk-id@ - The RAM disk ID.
+--
+-- -   @reason@ - 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.
+--
+-- -   @requester-id@ - The ID of the entity that launched the instance on
+--     your behalf (for example, Amazon Web Services Management Console,
+--     Auto Scaling, and so on).
+--
+-- -   @reservation-id@ - 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.
+--
+-- -   @root-device-name@ - The device name of the root device volume (for
+--     example, @\/dev\/sda1@).
+--
+-- -   @root-device-type@ - The type of the root device volume (@ebs@ |
+--     @instance-store@).
+--
+-- -   @source-dest-check@ - Indicates whether the instance performs
+--     source\/destination checking. A value of @true@ means that checking
+--     is enabled, and @false@ means that checking is disabled. The value
+--     must be @false@ for the instance to perform network address
+--     translation (NAT) in your VPC.
+--
+-- -   @spot-instance-request-id@ - The ID of the Spot Instance request.
+--
+-- -   @state-reason-code@ - The reason code for the state change.
+--
+-- -   @state-reason-message@ - A message that describes the state change.
+--
+-- -   @subnet-id@ - The ID of the subnet for the instance.
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @tenancy@ - The tenancy of an instance (@dedicated@ | @default@ |
+--     @host@).
+--
+-- -   @virtualization-type@ - The virtualization type of the instance
+--     (@paravirtual@ | @hvm@).
+--
+-- -   @vpc-id@ - The ID of the VPC that the instance is running in.
+describeInstances_filters :: Lens.Lens' DescribeInstances (Prelude.Maybe [Filter])
+describeInstances_filters = Lens.lens (\DescribeInstances' {filters} -> filters) (\s@DescribeInstances' {} a -> s {filters = a} :: DescribeInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance IDs.
+--
+-- Default: Describes all your instances.
+describeInstances_instanceIds :: Lens.Lens' DescribeInstances (Prelude.Maybe [Prelude.Text])
+describeInstances_instanceIds = Lens.lens (\DescribeInstances' {instanceIds} -> instanceIds) (\s@DescribeInstances' {} a -> s {instanceIds = a} :: DescribeInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 5 and 1000. You cannot specify this
+-- parameter and the instance IDs parameter in the same call.
+describeInstances_maxResults :: Lens.Lens' DescribeInstances (Prelude.Maybe Prelude.Int)
+describeInstances_maxResults = Lens.lens (\DescribeInstances' {maxResults} -> maxResults) (\s@DescribeInstances' {} a -> s {maxResults = a} :: DescribeInstances)
+
+-- | The token to request the next page of results.
+describeInstances_nextToken :: Lens.Lens' DescribeInstances (Prelude.Maybe Prelude.Text)
+describeInstances_nextToken = Lens.lens (\DescribeInstances' {nextToken} -> nextToken) (\s@DescribeInstances' {} a -> s {nextToken = a} :: DescribeInstances)
+
+instance Core.AWSPager DescribeInstances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInstancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInstancesResponse_reservations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInstances_nextToken
+          Lens..~ rs
+          Lens.^? describeInstancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeInstances where
+  type
+    AWSResponse DescribeInstances =
+      DescribeInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInstancesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "reservationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInstances where
+  hashWithSalt _salt DescribeInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` instanceIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeInstances where
+  rnf DescribeInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInstances where
+  toQuery DescribeInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InstanceId"
+              Prelude.<$> instanceIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInstancesResponse' smart constructor.
+data DescribeInstancesResponse = DescribeInstancesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the reservations.
+    reservations :: Prelude.Maybe [Reservation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeInstancesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'reservations', 'describeInstancesResponse_reservations' - Information about the reservations.
+--
+-- 'httpStatus', 'describeInstancesResponse_httpStatus' - The response's http status code.
+newDescribeInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInstancesResponse
+newDescribeInstancesResponse pHttpStatus_ =
+  DescribeInstancesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      reservations = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInstancesResponse_nextToken :: Lens.Lens' DescribeInstancesResponse (Prelude.Maybe Prelude.Text)
+describeInstancesResponse_nextToken = Lens.lens (\DescribeInstancesResponse' {nextToken} -> nextToken) (\s@DescribeInstancesResponse' {} a -> s {nextToken = a} :: DescribeInstancesResponse)
+
+-- | Information about the reservations.
+describeInstancesResponse_reservations :: Lens.Lens' DescribeInstancesResponse (Prelude.Maybe [Reservation])
+describeInstancesResponse_reservations = Lens.lens (\DescribeInstancesResponse' {reservations} -> reservations) (\s@DescribeInstancesResponse' {} a -> s {reservations = a} :: DescribeInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeInstancesResponse_httpStatus :: Lens.Lens' DescribeInstancesResponse Prelude.Int
+describeInstancesResponse_httpStatus = Lens.lens (\DescribeInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeInstancesResponse' {} a -> s {httpStatus = a} :: DescribeInstancesResponse)
+
+instance Prelude.NFData DescribeInstancesResponse where
+  rnf DescribeInstancesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf reservations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeInternetGateways.hs b/gen/Amazonka/EC2/DescribeInternetGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeInternetGateways.hs
@@ -0,0 +1,344 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeInternetGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your internet gateways.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeInternetGateways
+  ( -- * Creating a Request
+    DescribeInternetGateways (..),
+    newDescribeInternetGateways,
+
+    -- * Request Lenses
+    describeInternetGateways_dryRun,
+    describeInternetGateways_filters,
+    describeInternetGateways_internetGatewayIds,
+    describeInternetGateways_maxResults,
+    describeInternetGateways_nextToken,
+
+    -- * Destructuring the Response
+    DescribeInternetGatewaysResponse (..),
+    newDescribeInternetGatewaysResponse,
+
+    -- * Response Lenses
+    describeInternetGatewaysResponse_internetGateways,
+    describeInternetGatewaysResponse_nextToken,
+    describeInternetGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeInternetGateways' smart constructor.
+data DescribeInternetGateways = DescribeInternetGateways'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @attachment.state@ - The current state of the attachment between the
+    --     gateway and the VPC (@available@). Present only if a VPC is
+    --     attached.
+    --
+    -- -   @attachment.vpc-id@ - The ID of an attached VPC.
+    --
+    -- -   @internet-gateway-id@ - The ID of the Internet gateway.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     internet gateway.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more internet gateway IDs.
+    --
+    -- Default: Describes all your internet gateways.
+    internetGatewayIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInternetGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeInternetGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeInternetGateways_filters' - One or more filters.
+--
+-- -   @attachment.state@ - The current state of the attachment between the
+--     gateway and the VPC (@available@). Present only if a VPC is
+--     attached.
+--
+-- -   @attachment.vpc-id@ - The ID of an attached VPC.
+--
+-- -   @internet-gateway-id@ - The ID of the Internet gateway.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     internet gateway.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'internetGatewayIds', 'describeInternetGateways_internetGatewayIds' - One or more internet gateway IDs.
+--
+-- Default: Describes all your internet gateways.
+--
+-- 'maxResults', 'describeInternetGateways_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeInternetGateways_nextToken' - The token for the next page of results.
+newDescribeInternetGateways ::
+  DescribeInternetGateways
+newDescribeInternetGateways =
+  DescribeInternetGateways'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      internetGatewayIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeInternetGateways_dryRun :: Lens.Lens' DescribeInternetGateways (Prelude.Maybe Prelude.Bool)
+describeInternetGateways_dryRun = Lens.lens (\DescribeInternetGateways' {dryRun} -> dryRun) (\s@DescribeInternetGateways' {} a -> s {dryRun = a} :: DescribeInternetGateways)
+
+-- | One or more filters.
+--
+-- -   @attachment.state@ - The current state of the attachment between the
+--     gateway and the VPC (@available@). Present only if a VPC is
+--     attached.
+--
+-- -   @attachment.vpc-id@ - The ID of an attached VPC.
+--
+-- -   @internet-gateway-id@ - The ID of the Internet gateway.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     internet gateway.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeInternetGateways_filters :: Lens.Lens' DescribeInternetGateways (Prelude.Maybe [Filter])
+describeInternetGateways_filters = Lens.lens (\DescribeInternetGateways' {filters} -> filters) (\s@DescribeInternetGateways' {} a -> s {filters = a} :: DescribeInternetGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more internet gateway IDs.
+--
+-- Default: Describes all your internet gateways.
+describeInternetGateways_internetGatewayIds :: Lens.Lens' DescribeInternetGateways (Prelude.Maybe [Prelude.Text])
+describeInternetGateways_internetGatewayIds = Lens.lens (\DescribeInternetGateways' {internetGatewayIds} -> internetGatewayIds) (\s@DescribeInternetGateways' {} a -> s {internetGatewayIds = a} :: DescribeInternetGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeInternetGateways_maxResults :: Lens.Lens' DescribeInternetGateways (Prelude.Maybe Prelude.Natural)
+describeInternetGateways_maxResults = Lens.lens (\DescribeInternetGateways' {maxResults} -> maxResults) (\s@DescribeInternetGateways' {} a -> s {maxResults = a} :: DescribeInternetGateways)
+
+-- | The token for the next page of results.
+describeInternetGateways_nextToken :: Lens.Lens' DescribeInternetGateways (Prelude.Maybe Prelude.Text)
+describeInternetGateways_nextToken = Lens.lens (\DescribeInternetGateways' {nextToken} -> nextToken) (\s@DescribeInternetGateways' {} a -> s {nextToken = a} :: DescribeInternetGateways)
+
+instance Core.AWSPager DescribeInternetGateways where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeInternetGatewaysResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeInternetGatewaysResponse_internetGateways
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeInternetGateways_nextToken
+          Lens..~ rs
+          Lens.^? describeInternetGatewaysResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeInternetGateways where
+  type
+    AWSResponse DescribeInternetGateways =
+      DescribeInternetGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeInternetGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "internetGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeInternetGateways where
+  hashWithSalt _salt DescribeInternetGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` internetGatewayIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeInternetGateways where
+  rnf DescribeInternetGateways' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf internetGatewayIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeInternetGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeInternetGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeInternetGateways where
+  toQuery DescribeInternetGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeInternetGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InternetGatewayId"
+              Prelude.<$> internetGatewayIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeInternetGatewaysResponse' smart constructor.
+data DescribeInternetGatewaysResponse = DescribeInternetGatewaysResponse'
+  { -- | Information about one or more internet gateways.
+    internetGateways :: Prelude.Maybe [InternetGateway],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeInternetGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'internetGateways', 'describeInternetGatewaysResponse_internetGateways' - Information about one or more internet gateways.
+--
+-- 'nextToken', 'describeInternetGatewaysResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeInternetGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeInternetGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeInternetGatewaysResponse
+newDescribeInternetGatewaysResponse pHttpStatus_ =
+  DescribeInternetGatewaysResponse'
+    { internetGateways =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more internet gateways.
+describeInternetGatewaysResponse_internetGateways :: Lens.Lens' DescribeInternetGatewaysResponse (Prelude.Maybe [InternetGateway])
+describeInternetGatewaysResponse_internetGateways = Lens.lens (\DescribeInternetGatewaysResponse' {internetGateways} -> internetGateways) (\s@DescribeInternetGatewaysResponse' {} a -> s {internetGateways = a} :: DescribeInternetGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeInternetGatewaysResponse_nextToken :: Lens.Lens' DescribeInternetGatewaysResponse (Prelude.Maybe Prelude.Text)
+describeInternetGatewaysResponse_nextToken = Lens.lens (\DescribeInternetGatewaysResponse' {nextToken} -> nextToken) (\s@DescribeInternetGatewaysResponse' {} a -> s {nextToken = a} :: DescribeInternetGatewaysResponse)
+
+-- | The response's http status code.
+describeInternetGatewaysResponse_httpStatus :: Lens.Lens' DescribeInternetGatewaysResponse Prelude.Int
+describeInternetGatewaysResponse_httpStatus = Lens.lens (\DescribeInternetGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeInternetGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeInternetGatewaysResponse)
+
+instance
+  Prelude.NFData
+    DescribeInternetGatewaysResponse
+  where
+  rnf DescribeInternetGatewaysResponse' {..} =
+    Prelude.rnf internetGateways
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIpamPools.hs b/gen/Amazonka/EC2/DescribeIpamPools.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIpamPools.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIpamPools
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about your IPAM pools.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeIpamPools
+  ( -- * Creating a Request
+    DescribeIpamPools (..),
+    newDescribeIpamPools,
+
+    -- * Request Lenses
+    describeIpamPools_dryRun,
+    describeIpamPools_filters,
+    describeIpamPools_ipamPoolIds,
+    describeIpamPools_maxResults,
+    describeIpamPools_nextToken,
+
+    -- * Destructuring the Response
+    DescribeIpamPoolsResponse (..),
+    newDescribeIpamPoolsResponse,
+
+    -- * Response Lenses
+    describeIpamPoolsResponse_ipamPools,
+    describeIpamPoolsResponse_nextToken,
+    describeIpamPoolsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIpamPools' smart constructor.
+data DescribeIpamPools = DescribeIpamPools'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters for the request. For more information about
+    -- filtering, see
+    -- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the IPAM pools you would like information on.
+    ipamPoolIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpamPools' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeIpamPools_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeIpamPools_filters' - One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+--
+-- 'ipamPoolIds', 'describeIpamPools_ipamPoolIds' - The IDs of the IPAM pools you would like information on.
+--
+-- 'maxResults', 'describeIpamPools_maxResults' - The maximum number of results to return in the request.
+--
+-- 'nextToken', 'describeIpamPools_nextToken' - The token for the next page of results.
+newDescribeIpamPools ::
+  DescribeIpamPools
+newDescribeIpamPools =
+  DescribeIpamPools'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      ipamPoolIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+describeIpamPools_dryRun :: Lens.Lens' DescribeIpamPools (Prelude.Maybe Prelude.Bool)
+describeIpamPools_dryRun = Lens.lens (\DescribeIpamPools' {dryRun} -> dryRun) (\s@DescribeIpamPools' {} a -> s {dryRun = a} :: DescribeIpamPools)
+
+-- | One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+describeIpamPools_filters :: Lens.Lens' DescribeIpamPools (Prelude.Maybe [Filter])
+describeIpamPools_filters = Lens.lens (\DescribeIpamPools' {filters} -> filters) (\s@DescribeIpamPools' {} a -> s {filters = a} :: DescribeIpamPools) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the IPAM pools you would like information on.
+describeIpamPools_ipamPoolIds :: Lens.Lens' DescribeIpamPools (Prelude.Maybe [Prelude.Text])
+describeIpamPools_ipamPoolIds = Lens.lens (\DescribeIpamPools' {ipamPoolIds} -> ipamPoolIds) (\s@DescribeIpamPools' {} a -> s {ipamPoolIds = a} :: DescribeIpamPools) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in the request.
+describeIpamPools_maxResults :: Lens.Lens' DescribeIpamPools (Prelude.Maybe Prelude.Natural)
+describeIpamPools_maxResults = Lens.lens (\DescribeIpamPools' {maxResults} -> maxResults) (\s@DescribeIpamPools' {} a -> s {maxResults = a} :: DescribeIpamPools)
+
+-- | The token for the next page of results.
+describeIpamPools_nextToken :: Lens.Lens' DescribeIpamPools (Prelude.Maybe Prelude.Text)
+describeIpamPools_nextToken = Lens.lens (\DescribeIpamPools' {nextToken} -> nextToken) (\s@DescribeIpamPools' {} a -> s {nextToken = a} :: DescribeIpamPools)
+
+instance Core.AWSPager DescribeIpamPools where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeIpamPoolsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeIpamPoolsResponse_ipamPools
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeIpamPools_nextToken
+          Lens..~ rs
+          Lens.^? describeIpamPoolsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeIpamPools where
+  type
+    AWSResponse DescribeIpamPools =
+      DescribeIpamPoolsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIpamPoolsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipamPoolSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIpamPools where
+  hashWithSalt _salt DescribeIpamPools' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` ipamPoolIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeIpamPools where
+  rnf DescribeIpamPools' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf ipamPoolIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeIpamPools where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeIpamPools where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIpamPools where
+  toQuery DescribeIpamPools' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeIpamPools" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "IpamPoolId"
+              Prelude.<$> ipamPoolIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeIpamPoolsResponse' smart constructor.
+data DescribeIpamPoolsResponse = DescribeIpamPoolsResponse'
+  { -- | Information about the IPAM pools.
+    ipamPools :: Prelude.Maybe [IpamPool],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpamPoolsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPools', 'describeIpamPoolsResponse_ipamPools' - Information about the IPAM pools.
+--
+-- 'nextToken', 'describeIpamPoolsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeIpamPoolsResponse_httpStatus' - The response's http status code.
+newDescribeIpamPoolsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIpamPoolsResponse
+newDescribeIpamPoolsResponse pHttpStatus_ =
+  DescribeIpamPoolsResponse'
+    { ipamPools =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPAM pools.
+describeIpamPoolsResponse_ipamPools :: Lens.Lens' DescribeIpamPoolsResponse (Prelude.Maybe [IpamPool])
+describeIpamPoolsResponse_ipamPools = Lens.lens (\DescribeIpamPoolsResponse' {ipamPools} -> ipamPools) (\s@DescribeIpamPoolsResponse' {} a -> s {ipamPools = a} :: DescribeIpamPoolsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeIpamPoolsResponse_nextToken :: Lens.Lens' DescribeIpamPoolsResponse (Prelude.Maybe Prelude.Text)
+describeIpamPoolsResponse_nextToken = Lens.lens (\DescribeIpamPoolsResponse' {nextToken} -> nextToken) (\s@DescribeIpamPoolsResponse' {} a -> s {nextToken = a} :: DescribeIpamPoolsResponse)
+
+-- | The response's http status code.
+describeIpamPoolsResponse_httpStatus :: Lens.Lens' DescribeIpamPoolsResponse Prelude.Int
+describeIpamPoolsResponse_httpStatus = Lens.lens (\DescribeIpamPoolsResponse' {httpStatus} -> httpStatus) (\s@DescribeIpamPoolsResponse' {} a -> s {httpStatus = a} :: DescribeIpamPoolsResponse)
+
+instance Prelude.NFData DescribeIpamPoolsResponse where
+  rnf DescribeIpamPoolsResponse' {..} =
+    Prelude.rnf ipamPools
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIpamScopes.hs b/gen/Amazonka/EC2/DescribeIpamScopes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIpamScopes.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIpamScopes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about your IPAM scopes.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeIpamScopes
+  ( -- * Creating a Request
+    DescribeIpamScopes (..),
+    newDescribeIpamScopes,
+
+    -- * Request Lenses
+    describeIpamScopes_dryRun,
+    describeIpamScopes_filters,
+    describeIpamScopes_ipamScopeIds,
+    describeIpamScopes_maxResults,
+    describeIpamScopes_nextToken,
+
+    -- * Destructuring the Response
+    DescribeIpamScopesResponse (..),
+    newDescribeIpamScopesResponse,
+
+    -- * Response Lenses
+    describeIpamScopesResponse_ipamScopes,
+    describeIpamScopesResponse_nextToken,
+    describeIpamScopesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIpamScopes' smart constructor.
+data DescribeIpamScopes = DescribeIpamScopes'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters for the request. For more information about
+    -- filtering, see
+    -- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the scopes you want information on.
+    ipamScopeIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpamScopes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeIpamScopes_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeIpamScopes_filters' - One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+--
+-- 'ipamScopeIds', 'describeIpamScopes_ipamScopeIds' - The IDs of the scopes you want information on.
+--
+-- 'maxResults', 'describeIpamScopes_maxResults' - The maximum number of results to return in the request.
+--
+-- 'nextToken', 'describeIpamScopes_nextToken' - The token for the next page of results.
+newDescribeIpamScopes ::
+  DescribeIpamScopes
+newDescribeIpamScopes =
+  DescribeIpamScopes'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      ipamScopeIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+describeIpamScopes_dryRun :: Lens.Lens' DescribeIpamScopes (Prelude.Maybe Prelude.Bool)
+describeIpamScopes_dryRun = Lens.lens (\DescribeIpamScopes' {dryRun} -> dryRun) (\s@DescribeIpamScopes' {} a -> s {dryRun = a} :: DescribeIpamScopes)
+
+-- | One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+describeIpamScopes_filters :: Lens.Lens' DescribeIpamScopes (Prelude.Maybe [Filter])
+describeIpamScopes_filters = Lens.lens (\DescribeIpamScopes' {filters} -> filters) (\s@DescribeIpamScopes' {} a -> s {filters = a} :: DescribeIpamScopes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the scopes you want information on.
+describeIpamScopes_ipamScopeIds :: Lens.Lens' DescribeIpamScopes (Prelude.Maybe [Prelude.Text])
+describeIpamScopes_ipamScopeIds = Lens.lens (\DescribeIpamScopes' {ipamScopeIds} -> ipamScopeIds) (\s@DescribeIpamScopes' {} a -> s {ipamScopeIds = a} :: DescribeIpamScopes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in the request.
+describeIpamScopes_maxResults :: Lens.Lens' DescribeIpamScopes (Prelude.Maybe Prelude.Natural)
+describeIpamScopes_maxResults = Lens.lens (\DescribeIpamScopes' {maxResults} -> maxResults) (\s@DescribeIpamScopes' {} a -> s {maxResults = a} :: DescribeIpamScopes)
+
+-- | The token for the next page of results.
+describeIpamScopes_nextToken :: Lens.Lens' DescribeIpamScopes (Prelude.Maybe Prelude.Text)
+describeIpamScopes_nextToken = Lens.lens (\DescribeIpamScopes' {nextToken} -> nextToken) (\s@DescribeIpamScopes' {} a -> s {nextToken = a} :: DescribeIpamScopes)
+
+instance Core.AWSPager DescribeIpamScopes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeIpamScopesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeIpamScopesResponse_ipamScopes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeIpamScopes_nextToken
+          Lens..~ rs
+          Lens.^? describeIpamScopesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeIpamScopes where
+  type
+    AWSResponse DescribeIpamScopes =
+      DescribeIpamScopesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIpamScopesResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipamScopeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIpamScopes where
+  hashWithSalt _salt DescribeIpamScopes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` ipamScopeIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeIpamScopes where
+  rnf DescribeIpamScopes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf ipamScopeIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeIpamScopes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeIpamScopes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIpamScopes where
+  toQuery DescribeIpamScopes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeIpamScopes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "IpamScopeId"
+              Prelude.<$> ipamScopeIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeIpamScopesResponse' smart constructor.
+data DescribeIpamScopesResponse = DescribeIpamScopesResponse'
+  { -- | The scopes you want information on.
+    ipamScopes :: Prelude.Maybe [IpamScope],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpamScopesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamScopes', 'describeIpamScopesResponse_ipamScopes' - The scopes you want information on.
+--
+-- 'nextToken', 'describeIpamScopesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeIpamScopesResponse_httpStatus' - The response's http status code.
+newDescribeIpamScopesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIpamScopesResponse
+newDescribeIpamScopesResponse pHttpStatus_ =
+  DescribeIpamScopesResponse'
+    { ipamScopes =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The scopes you want information on.
+describeIpamScopesResponse_ipamScopes :: Lens.Lens' DescribeIpamScopesResponse (Prelude.Maybe [IpamScope])
+describeIpamScopesResponse_ipamScopes = Lens.lens (\DescribeIpamScopesResponse' {ipamScopes} -> ipamScopes) (\s@DescribeIpamScopesResponse' {} a -> s {ipamScopes = a} :: DescribeIpamScopesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeIpamScopesResponse_nextToken :: Lens.Lens' DescribeIpamScopesResponse (Prelude.Maybe Prelude.Text)
+describeIpamScopesResponse_nextToken = Lens.lens (\DescribeIpamScopesResponse' {nextToken} -> nextToken) (\s@DescribeIpamScopesResponse' {} a -> s {nextToken = a} :: DescribeIpamScopesResponse)
+
+-- | The response's http status code.
+describeIpamScopesResponse_httpStatus :: Lens.Lens' DescribeIpamScopesResponse Prelude.Int
+describeIpamScopesResponse_httpStatus = Lens.lens (\DescribeIpamScopesResponse' {httpStatus} -> httpStatus) (\s@DescribeIpamScopesResponse' {} a -> s {httpStatus = a} :: DescribeIpamScopesResponse)
+
+instance Prelude.NFData DescribeIpamScopesResponse where
+  rnf DescribeIpamScopesResponse' {..} =
+    Prelude.rnf ipamScopes
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIpams.hs b/gen/Amazonka/EC2/DescribeIpams.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIpams.hs
@@ -0,0 +1,273 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIpams
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about your IPAM pools.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeIpams
+  ( -- * Creating a Request
+    DescribeIpams (..),
+    newDescribeIpams,
+
+    -- * Request Lenses
+    describeIpams_dryRun,
+    describeIpams_filters,
+    describeIpams_ipamIds,
+    describeIpams_maxResults,
+    describeIpams_nextToken,
+
+    -- * Destructuring the Response
+    DescribeIpamsResponse (..),
+    newDescribeIpamsResponse,
+
+    -- * Response Lenses
+    describeIpamsResponse_ipams,
+    describeIpamsResponse_nextToken,
+    describeIpamsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIpams' smart constructor.
+data DescribeIpams = DescribeIpams'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters for the request. For more information about
+    -- filtering, see
+    -- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the IPAMs you want information on.
+    ipamIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpams' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeIpams_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeIpams_filters' - One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+--
+-- 'ipamIds', 'describeIpams_ipamIds' - The IDs of the IPAMs you want information on.
+--
+-- 'maxResults', 'describeIpams_maxResults' - The maximum number of results to return in the request.
+--
+-- 'nextToken', 'describeIpams_nextToken' - The token for the next page of results.
+newDescribeIpams ::
+  DescribeIpams
+newDescribeIpams =
+  DescribeIpams'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      ipamIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+describeIpams_dryRun :: Lens.Lens' DescribeIpams (Prelude.Maybe Prelude.Bool)
+describeIpams_dryRun = Lens.lens (\DescribeIpams' {dryRun} -> dryRun) (\s@DescribeIpams' {} a -> s {dryRun = a} :: DescribeIpams)
+
+-- | One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+describeIpams_filters :: Lens.Lens' DescribeIpams (Prelude.Maybe [Filter])
+describeIpams_filters = Lens.lens (\DescribeIpams' {filters} -> filters) (\s@DescribeIpams' {} a -> s {filters = a} :: DescribeIpams) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the IPAMs you want information on.
+describeIpams_ipamIds :: Lens.Lens' DescribeIpams (Prelude.Maybe [Prelude.Text])
+describeIpams_ipamIds = Lens.lens (\DescribeIpams' {ipamIds} -> ipamIds) (\s@DescribeIpams' {} a -> s {ipamIds = a} :: DescribeIpams) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in the request.
+describeIpams_maxResults :: Lens.Lens' DescribeIpams (Prelude.Maybe Prelude.Natural)
+describeIpams_maxResults = Lens.lens (\DescribeIpams' {maxResults} -> maxResults) (\s@DescribeIpams' {} a -> s {maxResults = a} :: DescribeIpams)
+
+-- | The token for the next page of results.
+describeIpams_nextToken :: Lens.Lens' DescribeIpams (Prelude.Maybe Prelude.Text)
+describeIpams_nextToken = Lens.lens (\DescribeIpams' {nextToken} -> nextToken) (\s@DescribeIpams' {} a -> s {nextToken = a} :: DescribeIpams)
+
+instance Core.AWSPager DescribeIpams where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeIpamsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeIpamsResponse_ipams
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeIpams_nextToken
+          Lens..~ rs
+          Lens.^? describeIpamsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeIpams where
+  type
+    AWSResponse DescribeIpams =
+      DescribeIpamsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIpamsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipamSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIpams where
+  hashWithSalt _salt DescribeIpams' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` ipamIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeIpams where
+  rnf DescribeIpams' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf ipamIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeIpams where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeIpams where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIpams where
+  toQuery DescribeIpams' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeIpams" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "IpamId" Prelude.<$> ipamIds),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeIpamsResponse' smart constructor.
+data DescribeIpamsResponse = DescribeIpamsResponse'
+  { -- | Information about the IPAMs.
+    ipams :: Prelude.Maybe [Ipam],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpamsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipams', 'describeIpamsResponse_ipams' - Information about the IPAMs.
+--
+-- 'nextToken', 'describeIpamsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeIpamsResponse_httpStatus' - The response's http status code.
+newDescribeIpamsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIpamsResponse
+newDescribeIpamsResponse pHttpStatus_ =
+  DescribeIpamsResponse'
+    { ipams = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPAMs.
+describeIpamsResponse_ipams :: Lens.Lens' DescribeIpamsResponse (Prelude.Maybe [Ipam])
+describeIpamsResponse_ipams = Lens.lens (\DescribeIpamsResponse' {ipams} -> ipams) (\s@DescribeIpamsResponse' {} a -> s {ipams = a} :: DescribeIpamsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeIpamsResponse_nextToken :: Lens.Lens' DescribeIpamsResponse (Prelude.Maybe Prelude.Text)
+describeIpamsResponse_nextToken = Lens.lens (\DescribeIpamsResponse' {nextToken} -> nextToken) (\s@DescribeIpamsResponse' {} a -> s {nextToken = a} :: DescribeIpamsResponse)
+
+-- | The response's http status code.
+describeIpamsResponse_httpStatus :: Lens.Lens' DescribeIpamsResponse Prelude.Int
+describeIpamsResponse_httpStatus = Lens.lens (\DescribeIpamsResponse' {httpStatus} -> httpStatus) (\s@DescribeIpamsResponse' {} a -> s {httpStatus = a} :: DescribeIpamsResponse)
+
+instance Prelude.NFData DescribeIpamsResponse where
+  rnf DescribeIpamsResponse' {..} =
+    Prelude.rnf ipams
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeIpv6Pools.hs b/gen/Amazonka/EC2/DescribeIpv6Pools.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeIpv6Pools.hs
@@ -0,0 +1,300 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeIpv6Pools
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your IPv6 address pools.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeIpv6Pools
+  ( -- * Creating a Request
+    DescribeIpv6Pools (..),
+    newDescribeIpv6Pools,
+
+    -- * Request Lenses
+    describeIpv6Pools_dryRun,
+    describeIpv6Pools_filters,
+    describeIpv6Pools_maxResults,
+    describeIpv6Pools_nextToken,
+    describeIpv6Pools_poolIds,
+
+    -- * Destructuring the Response
+    DescribeIpv6PoolsResponse (..),
+    newDescribeIpv6PoolsResponse,
+
+    -- * Response Lenses
+    describeIpv6PoolsResponse_ipv6Pools,
+    describeIpv6PoolsResponse_nextToken,
+    describeIpv6PoolsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeIpv6Pools' smart constructor.
+data DescribeIpv6Pools = DescribeIpv6Pools'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the IPv6 address pools.
+    poolIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpv6Pools' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeIpv6Pools_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeIpv6Pools_filters' - One or more filters.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'describeIpv6Pools_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeIpv6Pools_nextToken' - The token for the next page of results.
+--
+-- 'poolIds', 'describeIpv6Pools_poolIds' - The IDs of the IPv6 address pools.
+newDescribeIpv6Pools ::
+  DescribeIpv6Pools
+newDescribeIpv6Pools =
+  DescribeIpv6Pools'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      poolIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeIpv6Pools_dryRun :: Lens.Lens' DescribeIpv6Pools (Prelude.Maybe Prelude.Bool)
+describeIpv6Pools_dryRun = Lens.lens (\DescribeIpv6Pools' {dryRun} -> dryRun) (\s@DescribeIpv6Pools' {} a -> s {dryRun = a} :: DescribeIpv6Pools)
+
+-- | One or more filters.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeIpv6Pools_filters :: Lens.Lens' DescribeIpv6Pools (Prelude.Maybe [Filter])
+describeIpv6Pools_filters = Lens.lens (\DescribeIpv6Pools' {filters} -> filters) (\s@DescribeIpv6Pools' {} a -> s {filters = a} :: DescribeIpv6Pools) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeIpv6Pools_maxResults :: Lens.Lens' DescribeIpv6Pools (Prelude.Maybe Prelude.Natural)
+describeIpv6Pools_maxResults = Lens.lens (\DescribeIpv6Pools' {maxResults} -> maxResults) (\s@DescribeIpv6Pools' {} a -> s {maxResults = a} :: DescribeIpv6Pools)
+
+-- | The token for the next page of results.
+describeIpv6Pools_nextToken :: Lens.Lens' DescribeIpv6Pools (Prelude.Maybe Prelude.Text)
+describeIpv6Pools_nextToken = Lens.lens (\DescribeIpv6Pools' {nextToken} -> nextToken) (\s@DescribeIpv6Pools' {} a -> s {nextToken = a} :: DescribeIpv6Pools)
+
+-- | The IDs of the IPv6 address pools.
+describeIpv6Pools_poolIds :: Lens.Lens' DescribeIpv6Pools (Prelude.Maybe [Prelude.Text])
+describeIpv6Pools_poolIds = Lens.lens (\DescribeIpv6Pools' {poolIds} -> poolIds) (\s@DescribeIpv6Pools' {} a -> s {poolIds = a} :: DescribeIpv6Pools) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeIpv6Pools where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeIpv6PoolsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeIpv6PoolsResponse_ipv6Pools
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeIpv6Pools_nextToken
+          Lens..~ rs
+          Lens.^? describeIpv6PoolsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeIpv6Pools where
+  type
+    AWSResponse DescribeIpv6Pools =
+      DescribeIpv6PoolsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeIpv6PoolsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipv6PoolSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeIpv6Pools where
+  hashWithSalt _salt DescribeIpv6Pools' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` poolIds
+
+instance Prelude.NFData DescribeIpv6Pools where
+  rnf DescribeIpv6Pools' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf poolIds
+
+instance Data.ToHeaders DescribeIpv6Pools where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeIpv6Pools where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeIpv6Pools where
+  toQuery DescribeIpv6Pools' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeIpv6Pools" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "PoolId" Prelude.<$> poolIds)
+      ]
+
+-- | /See:/ 'newDescribeIpv6PoolsResponse' smart constructor.
+data DescribeIpv6PoolsResponse = DescribeIpv6PoolsResponse'
+  { -- | Information about the IPv6 address pools.
+    ipv6Pools :: Prelude.Maybe [Ipv6Pool],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeIpv6PoolsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Pools', 'describeIpv6PoolsResponse_ipv6Pools' - Information about the IPv6 address pools.
+--
+-- 'nextToken', 'describeIpv6PoolsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeIpv6PoolsResponse_httpStatus' - The response's http status code.
+newDescribeIpv6PoolsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeIpv6PoolsResponse
+newDescribeIpv6PoolsResponse pHttpStatus_ =
+  DescribeIpv6PoolsResponse'
+    { ipv6Pools =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPv6 address pools.
+describeIpv6PoolsResponse_ipv6Pools :: Lens.Lens' DescribeIpv6PoolsResponse (Prelude.Maybe [Ipv6Pool])
+describeIpv6PoolsResponse_ipv6Pools = Lens.lens (\DescribeIpv6PoolsResponse' {ipv6Pools} -> ipv6Pools) (\s@DescribeIpv6PoolsResponse' {} a -> s {ipv6Pools = a} :: DescribeIpv6PoolsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeIpv6PoolsResponse_nextToken :: Lens.Lens' DescribeIpv6PoolsResponse (Prelude.Maybe Prelude.Text)
+describeIpv6PoolsResponse_nextToken = Lens.lens (\DescribeIpv6PoolsResponse' {nextToken} -> nextToken) (\s@DescribeIpv6PoolsResponse' {} a -> s {nextToken = a} :: DescribeIpv6PoolsResponse)
+
+-- | The response's http status code.
+describeIpv6PoolsResponse_httpStatus :: Lens.Lens' DescribeIpv6PoolsResponse Prelude.Int
+describeIpv6PoolsResponse_httpStatus = Lens.lens (\DescribeIpv6PoolsResponse' {httpStatus} -> httpStatus) (\s@DescribeIpv6PoolsResponse' {} a -> s {httpStatus = a} :: DescribeIpv6PoolsResponse)
+
+instance Prelude.NFData DescribeIpv6PoolsResponse where
+  rnf DescribeIpv6PoolsResponse' {..} =
+    Prelude.rnf ipv6Pools
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeKeyPairs.hs b/gen/Amazonka/EC2/DescribeKeyPairs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeKeyPairs.hs
@@ -0,0 +1,292 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeKeyPairs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified key pairs or all of your key pairs.
+--
+-- For more information about key pairs, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 key pairs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DescribeKeyPairs
+  ( -- * Creating a Request
+    DescribeKeyPairs (..),
+    newDescribeKeyPairs,
+
+    -- * Request Lenses
+    describeKeyPairs_dryRun,
+    describeKeyPairs_filters,
+    describeKeyPairs_includePublicKey,
+    describeKeyPairs_keyNames,
+    describeKeyPairs_keyPairIds,
+
+    -- * Destructuring the Response
+    DescribeKeyPairsResponse (..),
+    newDescribeKeyPairsResponse,
+
+    -- * Response Lenses
+    describeKeyPairsResponse_keyPairs,
+    describeKeyPairsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeKeyPairs' smart constructor.
+data DescribeKeyPairs = DescribeKeyPairs'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @key-pair-id@ - The ID of the key pair.
+    --
+    -- -   @fingerprint@ - The fingerprint of the key pair.
+    --
+    -- -   @key-name@ - The name of the key pair.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    filters :: Prelude.Maybe [Filter],
+    -- | If @true@, the public key material is included in the response.
+    --
+    -- Default: @false@
+    includePublicKey :: Prelude.Maybe Prelude.Bool,
+    -- | The key pair names.
+    --
+    -- Default: Describes all of your key pairs.
+    keyNames :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the key pairs.
+    keyPairIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeKeyPairs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeKeyPairs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeKeyPairs_filters' - The filters.
+--
+-- -   @key-pair-id@ - The ID of the key pair.
+--
+-- -   @fingerprint@ - The fingerprint of the key pair.
+--
+-- -   @key-name@ - The name of the key pair.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- 'includePublicKey', 'describeKeyPairs_includePublicKey' - If @true@, the public key material is included in the response.
+--
+-- Default: @false@
+--
+-- 'keyNames', 'describeKeyPairs_keyNames' - The key pair names.
+--
+-- Default: Describes all of your key pairs.
+--
+-- 'keyPairIds', 'describeKeyPairs_keyPairIds' - The IDs of the key pairs.
+newDescribeKeyPairs ::
+  DescribeKeyPairs
+newDescribeKeyPairs =
+  DescribeKeyPairs'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      includePublicKey = Prelude.Nothing,
+      keyNames = Prelude.Nothing,
+      keyPairIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeKeyPairs_dryRun :: Lens.Lens' DescribeKeyPairs (Prelude.Maybe Prelude.Bool)
+describeKeyPairs_dryRun = Lens.lens (\DescribeKeyPairs' {dryRun} -> dryRun) (\s@DescribeKeyPairs' {} a -> s {dryRun = a} :: DescribeKeyPairs)
+
+-- | The filters.
+--
+-- -   @key-pair-id@ - The ID of the key pair.
+--
+-- -   @fingerprint@ - The fingerprint of the key pair.
+--
+-- -   @key-name@ - The name of the key pair.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+describeKeyPairs_filters :: Lens.Lens' DescribeKeyPairs (Prelude.Maybe [Filter])
+describeKeyPairs_filters = Lens.lens (\DescribeKeyPairs' {filters} -> filters) (\s@DescribeKeyPairs' {} a -> s {filters = a} :: DescribeKeyPairs) Prelude.. Lens.mapping Lens.coerced
+
+-- | If @true@, the public key material is included in the response.
+--
+-- Default: @false@
+describeKeyPairs_includePublicKey :: Lens.Lens' DescribeKeyPairs (Prelude.Maybe Prelude.Bool)
+describeKeyPairs_includePublicKey = Lens.lens (\DescribeKeyPairs' {includePublicKey} -> includePublicKey) (\s@DescribeKeyPairs' {} a -> s {includePublicKey = a} :: DescribeKeyPairs)
+
+-- | The key pair names.
+--
+-- Default: Describes all of your key pairs.
+describeKeyPairs_keyNames :: Lens.Lens' DescribeKeyPairs (Prelude.Maybe [Prelude.Text])
+describeKeyPairs_keyNames = Lens.lens (\DescribeKeyPairs' {keyNames} -> keyNames) (\s@DescribeKeyPairs' {} a -> s {keyNames = a} :: DescribeKeyPairs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the key pairs.
+describeKeyPairs_keyPairIds :: Lens.Lens' DescribeKeyPairs (Prelude.Maybe [Prelude.Text])
+describeKeyPairs_keyPairIds = Lens.lens (\DescribeKeyPairs' {keyPairIds} -> keyPairIds) (\s@DescribeKeyPairs' {} a -> s {keyPairIds = a} :: DescribeKeyPairs) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeKeyPairs where
+  type
+    AWSResponse DescribeKeyPairs =
+      DescribeKeyPairsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeKeyPairsResponse'
+            Prelude.<$> ( x
+                            Data..@? "keySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeKeyPairs where
+  hashWithSalt _salt DescribeKeyPairs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` includePublicKey
+      `Prelude.hashWithSalt` keyNames
+      `Prelude.hashWithSalt` keyPairIds
+
+instance Prelude.NFData DescribeKeyPairs where
+  rnf DescribeKeyPairs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf includePublicKey
+      `Prelude.seq` Prelude.rnf keyNames
+      `Prelude.seq` Prelude.rnf keyPairIds
+
+instance Data.ToHeaders DescribeKeyPairs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeKeyPairs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeKeyPairs where
+  toQuery DescribeKeyPairs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeKeyPairs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "IncludePublicKey" Data.=: includePublicKey,
+        Data.toQuery
+          (Data.toQueryList "KeyName" Prelude.<$> keyNames),
+        Data.toQuery
+          ( Data.toQueryList "KeyPairId"
+              Prelude.<$> keyPairIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeKeyPairsResponse' smart constructor.
+data DescribeKeyPairsResponse = DescribeKeyPairsResponse'
+  { -- | Information about the key pairs.
+    keyPairs :: Prelude.Maybe [KeyPairInfo],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeKeyPairsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyPairs', 'describeKeyPairsResponse_keyPairs' - Information about the key pairs.
+--
+-- 'httpStatus', 'describeKeyPairsResponse_httpStatus' - The response's http status code.
+newDescribeKeyPairsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeKeyPairsResponse
+newDescribeKeyPairsResponse pHttpStatus_ =
+  DescribeKeyPairsResponse'
+    { keyPairs =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the key pairs.
+describeKeyPairsResponse_keyPairs :: Lens.Lens' DescribeKeyPairsResponse (Prelude.Maybe [KeyPairInfo])
+describeKeyPairsResponse_keyPairs = Lens.lens (\DescribeKeyPairsResponse' {keyPairs} -> keyPairs) (\s@DescribeKeyPairsResponse' {} a -> s {keyPairs = a} :: DescribeKeyPairsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeKeyPairsResponse_httpStatus :: Lens.Lens' DescribeKeyPairsResponse Prelude.Int
+describeKeyPairsResponse_httpStatus = Lens.lens (\DescribeKeyPairsResponse' {httpStatus} -> httpStatus) (\s@DescribeKeyPairsResponse' {} a -> s {httpStatus = a} :: DescribeKeyPairsResponse)
+
+instance Prelude.NFData DescribeKeyPairsResponse where
+  rnf DescribeKeyPairsResponse' {..} =
+    Prelude.rnf keyPairs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLaunchTemplateVersions.hs b/gen/Amazonka/EC2/DescribeLaunchTemplateVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLaunchTemplateVersions.hs
@@ -0,0 +1,525 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLaunchTemplateVersions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more versions of a specified launch template. You can
+-- describe all versions, individual versions, or a range of versions. You
+-- can also describe all the latest versions or all the default versions of
+-- all the launch templates in your account.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLaunchTemplateVersions
+  ( -- * Creating a Request
+    DescribeLaunchTemplateVersions (..),
+    newDescribeLaunchTemplateVersions,
+
+    -- * Request Lenses
+    describeLaunchTemplateVersions_dryRun,
+    describeLaunchTemplateVersions_filters,
+    describeLaunchTemplateVersions_launchTemplateId,
+    describeLaunchTemplateVersions_launchTemplateName,
+    describeLaunchTemplateVersions_maxResults,
+    describeLaunchTemplateVersions_maxVersion,
+    describeLaunchTemplateVersions_minVersion,
+    describeLaunchTemplateVersions_nextToken,
+    describeLaunchTemplateVersions_versions,
+
+    -- * Destructuring the Response
+    DescribeLaunchTemplateVersionsResponse (..),
+    newDescribeLaunchTemplateVersionsResponse,
+
+    -- * Response Lenses
+    describeLaunchTemplateVersionsResponse_launchTemplateVersions,
+    describeLaunchTemplateVersionsResponse_nextToken,
+    describeLaunchTemplateVersionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLaunchTemplateVersions' smart constructor.
+data DescribeLaunchTemplateVersions = DescribeLaunchTemplateVersions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @create-time@ - The time the launch template version was created.
+    --
+    -- -   @ebs-optimized@ - A boolean that indicates whether the instance is
+    --     optimized for Amazon EBS I\/O.
+    --
+    -- -   @http-endpoint@ - Indicates whether the HTTP metadata endpoint on
+    --     your instances is enabled (@enabled@ | @disabled@).
+    --
+    -- -   @http-protocol-ipv4@ - Indicates whether the IPv4 endpoint for the
+    --     instance metadata service is enabled (@enabled@ | @disabled@).
+    --
+    -- -   @host-resource-group-arn@ - The ARN of the host resource group in
+    --     which to launch the instances.
+    --
+    -- -   @http-tokens@ - The state of token usage for your instance metadata
+    --     requests (@optional@ | @required@).
+    --
+    -- -   @iam-instance-profile@ - The ARN of the IAM instance profile.
+    --
+    -- -   @image-id@ - The ID of the AMI.
+    --
+    -- -   @instance-type@ - The instance type.
+    --
+    -- -   @is-default-version@ - A boolean that indicates whether the launch
+    --     template version is the default version.
+    --
+    -- -   @kernel-id@ - The kernel ID.
+    --
+    -- -   @license-configuration-arn@ - The ARN of the license configuration.
+    --
+    -- -   @network-card-index@ - The index of the network card.
+    --
+    -- -   @ram-disk-id@ - The RAM disk ID.
+    filters :: Prelude.Maybe [Filter],
+    -- | The ID of the launch template.
+    --
+    -- To describe one or more versions of a specified launch template, you
+    -- must specify either the @LaunchTemplateId@ or the @LaunchTemplateName@,
+    -- but not both.
+    --
+    -- To describe all the latest or default launch template versions in your
+    -- account, you must omit this parameter.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- To describe one or more versions of a specified launch template, you
+    -- must specify either the @LaunchTemplateName@ or the @LaunchTemplateId@,
+    -- but not both.
+    --
+    -- To describe all the latest or default launch template versions in your
+    -- account, you must omit this parameter.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 1 and 200.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The version number up to which to describe launch template versions.
+    maxVersion :: Prelude.Maybe Prelude.Text,
+    -- | The version number after which to describe launch template versions.
+    minVersion :: Prelude.Maybe Prelude.Text,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more versions of the launch template. Valid values depend on
+    -- whether you are describing a specified launch template (by ID or name)
+    -- or all launch templates in your account.
+    --
+    -- To describe one or more versions of a specified launch template, valid
+    -- values are @$Latest@, @$Default@, and numbers.
+    --
+    -- To describe all launch templates in your account that are defined as the
+    -- latest version, the valid value is @$Latest@. To describe all launch
+    -- templates in your account that are defined as the default version, the
+    -- valid value is @$Default@. You can specify @$Latest@ and @$Default@ in
+    -- the same request. You cannot specify numbers.
+    versions :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLaunchTemplateVersions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLaunchTemplateVersions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLaunchTemplateVersions_filters' - One or more filters.
+--
+-- -   @create-time@ - The time the launch template version was created.
+--
+-- -   @ebs-optimized@ - A boolean that indicates whether the instance is
+--     optimized for Amazon EBS I\/O.
+--
+-- -   @http-endpoint@ - Indicates whether the HTTP metadata endpoint on
+--     your instances is enabled (@enabled@ | @disabled@).
+--
+-- -   @http-protocol-ipv4@ - Indicates whether the IPv4 endpoint for the
+--     instance metadata service is enabled (@enabled@ | @disabled@).
+--
+-- -   @host-resource-group-arn@ - The ARN of the host resource group in
+--     which to launch the instances.
+--
+-- -   @http-tokens@ - The state of token usage for your instance metadata
+--     requests (@optional@ | @required@).
+--
+-- -   @iam-instance-profile@ - The ARN of the IAM instance profile.
+--
+-- -   @image-id@ - The ID of the AMI.
+--
+-- -   @instance-type@ - The instance type.
+--
+-- -   @is-default-version@ - A boolean that indicates whether the launch
+--     template version is the default version.
+--
+-- -   @kernel-id@ - The kernel ID.
+--
+-- -   @license-configuration-arn@ - The ARN of the license configuration.
+--
+-- -   @network-card-index@ - The index of the network card.
+--
+-- -   @ram-disk-id@ - The RAM disk ID.
+--
+-- 'launchTemplateId', 'describeLaunchTemplateVersions_launchTemplateId' - The ID of the launch template.
+--
+-- To describe one or more versions of a specified launch template, you
+-- must specify either the @LaunchTemplateId@ or the @LaunchTemplateName@,
+-- but not both.
+--
+-- To describe all the latest or default launch template versions in your
+-- account, you must omit this parameter.
+--
+-- 'launchTemplateName', 'describeLaunchTemplateVersions_launchTemplateName' - The name of the launch template.
+--
+-- To describe one or more versions of a specified launch template, you
+-- must specify either the @LaunchTemplateName@ or the @LaunchTemplateId@,
+-- but not both.
+--
+-- To describe all the latest or default launch template versions in your
+-- account, you must omit this parameter.
+--
+-- 'maxResults', 'describeLaunchTemplateVersions_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 1 and 200.
+--
+-- 'maxVersion', 'describeLaunchTemplateVersions_maxVersion' - The version number up to which to describe launch template versions.
+--
+-- 'minVersion', 'describeLaunchTemplateVersions_minVersion' - The version number after which to describe launch template versions.
+--
+-- 'nextToken', 'describeLaunchTemplateVersions_nextToken' - The token to request the next page of results.
+--
+-- 'versions', 'describeLaunchTemplateVersions_versions' - One or more versions of the launch template. Valid values depend on
+-- whether you are describing a specified launch template (by ID or name)
+-- or all launch templates in your account.
+--
+-- To describe one or more versions of a specified launch template, valid
+-- values are @$Latest@, @$Default@, and numbers.
+--
+-- To describe all launch templates in your account that are defined as the
+-- latest version, the valid value is @$Latest@. To describe all launch
+-- templates in your account that are defined as the default version, the
+-- valid value is @$Default@. You can specify @$Latest@ and @$Default@ in
+-- the same request. You cannot specify numbers.
+newDescribeLaunchTemplateVersions ::
+  DescribeLaunchTemplateVersions
+newDescribeLaunchTemplateVersions =
+  DescribeLaunchTemplateVersions'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      maxVersion = Prelude.Nothing,
+      minVersion = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      versions = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLaunchTemplateVersions_dryRun :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Bool)
+describeLaunchTemplateVersions_dryRun = Lens.lens (\DescribeLaunchTemplateVersions' {dryRun} -> dryRun) (\s@DescribeLaunchTemplateVersions' {} a -> s {dryRun = a} :: DescribeLaunchTemplateVersions)
+
+-- | One or more filters.
+--
+-- -   @create-time@ - The time the launch template version was created.
+--
+-- -   @ebs-optimized@ - A boolean that indicates whether the instance is
+--     optimized for Amazon EBS I\/O.
+--
+-- -   @http-endpoint@ - Indicates whether the HTTP metadata endpoint on
+--     your instances is enabled (@enabled@ | @disabled@).
+--
+-- -   @http-protocol-ipv4@ - Indicates whether the IPv4 endpoint for the
+--     instance metadata service is enabled (@enabled@ | @disabled@).
+--
+-- -   @host-resource-group-arn@ - The ARN of the host resource group in
+--     which to launch the instances.
+--
+-- -   @http-tokens@ - The state of token usage for your instance metadata
+--     requests (@optional@ | @required@).
+--
+-- -   @iam-instance-profile@ - The ARN of the IAM instance profile.
+--
+-- -   @image-id@ - The ID of the AMI.
+--
+-- -   @instance-type@ - The instance type.
+--
+-- -   @is-default-version@ - A boolean that indicates whether the launch
+--     template version is the default version.
+--
+-- -   @kernel-id@ - The kernel ID.
+--
+-- -   @license-configuration-arn@ - The ARN of the license configuration.
+--
+-- -   @network-card-index@ - The index of the network card.
+--
+-- -   @ram-disk-id@ - The RAM disk ID.
+describeLaunchTemplateVersions_filters :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe [Filter])
+describeLaunchTemplateVersions_filters = Lens.lens (\DescribeLaunchTemplateVersions' {filters} -> filters) (\s@DescribeLaunchTemplateVersions' {} a -> s {filters = a} :: DescribeLaunchTemplateVersions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the launch template.
+--
+-- To describe one or more versions of a specified launch template, you
+-- must specify either the @LaunchTemplateId@ or the @LaunchTemplateName@,
+-- but not both.
+--
+-- To describe all the latest or default launch template versions in your
+-- account, you must omit this parameter.
+describeLaunchTemplateVersions_launchTemplateId :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+describeLaunchTemplateVersions_launchTemplateId = Lens.lens (\DescribeLaunchTemplateVersions' {launchTemplateId} -> launchTemplateId) (\s@DescribeLaunchTemplateVersions' {} a -> s {launchTemplateId = a} :: DescribeLaunchTemplateVersions)
+
+-- | The name of the launch template.
+--
+-- To describe one or more versions of a specified launch template, you
+-- must specify either the @LaunchTemplateName@ or the @LaunchTemplateId@,
+-- but not both.
+--
+-- To describe all the latest or default launch template versions in your
+-- account, you must omit this parameter.
+describeLaunchTemplateVersions_launchTemplateName :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+describeLaunchTemplateVersions_launchTemplateName = Lens.lens (\DescribeLaunchTemplateVersions' {launchTemplateName} -> launchTemplateName) (\s@DescribeLaunchTemplateVersions' {} a -> s {launchTemplateName = a} :: DescribeLaunchTemplateVersions)
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 1 and 200.
+describeLaunchTemplateVersions_maxResults :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Int)
+describeLaunchTemplateVersions_maxResults = Lens.lens (\DescribeLaunchTemplateVersions' {maxResults} -> maxResults) (\s@DescribeLaunchTemplateVersions' {} a -> s {maxResults = a} :: DescribeLaunchTemplateVersions)
+
+-- | The version number up to which to describe launch template versions.
+describeLaunchTemplateVersions_maxVersion :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+describeLaunchTemplateVersions_maxVersion = Lens.lens (\DescribeLaunchTemplateVersions' {maxVersion} -> maxVersion) (\s@DescribeLaunchTemplateVersions' {} a -> s {maxVersion = a} :: DescribeLaunchTemplateVersions)
+
+-- | The version number after which to describe launch template versions.
+describeLaunchTemplateVersions_minVersion :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+describeLaunchTemplateVersions_minVersion = Lens.lens (\DescribeLaunchTemplateVersions' {minVersion} -> minVersion) (\s@DescribeLaunchTemplateVersions' {} a -> s {minVersion = a} :: DescribeLaunchTemplateVersions)
+
+-- | The token to request the next page of results.
+describeLaunchTemplateVersions_nextToken :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe Prelude.Text)
+describeLaunchTemplateVersions_nextToken = Lens.lens (\DescribeLaunchTemplateVersions' {nextToken} -> nextToken) (\s@DescribeLaunchTemplateVersions' {} a -> s {nextToken = a} :: DescribeLaunchTemplateVersions)
+
+-- | One or more versions of the launch template. Valid values depend on
+-- whether you are describing a specified launch template (by ID or name)
+-- or all launch templates in your account.
+--
+-- To describe one or more versions of a specified launch template, valid
+-- values are @$Latest@, @$Default@, and numbers.
+--
+-- To describe all launch templates in your account that are defined as the
+-- latest version, the valid value is @$Latest@. To describe all launch
+-- templates in your account that are defined as the default version, the
+-- valid value is @$Default@. You can specify @$Latest@ and @$Default@ in
+-- the same request. You cannot specify numbers.
+describeLaunchTemplateVersions_versions :: Lens.Lens' DescribeLaunchTemplateVersions (Prelude.Maybe [Prelude.Text])
+describeLaunchTemplateVersions_versions = Lens.lens (\DescribeLaunchTemplateVersions' {versions} -> versions) (\s@DescribeLaunchTemplateVersions' {} a -> s {versions = a} :: DescribeLaunchTemplateVersions) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeLaunchTemplateVersions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLaunchTemplateVersionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLaunchTemplateVersionsResponse_launchTemplateVersions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLaunchTemplateVersions_nextToken
+          Lens..~ rs
+          Lens.^? describeLaunchTemplateVersionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLaunchTemplateVersions
+  where
+  type
+    AWSResponse DescribeLaunchTemplateVersions =
+      DescribeLaunchTemplateVersionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLaunchTemplateVersionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "launchTemplateVersionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLaunchTemplateVersions
+  where
+  hashWithSalt
+    _salt
+    DescribeLaunchTemplateVersions' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` maxVersion
+        `Prelude.hashWithSalt` minVersion
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` versions
+
+instance
+  Prelude.NFData
+    DescribeLaunchTemplateVersions
+  where
+  rnf DescribeLaunchTemplateVersions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf maxVersion
+      `Prelude.seq` Prelude.rnf minVersion
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf versions
+
+instance
+  Data.ToHeaders
+    DescribeLaunchTemplateVersions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeLaunchTemplateVersions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLaunchTemplateVersions where
+  toQuery DescribeLaunchTemplateVersions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeLaunchTemplateVersions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        "MaxResults" Data.=: maxResults,
+        "MaxVersion" Data.=: maxVersion,
+        "MinVersion" Data.=: minVersion,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "LaunchTemplateVersion"
+              Prelude.<$> versions
+          )
+      ]
+
+-- | /See:/ 'newDescribeLaunchTemplateVersionsResponse' smart constructor.
+data DescribeLaunchTemplateVersionsResponse = DescribeLaunchTemplateVersionsResponse'
+  { -- | Information about the launch template versions.
+    launchTemplateVersions :: Prelude.Maybe [LaunchTemplateVersion],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLaunchTemplateVersionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateVersions', 'describeLaunchTemplateVersionsResponse_launchTemplateVersions' - Information about the launch template versions.
+--
+-- 'nextToken', 'describeLaunchTemplateVersionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLaunchTemplateVersionsResponse_httpStatus' - The response's http status code.
+newDescribeLaunchTemplateVersionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLaunchTemplateVersionsResponse
+newDescribeLaunchTemplateVersionsResponse
+  pHttpStatus_ =
+    DescribeLaunchTemplateVersionsResponse'
+      { launchTemplateVersions =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the launch template versions.
+describeLaunchTemplateVersionsResponse_launchTemplateVersions :: Lens.Lens' DescribeLaunchTemplateVersionsResponse (Prelude.Maybe [LaunchTemplateVersion])
+describeLaunchTemplateVersionsResponse_launchTemplateVersions = Lens.lens (\DescribeLaunchTemplateVersionsResponse' {launchTemplateVersions} -> launchTemplateVersions) (\s@DescribeLaunchTemplateVersionsResponse' {} a -> s {launchTemplateVersions = a} :: DescribeLaunchTemplateVersionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLaunchTemplateVersionsResponse_nextToken :: Lens.Lens' DescribeLaunchTemplateVersionsResponse (Prelude.Maybe Prelude.Text)
+describeLaunchTemplateVersionsResponse_nextToken = Lens.lens (\DescribeLaunchTemplateVersionsResponse' {nextToken} -> nextToken) (\s@DescribeLaunchTemplateVersionsResponse' {} a -> s {nextToken = a} :: DescribeLaunchTemplateVersionsResponse)
+
+-- | The response's http status code.
+describeLaunchTemplateVersionsResponse_httpStatus :: Lens.Lens' DescribeLaunchTemplateVersionsResponse Prelude.Int
+describeLaunchTemplateVersionsResponse_httpStatus = Lens.lens (\DescribeLaunchTemplateVersionsResponse' {httpStatus} -> httpStatus) (\s@DescribeLaunchTemplateVersionsResponse' {} a -> s {httpStatus = a} :: DescribeLaunchTemplateVersionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLaunchTemplateVersionsResponse
+  where
+  rnf DescribeLaunchTemplateVersionsResponse' {..} =
+    Prelude.rnf launchTemplateVersions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLaunchTemplates.hs b/gen/Amazonka/EC2/DescribeLaunchTemplates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLaunchTemplates.hs
@@ -0,0 +1,333 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLaunchTemplates
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more launch templates.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLaunchTemplates
+  ( -- * Creating a Request
+    DescribeLaunchTemplates (..),
+    newDescribeLaunchTemplates,
+
+    -- * Request Lenses
+    describeLaunchTemplates_dryRun,
+    describeLaunchTemplates_filters,
+    describeLaunchTemplates_launchTemplateIds,
+    describeLaunchTemplates_launchTemplateNames,
+    describeLaunchTemplates_maxResults,
+    describeLaunchTemplates_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLaunchTemplatesResponse (..),
+    newDescribeLaunchTemplatesResponse,
+
+    -- * Response Lenses
+    describeLaunchTemplatesResponse_launchTemplates,
+    describeLaunchTemplatesResponse_nextToken,
+    describeLaunchTemplatesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLaunchTemplates' smart constructor.
+data DescribeLaunchTemplates = DescribeLaunchTemplates'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @create-time@ - The time the launch template was created.
+    --
+    -- -   @launch-template-name@ - The name of the launch template.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more launch template IDs.
+    launchTemplateIds :: Prelude.Maybe [Prelude.Text],
+    -- | One or more launch template names.
+    launchTemplateNames :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 1 and 200.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLaunchTemplates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLaunchTemplates_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLaunchTemplates_filters' - One or more filters.
+--
+-- -   @create-time@ - The time the launch template was created.
+--
+-- -   @launch-template-name@ - The name of the launch template.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'launchTemplateIds', 'describeLaunchTemplates_launchTemplateIds' - One or more launch template IDs.
+--
+-- 'launchTemplateNames', 'describeLaunchTemplates_launchTemplateNames' - One or more launch template names.
+--
+-- 'maxResults', 'describeLaunchTemplates_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 1 and 200.
+--
+-- 'nextToken', 'describeLaunchTemplates_nextToken' - The token to request the next page of results.
+newDescribeLaunchTemplates ::
+  DescribeLaunchTemplates
+newDescribeLaunchTemplates =
+  DescribeLaunchTemplates'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      launchTemplateIds = Prelude.Nothing,
+      launchTemplateNames = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLaunchTemplates_dryRun :: Lens.Lens' DescribeLaunchTemplates (Prelude.Maybe Prelude.Bool)
+describeLaunchTemplates_dryRun = Lens.lens (\DescribeLaunchTemplates' {dryRun} -> dryRun) (\s@DescribeLaunchTemplates' {} a -> s {dryRun = a} :: DescribeLaunchTemplates)
+
+-- | One or more filters.
+--
+-- -   @create-time@ - The time the launch template was created.
+--
+-- -   @launch-template-name@ - The name of the launch template.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeLaunchTemplates_filters :: Lens.Lens' DescribeLaunchTemplates (Prelude.Maybe [Filter])
+describeLaunchTemplates_filters = Lens.lens (\DescribeLaunchTemplates' {filters} -> filters) (\s@DescribeLaunchTemplates' {} a -> s {filters = a} :: DescribeLaunchTemplates) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more launch template IDs.
+describeLaunchTemplates_launchTemplateIds :: Lens.Lens' DescribeLaunchTemplates (Prelude.Maybe [Prelude.Text])
+describeLaunchTemplates_launchTemplateIds = Lens.lens (\DescribeLaunchTemplates' {launchTemplateIds} -> launchTemplateIds) (\s@DescribeLaunchTemplates' {} a -> s {launchTemplateIds = a} :: DescribeLaunchTemplates) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more launch template names.
+describeLaunchTemplates_launchTemplateNames :: Lens.Lens' DescribeLaunchTemplates (Prelude.Maybe [Prelude.Text])
+describeLaunchTemplates_launchTemplateNames = Lens.lens (\DescribeLaunchTemplates' {launchTemplateNames} -> launchTemplateNames) (\s@DescribeLaunchTemplates' {} a -> s {launchTemplateNames = a} :: DescribeLaunchTemplates) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 1 and 200.
+describeLaunchTemplates_maxResults :: Lens.Lens' DescribeLaunchTemplates (Prelude.Maybe Prelude.Natural)
+describeLaunchTemplates_maxResults = Lens.lens (\DescribeLaunchTemplates' {maxResults} -> maxResults) (\s@DescribeLaunchTemplates' {} a -> s {maxResults = a} :: DescribeLaunchTemplates)
+
+-- | The token to request the next page of results.
+describeLaunchTemplates_nextToken :: Lens.Lens' DescribeLaunchTemplates (Prelude.Maybe Prelude.Text)
+describeLaunchTemplates_nextToken = Lens.lens (\DescribeLaunchTemplates' {nextToken} -> nextToken) (\s@DescribeLaunchTemplates' {} a -> s {nextToken = a} :: DescribeLaunchTemplates)
+
+instance Core.AWSPager DescribeLaunchTemplates where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLaunchTemplatesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLaunchTemplatesResponse_launchTemplates
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLaunchTemplates_nextToken
+          Lens..~ rs
+          Lens.^? describeLaunchTemplatesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeLaunchTemplates where
+  type
+    AWSResponse DescribeLaunchTemplates =
+      DescribeLaunchTemplatesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLaunchTemplatesResponse'
+            Prelude.<$> ( x
+                            Data..@? "launchTemplates"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLaunchTemplates where
+  hashWithSalt _salt DescribeLaunchTemplates' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` launchTemplateIds
+      `Prelude.hashWithSalt` launchTemplateNames
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeLaunchTemplates where
+  rnf DescribeLaunchTemplates' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf launchTemplateIds
+      `Prelude.seq` Prelude.rnf launchTemplateNames
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeLaunchTemplates where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeLaunchTemplates where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLaunchTemplates where
+  toQuery DescribeLaunchTemplates' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeLaunchTemplates" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "LaunchTemplateId"
+              Prelude.<$> launchTemplateIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "LaunchTemplateName"
+              Prelude.<$> launchTemplateNames
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeLaunchTemplatesResponse' smart constructor.
+data DescribeLaunchTemplatesResponse = DescribeLaunchTemplatesResponse'
+  { -- | Information about the launch templates.
+    launchTemplates :: Prelude.Maybe [LaunchTemplate],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLaunchTemplatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplates', 'describeLaunchTemplatesResponse_launchTemplates' - Information about the launch templates.
+--
+-- 'nextToken', 'describeLaunchTemplatesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLaunchTemplatesResponse_httpStatus' - The response's http status code.
+newDescribeLaunchTemplatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLaunchTemplatesResponse
+newDescribeLaunchTemplatesResponse pHttpStatus_ =
+  DescribeLaunchTemplatesResponse'
+    { launchTemplates =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the launch templates.
+describeLaunchTemplatesResponse_launchTemplates :: Lens.Lens' DescribeLaunchTemplatesResponse (Prelude.Maybe [LaunchTemplate])
+describeLaunchTemplatesResponse_launchTemplates = Lens.lens (\DescribeLaunchTemplatesResponse' {launchTemplates} -> launchTemplates) (\s@DescribeLaunchTemplatesResponse' {} a -> s {launchTemplates = a} :: DescribeLaunchTemplatesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLaunchTemplatesResponse_nextToken :: Lens.Lens' DescribeLaunchTemplatesResponse (Prelude.Maybe Prelude.Text)
+describeLaunchTemplatesResponse_nextToken = Lens.lens (\DescribeLaunchTemplatesResponse' {nextToken} -> nextToken) (\s@DescribeLaunchTemplatesResponse' {} a -> s {nextToken = a} :: DescribeLaunchTemplatesResponse)
+
+-- | The response's http status code.
+describeLaunchTemplatesResponse_httpStatus :: Lens.Lens' DescribeLaunchTemplatesResponse Prelude.Int
+describeLaunchTemplatesResponse_httpStatus = Lens.lens (\DescribeLaunchTemplatesResponse' {httpStatus} -> httpStatus) (\s@DescribeLaunchTemplatesResponse' {} a -> s {httpStatus = a} :: DescribeLaunchTemplatesResponse)
+
+instance
+  Prelude.NFData
+    DescribeLaunchTemplatesResponse
+  where
+  rnf DescribeLaunchTemplatesResponse' {..} =
+    Prelude.rnf launchTemplates
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.hs b/gen/Amazonka/EC2/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.hs
@@ -0,0 +1,373 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the associations between virtual interface groups and local
+-- gateway route tables.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  ( -- * Creating a Request
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (..),
+    newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations,
+
+    -- * Request Lenses
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_dryRun,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_filters,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_localGatewayRouteTableVirtualInterfaceGroupAssociationIds,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_maxResults,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse (..),
+    newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse,
+
+    -- * Response Lenses
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_localGatewayRouteTableVirtualInterfaceGroupAssociations,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' smart constructor.
+data DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations = DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @local-gateway-id@ - The ID of a local gateway.
+    --
+    -- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+    --     the local gateway route table for the virtual interface group.
+    --
+    -- -   @local-gateway-route-table-id@ - The ID of the local gateway route
+    --     table.
+    --
+    -- -   @local-gateway-route-table-virtual-interface-group-association-id@ -
+    --     The ID of the association.
+    --
+    -- -   @local-gateway-route-table-virtual-interface-group-id@ - The ID of
+    --     the virtual interface group.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     local gateway virtual interface group association.
+    --
+    -- -   @state@ - The state of the association.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the associations.
+    localGatewayRouteTableVirtualInterfaceGroupAssociationIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_filters' - One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+--     the local gateway route table for the virtual interface group.
+--
+-- -   @local-gateway-route-table-id@ - The ID of the local gateway route
+--     table.
+--
+-- -   @local-gateway-route-table-virtual-interface-group-association-id@ -
+--     The ID of the association.
+--
+-- -   @local-gateway-route-table-virtual-interface-group-id@ - The ID of
+--     the virtual interface group.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway virtual interface group association.
+--
+-- -   @state@ - The state of the association.
+--
+-- 'localGatewayRouteTableVirtualInterfaceGroupAssociationIds', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_localGatewayRouteTableVirtualInterfaceGroupAssociationIds' - The IDs of the associations.
+--
+-- 'maxResults', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_nextToken' - The token for the next page of results.
+newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations ::
+  DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations =
+  DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations'
+    { dryRun =
+        Prelude.Nothing,
+      filters =
+        Prelude.Nothing,
+      localGatewayRouteTableVirtualInterfaceGroupAssociationIds =
+        Prelude.Nothing,
+      maxResults =
+        Prelude.Nothing,
+      nextToken =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_dryRun :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (Prelude.Maybe Prelude.Bool)
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_dryRun = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {dryRun} -> dryRun) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {} a -> s {dryRun = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations)
+
+-- | One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+--     the local gateway route table for the virtual interface group.
+--
+-- -   @local-gateway-route-table-id@ - The ID of the local gateway route
+--     table.
+--
+-- -   @local-gateway-route-table-virtual-interface-group-association-id@ -
+--     The ID of the association.
+--
+-- -   @local-gateway-route-table-virtual-interface-group-id@ - The ID of
+--     the virtual interface group.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway virtual interface group association.
+--
+-- -   @state@ - The state of the association.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_filters :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (Prelude.Maybe [Filter])
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_filters = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {filters} -> filters) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {} a -> s {filters = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the associations.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_localGatewayRouteTableVirtualInterfaceGroupAssociationIds :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (Prelude.Maybe [Prelude.Text])
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_localGatewayRouteTableVirtualInterfaceGroupAssociationIds = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {localGatewayRouteTableVirtualInterfaceGroupAssociationIds} -> localGatewayRouteTableVirtualInterfaceGroupAssociationIds) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {} a -> s {localGatewayRouteTableVirtualInterfaceGroupAssociationIds = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_maxResults :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (Prelude.Maybe Prelude.Natural)
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_maxResults = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {maxResults} -> maxResults) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {} a -> s {maxResults = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations)
+
+-- | The token for the next page of results.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_nextToken :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations (Prelude.Maybe Prelude.Text)
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_nextToken = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {nextToken} -> nextToken) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {} a -> s {nextToken = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations)
+
+instance
+  Core.AWSPager
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_localGatewayRouteTableVirtualInterfaceGroupAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_nextToken
+          Lens..~ rs
+          Lens.^? describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  type
+    AWSResponse
+      DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations =
+      DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayRouteTableVirtualInterfaceGroupAssociationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  hashWithSalt
+    _salt
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` localGatewayRouteTableVirtualInterfaceGroupAssociationIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  rnf
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf filters
+        `Prelude.seq` Prelude.rnf
+          localGatewayRouteTableVirtualInterfaceGroupAssociationIds
+        `Prelude.seq` Prelude.rnf maxResults
+        `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+  where
+  toQuery
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          Data.toQuery
+            ( Data.toQueryList
+                "LocalGatewayRouteTableVirtualInterfaceGroupAssociationId"
+                Prelude.<$> localGatewayRouteTableVirtualInterfaceGroupAssociationIds
+            ),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken
+        ]
+
+-- | /See:/ 'newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' smart constructor.
+data DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse = DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse'
+  { -- | Information about the associations.
+    localGatewayRouteTableVirtualInterfaceGroupAssociations :: Prelude.Maybe [LocalGatewayRouteTableVirtualInterfaceGroupAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableVirtualInterfaceGroupAssociations', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_localGatewayRouteTableVirtualInterfaceGroupAssociations' - Information about the associations.
+--
+-- 'nextToken', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_httpStatus' - The response's http status code.
+newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse
+newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse
+  pHttpStatus_ =
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse'
+      { localGatewayRouteTableVirtualInterfaceGroupAssociations =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the associations.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_localGatewayRouteTableVirtualInterfaceGroupAssociations :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse (Prelude.Maybe [LocalGatewayRouteTableVirtualInterfaceGroupAssociation])
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_localGatewayRouteTableVirtualInterfaceGroupAssociations = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {localGatewayRouteTableVirtualInterfaceGroupAssociations} -> localGatewayRouteTableVirtualInterfaceGroupAssociations) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {} a -> s {localGatewayRouteTableVirtualInterfaceGroupAssociations = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse (Prelude.Maybe Prelude.Text)
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {nextToken} -> nextToken) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {} a -> s {nextToken = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse)
+
+-- | The response's http status code.
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_httpStatus :: Lens.Lens' DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse Prelude.Int
+describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_httpStatus = Lens.lens (\DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {} a -> s {httpStatus = a} :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse
+  where
+  rnf
+    DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse' {..} =
+      Prelude.rnf
+        localGatewayRouteTableVirtualInterfaceGroupAssociations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLocalGatewayRouteTableVpcAssociations.hs b/gen/Amazonka/EC2/DescribeLocalGatewayRouteTableVpcAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLocalGatewayRouteTableVpcAssociations.hs
@@ -0,0 +1,365 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLocalGatewayRouteTableVpcAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified associations between VPCs and local gateway
+-- route tables.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLocalGatewayRouteTableVpcAssociations
+  ( -- * Creating a Request
+    DescribeLocalGatewayRouteTableVpcAssociations (..),
+    newDescribeLocalGatewayRouteTableVpcAssociations,
+
+    -- * Request Lenses
+    describeLocalGatewayRouteTableVpcAssociations_dryRun,
+    describeLocalGatewayRouteTableVpcAssociations_filters,
+    describeLocalGatewayRouteTableVpcAssociations_localGatewayRouteTableVpcAssociationIds,
+    describeLocalGatewayRouteTableVpcAssociations_maxResults,
+    describeLocalGatewayRouteTableVpcAssociations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLocalGatewayRouteTableVpcAssociationsResponse (..),
+    newDescribeLocalGatewayRouteTableVpcAssociationsResponse,
+
+    -- * Response Lenses
+    describeLocalGatewayRouteTableVpcAssociationsResponse_localGatewayRouteTableVpcAssociations,
+    describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken,
+    describeLocalGatewayRouteTableVpcAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocalGatewayRouteTableVpcAssociations' smart constructor.
+data DescribeLocalGatewayRouteTableVpcAssociations = DescribeLocalGatewayRouteTableVpcAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @local-gateway-id@ - The ID of a local gateway.
+    --
+    -- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+    --     the local gateway route table for the association.
+    --
+    -- -   @local-gateway-route-table-id@ - The ID of the local gateway route
+    --     table.
+    --
+    -- -   @local-gateway-route-table-vpc-association-id@ - The ID of the
+    --     association.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     local gateway route table for the association.
+    --
+    -- -   @state@ - The state of the association.
+    --
+    -- -   @vpc-id@ - The ID of the VPC.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the associations.
+    localGatewayRouteTableVpcAssociationIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayRouteTableVpcAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLocalGatewayRouteTableVpcAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLocalGatewayRouteTableVpcAssociations_filters' - One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+--     the local gateway route table for the association.
+--
+-- -   @local-gateway-route-table-id@ - The ID of the local gateway route
+--     table.
+--
+-- -   @local-gateway-route-table-vpc-association-id@ - The ID of the
+--     association.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway route table for the association.
+--
+-- -   @state@ - The state of the association.
+--
+-- -   @vpc-id@ - The ID of the VPC.
+--
+-- 'localGatewayRouteTableVpcAssociationIds', 'describeLocalGatewayRouteTableVpcAssociations_localGatewayRouteTableVpcAssociationIds' - The IDs of the associations.
+--
+-- 'maxResults', 'describeLocalGatewayRouteTableVpcAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeLocalGatewayRouteTableVpcAssociations_nextToken' - The token for the next page of results.
+newDescribeLocalGatewayRouteTableVpcAssociations ::
+  DescribeLocalGatewayRouteTableVpcAssociations
+newDescribeLocalGatewayRouteTableVpcAssociations =
+  DescribeLocalGatewayRouteTableVpcAssociations'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localGatewayRouteTableVpcAssociationIds =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLocalGatewayRouteTableVpcAssociations_dryRun :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociations (Prelude.Maybe Prelude.Bool)
+describeLocalGatewayRouteTableVpcAssociations_dryRun = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociations' {dryRun} -> dryRun) (\s@DescribeLocalGatewayRouteTableVpcAssociations' {} a -> s {dryRun = a} :: DescribeLocalGatewayRouteTableVpcAssociations)
+
+-- | One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+--     the local gateway route table for the association.
+--
+-- -   @local-gateway-route-table-id@ - The ID of the local gateway route
+--     table.
+--
+-- -   @local-gateway-route-table-vpc-association-id@ - The ID of the
+--     association.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway route table for the association.
+--
+-- -   @state@ - The state of the association.
+--
+-- -   @vpc-id@ - The ID of the VPC.
+describeLocalGatewayRouteTableVpcAssociations_filters :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociations (Prelude.Maybe [Filter])
+describeLocalGatewayRouteTableVpcAssociations_filters = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociations' {filters} -> filters) (\s@DescribeLocalGatewayRouteTableVpcAssociations' {} a -> s {filters = a} :: DescribeLocalGatewayRouteTableVpcAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the associations.
+describeLocalGatewayRouteTableVpcAssociations_localGatewayRouteTableVpcAssociationIds :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociations (Prelude.Maybe [Prelude.Text])
+describeLocalGatewayRouteTableVpcAssociations_localGatewayRouteTableVpcAssociationIds = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociations' {localGatewayRouteTableVpcAssociationIds} -> localGatewayRouteTableVpcAssociationIds) (\s@DescribeLocalGatewayRouteTableVpcAssociations' {} a -> s {localGatewayRouteTableVpcAssociationIds = a} :: DescribeLocalGatewayRouteTableVpcAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeLocalGatewayRouteTableVpcAssociations_maxResults :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociations (Prelude.Maybe Prelude.Natural)
+describeLocalGatewayRouteTableVpcAssociations_maxResults = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociations' {maxResults} -> maxResults) (\s@DescribeLocalGatewayRouteTableVpcAssociations' {} a -> s {maxResults = a} :: DescribeLocalGatewayRouteTableVpcAssociations)
+
+-- | The token for the next page of results.
+describeLocalGatewayRouteTableVpcAssociations_nextToken :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociations (Prelude.Maybe Prelude.Text)
+describeLocalGatewayRouteTableVpcAssociations_nextToken = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociations' {nextToken} -> nextToken) (\s@DescribeLocalGatewayRouteTableVpcAssociations' {} a -> s {nextToken = a} :: DescribeLocalGatewayRouteTableVpcAssociations)
+
+instance
+  Core.AWSPager
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayRouteTableVpcAssociationsResponse_localGatewayRouteTableVpcAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLocalGatewayRouteTableVpcAssociations_nextToken
+          Lens..~ rs
+          Lens.^? describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  type
+    AWSResponse
+      DescribeLocalGatewayRouteTableVpcAssociations =
+      DescribeLocalGatewayRouteTableVpcAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLocalGatewayRouteTableVpcAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayRouteTableVpcAssociationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  hashWithSalt
+    _salt
+    DescribeLocalGatewayRouteTableVpcAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` localGatewayRouteTableVpcAssociationIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  rnf
+    DescribeLocalGatewayRouteTableVpcAssociations' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf filters
+        `Prelude.seq` Prelude.rnf localGatewayRouteTableVpcAssociationIds
+        `Prelude.seq` Prelude.rnf maxResults
+        `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeLocalGatewayRouteTableVpcAssociations
+  where
+  toQuery
+    DescribeLocalGatewayRouteTableVpcAssociations' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeLocalGatewayRouteTableVpcAssociations" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          Data.toQuery
+            ( Data.toQueryList
+                "LocalGatewayRouteTableVpcAssociationId"
+                Prelude.<$> localGatewayRouteTableVpcAssociationIds
+            ),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken
+        ]
+
+-- | /See:/ 'newDescribeLocalGatewayRouteTableVpcAssociationsResponse' smart constructor.
+data DescribeLocalGatewayRouteTableVpcAssociationsResponse = DescribeLocalGatewayRouteTableVpcAssociationsResponse'
+  { -- | Information about the associations.
+    localGatewayRouteTableVpcAssociations :: Prelude.Maybe [LocalGatewayRouteTableVpcAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayRouteTableVpcAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableVpcAssociations', 'describeLocalGatewayRouteTableVpcAssociationsResponse_localGatewayRouteTableVpcAssociations' - Information about the associations.
+--
+-- 'nextToken', 'describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLocalGatewayRouteTableVpcAssociationsResponse_httpStatus' - The response's http status code.
+newDescribeLocalGatewayRouteTableVpcAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocalGatewayRouteTableVpcAssociationsResponse
+newDescribeLocalGatewayRouteTableVpcAssociationsResponse
+  pHttpStatus_ =
+    DescribeLocalGatewayRouteTableVpcAssociationsResponse'
+      { localGatewayRouteTableVpcAssociations =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the associations.
+describeLocalGatewayRouteTableVpcAssociationsResponse_localGatewayRouteTableVpcAssociations :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociationsResponse (Prelude.Maybe [LocalGatewayRouteTableVpcAssociation])
+describeLocalGatewayRouteTableVpcAssociationsResponse_localGatewayRouteTableVpcAssociations = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociationsResponse' {localGatewayRouteTableVpcAssociations} -> localGatewayRouteTableVpcAssociations) (\s@DescribeLocalGatewayRouteTableVpcAssociationsResponse' {} a -> s {localGatewayRouteTableVpcAssociations = a} :: DescribeLocalGatewayRouteTableVpcAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociationsResponse (Prelude.Maybe Prelude.Text)
+describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociationsResponse' {nextToken} -> nextToken) (\s@DescribeLocalGatewayRouteTableVpcAssociationsResponse' {} a -> s {nextToken = a} :: DescribeLocalGatewayRouteTableVpcAssociationsResponse)
+
+-- | The response's http status code.
+describeLocalGatewayRouteTableVpcAssociationsResponse_httpStatus :: Lens.Lens' DescribeLocalGatewayRouteTableVpcAssociationsResponse Prelude.Int
+describeLocalGatewayRouteTableVpcAssociationsResponse_httpStatus = Lens.lens (\DescribeLocalGatewayRouteTableVpcAssociationsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocalGatewayRouteTableVpcAssociationsResponse' {} a -> s {httpStatus = a} :: DescribeLocalGatewayRouteTableVpcAssociationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayRouteTableVpcAssociationsResponse
+  where
+  rnf
+    DescribeLocalGatewayRouteTableVpcAssociationsResponse' {..} =
+      Prelude.rnf localGatewayRouteTableVpcAssociations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLocalGatewayRouteTables.hs b/gen/Amazonka/EC2/DescribeLocalGatewayRouteTables.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLocalGatewayRouteTables.hs
@@ -0,0 +1,344 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLocalGatewayRouteTables
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more local gateway route tables. By default, all local
+-- gateway route tables are described. Alternatively, you can filter the
+-- results.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLocalGatewayRouteTables
+  ( -- * Creating a Request
+    DescribeLocalGatewayRouteTables (..),
+    newDescribeLocalGatewayRouteTables,
+
+    -- * Request Lenses
+    describeLocalGatewayRouteTables_dryRun,
+    describeLocalGatewayRouteTables_filters,
+    describeLocalGatewayRouteTables_localGatewayRouteTableIds,
+    describeLocalGatewayRouteTables_maxResults,
+    describeLocalGatewayRouteTables_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLocalGatewayRouteTablesResponse (..),
+    newDescribeLocalGatewayRouteTablesResponse,
+
+    -- * Response Lenses
+    describeLocalGatewayRouteTablesResponse_localGatewayRouteTables,
+    describeLocalGatewayRouteTablesResponse_nextToken,
+    describeLocalGatewayRouteTablesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocalGatewayRouteTables' smart constructor.
+data DescribeLocalGatewayRouteTables = DescribeLocalGatewayRouteTables'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @local-gateway-id@ - The ID of a local gateway.
+    --
+    -- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+    --     the local gateway route table.
+    --
+    -- -   @local-gateway-route-table-id@ - The ID of a local gateway route
+    --     table.
+    --
+    -- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     local gateway route table.
+    --
+    -- -   @state@ - The state of the local gateway route table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the local gateway route tables.
+    localGatewayRouteTableIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayRouteTables' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLocalGatewayRouteTables_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLocalGatewayRouteTables_filters' - One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+--     the local gateway route table.
+--
+-- -   @local-gateway-route-table-id@ - The ID of a local gateway route
+--     table.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway route table.
+--
+-- -   @state@ - The state of the local gateway route table.
+--
+-- 'localGatewayRouteTableIds', 'describeLocalGatewayRouteTables_localGatewayRouteTableIds' - The IDs of the local gateway route tables.
+--
+-- 'maxResults', 'describeLocalGatewayRouteTables_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeLocalGatewayRouteTables_nextToken' - The token for the next page of results.
+newDescribeLocalGatewayRouteTables ::
+  DescribeLocalGatewayRouteTables
+newDescribeLocalGatewayRouteTables =
+  DescribeLocalGatewayRouteTables'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localGatewayRouteTableIds =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLocalGatewayRouteTables_dryRun :: Lens.Lens' DescribeLocalGatewayRouteTables (Prelude.Maybe Prelude.Bool)
+describeLocalGatewayRouteTables_dryRun = Lens.lens (\DescribeLocalGatewayRouteTables' {dryRun} -> dryRun) (\s@DescribeLocalGatewayRouteTables' {} a -> s {dryRun = a} :: DescribeLocalGatewayRouteTables)
+
+-- | One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-route-table-arn@ - The Amazon Resource Name (ARN) of
+--     the local gateway route table.
+--
+-- -   @local-gateway-route-table-id@ - The ID of a local gateway route
+--     table.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway route table.
+--
+-- -   @state@ - The state of the local gateway route table.
+describeLocalGatewayRouteTables_filters :: Lens.Lens' DescribeLocalGatewayRouteTables (Prelude.Maybe [Filter])
+describeLocalGatewayRouteTables_filters = Lens.lens (\DescribeLocalGatewayRouteTables' {filters} -> filters) (\s@DescribeLocalGatewayRouteTables' {} a -> s {filters = a} :: DescribeLocalGatewayRouteTables) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the local gateway route tables.
+describeLocalGatewayRouteTables_localGatewayRouteTableIds :: Lens.Lens' DescribeLocalGatewayRouteTables (Prelude.Maybe [Prelude.Text])
+describeLocalGatewayRouteTables_localGatewayRouteTableIds = Lens.lens (\DescribeLocalGatewayRouteTables' {localGatewayRouteTableIds} -> localGatewayRouteTableIds) (\s@DescribeLocalGatewayRouteTables' {} a -> s {localGatewayRouteTableIds = a} :: DescribeLocalGatewayRouteTables) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeLocalGatewayRouteTables_maxResults :: Lens.Lens' DescribeLocalGatewayRouteTables (Prelude.Maybe Prelude.Natural)
+describeLocalGatewayRouteTables_maxResults = Lens.lens (\DescribeLocalGatewayRouteTables' {maxResults} -> maxResults) (\s@DescribeLocalGatewayRouteTables' {} a -> s {maxResults = a} :: DescribeLocalGatewayRouteTables)
+
+-- | The token for the next page of results.
+describeLocalGatewayRouteTables_nextToken :: Lens.Lens' DescribeLocalGatewayRouteTables (Prelude.Maybe Prelude.Text)
+describeLocalGatewayRouteTables_nextToken = Lens.lens (\DescribeLocalGatewayRouteTables' {nextToken} -> nextToken) (\s@DescribeLocalGatewayRouteTables' {} a -> s {nextToken = a} :: DescribeLocalGatewayRouteTables)
+
+instance
+  Core.AWSPager
+    DescribeLocalGatewayRouteTables
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayRouteTablesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayRouteTablesResponse_localGatewayRouteTables
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLocalGatewayRouteTables_nextToken
+          Lens..~ rs
+          Lens.^? describeLocalGatewayRouteTablesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLocalGatewayRouteTables
+  where
+  type
+    AWSResponse DescribeLocalGatewayRouteTables =
+      DescribeLocalGatewayRouteTablesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLocalGatewayRouteTablesResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayRouteTableSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLocalGatewayRouteTables
+  where
+  hashWithSalt
+    _salt
+    DescribeLocalGatewayRouteTables' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` localGatewayRouteTableIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayRouteTables
+  where
+  rnf DescribeLocalGatewayRouteTables' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeLocalGatewayRouteTables
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeLocalGatewayRouteTables where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocalGatewayRouteTables where
+  toQuery DescribeLocalGatewayRouteTables' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeLocalGatewayRouteTables" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "LocalGatewayRouteTableId"
+              Prelude.<$> localGatewayRouteTableIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeLocalGatewayRouteTablesResponse' smart constructor.
+data DescribeLocalGatewayRouteTablesResponse = DescribeLocalGatewayRouteTablesResponse'
+  { -- | Information about the local gateway route tables.
+    localGatewayRouteTables :: Prelude.Maybe [LocalGatewayRouteTable],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayRouteTablesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTables', 'describeLocalGatewayRouteTablesResponse_localGatewayRouteTables' - Information about the local gateway route tables.
+--
+-- 'nextToken', 'describeLocalGatewayRouteTablesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLocalGatewayRouteTablesResponse_httpStatus' - The response's http status code.
+newDescribeLocalGatewayRouteTablesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocalGatewayRouteTablesResponse
+newDescribeLocalGatewayRouteTablesResponse
+  pHttpStatus_ =
+    DescribeLocalGatewayRouteTablesResponse'
+      { localGatewayRouteTables =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the local gateway route tables.
+describeLocalGatewayRouteTablesResponse_localGatewayRouteTables :: Lens.Lens' DescribeLocalGatewayRouteTablesResponse (Prelude.Maybe [LocalGatewayRouteTable])
+describeLocalGatewayRouteTablesResponse_localGatewayRouteTables = Lens.lens (\DescribeLocalGatewayRouteTablesResponse' {localGatewayRouteTables} -> localGatewayRouteTables) (\s@DescribeLocalGatewayRouteTablesResponse' {} a -> s {localGatewayRouteTables = a} :: DescribeLocalGatewayRouteTablesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLocalGatewayRouteTablesResponse_nextToken :: Lens.Lens' DescribeLocalGatewayRouteTablesResponse (Prelude.Maybe Prelude.Text)
+describeLocalGatewayRouteTablesResponse_nextToken = Lens.lens (\DescribeLocalGatewayRouteTablesResponse' {nextToken} -> nextToken) (\s@DescribeLocalGatewayRouteTablesResponse' {} a -> s {nextToken = a} :: DescribeLocalGatewayRouteTablesResponse)
+
+-- | The response's http status code.
+describeLocalGatewayRouteTablesResponse_httpStatus :: Lens.Lens' DescribeLocalGatewayRouteTablesResponse Prelude.Int
+describeLocalGatewayRouteTablesResponse_httpStatus = Lens.lens (\DescribeLocalGatewayRouteTablesResponse' {httpStatus} -> httpStatus) (\s@DescribeLocalGatewayRouteTablesResponse' {} a -> s {httpStatus = a} :: DescribeLocalGatewayRouteTablesResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayRouteTablesResponse
+  where
+  rnf DescribeLocalGatewayRouteTablesResponse' {..} =
+    Prelude.rnf localGatewayRouteTables
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLocalGatewayVirtualInterfaceGroups.hs b/gen/Amazonka/EC2/DescribeLocalGatewayVirtualInterfaceGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLocalGatewayVirtualInterfaceGroups.hs
@@ -0,0 +1,342 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLocalGatewayVirtualInterfaceGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified local gateway virtual interface groups.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLocalGatewayVirtualInterfaceGroups
+  ( -- * Creating a Request
+    DescribeLocalGatewayVirtualInterfaceGroups (..),
+    newDescribeLocalGatewayVirtualInterfaceGroups,
+
+    -- * Request Lenses
+    describeLocalGatewayVirtualInterfaceGroups_dryRun,
+    describeLocalGatewayVirtualInterfaceGroups_filters,
+    describeLocalGatewayVirtualInterfaceGroups_localGatewayVirtualInterfaceGroupIds,
+    describeLocalGatewayVirtualInterfaceGroups_maxResults,
+    describeLocalGatewayVirtualInterfaceGroups_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLocalGatewayVirtualInterfaceGroupsResponse (..),
+    newDescribeLocalGatewayVirtualInterfaceGroupsResponse,
+
+    -- * Response Lenses
+    describeLocalGatewayVirtualInterfaceGroupsResponse_localGatewayVirtualInterfaceGroups,
+    describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken,
+    describeLocalGatewayVirtualInterfaceGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocalGatewayVirtualInterfaceGroups' smart constructor.
+data DescribeLocalGatewayVirtualInterfaceGroups = DescribeLocalGatewayVirtualInterfaceGroups'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @local-gateway-id@ - The ID of a local gateway.
+    --
+    -- -   @local-gateway-virtual-interface-group-id@ - The ID of the virtual
+    --     interface group.
+    --
+    -- -   @local-gateway-virtual-interface-id@ - The ID of the virtual
+    --     interface.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     local gateway virtual interface group.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the virtual interface groups.
+    localGatewayVirtualInterfaceGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayVirtualInterfaceGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLocalGatewayVirtualInterfaceGroups_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLocalGatewayVirtualInterfaceGroups_filters' - One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-virtual-interface-group-id@ - The ID of the virtual
+--     interface group.
+--
+-- -   @local-gateway-virtual-interface-id@ - The ID of the virtual
+--     interface.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway virtual interface group.
+--
+-- 'localGatewayVirtualInterfaceGroupIds', 'describeLocalGatewayVirtualInterfaceGroups_localGatewayVirtualInterfaceGroupIds' - The IDs of the virtual interface groups.
+--
+-- 'maxResults', 'describeLocalGatewayVirtualInterfaceGroups_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeLocalGatewayVirtualInterfaceGroups_nextToken' - The token for the next page of results.
+newDescribeLocalGatewayVirtualInterfaceGroups ::
+  DescribeLocalGatewayVirtualInterfaceGroups
+newDescribeLocalGatewayVirtualInterfaceGroups =
+  DescribeLocalGatewayVirtualInterfaceGroups'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localGatewayVirtualInterfaceGroupIds =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLocalGatewayVirtualInterfaceGroups_dryRun :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroups (Prelude.Maybe Prelude.Bool)
+describeLocalGatewayVirtualInterfaceGroups_dryRun = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroups' {dryRun} -> dryRun) (\s@DescribeLocalGatewayVirtualInterfaceGroups' {} a -> s {dryRun = a} :: DescribeLocalGatewayVirtualInterfaceGroups)
+
+-- | One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @local-gateway-virtual-interface-group-id@ - The ID of the virtual
+--     interface group.
+--
+-- -   @local-gateway-virtual-interface-id@ - The ID of the virtual
+--     interface.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway virtual interface group.
+describeLocalGatewayVirtualInterfaceGroups_filters :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroups (Prelude.Maybe [Filter])
+describeLocalGatewayVirtualInterfaceGroups_filters = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroups' {filters} -> filters) (\s@DescribeLocalGatewayVirtualInterfaceGroups' {} a -> s {filters = a} :: DescribeLocalGatewayVirtualInterfaceGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the virtual interface groups.
+describeLocalGatewayVirtualInterfaceGroups_localGatewayVirtualInterfaceGroupIds :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroups (Prelude.Maybe [Prelude.Text])
+describeLocalGatewayVirtualInterfaceGroups_localGatewayVirtualInterfaceGroupIds = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroups' {localGatewayVirtualInterfaceGroupIds} -> localGatewayVirtualInterfaceGroupIds) (\s@DescribeLocalGatewayVirtualInterfaceGroups' {} a -> s {localGatewayVirtualInterfaceGroupIds = a} :: DescribeLocalGatewayVirtualInterfaceGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeLocalGatewayVirtualInterfaceGroups_maxResults :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroups (Prelude.Maybe Prelude.Natural)
+describeLocalGatewayVirtualInterfaceGroups_maxResults = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroups' {maxResults} -> maxResults) (\s@DescribeLocalGatewayVirtualInterfaceGroups' {} a -> s {maxResults = a} :: DescribeLocalGatewayVirtualInterfaceGroups)
+
+-- | The token for the next page of results.
+describeLocalGatewayVirtualInterfaceGroups_nextToken :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroups (Prelude.Maybe Prelude.Text)
+describeLocalGatewayVirtualInterfaceGroups_nextToken = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroups' {nextToken} -> nextToken) (\s@DescribeLocalGatewayVirtualInterfaceGroups' {} a -> s {nextToken = a} :: DescribeLocalGatewayVirtualInterfaceGroups)
+
+instance
+  Core.AWSPager
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayVirtualInterfaceGroupsResponse_localGatewayVirtualInterfaceGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLocalGatewayVirtualInterfaceGroups_nextToken
+          Lens..~ rs
+          Lens.^? describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  type
+    AWSResponse
+      DescribeLocalGatewayVirtualInterfaceGroups =
+      DescribeLocalGatewayVirtualInterfaceGroupsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLocalGatewayVirtualInterfaceGroupsResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayVirtualInterfaceGroupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  hashWithSalt
+    _salt
+    DescribeLocalGatewayVirtualInterfaceGroups' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  rnf DescribeLocalGatewayVirtualInterfaceGroups' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeLocalGatewayVirtualInterfaceGroups
+  where
+  toQuery
+    DescribeLocalGatewayVirtualInterfaceGroups' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeLocalGatewayVirtualInterfaceGroups" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          Data.toQuery
+            ( Data.toQueryList
+                "LocalGatewayVirtualInterfaceGroupId"
+                Prelude.<$> localGatewayVirtualInterfaceGroupIds
+            ),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken
+        ]
+
+-- | /See:/ 'newDescribeLocalGatewayVirtualInterfaceGroupsResponse' smart constructor.
+data DescribeLocalGatewayVirtualInterfaceGroupsResponse = DescribeLocalGatewayVirtualInterfaceGroupsResponse'
+  { -- | The virtual interface groups.
+    localGatewayVirtualInterfaceGroups :: Prelude.Maybe [LocalGatewayVirtualInterfaceGroup],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayVirtualInterfaceGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayVirtualInterfaceGroups', 'describeLocalGatewayVirtualInterfaceGroupsResponse_localGatewayVirtualInterfaceGroups' - The virtual interface groups.
+--
+-- 'nextToken', 'describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLocalGatewayVirtualInterfaceGroupsResponse_httpStatus' - The response's http status code.
+newDescribeLocalGatewayVirtualInterfaceGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocalGatewayVirtualInterfaceGroupsResponse
+newDescribeLocalGatewayVirtualInterfaceGroupsResponse
+  pHttpStatus_ =
+    DescribeLocalGatewayVirtualInterfaceGroupsResponse'
+      { localGatewayVirtualInterfaceGroups =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The virtual interface groups.
+describeLocalGatewayVirtualInterfaceGroupsResponse_localGatewayVirtualInterfaceGroups :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroupsResponse (Prelude.Maybe [LocalGatewayVirtualInterfaceGroup])
+describeLocalGatewayVirtualInterfaceGroupsResponse_localGatewayVirtualInterfaceGroups = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroupsResponse' {localGatewayVirtualInterfaceGroups} -> localGatewayVirtualInterfaceGroups) (\s@DescribeLocalGatewayVirtualInterfaceGroupsResponse' {} a -> s {localGatewayVirtualInterfaceGroups = a} :: DescribeLocalGatewayVirtualInterfaceGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroupsResponse (Prelude.Maybe Prelude.Text)
+describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroupsResponse' {nextToken} -> nextToken) (\s@DescribeLocalGatewayVirtualInterfaceGroupsResponse' {} a -> s {nextToken = a} :: DescribeLocalGatewayVirtualInterfaceGroupsResponse)
+
+-- | The response's http status code.
+describeLocalGatewayVirtualInterfaceGroupsResponse_httpStatus :: Lens.Lens' DescribeLocalGatewayVirtualInterfaceGroupsResponse Prelude.Int
+describeLocalGatewayVirtualInterfaceGroupsResponse_httpStatus = Lens.lens (\DescribeLocalGatewayVirtualInterfaceGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribeLocalGatewayVirtualInterfaceGroupsResponse' {} a -> s {httpStatus = a} :: DescribeLocalGatewayVirtualInterfaceGroupsResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayVirtualInterfaceGroupsResponse
+  where
+  rnf
+    DescribeLocalGatewayVirtualInterfaceGroupsResponse' {..} =
+      Prelude.rnf localGatewayVirtualInterfaceGroups
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLocalGatewayVirtualInterfaces.hs b/gen/Amazonka/EC2/DescribeLocalGatewayVirtualInterfaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLocalGatewayVirtualInterfaces.hs
@@ -0,0 +1,362 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLocalGatewayVirtualInterfaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified local gateway virtual interfaces.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLocalGatewayVirtualInterfaces
+  ( -- * Creating a Request
+    DescribeLocalGatewayVirtualInterfaces (..),
+    newDescribeLocalGatewayVirtualInterfaces,
+
+    -- * Request Lenses
+    describeLocalGatewayVirtualInterfaces_dryRun,
+    describeLocalGatewayVirtualInterfaces_filters,
+    describeLocalGatewayVirtualInterfaces_localGatewayVirtualInterfaceIds,
+    describeLocalGatewayVirtualInterfaces_maxResults,
+    describeLocalGatewayVirtualInterfaces_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLocalGatewayVirtualInterfacesResponse (..),
+    newDescribeLocalGatewayVirtualInterfacesResponse,
+
+    -- * Response Lenses
+    describeLocalGatewayVirtualInterfacesResponse_localGatewayVirtualInterfaces,
+    describeLocalGatewayVirtualInterfacesResponse_nextToken,
+    describeLocalGatewayVirtualInterfacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocalGatewayVirtualInterfaces' smart constructor.
+data DescribeLocalGatewayVirtualInterfaces = DescribeLocalGatewayVirtualInterfaces'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @local-address@ - The local address.
+    --
+    -- -   @local-bgp-asn@ - The Border Gateway Protocol (BGP) Autonomous
+    --     System Number (ASN) of the local gateway.
+    --
+    -- -   @local-gateway-id@ - The ID of the local gateway.
+    --
+    -- -   @local-gateway-virtual-interface-id@ - The ID of the virtual
+    --     interface.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     local gateway virtual interface.
+    --
+    -- -   @peer-address@ - The peer address.
+    --
+    -- -   @peer-bgp-asn@ - The peer BGP ASN.
+    --
+    -- -   @vlan@ - The ID of the VLAN.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the virtual interfaces.
+    localGatewayVirtualInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayVirtualInterfaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLocalGatewayVirtualInterfaces_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLocalGatewayVirtualInterfaces_filters' - One or more filters.
+--
+-- -   @local-address@ - The local address.
+--
+-- -   @local-bgp-asn@ - The Border Gateway Protocol (BGP) Autonomous
+--     System Number (ASN) of the local gateway.
+--
+-- -   @local-gateway-id@ - The ID of the local gateway.
+--
+-- -   @local-gateway-virtual-interface-id@ - The ID of the virtual
+--     interface.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway virtual interface.
+--
+-- -   @peer-address@ - The peer address.
+--
+-- -   @peer-bgp-asn@ - The peer BGP ASN.
+--
+-- -   @vlan@ - The ID of the VLAN.
+--
+-- 'localGatewayVirtualInterfaceIds', 'describeLocalGatewayVirtualInterfaces_localGatewayVirtualInterfaceIds' - The IDs of the virtual interfaces.
+--
+-- 'maxResults', 'describeLocalGatewayVirtualInterfaces_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeLocalGatewayVirtualInterfaces_nextToken' - The token for the next page of results.
+newDescribeLocalGatewayVirtualInterfaces ::
+  DescribeLocalGatewayVirtualInterfaces
+newDescribeLocalGatewayVirtualInterfaces =
+  DescribeLocalGatewayVirtualInterfaces'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localGatewayVirtualInterfaceIds =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLocalGatewayVirtualInterfaces_dryRun :: Lens.Lens' DescribeLocalGatewayVirtualInterfaces (Prelude.Maybe Prelude.Bool)
+describeLocalGatewayVirtualInterfaces_dryRun = Lens.lens (\DescribeLocalGatewayVirtualInterfaces' {dryRun} -> dryRun) (\s@DescribeLocalGatewayVirtualInterfaces' {} a -> s {dryRun = a} :: DescribeLocalGatewayVirtualInterfaces)
+
+-- | One or more filters.
+--
+-- -   @local-address@ - The local address.
+--
+-- -   @local-bgp-asn@ - The Border Gateway Protocol (BGP) Autonomous
+--     System Number (ASN) of the local gateway.
+--
+-- -   @local-gateway-id@ - The ID of the local gateway.
+--
+-- -   @local-gateway-virtual-interface-id@ - The ID of the virtual
+--     interface.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway virtual interface.
+--
+-- -   @peer-address@ - The peer address.
+--
+-- -   @peer-bgp-asn@ - The peer BGP ASN.
+--
+-- -   @vlan@ - The ID of the VLAN.
+describeLocalGatewayVirtualInterfaces_filters :: Lens.Lens' DescribeLocalGatewayVirtualInterfaces (Prelude.Maybe [Filter])
+describeLocalGatewayVirtualInterfaces_filters = Lens.lens (\DescribeLocalGatewayVirtualInterfaces' {filters} -> filters) (\s@DescribeLocalGatewayVirtualInterfaces' {} a -> s {filters = a} :: DescribeLocalGatewayVirtualInterfaces) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the virtual interfaces.
+describeLocalGatewayVirtualInterfaces_localGatewayVirtualInterfaceIds :: Lens.Lens' DescribeLocalGatewayVirtualInterfaces (Prelude.Maybe [Prelude.Text])
+describeLocalGatewayVirtualInterfaces_localGatewayVirtualInterfaceIds = Lens.lens (\DescribeLocalGatewayVirtualInterfaces' {localGatewayVirtualInterfaceIds} -> localGatewayVirtualInterfaceIds) (\s@DescribeLocalGatewayVirtualInterfaces' {} a -> s {localGatewayVirtualInterfaceIds = a} :: DescribeLocalGatewayVirtualInterfaces) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeLocalGatewayVirtualInterfaces_maxResults :: Lens.Lens' DescribeLocalGatewayVirtualInterfaces (Prelude.Maybe Prelude.Natural)
+describeLocalGatewayVirtualInterfaces_maxResults = Lens.lens (\DescribeLocalGatewayVirtualInterfaces' {maxResults} -> maxResults) (\s@DescribeLocalGatewayVirtualInterfaces' {} a -> s {maxResults = a} :: DescribeLocalGatewayVirtualInterfaces)
+
+-- | The token for the next page of results.
+describeLocalGatewayVirtualInterfaces_nextToken :: Lens.Lens' DescribeLocalGatewayVirtualInterfaces (Prelude.Maybe Prelude.Text)
+describeLocalGatewayVirtualInterfaces_nextToken = Lens.lens (\DescribeLocalGatewayVirtualInterfaces' {nextToken} -> nextToken) (\s@DescribeLocalGatewayVirtualInterfaces' {} a -> s {nextToken = a} :: DescribeLocalGatewayVirtualInterfaces)
+
+instance
+  Core.AWSPager
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayVirtualInterfacesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewayVirtualInterfacesResponse_localGatewayVirtualInterfaces
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLocalGatewayVirtualInterfaces_nextToken
+          Lens..~ rs
+          Lens.^? describeLocalGatewayVirtualInterfacesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  type
+    AWSResponse
+      DescribeLocalGatewayVirtualInterfaces =
+      DescribeLocalGatewayVirtualInterfacesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLocalGatewayVirtualInterfacesResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewayVirtualInterfaceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  hashWithSalt
+    _salt
+    DescribeLocalGatewayVirtualInterfaces' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` localGatewayVirtualInterfaceIds
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  rnf DescribeLocalGatewayVirtualInterfaces' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeLocalGatewayVirtualInterfaces
+  where
+  toQuery DescribeLocalGatewayVirtualInterfaces' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeLocalGatewayVirtualInterfaces" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "LocalGatewayVirtualInterfaceId"
+              Prelude.<$> localGatewayVirtualInterfaceIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeLocalGatewayVirtualInterfacesResponse' smart constructor.
+data DescribeLocalGatewayVirtualInterfacesResponse = DescribeLocalGatewayVirtualInterfacesResponse'
+  { -- | Information about the virtual interfaces.
+    localGatewayVirtualInterfaces :: Prelude.Maybe [LocalGatewayVirtualInterface],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewayVirtualInterfacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayVirtualInterfaces', 'describeLocalGatewayVirtualInterfacesResponse_localGatewayVirtualInterfaces' - Information about the virtual interfaces.
+--
+-- 'nextToken', 'describeLocalGatewayVirtualInterfacesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLocalGatewayVirtualInterfacesResponse_httpStatus' - The response's http status code.
+newDescribeLocalGatewayVirtualInterfacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocalGatewayVirtualInterfacesResponse
+newDescribeLocalGatewayVirtualInterfacesResponse
+  pHttpStatus_ =
+    DescribeLocalGatewayVirtualInterfacesResponse'
+      { localGatewayVirtualInterfaces =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the virtual interfaces.
+describeLocalGatewayVirtualInterfacesResponse_localGatewayVirtualInterfaces :: Lens.Lens' DescribeLocalGatewayVirtualInterfacesResponse (Prelude.Maybe [LocalGatewayVirtualInterface])
+describeLocalGatewayVirtualInterfacesResponse_localGatewayVirtualInterfaces = Lens.lens (\DescribeLocalGatewayVirtualInterfacesResponse' {localGatewayVirtualInterfaces} -> localGatewayVirtualInterfaces) (\s@DescribeLocalGatewayVirtualInterfacesResponse' {} a -> s {localGatewayVirtualInterfaces = a} :: DescribeLocalGatewayVirtualInterfacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLocalGatewayVirtualInterfacesResponse_nextToken :: Lens.Lens' DescribeLocalGatewayVirtualInterfacesResponse (Prelude.Maybe Prelude.Text)
+describeLocalGatewayVirtualInterfacesResponse_nextToken = Lens.lens (\DescribeLocalGatewayVirtualInterfacesResponse' {nextToken} -> nextToken) (\s@DescribeLocalGatewayVirtualInterfacesResponse' {} a -> s {nextToken = a} :: DescribeLocalGatewayVirtualInterfacesResponse)
+
+-- | The response's http status code.
+describeLocalGatewayVirtualInterfacesResponse_httpStatus :: Lens.Lens' DescribeLocalGatewayVirtualInterfacesResponse Prelude.Int
+describeLocalGatewayVirtualInterfacesResponse_httpStatus = Lens.lens (\DescribeLocalGatewayVirtualInterfacesResponse' {httpStatus} -> httpStatus) (\s@DescribeLocalGatewayVirtualInterfacesResponse' {} a -> s {httpStatus = a} :: DescribeLocalGatewayVirtualInterfacesResponse)
+
+instance
+  Prelude.NFData
+    DescribeLocalGatewayVirtualInterfacesResponse
+  where
+  rnf
+    DescribeLocalGatewayVirtualInterfacesResponse' {..} =
+      Prelude.rnf localGatewayVirtualInterfaces
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeLocalGateways.hs b/gen/Amazonka/EC2/DescribeLocalGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeLocalGateways.hs
@@ -0,0 +1,300 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeLocalGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more local gateways. By default, all local gateways are
+-- described. Alternatively, you can filter the results.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeLocalGateways
+  ( -- * Creating a Request
+    DescribeLocalGateways (..),
+    newDescribeLocalGateways,
+
+    -- * Request Lenses
+    describeLocalGateways_dryRun,
+    describeLocalGateways_filters,
+    describeLocalGateways_localGatewayIds,
+    describeLocalGateways_maxResults,
+    describeLocalGateways_nextToken,
+
+    -- * Destructuring the Response
+    DescribeLocalGatewaysResponse (..),
+    newDescribeLocalGatewaysResponse,
+
+    -- * Response Lenses
+    describeLocalGatewaysResponse_localGateways,
+    describeLocalGatewaysResponse_nextToken,
+    describeLocalGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeLocalGateways' smart constructor.
+data DescribeLocalGateways = DescribeLocalGateways'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @local-gateway-id@ - The ID of a local gateway.
+    --
+    -- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     local gateway.
+    --
+    -- -   @state@ - The state of the association.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the local gateways.
+    localGatewayIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeLocalGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeLocalGateways_filters' - One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway.
+--
+-- -   @state@ - The state of the association.
+--
+-- 'localGatewayIds', 'describeLocalGateways_localGatewayIds' - The IDs of the local gateways.
+--
+-- 'maxResults', 'describeLocalGateways_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeLocalGateways_nextToken' - The token for the next page of results.
+newDescribeLocalGateways ::
+  DescribeLocalGateways
+newDescribeLocalGateways =
+  DescribeLocalGateways'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      localGatewayIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeLocalGateways_dryRun :: Lens.Lens' DescribeLocalGateways (Prelude.Maybe Prelude.Bool)
+describeLocalGateways_dryRun = Lens.lens (\DescribeLocalGateways' {dryRun} -> dryRun) (\s@DescribeLocalGateways' {} a -> s {dryRun = a} :: DescribeLocalGateways)
+
+-- | One or more filters.
+--
+-- -   @local-gateway-id@ - The ID of a local gateway.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     local gateway.
+--
+-- -   @state@ - The state of the association.
+describeLocalGateways_filters :: Lens.Lens' DescribeLocalGateways (Prelude.Maybe [Filter])
+describeLocalGateways_filters = Lens.lens (\DescribeLocalGateways' {filters} -> filters) (\s@DescribeLocalGateways' {} a -> s {filters = a} :: DescribeLocalGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the local gateways.
+describeLocalGateways_localGatewayIds :: Lens.Lens' DescribeLocalGateways (Prelude.Maybe [Prelude.Text])
+describeLocalGateways_localGatewayIds = Lens.lens (\DescribeLocalGateways' {localGatewayIds} -> localGatewayIds) (\s@DescribeLocalGateways' {} a -> s {localGatewayIds = a} :: DescribeLocalGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeLocalGateways_maxResults :: Lens.Lens' DescribeLocalGateways (Prelude.Maybe Prelude.Natural)
+describeLocalGateways_maxResults = Lens.lens (\DescribeLocalGateways' {maxResults} -> maxResults) (\s@DescribeLocalGateways' {} a -> s {maxResults = a} :: DescribeLocalGateways)
+
+-- | The token for the next page of results.
+describeLocalGateways_nextToken :: Lens.Lens' DescribeLocalGateways (Prelude.Maybe Prelude.Text)
+describeLocalGateways_nextToken = Lens.lens (\DescribeLocalGateways' {nextToken} -> nextToken) (\s@DescribeLocalGateways' {} a -> s {nextToken = a} :: DescribeLocalGateways)
+
+instance Core.AWSPager DescribeLocalGateways where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewaysResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeLocalGatewaysResponse_localGateways
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeLocalGateways_nextToken
+          Lens..~ rs
+          Lens.^? describeLocalGatewaysResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeLocalGateways where
+  type
+    AWSResponse DescribeLocalGateways =
+      DescribeLocalGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeLocalGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "localGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeLocalGateways where
+  hashWithSalt _salt DescribeLocalGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` localGatewayIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeLocalGateways where
+  rnf DescribeLocalGateways' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf localGatewayIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeLocalGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeLocalGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeLocalGateways where
+  toQuery DescribeLocalGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeLocalGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "LocalGatewayId"
+              Prelude.<$> localGatewayIds
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeLocalGatewaysResponse' smart constructor.
+data DescribeLocalGatewaysResponse = DescribeLocalGatewaysResponse'
+  { -- | Information about the local gateways.
+    localGateways :: Prelude.Maybe [LocalGateway],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeLocalGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGateways', 'describeLocalGatewaysResponse_localGateways' - Information about the local gateways.
+--
+-- 'nextToken', 'describeLocalGatewaysResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeLocalGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeLocalGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeLocalGatewaysResponse
+newDescribeLocalGatewaysResponse pHttpStatus_ =
+  DescribeLocalGatewaysResponse'
+    { localGateways =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the local gateways.
+describeLocalGatewaysResponse_localGateways :: Lens.Lens' DescribeLocalGatewaysResponse (Prelude.Maybe [LocalGateway])
+describeLocalGatewaysResponse_localGateways = Lens.lens (\DescribeLocalGatewaysResponse' {localGateways} -> localGateways) (\s@DescribeLocalGatewaysResponse' {} a -> s {localGateways = a} :: DescribeLocalGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeLocalGatewaysResponse_nextToken :: Lens.Lens' DescribeLocalGatewaysResponse (Prelude.Maybe Prelude.Text)
+describeLocalGatewaysResponse_nextToken = Lens.lens (\DescribeLocalGatewaysResponse' {nextToken} -> nextToken) (\s@DescribeLocalGatewaysResponse' {} a -> s {nextToken = a} :: DescribeLocalGatewaysResponse)
+
+-- | The response's http status code.
+describeLocalGatewaysResponse_httpStatus :: Lens.Lens' DescribeLocalGatewaysResponse Prelude.Int
+describeLocalGatewaysResponse_httpStatus = Lens.lens (\DescribeLocalGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeLocalGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeLocalGatewaysResponse)
+
+instance Prelude.NFData DescribeLocalGatewaysResponse where
+  rnf DescribeLocalGatewaysResponse' {..} =
+    Prelude.rnf localGateways
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeManagedPrefixLists.hs b/gen/Amazonka/EC2/DescribeManagedPrefixLists.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeManagedPrefixLists.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeManagedPrefixLists
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your managed prefix lists and any Amazon Web Services-managed
+-- prefix lists.
+--
+-- To view the entries for your prefix list, use
+-- GetManagedPrefixListEntries.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeManagedPrefixLists
+  ( -- * Creating a Request
+    DescribeManagedPrefixLists (..),
+    newDescribeManagedPrefixLists,
+
+    -- * Request Lenses
+    describeManagedPrefixLists_dryRun,
+    describeManagedPrefixLists_filters,
+    describeManagedPrefixLists_maxResults,
+    describeManagedPrefixLists_nextToken,
+    describeManagedPrefixLists_prefixListIds,
+
+    -- * Destructuring the Response
+    DescribeManagedPrefixListsResponse (..),
+    newDescribeManagedPrefixListsResponse,
+
+    -- * Response Lenses
+    describeManagedPrefixListsResponse_nextToken,
+    describeManagedPrefixListsResponse_prefixLists,
+    describeManagedPrefixListsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeManagedPrefixLists' smart constructor.
+data DescribeManagedPrefixLists = DescribeManagedPrefixLists'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @owner-id@ - The ID of the prefix list owner.
+    --
+    -- -   @prefix-list-id@ - The ID of the prefix list.
+    --
+    -- -   @prefix-list-name@ - The name of the prefix list.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more prefix list IDs.
+    prefixListIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeManagedPrefixLists' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeManagedPrefixLists_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeManagedPrefixLists_filters' - One or more filters.
+--
+-- -   @owner-id@ - The ID of the prefix list owner.
+--
+-- -   @prefix-list-id@ - The ID of the prefix list.
+--
+-- -   @prefix-list-name@ - The name of the prefix list.
+--
+-- 'maxResults', 'describeManagedPrefixLists_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeManagedPrefixLists_nextToken' - The token for the next page of results.
+--
+-- 'prefixListIds', 'describeManagedPrefixLists_prefixListIds' - One or more prefix list IDs.
+newDescribeManagedPrefixLists ::
+  DescribeManagedPrefixLists
+newDescribeManagedPrefixLists =
+  DescribeManagedPrefixLists'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      prefixListIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeManagedPrefixLists_dryRun :: Lens.Lens' DescribeManagedPrefixLists (Prelude.Maybe Prelude.Bool)
+describeManagedPrefixLists_dryRun = Lens.lens (\DescribeManagedPrefixLists' {dryRun} -> dryRun) (\s@DescribeManagedPrefixLists' {} a -> s {dryRun = a} :: DescribeManagedPrefixLists)
+
+-- | One or more filters.
+--
+-- -   @owner-id@ - The ID of the prefix list owner.
+--
+-- -   @prefix-list-id@ - The ID of the prefix list.
+--
+-- -   @prefix-list-name@ - The name of the prefix list.
+describeManagedPrefixLists_filters :: Lens.Lens' DescribeManagedPrefixLists (Prelude.Maybe [Filter])
+describeManagedPrefixLists_filters = Lens.lens (\DescribeManagedPrefixLists' {filters} -> filters) (\s@DescribeManagedPrefixLists' {} a -> s {filters = a} :: DescribeManagedPrefixLists) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeManagedPrefixLists_maxResults :: Lens.Lens' DescribeManagedPrefixLists (Prelude.Maybe Prelude.Natural)
+describeManagedPrefixLists_maxResults = Lens.lens (\DescribeManagedPrefixLists' {maxResults} -> maxResults) (\s@DescribeManagedPrefixLists' {} a -> s {maxResults = a} :: DescribeManagedPrefixLists)
+
+-- | The token for the next page of results.
+describeManagedPrefixLists_nextToken :: Lens.Lens' DescribeManagedPrefixLists (Prelude.Maybe Prelude.Text)
+describeManagedPrefixLists_nextToken = Lens.lens (\DescribeManagedPrefixLists' {nextToken} -> nextToken) (\s@DescribeManagedPrefixLists' {} a -> s {nextToken = a} :: DescribeManagedPrefixLists)
+
+-- | One or more prefix list IDs.
+describeManagedPrefixLists_prefixListIds :: Lens.Lens' DescribeManagedPrefixLists (Prelude.Maybe [Prelude.Text])
+describeManagedPrefixLists_prefixListIds = Lens.lens (\DescribeManagedPrefixLists' {prefixListIds} -> prefixListIds) (\s@DescribeManagedPrefixLists' {} a -> s {prefixListIds = a} :: DescribeManagedPrefixLists) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeManagedPrefixLists where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeManagedPrefixListsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeManagedPrefixListsResponse_prefixLists
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeManagedPrefixLists_nextToken
+          Lens..~ rs
+          Lens.^? describeManagedPrefixListsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeManagedPrefixLists where
+  type
+    AWSResponse DescribeManagedPrefixLists =
+      DescribeManagedPrefixListsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeManagedPrefixListsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "prefixListSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeManagedPrefixLists where
+  hashWithSalt _salt DescribeManagedPrefixLists' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` prefixListIds
+
+instance Prelude.NFData DescribeManagedPrefixLists where
+  rnf DescribeManagedPrefixLists' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefixListIds
+
+instance Data.ToHeaders DescribeManagedPrefixLists where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeManagedPrefixLists where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeManagedPrefixLists where
+  toQuery DescribeManagedPrefixLists' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeManagedPrefixLists" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "PrefixListId"
+              Prelude.<$> prefixListIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeManagedPrefixListsResponse' smart constructor.
+data DescribeManagedPrefixListsResponse = DescribeManagedPrefixListsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the prefix lists.
+    prefixLists :: Prelude.Maybe [ManagedPrefixList],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeManagedPrefixListsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeManagedPrefixListsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'prefixLists', 'describeManagedPrefixListsResponse_prefixLists' - Information about the prefix lists.
+--
+-- 'httpStatus', 'describeManagedPrefixListsResponse_httpStatus' - The response's http status code.
+newDescribeManagedPrefixListsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeManagedPrefixListsResponse
+newDescribeManagedPrefixListsResponse pHttpStatus_ =
+  DescribeManagedPrefixListsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      prefixLists = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeManagedPrefixListsResponse_nextToken :: Lens.Lens' DescribeManagedPrefixListsResponse (Prelude.Maybe Prelude.Text)
+describeManagedPrefixListsResponse_nextToken = Lens.lens (\DescribeManagedPrefixListsResponse' {nextToken} -> nextToken) (\s@DescribeManagedPrefixListsResponse' {} a -> s {nextToken = a} :: DescribeManagedPrefixListsResponse)
+
+-- | Information about the prefix lists.
+describeManagedPrefixListsResponse_prefixLists :: Lens.Lens' DescribeManagedPrefixListsResponse (Prelude.Maybe [ManagedPrefixList])
+describeManagedPrefixListsResponse_prefixLists = Lens.lens (\DescribeManagedPrefixListsResponse' {prefixLists} -> prefixLists) (\s@DescribeManagedPrefixListsResponse' {} a -> s {prefixLists = a} :: DescribeManagedPrefixListsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeManagedPrefixListsResponse_httpStatus :: Lens.Lens' DescribeManagedPrefixListsResponse Prelude.Int
+describeManagedPrefixListsResponse_httpStatus = Lens.lens (\DescribeManagedPrefixListsResponse' {httpStatus} -> httpStatus) (\s@DescribeManagedPrefixListsResponse' {} a -> s {httpStatus = a} :: DescribeManagedPrefixListsResponse)
+
+instance
+  Prelude.NFData
+    DescribeManagedPrefixListsResponse
+  where
+  rnf DescribeManagedPrefixListsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefixLists
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeMovingAddresses.hs b/gen/Amazonka/EC2/DescribeMovingAddresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeMovingAddresses.hs
@@ -0,0 +1,297 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeMovingAddresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your Elastic IP addresses that are being moved to the EC2-VPC
+-- platform, or that are being restored to the EC2-Classic platform. This
+-- request does not return information about any other Elastic IP addresses
+-- in your account.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeMovingAddresses
+  ( -- * Creating a Request
+    DescribeMovingAddresses (..),
+    newDescribeMovingAddresses,
+
+    -- * Request Lenses
+    describeMovingAddresses_dryRun,
+    describeMovingAddresses_filters,
+    describeMovingAddresses_maxResults,
+    describeMovingAddresses_nextToken,
+    describeMovingAddresses_publicIps,
+
+    -- * Destructuring the Response
+    DescribeMovingAddressesResponse (..),
+    newDescribeMovingAddressesResponse,
+
+    -- * Response Lenses
+    describeMovingAddressesResponse_movingAddressStatuses,
+    describeMovingAddressesResponse_nextToken,
+    describeMovingAddressesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeMovingAddresses' smart constructor.
+data DescribeMovingAddresses = DescribeMovingAddresses'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @moving-status@ - The status of the Elastic IP address
+    --     (@MovingToVpc@ | @RestoringToClassic@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results of the initial request can be seen by
+    -- sending another request with the returned @NextToken@ value. This value
+    -- can be between 5 and 1000; if @MaxResults@ is given a value outside of
+    -- this range, an error is returned.
+    --
+    -- Default: If no value is provided, the default is 1000.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more Elastic IP addresses.
+    publicIps :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMovingAddresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeMovingAddresses_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeMovingAddresses_filters' - One or more filters.
+--
+-- -   @moving-status@ - The status of the Elastic IP address
+--     (@MovingToVpc@ | @RestoringToClassic@).
+--
+-- 'maxResults', 'describeMovingAddresses_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1000; if @MaxResults@ is given a value outside of
+-- this range, an error is returned.
+--
+-- Default: If no value is provided, the default is 1000.
+--
+-- 'nextToken', 'describeMovingAddresses_nextToken' - The token for the next page of results.
+--
+-- 'publicIps', 'describeMovingAddresses_publicIps' - One or more Elastic IP addresses.
+newDescribeMovingAddresses ::
+  DescribeMovingAddresses
+newDescribeMovingAddresses =
+  DescribeMovingAddresses'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      publicIps = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeMovingAddresses_dryRun :: Lens.Lens' DescribeMovingAddresses (Prelude.Maybe Prelude.Bool)
+describeMovingAddresses_dryRun = Lens.lens (\DescribeMovingAddresses' {dryRun} -> dryRun) (\s@DescribeMovingAddresses' {} a -> s {dryRun = a} :: DescribeMovingAddresses)
+
+-- | One or more filters.
+--
+-- -   @moving-status@ - The status of the Elastic IP address
+--     (@MovingToVpc@ | @RestoringToClassic@).
+describeMovingAddresses_filters :: Lens.Lens' DescribeMovingAddresses (Prelude.Maybe [Filter])
+describeMovingAddresses_filters = Lens.lens (\DescribeMovingAddresses' {filters} -> filters) (\s@DescribeMovingAddresses' {} a -> s {filters = a} :: DescribeMovingAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1000; if @MaxResults@ is given a value outside of
+-- this range, an error is returned.
+--
+-- Default: If no value is provided, the default is 1000.
+describeMovingAddresses_maxResults :: Lens.Lens' DescribeMovingAddresses (Prelude.Maybe Prelude.Natural)
+describeMovingAddresses_maxResults = Lens.lens (\DescribeMovingAddresses' {maxResults} -> maxResults) (\s@DescribeMovingAddresses' {} a -> s {maxResults = a} :: DescribeMovingAddresses)
+
+-- | The token for the next page of results.
+describeMovingAddresses_nextToken :: Lens.Lens' DescribeMovingAddresses (Prelude.Maybe Prelude.Text)
+describeMovingAddresses_nextToken = Lens.lens (\DescribeMovingAddresses' {nextToken} -> nextToken) (\s@DescribeMovingAddresses' {} a -> s {nextToken = a} :: DescribeMovingAddresses)
+
+-- | One or more Elastic IP addresses.
+describeMovingAddresses_publicIps :: Lens.Lens' DescribeMovingAddresses (Prelude.Maybe [Prelude.Text])
+describeMovingAddresses_publicIps = Lens.lens (\DescribeMovingAddresses' {publicIps} -> publicIps) (\s@DescribeMovingAddresses' {} a -> s {publicIps = a} :: DescribeMovingAddresses) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeMovingAddresses where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeMovingAddressesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeMovingAddressesResponse_movingAddressStatuses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeMovingAddresses_nextToken
+          Lens..~ rs
+          Lens.^? describeMovingAddressesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeMovingAddresses where
+  type
+    AWSResponse DescribeMovingAddresses =
+      DescribeMovingAddressesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeMovingAddressesResponse'
+            Prelude.<$> ( x
+                            Data..@? "movingAddressStatusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeMovingAddresses where
+  hashWithSalt _salt DescribeMovingAddresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` publicIps
+
+instance Prelude.NFData DescribeMovingAddresses where
+  rnf DescribeMovingAddresses' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf publicIps
+
+instance Data.ToHeaders DescribeMovingAddresses where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeMovingAddresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeMovingAddresses where
+  toQuery DescribeMovingAddresses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeMovingAddresses" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "PublicIp" Prelude.<$> publicIps)
+      ]
+
+-- | /See:/ 'newDescribeMovingAddressesResponse' smart constructor.
+data DescribeMovingAddressesResponse = DescribeMovingAddressesResponse'
+  { -- | The status for each Elastic IP address.
+    movingAddressStatuses :: Prelude.Maybe [MovingAddressStatus],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeMovingAddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'movingAddressStatuses', 'describeMovingAddressesResponse_movingAddressStatuses' - The status for each Elastic IP address.
+--
+-- 'nextToken', 'describeMovingAddressesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeMovingAddressesResponse_httpStatus' - The response's http status code.
+newDescribeMovingAddressesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeMovingAddressesResponse
+newDescribeMovingAddressesResponse pHttpStatus_ =
+  DescribeMovingAddressesResponse'
+    { movingAddressStatuses =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The status for each Elastic IP address.
+describeMovingAddressesResponse_movingAddressStatuses :: Lens.Lens' DescribeMovingAddressesResponse (Prelude.Maybe [MovingAddressStatus])
+describeMovingAddressesResponse_movingAddressStatuses = Lens.lens (\DescribeMovingAddressesResponse' {movingAddressStatuses} -> movingAddressStatuses) (\s@DescribeMovingAddressesResponse' {} a -> s {movingAddressStatuses = a} :: DescribeMovingAddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeMovingAddressesResponse_nextToken :: Lens.Lens' DescribeMovingAddressesResponse (Prelude.Maybe Prelude.Text)
+describeMovingAddressesResponse_nextToken = Lens.lens (\DescribeMovingAddressesResponse' {nextToken} -> nextToken) (\s@DescribeMovingAddressesResponse' {} a -> s {nextToken = a} :: DescribeMovingAddressesResponse)
+
+-- | The response's http status code.
+describeMovingAddressesResponse_httpStatus :: Lens.Lens' DescribeMovingAddressesResponse Prelude.Int
+describeMovingAddressesResponse_httpStatus = Lens.lens (\DescribeMovingAddressesResponse' {httpStatus} -> httpStatus) (\s@DescribeMovingAddressesResponse' {} a -> s {httpStatus = a} :: DescribeMovingAddressesResponse)
+
+instance
+  Prelude.NFData
+    DescribeMovingAddressesResponse
+  where
+  rnf DescribeMovingAddressesResponse' {..} =
+    Prelude.rnf movingAddressStatuses
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNatGateways.hs b/gen/Amazonka/EC2/DescribeNatGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNatGateways.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNatGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your NAT gateways.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNatGateways
+  ( -- * Creating a Request
+    DescribeNatGateways (..),
+    newDescribeNatGateways,
+
+    -- * Request Lenses
+    describeNatGateways_dryRun,
+    describeNatGateways_filter,
+    describeNatGateways_maxResults,
+    describeNatGateways_natGatewayIds,
+    describeNatGateways_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNatGatewaysResponse (..),
+    newDescribeNatGatewaysResponse,
+
+    -- * Response Lenses
+    describeNatGatewaysResponse_natGateways,
+    describeNatGatewaysResponse_nextToken,
+    describeNatGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNatGateways' smart constructor.
+data DescribeNatGateways = DescribeNatGateways'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @nat-gateway-id@ - The ID of the NAT gateway.
+    --
+    -- -   @state@ - The state of the NAT gateway (@pending@ | @failed@ |
+    --     @available@ | @deleting@ | @deleted@).
+    --
+    -- -   @subnet-id@ - The ID of the subnet in which the NAT gateway resides.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC in which the NAT gateway resides.
+    filter' :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | One or more NAT gateway IDs.
+    natGatewayIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNatGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeNatGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filter'', 'describeNatGateways_filter' - One or more filters.
+--
+-- -   @nat-gateway-id@ - The ID of the NAT gateway.
+--
+-- -   @state@ - The state of the NAT gateway (@pending@ | @failed@ |
+--     @available@ | @deleting@ | @deleted@).
+--
+-- -   @subnet-id@ - The ID of the subnet in which the NAT gateway resides.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC in which the NAT gateway resides.
+--
+-- 'maxResults', 'describeNatGateways_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'natGatewayIds', 'describeNatGateways_natGatewayIds' - One or more NAT gateway IDs.
+--
+-- 'nextToken', 'describeNatGateways_nextToken' - The token for the next page of results.
+newDescribeNatGateways ::
+  DescribeNatGateways
+newDescribeNatGateways =
+  DescribeNatGateways'
+    { dryRun = Prelude.Nothing,
+      filter' = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      natGatewayIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNatGateways_dryRun :: Lens.Lens' DescribeNatGateways (Prelude.Maybe Prelude.Bool)
+describeNatGateways_dryRun = Lens.lens (\DescribeNatGateways' {dryRun} -> dryRun) (\s@DescribeNatGateways' {} a -> s {dryRun = a} :: DescribeNatGateways)
+
+-- | One or more filters.
+--
+-- -   @nat-gateway-id@ - The ID of the NAT gateway.
+--
+-- -   @state@ - The state of the NAT gateway (@pending@ | @failed@ |
+--     @available@ | @deleting@ | @deleted@).
+--
+-- -   @subnet-id@ - The ID of the subnet in which the NAT gateway resides.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC in which the NAT gateway resides.
+describeNatGateways_filter :: Lens.Lens' DescribeNatGateways (Prelude.Maybe [Filter])
+describeNatGateways_filter = Lens.lens (\DescribeNatGateways' {filter'} -> filter') (\s@DescribeNatGateways' {} a -> s {filter' = a} :: DescribeNatGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeNatGateways_maxResults :: Lens.Lens' DescribeNatGateways (Prelude.Maybe Prelude.Natural)
+describeNatGateways_maxResults = Lens.lens (\DescribeNatGateways' {maxResults} -> maxResults) (\s@DescribeNatGateways' {} a -> s {maxResults = a} :: DescribeNatGateways)
+
+-- | One or more NAT gateway IDs.
+describeNatGateways_natGatewayIds :: Lens.Lens' DescribeNatGateways (Prelude.Maybe [Prelude.Text])
+describeNatGateways_natGatewayIds = Lens.lens (\DescribeNatGateways' {natGatewayIds} -> natGatewayIds) (\s@DescribeNatGateways' {} a -> s {natGatewayIds = a} :: DescribeNatGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next page of results.
+describeNatGateways_nextToken :: Lens.Lens' DescribeNatGateways (Prelude.Maybe Prelude.Text)
+describeNatGateways_nextToken = Lens.lens (\DescribeNatGateways' {nextToken} -> nextToken) (\s@DescribeNatGateways' {} a -> s {nextToken = a} :: DescribeNatGateways)
+
+instance Core.AWSPager DescribeNatGateways where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNatGatewaysResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNatGatewaysResponse_natGateways
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNatGateways_nextToken
+          Lens..~ rs
+          Lens.^? describeNatGatewaysResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeNatGateways where
+  type
+    AWSResponse DescribeNatGateways =
+      DescribeNatGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNatGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "natGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeNatGateways where
+  hashWithSalt _salt DescribeNatGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filter'
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` natGatewayIds
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeNatGateways where
+  rnf DescribeNatGateways' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filter'
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf natGatewayIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeNatGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeNatGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeNatGateways where
+  toQuery DescribeNatGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeNatGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filter'),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NatGatewayId"
+              Prelude.<$> natGatewayIds
+          ),
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeNatGatewaysResponse' smart constructor.
+data DescribeNatGatewaysResponse = DescribeNatGatewaysResponse'
+  { -- | Information about the NAT gateways.
+    natGateways :: Prelude.Maybe [NatGateway],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNatGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'natGateways', 'describeNatGatewaysResponse_natGateways' - Information about the NAT gateways.
+--
+-- 'nextToken', 'describeNatGatewaysResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNatGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeNatGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNatGatewaysResponse
+newDescribeNatGatewaysResponse pHttpStatus_ =
+  DescribeNatGatewaysResponse'
+    { natGateways =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the NAT gateways.
+describeNatGatewaysResponse_natGateways :: Lens.Lens' DescribeNatGatewaysResponse (Prelude.Maybe [NatGateway])
+describeNatGatewaysResponse_natGateways = Lens.lens (\DescribeNatGatewaysResponse' {natGateways} -> natGateways) (\s@DescribeNatGatewaysResponse' {} a -> s {natGateways = a} :: DescribeNatGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNatGatewaysResponse_nextToken :: Lens.Lens' DescribeNatGatewaysResponse (Prelude.Maybe Prelude.Text)
+describeNatGatewaysResponse_nextToken = Lens.lens (\DescribeNatGatewaysResponse' {nextToken} -> nextToken) (\s@DescribeNatGatewaysResponse' {} a -> s {nextToken = a} :: DescribeNatGatewaysResponse)
+
+-- | The response's http status code.
+describeNatGatewaysResponse_httpStatus :: Lens.Lens' DescribeNatGatewaysResponse Prelude.Int
+describeNatGatewaysResponse_httpStatus = Lens.lens (\DescribeNatGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeNatGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeNatGatewaysResponse)
+
+instance Prelude.NFData DescribeNatGatewaysResponse where
+  rnf DescribeNatGatewaysResponse' {..} =
+    Prelude.rnf natGateways
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkAcls.hs b/gen/Amazonka/EC2/DescribeNetworkAcls.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkAcls.hs
@@ -0,0 +1,447 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkAcls
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your network ACLs.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html Network ACLs>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkAcls
+  ( -- * Creating a Request
+    DescribeNetworkAcls (..),
+    newDescribeNetworkAcls,
+
+    -- * Request Lenses
+    describeNetworkAcls_dryRun,
+    describeNetworkAcls_filters,
+    describeNetworkAcls_maxResults,
+    describeNetworkAcls_networkAclIds,
+    describeNetworkAcls_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkAclsResponse (..),
+    newDescribeNetworkAclsResponse,
+
+    -- * Response Lenses
+    describeNetworkAclsResponse_networkAcls,
+    describeNetworkAclsResponse_nextToken,
+    describeNetworkAclsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNetworkAcls' smart constructor.
+data DescribeNetworkAcls = DescribeNetworkAcls'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @association.association-id@ - The ID of an association ID for the
+    --     ACL.
+    --
+    -- -   @association.network-acl-id@ - The ID of the network ACL involved in
+    --     the association.
+    --
+    -- -   @association.subnet-id@ - The ID of the subnet involved in the
+    --     association.
+    --
+    -- -   @default@ - Indicates whether the ACL is the default network ACL for
+    --     the VPC.
+    --
+    -- -   @entry.cidr@ - The IPv4 CIDR range specified in the entry.
+    --
+    -- -   @entry.icmp.code@ - The ICMP code specified in the entry, if any.
+    --
+    -- -   @entry.icmp.type@ - The ICMP type specified in the entry, if any.
+    --
+    -- -   @entry.ipv6-cidr@ - The IPv6 CIDR range specified in the entry.
+    --
+    -- -   @entry.port-range.from@ - The start of the port range specified in
+    --     the entry.
+    --
+    -- -   @entry.port-range.to@ - The end of the port range specified in the
+    --     entry.
+    --
+    -- -   @entry.protocol@ - The protocol specified in the entry (@tcp@ |
+    --     @udp@ | @icmp@ or a protocol number).
+    --
+    -- -   @entry.rule-action@ - Allows or denies the matching traffic (@allow@
+    --     | @deny@).
+    --
+    -- -   @entry.egress@ - A Boolean that indicates the type of rule. Specify
+    --     @true@ for egress rules, or @false@ for ingress rules.
+    --
+    -- -   @entry.rule-number@ - The number of an entry (in other words, rule)
+    --     in the set of ACL entries.
+    --
+    -- -   @network-acl-id@ - The ID of the network ACL.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     network ACL.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC for the network ACL.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | One or more network ACL IDs.
+    --
+    -- Default: Describes all your network ACLs.
+    networkAclIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkAcls' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeNetworkAcls_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeNetworkAcls_filters' - One or more filters.
+--
+-- -   @association.association-id@ - The ID of an association ID for the
+--     ACL.
+--
+-- -   @association.network-acl-id@ - The ID of the network ACL involved in
+--     the association.
+--
+-- -   @association.subnet-id@ - The ID of the subnet involved in the
+--     association.
+--
+-- -   @default@ - Indicates whether the ACL is the default network ACL for
+--     the VPC.
+--
+-- -   @entry.cidr@ - The IPv4 CIDR range specified in the entry.
+--
+-- -   @entry.icmp.code@ - The ICMP code specified in the entry, if any.
+--
+-- -   @entry.icmp.type@ - The ICMP type specified in the entry, if any.
+--
+-- -   @entry.ipv6-cidr@ - The IPv6 CIDR range specified in the entry.
+--
+-- -   @entry.port-range.from@ - The start of the port range specified in
+--     the entry.
+--
+-- -   @entry.port-range.to@ - The end of the port range specified in the
+--     entry.
+--
+-- -   @entry.protocol@ - The protocol specified in the entry (@tcp@ |
+--     @udp@ | @icmp@ or a protocol number).
+--
+-- -   @entry.rule-action@ - Allows or denies the matching traffic (@allow@
+--     | @deny@).
+--
+-- -   @entry.egress@ - A Boolean that indicates the type of rule. Specify
+--     @true@ for egress rules, or @false@ for ingress rules.
+--
+-- -   @entry.rule-number@ - The number of an entry (in other words, rule)
+--     in the set of ACL entries.
+--
+-- -   @network-acl-id@ - The ID of the network ACL.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     network ACL.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the network ACL.
+--
+-- 'maxResults', 'describeNetworkAcls_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'networkAclIds', 'describeNetworkAcls_networkAclIds' - One or more network ACL IDs.
+--
+-- Default: Describes all your network ACLs.
+--
+-- 'nextToken', 'describeNetworkAcls_nextToken' - The token for the next page of results.
+newDescribeNetworkAcls ::
+  DescribeNetworkAcls
+newDescribeNetworkAcls =
+  DescribeNetworkAcls'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkAclIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkAcls_dryRun :: Lens.Lens' DescribeNetworkAcls (Prelude.Maybe Prelude.Bool)
+describeNetworkAcls_dryRun = Lens.lens (\DescribeNetworkAcls' {dryRun} -> dryRun) (\s@DescribeNetworkAcls' {} a -> s {dryRun = a} :: DescribeNetworkAcls)
+
+-- | One or more filters.
+--
+-- -   @association.association-id@ - The ID of an association ID for the
+--     ACL.
+--
+-- -   @association.network-acl-id@ - The ID of the network ACL involved in
+--     the association.
+--
+-- -   @association.subnet-id@ - The ID of the subnet involved in the
+--     association.
+--
+-- -   @default@ - Indicates whether the ACL is the default network ACL for
+--     the VPC.
+--
+-- -   @entry.cidr@ - The IPv4 CIDR range specified in the entry.
+--
+-- -   @entry.icmp.code@ - The ICMP code specified in the entry, if any.
+--
+-- -   @entry.icmp.type@ - The ICMP type specified in the entry, if any.
+--
+-- -   @entry.ipv6-cidr@ - The IPv6 CIDR range specified in the entry.
+--
+-- -   @entry.port-range.from@ - The start of the port range specified in
+--     the entry.
+--
+-- -   @entry.port-range.to@ - The end of the port range specified in the
+--     entry.
+--
+-- -   @entry.protocol@ - The protocol specified in the entry (@tcp@ |
+--     @udp@ | @icmp@ or a protocol number).
+--
+-- -   @entry.rule-action@ - Allows or denies the matching traffic (@allow@
+--     | @deny@).
+--
+-- -   @entry.egress@ - A Boolean that indicates the type of rule. Specify
+--     @true@ for egress rules, or @false@ for ingress rules.
+--
+-- -   @entry.rule-number@ - The number of an entry (in other words, rule)
+--     in the set of ACL entries.
+--
+-- -   @network-acl-id@ - The ID of the network ACL.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     network ACL.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the network ACL.
+describeNetworkAcls_filters :: Lens.Lens' DescribeNetworkAcls (Prelude.Maybe [Filter])
+describeNetworkAcls_filters = Lens.lens (\DescribeNetworkAcls' {filters} -> filters) (\s@DescribeNetworkAcls' {} a -> s {filters = a} :: DescribeNetworkAcls) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeNetworkAcls_maxResults :: Lens.Lens' DescribeNetworkAcls (Prelude.Maybe Prelude.Natural)
+describeNetworkAcls_maxResults = Lens.lens (\DescribeNetworkAcls' {maxResults} -> maxResults) (\s@DescribeNetworkAcls' {} a -> s {maxResults = a} :: DescribeNetworkAcls)
+
+-- | One or more network ACL IDs.
+--
+-- Default: Describes all your network ACLs.
+describeNetworkAcls_networkAclIds :: Lens.Lens' DescribeNetworkAcls (Prelude.Maybe [Prelude.Text])
+describeNetworkAcls_networkAclIds = Lens.lens (\DescribeNetworkAcls' {networkAclIds} -> networkAclIds) (\s@DescribeNetworkAcls' {} a -> s {networkAclIds = a} :: DescribeNetworkAcls) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next page of results.
+describeNetworkAcls_nextToken :: Lens.Lens' DescribeNetworkAcls (Prelude.Maybe Prelude.Text)
+describeNetworkAcls_nextToken = Lens.lens (\DescribeNetworkAcls' {nextToken} -> nextToken) (\s@DescribeNetworkAcls' {} a -> s {nextToken = a} :: DescribeNetworkAcls)
+
+instance Core.AWSPager DescribeNetworkAcls where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkAclsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkAclsResponse_networkAcls
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkAcls_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkAclsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeNetworkAcls where
+  type
+    AWSResponse DescribeNetworkAcls =
+      DescribeNetworkAclsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkAclsResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkAclSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeNetworkAcls where
+  hashWithSalt _salt DescribeNetworkAcls' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` networkAclIds
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeNetworkAcls where
+  rnf DescribeNetworkAcls' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkAclIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeNetworkAcls where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeNetworkAcls where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeNetworkAcls where
+  toQuery DescribeNetworkAcls' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeNetworkAcls" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NetworkAclId"
+              Prelude.<$> networkAclIds
+          ),
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeNetworkAclsResponse' smart constructor.
+data DescribeNetworkAclsResponse = DescribeNetworkAclsResponse'
+  { -- | Information about one or more network ACLs.
+    networkAcls :: Prelude.Maybe [NetworkAcl],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkAclsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkAcls', 'describeNetworkAclsResponse_networkAcls' - Information about one or more network ACLs.
+--
+-- 'nextToken', 'describeNetworkAclsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNetworkAclsResponse_httpStatus' - The response's http status code.
+newDescribeNetworkAclsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkAclsResponse
+newDescribeNetworkAclsResponse pHttpStatus_ =
+  DescribeNetworkAclsResponse'
+    { networkAcls =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more network ACLs.
+describeNetworkAclsResponse_networkAcls :: Lens.Lens' DescribeNetworkAclsResponse (Prelude.Maybe [NetworkAcl])
+describeNetworkAclsResponse_networkAcls = Lens.lens (\DescribeNetworkAclsResponse' {networkAcls} -> networkAcls) (\s@DescribeNetworkAclsResponse' {} a -> s {networkAcls = a} :: DescribeNetworkAclsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNetworkAclsResponse_nextToken :: Lens.Lens' DescribeNetworkAclsResponse (Prelude.Maybe Prelude.Text)
+describeNetworkAclsResponse_nextToken = Lens.lens (\DescribeNetworkAclsResponse' {nextToken} -> nextToken) (\s@DescribeNetworkAclsResponse' {} a -> s {nextToken = a} :: DescribeNetworkAclsResponse)
+
+-- | The response's http status code.
+describeNetworkAclsResponse_httpStatus :: Lens.Lens' DescribeNetworkAclsResponse Prelude.Int
+describeNetworkAclsResponse_httpStatus = Lens.lens (\DescribeNetworkAclsResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkAclsResponse' {} a -> s {httpStatus = a} :: DescribeNetworkAclsResponse)
+
+instance Prelude.NFData DescribeNetworkAclsResponse where
+  rnf DescribeNetworkAclsResponse' {..} =
+    Prelude.rnf networkAcls
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInsightsAccessScopeAnalyses.hs b/gen/Amazonka/EC2/DescribeNetworkInsightsAccessScopeAnalyses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInsightsAccessScopeAnalyses.hs
@@ -0,0 +1,358 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInsightsAccessScopeAnalyses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified Network Access Scope analyses.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkInsightsAccessScopeAnalyses
+  ( -- * Creating a Request
+    DescribeNetworkInsightsAccessScopeAnalyses (..),
+    newDescribeNetworkInsightsAccessScopeAnalyses,
+
+    -- * Request Lenses
+    describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeBegin,
+    describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeEnd,
+    describeNetworkInsightsAccessScopeAnalyses_dryRun,
+    describeNetworkInsightsAccessScopeAnalyses_filters,
+    describeNetworkInsightsAccessScopeAnalyses_maxResults,
+    describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeAnalysisIds,
+    describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeId,
+    describeNetworkInsightsAccessScopeAnalyses_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkInsightsAccessScopeAnalysesResponse (..),
+    newDescribeNetworkInsightsAccessScopeAnalysesResponse,
+
+    -- * Response Lenses
+    describeNetworkInsightsAccessScopeAnalysesResponse_networkInsightsAccessScopeAnalyses,
+    describeNetworkInsightsAccessScopeAnalysesResponse_nextToken,
+    describeNetworkInsightsAccessScopeAnalysesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNetworkInsightsAccessScopeAnalyses' smart constructor.
+data DescribeNetworkInsightsAccessScopeAnalyses = DescribeNetworkInsightsAccessScopeAnalyses'
+  { -- | Filters the results based on the start time. The analysis must have
+    -- started on or after this time.
+    analysisStartTimeBegin :: Prelude.Maybe Data.ISO8601,
+    -- | Filters the results based on the start time. The analysis must have
+    -- started on or before this time.
+    analysisStartTimeEnd :: Prelude.Maybe Data.ISO8601,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | There are no supported filters.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The IDs of the Network Access Scope analyses.
+    networkInsightsAccessScopeAnalysisIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsAccessScopeAnalyses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analysisStartTimeBegin', 'describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeBegin' - Filters the results based on the start time. The analysis must have
+-- started on or after this time.
+--
+-- 'analysisStartTimeEnd', 'describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeEnd' - Filters the results based on the start time. The analysis must have
+-- started on or before this time.
+--
+-- 'dryRun', 'describeNetworkInsightsAccessScopeAnalyses_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeNetworkInsightsAccessScopeAnalyses_filters' - There are no supported filters.
+--
+-- 'maxResults', 'describeNetworkInsightsAccessScopeAnalyses_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'networkInsightsAccessScopeAnalysisIds', 'describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeAnalysisIds' - The IDs of the Network Access Scope analyses.
+--
+-- 'networkInsightsAccessScopeId', 'describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+--
+-- 'nextToken', 'describeNetworkInsightsAccessScopeAnalyses_nextToken' - The token for the next page of results.
+newDescribeNetworkInsightsAccessScopeAnalyses ::
+  DescribeNetworkInsightsAccessScopeAnalyses
+newDescribeNetworkInsightsAccessScopeAnalyses =
+  DescribeNetworkInsightsAccessScopeAnalyses'
+    { analysisStartTimeBegin =
+        Prelude.Nothing,
+      analysisStartTimeEnd =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkInsightsAccessScopeAnalysisIds =
+        Prelude.Nothing,
+      networkInsightsAccessScopeId =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Filters the results based on the start time. The analysis must have
+-- started on or after this time.
+describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeBegin :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe Prelude.UTCTime)
+describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeBegin = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {analysisStartTimeBegin} -> analysisStartTimeBegin) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {analysisStartTimeBegin = a} :: DescribeNetworkInsightsAccessScopeAnalyses) Prelude.. Lens.mapping Data._Time
+
+-- | Filters the results based on the start time. The analysis must have
+-- started on or before this time.
+describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeEnd :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe Prelude.UTCTime)
+describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeEnd = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {analysisStartTimeEnd} -> analysisStartTimeEnd) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {analysisStartTimeEnd = a} :: DescribeNetworkInsightsAccessScopeAnalyses) Prelude.. Lens.mapping Data._Time
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkInsightsAccessScopeAnalyses_dryRun :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe Prelude.Bool)
+describeNetworkInsightsAccessScopeAnalyses_dryRun = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {dryRun} -> dryRun) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {dryRun = a} :: DescribeNetworkInsightsAccessScopeAnalyses)
+
+-- | There are no supported filters.
+describeNetworkInsightsAccessScopeAnalyses_filters :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe [Filter])
+describeNetworkInsightsAccessScopeAnalyses_filters = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {filters} -> filters) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {filters = a} :: DescribeNetworkInsightsAccessScopeAnalyses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeNetworkInsightsAccessScopeAnalyses_maxResults :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe Prelude.Natural)
+describeNetworkInsightsAccessScopeAnalyses_maxResults = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {maxResults} -> maxResults) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {maxResults = a} :: DescribeNetworkInsightsAccessScopeAnalyses)
+
+-- | The IDs of the Network Access Scope analyses.
+describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeAnalysisIds :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe [Prelude.Text])
+describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeAnalysisIds = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {networkInsightsAccessScopeAnalysisIds} -> networkInsightsAccessScopeAnalysisIds) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {networkInsightsAccessScopeAnalysisIds = a} :: DescribeNetworkInsightsAccessScopeAnalyses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Network Access Scope.
+describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeId :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeId = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {networkInsightsAccessScopeId = a} :: DescribeNetworkInsightsAccessScopeAnalyses)
+
+-- | The token for the next page of results.
+describeNetworkInsightsAccessScopeAnalyses_nextToken :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalyses (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAccessScopeAnalyses_nextToken = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalyses' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsAccessScopeAnalyses' {} a -> s {nextToken = a} :: DescribeNetworkInsightsAccessScopeAnalyses)
+
+instance
+  Core.AWSPager
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsAccessScopeAnalysesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsAccessScopeAnalysesResponse_networkInsightsAccessScopeAnalyses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkInsightsAccessScopeAnalyses_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkInsightsAccessScopeAnalysesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  type
+    AWSResponse
+      DescribeNetworkInsightsAccessScopeAnalyses =
+      DescribeNetworkInsightsAccessScopeAnalysesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInsightsAccessScopeAnalysesResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkInsightsAccessScopeAnalysisSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  hashWithSalt
+    _salt
+    DescribeNetworkInsightsAccessScopeAnalyses' {..} =
+      _salt
+        `Prelude.hashWithSalt` analysisStartTimeBegin
+        `Prelude.hashWithSalt` analysisStartTimeEnd
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` networkInsightsAccessScopeAnalysisIds
+        `Prelude.hashWithSalt` networkInsightsAccessScopeId
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  rnf DescribeNetworkInsightsAccessScopeAnalyses' {..} =
+    Prelude.rnf analysisStartTimeBegin
+      `Prelude.seq` Prelude.rnf analysisStartTimeEnd
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisIds
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeNetworkInsightsAccessScopeAnalyses
+  where
+  toQuery
+    DescribeNetworkInsightsAccessScopeAnalyses' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeNetworkInsightsAccessScopeAnalyses" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "AnalysisStartTimeBegin"
+            Data.=: analysisStartTimeBegin,
+          "AnalysisStartTimeEnd" Data.=: analysisStartTimeEnd,
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          "MaxResults" Data.=: maxResults,
+          Data.toQuery
+            ( Data.toQueryList
+                "NetworkInsightsAccessScopeAnalysisId"
+                Prelude.<$> networkInsightsAccessScopeAnalysisIds
+            ),
+          "NetworkInsightsAccessScopeId"
+            Data.=: networkInsightsAccessScopeId,
+          "NextToken" Data.=: nextToken
+        ]
+
+-- | /See:/ 'newDescribeNetworkInsightsAccessScopeAnalysesResponse' smart constructor.
+data DescribeNetworkInsightsAccessScopeAnalysesResponse = DescribeNetworkInsightsAccessScopeAnalysesResponse'
+  { -- | The Network Access Scope analyses.
+    networkInsightsAccessScopeAnalyses :: Prelude.Maybe [NetworkInsightsAccessScopeAnalysis],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsAccessScopeAnalysesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScopeAnalyses', 'describeNetworkInsightsAccessScopeAnalysesResponse_networkInsightsAccessScopeAnalyses' - The Network Access Scope analyses.
+--
+-- 'nextToken', 'describeNetworkInsightsAccessScopeAnalysesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNetworkInsightsAccessScopeAnalysesResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInsightsAccessScopeAnalysesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInsightsAccessScopeAnalysesResponse
+newDescribeNetworkInsightsAccessScopeAnalysesResponse
+  pHttpStatus_ =
+    DescribeNetworkInsightsAccessScopeAnalysesResponse'
+      { networkInsightsAccessScopeAnalyses =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The Network Access Scope analyses.
+describeNetworkInsightsAccessScopeAnalysesResponse_networkInsightsAccessScopeAnalyses :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalysesResponse (Prelude.Maybe [NetworkInsightsAccessScopeAnalysis])
+describeNetworkInsightsAccessScopeAnalysesResponse_networkInsightsAccessScopeAnalyses = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalysesResponse' {networkInsightsAccessScopeAnalyses} -> networkInsightsAccessScopeAnalyses) (\s@DescribeNetworkInsightsAccessScopeAnalysesResponse' {} a -> s {networkInsightsAccessScopeAnalyses = a} :: DescribeNetworkInsightsAccessScopeAnalysesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNetworkInsightsAccessScopeAnalysesResponse_nextToken :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalysesResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAccessScopeAnalysesResponse_nextToken = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalysesResponse' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsAccessScopeAnalysesResponse' {} a -> s {nextToken = a} :: DescribeNetworkInsightsAccessScopeAnalysesResponse)
+
+-- | The response's http status code.
+describeNetworkInsightsAccessScopeAnalysesResponse_httpStatus :: Lens.Lens' DescribeNetworkInsightsAccessScopeAnalysesResponse Prelude.Int
+describeNetworkInsightsAccessScopeAnalysesResponse_httpStatus = Lens.lens (\DescribeNetworkInsightsAccessScopeAnalysesResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInsightsAccessScopeAnalysesResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInsightsAccessScopeAnalysesResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsAccessScopeAnalysesResponse
+  where
+  rnf
+    DescribeNetworkInsightsAccessScopeAnalysesResponse' {..} =
+      Prelude.rnf networkInsightsAccessScopeAnalyses
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInsightsAccessScopes.hs b/gen/Amazonka/EC2/DescribeNetworkInsightsAccessScopes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInsightsAccessScopes.hs
@@ -0,0 +1,303 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInsightsAccessScopes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified Network Access Scopes.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkInsightsAccessScopes
+  ( -- * Creating a Request
+    DescribeNetworkInsightsAccessScopes (..),
+    newDescribeNetworkInsightsAccessScopes,
+
+    -- * Request Lenses
+    describeNetworkInsightsAccessScopes_dryRun,
+    describeNetworkInsightsAccessScopes_filters,
+    describeNetworkInsightsAccessScopes_maxResults,
+    describeNetworkInsightsAccessScopes_networkInsightsAccessScopeIds,
+    describeNetworkInsightsAccessScopes_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkInsightsAccessScopesResponse (..),
+    newDescribeNetworkInsightsAccessScopesResponse,
+
+    -- * Response Lenses
+    describeNetworkInsightsAccessScopesResponse_networkInsightsAccessScopes,
+    describeNetworkInsightsAccessScopesResponse_nextToken,
+    describeNetworkInsightsAccessScopesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNetworkInsightsAccessScopes' smart constructor.
+data DescribeNetworkInsightsAccessScopes = DescribeNetworkInsightsAccessScopes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | There are no supported filters.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The IDs of the Network Access Scopes.
+    networkInsightsAccessScopeIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsAccessScopes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeNetworkInsightsAccessScopes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeNetworkInsightsAccessScopes_filters' - There are no supported filters.
+--
+-- 'maxResults', 'describeNetworkInsightsAccessScopes_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'networkInsightsAccessScopeIds', 'describeNetworkInsightsAccessScopes_networkInsightsAccessScopeIds' - The IDs of the Network Access Scopes.
+--
+-- 'nextToken', 'describeNetworkInsightsAccessScopes_nextToken' - The token for the next page of results.
+newDescribeNetworkInsightsAccessScopes ::
+  DescribeNetworkInsightsAccessScopes
+newDescribeNetworkInsightsAccessScopes =
+  DescribeNetworkInsightsAccessScopes'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkInsightsAccessScopeIds =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkInsightsAccessScopes_dryRun :: Lens.Lens' DescribeNetworkInsightsAccessScopes (Prelude.Maybe Prelude.Bool)
+describeNetworkInsightsAccessScopes_dryRun = Lens.lens (\DescribeNetworkInsightsAccessScopes' {dryRun} -> dryRun) (\s@DescribeNetworkInsightsAccessScopes' {} a -> s {dryRun = a} :: DescribeNetworkInsightsAccessScopes)
+
+-- | There are no supported filters.
+describeNetworkInsightsAccessScopes_filters :: Lens.Lens' DescribeNetworkInsightsAccessScopes (Prelude.Maybe [Filter])
+describeNetworkInsightsAccessScopes_filters = Lens.lens (\DescribeNetworkInsightsAccessScopes' {filters} -> filters) (\s@DescribeNetworkInsightsAccessScopes' {} a -> s {filters = a} :: DescribeNetworkInsightsAccessScopes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeNetworkInsightsAccessScopes_maxResults :: Lens.Lens' DescribeNetworkInsightsAccessScopes (Prelude.Maybe Prelude.Natural)
+describeNetworkInsightsAccessScopes_maxResults = Lens.lens (\DescribeNetworkInsightsAccessScopes' {maxResults} -> maxResults) (\s@DescribeNetworkInsightsAccessScopes' {} a -> s {maxResults = a} :: DescribeNetworkInsightsAccessScopes)
+
+-- | The IDs of the Network Access Scopes.
+describeNetworkInsightsAccessScopes_networkInsightsAccessScopeIds :: Lens.Lens' DescribeNetworkInsightsAccessScopes (Prelude.Maybe [Prelude.Text])
+describeNetworkInsightsAccessScopes_networkInsightsAccessScopeIds = Lens.lens (\DescribeNetworkInsightsAccessScopes' {networkInsightsAccessScopeIds} -> networkInsightsAccessScopeIds) (\s@DescribeNetworkInsightsAccessScopes' {} a -> s {networkInsightsAccessScopeIds = a} :: DescribeNetworkInsightsAccessScopes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next page of results.
+describeNetworkInsightsAccessScopes_nextToken :: Lens.Lens' DescribeNetworkInsightsAccessScopes (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAccessScopes_nextToken = Lens.lens (\DescribeNetworkInsightsAccessScopes' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsAccessScopes' {} a -> s {nextToken = a} :: DescribeNetworkInsightsAccessScopes)
+
+instance
+  Core.AWSPager
+    DescribeNetworkInsightsAccessScopes
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsAccessScopesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsAccessScopesResponse_networkInsightsAccessScopes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkInsightsAccessScopes_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkInsightsAccessScopesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeNetworkInsightsAccessScopes
+  where
+  type
+    AWSResponse DescribeNetworkInsightsAccessScopes =
+      DescribeNetworkInsightsAccessScopesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInsightsAccessScopesResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkInsightsAccessScopeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeNetworkInsightsAccessScopes
+  where
+  hashWithSalt
+    _salt
+    DescribeNetworkInsightsAccessScopes' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` networkInsightsAccessScopeIds
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsAccessScopes
+  where
+  rnf DescribeNetworkInsightsAccessScopes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeNetworkInsightsAccessScopes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeNetworkInsightsAccessScopes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeNetworkInsightsAccessScopes
+  where
+  toQuery DescribeNetworkInsightsAccessScopes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeNetworkInsightsAccessScopes" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInsightsAccessScopeId"
+              Prelude.<$> networkInsightsAccessScopeIds
+          ),
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeNetworkInsightsAccessScopesResponse' smart constructor.
+data DescribeNetworkInsightsAccessScopesResponse = DescribeNetworkInsightsAccessScopesResponse'
+  { -- | The Network Access Scopes.
+    networkInsightsAccessScopes :: Prelude.Maybe [NetworkInsightsAccessScope],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsAccessScopesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScopes', 'describeNetworkInsightsAccessScopesResponse_networkInsightsAccessScopes' - The Network Access Scopes.
+--
+-- 'nextToken', 'describeNetworkInsightsAccessScopesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNetworkInsightsAccessScopesResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInsightsAccessScopesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInsightsAccessScopesResponse
+newDescribeNetworkInsightsAccessScopesResponse
+  pHttpStatus_ =
+    DescribeNetworkInsightsAccessScopesResponse'
+      { networkInsightsAccessScopes =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Network Access Scopes.
+describeNetworkInsightsAccessScopesResponse_networkInsightsAccessScopes :: Lens.Lens' DescribeNetworkInsightsAccessScopesResponse (Prelude.Maybe [NetworkInsightsAccessScope])
+describeNetworkInsightsAccessScopesResponse_networkInsightsAccessScopes = Lens.lens (\DescribeNetworkInsightsAccessScopesResponse' {networkInsightsAccessScopes} -> networkInsightsAccessScopes) (\s@DescribeNetworkInsightsAccessScopesResponse' {} a -> s {networkInsightsAccessScopes = a} :: DescribeNetworkInsightsAccessScopesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNetworkInsightsAccessScopesResponse_nextToken :: Lens.Lens' DescribeNetworkInsightsAccessScopesResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAccessScopesResponse_nextToken = Lens.lens (\DescribeNetworkInsightsAccessScopesResponse' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsAccessScopesResponse' {} a -> s {nextToken = a} :: DescribeNetworkInsightsAccessScopesResponse)
+
+-- | The response's http status code.
+describeNetworkInsightsAccessScopesResponse_httpStatus :: Lens.Lens' DescribeNetworkInsightsAccessScopesResponse Prelude.Int
+describeNetworkInsightsAccessScopesResponse_httpStatus = Lens.lens (\DescribeNetworkInsightsAccessScopesResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInsightsAccessScopesResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInsightsAccessScopesResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsAccessScopesResponse
+  where
+  rnf DescribeNetworkInsightsAccessScopesResponse' {..} =
+    Prelude.rnf networkInsightsAccessScopes
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInsightsAnalyses.hs b/gen/Amazonka/EC2/DescribeNetworkInsightsAnalyses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInsightsAnalyses.hs
@@ -0,0 +1,355 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInsightsAnalyses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your network insights analyses.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkInsightsAnalyses
+  ( -- * Creating a Request
+    DescribeNetworkInsightsAnalyses (..),
+    newDescribeNetworkInsightsAnalyses,
+
+    -- * Request Lenses
+    describeNetworkInsightsAnalyses_analysisEndTime,
+    describeNetworkInsightsAnalyses_analysisStartTime,
+    describeNetworkInsightsAnalyses_dryRun,
+    describeNetworkInsightsAnalyses_filters,
+    describeNetworkInsightsAnalyses_maxResults,
+    describeNetworkInsightsAnalyses_networkInsightsAnalysisIds,
+    describeNetworkInsightsAnalyses_networkInsightsPathId,
+    describeNetworkInsightsAnalyses_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkInsightsAnalysesResponse (..),
+    newDescribeNetworkInsightsAnalysesResponse,
+
+    -- * Response Lenses
+    describeNetworkInsightsAnalysesResponse_networkInsightsAnalyses,
+    describeNetworkInsightsAnalysesResponse_nextToken,
+    describeNetworkInsightsAnalysesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNetworkInsightsAnalyses' smart constructor.
+data DescribeNetworkInsightsAnalyses = DescribeNetworkInsightsAnalyses'
+  { -- | The time when the network insights analyses ended.
+    analysisEndTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time when the network insights analyses started.
+    analysisStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters. The following are the possible values:
+    --
+    -- -   path-found - A Boolean value that indicates whether a feasible path
+    --     is found.
+    --
+    -- -   status - The status of the analysis (running | succeeded | failed).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The ID of the network insights analyses. You must specify either
+    -- analysis IDs or a path ID.
+    networkInsightsAnalysisIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the path. You must specify either a path ID or analysis IDs.
+    networkInsightsPathId :: Prelude.Maybe Prelude.Text,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsAnalyses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analysisEndTime', 'describeNetworkInsightsAnalyses_analysisEndTime' - The time when the network insights analyses ended.
+--
+-- 'analysisStartTime', 'describeNetworkInsightsAnalyses_analysisStartTime' - The time when the network insights analyses started.
+--
+-- 'dryRun', 'describeNetworkInsightsAnalyses_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeNetworkInsightsAnalyses_filters' - The filters. The following are the possible values:
+--
+-- -   path-found - A Boolean value that indicates whether a feasible path
+--     is found.
+--
+-- -   status - The status of the analysis (running | succeeded | failed).
+--
+-- 'maxResults', 'describeNetworkInsightsAnalyses_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'networkInsightsAnalysisIds', 'describeNetworkInsightsAnalyses_networkInsightsAnalysisIds' - The ID of the network insights analyses. You must specify either
+-- analysis IDs or a path ID.
+--
+-- 'networkInsightsPathId', 'describeNetworkInsightsAnalyses_networkInsightsPathId' - The ID of the path. You must specify either a path ID or analysis IDs.
+--
+-- 'nextToken', 'describeNetworkInsightsAnalyses_nextToken' - The token for the next page of results.
+newDescribeNetworkInsightsAnalyses ::
+  DescribeNetworkInsightsAnalyses
+newDescribeNetworkInsightsAnalyses =
+  DescribeNetworkInsightsAnalyses'
+    { analysisEndTime =
+        Prelude.Nothing,
+      analysisStartTime = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkInsightsAnalysisIds =
+        Prelude.Nothing,
+      networkInsightsPathId = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The time when the network insights analyses ended.
+describeNetworkInsightsAnalyses_analysisEndTime :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe Prelude.UTCTime)
+describeNetworkInsightsAnalyses_analysisEndTime = Lens.lens (\DescribeNetworkInsightsAnalyses' {analysisEndTime} -> analysisEndTime) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {analysisEndTime = a} :: DescribeNetworkInsightsAnalyses) Prelude.. Lens.mapping Data._Time
+
+-- | The time when the network insights analyses started.
+describeNetworkInsightsAnalyses_analysisStartTime :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe Prelude.UTCTime)
+describeNetworkInsightsAnalyses_analysisStartTime = Lens.lens (\DescribeNetworkInsightsAnalyses' {analysisStartTime} -> analysisStartTime) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {analysisStartTime = a} :: DescribeNetworkInsightsAnalyses) Prelude.. Lens.mapping Data._Time
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkInsightsAnalyses_dryRun :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe Prelude.Bool)
+describeNetworkInsightsAnalyses_dryRun = Lens.lens (\DescribeNetworkInsightsAnalyses' {dryRun} -> dryRun) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {dryRun = a} :: DescribeNetworkInsightsAnalyses)
+
+-- | The filters. The following are the possible values:
+--
+-- -   path-found - A Boolean value that indicates whether a feasible path
+--     is found.
+--
+-- -   status - The status of the analysis (running | succeeded | failed).
+describeNetworkInsightsAnalyses_filters :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe [Filter])
+describeNetworkInsightsAnalyses_filters = Lens.lens (\DescribeNetworkInsightsAnalyses' {filters} -> filters) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {filters = a} :: DescribeNetworkInsightsAnalyses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeNetworkInsightsAnalyses_maxResults :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe Prelude.Natural)
+describeNetworkInsightsAnalyses_maxResults = Lens.lens (\DescribeNetworkInsightsAnalyses' {maxResults} -> maxResults) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {maxResults = a} :: DescribeNetworkInsightsAnalyses)
+
+-- | The ID of the network insights analyses. You must specify either
+-- analysis IDs or a path ID.
+describeNetworkInsightsAnalyses_networkInsightsAnalysisIds :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe [Prelude.Text])
+describeNetworkInsightsAnalyses_networkInsightsAnalysisIds = Lens.lens (\DescribeNetworkInsightsAnalyses' {networkInsightsAnalysisIds} -> networkInsightsAnalysisIds) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {networkInsightsAnalysisIds = a} :: DescribeNetworkInsightsAnalyses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the path. You must specify either a path ID or analysis IDs.
+describeNetworkInsightsAnalyses_networkInsightsPathId :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAnalyses_networkInsightsPathId = Lens.lens (\DescribeNetworkInsightsAnalyses' {networkInsightsPathId} -> networkInsightsPathId) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {networkInsightsPathId = a} :: DescribeNetworkInsightsAnalyses)
+
+-- | The token for the next page of results.
+describeNetworkInsightsAnalyses_nextToken :: Lens.Lens' DescribeNetworkInsightsAnalyses (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAnalyses_nextToken = Lens.lens (\DescribeNetworkInsightsAnalyses' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsAnalyses' {} a -> s {nextToken = a} :: DescribeNetworkInsightsAnalyses)
+
+instance
+  Core.AWSPager
+    DescribeNetworkInsightsAnalyses
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsAnalysesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsAnalysesResponse_networkInsightsAnalyses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkInsightsAnalyses_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkInsightsAnalysesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeNetworkInsightsAnalyses
+  where
+  type
+    AWSResponse DescribeNetworkInsightsAnalyses =
+      DescribeNetworkInsightsAnalysesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInsightsAnalysesResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkInsightsAnalysisSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeNetworkInsightsAnalyses
+  where
+  hashWithSalt
+    _salt
+    DescribeNetworkInsightsAnalyses' {..} =
+      _salt
+        `Prelude.hashWithSalt` analysisEndTime
+        `Prelude.hashWithSalt` analysisStartTime
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` networkInsightsAnalysisIds
+        `Prelude.hashWithSalt` networkInsightsPathId
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsAnalyses
+  where
+  rnf DescribeNetworkInsightsAnalyses' {..} =
+    Prelude.rnf analysisEndTime
+      `Prelude.seq` Prelude.rnf analysisStartTime
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkInsightsAnalysisIds
+      `Prelude.seq` Prelude.rnf networkInsightsPathId
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeNetworkInsightsAnalyses
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeNetworkInsightsAnalyses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeNetworkInsightsAnalyses where
+  toQuery DescribeNetworkInsightsAnalyses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeNetworkInsightsAnalyses" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AnalysisEndTime" Data.=: analysisEndTime,
+        "AnalysisStartTime" Data.=: analysisStartTime,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInsightsAnalysisId"
+              Prelude.<$> networkInsightsAnalysisIds
+          ),
+        "NetworkInsightsPathId"
+          Data.=: networkInsightsPathId,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeNetworkInsightsAnalysesResponse' smart constructor.
+data DescribeNetworkInsightsAnalysesResponse = DescribeNetworkInsightsAnalysesResponse'
+  { -- | Information about the network insights analyses.
+    networkInsightsAnalyses :: Prelude.Maybe [NetworkInsightsAnalysis],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsAnalysesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAnalyses', 'describeNetworkInsightsAnalysesResponse_networkInsightsAnalyses' - Information about the network insights analyses.
+--
+-- 'nextToken', 'describeNetworkInsightsAnalysesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNetworkInsightsAnalysesResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInsightsAnalysesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInsightsAnalysesResponse
+newDescribeNetworkInsightsAnalysesResponse
+  pHttpStatus_ =
+    DescribeNetworkInsightsAnalysesResponse'
+      { networkInsightsAnalyses =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the network insights analyses.
+describeNetworkInsightsAnalysesResponse_networkInsightsAnalyses :: Lens.Lens' DescribeNetworkInsightsAnalysesResponse (Prelude.Maybe [NetworkInsightsAnalysis])
+describeNetworkInsightsAnalysesResponse_networkInsightsAnalyses = Lens.lens (\DescribeNetworkInsightsAnalysesResponse' {networkInsightsAnalyses} -> networkInsightsAnalyses) (\s@DescribeNetworkInsightsAnalysesResponse' {} a -> s {networkInsightsAnalyses = a} :: DescribeNetworkInsightsAnalysesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNetworkInsightsAnalysesResponse_nextToken :: Lens.Lens' DescribeNetworkInsightsAnalysesResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsAnalysesResponse_nextToken = Lens.lens (\DescribeNetworkInsightsAnalysesResponse' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsAnalysesResponse' {} a -> s {nextToken = a} :: DescribeNetworkInsightsAnalysesResponse)
+
+-- | The response's http status code.
+describeNetworkInsightsAnalysesResponse_httpStatus :: Lens.Lens' DescribeNetworkInsightsAnalysesResponse Prelude.Int
+describeNetworkInsightsAnalysesResponse_httpStatus = Lens.lens (\DescribeNetworkInsightsAnalysesResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInsightsAnalysesResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInsightsAnalysesResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsAnalysesResponse
+  where
+  rnf DescribeNetworkInsightsAnalysesResponse' {..} =
+    Prelude.rnf networkInsightsAnalyses
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInsightsPaths.hs b/gen/Amazonka/EC2/DescribeNetworkInsightsPaths.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInsightsPaths.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInsightsPaths
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your paths.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkInsightsPaths
+  ( -- * Creating a Request
+    DescribeNetworkInsightsPaths (..),
+    newDescribeNetworkInsightsPaths,
+
+    -- * Request Lenses
+    describeNetworkInsightsPaths_dryRun,
+    describeNetworkInsightsPaths_filters,
+    describeNetworkInsightsPaths_maxResults,
+    describeNetworkInsightsPaths_networkInsightsPathIds,
+    describeNetworkInsightsPaths_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkInsightsPathsResponse (..),
+    newDescribeNetworkInsightsPathsResponse,
+
+    -- * Response Lenses
+    describeNetworkInsightsPathsResponse_networkInsightsPaths,
+    describeNetworkInsightsPathsResponse_nextToken,
+    describeNetworkInsightsPathsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeNetworkInsightsPaths' smart constructor.
+data DescribeNetworkInsightsPaths = DescribeNetworkInsightsPaths'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters. The following are the possible values:
+    --
+    -- -   destination - The ID of the resource.
+    --
+    -- -   destination-port - The destination port.
+    --
+    -- -   protocol - The protocol.
+    --
+    -- -   source - The ID of the resource.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The IDs of the paths.
+    networkInsightsPathIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsPaths' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeNetworkInsightsPaths_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeNetworkInsightsPaths_filters' - The filters. The following are the possible values:
+--
+-- -   destination - The ID of the resource.
+--
+-- -   destination-port - The destination port.
+--
+-- -   protocol - The protocol.
+--
+-- -   source - The ID of the resource.
+--
+-- 'maxResults', 'describeNetworkInsightsPaths_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'networkInsightsPathIds', 'describeNetworkInsightsPaths_networkInsightsPathIds' - The IDs of the paths.
+--
+-- 'nextToken', 'describeNetworkInsightsPaths_nextToken' - The token for the next page of results.
+newDescribeNetworkInsightsPaths ::
+  DescribeNetworkInsightsPaths
+newDescribeNetworkInsightsPaths =
+  DescribeNetworkInsightsPaths'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkInsightsPathIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkInsightsPaths_dryRun :: Lens.Lens' DescribeNetworkInsightsPaths (Prelude.Maybe Prelude.Bool)
+describeNetworkInsightsPaths_dryRun = Lens.lens (\DescribeNetworkInsightsPaths' {dryRun} -> dryRun) (\s@DescribeNetworkInsightsPaths' {} a -> s {dryRun = a} :: DescribeNetworkInsightsPaths)
+
+-- | The filters. The following are the possible values:
+--
+-- -   destination - The ID of the resource.
+--
+-- -   destination-port - The destination port.
+--
+-- -   protocol - The protocol.
+--
+-- -   source - The ID of the resource.
+describeNetworkInsightsPaths_filters :: Lens.Lens' DescribeNetworkInsightsPaths (Prelude.Maybe [Filter])
+describeNetworkInsightsPaths_filters = Lens.lens (\DescribeNetworkInsightsPaths' {filters} -> filters) (\s@DescribeNetworkInsightsPaths' {} a -> s {filters = a} :: DescribeNetworkInsightsPaths) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeNetworkInsightsPaths_maxResults :: Lens.Lens' DescribeNetworkInsightsPaths (Prelude.Maybe Prelude.Natural)
+describeNetworkInsightsPaths_maxResults = Lens.lens (\DescribeNetworkInsightsPaths' {maxResults} -> maxResults) (\s@DescribeNetworkInsightsPaths' {} a -> s {maxResults = a} :: DescribeNetworkInsightsPaths)
+
+-- | The IDs of the paths.
+describeNetworkInsightsPaths_networkInsightsPathIds :: Lens.Lens' DescribeNetworkInsightsPaths (Prelude.Maybe [Prelude.Text])
+describeNetworkInsightsPaths_networkInsightsPathIds = Lens.lens (\DescribeNetworkInsightsPaths' {networkInsightsPathIds} -> networkInsightsPathIds) (\s@DescribeNetworkInsightsPaths' {} a -> s {networkInsightsPathIds = a} :: DescribeNetworkInsightsPaths) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next page of results.
+describeNetworkInsightsPaths_nextToken :: Lens.Lens' DescribeNetworkInsightsPaths (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsPaths_nextToken = Lens.lens (\DescribeNetworkInsightsPaths' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsPaths' {} a -> s {nextToken = a} :: DescribeNetworkInsightsPaths)
+
+instance Core.AWSPager DescribeNetworkInsightsPaths where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsPathsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInsightsPathsResponse_networkInsightsPaths
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkInsightsPaths_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkInsightsPathsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeNetworkInsightsPaths where
+  type
+    AWSResponse DescribeNetworkInsightsPaths =
+      DescribeNetworkInsightsPathsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInsightsPathsResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkInsightsPathSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeNetworkInsightsPaths
+  where
+  hashWithSalt _salt DescribeNetworkInsightsPaths' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` networkInsightsPathIds
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeNetworkInsightsPaths where
+  rnf DescribeNetworkInsightsPaths' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkInsightsPathIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeNetworkInsightsPaths where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeNetworkInsightsPaths where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeNetworkInsightsPaths where
+  toQuery DescribeNetworkInsightsPaths' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeNetworkInsightsPaths" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInsightsPathId"
+              Prelude.<$> networkInsightsPathIds
+          ),
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeNetworkInsightsPathsResponse' smart constructor.
+data DescribeNetworkInsightsPathsResponse = DescribeNetworkInsightsPathsResponse'
+  { -- | Information about the paths.
+    networkInsightsPaths :: Prelude.Maybe [NetworkInsightsPath],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInsightsPathsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsPaths', 'describeNetworkInsightsPathsResponse_networkInsightsPaths' - Information about the paths.
+--
+-- 'nextToken', 'describeNetworkInsightsPathsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNetworkInsightsPathsResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInsightsPathsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInsightsPathsResponse
+newDescribeNetworkInsightsPathsResponse pHttpStatus_ =
+  DescribeNetworkInsightsPathsResponse'
+    { networkInsightsPaths =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the paths.
+describeNetworkInsightsPathsResponse_networkInsightsPaths :: Lens.Lens' DescribeNetworkInsightsPathsResponse (Prelude.Maybe [NetworkInsightsPath])
+describeNetworkInsightsPathsResponse_networkInsightsPaths = Lens.lens (\DescribeNetworkInsightsPathsResponse' {networkInsightsPaths} -> networkInsightsPaths) (\s@DescribeNetworkInsightsPathsResponse' {} a -> s {networkInsightsPaths = a} :: DescribeNetworkInsightsPathsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNetworkInsightsPathsResponse_nextToken :: Lens.Lens' DescribeNetworkInsightsPathsResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInsightsPathsResponse_nextToken = Lens.lens (\DescribeNetworkInsightsPathsResponse' {nextToken} -> nextToken) (\s@DescribeNetworkInsightsPathsResponse' {} a -> s {nextToken = a} :: DescribeNetworkInsightsPathsResponse)
+
+-- | The response's http status code.
+describeNetworkInsightsPathsResponse_httpStatus :: Lens.Lens' DescribeNetworkInsightsPathsResponse Prelude.Int
+describeNetworkInsightsPathsResponse_httpStatus = Lens.lens (\DescribeNetworkInsightsPathsResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInsightsPathsResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInsightsPathsResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInsightsPathsResponse
+  where
+  rnf DescribeNetworkInsightsPathsResponse' {..} =
+    Prelude.rnf networkInsightsPaths
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInterfaceAttribute.hs b/gen/Amazonka/EC2/DescribeNetworkInterfaceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInterfaceAttribute.hs
@@ -0,0 +1,283 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInterfaceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a network interface attribute. You can specify only one
+-- attribute at a time.
+module Amazonka.EC2.DescribeNetworkInterfaceAttribute
+  ( -- * Creating a Request
+    DescribeNetworkInterfaceAttribute (..),
+    newDescribeNetworkInterfaceAttribute,
+
+    -- * Request Lenses
+    describeNetworkInterfaceAttribute_attribute,
+    describeNetworkInterfaceAttribute_dryRun,
+    describeNetworkInterfaceAttribute_networkInterfaceId,
+
+    -- * Destructuring the Response
+    DescribeNetworkInterfaceAttributeResponse (..),
+    newDescribeNetworkInterfaceAttributeResponse,
+
+    -- * Response Lenses
+    describeNetworkInterfaceAttributeResponse_attachment,
+    describeNetworkInterfaceAttributeResponse_description,
+    describeNetworkInterfaceAttributeResponse_groups,
+    describeNetworkInterfaceAttributeResponse_networkInterfaceId,
+    describeNetworkInterfaceAttributeResponse_sourceDestCheck,
+    describeNetworkInterfaceAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeNetworkInterfaceAttribute.
+--
+-- /See:/ 'newDescribeNetworkInterfaceAttribute' smart constructor.
+data DescribeNetworkInterfaceAttribute = DescribeNetworkInterfaceAttribute'
+  { -- | The attribute of the network interface. This parameter is required.
+    attribute :: Prelude.Maybe NetworkInterfaceAttribute,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInterfaceAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'describeNetworkInterfaceAttribute_attribute' - The attribute of the network interface. This parameter is required.
+--
+-- 'dryRun', 'describeNetworkInterfaceAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInterfaceId', 'describeNetworkInterfaceAttribute_networkInterfaceId' - The ID of the network interface.
+newDescribeNetworkInterfaceAttribute ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  DescribeNetworkInterfaceAttribute
+newDescribeNetworkInterfaceAttribute
+  pNetworkInterfaceId_ =
+    DescribeNetworkInterfaceAttribute'
+      { attribute =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        networkInterfaceId =
+          pNetworkInterfaceId_
+      }
+
+-- | The attribute of the network interface. This parameter is required.
+describeNetworkInterfaceAttribute_attribute :: Lens.Lens' DescribeNetworkInterfaceAttribute (Prelude.Maybe NetworkInterfaceAttribute)
+describeNetworkInterfaceAttribute_attribute = Lens.lens (\DescribeNetworkInterfaceAttribute' {attribute} -> attribute) (\s@DescribeNetworkInterfaceAttribute' {} a -> s {attribute = a} :: DescribeNetworkInterfaceAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkInterfaceAttribute_dryRun :: Lens.Lens' DescribeNetworkInterfaceAttribute (Prelude.Maybe Prelude.Bool)
+describeNetworkInterfaceAttribute_dryRun = Lens.lens (\DescribeNetworkInterfaceAttribute' {dryRun} -> dryRun) (\s@DescribeNetworkInterfaceAttribute' {} a -> s {dryRun = a} :: DescribeNetworkInterfaceAttribute)
+
+-- | The ID of the network interface.
+describeNetworkInterfaceAttribute_networkInterfaceId :: Lens.Lens' DescribeNetworkInterfaceAttribute Prelude.Text
+describeNetworkInterfaceAttribute_networkInterfaceId = Lens.lens (\DescribeNetworkInterfaceAttribute' {networkInterfaceId} -> networkInterfaceId) (\s@DescribeNetworkInterfaceAttribute' {} a -> s {networkInterfaceId = a} :: DescribeNetworkInterfaceAttribute)
+
+instance
+  Core.AWSRequest
+    DescribeNetworkInterfaceAttribute
+  where
+  type
+    AWSResponse DescribeNetworkInterfaceAttribute =
+      DescribeNetworkInterfaceAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInterfaceAttributeResponse'
+            Prelude.<$> (x Data..@? "attachment")
+            Prelude.<*> (x Data..@? "description")
+            Prelude.<*> ( x
+                            Data..@? "groupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "networkInterfaceId")
+            Prelude.<*> (x Data..@? "sourceDestCheck")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeNetworkInterfaceAttribute
+  where
+  hashWithSalt
+    _salt
+    DescribeNetworkInterfaceAttribute' {..} =
+      _salt
+        `Prelude.hashWithSalt` attribute
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` networkInterfaceId
+
+instance
+  Prelude.NFData
+    DescribeNetworkInterfaceAttribute
+  where
+  rnf DescribeNetworkInterfaceAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance
+  Data.ToHeaders
+    DescribeNetworkInterfaceAttribute
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeNetworkInterfaceAttribute
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeNetworkInterfaceAttribute
+  where
+  toQuery DescribeNetworkInterfaceAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeNetworkInterfaceAttribute" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attribute" Data.=: attribute,
+        "DryRun" Data.=: dryRun,
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | Contains the output of DescribeNetworkInterfaceAttribute.
+--
+-- /See:/ 'newDescribeNetworkInterfaceAttributeResponse' smart constructor.
+data DescribeNetworkInterfaceAttributeResponse = DescribeNetworkInterfaceAttributeResponse'
+  { -- | The attachment (if any) of the network interface.
+    attachment :: Prelude.Maybe NetworkInterfaceAttachment,
+    -- | The description of the network interface.
+    description :: Prelude.Maybe AttributeValue,
+    -- | The security groups associated with the network interface.
+    groups :: Prelude.Maybe [GroupIdentifier],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether source\/destination checking is enabled.
+    sourceDestCheck :: Prelude.Maybe AttributeBooleanValue,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInterfaceAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachment', 'describeNetworkInterfaceAttributeResponse_attachment' - The attachment (if any) of the network interface.
+--
+-- 'description', 'describeNetworkInterfaceAttributeResponse_description' - The description of the network interface.
+--
+-- 'groups', 'describeNetworkInterfaceAttributeResponse_groups' - The security groups associated with the network interface.
+--
+-- 'networkInterfaceId', 'describeNetworkInterfaceAttributeResponse_networkInterfaceId' - The ID of the network interface.
+--
+-- 'sourceDestCheck', 'describeNetworkInterfaceAttributeResponse_sourceDestCheck' - Indicates whether source\/destination checking is enabled.
+--
+-- 'httpStatus', 'describeNetworkInterfaceAttributeResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInterfaceAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInterfaceAttributeResponse
+newDescribeNetworkInterfaceAttributeResponse
+  pHttpStatus_ =
+    DescribeNetworkInterfaceAttributeResponse'
+      { attachment =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        groups = Prelude.Nothing,
+        networkInterfaceId =
+          Prelude.Nothing,
+        sourceDestCheck =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The attachment (if any) of the network interface.
+describeNetworkInterfaceAttributeResponse_attachment :: Lens.Lens' DescribeNetworkInterfaceAttributeResponse (Prelude.Maybe NetworkInterfaceAttachment)
+describeNetworkInterfaceAttributeResponse_attachment = Lens.lens (\DescribeNetworkInterfaceAttributeResponse' {attachment} -> attachment) (\s@DescribeNetworkInterfaceAttributeResponse' {} a -> s {attachment = a} :: DescribeNetworkInterfaceAttributeResponse)
+
+-- | The description of the network interface.
+describeNetworkInterfaceAttributeResponse_description :: Lens.Lens' DescribeNetworkInterfaceAttributeResponse (Prelude.Maybe AttributeValue)
+describeNetworkInterfaceAttributeResponse_description = Lens.lens (\DescribeNetworkInterfaceAttributeResponse' {description} -> description) (\s@DescribeNetworkInterfaceAttributeResponse' {} a -> s {description = a} :: DescribeNetworkInterfaceAttributeResponse)
+
+-- | The security groups associated with the network interface.
+describeNetworkInterfaceAttributeResponse_groups :: Lens.Lens' DescribeNetworkInterfaceAttributeResponse (Prelude.Maybe [GroupIdentifier])
+describeNetworkInterfaceAttributeResponse_groups = Lens.lens (\DescribeNetworkInterfaceAttributeResponse' {groups} -> groups) (\s@DescribeNetworkInterfaceAttributeResponse' {} a -> s {groups = a} :: DescribeNetworkInterfaceAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+describeNetworkInterfaceAttributeResponse_networkInterfaceId :: Lens.Lens' DescribeNetworkInterfaceAttributeResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInterfaceAttributeResponse_networkInterfaceId = Lens.lens (\DescribeNetworkInterfaceAttributeResponse' {networkInterfaceId} -> networkInterfaceId) (\s@DescribeNetworkInterfaceAttributeResponse' {} a -> s {networkInterfaceId = a} :: DescribeNetworkInterfaceAttributeResponse)
+
+-- | Indicates whether source\/destination checking is enabled.
+describeNetworkInterfaceAttributeResponse_sourceDestCheck :: Lens.Lens' DescribeNetworkInterfaceAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeNetworkInterfaceAttributeResponse_sourceDestCheck = Lens.lens (\DescribeNetworkInterfaceAttributeResponse' {sourceDestCheck} -> sourceDestCheck) (\s@DescribeNetworkInterfaceAttributeResponse' {} a -> s {sourceDestCheck = a} :: DescribeNetworkInterfaceAttributeResponse)
+
+-- | The response's http status code.
+describeNetworkInterfaceAttributeResponse_httpStatus :: Lens.Lens' DescribeNetworkInterfaceAttributeResponse Prelude.Int
+describeNetworkInterfaceAttributeResponse_httpStatus = Lens.lens (\DescribeNetworkInterfaceAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInterfaceAttributeResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInterfaceAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInterfaceAttributeResponse
+  where
+  rnf DescribeNetworkInterfaceAttributeResponse' {..} =
+    Prelude.rnf attachment
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf sourceDestCheck
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInterfacePermissions.hs b/gen/Amazonka/EC2/DescribeNetworkInterfacePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInterfacePermissions.hs
@@ -0,0 +1,327 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInterfacePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the permissions for your network interfaces.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkInterfacePermissions
+  ( -- * Creating a Request
+    DescribeNetworkInterfacePermissions (..),
+    newDescribeNetworkInterfacePermissions,
+
+    -- * Request Lenses
+    describeNetworkInterfacePermissions_filters,
+    describeNetworkInterfacePermissions_maxResults,
+    describeNetworkInterfacePermissions_networkInterfacePermissionIds,
+    describeNetworkInterfacePermissions_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkInterfacePermissionsResponse (..),
+    newDescribeNetworkInterfacePermissionsResponse,
+
+    -- * Response Lenses
+    describeNetworkInterfacePermissionsResponse_networkInterfacePermissions,
+    describeNetworkInterfacePermissionsResponse_nextToken,
+    describeNetworkInterfacePermissionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeNetworkInterfacePermissions.
+--
+-- /See:/ 'newDescribeNetworkInterfacePermissions' smart constructor.
+data DescribeNetworkInterfacePermissions = DescribeNetworkInterfacePermissions'
+  { -- | One or more filters.
+    --
+    -- -   @network-interface-permission.network-interface-permission-id@ - The
+    --     ID of the permission.
+    --
+    -- -   @network-interface-permission.network-interface-id@ - The ID of the
+    --     network interface.
+    --
+    -- -   @network-interface-permission.aws-account-id@ - The Amazon Web
+    --     Services account ID.
+    --
+    -- -   @network-interface-permission.aws-service@ - The Amazon Web Service.
+    --
+    -- -   @network-interface-permission.permission@ - The type of permission
+    --     (@INSTANCE-ATTACH@ | @EIP-ASSOCIATE@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. If this parameter is not specified, up to 50 results are returned
+    -- by default.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The network interface permission IDs.
+    networkInterfacePermissionIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInterfacePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeNetworkInterfacePermissions_filters' - One or more filters.
+--
+-- -   @network-interface-permission.network-interface-permission-id@ - The
+--     ID of the permission.
+--
+-- -   @network-interface-permission.network-interface-id@ - The ID of the
+--     network interface.
+--
+-- -   @network-interface-permission.aws-account-id@ - The Amazon Web
+--     Services account ID.
+--
+-- -   @network-interface-permission.aws-service@ - The Amazon Web Service.
+--
+-- -   @network-interface-permission.permission@ - The type of permission
+--     (@INSTANCE-ATTACH@ | @EIP-ASSOCIATE@).
+--
+-- 'maxResults', 'describeNetworkInterfacePermissions_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. If this parameter is not specified, up to 50 results are returned
+-- by default.
+--
+-- 'networkInterfacePermissionIds', 'describeNetworkInterfacePermissions_networkInterfacePermissionIds' - The network interface permission IDs.
+--
+-- 'nextToken', 'describeNetworkInterfacePermissions_nextToken' - The token to request the next page of results.
+newDescribeNetworkInterfacePermissions ::
+  DescribeNetworkInterfacePermissions
+newDescribeNetworkInterfacePermissions =
+  DescribeNetworkInterfacePermissions'
+    { filters =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkInterfacePermissionIds =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | One or more filters.
+--
+-- -   @network-interface-permission.network-interface-permission-id@ - The
+--     ID of the permission.
+--
+-- -   @network-interface-permission.network-interface-id@ - The ID of the
+--     network interface.
+--
+-- -   @network-interface-permission.aws-account-id@ - The Amazon Web
+--     Services account ID.
+--
+-- -   @network-interface-permission.aws-service@ - The Amazon Web Service.
+--
+-- -   @network-interface-permission.permission@ - The type of permission
+--     (@INSTANCE-ATTACH@ | @EIP-ASSOCIATE@).
+describeNetworkInterfacePermissions_filters :: Lens.Lens' DescribeNetworkInterfacePermissions (Prelude.Maybe [Filter])
+describeNetworkInterfacePermissions_filters = Lens.lens (\DescribeNetworkInterfacePermissions' {filters} -> filters) (\s@DescribeNetworkInterfacePermissions' {} a -> s {filters = a} :: DescribeNetworkInterfacePermissions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. If this parameter is not specified, up to 50 results are returned
+-- by default.
+describeNetworkInterfacePermissions_maxResults :: Lens.Lens' DescribeNetworkInterfacePermissions (Prelude.Maybe Prelude.Natural)
+describeNetworkInterfacePermissions_maxResults = Lens.lens (\DescribeNetworkInterfacePermissions' {maxResults} -> maxResults) (\s@DescribeNetworkInterfacePermissions' {} a -> s {maxResults = a} :: DescribeNetworkInterfacePermissions)
+
+-- | The network interface permission IDs.
+describeNetworkInterfacePermissions_networkInterfacePermissionIds :: Lens.Lens' DescribeNetworkInterfacePermissions (Prelude.Maybe [Prelude.Text])
+describeNetworkInterfacePermissions_networkInterfacePermissionIds = Lens.lens (\DescribeNetworkInterfacePermissions' {networkInterfacePermissionIds} -> networkInterfacePermissionIds) (\s@DescribeNetworkInterfacePermissions' {} a -> s {networkInterfacePermissionIds = a} :: DescribeNetworkInterfacePermissions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to request the next page of results.
+describeNetworkInterfacePermissions_nextToken :: Lens.Lens' DescribeNetworkInterfacePermissions (Prelude.Maybe Prelude.Text)
+describeNetworkInterfacePermissions_nextToken = Lens.lens (\DescribeNetworkInterfacePermissions' {nextToken} -> nextToken) (\s@DescribeNetworkInterfacePermissions' {} a -> s {nextToken = a} :: DescribeNetworkInterfacePermissions)
+
+instance
+  Core.AWSPager
+    DescribeNetworkInterfacePermissions
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInterfacePermissionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInterfacePermissionsResponse_networkInterfacePermissions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkInterfacePermissions_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkInterfacePermissionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeNetworkInterfacePermissions
+  where
+  type
+    AWSResponse DescribeNetworkInterfacePermissions =
+      DescribeNetworkInterfacePermissionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInterfacePermissionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkInterfacePermissions"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeNetworkInterfacePermissions
+  where
+  hashWithSalt
+    _salt
+    DescribeNetworkInterfacePermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` networkInterfacePermissionIds
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeNetworkInterfacePermissions
+  where
+  rnf DescribeNetworkInterfacePermissions' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkInterfacePermissionIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeNetworkInterfacePermissions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeNetworkInterfacePermissions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeNetworkInterfacePermissions
+  where
+  toQuery DescribeNetworkInterfacePermissions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeNetworkInterfacePermissions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterfacePermissionId"
+              Prelude.<$> networkInterfacePermissionIds
+          ),
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | Contains the output for DescribeNetworkInterfacePermissions.
+--
+-- /See:/ 'newDescribeNetworkInterfacePermissionsResponse' smart constructor.
+data DescribeNetworkInterfacePermissionsResponse = DescribeNetworkInterfacePermissionsResponse'
+  { -- | The network interface permissions.
+    networkInterfacePermissions :: Prelude.Maybe [NetworkInterfacePermission],
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInterfacePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInterfacePermissions', 'describeNetworkInterfacePermissionsResponse_networkInterfacePermissions' - The network interface permissions.
+--
+-- 'nextToken', 'describeNetworkInterfacePermissionsResponse_nextToken' - The token to use to retrieve the next page of results.
+--
+-- 'httpStatus', 'describeNetworkInterfacePermissionsResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInterfacePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInterfacePermissionsResponse
+newDescribeNetworkInterfacePermissionsResponse
+  pHttpStatus_ =
+    DescribeNetworkInterfacePermissionsResponse'
+      { networkInterfacePermissions =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The network interface permissions.
+describeNetworkInterfacePermissionsResponse_networkInterfacePermissions :: Lens.Lens' DescribeNetworkInterfacePermissionsResponse (Prelude.Maybe [NetworkInterfacePermission])
+describeNetworkInterfacePermissionsResponse_networkInterfacePermissions = Lens.lens (\DescribeNetworkInterfacePermissionsResponse' {networkInterfacePermissions} -> networkInterfacePermissions) (\s@DescribeNetworkInterfacePermissionsResponse' {} a -> s {networkInterfacePermissions = a} :: DescribeNetworkInterfacePermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results.
+describeNetworkInterfacePermissionsResponse_nextToken :: Lens.Lens' DescribeNetworkInterfacePermissionsResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInterfacePermissionsResponse_nextToken = Lens.lens (\DescribeNetworkInterfacePermissionsResponse' {nextToken} -> nextToken) (\s@DescribeNetworkInterfacePermissionsResponse' {} a -> s {nextToken = a} :: DescribeNetworkInterfacePermissionsResponse)
+
+-- | The response's http status code.
+describeNetworkInterfacePermissionsResponse_httpStatus :: Lens.Lens' DescribeNetworkInterfacePermissionsResponse Prelude.Int
+describeNetworkInterfacePermissionsResponse_httpStatus = Lens.lens (\DescribeNetworkInterfacePermissionsResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInterfacePermissionsResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInterfacePermissionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInterfacePermissionsResponse
+  where
+  rnf DescribeNetworkInterfacePermissionsResponse' {..} =
+    Prelude.rnf networkInterfacePermissions
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeNetworkInterfaces.hs b/gen/Amazonka/EC2/DescribeNetworkInterfaces.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeNetworkInterfaces.hs
@@ -0,0 +1,634 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeNetworkInterfaces
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your network interfaces.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeNetworkInterfaces
+  ( -- * Creating a Request
+    DescribeNetworkInterfaces (..),
+    newDescribeNetworkInterfaces,
+
+    -- * Request Lenses
+    describeNetworkInterfaces_dryRun,
+    describeNetworkInterfaces_filters,
+    describeNetworkInterfaces_maxResults,
+    describeNetworkInterfaces_networkInterfaceIds,
+    describeNetworkInterfaces_nextToken,
+
+    -- * Destructuring the Response
+    DescribeNetworkInterfacesResponse (..),
+    newDescribeNetworkInterfacesResponse,
+
+    -- * Response Lenses
+    describeNetworkInterfacesResponse_networkInterfaces,
+    describeNetworkInterfacesResponse_nextToken,
+    describeNetworkInterfacesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeNetworkInterfaces.
+--
+-- /See:/ 'newDescribeNetworkInterfaces' smart constructor.
+data DescribeNetworkInterfaces = DescribeNetworkInterfaces'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @addresses.private-ip-address@ - The private IPv4 addresses
+    --     associated with the network interface.
+    --
+    -- -   @addresses.primary@ - Whether the private IPv4 address is the
+    --     primary IP address associated with the network interface.
+    --
+    -- -   @addresses.association.public-ip@ - The association ID returned when
+    --     the network interface was associated with the Elastic IP address
+    --     (IPv4).
+    --
+    -- -   @addresses.association.owner-id@ - The owner ID of the addresses
+    --     associated with the network interface.
+    --
+    -- -   @association.association-id@ - The association ID returned when the
+    --     network interface was associated with an IPv4 address.
+    --
+    -- -   @association.allocation-id@ - The allocation ID returned when you
+    --     allocated the Elastic IP address (IPv4) for your network interface.
+    --
+    -- -   @association.ip-owner-id@ - The owner of the Elastic IP address
+    --     (IPv4) associated with the network interface.
+    --
+    -- -   @association.public-ip@ - The address of the Elastic IP address
+    --     (IPv4) bound to the network interface.
+    --
+    -- -   @association.public-dns-name@ - The public DNS name for the network
+    --     interface (IPv4).
+    --
+    -- -   @attachment.attachment-id@ - The ID of the interface attachment.
+    --
+    -- -   @attachment.attach-time@ - The time that the network interface was
+    --     attached to an instance.
+    --
+    -- -   @attachment.delete-on-termination@ - Indicates whether the
+    --     attachment is deleted when an instance is terminated.
+    --
+    -- -   @attachment.device-index@ - The device index to which the network
+    --     interface is attached.
+    --
+    -- -   @attachment.instance-id@ - The ID of the instance to which the
+    --     network interface is attached.
+    --
+    -- -   @attachment.instance-owner-id@ - The owner ID of the instance to
+    --     which the network interface is attached.
+    --
+    -- -   @attachment.status@ - The status of the attachment (@attaching@ |
+    --     @attached@ | @detaching@ | @detached@).
+    --
+    -- -   @availability-zone@ - The Availability Zone of the network
+    --     interface.
+    --
+    -- -   @description@ - The description of the network interface.
+    --
+    -- -   @group-id@ - The ID of a security group associated with the network
+    --     interface.
+    --
+    -- -   @group-name@ - The name of a security group associated with the
+    --     network interface.
+    --
+    -- -   @ipv6-addresses.ipv6-address@ - An IPv6 address associated with the
+    --     network interface.
+    --
+    -- -   @interface-type@ - The type of network interface
+    --     (@api_gateway_managed@ | @aws_codestar_connections_managed@ |
+    --     @branch@ | @efa@ | @gateway_load_balancer@ |
+    --     @gateway_load_balancer_endpoint@ | @global_accelerator_managed@ |
+    --     @interface@ | @iot_rules_managed@ | @lambda@ | @load_balancer@ |
+    --     @nat_gateway@ | @network_load_balancer@ | @quicksight@ |
+    --     @transit_gateway@ | @trunk@ | @vpc_endpoint@).
+    --
+    -- -   @mac-address@ - The MAC address of the network interface.
+    --
+    -- -   @network-interface-id@ - The ID of the network interface.
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the network
+    --     interface owner.
+    --
+    -- -   @private-ip-address@ - The private IPv4 address or addresses of the
+    --     network interface.
+    --
+    -- -   @private-dns-name@ - The private DNS name of the network interface
+    --     (IPv4).
+    --
+    -- -   @requester-id@ - The alias or Amazon Web Services account ID of the
+    --     principal or service that created the network interface.
+    --
+    -- -   @requester-managed@ - Indicates whether the network interface is
+    --     being managed by an Amazon Web Service (for example, Amazon Web
+    --     Services Management Console, Auto Scaling, and so on).
+    --
+    -- -   @source-dest-check@ - Indicates whether the network interface
+    --     performs source\/destination checking. A value of @true@ means
+    --     checking is enabled, and @false@ means checking is disabled. The
+    --     value must be @false@ for the network interface to perform network
+    --     address translation (NAT) in your VPC.
+    --
+    -- -   @status@ - The status of the network interface. If the network
+    --     interface is not attached to an instance, the status is @available@;
+    --     if a network interface is attached to an instance the status is
+    --     @in-use@.
+    --
+    -- -   @subnet-id@ - The ID of the subnet for the network interface.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC for the network interface.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of items to return for this request. The request
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results. You cannot specify this parameter and the network
+    -- interface IDs parameter in the same request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The network interface IDs.
+    --
+    -- Default: Describes all your network interfaces.
+    networkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInterfaces' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeNetworkInterfaces_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeNetworkInterfaces_filters' - One or more filters.
+--
+-- -   @addresses.private-ip-address@ - The private IPv4 addresses
+--     associated with the network interface.
+--
+-- -   @addresses.primary@ - Whether the private IPv4 address is the
+--     primary IP address associated with the network interface.
+--
+-- -   @addresses.association.public-ip@ - The association ID returned when
+--     the network interface was associated with the Elastic IP address
+--     (IPv4).
+--
+-- -   @addresses.association.owner-id@ - The owner ID of the addresses
+--     associated with the network interface.
+--
+-- -   @association.association-id@ - The association ID returned when the
+--     network interface was associated with an IPv4 address.
+--
+-- -   @association.allocation-id@ - The allocation ID returned when you
+--     allocated the Elastic IP address (IPv4) for your network interface.
+--
+-- -   @association.ip-owner-id@ - The owner of the Elastic IP address
+--     (IPv4) associated with the network interface.
+--
+-- -   @association.public-ip@ - The address of the Elastic IP address
+--     (IPv4) bound to the network interface.
+--
+-- -   @association.public-dns-name@ - The public DNS name for the network
+--     interface (IPv4).
+--
+-- -   @attachment.attachment-id@ - The ID of the interface attachment.
+--
+-- -   @attachment.attach-time@ - The time that the network interface was
+--     attached to an instance.
+--
+-- -   @attachment.delete-on-termination@ - Indicates whether the
+--     attachment is deleted when an instance is terminated.
+--
+-- -   @attachment.device-index@ - The device index to which the network
+--     interface is attached.
+--
+-- -   @attachment.instance-id@ - The ID of the instance to which the
+--     network interface is attached.
+--
+-- -   @attachment.instance-owner-id@ - The owner ID of the instance to
+--     which the network interface is attached.
+--
+-- -   @attachment.status@ - The status of the attachment (@attaching@ |
+--     @attached@ | @detaching@ | @detached@).
+--
+-- -   @availability-zone@ - The Availability Zone of the network
+--     interface.
+--
+-- -   @description@ - The description of the network interface.
+--
+-- -   @group-id@ - The ID of a security group associated with the network
+--     interface.
+--
+-- -   @group-name@ - The name of a security group associated with the
+--     network interface.
+--
+-- -   @ipv6-addresses.ipv6-address@ - An IPv6 address associated with the
+--     network interface.
+--
+-- -   @interface-type@ - The type of network interface
+--     (@api_gateway_managed@ | @aws_codestar_connections_managed@ |
+--     @branch@ | @efa@ | @gateway_load_balancer@ |
+--     @gateway_load_balancer_endpoint@ | @global_accelerator_managed@ |
+--     @interface@ | @iot_rules_managed@ | @lambda@ | @load_balancer@ |
+--     @nat_gateway@ | @network_load_balancer@ | @quicksight@ |
+--     @transit_gateway@ | @trunk@ | @vpc_endpoint@).
+--
+-- -   @mac-address@ - The MAC address of the network interface.
+--
+-- -   @network-interface-id@ - The ID of the network interface.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the network
+--     interface owner.
+--
+-- -   @private-ip-address@ - The private IPv4 address or addresses of the
+--     network interface.
+--
+-- -   @private-dns-name@ - The private DNS name of the network interface
+--     (IPv4).
+--
+-- -   @requester-id@ - The alias or Amazon Web Services account ID of the
+--     principal or service that created the network interface.
+--
+-- -   @requester-managed@ - Indicates whether the network interface is
+--     being managed by an Amazon Web Service (for example, Amazon Web
+--     Services Management Console, Auto Scaling, and so on).
+--
+-- -   @source-dest-check@ - Indicates whether the network interface
+--     performs source\/destination checking. A value of @true@ means
+--     checking is enabled, and @false@ means checking is disabled. The
+--     value must be @false@ for the network interface to perform network
+--     address translation (NAT) in your VPC.
+--
+-- -   @status@ - The status of the network interface. If the network
+--     interface is not attached to an instance, the status is @available@;
+--     if a network interface is attached to an instance the status is
+--     @in-use@.
+--
+-- -   @subnet-id@ - The ID of the subnet for the network interface.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the network interface.
+--
+-- 'maxResults', 'describeNetworkInterfaces_maxResults' - The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results. You cannot specify this parameter and the network
+-- interface IDs parameter in the same request.
+--
+-- 'networkInterfaceIds', 'describeNetworkInterfaces_networkInterfaceIds' - The network interface IDs.
+--
+-- Default: Describes all your network interfaces.
+--
+-- 'nextToken', 'describeNetworkInterfaces_nextToken' - The token to retrieve the next page of results.
+newDescribeNetworkInterfaces ::
+  DescribeNetworkInterfaces
+newDescribeNetworkInterfaces =
+  DescribeNetworkInterfaces'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      networkInterfaceIds = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeNetworkInterfaces_dryRun :: Lens.Lens' DescribeNetworkInterfaces (Prelude.Maybe Prelude.Bool)
+describeNetworkInterfaces_dryRun = Lens.lens (\DescribeNetworkInterfaces' {dryRun} -> dryRun) (\s@DescribeNetworkInterfaces' {} a -> s {dryRun = a} :: DescribeNetworkInterfaces)
+
+-- | One or more filters.
+--
+-- -   @addresses.private-ip-address@ - The private IPv4 addresses
+--     associated with the network interface.
+--
+-- -   @addresses.primary@ - Whether the private IPv4 address is the
+--     primary IP address associated with the network interface.
+--
+-- -   @addresses.association.public-ip@ - The association ID returned when
+--     the network interface was associated with the Elastic IP address
+--     (IPv4).
+--
+-- -   @addresses.association.owner-id@ - The owner ID of the addresses
+--     associated with the network interface.
+--
+-- -   @association.association-id@ - The association ID returned when the
+--     network interface was associated with an IPv4 address.
+--
+-- -   @association.allocation-id@ - The allocation ID returned when you
+--     allocated the Elastic IP address (IPv4) for your network interface.
+--
+-- -   @association.ip-owner-id@ - The owner of the Elastic IP address
+--     (IPv4) associated with the network interface.
+--
+-- -   @association.public-ip@ - The address of the Elastic IP address
+--     (IPv4) bound to the network interface.
+--
+-- -   @association.public-dns-name@ - The public DNS name for the network
+--     interface (IPv4).
+--
+-- -   @attachment.attachment-id@ - The ID of the interface attachment.
+--
+-- -   @attachment.attach-time@ - The time that the network interface was
+--     attached to an instance.
+--
+-- -   @attachment.delete-on-termination@ - Indicates whether the
+--     attachment is deleted when an instance is terminated.
+--
+-- -   @attachment.device-index@ - The device index to which the network
+--     interface is attached.
+--
+-- -   @attachment.instance-id@ - The ID of the instance to which the
+--     network interface is attached.
+--
+-- -   @attachment.instance-owner-id@ - The owner ID of the instance to
+--     which the network interface is attached.
+--
+-- -   @attachment.status@ - The status of the attachment (@attaching@ |
+--     @attached@ | @detaching@ | @detached@).
+--
+-- -   @availability-zone@ - The Availability Zone of the network
+--     interface.
+--
+-- -   @description@ - The description of the network interface.
+--
+-- -   @group-id@ - The ID of a security group associated with the network
+--     interface.
+--
+-- -   @group-name@ - The name of a security group associated with the
+--     network interface.
+--
+-- -   @ipv6-addresses.ipv6-address@ - An IPv6 address associated with the
+--     network interface.
+--
+-- -   @interface-type@ - The type of network interface
+--     (@api_gateway_managed@ | @aws_codestar_connections_managed@ |
+--     @branch@ | @efa@ | @gateway_load_balancer@ |
+--     @gateway_load_balancer_endpoint@ | @global_accelerator_managed@ |
+--     @interface@ | @iot_rules_managed@ | @lambda@ | @load_balancer@ |
+--     @nat_gateway@ | @network_load_balancer@ | @quicksight@ |
+--     @transit_gateway@ | @trunk@ | @vpc_endpoint@).
+--
+-- -   @mac-address@ - The MAC address of the network interface.
+--
+-- -   @network-interface-id@ - The ID of the network interface.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the network
+--     interface owner.
+--
+-- -   @private-ip-address@ - The private IPv4 address or addresses of the
+--     network interface.
+--
+-- -   @private-dns-name@ - The private DNS name of the network interface
+--     (IPv4).
+--
+-- -   @requester-id@ - The alias or Amazon Web Services account ID of the
+--     principal or service that created the network interface.
+--
+-- -   @requester-managed@ - Indicates whether the network interface is
+--     being managed by an Amazon Web Service (for example, Amazon Web
+--     Services Management Console, Auto Scaling, and so on).
+--
+-- -   @source-dest-check@ - Indicates whether the network interface
+--     performs source\/destination checking. A value of @true@ means
+--     checking is enabled, and @false@ means checking is disabled. The
+--     value must be @false@ for the network interface to perform network
+--     address translation (NAT) in your VPC.
+--
+-- -   @status@ - The status of the network interface. If the network
+--     interface is not attached to an instance, the status is @available@;
+--     if a network interface is attached to an instance the status is
+--     @in-use@.
+--
+-- -   @subnet-id@ - The ID of the subnet for the network interface.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the network interface.
+describeNetworkInterfaces_filters :: Lens.Lens' DescribeNetworkInterfaces (Prelude.Maybe [Filter])
+describeNetworkInterfaces_filters = Lens.lens (\DescribeNetworkInterfaces' {filters} -> filters) (\s@DescribeNetworkInterfaces' {} a -> s {filters = a} :: DescribeNetworkInterfaces) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results. You cannot specify this parameter and the network
+-- interface IDs parameter in the same request.
+describeNetworkInterfaces_maxResults :: Lens.Lens' DescribeNetworkInterfaces (Prelude.Maybe Prelude.Natural)
+describeNetworkInterfaces_maxResults = Lens.lens (\DescribeNetworkInterfaces' {maxResults} -> maxResults) (\s@DescribeNetworkInterfaces' {} a -> s {maxResults = a} :: DescribeNetworkInterfaces)
+
+-- | The network interface IDs.
+--
+-- Default: Describes all your network interfaces.
+describeNetworkInterfaces_networkInterfaceIds :: Lens.Lens' DescribeNetworkInterfaces (Prelude.Maybe [Prelude.Text])
+describeNetworkInterfaces_networkInterfaceIds = Lens.lens (\DescribeNetworkInterfaces' {networkInterfaceIds} -> networkInterfaceIds) (\s@DescribeNetworkInterfaces' {} a -> s {networkInterfaceIds = a} :: DescribeNetworkInterfaces) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next page of results.
+describeNetworkInterfaces_nextToken :: Lens.Lens' DescribeNetworkInterfaces (Prelude.Maybe Prelude.Text)
+describeNetworkInterfaces_nextToken = Lens.lens (\DescribeNetworkInterfaces' {nextToken} -> nextToken) (\s@DescribeNetworkInterfaces' {} a -> s {nextToken = a} :: DescribeNetworkInterfaces)
+
+instance Core.AWSPager DescribeNetworkInterfaces where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInterfacesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeNetworkInterfacesResponse_networkInterfaces
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeNetworkInterfaces_nextToken
+          Lens..~ rs
+          Lens.^? describeNetworkInterfacesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeNetworkInterfaces where
+  type
+    AWSResponse DescribeNetworkInterfaces =
+      DescribeNetworkInterfacesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeNetworkInterfacesResponse'
+            Prelude.<$> ( x
+                            Data..@? "networkInterfaceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeNetworkInterfaces where
+  hashWithSalt _salt DescribeNetworkInterfaces' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` networkInterfaceIds
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeNetworkInterfaces where
+  rnf DescribeNetworkInterfaces' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf networkInterfaceIds
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeNetworkInterfaces where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeNetworkInterfaces where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeNetworkInterfaces where
+  toQuery DescribeNetworkInterfaces' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeNetworkInterfaces" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterfaceId"
+              Prelude.<$> networkInterfaceIds
+          ),
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | Contains the output of DescribeNetworkInterfaces.
+--
+-- /See:/ 'newDescribeNetworkInterfacesResponse' smart constructor.
+data DescribeNetworkInterfacesResponse = DescribeNetworkInterfacesResponse'
+  { -- | Information about one or more network interfaces.
+    networkInterfaces :: Prelude.Maybe [NetworkInterface],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeNetworkInterfacesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInterfaces', 'describeNetworkInterfacesResponse_networkInterfaces' - Information about one or more network interfaces.
+--
+-- 'nextToken', 'describeNetworkInterfacesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeNetworkInterfacesResponse_httpStatus' - The response's http status code.
+newDescribeNetworkInterfacesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeNetworkInterfacesResponse
+newDescribeNetworkInterfacesResponse pHttpStatus_ =
+  DescribeNetworkInterfacesResponse'
+    { networkInterfaces =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more network interfaces.
+describeNetworkInterfacesResponse_networkInterfaces :: Lens.Lens' DescribeNetworkInterfacesResponse (Prelude.Maybe [NetworkInterface])
+describeNetworkInterfacesResponse_networkInterfaces = Lens.lens (\DescribeNetworkInterfacesResponse' {networkInterfaces} -> networkInterfaces) (\s@DescribeNetworkInterfacesResponse' {} a -> s {networkInterfaces = a} :: DescribeNetworkInterfacesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeNetworkInterfacesResponse_nextToken :: Lens.Lens' DescribeNetworkInterfacesResponse (Prelude.Maybe Prelude.Text)
+describeNetworkInterfacesResponse_nextToken = Lens.lens (\DescribeNetworkInterfacesResponse' {nextToken} -> nextToken) (\s@DescribeNetworkInterfacesResponse' {} a -> s {nextToken = a} :: DescribeNetworkInterfacesResponse)
+
+-- | The response's http status code.
+describeNetworkInterfacesResponse_httpStatus :: Lens.Lens' DescribeNetworkInterfacesResponse Prelude.Int
+describeNetworkInterfacesResponse_httpStatus = Lens.lens (\DescribeNetworkInterfacesResponse' {httpStatus} -> httpStatus) (\s@DescribeNetworkInterfacesResponse' {} a -> s {httpStatus = a} :: DescribeNetworkInterfacesResponse)
+
+instance
+  Prelude.NFData
+    DescribeNetworkInterfacesResponse
+  where
+  rnf DescribeNetworkInterfacesResponse' {..} =
+    Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribePlacementGroups.hs b/gen/Amazonka/EC2/DescribePlacementGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribePlacementGroups.hs
@@ -0,0 +1,299 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribePlacementGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified placement groups or all of your placement
+-- groups. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html Placement groups>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribePlacementGroups
+  ( -- * Creating a Request
+    DescribePlacementGroups (..),
+    newDescribePlacementGroups,
+
+    -- * Request Lenses
+    describePlacementGroups_dryRun,
+    describePlacementGroups_filters,
+    describePlacementGroups_groupIds,
+    describePlacementGroups_groupNames,
+
+    -- * Destructuring the Response
+    DescribePlacementGroupsResponse (..),
+    newDescribePlacementGroupsResponse,
+
+    -- * Response Lenses
+    describePlacementGroupsResponse_placementGroups,
+    describePlacementGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePlacementGroups' smart constructor.
+data DescribePlacementGroups = DescribePlacementGroups'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @group-name@ - The name of the placement group.
+    --
+    -- -   @group-arn@ - The Amazon Resource Name (ARN) of the placement group.
+    --
+    -- -   @spread-level@ - The spread level for the placement group (@host@ |
+    --     @rack@).
+    --
+    -- -   @state@ - The state of the placement group (@pending@ | @available@
+    --     | @deleting@ | @deleted@).
+    --
+    -- -   @strategy@ - The strategy of the placement group (@cluster@ |
+    --     @spread@ | @partition@).
+    --
+    -- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the placement groups.
+    groupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The names of the placement groups.
+    --
+    -- Default: Describes all your placement groups, or only those otherwise
+    -- specified.
+    groupNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePlacementGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describePlacementGroups_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describePlacementGroups_filters' - The filters.
+--
+-- -   @group-name@ - The name of the placement group.
+--
+-- -   @group-arn@ - The Amazon Resource Name (ARN) of the placement group.
+--
+-- -   @spread-level@ - The spread level for the placement group (@host@ |
+--     @rack@).
+--
+-- -   @state@ - The state of the placement group (@pending@ | @available@
+--     | @deleting@ | @deleted@).
+--
+-- -   @strategy@ - The strategy of the placement group (@cluster@ |
+--     @spread@ | @partition@).
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'groupIds', 'describePlacementGroups_groupIds' - The IDs of the placement groups.
+--
+-- 'groupNames', 'describePlacementGroups_groupNames' - The names of the placement groups.
+--
+-- Default: Describes all your placement groups, or only those otherwise
+-- specified.
+newDescribePlacementGroups ::
+  DescribePlacementGroups
+newDescribePlacementGroups =
+  DescribePlacementGroups'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      groupIds = Prelude.Nothing,
+      groupNames = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describePlacementGroups_dryRun :: Lens.Lens' DescribePlacementGroups (Prelude.Maybe Prelude.Bool)
+describePlacementGroups_dryRun = Lens.lens (\DescribePlacementGroups' {dryRun} -> dryRun) (\s@DescribePlacementGroups' {} a -> s {dryRun = a} :: DescribePlacementGroups)
+
+-- | The filters.
+--
+-- -   @group-name@ - The name of the placement group.
+--
+-- -   @group-arn@ - The Amazon Resource Name (ARN) of the placement group.
+--
+-- -   @spread-level@ - The spread level for the placement group (@host@ |
+--     @rack@).
+--
+-- -   @state@ - The state of the placement group (@pending@ | @available@
+--     | @deleting@ | @deleted@).
+--
+-- -   @strategy@ - The strategy of the placement group (@cluster@ |
+--     @spread@ | @partition@).
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describePlacementGroups_filters :: Lens.Lens' DescribePlacementGroups (Prelude.Maybe [Filter])
+describePlacementGroups_filters = Lens.lens (\DescribePlacementGroups' {filters} -> filters) (\s@DescribePlacementGroups' {} a -> s {filters = a} :: DescribePlacementGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the placement groups.
+describePlacementGroups_groupIds :: Lens.Lens' DescribePlacementGroups (Prelude.Maybe [Prelude.Text])
+describePlacementGroups_groupIds = Lens.lens (\DescribePlacementGroups' {groupIds} -> groupIds) (\s@DescribePlacementGroups' {} a -> s {groupIds = a} :: DescribePlacementGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The names of the placement groups.
+--
+-- Default: Describes all your placement groups, or only those otherwise
+-- specified.
+describePlacementGroups_groupNames :: Lens.Lens' DescribePlacementGroups (Prelude.Maybe [Prelude.Text])
+describePlacementGroups_groupNames = Lens.lens (\DescribePlacementGroups' {groupNames} -> groupNames) (\s@DescribePlacementGroups' {} a -> s {groupNames = a} :: DescribePlacementGroups) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribePlacementGroups where
+  type
+    AWSResponse DescribePlacementGroups =
+      DescribePlacementGroupsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribePlacementGroupsResponse'
+            Prelude.<$> ( x
+                            Data..@? "placementGroupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePlacementGroups where
+  hashWithSalt _salt DescribePlacementGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` groupIds
+      `Prelude.hashWithSalt` groupNames
+
+instance Prelude.NFData DescribePlacementGroups where
+  rnf DescribePlacementGroups' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf groupIds
+      `Prelude.seq` Prelude.rnf groupNames
+
+instance Data.ToHeaders DescribePlacementGroups where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribePlacementGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePlacementGroups where
+  toQuery DescribePlacementGroups' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribePlacementGroups" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "GroupId" Prelude.<$> groupIds),
+        Data.toQuery
+          ( Data.toQueryList "GroupName"
+              Prelude.<$> groupNames
+          )
+      ]
+
+-- | /See:/ 'newDescribePlacementGroupsResponse' smart constructor.
+data DescribePlacementGroupsResponse = DescribePlacementGroupsResponse'
+  { -- | Information about the placement groups.
+    placementGroups :: Prelude.Maybe [PlacementGroup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePlacementGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'placementGroups', 'describePlacementGroupsResponse_placementGroups' - Information about the placement groups.
+--
+-- 'httpStatus', 'describePlacementGroupsResponse_httpStatus' - The response's http status code.
+newDescribePlacementGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePlacementGroupsResponse
+newDescribePlacementGroupsResponse pHttpStatus_ =
+  DescribePlacementGroupsResponse'
+    { placementGroups =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the placement groups.
+describePlacementGroupsResponse_placementGroups :: Lens.Lens' DescribePlacementGroupsResponse (Prelude.Maybe [PlacementGroup])
+describePlacementGroupsResponse_placementGroups = Lens.lens (\DescribePlacementGroupsResponse' {placementGroups} -> placementGroups) (\s@DescribePlacementGroupsResponse' {} a -> s {placementGroups = a} :: DescribePlacementGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePlacementGroupsResponse_httpStatus :: Lens.Lens' DescribePlacementGroupsResponse Prelude.Int
+describePlacementGroupsResponse_httpStatus = Lens.lens (\DescribePlacementGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribePlacementGroupsResponse' {} a -> s {httpStatus = a} :: DescribePlacementGroupsResponse)
+
+instance
+  Prelude.NFData
+    DescribePlacementGroupsResponse
+  where
+  rnf DescribePlacementGroupsResponse' {..} =
+    Prelude.rnf placementGroups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribePrefixLists.hs b/gen/Amazonka/EC2/DescribePrefixLists.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribePrefixLists.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribePrefixLists
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes available Amazon Web Services services in a prefix list
+-- format, which includes the prefix list name and prefix list ID of the
+-- service and the IP address range for the service.
+--
+-- We recommend that you use DescribeManagedPrefixLists instead.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribePrefixLists
+  ( -- * Creating a Request
+    DescribePrefixLists (..),
+    newDescribePrefixLists,
+
+    -- * Request Lenses
+    describePrefixLists_dryRun,
+    describePrefixLists_filters,
+    describePrefixLists_maxResults,
+    describePrefixLists_nextToken,
+    describePrefixLists_prefixListIds,
+
+    -- * Destructuring the Response
+    DescribePrefixListsResponse (..),
+    newDescribePrefixListsResponse,
+
+    -- * Response Lenses
+    describePrefixListsResponse_nextToken,
+    describePrefixListsResponse_prefixLists,
+    describePrefixListsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePrefixLists' smart constructor.
+data DescribePrefixLists = DescribePrefixLists'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @prefix-list-id@: The ID of a prefix list.
+    --
+    -- -   @prefix-list-name@: The name of a prefix list.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more prefix list IDs.
+    prefixListIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePrefixLists' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describePrefixLists_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describePrefixLists_filters' - One or more filters.
+--
+-- -   @prefix-list-id@: The ID of a prefix list.
+--
+-- -   @prefix-list-name@: The name of a prefix list.
+--
+-- 'maxResults', 'describePrefixLists_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describePrefixLists_nextToken' - The token for the next page of results.
+--
+-- 'prefixListIds', 'describePrefixLists_prefixListIds' - One or more prefix list IDs.
+newDescribePrefixLists ::
+  DescribePrefixLists
+newDescribePrefixLists =
+  DescribePrefixLists'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      prefixListIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describePrefixLists_dryRun :: Lens.Lens' DescribePrefixLists (Prelude.Maybe Prelude.Bool)
+describePrefixLists_dryRun = Lens.lens (\DescribePrefixLists' {dryRun} -> dryRun) (\s@DescribePrefixLists' {} a -> s {dryRun = a} :: DescribePrefixLists)
+
+-- | One or more filters.
+--
+-- -   @prefix-list-id@: The ID of a prefix list.
+--
+-- -   @prefix-list-name@: The name of a prefix list.
+describePrefixLists_filters :: Lens.Lens' DescribePrefixLists (Prelude.Maybe [Filter])
+describePrefixLists_filters = Lens.lens (\DescribePrefixLists' {filters} -> filters) (\s@DescribePrefixLists' {} a -> s {filters = a} :: DescribePrefixLists) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describePrefixLists_maxResults :: Lens.Lens' DescribePrefixLists (Prelude.Maybe Prelude.Int)
+describePrefixLists_maxResults = Lens.lens (\DescribePrefixLists' {maxResults} -> maxResults) (\s@DescribePrefixLists' {} a -> s {maxResults = a} :: DescribePrefixLists)
+
+-- | The token for the next page of results.
+describePrefixLists_nextToken :: Lens.Lens' DescribePrefixLists (Prelude.Maybe Prelude.Text)
+describePrefixLists_nextToken = Lens.lens (\DescribePrefixLists' {nextToken} -> nextToken) (\s@DescribePrefixLists' {} a -> s {nextToken = a} :: DescribePrefixLists)
+
+-- | One or more prefix list IDs.
+describePrefixLists_prefixListIds :: Lens.Lens' DescribePrefixLists (Prelude.Maybe [Prelude.Text])
+describePrefixLists_prefixListIds = Lens.lens (\DescribePrefixLists' {prefixListIds} -> prefixListIds) (\s@DescribePrefixLists' {} a -> s {prefixListIds = a} :: DescribePrefixLists) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribePrefixLists where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describePrefixListsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describePrefixListsResponse_prefixLists
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describePrefixLists_nextToken
+          Lens..~ rs
+          Lens.^? describePrefixListsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribePrefixLists where
+  type
+    AWSResponse DescribePrefixLists =
+      DescribePrefixListsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribePrefixListsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "prefixListSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePrefixLists where
+  hashWithSalt _salt DescribePrefixLists' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` prefixListIds
+
+instance Prelude.NFData DescribePrefixLists where
+  rnf DescribePrefixLists' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefixListIds
+
+instance Data.ToHeaders DescribePrefixLists where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribePrefixLists where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePrefixLists where
+  toQuery DescribePrefixLists' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribePrefixLists" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "PrefixListId"
+              Prelude.<$> prefixListIds
+          )
+      ]
+
+-- | /See:/ 'newDescribePrefixListsResponse' smart constructor.
+data DescribePrefixListsResponse = DescribePrefixListsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | All available prefix lists.
+    prefixLists :: Prelude.Maybe [PrefixList],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePrefixListsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describePrefixListsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'prefixLists', 'describePrefixListsResponse_prefixLists' - All available prefix lists.
+--
+-- 'httpStatus', 'describePrefixListsResponse_httpStatus' - The response's http status code.
+newDescribePrefixListsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePrefixListsResponse
+newDescribePrefixListsResponse pHttpStatus_ =
+  DescribePrefixListsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      prefixLists = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describePrefixListsResponse_nextToken :: Lens.Lens' DescribePrefixListsResponse (Prelude.Maybe Prelude.Text)
+describePrefixListsResponse_nextToken = Lens.lens (\DescribePrefixListsResponse' {nextToken} -> nextToken) (\s@DescribePrefixListsResponse' {} a -> s {nextToken = a} :: DescribePrefixListsResponse)
+
+-- | All available prefix lists.
+describePrefixListsResponse_prefixLists :: Lens.Lens' DescribePrefixListsResponse (Prelude.Maybe [PrefixList])
+describePrefixListsResponse_prefixLists = Lens.lens (\DescribePrefixListsResponse' {prefixLists} -> prefixLists) (\s@DescribePrefixListsResponse' {} a -> s {prefixLists = a} :: DescribePrefixListsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePrefixListsResponse_httpStatus :: Lens.Lens' DescribePrefixListsResponse Prelude.Int
+describePrefixListsResponse_httpStatus = Lens.lens (\DescribePrefixListsResponse' {httpStatus} -> httpStatus) (\s@DescribePrefixListsResponse' {} a -> s {httpStatus = a} :: DescribePrefixListsResponse)
+
+instance Prelude.NFData DescribePrefixListsResponse where
+  rnf DescribePrefixListsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefixLists
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribePrincipalIdFormat.hs b/gen/Amazonka/EC2/DescribePrincipalIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribePrincipalIdFormat.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribePrincipalIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the ID format settings for the root user and all IAM roles and
+-- IAM users that have explicitly specified a longer ID (17-character ID)
+-- preference.
+--
+-- By default, all IAM roles and IAM users default to the same ID settings
+-- as the root user, unless they explicitly override the settings. This
+-- request is useful for identifying those IAM users and IAM roles that
+-- have overridden the default ID settings.
+--
+-- The following resource types support longer IDs: @bundle@ |
+-- @conversion-task@ | @customer-gateway@ | @dhcp-options@ |
+-- @elastic-ip-allocation@ | @elastic-ip-association@ | @export-task@ |
+-- @flow-log@ | @image@ | @import-task@ | @instance@ | @internet-gateway@ |
+-- @network-acl@ | @network-acl-association@ | @network-interface@ |
+-- @network-interface-attachment@ | @prefix-list@ | @reservation@ |
+-- @route-table@ | @route-table-association@ | @security-group@ |
+-- @snapshot@ | @subnet@ | @subnet-cidr-block-association@ | @volume@ |
+-- @vpc@ | @vpc-cidr-block-association@ | @vpc-endpoint@ |
+-- @vpc-peering-connection@ | @vpn-connection@ | @vpn-gateway@.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribePrincipalIdFormat
+  ( -- * Creating a Request
+    DescribePrincipalIdFormat (..),
+    newDescribePrincipalIdFormat,
+
+    -- * Request Lenses
+    describePrincipalIdFormat_dryRun,
+    describePrincipalIdFormat_maxResults,
+    describePrincipalIdFormat_nextToken,
+    describePrincipalIdFormat_resources,
+
+    -- * Destructuring the Response
+    DescribePrincipalIdFormatResponse (..),
+    newDescribePrincipalIdFormatResponse,
+
+    -- * Response Lenses
+    describePrincipalIdFormatResponse_nextToken,
+    describePrincipalIdFormatResponse_principals,
+    describePrincipalIdFormatResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePrincipalIdFormat' smart constructor.
+data DescribePrincipalIdFormat = DescribePrincipalIdFormat'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned NextToken
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+    -- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+    -- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+    -- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+    -- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+    -- @reservation@ | @route-table@ | @route-table-association@ |
+    -- @security-group@ | @snapshot@ | @subnet@ |
+    -- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+    -- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+    -- | @vpn-connection@ | @vpn-gateway@
+    resources :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePrincipalIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describePrincipalIdFormat_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'describePrincipalIdFormat_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned NextToken
+-- value.
+--
+-- 'nextToken', 'describePrincipalIdFormat_nextToken' - The token to request the next page of results.
+--
+-- 'resources', 'describePrincipalIdFormat_resources' - The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @reservation@ | @route-table@ | @route-table-association@ |
+-- @security-group@ | @snapshot@ | @subnet@ |
+-- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+-- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+-- | @vpn-connection@ | @vpn-gateway@
+newDescribePrincipalIdFormat ::
+  DescribePrincipalIdFormat
+newDescribePrincipalIdFormat =
+  DescribePrincipalIdFormat'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resources = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describePrincipalIdFormat_dryRun :: Lens.Lens' DescribePrincipalIdFormat (Prelude.Maybe Prelude.Bool)
+describePrincipalIdFormat_dryRun = Lens.lens (\DescribePrincipalIdFormat' {dryRun} -> dryRun) (\s@DescribePrincipalIdFormat' {} a -> s {dryRun = a} :: DescribePrincipalIdFormat)
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned NextToken
+-- value.
+describePrincipalIdFormat_maxResults :: Lens.Lens' DescribePrincipalIdFormat (Prelude.Maybe Prelude.Natural)
+describePrincipalIdFormat_maxResults = Lens.lens (\DescribePrincipalIdFormat' {maxResults} -> maxResults) (\s@DescribePrincipalIdFormat' {} a -> s {maxResults = a} :: DescribePrincipalIdFormat)
+
+-- | The token to request the next page of results.
+describePrincipalIdFormat_nextToken :: Lens.Lens' DescribePrincipalIdFormat (Prelude.Maybe Prelude.Text)
+describePrincipalIdFormat_nextToken = Lens.lens (\DescribePrincipalIdFormat' {nextToken} -> nextToken) (\s@DescribePrincipalIdFormat' {} a -> s {nextToken = a} :: DescribePrincipalIdFormat)
+
+-- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ | @instance@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @reservation@ | @route-table@ | @route-table-association@ |
+-- @security-group@ | @snapshot@ | @subnet@ |
+-- @subnet-cidr-block-association@ | @volume@ | @vpc@ |
+-- @vpc-cidr-block-association@ | @vpc-endpoint@ | @vpc-peering-connection@
+-- | @vpn-connection@ | @vpn-gateway@
+describePrincipalIdFormat_resources :: Lens.Lens' DescribePrincipalIdFormat (Prelude.Maybe [Prelude.Text])
+describePrincipalIdFormat_resources = Lens.lens (\DescribePrincipalIdFormat' {resources} -> resources) (\s@DescribePrincipalIdFormat' {} a -> s {resources = a} :: DescribePrincipalIdFormat) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribePrincipalIdFormat where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describePrincipalIdFormatResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describePrincipalIdFormatResponse_principals
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describePrincipalIdFormat_nextToken
+          Lens..~ rs
+          Lens.^? describePrincipalIdFormatResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribePrincipalIdFormat where
+  type
+    AWSResponse DescribePrincipalIdFormat =
+      DescribePrincipalIdFormatResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribePrincipalIdFormatResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "principalSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePrincipalIdFormat where
+  hashWithSalt _salt DescribePrincipalIdFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData DescribePrincipalIdFormat where
+  rnf DescribePrincipalIdFormat' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resources
+
+instance Data.ToHeaders DescribePrincipalIdFormat where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribePrincipalIdFormat where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePrincipalIdFormat where
+  toQuery DescribePrincipalIdFormat' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribePrincipalIdFormat" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "Resource" Prelude.<$> resources)
+      ]
+
+-- | /See:/ 'newDescribePrincipalIdFormatResponse' smart constructor.
+data DescribePrincipalIdFormatResponse = DescribePrincipalIdFormatResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the ID format settings for the ARN.
+    principals :: Prelude.Maybe [PrincipalIdFormat],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePrincipalIdFormatResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describePrincipalIdFormatResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+--
+-- 'principals', 'describePrincipalIdFormatResponse_principals' - Information about the ID format settings for the ARN.
+--
+-- 'httpStatus', 'describePrincipalIdFormatResponse_httpStatus' - The response's http status code.
+newDescribePrincipalIdFormatResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePrincipalIdFormatResponse
+newDescribePrincipalIdFormatResponse pHttpStatus_ =
+  DescribePrincipalIdFormatResponse'
+    { nextToken =
+        Prelude.Nothing,
+      principals = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- null when there are no more results to return.
+describePrincipalIdFormatResponse_nextToken :: Lens.Lens' DescribePrincipalIdFormatResponse (Prelude.Maybe Prelude.Text)
+describePrincipalIdFormatResponse_nextToken = Lens.lens (\DescribePrincipalIdFormatResponse' {nextToken} -> nextToken) (\s@DescribePrincipalIdFormatResponse' {} a -> s {nextToken = a} :: DescribePrincipalIdFormatResponse)
+
+-- | Information about the ID format settings for the ARN.
+describePrincipalIdFormatResponse_principals :: Lens.Lens' DescribePrincipalIdFormatResponse (Prelude.Maybe [PrincipalIdFormat])
+describePrincipalIdFormatResponse_principals = Lens.lens (\DescribePrincipalIdFormatResponse' {principals} -> principals) (\s@DescribePrincipalIdFormatResponse' {} a -> s {principals = a} :: DescribePrincipalIdFormatResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePrincipalIdFormatResponse_httpStatus :: Lens.Lens' DescribePrincipalIdFormatResponse Prelude.Int
+describePrincipalIdFormatResponse_httpStatus = Lens.lens (\DescribePrincipalIdFormatResponse' {httpStatus} -> httpStatus) (\s@DescribePrincipalIdFormatResponse' {} a -> s {httpStatus = a} :: DescribePrincipalIdFormatResponse)
+
+instance
+  Prelude.NFData
+    DescribePrincipalIdFormatResponse
+  where
+  rnf DescribePrincipalIdFormatResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf principals
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribePublicIpv4Pools.hs b/gen/Amazonka/EC2/DescribePublicIpv4Pools.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribePublicIpv4Pools.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribePublicIpv4Pools
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified IPv4 address pools.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribePublicIpv4Pools
+  ( -- * Creating a Request
+    DescribePublicIpv4Pools (..),
+    newDescribePublicIpv4Pools,
+
+    -- * Request Lenses
+    describePublicIpv4Pools_filters,
+    describePublicIpv4Pools_maxResults,
+    describePublicIpv4Pools_nextToken,
+    describePublicIpv4Pools_poolIds,
+
+    -- * Destructuring the Response
+    DescribePublicIpv4PoolsResponse (..),
+    newDescribePublicIpv4PoolsResponse,
+
+    -- * Response Lenses
+    describePublicIpv4PoolsResponse_nextToken,
+    describePublicIpv4PoolsResponse_publicIpv4Pools,
+    describePublicIpv4PoolsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribePublicIpv4Pools' smart constructor.
+data DescribePublicIpv4Pools = DescribePublicIpv4Pools'
+  { -- | One or more filters.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the address pools.
+    poolIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePublicIpv4Pools' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describePublicIpv4Pools_filters' - One or more filters.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'describePublicIpv4Pools_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describePublicIpv4Pools_nextToken' - The token for the next page of results.
+--
+-- 'poolIds', 'describePublicIpv4Pools_poolIds' - The IDs of the address pools.
+newDescribePublicIpv4Pools ::
+  DescribePublicIpv4Pools
+newDescribePublicIpv4Pools =
+  DescribePublicIpv4Pools'
+    { filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      poolIds = Prelude.Nothing
+    }
+
+-- | One or more filters.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describePublicIpv4Pools_filters :: Lens.Lens' DescribePublicIpv4Pools (Prelude.Maybe [Filter])
+describePublicIpv4Pools_filters = Lens.lens (\DescribePublicIpv4Pools' {filters} -> filters) (\s@DescribePublicIpv4Pools' {} a -> s {filters = a} :: DescribePublicIpv4Pools) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describePublicIpv4Pools_maxResults :: Lens.Lens' DescribePublicIpv4Pools (Prelude.Maybe Prelude.Natural)
+describePublicIpv4Pools_maxResults = Lens.lens (\DescribePublicIpv4Pools' {maxResults} -> maxResults) (\s@DescribePublicIpv4Pools' {} a -> s {maxResults = a} :: DescribePublicIpv4Pools)
+
+-- | The token for the next page of results.
+describePublicIpv4Pools_nextToken :: Lens.Lens' DescribePublicIpv4Pools (Prelude.Maybe Prelude.Text)
+describePublicIpv4Pools_nextToken = Lens.lens (\DescribePublicIpv4Pools' {nextToken} -> nextToken) (\s@DescribePublicIpv4Pools' {} a -> s {nextToken = a} :: DescribePublicIpv4Pools)
+
+-- | The IDs of the address pools.
+describePublicIpv4Pools_poolIds :: Lens.Lens' DescribePublicIpv4Pools (Prelude.Maybe [Prelude.Text])
+describePublicIpv4Pools_poolIds = Lens.lens (\DescribePublicIpv4Pools' {poolIds} -> poolIds) (\s@DescribePublicIpv4Pools' {} a -> s {poolIds = a} :: DescribePublicIpv4Pools) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribePublicIpv4Pools where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describePublicIpv4PoolsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describePublicIpv4PoolsResponse_publicIpv4Pools
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describePublicIpv4Pools_nextToken
+          Lens..~ rs
+          Lens.^? describePublicIpv4PoolsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribePublicIpv4Pools where
+  type
+    AWSResponse DescribePublicIpv4Pools =
+      DescribePublicIpv4PoolsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribePublicIpv4PoolsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "publicIpv4PoolSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribePublicIpv4Pools where
+  hashWithSalt _salt DescribePublicIpv4Pools' {..} =
+    _salt
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` poolIds
+
+instance Prelude.NFData DescribePublicIpv4Pools where
+  rnf DescribePublicIpv4Pools' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf poolIds
+
+instance Data.ToHeaders DescribePublicIpv4Pools where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribePublicIpv4Pools where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribePublicIpv4Pools where
+  toQuery DescribePublicIpv4Pools' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribePublicIpv4Pools" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "PoolId" Prelude.<$> poolIds)
+      ]
+
+-- | /See:/ 'newDescribePublicIpv4PoolsResponse' smart constructor.
+data DescribePublicIpv4PoolsResponse = DescribePublicIpv4PoolsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the address pools.
+    publicIpv4Pools :: Prelude.Maybe [PublicIpv4Pool],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribePublicIpv4PoolsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describePublicIpv4PoolsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'publicIpv4Pools', 'describePublicIpv4PoolsResponse_publicIpv4Pools' - Information about the address pools.
+--
+-- 'httpStatus', 'describePublicIpv4PoolsResponse_httpStatus' - The response's http status code.
+newDescribePublicIpv4PoolsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribePublicIpv4PoolsResponse
+newDescribePublicIpv4PoolsResponse pHttpStatus_ =
+  DescribePublicIpv4PoolsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      publicIpv4Pools = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describePublicIpv4PoolsResponse_nextToken :: Lens.Lens' DescribePublicIpv4PoolsResponse (Prelude.Maybe Prelude.Text)
+describePublicIpv4PoolsResponse_nextToken = Lens.lens (\DescribePublicIpv4PoolsResponse' {nextToken} -> nextToken) (\s@DescribePublicIpv4PoolsResponse' {} a -> s {nextToken = a} :: DescribePublicIpv4PoolsResponse)
+
+-- | Information about the address pools.
+describePublicIpv4PoolsResponse_publicIpv4Pools :: Lens.Lens' DescribePublicIpv4PoolsResponse (Prelude.Maybe [PublicIpv4Pool])
+describePublicIpv4PoolsResponse_publicIpv4Pools = Lens.lens (\DescribePublicIpv4PoolsResponse' {publicIpv4Pools} -> publicIpv4Pools) (\s@DescribePublicIpv4PoolsResponse' {} a -> s {publicIpv4Pools = a} :: DescribePublicIpv4PoolsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describePublicIpv4PoolsResponse_httpStatus :: Lens.Lens' DescribePublicIpv4PoolsResponse Prelude.Int
+describePublicIpv4PoolsResponse_httpStatus = Lens.lens (\DescribePublicIpv4PoolsResponse' {httpStatus} -> httpStatus) (\s@DescribePublicIpv4PoolsResponse' {} a -> s {httpStatus = a} :: DescribePublicIpv4PoolsResponse)
+
+instance
+  Prelude.NFData
+    DescribePublicIpv4PoolsResponse
+  where
+  rnf DescribePublicIpv4PoolsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf publicIpv4Pools
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeRegions.hs b/gen/Amazonka/EC2/DescribeRegions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeRegions.hs
@@ -0,0 +1,251 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeRegions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the Regions that are enabled for your account, or all Regions.
+--
+-- For a list of the Regions supported by Amazon EC2, see
+-- <https://docs.aws.amazon.com/general/latest/gr/ec2-service.html Amazon Elastic Compute Cloud endpoints and quotas>.
+--
+-- For information about enabling and disabling Regions for your account,
+-- see
+-- <https://docs.aws.amazon.com/general/latest/gr/rande-manage.html Managing Amazon Web Services Regions>
+-- in the /Amazon Web Services General Reference/.
+module Amazonka.EC2.DescribeRegions
+  ( -- * Creating a Request
+    DescribeRegions (..),
+    newDescribeRegions,
+
+    -- * Request Lenses
+    describeRegions_allRegions,
+    describeRegions_dryRun,
+    describeRegions_filters,
+    describeRegions_regionNames,
+
+    -- * Destructuring the Response
+    DescribeRegionsResponse (..),
+    newDescribeRegionsResponse,
+
+    -- * Response Lenses
+    describeRegionsResponse_regions,
+    describeRegionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRegions' smart constructor.
+data DescribeRegions = DescribeRegions'
+  { -- | Indicates whether to display all Regions, including Regions that are
+    -- disabled for your account.
+    allRegions :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @endpoint@ - The endpoint of the Region (for example,
+    --     @ec2.us-east-1.amazonaws.com@).
+    --
+    -- -   @opt-in-status@ - The opt-in status of the Region
+    --     (@opt-in-not-required@ | @opted-in@ | @not-opted-in@).
+    --
+    -- -   @region-name@ - The name of the Region (for example, @us-east-1@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The names of the Regions. You can specify any Regions, whether they are
+    -- enabled and disabled for your account.
+    regionNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRegions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allRegions', 'describeRegions_allRegions' - Indicates whether to display all Regions, including Regions that are
+-- disabled for your account.
+--
+-- 'dryRun', 'describeRegions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeRegions_filters' - The filters.
+--
+-- -   @endpoint@ - The endpoint of the Region (for example,
+--     @ec2.us-east-1.amazonaws.com@).
+--
+-- -   @opt-in-status@ - The opt-in status of the Region
+--     (@opt-in-not-required@ | @opted-in@ | @not-opted-in@).
+--
+-- -   @region-name@ - The name of the Region (for example, @us-east-1@).
+--
+-- 'regionNames', 'describeRegions_regionNames' - The names of the Regions. You can specify any Regions, whether they are
+-- enabled and disabled for your account.
+newDescribeRegions ::
+  DescribeRegions
+newDescribeRegions =
+  DescribeRegions'
+    { allRegions = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      regionNames = Prelude.Nothing
+    }
+
+-- | Indicates whether to display all Regions, including Regions that are
+-- disabled for your account.
+describeRegions_allRegions :: Lens.Lens' DescribeRegions (Prelude.Maybe Prelude.Bool)
+describeRegions_allRegions = Lens.lens (\DescribeRegions' {allRegions} -> allRegions) (\s@DescribeRegions' {} a -> s {allRegions = a} :: DescribeRegions)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeRegions_dryRun :: Lens.Lens' DescribeRegions (Prelude.Maybe Prelude.Bool)
+describeRegions_dryRun = Lens.lens (\DescribeRegions' {dryRun} -> dryRun) (\s@DescribeRegions' {} a -> s {dryRun = a} :: DescribeRegions)
+
+-- | The filters.
+--
+-- -   @endpoint@ - The endpoint of the Region (for example,
+--     @ec2.us-east-1.amazonaws.com@).
+--
+-- -   @opt-in-status@ - The opt-in status of the Region
+--     (@opt-in-not-required@ | @opted-in@ | @not-opted-in@).
+--
+-- -   @region-name@ - The name of the Region (for example, @us-east-1@).
+describeRegions_filters :: Lens.Lens' DescribeRegions (Prelude.Maybe [Filter])
+describeRegions_filters = Lens.lens (\DescribeRegions' {filters} -> filters) (\s@DescribeRegions' {} a -> s {filters = a} :: DescribeRegions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The names of the Regions. You can specify any Regions, whether they are
+-- enabled and disabled for your account.
+describeRegions_regionNames :: Lens.Lens' DescribeRegions (Prelude.Maybe [Prelude.Text])
+describeRegions_regionNames = Lens.lens (\DescribeRegions' {regionNames} -> regionNames) (\s@DescribeRegions' {} a -> s {regionNames = a} :: DescribeRegions) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeRegions where
+  type
+    AWSResponse DescribeRegions =
+      DescribeRegionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeRegionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "regionInfo"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRegions where
+  hashWithSalt _salt DescribeRegions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allRegions
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` regionNames
+
+instance Prelude.NFData DescribeRegions where
+  rnf DescribeRegions' {..} =
+    Prelude.rnf allRegions
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf regionNames
+
+instance Data.ToHeaders DescribeRegions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeRegions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeRegions where
+  toQuery DescribeRegions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeRegions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllRegions" Data.=: allRegions,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "RegionName"
+              Prelude.<$> regionNames
+          )
+      ]
+
+-- | /See:/ 'newDescribeRegionsResponse' smart constructor.
+data DescribeRegionsResponse = DescribeRegionsResponse'
+  { -- | Information about the Regions.
+    regions :: Prelude.Maybe [RegionInfo],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRegionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'regions', 'describeRegionsResponse_regions' - Information about the Regions.
+--
+-- 'httpStatus', 'describeRegionsResponse_httpStatus' - The response's http status code.
+newDescribeRegionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRegionsResponse
+newDescribeRegionsResponse pHttpStatus_ =
+  DescribeRegionsResponse'
+    { regions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Regions.
+describeRegionsResponse_regions :: Lens.Lens' DescribeRegionsResponse (Prelude.Maybe [RegionInfo])
+describeRegionsResponse_regions = Lens.lens (\DescribeRegionsResponse' {regions} -> regions) (\s@DescribeRegionsResponse' {} a -> s {regions = a} :: DescribeRegionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeRegionsResponse_httpStatus :: Lens.Lens' DescribeRegionsResponse Prelude.Int
+describeRegionsResponse_httpStatus = Lens.lens (\DescribeRegionsResponse' {httpStatus} -> httpStatus) (\s@DescribeRegionsResponse' {} a -> s {httpStatus = a} :: DescribeRegionsResponse)
+
+instance Prelude.NFData DescribeRegionsResponse where
+  rnf DescribeRegionsResponse' {..} =
+    Prelude.rnf regions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeReplaceRootVolumeTasks.hs b/gen/Amazonka/EC2/DescribeReplaceRootVolumeTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeReplaceRootVolumeTasks.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeReplaceRootVolumeTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes a root volume replacement task. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/replace-root.html Replace a root volume>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeReplaceRootVolumeTasks
+  ( -- * Creating a Request
+    DescribeReplaceRootVolumeTasks (..),
+    newDescribeReplaceRootVolumeTasks,
+
+    -- * Request Lenses
+    describeReplaceRootVolumeTasks_dryRun,
+    describeReplaceRootVolumeTasks_filters,
+    describeReplaceRootVolumeTasks_maxResults,
+    describeReplaceRootVolumeTasks_nextToken,
+    describeReplaceRootVolumeTasks_replaceRootVolumeTaskIds,
+
+    -- * Destructuring the Response
+    DescribeReplaceRootVolumeTasksResponse (..),
+    newDescribeReplaceRootVolumeTasksResponse,
+
+    -- * Response Lenses
+    describeReplaceRootVolumeTasksResponse_nextToken,
+    describeReplaceRootVolumeTasksResponse_replaceRootVolumeTasks,
+    describeReplaceRootVolumeTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeReplaceRootVolumeTasks' smart constructor.
+data DescribeReplaceRootVolumeTasks = DescribeReplaceRootVolumeTasks'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Filter to use:
+    --
+    -- -   @instance-id@ - The ID of the instance for which the root volume
+    --     replacement task was created.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the root volume replacement task to view.
+    replaceRootVolumeTaskIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReplaceRootVolumeTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeReplaceRootVolumeTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeReplaceRootVolumeTasks_filters' - Filter to use:
+--
+-- -   @instance-id@ - The ID of the instance for which the root volume
+--     replacement task was created.
+--
+-- 'maxResults', 'describeReplaceRootVolumeTasks_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeReplaceRootVolumeTasks_nextToken' - The token for the next page of results.
+--
+-- 'replaceRootVolumeTaskIds', 'describeReplaceRootVolumeTasks_replaceRootVolumeTaskIds' - The ID of the root volume replacement task to view.
+newDescribeReplaceRootVolumeTasks ::
+  DescribeReplaceRootVolumeTasks
+newDescribeReplaceRootVolumeTasks =
+  DescribeReplaceRootVolumeTasks'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      replaceRootVolumeTaskIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeReplaceRootVolumeTasks_dryRun :: Lens.Lens' DescribeReplaceRootVolumeTasks (Prelude.Maybe Prelude.Bool)
+describeReplaceRootVolumeTasks_dryRun = Lens.lens (\DescribeReplaceRootVolumeTasks' {dryRun} -> dryRun) (\s@DescribeReplaceRootVolumeTasks' {} a -> s {dryRun = a} :: DescribeReplaceRootVolumeTasks)
+
+-- | Filter to use:
+--
+-- -   @instance-id@ - The ID of the instance for which the root volume
+--     replacement task was created.
+describeReplaceRootVolumeTasks_filters :: Lens.Lens' DescribeReplaceRootVolumeTasks (Prelude.Maybe [Filter])
+describeReplaceRootVolumeTasks_filters = Lens.lens (\DescribeReplaceRootVolumeTasks' {filters} -> filters) (\s@DescribeReplaceRootVolumeTasks' {} a -> s {filters = a} :: DescribeReplaceRootVolumeTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeReplaceRootVolumeTasks_maxResults :: Lens.Lens' DescribeReplaceRootVolumeTasks (Prelude.Maybe Prelude.Natural)
+describeReplaceRootVolumeTasks_maxResults = Lens.lens (\DescribeReplaceRootVolumeTasks' {maxResults} -> maxResults) (\s@DescribeReplaceRootVolumeTasks' {} a -> s {maxResults = a} :: DescribeReplaceRootVolumeTasks)
+
+-- | The token for the next page of results.
+describeReplaceRootVolumeTasks_nextToken :: Lens.Lens' DescribeReplaceRootVolumeTasks (Prelude.Maybe Prelude.Text)
+describeReplaceRootVolumeTasks_nextToken = Lens.lens (\DescribeReplaceRootVolumeTasks' {nextToken} -> nextToken) (\s@DescribeReplaceRootVolumeTasks' {} a -> s {nextToken = a} :: DescribeReplaceRootVolumeTasks)
+
+-- | The ID of the root volume replacement task to view.
+describeReplaceRootVolumeTasks_replaceRootVolumeTaskIds :: Lens.Lens' DescribeReplaceRootVolumeTasks (Prelude.Maybe [Prelude.Text])
+describeReplaceRootVolumeTasks_replaceRootVolumeTaskIds = Lens.lens (\DescribeReplaceRootVolumeTasks' {replaceRootVolumeTaskIds} -> replaceRootVolumeTaskIds) (\s@DescribeReplaceRootVolumeTasks' {} a -> s {replaceRootVolumeTaskIds = a} :: DescribeReplaceRootVolumeTasks) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeReplaceRootVolumeTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeReplaceRootVolumeTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeReplaceRootVolumeTasksResponse_replaceRootVolumeTasks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeReplaceRootVolumeTasks_nextToken
+          Lens..~ rs
+          Lens.^? describeReplaceRootVolumeTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeReplaceRootVolumeTasks
+  where
+  type
+    AWSResponse DescribeReplaceRootVolumeTasks =
+      DescribeReplaceRootVolumeTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeReplaceRootVolumeTasksResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "replaceRootVolumeTaskSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeReplaceRootVolumeTasks
+  where
+  hashWithSalt
+    _salt
+    DescribeReplaceRootVolumeTasks' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` replaceRootVolumeTaskIds
+
+instance
+  Prelude.NFData
+    DescribeReplaceRootVolumeTasks
+  where
+  rnf DescribeReplaceRootVolumeTasks' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replaceRootVolumeTaskIds
+
+instance
+  Data.ToHeaders
+    DescribeReplaceRootVolumeTasks
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeReplaceRootVolumeTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeReplaceRootVolumeTasks where
+  toQuery DescribeReplaceRootVolumeTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeReplaceRootVolumeTasks" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "ReplaceRootVolumeTaskId"
+              Prelude.<$> replaceRootVolumeTaskIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeReplaceRootVolumeTasksResponse' smart constructor.
+data DescribeReplaceRootVolumeTasksResponse = DescribeReplaceRootVolumeTasksResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the root volume replacement task.
+    replaceRootVolumeTasks :: Prelude.Maybe [ReplaceRootVolumeTask],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReplaceRootVolumeTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeReplaceRootVolumeTasksResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'replaceRootVolumeTasks', 'describeReplaceRootVolumeTasksResponse_replaceRootVolumeTasks' - Information about the root volume replacement task.
+--
+-- 'httpStatus', 'describeReplaceRootVolumeTasksResponse_httpStatus' - The response's http status code.
+newDescribeReplaceRootVolumeTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReplaceRootVolumeTasksResponse
+newDescribeReplaceRootVolumeTasksResponse
+  pHttpStatus_ =
+    DescribeReplaceRootVolumeTasksResponse'
+      { nextToken =
+          Prelude.Nothing,
+        replaceRootVolumeTasks =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeReplaceRootVolumeTasksResponse_nextToken :: Lens.Lens' DescribeReplaceRootVolumeTasksResponse (Prelude.Maybe Prelude.Text)
+describeReplaceRootVolumeTasksResponse_nextToken = Lens.lens (\DescribeReplaceRootVolumeTasksResponse' {nextToken} -> nextToken) (\s@DescribeReplaceRootVolumeTasksResponse' {} a -> s {nextToken = a} :: DescribeReplaceRootVolumeTasksResponse)
+
+-- | Information about the root volume replacement task.
+describeReplaceRootVolumeTasksResponse_replaceRootVolumeTasks :: Lens.Lens' DescribeReplaceRootVolumeTasksResponse (Prelude.Maybe [ReplaceRootVolumeTask])
+describeReplaceRootVolumeTasksResponse_replaceRootVolumeTasks = Lens.lens (\DescribeReplaceRootVolumeTasksResponse' {replaceRootVolumeTasks} -> replaceRootVolumeTasks) (\s@DescribeReplaceRootVolumeTasksResponse' {} a -> s {replaceRootVolumeTasks = a} :: DescribeReplaceRootVolumeTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeReplaceRootVolumeTasksResponse_httpStatus :: Lens.Lens' DescribeReplaceRootVolumeTasksResponse Prelude.Int
+describeReplaceRootVolumeTasksResponse_httpStatus = Lens.lens (\DescribeReplaceRootVolumeTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeReplaceRootVolumeTasksResponse' {} a -> s {httpStatus = a} :: DescribeReplaceRootVolumeTasksResponse)
+
+instance
+  Prelude.NFData
+    DescribeReplaceRootVolumeTasksResponse
+  where
+  rnf DescribeReplaceRootVolumeTasksResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replaceRootVolumeTasks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeReservedInstances.hs b/gen/Amazonka/EC2/DescribeReservedInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeReservedInstances.hs
@@ -0,0 +1,416 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeReservedInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of the Reserved Instances that you purchased.
+--
+-- For more information about Reserved Instances, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribeReservedInstances
+  ( -- * Creating a Request
+    DescribeReservedInstances (..),
+    newDescribeReservedInstances,
+
+    -- * Request Lenses
+    describeReservedInstances_dryRun,
+    describeReservedInstances_filters,
+    describeReservedInstances_offeringClass,
+    describeReservedInstances_offeringType,
+    describeReservedInstances_reservedInstancesIds,
+
+    -- * Destructuring the Response
+    DescribeReservedInstancesResponse (..),
+    newDescribeReservedInstancesResponse,
+
+    -- * Response Lenses
+    describeReservedInstancesResponse_reservedInstances,
+    describeReservedInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeReservedInstances.
+--
+-- /See:/ 'newDescribeReservedInstances' smart constructor.
+data DescribeReservedInstances = DescribeReservedInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone where the Reserved
+    --     Instance can be used.
+    --
+    -- -   @duration@ - The duration of the Reserved Instance (one year or
+    --     three years), in seconds (@31536000@ | @94608000@).
+    --
+    -- -   @end@ - The time when the Reserved Instance expires (for example,
+    --     2015-08-07T11:54:42.000Z).
+    --
+    -- -   @fixed-price@ - The purchase price of the Reserved Instance (for
+    --     example, 9800.0).
+    --
+    -- -   @instance-type@ - The instance type that is covered by the
+    --     reservation.
+    --
+    -- -   @scope@ - The scope of the Reserved Instance (@Region@ or
+    --     @Availability Zone@).
+    --
+    -- -   @product-description@ - The Reserved Instance product platform
+    --     description. Instances that include @(Amazon VPC)@ in the product
+    --     platform description will only be displayed to EC2-Classic account
+    --     holders and are for use with Amazon VPC (@Linux\/UNIX@ |
+    --     @Linux\/UNIX (Amazon VPC)@ | @SUSE Linux@ |
+    --     @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ |
+    --     @Red Hat Enterprise Linux (Amazon VPC)@ |
+    --     @Red Hat Enterprise Linux with HA (Amazon VPC)@ | @Windows@ |
+    --     @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ |
+    --     @Windows with SQL Server Standard (Amazon VPC)@ |
+    --     @Windows with SQL Server Web@ |
+    --     @Windows with SQL Server Web (Amazon VPC)@ |
+    --     @Windows with SQL Server Enterprise@ |
+    --     @Windows with SQL Server Enterprise (Amazon VPC)@).
+    --
+    -- -   @reserved-instances-id@ - The ID of the Reserved Instance.
+    --
+    -- -   @start@ - The time at which the Reserved Instance purchase request
+    --     was placed (for example, 2014-08-07T11:54:42.000Z).
+    --
+    -- -   @state@ - The state of the Reserved Instance (@payment-pending@ |
+    --     @active@ | @payment-failed@ | @retired@).
+    --
+    -- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @usage-price@ - The usage price of the Reserved Instance, per hour
+    --     (for example, 0.84).
+    filters :: Prelude.Maybe [Filter],
+    -- | Describes whether the Reserved Instance is Standard or Convertible.
+    offeringClass :: Prelude.Maybe OfferingClassType,
+    -- | The Reserved Instance offering type. If you are using tools that predate
+    -- the 2011-11-01 API version, you only have access to the
+    -- @Medium Utilization@ Reserved Instance offering type.
+    offeringType :: Prelude.Maybe OfferingTypeValues,
+    -- | One or more Reserved Instance IDs.
+    --
+    -- Default: Describes all your Reserved Instances, or only those otherwise
+    -- specified.
+    reservedInstancesIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeReservedInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeReservedInstances_filters' - One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone where the Reserved
+--     Instance can be used.
+--
+-- -   @duration@ - The duration of the Reserved Instance (one year or
+--     three years), in seconds (@31536000@ | @94608000@).
+--
+-- -   @end@ - The time when the Reserved Instance expires (for example,
+--     2015-08-07T11:54:42.000Z).
+--
+-- -   @fixed-price@ - The purchase price of the Reserved Instance (for
+--     example, 9800.0).
+--
+-- -   @instance-type@ - The instance type that is covered by the
+--     reservation.
+--
+-- -   @scope@ - The scope of the Reserved Instance (@Region@ or
+--     @Availability Zone@).
+--
+-- -   @product-description@ - The Reserved Instance product platform
+--     description. Instances that include @(Amazon VPC)@ in the product
+--     platform description will only be displayed to EC2-Classic account
+--     holders and are for use with Amazon VPC (@Linux\/UNIX@ |
+--     @Linux\/UNIX (Amazon VPC)@ | @SUSE Linux@ |
+--     @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ |
+--     @Red Hat Enterprise Linux (Amazon VPC)@ |
+--     @Red Hat Enterprise Linux with HA (Amazon VPC)@ | @Windows@ |
+--     @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ |
+--     @Windows with SQL Server Standard (Amazon VPC)@ |
+--     @Windows with SQL Server Web@ |
+--     @Windows with SQL Server Web (Amazon VPC)@ |
+--     @Windows with SQL Server Enterprise@ |
+--     @Windows with SQL Server Enterprise (Amazon VPC)@).
+--
+-- -   @reserved-instances-id@ - The ID of the Reserved Instance.
+--
+-- -   @start@ - The time at which the Reserved Instance purchase request
+--     was placed (for example, 2014-08-07T11:54:42.000Z).
+--
+-- -   @state@ - The state of the Reserved Instance (@payment-pending@ |
+--     @active@ | @payment-failed@ | @retired@).
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @usage-price@ - The usage price of the Reserved Instance, per hour
+--     (for example, 0.84).
+--
+-- 'offeringClass', 'describeReservedInstances_offeringClass' - Describes whether the Reserved Instance is Standard or Convertible.
+--
+-- 'offeringType', 'describeReservedInstances_offeringType' - The Reserved Instance offering type. If you are using tools that predate
+-- the 2011-11-01 API version, you only have access to the
+-- @Medium Utilization@ Reserved Instance offering type.
+--
+-- 'reservedInstancesIds', 'describeReservedInstances_reservedInstancesIds' - One or more Reserved Instance IDs.
+--
+-- Default: Describes all your Reserved Instances, or only those otherwise
+-- specified.
+newDescribeReservedInstances ::
+  DescribeReservedInstances
+newDescribeReservedInstances =
+  DescribeReservedInstances'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      offeringClass = Prelude.Nothing,
+      offeringType = Prelude.Nothing,
+      reservedInstancesIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeReservedInstances_dryRun :: Lens.Lens' DescribeReservedInstances (Prelude.Maybe Prelude.Bool)
+describeReservedInstances_dryRun = Lens.lens (\DescribeReservedInstances' {dryRun} -> dryRun) (\s@DescribeReservedInstances' {} a -> s {dryRun = a} :: DescribeReservedInstances)
+
+-- | One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone where the Reserved
+--     Instance can be used.
+--
+-- -   @duration@ - The duration of the Reserved Instance (one year or
+--     three years), in seconds (@31536000@ | @94608000@).
+--
+-- -   @end@ - The time when the Reserved Instance expires (for example,
+--     2015-08-07T11:54:42.000Z).
+--
+-- -   @fixed-price@ - The purchase price of the Reserved Instance (for
+--     example, 9800.0).
+--
+-- -   @instance-type@ - The instance type that is covered by the
+--     reservation.
+--
+-- -   @scope@ - The scope of the Reserved Instance (@Region@ or
+--     @Availability Zone@).
+--
+-- -   @product-description@ - The Reserved Instance product platform
+--     description. Instances that include @(Amazon VPC)@ in the product
+--     platform description will only be displayed to EC2-Classic account
+--     holders and are for use with Amazon VPC (@Linux\/UNIX@ |
+--     @Linux\/UNIX (Amazon VPC)@ | @SUSE Linux@ |
+--     @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ |
+--     @Red Hat Enterprise Linux (Amazon VPC)@ |
+--     @Red Hat Enterprise Linux with HA (Amazon VPC)@ | @Windows@ |
+--     @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ |
+--     @Windows with SQL Server Standard (Amazon VPC)@ |
+--     @Windows with SQL Server Web@ |
+--     @Windows with SQL Server Web (Amazon VPC)@ |
+--     @Windows with SQL Server Enterprise@ |
+--     @Windows with SQL Server Enterprise (Amazon VPC)@).
+--
+-- -   @reserved-instances-id@ - The ID of the Reserved Instance.
+--
+-- -   @start@ - The time at which the Reserved Instance purchase request
+--     was placed (for example, 2014-08-07T11:54:42.000Z).
+--
+-- -   @state@ - The state of the Reserved Instance (@payment-pending@ |
+--     @active@ | @payment-failed@ | @retired@).
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @usage-price@ - The usage price of the Reserved Instance, per hour
+--     (for example, 0.84).
+describeReservedInstances_filters :: Lens.Lens' DescribeReservedInstances (Prelude.Maybe [Filter])
+describeReservedInstances_filters = Lens.lens (\DescribeReservedInstances' {filters} -> filters) (\s@DescribeReservedInstances' {} a -> s {filters = a} :: DescribeReservedInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes whether the Reserved Instance is Standard or Convertible.
+describeReservedInstances_offeringClass :: Lens.Lens' DescribeReservedInstances (Prelude.Maybe OfferingClassType)
+describeReservedInstances_offeringClass = Lens.lens (\DescribeReservedInstances' {offeringClass} -> offeringClass) (\s@DescribeReservedInstances' {} a -> s {offeringClass = a} :: DescribeReservedInstances)
+
+-- | The Reserved Instance offering type. If you are using tools that predate
+-- the 2011-11-01 API version, you only have access to the
+-- @Medium Utilization@ Reserved Instance offering type.
+describeReservedInstances_offeringType :: Lens.Lens' DescribeReservedInstances (Prelude.Maybe OfferingTypeValues)
+describeReservedInstances_offeringType = Lens.lens (\DescribeReservedInstances' {offeringType} -> offeringType) (\s@DescribeReservedInstances' {} a -> s {offeringType = a} :: DescribeReservedInstances)
+
+-- | One or more Reserved Instance IDs.
+--
+-- Default: Describes all your Reserved Instances, or only those otherwise
+-- specified.
+describeReservedInstances_reservedInstancesIds :: Lens.Lens' DescribeReservedInstances (Prelude.Maybe [Prelude.Text])
+describeReservedInstances_reservedInstancesIds = Lens.lens (\DescribeReservedInstances' {reservedInstancesIds} -> reservedInstancesIds) (\s@DescribeReservedInstances' {} a -> s {reservedInstancesIds = a} :: DescribeReservedInstances) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeReservedInstances where
+  type
+    AWSResponse DescribeReservedInstances =
+      DescribeReservedInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeReservedInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "reservedInstancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeReservedInstances where
+  hashWithSalt _salt DescribeReservedInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` offeringClass
+      `Prelude.hashWithSalt` offeringType
+      `Prelude.hashWithSalt` reservedInstancesIds
+
+instance Prelude.NFData DescribeReservedInstances where
+  rnf DescribeReservedInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf offeringClass
+      `Prelude.seq` Prelude.rnf offeringType
+      `Prelude.seq` Prelude.rnf reservedInstancesIds
+
+instance Data.ToHeaders DescribeReservedInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeReservedInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeReservedInstances where
+  toQuery DescribeReservedInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeReservedInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "OfferingClass" Data.=: offeringClass,
+        "OfferingType" Data.=: offeringType,
+        Data.toQuery
+          ( Data.toQueryList "ReservedInstancesId"
+              Prelude.<$> reservedInstancesIds
+          )
+      ]
+
+-- | Contains the output for DescribeReservedInstances.
+--
+-- /See:/ 'newDescribeReservedInstancesResponse' smart constructor.
+data DescribeReservedInstancesResponse = DescribeReservedInstancesResponse'
+  { -- | A list of Reserved Instances.
+    reservedInstances :: Prelude.Maybe [ReservedInstances],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstances', 'describeReservedInstancesResponse_reservedInstances' - A list of Reserved Instances.
+--
+-- 'httpStatus', 'describeReservedInstancesResponse_httpStatus' - The response's http status code.
+newDescribeReservedInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReservedInstancesResponse
+newDescribeReservedInstancesResponse pHttpStatus_ =
+  DescribeReservedInstancesResponse'
+    { reservedInstances =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of Reserved Instances.
+describeReservedInstancesResponse_reservedInstances :: Lens.Lens' DescribeReservedInstancesResponse (Prelude.Maybe [ReservedInstances])
+describeReservedInstancesResponse_reservedInstances = Lens.lens (\DescribeReservedInstancesResponse' {reservedInstances} -> reservedInstances) (\s@DescribeReservedInstancesResponse' {} a -> s {reservedInstances = a} :: DescribeReservedInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeReservedInstancesResponse_httpStatus :: Lens.Lens' DescribeReservedInstancesResponse Prelude.Int
+describeReservedInstancesResponse_httpStatus = Lens.lens (\DescribeReservedInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeReservedInstancesResponse' {} a -> s {httpStatus = a} :: DescribeReservedInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesResponse
+  where
+  rnf DescribeReservedInstancesResponse' {..} =
+    Prelude.rnf reservedInstances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeReservedInstancesListings.hs b/gen/Amazonka/EC2/DescribeReservedInstancesListings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeReservedInstancesListings.hs
@@ -0,0 +1,275 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeReservedInstancesListings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your account\'s Reserved Instance listings in the Reserved
+-- Instance Marketplace.
+--
+-- The Reserved Instance Marketplace matches sellers who want to resell
+-- Reserved Instance capacity that they no longer need with buyers who want
+-- to purchase additional capacity. Reserved Instances bought and sold
+-- through the Reserved Instance Marketplace work like any other Reserved
+-- Instances.
+--
+-- As a seller, you choose to list some or all of your Reserved Instances,
+-- and you specify the upfront price to receive for them. Your Reserved
+-- Instances are then listed in the Reserved Instance Marketplace and are
+-- available for purchase.
+--
+-- As a buyer, you specify the configuration of the Reserved Instance to
+-- purchase, and the Marketplace matches what you\'re searching for with
+-- what\'s available. The Marketplace first sells the lowest priced
+-- Reserved Instances to you, and continues to sell available Reserved
+-- Instance listings to you until your demand is met. You are charged based
+-- on the total price of all of the listings that you purchase.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribeReservedInstancesListings
+  ( -- * Creating a Request
+    DescribeReservedInstancesListings (..),
+    newDescribeReservedInstancesListings,
+
+    -- * Request Lenses
+    describeReservedInstancesListings_filters,
+    describeReservedInstancesListings_reservedInstancesId,
+    describeReservedInstancesListings_reservedInstancesListingId,
+
+    -- * Destructuring the Response
+    DescribeReservedInstancesListingsResponse (..),
+    newDescribeReservedInstancesListingsResponse,
+
+    -- * Response Lenses
+    describeReservedInstancesListingsResponse_reservedInstancesListings,
+    describeReservedInstancesListingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeReservedInstancesListings.
+--
+-- /See:/ 'newDescribeReservedInstancesListings' smart constructor.
+data DescribeReservedInstancesListings = DescribeReservedInstancesListings'
+  { -- | One or more filters.
+    --
+    -- -   @reserved-instances-id@ - The ID of the Reserved Instances.
+    --
+    -- -   @reserved-instances-listing-id@ - The ID of the Reserved Instances
+    --     listing.
+    --
+    -- -   @status@ - The status of the Reserved Instance listing (@pending@ |
+    --     @active@ | @cancelled@ | @closed@).
+    --
+    -- -   @status-message@ - The reason for the status.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more Reserved Instance IDs.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text,
+    -- | One or more Reserved Instance listing IDs.
+    reservedInstancesListingId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesListings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeReservedInstancesListings_filters' - One or more filters.
+--
+-- -   @reserved-instances-id@ - The ID of the Reserved Instances.
+--
+-- -   @reserved-instances-listing-id@ - The ID of the Reserved Instances
+--     listing.
+--
+-- -   @status@ - The status of the Reserved Instance listing (@pending@ |
+--     @active@ | @cancelled@ | @closed@).
+--
+-- -   @status-message@ - The reason for the status.
+--
+-- 'reservedInstancesId', 'describeReservedInstancesListings_reservedInstancesId' - One or more Reserved Instance IDs.
+--
+-- 'reservedInstancesListingId', 'describeReservedInstancesListings_reservedInstancesListingId' - One or more Reserved Instance listing IDs.
+newDescribeReservedInstancesListings ::
+  DescribeReservedInstancesListings
+newDescribeReservedInstancesListings =
+  DescribeReservedInstancesListings'
+    { filters =
+        Prelude.Nothing,
+      reservedInstancesId = Prelude.Nothing,
+      reservedInstancesListingId =
+        Prelude.Nothing
+    }
+
+-- | One or more filters.
+--
+-- -   @reserved-instances-id@ - The ID of the Reserved Instances.
+--
+-- -   @reserved-instances-listing-id@ - The ID of the Reserved Instances
+--     listing.
+--
+-- -   @status@ - The status of the Reserved Instance listing (@pending@ |
+--     @active@ | @cancelled@ | @closed@).
+--
+-- -   @status-message@ - The reason for the status.
+describeReservedInstancesListings_filters :: Lens.Lens' DescribeReservedInstancesListings (Prelude.Maybe [Filter])
+describeReservedInstancesListings_filters = Lens.lens (\DescribeReservedInstancesListings' {filters} -> filters) (\s@DescribeReservedInstancesListings' {} a -> s {filters = a} :: DescribeReservedInstancesListings) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more Reserved Instance IDs.
+describeReservedInstancesListings_reservedInstancesId :: Lens.Lens' DescribeReservedInstancesListings (Prelude.Maybe Prelude.Text)
+describeReservedInstancesListings_reservedInstancesId = Lens.lens (\DescribeReservedInstancesListings' {reservedInstancesId} -> reservedInstancesId) (\s@DescribeReservedInstancesListings' {} a -> s {reservedInstancesId = a} :: DescribeReservedInstancesListings)
+
+-- | One or more Reserved Instance listing IDs.
+describeReservedInstancesListings_reservedInstancesListingId :: Lens.Lens' DescribeReservedInstancesListings (Prelude.Maybe Prelude.Text)
+describeReservedInstancesListings_reservedInstancesListingId = Lens.lens (\DescribeReservedInstancesListings' {reservedInstancesListingId} -> reservedInstancesListingId) (\s@DescribeReservedInstancesListings' {} a -> s {reservedInstancesListingId = a} :: DescribeReservedInstancesListings)
+
+instance
+  Core.AWSRequest
+    DescribeReservedInstancesListings
+  where
+  type
+    AWSResponse DescribeReservedInstancesListings =
+      DescribeReservedInstancesListingsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeReservedInstancesListingsResponse'
+            Prelude.<$> ( x
+                            Data..@? "reservedInstancesListingsSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeReservedInstancesListings
+  where
+  hashWithSalt
+    _salt
+    DescribeReservedInstancesListings' {..} =
+      _salt
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` reservedInstancesId
+        `Prelude.hashWithSalt` reservedInstancesListingId
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesListings
+  where
+  rnf DescribeReservedInstancesListings' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf reservedInstancesId
+      `Prelude.seq` Prelude.rnf reservedInstancesListingId
+
+instance
+  Data.ToHeaders
+    DescribeReservedInstancesListings
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeReservedInstancesListings
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeReservedInstancesListings
+  where
+  toQuery DescribeReservedInstancesListings' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeReservedInstancesListings" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "ReservedInstancesId" Data.=: reservedInstancesId,
+        "ReservedInstancesListingId"
+          Data.=: reservedInstancesListingId
+      ]
+
+-- | Contains the output of DescribeReservedInstancesListings.
+--
+-- /See:/ 'newDescribeReservedInstancesListingsResponse' smart constructor.
+data DescribeReservedInstancesListingsResponse = DescribeReservedInstancesListingsResponse'
+  { -- | Information about the Reserved Instance listing.
+    reservedInstancesListings :: Prelude.Maybe [ReservedInstancesListing],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesListingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesListings', 'describeReservedInstancesListingsResponse_reservedInstancesListings' - Information about the Reserved Instance listing.
+--
+-- 'httpStatus', 'describeReservedInstancesListingsResponse_httpStatus' - The response's http status code.
+newDescribeReservedInstancesListingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReservedInstancesListingsResponse
+newDescribeReservedInstancesListingsResponse
+  pHttpStatus_ =
+    DescribeReservedInstancesListingsResponse'
+      { reservedInstancesListings =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the Reserved Instance listing.
+describeReservedInstancesListingsResponse_reservedInstancesListings :: Lens.Lens' DescribeReservedInstancesListingsResponse (Prelude.Maybe [ReservedInstancesListing])
+describeReservedInstancesListingsResponse_reservedInstancesListings = Lens.lens (\DescribeReservedInstancesListingsResponse' {reservedInstancesListings} -> reservedInstancesListings) (\s@DescribeReservedInstancesListingsResponse' {} a -> s {reservedInstancesListings = a} :: DescribeReservedInstancesListingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeReservedInstancesListingsResponse_httpStatus :: Lens.Lens' DescribeReservedInstancesListingsResponse Prelude.Int
+describeReservedInstancesListingsResponse_httpStatus = Lens.lens (\DescribeReservedInstancesListingsResponse' {httpStatus} -> httpStatus) (\s@DescribeReservedInstancesListingsResponse' {} a -> s {httpStatus = a} :: DescribeReservedInstancesListingsResponse)
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesListingsResponse
+  where
+  rnf DescribeReservedInstancesListingsResponse' {..} =
+    Prelude.rnf reservedInstancesListings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeReservedInstancesModifications.hs b/gen/Amazonka/EC2/DescribeReservedInstancesModifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeReservedInstancesModifications.hs
@@ -0,0 +1,384 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeReservedInstancesModifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the modifications made to your Reserved Instances. If no
+-- parameter is specified, information about all your Reserved Instances
+-- modification requests is returned. If a modification ID is specified,
+-- only information about the specific modification is returned.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html Modifying Reserved Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeReservedInstancesModifications
+  ( -- * Creating a Request
+    DescribeReservedInstancesModifications (..),
+    newDescribeReservedInstancesModifications,
+
+    -- * Request Lenses
+    describeReservedInstancesModifications_filters,
+    describeReservedInstancesModifications_nextToken,
+    describeReservedInstancesModifications_reservedInstancesModificationIds,
+
+    -- * Destructuring the Response
+    DescribeReservedInstancesModificationsResponse (..),
+    newDescribeReservedInstancesModificationsResponse,
+
+    -- * Response Lenses
+    describeReservedInstancesModificationsResponse_nextToken,
+    describeReservedInstancesModificationsResponse_reservedInstancesModifications,
+    describeReservedInstancesModificationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeReservedInstancesModifications.
+--
+-- /See:/ 'newDescribeReservedInstancesModifications' smart constructor.
+data DescribeReservedInstancesModifications = DescribeReservedInstancesModifications'
+  { -- | One or more filters.
+    --
+    -- -   @client-token@ - The idempotency token for the modification request.
+    --
+    -- -   @create-date@ - The time when the modification request was created.
+    --
+    -- -   @effective-date@ - The time when the modification becomes effective.
+    --
+    -- -   @modification-result.reserved-instances-id@ - The ID for the
+    --     Reserved Instances created as part of the modification request. This
+    --     ID is only available when the status of the modification is
+    --     @fulfilled@.
+    --
+    -- -   @modification-result.target-configuration.availability-zone@ - The
+    --     Availability Zone for the new Reserved Instances.
+    --
+    -- -   @modification-result.target-configuration.instance-count @ - The
+    --     number of new Reserved Instances.
+    --
+    -- -   @modification-result.target-configuration.instance-type@ - The
+    --     instance type of the new Reserved Instances.
+    --
+    -- -   @modification-result.target-configuration.platform@ - The network
+    --     platform of the new Reserved Instances (@EC2-Classic@ | @EC2-VPC@).
+    --
+    -- -   @reserved-instances-id@ - The ID of the Reserved Instances modified.
+    --
+    -- -   @reserved-instances-modification-id@ - The ID of the modification
+    --     request.
+    --
+    -- -   @status@ - The status of the Reserved Instances modification request
+    --     (@processing@ | @fulfilled@ | @failed@).
+    --
+    -- -   @status-message@ - The reason for the status.
+    --
+    -- -   @update-date@ - The time when the modification request was last
+    --     updated.
+    filters :: Prelude.Maybe [Filter],
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | IDs for the submitted modification request.
+    reservedInstancesModificationIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesModifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'filters', 'describeReservedInstancesModifications_filters' - One or more filters.
+--
+-- -   @client-token@ - The idempotency token for the modification request.
+--
+-- -   @create-date@ - The time when the modification request was created.
+--
+-- -   @effective-date@ - The time when the modification becomes effective.
+--
+-- -   @modification-result.reserved-instances-id@ - The ID for the
+--     Reserved Instances created as part of the modification request. This
+--     ID is only available when the status of the modification is
+--     @fulfilled@.
+--
+-- -   @modification-result.target-configuration.availability-zone@ - The
+--     Availability Zone for the new Reserved Instances.
+--
+-- -   @modification-result.target-configuration.instance-count @ - The
+--     number of new Reserved Instances.
+--
+-- -   @modification-result.target-configuration.instance-type@ - The
+--     instance type of the new Reserved Instances.
+--
+-- -   @modification-result.target-configuration.platform@ - The network
+--     platform of the new Reserved Instances (@EC2-Classic@ | @EC2-VPC@).
+--
+-- -   @reserved-instances-id@ - The ID of the Reserved Instances modified.
+--
+-- -   @reserved-instances-modification-id@ - The ID of the modification
+--     request.
+--
+-- -   @status@ - The status of the Reserved Instances modification request
+--     (@processing@ | @fulfilled@ | @failed@).
+--
+-- -   @status-message@ - The reason for the status.
+--
+-- -   @update-date@ - The time when the modification request was last
+--     updated.
+--
+-- 'nextToken', 'describeReservedInstancesModifications_nextToken' - The token to retrieve the next page of results.
+--
+-- 'reservedInstancesModificationIds', 'describeReservedInstancesModifications_reservedInstancesModificationIds' - IDs for the submitted modification request.
+newDescribeReservedInstancesModifications ::
+  DescribeReservedInstancesModifications
+newDescribeReservedInstancesModifications =
+  DescribeReservedInstancesModifications'
+    { filters =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      reservedInstancesModificationIds =
+        Prelude.Nothing
+    }
+
+-- | One or more filters.
+--
+-- -   @client-token@ - The idempotency token for the modification request.
+--
+-- -   @create-date@ - The time when the modification request was created.
+--
+-- -   @effective-date@ - The time when the modification becomes effective.
+--
+-- -   @modification-result.reserved-instances-id@ - The ID for the
+--     Reserved Instances created as part of the modification request. This
+--     ID is only available when the status of the modification is
+--     @fulfilled@.
+--
+-- -   @modification-result.target-configuration.availability-zone@ - The
+--     Availability Zone for the new Reserved Instances.
+--
+-- -   @modification-result.target-configuration.instance-count @ - The
+--     number of new Reserved Instances.
+--
+-- -   @modification-result.target-configuration.instance-type@ - The
+--     instance type of the new Reserved Instances.
+--
+-- -   @modification-result.target-configuration.platform@ - The network
+--     platform of the new Reserved Instances (@EC2-Classic@ | @EC2-VPC@).
+--
+-- -   @reserved-instances-id@ - The ID of the Reserved Instances modified.
+--
+-- -   @reserved-instances-modification-id@ - The ID of the modification
+--     request.
+--
+-- -   @status@ - The status of the Reserved Instances modification request
+--     (@processing@ | @fulfilled@ | @failed@).
+--
+-- -   @status-message@ - The reason for the status.
+--
+-- -   @update-date@ - The time when the modification request was last
+--     updated.
+describeReservedInstancesModifications_filters :: Lens.Lens' DescribeReservedInstancesModifications (Prelude.Maybe [Filter])
+describeReservedInstancesModifications_filters = Lens.lens (\DescribeReservedInstancesModifications' {filters} -> filters) (\s@DescribeReservedInstancesModifications' {} a -> s {filters = a} :: DescribeReservedInstancesModifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to retrieve the next page of results.
+describeReservedInstancesModifications_nextToken :: Lens.Lens' DescribeReservedInstancesModifications (Prelude.Maybe Prelude.Text)
+describeReservedInstancesModifications_nextToken = Lens.lens (\DescribeReservedInstancesModifications' {nextToken} -> nextToken) (\s@DescribeReservedInstancesModifications' {} a -> s {nextToken = a} :: DescribeReservedInstancesModifications)
+
+-- | IDs for the submitted modification request.
+describeReservedInstancesModifications_reservedInstancesModificationIds :: Lens.Lens' DescribeReservedInstancesModifications (Prelude.Maybe [Prelude.Text])
+describeReservedInstancesModifications_reservedInstancesModificationIds = Lens.lens (\DescribeReservedInstancesModifications' {reservedInstancesModificationIds} -> reservedInstancesModificationIds) (\s@DescribeReservedInstancesModifications' {} a -> s {reservedInstancesModificationIds = a} :: DescribeReservedInstancesModifications) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeReservedInstancesModifications
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeReservedInstancesModificationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeReservedInstancesModificationsResponse_reservedInstancesModifications
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeReservedInstancesModifications_nextToken
+          Lens..~ rs
+          Lens.^? describeReservedInstancesModificationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeReservedInstancesModifications
+  where
+  type
+    AWSResponse
+      DescribeReservedInstancesModifications =
+      DescribeReservedInstancesModificationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeReservedInstancesModificationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "reservedInstancesModificationsSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeReservedInstancesModifications
+  where
+  hashWithSalt
+    _salt
+    DescribeReservedInstancesModifications' {..} =
+      _salt
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` reservedInstancesModificationIds
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesModifications
+  where
+  rnf DescribeReservedInstancesModifications' {..} =
+    Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf reservedInstancesModificationIds
+
+instance
+  Data.ToHeaders
+    DescribeReservedInstancesModifications
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeReservedInstancesModifications
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeReservedInstancesModifications
+  where
+  toQuery DescribeReservedInstancesModifications' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeReservedInstancesModifications" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "ReservedInstancesModificationId"
+              Prelude.<$> reservedInstancesModificationIds
+          )
+      ]
+
+-- | Contains the output of DescribeReservedInstancesModifications.
+--
+-- /See:/ 'newDescribeReservedInstancesModificationsResponse' smart constructor.
+data DescribeReservedInstancesModificationsResponse = DescribeReservedInstancesModificationsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Reserved Instance modification information.
+    reservedInstancesModifications :: Prelude.Maybe [ReservedInstancesModification],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesModificationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeReservedInstancesModificationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'reservedInstancesModifications', 'describeReservedInstancesModificationsResponse_reservedInstancesModifications' - The Reserved Instance modification information.
+--
+-- 'httpStatus', 'describeReservedInstancesModificationsResponse_httpStatus' - The response's http status code.
+newDescribeReservedInstancesModificationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReservedInstancesModificationsResponse
+newDescribeReservedInstancesModificationsResponse
+  pHttpStatus_ =
+    DescribeReservedInstancesModificationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        reservedInstancesModifications =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeReservedInstancesModificationsResponse_nextToken :: Lens.Lens' DescribeReservedInstancesModificationsResponse (Prelude.Maybe Prelude.Text)
+describeReservedInstancesModificationsResponse_nextToken = Lens.lens (\DescribeReservedInstancesModificationsResponse' {nextToken} -> nextToken) (\s@DescribeReservedInstancesModificationsResponse' {} a -> s {nextToken = a} :: DescribeReservedInstancesModificationsResponse)
+
+-- | The Reserved Instance modification information.
+describeReservedInstancesModificationsResponse_reservedInstancesModifications :: Lens.Lens' DescribeReservedInstancesModificationsResponse (Prelude.Maybe [ReservedInstancesModification])
+describeReservedInstancesModificationsResponse_reservedInstancesModifications = Lens.lens (\DescribeReservedInstancesModificationsResponse' {reservedInstancesModifications} -> reservedInstancesModifications) (\s@DescribeReservedInstancesModificationsResponse' {} a -> s {reservedInstancesModifications = a} :: DescribeReservedInstancesModificationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeReservedInstancesModificationsResponse_httpStatus :: Lens.Lens' DescribeReservedInstancesModificationsResponse Prelude.Int
+describeReservedInstancesModificationsResponse_httpStatus = Lens.lens (\DescribeReservedInstancesModificationsResponse' {httpStatus} -> httpStatus) (\s@DescribeReservedInstancesModificationsResponse' {} a -> s {httpStatus = a} :: DescribeReservedInstancesModificationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesModificationsResponse
+  where
+  rnf
+    DescribeReservedInstancesModificationsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf reservedInstancesModifications
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeReservedInstancesOfferings.hs b/gen/Amazonka/EC2/DescribeReservedInstancesOfferings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeReservedInstancesOfferings.hs
@@ -0,0 +1,648 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeReservedInstancesOfferings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes Reserved Instance offerings that are available for purchase.
+-- With Reserved Instances, you purchase the right to launch instances for
+-- a period of time. During that time period, you do not receive
+-- insufficient capacity errors, and you pay a lower usage rate than the
+-- rate charged for On-Demand instances for the actual time used.
+--
+-- If you have listed your own Reserved Instances for sale in the Reserved
+-- Instance Marketplace, they will be excluded from these results. This is
+-- to ensure that you do not purchase your own Reserved Instances.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeReservedInstancesOfferings
+  ( -- * Creating a Request
+    DescribeReservedInstancesOfferings (..),
+    newDescribeReservedInstancesOfferings,
+
+    -- * Request Lenses
+    describeReservedInstancesOfferings_availabilityZone,
+    describeReservedInstancesOfferings_dryRun,
+    describeReservedInstancesOfferings_filters,
+    describeReservedInstancesOfferings_includeMarketplace,
+    describeReservedInstancesOfferings_instanceTenancy,
+    describeReservedInstancesOfferings_instanceType,
+    describeReservedInstancesOfferings_maxDuration,
+    describeReservedInstancesOfferings_maxInstanceCount,
+    describeReservedInstancesOfferings_maxResults,
+    describeReservedInstancesOfferings_minDuration,
+    describeReservedInstancesOfferings_nextToken,
+    describeReservedInstancesOfferings_offeringClass,
+    describeReservedInstancesOfferings_offeringType,
+    describeReservedInstancesOfferings_productDescription,
+    describeReservedInstancesOfferings_reservedInstancesOfferingIds,
+
+    -- * Destructuring the Response
+    DescribeReservedInstancesOfferingsResponse (..),
+    newDescribeReservedInstancesOfferingsResponse,
+
+    -- * Response Lenses
+    describeReservedInstancesOfferingsResponse_nextToken,
+    describeReservedInstancesOfferingsResponse_reservedInstancesOfferings,
+    describeReservedInstancesOfferingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeReservedInstancesOfferings.
+--
+-- /See:/ 'newDescribeReservedInstancesOfferings' smart constructor.
+data DescribeReservedInstancesOfferings = DescribeReservedInstancesOfferings'
+  { -- | The Availability Zone in which the Reserved Instance can be used.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone where the Reserved
+    --     Instance can be used.
+    --
+    -- -   @duration@ - The duration of the Reserved Instance (for example, one
+    --     year or three years), in seconds (@31536000@ | @94608000@).
+    --
+    -- -   @fixed-price@ - The purchase price of the Reserved Instance (for
+    --     example, 9800.0).
+    --
+    -- -   @instance-type@ - The instance type that is covered by the
+    --     reservation.
+    --
+    -- -   @marketplace@ - Set to @true@ to show only Reserved Instance
+    --     Marketplace offerings. When this filter is not used, which is the
+    --     default behavior, all offerings from both Amazon Web Services and
+    --     the Reserved Instance Marketplace are listed.
+    --
+    -- -   @product-description@ - The Reserved Instance product platform
+    --     description. Instances that include @(Amazon VPC)@ in the product
+    --     platform description will only be displayed to EC2-Classic account
+    --     holders and are for use with Amazon VPC. (@Linux\/UNIX@ |
+    --     @Linux\/UNIX (Amazon VPC)@ | @SUSE Linux@ |
+    --     @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ |
+    --     @Red Hat Enterprise Linux (Amazon VPC)@ |
+    --     @Red Hat Enterprise Linux with HA (Amazon VPC)@ | @Windows@ |
+    --     @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ |
+    --     @Windows with SQL Server Standard (Amazon VPC)@ |
+    --     @Windows with SQL Server Web@ |
+    --     @ Windows with SQL Server Web (Amazon VPC)@ |
+    --     @Windows with SQL Server Enterprise@ |
+    --     @Windows with SQL Server Enterprise (Amazon VPC)@)
+    --
+    -- -   @reserved-instances-offering-id@ - The Reserved Instances offering
+    --     ID.
+    --
+    -- -   @scope@ - The scope of the Reserved Instance (@Availability Zone@ or
+    --     @Region@).
+    --
+    -- -   @usage-price@ - The usage price of the Reserved Instance, per hour
+    --     (for example, 0.84).
+    filters :: Prelude.Maybe [Filter],
+    -- | Include Reserved Instance Marketplace offerings in the response.
+    includeMarketplace :: Prelude.Maybe Prelude.Bool,
+    -- | The tenancy of the instances covered by the reservation. A Reserved
+    -- Instance with a tenancy of @dedicated@ is applied to instances that run
+    -- in a VPC on single-tenant hardware (i.e., Dedicated Instances).
+    --
+    -- __Important:__ The @host@ value cannot be used with this parameter. Use
+    -- the @default@ or @dedicated@ values only.
+    --
+    -- Default: @default@
+    instanceTenancy :: Prelude.Maybe Tenancy,
+    -- | The instance type that the reservation will cover (for example,
+    -- @m1.small@). For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The maximum duration (in seconds) to filter when searching for
+    -- offerings.
+    --
+    -- Default: 94608000 (3 years)
+    maxDuration :: Prelude.Maybe Prelude.Integer,
+    -- | The maximum number of instances to filter when searching for offerings.
+    --
+    -- Default: 20
+    maxInstanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results of the initial request can be seen by
+    -- sending another request with the returned @NextToken@ value. The maximum
+    -- is 100.
+    --
+    -- Default: 100
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The minimum duration (in seconds) to filter when searching for
+    -- offerings.
+    --
+    -- Default: 2592000 (1 month)
+    minDuration :: Prelude.Maybe Prelude.Integer,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The offering class of the Reserved Instance. Can be @standard@ or
+    -- @convertible@.
+    offeringClass :: Prelude.Maybe OfferingClassType,
+    -- | The Reserved Instance offering type. If you are using tools that predate
+    -- the 2011-11-01 API version, you only have access to the
+    -- @Medium Utilization@ Reserved Instance offering type.
+    offeringType :: Prelude.Maybe OfferingTypeValues,
+    -- | The Reserved Instance product platform description. Instances that
+    -- include @(Amazon VPC)@ in the description are for use with Amazon VPC.
+    productDescription :: Prelude.Maybe RIProductDescription,
+    -- | One or more Reserved Instances offering IDs.
+    reservedInstancesOfferingIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesOfferings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'describeReservedInstancesOfferings_availabilityZone' - The Availability Zone in which the Reserved Instance can be used.
+--
+-- 'dryRun', 'describeReservedInstancesOfferings_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeReservedInstancesOfferings_filters' - One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone where the Reserved
+--     Instance can be used.
+--
+-- -   @duration@ - The duration of the Reserved Instance (for example, one
+--     year or three years), in seconds (@31536000@ | @94608000@).
+--
+-- -   @fixed-price@ - The purchase price of the Reserved Instance (for
+--     example, 9800.0).
+--
+-- -   @instance-type@ - The instance type that is covered by the
+--     reservation.
+--
+-- -   @marketplace@ - Set to @true@ to show only Reserved Instance
+--     Marketplace offerings. When this filter is not used, which is the
+--     default behavior, all offerings from both Amazon Web Services and
+--     the Reserved Instance Marketplace are listed.
+--
+-- -   @product-description@ - The Reserved Instance product platform
+--     description. Instances that include @(Amazon VPC)@ in the product
+--     platform description will only be displayed to EC2-Classic account
+--     holders and are for use with Amazon VPC. (@Linux\/UNIX@ |
+--     @Linux\/UNIX (Amazon VPC)@ | @SUSE Linux@ |
+--     @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ |
+--     @Red Hat Enterprise Linux (Amazon VPC)@ |
+--     @Red Hat Enterprise Linux with HA (Amazon VPC)@ | @Windows@ |
+--     @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ |
+--     @Windows with SQL Server Standard (Amazon VPC)@ |
+--     @Windows with SQL Server Web@ |
+--     @ Windows with SQL Server Web (Amazon VPC)@ |
+--     @Windows with SQL Server Enterprise@ |
+--     @Windows with SQL Server Enterprise (Amazon VPC)@)
+--
+-- -   @reserved-instances-offering-id@ - The Reserved Instances offering
+--     ID.
+--
+-- -   @scope@ - The scope of the Reserved Instance (@Availability Zone@ or
+--     @Region@).
+--
+-- -   @usage-price@ - The usage price of the Reserved Instance, per hour
+--     (for example, 0.84).
+--
+-- 'includeMarketplace', 'describeReservedInstancesOfferings_includeMarketplace' - Include Reserved Instance Marketplace offerings in the response.
+--
+-- 'instanceTenancy', 'describeReservedInstancesOfferings_instanceTenancy' - The tenancy of the instances covered by the reservation. A Reserved
+-- Instance with a tenancy of @dedicated@ is applied to instances that run
+-- in a VPC on single-tenant hardware (i.e., Dedicated Instances).
+--
+-- __Important:__ The @host@ value cannot be used with this parameter. Use
+-- the @default@ or @dedicated@ values only.
+--
+-- Default: @default@
+--
+-- 'instanceType', 'describeReservedInstancesOfferings_instanceType' - The instance type that the reservation will cover (for example,
+-- @m1.small@). For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'maxDuration', 'describeReservedInstancesOfferings_maxDuration' - The maximum duration (in seconds) to filter when searching for
+-- offerings.
+--
+-- Default: 94608000 (3 years)
+--
+-- 'maxInstanceCount', 'describeReservedInstancesOfferings_maxInstanceCount' - The maximum number of instances to filter when searching for offerings.
+--
+-- Default: 20
+--
+-- 'maxResults', 'describeReservedInstancesOfferings_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. The maximum
+-- is 100.
+--
+-- Default: 100
+--
+-- 'minDuration', 'describeReservedInstancesOfferings_minDuration' - The minimum duration (in seconds) to filter when searching for
+-- offerings.
+--
+-- Default: 2592000 (1 month)
+--
+-- 'nextToken', 'describeReservedInstancesOfferings_nextToken' - The token to retrieve the next page of results.
+--
+-- 'offeringClass', 'describeReservedInstancesOfferings_offeringClass' - The offering class of the Reserved Instance. Can be @standard@ or
+-- @convertible@.
+--
+-- 'offeringType', 'describeReservedInstancesOfferings_offeringType' - The Reserved Instance offering type. If you are using tools that predate
+-- the 2011-11-01 API version, you only have access to the
+-- @Medium Utilization@ Reserved Instance offering type.
+--
+-- 'productDescription', 'describeReservedInstancesOfferings_productDescription' - The Reserved Instance product platform description. Instances that
+-- include @(Amazon VPC)@ in the description are for use with Amazon VPC.
+--
+-- 'reservedInstancesOfferingIds', 'describeReservedInstancesOfferings_reservedInstancesOfferingIds' - One or more Reserved Instances offering IDs.
+newDescribeReservedInstancesOfferings ::
+  DescribeReservedInstancesOfferings
+newDescribeReservedInstancesOfferings =
+  DescribeReservedInstancesOfferings'
+    { availabilityZone =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      includeMarketplace = Prelude.Nothing,
+      instanceTenancy = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      maxDuration = Prelude.Nothing,
+      maxInstanceCount = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      minDuration = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      offeringClass = Prelude.Nothing,
+      offeringType = Prelude.Nothing,
+      productDescription = Prelude.Nothing,
+      reservedInstancesOfferingIds =
+        Prelude.Nothing
+    }
+
+-- | The Availability Zone in which the Reserved Instance can be used.
+describeReservedInstancesOfferings_availabilityZone :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Text)
+describeReservedInstancesOfferings_availabilityZone = Lens.lens (\DescribeReservedInstancesOfferings' {availabilityZone} -> availabilityZone) (\s@DescribeReservedInstancesOfferings' {} a -> s {availabilityZone = a} :: DescribeReservedInstancesOfferings)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeReservedInstancesOfferings_dryRun :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Bool)
+describeReservedInstancesOfferings_dryRun = Lens.lens (\DescribeReservedInstancesOfferings' {dryRun} -> dryRun) (\s@DescribeReservedInstancesOfferings' {} a -> s {dryRun = a} :: DescribeReservedInstancesOfferings)
+
+-- | One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone where the Reserved
+--     Instance can be used.
+--
+-- -   @duration@ - The duration of the Reserved Instance (for example, one
+--     year or three years), in seconds (@31536000@ | @94608000@).
+--
+-- -   @fixed-price@ - The purchase price of the Reserved Instance (for
+--     example, 9800.0).
+--
+-- -   @instance-type@ - The instance type that is covered by the
+--     reservation.
+--
+-- -   @marketplace@ - Set to @true@ to show only Reserved Instance
+--     Marketplace offerings. When this filter is not used, which is the
+--     default behavior, all offerings from both Amazon Web Services and
+--     the Reserved Instance Marketplace are listed.
+--
+-- -   @product-description@ - The Reserved Instance product platform
+--     description. Instances that include @(Amazon VPC)@ in the product
+--     platform description will only be displayed to EC2-Classic account
+--     holders and are for use with Amazon VPC. (@Linux\/UNIX@ |
+--     @Linux\/UNIX (Amazon VPC)@ | @SUSE Linux@ |
+--     @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ |
+--     @Red Hat Enterprise Linux (Amazon VPC)@ |
+--     @Red Hat Enterprise Linux with HA (Amazon VPC)@ | @Windows@ |
+--     @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ |
+--     @Windows with SQL Server Standard (Amazon VPC)@ |
+--     @Windows with SQL Server Web@ |
+--     @ Windows with SQL Server Web (Amazon VPC)@ |
+--     @Windows with SQL Server Enterprise@ |
+--     @Windows with SQL Server Enterprise (Amazon VPC)@)
+--
+-- -   @reserved-instances-offering-id@ - The Reserved Instances offering
+--     ID.
+--
+-- -   @scope@ - The scope of the Reserved Instance (@Availability Zone@ or
+--     @Region@).
+--
+-- -   @usage-price@ - The usage price of the Reserved Instance, per hour
+--     (for example, 0.84).
+describeReservedInstancesOfferings_filters :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe [Filter])
+describeReservedInstancesOfferings_filters = Lens.lens (\DescribeReservedInstancesOfferings' {filters} -> filters) (\s@DescribeReservedInstancesOfferings' {} a -> s {filters = a} :: DescribeReservedInstancesOfferings) Prelude.. Lens.mapping Lens.coerced
+
+-- | Include Reserved Instance Marketplace offerings in the response.
+describeReservedInstancesOfferings_includeMarketplace :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Bool)
+describeReservedInstancesOfferings_includeMarketplace = Lens.lens (\DescribeReservedInstancesOfferings' {includeMarketplace} -> includeMarketplace) (\s@DescribeReservedInstancesOfferings' {} a -> s {includeMarketplace = a} :: DescribeReservedInstancesOfferings)
+
+-- | The tenancy of the instances covered by the reservation. A Reserved
+-- Instance with a tenancy of @dedicated@ is applied to instances that run
+-- in a VPC on single-tenant hardware (i.e., Dedicated Instances).
+--
+-- __Important:__ The @host@ value cannot be used with this parameter. Use
+-- the @default@ or @dedicated@ values only.
+--
+-- Default: @default@
+describeReservedInstancesOfferings_instanceTenancy :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Tenancy)
+describeReservedInstancesOfferings_instanceTenancy = Lens.lens (\DescribeReservedInstancesOfferings' {instanceTenancy} -> instanceTenancy) (\s@DescribeReservedInstancesOfferings' {} a -> s {instanceTenancy = a} :: DescribeReservedInstancesOfferings)
+
+-- | The instance type that the reservation will cover (for example,
+-- @m1.small@). For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+describeReservedInstancesOfferings_instanceType :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe InstanceType)
+describeReservedInstancesOfferings_instanceType = Lens.lens (\DescribeReservedInstancesOfferings' {instanceType} -> instanceType) (\s@DescribeReservedInstancesOfferings' {} a -> s {instanceType = a} :: DescribeReservedInstancesOfferings)
+
+-- | The maximum duration (in seconds) to filter when searching for
+-- offerings.
+--
+-- Default: 94608000 (3 years)
+describeReservedInstancesOfferings_maxDuration :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Integer)
+describeReservedInstancesOfferings_maxDuration = Lens.lens (\DescribeReservedInstancesOfferings' {maxDuration} -> maxDuration) (\s@DescribeReservedInstancesOfferings' {} a -> s {maxDuration = a} :: DescribeReservedInstancesOfferings)
+
+-- | The maximum number of instances to filter when searching for offerings.
+--
+-- Default: 20
+describeReservedInstancesOfferings_maxInstanceCount :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Int)
+describeReservedInstancesOfferings_maxInstanceCount = Lens.lens (\DescribeReservedInstancesOfferings' {maxInstanceCount} -> maxInstanceCount) (\s@DescribeReservedInstancesOfferings' {} a -> s {maxInstanceCount = a} :: DescribeReservedInstancesOfferings)
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. The maximum
+-- is 100.
+--
+-- Default: 100
+describeReservedInstancesOfferings_maxResults :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Int)
+describeReservedInstancesOfferings_maxResults = Lens.lens (\DescribeReservedInstancesOfferings' {maxResults} -> maxResults) (\s@DescribeReservedInstancesOfferings' {} a -> s {maxResults = a} :: DescribeReservedInstancesOfferings)
+
+-- | The minimum duration (in seconds) to filter when searching for
+-- offerings.
+--
+-- Default: 2592000 (1 month)
+describeReservedInstancesOfferings_minDuration :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Integer)
+describeReservedInstancesOfferings_minDuration = Lens.lens (\DescribeReservedInstancesOfferings' {minDuration} -> minDuration) (\s@DescribeReservedInstancesOfferings' {} a -> s {minDuration = a} :: DescribeReservedInstancesOfferings)
+
+-- | The token to retrieve the next page of results.
+describeReservedInstancesOfferings_nextToken :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe Prelude.Text)
+describeReservedInstancesOfferings_nextToken = Lens.lens (\DescribeReservedInstancesOfferings' {nextToken} -> nextToken) (\s@DescribeReservedInstancesOfferings' {} a -> s {nextToken = a} :: DescribeReservedInstancesOfferings)
+
+-- | The offering class of the Reserved Instance. Can be @standard@ or
+-- @convertible@.
+describeReservedInstancesOfferings_offeringClass :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe OfferingClassType)
+describeReservedInstancesOfferings_offeringClass = Lens.lens (\DescribeReservedInstancesOfferings' {offeringClass} -> offeringClass) (\s@DescribeReservedInstancesOfferings' {} a -> s {offeringClass = a} :: DescribeReservedInstancesOfferings)
+
+-- | The Reserved Instance offering type. If you are using tools that predate
+-- the 2011-11-01 API version, you only have access to the
+-- @Medium Utilization@ Reserved Instance offering type.
+describeReservedInstancesOfferings_offeringType :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe OfferingTypeValues)
+describeReservedInstancesOfferings_offeringType = Lens.lens (\DescribeReservedInstancesOfferings' {offeringType} -> offeringType) (\s@DescribeReservedInstancesOfferings' {} a -> s {offeringType = a} :: DescribeReservedInstancesOfferings)
+
+-- | The Reserved Instance product platform description. Instances that
+-- include @(Amazon VPC)@ in the description are for use with Amazon VPC.
+describeReservedInstancesOfferings_productDescription :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe RIProductDescription)
+describeReservedInstancesOfferings_productDescription = Lens.lens (\DescribeReservedInstancesOfferings' {productDescription} -> productDescription) (\s@DescribeReservedInstancesOfferings' {} a -> s {productDescription = a} :: DescribeReservedInstancesOfferings)
+
+-- | One or more Reserved Instances offering IDs.
+describeReservedInstancesOfferings_reservedInstancesOfferingIds :: Lens.Lens' DescribeReservedInstancesOfferings (Prelude.Maybe [Prelude.Text])
+describeReservedInstancesOfferings_reservedInstancesOfferingIds = Lens.lens (\DescribeReservedInstancesOfferings' {reservedInstancesOfferingIds} -> reservedInstancesOfferingIds) (\s@DescribeReservedInstancesOfferings' {} a -> s {reservedInstancesOfferingIds = a} :: DescribeReservedInstancesOfferings) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeReservedInstancesOfferings
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeReservedInstancesOfferingsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeReservedInstancesOfferingsResponse_reservedInstancesOfferings
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeReservedInstancesOfferings_nextToken
+          Lens..~ rs
+          Lens.^? describeReservedInstancesOfferingsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeReservedInstancesOfferings
+  where
+  type
+    AWSResponse DescribeReservedInstancesOfferings =
+      DescribeReservedInstancesOfferingsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeReservedInstancesOfferingsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "reservedInstancesOfferingsSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeReservedInstancesOfferings
+  where
+  hashWithSalt
+    _salt
+    DescribeReservedInstancesOfferings' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` includeMarketplace
+        `Prelude.hashWithSalt` instanceTenancy
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` maxDuration
+        `Prelude.hashWithSalt` maxInstanceCount
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` minDuration
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` offeringClass
+        `Prelude.hashWithSalt` offeringType
+        `Prelude.hashWithSalt` productDescription
+        `Prelude.hashWithSalt` reservedInstancesOfferingIds
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesOfferings
+  where
+  rnf DescribeReservedInstancesOfferings' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf includeMarketplace
+      `Prelude.seq` Prelude.rnf instanceTenancy
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf maxDuration
+      `Prelude.seq` Prelude.rnf maxInstanceCount
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf minDuration
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf offeringClass
+      `Prelude.seq` Prelude.rnf offeringType
+      `Prelude.seq` Prelude.rnf productDescription
+      `Prelude.seq` Prelude.rnf reservedInstancesOfferingIds
+
+instance
+  Data.ToHeaders
+    DescribeReservedInstancesOfferings
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeReservedInstancesOfferings
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeReservedInstancesOfferings
+  where
+  toQuery DescribeReservedInstancesOfferings' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeReservedInstancesOfferings" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AvailabilityZone" Data.=: availabilityZone,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "IncludeMarketplace" Data.=: includeMarketplace,
+        "InstanceTenancy" Data.=: instanceTenancy,
+        "InstanceType" Data.=: instanceType,
+        "MaxDuration" Data.=: maxDuration,
+        "MaxInstanceCount" Data.=: maxInstanceCount,
+        "MaxResults" Data.=: maxResults,
+        "MinDuration" Data.=: minDuration,
+        "NextToken" Data.=: nextToken,
+        "OfferingClass" Data.=: offeringClass,
+        "OfferingType" Data.=: offeringType,
+        "ProductDescription" Data.=: productDescription,
+        Data.toQuery
+          ( Data.toQueryList "ReservedInstancesOfferingId"
+              Prelude.<$> reservedInstancesOfferingIds
+          )
+      ]
+
+-- | Contains the output of DescribeReservedInstancesOfferings.
+--
+-- /See:/ 'newDescribeReservedInstancesOfferingsResponse' smart constructor.
+data DescribeReservedInstancesOfferingsResponse = DescribeReservedInstancesOfferingsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | A list of Reserved Instances offerings.
+    reservedInstancesOfferings :: Prelude.Maybe [ReservedInstancesOffering],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReservedInstancesOfferingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeReservedInstancesOfferingsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'reservedInstancesOfferings', 'describeReservedInstancesOfferingsResponse_reservedInstancesOfferings' - A list of Reserved Instances offerings.
+--
+-- 'httpStatus', 'describeReservedInstancesOfferingsResponse_httpStatus' - The response's http status code.
+newDescribeReservedInstancesOfferingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReservedInstancesOfferingsResponse
+newDescribeReservedInstancesOfferingsResponse
+  pHttpStatus_ =
+    DescribeReservedInstancesOfferingsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        reservedInstancesOfferings =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeReservedInstancesOfferingsResponse_nextToken :: Lens.Lens' DescribeReservedInstancesOfferingsResponse (Prelude.Maybe Prelude.Text)
+describeReservedInstancesOfferingsResponse_nextToken = Lens.lens (\DescribeReservedInstancesOfferingsResponse' {nextToken} -> nextToken) (\s@DescribeReservedInstancesOfferingsResponse' {} a -> s {nextToken = a} :: DescribeReservedInstancesOfferingsResponse)
+
+-- | A list of Reserved Instances offerings.
+describeReservedInstancesOfferingsResponse_reservedInstancesOfferings :: Lens.Lens' DescribeReservedInstancesOfferingsResponse (Prelude.Maybe [ReservedInstancesOffering])
+describeReservedInstancesOfferingsResponse_reservedInstancesOfferings = Lens.lens (\DescribeReservedInstancesOfferingsResponse' {reservedInstancesOfferings} -> reservedInstancesOfferings) (\s@DescribeReservedInstancesOfferingsResponse' {} a -> s {reservedInstancesOfferings = a} :: DescribeReservedInstancesOfferingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeReservedInstancesOfferingsResponse_httpStatus :: Lens.Lens' DescribeReservedInstancesOfferingsResponse Prelude.Int
+describeReservedInstancesOfferingsResponse_httpStatus = Lens.lens (\DescribeReservedInstancesOfferingsResponse' {httpStatus} -> httpStatus) (\s@DescribeReservedInstancesOfferingsResponse' {} a -> s {httpStatus = a} :: DescribeReservedInstancesOfferingsResponse)
+
+instance
+  Prelude.NFData
+    DescribeReservedInstancesOfferingsResponse
+  where
+  rnf DescribeReservedInstancesOfferingsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf reservedInstancesOfferings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeRouteTables.hs b/gen/Amazonka/EC2/DescribeRouteTables.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeRouteTables.hs
@@ -0,0 +1,493 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeRouteTables
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your route tables.
+--
+-- Each subnet in your VPC must be associated with a route table. If a
+-- subnet is not explicitly associated with any route table, it is
+-- implicitly associated with the main route table. This command does not
+-- return the subnet ID for implicit associations.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeRouteTables
+  ( -- * Creating a Request
+    DescribeRouteTables (..),
+    newDescribeRouteTables,
+
+    -- * Request Lenses
+    describeRouteTables_dryRun,
+    describeRouteTables_filters,
+    describeRouteTables_maxResults,
+    describeRouteTables_nextToken,
+    describeRouteTables_routeTableIds,
+
+    -- * Destructuring the Response
+    DescribeRouteTablesResponse (..),
+    newDescribeRouteTablesResponse,
+
+    -- * Response Lenses
+    describeRouteTablesResponse_nextToken,
+    describeRouteTablesResponse_routeTables,
+    describeRouteTablesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeRouteTables' smart constructor.
+data DescribeRouteTables = DescribeRouteTables'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @association.route-table-association-id@ - The ID of an association
+    --     ID for the route table.
+    --
+    -- -   @association.route-table-id@ - The ID of the route table involved in
+    --     the association.
+    --
+    -- -   @association.subnet-id@ - The ID of the subnet involved in the
+    --     association.
+    --
+    -- -   @association.main@ - Indicates whether the route table is the main
+    --     route table for the VPC (@true@ | @false@). Route tables that do not
+    --     have an association ID are not returned in the response.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     route table.
+    --
+    -- -   @route-table-id@ - The ID of the route table.
+    --
+    -- -   @route.destination-cidr-block@ - The IPv4 CIDR range specified in a
+    --     route in the table.
+    --
+    -- -   @route.destination-ipv6-cidr-block@ - The IPv6 CIDR range specified
+    --     in a route in the route table.
+    --
+    -- -   @route.destination-prefix-list-id@ - The ID (prefix) of the Amazon
+    --     Web Service specified in a route in the table.
+    --
+    -- -   @route.egress-only-internet-gateway-id@ - The ID of an egress-only
+    --     Internet gateway specified in a route in the route table.
+    --
+    -- -   @route.gateway-id@ - The ID of a gateway specified in a route in the
+    --     table.
+    --
+    -- -   @route.instance-id@ - The ID of an instance specified in a route in
+    --     the table.
+    --
+    -- -   @route.nat-gateway-id@ - The ID of a NAT gateway.
+    --
+    -- -   @route.transit-gateway-id@ - The ID of a transit gateway.
+    --
+    -- -   @route.origin@ - Describes how the route was created.
+    --     @CreateRouteTable@ indicates that the route was automatically
+    --     created when the route table was created; @CreateRoute@ indicates
+    --     that the route was manually added to the route table;
+    --     @EnableVgwRoutePropagation@ indicates that the route was propagated
+    --     by route propagation.
+    --
+    -- -   @route.state@ - The state of a route in the route table (@active@ |
+    --     @blackhole@). The blackhole state indicates that the route\'s target
+    --     isn\'t available (for example, the specified gateway isn\'t attached
+    --     to the VPC, the specified NAT instance has been terminated, and so
+    --     on).
+    --
+    -- -   @route.vpc-peering-connection-id@ - The ID of a VPC peering
+    --     connection specified in a route in the table.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC for the route table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more route table IDs.
+    --
+    -- Default: Describes all your route tables.
+    routeTableIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRouteTables' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeRouteTables_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeRouteTables_filters' - One or more filters.
+--
+-- -   @association.route-table-association-id@ - The ID of an association
+--     ID for the route table.
+--
+-- -   @association.route-table-id@ - The ID of the route table involved in
+--     the association.
+--
+-- -   @association.subnet-id@ - The ID of the subnet involved in the
+--     association.
+--
+-- -   @association.main@ - Indicates whether the route table is the main
+--     route table for the VPC (@true@ | @false@). Route tables that do not
+--     have an association ID are not returned in the response.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     route table.
+--
+-- -   @route-table-id@ - The ID of the route table.
+--
+-- -   @route.destination-cidr-block@ - The IPv4 CIDR range specified in a
+--     route in the table.
+--
+-- -   @route.destination-ipv6-cidr-block@ - The IPv6 CIDR range specified
+--     in a route in the route table.
+--
+-- -   @route.destination-prefix-list-id@ - The ID (prefix) of the Amazon
+--     Web Service specified in a route in the table.
+--
+-- -   @route.egress-only-internet-gateway-id@ - The ID of an egress-only
+--     Internet gateway specified in a route in the route table.
+--
+-- -   @route.gateway-id@ - The ID of a gateway specified in a route in the
+--     table.
+--
+-- -   @route.instance-id@ - The ID of an instance specified in a route in
+--     the table.
+--
+-- -   @route.nat-gateway-id@ - The ID of a NAT gateway.
+--
+-- -   @route.transit-gateway-id@ - The ID of a transit gateway.
+--
+-- -   @route.origin@ - Describes how the route was created.
+--     @CreateRouteTable@ indicates that the route was automatically
+--     created when the route table was created; @CreateRoute@ indicates
+--     that the route was manually added to the route table;
+--     @EnableVgwRoutePropagation@ indicates that the route was propagated
+--     by route propagation.
+--
+-- -   @route.state@ - The state of a route in the route table (@active@ |
+--     @blackhole@). The blackhole state indicates that the route\'s target
+--     isn\'t available (for example, the specified gateway isn\'t attached
+--     to the VPC, the specified NAT instance has been terminated, and so
+--     on).
+--
+-- -   @route.vpc-peering-connection-id@ - The ID of a VPC peering
+--     connection specified in a route in the table.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the route table.
+--
+-- 'maxResults', 'describeRouteTables_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeRouteTables_nextToken' - The token for the next page of results.
+--
+-- 'routeTableIds', 'describeRouteTables_routeTableIds' - One or more route table IDs.
+--
+-- Default: Describes all your route tables.
+newDescribeRouteTables ::
+  DescribeRouteTables
+newDescribeRouteTables =
+  DescribeRouteTables'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      routeTableIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeRouteTables_dryRun :: Lens.Lens' DescribeRouteTables (Prelude.Maybe Prelude.Bool)
+describeRouteTables_dryRun = Lens.lens (\DescribeRouteTables' {dryRun} -> dryRun) (\s@DescribeRouteTables' {} a -> s {dryRun = a} :: DescribeRouteTables)
+
+-- | One or more filters.
+--
+-- -   @association.route-table-association-id@ - The ID of an association
+--     ID for the route table.
+--
+-- -   @association.route-table-id@ - The ID of the route table involved in
+--     the association.
+--
+-- -   @association.subnet-id@ - The ID of the subnet involved in the
+--     association.
+--
+-- -   @association.main@ - Indicates whether the route table is the main
+--     route table for the VPC (@true@ | @false@). Route tables that do not
+--     have an association ID are not returned in the response.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     route table.
+--
+-- -   @route-table-id@ - The ID of the route table.
+--
+-- -   @route.destination-cidr-block@ - The IPv4 CIDR range specified in a
+--     route in the table.
+--
+-- -   @route.destination-ipv6-cidr-block@ - The IPv6 CIDR range specified
+--     in a route in the route table.
+--
+-- -   @route.destination-prefix-list-id@ - The ID (prefix) of the Amazon
+--     Web Service specified in a route in the table.
+--
+-- -   @route.egress-only-internet-gateway-id@ - The ID of an egress-only
+--     Internet gateway specified in a route in the route table.
+--
+-- -   @route.gateway-id@ - The ID of a gateway specified in a route in the
+--     table.
+--
+-- -   @route.instance-id@ - The ID of an instance specified in a route in
+--     the table.
+--
+-- -   @route.nat-gateway-id@ - The ID of a NAT gateway.
+--
+-- -   @route.transit-gateway-id@ - The ID of a transit gateway.
+--
+-- -   @route.origin@ - Describes how the route was created.
+--     @CreateRouteTable@ indicates that the route was automatically
+--     created when the route table was created; @CreateRoute@ indicates
+--     that the route was manually added to the route table;
+--     @EnableVgwRoutePropagation@ indicates that the route was propagated
+--     by route propagation.
+--
+-- -   @route.state@ - The state of a route in the route table (@active@ |
+--     @blackhole@). The blackhole state indicates that the route\'s target
+--     isn\'t available (for example, the specified gateway isn\'t attached
+--     to the VPC, the specified NAT instance has been terminated, and so
+--     on).
+--
+-- -   @route.vpc-peering-connection-id@ - The ID of a VPC peering
+--     connection specified in a route in the table.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the route table.
+describeRouteTables_filters :: Lens.Lens' DescribeRouteTables (Prelude.Maybe [Filter])
+describeRouteTables_filters = Lens.lens (\DescribeRouteTables' {filters} -> filters) (\s@DescribeRouteTables' {} a -> s {filters = a} :: DescribeRouteTables) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeRouteTables_maxResults :: Lens.Lens' DescribeRouteTables (Prelude.Maybe Prelude.Natural)
+describeRouteTables_maxResults = Lens.lens (\DescribeRouteTables' {maxResults} -> maxResults) (\s@DescribeRouteTables' {} a -> s {maxResults = a} :: DescribeRouteTables)
+
+-- | The token for the next page of results.
+describeRouteTables_nextToken :: Lens.Lens' DescribeRouteTables (Prelude.Maybe Prelude.Text)
+describeRouteTables_nextToken = Lens.lens (\DescribeRouteTables' {nextToken} -> nextToken) (\s@DescribeRouteTables' {} a -> s {nextToken = a} :: DescribeRouteTables)
+
+-- | One or more route table IDs.
+--
+-- Default: Describes all your route tables.
+describeRouteTables_routeTableIds :: Lens.Lens' DescribeRouteTables (Prelude.Maybe [Prelude.Text])
+describeRouteTables_routeTableIds = Lens.lens (\DescribeRouteTables' {routeTableIds} -> routeTableIds) (\s@DescribeRouteTables' {} a -> s {routeTableIds = a} :: DescribeRouteTables) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeRouteTables where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeRouteTablesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeRouteTablesResponse_routeTables
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeRouteTables_nextToken
+          Lens..~ rs
+          Lens.^? describeRouteTablesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeRouteTables where
+  type
+    AWSResponse DescribeRouteTables =
+      DescribeRouteTablesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeRouteTablesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "routeTableSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeRouteTables where
+  hashWithSalt _salt DescribeRouteTables' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` routeTableIds
+
+instance Prelude.NFData DescribeRouteTables where
+  rnf DescribeRouteTables' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf routeTableIds
+
+instance Data.ToHeaders DescribeRouteTables where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeRouteTables where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeRouteTables where
+  toQuery DescribeRouteTables' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeRouteTables" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "RouteTableId"
+              Prelude.<$> routeTableIds
+          )
+      ]
+
+-- | Contains the output of DescribeRouteTables.
+--
+-- /See:/ 'newDescribeRouteTablesResponse' smart constructor.
+data DescribeRouteTablesResponse = DescribeRouteTablesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more route tables.
+    routeTables :: Prelude.Maybe [RouteTable],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeRouteTablesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeRouteTablesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'routeTables', 'describeRouteTablesResponse_routeTables' - Information about one or more route tables.
+--
+-- 'httpStatus', 'describeRouteTablesResponse_httpStatus' - The response's http status code.
+newDescribeRouteTablesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeRouteTablesResponse
+newDescribeRouteTablesResponse pHttpStatus_ =
+  DescribeRouteTablesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      routeTables = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeRouteTablesResponse_nextToken :: Lens.Lens' DescribeRouteTablesResponse (Prelude.Maybe Prelude.Text)
+describeRouteTablesResponse_nextToken = Lens.lens (\DescribeRouteTablesResponse' {nextToken} -> nextToken) (\s@DescribeRouteTablesResponse' {} a -> s {nextToken = a} :: DescribeRouteTablesResponse)
+
+-- | Information about one or more route tables.
+describeRouteTablesResponse_routeTables :: Lens.Lens' DescribeRouteTablesResponse (Prelude.Maybe [RouteTable])
+describeRouteTablesResponse_routeTables = Lens.lens (\DescribeRouteTablesResponse' {routeTables} -> routeTables) (\s@DescribeRouteTablesResponse' {} a -> s {routeTables = a} :: DescribeRouteTablesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeRouteTablesResponse_httpStatus :: Lens.Lens' DescribeRouteTablesResponse Prelude.Int
+describeRouteTablesResponse_httpStatus = Lens.lens (\DescribeRouteTablesResponse' {httpStatus} -> httpStatus) (\s@DescribeRouteTablesResponse' {} a -> s {httpStatus = a} :: DescribeRouteTablesResponse)
+
+instance Prelude.NFData DescribeRouteTablesResponse where
+  rnf DescribeRouteTablesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf routeTables
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeScheduledInstanceAvailability.hs b/gen/Amazonka/EC2/DescribeScheduledInstanceAvailability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeScheduledInstanceAvailability.hs
@@ -0,0 +1,412 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeScheduledInstanceAvailability
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Finds available schedules that meet the specified criteria.
+--
+-- You can search for an available schedule no more than 3 months in
+-- advance. You must meet the minimum required duration of 1,200 hours per
+-- year. For example, the minimum daily schedule is 4 hours, the minimum
+-- weekly schedule is 24 hours, and the minimum monthly schedule is 100
+-- hours.
+--
+-- After you find a schedule that meets your needs, call
+-- PurchaseScheduledInstances to purchase Scheduled Instances with that
+-- schedule.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeScheduledInstanceAvailability
+  ( -- * Creating a Request
+    DescribeScheduledInstanceAvailability (..),
+    newDescribeScheduledInstanceAvailability,
+
+    -- * Request Lenses
+    describeScheduledInstanceAvailability_dryRun,
+    describeScheduledInstanceAvailability_filters,
+    describeScheduledInstanceAvailability_maxResults,
+    describeScheduledInstanceAvailability_maxSlotDurationInHours,
+    describeScheduledInstanceAvailability_minSlotDurationInHours,
+    describeScheduledInstanceAvailability_nextToken,
+    describeScheduledInstanceAvailability_firstSlotStartTimeRange,
+    describeScheduledInstanceAvailability_recurrence,
+
+    -- * Destructuring the Response
+    DescribeScheduledInstanceAvailabilityResponse (..),
+    newDescribeScheduledInstanceAvailabilityResponse,
+
+    -- * Response Lenses
+    describeScheduledInstanceAvailabilityResponse_nextToken,
+    describeScheduledInstanceAvailabilityResponse_scheduledInstanceAvailabilitySet,
+    describeScheduledInstanceAvailabilityResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeScheduledInstanceAvailability.
+--
+-- /See:/ 'newDescribeScheduledInstanceAvailability' smart constructor.
+data DescribeScheduledInstanceAvailability = DescribeScheduledInstanceAvailability'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone (for example,
+    --     @us-west-2a@).
+    --
+    -- -   @instance-type@ - The instance type (for example, @c4.large@).
+    --
+    -- -   @network-platform@ - The network platform (@EC2-Classic@ or
+    --     @EC2-VPC@).
+    --
+    -- -   @platform@ - The platform (@Linux\/UNIX@ or @Windows@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. This value can
+    -- be between 5 and 300. The default value is 300. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum available duration, in hours. This value must be greater
+    -- than @MinSlotDurationInHours@ and less than 1,720.
+    maxSlotDurationInHours :: Prelude.Maybe Prelude.Int,
+    -- | The minimum available duration, in hours. The minimum required duration
+    -- is 1,200 hours per year. For example, the minimum daily schedule is 4
+    -- hours, the minimum weekly schedule is 24 hours, and the minimum monthly
+    -- schedule is 100 hours.
+    minSlotDurationInHours :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The time period for the first schedule to start.
+    firstSlotStartTimeRange :: SlotDateTimeRangeRequest,
+    -- | The schedule recurrence.
+    recurrence :: ScheduledInstanceRecurrenceRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeScheduledInstanceAvailability' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeScheduledInstanceAvailability_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeScheduledInstanceAvailability_filters' - The filters.
+--
+-- -   @availability-zone@ - The Availability Zone (for example,
+--     @us-west-2a@).
+--
+-- -   @instance-type@ - The instance type (for example, @c4.large@).
+--
+-- -   @network-platform@ - The network platform (@EC2-Classic@ or
+--     @EC2-VPC@).
+--
+-- -   @platform@ - The platform (@Linux\/UNIX@ or @Windows@).
+--
+-- 'maxResults', 'describeScheduledInstanceAvailability_maxResults' - The maximum number of results to return in a single call. This value can
+-- be between 5 and 300. The default value is 300. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'maxSlotDurationInHours', 'describeScheduledInstanceAvailability_maxSlotDurationInHours' - The maximum available duration, in hours. This value must be greater
+-- than @MinSlotDurationInHours@ and less than 1,720.
+--
+-- 'minSlotDurationInHours', 'describeScheduledInstanceAvailability_minSlotDurationInHours' - The minimum available duration, in hours. The minimum required duration
+-- is 1,200 hours per year. For example, the minimum daily schedule is 4
+-- hours, the minimum weekly schedule is 24 hours, and the minimum monthly
+-- schedule is 100 hours.
+--
+-- 'nextToken', 'describeScheduledInstanceAvailability_nextToken' - The token for the next set of results.
+--
+-- 'firstSlotStartTimeRange', 'describeScheduledInstanceAvailability_firstSlotStartTimeRange' - The time period for the first schedule to start.
+--
+-- 'recurrence', 'describeScheduledInstanceAvailability_recurrence' - The schedule recurrence.
+newDescribeScheduledInstanceAvailability ::
+  -- | 'firstSlotStartTimeRange'
+  SlotDateTimeRangeRequest ->
+  -- | 'recurrence'
+  ScheduledInstanceRecurrenceRequest ->
+  DescribeScheduledInstanceAvailability
+newDescribeScheduledInstanceAvailability
+  pFirstSlotStartTimeRange_
+  pRecurrence_ =
+    DescribeScheduledInstanceAvailability'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        maxSlotDurationInHours =
+          Prelude.Nothing,
+        minSlotDurationInHours =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        firstSlotStartTimeRange =
+          pFirstSlotStartTimeRange_,
+        recurrence = pRecurrence_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeScheduledInstanceAvailability_dryRun :: Lens.Lens' DescribeScheduledInstanceAvailability (Prelude.Maybe Prelude.Bool)
+describeScheduledInstanceAvailability_dryRun = Lens.lens (\DescribeScheduledInstanceAvailability' {dryRun} -> dryRun) (\s@DescribeScheduledInstanceAvailability' {} a -> s {dryRun = a} :: DescribeScheduledInstanceAvailability)
+
+-- | The filters.
+--
+-- -   @availability-zone@ - The Availability Zone (for example,
+--     @us-west-2a@).
+--
+-- -   @instance-type@ - The instance type (for example, @c4.large@).
+--
+-- -   @network-platform@ - The network platform (@EC2-Classic@ or
+--     @EC2-VPC@).
+--
+-- -   @platform@ - The platform (@Linux\/UNIX@ or @Windows@).
+describeScheduledInstanceAvailability_filters :: Lens.Lens' DescribeScheduledInstanceAvailability (Prelude.Maybe [Filter])
+describeScheduledInstanceAvailability_filters = Lens.lens (\DescribeScheduledInstanceAvailability' {filters} -> filters) (\s@DescribeScheduledInstanceAvailability' {} a -> s {filters = a} :: DescribeScheduledInstanceAvailability) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. This value can
+-- be between 5 and 300. The default value is 300. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeScheduledInstanceAvailability_maxResults :: Lens.Lens' DescribeScheduledInstanceAvailability (Prelude.Maybe Prelude.Natural)
+describeScheduledInstanceAvailability_maxResults = Lens.lens (\DescribeScheduledInstanceAvailability' {maxResults} -> maxResults) (\s@DescribeScheduledInstanceAvailability' {} a -> s {maxResults = a} :: DescribeScheduledInstanceAvailability)
+
+-- | The maximum available duration, in hours. This value must be greater
+-- than @MinSlotDurationInHours@ and less than 1,720.
+describeScheduledInstanceAvailability_maxSlotDurationInHours :: Lens.Lens' DescribeScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+describeScheduledInstanceAvailability_maxSlotDurationInHours = Lens.lens (\DescribeScheduledInstanceAvailability' {maxSlotDurationInHours} -> maxSlotDurationInHours) (\s@DescribeScheduledInstanceAvailability' {} a -> s {maxSlotDurationInHours = a} :: DescribeScheduledInstanceAvailability)
+
+-- | The minimum available duration, in hours. The minimum required duration
+-- is 1,200 hours per year. For example, the minimum daily schedule is 4
+-- hours, the minimum weekly schedule is 24 hours, and the minimum monthly
+-- schedule is 100 hours.
+describeScheduledInstanceAvailability_minSlotDurationInHours :: Lens.Lens' DescribeScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+describeScheduledInstanceAvailability_minSlotDurationInHours = Lens.lens (\DescribeScheduledInstanceAvailability' {minSlotDurationInHours} -> minSlotDurationInHours) (\s@DescribeScheduledInstanceAvailability' {} a -> s {minSlotDurationInHours = a} :: DescribeScheduledInstanceAvailability)
+
+-- | The token for the next set of results.
+describeScheduledInstanceAvailability_nextToken :: Lens.Lens' DescribeScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+describeScheduledInstanceAvailability_nextToken = Lens.lens (\DescribeScheduledInstanceAvailability' {nextToken} -> nextToken) (\s@DescribeScheduledInstanceAvailability' {} a -> s {nextToken = a} :: DescribeScheduledInstanceAvailability)
+
+-- | The time period for the first schedule to start.
+describeScheduledInstanceAvailability_firstSlotStartTimeRange :: Lens.Lens' DescribeScheduledInstanceAvailability SlotDateTimeRangeRequest
+describeScheduledInstanceAvailability_firstSlotStartTimeRange = Lens.lens (\DescribeScheduledInstanceAvailability' {firstSlotStartTimeRange} -> firstSlotStartTimeRange) (\s@DescribeScheduledInstanceAvailability' {} a -> s {firstSlotStartTimeRange = a} :: DescribeScheduledInstanceAvailability)
+
+-- | The schedule recurrence.
+describeScheduledInstanceAvailability_recurrence :: Lens.Lens' DescribeScheduledInstanceAvailability ScheduledInstanceRecurrenceRequest
+describeScheduledInstanceAvailability_recurrence = Lens.lens (\DescribeScheduledInstanceAvailability' {recurrence} -> recurrence) (\s@DescribeScheduledInstanceAvailability' {} a -> s {recurrence = a} :: DescribeScheduledInstanceAvailability)
+
+instance
+  Core.AWSPager
+    DescribeScheduledInstanceAvailability
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeScheduledInstanceAvailabilityResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeScheduledInstanceAvailabilityResponse_scheduledInstanceAvailabilitySet
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeScheduledInstanceAvailability_nextToken
+          Lens..~ rs
+          Lens.^? describeScheduledInstanceAvailabilityResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeScheduledInstanceAvailability
+  where
+  type
+    AWSResponse
+      DescribeScheduledInstanceAvailability =
+      DescribeScheduledInstanceAvailabilityResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeScheduledInstanceAvailabilityResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "scheduledInstanceAvailabilitySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeScheduledInstanceAvailability
+  where
+  hashWithSalt
+    _salt
+    DescribeScheduledInstanceAvailability' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` maxSlotDurationInHours
+        `Prelude.hashWithSalt` minSlotDurationInHours
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` firstSlotStartTimeRange
+        `Prelude.hashWithSalt` recurrence
+
+instance
+  Prelude.NFData
+    DescribeScheduledInstanceAvailability
+  where
+  rnf DescribeScheduledInstanceAvailability' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf maxSlotDurationInHours
+      `Prelude.seq` Prelude.rnf minSlotDurationInHours
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf firstSlotStartTimeRange
+      `Prelude.seq` Prelude.rnf recurrence
+
+instance
+  Data.ToHeaders
+    DescribeScheduledInstanceAvailability
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeScheduledInstanceAvailability
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeScheduledInstanceAvailability
+  where
+  toQuery DescribeScheduledInstanceAvailability' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeScheduledInstanceAvailability" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "MaxSlotDurationInHours"
+          Data.=: maxSlotDurationInHours,
+        "MinSlotDurationInHours"
+          Data.=: minSlotDurationInHours,
+        "NextToken" Data.=: nextToken,
+        "FirstSlotStartTimeRange"
+          Data.=: firstSlotStartTimeRange,
+        "Recurrence" Data.=: recurrence
+      ]
+
+-- | Contains the output of DescribeScheduledInstanceAvailability.
+--
+-- /See:/ 'newDescribeScheduledInstanceAvailabilityResponse' smart constructor.
+data DescribeScheduledInstanceAvailabilityResponse = DescribeScheduledInstanceAvailabilityResponse'
+  { -- | The token required to retrieve the next set of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the available Scheduled Instances.
+    scheduledInstanceAvailabilitySet :: Prelude.Maybe [ScheduledInstanceAvailability],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeScheduledInstanceAvailabilityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeScheduledInstanceAvailabilityResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'scheduledInstanceAvailabilitySet', 'describeScheduledInstanceAvailabilityResponse_scheduledInstanceAvailabilitySet' - Information about the available Scheduled Instances.
+--
+-- 'httpStatus', 'describeScheduledInstanceAvailabilityResponse_httpStatus' - The response's http status code.
+newDescribeScheduledInstanceAvailabilityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeScheduledInstanceAvailabilityResponse
+newDescribeScheduledInstanceAvailabilityResponse
+  pHttpStatus_ =
+    DescribeScheduledInstanceAvailabilityResponse'
+      { nextToken =
+          Prelude.Nothing,
+        scheduledInstanceAvailabilitySet =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+describeScheduledInstanceAvailabilityResponse_nextToken :: Lens.Lens' DescribeScheduledInstanceAvailabilityResponse (Prelude.Maybe Prelude.Text)
+describeScheduledInstanceAvailabilityResponse_nextToken = Lens.lens (\DescribeScheduledInstanceAvailabilityResponse' {nextToken} -> nextToken) (\s@DescribeScheduledInstanceAvailabilityResponse' {} a -> s {nextToken = a} :: DescribeScheduledInstanceAvailabilityResponse)
+
+-- | Information about the available Scheduled Instances.
+describeScheduledInstanceAvailabilityResponse_scheduledInstanceAvailabilitySet :: Lens.Lens' DescribeScheduledInstanceAvailabilityResponse (Prelude.Maybe [ScheduledInstanceAvailability])
+describeScheduledInstanceAvailabilityResponse_scheduledInstanceAvailabilitySet = Lens.lens (\DescribeScheduledInstanceAvailabilityResponse' {scheduledInstanceAvailabilitySet} -> scheduledInstanceAvailabilitySet) (\s@DescribeScheduledInstanceAvailabilityResponse' {} a -> s {scheduledInstanceAvailabilitySet = a} :: DescribeScheduledInstanceAvailabilityResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeScheduledInstanceAvailabilityResponse_httpStatus :: Lens.Lens' DescribeScheduledInstanceAvailabilityResponse Prelude.Int
+describeScheduledInstanceAvailabilityResponse_httpStatus = Lens.lens (\DescribeScheduledInstanceAvailabilityResponse' {httpStatus} -> httpStatus) (\s@DescribeScheduledInstanceAvailabilityResponse' {} a -> s {httpStatus = a} :: DescribeScheduledInstanceAvailabilityResponse)
+
+instance
+  Prelude.NFData
+    DescribeScheduledInstanceAvailabilityResponse
+  where
+  rnf
+    DescribeScheduledInstanceAvailabilityResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf scheduledInstanceAvailabilitySet
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeScheduledInstances.hs b/gen/Amazonka/EC2/DescribeScheduledInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeScheduledInstances.hs
@@ -0,0 +1,327 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeScheduledInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified Scheduled Instances or all your Scheduled
+-- Instances.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeScheduledInstances
+  ( -- * Creating a Request
+    DescribeScheduledInstances (..),
+    newDescribeScheduledInstances,
+
+    -- * Request Lenses
+    describeScheduledInstances_dryRun,
+    describeScheduledInstances_filters,
+    describeScheduledInstances_maxResults,
+    describeScheduledInstances_nextToken,
+    describeScheduledInstances_scheduledInstanceIds,
+    describeScheduledInstances_slotStartTimeRange,
+
+    -- * Destructuring the Response
+    DescribeScheduledInstancesResponse (..),
+    newDescribeScheduledInstancesResponse,
+
+    -- * Response Lenses
+    describeScheduledInstancesResponse_nextToken,
+    describeScheduledInstancesResponse_scheduledInstanceSet,
+    describeScheduledInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeScheduledInstances.
+--
+-- /See:/ 'newDescribeScheduledInstances' smart constructor.
+data DescribeScheduledInstances = DescribeScheduledInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone (for example,
+    --     @us-west-2a@).
+    --
+    -- -   @instance-type@ - The instance type (for example, @c4.large@).
+    --
+    -- -   @network-platform@ - The network platform (@EC2-Classic@ or
+    --     @EC2-VPC@).
+    --
+    -- -   @platform@ - The platform (@Linux\/UNIX@ or @Windows@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. This value can
+    -- be between 5 and 300. The default value is 100. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Scheduled Instance IDs.
+    scheduledInstanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The time period for the first schedule to start.
+    slotStartTimeRange :: Prelude.Maybe SlotStartTimeRangeRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeScheduledInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeScheduledInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeScheduledInstances_filters' - The filters.
+--
+-- -   @availability-zone@ - The Availability Zone (for example,
+--     @us-west-2a@).
+--
+-- -   @instance-type@ - The instance type (for example, @c4.large@).
+--
+-- -   @network-platform@ - The network platform (@EC2-Classic@ or
+--     @EC2-VPC@).
+--
+-- -   @platform@ - The platform (@Linux\/UNIX@ or @Windows@).
+--
+-- 'maxResults', 'describeScheduledInstances_maxResults' - The maximum number of results to return in a single call. This value can
+-- be between 5 and 300. The default value is 100. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeScheduledInstances_nextToken' - The token for the next set of results.
+--
+-- 'scheduledInstanceIds', 'describeScheduledInstances_scheduledInstanceIds' - The Scheduled Instance IDs.
+--
+-- 'slotStartTimeRange', 'describeScheduledInstances_slotStartTimeRange' - The time period for the first schedule to start.
+newDescribeScheduledInstances ::
+  DescribeScheduledInstances
+newDescribeScheduledInstances =
+  DescribeScheduledInstances'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      scheduledInstanceIds = Prelude.Nothing,
+      slotStartTimeRange = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeScheduledInstances_dryRun :: Lens.Lens' DescribeScheduledInstances (Prelude.Maybe Prelude.Bool)
+describeScheduledInstances_dryRun = Lens.lens (\DescribeScheduledInstances' {dryRun} -> dryRun) (\s@DescribeScheduledInstances' {} a -> s {dryRun = a} :: DescribeScheduledInstances)
+
+-- | The filters.
+--
+-- -   @availability-zone@ - The Availability Zone (for example,
+--     @us-west-2a@).
+--
+-- -   @instance-type@ - The instance type (for example, @c4.large@).
+--
+-- -   @network-platform@ - The network platform (@EC2-Classic@ or
+--     @EC2-VPC@).
+--
+-- -   @platform@ - The platform (@Linux\/UNIX@ or @Windows@).
+describeScheduledInstances_filters :: Lens.Lens' DescribeScheduledInstances (Prelude.Maybe [Filter])
+describeScheduledInstances_filters = Lens.lens (\DescribeScheduledInstances' {filters} -> filters) (\s@DescribeScheduledInstances' {} a -> s {filters = a} :: DescribeScheduledInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. This value can
+-- be between 5 and 300. The default value is 100. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeScheduledInstances_maxResults :: Lens.Lens' DescribeScheduledInstances (Prelude.Maybe Prelude.Int)
+describeScheduledInstances_maxResults = Lens.lens (\DescribeScheduledInstances' {maxResults} -> maxResults) (\s@DescribeScheduledInstances' {} a -> s {maxResults = a} :: DescribeScheduledInstances)
+
+-- | The token for the next set of results.
+describeScheduledInstances_nextToken :: Lens.Lens' DescribeScheduledInstances (Prelude.Maybe Prelude.Text)
+describeScheduledInstances_nextToken = Lens.lens (\DescribeScheduledInstances' {nextToken} -> nextToken) (\s@DescribeScheduledInstances' {} a -> s {nextToken = a} :: DescribeScheduledInstances)
+
+-- | The Scheduled Instance IDs.
+describeScheduledInstances_scheduledInstanceIds :: Lens.Lens' DescribeScheduledInstances (Prelude.Maybe [Prelude.Text])
+describeScheduledInstances_scheduledInstanceIds = Lens.lens (\DescribeScheduledInstances' {scheduledInstanceIds} -> scheduledInstanceIds) (\s@DescribeScheduledInstances' {} a -> s {scheduledInstanceIds = a} :: DescribeScheduledInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time period for the first schedule to start.
+describeScheduledInstances_slotStartTimeRange :: Lens.Lens' DescribeScheduledInstances (Prelude.Maybe SlotStartTimeRangeRequest)
+describeScheduledInstances_slotStartTimeRange = Lens.lens (\DescribeScheduledInstances' {slotStartTimeRange} -> slotStartTimeRange) (\s@DescribeScheduledInstances' {} a -> s {slotStartTimeRange = a} :: DescribeScheduledInstances)
+
+instance Core.AWSPager DescribeScheduledInstances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeScheduledInstancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeScheduledInstancesResponse_scheduledInstanceSet
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeScheduledInstances_nextToken
+          Lens..~ rs
+          Lens.^? describeScheduledInstancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeScheduledInstances where
+  type
+    AWSResponse DescribeScheduledInstances =
+      DescribeScheduledInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeScheduledInstancesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "scheduledInstanceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeScheduledInstances where
+  hashWithSalt _salt DescribeScheduledInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` scheduledInstanceIds
+      `Prelude.hashWithSalt` slotStartTimeRange
+
+instance Prelude.NFData DescribeScheduledInstances where
+  rnf DescribeScheduledInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf scheduledInstanceIds
+      `Prelude.seq` Prelude.rnf slotStartTimeRange
+
+instance Data.ToHeaders DescribeScheduledInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeScheduledInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeScheduledInstances where
+  toQuery DescribeScheduledInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeScheduledInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "ScheduledInstanceId"
+              Prelude.<$> scheduledInstanceIds
+          ),
+        "SlotStartTimeRange" Data.=: slotStartTimeRange
+      ]
+
+-- | Contains the output of DescribeScheduledInstances.
+--
+-- /See:/ 'newDescribeScheduledInstancesResponse' smart constructor.
+data DescribeScheduledInstancesResponse = DescribeScheduledInstancesResponse'
+  { -- | The token required to retrieve the next set of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Scheduled Instances.
+    scheduledInstanceSet :: Prelude.Maybe [ScheduledInstance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeScheduledInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeScheduledInstancesResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'scheduledInstanceSet', 'describeScheduledInstancesResponse_scheduledInstanceSet' - Information about the Scheduled Instances.
+--
+-- 'httpStatus', 'describeScheduledInstancesResponse_httpStatus' - The response's http status code.
+newDescribeScheduledInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeScheduledInstancesResponse
+newDescribeScheduledInstancesResponse pHttpStatus_ =
+  DescribeScheduledInstancesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      scheduledInstanceSet = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+describeScheduledInstancesResponse_nextToken :: Lens.Lens' DescribeScheduledInstancesResponse (Prelude.Maybe Prelude.Text)
+describeScheduledInstancesResponse_nextToken = Lens.lens (\DescribeScheduledInstancesResponse' {nextToken} -> nextToken) (\s@DescribeScheduledInstancesResponse' {} a -> s {nextToken = a} :: DescribeScheduledInstancesResponse)
+
+-- | Information about the Scheduled Instances.
+describeScheduledInstancesResponse_scheduledInstanceSet :: Lens.Lens' DescribeScheduledInstancesResponse (Prelude.Maybe [ScheduledInstance])
+describeScheduledInstancesResponse_scheduledInstanceSet = Lens.lens (\DescribeScheduledInstancesResponse' {scheduledInstanceSet} -> scheduledInstanceSet) (\s@DescribeScheduledInstancesResponse' {} a -> s {scheduledInstanceSet = a} :: DescribeScheduledInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeScheduledInstancesResponse_httpStatus :: Lens.Lens' DescribeScheduledInstancesResponse Prelude.Int
+describeScheduledInstancesResponse_httpStatus = Lens.lens (\DescribeScheduledInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeScheduledInstancesResponse' {} a -> s {httpStatus = a} :: DescribeScheduledInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeScheduledInstancesResponse
+  where
+  rnf DescribeScheduledInstancesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf scheduledInstanceSet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSecurityGroupReferences.hs b/gen/Amazonka/EC2/DescribeSecurityGroupReferences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSecurityGroupReferences.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSecurityGroupReferences
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- [VPC only] Describes the VPCs on the other side of a VPC peering
+-- connection that are referencing the security groups you\'ve specified in
+-- this request.
+module Amazonka.EC2.DescribeSecurityGroupReferences
+  ( -- * Creating a Request
+    DescribeSecurityGroupReferences (..),
+    newDescribeSecurityGroupReferences,
+
+    -- * Request Lenses
+    describeSecurityGroupReferences_dryRun,
+    describeSecurityGroupReferences_groupId,
+
+    -- * Destructuring the Response
+    DescribeSecurityGroupReferencesResponse (..),
+    newDescribeSecurityGroupReferencesResponse,
+
+    -- * Response Lenses
+    describeSecurityGroupReferencesResponse_securityGroupReferenceSet,
+    describeSecurityGroupReferencesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSecurityGroupReferences' smart constructor.
+data DescribeSecurityGroupReferences = DescribeSecurityGroupReferences'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the security groups in your account.
+    groupId :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSecurityGroupReferences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSecurityGroupReferences_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupId', 'describeSecurityGroupReferences_groupId' - The IDs of the security groups in your account.
+newDescribeSecurityGroupReferences ::
+  DescribeSecurityGroupReferences
+newDescribeSecurityGroupReferences =
+  DescribeSecurityGroupReferences'
+    { dryRun =
+        Prelude.Nothing,
+      groupId = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSecurityGroupReferences_dryRun :: Lens.Lens' DescribeSecurityGroupReferences (Prelude.Maybe Prelude.Bool)
+describeSecurityGroupReferences_dryRun = Lens.lens (\DescribeSecurityGroupReferences' {dryRun} -> dryRun) (\s@DescribeSecurityGroupReferences' {} a -> s {dryRun = a} :: DescribeSecurityGroupReferences)
+
+-- | The IDs of the security groups in your account.
+describeSecurityGroupReferences_groupId :: Lens.Lens' DescribeSecurityGroupReferences [Prelude.Text]
+describeSecurityGroupReferences_groupId = Lens.lens (\DescribeSecurityGroupReferences' {groupId} -> groupId) (\s@DescribeSecurityGroupReferences' {} a -> s {groupId = a} :: DescribeSecurityGroupReferences) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    DescribeSecurityGroupReferences
+  where
+  type
+    AWSResponse DescribeSecurityGroupReferences =
+      DescribeSecurityGroupReferencesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSecurityGroupReferencesResponse'
+            Prelude.<$> ( x
+                            Data..@? "securityGroupReferenceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeSecurityGroupReferences
+  where
+  hashWithSalt
+    _salt
+    DescribeSecurityGroupReferences' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupId
+
+instance
+  Prelude.NFData
+    DescribeSecurityGroupReferences
+  where
+  rnf DescribeSecurityGroupReferences' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupId
+
+instance
+  Data.ToHeaders
+    DescribeSecurityGroupReferences
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSecurityGroupReferences where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSecurityGroupReferences where
+  toQuery DescribeSecurityGroupReferences' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeSecurityGroupReferences" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "GroupId" groupId
+      ]
+
+-- | /See:/ 'newDescribeSecurityGroupReferencesResponse' smart constructor.
+data DescribeSecurityGroupReferencesResponse = DescribeSecurityGroupReferencesResponse'
+  { -- | Information about the VPCs with the referencing security groups.
+    securityGroupReferenceSet :: Prelude.Maybe [SecurityGroupReference],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSecurityGroupReferencesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroupReferenceSet', 'describeSecurityGroupReferencesResponse_securityGroupReferenceSet' - Information about the VPCs with the referencing security groups.
+--
+-- 'httpStatus', 'describeSecurityGroupReferencesResponse_httpStatus' - The response's http status code.
+newDescribeSecurityGroupReferencesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSecurityGroupReferencesResponse
+newDescribeSecurityGroupReferencesResponse
+  pHttpStatus_ =
+    DescribeSecurityGroupReferencesResponse'
+      { securityGroupReferenceSet =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the VPCs with the referencing security groups.
+describeSecurityGroupReferencesResponse_securityGroupReferenceSet :: Lens.Lens' DescribeSecurityGroupReferencesResponse (Prelude.Maybe [SecurityGroupReference])
+describeSecurityGroupReferencesResponse_securityGroupReferenceSet = Lens.lens (\DescribeSecurityGroupReferencesResponse' {securityGroupReferenceSet} -> securityGroupReferenceSet) (\s@DescribeSecurityGroupReferencesResponse' {} a -> s {securityGroupReferenceSet = a} :: DescribeSecurityGroupReferencesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSecurityGroupReferencesResponse_httpStatus :: Lens.Lens' DescribeSecurityGroupReferencesResponse Prelude.Int
+describeSecurityGroupReferencesResponse_httpStatus = Lens.lens (\DescribeSecurityGroupReferencesResponse' {httpStatus} -> httpStatus) (\s@DescribeSecurityGroupReferencesResponse' {} a -> s {httpStatus = a} :: DescribeSecurityGroupReferencesResponse)
+
+instance
+  Prelude.NFData
+    DescribeSecurityGroupReferencesResponse
+  where
+  rnf DescribeSecurityGroupReferencesResponse' {..} =
+    Prelude.rnf securityGroupReferenceSet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSecurityGroupRules.hs b/gen/Amazonka/EC2/DescribeSecurityGroupRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSecurityGroupRules.hs
@@ -0,0 +1,309 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSecurityGroupRules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your security group rules.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSecurityGroupRules
+  ( -- * Creating a Request
+    DescribeSecurityGroupRules (..),
+    newDescribeSecurityGroupRules,
+
+    -- * Request Lenses
+    describeSecurityGroupRules_dryRun,
+    describeSecurityGroupRules_filters,
+    describeSecurityGroupRules_maxResults,
+    describeSecurityGroupRules_nextToken,
+    describeSecurityGroupRules_securityGroupRuleIds,
+
+    -- * Destructuring the Response
+    DescribeSecurityGroupRulesResponse (..),
+    newDescribeSecurityGroupRulesResponse,
+
+    -- * Response Lenses
+    describeSecurityGroupRulesResponse_nextToken,
+    describeSecurityGroupRulesResponse_securityGroupRules,
+    describeSecurityGroupRulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSecurityGroupRules' smart constructor.
+data DescribeSecurityGroupRules = DescribeSecurityGroupRules'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @group-id@ - The ID of the security group.
+    --
+    -- -   @security-group-rule-id@ - The ID of the security group rule.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another request with the returned
+    -- @NextToken@ value. This value can be between 5 and 1000. If this
+    -- parameter is not specified, then all results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the security group rules.
+    securityGroupRuleIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSecurityGroupRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSecurityGroupRules_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeSecurityGroupRules_filters' - One or more filters.
+--
+-- -   @group-id@ - The ID of the security group.
+--
+-- -   @security-group-rule-id@ - The ID of the security group rule.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- 'maxResults', 'describeSecurityGroupRules_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned
+-- @NextToken@ value. This value can be between 5 and 1000. If this
+-- parameter is not specified, then all results are returned.
+--
+-- 'nextToken', 'describeSecurityGroupRules_nextToken' - The token for the next page of results.
+--
+-- 'securityGroupRuleIds', 'describeSecurityGroupRules_securityGroupRuleIds' - The IDs of the security group rules.
+newDescribeSecurityGroupRules ::
+  DescribeSecurityGroupRules
+newDescribeSecurityGroupRules =
+  DescribeSecurityGroupRules'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      securityGroupRuleIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSecurityGroupRules_dryRun :: Lens.Lens' DescribeSecurityGroupRules (Prelude.Maybe Prelude.Bool)
+describeSecurityGroupRules_dryRun = Lens.lens (\DescribeSecurityGroupRules' {dryRun} -> dryRun) (\s@DescribeSecurityGroupRules' {} a -> s {dryRun = a} :: DescribeSecurityGroupRules)
+
+-- | One or more filters.
+--
+-- -   @group-id@ - The ID of the security group.
+--
+-- -   @security-group-rule-id@ - The ID of the security group rule.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+describeSecurityGroupRules_filters :: Lens.Lens' DescribeSecurityGroupRules (Prelude.Maybe [Filter])
+describeSecurityGroupRules_filters = Lens.lens (\DescribeSecurityGroupRules' {filters} -> filters) (\s@DescribeSecurityGroupRules' {} a -> s {filters = a} :: DescribeSecurityGroupRules) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned
+-- @NextToken@ value. This value can be between 5 and 1000. If this
+-- parameter is not specified, then all results are returned.
+describeSecurityGroupRules_maxResults :: Lens.Lens' DescribeSecurityGroupRules (Prelude.Maybe Prelude.Natural)
+describeSecurityGroupRules_maxResults = Lens.lens (\DescribeSecurityGroupRules' {maxResults} -> maxResults) (\s@DescribeSecurityGroupRules' {} a -> s {maxResults = a} :: DescribeSecurityGroupRules)
+
+-- | The token for the next page of results.
+describeSecurityGroupRules_nextToken :: Lens.Lens' DescribeSecurityGroupRules (Prelude.Maybe Prelude.Text)
+describeSecurityGroupRules_nextToken = Lens.lens (\DescribeSecurityGroupRules' {nextToken} -> nextToken) (\s@DescribeSecurityGroupRules' {} a -> s {nextToken = a} :: DescribeSecurityGroupRules)
+
+-- | The IDs of the security group rules.
+describeSecurityGroupRules_securityGroupRuleIds :: Lens.Lens' DescribeSecurityGroupRules (Prelude.Maybe [Prelude.Text])
+describeSecurityGroupRules_securityGroupRuleIds = Lens.lens (\DescribeSecurityGroupRules' {securityGroupRuleIds} -> securityGroupRuleIds) (\s@DescribeSecurityGroupRules' {} a -> s {securityGroupRuleIds = a} :: DescribeSecurityGroupRules) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeSecurityGroupRules where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSecurityGroupRulesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSecurityGroupRulesResponse_securityGroupRules
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSecurityGroupRules_nextToken
+          Lens..~ rs
+          Lens.^? describeSecurityGroupRulesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSecurityGroupRules where
+  type
+    AWSResponse DescribeSecurityGroupRules =
+      DescribeSecurityGroupRulesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSecurityGroupRulesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "securityGroupRuleSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSecurityGroupRules where
+  hashWithSalt _salt DescribeSecurityGroupRules' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` securityGroupRuleIds
+
+instance Prelude.NFData DescribeSecurityGroupRules where
+  rnf DescribeSecurityGroupRules' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf securityGroupRuleIds
+
+instance Data.ToHeaders DescribeSecurityGroupRules where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSecurityGroupRules where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSecurityGroupRules where
+  toQuery DescribeSecurityGroupRules' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSecurityGroupRules" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupRuleId"
+              Prelude.<$> securityGroupRuleIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeSecurityGroupRulesResponse' smart constructor.
+data DescribeSecurityGroupRulesResponse = DescribeSecurityGroupRulesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about security group rules.
+    securityGroupRules :: Prelude.Maybe [SecurityGroupRule],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSecurityGroupRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSecurityGroupRulesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'securityGroupRules', 'describeSecurityGroupRulesResponse_securityGroupRules' - Information about security group rules.
+--
+-- 'httpStatus', 'describeSecurityGroupRulesResponse_httpStatus' - The response's http status code.
+newDescribeSecurityGroupRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSecurityGroupRulesResponse
+newDescribeSecurityGroupRulesResponse pHttpStatus_ =
+  DescribeSecurityGroupRulesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      securityGroupRules = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeSecurityGroupRulesResponse_nextToken :: Lens.Lens' DescribeSecurityGroupRulesResponse (Prelude.Maybe Prelude.Text)
+describeSecurityGroupRulesResponse_nextToken = Lens.lens (\DescribeSecurityGroupRulesResponse' {nextToken} -> nextToken) (\s@DescribeSecurityGroupRulesResponse' {} a -> s {nextToken = a} :: DescribeSecurityGroupRulesResponse)
+
+-- | Information about security group rules.
+describeSecurityGroupRulesResponse_securityGroupRules :: Lens.Lens' DescribeSecurityGroupRulesResponse (Prelude.Maybe [SecurityGroupRule])
+describeSecurityGroupRulesResponse_securityGroupRules = Lens.lens (\DescribeSecurityGroupRulesResponse' {securityGroupRules} -> securityGroupRules) (\s@DescribeSecurityGroupRulesResponse' {} a -> s {securityGroupRules = a} :: DescribeSecurityGroupRulesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSecurityGroupRulesResponse_httpStatus :: Lens.Lens' DescribeSecurityGroupRulesResponse Prelude.Int
+describeSecurityGroupRulesResponse_httpStatus = Lens.lens (\DescribeSecurityGroupRulesResponse' {httpStatus} -> httpStatus) (\s@DescribeSecurityGroupRulesResponse' {} a -> s {httpStatus = a} :: DescribeSecurityGroupRulesResponse)
+
+instance
+  Prelude.NFData
+    DescribeSecurityGroupRulesResponse
+  where
+  rnf DescribeSecurityGroupRulesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf securityGroupRules
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSecurityGroups.hs b/gen/Amazonka/EC2/DescribeSecurityGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSecurityGroups.hs
@@ -0,0 +1,568 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSecurityGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified security groups or all of your security groups.
+--
+-- A security group is for use with instances either in the EC2-Classic
+-- platform or in a specific VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Amazon EC2 security groups>
+-- in the /Amazon Elastic Compute Cloud User Guide/ and
+-- <https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security groups for your VPC>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSecurityGroups
+  ( -- * Creating a Request
+    DescribeSecurityGroups (..),
+    newDescribeSecurityGroups,
+
+    -- * Request Lenses
+    describeSecurityGroups_dryRun,
+    describeSecurityGroups_filters,
+    describeSecurityGroups_groupIds,
+    describeSecurityGroups_groupNames,
+    describeSecurityGroups_maxResults,
+    describeSecurityGroups_nextToken,
+
+    -- * Destructuring the Response
+    DescribeSecurityGroupsResponse (..),
+    newDescribeSecurityGroupsResponse,
+
+    -- * Response Lenses
+    describeSecurityGroupsResponse_nextToken,
+    describeSecurityGroupsResponse_securityGroups,
+    describeSecurityGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSecurityGroups' smart constructor.
+data DescribeSecurityGroups = DescribeSecurityGroups'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters. If using multiple filters for rules, the results include
+    -- security groups for which any combination of rules - not necessarily a
+    -- single rule - match all filters.
+    --
+    -- -   @description@ - The description of the security group.
+    --
+    -- -   @egress.ip-permission.cidr@ - An IPv4 CIDR block for an outbound
+    --     security group rule.
+    --
+    -- -   @egress.ip-permission.from-port@ - For an outbound rule, the start
+    --     of port range for the TCP and UDP protocols, or an ICMP type number.
+    --
+    -- -   @egress.ip-permission.group-id@ - The ID of a security group that
+    --     has been referenced in an outbound security group rule.
+    --
+    -- -   @egress.ip-permission.group-name@ - The name of a security group
+    --     that is referenced in an outbound security group rule.
+    --
+    -- -   @egress.ip-permission.ipv6-cidr@ - An IPv6 CIDR block for an
+    --     outbound security group rule.
+    --
+    -- -   @egress.ip-permission.prefix-list-id@ - The ID of a prefix list to
+    --     which a security group rule allows outbound access.
+    --
+    -- -   @egress.ip-permission.protocol@ - The IP protocol for an outbound
+    --     security group rule (@tcp@ | @udp@ | @icmp@, a protocol number, or
+    --     -1 for all protocols).
+    --
+    -- -   @egress.ip-permission.to-port@ - For an outbound rule, the end of
+    --     port range for the TCP and UDP protocols, or an ICMP code.
+    --
+    -- -   @egress.ip-permission.user-id@ - The ID of an Amazon Web Services
+    --     account that has been referenced in an outbound security group rule.
+    --
+    -- -   @group-id@ - The ID of the security group.
+    --
+    -- -   @group-name@ - The name of the security group.
+    --
+    -- -   @ip-permission.cidr@ - An IPv4 CIDR block for an inbound security
+    --     group rule.
+    --
+    -- -   @ip-permission.from-port@ - For an inbound rule, the start of port
+    --     range for the TCP and UDP protocols, or an ICMP type number.
+    --
+    -- -   @ip-permission.group-id@ - The ID of a security group that has been
+    --     referenced in an inbound security group rule.
+    --
+    -- -   @ip-permission.group-name@ - The name of a security group that is
+    --     referenced in an inbound security group rule.
+    --
+    -- -   @ip-permission.ipv6-cidr@ - An IPv6 CIDR block for an inbound
+    --     security group rule.
+    --
+    -- -   @ip-permission.prefix-list-id@ - The ID of a prefix list from which
+    --     a security group rule allows inbound access.
+    --
+    -- -   @ip-permission.protocol@ - The IP protocol for an inbound security
+    --     group rule (@tcp@ | @udp@ | @icmp@, a protocol number, or -1 for all
+    --     protocols).
+    --
+    -- -   @ip-permission.to-port@ - For an inbound rule, the end of port range
+    --     for the TCP and UDP protocols, or an ICMP code.
+    --
+    -- -   @ip-permission.user-id@ - The ID of an Amazon Web Services account
+    --     that has been referenced in an inbound security group rule.
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the owner of the
+    --     security group.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC specified when the security group was
+    --     created.
+    filters :: Prelude.Maybe [Filter],
+    -- | The IDs of the security groups. Required for security groups in a
+    -- nondefault VPC.
+    --
+    -- Default: Describes all of your security groups.
+    groupIds :: Prelude.Maybe [Prelude.Text],
+    -- | [EC2-Classic and default VPC only] The names of the security groups. You
+    -- can specify either the security group name or the security group ID. For
+    -- security groups in a nondefault VPC, use the @group-name@ filter to
+    -- describe security groups by name.
+    --
+    -- Default: Describes all of your security groups.
+    groupNames :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another request with the returned
+    -- @NextToken@ value. This value can be between 5 and 1000. If this
+    -- parameter is not specified, then all results are returned.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSecurityGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSecurityGroups_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeSecurityGroups_filters' - The filters. If using multiple filters for rules, the results include
+-- security groups for which any combination of rules - not necessarily a
+-- single rule - match all filters.
+--
+-- -   @description@ - The description of the security group.
+--
+-- -   @egress.ip-permission.cidr@ - An IPv4 CIDR block for an outbound
+--     security group rule.
+--
+-- -   @egress.ip-permission.from-port@ - For an outbound rule, the start
+--     of port range for the TCP and UDP protocols, or an ICMP type number.
+--
+-- -   @egress.ip-permission.group-id@ - The ID of a security group that
+--     has been referenced in an outbound security group rule.
+--
+-- -   @egress.ip-permission.group-name@ - The name of a security group
+--     that is referenced in an outbound security group rule.
+--
+-- -   @egress.ip-permission.ipv6-cidr@ - An IPv6 CIDR block for an
+--     outbound security group rule.
+--
+-- -   @egress.ip-permission.prefix-list-id@ - The ID of a prefix list to
+--     which a security group rule allows outbound access.
+--
+-- -   @egress.ip-permission.protocol@ - The IP protocol for an outbound
+--     security group rule (@tcp@ | @udp@ | @icmp@, a protocol number, or
+--     -1 for all protocols).
+--
+-- -   @egress.ip-permission.to-port@ - For an outbound rule, the end of
+--     port range for the TCP and UDP protocols, or an ICMP code.
+--
+-- -   @egress.ip-permission.user-id@ - The ID of an Amazon Web Services
+--     account that has been referenced in an outbound security group rule.
+--
+-- -   @group-id@ - The ID of the security group.
+--
+-- -   @group-name@ - The name of the security group.
+--
+-- -   @ip-permission.cidr@ - An IPv4 CIDR block for an inbound security
+--     group rule.
+--
+-- -   @ip-permission.from-port@ - For an inbound rule, the start of port
+--     range for the TCP and UDP protocols, or an ICMP type number.
+--
+-- -   @ip-permission.group-id@ - The ID of a security group that has been
+--     referenced in an inbound security group rule.
+--
+-- -   @ip-permission.group-name@ - The name of a security group that is
+--     referenced in an inbound security group rule.
+--
+-- -   @ip-permission.ipv6-cidr@ - An IPv6 CIDR block for an inbound
+--     security group rule.
+--
+-- -   @ip-permission.prefix-list-id@ - The ID of a prefix list from which
+--     a security group rule allows inbound access.
+--
+-- -   @ip-permission.protocol@ - The IP protocol for an inbound security
+--     group rule (@tcp@ | @udp@ | @icmp@, a protocol number, or -1 for all
+--     protocols).
+--
+-- -   @ip-permission.to-port@ - For an inbound rule, the end of port range
+--     for the TCP and UDP protocols, or an ICMP code.
+--
+-- -   @ip-permission.user-id@ - The ID of an Amazon Web Services account
+--     that has been referenced in an inbound security group rule.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner of the
+--     security group.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC specified when the security group was
+--     created.
+--
+-- 'groupIds', 'describeSecurityGroups_groupIds' - The IDs of the security groups. Required for security groups in a
+-- nondefault VPC.
+--
+-- Default: Describes all of your security groups.
+--
+-- 'groupNames', 'describeSecurityGroups_groupNames' - [EC2-Classic and default VPC only] The names of the security groups. You
+-- can specify either the security group name or the security group ID. For
+-- security groups in a nondefault VPC, use the @group-name@ filter to
+-- describe security groups by name.
+--
+-- Default: Describes all of your security groups.
+--
+-- 'maxResults', 'describeSecurityGroups_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned
+-- @NextToken@ value. This value can be between 5 and 1000. If this
+-- parameter is not specified, then all results are returned.
+--
+-- 'nextToken', 'describeSecurityGroups_nextToken' - The token to request the next page of results.
+newDescribeSecurityGroups ::
+  DescribeSecurityGroups
+newDescribeSecurityGroups =
+  DescribeSecurityGroups'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      groupIds = Prelude.Nothing,
+      groupNames = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSecurityGroups_dryRun :: Lens.Lens' DescribeSecurityGroups (Prelude.Maybe Prelude.Bool)
+describeSecurityGroups_dryRun = Lens.lens (\DescribeSecurityGroups' {dryRun} -> dryRun) (\s@DescribeSecurityGroups' {} a -> s {dryRun = a} :: DescribeSecurityGroups)
+
+-- | The filters. If using multiple filters for rules, the results include
+-- security groups for which any combination of rules - not necessarily a
+-- single rule - match all filters.
+--
+-- -   @description@ - The description of the security group.
+--
+-- -   @egress.ip-permission.cidr@ - An IPv4 CIDR block for an outbound
+--     security group rule.
+--
+-- -   @egress.ip-permission.from-port@ - For an outbound rule, the start
+--     of port range for the TCP and UDP protocols, or an ICMP type number.
+--
+-- -   @egress.ip-permission.group-id@ - The ID of a security group that
+--     has been referenced in an outbound security group rule.
+--
+-- -   @egress.ip-permission.group-name@ - The name of a security group
+--     that is referenced in an outbound security group rule.
+--
+-- -   @egress.ip-permission.ipv6-cidr@ - An IPv6 CIDR block for an
+--     outbound security group rule.
+--
+-- -   @egress.ip-permission.prefix-list-id@ - The ID of a prefix list to
+--     which a security group rule allows outbound access.
+--
+-- -   @egress.ip-permission.protocol@ - The IP protocol for an outbound
+--     security group rule (@tcp@ | @udp@ | @icmp@, a protocol number, or
+--     -1 for all protocols).
+--
+-- -   @egress.ip-permission.to-port@ - For an outbound rule, the end of
+--     port range for the TCP and UDP protocols, or an ICMP code.
+--
+-- -   @egress.ip-permission.user-id@ - The ID of an Amazon Web Services
+--     account that has been referenced in an outbound security group rule.
+--
+-- -   @group-id@ - The ID of the security group.
+--
+-- -   @group-name@ - The name of the security group.
+--
+-- -   @ip-permission.cidr@ - An IPv4 CIDR block for an inbound security
+--     group rule.
+--
+-- -   @ip-permission.from-port@ - For an inbound rule, the start of port
+--     range for the TCP and UDP protocols, or an ICMP type number.
+--
+-- -   @ip-permission.group-id@ - The ID of a security group that has been
+--     referenced in an inbound security group rule.
+--
+-- -   @ip-permission.group-name@ - The name of a security group that is
+--     referenced in an inbound security group rule.
+--
+-- -   @ip-permission.ipv6-cidr@ - An IPv6 CIDR block for an inbound
+--     security group rule.
+--
+-- -   @ip-permission.prefix-list-id@ - The ID of a prefix list from which
+--     a security group rule allows inbound access.
+--
+-- -   @ip-permission.protocol@ - The IP protocol for an inbound security
+--     group rule (@tcp@ | @udp@ | @icmp@, a protocol number, or -1 for all
+--     protocols).
+--
+-- -   @ip-permission.to-port@ - For an inbound rule, the end of port range
+--     for the TCP and UDP protocols, or an ICMP code.
+--
+-- -   @ip-permission.user-id@ - The ID of an Amazon Web Services account
+--     that has been referenced in an inbound security group rule.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner of the
+--     security group.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC specified when the security group was
+--     created.
+describeSecurityGroups_filters :: Lens.Lens' DescribeSecurityGroups (Prelude.Maybe [Filter])
+describeSecurityGroups_filters = Lens.lens (\DescribeSecurityGroups' {filters} -> filters) (\s@DescribeSecurityGroups' {} a -> s {filters = a} :: DescribeSecurityGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the security groups. Required for security groups in a
+-- nondefault VPC.
+--
+-- Default: Describes all of your security groups.
+describeSecurityGroups_groupIds :: Lens.Lens' DescribeSecurityGroups (Prelude.Maybe [Prelude.Text])
+describeSecurityGroups_groupIds = Lens.lens (\DescribeSecurityGroups' {groupIds} -> groupIds) (\s@DescribeSecurityGroups' {} a -> s {groupIds = a} :: DescribeSecurityGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | [EC2-Classic and default VPC only] The names of the security groups. You
+-- can specify either the security group name or the security group ID. For
+-- security groups in a nondefault VPC, use the @group-name@ filter to
+-- describe security groups by name.
+--
+-- Default: Describes all of your security groups.
+describeSecurityGroups_groupNames :: Lens.Lens' DescribeSecurityGroups (Prelude.Maybe [Prelude.Text])
+describeSecurityGroups_groupNames = Lens.lens (\DescribeSecurityGroups' {groupNames} -> groupNames) (\s@DescribeSecurityGroups' {} a -> s {groupNames = a} :: DescribeSecurityGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned
+-- @NextToken@ value. This value can be between 5 and 1000. If this
+-- parameter is not specified, then all results are returned.
+describeSecurityGroups_maxResults :: Lens.Lens' DescribeSecurityGroups (Prelude.Maybe Prelude.Natural)
+describeSecurityGroups_maxResults = Lens.lens (\DescribeSecurityGroups' {maxResults} -> maxResults) (\s@DescribeSecurityGroups' {} a -> s {maxResults = a} :: DescribeSecurityGroups)
+
+-- | The token to request the next page of results.
+describeSecurityGroups_nextToken :: Lens.Lens' DescribeSecurityGroups (Prelude.Maybe Prelude.Text)
+describeSecurityGroups_nextToken = Lens.lens (\DescribeSecurityGroups' {nextToken} -> nextToken) (\s@DescribeSecurityGroups' {} a -> s {nextToken = a} :: DescribeSecurityGroups)
+
+instance Core.AWSPager DescribeSecurityGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSecurityGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSecurityGroupsResponse_securityGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSecurityGroups_nextToken
+          Lens..~ rs
+          Lens.^? describeSecurityGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSecurityGroups where
+  type
+    AWSResponse DescribeSecurityGroups =
+      DescribeSecurityGroupsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSecurityGroupsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "securityGroupInfo"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSecurityGroups where
+  hashWithSalt _salt DescribeSecurityGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` groupIds
+      `Prelude.hashWithSalt` groupNames
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeSecurityGroups where
+  rnf DescribeSecurityGroups' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf groupIds
+      `Prelude.seq` Prelude.rnf groupNames
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeSecurityGroups where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSecurityGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSecurityGroups where
+  toQuery DescribeSecurityGroups' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSecurityGroups" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "GroupId" Prelude.<$> groupIds),
+        Data.toQuery
+          ( Data.toQueryList "GroupName"
+              Prelude.<$> groupNames
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeSecurityGroupsResponse' smart constructor.
+data DescribeSecurityGroupsResponse = DescribeSecurityGroupsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the security groups.
+    securityGroups :: Prelude.Maybe [SecurityGroup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSecurityGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSecurityGroupsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'securityGroups', 'describeSecurityGroupsResponse_securityGroups' - Information about the security groups.
+--
+-- 'httpStatus', 'describeSecurityGroupsResponse_httpStatus' - The response's http status code.
+newDescribeSecurityGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSecurityGroupsResponse
+newDescribeSecurityGroupsResponse pHttpStatus_ =
+  DescribeSecurityGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeSecurityGroupsResponse_nextToken :: Lens.Lens' DescribeSecurityGroupsResponse (Prelude.Maybe Prelude.Text)
+describeSecurityGroupsResponse_nextToken = Lens.lens (\DescribeSecurityGroupsResponse' {nextToken} -> nextToken) (\s@DescribeSecurityGroupsResponse' {} a -> s {nextToken = a} :: DescribeSecurityGroupsResponse)
+
+-- | Information about the security groups.
+describeSecurityGroupsResponse_securityGroups :: Lens.Lens' DescribeSecurityGroupsResponse (Prelude.Maybe [SecurityGroup])
+describeSecurityGroupsResponse_securityGroups = Lens.lens (\DescribeSecurityGroupsResponse' {securityGroups} -> securityGroups) (\s@DescribeSecurityGroupsResponse' {} a -> s {securityGroups = a} :: DescribeSecurityGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSecurityGroupsResponse_httpStatus :: Lens.Lens' DescribeSecurityGroupsResponse Prelude.Int
+describeSecurityGroupsResponse_httpStatus = Lens.lens (\DescribeSecurityGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribeSecurityGroupsResponse' {} a -> s {httpStatus = a} :: DescribeSecurityGroupsResponse)
+
+instance
+  Prelude.NFData
+    DescribeSecurityGroupsResponse
+  where
+  rnf DescribeSecurityGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSnapshotAttribute.hs b/gen/Amazonka/EC2/DescribeSnapshotAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSnapshotAttribute.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSnapshotAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified attribute of the specified snapshot. You can
+-- specify only one attribute at a time.
+--
+-- For more information about EBS snapshots, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html Amazon EBS snapshots>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DescribeSnapshotAttribute
+  ( -- * Creating a Request
+    DescribeSnapshotAttribute (..),
+    newDescribeSnapshotAttribute,
+
+    -- * Request Lenses
+    describeSnapshotAttribute_dryRun,
+    describeSnapshotAttribute_attribute,
+    describeSnapshotAttribute_snapshotId,
+
+    -- * Destructuring the Response
+    DescribeSnapshotAttributeResponse (..),
+    newDescribeSnapshotAttributeResponse,
+
+    -- * Response Lenses
+    describeSnapshotAttributeResponse_createVolumePermissions,
+    describeSnapshotAttributeResponse_productCodes,
+    describeSnapshotAttributeResponse_snapshotId,
+    describeSnapshotAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSnapshotAttribute' smart constructor.
+data DescribeSnapshotAttribute = DescribeSnapshotAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The snapshot attribute you would like to view.
+    attribute :: SnapshotAttributeName,
+    -- | The ID of the EBS snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSnapshotAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSnapshotAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'describeSnapshotAttribute_attribute' - The snapshot attribute you would like to view.
+--
+-- 'snapshotId', 'describeSnapshotAttribute_snapshotId' - The ID of the EBS snapshot.
+newDescribeSnapshotAttribute ::
+  -- | 'attribute'
+  SnapshotAttributeName ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  DescribeSnapshotAttribute
+newDescribeSnapshotAttribute pAttribute_ pSnapshotId_ =
+  DescribeSnapshotAttribute'
+    { dryRun =
+        Prelude.Nothing,
+      attribute = pAttribute_,
+      snapshotId = pSnapshotId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSnapshotAttribute_dryRun :: Lens.Lens' DescribeSnapshotAttribute (Prelude.Maybe Prelude.Bool)
+describeSnapshotAttribute_dryRun = Lens.lens (\DescribeSnapshotAttribute' {dryRun} -> dryRun) (\s@DescribeSnapshotAttribute' {} a -> s {dryRun = a} :: DescribeSnapshotAttribute)
+
+-- | The snapshot attribute you would like to view.
+describeSnapshotAttribute_attribute :: Lens.Lens' DescribeSnapshotAttribute SnapshotAttributeName
+describeSnapshotAttribute_attribute = Lens.lens (\DescribeSnapshotAttribute' {attribute} -> attribute) (\s@DescribeSnapshotAttribute' {} a -> s {attribute = a} :: DescribeSnapshotAttribute)
+
+-- | The ID of the EBS snapshot.
+describeSnapshotAttribute_snapshotId :: Lens.Lens' DescribeSnapshotAttribute Prelude.Text
+describeSnapshotAttribute_snapshotId = Lens.lens (\DescribeSnapshotAttribute' {snapshotId} -> snapshotId) (\s@DescribeSnapshotAttribute' {} a -> s {snapshotId = a} :: DescribeSnapshotAttribute)
+
+instance Core.AWSRequest DescribeSnapshotAttribute where
+  type
+    AWSResponse DescribeSnapshotAttribute =
+      DescribeSnapshotAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSnapshotAttributeResponse'
+            Prelude.<$> ( x
+                            Data..@? "createVolumePermission"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "productCodes"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "snapshotId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSnapshotAttribute where
+  hashWithSalt _salt DescribeSnapshotAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData DescribeSnapshotAttribute where
+  rnf DescribeSnapshotAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders DescribeSnapshotAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSnapshotAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSnapshotAttribute where
+  toQuery DescribeSnapshotAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSnapshotAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newDescribeSnapshotAttributeResponse' smart constructor.
+data DescribeSnapshotAttributeResponse = DescribeSnapshotAttributeResponse'
+  { -- | The users and groups that have the permissions for creating volumes from
+    -- the snapshot.
+    createVolumePermissions :: Prelude.Maybe [CreateVolumePermission],
+    -- | The product codes.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | The ID of the EBS snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSnapshotAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createVolumePermissions', 'describeSnapshotAttributeResponse_createVolumePermissions' - The users and groups that have the permissions for creating volumes from
+-- the snapshot.
+--
+-- 'productCodes', 'describeSnapshotAttributeResponse_productCodes' - The product codes.
+--
+-- 'snapshotId', 'describeSnapshotAttributeResponse_snapshotId' - The ID of the EBS snapshot.
+--
+-- 'httpStatus', 'describeSnapshotAttributeResponse_httpStatus' - The response's http status code.
+newDescribeSnapshotAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSnapshotAttributeResponse
+newDescribeSnapshotAttributeResponse pHttpStatus_ =
+  DescribeSnapshotAttributeResponse'
+    { createVolumePermissions =
+        Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The users and groups that have the permissions for creating volumes from
+-- the snapshot.
+describeSnapshotAttributeResponse_createVolumePermissions :: Lens.Lens' DescribeSnapshotAttributeResponse (Prelude.Maybe [CreateVolumePermission])
+describeSnapshotAttributeResponse_createVolumePermissions = Lens.lens (\DescribeSnapshotAttributeResponse' {createVolumePermissions} -> createVolumePermissions) (\s@DescribeSnapshotAttributeResponse' {} a -> s {createVolumePermissions = a} :: DescribeSnapshotAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The product codes.
+describeSnapshotAttributeResponse_productCodes :: Lens.Lens' DescribeSnapshotAttributeResponse (Prelude.Maybe [ProductCode])
+describeSnapshotAttributeResponse_productCodes = Lens.lens (\DescribeSnapshotAttributeResponse' {productCodes} -> productCodes) (\s@DescribeSnapshotAttributeResponse' {} a -> s {productCodes = a} :: DescribeSnapshotAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the EBS snapshot.
+describeSnapshotAttributeResponse_snapshotId :: Lens.Lens' DescribeSnapshotAttributeResponse (Prelude.Maybe Prelude.Text)
+describeSnapshotAttributeResponse_snapshotId = Lens.lens (\DescribeSnapshotAttributeResponse' {snapshotId} -> snapshotId) (\s@DescribeSnapshotAttributeResponse' {} a -> s {snapshotId = a} :: DescribeSnapshotAttributeResponse)
+
+-- | The response's http status code.
+describeSnapshotAttributeResponse_httpStatus :: Lens.Lens' DescribeSnapshotAttributeResponse Prelude.Int
+describeSnapshotAttributeResponse_httpStatus = Lens.lens (\DescribeSnapshotAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeSnapshotAttributeResponse' {} a -> s {httpStatus = a} :: DescribeSnapshotAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeSnapshotAttributeResponse
+  where
+  rnf DescribeSnapshotAttributeResponse' {..} =
+    Prelude.rnf createVolumePermissions
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSnapshotTierStatus.hs b/gen/Amazonka/EC2/DescribeSnapshotTierStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSnapshotTierStatus.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSnapshotTierStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the storage tier status of one or more Amazon EBS snapshots.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSnapshotTierStatus
+  ( -- * Creating a Request
+    DescribeSnapshotTierStatus (..),
+    newDescribeSnapshotTierStatus,
+
+    -- * Request Lenses
+    describeSnapshotTierStatus_dryRun,
+    describeSnapshotTierStatus_filters,
+    describeSnapshotTierStatus_maxResults,
+    describeSnapshotTierStatus_nextToken,
+
+    -- * Destructuring the Response
+    DescribeSnapshotTierStatusResponse (..),
+    newDescribeSnapshotTierStatusResponse,
+
+    -- * Response Lenses
+    describeSnapshotTierStatusResponse_nextToken,
+    describeSnapshotTierStatusResponse_snapshotTierStatuses,
+    describeSnapshotTierStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSnapshotTierStatus' smart constructor.
+data DescribeSnapshotTierStatus = DescribeSnapshotTierStatus'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @snapshot-id@ - The snapshot ID.
+    --
+    -- -   @volume-id@ - The ID of the volume the snapshot is for.
+    --
+    -- -   @last-tiering-operation@ - The state of the last archive or restore
+    --     action. (@archival-in-progress@ | @archival-completed@ |
+    --     @archival-failed@ | @permanent-restore-in-progress@ |
+    --     @permanent-restore-completed@ | @permanent-restore-failed@ |
+    --     @temporary-restore-in-progress@ | @temporary-restore-completed@ |
+    --     @temporary-restore-failed@)
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSnapshotTierStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSnapshotTierStatus_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeSnapshotTierStatus_filters' - The filters.
+--
+-- -   @snapshot-id@ - The snapshot ID.
+--
+-- -   @volume-id@ - The ID of the volume the snapshot is for.
+--
+-- -   @last-tiering-operation@ - The state of the last archive or restore
+--     action. (@archival-in-progress@ | @archival-completed@ |
+--     @archival-failed@ | @permanent-restore-in-progress@ |
+--     @permanent-restore-completed@ | @permanent-restore-failed@ |
+--     @temporary-restore-in-progress@ | @temporary-restore-completed@ |
+--     @temporary-restore-failed@)
+--
+-- 'maxResults', 'describeSnapshotTierStatus_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeSnapshotTierStatus_nextToken' - The token for the next page of results.
+newDescribeSnapshotTierStatus ::
+  DescribeSnapshotTierStatus
+newDescribeSnapshotTierStatus =
+  DescribeSnapshotTierStatus'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSnapshotTierStatus_dryRun :: Lens.Lens' DescribeSnapshotTierStatus (Prelude.Maybe Prelude.Bool)
+describeSnapshotTierStatus_dryRun = Lens.lens (\DescribeSnapshotTierStatus' {dryRun} -> dryRun) (\s@DescribeSnapshotTierStatus' {} a -> s {dryRun = a} :: DescribeSnapshotTierStatus)
+
+-- | The filters.
+--
+-- -   @snapshot-id@ - The snapshot ID.
+--
+-- -   @volume-id@ - The ID of the volume the snapshot is for.
+--
+-- -   @last-tiering-operation@ - The state of the last archive or restore
+--     action. (@archival-in-progress@ | @archival-completed@ |
+--     @archival-failed@ | @permanent-restore-in-progress@ |
+--     @permanent-restore-completed@ | @permanent-restore-failed@ |
+--     @temporary-restore-in-progress@ | @temporary-restore-completed@ |
+--     @temporary-restore-failed@)
+describeSnapshotTierStatus_filters :: Lens.Lens' DescribeSnapshotTierStatus (Prelude.Maybe [Filter])
+describeSnapshotTierStatus_filters = Lens.lens (\DescribeSnapshotTierStatus' {filters} -> filters) (\s@DescribeSnapshotTierStatus' {} a -> s {filters = a} :: DescribeSnapshotTierStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeSnapshotTierStatus_maxResults :: Lens.Lens' DescribeSnapshotTierStatus (Prelude.Maybe Prelude.Int)
+describeSnapshotTierStatus_maxResults = Lens.lens (\DescribeSnapshotTierStatus' {maxResults} -> maxResults) (\s@DescribeSnapshotTierStatus' {} a -> s {maxResults = a} :: DescribeSnapshotTierStatus)
+
+-- | The token for the next page of results.
+describeSnapshotTierStatus_nextToken :: Lens.Lens' DescribeSnapshotTierStatus (Prelude.Maybe Prelude.Text)
+describeSnapshotTierStatus_nextToken = Lens.lens (\DescribeSnapshotTierStatus' {nextToken} -> nextToken) (\s@DescribeSnapshotTierStatus' {} a -> s {nextToken = a} :: DescribeSnapshotTierStatus)
+
+instance Core.AWSPager DescribeSnapshotTierStatus where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSnapshotTierStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSnapshotTierStatusResponse_snapshotTierStatuses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSnapshotTierStatus_nextToken
+          Lens..~ rs
+          Lens.^? describeSnapshotTierStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSnapshotTierStatus where
+  type
+    AWSResponse DescribeSnapshotTierStatus =
+      DescribeSnapshotTierStatusResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSnapshotTierStatusResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "snapshotTierStatusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSnapshotTierStatus where
+  hashWithSalt _salt DescribeSnapshotTierStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeSnapshotTierStatus where
+  rnf DescribeSnapshotTierStatus' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeSnapshotTierStatus where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSnapshotTierStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSnapshotTierStatus where
+  toQuery DescribeSnapshotTierStatus' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSnapshotTierStatus" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeSnapshotTierStatusResponse' smart constructor.
+data DescribeSnapshotTierStatusResponse = DescribeSnapshotTierStatusResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the snapshot\'s storage tier.
+    snapshotTierStatuses :: Prelude.Maybe [SnapshotTierStatus],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSnapshotTierStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSnapshotTierStatusResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'snapshotTierStatuses', 'describeSnapshotTierStatusResponse_snapshotTierStatuses' - Information about the snapshot\'s storage tier.
+--
+-- 'httpStatus', 'describeSnapshotTierStatusResponse_httpStatus' - The response's http status code.
+newDescribeSnapshotTierStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSnapshotTierStatusResponse
+newDescribeSnapshotTierStatusResponse pHttpStatus_ =
+  DescribeSnapshotTierStatusResponse'
+    { nextToken =
+        Prelude.Nothing,
+      snapshotTierStatuses = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeSnapshotTierStatusResponse_nextToken :: Lens.Lens' DescribeSnapshotTierStatusResponse (Prelude.Maybe Prelude.Text)
+describeSnapshotTierStatusResponse_nextToken = Lens.lens (\DescribeSnapshotTierStatusResponse' {nextToken} -> nextToken) (\s@DescribeSnapshotTierStatusResponse' {} a -> s {nextToken = a} :: DescribeSnapshotTierStatusResponse)
+
+-- | Information about the snapshot\'s storage tier.
+describeSnapshotTierStatusResponse_snapshotTierStatuses :: Lens.Lens' DescribeSnapshotTierStatusResponse (Prelude.Maybe [SnapshotTierStatus])
+describeSnapshotTierStatusResponse_snapshotTierStatuses = Lens.lens (\DescribeSnapshotTierStatusResponse' {snapshotTierStatuses} -> snapshotTierStatuses) (\s@DescribeSnapshotTierStatusResponse' {} a -> s {snapshotTierStatuses = a} :: DescribeSnapshotTierStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSnapshotTierStatusResponse_httpStatus :: Lens.Lens' DescribeSnapshotTierStatusResponse Prelude.Int
+describeSnapshotTierStatusResponse_httpStatus = Lens.lens (\DescribeSnapshotTierStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeSnapshotTierStatusResponse' {} a -> s {httpStatus = a} :: DescribeSnapshotTierStatusResponse)
+
+instance
+  Prelude.NFData
+    DescribeSnapshotTierStatusResponse
+  where
+  rnf DescribeSnapshotTierStatusResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf snapshotTierStatuses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSnapshots.hs b/gen/Amazonka/EC2/DescribeSnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSnapshots.hs
@@ -0,0 +1,534 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSnapshots
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified EBS snapshots available to you or all of the EBS
+-- snapshots available to you.
+--
+-- The snapshots available to you include public snapshots, private
+-- snapshots that you own, and private snapshots owned by other Amazon Web
+-- Services accounts for which you have explicit create volume permissions.
+--
+-- The create volume permissions fall into the following categories:
+--
+-- -   /public/: The owner of the snapshot granted create volume
+--     permissions for the snapshot to the @all@ group. All Amazon Web
+--     Services accounts have create volume permissions for these
+--     snapshots.
+--
+-- -   /explicit/: The owner of the snapshot granted create volume
+--     permissions to a specific Amazon Web Services account.
+--
+-- -   /implicit/: An Amazon Web Services account has implicit create
+--     volume permissions for all snapshots it owns.
+--
+-- The list of snapshots returned can be filtered by specifying snapshot
+-- IDs, snapshot owners, or Amazon Web Services accounts with create volume
+-- permissions. If no options are specified, Amazon EC2 returns all
+-- snapshots for which you have create volume permissions.
+--
+-- If you specify one or more snapshot IDs, only snapshots that have the
+-- specified IDs are returned. If you specify an invalid snapshot ID, an
+-- error is returned. If you specify a snapshot ID for which you do not
+-- have access, it is not included in the returned results.
+--
+-- If you specify one or more snapshot owners using the @OwnerIds@ option,
+-- only snapshots from the specified owners and for which you have access
+-- are returned. The results can include the Amazon Web Services account
+-- IDs of the specified owners, @amazon@ for snapshots owned by Amazon, or
+-- @self@ for snapshots that you own.
+--
+-- If you specify a list of restorable users, only snapshots with create
+-- snapshot permissions for those users are returned. You can specify
+-- Amazon Web Services account IDs (if you own the snapshots), @self@ for
+-- snapshots for which you own or have explicit permissions, or @all@ for
+-- public snapshots.
+--
+-- If you are describing a long list of snapshots, we recommend that you
+-- paginate the output to make the list more manageable. The @MaxResults@
+-- parameter sets the maximum number of results returned in a single page.
+-- If the list of results exceeds your @MaxResults@ value, then that number
+-- of results is returned along with a @NextToken@ value that can be passed
+-- to a subsequent @DescribeSnapshots@ request to retrieve the remaining
+-- results.
+--
+-- To get the state of fast snapshot restores for a snapshot, use
+-- DescribeFastSnapshotRestores.
+--
+-- For more information about EBS snapshots, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html Amazon EBS snapshots>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSnapshots
+  ( -- * Creating a Request
+    DescribeSnapshots (..),
+    newDescribeSnapshots,
+
+    -- * Request Lenses
+    describeSnapshots_dryRun,
+    describeSnapshots_filters,
+    describeSnapshots_maxResults,
+    describeSnapshots_nextToken,
+    describeSnapshots_ownerIds,
+    describeSnapshots_restorableByUserIds,
+    describeSnapshots_snapshotIds,
+
+    -- * Destructuring the Response
+    DescribeSnapshotsResponse (..),
+    newDescribeSnapshotsResponse,
+
+    -- * Response Lenses
+    describeSnapshotsResponse_nextToken,
+    describeSnapshotsResponse_snapshots,
+    describeSnapshotsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSnapshots' smart constructor.
+data DescribeSnapshots = DescribeSnapshots'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @description@ - A description of the snapshot.
+    --
+    -- -   @encrypted@ - Indicates whether the snapshot is encrypted (@true@ |
+    --     @false@)
+    --
+    -- -   @owner-alias@ - The owner alias, from an Amazon-maintained list
+    --     (@amazon@). This is not the user-configured Amazon Web Services
+    --     account alias set using the IAM console. We recommend that you use
+    --     the related parameter instead of this filter.
+    --
+    -- -   @owner-id@ - The Amazon Web Services account ID of the owner. We
+    --     recommend that you use the related parameter instead of this filter.
+    --
+    -- -   @progress@ - The progress of the snapshot, as a percentage (for
+    --     example, 80%).
+    --
+    -- -   @snapshot-id@ - The snapshot ID.
+    --
+    -- -   @start-time@ - The time stamp when the snapshot was initiated.
+    --
+    -- -   @status@ - The status of the snapshot (@pending@ | @completed@ |
+    --     @error@).
+    --
+    -- -   @storage-tier@ - The storage tier of the snapshot (@archive@ |
+    --     @standard@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @volume-id@ - The ID of the volume the snapshot is for.
+    --
+    -- -   @volume-size@ - The size of the volume, in GiB.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of snapshot results returned by @DescribeSnapshots@
+    -- in paginated output. When this parameter is used, @DescribeSnapshots@
+    -- only returns @MaxResults@ results in a single page along with a
+    -- @NextToken@ response element. The remaining results of the initial
+    -- request can be seen by sending another @DescribeSnapshots@ request with
+    -- the returned @NextToken@ value. This value can be between 5 and 1,000;
+    -- if @MaxResults@ is given a value larger than 1,000, only 1,000 results
+    -- are returned. If this parameter is not used, then @DescribeSnapshots@
+    -- returns all results. You cannot specify this parameter and the snapshot
+    -- IDs parameter in the same request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The @NextToken@ value returned from a previous paginated
+    -- @DescribeSnapshots@ request where @MaxResults@ was used and the results
+    -- exceeded the value of that parameter. Pagination continues from the end
+    -- of the previous results that returned the @NextToken@ value. This value
+    -- is @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Scopes the results to snapshots with the specified owners. You can
+    -- specify a combination of Amazon Web Services account IDs, @self@, and
+    -- @amazon@.
+    ownerIds :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the Amazon Web Services accounts that can create volumes from
+    -- the snapshot.
+    restorableByUserIds :: Prelude.Maybe [Prelude.Text],
+    -- | The snapshot IDs.
+    --
+    -- Default: Describes the snapshots for which you have create volume
+    -- permissions.
+    snapshotIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSnapshots' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSnapshots_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeSnapshots_filters' - The filters.
+--
+-- -   @description@ - A description of the snapshot.
+--
+-- -   @encrypted@ - Indicates whether the snapshot is encrypted (@true@ |
+--     @false@)
+--
+-- -   @owner-alias@ - The owner alias, from an Amazon-maintained list
+--     (@amazon@). This is not the user-configured Amazon Web Services
+--     account alias set using the IAM console. We recommend that you use
+--     the related parameter instead of this filter.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner. We
+--     recommend that you use the related parameter instead of this filter.
+--
+-- -   @progress@ - The progress of the snapshot, as a percentage (for
+--     example, 80%).
+--
+-- -   @snapshot-id@ - The snapshot ID.
+--
+-- -   @start-time@ - The time stamp when the snapshot was initiated.
+--
+-- -   @status@ - The status of the snapshot (@pending@ | @completed@ |
+--     @error@).
+--
+-- -   @storage-tier@ - The storage tier of the snapshot (@archive@ |
+--     @standard@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @volume-id@ - The ID of the volume the snapshot is for.
+--
+-- -   @volume-size@ - The size of the volume, in GiB.
+--
+-- 'maxResults', 'describeSnapshots_maxResults' - The maximum number of snapshot results returned by @DescribeSnapshots@
+-- in paginated output. When this parameter is used, @DescribeSnapshots@
+-- only returns @MaxResults@ results in a single page along with a
+-- @NextToken@ response element. The remaining results of the initial
+-- request can be seen by sending another @DescribeSnapshots@ request with
+-- the returned @NextToken@ value. This value can be between 5 and 1,000;
+-- if @MaxResults@ is given a value larger than 1,000, only 1,000 results
+-- are returned. If this parameter is not used, then @DescribeSnapshots@
+-- returns all results. You cannot specify this parameter and the snapshot
+-- IDs parameter in the same request.
+--
+-- 'nextToken', 'describeSnapshots_nextToken' - The @NextToken@ value returned from a previous paginated
+-- @DescribeSnapshots@ request where @MaxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @NextToken@ value. This value
+-- is @null@ when there are no more results to return.
+--
+-- 'ownerIds', 'describeSnapshots_ownerIds' - Scopes the results to snapshots with the specified owners. You can
+-- specify a combination of Amazon Web Services account IDs, @self@, and
+-- @amazon@.
+--
+-- 'restorableByUserIds', 'describeSnapshots_restorableByUserIds' - The IDs of the Amazon Web Services accounts that can create volumes from
+-- the snapshot.
+--
+-- 'snapshotIds', 'describeSnapshots_snapshotIds' - The snapshot IDs.
+--
+-- Default: Describes the snapshots for which you have create volume
+-- permissions.
+newDescribeSnapshots ::
+  DescribeSnapshots
+newDescribeSnapshots =
+  DescribeSnapshots'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      ownerIds = Prelude.Nothing,
+      restorableByUserIds = Prelude.Nothing,
+      snapshotIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSnapshots_dryRun :: Lens.Lens' DescribeSnapshots (Prelude.Maybe Prelude.Bool)
+describeSnapshots_dryRun = Lens.lens (\DescribeSnapshots' {dryRun} -> dryRun) (\s@DescribeSnapshots' {} a -> s {dryRun = a} :: DescribeSnapshots)
+
+-- | The filters.
+--
+-- -   @description@ - A description of the snapshot.
+--
+-- -   @encrypted@ - Indicates whether the snapshot is encrypted (@true@ |
+--     @false@)
+--
+-- -   @owner-alias@ - The owner alias, from an Amazon-maintained list
+--     (@amazon@). This is not the user-configured Amazon Web Services
+--     account alias set using the IAM console. We recommend that you use
+--     the related parameter instead of this filter.
+--
+-- -   @owner-id@ - The Amazon Web Services account ID of the owner. We
+--     recommend that you use the related parameter instead of this filter.
+--
+-- -   @progress@ - The progress of the snapshot, as a percentage (for
+--     example, 80%).
+--
+-- -   @snapshot-id@ - The snapshot ID.
+--
+-- -   @start-time@ - The time stamp when the snapshot was initiated.
+--
+-- -   @status@ - The status of the snapshot (@pending@ | @completed@ |
+--     @error@).
+--
+-- -   @storage-tier@ - The storage tier of the snapshot (@archive@ |
+--     @standard@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @volume-id@ - The ID of the volume the snapshot is for.
+--
+-- -   @volume-size@ - The size of the volume, in GiB.
+describeSnapshots_filters :: Lens.Lens' DescribeSnapshots (Prelude.Maybe [Filter])
+describeSnapshots_filters = Lens.lens (\DescribeSnapshots' {filters} -> filters) (\s@DescribeSnapshots' {} a -> s {filters = a} :: DescribeSnapshots) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of snapshot results returned by @DescribeSnapshots@
+-- in paginated output. When this parameter is used, @DescribeSnapshots@
+-- only returns @MaxResults@ results in a single page along with a
+-- @NextToken@ response element. The remaining results of the initial
+-- request can be seen by sending another @DescribeSnapshots@ request with
+-- the returned @NextToken@ value. This value can be between 5 and 1,000;
+-- if @MaxResults@ is given a value larger than 1,000, only 1,000 results
+-- are returned. If this parameter is not used, then @DescribeSnapshots@
+-- returns all results. You cannot specify this parameter and the snapshot
+-- IDs parameter in the same request.
+describeSnapshots_maxResults :: Lens.Lens' DescribeSnapshots (Prelude.Maybe Prelude.Int)
+describeSnapshots_maxResults = Lens.lens (\DescribeSnapshots' {maxResults} -> maxResults) (\s@DescribeSnapshots' {} a -> s {maxResults = a} :: DescribeSnapshots)
+
+-- | The @NextToken@ value returned from a previous paginated
+-- @DescribeSnapshots@ request where @MaxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @NextToken@ value. This value
+-- is @null@ when there are no more results to return.
+describeSnapshots_nextToken :: Lens.Lens' DescribeSnapshots (Prelude.Maybe Prelude.Text)
+describeSnapshots_nextToken = Lens.lens (\DescribeSnapshots' {nextToken} -> nextToken) (\s@DescribeSnapshots' {} a -> s {nextToken = a} :: DescribeSnapshots)
+
+-- | Scopes the results to snapshots with the specified owners. You can
+-- specify a combination of Amazon Web Services account IDs, @self@, and
+-- @amazon@.
+describeSnapshots_ownerIds :: Lens.Lens' DescribeSnapshots (Prelude.Maybe [Prelude.Text])
+describeSnapshots_ownerIds = Lens.lens (\DescribeSnapshots' {ownerIds} -> ownerIds) (\s@DescribeSnapshots' {} a -> s {ownerIds = a} :: DescribeSnapshots) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Amazon Web Services accounts that can create volumes from
+-- the snapshot.
+describeSnapshots_restorableByUserIds :: Lens.Lens' DescribeSnapshots (Prelude.Maybe [Prelude.Text])
+describeSnapshots_restorableByUserIds = Lens.lens (\DescribeSnapshots' {restorableByUserIds} -> restorableByUserIds) (\s@DescribeSnapshots' {} a -> s {restorableByUserIds = a} :: DescribeSnapshots) Prelude.. Lens.mapping Lens.coerced
+
+-- | The snapshot IDs.
+--
+-- Default: Describes the snapshots for which you have create volume
+-- permissions.
+describeSnapshots_snapshotIds :: Lens.Lens' DescribeSnapshots (Prelude.Maybe [Prelude.Text])
+describeSnapshots_snapshotIds = Lens.lens (\DescribeSnapshots' {snapshotIds} -> snapshotIds) (\s@DescribeSnapshots' {} a -> s {snapshotIds = a} :: DescribeSnapshots) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeSnapshots where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSnapshotsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSnapshotsResponse_snapshots
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSnapshots_nextToken
+          Lens..~ rs
+          Lens.^? describeSnapshotsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSnapshots where
+  type
+    AWSResponse DescribeSnapshots =
+      DescribeSnapshotsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSnapshotsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "snapshotSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSnapshots where
+  hashWithSalt _salt DescribeSnapshots' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` ownerIds
+      `Prelude.hashWithSalt` restorableByUserIds
+      `Prelude.hashWithSalt` snapshotIds
+
+instance Prelude.NFData DescribeSnapshots where
+  rnf DescribeSnapshots' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ownerIds
+      `Prelude.seq` Prelude.rnf restorableByUserIds
+      `Prelude.seq` Prelude.rnf snapshotIds
+
+instance Data.ToHeaders DescribeSnapshots where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSnapshots where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSnapshots where
+  toQuery DescribeSnapshots' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSnapshots" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "Owner" Prelude.<$> ownerIds),
+        Data.toQuery
+          ( Data.toQueryList "RestorableBy"
+              Prelude.<$> restorableByUserIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SnapshotId"
+              Prelude.<$> snapshotIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeSnapshotsResponse' smart constructor.
+data DescribeSnapshotsResponse = DescribeSnapshotsResponse'
+  { -- | The @NextToken@ value to include in a future @DescribeSnapshots@
+    -- request. When the results of a @DescribeSnapshots@ request exceed
+    -- @MaxResults@, this value can be used to retrieve the next page of
+    -- results. This value is @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the snapshots.
+    snapshots :: Prelude.Maybe [Snapshot],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSnapshotsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSnapshotsResponse_nextToken' - The @NextToken@ value to include in a future @DescribeSnapshots@
+-- request. When the results of a @DescribeSnapshots@ request exceed
+-- @MaxResults@, this value can be used to retrieve the next page of
+-- results. This value is @null@ when there are no more results to return.
+--
+-- 'snapshots', 'describeSnapshotsResponse_snapshots' - Information about the snapshots.
+--
+-- 'httpStatus', 'describeSnapshotsResponse_httpStatus' - The response's http status code.
+newDescribeSnapshotsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSnapshotsResponse
+newDescribeSnapshotsResponse pHttpStatus_ =
+  DescribeSnapshotsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      snapshots = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @NextToken@ value to include in a future @DescribeSnapshots@
+-- request. When the results of a @DescribeSnapshots@ request exceed
+-- @MaxResults@, this value can be used to retrieve the next page of
+-- results. This value is @null@ when there are no more results to return.
+describeSnapshotsResponse_nextToken :: Lens.Lens' DescribeSnapshotsResponse (Prelude.Maybe Prelude.Text)
+describeSnapshotsResponse_nextToken = Lens.lens (\DescribeSnapshotsResponse' {nextToken} -> nextToken) (\s@DescribeSnapshotsResponse' {} a -> s {nextToken = a} :: DescribeSnapshotsResponse)
+
+-- | Information about the snapshots.
+describeSnapshotsResponse_snapshots :: Lens.Lens' DescribeSnapshotsResponse (Prelude.Maybe [Snapshot])
+describeSnapshotsResponse_snapshots = Lens.lens (\DescribeSnapshotsResponse' {snapshots} -> snapshots) (\s@DescribeSnapshotsResponse' {} a -> s {snapshots = a} :: DescribeSnapshotsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSnapshotsResponse_httpStatus :: Lens.Lens' DescribeSnapshotsResponse Prelude.Int
+describeSnapshotsResponse_httpStatus = Lens.lens (\DescribeSnapshotsResponse' {httpStatus} -> httpStatus) (\s@DescribeSnapshotsResponse' {} a -> s {httpStatus = a} :: DescribeSnapshotsResponse)
+
+instance Prelude.NFData DescribeSnapshotsResponse where
+  rnf DescribeSnapshotsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf snapshots
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSpotDatafeedSubscription.hs b/gen/Amazonka/EC2/DescribeSpotDatafeedSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSpotDatafeedSubscription.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSpotDatafeedSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the data feed for Spot Instances. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html Spot Instance data feed>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+module Amazonka.EC2.DescribeSpotDatafeedSubscription
+  ( -- * Creating a Request
+    DescribeSpotDatafeedSubscription (..),
+    newDescribeSpotDatafeedSubscription,
+
+    -- * Request Lenses
+    describeSpotDatafeedSubscription_dryRun,
+
+    -- * Destructuring the Response
+    DescribeSpotDatafeedSubscriptionResponse (..),
+    newDescribeSpotDatafeedSubscriptionResponse,
+
+    -- * Response Lenses
+    describeSpotDatafeedSubscriptionResponse_spotDatafeedSubscription,
+    describeSpotDatafeedSubscriptionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeSpotDatafeedSubscription.
+--
+-- /See:/ 'newDescribeSpotDatafeedSubscription' smart constructor.
+data DescribeSpotDatafeedSubscription = DescribeSpotDatafeedSubscription'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotDatafeedSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSpotDatafeedSubscription_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDescribeSpotDatafeedSubscription ::
+  DescribeSpotDatafeedSubscription
+newDescribeSpotDatafeedSubscription =
+  DescribeSpotDatafeedSubscription'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSpotDatafeedSubscription_dryRun :: Lens.Lens' DescribeSpotDatafeedSubscription (Prelude.Maybe Prelude.Bool)
+describeSpotDatafeedSubscription_dryRun = Lens.lens (\DescribeSpotDatafeedSubscription' {dryRun} -> dryRun) (\s@DescribeSpotDatafeedSubscription' {} a -> s {dryRun = a} :: DescribeSpotDatafeedSubscription)
+
+instance
+  Core.AWSRequest
+    DescribeSpotDatafeedSubscription
+  where
+  type
+    AWSResponse DescribeSpotDatafeedSubscription =
+      DescribeSpotDatafeedSubscriptionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSpotDatafeedSubscriptionResponse'
+            Prelude.<$> (x Data..@? "spotDatafeedSubscription")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeSpotDatafeedSubscription
+  where
+  hashWithSalt
+    _salt
+    DescribeSpotDatafeedSubscription' {..} =
+      _salt `Prelude.hashWithSalt` dryRun
+
+instance
+  Prelude.NFData
+    DescribeSpotDatafeedSubscription
+  where
+  rnf DescribeSpotDatafeedSubscription' {..} =
+    Prelude.rnf dryRun
+
+instance
+  Data.ToHeaders
+    DescribeSpotDatafeedSubscription
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSpotDatafeedSubscription where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeSpotDatafeedSubscription
+  where
+  toQuery DescribeSpotDatafeedSubscription' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeSpotDatafeedSubscription" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | Contains the output of DescribeSpotDatafeedSubscription.
+--
+-- /See:/ 'newDescribeSpotDatafeedSubscriptionResponse' smart constructor.
+data DescribeSpotDatafeedSubscriptionResponse = DescribeSpotDatafeedSubscriptionResponse'
+  { -- | The Spot Instance data feed subscription.
+    spotDatafeedSubscription :: Prelude.Maybe SpotDatafeedSubscription,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotDatafeedSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'spotDatafeedSubscription', 'describeSpotDatafeedSubscriptionResponse_spotDatafeedSubscription' - The Spot Instance data feed subscription.
+--
+-- 'httpStatus', 'describeSpotDatafeedSubscriptionResponse_httpStatus' - The response's http status code.
+newDescribeSpotDatafeedSubscriptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSpotDatafeedSubscriptionResponse
+newDescribeSpotDatafeedSubscriptionResponse
+  pHttpStatus_ =
+    DescribeSpotDatafeedSubscriptionResponse'
+      { spotDatafeedSubscription =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Spot Instance data feed subscription.
+describeSpotDatafeedSubscriptionResponse_spotDatafeedSubscription :: Lens.Lens' DescribeSpotDatafeedSubscriptionResponse (Prelude.Maybe SpotDatafeedSubscription)
+describeSpotDatafeedSubscriptionResponse_spotDatafeedSubscription = Lens.lens (\DescribeSpotDatafeedSubscriptionResponse' {spotDatafeedSubscription} -> spotDatafeedSubscription) (\s@DescribeSpotDatafeedSubscriptionResponse' {} a -> s {spotDatafeedSubscription = a} :: DescribeSpotDatafeedSubscriptionResponse)
+
+-- | The response's http status code.
+describeSpotDatafeedSubscriptionResponse_httpStatus :: Lens.Lens' DescribeSpotDatafeedSubscriptionResponse Prelude.Int
+describeSpotDatafeedSubscriptionResponse_httpStatus = Lens.lens (\DescribeSpotDatafeedSubscriptionResponse' {httpStatus} -> httpStatus) (\s@DescribeSpotDatafeedSubscriptionResponse' {} a -> s {httpStatus = a} :: DescribeSpotDatafeedSubscriptionResponse)
+
+instance
+  Prelude.NFData
+    DescribeSpotDatafeedSubscriptionResponse
+  where
+  rnf DescribeSpotDatafeedSubscriptionResponse' {..} =
+    Prelude.rnf spotDatafeedSubscription
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSpotFleetInstances.hs b/gen/Amazonka/EC2/DescribeSpotFleetInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSpotFleetInstances.hs
@@ -0,0 +1,283 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSpotFleetInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the running instances for the specified Spot Fleet.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSpotFleetInstances
+  ( -- * Creating a Request
+    DescribeSpotFleetInstances (..),
+    newDescribeSpotFleetInstances,
+
+    -- * Request Lenses
+    describeSpotFleetInstances_dryRun,
+    describeSpotFleetInstances_maxResults,
+    describeSpotFleetInstances_nextToken,
+    describeSpotFleetInstances_spotFleetRequestId,
+
+    -- * Destructuring the Response
+    DescribeSpotFleetInstancesResponse (..),
+    newDescribeSpotFleetInstancesResponse,
+
+    -- * Response Lenses
+    describeSpotFleetInstancesResponse_activeInstances,
+    describeSpotFleetInstancesResponse_nextToken,
+    describeSpotFleetInstancesResponse_spotFleetRequestId,
+    describeSpotFleetInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeSpotFleetInstances.
+--
+-- /See:/ 'newDescribeSpotFleetInstances' smart constructor.
+data DescribeSpotFleetInstances = DescribeSpotFleetInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotFleetInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSpotFleetInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'describeSpotFleetInstances_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeSpotFleetInstances_nextToken' - The token for the next set of results.
+--
+-- 'spotFleetRequestId', 'describeSpotFleetInstances_spotFleetRequestId' - The ID of the Spot Fleet request.
+newDescribeSpotFleetInstances ::
+  -- | 'spotFleetRequestId'
+  Prelude.Text ->
+  DescribeSpotFleetInstances
+newDescribeSpotFleetInstances pSpotFleetRequestId_ =
+  DescribeSpotFleetInstances'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      spotFleetRequestId = pSpotFleetRequestId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSpotFleetInstances_dryRun :: Lens.Lens' DescribeSpotFleetInstances (Prelude.Maybe Prelude.Bool)
+describeSpotFleetInstances_dryRun = Lens.lens (\DescribeSpotFleetInstances' {dryRun} -> dryRun) (\s@DescribeSpotFleetInstances' {} a -> s {dryRun = a} :: DescribeSpotFleetInstances)
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeSpotFleetInstances_maxResults :: Lens.Lens' DescribeSpotFleetInstances (Prelude.Maybe Prelude.Natural)
+describeSpotFleetInstances_maxResults = Lens.lens (\DescribeSpotFleetInstances' {maxResults} -> maxResults) (\s@DescribeSpotFleetInstances' {} a -> s {maxResults = a} :: DescribeSpotFleetInstances)
+
+-- | The token for the next set of results.
+describeSpotFleetInstances_nextToken :: Lens.Lens' DescribeSpotFleetInstances (Prelude.Maybe Prelude.Text)
+describeSpotFleetInstances_nextToken = Lens.lens (\DescribeSpotFleetInstances' {nextToken} -> nextToken) (\s@DescribeSpotFleetInstances' {} a -> s {nextToken = a} :: DescribeSpotFleetInstances)
+
+-- | The ID of the Spot Fleet request.
+describeSpotFleetInstances_spotFleetRequestId :: Lens.Lens' DescribeSpotFleetInstances Prelude.Text
+describeSpotFleetInstances_spotFleetRequestId = Lens.lens (\DescribeSpotFleetInstances' {spotFleetRequestId} -> spotFleetRequestId) (\s@DescribeSpotFleetInstances' {} a -> s {spotFleetRequestId = a} :: DescribeSpotFleetInstances)
+
+instance Core.AWSPager DescribeSpotFleetInstances where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotFleetInstancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotFleetInstancesResponse_activeInstances
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSpotFleetInstances_nextToken
+          Lens..~ rs
+          Lens.^? describeSpotFleetInstancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSpotFleetInstances where
+  type
+    AWSResponse DescribeSpotFleetInstances =
+      DescribeSpotFleetInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSpotFleetInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "activeInstanceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (x Data..@? "spotFleetRequestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSpotFleetInstances where
+  hashWithSalt _salt DescribeSpotFleetInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` spotFleetRequestId
+
+instance Prelude.NFData DescribeSpotFleetInstances where
+  rnf DescribeSpotFleetInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
+
+instance Data.ToHeaders DescribeSpotFleetInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSpotFleetInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSpotFleetInstances where
+  toQuery DescribeSpotFleetInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSpotFleetInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "SpotFleetRequestId" Data.=: spotFleetRequestId
+      ]
+
+-- | Contains the output of DescribeSpotFleetInstances.
+--
+-- /See:/ 'newDescribeSpotFleetInstancesResponse' smart constructor.
+data DescribeSpotFleetInstancesResponse = DescribeSpotFleetInstancesResponse'
+  { -- | The running instances. This list is refreshed periodically and might be
+    -- out of date.
+    activeInstances :: Prelude.Maybe [ActiveInstance],
+    -- | The token required to retrieve the next set of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotFleetInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeInstances', 'describeSpotFleetInstancesResponse_activeInstances' - The running instances. This list is refreshed periodically and might be
+-- out of date.
+--
+-- 'nextToken', 'describeSpotFleetInstancesResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'spotFleetRequestId', 'describeSpotFleetInstancesResponse_spotFleetRequestId' - The ID of the Spot Fleet request.
+--
+-- 'httpStatus', 'describeSpotFleetInstancesResponse_httpStatus' - The response's http status code.
+newDescribeSpotFleetInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSpotFleetInstancesResponse
+newDescribeSpotFleetInstancesResponse pHttpStatus_ =
+  DescribeSpotFleetInstancesResponse'
+    { activeInstances =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      spotFleetRequestId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The running instances. This list is refreshed periodically and might be
+-- out of date.
+describeSpotFleetInstancesResponse_activeInstances :: Lens.Lens' DescribeSpotFleetInstancesResponse (Prelude.Maybe [ActiveInstance])
+describeSpotFleetInstancesResponse_activeInstances = Lens.lens (\DescribeSpotFleetInstancesResponse' {activeInstances} -> activeInstances) (\s@DescribeSpotFleetInstancesResponse' {} a -> s {activeInstances = a} :: DescribeSpotFleetInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+describeSpotFleetInstancesResponse_nextToken :: Lens.Lens' DescribeSpotFleetInstancesResponse (Prelude.Maybe Prelude.Text)
+describeSpotFleetInstancesResponse_nextToken = Lens.lens (\DescribeSpotFleetInstancesResponse' {nextToken} -> nextToken) (\s@DescribeSpotFleetInstancesResponse' {} a -> s {nextToken = a} :: DescribeSpotFleetInstancesResponse)
+
+-- | The ID of the Spot Fleet request.
+describeSpotFleetInstancesResponse_spotFleetRequestId :: Lens.Lens' DescribeSpotFleetInstancesResponse (Prelude.Maybe Prelude.Text)
+describeSpotFleetInstancesResponse_spotFleetRequestId = Lens.lens (\DescribeSpotFleetInstancesResponse' {spotFleetRequestId} -> spotFleetRequestId) (\s@DescribeSpotFleetInstancesResponse' {} a -> s {spotFleetRequestId = a} :: DescribeSpotFleetInstancesResponse)
+
+-- | The response's http status code.
+describeSpotFleetInstancesResponse_httpStatus :: Lens.Lens' DescribeSpotFleetInstancesResponse Prelude.Int
+describeSpotFleetInstancesResponse_httpStatus = Lens.lens (\DescribeSpotFleetInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeSpotFleetInstancesResponse' {} a -> s {httpStatus = a} :: DescribeSpotFleetInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeSpotFleetInstancesResponse
+  where
+  rnf DescribeSpotFleetInstancesResponse' {..} =
+    Prelude.rnf activeInstances
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSpotFleetRequestHistory.hs b/gen/Amazonka/EC2/DescribeSpotFleetRequestHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSpotFleetRequestHistory.hs
@@ -0,0 +1,360 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSpotFleetRequestHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the events for the specified Spot Fleet request during the
+-- specified time.
+--
+-- Spot Fleet events are delayed by up to 30 seconds before they can be
+-- described. This ensures that you can query by the last evaluated time
+-- and not miss a recorded event. Spot Fleet events are available for 48
+-- hours.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/fleet-monitor.html Monitor fleet events using Amazon EventBridge>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DescribeSpotFleetRequestHistory
+  ( -- * Creating a Request
+    DescribeSpotFleetRequestHistory (..),
+    newDescribeSpotFleetRequestHistory,
+
+    -- * Request Lenses
+    describeSpotFleetRequestHistory_dryRun,
+    describeSpotFleetRequestHistory_eventType,
+    describeSpotFleetRequestHistory_maxResults,
+    describeSpotFleetRequestHistory_nextToken,
+    describeSpotFleetRequestHistory_spotFleetRequestId,
+    describeSpotFleetRequestHistory_startTime,
+
+    -- * Destructuring the Response
+    DescribeSpotFleetRequestHistoryResponse (..),
+    newDescribeSpotFleetRequestHistoryResponse,
+
+    -- * Response Lenses
+    describeSpotFleetRequestHistoryResponse_historyRecords,
+    describeSpotFleetRequestHistoryResponse_lastEvaluatedTime,
+    describeSpotFleetRequestHistoryResponse_nextToken,
+    describeSpotFleetRequestHistoryResponse_spotFleetRequestId,
+    describeSpotFleetRequestHistoryResponse_startTime,
+    describeSpotFleetRequestHistoryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeSpotFleetRequestHistory.
+--
+-- /See:/ 'newDescribeSpotFleetRequestHistory' smart constructor.
+data DescribeSpotFleetRequestHistory = DescribeSpotFleetRequestHistory'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The type of events to describe. By default, all events are described.
+    eventType :: Prelude.Maybe EventType,
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Text,
+    -- | The starting date and time for the events, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    startTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotFleetRequestHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSpotFleetRequestHistory_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'eventType', 'describeSpotFleetRequestHistory_eventType' - The type of events to describe. By default, all events are described.
+--
+-- 'maxResults', 'describeSpotFleetRequestHistory_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeSpotFleetRequestHistory_nextToken' - The token for the next set of results.
+--
+-- 'spotFleetRequestId', 'describeSpotFleetRequestHistory_spotFleetRequestId' - The ID of the Spot Fleet request.
+--
+-- 'startTime', 'describeSpotFleetRequestHistory_startTime' - The starting date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newDescribeSpotFleetRequestHistory ::
+  -- | 'spotFleetRequestId'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  DescribeSpotFleetRequestHistory
+newDescribeSpotFleetRequestHistory
+  pSpotFleetRequestId_
+  pStartTime_ =
+    DescribeSpotFleetRequestHistory'
+      { dryRun =
+          Prelude.Nothing,
+        eventType = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        spotFleetRequestId = pSpotFleetRequestId_,
+        startTime = Data._Time Lens.# pStartTime_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSpotFleetRequestHistory_dryRun :: Lens.Lens' DescribeSpotFleetRequestHistory (Prelude.Maybe Prelude.Bool)
+describeSpotFleetRequestHistory_dryRun = Lens.lens (\DescribeSpotFleetRequestHistory' {dryRun} -> dryRun) (\s@DescribeSpotFleetRequestHistory' {} a -> s {dryRun = a} :: DescribeSpotFleetRequestHistory)
+
+-- | The type of events to describe. By default, all events are described.
+describeSpotFleetRequestHistory_eventType :: Lens.Lens' DescribeSpotFleetRequestHistory (Prelude.Maybe EventType)
+describeSpotFleetRequestHistory_eventType = Lens.lens (\DescribeSpotFleetRequestHistory' {eventType} -> eventType) (\s@DescribeSpotFleetRequestHistory' {} a -> s {eventType = a} :: DescribeSpotFleetRequestHistory)
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeSpotFleetRequestHistory_maxResults :: Lens.Lens' DescribeSpotFleetRequestHistory (Prelude.Maybe Prelude.Natural)
+describeSpotFleetRequestHistory_maxResults = Lens.lens (\DescribeSpotFleetRequestHistory' {maxResults} -> maxResults) (\s@DescribeSpotFleetRequestHistory' {} a -> s {maxResults = a} :: DescribeSpotFleetRequestHistory)
+
+-- | The token for the next set of results.
+describeSpotFleetRequestHistory_nextToken :: Lens.Lens' DescribeSpotFleetRequestHistory (Prelude.Maybe Prelude.Text)
+describeSpotFleetRequestHistory_nextToken = Lens.lens (\DescribeSpotFleetRequestHistory' {nextToken} -> nextToken) (\s@DescribeSpotFleetRequestHistory' {} a -> s {nextToken = a} :: DescribeSpotFleetRequestHistory)
+
+-- | The ID of the Spot Fleet request.
+describeSpotFleetRequestHistory_spotFleetRequestId :: Lens.Lens' DescribeSpotFleetRequestHistory Prelude.Text
+describeSpotFleetRequestHistory_spotFleetRequestId = Lens.lens (\DescribeSpotFleetRequestHistory' {spotFleetRequestId} -> spotFleetRequestId) (\s@DescribeSpotFleetRequestHistory' {} a -> s {spotFleetRequestId = a} :: DescribeSpotFleetRequestHistory)
+
+-- | The starting date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+describeSpotFleetRequestHistory_startTime :: Lens.Lens' DescribeSpotFleetRequestHistory Prelude.UTCTime
+describeSpotFleetRequestHistory_startTime = Lens.lens (\DescribeSpotFleetRequestHistory' {startTime} -> startTime) (\s@DescribeSpotFleetRequestHistory' {} a -> s {startTime = a} :: DescribeSpotFleetRequestHistory) Prelude.. Data._Time
+
+instance
+  Core.AWSRequest
+    DescribeSpotFleetRequestHistory
+  where
+  type
+    AWSResponse DescribeSpotFleetRequestHistory =
+      DescribeSpotFleetRequestHistoryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSpotFleetRequestHistoryResponse'
+            Prelude.<$> ( x
+                            Data..@? "historyRecordSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "lastEvaluatedTime")
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (x Data..@? "spotFleetRequestId")
+            Prelude.<*> (x Data..@? "startTime")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeSpotFleetRequestHistory
+  where
+  hashWithSalt
+    _salt
+    DescribeSpotFleetRequestHistory' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` eventType
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` spotFleetRequestId
+        `Prelude.hashWithSalt` startTime
+
+instance
+  Prelude.NFData
+    DescribeSpotFleetRequestHistory
+  where
+  rnf DescribeSpotFleetRequestHistory' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
+      `Prelude.seq` Prelude.rnf startTime
+
+instance
+  Data.ToHeaders
+    DescribeSpotFleetRequestHistory
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSpotFleetRequestHistory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSpotFleetRequestHistory where
+  toQuery DescribeSpotFleetRequestHistory' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeSpotFleetRequestHistory" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EventType" Data.=: eventType,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "SpotFleetRequestId" Data.=: spotFleetRequestId,
+        "StartTime" Data.=: startTime
+      ]
+
+-- | Contains the output of DescribeSpotFleetRequestHistory.
+--
+-- /See:/ 'newDescribeSpotFleetRequestHistoryResponse' smart constructor.
+data DescribeSpotFleetRequestHistoryResponse = DescribeSpotFleetRequestHistoryResponse'
+  { -- | Information about the events in the history of the Spot Fleet request.
+    historyRecords :: Prelude.Maybe [HistoryRecord],
+    -- | The last date and time for the events, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). All records up to this time were
+    -- retrieved.
+    --
+    -- If @nextToken@ indicates that there are more results, this value is not
+    -- present.
+    lastEvaluatedTime :: Prelude.Maybe Data.ISO8601,
+    -- | The token required to retrieve the next set of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Maybe Prelude.Text,
+    -- | The starting date and time for the events, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotFleetRequestHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'historyRecords', 'describeSpotFleetRequestHistoryResponse_historyRecords' - Information about the events in the history of the Spot Fleet request.
+--
+-- 'lastEvaluatedTime', 'describeSpotFleetRequestHistoryResponse_lastEvaluatedTime' - The last date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). All records up to this time were
+-- retrieved.
+--
+-- If @nextToken@ indicates that there are more results, this value is not
+-- present.
+--
+-- 'nextToken', 'describeSpotFleetRequestHistoryResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'spotFleetRequestId', 'describeSpotFleetRequestHistoryResponse_spotFleetRequestId' - The ID of the Spot Fleet request.
+--
+-- 'startTime', 'describeSpotFleetRequestHistoryResponse_startTime' - The starting date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- 'httpStatus', 'describeSpotFleetRequestHistoryResponse_httpStatus' - The response's http status code.
+newDescribeSpotFleetRequestHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSpotFleetRequestHistoryResponse
+newDescribeSpotFleetRequestHistoryResponse
+  pHttpStatus_ =
+    DescribeSpotFleetRequestHistoryResponse'
+      { historyRecords =
+          Prelude.Nothing,
+        lastEvaluatedTime =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        spotFleetRequestId =
+          Prelude.Nothing,
+        startTime = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the events in the history of the Spot Fleet request.
+describeSpotFleetRequestHistoryResponse_historyRecords :: Lens.Lens' DescribeSpotFleetRequestHistoryResponse (Prelude.Maybe [HistoryRecord])
+describeSpotFleetRequestHistoryResponse_historyRecords = Lens.lens (\DescribeSpotFleetRequestHistoryResponse' {historyRecords} -> historyRecords) (\s@DescribeSpotFleetRequestHistoryResponse' {} a -> s {historyRecords = a} :: DescribeSpotFleetRequestHistoryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). All records up to this time were
+-- retrieved.
+--
+-- If @nextToken@ indicates that there are more results, this value is not
+-- present.
+describeSpotFleetRequestHistoryResponse_lastEvaluatedTime :: Lens.Lens' DescribeSpotFleetRequestHistoryResponse (Prelude.Maybe Prelude.UTCTime)
+describeSpotFleetRequestHistoryResponse_lastEvaluatedTime = Lens.lens (\DescribeSpotFleetRequestHistoryResponse' {lastEvaluatedTime} -> lastEvaluatedTime) (\s@DescribeSpotFleetRequestHistoryResponse' {} a -> s {lastEvaluatedTime = a} :: DescribeSpotFleetRequestHistoryResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+describeSpotFleetRequestHistoryResponse_nextToken :: Lens.Lens' DescribeSpotFleetRequestHistoryResponse (Prelude.Maybe Prelude.Text)
+describeSpotFleetRequestHistoryResponse_nextToken = Lens.lens (\DescribeSpotFleetRequestHistoryResponse' {nextToken} -> nextToken) (\s@DescribeSpotFleetRequestHistoryResponse' {} a -> s {nextToken = a} :: DescribeSpotFleetRequestHistoryResponse)
+
+-- | The ID of the Spot Fleet request.
+describeSpotFleetRequestHistoryResponse_spotFleetRequestId :: Lens.Lens' DescribeSpotFleetRequestHistoryResponse (Prelude.Maybe Prelude.Text)
+describeSpotFleetRequestHistoryResponse_spotFleetRequestId = Lens.lens (\DescribeSpotFleetRequestHistoryResponse' {spotFleetRequestId} -> spotFleetRequestId) (\s@DescribeSpotFleetRequestHistoryResponse' {} a -> s {spotFleetRequestId = a} :: DescribeSpotFleetRequestHistoryResponse)
+
+-- | The starting date and time for the events, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+describeSpotFleetRequestHistoryResponse_startTime :: Lens.Lens' DescribeSpotFleetRequestHistoryResponse (Prelude.Maybe Prelude.UTCTime)
+describeSpotFleetRequestHistoryResponse_startTime = Lens.lens (\DescribeSpotFleetRequestHistoryResponse' {startTime} -> startTime) (\s@DescribeSpotFleetRequestHistoryResponse' {} a -> s {startTime = a} :: DescribeSpotFleetRequestHistoryResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+describeSpotFleetRequestHistoryResponse_httpStatus :: Lens.Lens' DescribeSpotFleetRequestHistoryResponse Prelude.Int
+describeSpotFleetRequestHistoryResponse_httpStatus = Lens.lens (\DescribeSpotFleetRequestHistoryResponse' {httpStatus} -> httpStatus) (\s@DescribeSpotFleetRequestHistoryResponse' {} a -> s {httpStatus = a} :: DescribeSpotFleetRequestHistoryResponse)
+
+instance
+  Prelude.NFData
+    DescribeSpotFleetRequestHistoryResponse
+  where
+  rnf DescribeSpotFleetRequestHistoryResponse' {..} =
+    Prelude.rnf historyRecords
+      `Prelude.seq` Prelude.rnf lastEvaluatedTime
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSpotFleetRequests.hs b/gen/Amazonka/EC2/DescribeSpotFleetRequests.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSpotFleetRequests.hs
@@ -0,0 +1,273 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSpotFleetRequests
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your Spot Fleet requests.
+--
+-- Spot Fleet requests are deleted 48 hours after they are canceled and
+-- their instances are terminated.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSpotFleetRequests
+  ( -- * Creating a Request
+    DescribeSpotFleetRequests (..),
+    newDescribeSpotFleetRequests,
+
+    -- * Request Lenses
+    describeSpotFleetRequests_dryRun,
+    describeSpotFleetRequests_maxResults,
+    describeSpotFleetRequests_nextToken,
+    describeSpotFleetRequests_spotFleetRequestIds,
+
+    -- * Destructuring the Response
+    DescribeSpotFleetRequestsResponse (..),
+    newDescribeSpotFleetRequestsResponse,
+
+    -- * Response Lenses
+    describeSpotFleetRequestsResponse_nextToken,
+    describeSpotFleetRequestsResponse_spotFleetRequestConfigs,
+    describeSpotFleetRequestsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeSpotFleetRequests.
+--
+-- /See:/ 'newDescribeSpotFleetRequests' smart constructor.
+data DescribeSpotFleetRequests = DescribeSpotFleetRequests'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Spot Fleet requests.
+    spotFleetRequestIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotFleetRequests' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSpotFleetRequests_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'describeSpotFleetRequests_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeSpotFleetRequests_nextToken' - The token for the next set of results.
+--
+-- 'spotFleetRequestIds', 'describeSpotFleetRequests_spotFleetRequestIds' - The IDs of the Spot Fleet requests.
+newDescribeSpotFleetRequests ::
+  DescribeSpotFleetRequests
+newDescribeSpotFleetRequests =
+  DescribeSpotFleetRequests'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      spotFleetRequestIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSpotFleetRequests_dryRun :: Lens.Lens' DescribeSpotFleetRequests (Prelude.Maybe Prelude.Bool)
+describeSpotFleetRequests_dryRun = Lens.lens (\DescribeSpotFleetRequests' {dryRun} -> dryRun) (\s@DescribeSpotFleetRequests' {} a -> s {dryRun = a} :: DescribeSpotFleetRequests)
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeSpotFleetRequests_maxResults :: Lens.Lens' DescribeSpotFleetRequests (Prelude.Maybe Prelude.Int)
+describeSpotFleetRequests_maxResults = Lens.lens (\DescribeSpotFleetRequests' {maxResults} -> maxResults) (\s@DescribeSpotFleetRequests' {} a -> s {maxResults = a} :: DescribeSpotFleetRequests)
+
+-- | The token for the next set of results.
+describeSpotFleetRequests_nextToken :: Lens.Lens' DescribeSpotFleetRequests (Prelude.Maybe Prelude.Text)
+describeSpotFleetRequests_nextToken = Lens.lens (\DescribeSpotFleetRequests' {nextToken} -> nextToken) (\s@DescribeSpotFleetRequests' {} a -> s {nextToken = a} :: DescribeSpotFleetRequests)
+
+-- | The IDs of the Spot Fleet requests.
+describeSpotFleetRequests_spotFleetRequestIds :: Lens.Lens' DescribeSpotFleetRequests (Prelude.Maybe [Prelude.Text])
+describeSpotFleetRequests_spotFleetRequestIds = Lens.lens (\DescribeSpotFleetRequests' {spotFleetRequestIds} -> spotFleetRequestIds) (\s@DescribeSpotFleetRequests' {} a -> s {spotFleetRequestIds = a} :: DescribeSpotFleetRequests) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeSpotFleetRequests where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotFleetRequestsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotFleetRequestsResponse_spotFleetRequestConfigs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSpotFleetRequests_nextToken
+          Lens..~ rs
+          Lens.^? describeSpotFleetRequestsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSpotFleetRequests where
+  type
+    AWSResponse DescribeSpotFleetRequests =
+      DescribeSpotFleetRequestsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSpotFleetRequestsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "spotFleetRequestConfigSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSpotFleetRequests where
+  hashWithSalt _salt DescribeSpotFleetRequests' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` spotFleetRequestIds
+
+instance Prelude.NFData DescribeSpotFleetRequests where
+  rnf DescribeSpotFleetRequests' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotFleetRequestIds
+
+instance Data.ToHeaders DescribeSpotFleetRequests where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSpotFleetRequests where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSpotFleetRequests where
+  toQuery DescribeSpotFleetRequests' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSpotFleetRequests" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "SpotFleetRequestId"
+              Prelude.<$> spotFleetRequestIds
+          )
+      ]
+
+-- | Contains the output of DescribeSpotFleetRequests.
+--
+-- /See:/ 'newDescribeSpotFleetRequestsResponse' smart constructor.
+data DescribeSpotFleetRequestsResponse = DescribeSpotFleetRequestsResponse'
+  { -- | The token required to retrieve the next set of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the configuration of your Spot Fleet.
+    spotFleetRequestConfigs :: Prelude.Maybe [SpotFleetRequestConfig],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotFleetRequestsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSpotFleetRequestsResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'spotFleetRequestConfigs', 'describeSpotFleetRequestsResponse_spotFleetRequestConfigs' - Information about the configuration of your Spot Fleet.
+--
+-- 'httpStatus', 'describeSpotFleetRequestsResponse_httpStatus' - The response's http status code.
+newDescribeSpotFleetRequestsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSpotFleetRequestsResponse
+newDescribeSpotFleetRequestsResponse pHttpStatus_ =
+  DescribeSpotFleetRequestsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      spotFleetRequestConfigs =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token required to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+describeSpotFleetRequestsResponse_nextToken :: Lens.Lens' DescribeSpotFleetRequestsResponse (Prelude.Maybe Prelude.Text)
+describeSpotFleetRequestsResponse_nextToken = Lens.lens (\DescribeSpotFleetRequestsResponse' {nextToken} -> nextToken) (\s@DescribeSpotFleetRequestsResponse' {} a -> s {nextToken = a} :: DescribeSpotFleetRequestsResponse)
+
+-- | Information about the configuration of your Spot Fleet.
+describeSpotFleetRequestsResponse_spotFleetRequestConfigs :: Lens.Lens' DescribeSpotFleetRequestsResponse (Prelude.Maybe [SpotFleetRequestConfig])
+describeSpotFleetRequestsResponse_spotFleetRequestConfigs = Lens.lens (\DescribeSpotFleetRequestsResponse' {spotFleetRequestConfigs} -> spotFleetRequestConfigs) (\s@DescribeSpotFleetRequestsResponse' {} a -> s {spotFleetRequestConfigs = a} :: DescribeSpotFleetRequestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSpotFleetRequestsResponse_httpStatus :: Lens.Lens' DescribeSpotFleetRequestsResponse Prelude.Int
+describeSpotFleetRequestsResponse_httpStatus = Lens.lens (\DescribeSpotFleetRequestsResponse' {httpStatus} -> httpStatus) (\s@DescribeSpotFleetRequestsResponse' {} a -> s {httpStatus = a} :: DescribeSpotFleetRequestsResponse)
+
+instance
+  Prelude.NFData
+    DescribeSpotFleetRequestsResponse
+  where
+  rnf DescribeSpotFleetRequestsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotFleetRequestConfigs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSpotInstanceRequests.hs b/gen/Amazonka/EC2/DescribeSpotInstanceRequests.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSpotInstanceRequests.hs
@@ -0,0 +1,656 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSpotInstanceRequests
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified Spot Instance requests.
+--
+-- You can use @DescribeSpotInstanceRequests@ to find a running Spot
+-- Instance by examining the response. If the status of the Spot Instance
+-- is @fulfilled@, the instance ID appears in the response and contains the
+-- identifier of the instance. Alternatively, you can use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances DescribeInstances>
+-- with a filter to look for instances where the instance lifecycle is
+-- @spot@.
+--
+-- We recommend that you set @MaxResults@ to a value between 5 and 1000 to
+-- limit the number of results returned. This paginates the output, which
+-- makes the list more manageable and returns the results faster. If the
+-- list of results exceeds your @MaxResults@ value, then that number of
+-- results is returned along with a @NextToken@ value that can be passed to
+-- a subsequent @DescribeSpotInstanceRequests@ request to retrieve the
+-- remaining results.
+--
+-- Spot Instance requests are deleted four hours after they are canceled
+-- and their instances are terminated.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSpotInstanceRequests
+  ( -- * Creating a Request
+    DescribeSpotInstanceRequests (..),
+    newDescribeSpotInstanceRequests,
+
+    -- * Request Lenses
+    describeSpotInstanceRequests_dryRun,
+    describeSpotInstanceRequests_filters,
+    describeSpotInstanceRequests_maxResults,
+    describeSpotInstanceRequests_nextToken,
+    describeSpotInstanceRequests_spotInstanceRequestIds,
+
+    -- * Destructuring the Response
+    DescribeSpotInstanceRequestsResponse (..),
+    newDescribeSpotInstanceRequestsResponse,
+
+    -- * Response Lenses
+    describeSpotInstanceRequestsResponse_nextToken,
+    describeSpotInstanceRequestsResponse_spotInstanceRequests,
+    describeSpotInstanceRequestsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeSpotInstanceRequests.
+--
+-- /See:/ 'newDescribeSpotInstanceRequests' smart constructor.
+data DescribeSpotInstanceRequests = DescribeSpotInstanceRequests'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @availability-zone-group@ - The Availability Zone group.
+    --
+    -- -   @create-time@ - The time stamp when the Spot Instance request was
+    --     created.
+    --
+    -- -   @fault-code@ - The fault code related to the request.
+    --
+    -- -   @fault-message@ - The fault message related to the request.
+    --
+    -- -   @instance-id@ - The ID of the instance that fulfilled the request.
+    --
+    -- -   @launch-group@ - The Spot Instance launch group.
+    --
+    -- -   @launch.block-device-mapping.delete-on-termination@ - Indicates
+    --     whether the EBS volume is deleted on instance termination.
+    --
+    -- -   @launch.block-device-mapping.device-name@ - The device name for the
+    --     volume in the block device mapping (for example, @\/dev\/sdh@ or
+    --     @xvdh@).
+    --
+    -- -   @launch.block-device-mapping.snapshot-id@ - The ID of the snapshot
+    --     for the EBS volume.
+    --
+    -- -   @launch.block-device-mapping.volume-size@ - The size of the EBS
+    --     volume, in GiB.
+    --
+    -- -   @launch.block-device-mapping.volume-type@ - The type of EBS volume:
+    --     @gp2@ for General Purpose SSD, @io1@ or @io2@ for Provisioned IOPS
+    --     SSD, @st1@ for Throughput Optimized HDD, @sc1@for Cold HDD, or
+    --     @standard@ for Magnetic.
+    --
+    -- -   @launch.group-id@ - The ID of the security group for the instance.
+    --
+    -- -   @launch.group-name@ - The name of the security group for the
+    --     instance.
+    --
+    -- -   @launch.image-id@ - The ID of the AMI.
+    --
+    -- -   @launch.instance-type@ - The type of instance (for example,
+    --     @m3.medium@).
+    --
+    -- -   @launch.kernel-id@ - The kernel ID.
+    --
+    -- -   @launch.key-name@ - The name of the key pair the instance launched
+    --     with.
+    --
+    -- -   @launch.monitoring-enabled@ - Whether detailed monitoring is enabled
+    --     for the Spot Instance.
+    --
+    -- -   @launch.ramdisk-id@ - The RAM disk ID.
+    --
+    -- -   @launched-availability-zone@ - The Availability Zone in which the
+    --     request is launched.
+    --
+    -- -   @network-interface.addresses.primary@ - Indicates whether the IP
+    --     address is the primary private IP address.
+    --
+    -- -   @network-interface.delete-on-termination@ - Indicates whether the
+    --     network interface is deleted when the instance is terminated.
+    --
+    -- -   @network-interface.description@ - A description of the network
+    --     interface.
+    --
+    -- -   @network-interface.device-index@ - The index of the device for the
+    --     network interface attachment on the instance.
+    --
+    -- -   @network-interface.group-id@ - The ID of the security group
+    --     associated with the network interface.
+    --
+    -- -   @network-interface.network-interface-id@ - The ID of the network
+    --     interface.
+    --
+    -- -   @network-interface.private-ip-address@ - The primary private IP
+    --     address of the network interface.
+    --
+    -- -   @network-interface.subnet-id@ - The ID of the subnet for the
+    --     instance.
+    --
+    -- -   @product-description@ - The product description associated with the
+    --     instance (@Linux\/UNIX@ | @Windows@).
+    --
+    -- -   @spot-instance-request-id@ - The Spot Instance request ID.
+    --
+    -- -   @spot-price@ - The maximum hourly price for any Spot Instance
+    --     launched to fulfill the request.
+    --
+    -- -   @state@ - The state of the Spot Instance request (@open@ | @active@
+    --     | @closed@ | @cancelled@ | @failed@). Spot request status
+    --     information can help you track your Amazon EC2 Spot Instance
+    --     requests. For more information, see
+    --     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html Spot request status>
+    --     in the /Amazon EC2 User Guide for Linux Instances/.
+    --
+    -- -   @status-code@ - The short code describing the most recent evaluation
+    --     of your Spot Instance request.
+    --
+    -- -   @status-message@ - The message explaining the status of the Spot
+    --     Instance request.
+    --
+    -- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @type@ - The type of Spot Instance request (@one-time@ |
+    --     @persistent@).
+    --
+    -- -   @valid-from@ - The start date of the request.
+    --
+    -- -   @valid-until@ - The end date of the request.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 5 and 1000. To retrieve the remaining results, make
+    -- another call with the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to request the next set of results. This value is @null@ when
+    -- there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more Spot Instance request IDs.
+    spotInstanceRequestIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotInstanceRequests' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSpotInstanceRequests_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeSpotInstanceRequests_filters' - One or more filters.
+--
+-- -   @availability-zone-group@ - The Availability Zone group.
+--
+-- -   @create-time@ - The time stamp when the Spot Instance request was
+--     created.
+--
+-- -   @fault-code@ - The fault code related to the request.
+--
+-- -   @fault-message@ - The fault message related to the request.
+--
+-- -   @instance-id@ - The ID of the instance that fulfilled the request.
+--
+-- -   @launch-group@ - The Spot Instance launch group.
+--
+-- -   @launch.block-device-mapping.delete-on-termination@ - Indicates
+--     whether the EBS volume is deleted on instance termination.
+--
+-- -   @launch.block-device-mapping.device-name@ - The device name for the
+--     volume in the block device mapping (for example, @\/dev\/sdh@ or
+--     @xvdh@).
+--
+-- -   @launch.block-device-mapping.snapshot-id@ - The ID of the snapshot
+--     for the EBS volume.
+--
+-- -   @launch.block-device-mapping.volume-size@ - The size of the EBS
+--     volume, in GiB.
+--
+-- -   @launch.block-device-mapping.volume-type@ - The type of EBS volume:
+--     @gp2@ for General Purpose SSD, @io1@ or @io2@ for Provisioned IOPS
+--     SSD, @st1@ for Throughput Optimized HDD, @sc1@for Cold HDD, or
+--     @standard@ for Magnetic.
+--
+-- -   @launch.group-id@ - The ID of the security group for the instance.
+--
+-- -   @launch.group-name@ - The name of the security group for the
+--     instance.
+--
+-- -   @launch.image-id@ - The ID of the AMI.
+--
+-- -   @launch.instance-type@ - The type of instance (for example,
+--     @m3.medium@).
+--
+-- -   @launch.kernel-id@ - The kernel ID.
+--
+-- -   @launch.key-name@ - The name of the key pair the instance launched
+--     with.
+--
+-- -   @launch.monitoring-enabled@ - Whether detailed monitoring is enabled
+--     for the Spot Instance.
+--
+-- -   @launch.ramdisk-id@ - The RAM disk ID.
+--
+-- -   @launched-availability-zone@ - The Availability Zone in which the
+--     request is launched.
+--
+-- -   @network-interface.addresses.primary@ - Indicates whether the IP
+--     address is the primary private IP address.
+--
+-- -   @network-interface.delete-on-termination@ - Indicates whether the
+--     network interface is deleted when the instance is terminated.
+--
+-- -   @network-interface.description@ - A description of the network
+--     interface.
+--
+-- -   @network-interface.device-index@ - The index of the device for the
+--     network interface attachment on the instance.
+--
+-- -   @network-interface.group-id@ - The ID of the security group
+--     associated with the network interface.
+--
+-- -   @network-interface.network-interface-id@ - The ID of the network
+--     interface.
+--
+-- -   @network-interface.private-ip-address@ - The primary private IP
+--     address of the network interface.
+--
+-- -   @network-interface.subnet-id@ - The ID of the subnet for the
+--     instance.
+--
+-- -   @product-description@ - The product description associated with the
+--     instance (@Linux\/UNIX@ | @Windows@).
+--
+-- -   @spot-instance-request-id@ - The Spot Instance request ID.
+--
+-- -   @spot-price@ - The maximum hourly price for any Spot Instance
+--     launched to fulfill the request.
+--
+-- -   @state@ - The state of the Spot Instance request (@open@ | @active@
+--     | @closed@ | @cancelled@ | @failed@). Spot request status
+--     information can help you track your Amazon EC2 Spot Instance
+--     requests. For more information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html Spot request status>
+--     in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- -   @status-code@ - The short code describing the most recent evaluation
+--     of your Spot Instance request.
+--
+-- -   @status-message@ - The message explaining the status of the Spot
+--     Instance request.
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @type@ - The type of Spot Instance request (@one-time@ |
+--     @persistent@).
+--
+-- -   @valid-from@ - The start date of the request.
+--
+-- -   @valid-until@ - The end date of the request.
+--
+-- 'maxResults', 'describeSpotInstanceRequests_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 5 and 1000. To retrieve the remaining results, make
+-- another call with the returned @NextToken@ value.
+--
+-- 'nextToken', 'describeSpotInstanceRequests_nextToken' - The token to request the next set of results. This value is @null@ when
+-- there are no more results to return.
+--
+-- 'spotInstanceRequestIds', 'describeSpotInstanceRequests_spotInstanceRequestIds' - One or more Spot Instance request IDs.
+newDescribeSpotInstanceRequests ::
+  DescribeSpotInstanceRequests
+newDescribeSpotInstanceRequests =
+  DescribeSpotInstanceRequests'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      spotInstanceRequestIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSpotInstanceRequests_dryRun :: Lens.Lens' DescribeSpotInstanceRequests (Prelude.Maybe Prelude.Bool)
+describeSpotInstanceRequests_dryRun = Lens.lens (\DescribeSpotInstanceRequests' {dryRun} -> dryRun) (\s@DescribeSpotInstanceRequests' {} a -> s {dryRun = a} :: DescribeSpotInstanceRequests)
+
+-- | One or more filters.
+--
+-- -   @availability-zone-group@ - The Availability Zone group.
+--
+-- -   @create-time@ - The time stamp when the Spot Instance request was
+--     created.
+--
+-- -   @fault-code@ - The fault code related to the request.
+--
+-- -   @fault-message@ - The fault message related to the request.
+--
+-- -   @instance-id@ - The ID of the instance that fulfilled the request.
+--
+-- -   @launch-group@ - The Spot Instance launch group.
+--
+-- -   @launch.block-device-mapping.delete-on-termination@ - Indicates
+--     whether the EBS volume is deleted on instance termination.
+--
+-- -   @launch.block-device-mapping.device-name@ - The device name for the
+--     volume in the block device mapping (for example, @\/dev\/sdh@ or
+--     @xvdh@).
+--
+-- -   @launch.block-device-mapping.snapshot-id@ - The ID of the snapshot
+--     for the EBS volume.
+--
+-- -   @launch.block-device-mapping.volume-size@ - The size of the EBS
+--     volume, in GiB.
+--
+-- -   @launch.block-device-mapping.volume-type@ - The type of EBS volume:
+--     @gp2@ for General Purpose SSD, @io1@ or @io2@ for Provisioned IOPS
+--     SSD, @st1@ for Throughput Optimized HDD, @sc1@for Cold HDD, or
+--     @standard@ for Magnetic.
+--
+-- -   @launch.group-id@ - The ID of the security group for the instance.
+--
+-- -   @launch.group-name@ - The name of the security group for the
+--     instance.
+--
+-- -   @launch.image-id@ - The ID of the AMI.
+--
+-- -   @launch.instance-type@ - The type of instance (for example,
+--     @m3.medium@).
+--
+-- -   @launch.kernel-id@ - The kernel ID.
+--
+-- -   @launch.key-name@ - The name of the key pair the instance launched
+--     with.
+--
+-- -   @launch.monitoring-enabled@ - Whether detailed monitoring is enabled
+--     for the Spot Instance.
+--
+-- -   @launch.ramdisk-id@ - The RAM disk ID.
+--
+-- -   @launched-availability-zone@ - The Availability Zone in which the
+--     request is launched.
+--
+-- -   @network-interface.addresses.primary@ - Indicates whether the IP
+--     address is the primary private IP address.
+--
+-- -   @network-interface.delete-on-termination@ - Indicates whether the
+--     network interface is deleted when the instance is terminated.
+--
+-- -   @network-interface.description@ - A description of the network
+--     interface.
+--
+-- -   @network-interface.device-index@ - The index of the device for the
+--     network interface attachment on the instance.
+--
+-- -   @network-interface.group-id@ - The ID of the security group
+--     associated with the network interface.
+--
+-- -   @network-interface.network-interface-id@ - The ID of the network
+--     interface.
+--
+-- -   @network-interface.private-ip-address@ - The primary private IP
+--     address of the network interface.
+--
+-- -   @network-interface.subnet-id@ - The ID of the subnet for the
+--     instance.
+--
+-- -   @product-description@ - The product description associated with the
+--     instance (@Linux\/UNIX@ | @Windows@).
+--
+-- -   @spot-instance-request-id@ - The Spot Instance request ID.
+--
+-- -   @spot-price@ - The maximum hourly price for any Spot Instance
+--     launched to fulfill the request.
+--
+-- -   @state@ - The state of the Spot Instance request (@open@ | @active@
+--     | @closed@ | @cancelled@ | @failed@). Spot request status
+--     information can help you track your Amazon EC2 Spot Instance
+--     requests. For more information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html Spot request status>
+--     in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- -   @status-code@ - The short code describing the most recent evaluation
+--     of your Spot Instance request.
+--
+-- -   @status-message@ - The message explaining the status of the Spot
+--     Instance request.
+--
+-- -   @tag:\<key>@ - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @type@ - The type of Spot Instance request (@one-time@ |
+--     @persistent@).
+--
+-- -   @valid-from@ - The start date of the request.
+--
+-- -   @valid-until@ - The end date of the request.
+describeSpotInstanceRequests_filters :: Lens.Lens' DescribeSpotInstanceRequests (Prelude.Maybe [Filter])
+describeSpotInstanceRequests_filters = Lens.lens (\DescribeSpotInstanceRequests' {filters} -> filters) (\s@DescribeSpotInstanceRequests' {} a -> s {filters = a} :: DescribeSpotInstanceRequests) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 5 and 1000. To retrieve the remaining results, make
+-- another call with the returned @NextToken@ value.
+describeSpotInstanceRequests_maxResults :: Lens.Lens' DescribeSpotInstanceRequests (Prelude.Maybe Prelude.Int)
+describeSpotInstanceRequests_maxResults = Lens.lens (\DescribeSpotInstanceRequests' {maxResults} -> maxResults) (\s@DescribeSpotInstanceRequests' {} a -> s {maxResults = a} :: DescribeSpotInstanceRequests)
+
+-- | The token to request the next set of results. This value is @null@ when
+-- there are no more results to return.
+describeSpotInstanceRequests_nextToken :: Lens.Lens' DescribeSpotInstanceRequests (Prelude.Maybe Prelude.Text)
+describeSpotInstanceRequests_nextToken = Lens.lens (\DescribeSpotInstanceRequests' {nextToken} -> nextToken) (\s@DescribeSpotInstanceRequests' {} a -> s {nextToken = a} :: DescribeSpotInstanceRequests)
+
+-- | One or more Spot Instance request IDs.
+describeSpotInstanceRequests_spotInstanceRequestIds :: Lens.Lens' DescribeSpotInstanceRequests (Prelude.Maybe [Prelude.Text])
+describeSpotInstanceRequests_spotInstanceRequestIds = Lens.lens (\DescribeSpotInstanceRequests' {spotInstanceRequestIds} -> spotInstanceRequestIds) (\s@DescribeSpotInstanceRequests' {} a -> s {spotInstanceRequestIds = a} :: DescribeSpotInstanceRequests) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeSpotInstanceRequests where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotInstanceRequestsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotInstanceRequestsResponse_spotInstanceRequests
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSpotInstanceRequests_nextToken
+          Lens..~ rs
+          Lens.^? describeSpotInstanceRequestsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSpotInstanceRequests where
+  type
+    AWSResponse DescribeSpotInstanceRequests =
+      DescribeSpotInstanceRequestsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSpotInstanceRequestsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "spotInstanceRequestSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeSpotInstanceRequests
+  where
+  hashWithSalt _salt DescribeSpotInstanceRequests' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` spotInstanceRequestIds
+
+instance Prelude.NFData DescribeSpotInstanceRequests where
+  rnf DescribeSpotInstanceRequests' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotInstanceRequestIds
+
+instance Data.ToHeaders DescribeSpotInstanceRequests where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSpotInstanceRequests where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSpotInstanceRequests where
+  toQuery DescribeSpotInstanceRequests' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeSpotInstanceRequests" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "SpotInstanceRequestId"
+              Prelude.<$> spotInstanceRequestIds
+          )
+      ]
+
+-- | Contains the output of DescribeSpotInstanceRequests.
+--
+-- /See:/ 'newDescribeSpotInstanceRequestsResponse' smart constructor.
+data DescribeSpotInstanceRequestsResponse = DescribeSpotInstanceRequestsResponse'
+  { -- | The token to use to retrieve the next set of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more Spot Instance requests.
+    spotInstanceRequests :: Prelude.Maybe [SpotInstanceRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotInstanceRequestsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSpotInstanceRequestsResponse_nextToken' - The token to use to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'spotInstanceRequests', 'describeSpotInstanceRequestsResponse_spotInstanceRequests' - One or more Spot Instance requests.
+--
+-- 'httpStatus', 'describeSpotInstanceRequestsResponse_httpStatus' - The response's http status code.
+newDescribeSpotInstanceRequestsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSpotInstanceRequestsResponse
+newDescribeSpotInstanceRequestsResponse pHttpStatus_ =
+  DescribeSpotInstanceRequestsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      spotInstanceRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next set of results. This value is
+-- @null@ when there are no more results to return.
+describeSpotInstanceRequestsResponse_nextToken :: Lens.Lens' DescribeSpotInstanceRequestsResponse (Prelude.Maybe Prelude.Text)
+describeSpotInstanceRequestsResponse_nextToken = Lens.lens (\DescribeSpotInstanceRequestsResponse' {nextToken} -> nextToken) (\s@DescribeSpotInstanceRequestsResponse' {} a -> s {nextToken = a} :: DescribeSpotInstanceRequestsResponse)
+
+-- | One or more Spot Instance requests.
+describeSpotInstanceRequestsResponse_spotInstanceRequests :: Lens.Lens' DescribeSpotInstanceRequestsResponse (Prelude.Maybe [SpotInstanceRequest])
+describeSpotInstanceRequestsResponse_spotInstanceRequests = Lens.lens (\DescribeSpotInstanceRequestsResponse' {spotInstanceRequests} -> spotInstanceRequests) (\s@DescribeSpotInstanceRequestsResponse' {} a -> s {spotInstanceRequests = a} :: DescribeSpotInstanceRequestsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSpotInstanceRequestsResponse_httpStatus :: Lens.Lens' DescribeSpotInstanceRequestsResponse Prelude.Int
+describeSpotInstanceRequestsResponse_httpStatus = Lens.lens (\DescribeSpotInstanceRequestsResponse' {httpStatus} -> httpStatus) (\s@DescribeSpotInstanceRequestsResponse' {} a -> s {httpStatus = a} :: DescribeSpotInstanceRequestsResponse)
+
+instance
+  Prelude.NFData
+    DescribeSpotInstanceRequestsResponse
+  where
+  rnf DescribeSpotInstanceRequestsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotInstanceRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSpotPriceHistory.hs b/gen/Amazonka/EC2/DescribeSpotPriceHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSpotPriceHistory.hs
@@ -0,0 +1,414 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSpotPriceHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the Spot price history. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html Spot Instance pricing history>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- When you specify a start and end time, the operation returns the prices
+-- of the instance types within that time range. It also returns the last
+-- price change before the start time, which is the effective price as of
+-- the start time.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSpotPriceHistory
+  ( -- * Creating a Request
+    DescribeSpotPriceHistory (..),
+    newDescribeSpotPriceHistory,
+
+    -- * Request Lenses
+    describeSpotPriceHistory_availabilityZone,
+    describeSpotPriceHistory_dryRun,
+    describeSpotPriceHistory_endTime,
+    describeSpotPriceHistory_filters,
+    describeSpotPriceHistory_instanceTypes,
+    describeSpotPriceHistory_maxResults,
+    describeSpotPriceHistory_nextToken,
+    describeSpotPriceHistory_productDescriptions,
+    describeSpotPriceHistory_startTime,
+
+    -- * Destructuring the Response
+    DescribeSpotPriceHistoryResponse (..),
+    newDescribeSpotPriceHistoryResponse,
+
+    -- * Response Lenses
+    describeSpotPriceHistoryResponse_nextToken,
+    describeSpotPriceHistoryResponse_spotPriceHistory,
+    describeSpotPriceHistoryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeSpotPriceHistory.
+--
+-- /See:/ 'newDescribeSpotPriceHistory' smart constructor.
+data DescribeSpotPriceHistory = DescribeSpotPriceHistory'
+  { -- | Filters the results by the specified Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time, up to the current date, from which to stop retrieving
+    -- the price history data, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    endTime :: Prelude.Maybe Data.ISO8601,
+    -- | One or more filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone for which prices should
+    --     be returned.
+    --
+    -- -   @instance-type@ - The type of instance (for example, @m3.medium@).
+    --
+    -- -   @product-description@ - The product description for the Spot price
+    --     (@Linux\/UNIX@ | @Red Hat Enterprise Linux@ | @SUSE Linux@ |
+    --     @Windows@ | @Linux\/UNIX (Amazon VPC)@ |
+    --     @Red Hat Enterprise Linux (Amazon VPC)@ | @SUSE Linux (Amazon VPC)@
+    --     | @Windows (Amazon VPC)@).
+    --
+    -- -   @spot-price@ - The Spot price. The value must match exactly (or use
+    --     wildcards; greater than or less than comparison is not supported).
+    --
+    -- -   @timestamp@ - The time stamp of the Spot price history, in UTC
+    --     format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). You can use
+    --     wildcards (* and ?). Greater than or less than comparison is not
+    --     supported.
+    filters :: Prelude.Maybe [Filter],
+    -- | Filters the results by the specified instance types.
+    instanceTypes :: Prelude.Maybe [InstanceType],
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and 1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Filters the results by the specified basic product descriptions.
+    productDescriptions :: Prelude.Maybe [Prelude.Text],
+    -- | The date and time, up to the past 90 days, from which to start
+    -- retrieving the price history data, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    startTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotPriceHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'describeSpotPriceHistory_availabilityZone' - Filters the results by the specified Availability Zone.
+--
+-- 'dryRun', 'describeSpotPriceHistory_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endTime', 'describeSpotPriceHistory_endTime' - The date and time, up to the current date, from which to stop retrieving
+-- the price history data, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- 'filters', 'describeSpotPriceHistory_filters' - One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone for which prices should
+--     be returned.
+--
+-- -   @instance-type@ - The type of instance (for example, @m3.medium@).
+--
+-- -   @product-description@ - The product description for the Spot price
+--     (@Linux\/UNIX@ | @Red Hat Enterprise Linux@ | @SUSE Linux@ |
+--     @Windows@ | @Linux\/UNIX (Amazon VPC)@ |
+--     @Red Hat Enterprise Linux (Amazon VPC)@ | @SUSE Linux (Amazon VPC)@
+--     | @Windows (Amazon VPC)@).
+--
+-- -   @spot-price@ - The Spot price. The value must match exactly (or use
+--     wildcards; greater than or less than comparison is not supported).
+--
+-- -   @timestamp@ - The time stamp of the Spot price history, in UTC
+--     format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). You can use
+--     wildcards (* and ?). Greater than or less than comparison is not
+--     supported.
+--
+-- 'instanceTypes', 'describeSpotPriceHistory_instanceTypes' - Filters the results by the specified instance types.
+--
+-- 'maxResults', 'describeSpotPriceHistory_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'describeSpotPriceHistory_nextToken' - The token for the next set of results.
+--
+-- 'productDescriptions', 'describeSpotPriceHistory_productDescriptions' - Filters the results by the specified basic product descriptions.
+--
+-- 'startTime', 'describeSpotPriceHistory_startTime' - The date and time, up to the past 90 days, from which to start
+-- retrieving the price history data, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newDescribeSpotPriceHistory ::
+  DescribeSpotPriceHistory
+newDescribeSpotPriceHistory =
+  DescribeSpotPriceHistory'
+    { availabilityZone =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      productDescriptions = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | Filters the results by the specified Availability Zone.
+describeSpotPriceHistory_availabilityZone :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe Prelude.Text)
+describeSpotPriceHistory_availabilityZone = Lens.lens (\DescribeSpotPriceHistory' {availabilityZone} -> availabilityZone) (\s@DescribeSpotPriceHistory' {} a -> s {availabilityZone = a} :: DescribeSpotPriceHistory)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSpotPriceHistory_dryRun :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe Prelude.Bool)
+describeSpotPriceHistory_dryRun = Lens.lens (\DescribeSpotPriceHistory' {dryRun} -> dryRun) (\s@DescribeSpotPriceHistory' {} a -> s {dryRun = a} :: DescribeSpotPriceHistory)
+
+-- | The date and time, up to the current date, from which to stop retrieving
+-- the price history data, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+describeSpotPriceHistory_endTime :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe Prelude.UTCTime)
+describeSpotPriceHistory_endTime = Lens.lens (\DescribeSpotPriceHistory' {endTime} -> endTime) (\s@DescribeSpotPriceHistory' {} a -> s {endTime = a} :: DescribeSpotPriceHistory) Prelude.. Lens.mapping Data._Time
+
+-- | One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone for which prices should
+--     be returned.
+--
+-- -   @instance-type@ - The type of instance (for example, @m3.medium@).
+--
+-- -   @product-description@ - The product description for the Spot price
+--     (@Linux\/UNIX@ | @Red Hat Enterprise Linux@ | @SUSE Linux@ |
+--     @Windows@ | @Linux\/UNIX (Amazon VPC)@ |
+--     @Red Hat Enterprise Linux (Amazon VPC)@ | @SUSE Linux (Amazon VPC)@
+--     | @Windows (Amazon VPC)@).
+--
+-- -   @spot-price@ - The Spot price. The value must match exactly (or use
+--     wildcards; greater than or less than comparison is not supported).
+--
+-- -   @timestamp@ - The time stamp of the Spot price history, in UTC
+--     format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). You can use
+--     wildcards (* and ?). Greater than or less than comparison is not
+--     supported.
+describeSpotPriceHistory_filters :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe [Filter])
+describeSpotPriceHistory_filters = Lens.lens (\DescribeSpotPriceHistory' {filters} -> filters) (\s@DescribeSpotPriceHistory' {} a -> s {filters = a} :: DescribeSpotPriceHistory) Prelude.. Lens.mapping Lens.coerced
+
+-- | Filters the results by the specified instance types.
+describeSpotPriceHistory_instanceTypes :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe [InstanceType])
+describeSpotPriceHistory_instanceTypes = Lens.lens (\DescribeSpotPriceHistory' {instanceTypes} -> instanceTypes) (\s@DescribeSpotPriceHistory' {} a -> s {instanceTypes = a} :: DescribeSpotPriceHistory) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and 1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with the returned @NextToken@
+-- value.
+describeSpotPriceHistory_maxResults :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe Prelude.Int)
+describeSpotPriceHistory_maxResults = Lens.lens (\DescribeSpotPriceHistory' {maxResults} -> maxResults) (\s@DescribeSpotPriceHistory' {} a -> s {maxResults = a} :: DescribeSpotPriceHistory)
+
+-- | The token for the next set of results.
+describeSpotPriceHistory_nextToken :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe Prelude.Text)
+describeSpotPriceHistory_nextToken = Lens.lens (\DescribeSpotPriceHistory' {nextToken} -> nextToken) (\s@DescribeSpotPriceHistory' {} a -> s {nextToken = a} :: DescribeSpotPriceHistory)
+
+-- | Filters the results by the specified basic product descriptions.
+describeSpotPriceHistory_productDescriptions :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe [Prelude.Text])
+describeSpotPriceHistory_productDescriptions = Lens.lens (\DescribeSpotPriceHistory' {productDescriptions} -> productDescriptions) (\s@DescribeSpotPriceHistory' {} a -> s {productDescriptions = a} :: DescribeSpotPriceHistory) Prelude.. Lens.mapping Lens.coerced
+
+-- | The date and time, up to the past 90 days, from which to start
+-- retrieving the price history data, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+describeSpotPriceHistory_startTime :: Lens.Lens' DescribeSpotPriceHistory (Prelude.Maybe Prelude.UTCTime)
+describeSpotPriceHistory_startTime = Lens.lens (\DescribeSpotPriceHistory' {startTime} -> startTime) (\s@DescribeSpotPriceHistory' {} a -> s {startTime = a} :: DescribeSpotPriceHistory) Prelude.. Lens.mapping Data._Time
+
+instance Core.AWSPager DescribeSpotPriceHistory where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotPriceHistoryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSpotPriceHistoryResponse_spotPriceHistory
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSpotPriceHistory_nextToken
+          Lens..~ rs
+          Lens.^? describeSpotPriceHistoryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSpotPriceHistory where
+  type
+    AWSResponse DescribeSpotPriceHistory =
+      DescribeSpotPriceHistoryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSpotPriceHistoryResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "spotPriceHistorySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSpotPriceHistory where
+  hashWithSalt _salt DescribeSpotPriceHistory' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` productDescriptions
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData DescribeSpotPriceHistory where
+  rnf DescribeSpotPriceHistory' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf productDescriptions
+      `Prelude.seq` Prelude.rnf startTime
+
+instance Data.ToHeaders DescribeSpotPriceHistory where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSpotPriceHistory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSpotPriceHistory where
+  toQuery DescribeSpotPriceHistory' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSpotPriceHistory" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AvailabilityZone" Data.=: availabilityZone,
+        "DryRun" Data.=: dryRun,
+        "EndTime" Data.=: endTime,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "InstanceType"
+              Prelude.<$> instanceTypes
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "ProductDescription"
+              Prelude.<$> productDescriptions
+          ),
+        "StartTime" Data.=: startTime
+      ]
+
+-- | Contains the output of DescribeSpotPriceHistory.
+--
+-- /See:/ 'newDescribeSpotPriceHistoryResponse' smart constructor.
+data DescribeSpotPriceHistoryResponse = DescribeSpotPriceHistoryResponse'
+  { -- | The token required to retrieve the next set of results. This value is
+    -- null or an empty string when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The historical Spot prices.
+    spotPriceHistory :: Prelude.Maybe [SpotPrice],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSpotPriceHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSpotPriceHistoryResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- null or an empty string when there are no more results to return.
+--
+-- 'spotPriceHistory', 'describeSpotPriceHistoryResponse_spotPriceHistory' - The historical Spot prices.
+--
+-- 'httpStatus', 'describeSpotPriceHistoryResponse_httpStatus' - The response's http status code.
+newDescribeSpotPriceHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSpotPriceHistoryResponse
+newDescribeSpotPriceHistoryResponse pHttpStatus_ =
+  DescribeSpotPriceHistoryResponse'
+    { nextToken =
+        Prelude.Nothing,
+      spotPriceHistory = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token required to retrieve the next set of results. This value is
+-- null or an empty string when there are no more results to return.
+describeSpotPriceHistoryResponse_nextToken :: Lens.Lens' DescribeSpotPriceHistoryResponse (Prelude.Maybe Prelude.Text)
+describeSpotPriceHistoryResponse_nextToken = Lens.lens (\DescribeSpotPriceHistoryResponse' {nextToken} -> nextToken) (\s@DescribeSpotPriceHistoryResponse' {} a -> s {nextToken = a} :: DescribeSpotPriceHistoryResponse)
+
+-- | The historical Spot prices.
+describeSpotPriceHistoryResponse_spotPriceHistory :: Lens.Lens' DescribeSpotPriceHistoryResponse (Prelude.Maybe [SpotPrice])
+describeSpotPriceHistoryResponse_spotPriceHistory = Lens.lens (\DescribeSpotPriceHistoryResponse' {spotPriceHistory} -> spotPriceHistory) (\s@DescribeSpotPriceHistoryResponse' {} a -> s {spotPriceHistory = a} :: DescribeSpotPriceHistoryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSpotPriceHistoryResponse_httpStatus :: Lens.Lens' DescribeSpotPriceHistoryResponse Prelude.Int
+describeSpotPriceHistoryResponse_httpStatus = Lens.lens (\DescribeSpotPriceHistoryResponse' {httpStatus} -> httpStatus) (\s@DescribeSpotPriceHistoryResponse' {} a -> s {httpStatus = a} :: DescribeSpotPriceHistoryResponse)
+
+instance
+  Prelude.NFData
+    DescribeSpotPriceHistoryResponse
+  where
+  rnf DescribeSpotPriceHistoryResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotPriceHistory
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeStaleSecurityGroups.hs b/gen/Amazonka/EC2/DescribeStaleSecurityGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeStaleSecurityGroups.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeStaleSecurityGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- [VPC only] Describes the stale security group rules for security groups
+-- in a specified VPC. Rules are stale when they reference a deleted
+-- security group in the same VPC or in a peer VPC, or if they reference a
+-- security group in a peer VPC for which the VPC peering connection has
+-- been deleted.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeStaleSecurityGroups
+  ( -- * Creating a Request
+    DescribeStaleSecurityGroups (..),
+    newDescribeStaleSecurityGroups,
+
+    -- * Request Lenses
+    describeStaleSecurityGroups_dryRun,
+    describeStaleSecurityGroups_maxResults,
+    describeStaleSecurityGroups_nextToken,
+    describeStaleSecurityGroups_vpcId,
+
+    -- * Destructuring the Response
+    DescribeStaleSecurityGroupsResponse (..),
+    newDescribeStaleSecurityGroupsResponse,
+
+    -- * Response Lenses
+    describeStaleSecurityGroupsResponse_nextToken,
+    describeStaleSecurityGroupsResponse_staleSecurityGroupSet,
+    describeStaleSecurityGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeStaleSecurityGroups' smart constructor.
+data DescribeStaleSecurityGroups = DescribeStaleSecurityGroups'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of items to return for this request. The request
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a prior call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeStaleSecurityGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeStaleSecurityGroups_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'describeStaleSecurityGroups_maxResults' - The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- 'nextToken', 'describeStaleSecurityGroups_nextToken' - The token for the next set of items to return. (You received this token
+-- from a prior call.)
+--
+-- 'vpcId', 'describeStaleSecurityGroups_vpcId' - The ID of the VPC.
+newDescribeStaleSecurityGroups ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  DescribeStaleSecurityGroups
+newDescribeStaleSecurityGroups pVpcId_ =
+  DescribeStaleSecurityGroups'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeStaleSecurityGroups_dryRun :: Lens.Lens' DescribeStaleSecurityGroups (Prelude.Maybe Prelude.Bool)
+describeStaleSecurityGroups_dryRun = Lens.lens (\DescribeStaleSecurityGroups' {dryRun} -> dryRun) (\s@DescribeStaleSecurityGroups' {} a -> s {dryRun = a} :: DescribeStaleSecurityGroups)
+
+-- | The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+describeStaleSecurityGroups_maxResults :: Lens.Lens' DescribeStaleSecurityGroups (Prelude.Maybe Prelude.Natural)
+describeStaleSecurityGroups_maxResults = Lens.lens (\DescribeStaleSecurityGroups' {maxResults} -> maxResults) (\s@DescribeStaleSecurityGroups' {} a -> s {maxResults = a} :: DescribeStaleSecurityGroups)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a prior call.)
+describeStaleSecurityGroups_nextToken :: Lens.Lens' DescribeStaleSecurityGroups (Prelude.Maybe Prelude.Text)
+describeStaleSecurityGroups_nextToken = Lens.lens (\DescribeStaleSecurityGroups' {nextToken} -> nextToken) (\s@DescribeStaleSecurityGroups' {} a -> s {nextToken = a} :: DescribeStaleSecurityGroups)
+
+-- | The ID of the VPC.
+describeStaleSecurityGroups_vpcId :: Lens.Lens' DescribeStaleSecurityGroups Prelude.Text
+describeStaleSecurityGroups_vpcId = Lens.lens (\DescribeStaleSecurityGroups' {vpcId} -> vpcId) (\s@DescribeStaleSecurityGroups' {} a -> s {vpcId = a} :: DescribeStaleSecurityGroups)
+
+instance Core.AWSPager DescribeStaleSecurityGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeStaleSecurityGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeStaleSecurityGroupsResponse_staleSecurityGroupSet
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeStaleSecurityGroups_nextToken
+          Lens..~ rs
+          Lens.^? describeStaleSecurityGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeStaleSecurityGroups where
+  type
+    AWSResponse DescribeStaleSecurityGroups =
+      DescribeStaleSecurityGroupsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeStaleSecurityGroupsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "staleSecurityGroupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeStaleSecurityGroups where
+  hashWithSalt _salt DescribeStaleSecurityGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData DescribeStaleSecurityGroups where
+  rnf DescribeStaleSecurityGroups' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders DescribeStaleSecurityGroups where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeStaleSecurityGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeStaleSecurityGroups where
+  toQuery DescribeStaleSecurityGroups' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeStaleSecurityGroups" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDescribeStaleSecurityGroupsResponse' smart constructor.
+data DescribeStaleSecurityGroupsResponse = DescribeStaleSecurityGroupsResponse'
+  { -- | The token to use when requesting the next set of items. If there are no
+    -- additional items to return, the string is empty.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the stale security groups.
+    staleSecurityGroupSet :: Prelude.Maybe [StaleSecurityGroup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeStaleSecurityGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeStaleSecurityGroupsResponse_nextToken' - The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+--
+-- 'staleSecurityGroupSet', 'describeStaleSecurityGroupsResponse_staleSecurityGroupSet' - Information about the stale security groups.
+--
+-- 'httpStatus', 'describeStaleSecurityGroupsResponse_httpStatus' - The response's http status code.
+newDescribeStaleSecurityGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeStaleSecurityGroupsResponse
+newDescribeStaleSecurityGroupsResponse pHttpStatus_ =
+  DescribeStaleSecurityGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      staleSecurityGroupSet =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+describeStaleSecurityGroupsResponse_nextToken :: Lens.Lens' DescribeStaleSecurityGroupsResponse (Prelude.Maybe Prelude.Text)
+describeStaleSecurityGroupsResponse_nextToken = Lens.lens (\DescribeStaleSecurityGroupsResponse' {nextToken} -> nextToken) (\s@DescribeStaleSecurityGroupsResponse' {} a -> s {nextToken = a} :: DescribeStaleSecurityGroupsResponse)
+
+-- | Information about the stale security groups.
+describeStaleSecurityGroupsResponse_staleSecurityGroupSet :: Lens.Lens' DescribeStaleSecurityGroupsResponse (Prelude.Maybe [StaleSecurityGroup])
+describeStaleSecurityGroupsResponse_staleSecurityGroupSet = Lens.lens (\DescribeStaleSecurityGroupsResponse' {staleSecurityGroupSet} -> staleSecurityGroupSet) (\s@DescribeStaleSecurityGroupsResponse' {} a -> s {staleSecurityGroupSet = a} :: DescribeStaleSecurityGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeStaleSecurityGroupsResponse_httpStatus :: Lens.Lens' DescribeStaleSecurityGroupsResponse Prelude.Int
+describeStaleSecurityGroupsResponse_httpStatus = Lens.lens (\DescribeStaleSecurityGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribeStaleSecurityGroupsResponse' {} a -> s {httpStatus = a} :: DescribeStaleSecurityGroupsResponse)
+
+instance
+  Prelude.NFData
+    DescribeStaleSecurityGroupsResponse
+  where
+  rnf DescribeStaleSecurityGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf staleSecurityGroupSet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeStoreImageTasks.hs b/gen/Amazonka/EC2/DescribeStoreImageTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeStoreImageTasks.hs
@@ -0,0 +1,315 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeStoreImageTasks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the progress of the AMI store tasks. You can describe the
+-- store tasks for specified AMIs. If you don\'t specify the AMIs, you get
+-- a paginated list of store tasks from the last 31 days.
+--
+-- For each AMI task, the response indicates if the task is @InProgress@,
+-- @Completed@, or @Failed@. For tasks @InProgress@, the response shows the
+-- estimated progress as a percentage.
+--
+-- Tasks are listed in reverse chronological order. Currently, only tasks
+-- from the past 31 days can be viewed.
+--
+-- To use this API, you must have the required permissions. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html#ami-s3-permissions Permissions for storing and restoring AMIs using Amazon S3>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-store-restore.html Store and restore an AMI using Amazon S3>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeStoreImageTasks
+  ( -- * Creating a Request
+    DescribeStoreImageTasks (..),
+    newDescribeStoreImageTasks,
+
+    -- * Request Lenses
+    describeStoreImageTasks_dryRun,
+    describeStoreImageTasks_filters,
+    describeStoreImageTasks_imageIds,
+    describeStoreImageTasks_maxResults,
+    describeStoreImageTasks_nextToken,
+
+    -- * Destructuring the Response
+    DescribeStoreImageTasksResponse (..),
+    newDescribeStoreImageTasksResponse,
+
+    -- * Response Lenses
+    describeStoreImageTasksResponse_nextToken,
+    describeStoreImageTasksResponse_storeImageTaskResults,
+    describeStoreImageTasksResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeStoreImageTasks' smart constructor.
+data DescribeStoreImageTasks = DescribeStoreImageTasks'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @task-state@ - Returns tasks in a certain state (@InProgress@ |
+    --     @Completed@ | @Failed@)
+    --
+    -- -   @bucket@ - Returns task information for tasks that targeted a
+    --     specific bucket. For the filter value, specify the bucket name.
+    filters :: Prelude.Maybe [Filter],
+    -- | The AMI IDs for which to show progress. Up to 20 AMI IDs can be included
+    -- in a request.
+    imageIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another call with the returned @NextToken@
+    -- value. This value can be between 1 and 200. You cannot specify this
+    -- parameter and the @ImageIDs@ parameter in the same call.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeStoreImageTasks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeStoreImageTasks_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeStoreImageTasks_filters' - The filters.
+--
+-- -   @task-state@ - Returns tasks in a certain state (@InProgress@ |
+--     @Completed@ | @Failed@)
+--
+-- -   @bucket@ - Returns task information for tasks that targeted a
+--     specific bucket. For the filter value, specify the bucket name.
+--
+-- 'imageIds', 'describeStoreImageTasks_imageIds' - The AMI IDs for which to show progress. Up to 20 AMI IDs can be included
+-- in a request.
+--
+-- 'maxResults', 'describeStoreImageTasks_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 1 and 200. You cannot specify this
+-- parameter and the @ImageIDs@ parameter in the same call.
+--
+-- 'nextToken', 'describeStoreImageTasks_nextToken' - The token for the next page of results.
+newDescribeStoreImageTasks ::
+  DescribeStoreImageTasks
+newDescribeStoreImageTasks =
+  DescribeStoreImageTasks'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      imageIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeStoreImageTasks_dryRun :: Lens.Lens' DescribeStoreImageTasks (Prelude.Maybe Prelude.Bool)
+describeStoreImageTasks_dryRun = Lens.lens (\DescribeStoreImageTasks' {dryRun} -> dryRun) (\s@DescribeStoreImageTasks' {} a -> s {dryRun = a} :: DescribeStoreImageTasks)
+
+-- | The filters.
+--
+-- -   @task-state@ - Returns tasks in a certain state (@InProgress@ |
+--     @Completed@ | @Failed@)
+--
+-- -   @bucket@ - Returns task information for tasks that targeted a
+--     specific bucket. For the filter value, specify the bucket name.
+describeStoreImageTasks_filters :: Lens.Lens' DescribeStoreImageTasks (Prelude.Maybe [Filter])
+describeStoreImageTasks_filters = Lens.lens (\DescribeStoreImageTasks' {filters} -> filters) (\s@DescribeStoreImageTasks' {} a -> s {filters = a} :: DescribeStoreImageTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The AMI IDs for which to show progress. Up to 20 AMI IDs can be included
+-- in a request.
+describeStoreImageTasks_imageIds :: Lens.Lens' DescribeStoreImageTasks (Prelude.Maybe [Prelude.Text])
+describeStoreImageTasks_imageIds = Lens.lens (\DescribeStoreImageTasks' {imageIds} -> imageIds) (\s@DescribeStoreImageTasks' {} a -> s {imageIds = a} :: DescribeStoreImageTasks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another call with the returned @NextToken@
+-- value. This value can be between 1 and 200. You cannot specify this
+-- parameter and the @ImageIDs@ parameter in the same call.
+describeStoreImageTasks_maxResults :: Lens.Lens' DescribeStoreImageTasks (Prelude.Maybe Prelude.Natural)
+describeStoreImageTasks_maxResults = Lens.lens (\DescribeStoreImageTasks' {maxResults} -> maxResults) (\s@DescribeStoreImageTasks' {} a -> s {maxResults = a} :: DescribeStoreImageTasks)
+
+-- | The token for the next page of results.
+describeStoreImageTasks_nextToken :: Lens.Lens' DescribeStoreImageTasks (Prelude.Maybe Prelude.Text)
+describeStoreImageTasks_nextToken = Lens.lens (\DescribeStoreImageTasks' {nextToken} -> nextToken) (\s@DescribeStoreImageTasks' {} a -> s {nextToken = a} :: DescribeStoreImageTasks)
+
+instance Core.AWSPager DescribeStoreImageTasks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeStoreImageTasksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeStoreImageTasksResponse_storeImageTaskResults
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeStoreImageTasks_nextToken
+          Lens..~ rs
+          Lens.^? describeStoreImageTasksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeStoreImageTasks where
+  type
+    AWSResponse DescribeStoreImageTasks =
+      DescribeStoreImageTasksResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeStoreImageTasksResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "storeImageTaskResultSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeStoreImageTasks where
+  hashWithSalt _salt DescribeStoreImageTasks' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` imageIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeStoreImageTasks where
+  rnf DescribeStoreImageTasks' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf imageIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeStoreImageTasks where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeStoreImageTasks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeStoreImageTasks where
+  toQuery DescribeStoreImageTasks' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeStoreImageTasks" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "ImageId" Prelude.<$> imageIds),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeStoreImageTasksResponse' smart constructor.
+data DescribeStoreImageTasksResponse = DescribeStoreImageTasksResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The information about the AMI store tasks.
+    storeImageTaskResults :: Prelude.Maybe [StoreImageTaskResult],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeStoreImageTasksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeStoreImageTasksResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'storeImageTaskResults', 'describeStoreImageTasksResponse_storeImageTaskResults' - The information about the AMI store tasks.
+--
+-- 'httpStatus', 'describeStoreImageTasksResponse_httpStatus' - The response's http status code.
+newDescribeStoreImageTasksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeStoreImageTasksResponse
+newDescribeStoreImageTasksResponse pHttpStatus_ =
+  DescribeStoreImageTasksResponse'
+    { nextToken =
+        Prelude.Nothing,
+      storeImageTaskResults = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeStoreImageTasksResponse_nextToken :: Lens.Lens' DescribeStoreImageTasksResponse (Prelude.Maybe Prelude.Text)
+describeStoreImageTasksResponse_nextToken = Lens.lens (\DescribeStoreImageTasksResponse' {nextToken} -> nextToken) (\s@DescribeStoreImageTasksResponse' {} a -> s {nextToken = a} :: DescribeStoreImageTasksResponse)
+
+-- | The information about the AMI store tasks.
+describeStoreImageTasksResponse_storeImageTaskResults :: Lens.Lens' DescribeStoreImageTasksResponse (Prelude.Maybe [StoreImageTaskResult])
+describeStoreImageTasksResponse_storeImageTaskResults = Lens.lens (\DescribeStoreImageTasksResponse' {storeImageTaskResults} -> storeImageTaskResults) (\s@DescribeStoreImageTasksResponse' {} a -> s {storeImageTaskResults = a} :: DescribeStoreImageTasksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeStoreImageTasksResponse_httpStatus :: Lens.Lens' DescribeStoreImageTasksResponse Prelude.Int
+describeStoreImageTasksResponse_httpStatus = Lens.lens (\DescribeStoreImageTasksResponse' {httpStatus} -> httpStatus) (\s@DescribeStoreImageTasksResponse' {} a -> s {httpStatus = a} :: DescribeStoreImageTasksResponse)
+
+instance
+  Prelude.NFData
+    DescribeStoreImageTasksResponse
+  where
+  rnf DescribeStoreImageTasksResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf storeImageTaskResults
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeSubnets.hs b/gen/Amazonka/EC2/DescribeSubnets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeSubnets.hs
@@ -0,0 +1,541 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeSubnets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your subnets.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html Your VPC and subnets>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeSubnets
+  ( -- * Creating a Request
+    DescribeSubnets (..),
+    newDescribeSubnets,
+
+    -- * Request Lenses
+    describeSubnets_dryRun,
+    describeSubnets_filters,
+    describeSubnets_maxResults,
+    describeSubnets_nextToken,
+    describeSubnets_subnetIds,
+
+    -- * Destructuring the Response
+    DescribeSubnetsResponse (..),
+    newDescribeSubnetsResponse,
+
+    -- * Response Lenses
+    describeSubnetsResponse_nextToken,
+    describeSubnetsResponse_subnets,
+    describeSubnetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSubnets' smart constructor.
+data DescribeSubnets = DescribeSubnets'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @availability-zone@ - The Availability Zone for the subnet. You can
+    --     also use @availabilityZone@ as the filter name.
+    --
+    -- -   @availability-zone-id@ - The ID of the Availability Zone for the
+    --     subnet. You can also use @availabilityZoneId@ as the filter name.
+    --
+    -- -   @available-ip-address-count@ - The number of IPv4 addresses in the
+    --     subnet that are available.
+    --
+    -- -   @cidr-block@ - The IPv4 CIDR block of the subnet. The CIDR block you
+    --     specify must exactly match the subnet\'s CIDR block for information
+    --     to be returned for the subnet. You can also use @cidr@ or
+    --     @cidrBlock@ as the filter names.
+    --
+    -- -   @customer-owned-ipv4-pool@ - The customer-owned IPv4 address pool
+    --     associated with the subnet.
+    --
+    -- -   @default-for-az@ - Indicates whether this is the default subnet for
+    --     the Availability Zone (@true@ | @false@). You can also use
+    --     @defaultForAz@ as the filter name.
+    --
+    -- -   @enable-dns64@ - Indicates whether DNS queries made to the
+    --     Amazon-provided DNS Resolver in this subnet should return synthetic
+    --     IPv6 addresses for IPv4-only destinations.
+    --
+    -- -   @enable-lni-at-device-index@ - Indicates the device position for
+    --     local network interfaces in this subnet. For example, @1@ indicates
+    --     local network interfaces in this subnet are the secondary network
+    --     interface (eth1).
+    --
+    -- -   @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block
+    --     associated with the subnet.
+    --
+    -- -   @ipv6-cidr-block-association.association-id@ - An association ID for
+    --     an IPv6 CIDR block associated with the subnet.
+    --
+    -- -   @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR
+    --     block associated with the subnet.
+    --
+    -- -   @ipv6-native@ - Indicates whether this is an IPv6 only subnet
+    --     (@true@ | @false@).
+    --
+    -- -   @map-customer-owned-ip-on-launch@ - Indicates whether a network
+    --     interface created in this subnet (including a network interface
+    --     created by RunInstances) receives a customer-owned IPv4 address.
+    --
+    -- -   @map-public-ip-on-launch@ - Indicates whether instances launched in
+    --     this subnet receive a public IPv4 address.
+    --
+    -- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     subnet.
+    --
+    -- -   @private-dns-name-options-on-launch.hostname-type@ - The type of
+    --     hostname to assign to instances in the subnet at launch. For
+    --     IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS
+    --     name can be based on the instance IPv4 address (ip-name) or the
+    --     instance ID (resource-name). For IPv6 only subnets, an instance DNS
+    --     name must be based on the instance ID (resource-name).
+    --
+    -- -   @private-dns-name-options-on-launch.enable-resource-name-dns-a-record@
+    --     - Indicates whether to respond to DNS queries for instance hostnames
+    --     with DNS A records.
+    --
+    -- -   @private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record@
+    --     - Indicates whether to respond to DNS queries for instance hostnames
+    --     with DNS AAAA records.
+    --
+    -- -   @state@ - The state of the subnet (@pending@ | @available@).
+    --
+    -- -   @subnet-arn@ - The Amazon Resource Name (ARN) of the subnet.
+    --
+    -- -   @subnet-id@ - The ID of the subnet.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC for the subnet.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more subnet IDs.
+    --
+    -- Default: Describes all your subnets.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSubnets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeSubnets_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeSubnets_filters' - One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone for the subnet. You can
+--     also use @availabilityZone@ as the filter name.
+--
+-- -   @availability-zone-id@ - The ID of the Availability Zone for the
+--     subnet. You can also use @availabilityZoneId@ as the filter name.
+--
+-- -   @available-ip-address-count@ - The number of IPv4 addresses in the
+--     subnet that are available.
+--
+-- -   @cidr-block@ - The IPv4 CIDR block of the subnet. The CIDR block you
+--     specify must exactly match the subnet\'s CIDR block for information
+--     to be returned for the subnet. You can also use @cidr@ or
+--     @cidrBlock@ as the filter names.
+--
+-- -   @customer-owned-ipv4-pool@ - The customer-owned IPv4 address pool
+--     associated with the subnet.
+--
+-- -   @default-for-az@ - Indicates whether this is the default subnet for
+--     the Availability Zone (@true@ | @false@). You can also use
+--     @defaultForAz@ as the filter name.
+--
+-- -   @enable-dns64@ - Indicates whether DNS queries made to the
+--     Amazon-provided DNS Resolver in this subnet should return synthetic
+--     IPv6 addresses for IPv4-only destinations.
+--
+-- -   @enable-lni-at-device-index@ - Indicates the device position for
+--     local network interfaces in this subnet. For example, @1@ indicates
+--     local network interfaces in this subnet are the secondary network
+--     interface (eth1).
+--
+-- -   @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block
+--     associated with the subnet.
+--
+-- -   @ipv6-cidr-block-association.association-id@ - An association ID for
+--     an IPv6 CIDR block associated with the subnet.
+--
+-- -   @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR
+--     block associated with the subnet.
+--
+-- -   @ipv6-native@ - Indicates whether this is an IPv6 only subnet
+--     (@true@ | @false@).
+--
+-- -   @map-customer-owned-ip-on-launch@ - Indicates whether a network
+--     interface created in this subnet (including a network interface
+--     created by RunInstances) receives a customer-owned IPv4 address.
+--
+-- -   @map-public-ip-on-launch@ - Indicates whether instances launched in
+--     this subnet receive a public IPv4 address.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     subnet.
+--
+-- -   @private-dns-name-options-on-launch.hostname-type@ - The type of
+--     hostname to assign to instances in the subnet at launch. For
+--     IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS
+--     name can be based on the instance IPv4 address (ip-name) or the
+--     instance ID (resource-name). For IPv6 only subnets, an instance DNS
+--     name must be based on the instance ID (resource-name).
+--
+-- -   @private-dns-name-options-on-launch.enable-resource-name-dns-a-record@
+--     - Indicates whether to respond to DNS queries for instance hostnames
+--     with DNS A records.
+--
+-- -   @private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record@
+--     - Indicates whether to respond to DNS queries for instance hostnames
+--     with DNS AAAA records.
+--
+-- -   @state@ - The state of the subnet (@pending@ | @available@).
+--
+-- -   @subnet-arn@ - The Amazon Resource Name (ARN) of the subnet.
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the subnet.
+--
+-- 'maxResults', 'describeSubnets_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeSubnets_nextToken' - The token for the next page of results.
+--
+-- 'subnetIds', 'describeSubnets_subnetIds' - One or more subnet IDs.
+--
+-- Default: Describes all your subnets.
+newDescribeSubnets ::
+  DescribeSubnets
+newDescribeSubnets =
+  DescribeSubnets'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      subnetIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeSubnets_dryRun :: Lens.Lens' DescribeSubnets (Prelude.Maybe Prelude.Bool)
+describeSubnets_dryRun = Lens.lens (\DescribeSubnets' {dryRun} -> dryRun) (\s@DescribeSubnets' {} a -> s {dryRun = a} :: DescribeSubnets)
+
+-- | One or more filters.
+--
+-- -   @availability-zone@ - The Availability Zone for the subnet. You can
+--     also use @availabilityZone@ as the filter name.
+--
+-- -   @availability-zone-id@ - The ID of the Availability Zone for the
+--     subnet. You can also use @availabilityZoneId@ as the filter name.
+--
+-- -   @available-ip-address-count@ - The number of IPv4 addresses in the
+--     subnet that are available.
+--
+-- -   @cidr-block@ - The IPv4 CIDR block of the subnet. The CIDR block you
+--     specify must exactly match the subnet\'s CIDR block for information
+--     to be returned for the subnet. You can also use @cidr@ or
+--     @cidrBlock@ as the filter names.
+--
+-- -   @customer-owned-ipv4-pool@ - The customer-owned IPv4 address pool
+--     associated with the subnet.
+--
+-- -   @default-for-az@ - Indicates whether this is the default subnet for
+--     the Availability Zone (@true@ | @false@). You can also use
+--     @defaultForAz@ as the filter name.
+--
+-- -   @enable-dns64@ - Indicates whether DNS queries made to the
+--     Amazon-provided DNS Resolver in this subnet should return synthetic
+--     IPv6 addresses for IPv4-only destinations.
+--
+-- -   @enable-lni-at-device-index@ - Indicates the device position for
+--     local network interfaces in this subnet. For example, @1@ indicates
+--     local network interfaces in this subnet are the secondary network
+--     interface (eth1).
+--
+-- -   @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block
+--     associated with the subnet.
+--
+-- -   @ipv6-cidr-block-association.association-id@ - An association ID for
+--     an IPv6 CIDR block associated with the subnet.
+--
+-- -   @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR
+--     block associated with the subnet.
+--
+-- -   @ipv6-native@ - Indicates whether this is an IPv6 only subnet
+--     (@true@ | @false@).
+--
+-- -   @map-customer-owned-ip-on-launch@ - Indicates whether a network
+--     interface created in this subnet (including a network interface
+--     created by RunInstances) receives a customer-owned IPv4 address.
+--
+-- -   @map-public-ip-on-launch@ - Indicates whether instances launched in
+--     this subnet receive a public IPv4 address.
+--
+-- -   @outpost-arn@ - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     subnet.
+--
+-- -   @private-dns-name-options-on-launch.hostname-type@ - The type of
+--     hostname to assign to instances in the subnet at launch. For
+--     IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS
+--     name can be based on the instance IPv4 address (ip-name) or the
+--     instance ID (resource-name). For IPv6 only subnets, an instance DNS
+--     name must be based on the instance ID (resource-name).
+--
+-- -   @private-dns-name-options-on-launch.enable-resource-name-dns-a-record@
+--     - Indicates whether to respond to DNS queries for instance hostnames
+--     with DNS A records.
+--
+-- -   @private-dns-name-options-on-launch.enable-resource-name-dns-aaaa-record@
+--     - Indicates whether to respond to DNS queries for instance hostnames
+--     with DNS AAAA records.
+--
+-- -   @state@ - The state of the subnet (@pending@ | @available@).
+--
+-- -   @subnet-arn@ - The Amazon Resource Name (ARN) of the subnet.
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC for the subnet.
+describeSubnets_filters :: Lens.Lens' DescribeSubnets (Prelude.Maybe [Filter])
+describeSubnets_filters = Lens.lens (\DescribeSubnets' {filters} -> filters) (\s@DescribeSubnets' {} a -> s {filters = a} :: DescribeSubnets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeSubnets_maxResults :: Lens.Lens' DescribeSubnets (Prelude.Maybe Prelude.Natural)
+describeSubnets_maxResults = Lens.lens (\DescribeSubnets' {maxResults} -> maxResults) (\s@DescribeSubnets' {} a -> s {maxResults = a} :: DescribeSubnets)
+
+-- | The token for the next page of results.
+describeSubnets_nextToken :: Lens.Lens' DescribeSubnets (Prelude.Maybe Prelude.Text)
+describeSubnets_nextToken = Lens.lens (\DescribeSubnets' {nextToken} -> nextToken) (\s@DescribeSubnets' {} a -> s {nextToken = a} :: DescribeSubnets)
+
+-- | One or more subnet IDs.
+--
+-- Default: Describes all your subnets.
+describeSubnets_subnetIds :: Lens.Lens' DescribeSubnets (Prelude.Maybe [Prelude.Text])
+describeSubnets_subnetIds = Lens.lens (\DescribeSubnets' {subnetIds} -> subnetIds) (\s@DescribeSubnets' {} a -> s {subnetIds = a} :: DescribeSubnets) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeSubnets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSubnetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSubnetsResponse_subnets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSubnets_nextToken
+          Lens..~ rs
+          Lens.^? describeSubnetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSubnets where
+  type
+    AWSResponse DescribeSubnets =
+      DescribeSubnetsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeSubnetsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "subnetSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSubnets where
+  hashWithSalt _salt DescribeSubnets' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` subnetIds
+
+instance Prelude.NFData DescribeSubnets where
+  rnf DescribeSubnets' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf subnetIds
+
+instance Data.ToHeaders DescribeSubnets where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeSubnets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSubnets where
+  toQuery DescribeSubnets' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeSubnets" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "SubnetId" Prelude.<$> subnetIds)
+      ]
+
+-- | /See:/ 'newDescribeSubnetsResponse' smart constructor.
+data DescribeSubnetsResponse = DescribeSubnetsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more subnets.
+    subnets :: Prelude.Maybe [Subnet],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSubnetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeSubnetsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'subnets', 'describeSubnetsResponse_subnets' - Information about one or more subnets.
+--
+-- 'httpStatus', 'describeSubnetsResponse_httpStatus' - The response's http status code.
+newDescribeSubnetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSubnetsResponse
+newDescribeSubnetsResponse pHttpStatus_ =
+  DescribeSubnetsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      subnets = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeSubnetsResponse_nextToken :: Lens.Lens' DescribeSubnetsResponse (Prelude.Maybe Prelude.Text)
+describeSubnetsResponse_nextToken = Lens.lens (\DescribeSubnetsResponse' {nextToken} -> nextToken) (\s@DescribeSubnetsResponse' {} a -> s {nextToken = a} :: DescribeSubnetsResponse)
+
+-- | Information about one or more subnets.
+describeSubnetsResponse_subnets :: Lens.Lens' DescribeSubnetsResponse (Prelude.Maybe [Subnet])
+describeSubnetsResponse_subnets = Lens.lens (\DescribeSubnetsResponse' {subnets} -> subnets) (\s@DescribeSubnetsResponse' {} a -> s {subnets = a} :: DescribeSubnetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSubnetsResponse_httpStatus :: Lens.Lens' DescribeSubnetsResponse Prelude.Int
+describeSubnetsResponse_httpStatus = Lens.lens (\DescribeSubnetsResponse' {httpStatus} -> httpStatus) (\s@DescribeSubnetsResponse' {} a -> s {httpStatus = a} :: DescribeSubnetsResponse)
+
+instance Prelude.NFData DescribeSubnetsResponse where
+  rnf DescribeSubnetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTags.hs b/gen/Amazonka/EC2/DescribeTags.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTags.hs
@@ -0,0 +1,317 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTags
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified tags for your EC2 resources.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tag your Amazon EC2 resources>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTags
+  ( -- * Creating a Request
+    DescribeTags (..),
+    newDescribeTags,
+
+    -- * Request Lenses
+    describeTags_dryRun,
+    describeTags_filters,
+    describeTags_maxResults,
+    describeTags_nextToken,
+
+    -- * Destructuring the Response
+    DescribeTagsResponse (..),
+    newDescribeTagsResponse,
+
+    -- * Response Lenses
+    describeTagsResponse_nextToken,
+    describeTagsResponse_tags,
+    describeTagsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTags' smart constructor.
+data DescribeTags = DescribeTags'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @key@ - The tag key.
+    --
+    -- -   @resource-id@ - The ID of the resource.
+    --
+    -- -   @resource-type@ - The resource type (@customer-gateway@ |
+    --     @dedicated-host@ | @dhcp-options@ | @elastic-ip@ | @fleet@ |
+    --     @fpga-image@ | @host-reservation@ | @image@ | @instance@ |
+    --     @internet-gateway@ | @key-pair@ | @launch-template@ | @natgateway@ |
+    --     @network-acl@ | @network-interface@ | @placement-group@ |
+    --     @reserved-instances@ | @route-table@ | @security-group@ | @snapshot@
+    --     | @spot-instances-request@ | @subnet@ | @volume@ | @vpc@ |
+    --     @vpc-endpoint@ | @vpc-endpoint-service@ | @vpc-peering-connection@ |
+    --     @vpn-connection@ | @vpn-gateway@).
+    --
+    -- -   @tag@:\<key> - The key\/value combination of the tag. For example,
+    --     specify \"tag:Owner\" for the filter name and \"TeamA\" for the
+    --     filter value to find resources with the tag \"Owner=TeamA\".
+    --
+    -- -   @value@ - The tag value.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. This value can
+    -- be between 5 and 1000. To retrieve the remaining results, make another
+    -- call with the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTags' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTags_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTags_filters' - The filters.
+--
+-- -   @key@ - The tag key.
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The resource type (@customer-gateway@ |
+--     @dedicated-host@ | @dhcp-options@ | @elastic-ip@ | @fleet@ |
+--     @fpga-image@ | @host-reservation@ | @image@ | @instance@ |
+--     @internet-gateway@ | @key-pair@ | @launch-template@ | @natgateway@ |
+--     @network-acl@ | @network-interface@ | @placement-group@ |
+--     @reserved-instances@ | @route-table@ | @security-group@ | @snapshot@
+--     | @spot-instances-request@ | @subnet@ | @volume@ | @vpc@ |
+--     @vpc-endpoint@ | @vpc-endpoint-service@ | @vpc-peering-connection@ |
+--     @vpn-connection@ | @vpn-gateway@).
+--
+-- -   @tag@:\<key> - The key\/value combination of the tag. For example,
+--     specify \"tag:Owner\" for the filter name and \"TeamA\" for the
+--     filter value to find resources with the tag \"Owner=TeamA\".
+--
+-- -   @value@ - The tag value.
+--
+-- 'maxResults', 'describeTags_maxResults' - The maximum number of results to return in a single call. This value can
+-- be between 5 and 1000. To retrieve the remaining results, make another
+-- call with the returned @NextToken@ value.
+--
+-- 'nextToken', 'describeTags_nextToken' - The token to retrieve the next page of results.
+newDescribeTags ::
+  DescribeTags
+newDescribeTags =
+  DescribeTags'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTags_dryRun :: Lens.Lens' DescribeTags (Prelude.Maybe Prelude.Bool)
+describeTags_dryRun = Lens.lens (\DescribeTags' {dryRun} -> dryRun) (\s@DescribeTags' {} a -> s {dryRun = a} :: DescribeTags)
+
+-- | The filters.
+--
+-- -   @key@ - The tag key.
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The resource type (@customer-gateway@ |
+--     @dedicated-host@ | @dhcp-options@ | @elastic-ip@ | @fleet@ |
+--     @fpga-image@ | @host-reservation@ | @image@ | @instance@ |
+--     @internet-gateway@ | @key-pair@ | @launch-template@ | @natgateway@ |
+--     @network-acl@ | @network-interface@ | @placement-group@ |
+--     @reserved-instances@ | @route-table@ | @security-group@ | @snapshot@
+--     | @spot-instances-request@ | @subnet@ | @volume@ | @vpc@ |
+--     @vpc-endpoint@ | @vpc-endpoint-service@ | @vpc-peering-connection@ |
+--     @vpn-connection@ | @vpn-gateway@).
+--
+-- -   @tag@:\<key> - The key\/value combination of the tag. For example,
+--     specify \"tag:Owner\" for the filter name and \"TeamA\" for the
+--     filter value to find resources with the tag \"Owner=TeamA\".
+--
+-- -   @value@ - The tag value.
+describeTags_filters :: Lens.Lens' DescribeTags (Prelude.Maybe [Filter])
+describeTags_filters = Lens.lens (\DescribeTags' {filters} -> filters) (\s@DescribeTags' {} a -> s {filters = a} :: DescribeTags) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. This value can
+-- be between 5 and 1000. To retrieve the remaining results, make another
+-- call with the returned @NextToken@ value.
+describeTags_maxResults :: Lens.Lens' DescribeTags (Prelude.Maybe Prelude.Int)
+describeTags_maxResults = Lens.lens (\DescribeTags' {maxResults} -> maxResults) (\s@DescribeTags' {} a -> s {maxResults = a} :: DescribeTags)
+
+-- | The token to retrieve the next page of results.
+describeTags_nextToken :: Lens.Lens' DescribeTags (Prelude.Maybe Prelude.Text)
+describeTags_nextToken = Lens.lens (\DescribeTags' {nextToken} -> nextToken) (\s@DescribeTags' {} a -> s {nextToken = a} :: DescribeTags)
+
+instance Core.AWSPager DescribeTags where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTagsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTagsResponse_tags
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTags_nextToken
+          Lens..~ rs
+          Lens.^? describeTagsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeTags where
+  type AWSResponse DescribeTags = DescribeTagsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTagsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeTags where
+  hashWithSalt _salt DescribeTags' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeTags where
+  rnf DescribeTags' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeTags where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeTags where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTags where
+  toQuery DescribeTags' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeTags" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeTagsResponse' smart constructor.
+data DescribeTagsResponse = DescribeTagsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [TagDescription],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTagsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTagsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'tags', 'describeTagsResponse_tags' - The tags.
+--
+-- 'httpStatus', 'describeTagsResponse_httpStatus' - The response's http status code.
+newDescribeTagsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTagsResponse
+newDescribeTagsResponse pHttpStatus_ =
+  DescribeTagsResponse'
+    { nextToken = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTagsResponse_nextToken :: Lens.Lens' DescribeTagsResponse (Prelude.Maybe Prelude.Text)
+describeTagsResponse_nextToken = Lens.lens (\DescribeTagsResponse' {nextToken} -> nextToken) (\s@DescribeTagsResponse' {} a -> s {nextToken = a} :: DescribeTagsResponse)
+
+-- | The tags.
+describeTagsResponse_tags :: Lens.Lens' DescribeTagsResponse (Prelude.Maybe [TagDescription])
+describeTagsResponse_tags = Lens.lens (\DescribeTagsResponse' {tags} -> tags) (\s@DescribeTagsResponse' {} a -> s {tags = a} :: DescribeTagsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTagsResponse_httpStatus :: Lens.Lens' DescribeTagsResponse Prelude.Int
+describeTagsResponse_httpStatus = Lens.lens (\DescribeTagsResponse' {httpStatus} -> httpStatus) (\s@DescribeTagsResponse' {} a -> s {httpStatus = a} :: DescribeTagsResponse)
+
+instance Prelude.NFData DescribeTagsResponse where
+  rnf DescribeTagsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTrafficMirrorFilters.hs b/gen/Amazonka/EC2/DescribeTrafficMirrorFilters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTrafficMirrorFilters.hs
@@ -0,0 +1,294 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTrafficMirrorFilters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more Traffic Mirror filters.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTrafficMirrorFilters
+  ( -- * Creating a Request
+    DescribeTrafficMirrorFilters (..),
+    newDescribeTrafficMirrorFilters,
+
+    -- * Request Lenses
+    describeTrafficMirrorFilters_dryRun,
+    describeTrafficMirrorFilters_filters,
+    describeTrafficMirrorFilters_maxResults,
+    describeTrafficMirrorFilters_nextToken,
+    describeTrafficMirrorFilters_trafficMirrorFilterIds,
+
+    -- * Destructuring the Response
+    DescribeTrafficMirrorFiltersResponse (..),
+    newDescribeTrafficMirrorFiltersResponse,
+
+    -- * Response Lenses
+    describeTrafficMirrorFiltersResponse_nextToken,
+    describeTrafficMirrorFiltersResponse_trafficMirrorFilters,
+    describeTrafficMirrorFiltersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTrafficMirrorFilters' smart constructor.
+data DescribeTrafficMirrorFilters = DescribeTrafficMirrorFilters'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @description@: The Traffic Mirror filter description.
+    --
+    -- -   @traffic-mirror-filter-id@: The ID of the Traffic Mirror filter.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrafficMirrorFilters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTrafficMirrorFilters_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTrafficMirrorFilters_filters' - One or more filters. The possible values are:
+--
+-- -   @description@: The Traffic Mirror filter description.
+--
+-- -   @traffic-mirror-filter-id@: The ID of the Traffic Mirror filter.
+--
+-- 'maxResults', 'describeTrafficMirrorFilters_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTrafficMirrorFilters_nextToken' - The token for the next page of results.
+--
+-- 'trafficMirrorFilterIds', 'describeTrafficMirrorFilters_trafficMirrorFilterIds' - The ID of the Traffic Mirror filter.
+newDescribeTrafficMirrorFilters ::
+  DescribeTrafficMirrorFilters
+newDescribeTrafficMirrorFilters =
+  DescribeTrafficMirrorFilters'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      trafficMirrorFilterIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTrafficMirrorFilters_dryRun :: Lens.Lens' DescribeTrafficMirrorFilters (Prelude.Maybe Prelude.Bool)
+describeTrafficMirrorFilters_dryRun = Lens.lens (\DescribeTrafficMirrorFilters' {dryRun} -> dryRun) (\s@DescribeTrafficMirrorFilters' {} a -> s {dryRun = a} :: DescribeTrafficMirrorFilters)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @description@: The Traffic Mirror filter description.
+--
+-- -   @traffic-mirror-filter-id@: The ID of the Traffic Mirror filter.
+describeTrafficMirrorFilters_filters :: Lens.Lens' DescribeTrafficMirrorFilters (Prelude.Maybe [Filter])
+describeTrafficMirrorFilters_filters = Lens.lens (\DescribeTrafficMirrorFilters' {filters} -> filters) (\s@DescribeTrafficMirrorFilters' {} a -> s {filters = a} :: DescribeTrafficMirrorFilters) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTrafficMirrorFilters_maxResults :: Lens.Lens' DescribeTrafficMirrorFilters (Prelude.Maybe Prelude.Natural)
+describeTrafficMirrorFilters_maxResults = Lens.lens (\DescribeTrafficMirrorFilters' {maxResults} -> maxResults) (\s@DescribeTrafficMirrorFilters' {} a -> s {maxResults = a} :: DescribeTrafficMirrorFilters)
+
+-- | The token for the next page of results.
+describeTrafficMirrorFilters_nextToken :: Lens.Lens' DescribeTrafficMirrorFilters (Prelude.Maybe Prelude.Text)
+describeTrafficMirrorFilters_nextToken = Lens.lens (\DescribeTrafficMirrorFilters' {nextToken} -> nextToken) (\s@DescribeTrafficMirrorFilters' {} a -> s {nextToken = a} :: DescribeTrafficMirrorFilters)
+
+-- | The ID of the Traffic Mirror filter.
+describeTrafficMirrorFilters_trafficMirrorFilterIds :: Lens.Lens' DescribeTrafficMirrorFilters (Prelude.Maybe [Prelude.Text])
+describeTrafficMirrorFilters_trafficMirrorFilterIds = Lens.lens (\DescribeTrafficMirrorFilters' {trafficMirrorFilterIds} -> trafficMirrorFilterIds) (\s@DescribeTrafficMirrorFilters' {} a -> s {trafficMirrorFilterIds = a} :: DescribeTrafficMirrorFilters) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeTrafficMirrorFilters where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTrafficMirrorFiltersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTrafficMirrorFiltersResponse_trafficMirrorFilters
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTrafficMirrorFilters_nextToken
+          Lens..~ rs
+          Lens.^? describeTrafficMirrorFiltersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeTrafficMirrorFilters where
+  type
+    AWSResponse DescribeTrafficMirrorFilters =
+      DescribeTrafficMirrorFiltersResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTrafficMirrorFiltersResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "trafficMirrorFilterSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTrafficMirrorFilters
+  where
+  hashWithSalt _salt DescribeTrafficMirrorFilters' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` trafficMirrorFilterIds
+
+instance Prelude.NFData DescribeTrafficMirrorFilters where
+  rnf DescribeTrafficMirrorFilters' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterIds
+
+instance Data.ToHeaders DescribeTrafficMirrorFilters where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeTrafficMirrorFilters where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTrafficMirrorFilters where
+  toQuery DescribeTrafficMirrorFilters' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTrafficMirrorFilters" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TrafficMirrorFilterId"
+              Prelude.<$> trafficMirrorFilterIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTrafficMirrorFiltersResponse' smart constructor.
+data DescribeTrafficMirrorFiltersResponse = DescribeTrafficMirrorFiltersResponse'
+  { -- | The token to use to retrieve the next page of results. The value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more Traffic Mirror filters.
+    trafficMirrorFilters :: Prelude.Maybe [TrafficMirrorFilter],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrafficMirrorFiltersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTrafficMirrorFiltersResponse_nextToken' - The token to use to retrieve the next page of results. The value is
+-- @null@ when there are no more results to return.
+--
+-- 'trafficMirrorFilters', 'describeTrafficMirrorFiltersResponse_trafficMirrorFilters' - Information about one or more Traffic Mirror filters.
+--
+-- 'httpStatus', 'describeTrafficMirrorFiltersResponse_httpStatus' - The response's http status code.
+newDescribeTrafficMirrorFiltersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTrafficMirrorFiltersResponse
+newDescribeTrafficMirrorFiltersResponse pHttpStatus_ =
+  DescribeTrafficMirrorFiltersResponse'
+    { nextToken =
+        Prelude.Nothing,
+      trafficMirrorFilters =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. The value is
+-- @null@ when there are no more results to return.
+describeTrafficMirrorFiltersResponse_nextToken :: Lens.Lens' DescribeTrafficMirrorFiltersResponse (Prelude.Maybe Prelude.Text)
+describeTrafficMirrorFiltersResponse_nextToken = Lens.lens (\DescribeTrafficMirrorFiltersResponse' {nextToken} -> nextToken) (\s@DescribeTrafficMirrorFiltersResponse' {} a -> s {nextToken = a} :: DescribeTrafficMirrorFiltersResponse)
+
+-- | Information about one or more Traffic Mirror filters.
+describeTrafficMirrorFiltersResponse_trafficMirrorFilters :: Lens.Lens' DescribeTrafficMirrorFiltersResponse (Prelude.Maybe [TrafficMirrorFilter])
+describeTrafficMirrorFiltersResponse_trafficMirrorFilters = Lens.lens (\DescribeTrafficMirrorFiltersResponse' {trafficMirrorFilters} -> trafficMirrorFilters) (\s@DescribeTrafficMirrorFiltersResponse' {} a -> s {trafficMirrorFilters = a} :: DescribeTrafficMirrorFiltersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTrafficMirrorFiltersResponse_httpStatus :: Lens.Lens' DescribeTrafficMirrorFiltersResponse Prelude.Int
+describeTrafficMirrorFiltersResponse_httpStatus = Lens.lens (\DescribeTrafficMirrorFiltersResponse' {httpStatus} -> httpStatus) (\s@DescribeTrafficMirrorFiltersResponse' {} a -> s {httpStatus = a} :: DescribeTrafficMirrorFiltersResponse)
+
+instance
+  Prelude.NFData
+    DescribeTrafficMirrorFiltersResponse
+  where
+  rnf DescribeTrafficMirrorFiltersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trafficMirrorFilters
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTrafficMirrorSessions.hs b/gen/Amazonka/EC2/DescribeTrafficMirrorSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTrafficMirrorSessions.hs
@@ -0,0 +1,356 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTrafficMirrorSessions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more Traffic Mirror sessions. By default, all Traffic
+-- Mirror sessions are described. Alternatively, you can filter the
+-- results.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTrafficMirrorSessions
+  ( -- * Creating a Request
+    DescribeTrafficMirrorSessions (..),
+    newDescribeTrafficMirrorSessions,
+
+    -- * Request Lenses
+    describeTrafficMirrorSessions_dryRun,
+    describeTrafficMirrorSessions_filters,
+    describeTrafficMirrorSessions_maxResults,
+    describeTrafficMirrorSessions_nextToken,
+    describeTrafficMirrorSessions_trafficMirrorSessionIds,
+
+    -- * Destructuring the Response
+    DescribeTrafficMirrorSessionsResponse (..),
+    newDescribeTrafficMirrorSessionsResponse,
+
+    -- * Response Lenses
+    describeTrafficMirrorSessionsResponse_nextToken,
+    describeTrafficMirrorSessionsResponse_trafficMirrorSessions,
+    describeTrafficMirrorSessionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTrafficMirrorSessions' smart constructor.
+data DescribeTrafficMirrorSessions = DescribeTrafficMirrorSessions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @description@: The Traffic Mirror session description.
+    --
+    -- -   @network-interface-id@: The ID of the Traffic Mirror session network
+    --     interface.
+    --
+    -- -   @owner-id@: The ID of the account that owns the Traffic Mirror
+    --     session.
+    --
+    -- -   @packet-length@: The assigned number of packets to mirror.
+    --
+    -- -   @session-number@: The assigned session number.
+    --
+    -- -   @traffic-mirror-filter-id@: The ID of the Traffic Mirror filter.
+    --
+    -- -   @traffic-mirror-session-id@: The ID of the Traffic Mirror session.
+    --
+    -- -   @traffic-mirror-target-id@: The ID of the Traffic Mirror target.
+    --
+    -- -   @virtual-network-id@: The virtual network ID of the Traffic Mirror
+    --     session.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Traffic Mirror session.
+    trafficMirrorSessionIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrafficMirrorSessions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTrafficMirrorSessions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTrafficMirrorSessions_filters' - One or more filters. The possible values are:
+--
+-- -   @description@: The Traffic Mirror session description.
+--
+-- -   @network-interface-id@: The ID of the Traffic Mirror session network
+--     interface.
+--
+-- -   @owner-id@: The ID of the account that owns the Traffic Mirror
+--     session.
+--
+-- -   @packet-length@: The assigned number of packets to mirror.
+--
+-- -   @session-number@: The assigned session number.
+--
+-- -   @traffic-mirror-filter-id@: The ID of the Traffic Mirror filter.
+--
+-- -   @traffic-mirror-session-id@: The ID of the Traffic Mirror session.
+--
+-- -   @traffic-mirror-target-id@: The ID of the Traffic Mirror target.
+--
+-- -   @virtual-network-id@: The virtual network ID of the Traffic Mirror
+--     session.
+--
+-- 'maxResults', 'describeTrafficMirrorSessions_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTrafficMirrorSessions_nextToken' - The token for the next page of results.
+--
+-- 'trafficMirrorSessionIds', 'describeTrafficMirrorSessions_trafficMirrorSessionIds' - The ID of the Traffic Mirror session.
+newDescribeTrafficMirrorSessions ::
+  DescribeTrafficMirrorSessions
+newDescribeTrafficMirrorSessions =
+  DescribeTrafficMirrorSessions'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      trafficMirrorSessionIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTrafficMirrorSessions_dryRun :: Lens.Lens' DescribeTrafficMirrorSessions (Prelude.Maybe Prelude.Bool)
+describeTrafficMirrorSessions_dryRun = Lens.lens (\DescribeTrafficMirrorSessions' {dryRun} -> dryRun) (\s@DescribeTrafficMirrorSessions' {} a -> s {dryRun = a} :: DescribeTrafficMirrorSessions)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @description@: The Traffic Mirror session description.
+--
+-- -   @network-interface-id@: The ID of the Traffic Mirror session network
+--     interface.
+--
+-- -   @owner-id@: The ID of the account that owns the Traffic Mirror
+--     session.
+--
+-- -   @packet-length@: The assigned number of packets to mirror.
+--
+-- -   @session-number@: The assigned session number.
+--
+-- -   @traffic-mirror-filter-id@: The ID of the Traffic Mirror filter.
+--
+-- -   @traffic-mirror-session-id@: The ID of the Traffic Mirror session.
+--
+-- -   @traffic-mirror-target-id@: The ID of the Traffic Mirror target.
+--
+-- -   @virtual-network-id@: The virtual network ID of the Traffic Mirror
+--     session.
+describeTrafficMirrorSessions_filters :: Lens.Lens' DescribeTrafficMirrorSessions (Prelude.Maybe [Filter])
+describeTrafficMirrorSessions_filters = Lens.lens (\DescribeTrafficMirrorSessions' {filters} -> filters) (\s@DescribeTrafficMirrorSessions' {} a -> s {filters = a} :: DescribeTrafficMirrorSessions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTrafficMirrorSessions_maxResults :: Lens.Lens' DescribeTrafficMirrorSessions (Prelude.Maybe Prelude.Natural)
+describeTrafficMirrorSessions_maxResults = Lens.lens (\DescribeTrafficMirrorSessions' {maxResults} -> maxResults) (\s@DescribeTrafficMirrorSessions' {} a -> s {maxResults = a} :: DescribeTrafficMirrorSessions)
+
+-- | The token for the next page of results.
+describeTrafficMirrorSessions_nextToken :: Lens.Lens' DescribeTrafficMirrorSessions (Prelude.Maybe Prelude.Text)
+describeTrafficMirrorSessions_nextToken = Lens.lens (\DescribeTrafficMirrorSessions' {nextToken} -> nextToken) (\s@DescribeTrafficMirrorSessions' {} a -> s {nextToken = a} :: DescribeTrafficMirrorSessions)
+
+-- | The ID of the Traffic Mirror session.
+describeTrafficMirrorSessions_trafficMirrorSessionIds :: Lens.Lens' DescribeTrafficMirrorSessions (Prelude.Maybe [Prelude.Text])
+describeTrafficMirrorSessions_trafficMirrorSessionIds = Lens.lens (\DescribeTrafficMirrorSessions' {trafficMirrorSessionIds} -> trafficMirrorSessionIds) (\s@DescribeTrafficMirrorSessions' {} a -> s {trafficMirrorSessionIds = a} :: DescribeTrafficMirrorSessions) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeTrafficMirrorSessions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTrafficMirrorSessionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTrafficMirrorSessionsResponse_trafficMirrorSessions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTrafficMirrorSessions_nextToken
+          Lens..~ rs
+          Lens.^? describeTrafficMirrorSessionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTrafficMirrorSessions
+  where
+  type
+    AWSResponse DescribeTrafficMirrorSessions =
+      DescribeTrafficMirrorSessionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTrafficMirrorSessionsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "trafficMirrorSessionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTrafficMirrorSessions
+  where
+  hashWithSalt _salt DescribeTrafficMirrorSessions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` trafficMirrorSessionIds
+
+instance Prelude.NFData DescribeTrafficMirrorSessions where
+  rnf DescribeTrafficMirrorSessions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trafficMirrorSessionIds
+
+instance Data.ToHeaders DescribeTrafficMirrorSessions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeTrafficMirrorSessions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTrafficMirrorSessions where
+  toQuery DescribeTrafficMirrorSessions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTrafficMirrorSessions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TrafficMirrorSessionId"
+              Prelude.<$> trafficMirrorSessionIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTrafficMirrorSessionsResponse' smart constructor.
+data DescribeTrafficMirrorSessionsResponse = DescribeTrafficMirrorSessionsResponse'
+  { -- | The token to use to retrieve the next page of results. The value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Describes one or more Traffic Mirror sessions. By default, all Traffic
+    -- Mirror sessions are described. Alternatively, you can filter the
+    -- results.
+    trafficMirrorSessions :: Prelude.Maybe [TrafficMirrorSession],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrafficMirrorSessionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTrafficMirrorSessionsResponse_nextToken' - The token to use to retrieve the next page of results. The value is
+-- @null@ when there are no more results to return.
+--
+-- 'trafficMirrorSessions', 'describeTrafficMirrorSessionsResponse_trafficMirrorSessions' - Describes one or more Traffic Mirror sessions. By default, all Traffic
+-- Mirror sessions are described. Alternatively, you can filter the
+-- results.
+--
+-- 'httpStatus', 'describeTrafficMirrorSessionsResponse_httpStatus' - The response's http status code.
+newDescribeTrafficMirrorSessionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTrafficMirrorSessionsResponse
+newDescribeTrafficMirrorSessionsResponse pHttpStatus_ =
+  DescribeTrafficMirrorSessionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      trafficMirrorSessions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. The value is
+-- @null@ when there are no more results to return.
+describeTrafficMirrorSessionsResponse_nextToken :: Lens.Lens' DescribeTrafficMirrorSessionsResponse (Prelude.Maybe Prelude.Text)
+describeTrafficMirrorSessionsResponse_nextToken = Lens.lens (\DescribeTrafficMirrorSessionsResponse' {nextToken} -> nextToken) (\s@DescribeTrafficMirrorSessionsResponse' {} a -> s {nextToken = a} :: DescribeTrafficMirrorSessionsResponse)
+
+-- | Describes one or more Traffic Mirror sessions. By default, all Traffic
+-- Mirror sessions are described. Alternatively, you can filter the
+-- results.
+describeTrafficMirrorSessionsResponse_trafficMirrorSessions :: Lens.Lens' DescribeTrafficMirrorSessionsResponse (Prelude.Maybe [TrafficMirrorSession])
+describeTrafficMirrorSessionsResponse_trafficMirrorSessions = Lens.lens (\DescribeTrafficMirrorSessionsResponse' {trafficMirrorSessions} -> trafficMirrorSessions) (\s@DescribeTrafficMirrorSessionsResponse' {} a -> s {trafficMirrorSessions = a} :: DescribeTrafficMirrorSessionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTrafficMirrorSessionsResponse_httpStatus :: Lens.Lens' DescribeTrafficMirrorSessionsResponse Prelude.Int
+describeTrafficMirrorSessionsResponse_httpStatus = Lens.lens (\DescribeTrafficMirrorSessionsResponse' {httpStatus} -> httpStatus) (\s@DescribeTrafficMirrorSessionsResponse' {} a -> s {httpStatus = a} :: DescribeTrafficMirrorSessionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTrafficMirrorSessionsResponse
+  where
+  rnf DescribeTrafficMirrorSessionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trafficMirrorSessions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTrafficMirrorTargets.hs b/gen/Amazonka/EC2/DescribeTrafficMirrorTargets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTrafficMirrorTargets.hs
@@ -0,0 +1,321 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTrafficMirrorTargets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Information about one or more Traffic Mirror targets.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTrafficMirrorTargets
+  ( -- * Creating a Request
+    DescribeTrafficMirrorTargets (..),
+    newDescribeTrafficMirrorTargets,
+
+    -- * Request Lenses
+    describeTrafficMirrorTargets_dryRun,
+    describeTrafficMirrorTargets_filters,
+    describeTrafficMirrorTargets_maxResults,
+    describeTrafficMirrorTargets_nextToken,
+    describeTrafficMirrorTargets_trafficMirrorTargetIds,
+
+    -- * Destructuring the Response
+    DescribeTrafficMirrorTargetsResponse (..),
+    newDescribeTrafficMirrorTargetsResponse,
+
+    -- * Response Lenses
+    describeTrafficMirrorTargetsResponse_nextToken,
+    describeTrafficMirrorTargetsResponse_trafficMirrorTargets,
+    describeTrafficMirrorTargetsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTrafficMirrorTargets' smart constructor.
+data DescribeTrafficMirrorTargets = DescribeTrafficMirrorTargets'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @description@: The Traffic Mirror target description.
+    --
+    -- -   @network-interface-id@: The ID of the Traffic Mirror session network
+    --     interface.
+    --
+    -- -   @network-load-balancer-arn@: The Amazon Resource Name (ARN) of the
+    --     Network Load Balancer that is associated with the session.
+    --
+    -- -   @owner-id@: The ID of the account that owns the Traffic Mirror
+    --     session.
+    --
+    -- -   @traffic-mirror-target-id@: The ID of the Traffic Mirror target.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Traffic Mirror targets.
+    trafficMirrorTargetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrafficMirrorTargets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTrafficMirrorTargets_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTrafficMirrorTargets_filters' - One or more filters. The possible values are:
+--
+-- -   @description@: The Traffic Mirror target description.
+--
+-- -   @network-interface-id@: The ID of the Traffic Mirror session network
+--     interface.
+--
+-- -   @network-load-balancer-arn@: The Amazon Resource Name (ARN) of the
+--     Network Load Balancer that is associated with the session.
+--
+-- -   @owner-id@: The ID of the account that owns the Traffic Mirror
+--     session.
+--
+-- -   @traffic-mirror-target-id@: The ID of the Traffic Mirror target.
+--
+-- 'maxResults', 'describeTrafficMirrorTargets_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTrafficMirrorTargets_nextToken' - The token for the next page of results.
+--
+-- 'trafficMirrorTargetIds', 'describeTrafficMirrorTargets_trafficMirrorTargetIds' - The ID of the Traffic Mirror targets.
+newDescribeTrafficMirrorTargets ::
+  DescribeTrafficMirrorTargets
+newDescribeTrafficMirrorTargets =
+  DescribeTrafficMirrorTargets'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      trafficMirrorTargetIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTrafficMirrorTargets_dryRun :: Lens.Lens' DescribeTrafficMirrorTargets (Prelude.Maybe Prelude.Bool)
+describeTrafficMirrorTargets_dryRun = Lens.lens (\DescribeTrafficMirrorTargets' {dryRun} -> dryRun) (\s@DescribeTrafficMirrorTargets' {} a -> s {dryRun = a} :: DescribeTrafficMirrorTargets)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @description@: The Traffic Mirror target description.
+--
+-- -   @network-interface-id@: The ID of the Traffic Mirror session network
+--     interface.
+--
+-- -   @network-load-balancer-arn@: The Amazon Resource Name (ARN) of the
+--     Network Load Balancer that is associated with the session.
+--
+-- -   @owner-id@: The ID of the account that owns the Traffic Mirror
+--     session.
+--
+-- -   @traffic-mirror-target-id@: The ID of the Traffic Mirror target.
+describeTrafficMirrorTargets_filters :: Lens.Lens' DescribeTrafficMirrorTargets (Prelude.Maybe [Filter])
+describeTrafficMirrorTargets_filters = Lens.lens (\DescribeTrafficMirrorTargets' {filters} -> filters) (\s@DescribeTrafficMirrorTargets' {} a -> s {filters = a} :: DescribeTrafficMirrorTargets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTrafficMirrorTargets_maxResults :: Lens.Lens' DescribeTrafficMirrorTargets (Prelude.Maybe Prelude.Natural)
+describeTrafficMirrorTargets_maxResults = Lens.lens (\DescribeTrafficMirrorTargets' {maxResults} -> maxResults) (\s@DescribeTrafficMirrorTargets' {} a -> s {maxResults = a} :: DescribeTrafficMirrorTargets)
+
+-- | The token for the next page of results.
+describeTrafficMirrorTargets_nextToken :: Lens.Lens' DescribeTrafficMirrorTargets (Prelude.Maybe Prelude.Text)
+describeTrafficMirrorTargets_nextToken = Lens.lens (\DescribeTrafficMirrorTargets' {nextToken} -> nextToken) (\s@DescribeTrafficMirrorTargets' {} a -> s {nextToken = a} :: DescribeTrafficMirrorTargets)
+
+-- | The ID of the Traffic Mirror targets.
+describeTrafficMirrorTargets_trafficMirrorTargetIds :: Lens.Lens' DescribeTrafficMirrorTargets (Prelude.Maybe [Prelude.Text])
+describeTrafficMirrorTargets_trafficMirrorTargetIds = Lens.lens (\DescribeTrafficMirrorTargets' {trafficMirrorTargetIds} -> trafficMirrorTargetIds) (\s@DescribeTrafficMirrorTargets' {} a -> s {trafficMirrorTargetIds = a} :: DescribeTrafficMirrorTargets) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeTrafficMirrorTargets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTrafficMirrorTargetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTrafficMirrorTargetsResponse_trafficMirrorTargets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTrafficMirrorTargets_nextToken
+          Lens..~ rs
+          Lens.^? describeTrafficMirrorTargetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeTrafficMirrorTargets where
+  type
+    AWSResponse DescribeTrafficMirrorTargets =
+      DescribeTrafficMirrorTargetsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTrafficMirrorTargetsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "trafficMirrorTargetSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTrafficMirrorTargets
+  where
+  hashWithSalt _salt DescribeTrafficMirrorTargets' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` trafficMirrorTargetIds
+
+instance Prelude.NFData DescribeTrafficMirrorTargets where
+  rnf DescribeTrafficMirrorTargets' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trafficMirrorTargetIds
+
+instance Data.ToHeaders DescribeTrafficMirrorTargets where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeTrafficMirrorTargets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTrafficMirrorTargets where
+  toQuery DescribeTrafficMirrorTargets' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTrafficMirrorTargets" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TrafficMirrorTargetId"
+              Prelude.<$> trafficMirrorTargetIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTrafficMirrorTargetsResponse' smart constructor.
+data DescribeTrafficMirrorTargetsResponse = DescribeTrafficMirrorTargetsResponse'
+  { -- | The token to use to retrieve the next page of results. The value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more Traffic Mirror targets.
+    trafficMirrorTargets :: Prelude.Maybe [TrafficMirrorTarget],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrafficMirrorTargetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTrafficMirrorTargetsResponse_nextToken' - The token to use to retrieve the next page of results. The value is
+-- @null@ when there are no more results to return.
+--
+-- 'trafficMirrorTargets', 'describeTrafficMirrorTargetsResponse_trafficMirrorTargets' - Information about one or more Traffic Mirror targets.
+--
+-- 'httpStatus', 'describeTrafficMirrorTargetsResponse_httpStatus' - The response's http status code.
+newDescribeTrafficMirrorTargetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTrafficMirrorTargetsResponse
+newDescribeTrafficMirrorTargetsResponse pHttpStatus_ =
+  DescribeTrafficMirrorTargetsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      trafficMirrorTargets =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. The value is
+-- @null@ when there are no more results to return.
+describeTrafficMirrorTargetsResponse_nextToken :: Lens.Lens' DescribeTrafficMirrorTargetsResponse (Prelude.Maybe Prelude.Text)
+describeTrafficMirrorTargetsResponse_nextToken = Lens.lens (\DescribeTrafficMirrorTargetsResponse' {nextToken} -> nextToken) (\s@DescribeTrafficMirrorTargetsResponse' {} a -> s {nextToken = a} :: DescribeTrafficMirrorTargetsResponse)
+
+-- | Information about one or more Traffic Mirror targets.
+describeTrafficMirrorTargetsResponse_trafficMirrorTargets :: Lens.Lens' DescribeTrafficMirrorTargetsResponse (Prelude.Maybe [TrafficMirrorTarget])
+describeTrafficMirrorTargetsResponse_trafficMirrorTargets = Lens.lens (\DescribeTrafficMirrorTargetsResponse' {trafficMirrorTargets} -> trafficMirrorTargets) (\s@DescribeTrafficMirrorTargetsResponse' {} a -> s {trafficMirrorTargets = a} :: DescribeTrafficMirrorTargetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTrafficMirrorTargetsResponse_httpStatus :: Lens.Lens' DescribeTrafficMirrorTargetsResponse Prelude.Int
+describeTrafficMirrorTargetsResponse_httpStatus = Lens.lens (\DescribeTrafficMirrorTargetsResponse' {httpStatus} -> httpStatus) (\s@DescribeTrafficMirrorTargetsResponse' {} a -> s {httpStatus = a} :: DescribeTrafficMirrorTargetsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTrafficMirrorTargetsResponse
+  where
+  rnf DescribeTrafficMirrorTargetsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf trafficMirrorTargets
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayAttachments.hs b/gen/Amazonka/EC2/DescribeTransitGatewayAttachments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayAttachments.hs
@@ -0,0 +1,385 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayAttachments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more attachments between resources and transit
+-- gateways. By default, all attachments are described. Alternatively, you
+-- can filter the results by attachment ID, attachment state, resource ID,
+-- or resource owner.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayAttachments
+  ( -- * Creating a Request
+    DescribeTransitGatewayAttachments (..),
+    newDescribeTransitGatewayAttachments,
+
+    -- * Request Lenses
+    describeTransitGatewayAttachments_dryRun,
+    describeTransitGatewayAttachments_filters,
+    describeTransitGatewayAttachments_maxResults,
+    describeTransitGatewayAttachments_nextToken,
+    describeTransitGatewayAttachments_transitGatewayAttachmentIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayAttachmentsResponse (..),
+    newDescribeTransitGatewayAttachmentsResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayAttachmentsResponse_nextToken,
+    describeTransitGatewayAttachmentsResponse_transitGatewayAttachments,
+    describeTransitGatewayAttachmentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayAttachments' smart constructor.
+data DescribeTransitGatewayAttachments = DescribeTransitGatewayAttachments'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @association.state@ - The state of the association (@associating@ |
+    --     @associated@ | @disassociating@).
+    --
+    -- -   @association.transit-gateway-route-table-id@ - The ID of the route
+    --     table for the transit gateway.
+    --
+    -- -   @resource-id@ - The ID of the resource.
+    --
+    -- -   @resource-owner-id@ - The ID of the Amazon Web Services account that
+    --     owns the resource.
+    --
+    -- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+    --     | @direct-connect-gateway@ | @peering@ | @connect@.
+    --
+    -- -   @state@ - The state of the attachment. Valid values are @available@
+    --     | @deleted@ | @deleting@ | @failed@ | @failing@ |
+    --     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+    --     | @rollingBack@ | @rejected@ | @rejecting@.
+    --
+    -- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    --
+    -- -   @transit-gateway-owner-id@ - The ID of the Amazon Web Services
+    --     account that owns the transit gateway.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the attachments.
+    transitGatewayAttachmentIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayAttachments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayAttachments_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayAttachments_filters' - One or more filters. The possible values are:
+--
+-- -   @association.state@ - The state of the association (@associating@ |
+--     @associated@ | @disassociating@).
+--
+-- -   @association.transit-gateway-route-table-id@ - The ID of the route
+--     table for the transit gateway.
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-owner-id@ - The ID of the Amazon Web Services account that
+--     owns the resource.
+--
+-- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+--     | @direct-connect-gateway@ | @peering@ | @connect@.
+--
+-- -   @state@ - The state of the attachment. Valid values are @available@
+--     | @deleted@ | @deleting@ | @failed@ | @failing@ |
+--     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+--     | @rollingBack@ | @rejected@ | @rejecting@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transit-gateway-owner-id@ - The ID of the Amazon Web Services
+--     account that owns the transit gateway.
+--
+-- 'maxResults', 'describeTransitGatewayAttachments_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayAttachments_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayAttachmentIds', 'describeTransitGatewayAttachments_transitGatewayAttachmentIds' - The IDs of the attachments.
+newDescribeTransitGatewayAttachments ::
+  DescribeTransitGatewayAttachments
+newDescribeTransitGatewayAttachments =
+  DescribeTransitGatewayAttachments'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayAttachmentIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayAttachments_dryRun :: Lens.Lens' DescribeTransitGatewayAttachments (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayAttachments_dryRun = Lens.lens (\DescribeTransitGatewayAttachments' {dryRun} -> dryRun) (\s@DescribeTransitGatewayAttachments' {} a -> s {dryRun = a} :: DescribeTransitGatewayAttachments)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @association.state@ - The state of the association (@associating@ |
+--     @associated@ | @disassociating@).
+--
+-- -   @association.transit-gateway-route-table-id@ - The ID of the route
+--     table for the transit gateway.
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-owner-id@ - The ID of the Amazon Web Services account that
+--     owns the resource.
+--
+-- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+--     | @direct-connect-gateway@ | @peering@ | @connect@.
+--
+-- -   @state@ - The state of the attachment. Valid values are @available@
+--     | @deleted@ | @deleting@ | @failed@ | @failing@ |
+--     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+--     | @rollingBack@ | @rejected@ | @rejecting@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transit-gateway-owner-id@ - The ID of the Amazon Web Services
+--     account that owns the transit gateway.
+describeTransitGatewayAttachments_filters :: Lens.Lens' DescribeTransitGatewayAttachments (Prelude.Maybe [Filter])
+describeTransitGatewayAttachments_filters = Lens.lens (\DescribeTransitGatewayAttachments' {filters} -> filters) (\s@DescribeTransitGatewayAttachments' {} a -> s {filters = a} :: DescribeTransitGatewayAttachments) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayAttachments_maxResults :: Lens.Lens' DescribeTransitGatewayAttachments (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayAttachments_maxResults = Lens.lens (\DescribeTransitGatewayAttachments' {maxResults} -> maxResults) (\s@DescribeTransitGatewayAttachments' {} a -> s {maxResults = a} :: DescribeTransitGatewayAttachments)
+
+-- | The token for the next page of results.
+describeTransitGatewayAttachments_nextToken :: Lens.Lens' DescribeTransitGatewayAttachments (Prelude.Maybe Prelude.Text)
+describeTransitGatewayAttachments_nextToken = Lens.lens (\DescribeTransitGatewayAttachments' {nextToken} -> nextToken) (\s@DescribeTransitGatewayAttachments' {} a -> s {nextToken = a} :: DescribeTransitGatewayAttachments)
+
+-- | The IDs of the attachments.
+describeTransitGatewayAttachments_transitGatewayAttachmentIds :: Lens.Lens' DescribeTransitGatewayAttachments (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayAttachments_transitGatewayAttachmentIds = Lens.lens (\DescribeTransitGatewayAttachments' {transitGatewayAttachmentIds} -> transitGatewayAttachmentIds) (\s@DescribeTransitGatewayAttachments' {} a -> s {transitGatewayAttachmentIds = a} :: DescribeTransitGatewayAttachments) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayAttachments
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayAttachmentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayAttachmentsResponse_transitGatewayAttachments
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayAttachments_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayAttachmentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayAttachments
+  where
+  type
+    AWSResponse DescribeTransitGatewayAttachments =
+      DescribeTransitGatewayAttachmentsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayAttachmentsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayAttachments"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayAttachments
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayAttachments' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayAttachmentIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayAttachments
+  where
+  rnf DescribeTransitGatewayAttachments' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayAttachments
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayAttachments
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayAttachments
+  where
+  toQuery DescribeTransitGatewayAttachments' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayAttachments" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayAttachmentIds"
+              Prelude.<$> transitGatewayAttachmentIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayAttachmentsResponse' smart constructor.
+data DescribeTransitGatewayAttachmentsResponse = DescribeTransitGatewayAttachmentsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the attachments.
+    transitGatewayAttachments :: Prelude.Maybe [TransitGatewayAttachment],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayAttachmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayAttachmentsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayAttachments', 'describeTransitGatewayAttachmentsResponse_transitGatewayAttachments' - Information about the attachments.
+--
+-- 'httpStatus', 'describeTransitGatewayAttachmentsResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayAttachmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayAttachmentsResponse
+newDescribeTransitGatewayAttachmentsResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayAttachmentsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayAttachments =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayAttachmentsResponse_nextToken :: Lens.Lens' DescribeTransitGatewayAttachmentsResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayAttachmentsResponse_nextToken = Lens.lens (\DescribeTransitGatewayAttachmentsResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayAttachmentsResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayAttachmentsResponse)
+
+-- | Information about the attachments.
+describeTransitGatewayAttachmentsResponse_transitGatewayAttachments :: Lens.Lens' DescribeTransitGatewayAttachmentsResponse (Prelude.Maybe [TransitGatewayAttachment])
+describeTransitGatewayAttachmentsResponse_transitGatewayAttachments = Lens.lens (\DescribeTransitGatewayAttachmentsResponse' {transitGatewayAttachments} -> transitGatewayAttachments) (\s@DescribeTransitGatewayAttachmentsResponse' {} a -> s {transitGatewayAttachments = a} :: DescribeTransitGatewayAttachmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayAttachmentsResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayAttachmentsResponse Prelude.Int
+describeTransitGatewayAttachmentsResponse_httpStatus = Lens.lens (\DescribeTransitGatewayAttachmentsResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayAttachmentsResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayAttachmentsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayAttachmentsResponse
+  where
+  rnf DescribeTransitGatewayAttachmentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayAttachments
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayConnectPeers.hs b/gen/Amazonka/EC2/DescribeTransitGatewayConnectPeers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayConnectPeers.hs
@@ -0,0 +1,325 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayConnectPeers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more Connect peers.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayConnectPeers
+  ( -- * Creating a Request
+    DescribeTransitGatewayConnectPeers (..),
+    newDescribeTransitGatewayConnectPeers,
+
+    -- * Request Lenses
+    describeTransitGatewayConnectPeers_dryRun,
+    describeTransitGatewayConnectPeers_filters,
+    describeTransitGatewayConnectPeers_maxResults,
+    describeTransitGatewayConnectPeers_nextToken,
+    describeTransitGatewayConnectPeers_transitGatewayConnectPeerIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayConnectPeersResponse (..),
+    newDescribeTransitGatewayConnectPeersResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayConnectPeersResponse_nextToken,
+    describeTransitGatewayConnectPeersResponse_transitGatewayConnectPeers,
+    describeTransitGatewayConnectPeersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayConnectPeers' smart constructor.
+data DescribeTransitGatewayConnectPeers = DescribeTransitGatewayConnectPeers'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @state@ - The state of the Connect peer (@pending@ | @available@ |
+    --     @deleting@ | @deleted@).
+    --
+    -- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+    --
+    -- -   @transit-gateway-connect-peer-id@ - The ID of the Connect peer.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Connect peers.
+    transitGatewayConnectPeerIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayConnectPeers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayConnectPeers_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayConnectPeers_filters' - One or more filters. The possible values are:
+--
+-- -   @state@ - The state of the Connect peer (@pending@ | @available@ |
+--     @deleting@ | @deleted@).
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- -   @transit-gateway-connect-peer-id@ - The ID of the Connect peer.
+--
+-- 'maxResults', 'describeTransitGatewayConnectPeers_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayConnectPeers_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayConnectPeerIds', 'describeTransitGatewayConnectPeers_transitGatewayConnectPeerIds' - The IDs of the Connect peers.
+newDescribeTransitGatewayConnectPeers ::
+  DescribeTransitGatewayConnectPeers
+newDescribeTransitGatewayConnectPeers =
+  DescribeTransitGatewayConnectPeers'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayConnectPeerIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayConnectPeers_dryRun :: Lens.Lens' DescribeTransitGatewayConnectPeers (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayConnectPeers_dryRun = Lens.lens (\DescribeTransitGatewayConnectPeers' {dryRun} -> dryRun) (\s@DescribeTransitGatewayConnectPeers' {} a -> s {dryRun = a} :: DescribeTransitGatewayConnectPeers)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @state@ - The state of the Connect peer (@pending@ | @available@ |
+--     @deleting@ | @deleted@).
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- -   @transit-gateway-connect-peer-id@ - The ID of the Connect peer.
+describeTransitGatewayConnectPeers_filters :: Lens.Lens' DescribeTransitGatewayConnectPeers (Prelude.Maybe [Filter])
+describeTransitGatewayConnectPeers_filters = Lens.lens (\DescribeTransitGatewayConnectPeers' {filters} -> filters) (\s@DescribeTransitGatewayConnectPeers' {} a -> s {filters = a} :: DescribeTransitGatewayConnectPeers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayConnectPeers_maxResults :: Lens.Lens' DescribeTransitGatewayConnectPeers (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayConnectPeers_maxResults = Lens.lens (\DescribeTransitGatewayConnectPeers' {maxResults} -> maxResults) (\s@DescribeTransitGatewayConnectPeers' {} a -> s {maxResults = a} :: DescribeTransitGatewayConnectPeers)
+
+-- | The token for the next page of results.
+describeTransitGatewayConnectPeers_nextToken :: Lens.Lens' DescribeTransitGatewayConnectPeers (Prelude.Maybe Prelude.Text)
+describeTransitGatewayConnectPeers_nextToken = Lens.lens (\DescribeTransitGatewayConnectPeers' {nextToken} -> nextToken) (\s@DescribeTransitGatewayConnectPeers' {} a -> s {nextToken = a} :: DescribeTransitGatewayConnectPeers)
+
+-- | The IDs of the Connect peers.
+describeTransitGatewayConnectPeers_transitGatewayConnectPeerIds :: Lens.Lens' DescribeTransitGatewayConnectPeers (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayConnectPeers_transitGatewayConnectPeerIds = Lens.lens (\DescribeTransitGatewayConnectPeers' {transitGatewayConnectPeerIds} -> transitGatewayConnectPeerIds) (\s@DescribeTransitGatewayConnectPeers' {} a -> s {transitGatewayConnectPeerIds = a} :: DescribeTransitGatewayConnectPeers) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayConnectPeers
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayConnectPeersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayConnectPeersResponse_transitGatewayConnectPeers
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayConnectPeers_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayConnectPeersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayConnectPeers
+  where
+  type
+    AWSResponse DescribeTransitGatewayConnectPeers =
+      DescribeTransitGatewayConnectPeersResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayConnectPeersResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayConnectPeerSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayConnectPeers
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayConnectPeers' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayConnectPeerIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayConnectPeers
+  where
+  rnf DescribeTransitGatewayConnectPeers' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayConnectPeerIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayConnectPeers
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayConnectPeers
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayConnectPeers
+  where
+  toQuery DescribeTransitGatewayConnectPeers' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayConnectPeers" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayConnectPeerIds"
+              Prelude.<$> transitGatewayConnectPeerIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayConnectPeersResponse' smart constructor.
+data DescribeTransitGatewayConnectPeersResponse = DescribeTransitGatewayConnectPeersResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Connect peers.
+    transitGatewayConnectPeers :: Prelude.Maybe [TransitGatewayConnectPeer],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayConnectPeersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayConnectPeersResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayConnectPeers', 'describeTransitGatewayConnectPeersResponse_transitGatewayConnectPeers' - Information about the Connect peers.
+--
+-- 'httpStatus', 'describeTransitGatewayConnectPeersResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayConnectPeersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayConnectPeersResponse
+newDescribeTransitGatewayConnectPeersResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayConnectPeersResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayConnectPeers =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayConnectPeersResponse_nextToken :: Lens.Lens' DescribeTransitGatewayConnectPeersResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayConnectPeersResponse_nextToken = Lens.lens (\DescribeTransitGatewayConnectPeersResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayConnectPeersResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayConnectPeersResponse)
+
+-- | Information about the Connect peers.
+describeTransitGatewayConnectPeersResponse_transitGatewayConnectPeers :: Lens.Lens' DescribeTransitGatewayConnectPeersResponse (Prelude.Maybe [TransitGatewayConnectPeer])
+describeTransitGatewayConnectPeersResponse_transitGatewayConnectPeers = Lens.lens (\DescribeTransitGatewayConnectPeersResponse' {transitGatewayConnectPeers} -> transitGatewayConnectPeers) (\s@DescribeTransitGatewayConnectPeersResponse' {} a -> s {transitGatewayConnectPeers = a} :: DescribeTransitGatewayConnectPeersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayConnectPeersResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayConnectPeersResponse Prelude.Int
+describeTransitGatewayConnectPeersResponse_httpStatus = Lens.lens (\DescribeTransitGatewayConnectPeersResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayConnectPeersResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayConnectPeersResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayConnectPeersResponse
+  where
+  rnf DescribeTransitGatewayConnectPeersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayConnectPeers
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayConnects.hs b/gen/Amazonka/EC2/DescribeTransitGatewayConnects.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayConnects.hs
@@ -0,0 +1,337 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayConnects
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more Connect attachments.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayConnects
+  ( -- * Creating a Request
+    DescribeTransitGatewayConnects (..),
+    newDescribeTransitGatewayConnects,
+
+    -- * Request Lenses
+    describeTransitGatewayConnects_dryRun,
+    describeTransitGatewayConnects_filters,
+    describeTransitGatewayConnects_maxResults,
+    describeTransitGatewayConnects_nextToken,
+    describeTransitGatewayConnects_transitGatewayAttachmentIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayConnectsResponse (..),
+    newDescribeTransitGatewayConnectsResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayConnectsResponse_nextToken,
+    describeTransitGatewayConnectsResponse_transitGatewayConnects,
+    describeTransitGatewayConnectsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayConnects' smart constructor.
+data DescribeTransitGatewayConnects = DescribeTransitGatewayConnects'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @options.protocol@ - The tunnel protocol (@gre@).
+    --
+    -- -   @state@ - The state of the attachment (@initiating@ |
+    --     @initiatingRequest@ | @pendingAcceptance@ | @rollingBack@ |
+    --     @pending@ | @available@ | @modifying@ | @deleting@ | @deleted@ |
+    --     @failed@ | @rejected@ | @rejecting@ | @failing@).
+    --
+    -- -   @transit-gateway-attachment-id@ - The ID of the Connect attachment.
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    --
+    -- -   @transport-transit-gateway-attachment-id@ - The ID of the transit
+    --     gateway attachment from which the Connect attachment was created.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the attachments.
+    transitGatewayAttachmentIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayConnects' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayConnects_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayConnects_filters' - One or more filters. The possible values are:
+--
+-- -   @options.protocol@ - The tunnel protocol (@gre@).
+--
+-- -   @state@ - The state of the attachment (@initiating@ |
+--     @initiatingRequest@ | @pendingAcceptance@ | @rollingBack@ |
+--     @pending@ | @available@ | @modifying@ | @deleting@ | @deleted@ |
+--     @failed@ | @rejected@ | @rejecting@ | @failing@).
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the Connect attachment.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transport-transit-gateway-attachment-id@ - The ID of the transit
+--     gateway attachment from which the Connect attachment was created.
+--
+-- 'maxResults', 'describeTransitGatewayConnects_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayConnects_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayAttachmentIds', 'describeTransitGatewayConnects_transitGatewayAttachmentIds' - The IDs of the attachments.
+newDescribeTransitGatewayConnects ::
+  DescribeTransitGatewayConnects
+newDescribeTransitGatewayConnects =
+  DescribeTransitGatewayConnects'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayAttachmentIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayConnects_dryRun :: Lens.Lens' DescribeTransitGatewayConnects (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayConnects_dryRun = Lens.lens (\DescribeTransitGatewayConnects' {dryRun} -> dryRun) (\s@DescribeTransitGatewayConnects' {} a -> s {dryRun = a} :: DescribeTransitGatewayConnects)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @options.protocol@ - The tunnel protocol (@gre@).
+--
+-- -   @state@ - The state of the attachment (@initiating@ |
+--     @initiatingRequest@ | @pendingAcceptance@ | @rollingBack@ |
+--     @pending@ | @available@ | @modifying@ | @deleting@ | @deleted@ |
+--     @failed@ | @rejected@ | @rejecting@ | @failing@).
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the Connect attachment.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transport-transit-gateway-attachment-id@ - The ID of the transit
+--     gateway attachment from which the Connect attachment was created.
+describeTransitGatewayConnects_filters :: Lens.Lens' DescribeTransitGatewayConnects (Prelude.Maybe [Filter])
+describeTransitGatewayConnects_filters = Lens.lens (\DescribeTransitGatewayConnects' {filters} -> filters) (\s@DescribeTransitGatewayConnects' {} a -> s {filters = a} :: DescribeTransitGatewayConnects) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayConnects_maxResults :: Lens.Lens' DescribeTransitGatewayConnects (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayConnects_maxResults = Lens.lens (\DescribeTransitGatewayConnects' {maxResults} -> maxResults) (\s@DescribeTransitGatewayConnects' {} a -> s {maxResults = a} :: DescribeTransitGatewayConnects)
+
+-- | The token for the next page of results.
+describeTransitGatewayConnects_nextToken :: Lens.Lens' DescribeTransitGatewayConnects (Prelude.Maybe Prelude.Text)
+describeTransitGatewayConnects_nextToken = Lens.lens (\DescribeTransitGatewayConnects' {nextToken} -> nextToken) (\s@DescribeTransitGatewayConnects' {} a -> s {nextToken = a} :: DescribeTransitGatewayConnects)
+
+-- | The IDs of the attachments.
+describeTransitGatewayConnects_transitGatewayAttachmentIds :: Lens.Lens' DescribeTransitGatewayConnects (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayConnects_transitGatewayAttachmentIds = Lens.lens (\DescribeTransitGatewayConnects' {transitGatewayAttachmentIds} -> transitGatewayAttachmentIds) (\s@DescribeTransitGatewayConnects' {} a -> s {transitGatewayAttachmentIds = a} :: DescribeTransitGatewayConnects) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeTransitGatewayConnects where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayConnectsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayConnectsResponse_transitGatewayConnects
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayConnects_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayConnectsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayConnects
+  where
+  type
+    AWSResponse DescribeTransitGatewayConnects =
+      DescribeTransitGatewayConnectsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayConnectsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayConnectSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayConnects
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayConnects' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayAttachmentIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayConnects
+  where
+  rnf DescribeTransitGatewayConnects' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayConnects
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeTransitGatewayConnects where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTransitGatewayConnects where
+  toQuery DescribeTransitGatewayConnects' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayConnects" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayAttachmentIds"
+              Prelude.<$> transitGatewayAttachmentIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayConnectsResponse' smart constructor.
+data DescribeTransitGatewayConnectsResponse = DescribeTransitGatewayConnectsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Connect attachments.
+    transitGatewayConnects :: Prelude.Maybe [TransitGatewayConnect],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayConnectsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayConnectsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayConnects', 'describeTransitGatewayConnectsResponse_transitGatewayConnects' - Information about the Connect attachments.
+--
+-- 'httpStatus', 'describeTransitGatewayConnectsResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayConnectsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayConnectsResponse
+newDescribeTransitGatewayConnectsResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayConnectsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayConnects =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayConnectsResponse_nextToken :: Lens.Lens' DescribeTransitGatewayConnectsResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayConnectsResponse_nextToken = Lens.lens (\DescribeTransitGatewayConnectsResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayConnectsResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayConnectsResponse)
+
+-- | Information about the Connect attachments.
+describeTransitGatewayConnectsResponse_transitGatewayConnects :: Lens.Lens' DescribeTransitGatewayConnectsResponse (Prelude.Maybe [TransitGatewayConnect])
+describeTransitGatewayConnectsResponse_transitGatewayConnects = Lens.lens (\DescribeTransitGatewayConnectsResponse' {transitGatewayConnects} -> transitGatewayConnects) (\s@DescribeTransitGatewayConnectsResponse' {} a -> s {transitGatewayConnects = a} :: DescribeTransitGatewayConnectsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayConnectsResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayConnectsResponse Prelude.Int
+describeTransitGatewayConnectsResponse_httpStatus = Lens.lens (\DescribeTransitGatewayConnectsResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayConnectsResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayConnectsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayConnectsResponse
+  where
+  rnf DescribeTransitGatewayConnectsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayConnects
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayMulticastDomains.hs b/gen/Amazonka/EC2/DescribeTransitGatewayMulticastDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayMulticastDomains.hs
@@ -0,0 +1,330 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayMulticastDomains
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more transit gateway multicast domains.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayMulticastDomains
+  ( -- * Creating a Request
+    DescribeTransitGatewayMulticastDomains (..),
+    newDescribeTransitGatewayMulticastDomains,
+
+    -- * Request Lenses
+    describeTransitGatewayMulticastDomains_dryRun,
+    describeTransitGatewayMulticastDomains_filters,
+    describeTransitGatewayMulticastDomains_maxResults,
+    describeTransitGatewayMulticastDomains_nextToken,
+    describeTransitGatewayMulticastDomains_transitGatewayMulticastDomainIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayMulticastDomainsResponse (..),
+    newDescribeTransitGatewayMulticastDomainsResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayMulticastDomainsResponse_nextToken,
+    describeTransitGatewayMulticastDomainsResponse_transitGatewayMulticastDomains,
+    describeTransitGatewayMulticastDomainsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayMulticastDomains' smart constructor.
+data DescribeTransitGatewayMulticastDomains = DescribeTransitGatewayMulticastDomains'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @state@ - The state of the transit gateway multicast domain. Valid
+    --     values are @pending@ | @available@ | @deleting@ | @deleted@.
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    --
+    -- -   @transit-gateway-multicast-domain-id@ - The ID of the transit
+    --     gateway multicast domain.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayMulticastDomains' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayMulticastDomains_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayMulticastDomains_filters' - One or more filters. The possible values are:
+--
+-- -   @state@ - The state of the transit gateway multicast domain. Valid
+--     values are @pending@ | @available@ | @deleting@ | @deleted@.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transit-gateway-multicast-domain-id@ - The ID of the transit
+--     gateway multicast domain.
+--
+-- 'maxResults', 'describeTransitGatewayMulticastDomains_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayMulticastDomains_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayMulticastDomainIds', 'describeTransitGatewayMulticastDomains_transitGatewayMulticastDomainIds' - The ID of the transit gateway multicast domain.
+newDescribeTransitGatewayMulticastDomains ::
+  DescribeTransitGatewayMulticastDomains
+newDescribeTransitGatewayMulticastDomains =
+  DescribeTransitGatewayMulticastDomains'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayMulticastDomainIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayMulticastDomains_dryRun :: Lens.Lens' DescribeTransitGatewayMulticastDomains (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayMulticastDomains_dryRun = Lens.lens (\DescribeTransitGatewayMulticastDomains' {dryRun} -> dryRun) (\s@DescribeTransitGatewayMulticastDomains' {} a -> s {dryRun = a} :: DescribeTransitGatewayMulticastDomains)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @state@ - The state of the transit gateway multicast domain. Valid
+--     values are @pending@ | @available@ | @deleting@ | @deleted@.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transit-gateway-multicast-domain-id@ - The ID of the transit
+--     gateway multicast domain.
+describeTransitGatewayMulticastDomains_filters :: Lens.Lens' DescribeTransitGatewayMulticastDomains (Prelude.Maybe [Filter])
+describeTransitGatewayMulticastDomains_filters = Lens.lens (\DescribeTransitGatewayMulticastDomains' {filters} -> filters) (\s@DescribeTransitGatewayMulticastDomains' {} a -> s {filters = a} :: DescribeTransitGatewayMulticastDomains) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayMulticastDomains_maxResults :: Lens.Lens' DescribeTransitGatewayMulticastDomains (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayMulticastDomains_maxResults = Lens.lens (\DescribeTransitGatewayMulticastDomains' {maxResults} -> maxResults) (\s@DescribeTransitGatewayMulticastDomains' {} a -> s {maxResults = a} :: DescribeTransitGatewayMulticastDomains)
+
+-- | The token for the next page of results.
+describeTransitGatewayMulticastDomains_nextToken :: Lens.Lens' DescribeTransitGatewayMulticastDomains (Prelude.Maybe Prelude.Text)
+describeTransitGatewayMulticastDomains_nextToken = Lens.lens (\DescribeTransitGatewayMulticastDomains' {nextToken} -> nextToken) (\s@DescribeTransitGatewayMulticastDomains' {} a -> s {nextToken = a} :: DescribeTransitGatewayMulticastDomains)
+
+-- | The ID of the transit gateway multicast domain.
+describeTransitGatewayMulticastDomains_transitGatewayMulticastDomainIds :: Lens.Lens' DescribeTransitGatewayMulticastDomains (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayMulticastDomains_transitGatewayMulticastDomainIds = Lens.lens (\DescribeTransitGatewayMulticastDomains' {transitGatewayMulticastDomainIds} -> transitGatewayMulticastDomainIds) (\s@DescribeTransitGatewayMulticastDomains' {} a -> s {transitGatewayMulticastDomainIds = a} :: DescribeTransitGatewayMulticastDomains) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayMulticastDomains
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayMulticastDomainsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayMulticastDomainsResponse_transitGatewayMulticastDomains
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayMulticastDomains_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayMulticastDomainsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayMulticastDomains
+  where
+  type
+    AWSResponse
+      DescribeTransitGatewayMulticastDomains =
+      DescribeTransitGatewayMulticastDomainsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayMulticastDomainsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayMulticastDomains"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayMulticastDomains
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayMulticastDomains' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayMulticastDomains
+  where
+  rnf DescribeTransitGatewayMulticastDomains' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayMulticastDomains
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayMulticastDomains
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayMulticastDomains
+  where
+  toQuery DescribeTransitGatewayMulticastDomains' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayMulticastDomains" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayMulticastDomainIds"
+              Prelude.<$> transitGatewayMulticastDomainIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayMulticastDomainsResponse' smart constructor.
+data DescribeTransitGatewayMulticastDomainsResponse = DescribeTransitGatewayMulticastDomainsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the transit gateway multicast domains.
+    transitGatewayMulticastDomains :: Prelude.Maybe [TransitGatewayMulticastDomain],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayMulticastDomainsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayMulticastDomainsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayMulticastDomains', 'describeTransitGatewayMulticastDomainsResponse_transitGatewayMulticastDomains' - Information about the transit gateway multicast domains.
+--
+-- 'httpStatus', 'describeTransitGatewayMulticastDomainsResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayMulticastDomainsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayMulticastDomainsResponse
+newDescribeTransitGatewayMulticastDomainsResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayMulticastDomainsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayMulticastDomains =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayMulticastDomainsResponse_nextToken :: Lens.Lens' DescribeTransitGatewayMulticastDomainsResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayMulticastDomainsResponse_nextToken = Lens.lens (\DescribeTransitGatewayMulticastDomainsResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayMulticastDomainsResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayMulticastDomainsResponse)
+
+-- | Information about the transit gateway multicast domains.
+describeTransitGatewayMulticastDomainsResponse_transitGatewayMulticastDomains :: Lens.Lens' DescribeTransitGatewayMulticastDomainsResponse (Prelude.Maybe [TransitGatewayMulticastDomain])
+describeTransitGatewayMulticastDomainsResponse_transitGatewayMulticastDomains = Lens.lens (\DescribeTransitGatewayMulticastDomainsResponse' {transitGatewayMulticastDomains} -> transitGatewayMulticastDomains) (\s@DescribeTransitGatewayMulticastDomainsResponse' {} a -> s {transitGatewayMulticastDomains = a} :: DescribeTransitGatewayMulticastDomainsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayMulticastDomainsResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayMulticastDomainsResponse Prelude.Int
+describeTransitGatewayMulticastDomainsResponse_httpStatus = Lens.lens (\DescribeTransitGatewayMulticastDomainsResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayMulticastDomainsResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayMulticastDomainsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayMulticastDomainsResponse
+  where
+  rnf
+    DescribeTransitGatewayMulticastDomainsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomains
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayPeeringAttachments.hs b/gen/Amazonka/EC2/DescribeTransitGatewayPeeringAttachments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayPeeringAttachments.hs
@@ -0,0 +1,381 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayPeeringAttachments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes your transit gateway peering attachments.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayPeeringAttachments
+  ( -- * Creating a Request
+    DescribeTransitGatewayPeeringAttachments (..),
+    newDescribeTransitGatewayPeeringAttachments,
+
+    -- * Request Lenses
+    describeTransitGatewayPeeringAttachments_dryRun,
+    describeTransitGatewayPeeringAttachments_filters,
+    describeTransitGatewayPeeringAttachments_maxResults,
+    describeTransitGatewayPeeringAttachments_nextToken,
+    describeTransitGatewayPeeringAttachments_transitGatewayAttachmentIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayPeeringAttachmentsResponse (..),
+    newDescribeTransitGatewayPeeringAttachmentsResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayPeeringAttachmentsResponse_nextToken,
+    describeTransitGatewayPeeringAttachmentsResponse_transitGatewayPeeringAttachments,
+    describeTransitGatewayPeeringAttachmentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayPeeringAttachments' smart constructor.
+data DescribeTransitGatewayPeeringAttachments = DescribeTransitGatewayPeeringAttachments'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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 Amazon Web Services account.
+    --
+    -- -   @remote-owner-id@ - The ID of the Amazon Web Services account in the
+    --     remote Region that owns the transit gateway.
+    --
+    -- -   @state@ - The state of the peering attachment. Valid values are
+    --     @available@ | @deleted@ | @deleting@ | @failed@ | @failing@ |
+    --     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+    --     | @rollingBack@ | @rejected@ | @rejecting@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more IDs of the transit gateway peering attachments.
+    transitGatewayAttachmentIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayPeeringAttachments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayPeeringAttachments_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayPeeringAttachments_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 Amazon Web Services account.
+--
+-- -   @remote-owner-id@ - The ID of the Amazon Web Services account in the
+--     remote Region that owns the transit gateway.
+--
+-- -   @state@ - The state of the peering attachment. Valid values are
+--     @available@ | @deleted@ | @deleting@ | @failed@ | @failing@ |
+--     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+--     | @rollingBack@ | @rejected@ | @rejecting@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- 'maxResults', 'describeTransitGatewayPeeringAttachments_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayPeeringAttachments_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayAttachmentIds', 'describeTransitGatewayPeeringAttachments_transitGatewayAttachmentIds' - One or more IDs of the transit gateway peering attachments.
+newDescribeTransitGatewayPeeringAttachments ::
+  DescribeTransitGatewayPeeringAttachments
+newDescribeTransitGatewayPeeringAttachments =
+  DescribeTransitGatewayPeeringAttachments'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayAttachmentIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayPeeringAttachments_dryRun :: Lens.Lens' DescribeTransitGatewayPeeringAttachments (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayPeeringAttachments_dryRun = Lens.lens (\DescribeTransitGatewayPeeringAttachments' {dryRun} -> dryRun) (\s@DescribeTransitGatewayPeeringAttachments' {} a -> s {dryRun = a} :: DescribeTransitGatewayPeeringAttachments)
+
+-- | 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 Amazon Web Services account.
+--
+-- -   @remote-owner-id@ - The ID of the Amazon Web Services account in the
+--     remote Region that owns the transit gateway.
+--
+-- -   @state@ - The state of the peering attachment. Valid values are
+--     @available@ | @deleted@ | @deleting@ | @failed@ | @failing@ |
+--     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+--     | @rollingBack@ | @rejected@ | @rejecting@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+describeTransitGatewayPeeringAttachments_filters :: Lens.Lens' DescribeTransitGatewayPeeringAttachments (Prelude.Maybe [Filter])
+describeTransitGatewayPeeringAttachments_filters = Lens.lens (\DescribeTransitGatewayPeeringAttachments' {filters} -> filters) (\s@DescribeTransitGatewayPeeringAttachments' {} a -> s {filters = a} :: DescribeTransitGatewayPeeringAttachments) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayPeeringAttachments_maxResults :: Lens.Lens' DescribeTransitGatewayPeeringAttachments (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayPeeringAttachments_maxResults = Lens.lens (\DescribeTransitGatewayPeeringAttachments' {maxResults} -> maxResults) (\s@DescribeTransitGatewayPeeringAttachments' {} a -> s {maxResults = a} :: DescribeTransitGatewayPeeringAttachments)
+
+-- | The token for the next page of results.
+describeTransitGatewayPeeringAttachments_nextToken :: Lens.Lens' DescribeTransitGatewayPeeringAttachments (Prelude.Maybe Prelude.Text)
+describeTransitGatewayPeeringAttachments_nextToken = Lens.lens (\DescribeTransitGatewayPeeringAttachments' {nextToken} -> nextToken) (\s@DescribeTransitGatewayPeeringAttachments' {} a -> s {nextToken = a} :: DescribeTransitGatewayPeeringAttachments)
+
+-- | One or more IDs of the transit gateway peering attachments.
+describeTransitGatewayPeeringAttachments_transitGatewayAttachmentIds :: Lens.Lens' DescribeTransitGatewayPeeringAttachments (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayPeeringAttachments_transitGatewayAttachmentIds = Lens.lens (\DescribeTransitGatewayPeeringAttachments' {transitGatewayAttachmentIds} -> transitGatewayAttachmentIds) (\s@DescribeTransitGatewayPeeringAttachments' {} a -> s {transitGatewayAttachmentIds = a} :: DescribeTransitGatewayPeeringAttachments) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayPeeringAttachments
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayPeeringAttachmentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayPeeringAttachmentsResponse_transitGatewayPeeringAttachments
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayPeeringAttachments_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayPeeringAttachmentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayPeeringAttachments
+  where
+  type
+    AWSResponse
+      DescribeTransitGatewayPeeringAttachments =
+      DescribeTransitGatewayPeeringAttachmentsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayPeeringAttachmentsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayPeeringAttachments"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayPeeringAttachments
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayPeeringAttachments' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayAttachmentIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayPeeringAttachments
+  where
+  rnf DescribeTransitGatewayPeeringAttachments' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayPeeringAttachments
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayPeeringAttachments
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayPeeringAttachments
+  where
+  toQuery DescribeTransitGatewayPeeringAttachments' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayPeeringAttachments" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayAttachmentIds"
+              Prelude.<$> transitGatewayAttachmentIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayPeeringAttachmentsResponse' smart constructor.
+data DescribeTransitGatewayPeeringAttachmentsResponse = DescribeTransitGatewayPeeringAttachmentsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The transit gateway peering attachments.
+    transitGatewayPeeringAttachments :: Prelude.Maybe [TransitGatewayPeeringAttachment],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayPeeringAttachmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayPeeringAttachmentsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayPeeringAttachments', 'describeTransitGatewayPeeringAttachmentsResponse_transitGatewayPeeringAttachments' - The transit gateway peering attachments.
+--
+-- 'httpStatus', 'describeTransitGatewayPeeringAttachmentsResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayPeeringAttachmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayPeeringAttachmentsResponse
+newDescribeTransitGatewayPeeringAttachmentsResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayPeeringAttachmentsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayPeeringAttachments =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayPeeringAttachmentsResponse_nextToken :: Lens.Lens' DescribeTransitGatewayPeeringAttachmentsResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayPeeringAttachmentsResponse_nextToken = Lens.lens (\DescribeTransitGatewayPeeringAttachmentsResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayPeeringAttachmentsResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayPeeringAttachmentsResponse)
+
+-- | The transit gateway peering attachments.
+describeTransitGatewayPeeringAttachmentsResponse_transitGatewayPeeringAttachments :: Lens.Lens' DescribeTransitGatewayPeeringAttachmentsResponse (Prelude.Maybe [TransitGatewayPeeringAttachment])
+describeTransitGatewayPeeringAttachmentsResponse_transitGatewayPeeringAttachments = Lens.lens (\DescribeTransitGatewayPeeringAttachmentsResponse' {transitGatewayPeeringAttachments} -> transitGatewayPeeringAttachments) (\s@DescribeTransitGatewayPeeringAttachmentsResponse' {} a -> s {transitGatewayPeeringAttachments = a} :: DescribeTransitGatewayPeeringAttachmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayPeeringAttachmentsResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayPeeringAttachmentsResponse Prelude.Int
+describeTransitGatewayPeeringAttachmentsResponse_httpStatus = Lens.lens (\DescribeTransitGatewayPeeringAttachmentsResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayPeeringAttachmentsResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayPeeringAttachmentsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayPeeringAttachmentsResponse
+  where
+  rnf
+    DescribeTransitGatewayPeeringAttachmentsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayPeeringAttachments
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayPolicyTables.hs b/gen/Amazonka/EC2/DescribeTransitGatewayPolicyTables.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayPolicyTables.hs
@@ -0,0 +1,301 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayPolicyTables
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more transit gateway route policy tables.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayPolicyTables
+  ( -- * Creating a Request
+    DescribeTransitGatewayPolicyTables (..),
+    newDescribeTransitGatewayPolicyTables,
+
+    -- * Request Lenses
+    describeTransitGatewayPolicyTables_dryRun,
+    describeTransitGatewayPolicyTables_filters,
+    describeTransitGatewayPolicyTables_maxResults,
+    describeTransitGatewayPolicyTables_nextToken,
+    describeTransitGatewayPolicyTables_transitGatewayPolicyTableIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayPolicyTablesResponse (..),
+    newDescribeTransitGatewayPolicyTablesResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayPolicyTablesResponse_nextToken,
+    describeTransitGatewayPolicyTablesResponse_transitGatewayPolicyTables,
+    describeTransitGatewayPolicyTablesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayPolicyTables' smart constructor.
+data DescribeTransitGatewayPolicyTables = DescribeTransitGatewayPolicyTables'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters associated with the transit gateway policy table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the transit gateway policy tables.
+    transitGatewayPolicyTableIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayPolicyTables' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayPolicyTables_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayPolicyTables_filters' - The filters associated with the transit gateway policy table.
+--
+-- 'maxResults', 'describeTransitGatewayPolicyTables_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayPolicyTables_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayPolicyTableIds', 'describeTransitGatewayPolicyTables_transitGatewayPolicyTableIds' - The IDs of the transit gateway policy tables.
+newDescribeTransitGatewayPolicyTables ::
+  DescribeTransitGatewayPolicyTables
+newDescribeTransitGatewayPolicyTables =
+  DescribeTransitGatewayPolicyTables'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayPolicyTableIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayPolicyTables_dryRun :: Lens.Lens' DescribeTransitGatewayPolicyTables (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayPolicyTables_dryRun = Lens.lens (\DescribeTransitGatewayPolicyTables' {dryRun} -> dryRun) (\s@DescribeTransitGatewayPolicyTables' {} a -> s {dryRun = a} :: DescribeTransitGatewayPolicyTables)
+
+-- | The filters associated with the transit gateway policy table.
+describeTransitGatewayPolicyTables_filters :: Lens.Lens' DescribeTransitGatewayPolicyTables (Prelude.Maybe [Filter])
+describeTransitGatewayPolicyTables_filters = Lens.lens (\DescribeTransitGatewayPolicyTables' {filters} -> filters) (\s@DescribeTransitGatewayPolicyTables' {} a -> s {filters = a} :: DescribeTransitGatewayPolicyTables) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayPolicyTables_maxResults :: Lens.Lens' DescribeTransitGatewayPolicyTables (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayPolicyTables_maxResults = Lens.lens (\DescribeTransitGatewayPolicyTables' {maxResults} -> maxResults) (\s@DescribeTransitGatewayPolicyTables' {} a -> s {maxResults = a} :: DescribeTransitGatewayPolicyTables)
+
+-- | The token for the next page of results.
+describeTransitGatewayPolicyTables_nextToken :: Lens.Lens' DescribeTransitGatewayPolicyTables (Prelude.Maybe Prelude.Text)
+describeTransitGatewayPolicyTables_nextToken = Lens.lens (\DescribeTransitGatewayPolicyTables' {nextToken} -> nextToken) (\s@DescribeTransitGatewayPolicyTables' {} a -> s {nextToken = a} :: DescribeTransitGatewayPolicyTables)
+
+-- | The IDs of the transit gateway policy tables.
+describeTransitGatewayPolicyTables_transitGatewayPolicyTableIds :: Lens.Lens' DescribeTransitGatewayPolicyTables (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayPolicyTables_transitGatewayPolicyTableIds = Lens.lens (\DescribeTransitGatewayPolicyTables' {transitGatewayPolicyTableIds} -> transitGatewayPolicyTableIds) (\s@DescribeTransitGatewayPolicyTables' {} a -> s {transitGatewayPolicyTableIds = a} :: DescribeTransitGatewayPolicyTables) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayPolicyTables
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayPolicyTablesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayPolicyTablesResponse_transitGatewayPolicyTables
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayPolicyTables_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayPolicyTablesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayPolicyTables
+  where
+  type
+    AWSResponse DescribeTransitGatewayPolicyTables =
+      DescribeTransitGatewayPolicyTablesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayPolicyTablesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayPolicyTables"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayPolicyTables
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayPolicyTables' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayPolicyTableIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayPolicyTables
+  where
+  rnf DescribeTransitGatewayPolicyTables' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayPolicyTables
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayPolicyTables
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayPolicyTables
+  where
+  toQuery DescribeTransitGatewayPolicyTables' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayPolicyTables" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayPolicyTableIds"
+              Prelude.<$> transitGatewayPolicyTableIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayPolicyTablesResponse' smart constructor.
+data DescribeTransitGatewayPolicyTablesResponse = DescribeTransitGatewayPolicyTablesResponse'
+  { -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Describes the transit gateway policy tables.
+    transitGatewayPolicyTables :: Prelude.Maybe [TransitGatewayPolicyTable],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayPolicyTablesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayPolicyTablesResponse_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayPolicyTables', 'describeTransitGatewayPolicyTablesResponse_transitGatewayPolicyTables' - Describes the transit gateway policy tables.
+--
+-- 'httpStatus', 'describeTransitGatewayPolicyTablesResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayPolicyTablesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayPolicyTablesResponse
+newDescribeTransitGatewayPolicyTablesResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayPolicyTablesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayPolicyTables =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token for the next page of results.
+describeTransitGatewayPolicyTablesResponse_nextToken :: Lens.Lens' DescribeTransitGatewayPolicyTablesResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayPolicyTablesResponse_nextToken = Lens.lens (\DescribeTransitGatewayPolicyTablesResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayPolicyTablesResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayPolicyTablesResponse)
+
+-- | Describes the transit gateway policy tables.
+describeTransitGatewayPolicyTablesResponse_transitGatewayPolicyTables :: Lens.Lens' DescribeTransitGatewayPolicyTablesResponse (Prelude.Maybe [TransitGatewayPolicyTable])
+describeTransitGatewayPolicyTablesResponse_transitGatewayPolicyTables = Lens.lens (\DescribeTransitGatewayPolicyTablesResponse' {transitGatewayPolicyTables} -> transitGatewayPolicyTables) (\s@DescribeTransitGatewayPolicyTablesResponse' {} a -> s {transitGatewayPolicyTables = a} :: DescribeTransitGatewayPolicyTablesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayPolicyTablesResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayPolicyTablesResponse Prelude.Int
+describeTransitGatewayPolicyTablesResponse_httpStatus = Lens.lens (\DescribeTransitGatewayPolicyTablesResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayPolicyTablesResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayPolicyTablesResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayPolicyTablesResponse
+  where
+  rnf DescribeTransitGatewayPolicyTablesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTables
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayRouteTableAnnouncements.hs b/gen/Amazonka/EC2/DescribeTransitGatewayRouteTableAnnouncements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayRouteTableAnnouncements.hs
@@ -0,0 +1,307 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayRouteTableAnnouncements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more transit gateway route table advertisements.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayRouteTableAnnouncements
+  ( -- * Creating a Request
+    DescribeTransitGatewayRouteTableAnnouncements (..),
+    newDescribeTransitGatewayRouteTableAnnouncements,
+
+    -- * Request Lenses
+    describeTransitGatewayRouteTableAnnouncements_dryRun,
+    describeTransitGatewayRouteTableAnnouncements_filters,
+    describeTransitGatewayRouteTableAnnouncements_maxResults,
+    describeTransitGatewayRouteTableAnnouncements_nextToken,
+    describeTransitGatewayRouteTableAnnouncements_transitGatewayRouteTableAnnouncementIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayRouteTableAnnouncementsResponse (..),
+    newDescribeTransitGatewayRouteTableAnnouncementsResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayRouteTableAnnouncementsResponse_nextToken,
+    describeTransitGatewayRouteTableAnnouncementsResponse_transitGatewayRouteTableAnnouncements,
+    describeTransitGatewayRouteTableAnnouncementsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayRouteTableAnnouncements' smart constructor.
+data DescribeTransitGatewayRouteTableAnnouncements = DescribeTransitGatewayRouteTableAnnouncements'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters associated with the transit gateway policy table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the transit gateway route tables that are being advertised.
+    transitGatewayRouteTableAnnouncementIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayRouteTableAnnouncements' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayRouteTableAnnouncements_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayRouteTableAnnouncements_filters' - The filters associated with the transit gateway policy table.
+--
+-- 'maxResults', 'describeTransitGatewayRouteTableAnnouncements_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayRouteTableAnnouncements_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayRouteTableAnnouncementIds', 'describeTransitGatewayRouteTableAnnouncements_transitGatewayRouteTableAnnouncementIds' - The IDs of the transit gateway route tables that are being advertised.
+newDescribeTransitGatewayRouteTableAnnouncements ::
+  DescribeTransitGatewayRouteTableAnnouncements
+newDescribeTransitGatewayRouteTableAnnouncements =
+  DescribeTransitGatewayRouteTableAnnouncements'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayRouteTableAnnouncementIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayRouteTableAnnouncements_dryRun :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncements (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayRouteTableAnnouncements_dryRun = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncements' {dryRun} -> dryRun) (\s@DescribeTransitGatewayRouteTableAnnouncements' {} a -> s {dryRun = a} :: DescribeTransitGatewayRouteTableAnnouncements)
+
+-- | The filters associated with the transit gateway policy table.
+describeTransitGatewayRouteTableAnnouncements_filters :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncements (Prelude.Maybe [Filter])
+describeTransitGatewayRouteTableAnnouncements_filters = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncements' {filters} -> filters) (\s@DescribeTransitGatewayRouteTableAnnouncements' {} a -> s {filters = a} :: DescribeTransitGatewayRouteTableAnnouncements) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayRouteTableAnnouncements_maxResults :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncements (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayRouteTableAnnouncements_maxResults = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncements' {maxResults} -> maxResults) (\s@DescribeTransitGatewayRouteTableAnnouncements' {} a -> s {maxResults = a} :: DescribeTransitGatewayRouteTableAnnouncements)
+
+-- | The token for the next page of results.
+describeTransitGatewayRouteTableAnnouncements_nextToken :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncements (Prelude.Maybe Prelude.Text)
+describeTransitGatewayRouteTableAnnouncements_nextToken = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncements' {nextToken} -> nextToken) (\s@DescribeTransitGatewayRouteTableAnnouncements' {} a -> s {nextToken = a} :: DescribeTransitGatewayRouteTableAnnouncements)
+
+-- | The IDs of the transit gateway route tables that are being advertised.
+describeTransitGatewayRouteTableAnnouncements_transitGatewayRouteTableAnnouncementIds :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncements (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayRouteTableAnnouncements_transitGatewayRouteTableAnnouncementIds = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncements' {transitGatewayRouteTableAnnouncementIds} -> transitGatewayRouteTableAnnouncementIds) (\s@DescribeTransitGatewayRouteTableAnnouncements' {} a -> s {transitGatewayRouteTableAnnouncementIds = a} :: DescribeTransitGatewayRouteTableAnnouncements) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayRouteTableAnnouncementsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayRouteTableAnnouncementsResponse_transitGatewayRouteTableAnnouncements
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayRouteTableAnnouncements_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayRouteTableAnnouncementsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  type
+    AWSResponse
+      DescribeTransitGatewayRouteTableAnnouncements =
+      DescribeTransitGatewayRouteTableAnnouncementsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayRouteTableAnnouncementsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayRouteTableAnnouncements"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayRouteTableAnnouncements' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  rnf
+    DescribeTransitGatewayRouteTableAnnouncements' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf filters
+        `Prelude.seq` Prelude.rnf maxResults
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayRouteTableAnnouncements
+  where
+  toQuery
+    DescribeTransitGatewayRouteTableAnnouncements' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeTransitGatewayRouteTableAnnouncements" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken,
+          Data.toQuery
+            ( Data.toQueryList
+                "TransitGatewayRouteTableAnnouncementIds"
+                Prelude.<$> transitGatewayRouteTableAnnouncementIds
+            )
+        ]
+
+-- | /See:/ 'newDescribeTransitGatewayRouteTableAnnouncementsResponse' smart constructor.
+data DescribeTransitGatewayRouteTableAnnouncementsResponse = DescribeTransitGatewayRouteTableAnnouncementsResponse'
+  { -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Describes the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncements :: Prelude.Maybe [TransitGatewayRouteTableAnnouncement],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayRouteTableAnnouncementsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayRouteTableAnnouncementsResponse_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayRouteTableAnnouncements', 'describeTransitGatewayRouteTableAnnouncementsResponse_transitGatewayRouteTableAnnouncements' - Describes the transit gateway route table announcement.
+--
+-- 'httpStatus', 'describeTransitGatewayRouteTableAnnouncementsResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayRouteTableAnnouncementsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayRouteTableAnnouncementsResponse
+newDescribeTransitGatewayRouteTableAnnouncementsResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayRouteTableAnnouncementsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayRouteTableAnnouncements =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The token for the next page of results.
+describeTransitGatewayRouteTableAnnouncementsResponse_nextToken :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncementsResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayRouteTableAnnouncementsResponse_nextToken = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncementsResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayRouteTableAnnouncementsResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayRouteTableAnnouncementsResponse)
+
+-- | Describes the transit gateway route table announcement.
+describeTransitGatewayRouteTableAnnouncementsResponse_transitGatewayRouteTableAnnouncements :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncementsResponse (Prelude.Maybe [TransitGatewayRouteTableAnnouncement])
+describeTransitGatewayRouteTableAnnouncementsResponse_transitGatewayRouteTableAnnouncements = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncementsResponse' {transitGatewayRouteTableAnnouncements} -> transitGatewayRouteTableAnnouncements) (\s@DescribeTransitGatewayRouteTableAnnouncementsResponse' {} a -> s {transitGatewayRouteTableAnnouncements = a} :: DescribeTransitGatewayRouteTableAnnouncementsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayRouteTableAnnouncementsResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayRouteTableAnnouncementsResponse Prelude.Int
+describeTransitGatewayRouteTableAnnouncementsResponse_httpStatus = Lens.lens (\DescribeTransitGatewayRouteTableAnnouncementsResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayRouteTableAnnouncementsResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayRouteTableAnnouncementsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayRouteTableAnnouncementsResponse
+  where
+  rnf
+    DescribeTransitGatewayRouteTableAnnouncementsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncements
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayRouteTables.hs b/gen/Amazonka/EC2/DescribeTransitGatewayRouteTables.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayRouteTables.hs
@@ -0,0 +1,354 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayRouteTables
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more transit gateway route tables. By default, all
+-- transit gateway route tables are described. Alternatively, you can
+-- filter the results.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayRouteTables
+  ( -- * Creating a Request
+    DescribeTransitGatewayRouteTables (..),
+    newDescribeTransitGatewayRouteTables,
+
+    -- * Request Lenses
+    describeTransitGatewayRouteTables_dryRun,
+    describeTransitGatewayRouteTables_filters,
+    describeTransitGatewayRouteTables_maxResults,
+    describeTransitGatewayRouteTables_nextToken,
+    describeTransitGatewayRouteTables_transitGatewayRouteTableIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayRouteTablesResponse (..),
+    newDescribeTransitGatewayRouteTablesResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayRouteTablesResponse_nextToken,
+    describeTransitGatewayRouteTablesResponse_transitGatewayRouteTables,
+    describeTransitGatewayRouteTablesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayRouteTables' smart constructor.
+data DescribeTransitGatewayRouteTables = DescribeTransitGatewayRouteTables'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @default-association-route-table@ - Indicates whether this is the
+    --     default association route table for the transit gateway (@true@ |
+    --     @false@).
+    --
+    -- -   @default-propagation-route-table@ - Indicates whether this is the
+    --     default propagation route table for the transit gateway (@true@ |
+    --     @false@).
+    --
+    -- -   @state@ - The state of the route table (@available@ | @deleting@ |
+    --     @deleted@ | @pending@).
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    --
+    -- -   @transit-gateway-route-table-id@ - The ID of the transit gateway
+    --     route table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the transit gateway route tables.
+    transitGatewayRouteTableIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayRouteTables' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayRouteTables_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayRouteTables_filters' - One or more filters. The possible values are:
+--
+-- -   @default-association-route-table@ - Indicates whether this is the
+--     default association route table for the transit gateway (@true@ |
+--     @false@).
+--
+-- -   @default-propagation-route-table@ - Indicates whether this is the
+--     default propagation route table for the transit gateway (@true@ |
+--     @false@).
+--
+-- -   @state@ - The state of the route table (@available@ | @deleting@ |
+--     @deleted@ | @pending@).
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transit-gateway-route-table-id@ - The ID of the transit gateway
+--     route table.
+--
+-- 'maxResults', 'describeTransitGatewayRouteTables_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayRouteTables_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayRouteTableIds', 'describeTransitGatewayRouteTables_transitGatewayRouteTableIds' - The IDs of the transit gateway route tables.
+newDescribeTransitGatewayRouteTables ::
+  DescribeTransitGatewayRouteTables
+newDescribeTransitGatewayRouteTables =
+  DescribeTransitGatewayRouteTables'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayRouteTableIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayRouteTables_dryRun :: Lens.Lens' DescribeTransitGatewayRouteTables (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayRouteTables_dryRun = Lens.lens (\DescribeTransitGatewayRouteTables' {dryRun} -> dryRun) (\s@DescribeTransitGatewayRouteTables' {} a -> s {dryRun = a} :: DescribeTransitGatewayRouteTables)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @default-association-route-table@ - Indicates whether this is the
+--     default association route table for the transit gateway (@true@ |
+--     @false@).
+--
+-- -   @default-propagation-route-table@ - Indicates whether this is the
+--     default propagation route table for the transit gateway (@true@ |
+--     @false@).
+--
+-- -   @state@ - The state of the route table (@available@ | @deleting@ |
+--     @deleted@ | @pending@).
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @transit-gateway-route-table-id@ - The ID of the transit gateway
+--     route table.
+describeTransitGatewayRouteTables_filters :: Lens.Lens' DescribeTransitGatewayRouteTables (Prelude.Maybe [Filter])
+describeTransitGatewayRouteTables_filters = Lens.lens (\DescribeTransitGatewayRouteTables' {filters} -> filters) (\s@DescribeTransitGatewayRouteTables' {} a -> s {filters = a} :: DescribeTransitGatewayRouteTables) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayRouteTables_maxResults :: Lens.Lens' DescribeTransitGatewayRouteTables (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayRouteTables_maxResults = Lens.lens (\DescribeTransitGatewayRouteTables' {maxResults} -> maxResults) (\s@DescribeTransitGatewayRouteTables' {} a -> s {maxResults = a} :: DescribeTransitGatewayRouteTables)
+
+-- | The token for the next page of results.
+describeTransitGatewayRouteTables_nextToken :: Lens.Lens' DescribeTransitGatewayRouteTables (Prelude.Maybe Prelude.Text)
+describeTransitGatewayRouteTables_nextToken = Lens.lens (\DescribeTransitGatewayRouteTables' {nextToken} -> nextToken) (\s@DescribeTransitGatewayRouteTables' {} a -> s {nextToken = a} :: DescribeTransitGatewayRouteTables)
+
+-- | The IDs of the transit gateway route tables.
+describeTransitGatewayRouteTables_transitGatewayRouteTableIds :: Lens.Lens' DescribeTransitGatewayRouteTables (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayRouteTables_transitGatewayRouteTableIds = Lens.lens (\DescribeTransitGatewayRouteTables' {transitGatewayRouteTableIds} -> transitGatewayRouteTableIds) (\s@DescribeTransitGatewayRouteTables' {} a -> s {transitGatewayRouteTableIds = a} :: DescribeTransitGatewayRouteTables) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayRouteTables
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayRouteTablesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayRouteTablesResponse_transitGatewayRouteTables
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayRouteTables_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayRouteTablesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayRouteTables
+  where
+  type
+    AWSResponse DescribeTransitGatewayRouteTables =
+      DescribeTransitGatewayRouteTablesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayRouteTablesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayRouteTables"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayRouteTables
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayRouteTables' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayRouteTableIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayRouteTables
+  where
+  rnf DescribeTransitGatewayRouteTables' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayRouteTables
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayRouteTables
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayRouteTables
+  where
+  toQuery DescribeTransitGatewayRouteTables' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayRouteTables" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayRouteTableIds"
+              Prelude.<$> transitGatewayRouteTableIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayRouteTablesResponse' smart constructor.
+data DescribeTransitGatewayRouteTablesResponse = DescribeTransitGatewayRouteTablesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the transit gateway route tables.
+    transitGatewayRouteTables :: Prelude.Maybe [TransitGatewayRouteTable],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayRouteTablesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayRouteTablesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayRouteTables', 'describeTransitGatewayRouteTablesResponse_transitGatewayRouteTables' - Information about the transit gateway route tables.
+--
+-- 'httpStatus', 'describeTransitGatewayRouteTablesResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayRouteTablesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayRouteTablesResponse
+newDescribeTransitGatewayRouteTablesResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayRouteTablesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayRouteTables =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayRouteTablesResponse_nextToken :: Lens.Lens' DescribeTransitGatewayRouteTablesResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayRouteTablesResponse_nextToken = Lens.lens (\DescribeTransitGatewayRouteTablesResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayRouteTablesResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayRouteTablesResponse)
+
+-- | Information about the transit gateway route tables.
+describeTransitGatewayRouteTablesResponse_transitGatewayRouteTables :: Lens.Lens' DescribeTransitGatewayRouteTablesResponse (Prelude.Maybe [TransitGatewayRouteTable])
+describeTransitGatewayRouteTablesResponse_transitGatewayRouteTables = Lens.lens (\DescribeTransitGatewayRouteTablesResponse' {transitGatewayRouteTables} -> transitGatewayRouteTables) (\s@DescribeTransitGatewayRouteTablesResponse' {} a -> s {transitGatewayRouteTables = a} :: DescribeTransitGatewayRouteTablesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayRouteTablesResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayRouteTablesResponse Prelude.Int
+describeTransitGatewayRouteTablesResponse_httpStatus = Lens.lens (\DescribeTransitGatewayRouteTablesResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayRouteTablesResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayRouteTablesResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayRouteTablesResponse
+  where
+  rnf DescribeTransitGatewayRouteTablesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTables
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGatewayVpcAttachments.hs b/gen/Amazonka/EC2/DescribeTransitGatewayVpcAttachments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGatewayVpcAttachments.hs
@@ -0,0 +1,338 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGatewayVpcAttachments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more VPC attachments. By default, all VPC attachments
+-- are described. Alternatively, you can filter the results.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGatewayVpcAttachments
+  ( -- * Creating a Request
+    DescribeTransitGatewayVpcAttachments (..),
+    newDescribeTransitGatewayVpcAttachments,
+
+    -- * Request Lenses
+    describeTransitGatewayVpcAttachments_dryRun,
+    describeTransitGatewayVpcAttachments_filters,
+    describeTransitGatewayVpcAttachments_maxResults,
+    describeTransitGatewayVpcAttachments_nextToken,
+    describeTransitGatewayVpcAttachments_transitGatewayAttachmentIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewayVpcAttachmentsResponse (..),
+    newDescribeTransitGatewayVpcAttachmentsResponse,
+
+    -- * Response Lenses
+    describeTransitGatewayVpcAttachmentsResponse_nextToken,
+    describeTransitGatewayVpcAttachmentsResponse_transitGatewayVpcAttachments,
+    describeTransitGatewayVpcAttachmentsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGatewayVpcAttachments' smart constructor.
+data DescribeTransitGatewayVpcAttachments = DescribeTransitGatewayVpcAttachments'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @state@ - The state of the attachment. Valid values are @available@
+    --     | @deleted@ | @deleting@ | @failed@ | @failing@ |
+    --     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+    --     | @rollingBack@ | @rejected@ | @rejecting@.
+    --
+    -- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    --
+    -- -   @vpc-id@ - The ID of the VPC.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the attachments.
+    transitGatewayAttachmentIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayVpcAttachments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGatewayVpcAttachments_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGatewayVpcAttachments_filters' - One or more filters. The possible values are:
+--
+-- -   @state@ - The state of the attachment. Valid values are @available@
+--     | @deleted@ | @deleting@ | @failed@ | @failing@ |
+--     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+--     | @rollingBack@ | @rejected@ | @rejecting@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @vpc-id@ - The ID of the VPC.
+--
+-- 'maxResults', 'describeTransitGatewayVpcAttachments_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGatewayVpcAttachments_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayAttachmentIds', 'describeTransitGatewayVpcAttachments_transitGatewayAttachmentIds' - The IDs of the attachments.
+newDescribeTransitGatewayVpcAttachments ::
+  DescribeTransitGatewayVpcAttachments
+newDescribeTransitGatewayVpcAttachments =
+  DescribeTransitGatewayVpcAttachments'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayAttachmentIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGatewayVpcAttachments_dryRun :: Lens.Lens' DescribeTransitGatewayVpcAttachments (Prelude.Maybe Prelude.Bool)
+describeTransitGatewayVpcAttachments_dryRun = Lens.lens (\DescribeTransitGatewayVpcAttachments' {dryRun} -> dryRun) (\s@DescribeTransitGatewayVpcAttachments' {} a -> s {dryRun = a} :: DescribeTransitGatewayVpcAttachments)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @state@ - The state of the attachment. Valid values are @available@
+--     | @deleted@ | @deleting@ | @failed@ | @failing@ |
+--     @initiatingRequest@ | @modifying@ | @pendingAcceptance@ | @pending@
+--     | @rollingBack@ | @rejected@ | @rejecting@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- -   @vpc-id@ - The ID of the VPC.
+describeTransitGatewayVpcAttachments_filters :: Lens.Lens' DescribeTransitGatewayVpcAttachments (Prelude.Maybe [Filter])
+describeTransitGatewayVpcAttachments_filters = Lens.lens (\DescribeTransitGatewayVpcAttachments' {filters} -> filters) (\s@DescribeTransitGatewayVpcAttachments' {} a -> s {filters = a} :: DescribeTransitGatewayVpcAttachments) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGatewayVpcAttachments_maxResults :: Lens.Lens' DescribeTransitGatewayVpcAttachments (Prelude.Maybe Prelude.Natural)
+describeTransitGatewayVpcAttachments_maxResults = Lens.lens (\DescribeTransitGatewayVpcAttachments' {maxResults} -> maxResults) (\s@DescribeTransitGatewayVpcAttachments' {} a -> s {maxResults = a} :: DescribeTransitGatewayVpcAttachments)
+
+-- | The token for the next page of results.
+describeTransitGatewayVpcAttachments_nextToken :: Lens.Lens' DescribeTransitGatewayVpcAttachments (Prelude.Maybe Prelude.Text)
+describeTransitGatewayVpcAttachments_nextToken = Lens.lens (\DescribeTransitGatewayVpcAttachments' {nextToken} -> nextToken) (\s@DescribeTransitGatewayVpcAttachments' {} a -> s {nextToken = a} :: DescribeTransitGatewayVpcAttachments)
+
+-- | The IDs of the attachments.
+describeTransitGatewayVpcAttachments_transitGatewayAttachmentIds :: Lens.Lens' DescribeTransitGatewayVpcAttachments (Prelude.Maybe [Prelude.Text])
+describeTransitGatewayVpcAttachments_transitGatewayAttachmentIds = Lens.lens (\DescribeTransitGatewayVpcAttachments' {transitGatewayAttachmentIds} -> transitGatewayAttachmentIds) (\s@DescribeTransitGatewayVpcAttachments' {} a -> s {transitGatewayAttachmentIds = a} :: DescribeTransitGatewayVpcAttachments) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeTransitGatewayVpcAttachments
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayVpcAttachmentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewayVpcAttachmentsResponse_transitGatewayVpcAttachments
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGatewayVpcAttachments_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewayVpcAttachmentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTransitGatewayVpcAttachments
+  where
+  type
+    AWSResponse DescribeTransitGatewayVpcAttachments =
+      DescribeTransitGatewayVpcAttachmentsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewayVpcAttachmentsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayVpcAttachments"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTransitGatewayVpcAttachments
+  where
+  hashWithSalt
+    _salt
+    DescribeTransitGatewayVpcAttachments' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayAttachmentIds
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayVpcAttachments
+  where
+  rnf DescribeTransitGatewayVpcAttachments' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentIds
+
+instance
+  Data.ToHeaders
+    DescribeTransitGatewayVpcAttachments
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTransitGatewayVpcAttachments
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTransitGatewayVpcAttachments
+  where
+  toQuery DescribeTransitGatewayVpcAttachments' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTransitGatewayVpcAttachments" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayAttachmentIds"
+              Prelude.<$> transitGatewayAttachmentIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewayVpcAttachmentsResponse' smart constructor.
+data DescribeTransitGatewayVpcAttachmentsResponse = DescribeTransitGatewayVpcAttachmentsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the VPC attachments.
+    transitGatewayVpcAttachments :: Prelude.Maybe [TransitGatewayVpcAttachment],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewayVpcAttachmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewayVpcAttachmentsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayVpcAttachments', 'describeTransitGatewayVpcAttachmentsResponse_transitGatewayVpcAttachments' - Information about the VPC attachments.
+--
+-- 'httpStatus', 'describeTransitGatewayVpcAttachmentsResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewayVpcAttachmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewayVpcAttachmentsResponse
+newDescribeTransitGatewayVpcAttachmentsResponse
+  pHttpStatus_ =
+    DescribeTransitGatewayVpcAttachmentsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayVpcAttachments =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewayVpcAttachmentsResponse_nextToken :: Lens.Lens' DescribeTransitGatewayVpcAttachmentsResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewayVpcAttachmentsResponse_nextToken = Lens.lens (\DescribeTransitGatewayVpcAttachmentsResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewayVpcAttachmentsResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewayVpcAttachmentsResponse)
+
+-- | Information about the VPC attachments.
+describeTransitGatewayVpcAttachmentsResponse_transitGatewayVpcAttachments :: Lens.Lens' DescribeTransitGatewayVpcAttachmentsResponse (Prelude.Maybe [TransitGatewayVpcAttachment])
+describeTransitGatewayVpcAttachmentsResponse_transitGatewayVpcAttachments = Lens.lens (\DescribeTransitGatewayVpcAttachmentsResponse' {transitGatewayVpcAttachments} -> transitGatewayVpcAttachments) (\s@DescribeTransitGatewayVpcAttachmentsResponse' {} a -> s {transitGatewayVpcAttachments = a} :: DescribeTransitGatewayVpcAttachmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewayVpcAttachmentsResponse_httpStatus :: Lens.Lens' DescribeTransitGatewayVpcAttachmentsResponse Prelude.Int
+describeTransitGatewayVpcAttachmentsResponse_httpStatus = Lens.lens (\DescribeTransitGatewayVpcAttachmentsResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewayVpcAttachmentsResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewayVpcAttachmentsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewayVpcAttachmentsResponse
+  where
+  rnf DescribeTransitGatewayVpcAttachmentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayVpcAttachments
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTransitGateways.hs b/gen/Amazonka/EC2/DescribeTransitGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTransitGateways.hs
@@ -0,0 +1,381 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTransitGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more transit gateways. By default, all transit gateways
+-- are described. Alternatively, you can filter the results.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTransitGateways
+  ( -- * Creating a Request
+    DescribeTransitGateways (..),
+    newDescribeTransitGateways,
+
+    -- * Request Lenses
+    describeTransitGateways_dryRun,
+    describeTransitGateways_filters,
+    describeTransitGateways_maxResults,
+    describeTransitGateways_nextToken,
+    describeTransitGateways_transitGatewayIds,
+
+    -- * Destructuring the Response
+    DescribeTransitGatewaysResponse (..),
+    newDescribeTransitGatewaysResponse,
+
+    -- * Response Lenses
+    describeTransitGatewaysResponse_nextToken,
+    describeTransitGatewaysResponse_transitGateways,
+    describeTransitGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTransitGateways' smart constructor.
+data DescribeTransitGateways = DescribeTransitGateways'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @options.propagation-default-route-table-id@ - The ID of the default
+    --     propagation route table.
+    --
+    -- -   @options.amazon-side-asn@ - The private ASN for the Amazon side of a
+    --     BGP session.
+    --
+    -- -   @options.association-default-route-table-id@ - The ID of the default
+    --     association route table.
+    --
+    -- -   @options.auto-accept-shared-attachments@ - Indicates whether there
+    --     is automatic acceptance of attachment requests (@enable@ |
+    --     @disable@).
+    --
+    -- -   @options.default-route-table-association@ - Indicates whether
+    --     resource attachments are automatically associated with the default
+    --     association route table (@enable@ | @disable@).
+    --
+    -- -   @options.default-route-table-propagation@ - Indicates whether
+    --     resource attachments automatically propagate routes to the default
+    --     propagation route table (@enable@ | @disable@).
+    --
+    -- -   @options.dns-support@ - Indicates whether DNS support is enabled
+    --     (@enable@ | @disable@).
+    --
+    -- -   @options.vpn-ecmp-support@ - Indicates whether Equal Cost Multipath
+    --     Protocol support is enabled (@enable@ | @disable@).
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     transit gateway.
+    --
+    -- -   @state@ - The state of the transit gateway (@available@ | @deleted@
+    --     | @deleting@ | @modifying@ | @pending@).
+    --
+    -- -   @transit-gateway-id@ - The ID of the transit gateway.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the transit gateways.
+    transitGatewayIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeTransitGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTransitGateways_filters' - One or more filters. The possible values are:
+--
+-- -   @options.propagation-default-route-table-id@ - The ID of the default
+--     propagation route table.
+--
+-- -   @options.amazon-side-asn@ - The private ASN for the Amazon side of a
+--     BGP session.
+--
+-- -   @options.association-default-route-table-id@ - The ID of the default
+--     association route table.
+--
+-- -   @options.auto-accept-shared-attachments@ - Indicates whether there
+--     is automatic acceptance of attachment requests (@enable@ |
+--     @disable@).
+--
+-- -   @options.default-route-table-association@ - Indicates whether
+--     resource attachments are automatically associated with the default
+--     association route table (@enable@ | @disable@).
+--
+-- -   @options.default-route-table-propagation@ - Indicates whether
+--     resource attachments automatically propagate routes to the default
+--     propagation route table (@enable@ | @disable@).
+--
+-- -   @options.dns-support@ - Indicates whether DNS support is enabled
+--     (@enable@ | @disable@).
+--
+-- -   @options.vpn-ecmp-support@ - Indicates whether Equal Cost Multipath
+--     Protocol support is enabled (@enable@ | @disable@).
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     transit gateway.
+--
+-- -   @state@ - The state of the transit gateway (@available@ | @deleted@
+--     | @deleting@ | @modifying@ | @pending@).
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+--
+-- 'maxResults', 'describeTransitGateways_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTransitGateways_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayIds', 'describeTransitGateways_transitGatewayIds' - The IDs of the transit gateways.
+newDescribeTransitGateways ::
+  DescribeTransitGateways
+newDescribeTransitGateways =
+  DescribeTransitGateways'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTransitGateways_dryRun :: Lens.Lens' DescribeTransitGateways (Prelude.Maybe Prelude.Bool)
+describeTransitGateways_dryRun = Lens.lens (\DescribeTransitGateways' {dryRun} -> dryRun) (\s@DescribeTransitGateways' {} a -> s {dryRun = a} :: DescribeTransitGateways)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @options.propagation-default-route-table-id@ - The ID of the default
+--     propagation route table.
+--
+-- -   @options.amazon-side-asn@ - The private ASN for the Amazon side of a
+--     BGP session.
+--
+-- -   @options.association-default-route-table-id@ - The ID of the default
+--     association route table.
+--
+-- -   @options.auto-accept-shared-attachments@ - Indicates whether there
+--     is automatic acceptance of attachment requests (@enable@ |
+--     @disable@).
+--
+-- -   @options.default-route-table-association@ - Indicates whether
+--     resource attachments are automatically associated with the default
+--     association route table (@enable@ | @disable@).
+--
+-- -   @options.default-route-table-propagation@ - Indicates whether
+--     resource attachments automatically propagate routes to the default
+--     propagation route table (@enable@ | @disable@).
+--
+-- -   @options.dns-support@ - Indicates whether DNS support is enabled
+--     (@enable@ | @disable@).
+--
+-- -   @options.vpn-ecmp-support@ - Indicates whether Equal Cost Multipath
+--     Protocol support is enabled (@enable@ | @disable@).
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     transit gateway.
+--
+-- -   @state@ - The state of the transit gateway (@available@ | @deleted@
+--     | @deleting@ | @modifying@ | @pending@).
+--
+-- -   @transit-gateway-id@ - The ID of the transit gateway.
+describeTransitGateways_filters :: Lens.Lens' DescribeTransitGateways (Prelude.Maybe [Filter])
+describeTransitGateways_filters = Lens.lens (\DescribeTransitGateways' {filters} -> filters) (\s@DescribeTransitGateways' {} a -> s {filters = a} :: DescribeTransitGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTransitGateways_maxResults :: Lens.Lens' DescribeTransitGateways (Prelude.Maybe Prelude.Natural)
+describeTransitGateways_maxResults = Lens.lens (\DescribeTransitGateways' {maxResults} -> maxResults) (\s@DescribeTransitGateways' {} a -> s {maxResults = a} :: DescribeTransitGateways)
+
+-- | The token for the next page of results.
+describeTransitGateways_nextToken :: Lens.Lens' DescribeTransitGateways (Prelude.Maybe Prelude.Text)
+describeTransitGateways_nextToken = Lens.lens (\DescribeTransitGateways' {nextToken} -> nextToken) (\s@DescribeTransitGateways' {} a -> s {nextToken = a} :: DescribeTransitGateways)
+
+-- | The IDs of the transit gateways.
+describeTransitGateways_transitGatewayIds :: Lens.Lens' DescribeTransitGateways (Prelude.Maybe [Prelude.Text])
+describeTransitGateways_transitGatewayIds = Lens.lens (\DescribeTransitGateways' {transitGatewayIds} -> transitGatewayIds) (\s@DescribeTransitGateways' {} a -> s {transitGatewayIds = a} :: DescribeTransitGateways) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeTransitGateways where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewaysResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTransitGatewaysResponse_transitGateways
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTransitGateways_nextToken
+          Lens..~ rs
+          Lens.^? describeTransitGatewaysResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeTransitGateways where
+  type
+    AWSResponse DescribeTransitGateways =
+      DescribeTransitGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTransitGatewaysResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeTransitGateways where
+  hashWithSalt _salt DescribeTransitGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` transitGatewayIds
+
+instance Prelude.NFData DescribeTransitGateways where
+  rnf DescribeTransitGateways' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayIds
+
+instance Data.ToHeaders DescribeTransitGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeTransitGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeTransitGateways where
+  toQuery DescribeTransitGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeTransitGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayIds"
+              Prelude.<$> transitGatewayIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeTransitGatewaysResponse' smart constructor.
+data DescribeTransitGatewaysResponse = DescribeTransitGatewaysResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the transit gateways.
+    transitGateways :: Prelude.Maybe [TransitGateway],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTransitGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeTransitGatewaysResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGateways', 'describeTransitGatewaysResponse_transitGateways' - Information about the transit gateways.
+--
+-- 'httpStatus', 'describeTransitGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeTransitGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTransitGatewaysResponse
+newDescribeTransitGatewaysResponse pHttpStatus_ =
+  DescribeTransitGatewaysResponse'
+    { nextToken =
+        Prelude.Nothing,
+      transitGateways = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTransitGatewaysResponse_nextToken :: Lens.Lens' DescribeTransitGatewaysResponse (Prelude.Maybe Prelude.Text)
+describeTransitGatewaysResponse_nextToken = Lens.lens (\DescribeTransitGatewaysResponse' {nextToken} -> nextToken) (\s@DescribeTransitGatewaysResponse' {} a -> s {nextToken = a} :: DescribeTransitGatewaysResponse)
+
+-- | Information about the transit gateways.
+describeTransitGatewaysResponse_transitGateways :: Lens.Lens' DescribeTransitGatewaysResponse (Prelude.Maybe [TransitGateway])
+describeTransitGatewaysResponse_transitGateways = Lens.lens (\DescribeTransitGatewaysResponse' {transitGateways} -> transitGateways) (\s@DescribeTransitGatewaysResponse' {} a -> s {transitGateways = a} :: DescribeTransitGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeTransitGatewaysResponse_httpStatus :: Lens.Lens' DescribeTransitGatewaysResponse Prelude.Int
+describeTransitGatewaysResponse_httpStatus = Lens.lens (\DescribeTransitGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeTransitGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeTransitGatewaysResponse)
+
+instance
+  Prelude.NFData
+    DescribeTransitGatewaysResponse
+  where
+  rnf DescribeTransitGatewaysResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGateways
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeTrunkInterfaceAssociations.hs b/gen/Amazonka/EC2/DescribeTrunkInterfaceAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeTrunkInterfaceAssociations.hs
@@ -0,0 +1,320 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeTrunkInterfaceAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This API action is currently in __limited preview only__. If you are
+-- interested in using this feature, contact your account manager.
+--
+-- Describes one or more network interface trunk associations.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeTrunkInterfaceAssociations
+  ( -- * Creating a Request
+    DescribeTrunkInterfaceAssociations (..),
+    newDescribeTrunkInterfaceAssociations,
+
+    -- * Request Lenses
+    describeTrunkInterfaceAssociations_associationIds,
+    describeTrunkInterfaceAssociations_dryRun,
+    describeTrunkInterfaceAssociations_filters,
+    describeTrunkInterfaceAssociations_maxResults,
+    describeTrunkInterfaceAssociations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeTrunkInterfaceAssociationsResponse (..),
+    newDescribeTrunkInterfaceAssociationsResponse,
+
+    -- * Response Lenses
+    describeTrunkInterfaceAssociationsResponse_interfaceAssociations,
+    describeTrunkInterfaceAssociationsResponse_nextToken,
+    describeTrunkInterfaceAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeTrunkInterfaceAssociations' smart constructor.
+data DescribeTrunkInterfaceAssociations = DescribeTrunkInterfaceAssociations'
+  { -- | The IDs of the associations.
+    associationIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @gre-key@ - The ID of a trunk interface association.
+    --
+    -- -   @interface-protocol@ - The interface protocol. Valid values are
+    --     @VLAN@ and @GRE@.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrunkInterfaceAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationIds', 'describeTrunkInterfaceAssociations_associationIds' - The IDs of the associations.
+--
+-- 'dryRun', 'describeTrunkInterfaceAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeTrunkInterfaceAssociations_filters' - One or more filters.
+--
+-- -   @gre-key@ - The ID of a trunk interface association.
+--
+-- -   @interface-protocol@ - The interface protocol. Valid values are
+--     @VLAN@ and @GRE@.
+--
+-- 'maxResults', 'describeTrunkInterfaceAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeTrunkInterfaceAssociations_nextToken' - The token for the next page of results.
+newDescribeTrunkInterfaceAssociations ::
+  DescribeTrunkInterfaceAssociations
+newDescribeTrunkInterfaceAssociations =
+  DescribeTrunkInterfaceAssociations'
+    { associationIds =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The IDs of the associations.
+describeTrunkInterfaceAssociations_associationIds :: Lens.Lens' DescribeTrunkInterfaceAssociations (Prelude.Maybe [Prelude.Text])
+describeTrunkInterfaceAssociations_associationIds = Lens.lens (\DescribeTrunkInterfaceAssociations' {associationIds} -> associationIds) (\s@DescribeTrunkInterfaceAssociations' {} a -> s {associationIds = a} :: DescribeTrunkInterfaceAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeTrunkInterfaceAssociations_dryRun :: Lens.Lens' DescribeTrunkInterfaceAssociations (Prelude.Maybe Prelude.Bool)
+describeTrunkInterfaceAssociations_dryRun = Lens.lens (\DescribeTrunkInterfaceAssociations' {dryRun} -> dryRun) (\s@DescribeTrunkInterfaceAssociations' {} a -> s {dryRun = a} :: DescribeTrunkInterfaceAssociations)
+
+-- | One or more filters.
+--
+-- -   @gre-key@ - The ID of a trunk interface association.
+--
+-- -   @interface-protocol@ - The interface protocol. Valid values are
+--     @VLAN@ and @GRE@.
+describeTrunkInterfaceAssociations_filters :: Lens.Lens' DescribeTrunkInterfaceAssociations (Prelude.Maybe [Filter])
+describeTrunkInterfaceAssociations_filters = Lens.lens (\DescribeTrunkInterfaceAssociations' {filters} -> filters) (\s@DescribeTrunkInterfaceAssociations' {} a -> s {filters = a} :: DescribeTrunkInterfaceAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeTrunkInterfaceAssociations_maxResults :: Lens.Lens' DescribeTrunkInterfaceAssociations (Prelude.Maybe Prelude.Natural)
+describeTrunkInterfaceAssociations_maxResults = Lens.lens (\DescribeTrunkInterfaceAssociations' {maxResults} -> maxResults) (\s@DescribeTrunkInterfaceAssociations' {} a -> s {maxResults = a} :: DescribeTrunkInterfaceAssociations)
+
+-- | The token for the next page of results.
+describeTrunkInterfaceAssociations_nextToken :: Lens.Lens' DescribeTrunkInterfaceAssociations (Prelude.Maybe Prelude.Text)
+describeTrunkInterfaceAssociations_nextToken = Lens.lens (\DescribeTrunkInterfaceAssociations' {nextToken} -> nextToken) (\s@DescribeTrunkInterfaceAssociations' {} a -> s {nextToken = a} :: DescribeTrunkInterfaceAssociations)
+
+instance
+  Core.AWSPager
+    DescribeTrunkInterfaceAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeTrunkInterfaceAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeTrunkInterfaceAssociationsResponse_interfaceAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeTrunkInterfaceAssociations_nextToken
+          Lens..~ rs
+          Lens.^? describeTrunkInterfaceAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeTrunkInterfaceAssociations
+  where
+  type
+    AWSResponse DescribeTrunkInterfaceAssociations =
+      DescribeTrunkInterfaceAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeTrunkInterfaceAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "interfaceAssociationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeTrunkInterfaceAssociations
+  where
+  hashWithSalt
+    _salt
+    DescribeTrunkInterfaceAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` associationIds
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeTrunkInterfaceAssociations
+  where
+  rnf DescribeTrunkInterfaceAssociations' {..} =
+    Prelude.rnf associationIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeTrunkInterfaceAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeTrunkInterfaceAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeTrunkInterfaceAssociations
+  where
+  toQuery DescribeTrunkInterfaceAssociations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeTrunkInterfaceAssociations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AssociationId"
+              Prelude.<$> associationIds
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeTrunkInterfaceAssociationsResponse' smart constructor.
+data DescribeTrunkInterfaceAssociationsResponse = DescribeTrunkInterfaceAssociationsResponse'
+  { -- | Information about the trunk associations.
+    interfaceAssociations :: Prelude.Maybe [TrunkInterfaceAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeTrunkInterfaceAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'interfaceAssociations', 'describeTrunkInterfaceAssociationsResponse_interfaceAssociations' - Information about the trunk associations.
+--
+-- 'nextToken', 'describeTrunkInterfaceAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeTrunkInterfaceAssociationsResponse_httpStatus' - The response's http status code.
+newDescribeTrunkInterfaceAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeTrunkInterfaceAssociationsResponse
+newDescribeTrunkInterfaceAssociationsResponse
+  pHttpStatus_ =
+    DescribeTrunkInterfaceAssociationsResponse'
+      { interfaceAssociations =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the trunk associations.
+describeTrunkInterfaceAssociationsResponse_interfaceAssociations :: Lens.Lens' DescribeTrunkInterfaceAssociationsResponse (Prelude.Maybe [TrunkInterfaceAssociation])
+describeTrunkInterfaceAssociationsResponse_interfaceAssociations = Lens.lens (\DescribeTrunkInterfaceAssociationsResponse' {interfaceAssociations} -> interfaceAssociations) (\s@DescribeTrunkInterfaceAssociationsResponse' {} a -> s {interfaceAssociations = a} :: DescribeTrunkInterfaceAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeTrunkInterfaceAssociationsResponse_nextToken :: Lens.Lens' DescribeTrunkInterfaceAssociationsResponse (Prelude.Maybe Prelude.Text)
+describeTrunkInterfaceAssociationsResponse_nextToken = Lens.lens (\DescribeTrunkInterfaceAssociationsResponse' {nextToken} -> nextToken) (\s@DescribeTrunkInterfaceAssociationsResponse' {} a -> s {nextToken = a} :: DescribeTrunkInterfaceAssociationsResponse)
+
+-- | The response's http status code.
+describeTrunkInterfaceAssociationsResponse_httpStatus :: Lens.Lens' DescribeTrunkInterfaceAssociationsResponse Prelude.Int
+describeTrunkInterfaceAssociationsResponse_httpStatus = Lens.lens (\DescribeTrunkInterfaceAssociationsResponse' {httpStatus} -> httpStatus) (\s@DescribeTrunkInterfaceAssociationsResponse' {} a -> s {httpStatus = a} :: DescribeTrunkInterfaceAssociationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeTrunkInterfaceAssociationsResponse
+  where
+  rnf DescribeTrunkInterfaceAssociationsResponse' {..} =
+    Prelude.rnf interfaceAssociations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVerifiedAccessEndpoints.hs b/gen/Amazonka/EC2/DescribeVerifiedAccessEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVerifiedAccessEndpoints.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVerifiedAccessEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describe Amazon Web Services Verified Access endpoints.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVerifiedAccessEndpoints
+  ( -- * Creating a Request
+    DescribeVerifiedAccessEndpoints (..),
+    newDescribeVerifiedAccessEndpoints,
+
+    -- * Request Lenses
+    describeVerifiedAccessEndpoints_dryRun,
+    describeVerifiedAccessEndpoints_filters,
+    describeVerifiedAccessEndpoints_maxResults,
+    describeVerifiedAccessEndpoints_nextToken,
+    describeVerifiedAccessEndpoints_verifiedAccessEndpointIds,
+    describeVerifiedAccessEndpoints_verifiedAccessGroupId,
+    describeVerifiedAccessEndpoints_verifiedAccessInstanceId,
+
+    -- * Destructuring the Response
+    DescribeVerifiedAccessEndpointsResponse (..),
+    newDescribeVerifiedAccessEndpointsResponse,
+
+    -- * Response Lenses
+    describeVerifiedAccessEndpointsResponse_nextToken,
+    describeVerifiedAccessEndpointsResponse_verifiedAccessEndpoints,
+    describeVerifiedAccessEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVerifiedAccessEndpoints' smart constructor.
+data DescribeVerifiedAccessEndpoints = DescribeVerifiedAccessEndpoints'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpointIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVerifiedAccessEndpoints_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVerifiedAccessEndpoints_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- 'maxResults', 'describeVerifiedAccessEndpoints_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVerifiedAccessEndpoints_nextToken' - The token for the next page of results.
+--
+-- 'verifiedAccessEndpointIds', 'describeVerifiedAccessEndpoints_verifiedAccessEndpointIds' - The ID of the Amazon Web Services Verified Access endpoint.
+--
+-- 'verifiedAccessGroupId', 'describeVerifiedAccessEndpoints_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+--
+-- 'verifiedAccessInstanceId', 'describeVerifiedAccessEndpoints_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newDescribeVerifiedAccessEndpoints ::
+  DescribeVerifiedAccessEndpoints
+newDescribeVerifiedAccessEndpoints =
+  DescribeVerifiedAccessEndpoints'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      verifiedAccessEndpointIds =
+        Prelude.Nothing,
+      verifiedAccessGroupId = Prelude.Nothing,
+      verifiedAccessInstanceId = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVerifiedAccessEndpoints_dryRun :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe Prelude.Bool)
+describeVerifiedAccessEndpoints_dryRun = Lens.lens (\DescribeVerifiedAccessEndpoints' {dryRun} -> dryRun) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {dryRun = a} :: DescribeVerifiedAccessEndpoints)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+describeVerifiedAccessEndpoints_filters :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe [Filter])
+describeVerifiedAccessEndpoints_filters = Lens.lens (\DescribeVerifiedAccessEndpoints' {filters} -> filters) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {filters = a} :: DescribeVerifiedAccessEndpoints) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVerifiedAccessEndpoints_maxResults :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe Prelude.Natural)
+describeVerifiedAccessEndpoints_maxResults = Lens.lens (\DescribeVerifiedAccessEndpoints' {maxResults} -> maxResults) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {maxResults = a} :: DescribeVerifiedAccessEndpoints)
+
+-- | The token for the next page of results.
+describeVerifiedAccessEndpoints_nextToken :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessEndpoints_nextToken = Lens.lens (\DescribeVerifiedAccessEndpoints' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {nextToken = a} :: DescribeVerifiedAccessEndpoints)
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+describeVerifiedAccessEndpoints_verifiedAccessEndpointIds :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe [Prelude.Text])
+describeVerifiedAccessEndpoints_verifiedAccessEndpointIds = Lens.lens (\DescribeVerifiedAccessEndpoints' {verifiedAccessEndpointIds} -> verifiedAccessEndpointIds) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {verifiedAccessEndpointIds = a} :: DescribeVerifiedAccessEndpoints) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services Verified Access group.
+describeVerifiedAccessEndpoints_verifiedAccessGroupId :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessEndpoints_verifiedAccessGroupId = Lens.lens (\DescribeVerifiedAccessEndpoints' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {verifiedAccessGroupId = a} :: DescribeVerifiedAccessEndpoints)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+describeVerifiedAccessEndpoints_verifiedAccessInstanceId :: Lens.Lens' DescribeVerifiedAccessEndpoints (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessEndpoints_verifiedAccessInstanceId = Lens.lens (\DescribeVerifiedAccessEndpoints' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@DescribeVerifiedAccessEndpoints' {} a -> s {verifiedAccessInstanceId = a} :: DescribeVerifiedAccessEndpoints)
+
+instance
+  Core.AWSPager
+    DescribeVerifiedAccessEndpoints
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessEndpointsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessEndpointsResponse_verifiedAccessEndpoints
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVerifiedAccessEndpoints_nextToken
+          Lens..~ rs
+          Lens.^? describeVerifiedAccessEndpointsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVerifiedAccessEndpoints
+  where
+  type
+    AWSResponse DescribeVerifiedAccessEndpoints =
+      DescribeVerifiedAccessEndpointsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVerifiedAccessEndpointsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "verifiedAccessEndpointSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVerifiedAccessEndpoints
+  where
+  hashWithSalt
+    _salt
+    DescribeVerifiedAccessEndpoints' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` verifiedAccessEndpointIds
+        `Prelude.hashWithSalt` verifiedAccessGroupId
+        `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessEndpoints
+  where
+  rnf DescribeVerifiedAccessEndpoints' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpointIds
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+
+instance
+  Data.ToHeaders
+    DescribeVerifiedAccessEndpoints
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVerifiedAccessEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVerifiedAccessEndpoints where
+  toQuery DescribeVerifiedAccessEndpoints' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVerifiedAccessEndpoints" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "VerifiedAccessEndpointId"
+              Prelude.<$> verifiedAccessEndpointIds
+          ),
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId,
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId
+      ]
+
+-- | /See:/ 'newDescribeVerifiedAccessEndpointsResponse' smart constructor.
+data DescribeVerifiedAccessEndpointsResponse = DescribeVerifiedAccessEndpointsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpoints :: Prelude.Maybe [VerifiedAccessEndpoint],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVerifiedAccessEndpointsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'verifiedAccessEndpoints', 'describeVerifiedAccessEndpointsResponse_verifiedAccessEndpoints' - The ID of the Amazon Web Services Verified Access endpoint.
+--
+-- 'httpStatus', 'describeVerifiedAccessEndpointsResponse_httpStatus' - The response's http status code.
+newDescribeVerifiedAccessEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVerifiedAccessEndpointsResponse
+newDescribeVerifiedAccessEndpointsResponse
+  pHttpStatus_ =
+    DescribeVerifiedAccessEndpointsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        verifiedAccessEndpoints =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVerifiedAccessEndpointsResponse_nextToken :: Lens.Lens' DescribeVerifiedAccessEndpointsResponse (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessEndpointsResponse_nextToken = Lens.lens (\DescribeVerifiedAccessEndpointsResponse' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessEndpointsResponse' {} a -> s {nextToken = a} :: DescribeVerifiedAccessEndpointsResponse)
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+describeVerifiedAccessEndpointsResponse_verifiedAccessEndpoints :: Lens.Lens' DescribeVerifiedAccessEndpointsResponse (Prelude.Maybe [VerifiedAccessEndpoint])
+describeVerifiedAccessEndpointsResponse_verifiedAccessEndpoints = Lens.lens (\DescribeVerifiedAccessEndpointsResponse' {verifiedAccessEndpoints} -> verifiedAccessEndpoints) (\s@DescribeVerifiedAccessEndpointsResponse' {} a -> s {verifiedAccessEndpoints = a} :: DescribeVerifiedAccessEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVerifiedAccessEndpointsResponse_httpStatus :: Lens.Lens' DescribeVerifiedAccessEndpointsResponse Prelude.Int
+describeVerifiedAccessEndpointsResponse_httpStatus = Lens.lens (\DescribeVerifiedAccessEndpointsResponse' {httpStatus} -> httpStatus) (\s@DescribeVerifiedAccessEndpointsResponse' {} a -> s {httpStatus = a} :: DescribeVerifiedAccessEndpointsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessEndpointsResponse
+  where
+  rnf DescribeVerifiedAccessEndpointsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpoints
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVerifiedAccessGroups.hs b/gen/Amazonka/EC2/DescribeVerifiedAccessGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVerifiedAccessGroups.hs
@@ -0,0 +1,296 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVerifiedAccessGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describe details of existing Verified Access groups.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVerifiedAccessGroups
+  ( -- * Creating a Request
+    DescribeVerifiedAccessGroups (..),
+    newDescribeVerifiedAccessGroups,
+
+    -- * Request Lenses
+    describeVerifiedAccessGroups_dryRun,
+    describeVerifiedAccessGroups_filters,
+    describeVerifiedAccessGroups_maxResults,
+    describeVerifiedAccessGroups_nextToken,
+    describeVerifiedAccessGroups_verifiedAccessGroupIds,
+    describeVerifiedAccessGroups_verifiedAccessInstanceId,
+
+    -- * Destructuring the Response
+    DescribeVerifiedAccessGroupsResponse (..),
+    newDescribeVerifiedAccessGroupsResponse,
+
+    -- * Response Lenses
+    describeVerifiedAccessGroupsResponse_nextToken,
+    describeVerifiedAccessGroupsResponse_verifiedAccessGroups,
+    describeVerifiedAccessGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVerifiedAccessGroups' smart constructor.
+data DescribeVerifiedAccessGroups = DescribeVerifiedAccessGroups'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access groups.
+    verifiedAccessGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVerifiedAccessGroups_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVerifiedAccessGroups_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- 'maxResults', 'describeVerifiedAccessGroups_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVerifiedAccessGroups_nextToken' - The token for the next page of results.
+--
+-- 'verifiedAccessGroupIds', 'describeVerifiedAccessGroups_verifiedAccessGroupIds' - The ID of the Amazon Web Services Verified Access groups.
+--
+-- 'verifiedAccessInstanceId', 'describeVerifiedAccessGroups_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newDescribeVerifiedAccessGroups ::
+  DescribeVerifiedAccessGroups
+newDescribeVerifiedAccessGroups =
+  DescribeVerifiedAccessGroups'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      verifiedAccessGroupIds = Prelude.Nothing,
+      verifiedAccessInstanceId = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVerifiedAccessGroups_dryRun :: Lens.Lens' DescribeVerifiedAccessGroups (Prelude.Maybe Prelude.Bool)
+describeVerifiedAccessGroups_dryRun = Lens.lens (\DescribeVerifiedAccessGroups' {dryRun} -> dryRun) (\s@DescribeVerifiedAccessGroups' {} a -> s {dryRun = a} :: DescribeVerifiedAccessGroups)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+describeVerifiedAccessGroups_filters :: Lens.Lens' DescribeVerifiedAccessGroups (Prelude.Maybe [Filter])
+describeVerifiedAccessGroups_filters = Lens.lens (\DescribeVerifiedAccessGroups' {filters} -> filters) (\s@DescribeVerifiedAccessGroups' {} a -> s {filters = a} :: DescribeVerifiedAccessGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVerifiedAccessGroups_maxResults :: Lens.Lens' DescribeVerifiedAccessGroups (Prelude.Maybe Prelude.Natural)
+describeVerifiedAccessGroups_maxResults = Lens.lens (\DescribeVerifiedAccessGroups' {maxResults} -> maxResults) (\s@DescribeVerifiedAccessGroups' {} a -> s {maxResults = a} :: DescribeVerifiedAccessGroups)
+
+-- | The token for the next page of results.
+describeVerifiedAccessGroups_nextToken :: Lens.Lens' DescribeVerifiedAccessGroups (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessGroups_nextToken = Lens.lens (\DescribeVerifiedAccessGroups' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessGroups' {} a -> s {nextToken = a} :: DescribeVerifiedAccessGroups)
+
+-- | The ID of the Amazon Web Services Verified Access groups.
+describeVerifiedAccessGroups_verifiedAccessGroupIds :: Lens.Lens' DescribeVerifiedAccessGroups (Prelude.Maybe [Prelude.Text])
+describeVerifiedAccessGroups_verifiedAccessGroupIds = Lens.lens (\DescribeVerifiedAccessGroups' {verifiedAccessGroupIds} -> verifiedAccessGroupIds) (\s@DescribeVerifiedAccessGroups' {} a -> s {verifiedAccessGroupIds = a} :: DescribeVerifiedAccessGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+describeVerifiedAccessGroups_verifiedAccessInstanceId :: Lens.Lens' DescribeVerifiedAccessGroups (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessGroups_verifiedAccessInstanceId = Lens.lens (\DescribeVerifiedAccessGroups' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@DescribeVerifiedAccessGroups' {} a -> s {verifiedAccessInstanceId = a} :: DescribeVerifiedAccessGroups)
+
+instance Core.AWSPager DescribeVerifiedAccessGroups where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessGroupsResponse_verifiedAccessGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVerifiedAccessGroups_nextToken
+          Lens..~ rs
+          Lens.^? describeVerifiedAccessGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVerifiedAccessGroups where
+  type
+    AWSResponse DescribeVerifiedAccessGroups =
+      DescribeVerifiedAccessGroupsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVerifiedAccessGroupsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "verifiedAccessGroupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVerifiedAccessGroups
+  where
+  hashWithSalt _salt DescribeVerifiedAccessGroups' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` verifiedAccessGroupIds
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance Prelude.NFData DescribeVerifiedAccessGroups where
+  rnf DescribeVerifiedAccessGroups' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupIds
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+
+instance Data.ToHeaders DescribeVerifiedAccessGroups where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVerifiedAccessGroups where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVerifiedAccessGroups where
+  toQuery DescribeVerifiedAccessGroups' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVerifiedAccessGroups" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "VerifiedAccessGroupId"
+              Prelude.<$> verifiedAccessGroupIds
+          ),
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId
+      ]
+
+-- | /See:/ 'newDescribeVerifiedAccessGroupsResponse' smart constructor.
+data DescribeVerifiedAccessGroupsResponse = DescribeVerifiedAccessGroupsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Verified Access group.
+    verifiedAccessGroups :: Prelude.Maybe [VerifiedAccessGroup],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVerifiedAccessGroupsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'verifiedAccessGroups', 'describeVerifiedAccessGroupsResponse_verifiedAccessGroups' - The ID of the Verified Access group.
+--
+-- 'httpStatus', 'describeVerifiedAccessGroupsResponse_httpStatus' - The response's http status code.
+newDescribeVerifiedAccessGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVerifiedAccessGroupsResponse
+newDescribeVerifiedAccessGroupsResponse pHttpStatus_ =
+  DescribeVerifiedAccessGroupsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      verifiedAccessGroups =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVerifiedAccessGroupsResponse_nextToken :: Lens.Lens' DescribeVerifiedAccessGroupsResponse (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessGroupsResponse_nextToken = Lens.lens (\DescribeVerifiedAccessGroupsResponse' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessGroupsResponse' {} a -> s {nextToken = a} :: DescribeVerifiedAccessGroupsResponse)
+
+-- | The ID of the Verified Access group.
+describeVerifiedAccessGroupsResponse_verifiedAccessGroups :: Lens.Lens' DescribeVerifiedAccessGroupsResponse (Prelude.Maybe [VerifiedAccessGroup])
+describeVerifiedAccessGroupsResponse_verifiedAccessGroups = Lens.lens (\DescribeVerifiedAccessGroupsResponse' {verifiedAccessGroups} -> verifiedAccessGroups) (\s@DescribeVerifiedAccessGroupsResponse' {} a -> s {verifiedAccessGroups = a} :: DescribeVerifiedAccessGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVerifiedAccessGroupsResponse_httpStatus :: Lens.Lens' DescribeVerifiedAccessGroupsResponse Prelude.Int
+describeVerifiedAccessGroupsResponse_httpStatus = Lens.lens (\DescribeVerifiedAccessGroupsResponse' {httpStatus} -> httpStatus) (\s@DescribeVerifiedAccessGroupsResponse' {} a -> s {httpStatus = a} :: DescribeVerifiedAccessGroupsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessGroupsResponse
+  where
+  rnf DescribeVerifiedAccessGroupsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessGroups
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVerifiedAccessInstanceLoggingConfigurations.hs b/gen/Amazonka/EC2/DescribeVerifiedAccessInstanceLoggingConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVerifiedAccessInstanceLoggingConfigurations.hs
@@ -0,0 +1,316 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVerifiedAccessInstanceLoggingConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the current logging configuration for the Amazon Web Services
+-- Verified Access instances.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVerifiedAccessInstanceLoggingConfigurations
+  ( -- * Creating a Request
+    DescribeVerifiedAccessInstanceLoggingConfigurations (..),
+    newDescribeVerifiedAccessInstanceLoggingConfigurations,
+
+    -- * Request Lenses
+    describeVerifiedAccessInstanceLoggingConfigurations_dryRun,
+    describeVerifiedAccessInstanceLoggingConfigurations_filters,
+    describeVerifiedAccessInstanceLoggingConfigurations_maxResults,
+    describeVerifiedAccessInstanceLoggingConfigurations_nextToken,
+    describeVerifiedAccessInstanceLoggingConfigurations_verifiedAccessInstanceIds,
+
+    -- * Destructuring the Response
+    DescribeVerifiedAccessInstanceLoggingConfigurationsResponse (..),
+    newDescribeVerifiedAccessInstanceLoggingConfigurationsResponse,
+
+    -- * Response Lenses
+    describeVerifiedAccessInstanceLoggingConfigurationsResponse_loggingConfigurations,
+    describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken,
+    describeVerifiedAccessInstanceLoggingConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVerifiedAccessInstanceLoggingConfigurations' smart constructor.
+data DescribeVerifiedAccessInstanceLoggingConfigurations = DescribeVerifiedAccessInstanceLoggingConfigurations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Amazon Web Services Verified Access instances.
+    verifiedAccessInstanceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessInstanceLoggingConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVerifiedAccessInstanceLoggingConfigurations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVerifiedAccessInstanceLoggingConfigurations_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- 'maxResults', 'describeVerifiedAccessInstanceLoggingConfigurations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVerifiedAccessInstanceLoggingConfigurations_nextToken' - The token for the next page of results.
+--
+-- 'verifiedAccessInstanceIds', 'describeVerifiedAccessInstanceLoggingConfigurations_verifiedAccessInstanceIds' - The IDs of the Amazon Web Services Verified Access instances.
+newDescribeVerifiedAccessInstanceLoggingConfigurations ::
+  DescribeVerifiedAccessInstanceLoggingConfigurations
+newDescribeVerifiedAccessInstanceLoggingConfigurations =
+  DescribeVerifiedAccessInstanceLoggingConfigurations'
+    { dryRun =
+        Prelude.Nothing,
+      filters =
+        Prelude.Nothing,
+      maxResults =
+        Prelude.Nothing,
+      nextToken =
+        Prelude.Nothing,
+      verifiedAccessInstanceIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVerifiedAccessInstanceLoggingConfigurations_dryRun :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurations (Prelude.Maybe Prelude.Bool)
+describeVerifiedAccessInstanceLoggingConfigurations_dryRun = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurations' {dryRun} -> dryRun) (\s@DescribeVerifiedAccessInstanceLoggingConfigurations' {} a -> s {dryRun = a} :: DescribeVerifiedAccessInstanceLoggingConfigurations)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+describeVerifiedAccessInstanceLoggingConfigurations_filters :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurations (Prelude.Maybe [Filter])
+describeVerifiedAccessInstanceLoggingConfigurations_filters = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurations' {filters} -> filters) (\s@DescribeVerifiedAccessInstanceLoggingConfigurations' {} a -> s {filters = a} :: DescribeVerifiedAccessInstanceLoggingConfigurations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVerifiedAccessInstanceLoggingConfigurations_maxResults :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurations (Prelude.Maybe Prelude.Natural)
+describeVerifiedAccessInstanceLoggingConfigurations_maxResults = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurations' {maxResults} -> maxResults) (\s@DescribeVerifiedAccessInstanceLoggingConfigurations' {} a -> s {maxResults = a} :: DescribeVerifiedAccessInstanceLoggingConfigurations)
+
+-- | The token for the next page of results.
+describeVerifiedAccessInstanceLoggingConfigurations_nextToken :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurations (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessInstanceLoggingConfigurations_nextToken = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurations' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessInstanceLoggingConfigurations' {} a -> s {nextToken = a} :: DescribeVerifiedAccessInstanceLoggingConfigurations)
+
+-- | The IDs of the Amazon Web Services Verified Access instances.
+describeVerifiedAccessInstanceLoggingConfigurations_verifiedAccessInstanceIds :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurations (Prelude.Maybe [Prelude.Text])
+describeVerifiedAccessInstanceLoggingConfigurations_verifiedAccessInstanceIds = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurations' {verifiedAccessInstanceIds} -> verifiedAccessInstanceIds) (\s@DescribeVerifiedAccessInstanceLoggingConfigurations' {} a -> s {verifiedAccessInstanceIds = a} :: DescribeVerifiedAccessInstanceLoggingConfigurations) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessInstanceLoggingConfigurationsResponse_loggingConfigurations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVerifiedAccessInstanceLoggingConfigurations_nextToken
+          Lens..~ rs
+          Lens.^? describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  type
+    AWSResponse
+      DescribeVerifiedAccessInstanceLoggingConfigurations =
+      DescribeVerifiedAccessInstanceLoggingConfigurationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVerifiedAccessInstanceLoggingConfigurationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "loggingConfigurationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  hashWithSalt
+    _salt
+    DescribeVerifiedAccessInstanceLoggingConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` verifiedAccessInstanceIds
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  rnf
+    DescribeVerifiedAccessInstanceLoggingConfigurations' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf filters
+        `Prelude.seq` Prelude.rnf maxResults
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf verifiedAccessInstanceIds
+
+instance
+  Data.ToHeaders
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeVerifiedAccessInstanceLoggingConfigurations
+  where
+  toQuery
+    DescribeVerifiedAccessInstanceLoggingConfigurations' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeVerifiedAccessInstanceLoggingConfigurations" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken,
+          Data.toQuery
+            ( Data.toQueryList "VerifiedAccessInstanceId"
+                Prelude.<$> verifiedAccessInstanceIds
+            )
+        ]
+
+-- | /See:/ 'newDescribeVerifiedAccessInstanceLoggingConfigurationsResponse' smart constructor.
+data DescribeVerifiedAccessInstanceLoggingConfigurationsResponse = DescribeVerifiedAccessInstanceLoggingConfigurationsResponse'
+  { -- | The current logging configuration for the Amazon Web Services Verified
+    -- Access instances.
+    loggingConfigurations :: Prelude.Maybe [VerifiedAccessInstanceLoggingConfiguration],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'loggingConfigurations', 'describeVerifiedAccessInstanceLoggingConfigurationsResponse_loggingConfigurations' - The current logging configuration for the Amazon Web Services Verified
+-- Access instances.
+--
+-- 'nextToken', 'describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeVerifiedAccessInstanceLoggingConfigurationsResponse_httpStatus' - The response's http status code.
+newDescribeVerifiedAccessInstanceLoggingConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVerifiedAccessInstanceLoggingConfigurationsResponse
+newDescribeVerifiedAccessInstanceLoggingConfigurationsResponse
+  pHttpStatus_ =
+    DescribeVerifiedAccessInstanceLoggingConfigurationsResponse'
+      { loggingConfigurations =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The current logging configuration for the Amazon Web Services Verified
+-- Access instances.
+describeVerifiedAccessInstanceLoggingConfigurationsResponse_loggingConfigurations :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurationsResponse (Prelude.Maybe [VerifiedAccessInstanceLoggingConfiguration])
+describeVerifiedAccessInstanceLoggingConfigurationsResponse_loggingConfigurations = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {loggingConfigurations} -> loggingConfigurations) (\s@DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {} a -> s {loggingConfigurations = a} :: DescribeVerifiedAccessInstanceLoggingConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurationsResponse (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {} a -> s {nextToken = a} :: DescribeVerifiedAccessInstanceLoggingConfigurationsResponse)
+
+-- | The response's http status code.
+describeVerifiedAccessInstanceLoggingConfigurationsResponse_httpStatus :: Lens.Lens' DescribeVerifiedAccessInstanceLoggingConfigurationsResponse Prelude.Int
+describeVerifiedAccessInstanceLoggingConfigurationsResponse_httpStatus = Lens.lens (\DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {httpStatus} -> httpStatus) (\s@DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {} a -> s {httpStatus = a} :: DescribeVerifiedAccessInstanceLoggingConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessInstanceLoggingConfigurationsResponse
+  where
+  rnf
+    DescribeVerifiedAccessInstanceLoggingConfigurationsResponse' {..} =
+      Prelude.rnf loggingConfigurations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVerifiedAccessInstances.hs b/gen/Amazonka/EC2/DescribeVerifiedAccessInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVerifiedAccessInstances.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVerifiedAccessInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describe Verified Access instances.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVerifiedAccessInstances
+  ( -- * Creating a Request
+    DescribeVerifiedAccessInstances (..),
+    newDescribeVerifiedAccessInstances,
+
+    -- * Request Lenses
+    describeVerifiedAccessInstances_dryRun,
+    describeVerifiedAccessInstances_filters,
+    describeVerifiedAccessInstances_maxResults,
+    describeVerifiedAccessInstances_nextToken,
+    describeVerifiedAccessInstances_verifiedAccessInstanceIds,
+
+    -- * Destructuring the Response
+    DescribeVerifiedAccessInstancesResponse (..),
+    newDescribeVerifiedAccessInstancesResponse,
+
+    -- * Response Lenses
+    describeVerifiedAccessInstancesResponse_nextToken,
+    describeVerifiedAccessInstancesResponse_verifiedAccessInstances,
+    describeVerifiedAccessInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVerifiedAccessInstances' smart constructor.
+data DescribeVerifiedAccessInstances = DescribeVerifiedAccessInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Amazon Web Services Verified Access instances.
+    verifiedAccessInstanceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVerifiedAccessInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVerifiedAccessInstances_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- 'maxResults', 'describeVerifiedAccessInstances_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVerifiedAccessInstances_nextToken' - The token for the next page of results.
+--
+-- 'verifiedAccessInstanceIds', 'describeVerifiedAccessInstances_verifiedAccessInstanceIds' - The IDs of the Amazon Web Services Verified Access instances.
+newDescribeVerifiedAccessInstances ::
+  DescribeVerifiedAccessInstances
+newDescribeVerifiedAccessInstances =
+  DescribeVerifiedAccessInstances'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      verifiedAccessInstanceIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVerifiedAccessInstances_dryRun :: Lens.Lens' DescribeVerifiedAccessInstances (Prelude.Maybe Prelude.Bool)
+describeVerifiedAccessInstances_dryRun = Lens.lens (\DescribeVerifiedAccessInstances' {dryRun} -> dryRun) (\s@DescribeVerifiedAccessInstances' {} a -> s {dryRun = a} :: DescribeVerifiedAccessInstances)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+describeVerifiedAccessInstances_filters :: Lens.Lens' DescribeVerifiedAccessInstances (Prelude.Maybe [Filter])
+describeVerifiedAccessInstances_filters = Lens.lens (\DescribeVerifiedAccessInstances' {filters} -> filters) (\s@DescribeVerifiedAccessInstances' {} a -> s {filters = a} :: DescribeVerifiedAccessInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVerifiedAccessInstances_maxResults :: Lens.Lens' DescribeVerifiedAccessInstances (Prelude.Maybe Prelude.Natural)
+describeVerifiedAccessInstances_maxResults = Lens.lens (\DescribeVerifiedAccessInstances' {maxResults} -> maxResults) (\s@DescribeVerifiedAccessInstances' {} a -> s {maxResults = a} :: DescribeVerifiedAccessInstances)
+
+-- | The token for the next page of results.
+describeVerifiedAccessInstances_nextToken :: Lens.Lens' DescribeVerifiedAccessInstances (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessInstances_nextToken = Lens.lens (\DescribeVerifiedAccessInstances' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessInstances' {} a -> s {nextToken = a} :: DescribeVerifiedAccessInstances)
+
+-- | The IDs of the Amazon Web Services Verified Access instances.
+describeVerifiedAccessInstances_verifiedAccessInstanceIds :: Lens.Lens' DescribeVerifiedAccessInstances (Prelude.Maybe [Prelude.Text])
+describeVerifiedAccessInstances_verifiedAccessInstanceIds = Lens.lens (\DescribeVerifiedAccessInstances' {verifiedAccessInstanceIds} -> verifiedAccessInstanceIds) (\s@DescribeVerifiedAccessInstances' {} a -> s {verifiedAccessInstanceIds = a} :: DescribeVerifiedAccessInstances) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeVerifiedAccessInstances
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessInstancesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessInstancesResponse_verifiedAccessInstances
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVerifiedAccessInstances_nextToken
+          Lens..~ rs
+          Lens.^? describeVerifiedAccessInstancesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVerifiedAccessInstances
+  where
+  type
+    AWSResponse DescribeVerifiedAccessInstances =
+      DescribeVerifiedAccessInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVerifiedAccessInstancesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "verifiedAccessInstanceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVerifiedAccessInstances
+  where
+  hashWithSalt
+    _salt
+    DescribeVerifiedAccessInstances' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` verifiedAccessInstanceIds
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessInstances
+  where
+  rnf DescribeVerifiedAccessInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceIds
+
+instance
+  Data.ToHeaders
+    DescribeVerifiedAccessInstances
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVerifiedAccessInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVerifiedAccessInstances where
+  toQuery DescribeVerifiedAccessInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVerifiedAccessInstances" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "VerifiedAccessInstanceId"
+              Prelude.<$> verifiedAccessInstanceIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeVerifiedAccessInstancesResponse' smart constructor.
+data DescribeVerifiedAccessInstancesResponse = DescribeVerifiedAccessInstancesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Amazon Web Services Verified Access instances.
+    verifiedAccessInstances :: Prelude.Maybe [VerifiedAccessInstance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVerifiedAccessInstancesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'verifiedAccessInstances', 'describeVerifiedAccessInstancesResponse_verifiedAccessInstances' - The IDs of the Amazon Web Services Verified Access instances.
+--
+-- 'httpStatus', 'describeVerifiedAccessInstancesResponse_httpStatus' - The response's http status code.
+newDescribeVerifiedAccessInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVerifiedAccessInstancesResponse
+newDescribeVerifiedAccessInstancesResponse
+  pHttpStatus_ =
+    DescribeVerifiedAccessInstancesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        verifiedAccessInstances =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVerifiedAccessInstancesResponse_nextToken :: Lens.Lens' DescribeVerifiedAccessInstancesResponse (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessInstancesResponse_nextToken = Lens.lens (\DescribeVerifiedAccessInstancesResponse' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessInstancesResponse' {} a -> s {nextToken = a} :: DescribeVerifiedAccessInstancesResponse)
+
+-- | The IDs of the Amazon Web Services Verified Access instances.
+describeVerifiedAccessInstancesResponse_verifiedAccessInstances :: Lens.Lens' DescribeVerifiedAccessInstancesResponse (Prelude.Maybe [VerifiedAccessInstance])
+describeVerifiedAccessInstancesResponse_verifiedAccessInstances = Lens.lens (\DescribeVerifiedAccessInstancesResponse' {verifiedAccessInstances} -> verifiedAccessInstances) (\s@DescribeVerifiedAccessInstancesResponse' {} a -> s {verifiedAccessInstances = a} :: DescribeVerifiedAccessInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVerifiedAccessInstancesResponse_httpStatus :: Lens.Lens' DescribeVerifiedAccessInstancesResponse Prelude.Int
+describeVerifiedAccessInstancesResponse_httpStatus = Lens.lens (\DescribeVerifiedAccessInstancesResponse' {httpStatus} -> httpStatus) (\s@DescribeVerifiedAccessInstancesResponse' {} a -> s {httpStatus = a} :: DescribeVerifiedAccessInstancesResponse)
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessInstancesResponse
+  where
+  rnf DescribeVerifiedAccessInstancesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessInstances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVerifiedAccessTrustProviders.hs b/gen/Amazonka/EC2/DescribeVerifiedAccessTrustProviders.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVerifiedAccessTrustProviders.hs
@@ -0,0 +1,304 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVerifiedAccessTrustProviders
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describe details of existing Verified Access trust providers.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVerifiedAccessTrustProviders
+  ( -- * Creating a Request
+    DescribeVerifiedAccessTrustProviders (..),
+    newDescribeVerifiedAccessTrustProviders,
+
+    -- * Request Lenses
+    describeVerifiedAccessTrustProviders_dryRun,
+    describeVerifiedAccessTrustProviders_filters,
+    describeVerifiedAccessTrustProviders_maxResults,
+    describeVerifiedAccessTrustProviders_nextToken,
+    describeVerifiedAccessTrustProviders_verifiedAccessTrustProviderIds,
+
+    -- * Destructuring the Response
+    DescribeVerifiedAccessTrustProvidersResponse (..),
+    newDescribeVerifiedAccessTrustProvidersResponse,
+
+    -- * Response Lenses
+    describeVerifiedAccessTrustProvidersResponse_nextToken,
+    describeVerifiedAccessTrustProvidersResponse_verifiedAccessTrustProviders,
+    describeVerifiedAccessTrustProvidersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVerifiedAccessTrustProviders' smart constructor.
+data DescribeVerifiedAccessTrustProviders = DescribeVerifiedAccessTrustProviders'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. Filter names and values are case-sensitive.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Amazon Web Services Verified Access trust providers.
+    verifiedAccessTrustProviderIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessTrustProviders' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVerifiedAccessTrustProviders_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVerifiedAccessTrustProviders_filters' - One or more filters. Filter names and values are case-sensitive.
+--
+-- 'maxResults', 'describeVerifiedAccessTrustProviders_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVerifiedAccessTrustProviders_nextToken' - The token for the next page of results.
+--
+-- 'verifiedAccessTrustProviderIds', 'describeVerifiedAccessTrustProviders_verifiedAccessTrustProviderIds' - The IDs of the Amazon Web Services Verified Access trust providers.
+newDescribeVerifiedAccessTrustProviders ::
+  DescribeVerifiedAccessTrustProviders
+newDescribeVerifiedAccessTrustProviders =
+  DescribeVerifiedAccessTrustProviders'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      verifiedAccessTrustProviderIds =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVerifiedAccessTrustProviders_dryRun :: Lens.Lens' DescribeVerifiedAccessTrustProviders (Prelude.Maybe Prelude.Bool)
+describeVerifiedAccessTrustProviders_dryRun = Lens.lens (\DescribeVerifiedAccessTrustProviders' {dryRun} -> dryRun) (\s@DescribeVerifiedAccessTrustProviders' {} a -> s {dryRun = a} :: DescribeVerifiedAccessTrustProviders)
+
+-- | One or more filters. Filter names and values are case-sensitive.
+describeVerifiedAccessTrustProviders_filters :: Lens.Lens' DescribeVerifiedAccessTrustProviders (Prelude.Maybe [Filter])
+describeVerifiedAccessTrustProviders_filters = Lens.lens (\DescribeVerifiedAccessTrustProviders' {filters} -> filters) (\s@DescribeVerifiedAccessTrustProviders' {} a -> s {filters = a} :: DescribeVerifiedAccessTrustProviders) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVerifiedAccessTrustProviders_maxResults :: Lens.Lens' DescribeVerifiedAccessTrustProviders (Prelude.Maybe Prelude.Natural)
+describeVerifiedAccessTrustProviders_maxResults = Lens.lens (\DescribeVerifiedAccessTrustProviders' {maxResults} -> maxResults) (\s@DescribeVerifiedAccessTrustProviders' {} a -> s {maxResults = a} :: DescribeVerifiedAccessTrustProviders)
+
+-- | The token for the next page of results.
+describeVerifiedAccessTrustProviders_nextToken :: Lens.Lens' DescribeVerifiedAccessTrustProviders (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessTrustProviders_nextToken = Lens.lens (\DescribeVerifiedAccessTrustProviders' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessTrustProviders' {} a -> s {nextToken = a} :: DescribeVerifiedAccessTrustProviders)
+
+-- | The IDs of the Amazon Web Services Verified Access trust providers.
+describeVerifiedAccessTrustProviders_verifiedAccessTrustProviderIds :: Lens.Lens' DescribeVerifiedAccessTrustProviders (Prelude.Maybe [Prelude.Text])
+describeVerifiedAccessTrustProviders_verifiedAccessTrustProviderIds = Lens.lens (\DescribeVerifiedAccessTrustProviders' {verifiedAccessTrustProviderIds} -> verifiedAccessTrustProviderIds) (\s@DescribeVerifiedAccessTrustProviders' {} a -> s {verifiedAccessTrustProviderIds = a} :: DescribeVerifiedAccessTrustProviders) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeVerifiedAccessTrustProviders
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessTrustProvidersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVerifiedAccessTrustProvidersResponse_verifiedAccessTrustProviders
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVerifiedAccessTrustProviders_nextToken
+          Lens..~ rs
+          Lens.^? describeVerifiedAccessTrustProvidersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVerifiedAccessTrustProviders
+  where
+  type
+    AWSResponse DescribeVerifiedAccessTrustProviders =
+      DescribeVerifiedAccessTrustProvidersResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVerifiedAccessTrustProvidersResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "verifiedAccessTrustProviderSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVerifiedAccessTrustProviders
+  where
+  hashWithSalt
+    _salt
+    DescribeVerifiedAccessTrustProviders' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` verifiedAccessTrustProviderIds
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessTrustProviders
+  where
+  rnf DescribeVerifiedAccessTrustProviders' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderIds
+
+instance
+  Data.ToHeaders
+    DescribeVerifiedAccessTrustProviders
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeVerifiedAccessTrustProviders
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeVerifiedAccessTrustProviders
+  where
+  toQuery DescribeVerifiedAccessTrustProviders' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVerifiedAccessTrustProviders" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "VerifiedAccessTrustProviderId"
+              Prelude.<$> verifiedAccessTrustProviderIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeVerifiedAccessTrustProvidersResponse' smart constructor.
+data DescribeVerifiedAccessTrustProvidersResponse = DescribeVerifiedAccessTrustProvidersResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Amazon Web Services Verified Access trust providers.
+    verifiedAccessTrustProviders :: Prelude.Maybe [VerifiedAccessTrustProvider],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVerifiedAccessTrustProvidersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVerifiedAccessTrustProvidersResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'verifiedAccessTrustProviders', 'describeVerifiedAccessTrustProvidersResponse_verifiedAccessTrustProviders' - The IDs of the Amazon Web Services Verified Access trust providers.
+--
+-- 'httpStatus', 'describeVerifiedAccessTrustProvidersResponse_httpStatus' - The response's http status code.
+newDescribeVerifiedAccessTrustProvidersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVerifiedAccessTrustProvidersResponse
+newDescribeVerifiedAccessTrustProvidersResponse
+  pHttpStatus_ =
+    DescribeVerifiedAccessTrustProvidersResponse'
+      { nextToken =
+          Prelude.Nothing,
+        verifiedAccessTrustProviders =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVerifiedAccessTrustProvidersResponse_nextToken :: Lens.Lens' DescribeVerifiedAccessTrustProvidersResponse (Prelude.Maybe Prelude.Text)
+describeVerifiedAccessTrustProvidersResponse_nextToken = Lens.lens (\DescribeVerifiedAccessTrustProvidersResponse' {nextToken} -> nextToken) (\s@DescribeVerifiedAccessTrustProvidersResponse' {} a -> s {nextToken = a} :: DescribeVerifiedAccessTrustProvidersResponse)
+
+-- | The IDs of the Amazon Web Services Verified Access trust providers.
+describeVerifiedAccessTrustProvidersResponse_verifiedAccessTrustProviders :: Lens.Lens' DescribeVerifiedAccessTrustProvidersResponse (Prelude.Maybe [VerifiedAccessTrustProvider])
+describeVerifiedAccessTrustProvidersResponse_verifiedAccessTrustProviders = Lens.lens (\DescribeVerifiedAccessTrustProvidersResponse' {verifiedAccessTrustProviders} -> verifiedAccessTrustProviders) (\s@DescribeVerifiedAccessTrustProvidersResponse' {} a -> s {verifiedAccessTrustProviders = a} :: DescribeVerifiedAccessTrustProvidersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVerifiedAccessTrustProvidersResponse_httpStatus :: Lens.Lens' DescribeVerifiedAccessTrustProvidersResponse Prelude.Int
+describeVerifiedAccessTrustProvidersResponse_httpStatus = Lens.lens (\DescribeVerifiedAccessTrustProvidersResponse' {httpStatus} -> httpStatus) (\s@DescribeVerifiedAccessTrustProvidersResponse' {} a -> s {httpStatus = a} :: DescribeVerifiedAccessTrustProvidersResponse)
+
+instance
+  Prelude.NFData
+    DescribeVerifiedAccessTrustProvidersResponse
+  where
+  rnf DescribeVerifiedAccessTrustProvidersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviders
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVolumeAttribute.hs b/gen/Amazonka/EC2/DescribeVolumeAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVolumeAttribute.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVolumeAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified attribute of the specified volume. You can
+-- specify only one attribute at a time.
+--
+-- For more information about EBS volumes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html Amazon EBS volumes>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DescribeVolumeAttribute
+  ( -- * Creating a Request
+    DescribeVolumeAttribute (..),
+    newDescribeVolumeAttribute,
+
+    -- * Request Lenses
+    describeVolumeAttribute_dryRun,
+    describeVolumeAttribute_attribute,
+    describeVolumeAttribute_volumeId,
+
+    -- * Destructuring the Response
+    DescribeVolumeAttributeResponse (..),
+    newDescribeVolumeAttributeResponse,
+
+    -- * Response Lenses
+    describeVolumeAttributeResponse_autoEnableIO,
+    describeVolumeAttributeResponse_productCodes,
+    describeVolumeAttributeResponse_volumeId,
+    describeVolumeAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVolumeAttribute' smart constructor.
+data DescribeVolumeAttribute = DescribeVolumeAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The attribute of the volume. This parameter is required.
+    attribute :: VolumeAttributeName,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumeAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVolumeAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'describeVolumeAttribute_attribute' - The attribute of the volume. This parameter is required.
+--
+-- 'volumeId', 'describeVolumeAttribute_volumeId' - The ID of the volume.
+newDescribeVolumeAttribute ::
+  -- | 'attribute'
+  VolumeAttributeName ->
+  -- | 'volumeId'
+  Prelude.Text ->
+  DescribeVolumeAttribute
+newDescribeVolumeAttribute pAttribute_ pVolumeId_ =
+  DescribeVolumeAttribute'
+    { dryRun = Prelude.Nothing,
+      attribute = pAttribute_,
+      volumeId = pVolumeId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVolumeAttribute_dryRun :: Lens.Lens' DescribeVolumeAttribute (Prelude.Maybe Prelude.Bool)
+describeVolumeAttribute_dryRun = Lens.lens (\DescribeVolumeAttribute' {dryRun} -> dryRun) (\s@DescribeVolumeAttribute' {} a -> s {dryRun = a} :: DescribeVolumeAttribute)
+
+-- | The attribute of the volume. This parameter is required.
+describeVolumeAttribute_attribute :: Lens.Lens' DescribeVolumeAttribute VolumeAttributeName
+describeVolumeAttribute_attribute = Lens.lens (\DescribeVolumeAttribute' {attribute} -> attribute) (\s@DescribeVolumeAttribute' {} a -> s {attribute = a} :: DescribeVolumeAttribute)
+
+-- | The ID of the volume.
+describeVolumeAttribute_volumeId :: Lens.Lens' DescribeVolumeAttribute Prelude.Text
+describeVolumeAttribute_volumeId = Lens.lens (\DescribeVolumeAttribute' {volumeId} -> volumeId) (\s@DescribeVolumeAttribute' {} a -> s {volumeId = a} :: DescribeVolumeAttribute)
+
+instance Core.AWSRequest DescribeVolumeAttribute where
+  type
+    AWSResponse DescribeVolumeAttribute =
+      DescribeVolumeAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVolumeAttributeResponse'
+            Prelude.<$> (x Data..@? "autoEnableIO")
+            Prelude.<*> ( x
+                            Data..@? "productCodes"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "volumeId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVolumeAttribute where
+  hashWithSalt _salt DescribeVolumeAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData DescribeVolumeAttribute where
+  rnf DescribeVolumeAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders DescribeVolumeAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVolumeAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVolumeAttribute where
+  toQuery DescribeVolumeAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVolumeAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "VolumeId" Data.=: volumeId
+      ]
+
+-- | /See:/ 'newDescribeVolumeAttributeResponse' smart constructor.
+data DescribeVolumeAttributeResponse = DescribeVolumeAttributeResponse'
+  { -- | The state of @autoEnableIO@ attribute.
+    autoEnableIO :: Prelude.Maybe AttributeBooleanValue,
+    -- | A list of product codes.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | The ID of the volume.
+    volumeId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumeAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoEnableIO', 'describeVolumeAttributeResponse_autoEnableIO' - The state of @autoEnableIO@ attribute.
+--
+-- 'productCodes', 'describeVolumeAttributeResponse_productCodes' - A list of product codes.
+--
+-- 'volumeId', 'describeVolumeAttributeResponse_volumeId' - The ID of the volume.
+--
+-- 'httpStatus', 'describeVolumeAttributeResponse_httpStatus' - The response's http status code.
+newDescribeVolumeAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVolumeAttributeResponse
+newDescribeVolumeAttributeResponse pHttpStatus_ =
+  DescribeVolumeAttributeResponse'
+    { autoEnableIO =
+        Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      volumeId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The state of @autoEnableIO@ attribute.
+describeVolumeAttributeResponse_autoEnableIO :: Lens.Lens' DescribeVolumeAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeVolumeAttributeResponse_autoEnableIO = Lens.lens (\DescribeVolumeAttributeResponse' {autoEnableIO} -> autoEnableIO) (\s@DescribeVolumeAttributeResponse' {} a -> s {autoEnableIO = a} :: DescribeVolumeAttributeResponse)
+
+-- | A list of product codes.
+describeVolumeAttributeResponse_productCodes :: Lens.Lens' DescribeVolumeAttributeResponse (Prelude.Maybe [ProductCode])
+describeVolumeAttributeResponse_productCodes = Lens.lens (\DescribeVolumeAttributeResponse' {productCodes} -> productCodes) (\s@DescribeVolumeAttributeResponse' {} a -> s {productCodes = a} :: DescribeVolumeAttributeResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the volume.
+describeVolumeAttributeResponse_volumeId :: Lens.Lens' DescribeVolumeAttributeResponse (Prelude.Maybe Prelude.Text)
+describeVolumeAttributeResponse_volumeId = Lens.lens (\DescribeVolumeAttributeResponse' {volumeId} -> volumeId) (\s@DescribeVolumeAttributeResponse' {} a -> s {volumeId = a} :: DescribeVolumeAttributeResponse)
+
+-- | The response's http status code.
+describeVolumeAttributeResponse_httpStatus :: Lens.Lens' DescribeVolumeAttributeResponse Prelude.Int
+describeVolumeAttributeResponse_httpStatus = Lens.lens (\DescribeVolumeAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeVolumeAttributeResponse' {} a -> s {httpStatus = a} :: DescribeVolumeAttributeResponse)
+
+instance
+  Prelude.NFData
+    DescribeVolumeAttributeResponse
+  where
+  rnf DescribeVolumeAttributeResponse' {..} =
+    Prelude.rnf autoEnableIO
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf volumeId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVolumeStatus.hs b/gen/Amazonka/EC2/DescribeVolumeStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVolumeStatus.hs
@@ -0,0 +1,439 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVolumeStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the status of the specified volumes. Volume status provides
+-- the result of the checks performed on your volumes to determine events
+-- that can impair the performance of your volumes. The performance of a
+-- volume can be affected if an issue occurs on the volume\'s underlying
+-- host. If the volume\'s underlying host experiences a power outage or
+-- system issue, after the system is restored, there could be data
+-- inconsistencies on the volume. Volume events notify you if this occurs.
+-- Volume actions notify you if any action needs to be taken in response to
+-- the event.
+--
+-- The @DescribeVolumeStatus@ operation provides the following information
+-- about the specified volumes:
+--
+-- /Status/: Reflects the current status of the volume. The possible values
+-- are @ok@, @impaired@ , @warning@, or @insufficient-data@. If all checks
+-- pass, the overall status of the volume is @ok@. If the check fails, the
+-- overall status is @impaired@. If the status is @insufficient-data@, then
+-- the checks might still be taking place on your volume at the time. We
+-- recommend that you retry the request. For more information about volume
+-- status, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-status.html Monitor the status of your volumes>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- /Events/: Reflect the cause of a volume status and might require you to
+-- take action. For example, if your volume returns an @impaired@ status,
+-- then the volume event might be @potential-data-inconsistency@. This
+-- means that your volume has been affected by an issue with the underlying
+-- host, has all I\/O operations disabled, and might have inconsistent
+-- data.
+--
+-- /Actions/: Reflect the actions you might have to take in response to an
+-- event. For example, if the status of the volume is @impaired@ and the
+-- volume event shows @potential-data-inconsistency@, then the action shows
+-- @enable-volume-io@. This means that you may want to enable the I\/O
+-- operations for the volume by calling the EnableVolumeIO action and then
+-- check the volume for data consistency.
+--
+-- Volume status is based on the volume status checks, and does not reflect
+-- the volume state. Therefore, volume status does not indicate volumes in
+-- the @error@ state (for example, when a volume is incapable of accepting
+-- I\/O.)
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVolumeStatus
+  ( -- * Creating a Request
+    DescribeVolumeStatus (..),
+    newDescribeVolumeStatus,
+
+    -- * Request Lenses
+    describeVolumeStatus_dryRun,
+    describeVolumeStatus_filters,
+    describeVolumeStatus_maxResults,
+    describeVolumeStatus_nextToken,
+    describeVolumeStatus_volumeIds,
+
+    -- * Destructuring the Response
+    DescribeVolumeStatusResponse (..),
+    newDescribeVolumeStatusResponse,
+
+    -- * Response Lenses
+    describeVolumeStatusResponse_nextToken,
+    describeVolumeStatusResponse_volumeStatuses,
+    describeVolumeStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVolumeStatus' smart constructor.
+data DescribeVolumeStatus = DescribeVolumeStatus'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @action.code@ - The action code for the event (for example,
+    --     @enable-volume-io@).
+    --
+    -- -   @action.description@ - A description of the action.
+    --
+    -- -   @action.event-id@ - The event ID associated with the action.
+    --
+    -- -   @availability-zone@ - The Availability Zone of the instance.
+    --
+    -- -   @event.description@ - A description of the event.
+    --
+    -- -   @event.event-id@ - The event ID.
+    --
+    -- -   @event.event-type@ - The event type (for @io-enabled@: @passed@ |
+    --     @failed@; for @io-performance@: @io-performance:degraded@ |
+    --     @io-performance:severely-degraded@ | @io-performance:stalled@).
+    --
+    -- -   @event.not-after@ - The latest end time for the event.
+    --
+    -- -   @event.not-before@ - The earliest start time for the event.
+    --
+    -- -   @volume-status.details-name@ - The cause for @volume-status.status@
+    --     (@io-enabled@ | @io-performance@).
+    --
+    -- -   @volume-status.details-status@ - The status of
+    --     @volume-status.details-name@ (for @io-enabled@: @passed@ | @failed@;
+    --     for @io-performance@: @normal@ | @degraded@ | @severely-degraded@ |
+    --     @stalled@).
+    --
+    -- -   @volume-status.status@ - The status of the volume (@ok@ | @impaired@
+    --     | @warning@ | @insufficient-data@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of volume results returned by @DescribeVolumeStatus@
+    -- in paginated output. When this parameter is used, the request only
+    -- returns @MaxResults@ results in a single page along with a @NextToken@
+    -- response element. The remaining results of the initial request can be
+    -- seen by sending another request with the returned @NextToken@ value.
+    -- This value can be between 5 and 1,000; if @MaxResults@ is given a value
+    -- larger than 1,000, only 1,000 results are returned. If this parameter is
+    -- not used, then @DescribeVolumeStatus@ returns all results. You cannot
+    -- specify this parameter and the volume IDs parameter in the same request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The @NextToken@ value to include in a future @DescribeVolumeStatus@
+    -- request. When the results of the request exceed @MaxResults@, this value
+    -- can be used to retrieve the next page of results. This value is @null@
+    -- when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the volumes.
+    --
+    -- Default: Describes all your volumes.
+    volumeIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumeStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVolumeStatus_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVolumeStatus_filters' - The filters.
+--
+-- -   @action.code@ - The action code for the event (for example,
+--     @enable-volume-io@).
+--
+-- -   @action.description@ - A description of the action.
+--
+-- -   @action.event-id@ - The event ID associated with the action.
+--
+-- -   @availability-zone@ - The Availability Zone of the instance.
+--
+-- -   @event.description@ - A description of the event.
+--
+-- -   @event.event-id@ - The event ID.
+--
+-- -   @event.event-type@ - The event type (for @io-enabled@: @passed@ |
+--     @failed@; for @io-performance@: @io-performance:degraded@ |
+--     @io-performance:severely-degraded@ | @io-performance:stalled@).
+--
+-- -   @event.not-after@ - The latest end time for the event.
+--
+-- -   @event.not-before@ - The earliest start time for the event.
+--
+-- -   @volume-status.details-name@ - The cause for @volume-status.status@
+--     (@io-enabled@ | @io-performance@).
+--
+-- -   @volume-status.details-status@ - The status of
+--     @volume-status.details-name@ (for @io-enabled@: @passed@ | @failed@;
+--     for @io-performance@: @normal@ | @degraded@ | @severely-degraded@ |
+--     @stalled@).
+--
+-- -   @volume-status.status@ - The status of the volume (@ok@ | @impaired@
+--     | @warning@ | @insufficient-data@).
+--
+-- 'maxResults', 'describeVolumeStatus_maxResults' - The maximum number of volume results returned by @DescribeVolumeStatus@
+-- in paginated output. When this parameter is used, the request only
+-- returns @MaxResults@ results in a single page along with a @NextToken@
+-- response element. The remaining results of the initial request can be
+-- seen by sending another request with the returned @NextToken@ value.
+-- This value can be between 5 and 1,000; if @MaxResults@ is given a value
+-- larger than 1,000, only 1,000 results are returned. If this parameter is
+-- not used, then @DescribeVolumeStatus@ returns all results. You cannot
+-- specify this parameter and the volume IDs parameter in the same request.
+--
+-- 'nextToken', 'describeVolumeStatus_nextToken' - The @NextToken@ value to include in a future @DescribeVolumeStatus@
+-- request. When the results of the request exceed @MaxResults@, this value
+-- can be used to retrieve the next page of results. This value is @null@
+-- when there are no more results to return.
+--
+-- 'volumeIds', 'describeVolumeStatus_volumeIds' - The IDs of the volumes.
+--
+-- Default: Describes all your volumes.
+newDescribeVolumeStatus ::
+  DescribeVolumeStatus
+newDescribeVolumeStatus =
+  DescribeVolumeStatus'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      volumeIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVolumeStatus_dryRun :: Lens.Lens' DescribeVolumeStatus (Prelude.Maybe Prelude.Bool)
+describeVolumeStatus_dryRun = Lens.lens (\DescribeVolumeStatus' {dryRun} -> dryRun) (\s@DescribeVolumeStatus' {} a -> s {dryRun = a} :: DescribeVolumeStatus)
+
+-- | The filters.
+--
+-- -   @action.code@ - The action code for the event (for example,
+--     @enable-volume-io@).
+--
+-- -   @action.description@ - A description of the action.
+--
+-- -   @action.event-id@ - The event ID associated with the action.
+--
+-- -   @availability-zone@ - The Availability Zone of the instance.
+--
+-- -   @event.description@ - A description of the event.
+--
+-- -   @event.event-id@ - The event ID.
+--
+-- -   @event.event-type@ - The event type (for @io-enabled@: @passed@ |
+--     @failed@; for @io-performance@: @io-performance:degraded@ |
+--     @io-performance:severely-degraded@ | @io-performance:stalled@).
+--
+-- -   @event.not-after@ - The latest end time for the event.
+--
+-- -   @event.not-before@ - The earliest start time for the event.
+--
+-- -   @volume-status.details-name@ - The cause for @volume-status.status@
+--     (@io-enabled@ | @io-performance@).
+--
+-- -   @volume-status.details-status@ - The status of
+--     @volume-status.details-name@ (for @io-enabled@: @passed@ | @failed@;
+--     for @io-performance@: @normal@ | @degraded@ | @severely-degraded@ |
+--     @stalled@).
+--
+-- -   @volume-status.status@ - The status of the volume (@ok@ | @impaired@
+--     | @warning@ | @insufficient-data@).
+describeVolumeStatus_filters :: Lens.Lens' DescribeVolumeStatus (Prelude.Maybe [Filter])
+describeVolumeStatus_filters = Lens.lens (\DescribeVolumeStatus' {filters} -> filters) (\s@DescribeVolumeStatus' {} a -> s {filters = a} :: DescribeVolumeStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of volume results returned by @DescribeVolumeStatus@
+-- in paginated output. When this parameter is used, the request only
+-- returns @MaxResults@ results in a single page along with a @NextToken@
+-- response element. The remaining results of the initial request can be
+-- seen by sending another request with the returned @NextToken@ value.
+-- This value can be between 5 and 1,000; if @MaxResults@ is given a value
+-- larger than 1,000, only 1,000 results are returned. If this parameter is
+-- not used, then @DescribeVolumeStatus@ returns all results. You cannot
+-- specify this parameter and the volume IDs parameter in the same request.
+describeVolumeStatus_maxResults :: Lens.Lens' DescribeVolumeStatus (Prelude.Maybe Prelude.Int)
+describeVolumeStatus_maxResults = Lens.lens (\DescribeVolumeStatus' {maxResults} -> maxResults) (\s@DescribeVolumeStatus' {} a -> s {maxResults = a} :: DescribeVolumeStatus)
+
+-- | The @NextToken@ value to include in a future @DescribeVolumeStatus@
+-- request. When the results of the request exceed @MaxResults@, this value
+-- can be used to retrieve the next page of results. This value is @null@
+-- when there are no more results to return.
+describeVolumeStatus_nextToken :: Lens.Lens' DescribeVolumeStatus (Prelude.Maybe Prelude.Text)
+describeVolumeStatus_nextToken = Lens.lens (\DescribeVolumeStatus' {nextToken} -> nextToken) (\s@DescribeVolumeStatus' {} a -> s {nextToken = a} :: DescribeVolumeStatus)
+
+-- | The IDs of the volumes.
+--
+-- Default: Describes all your volumes.
+describeVolumeStatus_volumeIds :: Lens.Lens' DescribeVolumeStatus (Prelude.Maybe [Prelude.Text])
+describeVolumeStatus_volumeIds = Lens.lens (\DescribeVolumeStatus' {volumeIds} -> volumeIds) (\s@DescribeVolumeStatus' {} a -> s {volumeIds = a} :: DescribeVolumeStatus) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVolumeStatus where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVolumeStatusResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVolumeStatusResponse_volumeStatuses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVolumeStatus_nextToken
+          Lens..~ rs
+          Lens.^? describeVolumeStatusResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVolumeStatus where
+  type
+    AWSResponse DescribeVolumeStatus =
+      DescribeVolumeStatusResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVolumeStatusResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "volumeStatusSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVolumeStatus where
+  hashWithSalt _salt DescribeVolumeStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` volumeIds
+
+instance Prelude.NFData DescribeVolumeStatus where
+  rnf DescribeVolumeStatus' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf volumeIds
+
+instance Data.ToHeaders DescribeVolumeStatus where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVolumeStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVolumeStatus where
+  toQuery DescribeVolumeStatus' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVolumeStatus" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "VolumeId" Prelude.<$> volumeIds)
+      ]
+
+-- | /See:/ 'newDescribeVolumeStatusResponse' smart constructor.
+data DescribeVolumeStatusResponse = DescribeVolumeStatusResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the status of the volumes.
+    volumeStatuses :: Prelude.Maybe [VolumeStatusItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumeStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVolumeStatusResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'volumeStatuses', 'describeVolumeStatusResponse_volumeStatuses' - Information about the status of the volumes.
+--
+-- 'httpStatus', 'describeVolumeStatusResponse_httpStatus' - The response's http status code.
+newDescribeVolumeStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVolumeStatusResponse
+newDescribeVolumeStatusResponse pHttpStatus_ =
+  DescribeVolumeStatusResponse'
+    { nextToken =
+        Prelude.Nothing,
+      volumeStatuses = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVolumeStatusResponse_nextToken :: Lens.Lens' DescribeVolumeStatusResponse (Prelude.Maybe Prelude.Text)
+describeVolumeStatusResponse_nextToken = Lens.lens (\DescribeVolumeStatusResponse' {nextToken} -> nextToken) (\s@DescribeVolumeStatusResponse' {} a -> s {nextToken = a} :: DescribeVolumeStatusResponse)
+
+-- | Information about the status of the volumes.
+describeVolumeStatusResponse_volumeStatuses :: Lens.Lens' DescribeVolumeStatusResponse (Prelude.Maybe [VolumeStatusItem])
+describeVolumeStatusResponse_volumeStatuses = Lens.lens (\DescribeVolumeStatusResponse' {volumeStatuses} -> volumeStatuses) (\s@DescribeVolumeStatusResponse' {} a -> s {volumeStatuses = a} :: DescribeVolumeStatusResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVolumeStatusResponse_httpStatus :: Lens.Lens' DescribeVolumeStatusResponse Prelude.Int
+describeVolumeStatusResponse_httpStatus = Lens.lens (\DescribeVolumeStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeVolumeStatusResponse' {} a -> s {httpStatus = a} :: DescribeVolumeStatusResponse)
+
+instance Prelude.NFData DescribeVolumeStatusResponse where
+  rnf DescribeVolumeStatusResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf volumeStatuses
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVolumes.hs b/gen/Amazonka/EC2/DescribeVolumes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVolumes.hs
@@ -0,0 +1,477 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVolumes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified EBS volumes or all of your EBS volumes.
+--
+-- If you are describing a long list of volumes, we recommend that you
+-- paginate the output to make the list more manageable. The @MaxResults@
+-- parameter sets the maximum number of results returned in a single page.
+-- If the list of results exceeds your @MaxResults@ value, then that number
+-- of results is returned along with a @NextToken@ value that can be passed
+-- to a subsequent @DescribeVolumes@ request to retrieve the remaining
+-- results.
+--
+-- For more information about EBS volumes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html Amazon EBS volumes>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVolumes
+  ( -- * Creating a Request
+    DescribeVolumes (..),
+    newDescribeVolumes,
+
+    -- * Request Lenses
+    describeVolumes_dryRun,
+    describeVolumes_filters,
+    describeVolumes_maxResults,
+    describeVolumes_nextToken,
+    describeVolumes_volumeIds,
+
+    -- * Destructuring the Response
+    DescribeVolumesResponse (..),
+    newDescribeVolumesResponse,
+
+    -- * Response Lenses
+    describeVolumesResponse_nextToken,
+    describeVolumesResponse_volumes,
+    describeVolumesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVolumes' smart constructor.
+data DescribeVolumes = DescribeVolumes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @attachment.attach-time@ - The time stamp when the attachment
+    --     initiated.
+    --
+    -- -   @attachment.delete-on-termination@ - Whether the volume is deleted
+    --     on instance termination.
+    --
+    -- -   @attachment.device@ - The device name specified in the block device
+    --     mapping (for example, @\/dev\/sda1@).
+    --
+    -- -   @attachment.instance-id@ - The ID of the instance the volume is
+    --     attached to.
+    --
+    -- -   @attachment.status@ - The attachment state (@attaching@ | @attached@
+    --     | @detaching@).
+    --
+    -- -   @availability-zone@ - The Availability Zone in which the volume was
+    --     created.
+    --
+    -- -   @create-time@ - The time stamp when the volume was created.
+    --
+    -- -   @encrypted@ - Indicates whether the volume is encrypted (@true@ |
+    --     @false@)
+    --
+    -- -   @multi-attach-enabled@ - Indicates whether the volume is enabled for
+    --     Multi-Attach (@true@ | @false@)
+    --
+    -- -   @fast-restored@ - Indicates whether the volume was created from a
+    --     snapshot that is enabled for fast snapshot restore (@true@ |
+    --     @false@).
+    --
+    -- -   @size@ - The size of the volume, in GiB.
+    --
+    -- -   @snapshot-id@ - The snapshot from which the volume was created.
+    --
+    -- -   @status@ - The state of the volume (@creating@ | @available@ |
+    --     @in-use@ | @deleting@ | @deleted@ | @error@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @volume-id@ - The volume ID.
+    --
+    -- -   @volume-type@ - The Amazon EBS volume type (@gp2@ | @gp3@ | @io1@ |
+    --     @io2@ | @st1@ | @sc1@| @standard@)
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of volume results returned by @DescribeVolumes@ in
+    -- paginated output. When this parameter is used, @DescribeVolumes@ only
+    -- returns @MaxResults@ results in a single page along with a @NextToken@
+    -- response element. The remaining results of the initial request can be
+    -- seen by sending another @DescribeVolumes@ request with the returned
+    -- @NextToken@ value. This value can be between 5 and 500; if @MaxResults@
+    -- is given a value larger than 500, only 500 results are returned. If this
+    -- parameter is not used, then @DescribeVolumes@ returns all results. You
+    -- cannot specify this parameter and the volume IDs parameter in the same
+    -- request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The @NextToken@ value returned from a previous paginated
+    -- @DescribeVolumes@ request where @MaxResults@ was used and the results
+    -- exceeded the value of that parameter. Pagination continues from the end
+    -- of the previous results that returned the @NextToken@ value. This value
+    -- is @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The volume IDs.
+    volumeIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVolumes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVolumes_filters' - The filters.
+--
+-- -   @attachment.attach-time@ - The time stamp when the attachment
+--     initiated.
+--
+-- -   @attachment.delete-on-termination@ - Whether the volume is deleted
+--     on instance termination.
+--
+-- -   @attachment.device@ - The device name specified in the block device
+--     mapping (for example, @\/dev\/sda1@).
+--
+-- -   @attachment.instance-id@ - The ID of the instance the volume is
+--     attached to.
+--
+-- -   @attachment.status@ - The attachment state (@attaching@ | @attached@
+--     | @detaching@).
+--
+-- -   @availability-zone@ - The Availability Zone in which the volume was
+--     created.
+--
+-- -   @create-time@ - The time stamp when the volume was created.
+--
+-- -   @encrypted@ - Indicates whether the volume is encrypted (@true@ |
+--     @false@)
+--
+-- -   @multi-attach-enabled@ - Indicates whether the volume is enabled for
+--     Multi-Attach (@true@ | @false@)
+--
+-- -   @fast-restored@ - Indicates whether the volume was created from a
+--     snapshot that is enabled for fast snapshot restore (@true@ |
+--     @false@).
+--
+-- -   @size@ - The size of the volume, in GiB.
+--
+-- -   @snapshot-id@ - The snapshot from which the volume was created.
+--
+-- -   @status@ - The state of the volume (@creating@ | @available@ |
+--     @in-use@ | @deleting@ | @deleted@ | @error@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @volume-id@ - The volume ID.
+--
+-- -   @volume-type@ - The Amazon EBS volume type (@gp2@ | @gp3@ | @io1@ |
+--     @io2@ | @st1@ | @sc1@| @standard@)
+--
+-- 'maxResults', 'describeVolumes_maxResults' - The maximum number of volume results returned by @DescribeVolumes@ in
+-- paginated output. When this parameter is used, @DescribeVolumes@ only
+-- returns @MaxResults@ results in a single page along with a @NextToken@
+-- response element. The remaining results of the initial request can be
+-- seen by sending another @DescribeVolumes@ request with the returned
+-- @NextToken@ value. This value can be between 5 and 500; if @MaxResults@
+-- is given a value larger than 500, only 500 results are returned. If this
+-- parameter is not used, then @DescribeVolumes@ returns all results. You
+-- cannot specify this parameter and the volume IDs parameter in the same
+-- request.
+--
+-- 'nextToken', 'describeVolumes_nextToken' - The @NextToken@ value returned from a previous paginated
+-- @DescribeVolumes@ request where @MaxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @NextToken@ value. This value
+-- is @null@ when there are no more results to return.
+--
+-- 'volumeIds', 'describeVolumes_volumeIds' - The volume IDs.
+newDescribeVolumes ::
+  DescribeVolumes
+newDescribeVolumes =
+  DescribeVolumes'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      volumeIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVolumes_dryRun :: Lens.Lens' DescribeVolumes (Prelude.Maybe Prelude.Bool)
+describeVolumes_dryRun = Lens.lens (\DescribeVolumes' {dryRun} -> dryRun) (\s@DescribeVolumes' {} a -> s {dryRun = a} :: DescribeVolumes)
+
+-- | The filters.
+--
+-- -   @attachment.attach-time@ - The time stamp when the attachment
+--     initiated.
+--
+-- -   @attachment.delete-on-termination@ - Whether the volume is deleted
+--     on instance termination.
+--
+-- -   @attachment.device@ - The device name specified in the block device
+--     mapping (for example, @\/dev\/sda1@).
+--
+-- -   @attachment.instance-id@ - The ID of the instance the volume is
+--     attached to.
+--
+-- -   @attachment.status@ - The attachment state (@attaching@ | @attached@
+--     | @detaching@).
+--
+-- -   @availability-zone@ - The Availability Zone in which the volume was
+--     created.
+--
+-- -   @create-time@ - The time stamp when the volume was created.
+--
+-- -   @encrypted@ - Indicates whether the volume is encrypted (@true@ |
+--     @false@)
+--
+-- -   @multi-attach-enabled@ - Indicates whether the volume is enabled for
+--     Multi-Attach (@true@ | @false@)
+--
+-- -   @fast-restored@ - Indicates whether the volume was created from a
+--     snapshot that is enabled for fast snapshot restore (@true@ |
+--     @false@).
+--
+-- -   @size@ - The size of the volume, in GiB.
+--
+-- -   @snapshot-id@ - The snapshot from which the volume was created.
+--
+-- -   @status@ - The state of the volume (@creating@ | @available@ |
+--     @in-use@ | @deleting@ | @deleted@ | @error@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @volume-id@ - The volume ID.
+--
+-- -   @volume-type@ - The Amazon EBS volume type (@gp2@ | @gp3@ | @io1@ |
+--     @io2@ | @st1@ | @sc1@| @standard@)
+describeVolumes_filters :: Lens.Lens' DescribeVolumes (Prelude.Maybe [Filter])
+describeVolumes_filters = Lens.lens (\DescribeVolumes' {filters} -> filters) (\s@DescribeVolumes' {} a -> s {filters = a} :: DescribeVolumes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of volume results returned by @DescribeVolumes@ in
+-- paginated output. When this parameter is used, @DescribeVolumes@ only
+-- returns @MaxResults@ results in a single page along with a @NextToken@
+-- response element. The remaining results of the initial request can be
+-- seen by sending another @DescribeVolumes@ request with the returned
+-- @NextToken@ value. This value can be between 5 and 500; if @MaxResults@
+-- is given a value larger than 500, only 500 results are returned. If this
+-- parameter is not used, then @DescribeVolumes@ returns all results. You
+-- cannot specify this parameter and the volume IDs parameter in the same
+-- request.
+describeVolumes_maxResults :: Lens.Lens' DescribeVolumes (Prelude.Maybe Prelude.Int)
+describeVolumes_maxResults = Lens.lens (\DescribeVolumes' {maxResults} -> maxResults) (\s@DescribeVolumes' {} a -> s {maxResults = a} :: DescribeVolumes)
+
+-- | The @NextToken@ value returned from a previous paginated
+-- @DescribeVolumes@ request where @MaxResults@ was used and the results
+-- exceeded the value of that parameter. Pagination continues from the end
+-- of the previous results that returned the @NextToken@ value. This value
+-- is @null@ when there are no more results to return.
+describeVolumes_nextToken :: Lens.Lens' DescribeVolumes (Prelude.Maybe Prelude.Text)
+describeVolumes_nextToken = Lens.lens (\DescribeVolumes' {nextToken} -> nextToken) (\s@DescribeVolumes' {} a -> s {nextToken = a} :: DescribeVolumes)
+
+-- | The volume IDs.
+describeVolumes_volumeIds :: Lens.Lens' DescribeVolumes (Prelude.Maybe [Prelude.Text])
+describeVolumes_volumeIds = Lens.lens (\DescribeVolumes' {volumeIds} -> volumeIds) (\s@DescribeVolumes' {} a -> s {volumeIds = a} :: DescribeVolumes) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVolumes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVolumesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVolumesResponse_volumes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVolumes_nextToken
+          Lens..~ rs
+          Lens.^? describeVolumesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVolumes where
+  type
+    AWSResponse DescribeVolumes =
+      DescribeVolumesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVolumesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "volumeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVolumes where
+  hashWithSalt _salt DescribeVolumes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` volumeIds
+
+instance Prelude.NFData DescribeVolumes where
+  rnf DescribeVolumes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf volumeIds
+
+instance Data.ToHeaders DescribeVolumes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVolumes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVolumes where
+  toQuery DescribeVolumes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVolumes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "VolumeId" Prelude.<$> volumeIds)
+      ]
+
+-- | /See:/ 'newDescribeVolumesResponse' smart constructor.
+data DescribeVolumesResponse = DescribeVolumesResponse'
+  { -- | The @NextToken@ value to include in a future @DescribeVolumes@ request.
+    -- When the results of a @DescribeVolumes@ request exceed @MaxResults@,
+    -- this value can be used to retrieve the next page of results. This value
+    -- is @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the volumes.
+    volumes :: Prelude.Maybe [Volume],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVolumesResponse_nextToken' - The @NextToken@ value to include in a future @DescribeVolumes@ request.
+-- When the results of a @DescribeVolumes@ request exceed @MaxResults@,
+-- this value can be used to retrieve the next page of results. This value
+-- is @null@ when there are no more results to return.
+--
+-- 'volumes', 'describeVolumesResponse_volumes' - Information about the volumes.
+--
+-- 'httpStatus', 'describeVolumesResponse_httpStatus' - The response's http status code.
+newDescribeVolumesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVolumesResponse
+newDescribeVolumesResponse pHttpStatus_ =
+  DescribeVolumesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      volumes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @NextToken@ value to include in a future @DescribeVolumes@ request.
+-- When the results of a @DescribeVolumes@ request exceed @MaxResults@,
+-- this value can be used to retrieve the next page of results. This value
+-- is @null@ when there are no more results to return.
+describeVolumesResponse_nextToken :: Lens.Lens' DescribeVolumesResponse (Prelude.Maybe Prelude.Text)
+describeVolumesResponse_nextToken = Lens.lens (\DescribeVolumesResponse' {nextToken} -> nextToken) (\s@DescribeVolumesResponse' {} a -> s {nextToken = a} :: DescribeVolumesResponse)
+
+-- | Information about the volumes.
+describeVolumesResponse_volumes :: Lens.Lens' DescribeVolumesResponse (Prelude.Maybe [Volume])
+describeVolumesResponse_volumes = Lens.lens (\DescribeVolumesResponse' {volumes} -> volumes) (\s@DescribeVolumesResponse' {} a -> s {volumes = a} :: DescribeVolumesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVolumesResponse_httpStatus :: Lens.Lens' DescribeVolumesResponse Prelude.Int
+describeVolumesResponse_httpStatus = Lens.lens (\DescribeVolumesResponse' {httpStatus} -> httpStatus) (\s@DescribeVolumesResponse' {} a -> s {httpStatus = a} :: DescribeVolumesResponse)
+
+instance Prelude.NFData DescribeVolumesResponse where
+  rnf DescribeVolumesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf volumes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVolumesModifications.hs b/gen/Amazonka/EC2/DescribeVolumesModifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVolumesModifications.hs
@@ -0,0 +1,367 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVolumesModifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the most recent volume modification request for the specified
+-- EBS volumes.
+--
+-- If a volume has never been modified, some information in the output will
+-- be null. If a volume has been modified more than once, the output
+-- includes only the most recent modification request.
+--
+-- You can also use CloudWatch Events to check the status of a modification
+-- to an EBS volume. For information about CloudWatch Events, see the
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ Amazon CloudWatch Events User Guide>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-modifications.html Monitor the progress of volume modifications>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVolumesModifications
+  ( -- * Creating a Request
+    DescribeVolumesModifications (..),
+    newDescribeVolumesModifications,
+
+    -- * Request Lenses
+    describeVolumesModifications_dryRun,
+    describeVolumesModifications_filters,
+    describeVolumesModifications_maxResults,
+    describeVolumesModifications_nextToken,
+    describeVolumesModifications_volumeIds,
+
+    -- * Destructuring the Response
+    DescribeVolumesModificationsResponse (..),
+    newDescribeVolumesModificationsResponse,
+
+    -- * Response Lenses
+    describeVolumesModificationsResponse_nextToken,
+    describeVolumesModificationsResponse_volumesModifications,
+    describeVolumesModificationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVolumesModifications' smart constructor.
+data DescribeVolumesModifications = DescribeVolumesModifications'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters.
+    --
+    -- -   @modification-state@ - The current modification state (modifying |
+    --     optimizing | completed | failed).
+    --
+    -- -   @original-iops@ - The original IOPS rate of the volume.
+    --
+    -- -   @original-size@ - The original size of the volume, in GiB.
+    --
+    -- -   @original-volume-type@ - The original volume type of the volume
+    --     (standard | io1 | io2 | gp2 | sc1 | st1).
+    --
+    -- -   @originalMultiAttachEnabled@ - Indicates whether Multi-Attach
+    --     support was enabled (true | false).
+    --
+    -- -   @start-time@ - The modification start time.
+    --
+    -- -   @target-iops@ - The target IOPS rate of the volume.
+    --
+    -- -   @target-size@ - The target size of the volume, in GiB.
+    --
+    -- -   @target-volume-type@ - The target volume type of the volume
+    --     (standard | io1 | io2 | gp2 | sc1 | st1).
+    --
+    -- -   @targetMultiAttachEnabled@ - Indicates whether Multi-Attach support
+    --     is to be enabled (true | false).
+    --
+    -- -   @volume-id@ - The ID of the volume.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results (up to a limit of 500) to be returned in a
+    -- paginated request.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The @nextToken@ value returned by a previous paginated request.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the volumes.
+    volumeIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumesModifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVolumesModifications_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVolumesModifications_filters' - The filters.
+--
+-- -   @modification-state@ - The current modification state (modifying |
+--     optimizing | completed | failed).
+--
+-- -   @original-iops@ - The original IOPS rate of the volume.
+--
+-- -   @original-size@ - The original size of the volume, in GiB.
+--
+-- -   @original-volume-type@ - The original volume type of the volume
+--     (standard | io1 | io2 | gp2 | sc1 | st1).
+--
+-- -   @originalMultiAttachEnabled@ - Indicates whether Multi-Attach
+--     support was enabled (true | false).
+--
+-- -   @start-time@ - The modification start time.
+--
+-- -   @target-iops@ - The target IOPS rate of the volume.
+--
+-- -   @target-size@ - The target size of the volume, in GiB.
+--
+-- -   @target-volume-type@ - The target volume type of the volume
+--     (standard | io1 | io2 | gp2 | sc1 | st1).
+--
+-- -   @targetMultiAttachEnabled@ - Indicates whether Multi-Attach support
+--     is to be enabled (true | false).
+--
+-- -   @volume-id@ - The ID of the volume.
+--
+-- 'maxResults', 'describeVolumesModifications_maxResults' - The maximum number of results (up to a limit of 500) to be returned in a
+-- paginated request.
+--
+-- 'nextToken', 'describeVolumesModifications_nextToken' - The @nextToken@ value returned by a previous paginated request.
+--
+-- 'volumeIds', 'describeVolumesModifications_volumeIds' - The IDs of the volumes.
+newDescribeVolumesModifications ::
+  DescribeVolumesModifications
+newDescribeVolumesModifications =
+  DescribeVolumesModifications'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      volumeIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVolumesModifications_dryRun :: Lens.Lens' DescribeVolumesModifications (Prelude.Maybe Prelude.Bool)
+describeVolumesModifications_dryRun = Lens.lens (\DescribeVolumesModifications' {dryRun} -> dryRun) (\s@DescribeVolumesModifications' {} a -> s {dryRun = a} :: DescribeVolumesModifications)
+
+-- | The filters.
+--
+-- -   @modification-state@ - The current modification state (modifying |
+--     optimizing | completed | failed).
+--
+-- -   @original-iops@ - The original IOPS rate of the volume.
+--
+-- -   @original-size@ - The original size of the volume, in GiB.
+--
+-- -   @original-volume-type@ - The original volume type of the volume
+--     (standard | io1 | io2 | gp2 | sc1 | st1).
+--
+-- -   @originalMultiAttachEnabled@ - Indicates whether Multi-Attach
+--     support was enabled (true | false).
+--
+-- -   @start-time@ - The modification start time.
+--
+-- -   @target-iops@ - The target IOPS rate of the volume.
+--
+-- -   @target-size@ - The target size of the volume, in GiB.
+--
+-- -   @target-volume-type@ - The target volume type of the volume
+--     (standard | io1 | io2 | gp2 | sc1 | st1).
+--
+-- -   @targetMultiAttachEnabled@ - Indicates whether Multi-Attach support
+--     is to be enabled (true | false).
+--
+-- -   @volume-id@ - The ID of the volume.
+describeVolumesModifications_filters :: Lens.Lens' DescribeVolumesModifications (Prelude.Maybe [Filter])
+describeVolumesModifications_filters = Lens.lens (\DescribeVolumesModifications' {filters} -> filters) (\s@DescribeVolumesModifications' {} a -> s {filters = a} :: DescribeVolumesModifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results (up to a limit of 500) to be returned in a
+-- paginated request.
+describeVolumesModifications_maxResults :: Lens.Lens' DescribeVolumesModifications (Prelude.Maybe Prelude.Int)
+describeVolumesModifications_maxResults = Lens.lens (\DescribeVolumesModifications' {maxResults} -> maxResults) (\s@DescribeVolumesModifications' {} a -> s {maxResults = a} :: DescribeVolumesModifications)
+
+-- | The @nextToken@ value returned by a previous paginated request.
+describeVolumesModifications_nextToken :: Lens.Lens' DescribeVolumesModifications (Prelude.Maybe Prelude.Text)
+describeVolumesModifications_nextToken = Lens.lens (\DescribeVolumesModifications' {nextToken} -> nextToken) (\s@DescribeVolumesModifications' {} a -> s {nextToken = a} :: DescribeVolumesModifications)
+
+-- | The IDs of the volumes.
+describeVolumesModifications_volumeIds :: Lens.Lens' DescribeVolumesModifications (Prelude.Maybe [Prelude.Text])
+describeVolumesModifications_volumeIds = Lens.lens (\DescribeVolumesModifications' {volumeIds} -> volumeIds) (\s@DescribeVolumesModifications' {} a -> s {volumeIds = a} :: DescribeVolumesModifications) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVolumesModifications where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVolumesModificationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVolumesModificationsResponse_volumesModifications
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVolumesModifications_nextToken
+          Lens..~ rs
+          Lens.^? describeVolumesModificationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVolumesModifications where
+  type
+    AWSResponse DescribeVolumesModifications =
+      DescribeVolumesModificationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVolumesModificationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "volumeModificationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVolumesModifications
+  where
+  hashWithSalt _salt DescribeVolumesModifications' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` volumeIds
+
+instance Prelude.NFData DescribeVolumesModifications where
+  rnf DescribeVolumesModifications' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf volumeIds
+
+instance Data.ToHeaders DescribeVolumesModifications where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVolumesModifications where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVolumesModifications where
+  toQuery DescribeVolumesModifications' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVolumesModifications" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "VolumeId" Prelude.<$> volumeIds)
+      ]
+
+-- | /See:/ 'newDescribeVolumesModificationsResponse' smart constructor.
+data DescribeVolumesModificationsResponse = DescribeVolumesModificationsResponse'
+  { -- | Token for pagination, null if there are no more results
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the volume modifications.
+    volumesModifications :: Prelude.Maybe [VolumeModification],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVolumesModificationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVolumesModificationsResponse_nextToken' - Token for pagination, null if there are no more results
+--
+-- 'volumesModifications', 'describeVolumesModificationsResponse_volumesModifications' - Information about the volume modifications.
+--
+-- 'httpStatus', 'describeVolumesModificationsResponse_httpStatus' - The response's http status code.
+newDescribeVolumesModificationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVolumesModificationsResponse
+newDescribeVolumesModificationsResponse pHttpStatus_ =
+  DescribeVolumesModificationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      volumesModifications =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Token for pagination, null if there are no more results
+describeVolumesModificationsResponse_nextToken :: Lens.Lens' DescribeVolumesModificationsResponse (Prelude.Maybe Prelude.Text)
+describeVolumesModificationsResponse_nextToken = Lens.lens (\DescribeVolumesModificationsResponse' {nextToken} -> nextToken) (\s@DescribeVolumesModificationsResponse' {} a -> s {nextToken = a} :: DescribeVolumesModificationsResponse)
+
+-- | Information about the volume modifications.
+describeVolumesModificationsResponse_volumesModifications :: Lens.Lens' DescribeVolumesModificationsResponse (Prelude.Maybe [VolumeModification])
+describeVolumesModificationsResponse_volumesModifications = Lens.lens (\DescribeVolumesModificationsResponse' {volumesModifications} -> volumesModifications) (\s@DescribeVolumesModificationsResponse' {} a -> s {volumesModifications = a} :: DescribeVolumesModificationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVolumesModificationsResponse_httpStatus :: Lens.Lens' DescribeVolumesModificationsResponse Prelude.Int
+describeVolumesModificationsResponse_httpStatus = Lens.lens (\DescribeVolumesModificationsResponse' {httpStatus} -> httpStatus) (\s@DescribeVolumesModificationsResponse' {} a -> s {httpStatus = a} :: DescribeVolumesModificationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVolumesModificationsResponse
+  where
+  rnf DescribeVolumesModificationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf volumesModifications
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcAttribute.hs b/gen/Amazonka/EC2/DescribeVpcAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcAttribute.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified attribute of the specified VPC. You can specify
+-- only one attribute at a time.
+module Amazonka.EC2.DescribeVpcAttribute
+  ( -- * Creating a Request
+    DescribeVpcAttribute (..),
+    newDescribeVpcAttribute,
+
+    -- * Request Lenses
+    describeVpcAttribute_dryRun,
+    describeVpcAttribute_attribute,
+    describeVpcAttribute_vpcId,
+
+    -- * Destructuring the Response
+    DescribeVpcAttributeResponse (..),
+    newDescribeVpcAttributeResponse,
+
+    -- * Response Lenses
+    describeVpcAttributeResponse_enableDnsHostnames,
+    describeVpcAttributeResponse_enableDnsSupport,
+    describeVpcAttributeResponse_enableNetworkAddressUsageMetrics,
+    describeVpcAttributeResponse_vpcId,
+    describeVpcAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcAttribute' smart constructor.
+data DescribeVpcAttribute = DescribeVpcAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The VPC attribute.
+    attribute :: VpcAttributeName,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'describeVpcAttribute_attribute' - The VPC attribute.
+--
+-- 'vpcId', 'describeVpcAttribute_vpcId' - The ID of the VPC.
+newDescribeVpcAttribute ::
+  -- | 'attribute'
+  VpcAttributeName ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  DescribeVpcAttribute
+newDescribeVpcAttribute pAttribute_ pVpcId_ =
+  DescribeVpcAttribute'
+    { dryRun = Prelude.Nothing,
+      attribute = pAttribute_,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcAttribute_dryRun :: Lens.Lens' DescribeVpcAttribute (Prelude.Maybe Prelude.Bool)
+describeVpcAttribute_dryRun = Lens.lens (\DescribeVpcAttribute' {dryRun} -> dryRun) (\s@DescribeVpcAttribute' {} a -> s {dryRun = a} :: DescribeVpcAttribute)
+
+-- | The VPC attribute.
+describeVpcAttribute_attribute :: Lens.Lens' DescribeVpcAttribute VpcAttributeName
+describeVpcAttribute_attribute = Lens.lens (\DescribeVpcAttribute' {attribute} -> attribute) (\s@DescribeVpcAttribute' {} a -> s {attribute = a} :: DescribeVpcAttribute)
+
+-- | The ID of the VPC.
+describeVpcAttribute_vpcId :: Lens.Lens' DescribeVpcAttribute Prelude.Text
+describeVpcAttribute_vpcId = Lens.lens (\DescribeVpcAttribute' {vpcId} -> vpcId) (\s@DescribeVpcAttribute' {} a -> s {vpcId = a} :: DescribeVpcAttribute)
+
+instance Core.AWSRequest DescribeVpcAttribute where
+  type
+    AWSResponse DescribeVpcAttribute =
+      DescribeVpcAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcAttributeResponse'
+            Prelude.<$> (x Data..@? "enableDnsHostnames")
+            Prelude.<*> (x Data..@? "enableDnsSupport")
+            Prelude.<*> (x Data..@? "enableNetworkAddressUsageMetrics")
+            Prelude.<*> (x Data..@? "vpcId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpcAttribute where
+  hashWithSalt _salt DescribeVpcAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData DescribeVpcAttribute where
+  rnf DescribeVpcAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders DescribeVpcAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcAttribute where
+  toQuery DescribeVpcAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVpcAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDescribeVpcAttributeResponse' smart constructor.
+data DescribeVpcAttributeResponse = DescribeVpcAttributeResponse'
+  { -- | Indicates whether the instances launched in the VPC get DNS hostnames.
+    -- If this attribute is @true@, instances in the VPC get DNS hostnames;
+    -- otherwise, they do not.
+    enableDnsHostnames :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether DNS resolution is enabled for the VPC. If this
+    -- attribute is @true@, the Amazon DNS server resolves DNS hostnames for
+    -- your instances to their corresponding IP addresses; otherwise, it does
+    -- not.
+    enableDnsSupport :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether Network Address Usage metrics are enabled for your
+    -- VPC.
+    enableNetworkAddressUsageMetrics :: Prelude.Maybe AttributeBooleanValue,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableDnsHostnames', 'describeVpcAttributeResponse_enableDnsHostnames' - Indicates whether the instances launched in the VPC get DNS hostnames.
+-- If this attribute is @true@, instances in the VPC get DNS hostnames;
+-- otherwise, they do not.
+--
+-- 'enableDnsSupport', 'describeVpcAttributeResponse_enableDnsSupport' - Indicates whether DNS resolution is enabled for the VPC. If this
+-- attribute is @true@, the Amazon DNS server resolves DNS hostnames for
+-- your instances to their corresponding IP addresses; otherwise, it does
+-- not.
+--
+-- 'enableNetworkAddressUsageMetrics', 'describeVpcAttributeResponse_enableNetworkAddressUsageMetrics' - Indicates whether Network Address Usage metrics are enabled for your
+-- VPC.
+--
+-- 'vpcId', 'describeVpcAttributeResponse_vpcId' - The ID of the VPC.
+--
+-- 'httpStatus', 'describeVpcAttributeResponse_httpStatus' - The response's http status code.
+newDescribeVpcAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcAttributeResponse
+newDescribeVpcAttributeResponse pHttpStatus_ =
+  DescribeVpcAttributeResponse'
+    { enableDnsHostnames =
+        Prelude.Nothing,
+      enableDnsSupport = Prelude.Nothing,
+      enableNetworkAddressUsageMetrics =
+        Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether the instances launched in the VPC get DNS hostnames.
+-- If this attribute is @true@, instances in the VPC get DNS hostnames;
+-- otherwise, they do not.
+describeVpcAttributeResponse_enableDnsHostnames :: Lens.Lens' DescribeVpcAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeVpcAttributeResponse_enableDnsHostnames = Lens.lens (\DescribeVpcAttributeResponse' {enableDnsHostnames} -> enableDnsHostnames) (\s@DescribeVpcAttributeResponse' {} a -> s {enableDnsHostnames = a} :: DescribeVpcAttributeResponse)
+
+-- | Indicates whether DNS resolution is enabled for the VPC. If this
+-- attribute is @true@, the Amazon DNS server resolves DNS hostnames for
+-- your instances to their corresponding IP addresses; otherwise, it does
+-- not.
+describeVpcAttributeResponse_enableDnsSupport :: Lens.Lens' DescribeVpcAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeVpcAttributeResponse_enableDnsSupport = Lens.lens (\DescribeVpcAttributeResponse' {enableDnsSupport} -> enableDnsSupport) (\s@DescribeVpcAttributeResponse' {} a -> s {enableDnsSupport = a} :: DescribeVpcAttributeResponse)
+
+-- | Indicates whether Network Address Usage metrics are enabled for your
+-- VPC.
+describeVpcAttributeResponse_enableNetworkAddressUsageMetrics :: Lens.Lens' DescribeVpcAttributeResponse (Prelude.Maybe AttributeBooleanValue)
+describeVpcAttributeResponse_enableNetworkAddressUsageMetrics = Lens.lens (\DescribeVpcAttributeResponse' {enableNetworkAddressUsageMetrics} -> enableNetworkAddressUsageMetrics) (\s@DescribeVpcAttributeResponse' {} a -> s {enableNetworkAddressUsageMetrics = a} :: DescribeVpcAttributeResponse)
+
+-- | The ID of the VPC.
+describeVpcAttributeResponse_vpcId :: Lens.Lens' DescribeVpcAttributeResponse (Prelude.Maybe Prelude.Text)
+describeVpcAttributeResponse_vpcId = Lens.lens (\DescribeVpcAttributeResponse' {vpcId} -> vpcId) (\s@DescribeVpcAttributeResponse' {} a -> s {vpcId = a} :: DescribeVpcAttributeResponse)
+
+-- | The response's http status code.
+describeVpcAttributeResponse_httpStatus :: Lens.Lens' DescribeVpcAttributeResponse Prelude.Int
+describeVpcAttributeResponse_httpStatus = Lens.lens (\DescribeVpcAttributeResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcAttributeResponse' {} a -> s {httpStatus = a} :: DescribeVpcAttributeResponse)
+
+instance Prelude.NFData DescribeVpcAttributeResponse where
+  rnf DescribeVpcAttributeResponse' {..} =
+    Prelude.rnf enableDnsHostnames
+      `Prelude.seq` Prelude.rnf enableDnsSupport
+      `Prelude.seq` Prelude.rnf enableNetworkAddressUsageMetrics
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcClassicLink.hs b/gen/Amazonka/EC2/DescribeVpcClassicLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcClassicLink.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcClassicLink
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the ClassicLink status of one or more VPCs.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DescribeVpcClassicLink
+  ( -- * Creating a Request
+    DescribeVpcClassicLink (..),
+    newDescribeVpcClassicLink,
+
+    -- * Request Lenses
+    describeVpcClassicLink_dryRun,
+    describeVpcClassicLink_filters,
+    describeVpcClassicLink_vpcIds,
+
+    -- * Destructuring the Response
+    DescribeVpcClassicLinkResponse (..),
+    newDescribeVpcClassicLinkResponse,
+
+    -- * Response Lenses
+    describeVpcClassicLinkResponse_vpcs,
+    describeVpcClassicLinkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcClassicLink' smart constructor.
+data DescribeVpcClassicLink = DescribeVpcClassicLink'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @is-classic-link-enabled@ - Whether the VPC is enabled for
+    --     ClassicLink (@true@ | @false@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more VPCs for which you want to describe the ClassicLink status.
+    vpcIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcClassicLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcClassicLink_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcClassicLink_filters' - One or more filters.
+--
+-- -   @is-classic-link-enabled@ - Whether the VPC is enabled for
+--     ClassicLink (@true@ | @false@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'vpcIds', 'describeVpcClassicLink_vpcIds' - One or more VPCs for which you want to describe the ClassicLink status.
+newDescribeVpcClassicLink ::
+  DescribeVpcClassicLink
+newDescribeVpcClassicLink =
+  DescribeVpcClassicLink'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      vpcIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcClassicLink_dryRun :: Lens.Lens' DescribeVpcClassicLink (Prelude.Maybe Prelude.Bool)
+describeVpcClassicLink_dryRun = Lens.lens (\DescribeVpcClassicLink' {dryRun} -> dryRun) (\s@DescribeVpcClassicLink' {} a -> s {dryRun = a} :: DescribeVpcClassicLink)
+
+-- | One or more filters.
+--
+-- -   @is-classic-link-enabled@ - Whether the VPC is enabled for
+--     ClassicLink (@true@ | @false@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeVpcClassicLink_filters :: Lens.Lens' DescribeVpcClassicLink (Prelude.Maybe [Filter])
+describeVpcClassicLink_filters = Lens.lens (\DescribeVpcClassicLink' {filters} -> filters) (\s@DescribeVpcClassicLink' {} a -> s {filters = a} :: DescribeVpcClassicLink) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more VPCs for which you want to describe the ClassicLink status.
+describeVpcClassicLink_vpcIds :: Lens.Lens' DescribeVpcClassicLink (Prelude.Maybe [Prelude.Text])
+describeVpcClassicLink_vpcIds = Lens.lens (\DescribeVpcClassicLink' {vpcIds} -> vpcIds) (\s@DescribeVpcClassicLink' {} a -> s {vpcIds = a} :: DescribeVpcClassicLink) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeVpcClassicLink where
+  type
+    AWSResponse DescribeVpcClassicLink =
+      DescribeVpcClassicLinkResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcClassicLinkResponse'
+            Prelude.<$> ( x
+                            Data..@? "vpcSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpcClassicLink where
+  hashWithSalt _salt DescribeVpcClassicLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` vpcIds
+
+instance Prelude.NFData DescribeVpcClassicLink where
+  rnf DescribeVpcClassicLink' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf vpcIds
+
+instance Data.ToHeaders DescribeVpcClassicLink where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcClassicLink where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcClassicLink where
+  toQuery DescribeVpcClassicLink' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVpcClassicLink" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          (Data.toQueryList "VpcId" Prelude.<$> vpcIds)
+      ]
+
+-- | /See:/ 'newDescribeVpcClassicLinkResponse' smart constructor.
+data DescribeVpcClassicLinkResponse = DescribeVpcClassicLinkResponse'
+  { -- | The ClassicLink status of one or more VPCs.
+    vpcs :: Prelude.Maybe [VpcClassicLink],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcClassicLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcs', 'describeVpcClassicLinkResponse_vpcs' - The ClassicLink status of one or more VPCs.
+--
+-- 'httpStatus', 'describeVpcClassicLinkResponse_httpStatus' - The response's http status code.
+newDescribeVpcClassicLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcClassicLinkResponse
+newDescribeVpcClassicLinkResponse pHttpStatus_ =
+  DescribeVpcClassicLinkResponse'
+    { vpcs =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ClassicLink status of one or more VPCs.
+describeVpcClassicLinkResponse_vpcs :: Lens.Lens' DescribeVpcClassicLinkResponse (Prelude.Maybe [VpcClassicLink])
+describeVpcClassicLinkResponse_vpcs = Lens.lens (\DescribeVpcClassicLinkResponse' {vpcs} -> vpcs) (\s@DescribeVpcClassicLinkResponse' {} a -> s {vpcs = a} :: DescribeVpcClassicLinkResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcClassicLinkResponse_httpStatus :: Lens.Lens' DescribeVpcClassicLinkResponse Prelude.Int
+describeVpcClassicLinkResponse_httpStatus = Lens.lens (\DescribeVpcClassicLinkResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcClassicLinkResponse' {} a -> s {httpStatus = a} :: DescribeVpcClassicLinkResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcClassicLinkResponse
+  where
+  rnf DescribeVpcClassicLinkResponse' {..} =
+    Prelude.rnf vpcs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcClassicLinkDnsSupport.hs b/gen/Amazonka/EC2/DescribeVpcClassicLinkDnsSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcClassicLinkDnsSupport.hs
@@ -0,0 +1,273 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcClassicLinkDnsSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Describes the ClassicLink DNS support status of one or more VPCs. If
+-- enabled, the DNS hostname of a linked EC2-Classic instance resolves to
+-- its private IP address when addressed from an instance in the VPC to
+-- which it\'s linked. Similarly, the DNS hostname of an instance in a VPC
+-- resolves to its private IP address when addressed from a linked
+-- EC2-Classic instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcClassicLinkDnsSupport
+  ( -- * Creating a Request
+    DescribeVpcClassicLinkDnsSupport (..),
+    newDescribeVpcClassicLinkDnsSupport,
+
+    -- * Request Lenses
+    describeVpcClassicLinkDnsSupport_maxResults,
+    describeVpcClassicLinkDnsSupport_nextToken,
+    describeVpcClassicLinkDnsSupport_vpcIds,
+
+    -- * Destructuring the Response
+    DescribeVpcClassicLinkDnsSupportResponse (..),
+    newDescribeVpcClassicLinkDnsSupportResponse,
+
+    -- * Response Lenses
+    describeVpcClassicLinkDnsSupportResponse_nextToken,
+    describeVpcClassicLinkDnsSupportResponse_vpcs,
+    describeVpcClassicLinkDnsSupportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcClassicLinkDnsSupport' smart constructor.
+data DescribeVpcClassicLinkDnsSupport = DescribeVpcClassicLinkDnsSupport'
+  { -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more VPC IDs.
+    vpcIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcClassicLinkDnsSupport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'describeVpcClassicLinkDnsSupport_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVpcClassicLinkDnsSupport_nextToken' - The token for the next page of results.
+--
+-- 'vpcIds', 'describeVpcClassicLinkDnsSupport_vpcIds' - One or more VPC IDs.
+newDescribeVpcClassicLinkDnsSupport ::
+  DescribeVpcClassicLinkDnsSupport
+newDescribeVpcClassicLinkDnsSupport =
+  DescribeVpcClassicLinkDnsSupport'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vpcIds = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVpcClassicLinkDnsSupport_maxResults :: Lens.Lens' DescribeVpcClassicLinkDnsSupport (Prelude.Maybe Prelude.Natural)
+describeVpcClassicLinkDnsSupport_maxResults = Lens.lens (\DescribeVpcClassicLinkDnsSupport' {maxResults} -> maxResults) (\s@DescribeVpcClassicLinkDnsSupport' {} a -> s {maxResults = a} :: DescribeVpcClassicLinkDnsSupport)
+
+-- | The token for the next page of results.
+describeVpcClassicLinkDnsSupport_nextToken :: Lens.Lens' DescribeVpcClassicLinkDnsSupport (Prelude.Maybe Prelude.Text)
+describeVpcClassicLinkDnsSupport_nextToken = Lens.lens (\DescribeVpcClassicLinkDnsSupport' {nextToken} -> nextToken) (\s@DescribeVpcClassicLinkDnsSupport' {} a -> s {nextToken = a} :: DescribeVpcClassicLinkDnsSupport)
+
+-- | One or more VPC IDs.
+describeVpcClassicLinkDnsSupport_vpcIds :: Lens.Lens' DescribeVpcClassicLinkDnsSupport (Prelude.Maybe [Prelude.Text])
+describeVpcClassicLinkDnsSupport_vpcIds = Lens.lens (\DescribeVpcClassicLinkDnsSupport' {vpcIds} -> vpcIds) (\s@DescribeVpcClassicLinkDnsSupport' {} a -> s {vpcIds = a} :: DescribeVpcClassicLinkDnsSupport) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeVpcClassicLinkDnsSupport
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcClassicLinkDnsSupportResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcClassicLinkDnsSupportResponse_vpcs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcClassicLinkDnsSupport_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcClassicLinkDnsSupportResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVpcClassicLinkDnsSupport
+  where
+  type
+    AWSResponse DescribeVpcClassicLinkDnsSupport =
+      DescribeVpcClassicLinkDnsSupportResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcClassicLinkDnsSupportResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "vpcs"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcClassicLinkDnsSupport
+  where
+  hashWithSalt
+    _salt
+    DescribeVpcClassicLinkDnsSupport' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` vpcIds
+
+instance
+  Prelude.NFData
+    DescribeVpcClassicLinkDnsSupport
+  where
+  rnf DescribeVpcClassicLinkDnsSupport' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcIds
+
+instance
+  Data.ToHeaders
+    DescribeVpcClassicLinkDnsSupport
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcClassicLinkDnsSupport where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeVpcClassicLinkDnsSupport
+  where
+  toQuery DescribeVpcClassicLinkDnsSupport' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVpcClassicLinkDnsSupport" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "VpcIds" Prelude.<$> vpcIds)
+      ]
+
+-- | /See:/ 'newDescribeVpcClassicLinkDnsSupportResponse' smart constructor.
+data DescribeVpcClassicLinkDnsSupportResponse = DescribeVpcClassicLinkDnsSupportResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the ClassicLink DNS support status of the VPCs.
+    vpcs :: Prelude.Maybe [ClassicLinkDnsSupport],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcClassicLinkDnsSupportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcClassicLinkDnsSupportResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'vpcs', 'describeVpcClassicLinkDnsSupportResponse_vpcs' - Information about the ClassicLink DNS support status of the VPCs.
+--
+-- 'httpStatus', 'describeVpcClassicLinkDnsSupportResponse_httpStatus' - The response's http status code.
+newDescribeVpcClassicLinkDnsSupportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcClassicLinkDnsSupportResponse
+newDescribeVpcClassicLinkDnsSupportResponse
+  pHttpStatus_ =
+    DescribeVpcClassicLinkDnsSupportResponse'
+      { nextToken =
+          Prelude.Nothing,
+        vpcs = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcClassicLinkDnsSupportResponse_nextToken :: Lens.Lens' DescribeVpcClassicLinkDnsSupportResponse (Prelude.Maybe Prelude.Text)
+describeVpcClassicLinkDnsSupportResponse_nextToken = Lens.lens (\DescribeVpcClassicLinkDnsSupportResponse' {nextToken} -> nextToken) (\s@DescribeVpcClassicLinkDnsSupportResponse' {} a -> s {nextToken = a} :: DescribeVpcClassicLinkDnsSupportResponse)
+
+-- | Information about the ClassicLink DNS support status of the VPCs.
+describeVpcClassicLinkDnsSupportResponse_vpcs :: Lens.Lens' DescribeVpcClassicLinkDnsSupportResponse (Prelude.Maybe [ClassicLinkDnsSupport])
+describeVpcClassicLinkDnsSupportResponse_vpcs = Lens.lens (\DescribeVpcClassicLinkDnsSupportResponse' {vpcs} -> vpcs) (\s@DescribeVpcClassicLinkDnsSupportResponse' {} a -> s {vpcs = a} :: DescribeVpcClassicLinkDnsSupportResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcClassicLinkDnsSupportResponse_httpStatus :: Lens.Lens' DescribeVpcClassicLinkDnsSupportResponse Prelude.Int
+describeVpcClassicLinkDnsSupportResponse_httpStatus = Lens.lens (\DescribeVpcClassicLinkDnsSupportResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcClassicLinkDnsSupportResponse' {} a -> s {httpStatus = a} :: DescribeVpcClassicLinkDnsSupportResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcClassicLinkDnsSupportResponse
+  where
+  rnf DescribeVpcClassicLinkDnsSupportResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcEndpointConnectionNotifications.hs b/gen/Amazonka/EC2/DescribeVpcEndpointConnectionNotifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcEndpointConnectionNotifications.hs
@@ -0,0 +1,348 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcEndpointConnectionNotifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the connection notifications for VPC endpoints and VPC
+-- endpoint services.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcEndpointConnectionNotifications
+  ( -- * Creating a Request
+    DescribeVpcEndpointConnectionNotifications (..),
+    newDescribeVpcEndpointConnectionNotifications,
+
+    -- * Request Lenses
+    describeVpcEndpointConnectionNotifications_connectionNotificationId,
+    describeVpcEndpointConnectionNotifications_dryRun,
+    describeVpcEndpointConnectionNotifications_filters,
+    describeVpcEndpointConnectionNotifications_maxResults,
+    describeVpcEndpointConnectionNotifications_nextToken,
+
+    -- * Destructuring the Response
+    DescribeVpcEndpointConnectionNotificationsResponse (..),
+    newDescribeVpcEndpointConnectionNotificationsResponse,
+
+    -- * Response Lenses
+    describeVpcEndpointConnectionNotificationsResponse_connectionNotificationSet,
+    describeVpcEndpointConnectionNotificationsResponse_nextToken,
+    describeVpcEndpointConnectionNotificationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcEndpointConnectionNotifications' smart constructor.
+data DescribeVpcEndpointConnectionNotifications = DescribeVpcEndpointConnectionNotifications'
+  { -- | The ID of the notification.
+    connectionNotificationId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @connection-notification-arn@ - The ARN of the SNS topic for the
+    --     notification.
+    --
+    -- -   @connection-notification-id@ - The ID of the notification.
+    --
+    -- -   @connection-notification-state@ - The state of the notification
+    --     (@Enabled@ | @Disabled@).
+    --
+    -- -   @connection-notification-type@ - The type of notification (@Topic@).
+    --
+    -- -   @service-id@ - The ID of the endpoint service.
+    --
+    -- -   @vpc-endpoint-id@ - The ID of the VPC endpoint.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in a single call. To retrieve
+    -- the remaining results, make another request with the returned
+    -- @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointConnectionNotifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionNotificationId', 'describeVpcEndpointConnectionNotifications_connectionNotificationId' - The ID of the notification.
+--
+-- 'dryRun', 'describeVpcEndpointConnectionNotifications_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcEndpointConnectionNotifications_filters' - One or more filters.
+--
+-- -   @connection-notification-arn@ - The ARN of the SNS topic for the
+--     notification.
+--
+-- -   @connection-notification-id@ - The ID of the notification.
+--
+-- -   @connection-notification-state@ - The state of the notification
+--     (@Enabled@ | @Disabled@).
+--
+-- -   @connection-notification-type@ - The type of notification (@Topic@).
+--
+-- -   @service-id@ - The ID of the endpoint service.
+--
+-- -   @vpc-endpoint-id@ - The ID of the VPC endpoint.
+--
+-- 'maxResults', 'describeVpcEndpointConnectionNotifications_maxResults' - The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned
+-- @NextToken@ value.
+--
+-- 'nextToken', 'describeVpcEndpointConnectionNotifications_nextToken' - The token to request the next page of results.
+newDescribeVpcEndpointConnectionNotifications ::
+  DescribeVpcEndpointConnectionNotifications
+newDescribeVpcEndpointConnectionNotifications =
+  DescribeVpcEndpointConnectionNotifications'
+    { connectionNotificationId =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ID of the notification.
+describeVpcEndpointConnectionNotifications_connectionNotificationId :: Lens.Lens' DescribeVpcEndpointConnectionNotifications (Prelude.Maybe Prelude.Text)
+describeVpcEndpointConnectionNotifications_connectionNotificationId = Lens.lens (\DescribeVpcEndpointConnectionNotifications' {connectionNotificationId} -> connectionNotificationId) (\s@DescribeVpcEndpointConnectionNotifications' {} a -> s {connectionNotificationId = a} :: DescribeVpcEndpointConnectionNotifications)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcEndpointConnectionNotifications_dryRun :: Lens.Lens' DescribeVpcEndpointConnectionNotifications (Prelude.Maybe Prelude.Bool)
+describeVpcEndpointConnectionNotifications_dryRun = Lens.lens (\DescribeVpcEndpointConnectionNotifications' {dryRun} -> dryRun) (\s@DescribeVpcEndpointConnectionNotifications' {} a -> s {dryRun = a} :: DescribeVpcEndpointConnectionNotifications)
+
+-- | One or more filters.
+--
+-- -   @connection-notification-arn@ - The ARN of the SNS topic for the
+--     notification.
+--
+-- -   @connection-notification-id@ - The ID of the notification.
+--
+-- -   @connection-notification-state@ - The state of the notification
+--     (@Enabled@ | @Disabled@).
+--
+-- -   @connection-notification-type@ - The type of notification (@Topic@).
+--
+-- -   @service-id@ - The ID of the endpoint service.
+--
+-- -   @vpc-endpoint-id@ - The ID of the VPC endpoint.
+describeVpcEndpointConnectionNotifications_filters :: Lens.Lens' DescribeVpcEndpointConnectionNotifications (Prelude.Maybe [Filter])
+describeVpcEndpointConnectionNotifications_filters = Lens.lens (\DescribeVpcEndpointConnectionNotifications' {filters} -> filters) (\s@DescribeVpcEndpointConnectionNotifications' {} a -> s {filters = a} :: DescribeVpcEndpointConnectionNotifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. To retrieve
+-- the remaining results, make another request with the returned
+-- @NextToken@ value.
+describeVpcEndpointConnectionNotifications_maxResults :: Lens.Lens' DescribeVpcEndpointConnectionNotifications (Prelude.Maybe Prelude.Int)
+describeVpcEndpointConnectionNotifications_maxResults = Lens.lens (\DescribeVpcEndpointConnectionNotifications' {maxResults} -> maxResults) (\s@DescribeVpcEndpointConnectionNotifications' {} a -> s {maxResults = a} :: DescribeVpcEndpointConnectionNotifications)
+
+-- | The token to request the next page of results.
+describeVpcEndpointConnectionNotifications_nextToken :: Lens.Lens' DescribeVpcEndpointConnectionNotifications (Prelude.Maybe Prelude.Text)
+describeVpcEndpointConnectionNotifications_nextToken = Lens.lens (\DescribeVpcEndpointConnectionNotifications' {nextToken} -> nextToken) (\s@DescribeVpcEndpointConnectionNotifications' {} a -> s {nextToken = a} :: DescribeVpcEndpointConnectionNotifications)
+
+instance
+  Core.AWSPager
+    DescribeVpcEndpointConnectionNotifications
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointConnectionNotificationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointConnectionNotificationsResponse_connectionNotificationSet
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcEndpointConnectionNotifications_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcEndpointConnectionNotificationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVpcEndpointConnectionNotifications
+  where
+  type
+    AWSResponse
+      DescribeVpcEndpointConnectionNotifications =
+      DescribeVpcEndpointConnectionNotificationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcEndpointConnectionNotificationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "connectionNotificationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcEndpointConnectionNotifications
+  where
+  hashWithSalt
+    _salt
+    DescribeVpcEndpointConnectionNotifications' {..} =
+      _salt
+        `Prelude.hashWithSalt` connectionNotificationId
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointConnectionNotifications
+  where
+  rnf DescribeVpcEndpointConnectionNotifications' {..} =
+    Prelude.rnf connectionNotificationId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeVpcEndpointConnectionNotifications
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeVpcEndpointConnectionNotifications
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeVpcEndpointConnectionNotifications
+  where
+  toQuery
+    DescribeVpcEndpointConnectionNotifications' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DescribeVpcEndpointConnectionNotifications" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "ConnectionNotificationId"
+            Data.=: connectionNotificationId,
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken
+        ]
+
+-- | /See:/ 'newDescribeVpcEndpointConnectionNotificationsResponse' smart constructor.
+data DescribeVpcEndpointConnectionNotificationsResponse = DescribeVpcEndpointConnectionNotificationsResponse'
+  { -- | One or more notifications.
+    connectionNotificationSet :: Prelude.Maybe [ConnectionNotification],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointConnectionNotificationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionNotificationSet', 'describeVpcEndpointConnectionNotificationsResponse_connectionNotificationSet' - One or more notifications.
+--
+-- 'nextToken', 'describeVpcEndpointConnectionNotificationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeVpcEndpointConnectionNotificationsResponse_httpStatus' - The response's http status code.
+newDescribeVpcEndpointConnectionNotificationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcEndpointConnectionNotificationsResponse
+newDescribeVpcEndpointConnectionNotificationsResponse
+  pHttpStatus_ =
+    DescribeVpcEndpointConnectionNotificationsResponse'
+      { connectionNotificationSet =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | One or more notifications.
+describeVpcEndpointConnectionNotificationsResponse_connectionNotificationSet :: Lens.Lens' DescribeVpcEndpointConnectionNotificationsResponse (Prelude.Maybe [ConnectionNotification])
+describeVpcEndpointConnectionNotificationsResponse_connectionNotificationSet = Lens.lens (\DescribeVpcEndpointConnectionNotificationsResponse' {connectionNotificationSet} -> connectionNotificationSet) (\s@DescribeVpcEndpointConnectionNotificationsResponse' {} a -> s {connectionNotificationSet = a} :: DescribeVpcEndpointConnectionNotificationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcEndpointConnectionNotificationsResponse_nextToken :: Lens.Lens' DescribeVpcEndpointConnectionNotificationsResponse (Prelude.Maybe Prelude.Text)
+describeVpcEndpointConnectionNotificationsResponse_nextToken = Lens.lens (\DescribeVpcEndpointConnectionNotificationsResponse' {nextToken} -> nextToken) (\s@DescribeVpcEndpointConnectionNotificationsResponse' {} a -> s {nextToken = a} :: DescribeVpcEndpointConnectionNotificationsResponse)
+
+-- | The response's http status code.
+describeVpcEndpointConnectionNotificationsResponse_httpStatus :: Lens.Lens' DescribeVpcEndpointConnectionNotificationsResponse Prelude.Int
+describeVpcEndpointConnectionNotificationsResponse_httpStatus = Lens.lens (\DescribeVpcEndpointConnectionNotificationsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcEndpointConnectionNotificationsResponse' {} a -> s {httpStatus = a} :: DescribeVpcEndpointConnectionNotificationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointConnectionNotificationsResponse
+  where
+  rnf
+    DescribeVpcEndpointConnectionNotificationsResponse' {..} =
+      Prelude.rnf connectionNotificationSet
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcEndpointConnections.hs b/gen/Amazonka/EC2/DescribeVpcEndpointConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcEndpointConnections.hs
@@ -0,0 +1,324 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcEndpointConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the VPC endpoint connections to your VPC endpoint services,
+-- including any endpoints that are pending your acceptance.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcEndpointConnections
+  ( -- * Creating a Request
+    DescribeVpcEndpointConnections (..),
+    newDescribeVpcEndpointConnections,
+
+    -- * Request Lenses
+    describeVpcEndpointConnections_dryRun,
+    describeVpcEndpointConnections_filters,
+    describeVpcEndpointConnections_maxResults,
+    describeVpcEndpointConnections_nextToken,
+
+    -- * Destructuring the Response
+    DescribeVpcEndpointConnectionsResponse (..),
+    newDescribeVpcEndpointConnectionsResponse,
+
+    -- * Response Lenses
+    describeVpcEndpointConnectionsResponse_nextToken,
+    describeVpcEndpointConnectionsResponse_vpcEndpointConnections,
+    describeVpcEndpointConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcEndpointConnections' smart constructor.
+data DescribeVpcEndpointConnections = DescribeVpcEndpointConnections'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @ip-address-type@ - The IP address type (@ipv4@ | @ipv6@).
+    --
+    -- -   @service-id@ - The ID of the service.
+    --
+    -- -   @vpc-endpoint-owner@ - The ID of the Amazon Web Services account ID
+    --     that owns the endpoint.
+    --
+    -- -   @vpc-endpoint-state@ - The state of the endpoint
+    --     (@pendingAcceptance@ | @pending@ | @available@ | @deleting@ |
+    --     @deleted@ | @rejected@ | @failed@).
+    --
+    -- -   @vpc-endpoint-id@ - The ID of the endpoint.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results of the initial request can be seen by
+    -- sending another request with the returned @NextToken@ value. This value
+    -- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+    -- 1,000, only 1,000 results are returned.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcEndpointConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcEndpointConnections_filters' - One or more filters.
+--
+-- -   @ip-address-type@ - The IP address type (@ipv4@ | @ipv6@).
+--
+-- -   @service-id@ - The ID of the service.
+--
+-- -   @vpc-endpoint-owner@ - The ID of the Amazon Web Services account ID
+--     that owns the endpoint.
+--
+-- -   @vpc-endpoint-state@ - The state of the endpoint
+--     (@pendingAcceptance@ | @pending@ | @available@ | @deleting@ |
+--     @deleted@ | @rejected@ | @failed@).
+--
+-- -   @vpc-endpoint-id@ - The ID of the endpoint.
+--
+-- 'maxResults', 'describeVpcEndpointConnections_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+-- 1,000, only 1,000 results are returned.
+--
+-- 'nextToken', 'describeVpcEndpointConnections_nextToken' - The token to retrieve the next page of results.
+newDescribeVpcEndpointConnections ::
+  DescribeVpcEndpointConnections
+newDescribeVpcEndpointConnections =
+  DescribeVpcEndpointConnections'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcEndpointConnections_dryRun :: Lens.Lens' DescribeVpcEndpointConnections (Prelude.Maybe Prelude.Bool)
+describeVpcEndpointConnections_dryRun = Lens.lens (\DescribeVpcEndpointConnections' {dryRun} -> dryRun) (\s@DescribeVpcEndpointConnections' {} a -> s {dryRun = a} :: DescribeVpcEndpointConnections)
+
+-- | One or more filters.
+--
+-- -   @ip-address-type@ - The IP address type (@ipv4@ | @ipv6@).
+--
+-- -   @service-id@ - The ID of the service.
+--
+-- -   @vpc-endpoint-owner@ - The ID of the Amazon Web Services account ID
+--     that owns the endpoint.
+--
+-- -   @vpc-endpoint-state@ - The state of the endpoint
+--     (@pendingAcceptance@ | @pending@ | @available@ | @deleting@ |
+--     @deleted@ | @rejected@ | @failed@).
+--
+-- -   @vpc-endpoint-id@ - The ID of the endpoint.
+describeVpcEndpointConnections_filters :: Lens.Lens' DescribeVpcEndpointConnections (Prelude.Maybe [Filter])
+describeVpcEndpointConnections_filters = Lens.lens (\DescribeVpcEndpointConnections' {filters} -> filters) (\s@DescribeVpcEndpointConnections' {} a -> s {filters = a} :: DescribeVpcEndpointConnections) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+-- 1,000, only 1,000 results are returned.
+describeVpcEndpointConnections_maxResults :: Lens.Lens' DescribeVpcEndpointConnections (Prelude.Maybe Prelude.Int)
+describeVpcEndpointConnections_maxResults = Lens.lens (\DescribeVpcEndpointConnections' {maxResults} -> maxResults) (\s@DescribeVpcEndpointConnections' {} a -> s {maxResults = a} :: DescribeVpcEndpointConnections)
+
+-- | The token to retrieve the next page of results.
+describeVpcEndpointConnections_nextToken :: Lens.Lens' DescribeVpcEndpointConnections (Prelude.Maybe Prelude.Text)
+describeVpcEndpointConnections_nextToken = Lens.lens (\DescribeVpcEndpointConnections' {nextToken} -> nextToken) (\s@DescribeVpcEndpointConnections' {} a -> s {nextToken = a} :: DescribeVpcEndpointConnections)
+
+instance Core.AWSPager DescribeVpcEndpointConnections where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointConnectionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointConnectionsResponse_vpcEndpointConnections
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcEndpointConnections_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcEndpointConnectionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVpcEndpointConnections
+  where
+  type
+    AWSResponse DescribeVpcEndpointConnections =
+      DescribeVpcEndpointConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcEndpointConnectionsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "vpcEndpointConnectionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcEndpointConnections
+  where
+  hashWithSalt
+    _salt
+    DescribeVpcEndpointConnections' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointConnections
+  where
+  rnf DescribeVpcEndpointConnections' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeVpcEndpointConnections
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcEndpointConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcEndpointConnections where
+  toQuery DescribeVpcEndpointConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVpcEndpointConnections" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newDescribeVpcEndpointConnectionsResponse' smart constructor.
+data DescribeVpcEndpointConnectionsResponse = DescribeVpcEndpointConnectionsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more VPC endpoint connections.
+    vpcEndpointConnections :: Prelude.Maybe [VpcEndpointConnection],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcEndpointConnectionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'vpcEndpointConnections', 'describeVpcEndpointConnectionsResponse_vpcEndpointConnections' - Information about one or more VPC endpoint connections.
+--
+-- 'httpStatus', 'describeVpcEndpointConnectionsResponse_httpStatus' - The response's http status code.
+newDescribeVpcEndpointConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcEndpointConnectionsResponse
+newDescribeVpcEndpointConnectionsResponse
+  pHttpStatus_ =
+    DescribeVpcEndpointConnectionsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        vpcEndpointConnections =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcEndpointConnectionsResponse_nextToken :: Lens.Lens' DescribeVpcEndpointConnectionsResponse (Prelude.Maybe Prelude.Text)
+describeVpcEndpointConnectionsResponse_nextToken = Lens.lens (\DescribeVpcEndpointConnectionsResponse' {nextToken} -> nextToken) (\s@DescribeVpcEndpointConnectionsResponse' {} a -> s {nextToken = a} :: DescribeVpcEndpointConnectionsResponse)
+
+-- | Information about one or more VPC endpoint connections.
+describeVpcEndpointConnectionsResponse_vpcEndpointConnections :: Lens.Lens' DescribeVpcEndpointConnectionsResponse (Prelude.Maybe [VpcEndpointConnection])
+describeVpcEndpointConnectionsResponse_vpcEndpointConnections = Lens.lens (\DescribeVpcEndpointConnectionsResponse' {vpcEndpointConnections} -> vpcEndpointConnections) (\s@DescribeVpcEndpointConnectionsResponse' {} a -> s {vpcEndpointConnections = a} :: DescribeVpcEndpointConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcEndpointConnectionsResponse_httpStatus :: Lens.Lens' DescribeVpcEndpointConnectionsResponse Prelude.Int
+describeVpcEndpointConnectionsResponse_httpStatus = Lens.lens (\DescribeVpcEndpointConnectionsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcEndpointConnectionsResponse' {} a -> s {httpStatus = a} :: DescribeVpcEndpointConnectionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointConnectionsResponse
+  where
+  rnf DescribeVpcEndpointConnectionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcEndpointConnections
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcEndpointServiceConfigurations.hs b/gen/Amazonka/EC2/DescribeVpcEndpointServiceConfigurations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcEndpointServiceConfigurations.hs
@@ -0,0 +1,372 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcEndpointServiceConfigurations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the VPC endpoint service configurations in your account (your
+-- services).
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcEndpointServiceConfigurations
+  ( -- * Creating a Request
+    DescribeVpcEndpointServiceConfigurations (..),
+    newDescribeVpcEndpointServiceConfigurations,
+
+    -- * Request Lenses
+    describeVpcEndpointServiceConfigurations_dryRun,
+    describeVpcEndpointServiceConfigurations_filters,
+    describeVpcEndpointServiceConfigurations_maxResults,
+    describeVpcEndpointServiceConfigurations_nextToken,
+    describeVpcEndpointServiceConfigurations_serviceIds,
+
+    -- * Destructuring the Response
+    DescribeVpcEndpointServiceConfigurationsResponse (..),
+    newDescribeVpcEndpointServiceConfigurationsResponse,
+
+    -- * Response Lenses
+    describeVpcEndpointServiceConfigurationsResponse_nextToken,
+    describeVpcEndpointServiceConfigurationsResponse_serviceConfigurations,
+    describeVpcEndpointServiceConfigurationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcEndpointServiceConfigurations' smart constructor.
+data DescribeVpcEndpointServiceConfigurations = DescribeVpcEndpointServiceConfigurations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @service-name@ - The name of the service.
+    --
+    -- -   @service-id@ - The ID of the service.
+    --
+    -- -   @service-state@ - The state of the service (@Pending@ | @Available@
+    --     | @Deleting@ | @Deleted@ | @Failed@).
+    --
+    -- -   @supported-ip-address-types@ - The IP address type (@ipv4@ |
+    --     @ipv6@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results of the initial request can be seen by
+    -- sending another request with the returned @NextToken@ value. This value
+    -- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+    -- 1,000, only 1,000 results are returned.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of one or more services.
+    serviceIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointServiceConfigurations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcEndpointServiceConfigurations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcEndpointServiceConfigurations_filters' - One or more filters.
+--
+-- -   @service-name@ - The name of the service.
+--
+-- -   @service-id@ - The ID of the service.
+--
+-- -   @service-state@ - The state of the service (@Pending@ | @Available@
+--     | @Deleting@ | @Deleted@ | @Failed@).
+--
+-- -   @supported-ip-address-types@ - The IP address type (@ipv4@ |
+--     @ipv6@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'describeVpcEndpointServiceConfigurations_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+-- 1,000, only 1,000 results are returned.
+--
+-- 'nextToken', 'describeVpcEndpointServiceConfigurations_nextToken' - The token to retrieve the next page of results.
+--
+-- 'serviceIds', 'describeVpcEndpointServiceConfigurations_serviceIds' - The IDs of one or more services.
+newDescribeVpcEndpointServiceConfigurations ::
+  DescribeVpcEndpointServiceConfigurations
+newDescribeVpcEndpointServiceConfigurations =
+  DescribeVpcEndpointServiceConfigurations'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serviceIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcEndpointServiceConfigurations_dryRun :: Lens.Lens' DescribeVpcEndpointServiceConfigurations (Prelude.Maybe Prelude.Bool)
+describeVpcEndpointServiceConfigurations_dryRun = Lens.lens (\DescribeVpcEndpointServiceConfigurations' {dryRun} -> dryRun) (\s@DescribeVpcEndpointServiceConfigurations' {} a -> s {dryRun = a} :: DescribeVpcEndpointServiceConfigurations)
+
+-- | One or more filters.
+--
+-- -   @service-name@ - The name of the service.
+--
+-- -   @service-id@ - The ID of the service.
+--
+-- -   @service-state@ - The state of the service (@Pending@ | @Available@
+--     | @Deleting@ | @Deleted@ | @Failed@).
+--
+-- -   @supported-ip-address-types@ - The IP address type (@ipv4@ |
+--     @ipv6@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeVpcEndpointServiceConfigurations_filters :: Lens.Lens' DescribeVpcEndpointServiceConfigurations (Prelude.Maybe [Filter])
+describeVpcEndpointServiceConfigurations_filters = Lens.lens (\DescribeVpcEndpointServiceConfigurations' {filters} -> filters) (\s@DescribeVpcEndpointServiceConfigurations' {} a -> s {filters = a} :: DescribeVpcEndpointServiceConfigurations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+-- 1,000, only 1,000 results are returned.
+describeVpcEndpointServiceConfigurations_maxResults :: Lens.Lens' DescribeVpcEndpointServiceConfigurations (Prelude.Maybe Prelude.Int)
+describeVpcEndpointServiceConfigurations_maxResults = Lens.lens (\DescribeVpcEndpointServiceConfigurations' {maxResults} -> maxResults) (\s@DescribeVpcEndpointServiceConfigurations' {} a -> s {maxResults = a} :: DescribeVpcEndpointServiceConfigurations)
+
+-- | The token to retrieve the next page of results.
+describeVpcEndpointServiceConfigurations_nextToken :: Lens.Lens' DescribeVpcEndpointServiceConfigurations (Prelude.Maybe Prelude.Text)
+describeVpcEndpointServiceConfigurations_nextToken = Lens.lens (\DescribeVpcEndpointServiceConfigurations' {nextToken} -> nextToken) (\s@DescribeVpcEndpointServiceConfigurations' {} a -> s {nextToken = a} :: DescribeVpcEndpointServiceConfigurations)
+
+-- | The IDs of one or more services.
+describeVpcEndpointServiceConfigurations_serviceIds :: Lens.Lens' DescribeVpcEndpointServiceConfigurations (Prelude.Maybe [Prelude.Text])
+describeVpcEndpointServiceConfigurations_serviceIds = Lens.lens (\DescribeVpcEndpointServiceConfigurations' {serviceIds} -> serviceIds) (\s@DescribeVpcEndpointServiceConfigurations' {} a -> s {serviceIds = a} :: DescribeVpcEndpointServiceConfigurations) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSPager
+    DescribeVpcEndpointServiceConfigurations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServiceConfigurationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServiceConfigurationsResponse_serviceConfigurations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcEndpointServiceConfigurations_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcEndpointServiceConfigurationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVpcEndpointServiceConfigurations
+  where
+  type
+    AWSResponse
+      DescribeVpcEndpointServiceConfigurations =
+      DescribeVpcEndpointServiceConfigurationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcEndpointServiceConfigurationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "serviceConfigurationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcEndpointServiceConfigurations
+  where
+  hashWithSalt
+    _salt
+    DescribeVpcEndpointServiceConfigurations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` serviceIds
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointServiceConfigurations
+  where
+  rnf DescribeVpcEndpointServiceConfigurations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceIds
+
+instance
+  Data.ToHeaders
+    DescribeVpcEndpointServiceConfigurations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeVpcEndpointServiceConfigurations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeVpcEndpointServiceConfigurations
+  where
+  toQuery DescribeVpcEndpointServiceConfigurations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVpcEndpointServiceConfigurations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "ServiceId"
+              Prelude.<$> serviceIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeVpcEndpointServiceConfigurationsResponse' smart constructor.
+data DescribeVpcEndpointServiceConfigurationsResponse = DescribeVpcEndpointServiceConfigurationsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more services.
+    serviceConfigurations :: Prelude.Maybe [ServiceConfiguration],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointServiceConfigurationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcEndpointServiceConfigurationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'serviceConfigurations', 'describeVpcEndpointServiceConfigurationsResponse_serviceConfigurations' - Information about one or more services.
+--
+-- 'httpStatus', 'describeVpcEndpointServiceConfigurationsResponse_httpStatus' - The response's http status code.
+newDescribeVpcEndpointServiceConfigurationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcEndpointServiceConfigurationsResponse
+newDescribeVpcEndpointServiceConfigurationsResponse
+  pHttpStatus_ =
+    DescribeVpcEndpointServiceConfigurationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        serviceConfigurations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcEndpointServiceConfigurationsResponse_nextToken :: Lens.Lens' DescribeVpcEndpointServiceConfigurationsResponse (Prelude.Maybe Prelude.Text)
+describeVpcEndpointServiceConfigurationsResponse_nextToken = Lens.lens (\DescribeVpcEndpointServiceConfigurationsResponse' {nextToken} -> nextToken) (\s@DescribeVpcEndpointServiceConfigurationsResponse' {} a -> s {nextToken = a} :: DescribeVpcEndpointServiceConfigurationsResponse)
+
+-- | Information about one or more services.
+describeVpcEndpointServiceConfigurationsResponse_serviceConfigurations :: Lens.Lens' DescribeVpcEndpointServiceConfigurationsResponse (Prelude.Maybe [ServiceConfiguration])
+describeVpcEndpointServiceConfigurationsResponse_serviceConfigurations = Lens.lens (\DescribeVpcEndpointServiceConfigurationsResponse' {serviceConfigurations} -> serviceConfigurations) (\s@DescribeVpcEndpointServiceConfigurationsResponse' {} a -> s {serviceConfigurations = a} :: DescribeVpcEndpointServiceConfigurationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcEndpointServiceConfigurationsResponse_httpStatus :: Lens.Lens' DescribeVpcEndpointServiceConfigurationsResponse Prelude.Int
+describeVpcEndpointServiceConfigurationsResponse_httpStatus = Lens.lens (\DescribeVpcEndpointServiceConfigurationsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcEndpointServiceConfigurationsResponse' {} a -> s {httpStatus = a} :: DescribeVpcEndpointServiceConfigurationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointServiceConfigurationsResponse
+  where
+  rnf
+    DescribeVpcEndpointServiceConfigurationsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf serviceConfigurations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcEndpointServicePermissions.hs b/gen/Amazonka/EC2/DescribeVpcEndpointServicePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcEndpointServicePermissions.hs
@@ -0,0 +1,325 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcEndpointServicePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the principals (service consumers) that are permitted to
+-- discover your VPC endpoint service.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcEndpointServicePermissions
+  ( -- * Creating a Request
+    DescribeVpcEndpointServicePermissions (..),
+    newDescribeVpcEndpointServicePermissions,
+
+    -- * Request Lenses
+    describeVpcEndpointServicePermissions_dryRun,
+    describeVpcEndpointServicePermissions_filters,
+    describeVpcEndpointServicePermissions_maxResults,
+    describeVpcEndpointServicePermissions_nextToken,
+    describeVpcEndpointServicePermissions_serviceId,
+
+    -- * Destructuring the Response
+    DescribeVpcEndpointServicePermissionsResponse (..),
+    newDescribeVpcEndpointServicePermissionsResponse,
+
+    -- * Response Lenses
+    describeVpcEndpointServicePermissionsResponse_allowedPrincipals,
+    describeVpcEndpointServicePermissionsResponse_nextToken,
+    describeVpcEndpointServicePermissionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcEndpointServicePermissions' smart constructor.
+data DescribeVpcEndpointServicePermissions = DescribeVpcEndpointServicePermissions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @principal@ - The ARN of the principal.
+    --
+    -- -   @principal-type@ - The principal type (@All@ | @Service@ |
+    --     @OrganizationUnit@ | @Account@ | @User@ | @Role@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results of the initial request can be seen by
+    -- sending another request with the returned @NextToken@ value. This value
+    -- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+    -- 1,000, only 1,000 results are returned.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the service.
+    serviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointServicePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcEndpointServicePermissions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcEndpointServicePermissions_filters' - One or more filters.
+--
+-- -   @principal@ - The ARN of the principal.
+--
+-- -   @principal-type@ - The principal type (@All@ | @Service@ |
+--     @OrganizationUnit@ | @Account@ | @User@ | @Role@).
+--
+-- 'maxResults', 'describeVpcEndpointServicePermissions_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+-- 1,000, only 1,000 results are returned.
+--
+-- 'nextToken', 'describeVpcEndpointServicePermissions_nextToken' - The token to retrieve the next page of results.
+--
+-- 'serviceId', 'describeVpcEndpointServicePermissions_serviceId' - The ID of the service.
+newDescribeVpcEndpointServicePermissions ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  DescribeVpcEndpointServicePermissions
+newDescribeVpcEndpointServicePermissions pServiceId_ =
+  DescribeVpcEndpointServicePermissions'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serviceId = pServiceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcEndpointServicePermissions_dryRun :: Lens.Lens' DescribeVpcEndpointServicePermissions (Prelude.Maybe Prelude.Bool)
+describeVpcEndpointServicePermissions_dryRun = Lens.lens (\DescribeVpcEndpointServicePermissions' {dryRun} -> dryRun) (\s@DescribeVpcEndpointServicePermissions' {} a -> s {dryRun = a} :: DescribeVpcEndpointServicePermissions)
+
+-- | One or more filters.
+--
+-- -   @principal@ - The ARN of the principal.
+--
+-- -   @principal-type@ - The principal type (@All@ | @Service@ |
+--     @OrganizationUnit@ | @Account@ | @User@ | @Role@).
+describeVpcEndpointServicePermissions_filters :: Lens.Lens' DescribeVpcEndpointServicePermissions (Prelude.Maybe [Filter])
+describeVpcEndpointServicePermissions_filters = Lens.lens (\DescribeVpcEndpointServicePermissions' {filters} -> filters) (\s@DescribeVpcEndpointServicePermissions' {} a -> s {filters = a} :: DescribeVpcEndpointServicePermissions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results of the initial request can be seen by
+-- sending another request with the returned @NextToken@ value. This value
+-- can be between 5 and 1,000; if @MaxResults@ is given a value larger than
+-- 1,000, only 1,000 results are returned.
+describeVpcEndpointServicePermissions_maxResults :: Lens.Lens' DescribeVpcEndpointServicePermissions (Prelude.Maybe Prelude.Int)
+describeVpcEndpointServicePermissions_maxResults = Lens.lens (\DescribeVpcEndpointServicePermissions' {maxResults} -> maxResults) (\s@DescribeVpcEndpointServicePermissions' {} a -> s {maxResults = a} :: DescribeVpcEndpointServicePermissions)
+
+-- | The token to retrieve the next page of results.
+describeVpcEndpointServicePermissions_nextToken :: Lens.Lens' DescribeVpcEndpointServicePermissions (Prelude.Maybe Prelude.Text)
+describeVpcEndpointServicePermissions_nextToken = Lens.lens (\DescribeVpcEndpointServicePermissions' {nextToken} -> nextToken) (\s@DescribeVpcEndpointServicePermissions' {} a -> s {nextToken = a} :: DescribeVpcEndpointServicePermissions)
+
+-- | The ID of the service.
+describeVpcEndpointServicePermissions_serviceId :: Lens.Lens' DescribeVpcEndpointServicePermissions Prelude.Text
+describeVpcEndpointServicePermissions_serviceId = Lens.lens (\DescribeVpcEndpointServicePermissions' {serviceId} -> serviceId) (\s@DescribeVpcEndpointServicePermissions' {} a -> s {serviceId = a} :: DescribeVpcEndpointServicePermissions)
+
+instance
+  Core.AWSPager
+    DescribeVpcEndpointServicePermissions
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServicePermissionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServicePermissionsResponse_allowedPrincipals
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcEndpointServicePermissions_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcEndpointServicePermissionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVpcEndpointServicePermissions
+  where
+  type
+    AWSResponse
+      DescribeVpcEndpointServicePermissions =
+      DescribeVpcEndpointServicePermissionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcEndpointServicePermissionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "allowedPrincipals"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcEndpointServicePermissions
+  where
+  hashWithSalt
+    _salt
+    DescribeVpcEndpointServicePermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` serviceId
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointServicePermissions
+  where
+  rnf DescribeVpcEndpointServicePermissions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceId
+
+instance
+  Data.ToHeaders
+    DescribeVpcEndpointServicePermissions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DescribeVpcEndpointServicePermissions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeVpcEndpointServicePermissions
+  where
+  toQuery DescribeVpcEndpointServicePermissions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVpcEndpointServicePermissions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "ServiceId" Data.=: serviceId
+      ]
+
+-- | /See:/ 'newDescribeVpcEndpointServicePermissionsResponse' smart constructor.
+data DescribeVpcEndpointServicePermissionsResponse = DescribeVpcEndpointServicePermissionsResponse'
+  { -- | Information about one or more allowed principals.
+    allowedPrincipals :: Prelude.Maybe [AllowedPrincipal],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointServicePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowedPrincipals', 'describeVpcEndpointServicePermissionsResponse_allowedPrincipals' - Information about one or more allowed principals.
+--
+-- 'nextToken', 'describeVpcEndpointServicePermissionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'describeVpcEndpointServicePermissionsResponse_httpStatus' - The response's http status code.
+newDescribeVpcEndpointServicePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcEndpointServicePermissionsResponse
+newDescribeVpcEndpointServicePermissionsResponse
+  pHttpStatus_ =
+    DescribeVpcEndpointServicePermissionsResponse'
+      { allowedPrincipals =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about one or more allowed principals.
+describeVpcEndpointServicePermissionsResponse_allowedPrincipals :: Lens.Lens' DescribeVpcEndpointServicePermissionsResponse (Prelude.Maybe [AllowedPrincipal])
+describeVpcEndpointServicePermissionsResponse_allowedPrincipals = Lens.lens (\DescribeVpcEndpointServicePermissionsResponse' {allowedPrincipals} -> allowedPrincipals) (\s@DescribeVpcEndpointServicePermissionsResponse' {} a -> s {allowedPrincipals = a} :: DescribeVpcEndpointServicePermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcEndpointServicePermissionsResponse_nextToken :: Lens.Lens' DescribeVpcEndpointServicePermissionsResponse (Prelude.Maybe Prelude.Text)
+describeVpcEndpointServicePermissionsResponse_nextToken = Lens.lens (\DescribeVpcEndpointServicePermissionsResponse' {nextToken} -> nextToken) (\s@DescribeVpcEndpointServicePermissionsResponse' {} a -> s {nextToken = a} :: DescribeVpcEndpointServicePermissionsResponse)
+
+-- | The response's http status code.
+describeVpcEndpointServicePermissionsResponse_httpStatus :: Lens.Lens' DescribeVpcEndpointServicePermissionsResponse Prelude.Int
+describeVpcEndpointServicePermissionsResponse_httpStatus = Lens.lens (\DescribeVpcEndpointServicePermissionsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcEndpointServicePermissionsResponse' {} a -> s {httpStatus = a} :: DescribeVpcEndpointServicePermissionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointServicePermissionsResponse
+  where
+  rnf
+    DescribeVpcEndpointServicePermissionsResponse' {..} =
+      Prelude.rnf allowedPrincipals
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcEndpointServices.hs b/gen/Amazonka/EC2/DescribeVpcEndpointServices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcEndpointServices.hs
@@ -0,0 +1,387 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcEndpointServices
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes available services to which you can create a VPC endpoint.
+--
+-- When the service provider and the consumer have different accounts in
+-- multiple Availability Zones, and the consumer views the VPC endpoint
+-- service information, the response only includes the common Availability
+-- Zones. For example, when the service provider account uses @us-east-1a@
+-- and @us-east-1c@ and the consumer uses @us-east-1a@ and @us-east-1b@,
+-- the response includes the VPC endpoint services in the common
+-- Availability Zone, @us-east-1a@.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcEndpointServices
+  ( -- * Creating a Request
+    DescribeVpcEndpointServices (..),
+    newDescribeVpcEndpointServices,
+
+    -- * Request Lenses
+    describeVpcEndpointServices_dryRun,
+    describeVpcEndpointServices_filters,
+    describeVpcEndpointServices_maxResults,
+    describeVpcEndpointServices_nextToken,
+    describeVpcEndpointServices_serviceNames,
+
+    -- * Destructuring the Response
+    DescribeVpcEndpointServicesResponse (..),
+    newDescribeVpcEndpointServicesResponse,
+
+    -- * Response Lenses
+    describeVpcEndpointServicesResponse_nextToken,
+    describeVpcEndpointServicesResponse_serviceDetails,
+    describeVpcEndpointServicesResponse_serviceNames,
+    describeVpcEndpointServicesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeVpcEndpointServices.
+--
+-- /See:/ 'newDescribeVpcEndpointServices' smart constructor.
+data DescribeVpcEndpointServices = DescribeVpcEndpointServices'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @owner@ - The ID or alias of the Amazon Web Services account that
+    --     owns the service.
+    --
+    -- -   @service-name@ - The name of the service.
+    --
+    -- -   @service-type@ - The type of service (@Interface@ | @Gateway@ |
+    --     @GatewayLoadBalancer@).
+    --
+    -- -   @supported-ip-address-types@ - The IP address type (@ipv4@ |
+    --     @ipv6@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of items to return for this request. The request
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    --
+    -- Constraint: If the value is greater than 1,000, we return only 1,000
+    -- items.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a prior call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more service names.
+    serviceNames :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointServices' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcEndpointServices_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcEndpointServices_filters' - One or more filters.
+--
+-- -   @owner@ - The ID or alias of the Amazon Web Services account that
+--     owns the service.
+--
+-- -   @service-name@ - The name of the service.
+--
+-- -   @service-type@ - The type of service (@Interface@ | @Gateway@ |
+--     @GatewayLoadBalancer@).
+--
+-- -   @supported-ip-address-types@ - The IP address type (@ipv4@ |
+--     @ipv6@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'describeVpcEndpointServices_maxResults' - The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- Constraint: If the value is greater than 1,000, we return only 1,000
+-- items.
+--
+-- 'nextToken', 'describeVpcEndpointServices_nextToken' - The token for the next set of items to return. (You received this token
+-- from a prior call.)
+--
+-- 'serviceNames', 'describeVpcEndpointServices_serviceNames' - One or more service names.
+newDescribeVpcEndpointServices ::
+  DescribeVpcEndpointServices
+newDescribeVpcEndpointServices =
+  DescribeVpcEndpointServices'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serviceNames = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcEndpointServices_dryRun :: Lens.Lens' DescribeVpcEndpointServices (Prelude.Maybe Prelude.Bool)
+describeVpcEndpointServices_dryRun = Lens.lens (\DescribeVpcEndpointServices' {dryRun} -> dryRun) (\s@DescribeVpcEndpointServices' {} a -> s {dryRun = a} :: DescribeVpcEndpointServices)
+
+-- | One or more filters.
+--
+-- -   @owner@ - The ID or alias of the Amazon Web Services account that
+--     owns the service.
+--
+-- -   @service-name@ - The name of the service.
+--
+-- -   @service-type@ - The type of service (@Interface@ | @Gateway@ |
+--     @GatewayLoadBalancer@).
+--
+-- -   @supported-ip-address-types@ - The IP address type (@ipv4@ |
+--     @ipv6@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+describeVpcEndpointServices_filters :: Lens.Lens' DescribeVpcEndpointServices (Prelude.Maybe [Filter])
+describeVpcEndpointServices_filters = Lens.lens (\DescribeVpcEndpointServices' {filters} -> filters) (\s@DescribeVpcEndpointServices' {} a -> s {filters = a} :: DescribeVpcEndpointServices) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- Constraint: If the value is greater than 1,000, we return only 1,000
+-- items.
+describeVpcEndpointServices_maxResults :: Lens.Lens' DescribeVpcEndpointServices (Prelude.Maybe Prelude.Int)
+describeVpcEndpointServices_maxResults = Lens.lens (\DescribeVpcEndpointServices' {maxResults} -> maxResults) (\s@DescribeVpcEndpointServices' {} a -> s {maxResults = a} :: DescribeVpcEndpointServices)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a prior call.)
+describeVpcEndpointServices_nextToken :: Lens.Lens' DescribeVpcEndpointServices (Prelude.Maybe Prelude.Text)
+describeVpcEndpointServices_nextToken = Lens.lens (\DescribeVpcEndpointServices' {nextToken} -> nextToken) (\s@DescribeVpcEndpointServices' {} a -> s {nextToken = a} :: DescribeVpcEndpointServices)
+
+-- | One or more service names.
+describeVpcEndpointServices_serviceNames :: Lens.Lens' DescribeVpcEndpointServices (Prelude.Maybe [Prelude.Text])
+describeVpcEndpointServices_serviceNames = Lens.lens (\DescribeVpcEndpointServices' {serviceNames} -> serviceNames) (\s@DescribeVpcEndpointServices' {} a -> s {serviceNames = a} :: DescribeVpcEndpointServices) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVpcEndpointServices where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServicesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServicesResponse_serviceDetails
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointServicesResponse_serviceNames
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcEndpointServices_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcEndpointServicesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVpcEndpointServices where
+  type
+    AWSResponse DescribeVpcEndpointServices =
+      DescribeVpcEndpointServicesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcEndpointServicesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "serviceDetailSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "serviceNameSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpcEndpointServices where
+  hashWithSalt _salt DescribeVpcEndpointServices' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` serviceNames
+
+instance Prelude.NFData DescribeVpcEndpointServices where
+  rnf DescribeVpcEndpointServices' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceNames
+
+instance Data.ToHeaders DescribeVpcEndpointServices where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcEndpointServices where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcEndpointServices where
+  toQuery DescribeVpcEndpointServices' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVpcEndpointServices" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "ServiceName"
+              Prelude.<$> serviceNames
+          )
+      ]
+
+-- | Contains the output of DescribeVpcEndpointServices.
+--
+-- /See:/ 'newDescribeVpcEndpointServicesResponse' smart constructor.
+data DescribeVpcEndpointServicesResponse = DescribeVpcEndpointServicesResponse'
+  { -- | The token to use when requesting the next set of items. If there are no
+    -- additional items to return, the string is empty.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the service.
+    serviceDetails :: Prelude.Maybe [ServiceDetail],
+    -- | A list of supported services.
+    serviceNames :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointServicesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcEndpointServicesResponse_nextToken' - The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+--
+-- 'serviceDetails', 'describeVpcEndpointServicesResponse_serviceDetails' - Information about the service.
+--
+-- 'serviceNames', 'describeVpcEndpointServicesResponse_serviceNames' - A list of supported services.
+--
+-- 'httpStatus', 'describeVpcEndpointServicesResponse_httpStatus' - The response's http status code.
+newDescribeVpcEndpointServicesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcEndpointServicesResponse
+newDescribeVpcEndpointServicesResponse pHttpStatus_ =
+  DescribeVpcEndpointServicesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      serviceDetails = Prelude.Nothing,
+      serviceNames = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+describeVpcEndpointServicesResponse_nextToken :: Lens.Lens' DescribeVpcEndpointServicesResponse (Prelude.Maybe Prelude.Text)
+describeVpcEndpointServicesResponse_nextToken = Lens.lens (\DescribeVpcEndpointServicesResponse' {nextToken} -> nextToken) (\s@DescribeVpcEndpointServicesResponse' {} a -> s {nextToken = a} :: DescribeVpcEndpointServicesResponse)
+
+-- | Information about the service.
+describeVpcEndpointServicesResponse_serviceDetails :: Lens.Lens' DescribeVpcEndpointServicesResponse (Prelude.Maybe [ServiceDetail])
+describeVpcEndpointServicesResponse_serviceDetails = Lens.lens (\DescribeVpcEndpointServicesResponse' {serviceDetails} -> serviceDetails) (\s@DescribeVpcEndpointServicesResponse' {} a -> s {serviceDetails = a} :: DescribeVpcEndpointServicesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of supported services.
+describeVpcEndpointServicesResponse_serviceNames :: Lens.Lens' DescribeVpcEndpointServicesResponse (Prelude.Maybe [Prelude.Text])
+describeVpcEndpointServicesResponse_serviceNames = Lens.lens (\DescribeVpcEndpointServicesResponse' {serviceNames} -> serviceNames) (\s@DescribeVpcEndpointServicesResponse' {} a -> s {serviceNames = a} :: DescribeVpcEndpointServicesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcEndpointServicesResponse_httpStatus :: Lens.Lens' DescribeVpcEndpointServicesResponse Prelude.Int
+describeVpcEndpointServicesResponse_httpStatus = Lens.lens (\DescribeVpcEndpointServicesResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcEndpointServicesResponse' {} a -> s {httpStatus = a} :: DescribeVpcEndpointServicesResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcEndpointServicesResponse
+  where
+  rnf DescribeVpcEndpointServicesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serviceDetails
+      `Prelude.seq` Prelude.rnf serviceNames
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcEndpoints.hs b/gen/Amazonka/EC2/DescribeVpcEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcEndpoints.hs
@@ -0,0 +1,363 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcEndpoints
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your VPC endpoints.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcEndpoints
+  ( -- * Creating a Request
+    DescribeVpcEndpoints (..),
+    newDescribeVpcEndpoints,
+
+    -- * Request Lenses
+    describeVpcEndpoints_dryRun,
+    describeVpcEndpoints_filters,
+    describeVpcEndpoints_maxResults,
+    describeVpcEndpoints_nextToken,
+    describeVpcEndpoints_vpcEndpointIds,
+
+    -- * Destructuring the Response
+    DescribeVpcEndpointsResponse (..),
+    newDescribeVpcEndpointsResponse,
+
+    -- * Response Lenses
+    describeVpcEndpointsResponse_nextToken,
+    describeVpcEndpointsResponse_vpcEndpoints,
+    describeVpcEndpointsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeVpcEndpoints.
+--
+-- /See:/ 'newDescribeVpcEndpoints' smart constructor.
+data DescribeVpcEndpoints = DescribeVpcEndpoints'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @ip-address-type@ - The IP address type (@ipv4@ | @ipv6@).
+    --
+    -- -   @service-name@ - The name of the service.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC in which the endpoint resides.
+    --
+    -- -   @vpc-endpoint-id@ - The ID of the endpoint.
+    --
+    -- -   @vpc-endpoint-state@ - The state of the endpoint
+    --     (@pendingAcceptance@ | @pending@ | @available@ | @deleting@ |
+    --     @deleted@ | @rejected@ | @failed@).
+    --
+    -- -   @vpc-endpoint-type@ - The type of VPC endpoint (@Interface@ |
+    --     @Gateway@ | @GatewayLoadBalancer@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of items to return for this request. The request
+    -- returns a token that you can specify in a subsequent call to get the
+    -- next set of results.
+    --
+    -- Constraint: If the value is greater than 1,000, we return only 1,000
+    -- items.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of items to return. (You received this token
+    -- from a prior call.)
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more endpoint IDs.
+    vpcEndpointIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpoints' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcEndpoints_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcEndpoints_filters' - One or more filters.
+--
+-- -   @ip-address-type@ - The IP address type (@ipv4@ | @ipv6@).
+--
+-- -   @service-name@ - The name of the service.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC in which the endpoint resides.
+--
+-- -   @vpc-endpoint-id@ - The ID of the endpoint.
+--
+-- -   @vpc-endpoint-state@ - The state of the endpoint
+--     (@pendingAcceptance@ | @pending@ | @available@ | @deleting@ |
+--     @deleted@ | @rejected@ | @failed@).
+--
+-- -   @vpc-endpoint-type@ - The type of VPC endpoint (@Interface@ |
+--     @Gateway@ | @GatewayLoadBalancer@).
+--
+-- 'maxResults', 'describeVpcEndpoints_maxResults' - The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- Constraint: If the value is greater than 1,000, we return only 1,000
+-- items.
+--
+-- 'nextToken', 'describeVpcEndpoints_nextToken' - The token for the next set of items to return. (You received this token
+-- from a prior call.)
+--
+-- 'vpcEndpointIds', 'describeVpcEndpoints_vpcEndpointIds' - One or more endpoint IDs.
+newDescribeVpcEndpoints ::
+  DescribeVpcEndpoints
+newDescribeVpcEndpoints =
+  DescribeVpcEndpoints'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vpcEndpointIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcEndpoints_dryRun :: Lens.Lens' DescribeVpcEndpoints (Prelude.Maybe Prelude.Bool)
+describeVpcEndpoints_dryRun = Lens.lens (\DescribeVpcEndpoints' {dryRun} -> dryRun) (\s@DescribeVpcEndpoints' {} a -> s {dryRun = a} :: DescribeVpcEndpoints)
+
+-- | One or more filters.
+--
+-- -   @ip-address-type@ - The IP address type (@ipv4@ | @ipv6@).
+--
+-- -   @service-name@ - The name of the service.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC in which the endpoint resides.
+--
+-- -   @vpc-endpoint-id@ - The ID of the endpoint.
+--
+-- -   @vpc-endpoint-state@ - The state of the endpoint
+--     (@pendingAcceptance@ | @pending@ | @available@ | @deleting@ |
+--     @deleted@ | @rejected@ | @failed@).
+--
+-- -   @vpc-endpoint-type@ - The type of VPC endpoint (@Interface@ |
+--     @Gateway@ | @GatewayLoadBalancer@).
+describeVpcEndpoints_filters :: Lens.Lens' DescribeVpcEndpoints (Prelude.Maybe [Filter])
+describeVpcEndpoints_filters = Lens.lens (\DescribeVpcEndpoints' {filters} -> filters) (\s@DescribeVpcEndpoints' {} a -> s {filters = a} :: DescribeVpcEndpoints) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+--
+-- Constraint: If the value is greater than 1,000, we return only 1,000
+-- items.
+describeVpcEndpoints_maxResults :: Lens.Lens' DescribeVpcEndpoints (Prelude.Maybe Prelude.Int)
+describeVpcEndpoints_maxResults = Lens.lens (\DescribeVpcEndpoints' {maxResults} -> maxResults) (\s@DescribeVpcEndpoints' {} a -> s {maxResults = a} :: DescribeVpcEndpoints)
+
+-- | The token for the next set of items to return. (You received this token
+-- from a prior call.)
+describeVpcEndpoints_nextToken :: Lens.Lens' DescribeVpcEndpoints (Prelude.Maybe Prelude.Text)
+describeVpcEndpoints_nextToken = Lens.lens (\DescribeVpcEndpoints' {nextToken} -> nextToken) (\s@DescribeVpcEndpoints' {} a -> s {nextToken = a} :: DescribeVpcEndpoints)
+
+-- | One or more endpoint IDs.
+describeVpcEndpoints_vpcEndpointIds :: Lens.Lens' DescribeVpcEndpoints (Prelude.Maybe [Prelude.Text])
+describeVpcEndpoints_vpcEndpointIds = Lens.lens (\DescribeVpcEndpoints' {vpcEndpointIds} -> vpcEndpointIds) (\s@DescribeVpcEndpoints' {} a -> s {vpcEndpointIds = a} :: DescribeVpcEndpoints) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVpcEndpoints where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcEndpointsResponse_vpcEndpoints
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcEndpoints_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcEndpointsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVpcEndpoints where
+  type
+    AWSResponse DescribeVpcEndpoints =
+      DescribeVpcEndpointsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcEndpointsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "vpcEndpointSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpcEndpoints where
+  hashWithSalt _salt DescribeVpcEndpoints' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vpcEndpointIds
+
+instance Prelude.NFData DescribeVpcEndpoints where
+  rnf DescribeVpcEndpoints' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcEndpointIds
+
+instance Data.ToHeaders DescribeVpcEndpoints where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcEndpoints where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcEndpoints where
+  toQuery DescribeVpcEndpoints' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVpcEndpoints" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "VpcEndpointId"
+              Prelude.<$> vpcEndpointIds
+          )
+      ]
+
+-- | Contains the output of DescribeVpcEndpoints.
+--
+-- /See:/ 'newDescribeVpcEndpointsResponse' smart constructor.
+data DescribeVpcEndpointsResponse = DescribeVpcEndpointsResponse'
+  { -- | The token to use when requesting the next set of items. If there are no
+    -- additional items to return, the string is empty.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the endpoints.
+    vpcEndpoints :: Prelude.Maybe [VpcEndpoint],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcEndpointsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcEndpointsResponse_nextToken' - The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+--
+-- 'vpcEndpoints', 'describeVpcEndpointsResponse_vpcEndpoints' - Information about the endpoints.
+--
+-- 'httpStatus', 'describeVpcEndpointsResponse_httpStatus' - The response's http status code.
+newDescribeVpcEndpointsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcEndpointsResponse
+newDescribeVpcEndpointsResponse pHttpStatus_ =
+  DescribeVpcEndpointsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      vpcEndpoints = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use when requesting the next set of items. If there are no
+-- additional items to return, the string is empty.
+describeVpcEndpointsResponse_nextToken :: Lens.Lens' DescribeVpcEndpointsResponse (Prelude.Maybe Prelude.Text)
+describeVpcEndpointsResponse_nextToken = Lens.lens (\DescribeVpcEndpointsResponse' {nextToken} -> nextToken) (\s@DescribeVpcEndpointsResponse' {} a -> s {nextToken = a} :: DescribeVpcEndpointsResponse)
+
+-- | Information about the endpoints.
+describeVpcEndpointsResponse_vpcEndpoints :: Lens.Lens' DescribeVpcEndpointsResponse (Prelude.Maybe [VpcEndpoint])
+describeVpcEndpointsResponse_vpcEndpoints = Lens.lens (\DescribeVpcEndpointsResponse' {vpcEndpoints} -> vpcEndpoints) (\s@DescribeVpcEndpointsResponse' {} a -> s {vpcEndpoints = a} :: DescribeVpcEndpointsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcEndpointsResponse_httpStatus :: Lens.Lens' DescribeVpcEndpointsResponse Prelude.Int
+describeVpcEndpointsResponse_httpStatus = Lens.lens (\DescribeVpcEndpointsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcEndpointsResponse' {} a -> s {httpStatus = a} :: DescribeVpcEndpointsResponse)
+
+instance Prelude.NFData DescribeVpcEndpointsResponse where
+  rnf DescribeVpcEndpointsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcEndpoints
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcPeeringConnections.hs b/gen/Amazonka/EC2/DescribeVpcPeeringConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcPeeringConnections.hs
@@ -0,0 +1,405 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcPeeringConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your VPC peering connections.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcPeeringConnections
+  ( -- * Creating a Request
+    DescribeVpcPeeringConnections (..),
+    newDescribeVpcPeeringConnections,
+
+    -- * Request Lenses
+    describeVpcPeeringConnections_dryRun,
+    describeVpcPeeringConnections_filters,
+    describeVpcPeeringConnections_maxResults,
+    describeVpcPeeringConnections_nextToken,
+    describeVpcPeeringConnections_vpcPeeringConnectionIds,
+
+    -- * Destructuring the Response
+    DescribeVpcPeeringConnectionsResponse (..),
+    newDescribeVpcPeeringConnectionsResponse,
+
+    -- * Response Lenses
+    describeVpcPeeringConnectionsResponse_nextToken,
+    describeVpcPeeringConnectionsResponse_vpcPeeringConnections,
+    describeVpcPeeringConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcPeeringConnections' smart constructor.
+data DescribeVpcPeeringConnections = DescribeVpcPeeringConnections'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @accepter-vpc-info.cidr-block@ - The IPv4 CIDR block of the accepter
+    --     VPC.
+    --
+    -- -   @accepter-vpc-info.owner-id@ - The ID of the Amazon Web Services
+    --     account that owns the accepter VPC.
+    --
+    -- -   @accepter-vpc-info.vpc-id@ - The ID of the accepter VPC.
+    --
+    -- -   @expiration-time@ - The expiration date and time for the VPC peering
+    --     connection.
+    --
+    -- -   @requester-vpc-info.cidr-block@ - The IPv4 CIDR block of the
+    --     requester\'s VPC.
+    --
+    -- -   @requester-vpc-info.owner-id@ - The ID of the Amazon Web Services
+    --     account that owns the requester VPC.
+    --
+    -- -   @requester-vpc-info.vpc-id@ - The ID of the requester VPC.
+    --
+    -- -   @status-code@ - The status of the VPC peering connection
+    --     (@pending-acceptance@ | @failed@ | @expired@ | @provisioning@ |
+    --     @active@ | @deleting@ | @deleted@ | @rejected@).
+    --
+    -- -   @status-message@ - A message that provides more information about
+    --     the status of the VPC peering connection, if applicable.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-peering-connection-id@ - The ID of the VPC peering connection.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more VPC peering connection IDs.
+    --
+    -- Default: Describes all your VPC peering connections.
+    vpcPeeringConnectionIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcPeeringConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcPeeringConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcPeeringConnections_filters' - One or more filters.
+--
+-- -   @accepter-vpc-info.cidr-block@ - The IPv4 CIDR block of the accepter
+--     VPC.
+--
+-- -   @accepter-vpc-info.owner-id@ - The ID of the Amazon Web Services
+--     account that owns the accepter VPC.
+--
+-- -   @accepter-vpc-info.vpc-id@ - The ID of the accepter VPC.
+--
+-- -   @expiration-time@ - The expiration date and time for the VPC peering
+--     connection.
+--
+-- -   @requester-vpc-info.cidr-block@ - The IPv4 CIDR block of the
+--     requester\'s VPC.
+--
+-- -   @requester-vpc-info.owner-id@ - The ID of the Amazon Web Services
+--     account that owns the requester VPC.
+--
+-- -   @requester-vpc-info.vpc-id@ - The ID of the requester VPC.
+--
+-- -   @status-code@ - The status of the VPC peering connection
+--     (@pending-acceptance@ | @failed@ | @expired@ | @provisioning@ |
+--     @active@ | @deleting@ | @deleted@ | @rejected@).
+--
+-- -   @status-message@ - A message that provides more information about
+--     the status of the VPC peering connection, if applicable.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-peering-connection-id@ - The ID of the VPC peering connection.
+--
+-- 'maxResults', 'describeVpcPeeringConnections_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVpcPeeringConnections_nextToken' - The token for the next page of results.
+--
+-- 'vpcPeeringConnectionIds', 'describeVpcPeeringConnections_vpcPeeringConnectionIds' - One or more VPC peering connection IDs.
+--
+-- Default: Describes all your VPC peering connections.
+newDescribeVpcPeeringConnections ::
+  DescribeVpcPeeringConnections
+newDescribeVpcPeeringConnections =
+  DescribeVpcPeeringConnections'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vpcPeeringConnectionIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcPeeringConnections_dryRun :: Lens.Lens' DescribeVpcPeeringConnections (Prelude.Maybe Prelude.Bool)
+describeVpcPeeringConnections_dryRun = Lens.lens (\DescribeVpcPeeringConnections' {dryRun} -> dryRun) (\s@DescribeVpcPeeringConnections' {} a -> s {dryRun = a} :: DescribeVpcPeeringConnections)
+
+-- | One or more filters.
+--
+-- -   @accepter-vpc-info.cidr-block@ - The IPv4 CIDR block of the accepter
+--     VPC.
+--
+-- -   @accepter-vpc-info.owner-id@ - The ID of the Amazon Web Services
+--     account that owns the accepter VPC.
+--
+-- -   @accepter-vpc-info.vpc-id@ - The ID of the accepter VPC.
+--
+-- -   @expiration-time@ - The expiration date and time for the VPC peering
+--     connection.
+--
+-- -   @requester-vpc-info.cidr-block@ - The IPv4 CIDR block of the
+--     requester\'s VPC.
+--
+-- -   @requester-vpc-info.owner-id@ - The ID of the Amazon Web Services
+--     account that owns the requester VPC.
+--
+-- -   @requester-vpc-info.vpc-id@ - The ID of the requester VPC.
+--
+-- -   @status-code@ - The status of the VPC peering connection
+--     (@pending-acceptance@ | @failed@ | @expired@ | @provisioning@ |
+--     @active@ | @deleting@ | @deleted@ | @rejected@).
+--
+-- -   @status-message@ - A message that provides more information about
+--     the status of the VPC peering connection, if applicable.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-peering-connection-id@ - The ID of the VPC peering connection.
+describeVpcPeeringConnections_filters :: Lens.Lens' DescribeVpcPeeringConnections (Prelude.Maybe [Filter])
+describeVpcPeeringConnections_filters = Lens.lens (\DescribeVpcPeeringConnections' {filters} -> filters) (\s@DescribeVpcPeeringConnections' {} a -> s {filters = a} :: DescribeVpcPeeringConnections) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVpcPeeringConnections_maxResults :: Lens.Lens' DescribeVpcPeeringConnections (Prelude.Maybe Prelude.Natural)
+describeVpcPeeringConnections_maxResults = Lens.lens (\DescribeVpcPeeringConnections' {maxResults} -> maxResults) (\s@DescribeVpcPeeringConnections' {} a -> s {maxResults = a} :: DescribeVpcPeeringConnections)
+
+-- | The token for the next page of results.
+describeVpcPeeringConnections_nextToken :: Lens.Lens' DescribeVpcPeeringConnections (Prelude.Maybe Prelude.Text)
+describeVpcPeeringConnections_nextToken = Lens.lens (\DescribeVpcPeeringConnections' {nextToken} -> nextToken) (\s@DescribeVpcPeeringConnections' {} a -> s {nextToken = a} :: DescribeVpcPeeringConnections)
+
+-- | One or more VPC peering connection IDs.
+--
+-- Default: Describes all your VPC peering connections.
+describeVpcPeeringConnections_vpcPeeringConnectionIds :: Lens.Lens' DescribeVpcPeeringConnections (Prelude.Maybe [Prelude.Text])
+describeVpcPeeringConnections_vpcPeeringConnectionIds = Lens.lens (\DescribeVpcPeeringConnections' {vpcPeeringConnectionIds} -> vpcPeeringConnectionIds) (\s@DescribeVpcPeeringConnections' {} a -> s {vpcPeeringConnectionIds = a} :: DescribeVpcPeeringConnections) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVpcPeeringConnections where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcPeeringConnectionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcPeeringConnectionsResponse_vpcPeeringConnections
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcPeeringConnections_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcPeeringConnectionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeVpcPeeringConnections
+  where
+  type
+    AWSResponse DescribeVpcPeeringConnections =
+      DescribeVpcPeeringConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcPeeringConnectionsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "vpcPeeringConnectionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeVpcPeeringConnections
+  where
+  hashWithSalt _salt DescribeVpcPeeringConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vpcPeeringConnectionIds
+
+instance Prelude.NFData DescribeVpcPeeringConnections where
+  rnf DescribeVpcPeeringConnections' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionIds
+
+instance Data.ToHeaders DescribeVpcPeeringConnections where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcPeeringConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcPeeringConnections where
+  toQuery DescribeVpcPeeringConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DescribeVpcPeeringConnections" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "VpcPeeringConnectionId"
+              Prelude.<$> vpcPeeringConnectionIds
+          )
+      ]
+
+-- | /See:/ 'newDescribeVpcPeeringConnectionsResponse' smart constructor.
+data DescribeVpcPeeringConnectionsResponse = DescribeVpcPeeringConnectionsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the VPC peering connections.
+    vpcPeeringConnections :: Prelude.Maybe [VpcPeeringConnection],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcPeeringConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcPeeringConnectionsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'vpcPeeringConnections', 'describeVpcPeeringConnectionsResponse_vpcPeeringConnections' - Information about the VPC peering connections.
+--
+-- 'httpStatus', 'describeVpcPeeringConnectionsResponse_httpStatus' - The response's http status code.
+newDescribeVpcPeeringConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcPeeringConnectionsResponse
+newDescribeVpcPeeringConnectionsResponse pHttpStatus_ =
+  DescribeVpcPeeringConnectionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      vpcPeeringConnections =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcPeeringConnectionsResponse_nextToken :: Lens.Lens' DescribeVpcPeeringConnectionsResponse (Prelude.Maybe Prelude.Text)
+describeVpcPeeringConnectionsResponse_nextToken = Lens.lens (\DescribeVpcPeeringConnectionsResponse' {nextToken} -> nextToken) (\s@DescribeVpcPeeringConnectionsResponse' {} a -> s {nextToken = a} :: DescribeVpcPeeringConnectionsResponse)
+
+-- | Information about the VPC peering connections.
+describeVpcPeeringConnectionsResponse_vpcPeeringConnections :: Lens.Lens' DescribeVpcPeeringConnectionsResponse (Prelude.Maybe [VpcPeeringConnection])
+describeVpcPeeringConnectionsResponse_vpcPeeringConnections = Lens.lens (\DescribeVpcPeeringConnectionsResponse' {vpcPeeringConnections} -> vpcPeeringConnections) (\s@DescribeVpcPeeringConnectionsResponse' {} a -> s {vpcPeeringConnections = a} :: DescribeVpcPeeringConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcPeeringConnectionsResponse_httpStatus :: Lens.Lens' DescribeVpcPeeringConnectionsResponse Prelude.Int
+describeVpcPeeringConnectionsResponse_httpStatus = Lens.lens (\DescribeVpcPeeringConnectionsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcPeeringConnectionsResponse' {} a -> s {httpStatus = a} :: DescribeVpcPeeringConnectionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpcPeeringConnectionsResponse
+  where
+  rnf DescribeVpcPeeringConnectionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcPeeringConnections
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpcs.hs b/gen/Amazonka/EC2/DescribeVpcs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpcs.hs
@@ -0,0 +1,414 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpcs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your VPCs.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.DescribeVpcs
+  ( -- * Creating a Request
+    DescribeVpcs (..),
+    newDescribeVpcs,
+
+    -- * Request Lenses
+    describeVpcs_dryRun,
+    describeVpcs_filters,
+    describeVpcs_maxResults,
+    describeVpcs_nextToken,
+    describeVpcs_vpcIds,
+
+    -- * Destructuring the Response
+    DescribeVpcsResponse (..),
+    newDescribeVpcsResponse,
+
+    -- * Response Lenses
+    describeVpcsResponse_nextToken,
+    describeVpcsResponse_vpcs,
+    describeVpcsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeVpcs' smart constructor.
+data DescribeVpcs = DescribeVpcs'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @cidr@ - The primary IPv4 CIDR block of the VPC. The CIDR block you
+    --     specify must exactly match the VPC\'s CIDR block for information to
+    --     be returned for the VPC. Must contain the slash followed by one or
+    --     two digits (for example, @\/28@).
+    --
+    -- -   @cidr-block-association.cidr-block@ - An IPv4 CIDR block associated
+    --     with the VPC.
+    --
+    -- -   @cidr-block-association.association-id@ - The association ID for an
+    --     IPv4 CIDR block associated with the VPC.
+    --
+    -- -   @cidr-block-association.state@ - The state of an IPv4 CIDR block
+    --     associated with the VPC.
+    --
+    -- -   @dhcp-options-id@ - The ID of a set of DHCP options.
+    --
+    -- -   @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block
+    --     associated with the VPC.
+    --
+    -- -   @ipv6-cidr-block-association.ipv6-pool@ - The ID of the IPv6 address
+    --     pool from which the IPv6 CIDR block is allocated.
+    --
+    -- -   @ipv6-cidr-block-association.association-id@ - The association ID
+    --     for an IPv6 CIDR block associated with the VPC.
+    --
+    -- -   @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR
+    --     block associated with the VPC.
+    --
+    -- -   @is-default@ - Indicates whether the VPC is the default VPC.
+    --
+    -- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+    --     VPC.
+    --
+    -- -   @state@ - The state of the VPC (@pending@ | @available@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @vpc-id@ - The ID of the VPC.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | One or more VPC IDs.
+    --
+    -- Default: Describes all your VPCs.
+    vpcIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpcs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpcs_filters' - One or more filters.
+--
+-- -   @cidr@ - The primary IPv4 CIDR block of the VPC. The CIDR block you
+--     specify must exactly match the VPC\'s CIDR block for information to
+--     be returned for the VPC. Must contain the slash followed by one or
+--     two digits (for example, @\/28@).
+--
+-- -   @cidr-block-association.cidr-block@ - An IPv4 CIDR block associated
+--     with the VPC.
+--
+-- -   @cidr-block-association.association-id@ - The association ID for an
+--     IPv4 CIDR block associated with the VPC.
+--
+-- -   @cidr-block-association.state@ - The state of an IPv4 CIDR block
+--     associated with the VPC.
+--
+-- -   @dhcp-options-id@ - The ID of a set of DHCP options.
+--
+-- -   @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block
+--     associated with the VPC.
+--
+-- -   @ipv6-cidr-block-association.ipv6-pool@ - The ID of the IPv6 address
+--     pool from which the IPv6 CIDR block is allocated.
+--
+-- -   @ipv6-cidr-block-association.association-id@ - The association ID
+--     for an IPv6 CIDR block associated with the VPC.
+--
+-- -   @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR
+--     block associated with the VPC.
+--
+-- -   @is-default@ - Indicates whether the VPC is the default VPC.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     VPC.
+--
+-- -   @state@ - The state of the VPC (@pending@ | @available@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC.
+--
+-- 'maxResults', 'describeVpcs_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'describeVpcs_nextToken' - The token for the next page of results.
+--
+-- 'vpcIds', 'describeVpcs_vpcIds' - One or more VPC IDs.
+--
+-- Default: Describes all your VPCs.
+newDescribeVpcs ::
+  DescribeVpcs
+newDescribeVpcs =
+  DescribeVpcs'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vpcIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpcs_dryRun :: Lens.Lens' DescribeVpcs (Prelude.Maybe Prelude.Bool)
+describeVpcs_dryRun = Lens.lens (\DescribeVpcs' {dryRun} -> dryRun) (\s@DescribeVpcs' {} a -> s {dryRun = a} :: DescribeVpcs)
+
+-- | One or more filters.
+--
+-- -   @cidr@ - The primary IPv4 CIDR block of the VPC. The CIDR block you
+--     specify must exactly match the VPC\'s CIDR block for information to
+--     be returned for the VPC. Must contain the slash followed by one or
+--     two digits (for example, @\/28@).
+--
+-- -   @cidr-block-association.cidr-block@ - An IPv4 CIDR block associated
+--     with the VPC.
+--
+-- -   @cidr-block-association.association-id@ - The association ID for an
+--     IPv4 CIDR block associated with the VPC.
+--
+-- -   @cidr-block-association.state@ - The state of an IPv4 CIDR block
+--     associated with the VPC.
+--
+-- -   @dhcp-options-id@ - The ID of a set of DHCP options.
+--
+-- -   @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block
+--     associated with the VPC.
+--
+-- -   @ipv6-cidr-block-association.ipv6-pool@ - The ID of the IPv6 address
+--     pool from which the IPv6 CIDR block is allocated.
+--
+-- -   @ipv6-cidr-block-association.association-id@ - The association ID
+--     for an IPv6 CIDR block associated with the VPC.
+--
+-- -   @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR
+--     block associated with the VPC.
+--
+-- -   @is-default@ - Indicates whether the VPC is the default VPC.
+--
+-- -   @owner-id@ - The ID of the Amazon Web Services account that owns the
+--     VPC.
+--
+-- -   @state@ - The state of the VPC (@pending@ | @available@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @vpc-id@ - The ID of the VPC.
+describeVpcs_filters :: Lens.Lens' DescribeVpcs (Prelude.Maybe [Filter])
+describeVpcs_filters = Lens.lens (\DescribeVpcs' {filters} -> filters) (\s@DescribeVpcs' {} a -> s {filters = a} :: DescribeVpcs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+describeVpcs_maxResults :: Lens.Lens' DescribeVpcs (Prelude.Maybe Prelude.Natural)
+describeVpcs_maxResults = Lens.lens (\DescribeVpcs' {maxResults} -> maxResults) (\s@DescribeVpcs' {} a -> s {maxResults = a} :: DescribeVpcs)
+
+-- | The token for the next page of results.
+describeVpcs_nextToken :: Lens.Lens' DescribeVpcs (Prelude.Maybe Prelude.Text)
+describeVpcs_nextToken = Lens.lens (\DescribeVpcs' {nextToken} -> nextToken) (\s@DescribeVpcs' {} a -> s {nextToken = a} :: DescribeVpcs)
+
+-- | One or more VPC IDs.
+--
+-- Default: Describes all your VPCs.
+describeVpcs_vpcIds :: Lens.Lens' DescribeVpcs (Prelude.Maybe [Prelude.Text])
+describeVpcs_vpcIds = Lens.lens (\DescribeVpcs' {vpcIds} -> vpcIds) (\s@DescribeVpcs' {} a -> s {vpcIds = a} :: DescribeVpcs) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager DescribeVpcs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeVpcsResponse_vpcs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeVpcs_nextToken
+          Lens..~ rs
+          Lens.^? describeVpcsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeVpcs where
+  type AWSResponse DescribeVpcs = DescribeVpcsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpcsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "vpcSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpcs where
+  hashWithSalt _salt DescribeVpcs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vpcIds
+
+instance Prelude.NFData DescribeVpcs where
+  rnf DescribeVpcs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcIds
+
+instance Data.ToHeaders DescribeVpcs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpcs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpcs where
+  toQuery DescribeVpcs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVpcs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          (Data.toQueryList "VpcId" Prelude.<$> vpcIds)
+      ]
+
+-- | /See:/ 'newDescribeVpcsResponse' smart constructor.
+data DescribeVpcsResponse = DescribeVpcsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about one or more VPCs.
+    vpcs :: Prelude.Maybe [Vpc],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpcsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'describeVpcsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'vpcs', 'describeVpcsResponse_vpcs' - Information about one or more VPCs.
+--
+-- 'httpStatus', 'describeVpcsResponse_httpStatus' - The response's http status code.
+newDescribeVpcsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpcsResponse
+newDescribeVpcsResponse pHttpStatus_ =
+  DescribeVpcsResponse'
+    { nextToken = Prelude.Nothing,
+      vpcs = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+describeVpcsResponse_nextToken :: Lens.Lens' DescribeVpcsResponse (Prelude.Maybe Prelude.Text)
+describeVpcsResponse_nextToken = Lens.lens (\DescribeVpcsResponse' {nextToken} -> nextToken) (\s@DescribeVpcsResponse' {} a -> s {nextToken = a} :: DescribeVpcsResponse)
+
+-- | Information about one or more VPCs.
+describeVpcsResponse_vpcs :: Lens.Lens' DescribeVpcsResponse (Prelude.Maybe [Vpc])
+describeVpcsResponse_vpcs = Lens.lens (\DescribeVpcsResponse' {vpcs} -> vpcs) (\s@DescribeVpcsResponse' {} a -> s {vpcs = a} :: DescribeVpcsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpcsResponse_httpStatus :: Lens.Lens' DescribeVpcsResponse Prelude.Int
+describeVpcsResponse_httpStatus = Lens.lens (\DescribeVpcsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpcsResponse' {} a -> s {httpStatus = a} :: DescribeVpcsResponse)
+
+instance Prelude.NFData DescribeVpcsResponse where
+  rnf DescribeVpcsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpcs
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpnConnections.hs b/gen/Amazonka/EC2/DescribeVpnConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpnConnections.hs
@@ -0,0 +1,338 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpnConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your VPN connections.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.DescribeVpnConnections
+  ( -- * Creating a Request
+    DescribeVpnConnections (..),
+    newDescribeVpnConnections,
+
+    -- * Request Lenses
+    describeVpnConnections_dryRun,
+    describeVpnConnections_filters,
+    describeVpnConnections_vpnConnectionIds,
+
+    -- * Destructuring the Response
+    DescribeVpnConnectionsResponse (..),
+    newDescribeVpnConnectionsResponse,
+
+    -- * Response Lenses
+    describeVpnConnectionsResponse_vpnConnections,
+    describeVpnConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeVpnConnections.
+--
+-- /See:/ 'newDescribeVpnConnections' smart constructor.
+data DescribeVpnConnections = DescribeVpnConnections'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @customer-gateway-configuration@ - The configuration information for
+    --     the customer gateway.
+    --
+    -- -   @customer-gateway-id@ - The ID of a customer gateway associated with
+    --     the VPN connection.
+    --
+    -- -   @state@ - The state of the VPN connection (@pending@ | @available@ |
+    --     @deleting@ | @deleted@).
+    --
+    -- -   @option.static-routes-only@ - Indicates whether the connection has
+    --     static routes only. Used for devices that do not support Border
+    --     Gateway Protocol (BGP).
+    --
+    -- -   @route.destination-cidr-block@ - The destination CIDR block. This
+    --     corresponds to the subnet used in a customer data center.
+    --
+    -- -   @bgp-asn@ - The BGP Autonomous System Number (ASN) associated with a
+    --     BGP device.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @type@ - The type of VPN connection. Currently the only supported
+    --     type is @ipsec.1@.
+    --
+    -- -   @vpn-connection-id@ - The ID of the VPN connection.
+    --
+    -- -   @vpn-gateway-id@ - The ID of a virtual private gateway associated
+    --     with the VPN connection.
+    --
+    -- -   @transit-gateway-id@ - The ID of a transit gateway associated with
+    --     the VPN connection.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more VPN connection IDs.
+    --
+    -- Default: Describes your VPN connections.
+    vpnConnectionIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpnConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpnConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpnConnections_filters' - One or more filters.
+--
+-- -   @customer-gateway-configuration@ - The configuration information for
+--     the customer gateway.
+--
+-- -   @customer-gateway-id@ - The ID of a customer gateway associated with
+--     the VPN connection.
+--
+-- -   @state@ - The state of the VPN connection (@pending@ | @available@ |
+--     @deleting@ | @deleted@).
+--
+-- -   @option.static-routes-only@ - Indicates whether the connection has
+--     static routes only. Used for devices that do not support Border
+--     Gateway Protocol (BGP).
+--
+-- -   @route.destination-cidr-block@ - The destination CIDR block. This
+--     corresponds to the subnet used in a customer data center.
+--
+-- -   @bgp-asn@ - The BGP Autonomous System Number (ASN) associated with a
+--     BGP device.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @type@ - The type of VPN connection. Currently the only supported
+--     type is @ipsec.1@.
+--
+-- -   @vpn-connection-id@ - The ID of the VPN connection.
+--
+-- -   @vpn-gateway-id@ - The ID of a virtual private gateway associated
+--     with the VPN connection.
+--
+-- -   @transit-gateway-id@ - The ID of a transit gateway associated with
+--     the VPN connection.
+--
+-- 'vpnConnectionIds', 'describeVpnConnections_vpnConnectionIds' - One or more VPN connection IDs.
+--
+-- Default: Describes your VPN connections.
+newDescribeVpnConnections ::
+  DescribeVpnConnections
+newDescribeVpnConnections =
+  DescribeVpnConnections'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      vpnConnectionIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpnConnections_dryRun :: Lens.Lens' DescribeVpnConnections (Prelude.Maybe Prelude.Bool)
+describeVpnConnections_dryRun = Lens.lens (\DescribeVpnConnections' {dryRun} -> dryRun) (\s@DescribeVpnConnections' {} a -> s {dryRun = a} :: DescribeVpnConnections)
+
+-- | One or more filters.
+--
+-- -   @customer-gateway-configuration@ - The configuration information for
+--     the customer gateway.
+--
+-- -   @customer-gateway-id@ - The ID of a customer gateway associated with
+--     the VPN connection.
+--
+-- -   @state@ - The state of the VPN connection (@pending@ | @available@ |
+--     @deleting@ | @deleted@).
+--
+-- -   @option.static-routes-only@ - Indicates whether the connection has
+--     static routes only. Used for devices that do not support Border
+--     Gateway Protocol (BGP).
+--
+-- -   @route.destination-cidr-block@ - The destination CIDR block. This
+--     corresponds to the subnet used in a customer data center.
+--
+-- -   @bgp-asn@ - The BGP Autonomous System Number (ASN) associated with a
+--     BGP device.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @type@ - The type of VPN connection. Currently the only supported
+--     type is @ipsec.1@.
+--
+-- -   @vpn-connection-id@ - The ID of the VPN connection.
+--
+-- -   @vpn-gateway-id@ - The ID of a virtual private gateway associated
+--     with the VPN connection.
+--
+-- -   @transit-gateway-id@ - The ID of a transit gateway associated with
+--     the VPN connection.
+describeVpnConnections_filters :: Lens.Lens' DescribeVpnConnections (Prelude.Maybe [Filter])
+describeVpnConnections_filters = Lens.lens (\DescribeVpnConnections' {filters} -> filters) (\s@DescribeVpnConnections' {} a -> s {filters = a} :: DescribeVpnConnections) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more VPN connection IDs.
+--
+-- Default: Describes your VPN connections.
+describeVpnConnections_vpnConnectionIds :: Lens.Lens' DescribeVpnConnections (Prelude.Maybe [Prelude.Text])
+describeVpnConnections_vpnConnectionIds = Lens.lens (\DescribeVpnConnections' {vpnConnectionIds} -> vpnConnectionIds) (\s@DescribeVpnConnections' {} a -> s {vpnConnectionIds = a} :: DescribeVpnConnections) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeVpnConnections where
+  type
+    AWSResponse DescribeVpnConnections =
+      DescribeVpnConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpnConnectionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "vpnConnectionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpnConnections where
+  hashWithSalt _salt DescribeVpnConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` vpnConnectionIds
+
+instance Prelude.NFData DescribeVpnConnections where
+  rnf DescribeVpnConnections' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf vpnConnectionIds
+
+instance Data.ToHeaders DescribeVpnConnections where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpnConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpnConnections where
+  toQuery DescribeVpnConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVpnConnections" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "VpnConnectionId"
+              Prelude.<$> vpnConnectionIds
+          )
+      ]
+
+-- | Contains the output of DescribeVpnConnections.
+--
+-- /See:/ 'newDescribeVpnConnectionsResponse' smart constructor.
+data DescribeVpnConnectionsResponse = DescribeVpnConnectionsResponse'
+  { -- | Information about one or more VPN connections.
+    vpnConnections :: Prelude.Maybe [VpnConnection],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpnConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnections', 'describeVpnConnectionsResponse_vpnConnections' - Information about one or more VPN connections.
+--
+-- 'httpStatus', 'describeVpnConnectionsResponse_httpStatus' - The response's http status code.
+newDescribeVpnConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpnConnectionsResponse
+newDescribeVpnConnectionsResponse pHttpStatus_ =
+  DescribeVpnConnectionsResponse'
+    { vpnConnections =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more VPN connections.
+describeVpnConnectionsResponse_vpnConnections :: Lens.Lens' DescribeVpnConnectionsResponse (Prelude.Maybe [VpnConnection])
+describeVpnConnectionsResponse_vpnConnections = Lens.lens (\DescribeVpnConnectionsResponse' {vpnConnections} -> vpnConnections) (\s@DescribeVpnConnectionsResponse' {} a -> s {vpnConnections = a} :: DescribeVpnConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpnConnectionsResponse_httpStatus :: Lens.Lens' DescribeVpnConnectionsResponse Prelude.Int
+describeVpnConnectionsResponse_httpStatus = Lens.lens (\DescribeVpnConnectionsResponse' {httpStatus} -> httpStatus) (\s@DescribeVpnConnectionsResponse' {} a -> s {httpStatus = a} :: DescribeVpnConnectionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeVpnConnectionsResponse
+  where
+  rnf DescribeVpnConnectionsResponse' {..} =
+    Prelude.rnf vpnConnections
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DescribeVpnGateways.hs b/gen/Amazonka/EC2/DescribeVpnGateways.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DescribeVpnGateways.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DescribeVpnGateways
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your virtual private gateways.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html Amazon Web Services Site-to-Site VPN>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.DescribeVpnGateways
+  ( -- * Creating a Request
+    DescribeVpnGateways (..),
+    newDescribeVpnGateways,
+
+    -- * Request Lenses
+    describeVpnGateways_dryRun,
+    describeVpnGateways_filters,
+    describeVpnGateways_vpnGatewayIds,
+
+    -- * Destructuring the Response
+    DescribeVpnGatewaysResponse (..),
+    newDescribeVpnGatewaysResponse,
+
+    -- * Response Lenses
+    describeVpnGatewaysResponse_vpnGateways,
+    describeVpnGatewaysResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DescribeVpnGateways.
+--
+-- /See:/ 'newDescribeVpnGateways' smart constructor.
+data DescribeVpnGateways = DescribeVpnGateways'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @amazon-side-asn@ - The Autonomous System Number (ASN) for the
+    --     Amazon side of the gateway.
+    --
+    -- -   @attachment.state@ - The current state of the attachment between the
+    --     gateway and the VPC (@attaching@ | @attached@ | @detaching@ |
+    --     @detached@).
+    --
+    -- -   @attachment.vpc-id@ - The ID of an attached VPC.
+    --
+    -- -   @availability-zone@ - The Availability Zone for the virtual private
+    --     gateway (if applicable).
+    --
+    -- -   @state@ - The state of the virtual private gateway (@pending@ |
+    --     @available@ | @deleting@ | @deleted@).
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    --
+    -- -   @type@ - The type of virtual private gateway. Currently the only
+    --     supported type is @ipsec.1@.
+    --
+    -- -   @vpn-gateway-id@ - The ID of the virtual private gateway.
+    filters :: Prelude.Maybe [Filter],
+    -- | One or more virtual private gateway IDs.
+    --
+    -- Default: Describes all your virtual private gateways.
+    vpnGatewayIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpnGateways' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'describeVpnGateways_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'describeVpnGateways_filters' - One or more filters.
+--
+-- -   @amazon-side-asn@ - The Autonomous System Number (ASN) for the
+--     Amazon side of the gateway.
+--
+-- -   @attachment.state@ - The current state of the attachment between the
+--     gateway and the VPC (@attaching@ | @attached@ | @detaching@ |
+--     @detached@).
+--
+-- -   @attachment.vpc-id@ - The ID of an attached VPC.
+--
+-- -   @availability-zone@ - The Availability Zone for the virtual private
+--     gateway (if applicable).
+--
+-- -   @state@ - The state of the virtual private gateway (@pending@ |
+--     @available@ | @deleting@ | @deleted@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @type@ - The type of virtual private gateway. Currently the only
+--     supported type is @ipsec.1@.
+--
+-- -   @vpn-gateway-id@ - The ID of the virtual private gateway.
+--
+-- 'vpnGatewayIds', 'describeVpnGateways_vpnGatewayIds' - One or more virtual private gateway IDs.
+--
+-- Default: Describes all your virtual private gateways.
+newDescribeVpnGateways ::
+  DescribeVpnGateways
+newDescribeVpnGateways =
+  DescribeVpnGateways'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      vpnGatewayIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+describeVpnGateways_dryRun :: Lens.Lens' DescribeVpnGateways (Prelude.Maybe Prelude.Bool)
+describeVpnGateways_dryRun = Lens.lens (\DescribeVpnGateways' {dryRun} -> dryRun) (\s@DescribeVpnGateways' {} a -> s {dryRun = a} :: DescribeVpnGateways)
+
+-- | One or more filters.
+--
+-- -   @amazon-side-asn@ - The Autonomous System Number (ASN) for the
+--     Amazon side of the gateway.
+--
+-- -   @attachment.state@ - The current state of the attachment between the
+--     gateway and the VPC (@attaching@ | @attached@ | @detaching@ |
+--     @detached@).
+--
+-- -   @attachment.vpc-id@ - The ID of an attached VPC.
+--
+-- -   @availability-zone@ - The Availability Zone for the virtual private
+--     gateway (if applicable).
+--
+-- -   @state@ - The state of the virtual private gateway (@pending@ |
+--     @available@ | @deleting@ | @deleted@).
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- -   @type@ - The type of virtual private gateway. Currently the only
+--     supported type is @ipsec.1@.
+--
+-- -   @vpn-gateway-id@ - The ID of the virtual private gateway.
+describeVpnGateways_filters :: Lens.Lens' DescribeVpnGateways (Prelude.Maybe [Filter])
+describeVpnGateways_filters = Lens.lens (\DescribeVpnGateways' {filters} -> filters) (\s@DescribeVpnGateways' {} a -> s {filters = a} :: DescribeVpnGateways) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more virtual private gateway IDs.
+--
+-- Default: Describes all your virtual private gateways.
+describeVpnGateways_vpnGatewayIds :: Lens.Lens' DescribeVpnGateways (Prelude.Maybe [Prelude.Text])
+describeVpnGateways_vpnGatewayIds = Lens.lens (\DescribeVpnGateways' {vpnGatewayIds} -> vpnGatewayIds) (\s@DescribeVpnGateways' {} a -> s {vpnGatewayIds = a} :: DescribeVpnGateways) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest DescribeVpnGateways where
+  type
+    AWSResponse DescribeVpnGateways =
+      DescribeVpnGatewaysResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DescribeVpnGatewaysResponse'
+            Prelude.<$> ( x
+                            Data..@? "vpnGatewaySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeVpnGateways where
+  hashWithSalt _salt DescribeVpnGateways' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` vpnGatewayIds
+
+instance Prelude.NFData DescribeVpnGateways where
+  rnf DescribeVpnGateways' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf vpnGatewayIds
+
+instance Data.ToHeaders DescribeVpnGateways where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DescribeVpnGateways where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeVpnGateways where
+  toQuery DescribeVpnGateways' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DescribeVpnGateways" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        Data.toQuery
+          ( Data.toQueryList "VpnGatewayId"
+              Prelude.<$> vpnGatewayIds
+          )
+      ]
+
+-- | Contains the output of DescribeVpnGateways.
+--
+-- /See:/ 'newDescribeVpnGatewaysResponse' smart constructor.
+data DescribeVpnGatewaysResponse = DescribeVpnGatewaysResponse'
+  { -- | Information about one or more virtual private gateways.
+    vpnGateways :: Prelude.Maybe [VpnGateway],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeVpnGatewaysResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnGateways', 'describeVpnGatewaysResponse_vpnGateways' - Information about one or more virtual private gateways.
+--
+-- 'httpStatus', 'describeVpnGatewaysResponse_httpStatus' - The response's http status code.
+newDescribeVpnGatewaysResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeVpnGatewaysResponse
+newDescribeVpnGatewaysResponse pHttpStatus_ =
+  DescribeVpnGatewaysResponse'
+    { vpnGateways =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about one or more virtual private gateways.
+describeVpnGatewaysResponse_vpnGateways :: Lens.Lens' DescribeVpnGatewaysResponse (Prelude.Maybe [VpnGateway])
+describeVpnGatewaysResponse_vpnGateways = Lens.lens (\DescribeVpnGatewaysResponse' {vpnGateways} -> vpnGateways) (\s@DescribeVpnGatewaysResponse' {} a -> s {vpnGateways = a} :: DescribeVpnGatewaysResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeVpnGatewaysResponse_httpStatus :: Lens.Lens' DescribeVpnGatewaysResponse Prelude.Int
+describeVpnGatewaysResponse_httpStatus = Lens.lens (\DescribeVpnGatewaysResponse' {httpStatus} -> httpStatus) (\s@DescribeVpnGatewaysResponse' {} a -> s {httpStatus = a} :: DescribeVpnGatewaysResponse)
+
+instance Prelude.NFData DescribeVpnGatewaysResponse where
+  rnf DescribeVpnGatewaysResponse' {..} =
+    Prelude.rnf vpnGateways
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DetachClassicLinkVpc.hs b/gen/Amazonka/EC2/DetachClassicLinkVpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DetachClassicLinkVpc.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DetachClassicLinkVpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the
+-- instance has been unlinked, the VPC security groups are no longer
+-- associated with it. An instance is automatically unlinked from a VPC
+-- when it\'s stopped.
+module Amazonka.EC2.DetachClassicLinkVpc
+  ( -- * Creating a Request
+    DetachClassicLinkVpc (..),
+    newDetachClassicLinkVpc,
+
+    -- * Request Lenses
+    detachClassicLinkVpc_dryRun,
+    detachClassicLinkVpc_instanceId,
+    detachClassicLinkVpc_vpcId,
+
+    -- * Destructuring the Response
+    DetachClassicLinkVpcResponse (..),
+    newDetachClassicLinkVpcResponse,
+
+    -- * Response Lenses
+    detachClassicLinkVpcResponse_return,
+    detachClassicLinkVpcResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetachClassicLinkVpc' smart constructor.
+data DetachClassicLinkVpc = DetachClassicLinkVpc'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance to unlink from the VPC.
+    instanceId :: Prelude.Text,
+    -- | The ID of the VPC to which the instance is linked.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachClassicLinkVpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'detachClassicLinkVpc_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'detachClassicLinkVpc_instanceId' - The ID of the instance to unlink from the VPC.
+--
+-- 'vpcId', 'detachClassicLinkVpc_vpcId' - The ID of the VPC to which the instance is linked.
+newDetachClassicLinkVpc ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  DetachClassicLinkVpc
+newDetachClassicLinkVpc pInstanceId_ pVpcId_ =
+  DetachClassicLinkVpc'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+detachClassicLinkVpc_dryRun :: Lens.Lens' DetachClassicLinkVpc (Prelude.Maybe Prelude.Bool)
+detachClassicLinkVpc_dryRun = Lens.lens (\DetachClassicLinkVpc' {dryRun} -> dryRun) (\s@DetachClassicLinkVpc' {} a -> s {dryRun = a} :: DetachClassicLinkVpc)
+
+-- | The ID of the instance to unlink from the VPC.
+detachClassicLinkVpc_instanceId :: Lens.Lens' DetachClassicLinkVpc Prelude.Text
+detachClassicLinkVpc_instanceId = Lens.lens (\DetachClassicLinkVpc' {instanceId} -> instanceId) (\s@DetachClassicLinkVpc' {} a -> s {instanceId = a} :: DetachClassicLinkVpc)
+
+-- | The ID of the VPC to which the instance is linked.
+detachClassicLinkVpc_vpcId :: Lens.Lens' DetachClassicLinkVpc Prelude.Text
+detachClassicLinkVpc_vpcId = Lens.lens (\DetachClassicLinkVpc' {vpcId} -> vpcId) (\s@DetachClassicLinkVpc' {} a -> s {vpcId = a} :: DetachClassicLinkVpc)
+
+instance Core.AWSRequest DetachClassicLinkVpc where
+  type
+    AWSResponse DetachClassicLinkVpc =
+      DetachClassicLinkVpcResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DetachClassicLinkVpcResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DetachClassicLinkVpc where
+  hashWithSalt _salt DetachClassicLinkVpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData DetachClassicLinkVpc where
+  rnf DetachClassicLinkVpc' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders DetachClassicLinkVpc where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DetachClassicLinkVpc where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetachClassicLinkVpc where
+  toQuery DetachClassicLinkVpc' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DetachClassicLinkVpc" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDetachClassicLinkVpcResponse' smart constructor.
+data DetachClassicLinkVpcResponse = DetachClassicLinkVpcResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachClassicLinkVpcResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'detachClassicLinkVpcResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'detachClassicLinkVpcResponse_httpStatus' - The response's http status code.
+newDetachClassicLinkVpcResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DetachClassicLinkVpcResponse
+newDetachClassicLinkVpcResponse pHttpStatus_ =
+  DetachClassicLinkVpcResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+detachClassicLinkVpcResponse_return :: Lens.Lens' DetachClassicLinkVpcResponse (Prelude.Maybe Prelude.Bool)
+detachClassicLinkVpcResponse_return = Lens.lens (\DetachClassicLinkVpcResponse' {return'} -> return') (\s@DetachClassicLinkVpcResponse' {} a -> s {return' = a} :: DetachClassicLinkVpcResponse)
+
+-- | The response's http status code.
+detachClassicLinkVpcResponse_httpStatus :: Lens.Lens' DetachClassicLinkVpcResponse Prelude.Int
+detachClassicLinkVpcResponse_httpStatus = Lens.lens (\DetachClassicLinkVpcResponse' {httpStatus} -> httpStatus) (\s@DetachClassicLinkVpcResponse' {} a -> s {httpStatus = a} :: DetachClassicLinkVpcResponse)
+
+instance Prelude.NFData DetachClassicLinkVpcResponse where
+  rnf DetachClassicLinkVpcResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DetachInternetGateway.hs b/gen/Amazonka/EC2/DetachInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DetachInternetGateway.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DetachInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Detaches an internet gateway from a VPC, disabling connectivity between
+-- the internet and the VPC. The VPC must not contain any running instances
+-- with Elastic IP addresses or public IPv4 addresses.
+module Amazonka.EC2.DetachInternetGateway
+  ( -- * Creating a Request
+    DetachInternetGateway (..),
+    newDetachInternetGateway,
+
+    -- * Request Lenses
+    detachInternetGateway_dryRun,
+    detachInternetGateway_internetGatewayId,
+    detachInternetGateway_vpcId,
+
+    -- * Destructuring the Response
+    DetachInternetGatewayResponse (..),
+    newDetachInternetGatewayResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetachInternetGateway' smart constructor.
+data DetachInternetGateway = DetachInternetGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the internet gateway.
+    internetGatewayId :: Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'detachInternetGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'internetGatewayId', 'detachInternetGateway_internetGatewayId' - The ID of the internet gateway.
+--
+-- 'vpcId', 'detachInternetGateway_vpcId' - The ID of the VPC.
+newDetachInternetGateway ::
+  -- | 'internetGatewayId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  DetachInternetGateway
+newDetachInternetGateway pInternetGatewayId_ pVpcId_ =
+  DetachInternetGateway'
+    { dryRun = Prelude.Nothing,
+      internetGatewayId = pInternetGatewayId_,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+detachInternetGateway_dryRun :: Lens.Lens' DetachInternetGateway (Prelude.Maybe Prelude.Bool)
+detachInternetGateway_dryRun = Lens.lens (\DetachInternetGateway' {dryRun} -> dryRun) (\s@DetachInternetGateway' {} a -> s {dryRun = a} :: DetachInternetGateway)
+
+-- | The ID of the internet gateway.
+detachInternetGateway_internetGatewayId :: Lens.Lens' DetachInternetGateway Prelude.Text
+detachInternetGateway_internetGatewayId = Lens.lens (\DetachInternetGateway' {internetGatewayId} -> internetGatewayId) (\s@DetachInternetGateway' {} a -> s {internetGatewayId = a} :: DetachInternetGateway)
+
+-- | The ID of the VPC.
+detachInternetGateway_vpcId :: Lens.Lens' DetachInternetGateway Prelude.Text
+detachInternetGateway_vpcId = Lens.lens (\DetachInternetGateway' {vpcId} -> vpcId) (\s@DetachInternetGateway' {} a -> s {vpcId = a} :: DetachInternetGateway)
+
+instance Core.AWSRequest DetachInternetGateway where
+  type
+    AWSResponse DetachInternetGateway =
+      DetachInternetGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DetachInternetGatewayResponse'
+
+instance Prelude.Hashable DetachInternetGateway where
+  hashWithSalt _salt DetachInternetGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` internetGatewayId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData DetachInternetGateway where
+  rnf DetachInternetGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf internetGatewayId
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders DetachInternetGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DetachInternetGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetachInternetGateway where
+  toQuery DetachInternetGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DetachInternetGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InternetGatewayId" Data.=: internetGatewayId,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDetachInternetGatewayResponse' smart constructor.
+data DetachInternetGatewayResponse = DetachInternetGatewayResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachInternetGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDetachInternetGatewayResponse ::
+  DetachInternetGatewayResponse
+newDetachInternetGatewayResponse =
+  DetachInternetGatewayResponse'
+
+instance Prelude.NFData DetachInternetGatewayResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DetachNetworkInterface.hs b/gen/Amazonka/EC2/DetachNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DetachNetworkInterface.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DetachNetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Detaches a network interface from an instance.
+module Amazonka.EC2.DetachNetworkInterface
+  ( -- * Creating a Request
+    DetachNetworkInterface (..),
+    newDetachNetworkInterface,
+
+    -- * Request Lenses
+    detachNetworkInterface_dryRun,
+    detachNetworkInterface_force,
+    detachNetworkInterface_attachmentId,
+
+    -- * Destructuring the Response
+    DetachNetworkInterfaceResponse (..),
+    newDetachNetworkInterfaceResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DetachNetworkInterface.
+--
+-- /See:/ 'newDetachNetworkInterface' smart constructor.
+data DetachNetworkInterface = DetachNetworkInterface'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether to force a detachment.
+    --
+    -- -   Use the @Force@ parameter only as a last resort to detach a network
+    --     interface from a failed instance.
+    --
+    -- -   If you use the @Force@ parameter to detach a network interface, you
+    --     might not be able to attach a different network interface to the
+    --     same index on the instance without first stopping and starting the
+    --     instance.
+    --
+    -- -   If you force the detachment of a network interface, the
+    --     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html instance metadata>
+    --     might not get updated. This means that the attributes associated
+    --     with the detached network interface might still be visible. The
+    --     instance metadata will get updated when you stop and start the
+    --     instance.
+    force :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    attachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachNetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'detachNetworkInterface_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'force', 'detachNetworkInterface_force' - Specifies whether to force a detachment.
+--
+-- -   Use the @Force@ parameter only as a last resort to detach a network
+--     interface from a failed instance.
+--
+-- -   If you use the @Force@ parameter to detach a network interface, you
+--     might not be able to attach a different network interface to the
+--     same index on the instance without first stopping and starting the
+--     instance.
+--
+-- -   If you force the detachment of a network interface, the
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html instance metadata>
+--     might not get updated. This means that the attributes associated
+--     with the detached network interface might still be visible. The
+--     instance metadata will get updated when you stop and start the
+--     instance.
+--
+-- 'attachmentId', 'detachNetworkInterface_attachmentId' - The ID of the attachment.
+newDetachNetworkInterface ::
+  -- | 'attachmentId'
+  Prelude.Text ->
+  DetachNetworkInterface
+newDetachNetworkInterface pAttachmentId_ =
+  DetachNetworkInterface'
+    { dryRun = Prelude.Nothing,
+      force = Prelude.Nothing,
+      attachmentId = pAttachmentId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+detachNetworkInterface_dryRun :: Lens.Lens' DetachNetworkInterface (Prelude.Maybe Prelude.Bool)
+detachNetworkInterface_dryRun = Lens.lens (\DetachNetworkInterface' {dryRun} -> dryRun) (\s@DetachNetworkInterface' {} a -> s {dryRun = a} :: DetachNetworkInterface)
+
+-- | Specifies whether to force a detachment.
+--
+-- -   Use the @Force@ parameter only as a last resort to detach a network
+--     interface from a failed instance.
+--
+-- -   If you use the @Force@ parameter to detach a network interface, you
+--     might not be able to attach a different network interface to the
+--     same index on the instance without first stopping and starting the
+--     instance.
+--
+-- -   If you force the detachment of a network interface, the
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html instance metadata>
+--     might not get updated. This means that the attributes associated
+--     with the detached network interface might still be visible. The
+--     instance metadata will get updated when you stop and start the
+--     instance.
+detachNetworkInterface_force :: Lens.Lens' DetachNetworkInterface (Prelude.Maybe Prelude.Bool)
+detachNetworkInterface_force = Lens.lens (\DetachNetworkInterface' {force} -> force) (\s@DetachNetworkInterface' {} a -> s {force = a} :: DetachNetworkInterface)
+
+-- | The ID of the attachment.
+detachNetworkInterface_attachmentId :: Lens.Lens' DetachNetworkInterface Prelude.Text
+detachNetworkInterface_attachmentId = Lens.lens (\DetachNetworkInterface' {attachmentId} -> attachmentId) (\s@DetachNetworkInterface' {} a -> s {attachmentId = a} :: DetachNetworkInterface)
+
+instance Core.AWSRequest DetachNetworkInterface where
+  type
+    AWSResponse DetachNetworkInterface =
+      DetachNetworkInterfaceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      DetachNetworkInterfaceResponse'
+
+instance Prelude.Hashable DetachNetworkInterface where
+  hashWithSalt _salt DetachNetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` force
+      `Prelude.hashWithSalt` attachmentId
+
+instance Prelude.NFData DetachNetworkInterface where
+  rnf DetachNetworkInterface' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf force
+      `Prelude.seq` Prelude.rnf attachmentId
+
+instance Data.ToHeaders DetachNetworkInterface where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DetachNetworkInterface where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetachNetworkInterface where
+  toQuery DetachNetworkInterface' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DetachNetworkInterface" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Force" Data.=: force,
+        "AttachmentId" Data.=: attachmentId
+      ]
+
+-- | /See:/ 'newDetachNetworkInterfaceResponse' smart constructor.
+data DetachNetworkInterfaceResponse = DetachNetworkInterfaceResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachNetworkInterfaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDetachNetworkInterfaceResponse ::
+  DetachNetworkInterfaceResponse
+newDetachNetworkInterfaceResponse =
+  DetachNetworkInterfaceResponse'
+
+instance
+  Prelude.NFData
+    DetachNetworkInterfaceResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DetachVerifiedAccessTrustProvider.hs b/gen/Amazonka/EC2/DetachVerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DetachVerifiedAccessTrustProvider.hs
@@ -0,0 +1,263 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DetachVerifiedAccessTrustProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Detach a trust provider from an Amazon Web Services Verified Access
+-- instance.
+module Amazonka.EC2.DetachVerifiedAccessTrustProvider
+  ( -- * Creating a Request
+    DetachVerifiedAccessTrustProvider (..),
+    newDetachVerifiedAccessTrustProvider,
+
+    -- * Request Lenses
+    detachVerifiedAccessTrustProvider_clientToken,
+    detachVerifiedAccessTrustProvider_dryRun,
+    detachVerifiedAccessTrustProvider_verifiedAccessInstanceId,
+    detachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+
+    -- * Destructuring the Response
+    DetachVerifiedAccessTrustProviderResponse (..),
+    newDetachVerifiedAccessTrustProviderResponse,
+
+    -- * Response Lenses
+    detachVerifiedAccessTrustProviderResponse_verifiedAccessInstance,
+    detachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    detachVerifiedAccessTrustProviderResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetachVerifiedAccessTrustProvider' smart constructor.
+data DetachVerifiedAccessTrustProvider = DetachVerifiedAccessTrustProvider'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProviderId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachVerifiedAccessTrustProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'detachVerifiedAccessTrustProvider_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'detachVerifiedAccessTrustProvider_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessInstanceId', 'detachVerifiedAccessTrustProvider_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'verifiedAccessTrustProviderId', 'detachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId' - The ID of the Amazon Web Services Verified Access trust provider.
+newDetachVerifiedAccessTrustProvider ::
+  -- | 'verifiedAccessInstanceId'
+  Prelude.Text ->
+  -- | 'verifiedAccessTrustProviderId'
+  Prelude.Text ->
+  DetachVerifiedAccessTrustProvider
+newDetachVerifiedAccessTrustProvider
+  pVerifiedAccessInstanceId_
+  pVerifiedAccessTrustProviderId_ =
+    DetachVerifiedAccessTrustProvider'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessInstanceId =
+          pVerifiedAccessInstanceId_,
+        verifiedAccessTrustProviderId =
+          pVerifiedAccessTrustProviderId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+detachVerifiedAccessTrustProvider_clientToken :: Lens.Lens' DetachVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+detachVerifiedAccessTrustProvider_clientToken = Lens.lens (\DetachVerifiedAccessTrustProvider' {clientToken} -> clientToken) (\s@DetachVerifiedAccessTrustProvider' {} a -> s {clientToken = a} :: DetachVerifiedAccessTrustProvider)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+detachVerifiedAccessTrustProvider_dryRun :: Lens.Lens' DetachVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Bool)
+detachVerifiedAccessTrustProvider_dryRun = Lens.lens (\DetachVerifiedAccessTrustProvider' {dryRun} -> dryRun) (\s@DetachVerifiedAccessTrustProvider' {} a -> s {dryRun = a} :: DetachVerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+detachVerifiedAccessTrustProvider_verifiedAccessInstanceId :: Lens.Lens' DetachVerifiedAccessTrustProvider Prelude.Text
+detachVerifiedAccessTrustProvider_verifiedAccessInstanceId = Lens.lens (\DetachVerifiedAccessTrustProvider' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@DetachVerifiedAccessTrustProvider' {} a -> s {verifiedAccessInstanceId = a} :: DetachVerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+detachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId :: Lens.Lens' DetachVerifiedAccessTrustProvider Prelude.Text
+detachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId = Lens.lens (\DetachVerifiedAccessTrustProvider' {verifiedAccessTrustProviderId} -> verifiedAccessTrustProviderId) (\s@DetachVerifiedAccessTrustProvider' {} a -> s {verifiedAccessTrustProviderId = a} :: DetachVerifiedAccessTrustProvider)
+
+instance
+  Core.AWSRequest
+    DetachVerifiedAccessTrustProvider
+  where
+  type
+    AWSResponse DetachVerifiedAccessTrustProvider =
+      DetachVerifiedAccessTrustProviderResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DetachVerifiedAccessTrustProviderResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessInstance")
+            Prelude.<*> (x Data..@? "verifiedAccessTrustProvider")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DetachVerifiedAccessTrustProvider
+  where
+  hashWithSalt
+    _salt
+    DetachVerifiedAccessTrustProvider' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` verifiedAccessInstanceId
+        `Prelude.hashWithSalt` verifiedAccessTrustProviderId
+
+instance
+  Prelude.NFData
+    DetachVerifiedAccessTrustProvider
+  where
+  rnf DetachVerifiedAccessTrustProvider' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderId
+
+instance
+  Data.ToHeaders
+    DetachVerifiedAccessTrustProvider
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DetachVerifiedAccessTrustProvider
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DetachVerifiedAccessTrustProvider
+  where
+  toQuery DetachVerifiedAccessTrustProvider' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DetachVerifiedAccessTrustProvider" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId,
+        "VerifiedAccessTrustProviderId"
+          Data.=: verifiedAccessTrustProviderId
+      ]
+
+-- | /See:/ 'newDetachVerifiedAccessTrustProviderResponse' smart constructor.
+data DetachVerifiedAccessTrustProviderResponse = DetachVerifiedAccessTrustProviderResponse'
+  { -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstance :: Prelude.Maybe VerifiedAccessInstance,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProvider :: Prelude.Maybe VerifiedAccessTrustProvider,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachVerifiedAccessTrustProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessInstance', 'detachVerifiedAccessTrustProviderResponse_verifiedAccessInstance' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'verifiedAccessTrustProvider', 'detachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider' - The ID of the Amazon Web Services Verified Access trust provider.
+--
+-- 'httpStatus', 'detachVerifiedAccessTrustProviderResponse_httpStatus' - The response's http status code.
+newDetachVerifiedAccessTrustProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DetachVerifiedAccessTrustProviderResponse
+newDetachVerifiedAccessTrustProviderResponse
+  pHttpStatus_ =
+    DetachVerifiedAccessTrustProviderResponse'
+      { verifiedAccessInstance =
+          Prelude.Nothing,
+        verifiedAccessTrustProvider =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+detachVerifiedAccessTrustProviderResponse_verifiedAccessInstance :: Lens.Lens' DetachVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessInstance)
+detachVerifiedAccessTrustProviderResponse_verifiedAccessInstance = Lens.lens (\DetachVerifiedAccessTrustProviderResponse' {verifiedAccessInstance} -> verifiedAccessInstance) (\s@DetachVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessInstance = a} :: DetachVerifiedAccessTrustProviderResponse)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+detachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider :: Lens.Lens' DetachVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessTrustProvider)
+detachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider = Lens.lens (\DetachVerifiedAccessTrustProviderResponse' {verifiedAccessTrustProvider} -> verifiedAccessTrustProvider) (\s@DetachVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessTrustProvider = a} :: DetachVerifiedAccessTrustProviderResponse)
+
+-- | The response's http status code.
+detachVerifiedAccessTrustProviderResponse_httpStatus :: Lens.Lens' DetachVerifiedAccessTrustProviderResponse Prelude.Int
+detachVerifiedAccessTrustProviderResponse_httpStatus = Lens.lens (\DetachVerifiedAccessTrustProviderResponse' {httpStatus} -> httpStatus) (\s@DetachVerifiedAccessTrustProviderResponse' {} a -> s {httpStatus = a} :: DetachVerifiedAccessTrustProviderResponse)
+
+instance
+  Prelude.NFData
+    DetachVerifiedAccessTrustProviderResponse
+  where
+  rnf DetachVerifiedAccessTrustProviderResponse' {..} =
+    Prelude.rnf verifiedAccessInstance
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProvider
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DetachVolume.hs b/gen/Amazonka/EC2/DetachVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DetachVolume.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DetachVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Detaches an EBS volume from an instance. Make sure to unmount any file
+-- systems on the device within your operating system before detaching the
+-- volume. Failure to do so can result in the volume becoming stuck in the
+-- @busy@ state while detaching. If this happens, detachment can be delayed
+-- indefinitely until you unmount the volume, force detachment, reboot the
+-- instance, or all three. If an EBS volume is the root device of an
+-- instance, it can\'t be detached while the instance is running. To detach
+-- the root volume, stop the instance first.
+--
+-- When a volume with an Amazon Web Services Marketplace product code is
+-- detached from an instance, the product code is no longer associated with
+-- the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html Detach an Amazon EBS volume>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DetachVolume
+  ( -- * Creating a Request
+    DetachVolume (..),
+    newDetachVolume,
+
+    -- * Request Lenses
+    detachVolume_device,
+    detachVolume_dryRun,
+    detachVolume_force,
+    detachVolume_instanceId,
+    detachVolume_volumeId,
+
+    -- * Destructuring the Response
+    VolumeAttachment (..),
+    newVolumeAttachment,
+
+    -- * Response Lenses
+    volumeAttachment_attachTime,
+    volumeAttachment_deleteOnTermination,
+    volumeAttachment_device,
+    volumeAttachment_instanceId,
+    volumeAttachment_state,
+    volumeAttachment_volumeId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDetachVolume' smart constructor.
+data DetachVolume = DetachVolume'
+  { -- | The device name.
+    device :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Forces detachment if the previous detachment attempt did not occur
+    -- cleanly (for example, logging into an instance, unmounting the volume,
+    -- and detaching normally). This option can lead to data loss or a
+    -- corrupted file system. Use this option only as a last resort to detach a
+    -- volume from a failed instance. The instance won\'t have an opportunity
+    -- to flush file system caches or file system metadata. If you use this
+    -- option, you must perform file system check and repair procedures.
+    force :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance. If you are detaching a Multi-Attach enabled
+    -- volume, you must specify an instance ID.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'device', 'detachVolume_device' - The device name.
+--
+-- 'dryRun', 'detachVolume_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'force', 'detachVolume_force' - Forces detachment if the previous detachment attempt did not occur
+-- cleanly (for example, logging into an instance, unmounting the volume,
+-- and detaching normally). This option can lead to data loss or a
+-- corrupted file system. Use this option only as a last resort to detach a
+-- volume from a failed instance. The instance won\'t have an opportunity
+-- to flush file system caches or file system metadata. If you use this
+-- option, you must perform file system check and repair procedures.
+--
+-- 'instanceId', 'detachVolume_instanceId' - The ID of the instance. If you are detaching a Multi-Attach enabled
+-- volume, you must specify an instance ID.
+--
+-- 'volumeId', 'detachVolume_volumeId' - The ID of the volume.
+newDetachVolume ::
+  -- | 'volumeId'
+  Prelude.Text ->
+  DetachVolume
+newDetachVolume pVolumeId_ =
+  DetachVolume'
+    { device = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      force = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      volumeId = pVolumeId_
+    }
+
+-- | The device name.
+detachVolume_device :: Lens.Lens' DetachVolume (Prelude.Maybe Prelude.Text)
+detachVolume_device = Lens.lens (\DetachVolume' {device} -> device) (\s@DetachVolume' {} a -> s {device = a} :: DetachVolume)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+detachVolume_dryRun :: Lens.Lens' DetachVolume (Prelude.Maybe Prelude.Bool)
+detachVolume_dryRun = Lens.lens (\DetachVolume' {dryRun} -> dryRun) (\s@DetachVolume' {} a -> s {dryRun = a} :: DetachVolume)
+
+-- | Forces detachment if the previous detachment attempt did not occur
+-- cleanly (for example, logging into an instance, unmounting the volume,
+-- and detaching normally). This option can lead to data loss or a
+-- corrupted file system. Use this option only as a last resort to detach a
+-- volume from a failed instance. The instance won\'t have an opportunity
+-- to flush file system caches or file system metadata. If you use this
+-- option, you must perform file system check and repair procedures.
+detachVolume_force :: Lens.Lens' DetachVolume (Prelude.Maybe Prelude.Bool)
+detachVolume_force = Lens.lens (\DetachVolume' {force} -> force) (\s@DetachVolume' {} a -> s {force = a} :: DetachVolume)
+
+-- | The ID of the instance. If you are detaching a Multi-Attach enabled
+-- volume, you must specify an instance ID.
+detachVolume_instanceId :: Lens.Lens' DetachVolume (Prelude.Maybe Prelude.Text)
+detachVolume_instanceId = Lens.lens (\DetachVolume' {instanceId} -> instanceId) (\s@DetachVolume' {} a -> s {instanceId = a} :: DetachVolume)
+
+-- | The ID of the volume.
+detachVolume_volumeId :: Lens.Lens' DetachVolume Prelude.Text
+detachVolume_volumeId = Lens.lens (\DetachVolume' {volumeId} -> volumeId) (\s@DetachVolume' {} a -> s {volumeId = a} :: DetachVolume)
+
+instance Core.AWSRequest DetachVolume where
+  type AWSResponse DetachVolume = VolumeAttachment
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML (\s h x -> Data.parseXML x)
+
+instance Prelude.Hashable DetachVolume where
+  hashWithSalt _salt DetachVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` device
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` force
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData DetachVolume where
+  rnf DetachVolume' {..} =
+    Prelude.rnf device
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf force
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders DetachVolume where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DetachVolume where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetachVolume where
+  toQuery DetachVolume' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DetachVolume" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Device" Data.=: device,
+        "DryRun" Data.=: dryRun,
+        "Force" Data.=: force,
+        "InstanceId" Data.=: instanceId,
+        "VolumeId" Data.=: volumeId
+      ]
diff --git a/gen/Amazonka/EC2/DetachVpnGateway.hs b/gen/Amazonka/EC2/DetachVpnGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DetachVpnGateway.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DetachVpnGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Detaches a virtual private gateway from a VPC. You do this if you\'re
+-- planning to turn off the VPC and not use it anymore. You can confirm a
+-- virtual private gateway has been completely detached from a VPC by
+-- describing the virtual private gateway (any attachments to the virtual
+-- private gateway are also described).
+--
+-- You must wait for the attachment\'s state to switch to @detached@ before
+-- you can delete the VPC or attach a different VPC to the virtual private
+-- gateway.
+module Amazonka.EC2.DetachVpnGateway
+  ( -- * Creating a Request
+    DetachVpnGateway (..),
+    newDetachVpnGateway,
+
+    -- * Request Lenses
+    detachVpnGateway_dryRun,
+    detachVpnGateway_vpcId,
+    detachVpnGateway_vpnGatewayId,
+
+    -- * Destructuring the Response
+    DetachVpnGatewayResponse (..),
+    newDetachVpnGatewayResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DetachVpnGateway.
+--
+-- /See:/ 'newDetachVpnGateway' smart constructor.
+data DetachVpnGateway = DetachVpnGateway'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text,
+    -- | The ID of the virtual private gateway.
+    vpnGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachVpnGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'detachVpnGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcId', 'detachVpnGateway_vpcId' - The ID of the VPC.
+--
+-- 'vpnGatewayId', 'detachVpnGateway_vpnGatewayId' - The ID of the virtual private gateway.
+newDetachVpnGateway ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  -- | 'vpnGatewayId'
+  Prelude.Text ->
+  DetachVpnGateway
+newDetachVpnGateway pVpcId_ pVpnGatewayId_ =
+  DetachVpnGateway'
+    { dryRun = Prelude.Nothing,
+      vpcId = pVpcId_,
+      vpnGatewayId = pVpnGatewayId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+detachVpnGateway_dryRun :: Lens.Lens' DetachVpnGateway (Prelude.Maybe Prelude.Bool)
+detachVpnGateway_dryRun = Lens.lens (\DetachVpnGateway' {dryRun} -> dryRun) (\s@DetachVpnGateway' {} a -> s {dryRun = a} :: DetachVpnGateway)
+
+-- | The ID of the VPC.
+detachVpnGateway_vpcId :: Lens.Lens' DetachVpnGateway Prelude.Text
+detachVpnGateway_vpcId = Lens.lens (\DetachVpnGateway' {vpcId} -> vpcId) (\s@DetachVpnGateway' {} a -> s {vpcId = a} :: DetachVpnGateway)
+
+-- | The ID of the virtual private gateway.
+detachVpnGateway_vpnGatewayId :: Lens.Lens' DetachVpnGateway Prelude.Text
+detachVpnGateway_vpnGatewayId = Lens.lens (\DetachVpnGateway' {vpnGatewayId} -> vpnGatewayId) (\s@DetachVpnGateway' {} a -> s {vpnGatewayId = a} :: DetachVpnGateway)
+
+instance Core.AWSRequest DetachVpnGateway where
+  type
+    AWSResponse DetachVpnGateway =
+      DetachVpnGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DetachVpnGatewayResponse'
+
+instance Prelude.Hashable DetachVpnGateway where
+  hashWithSalt _salt DetachVpnGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpnGatewayId
+
+instance Prelude.NFData DetachVpnGateway where
+  rnf DetachVpnGateway' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpnGatewayId
+
+instance Data.ToHeaders DetachVpnGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DetachVpnGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DetachVpnGateway where
+  toQuery DetachVpnGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DetachVpnGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcId" Data.=: vpcId,
+        "VpnGatewayId" Data.=: vpnGatewayId
+      ]
+
+-- | /See:/ 'newDetachVpnGatewayResponse' smart constructor.
+data DetachVpnGatewayResponse = DetachVpnGatewayResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DetachVpnGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDetachVpnGatewayResponse ::
+  DetachVpnGatewayResponse
+newDetachVpnGatewayResponse =
+  DetachVpnGatewayResponse'
+
+instance Prelude.NFData DetachVpnGatewayResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DisableAddressTransfer.hs b/gen/Amazonka/EC2/DisableAddressTransfer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableAddressTransfer.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableAddressTransfer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables Elastic IP address transfer. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro Transfer Elastic IP addresses>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.DisableAddressTransfer
+  ( -- * Creating a Request
+    DisableAddressTransfer (..),
+    newDisableAddressTransfer,
+
+    -- * Request Lenses
+    disableAddressTransfer_dryRun,
+    disableAddressTransfer_allocationId,
+
+    -- * Destructuring the Response
+    DisableAddressTransferResponse (..),
+    newDisableAddressTransferResponse,
+
+    -- * Response Lenses
+    disableAddressTransferResponse_addressTransfer,
+    disableAddressTransferResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableAddressTransfer' smart constructor.
+data DisableAddressTransfer = DisableAddressTransfer'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The allocation ID of an Elastic IP address.
+    allocationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableAddressTransfer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableAddressTransfer_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'allocationId', 'disableAddressTransfer_allocationId' - The allocation ID of an Elastic IP address.
+newDisableAddressTransfer ::
+  -- | 'allocationId'
+  Prelude.Text ->
+  DisableAddressTransfer
+newDisableAddressTransfer pAllocationId_ =
+  DisableAddressTransfer'
+    { dryRun = Prelude.Nothing,
+      allocationId = pAllocationId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableAddressTransfer_dryRun :: Lens.Lens' DisableAddressTransfer (Prelude.Maybe Prelude.Bool)
+disableAddressTransfer_dryRun = Lens.lens (\DisableAddressTransfer' {dryRun} -> dryRun) (\s@DisableAddressTransfer' {} a -> s {dryRun = a} :: DisableAddressTransfer)
+
+-- | The allocation ID of an Elastic IP address.
+disableAddressTransfer_allocationId :: Lens.Lens' DisableAddressTransfer Prelude.Text
+disableAddressTransfer_allocationId = Lens.lens (\DisableAddressTransfer' {allocationId} -> allocationId) (\s@DisableAddressTransfer' {} a -> s {allocationId = a} :: DisableAddressTransfer)
+
+instance Core.AWSRequest DisableAddressTransfer where
+  type
+    AWSResponse DisableAddressTransfer =
+      DisableAddressTransferResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableAddressTransferResponse'
+            Prelude.<$> (x Data..@? "addressTransfer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableAddressTransfer where
+  hashWithSalt _salt DisableAddressTransfer' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` allocationId
+
+instance Prelude.NFData DisableAddressTransfer where
+  rnf DisableAddressTransfer' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf allocationId
+
+instance Data.ToHeaders DisableAddressTransfer where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableAddressTransfer where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableAddressTransfer where
+  toQuery DisableAddressTransfer' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisableAddressTransfer" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "AllocationId" Data.=: allocationId
+      ]
+
+-- | /See:/ 'newDisableAddressTransferResponse' smart constructor.
+data DisableAddressTransferResponse = DisableAddressTransferResponse'
+  { -- | An Elastic IP address transfer.
+    addressTransfer :: Prelude.Maybe AddressTransfer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableAddressTransferResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressTransfer', 'disableAddressTransferResponse_addressTransfer' - An Elastic IP address transfer.
+--
+-- 'httpStatus', 'disableAddressTransferResponse_httpStatus' - The response's http status code.
+newDisableAddressTransferResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableAddressTransferResponse
+newDisableAddressTransferResponse pHttpStatus_ =
+  DisableAddressTransferResponse'
+    { addressTransfer =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An Elastic IP address transfer.
+disableAddressTransferResponse_addressTransfer :: Lens.Lens' DisableAddressTransferResponse (Prelude.Maybe AddressTransfer)
+disableAddressTransferResponse_addressTransfer = Lens.lens (\DisableAddressTransferResponse' {addressTransfer} -> addressTransfer) (\s@DisableAddressTransferResponse' {} a -> s {addressTransfer = a} :: DisableAddressTransferResponse)
+
+-- | The response's http status code.
+disableAddressTransferResponse_httpStatus :: Lens.Lens' DisableAddressTransferResponse Prelude.Int
+disableAddressTransferResponse_httpStatus = Lens.lens (\DisableAddressTransferResponse' {httpStatus} -> httpStatus) (\s@DisableAddressTransferResponse' {} a -> s {httpStatus = a} :: DisableAddressTransferResponse)
+
+instance
+  Prelude.NFData
+    DisableAddressTransferResponse
+  where
+  rnf DisableAddressTransferResponse' {..} =
+    Prelude.rnf addressTransfer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableAwsNetworkPerformanceMetricSubscription.hs b/gen/Amazonka/EC2/DisableAwsNetworkPerformanceMetricSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableAwsNetworkPerformanceMetricSubscription.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableAwsNetworkPerformanceMetricSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables Infrastructure Performance metric subscriptions.
+module Amazonka.EC2.DisableAwsNetworkPerformanceMetricSubscription
+  ( -- * Creating a Request
+    DisableAwsNetworkPerformanceMetricSubscription (..),
+    newDisableAwsNetworkPerformanceMetricSubscription,
+
+    -- * Request Lenses
+    disableAwsNetworkPerformanceMetricSubscription_destination,
+    disableAwsNetworkPerformanceMetricSubscription_dryRun,
+    disableAwsNetworkPerformanceMetricSubscription_metric,
+    disableAwsNetworkPerformanceMetricSubscription_source,
+    disableAwsNetworkPerformanceMetricSubscription_statistic,
+
+    -- * Destructuring the Response
+    DisableAwsNetworkPerformanceMetricSubscriptionResponse (..),
+    newDisableAwsNetworkPerformanceMetricSubscriptionResponse,
+
+    -- * Response Lenses
+    disableAwsNetworkPerformanceMetricSubscriptionResponse_output,
+    disableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableAwsNetworkPerformanceMetricSubscription' smart constructor.
+data DisableAwsNetworkPerformanceMetricSubscription = DisableAwsNetworkPerformanceMetricSubscription'
+  { -- | The target Region or Availability Zone that the metric subscription is
+    -- disabled for. For example, @eu-north-1@.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The metric used for the disabled subscription.
+    metric :: Prelude.Maybe MetricType,
+    -- | The source Region or Availability Zone that the metric subscription is
+    -- disabled for. For example, @us-east-1@.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The statistic used for the disabled subscription.
+    statistic :: Prelude.Maybe StatisticType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableAwsNetworkPerformanceMetricSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'disableAwsNetworkPerformanceMetricSubscription_destination' - The target Region or Availability Zone that the metric subscription is
+-- disabled for. For example, @eu-north-1@.
+--
+-- 'dryRun', 'disableAwsNetworkPerformanceMetricSubscription_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'metric', 'disableAwsNetworkPerformanceMetricSubscription_metric' - The metric used for the disabled subscription.
+--
+-- 'source', 'disableAwsNetworkPerformanceMetricSubscription_source' - The source Region or Availability Zone that the metric subscription is
+-- disabled for. For example, @us-east-1@.
+--
+-- 'statistic', 'disableAwsNetworkPerformanceMetricSubscription_statistic' - The statistic used for the disabled subscription.
+newDisableAwsNetworkPerformanceMetricSubscription ::
+  DisableAwsNetworkPerformanceMetricSubscription
+newDisableAwsNetworkPerformanceMetricSubscription =
+  DisableAwsNetworkPerformanceMetricSubscription'
+    { destination =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      metric = Prelude.Nothing,
+      source = Prelude.Nothing,
+      statistic = Prelude.Nothing
+    }
+
+-- | The target Region or Availability Zone that the metric subscription is
+-- disabled for. For example, @eu-north-1@.
+disableAwsNetworkPerformanceMetricSubscription_destination :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe Prelude.Text)
+disableAwsNetworkPerformanceMetricSubscription_destination = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscription' {destination} -> destination) (\s@DisableAwsNetworkPerformanceMetricSubscription' {} a -> s {destination = a} :: DisableAwsNetworkPerformanceMetricSubscription)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableAwsNetworkPerformanceMetricSubscription_dryRun :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe Prelude.Bool)
+disableAwsNetworkPerformanceMetricSubscription_dryRun = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscription' {dryRun} -> dryRun) (\s@DisableAwsNetworkPerformanceMetricSubscription' {} a -> s {dryRun = a} :: DisableAwsNetworkPerformanceMetricSubscription)
+
+-- | The metric used for the disabled subscription.
+disableAwsNetworkPerformanceMetricSubscription_metric :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe MetricType)
+disableAwsNetworkPerformanceMetricSubscription_metric = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscription' {metric} -> metric) (\s@DisableAwsNetworkPerformanceMetricSubscription' {} a -> s {metric = a} :: DisableAwsNetworkPerformanceMetricSubscription)
+
+-- | The source Region or Availability Zone that the metric subscription is
+-- disabled for. For example, @us-east-1@.
+disableAwsNetworkPerformanceMetricSubscription_source :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe Prelude.Text)
+disableAwsNetworkPerformanceMetricSubscription_source = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscription' {source} -> source) (\s@DisableAwsNetworkPerformanceMetricSubscription' {} a -> s {source = a} :: DisableAwsNetworkPerformanceMetricSubscription)
+
+-- | The statistic used for the disabled subscription.
+disableAwsNetworkPerformanceMetricSubscription_statistic :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe StatisticType)
+disableAwsNetworkPerformanceMetricSubscription_statistic = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscription' {statistic} -> statistic) (\s@DisableAwsNetworkPerformanceMetricSubscription' {} a -> s {statistic = a} :: DisableAwsNetworkPerformanceMetricSubscription)
+
+instance
+  Core.AWSRequest
+    DisableAwsNetworkPerformanceMetricSubscription
+  where
+  type
+    AWSResponse
+      DisableAwsNetworkPerformanceMetricSubscription =
+      DisableAwsNetworkPerformanceMetricSubscriptionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableAwsNetworkPerformanceMetricSubscriptionResponse'
+            Prelude.<$> (x Data..@? "output")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisableAwsNetworkPerformanceMetricSubscription
+  where
+  hashWithSalt
+    _salt
+    DisableAwsNetworkPerformanceMetricSubscription' {..} =
+      _salt
+        `Prelude.hashWithSalt` destination
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` metric
+        `Prelude.hashWithSalt` source
+        `Prelude.hashWithSalt` statistic
+
+instance
+  Prelude.NFData
+    DisableAwsNetworkPerformanceMetricSubscription
+  where
+  rnf
+    DisableAwsNetworkPerformanceMetricSubscription' {..} =
+      Prelude.rnf destination
+        `Prelude.seq` Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf metric
+        `Prelude.seq` Prelude.rnf source
+        `Prelude.seq` Prelude.rnf statistic
+
+instance
+  Data.ToHeaders
+    DisableAwsNetworkPerformanceMetricSubscription
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisableAwsNetworkPerformanceMetricSubscription
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisableAwsNetworkPerformanceMetricSubscription
+  where
+  toQuery
+    DisableAwsNetworkPerformanceMetricSubscription' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DisableAwsNetworkPerformanceMetricSubscription" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "Destination" Data.=: destination,
+          "DryRun" Data.=: dryRun,
+          "Metric" Data.=: metric,
+          "Source" Data.=: source,
+          "Statistic" Data.=: statistic
+        ]
+
+-- | /See:/ 'newDisableAwsNetworkPerformanceMetricSubscriptionResponse' smart constructor.
+data DisableAwsNetworkPerformanceMetricSubscriptionResponse = DisableAwsNetworkPerformanceMetricSubscriptionResponse'
+  { -- | Indicates whether the unsubscribe action was successful.
+    output :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableAwsNetworkPerformanceMetricSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'output', 'disableAwsNetworkPerformanceMetricSubscriptionResponse_output' - Indicates whether the unsubscribe action was successful.
+--
+-- 'httpStatus', 'disableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus' - The response's http status code.
+newDisableAwsNetworkPerformanceMetricSubscriptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableAwsNetworkPerformanceMetricSubscriptionResponse
+newDisableAwsNetworkPerformanceMetricSubscriptionResponse
+  pHttpStatus_ =
+    DisableAwsNetworkPerformanceMetricSubscriptionResponse'
+      { output =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Indicates whether the unsubscribe action was successful.
+disableAwsNetworkPerformanceMetricSubscriptionResponse_output :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscriptionResponse (Prelude.Maybe Prelude.Bool)
+disableAwsNetworkPerformanceMetricSubscriptionResponse_output = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscriptionResponse' {output} -> output) (\s@DisableAwsNetworkPerformanceMetricSubscriptionResponse' {} a -> s {output = a} :: DisableAwsNetworkPerformanceMetricSubscriptionResponse)
+
+-- | The response's http status code.
+disableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus :: Lens.Lens' DisableAwsNetworkPerformanceMetricSubscriptionResponse Prelude.Int
+disableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus = Lens.lens (\DisableAwsNetworkPerformanceMetricSubscriptionResponse' {httpStatus} -> httpStatus) (\s@DisableAwsNetworkPerformanceMetricSubscriptionResponse' {} a -> s {httpStatus = a} :: DisableAwsNetworkPerformanceMetricSubscriptionResponse)
+
+instance
+  Prelude.NFData
+    DisableAwsNetworkPerformanceMetricSubscriptionResponse
+  where
+  rnf
+    DisableAwsNetworkPerformanceMetricSubscriptionResponse' {..} =
+      Prelude.rnf output
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableEbsEncryptionByDefault.hs b/gen/Amazonka/EC2/DisableEbsEncryptionByDefault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableEbsEncryptionByDefault.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableEbsEncryptionByDefault
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables EBS encryption by default for your account in the current
+-- Region.
+--
+-- After you disable encryption by default, you can still create encrypted
+-- volumes by enabling encryption when you create each volume.
+--
+-- Disabling encryption by default does not change the encryption status of
+-- your existing volumes.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DisableEbsEncryptionByDefault
+  ( -- * Creating a Request
+    DisableEbsEncryptionByDefault (..),
+    newDisableEbsEncryptionByDefault,
+
+    -- * Request Lenses
+    disableEbsEncryptionByDefault_dryRun,
+
+    -- * Destructuring the Response
+    DisableEbsEncryptionByDefaultResponse (..),
+    newDisableEbsEncryptionByDefaultResponse,
+
+    -- * Response Lenses
+    disableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault,
+    disableEbsEncryptionByDefaultResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableEbsEncryptionByDefault' smart constructor.
+data DisableEbsEncryptionByDefault = DisableEbsEncryptionByDefault'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableEbsEncryptionByDefault' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableEbsEncryptionByDefault_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDisableEbsEncryptionByDefault ::
+  DisableEbsEncryptionByDefault
+newDisableEbsEncryptionByDefault =
+  DisableEbsEncryptionByDefault'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableEbsEncryptionByDefault_dryRun :: Lens.Lens' DisableEbsEncryptionByDefault (Prelude.Maybe Prelude.Bool)
+disableEbsEncryptionByDefault_dryRun = Lens.lens (\DisableEbsEncryptionByDefault' {dryRun} -> dryRun) (\s@DisableEbsEncryptionByDefault' {} a -> s {dryRun = a} :: DisableEbsEncryptionByDefault)
+
+instance
+  Core.AWSRequest
+    DisableEbsEncryptionByDefault
+  where
+  type
+    AWSResponse DisableEbsEncryptionByDefault =
+      DisableEbsEncryptionByDefaultResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableEbsEncryptionByDefaultResponse'
+            Prelude.<$> (x Data..@? "ebsEncryptionByDefault")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisableEbsEncryptionByDefault
+  where
+  hashWithSalt _salt DisableEbsEncryptionByDefault' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData DisableEbsEncryptionByDefault where
+  rnf DisableEbsEncryptionByDefault' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders DisableEbsEncryptionByDefault where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableEbsEncryptionByDefault where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableEbsEncryptionByDefault where
+  toQuery DisableEbsEncryptionByDefault' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisableEbsEncryptionByDefault" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newDisableEbsEncryptionByDefaultResponse' smart constructor.
+data DisableEbsEncryptionByDefaultResponse = DisableEbsEncryptionByDefaultResponse'
+  { -- | The updated status of encryption by default.
+    ebsEncryptionByDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableEbsEncryptionByDefaultResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebsEncryptionByDefault', 'disableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault' - The updated status of encryption by default.
+--
+-- 'httpStatus', 'disableEbsEncryptionByDefaultResponse_httpStatus' - The response's http status code.
+newDisableEbsEncryptionByDefaultResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableEbsEncryptionByDefaultResponse
+newDisableEbsEncryptionByDefaultResponse pHttpStatus_ =
+  DisableEbsEncryptionByDefaultResponse'
+    { ebsEncryptionByDefault =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated status of encryption by default.
+disableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault :: Lens.Lens' DisableEbsEncryptionByDefaultResponse (Prelude.Maybe Prelude.Bool)
+disableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault = Lens.lens (\DisableEbsEncryptionByDefaultResponse' {ebsEncryptionByDefault} -> ebsEncryptionByDefault) (\s@DisableEbsEncryptionByDefaultResponse' {} a -> s {ebsEncryptionByDefault = a} :: DisableEbsEncryptionByDefaultResponse)
+
+-- | The response's http status code.
+disableEbsEncryptionByDefaultResponse_httpStatus :: Lens.Lens' DisableEbsEncryptionByDefaultResponse Prelude.Int
+disableEbsEncryptionByDefaultResponse_httpStatus = Lens.lens (\DisableEbsEncryptionByDefaultResponse' {httpStatus} -> httpStatus) (\s@DisableEbsEncryptionByDefaultResponse' {} a -> s {httpStatus = a} :: DisableEbsEncryptionByDefaultResponse)
+
+instance
+  Prelude.NFData
+    DisableEbsEncryptionByDefaultResponse
+  where
+  rnf DisableEbsEncryptionByDefaultResponse' {..} =
+    Prelude.rnf ebsEncryptionByDefault
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableFastLaunch.hs b/gen/Amazonka/EC2/DisableFastLaunch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableFastLaunch.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableFastLaunch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Discontinue faster launching for a Windows AMI, and clean up existing
+-- pre-provisioned snapshots. When you disable faster launching, the AMI
+-- uses the standard launch process for each instance. All pre-provisioned
+-- snapshots must be removed before you can enable faster launching again.
+--
+-- To change these settings, you must own the AMI.
+module Amazonka.EC2.DisableFastLaunch
+  ( -- * Creating a Request
+    DisableFastLaunch (..),
+    newDisableFastLaunch,
+
+    -- * Request Lenses
+    disableFastLaunch_dryRun,
+    disableFastLaunch_force,
+    disableFastLaunch_imageId,
+
+    -- * Destructuring the Response
+    DisableFastLaunchResponse (..),
+    newDisableFastLaunchResponse,
+
+    -- * Response Lenses
+    disableFastLaunchResponse_imageId,
+    disableFastLaunchResponse_launchTemplate,
+    disableFastLaunchResponse_maxParallelLaunches,
+    disableFastLaunchResponse_ownerId,
+    disableFastLaunchResponse_resourceType,
+    disableFastLaunchResponse_snapshotConfiguration,
+    disableFastLaunchResponse_state,
+    disableFastLaunchResponse_stateTransitionReason,
+    disableFastLaunchResponse_stateTransitionTime,
+    disableFastLaunchResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableFastLaunch' smart constructor.
+data DisableFastLaunch = DisableFastLaunch'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Forces the image settings to turn off faster launching for your Windows
+    -- AMI. This parameter overrides any errors that are encountered while
+    -- cleaning up resources in your account.
+    force :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the image for which you’re turning off faster launching, and
+    -- removing pre-provisioned snapshots.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastLaunch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableFastLaunch_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'force', 'disableFastLaunch_force' - Forces the image settings to turn off faster launching for your Windows
+-- AMI. This parameter overrides any errors that are encountered while
+-- cleaning up resources in your account.
+--
+-- 'imageId', 'disableFastLaunch_imageId' - The ID of the image for which you’re turning off faster launching, and
+-- removing pre-provisioned snapshots.
+newDisableFastLaunch ::
+  -- | 'imageId'
+  Prelude.Text ->
+  DisableFastLaunch
+newDisableFastLaunch pImageId_ =
+  DisableFastLaunch'
+    { dryRun = Prelude.Nothing,
+      force = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableFastLaunch_dryRun :: Lens.Lens' DisableFastLaunch (Prelude.Maybe Prelude.Bool)
+disableFastLaunch_dryRun = Lens.lens (\DisableFastLaunch' {dryRun} -> dryRun) (\s@DisableFastLaunch' {} a -> s {dryRun = a} :: DisableFastLaunch)
+
+-- | Forces the image settings to turn off faster launching for your Windows
+-- AMI. This parameter overrides any errors that are encountered while
+-- cleaning up resources in your account.
+disableFastLaunch_force :: Lens.Lens' DisableFastLaunch (Prelude.Maybe Prelude.Bool)
+disableFastLaunch_force = Lens.lens (\DisableFastLaunch' {force} -> force) (\s@DisableFastLaunch' {} a -> s {force = a} :: DisableFastLaunch)
+
+-- | The ID of the image for which you’re turning off faster launching, and
+-- removing pre-provisioned snapshots.
+disableFastLaunch_imageId :: Lens.Lens' DisableFastLaunch Prelude.Text
+disableFastLaunch_imageId = Lens.lens (\DisableFastLaunch' {imageId} -> imageId) (\s@DisableFastLaunch' {} a -> s {imageId = a} :: DisableFastLaunch)
+
+instance Core.AWSRequest DisableFastLaunch where
+  type
+    AWSResponse DisableFastLaunch =
+      DisableFastLaunchResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableFastLaunchResponse'
+            Prelude.<$> (x Data..@? "imageId")
+            Prelude.<*> (x Data..@? "launchTemplate")
+            Prelude.<*> (x Data..@? "maxParallelLaunches")
+            Prelude.<*> (x Data..@? "ownerId")
+            Prelude.<*> (x Data..@? "resourceType")
+            Prelude.<*> (x Data..@? "snapshotConfiguration")
+            Prelude.<*> (x Data..@? "state")
+            Prelude.<*> (x Data..@? "stateTransitionReason")
+            Prelude.<*> (x Data..@? "stateTransitionTime")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableFastLaunch where
+  hashWithSalt _salt DisableFastLaunch' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` force
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData DisableFastLaunch where
+  rnf DisableFastLaunch' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf force
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders DisableFastLaunch where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableFastLaunch where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableFastLaunch where
+  toQuery DisableFastLaunch' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisableFastLaunch" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Force" Data.=: force,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newDisableFastLaunchResponse' smart constructor.
+data DisableFastLaunchResponse = DisableFastLaunchResponse'
+  { -- | The ID of the image for which faster-launching has been turned off.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The launch template that was used to launch Windows instances from
+    -- pre-provisioned snapshots.
+    launchTemplate :: Prelude.Maybe FastLaunchLaunchTemplateSpecificationResponse,
+    -- | The maximum number of parallel instances to launch for creating
+    -- resources.
+    maxParallelLaunches :: Prelude.Maybe Prelude.Int,
+    -- | The owner of the Windows AMI for which faster launching was turned off.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The pre-provisioning resource type that must be cleaned after turning
+    -- off faster launching for the Windows AMI. Supported values include:
+    -- @snapshot@.
+    resourceType :: Prelude.Maybe FastLaunchResourceType,
+    -- | Parameters that were used for faster launching for the Windows AMI
+    -- before faster launching was turned off. This informs the clean-up
+    -- process.
+    snapshotConfiguration :: Prelude.Maybe FastLaunchSnapshotConfigurationResponse,
+    -- | The current state of faster launching for the specified Windows AMI.
+    state :: Prelude.Maybe FastLaunchStateCode,
+    -- | The reason that the state changed for faster launching for the Windows
+    -- AMI.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text,
+    -- | The time that the state changed for faster launching for the Windows
+    -- AMI.
+    stateTransitionTime :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastLaunchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'disableFastLaunchResponse_imageId' - The ID of the image for which faster-launching has been turned off.
+--
+-- 'launchTemplate', 'disableFastLaunchResponse_launchTemplate' - The launch template that was used to launch Windows instances from
+-- pre-provisioned snapshots.
+--
+-- 'maxParallelLaunches', 'disableFastLaunchResponse_maxParallelLaunches' - The maximum number of parallel instances to launch for creating
+-- resources.
+--
+-- 'ownerId', 'disableFastLaunchResponse_ownerId' - The owner of the Windows AMI for which faster launching was turned off.
+--
+-- 'resourceType', 'disableFastLaunchResponse_resourceType' - The pre-provisioning resource type that must be cleaned after turning
+-- off faster launching for the Windows AMI. Supported values include:
+-- @snapshot@.
+--
+-- 'snapshotConfiguration', 'disableFastLaunchResponse_snapshotConfiguration' - Parameters that were used for faster launching for the Windows AMI
+-- before faster launching was turned off. This informs the clean-up
+-- process.
+--
+-- 'state', 'disableFastLaunchResponse_state' - The current state of faster launching for the specified Windows AMI.
+--
+-- 'stateTransitionReason', 'disableFastLaunchResponse_stateTransitionReason' - The reason that the state changed for faster launching for the Windows
+-- AMI.
+--
+-- 'stateTransitionTime', 'disableFastLaunchResponse_stateTransitionTime' - The time that the state changed for faster launching for the Windows
+-- AMI.
+--
+-- 'httpStatus', 'disableFastLaunchResponse_httpStatus' - The response's http status code.
+newDisableFastLaunchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableFastLaunchResponse
+newDisableFastLaunchResponse pHttpStatus_ =
+  DisableFastLaunchResponse'
+    { imageId =
+        Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      maxParallelLaunches = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      snapshotConfiguration = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateTransitionReason = Prelude.Nothing,
+      stateTransitionTime = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the image for which faster-launching has been turned off.
+disableFastLaunchResponse_imageId :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe Prelude.Text)
+disableFastLaunchResponse_imageId = Lens.lens (\DisableFastLaunchResponse' {imageId} -> imageId) (\s@DisableFastLaunchResponse' {} a -> s {imageId = a} :: DisableFastLaunchResponse)
+
+-- | The launch template that was used to launch Windows instances from
+-- pre-provisioned snapshots.
+disableFastLaunchResponse_launchTemplate :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe FastLaunchLaunchTemplateSpecificationResponse)
+disableFastLaunchResponse_launchTemplate = Lens.lens (\DisableFastLaunchResponse' {launchTemplate} -> launchTemplate) (\s@DisableFastLaunchResponse' {} a -> s {launchTemplate = a} :: DisableFastLaunchResponse)
+
+-- | The maximum number of parallel instances to launch for creating
+-- resources.
+disableFastLaunchResponse_maxParallelLaunches :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe Prelude.Int)
+disableFastLaunchResponse_maxParallelLaunches = Lens.lens (\DisableFastLaunchResponse' {maxParallelLaunches} -> maxParallelLaunches) (\s@DisableFastLaunchResponse' {} a -> s {maxParallelLaunches = a} :: DisableFastLaunchResponse)
+
+-- | The owner of the Windows AMI for which faster launching was turned off.
+disableFastLaunchResponse_ownerId :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe Prelude.Text)
+disableFastLaunchResponse_ownerId = Lens.lens (\DisableFastLaunchResponse' {ownerId} -> ownerId) (\s@DisableFastLaunchResponse' {} a -> s {ownerId = a} :: DisableFastLaunchResponse)
+
+-- | The pre-provisioning resource type that must be cleaned after turning
+-- off faster launching for the Windows AMI. Supported values include:
+-- @snapshot@.
+disableFastLaunchResponse_resourceType :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe FastLaunchResourceType)
+disableFastLaunchResponse_resourceType = Lens.lens (\DisableFastLaunchResponse' {resourceType} -> resourceType) (\s@DisableFastLaunchResponse' {} a -> s {resourceType = a} :: DisableFastLaunchResponse)
+
+-- | Parameters that were used for faster launching for the Windows AMI
+-- before faster launching was turned off. This informs the clean-up
+-- process.
+disableFastLaunchResponse_snapshotConfiguration :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe FastLaunchSnapshotConfigurationResponse)
+disableFastLaunchResponse_snapshotConfiguration = Lens.lens (\DisableFastLaunchResponse' {snapshotConfiguration} -> snapshotConfiguration) (\s@DisableFastLaunchResponse' {} a -> s {snapshotConfiguration = a} :: DisableFastLaunchResponse)
+
+-- | The current state of faster launching for the specified Windows AMI.
+disableFastLaunchResponse_state :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe FastLaunchStateCode)
+disableFastLaunchResponse_state = Lens.lens (\DisableFastLaunchResponse' {state} -> state) (\s@DisableFastLaunchResponse' {} a -> s {state = a} :: DisableFastLaunchResponse)
+
+-- | The reason that the state changed for faster launching for the Windows
+-- AMI.
+disableFastLaunchResponse_stateTransitionReason :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe Prelude.Text)
+disableFastLaunchResponse_stateTransitionReason = Lens.lens (\DisableFastLaunchResponse' {stateTransitionReason} -> stateTransitionReason) (\s@DisableFastLaunchResponse' {} a -> s {stateTransitionReason = a} :: DisableFastLaunchResponse)
+
+-- | The time that the state changed for faster launching for the Windows
+-- AMI.
+disableFastLaunchResponse_stateTransitionTime :: Lens.Lens' DisableFastLaunchResponse (Prelude.Maybe Prelude.UTCTime)
+disableFastLaunchResponse_stateTransitionTime = Lens.lens (\DisableFastLaunchResponse' {stateTransitionTime} -> stateTransitionTime) (\s@DisableFastLaunchResponse' {} a -> s {stateTransitionTime = a} :: DisableFastLaunchResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+disableFastLaunchResponse_httpStatus :: Lens.Lens' DisableFastLaunchResponse Prelude.Int
+disableFastLaunchResponse_httpStatus = Lens.lens (\DisableFastLaunchResponse' {httpStatus} -> httpStatus) (\s@DisableFastLaunchResponse' {} a -> s {httpStatus = a} :: DisableFastLaunchResponse)
+
+instance Prelude.NFData DisableFastLaunchResponse where
+  rnf DisableFastLaunchResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf maxParallelLaunches
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf snapshotConfiguration
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateTransitionReason
+      `Prelude.seq` Prelude.rnf stateTransitionTime
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableFastSnapshotRestores.hs b/gen/Amazonka/EC2/DisableFastSnapshotRestores.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableFastSnapshotRestores.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableFastSnapshotRestores
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables fast snapshot restores for the specified snapshots in the
+-- specified Availability Zones.
+module Amazonka.EC2.DisableFastSnapshotRestores
+  ( -- * Creating a Request
+    DisableFastSnapshotRestores (..),
+    newDisableFastSnapshotRestores,
+
+    -- * Request Lenses
+    disableFastSnapshotRestores_dryRun,
+    disableFastSnapshotRestores_availabilityZones,
+    disableFastSnapshotRestores_sourceSnapshotIds,
+
+    -- * Destructuring the Response
+    DisableFastSnapshotRestoresResponse (..),
+    newDisableFastSnapshotRestoresResponse,
+
+    -- * Response Lenses
+    disableFastSnapshotRestoresResponse_successful,
+    disableFastSnapshotRestoresResponse_unsuccessful,
+    disableFastSnapshotRestoresResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableFastSnapshotRestores' smart constructor.
+data DisableFastSnapshotRestores = DisableFastSnapshotRestores'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more Availability Zones. For example, @us-east-2a@.
+    availabilityZones :: [Prelude.Text],
+    -- | The IDs of one or more snapshots. For example, @snap-1234567890abcdef0@.
+    sourceSnapshotIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastSnapshotRestores' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableFastSnapshotRestores_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'availabilityZones', 'disableFastSnapshotRestores_availabilityZones' - One or more Availability Zones. For example, @us-east-2a@.
+--
+-- 'sourceSnapshotIds', 'disableFastSnapshotRestores_sourceSnapshotIds' - The IDs of one or more snapshots. For example, @snap-1234567890abcdef0@.
+newDisableFastSnapshotRestores ::
+  DisableFastSnapshotRestores
+newDisableFastSnapshotRestores =
+  DisableFastSnapshotRestores'
+    { dryRun =
+        Prelude.Nothing,
+      availabilityZones = Prelude.mempty,
+      sourceSnapshotIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableFastSnapshotRestores_dryRun :: Lens.Lens' DisableFastSnapshotRestores (Prelude.Maybe Prelude.Bool)
+disableFastSnapshotRestores_dryRun = Lens.lens (\DisableFastSnapshotRestores' {dryRun} -> dryRun) (\s@DisableFastSnapshotRestores' {} a -> s {dryRun = a} :: DisableFastSnapshotRestores)
+
+-- | One or more Availability Zones. For example, @us-east-2a@.
+disableFastSnapshotRestores_availabilityZones :: Lens.Lens' DisableFastSnapshotRestores [Prelude.Text]
+disableFastSnapshotRestores_availabilityZones = Lens.lens (\DisableFastSnapshotRestores' {availabilityZones} -> availabilityZones) (\s@DisableFastSnapshotRestores' {} a -> s {availabilityZones = a} :: DisableFastSnapshotRestores) Prelude.. Lens.coerced
+
+-- | The IDs of one or more snapshots. For example, @snap-1234567890abcdef0@.
+disableFastSnapshotRestores_sourceSnapshotIds :: Lens.Lens' DisableFastSnapshotRestores [Prelude.Text]
+disableFastSnapshotRestores_sourceSnapshotIds = Lens.lens (\DisableFastSnapshotRestores' {sourceSnapshotIds} -> sourceSnapshotIds) (\s@DisableFastSnapshotRestores' {} a -> s {sourceSnapshotIds = a} :: DisableFastSnapshotRestores) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DisableFastSnapshotRestores where
+  type
+    AWSResponse DisableFastSnapshotRestores =
+      DisableFastSnapshotRestoresResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableFastSnapshotRestoresResponse'
+            Prelude.<$> ( x
+                            Data..@? "successful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableFastSnapshotRestores where
+  hashWithSalt _salt DisableFastSnapshotRestores' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` availabilityZones
+      `Prelude.hashWithSalt` sourceSnapshotIds
+
+instance Prelude.NFData DisableFastSnapshotRestores where
+  rnf DisableFastSnapshotRestores' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf availabilityZones
+      `Prelude.seq` Prelude.rnf sourceSnapshotIds
+
+instance Data.ToHeaders DisableFastSnapshotRestores where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableFastSnapshotRestores where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableFastSnapshotRestores where
+  toQuery DisableFastSnapshotRestores' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisableFastSnapshotRestores" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "AvailabilityZone"
+          availabilityZones,
+        Data.toQueryList
+          "SourceSnapshotId"
+          sourceSnapshotIds
+      ]
+
+-- | /See:/ 'newDisableFastSnapshotRestoresResponse' smart constructor.
+data DisableFastSnapshotRestoresResponse = DisableFastSnapshotRestoresResponse'
+  { -- | Information about the snapshots for which fast snapshot restores were
+    -- successfully disabled.
+    successful :: Prelude.Maybe [DisableFastSnapshotRestoreSuccessItem],
+    -- | Information about the snapshots for which fast snapshot restores could
+    -- not be disabled.
+    unsuccessful :: Prelude.Maybe [DisableFastSnapshotRestoreErrorItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastSnapshotRestoresResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successful', 'disableFastSnapshotRestoresResponse_successful' - Information about the snapshots for which fast snapshot restores were
+-- successfully disabled.
+--
+-- 'unsuccessful', 'disableFastSnapshotRestoresResponse_unsuccessful' - Information about the snapshots for which fast snapshot restores could
+-- not be disabled.
+--
+-- 'httpStatus', 'disableFastSnapshotRestoresResponse_httpStatus' - The response's http status code.
+newDisableFastSnapshotRestoresResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableFastSnapshotRestoresResponse
+newDisableFastSnapshotRestoresResponse pHttpStatus_ =
+  DisableFastSnapshotRestoresResponse'
+    { successful =
+        Prelude.Nothing,
+      unsuccessful = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the snapshots for which fast snapshot restores were
+-- successfully disabled.
+disableFastSnapshotRestoresResponse_successful :: Lens.Lens' DisableFastSnapshotRestoresResponse (Prelude.Maybe [DisableFastSnapshotRestoreSuccessItem])
+disableFastSnapshotRestoresResponse_successful = Lens.lens (\DisableFastSnapshotRestoresResponse' {successful} -> successful) (\s@DisableFastSnapshotRestoresResponse' {} a -> s {successful = a} :: DisableFastSnapshotRestoresResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the snapshots for which fast snapshot restores could
+-- not be disabled.
+disableFastSnapshotRestoresResponse_unsuccessful :: Lens.Lens' DisableFastSnapshotRestoresResponse (Prelude.Maybe [DisableFastSnapshotRestoreErrorItem])
+disableFastSnapshotRestoresResponse_unsuccessful = Lens.lens (\DisableFastSnapshotRestoresResponse' {unsuccessful} -> unsuccessful) (\s@DisableFastSnapshotRestoresResponse' {} a -> s {unsuccessful = a} :: DisableFastSnapshotRestoresResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+disableFastSnapshotRestoresResponse_httpStatus :: Lens.Lens' DisableFastSnapshotRestoresResponse Prelude.Int
+disableFastSnapshotRestoresResponse_httpStatus = Lens.lens (\DisableFastSnapshotRestoresResponse' {httpStatus} -> httpStatus) (\s@DisableFastSnapshotRestoresResponse' {} a -> s {httpStatus = a} :: DisableFastSnapshotRestoresResponse)
+
+instance
+  Prelude.NFData
+    DisableFastSnapshotRestoresResponse
+  where
+  rnf DisableFastSnapshotRestoresResponse' {..} =
+    Prelude.rnf successful
+      `Prelude.seq` Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableImageDeprecation.hs b/gen/Amazonka/EC2/DisableImageDeprecation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableImageDeprecation.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableImageDeprecation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the deprecation of the specified AMI.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html Deprecate an AMI>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DisableImageDeprecation
+  ( -- * Creating a Request
+    DisableImageDeprecation (..),
+    newDisableImageDeprecation,
+
+    -- * Request Lenses
+    disableImageDeprecation_dryRun,
+    disableImageDeprecation_imageId,
+
+    -- * Destructuring the Response
+    DisableImageDeprecationResponse (..),
+    newDisableImageDeprecationResponse,
+
+    -- * Response Lenses
+    disableImageDeprecationResponse_return,
+    disableImageDeprecationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableImageDeprecation' smart constructor.
+data DisableImageDeprecation = DisableImageDeprecation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableImageDeprecation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableImageDeprecation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'disableImageDeprecation_imageId' - The ID of the AMI.
+newDisableImageDeprecation ::
+  -- | 'imageId'
+  Prelude.Text ->
+  DisableImageDeprecation
+newDisableImageDeprecation pImageId_ =
+  DisableImageDeprecation'
+    { dryRun = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableImageDeprecation_dryRun :: Lens.Lens' DisableImageDeprecation (Prelude.Maybe Prelude.Bool)
+disableImageDeprecation_dryRun = Lens.lens (\DisableImageDeprecation' {dryRun} -> dryRun) (\s@DisableImageDeprecation' {} a -> s {dryRun = a} :: DisableImageDeprecation)
+
+-- | The ID of the AMI.
+disableImageDeprecation_imageId :: Lens.Lens' DisableImageDeprecation Prelude.Text
+disableImageDeprecation_imageId = Lens.lens (\DisableImageDeprecation' {imageId} -> imageId) (\s@DisableImageDeprecation' {} a -> s {imageId = a} :: DisableImageDeprecation)
+
+instance Core.AWSRequest DisableImageDeprecation where
+  type
+    AWSResponse DisableImageDeprecation =
+      DisableImageDeprecationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableImageDeprecationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableImageDeprecation where
+  hashWithSalt _salt DisableImageDeprecation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData DisableImageDeprecation where
+  rnf DisableImageDeprecation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders DisableImageDeprecation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableImageDeprecation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableImageDeprecation where
+  toQuery DisableImageDeprecation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisableImageDeprecation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newDisableImageDeprecationResponse' smart constructor.
+data DisableImageDeprecationResponse = DisableImageDeprecationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableImageDeprecationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'disableImageDeprecationResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'disableImageDeprecationResponse_httpStatus' - The response's http status code.
+newDisableImageDeprecationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableImageDeprecationResponse
+newDisableImageDeprecationResponse pHttpStatus_ =
+  DisableImageDeprecationResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+disableImageDeprecationResponse_return :: Lens.Lens' DisableImageDeprecationResponse (Prelude.Maybe Prelude.Bool)
+disableImageDeprecationResponse_return = Lens.lens (\DisableImageDeprecationResponse' {return'} -> return') (\s@DisableImageDeprecationResponse' {} a -> s {return' = a} :: DisableImageDeprecationResponse)
+
+-- | The response's http status code.
+disableImageDeprecationResponse_httpStatus :: Lens.Lens' DisableImageDeprecationResponse Prelude.Int
+disableImageDeprecationResponse_httpStatus = Lens.lens (\DisableImageDeprecationResponse' {httpStatus} -> httpStatus) (\s@DisableImageDeprecationResponse' {} a -> s {httpStatus = a} :: DisableImageDeprecationResponse)
+
+instance
+  Prelude.NFData
+    DisableImageDeprecationResponse
+  where
+  rnf DisableImageDeprecationResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableIpamOrganizationAdminAccount.hs b/gen/Amazonka/EC2/DisableIpamOrganizationAdminAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableIpamOrganizationAdminAccount.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableIpamOrganizationAdminAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disable the IPAM account. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html Enable integration with Organizations>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.DisableIpamOrganizationAdminAccount
+  ( -- * Creating a Request
+    DisableIpamOrganizationAdminAccount (..),
+    newDisableIpamOrganizationAdminAccount,
+
+    -- * Request Lenses
+    disableIpamOrganizationAdminAccount_dryRun,
+    disableIpamOrganizationAdminAccount_delegatedAdminAccountId,
+
+    -- * Destructuring the Response
+    DisableIpamOrganizationAdminAccountResponse (..),
+    newDisableIpamOrganizationAdminAccountResponse,
+
+    -- * Response Lenses
+    disableIpamOrganizationAdminAccountResponse_success,
+    disableIpamOrganizationAdminAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableIpamOrganizationAdminAccount' smart constructor.
+data DisableIpamOrganizationAdminAccount = DisableIpamOrganizationAdminAccount'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Organizations member account ID that you want to disable as IPAM
+    -- account.
+    delegatedAdminAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableIpamOrganizationAdminAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableIpamOrganizationAdminAccount_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'delegatedAdminAccountId', 'disableIpamOrganizationAdminAccount_delegatedAdminAccountId' - The Organizations member account ID that you want to disable as IPAM
+-- account.
+newDisableIpamOrganizationAdminAccount ::
+  -- | 'delegatedAdminAccountId'
+  Prelude.Text ->
+  DisableIpamOrganizationAdminAccount
+newDisableIpamOrganizationAdminAccount
+  pDelegatedAdminAccountId_ =
+    DisableIpamOrganizationAdminAccount'
+      { dryRun =
+          Prelude.Nothing,
+        delegatedAdminAccountId =
+          pDelegatedAdminAccountId_
+      }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+disableIpamOrganizationAdminAccount_dryRun :: Lens.Lens' DisableIpamOrganizationAdminAccount (Prelude.Maybe Prelude.Bool)
+disableIpamOrganizationAdminAccount_dryRun = Lens.lens (\DisableIpamOrganizationAdminAccount' {dryRun} -> dryRun) (\s@DisableIpamOrganizationAdminAccount' {} a -> s {dryRun = a} :: DisableIpamOrganizationAdminAccount)
+
+-- | The Organizations member account ID that you want to disable as IPAM
+-- account.
+disableIpamOrganizationAdminAccount_delegatedAdminAccountId :: Lens.Lens' DisableIpamOrganizationAdminAccount Prelude.Text
+disableIpamOrganizationAdminAccount_delegatedAdminAccountId = Lens.lens (\DisableIpamOrganizationAdminAccount' {delegatedAdminAccountId} -> delegatedAdminAccountId) (\s@DisableIpamOrganizationAdminAccount' {} a -> s {delegatedAdminAccountId = a} :: DisableIpamOrganizationAdminAccount)
+
+instance
+  Core.AWSRequest
+    DisableIpamOrganizationAdminAccount
+  where
+  type
+    AWSResponse DisableIpamOrganizationAdminAccount =
+      DisableIpamOrganizationAdminAccountResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableIpamOrganizationAdminAccountResponse'
+            Prelude.<$> (x Data..@? "success")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisableIpamOrganizationAdminAccount
+  where
+  hashWithSalt
+    _salt
+    DisableIpamOrganizationAdminAccount' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` delegatedAdminAccountId
+
+instance
+  Prelude.NFData
+    DisableIpamOrganizationAdminAccount
+  where
+  rnf DisableIpamOrganizationAdminAccount' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf delegatedAdminAccountId
+
+instance
+  Data.ToHeaders
+    DisableIpamOrganizationAdminAccount
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisableIpamOrganizationAdminAccount
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisableIpamOrganizationAdminAccount
+  where
+  toQuery DisableIpamOrganizationAdminAccount' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisableIpamOrganizationAdminAccount" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "DelegatedAdminAccountId"
+          Data.=: delegatedAdminAccountId
+      ]
+
+-- | /See:/ 'newDisableIpamOrganizationAdminAccountResponse' smart constructor.
+data DisableIpamOrganizationAdminAccountResponse = DisableIpamOrganizationAdminAccountResponse'
+  { -- | The result of disabling the IPAM account.
+    success :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableIpamOrganizationAdminAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'success', 'disableIpamOrganizationAdminAccountResponse_success' - The result of disabling the IPAM account.
+--
+-- 'httpStatus', 'disableIpamOrganizationAdminAccountResponse_httpStatus' - The response's http status code.
+newDisableIpamOrganizationAdminAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableIpamOrganizationAdminAccountResponse
+newDisableIpamOrganizationAdminAccountResponse
+  pHttpStatus_ =
+    DisableIpamOrganizationAdminAccountResponse'
+      { success =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The result of disabling the IPAM account.
+disableIpamOrganizationAdminAccountResponse_success :: Lens.Lens' DisableIpamOrganizationAdminAccountResponse (Prelude.Maybe Prelude.Bool)
+disableIpamOrganizationAdminAccountResponse_success = Lens.lens (\DisableIpamOrganizationAdminAccountResponse' {success} -> success) (\s@DisableIpamOrganizationAdminAccountResponse' {} a -> s {success = a} :: DisableIpamOrganizationAdminAccountResponse)
+
+-- | The response's http status code.
+disableIpamOrganizationAdminAccountResponse_httpStatus :: Lens.Lens' DisableIpamOrganizationAdminAccountResponse Prelude.Int
+disableIpamOrganizationAdminAccountResponse_httpStatus = Lens.lens (\DisableIpamOrganizationAdminAccountResponse' {httpStatus} -> httpStatus) (\s@DisableIpamOrganizationAdminAccountResponse' {} a -> s {httpStatus = a} :: DisableIpamOrganizationAdminAccountResponse)
+
+instance
+  Prelude.NFData
+    DisableIpamOrganizationAdminAccountResponse
+  where
+  rnf DisableIpamOrganizationAdminAccountResponse' {..} =
+    Prelude.rnf success
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableSerialConsoleAccess.hs b/gen/Amazonka/EC2/DisableSerialConsoleAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableSerialConsoleAccess.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableSerialConsoleAccess
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables access to the EC2 serial console of all instances for your
+-- account. By default, access to the EC2 serial console is disabled for
+-- your account. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access Manage account access to the EC2 serial console>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DisableSerialConsoleAccess
+  ( -- * Creating a Request
+    DisableSerialConsoleAccess (..),
+    newDisableSerialConsoleAccess,
+
+    -- * Request Lenses
+    disableSerialConsoleAccess_dryRun,
+
+    -- * Destructuring the Response
+    DisableSerialConsoleAccessResponse (..),
+    newDisableSerialConsoleAccessResponse,
+
+    -- * Response Lenses
+    disableSerialConsoleAccessResponse_serialConsoleAccessEnabled,
+    disableSerialConsoleAccessResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableSerialConsoleAccess' smart constructor.
+data DisableSerialConsoleAccess = DisableSerialConsoleAccess'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableSerialConsoleAccess' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableSerialConsoleAccess_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newDisableSerialConsoleAccess ::
+  DisableSerialConsoleAccess
+newDisableSerialConsoleAccess =
+  DisableSerialConsoleAccess'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableSerialConsoleAccess_dryRun :: Lens.Lens' DisableSerialConsoleAccess (Prelude.Maybe Prelude.Bool)
+disableSerialConsoleAccess_dryRun = Lens.lens (\DisableSerialConsoleAccess' {dryRun} -> dryRun) (\s@DisableSerialConsoleAccess' {} a -> s {dryRun = a} :: DisableSerialConsoleAccess)
+
+instance Core.AWSRequest DisableSerialConsoleAccess where
+  type
+    AWSResponse DisableSerialConsoleAccess =
+      DisableSerialConsoleAccessResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableSerialConsoleAccessResponse'
+            Prelude.<$> (x Data..@? "serialConsoleAccessEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableSerialConsoleAccess where
+  hashWithSalt _salt DisableSerialConsoleAccess' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData DisableSerialConsoleAccess where
+  rnf DisableSerialConsoleAccess' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders DisableSerialConsoleAccess where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableSerialConsoleAccess where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableSerialConsoleAccess where
+  toQuery DisableSerialConsoleAccess' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisableSerialConsoleAccess" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newDisableSerialConsoleAccessResponse' smart constructor.
+data DisableSerialConsoleAccessResponse = DisableSerialConsoleAccessResponse'
+  { -- | If @true@, access to the EC2 serial console of all instances is enabled
+    -- for your account. If @false@, access to the EC2 serial console of all
+    -- instances is disabled for your account.
+    serialConsoleAccessEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableSerialConsoleAccessResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serialConsoleAccessEnabled', 'disableSerialConsoleAccessResponse_serialConsoleAccessEnabled' - If @true@, access to the EC2 serial console of all instances is enabled
+-- for your account. If @false@, access to the EC2 serial console of all
+-- instances is disabled for your account.
+--
+-- 'httpStatus', 'disableSerialConsoleAccessResponse_httpStatus' - The response's http status code.
+newDisableSerialConsoleAccessResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableSerialConsoleAccessResponse
+newDisableSerialConsoleAccessResponse pHttpStatus_ =
+  DisableSerialConsoleAccessResponse'
+    { serialConsoleAccessEnabled =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If @true@, access to the EC2 serial console of all instances is enabled
+-- for your account. If @false@, access to the EC2 serial console of all
+-- instances is disabled for your account.
+disableSerialConsoleAccessResponse_serialConsoleAccessEnabled :: Lens.Lens' DisableSerialConsoleAccessResponse (Prelude.Maybe Prelude.Bool)
+disableSerialConsoleAccessResponse_serialConsoleAccessEnabled = Lens.lens (\DisableSerialConsoleAccessResponse' {serialConsoleAccessEnabled} -> serialConsoleAccessEnabled) (\s@DisableSerialConsoleAccessResponse' {} a -> s {serialConsoleAccessEnabled = a} :: DisableSerialConsoleAccessResponse)
+
+-- | The response's http status code.
+disableSerialConsoleAccessResponse_httpStatus :: Lens.Lens' DisableSerialConsoleAccessResponse Prelude.Int
+disableSerialConsoleAccessResponse_httpStatus = Lens.lens (\DisableSerialConsoleAccessResponse' {httpStatus} -> httpStatus) (\s@DisableSerialConsoleAccessResponse' {} a -> s {httpStatus = a} :: DisableSerialConsoleAccessResponse)
+
+instance
+  Prelude.NFData
+    DisableSerialConsoleAccessResponse
+  where
+  rnf DisableSerialConsoleAccessResponse' {..} =
+    Prelude.rnf serialConsoleAccessEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableTransitGatewayRouteTablePropagation.hs b/gen/Amazonka/EC2/DisableTransitGatewayRouteTablePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableTransitGatewayRouteTablePropagation.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableTransitGatewayRouteTablePropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables the specified resource attachment from propagating routes to
+-- the specified propagation route table.
+module Amazonka.EC2.DisableTransitGatewayRouteTablePropagation
+  ( -- * Creating a Request
+    DisableTransitGatewayRouteTablePropagation (..),
+    newDisableTransitGatewayRouteTablePropagation,
+
+    -- * Request Lenses
+    disableTransitGatewayRouteTablePropagation_dryRun,
+    disableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId,
+    disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId,
+    disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    DisableTransitGatewayRouteTablePropagationResponse (..),
+    newDisableTransitGatewayRouteTablePropagationResponse,
+
+    -- * Response Lenses
+    disableTransitGatewayRouteTablePropagationResponse_propagation,
+    disableTransitGatewayRouteTablePropagationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableTransitGatewayRouteTablePropagation' smart constructor.
+data DisableTransitGatewayRouteTablePropagation = DisableTransitGatewayRouteTablePropagation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the route table announcement.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the propagation route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableTransitGatewayRouteTablePropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableTransitGatewayRouteTablePropagation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'disableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId' - The ID of the route table announcement.
+--
+-- 'transitGatewayRouteTableId', 'disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId' - The ID of the propagation route table.
+newDisableTransitGatewayRouteTablePropagation ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  DisableTransitGatewayRouteTablePropagation
+newDisableTransitGatewayRouteTablePropagation
+  pTransitGatewayRouteTableId_ =
+    DisableTransitGatewayRouteTablePropagation'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          Prelude.Nothing,
+        transitGatewayRouteTableAnnouncementId =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableTransitGatewayRouteTablePropagation_dryRun :: Lens.Lens' DisableTransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Bool)
+disableTransitGatewayRouteTablePropagation_dryRun = Lens.lens (\DisableTransitGatewayRouteTablePropagation' {dryRun} -> dryRun) (\s@DisableTransitGatewayRouteTablePropagation' {} a -> s {dryRun = a} :: DisableTransitGatewayRouteTablePropagation)
+
+-- | The ID of the attachment.
+disableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId :: Lens.Lens' DisableTransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+disableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId = Lens.lens (\DisableTransitGatewayRouteTablePropagation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DisableTransitGatewayRouteTablePropagation' {} a -> s {transitGatewayAttachmentId = a} :: DisableTransitGatewayRouteTablePropagation)
+
+-- | The ID of the route table announcement.
+disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId :: Lens.Lens' DisableTransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId = Lens.lens (\DisableTransitGatewayRouteTablePropagation' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@DisableTransitGatewayRouteTablePropagation' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: DisableTransitGatewayRouteTablePropagation)
+
+-- | The ID of the propagation route table.
+disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId :: Lens.Lens' DisableTransitGatewayRouteTablePropagation Prelude.Text
+disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId = Lens.lens (\DisableTransitGatewayRouteTablePropagation' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@DisableTransitGatewayRouteTablePropagation' {} a -> s {transitGatewayRouteTableId = a} :: DisableTransitGatewayRouteTablePropagation)
+
+instance
+  Core.AWSRequest
+    DisableTransitGatewayRouteTablePropagation
+  where
+  type
+    AWSResponse
+      DisableTransitGatewayRouteTablePropagation =
+      DisableTransitGatewayRouteTablePropagationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableTransitGatewayRouteTablePropagationResponse'
+            Prelude.<$> (x Data..@? "propagation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisableTransitGatewayRouteTablePropagation
+  where
+  hashWithSalt
+    _salt
+    DisableTransitGatewayRouteTablePropagation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    DisableTransitGatewayRouteTablePropagation
+  where
+  rnf DisableTransitGatewayRouteTablePropagation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance
+  Data.ToHeaders
+    DisableTransitGatewayRouteTablePropagation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisableTransitGatewayRouteTablePropagation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisableTransitGatewayRouteTablePropagation
+  where
+  toQuery
+    DisableTransitGatewayRouteTablePropagation' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DisableTransitGatewayRouteTablePropagation" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "TransitGatewayAttachmentId"
+            Data.=: transitGatewayAttachmentId,
+          "TransitGatewayRouteTableAnnouncementId"
+            Data.=: transitGatewayRouteTableAnnouncementId,
+          "TransitGatewayRouteTableId"
+            Data.=: transitGatewayRouteTableId
+        ]
+
+-- | /See:/ 'newDisableTransitGatewayRouteTablePropagationResponse' smart constructor.
+data DisableTransitGatewayRouteTablePropagationResponse = DisableTransitGatewayRouteTablePropagationResponse'
+  { -- | Information about route propagation.
+    propagation :: Prelude.Maybe TransitGatewayPropagation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableTransitGatewayRouteTablePropagationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'propagation', 'disableTransitGatewayRouteTablePropagationResponse_propagation' - Information about route propagation.
+--
+-- 'httpStatus', 'disableTransitGatewayRouteTablePropagationResponse_httpStatus' - The response's http status code.
+newDisableTransitGatewayRouteTablePropagationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableTransitGatewayRouteTablePropagationResponse
+newDisableTransitGatewayRouteTablePropagationResponse
+  pHttpStatus_ =
+    DisableTransitGatewayRouteTablePropagationResponse'
+      { propagation =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about route propagation.
+disableTransitGatewayRouteTablePropagationResponse_propagation :: Lens.Lens' DisableTransitGatewayRouteTablePropagationResponse (Prelude.Maybe TransitGatewayPropagation)
+disableTransitGatewayRouteTablePropagationResponse_propagation = Lens.lens (\DisableTransitGatewayRouteTablePropagationResponse' {propagation} -> propagation) (\s@DisableTransitGatewayRouteTablePropagationResponse' {} a -> s {propagation = a} :: DisableTransitGatewayRouteTablePropagationResponse)
+
+-- | The response's http status code.
+disableTransitGatewayRouteTablePropagationResponse_httpStatus :: Lens.Lens' DisableTransitGatewayRouteTablePropagationResponse Prelude.Int
+disableTransitGatewayRouteTablePropagationResponse_httpStatus = Lens.lens (\DisableTransitGatewayRouteTablePropagationResponse' {httpStatus} -> httpStatus) (\s@DisableTransitGatewayRouteTablePropagationResponse' {} a -> s {httpStatus = a} :: DisableTransitGatewayRouteTablePropagationResponse)
+
+instance
+  Prelude.NFData
+    DisableTransitGatewayRouteTablePropagationResponse
+  where
+  rnf
+    DisableTransitGatewayRouteTablePropagationResponse' {..} =
+      Prelude.rnf propagation
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableVgwRoutePropagation.hs b/gen/Amazonka/EC2/DisableVgwRoutePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableVgwRoutePropagation.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableVgwRoutePropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables a virtual private gateway (VGW) from propagating routes to a
+-- specified route table of a VPC.
+module Amazonka.EC2.DisableVgwRoutePropagation
+  ( -- * Creating a Request
+    DisableVgwRoutePropagation (..),
+    newDisableVgwRoutePropagation,
+
+    -- * Request Lenses
+    disableVgwRoutePropagation_dryRun,
+    disableVgwRoutePropagation_gatewayId,
+    disableVgwRoutePropagation_routeTableId,
+
+    -- * Destructuring the Response
+    DisableVgwRoutePropagationResponse (..),
+    newDisableVgwRoutePropagationResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for DisableVgwRoutePropagation.
+--
+-- /See:/ 'newDisableVgwRoutePropagation' smart constructor.
+data DisableVgwRoutePropagation = DisableVgwRoutePropagation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the virtual private gateway.
+    gatewayId :: Prelude.Text,
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableVgwRoutePropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableVgwRoutePropagation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'gatewayId', 'disableVgwRoutePropagation_gatewayId' - The ID of the virtual private gateway.
+--
+-- 'routeTableId', 'disableVgwRoutePropagation_routeTableId' - The ID of the route table.
+newDisableVgwRoutePropagation ::
+  -- | 'gatewayId'
+  Prelude.Text ->
+  -- | 'routeTableId'
+  Prelude.Text ->
+  DisableVgwRoutePropagation
+newDisableVgwRoutePropagation
+  pGatewayId_
+  pRouteTableId_ =
+    DisableVgwRoutePropagation'
+      { dryRun =
+          Prelude.Nothing,
+        gatewayId = pGatewayId_,
+        routeTableId = pRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableVgwRoutePropagation_dryRun :: Lens.Lens' DisableVgwRoutePropagation (Prelude.Maybe Prelude.Bool)
+disableVgwRoutePropagation_dryRun = Lens.lens (\DisableVgwRoutePropagation' {dryRun} -> dryRun) (\s@DisableVgwRoutePropagation' {} a -> s {dryRun = a} :: DisableVgwRoutePropagation)
+
+-- | The ID of the virtual private gateway.
+disableVgwRoutePropagation_gatewayId :: Lens.Lens' DisableVgwRoutePropagation Prelude.Text
+disableVgwRoutePropagation_gatewayId = Lens.lens (\DisableVgwRoutePropagation' {gatewayId} -> gatewayId) (\s@DisableVgwRoutePropagation' {} a -> s {gatewayId = a} :: DisableVgwRoutePropagation)
+
+-- | The ID of the route table.
+disableVgwRoutePropagation_routeTableId :: Lens.Lens' DisableVgwRoutePropagation Prelude.Text
+disableVgwRoutePropagation_routeTableId = Lens.lens (\DisableVgwRoutePropagation' {routeTableId} -> routeTableId) (\s@DisableVgwRoutePropagation' {} a -> s {routeTableId = a} :: DisableVgwRoutePropagation)
+
+instance Core.AWSRequest DisableVgwRoutePropagation where
+  type
+    AWSResponse DisableVgwRoutePropagation =
+      DisableVgwRoutePropagationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      DisableVgwRoutePropagationResponse'
+
+instance Prelude.Hashable DisableVgwRoutePropagation where
+  hashWithSalt _salt DisableVgwRoutePropagation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData DisableVgwRoutePropagation where
+  rnf DisableVgwRoutePropagation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders DisableVgwRoutePropagation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableVgwRoutePropagation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableVgwRoutePropagation where
+  toQuery DisableVgwRoutePropagation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisableVgwRoutePropagation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GatewayId" Data.=: gatewayId,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newDisableVgwRoutePropagationResponse' smart constructor.
+data DisableVgwRoutePropagationResponse = DisableVgwRoutePropagationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableVgwRoutePropagationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisableVgwRoutePropagationResponse ::
+  DisableVgwRoutePropagationResponse
+newDisableVgwRoutePropagationResponse =
+  DisableVgwRoutePropagationResponse'
+
+instance
+  Prelude.NFData
+    DisableVgwRoutePropagationResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DisableVpcClassicLink.hs b/gen/Amazonka/EC2/DisableVpcClassicLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableVpcClassicLink.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableVpcClassicLink
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC
+-- that has EC2-Classic instances linked to it.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DisableVpcClassicLink
+  ( -- * Creating a Request
+    DisableVpcClassicLink (..),
+    newDisableVpcClassicLink,
+
+    -- * Request Lenses
+    disableVpcClassicLink_dryRun,
+    disableVpcClassicLink_vpcId,
+
+    -- * Destructuring the Response
+    DisableVpcClassicLinkResponse (..),
+    newDisableVpcClassicLinkResponse,
+
+    -- * Response Lenses
+    disableVpcClassicLinkResponse_return,
+    disableVpcClassicLinkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableVpcClassicLink' smart constructor.
+data DisableVpcClassicLink = DisableVpcClassicLink'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableVpcClassicLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disableVpcClassicLink_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcId', 'disableVpcClassicLink_vpcId' - The ID of the VPC.
+newDisableVpcClassicLink ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  DisableVpcClassicLink
+newDisableVpcClassicLink pVpcId_ =
+  DisableVpcClassicLink'
+    { dryRun = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disableVpcClassicLink_dryRun :: Lens.Lens' DisableVpcClassicLink (Prelude.Maybe Prelude.Bool)
+disableVpcClassicLink_dryRun = Lens.lens (\DisableVpcClassicLink' {dryRun} -> dryRun) (\s@DisableVpcClassicLink' {} a -> s {dryRun = a} :: DisableVpcClassicLink)
+
+-- | The ID of the VPC.
+disableVpcClassicLink_vpcId :: Lens.Lens' DisableVpcClassicLink Prelude.Text
+disableVpcClassicLink_vpcId = Lens.lens (\DisableVpcClassicLink' {vpcId} -> vpcId) (\s@DisableVpcClassicLink' {} a -> s {vpcId = a} :: DisableVpcClassicLink)
+
+instance Core.AWSRequest DisableVpcClassicLink where
+  type
+    AWSResponse DisableVpcClassicLink =
+      DisableVpcClassicLinkResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableVpcClassicLinkResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableVpcClassicLink where
+  hashWithSalt _salt DisableVpcClassicLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData DisableVpcClassicLink where
+  rnf DisableVpcClassicLink' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders DisableVpcClassicLink where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableVpcClassicLink where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableVpcClassicLink where
+  toQuery DisableVpcClassicLink' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisableVpcClassicLink" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDisableVpcClassicLinkResponse' smart constructor.
+data DisableVpcClassicLinkResponse = DisableVpcClassicLinkResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableVpcClassicLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'disableVpcClassicLinkResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'disableVpcClassicLinkResponse_httpStatus' - The response's http status code.
+newDisableVpcClassicLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableVpcClassicLinkResponse
+newDisableVpcClassicLinkResponse pHttpStatus_ =
+  DisableVpcClassicLinkResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+disableVpcClassicLinkResponse_return :: Lens.Lens' DisableVpcClassicLinkResponse (Prelude.Maybe Prelude.Bool)
+disableVpcClassicLinkResponse_return = Lens.lens (\DisableVpcClassicLinkResponse' {return'} -> return') (\s@DisableVpcClassicLinkResponse' {} a -> s {return' = a} :: DisableVpcClassicLinkResponse)
+
+-- | The response's http status code.
+disableVpcClassicLinkResponse_httpStatus :: Lens.Lens' DisableVpcClassicLinkResponse Prelude.Int
+disableVpcClassicLinkResponse_httpStatus = Lens.lens (\DisableVpcClassicLinkResponse' {httpStatus} -> httpStatus) (\s@DisableVpcClassicLinkResponse' {} a -> s {httpStatus = a} :: DisableVpcClassicLinkResponse)
+
+instance Prelude.NFData DisableVpcClassicLinkResponse where
+  rnf DisableVpcClassicLinkResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisableVpcClassicLinkDnsSupport.hs b/gen/Amazonka/EC2/DisableVpcClassicLinkDnsSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisableVpcClassicLinkDnsSupport.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisableVpcClassicLinkDnsSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames
+-- resolve to public IP addresses when addressed between a linked
+-- EC2-Classic instance and instances in the VPC to which it\'s linked. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- You must specify a VPC ID in the request.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.DisableVpcClassicLinkDnsSupport
+  ( -- * Creating a Request
+    DisableVpcClassicLinkDnsSupport (..),
+    newDisableVpcClassicLinkDnsSupport,
+
+    -- * Request Lenses
+    disableVpcClassicLinkDnsSupport_vpcId,
+
+    -- * Destructuring the Response
+    DisableVpcClassicLinkDnsSupportResponse (..),
+    newDisableVpcClassicLinkDnsSupportResponse,
+
+    -- * Response Lenses
+    disableVpcClassicLinkDnsSupportResponse_return,
+    disableVpcClassicLinkDnsSupportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableVpcClassicLinkDnsSupport' smart constructor.
+data DisableVpcClassicLinkDnsSupport = DisableVpcClassicLinkDnsSupport'
+  { -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableVpcClassicLinkDnsSupport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcId', 'disableVpcClassicLinkDnsSupport_vpcId' - The ID of the VPC.
+newDisableVpcClassicLinkDnsSupport ::
+  DisableVpcClassicLinkDnsSupport
+newDisableVpcClassicLinkDnsSupport =
+  DisableVpcClassicLinkDnsSupport'
+    { vpcId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the VPC.
+disableVpcClassicLinkDnsSupport_vpcId :: Lens.Lens' DisableVpcClassicLinkDnsSupport (Prelude.Maybe Prelude.Text)
+disableVpcClassicLinkDnsSupport_vpcId = Lens.lens (\DisableVpcClassicLinkDnsSupport' {vpcId} -> vpcId) (\s@DisableVpcClassicLinkDnsSupport' {} a -> s {vpcId = a} :: DisableVpcClassicLinkDnsSupport)
+
+instance
+  Core.AWSRequest
+    DisableVpcClassicLinkDnsSupport
+  where
+  type
+    AWSResponse DisableVpcClassicLinkDnsSupport =
+      DisableVpcClassicLinkDnsSupportResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisableVpcClassicLinkDnsSupportResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisableVpcClassicLinkDnsSupport
+  where
+  hashWithSalt
+    _salt
+    DisableVpcClassicLinkDnsSupport' {..} =
+      _salt `Prelude.hashWithSalt` vpcId
+
+instance
+  Prelude.NFData
+    DisableVpcClassicLinkDnsSupport
+  where
+  rnf DisableVpcClassicLinkDnsSupport' {..} =
+    Prelude.rnf vpcId
+
+instance
+  Data.ToHeaders
+    DisableVpcClassicLinkDnsSupport
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisableVpcClassicLinkDnsSupport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableVpcClassicLinkDnsSupport where
+  toQuery DisableVpcClassicLinkDnsSupport' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisableVpcClassicLinkDnsSupport" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newDisableVpcClassicLinkDnsSupportResponse' smart constructor.
+data DisableVpcClassicLinkDnsSupportResponse = DisableVpcClassicLinkDnsSupportResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableVpcClassicLinkDnsSupportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'disableVpcClassicLinkDnsSupportResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'disableVpcClassicLinkDnsSupportResponse_httpStatus' - The response's http status code.
+newDisableVpcClassicLinkDnsSupportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableVpcClassicLinkDnsSupportResponse
+newDisableVpcClassicLinkDnsSupportResponse
+  pHttpStatus_ =
+    DisableVpcClassicLinkDnsSupportResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+disableVpcClassicLinkDnsSupportResponse_return :: Lens.Lens' DisableVpcClassicLinkDnsSupportResponse (Prelude.Maybe Prelude.Bool)
+disableVpcClassicLinkDnsSupportResponse_return = Lens.lens (\DisableVpcClassicLinkDnsSupportResponse' {return'} -> return') (\s@DisableVpcClassicLinkDnsSupportResponse' {} a -> s {return' = a} :: DisableVpcClassicLinkDnsSupportResponse)
+
+-- | The response's http status code.
+disableVpcClassicLinkDnsSupportResponse_httpStatus :: Lens.Lens' DisableVpcClassicLinkDnsSupportResponse Prelude.Int
+disableVpcClassicLinkDnsSupportResponse_httpStatus = Lens.lens (\DisableVpcClassicLinkDnsSupportResponse' {httpStatus} -> httpStatus) (\s@DisableVpcClassicLinkDnsSupportResponse' {} a -> s {httpStatus = a} :: DisableVpcClassicLinkDnsSupportResponse)
+
+instance
+  Prelude.NFData
+    DisableVpcClassicLinkDnsSupportResponse
+  where
+  rnf DisableVpcClassicLinkDnsSupportResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateAddress.hs b/gen/Amazonka/EC2/DisassociateAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateAddress.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates an Elastic IP address from the instance or network
+-- interface it\'s associated with.
+--
+-- An Elastic IP address is for use in either the EC2-Classic platform or
+-- in a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This is an idempotent operation. If you perform the operation more than
+-- once, Amazon EC2 doesn\'t return an error.
+module Amazonka.EC2.DisassociateAddress
+  ( -- * Creating a Request
+    DisassociateAddress (..),
+    newDisassociateAddress,
+
+    -- * Request Lenses
+    disassociateAddress_associationId,
+    disassociateAddress_dryRun,
+    disassociateAddress_publicIp,
+
+    -- * Destructuring the Response
+    DisassociateAddressResponse (..),
+    newDisassociateAddressResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateAddress' smart constructor.
+data DisassociateAddress = DisassociateAddress'
+  { -- | [EC2-VPC] The association ID. Required for EC2-VPC.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'disassociateAddress_associationId' - [EC2-VPC] The association ID. Required for EC2-VPC.
+--
+-- 'dryRun', 'disassociateAddress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'publicIp', 'disassociateAddress_publicIp' - [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
+newDisassociateAddress ::
+  DisassociateAddress
+newDisassociateAddress =
+  DisassociateAddress'
+    { associationId =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] The association ID. Required for EC2-VPC.
+disassociateAddress_associationId :: Lens.Lens' DisassociateAddress (Prelude.Maybe Prelude.Text)
+disassociateAddress_associationId = Lens.lens (\DisassociateAddress' {associationId} -> associationId) (\s@DisassociateAddress' {} a -> s {associationId = a} :: DisassociateAddress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateAddress_dryRun :: Lens.Lens' DisassociateAddress (Prelude.Maybe Prelude.Bool)
+disassociateAddress_dryRun = Lens.lens (\DisassociateAddress' {dryRun} -> dryRun) (\s@DisassociateAddress' {} a -> s {dryRun = a} :: DisassociateAddress)
+
+-- | [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
+disassociateAddress_publicIp :: Lens.Lens' DisassociateAddress (Prelude.Maybe Prelude.Text)
+disassociateAddress_publicIp = Lens.lens (\DisassociateAddress' {publicIp} -> publicIp) (\s@DisassociateAddress' {} a -> s {publicIp = a} :: DisassociateAddress)
+
+instance Core.AWSRequest DisassociateAddress where
+  type
+    AWSResponse DisassociateAddress =
+      DisassociateAddressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DisassociateAddressResponse'
+
+instance Prelude.Hashable DisassociateAddress where
+  hashWithSalt _salt DisassociateAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData DisassociateAddress where
+  rnf DisassociateAddress' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf publicIp
+
+instance Data.ToHeaders DisassociateAddress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateAddress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateAddress where
+  toQuery DisassociateAddress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisassociateAddress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AssociationId" Data.=: associationId,
+        "DryRun" Data.=: dryRun,
+        "PublicIp" Data.=: publicIp
+      ]
+
+-- | /See:/ 'newDisassociateAddressResponse' smart constructor.
+data DisassociateAddressResponse = DisassociateAddressResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateAddressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisassociateAddressResponse ::
+  DisassociateAddressResponse
+newDisassociateAddressResponse =
+  DisassociateAddressResponse'
+
+instance Prelude.NFData DisassociateAddressResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DisassociateClientVpnTargetNetwork.hs b/gen/Amazonka/EC2/DisassociateClientVpnTargetNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateClientVpnTargetNetwork.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateClientVpnTargetNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a target network from the specified Client VPN endpoint.
+-- When you disassociate the last target network from a Client VPN, the
+-- following happens:
+--
+-- -   The route that was automatically added for the VPC is deleted
+--
+-- -   All active client connections are terminated
+--
+-- -   New client connections are disallowed
+--
+-- -   The Client VPN endpoint\'s status changes to @pending-associate@
+module Amazonka.EC2.DisassociateClientVpnTargetNetwork
+  ( -- * Creating a Request
+    DisassociateClientVpnTargetNetwork (..),
+    newDisassociateClientVpnTargetNetwork,
+
+    -- * Request Lenses
+    disassociateClientVpnTargetNetwork_dryRun,
+    disassociateClientVpnTargetNetwork_clientVpnEndpointId,
+    disassociateClientVpnTargetNetwork_associationId,
+
+    -- * Destructuring the Response
+    DisassociateClientVpnTargetNetworkResponse (..),
+    newDisassociateClientVpnTargetNetworkResponse,
+
+    -- * Response Lenses
+    disassociateClientVpnTargetNetworkResponse_associationId,
+    disassociateClientVpnTargetNetworkResponse_status,
+    disassociateClientVpnTargetNetworkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateClientVpnTargetNetwork' smart constructor.
+data DisassociateClientVpnTargetNetwork = DisassociateClientVpnTargetNetwork'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint from which to disassociate the target
+    -- network.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The ID of the target network association.
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateClientVpnTargetNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disassociateClientVpnTargetNetwork_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'disassociateClientVpnTargetNetwork_clientVpnEndpointId' - The ID of the Client VPN endpoint from which to disassociate the target
+-- network.
+--
+-- 'associationId', 'disassociateClientVpnTargetNetwork_associationId' - The ID of the target network association.
+newDisassociateClientVpnTargetNetwork ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'associationId'
+  Prelude.Text ->
+  DisassociateClientVpnTargetNetwork
+newDisassociateClientVpnTargetNetwork
+  pClientVpnEndpointId_
+  pAssociationId_ =
+    DisassociateClientVpnTargetNetwork'
+      { dryRun =
+          Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_,
+        associationId = pAssociationId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateClientVpnTargetNetwork_dryRun :: Lens.Lens' DisassociateClientVpnTargetNetwork (Prelude.Maybe Prelude.Bool)
+disassociateClientVpnTargetNetwork_dryRun = Lens.lens (\DisassociateClientVpnTargetNetwork' {dryRun} -> dryRun) (\s@DisassociateClientVpnTargetNetwork' {} a -> s {dryRun = a} :: DisassociateClientVpnTargetNetwork)
+
+-- | The ID of the Client VPN endpoint from which to disassociate the target
+-- network.
+disassociateClientVpnTargetNetwork_clientVpnEndpointId :: Lens.Lens' DisassociateClientVpnTargetNetwork Prelude.Text
+disassociateClientVpnTargetNetwork_clientVpnEndpointId = Lens.lens (\DisassociateClientVpnTargetNetwork' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@DisassociateClientVpnTargetNetwork' {} a -> s {clientVpnEndpointId = a} :: DisassociateClientVpnTargetNetwork)
+
+-- | The ID of the target network association.
+disassociateClientVpnTargetNetwork_associationId :: Lens.Lens' DisassociateClientVpnTargetNetwork Prelude.Text
+disassociateClientVpnTargetNetwork_associationId = Lens.lens (\DisassociateClientVpnTargetNetwork' {associationId} -> associationId) (\s@DisassociateClientVpnTargetNetwork' {} a -> s {associationId = a} :: DisassociateClientVpnTargetNetwork)
+
+instance
+  Core.AWSRequest
+    DisassociateClientVpnTargetNetwork
+  where
+  type
+    AWSResponse DisassociateClientVpnTargetNetwork =
+      DisassociateClientVpnTargetNetworkResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateClientVpnTargetNetworkResponse'
+            Prelude.<$> (x Data..@? "associationId")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateClientVpnTargetNetwork
+  where
+  hashWithSalt
+    _salt
+    DisassociateClientVpnTargetNetwork' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` clientVpnEndpointId
+        `Prelude.hashWithSalt` associationId
+
+instance
+  Prelude.NFData
+    DisassociateClientVpnTargetNetwork
+  where
+  rnf DisassociateClientVpnTargetNetwork' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf associationId
+
+instance
+  Data.ToHeaders
+    DisassociateClientVpnTargetNetwork
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateClientVpnTargetNetwork
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateClientVpnTargetNetwork
+  where
+  toQuery DisassociateClientVpnTargetNetwork' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateClientVpnTargetNetwork" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newDisassociateClientVpnTargetNetworkResponse' smart constructor.
+data DisassociateClientVpnTargetNetworkResponse = DisassociateClientVpnTargetNetworkResponse'
+  { -- | The ID of the target network association.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the target network association.
+    status :: Prelude.Maybe AssociationStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateClientVpnTargetNetworkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'disassociateClientVpnTargetNetworkResponse_associationId' - The ID of the target network association.
+--
+-- 'status', 'disassociateClientVpnTargetNetworkResponse_status' - The current state of the target network association.
+--
+-- 'httpStatus', 'disassociateClientVpnTargetNetworkResponse_httpStatus' - The response's http status code.
+newDisassociateClientVpnTargetNetworkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateClientVpnTargetNetworkResponse
+newDisassociateClientVpnTargetNetworkResponse
+  pHttpStatus_ =
+    DisassociateClientVpnTargetNetworkResponse'
+      { associationId =
+          Prelude.Nothing,
+        status = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the target network association.
+disassociateClientVpnTargetNetworkResponse_associationId :: Lens.Lens' DisassociateClientVpnTargetNetworkResponse (Prelude.Maybe Prelude.Text)
+disassociateClientVpnTargetNetworkResponse_associationId = Lens.lens (\DisassociateClientVpnTargetNetworkResponse' {associationId} -> associationId) (\s@DisassociateClientVpnTargetNetworkResponse' {} a -> s {associationId = a} :: DisassociateClientVpnTargetNetworkResponse)
+
+-- | The current state of the target network association.
+disassociateClientVpnTargetNetworkResponse_status :: Lens.Lens' DisassociateClientVpnTargetNetworkResponse (Prelude.Maybe AssociationStatus)
+disassociateClientVpnTargetNetworkResponse_status = Lens.lens (\DisassociateClientVpnTargetNetworkResponse' {status} -> status) (\s@DisassociateClientVpnTargetNetworkResponse' {} a -> s {status = a} :: DisassociateClientVpnTargetNetworkResponse)
+
+-- | The response's http status code.
+disassociateClientVpnTargetNetworkResponse_httpStatus :: Lens.Lens' DisassociateClientVpnTargetNetworkResponse Prelude.Int
+disassociateClientVpnTargetNetworkResponse_httpStatus = Lens.lens (\DisassociateClientVpnTargetNetworkResponse' {httpStatus} -> httpStatus) (\s@DisassociateClientVpnTargetNetworkResponse' {} a -> s {httpStatus = a} :: DisassociateClientVpnTargetNetworkResponse)
+
+instance
+  Prelude.NFData
+    DisassociateClientVpnTargetNetworkResponse
+  where
+  rnf DisassociateClientVpnTargetNetworkResponse' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateEnclaveCertificateIamRole.hs b/gen/Amazonka/EC2/DisassociateEnclaveCertificateIamRole.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateEnclaveCertificateIamRole.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateEnclaveCertificateIamRole
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates an IAM role from an Certificate Manager (ACM) certificate.
+-- Disassociating an IAM role from an ACM certificate removes the Amazon S3
+-- object that contains the certificate, certificate chain, and encrypted
+-- private key from the Amazon S3 bucket. It also revokes the IAM role\'s
+-- permission to use the KMS key used to encrypt the private key. This
+-- effectively revokes the role\'s permission to use the certificate.
+module Amazonka.EC2.DisassociateEnclaveCertificateIamRole
+  ( -- * Creating a Request
+    DisassociateEnclaveCertificateIamRole (..),
+    newDisassociateEnclaveCertificateIamRole,
+
+    -- * Request Lenses
+    disassociateEnclaveCertificateIamRole_certificateArn,
+    disassociateEnclaveCertificateIamRole_dryRun,
+    disassociateEnclaveCertificateIamRole_roleArn,
+
+    -- * Destructuring the Response
+    DisassociateEnclaveCertificateIamRoleResponse (..),
+    newDisassociateEnclaveCertificateIamRoleResponse,
+
+    -- * Response Lenses
+    disassociateEnclaveCertificateIamRoleResponse_return,
+    disassociateEnclaveCertificateIamRoleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateEnclaveCertificateIamRole' smart constructor.
+data DisassociateEnclaveCertificateIamRole = DisassociateEnclaveCertificateIamRole'
+  { -- | The ARN of the ACM certificate from which to disassociate the IAM role.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the IAM role to disassociate.
+    roleArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateEnclaveCertificateIamRole' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateArn', 'disassociateEnclaveCertificateIamRole_certificateArn' - The ARN of the ACM certificate from which to disassociate the IAM role.
+--
+-- 'dryRun', 'disassociateEnclaveCertificateIamRole_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'roleArn', 'disassociateEnclaveCertificateIamRole_roleArn' - The ARN of the IAM role to disassociate.
+newDisassociateEnclaveCertificateIamRole ::
+  DisassociateEnclaveCertificateIamRole
+newDisassociateEnclaveCertificateIamRole =
+  DisassociateEnclaveCertificateIamRole'
+    { certificateArn =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      roleArn = Prelude.Nothing
+    }
+
+-- | The ARN of the ACM certificate from which to disassociate the IAM role.
+disassociateEnclaveCertificateIamRole_certificateArn :: Lens.Lens' DisassociateEnclaveCertificateIamRole (Prelude.Maybe Prelude.Text)
+disassociateEnclaveCertificateIamRole_certificateArn = Lens.lens (\DisassociateEnclaveCertificateIamRole' {certificateArn} -> certificateArn) (\s@DisassociateEnclaveCertificateIamRole' {} a -> s {certificateArn = a} :: DisassociateEnclaveCertificateIamRole)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateEnclaveCertificateIamRole_dryRun :: Lens.Lens' DisassociateEnclaveCertificateIamRole (Prelude.Maybe Prelude.Bool)
+disassociateEnclaveCertificateIamRole_dryRun = Lens.lens (\DisassociateEnclaveCertificateIamRole' {dryRun} -> dryRun) (\s@DisassociateEnclaveCertificateIamRole' {} a -> s {dryRun = a} :: DisassociateEnclaveCertificateIamRole)
+
+-- | The ARN of the IAM role to disassociate.
+disassociateEnclaveCertificateIamRole_roleArn :: Lens.Lens' DisassociateEnclaveCertificateIamRole (Prelude.Maybe Prelude.Text)
+disassociateEnclaveCertificateIamRole_roleArn = Lens.lens (\DisassociateEnclaveCertificateIamRole' {roleArn} -> roleArn) (\s@DisassociateEnclaveCertificateIamRole' {} a -> s {roleArn = a} :: DisassociateEnclaveCertificateIamRole)
+
+instance
+  Core.AWSRequest
+    DisassociateEnclaveCertificateIamRole
+  where
+  type
+    AWSResponse
+      DisassociateEnclaveCertificateIamRole =
+      DisassociateEnclaveCertificateIamRoleResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateEnclaveCertificateIamRoleResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateEnclaveCertificateIamRole
+  where
+  hashWithSalt
+    _salt
+    DisassociateEnclaveCertificateIamRole' {..} =
+      _salt
+        `Prelude.hashWithSalt` certificateArn
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` roleArn
+
+instance
+  Prelude.NFData
+    DisassociateEnclaveCertificateIamRole
+  where
+  rnf DisassociateEnclaveCertificateIamRole' {..} =
+    Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf roleArn
+
+instance
+  Data.ToHeaders
+    DisassociateEnclaveCertificateIamRole
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateEnclaveCertificateIamRole
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateEnclaveCertificateIamRole
+  where
+  toQuery DisassociateEnclaveCertificateIamRole' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateEnclaveCertificateIamRole" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CertificateArn" Data.=: certificateArn,
+        "DryRun" Data.=: dryRun,
+        "RoleArn" Data.=: roleArn
+      ]
+
+-- | /See:/ 'newDisassociateEnclaveCertificateIamRoleResponse' smart constructor.
+data DisassociateEnclaveCertificateIamRoleResponse = DisassociateEnclaveCertificateIamRoleResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateEnclaveCertificateIamRoleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'disassociateEnclaveCertificateIamRoleResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'disassociateEnclaveCertificateIamRoleResponse_httpStatus' - The response's http status code.
+newDisassociateEnclaveCertificateIamRoleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateEnclaveCertificateIamRoleResponse
+newDisassociateEnclaveCertificateIamRoleResponse
+  pHttpStatus_ =
+    DisassociateEnclaveCertificateIamRoleResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+disassociateEnclaveCertificateIamRoleResponse_return :: Lens.Lens' DisassociateEnclaveCertificateIamRoleResponse (Prelude.Maybe Prelude.Bool)
+disassociateEnclaveCertificateIamRoleResponse_return = Lens.lens (\DisassociateEnclaveCertificateIamRoleResponse' {return'} -> return') (\s@DisassociateEnclaveCertificateIamRoleResponse' {} a -> s {return' = a} :: DisassociateEnclaveCertificateIamRoleResponse)
+
+-- | The response's http status code.
+disassociateEnclaveCertificateIamRoleResponse_httpStatus :: Lens.Lens' DisassociateEnclaveCertificateIamRoleResponse Prelude.Int
+disassociateEnclaveCertificateIamRoleResponse_httpStatus = Lens.lens (\DisassociateEnclaveCertificateIamRoleResponse' {httpStatus} -> httpStatus) (\s@DisassociateEnclaveCertificateIamRoleResponse' {} a -> s {httpStatus = a} :: DisassociateEnclaveCertificateIamRoleResponse)
+
+instance
+  Prelude.NFData
+    DisassociateEnclaveCertificateIamRoleResponse
+  where
+  rnf
+    DisassociateEnclaveCertificateIamRoleResponse' {..} =
+      Prelude.rnf return'
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateIamInstanceProfile.hs b/gen/Amazonka/EC2/DisassociateIamInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateIamInstanceProfile.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateIamInstanceProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates an IAM instance profile from a running or stopped
+-- instance.
+--
+-- Use DescribeIamInstanceProfileAssociations to get the association ID.
+module Amazonka.EC2.DisassociateIamInstanceProfile
+  ( -- * Creating a Request
+    DisassociateIamInstanceProfile (..),
+    newDisassociateIamInstanceProfile,
+
+    -- * Request Lenses
+    disassociateIamInstanceProfile_associationId,
+
+    -- * Destructuring the Response
+    DisassociateIamInstanceProfileResponse (..),
+    newDisassociateIamInstanceProfileResponse,
+
+    -- * Response Lenses
+    disassociateIamInstanceProfileResponse_iamInstanceProfileAssociation,
+    disassociateIamInstanceProfileResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateIamInstanceProfile' smart constructor.
+data DisassociateIamInstanceProfile = DisassociateIamInstanceProfile'
+  { -- | The ID of the IAM instance profile association.
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateIamInstanceProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'disassociateIamInstanceProfile_associationId' - The ID of the IAM instance profile association.
+newDisassociateIamInstanceProfile ::
+  -- | 'associationId'
+  Prelude.Text ->
+  DisassociateIamInstanceProfile
+newDisassociateIamInstanceProfile pAssociationId_ =
+  DisassociateIamInstanceProfile'
+    { associationId =
+        pAssociationId_
+    }
+
+-- | The ID of the IAM instance profile association.
+disassociateIamInstanceProfile_associationId :: Lens.Lens' DisassociateIamInstanceProfile Prelude.Text
+disassociateIamInstanceProfile_associationId = Lens.lens (\DisassociateIamInstanceProfile' {associationId} -> associationId) (\s@DisassociateIamInstanceProfile' {} a -> s {associationId = a} :: DisassociateIamInstanceProfile)
+
+instance
+  Core.AWSRequest
+    DisassociateIamInstanceProfile
+  where
+  type
+    AWSResponse DisassociateIamInstanceProfile =
+      DisassociateIamInstanceProfileResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateIamInstanceProfileResponse'
+            Prelude.<$> (x Data..@? "iamInstanceProfileAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateIamInstanceProfile
+  where
+  hashWithSalt
+    _salt
+    DisassociateIamInstanceProfile' {..} =
+      _salt `Prelude.hashWithSalt` associationId
+
+instance
+  Prelude.NFData
+    DisassociateIamInstanceProfile
+  where
+  rnf DisassociateIamInstanceProfile' {..} =
+    Prelude.rnf associationId
+
+instance
+  Data.ToHeaders
+    DisassociateIamInstanceProfile
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateIamInstanceProfile where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateIamInstanceProfile where
+  toQuery DisassociateIamInstanceProfile' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateIamInstanceProfile" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newDisassociateIamInstanceProfileResponse' smart constructor.
+data DisassociateIamInstanceProfileResponse = DisassociateIamInstanceProfileResponse'
+  { -- | Information about the IAM instance profile association.
+    iamInstanceProfileAssociation :: Prelude.Maybe IamInstanceProfileAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateIamInstanceProfileResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamInstanceProfileAssociation', 'disassociateIamInstanceProfileResponse_iamInstanceProfileAssociation' - Information about the IAM instance profile association.
+--
+-- 'httpStatus', 'disassociateIamInstanceProfileResponse_httpStatus' - The response's http status code.
+newDisassociateIamInstanceProfileResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateIamInstanceProfileResponse
+newDisassociateIamInstanceProfileResponse
+  pHttpStatus_ =
+    DisassociateIamInstanceProfileResponse'
+      { iamInstanceProfileAssociation =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the IAM instance profile association.
+disassociateIamInstanceProfileResponse_iamInstanceProfileAssociation :: Lens.Lens' DisassociateIamInstanceProfileResponse (Prelude.Maybe IamInstanceProfileAssociation)
+disassociateIamInstanceProfileResponse_iamInstanceProfileAssociation = Lens.lens (\DisassociateIamInstanceProfileResponse' {iamInstanceProfileAssociation} -> iamInstanceProfileAssociation) (\s@DisassociateIamInstanceProfileResponse' {} a -> s {iamInstanceProfileAssociation = a} :: DisassociateIamInstanceProfileResponse)
+
+-- | The response's http status code.
+disassociateIamInstanceProfileResponse_httpStatus :: Lens.Lens' DisassociateIamInstanceProfileResponse Prelude.Int
+disassociateIamInstanceProfileResponse_httpStatus = Lens.lens (\DisassociateIamInstanceProfileResponse' {httpStatus} -> httpStatus) (\s@DisassociateIamInstanceProfileResponse' {} a -> s {httpStatus = a} :: DisassociateIamInstanceProfileResponse)
+
+instance
+  Prelude.NFData
+    DisassociateIamInstanceProfileResponse
+  where
+  rnf DisassociateIamInstanceProfileResponse' {..} =
+    Prelude.rnf iamInstanceProfileAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateInstanceEventWindow.hs b/gen/Amazonka/EC2/DisassociateInstanceEventWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateInstanceEventWindow.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateInstanceEventWindow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates one or more targets from an event window.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html Define event windows for scheduled events>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.DisassociateInstanceEventWindow
+  ( -- * Creating a Request
+    DisassociateInstanceEventWindow (..),
+    newDisassociateInstanceEventWindow,
+
+    -- * Request Lenses
+    disassociateInstanceEventWindow_dryRun,
+    disassociateInstanceEventWindow_instanceEventWindowId,
+    disassociateInstanceEventWindow_associationTarget,
+
+    -- * Destructuring the Response
+    DisassociateInstanceEventWindowResponse (..),
+    newDisassociateInstanceEventWindowResponse,
+
+    -- * Response Lenses
+    disassociateInstanceEventWindowResponse_instanceEventWindow,
+    disassociateInstanceEventWindowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateInstanceEventWindow' smart constructor.
+data DisassociateInstanceEventWindow = DisassociateInstanceEventWindow'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the event window.
+    instanceEventWindowId :: Prelude.Text,
+    -- | One or more targets to disassociate from the specified event window.
+    associationTarget :: InstanceEventWindowDisassociationRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateInstanceEventWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disassociateInstanceEventWindow_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceEventWindowId', 'disassociateInstanceEventWindow_instanceEventWindowId' - The ID of the event window.
+--
+-- 'associationTarget', 'disassociateInstanceEventWindow_associationTarget' - One or more targets to disassociate from the specified event window.
+newDisassociateInstanceEventWindow ::
+  -- | 'instanceEventWindowId'
+  Prelude.Text ->
+  -- | 'associationTarget'
+  InstanceEventWindowDisassociationRequest ->
+  DisassociateInstanceEventWindow
+newDisassociateInstanceEventWindow
+  pInstanceEventWindowId_
+  pAssociationTarget_ =
+    DisassociateInstanceEventWindow'
+      { dryRun =
+          Prelude.Nothing,
+        instanceEventWindowId =
+          pInstanceEventWindowId_,
+        associationTarget = pAssociationTarget_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateInstanceEventWindow_dryRun :: Lens.Lens' DisassociateInstanceEventWindow (Prelude.Maybe Prelude.Bool)
+disassociateInstanceEventWindow_dryRun = Lens.lens (\DisassociateInstanceEventWindow' {dryRun} -> dryRun) (\s@DisassociateInstanceEventWindow' {} a -> s {dryRun = a} :: DisassociateInstanceEventWindow)
+
+-- | The ID of the event window.
+disassociateInstanceEventWindow_instanceEventWindowId :: Lens.Lens' DisassociateInstanceEventWindow Prelude.Text
+disassociateInstanceEventWindow_instanceEventWindowId = Lens.lens (\DisassociateInstanceEventWindow' {instanceEventWindowId} -> instanceEventWindowId) (\s@DisassociateInstanceEventWindow' {} a -> s {instanceEventWindowId = a} :: DisassociateInstanceEventWindow)
+
+-- | One or more targets to disassociate from the specified event window.
+disassociateInstanceEventWindow_associationTarget :: Lens.Lens' DisassociateInstanceEventWindow InstanceEventWindowDisassociationRequest
+disassociateInstanceEventWindow_associationTarget = Lens.lens (\DisassociateInstanceEventWindow' {associationTarget} -> associationTarget) (\s@DisassociateInstanceEventWindow' {} a -> s {associationTarget = a} :: DisassociateInstanceEventWindow)
+
+instance
+  Core.AWSRequest
+    DisassociateInstanceEventWindow
+  where
+  type
+    AWSResponse DisassociateInstanceEventWindow =
+      DisassociateInstanceEventWindowResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateInstanceEventWindowResponse'
+            Prelude.<$> (x Data..@? "instanceEventWindow")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateInstanceEventWindow
+  where
+  hashWithSalt
+    _salt
+    DisassociateInstanceEventWindow' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceEventWindowId
+        `Prelude.hashWithSalt` associationTarget
+
+instance
+  Prelude.NFData
+    DisassociateInstanceEventWindow
+  where
+  rnf DisassociateInstanceEventWindow' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceEventWindowId
+      `Prelude.seq` Prelude.rnf associationTarget
+
+instance
+  Data.ToHeaders
+    DisassociateInstanceEventWindow
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateInstanceEventWindow where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateInstanceEventWindow where
+  toQuery DisassociateInstanceEventWindow' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateInstanceEventWindow" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceEventWindowId"
+          Data.=: instanceEventWindowId,
+        "AssociationTarget" Data.=: associationTarget
+      ]
+
+-- | /See:/ 'newDisassociateInstanceEventWindowResponse' smart constructor.
+data DisassociateInstanceEventWindowResponse = DisassociateInstanceEventWindowResponse'
+  { -- | Information about the event window.
+    instanceEventWindow :: Prelude.Maybe InstanceEventWindow,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateInstanceEventWindowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindow', 'disassociateInstanceEventWindowResponse_instanceEventWindow' - Information about the event window.
+--
+-- 'httpStatus', 'disassociateInstanceEventWindowResponse_httpStatus' - The response's http status code.
+newDisassociateInstanceEventWindowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateInstanceEventWindowResponse
+newDisassociateInstanceEventWindowResponse
+  pHttpStatus_ =
+    DisassociateInstanceEventWindowResponse'
+      { instanceEventWindow =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the event window.
+disassociateInstanceEventWindowResponse_instanceEventWindow :: Lens.Lens' DisassociateInstanceEventWindowResponse (Prelude.Maybe InstanceEventWindow)
+disassociateInstanceEventWindowResponse_instanceEventWindow = Lens.lens (\DisassociateInstanceEventWindowResponse' {instanceEventWindow} -> instanceEventWindow) (\s@DisassociateInstanceEventWindowResponse' {} a -> s {instanceEventWindow = a} :: DisassociateInstanceEventWindowResponse)
+
+-- | The response's http status code.
+disassociateInstanceEventWindowResponse_httpStatus :: Lens.Lens' DisassociateInstanceEventWindowResponse Prelude.Int
+disassociateInstanceEventWindowResponse_httpStatus = Lens.lens (\DisassociateInstanceEventWindowResponse' {httpStatus} -> httpStatus) (\s@DisassociateInstanceEventWindowResponse' {} a -> s {httpStatus = a} :: DisassociateInstanceEventWindowResponse)
+
+instance
+  Prelude.NFData
+    DisassociateInstanceEventWindowResponse
+  where
+  rnf DisassociateInstanceEventWindowResponse' {..} =
+    Prelude.rnf instanceEventWindow
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateRouteTable.hs b/gen/Amazonka/EC2/DisassociateRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateRouteTable.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a subnet or gateway from a route table.
+--
+-- After you perform this action, the subnet no longer uses the routes in
+-- the route table. Instead, it uses the routes in the VPC\'s main route
+-- table. For more information about route tables, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.DisassociateRouteTable
+  ( -- * Creating a Request
+    DisassociateRouteTable (..),
+    newDisassociateRouteTable,
+
+    -- * Request Lenses
+    disassociateRouteTable_dryRun,
+    disassociateRouteTable_associationId,
+
+    -- * Destructuring the Response
+    DisassociateRouteTableResponse (..),
+    newDisassociateRouteTableResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateRouteTable' smart constructor.
+data DisassociateRouteTable = DisassociateRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The association ID representing the current association between the
+    -- route table and subnet or gateway.
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disassociateRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'associationId', 'disassociateRouteTable_associationId' - The association ID representing the current association between the
+-- route table and subnet or gateway.
+newDisassociateRouteTable ::
+  -- | 'associationId'
+  Prelude.Text ->
+  DisassociateRouteTable
+newDisassociateRouteTable pAssociationId_ =
+  DisassociateRouteTable'
+    { dryRun = Prelude.Nothing,
+      associationId = pAssociationId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateRouteTable_dryRun :: Lens.Lens' DisassociateRouteTable (Prelude.Maybe Prelude.Bool)
+disassociateRouteTable_dryRun = Lens.lens (\DisassociateRouteTable' {dryRun} -> dryRun) (\s@DisassociateRouteTable' {} a -> s {dryRun = a} :: DisassociateRouteTable)
+
+-- | The association ID representing the current association between the
+-- route table and subnet or gateway.
+disassociateRouteTable_associationId :: Lens.Lens' DisassociateRouteTable Prelude.Text
+disassociateRouteTable_associationId = Lens.lens (\DisassociateRouteTable' {associationId} -> associationId) (\s@DisassociateRouteTable' {} a -> s {associationId = a} :: DisassociateRouteTable)
+
+instance Core.AWSRequest DisassociateRouteTable where
+  type
+    AWSResponse DisassociateRouteTable =
+      DisassociateRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      DisassociateRouteTableResponse'
+
+instance Prelude.Hashable DisassociateRouteTable where
+  hashWithSalt _salt DisassociateRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` associationId
+
+instance Prelude.NFData DisassociateRouteTable where
+  rnf DisassociateRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf associationId
+
+instance Data.ToHeaders DisassociateRouteTable where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateRouteTable where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateRouteTable where
+  toQuery DisassociateRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisassociateRouteTable" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newDisassociateRouteTableResponse' smart constructor.
+data DisassociateRouteTableResponse = DisassociateRouteTableResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDisassociateRouteTableResponse ::
+  DisassociateRouteTableResponse
+newDisassociateRouteTableResponse =
+  DisassociateRouteTableResponse'
+
+instance
+  Prelude.NFData
+    DisassociateRouteTableResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/DisassociateSubnetCidrBlock.hs b/gen/Amazonka/EC2/DisassociateSubnetCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateSubnetCidrBlock.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateSubnetCidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a CIDR block from a subnet. Currently, you can
+-- disassociate an IPv6 CIDR block only. You must detach or delete all
+-- gateways and resources that are associated with the CIDR block before
+-- you can disassociate it.
+module Amazonka.EC2.DisassociateSubnetCidrBlock
+  ( -- * Creating a Request
+    DisassociateSubnetCidrBlock (..),
+    newDisassociateSubnetCidrBlock,
+
+    -- * Request Lenses
+    disassociateSubnetCidrBlock_associationId,
+
+    -- * Destructuring the Response
+    DisassociateSubnetCidrBlockResponse (..),
+    newDisassociateSubnetCidrBlockResponse,
+
+    -- * Response Lenses
+    disassociateSubnetCidrBlockResponse_ipv6CidrBlockAssociation,
+    disassociateSubnetCidrBlockResponse_subnetId,
+    disassociateSubnetCidrBlockResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateSubnetCidrBlock' smart constructor.
+data DisassociateSubnetCidrBlock = DisassociateSubnetCidrBlock'
+  { -- | The association ID for the CIDR block.
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSubnetCidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'disassociateSubnetCidrBlock_associationId' - The association ID for the CIDR block.
+newDisassociateSubnetCidrBlock ::
+  -- | 'associationId'
+  Prelude.Text ->
+  DisassociateSubnetCidrBlock
+newDisassociateSubnetCidrBlock pAssociationId_ =
+  DisassociateSubnetCidrBlock'
+    { associationId =
+        pAssociationId_
+    }
+
+-- | The association ID for the CIDR block.
+disassociateSubnetCidrBlock_associationId :: Lens.Lens' DisassociateSubnetCidrBlock Prelude.Text
+disassociateSubnetCidrBlock_associationId = Lens.lens (\DisassociateSubnetCidrBlock' {associationId} -> associationId) (\s@DisassociateSubnetCidrBlock' {} a -> s {associationId = a} :: DisassociateSubnetCidrBlock)
+
+instance Core.AWSRequest DisassociateSubnetCidrBlock where
+  type
+    AWSResponse DisassociateSubnetCidrBlock =
+      DisassociateSubnetCidrBlockResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateSubnetCidrBlockResponse'
+            Prelude.<$> (x Data..@? "ipv6CidrBlockAssociation")
+            Prelude.<*> (x Data..@? "subnetId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateSubnetCidrBlock where
+  hashWithSalt _salt DisassociateSubnetCidrBlock' {..} =
+    _salt `Prelude.hashWithSalt` associationId
+
+instance Prelude.NFData DisassociateSubnetCidrBlock where
+  rnf DisassociateSubnetCidrBlock' {..} =
+    Prelude.rnf associationId
+
+instance Data.ToHeaders DisassociateSubnetCidrBlock where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateSubnetCidrBlock where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateSubnetCidrBlock where
+  toQuery DisassociateSubnetCidrBlock' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateSubnetCidrBlock" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newDisassociateSubnetCidrBlockResponse' smart constructor.
+data DisassociateSubnetCidrBlockResponse = DisassociateSubnetCidrBlockResponse'
+  { -- | Information about the IPv6 CIDR block association.
+    ipv6CidrBlockAssociation :: Prelude.Maybe SubnetIpv6CidrBlockAssociation,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateSubnetCidrBlockResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6CidrBlockAssociation', 'disassociateSubnetCidrBlockResponse_ipv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
+--
+-- 'subnetId', 'disassociateSubnetCidrBlockResponse_subnetId' - The ID of the subnet.
+--
+-- 'httpStatus', 'disassociateSubnetCidrBlockResponse_httpStatus' - The response's http status code.
+newDisassociateSubnetCidrBlockResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateSubnetCidrBlockResponse
+newDisassociateSubnetCidrBlockResponse pHttpStatus_ =
+  DisassociateSubnetCidrBlockResponse'
+    { ipv6CidrBlockAssociation =
+        Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPv6 CIDR block association.
+disassociateSubnetCidrBlockResponse_ipv6CidrBlockAssociation :: Lens.Lens' DisassociateSubnetCidrBlockResponse (Prelude.Maybe SubnetIpv6CidrBlockAssociation)
+disassociateSubnetCidrBlockResponse_ipv6CidrBlockAssociation = Lens.lens (\DisassociateSubnetCidrBlockResponse' {ipv6CidrBlockAssociation} -> ipv6CidrBlockAssociation) (\s@DisassociateSubnetCidrBlockResponse' {} a -> s {ipv6CidrBlockAssociation = a} :: DisassociateSubnetCidrBlockResponse)
+
+-- | The ID of the subnet.
+disassociateSubnetCidrBlockResponse_subnetId :: Lens.Lens' DisassociateSubnetCidrBlockResponse (Prelude.Maybe Prelude.Text)
+disassociateSubnetCidrBlockResponse_subnetId = Lens.lens (\DisassociateSubnetCidrBlockResponse' {subnetId} -> subnetId) (\s@DisassociateSubnetCidrBlockResponse' {} a -> s {subnetId = a} :: DisassociateSubnetCidrBlockResponse)
+
+-- | The response's http status code.
+disassociateSubnetCidrBlockResponse_httpStatus :: Lens.Lens' DisassociateSubnetCidrBlockResponse Prelude.Int
+disassociateSubnetCidrBlockResponse_httpStatus = Lens.lens (\DisassociateSubnetCidrBlockResponse' {httpStatus} -> httpStatus) (\s@DisassociateSubnetCidrBlockResponse' {} a -> s {httpStatus = a} :: DisassociateSubnetCidrBlockResponse)
+
+instance
+  Prelude.NFData
+    DisassociateSubnetCidrBlockResponse
+  where
+  rnf DisassociateSubnetCidrBlockResponse' {..} =
+    Prelude.rnf ipv6CidrBlockAssociation
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateTransitGatewayMulticastDomain.hs b/gen/Amazonka/EC2/DisassociateTransitGatewayMulticastDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateTransitGatewayMulticastDomain.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateTransitGatewayMulticastDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified subnets from the transit gateway multicast
+-- domain.
+module Amazonka.EC2.DisassociateTransitGatewayMulticastDomain
+  ( -- * Creating a Request
+    DisassociateTransitGatewayMulticastDomain (..),
+    newDisassociateTransitGatewayMulticastDomain,
+
+    -- * Request Lenses
+    disassociateTransitGatewayMulticastDomain_dryRun,
+    disassociateTransitGatewayMulticastDomain_subnetIds,
+    disassociateTransitGatewayMulticastDomain_transitGatewayAttachmentId,
+    disassociateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    DisassociateTransitGatewayMulticastDomainResponse (..),
+    newDisassociateTransitGatewayMulticastDomainResponse,
+
+    -- * Response Lenses
+    disassociateTransitGatewayMulticastDomainResponse_associations,
+    disassociateTransitGatewayMulticastDomainResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateTransitGatewayMulticastDomain' smart constructor.
+data DisassociateTransitGatewayMulticastDomain = DisassociateTransitGatewayMulticastDomain'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the subnets;
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTransitGatewayMulticastDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disassociateTransitGatewayMulticastDomain_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'subnetIds', 'disassociateTransitGatewayMulticastDomain_subnetIds' - The IDs of the subnets;
+--
+-- 'transitGatewayAttachmentId', 'disassociateTransitGatewayMulticastDomain_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayMulticastDomainId', 'disassociateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newDisassociateTransitGatewayMulticastDomain ::
+  DisassociateTransitGatewayMulticastDomain
+newDisassociateTransitGatewayMulticastDomain =
+  DisassociateTransitGatewayMulticastDomain'
+    { dryRun =
+        Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateTransitGatewayMulticastDomain_dryRun :: Lens.Lens' DisassociateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Bool)
+disassociateTransitGatewayMulticastDomain_dryRun = Lens.lens (\DisassociateTransitGatewayMulticastDomain' {dryRun} -> dryRun) (\s@DisassociateTransitGatewayMulticastDomain' {} a -> s {dryRun = a} :: DisassociateTransitGatewayMulticastDomain)
+
+-- | The IDs of the subnets;
+disassociateTransitGatewayMulticastDomain_subnetIds :: Lens.Lens' DisassociateTransitGatewayMulticastDomain (Prelude.Maybe [Prelude.Text])
+disassociateTransitGatewayMulticastDomain_subnetIds = Lens.lens (\DisassociateTransitGatewayMulticastDomain' {subnetIds} -> subnetIds) (\s@DisassociateTransitGatewayMulticastDomain' {} a -> s {subnetIds = a} :: DisassociateTransitGatewayMulticastDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the attachment.
+disassociateTransitGatewayMulticastDomain_transitGatewayAttachmentId :: Lens.Lens' DisassociateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+disassociateTransitGatewayMulticastDomain_transitGatewayAttachmentId = Lens.lens (\DisassociateTransitGatewayMulticastDomain' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DisassociateTransitGatewayMulticastDomain' {} a -> s {transitGatewayAttachmentId = a} :: DisassociateTransitGatewayMulticastDomain)
+
+-- | The ID of the transit gateway multicast domain.
+disassociateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId :: Lens.Lens' DisassociateTransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+disassociateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId = Lens.lens (\DisassociateTransitGatewayMulticastDomain' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@DisassociateTransitGatewayMulticastDomain' {} a -> s {transitGatewayMulticastDomainId = a} :: DisassociateTransitGatewayMulticastDomain)
+
+instance
+  Core.AWSRequest
+    DisassociateTransitGatewayMulticastDomain
+  where
+  type
+    AWSResponse
+      DisassociateTransitGatewayMulticastDomain =
+      DisassociateTransitGatewayMulticastDomainResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateTransitGatewayMulticastDomainResponse'
+            Prelude.<$> (x Data..@? "associations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateTransitGatewayMulticastDomain
+  where
+  hashWithSalt
+    _salt
+    DisassociateTransitGatewayMulticastDomain' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` subnetIds
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    DisassociateTransitGatewayMulticastDomain
+  where
+  rnf DisassociateTransitGatewayMulticastDomain' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    DisassociateTransitGatewayMulticastDomain
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateTransitGatewayMulticastDomain
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateTransitGatewayMulticastDomain
+  where
+  toQuery
+    DisassociateTransitGatewayMulticastDomain' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "DisassociateTransitGatewayMulticastDomain" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "SubnetIds" Prelude.<$> subnetIds),
+          "TransitGatewayAttachmentId"
+            Data.=: transitGatewayAttachmentId,
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newDisassociateTransitGatewayMulticastDomainResponse' smart constructor.
+data DisassociateTransitGatewayMulticastDomainResponse = DisassociateTransitGatewayMulticastDomainResponse'
+  { -- | Information about the association.
+    associations :: Prelude.Maybe TransitGatewayMulticastDomainAssociations,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTransitGatewayMulticastDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'disassociateTransitGatewayMulticastDomainResponse_associations' - Information about the association.
+--
+-- 'httpStatus', 'disassociateTransitGatewayMulticastDomainResponse_httpStatus' - The response's http status code.
+newDisassociateTransitGatewayMulticastDomainResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateTransitGatewayMulticastDomainResponse
+newDisassociateTransitGatewayMulticastDomainResponse
+  pHttpStatus_ =
+    DisassociateTransitGatewayMulticastDomainResponse'
+      { associations =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the association.
+disassociateTransitGatewayMulticastDomainResponse_associations :: Lens.Lens' DisassociateTransitGatewayMulticastDomainResponse (Prelude.Maybe TransitGatewayMulticastDomainAssociations)
+disassociateTransitGatewayMulticastDomainResponse_associations = Lens.lens (\DisassociateTransitGatewayMulticastDomainResponse' {associations} -> associations) (\s@DisassociateTransitGatewayMulticastDomainResponse' {} a -> s {associations = a} :: DisassociateTransitGatewayMulticastDomainResponse)
+
+-- | The response's http status code.
+disassociateTransitGatewayMulticastDomainResponse_httpStatus :: Lens.Lens' DisassociateTransitGatewayMulticastDomainResponse Prelude.Int
+disassociateTransitGatewayMulticastDomainResponse_httpStatus = Lens.lens (\DisassociateTransitGatewayMulticastDomainResponse' {httpStatus} -> httpStatus) (\s@DisassociateTransitGatewayMulticastDomainResponse' {} a -> s {httpStatus = a} :: DisassociateTransitGatewayMulticastDomainResponse)
+
+instance
+  Prelude.NFData
+    DisassociateTransitGatewayMulticastDomainResponse
+  where
+  rnf
+    DisassociateTransitGatewayMulticastDomainResponse' {..} =
+      Prelude.rnf associations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateTransitGatewayPolicyTable.hs b/gen/Amazonka/EC2/DisassociateTransitGatewayPolicyTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateTransitGatewayPolicyTable.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateTransitGatewayPolicyTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the association between an an attachment and a policy table.
+module Amazonka.EC2.DisassociateTransitGatewayPolicyTable
+  ( -- * Creating a Request
+    DisassociateTransitGatewayPolicyTable (..),
+    newDisassociateTransitGatewayPolicyTable,
+
+    -- * Request Lenses
+    disassociateTransitGatewayPolicyTable_dryRun,
+    disassociateTransitGatewayPolicyTable_transitGatewayPolicyTableId,
+    disassociateTransitGatewayPolicyTable_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    DisassociateTransitGatewayPolicyTableResponse (..),
+    newDisassociateTransitGatewayPolicyTableResponse,
+
+    -- * Response Lenses
+    disassociateTransitGatewayPolicyTableResponse_association,
+    disassociateTransitGatewayPolicyTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateTransitGatewayPolicyTable' smart constructor.
+data DisassociateTransitGatewayPolicyTable = DisassociateTransitGatewayPolicyTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the disassociated policy table.
+    transitGatewayPolicyTableId :: Prelude.Text,
+    -- | The ID of the transit gateway attachment to disassociate from the policy
+    -- table.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTransitGatewayPolicyTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disassociateTransitGatewayPolicyTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayPolicyTableId', 'disassociateTransitGatewayPolicyTable_transitGatewayPolicyTableId' - The ID of the disassociated policy table.
+--
+-- 'transitGatewayAttachmentId', 'disassociateTransitGatewayPolicyTable_transitGatewayAttachmentId' - The ID of the transit gateway attachment to disassociate from the policy
+-- table.
+newDisassociateTransitGatewayPolicyTable ::
+  -- | 'transitGatewayPolicyTableId'
+  Prelude.Text ->
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  DisassociateTransitGatewayPolicyTable
+newDisassociateTransitGatewayPolicyTable
+  pTransitGatewayPolicyTableId_
+  pTransitGatewayAttachmentId_ =
+    DisassociateTransitGatewayPolicyTable'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayPolicyTableId =
+          pTransitGatewayPolicyTableId_,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateTransitGatewayPolicyTable_dryRun :: Lens.Lens' DisassociateTransitGatewayPolicyTable (Prelude.Maybe Prelude.Bool)
+disassociateTransitGatewayPolicyTable_dryRun = Lens.lens (\DisassociateTransitGatewayPolicyTable' {dryRun} -> dryRun) (\s@DisassociateTransitGatewayPolicyTable' {} a -> s {dryRun = a} :: DisassociateTransitGatewayPolicyTable)
+
+-- | The ID of the disassociated policy table.
+disassociateTransitGatewayPolicyTable_transitGatewayPolicyTableId :: Lens.Lens' DisassociateTransitGatewayPolicyTable Prelude.Text
+disassociateTransitGatewayPolicyTable_transitGatewayPolicyTableId = Lens.lens (\DisassociateTransitGatewayPolicyTable' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@DisassociateTransitGatewayPolicyTable' {} a -> s {transitGatewayPolicyTableId = a} :: DisassociateTransitGatewayPolicyTable)
+
+-- | The ID of the transit gateway attachment to disassociate from the policy
+-- table.
+disassociateTransitGatewayPolicyTable_transitGatewayAttachmentId :: Lens.Lens' DisassociateTransitGatewayPolicyTable Prelude.Text
+disassociateTransitGatewayPolicyTable_transitGatewayAttachmentId = Lens.lens (\DisassociateTransitGatewayPolicyTable' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DisassociateTransitGatewayPolicyTable' {} a -> s {transitGatewayAttachmentId = a} :: DisassociateTransitGatewayPolicyTable)
+
+instance
+  Core.AWSRequest
+    DisassociateTransitGatewayPolicyTable
+  where
+  type
+    AWSResponse
+      DisassociateTransitGatewayPolicyTable =
+      DisassociateTransitGatewayPolicyTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateTransitGatewayPolicyTableResponse'
+            Prelude.<$> (x Data..@? "association")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateTransitGatewayPolicyTable
+  where
+  hashWithSalt
+    _salt
+    DisassociateTransitGatewayPolicyTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayPolicyTableId
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    DisassociateTransitGatewayPolicyTable
+  where
+  rnf DisassociateTransitGatewayPolicyTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    DisassociateTransitGatewayPolicyTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateTransitGatewayPolicyTable
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateTransitGatewayPolicyTable
+  where
+  toQuery DisassociateTransitGatewayPolicyTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateTransitGatewayPolicyTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayPolicyTableId"
+          Data.=: transitGatewayPolicyTableId,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newDisassociateTransitGatewayPolicyTableResponse' smart constructor.
+data DisassociateTransitGatewayPolicyTableResponse = DisassociateTransitGatewayPolicyTableResponse'
+  { -- | Returns details about the transit gateway policy table disassociation.
+    association :: Prelude.Maybe TransitGatewayPolicyTableAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTransitGatewayPolicyTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'disassociateTransitGatewayPolicyTableResponse_association' - Returns details about the transit gateway policy table disassociation.
+--
+-- 'httpStatus', 'disassociateTransitGatewayPolicyTableResponse_httpStatus' - The response's http status code.
+newDisassociateTransitGatewayPolicyTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateTransitGatewayPolicyTableResponse
+newDisassociateTransitGatewayPolicyTableResponse
+  pHttpStatus_ =
+    DisassociateTransitGatewayPolicyTableResponse'
+      { association =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns details about the transit gateway policy table disassociation.
+disassociateTransitGatewayPolicyTableResponse_association :: Lens.Lens' DisassociateTransitGatewayPolicyTableResponse (Prelude.Maybe TransitGatewayPolicyTableAssociation)
+disassociateTransitGatewayPolicyTableResponse_association = Lens.lens (\DisassociateTransitGatewayPolicyTableResponse' {association} -> association) (\s@DisassociateTransitGatewayPolicyTableResponse' {} a -> s {association = a} :: DisassociateTransitGatewayPolicyTableResponse)
+
+-- | The response's http status code.
+disassociateTransitGatewayPolicyTableResponse_httpStatus :: Lens.Lens' DisassociateTransitGatewayPolicyTableResponse Prelude.Int
+disassociateTransitGatewayPolicyTableResponse_httpStatus = Lens.lens (\DisassociateTransitGatewayPolicyTableResponse' {httpStatus} -> httpStatus) (\s@DisassociateTransitGatewayPolicyTableResponse' {} a -> s {httpStatus = a} :: DisassociateTransitGatewayPolicyTableResponse)
+
+instance
+  Prelude.NFData
+    DisassociateTransitGatewayPolicyTableResponse
+  where
+  rnf
+    DisassociateTransitGatewayPolicyTableResponse' {..} =
+      Prelude.rnf association
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateTransitGatewayRouteTable.hs b/gen/Amazonka/EC2/DisassociateTransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateTransitGatewayRouteTable.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateTransitGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a resource attachment from a transit gateway route table.
+module Amazonka.EC2.DisassociateTransitGatewayRouteTable
+  ( -- * Creating a Request
+    DisassociateTransitGatewayRouteTable (..),
+    newDisassociateTransitGatewayRouteTable,
+
+    -- * Request Lenses
+    disassociateTransitGatewayRouteTable_dryRun,
+    disassociateTransitGatewayRouteTable_transitGatewayRouteTableId,
+    disassociateTransitGatewayRouteTable_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    DisassociateTransitGatewayRouteTableResponse (..),
+    newDisassociateTransitGatewayRouteTableResponse,
+
+    -- * Response Lenses
+    disassociateTransitGatewayRouteTableResponse_association,
+    disassociateTransitGatewayRouteTableResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateTransitGatewayRouteTable' smart constructor.
+data DisassociateTransitGatewayRouteTable = DisassociateTransitGatewayRouteTable'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTransitGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'disassociateTransitGatewayRouteTable_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayRouteTableId', 'disassociateTransitGatewayRouteTable_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'transitGatewayAttachmentId', 'disassociateTransitGatewayRouteTable_transitGatewayAttachmentId' - The ID of the attachment.
+newDisassociateTransitGatewayRouteTable ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  DisassociateTransitGatewayRouteTable
+newDisassociateTransitGatewayRouteTable
+  pTransitGatewayRouteTableId_
+  pTransitGatewayAttachmentId_ =
+    DisassociateTransitGatewayRouteTable'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateTransitGatewayRouteTable_dryRun :: Lens.Lens' DisassociateTransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+disassociateTransitGatewayRouteTable_dryRun = Lens.lens (\DisassociateTransitGatewayRouteTable' {dryRun} -> dryRun) (\s@DisassociateTransitGatewayRouteTable' {} a -> s {dryRun = a} :: DisassociateTransitGatewayRouteTable)
+
+-- | The ID of the transit gateway route table.
+disassociateTransitGatewayRouteTable_transitGatewayRouteTableId :: Lens.Lens' DisassociateTransitGatewayRouteTable Prelude.Text
+disassociateTransitGatewayRouteTable_transitGatewayRouteTableId = Lens.lens (\DisassociateTransitGatewayRouteTable' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@DisassociateTransitGatewayRouteTable' {} a -> s {transitGatewayRouteTableId = a} :: DisassociateTransitGatewayRouteTable)
+
+-- | The ID of the attachment.
+disassociateTransitGatewayRouteTable_transitGatewayAttachmentId :: Lens.Lens' DisassociateTransitGatewayRouteTable Prelude.Text
+disassociateTransitGatewayRouteTable_transitGatewayAttachmentId = Lens.lens (\DisassociateTransitGatewayRouteTable' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@DisassociateTransitGatewayRouteTable' {} a -> s {transitGatewayAttachmentId = a} :: DisassociateTransitGatewayRouteTable)
+
+instance
+  Core.AWSRequest
+    DisassociateTransitGatewayRouteTable
+  where
+  type
+    AWSResponse DisassociateTransitGatewayRouteTable =
+      DisassociateTransitGatewayRouteTableResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateTransitGatewayRouteTableResponse'
+            Prelude.<$> (x Data..@? "association")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateTransitGatewayRouteTable
+  where
+  hashWithSalt
+    _salt
+    DisassociateTransitGatewayRouteTable' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    DisassociateTransitGatewayRouteTable
+  where
+  rnf DisassociateTransitGatewayRouteTable' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    DisassociateTransitGatewayRouteTable
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    DisassociateTransitGatewayRouteTable
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateTransitGatewayRouteTable
+  where
+  toQuery DisassociateTransitGatewayRouteTable' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "DisassociateTransitGatewayRouteTable" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newDisassociateTransitGatewayRouteTableResponse' smart constructor.
+data DisassociateTransitGatewayRouteTableResponse = DisassociateTransitGatewayRouteTableResponse'
+  { -- | Information about the association.
+    association :: Prelude.Maybe TransitGatewayAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTransitGatewayRouteTableResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'disassociateTransitGatewayRouteTableResponse_association' - Information about the association.
+--
+-- 'httpStatus', 'disassociateTransitGatewayRouteTableResponse_httpStatus' - The response's http status code.
+newDisassociateTransitGatewayRouteTableResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateTransitGatewayRouteTableResponse
+newDisassociateTransitGatewayRouteTableResponse
+  pHttpStatus_ =
+    DisassociateTransitGatewayRouteTableResponse'
+      { association =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the association.
+disassociateTransitGatewayRouteTableResponse_association :: Lens.Lens' DisassociateTransitGatewayRouteTableResponse (Prelude.Maybe TransitGatewayAssociation)
+disassociateTransitGatewayRouteTableResponse_association = Lens.lens (\DisassociateTransitGatewayRouteTableResponse' {association} -> association) (\s@DisassociateTransitGatewayRouteTableResponse' {} a -> s {association = a} :: DisassociateTransitGatewayRouteTableResponse)
+
+-- | The response's http status code.
+disassociateTransitGatewayRouteTableResponse_httpStatus :: Lens.Lens' DisassociateTransitGatewayRouteTableResponse Prelude.Int
+disassociateTransitGatewayRouteTableResponse_httpStatus = Lens.lens (\DisassociateTransitGatewayRouteTableResponse' {httpStatus} -> httpStatus) (\s@DisassociateTransitGatewayRouteTableResponse' {} a -> s {httpStatus = a} :: DisassociateTransitGatewayRouteTableResponse)
+
+instance
+  Prelude.NFData
+    DisassociateTransitGatewayRouteTableResponse
+  where
+  rnf DisassociateTransitGatewayRouteTableResponse' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateTrunkInterface.hs b/gen/Amazonka/EC2/DisassociateTrunkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateTrunkInterface.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateTrunkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This API action is currently in __limited preview only__. If you are
+-- interested in using this feature, contact your account manager.
+--
+-- Removes an association between a branch network interface with a trunk
+-- network interface.
+module Amazonka.EC2.DisassociateTrunkInterface
+  ( -- * Creating a Request
+    DisassociateTrunkInterface (..),
+    newDisassociateTrunkInterface,
+
+    -- * Request Lenses
+    disassociateTrunkInterface_clientToken,
+    disassociateTrunkInterface_dryRun,
+    disassociateTrunkInterface_associationId,
+
+    -- * Destructuring the Response
+    DisassociateTrunkInterfaceResponse (..),
+    newDisassociateTrunkInterfaceResponse,
+
+    -- * Response Lenses
+    disassociateTrunkInterfaceResponse_clientToken,
+    disassociateTrunkInterfaceResponse_return,
+    disassociateTrunkInterfaceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateTrunkInterface' smart constructor.
+data DisassociateTrunkInterface = DisassociateTrunkInterface'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the association
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTrunkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'disassociateTrunkInterface_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+--
+-- 'dryRun', 'disassociateTrunkInterface_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'associationId', 'disassociateTrunkInterface_associationId' - The ID of the association
+newDisassociateTrunkInterface ::
+  -- | 'associationId'
+  Prelude.Text ->
+  DisassociateTrunkInterface
+newDisassociateTrunkInterface pAssociationId_ =
+  DisassociateTrunkInterface'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      associationId = pAssociationId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+disassociateTrunkInterface_clientToken :: Lens.Lens' DisassociateTrunkInterface (Prelude.Maybe Prelude.Text)
+disassociateTrunkInterface_clientToken = Lens.lens (\DisassociateTrunkInterface' {clientToken} -> clientToken) (\s@DisassociateTrunkInterface' {} a -> s {clientToken = a} :: DisassociateTrunkInterface)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+disassociateTrunkInterface_dryRun :: Lens.Lens' DisassociateTrunkInterface (Prelude.Maybe Prelude.Bool)
+disassociateTrunkInterface_dryRun = Lens.lens (\DisassociateTrunkInterface' {dryRun} -> dryRun) (\s@DisassociateTrunkInterface' {} a -> s {dryRun = a} :: DisassociateTrunkInterface)
+
+-- | The ID of the association
+disassociateTrunkInterface_associationId :: Lens.Lens' DisassociateTrunkInterface Prelude.Text
+disassociateTrunkInterface_associationId = Lens.lens (\DisassociateTrunkInterface' {associationId} -> associationId) (\s@DisassociateTrunkInterface' {} a -> s {associationId = a} :: DisassociateTrunkInterface)
+
+instance Core.AWSRequest DisassociateTrunkInterface where
+  type
+    AWSResponse DisassociateTrunkInterface =
+      DisassociateTrunkInterfaceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateTrunkInterfaceResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateTrunkInterface where
+  hashWithSalt _salt DisassociateTrunkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` associationId
+
+instance Prelude.NFData DisassociateTrunkInterface where
+  rnf DisassociateTrunkInterface' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf associationId
+
+instance Data.ToHeaders DisassociateTrunkInterface where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateTrunkInterface where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateTrunkInterface where
+  toQuery DisassociateTrunkInterface' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisassociateTrunkInterface" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newDisassociateTrunkInterfaceResponse' smart constructor.
+data DisassociateTrunkInterfaceResponse = DisassociateTrunkInterfaceResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateTrunkInterfaceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'disassociateTrunkInterfaceResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+--
+-- 'return'', 'disassociateTrunkInterfaceResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'disassociateTrunkInterfaceResponse_httpStatus' - The response's http status code.
+newDisassociateTrunkInterfaceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateTrunkInterfaceResponse
+newDisassociateTrunkInterfaceResponse pHttpStatus_ =
+  DisassociateTrunkInterfaceResponse'
+    { clientToken =
+        Prelude.Nothing,
+      return' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>.
+disassociateTrunkInterfaceResponse_clientToken :: Lens.Lens' DisassociateTrunkInterfaceResponse (Prelude.Maybe Prelude.Text)
+disassociateTrunkInterfaceResponse_clientToken = Lens.lens (\DisassociateTrunkInterfaceResponse' {clientToken} -> clientToken) (\s@DisassociateTrunkInterfaceResponse' {} a -> s {clientToken = a} :: DisassociateTrunkInterfaceResponse)
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+disassociateTrunkInterfaceResponse_return :: Lens.Lens' DisassociateTrunkInterfaceResponse (Prelude.Maybe Prelude.Bool)
+disassociateTrunkInterfaceResponse_return = Lens.lens (\DisassociateTrunkInterfaceResponse' {return'} -> return') (\s@DisassociateTrunkInterfaceResponse' {} a -> s {return' = a} :: DisassociateTrunkInterfaceResponse)
+
+-- | The response's http status code.
+disassociateTrunkInterfaceResponse_httpStatus :: Lens.Lens' DisassociateTrunkInterfaceResponse Prelude.Int
+disassociateTrunkInterfaceResponse_httpStatus = Lens.lens (\DisassociateTrunkInterfaceResponse' {httpStatus} -> httpStatus) (\s@DisassociateTrunkInterfaceResponse' {} a -> s {httpStatus = a} :: DisassociateTrunkInterfaceResponse)
+
+instance
+  Prelude.NFData
+    DisassociateTrunkInterfaceResponse
+  where
+  rnf DisassociateTrunkInterfaceResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/DisassociateVpcCidrBlock.hs b/gen/Amazonka/EC2/DisassociateVpcCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/DisassociateVpcCidrBlock.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.DisassociateVpcCidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates a CIDR block from a VPC. To disassociate the CIDR block,
+-- you must specify its association ID. You can get the association ID by
+-- using DescribeVpcs. You must detach or delete all gateways and resources
+-- that are associated with the CIDR block before you can disassociate it.
+--
+-- You cannot disassociate the CIDR block with which you originally created
+-- the VPC (the primary CIDR block).
+module Amazonka.EC2.DisassociateVpcCidrBlock
+  ( -- * Creating a Request
+    DisassociateVpcCidrBlock (..),
+    newDisassociateVpcCidrBlock,
+
+    -- * Request Lenses
+    disassociateVpcCidrBlock_associationId,
+
+    -- * Destructuring the Response
+    DisassociateVpcCidrBlockResponse (..),
+    newDisassociateVpcCidrBlockResponse,
+
+    -- * Response Lenses
+    disassociateVpcCidrBlockResponse_cidrBlockAssociation,
+    disassociateVpcCidrBlockResponse_ipv6CidrBlockAssociation,
+    disassociateVpcCidrBlockResponse_vpcId,
+    disassociateVpcCidrBlockResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateVpcCidrBlock' smart constructor.
+data DisassociateVpcCidrBlock = DisassociateVpcCidrBlock'
+  { -- | The association ID for the CIDR block.
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateVpcCidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'disassociateVpcCidrBlock_associationId' - The association ID for the CIDR block.
+newDisassociateVpcCidrBlock ::
+  -- | 'associationId'
+  Prelude.Text ->
+  DisassociateVpcCidrBlock
+newDisassociateVpcCidrBlock pAssociationId_ =
+  DisassociateVpcCidrBlock'
+    { associationId =
+        pAssociationId_
+    }
+
+-- | The association ID for the CIDR block.
+disassociateVpcCidrBlock_associationId :: Lens.Lens' DisassociateVpcCidrBlock Prelude.Text
+disassociateVpcCidrBlock_associationId = Lens.lens (\DisassociateVpcCidrBlock' {associationId} -> associationId) (\s@DisassociateVpcCidrBlock' {} a -> s {associationId = a} :: DisassociateVpcCidrBlock)
+
+instance Core.AWSRequest DisassociateVpcCidrBlock where
+  type
+    AWSResponse DisassociateVpcCidrBlock =
+      DisassociateVpcCidrBlockResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          DisassociateVpcCidrBlockResponse'
+            Prelude.<$> (x Data..@? "cidrBlockAssociation")
+            Prelude.<*> (x Data..@? "ipv6CidrBlockAssociation")
+            Prelude.<*> (x Data..@? "vpcId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateVpcCidrBlock where
+  hashWithSalt _salt DisassociateVpcCidrBlock' {..} =
+    _salt `Prelude.hashWithSalt` associationId
+
+instance Prelude.NFData DisassociateVpcCidrBlock where
+  rnf DisassociateVpcCidrBlock' {..} =
+    Prelude.rnf associationId
+
+instance Data.ToHeaders DisassociateVpcCidrBlock where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DisassociateVpcCidrBlock where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateVpcCidrBlock where
+  toQuery DisassociateVpcCidrBlock' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DisassociateVpcCidrBlock" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newDisassociateVpcCidrBlockResponse' smart constructor.
+data DisassociateVpcCidrBlockResponse = DisassociateVpcCidrBlockResponse'
+  { -- | Information about the IPv4 CIDR block association.
+    cidrBlockAssociation :: Prelude.Maybe VpcCidrBlockAssociation,
+    -- | Information about the IPv6 CIDR block association.
+    ipv6CidrBlockAssociation :: Prelude.Maybe VpcIpv6CidrBlockAssociation,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateVpcCidrBlockResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlockAssociation', 'disassociateVpcCidrBlockResponse_cidrBlockAssociation' - Information about the IPv4 CIDR block association.
+--
+-- 'ipv6CidrBlockAssociation', 'disassociateVpcCidrBlockResponse_ipv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
+--
+-- 'vpcId', 'disassociateVpcCidrBlockResponse_vpcId' - The ID of the VPC.
+--
+-- 'httpStatus', 'disassociateVpcCidrBlockResponse_httpStatus' - The response's http status code.
+newDisassociateVpcCidrBlockResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateVpcCidrBlockResponse
+newDisassociateVpcCidrBlockResponse pHttpStatus_ =
+  DisassociateVpcCidrBlockResponse'
+    { cidrBlockAssociation =
+        Prelude.Nothing,
+      ipv6CidrBlockAssociation =
+        Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPv4 CIDR block association.
+disassociateVpcCidrBlockResponse_cidrBlockAssociation :: Lens.Lens' DisassociateVpcCidrBlockResponse (Prelude.Maybe VpcCidrBlockAssociation)
+disassociateVpcCidrBlockResponse_cidrBlockAssociation = Lens.lens (\DisassociateVpcCidrBlockResponse' {cidrBlockAssociation} -> cidrBlockAssociation) (\s@DisassociateVpcCidrBlockResponse' {} a -> s {cidrBlockAssociation = a} :: DisassociateVpcCidrBlockResponse)
+
+-- | Information about the IPv6 CIDR block association.
+disassociateVpcCidrBlockResponse_ipv6CidrBlockAssociation :: Lens.Lens' DisassociateVpcCidrBlockResponse (Prelude.Maybe VpcIpv6CidrBlockAssociation)
+disassociateVpcCidrBlockResponse_ipv6CidrBlockAssociation = Lens.lens (\DisassociateVpcCidrBlockResponse' {ipv6CidrBlockAssociation} -> ipv6CidrBlockAssociation) (\s@DisassociateVpcCidrBlockResponse' {} a -> s {ipv6CidrBlockAssociation = a} :: DisassociateVpcCidrBlockResponse)
+
+-- | The ID of the VPC.
+disassociateVpcCidrBlockResponse_vpcId :: Lens.Lens' DisassociateVpcCidrBlockResponse (Prelude.Maybe Prelude.Text)
+disassociateVpcCidrBlockResponse_vpcId = Lens.lens (\DisassociateVpcCidrBlockResponse' {vpcId} -> vpcId) (\s@DisassociateVpcCidrBlockResponse' {} a -> s {vpcId = a} :: DisassociateVpcCidrBlockResponse)
+
+-- | The response's http status code.
+disassociateVpcCidrBlockResponse_httpStatus :: Lens.Lens' DisassociateVpcCidrBlockResponse Prelude.Int
+disassociateVpcCidrBlockResponse_httpStatus = Lens.lens (\DisassociateVpcCidrBlockResponse' {httpStatus} -> httpStatus) (\s@DisassociateVpcCidrBlockResponse' {} a -> s {httpStatus = a} :: DisassociateVpcCidrBlockResponse)
+
+instance
+  Prelude.NFData
+    DisassociateVpcCidrBlockResponse
+  where
+  rnf DisassociateVpcCidrBlockResponse' {..} =
+    Prelude.rnf cidrBlockAssociation
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockAssociation
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableAddressTransfer.hs b/gen/Amazonka/EC2/EnableAddressTransfer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableAddressTransfer.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableAddressTransfer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables Elastic IP address transfer. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro Transfer Elastic IP addresses>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.EnableAddressTransfer
+  ( -- * Creating a Request
+    EnableAddressTransfer (..),
+    newEnableAddressTransfer,
+
+    -- * Request Lenses
+    enableAddressTransfer_dryRun,
+    enableAddressTransfer_allocationId,
+    enableAddressTransfer_transferAccountId,
+
+    -- * Destructuring the Response
+    EnableAddressTransferResponse (..),
+    newEnableAddressTransferResponse,
+
+    -- * Response Lenses
+    enableAddressTransferResponse_addressTransfer,
+    enableAddressTransferResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableAddressTransfer' smart constructor.
+data EnableAddressTransfer = EnableAddressTransfer'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The allocation ID of an Elastic IP address.
+    allocationId :: Prelude.Text,
+    -- | The ID of the account that you want to transfer the Elastic IP address
+    -- to.
+    transferAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableAddressTransfer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableAddressTransfer_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'allocationId', 'enableAddressTransfer_allocationId' - The allocation ID of an Elastic IP address.
+--
+-- 'transferAccountId', 'enableAddressTransfer_transferAccountId' - The ID of the account that you want to transfer the Elastic IP address
+-- to.
+newEnableAddressTransfer ::
+  -- | 'allocationId'
+  Prelude.Text ->
+  -- | 'transferAccountId'
+  Prelude.Text ->
+  EnableAddressTransfer
+newEnableAddressTransfer
+  pAllocationId_
+  pTransferAccountId_ =
+    EnableAddressTransfer'
+      { dryRun = Prelude.Nothing,
+        allocationId = pAllocationId_,
+        transferAccountId = pTransferAccountId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableAddressTransfer_dryRun :: Lens.Lens' EnableAddressTransfer (Prelude.Maybe Prelude.Bool)
+enableAddressTransfer_dryRun = Lens.lens (\EnableAddressTransfer' {dryRun} -> dryRun) (\s@EnableAddressTransfer' {} a -> s {dryRun = a} :: EnableAddressTransfer)
+
+-- | The allocation ID of an Elastic IP address.
+enableAddressTransfer_allocationId :: Lens.Lens' EnableAddressTransfer Prelude.Text
+enableAddressTransfer_allocationId = Lens.lens (\EnableAddressTransfer' {allocationId} -> allocationId) (\s@EnableAddressTransfer' {} a -> s {allocationId = a} :: EnableAddressTransfer)
+
+-- | The ID of the account that you want to transfer the Elastic IP address
+-- to.
+enableAddressTransfer_transferAccountId :: Lens.Lens' EnableAddressTransfer Prelude.Text
+enableAddressTransfer_transferAccountId = Lens.lens (\EnableAddressTransfer' {transferAccountId} -> transferAccountId) (\s@EnableAddressTransfer' {} a -> s {transferAccountId = a} :: EnableAddressTransfer)
+
+instance Core.AWSRequest EnableAddressTransfer where
+  type
+    AWSResponse EnableAddressTransfer =
+      EnableAddressTransferResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableAddressTransferResponse'
+            Prelude.<$> (x Data..@? "addressTransfer")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableAddressTransfer where
+  hashWithSalt _salt EnableAddressTransfer' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` transferAccountId
+
+instance Prelude.NFData EnableAddressTransfer where
+  rnf EnableAddressTransfer' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf transferAccountId
+
+instance Data.ToHeaders EnableAddressTransfer where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableAddressTransfer where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableAddressTransfer where
+  toQuery EnableAddressTransfer' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableAddressTransfer" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "AllocationId" Data.=: allocationId,
+        "TransferAccountId" Data.=: transferAccountId
+      ]
+
+-- | /See:/ 'newEnableAddressTransferResponse' smart constructor.
+data EnableAddressTransferResponse = EnableAddressTransferResponse'
+  { -- | An Elastic IP address transfer.
+    addressTransfer :: Prelude.Maybe AddressTransfer,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableAddressTransferResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressTransfer', 'enableAddressTransferResponse_addressTransfer' - An Elastic IP address transfer.
+--
+-- 'httpStatus', 'enableAddressTransferResponse_httpStatus' - The response's http status code.
+newEnableAddressTransferResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableAddressTransferResponse
+newEnableAddressTransferResponse pHttpStatus_ =
+  EnableAddressTransferResponse'
+    { addressTransfer =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | An Elastic IP address transfer.
+enableAddressTransferResponse_addressTransfer :: Lens.Lens' EnableAddressTransferResponse (Prelude.Maybe AddressTransfer)
+enableAddressTransferResponse_addressTransfer = Lens.lens (\EnableAddressTransferResponse' {addressTransfer} -> addressTransfer) (\s@EnableAddressTransferResponse' {} a -> s {addressTransfer = a} :: EnableAddressTransferResponse)
+
+-- | The response's http status code.
+enableAddressTransferResponse_httpStatus :: Lens.Lens' EnableAddressTransferResponse Prelude.Int
+enableAddressTransferResponse_httpStatus = Lens.lens (\EnableAddressTransferResponse' {httpStatus} -> httpStatus) (\s@EnableAddressTransferResponse' {} a -> s {httpStatus = a} :: EnableAddressTransferResponse)
+
+instance Prelude.NFData EnableAddressTransferResponse where
+  rnf EnableAddressTransferResponse' {..} =
+    Prelude.rnf addressTransfer
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableAwsNetworkPerformanceMetricSubscription.hs b/gen/Amazonka/EC2/EnableAwsNetworkPerformanceMetricSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableAwsNetworkPerformanceMetricSubscription.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableAwsNetworkPerformanceMetricSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables Infrastructure Performance subscriptions.
+module Amazonka.EC2.EnableAwsNetworkPerformanceMetricSubscription
+  ( -- * Creating a Request
+    EnableAwsNetworkPerformanceMetricSubscription (..),
+    newEnableAwsNetworkPerformanceMetricSubscription,
+
+    -- * Request Lenses
+    enableAwsNetworkPerformanceMetricSubscription_destination,
+    enableAwsNetworkPerformanceMetricSubscription_dryRun,
+    enableAwsNetworkPerformanceMetricSubscription_metric,
+    enableAwsNetworkPerformanceMetricSubscription_source,
+    enableAwsNetworkPerformanceMetricSubscription_statistic,
+
+    -- * Destructuring the Response
+    EnableAwsNetworkPerformanceMetricSubscriptionResponse (..),
+    newEnableAwsNetworkPerformanceMetricSubscriptionResponse,
+
+    -- * Response Lenses
+    enableAwsNetworkPerformanceMetricSubscriptionResponse_output,
+    enableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableAwsNetworkPerformanceMetricSubscription' smart constructor.
+data EnableAwsNetworkPerformanceMetricSubscription = EnableAwsNetworkPerformanceMetricSubscription'
+  { -- | The target Region or Availability Zone that the metric subscription is
+    -- enabled for. For example, @eu-west-1@.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The metric used for the enabled subscription.
+    metric :: Prelude.Maybe MetricType,
+    -- | The source Region or Availability Zone that the metric subscription is
+    -- enabled for. For example, @us-east-1@.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The statistic used for the enabled subscription.
+    statistic :: Prelude.Maybe StatisticType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableAwsNetworkPerformanceMetricSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'enableAwsNetworkPerformanceMetricSubscription_destination' - The target Region or Availability Zone that the metric subscription is
+-- enabled for. For example, @eu-west-1@.
+--
+-- 'dryRun', 'enableAwsNetworkPerformanceMetricSubscription_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'metric', 'enableAwsNetworkPerformanceMetricSubscription_metric' - The metric used for the enabled subscription.
+--
+-- 'source', 'enableAwsNetworkPerformanceMetricSubscription_source' - The source Region or Availability Zone that the metric subscription is
+-- enabled for. For example, @us-east-1@.
+--
+-- 'statistic', 'enableAwsNetworkPerformanceMetricSubscription_statistic' - The statistic used for the enabled subscription.
+newEnableAwsNetworkPerformanceMetricSubscription ::
+  EnableAwsNetworkPerformanceMetricSubscription
+newEnableAwsNetworkPerformanceMetricSubscription =
+  EnableAwsNetworkPerformanceMetricSubscription'
+    { destination =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      metric = Prelude.Nothing,
+      source = Prelude.Nothing,
+      statistic = Prelude.Nothing
+    }
+
+-- | The target Region or Availability Zone that the metric subscription is
+-- enabled for. For example, @eu-west-1@.
+enableAwsNetworkPerformanceMetricSubscription_destination :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe Prelude.Text)
+enableAwsNetworkPerformanceMetricSubscription_destination = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscription' {destination} -> destination) (\s@EnableAwsNetworkPerformanceMetricSubscription' {} a -> s {destination = a} :: EnableAwsNetworkPerformanceMetricSubscription)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableAwsNetworkPerformanceMetricSubscription_dryRun :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe Prelude.Bool)
+enableAwsNetworkPerformanceMetricSubscription_dryRun = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscription' {dryRun} -> dryRun) (\s@EnableAwsNetworkPerformanceMetricSubscription' {} a -> s {dryRun = a} :: EnableAwsNetworkPerformanceMetricSubscription)
+
+-- | The metric used for the enabled subscription.
+enableAwsNetworkPerformanceMetricSubscription_metric :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe MetricType)
+enableAwsNetworkPerformanceMetricSubscription_metric = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscription' {metric} -> metric) (\s@EnableAwsNetworkPerformanceMetricSubscription' {} a -> s {metric = a} :: EnableAwsNetworkPerformanceMetricSubscription)
+
+-- | The source Region or Availability Zone that the metric subscription is
+-- enabled for. For example, @us-east-1@.
+enableAwsNetworkPerformanceMetricSubscription_source :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe Prelude.Text)
+enableAwsNetworkPerformanceMetricSubscription_source = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscription' {source} -> source) (\s@EnableAwsNetworkPerformanceMetricSubscription' {} a -> s {source = a} :: EnableAwsNetworkPerformanceMetricSubscription)
+
+-- | The statistic used for the enabled subscription.
+enableAwsNetworkPerformanceMetricSubscription_statistic :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscription (Prelude.Maybe StatisticType)
+enableAwsNetworkPerformanceMetricSubscription_statistic = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscription' {statistic} -> statistic) (\s@EnableAwsNetworkPerformanceMetricSubscription' {} a -> s {statistic = a} :: EnableAwsNetworkPerformanceMetricSubscription)
+
+instance
+  Core.AWSRequest
+    EnableAwsNetworkPerformanceMetricSubscription
+  where
+  type
+    AWSResponse
+      EnableAwsNetworkPerformanceMetricSubscription =
+      EnableAwsNetworkPerformanceMetricSubscriptionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableAwsNetworkPerformanceMetricSubscriptionResponse'
+            Prelude.<$> (x Data..@? "output")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableAwsNetworkPerformanceMetricSubscription
+  where
+  hashWithSalt
+    _salt
+    EnableAwsNetworkPerformanceMetricSubscription' {..} =
+      _salt
+        `Prelude.hashWithSalt` destination
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` metric
+        `Prelude.hashWithSalt` source
+        `Prelude.hashWithSalt` statistic
+
+instance
+  Prelude.NFData
+    EnableAwsNetworkPerformanceMetricSubscription
+  where
+  rnf
+    EnableAwsNetworkPerformanceMetricSubscription' {..} =
+      Prelude.rnf destination
+        `Prelude.seq` Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf metric
+        `Prelude.seq` Prelude.rnf source
+        `Prelude.seq` Prelude.rnf statistic
+
+instance
+  Data.ToHeaders
+    EnableAwsNetworkPerformanceMetricSubscription
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    EnableAwsNetworkPerformanceMetricSubscription
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    EnableAwsNetworkPerformanceMetricSubscription
+  where
+  toQuery
+    EnableAwsNetworkPerformanceMetricSubscription' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "EnableAwsNetworkPerformanceMetricSubscription" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "Destination" Data.=: destination,
+          "DryRun" Data.=: dryRun,
+          "Metric" Data.=: metric,
+          "Source" Data.=: source,
+          "Statistic" Data.=: statistic
+        ]
+
+-- | /See:/ 'newEnableAwsNetworkPerformanceMetricSubscriptionResponse' smart constructor.
+data EnableAwsNetworkPerformanceMetricSubscriptionResponse = EnableAwsNetworkPerformanceMetricSubscriptionResponse'
+  { -- | Indicates whether the subscribe action was successful.
+    output :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableAwsNetworkPerformanceMetricSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'output', 'enableAwsNetworkPerformanceMetricSubscriptionResponse_output' - Indicates whether the subscribe action was successful.
+--
+-- 'httpStatus', 'enableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus' - The response's http status code.
+newEnableAwsNetworkPerformanceMetricSubscriptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableAwsNetworkPerformanceMetricSubscriptionResponse
+newEnableAwsNetworkPerformanceMetricSubscriptionResponse
+  pHttpStatus_ =
+    EnableAwsNetworkPerformanceMetricSubscriptionResponse'
+      { output =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Indicates whether the subscribe action was successful.
+enableAwsNetworkPerformanceMetricSubscriptionResponse_output :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscriptionResponse (Prelude.Maybe Prelude.Bool)
+enableAwsNetworkPerformanceMetricSubscriptionResponse_output = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscriptionResponse' {output} -> output) (\s@EnableAwsNetworkPerformanceMetricSubscriptionResponse' {} a -> s {output = a} :: EnableAwsNetworkPerformanceMetricSubscriptionResponse)
+
+-- | The response's http status code.
+enableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus :: Lens.Lens' EnableAwsNetworkPerformanceMetricSubscriptionResponse Prelude.Int
+enableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus = Lens.lens (\EnableAwsNetworkPerformanceMetricSubscriptionResponse' {httpStatus} -> httpStatus) (\s@EnableAwsNetworkPerformanceMetricSubscriptionResponse' {} a -> s {httpStatus = a} :: EnableAwsNetworkPerformanceMetricSubscriptionResponse)
+
+instance
+  Prelude.NFData
+    EnableAwsNetworkPerformanceMetricSubscriptionResponse
+  where
+  rnf
+    EnableAwsNetworkPerformanceMetricSubscriptionResponse' {..} =
+      Prelude.rnf output
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableEbsEncryptionByDefault.hs b/gen/Amazonka/EC2/EnableEbsEncryptionByDefault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableEbsEncryptionByDefault.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableEbsEncryptionByDefault
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables EBS encryption by default for your account in the current
+-- Region.
+--
+-- After you enable encryption by default, the EBS volumes that you create
+-- are always encrypted, either using the default KMS key or the KMS key
+-- that you specified when you created each volume. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- You can specify the default KMS key for encryption by default using
+-- ModifyEbsDefaultKmsKeyId or ResetEbsDefaultKmsKeyId.
+--
+-- Enabling encryption by default has no effect on the encryption status of
+-- your existing volumes.
+--
+-- After you enable encryption by default, you can no longer launch
+-- instances using instance types that do not support encryption. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+module Amazonka.EC2.EnableEbsEncryptionByDefault
+  ( -- * Creating a Request
+    EnableEbsEncryptionByDefault (..),
+    newEnableEbsEncryptionByDefault,
+
+    -- * Request Lenses
+    enableEbsEncryptionByDefault_dryRun,
+
+    -- * Destructuring the Response
+    EnableEbsEncryptionByDefaultResponse (..),
+    newEnableEbsEncryptionByDefaultResponse,
+
+    -- * Response Lenses
+    enableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault,
+    enableEbsEncryptionByDefaultResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableEbsEncryptionByDefault' smart constructor.
+data EnableEbsEncryptionByDefault = EnableEbsEncryptionByDefault'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableEbsEncryptionByDefault' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableEbsEncryptionByDefault_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newEnableEbsEncryptionByDefault ::
+  EnableEbsEncryptionByDefault
+newEnableEbsEncryptionByDefault =
+  EnableEbsEncryptionByDefault'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableEbsEncryptionByDefault_dryRun :: Lens.Lens' EnableEbsEncryptionByDefault (Prelude.Maybe Prelude.Bool)
+enableEbsEncryptionByDefault_dryRun = Lens.lens (\EnableEbsEncryptionByDefault' {dryRun} -> dryRun) (\s@EnableEbsEncryptionByDefault' {} a -> s {dryRun = a} :: EnableEbsEncryptionByDefault)
+
+instance Core.AWSRequest EnableEbsEncryptionByDefault where
+  type
+    AWSResponse EnableEbsEncryptionByDefault =
+      EnableEbsEncryptionByDefaultResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableEbsEncryptionByDefaultResponse'
+            Prelude.<$> (x Data..@? "ebsEncryptionByDefault")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableEbsEncryptionByDefault
+  where
+  hashWithSalt _salt EnableEbsEncryptionByDefault' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData EnableEbsEncryptionByDefault where
+  rnf EnableEbsEncryptionByDefault' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders EnableEbsEncryptionByDefault where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableEbsEncryptionByDefault where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableEbsEncryptionByDefault where
+  toQuery EnableEbsEncryptionByDefault' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "EnableEbsEncryptionByDefault" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newEnableEbsEncryptionByDefaultResponse' smart constructor.
+data EnableEbsEncryptionByDefaultResponse = EnableEbsEncryptionByDefaultResponse'
+  { -- | The updated status of encryption by default.
+    ebsEncryptionByDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableEbsEncryptionByDefaultResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebsEncryptionByDefault', 'enableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault' - The updated status of encryption by default.
+--
+-- 'httpStatus', 'enableEbsEncryptionByDefaultResponse_httpStatus' - The response's http status code.
+newEnableEbsEncryptionByDefaultResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableEbsEncryptionByDefaultResponse
+newEnableEbsEncryptionByDefaultResponse pHttpStatus_ =
+  EnableEbsEncryptionByDefaultResponse'
+    { ebsEncryptionByDefault =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The updated status of encryption by default.
+enableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault :: Lens.Lens' EnableEbsEncryptionByDefaultResponse (Prelude.Maybe Prelude.Bool)
+enableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault = Lens.lens (\EnableEbsEncryptionByDefaultResponse' {ebsEncryptionByDefault} -> ebsEncryptionByDefault) (\s@EnableEbsEncryptionByDefaultResponse' {} a -> s {ebsEncryptionByDefault = a} :: EnableEbsEncryptionByDefaultResponse)
+
+-- | The response's http status code.
+enableEbsEncryptionByDefaultResponse_httpStatus :: Lens.Lens' EnableEbsEncryptionByDefaultResponse Prelude.Int
+enableEbsEncryptionByDefaultResponse_httpStatus = Lens.lens (\EnableEbsEncryptionByDefaultResponse' {httpStatus} -> httpStatus) (\s@EnableEbsEncryptionByDefaultResponse' {} a -> s {httpStatus = a} :: EnableEbsEncryptionByDefaultResponse)
+
+instance
+  Prelude.NFData
+    EnableEbsEncryptionByDefaultResponse
+  where
+  rnf EnableEbsEncryptionByDefaultResponse' {..} =
+    Prelude.rnf ebsEncryptionByDefault
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableFastLaunch.hs b/gen/Amazonka/EC2/EnableFastLaunch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableFastLaunch.hs
@@ -0,0 +1,387 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableFastLaunch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- When you enable faster launching for a Windows AMI, images are
+-- pre-provisioned, using snapshots to launch instances up to 65% faster.
+-- To create the optimized Windows image, Amazon EC2 launches an instance
+-- and runs through Sysprep steps, rebooting as required. Then it creates a
+-- set of reserved snapshots that are used for subsequent launches. The
+-- reserved snapshots are automatically replenished as they are used,
+-- depending on your settings for launch frequency.
+--
+-- To change these settings, you must own the AMI.
+module Amazonka.EC2.EnableFastLaunch
+  ( -- * Creating a Request
+    EnableFastLaunch (..),
+    newEnableFastLaunch,
+
+    -- * Request Lenses
+    enableFastLaunch_dryRun,
+    enableFastLaunch_launchTemplate,
+    enableFastLaunch_maxParallelLaunches,
+    enableFastLaunch_resourceType,
+    enableFastLaunch_snapshotConfiguration,
+    enableFastLaunch_imageId,
+
+    -- * Destructuring the Response
+    EnableFastLaunchResponse (..),
+    newEnableFastLaunchResponse,
+
+    -- * Response Lenses
+    enableFastLaunchResponse_imageId,
+    enableFastLaunchResponse_launchTemplate,
+    enableFastLaunchResponse_maxParallelLaunches,
+    enableFastLaunchResponse_ownerId,
+    enableFastLaunchResponse_resourceType,
+    enableFastLaunchResponse_snapshotConfiguration,
+    enableFastLaunchResponse_state,
+    enableFastLaunchResponse_stateTransitionReason,
+    enableFastLaunchResponse_stateTransitionTime,
+    enableFastLaunchResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableFastLaunch' smart constructor.
+data EnableFastLaunch = EnableFastLaunch'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The launch template to use when launching Windows instances from
+    -- pre-provisioned snapshots. Launch template parameters can include either
+    -- the name or ID of the launch template, but not both.
+    launchTemplate :: Prelude.Maybe FastLaunchLaunchTemplateSpecificationRequest,
+    -- | The maximum number of parallel instances to launch for creating
+    -- resources. Value must be @6@ or greater.
+    maxParallelLaunches :: Prelude.Maybe Prelude.Int,
+    -- | The type of resource to use for pre-provisioning the Windows AMI for
+    -- faster launching. Supported values include: @snapshot@, which is the
+    -- default value.
+    resourceType :: Prelude.Maybe Prelude.Text,
+    -- | Configuration settings for creating and managing the snapshots that are
+    -- used for pre-provisioning the Windows AMI for faster launching. The
+    -- associated @ResourceType@ must be @snapshot@.
+    snapshotConfiguration :: Prelude.Maybe FastLaunchSnapshotConfigurationRequest,
+    -- | The ID of the image for which you’re enabling faster launching.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastLaunch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableFastLaunch_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchTemplate', 'enableFastLaunch_launchTemplate' - The launch template to use when launching Windows instances from
+-- pre-provisioned snapshots. Launch template parameters can include either
+-- the name or ID of the launch template, but not both.
+--
+-- 'maxParallelLaunches', 'enableFastLaunch_maxParallelLaunches' - The maximum number of parallel instances to launch for creating
+-- resources. Value must be @6@ or greater.
+--
+-- 'resourceType', 'enableFastLaunch_resourceType' - The type of resource to use for pre-provisioning the Windows AMI for
+-- faster launching. Supported values include: @snapshot@, which is the
+-- default value.
+--
+-- 'snapshotConfiguration', 'enableFastLaunch_snapshotConfiguration' - Configuration settings for creating and managing the snapshots that are
+-- used for pre-provisioning the Windows AMI for faster launching. The
+-- associated @ResourceType@ must be @snapshot@.
+--
+-- 'imageId', 'enableFastLaunch_imageId' - The ID of the image for which you’re enabling faster launching.
+newEnableFastLaunch ::
+  -- | 'imageId'
+  Prelude.Text ->
+  EnableFastLaunch
+newEnableFastLaunch pImageId_ =
+  EnableFastLaunch'
+    { dryRun = Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      maxParallelLaunches = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      snapshotConfiguration = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableFastLaunch_dryRun :: Lens.Lens' EnableFastLaunch (Prelude.Maybe Prelude.Bool)
+enableFastLaunch_dryRun = Lens.lens (\EnableFastLaunch' {dryRun} -> dryRun) (\s@EnableFastLaunch' {} a -> s {dryRun = a} :: EnableFastLaunch)
+
+-- | The launch template to use when launching Windows instances from
+-- pre-provisioned snapshots. Launch template parameters can include either
+-- the name or ID of the launch template, but not both.
+enableFastLaunch_launchTemplate :: Lens.Lens' EnableFastLaunch (Prelude.Maybe FastLaunchLaunchTemplateSpecificationRequest)
+enableFastLaunch_launchTemplate = Lens.lens (\EnableFastLaunch' {launchTemplate} -> launchTemplate) (\s@EnableFastLaunch' {} a -> s {launchTemplate = a} :: EnableFastLaunch)
+
+-- | The maximum number of parallel instances to launch for creating
+-- resources. Value must be @6@ or greater.
+enableFastLaunch_maxParallelLaunches :: Lens.Lens' EnableFastLaunch (Prelude.Maybe Prelude.Int)
+enableFastLaunch_maxParallelLaunches = Lens.lens (\EnableFastLaunch' {maxParallelLaunches} -> maxParallelLaunches) (\s@EnableFastLaunch' {} a -> s {maxParallelLaunches = a} :: EnableFastLaunch)
+
+-- | The type of resource to use for pre-provisioning the Windows AMI for
+-- faster launching. Supported values include: @snapshot@, which is the
+-- default value.
+enableFastLaunch_resourceType :: Lens.Lens' EnableFastLaunch (Prelude.Maybe Prelude.Text)
+enableFastLaunch_resourceType = Lens.lens (\EnableFastLaunch' {resourceType} -> resourceType) (\s@EnableFastLaunch' {} a -> s {resourceType = a} :: EnableFastLaunch)
+
+-- | Configuration settings for creating and managing the snapshots that are
+-- used for pre-provisioning the Windows AMI for faster launching. The
+-- associated @ResourceType@ must be @snapshot@.
+enableFastLaunch_snapshotConfiguration :: Lens.Lens' EnableFastLaunch (Prelude.Maybe FastLaunchSnapshotConfigurationRequest)
+enableFastLaunch_snapshotConfiguration = Lens.lens (\EnableFastLaunch' {snapshotConfiguration} -> snapshotConfiguration) (\s@EnableFastLaunch' {} a -> s {snapshotConfiguration = a} :: EnableFastLaunch)
+
+-- | The ID of the image for which you’re enabling faster launching.
+enableFastLaunch_imageId :: Lens.Lens' EnableFastLaunch Prelude.Text
+enableFastLaunch_imageId = Lens.lens (\EnableFastLaunch' {imageId} -> imageId) (\s@EnableFastLaunch' {} a -> s {imageId = a} :: EnableFastLaunch)
+
+instance Core.AWSRequest EnableFastLaunch where
+  type
+    AWSResponse EnableFastLaunch =
+      EnableFastLaunchResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableFastLaunchResponse'
+            Prelude.<$> (x Data..@? "imageId")
+            Prelude.<*> (x Data..@? "launchTemplate")
+            Prelude.<*> (x Data..@? "maxParallelLaunches")
+            Prelude.<*> (x Data..@? "ownerId")
+            Prelude.<*> (x Data..@? "resourceType")
+            Prelude.<*> (x Data..@? "snapshotConfiguration")
+            Prelude.<*> (x Data..@? "state")
+            Prelude.<*> (x Data..@? "stateTransitionReason")
+            Prelude.<*> (x Data..@? "stateTransitionTime")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableFastLaunch where
+  hashWithSalt _salt EnableFastLaunch' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchTemplate
+      `Prelude.hashWithSalt` maxParallelLaunches
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` snapshotConfiguration
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData EnableFastLaunch where
+  rnf EnableFastLaunch' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf maxParallelLaunches
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf snapshotConfiguration
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders EnableFastLaunch where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableFastLaunch where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableFastLaunch where
+  toQuery EnableFastLaunch' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableFastLaunch" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LaunchTemplate" Data.=: launchTemplate,
+        "MaxParallelLaunches" Data.=: maxParallelLaunches,
+        "ResourceType" Data.=: resourceType,
+        "SnapshotConfiguration"
+          Data.=: snapshotConfiguration,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newEnableFastLaunchResponse' smart constructor.
+data EnableFastLaunchResponse = EnableFastLaunchResponse'
+  { -- | The image ID that identifies the Windows AMI for which faster launching
+    -- was enabled.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The launch template that is used when launching Windows instances from
+    -- pre-provisioned snapshots.
+    launchTemplate :: Prelude.Maybe FastLaunchLaunchTemplateSpecificationResponse,
+    -- | The maximum number of parallel instances to launch for creating
+    -- resources.
+    maxParallelLaunches :: Prelude.Maybe Prelude.Int,
+    -- | The owner ID for the Windows AMI for which faster launching was enabled.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource that was defined for pre-provisioning the Windows
+    -- AMI for faster launching.
+    resourceType :: Prelude.Maybe FastLaunchResourceType,
+    -- | The configuration settings that were defined for creating and managing
+    -- the pre-provisioned snapshots for faster launching of the Windows AMI.
+    -- This property is returned when the associated @resourceType@ is
+    -- @snapshot@.
+    snapshotConfiguration :: Prelude.Maybe FastLaunchSnapshotConfigurationResponse,
+    -- | The current state of faster launching for the specified Windows AMI.
+    state :: Prelude.Maybe FastLaunchStateCode,
+    -- | The reason that the state changed for faster launching for the Windows
+    -- AMI.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text,
+    -- | The time that the state changed for faster launching for the Windows
+    -- AMI.
+    stateTransitionTime :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastLaunchResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'enableFastLaunchResponse_imageId' - The image ID that identifies the Windows AMI for which faster launching
+-- was enabled.
+--
+-- 'launchTemplate', 'enableFastLaunchResponse_launchTemplate' - The launch template that is used when launching Windows instances from
+-- pre-provisioned snapshots.
+--
+-- 'maxParallelLaunches', 'enableFastLaunchResponse_maxParallelLaunches' - The maximum number of parallel instances to launch for creating
+-- resources.
+--
+-- 'ownerId', 'enableFastLaunchResponse_ownerId' - The owner ID for the Windows AMI for which faster launching was enabled.
+--
+-- 'resourceType', 'enableFastLaunchResponse_resourceType' - The type of resource that was defined for pre-provisioning the Windows
+-- AMI for faster launching.
+--
+-- 'snapshotConfiguration', 'enableFastLaunchResponse_snapshotConfiguration' - The configuration settings that were defined for creating and managing
+-- the pre-provisioned snapshots for faster launching of the Windows AMI.
+-- This property is returned when the associated @resourceType@ is
+-- @snapshot@.
+--
+-- 'state', 'enableFastLaunchResponse_state' - The current state of faster launching for the specified Windows AMI.
+--
+-- 'stateTransitionReason', 'enableFastLaunchResponse_stateTransitionReason' - The reason that the state changed for faster launching for the Windows
+-- AMI.
+--
+-- 'stateTransitionTime', 'enableFastLaunchResponse_stateTransitionTime' - The time that the state changed for faster launching for the Windows
+-- AMI.
+--
+-- 'httpStatus', 'enableFastLaunchResponse_httpStatus' - The response's http status code.
+newEnableFastLaunchResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableFastLaunchResponse
+newEnableFastLaunchResponse pHttpStatus_ =
+  EnableFastLaunchResponse'
+    { imageId =
+        Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      maxParallelLaunches = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      snapshotConfiguration = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateTransitionReason = Prelude.Nothing,
+      stateTransitionTime = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The image ID that identifies the Windows AMI for which faster launching
+-- was enabled.
+enableFastLaunchResponse_imageId :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe Prelude.Text)
+enableFastLaunchResponse_imageId = Lens.lens (\EnableFastLaunchResponse' {imageId} -> imageId) (\s@EnableFastLaunchResponse' {} a -> s {imageId = a} :: EnableFastLaunchResponse)
+
+-- | The launch template that is used when launching Windows instances from
+-- pre-provisioned snapshots.
+enableFastLaunchResponse_launchTemplate :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe FastLaunchLaunchTemplateSpecificationResponse)
+enableFastLaunchResponse_launchTemplate = Lens.lens (\EnableFastLaunchResponse' {launchTemplate} -> launchTemplate) (\s@EnableFastLaunchResponse' {} a -> s {launchTemplate = a} :: EnableFastLaunchResponse)
+
+-- | The maximum number of parallel instances to launch for creating
+-- resources.
+enableFastLaunchResponse_maxParallelLaunches :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe Prelude.Int)
+enableFastLaunchResponse_maxParallelLaunches = Lens.lens (\EnableFastLaunchResponse' {maxParallelLaunches} -> maxParallelLaunches) (\s@EnableFastLaunchResponse' {} a -> s {maxParallelLaunches = a} :: EnableFastLaunchResponse)
+
+-- | The owner ID for the Windows AMI for which faster launching was enabled.
+enableFastLaunchResponse_ownerId :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe Prelude.Text)
+enableFastLaunchResponse_ownerId = Lens.lens (\EnableFastLaunchResponse' {ownerId} -> ownerId) (\s@EnableFastLaunchResponse' {} a -> s {ownerId = a} :: EnableFastLaunchResponse)
+
+-- | The type of resource that was defined for pre-provisioning the Windows
+-- AMI for faster launching.
+enableFastLaunchResponse_resourceType :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe FastLaunchResourceType)
+enableFastLaunchResponse_resourceType = Lens.lens (\EnableFastLaunchResponse' {resourceType} -> resourceType) (\s@EnableFastLaunchResponse' {} a -> s {resourceType = a} :: EnableFastLaunchResponse)
+
+-- | The configuration settings that were defined for creating and managing
+-- the pre-provisioned snapshots for faster launching of the Windows AMI.
+-- This property is returned when the associated @resourceType@ is
+-- @snapshot@.
+enableFastLaunchResponse_snapshotConfiguration :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe FastLaunchSnapshotConfigurationResponse)
+enableFastLaunchResponse_snapshotConfiguration = Lens.lens (\EnableFastLaunchResponse' {snapshotConfiguration} -> snapshotConfiguration) (\s@EnableFastLaunchResponse' {} a -> s {snapshotConfiguration = a} :: EnableFastLaunchResponse)
+
+-- | The current state of faster launching for the specified Windows AMI.
+enableFastLaunchResponse_state :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe FastLaunchStateCode)
+enableFastLaunchResponse_state = Lens.lens (\EnableFastLaunchResponse' {state} -> state) (\s@EnableFastLaunchResponse' {} a -> s {state = a} :: EnableFastLaunchResponse)
+
+-- | The reason that the state changed for faster launching for the Windows
+-- AMI.
+enableFastLaunchResponse_stateTransitionReason :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe Prelude.Text)
+enableFastLaunchResponse_stateTransitionReason = Lens.lens (\EnableFastLaunchResponse' {stateTransitionReason} -> stateTransitionReason) (\s@EnableFastLaunchResponse' {} a -> s {stateTransitionReason = a} :: EnableFastLaunchResponse)
+
+-- | The time that the state changed for faster launching for the Windows
+-- AMI.
+enableFastLaunchResponse_stateTransitionTime :: Lens.Lens' EnableFastLaunchResponse (Prelude.Maybe Prelude.UTCTime)
+enableFastLaunchResponse_stateTransitionTime = Lens.lens (\EnableFastLaunchResponse' {stateTransitionTime} -> stateTransitionTime) (\s@EnableFastLaunchResponse' {} a -> s {stateTransitionTime = a} :: EnableFastLaunchResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+enableFastLaunchResponse_httpStatus :: Lens.Lens' EnableFastLaunchResponse Prelude.Int
+enableFastLaunchResponse_httpStatus = Lens.lens (\EnableFastLaunchResponse' {httpStatus} -> httpStatus) (\s@EnableFastLaunchResponse' {} a -> s {httpStatus = a} :: EnableFastLaunchResponse)
+
+instance Prelude.NFData EnableFastLaunchResponse where
+  rnf EnableFastLaunchResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf maxParallelLaunches
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf snapshotConfiguration
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateTransitionReason
+      `Prelude.seq` Prelude.rnf stateTransitionTime
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableFastSnapshotRestores.hs b/gen/Amazonka/EC2/EnableFastSnapshotRestores.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableFastSnapshotRestores.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableFastSnapshotRestores
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables fast snapshot restores for the specified snapshots in the
+-- specified Availability Zones.
+--
+-- You get the full benefit of fast snapshot restores after they enter the
+-- @enabled@ state. To get the current state of fast snapshot restores, use
+-- DescribeFastSnapshotRestores. To disable fast snapshot restores, use
+-- DisableFastSnapshotRestores.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-fast-snapshot-restore.html Amazon EBS fast snapshot restore>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.EnableFastSnapshotRestores
+  ( -- * Creating a Request
+    EnableFastSnapshotRestores (..),
+    newEnableFastSnapshotRestores,
+
+    -- * Request Lenses
+    enableFastSnapshotRestores_dryRun,
+    enableFastSnapshotRestores_availabilityZones,
+    enableFastSnapshotRestores_sourceSnapshotIds,
+
+    -- * Destructuring the Response
+    EnableFastSnapshotRestoresResponse (..),
+    newEnableFastSnapshotRestoresResponse,
+
+    -- * Response Lenses
+    enableFastSnapshotRestoresResponse_successful,
+    enableFastSnapshotRestoresResponse_unsuccessful,
+    enableFastSnapshotRestoresResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableFastSnapshotRestores' smart constructor.
+data EnableFastSnapshotRestores = EnableFastSnapshotRestores'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more Availability Zones. For example, @us-east-2a@.
+    availabilityZones :: [Prelude.Text],
+    -- | The IDs of one or more snapshots. For example, @snap-1234567890abcdef0@.
+    -- You can specify a snapshot that was shared with you from another Amazon
+    -- Web Services account.
+    sourceSnapshotIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastSnapshotRestores' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableFastSnapshotRestores_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'availabilityZones', 'enableFastSnapshotRestores_availabilityZones' - One or more Availability Zones. For example, @us-east-2a@.
+--
+-- 'sourceSnapshotIds', 'enableFastSnapshotRestores_sourceSnapshotIds' - The IDs of one or more snapshots. For example, @snap-1234567890abcdef0@.
+-- You can specify a snapshot that was shared with you from another Amazon
+-- Web Services account.
+newEnableFastSnapshotRestores ::
+  EnableFastSnapshotRestores
+newEnableFastSnapshotRestores =
+  EnableFastSnapshotRestores'
+    { dryRun =
+        Prelude.Nothing,
+      availabilityZones = Prelude.mempty,
+      sourceSnapshotIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableFastSnapshotRestores_dryRun :: Lens.Lens' EnableFastSnapshotRestores (Prelude.Maybe Prelude.Bool)
+enableFastSnapshotRestores_dryRun = Lens.lens (\EnableFastSnapshotRestores' {dryRun} -> dryRun) (\s@EnableFastSnapshotRestores' {} a -> s {dryRun = a} :: EnableFastSnapshotRestores)
+
+-- | One or more Availability Zones. For example, @us-east-2a@.
+enableFastSnapshotRestores_availabilityZones :: Lens.Lens' EnableFastSnapshotRestores [Prelude.Text]
+enableFastSnapshotRestores_availabilityZones = Lens.lens (\EnableFastSnapshotRestores' {availabilityZones} -> availabilityZones) (\s@EnableFastSnapshotRestores' {} a -> s {availabilityZones = a} :: EnableFastSnapshotRestores) Prelude.. Lens.coerced
+
+-- | The IDs of one or more snapshots. For example, @snap-1234567890abcdef0@.
+-- You can specify a snapshot that was shared with you from another Amazon
+-- Web Services account.
+enableFastSnapshotRestores_sourceSnapshotIds :: Lens.Lens' EnableFastSnapshotRestores [Prelude.Text]
+enableFastSnapshotRestores_sourceSnapshotIds = Lens.lens (\EnableFastSnapshotRestores' {sourceSnapshotIds} -> sourceSnapshotIds) (\s@EnableFastSnapshotRestores' {} a -> s {sourceSnapshotIds = a} :: EnableFastSnapshotRestores) Prelude.. Lens.coerced
+
+instance Core.AWSRequest EnableFastSnapshotRestores where
+  type
+    AWSResponse EnableFastSnapshotRestores =
+      EnableFastSnapshotRestoresResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableFastSnapshotRestoresResponse'
+            Prelude.<$> ( x
+                            Data..@? "successful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableFastSnapshotRestores where
+  hashWithSalt _salt EnableFastSnapshotRestores' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` availabilityZones
+      `Prelude.hashWithSalt` sourceSnapshotIds
+
+instance Prelude.NFData EnableFastSnapshotRestores where
+  rnf EnableFastSnapshotRestores' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf availabilityZones
+      `Prelude.seq` Prelude.rnf sourceSnapshotIds
+
+instance Data.ToHeaders EnableFastSnapshotRestores where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableFastSnapshotRestores where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableFastSnapshotRestores where
+  toQuery EnableFastSnapshotRestores' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableFastSnapshotRestores" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "AvailabilityZone"
+          availabilityZones,
+        Data.toQueryList
+          "SourceSnapshotId"
+          sourceSnapshotIds
+      ]
+
+-- | /See:/ 'newEnableFastSnapshotRestoresResponse' smart constructor.
+data EnableFastSnapshotRestoresResponse = EnableFastSnapshotRestoresResponse'
+  { -- | Information about the snapshots for which fast snapshot restores were
+    -- successfully enabled.
+    successful :: Prelude.Maybe [EnableFastSnapshotRestoreSuccessItem],
+    -- | Information about the snapshots for which fast snapshot restores could
+    -- not be enabled.
+    unsuccessful :: Prelude.Maybe [EnableFastSnapshotRestoreErrorItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastSnapshotRestoresResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successful', 'enableFastSnapshotRestoresResponse_successful' - Information about the snapshots for which fast snapshot restores were
+-- successfully enabled.
+--
+-- 'unsuccessful', 'enableFastSnapshotRestoresResponse_unsuccessful' - Information about the snapshots for which fast snapshot restores could
+-- not be enabled.
+--
+-- 'httpStatus', 'enableFastSnapshotRestoresResponse_httpStatus' - The response's http status code.
+newEnableFastSnapshotRestoresResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableFastSnapshotRestoresResponse
+newEnableFastSnapshotRestoresResponse pHttpStatus_ =
+  EnableFastSnapshotRestoresResponse'
+    { successful =
+        Prelude.Nothing,
+      unsuccessful = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the snapshots for which fast snapshot restores were
+-- successfully enabled.
+enableFastSnapshotRestoresResponse_successful :: Lens.Lens' EnableFastSnapshotRestoresResponse (Prelude.Maybe [EnableFastSnapshotRestoreSuccessItem])
+enableFastSnapshotRestoresResponse_successful = Lens.lens (\EnableFastSnapshotRestoresResponse' {successful} -> successful) (\s@EnableFastSnapshotRestoresResponse' {} a -> s {successful = a} :: EnableFastSnapshotRestoresResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the snapshots for which fast snapshot restores could
+-- not be enabled.
+enableFastSnapshotRestoresResponse_unsuccessful :: Lens.Lens' EnableFastSnapshotRestoresResponse (Prelude.Maybe [EnableFastSnapshotRestoreErrorItem])
+enableFastSnapshotRestoresResponse_unsuccessful = Lens.lens (\EnableFastSnapshotRestoresResponse' {unsuccessful} -> unsuccessful) (\s@EnableFastSnapshotRestoresResponse' {} a -> s {unsuccessful = a} :: EnableFastSnapshotRestoresResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+enableFastSnapshotRestoresResponse_httpStatus :: Lens.Lens' EnableFastSnapshotRestoresResponse Prelude.Int
+enableFastSnapshotRestoresResponse_httpStatus = Lens.lens (\EnableFastSnapshotRestoresResponse' {httpStatus} -> httpStatus) (\s@EnableFastSnapshotRestoresResponse' {} a -> s {httpStatus = a} :: EnableFastSnapshotRestoresResponse)
+
+instance
+  Prelude.NFData
+    EnableFastSnapshotRestoresResponse
+  where
+  rnf EnableFastSnapshotRestoresResponse' {..} =
+    Prelude.rnf successful
+      `Prelude.seq` Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableImageDeprecation.hs b/gen/Amazonka/EC2/EnableImageDeprecation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableImageDeprecation.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableImageDeprecation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables deprecation of the specified AMI at the specified date and time.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-deprecate.html Deprecate an AMI>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.EnableImageDeprecation
+  ( -- * Creating a Request
+    EnableImageDeprecation (..),
+    newEnableImageDeprecation,
+
+    -- * Request Lenses
+    enableImageDeprecation_dryRun,
+    enableImageDeprecation_imageId,
+    enableImageDeprecation_deprecateAt,
+
+    -- * Destructuring the Response
+    EnableImageDeprecationResponse (..),
+    newEnableImageDeprecationResponse,
+
+    -- * Response Lenses
+    enableImageDeprecationResponse_return,
+    enableImageDeprecationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableImageDeprecation' smart constructor.
+data EnableImageDeprecation = EnableImageDeprecation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text,
+    -- | The date and time to deprecate the AMI, in UTC, in the following format:
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z. If you specify a value for seconds,
+    -- Amazon EC2 rounds the seconds to the nearest minute.
+    --
+    -- You can’t specify a date in the past. The upper limit for @DeprecateAt@
+    -- is 10 years from now, except for public AMIs, where the upper limit is 2
+    -- years from the creation date.
+    deprecateAt :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableImageDeprecation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableImageDeprecation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'enableImageDeprecation_imageId' - The ID of the AMI.
+--
+-- 'deprecateAt', 'enableImageDeprecation_deprecateAt' - The date and time to deprecate the AMI, in UTC, in the following format:
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z. If you specify a value for seconds,
+-- Amazon EC2 rounds the seconds to the nearest minute.
+--
+-- You can’t specify a date in the past. The upper limit for @DeprecateAt@
+-- is 10 years from now, except for public AMIs, where the upper limit is 2
+-- years from the creation date.
+newEnableImageDeprecation ::
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 'deprecateAt'
+  Prelude.UTCTime ->
+  EnableImageDeprecation
+newEnableImageDeprecation pImageId_ pDeprecateAt_ =
+  EnableImageDeprecation'
+    { dryRun = Prelude.Nothing,
+      imageId = pImageId_,
+      deprecateAt = Data._Time Lens.# pDeprecateAt_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableImageDeprecation_dryRun :: Lens.Lens' EnableImageDeprecation (Prelude.Maybe Prelude.Bool)
+enableImageDeprecation_dryRun = Lens.lens (\EnableImageDeprecation' {dryRun} -> dryRun) (\s@EnableImageDeprecation' {} a -> s {dryRun = a} :: EnableImageDeprecation)
+
+-- | The ID of the AMI.
+enableImageDeprecation_imageId :: Lens.Lens' EnableImageDeprecation Prelude.Text
+enableImageDeprecation_imageId = Lens.lens (\EnableImageDeprecation' {imageId} -> imageId) (\s@EnableImageDeprecation' {} a -> s {imageId = a} :: EnableImageDeprecation)
+
+-- | The date and time to deprecate the AMI, in UTC, in the following format:
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z. If you specify a value for seconds,
+-- Amazon EC2 rounds the seconds to the nearest minute.
+--
+-- You can’t specify a date in the past. The upper limit for @DeprecateAt@
+-- is 10 years from now, except for public AMIs, where the upper limit is 2
+-- years from the creation date.
+enableImageDeprecation_deprecateAt :: Lens.Lens' EnableImageDeprecation Prelude.UTCTime
+enableImageDeprecation_deprecateAt = Lens.lens (\EnableImageDeprecation' {deprecateAt} -> deprecateAt) (\s@EnableImageDeprecation' {} a -> s {deprecateAt = a} :: EnableImageDeprecation) Prelude.. Data._Time
+
+instance Core.AWSRequest EnableImageDeprecation where
+  type
+    AWSResponse EnableImageDeprecation =
+      EnableImageDeprecationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableImageDeprecationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableImageDeprecation where
+  hashWithSalt _salt EnableImageDeprecation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` deprecateAt
+
+instance Prelude.NFData EnableImageDeprecation where
+  rnf EnableImageDeprecation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf deprecateAt
+
+instance Data.ToHeaders EnableImageDeprecation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableImageDeprecation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableImageDeprecation where
+  toQuery EnableImageDeprecation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableImageDeprecation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ImageId" Data.=: imageId,
+        "DeprecateAt" Data.=: deprecateAt
+      ]
+
+-- | /See:/ 'newEnableImageDeprecationResponse' smart constructor.
+data EnableImageDeprecationResponse = EnableImageDeprecationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableImageDeprecationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'enableImageDeprecationResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'enableImageDeprecationResponse_httpStatus' - The response's http status code.
+newEnableImageDeprecationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableImageDeprecationResponse
+newEnableImageDeprecationResponse pHttpStatus_ =
+  EnableImageDeprecationResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+enableImageDeprecationResponse_return :: Lens.Lens' EnableImageDeprecationResponse (Prelude.Maybe Prelude.Bool)
+enableImageDeprecationResponse_return = Lens.lens (\EnableImageDeprecationResponse' {return'} -> return') (\s@EnableImageDeprecationResponse' {} a -> s {return' = a} :: EnableImageDeprecationResponse)
+
+-- | The response's http status code.
+enableImageDeprecationResponse_httpStatus :: Lens.Lens' EnableImageDeprecationResponse Prelude.Int
+enableImageDeprecationResponse_httpStatus = Lens.lens (\EnableImageDeprecationResponse' {httpStatus} -> httpStatus) (\s@EnableImageDeprecationResponse' {} a -> s {httpStatus = a} :: EnableImageDeprecationResponse)
+
+instance
+  Prelude.NFData
+    EnableImageDeprecationResponse
+  where
+  rnf EnableImageDeprecationResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableIpamOrganizationAdminAccount.hs b/gen/Amazonka/EC2/EnableIpamOrganizationAdminAccount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableIpamOrganizationAdminAccount.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableIpamOrganizationAdminAccount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enable an Organizations member account as the IPAM admin account. You
+-- cannot select the Organizations management account as the IPAM admin
+-- account. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/enable-integ-ipam.html Enable integration with Organizations>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.EnableIpamOrganizationAdminAccount
+  ( -- * Creating a Request
+    EnableIpamOrganizationAdminAccount (..),
+    newEnableIpamOrganizationAdminAccount,
+
+    -- * Request Lenses
+    enableIpamOrganizationAdminAccount_dryRun,
+    enableIpamOrganizationAdminAccount_delegatedAdminAccountId,
+
+    -- * Destructuring the Response
+    EnableIpamOrganizationAdminAccountResponse (..),
+    newEnableIpamOrganizationAdminAccountResponse,
+
+    -- * Response Lenses
+    enableIpamOrganizationAdminAccountResponse_success,
+    enableIpamOrganizationAdminAccountResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableIpamOrganizationAdminAccount' smart constructor.
+data EnableIpamOrganizationAdminAccount = EnableIpamOrganizationAdminAccount'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Organizations member account ID that you want to enable as the IPAM
+    -- account.
+    delegatedAdminAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableIpamOrganizationAdminAccount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableIpamOrganizationAdminAccount_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'delegatedAdminAccountId', 'enableIpamOrganizationAdminAccount_delegatedAdminAccountId' - The Organizations member account ID that you want to enable as the IPAM
+-- account.
+newEnableIpamOrganizationAdminAccount ::
+  -- | 'delegatedAdminAccountId'
+  Prelude.Text ->
+  EnableIpamOrganizationAdminAccount
+newEnableIpamOrganizationAdminAccount
+  pDelegatedAdminAccountId_ =
+    EnableIpamOrganizationAdminAccount'
+      { dryRun =
+          Prelude.Nothing,
+        delegatedAdminAccountId =
+          pDelegatedAdminAccountId_
+      }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+enableIpamOrganizationAdminAccount_dryRun :: Lens.Lens' EnableIpamOrganizationAdminAccount (Prelude.Maybe Prelude.Bool)
+enableIpamOrganizationAdminAccount_dryRun = Lens.lens (\EnableIpamOrganizationAdminAccount' {dryRun} -> dryRun) (\s@EnableIpamOrganizationAdminAccount' {} a -> s {dryRun = a} :: EnableIpamOrganizationAdminAccount)
+
+-- | The Organizations member account ID that you want to enable as the IPAM
+-- account.
+enableIpamOrganizationAdminAccount_delegatedAdminAccountId :: Lens.Lens' EnableIpamOrganizationAdminAccount Prelude.Text
+enableIpamOrganizationAdminAccount_delegatedAdminAccountId = Lens.lens (\EnableIpamOrganizationAdminAccount' {delegatedAdminAccountId} -> delegatedAdminAccountId) (\s@EnableIpamOrganizationAdminAccount' {} a -> s {delegatedAdminAccountId = a} :: EnableIpamOrganizationAdminAccount)
+
+instance
+  Core.AWSRequest
+    EnableIpamOrganizationAdminAccount
+  where
+  type
+    AWSResponse EnableIpamOrganizationAdminAccount =
+      EnableIpamOrganizationAdminAccountResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableIpamOrganizationAdminAccountResponse'
+            Prelude.<$> (x Data..@? "success")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableIpamOrganizationAdminAccount
+  where
+  hashWithSalt
+    _salt
+    EnableIpamOrganizationAdminAccount' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` delegatedAdminAccountId
+
+instance
+  Prelude.NFData
+    EnableIpamOrganizationAdminAccount
+  where
+  rnf EnableIpamOrganizationAdminAccount' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf delegatedAdminAccountId
+
+instance
+  Data.ToHeaders
+    EnableIpamOrganizationAdminAccount
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    EnableIpamOrganizationAdminAccount
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    EnableIpamOrganizationAdminAccount
+  where
+  toQuery EnableIpamOrganizationAdminAccount' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "EnableIpamOrganizationAdminAccount" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "DelegatedAdminAccountId"
+          Data.=: delegatedAdminAccountId
+      ]
+
+-- | /See:/ 'newEnableIpamOrganizationAdminAccountResponse' smart constructor.
+data EnableIpamOrganizationAdminAccountResponse = EnableIpamOrganizationAdminAccountResponse'
+  { -- | The result of enabling the IPAM account.
+    success :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableIpamOrganizationAdminAccountResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'success', 'enableIpamOrganizationAdminAccountResponse_success' - The result of enabling the IPAM account.
+--
+-- 'httpStatus', 'enableIpamOrganizationAdminAccountResponse_httpStatus' - The response's http status code.
+newEnableIpamOrganizationAdminAccountResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableIpamOrganizationAdminAccountResponse
+newEnableIpamOrganizationAdminAccountResponse
+  pHttpStatus_ =
+    EnableIpamOrganizationAdminAccountResponse'
+      { success =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The result of enabling the IPAM account.
+enableIpamOrganizationAdminAccountResponse_success :: Lens.Lens' EnableIpamOrganizationAdminAccountResponse (Prelude.Maybe Prelude.Bool)
+enableIpamOrganizationAdminAccountResponse_success = Lens.lens (\EnableIpamOrganizationAdminAccountResponse' {success} -> success) (\s@EnableIpamOrganizationAdminAccountResponse' {} a -> s {success = a} :: EnableIpamOrganizationAdminAccountResponse)
+
+-- | The response's http status code.
+enableIpamOrganizationAdminAccountResponse_httpStatus :: Lens.Lens' EnableIpamOrganizationAdminAccountResponse Prelude.Int
+enableIpamOrganizationAdminAccountResponse_httpStatus = Lens.lens (\EnableIpamOrganizationAdminAccountResponse' {httpStatus} -> httpStatus) (\s@EnableIpamOrganizationAdminAccountResponse' {} a -> s {httpStatus = a} :: EnableIpamOrganizationAdminAccountResponse)
+
+instance
+  Prelude.NFData
+    EnableIpamOrganizationAdminAccountResponse
+  where
+  rnf EnableIpamOrganizationAdminAccountResponse' {..} =
+    Prelude.rnf success
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableReachabilityAnalyzerOrganizationSharing.hs b/gen/Amazonka/EC2/EnableReachabilityAnalyzerOrganizationSharing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableReachabilityAnalyzerOrganizationSharing.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableReachabilityAnalyzerOrganizationSharing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Establishes a trust relationship between Reachability Analyzer and
+-- Organizations. This operation must be performed by the management
+-- account for the organization.
+--
+-- After you establish a trust relationship, a user in the management
+-- account or a delegated administrator account can run a cross-account
+-- analysis using resources from the member accounts.
+module Amazonka.EC2.EnableReachabilityAnalyzerOrganizationSharing
+  ( -- * Creating a Request
+    EnableReachabilityAnalyzerOrganizationSharing (..),
+    newEnableReachabilityAnalyzerOrganizationSharing,
+
+    -- * Request Lenses
+    enableReachabilityAnalyzerOrganizationSharing_dryRun,
+
+    -- * Destructuring the Response
+    EnableReachabilityAnalyzerOrganizationSharingResponse (..),
+    newEnableReachabilityAnalyzerOrganizationSharingResponse,
+
+    -- * Response Lenses
+    enableReachabilityAnalyzerOrganizationSharingResponse_returnValue,
+    enableReachabilityAnalyzerOrganizationSharingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableReachabilityAnalyzerOrganizationSharing' smart constructor.
+data EnableReachabilityAnalyzerOrganizationSharing = EnableReachabilityAnalyzerOrganizationSharing'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableReachabilityAnalyzerOrganizationSharing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableReachabilityAnalyzerOrganizationSharing_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newEnableReachabilityAnalyzerOrganizationSharing ::
+  EnableReachabilityAnalyzerOrganizationSharing
+newEnableReachabilityAnalyzerOrganizationSharing =
+  EnableReachabilityAnalyzerOrganizationSharing'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableReachabilityAnalyzerOrganizationSharing_dryRun :: Lens.Lens' EnableReachabilityAnalyzerOrganizationSharing (Prelude.Maybe Prelude.Bool)
+enableReachabilityAnalyzerOrganizationSharing_dryRun = Lens.lens (\EnableReachabilityAnalyzerOrganizationSharing' {dryRun} -> dryRun) (\s@EnableReachabilityAnalyzerOrganizationSharing' {} a -> s {dryRun = a} :: EnableReachabilityAnalyzerOrganizationSharing)
+
+instance
+  Core.AWSRequest
+    EnableReachabilityAnalyzerOrganizationSharing
+  where
+  type
+    AWSResponse
+      EnableReachabilityAnalyzerOrganizationSharing =
+      EnableReachabilityAnalyzerOrganizationSharingResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableReachabilityAnalyzerOrganizationSharingResponse'
+            Prelude.<$> (x Data..@? "returnValue")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableReachabilityAnalyzerOrganizationSharing
+  where
+  hashWithSalt
+    _salt
+    EnableReachabilityAnalyzerOrganizationSharing' {..} =
+      _salt `Prelude.hashWithSalt` dryRun
+
+instance
+  Prelude.NFData
+    EnableReachabilityAnalyzerOrganizationSharing
+  where
+  rnf
+    EnableReachabilityAnalyzerOrganizationSharing' {..} =
+      Prelude.rnf dryRun
+
+instance
+  Data.ToHeaders
+    EnableReachabilityAnalyzerOrganizationSharing
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    EnableReachabilityAnalyzerOrganizationSharing
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    EnableReachabilityAnalyzerOrganizationSharing
+  where
+  toQuery
+    EnableReachabilityAnalyzerOrganizationSharing' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "EnableReachabilityAnalyzerOrganizationSharing" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun
+        ]
+
+-- | /See:/ 'newEnableReachabilityAnalyzerOrganizationSharingResponse' smart constructor.
+data EnableReachabilityAnalyzerOrganizationSharingResponse = EnableReachabilityAnalyzerOrganizationSharingResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableReachabilityAnalyzerOrganizationSharingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnValue', 'enableReachabilityAnalyzerOrganizationSharingResponse_returnValue' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'httpStatus', 'enableReachabilityAnalyzerOrganizationSharingResponse_httpStatus' - The response's http status code.
+newEnableReachabilityAnalyzerOrganizationSharingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableReachabilityAnalyzerOrganizationSharingResponse
+newEnableReachabilityAnalyzerOrganizationSharingResponse
+  pHttpStatus_ =
+    EnableReachabilityAnalyzerOrganizationSharingResponse'
+      { returnValue =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+enableReachabilityAnalyzerOrganizationSharingResponse_returnValue :: Lens.Lens' EnableReachabilityAnalyzerOrganizationSharingResponse (Prelude.Maybe Prelude.Bool)
+enableReachabilityAnalyzerOrganizationSharingResponse_returnValue = Lens.lens (\EnableReachabilityAnalyzerOrganizationSharingResponse' {returnValue} -> returnValue) (\s@EnableReachabilityAnalyzerOrganizationSharingResponse' {} a -> s {returnValue = a} :: EnableReachabilityAnalyzerOrganizationSharingResponse)
+
+-- | The response's http status code.
+enableReachabilityAnalyzerOrganizationSharingResponse_httpStatus :: Lens.Lens' EnableReachabilityAnalyzerOrganizationSharingResponse Prelude.Int
+enableReachabilityAnalyzerOrganizationSharingResponse_httpStatus = Lens.lens (\EnableReachabilityAnalyzerOrganizationSharingResponse' {httpStatus} -> httpStatus) (\s@EnableReachabilityAnalyzerOrganizationSharingResponse' {} a -> s {httpStatus = a} :: EnableReachabilityAnalyzerOrganizationSharingResponse)
+
+instance
+  Prelude.NFData
+    EnableReachabilityAnalyzerOrganizationSharingResponse
+  where
+  rnf
+    EnableReachabilityAnalyzerOrganizationSharingResponse' {..} =
+      Prelude.rnf returnValue
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableSerialConsoleAccess.hs b/gen/Amazonka/EC2/EnableSerialConsoleAccess.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableSerialConsoleAccess.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableSerialConsoleAccess
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables access to the EC2 serial console of all instances for your
+-- account. By default, access to the EC2 serial console is disabled for
+-- your account. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access Manage account access to the EC2 serial console>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.EnableSerialConsoleAccess
+  ( -- * Creating a Request
+    EnableSerialConsoleAccess (..),
+    newEnableSerialConsoleAccess,
+
+    -- * Request Lenses
+    enableSerialConsoleAccess_dryRun,
+
+    -- * Destructuring the Response
+    EnableSerialConsoleAccessResponse (..),
+    newEnableSerialConsoleAccessResponse,
+
+    -- * Response Lenses
+    enableSerialConsoleAccessResponse_serialConsoleAccessEnabled,
+    enableSerialConsoleAccessResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableSerialConsoleAccess' smart constructor.
+data EnableSerialConsoleAccess = EnableSerialConsoleAccess'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableSerialConsoleAccess' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableSerialConsoleAccess_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newEnableSerialConsoleAccess ::
+  EnableSerialConsoleAccess
+newEnableSerialConsoleAccess =
+  EnableSerialConsoleAccess'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableSerialConsoleAccess_dryRun :: Lens.Lens' EnableSerialConsoleAccess (Prelude.Maybe Prelude.Bool)
+enableSerialConsoleAccess_dryRun = Lens.lens (\EnableSerialConsoleAccess' {dryRun} -> dryRun) (\s@EnableSerialConsoleAccess' {} a -> s {dryRun = a} :: EnableSerialConsoleAccess)
+
+instance Core.AWSRequest EnableSerialConsoleAccess where
+  type
+    AWSResponse EnableSerialConsoleAccess =
+      EnableSerialConsoleAccessResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableSerialConsoleAccessResponse'
+            Prelude.<$> (x Data..@? "serialConsoleAccessEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableSerialConsoleAccess where
+  hashWithSalt _salt EnableSerialConsoleAccess' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData EnableSerialConsoleAccess where
+  rnf EnableSerialConsoleAccess' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders EnableSerialConsoleAccess where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableSerialConsoleAccess where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableSerialConsoleAccess where
+  toQuery EnableSerialConsoleAccess' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableSerialConsoleAccess" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newEnableSerialConsoleAccessResponse' smart constructor.
+data EnableSerialConsoleAccessResponse = EnableSerialConsoleAccessResponse'
+  { -- | If @true@, access to the EC2 serial console of all instances is enabled
+    -- for your account. If @false@, access to the EC2 serial console of all
+    -- instances is disabled for your account.
+    serialConsoleAccessEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableSerialConsoleAccessResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serialConsoleAccessEnabled', 'enableSerialConsoleAccessResponse_serialConsoleAccessEnabled' - If @true@, access to the EC2 serial console of all instances is enabled
+-- for your account. If @false@, access to the EC2 serial console of all
+-- instances is disabled for your account.
+--
+-- 'httpStatus', 'enableSerialConsoleAccessResponse_httpStatus' - The response's http status code.
+newEnableSerialConsoleAccessResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableSerialConsoleAccessResponse
+newEnableSerialConsoleAccessResponse pHttpStatus_ =
+  EnableSerialConsoleAccessResponse'
+    { serialConsoleAccessEnabled =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If @true@, access to the EC2 serial console of all instances is enabled
+-- for your account. If @false@, access to the EC2 serial console of all
+-- instances is disabled for your account.
+enableSerialConsoleAccessResponse_serialConsoleAccessEnabled :: Lens.Lens' EnableSerialConsoleAccessResponse (Prelude.Maybe Prelude.Bool)
+enableSerialConsoleAccessResponse_serialConsoleAccessEnabled = Lens.lens (\EnableSerialConsoleAccessResponse' {serialConsoleAccessEnabled} -> serialConsoleAccessEnabled) (\s@EnableSerialConsoleAccessResponse' {} a -> s {serialConsoleAccessEnabled = a} :: EnableSerialConsoleAccessResponse)
+
+-- | The response's http status code.
+enableSerialConsoleAccessResponse_httpStatus :: Lens.Lens' EnableSerialConsoleAccessResponse Prelude.Int
+enableSerialConsoleAccessResponse_httpStatus = Lens.lens (\EnableSerialConsoleAccessResponse' {httpStatus} -> httpStatus) (\s@EnableSerialConsoleAccessResponse' {} a -> s {httpStatus = a} :: EnableSerialConsoleAccessResponse)
+
+instance
+  Prelude.NFData
+    EnableSerialConsoleAccessResponse
+  where
+  rnf EnableSerialConsoleAccessResponse' {..} =
+    Prelude.rnf serialConsoleAccessEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableTransitGatewayRouteTablePropagation.hs b/gen/Amazonka/EC2/EnableTransitGatewayRouteTablePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableTransitGatewayRouteTablePropagation.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableTransitGatewayRouteTablePropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables the specified attachment to propagate routes to the specified
+-- propagation route table.
+module Amazonka.EC2.EnableTransitGatewayRouteTablePropagation
+  ( -- * Creating a Request
+    EnableTransitGatewayRouteTablePropagation (..),
+    newEnableTransitGatewayRouteTablePropagation,
+
+    -- * Request Lenses
+    enableTransitGatewayRouteTablePropagation_dryRun,
+    enableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId,
+    enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId,
+    enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    EnableTransitGatewayRouteTablePropagationResponse (..),
+    newEnableTransitGatewayRouteTablePropagationResponse,
+
+    -- * Response Lenses
+    enableTransitGatewayRouteTablePropagationResponse_propagation,
+    enableTransitGatewayRouteTablePropagationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableTransitGatewayRouteTablePropagation' smart constructor.
+data EnableTransitGatewayRouteTablePropagation = EnableTransitGatewayRouteTablePropagation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the propagation route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableTransitGatewayRouteTablePropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableTransitGatewayRouteTablePropagation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'enableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId' - The ID of the transit gateway route table announcement.
+--
+-- 'transitGatewayRouteTableId', 'enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId' - The ID of the propagation route table.
+newEnableTransitGatewayRouteTablePropagation ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  EnableTransitGatewayRouteTablePropagation
+newEnableTransitGatewayRouteTablePropagation
+  pTransitGatewayRouteTableId_ =
+    EnableTransitGatewayRouteTablePropagation'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          Prelude.Nothing,
+        transitGatewayRouteTableAnnouncementId =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableTransitGatewayRouteTablePropagation_dryRun :: Lens.Lens' EnableTransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Bool)
+enableTransitGatewayRouteTablePropagation_dryRun = Lens.lens (\EnableTransitGatewayRouteTablePropagation' {dryRun} -> dryRun) (\s@EnableTransitGatewayRouteTablePropagation' {} a -> s {dryRun = a} :: EnableTransitGatewayRouteTablePropagation)
+
+-- | The ID of the attachment.
+enableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId :: Lens.Lens' EnableTransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+enableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId = Lens.lens (\EnableTransitGatewayRouteTablePropagation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@EnableTransitGatewayRouteTablePropagation' {} a -> s {transitGatewayAttachmentId = a} :: EnableTransitGatewayRouteTablePropagation)
+
+-- | The ID of the transit gateway route table announcement.
+enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId :: Lens.Lens' EnableTransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId = Lens.lens (\EnableTransitGatewayRouteTablePropagation' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@EnableTransitGatewayRouteTablePropagation' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: EnableTransitGatewayRouteTablePropagation)
+
+-- | The ID of the propagation route table.
+enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId :: Lens.Lens' EnableTransitGatewayRouteTablePropagation Prelude.Text
+enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId = Lens.lens (\EnableTransitGatewayRouteTablePropagation' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@EnableTransitGatewayRouteTablePropagation' {} a -> s {transitGatewayRouteTableId = a} :: EnableTransitGatewayRouteTablePropagation)
+
+instance
+  Core.AWSRequest
+    EnableTransitGatewayRouteTablePropagation
+  where
+  type
+    AWSResponse
+      EnableTransitGatewayRouteTablePropagation =
+      EnableTransitGatewayRouteTablePropagationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableTransitGatewayRouteTablePropagationResponse'
+            Prelude.<$> (x Data..@? "propagation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableTransitGatewayRouteTablePropagation
+  where
+  hashWithSalt
+    _salt
+    EnableTransitGatewayRouteTablePropagation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    EnableTransitGatewayRouteTablePropagation
+  where
+  rnf EnableTransitGatewayRouteTablePropagation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance
+  Data.ToHeaders
+    EnableTransitGatewayRouteTablePropagation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    EnableTransitGatewayRouteTablePropagation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    EnableTransitGatewayRouteTablePropagation
+  where
+  toQuery
+    EnableTransitGatewayRouteTablePropagation' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "EnableTransitGatewayRouteTablePropagation" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "TransitGatewayAttachmentId"
+            Data.=: transitGatewayAttachmentId,
+          "TransitGatewayRouteTableAnnouncementId"
+            Data.=: transitGatewayRouteTableAnnouncementId,
+          "TransitGatewayRouteTableId"
+            Data.=: transitGatewayRouteTableId
+        ]
+
+-- | /See:/ 'newEnableTransitGatewayRouteTablePropagationResponse' smart constructor.
+data EnableTransitGatewayRouteTablePropagationResponse = EnableTransitGatewayRouteTablePropagationResponse'
+  { -- | Information about route propagation.
+    propagation :: Prelude.Maybe TransitGatewayPropagation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableTransitGatewayRouteTablePropagationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'propagation', 'enableTransitGatewayRouteTablePropagationResponse_propagation' - Information about route propagation.
+--
+-- 'httpStatus', 'enableTransitGatewayRouteTablePropagationResponse_httpStatus' - The response's http status code.
+newEnableTransitGatewayRouteTablePropagationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableTransitGatewayRouteTablePropagationResponse
+newEnableTransitGatewayRouteTablePropagationResponse
+  pHttpStatus_ =
+    EnableTransitGatewayRouteTablePropagationResponse'
+      { propagation =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about route propagation.
+enableTransitGatewayRouteTablePropagationResponse_propagation :: Lens.Lens' EnableTransitGatewayRouteTablePropagationResponse (Prelude.Maybe TransitGatewayPropagation)
+enableTransitGatewayRouteTablePropagationResponse_propagation = Lens.lens (\EnableTransitGatewayRouteTablePropagationResponse' {propagation} -> propagation) (\s@EnableTransitGatewayRouteTablePropagationResponse' {} a -> s {propagation = a} :: EnableTransitGatewayRouteTablePropagationResponse)
+
+-- | The response's http status code.
+enableTransitGatewayRouteTablePropagationResponse_httpStatus :: Lens.Lens' EnableTransitGatewayRouteTablePropagationResponse Prelude.Int
+enableTransitGatewayRouteTablePropagationResponse_httpStatus = Lens.lens (\EnableTransitGatewayRouteTablePropagationResponse' {httpStatus} -> httpStatus) (\s@EnableTransitGatewayRouteTablePropagationResponse' {} a -> s {httpStatus = a} :: EnableTransitGatewayRouteTablePropagationResponse)
+
+instance
+  Prelude.NFData
+    EnableTransitGatewayRouteTablePropagationResponse
+  where
+  rnf
+    EnableTransitGatewayRouteTablePropagationResponse' {..} =
+      Prelude.rnf propagation
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableVgwRoutePropagation.hs b/gen/Amazonka/EC2/EnableVgwRoutePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableVgwRoutePropagation.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableVgwRoutePropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables a virtual private gateway (VGW) to propagate routes to the
+-- specified route table of a VPC.
+module Amazonka.EC2.EnableVgwRoutePropagation
+  ( -- * Creating a Request
+    EnableVgwRoutePropagation (..),
+    newEnableVgwRoutePropagation,
+
+    -- * Request Lenses
+    enableVgwRoutePropagation_dryRun,
+    enableVgwRoutePropagation_gatewayId,
+    enableVgwRoutePropagation_routeTableId,
+
+    -- * Destructuring the Response
+    EnableVgwRoutePropagationResponse (..),
+    newEnableVgwRoutePropagationResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for EnableVgwRoutePropagation.
+--
+-- /See:/ 'newEnableVgwRoutePropagation' smart constructor.
+data EnableVgwRoutePropagation = EnableVgwRoutePropagation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the virtual private gateway that is attached to a VPC. The
+    -- virtual private gateway must be attached to the same VPC that the
+    -- routing tables are associated with.
+    gatewayId :: Prelude.Text,
+    -- | The ID of the route table. The routing table must be associated with the
+    -- same VPC that the virtual private gateway is attached to.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVgwRoutePropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableVgwRoutePropagation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'gatewayId', 'enableVgwRoutePropagation_gatewayId' - The ID of the virtual private gateway that is attached to a VPC. The
+-- virtual private gateway must be attached to the same VPC that the
+-- routing tables are associated with.
+--
+-- 'routeTableId', 'enableVgwRoutePropagation_routeTableId' - The ID of the route table. The routing table must be associated with the
+-- same VPC that the virtual private gateway is attached to.
+newEnableVgwRoutePropagation ::
+  -- | 'gatewayId'
+  Prelude.Text ->
+  -- | 'routeTableId'
+  Prelude.Text ->
+  EnableVgwRoutePropagation
+newEnableVgwRoutePropagation
+  pGatewayId_
+  pRouteTableId_ =
+    EnableVgwRoutePropagation'
+      { dryRun =
+          Prelude.Nothing,
+        gatewayId = pGatewayId_,
+        routeTableId = pRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableVgwRoutePropagation_dryRun :: Lens.Lens' EnableVgwRoutePropagation (Prelude.Maybe Prelude.Bool)
+enableVgwRoutePropagation_dryRun = Lens.lens (\EnableVgwRoutePropagation' {dryRun} -> dryRun) (\s@EnableVgwRoutePropagation' {} a -> s {dryRun = a} :: EnableVgwRoutePropagation)
+
+-- | The ID of the virtual private gateway that is attached to a VPC. The
+-- virtual private gateway must be attached to the same VPC that the
+-- routing tables are associated with.
+enableVgwRoutePropagation_gatewayId :: Lens.Lens' EnableVgwRoutePropagation Prelude.Text
+enableVgwRoutePropagation_gatewayId = Lens.lens (\EnableVgwRoutePropagation' {gatewayId} -> gatewayId) (\s@EnableVgwRoutePropagation' {} a -> s {gatewayId = a} :: EnableVgwRoutePropagation)
+
+-- | The ID of the route table. The routing table must be associated with the
+-- same VPC that the virtual private gateway is attached to.
+enableVgwRoutePropagation_routeTableId :: Lens.Lens' EnableVgwRoutePropagation Prelude.Text
+enableVgwRoutePropagation_routeTableId = Lens.lens (\EnableVgwRoutePropagation' {routeTableId} -> routeTableId) (\s@EnableVgwRoutePropagation' {} a -> s {routeTableId = a} :: EnableVgwRoutePropagation)
+
+instance Core.AWSRequest EnableVgwRoutePropagation where
+  type
+    AWSResponse EnableVgwRoutePropagation =
+      EnableVgwRoutePropagationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      EnableVgwRoutePropagationResponse'
+
+instance Prelude.Hashable EnableVgwRoutePropagation where
+  hashWithSalt _salt EnableVgwRoutePropagation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData EnableVgwRoutePropagation where
+  rnf EnableVgwRoutePropagation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders EnableVgwRoutePropagation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableVgwRoutePropagation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableVgwRoutePropagation where
+  toQuery EnableVgwRoutePropagation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableVgwRoutePropagation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GatewayId" Data.=: gatewayId,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newEnableVgwRoutePropagationResponse' smart constructor.
+data EnableVgwRoutePropagationResponse = EnableVgwRoutePropagationResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVgwRoutePropagationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newEnableVgwRoutePropagationResponse ::
+  EnableVgwRoutePropagationResponse
+newEnableVgwRoutePropagationResponse =
+  EnableVgwRoutePropagationResponse'
+
+instance
+  Prelude.NFData
+    EnableVgwRoutePropagationResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/EnableVolumeIO.hs b/gen/Amazonka/EC2/EnableVolumeIO.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableVolumeIO.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableVolumeIO
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables I\/O operations for a volume that had I\/O operations disabled
+-- because the data on the volume was potentially inconsistent.
+module Amazonka.EC2.EnableVolumeIO
+  ( -- * Creating a Request
+    EnableVolumeIO (..),
+    newEnableVolumeIO,
+
+    -- * Request Lenses
+    enableVolumeIO_dryRun,
+    enableVolumeIO_volumeId,
+
+    -- * Destructuring the Response
+    EnableVolumeIOResponse (..),
+    newEnableVolumeIOResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableVolumeIO' smart constructor.
+data EnableVolumeIO = EnableVolumeIO'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVolumeIO' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableVolumeIO_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'volumeId', 'enableVolumeIO_volumeId' - The ID of the volume.
+newEnableVolumeIO ::
+  -- | 'volumeId'
+  Prelude.Text ->
+  EnableVolumeIO
+newEnableVolumeIO pVolumeId_ =
+  EnableVolumeIO'
+    { dryRun = Prelude.Nothing,
+      volumeId = pVolumeId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableVolumeIO_dryRun :: Lens.Lens' EnableVolumeIO (Prelude.Maybe Prelude.Bool)
+enableVolumeIO_dryRun = Lens.lens (\EnableVolumeIO' {dryRun} -> dryRun) (\s@EnableVolumeIO' {} a -> s {dryRun = a} :: EnableVolumeIO)
+
+-- | The ID of the volume.
+enableVolumeIO_volumeId :: Lens.Lens' EnableVolumeIO Prelude.Text
+enableVolumeIO_volumeId = Lens.lens (\EnableVolumeIO' {volumeId} -> volumeId) (\s@EnableVolumeIO' {} a -> s {volumeId = a} :: EnableVolumeIO)
+
+instance Core.AWSRequest EnableVolumeIO where
+  type
+    AWSResponse EnableVolumeIO =
+      EnableVolumeIOResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull EnableVolumeIOResponse'
+
+instance Prelude.Hashable EnableVolumeIO where
+  hashWithSalt _salt EnableVolumeIO' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData EnableVolumeIO where
+  rnf EnableVolumeIO' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders EnableVolumeIO where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableVolumeIO where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableVolumeIO where
+  toQuery EnableVolumeIO' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableVolumeIO" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VolumeId" Data.=: volumeId
+      ]
+
+-- | /See:/ 'newEnableVolumeIOResponse' smart constructor.
+data EnableVolumeIOResponse = EnableVolumeIOResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVolumeIOResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newEnableVolumeIOResponse ::
+  EnableVolumeIOResponse
+newEnableVolumeIOResponse = EnableVolumeIOResponse'
+
+instance Prelude.NFData EnableVolumeIOResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/EnableVpcClassicLink.hs b/gen/Amazonka/EC2/EnableVpcClassicLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableVpcClassicLink.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableVpcClassicLink
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Enables a VPC for ClassicLink. You can then link EC2-Classic instances
+-- to your ClassicLink-enabled VPC to allow communication over private IP
+-- addresses. You cannot enable your VPC for ClassicLink if any of your VPC
+-- route tables have existing routes for address ranges within the
+-- @10.0.0.0\/8@ IP address range, excluding local routes for VPCs in the
+-- @10.0.0.0\/16@ and @10.1.0.0\/16@ IP address ranges. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.EnableVpcClassicLink
+  ( -- * Creating a Request
+    EnableVpcClassicLink (..),
+    newEnableVpcClassicLink,
+
+    -- * Request Lenses
+    enableVpcClassicLink_dryRun,
+    enableVpcClassicLink_vpcId,
+
+    -- * Destructuring the Response
+    EnableVpcClassicLinkResponse (..),
+    newEnableVpcClassicLinkResponse,
+
+    -- * Response Lenses
+    enableVpcClassicLinkResponse_return,
+    enableVpcClassicLinkResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableVpcClassicLink' smart constructor.
+data EnableVpcClassicLink = EnableVpcClassicLink'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVpcClassicLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'enableVpcClassicLink_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcId', 'enableVpcClassicLink_vpcId' - The ID of the VPC.
+newEnableVpcClassicLink ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  EnableVpcClassicLink
+newEnableVpcClassicLink pVpcId_ =
+  EnableVpcClassicLink'
+    { dryRun = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+enableVpcClassicLink_dryRun :: Lens.Lens' EnableVpcClassicLink (Prelude.Maybe Prelude.Bool)
+enableVpcClassicLink_dryRun = Lens.lens (\EnableVpcClassicLink' {dryRun} -> dryRun) (\s@EnableVpcClassicLink' {} a -> s {dryRun = a} :: EnableVpcClassicLink)
+
+-- | The ID of the VPC.
+enableVpcClassicLink_vpcId :: Lens.Lens' EnableVpcClassicLink Prelude.Text
+enableVpcClassicLink_vpcId = Lens.lens (\EnableVpcClassicLink' {vpcId} -> vpcId) (\s@EnableVpcClassicLink' {} a -> s {vpcId = a} :: EnableVpcClassicLink)
+
+instance Core.AWSRequest EnableVpcClassicLink where
+  type
+    AWSResponse EnableVpcClassicLink =
+      EnableVpcClassicLinkResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableVpcClassicLinkResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableVpcClassicLink where
+  hashWithSalt _salt EnableVpcClassicLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData EnableVpcClassicLink where
+  rnf EnableVpcClassicLink' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders EnableVpcClassicLink where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableVpcClassicLink where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableVpcClassicLink where
+  toQuery EnableVpcClassicLink' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("EnableVpcClassicLink" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newEnableVpcClassicLinkResponse' smart constructor.
+data EnableVpcClassicLinkResponse = EnableVpcClassicLinkResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVpcClassicLinkResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'enableVpcClassicLinkResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'enableVpcClassicLinkResponse_httpStatus' - The response's http status code.
+newEnableVpcClassicLinkResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableVpcClassicLinkResponse
+newEnableVpcClassicLinkResponse pHttpStatus_ =
+  EnableVpcClassicLinkResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+enableVpcClassicLinkResponse_return :: Lens.Lens' EnableVpcClassicLinkResponse (Prelude.Maybe Prelude.Bool)
+enableVpcClassicLinkResponse_return = Lens.lens (\EnableVpcClassicLinkResponse' {return'} -> return') (\s@EnableVpcClassicLinkResponse' {} a -> s {return' = a} :: EnableVpcClassicLinkResponse)
+
+-- | The response's http status code.
+enableVpcClassicLinkResponse_httpStatus :: Lens.Lens' EnableVpcClassicLinkResponse Prelude.Int
+enableVpcClassicLinkResponse_httpStatus = Lens.lens (\EnableVpcClassicLinkResponse' {httpStatus} -> httpStatus) (\s@EnableVpcClassicLinkResponse' {} a -> s {httpStatus = a} :: EnableVpcClassicLinkResponse)
+
+instance Prelude.NFData EnableVpcClassicLinkResponse where
+  rnf EnableVpcClassicLinkResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/EnableVpcClassicLinkDnsSupport.hs b/gen/Amazonka/EC2/EnableVpcClassicLinkDnsSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/EnableVpcClassicLinkDnsSupport.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.EnableVpcClassicLinkDnsSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Enables a VPC to support DNS hostname resolution for ClassicLink. If
+-- enabled, the DNS hostname of a linked EC2-Classic instance resolves to
+-- its private IP address when addressed from an instance in the VPC to
+-- which it\'s linked. Similarly, the DNS hostname of an instance in a VPC
+-- resolves to its private IP address when addressed from a linked
+-- EC2-Classic instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- You must specify a VPC ID in the request.
+module Amazonka.EC2.EnableVpcClassicLinkDnsSupport
+  ( -- * Creating a Request
+    EnableVpcClassicLinkDnsSupport (..),
+    newEnableVpcClassicLinkDnsSupport,
+
+    -- * Request Lenses
+    enableVpcClassicLinkDnsSupport_vpcId,
+
+    -- * Destructuring the Response
+    EnableVpcClassicLinkDnsSupportResponse (..),
+    newEnableVpcClassicLinkDnsSupportResponse,
+
+    -- * Response Lenses
+    enableVpcClassicLinkDnsSupportResponse_return,
+    enableVpcClassicLinkDnsSupportResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableVpcClassicLinkDnsSupport' smart constructor.
+data EnableVpcClassicLinkDnsSupport = EnableVpcClassicLinkDnsSupport'
+  { -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVpcClassicLinkDnsSupport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpcId', 'enableVpcClassicLinkDnsSupport_vpcId' - The ID of the VPC.
+newEnableVpcClassicLinkDnsSupport ::
+  EnableVpcClassicLinkDnsSupport
+newEnableVpcClassicLinkDnsSupport =
+  EnableVpcClassicLinkDnsSupport'
+    { vpcId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the VPC.
+enableVpcClassicLinkDnsSupport_vpcId :: Lens.Lens' EnableVpcClassicLinkDnsSupport (Prelude.Maybe Prelude.Text)
+enableVpcClassicLinkDnsSupport_vpcId = Lens.lens (\EnableVpcClassicLinkDnsSupport' {vpcId} -> vpcId) (\s@EnableVpcClassicLinkDnsSupport' {} a -> s {vpcId = a} :: EnableVpcClassicLinkDnsSupport)
+
+instance
+  Core.AWSRequest
+    EnableVpcClassicLinkDnsSupport
+  where
+  type
+    AWSResponse EnableVpcClassicLinkDnsSupport =
+      EnableVpcClassicLinkDnsSupportResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          EnableVpcClassicLinkDnsSupportResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    EnableVpcClassicLinkDnsSupport
+  where
+  hashWithSalt
+    _salt
+    EnableVpcClassicLinkDnsSupport' {..} =
+      _salt `Prelude.hashWithSalt` vpcId
+
+instance
+  Prelude.NFData
+    EnableVpcClassicLinkDnsSupport
+  where
+  rnf EnableVpcClassicLinkDnsSupport' {..} =
+    Prelude.rnf vpcId
+
+instance
+  Data.ToHeaders
+    EnableVpcClassicLinkDnsSupport
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath EnableVpcClassicLinkDnsSupport where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableVpcClassicLinkDnsSupport where
+  toQuery EnableVpcClassicLinkDnsSupport' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "EnableVpcClassicLinkDnsSupport" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newEnableVpcClassicLinkDnsSupportResponse' smart constructor.
+data EnableVpcClassicLinkDnsSupportResponse = EnableVpcClassicLinkDnsSupportResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableVpcClassicLinkDnsSupportResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'enableVpcClassicLinkDnsSupportResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'enableVpcClassicLinkDnsSupportResponse_httpStatus' - The response's http status code.
+newEnableVpcClassicLinkDnsSupportResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableVpcClassicLinkDnsSupportResponse
+newEnableVpcClassicLinkDnsSupportResponse
+  pHttpStatus_ =
+    EnableVpcClassicLinkDnsSupportResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+enableVpcClassicLinkDnsSupportResponse_return :: Lens.Lens' EnableVpcClassicLinkDnsSupportResponse (Prelude.Maybe Prelude.Bool)
+enableVpcClassicLinkDnsSupportResponse_return = Lens.lens (\EnableVpcClassicLinkDnsSupportResponse' {return'} -> return') (\s@EnableVpcClassicLinkDnsSupportResponse' {} a -> s {return' = a} :: EnableVpcClassicLinkDnsSupportResponse)
+
+-- | The response's http status code.
+enableVpcClassicLinkDnsSupportResponse_httpStatus :: Lens.Lens' EnableVpcClassicLinkDnsSupportResponse Prelude.Int
+enableVpcClassicLinkDnsSupportResponse_httpStatus = Lens.lens (\EnableVpcClassicLinkDnsSupportResponse' {httpStatus} -> httpStatus) (\s@EnableVpcClassicLinkDnsSupportResponse' {} a -> s {httpStatus = a} :: EnableVpcClassicLinkDnsSupportResponse)
+
+instance
+  Prelude.NFData
+    EnableVpcClassicLinkDnsSupportResponse
+  where
+  rnf EnableVpcClassicLinkDnsSupportResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ExportClientVpnClientCertificateRevocationList.hs b/gen/Amazonka/EC2/ExportClientVpnClientCertificateRevocationList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ExportClientVpnClientCertificateRevocationList.hs
@@ -0,0 +1,230 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ExportClientVpnClientCertificateRevocationList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Downloads the client certificate revocation list for the specified
+-- Client VPN endpoint.
+module Amazonka.EC2.ExportClientVpnClientCertificateRevocationList
+  ( -- * Creating a Request
+    ExportClientVpnClientCertificateRevocationList (..),
+    newExportClientVpnClientCertificateRevocationList,
+
+    -- * Request Lenses
+    exportClientVpnClientCertificateRevocationList_dryRun,
+    exportClientVpnClientCertificateRevocationList_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    ExportClientVpnClientCertificateRevocationListResponse (..),
+    newExportClientVpnClientCertificateRevocationListResponse,
+
+    -- * Response Lenses
+    exportClientVpnClientCertificateRevocationListResponse_certificateRevocationList,
+    exportClientVpnClientCertificateRevocationListResponse_status,
+    exportClientVpnClientCertificateRevocationListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportClientVpnClientCertificateRevocationList' smart constructor.
+data ExportClientVpnClientCertificateRevocationList = ExportClientVpnClientCertificateRevocationList'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportClientVpnClientCertificateRevocationList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'exportClientVpnClientCertificateRevocationList_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'exportClientVpnClientCertificateRevocationList_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+newExportClientVpnClientCertificateRevocationList ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  ExportClientVpnClientCertificateRevocationList
+newExportClientVpnClientCertificateRevocationList
+  pClientVpnEndpointId_ =
+    ExportClientVpnClientCertificateRevocationList'
+      { dryRun =
+          Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+exportClientVpnClientCertificateRevocationList_dryRun :: Lens.Lens' ExportClientVpnClientCertificateRevocationList (Prelude.Maybe Prelude.Bool)
+exportClientVpnClientCertificateRevocationList_dryRun = Lens.lens (\ExportClientVpnClientCertificateRevocationList' {dryRun} -> dryRun) (\s@ExportClientVpnClientCertificateRevocationList' {} a -> s {dryRun = a} :: ExportClientVpnClientCertificateRevocationList)
+
+-- | The ID of the Client VPN endpoint.
+exportClientVpnClientCertificateRevocationList_clientVpnEndpointId :: Lens.Lens' ExportClientVpnClientCertificateRevocationList Prelude.Text
+exportClientVpnClientCertificateRevocationList_clientVpnEndpointId = Lens.lens (\ExportClientVpnClientCertificateRevocationList' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ExportClientVpnClientCertificateRevocationList' {} a -> s {clientVpnEndpointId = a} :: ExportClientVpnClientCertificateRevocationList)
+
+instance
+  Core.AWSRequest
+    ExportClientVpnClientCertificateRevocationList
+  where
+  type
+    AWSResponse
+      ExportClientVpnClientCertificateRevocationList =
+      ExportClientVpnClientCertificateRevocationListResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ExportClientVpnClientCertificateRevocationListResponse'
+            Prelude.<$> (x Data..@? "certificateRevocationList")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ExportClientVpnClientCertificateRevocationList
+  where
+  hashWithSalt
+    _salt
+    ExportClientVpnClientCertificateRevocationList' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance
+  Prelude.NFData
+    ExportClientVpnClientCertificateRevocationList
+  where
+  rnf
+    ExportClientVpnClientCertificateRevocationList' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance
+  Data.ToHeaders
+    ExportClientVpnClientCertificateRevocationList
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ExportClientVpnClientCertificateRevocationList
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ExportClientVpnClientCertificateRevocationList
+  where
+  toQuery
+    ExportClientVpnClientCertificateRevocationList' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "ExportClientVpnClientCertificateRevocationList" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+        ]
+
+-- | /See:/ 'newExportClientVpnClientCertificateRevocationListResponse' smart constructor.
+data ExportClientVpnClientCertificateRevocationListResponse = ExportClientVpnClientCertificateRevocationListResponse'
+  { -- | Information about the client certificate revocation list.
+    certificateRevocationList :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the client certificate revocation list.
+    status :: Prelude.Maybe ClientCertificateRevocationListStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportClientVpnClientCertificateRevocationListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateRevocationList', 'exportClientVpnClientCertificateRevocationListResponse_certificateRevocationList' - Information about the client certificate revocation list.
+--
+-- 'status', 'exportClientVpnClientCertificateRevocationListResponse_status' - The current state of the client certificate revocation list.
+--
+-- 'httpStatus', 'exportClientVpnClientCertificateRevocationListResponse_httpStatus' - The response's http status code.
+newExportClientVpnClientCertificateRevocationListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportClientVpnClientCertificateRevocationListResponse
+newExportClientVpnClientCertificateRevocationListResponse
+  pHttpStatus_ =
+    ExportClientVpnClientCertificateRevocationListResponse'
+      { certificateRevocationList =
+          Prelude.Nothing,
+        status =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the client certificate revocation list.
+exportClientVpnClientCertificateRevocationListResponse_certificateRevocationList :: Lens.Lens' ExportClientVpnClientCertificateRevocationListResponse (Prelude.Maybe Prelude.Text)
+exportClientVpnClientCertificateRevocationListResponse_certificateRevocationList = Lens.lens (\ExportClientVpnClientCertificateRevocationListResponse' {certificateRevocationList} -> certificateRevocationList) (\s@ExportClientVpnClientCertificateRevocationListResponse' {} a -> s {certificateRevocationList = a} :: ExportClientVpnClientCertificateRevocationListResponse)
+
+-- | The current state of the client certificate revocation list.
+exportClientVpnClientCertificateRevocationListResponse_status :: Lens.Lens' ExportClientVpnClientCertificateRevocationListResponse (Prelude.Maybe ClientCertificateRevocationListStatus)
+exportClientVpnClientCertificateRevocationListResponse_status = Lens.lens (\ExportClientVpnClientCertificateRevocationListResponse' {status} -> status) (\s@ExportClientVpnClientCertificateRevocationListResponse' {} a -> s {status = a} :: ExportClientVpnClientCertificateRevocationListResponse)
+
+-- | The response's http status code.
+exportClientVpnClientCertificateRevocationListResponse_httpStatus :: Lens.Lens' ExportClientVpnClientCertificateRevocationListResponse Prelude.Int
+exportClientVpnClientCertificateRevocationListResponse_httpStatus = Lens.lens (\ExportClientVpnClientCertificateRevocationListResponse' {httpStatus} -> httpStatus) (\s@ExportClientVpnClientCertificateRevocationListResponse' {} a -> s {httpStatus = a} :: ExportClientVpnClientCertificateRevocationListResponse)
+
+instance
+  Prelude.NFData
+    ExportClientVpnClientCertificateRevocationListResponse
+  where
+  rnf
+    ExportClientVpnClientCertificateRevocationListResponse' {..} =
+      Prelude.rnf certificateRevocationList
+        `Prelude.seq` Prelude.rnf status
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ExportClientVpnClientConfiguration.hs b/gen/Amazonka/EC2/ExportClientVpnClientConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ExportClientVpnClientConfiguration.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ExportClientVpnClientConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+module Amazonka.EC2.ExportClientVpnClientConfiguration
+  ( -- * Creating a Request
+    ExportClientVpnClientConfiguration (..),
+    newExportClientVpnClientConfiguration,
+
+    -- * Request Lenses
+    exportClientVpnClientConfiguration_dryRun,
+    exportClientVpnClientConfiguration_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    ExportClientVpnClientConfigurationResponse (..),
+    newExportClientVpnClientConfigurationResponse,
+
+    -- * Response Lenses
+    exportClientVpnClientConfigurationResponse_clientConfiguration,
+    exportClientVpnClientConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportClientVpnClientConfiguration' smart constructor.
+data ExportClientVpnClientConfiguration = ExportClientVpnClientConfiguration'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportClientVpnClientConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'exportClientVpnClientConfiguration_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'exportClientVpnClientConfiguration_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+newExportClientVpnClientConfiguration ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  ExportClientVpnClientConfiguration
+newExportClientVpnClientConfiguration
+  pClientVpnEndpointId_ =
+    ExportClientVpnClientConfiguration'
+      { dryRun =
+          Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+exportClientVpnClientConfiguration_dryRun :: Lens.Lens' ExportClientVpnClientConfiguration (Prelude.Maybe Prelude.Bool)
+exportClientVpnClientConfiguration_dryRun = Lens.lens (\ExportClientVpnClientConfiguration' {dryRun} -> dryRun) (\s@ExportClientVpnClientConfiguration' {} a -> s {dryRun = a} :: ExportClientVpnClientConfiguration)
+
+-- | The ID of the Client VPN endpoint.
+exportClientVpnClientConfiguration_clientVpnEndpointId :: Lens.Lens' ExportClientVpnClientConfiguration Prelude.Text
+exportClientVpnClientConfiguration_clientVpnEndpointId = Lens.lens (\ExportClientVpnClientConfiguration' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ExportClientVpnClientConfiguration' {} a -> s {clientVpnEndpointId = a} :: ExportClientVpnClientConfiguration)
+
+instance
+  Core.AWSRequest
+    ExportClientVpnClientConfiguration
+  where
+  type
+    AWSResponse ExportClientVpnClientConfiguration =
+      ExportClientVpnClientConfigurationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ExportClientVpnClientConfigurationResponse'
+            Prelude.<$> (x Data..@? "clientConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ExportClientVpnClientConfiguration
+  where
+  hashWithSalt
+    _salt
+    ExportClientVpnClientConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance
+  Prelude.NFData
+    ExportClientVpnClientConfiguration
+  where
+  rnf ExportClientVpnClientConfiguration' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance
+  Data.ToHeaders
+    ExportClientVpnClientConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ExportClientVpnClientConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ExportClientVpnClientConfiguration
+  where
+  toQuery ExportClientVpnClientConfiguration' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ExportClientVpnClientConfiguration" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newExportClientVpnClientConfigurationResponse' smart constructor.
+data ExportClientVpnClientConfigurationResponse = ExportClientVpnClientConfigurationResponse'
+  { -- | The contents of the Client VPN endpoint configuration file.
+    clientConfiguration :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportClientVpnClientConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientConfiguration', 'exportClientVpnClientConfigurationResponse_clientConfiguration' - The contents of the Client VPN endpoint configuration file.
+--
+-- 'httpStatus', 'exportClientVpnClientConfigurationResponse_httpStatus' - The response's http status code.
+newExportClientVpnClientConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportClientVpnClientConfigurationResponse
+newExportClientVpnClientConfigurationResponse
+  pHttpStatus_ =
+    ExportClientVpnClientConfigurationResponse'
+      { clientConfiguration =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The contents of the Client VPN endpoint configuration file.
+exportClientVpnClientConfigurationResponse_clientConfiguration :: Lens.Lens' ExportClientVpnClientConfigurationResponse (Prelude.Maybe Prelude.Text)
+exportClientVpnClientConfigurationResponse_clientConfiguration = Lens.lens (\ExportClientVpnClientConfigurationResponse' {clientConfiguration} -> clientConfiguration) (\s@ExportClientVpnClientConfigurationResponse' {} a -> s {clientConfiguration = a} :: ExportClientVpnClientConfigurationResponse)
+
+-- | The response's http status code.
+exportClientVpnClientConfigurationResponse_httpStatus :: Lens.Lens' ExportClientVpnClientConfigurationResponse Prelude.Int
+exportClientVpnClientConfigurationResponse_httpStatus = Lens.lens (\ExportClientVpnClientConfigurationResponse' {httpStatus} -> httpStatus) (\s@ExportClientVpnClientConfigurationResponse' {} a -> s {httpStatus = a} :: ExportClientVpnClientConfigurationResponse)
+
+instance
+  Prelude.NFData
+    ExportClientVpnClientConfigurationResponse
+  where
+  rnf ExportClientVpnClientConfigurationResponse' {..} =
+    Prelude.rnf clientConfiguration
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ExportImage.hs b/gen/Amazonka/EC2/ExportImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ExportImage.hs
@@ -0,0 +1,400 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ExportImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports an Amazon Machine Image (AMI) to a VM file. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport_image.html Exporting a VM directly from an Amazon Machine Image (AMI)>
+-- in the /VM Import\/Export User Guide/.
+module Amazonka.EC2.ExportImage
+  ( -- * Creating a Request
+    ExportImage (..),
+    newExportImage,
+
+    -- * Request Lenses
+    exportImage_clientToken,
+    exportImage_description,
+    exportImage_dryRun,
+    exportImage_roleName,
+    exportImage_tagSpecifications,
+    exportImage_diskImageFormat,
+    exportImage_imageId,
+    exportImage_s3ExportLocation,
+
+    -- * Destructuring the Response
+    ExportImageResponse (..),
+    newExportImageResponse,
+
+    -- * Response Lenses
+    exportImageResponse_description,
+    exportImageResponse_diskImageFormat,
+    exportImageResponse_exportImageTaskId,
+    exportImageResponse_imageId,
+    exportImageResponse_progress,
+    exportImageResponse_roleName,
+    exportImageResponse_s3ExportLocation,
+    exportImageResponse_status,
+    exportImageResponse_statusMessage,
+    exportImageResponse_tags,
+    exportImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportImage' smart constructor.
+data ExportImage = ExportImage'
+  { -- | Token to enable idempotency for export image requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description of the image being exported. The maximum length is 255
+    -- characters.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the role that grants VM Import\/Export permission to export
+    -- images to your Amazon S3 bucket. If this parameter is not specified, the
+    -- default role is named \'vmimport\'.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the export image task during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The disk image format.
+    diskImageFormat :: DiskImageFormat,
+    -- | The ID of the image.
+    imageId :: Prelude.Text,
+    -- | The Amazon S3 bucket for the destination image. The destination bucket
+    -- must exist.
+    s3ExportLocation :: ExportTaskS3LocationRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'exportImage_clientToken' - Token to enable idempotency for export image requests.
+--
+-- 'description', 'exportImage_description' - A description of the image being exported. The maximum length is 255
+-- characters.
+--
+-- 'dryRun', 'exportImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'roleName', 'exportImage_roleName' - The name of the role that grants VM Import\/Export permission to export
+-- images to your Amazon S3 bucket. If this parameter is not specified, the
+-- default role is named \'vmimport\'.
+--
+-- 'tagSpecifications', 'exportImage_tagSpecifications' - The tags to apply to the export image task during creation.
+--
+-- 'diskImageFormat', 'exportImage_diskImageFormat' - The disk image format.
+--
+-- 'imageId', 'exportImage_imageId' - The ID of the image.
+--
+-- 's3ExportLocation', 'exportImage_s3ExportLocation' - The Amazon S3 bucket for the destination image. The destination bucket
+-- must exist.
+newExportImage ::
+  -- | 'diskImageFormat'
+  DiskImageFormat ->
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 's3ExportLocation'
+  ExportTaskS3LocationRequest ->
+  ExportImage
+newExportImage
+  pDiskImageFormat_
+  pImageId_
+  pS3ExportLocation_ =
+    ExportImage'
+      { clientToken = Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        roleName = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        diskImageFormat = pDiskImageFormat_,
+        imageId = pImageId_,
+        s3ExportLocation = pS3ExportLocation_
+      }
+
+-- | Token to enable idempotency for export image requests.
+exportImage_clientToken :: Lens.Lens' ExportImage (Prelude.Maybe Prelude.Text)
+exportImage_clientToken = Lens.lens (\ExportImage' {clientToken} -> clientToken) (\s@ExportImage' {} a -> s {clientToken = a} :: ExportImage)
+
+-- | A description of the image being exported. The maximum length is 255
+-- characters.
+exportImage_description :: Lens.Lens' ExportImage (Prelude.Maybe Prelude.Text)
+exportImage_description = Lens.lens (\ExportImage' {description} -> description) (\s@ExportImage' {} a -> s {description = a} :: ExportImage)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+exportImage_dryRun :: Lens.Lens' ExportImage (Prelude.Maybe Prelude.Bool)
+exportImage_dryRun = Lens.lens (\ExportImage' {dryRun} -> dryRun) (\s@ExportImage' {} a -> s {dryRun = a} :: ExportImage)
+
+-- | The name of the role that grants VM Import\/Export permission to export
+-- images to your Amazon S3 bucket. If this parameter is not specified, the
+-- default role is named \'vmimport\'.
+exportImage_roleName :: Lens.Lens' ExportImage (Prelude.Maybe Prelude.Text)
+exportImage_roleName = Lens.lens (\ExportImage' {roleName} -> roleName) (\s@ExportImage' {} a -> s {roleName = a} :: ExportImage)
+
+-- | The tags to apply to the export image task during creation.
+exportImage_tagSpecifications :: Lens.Lens' ExportImage (Prelude.Maybe [TagSpecification])
+exportImage_tagSpecifications = Lens.lens (\ExportImage' {tagSpecifications} -> tagSpecifications) (\s@ExportImage' {} a -> s {tagSpecifications = a} :: ExportImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The disk image format.
+exportImage_diskImageFormat :: Lens.Lens' ExportImage DiskImageFormat
+exportImage_diskImageFormat = Lens.lens (\ExportImage' {diskImageFormat} -> diskImageFormat) (\s@ExportImage' {} a -> s {diskImageFormat = a} :: ExportImage)
+
+-- | The ID of the image.
+exportImage_imageId :: Lens.Lens' ExportImage Prelude.Text
+exportImage_imageId = Lens.lens (\ExportImage' {imageId} -> imageId) (\s@ExportImage' {} a -> s {imageId = a} :: ExportImage)
+
+-- | The Amazon S3 bucket for the destination image. The destination bucket
+-- must exist.
+exportImage_s3ExportLocation :: Lens.Lens' ExportImage ExportTaskS3LocationRequest
+exportImage_s3ExportLocation = Lens.lens (\ExportImage' {s3ExportLocation} -> s3ExportLocation) (\s@ExportImage' {} a -> s {s3ExportLocation = a} :: ExportImage)
+
+instance Core.AWSRequest ExportImage where
+  type AWSResponse ExportImage = ExportImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ExportImageResponse'
+            Prelude.<$> (x Data..@? "description")
+            Prelude.<*> (x Data..@? "diskImageFormat")
+            Prelude.<*> (x Data..@? "exportImageTaskId")
+            Prelude.<*> (x Data..@? "imageId")
+            Prelude.<*> (x Data..@? "progress")
+            Prelude.<*> (x Data..@? "roleName")
+            Prelude.<*> (x Data..@? "s3ExportLocation")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (x Data..@? "statusMessage")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExportImage where
+  hashWithSalt _salt ExportImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` diskImageFormat
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` s3ExportLocation
+
+instance Prelude.NFData ExportImage where
+  rnf ExportImage' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf diskImageFormat
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf s3ExportLocation
+
+instance Data.ToHeaders ExportImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ExportImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ExportImage where
+  toQuery ExportImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ExportImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "RoleName" Data.=: roleName,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "DiskImageFormat" Data.=: diskImageFormat,
+        "ImageId" Data.=: imageId,
+        "S3ExportLocation" Data.=: s3ExportLocation
+      ]
+
+-- | /See:/ 'newExportImageResponse' smart constructor.
+data ExportImageResponse = ExportImageResponse'
+  { -- | A description of the image being exported.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The disk image format for the exported image.
+    diskImageFormat :: Prelude.Maybe DiskImageFormat,
+    -- | The ID of the export image task.
+    exportImageTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the image.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The percent complete of the export image task.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | The name of the role that grants VM Import\/Export permission to export
+    -- images to your Amazon S3 bucket.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the destination Amazon S3 bucket.
+    s3ExportLocation :: Prelude.Maybe ExportTaskS3Location,
+    -- | The status of the export image task. The possible values are @active@,
+    -- @completed@, @deleting@, and @deleted@.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The status message for the export image task.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the export image task.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'exportImageResponse_description' - A description of the image being exported.
+--
+-- 'diskImageFormat', 'exportImageResponse_diskImageFormat' - The disk image format for the exported image.
+--
+-- 'exportImageTaskId', 'exportImageResponse_exportImageTaskId' - The ID of the export image task.
+--
+-- 'imageId', 'exportImageResponse_imageId' - The ID of the image.
+--
+-- 'progress', 'exportImageResponse_progress' - The percent complete of the export image task.
+--
+-- 'roleName', 'exportImageResponse_roleName' - The name of the role that grants VM Import\/Export permission to export
+-- images to your Amazon S3 bucket.
+--
+-- 's3ExportLocation', 'exportImageResponse_s3ExportLocation' - Information about the destination Amazon S3 bucket.
+--
+-- 'status', 'exportImageResponse_status' - The status of the export image task. The possible values are @active@,
+-- @completed@, @deleting@, and @deleted@.
+--
+-- 'statusMessage', 'exportImageResponse_statusMessage' - The status message for the export image task.
+--
+-- 'tags', 'exportImageResponse_tags' - Any tags assigned to the export image task.
+--
+-- 'httpStatus', 'exportImageResponse_httpStatus' - The response's http status code.
+newExportImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportImageResponse
+newExportImageResponse pHttpStatus_ =
+  ExportImageResponse'
+    { description = Prelude.Nothing,
+      diskImageFormat = Prelude.Nothing,
+      exportImageTaskId = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      s3ExportLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A description of the image being exported.
+exportImageResponse_description :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_description = Lens.lens (\ExportImageResponse' {description} -> description) (\s@ExportImageResponse' {} a -> s {description = a} :: ExportImageResponse)
+
+-- | The disk image format for the exported image.
+exportImageResponse_diskImageFormat :: Lens.Lens' ExportImageResponse (Prelude.Maybe DiskImageFormat)
+exportImageResponse_diskImageFormat = Lens.lens (\ExportImageResponse' {diskImageFormat} -> diskImageFormat) (\s@ExportImageResponse' {} a -> s {diskImageFormat = a} :: ExportImageResponse)
+
+-- | The ID of the export image task.
+exportImageResponse_exportImageTaskId :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_exportImageTaskId = Lens.lens (\ExportImageResponse' {exportImageTaskId} -> exportImageTaskId) (\s@ExportImageResponse' {} a -> s {exportImageTaskId = a} :: ExportImageResponse)
+
+-- | The ID of the image.
+exportImageResponse_imageId :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_imageId = Lens.lens (\ExportImageResponse' {imageId} -> imageId) (\s@ExportImageResponse' {} a -> s {imageId = a} :: ExportImageResponse)
+
+-- | The percent complete of the export image task.
+exportImageResponse_progress :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_progress = Lens.lens (\ExportImageResponse' {progress} -> progress) (\s@ExportImageResponse' {} a -> s {progress = a} :: ExportImageResponse)
+
+-- | The name of the role that grants VM Import\/Export permission to export
+-- images to your Amazon S3 bucket.
+exportImageResponse_roleName :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_roleName = Lens.lens (\ExportImageResponse' {roleName} -> roleName) (\s@ExportImageResponse' {} a -> s {roleName = a} :: ExportImageResponse)
+
+-- | Information about the destination Amazon S3 bucket.
+exportImageResponse_s3ExportLocation :: Lens.Lens' ExportImageResponse (Prelude.Maybe ExportTaskS3Location)
+exportImageResponse_s3ExportLocation = Lens.lens (\ExportImageResponse' {s3ExportLocation} -> s3ExportLocation) (\s@ExportImageResponse' {} a -> s {s3ExportLocation = a} :: ExportImageResponse)
+
+-- | The status of the export image task. The possible values are @active@,
+-- @completed@, @deleting@, and @deleted@.
+exportImageResponse_status :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_status = Lens.lens (\ExportImageResponse' {status} -> status) (\s@ExportImageResponse' {} a -> s {status = a} :: ExportImageResponse)
+
+-- | The status message for the export image task.
+exportImageResponse_statusMessage :: Lens.Lens' ExportImageResponse (Prelude.Maybe Prelude.Text)
+exportImageResponse_statusMessage = Lens.lens (\ExportImageResponse' {statusMessage} -> statusMessage) (\s@ExportImageResponse' {} a -> s {statusMessage = a} :: ExportImageResponse)
+
+-- | Any tags assigned to the export image task.
+exportImageResponse_tags :: Lens.Lens' ExportImageResponse (Prelude.Maybe [Tag])
+exportImageResponse_tags = Lens.lens (\ExportImageResponse' {tags} -> tags) (\s@ExportImageResponse' {} a -> s {tags = a} :: ExportImageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+exportImageResponse_httpStatus :: Lens.Lens' ExportImageResponse Prelude.Int
+exportImageResponse_httpStatus = Lens.lens (\ExportImageResponse' {httpStatus} -> httpStatus) (\s@ExportImageResponse' {} a -> s {httpStatus = a} :: ExportImageResponse)
+
+instance Prelude.NFData ExportImageResponse where
+  rnf ExportImageResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diskImageFormat
+      `Prelude.seq` Prelude.rnf exportImageTaskId
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf s3ExportLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ExportTransitGatewayRoutes.hs b/gen/Amazonka/EC2/ExportTransitGatewayRoutes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ExportTransitGatewayRoutes.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ExportTransitGatewayRoutes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+--
+-- The routes are saved to the specified bucket in a JSON file. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vpc/latest/tgw/tgw-route-tables.html#tgw-export-route-tables Export Route Tables to Amazon S3>
+-- in /Transit Gateways/.
+module Amazonka.EC2.ExportTransitGatewayRoutes
+  ( -- * Creating a Request
+    ExportTransitGatewayRoutes (..),
+    newExportTransitGatewayRoutes,
+
+    -- * Request Lenses
+    exportTransitGatewayRoutes_dryRun,
+    exportTransitGatewayRoutes_filters,
+    exportTransitGatewayRoutes_transitGatewayRouteTableId,
+    exportTransitGatewayRoutes_s3Bucket,
+
+    -- * Destructuring the Response
+    ExportTransitGatewayRoutesResponse (..),
+    newExportTransitGatewayRoutesResponse,
+
+    -- * Response Lenses
+    exportTransitGatewayRoutesResponse_s3Location,
+    exportTransitGatewayRoutesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportTransitGatewayRoutes' smart constructor.
+data ExportTransitGatewayRoutes = ExportTransitGatewayRoutes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @attachment.transit-gateway-attachment-id@ - The id of the transit
+    --     gateway attachment.
+    --
+    -- -   @attachment.resource-id@ - The resource id of the transit gateway
+    --     attachment.
+    --
+    -- -   @route-search.exact-match@ - The exact match of the specified
+    --     filter.
+    --
+    -- -   @route-search.longest-prefix-match@ - The longest prefix that
+    --     matches the route.
+    --
+    -- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+    --     the specified CIDR filter.
+    --
+    -- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+    --     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+    --     10.0.1.0\/31 routes in your route table and you specify
+    --     supernet-of-match as 10.0.1.0\/30, then the result returns
+    --     10.0.1.0\/29.
+    --
+    -- -   @state@ - The state of the route (@active@ | @blackhole@).
+    --
+    -- -   @transit-gateway-route-destination-cidr-block@ - The CIDR range.
+    --
+    -- -   @type@ - The type of route (@propagated@ | @static@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The ID of the route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The name of the S3 bucket.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTransitGatewayRoutes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'exportTransitGatewayRoutes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'exportTransitGatewayRoutes_filters' - One or more filters. The possible values are:
+--
+-- -   @attachment.transit-gateway-attachment-id@ - The id of the transit
+--     gateway attachment.
+--
+-- -   @attachment.resource-id@ - The resource id of the transit gateway
+--     attachment.
+--
+-- -   @route-search.exact-match@ - The exact match of the specified
+--     filter.
+--
+-- -   @route-search.longest-prefix-match@ - The longest prefix that
+--     matches the route.
+--
+-- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+--     the specified CIDR filter.
+--
+-- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+--     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+--     10.0.1.0\/31 routes in your route table and you specify
+--     supernet-of-match as 10.0.1.0\/30, then the result returns
+--     10.0.1.0\/29.
+--
+-- -   @state@ - The state of the route (@active@ | @blackhole@).
+--
+-- -   @transit-gateway-route-destination-cidr-block@ - The CIDR range.
+--
+-- -   @type@ - The type of route (@propagated@ | @static@).
+--
+-- 'transitGatewayRouteTableId', 'exportTransitGatewayRoutes_transitGatewayRouteTableId' - The ID of the route table.
+--
+-- 's3Bucket', 'exportTransitGatewayRoutes_s3Bucket' - The name of the S3 bucket.
+newExportTransitGatewayRoutes ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 's3Bucket'
+  Prelude.Text ->
+  ExportTransitGatewayRoutes
+newExportTransitGatewayRoutes
+  pTransitGatewayRouteTableId_
+  pS3Bucket_ =
+    ExportTransitGatewayRoutes'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        s3Bucket = pS3Bucket_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+exportTransitGatewayRoutes_dryRun :: Lens.Lens' ExportTransitGatewayRoutes (Prelude.Maybe Prelude.Bool)
+exportTransitGatewayRoutes_dryRun = Lens.lens (\ExportTransitGatewayRoutes' {dryRun} -> dryRun) (\s@ExportTransitGatewayRoutes' {} a -> s {dryRun = a} :: ExportTransitGatewayRoutes)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @attachment.transit-gateway-attachment-id@ - The id of the transit
+--     gateway attachment.
+--
+-- -   @attachment.resource-id@ - The resource id of the transit gateway
+--     attachment.
+--
+-- -   @route-search.exact-match@ - The exact match of the specified
+--     filter.
+--
+-- -   @route-search.longest-prefix-match@ - The longest prefix that
+--     matches the route.
+--
+-- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+--     the specified CIDR filter.
+--
+-- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+--     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+--     10.0.1.0\/31 routes in your route table and you specify
+--     supernet-of-match as 10.0.1.0\/30, then the result returns
+--     10.0.1.0\/29.
+--
+-- -   @state@ - The state of the route (@active@ | @blackhole@).
+--
+-- -   @transit-gateway-route-destination-cidr-block@ - The CIDR range.
+--
+-- -   @type@ - The type of route (@propagated@ | @static@).
+exportTransitGatewayRoutes_filters :: Lens.Lens' ExportTransitGatewayRoutes (Prelude.Maybe [Filter])
+exportTransitGatewayRoutes_filters = Lens.lens (\ExportTransitGatewayRoutes' {filters} -> filters) (\s@ExportTransitGatewayRoutes' {} a -> s {filters = a} :: ExportTransitGatewayRoutes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the route table.
+exportTransitGatewayRoutes_transitGatewayRouteTableId :: Lens.Lens' ExportTransitGatewayRoutes Prelude.Text
+exportTransitGatewayRoutes_transitGatewayRouteTableId = Lens.lens (\ExportTransitGatewayRoutes' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@ExportTransitGatewayRoutes' {} a -> s {transitGatewayRouteTableId = a} :: ExportTransitGatewayRoutes)
+
+-- | The name of the S3 bucket.
+exportTransitGatewayRoutes_s3Bucket :: Lens.Lens' ExportTransitGatewayRoutes Prelude.Text
+exportTransitGatewayRoutes_s3Bucket = Lens.lens (\ExportTransitGatewayRoutes' {s3Bucket} -> s3Bucket) (\s@ExportTransitGatewayRoutes' {} a -> s {s3Bucket = a} :: ExportTransitGatewayRoutes)
+
+instance Core.AWSRequest ExportTransitGatewayRoutes where
+  type
+    AWSResponse ExportTransitGatewayRoutes =
+      ExportTransitGatewayRoutesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ExportTransitGatewayRoutesResponse'
+            Prelude.<$> (x Data..@? "s3Location")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExportTransitGatewayRoutes where
+  hashWithSalt _salt ExportTransitGatewayRoutes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+      `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData ExportTransitGatewayRoutes where
+  rnf ExportTransitGatewayRoutes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf s3Bucket
+
+instance Data.ToHeaders ExportTransitGatewayRoutes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ExportTransitGatewayRoutes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ExportTransitGatewayRoutes where
+  toQuery ExportTransitGatewayRoutes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ExportTransitGatewayRoutes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "S3Bucket" Data.=: s3Bucket
+      ]
+
+-- | /See:/ 'newExportTransitGatewayRoutesResponse' smart constructor.
+data ExportTransitGatewayRoutesResponse = ExportTransitGatewayRoutesResponse'
+  { -- | The URL of the exported file in Amazon S3. For example,
+    -- s3:\/\//bucket_name/\/VPCTransitGateway\/TransitGatewayRouteTables\//file_name/.
+    s3Location :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTransitGatewayRoutesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'exportTransitGatewayRoutesResponse_s3Location' - The URL of the exported file in Amazon S3. For example,
+-- s3:\/\//bucket_name/\/VPCTransitGateway\/TransitGatewayRouteTables\//file_name/.
+--
+-- 'httpStatus', 'exportTransitGatewayRoutesResponse_httpStatus' - The response's http status code.
+newExportTransitGatewayRoutesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportTransitGatewayRoutesResponse
+newExportTransitGatewayRoutesResponse pHttpStatus_ =
+  ExportTransitGatewayRoutesResponse'
+    { s3Location =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The URL of the exported file in Amazon S3. For example,
+-- s3:\/\//bucket_name/\/VPCTransitGateway\/TransitGatewayRouteTables\//file_name/.
+exportTransitGatewayRoutesResponse_s3Location :: Lens.Lens' ExportTransitGatewayRoutesResponse (Prelude.Maybe Prelude.Text)
+exportTransitGatewayRoutesResponse_s3Location = Lens.lens (\ExportTransitGatewayRoutesResponse' {s3Location} -> s3Location) (\s@ExportTransitGatewayRoutesResponse' {} a -> s {s3Location = a} :: ExportTransitGatewayRoutesResponse)
+
+-- | The response's http status code.
+exportTransitGatewayRoutesResponse_httpStatus :: Lens.Lens' ExportTransitGatewayRoutesResponse Prelude.Int
+exportTransitGatewayRoutesResponse_httpStatus = Lens.lens (\ExportTransitGatewayRoutesResponse' {httpStatus} -> httpStatus) (\s@ExportTransitGatewayRoutesResponse' {} a -> s {httpStatus = a} :: ExportTransitGatewayRoutesResponse)
+
+instance
+  Prelude.NFData
+    ExportTransitGatewayRoutesResponse
+  where
+  rnf ExportTransitGatewayRoutesResponse' {..} =
+    Prelude.rnf s3Location
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetAssociatedEnclaveCertificateIamRoles.hs b/gen/Amazonka/EC2/GetAssociatedEnclaveCertificateIamRoles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetAssociatedEnclaveCertificateIamRoles.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetAssociatedEnclaveCertificateIamRoles
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns the IAM roles that are associated with the specified ACM (ACM)
+-- certificate. It also returns the name of the Amazon S3 bucket and the
+-- Amazon S3 object key where the certificate, certificate chain, and
+-- encrypted private key bundle are stored, and the ARN of the KMS key
+-- that\'s used to encrypt the private key.
+module Amazonka.EC2.GetAssociatedEnclaveCertificateIamRoles
+  ( -- * Creating a Request
+    GetAssociatedEnclaveCertificateIamRoles (..),
+    newGetAssociatedEnclaveCertificateIamRoles,
+
+    -- * Request Lenses
+    getAssociatedEnclaveCertificateIamRoles_certificateArn,
+    getAssociatedEnclaveCertificateIamRoles_dryRun,
+
+    -- * Destructuring the Response
+    GetAssociatedEnclaveCertificateIamRolesResponse (..),
+    newGetAssociatedEnclaveCertificateIamRolesResponse,
+
+    -- * Response Lenses
+    getAssociatedEnclaveCertificateIamRolesResponse_associatedRoles,
+    getAssociatedEnclaveCertificateIamRolesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAssociatedEnclaveCertificateIamRoles' smart constructor.
+data GetAssociatedEnclaveCertificateIamRoles = GetAssociatedEnclaveCertificateIamRoles'
+  { -- | The ARN of the ACM certificate for which to view the associated IAM
+    -- roles, encryption keys, and Amazon S3 object information.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssociatedEnclaveCertificateIamRoles' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateArn', 'getAssociatedEnclaveCertificateIamRoles_certificateArn' - The ARN of the ACM certificate for which to view the associated IAM
+-- roles, encryption keys, and Amazon S3 object information.
+--
+-- 'dryRun', 'getAssociatedEnclaveCertificateIamRoles_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newGetAssociatedEnclaveCertificateIamRoles ::
+  GetAssociatedEnclaveCertificateIamRoles
+newGetAssociatedEnclaveCertificateIamRoles =
+  GetAssociatedEnclaveCertificateIamRoles'
+    { certificateArn =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing
+    }
+
+-- | The ARN of the ACM certificate for which to view the associated IAM
+-- roles, encryption keys, and Amazon S3 object information.
+getAssociatedEnclaveCertificateIamRoles_certificateArn :: Lens.Lens' GetAssociatedEnclaveCertificateIamRoles (Prelude.Maybe Prelude.Text)
+getAssociatedEnclaveCertificateIamRoles_certificateArn = Lens.lens (\GetAssociatedEnclaveCertificateIamRoles' {certificateArn} -> certificateArn) (\s@GetAssociatedEnclaveCertificateIamRoles' {} a -> s {certificateArn = a} :: GetAssociatedEnclaveCertificateIamRoles)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getAssociatedEnclaveCertificateIamRoles_dryRun :: Lens.Lens' GetAssociatedEnclaveCertificateIamRoles (Prelude.Maybe Prelude.Bool)
+getAssociatedEnclaveCertificateIamRoles_dryRun = Lens.lens (\GetAssociatedEnclaveCertificateIamRoles' {dryRun} -> dryRun) (\s@GetAssociatedEnclaveCertificateIamRoles' {} a -> s {dryRun = a} :: GetAssociatedEnclaveCertificateIamRoles)
+
+instance
+  Core.AWSRequest
+    GetAssociatedEnclaveCertificateIamRoles
+  where
+  type
+    AWSResponse
+      GetAssociatedEnclaveCertificateIamRoles =
+      GetAssociatedEnclaveCertificateIamRolesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetAssociatedEnclaveCertificateIamRolesResponse'
+            Prelude.<$> ( x
+                            Data..@? "associatedRoleSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetAssociatedEnclaveCertificateIamRoles
+  where
+  hashWithSalt
+    _salt
+    GetAssociatedEnclaveCertificateIamRoles' {..} =
+      _salt
+        `Prelude.hashWithSalt` certificateArn
+        `Prelude.hashWithSalt` dryRun
+
+instance
+  Prelude.NFData
+    GetAssociatedEnclaveCertificateIamRoles
+  where
+  rnf GetAssociatedEnclaveCertificateIamRoles' {..} =
+    Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf dryRun
+
+instance
+  Data.ToHeaders
+    GetAssociatedEnclaveCertificateIamRoles
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetAssociatedEnclaveCertificateIamRoles
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetAssociatedEnclaveCertificateIamRoles
+  where
+  toQuery GetAssociatedEnclaveCertificateIamRoles' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetAssociatedEnclaveCertificateIamRoles" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CertificateArn" Data.=: certificateArn,
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newGetAssociatedEnclaveCertificateIamRolesResponse' smart constructor.
+data GetAssociatedEnclaveCertificateIamRolesResponse = GetAssociatedEnclaveCertificateIamRolesResponse'
+  { -- | Information about the associated IAM roles.
+    associatedRoles :: Prelude.Maybe [AssociatedRole],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssociatedEnclaveCertificateIamRolesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedRoles', 'getAssociatedEnclaveCertificateIamRolesResponse_associatedRoles' - Information about the associated IAM roles.
+--
+-- 'httpStatus', 'getAssociatedEnclaveCertificateIamRolesResponse_httpStatus' - The response's http status code.
+newGetAssociatedEnclaveCertificateIamRolesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAssociatedEnclaveCertificateIamRolesResponse
+newGetAssociatedEnclaveCertificateIamRolesResponse
+  pHttpStatus_ =
+    GetAssociatedEnclaveCertificateIamRolesResponse'
+      { associatedRoles =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the associated IAM roles.
+getAssociatedEnclaveCertificateIamRolesResponse_associatedRoles :: Lens.Lens' GetAssociatedEnclaveCertificateIamRolesResponse (Prelude.Maybe [AssociatedRole])
+getAssociatedEnclaveCertificateIamRolesResponse_associatedRoles = Lens.lens (\GetAssociatedEnclaveCertificateIamRolesResponse' {associatedRoles} -> associatedRoles) (\s@GetAssociatedEnclaveCertificateIamRolesResponse' {} a -> s {associatedRoles = a} :: GetAssociatedEnclaveCertificateIamRolesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAssociatedEnclaveCertificateIamRolesResponse_httpStatus :: Lens.Lens' GetAssociatedEnclaveCertificateIamRolesResponse Prelude.Int
+getAssociatedEnclaveCertificateIamRolesResponse_httpStatus = Lens.lens (\GetAssociatedEnclaveCertificateIamRolesResponse' {httpStatus} -> httpStatus) (\s@GetAssociatedEnclaveCertificateIamRolesResponse' {} a -> s {httpStatus = a} :: GetAssociatedEnclaveCertificateIamRolesResponse)
+
+instance
+  Prelude.NFData
+    GetAssociatedEnclaveCertificateIamRolesResponse
+  where
+  rnf
+    GetAssociatedEnclaveCertificateIamRolesResponse' {..} =
+      Prelude.rnf associatedRoles
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetAssociatedIpv6PoolCidrs.hs b/gen/Amazonka/EC2/GetAssociatedIpv6PoolCidrs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetAssociatedIpv6PoolCidrs.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetAssociatedIpv6PoolCidrs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the IPv6 CIDR block associations for a specified
+-- IPv6 address pool.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetAssociatedIpv6PoolCidrs
+  ( -- * Creating a Request
+    GetAssociatedIpv6PoolCidrs (..),
+    newGetAssociatedIpv6PoolCidrs,
+
+    -- * Request Lenses
+    getAssociatedIpv6PoolCidrs_dryRun,
+    getAssociatedIpv6PoolCidrs_maxResults,
+    getAssociatedIpv6PoolCidrs_nextToken,
+    getAssociatedIpv6PoolCidrs_poolId,
+
+    -- * Destructuring the Response
+    GetAssociatedIpv6PoolCidrsResponse (..),
+    newGetAssociatedIpv6PoolCidrsResponse,
+
+    -- * Response Lenses
+    getAssociatedIpv6PoolCidrsResponse_ipv6CidrAssociations,
+    getAssociatedIpv6PoolCidrsResponse_nextToken,
+    getAssociatedIpv6PoolCidrsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAssociatedIpv6PoolCidrs' smart constructor.
+data GetAssociatedIpv6PoolCidrs = GetAssociatedIpv6PoolCidrs'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPv6 address pool.
+    poolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssociatedIpv6PoolCidrs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getAssociatedIpv6PoolCidrs_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getAssociatedIpv6PoolCidrs_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getAssociatedIpv6PoolCidrs_nextToken' - The token for the next page of results.
+--
+-- 'poolId', 'getAssociatedIpv6PoolCidrs_poolId' - The ID of the IPv6 address pool.
+newGetAssociatedIpv6PoolCidrs ::
+  -- | 'poolId'
+  Prelude.Text ->
+  GetAssociatedIpv6PoolCidrs
+newGetAssociatedIpv6PoolCidrs pPoolId_ =
+  GetAssociatedIpv6PoolCidrs'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      poolId = pPoolId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getAssociatedIpv6PoolCidrs_dryRun :: Lens.Lens' GetAssociatedIpv6PoolCidrs (Prelude.Maybe Prelude.Bool)
+getAssociatedIpv6PoolCidrs_dryRun = Lens.lens (\GetAssociatedIpv6PoolCidrs' {dryRun} -> dryRun) (\s@GetAssociatedIpv6PoolCidrs' {} a -> s {dryRun = a} :: GetAssociatedIpv6PoolCidrs)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getAssociatedIpv6PoolCidrs_maxResults :: Lens.Lens' GetAssociatedIpv6PoolCidrs (Prelude.Maybe Prelude.Natural)
+getAssociatedIpv6PoolCidrs_maxResults = Lens.lens (\GetAssociatedIpv6PoolCidrs' {maxResults} -> maxResults) (\s@GetAssociatedIpv6PoolCidrs' {} a -> s {maxResults = a} :: GetAssociatedIpv6PoolCidrs)
+
+-- | The token for the next page of results.
+getAssociatedIpv6PoolCidrs_nextToken :: Lens.Lens' GetAssociatedIpv6PoolCidrs (Prelude.Maybe Prelude.Text)
+getAssociatedIpv6PoolCidrs_nextToken = Lens.lens (\GetAssociatedIpv6PoolCidrs' {nextToken} -> nextToken) (\s@GetAssociatedIpv6PoolCidrs' {} a -> s {nextToken = a} :: GetAssociatedIpv6PoolCidrs)
+
+-- | The ID of the IPv6 address pool.
+getAssociatedIpv6PoolCidrs_poolId :: Lens.Lens' GetAssociatedIpv6PoolCidrs Prelude.Text
+getAssociatedIpv6PoolCidrs_poolId = Lens.lens (\GetAssociatedIpv6PoolCidrs' {poolId} -> poolId) (\s@GetAssociatedIpv6PoolCidrs' {} a -> s {poolId = a} :: GetAssociatedIpv6PoolCidrs)
+
+instance Core.AWSPager GetAssociatedIpv6PoolCidrs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getAssociatedIpv6PoolCidrsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getAssociatedIpv6PoolCidrsResponse_ipv6CidrAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getAssociatedIpv6PoolCidrs_nextToken
+          Lens..~ rs
+          Lens.^? getAssociatedIpv6PoolCidrsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetAssociatedIpv6PoolCidrs where
+  type
+    AWSResponse GetAssociatedIpv6PoolCidrs =
+      GetAssociatedIpv6PoolCidrsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetAssociatedIpv6PoolCidrsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipv6CidrAssociationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAssociatedIpv6PoolCidrs where
+  hashWithSalt _salt GetAssociatedIpv6PoolCidrs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` poolId
+
+instance Prelude.NFData GetAssociatedIpv6PoolCidrs where
+  rnf GetAssociatedIpv6PoolCidrs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf poolId
+
+instance Data.ToHeaders GetAssociatedIpv6PoolCidrs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetAssociatedIpv6PoolCidrs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAssociatedIpv6PoolCidrs where
+  toQuery GetAssociatedIpv6PoolCidrs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetAssociatedIpv6PoolCidrs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "PoolId" Data.=: poolId
+      ]
+
+-- | /See:/ 'newGetAssociatedIpv6PoolCidrsResponse' smart constructor.
+data GetAssociatedIpv6PoolCidrsResponse = GetAssociatedIpv6PoolCidrsResponse'
+  { -- | Information about the IPv6 CIDR block associations.
+    ipv6CidrAssociations :: Prelude.Maybe [Ipv6CidrAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAssociatedIpv6PoolCidrsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6CidrAssociations', 'getAssociatedIpv6PoolCidrsResponse_ipv6CidrAssociations' - Information about the IPv6 CIDR block associations.
+--
+-- 'nextToken', 'getAssociatedIpv6PoolCidrsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getAssociatedIpv6PoolCidrsResponse_httpStatus' - The response's http status code.
+newGetAssociatedIpv6PoolCidrsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAssociatedIpv6PoolCidrsResponse
+newGetAssociatedIpv6PoolCidrsResponse pHttpStatus_ =
+  GetAssociatedIpv6PoolCidrsResponse'
+    { ipv6CidrAssociations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IPv6 CIDR block associations.
+getAssociatedIpv6PoolCidrsResponse_ipv6CidrAssociations :: Lens.Lens' GetAssociatedIpv6PoolCidrsResponse (Prelude.Maybe [Ipv6CidrAssociation])
+getAssociatedIpv6PoolCidrsResponse_ipv6CidrAssociations = Lens.lens (\GetAssociatedIpv6PoolCidrsResponse' {ipv6CidrAssociations} -> ipv6CidrAssociations) (\s@GetAssociatedIpv6PoolCidrsResponse' {} a -> s {ipv6CidrAssociations = a} :: GetAssociatedIpv6PoolCidrsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getAssociatedIpv6PoolCidrsResponse_nextToken :: Lens.Lens' GetAssociatedIpv6PoolCidrsResponse (Prelude.Maybe Prelude.Text)
+getAssociatedIpv6PoolCidrsResponse_nextToken = Lens.lens (\GetAssociatedIpv6PoolCidrsResponse' {nextToken} -> nextToken) (\s@GetAssociatedIpv6PoolCidrsResponse' {} a -> s {nextToken = a} :: GetAssociatedIpv6PoolCidrsResponse)
+
+-- | The response's http status code.
+getAssociatedIpv6PoolCidrsResponse_httpStatus :: Lens.Lens' GetAssociatedIpv6PoolCidrsResponse Prelude.Int
+getAssociatedIpv6PoolCidrsResponse_httpStatus = Lens.lens (\GetAssociatedIpv6PoolCidrsResponse' {httpStatus} -> httpStatus) (\s@GetAssociatedIpv6PoolCidrsResponse' {} a -> s {httpStatus = a} :: GetAssociatedIpv6PoolCidrsResponse)
+
+instance
+  Prelude.NFData
+    GetAssociatedIpv6PoolCidrsResponse
+  where
+  rnf GetAssociatedIpv6PoolCidrsResponse' {..} =
+    Prelude.rnf ipv6CidrAssociations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetAwsNetworkPerformanceData.hs b/gen/Amazonka/EC2/GetAwsNetworkPerformanceData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetAwsNetworkPerformanceData.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetAwsNetworkPerformanceData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets network performance data.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetAwsNetworkPerformanceData
+  ( -- * Creating a Request
+    GetAwsNetworkPerformanceData (..),
+    newGetAwsNetworkPerformanceData,
+
+    -- * Request Lenses
+    getAwsNetworkPerformanceData_dataQueries,
+    getAwsNetworkPerformanceData_dryRun,
+    getAwsNetworkPerformanceData_endTime,
+    getAwsNetworkPerformanceData_maxResults,
+    getAwsNetworkPerformanceData_nextToken,
+    getAwsNetworkPerformanceData_startTime,
+
+    -- * Destructuring the Response
+    GetAwsNetworkPerformanceDataResponse (..),
+    newGetAwsNetworkPerformanceDataResponse,
+
+    -- * Response Lenses
+    getAwsNetworkPerformanceDataResponse_dataResponses,
+    getAwsNetworkPerformanceDataResponse_nextToken,
+    getAwsNetworkPerformanceDataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetAwsNetworkPerformanceData' smart constructor.
+data GetAwsNetworkPerformanceData = GetAwsNetworkPerformanceData'
+  { -- | A list of network performance data queries.
+    dataQueries :: Prelude.Maybe [DataQuery],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ending time for the performance data request. The end time must be
+    -- formatted as @yyyy-mm-ddThh:mm:ss@. For example,
+    -- @2022-06-12T12:00:00.000Z@.
+    endTime :: Prelude.Maybe Data.ISO8601,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The starting time for the performance data request. The starting time
+    -- must be formatted as @yyyy-mm-ddThh:mm:ss@. For example,
+    -- @2022-06-10T12:00:00.000Z@.
+    startTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAwsNetworkPerformanceData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataQueries', 'getAwsNetworkPerformanceData_dataQueries' - A list of network performance data queries.
+--
+-- 'dryRun', 'getAwsNetworkPerformanceData_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endTime', 'getAwsNetworkPerformanceData_endTime' - The ending time for the performance data request. The end time must be
+-- formatted as @yyyy-mm-ddThh:mm:ss@. For example,
+-- @2022-06-12T12:00:00.000Z@.
+--
+-- 'maxResults', 'getAwsNetworkPerformanceData_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getAwsNetworkPerformanceData_nextToken' - The token for the next page of results.
+--
+-- 'startTime', 'getAwsNetworkPerformanceData_startTime' - The starting time for the performance data request. The starting time
+-- must be formatted as @yyyy-mm-ddThh:mm:ss@. For example,
+-- @2022-06-10T12:00:00.000Z@.
+newGetAwsNetworkPerformanceData ::
+  GetAwsNetworkPerformanceData
+newGetAwsNetworkPerformanceData =
+  GetAwsNetworkPerformanceData'
+    { dataQueries =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTime = Prelude.Nothing
+    }
+
+-- | A list of network performance data queries.
+getAwsNetworkPerformanceData_dataQueries :: Lens.Lens' GetAwsNetworkPerformanceData (Prelude.Maybe [DataQuery])
+getAwsNetworkPerformanceData_dataQueries = Lens.lens (\GetAwsNetworkPerformanceData' {dataQueries} -> dataQueries) (\s@GetAwsNetworkPerformanceData' {} a -> s {dataQueries = a} :: GetAwsNetworkPerformanceData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getAwsNetworkPerformanceData_dryRun :: Lens.Lens' GetAwsNetworkPerformanceData (Prelude.Maybe Prelude.Bool)
+getAwsNetworkPerformanceData_dryRun = Lens.lens (\GetAwsNetworkPerformanceData' {dryRun} -> dryRun) (\s@GetAwsNetworkPerformanceData' {} a -> s {dryRun = a} :: GetAwsNetworkPerformanceData)
+
+-- | The ending time for the performance data request. The end time must be
+-- formatted as @yyyy-mm-ddThh:mm:ss@. For example,
+-- @2022-06-12T12:00:00.000Z@.
+getAwsNetworkPerformanceData_endTime :: Lens.Lens' GetAwsNetworkPerformanceData (Prelude.Maybe Prelude.UTCTime)
+getAwsNetworkPerformanceData_endTime = Lens.lens (\GetAwsNetworkPerformanceData' {endTime} -> endTime) (\s@GetAwsNetworkPerformanceData' {} a -> s {endTime = a} :: GetAwsNetworkPerformanceData) Prelude.. Lens.mapping Data._Time
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getAwsNetworkPerformanceData_maxResults :: Lens.Lens' GetAwsNetworkPerformanceData (Prelude.Maybe Prelude.Int)
+getAwsNetworkPerformanceData_maxResults = Lens.lens (\GetAwsNetworkPerformanceData' {maxResults} -> maxResults) (\s@GetAwsNetworkPerformanceData' {} a -> s {maxResults = a} :: GetAwsNetworkPerformanceData)
+
+-- | The token for the next page of results.
+getAwsNetworkPerformanceData_nextToken :: Lens.Lens' GetAwsNetworkPerformanceData (Prelude.Maybe Prelude.Text)
+getAwsNetworkPerformanceData_nextToken = Lens.lens (\GetAwsNetworkPerformanceData' {nextToken} -> nextToken) (\s@GetAwsNetworkPerformanceData' {} a -> s {nextToken = a} :: GetAwsNetworkPerformanceData)
+
+-- | The starting time for the performance data request. The starting time
+-- must be formatted as @yyyy-mm-ddThh:mm:ss@. For example,
+-- @2022-06-10T12:00:00.000Z@.
+getAwsNetworkPerformanceData_startTime :: Lens.Lens' GetAwsNetworkPerformanceData (Prelude.Maybe Prelude.UTCTime)
+getAwsNetworkPerformanceData_startTime = Lens.lens (\GetAwsNetworkPerformanceData' {startTime} -> startTime) (\s@GetAwsNetworkPerformanceData' {} a -> s {startTime = a} :: GetAwsNetworkPerformanceData) Prelude.. Lens.mapping Data._Time
+
+instance Core.AWSPager GetAwsNetworkPerformanceData where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getAwsNetworkPerformanceDataResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getAwsNetworkPerformanceDataResponse_dataResponses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getAwsNetworkPerformanceData_nextToken
+          Lens..~ rs
+          Lens.^? getAwsNetworkPerformanceDataResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetAwsNetworkPerformanceData where
+  type
+    AWSResponse GetAwsNetworkPerformanceData =
+      GetAwsNetworkPerformanceDataResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetAwsNetworkPerformanceDataResponse'
+            Prelude.<$> ( x
+                            Data..@? "dataResponseSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetAwsNetworkPerformanceData
+  where
+  hashWithSalt _salt GetAwsNetworkPerformanceData' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataQueries
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTime
+
+instance Prelude.NFData GetAwsNetworkPerformanceData where
+  rnf GetAwsNetworkPerformanceData' {..} =
+    Prelude.rnf dataQueries
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTime
+
+instance Data.ToHeaders GetAwsNetworkPerformanceData where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetAwsNetworkPerformanceData where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAwsNetworkPerformanceData where
+  toQuery GetAwsNetworkPerformanceData' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetAwsNetworkPerformanceData" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "DataQuery"
+              Prelude.<$> dataQueries
+          ),
+        "DryRun" Data.=: dryRun,
+        "EndTime" Data.=: endTime,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "StartTime" Data.=: startTime
+      ]
+
+-- | /See:/ 'newGetAwsNetworkPerformanceDataResponse' smart constructor.
+data GetAwsNetworkPerformanceDataResponse = GetAwsNetworkPerformanceDataResponse'
+  { -- | The list of data responses.
+    dataResponses :: Prelude.Maybe [DataResponse],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAwsNetworkPerformanceDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataResponses', 'getAwsNetworkPerformanceDataResponse_dataResponses' - The list of data responses.
+--
+-- 'nextToken', 'getAwsNetworkPerformanceDataResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getAwsNetworkPerformanceDataResponse_httpStatus' - The response's http status code.
+newGetAwsNetworkPerformanceDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAwsNetworkPerformanceDataResponse
+newGetAwsNetworkPerformanceDataResponse pHttpStatus_ =
+  GetAwsNetworkPerformanceDataResponse'
+    { dataResponses =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of data responses.
+getAwsNetworkPerformanceDataResponse_dataResponses :: Lens.Lens' GetAwsNetworkPerformanceDataResponse (Prelude.Maybe [DataResponse])
+getAwsNetworkPerformanceDataResponse_dataResponses = Lens.lens (\GetAwsNetworkPerformanceDataResponse' {dataResponses} -> dataResponses) (\s@GetAwsNetworkPerformanceDataResponse' {} a -> s {dataResponses = a} :: GetAwsNetworkPerformanceDataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getAwsNetworkPerformanceDataResponse_nextToken :: Lens.Lens' GetAwsNetworkPerformanceDataResponse (Prelude.Maybe Prelude.Text)
+getAwsNetworkPerformanceDataResponse_nextToken = Lens.lens (\GetAwsNetworkPerformanceDataResponse' {nextToken} -> nextToken) (\s@GetAwsNetworkPerformanceDataResponse' {} a -> s {nextToken = a} :: GetAwsNetworkPerformanceDataResponse)
+
+-- | The response's http status code.
+getAwsNetworkPerformanceDataResponse_httpStatus :: Lens.Lens' GetAwsNetworkPerformanceDataResponse Prelude.Int
+getAwsNetworkPerformanceDataResponse_httpStatus = Lens.lens (\GetAwsNetworkPerformanceDataResponse' {httpStatus} -> httpStatus) (\s@GetAwsNetworkPerformanceDataResponse' {} a -> s {httpStatus = a} :: GetAwsNetworkPerformanceDataResponse)
+
+instance
+  Prelude.NFData
+    GetAwsNetworkPerformanceDataResponse
+  where
+  rnf GetAwsNetworkPerformanceDataResponse' {..} =
+    Prelude.rnf dataResponses
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetCapacityReservationUsage.hs b/gen/Amazonka/EC2/GetCapacityReservationUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetCapacityReservationUsage.hs
@@ -0,0 +1,382 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetCapacityReservationUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets usage information about a Capacity Reservation. If the Capacity
+-- Reservation is shared, it shows usage information for the Capacity
+-- Reservation owner and each Amazon Web Services account that is currently
+-- using the shared capacity. If the Capacity Reservation is not shared, it
+-- shows only the Capacity Reservation owner\'s usage.
+module Amazonka.EC2.GetCapacityReservationUsage
+  ( -- * Creating a Request
+    GetCapacityReservationUsage (..),
+    newGetCapacityReservationUsage,
+
+    -- * Request Lenses
+    getCapacityReservationUsage_dryRun,
+    getCapacityReservationUsage_maxResults,
+    getCapacityReservationUsage_nextToken,
+    getCapacityReservationUsage_capacityReservationId,
+
+    -- * Destructuring the Response
+    GetCapacityReservationUsageResponse (..),
+    newGetCapacityReservationUsageResponse,
+
+    -- * Response Lenses
+    getCapacityReservationUsageResponse_availableInstanceCount,
+    getCapacityReservationUsageResponse_capacityReservationId,
+    getCapacityReservationUsageResponse_instanceType,
+    getCapacityReservationUsageResponse_instanceUsages,
+    getCapacityReservationUsageResponse_nextToken,
+    getCapacityReservationUsageResponse_state,
+    getCapacityReservationUsageResponse_totalInstanceCount,
+    getCapacityReservationUsageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCapacityReservationUsage' smart constructor.
+data GetCapacityReservationUsage = GetCapacityReservationUsage'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    --
+    -- Valid range: Minimum value of 1. Maximum value of 1000.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCapacityReservationUsage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getCapacityReservationUsage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getCapacityReservationUsage_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- Valid range: Minimum value of 1. Maximum value of 1000.
+--
+-- 'nextToken', 'getCapacityReservationUsage_nextToken' - The token to use to retrieve the next page of results.
+--
+-- 'capacityReservationId', 'getCapacityReservationUsage_capacityReservationId' - The ID of the Capacity Reservation.
+newGetCapacityReservationUsage ::
+  -- | 'capacityReservationId'
+  Prelude.Text ->
+  GetCapacityReservationUsage
+newGetCapacityReservationUsage
+  pCapacityReservationId_ =
+    GetCapacityReservationUsage'
+      { dryRun =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        capacityReservationId =
+          pCapacityReservationId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getCapacityReservationUsage_dryRun :: Lens.Lens' GetCapacityReservationUsage (Prelude.Maybe Prelude.Bool)
+getCapacityReservationUsage_dryRun = Lens.lens (\GetCapacityReservationUsage' {dryRun} -> dryRun) (\s@GetCapacityReservationUsage' {} a -> s {dryRun = a} :: GetCapacityReservationUsage)
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- Valid range: Minimum value of 1. Maximum value of 1000.
+getCapacityReservationUsage_maxResults :: Lens.Lens' GetCapacityReservationUsage (Prelude.Maybe Prelude.Natural)
+getCapacityReservationUsage_maxResults = Lens.lens (\GetCapacityReservationUsage' {maxResults} -> maxResults) (\s@GetCapacityReservationUsage' {} a -> s {maxResults = a} :: GetCapacityReservationUsage)
+
+-- | The token to use to retrieve the next page of results.
+getCapacityReservationUsage_nextToken :: Lens.Lens' GetCapacityReservationUsage (Prelude.Maybe Prelude.Text)
+getCapacityReservationUsage_nextToken = Lens.lens (\GetCapacityReservationUsage' {nextToken} -> nextToken) (\s@GetCapacityReservationUsage' {} a -> s {nextToken = a} :: GetCapacityReservationUsage)
+
+-- | The ID of the Capacity Reservation.
+getCapacityReservationUsage_capacityReservationId :: Lens.Lens' GetCapacityReservationUsage Prelude.Text
+getCapacityReservationUsage_capacityReservationId = Lens.lens (\GetCapacityReservationUsage' {capacityReservationId} -> capacityReservationId) (\s@GetCapacityReservationUsage' {} a -> s {capacityReservationId = a} :: GetCapacityReservationUsage)
+
+instance Core.AWSRequest GetCapacityReservationUsage where
+  type
+    AWSResponse GetCapacityReservationUsage =
+      GetCapacityReservationUsageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetCapacityReservationUsageResponse'
+            Prelude.<$> (x Data..@? "availableInstanceCount")
+            Prelude.<*> (x Data..@? "capacityReservationId")
+            Prelude.<*> (x Data..@? "instanceType")
+            Prelude.<*> ( x
+                            Data..@? "instanceUsageSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (x Data..@? "state")
+            Prelude.<*> (x Data..@? "totalInstanceCount")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCapacityReservationUsage where
+  hashWithSalt _salt GetCapacityReservationUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` capacityReservationId
+
+instance Prelude.NFData GetCapacityReservationUsage where
+  rnf GetCapacityReservationUsage' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf capacityReservationId
+
+instance Data.ToHeaders GetCapacityReservationUsage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetCapacityReservationUsage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetCapacityReservationUsage where
+  toQuery GetCapacityReservationUsage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetCapacityReservationUsage" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "CapacityReservationId"
+          Data.=: capacityReservationId
+      ]
+
+-- | /See:/ 'newGetCapacityReservationUsageResponse' smart constructor.
+data GetCapacityReservationUsageResponse = GetCapacityReservationUsageResponse'
+  { -- | The remaining capacity. Indicates the number of instances that can be
+    -- launched in the Capacity Reservation.
+    availableInstanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The type of instance for which the Capacity Reservation reserves
+    -- capacity.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Capacity Reservation usage.
+    instanceUsages :: Prelude.Maybe [InstanceUsage],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | 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 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.
+    state :: Prelude.Maybe CapacityReservationState,
+    -- | The number of instances for which the Capacity Reservation reserves
+    -- capacity.
+    totalInstanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCapacityReservationUsageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availableInstanceCount', 'getCapacityReservationUsageResponse_availableInstanceCount' - The remaining capacity. Indicates the number of instances that can be
+-- launched in the Capacity Reservation.
+--
+-- 'capacityReservationId', 'getCapacityReservationUsageResponse_capacityReservationId' - The ID of the Capacity Reservation.
+--
+-- 'instanceType', 'getCapacityReservationUsageResponse_instanceType' - The type of instance for which the Capacity Reservation reserves
+-- capacity.
+--
+-- 'instanceUsages', 'getCapacityReservationUsageResponse_instanceUsages' - Information about the Capacity Reservation usage.
+--
+-- 'nextToken', 'getCapacityReservationUsageResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'state', 'getCapacityReservationUsageResponse_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 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.
+--
+-- 'totalInstanceCount', 'getCapacityReservationUsageResponse_totalInstanceCount' - The number of instances for which the Capacity Reservation reserves
+-- capacity.
+--
+-- 'httpStatus', 'getCapacityReservationUsageResponse_httpStatus' - The response's http status code.
+newGetCapacityReservationUsageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCapacityReservationUsageResponse
+newGetCapacityReservationUsageResponse pHttpStatus_ =
+  GetCapacityReservationUsageResponse'
+    { availableInstanceCount =
+        Prelude.Nothing,
+      capacityReservationId =
+        Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      instanceUsages = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      state = Prelude.Nothing,
+      totalInstanceCount = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The remaining capacity. Indicates the number of instances that can be
+-- launched in the Capacity Reservation.
+getCapacityReservationUsageResponse_availableInstanceCount :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe Prelude.Int)
+getCapacityReservationUsageResponse_availableInstanceCount = Lens.lens (\GetCapacityReservationUsageResponse' {availableInstanceCount} -> availableInstanceCount) (\s@GetCapacityReservationUsageResponse' {} a -> s {availableInstanceCount = a} :: GetCapacityReservationUsageResponse)
+
+-- | The ID of the Capacity Reservation.
+getCapacityReservationUsageResponse_capacityReservationId :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe Prelude.Text)
+getCapacityReservationUsageResponse_capacityReservationId = Lens.lens (\GetCapacityReservationUsageResponse' {capacityReservationId} -> capacityReservationId) (\s@GetCapacityReservationUsageResponse' {} a -> s {capacityReservationId = a} :: GetCapacityReservationUsageResponse)
+
+-- | The type of instance for which the Capacity Reservation reserves
+-- capacity.
+getCapacityReservationUsageResponse_instanceType :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe Prelude.Text)
+getCapacityReservationUsageResponse_instanceType = Lens.lens (\GetCapacityReservationUsageResponse' {instanceType} -> instanceType) (\s@GetCapacityReservationUsageResponse' {} a -> s {instanceType = a} :: GetCapacityReservationUsageResponse)
+
+-- | Information about the Capacity Reservation usage.
+getCapacityReservationUsageResponse_instanceUsages :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe [InstanceUsage])
+getCapacityReservationUsageResponse_instanceUsages = Lens.lens (\GetCapacityReservationUsageResponse' {instanceUsages} -> instanceUsages) (\s@GetCapacityReservationUsageResponse' {} a -> s {instanceUsages = a} :: GetCapacityReservationUsageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getCapacityReservationUsageResponse_nextToken :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe Prelude.Text)
+getCapacityReservationUsageResponse_nextToken = Lens.lens (\GetCapacityReservationUsageResponse' {nextToken} -> nextToken) (\s@GetCapacityReservationUsageResponse' {} a -> s {nextToken = a} :: GetCapacityReservationUsageResponse)
+
+-- | 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 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.
+getCapacityReservationUsageResponse_state :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe CapacityReservationState)
+getCapacityReservationUsageResponse_state = Lens.lens (\GetCapacityReservationUsageResponse' {state} -> state) (\s@GetCapacityReservationUsageResponse' {} a -> s {state = a} :: GetCapacityReservationUsageResponse)
+
+-- | The number of instances for which the Capacity Reservation reserves
+-- capacity.
+getCapacityReservationUsageResponse_totalInstanceCount :: Lens.Lens' GetCapacityReservationUsageResponse (Prelude.Maybe Prelude.Int)
+getCapacityReservationUsageResponse_totalInstanceCount = Lens.lens (\GetCapacityReservationUsageResponse' {totalInstanceCount} -> totalInstanceCount) (\s@GetCapacityReservationUsageResponse' {} a -> s {totalInstanceCount = a} :: GetCapacityReservationUsageResponse)
+
+-- | The response's http status code.
+getCapacityReservationUsageResponse_httpStatus :: Lens.Lens' GetCapacityReservationUsageResponse Prelude.Int
+getCapacityReservationUsageResponse_httpStatus = Lens.lens (\GetCapacityReservationUsageResponse' {httpStatus} -> httpStatus) (\s@GetCapacityReservationUsageResponse' {} a -> s {httpStatus = a} :: GetCapacityReservationUsageResponse)
+
+instance
+  Prelude.NFData
+    GetCapacityReservationUsageResponse
+  where
+  rnf GetCapacityReservationUsageResponse' {..} =
+    Prelude.rnf availableInstanceCount
+      `Prelude.seq` Prelude.rnf capacityReservationId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf instanceUsages
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf totalInstanceCount
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetCoipPoolUsage.hs b/gen/Amazonka/EC2/GetCoipPoolUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetCoipPoolUsage.hs
@@ -0,0 +1,290 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetCoipPoolUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the allocations from the specified customer-owned address
+-- pool.
+module Amazonka.EC2.GetCoipPoolUsage
+  ( -- * Creating a Request
+    GetCoipPoolUsage (..),
+    newGetCoipPoolUsage,
+
+    -- * Request Lenses
+    getCoipPoolUsage_dryRun,
+    getCoipPoolUsage_filters,
+    getCoipPoolUsage_maxResults,
+    getCoipPoolUsage_nextToken,
+    getCoipPoolUsage_poolId,
+
+    -- * Destructuring the Response
+    GetCoipPoolUsageResponse (..),
+    newGetCoipPoolUsageResponse,
+
+    -- * Response Lenses
+    getCoipPoolUsageResponse_coipAddressUsages,
+    getCoipPoolUsageResponse_coipPoolId,
+    getCoipPoolUsageResponse_localGatewayRouteTableId,
+    getCoipPoolUsageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetCoipPoolUsage' smart constructor.
+data GetCoipPoolUsage = GetCoipPoolUsage'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @coip-address-usage.allocation-id@ - The allocation ID of the
+    --     address.
+    --
+    -- -   @coip-address-usage.aws-account-id@ - The ID of the Amazon Web
+    --     Services account that is using the customer-owned IP address.
+    --
+    -- -   @coip-address-usage.aws-service@ - The Amazon Web Services service
+    --     that is using the customer-owned IP address.
+    --
+    -- -   @coip-address-usage.co-ip@ - The customer-owned IP address.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the address pool.
+    poolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCoipPoolUsage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getCoipPoolUsage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getCoipPoolUsage_filters' - One or more filters.
+--
+-- -   @coip-address-usage.allocation-id@ - The allocation ID of the
+--     address.
+--
+-- -   @coip-address-usage.aws-account-id@ - The ID of the Amazon Web
+--     Services account that is using the customer-owned IP address.
+--
+-- -   @coip-address-usage.aws-service@ - The Amazon Web Services service
+--     that is using the customer-owned IP address.
+--
+-- -   @coip-address-usage.co-ip@ - The customer-owned IP address.
+--
+-- 'maxResults', 'getCoipPoolUsage_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getCoipPoolUsage_nextToken' - The token for the next page of results.
+--
+-- 'poolId', 'getCoipPoolUsage_poolId' - The ID of the address pool.
+newGetCoipPoolUsage ::
+  -- | 'poolId'
+  Prelude.Text ->
+  GetCoipPoolUsage
+newGetCoipPoolUsage pPoolId_ =
+  GetCoipPoolUsage'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      poolId = pPoolId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getCoipPoolUsage_dryRun :: Lens.Lens' GetCoipPoolUsage (Prelude.Maybe Prelude.Bool)
+getCoipPoolUsage_dryRun = Lens.lens (\GetCoipPoolUsage' {dryRun} -> dryRun) (\s@GetCoipPoolUsage' {} a -> s {dryRun = a} :: GetCoipPoolUsage)
+
+-- | One or more filters.
+--
+-- -   @coip-address-usage.allocation-id@ - The allocation ID of the
+--     address.
+--
+-- -   @coip-address-usage.aws-account-id@ - The ID of the Amazon Web
+--     Services account that is using the customer-owned IP address.
+--
+-- -   @coip-address-usage.aws-service@ - The Amazon Web Services service
+--     that is using the customer-owned IP address.
+--
+-- -   @coip-address-usage.co-ip@ - The customer-owned IP address.
+getCoipPoolUsage_filters :: Lens.Lens' GetCoipPoolUsage (Prelude.Maybe [Filter])
+getCoipPoolUsage_filters = Lens.lens (\GetCoipPoolUsage' {filters} -> filters) (\s@GetCoipPoolUsage' {} a -> s {filters = a} :: GetCoipPoolUsage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getCoipPoolUsage_maxResults :: Lens.Lens' GetCoipPoolUsage (Prelude.Maybe Prelude.Natural)
+getCoipPoolUsage_maxResults = Lens.lens (\GetCoipPoolUsage' {maxResults} -> maxResults) (\s@GetCoipPoolUsage' {} a -> s {maxResults = a} :: GetCoipPoolUsage)
+
+-- | The token for the next page of results.
+getCoipPoolUsage_nextToken :: Lens.Lens' GetCoipPoolUsage (Prelude.Maybe Prelude.Text)
+getCoipPoolUsage_nextToken = Lens.lens (\GetCoipPoolUsage' {nextToken} -> nextToken) (\s@GetCoipPoolUsage' {} a -> s {nextToken = a} :: GetCoipPoolUsage)
+
+-- | The ID of the address pool.
+getCoipPoolUsage_poolId :: Lens.Lens' GetCoipPoolUsage Prelude.Text
+getCoipPoolUsage_poolId = Lens.lens (\GetCoipPoolUsage' {poolId} -> poolId) (\s@GetCoipPoolUsage' {} a -> s {poolId = a} :: GetCoipPoolUsage)
+
+instance Core.AWSRequest GetCoipPoolUsage where
+  type
+    AWSResponse GetCoipPoolUsage =
+      GetCoipPoolUsageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetCoipPoolUsageResponse'
+            Prelude.<$> ( x
+                            Data..@? "coipAddressUsageSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "coipPoolId")
+            Prelude.<*> (x Data..@? "localGatewayRouteTableId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetCoipPoolUsage where
+  hashWithSalt _salt GetCoipPoolUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` poolId
+
+instance Prelude.NFData GetCoipPoolUsage where
+  rnf GetCoipPoolUsage' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf poolId
+
+instance Data.ToHeaders GetCoipPoolUsage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetCoipPoolUsage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetCoipPoolUsage where
+  toQuery GetCoipPoolUsage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetCoipPoolUsage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "PoolId" Data.=: poolId
+      ]
+
+-- | /See:/ 'newGetCoipPoolUsageResponse' smart constructor.
+data GetCoipPoolUsageResponse = GetCoipPoolUsageResponse'
+  { -- | Information about the address usage.
+    coipAddressUsages :: Prelude.Maybe [CoipAddressUsage],
+    -- | The ID of the customer-owned address pool.
+    coipPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetCoipPoolUsageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipAddressUsages', 'getCoipPoolUsageResponse_coipAddressUsages' - Information about the address usage.
+--
+-- 'coipPoolId', 'getCoipPoolUsageResponse_coipPoolId' - The ID of the customer-owned address pool.
+--
+-- 'localGatewayRouteTableId', 'getCoipPoolUsageResponse_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'httpStatus', 'getCoipPoolUsageResponse_httpStatus' - The response's http status code.
+newGetCoipPoolUsageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetCoipPoolUsageResponse
+newGetCoipPoolUsageResponse pHttpStatus_ =
+  GetCoipPoolUsageResponse'
+    { coipAddressUsages =
+        Prelude.Nothing,
+      coipPoolId = Prelude.Nothing,
+      localGatewayRouteTableId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address usage.
+getCoipPoolUsageResponse_coipAddressUsages :: Lens.Lens' GetCoipPoolUsageResponse (Prelude.Maybe [CoipAddressUsage])
+getCoipPoolUsageResponse_coipAddressUsages = Lens.lens (\GetCoipPoolUsageResponse' {coipAddressUsages} -> coipAddressUsages) (\s@GetCoipPoolUsageResponse' {} a -> s {coipAddressUsages = a} :: GetCoipPoolUsageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the customer-owned address pool.
+getCoipPoolUsageResponse_coipPoolId :: Lens.Lens' GetCoipPoolUsageResponse (Prelude.Maybe Prelude.Text)
+getCoipPoolUsageResponse_coipPoolId = Lens.lens (\GetCoipPoolUsageResponse' {coipPoolId} -> coipPoolId) (\s@GetCoipPoolUsageResponse' {} a -> s {coipPoolId = a} :: GetCoipPoolUsageResponse)
+
+-- | The ID of the local gateway route table.
+getCoipPoolUsageResponse_localGatewayRouteTableId :: Lens.Lens' GetCoipPoolUsageResponse (Prelude.Maybe Prelude.Text)
+getCoipPoolUsageResponse_localGatewayRouteTableId = Lens.lens (\GetCoipPoolUsageResponse' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@GetCoipPoolUsageResponse' {} a -> s {localGatewayRouteTableId = a} :: GetCoipPoolUsageResponse)
+
+-- | The response's http status code.
+getCoipPoolUsageResponse_httpStatus :: Lens.Lens' GetCoipPoolUsageResponse Prelude.Int
+getCoipPoolUsageResponse_httpStatus = Lens.lens (\GetCoipPoolUsageResponse' {httpStatus} -> httpStatus) (\s@GetCoipPoolUsageResponse' {} a -> s {httpStatus = a} :: GetCoipPoolUsageResponse)
+
+instance Prelude.NFData GetCoipPoolUsageResponse where
+  rnf GetCoipPoolUsageResponse' {..} =
+    Prelude.rnf coipAddressUsages
+      `Prelude.seq` Prelude.rnf coipPoolId
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetConsoleOutput.hs b/gen/Amazonka/EC2/GetConsoleOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetConsoleOutput.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetConsoleOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the console output for the specified instance. For Linux instances,
+-- the instance console output displays the exact console output that would
+-- normally be displayed on a physical monitor attached to a computer. For
+-- Windows instances, the instance console output includes the last three
+-- system event log errors.
+--
+-- By default, the console output returns buffered information that was
+-- posted shortly after an instance transition state (start, stop, reboot,
+-- or terminate). This information is available for at least one hour after
+-- the most recent post. Only the most recent 64 KB of console output is
+-- available.
+--
+-- You can optionally retrieve the latest serial console output at any time
+-- during the instance lifecycle. This option is supported on instance
+-- types that use the Nitro hypervisor.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html#instance-console-console-output Instance console output>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.GetConsoleOutput
+  ( -- * Creating a Request
+    GetConsoleOutput (..),
+    newGetConsoleOutput,
+
+    -- * Request Lenses
+    getConsoleOutput_dryRun,
+    getConsoleOutput_latest,
+    getConsoleOutput_instanceId,
+
+    -- * Destructuring the Response
+    GetConsoleOutputResponse (..),
+    newGetConsoleOutputResponse,
+
+    -- * Response Lenses
+    getConsoleOutputResponse_instanceId,
+    getConsoleOutputResponse_output,
+    getConsoleOutputResponse_timestamp,
+    getConsoleOutputResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetConsoleOutput' smart constructor.
+data GetConsoleOutput = GetConsoleOutput'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | When enabled, retrieves the latest console output for the instance.
+    --
+    -- Default: disabled (@false@)
+    latest :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConsoleOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getConsoleOutput_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'latest', 'getConsoleOutput_latest' - When enabled, retrieves the latest console output for the instance.
+--
+-- Default: disabled (@false@)
+--
+-- 'instanceId', 'getConsoleOutput_instanceId' - The ID of the instance.
+newGetConsoleOutput ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  GetConsoleOutput
+newGetConsoleOutput pInstanceId_ =
+  GetConsoleOutput'
+    { dryRun = Prelude.Nothing,
+      latest = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getConsoleOutput_dryRun :: Lens.Lens' GetConsoleOutput (Prelude.Maybe Prelude.Bool)
+getConsoleOutput_dryRun = Lens.lens (\GetConsoleOutput' {dryRun} -> dryRun) (\s@GetConsoleOutput' {} a -> s {dryRun = a} :: GetConsoleOutput)
+
+-- | When enabled, retrieves the latest console output for the instance.
+--
+-- Default: disabled (@false@)
+getConsoleOutput_latest :: Lens.Lens' GetConsoleOutput (Prelude.Maybe Prelude.Bool)
+getConsoleOutput_latest = Lens.lens (\GetConsoleOutput' {latest} -> latest) (\s@GetConsoleOutput' {} a -> s {latest = a} :: GetConsoleOutput)
+
+-- | The ID of the instance.
+getConsoleOutput_instanceId :: Lens.Lens' GetConsoleOutput Prelude.Text
+getConsoleOutput_instanceId = Lens.lens (\GetConsoleOutput' {instanceId} -> instanceId) (\s@GetConsoleOutput' {} a -> s {instanceId = a} :: GetConsoleOutput)
+
+instance Core.AWSRequest GetConsoleOutput where
+  type
+    AWSResponse GetConsoleOutput =
+      GetConsoleOutputResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetConsoleOutputResponse'
+            Prelude.<$> (x Data..@? "instanceId")
+            Prelude.<*> (x Data..@? "output")
+            Prelude.<*> (x Data..@? "timestamp")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConsoleOutput where
+  hashWithSalt _salt GetConsoleOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` latest
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData GetConsoleOutput where
+  rnf GetConsoleOutput' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf latest
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders GetConsoleOutput where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetConsoleOutput where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetConsoleOutput where
+  toQuery GetConsoleOutput' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetConsoleOutput" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Latest" Data.=: latest,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newGetConsoleOutputResponse' smart constructor.
+data GetConsoleOutputResponse = GetConsoleOutputResponse'
+  { -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The console output, base64-encoded. If you are using a command line
+    -- tool, the tool decodes the output for you.
+    output :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the output was last updated.
+    timestamp :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConsoleOutputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'getConsoleOutputResponse_instanceId' - The ID of the instance.
+--
+-- 'output', 'getConsoleOutputResponse_output' - The console output, base64-encoded. If you are using a command line
+-- tool, the tool decodes the output for you.
+--
+-- 'timestamp', 'getConsoleOutputResponse_timestamp' - The time at which the output was last updated.
+--
+-- 'httpStatus', 'getConsoleOutputResponse_httpStatus' - The response's http status code.
+newGetConsoleOutputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConsoleOutputResponse
+newGetConsoleOutputResponse pHttpStatus_ =
+  GetConsoleOutputResponse'
+    { instanceId =
+        Prelude.Nothing,
+      output = Prelude.Nothing,
+      timestamp = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the instance.
+getConsoleOutputResponse_instanceId :: Lens.Lens' GetConsoleOutputResponse (Prelude.Maybe Prelude.Text)
+getConsoleOutputResponse_instanceId = Lens.lens (\GetConsoleOutputResponse' {instanceId} -> instanceId) (\s@GetConsoleOutputResponse' {} a -> s {instanceId = a} :: GetConsoleOutputResponse)
+
+-- | The console output, base64-encoded. If you are using a command line
+-- tool, the tool decodes the output for you.
+getConsoleOutputResponse_output :: Lens.Lens' GetConsoleOutputResponse (Prelude.Maybe Prelude.Text)
+getConsoleOutputResponse_output = Lens.lens (\GetConsoleOutputResponse' {output} -> output) (\s@GetConsoleOutputResponse' {} a -> s {output = a} :: GetConsoleOutputResponse)
+
+-- | The time at which the output was last updated.
+getConsoleOutputResponse_timestamp :: Lens.Lens' GetConsoleOutputResponse (Prelude.Maybe Prelude.UTCTime)
+getConsoleOutputResponse_timestamp = Lens.lens (\GetConsoleOutputResponse' {timestamp} -> timestamp) (\s@GetConsoleOutputResponse' {} a -> s {timestamp = a} :: GetConsoleOutputResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+getConsoleOutputResponse_httpStatus :: Lens.Lens' GetConsoleOutputResponse Prelude.Int
+getConsoleOutputResponse_httpStatus = Lens.lens (\GetConsoleOutputResponse' {httpStatus} -> httpStatus) (\s@GetConsoleOutputResponse' {} a -> s {httpStatus = a} :: GetConsoleOutputResponse)
+
+instance Prelude.NFData GetConsoleOutputResponse where
+  rnf GetConsoleOutputResponse' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf output
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetConsoleScreenshot.hs b/gen/Amazonka/EC2/GetConsoleScreenshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetConsoleScreenshot.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetConsoleScreenshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a JPG-format screenshot of a running instance to help with
+-- troubleshooting.
+--
+-- The returned content is Base64-encoded.
+module Amazonka.EC2.GetConsoleScreenshot
+  ( -- * Creating a Request
+    GetConsoleScreenshot (..),
+    newGetConsoleScreenshot,
+
+    -- * Request Lenses
+    getConsoleScreenshot_dryRun,
+    getConsoleScreenshot_wakeUp,
+    getConsoleScreenshot_instanceId,
+
+    -- * Destructuring the Response
+    GetConsoleScreenshotResponse (..),
+    newGetConsoleScreenshotResponse,
+
+    -- * Response Lenses
+    getConsoleScreenshotResponse_imageData,
+    getConsoleScreenshotResponse_instanceId,
+    getConsoleScreenshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetConsoleScreenshot' smart constructor.
+data GetConsoleScreenshot = GetConsoleScreenshot'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | When set to @true@, acts as keystroke input and wakes up an instance
+    -- that\'s in standby or \"sleep\" mode.
+    wakeUp :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConsoleScreenshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getConsoleScreenshot_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'wakeUp', 'getConsoleScreenshot_wakeUp' - When set to @true@, acts as keystroke input and wakes up an instance
+-- that\'s in standby or \"sleep\" mode.
+--
+-- 'instanceId', 'getConsoleScreenshot_instanceId' - The ID of the instance.
+newGetConsoleScreenshot ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  GetConsoleScreenshot
+newGetConsoleScreenshot pInstanceId_ =
+  GetConsoleScreenshot'
+    { dryRun = Prelude.Nothing,
+      wakeUp = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getConsoleScreenshot_dryRun :: Lens.Lens' GetConsoleScreenshot (Prelude.Maybe Prelude.Bool)
+getConsoleScreenshot_dryRun = Lens.lens (\GetConsoleScreenshot' {dryRun} -> dryRun) (\s@GetConsoleScreenshot' {} a -> s {dryRun = a} :: GetConsoleScreenshot)
+
+-- | When set to @true@, acts as keystroke input and wakes up an instance
+-- that\'s in standby or \"sleep\" mode.
+getConsoleScreenshot_wakeUp :: Lens.Lens' GetConsoleScreenshot (Prelude.Maybe Prelude.Bool)
+getConsoleScreenshot_wakeUp = Lens.lens (\GetConsoleScreenshot' {wakeUp} -> wakeUp) (\s@GetConsoleScreenshot' {} a -> s {wakeUp = a} :: GetConsoleScreenshot)
+
+-- | The ID of the instance.
+getConsoleScreenshot_instanceId :: Lens.Lens' GetConsoleScreenshot Prelude.Text
+getConsoleScreenshot_instanceId = Lens.lens (\GetConsoleScreenshot' {instanceId} -> instanceId) (\s@GetConsoleScreenshot' {} a -> s {instanceId = a} :: GetConsoleScreenshot)
+
+instance Core.AWSRequest GetConsoleScreenshot where
+  type
+    AWSResponse GetConsoleScreenshot =
+      GetConsoleScreenshotResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetConsoleScreenshotResponse'
+            Prelude.<$> (x Data..@? "imageData")
+            Prelude.<*> (x Data..@? "instanceId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConsoleScreenshot where
+  hashWithSalt _salt GetConsoleScreenshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` wakeUp
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData GetConsoleScreenshot where
+  rnf GetConsoleScreenshot' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf wakeUp
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders GetConsoleScreenshot where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetConsoleScreenshot where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetConsoleScreenshot where
+  toQuery GetConsoleScreenshot' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetConsoleScreenshot" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "WakeUp" Data.=: wakeUp,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newGetConsoleScreenshotResponse' smart constructor.
+data GetConsoleScreenshotResponse = GetConsoleScreenshotResponse'
+  { -- | The data that comprises the image.
+    imageData :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConsoleScreenshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageData', 'getConsoleScreenshotResponse_imageData' - The data that comprises the image.
+--
+-- 'instanceId', 'getConsoleScreenshotResponse_instanceId' - The ID of the instance.
+--
+-- 'httpStatus', 'getConsoleScreenshotResponse_httpStatus' - The response's http status code.
+newGetConsoleScreenshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConsoleScreenshotResponse
+newGetConsoleScreenshotResponse pHttpStatus_ =
+  GetConsoleScreenshotResponse'
+    { imageData =
+        Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The data that comprises the image.
+getConsoleScreenshotResponse_imageData :: Lens.Lens' GetConsoleScreenshotResponse (Prelude.Maybe Prelude.Text)
+getConsoleScreenshotResponse_imageData = Lens.lens (\GetConsoleScreenshotResponse' {imageData} -> imageData) (\s@GetConsoleScreenshotResponse' {} a -> s {imageData = a} :: GetConsoleScreenshotResponse)
+
+-- | The ID of the instance.
+getConsoleScreenshotResponse_instanceId :: Lens.Lens' GetConsoleScreenshotResponse (Prelude.Maybe Prelude.Text)
+getConsoleScreenshotResponse_instanceId = Lens.lens (\GetConsoleScreenshotResponse' {instanceId} -> instanceId) (\s@GetConsoleScreenshotResponse' {} a -> s {instanceId = a} :: GetConsoleScreenshotResponse)
+
+-- | The response's http status code.
+getConsoleScreenshotResponse_httpStatus :: Lens.Lens' GetConsoleScreenshotResponse Prelude.Int
+getConsoleScreenshotResponse_httpStatus = Lens.lens (\GetConsoleScreenshotResponse' {httpStatus} -> httpStatus) (\s@GetConsoleScreenshotResponse' {} a -> s {httpStatus = a} :: GetConsoleScreenshotResponse)
+
+instance Prelude.NFData GetConsoleScreenshotResponse where
+  rnf GetConsoleScreenshotResponse' {..} =
+    Prelude.rnf imageData
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetDefaultCreditSpecification.hs b/gen/Amazonka/EC2/GetDefaultCreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetDefaultCreditSpecification.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetDefaultCreditSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the default credit option for CPU usage of a burstable
+-- performance instance family.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.GetDefaultCreditSpecification
+  ( -- * Creating a Request
+    GetDefaultCreditSpecification (..),
+    newGetDefaultCreditSpecification,
+
+    -- * Request Lenses
+    getDefaultCreditSpecification_dryRun,
+    getDefaultCreditSpecification_instanceFamily,
+
+    -- * Destructuring the Response
+    GetDefaultCreditSpecificationResponse (..),
+    newGetDefaultCreditSpecificationResponse,
+
+    -- * Response Lenses
+    getDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification,
+    getDefaultCreditSpecificationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetDefaultCreditSpecification' smart constructor.
+data GetDefaultCreditSpecification = GetDefaultCreditSpecification'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The instance family.
+    instanceFamily :: UnlimitedSupportedInstanceFamily
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDefaultCreditSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getDefaultCreditSpecification_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceFamily', 'getDefaultCreditSpecification_instanceFamily' - The instance family.
+newGetDefaultCreditSpecification ::
+  -- | 'instanceFamily'
+  UnlimitedSupportedInstanceFamily ->
+  GetDefaultCreditSpecification
+newGetDefaultCreditSpecification pInstanceFamily_ =
+  GetDefaultCreditSpecification'
+    { dryRun =
+        Prelude.Nothing,
+      instanceFamily = pInstanceFamily_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getDefaultCreditSpecification_dryRun :: Lens.Lens' GetDefaultCreditSpecification (Prelude.Maybe Prelude.Bool)
+getDefaultCreditSpecification_dryRun = Lens.lens (\GetDefaultCreditSpecification' {dryRun} -> dryRun) (\s@GetDefaultCreditSpecification' {} a -> s {dryRun = a} :: GetDefaultCreditSpecification)
+
+-- | The instance family.
+getDefaultCreditSpecification_instanceFamily :: Lens.Lens' GetDefaultCreditSpecification UnlimitedSupportedInstanceFamily
+getDefaultCreditSpecification_instanceFamily = Lens.lens (\GetDefaultCreditSpecification' {instanceFamily} -> instanceFamily) (\s@GetDefaultCreditSpecification' {} a -> s {instanceFamily = a} :: GetDefaultCreditSpecification)
+
+instance
+  Core.AWSRequest
+    GetDefaultCreditSpecification
+  where
+  type
+    AWSResponse GetDefaultCreditSpecification =
+      GetDefaultCreditSpecificationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetDefaultCreditSpecificationResponse'
+            Prelude.<$> (x Data..@? "instanceFamilyCreditSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetDefaultCreditSpecification
+  where
+  hashWithSalt _salt GetDefaultCreditSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceFamily
+
+instance Prelude.NFData GetDefaultCreditSpecification where
+  rnf GetDefaultCreditSpecification' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceFamily
+
+instance Data.ToHeaders GetDefaultCreditSpecification where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetDefaultCreditSpecification where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetDefaultCreditSpecification where
+  toQuery GetDefaultCreditSpecification' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetDefaultCreditSpecification" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceFamily" Data.=: instanceFamily
+      ]
+
+-- | /See:/ 'newGetDefaultCreditSpecificationResponse' smart constructor.
+data GetDefaultCreditSpecificationResponse = GetDefaultCreditSpecificationResponse'
+  { -- | The default credit option for CPU usage of the instance family.
+    instanceFamilyCreditSpecification :: Prelude.Maybe InstanceFamilyCreditSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetDefaultCreditSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceFamilyCreditSpecification', 'getDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification' - The default credit option for CPU usage of the instance family.
+--
+-- 'httpStatus', 'getDefaultCreditSpecificationResponse_httpStatus' - The response's http status code.
+newGetDefaultCreditSpecificationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetDefaultCreditSpecificationResponse
+newGetDefaultCreditSpecificationResponse pHttpStatus_ =
+  GetDefaultCreditSpecificationResponse'
+    { instanceFamilyCreditSpecification =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The default credit option for CPU usage of the instance family.
+getDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification :: Lens.Lens' GetDefaultCreditSpecificationResponse (Prelude.Maybe InstanceFamilyCreditSpecification)
+getDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification = Lens.lens (\GetDefaultCreditSpecificationResponse' {instanceFamilyCreditSpecification} -> instanceFamilyCreditSpecification) (\s@GetDefaultCreditSpecificationResponse' {} a -> s {instanceFamilyCreditSpecification = a} :: GetDefaultCreditSpecificationResponse)
+
+-- | The response's http status code.
+getDefaultCreditSpecificationResponse_httpStatus :: Lens.Lens' GetDefaultCreditSpecificationResponse Prelude.Int
+getDefaultCreditSpecificationResponse_httpStatus = Lens.lens (\GetDefaultCreditSpecificationResponse' {httpStatus} -> httpStatus) (\s@GetDefaultCreditSpecificationResponse' {} a -> s {httpStatus = a} :: GetDefaultCreditSpecificationResponse)
+
+instance
+  Prelude.NFData
+    GetDefaultCreditSpecificationResponse
+  where
+  rnf GetDefaultCreditSpecificationResponse' {..} =
+    Prelude.rnf instanceFamilyCreditSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetEbsDefaultKmsKeyId.hs b/gen/Amazonka/EC2/GetEbsDefaultKmsKeyId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetEbsDefaultKmsKeyId.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetEbsDefaultKmsKeyId
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the default KMS key for EBS encryption by default for your
+-- account in this Region. You can change the default KMS key for
+-- encryption by default using ModifyEbsDefaultKmsKeyId or
+-- ResetEbsDefaultKmsKeyId.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.GetEbsDefaultKmsKeyId
+  ( -- * Creating a Request
+    GetEbsDefaultKmsKeyId (..),
+    newGetEbsDefaultKmsKeyId,
+
+    -- * Request Lenses
+    getEbsDefaultKmsKeyId_dryRun,
+
+    -- * Destructuring the Response
+    GetEbsDefaultKmsKeyIdResponse (..),
+    newGetEbsDefaultKmsKeyIdResponse,
+
+    -- * Response Lenses
+    getEbsDefaultKmsKeyIdResponse_kmsKeyId,
+    getEbsDefaultKmsKeyIdResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEbsDefaultKmsKeyId' smart constructor.
+data GetEbsDefaultKmsKeyId = GetEbsDefaultKmsKeyId'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEbsDefaultKmsKeyId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getEbsDefaultKmsKeyId_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newGetEbsDefaultKmsKeyId ::
+  GetEbsDefaultKmsKeyId
+newGetEbsDefaultKmsKeyId =
+  GetEbsDefaultKmsKeyId' {dryRun = Prelude.Nothing}
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getEbsDefaultKmsKeyId_dryRun :: Lens.Lens' GetEbsDefaultKmsKeyId (Prelude.Maybe Prelude.Bool)
+getEbsDefaultKmsKeyId_dryRun = Lens.lens (\GetEbsDefaultKmsKeyId' {dryRun} -> dryRun) (\s@GetEbsDefaultKmsKeyId' {} a -> s {dryRun = a} :: GetEbsDefaultKmsKeyId)
+
+instance Core.AWSRequest GetEbsDefaultKmsKeyId where
+  type
+    AWSResponse GetEbsDefaultKmsKeyId =
+      GetEbsDefaultKmsKeyIdResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetEbsDefaultKmsKeyIdResponse'
+            Prelude.<$> (x Data..@? "kmsKeyId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEbsDefaultKmsKeyId where
+  hashWithSalt _salt GetEbsDefaultKmsKeyId' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData GetEbsDefaultKmsKeyId where
+  rnf GetEbsDefaultKmsKeyId' {..} = Prelude.rnf dryRun
+
+instance Data.ToHeaders GetEbsDefaultKmsKeyId where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetEbsDefaultKmsKeyId where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEbsDefaultKmsKeyId where
+  toQuery GetEbsDefaultKmsKeyId' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetEbsDefaultKmsKeyId" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newGetEbsDefaultKmsKeyIdResponse' smart constructor.
+data GetEbsDefaultKmsKeyIdResponse = GetEbsDefaultKmsKeyIdResponse'
+  { -- | The Amazon Resource Name (ARN) of the default KMS key for encryption by
+    -- default.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEbsDefaultKmsKeyIdResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'getEbsDefaultKmsKeyIdResponse_kmsKeyId' - The Amazon Resource Name (ARN) of the default KMS key for encryption by
+-- default.
+--
+-- 'httpStatus', 'getEbsDefaultKmsKeyIdResponse_httpStatus' - The response's http status code.
+newGetEbsDefaultKmsKeyIdResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEbsDefaultKmsKeyIdResponse
+newGetEbsDefaultKmsKeyIdResponse pHttpStatus_ =
+  GetEbsDefaultKmsKeyIdResponse'
+    { kmsKeyId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the default KMS key for encryption by
+-- default.
+getEbsDefaultKmsKeyIdResponse_kmsKeyId :: Lens.Lens' GetEbsDefaultKmsKeyIdResponse (Prelude.Maybe Prelude.Text)
+getEbsDefaultKmsKeyIdResponse_kmsKeyId = Lens.lens (\GetEbsDefaultKmsKeyIdResponse' {kmsKeyId} -> kmsKeyId) (\s@GetEbsDefaultKmsKeyIdResponse' {} a -> s {kmsKeyId = a} :: GetEbsDefaultKmsKeyIdResponse)
+
+-- | The response's http status code.
+getEbsDefaultKmsKeyIdResponse_httpStatus :: Lens.Lens' GetEbsDefaultKmsKeyIdResponse Prelude.Int
+getEbsDefaultKmsKeyIdResponse_httpStatus = Lens.lens (\GetEbsDefaultKmsKeyIdResponse' {httpStatus} -> httpStatus) (\s@GetEbsDefaultKmsKeyIdResponse' {} a -> s {httpStatus = a} :: GetEbsDefaultKmsKeyIdResponse)
+
+instance Prelude.NFData GetEbsDefaultKmsKeyIdResponse where
+  rnf GetEbsDefaultKmsKeyIdResponse' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetEbsEncryptionByDefault.hs b/gen/Amazonka/EC2/GetEbsEncryptionByDefault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetEbsEncryptionByDefault.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetEbsEncryptionByDefault
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes whether EBS encryption by default is enabled for your account
+-- in the current Region.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.GetEbsEncryptionByDefault
+  ( -- * Creating a Request
+    GetEbsEncryptionByDefault (..),
+    newGetEbsEncryptionByDefault,
+
+    -- * Request Lenses
+    getEbsEncryptionByDefault_dryRun,
+
+    -- * Destructuring the Response
+    GetEbsEncryptionByDefaultResponse (..),
+    newGetEbsEncryptionByDefaultResponse,
+
+    -- * Response Lenses
+    getEbsEncryptionByDefaultResponse_ebsEncryptionByDefault,
+    getEbsEncryptionByDefaultResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetEbsEncryptionByDefault' smart constructor.
+data GetEbsEncryptionByDefault = GetEbsEncryptionByDefault'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEbsEncryptionByDefault' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getEbsEncryptionByDefault_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newGetEbsEncryptionByDefault ::
+  GetEbsEncryptionByDefault
+newGetEbsEncryptionByDefault =
+  GetEbsEncryptionByDefault'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getEbsEncryptionByDefault_dryRun :: Lens.Lens' GetEbsEncryptionByDefault (Prelude.Maybe Prelude.Bool)
+getEbsEncryptionByDefault_dryRun = Lens.lens (\GetEbsEncryptionByDefault' {dryRun} -> dryRun) (\s@GetEbsEncryptionByDefault' {} a -> s {dryRun = a} :: GetEbsEncryptionByDefault)
+
+instance Core.AWSRequest GetEbsEncryptionByDefault where
+  type
+    AWSResponse GetEbsEncryptionByDefault =
+      GetEbsEncryptionByDefaultResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetEbsEncryptionByDefaultResponse'
+            Prelude.<$> (x Data..@? "ebsEncryptionByDefault")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetEbsEncryptionByDefault where
+  hashWithSalt _salt GetEbsEncryptionByDefault' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData GetEbsEncryptionByDefault where
+  rnf GetEbsEncryptionByDefault' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders GetEbsEncryptionByDefault where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetEbsEncryptionByDefault where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetEbsEncryptionByDefault where
+  toQuery GetEbsEncryptionByDefault' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetEbsEncryptionByDefault" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newGetEbsEncryptionByDefaultResponse' smart constructor.
+data GetEbsEncryptionByDefaultResponse = GetEbsEncryptionByDefaultResponse'
+  { -- | Indicates whether encryption by default is enabled.
+    ebsEncryptionByDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetEbsEncryptionByDefaultResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebsEncryptionByDefault', 'getEbsEncryptionByDefaultResponse_ebsEncryptionByDefault' - Indicates whether encryption by default is enabled.
+--
+-- 'httpStatus', 'getEbsEncryptionByDefaultResponse_httpStatus' - The response's http status code.
+newGetEbsEncryptionByDefaultResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetEbsEncryptionByDefaultResponse
+newGetEbsEncryptionByDefaultResponse pHttpStatus_ =
+  GetEbsEncryptionByDefaultResponse'
+    { ebsEncryptionByDefault =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether encryption by default is enabled.
+getEbsEncryptionByDefaultResponse_ebsEncryptionByDefault :: Lens.Lens' GetEbsEncryptionByDefaultResponse (Prelude.Maybe Prelude.Bool)
+getEbsEncryptionByDefaultResponse_ebsEncryptionByDefault = Lens.lens (\GetEbsEncryptionByDefaultResponse' {ebsEncryptionByDefault} -> ebsEncryptionByDefault) (\s@GetEbsEncryptionByDefaultResponse' {} a -> s {ebsEncryptionByDefault = a} :: GetEbsEncryptionByDefaultResponse)
+
+-- | The response's http status code.
+getEbsEncryptionByDefaultResponse_httpStatus :: Lens.Lens' GetEbsEncryptionByDefaultResponse Prelude.Int
+getEbsEncryptionByDefaultResponse_httpStatus = Lens.lens (\GetEbsEncryptionByDefaultResponse' {httpStatus} -> httpStatus) (\s@GetEbsEncryptionByDefaultResponse' {} a -> s {httpStatus = a} :: GetEbsEncryptionByDefaultResponse)
+
+instance
+  Prelude.NFData
+    GetEbsEncryptionByDefaultResponse
+  where
+  rnf GetEbsEncryptionByDefaultResponse' {..} =
+    Prelude.rnf ebsEncryptionByDefault
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetFlowLogsIntegrationTemplate.hs b/gen/Amazonka/EC2/GetFlowLogsIntegrationTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetFlowLogsIntegrationTemplate.hs
@@ -0,0 +1,255 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetFlowLogsIntegrationTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates a CloudFormation template that streamlines and automates the
+-- integration of VPC flow logs with Amazon Athena. This make it easier for
+-- you to query and gain insights from VPC flow logs data. Based on the
+-- information that you provide, we configure resources in the template to
+-- do the following:
+--
+-- -   Create a table in Athena that maps fields to a custom log format
+--
+-- -   Create a Lambda function that updates the table with new partitions
+--     on a daily, weekly, or monthly basis
+--
+-- -   Create a table partitioned between two timestamps in the past
+--
+-- -   Create a set of named queries in Athena that you can use to get
+--     started quickly
+module Amazonka.EC2.GetFlowLogsIntegrationTemplate
+  ( -- * Creating a Request
+    GetFlowLogsIntegrationTemplate (..),
+    newGetFlowLogsIntegrationTemplate,
+
+    -- * Request Lenses
+    getFlowLogsIntegrationTemplate_dryRun,
+    getFlowLogsIntegrationTemplate_flowLogId,
+    getFlowLogsIntegrationTemplate_configDeliveryS3DestinationArn,
+    getFlowLogsIntegrationTemplate_integrateServices,
+
+    -- * Destructuring the Response
+    GetFlowLogsIntegrationTemplateResponse (..),
+    newGetFlowLogsIntegrationTemplateResponse,
+
+    -- * Response Lenses
+    getFlowLogsIntegrationTemplateResponse_result,
+    getFlowLogsIntegrationTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetFlowLogsIntegrationTemplate' smart constructor.
+data GetFlowLogsIntegrationTemplate = GetFlowLogsIntegrationTemplate'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the flow log.
+    flowLogId :: Prelude.Text,
+    -- | To store the CloudFormation template in Amazon S3, specify the location
+    -- in Amazon S3.
+    configDeliveryS3DestinationArn :: Prelude.Text,
+    -- | Information about the service integration.
+    integrateServices :: IntegrateServices
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFlowLogsIntegrationTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getFlowLogsIntegrationTemplate_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'flowLogId', 'getFlowLogsIntegrationTemplate_flowLogId' - The ID of the flow log.
+--
+-- 'configDeliveryS3DestinationArn', 'getFlowLogsIntegrationTemplate_configDeliveryS3DestinationArn' - To store the CloudFormation template in Amazon S3, specify the location
+-- in Amazon S3.
+--
+-- 'integrateServices', 'getFlowLogsIntegrationTemplate_integrateServices' - Information about the service integration.
+newGetFlowLogsIntegrationTemplate ::
+  -- | 'flowLogId'
+  Prelude.Text ->
+  -- | 'configDeliveryS3DestinationArn'
+  Prelude.Text ->
+  -- | 'integrateServices'
+  IntegrateServices ->
+  GetFlowLogsIntegrationTemplate
+newGetFlowLogsIntegrationTemplate
+  pFlowLogId_
+  pConfigDeliveryS3DestinationArn_
+  pIntegrateServices_ =
+    GetFlowLogsIntegrationTemplate'
+      { dryRun =
+          Prelude.Nothing,
+        flowLogId = pFlowLogId_,
+        configDeliveryS3DestinationArn =
+          pConfigDeliveryS3DestinationArn_,
+        integrateServices = pIntegrateServices_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getFlowLogsIntegrationTemplate_dryRun :: Lens.Lens' GetFlowLogsIntegrationTemplate (Prelude.Maybe Prelude.Bool)
+getFlowLogsIntegrationTemplate_dryRun = Lens.lens (\GetFlowLogsIntegrationTemplate' {dryRun} -> dryRun) (\s@GetFlowLogsIntegrationTemplate' {} a -> s {dryRun = a} :: GetFlowLogsIntegrationTemplate)
+
+-- | The ID of the flow log.
+getFlowLogsIntegrationTemplate_flowLogId :: Lens.Lens' GetFlowLogsIntegrationTemplate Prelude.Text
+getFlowLogsIntegrationTemplate_flowLogId = Lens.lens (\GetFlowLogsIntegrationTemplate' {flowLogId} -> flowLogId) (\s@GetFlowLogsIntegrationTemplate' {} a -> s {flowLogId = a} :: GetFlowLogsIntegrationTemplate)
+
+-- | To store the CloudFormation template in Amazon S3, specify the location
+-- in Amazon S3.
+getFlowLogsIntegrationTemplate_configDeliveryS3DestinationArn :: Lens.Lens' GetFlowLogsIntegrationTemplate Prelude.Text
+getFlowLogsIntegrationTemplate_configDeliveryS3DestinationArn = Lens.lens (\GetFlowLogsIntegrationTemplate' {configDeliveryS3DestinationArn} -> configDeliveryS3DestinationArn) (\s@GetFlowLogsIntegrationTemplate' {} a -> s {configDeliveryS3DestinationArn = a} :: GetFlowLogsIntegrationTemplate)
+
+-- | Information about the service integration.
+getFlowLogsIntegrationTemplate_integrateServices :: Lens.Lens' GetFlowLogsIntegrationTemplate IntegrateServices
+getFlowLogsIntegrationTemplate_integrateServices = Lens.lens (\GetFlowLogsIntegrationTemplate' {integrateServices} -> integrateServices) (\s@GetFlowLogsIntegrationTemplate' {} a -> s {integrateServices = a} :: GetFlowLogsIntegrationTemplate)
+
+instance
+  Core.AWSRequest
+    GetFlowLogsIntegrationTemplate
+  where
+  type
+    AWSResponse GetFlowLogsIntegrationTemplate =
+      GetFlowLogsIntegrationTemplateResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetFlowLogsIntegrationTemplateResponse'
+            Prelude.<$> (x Data..@? "result")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetFlowLogsIntegrationTemplate
+  where
+  hashWithSalt
+    _salt
+    GetFlowLogsIntegrationTemplate' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` flowLogId
+        `Prelude.hashWithSalt` configDeliveryS3DestinationArn
+        `Prelude.hashWithSalt` integrateServices
+
+instance
+  Prelude.NFData
+    GetFlowLogsIntegrationTemplate
+  where
+  rnf GetFlowLogsIntegrationTemplate' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf flowLogId
+      `Prelude.seq` Prelude.rnf configDeliveryS3DestinationArn
+      `Prelude.seq` Prelude.rnf integrateServices
+
+instance
+  Data.ToHeaders
+    GetFlowLogsIntegrationTemplate
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetFlowLogsIntegrationTemplate where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetFlowLogsIntegrationTemplate where
+  toQuery GetFlowLogsIntegrationTemplate' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetFlowLogsIntegrationTemplate" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "FlowLogId" Data.=: flowLogId,
+        "ConfigDeliveryS3DestinationArn"
+          Data.=: configDeliveryS3DestinationArn,
+        "IntegrateService" Data.=: integrateServices
+      ]
+
+-- | /See:/ 'newGetFlowLogsIntegrationTemplateResponse' smart constructor.
+data GetFlowLogsIntegrationTemplateResponse = GetFlowLogsIntegrationTemplateResponse'
+  { -- | The generated CloudFormation template.
+    result :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFlowLogsIntegrationTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'result', 'getFlowLogsIntegrationTemplateResponse_result' - The generated CloudFormation template.
+--
+-- 'httpStatus', 'getFlowLogsIntegrationTemplateResponse_httpStatus' - The response's http status code.
+newGetFlowLogsIntegrationTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFlowLogsIntegrationTemplateResponse
+newGetFlowLogsIntegrationTemplateResponse
+  pHttpStatus_ =
+    GetFlowLogsIntegrationTemplateResponse'
+      { result =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The generated CloudFormation template.
+getFlowLogsIntegrationTemplateResponse_result :: Lens.Lens' GetFlowLogsIntegrationTemplateResponse (Prelude.Maybe Prelude.Text)
+getFlowLogsIntegrationTemplateResponse_result = Lens.lens (\GetFlowLogsIntegrationTemplateResponse' {result} -> result) (\s@GetFlowLogsIntegrationTemplateResponse' {} a -> s {result = a} :: GetFlowLogsIntegrationTemplateResponse)
+
+-- | The response's http status code.
+getFlowLogsIntegrationTemplateResponse_httpStatus :: Lens.Lens' GetFlowLogsIntegrationTemplateResponse Prelude.Int
+getFlowLogsIntegrationTemplateResponse_httpStatus = Lens.lens (\GetFlowLogsIntegrationTemplateResponse' {httpStatus} -> httpStatus) (\s@GetFlowLogsIntegrationTemplateResponse' {} a -> s {httpStatus = a} :: GetFlowLogsIntegrationTemplateResponse)
+
+instance
+  Prelude.NFData
+    GetFlowLogsIntegrationTemplateResponse
+  where
+  rnf GetFlowLogsIntegrationTemplateResponse' {..} =
+    Prelude.rnf result
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetGroupsForCapacityReservation.hs b/gen/Amazonka/EC2/GetGroupsForCapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetGroupsForCapacityReservation.hs
@@ -0,0 +1,291 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetGroupsForCapacityReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the resource groups to which a Capacity Reservation has been
+-- added.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetGroupsForCapacityReservation
+  ( -- * Creating a Request
+    GetGroupsForCapacityReservation (..),
+    newGetGroupsForCapacityReservation,
+
+    -- * Request Lenses
+    getGroupsForCapacityReservation_dryRun,
+    getGroupsForCapacityReservation_maxResults,
+    getGroupsForCapacityReservation_nextToken,
+    getGroupsForCapacityReservation_capacityReservationId,
+
+    -- * Destructuring the Response
+    GetGroupsForCapacityReservationResponse (..),
+    newGetGroupsForCapacityReservationResponse,
+
+    -- * Response Lenses
+    getGroupsForCapacityReservationResponse_capacityReservationGroups,
+    getGroupsForCapacityReservationResponse_nextToken,
+    getGroupsForCapacityReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetGroupsForCapacityReservation' smart constructor.
+data GetGroupsForCapacityReservation = GetGroupsForCapacityReservation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return for the request in a single
+    -- page. The remaining results can be seen by sending another request with
+    -- the returned @nextToken@ value. This value can be between 5 and 500. If
+    -- @maxResults@ is given a larger value than 500, you receive an error.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to use to retrieve the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGroupsForCapacityReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getGroupsForCapacityReservation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getGroupsForCapacityReservation_maxResults' - The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+--
+-- 'nextToken', 'getGroupsForCapacityReservation_nextToken' - The token to use to retrieve the next page of results.
+--
+-- 'capacityReservationId', 'getGroupsForCapacityReservation_capacityReservationId' - The ID of the Capacity Reservation.
+newGetGroupsForCapacityReservation ::
+  -- | 'capacityReservationId'
+  Prelude.Text ->
+  GetGroupsForCapacityReservation
+newGetGroupsForCapacityReservation
+  pCapacityReservationId_ =
+    GetGroupsForCapacityReservation'
+      { dryRun =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        capacityReservationId =
+          pCapacityReservationId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getGroupsForCapacityReservation_dryRun :: Lens.Lens' GetGroupsForCapacityReservation (Prelude.Maybe Prelude.Bool)
+getGroupsForCapacityReservation_dryRun = Lens.lens (\GetGroupsForCapacityReservation' {dryRun} -> dryRun) (\s@GetGroupsForCapacityReservation' {} a -> s {dryRun = a} :: GetGroupsForCapacityReservation)
+
+-- | The maximum number of results to return for the request in a single
+-- page. The remaining results can be seen by sending another request with
+-- the returned @nextToken@ value. This value can be between 5 and 500. If
+-- @maxResults@ is given a larger value than 500, you receive an error.
+getGroupsForCapacityReservation_maxResults :: Lens.Lens' GetGroupsForCapacityReservation (Prelude.Maybe Prelude.Natural)
+getGroupsForCapacityReservation_maxResults = Lens.lens (\GetGroupsForCapacityReservation' {maxResults} -> maxResults) (\s@GetGroupsForCapacityReservation' {} a -> s {maxResults = a} :: GetGroupsForCapacityReservation)
+
+-- | The token to use to retrieve the next page of results.
+getGroupsForCapacityReservation_nextToken :: Lens.Lens' GetGroupsForCapacityReservation (Prelude.Maybe Prelude.Text)
+getGroupsForCapacityReservation_nextToken = Lens.lens (\GetGroupsForCapacityReservation' {nextToken} -> nextToken) (\s@GetGroupsForCapacityReservation' {} a -> s {nextToken = a} :: GetGroupsForCapacityReservation)
+
+-- | The ID of the Capacity Reservation.
+getGroupsForCapacityReservation_capacityReservationId :: Lens.Lens' GetGroupsForCapacityReservation Prelude.Text
+getGroupsForCapacityReservation_capacityReservationId = Lens.lens (\GetGroupsForCapacityReservation' {capacityReservationId} -> capacityReservationId) (\s@GetGroupsForCapacityReservation' {} a -> s {capacityReservationId = a} :: GetGroupsForCapacityReservation)
+
+instance
+  Core.AWSPager
+    GetGroupsForCapacityReservation
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getGroupsForCapacityReservationResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getGroupsForCapacityReservationResponse_capacityReservationGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getGroupsForCapacityReservation_nextToken
+          Lens..~ rs
+          Lens.^? getGroupsForCapacityReservationResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetGroupsForCapacityReservation
+  where
+  type
+    AWSResponse GetGroupsForCapacityReservation =
+      GetGroupsForCapacityReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetGroupsForCapacityReservationResponse'
+            Prelude.<$> ( x
+                            Data..@? "capacityReservationGroupSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetGroupsForCapacityReservation
+  where
+  hashWithSalt
+    _salt
+    GetGroupsForCapacityReservation' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` capacityReservationId
+
+instance
+  Prelude.NFData
+    GetGroupsForCapacityReservation
+  where
+  rnf GetGroupsForCapacityReservation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf capacityReservationId
+
+instance
+  Data.ToHeaders
+    GetGroupsForCapacityReservation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetGroupsForCapacityReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetGroupsForCapacityReservation where
+  toQuery GetGroupsForCapacityReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetGroupsForCapacityReservation" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "CapacityReservationId"
+          Data.=: capacityReservationId
+      ]
+
+-- | /See:/ 'newGetGroupsForCapacityReservationResponse' smart constructor.
+data GetGroupsForCapacityReservationResponse = GetGroupsForCapacityReservationResponse'
+  { -- | Information about the resource groups to which the Capacity Reservation
+    -- has been added.
+    capacityReservationGroups :: Prelude.Maybe [CapacityReservationGroup],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetGroupsForCapacityReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationGroups', 'getGroupsForCapacityReservationResponse_capacityReservationGroups' - Information about the resource groups to which the Capacity Reservation
+-- has been added.
+--
+-- 'nextToken', 'getGroupsForCapacityReservationResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getGroupsForCapacityReservationResponse_httpStatus' - The response's http status code.
+newGetGroupsForCapacityReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetGroupsForCapacityReservationResponse
+newGetGroupsForCapacityReservationResponse
+  pHttpStatus_ =
+    GetGroupsForCapacityReservationResponse'
+      { capacityReservationGroups =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the resource groups to which the Capacity Reservation
+-- has been added.
+getGroupsForCapacityReservationResponse_capacityReservationGroups :: Lens.Lens' GetGroupsForCapacityReservationResponse (Prelude.Maybe [CapacityReservationGroup])
+getGroupsForCapacityReservationResponse_capacityReservationGroups = Lens.lens (\GetGroupsForCapacityReservationResponse' {capacityReservationGroups} -> capacityReservationGroups) (\s@GetGroupsForCapacityReservationResponse' {} a -> s {capacityReservationGroups = a} :: GetGroupsForCapacityReservationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getGroupsForCapacityReservationResponse_nextToken :: Lens.Lens' GetGroupsForCapacityReservationResponse (Prelude.Maybe Prelude.Text)
+getGroupsForCapacityReservationResponse_nextToken = Lens.lens (\GetGroupsForCapacityReservationResponse' {nextToken} -> nextToken) (\s@GetGroupsForCapacityReservationResponse' {} a -> s {nextToken = a} :: GetGroupsForCapacityReservationResponse)
+
+-- | The response's http status code.
+getGroupsForCapacityReservationResponse_httpStatus :: Lens.Lens' GetGroupsForCapacityReservationResponse Prelude.Int
+getGroupsForCapacityReservationResponse_httpStatus = Lens.lens (\GetGroupsForCapacityReservationResponse' {httpStatus} -> httpStatus) (\s@GetGroupsForCapacityReservationResponse' {} a -> s {httpStatus = a} :: GetGroupsForCapacityReservationResponse)
+
+instance
+  Prelude.NFData
+    GetGroupsForCapacityReservationResponse
+  where
+  rnf GetGroupsForCapacityReservationResponse' {..} =
+    Prelude.rnf capacityReservationGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetHostReservationPurchasePreview.hs b/gen/Amazonka/EC2/GetHostReservationPurchasePreview.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetHostReservationPurchasePreview.hs
@@ -0,0 +1,256 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetHostReservationPurchasePreview
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Preview a reservation purchase with configurations that match those of
+-- your Dedicated Host. You must have active Dedicated Hosts in your
+-- account before you purchase a reservation.
+--
+-- This is a preview of the PurchaseHostReservation action and does not
+-- result in the offering being purchased.
+module Amazonka.EC2.GetHostReservationPurchasePreview
+  ( -- * Creating a Request
+    GetHostReservationPurchasePreview (..),
+    newGetHostReservationPurchasePreview,
+
+    -- * Request Lenses
+    getHostReservationPurchasePreview_hostIdSet,
+    getHostReservationPurchasePreview_offeringId,
+
+    -- * Destructuring the Response
+    GetHostReservationPurchasePreviewResponse (..),
+    newGetHostReservationPurchasePreviewResponse,
+
+    -- * Response Lenses
+    getHostReservationPurchasePreviewResponse_currencyCode,
+    getHostReservationPurchasePreviewResponse_purchase,
+    getHostReservationPurchasePreviewResponse_totalHourlyPrice,
+    getHostReservationPurchasePreviewResponse_totalUpfrontPrice,
+    getHostReservationPurchasePreviewResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetHostReservationPurchasePreview' smart constructor.
+data GetHostReservationPurchasePreview = GetHostReservationPurchasePreview'
+  { -- | The IDs of the Dedicated Hosts with which the reservation is associated.
+    hostIdSet :: [Prelude.Text],
+    -- | The offering ID of the reservation.
+    offeringId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetHostReservationPurchasePreview' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostIdSet', 'getHostReservationPurchasePreview_hostIdSet' - The IDs of the Dedicated Hosts with which the reservation is associated.
+--
+-- 'offeringId', 'getHostReservationPurchasePreview_offeringId' - The offering ID of the reservation.
+newGetHostReservationPurchasePreview ::
+  -- | 'offeringId'
+  Prelude.Text ->
+  GetHostReservationPurchasePreview
+newGetHostReservationPurchasePreview pOfferingId_ =
+  GetHostReservationPurchasePreview'
+    { hostIdSet =
+        Prelude.mempty,
+      offeringId = pOfferingId_
+    }
+
+-- | The IDs of the Dedicated Hosts with which the reservation is associated.
+getHostReservationPurchasePreview_hostIdSet :: Lens.Lens' GetHostReservationPurchasePreview [Prelude.Text]
+getHostReservationPurchasePreview_hostIdSet = Lens.lens (\GetHostReservationPurchasePreview' {hostIdSet} -> hostIdSet) (\s@GetHostReservationPurchasePreview' {} a -> s {hostIdSet = a} :: GetHostReservationPurchasePreview) Prelude.. Lens.coerced
+
+-- | The offering ID of the reservation.
+getHostReservationPurchasePreview_offeringId :: Lens.Lens' GetHostReservationPurchasePreview Prelude.Text
+getHostReservationPurchasePreview_offeringId = Lens.lens (\GetHostReservationPurchasePreview' {offeringId} -> offeringId) (\s@GetHostReservationPurchasePreview' {} a -> s {offeringId = a} :: GetHostReservationPurchasePreview)
+
+instance
+  Core.AWSRequest
+    GetHostReservationPurchasePreview
+  where
+  type
+    AWSResponse GetHostReservationPurchasePreview =
+      GetHostReservationPurchasePreviewResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetHostReservationPurchasePreviewResponse'
+            Prelude.<$> (x Data..@? "currencyCode")
+            Prelude.<*> ( x
+                            Data..@? "purchase"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "totalHourlyPrice")
+            Prelude.<*> (x Data..@? "totalUpfrontPrice")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetHostReservationPurchasePreview
+  where
+  hashWithSalt
+    _salt
+    GetHostReservationPurchasePreview' {..} =
+      _salt
+        `Prelude.hashWithSalt` hostIdSet
+        `Prelude.hashWithSalt` offeringId
+
+instance
+  Prelude.NFData
+    GetHostReservationPurchasePreview
+  where
+  rnf GetHostReservationPurchasePreview' {..} =
+    Prelude.rnf hostIdSet
+      `Prelude.seq` Prelude.rnf offeringId
+
+instance
+  Data.ToHeaders
+    GetHostReservationPurchasePreview
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetHostReservationPurchasePreview
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetHostReservationPurchasePreview
+  where
+  toQuery GetHostReservationPurchasePreview' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetHostReservationPurchasePreview" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQueryList "HostIdSet" hostIdSet,
+        "OfferingId" Data.=: offeringId
+      ]
+
+-- | /See:/ 'newGetHostReservationPurchasePreviewResponse' smart constructor.
+data GetHostReservationPurchasePreviewResponse = GetHostReservationPurchasePreviewResponse'
+  { -- | The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@
+    -- amounts are specified. At this time, the only supported currency is
+    -- @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The purchase information of the Dedicated Host reservation and the
+    -- Dedicated Hosts associated with it.
+    purchase :: Prelude.Maybe [Purchase],
+    -- | The potential total hourly price of the reservation per hour.
+    totalHourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The potential total upfront price. This is billed immediately.
+    totalUpfrontPrice :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetHostReservationPurchasePreviewResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currencyCode', 'getHostReservationPurchasePreviewResponse_currencyCode' - The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@
+-- amounts are specified. At this time, the only supported currency is
+-- @USD@.
+--
+-- 'purchase', 'getHostReservationPurchasePreviewResponse_purchase' - The purchase information of the Dedicated Host reservation and the
+-- Dedicated Hosts associated with it.
+--
+-- 'totalHourlyPrice', 'getHostReservationPurchasePreviewResponse_totalHourlyPrice' - The potential total hourly price of the reservation per hour.
+--
+-- 'totalUpfrontPrice', 'getHostReservationPurchasePreviewResponse_totalUpfrontPrice' - The potential total upfront price. This is billed immediately.
+--
+-- 'httpStatus', 'getHostReservationPurchasePreviewResponse_httpStatus' - The response's http status code.
+newGetHostReservationPurchasePreviewResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetHostReservationPurchasePreviewResponse
+newGetHostReservationPurchasePreviewResponse
+  pHttpStatus_ =
+    GetHostReservationPurchasePreviewResponse'
+      { currencyCode =
+          Prelude.Nothing,
+        purchase = Prelude.Nothing,
+        totalHourlyPrice =
+          Prelude.Nothing,
+        totalUpfrontPrice =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@
+-- amounts are specified. At this time, the only supported currency is
+-- @USD@.
+getHostReservationPurchasePreviewResponse_currencyCode :: Lens.Lens' GetHostReservationPurchasePreviewResponse (Prelude.Maybe CurrencyCodeValues)
+getHostReservationPurchasePreviewResponse_currencyCode = Lens.lens (\GetHostReservationPurchasePreviewResponse' {currencyCode} -> currencyCode) (\s@GetHostReservationPurchasePreviewResponse' {} a -> s {currencyCode = a} :: GetHostReservationPurchasePreviewResponse)
+
+-- | The purchase information of the Dedicated Host reservation and the
+-- Dedicated Hosts associated with it.
+getHostReservationPurchasePreviewResponse_purchase :: Lens.Lens' GetHostReservationPurchasePreviewResponse (Prelude.Maybe [Purchase])
+getHostReservationPurchasePreviewResponse_purchase = Lens.lens (\GetHostReservationPurchasePreviewResponse' {purchase} -> purchase) (\s@GetHostReservationPurchasePreviewResponse' {} a -> s {purchase = a} :: GetHostReservationPurchasePreviewResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The potential total hourly price of the reservation per hour.
+getHostReservationPurchasePreviewResponse_totalHourlyPrice :: Lens.Lens' GetHostReservationPurchasePreviewResponse (Prelude.Maybe Prelude.Text)
+getHostReservationPurchasePreviewResponse_totalHourlyPrice = Lens.lens (\GetHostReservationPurchasePreviewResponse' {totalHourlyPrice} -> totalHourlyPrice) (\s@GetHostReservationPurchasePreviewResponse' {} a -> s {totalHourlyPrice = a} :: GetHostReservationPurchasePreviewResponse)
+
+-- | The potential total upfront price. This is billed immediately.
+getHostReservationPurchasePreviewResponse_totalUpfrontPrice :: Lens.Lens' GetHostReservationPurchasePreviewResponse (Prelude.Maybe Prelude.Text)
+getHostReservationPurchasePreviewResponse_totalUpfrontPrice = Lens.lens (\GetHostReservationPurchasePreviewResponse' {totalUpfrontPrice} -> totalUpfrontPrice) (\s@GetHostReservationPurchasePreviewResponse' {} a -> s {totalUpfrontPrice = a} :: GetHostReservationPurchasePreviewResponse)
+
+-- | The response's http status code.
+getHostReservationPurchasePreviewResponse_httpStatus :: Lens.Lens' GetHostReservationPurchasePreviewResponse Prelude.Int
+getHostReservationPurchasePreviewResponse_httpStatus = Lens.lens (\GetHostReservationPurchasePreviewResponse' {httpStatus} -> httpStatus) (\s@GetHostReservationPurchasePreviewResponse' {} a -> s {httpStatus = a} :: GetHostReservationPurchasePreviewResponse)
+
+instance
+  Prelude.NFData
+    GetHostReservationPurchasePreviewResponse
+  where
+  rnf GetHostReservationPurchasePreviewResponse' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf purchase
+      `Prelude.seq` Prelude.rnf totalHourlyPrice
+      `Prelude.seq` Prelude.rnf totalUpfrontPrice
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetInstanceTypesFromInstanceRequirements.hs b/gen/Amazonka/EC2/GetInstanceTypesFromInstanceRequirements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetInstanceTypesFromInstanceRequirements.hs
@@ -0,0 +1,341 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetInstanceTypesFromInstanceRequirements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of instance types with the specified instance attributes.
+-- You can use the response to preview the instance types without launching
+-- instances. Note that the response does not consider capacity.
+--
+-- When you specify multiple parameters, you get instance types that
+-- satisfy all of the specified parameters. If you specify multiple values
+-- for a parameter, you get instance types that satisfy any of the
+-- specified values.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html#spotfleet-get-instance-types-from-instance-requirements Preview instance types with specified attributes>,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for EC2 Fleet>,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for Spot Fleet>,
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html Spot placement score>
+-- in the /Amazon EC2 User Guide/, and
+-- <https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html Creating an Auto Scaling group using attribute-based instance type selection>
+-- in the /Amazon EC2 Auto Scaling User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetInstanceTypesFromInstanceRequirements
+  ( -- * Creating a Request
+    GetInstanceTypesFromInstanceRequirements (..),
+    newGetInstanceTypesFromInstanceRequirements,
+
+    -- * Request Lenses
+    getInstanceTypesFromInstanceRequirements_dryRun,
+    getInstanceTypesFromInstanceRequirements_maxResults,
+    getInstanceTypesFromInstanceRequirements_nextToken,
+    getInstanceTypesFromInstanceRequirements_architectureTypes,
+    getInstanceTypesFromInstanceRequirements_virtualizationTypes,
+    getInstanceTypesFromInstanceRequirements_instanceRequirements,
+
+    -- * Destructuring the Response
+    GetInstanceTypesFromInstanceRequirementsResponse (..),
+    newGetInstanceTypesFromInstanceRequirementsResponse,
+
+    -- * Response Lenses
+    getInstanceTypesFromInstanceRequirementsResponse_instanceTypes,
+    getInstanceTypesFromInstanceRequirementsResponse_nextToken,
+    getInstanceTypesFromInstanceRequirementsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetInstanceTypesFromInstanceRequirements' smart constructor.
+data GetInstanceTypesFromInstanceRequirements = GetInstanceTypesFromInstanceRequirements'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and  1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with  the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The processor architecture type.
+    architectureTypes :: [ArchitectureType],
+    -- | The virtualization type.
+    virtualizationTypes :: [VirtualizationType],
+    -- | The attributes required for the instance types.
+    instanceRequirements :: InstanceRequirementsRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInstanceTypesFromInstanceRequirements' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getInstanceTypesFromInstanceRequirements_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getInstanceTypesFromInstanceRequirements_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and  1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with  the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'getInstanceTypesFromInstanceRequirements_nextToken' - The token for the next set of results.
+--
+-- 'architectureTypes', 'getInstanceTypesFromInstanceRequirements_architectureTypes' - The processor architecture type.
+--
+-- 'virtualizationTypes', 'getInstanceTypesFromInstanceRequirements_virtualizationTypes' - The virtualization type.
+--
+-- 'instanceRequirements', 'getInstanceTypesFromInstanceRequirements_instanceRequirements' - The attributes required for the instance types.
+newGetInstanceTypesFromInstanceRequirements ::
+  -- | 'instanceRequirements'
+  InstanceRequirementsRequest ->
+  GetInstanceTypesFromInstanceRequirements
+newGetInstanceTypesFromInstanceRequirements
+  pInstanceRequirements_ =
+    GetInstanceTypesFromInstanceRequirements'
+      { dryRun =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        architectureTypes =
+          Prelude.mempty,
+        virtualizationTypes =
+          Prelude.mempty,
+        instanceRequirements =
+          pInstanceRequirements_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getInstanceTypesFromInstanceRequirements_dryRun :: Lens.Lens' GetInstanceTypesFromInstanceRequirements (Prelude.Maybe Prelude.Bool)
+getInstanceTypesFromInstanceRequirements_dryRun = Lens.lens (\GetInstanceTypesFromInstanceRequirements' {dryRun} -> dryRun) (\s@GetInstanceTypesFromInstanceRequirements' {} a -> s {dryRun = a} :: GetInstanceTypesFromInstanceRequirements)
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and  1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with  the returned @NextToken@
+-- value.
+getInstanceTypesFromInstanceRequirements_maxResults :: Lens.Lens' GetInstanceTypesFromInstanceRequirements (Prelude.Maybe Prelude.Int)
+getInstanceTypesFromInstanceRequirements_maxResults = Lens.lens (\GetInstanceTypesFromInstanceRequirements' {maxResults} -> maxResults) (\s@GetInstanceTypesFromInstanceRequirements' {} a -> s {maxResults = a} :: GetInstanceTypesFromInstanceRequirements)
+
+-- | The token for the next set of results.
+getInstanceTypesFromInstanceRequirements_nextToken :: Lens.Lens' GetInstanceTypesFromInstanceRequirements (Prelude.Maybe Prelude.Text)
+getInstanceTypesFromInstanceRequirements_nextToken = Lens.lens (\GetInstanceTypesFromInstanceRequirements' {nextToken} -> nextToken) (\s@GetInstanceTypesFromInstanceRequirements' {} a -> s {nextToken = a} :: GetInstanceTypesFromInstanceRequirements)
+
+-- | The processor architecture type.
+getInstanceTypesFromInstanceRequirements_architectureTypes :: Lens.Lens' GetInstanceTypesFromInstanceRequirements [ArchitectureType]
+getInstanceTypesFromInstanceRequirements_architectureTypes = Lens.lens (\GetInstanceTypesFromInstanceRequirements' {architectureTypes} -> architectureTypes) (\s@GetInstanceTypesFromInstanceRequirements' {} a -> s {architectureTypes = a} :: GetInstanceTypesFromInstanceRequirements) Prelude.. Lens.coerced
+
+-- | The virtualization type.
+getInstanceTypesFromInstanceRequirements_virtualizationTypes :: Lens.Lens' GetInstanceTypesFromInstanceRequirements [VirtualizationType]
+getInstanceTypesFromInstanceRequirements_virtualizationTypes = Lens.lens (\GetInstanceTypesFromInstanceRequirements' {virtualizationTypes} -> virtualizationTypes) (\s@GetInstanceTypesFromInstanceRequirements' {} a -> s {virtualizationTypes = a} :: GetInstanceTypesFromInstanceRequirements) Prelude.. Lens.coerced
+
+-- | The attributes required for the instance types.
+getInstanceTypesFromInstanceRequirements_instanceRequirements :: Lens.Lens' GetInstanceTypesFromInstanceRequirements InstanceRequirementsRequest
+getInstanceTypesFromInstanceRequirements_instanceRequirements = Lens.lens (\GetInstanceTypesFromInstanceRequirements' {instanceRequirements} -> instanceRequirements) (\s@GetInstanceTypesFromInstanceRequirements' {} a -> s {instanceRequirements = a} :: GetInstanceTypesFromInstanceRequirements)
+
+instance
+  Core.AWSPager
+    GetInstanceTypesFromInstanceRequirements
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getInstanceTypesFromInstanceRequirementsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getInstanceTypesFromInstanceRequirementsResponse_instanceTypes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getInstanceTypesFromInstanceRequirements_nextToken
+          Lens..~ rs
+          Lens.^? getInstanceTypesFromInstanceRequirementsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetInstanceTypesFromInstanceRequirements
+  where
+  type
+    AWSResponse
+      GetInstanceTypesFromInstanceRequirements =
+      GetInstanceTypesFromInstanceRequirementsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetInstanceTypesFromInstanceRequirementsResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceTypeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetInstanceTypesFromInstanceRequirements
+  where
+  hashWithSalt
+    _salt
+    GetInstanceTypesFromInstanceRequirements' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` architectureTypes
+        `Prelude.hashWithSalt` virtualizationTypes
+        `Prelude.hashWithSalt` instanceRequirements
+
+instance
+  Prelude.NFData
+    GetInstanceTypesFromInstanceRequirements
+  where
+  rnf GetInstanceTypesFromInstanceRequirements' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf architectureTypes
+      `Prelude.seq` Prelude.rnf virtualizationTypes
+      `Prelude.seq` Prelude.rnf instanceRequirements
+
+instance
+  Data.ToHeaders
+    GetInstanceTypesFromInstanceRequirements
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetInstanceTypesFromInstanceRequirements
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetInstanceTypesFromInstanceRequirements
+  where
+  toQuery GetInstanceTypesFromInstanceRequirements' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetInstanceTypesFromInstanceRequirements" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQueryList
+          "ArchitectureType"
+          architectureTypes,
+        Data.toQueryList
+          "VirtualizationType"
+          virtualizationTypes,
+        "InstanceRequirements" Data.=: instanceRequirements
+      ]
+
+-- | /See:/ 'newGetInstanceTypesFromInstanceRequirementsResponse' smart constructor.
+data GetInstanceTypesFromInstanceRequirementsResponse = GetInstanceTypesFromInstanceRequirementsResponse'
+  { -- | The instance types with the specified instance attributes.
+    instanceTypes :: Prelude.Maybe [InstanceTypeInfoFromInstanceRequirements],
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInstanceTypesFromInstanceRequirementsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceTypes', 'getInstanceTypesFromInstanceRequirementsResponse_instanceTypes' - The instance types with the specified instance attributes.
+--
+-- 'nextToken', 'getInstanceTypesFromInstanceRequirementsResponse_nextToken' - The token for the next set of results.
+--
+-- 'httpStatus', 'getInstanceTypesFromInstanceRequirementsResponse_httpStatus' - The response's http status code.
+newGetInstanceTypesFromInstanceRequirementsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetInstanceTypesFromInstanceRequirementsResponse
+newGetInstanceTypesFromInstanceRequirementsResponse
+  pHttpStatus_ =
+    GetInstanceTypesFromInstanceRequirementsResponse'
+      { instanceTypes =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The instance types with the specified instance attributes.
+getInstanceTypesFromInstanceRequirementsResponse_instanceTypes :: Lens.Lens' GetInstanceTypesFromInstanceRequirementsResponse (Prelude.Maybe [InstanceTypeInfoFromInstanceRequirements])
+getInstanceTypesFromInstanceRequirementsResponse_instanceTypes = Lens.lens (\GetInstanceTypesFromInstanceRequirementsResponse' {instanceTypes} -> instanceTypes) (\s@GetInstanceTypesFromInstanceRequirementsResponse' {} a -> s {instanceTypes = a} :: GetInstanceTypesFromInstanceRequirementsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next set of results.
+getInstanceTypesFromInstanceRequirementsResponse_nextToken :: Lens.Lens' GetInstanceTypesFromInstanceRequirementsResponse (Prelude.Maybe Prelude.Text)
+getInstanceTypesFromInstanceRequirementsResponse_nextToken = Lens.lens (\GetInstanceTypesFromInstanceRequirementsResponse' {nextToken} -> nextToken) (\s@GetInstanceTypesFromInstanceRequirementsResponse' {} a -> s {nextToken = a} :: GetInstanceTypesFromInstanceRequirementsResponse)
+
+-- | The response's http status code.
+getInstanceTypesFromInstanceRequirementsResponse_httpStatus :: Lens.Lens' GetInstanceTypesFromInstanceRequirementsResponse Prelude.Int
+getInstanceTypesFromInstanceRequirementsResponse_httpStatus = Lens.lens (\GetInstanceTypesFromInstanceRequirementsResponse' {httpStatus} -> httpStatus) (\s@GetInstanceTypesFromInstanceRequirementsResponse' {} a -> s {httpStatus = a} :: GetInstanceTypesFromInstanceRequirementsResponse)
+
+instance
+  Prelude.NFData
+    GetInstanceTypesFromInstanceRequirementsResponse
+  where
+  rnf
+    GetInstanceTypesFromInstanceRequirementsResponse' {..} =
+      Prelude.rnf instanceTypes
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetInstanceUefiData.hs b/gen/Amazonka/EC2/GetInstanceUefiData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetInstanceUefiData.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetInstanceUefiData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- A binary representation of the UEFI variable store. Only non-volatile
+-- variables are stored. This is a base64 encoded and zlib compressed
+-- binary value that must be properly encoded.
+--
+-- When you use
+-- <https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html register-image>
+-- to create an AMI, you can create an exact copy of your variable store by
+-- passing the UEFI data in the @UefiData@ parameter. You can modify the
+-- UEFI data by using the
+-- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+-- GitHub. You can use the tool to convert the UEFI data into a
+-- human-readable format (JSON), which you can inspect and modify, and then
+-- convert back into the binary format to use with register-image.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.GetInstanceUefiData
+  ( -- * Creating a Request
+    GetInstanceUefiData (..),
+    newGetInstanceUefiData,
+
+    -- * Request Lenses
+    getInstanceUefiData_dryRun,
+    getInstanceUefiData_instanceId,
+
+    -- * Destructuring the Response
+    GetInstanceUefiDataResponse (..),
+    newGetInstanceUefiDataResponse,
+
+    -- * Response Lenses
+    getInstanceUefiDataResponse_instanceId,
+    getInstanceUefiDataResponse_uefiData,
+    getInstanceUefiDataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetInstanceUefiData' smart constructor.
+data GetInstanceUefiData = GetInstanceUefiData'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance from which to retrieve the UEFI data.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInstanceUefiData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getInstanceUefiData_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'getInstanceUefiData_instanceId' - The ID of the instance from which to retrieve the UEFI data.
+newGetInstanceUefiData ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  GetInstanceUefiData
+newGetInstanceUefiData pInstanceId_ =
+  GetInstanceUefiData'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getInstanceUefiData_dryRun :: Lens.Lens' GetInstanceUefiData (Prelude.Maybe Prelude.Bool)
+getInstanceUefiData_dryRun = Lens.lens (\GetInstanceUefiData' {dryRun} -> dryRun) (\s@GetInstanceUefiData' {} a -> s {dryRun = a} :: GetInstanceUefiData)
+
+-- | The ID of the instance from which to retrieve the UEFI data.
+getInstanceUefiData_instanceId :: Lens.Lens' GetInstanceUefiData Prelude.Text
+getInstanceUefiData_instanceId = Lens.lens (\GetInstanceUefiData' {instanceId} -> instanceId) (\s@GetInstanceUefiData' {} a -> s {instanceId = a} :: GetInstanceUefiData)
+
+instance Core.AWSRequest GetInstanceUefiData where
+  type
+    AWSResponse GetInstanceUefiData =
+      GetInstanceUefiDataResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetInstanceUefiDataResponse'
+            Prelude.<$> (x Data..@? "instanceId")
+            Prelude.<*> (x Data..@? "uefiData")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetInstanceUefiData where
+  hashWithSalt _salt GetInstanceUefiData' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData GetInstanceUefiData where
+  rnf GetInstanceUefiData' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders GetInstanceUefiData where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetInstanceUefiData where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetInstanceUefiData where
+  toQuery GetInstanceUefiData' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetInstanceUefiData" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newGetInstanceUefiDataResponse' smart constructor.
+data GetInstanceUefiDataResponse = GetInstanceUefiDataResponse'
+  { -- | The ID of the instance from which to retrieve the UEFI data.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | Base64 representation of the non-volatile UEFI variable store.
+    uefiData :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetInstanceUefiDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'getInstanceUefiDataResponse_instanceId' - The ID of the instance from which to retrieve the UEFI data.
+--
+-- 'uefiData', 'getInstanceUefiDataResponse_uefiData' - Base64 representation of the non-volatile UEFI variable store.
+--
+-- 'httpStatus', 'getInstanceUefiDataResponse_httpStatus' - The response's http status code.
+newGetInstanceUefiDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetInstanceUefiDataResponse
+newGetInstanceUefiDataResponse pHttpStatus_ =
+  GetInstanceUefiDataResponse'
+    { instanceId =
+        Prelude.Nothing,
+      uefiData = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the instance from which to retrieve the UEFI data.
+getInstanceUefiDataResponse_instanceId :: Lens.Lens' GetInstanceUefiDataResponse (Prelude.Maybe Prelude.Text)
+getInstanceUefiDataResponse_instanceId = Lens.lens (\GetInstanceUefiDataResponse' {instanceId} -> instanceId) (\s@GetInstanceUefiDataResponse' {} a -> s {instanceId = a} :: GetInstanceUefiDataResponse)
+
+-- | Base64 representation of the non-volatile UEFI variable store.
+getInstanceUefiDataResponse_uefiData :: Lens.Lens' GetInstanceUefiDataResponse (Prelude.Maybe Prelude.Text)
+getInstanceUefiDataResponse_uefiData = Lens.lens (\GetInstanceUefiDataResponse' {uefiData} -> uefiData) (\s@GetInstanceUefiDataResponse' {} a -> s {uefiData = a} :: GetInstanceUefiDataResponse)
+
+-- | The response's http status code.
+getInstanceUefiDataResponse_httpStatus :: Lens.Lens' GetInstanceUefiDataResponse Prelude.Int
+getInstanceUefiDataResponse_httpStatus = Lens.lens (\GetInstanceUefiDataResponse' {httpStatus} -> httpStatus) (\s@GetInstanceUefiDataResponse' {} a -> s {httpStatus = a} :: GetInstanceUefiDataResponse)
+
+instance Prelude.NFData GetInstanceUefiDataResponse where
+  rnf GetInstanceUefiDataResponse' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf uefiData
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetIpamAddressHistory.hs b/gen/Amazonka/EC2/GetIpamAddressHistory.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetIpamAddressHistory.hs
@@ -0,0 +1,332 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetIpamAddressHistory
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve historical information about a CIDR within an IPAM scope. For
+-- more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/view-history-cidr-ipam.html View the history of IP addresses>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetIpamAddressHistory
+  ( -- * Creating a Request
+    GetIpamAddressHistory (..),
+    newGetIpamAddressHistory,
+
+    -- * Request Lenses
+    getIpamAddressHistory_dryRun,
+    getIpamAddressHistory_endTime,
+    getIpamAddressHistory_maxResults,
+    getIpamAddressHistory_nextToken,
+    getIpamAddressHistory_startTime,
+    getIpamAddressHistory_vpcId,
+    getIpamAddressHistory_cidr,
+    getIpamAddressHistory_ipamScopeId,
+
+    -- * Destructuring the Response
+    GetIpamAddressHistoryResponse (..),
+    newGetIpamAddressHistoryResponse,
+
+    -- * Response Lenses
+    getIpamAddressHistoryResponse_historyRecords,
+    getIpamAddressHistoryResponse_nextToken,
+    getIpamAddressHistoryResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIpamAddressHistory' smart constructor.
+data GetIpamAddressHistory = GetIpamAddressHistory'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The end of the time period for which you are looking for history. If you
+    -- omit this option, it will default to the current time.
+    endTime :: Prelude.Maybe Data.ISO8601,
+    -- | The maximum number of historical results you would like returned per
+    -- page. Defaults to 100.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The start of the time period for which you are looking for history. If
+    -- you omit this option, it will default to the value of EndTime.
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the VPC you want your history records filtered by.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP
+    -- address range. If you enter a \/16 IPv4 CIDR, you will get records that
+    -- match it exactly. You will not get records for any subnets within the
+    -- \/16 CIDR.
+    cidr :: Prelude.Text,
+    -- | The ID of the IPAM scope that the CIDR is in.
+    ipamScopeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamAddressHistory' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getIpamAddressHistory_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endTime', 'getIpamAddressHistory_endTime' - The end of the time period for which you are looking for history. If you
+-- omit this option, it will default to the current time.
+--
+-- 'maxResults', 'getIpamAddressHistory_maxResults' - The maximum number of historical results you would like returned per
+-- page. Defaults to 100.
+--
+-- 'nextToken', 'getIpamAddressHistory_nextToken' - The token for the next page of results.
+--
+-- 'startTime', 'getIpamAddressHistory_startTime' - The start of the time period for which you are looking for history. If
+-- you omit this option, it will default to the value of EndTime.
+--
+-- 'vpcId', 'getIpamAddressHistory_vpcId' - The ID of the VPC you want your history records filtered by.
+--
+-- 'cidr', 'getIpamAddressHistory_cidr' - The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP
+-- address range. If you enter a \/16 IPv4 CIDR, you will get records that
+-- match it exactly. You will not get records for any subnets within the
+-- \/16 CIDR.
+--
+-- 'ipamScopeId', 'getIpamAddressHistory_ipamScopeId' - The ID of the IPAM scope that the CIDR is in.
+newGetIpamAddressHistory ::
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'ipamScopeId'
+  Prelude.Text ->
+  GetIpamAddressHistory
+newGetIpamAddressHistory pCidr_ pIpamScopeId_ =
+  GetIpamAddressHistory'
+    { dryRun = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      cidr = pCidr_,
+      ipamScopeId = pIpamScopeId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+getIpamAddressHistory_dryRun :: Lens.Lens' GetIpamAddressHistory (Prelude.Maybe Prelude.Bool)
+getIpamAddressHistory_dryRun = Lens.lens (\GetIpamAddressHistory' {dryRun} -> dryRun) (\s@GetIpamAddressHistory' {} a -> s {dryRun = a} :: GetIpamAddressHistory)
+
+-- | The end of the time period for which you are looking for history. If you
+-- omit this option, it will default to the current time.
+getIpamAddressHistory_endTime :: Lens.Lens' GetIpamAddressHistory (Prelude.Maybe Prelude.UTCTime)
+getIpamAddressHistory_endTime = Lens.lens (\GetIpamAddressHistory' {endTime} -> endTime) (\s@GetIpamAddressHistory' {} a -> s {endTime = a} :: GetIpamAddressHistory) Prelude.. Lens.mapping Data._Time
+
+-- | The maximum number of historical results you would like returned per
+-- page. Defaults to 100.
+getIpamAddressHistory_maxResults :: Lens.Lens' GetIpamAddressHistory (Prelude.Maybe Prelude.Natural)
+getIpamAddressHistory_maxResults = Lens.lens (\GetIpamAddressHistory' {maxResults} -> maxResults) (\s@GetIpamAddressHistory' {} a -> s {maxResults = a} :: GetIpamAddressHistory)
+
+-- | The token for the next page of results.
+getIpamAddressHistory_nextToken :: Lens.Lens' GetIpamAddressHistory (Prelude.Maybe Prelude.Text)
+getIpamAddressHistory_nextToken = Lens.lens (\GetIpamAddressHistory' {nextToken} -> nextToken) (\s@GetIpamAddressHistory' {} a -> s {nextToken = a} :: GetIpamAddressHistory)
+
+-- | The start of the time period for which you are looking for history. If
+-- you omit this option, it will default to the value of EndTime.
+getIpamAddressHistory_startTime :: Lens.Lens' GetIpamAddressHistory (Prelude.Maybe Prelude.UTCTime)
+getIpamAddressHistory_startTime = Lens.lens (\GetIpamAddressHistory' {startTime} -> startTime) (\s@GetIpamAddressHistory' {} a -> s {startTime = a} :: GetIpamAddressHistory) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the VPC you want your history records filtered by.
+getIpamAddressHistory_vpcId :: Lens.Lens' GetIpamAddressHistory (Prelude.Maybe Prelude.Text)
+getIpamAddressHistory_vpcId = Lens.lens (\GetIpamAddressHistory' {vpcId} -> vpcId) (\s@GetIpamAddressHistory' {} a -> s {vpcId = a} :: GetIpamAddressHistory)
+
+-- | The CIDR you want the history of. The CIDR can be an IPv4 or IPv6 IP
+-- address range. If you enter a \/16 IPv4 CIDR, you will get records that
+-- match it exactly. You will not get records for any subnets within the
+-- \/16 CIDR.
+getIpamAddressHistory_cidr :: Lens.Lens' GetIpamAddressHistory Prelude.Text
+getIpamAddressHistory_cidr = Lens.lens (\GetIpamAddressHistory' {cidr} -> cidr) (\s@GetIpamAddressHistory' {} a -> s {cidr = a} :: GetIpamAddressHistory)
+
+-- | The ID of the IPAM scope that the CIDR is in.
+getIpamAddressHistory_ipamScopeId :: Lens.Lens' GetIpamAddressHistory Prelude.Text
+getIpamAddressHistory_ipamScopeId = Lens.lens (\GetIpamAddressHistory' {ipamScopeId} -> ipamScopeId) (\s@GetIpamAddressHistory' {} a -> s {ipamScopeId = a} :: GetIpamAddressHistory)
+
+instance Core.AWSPager GetIpamAddressHistory where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getIpamAddressHistoryResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getIpamAddressHistoryResponse_historyRecords
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getIpamAddressHistory_nextToken
+          Lens..~ rs
+          Lens.^? getIpamAddressHistoryResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetIpamAddressHistory where
+  type
+    AWSResponse GetIpamAddressHistory =
+      GetIpamAddressHistoryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetIpamAddressHistoryResponse'
+            Prelude.<$> ( x
+                            Data..@? "historyRecordSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIpamAddressHistory where
+  hashWithSalt _salt GetIpamAddressHistory' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` ipamScopeId
+
+instance Prelude.NFData GetIpamAddressHistory where
+  rnf GetIpamAddressHistory' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf ipamScopeId
+
+instance Data.ToHeaders GetIpamAddressHistory where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetIpamAddressHistory where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetIpamAddressHistory where
+  toQuery GetIpamAddressHistory' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetIpamAddressHistory" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EndTime" Data.=: endTime,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "StartTime" Data.=: startTime,
+        "VpcId" Data.=: vpcId,
+        "Cidr" Data.=: cidr,
+        "IpamScopeId" Data.=: ipamScopeId
+      ]
+
+-- | /See:/ 'newGetIpamAddressHistoryResponse' smart constructor.
+data GetIpamAddressHistoryResponse = GetIpamAddressHistoryResponse'
+  { -- | A historical record for a CIDR within an IPAM scope. If the CIDR is
+    -- associated with an EC2 instance, you will see an object in the response
+    -- for the instance and one for the network interface.
+    historyRecords :: Prelude.Maybe [IpamAddressHistoryRecord],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamAddressHistoryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'historyRecords', 'getIpamAddressHistoryResponse_historyRecords' - A historical record for a CIDR within an IPAM scope. If the CIDR is
+-- associated with an EC2 instance, you will see an object in the response
+-- for the instance and one for the network interface.
+--
+-- 'nextToken', 'getIpamAddressHistoryResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getIpamAddressHistoryResponse_httpStatus' - The response's http status code.
+newGetIpamAddressHistoryResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIpamAddressHistoryResponse
+newGetIpamAddressHistoryResponse pHttpStatus_ =
+  GetIpamAddressHistoryResponse'
+    { historyRecords =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A historical record for a CIDR within an IPAM scope. If the CIDR is
+-- associated with an EC2 instance, you will see an object in the response
+-- for the instance and one for the network interface.
+getIpamAddressHistoryResponse_historyRecords :: Lens.Lens' GetIpamAddressHistoryResponse (Prelude.Maybe [IpamAddressHistoryRecord])
+getIpamAddressHistoryResponse_historyRecords = Lens.lens (\GetIpamAddressHistoryResponse' {historyRecords} -> historyRecords) (\s@GetIpamAddressHistoryResponse' {} a -> s {historyRecords = a} :: GetIpamAddressHistoryResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getIpamAddressHistoryResponse_nextToken :: Lens.Lens' GetIpamAddressHistoryResponse (Prelude.Maybe Prelude.Text)
+getIpamAddressHistoryResponse_nextToken = Lens.lens (\GetIpamAddressHistoryResponse' {nextToken} -> nextToken) (\s@GetIpamAddressHistoryResponse' {} a -> s {nextToken = a} :: GetIpamAddressHistoryResponse)
+
+-- | The response's http status code.
+getIpamAddressHistoryResponse_httpStatus :: Lens.Lens' GetIpamAddressHistoryResponse Prelude.Int
+getIpamAddressHistoryResponse_httpStatus = Lens.lens (\GetIpamAddressHistoryResponse' {httpStatus} -> httpStatus) (\s@GetIpamAddressHistoryResponse' {} a -> s {httpStatus = a} :: GetIpamAddressHistoryResponse)
+
+instance Prelude.NFData GetIpamAddressHistoryResponse where
+  rnf GetIpamAddressHistoryResponse' {..} =
+    Prelude.rnf historyRecords
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetIpamPoolAllocations.hs b/gen/Amazonka/EC2/GetIpamPoolAllocations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetIpamPoolAllocations.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetIpamPoolAllocations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get a list of all the CIDR allocations in an IPAM pool.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetIpamPoolAllocations
+  ( -- * Creating a Request
+    GetIpamPoolAllocations (..),
+    newGetIpamPoolAllocations,
+
+    -- * Request Lenses
+    getIpamPoolAllocations_dryRun,
+    getIpamPoolAllocations_filters,
+    getIpamPoolAllocations_ipamPoolAllocationId,
+    getIpamPoolAllocations_maxResults,
+    getIpamPoolAllocations_nextToken,
+    getIpamPoolAllocations_ipamPoolId,
+
+    -- * Destructuring the Response
+    GetIpamPoolAllocationsResponse (..),
+    newGetIpamPoolAllocationsResponse,
+
+    -- * Response Lenses
+    getIpamPoolAllocationsResponse_ipamPoolAllocations,
+    getIpamPoolAllocationsResponse_nextToken,
+    getIpamPoolAllocationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIpamPoolAllocations' smart constructor.
+data GetIpamPoolAllocations = GetIpamPoolAllocations'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters for the request. For more information about
+    -- filtering, see
+    -- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+    filters :: Prelude.Maybe [Filter],
+    -- | The ID of the allocation.
+    ipamPoolAllocationId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results you would like returned per page.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPAM pool you want to see the allocations for.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamPoolAllocations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getIpamPoolAllocations_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getIpamPoolAllocations_filters' - One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+--
+-- 'ipamPoolAllocationId', 'getIpamPoolAllocations_ipamPoolAllocationId' - The ID of the allocation.
+--
+-- 'maxResults', 'getIpamPoolAllocations_maxResults' - The maximum number of results you would like returned per page.
+--
+-- 'nextToken', 'getIpamPoolAllocations_nextToken' - The token for the next page of results.
+--
+-- 'ipamPoolId', 'getIpamPoolAllocations_ipamPoolId' - The ID of the IPAM pool you want to see the allocations for.
+newGetIpamPoolAllocations ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  GetIpamPoolAllocations
+newGetIpamPoolAllocations pIpamPoolId_ =
+  GetIpamPoolAllocations'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      ipamPoolAllocationId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+getIpamPoolAllocations_dryRun :: Lens.Lens' GetIpamPoolAllocations (Prelude.Maybe Prelude.Bool)
+getIpamPoolAllocations_dryRun = Lens.lens (\GetIpamPoolAllocations' {dryRun} -> dryRun) (\s@GetIpamPoolAllocations' {} a -> s {dryRun = a} :: GetIpamPoolAllocations)
+
+-- | One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+getIpamPoolAllocations_filters :: Lens.Lens' GetIpamPoolAllocations (Prelude.Maybe [Filter])
+getIpamPoolAllocations_filters = Lens.lens (\GetIpamPoolAllocations' {filters} -> filters) (\s@GetIpamPoolAllocations' {} a -> s {filters = a} :: GetIpamPoolAllocations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the allocation.
+getIpamPoolAllocations_ipamPoolAllocationId :: Lens.Lens' GetIpamPoolAllocations (Prelude.Maybe Prelude.Text)
+getIpamPoolAllocations_ipamPoolAllocationId = Lens.lens (\GetIpamPoolAllocations' {ipamPoolAllocationId} -> ipamPoolAllocationId) (\s@GetIpamPoolAllocations' {} a -> s {ipamPoolAllocationId = a} :: GetIpamPoolAllocations)
+
+-- | The maximum number of results you would like returned per page.
+getIpamPoolAllocations_maxResults :: Lens.Lens' GetIpamPoolAllocations (Prelude.Maybe Prelude.Natural)
+getIpamPoolAllocations_maxResults = Lens.lens (\GetIpamPoolAllocations' {maxResults} -> maxResults) (\s@GetIpamPoolAllocations' {} a -> s {maxResults = a} :: GetIpamPoolAllocations)
+
+-- | The token for the next page of results.
+getIpamPoolAllocations_nextToken :: Lens.Lens' GetIpamPoolAllocations (Prelude.Maybe Prelude.Text)
+getIpamPoolAllocations_nextToken = Lens.lens (\GetIpamPoolAllocations' {nextToken} -> nextToken) (\s@GetIpamPoolAllocations' {} a -> s {nextToken = a} :: GetIpamPoolAllocations)
+
+-- | The ID of the IPAM pool you want to see the allocations for.
+getIpamPoolAllocations_ipamPoolId :: Lens.Lens' GetIpamPoolAllocations Prelude.Text
+getIpamPoolAllocations_ipamPoolId = Lens.lens (\GetIpamPoolAllocations' {ipamPoolId} -> ipamPoolId) (\s@GetIpamPoolAllocations' {} a -> s {ipamPoolId = a} :: GetIpamPoolAllocations)
+
+instance Core.AWSPager GetIpamPoolAllocations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getIpamPoolAllocationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getIpamPoolAllocationsResponse_ipamPoolAllocations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getIpamPoolAllocations_nextToken
+          Lens..~ rs
+          Lens.^? getIpamPoolAllocationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetIpamPoolAllocations where
+  type
+    AWSResponse GetIpamPoolAllocations =
+      GetIpamPoolAllocationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetIpamPoolAllocationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipamPoolAllocationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIpamPoolAllocations where
+  hashWithSalt _salt GetIpamPoolAllocations' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` ipamPoolAllocationId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData GetIpamPoolAllocations where
+  rnf GetIpamPoolAllocations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf ipamPoolAllocationId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders GetIpamPoolAllocations where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetIpamPoolAllocations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetIpamPoolAllocations where
+  toQuery GetIpamPoolAllocations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetIpamPoolAllocations" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "IpamPoolAllocationId" Data.=: ipamPoolAllocationId,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newGetIpamPoolAllocationsResponse' smart constructor.
+data GetIpamPoolAllocationsResponse = GetIpamPoolAllocationsResponse'
+  { -- | The IPAM pool allocations you want information on.
+    ipamPoolAllocations :: Prelude.Maybe [IpamPoolAllocation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamPoolAllocationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPoolAllocations', 'getIpamPoolAllocationsResponse_ipamPoolAllocations' - The IPAM pool allocations you want information on.
+--
+-- 'nextToken', 'getIpamPoolAllocationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getIpamPoolAllocationsResponse_httpStatus' - The response's http status code.
+newGetIpamPoolAllocationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIpamPoolAllocationsResponse
+newGetIpamPoolAllocationsResponse pHttpStatus_ =
+  GetIpamPoolAllocationsResponse'
+    { ipamPoolAllocations =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IPAM pool allocations you want information on.
+getIpamPoolAllocationsResponse_ipamPoolAllocations :: Lens.Lens' GetIpamPoolAllocationsResponse (Prelude.Maybe [IpamPoolAllocation])
+getIpamPoolAllocationsResponse_ipamPoolAllocations = Lens.lens (\GetIpamPoolAllocationsResponse' {ipamPoolAllocations} -> ipamPoolAllocations) (\s@GetIpamPoolAllocationsResponse' {} a -> s {ipamPoolAllocations = a} :: GetIpamPoolAllocationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getIpamPoolAllocationsResponse_nextToken :: Lens.Lens' GetIpamPoolAllocationsResponse (Prelude.Maybe Prelude.Text)
+getIpamPoolAllocationsResponse_nextToken = Lens.lens (\GetIpamPoolAllocationsResponse' {nextToken} -> nextToken) (\s@GetIpamPoolAllocationsResponse' {} a -> s {nextToken = a} :: GetIpamPoolAllocationsResponse)
+
+-- | The response's http status code.
+getIpamPoolAllocationsResponse_httpStatus :: Lens.Lens' GetIpamPoolAllocationsResponse Prelude.Int
+getIpamPoolAllocationsResponse_httpStatus = Lens.lens (\GetIpamPoolAllocationsResponse' {httpStatus} -> httpStatus) (\s@GetIpamPoolAllocationsResponse' {} a -> s {httpStatus = a} :: GetIpamPoolAllocationsResponse)
+
+instance
+  Prelude.NFData
+    GetIpamPoolAllocationsResponse
+  where
+  rnf GetIpamPoolAllocationsResponse' {..} =
+    Prelude.rnf ipamPoolAllocations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetIpamPoolCidrs.hs b/gen/Amazonka/EC2/GetIpamPoolCidrs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetIpamPoolCidrs.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetIpamPoolCidrs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the CIDRs provisioned to an IPAM pool.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetIpamPoolCidrs
+  ( -- * Creating a Request
+    GetIpamPoolCidrs (..),
+    newGetIpamPoolCidrs,
+
+    -- * Request Lenses
+    getIpamPoolCidrs_dryRun,
+    getIpamPoolCidrs_filters,
+    getIpamPoolCidrs_maxResults,
+    getIpamPoolCidrs_nextToken,
+    getIpamPoolCidrs_ipamPoolId,
+
+    -- * Destructuring the Response
+    GetIpamPoolCidrsResponse (..),
+    newGetIpamPoolCidrsResponse,
+
+    -- * Response Lenses
+    getIpamPoolCidrsResponse_ipamPoolCidrs,
+    getIpamPoolCidrsResponse_nextToken,
+    getIpamPoolCidrsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIpamPoolCidrs' smart constructor.
+data GetIpamPoolCidrs = GetIpamPoolCidrs'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters for the request. For more information about
+    -- filtering, see
+    -- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPAM pool you want the CIDR for.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamPoolCidrs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getIpamPoolCidrs_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getIpamPoolCidrs_filters' - One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+--
+-- 'maxResults', 'getIpamPoolCidrs_maxResults' - The maximum number of results to return in the request.
+--
+-- 'nextToken', 'getIpamPoolCidrs_nextToken' - The token for the next page of results.
+--
+-- 'ipamPoolId', 'getIpamPoolCidrs_ipamPoolId' - The ID of the IPAM pool you want the CIDR for.
+newGetIpamPoolCidrs ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  GetIpamPoolCidrs
+newGetIpamPoolCidrs pIpamPoolId_ =
+  GetIpamPoolCidrs'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+getIpamPoolCidrs_dryRun :: Lens.Lens' GetIpamPoolCidrs (Prelude.Maybe Prelude.Bool)
+getIpamPoolCidrs_dryRun = Lens.lens (\GetIpamPoolCidrs' {dryRun} -> dryRun) (\s@GetIpamPoolCidrs' {} a -> s {dryRun = a} :: GetIpamPoolCidrs)
+
+-- | One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+getIpamPoolCidrs_filters :: Lens.Lens' GetIpamPoolCidrs (Prelude.Maybe [Filter])
+getIpamPoolCidrs_filters = Lens.lens (\GetIpamPoolCidrs' {filters} -> filters) (\s@GetIpamPoolCidrs' {} a -> s {filters = a} :: GetIpamPoolCidrs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in the request.
+getIpamPoolCidrs_maxResults :: Lens.Lens' GetIpamPoolCidrs (Prelude.Maybe Prelude.Natural)
+getIpamPoolCidrs_maxResults = Lens.lens (\GetIpamPoolCidrs' {maxResults} -> maxResults) (\s@GetIpamPoolCidrs' {} a -> s {maxResults = a} :: GetIpamPoolCidrs)
+
+-- | The token for the next page of results.
+getIpamPoolCidrs_nextToken :: Lens.Lens' GetIpamPoolCidrs (Prelude.Maybe Prelude.Text)
+getIpamPoolCidrs_nextToken = Lens.lens (\GetIpamPoolCidrs' {nextToken} -> nextToken) (\s@GetIpamPoolCidrs' {} a -> s {nextToken = a} :: GetIpamPoolCidrs)
+
+-- | The ID of the IPAM pool you want the CIDR for.
+getIpamPoolCidrs_ipamPoolId :: Lens.Lens' GetIpamPoolCidrs Prelude.Text
+getIpamPoolCidrs_ipamPoolId = Lens.lens (\GetIpamPoolCidrs' {ipamPoolId} -> ipamPoolId) (\s@GetIpamPoolCidrs' {} a -> s {ipamPoolId = a} :: GetIpamPoolCidrs)
+
+instance Core.AWSPager GetIpamPoolCidrs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getIpamPoolCidrsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getIpamPoolCidrsResponse_ipamPoolCidrs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getIpamPoolCidrs_nextToken
+          Lens..~ rs
+          Lens.^? getIpamPoolCidrsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetIpamPoolCidrs where
+  type
+    AWSResponse GetIpamPoolCidrs =
+      GetIpamPoolCidrsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetIpamPoolCidrsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipamPoolCidrSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIpamPoolCidrs where
+  hashWithSalt _salt GetIpamPoolCidrs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData GetIpamPoolCidrs where
+  rnf GetIpamPoolCidrs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders GetIpamPoolCidrs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetIpamPoolCidrs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetIpamPoolCidrs where
+  toQuery GetIpamPoolCidrs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetIpamPoolCidrs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newGetIpamPoolCidrsResponse' smart constructor.
+data GetIpamPoolCidrsResponse = GetIpamPoolCidrsResponse'
+  { -- | Information about the CIDRs provisioned to an IPAM pool.
+    ipamPoolCidrs :: Prelude.Maybe [IpamPoolCidr],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamPoolCidrsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPoolCidrs', 'getIpamPoolCidrsResponse_ipamPoolCidrs' - Information about the CIDRs provisioned to an IPAM pool.
+--
+-- 'nextToken', 'getIpamPoolCidrsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getIpamPoolCidrsResponse_httpStatus' - The response's http status code.
+newGetIpamPoolCidrsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIpamPoolCidrsResponse
+newGetIpamPoolCidrsResponse pHttpStatus_ =
+  GetIpamPoolCidrsResponse'
+    { ipamPoolCidrs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the CIDRs provisioned to an IPAM pool.
+getIpamPoolCidrsResponse_ipamPoolCidrs :: Lens.Lens' GetIpamPoolCidrsResponse (Prelude.Maybe [IpamPoolCidr])
+getIpamPoolCidrsResponse_ipamPoolCidrs = Lens.lens (\GetIpamPoolCidrsResponse' {ipamPoolCidrs} -> ipamPoolCidrs) (\s@GetIpamPoolCidrsResponse' {} a -> s {ipamPoolCidrs = a} :: GetIpamPoolCidrsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getIpamPoolCidrsResponse_nextToken :: Lens.Lens' GetIpamPoolCidrsResponse (Prelude.Maybe Prelude.Text)
+getIpamPoolCidrsResponse_nextToken = Lens.lens (\GetIpamPoolCidrsResponse' {nextToken} -> nextToken) (\s@GetIpamPoolCidrsResponse' {} a -> s {nextToken = a} :: GetIpamPoolCidrsResponse)
+
+-- | The response's http status code.
+getIpamPoolCidrsResponse_httpStatus :: Lens.Lens' GetIpamPoolCidrsResponse Prelude.Int
+getIpamPoolCidrsResponse_httpStatus = Lens.lens (\GetIpamPoolCidrsResponse' {httpStatus} -> httpStatus) (\s@GetIpamPoolCidrsResponse' {} a -> s {httpStatus = a} :: GetIpamPoolCidrsResponse)
+
+instance Prelude.NFData GetIpamPoolCidrsResponse where
+  rnf GetIpamPoolCidrsResponse' {..} =
+    Prelude.rnf ipamPoolCidrs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetIpamResourceCidrs.hs b/gen/Amazonka/EC2/GetIpamResourceCidrs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetIpamResourceCidrs.hs
@@ -0,0 +1,336 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetIpamResourceCidrs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get information about the resources in a scope.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetIpamResourceCidrs
+  ( -- * Creating a Request
+    GetIpamResourceCidrs (..),
+    newGetIpamResourceCidrs,
+
+    -- * Request Lenses
+    getIpamResourceCidrs_dryRun,
+    getIpamResourceCidrs_filters,
+    getIpamResourceCidrs_ipamPoolId,
+    getIpamResourceCidrs_maxResults,
+    getIpamResourceCidrs_nextToken,
+    getIpamResourceCidrs_resourceId,
+    getIpamResourceCidrs_resourceOwner,
+    getIpamResourceCidrs_resourceTag,
+    getIpamResourceCidrs_resourceType,
+    getIpamResourceCidrs_ipamScopeId,
+
+    -- * Destructuring the Response
+    GetIpamResourceCidrsResponse (..),
+    newGetIpamResourceCidrsResponse,
+
+    -- * Response Lenses
+    getIpamResourceCidrsResponse_ipamResourceCidrs,
+    getIpamResourceCidrsResponse_nextToken,
+    getIpamResourceCidrsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetIpamResourceCidrs' smart constructor.
+data GetIpamResourceCidrs = GetIpamResourceCidrs'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters for the request. For more information about
+    -- filtering, see
+    -- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+    filters :: Prelude.Maybe [Filter],
+    -- | The ID of the IPAM pool that the resource is in.
+    ipamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of results to return in the request.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the resource.
+    resourceOwner :: Prelude.Maybe Prelude.Text,
+    -- | The resource tag.
+    resourceTag :: Prelude.Maybe RequestIpamResourceTag,
+    -- | The resource type.
+    resourceType :: Prelude.Maybe IpamResourceType,
+    -- | The ID of the scope that the resource is in.
+    ipamScopeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamResourceCidrs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getIpamResourceCidrs_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getIpamResourceCidrs_filters' - One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+--
+-- 'ipamPoolId', 'getIpamResourceCidrs_ipamPoolId' - The ID of the IPAM pool that the resource is in.
+--
+-- 'maxResults', 'getIpamResourceCidrs_maxResults' - The maximum number of results to return in the request.
+--
+-- 'nextToken', 'getIpamResourceCidrs_nextToken' - The token for the next page of results.
+--
+-- 'resourceId', 'getIpamResourceCidrs_resourceId' - The ID of the resource.
+--
+-- 'resourceOwner', 'getIpamResourceCidrs_resourceOwner' - The ID of the Amazon Web Services account that owns the resource.
+--
+-- 'resourceTag', 'getIpamResourceCidrs_resourceTag' - The resource tag.
+--
+-- 'resourceType', 'getIpamResourceCidrs_resourceType' - The resource type.
+--
+-- 'ipamScopeId', 'getIpamResourceCidrs_ipamScopeId' - The ID of the scope that the resource is in.
+newGetIpamResourceCidrs ::
+  -- | 'ipamScopeId'
+  Prelude.Text ->
+  GetIpamResourceCidrs
+newGetIpamResourceCidrs pIpamScopeId_ =
+  GetIpamResourceCidrs'
+    { dryRun = Prelude.Nothing,
+      filters = Prelude.Nothing,
+      ipamPoolId = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceOwner = Prelude.Nothing,
+      resourceTag = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      ipamScopeId = pIpamScopeId_
+    }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+getIpamResourceCidrs_dryRun :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe Prelude.Bool)
+getIpamResourceCidrs_dryRun = Lens.lens (\GetIpamResourceCidrs' {dryRun} -> dryRun) (\s@GetIpamResourceCidrs' {} a -> s {dryRun = a} :: GetIpamResourceCidrs)
+
+-- | One or more filters for the request. For more information about
+-- filtering, see
+-- <https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html Filtering CLI output>.
+getIpamResourceCidrs_filters :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe [Filter])
+getIpamResourceCidrs_filters = Lens.lens (\GetIpamResourceCidrs' {filters} -> filters) (\s@GetIpamResourceCidrs' {} a -> s {filters = a} :: GetIpamResourceCidrs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the IPAM pool that the resource is in.
+getIpamResourceCidrs_ipamPoolId :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe Prelude.Text)
+getIpamResourceCidrs_ipamPoolId = Lens.lens (\GetIpamResourceCidrs' {ipamPoolId} -> ipamPoolId) (\s@GetIpamResourceCidrs' {} a -> s {ipamPoolId = a} :: GetIpamResourceCidrs)
+
+-- | The maximum number of results to return in the request.
+getIpamResourceCidrs_maxResults :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe Prelude.Natural)
+getIpamResourceCidrs_maxResults = Lens.lens (\GetIpamResourceCidrs' {maxResults} -> maxResults) (\s@GetIpamResourceCidrs' {} a -> s {maxResults = a} :: GetIpamResourceCidrs)
+
+-- | The token for the next page of results.
+getIpamResourceCidrs_nextToken :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe Prelude.Text)
+getIpamResourceCidrs_nextToken = Lens.lens (\GetIpamResourceCidrs' {nextToken} -> nextToken) (\s@GetIpamResourceCidrs' {} a -> s {nextToken = a} :: GetIpamResourceCidrs)
+
+-- | The ID of the resource.
+getIpamResourceCidrs_resourceId :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe Prelude.Text)
+getIpamResourceCidrs_resourceId = Lens.lens (\GetIpamResourceCidrs' {resourceId} -> resourceId) (\s@GetIpamResourceCidrs' {} a -> s {resourceId = a} :: GetIpamResourceCidrs)
+
+-- | The ID of the Amazon Web Services account that owns the resource.
+getIpamResourceCidrs_resourceOwner :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe Prelude.Text)
+getIpamResourceCidrs_resourceOwner = Lens.lens (\GetIpamResourceCidrs' {resourceOwner} -> resourceOwner) (\s@GetIpamResourceCidrs' {} a -> s {resourceOwner = a} :: GetIpamResourceCidrs)
+
+-- | The resource tag.
+getIpamResourceCidrs_resourceTag :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe RequestIpamResourceTag)
+getIpamResourceCidrs_resourceTag = Lens.lens (\GetIpamResourceCidrs' {resourceTag} -> resourceTag) (\s@GetIpamResourceCidrs' {} a -> s {resourceTag = a} :: GetIpamResourceCidrs)
+
+-- | The resource type.
+getIpamResourceCidrs_resourceType :: Lens.Lens' GetIpamResourceCidrs (Prelude.Maybe IpamResourceType)
+getIpamResourceCidrs_resourceType = Lens.lens (\GetIpamResourceCidrs' {resourceType} -> resourceType) (\s@GetIpamResourceCidrs' {} a -> s {resourceType = a} :: GetIpamResourceCidrs)
+
+-- | The ID of the scope that the resource is in.
+getIpamResourceCidrs_ipamScopeId :: Lens.Lens' GetIpamResourceCidrs Prelude.Text
+getIpamResourceCidrs_ipamScopeId = Lens.lens (\GetIpamResourceCidrs' {ipamScopeId} -> ipamScopeId) (\s@GetIpamResourceCidrs' {} a -> s {ipamScopeId = a} :: GetIpamResourceCidrs)
+
+instance Core.AWSPager GetIpamResourceCidrs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getIpamResourceCidrsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getIpamResourceCidrsResponse_ipamResourceCidrs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getIpamResourceCidrs_nextToken
+          Lens..~ rs
+          Lens.^? getIpamResourceCidrsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetIpamResourceCidrs where
+  type
+    AWSResponse GetIpamResourceCidrs =
+      GetIpamResourceCidrsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetIpamResourceCidrsResponse'
+            Prelude.<$> ( x
+                            Data..@? "ipamResourceCidrSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetIpamResourceCidrs where
+  hashWithSalt _salt GetIpamResourceCidrs' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` ipamPoolId
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceOwner
+      `Prelude.hashWithSalt` resourceTag
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` ipamScopeId
+
+instance Prelude.NFData GetIpamResourceCidrs where
+  rnf GetIpamResourceCidrs' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf ipamPoolId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwner
+      `Prelude.seq` Prelude.rnf resourceTag
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf ipamScopeId
+
+instance Data.ToHeaders GetIpamResourceCidrs where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetIpamResourceCidrs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetIpamResourceCidrs where
+  toQuery GetIpamResourceCidrs' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetIpamResourceCidrs" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "IpamPoolId" Data.=: ipamPoolId,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "ResourceId" Data.=: resourceId,
+        "ResourceOwner" Data.=: resourceOwner,
+        "ResourceTag" Data.=: resourceTag,
+        "ResourceType" Data.=: resourceType,
+        "IpamScopeId" Data.=: ipamScopeId
+      ]
+
+-- | /See:/ 'newGetIpamResourceCidrsResponse' smart constructor.
+data GetIpamResourceCidrsResponse = GetIpamResourceCidrsResponse'
+  { -- | The resource CIDRs.
+    ipamResourceCidrs :: Prelude.Maybe [IpamResourceCidr],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetIpamResourceCidrsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamResourceCidrs', 'getIpamResourceCidrsResponse_ipamResourceCidrs' - The resource CIDRs.
+--
+-- 'nextToken', 'getIpamResourceCidrsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getIpamResourceCidrsResponse_httpStatus' - The response's http status code.
+newGetIpamResourceCidrsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetIpamResourceCidrsResponse
+newGetIpamResourceCidrsResponse pHttpStatus_ =
+  GetIpamResourceCidrsResponse'
+    { ipamResourceCidrs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The resource CIDRs.
+getIpamResourceCidrsResponse_ipamResourceCidrs :: Lens.Lens' GetIpamResourceCidrsResponse (Prelude.Maybe [IpamResourceCidr])
+getIpamResourceCidrsResponse_ipamResourceCidrs = Lens.lens (\GetIpamResourceCidrsResponse' {ipamResourceCidrs} -> ipamResourceCidrs) (\s@GetIpamResourceCidrsResponse' {} a -> s {ipamResourceCidrs = a} :: GetIpamResourceCidrsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getIpamResourceCidrsResponse_nextToken :: Lens.Lens' GetIpamResourceCidrsResponse (Prelude.Maybe Prelude.Text)
+getIpamResourceCidrsResponse_nextToken = Lens.lens (\GetIpamResourceCidrsResponse' {nextToken} -> nextToken) (\s@GetIpamResourceCidrsResponse' {} a -> s {nextToken = a} :: GetIpamResourceCidrsResponse)
+
+-- | The response's http status code.
+getIpamResourceCidrsResponse_httpStatus :: Lens.Lens' GetIpamResourceCidrsResponse Prelude.Int
+getIpamResourceCidrsResponse_httpStatus = Lens.lens (\GetIpamResourceCidrsResponse' {httpStatus} -> httpStatus) (\s@GetIpamResourceCidrsResponse' {} a -> s {httpStatus = a} :: GetIpamResourceCidrsResponse)
+
+instance Prelude.NFData GetIpamResourceCidrsResponse where
+  rnf GetIpamResourceCidrsResponse' {..} =
+    Prelude.rnf ipamResourceCidrs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetLaunchTemplateData.hs b/gen/Amazonka/EC2/GetLaunchTemplateData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetLaunchTemplateData.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetLaunchTemplateData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the configuration data of the specified instance. You can use
+-- this data to create a launch template.
+--
+-- This action calls on other describe actions to get instance information.
+-- Depending on your instance configuration, you may need to allow the
+-- following actions in your IAM policy: @DescribeSpotInstanceRequests@,
+-- @DescribeInstanceCreditSpecifications@, @DescribeVolumes@,
+-- @DescribeInstanceAttribute@, and @DescribeElasticGpus@. Or, you can
+-- allow @describe*@ depending on your instance requirements.
+module Amazonka.EC2.GetLaunchTemplateData
+  ( -- * Creating a Request
+    GetLaunchTemplateData (..),
+    newGetLaunchTemplateData,
+
+    -- * Request Lenses
+    getLaunchTemplateData_dryRun,
+    getLaunchTemplateData_instanceId,
+
+    -- * Destructuring the Response
+    GetLaunchTemplateDataResponse (..),
+    newGetLaunchTemplateDataResponse,
+
+    -- * Response Lenses
+    getLaunchTemplateDataResponse_launchTemplateData,
+    getLaunchTemplateDataResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetLaunchTemplateData' smart constructor.
+data GetLaunchTemplateData = GetLaunchTemplateData'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchTemplateData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getLaunchTemplateData_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'getLaunchTemplateData_instanceId' - The ID of the instance.
+newGetLaunchTemplateData ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  GetLaunchTemplateData
+newGetLaunchTemplateData pInstanceId_ =
+  GetLaunchTemplateData'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getLaunchTemplateData_dryRun :: Lens.Lens' GetLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+getLaunchTemplateData_dryRun = Lens.lens (\GetLaunchTemplateData' {dryRun} -> dryRun) (\s@GetLaunchTemplateData' {} a -> s {dryRun = a} :: GetLaunchTemplateData)
+
+-- | The ID of the instance.
+getLaunchTemplateData_instanceId :: Lens.Lens' GetLaunchTemplateData Prelude.Text
+getLaunchTemplateData_instanceId = Lens.lens (\GetLaunchTemplateData' {instanceId} -> instanceId) (\s@GetLaunchTemplateData' {} a -> s {instanceId = a} :: GetLaunchTemplateData)
+
+instance Core.AWSRequest GetLaunchTemplateData where
+  type
+    AWSResponse GetLaunchTemplateData =
+      GetLaunchTemplateDataResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetLaunchTemplateDataResponse'
+            Prelude.<$> (x Data..@? "launchTemplateData")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetLaunchTemplateData where
+  hashWithSalt _salt GetLaunchTemplateData' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData GetLaunchTemplateData where
+  rnf GetLaunchTemplateData' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders GetLaunchTemplateData where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetLaunchTemplateData where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetLaunchTemplateData where
+  toQuery GetLaunchTemplateData' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetLaunchTemplateData" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newGetLaunchTemplateDataResponse' smart constructor.
+data GetLaunchTemplateDataResponse = GetLaunchTemplateDataResponse'
+  { -- | The instance data.
+    launchTemplateData :: Prelude.Maybe ResponseLaunchTemplateData,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetLaunchTemplateDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateData', 'getLaunchTemplateDataResponse_launchTemplateData' - The instance data.
+--
+-- 'httpStatus', 'getLaunchTemplateDataResponse_httpStatus' - The response's http status code.
+newGetLaunchTemplateDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetLaunchTemplateDataResponse
+newGetLaunchTemplateDataResponse pHttpStatus_ =
+  GetLaunchTemplateDataResponse'
+    { launchTemplateData =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The instance data.
+getLaunchTemplateDataResponse_launchTemplateData :: Lens.Lens' GetLaunchTemplateDataResponse (Prelude.Maybe ResponseLaunchTemplateData)
+getLaunchTemplateDataResponse_launchTemplateData = Lens.lens (\GetLaunchTemplateDataResponse' {launchTemplateData} -> launchTemplateData) (\s@GetLaunchTemplateDataResponse' {} a -> s {launchTemplateData = a} :: GetLaunchTemplateDataResponse)
+
+-- | The response's http status code.
+getLaunchTemplateDataResponse_httpStatus :: Lens.Lens' GetLaunchTemplateDataResponse Prelude.Int
+getLaunchTemplateDataResponse_httpStatus = Lens.lens (\GetLaunchTemplateDataResponse' {httpStatus} -> httpStatus) (\s@GetLaunchTemplateDataResponse' {} a -> s {httpStatus = a} :: GetLaunchTemplateDataResponse)
+
+instance Prelude.NFData GetLaunchTemplateDataResponse where
+  rnf GetLaunchTemplateDataResponse' {..} =
+    Prelude.rnf launchTemplateData
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetManagedPrefixListAssociations.hs b/gen/Amazonka/EC2/GetManagedPrefixListAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetManagedPrefixListAssociations.hs
@@ -0,0 +1,286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetManagedPrefixListAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the resources that are associated with the
+-- specified managed prefix list.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetManagedPrefixListAssociations
+  ( -- * Creating a Request
+    GetManagedPrefixListAssociations (..),
+    newGetManagedPrefixListAssociations,
+
+    -- * Request Lenses
+    getManagedPrefixListAssociations_dryRun,
+    getManagedPrefixListAssociations_maxResults,
+    getManagedPrefixListAssociations_nextToken,
+    getManagedPrefixListAssociations_prefixListId,
+
+    -- * Destructuring the Response
+    GetManagedPrefixListAssociationsResponse (..),
+    newGetManagedPrefixListAssociationsResponse,
+
+    -- * Response Lenses
+    getManagedPrefixListAssociationsResponse_nextToken,
+    getManagedPrefixListAssociationsResponse_prefixListAssociations,
+    getManagedPrefixListAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetManagedPrefixListAssociations' smart constructor.
+data GetManagedPrefixListAssociations = GetManagedPrefixListAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetManagedPrefixListAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getManagedPrefixListAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getManagedPrefixListAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getManagedPrefixListAssociations_nextToken' - The token for the next page of results.
+--
+-- 'prefixListId', 'getManagedPrefixListAssociations_prefixListId' - The ID of the prefix list.
+newGetManagedPrefixListAssociations ::
+  -- | 'prefixListId'
+  Prelude.Text ->
+  GetManagedPrefixListAssociations
+newGetManagedPrefixListAssociations pPrefixListId_ =
+  GetManagedPrefixListAssociations'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      prefixListId = pPrefixListId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getManagedPrefixListAssociations_dryRun :: Lens.Lens' GetManagedPrefixListAssociations (Prelude.Maybe Prelude.Bool)
+getManagedPrefixListAssociations_dryRun = Lens.lens (\GetManagedPrefixListAssociations' {dryRun} -> dryRun) (\s@GetManagedPrefixListAssociations' {} a -> s {dryRun = a} :: GetManagedPrefixListAssociations)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getManagedPrefixListAssociations_maxResults :: Lens.Lens' GetManagedPrefixListAssociations (Prelude.Maybe Prelude.Natural)
+getManagedPrefixListAssociations_maxResults = Lens.lens (\GetManagedPrefixListAssociations' {maxResults} -> maxResults) (\s@GetManagedPrefixListAssociations' {} a -> s {maxResults = a} :: GetManagedPrefixListAssociations)
+
+-- | The token for the next page of results.
+getManagedPrefixListAssociations_nextToken :: Lens.Lens' GetManagedPrefixListAssociations (Prelude.Maybe Prelude.Text)
+getManagedPrefixListAssociations_nextToken = Lens.lens (\GetManagedPrefixListAssociations' {nextToken} -> nextToken) (\s@GetManagedPrefixListAssociations' {} a -> s {nextToken = a} :: GetManagedPrefixListAssociations)
+
+-- | The ID of the prefix list.
+getManagedPrefixListAssociations_prefixListId :: Lens.Lens' GetManagedPrefixListAssociations Prelude.Text
+getManagedPrefixListAssociations_prefixListId = Lens.lens (\GetManagedPrefixListAssociations' {prefixListId} -> prefixListId) (\s@GetManagedPrefixListAssociations' {} a -> s {prefixListId = a} :: GetManagedPrefixListAssociations)
+
+instance
+  Core.AWSPager
+    GetManagedPrefixListAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getManagedPrefixListAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getManagedPrefixListAssociationsResponse_prefixListAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getManagedPrefixListAssociations_nextToken
+          Lens..~ rs
+          Lens.^? getManagedPrefixListAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetManagedPrefixListAssociations
+  where
+  type
+    AWSResponse GetManagedPrefixListAssociations =
+      GetManagedPrefixListAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetManagedPrefixListAssociationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "prefixListAssociationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetManagedPrefixListAssociations
+  where
+  hashWithSalt
+    _salt
+    GetManagedPrefixListAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` prefixListId
+
+instance
+  Prelude.NFData
+    GetManagedPrefixListAssociations
+  where
+  rnf GetManagedPrefixListAssociations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance
+  Data.ToHeaders
+    GetManagedPrefixListAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetManagedPrefixListAssociations where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetManagedPrefixListAssociations
+  where
+  toQuery GetManagedPrefixListAssociations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetManagedPrefixListAssociations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newGetManagedPrefixListAssociationsResponse' smart constructor.
+data GetManagedPrefixListAssociationsResponse = GetManagedPrefixListAssociationsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the associations.
+    prefixListAssociations :: Prelude.Maybe [PrefixListAssociation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetManagedPrefixListAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getManagedPrefixListAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'prefixListAssociations', 'getManagedPrefixListAssociationsResponse_prefixListAssociations' - Information about the associations.
+--
+-- 'httpStatus', 'getManagedPrefixListAssociationsResponse_httpStatus' - The response's http status code.
+newGetManagedPrefixListAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetManagedPrefixListAssociationsResponse
+newGetManagedPrefixListAssociationsResponse
+  pHttpStatus_ =
+    GetManagedPrefixListAssociationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        prefixListAssociations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getManagedPrefixListAssociationsResponse_nextToken :: Lens.Lens' GetManagedPrefixListAssociationsResponse (Prelude.Maybe Prelude.Text)
+getManagedPrefixListAssociationsResponse_nextToken = Lens.lens (\GetManagedPrefixListAssociationsResponse' {nextToken} -> nextToken) (\s@GetManagedPrefixListAssociationsResponse' {} a -> s {nextToken = a} :: GetManagedPrefixListAssociationsResponse)
+
+-- | Information about the associations.
+getManagedPrefixListAssociationsResponse_prefixListAssociations :: Lens.Lens' GetManagedPrefixListAssociationsResponse (Prelude.Maybe [PrefixListAssociation])
+getManagedPrefixListAssociationsResponse_prefixListAssociations = Lens.lens (\GetManagedPrefixListAssociationsResponse' {prefixListAssociations} -> prefixListAssociations) (\s@GetManagedPrefixListAssociationsResponse' {} a -> s {prefixListAssociations = a} :: GetManagedPrefixListAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getManagedPrefixListAssociationsResponse_httpStatus :: Lens.Lens' GetManagedPrefixListAssociationsResponse Prelude.Int
+getManagedPrefixListAssociationsResponse_httpStatus = Lens.lens (\GetManagedPrefixListAssociationsResponse' {httpStatus} -> httpStatus) (\s@GetManagedPrefixListAssociationsResponse' {} a -> s {httpStatus = a} :: GetManagedPrefixListAssociationsResponse)
+
+instance
+  Prelude.NFData
+    GetManagedPrefixListAssociationsResponse
+  where
+  rnf GetManagedPrefixListAssociationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf prefixListAssociations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetManagedPrefixListEntries.hs b/gen/Amazonka/EC2/GetManagedPrefixListEntries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetManagedPrefixListEntries.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetManagedPrefixListEntries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the entries for a specified managed prefix list.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetManagedPrefixListEntries
+  ( -- * Creating a Request
+    GetManagedPrefixListEntries (..),
+    newGetManagedPrefixListEntries,
+
+    -- * Request Lenses
+    getManagedPrefixListEntries_dryRun,
+    getManagedPrefixListEntries_maxResults,
+    getManagedPrefixListEntries_nextToken,
+    getManagedPrefixListEntries_targetVersion,
+    getManagedPrefixListEntries_prefixListId,
+
+    -- * Destructuring the Response
+    GetManagedPrefixListEntriesResponse (..),
+    newGetManagedPrefixListEntriesResponse,
+
+    -- * Response Lenses
+    getManagedPrefixListEntriesResponse_entries,
+    getManagedPrefixListEntriesResponse_nextToken,
+    getManagedPrefixListEntriesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetManagedPrefixListEntries' smart constructor.
+data GetManagedPrefixListEntries = GetManagedPrefixListEntries'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The version of the prefix list for which to return the entries. The
+    -- default is the current version.
+    targetVersion :: Prelude.Maybe Prelude.Integer,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetManagedPrefixListEntries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getManagedPrefixListEntries_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getManagedPrefixListEntries_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getManagedPrefixListEntries_nextToken' - The token for the next page of results.
+--
+-- 'targetVersion', 'getManagedPrefixListEntries_targetVersion' - The version of the prefix list for which to return the entries. The
+-- default is the current version.
+--
+-- 'prefixListId', 'getManagedPrefixListEntries_prefixListId' - The ID of the prefix list.
+newGetManagedPrefixListEntries ::
+  -- | 'prefixListId'
+  Prelude.Text ->
+  GetManagedPrefixListEntries
+newGetManagedPrefixListEntries pPrefixListId_ =
+  GetManagedPrefixListEntries'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      targetVersion = Prelude.Nothing,
+      prefixListId = pPrefixListId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getManagedPrefixListEntries_dryRun :: Lens.Lens' GetManagedPrefixListEntries (Prelude.Maybe Prelude.Bool)
+getManagedPrefixListEntries_dryRun = Lens.lens (\GetManagedPrefixListEntries' {dryRun} -> dryRun) (\s@GetManagedPrefixListEntries' {} a -> s {dryRun = a} :: GetManagedPrefixListEntries)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getManagedPrefixListEntries_maxResults :: Lens.Lens' GetManagedPrefixListEntries (Prelude.Maybe Prelude.Natural)
+getManagedPrefixListEntries_maxResults = Lens.lens (\GetManagedPrefixListEntries' {maxResults} -> maxResults) (\s@GetManagedPrefixListEntries' {} a -> s {maxResults = a} :: GetManagedPrefixListEntries)
+
+-- | The token for the next page of results.
+getManagedPrefixListEntries_nextToken :: Lens.Lens' GetManagedPrefixListEntries (Prelude.Maybe Prelude.Text)
+getManagedPrefixListEntries_nextToken = Lens.lens (\GetManagedPrefixListEntries' {nextToken} -> nextToken) (\s@GetManagedPrefixListEntries' {} a -> s {nextToken = a} :: GetManagedPrefixListEntries)
+
+-- | The version of the prefix list for which to return the entries. The
+-- default is the current version.
+getManagedPrefixListEntries_targetVersion :: Lens.Lens' GetManagedPrefixListEntries (Prelude.Maybe Prelude.Integer)
+getManagedPrefixListEntries_targetVersion = Lens.lens (\GetManagedPrefixListEntries' {targetVersion} -> targetVersion) (\s@GetManagedPrefixListEntries' {} a -> s {targetVersion = a} :: GetManagedPrefixListEntries)
+
+-- | The ID of the prefix list.
+getManagedPrefixListEntries_prefixListId :: Lens.Lens' GetManagedPrefixListEntries Prelude.Text
+getManagedPrefixListEntries_prefixListId = Lens.lens (\GetManagedPrefixListEntries' {prefixListId} -> prefixListId) (\s@GetManagedPrefixListEntries' {} a -> s {prefixListId = a} :: GetManagedPrefixListEntries)
+
+instance Core.AWSPager GetManagedPrefixListEntries where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getManagedPrefixListEntriesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getManagedPrefixListEntriesResponse_entries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getManagedPrefixListEntries_nextToken
+          Lens..~ rs
+          Lens.^? getManagedPrefixListEntriesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetManagedPrefixListEntries where
+  type
+    AWSResponse GetManagedPrefixListEntries =
+      GetManagedPrefixListEntriesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetManagedPrefixListEntriesResponse'
+            Prelude.<$> ( x
+                            Data..@? "entrySet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetManagedPrefixListEntries where
+  hashWithSalt _salt GetManagedPrefixListEntries' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` targetVersion
+      `Prelude.hashWithSalt` prefixListId
+
+instance Prelude.NFData GetManagedPrefixListEntries where
+  rnf GetManagedPrefixListEntries' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf targetVersion
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance Data.ToHeaders GetManagedPrefixListEntries where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetManagedPrefixListEntries where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetManagedPrefixListEntries where
+  toQuery GetManagedPrefixListEntries' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetManagedPrefixListEntries" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TargetVersion" Data.=: targetVersion,
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newGetManagedPrefixListEntriesResponse' smart constructor.
+data GetManagedPrefixListEntriesResponse = GetManagedPrefixListEntriesResponse'
+  { -- | Information about the prefix list entries.
+    entries :: Prelude.Maybe [PrefixListEntry],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetManagedPrefixListEntriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entries', 'getManagedPrefixListEntriesResponse_entries' - Information about the prefix list entries.
+--
+-- 'nextToken', 'getManagedPrefixListEntriesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getManagedPrefixListEntriesResponse_httpStatus' - The response's http status code.
+newGetManagedPrefixListEntriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetManagedPrefixListEntriesResponse
+newGetManagedPrefixListEntriesResponse pHttpStatus_ =
+  GetManagedPrefixListEntriesResponse'
+    { entries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the prefix list entries.
+getManagedPrefixListEntriesResponse_entries :: Lens.Lens' GetManagedPrefixListEntriesResponse (Prelude.Maybe [PrefixListEntry])
+getManagedPrefixListEntriesResponse_entries = Lens.lens (\GetManagedPrefixListEntriesResponse' {entries} -> entries) (\s@GetManagedPrefixListEntriesResponse' {} a -> s {entries = a} :: GetManagedPrefixListEntriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getManagedPrefixListEntriesResponse_nextToken :: Lens.Lens' GetManagedPrefixListEntriesResponse (Prelude.Maybe Prelude.Text)
+getManagedPrefixListEntriesResponse_nextToken = Lens.lens (\GetManagedPrefixListEntriesResponse' {nextToken} -> nextToken) (\s@GetManagedPrefixListEntriesResponse' {} a -> s {nextToken = a} :: GetManagedPrefixListEntriesResponse)
+
+-- | The response's http status code.
+getManagedPrefixListEntriesResponse_httpStatus :: Lens.Lens' GetManagedPrefixListEntriesResponse Prelude.Int
+getManagedPrefixListEntriesResponse_httpStatus = Lens.lens (\GetManagedPrefixListEntriesResponse' {httpStatus} -> httpStatus) (\s@GetManagedPrefixListEntriesResponse' {} a -> s {httpStatus = a} :: GetManagedPrefixListEntriesResponse)
+
+instance
+  Prelude.NFData
+    GetManagedPrefixListEntriesResponse
+  where
+  rnf GetManagedPrefixListEntriesResponse' {..} =
+    Prelude.rnf entries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetNetworkInsightsAccessScopeAnalysisFindings.hs b/gen/Amazonka/EC2/GetNetworkInsightsAccessScopeAnalysisFindings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetNetworkInsightsAccessScopeAnalysisFindings.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetNetworkInsightsAccessScopeAnalysisFindings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the findings for the specified Network Access Scope analysis.
+module Amazonka.EC2.GetNetworkInsightsAccessScopeAnalysisFindings
+  ( -- * Creating a Request
+    GetNetworkInsightsAccessScopeAnalysisFindings (..),
+    newGetNetworkInsightsAccessScopeAnalysisFindings,
+
+    -- * Request Lenses
+    getNetworkInsightsAccessScopeAnalysisFindings_dryRun,
+    getNetworkInsightsAccessScopeAnalysisFindings_maxResults,
+    getNetworkInsightsAccessScopeAnalysisFindings_nextToken,
+    getNetworkInsightsAccessScopeAnalysisFindings_networkInsightsAccessScopeAnalysisId,
+
+    -- * Destructuring the Response
+    GetNetworkInsightsAccessScopeAnalysisFindingsResponse (..),
+    newGetNetworkInsightsAccessScopeAnalysisFindingsResponse,
+
+    -- * Response Lenses
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisFindings,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisStatus,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_networkInsightsAccessScopeAnalysisId,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_nextToken,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetNetworkInsightsAccessScopeAnalysisFindings' smart constructor.
+data GetNetworkInsightsAccessScopeAnalysisFindings = GetNetworkInsightsAccessScopeAnalysisFindings'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkInsightsAccessScopeAnalysisFindings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getNetworkInsightsAccessScopeAnalysisFindings_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getNetworkInsightsAccessScopeAnalysisFindings_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getNetworkInsightsAccessScopeAnalysisFindings_nextToken' - The token for the next page of results.
+--
+-- 'networkInsightsAccessScopeAnalysisId', 'getNetworkInsightsAccessScopeAnalysisFindings_networkInsightsAccessScopeAnalysisId' - The ID of the Network Access Scope analysis.
+newGetNetworkInsightsAccessScopeAnalysisFindings ::
+  -- | 'networkInsightsAccessScopeAnalysisId'
+  Prelude.Text ->
+  GetNetworkInsightsAccessScopeAnalysisFindings
+newGetNetworkInsightsAccessScopeAnalysisFindings
+  pNetworkInsightsAccessScopeAnalysisId_ =
+    GetNetworkInsightsAccessScopeAnalysisFindings'
+      { dryRun =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        networkInsightsAccessScopeAnalysisId =
+          pNetworkInsightsAccessScopeAnalysisId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getNetworkInsightsAccessScopeAnalysisFindings_dryRun :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindings (Prelude.Maybe Prelude.Bool)
+getNetworkInsightsAccessScopeAnalysisFindings_dryRun = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindings' {dryRun} -> dryRun) (\s@GetNetworkInsightsAccessScopeAnalysisFindings' {} a -> s {dryRun = a} :: GetNetworkInsightsAccessScopeAnalysisFindings)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getNetworkInsightsAccessScopeAnalysisFindings_maxResults :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindings (Prelude.Maybe Prelude.Natural)
+getNetworkInsightsAccessScopeAnalysisFindings_maxResults = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindings' {maxResults} -> maxResults) (\s@GetNetworkInsightsAccessScopeAnalysisFindings' {} a -> s {maxResults = a} :: GetNetworkInsightsAccessScopeAnalysisFindings)
+
+-- | The token for the next page of results.
+getNetworkInsightsAccessScopeAnalysisFindings_nextToken :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindings (Prelude.Maybe Prelude.Text)
+getNetworkInsightsAccessScopeAnalysisFindings_nextToken = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindings' {nextToken} -> nextToken) (\s@GetNetworkInsightsAccessScopeAnalysisFindings' {} a -> s {nextToken = a} :: GetNetworkInsightsAccessScopeAnalysisFindings)
+
+-- | The ID of the Network Access Scope analysis.
+getNetworkInsightsAccessScopeAnalysisFindings_networkInsightsAccessScopeAnalysisId :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindings Prelude.Text
+getNetworkInsightsAccessScopeAnalysisFindings_networkInsightsAccessScopeAnalysisId = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindings' {networkInsightsAccessScopeAnalysisId} -> networkInsightsAccessScopeAnalysisId) (\s@GetNetworkInsightsAccessScopeAnalysisFindings' {} a -> s {networkInsightsAccessScopeAnalysisId = a} :: GetNetworkInsightsAccessScopeAnalysisFindings)
+
+instance
+  Core.AWSRequest
+    GetNetworkInsightsAccessScopeAnalysisFindings
+  where
+  type
+    AWSResponse
+      GetNetworkInsightsAccessScopeAnalysisFindings =
+      GetNetworkInsightsAccessScopeAnalysisFindingsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetNetworkInsightsAccessScopeAnalysisFindingsResponse'
+            Prelude.<$> ( x
+                            Data..@? "analysisFindingSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "analysisStatus")
+            Prelude.<*> (x Data..@? "networkInsightsAccessScopeAnalysisId")
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetNetworkInsightsAccessScopeAnalysisFindings
+  where
+  hashWithSalt
+    _salt
+    GetNetworkInsightsAccessScopeAnalysisFindings' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` networkInsightsAccessScopeAnalysisId
+
+instance
+  Prelude.NFData
+    GetNetworkInsightsAccessScopeAnalysisFindings
+  where
+  rnf
+    GetNetworkInsightsAccessScopeAnalysisFindings' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf maxResults
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisId
+
+instance
+  Data.ToHeaders
+    GetNetworkInsightsAccessScopeAnalysisFindings
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetNetworkInsightsAccessScopeAnalysisFindings
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetNetworkInsightsAccessScopeAnalysisFindings
+  where
+  toQuery
+    GetNetworkInsightsAccessScopeAnalysisFindings' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "GetNetworkInsightsAccessScopeAnalysisFindings" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken,
+          "NetworkInsightsAccessScopeAnalysisId"
+            Data.=: networkInsightsAccessScopeAnalysisId
+        ]
+
+-- | /See:/ 'newGetNetworkInsightsAccessScopeAnalysisFindingsResponse' smart constructor.
+data GetNetworkInsightsAccessScopeAnalysisFindingsResponse = GetNetworkInsightsAccessScopeAnalysisFindingsResponse'
+  { -- | The findings associated with Network Access Scope Analysis.
+    analysisFindings :: Prelude.Maybe [AccessScopeAnalysisFinding],
+    -- | The status of Network Access Scope Analysis.
+    analysisStatus :: Prelude.Maybe AnalysisStatus,
+    -- | The ID of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisId :: Prelude.Maybe Prelude.Text,
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkInsightsAccessScopeAnalysisFindingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analysisFindings', 'getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisFindings' - The findings associated with Network Access Scope Analysis.
+--
+-- 'analysisStatus', 'getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisStatus' - The status of Network Access Scope Analysis.
+--
+-- 'networkInsightsAccessScopeAnalysisId', 'getNetworkInsightsAccessScopeAnalysisFindingsResponse_networkInsightsAccessScopeAnalysisId' - The ID of the Network Access Scope analysis.
+--
+-- 'nextToken', 'getNetworkInsightsAccessScopeAnalysisFindingsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getNetworkInsightsAccessScopeAnalysisFindingsResponse_httpStatus' - The response's http status code.
+newGetNetworkInsightsAccessScopeAnalysisFindingsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetNetworkInsightsAccessScopeAnalysisFindingsResponse
+newGetNetworkInsightsAccessScopeAnalysisFindingsResponse
+  pHttpStatus_ =
+    GetNetworkInsightsAccessScopeAnalysisFindingsResponse'
+      { analysisFindings =
+          Prelude.Nothing,
+        analysisStatus =
+          Prelude.Nothing,
+        networkInsightsAccessScopeAnalysisId =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The findings associated with Network Access Scope Analysis.
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisFindings :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindingsResponse (Prelude.Maybe [AccessScopeAnalysisFinding])
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisFindings = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {analysisFindings} -> analysisFindings) (\s@GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {} a -> s {analysisFindings = a} :: GetNetworkInsightsAccessScopeAnalysisFindingsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of Network Access Scope Analysis.
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisStatus :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindingsResponse (Prelude.Maybe AnalysisStatus)
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisStatus = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {analysisStatus} -> analysisStatus) (\s@GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {} a -> s {analysisStatus = a} :: GetNetworkInsightsAccessScopeAnalysisFindingsResponse)
+
+-- | The ID of the Network Access Scope analysis.
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_networkInsightsAccessScopeAnalysisId :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindingsResponse (Prelude.Maybe Prelude.Text)
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_networkInsightsAccessScopeAnalysisId = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {networkInsightsAccessScopeAnalysisId} -> networkInsightsAccessScopeAnalysisId) (\s@GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {} a -> s {networkInsightsAccessScopeAnalysisId = a} :: GetNetworkInsightsAccessScopeAnalysisFindingsResponse)
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_nextToken :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindingsResponse (Prelude.Maybe Prelude.Text)
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_nextToken = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {nextToken} -> nextToken) (\s@GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {} a -> s {nextToken = a} :: GetNetworkInsightsAccessScopeAnalysisFindingsResponse)
+
+-- | The response's http status code.
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_httpStatus :: Lens.Lens' GetNetworkInsightsAccessScopeAnalysisFindingsResponse Prelude.Int
+getNetworkInsightsAccessScopeAnalysisFindingsResponse_httpStatus = Lens.lens (\GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {httpStatus} -> httpStatus) (\s@GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {} a -> s {httpStatus = a} :: GetNetworkInsightsAccessScopeAnalysisFindingsResponse)
+
+instance
+  Prelude.NFData
+    GetNetworkInsightsAccessScopeAnalysisFindingsResponse
+  where
+  rnf
+    GetNetworkInsightsAccessScopeAnalysisFindingsResponse' {..} =
+      Prelude.rnf analysisFindings
+        `Prelude.seq` Prelude.rnf analysisStatus
+        `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisId
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetNetworkInsightsAccessScopeContent.hs b/gen/Amazonka/EC2/GetNetworkInsightsAccessScopeContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetNetworkInsightsAccessScopeContent.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetNetworkInsightsAccessScopeContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets the content for the specified Network Access Scope.
+module Amazonka.EC2.GetNetworkInsightsAccessScopeContent
+  ( -- * Creating a Request
+    GetNetworkInsightsAccessScopeContent (..),
+    newGetNetworkInsightsAccessScopeContent,
+
+    -- * Request Lenses
+    getNetworkInsightsAccessScopeContent_dryRun,
+    getNetworkInsightsAccessScopeContent_networkInsightsAccessScopeId,
+
+    -- * Destructuring the Response
+    GetNetworkInsightsAccessScopeContentResponse (..),
+    newGetNetworkInsightsAccessScopeContentResponse,
+
+    -- * Response Lenses
+    getNetworkInsightsAccessScopeContentResponse_networkInsightsAccessScopeContent,
+    getNetworkInsightsAccessScopeContentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetNetworkInsightsAccessScopeContent' smart constructor.
+data GetNetworkInsightsAccessScopeContent = GetNetworkInsightsAccessScopeContent'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkInsightsAccessScopeContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getNetworkInsightsAccessScopeContent_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkInsightsAccessScopeId', 'getNetworkInsightsAccessScopeContent_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+newGetNetworkInsightsAccessScopeContent ::
+  -- | 'networkInsightsAccessScopeId'
+  Prelude.Text ->
+  GetNetworkInsightsAccessScopeContent
+newGetNetworkInsightsAccessScopeContent
+  pNetworkInsightsAccessScopeId_ =
+    GetNetworkInsightsAccessScopeContent'
+      { dryRun =
+          Prelude.Nothing,
+        networkInsightsAccessScopeId =
+          pNetworkInsightsAccessScopeId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getNetworkInsightsAccessScopeContent_dryRun :: Lens.Lens' GetNetworkInsightsAccessScopeContent (Prelude.Maybe Prelude.Bool)
+getNetworkInsightsAccessScopeContent_dryRun = Lens.lens (\GetNetworkInsightsAccessScopeContent' {dryRun} -> dryRun) (\s@GetNetworkInsightsAccessScopeContent' {} a -> s {dryRun = a} :: GetNetworkInsightsAccessScopeContent)
+
+-- | The ID of the Network Access Scope.
+getNetworkInsightsAccessScopeContent_networkInsightsAccessScopeId :: Lens.Lens' GetNetworkInsightsAccessScopeContent Prelude.Text
+getNetworkInsightsAccessScopeContent_networkInsightsAccessScopeId = Lens.lens (\GetNetworkInsightsAccessScopeContent' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@GetNetworkInsightsAccessScopeContent' {} a -> s {networkInsightsAccessScopeId = a} :: GetNetworkInsightsAccessScopeContent)
+
+instance
+  Core.AWSRequest
+    GetNetworkInsightsAccessScopeContent
+  where
+  type
+    AWSResponse GetNetworkInsightsAccessScopeContent =
+      GetNetworkInsightsAccessScopeContentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetNetworkInsightsAccessScopeContentResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAccessScopeContent")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetNetworkInsightsAccessScopeContent
+  where
+  hashWithSalt
+    _salt
+    GetNetworkInsightsAccessScopeContent' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` networkInsightsAccessScopeId
+
+instance
+  Prelude.NFData
+    GetNetworkInsightsAccessScopeContent
+  where
+  rnf GetNetworkInsightsAccessScopeContent' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
+
+instance
+  Data.ToHeaders
+    GetNetworkInsightsAccessScopeContent
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetNetworkInsightsAccessScopeContent
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetNetworkInsightsAccessScopeContent
+  where
+  toQuery GetNetworkInsightsAccessScopeContent' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetNetworkInsightsAccessScopeContent" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "NetworkInsightsAccessScopeId"
+          Data.=: networkInsightsAccessScopeId
+      ]
+
+-- | /See:/ 'newGetNetworkInsightsAccessScopeContentResponse' smart constructor.
+data GetNetworkInsightsAccessScopeContentResponse = GetNetworkInsightsAccessScopeContentResponse'
+  { -- | The Network Access Scope content.
+    networkInsightsAccessScopeContent :: Prelude.Maybe NetworkInsightsAccessScopeContent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetNetworkInsightsAccessScopeContentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScopeContent', 'getNetworkInsightsAccessScopeContentResponse_networkInsightsAccessScopeContent' - The Network Access Scope content.
+--
+-- 'httpStatus', 'getNetworkInsightsAccessScopeContentResponse_httpStatus' - The response's http status code.
+newGetNetworkInsightsAccessScopeContentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetNetworkInsightsAccessScopeContentResponse
+newGetNetworkInsightsAccessScopeContentResponse
+  pHttpStatus_ =
+    GetNetworkInsightsAccessScopeContentResponse'
+      { networkInsightsAccessScopeContent =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Network Access Scope content.
+getNetworkInsightsAccessScopeContentResponse_networkInsightsAccessScopeContent :: Lens.Lens' GetNetworkInsightsAccessScopeContentResponse (Prelude.Maybe NetworkInsightsAccessScopeContent)
+getNetworkInsightsAccessScopeContentResponse_networkInsightsAccessScopeContent = Lens.lens (\GetNetworkInsightsAccessScopeContentResponse' {networkInsightsAccessScopeContent} -> networkInsightsAccessScopeContent) (\s@GetNetworkInsightsAccessScopeContentResponse' {} a -> s {networkInsightsAccessScopeContent = a} :: GetNetworkInsightsAccessScopeContentResponse)
+
+-- | The response's http status code.
+getNetworkInsightsAccessScopeContentResponse_httpStatus :: Lens.Lens' GetNetworkInsightsAccessScopeContentResponse Prelude.Int
+getNetworkInsightsAccessScopeContentResponse_httpStatus = Lens.lens (\GetNetworkInsightsAccessScopeContentResponse' {httpStatus} -> httpStatus) (\s@GetNetworkInsightsAccessScopeContentResponse' {} a -> s {httpStatus = a} :: GetNetworkInsightsAccessScopeContentResponse)
+
+instance
+  Prelude.NFData
+    GetNetworkInsightsAccessScopeContentResponse
+  where
+  rnf GetNetworkInsightsAccessScopeContentResponse' {..} =
+    Prelude.rnf networkInsightsAccessScopeContent
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetPasswordData.hs b/gen/Amazonka/EC2/GetPasswordData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetPasswordData.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetPasswordData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the encrypted administrator password for a running Windows
+-- instance.
+--
+-- The Windows password is generated at boot by the @EC2Config@ service or
+-- @EC2Launch@ scripts (Windows Server 2016 and later). This usually only
+-- happens the first time an instance is launched. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_WinAMI.html EC2Config>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2launch.html EC2Launch>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For the @EC2Config@ service, the password is not generated for rebundled
+-- AMIs unless @Ec2SetPassword@ is enabled before bundling.
+--
+-- The password is encrypted using the key pair that you specified when you
+-- launched the instance. You must provide the corresponding key pair file.
+--
+-- When you launch an instance, password generation and encryption may take
+-- a few minutes. If you try to retrieve the password before it\'s
+-- available, the output returns an empty string. We recommend that you
+-- wait up to 15 minutes after launching an instance before trying to
+-- retrieve the generated password.
+module Amazonka.EC2.GetPasswordData
+  ( -- * Creating a Request
+    GetPasswordData (..),
+    newGetPasswordData,
+
+    -- * Request Lenses
+    getPasswordData_dryRun,
+    getPasswordData_instanceId,
+
+    -- * Destructuring the Response
+    GetPasswordDataResponse (..),
+    newGetPasswordDataResponse,
+
+    -- * Response Lenses
+    getPasswordDataResponse_httpStatus,
+    getPasswordDataResponse_instanceId,
+    getPasswordDataResponse_passwordData,
+    getPasswordDataResponse_timestamp,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetPasswordData' smart constructor.
+data GetPasswordData = GetPasswordData'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Windows instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPasswordData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getPasswordData_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'getPasswordData_instanceId' - The ID of the Windows instance.
+newGetPasswordData ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  GetPasswordData
+newGetPasswordData pInstanceId_ =
+  GetPasswordData'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getPasswordData_dryRun :: Lens.Lens' GetPasswordData (Prelude.Maybe Prelude.Bool)
+getPasswordData_dryRun = Lens.lens (\GetPasswordData' {dryRun} -> dryRun) (\s@GetPasswordData' {} a -> s {dryRun = a} :: GetPasswordData)
+
+-- | The ID of the Windows instance.
+getPasswordData_instanceId :: Lens.Lens' GetPasswordData Prelude.Text
+getPasswordData_instanceId = Lens.lens (\GetPasswordData' {instanceId} -> instanceId) (\s@GetPasswordData' {} a -> s {instanceId = a} :: GetPasswordData)
+
+instance Core.AWSRequest GetPasswordData where
+  type
+    AWSResponse GetPasswordData =
+      GetPasswordDataResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetPasswordDataResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..@ "instanceId")
+            Prelude.<*> (x Data..@ "passwordData")
+            Prelude.<*> (x Data..@ "timestamp")
+      )
+
+instance Prelude.Hashable GetPasswordData where
+  hashWithSalt _salt GetPasswordData' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData GetPasswordData where
+  rnf GetPasswordData' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders GetPasswordData where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetPasswordData where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetPasswordData where
+  toQuery GetPasswordData' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetPasswordData" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newGetPasswordDataResponse' smart constructor.
+data GetPasswordDataResponse = GetPasswordDataResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The ID of the Windows instance.
+    instanceId :: Prelude.Text,
+    -- | The password of the instance. Returns an empty string if the password is
+    -- not available.
+    passwordData :: Prelude.Text,
+    -- | The time the data was last updated.
+    timestamp :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetPasswordDataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getPasswordDataResponse_httpStatus' - The response's http status code.
+--
+-- 'instanceId', 'getPasswordDataResponse_instanceId' - The ID of the Windows instance.
+--
+-- 'passwordData', 'getPasswordDataResponse_passwordData' - The password of the instance. Returns an empty string if the password is
+-- not available.
+--
+-- 'timestamp', 'getPasswordDataResponse_timestamp' - The time the data was last updated.
+newGetPasswordDataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'passwordData'
+  Prelude.Text ->
+  -- | 'timestamp'
+  Prelude.UTCTime ->
+  GetPasswordDataResponse
+newGetPasswordDataResponse
+  pHttpStatus_
+  pInstanceId_
+  pPasswordData_
+  pTimestamp_ =
+    GetPasswordDataResponse'
+      { httpStatus = pHttpStatus_,
+        instanceId = pInstanceId_,
+        passwordData = pPasswordData_,
+        timestamp = Data._Time Lens.# pTimestamp_
+      }
+
+-- | The response's http status code.
+getPasswordDataResponse_httpStatus :: Lens.Lens' GetPasswordDataResponse Prelude.Int
+getPasswordDataResponse_httpStatus = Lens.lens (\GetPasswordDataResponse' {httpStatus} -> httpStatus) (\s@GetPasswordDataResponse' {} a -> s {httpStatus = a} :: GetPasswordDataResponse)
+
+-- | The ID of the Windows instance.
+getPasswordDataResponse_instanceId :: Lens.Lens' GetPasswordDataResponse Prelude.Text
+getPasswordDataResponse_instanceId = Lens.lens (\GetPasswordDataResponse' {instanceId} -> instanceId) (\s@GetPasswordDataResponse' {} a -> s {instanceId = a} :: GetPasswordDataResponse)
+
+-- | The password of the instance. Returns an empty string if the password is
+-- not available.
+getPasswordDataResponse_passwordData :: Lens.Lens' GetPasswordDataResponse Prelude.Text
+getPasswordDataResponse_passwordData = Lens.lens (\GetPasswordDataResponse' {passwordData} -> passwordData) (\s@GetPasswordDataResponse' {} a -> s {passwordData = a} :: GetPasswordDataResponse)
+
+-- | The time the data was last updated.
+getPasswordDataResponse_timestamp :: Lens.Lens' GetPasswordDataResponse Prelude.UTCTime
+getPasswordDataResponse_timestamp = Lens.lens (\GetPasswordDataResponse' {timestamp} -> timestamp) (\s@GetPasswordDataResponse' {} a -> s {timestamp = a} :: GetPasswordDataResponse) Prelude.. Data._Time
+
+instance Prelude.NFData GetPasswordDataResponse where
+  rnf GetPasswordDataResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf passwordData
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/EC2/GetReservedInstancesExchangeQuote.hs b/gen/Amazonka/EC2/GetReservedInstancesExchangeQuote.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetReservedInstancesExchangeQuote.hs
@@ -0,0 +1,350 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetReservedInstancesExchangeQuote
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a quote and exchange information for exchanging one or more
+-- specified Convertible Reserved Instances for a new Convertible Reserved
+-- Instance. If the exchange cannot be performed, the reason is returned in
+-- the response. Use AcceptReservedInstancesExchangeQuote to perform the
+-- exchange.
+module Amazonka.EC2.GetReservedInstancesExchangeQuote
+  ( -- * Creating a Request
+    GetReservedInstancesExchangeQuote (..),
+    newGetReservedInstancesExchangeQuote,
+
+    -- * Request Lenses
+    getReservedInstancesExchangeQuote_dryRun,
+    getReservedInstancesExchangeQuote_targetConfigurations,
+    getReservedInstancesExchangeQuote_reservedInstanceIds,
+
+    -- * Destructuring the Response
+    GetReservedInstancesExchangeQuoteResponse (..),
+    newGetReservedInstancesExchangeQuoteResponse,
+
+    -- * Response Lenses
+    getReservedInstancesExchangeQuoteResponse_currencyCode,
+    getReservedInstancesExchangeQuoteResponse_isValidExchange,
+    getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt,
+    getReservedInstancesExchangeQuoteResponse_paymentDue,
+    getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup,
+    getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet,
+    getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup,
+    getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet,
+    getReservedInstancesExchangeQuoteResponse_validationFailureReason,
+    getReservedInstancesExchangeQuoteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for GetReservedInstanceExchangeQuote.
+--
+-- /See:/ 'newGetReservedInstancesExchangeQuote' smart constructor.
+data GetReservedInstancesExchangeQuote = GetReservedInstancesExchangeQuote'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The configuration of the target Convertible Reserved Instance to
+    -- exchange for your current Convertible Reserved Instances.
+    targetConfigurations :: Prelude.Maybe [TargetConfigurationRequest],
+    -- | The IDs of the Convertible Reserved Instances to exchange.
+    reservedInstanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReservedInstancesExchangeQuote' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getReservedInstancesExchangeQuote_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'targetConfigurations', 'getReservedInstancesExchangeQuote_targetConfigurations' - The configuration of the target Convertible Reserved Instance to
+-- exchange for your current Convertible Reserved Instances.
+--
+-- 'reservedInstanceIds', 'getReservedInstancesExchangeQuote_reservedInstanceIds' - The IDs of the Convertible Reserved Instances to exchange.
+newGetReservedInstancesExchangeQuote ::
+  GetReservedInstancesExchangeQuote
+newGetReservedInstancesExchangeQuote =
+  GetReservedInstancesExchangeQuote'
+    { dryRun =
+        Prelude.Nothing,
+      targetConfigurations = Prelude.Nothing,
+      reservedInstanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getReservedInstancesExchangeQuote_dryRun :: Lens.Lens' GetReservedInstancesExchangeQuote (Prelude.Maybe Prelude.Bool)
+getReservedInstancesExchangeQuote_dryRun = Lens.lens (\GetReservedInstancesExchangeQuote' {dryRun} -> dryRun) (\s@GetReservedInstancesExchangeQuote' {} a -> s {dryRun = a} :: GetReservedInstancesExchangeQuote)
+
+-- | The configuration of the target Convertible Reserved Instance to
+-- exchange for your current Convertible Reserved Instances.
+getReservedInstancesExchangeQuote_targetConfigurations :: Lens.Lens' GetReservedInstancesExchangeQuote (Prelude.Maybe [TargetConfigurationRequest])
+getReservedInstancesExchangeQuote_targetConfigurations = Lens.lens (\GetReservedInstancesExchangeQuote' {targetConfigurations} -> targetConfigurations) (\s@GetReservedInstancesExchangeQuote' {} a -> s {targetConfigurations = a} :: GetReservedInstancesExchangeQuote) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Convertible Reserved Instances to exchange.
+getReservedInstancesExchangeQuote_reservedInstanceIds :: Lens.Lens' GetReservedInstancesExchangeQuote [Prelude.Text]
+getReservedInstancesExchangeQuote_reservedInstanceIds = Lens.lens (\GetReservedInstancesExchangeQuote' {reservedInstanceIds} -> reservedInstanceIds) (\s@GetReservedInstancesExchangeQuote' {} a -> s {reservedInstanceIds = a} :: GetReservedInstancesExchangeQuote) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    GetReservedInstancesExchangeQuote
+  where
+  type
+    AWSResponse GetReservedInstancesExchangeQuote =
+      GetReservedInstancesExchangeQuoteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetReservedInstancesExchangeQuoteResponse'
+            Prelude.<$> (x Data..@? "currencyCode")
+            Prelude.<*> (x Data..@? "isValidExchange")
+            Prelude.<*> (x Data..@? "outputReservedInstancesWillExpireAt")
+            Prelude.<*> (x Data..@? "paymentDue")
+            Prelude.<*> (x Data..@? "reservedInstanceValueRollup")
+            Prelude.<*> ( x
+                            Data..@? "reservedInstanceValueSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "targetConfigurationValueRollup")
+            Prelude.<*> ( x
+                            Data..@? "targetConfigurationValueSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "validationFailureReason")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetReservedInstancesExchangeQuote
+  where
+  hashWithSalt
+    _salt
+    GetReservedInstancesExchangeQuote' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` targetConfigurations
+        `Prelude.hashWithSalt` reservedInstanceIds
+
+instance
+  Prelude.NFData
+    GetReservedInstancesExchangeQuote
+  where
+  rnf GetReservedInstancesExchangeQuote' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf targetConfigurations
+      `Prelude.seq` Prelude.rnf reservedInstanceIds
+
+instance
+  Data.ToHeaders
+    GetReservedInstancesExchangeQuote
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetReservedInstancesExchangeQuote
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetReservedInstancesExchangeQuote
+  where
+  toQuery GetReservedInstancesExchangeQuote' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetReservedInstancesExchangeQuote" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TargetConfiguration"
+              Prelude.<$> targetConfigurations
+          ),
+        Data.toQueryList
+          "ReservedInstanceId"
+          reservedInstanceIds
+      ]
+
+-- | Contains the output of GetReservedInstancesExchangeQuote.
+--
+-- /See:/ 'newGetReservedInstancesExchangeQuoteResponse' smart constructor.
+data GetReservedInstancesExchangeQuoteResponse = GetReservedInstancesExchangeQuoteResponse'
+  { -- | The currency of the transaction.
+    currencyCode :: Prelude.Maybe Prelude.Text,
+    -- | If @true@, the exchange is valid. If @false@, the exchange cannot be
+    -- completed.
+    isValidExchange :: Prelude.Maybe Prelude.Bool,
+    -- | The new end date of the reservation term.
+    outputReservedInstancesWillExpireAt :: Prelude.Maybe Data.ISO8601,
+    -- | The total true upfront charge for the exchange.
+    paymentDue :: Prelude.Maybe Prelude.Text,
+    -- | The cost associated with the Reserved Instance.
+    reservedInstanceValueRollup :: Prelude.Maybe ReservationValue,
+    -- | The configuration of your Convertible Reserved Instances.
+    reservedInstanceValueSet :: Prelude.Maybe [ReservedInstanceReservationValue],
+    -- | The cost associated with the Reserved Instance.
+    targetConfigurationValueRollup :: Prelude.Maybe ReservationValue,
+    -- | The values of the target Convertible Reserved Instances.
+    targetConfigurationValueSet :: Prelude.Maybe [TargetReservationValue],
+    -- | Describes the reason why the exchange cannot be completed.
+    validationFailureReason :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReservedInstancesExchangeQuoteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currencyCode', 'getReservedInstancesExchangeQuoteResponse_currencyCode' - The currency of the transaction.
+--
+-- 'isValidExchange', 'getReservedInstancesExchangeQuoteResponse_isValidExchange' - If @true@, the exchange is valid. If @false@, the exchange cannot be
+-- completed.
+--
+-- 'outputReservedInstancesWillExpireAt', 'getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt' - The new end date of the reservation term.
+--
+-- 'paymentDue', 'getReservedInstancesExchangeQuoteResponse_paymentDue' - The total true upfront charge for the exchange.
+--
+-- 'reservedInstanceValueRollup', 'getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup' - The cost associated with the Reserved Instance.
+--
+-- 'reservedInstanceValueSet', 'getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet' - The configuration of your Convertible Reserved Instances.
+--
+-- 'targetConfigurationValueRollup', 'getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup' - The cost associated with the Reserved Instance.
+--
+-- 'targetConfigurationValueSet', 'getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet' - The values of the target Convertible Reserved Instances.
+--
+-- 'validationFailureReason', 'getReservedInstancesExchangeQuoteResponse_validationFailureReason' - Describes the reason why the exchange cannot be completed.
+--
+-- 'httpStatus', 'getReservedInstancesExchangeQuoteResponse_httpStatus' - The response's http status code.
+newGetReservedInstancesExchangeQuoteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetReservedInstancesExchangeQuoteResponse
+newGetReservedInstancesExchangeQuoteResponse
+  pHttpStatus_ =
+    GetReservedInstancesExchangeQuoteResponse'
+      { currencyCode =
+          Prelude.Nothing,
+        isValidExchange =
+          Prelude.Nothing,
+        outputReservedInstancesWillExpireAt =
+          Prelude.Nothing,
+        paymentDue = Prelude.Nothing,
+        reservedInstanceValueRollup =
+          Prelude.Nothing,
+        reservedInstanceValueSet =
+          Prelude.Nothing,
+        targetConfigurationValueRollup =
+          Prelude.Nothing,
+        targetConfigurationValueSet =
+          Prelude.Nothing,
+        validationFailureReason =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The currency of the transaction.
+getReservedInstancesExchangeQuoteResponse_currencyCode :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text)
+getReservedInstancesExchangeQuoteResponse_currencyCode = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {currencyCode} -> currencyCode) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {currencyCode = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+-- | If @true@, the exchange is valid. If @false@, the exchange cannot be
+-- completed.
+getReservedInstancesExchangeQuoteResponse_isValidExchange :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Bool)
+getReservedInstancesExchangeQuoteResponse_isValidExchange = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {isValidExchange} -> isValidExchange) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {isValidExchange = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+-- | The new end date of the reservation term.
+getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.UTCTime)
+getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {outputReservedInstancesWillExpireAt} -> outputReservedInstancesWillExpireAt) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {outputReservedInstancesWillExpireAt = a} :: GetReservedInstancesExchangeQuoteResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The total true upfront charge for the exchange.
+getReservedInstancesExchangeQuoteResponse_paymentDue :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text)
+getReservedInstancesExchangeQuoteResponse_paymentDue = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {paymentDue} -> paymentDue) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {paymentDue = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+-- | The cost associated with the Reserved Instance.
+getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe ReservationValue)
+getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {reservedInstanceValueRollup} -> reservedInstanceValueRollup) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {reservedInstanceValueRollup = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+-- | The configuration of your Convertible Reserved Instances.
+getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe [ReservedInstanceReservationValue])
+getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {reservedInstanceValueSet} -> reservedInstanceValueSet) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {reservedInstanceValueSet = a} :: GetReservedInstancesExchangeQuoteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The cost associated with the Reserved Instance.
+getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe ReservationValue)
+getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {targetConfigurationValueRollup} -> targetConfigurationValueRollup) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {targetConfigurationValueRollup = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+-- | The values of the target Convertible Reserved Instances.
+getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe [TargetReservationValue])
+getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {targetConfigurationValueSet} -> targetConfigurationValueSet) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {targetConfigurationValueSet = a} :: GetReservedInstancesExchangeQuoteResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the reason why the exchange cannot be completed.
+getReservedInstancesExchangeQuoteResponse_validationFailureReason :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse (Prelude.Maybe Prelude.Text)
+getReservedInstancesExchangeQuoteResponse_validationFailureReason = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {validationFailureReason} -> validationFailureReason) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {validationFailureReason = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+-- | The response's http status code.
+getReservedInstancesExchangeQuoteResponse_httpStatus :: Lens.Lens' GetReservedInstancesExchangeQuoteResponse Prelude.Int
+getReservedInstancesExchangeQuoteResponse_httpStatus = Lens.lens (\GetReservedInstancesExchangeQuoteResponse' {httpStatus} -> httpStatus) (\s@GetReservedInstancesExchangeQuoteResponse' {} a -> s {httpStatus = a} :: GetReservedInstancesExchangeQuoteResponse)
+
+instance
+  Prelude.NFData
+    GetReservedInstancesExchangeQuoteResponse
+  where
+  rnf GetReservedInstancesExchangeQuoteResponse' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf isValidExchange
+      `Prelude.seq` Prelude.rnf outputReservedInstancesWillExpireAt
+      `Prelude.seq` Prelude.rnf paymentDue
+      `Prelude.seq` Prelude.rnf reservedInstanceValueRollup
+      `Prelude.seq` Prelude.rnf reservedInstanceValueSet
+      `Prelude.seq` Prelude.rnf targetConfigurationValueRollup
+      `Prelude.seq` Prelude.rnf targetConfigurationValueSet
+      `Prelude.seq` Prelude.rnf validationFailureReason
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetSerialConsoleAccessStatus.hs b/gen/Amazonka/EC2/GetSerialConsoleAccessStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetSerialConsoleAccessStatus.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetSerialConsoleAccessStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the access status of your account to the EC2 serial console of
+-- all instances. By default, access to the EC2 serial console is disabled
+-- for your account. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#serial-console-account-access Manage account access to the EC2 serial console>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.GetSerialConsoleAccessStatus
+  ( -- * Creating a Request
+    GetSerialConsoleAccessStatus (..),
+    newGetSerialConsoleAccessStatus,
+
+    -- * Request Lenses
+    getSerialConsoleAccessStatus_dryRun,
+
+    -- * Destructuring the Response
+    GetSerialConsoleAccessStatusResponse (..),
+    newGetSerialConsoleAccessStatusResponse,
+
+    -- * Response Lenses
+    getSerialConsoleAccessStatusResponse_serialConsoleAccessEnabled,
+    getSerialConsoleAccessStatusResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSerialConsoleAccessStatus' smart constructor.
+data GetSerialConsoleAccessStatus = GetSerialConsoleAccessStatus'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSerialConsoleAccessStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getSerialConsoleAccessStatus_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newGetSerialConsoleAccessStatus ::
+  GetSerialConsoleAccessStatus
+newGetSerialConsoleAccessStatus =
+  GetSerialConsoleAccessStatus'
+    { dryRun =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getSerialConsoleAccessStatus_dryRun :: Lens.Lens' GetSerialConsoleAccessStatus (Prelude.Maybe Prelude.Bool)
+getSerialConsoleAccessStatus_dryRun = Lens.lens (\GetSerialConsoleAccessStatus' {dryRun} -> dryRun) (\s@GetSerialConsoleAccessStatus' {} a -> s {dryRun = a} :: GetSerialConsoleAccessStatus)
+
+instance Core.AWSRequest GetSerialConsoleAccessStatus where
+  type
+    AWSResponse GetSerialConsoleAccessStatus =
+      GetSerialConsoleAccessStatusResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetSerialConsoleAccessStatusResponse'
+            Prelude.<$> (x Data..@? "serialConsoleAccessEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetSerialConsoleAccessStatus
+  where
+  hashWithSalt _salt GetSerialConsoleAccessStatus' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData GetSerialConsoleAccessStatus where
+  rnf GetSerialConsoleAccessStatus' {..} =
+    Prelude.rnf dryRun
+
+instance Data.ToHeaders GetSerialConsoleAccessStatus where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetSerialConsoleAccessStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSerialConsoleAccessStatus where
+  toQuery GetSerialConsoleAccessStatus' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetSerialConsoleAccessStatus" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newGetSerialConsoleAccessStatusResponse' smart constructor.
+data GetSerialConsoleAccessStatusResponse = GetSerialConsoleAccessStatusResponse'
+  { -- | If @true@, access to the EC2 serial console of all instances is enabled
+    -- for your account. If @false@, access to the EC2 serial console of all
+    -- instances is disabled for your account.
+    serialConsoleAccessEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSerialConsoleAccessStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serialConsoleAccessEnabled', 'getSerialConsoleAccessStatusResponse_serialConsoleAccessEnabled' - If @true@, access to the EC2 serial console of all instances is enabled
+-- for your account. If @false@, access to the EC2 serial console of all
+-- instances is disabled for your account.
+--
+-- 'httpStatus', 'getSerialConsoleAccessStatusResponse_httpStatus' - The response's http status code.
+newGetSerialConsoleAccessStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSerialConsoleAccessStatusResponse
+newGetSerialConsoleAccessStatusResponse pHttpStatus_ =
+  GetSerialConsoleAccessStatusResponse'
+    { serialConsoleAccessEnabled =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If @true@, access to the EC2 serial console of all instances is enabled
+-- for your account. If @false@, access to the EC2 serial console of all
+-- instances is disabled for your account.
+getSerialConsoleAccessStatusResponse_serialConsoleAccessEnabled :: Lens.Lens' GetSerialConsoleAccessStatusResponse (Prelude.Maybe Prelude.Bool)
+getSerialConsoleAccessStatusResponse_serialConsoleAccessEnabled = Lens.lens (\GetSerialConsoleAccessStatusResponse' {serialConsoleAccessEnabled} -> serialConsoleAccessEnabled) (\s@GetSerialConsoleAccessStatusResponse' {} a -> s {serialConsoleAccessEnabled = a} :: GetSerialConsoleAccessStatusResponse)
+
+-- | The response's http status code.
+getSerialConsoleAccessStatusResponse_httpStatus :: Lens.Lens' GetSerialConsoleAccessStatusResponse Prelude.Int
+getSerialConsoleAccessStatusResponse_httpStatus = Lens.lens (\GetSerialConsoleAccessStatusResponse' {httpStatus} -> httpStatus) (\s@GetSerialConsoleAccessStatusResponse' {} a -> s {httpStatus = a} :: GetSerialConsoleAccessStatusResponse)
+
+instance
+  Prelude.NFData
+    GetSerialConsoleAccessStatusResponse
+  where
+  rnf GetSerialConsoleAccessStatusResponse' {..} =
+    Prelude.rnf serialConsoleAccessEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetSpotPlacementScores.hs b/gen/Amazonka/EC2/GetSpotPlacementScores.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetSpotPlacementScores.hs
@@ -0,0 +1,455 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetSpotPlacementScores
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Calculates the Spot placement score for a Region or Availability Zone
+-- based on the specified target capacity and compute requirements.
+--
+-- You can specify your compute requirements either by using
+-- @InstanceRequirementsWithMetadata@ and letting Amazon EC2 choose the
+-- optimal instance types to fulfill your Spot request, or you can specify
+-- the instance types by using @InstanceTypes@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html Spot placement score>
+-- in the Amazon EC2 User Guide.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetSpotPlacementScores
+  ( -- * Creating a Request
+    GetSpotPlacementScores (..),
+    newGetSpotPlacementScores,
+
+    -- * Request Lenses
+    getSpotPlacementScores_dryRun,
+    getSpotPlacementScores_instanceRequirementsWithMetadata,
+    getSpotPlacementScores_instanceTypes,
+    getSpotPlacementScores_maxResults,
+    getSpotPlacementScores_nextToken,
+    getSpotPlacementScores_regionNames,
+    getSpotPlacementScores_singleAvailabilityZone,
+    getSpotPlacementScores_targetCapacityUnitType,
+    getSpotPlacementScores_targetCapacity,
+
+    -- * Destructuring the Response
+    GetSpotPlacementScoresResponse (..),
+    newGetSpotPlacementScoresResponse,
+
+    -- * Response Lenses
+    getSpotPlacementScoresResponse_nextToken,
+    getSpotPlacementScoresResponse_spotPlacementScores,
+    getSpotPlacementScoresResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSpotPlacementScores' smart constructor.
+data GetSpotPlacementScores = GetSpotPlacementScores'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with those
+    -- attributes.
+    --
+    -- If you specify @InstanceRequirementsWithMetadata@, you can\'t specify
+    -- @InstanceTypes@.
+    instanceRequirementsWithMetadata :: Prelude.Maybe InstanceRequirementsWithMetadataRequest,
+    -- | The instance types. We recommend that you specify at least three
+    -- instance types. If you specify one or two instance types, or specify
+    -- variations of a single instance type (for example, an @m3.xlarge@ with
+    -- and without instance storage), the returned placement score will always
+    -- be low.
+    --
+    -- If you specify @InstanceTypes@, you can\'t specify
+    -- @InstanceRequirementsWithMetadata@.
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. Specify a
+    -- value between 1 and  1000. The default value is 1000. To retrieve the
+    -- remaining results, make another call with  the returned @NextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Regions used to narrow down the list of Regions to be scored. Enter
+    -- the Region code, for example, @us-east-1@.
+    regionNames :: Prelude.Maybe [Prelude.Text],
+    -- | Specify @true@ so that the response returns a list of scored
+    -- Availability Zones. Otherwise, the response returns a list of scored
+    -- Regions.
+    --
+    -- A list of scored Availability Zones is useful if you want to launch all
+    -- of your Spot capacity into a single Availability Zone.
+    singleAvailabilityZone :: Prelude.Maybe Prelude.Bool,
+    -- | The unit for the target capacity.
+    --
+    -- Default: @units@ (translates to number of instances)
+    targetCapacityUnitType :: Prelude.Maybe TargetCapacityUnitType,
+    -- | The target capacity.
+    targetCapacity :: Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSpotPlacementScores' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getSpotPlacementScores_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceRequirementsWithMetadata', 'getSpotPlacementScores_instanceRequirementsWithMetadata' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirementsWithMetadata@, you can\'t specify
+-- @InstanceTypes@.
+--
+-- 'instanceTypes', 'getSpotPlacementScores_instanceTypes' - The instance types. We recommend that you specify at least three
+-- instance types. If you specify one or two instance types, or specify
+-- variations of a single instance type (for example, an @m3.xlarge@ with
+-- and without instance storage), the returned placement score will always
+-- be low.
+--
+-- If you specify @InstanceTypes@, you can\'t specify
+-- @InstanceRequirementsWithMetadata@.
+--
+-- 'maxResults', 'getSpotPlacementScores_maxResults' - The maximum number of results to return in a single call. Specify a
+-- value between 1 and  1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with  the returned @NextToken@
+-- value.
+--
+-- 'nextToken', 'getSpotPlacementScores_nextToken' - The token for the next set of results.
+--
+-- 'regionNames', 'getSpotPlacementScores_regionNames' - The Regions used to narrow down the list of Regions to be scored. Enter
+-- the Region code, for example, @us-east-1@.
+--
+-- 'singleAvailabilityZone', 'getSpotPlacementScores_singleAvailabilityZone' - Specify @true@ so that the response returns a list of scored
+-- Availability Zones. Otherwise, the response returns a list of scored
+-- Regions.
+--
+-- A list of scored Availability Zones is useful if you want to launch all
+-- of your Spot capacity into a single Availability Zone.
+--
+-- 'targetCapacityUnitType', 'getSpotPlacementScores_targetCapacityUnitType' - The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+--
+-- 'targetCapacity', 'getSpotPlacementScores_targetCapacity' - The target capacity.
+newGetSpotPlacementScores ::
+  -- | 'targetCapacity'
+  Prelude.Natural ->
+  GetSpotPlacementScores
+newGetSpotPlacementScores pTargetCapacity_ =
+  GetSpotPlacementScores'
+    { dryRun = Prelude.Nothing,
+      instanceRequirementsWithMetadata = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      regionNames = Prelude.Nothing,
+      singleAvailabilityZone = Prelude.Nothing,
+      targetCapacityUnitType = Prelude.Nothing,
+      targetCapacity = pTargetCapacity_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getSpotPlacementScores_dryRun :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe Prelude.Bool)
+getSpotPlacementScores_dryRun = Lens.lens (\GetSpotPlacementScores' {dryRun} -> dryRun) (\s@GetSpotPlacementScores' {} a -> s {dryRun = a} :: GetSpotPlacementScores)
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirementsWithMetadata@, you can\'t specify
+-- @InstanceTypes@.
+getSpotPlacementScores_instanceRequirementsWithMetadata :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe InstanceRequirementsWithMetadataRequest)
+getSpotPlacementScores_instanceRequirementsWithMetadata = Lens.lens (\GetSpotPlacementScores' {instanceRequirementsWithMetadata} -> instanceRequirementsWithMetadata) (\s@GetSpotPlacementScores' {} a -> s {instanceRequirementsWithMetadata = a} :: GetSpotPlacementScores)
+
+-- | The instance types. We recommend that you specify at least three
+-- instance types. If you specify one or two instance types, or specify
+-- variations of a single instance type (for example, an @m3.xlarge@ with
+-- and without instance storage), the returned placement score will always
+-- be low.
+--
+-- If you specify @InstanceTypes@, you can\'t specify
+-- @InstanceRequirementsWithMetadata@.
+getSpotPlacementScores_instanceTypes :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe [Prelude.Text])
+getSpotPlacementScores_instanceTypes = Lens.lens (\GetSpotPlacementScores' {instanceTypes} -> instanceTypes) (\s@GetSpotPlacementScores' {} a -> s {instanceTypes = a} :: GetSpotPlacementScores) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. Specify a
+-- value between 1 and  1000. The default value is 1000. To retrieve the
+-- remaining results, make another call with  the returned @NextToken@
+-- value.
+getSpotPlacementScores_maxResults :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe Prelude.Natural)
+getSpotPlacementScores_maxResults = Lens.lens (\GetSpotPlacementScores' {maxResults} -> maxResults) (\s@GetSpotPlacementScores' {} a -> s {maxResults = a} :: GetSpotPlacementScores)
+
+-- | The token for the next set of results.
+getSpotPlacementScores_nextToken :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe Prelude.Text)
+getSpotPlacementScores_nextToken = Lens.lens (\GetSpotPlacementScores' {nextToken} -> nextToken) (\s@GetSpotPlacementScores' {} a -> s {nextToken = a} :: GetSpotPlacementScores)
+
+-- | The Regions used to narrow down the list of Regions to be scored. Enter
+-- the Region code, for example, @us-east-1@.
+getSpotPlacementScores_regionNames :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe [Prelude.Text])
+getSpotPlacementScores_regionNames = Lens.lens (\GetSpotPlacementScores' {regionNames} -> regionNames) (\s@GetSpotPlacementScores' {} a -> s {regionNames = a} :: GetSpotPlacementScores) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify @true@ so that the response returns a list of scored
+-- Availability Zones. Otherwise, the response returns a list of scored
+-- Regions.
+--
+-- A list of scored Availability Zones is useful if you want to launch all
+-- of your Spot capacity into a single Availability Zone.
+getSpotPlacementScores_singleAvailabilityZone :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe Prelude.Bool)
+getSpotPlacementScores_singleAvailabilityZone = Lens.lens (\GetSpotPlacementScores' {singleAvailabilityZone} -> singleAvailabilityZone) (\s@GetSpotPlacementScores' {} a -> s {singleAvailabilityZone = a} :: GetSpotPlacementScores)
+
+-- | The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+getSpotPlacementScores_targetCapacityUnitType :: Lens.Lens' GetSpotPlacementScores (Prelude.Maybe TargetCapacityUnitType)
+getSpotPlacementScores_targetCapacityUnitType = Lens.lens (\GetSpotPlacementScores' {targetCapacityUnitType} -> targetCapacityUnitType) (\s@GetSpotPlacementScores' {} a -> s {targetCapacityUnitType = a} :: GetSpotPlacementScores)
+
+-- | The target capacity.
+getSpotPlacementScores_targetCapacity :: Lens.Lens' GetSpotPlacementScores Prelude.Natural
+getSpotPlacementScores_targetCapacity = Lens.lens (\GetSpotPlacementScores' {targetCapacity} -> targetCapacity) (\s@GetSpotPlacementScores' {} a -> s {targetCapacity = a} :: GetSpotPlacementScores)
+
+instance Core.AWSPager GetSpotPlacementScores where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getSpotPlacementScoresResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getSpotPlacementScoresResponse_spotPlacementScores
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getSpotPlacementScores_nextToken
+          Lens..~ rs
+          Lens.^? getSpotPlacementScoresResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetSpotPlacementScores where
+  type
+    AWSResponse GetSpotPlacementScores =
+      GetSpotPlacementScoresResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetSpotPlacementScoresResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "spotPlacementScoreSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSpotPlacementScores where
+  hashWithSalt _salt GetSpotPlacementScores' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceRequirementsWithMetadata
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` regionNames
+      `Prelude.hashWithSalt` singleAvailabilityZone
+      `Prelude.hashWithSalt` targetCapacityUnitType
+      `Prelude.hashWithSalt` targetCapacity
+
+instance Prelude.NFData GetSpotPlacementScores where
+  rnf GetSpotPlacementScores' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceRequirementsWithMetadata
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf regionNames
+      `Prelude.seq` Prelude.rnf singleAvailabilityZone
+      `Prelude.seq` Prelude.rnf targetCapacityUnitType
+      `Prelude.seq` Prelude.rnf targetCapacity
+
+instance Data.ToHeaders GetSpotPlacementScores where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetSpotPlacementScores where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSpotPlacementScores where
+  toQuery GetSpotPlacementScores' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetSpotPlacementScores" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceRequirementsWithMetadata"
+          Data.=: instanceRequirementsWithMetadata,
+        Data.toQuery
+          ( Data.toQueryList "InstanceType"
+              Prelude.<$> instanceTypes
+          ),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "RegionName"
+              Prelude.<$> regionNames
+          ),
+        "SingleAvailabilityZone"
+          Data.=: singleAvailabilityZone,
+        "TargetCapacityUnitType"
+          Data.=: targetCapacityUnitType,
+        "TargetCapacity" Data.=: targetCapacity
+      ]
+
+-- | /See:/ 'newGetSpotPlacementScoresResponse' smart constructor.
+data GetSpotPlacementScoresResponse = GetSpotPlacementScoresResponse'
+  { -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The Spot placement score for the top 10 Regions or Availability Zones,
+    -- scored on a scale from 1 to 10. Each score  reflects how likely it is
+    -- that each Region or Availability Zone will succeed at fulfilling the
+    -- specified target capacity  /at the time of the Spot placement score
+    -- request/. A score of @10@ means that your Spot capacity request is
+    -- highly likely to succeed in that Region or Availability Zone.
+    --
+    -- If you request a Spot placement score for Regions, a high score assumes
+    -- that your fleet request will be configured to use all Availability Zones
+    -- and the @capacity-optimized@ allocation strategy. If you request a Spot
+    -- placement score for Availability Zones, a high score assumes that your
+    -- fleet request will be configured to use a single Availability Zone and
+    -- the @capacity-optimized@ allocation strategy.
+    --
+    -- Different  Regions or Availability Zones might return the same score.
+    --
+    -- The Spot placement score serves as a recommendation only. No score
+    -- guarantees that your Spot request will be fully or partially fulfilled.
+    spotPlacementScores :: Prelude.Maybe [SpotPlacementScore],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSpotPlacementScoresResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getSpotPlacementScoresResponse_nextToken' - The token for the next set of results.
+--
+-- 'spotPlacementScores', 'getSpotPlacementScoresResponse_spotPlacementScores' - The Spot placement score for the top 10 Regions or Availability Zones,
+-- scored on a scale from 1 to 10. Each score  reflects how likely it is
+-- that each Region or Availability Zone will succeed at fulfilling the
+-- specified target capacity  /at the time of the Spot placement score
+-- request/. A score of @10@ means that your Spot capacity request is
+-- highly likely to succeed in that Region or Availability Zone.
+--
+-- If you request a Spot placement score for Regions, a high score assumes
+-- that your fleet request will be configured to use all Availability Zones
+-- and the @capacity-optimized@ allocation strategy. If you request a Spot
+-- placement score for Availability Zones, a high score assumes that your
+-- fleet request will be configured to use a single Availability Zone and
+-- the @capacity-optimized@ allocation strategy.
+--
+-- Different  Regions or Availability Zones might return the same score.
+--
+-- The Spot placement score serves as a recommendation only. No score
+-- guarantees that your Spot request will be fully or partially fulfilled.
+--
+-- 'httpStatus', 'getSpotPlacementScoresResponse_httpStatus' - The response's http status code.
+newGetSpotPlacementScoresResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSpotPlacementScoresResponse
+newGetSpotPlacementScoresResponse pHttpStatus_ =
+  GetSpotPlacementScoresResponse'
+    { nextToken =
+        Prelude.Nothing,
+      spotPlacementScores = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token for the next set of results.
+getSpotPlacementScoresResponse_nextToken :: Lens.Lens' GetSpotPlacementScoresResponse (Prelude.Maybe Prelude.Text)
+getSpotPlacementScoresResponse_nextToken = Lens.lens (\GetSpotPlacementScoresResponse' {nextToken} -> nextToken) (\s@GetSpotPlacementScoresResponse' {} a -> s {nextToken = a} :: GetSpotPlacementScoresResponse)
+
+-- | The Spot placement score for the top 10 Regions or Availability Zones,
+-- scored on a scale from 1 to 10. Each score  reflects how likely it is
+-- that each Region or Availability Zone will succeed at fulfilling the
+-- specified target capacity  /at the time of the Spot placement score
+-- request/. A score of @10@ means that your Spot capacity request is
+-- highly likely to succeed in that Region or Availability Zone.
+--
+-- If you request a Spot placement score for Regions, a high score assumes
+-- that your fleet request will be configured to use all Availability Zones
+-- and the @capacity-optimized@ allocation strategy. If you request a Spot
+-- placement score for Availability Zones, a high score assumes that your
+-- fleet request will be configured to use a single Availability Zone and
+-- the @capacity-optimized@ allocation strategy.
+--
+-- Different  Regions or Availability Zones might return the same score.
+--
+-- The Spot placement score serves as a recommendation only. No score
+-- guarantees that your Spot request will be fully or partially fulfilled.
+getSpotPlacementScoresResponse_spotPlacementScores :: Lens.Lens' GetSpotPlacementScoresResponse (Prelude.Maybe [SpotPlacementScore])
+getSpotPlacementScoresResponse_spotPlacementScores = Lens.lens (\GetSpotPlacementScoresResponse' {spotPlacementScores} -> spotPlacementScores) (\s@GetSpotPlacementScoresResponse' {} a -> s {spotPlacementScores = a} :: GetSpotPlacementScoresResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getSpotPlacementScoresResponse_httpStatus :: Lens.Lens' GetSpotPlacementScoresResponse Prelude.Int
+getSpotPlacementScoresResponse_httpStatus = Lens.lens (\GetSpotPlacementScoresResponse' {httpStatus} -> httpStatus) (\s@GetSpotPlacementScoresResponse' {} a -> s {httpStatus = a} :: GetSpotPlacementScoresResponse)
+
+instance
+  Prelude.NFData
+    GetSpotPlacementScoresResponse
+  where
+  rnf GetSpotPlacementScoresResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf spotPlacementScores
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetSubnetCidrReservations.hs b/gen/Amazonka/EC2/GetSubnetCidrReservations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetSubnetCidrReservations.hs
@@ -0,0 +1,311 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetSubnetCidrReservations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the subnet CIDR reservations.
+module Amazonka.EC2.GetSubnetCidrReservations
+  ( -- * Creating a Request
+    GetSubnetCidrReservations (..),
+    newGetSubnetCidrReservations,
+
+    -- * Request Lenses
+    getSubnetCidrReservations_dryRun,
+    getSubnetCidrReservations_filters,
+    getSubnetCidrReservations_maxResults,
+    getSubnetCidrReservations_nextToken,
+    getSubnetCidrReservations_subnetId,
+
+    -- * Destructuring the Response
+    GetSubnetCidrReservationsResponse (..),
+    newGetSubnetCidrReservationsResponse,
+
+    -- * Response Lenses
+    getSubnetCidrReservationsResponse_nextToken,
+    getSubnetCidrReservationsResponse_subnetIpv4CidrReservations,
+    getSubnetCidrReservationsResponse_subnetIpv6CidrReservations,
+    getSubnetCidrReservationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetSubnetCidrReservations' smart constructor.
+data GetSubnetCidrReservations = GetSubnetCidrReservations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @reservationType@ - The type of reservation (@prefix@ | @explicit@).
+    --
+    -- -   @subnet-id@ - The ID of the subnet.
+    --
+    -- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+    --     the filter name and @TeamA@ for the filter value.
+    --
+    -- -   @tag-key@ - 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.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSubnetCidrReservations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getSubnetCidrReservations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getSubnetCidrReservations_filters' - One or more filters.
+--
+-- -   @reservationType@ - The type of reservation (@prefix@ | @explicit@).
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+--
+-- 'maxResults', 'getSubnetCidrReservations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getSubnetCidrReservations_nextToken' - The token for the next page of results.
+--
+-- 'subnetId', 'getSubnetCidrReservations_subnetId' - The ID of the subnet.
+newGetSubnetCidrReservations ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  GetSubnetCidrReservations
+newGetSubnetCidrReservations pSubnetId_ =
+  GetSubnetCidrReservations'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      subnetId = pSubnetId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getSubnetCidrReservations_dryRun :: Lens.Lens' GetSubnetCidrReservations (Prelude.Maybe Prelude.Bool)
+getSubnetCidrReservations_dryRun = Lens.lens (\GetSubnetCidrReservations' {dryRun} -> dryRun) (\s@GetSubnetCidrReservations' {} a -> s {dryRun = a} :: GetSubnetCidrReservations)
+
+-- | One or more filters.
+--
+-- -   @reservationType@ - The type of reservation (@prefix@ | @explicit@).
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @tag@:\<key> - 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 @Owner@ and the value @TeamA@, specify @tag:Owner@ for
+--     the filter name and @TeamA@ for the filter value.
+--
+-- -   @tag-key@ - 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.
+getSubnetCidrReservations_filters :: Lens.Lens' GetSubnetCidrReservations (Prelude.Maybe [Filter])
+getSubnetCidrReservations_filters = Lens.lens (\GetSubnetCidrReservations' {filters} -> filters) (\s@GetSubnetCidrReservations' {} a -> s {filters = a} :: GetSubnetCidrReservations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getSubnetCidrReservations_maxResults :: Lens.Lens' GetSubnetCidrReservations (Prelude.Maybe Prelude.Natural)
+getSubnetCidrReservations_maxResults = Lens.lens (\GetSubnetCidrReservations' {maxResults} -> maxResults) (\s@GetSubnetCidrReservations' {} a -> s {maxResults = a} :: GetSubnetCidrReservations)
+
+-- | The token for the next page of results.
+getSubnetCidrReservations_nextToken :: Lens.Lens' GetSubnetCidrReservations (Prelude.Maybe Prelude.Text)
+getSubnetCidrReservations_nextToken = Lens.lens (\GetSubnetCidrReservations' {nextToken} -> nextToken) (\s@GetSubnetCidrReservations' {} a -> s {nextToken = a} :: GetSubnetCidrReservations)
+
+-- | The ID of the subnet.
+getSubnetCidrReservations_subnetId :: Lens.Lens' GetSubnetCidrReservations Prelude.Text
+getSubnetCidrReservations_subnetId = Lens.lens (\GetSubnetCidrReservations' {subnetId} -> subnetId) (\s@GetSubnetCidrReservations' {} a -> s {subnetId = a} :: GetSubnetCidrReservations)
+
+instance Core.AWSRequest GetSubnetCidrReservations where
+  type
+    AWSResponse GetSubnetCidrReservations =
+      GetSubnetCidrReservationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetSubnetCidrReservationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "subnetIpv4CidrReservationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "subnetIpv6CidrReservationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSubnetCidrReservations where
+  hashWithSalt _salt GetSubnetCidrReservations' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData GetSubnetCidrReservations where
+  rnf GetSubnetCidrReservations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance Data.ToHeaders GetSubnetCidrReservations where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetSubnetCidrReservations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSubnetCidrReservations where
+  toQuery GetSubnetCidrReservations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetSubnetCidrReservations" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newGetSubnetCidrReservationsResponse' smart constructor.
+data GetSubnetCidrReservationsResponse = GetSubnetCidrReservationsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the IPv4 subnet CIDR reservations.
+    subnetIpv4CidrReservations :: Prelude.Maybe [SubnetCidrReservation],
+    -- | Information about the IPv6 subnet CIDR reservations.
+    subnetIpv6CidrReservations :: Prelude.Maybe [SubnetCidrReservation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSubnetCidrReservationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getSubnetCidrReservationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'subnetIpv4CidrReservations', 'getSubnetCidrReservationsResponse_subnetIpv4CidrReservations' - Information about the IPv4 subnet CIDR reservations.
+--
+-- 'subnetIpv6CidrReservations', 'getSubnetCidrReservationsResponse_subnetIpv6CidrReservations' - Information about the IPv6 subnet CIDR reservations.
+--
+-- 'httpStatus', 'getSubnetCidrReservationsResponse_httpStatus' - The response's http status code.
+newGetSubnetCidrReservationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSubnetCidrReservationsResponse
+newGetSubnetCidrReservationsResponse pHttpStatus_ =
+  GetSubnetCidrReservationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      subnetIpv4CidrReservations =
+        Prelude.Nothing,
+      subnetIpv6CidrReservations =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getSubnetCidrReservationsResponse_nextToken :: Lens.Lens' GetSubnetCidrReservationsResponse (Prelude.Maybe Prelude.Text)
+getSubnetCidrReservationsResponse_nextToken = Lens.lens (\GetSubnetCidrReservationsResponse' {nextToken} -> nextToken) (\s@GetSubnetCidrReservationsResponse' {} a -> s {nextToken = a} :: GetSubnetCidrReservationsResponse)
+
+-- | Information about the IPv4 subnet CIDR reservations.
+getSubnetCidrReservationsResponse_subnetIpv4CidrReservations :: Lens.Lens' GetSubnetCidrReservationsResponse (Prelude.Maybe [SubnetCidrReservation])
+getSubnetCidrReservationsResponse_subnetIpv4CidrReservations = Lens.lens (\GetSubnetCidrReservationsResponse' {subnetIpv4CidrReservations} -> subnetIpv4CidrReservations) (\s@GetSubnetCidrReservationsResponse' {} a -> s {subnetIpv4CidrReservations = a} :: GetSubnetCidrReservationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the IPv6 subnet CIDR reservations.
+getSubnetCidrReservationsResponse_subnetIpv6CidrReservations :: Lens.Lens' GetSubnetCidrReservationsResponse (Prelude.Maybe [SubnetCidrReservation])
+getSubnetCidrReservationsResponse_subnetIpv6CidrReservations = Lens.lens (\GetSubnetCidrReservationsResponse' {subnetIpv6CidrReservations} -> subnetIpv6CidrReservations) (\s@GetSubnetCidrReservationsResponse' {} a -> s {subnetIpv6CidrReservations = a} :: GetSubnetCidrReservationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getSubnetCidrReservationsResponse_httpStatus :: Lens.Lens' GetSubnetCidrReservationsResponse Prelude.Int
+getSubnetCidrReservationsResponse_httpStatus = Lens.lens (\GetSubnetCidrReservationsResponse' {httpStatus} -> httpStatus) (\s@GetSubnetCidrReservationsResponse' {} a -> s {httpStatus = a} :: GetSubnetCidrReservationsResponse)
+
+instance
+  Prelude.NFData
+    GetSubnetCidrReservationsResponse
+  where
+  rnf GetSubnetCidrReservationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf subnetIpv4CidrReservations
+      `Prelude.seq` Prelude.rnf subnetIpv6CidrReservations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayAttachmentPropagations.hs b/gen/Amazonka/EC2/GetTransitGatewayAttachmentPropagations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayAttachmentPropagations.hs
@@ -0,0 +1,317 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayAttachmentPropagations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists the route tables to which the specified resource attachment
+-- propagates routes.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetTransitGatewayAttachmentPropagations
+  ( -- * Creating a Request
+    GetTransitGatewayAttachmentPropagations (..),
+    newGetTransitGatewayAttachmentPropagations,
+
+    -- * Request Lenses
+    getTransitGatewayAttachmentPropagations_dryRun,
+    getTransitGatewayAttachmentPropagations_filters,
+    getTransitGatewayAttachmentPropagations_maxResults,
+    getTransitGatewayAttachmentPropagations_nextToken,
+    getTransitGatewayAttachmentPropagations_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayAttachmentPropagationsResponse (..),
+    newGetTransitGatewayAttachmentPropagationsResponse,
+
+    -- * Response Lenses
+    getTransitGatewayAttachmentPropagationsResponse_nextToken,
+    getTransitGatewayAttachmentPropagationsResponse_transitGatewayAttachmentPropagations,
+    getTransitGatewayAttachmentPropagationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayAttachmentPropagations' smart constructor.
+data GetTransitGatewayAttachmentPropagations = GetTransitGatewayAttachmentPropagations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @transit-gateway-route-table-id@ - The ID of the transit gateway
+    --     route table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayAttachmentPropagations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayAttachmentPropagations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayAttachmentPropagations_filters' - One or more filters. The possible values are:
+--
+-- -   @transit-gateway-route-table-id@ - The ID of the transit gateway
+--     route table.
+--
+-- 'maxResults', 'getTransitGatewayAttachmentPropagations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayAttachmentPropagations_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayAttachmentId', 'getTransitGatewayAttachmentPropagations_transitGatewayAttachmentId' - The ID of the attachment.
+newGetTransitGatewayAttachmentPropagations ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  GetTransitGatewayAttachmentPropagations
+newGetTransitGatewayAttachmentPropagations
+  pTransitGatewayAttachmentId_ =
+    GetTransitGatewayAttachmentPropagations'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayAttachmentPropagations_dryRun :: Lens.Lens' GetTransitGatewayAttachmentPropagations (Prelude.Maybe Prelude.Bool)
+getTransitGatewayAttachmentPropagations_dryRun = Lens.lens (\GetTransitGatewayAttachmentPropagations' {dryRun} -> dryRun) (\s@GetTransitGatewayAttachmentPropagations' {} a -> s {dryRun = a} :: GetTransitGatewayAttachmentPropagations)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @transit-gateway-route-table-id@ - The ID of the transit gateway
+--     route table.
+getTransitGatewayAttachmentPropagations_filters :: Lens.Lens' GetTransitGatewayAttachmentPropagations (Prelude.Maybe [Filter])
+getTransitGatewayAttachmentPropagations_filters = Lens.lens (\GetTransitGatewayAttachmentPropagations' {filters} -> filters) (\s@GetTransitGatewayAttachmentPropagations' {} a -> s {filters = a} :: GetTransitGatewayAttachmentPropagations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayAttachmentPropagations_maxResults :: Lens.Lens' GetTransitGatewayAttachmentPropagations (Prelude.Maybe Prelude.Natural)
+getTransitGatewayAttachmentPropagations_maxResults = Lens.lens (\GetTransitGatewayAttachmentPropagations' {maxResults} -> maxResults) (\s@GetTransitGatewayAttachmentPropagations' {} a -> s {maxResults = a} :: GetTransitGatewayAttachmentPropagations)
+
+-- | The token for the next page of results.
+getTransitGatewayAttachmentPropagations_nextToken :: Lens.Lens' GetTransitGatewayAttachmentPropagations (Prelude.Maybe Prelude.Text)
+getTransitGatewayAttachmentPropagations_nextToken = Lens.lens (\GetTransitGatewayAttachmentPropagations' {nextToken} -> nextToken) (\s@GetTransitGatewayAttachmentPropagations' {} a -> s {nextToken = a} :: GetTransitGatewayAttachmentPropagations)
+
+-- | The ID of the attachment.
+getTransitGatewayAttachmentPropagations_transitGatewayAttachmentId :: Lens.Lens' GetTransitGatewayAttachmentPropagations Prelude.Text
+getTransitGatewayAttachmentPropagations_transitGatewayAttachmentId = Lens.lens (\GetTransitGatewayAttachmentPropagations' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@GetTransitGatewayAttachmentPropagations' {} a -> s {transitGatewayAttachmentId = a} :: GetTransitGatewayAttachmentPropagations)
+
+instance
+  Core.AWSPager
+    GetTransitGatewayAttachmentPropagations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayAttachmentPropagationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayAttachmentPropagationsResponse_transitGatewayAttachmentPropagations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTransitGatewayAttachmentPropagations_nextToken
+          Lens..~ rs
+          Lens.^? getTransitGatewayAttachmentPropagationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayAttachmentPropagations
+  where
+  type
+    AWSResponse
+      GetTransitGatewayAttachmentPropagations =
+      GetTransitGatewayAttachmentPropagationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayAttachmentPropagationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayAttachmentPropagations"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayAttachmentPropagations
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayAttachmentPropagations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayAttachmentPropagations
+  where
+  rnf GetTransitGatewayAttachmentPropagations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayAttachmentPropagations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayAttachmentPropagations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayAttachmentPropagations
+  where
+  toQuery GetTransitGatewayAttachmentPropagations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetTransitGatewayAttachmentPropagations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newGetTransitGatewayAttachmentPropagationsResponse' smart constructor.
+data GetTransitGatewayAttachmentPropagationsResponse = GetTransitGatewayAttachmentPropagationsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the propagation route tables.
+    transitGatewayAttachmentPropagations :: Prelude.Maybe [TransitGatewayAttachmentPropagation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayAttachmentPropagationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getTransitGatewayAttachmentPropagationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayAttachmentPropagations', 'getTransitGatewayAttachmentPropagationsResponse_transitGatewayAttachmentPropagations' - Information about the propagation route tables.
+--
+-- 'httpStatus', 'getTransitGatewayAttachmentPropagationsResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayAttachmentPropagationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayAttachmentPropagationsResponse
+newGetTransitGatewayAttachmentPropagationsResponse
+  pHttpStatus_ =
+    GetTransitGatewayAttachmentPropagationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayAttachmentPropagations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getTransitGatewayAttachmentPropagationsResponse_nextToken :: Lens.Lens' GetTransitGatewayAttachmentPropagationsResponse (Prelude.Maybe Prelude.Text)
+getTransitGatewayAttachmentPropagationsResponse_nextToken = Lens.lens (\GetTransitGatewayAttachmentPropagationsResponse' {nextToken} -> nextToken) (\s@GetTransitGatewayAttachmentPropagationsResponse' {} a -> s {nextToken = a} :: GetTransitGatewayAttachmentPropagationsResponse)
+
+-- | Information about the propagation route tables.
+getTransitGatewayAttachmentPropagationsResponse_transitGatewayAttachmentPropagations :: Lens.Lens' GetTransitGatewayAttachmentPropagationsResponse (Prelude.Maybe [TransitGatewayAttachmentPropagation])
+getTransitGatewayAttachmentPropagationsResponse_transitGatewayAttachmentPropagations = Lens.lens (\GetTransitGatewayAttachmentPropagationsResponse' {transitGatewayAttachmentPropagations} -> transitGatewayAttachmentPropagations) (\s@GetTransitGatewayAttachmentPropagationsResponse' {} a -> s {transitGatewayAttachmentPropagations = a} :: GetTransitGatewayAttachmentPropagationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTransitGatewayAttachmentPropagationsResponse_httpStatus :: Lens.Lens' GetTransitGatewayAttachmentPropagationsResponse Prelude.Int
+getTransitGatewayAttachmentPropagationsResponse_httpStatus = Lens.lens (\GetTransitGatewayAttachmentPropagationsResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayAttachmentPropagationsResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayAttachmentPropagationsResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayAttachmentPropagationsResponse
+  where
+  rnf
+    GetTransitGatewayAttachmentPropagationsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayAttachmentPropagations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayMulticastDomainAssociations.hs b/gen/Amazonka/EC2/GetTransitGatewayMulticastDomainAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayMulticastDomainAssociations.hs
@@ -0,0 +1,343 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayMulticastDomainAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the associations for the transit gateway
+-- multicast domain.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetTransitGatewayMulticastDomainAssociations
+  ( -- * Creating a Request
+    GetTransitGatewayMulticastDomainAssociations (..),
+    newGetTransitGatewayMulticastDomainAssociations,
+
+    -- * Request Lenses
+    getTransitGatewayMulticastDomainAssociations_dryRun,
+    getTransitGatewayMulticastDomainAssociations_filters,
+    getTransitGatewayMulticastDomainAssociations_maxResults,
+    getTransitGatewayMulticastDomainAssociations_nextToken,
+    getTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayMulticastDomainAssociationsResponse (..),
+    newGetTransitGatewayMulticastDomainAssociationsResponse,
+
+    -- * Response Lenses
+    getTransitGatewayMulticastDomainAssociationsResponse_multicastDomainAssociations,
+    getTransitGatewayMulticastDomainAssociationsResponse_nextToken,
+    getTransitGatewayMulticastDomainAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayMulticastDomainAssociations' smart constructor.
+data GetTransitGatewayMulticastDomainAssociations = GetTransitGatewayMulticastDomainAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @resource-id@ - The ID of the resource.
+    --
+    -- -   @resource-type@ - The type of resource. The valid value is: @vpc@.
+    --
+    -- -   @state@ - The state of the subnet association. Valid values are
+    --     @associated@ | @associating@ | @disassociated@ | @disassociating@.
+    --
+    -- -   @subnet-id@ - The ID of the subnet.
+    --
+    -- -   @transit-gateway-attachment-id@ - The id of the transit gateway
+    --     attachment.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayMulticastDomainAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayMulticastDomainAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayMulticastDomainAssociations_filters' - One or more filters. The possible values are:
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The type of resource. The valid value is: @vpc@.
+--
+-- -   @state@ - The state of the subnet association. Valid values are
+--     @associated@ | @associating@ | @disassociated@ | @disassociating@.
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @transit-gateway-attachment-id@ - The id of the transit gateway
+--     attachment.
+--
+-- 'maxResults', 'getTransitGatewayMulticastDomainAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayMulticastDomainAssociations_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayMulticastDomainId', 'getTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newGetTransitGatewayMulticastDomainAssociations ::
+  GetTransitGatewayMulticastDomainAssociations
+newGetTransitGatewayMulticastDomainAssociations =
+  GetTransitGatewayMulticastDomainAssociations'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayMulticastDomainAssociations_dryRun :: Lens.Lens' GetTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Bool)
+getTransitGatewayMulticastDomainAssociations_dryRun = Lens.lens (\GetTransitGatewayMulticastDomainAssociations' {dryRun} -> dryRun) (\s@GetTransitGatewayMulticastDomainAssociations' {} a -> s {dryRun = a} :: GetTransitGatewayMulticastDomainAssociations)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The type of resource. The valid value is: @vpc@.
+--
+-- -   @state@ - The state of the subnet association. Valid values are
+--     @associated@ | @associating@ | @disassociated@ | @disassociating@.
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @transit-gateway-attachment-id@ - The id of the transit gateway
+--     attachment.
+getTransitGatewayMulticastDomainAssociations_filters :: Lens.Lens' GetTransitGatewayMulticastDomainAssociations (Prelude.Maybe [Filter])
+getTransitGatewayMulticastDomainAssociations_filters = Lens.lens (\GetTransitGatewayMulticastDomainAssociations' {filters} -> filters) (\s@GetTransitGatewayMulticastDomainAssociations' {} a -> s {filters = a} :: GetTransitGatewayMulticastDomainAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayMulticastDomainAssociations_maxResults :: Lens.Lens' GetTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Natural)
+getTransitGatewayMulticastDomainAssociations_maxResults = Lens.lens (\GetTransitGatewayMulticastDomainAssociations' {maxResults} -> maxResults) (\s@GetTransitGatewayMulticastDomainAssociations' {} a -> s {maxResults = a} :: GetTransitGatewayMulticastDomainAssociations)
+
+-- | The token for the next page of results.
+getTransitGatewayMulticastDomainAssociations_nextToken :: Lens.Lens' GetTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+getTransitGatewayMulticastDomainAssociations_nextToken = Lens.lens (\GetTransitGatewayMulticastDomainAssociations' {nextToken} -> nextToken) (\s@GetTransitGatewayMulticastDomainAssociations' {} a -> s {nextToken = a} :: GetTransitGatewayMulticastDomainAssociations)
+
+-- | The ID of the transit gateway multicast domain.
+getTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId :: Lens.Lens' GetTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+getTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId = Lens.lens (\GetTransitGatewayMulticastDomainAssociations' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@GetTransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayMulticastDomainId = a} :: GetTransitGatewayMulticastDomainAssociations)
+
+instance
+  Core.AWSPager
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayMulticastDomainAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayMulticastDomainAssociationsResponse_multicastDomainAssociations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTransitGatewayMulticastDomainAssociations_nextToken
+          Lens..~ rs
+          Lens.^? getTransitGatewayMulticastDomainAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  type
+    AWSResponse
+      GetTransitGatewayMulticastDomainAssociations =
+      GetTransitGatewayMulticastDomainAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayMulticastDomainAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "multicastDomainAssociations"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayMulticastDomainAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  rnf GetTransitGatewayMulticastDomainAssociations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayMulticastDomainAssociations
+  where
+  toQuery
+    GetTransitGatewayMulticastDomainAssociations' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "GetTransitGatewayMulticastDomainAssociations" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "Filter" Prelude.<$> filters),
+          "MaxResults" Data.=: maxResults,
+          "NextToken" Data.=: nextToken,
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newGetTransitGatewayMulticastDomainAssociationsResponse' smart constructor.
+data GetTransitGatewayMulticastDomainAssociationsResponse = GetTransitGatewayMulticastDomainAssociationsResponse'
+  { -- | Information about the multicast domain associations.
+    multicastDomainAssociations :: Prelude.Maybe [TransitGatewayMulticastDomainAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayMulticastDomainAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'multicastDomainAssociations', 'getTransitGatewayMulticastDomainAssociationsResponse_multicastDomainAssociations' - Information about the multicast domain associations.
+--
+-- 'nextToken', 'getTransitGatewayMulticastDomainAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getTransitGatewayMulticastDomainAssociationsResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayMulticastDomainAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayMulticastDomainAssociationsResponse
+newGetTransitGatewayMulticastDomainAssociationsResponse
+  pHttpStatus_ =
+    GetTransitGatewayMulticastDomainAssociationsResponse'
+      { multicastDomainAssociations =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the multicast domain associations.
+getTransitGatewayMulticastDomainAssociationsResponse_multicastDomainAssociations :: Lens.Lens' GetTransitGatewayMulticastDomainAssociationsResponse (Prelude.Maybe [TransitGatewayMulticastDomainAssociation])
+getTransitGatewayMulticastDomainAssociationsResponse_multicastDomainAssociations = Lens.lens (\GetTransitGatewayMulticastDomainAssociationsResponse' {multicastDomainAssociations} -> multicastDomainAssociations) (\s@GetTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {multicastDomainAssociations = a} :: GetTransitGatewayMulticastDomainAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getTransitGatewayMulticastDomainAssociationsResponse_nextToken :: Lens.Lens' GetTransitGatewayMulticastDomainAssociationsResponse (Prelude.Maybe Prelude.Text)
+getTransitGatewayMulticastDomainAssociationsResponse_nextToken = Lens.lens (\GetTransitGatewayMulticastDomainAssociationsResponse' {nextToken} -> nextToken) (\s@GetTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {nextToken = a} :: GetTransitGatewayMulticastDomainAssociationsResponse)
+
+-- | The response's http status code.
+getTransitGatewayMulticastDomainAssociationsResponse_httpStatus :: Lens.Lens' GetTransitGatewayMulticastDomainAssociationsResponse Prelude.Int
+getTransitGatewayMulticastDomainAssociationsResponse_httpStatus = Lens.lens (\GetTransitGatewayMulticastDomainAssociationsResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayMulticastDomainAssociationsResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayMulticastDomainAssociationsResponse
+  where
+  rnf
+    GetTransitGatewayMulticastDomainAssociationsResponse' {..} =
+      Prelude.rnf multicastDomainAssociations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayPolicyTableAssociations.hs b/gen/Amazonka/EC2/GetTransitGatewayPolicyTableAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayPolicyTableAssociations.hs
@@ -0,0 +1,304 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayPolicyTableAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of the transit gateway policy table associations.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetTransitGatewayPolicyTableAssociations
+  ( -- * Creating a Request
+    GetTransitGatewayPolicyTableAssociations (..),
+    newGetTransitGatewayPolicyTableAssociations,
+
+    -- * Request Lenses
+    getTransitGatewayPolicyTableAssociations_dryRun,
+    getTransitGatewayPolicyTableAssociations_filters,
+    getTransitGatewayPolicyTableAssociations_maxResults,
+    getTransitGatewayPolicyTableAssociations_nextToken,
+    getTransitGatewayPolicyTableAssociations_transitGatewayPolicyTableId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayPolicyTableAssociationsResponse (..),
+    newGetTransitGatewayPolicyTableAssociationsResponse,
+
+    -- * Response Lenses
+    getTransitGatewayPolicyTableAssociationsResponse_associations,
+    getTransitGatewayPolicyTableAssociationsResponse_nextToken,
+    getTransitGatewayPolicyTableAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayPolicyTableAssociations' smart constructor.
+data GetTransitGatewayPolicyTableAssociations = GetTransitGatewayPolicyTableAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters associated with the transit gateway policy table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway policy table.
+    transitGatewayPolicyTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayPolicyTableAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayPolicyTableAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayPolicyTableAssociations_filters' - The filters associated with the transit gateway policy table.
+--
+-- 'maxResults', 'getTransitGatewayPolicyTableAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayPolicyTableAssociations_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayPolicyTableId', 'getTransitGatewayPolicyTableAssociations_transitGatewayPolicyTableId' - The ID of the transit gateway policy table.
+newGetTransitGatewayPolicyTableAssociations ::
+  -- | 'transitGatewayPolicyTableId'
+  Prelude.Text ->
+  GetTransitGatewayPolicyTableAssociations
+newGetTransitGatewayPolicyTableAssociations
+  pTransitGatewayPolicyTableId_ =
+    GetTransitGatewayPolicyTableAssociations'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        transitGatewayPolicyTableId =
+          pTransitGatewayPolicyTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayPolicyTableAssociations_dryRun :: Lens.Lens' GetTransitGatewayPolicyTableAssociations (Prelude.Maybe Prelude.Bool)
+getTransitGatewayPolicyTableAssociations_dryRun = Lens.lens (\GetTransitGatewayPolicyTableAssociations' {dryRun} -> dryRun) (\s@GetTransitGatewayPolicyTableAssociations' {} a -> s {dryRun = a} :: GetTransitGatewayPolicyTableAssociations)
+
+-- | The filters associated with the transit gateway policy table.
+getTransitGatewayPolicyTableAssociations_filters :: Lens.Lens' GetTransitGatewayPolicyTableAssociations (Prelude.Maybe [Filter])
+getTransitGatewayPolicyTableAssociations_filters = Lens.lens (\GetTransitGatewayPolicyTableAssociations' {filters} -> filters) (\s@GetTransitGatewayPolicyTableAssociations' {} a -> s {filters = a} :: GetTransitGatewayPolicyTableAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayPolicyTableAssociations_maxResults :: Lens.Lens' GetTransitGatewayPolicyTableAssociations (Prelude.Maybe Prelude.Natural)
+getTransitGatewayPolicyTableAssociations_maxResults = Lens.lens (\GetTransitGatewayPolicyTableAssociations' {maxResults} -> maxResults) (\s@GetTransitGatewayPolicyTableAssociations' {} a -> s {maxResults = a} :: GetTransitGatewayPolicyTableAssociations)
+
+-- | The token for the next page of results.
+getTransitGatewayPolicyTableAssociations_nextToken :: Lens.Lens' GetTransitGatewayPolicyTableAssociations (Prelude.Maybe Prelude.Text)
+getTransitGatewayPolicyTableAssociations_nextToken = Lens.lens (\GetTransitGatewayPolicyTableAssociations' {nextToken} -> nextToken) (\s@GetTransitGatewayPolicyTableAssociations' {} a -> s {nextToken = a} :: GetTransitGatewayPolicyTableAssociations)
+
+-- | The ID of the transit gateway policy table.
+getTransitGatewayPolicyTableAssociations_transitGatewayPolicyTableId :: Lens.Lens' GetTransitGatewayPolicyTableAssociations Prelude.Text
+getTransitGatewayPolicyTableAssociations_transitGatewayPolicyTableId = Lens.lens (\GetTransitGatewayPolicyTableAssociations' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@GetTransitGatewayPolicyTableAssociations' {} a -> s {transitGatewayPolicyTableId = a} :: GetTransitGatewayPolicyTableAssociations)
+
+instance
+  Core.AWSPager
+    GetTransitGatewayPolicyTableAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayPolicyTableAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayPolicyTableAssociationsResponse_associations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTransitGatewayPolicyTableAssociations_nextToken
+          Lens..~ rs
+          Lens.^? getTransitGatewayPolicyTableAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayPolicyTableAssociations
+  where
+  type
+    AWSResponse
+      GetTransitGatewayPolicyTableAssociations =
+      GetTransitGatewayPolicyTableAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayPolicyTableAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "associations"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayPolicyTableAssociations
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayPolicyTableAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayPolicyTableId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayPolicyTableAssociations
+  where
+  rnf GetTransitGatewayPolicyTableAssociations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayPolicyTableAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayPolicyTableAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayPolicyTableAssociations
+  where
+  toQuery GetTransitGatewayPolicyTableAssociations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetTransitGatewayPolicyTableAssociations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayPolicyTableId"
+          Data.=: transitGatewayPolicyTableId
+      ]
+
+-- | /See:/ 'newGetTransitGatewayPolicyTableAssociationsResponse' smart constructor.
+data GetTransitGatewayPolicyTableAssociationsResponse = GetTransitGatewayPolicyTableAssociationsResponse'
+  { -- | Returns details about the transit gateway policy table association.
+    associations :: Prelude.Maybe [TransitGatewayPolicyTableAssociation],
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayPolicyTableAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'getTransitGatewayPolicyTableAssociationsResponse_associations' - Returns details about the transit gateway policy table association.
+--
+-- 'nextToken', 'getTransitGatewayPolicyTableAssociationsResponse_nextToken' - The token for the next page of results.
+--
+-- 'httpStatus', 'getTransitGatewayPolicyTableAssociationsResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayPolicyTableAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayPolicyTableAssociationsResponse
+newGetTransitGatewayPolicyTableAssociationsResponse
+  pHttpStatus_ =
+    GetTransitGatewayPolicyTableAssociationsResponse'
+      { associations =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns details about the transit gateway policy table association.
+getTransitGatewayPolicyTableAssociationsResponse_associations :: Lens.Lens' GetTransitGatewayPolicyTableAssociationsResponse (Prelude.Maybe [TransitGatewayPolicyTableAssociation])
+getTransitGatewayPolicyTableAssociationsResponse_associations = Lens.lens (\GetTransitGatewayPolicyTableAssociationsResponse' {associations} -> associations) (\s@GetTransitGatewayPolicyTableAssociationsResponse' {} a -> s {associations = a} :: GetTransitGatewayPolicyTableAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token for the next page of results.
+getTransitGatewayPolicyTableAssociationsResponse_nextToken :: Lens.Lens' GetTransitGatewayPolicyTableAssociationsResponse (Prelude.Maybe Prelude.Text)
+getTransitGatewayPolicyTableAssociationsResponse_nextToken = Lens.lens (\GetTransitGatewayPolicyTableAssociationsResponse' {nextToken} -> nextToken) (\s@GetTransitGatewayPolicyTableAssociationsResponse' {} a -> s {nextToken = a} :: GetTransitGatewayPolicyTableAssociationsResponse)
+
+-- | The response's http status code.
+getTransitGatewayPolicyTableAssociationsResponse_httpStatus :: Lens.Lens' GetTransitGatewayPolicyTableAssociationsResponse Prelude.Int
+getTransitGatewayPolicyTableAssociationsResponse_httpStatus = Lens.lens (\GetTransitGatewayPolicyTableAssociationsResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayPolicyTableAssociationsResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayPolicyTableAssociationsResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayPolicyTableAssociationsResponse
+  where
+  rnf
+    GetTransitGatewayPolicyTableAssociationsResponse' {..} =
+      Prelude.rnf associations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayPolicyTableEntries.hs b/gen/Amazonka/EC2/GetTransitGatewayPolicyTableEntries.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayPolicyTableEntries.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayPolicyTableEntries
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a list of transit gateway policy table entries.
+module Amazonka.EC2.GetTransitGatewayPolicyTableEntries
+  ( -- * Creating a Request
+    GetTransitGatewayPolicyTableEntries (..),
+    newGetTransitGatewayPolicyTableEntries,
+
+    -- * Request Lenses
+    getTransitGatewayPolicyTableEntries_dryRun,
+    getTransitGatewayPolicyTableEntries_filters,
+    getTransitGatewayPolicyTableEntries_maxResults,
+    getTransitGatewayPolicyTableEntries_nextToken,
+    getTransitGatewayPolicyTableEntries_transitGatewayPolicyTableId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayPolicyTableEntriesResponse (..),
+    newGetTransitGatewayPolicyTableEntriesResponse,
+
+    -- * Response Lenses
+    getTransitGatewayPolicyTableEntriesResponse_transitGatewayPolicyTableEntries,
+    getTransitGatewayPolicyTableEntriesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayPolicyTableEntries' smart constructor.
+data GetTransitGatewayPolicyTableEntries = GetTransitGatewayPolicyTableEntries'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The filters associated with the transit gateway policy table.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway policy table.
+    transitGatewayPolicyTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayPolicyTableEntries' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayPolicyTableEntries_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayPolicyTableEntries_filters' - The filters associated with the transit gateway policy table.
+--
+-- 'maxResults', 'getTransitGatewayPolicyTableEntries_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayPolicyTableEntries_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayPolicyTableId', 'getTransitGatewayPolicyTableEntries_transitGatewayPolicyTableId' - The ID of the transit gateway policy table.
+newGetTransitGatewayPolicyTableEntries ::
+  -- | 'transitGatewayPolicyTableId'
+  Prelude.Text ->
+  GetTransitGatewayPolicyTableEntries
+newGetTransitGatewayPolicyTableEntries
+  pTransitGatewayPolicyTableId_ =
+    GetTransitGatewayPolicyTableEntries'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        transitGatewayPolicyTableId =
+          pTransitGatewayPolicyTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayPolicyTableEntries_dryRun :: Lens.Lens' GetTransitGatewayPolicyTableEntries (Prelude.Maybe Prelude.Bool)
+getTransitGatewayPolicyTableEntries_dryRun = Lens.lens (\GetTransitGatewayPolicyTableEntries' {dryRun} -> dryRun) (\s@GetTransitGatewayPolicyTableEntries' {} a -> s {dryRun = a} :: GetTransitGatewayPolicyTableEntries)
+
+-- | The filters associated with the transit gateway policy table.
+getTransitGatewayPolicyTableEntries_filters :: Lens.Lens' GetTransitGatewayPolicyTableEntries (Prelude.Maybe [Filter])
+getTransitGatewayPolicyTableEntries_filters = Lens.lens (\GetTransitGatewayPolicyTableEntries' {filters} -> filters) (\s@GetTransitGatewayPolicyTableEntries' {} a -> s {filters = a} :: GetTransitGatewayPolicyTableEntries) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayPolicyTableEntries_maxResults :: Lens.Lens' GetTransitGatewayPolicyTableEntries (Prelude.Maybe Prelude.Natural)
+getTransitGatewayPolicyTableEntries_maxResults = Lens.lens (\GetTransitGatewayPolicyTableEntries' {maxResults} -> maxResults) (\s@GetTransitGatewayPolicyTableEntries' {} a -> s {maxResults = a} :: GetTransitGatewayPolicyTableEntries)
+
+-- | The token for the next page of results.
+getTransitGatewayPolicyTableEntries_nextToken :: Lens.Lens' GetTransitGatewayPolicyTableEntries (Prelude.Maybe Prelude.Text)
+getTransitGatewayPolicyTableEntries_nextToken = Lens.lens (\GetTransitGatewayPolicyTableEntries' {nextToken} -> nextToken) (\s@GetTransitGatewayPolicyTableEntries' {} a -> s {nextToken = a} :: GetTransitGatewayPolicyTableEntries)
+
+-- | The ID of the transit gateway policy table.
+getTransitGatewayPolicyTableEntries_transitGatewayPolicyTableId :: Lens.Lens' GetTransitGatewayPolicyTableEntries Prelude.Text
+getTransitGatewayPolicyTableEntries_transitGatewayPolicyTableId = Lens.lens (\GetTransitGatewayPolicyTableEntries' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@GetTransitGatewayPolicyTableEntries' {} a -> s {transitGatewayPolicyTableId = a} :: GetTransitGatewayPolicyTableEntries)
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayPolicyTableEntries
+  where
+  type
+    AWSResponse GetTransitGatewayPolicyTableEntries =
+      GetTransitGatewayPolicyTableEntriesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayPolicyTableEntriesResponse'
+            Prelude.<$> ( x
+                            Data..@? "transitGatewayPolicyTableEntries"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayPolicyTableEntries
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayPolicyTableEntries' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayPolicyTableId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayPolicyTableEntries
+  where
+  rnf GetTransitGatewayPolicyTableEntries' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayPolicyTableEntries
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayPolicyTableEntries
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayPolicyTableEntries
+  where
+  toQuery GetTransitGatewayPolicyTableEntries' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetTransitGatewayPolicyTableEntries" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayPolicyTableId"
+          Data.=: transitGatewayPolicyTableId
+      ]
+
+-- | /See:/ 'newGetTransitGatewayPolicyTableEntriesResponse' smart constructor.
+data GetTransitGatewayPolicyTableEntriesResponse = GetTransitGatewayPolicyTableEntriesResponse'
+  { -- | The entries for the transit gateway policy table.
+    transitGatewayPolicyTableEntries :: Prelude.Maybe [TransitGatewayPolicyTableEntry],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayPolicyTableEntriesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPolicyTableEntries', 'getTransitGatewayPolicyTableEntriesResponse_transitGatewayPolicyTableEntries' - The entries for the transit gateway policy table.
+--
+-- 'httpStatus', 'getTransitGatewayPolicyTableEntriesResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayPolicyTableEntriesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayPolicyTableEntriesResponse
+newGetTransitGatewayPolicyTableEntriesResponse
+  pHttpStatus_ =
+    GetTransitGatewayPolicyTableEntriesResponse'
+      { transitGatewayPolicyTableEntries =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The entries for the transit gateway policy table.
+getTransitGatewayPolicyTableEntriesResponse_transitGatewayPolicyTableEntries :: Lens.Lens' GetTransitGatewayPolicyTableEntriesResponse (Prelude.Maybe [TransitGatewayPolicyTableEntry])
+getTransitGatewayPolicyTableEntriesResponse_transitGatewayPolicyTableEntries = Lens.lens (\GetTransitGatewayPolicyTableEntriesResponse' {transitGatewayPolicyTableEntries} -> transitGatewayPolicyTableEntries) (\s@GetTransitGatewayPolicyTableEntriesResponse' {} a -> s {transitGatewayPolicyTableEntries = a} :: GetTransitGatewayPolicyTableEntriesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTransitGatewayPolicyTableEntriesResponse_httpStatus :: Lens.Lens' GetTransitGatewayPolicyTableEntriesResponse Prelude.Int
+getTransitGatewayPolicyTableEntriesResponse_httpStatus = Lens.lens (\GetTransitGatewayPolicyTableEntriesResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayPolicyTableEntriesResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayPolicyTableEntriesResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayPolicyTableEntriesResponse
+  where
+  rnf GetTransitGatewayPolicyTableEntriesResponse' {..} =
+    Prelude.rnf transitGatewayPolicyTableEntries
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayPrefixListReferences.hs b/gen/Amazonka/EC2/GetTransitGatewayPrefixListReferences.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayPrefixListReferences.hs
@@ -0,0 +1,368 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayPrefixListReferences
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the prefix list references in a specified transit
+-- gateway route table.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetTransitGatewayPrefixListReferences
+  ( -- * Creating a Request
+    GetTransitGatewayPrefixListReferences (..),
+    newGetTransitGatewayPrefixListReferences,
+
+    -- * Request Lenses
+    getTransitGatewayPrefixListReferences_dryRun,
+    getTransitGatewayPrefixListReferences_filters,
+    getTransitGatewayPrefixListReferences_maxResults,
+    getTransitGatewayPrefixListReferences_nextToken,
+    getTransitGatewayPrefixListReferences_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayPrefixListReferencesResponse (..),
+    newGetTransitGatewayPrefixListReferencesResponse,
+
+    -- * Response Lenses
+    getTransitGatewayPrefixListReferencesResponse_nextToken,
+    getTransitGatewayPrefixListReferencesResponse_transitGatewayPrefixListReferences,
+    getTransitGatewayPrefixListReferencesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayPrefixListReferences' smart constructor.
+data GetTransitGatewayPrefixListReferences = GetTransitGatewayPrefixListReferences'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @attachment.resource-id@ - The ID of the resource for the
+    --     attachment.
+    --
+    -- -   @attachment.resource-type@ - The type of resource for the
+    --     attachment. Valid values are @vpc@ | @vpn@ |
+    --     @direct-connect-gateway@ | @peering@.
+    --
+    -- -   @attachment.transit-gateway-attachment-id@ - The ID of the
+    --     attachment.
+    --
+    -- -   @is-blackhole@ - Whether traffic matching the route is blocked
+    --     (@true@ | @false@).
+    --
+    -- -   @prefix-list-id@ - The ID of the prefix list.
+    --
+    -- -   @prefix-list-owner-id@ - The ID of the owner of the prefix list.
+    --
+    -- -   @state@ - The state of the prefix list reference (@pending@ |
+    --     @available@ | @modifying@ | @deleting@).
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayPrefixListReferences' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayPrefixListReferences_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayPrefixListReferences_filters' - One or more filters. The possible values are:
+--
+-- -   @attachment.resource-id@ - The ID of the resource for the
+--     attachment.
+--
+-- -   @attachment.resource-type@ - The type of resource for the
+--     attachment. Valid values are @vpc@ | @vpn@ |
+--     @direct-connect-gateway@ | @peering@.
+--
+-- -   @attachment.transit-gateway-attachment-id@ - The ID of the
+--     attachment.
+--
+-- -   @is-blackhole@ - Whether traffic matching the route is blocked
+--     (@true@ | @false@).
+--
+-- -   @prefix-list-id@ - The ID of the prefix list.
+--
+-- -   @prefix-list-owner-id@ - The ID of the owner of the prefix list.
+--
+-- -   @state@ - The state of the prefix list reference (@pending@ |
+--     @available@ | @modifying@ | @deleting@).
+--
+-- 'maxResults', 'getTransitGatewayPrefixListReferences_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayPrefixListReferences_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayRouteTableId', 'getTransitGatewayPrefixListReferences_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newGetTransitGatewayPrefixListReferences ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  GetTransitGatewayPrefixListReferences
+newGetTransitGatewayPrefixListReferences
+  pTransitGatewayRouteTableId_ =
+    GetTransitGatewayPrefixListReferences'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayPrefixListReferences_dryRun :: Lens.Lens' GetTransitGatewayPrefixListReferences (Prelude.Maybe Prelude.Bool)
+getTransitGatewayPrefixListReferences_dryRun = Lens.lens (\GetTransitGatewayPrefixListReferences' {dryRun} -> dryRun) (\s@GetTransitGatewayPrefixListReferences' {} a -> s {dryRun = a} :: GetTransitGatewayPrefixListReferences)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @attachment.resource-id@ - The ID of the resource for the
+--     attachment.
+--
+-- -   @attachment.resource-type@ - The type of resource for the
+--     attachment. Valid values are @vpc@ | @vpn@ |
+--     @direct-connect-gateway@ | @peering@.
+--
+-- -   @attachment.transit-gateway-attachment-id@ - The ID of the
+--     attachment.
+--
+-- -   @is-blackhole@ - Whether traffic matching the route is blocked
+--     (@true@ | @false@).
+--
+-- -   @prefix-list-id@ - The ID of the prefix list.
+--
+-- -   @prefix-list-owner-id@ - The ID of the owner of the prefix list.
+--
+-- -   @state@ - The state of the prefix list reference (@pending@ |
+--     @available@ | @modifying@ | @deleting@).
+getTransitGatewayPrefixListReferences_filters :: Lens.Lens' GetTransitGatewayPrefixListReferences (Prelude.Maybe [Filter])
+getTransitGatewayPrefixListReferences_filters = Lens.lens (\GetTransitGatewayPrefixListReferences' {filters} -> filters) (\s@GetTransitGatewayPrefixListReferences' {} a -> s {filters = a} :: GetTransitGatewayPrefixListReferences) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayPrefixListReferences_maxResults :: Lens.Lens' GetTransitGatewayPrefixListReferences (Prelude.Maybe Prelude.Natural)
+getTransitGatewayPrefixListReferences_maxResults = Lens.lens (\GetTransitGatewayPrefixListReferences' {maxResults} -> maxResults) (\s@GetTransitGatewayPrefixListReferences' {} a -> s {maxResults = a} :: GetTransitGatewayPrefixListReferences)
+
+-- | The token for the next page of results.
+getTransitGatewayPrefixListReferences_nextToken :: Lens.Lens' GetTransitGatewayPrefixListReferences (Prelude.Maybe Prelude.Text)
+getTransitGatewayPrefixListReferences_nextToken = Lens.lens (\GetTransitGatewayPrefixListReferences' {nextToken} -> nextToken) (\s@GetTransitGatewayPrefixListReferences' {} a -> s {nextToken = a} :: GetTransitGatewayPrefixListReferences)
+
+-- | The ID of the transit gateway route table.
+getTransitGatewayPrefixListReferences_transitGatewayRouteTableId :: Lens.Lens' GetTransitGatewayPrefixListReferences Prelude.Text
+getTransitGatewayPrefixListReferences_transitGatewayRouteTableId = Lens.lens (\GetTransitGatewayPrefixListReferences' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@GetTransitGatewayPrefixListReferences' {} a -> s {transitGatewayRouteTableId = a} :: GetTransitGatewayPrefixListReferences)
+
+instance
+  Core.AWSPager
+    GetTransitGatewayPrefixListReferences
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayPrefixListReferencesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayPrefixListReferencesResponse_transitGatewayPrefixListReferences
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTransitGatewayPrefixListReferences_nextToken
+          Lens..~ rs
+          Lens.^? getTransitGatewayPrefixListReferencesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayPrefixListReferences
+  where
+  type
+    AWSResponse
+      GetTransitGatewayPrefixListReferences =
+      GetTransitGatewayPrefixListReferencesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayPrefixListReferencesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayPrefixListReferenceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayPrefixListReferences
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayPrefixListReferences' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayPrefixListReferences
+  where
+  rnf GetTransitGatewayPrefixListReferences' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayPrefixListReferences
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayPrefixListReferences
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayPrefixListReferences
+  where
+  toQuery GetTransitGatewayPrefixListReferences' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetTransitGatewayPrefixListReferences" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newGetTransitGatewayPrefixListReferencesResponse' smart constructor.
+data GetTransitGatewayPrefixListReferencesResponse = GetTransitGatewayPrefixListReferencesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the prefix list references.
+    transitGatewayPrefixListReferences :: Prelude.Maybe [TransitGatewayPrefixListReference],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayPrefixListReferencesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getTransitGatewayPrefixListReferencesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayPrefixListReferences', 'getTransitGatewayPrefixListReferencesResponse_transitGatewayPrefixListReferences' - Information about the prefix list references.
+--
+-- 'httpStatus', 'getTransitGatewayPrefixListReferencesResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayPrefixListReferencesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayPrefixListReferencesResponse
+newGetTransitGatewayPrefixListReferencesResponse
+  pHttpStatus_ =
+    GetTransitGatewayPrefixListReferencesResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayPrefixListReferences =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getTransitGatewayPrefixListReferencesResponse_nextToken :: Lens.Lens' GetTransitGatewayPrefixListReferencesResponse (Prelude.Maybe Prelude.Text)
+getTransitGatewayPrefixListReferencesResponse_nextToken = Lens.lens (\GetTransitGatewayPrefixListReferencesResponse' {nextToken} -> nextToken) (\s@GetTransitGatewayPrefixListReferencesResponse' {} a -> s {nextToken = a} :: GetTransitGatewayPrefixListReferencesResponse)
+
+-- | Information about the prefix list references.
+getTransitGatewayPrefixListReferencesResponse_transitGatewayPrefixListReferences :: Lens.Lens' GetTransitGatewayPrefixListReferencesResponse (Prelude.Maybe [TransitGatewayPrefixListReference])
+getTransitGatewayPrefixListReferencesResponse_transitGatewayPrefixListReferences = Lens.lens (\GetTransitGatewayPrefixListReferencesResponse' {transitGatewayPrefixListReferences} -> transitGatewayPrefixListReferences) (\s@GetTransitGatewayPrefixListReferencesResponse' {} a -> s {transitGatewayPrefixListReferences = a} :: GetTransitGatewayPrefixListReferencesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTransitGatewayPrefixListReferencesResponse_httpStatus :: Lens.Lens' GetTransitGatewayPrefixListReferencesResponse Prelude.Int
+getTransitGatewayPrefixListReferencesResponse_httpStatus = Lens.lens (\GetTransitGatewayPrefixListReferencesResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayPrefixListReferencesResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayPrefixListReferencesResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayPrefixListReferencesResponse
+  where
+  rnf
+    GetTransitGatewayPrefixListReferencesResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayPrefixListReferences
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayRouteTableAssociations.hs b/gen/Amazonka/EC2/GetTransitGatewayRouteTableAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayRouteTableAssociations.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayRouteTableAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the associations for the specified transit
+-- gateway route table.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetTransitGatewayRouteTableAssociations
+  ( -- * Creating a Request
+    GetTransitGatewayRouteTableAssociations (..),
+    newGetTransitGatewayRouteTableAssociations,
+
+    -- * Request Lenses
+    getTransitGatewayRouteTableAssociations_dryRun,
+    getTransitGatewayRouteTableAssociations_filters,
+    getTransitGatewayRouteTableAssociations_maxResults,
+    getTransitGatewayRouteTableAssociations_nextToken,
+    getTransitGatewayRouteTableAssociations_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayRouteTableAssociationsResponse (..),
+    newGetTransitGatewayRouteTableAssociationsResponse,
+
+    -- * Response Lenses
+    getTransitGatewayRouteTableAssociationsResponse_associations,
+    getTransitGatewayRouteTableAssociationsResponse_nextToken,
+    getTransitGatewayRouteTableAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayRouteTableAssociations' smart constructor.
+data GetTransitGatewayRouteTableAssociations = GetTransitGatewayRouteTableAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @resource-id@ - The ID of the resource.
+    --
+    -- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+    --     | @direct-connect-gateway@ | @peering@ | @connect@.
+    --
+    -- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayRouteTableAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayRouteTableAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayRouteTableAssociations_filters' - One or more filters. The possible values are:
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+--     | @direct-connect-gateway@ | @peering@ | @connect@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- 'maxResults', 'getTransitGatewayRouteTableAssociations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayRouteTableAssociations_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayRouteTableId', 'getTransitGatewayRouteTableAssociations_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newGetTransitGatewayRouteTableAssociations ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  GetTransitGatewayRouteTableAssociations
+newGetTransitGatewayRouteTableAssociations
+  pTransitGatewayRouteTableId_ =
+    GetTransitGatewayRouteTableAssociations'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayRouteTableAssociations_dryRun :: Lens.Lens' GetTransitGatewayRouteTableAssociations (Prelude.Maybe Prelude.Bool)
+getTransitGatewayRouteTableAssociations_dryRun = Lens.lens (\GetTransitGatewayRouteTableAssociations' {dryRun} -> dryRun) (\s@GetTransitGatewayRouteTableAssociations' {} a -> s {dryRun = a} :: GetTransitGatewayRouteTableAssociations)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+--     | @direct-connect-gateway@ | @peering@ | @connect@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+getTransitGatewayRouteTableAssociations_filters :: Lens.Lens' GetTransitGatewayRouteTableAssociations (Prelude.Maybe [Filter])
+getTransitGatewayRouteTableAssociations_filters = Lens.lens (\GetTransitGatewayRouteTableAssociations' {filters} -> filters) (\s@GetTransitGatewayRouteTableAssociations' {} a -> s {filters = a} :: GetTransitGatewayRouteTableAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayRouteTableAssociations_maxResults :: Lens.Lens' GetTransitGatewayRouteTableAssociations (Prelude.Maybe Prelude.Natural)
+getTransitGatewayRouteTableAssociations_maxResults = Lens.lens (\GetTransitGatewayRouteTableAssociations' {maxResults} -> maxResults) (\s@GetTransitGatewayRouteTableAssociations' {} a -> s {maxResults = a} :: GetTransitGatewayRouteTableAssociations)
+
+-- | The token for the next page of results.
+getTransitGatewayRouteTableAssociations_nextToken :: Lens.Lens' GetTransitGatewayRouteTableAssociations (Prelude.Maybe Prelude.Text)
+getTransitGatewayRouteTableAssociations_nextToken = Lens.lens (\GetTransitGatewayRouteTableAssociations' {nextToken} -> nextToken) (\s@GetTransitGatewayRouteTableAssociations' {} a -> s {nextToken = a} :: GetTransitGatewayRouteTableAssociations)
+
+-- | The ID of the transit gateway route table.
+getTransitGatewayRouteTableAssociations_transitGatewayRouteTableId :: Lens.Lens' GetTransitGatewayRouteTableAssociations Prelude.Text
+getTransitGatewayRouteTableAssociations_transitGatewayRouteTableId = Lens.lens (\GetTransitGatewayRouteTableAssociations' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@GetTransitGatewayRouteTableAssociations' {} a -> s {transitGatewayRouteTableId = a} :: GetTransitGatewayRouteTableAssociations)
+
+instance
+  Core.AWSPager
+    GetTransitGatewayRouteTableAssociations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayRouteTableAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayRouteTableAssociationsResponse_associations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTransitGatewayRouteTableAssociations_nextToken
+          Lens..~ rs
+          Lens.^? getTransitGatewayRouteTableAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayRouteTableAssociations
+  where
+  type
+    AWSResponse
+      GetTransitGatewayRouteTableAssociations =
+      GetTransitGatewayRouteTableAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayRouteTableAssociationsResponse'
+            Prelude.<$> ( x
+                            Data..@? "associations"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayRouteTableAssociations
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayRouteTableAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayRouteTableAssociations
+  where
+  rnf GetTransitGatewayRouteTableAssociations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayRouteTableAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayRouteTableAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayRouteTableAssociations
+  where
+  toQuery GetTransitGatewayRouteTableAssociations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetTransitGatewayRouteTableAssociations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newGetTransitGatewayRouteTableAssociationsResponse' smart constructor.
+data GetTransitGatewayRouteTableAssociationsResponse = GetTransitGatewayRouteTableAssociationsResponse'
+  { -- | Information about the associations.
+    associations :: Prelude.Maybe [TransitGatewayRouteTableAssociation],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayRouteTableAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'getTransitGatewayRouteTableAssociationsResponse_associations' - Information about the associations.
+--
+-- 'nextToken', 'getTransitGatewayRouteTableAssociationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'getTransitGatewayRouteTableAssociationsResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayRouteTableAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayRouteTableAssociationsResponse
+newGetTransitGatewayRouteTableAssociationsResponse
+  pHttpStatus_ =
+    GetTransitGatewayRouteTableAssociationsResponse'
+      { associations =
+          Prelude.Nothing,
+        nextToken =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the associations.
+getTransitGatewayRouteTableAssociationsResponse_associations :: Lens.Lens' GetTransitGatewayRouteTableAssociationsResponse (Prelude.Maybe [TransitGatewayRouteTableAssociation])
+getTransitGatewayRouteTableAssociationsResponse_associations = Lens.lens (\GetTransitGatewayRouteTableAssociationsResponse' {associations} -> associations) (\s@GetTransitGatewayRouteTableAssociationsResponse' {} a -> s {associations = a} :: GetTransitGatewayRouteTableAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getTransitGatewayRouteTableAssociationsResponse_nextToken :: Lens.Lens' GetTransitGatewayRouteTableAssociationsResponse (Prelude.Maybe Prelude.Text)
+getTransitGatewayRouteTableAssociationsResponse_nextToken = Lens.lens (\GetTransitGatewayRouteTableAssociationsResponse' {nextToken} -> nextToken) (\s@GetTransitGatewayRouteTableAssociationsResponse' {} a -> s {nextToken = a} :: GetTransitGatewayRouteTableAssociationsResponse)
+
+-- | The response's http status code.
+getTransitGatewayRouteTableAssociationsResponse_httpStatus :: Lens.Lens' GetTransitGatewayRouteTableAssociationsResponse Prelude.Int
+getTransitGatewayRouteTableAssociationsResponse_httpStatus = Lens.lens (\GetTransitGatewayRouteTableAssociationsResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayRouteTableAssociationsResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayRouteTableAssociationsResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayRouteTableAssociationsResponse
+  where
+  rnf
+    GetTransitGatewayRouteTableAssociationsResponse' {..} =
+      Prelude.rnf associations
+        `Prelude.seq` Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetTransitGatewayRouteTablePropagations.hs b/gen/Amazonka/EC2/GetTransitGatewayRouteTablePropagations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetTransitGatewayRouteTablePropagations.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetTransitGatewayRouteTablePropagations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about the route table propagations for the specified
+-- transit gateway route table.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetTransitGatewayRouteTablePropagations
+  ( -- * Creating a Request
+    GetTransitGatewayRouteTablePropagations (..),
+    newGetTransitGatewayRouteTablePropagations,
+
+    -- * Request Lenses
+    getTransitGatewayRouteTablePropagations_dryRun,
+    getTransitGatewayRouteTablePropagations_filters,
+    getTransitGatewayRouteTablePropagations_maxResults,
+    getTransitGatewayRouteTablePropagations_nextToken,
+    getTransitGatewayRouteTablePropagations_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    GetTransitGatewayRouteTablePropagationsResponse (..),
+    newGetTransitGatewayRouteTablePropagationsResponse,
+
+    -- * Response Lenses
+    getTransitGatewayRouteTablePropagationsResponse_nextToken,
+    getTransitGatewayRouteTablePropagationsResponse_transitGatewayRouteTablePropagations,
+    getTransitGatewayRouteTablePropagationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTransitGatewayRouteTablePropagations' smart constructor.
+data GetTransitGatewayRouteTablePropagations = GetTransitGatewayRouteTablePropagations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @resource-id@ - The ID of the resource.
+    --
+    -- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+    --     | @direct-connect-gateway@ | @peering@ | @connect@.
+    --
+    -- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayRouteTablePropagations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getTransitGatewayRouteTablePropagations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'getTransitGatewayRouteTablePropagations_filters' - One or more filters. The possible values are:
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+--     | @direct-connect-gateway@ | @peering@ | @connect@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+--
+-- 'maxResults', 'getTransitGatewayRouteTablePropagations_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'getTransitGatewayRouteTablePropagations_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayRouteTableId', 'getTransitGatewayRouteTablePropagations_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newGetTransitGatewayRouteTablePropagations ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  GetTransitGatewayRouteTablePropagations
+newGetTransitGatewayRouteTablePropagations
+  pTransitGatewayRouteTableId_ =
+    GetTransitGatewayRouteTablePropagations'
+      { dryRun =
+          Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getTransitGatewayRouteTablePropagations_dryRun :: Lens.Lens' GetTransitGatewayRouteTablePropagations (Prelude.Maybe Prelude.Bool)
+getTransitGatewayRouteTablePropagations_dryRun = Lens.lens (\GetTransitGatewayRouteTablePropagations' {dryRun} -> dryRun) (\s@GetTransitGatewayRouteTablePropagations' {} a -> s {dryRun = a} :: GetTransitGatewayRouteTablePropagations)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The resource type. Valid values are @vpc@ | @vpn@
+--     | @direct-connect-gateway@ | @peering@ | @connect@.
+--
+-- -   @transit-gateway-attachment-id@ - The ID of the attachment.
+getTransitGatewayRouteTablePropagations_filters :: Lens.Lens' GetTransitGatewayRouteTablePropagations (Prelude.Maybe [Filter])
+getTransitGatewayRouteTablePropagations_filters = Lens.lens (\GetTransitGatewayRouteTablePropagations' {filters} -> filters) (\s@GetTransitGatewayRouteTablePropagations' {} a -> s {filters = a} :: GetTransitGatewayRouteTablePropagations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+getTransitGatewayRouteTablePropagations_maxResults :: Lens.Lens' GetTransitGatewayRouteTablePropagations (Prelude.Maybe Prelude.Natural)
+getTransitGatewayRouteTablePropagations_maxResults = Lens.lens (\GetTransitGatewayRouteTablePropagations' {maxResults} -> maxResults) (\s@GetTransitGatewayRouteTablePropagations' {} a -> s {maxResults = a} :: GetTransitGatewayRouteTablePropagations)
+
+-- | The token for the next page of results.
+getTransitGatewayRouteTablePropagations_nextToken :: Lens.Lens' GetTransitGatewayRouteTablePropagations (Prelude.Maybe Prelude.Text)
+getTransitGatewayRouteTablePropagations_nextToken = Lens.lens (\GetTransitGatewayRouteTablePropagations' {nextToken} -> nextToken) (\s@GetTransitGatewayRouteTablePropagations' {} a -> s {nextToken = a} :: GetTransitGatewayRouteTablePropagations)
+
+-- | The ID of the transit gateway route table.
+getTransitGatewayRouteTablePropagations_transitGatewayRouteTableId :: Lens.Lens' GetTransitGatewayRouteTablePropagations Prelude.Text
+getTransitGatewayRouteTablePropagations_transitGatewayRouteTableId = Lens.lens (\GetTransitGatewayRouteTablePropagations' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@GetTransitGatewayRouteTablePropagations' {} a -> s {transitGatewayRouteTableId = a} :: GetTransitGatewayRouteTablePropagations)
+
+instance
+  Core.AWSPager
+    GetTransitGatewayRouteTablePropagations
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayRouteTablePropagationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getTransitGatewayRouteTablePropagationsResponse_transitGatewayRouteTablePropagations
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getTransitGatewayRouteTablePropagations_nextToken
+          Lens..~ rs
+          Lens.^? getTransitGatewayRouteTablePropagationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    GetTransitGatewayRouteTablePropagations
+  where
+  type
+    AWSResponse
+      GetTransitGatewayRouteTablePropagations =
+      GetTransitGatewayRouteTablePropagationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetTransitGatewayRouteTablePropagationsResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "transitGatewayRouteTablePropagations"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetTransitGatewayRouteTablePropagations
+  where
+  hashWithSalt
+    _salt
+    GetTransitGatewayRouteTablePropagations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    GetTransitGatewayRouteTablePropagations
+  where
+  rnf GetTransitGatewayRouteTablePropagations' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance
+  Data.ToHeaders
+    GetTransitGatewayRouteTablePropagations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetTransitGatewayRouteTablePropagations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetTransitGatewayRouteTablePropagations
+  where
+  toQuery GetTransitGatewayRouteTablePropagations' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetTransitGatewayRouteTablePropagations" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newGetTransitGatewayRouteTablePropagationsResponse' smart constructor.
+data GetTransitGatewayRouteTablePropagationsResponse = GetTransitGatewayRouteTablePropagationsResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the route table propagations.
+    transitGatewayRouteTablePropagations :: Prelude.Maybe [TransitGatewayRouteTablePropagation],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTransitGatewayRouteTablePropagationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getTransitGatewayRouteTablePropagationsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'transitGatewayRouteTablePropagations', 'getTransitGatewayRouteTablePropagationsResponse_transitGatewayRouteTablePropagations' - Information about the route table propagations.
+--
+-- 'httpStatus', 'getTransitGatewayRouteTablePropagationsResponse_httpStatus' - The response's http status code.
+newGetTransitGatewayRouteTablePropagationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetTransitGatewayRouteTablePropagationsResponse
+newGetTransitGatewayRouteTablePropagationsResponse
+  pHttpStatus_ =
+    GetTransitGatewayRouteTablePropagationsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        transitGatewayRouteTablePropagations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+getTransitGatewayRouteTablePropagationsResponse_nextToken :: Lens.Lens' GetTransitGatewayRouteTablePropagationsResponse (Prelude.Maybe Prelude.Text)
+getTransitGatewayRouteTablePropagationsResponse_nextToken = Lens.lens (\GetTransitGatewayRouteTablePropagationsResponse' {nextToken} -> nextToken) (\s@GetTransitGatewayRouteTablePropagationsResponse' {} a -> s {nextToken = a} :: GetTransitGatewayRouteTablePropagationsResponse)
+
+-- | Information about the route table propagations.
+getTransitGatewayRouteTablePropagationsResponse_transitGatewayRouteTablePropagations :: Lens.Lens' GetTransitGatewayRouteTablePropagationsResponse (Prelude.Maybe [TransitGatewayRouteTablePropagation])
+getTransitGatewayRouteTablePropagationsResponse_transitGatewayRouteTablePropagations = Lens.lens (\GetTransitGatewayRouteTablePropagationsResponse' {transitGatewayRouteTablePropagations} -> transitGatewayRouteTablePropagations) (\s@GetTransitGatewayRouteTablePropagationsResponse' {} a -> s {transitGatewayRouteTablePropagations = a} :: GetTransitGatewayRouteTablePropagationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getTransitGatewayRouteTablePropagationsResponse_httpStatus :: Lens.Lens' GetTransitGatewayRouteTablePropagationsResponse Prelude.Int
+getTransitGatewayRouteTablePropagationsResponse_httpStatus = Lens.lens (\GetTransitGatewayRouteTablePropagationsResponse' {httpStatus} -> httpStatus) (\s@GetTransitGatewayRouteTablePropagationsResponse' {} a -> s {httpStatus = a} :: GetTransitGatewayRouteTablePropagationsResponse)
+
+instance
+  Prelude.NFData
+    GetTransitGatewayRouteTablePropagationsResponse
+  where
+  rnf
+    GetTransitGatewayRouteTablePropagationsResponse' {..} =
+      Prelude.rnf nextToken
+        `Prelude.seq` Prelude.rnf transitGatewayRouteTablePropagations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetVerifiedAccessEndpointPolicy.hs b/gen/Amazonka/EC2/GetVerifiedAccessEndpointPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetVerifiedAccessEndpointPolicy.hs
@@ -0,0 +1,218 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetVerifiedAccessEndpointPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Get the Verified Access policy associated with the endpoint.
+module Amazonka.EC2.GetVerifiedAccessEndpointPolicy
+  ( -- * Creating a Request
+    GetVerifiedAccessEndpointPolicy (..),
+    newGetVerifiedAccessEndpointPolicy,
+
+    -- * Request Lenses
+    getVerifiedAccessEndpointPolicy_dryRun,
+    getVerifiedAccessEndpointPolicy_verifiedAccessEndpointId,
+
+    -- * Destructuring the Response
+    GetVerifiedAccessEndpointPolicyResponse (..),
+    newGetVerifiedAccessEndpointPolicyResponse,
+
+    -- * Response Lenses
+    getVerifiedAccessEndpointPolicyResponse_policyDocument,
+    getVerifiedAccessEndpointPolicyResponse_policyEnabled,
+    getVerifiedAccessEndpointPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVerifiedAccessEndpointPolicy' smart constructor.
+data GetVerifiedAccessEndpointPolicy = GetVerifiedAccessEndpointPolicy'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVerifiedAccessEndpointPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getVerifiedAccessEndpointPolicy_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessEndpointId', 'getVerifiedAccessEndpointPolicy_verifiedAccessEndpointId' - The ID of the Amazon Web Services Verified Access endpoint.
+newGetVerifiedAccessEndpointPolicy ::
+  -- | 'verifiedAccessEndpointId'
+  Prelude.Text ->
+  GetVerifiedAccessEndpointPolicy
+newGetVerifiedAccessEndpointPolicy
+  pVerifiedAccessEndpointId_ =
+    GetVerifiedAccessEndpointPolicy'
+      { dryRun =
+          Prelude.Nothing,
+        verifiedAccessEndpointId =
+          pVerifiedAccessEndpointId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getVerifiedAccessEndpointPolicy_dryRun :: Lens.Lens' GetVerifiedAccessEndpointPolicy (Prelude.Maybe Prelude.Bool)
+getVerifiedAccessEndpointPolicy_dryRun = Lens.lens (\GetVerifiedAccessEndpointPolicy' {dryRun} -> dryRun) (\s@GetVerifiedAccessEndpointPolicy' {} a -> s {dryRun = a} :: GetVerifiedAccessEndpointPolicy)
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+getVerifiedAccessEndpointPolicy_verifiedAccessEndpointId :: Lens.Lens' GetVerifiedAccessEndpointPolicy Prelude.Text
+getVerifiedAccessEndpointPolicy_verifiedAccessEndpointId = Lens.lens (\GetVerifiedAccessEndpointPolicy' {verifiedAccessEndpointId} -> verifiedAccessEndpointId) (\s@GetVerifiedAccessEndpointPolicy' {} a -> s {verifiedAccessEndpointId = a} :: GetVerifiedAccessEndpointPolicy)
+
+instance
+  Core.AWSRequest
+    GetVerifiedAccessEndpointPolicy
+  where
+  type
+    AWSResponse GetVerifiedAccessEndpointPolicy =
+      GetVerifiedAccessEndpointPolicyResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetVerifiedAccessEndpointPolicyResponse'
+            Prelude.<$> (x Data..@? "policyDocument")
+            Prelude.<*> (x Data..@? "policyEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetVerifiedAccessEndpointPolicy
+  where
+  hashWithSalt
+    _salt
+    GetVerifiedAccessEndpointPolicy' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` verifiedAccessEndpointId
+
+instance
+  Prelude.NFData
+    GetVerifiedAccessEndpointPolicy
+  where
+  rnf GetVerifiedAccessEndpointPolicy' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpointId
+
+instance
+  Data.ToHeaders
+    GetVerifiedAccessEndpointPolicy
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetVerifiedAccessEndpointPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetVerifiedAccessEndpointPolicy where
+  toQuery GetVerifiedAccessEndpointPolicy' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetVerifiedAccessEndpointPolicy" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessEndpointId"
+          Data.=: verifiedAccessEndpointId
+      ]
+
+-- | /See:/ 'newGetVerifiedAccessEndpointPolicyResponse' smart constructor.
+data GetVerifiedAccessEndpointPolicyResponse = GetVerifiedAccessEndpointPolicyResponse'
+  { -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Verified Access policy.
+    policyEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVerifiedAccessEndpointPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyDocument', 'getVerifiedAccessEndpointPolicyResponse_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'policyEnabled', 'getVerifiedAccessEndpointPolicyResponse_policyEnabled' - The status of the Verified Access policy.
+--
+-- 'httpStatus', 'getVerifiedAccessEndpointPolicyResponse_httpStatus' - The response's http status code.
+newGetVerifiedAccessEndpointPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVerifiedAccessEndpointPolicyResponse
+newGetVerifiedAccessEndpointPolicyResponse
+  pHttpStatus_ =
+    GetVerifiedAccessEndpointPolicyResponse'
+      { policyDocument =
+          Prelude.Nothing,
+        policyEnabled = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Web Services Verified Access policy document.
+getVerifiedAccessEndpointPolicyResponse_policyDocument :: Lens.Lens' GetVerifiedAccessEndpointPolicyResponse (Prelude.Maybe Prelude.Text)
+getVerifiedAccessEndpointPolicyResponse_policyDocument = Lens.lens (\GetVerifiedAccessEndpointPolicyResponse' {policyDocument} -> policyDocument) (\s@GetVerifiedAccessEndpointPolicyResponse' {} a -> s {policyDocument = a} :: GetVerifiedAccessEndpointPolicyResponse)
+
+-- | The status of the Verified Access policy.
+getVerifiedAccessEndpointPolicyResponse_policyEnabled :: Lens.Lens' GetVerifiedAccessEndpointPolicyResponse (Prelude.Maybe Prelude.Bool)
+getVerifiedAccessEndpointPolicyResponse_policyEnabled = Lens.lens (\GetVerifiedAccessEndpointPolicyResponse' {policyEnabled} -> policyEnabled) (\s@GetVerifiedAccessEndpointPolicyResponse' {} a -> s {policyEnabled = a} :: GetVerifiedAccessEndpointPolicyResponse)
+
+-- | The response's http status code.
+getVerifiedAccessEndpointPolicyResponse_httpStatus :: Lens.Lens' GetVerifiedAccessEndpointPolicyResponse Prelude.Int
+getVerifiedAccessEndpointPolicyResponse_httpStatus = Lens.lens (\GetVerifiedAccessEndpointPolicyResponse' {httpStatus} -> httpStatus) (\s@GetVerifiedAccessEndpointPolicyResponse' {} a -> s {httpStatus = a} :: GetVerifiedAccessEndpointPolicyResponse)
+
+instance
+  Prelude.NFData
+    GetVerifiedAccessEndpointPolicyResponse
+  where
+  rnf GetVerifiedAccessEndpointPolicyResponse' {..} =
+    Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf policyEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetVerifiedAccessGroupPolicy.hs b/gen/Amazonka/EC2/GetVerifiedAccessGroupPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetVerifiedAccessGroupPolicy.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetVerifiedAccessGroupPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Shows the contents of the Verified Access policy associated with the
+-- group.
+module Amazonka.EC2.GetVerifiedAccessGroupPolicy
+  ( -- * Creating a Request
+    GetVerifiedAccessGroupPolicy (..),
+    newGetVerifiedAccessGroupPolicy,
+
+    -- * Request Lenses
+    getVerifiedAccessGroupPolicy_dryRun,
+    getVerifiedAccessGroupPolicy_verifiedAccessGroupId,
+
+    -- * Destructuring the Response
+    GetVerifiedAccessGroupPolicyResponse (..),
+    newGetVerifiedAccessGroupPolicyResponse,
+
+    -- * Response Lenses
+    getVerifiedAccessGroupPolicyResponse_policyDocument,
+    getVerifiedAccessGroupPolicyResponse_policyEnabled,
+    getVerifiedAccessGroupPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVerifiedAccessGroupPolicy' smart constructor.
+data GetVerifiedAccessGroupPolicy = GetVerifiedAccessGroupPolicy'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVerifiedAccessGroupPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getVerifiedAccessGroupPolicy_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessGroupId', 'getVerifiedAccessGroupPolicy_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+newGetVerifiedAccessGroupPolicy ::
+  -- | 'verifiedAccessGroupId'
+  Prelude.Text ->
+  GetVerifiedAccessGroupPolicy
+newGetVerifiedAccessGroupPolicy
+  pVerifiedAccessGroupId_ =
+    GetVerifiedAccessGroupPolicy'
+      { dryRun =
+          Prelude.Nothing,
+        verifiedAccessGroupId =
+          pVerifiedAccessGroupId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getVerifiedAccessGroupPolicy_dryRun :: Lens.Lens' GetVerifiedAccessGroupPolicy (Prelude.Maybe Prelude.Bool)
+getVerifiedAccessGroupPolicy_dryRun = Lens.lens (\GetVerifiedAccessGroupPolicy' {dryRun} -> dryRun) (\s@GetVerifiedAccessGroupPolicy' {} a -> s {dryRun = a} :: GetVerifiedAccessGroupPolicy)
+
+-- | The ID of the Amazon Web Services Verified Access group.
+getVerifiedAccessGroupPolicy_verifiedAccessGroupId :: Lens.Lens' GetVerifiedAccessGroupPolicy Prelude.Text
+getVerifiedAccessGroupPolicy_verifiedAccessGroupId = Lens.lens (\GetVerifiedAccessGroupPolicy' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@GetVerifiedAccessGroupPolicy' {} a -> s {verifiedAccessGroupId = a} :: GetVerifiedAccessGroupPolicy)
+
+instance Core.AWSRequest GetVerifiedAccessGroupPolicy where
+  type
+    AWSResponse GetVerifiedAccessGroupPolicy =
+      GetVerifiedAccessGroupPolicyResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetVerifiedAccessGroupPolicyResponse'
+            Prelude.<$> (x Data..@? "policyDocument")
+            Prelude.<*> (x Data..@? "policyEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetVerifiedAccessGroupPolicy
+  where
+  hashWithSalt _salt GetVerifiedAccessGroupPolicy' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+
+instance Prelude.NFData GetVerifiedAccessGroupPolicy where
+  rnf GetVerifiedAccessGroupPolicy' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+
+instance Data.ToHeaders GetVerifiedAccessGroupPolicy where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetVerifiedAccessGroupPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetVerifiedAccessGroupPolicy where
+  toQuery GetVerifiedAccessGroupPolicy' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetVerifiedAccessGroupPolicy" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId
+      ]
+
+-- | /See:/ 'newGetVerifiedAccessGroupPolicyResponse' smart constructor.
+data GetVerifiedAccessGroupPolicyResponse = GetVerifiedAccessGroupPolicyResponse'
+  { -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Verified Access policy.
+    policyEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVerifiedAccessGroupPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyDocument', 'getVerifiedAccessGroupPolicyResponse_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'policyEnabled', 'getVerifiedAccessGroupPolicyResponse_policyEnabled' - The status of the Verified Access policy.
+--
+-- 'httpStatus', 'getVerifiedAccessGroupPolicyResponse_httpStatus' - The response's http status code.
+newGetVerifiedAccessGroupPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVerifiedAccessGroupPolicyResponse
+newGetVerifiedAccessGroupPolicyResponse pHttpStatus_ =
+  GetVerifiedAccessGroupPolicyResponse'
+    { policyDocument =
+        Prelude.Nothing,
+      policyEnabled = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Web Services Verified Access policy document.
+getVerifiedAccessGroupPolicyResponse_policyDocument :: Lens.Lens' GetVerifiedAccessGroupPolicyResponse (Prelude.Maybe Prelude.Text)
+getVerifiedAccessGroupPolicyResponse_policyDocument = Lens.lens (\GetVerifiedAccessGroupPolicyResponse' {policyDocument} -> policyDocument) (\s@GetVerifiedAccessGroupPolicyResponse' {} a -> s {policyDocument = a} :: GetVerifiedAccessGroupPolicyResponse)
+
+-- | The status of the Verified Access policy.
+getVerifiedAccessGroupPolicyResponse_policyEnabled :: Lens.Lens' GetVerifiedAccessGroupPolicyResponse (Prelude.Maybe Prelude.Bool)
+getVerifiedAccessGroupPolicyResponse_policyEnabled = Lens.lens (\GetVerifiedAccessGroupPolicyResponse' {policyEnabled} -> policyEnabled) (\s@GetVerifiedAccessGroupPolicyResponse' {} a -> s {policyEnabled = a} :: GetVerifiedAccessGroupPolicyResponse)
+
+-- | The response's http status code.
+getVerifiedAccessGroupPolicyResponse_httpStatus :: Lens.Lens' GetVerifiedAccessGroupPolicyResponse Prelude.Int
+getVerifiedAccessGroupPolicyResponse_httpStatus = Lens.lens (\GetVerifiedAccessGroupPolicyResponse' {httpStatus} -> httpStatus) (\s@GetVerifiedAccessGroupPolicyResponse' {} a -> s {httpStatus = a} :: GetVerifiedAccessGroupPolicyResponse)
+
+instance
+  Prelude.NFData
+    GetVerifiedAccessGroupPolicyResponse
+  where
+  rnf GetVerifiedAccessGroupPolicyResponse' {..} =
+    Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf policyEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetVpnConnectionDeviceSampleConfiguration.hs b/gen/Amazonka/EC2/GetVpnConnectionDeviceSampleConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetVpnConnectionDeviceSampleConfiguration.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetVpnConnectionDeviceSampleConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Download an Amazon Web Services-provided sample configuration file to be
+-- used with the customer gateway device specified for your Site-to-Site
+-- VPN connection.
+module Amazonka.EC2.GetVpnConnectionDeviceSampleConfiguration
+  ( -- * Creating a Request
+    GetVpnConnectionDeviceSampleConfiguration (..),
+    newGetVpnConnectionDeviceSampleConfiguration,
+
+    -- * Request Lenses
+    getVpnConnectionDeviceSampleConfiguration_dryRun,
+    getVpnConnectionDeviceSampleConfiguration_internetKeyExchangeVersion,
+    getVpnConnectionDeviceSampleConfiguration_vpnConnectionId,
+    getVpnConnectionDeviceSampleConfiguration_vpnConnectionDeviceTypeId,
+
+    -- * Destructuring the Response
+    GetVpnConnectionDeviceSampleConfigurationResponse (..),
+    newGetVpnConnectionDeviceSampleConfigurationResponse,
+
+    -- * Response Lenses
+    getVpnConnectionDeviceSampleConfigurationResponse_vpnConnectionDeviceSampleConfiguration,
+    getVpnConnectionDeviceSampleConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVpnConnectionDeviceSampleConfiguration' smart constructor.
+data GetVpnConnectionDeviceSampleConfiguration = GetVpnConnectionDeviceSampleConfiguration'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IKE version to be used in the sample configuration file for your
+    -- customer gateway device. You can specify one of the following versions:
+    -- @ikev1@ or @ikev2@.
+    internetKeyExchangeVersion :: Prelude.Maybe Prelude.Text,
+    -- | The @VpnConnectionId@ specifies the Site-to-Site VPN connection used for
+    -- the sample configuration.
+    vpnConnectionId :: Prelude.Text,
+    -- | Device identifier provided by the @GetVpnConnectionDeviceTypes@ API.
+    vpnConnectionDeviceTypeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpnConnectionDeviceSampleConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getVpnConnectionDeviceSampleConfiguration_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'internetKeyExchangeVersion', 'getVpnConnectionDeviceSampleConfiguration_internetKeyExchangeVersion' - The IKE version to be used in the sample configuration file for your
+-- customer gateway device. You can specify one of the following versions:
+-- @ikev1@ or @ikev2@.
+--
+-- 'vpnConnectionId', 'getVpnConnectionDeviceSampleConfiguration_vpnConnectionId' - The @VpnConnectionId@ specifies the Site-to-Site VPN connection used for
+-- the sample configuration.
+--
+-- 'vpnConnectionDeviceTypeId', 'getVpnConnectionDeviceSampleConfiguration_vpnConnectionDeviceTypeId' - Device identifier provided by the @GetVpnConnectionDeviceTypes@ API.
+newGetVpnConnectionDeviceSampleConfiguration ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  -- | 'vpnConnectionDeviceTypeId'
+  Prelude.Text ->
+  GetVpnConnectionDeviceSampleConfiguration
+newGetVpnConnectionDeviceSampleConfiguration
+  pVpnConnectionId_
+  pVpnConnectionDeviceTypeId_ =
+    GetVpnConnectionDeviceSampleConfiguration'
+      { dryRun =
+          Prelude.Nothing,
+        internetKeyExchangeVersion =
+          Prelude.Nothing,
+        vpnConnectionId =
+          pVpnConnectionId_,
+        vpnConnectionDeviceTypeId =
+          pVpnConnectionDeviceTypeId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getVpnConnectionDeviceSampleConfiguration_dryRun :: Lens.Lens' GetVpnConnectionDeviceSampleConfiguration (Prelude.Maybe Prelude.Bool)
+getVpnConnectionDeviceSampleConfiguration_dryRun = Lens.lens (\GetVpnConnectionDeviceSampleConfiguration' {dryRun} -> dryRun) (\s@GetVpnConnectionDeviceSampleConfiguration' {} a -> s {dryRun = a} :: GetVpnConnectionDeviceSampleConfiguration)
+
+-- | The IKE version to be used in the sample configuration file for your
+-- customer gateway device. You can specify one of the following versions:
+-- @ikev1@ or @ikev2@.
+getVpnConnectionDeviceSampleConfiguration_internetKeyExchangeVersion :: Lens.Lens' GetVpnConnectionDeviceSampleConfiguration (Prelude.Maybe Prelude.Text)
+getVpnConnectionDeviceSampleConfiguration_internetKeyExchangeVersion = Lens.lens (\GetVpnConnectionDeviceSampleConfiguration' {internetKeyExchangeVersion} -> internetKeyExchangeVersion) (\s@GetVpnConnectionDeviceSampleConfiguration' {} a -> s {internetKeyExchangeVersion = a} :: GetVpnConnectionDeviceSampleConfiguration)
+
+-- | The @VpnConnectionId@ specifies the Site-to-Site VPN connection used for
+-- the sample configuration.
+getVpnConnectionDeviceSampleConfiguration_vpnConnectionId :: Lens.Lens' GetVpnConnectionDeviceSampleConfiguration Prelude.Text
+getVpnConnectionDeviceSampleConfiguration_vpnConnectionId = Lens.lens (\GetVpnConnectionDeviceSampleConfiguration' {vpnConnectionId} -> vpnConnectionId) (\s@GetVpnConnectionDeviceSampleConfiguration' {} a -> s {vpnConnectionId = a} :: GetVpnConnectionDeviceSampleConfiguration)
+
+-- | Device identifier provided by the @GetVpnConnectionDeviceTypes@ API.
+getVpnConnectionDeviceSampleConfiguration_vpnConnectionDeviceTypeId :: Lens.Lens' GetVpnConnectionDeviceSampleConfiguration Prelude.Text
+getVpnConnectionDeviceSampleConfiguration_vpnConnectionDeviceTypeId = Lens.lens (\GetVpnConnectionDeviceSampleConfiguration' {vpnConnectionDeviceTypeId} -> vpnConnectionDeviceTypeId) (\s@GetVpnConnectionDeviceSampleConfiguration' {} a -> s {vpnConnectionDeviceTypeId = a} :: GetVpnConnectionDeviceSampleConfiguration)
+
+instance
+  Core.AWSRequest
+    GetVpnConnectionDeviceSampleConfiguration
+  where
+  type
+    AWSResponse
+      GetVpnConnectionDeviceSampleConfiguration =
+      GetVpnConnectionDeviceSampleConfigurationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetVpnConnectionDeviceSampleConfigurationResponse'
+            Prelude.<$> (x Data..@? "vpnConnectionDeviceSampleConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetVpnConnectionDeviceSampleConfiguration
+  where
+  hashWithSalt
+    _salt
+    GetVpnConnectionDeviceSampleConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` internetKeyExchangeVersion
+        `Prelude.hashWithSalt` vpnConnectionId
+        `Prelude.hashWithSalt` vpnConnectionDeviceTypeId
+
+instance
+  Prelude.NFData
+    GetVpnConnectionDeviceSampleConfiguration
+  where
+  rnf GetVpnConnectionDeviceSampleConfiguration' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf internetKeyExchangeVersion
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+      `Prelude.seq` Prelude.rnf vpnConnectionDeviceTypeId
+
+instance
+  Data.ToHeaders
+    GetVpnConnectionDeviceSampleConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    GetVpnConnectionDeviceSampleConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    GetVpnConnectionDeviceSampleConfiguration
+  where
+  toQuery
+    GetVpnConnectionDeviceSampleConfiguration' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "GetVpnConnectionDeviceSampleConfiguration" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "InternetKeyExchangeVersion"
+            Data.=: internetKeyExchangeVersion,
+          "VpnConnectionId" Data.=: vpnConnectionId,
+          "VpnConnectionDeviceTypeId"
+            Data.=: vpnConnectionDeviceTypeId
+        ]
+
+-- | /See:/ 'newGetVpnConnectionDeviceSampleConfigurationResponse' smart constructor.
+data GetVpnConnectionDeviceSampleConfigurationResponse = GetVpnConnectionDeviceSampleConfigurationResponse'
+  { -- | Sample configuration file for the specified customer gateway device.
+    vpnConnectionDeviceSampleConfiguration :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpnConnectionDeviceSampleConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnectionDeviceSampleConfiguration', 'getVpnConnectionDeviceSampleConfigurationResponse_vpnConnectionDeviceSampleConfiguration' - Sample configuration file for the specified customer gateway device.
+--
+-- 'httpStatus', 'getVpnConnectionDeviceSampleConfigurationResponse_httpStatus' - The response's http status code.
+newGetVpnConnectionDeviceSampleConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVpnConnectionDeviceSampleConfigurationResponse
+newGetVpnConnectionDeviceSampleConfigurationResponse
+  pHttpStatus_ =
+    GetVpnConnectionDeviceSampleConfigurationResponse'
+      { vpnConnectionDeviceSampleConfiguration =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Sample configuration file for the specified customer gateway device.
+getVpnConnectionDeviceSampleConfigurationResponse_vpnConnectionDeviceSampleConfiguration :: Lens.Lens' GetVpnConnectionDeviceSampleConfigurationResponse (Prelude.Maybe Prelude.Text)
+getVpnConnectionDeviceSampleConfigurationResponse_vpnConnectionDeviceSampleConfiguration = Lens.lens (\GetVpnConnectionDeviceSampleConfigurationResponse' {vpnConnectionDeviceSampleConfiguration} -> vpnConnectionDeviceSampleConfiguration) (\s@GetVpnConnectionDeviceSampleConfigurationResponse' {} a -> s {vpnConnectionDeviceSampleConfiguration = a} :: GetVpnConnectionDeviceSampleConfigurationResponse) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The response's http status code.
+getVpnConnectionDeviceSampleConfigurationResponse_httpStatus :: Lens.Lens' GetVpnConnectionDeviceSampleConfigurationResponse Prelude.Int
+getVpnConnectionDeviceSampleConfigurationResponse_httpStatus = Lens.lens (\GetVpnConnectionDeviceSampleConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetVpnConnectionDeviceSampleConfigurationResponse' {} a -> s {httpStatus = a} :: GetVpnConnectionDeviceSampleConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetVpnConnectionDeviceSampleConfigurationResponse
+  where
+  rnf
+    GetVpnConnectionDeviceSampleConfigurationResponse' {..} =
+      Prelude.rnf vpnConnectionDeviceSampleConfiguration
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/GetVpnConnectionDeviceTypes.hs b/gen/Amazonka/EC2/GetVpnConnectionDeviceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/GetVpnConnectionDeviceTypes.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.GetVpnConnectionDeviceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Obtain a list of customer gateway devices for which sample configuration
+-- files can be provided. The request has no additional parameters. You can
+-- also see the list of device types with sample configuration files
+-- available under
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html Your customer gateway device>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.GetVpnConnectionDeviceTypes
+  ( -- * Creating a Request
+    GetVpnConnectionDeviceTypes (..),
+    newGetVpnConnectionDeviceTypes,
+
+    -- * Request Lenses
+    getVpnConnectionDeviceTypes_dryRun,
+    getVpnConnectionDeviceTypes_maxResults,
+    getVpnConnectionDeviceTypes_nextToken,
+
+    -- * Destructuring the Response
+    GetVpnConnectionDeviceTypesResponse (..),
+    newGetVpnConnectionDeviceTypesResponse,
+
+    -- * Response Lenses
+    getVpnConnectionDeviceTypesResponse_nextToken,
+    getVpnConnectionDeviceTypesResponse_vpnConnectionDeviceTypes,
+    getVpnConnectionDeviceTypesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetVpnConnectionDeviceTypes' smart constructor.
+data GetVpnConnectionDeviceTypes = GetVpnConnectionDeviceTypes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results returned by @GetVpnConnectionDeviceTypes@
+    -- in paginated output. When this parameter is used,
+    -- @GetVpnConnectionDeviceTypes@ only returns @MaxResults@ results in a
+    -- single page along with a @NextToken@ response element. The remaining
+    -- results of the initial request can be seen by sending another
+    -- @GetVpnConnectionDeviceTypes@ request with the returned @NextToken@
+    -- value. This value can be between 200 and 1000. If this parameter is not
+    -- used, then @GetVpnConnectionDeviceTypes@ returns all results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The @NextToken@ value returned from a previous paginated
+    -- @GetVpnConnectionDeviceTypes@ request where @MaxResults@ was used and
+    -- the results exceeded the value of that parameter. Pagination continues
+    -- from the end of the previous results that returned the @NextToken@
+    -- value. This value is null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpnConnectionDeviceTypes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'getVpnConnectionDeviceTypes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'getVpnConnectionDeviceTypes_maxResults' - The maximum number of results returned by @GetVpnConnectionDeviceTypes@
+-- in paginated output. When this parameter is used,
+-- @GetVpnConnectionDeviceTypes@ only returns @MaxResults@ results in a
+-- single page along with a @NextToken@ response element. The remaining
+-- results of the initial request can be seen by sending another
+-- @GetVpnConnectionDeviceTypes@ request with the returned @NextToken@
+-- value. This value can be between 200 and 1000. If this parameter is not
+-- used, then @GetVpnConnectionDeviceTypes@ returns all results.
+--
+-- 'nextToken', 'getVpnConnectionDeviceTypes_nextToken' - The @NextToken@ value returned from a previous paginated
+-- @GetVpnConnectionDeviceTypes@ request where @MaxResults@ was used and
+-- the results exceeded the value of that parameter. Pagination continues
+-- from the end of the previous results that returned the @NextToken@
+-- value. This value is null when there are no more results to return.
+newGetVpnConnectionDeviceTypes ::
+  GetVpnConnectionDeviceTypes
+newGetVpnConnectionDeviceTypes =
+  GetVpnConnectionDeviceTypes'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+getVpnConnectionDeviceTypes_dryRun :: Lens.Lens' GetVpnConnectionDeviceTypes (Prelude.Maybe Prelude.Bool)
+getVpnConnectionDeviceTypes_dryRun = Lens.lens (\GetVpnConnectionDeviceTypes' {dryRun} -> dryRun) (\s@GetVpnConnectionDeviceTypes' {} a -> s {dryRun = a} :: GetVpnConnectionDeviceTypes)
+
+-- | The maximum number of results returned by @GetVpnConnectionDeviceTypes@
+-- in paginated output. When this parameter is used,
+-- @GetVpnConnectionDeviceTypes@ only returns @MaxResults@ results in a
+-- single page along with a @NextToken@ response element. The remaining
+-- results of the initial request can be seen by sending another
+-- @GetVpnConnectionDeviceTypes@ request with the returned @NextToken@
+-- value. This value can be between 200 and 1000. If this parameter is not
+-- used, then @GetVpnConnectionDeviceTypes@ returns all results.
+getVpnConnectionDeviceTypes_maxResults :: Lens.Lens' GetVpnConnectionDeviceTypes (Prelude.Maybe Prelude.Natural)
+getVpnConnectionDeviceTypes_maxResults = Lens.lens (\GetVpnConnectionDeviceTypes' {maxResults} -> maxResults) (\s@GetVpnConnectionDeviceTypes' {} a -> s {maxResults = a} :: GetVpnConnectionDeviceTypes)
+
+-- | The @NextToken@ value returned from a previous paginated
+-- @GetVpnConnectionDeviceTypes@ request where @MaxResults@ was used and
+-- the results exceeded the value of that parameter. Pagination continues
+-- from the end of the previous results that returned the @NextToken@
+-- value. This value is null when there are no more results to return.
+getVpnConnectionDeviceTypes_nextToken :: Lens.Lens' GetVpnConnectionDeviceTypes (Prelude.Maybe Prelude.Text)
+getVpnConnectionDeviceTypes_nextToken = Lens.lens (\GetVpnConnectionDeviceTypes' {nextToken} -> nextToken) (\s@GetVpnConnectionDeviceTypes' {} a -> s {nextToken = a} :: GetVpnConnectionDeviceTypes)
+
+instance Core.AWSPager GetVpnConnectionDeviceTypes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getVpnConnectionDeviceTypesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getVpnConnectionDeviceTypesResponse_vpnConnectionDeviceTypes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getVpnConnectionDeviceTypes_nextToken
+          Lens..~ rs
+          Lens.^? getVpnConnectionDeviceTypesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetVpnConnectionDeviceTypes where
+  type
+    AWSResponse GetVpnConnectionDeviceTypes =
+      GetVpnConnectionDeviceTypesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          GetVpnConnectionDeviceTypesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "vpnConnectionDeviceTypeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetVpnConnectionDeviceTypes where
+  hashWithSalt _salt GetVpnConnectionDeviceTypes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetVpnConnectionDeviceTypes where
+  rnf GetVpnConnectionDeviceTypes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetVpnConnectionDeviceTypes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetVpnConnectionDeviceTypes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetVpnConnectionDeviceTypes where
+  toQuery GetVpnConnectionDeviceTypes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "GetVpnConnectionDeviceTypes" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newGetVpnConnectionDeviceTypesResponse' smart constructor.
+data GetVpnConnectionDeviceTypesResponse = GetVpnConnectionDeviceTypesResponse'
+  { -- | The @NextToken@ value to include in a future
+    -- @GetVpnConnectionDeviceTypes@ request. When the results of a
+    -- @GetVpnConnectionDeviceTypes@ request exceed @MaxResults@, this value
+    -- can be used to retrieve the next page of results. This value is null
+    -- when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | List of customer gateway devices that have a sample configuration file
+    -- available for use.
+    vpnConnectionDeviceTypes :: Prelude.Maybe [VpnConnectionDeviceType],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetVpnConnectionDeviceTypesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getVpnConnectionDeviceTypesResponse_nextToken' - The @NextToken@ value to include in a future
+-- @GetVpnConnectionDeviceTypes@ request. When the results of a
+-- @GetVpnConnectionDeviceTypes@ request exceed @MaxResults@, this value
+-- can be used to retrieve the next page of results. This value is null
+-- when there are no more results to return.
+--
+-- 'vpnConnectionDeviceTypes', 'getVpnConnectionDeviceTypesResponse_vpnConnectionDeviceTypes' - List of customer gateway devices that have a sample configuration file
+-- available for use.
+--
+-- 'httpStatus', 'getVpnConnectionDeviceTypesResponse_httpStatus' - The response's http status code.
+newGetVpnConnectionDeviceTypesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetVpnConnectionDeviceTypesResponse
+newGetVpnConnectionDeviceTypesResponse pHttpStatus_ =
+  GetVpnConnectionDeviceTypesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      vpnConnectionDeviceTypes =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @NextToken@ value to include in a future
+-- @GetVpnConnectionDeviceTypes@ request. When the results of a
+-- @GetVpnConnectionDeviceTypes@ request exceed @MaxResults@, this value
+-- can be used to retrieve the next page of results. This value is null
+-- when there are no more results to return.
+getVpnConnectionDeviceTypesResponse_nextToken :: Lens.Lens' GetVpnConnectionDeviceTypesResponse (Prelude.Maybe Prelude.Text)
+getVpnConnectionDeviceTypesResponse_nextToken = Lens.lens (\GetVpnConnectionDeviceTypesResponse' {nextToken} -> nextToken) (\s@GetVpnConnectionDeviceTypesResponse' {} a -> s {nextToken = a} :: GetVpnConnectionDeviceTypesResponse)
+
+-- | List of customer gateway devices that have a sample configuration file
+-- available for use.
+getVpnConnectionDeviceTypesResponse_vpnConnectionDeviceTypes :: Lens.Lens' GetVpnConnectionDeviceTypesResponse (Prelude.Maybe [VpnConnectionDeviceType])
+getVpnConnectionDeviceTypesResponse_vpnConnectionDeviceTypes = Lens.lens (\GetVpnConnectionDeviceTypesResponse' {vpnConnectionDeviceTypes} -> vpnConnectionDeviceTypes) (\s@GetVpnConnectionDeviceTypesResponse' {} a -> s {vpnConnectionDeviceTypes = a} :: GetVpnConnectionDeviceTypesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getVpnConnectionDeviceTypesResponse_httpStatus :: Lens.Lens' GetVpnConnectionDeviceTypesResponse Prelude.Int
+getVpnConnectionDeviceTypesResponse_httpStatus = Lens.lens (\GetVpnConnectionDeviceTypesResponse' {httpStatus} -> httpStatus) (\s@GetVpnConnectionDeviceTypesResponse' {} a -> s {httpStatus = a} :: GetVpnConnectionDeviceTypesResponse)
+
+instance
+  Prelude.NFData
+    GetVpnConnectionDeviceTypesResponse
+  where
+  rnf GetVpnConnectionDeviceTypesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vpnConnectionDeviceTypes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ImportClientVpnClientCertificateRevocationList.hs b/gen/Amazonka/EC2/ImportClientVpnClientCertificateRevocationList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ImportClientVpnClientCertificateRevocationList.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ImportClientVpnClientCertificateRevocationList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Uploads a client certificate revocation list to the specified Client VPN
+-- endpoint. Uploading a client certificate revocation list overwrites the
+-- existing client certificate revocation list.
+--
+-- Uploading a client certificate revocation list resets existing client
+-- connections.
+module Amazonka.EC2.ImportClientVpnClientCertificateRevocationList
+  ( -- * Creating a Request
+    ImportClientVpnClientCertificateRevocationList (..),
+    newImportClientVpnClientCertificateRevocationList,
+
+    -- * Request Lenses
+    importClientVpnClientCertificateRevocationList_dryRun,
+    importClientVpnClientCertificateRevocationList_clientVpnEndpointId,
+    importClientVpnClientCertificateRevocationList_certificateRevocationList,
+
+    -- * Destructuring the Response
+    ImportClientVpnClientCertificateRevocationListResponse (..),
+    newImportClientVpnClientCertificateRevocationListResponse,
+
+    -- * Response Lenses
+    importClientVpnClientCertificateRevocationListResponse_return,
+    importClientVpnClientCertificateRevocationListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportClientVpnClientCertificateRevocationList' smart constructor.
+data ImportClientVpnClientCertificateRevocationList = ImportClientVpnClientCertificateRevocationList'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint to which the client certificate
+    -- revocation list applies.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The client certificate revocation list file. For more information, see
+    -- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate Generate a Client Certificate Revocation List>
+    -- in the /Client VPN Administrator Guide/.
+    certificateRevocationList :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportClientVpnClientCertificateRevocationList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'importClientVpnClientCertificateRevocationList_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'clientVpnEndpointId', 'importClientVpnClientCertificateRevocationList_clientVpnEndpointId' - The ID of the Client VPN endpoint to which the client certificate
+-- revocation list applies.
+--
+-- 'certificateRevocationList', 'importClientVpnClientCertificateRevocationList_certificateRevocationList' - The client certificate revocation list file. For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate Generate a Client Certificate Revocation List>
+-- in the /Client VPN Administrator Guide/.
+newImportClientVpnClientCertificateRevocationList ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'certificateRevocationList'
+  Prelude.Text ->
+  ImportClientVpnClientCertificateRevocationList
+newImportClientVpnClientCertificateRevocationList
+  pClientVpnEndpointId_
+  pCertificateRevocationList_ =
+    ImportClientVpnClientCertificateRevocationList'
+      { dryRun =
+          Prelude.Nothing,
+        clientVpnEndpointId =
+          pClientVpnEndpointId_,
+        certificateRevocationList =
+          pCertificateRevocationList_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+importClientVpnClientCertificateRevocationList_dryRun :: Lens.Lens' ImportClientVpnClientCertificateRevocationList (Prelude.Maybe Prelude.Bool)
+importClientVpnClientCertificateRevocationList_dryRun = Lens.lens (\ImportClientVpnClientCertificateRevocationList' {dryRun} -> dryRun) (\s@ImportClientVpnClientCertificateRevocationList' {} a -> s {dryRun = a} :: ImportClientVpnClientCertificateRevocationList)
+
+-- | The ID of the Client VPN endpoint to which the client certificate
+-- revocation list applies.
+importClientVpnClientCertificateRevocationList_clientVpnEndpointId :: Lens.Lens' ImportClientVpnClientCertificateRevocationList Prelude.Text
+importClientVpnClientCertificateRevocationList_clientVpnEndpointId = Lens.lens (\ImportClientVpnClientCertificateRevocationList' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ImportClientVpnClientCertificateRevocationList' {} a -> s {clientVpnEndpointId = a} :: ImportClientVpnClientCertificateRevocationList)
+
+-- | The client certificate revocation list file. For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-certificates.html#cvpn-working-certificates-generate Generate a Client Certificate Revocation List>
+-- in the /Client VPN Administrator Guide/.
+importClientVpnClientCertificateRevocationList_certificateRevocationList :: Lens.Lens' ImportClientVpnClientCertificateRevocationList Prelude.Text
+importClientVpnClientCertificateRevocationList_certificateRevocationList = Lens.lens (\ImportClientVpnClientCertificateRevocationList' {certificateRevocationList} -> certificateRevocationList) (\s@ImportClientVpnClientCertificateRevocationList' {} a -> s {certificateRevocationList = a} :: ImportClientVpnClientCertificateRevocationList)
+
+instance
+  Core.AWSRequest
+    ImportClientVpnClientCertificateRevocationList
+  where
+  type
+    AWSResponse
+      ImportClientVpnClientCertificateRevocationList =
+      ImportClientVpnClientCertificateRevocationListResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ImportClientVpnClientCertificateRevocationListResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ImportClientVpnClientCertificateRevocationList
+  where
+  hashWithSalt
+    _salt
+    ImportClientVpnClientCertificateRevocationList' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` clientVpnEndpointId
+        `Prelude.hashWithSalt` certificateRevocationList
+
+instance
+  Prelude.NFData
+    ImportClientVpnClientCertificateRevocationList
+  where
+  rnf
+    ImportClientVpnClientCertificateRevocationList' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf clientVpnEndpointId
+        `Prelude.seq` Prelude.rnf certificateRevocationList
+
+instance
+  Data.ToHeaders
+    ImportClientVpnClientCertificateRevocationList
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ImportClientVpnClientCertificateRevocationList
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ImportClientVpnClientCertificateRevocationList
+  where
+  toQuery
+    ImportClientVpnClientCertificateRevocationList' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "ImportClientVpnClientCertificateRevocationList" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+          "CertificateRevocationList"
+            Data.=: certificateRevocationList
+        ]
+
+-- | /See:/ 'newImportClientVpnClientCertificateRevocationListResponse' smart constructor.
+data ImportClientVpnClientCertificateRevocationListResponse = ImportClientVpnClientCertificateRevocationListResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportClientVpnClientCertificateRevocationListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'importClientVpnClientCertificateRevocationListResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'importClientVpnClientCertificateRevocationListResponse_httpStatus' - The response's http status code.
+newImportClientVpnClientCertificateRevocationListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportClientVpnClientCertificateRevocationListResponse
+newImportClientVpnClientCertificateRevocationListResponse
+  pHttpStatus_ =
+    ImportClientVpnClientCertificateRevocationListResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+importClientVpnClientCertificateRevocationListResponse_return :: Lens.Lens' ImportClientVpnClientCertificateRevocationListResponse (Prelude.Maybe Prelude.Bool)
+importClientVpnClientCertificateRevocationListResponse_return = Lens.lens (\ImportClientVpnClientCertificateRevocationListResponse' {return'} -> return') (\s@ImportClientVpnClientCertificateRevocationListResponse' {} a -> s {return' = a} :: ImportClientVpnClientCertificateRevocationListResponse)
+
+-- | The response's http status code.
+importClientVpnClientCertificateRevocationListResponse_httpStatus :: Lens.Lens' ImportClientVpnClientCertificateRevocationListResponse Prelude.Int
+importClientVpnClientCertificateRevocationListResponse_httpStatus = Lens.lens (\ImportClientVpnClientCertificateRevocationListResponse' {httpStatus} -> httpStatus) (\s@ImportClientVpnClientCertificateRevocationListResponse' {} a -> s {httpStatus = a} :: ImportClientVpnClientCertificateRevocationListResponse)
+
+instance
+  Prelude.NFData
+    ImportClientVpnClientCertificateRevocationListResponse
+  where
+  rnf
+    ImportClientVpnClientCertificateRevocationListResponse' {..} =
+      Prelude.rnf return'
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ImportImage.hs b/gen/Amazonka/EC2/ImportImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ImportImage.hs
@@ -0,0 +1,760 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ImportImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Import single or multi-volume disk images or EBS snapshots into an
+-- Amazon Machine Image (AMI).
+--
+-- Amazon Web Services VM Import\/Export strongly recommends specifying a
+-- value for either the @--license-type@ or @--usage-operation@ parameter
+-- when you create a new VM Import task. This ensures your operating system
+-- is licensed appropriately and your billing is optimized.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html Importing a VM as an image using VM Import\/Export>
+-- in the /VM Import\/Export User Guide/.
+module Amazonka.EC2.ImportImage
+  ( -- * Creating a Request
+    ImportImage (..),
+    newImportImage,
+
+    -- * Request Lenses
+    importImage_architecture,
+    importImage_bootMode,
+    importImage_clientData,
+    importImage_clientToken,
+    importImage_description,
+    importImage_diskContainers,
+    importImage_dryRun,
+    importImage_encrypted,
+    importImage_hypervisor,
+    importImage_kmsKeyId,
+    importImage_licenseSpecifications,
+    importImage_licenseType,
+    importImage_platform,
+    importImage_roleName,
+    importImage_tagSpecifications,
+    importImage_usageOperation,
+
+    -- * Destructuring the Response
+    ImportImageResponse (..),
+    newImportImageResponse,
+
+    -- * Response Lenses
+    importImageResponse_architecture,
+    importImageResponse_description,
+    importImageResponse_encrypted,
+    importImageResponse_hypervisor,
+    importImageResponse_imageId,
+    importImageResponse_importTaskId,
+    importImageResponse_kmsKeyId,
+    importImageResponse_licenseSpecifications,
+    importImageResponse_licenseType,
+    importImageResponse_platform,
+    importImageResponse_progress,
+    importImageResponse_snapshotDetails,
+    importImageResponse_status,
+    importImageResponse_statusMessage,
+    importImageResponse_tags,
+    importImageResponse_usageOperation,
+    importImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportImage' smart constructor.
+data ImportImage = ImportImage'
+  { -- | The architecture of the virtual machine.
+    --
+    -- Valid values: @i386@ | @x86_64@
+    architecture :: Prelude.Maybe Prelude.Text,
+    -- | The boot mode of the virtual machine.
+    bootMode :: Prelude.Maybe BootModeValues,
+    -- | The client-specific data.
+    clientData :: Prelude.Maybe ClientData,
+    -- | The token to enable idempotency for VM import requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description string for the import image task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about the disk containers.
+    diskContainers :: Prelude.Maybe [ImageDiskContainer],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the destination AMI of the imported image should be
+    -- encrypted. The default KMS key for EBS is used unless you specify a
+    -- non-default KMS key using @KmsKeyId@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The target hypervisor platform.
+    --
+    -- Valid values: @xen@
+    hypervisor :: Prelude.Maybe Prelude.Text,
+    -- | An identifier for the symmetric KMS key to use when creating the
+    -- encrypted AMI. This parameter is only required if you want to use a
+    -- non-default KMS key; if this parameter is not specified, the default KMS
+    -- key for EBS is used. If a @KmsKeyId@ is specified, the @Encrypted@ flag
+    -- must also be set.
+    --
+    -- The KMS key identifier may be provided in any of the following formats:
+    --
+    -- -   Key ID
+    --
+    -- -   Key alias. The alias ARN contains the @arn:aws:kms@ namespace,
+    --     followed by the Region of the key, the Amazon Web Services account
+    --     ID of the key owner, the @alias@ namespace, and then the key alias.
+    --     For example,
+    --     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+    --
+    -- -   ARN using key ID. The ID ARN contains the @arn:aws:kms@ namespace,
+    --     followed by the Region of the key, the Amazon Web Services account
+    --     ID of the key owner, the @key@ namespace, and then the key ID. For
+    --     example,
+    --     arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/.
+    --
+    -- -   ARN using key alias. The alias ARN contains the @arn:aws:kms@
+    --     namespace, followed by the Region of the key, the Amazon Web
+    --     Services account ID of the key owner, the @alias@ namespace, and
+    --     then the key alias. For example,
+    --     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+    --
+    -- Amazon Web Services parses @KmsKeyId@ asynchronously, meaning that the
+    -- action you call may appear to complete even though you provided an
+    -- invalid identifier. This action will eventually report failure.
+    --
+    -- The specified KMS key must exist in the Region that the AMI is being
+    -- copied to.
+    --
+    -- Amazon EBS does not support asymmetric KMS keys.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ARNs of the license configurations.
+    licenseSpecifications :: Prelude.Maybe [ImportImageLicenseConfigurationRequest],
+    -- | The license type to be used for the Amazon Machine Image (AMI) after
+    -- importing.
+    --
+    -- Specify @AWS@ to replace the source-system license with an Amazon Web
+    -- Services license or @BYOL@ to retain the source-system license. Leaving
+    -- this parameter undefined is the same as choosing @AWS@ when importing a
+    -- Windows Server operating system, and the same as choosing @BYOL@ when
+    -- importing a Windows client operating system (such as Windows 10) or a
+    -- Linux operating system.
+    --
+    -- To use @BYOL@, you must have existing licenses with rights to use these
+    -- licenses in a third party cloud, such as Amazon Web Services. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image Prerequisites>
+    -- in the VM Import\/Export User Guide.
+    licenseType :: Prelude.Maybe Prelude.Text,
+    -- | The operating system of the virtual machine.
+    --
+    -- Valid values: @Windows@ | @Linux@
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | The name of the role to use when not using the default role,
+    -- \'vmimport\'.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the import image task during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The usage operation value. For more information, see
+    -- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites Licensing options>
+    -- in the /VM Import\/Export User Guide/.
+    usageOperation :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architecture', 'importImage_architecture' - The architecture of the virtual machine.
+--
+-- Valid values: @i386@ | @x86_64@
+--
+-- 'bootMode', 'importImage_bootMode' - The boot mode of the virtual machine.
+--
+-- 'clientData', 'importImage_clientData' - The client-specific data.
+--
+-- 'clientToken', 'importImage_clientToken' - The token to enable idempotency for VM import requests.
+--
+-- 'description', 'importImage_description' - A description string for the import image task.
+--
+-- 'diskContainers', 'importImage_diskContainers' - Information about the disk containers.
+--
+-- 'dryRun', 'importImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'encrypted', 'importImage_encrypted' - Specifies whether the destination AMI of the imported image should be
+-- encrypted. The default KMS key for EBS is used unless you specify a
+-- non-default KMS key using @KmsKeyId@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'hypervisor', 'importImage_hypervisor' - The target hypervisor platform.
+--
+-- Valid values: @xen@
+--
+-- 'kmsKeyId', 'importImage_kmsKeyId' - An identifier for the symmetric KMS key to use when creating the
+-- encrypted AMI. This parameter is only required if you want to use a
+-- non-default KMS key; if this parameter is not specified, the default KMS
+-- key for EBS is used. If a @KmsKeyId@ is specified, the @Encrypted@ flag
+-- must also be set.
+--
+-- The KMS key identifier may be provided in any of the following formats:
+--
+-- -   Key ID
+--
+-- -   Key alias. The alias ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @alias@ namespace, and then the key alias.
+--     For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- -   ARN using key ID. The ID ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @key@ namespace, and then the key ID. For
+--     example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/.
+--
+-- -   ARN using key alias. The alias ARN contains the @arn:aws:kms@
+--     namespace, followed by the Region of the key, the Amazon Web
+--     Services account ID of the key owner, the @alias@ namespace, and
+--     then the key alias. For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- Amazon Web Services parses @KmsKeyId@ asynchronously, meaning that the
+-- action you call may appear to complete even though you provided an
+-- invalid identifier. This action will eventually report failure.
+--
+-- The specified KMS key must exist in the Region that the AMI is being
+-- copied to.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+--
+-- 'licenseSpecifications', 'importImage_licenseSpecifications' - The ARNs of the license configurations.
+--
+-- 'licenseType', 'importImage_licenseType' - The license type to be used for the Amazon Machine Image (AMI) after
+-- importing.
+--
+-- Specify @AWS@ to replace the source-system license with an Amazon Web
+-- Services license or @BYOL@ to retain the source-system license. Leaving
+-- this parameter undefined is the same as choosing @AWS@ when importing a
+-- Windows Server operating system, and the same as choosing @BYOL@ when
+-- importing a Windows client operating system (such as Windows 10) or a
+-- Linux operating system.
+--
+-- To use @BYOL@, you must have existing licenses with rights to use these
+-- licenses in a third party cloud, such as Amazon Web Services. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image Prerequisites>
+-- in the VM Import\/Export User Guide.
+--
+-- 'platform', 'importImage_platform' - The operating system of the virtual machine.
+--
+-- Valid values: @Windows@ | @Linux@
+--
+-- 'roleName', 'importImage_roleName' - The name of the role to use when not using the default role,
+-- \'vmimport\'.
+--
+-- 'tagSpecifications', 'importImage_tagSpecifications' - The tags to apply to the import image task during creation.
+--
+-- 'usageOperation', 'importImage_usageOperation' - The usage operation value. For more information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites Licensing options>
+-- in the /VM Import\/Export User Guide/.
+newImportImage ::
+  ImportImage
+newImportImage =
+  ImportImage'
+    { architecture = Prelude.Nothing,
+      bootMode = Prelude.Nothing,
+      clientData = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      diskContainers = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      hypervisor = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      licenseSpecifications = Prelude.Nothing,
+      licenseType = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      usageOperation = Prelude.Nothing
+    }
+
+-- | The architecture of the virtual machine.
+--
+-- Valid values: @i386@ | @x86_64@
+importImage_architecture :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_architecture = Lens.lens (\ImportImage' {architecture} -> architecture) (\s@ImportImage' {} a -> s {architecture = a} :: ImportImage)
+
+-- | The boot mode of the virtual machine.
+importImage_bootMode :: Lens.Lens' ImportImage (Prelude.Maybe BootModeValues)
+importImage_bootMode = Lens.lens (\ImportImage' {bootMode} -> bootMode) (\s@ImportImage' {} a -> s {bootMode = a} :: ImportImage)
+
+-- | The client-specific data.
+importImage_clientData :: Lens.Lens' ImportImage (Prelude.Maybe ClientData)
+importImage_clientData = Lens.lens (\ImportImage' {clientData} -> clientData) (\s@ImportImage' {} a -> s {clientData = a} :: ImportImage)
+
+-- | The token to enable idempotency for VM import requests.
+importImage_clientToken :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_clientToken = Lens.lens (\ImportImage' {clientToken} -> clientToken) (\s@ImportImage' {} a -> s {clientToken = a} :: ImportImage)
+
+-- | A description string for the import image task.
+importImage_description :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_description = Lens.lens (\ImportImage' {description} -> description) (\s@ImportImage' {} a -> s {description = a} :: ImportImage)
+
+-- | Information about the disk containers.
+importImage_diskContainers :: Lens.Lens' ImportImage (Prelude.Maybe [ImageDiskContainer])
+importImage_diskContainers = Lens.lens (\ImportImage' {diskContainers} -> diskContainers) (\s@ImportImage' {} a -> s {diskContainers = a} :: ImportImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+importImage_dryRun :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Bool)
+importImage_dryRun = Lens.lens (\ImportImage' {dryRun} -> dryRun) (\s@ImportImage' {} a -> s {dryRun = a} :: ImportImage)
+
+-- | Specifies whether the destination AMI of the imported image should be
+-- encrypted. The default KMS key for EBS is used unless you specify a
+-- non-default KMS key using @KmsKeyId@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+importImage_encrypted :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Bool)
+importImage_encrypted = Lens.lens (\ImportImage' {encrypted} -> encrypted) (\s@ImportImage' {} a -> s {encrypted = a} :: ImportImage)
+
+-- | The target hypervisor platform.
+--
+-- Valid values: @xen@
+importImage_hypervisor :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_hypervisor = Lens.lens (\ImportImage' {hypervisor} -> hypervisor) (\s@ImportImage' {} a -> s {hypervisor = a} :: ImportImage)
+
+-- | An identifier for the symmetric KMS key to use when creating the
+-- encrypted AMI. This parameter is only required if you want to use a
+-- non-default KMS key; if this parameter is not specified, the default KMS
+-- key for EBS is used. If a @KmsKeyId@ is specified, the @Encrypted@ flag
+-- must also be set.
+--
+-- The KMS key identifier may be provided in any of the following formats:
+--
+-- -   Key ID
+--
+-- -   Key alias. The alias ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @alias@ namespace, and then the key alias.
+--     For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- -   ARN using key ID. The ID ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @key@ namespace, and then the key ID. For
+--     example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/.
+--
+-- -   ARN using key alias. The alias ARN contains the @arn:aws:kms@
+--     namespace, followed by the Region of the key, the Amazon Web
+--     Services account ID of the key owner, the @alias@ namespace, and
+--     then the key alias. For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- Amazon Web Services parses @KmsKeyId@ asynchronously, meaning that the
+-- action you call may appear to complete even though you provided an
+-- invalid identifier. This action will eventually report failure.
+--
+-- The specified KMS key must exist in the Region that the AMI is being
+-- copied to.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+importImage_kmsKeyId :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_kmsKeyId = Lens.lens (\ImportImage' {kmsKeyId} -> kmsKeyId) (\s@ImportImage' {} a -> s {kmsKeyId = a} :: ImportImage)
+
+-- | The ARNs of the license configurations.
+importImage_licenseSpecifications :: Lens.Lens' ImportImage (Prelude.Maybe [ImportImageLicenseConfigurationRequest])
+importImage_licenseSpecifications = Lens.lens (\ImportImage' {licenseSpecifications} -> licenseSpecifications) (\s@ImportImage' {} a -> s {licenseSpecifications = a} :: ImportImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The license type to be used for the Amazon Machine Image (AMI) after
+-- importing.
+--
+-- Specify @AWS@ to replace the source-system license with an Amazon Web
+-- Services license or @BYOL@ to retain the source-system license. Leaving
+-- this parameter undefined is the same as choosing @AWS@ when importing a
+-- Windows Server operating system, and the same as choosing @BYOL@ when
+-- importing a Windows client operating system (such as Windows 10) or a
+-- Linux operating system.
+--
+-- To use @BYOL@, you must have existing licenses with rights to use these
+-- licenses in a third party cloud, such as Amazon Web Services. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image Prerequisites>
+-- in the VM Import\/Export User Guide.
+importImage_licenseType :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_licenseType = Lens.lens (\ImportImage' {licenseType} -> licenseType) (\s@ImportImage' {} a -> s {licenseType = a} :: ImportImage)
+
+-- | The operating system of the virtual machine.
+--
+-- Valid values: @Windows@ | @Linux@
+importImage_platform :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_platform = Lens.lens (\ImportImage' {platform} -> platform) (\s@ImportImage' {} a -> s {platform = a} :: ImportImage)
+
+-- | The name of the role to use when not using the default role,
+-- \'vmimport\'.
+importImage_roleName :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_roleName = Lens.lens (\ImportImage' {roleName} -> roleName) (\s@ImportImage' {} a -> s {roleName = a} :: ImportImage)
+
+-- | The tags to apply to the import image task during creation.
+importImage_tagSpecifications :: Lens.Lens' ImportImage (Prelude.Maybe [TagSpecification])
+importImage_tagSpecifications = Lens.lens (\ImportImage' {tagSpecifications} -> tagSpecifications) (\s@ImportImage' {} a -> s {tagSpecifications = a} :: ImportImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The usage operation value. For more information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#prerequisites Licensing options>
+-- in the /VM Import\/Export User Guide/.
+importImage_usageOperation :: Lens.Lens' ImportImage (Prelude.Maybe Prelude.Text)
+importImage_usageOperation = Lens.lens (\ImportImage' {usageOperation} -> usageOperation) (\s@ImportImage' {} a -> s {usageOperation = a} :: ImportImage)
+
+instance Core.AWSRequest ImportImage where
+  type AWSResponse ImportImage = ImportImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ImportImageResponse'
+            Prelude.<$> (x Data..@? "architecture")
+            Prelude.<*> (x Data..@? "description")
+            Prelude.<*> (x Data..@? "encrypted")
+            Prelude.<*> (x Data..@? "hypervisor")
+            Prelude.<*> (x Data..@? "imageId")
+            Prelude.<*> (x Data..@? "importTaskId")
+            Prelude.<*> (x Data..@? "kmsKeyId")
+            Prelude.<*> ( x
+                            Data..@? "licenseSpecifications"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "licenseType")
+            Prelude.<*> (x Data..@? "platform")
+            Prelude.<*> (x Data..@? "progress")
+            Prelude.<*> ( x
+                            Data..@? "snapshotDetailSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (x Data..@? "statusMessage")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "usageOperation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportImage where
+  hashWithSalt _salt ImportImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` clientData
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` diskContainers
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` hypervisor
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` licenseSpecifications
+      `Prelude.hashWithSalt` licenseType
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` usageOperation
+
+instance Prelude.NFData ImportImage where
+  rnf ImportImage' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf clientData
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diskContainers
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf hypervisor
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf licenseSpecifications
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf usageOperation
+
+instance Data.ToHeaders ImportImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ImportImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportImage where
+  toQuery ImportImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ImportImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Architecture" Data.=: architecture,
+        "BootMode" Data.=: bootMode,
+        "ClientData" Data.=: clientData,
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        Data.toQuery
+          ( Data.toQueryList "DiskContainer"
+              Prelude.<$> diskContainers
+          ),
+        "DryRun" Data.=: dryRun,
+        "Encrypted" Data.=: encrypted,
+        "Hypervisor" Data.=: hypervisor,
+        "KmsKeyId" Data.=: kmsKeyId,
+        Data.toQuery
+          ( Data.toQueryList "LicenseSpecifications"
+              Prelude.<$> licenseSpecifications
+          ),
+        "LicenseType" Data.=: licenseType,
+        "Platform" Data.=: platform,
+        "RoleName" Data.=: roleName,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "UsageOperation" Data.=: usageOperation
+      ]
+
+-- | /See:/ 'newImportImageResponse' smart constructor.
+data ImportImageResponse = ImportImageResponse'
+  { -- | The architecture of the virtual machine.
+    architecture :: Prelude.Maybe Prelude.Text,
+    -- | A description of the import task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the AMI is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The target hypervisor of the import task.
+    hypervisor :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Machine Image (AMI) created by the import task.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The task ID of the import image task.
+    importTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for the symmetric KMS key that was used to create the
+    -- encrypted AMI.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ARNs of the license configurations.
+    licenseSpecifications :: Prelude.Maybe [ImportImageLicenseConfigurationResponse],
+    -- | The license type of the virtual machine.
+    licenseType :: Prelude.Maybe Prelude.Text,
+    -- | The operating system of the virtual machine.
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | The progress of the task.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | Information about the snapshots.
+    snapshotDetails :: Prelude.Maybe [SnapshotDetail],
+    -- | A brief status of the task.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | A detailed status message of the import task.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the import image task.
+    tags :: Prelude.Maybe [Tag],
+    -- | The usage operation value.
+    usageOperation :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architecture', 'importImageResponse_architecture' - The architecture of the virtual machine.
+--
+-- 'description', 'importImageResponse_description' - A description of the import task.
+--
+-- 'encrypted', 'importImageResponse_encrypted' - Indicates whether the AMI is encrypted.
+--
+-- 'hypervisor', 'importImageResponse_hypervisor' - The target hypervisor of the import task.
+--
+-- 'imageId', 'importImageResponse_imageId' - The ID of the Amazon Machine Image (AMI) created by the import task.
+--
+-- 'importTaskId', 'importImageResponse_importTaskId' - The task ID of the import image task.
+--
+-- 'kmsKeyId', 'importImageResponse_kmsKeyId' - The identifier for the symmetric KMS key that was used to create the
+-- encrypted AMI.
+--
+-- 'licenseSpecifications', 'importImageResponse_licenseSpecifications' - The ARNs of the license configurations.
+--
+-- 'licenseType', 'importImageResponse_licenseType' - The license type of the virtual machine.
+--
+-- 'platform', 'importImageResponse_platform' - The operating system of the virtual machine.
+--
+-- 'progress', 'importImageResponse_progress' - The progress of the task.
+--
+-- 'snapshotDetails', 'importImageResponse_snapshotDetails' - Information about the snapshots.
+--
+-- 'status', 'importImageResponse_status' - A brief status of the task.
+--
+-- 'statusMessage', 'importImageResponse_statusMessage' - A detailed status message of the import task.
+--
+-- 'tags', 'importImageResponse_tags' - Any tags assigned to the import image task.
+--
+-- 'usageOperation', 'importImageResponse_usageOperation' - The usage operation value.
+--
+-- 'httpStatus', 'importImageResponse_httpStatus' - The response's http status code.
+newImportImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportImageResponse
+newImportImageResponse pHttpStatus_ =
+  ImportImageResponse'
+    { architecture =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      hypervisor = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      importTaskId = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      licenseSpecifications = Prelude.Nothing,
+      licenseType = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      snapshotDetails = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      usageOperation = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The architecture of the virtual machine.
+importImageResponse_architecture :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_architecture = Lens.lens (\ImportImageResponse' {architecture} -> architecture) (\s@ImportImageResponse' {} a -> s {architecture = a} :: ImportImageResponse)
+
+-- | A description of the import task.
+importImageResponse_description :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_description = Lens.lens (\ImportImageResponse' {description} -> description) (\s@ImportImageResponse' {} a -> s {description = a} :: ImportImageResponse)
+
+-- | Indicates whether the AMI is encrypted.
+importImageResponse_encrypted :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Bool)
+importImageResponse_encrypted = Lens.lens (\ImportImageResponse' {encrypted} -> encrypted) (\s@ImportImageResponse' {} a -> s {encrypted = a} :: ImportImageResponse)
+
+-- | The target hypervisor of the import task.
+importImageResponse_hypervisor :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_hypervisor = Lens.lens (\ImportImageResponse' {hypervisor} -> hypervisor) (\s@ImportImageResponse' {} a -> s {hypervisor = a} :: ImportImageResponse)
+
+-- | The ID of the Amazon Machine Image (AMI) created by the import task.
+importImageResponse_imageId :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_imageId = Lens.lens (\ImportImageResponse' {imageId} -> imageId) (\s@ImportImageResponse' {} a -> s {imageId = a} :: ImportImageResponse)
+
+-- | The task ID of the import image task.
+importImageResponse_importTaskId :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_importTaskId = Lens.lens (\ImportImageResponse' {importTaskId} -> importTaskId) (\s@ImportImageResponse' {} a -> s {importTaskId = a} :: ImportImageResponse)
+
+-- | The identifier for the symmetric KMS key that was used to create the
+-- encrypted AMI.
+importImageResponse_kmsKeyId :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_kmsKeyId = Lens.lens (\ImportImageResponse' {kmsKeyId} -> kmsKeyId) (\s@ImportImageResponse' {} a -> s {kmsKeyId = a} :: ImportImageResponse)
+
+-- | The ARNs of the license configurations.
+importImageResponse_licenseSpecifications :: Lens.Lens' ImportImageResponse (Prelude.Maybe [ImportImageLicenseConfigurationResponse])
+importImageResponse_licenseSpecifications = Lens.lens (\ImportImageResponse' {licenseSpecifications} -> licenseSpecifications) (\s@ImportImageResponse' {} a -> s {licenseSpecifications = a} :: ImportImageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The license type of the virtual machine.
+importImageResponse_licenseType :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_licenseType = Lens.lens (\ImportImageResponse' {licenseType} -> licenseType) (\s@ImportImageResponse' {} a -> s {licenseType = a} :: ImportImageResponse)
+
+-- | The operating system of the virtual machine.
+importImageResponse_platform :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_platform = Lens.lens (\ImportImageResponse' {platform} -> platform) (\s@ImportImageResponse' {} a -> s {platform = a} :: ImportImageResponse)
+
+-- | The progress of the task.
+importImageResponse_progress :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_progress = Lens.lens (\ImportImageResponse' {progress} -> progress) (\s@ImportImageResponse' {} a -> s {progress = a} :: ImportImageResponse)
+
+-- | Information about the snapshots.
+importImageResponse_snapshotDetails :: Lens.Lens' ImportImageResponse (Prelude.Maybe [SnapshotDetail])
+importImageResponse_snapshotDetails = Lens.lens (\ImportImageResponse' {snapshotDetails} -> snapshotDetails) (\s@ImportImageResponse' {} a -> s {snapshotDetails = a} :: ImportImageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | A brief status of the task.
+importImageResponse_status :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_status = Lens.lens (\ImportImageResponse' {status} -> status) (\s@ImportImageResponse' {} a -> s {status = a} :: ImportImageResponse)
+
+-- | A detailed status message of the import task.
+importImageResponse_statusMessage :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_statusMessage = Lens.lens (\ImportImageResponse' {statusMessage} -> statusMessage) (\s@ImportImageResponse' {} a -> s {statusMessage = a} :: ImportImageResponse)
+
+-- | Any tags assigned to the import image task.
+importImageResponse_tags :: Lens.Lens' ImportImageResponse (Prelude.Maybe [Tag])
+importImageResponse_tags = Lens.lens (\ImportImageResponse' {tags} -> tags) (\s@ImportImageResponse' {} a -> s {tags = a} :: ImportImageResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The usage operation value.
+importImageResponse_usageOperation :: Lens.Lens' ImportImageResponse (Prelude.Maybe Prelude.Text)
+importImageResponse_usageOperation = Lens.lens (\ImportImageResponse' {usageOperation} -> usageOperation) (\s@ImportImageResponse' {} a -> s {usageOperation = a} :: ImportImageResponse)
+
+-- | The response's http status code.
+importImageResponse_httpStatus :: Lens.Lens' ImportImageResponse Prelude.Int
+importImageResponse_httpStatus = Lens.lens (\ImportImageResponse' {httpStatus} -> httpStatus) (\s@ImportImageResponse' {} a -> s {httpStatus = a} :: ImportImageResponse)
+
+instance Prelude.NFData ImportImageResponse where
+  rnf ImportImageResponse' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf hypervisor
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf importTaskId
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf licenseSpecifications
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf snapshotDetails
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf usageOperation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ImportInstance.hs b/gen/Amazonka/EC2/ImportInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ImportInstance.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ImportInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an import instance task using metadata from the specified disk
+-- image.
+--
+-- This API action supports only single-volume VMs. To import multi-volume
+-- VMs, use ImportImage instead.
+--
+-- This API action is not supported by the Command Line Interface (CLI).
+-- For information about using the Amazon EC2 CLI, which is deprecated, see
+-- <https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#UsingVirtualMachinesinAmazonEC2 Importing a VM to Amazon EC2>
+-- in the /Amazon EC2 CLI Reference/ PDF file.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+module Amazonka.EC2.ImportInstance
+  ( -- * Creating a Request
+    ImportInstance (..),
+    newImportInstance,
+
+    -- * Request Lenses
+    importInstance_description,
+    importInstance_diskImages,
+    importInstance_dryRun,
+    importInstance_launchSpecification,
+    importInstance_platform,
+
+    -- * Destructuring the Response
+    ImportInstanceResponse (..),
+    newImportInstanceResponse,
+
+    -- * Response Lenses
+    importInstanceResponse_conversionTask,
+    importInstanceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportInstance' smart constructor.
+data ImportInstance = ImportInstance'
+  { -- | A description for the instance being imported.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The disk image.
+    diskImages :: Prelude.Maybe [DiskImage],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The launch specification.
+    launchSpecification :: Prelude.Maybe ImportInstanceLaunchSpecification,
+    -- | The instance operating system.
+    platform :: PlatformValues
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'importInstance_description' - A description for the instance being imported.
+--
+-- 'diskImages', 'importInstance_diskImages' - The disk image.
+--
+-- 'dryRun', 'importInstance_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchSpecification', 'importInstance_launchSpecification' - The launch specification.
+--
+-- 'platform', 'importInstance_platform' - The instance operating system.
+newImportInstance ::
+  -- | 'platform'
+  PlatformValues ->
+  ImportInstance
+newImportInstance pPlatform_ =
+  ImportInstance'
+    { description = Prelude.Nothing,
+      diskImages = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      launchSpecification = Prelude.Nothing,
+      platform = pPlatform_
+    }
+
+-- | A description for the instance being imported.
+importInstance_description :: Lens.Lens' ImportInstance (Prelude.Maybe Prelude.Text)
+importInstance_description = Lens.lens (\ImportInstance' {description} -> description) (\s@ImportInstance' {} a -> s {description = a} :: ImportInstance)
+
+-- | The disk image.
+importInstance_diskImages :: Lens.Lens' ImportInstance (Prelude.Maybe [DiskImage])
+importInstance_diskImages = Lens.lens (\ImportInstance' {diskImages} -> diskImages) (\s@ImportInstance' {} a -> s {diskImages = a} :: ImportInstance) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+importInstance_dryRun :: Lens.Lens' ImportInstance (Prelude.Maybe Prelude.Bool)
+importInstance_dryRun = Lens.lens (\ImportInstance' {dryRun} -> dryRun) (\s@ImportInstance' {} a -> s {dryRun = a} :: ImportInstance)
+
+-- | The launch specification.
+importInstance_launchSpecification :: Lens.Lens' ImportInstance (Prelude.Maybe ImportInstanceLaunchSpecification)
+importInstance_launchSpecification = Lens.lens (\ImportInstance' {launchSpecification} -> launchSpecification) (\s@ImportInstance' {} a -> s {launchSpecification = a} :: ImportInstance)
+
+-- | The instance operating system.
+importInstance_platform :: Lens.Lens' ImportInstance PlatformValues
+importInstance_platform = Lens.lens (\ImportInstance' {platform} -> platform) (\s@ImportInstance' {} a -> s {platform = a} :: ImportInstance)
+
+instance Core.AWSRequest ImportInstance where
+  type
+    AWSResponse ImportInstance =
+      ImportInstanceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ImportInstanceResponse'
+            Prelude.<$> (x Data..@? "conversionTask")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportInstance where
+  hashWithSalt _salt ImportInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` diskImages
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchSpecification
+      `Prelude.hashWithSalt` platform
+
+instance Prelude.NFData ImportInstance where
+  rnf ImportInstance' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diskImages
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchSpecification
+      `Prelude.seq` Prelude.rnf platform
+
+instance Data.ToHeaders ImportInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ImportInstance where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportInstance where
+  toQuery ImportInstance' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ImportInstance" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        Data.toQuery
+          ( Data.toQueryList "DiskImage"
+              Prelude.<$> diskImages
+          ),
+        "DryRun" Data.=: dryRun,
+        "LaunchSpecification" Data.=: launchSpecification,
+        "Platform" Data.=: platform
+      ]
+
+-- | /See:/ 'newImportInstanceResponse' smart constructor.
+data ImportInstanceResponse = ImportInstanceResponse'
+  { -- | Information about the conversion task.
+    conversionTask :: Prelude.Maybe ConversionTask,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conversionTask', 'importInstanceResponse_conversionTask' - Information about the conversion task.
+--
+-- 'httpStatus', 'importInstanceResponse_httpStatus' - The response's http status code.
+newImportInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportInstanceResponse
+newImportInstanceResponse pHttpStatus_ =
+  ImportInstanceResponse'
+    { conversionTask =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the conversion task.
+importInstanceResponse_conversionTask :: Lens.Lens' ImportInstanceResponse (Prelude.Maybe ConversionTask)
+importInstanceResponse_conversionTask = Lens.lens (\ImportInstanceResponse' {conversionTask} -> conversionTask) (\s@ImportInstanceResponse' {} a -> s {conversionTask = a} :: ImportInstanceResponse)
+
+-- | The response's http status code.
+importInstanceResponse_httpStatus :: Lens.Lens' ImportInstanceResponse Prelude.Int
+importInstanceResponse_httpStatus = Lens.lens (\ImportInstanceResponse' {httpStatus} -> httpStatus) (\s@ImportInstanceResponse' {} a -> s {httpStatus = a} :: ImportInstanceResponse)
+
+instance Prelude.NFData ImportInstanceResponse where
+  rnf ImportInstanceResponse' {..} =
+    Prelude.rnf conversionTask
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ImportKeyPair.hs b/gen/Amazonka/EC2/ImportKeyPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ImportKeyPair.hs
@@ -0,0 +1,290 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ImportKeyPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports the public key from an RSA or ED25519 key pair that you created
+-- with a third-party tool. Compare this with CreateKeyPair, in which
+-- Amazon Web Services creates the key pair and gives the keys to you
+-- (Amazon Web Services keeps a copy of the public key). With
+-- ImportKeyPair, you create the key pair and give Amazon Web Services just
+-- the public key. The private key is never transferred between you and
+-- Amazon Web Services.
+--
+-- For more information about key pairs, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Amazon EC2 key pairs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ImportKeyPair
+  ( -- * Creating a Request
+    ImportKeyPair (..),
+    newImportKeyPair,
+
+    -- * Request Lenses
+    importKeyPair_dryRun,
+    importKeyPair_tagSpecifications,
+    importKeyPair_keyName,
+    importKeyPair_publicKeyMaterial,
+
+    -- * Destructuring the Response
+    ImportKeyPairResponse (..),
+    newImportKeyPairResponse,
+
+    -- * Response Lenses
+    importKeyPairResponse_keyFingerprint,
+    importKeyPairResponse_keyName,
+    importKeyPairResponse_keyPairId,
+    importKeyPairResponse_tags,
+    importKeyPairResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportKeyPair' smart constructor.
+data ImportKeyPair = ImportKeyPair'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the imported key pair.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | A unique name for the key pair.
+    keyName :: Prelude.Text,
+    -- | The public key. For API calls, the text must be base64-encoded. For
+    -- command line tools, base64 encoding is performed for you.
+    publicKeyMaterial :: Data.Base64
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportKeyPair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'importKeyPair_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'importKeyPair_tagSpecifications' - The tags to apply to the imported key pair.
+--
+-- 'keyName', 'importKeyPair_keyName' - A unique name for the key pair.
+--
+-- 'publicKeyMaterial', 'importKeyPair_publicKeyMaterial' - The public key. For API calls, the text must be base64-encoded. For
+-- command line tools, base64 encoding is performed for you.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+newImportKeyPair ::
+  -- | 'keyName'
+  Prelude.Text ->
+  -- | 'publicKeyMaterial'
+  Prelude.ByteString ->
+  ImportKeyPair
+newImportKeyPair pKeyName_ pPublicKeyMaterial_ =
+  ImportKeyPair'
+    { dryRun = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      keyName = pKeyName_,
+      publicKeyMaterial =
+        Data._Base64 Lens.# pPublicKeyMaterial_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+importKeyPair_dryRun :: Lens.Lens' ImportKeyPair (Prelude.Maybe Prelude.Bool)
+importKeyPair_dryRun = Lens.lens (\ImportKeyPair' {dryRun} -> dryRun) (\s@ImportKeyPair' {} a -> s {dryRun = a} :: ImportKeyPair)
+
+-- | The tags to apply to the imported key pair.
+importKeyPair_tagSpecifications :: Lens.Lens' ImportKeyPair (Prelude.Maybe [TagSpecification])
+importKeyPair_tagSpecifications = Lens.lens (\ImportKeyPair' {tagSpecifications} -> tagSpecifications) (\s@ImportKeyPair' {} a -> s {tagSpecifications = a} :: ImportKeyPair) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique name for the key pair.
+importKeyPair_keyName :: Lens.Lens' ImportKeyPair Prelude.Text
+importKeyPair_keyName = Lens.lens (\ImportKeyPair' {keyName} -> keyName) (\s@ImportKeyPair' {} a -> s {keyName = a} :: ImportKeyPair)
+
+-- | The public key. For API calls, the text must be base64-encoded. For
+-- command line tools, base64 encoding is performed for you.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+importKeyPair_publicKeyMaterial :: Lens.Lens' ImportKeyPair Prelude.ByteString
+importKeyPair_publicKeyMaterial = Lens.lens (\ImportKeyPair' {publicKeyMaterial} -> publicKeyMaterial) (\s@ImportKeyPair' {} a -> s {publicKeyMaterial = a} :: ImportKeyPair) Prelude.. Data._Base64
+
+instance Core.AWSRequest ImportKeyPair where
+  type
+    AWSResponse ImportKeyPair =
+      ImportKeyPairResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ImportKeyPairResponse'
+            Prelude.<$> (x Data..@? "keyFingerprint")
+            Prelude.<*> (x Data..@? "keyName")
+            Prelude.<*> (x Data..@? "keyPairId")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportKeyPair where
+  hashWithSalt _salt ImportKeyPair' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` publicKeyMaterial
+
+instance Prelude.NFData ImportKeyPair where
+  rnf ImportKeyPair' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf publicKeyMaterial
+
+instance Data.ToHeaders ImportKeyPair where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ImportKeyPair where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportKeyPair where
+  toQuery ImportKeyPair' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ImportKeyPair" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "KeyName" Data.=: keyName,
+        "PublicKeyMaterial" Data.=: publicKeyMaterial
+      ]
+
+-- | /See:/ 'newImportKeyPairResponse' smart constructor.
+data ImportKeyPairResponse = ImportKeyPairResponse'
+  { -- | -   For RSA key pairs, the key fingerprint is the MD5 public key
+    --     fingerprint as specified in section 4 of RFC 4716.
+    --
+    -- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+    --     SHA-256 digest, which is the default for OpenSSH, starting with
+    --     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+    keyFingerprint :: Prelude.Maybe Prelude.Text,
+    -- | The key pair name that you provided.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the resulting key pair.
+    keyPairId :: Prelude.Maybe Prelude.Text,
+    -- | The tags applied to the imported key pair.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportKeyPairResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'keyFingerprint', 'importKeyPairResponse_keyFingerprint' - -   For RSA key pairs, the key fingerprint is the MD5 public key
+--     fingerprint as specified in section 4 of RFC 4716.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+--
+-- 'keyName', 'importKeyPairResponse_keyName' - The key pair name that you provided.
+--
+-- 'keyPairId', 'importKeyPairResponse_keyPairId' - The ID of the resulting key pair.
+--
+-- 'tags', 'importKeyPairResponse_tags' - The tags applied to the imported key pair.
+--
+-- 'httpStatus', 'importKeyPairResponse_httpStatus' - The response's http status code.
+newImportKeyPairResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportKeyPairResponse
+newImportKeyPairResponse pHttpStatus_ =
+  ImportKeyPairResponse'
+    { keyFingerprint =
+        Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      keyPairId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | -   For RSA key pairs, the key fingerprint is the MD5 public key
+--     fingerprint as specified in section 4 of RFC 4716.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+importKeyPairResponse_keyFingerprint :: Lens.Lens' ImportKeyPairResponse (Prelude.Maybe Prelude.Text)
+importKeyPairResponse_keyFingerprint = Lens.lens (\ImportKeyPairResponse' {keyFingerprint} -> keyFingerprint) (\s@ImportKeyPairResponse' {} a -> s {keyFingerprint = a} :: ImportKeyPairResponse)
+
+-- | The key pair name that you provided.
+importKeyPairResponse_keyName :: Lens.Lens' ImportKeyPairResponse (Prelude.Maybe Prelude.Text)
+importKeyPairResponse_keyName = Lens.lens (\ImportKeyPairResponse' {keyName} -> keyName) (\s@ImportKeyPairResponse' {} a -> s {keyName = a} :: ImportKeyPairResponse)
+
+-- | The ID of the resulting key pair.
+importKeyPairResponse_keyPairId :: Lens.Lens' ImportKeyPairResponse (Prelude.Maybe Prelude.Text)
+importKeyPairResponse_keyPairId = Lens.lens (\ImportKeyPairResponse' {keyPairId} -> keyPairId) (\s@ImportKeyPairResponse' {} a -> s {keyPairId = a} :: ImportKeyPairResponse)
+
+-- | The tags applied to the imported key pair.
+importKeyPairResponse_tags :: Lens.Lens' ImportKeyPairResponse (Prelude.Maybe [Tag])
+importKeyPairResponse_tags = Lens.lens (\ImportKeyPairResponse' {tags} -> tags) (\s@ImportKeyPairResponse' {} a -> s {tags = a} :: ImportKeyPairResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+importKeyPairResponse_httpStatus :: Lens.Lens' ImportKeyPairResponse Prelude.Int
+importKeyPairResponse_httpStatus = Lens.lens (\ImportKeyPairResponse' {httpStatus} -> httpStatus) (\s@ImportKeyPairResponse' {} a -> s {httpStatus = a} :: ImportKeyPairResponse)
+
+instance Prelude.NFData ImportKeyPairResponse where
+  rnf ImportKeyPairResponse' {..} =
+    Prelude.rnf keyFingerprint
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf keyPairId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ImportSnapshot.hs b/gen/Amazonka/EC2/ImportSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ImportSnapshot.hs
@@ -0,0 +1,438 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ImportSnapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports a disk into an EBS snapshot.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-import-snapshot.html Importing a disk as a snapshot using VM Import\/Export>
+-- in the /VM Import\/Export User Guide/.
+module Amazonka.EC2.ImportSnapshot
+  ( -- * Creating a Request
+    ImportSnapshot (..),
+    newImportSnapshot,
+
+    -- * Request Lenses
+    importSnapshot_clientData,
+    importSnapshot_clientToken,
+    importSnapshot_description,
+    importSnapshot_diskContainer,
+    importSnapshot_dryRun,
+    importSnapshot_encrypted,
+    importSnapshot_kmsKeyId,
+    importSnapshot_roleName,
+    importSnapshot_tagSpecifications,
+
+    -- * Destructuring the Response
+    ImportSnapshotResponse (..),
+    newImportSnapshotResponse,
+
+    -- * Response Lenses
+    importSnapshotResponse_description,
+    importSnapshotResponse_importTaskId,
+    importSnapshotResponse_snapshotTaskDetail,
+    importSnapshotResponse_tags,
+    importSnapshotResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportSnapshot' smart constructor.
+data ImportSnapshot = ImportSnapshot'
+  { -- | The client-specific data.
+    clientData :: Prelude.Maybe ClientData,
+    -- | Token to enable idempotency for VM import requests.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description string for the import snapshot task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about the disk container.
+    diskContainer :: Prelude.Maybe SnapshotDiskContainer,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the destination snapshot of the imported image should
+    -- be encrypted. The default KMS key for EBS is used unless you specify a
+    -- non-default KMS key using @KmsKeyId@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | An identifier for the symmetric KMS key to use when creating the
+    -- encrypted snapshot. This parameter is only required if you want to use a
+    -- non-default KMS key; if this parameter is not specified, the default KMS
+    -- key for EBS is used. If a @KmsKeyId@ is specified, the @Encrypted@ flag
+    -- must also be set.
+    --
+    -- The KMS key identifier may be provided in any of the following formats:
+    --
+    -- -   Key ID
+    --
+    -- -   Key alias. The alias ARN contains the @arn:aws:kms@ namespace,
+    --     followed by the Region of the key, the Amazon Web Services account
+    --     ID of the key owner, the @alias@ namespace, and then the key alias.
+    --     For example,
+    --     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+    --
+    -- -   ARN using key ID. The ID ARN contains the @arn:aws:kms@ namespace,
+    --     followed by the Region of the key, the Amazon Web Services account
+    --     ID of the key owner, the @key@ namespace, and then the key ID. For
+    --     example,
+    --     arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/.
+    --
+    -- -   ARN using key alias. The alias ARN contains the @arn:aws:kms@
+    --     namespace, followed by the Region of the key, the Amazon Web
+    --     Services account ID of the key owner, the @alias@ namespace, and
+    --     then the key alias. For example,
+    --     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+    --
+    -- Amazon Web Services parses @KmsKeyId@ asynchronously, meaning that the
+    -- action you call may appear to complete even though you provided an
+    -- invalid identifier. This action will eventually report failure.
+    --
+    -- The specified KMS key must exist in the Region that the snapshot is
+    -- being copied to.
+    --
+    -- Amazon EBS does not support asymmetric KMS keys.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the role to use when not using the default role,
+    -- \'vmimport\'.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the import snapshot task during creation.
+    tagSpecifications :: Prelude.Maybe [TagSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSnapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientData', 'importSnapshot_clientData' - The client-specific data.
+--
+-- 'clientToken', 'importSnapshot_clientToken' - Token to enable idempotency for VM import requests.
+--
+-- 'description', 'importSnapshot_description' - The description string for the import snapshot task.
+--
+-- 'diskContainer', 'importSnapshot_diskContainer' - Information about the disk container.
+--
+-- 'dryRun', 'importSnapshot_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'encrypted', 'importSnapshot_encrypted' - Specifies whether the destination snapshot of the imported image should
+-- be encrypted. The default KMS key for EBS is used unless you specify a
+-- non-default KMS key using @KmsKeyId@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'kmsKeyId', 'importSnapshot_kmsKeyId' - An identifier for the symmetric KMS key to use when creating the
+-- encrypted snapshot. This parameter is only required if you want to use a
+-- non-default KMS key; if this parameter is not specified, the default KMS
+-- key for EBS is used. If a @KmsKeyId@ is specified, the @Encrypted@ flag
+-- must also be set.
+--
+-- The KMS key identifier may be provided in any of the following formats:
+--
+-- -   Key ID
+--
+-- -   Key alias. The alias ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @alias@ namespace, and then the key alias.
+--     For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- -   ARN using key ID. The ID ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @key@ namespace, and then the key ID. For
+--     example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/.
+--
+-- -   ARN using key alias. The alias ARN contains the @arn:aws:kms@
+--     namespace, followed by the Region of the key, the Amazon Web
+--     Services account ID of the key owner, the @alias@ namespace, and
+--     then the key alias. For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- Amazon Web Services parses @KmsKeyId@ asynchronously, meaning that the
+-- action you call may appear to complete even though you provided an
+-- invalid identifier. This action will eventually report failure.
+--
+-- The specified KMS key must exist in the Region that the snapshot is
+-- being copied to.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+--
+-- 'roleName', 'importSnapshot_roleName' - The name of the role to use when not using the default role,
+-- \'vmimport\'.
+--
+-- 'tagSpecifications', 'importSnapshot_tagSpecifications' - The tags to apply to the import snapshot task during creation.
+newImportSnapshot ::
+  ImportSnapshot
+newImportSnapshot =
+  ImportSnapshot'
+    { clientData = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      diskContainer = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing
+    }
+
+-- | The client-specific data.
+importSnapshot_clientData :: Lens.Lens' ImportSnapshot (Prelude.Maybe ClientData)
+importSnapshot_clientData = Lens.lens (\ImportSnapshot' {clientData} -> clientData) (\s@ImportSnapshot' {} a -> s {clientData = a} :: ImportSnapshot)
+
+-- | Token to enable idempotency for VM import requests.
+importSnapshot_clientToken :: Lens.Lens' ImportSnapshot (Prelude.Maybe Prelude.Text)
+importSnapshot_clientToken = Lens.lens (\ImportSnapshot' {clientToken} -> clientToken) (\s@ImportSnapshot' {} a -> s {clientToken = a} :: ImportSnapshot)
+
+-- | The description string for the import snapshot task.
+importSnapshot_description :: Lens.Lens' ImportSnapshot (Prelude.Maybe Prelude.Text)
+importSnapshot_description = Lens.lens (\ImportSnapshot' {description} -> description) (\s@ImportSnapshot' {} a -> s {description = a} :: ImportSnapshot)
+
+-- | Information about the disk container.
+importSnapshot_diskContainer :: Lens.Lens' ImportSnapshot (Prelude.Maybe SnapshotDiskContainer)
+importSnapshot_diskContainer = Lens.lens (\ImportSnapshot' {diskContainer} -> diskContainer) (\s@ImportSnapshot' {} a -> s {diskContainer = a} :: ImportSnapshot)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+importSnapshot_dryRun :: Lens.Lens' ImportSnapshot (Prelude.Maybe Prelude.Bool)
+importSnapshot_dryRun = Lens.lens (\ImportSnapshot' {dryRun} -> dryRun) (\s@ImportSnapshot' {} a -> s {dryRun = a} :: ImportSnapshot)
+
+-- | Specifies whether the destination snapshot of the imported image should
+-- be encrypted. The default KMS key for EBS is used unless you specify a
+-- non-default KMS key using @KmsKeyId@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+importSnapshot_encrypted :: Lens.Lens' ImportSnapshot (Prelude.Maybe Prelude.Bool)
+importSnapshot_encrypted = Lens.lens (\ImportSnapshot' {encrypted} -> encrypted) (\s@ImportSnapshot' {} a -> s {encrypted = a} :: ImportSnapshot)
+
+-- | An identifier for the symmetric KMS key to use when creating the
+-- encrypted snapshot. This parameter is only required if you want to use a
+-- non-default KMS key; if this parameter is not specified, the default KMS
+-- key for EBS is used. If a @KmsKeyId@ is specified, the @Encrypted@ flag
+-- must also be set.
+--
+-- The KMS key identifier may be provided in any of the following formats:
+--
+-- -   Key ID
+--
+-- -   Key alias. The alias ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @alias@ namespace, and then the key alias.
+--     For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- -   ARN using key ID. The ID ARN contains the @arn:aws:kms@ namespace,
+--     followed by the Region of the key, the Amazon Web Services account
+--     ID of the key owner, the @key@ namespace, and then the key ID. For
+--     example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:key\//abcd1234-a123-456a-a12b-a123b4cd56ef/.
+--
+-- -   ARN using key alias. The alias ARN contains the @arn:aws:kms@
+--     namespace, followed by the Region of the key, the Amazon Web
+--     Services account ID of the key owner, the @alias@ namespace, and
+--     then the key alias. For example,
+--     arn:aws:kms:/us-east-1/:/012345678910/:alias\//ExampleAlias/.
+--
+-- Amazon Web Services parses @KmsKeyId@ asynchronously, meaning that the
+-- action you call may appear to complete even though you provided an
+-- invalid identifier. This action will eventually report failure.
+--
+-- The specified KMS key must exist in the Region that the snapshot is
+-- being copied to.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+importSnapshot_kmsKeyId :: Lens.Lens' ImportSnapshot (Prelude.Maybe Prelude.Text)
+importSnapshot_kmsKeyId = Lens.lens (\ImportSnapshot' {kmsKeyId} -> kmsKeyId) (\s@ImportSnapshot' {} a -> s {kmsKeyId = a} :: ImportSnapshot)
+
+-- | The name of the role to use when not using the default role,
+-- \'vmimport\'.
+importSnapshot_roleName :: Lens.Lens' ImportSnapshot (Prelude.Maybe Prelude.Text)
+importSnapshot_roleName = Lens.lens (\ImportSnapshot' {roleName} -> roleName) (\s@ImportSnapshot' {} a -> s {roleName = a} :: ImportSnapshot)
+
+-- | The tags to apply to the import snapshot task during creation.
+importSnapshot_tagSpecifications :: Lens.Lens' ImportSnapshot (Prelude.Maybe [TagSpecification])
+importSnapshot_tagSpecifications = Lens.lens (\ImportSnapshot' {tagSpecifications} -> tagSpecifications) (\s@ImportSnapshot' {} a -> s {tagSpecifications = a} :: ImportSnapshot) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest ImportSnapshot where
+  type
+    AWSResponse ImportSnapshot =
+      ImportSnapshotResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ImportSnapshotResponse'
+            Prelude.<$> (x Data..@? "description")
+            Prelude.<*> (x Data..@? "importTaskId")
+            Prelude.<*> (x Data..@? "snapshotTaskDetail")
+            Prelude.<*> ( x
+                            Data..@? "tagSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportSnapshot where
+  hashWithSalt _salt ImportSnapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientData
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` diskContainer
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` tagSpecifications
+
+instance Prelude.NFData ImportSnapshot where
+  rnf ImportSnapshot' {..} =
+    Prelude.rnf clientData
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diskContainer
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf tagSpecifications
+
+instance Data.ToHeaders ImportSnapshot where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ImportSnapshot where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportSnapshot where
+  toQuery ImportSnapshot' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ImportSnapshot" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientData" Data.=: clientData,
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DiskContainer" Data.=: diskContainer,
+        "DryRun" Data.=: dryRun,
+        "Encrypted" Data.=: encrypted,
+        "KmsKeyId" Data.=: kmsKeyId,
+        "RoleName" Data.=: roleName,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          )
+      ]
+
+-- | /See:/ 'newImportSnapshotResponse' smart constructor.
+data ImportSnapshotResponse = ImportSnapshotResponse'
+  { -- | A description of the import snapshot task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the import snapshot task.
+    importTaskId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the import snapshot task.
+    snapshotTaskDetail :: Prelude.Maybe SnapshotTaskDetail,
+    -- | Any tags assigned to the import snapshot task.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSnapshotResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'importSnapshotResponse_description' - A description of the import snapshot task.
+--
+-- 'importTaskId', 'importSnapshotResponse_importTaskId' - The ID of the import snapshot task.
+--
+-- 'snapshotTaskDetail', 'importSnapshotResponse_snapshotTaskDetail' - Information about the import snapshot task.
+--
+-- 'tags', 'importSnapshotResponse_tags' - Any tags assigned to the import snapshot task.
+--
+-- 'httpStatus', 'importSnapshotResponse_httpStatus' - The response's http status code.
+newImportSnapshotResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportSnapshotResponse
+newImportSnapshotResponse pHttpStatus_ =
+  ImportSnapshotResponse'
+    { description =
+        Prelude.Nothing,
+      importTaskId = Prelude.Nothing,
+      snapshotTaskDetail = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A description of the import snapshot task.
+importSnapshotResponse_description :: Lens.Lens' ImportSnapshotResponse (Prelude.Maybe Prelude.Text)
+importSnapshotResponse_description = Lens.lens (\ImportSnapshotResponse' {description} -> description) (\s@ImportSnapshotResponse' {} a -> s {description = a} :: ImportSnapshotResponse)
+
+-- | The ID of the import snapshot task.
+importSnapshotResponse_importTaskId :: Lens.Lens' ImportSnapshotResponse (Prelude.Maybe Prelude.Text)
+importSnapshotResponse_importTaskId = Lens.lens (\ImportSnapshotResponse' {importTaskId} -> importTaskId) (\s@ImportSnapshotResponse' {} a -> s {importTaskId = a} :: ImportSnapshotResponse)
+
+-- | Information about the import snapshot task.
+importSnapshotResponse_snapshotTaskDetail :: Lens.Lens' ImportSnapshotResponse (Prelude.Maybe SnapshotTaskDetail)
+importSnapshotResponse_snapshotTaskDetail = Lens.lens (\ImportSnapshotResponse' {snapshotTaskDetail} -> snapshotTaskDetail) (\s@ImportSnapshotResponse' {} a -> s {snapshotTaskDetail = a} :: ImportSnapshotResponse)
+
+-- | Any tags assigned to the import snapshot task.
+importSnapshotResponse_tags :: Lens.Lens' ImportSnapshotResponse (Prelude.Maybe [Tag])
+importSnapshotResponse_tags = Lens.lens (\ImportSnapshotResponse' {tags} -> tags) (\s@ImportSnapshotResponse' {} a -> s {tags = a} :: ImportSnapshotResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+importSnapshotResponse_httpStatus :: Lens.Lens' ImportSnapshotResponse Prelude.Int
+importSnapshotResponse_httpStatus = Lens.lens (\ImportSnapshotResponse' {httpStatus} -> httpStatus) (\s@ImportSnapshotResponse' {} a -> s {httpStatus = a} :: ImportSnapshotResponse)
+
+instance Prelude.NFData ImportSnapshotResponse where
+  rnf ImportSnapshotResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf importTaskId
+      `Prelude.seq` Prelude.rnf snapshotTaskDetail
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ImportVolume.hs b/gen/Amazonka/EC2/ImportVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ImportVolume.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ImportVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an import volume task using metadata from the specified disk
+-- image.
+--
+-- This API action supports only single-volume VMs. To import multi-volume
+-- VMs, use ImportImage instead. To import a disk to a snapshot, use
+-- ImportSnapshot instead.
+--
+-- This API action is not supported by the Command Line Interface (CLI).
+-- For information about using the Amazon EC2 CLI, which is deprecated, see
+-- <https://awsdocs.s3.amazonaws.com/EC2/ec2-clt.pdf#importing-your-volumes-into-amazon-ebs Importing Disks to Amazon EBS>
+-- in the /Amazon EC2 CLI Reference/ PDF file.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+module Amazonka.EC2.ImportVolume
+  ( -- * Creating a Request
+    ImportVolume (..),
+    newImportVolume,
+
+    -- * Request Lenses
+    importVolume_description,
+    importVolume_dryRun,
+    importVolume_availabilityZone,
+    importVolume_image,
+    importVolume_volume,
+
+    -- * Destructuring the Response
+    ImportVolumeResponse (..),
+    newImportVolumeResponse,
+
+    -- * Response Lenses
+    importVolumeResponse_conversionTask,
+    importVolumeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newImportVolume' smart constructor.
+data ImportVolume = ImportVolume'
+  { -- | A description of the volume.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Availability Zone for the resulting EBS volume.
+    availabilityZone :: Prelude.Text,
+    -- | The disk image.
+    image :: DiskImageDetail,
+    -- | The volume size.
+    volume :: VolumeDetail
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'importVolume_description' - A description of the volume.
+--
+-- 'dryRun', 'importVolume_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'availabilityZone', 'importVolume_availabilityZone' - The Availability Zone for the resulting EBS volume.
+--
+-- 'image', 'importVolume_image' - The disk image.
+--
+-- 'volume', 'importVolume_volume' - The volume size.
+newImportVolume ::
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  -- | 'image'
+  DiskImageDetail ->
+  -- | 'volume'
+  VolumeDetail ->
+  ImportVolume
+newImportVolume pAvailabilityZone_ pImage_ pVolume_ =
+  ImportVolume'
+    { description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      availabilityZone = pAvailabilityZone_,
+      image = pImage_,
+      volume = pVolume_
+    }
+
+-- | A description of the volume.
+importVolume_description :: Lens.Lens' ImportVolume (Prelude.Maybe Prelude.Text)
+importVolume_description = Lens.lens (\ImportVolume' {description} -> description) (\s@ImportVolume' {} a -> s {description = a} :: ImportVolume)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+importVolume_dryRun :: Lens.Lens' ImportVolume (Prelude.Maybe Prelude.Bool)
+importVolume_dryRun = Lens.lens (\ImportVolume' {dryRun} -> dryRun) (\s@ImportVolume' {} a -> s {dryRun = a} :: ImportVolume)
+
+-- | The Availability Zone for the resulting EBS volume.
+importVolume_availabilityZone :: Lens.Lens' ImportVolume Prelude.Text
+importVolume_availabilityZone = Lens.lens (\ImportVolume' {availabilityZone} -> availabilityZone) (\s@ImportVolume' {} a -> s {availabilityZone = a} :: ImportVolume)
+
+-- | The disk image.
+importVolume_image :: Lens.Lens' ImportVolume DiskImageDetail
+importVolume_image = Lens.lens (\ImportVolume' {image} -> image) (\s@ImportVolume' {} a -> s {image = a} :: ImportVolume)
+
+-- | The volume size.
+importVolume_volume :: Lens.Lens' ImportVolume VolumeDetail
+importVolume_volume = Lens.lens (\ImportVolume' {volume} -> volume) (\s@ImportVolume' {} a -> s {volume = a} :: ImportVolume)
+
+instance Core.AWSRequest ImportVolume where
+  type AWSResponse ImportVolume = ImportVolumeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ImportVolumeResponse'
+            Prelude.<$> (x Data..@? "conversionTask")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportVolume where
+  hashWithSalt _salt ImportVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` image
+      `Prelude.hashWithSalt` volume
+
+instance Prelude.NFData ImportVolume where
+  rnf ImportVolume' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf image
+      `Prelude.seq` Prelude.rnf volume
+
+instance Data.ToHeaders ImportVolume where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ImportVolume where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportVolume where
+  toQuery ImportVolume' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ImportVolume" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "AvailabilityZone" Data.=: availabilityZone,
+        "Image" Data.=: image,
+        "Volume" Data.=: volume
+      ]
+
+-- | /See:/ 'newImportVolumeResponse' smart constructor.
+data ImportVolumeResponse = ImportVolumeResponse'
+  { -- | Information about the conversion task.
+    conversionTask :: Prelude.Maybe ConversionTask,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportVolumeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conversionTask', 'importVolumeResponse_conversionTask' - Information about the conversion task.
+--
+-- 'httpStatus', 'importVolumeResponse_httpStatus' - The response's http status code.
+newImportVolumeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportVolumeResponse
+newImportVolumeResponse pHttpStatus_ =
+  ImportVolumeResponse'
+    { conversionTask =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the conversion task.
+importVolumeResponse_conversionTask :: Lens.Lens' ImportVolumeResponse (Prelude.Maybe ConversionTask)
+importVolumeResponse_conversionTask = Lens.lens (\ImportVolumeResponse' {conversionTask} -> conversionTask) (\s@ImportVolumeResponse' {} a -> s {conversionTask = a} :: ImportVolumeResponse)
+
+-- | The response's http status code.
+importVolumeResponse_httpStatus :: Lens.Lens' ImportVolumeResponse Prelude.Int
+importVolumeResponse_httpStatus = Lens.lens (\ImportVolumeResponse' {httpStatus} -> httpStatus) (\s@ImportVolumeResponse' {} a -> s {httpStatus = a} :: ImportVolumeResponse)
+
+instance Prelude.NFData ImportVolumeResponse where
+  rnf ImportVolumeResponse' {..} =
+    Prelude.rnf conversionTask
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/Lens.hs b/gen/Amazonka/EC2/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Lens.hs
@@ -0,0 +1,11235 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Lens
+  ( -- * Operations
+
+    -- ** AcceptAddressTransfer
+    acceptAddressTransfer_dryRun,
+    acceptAddressTransfer_tagSpecifications,
+    acceptAddressTransfer_address,
+    acceptAddressTransferResponse_addressTransfer,
+    acceptAddressTransferResponse_httpStatus,
+
+    -- ** AcceptReservedInstancesExchangeQuote
+    acceptReservedInstancesExchangeQuote_dryRun,
+    acceptReservedInstancesExchangeQuote_targetConfigurations,
+    acceptReservedInstancesExchangeQuote_reservedInstanceIds,
+    acceptReservedInstancesExchangeQuoteResponse_exchangeId,
+    acceptReservedInstancesExchangeQuoteResponse_httpStatus,
+
+    -- ** AcceptTransitGatewayMulticastDomainAssociations
+    acceptTransitGatewayMulticastDomainAssociations_dryRun,
+    acceptTransitGatewayMulticastDomainAssociations_subnetIds,
+    acceptTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId,
+    acceptTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+    acceptTransitGatewayMulticastDomainAssociationsResponse_associations,
+    acceptTransitGatewayMulticastDomainAssociationsResponse_httpStatus,
+
+    -- ** AcceptTransitGatewayPeeringAttachment
+    acceptTransitGatewayPeeringAttachment_dryRun,
+    acceptTransitGatewayPeeringAttachment_transitGatewayAttachmentId,
+    acceptTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    acceptTransitGatewayPeeringAttachmentResponse_httpStatus,
+
+    -- ** AcceptTransitGatewayVpcAttachment
+    acceptTransitGatewayVpcAttachment_dryRun,
+    acceptTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+    acceptTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    acceptTransitGatewayVpcAttachmentResponse_httpStatus,
+
+    -- ** AcceptVpcEndpointConnections
+    acceptVpcEndpointConnections_dryRun,
+    acceptVpcEndpointConnections_serviceId,
+    acceptVpcEndpointConnections_vpcEndpointIds,
+    acceptVpcEndpointConnectionsResponse_unsuccessful,
+    acceptVpcEndpointConnectionsResponse_httpStatus,
+
+    -- ** AcceptVpcPeeringConnection
+    acceptVpcPeeringConnection_dryRun,
+    acceptVpcPeeringConnection_vpcPeeringConnectionId,
+    acceptVpcPeeringConnectionResponse_vpcPeeringConnection,
+    acceptVpcPeeringConnectionResponse_httpStatus,
+
+    -- ** AdvertiseByoipCidr
+    advertiseByoipCidr_dryRun,
+    advertiseByoipCidr_cidr,
+    advertiseByoipCidrResponse_byoipCidr,
+    advertiseByoipCidrResponse_httpStatus,
+
+    -- ** AllocateAddress
+    allocateAddress_address,
+    allocateAddress_customerOwnedIpv4Pool,
+    allocateAddress_domain,
+    allocateAddress_dryRun,
+    allocateAddress_networkBorderGroup,
+    allocateAddress_publicIpv4Pool,
+    allocateAddress_tagSpecifications,
+    allocateAddressResponse_allocationId,
+    allocateAddressResponse_carrierIp,
+    allocateAddressResponse_customerOwnedIp,
+    allocateAddressResponse_customerOwnedIpv4Pool,
+    allocateAddressResponse_domain,
+    allocateAddressResponse_networkBorderGroup,
+    allocateAddressResponse_publicIp,
+    allocateAddressResponse_publicIpv4Pool,
+    allocateAddressResponse_httpStatus,
+
+    -- ** AllocateHosts
+    allocateHosts_autoPlacement,
+    allocateHosts_clientToken,
+    allocateHosts_hostRecovery,
+    allocateHosts_instanceFamily,
+    allocateHosts_instanceType,
+    allocateHosts_outpostArn,
+    allocateHosts_tagSpecifications,
+    allocateHosts_availabilityZone,
+    allocateHosts_quantity,
+    allocateHostsResponse_hostIds,
+    allocateHostsResponse_httpStatus,
+
+    -- ** AllocateIpamPoolCidr
+    allocateIpamPoolCidr_cidr,
+    allocateIpamPoolCidr_clientToken,
+    allocateIpamPoolCidr_description,
+    allocateIpamPoolCidr_disallowedCidrs,
+    allocateIpamPoolCidr_dryRun,
+    allocateIpamPoolCidr_netmaskLength,
+    allocateIpamPoolCidr_previewNextCidr,
+    allocateIpamPoolCidr_ipamPoolId,
+    allocateIpamPoolCidrResponse_ipamPoolAllocation,
+    allocateIpamPoolCidrResponse_httpStatus,
+
+    -- ** ApplySecurityGroupsToClientVpnTargetNetwork
+    applySecurityGroupsToClientVpnTargetNetwork_dryRun,
+    applySecurityGroupsToClientVpnTargetNetwork_clientVpnEndpointId,
+    applySecurityGroupsToClientVpnTargetNetwork_vpcId,
+    applySecurityGroupsToClientVpnTargetNetwork_securityGroupIds,
+    applySecurityGroupsToClientVpnTargetNetworkResponse_securityGroupIds,
+    applySecurityGroupsToClientVpnTargetNetworkResponse_httpStatus,
+
+    -- ** AssignIpv6Addresses
+    assignIpv6Addresses_ipv6AddressCount,
+    assignIpv6Addresses_ipv6Addresses,
+    assignIpv6Addresses_ipv6PrefixCount,
+    assignIpv6Addresses_ipv6Prefixes,
+    assignIpv6Addresses_networkInterfaceId,
+    assignIpv6AddressesResponse_assignedIpv6Addresses,
+    assignIpv6AddressesResponse_assignedIpv6Prefixes,
+    assignIpv6AddressesResponse_networkInterfaceId,
+    assignIpv6AddressesResponse_httpStatus,
+
+    -- ** AssignPrivateIpAddresses
+    assignPrivateIpAddresses_allowReassignment,
+    assignPrivateIpAddresses_ipv4PrefixCount,
+    assignPrivateIpAddresses_ipv4Prefixes,
+    assignPrivateIpAddresses_privateIpAddresses,
+    assignPrivateIpAddresses_secondaryPrivateIpAddressCount,
+    assignPrivateIpAddresses_networkInterfaceId,
+    assignPrivateIpAddressesResponse_assignedIpv4Prefixes,
+    assignPrivateIpAddressesResponse_assignedPrivateIpAddresses,
+    assignPrivateIpAddressesResponse_networkInterfaceId,
+    assignPrivateIpAddressesResponse_httpStatus,
+
+    -- ** AssociateAddress
+    associateAddress_allocationId,
+    associateAddress_allowReassociation,
+    associateAddress_dryRun,
+    associateAddress_instanceId,
+    associateAddress_networkInterfaceId,
+    associateAddress_privateIpAddress,
+    associateAddress_publicIp,
+    associateAddressResponse_associationId,
+    associateAddressResponse_httpStatus,
+
+    -- ** AssociateClientVpnTargetNetwork
+    associateClientVpnTargetNetwork_clientToken,
+    associateClientVpnTargetNetwork_dryRun,
+    associateClientVpnTargetNetwork_clientVpnEndpointId,
+    associateClientVpnTargetNetwork_subnetId,
+    associateClientVpnTargetNetworkResponse_associationId,
+    associateClientVpnTargetNetworkResponse_status,
+    associateClientVpnTargetNetworkResponse_httpStatus,
+
+    -- ** AssociateDhcpOptions
+    associateDhcpOptions_dryRun,
+    associateDhcpOptions_dhcpOptionsId,
+    associateDhcpOptions_vpcId,
+
+    -- ** AssociateEnclaveCertificateIamRole
+    associateEnclaveCertificateIamRole_certificateArn,
+    associateEnclaveCertificateIamRole_dryRun,
+    associateEnclaveCertificateIamRole_roleArn,
+    associateEnclaveCertificateIamRoleResponse_certificateS3BucketName,
+    associateEnclaveCertificateIamRoleResponse_certificateS3ObjectKey,
+    associateEnclaveCertificateIamRoleResponse_encryptionKmsKeyId,
+    associateEnclaveCertificateIamRoleResponse_httpStatus,
+
+    -- ** AssociateIamInstanceProfile
+    associateIamInstanceProfile_iamInstanceProfile,
+    associateIamInstanceProfile_instanceId,
+    associateIamInstanceProfileResponse_iamInstanceProfileAssociation,
+    associateIamInstanceProfileResponse_httpStatus,
+
+    -- ** AssociateInstanceEventWindow
+    associateInstanceEventWindow_dryRun,
+    associateInstanceEventWindow_instanceEventWindowId,
+    associateInstanceEventWindow_associationTarget,
+    associateInstanceEventWindowResponse_instanceEventWindow,
+    associateInstanceEventWindowResponse_httpStatus,
+
+    -- ** AssociateRouteTable
+    associateRouteTable_dryRun,
+    associateRouteTable_gatewayId,
+    associateRouteTable_subnetId,
+    associateRouteTable_routeTableId,
+    associateRouteTableResponse_associationId,
+    associateRouteTableResponse_associationState,
+    associateRouteTableResponse_httpStatus,
+
+    -- ** AssociateSubnetCidrBlock
+    associateSubnetCidrBlock_ipv6CidrBlock,
+    associateSubnetCidrBlock_subnetId,
+    associateSubnetCidrBlockResponse_ipv6CidrBlockAssociation,
+    associateSubnetCidrBlockResponse_subnetId,
+    associateSubnetCidrBlockResponse_httpStatus,
+
+    -- ** AssociateTransitGatewayMulticastDomain
+    associateTransitGatewayMulticastDomain_dryRun,
+    associateTransitGatewayMulticastDomain_subnetIds,
+    associateTransitGatewayMulticastDomain_transitGatewayAttachmentId,
+    associateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+    associateTransitGatewayMulticastDomainResponse_associations,
+    associateTransitGatewayMulticastDomainResponse_httpStatus,
+
+    -- ** AssociateTransitGatewayPolicyTable
+    associateTransitGatewayPolicyTable_dryRun,
+    associateTransitGatewayPolicyTable_transitGatewayPolicyTableId,
+    associateTransitGatewayPolicyTable_transitGatewayAttachmentId,
+    associateTransitGatewayPolicyTableResponse_association,
+    associateTransitGatewayPolicyTableResponse_httpStatus,
+
+    -- ** AssociateTransitGatewayRouteTable
+    associateTransitGatewayRouteTable_dryRun,
+    associateTransitGatewayRouteTable_transitGatewayRouteTableId,
+    associateTransitGatewayRouteTable_transitGatewayAttachmentId,
+    associateTransitGatewayRouteTableResponse_association,
+    associateTransitGatewayRouteTableResponse_httpStatus,
+
+    -- ** AssociateTrunkInterface
+    associateTrunkInterface_clientToken,
+    associateTrunkInterface_dryRun,
+    associateTrunkInterface_greKey,
+    associateTrunkInterface_vlanId,
+    associateTrunkInterface_branchInterfaceId,
+    associateTrunkInterface_trunkInterfaceId,
+    associateTrunkInterfaceResponse_clientToken,
+    associateTrunkInterfaceResponse_interfaceAssociation,
+    associateTrunkInterfaceResponse_httpStatus,
+
+    -- ** AssociateVpcCidrBlock
+    associateVpcCidrBlock_amazonProvidedIpv6CidrBlock,
+    associateVpcCidrBlock_cidrBlock,
+    associateVpcCidrBlock_ipv4IpamPoolId,
+    associateVpcCidrBlock_ipv4NetmaskLength,
+    associateVpcCidrBlock_ipv6CidrBlock,
+    associateVpcCidrBlock_ipv6CidrBlockNetworkBorderGroup,
+    associateVpcCidrBlock_ipv6IpamPoolId,
+    associateVpcCidrBlock_ipv6NetmaskLength,
+    associateVpcCidrBlock_ipv6Pool,
+    associateVpcCidrBlock_vpcId,
+    associateVpcCidrBlockResponse_cidrBlockAssociation,
+    associateVpcCidrBlockResponse_ipv6CidrBlockAssociation,
+    associateVpcCidrBlockResponse_vpcId,
+    associateVpcCidrBlockResponse_httpStatus,
+
+    -- ** AttachClassicLinkVpc
+    attachClassicLinkVpc_dryRun,
+    attachClassicLinkVpc_groups,
+    attachClassicLinkVpc_instanceId,
+    attachClassicLinkVpc_vpcId,
+    attachClassicLinkVpcResponse_return,
+    attachClassicLinkVpcResponse_httpStatus,
+
+    -- ** AttachInternetGateway
+    attachInternetGateway_dryRun,
+    attachInternetGateway_internetGatewayId,
+    attachInternetGateway_vpcId,
+
+    -- ** AttachNetworkInterface
+    attachNetworkInterface_dryRun,
+    attachNetworkInterface_enaSrdSpecification,
+    attachNetworkInterface_networkCardIndex,
+    attachNetworkInterface_deviceIndex,
+    attachNetworkInterface_instanceId,
+    attachNetworkInterface_networkInterfaceId,
+    attachNetworkInterfaceResponse_attachmentId,
+    attachNetworkInterfaceResponse_networkCardIndex,
+    attachNetworkInterfaceResponse_httpStatus,
+
+    -- ** AttachVerifiedAccessTrustProvider
+    attachVerifiedAccessTrustProvider_clientToken,
+    attachVerifiedAccessTrustProvider_dryRun,
+    attachVerifiedAccessTrustProvider_verifiedAccessInstanceId,
+    attachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+    attachVerifiedAccessTrustProviderResponse_verifiedAccessInstance,
+    attachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    attachVerifiedAccessTrustProviderResponse_httpStatus,
+
+    -- ** AttachVolume
+    attachVolume_dryRun,
+    attachVolume_device,
+    attachVolume_instanceId,
+    attachVolume_volumeId,
+    volumeAttachment_attachTime,
+    volumeAttachment_deleteOnTermination,
+    volumeAttachment_device,
+    volumeAttachment_instanceId,
+    volumeAttachment_state,
+    volumeAttachment_volumeId,
+
+    -- ** AttachVpnGateway
+    attachVpnGateway_dryRun,
+    attachVpnGateway_vpcId,
+    attachVpnGateway_vpnGatewayId,
+    attachVpnGatewayResponse_vpcAttachment,
+    attachVpnGatewayResponse_httpStatus,
+
+    -- ** AuthorizeClientVpnIngress
+    authorizeClientVpnIngress_accessGroupId,
+    authorizeClientVpnIngress_authorizeAllGroups,
+    authorizeClientVpnIngress_clientToken,
+    authorizeClientVpnIngress_description,
+    authorizeClientVpnIngress_dryRun,
+    authorizeClientVpnIngress_clientVpnEndpointId,
+    authorizeClientVpnIngress_targetNetworkCidr,
+    authorizeClientVpnIngressResponse_status,
+    authorizeClientVpnIngressResponse_httpStatus,
+
+    -- ** AuthorizeSecurityGroupEgress
+    authorizeSecurityGroupEgress_cidrIp,
+    authorizeSecurityGroupEgress_dryRun,
+    authorizeSecurityGroupEgress_fromPort,
+    authorizeSecurityGroupEgress_ipPermissions,
+    authorizeSecurityGroupEgress_ipProtocol,
+    authorizeSecurityGroupEgress_sourceSecurityGroupName,
+    authorizeSecurityGroupEgress_sourceSecurityGroupOwnerId,
+    authorizeSecurityGroupEgress_tagSpecifications,
+    authorizeSecurityGroupEgress_toPort,
+    authorizeSecurityGroupEgress_groupId,
+    authorizeSecurityGroupEgressResponse_return,
+    authorizeSecurityGroupEgressResponse_securityGroupRules,
+    authorizeSecurityGroupEgressResponse_httpStatus,
+
+    -- ** AuthorizeSecurityGroupIngress
+    authorizeSecurityGroupIngress_cidrIp,
+    authorizeSecurityGroupIngress_dryRun,
+    authorizeSecurityGroupIngress_fromPort,
+    authorizeSecurityGroupIngress_groupId,
+    authorizeSecurityGroupIngress_groupName,
+    authorizeSecurityGroupIngress_ipPermissions,
+    authorizeSecurityGroupIngress_ipProtocol,
+    authorizeSecurityGroupIngress_sourceSecurityGroupName,
+    authorizeSecurityGroupIngress_sourceSecurityGroupOwnerId,
+    authorizeSecurityGroupIngress_tagSpecifications,
+    authorizeSecurityGroupIngress_toPort,
+    authorizeSecurityGroupIngressResponse_return,
+    authorizeSecurityGroupIngressResponse_securityGroupRules,
+    authorizeSecurityGroupIngressResponse_httpStatus,
+
+    -- ** BundleInstance
+    bundleInstance_dryRun,
+    bundleInstance_instanceId,
+    bundleInstance_storage,
+    bundleInstanceResponse_bundleTask,
+    bundleInstanceResponse_httpStatus,
+
+    -- ** CancelBundleTask
+    cancelBundleTask_dryRun,
+    cancelBundleTask_bundleId,
+    cancelBundleTaskResponse_bundleTask,
+    cancelBundleTaskResponse_httpStatus,
+
+    -- ** CancelCapacityReservation
+    cancelCapacityReservation_dryRun,
+    cancelCapacityReservation_capacityReservationId,
+    cancelCapacityReservationResponse_return,
+    cancelCapacityReservationResponse_httpStatus,
+
+    -- ** CancelCapacityReservationFleets
+    cancelCapacityReservationFleets_dryRun,
+    cancelCapacityReservationFleets_capacityReservationFleetIds,
+    cancelCapacityReservationFleetsResponse_failedFleetCancellations,
+    cancelCapacityReservationFleetsResponse_successfulFleetCancellations,
+    cancelCapacityReservationFleetsResponse_httpStatus,
+
+    -- ** CancelConversionTask
+    cancelConversionTask_dryRun,
+    cancelConversionTask_reasonMessage,
+    cancelConversionTask_conversionTaskId,
+
+    -- ** CancelExportTask
+    cancelExportTask_exportTaskId,
+
+    -- ** CancelImageLaunchPermission
+    cancelImageLaunchPermission_dryRun,
+    cancelImageLaunchPermission_imageId,
+    cancelImageLaunchPermissionResponse_return,
+    cancelImageLaunchPermissionResponse_httpStatus,
+
+    -- ** CancelImportTask
+    cancelImportTask_cancelReason,
+    cancelImportTask_dryRun,
+    cancelImportTask_importTaskId,
+    cancelImportTaskResponse_importTaskId,
+    cancelImportTaskResponse_previousState,
+    cancelImportTaskResponse_state,
+    cancelImportTaskResponse_httpStatus,
+
+    -- ** CancelReservedInstancesListing
+    cancelReservedInstancesListing_reservedInstancesListingId,
+    cancelReservedInstancesListingResponse_reservedInstancesListings,
+    cancelReservedInstancesListingResponse_httpStatus,
+
+    -- ** CancelSpotFleetRequests
+    cancelSpotFleetRequests_dryRun,
+    cancelSpotFleetRequests_spotFleetRequestIds,
+    cancelSpotFleetRequests_terminateInstances,
+    cancelSpotFleetRequestsResponse_successfulFleetRequests,
+    cancelSpotFleetRequestsResponse_unsuccessfulFleetRequests,
+    cancelSpotFleetRequestsResponse_httpStatus,
+
+    -- ** CancelSpotInstanceRequests
+    cancelSpotInstanceRequests_dryRun,
+    cancelSpotInstanceRequests_spotInstanceRequestIds,
+    cancelSpotInstanceRequestsResponse_cancelledSpotInstanceRequests,
+    cancelSpotInstanceRequestsResponse_httpStatus,
+
+    -- ** ConfirmProductInstance
+    confirmProductInstance_dryRun,
+    confirmProductInstance_instanceId,
+    confirmProductInstance_productCode,
+    confirmProductInstanceResponse_ownerId,
+    confirmProductInstanceResponse_return,
+    confirmProductInstanceResponse_httpStatus,
+
+    -- ** CopyFpgaImage
+    copyFpgaImage_clientToken,
+    copyFpgaImage_description,
+    copyFpgaImage_dryRun,
+    copyFpgaImage_name,
+    copyFpgaImage_sourceFpgaImageId,
+    copyFpgaImage_sourceRegion,
+    copyFpgaImageResponse_fpgaImageId,
+    copyFpgaImageResponse_httpStatus,
+
+    -- ** CopyImage
+    copyImage_clientToken,
+    copyImage_copyImageTags,
+    copyImage_description,
+    copyImage_destinationOutpostArn,
+    copyImage_dryRun,
+    copyImage_encrypted,
+    copyImage_kmsKeyId,
+    copyImage_name,
+    copyImage_sourceImageId,
+    copyImage_sourceRegion,
+    copyImageResponse_imageId,
+    copyImageResponse_httpStatus,
+
+    -- ** CopySnapshot
+    copySnapshot_description,
+    copySnapshot_destinationOutpostArn,
+    copySnapshot_destinationRegion,
+    copySnapshot_dryRun,
+    copySnapshot_encrypted,
+    copySnapshot_kmsKeyId,
+    copySnapshot_presignedUrl,
+    copySnapshot_tagSpecifications,
+    copySnapshot_sourceRegion,
+    copySnapshot_sourceSnapshotId,
+    copySnapshotResponse_snapshotId,
+    copySnapshotResponse_tags,
+    copySnapshotResponse_httpStatus,
+
+    -- ** CreateCapacityReservation
+    createCapacityReservation_availabilityZone,
+    createCapacityReservation_availabilityZoneId,
+    createCapacityReservation_clientToken,
+    createCapacityReservation_dryRun,
+    createCapacityReservation_ebsOptimized,
+    createCapacityReservation_endDate,
+    createCapacityReservation_endDateType,
+    createCapacityReservation_ephemeralStorage,
+    createCapacityReservation_instanceMatchCriteria,
+    createCapacityReservation_outpostArn,
+    createCapacityReservation_placementGroupArn,
+    createCapacityReservation_tagSpecifications,
+    createCapacityReservation_tenancy,
+    createCapacityReservation_instanceType,
+    createCapacityReservation_instancePlatform,
+    createCapacityReservation_instanceCount,
+    createCapacityReservationResponse_capacityReservation,
+    createCapacityReservationResponse_httpStatus,
+
+    -- ** CreateCapacityReservationFleet
+    createCapacityReservationFleet_allocationStrategy,
+    createCapacityReservationFleet_clientToken,
+    createCapacityReservationFleet_dryRun,
+    createCapacityReservationFleet_endDate,
+    createCapacityReservationFleet_instanceMatchCriteria,
+    createCapacityReservationFleet_tagSpecifications,
+    createCapacityReservationFleet_tenancy,
+    createCapacityReservationFleet_instanceTypeSpecifications,
+    createCapacityReservationFleet_totalTargetCapacity,
+    createCapacityReservationFleetResponse_allocationStrategy,
+    createCapacityReservationFleetResponse_capacityReservationFleetId,
+    createCapacityReservationFleetResponse_createTime,
+    createCapacityReservationFleetResponse_endDate,
+    createCapacityReservationFleetResponse_fleetCapacityReservations,
+    createCapacityReservationFleetResponse_instanceMatchCriteria,
+    createCapacityReservationFleetResponse_state,
+    createCapacityReservationFleetResponse_tags,
+    createCapacityReservationFleetResponse_tenancy,
+    createCapacityReservationFleetResponse_totalFulfilledCapacity,
+    createCapacityReservationFleetResponse_totalTargetCapacity,
+    createCapacityReservationFleetResponse_httpStatus,
+
+    -- ** CreateCarrierGateway
+    createCarrierGateway_clientToken,
+    createCarrierGateway_dryRun,
+    createCarrierGateway_tagSpecifications,
+    createCarrierGateway_vpcId,
+    createCarrierGatewayResponse_carrierGateway,
+    createCarrierGatewayResponse_httpStatus,
+
+    -- ** CreateClientVpnEndpoint
+    createClientVpnEndpoint_clientConnectOptions,
+    createClientVpnEndpoint_clientLoginBannerOptions,
+    createClientVpnEndpoint_clientToken,
+    createClientVpnEndpoint_description,
+    createClientVpnEndpoint_dnsServers,
+    createClientVpnEndpoint_dryRun,
+    createClientVpnEndpoint_securityGroupIds,
+    createClientVpnEndpoint_selfServicePortal,
+    createClientVpnEndpoint_sessionTimeoutHours,
+    createClientVpnEndpoint_splitTunnel,
+    createClientVpnEndpoint_tagSpecifications,
+    createClientVpnEndpoint_transportProtocol,
+    createClientVpnEndpoint_vpcId,
+    createClientVpnEndpoint_vpnPort,
+    createClientVpnEndpoint_clientCidrBlock,
+    createClientVpnEndpoint_serverCertificateArn,
+    createClientVpnEndpoint_authenticationOptions,
+    createClientVpnEndpoint_connectionLogOptions,
+    createClientVpnEndpointResponse_clientVpnEndpointId,
+    createClientVpnEndpointResponse_dnsName,
+    createClientVpnEndpointResponse_status,
+    createClientVpnEndpointResponse_httpStatus,
+
+    -- ** CreateClientVpnRoute
+    createClientVpnRoute_clientToken,
+    createClientVpnRoute_description,
+    createClientVpnRoute_dryRun,
+    createClientVpnRoute_clientVpnEndpointId,
+    createClientVpnRoute_destinationCidrBlock,
+    createClientVpnRoute_targetVpcSubnetId,
+    createClientVpnRouteResponse_status,
+    createClientVpnRouteResponse_httpStatus,
+
+    -- ** CreateCoipCidr
+    createCoipCidr_dryRun,
+    createCoipCidr_cidr,
+    createCoipCidr_coipPoolId,
+    createCoipCidrResponse_coipCidr,
+    createCoipCidrResponse_httpStatus,
+
+    -- ** CreateCoipPool
+    createCoipPool_dryRun,
+    createCoipPool_tagSpecifications,
+    createCoipPool_localGatewayRouteTableId,
+    createCoipPoolResponse_coipPool,
+    createCoipPoolResponse_httpStatus,
+
+    -- ** CreateCustomerGateway
+    createCustomerGateway_certificateArn,
+    createCustomerGateway_deviceName,
+    createCustomerGateway_dryRun,
+    createCustomerGateway_ipAddress,
+    createCustomerGateway_publicIp,
+    createCustomerGateway_tagSpecifications,
+    createCustomerGateway_bgpAsn,
+    createCustomerGateway_type,
+    createCustomerGatewayResponse_customerGateway,
+    createCustomerGatewayResponse_httpStatus,
+
+    -- ** CreateDefaultSubnet
+    createDefaultSubnet_dryRun,
+    createDefaultSubnet_ipv6Native,
+    createDefaultSubnet_availabilityZone,
+    createDefaultSubnetResponse_subnet,
+    createDefaultSubnetResponse_httpStatus,
+
+    -- ** CreateDefaultVpc
+    createDefaultVpc_dryRun,
+    createDefaultVpcResponse_vpc,
+    createDefaultVpcResponse_httpStatus,
+
+    -- ** CreateDhcpOptions
+    createDhcpOptions_dryRun,
+    createDhcpOptions_tagSpecifications,
+    createDhcpOptions_dhcpConfigurations,
+    createDhcpOptionsResponse_dhcpOptions,
+    createDhcpOptionsResponse_httpStatus,
+
+    -- ** CreateEgressOnlyInternetGateway
+    createEgressOnlyInternetGateway_clientToken,
+    createEgressOnlyInternetGateway_dryRun,
+    createEgressOnlyInternetGateway_tagSpecifications,
+    createEgressOnlyInternetGateway_vpcId,
+    createEgressOnlyInternetGatewayResponse_clientToken,
+    createEgressOnlyInternetGatewayResponse_egressOnlyInternetGateway,
+    createEgressOnlyInternetGatewayResponse_httpStatus,
+
+    -- ** CreateFleet
+    createFleet_clientToken,
+    createFleet_context,
+    createFleet_dryRun,
+    createFleet_excessCapacityTerminationPolicy,
+    createFleet_onDemandOptions,
+    createFleet_replaceUnhealthyInstances,
+    createFleet_spotOptions,
+    createFleet_tagSpecifications,
+    createFleet_terminateInstancesWithExpiration,
+    createFleet_type,
+    createFleet_validFrom,
+    createFleet_validUntil,
+    createFleet_launchTemplateConfigs,
+    createFleet_targetCapacitySpecification,
+    createFleetResponse_errors,
+    createFleetResponse_fleetId,
+    createFleetResponse_instances,
+    createFleetResponse_httpStatus,
+
+    -- ** CreateFlowLogs
+    createFlowLogs_clientToken,
+    createFlowLogs_deliverCrossAccountRole,
+    createFlowLogs_deliverLogsPermissionArn,
+    createFlowLogs_destinationOptions,
+    createFlowLogs_dryRun,
+    createFlowLogs_logDestination,
+    createFlowLogs_logDestinationType,
+    createFlowLogs_logFormat,
+    createFlowLogs_logGroupName,
+    createFlowLogs_maxAggregationInterval,
+    createFlowLogs_tagSpecifications,
+    createFlowLogs_trafficType,
+    createFlowLogs_resourceIds,
+    createFlowLogs_resourceType,
+    createFlowLogsResponse_clientToken,
+    createFlowLogsResponse_flowLogIds,
+    createFlowLogsResponse_unsuccessful,
+    createFlowLogsResponse_httpStatus,
+
+    -- ** CreateFpgaImage
+    createFpgaImage_clientToken,
+    createFpgaImage_description,
+    createFpgaImage_dryRun,
+    createFpgaImage_logsStorageLocation,
+    createFpgaImage_name,
+    createFpgaImage_tagSpecifications,
+    createFpgaImage_inputStorageLocation,
+    createFpgaImageResponse_fpgaImageGlobalId,
+    createFpgaImageResponse_fpgaImageId,
+    createFpgaImageResponse_httpStatus,
+
+    -- ** CreateImage
+    createImage_blockDeviceMappings,
+    createImage_description,
+    createImage_dryRun,
+    createImage_noReboot,
+    createImage_tagSpecifications,
+    createImage_instanceId,
+    createImage_name,
+    createImageResponse_imageId,
+    createImageResponse_httpStatus,
+
+    -- ** CreateInstanceEventWindow
+    createInstanceEventWindow_cronExpression,
+    createInstanceEventWindow_dryRun,
+    createInstanceEventWindow_name,
+    createInstanceEventWindow_tagSpecifications,
+    createInstanceEventWindow_timeRanges,
+    createInstanceEventWindowResponse_instanceEventWindow,
+    createInstanceEventWindowResponse_httpStatus,
+
+    -- ** CreateInstanceExportTask
+    createInstanceExportTask_description,
+    createInstanceExportTask_tagSpecifications,
+    createInstanceExportTask_exportToS3Task,
+    createInstanceExportTask_instanceId,
+    createInstanceExportTask_targetEnvironment,
+    createInstanceExportTaskResponse_exportTask,
+    createInstanceExportTaskResponse_httpStatus,
+
+    -- ** CreateInternetGateway
+    createInternetGateway_dryRun,
+    createInternetGateway_tagSpecifications,
+    createInternetGatewayResponse_internetGateway,
+    createInternetGatewayResponse_httpStatus,
+
+    -- ** CreateIpam
+    createIpam_clientToken,
+    createIpam_description,
+    createIpam_dryRun,
+    createIpam_operatingRegions,
+    createIpam_tagSpecifications,
+    createIpamResponse_ipam,
+    createIpamResponse_httpStatus,
+
+    -- ** CreateIpamPool
+    createIpamPool_allocationDefaultNetmaskLength,
+    createIpamPool_allocationMaxNetmaskLength,
+    createIpamPool_allocationMinNetmaskLength,
+    createIpamPool_allocationResourceTags,
+    createIpamPool_autoImport,
+    createIpamPool_awsService,
+    createIpamPool_clientToken,
+    createIpamPool_description,
+    createIpamPool_dryRun,
+    createIpamPool_locale,
+    createIpamPool_publiclyAdvertisable,
+    createIpamPool_sourceIpamPoolId,
+    createIpamPool_tagSpecifications,
+    createIpamPool_ipamScopeId,
+    createIpamPool_addressFamily,
+    createIpamPoolResponse_ipamPool,
+    createIpamPoolResponse_httpStatus,
+
+    -- ** CreateIpamScope
+    createIpamScope_clientToken,
+    createIpamScope_description,
+    createIpamScope_dryRun,
+    createIpamScope_tagSpecifications,
+    createIpamScope_ipamId,
+    createIpamScopeResponse_ipamScope,
+    createIpamScopeResponse_httpStatus,
+
+    -- ** CreateKeyPair
+    createKeyPair_dryRun,
+    createKeyPair_keyFormat,
+    createKeyPair_keyType,
+    createKeyPair_tagSpecifications,
+    createKeyPair_keyName,
+    createKeyPairResponse_keyPairId,
+    createKeyPairResponse_tags,
+    createKeyPairResponse_httpStatus,
+    createKeyPairResponse_keyName,
+    createKeyPairResponse_keyFingerprint,
+    createKeyPairResponse_keyMaterial,
+
+    -- ** CreateLaunchTemplate
+    createLaunchTemplate_clientToken,
+    createLaunchTemplate_dryRun,
+    createLaunchTemplate_tagSpecifications,
+    createLaunchTemplate_versionDescription,
+    createLaunchTemplate_launchTemplateName,
+    createLaunchTemplate_launchTemplateData,
+    createLaunchTemplateResponse_launchTemplate,
+    createLaunchTemplateResponse_warning,
+    createLaunchTemplateResponse_httpStatus,
+
+    -- ** CreateLaunchTemplateVersion
+    createLaunchTemplateVersion_clientToken,
+    createLaunchTemplateVersion_dryRun,
+    createLaunchTemplateVersion_launchTemplateId,
+    createLaunchTemplateVersion_launchTemplateName,
+    createLaunchTemplateVersion_sourceVersion,
+    createLaunchTemplateVersion_versionDescription,
+    createLaunchTemplateVersion_launchTemplateData,
+    createLaunchTemplateVersionResponse_launchTemplateVersion,
+    createLaunchTemplateVersionResponse_warning,
+    createLaunchTemplateVersionResponse_httpStatus,
+
+    -- ** CreateLocalGatewayRoute
+    createLocalGatewayRoute_dryRun,
+    createLocalGatewayRoute_localGatewayVirtualInterfaceGroupId,
+    createLocalGatewayRoute_networkInterfaceId,
+    createLocalGatewayRoute_destinationCidrBlock,
+    createLocalGatewayRoute_localGatewayRouteTableId,
+    createLocalGatewayRouteResponse_route,
+    createLocalGatewayRouteResponse_httpStatus,
+
+    -- ** CreateLocalGatewayRouteTable
+    createLocalGatewayRouteTable_dryRun,
+    createLocalGatewayRouteTable_mode,
+    createLocalGatewayRouteTable_tagSpecifications,
+    createLocalGatewayRouteTable_localGatewayId,
+    createLocalGatewayRouteTableResponse_localGatewayRouteTable,
+    createLocalGatewayRouteTableResponse_httpStatus,
+
+    -- ** CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_tagSpecifications,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation,
+    createLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus,
+
+    -- ** CreateLocalGatewayRouteTableVpcAssociation
+    createLocalGatewayRouteTableVpcAssociation_dryRun,
+    createLocalGatewayRouteTableVpcAssociation_tagSpecifications,
+    createLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableId,
+    createLocalGatewayRouteTableVpcAssociation_vpcId,
+    createLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation,
+    createLocalGatewayRouteTableVpcAssociationResponse_httpStatus,
+
+    -- ** CreateManagedPrefixList
+    createManagedPrefixList_clientToken,
+    createManagedPrefixList_dryRun,
+    createManagedPrefixList_entries,
+    createManagedPrefixList_tagSpecifications,
+    createManagedPrefixList_prefixListName,
+    createManagedPrefixList_maxEntries,
+    createManagedPrefixList_addressFamily,
+    createManagedPrefixListResponse_prefixList,
+    createManagedPrefixListResponse_httpStatus,
+
+    -- ** CreateNatGateway
+    createNatGateway_allocationId,
+    createNatGateway_clientToken,
+    createNatGateway_connectivityType,
+    createNatGateway_dryRun,
+    createNatGateway_privateIpAddress,
+    createNatGateway_tagSpecifications,
+    createNatGateway_subnetId,
+    createNatGatewayResponse_clientToken,
+    createNatGatewayResponse_natGateway,
+    createNatGatewayResponse_httpStatus,
+
+    -- ** CreateNetworkAcl
+    createNetworkAcl_dryRun,
+    createNetworkAcl_tagSpecifications,
+    createNetworkAcl_vpcId,
+    createNetworkAclResponse_networkAcl,
+    createNetworkAclResponse_httpStatus,
+
+    -- ** CreateNetworkAclEntry
+    createNetworkAclEntry_cidrBlock,
+    createNetworkAclEntry_dryRun,
+    createNetworkAclEntry_icmpTypeCode,
+    createNetworkAclEntry_ipv6CidrBlock,
+    createNetworkAclEntry_portRange,
+    createNetworkAclEntry_egress,
+    createNetworkAclEntry_networkAclId,
+    createNetworkAclEntry_protocol,
+    createNetworkAclEntry_ruleAction,
+    createNetworkAclEntry_ruleNumber,
+
+    -- ** CreateNetworkInsightsAccessScope
+    createNetworkInsightsAccessScope_dryRun,
+    createNetworkInsightsAccessScope_excludePaths,
+    createNetworkInsightsAccessScope_matchPaths,
+    createNetworkInsightsAccessScope_tagSpecifications,
+    createNetworkInsightsAccessScope_clientToken,
+    createNetworkInsightsAccessScopeResponse_networkInsightsAccessScope,
+    createNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeContent,
+    createNetworkInsightsAccessScopeResponse_httpStatus,
+
+    -- ** CreateNetworkInsightsPath
+    createNetworkInsightsPath_destinationIp,
+    createNetworkInsightsPath_destinationPort,
+    createNetworkInsightsPath_dryRun,
+    createNetworkInsightsPath_sourceIp,
+    createNetworkInsightsPath_tagSpecifications,
+    createNetworkInsightsPath_source,
+    createNetworkInsightsPath_destination,
+    createNetworkInsightsPath_protocol,
+    createNetworkInsightsPath_clientToken,
+    createNetworkInsightsPathResponse_networkInsightsPath,
+    createNetworkInsightsPathResponse_httpStatus,
+
+    -- ** CreateNetworkInterface
+    createNetworkInterface_clientToken,
+    createNetworkInterface_description,
+    createNetworkInterface_dryRun,
+    createNetworkInterface_groups,
+    createNetworkInterface_interfaceType,
+    createNetworkInterface_ipv4PrefixCount,
+    createNetworkInterface_ipv4Prefixes,
+    createNetworkInterface_ipv6AddressCount,
+    createNetworkInterface_ipv6Addresses,
+    createNetworkInterface_ipv6PrefixCount,
+    createNetworkInterface_ipv6Prefixes,
+    createNetworkInterface_privateIpAddress,
+    createNetworkInterface_privateIpAddresses,
+    createNetworkInterface_secondaryPrivateIpAddressCount,
+    createNetworkInterface_tagSpecifications,
+    createNetworkInterface_subnetId,
+    createNetworkInterfaceResponse_clientToken,
+    createNetworkInterfaceResponse_networkInterface,
+    createNetworkInterfaceResponse_httpStatus,
+
+    -- ** CreateNetworkInterfacePermission
+    createNetworkInterfacePermission_awsAccountId,
+    createNetworkInterfacePermission_awsService,
+    createNetworkInterfacePermission_dryRun,
+    createNetworkInterfacePermission_networkInterfaceId,
+    createNetworkInterfacePermission_permission,
+    createNetworkInterfacePermissionResponse_interfacePermission,
+    createNetworkInterfacePermissionResponse_httpStatus,
+
+    -- ** CreatePlacementGroup
+    createPlacementGroup_dryRun,
+    createPlacementGroup_groupName,
+    createPlacementGroup_partitionCount,
+    createPlacementGroup_spreadLevel,
+    createPlacementGroup_strategy,
+    createPlacementGroup_tagSpecifications,
+    createPlacementGroupResponse_placementGroup,
+    createPlacementGroupResponse_httpStatus,
+
+    -- ** CreatePublicIpv4Pool
+    createPublicIpv4Pool_dryRun,
+    createPublicIpv4Pool_tagSpecifications,
+    createPublicIpv4PoolResponse_poolId,
+    createPublicIpv4PoolResponse_httpStatus,
+
+    -- ** CreateReplaceRootVolumeTask
+    createReplaceRootVolumeTask_clientToken,
+    createReplaceRootVolumeTask_deleteReplacedRootVolume,
+    createReplaceRootVolumeTask_dryRun,
+    createReplaceRootVolumeTask_imageId,
+    createReplaceRootVolumeTask_snapshotId,
+    createReplaceRootVolumeTask_tagSpecifications,
+    createReplaceRootVolumeTask_instanceId,
+    createReplaceRootVolumeTaskResponse_replaceRootVolumeTask,
+    createReplaceRootVolumeTaskResponse_httpStatus,
+
+    -- ** CreateReservedInstancesListing
+    createReservedInstancesListing_clientToken,
+    createReservedInstancesListing_instanceCount,
+    createReservedInstancesListing_priceSchedules,
+    createReservedInstancesListing_reservedInstancesId,
+    createReservedInstancesListingResponse_reservedInstancesListings,
+    createReservedInstancesListingResponse_httpStatus,
+
+    -- ** CreateRestoreImageTask
+    createRestoreImageTask_dryRun,
+    createRestoreImageTask_name,
+    createRestoreImageTask_tagSpecifications,
+    createRestoreImageTask_bucket,
+    createRestoreImageTask_objectKey,
+    createRestoreImageTaskResponse_imageId,
+    createRestoreImageTaskResponse_httpStatus,
+
+    -- ** CreateRoute
+    createRoute_carrierGatewayId,
+    createRoute_coreNetworkArn,
+    createRoute_destinationCidrBlock,
+    createRoute_destinationIpv6CidrBlock,
+    createRoute_destinationPrefixListId,
+    createRoute_dryRun,
+    createRoute_egressOnlyInternetGatewayId,
+    createRoute_gatewayId,
+    createRoute_instanceId,
+    createRoute_localGatewayId,
+    createRoute_natGatewayId,
+    createRoute_networkInterfaceId,
+    createRoute_transitGatewayId,
+    createRoute_vpcEndpointId,
+    createRoute_vpcPeeringConnectionId,
+    createRoute_routeTableId,
+    createRouteResponse_return,
+    createRouteResponse_httpStatus,
+
+    -- ** CreateRouteTable
+    createRouteTable_dryRun,
+    createRouteTable_tagSpecifications,
+    createRouteTable_vpcId,
+    createRouteTableResponse_routeTable,
+    createRouteTableResponse_httpStatus,
+
+    -- ** CreateSecurityGroup
+    createSecurityGroup_dryRun,
+    createSecurityGroup_tagSpecifications,
+    createSecurityGroup_vpcId,
+    createSecurityGroup_description,
+    createSecurityGroup_groupName,
+    createSecurityGroupResponse_tags,
+    createSecurityGroupResponse_httpStatus,
+    createSecurityGroupResponse_groupId,
+
+    -- ** CreateSnapshot
+    createSnapshot_description,
+    createSnapshot_dryRun,
+    createSnapshot_outpostArn,
+    createSnapshot_tagSpecifications,
+    createSnapshot_volumeId,
+    snapshot_dataEncryptionKeyId,
+    snapshot_kmsKeyId,
+    snapshot_outpostArn,
+    snapshot_ownerAlias,
+    snapshot_restoreExpiryTime,
+    snapshot_stateMessage,
+    snapshot_storageTier,
+    snapshot_tags,
+    snapshot_snapshotId,
+    snapshot_ownerId,
+    snapshot_volumeId,
+    snapshot_volumeSize,
+    snapshot_description,
+    snapshot_startTime,
+    snapshot_progress,
+    snapshot_state,
+    snapshot_encrypted,
+
+    -- ** CreateSnapshots
+    createSnapshots_copyTagsFromSource,
+    createSnapshots_description,
+    createSnapshots_dryRun,
+    createSnapshots_outpostArn,
+    createSnapshots_tagSpecifications,
+    createSnapshots_instanceSpecification,
+    createSnapshotsResponse_snapshots,
+    createSnapshotsResponse_httpStatus,
+
+    -- ** CreateSpotDatafeedSubscription
+    createSpotDatafeedSubscription_dryRun,
+    createSpotDatafeedSubscription_prefix,
+    createSpotDatafeedSubscription_bucket,
+    createSpotDatafeedSubscriptionResponse_spotDatafeedSubscription,
+    createSpotDatafeedSubscriptionResponse_httpStatus,
+
+    -- ** CreateStoreImageTask
+    createStoreImageTask_dryRun,
+    createStoreImageTask_s3ObjectTags,
+    createStoreImageTask_imageId,
+    createStoreImageTask_bucket,
+    createStoreImageTaskResponse_objectKey,
+    createStoreImageTaskResponse_httpStatus,
+
+    -- ** CreateSubnet
+    createSubnet_availabilityZone,
+    createSubnet_availabilityZoneId,
+    createSubnet_cidrBlock,
+    createSubnet_dryRun,
+    createSubnet_ipv6CidrBlock,
+    createSubnet_ipv6Native,
+    createSubnet_outpostArn,
+    createSubnet_tagSpecifications,
+    createSubnet_vpcId,
+    createSubnetResponse_subnet,
+    createSubnetResponse_httpStatus,
+
+    -- ** CreateSubnetCidrReservation
+    createSubnetCidrReservation_description,
+    createSubnetCidrReservation_dryRun,
+    createSubnetCidrReservation_tagSpecifications,
+    createSubnetCidrReservation_subnetId,
+    createSubnetCidrReservation_cidr,
+    createSubnetCidrReservation_reservationType,
+    createSubnetCidrReservationResponse_subnetCidrReservation,
+    createSubnetCidrReservationResponse_httpStatus,
+
+    -- ** CreateTags
+    createTags_dryRun,
+    createTags_resources,
+    createTags_tags,
+
+    -- ** CreateTrafficMirrorFilter
+    createTrafficMirrorFilter_clientToken,
+    createTrafficMirrorFilter_description,
+    createTrafficMirrorFilter_dryRun,
+    createTrafficMirrorFilter_tagSpecifications,
+    createTrafficMirrorFilterResponse_clientToken,
+    createTrafficMirrorFilterResponse_trafficMirrorFilter,
+    createTrafficMirrorFilterResponse_httpStatus,
+
+    -- ** CreateTrafficMirrorFilterRule
+    createTrafficMirrorFilterRule_clientToken,
+    createTrafficMirrorFilterRule_description,
+    createTrafficMirrorFilterRule_destinationPortRange,
+    createTrafficMirrorFilterRule_dryRun,
+    createTrafficMirrorFilterRule_protocol,
+    createTrafficMirrorFilterRule_sourcePortRange,
+    createTrafficMirrorFilterRule_trafficMirrorFilterId,
+    createTrafficMirrorFilterRule_trafficDirection,
+    createTrafficMirrorFilterRule_ruleNumber,
+    createTrafficMirrorFilterRule_ruleAction,
+    createTrafficMirrorFilterRule_destinationCidrBlock,
+    createTrafficMirrorFilterRule_sourceCidrBlock,
+    createTrafficMirrorFilterRuleResponse_clientToken,
+    createTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule,
+    createTrafficMirrorFilterRuleResponse_httpStatus,
+
+    -- ** CreateTrafficMirrorSession
+    createTrafficMirrorSession_clientToken,
+    createTrafficMirrorSession_description,
+    createTrafficMirrorSession_dryRun,
+    createTrafficMirrorSession_packetLength,
+    createTrafficMirrorSession_tagSpecifications,
+    createTrafficMirrorSession_virtualNetworkId,
+    createTrafficMirrorSession_networkInterfaceId,
+    createTrafficMirrorSession_trafficMirrorTargetId,
+    createTrafficMirrorSession_trafficMirrorFilterId,
+    createTrafficMirrorSession_sessionNumber,
+    createTrafficMirrorSessionResponse_clientToken,
+    createTrafficMirrorSessionResponse_trafficMirrorSession,
+    createTrafficMirrorSessionResponse_httpStatus,
+
+    -- ** CreateTrafficMirrorTarget
+    createTrafficMirrorTarget_clientToken,
+    createTrafficMirrorTarget_description,
+    createTrafficMirrorTarget_dryRun,
+    createTrafficMirrorTarget_gatewayLoadBalancerEndpointId,
+    createTrafficMirrorTarget_networkInterfaceId,
+    createTrafficMirrorTarget_networkLoadBalancerArn,
+    createTrafficMirrorTarget_tagSpecifications,
+    createTrafficMirrorTargetResponse_clientToken,
+    createTrafficMirrorTargetResponse_trafficMirrorTarget,
+    createTrafficMirrorTargetResponse_httpStatus,
+
+    -- ** CreateTransitGateway
+    createTransitGateway_description,
+    createTransitGateway_dryRun,
+    createTransitGateway_options,
+    createTransitGateway_tagSpecifications,
+    createTransitGatewayResponse_transitGateway,
+    createTransitGatewayResponse_httpStatus,
+
+    -- ** CreateTransitGatewayConnect
+    createTransitGatewayConnect_dryRun,
+    createTransitGatewayConnect_tagSpecifications,
+    createTransitGatewayConnect_transportTransitGatewayAttachmentId,
+    createTransitGatewayConnect_options,
+    createTransitGatewayConnectResponse_transitGatewayConnect,
+    createTransitGatewayConnectResponse_httpStatus,
+
+    -- ** CreateTransitGatewayConnectPeer
+    createTransitGatewayConnectPeer_bgpOptions,
+    createTransitGatewayConnectPeer_dryRun,
+    createTransitGatewayConnectPeer_tagSpecifications,
+    createTransitGatewayConnectPeer_transitGatewayAddress,
+    createTransitGatewayConnectPeer_transitGatewayAttachmentId,
+    createTransitGatewayConnectPeer_peerAddress,
+    createTransitGatewayConnectPeer_insideCidrBlocks,
+    createTransitGatewayConnectPeerResponse_transitGatewayConnectPeer,
+    createTransitGatewayConnectPeerResponse_httpStatus,
+
+    -- ** CreateTransitGatewayMulticastDomain
+    createTransitGatewayMulticastDomain_dryRun,
+    createTransitGatewayMulticastDomain_options,
+    createTransitGatewayMulticastDomain_tagSpecifications,
+    createTransitGatewayMulticastDomain_transitGatewayId,
+    createTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain,
+    createTransitGatewayMulticastDomainResponse_httpStatus,
+
+    -- ** CreateTransitGatewayPeeringAttachment
+    createTransitGatewayPeeringAttachment_dryRun,
+    createTransitGatewayPeeringAttachment_options,
+    createTransitGatewayPeeringAttachment_tagSpecifications,
+    createTransitGatewayPeeringAttachment_transitGatewayId,
+    createTransitGatewayPeeringAttachment_peerTransitGatewayId,
+    createTransitGatewayPeeringAttachment_peerAccountId,
+    createTransitGatewayPeeringAttachment_peerRegion,
+    createTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    createTransitGatewayPeeringAttachmentResponse_httpStatus,
+
+    -- ** CreateTransitGatewayPolicyTable
+    createTransitGatewayPolicyTable_dryRun,
+    createTransitGatewayPolicyTable_tagSpecifications,
+    createTransitGatewayPolicyTable_transitGatewayId,
+    createTransitGatewayPolicyTableResponse_transitGatewayPolicyTable,
+    createTransitGatewayPolicyTableResponse_httpStatus,
+
+    -- ** CreateTransitGatewayPrefixListReference
+    createTransitGatewayPrefixListReference_blackhole,
+    createTransitGatewayPrefixListReference_dryRun,
+    createTransitGatewayPrefixListReference_transitGatewayAttachmentId,
+    createTransitGatewayPrefixListReference_transitGatewayRouteTableId,
+    createTransitGatewayPrefixListReference_prefixListId,
+    createTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference,
+    createTransitGatewayPrefixListReferenceResponse_httpStatus,
+
+    -- ** CreateTransitGatewayRoute
+    createTransitGatewayRoute_blackhole,
+    createTransitGatewayRoute_dryRun,
+    createTransitGatewayRoute_transitGatewayAttachmentId,
+    createTransitGatewayRoute_destinationCidrBlock,
+    createTransitGatewayRoute_transitGatewayRouteTableId,
+    createTransitGatewayRouteResponse_route,
+    createTransitGatewayRouteResponse_httpStatus,
+
+    -- ** CreateTransitGatewayRouteTable
+    createTransitGatewayRouteTable_dryRun,
+    createTransitGatewayRouteTable_tagSpecifications,
+    createTransitGatewayRouteTable_transitGatewayId,
+    createTransitGatewayRouteTableResponse_transitGatewayRouteTable,
+    createTransitGatewayRouteTableResponse_httpStatus,
+
+    -- ** CreateTransitGatewayRouteTableAnnouncement
+    createTransitGatewayRouteTableAnnouncement_dryRun,
+    createTransitGatewayRouteTableAnnouncement_tagSpecifications,
+    createTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableId,
+    createTransitGatewayRouteTableAnnouncement_peeringAttachmentId,
+    createTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement,
+    createTransitGatewayRouteTableAnnouncementResponse_httpStatus,
+
+    -- ** CreateTransitGatewayVpcAttachment
+    createTransitGatewayVpcAttachment_dryRun,
+    createTransitGatewayVpcAttachment_options,
+    createTransitGatewayVpcAttachment_tagSpecifications,
+    createTransitGatewayVpcAttachment_transitGatewayId,
+    createTransitGatewayVpcAttachment_vpcId,
+    createTransitGatewayVpcAttachment_subnetIds,
+    createTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    createTransitGatewayVpcAttachmentResponse_httpStatus,
+
+    -- ** CreateVerifiedAccessEndpoint
+    createVerifiedAccessEndpoint_clientToken,
+    createVerifiedAccessEndpoint_description,
+    createVerifiedAccessEndpoint_dryRun,
+    createVerifiedAccessEndpoint_loadBalancerOptions,
+    createVerifiedAccessEndpoint_networkInterfaceOptions,
+    createVerifiedAccessEndpoint_policyDocument,
+    createVerifiedAccessEndpoint_securityGroupIds,
+    createVerifiedAccessEndpoint_tagSpecifications,
+    createVerifiedAccessEndpoint_verifiedAccessGroupId,
+    createVerifiedAccessEndpoint_endpointType,
+    createVerifiedAccessEndpoint_attachmentType,
+    createVerifiedAccessEndpoint_domainCertificateArn,
+    createVerifiedAccessEndpoint_applicationDomain,
+    createVerifiedAccessEndpoint_endpointDomainPrefix,
+    createVerifiedAccessEndpointResponse_verifiedAccessEndpoint,
+    createVerifiedAccessEndpointResponse_httpStatus,
+
+    -- ** CreateVerifiedAccessGroup
+    createVerifiedAccessGroup_clientToken,
+    createVerifiedAccessGroup_description,
+    createVerifiedAccessGroup_dryRun,
+    createVerifiedAccessGroup_policyDocument,
+    createVerifiedAccessGroup_tagSpecifications,
+    createVerifiedAccessGroup_verifiedAccessInstanceId,
+    createVerifiedAccessGroupResponse_verifiedAccessGroup,
+    createVerifiedAccessGroupResponse_httpStatus,
+
+    -- ** CreateVerifiedAccessInstance
+    createVerifiedAccessInstance_clientToken,
+    createVerifiedAccessInstance_description,
+    createVerifiedAccessInstance_dryRun,
+    createVerifiedAccessInstance_tagSpecifications,
+    createVerifiedAccessInstanceResponse_verifiedAccessInstance,
+    createVerifiedAccessInstanceResponse_httpStatus,
+
+    -- ** CreateVerifiedAccessTrustProvider
+    createVerifiedAccessTrustProvider_clientToken,
+    createVerifiedAccessTrustProvider_description,
+    createVerifiedAccessTrustProvider_deviceOptions,
+    createVerifiedAccessTrustProvider_deviceTrustProviderType,
+    createVerifiedAccessTrustProvider_dryRun,
+    createVerifiedAccessTrustProvider_oidcOptions,
+    createVerifiedAccessTrustProvider_tagSpecifications,
+    createVerifiedAccessTrustProvider_userTrustProviderType,
+    createVerifiedAccessTrustProvider_trustProviderType,
+    createVerifiedAccessTrustProvider_policyReferenceName,
+    createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    createVerifiedAccessTrustProviderResponse_httpStatus,
+
+    -- ** CreateVolume
+    createVolume_clientToken,
+    createVolume_dryRun,
+    createVolume_encrypted,
+    createVolume_iops,
+    createVolume_kmsKeyId,
+    createVolume_multiAttachEnabled,
+    createVolume_outpostArn,
+    createVolume_size,
+    createVolume_snapshotId,
+    createVolume_tagSpecifications,
+    createVolume_throughput,
+    createVolume_volumeType,
+    createVolume_availabilityZone,
+    volume_attachments,
+    volume_fastRestored,
+    volume_iops,
+    volume_kmsKeyId,
+    volume_multiAttachEnabled,
+    volume_outpostArn,
+    volume_tags,
+    volume_throughput,
+    volume_availabilityZone,
+    volume_createTime,
+    volume_encrypted,
+    volume_size,
+    volume_snapshotId,
+    volume_state,
+    volume_volumeId,
+    volume_volumeType,
+
+    -- ** CreateVpc
+    createVpc_amazonProvidedIpv6CidrBlock,
+    createVpc_cidrBlock,
+    createVpc_dryRun,
+    createVpc_instanceTenancy,
+    createVpc_ipv4IpamPoolId,
+    createVpc_ipv4NetmaskLength,
+    createVpc_ipv6CidrBlock,
+    createVpc_ipv6CidrBlockNetworkBorderGroup,
+    createVpc_ipv6IpamPoolId,
+    createVpc_ipv6NetmaskLength,
+    createVpc_ipv6Pool,
+    createVpc_tagSpecifications,
+    createVpcResponse_vpc,
+    createVpcResponse_httpStatus,
+
+    -- ** CreateVpcEndpoint
+    createVpcEndpoint_clientToken,
+    createVpcEndpoint_dnsOptions,
+    createVpcEndpoint_dryRun,
+    createVpcEndpoint_ipAddressType,
+    createVpcEndpoint_policyDocument,
+    createVpcEndpoint_privateDnsEnabled,
+    createVpcEndpoint_routeTableIds,
+    createVpcEndpoint_securityGroupIds,
+    createVpcEndpoint_subnetIds,
+    createVpcEndpoint_tagSpecifications,
+    createVpcEndpoint_vpcEndpointType,
+    createVpcEndpoint_vpcId,
+    createVpcEndpoint_serviceName,
+    createVpcEndpointResponse_clientToken,
+    createVpcEndpointResponse_vpcEndpoint,
+    createVpcEndpointResponse_httpStatus,
+
+    -- ** CreateVpcEndpointConnectionNotification
+    createVpcEndpointConnectionNotification_clientToken,
+    createVpcEndpointConnectionNotification_dryRun,
+    createVpcEndpointConnectionNotification_serviceId,
+    createVpcEndpointConnectionNotification_vpcEndpointId,
+    createVpcEndpointConnectionNotification_connectionNotificationArn,
+    createVpcEndpointConnectionNotification_connectionEvents,
+    createVpcEndpointConnectionNotificationResponse_clientToken,
+    createVpcEndpointConnectionNotificationResponse_connectionNotification,
+    createVpcEndpointConnectionNotificationResponse_httpStatus,
+
+    -- ** CreateVpcEndpointServiceConfiguration
+    createVpcEndpointServiceConfiguration_acceptanceRequired,
+    createVpcEndpointServiceConfiguration_clientToken,
+    createVpcEndpointServiceConfiguration_dryRun,
+    createVpcEndpointServiceConfiguration_gatewayLoadBalancerArns,
+    createVpcEndpointServiceConfiguration_networkLoadBalancerArns,
+    createVpcEndpointServiceConfiguration_privateDnsName,
+    createVpcEndpointServiceConfiguration_supportedIpAddressTypes,
+    createVpcEndpointServiceConfiguration_tagSpecifications,
+    createVpcEndpointServiceConfigurationResponse_clientToken,
+    createVpcEndpointServiceConfigurationResponse_serviceConfiguration,
+    createVpcEndpointServiceConfigurationResponse_httpStatus,
+
+    -- ** CreateVpcPeeringConnection
+    createVpcPeeringConnection_dryRun,
+    createVpcPeeringConnection_peerOwnerId,
+    createVpcPeeringConnection_peerRegion,
+    createVpcPeeringConnection_peerVpcId,
+    createVpcPeeringConnection_tagSpecifications,
+    createVpcPeeringConnection_vpcId,
+    createVpcPeeringConnectionResponse_vpcPeeringConnection,
+    createVpcPeeringConnectionResponse_httpStatus,
+
+    -- ** CreateVpnConnection
+    createVpnConnection_dryRun,
+    createVpnConnection_options,
+    createVpnConnection_tagSpecifications,
+    createVpnConnection_transitGatewayId,
+    createVpnConnection_vpnGatewayId,
+    createVpnConnection_customerGatewayId,
+    createVpnConnection_type,
+    createVpnConnectionResponse_vpnConnection,
+    createVpnConnectionResponse_httpStatus,
+
+    -- ** CreateVpnConnectionRoute
+    createVpnConnectionRoute_destinationCidrBlock,
+    createVpnConnectionRoute_vpnConnectionId,
+
+    -- ** CreateVpnGateway
+    createVpnGateway_amazonSideAsn,
+    createVpnGateway_availabilityZone,
+    createVpnGateway_dryRun,
+    createVpnGateway_tagSpecifications,
+    createVpnGateway_type,
+    createVpnGatewayResponse_vpnGateway,
+    createVpnGatewayResponse_httpStatus,
+
+    -- ** DeleteCarrierGateway
+    deleteCarrierGateway_dryRun,
+    deleteCarrierGateway_carrierGatewayId,
+    deleteCarrierGatewayResponse_carrierGateway,
+    deleteCarrierGatewayResponse_httpStatus,
+
+    -- ** DeleteClientVpnEndpoint
+    deleteClientVpnEndpoint_dryRun,
+    deleteClientVpnEndpoint_clientVpnEndpointId,
+    deleteClientVpnEndpointResponse_status,
+    deleteClientVpnEndpointResponse_httpStatus,
+
+    -- ** DeleteClientVpnRoute
+    deleteClientVpnRoute_dryRun,
+    deleteClientVpnRoute_targetVpcSubnetId,
+    deleteClientVpnRoute_clientVpnEndpointId,
+    deleteClientVpnRoute_destinationCidrBlock,
+    deleteClientVpnRouteResponse_status,
+    deleteClientVpnRouteResponse_httpStatus,
+
+    -- ** DeleteCoipCidr
+    deleteCoipCidr_dryRun,
+    deleteCoipCidr_cidr,
+    deleteCoipCidr_coipPoolId,
+    deleteCoipCidrResponse_coipCidr,
+    deleteCoipCidrResponse_httpStatus,
+
+    -- ** DeleteCoipPool
+    deleteCoipPool_dryRun,
+    deleteCoipPool_coipPoolId,
+    deleteCoipPoolResponse_coipPool,
+    deleteCoipPoolResponse_httpStatus,
+
+    -- ** DeleteCustomerGateway
+    deleteCustomerGateway_dryRun,
+    deleteCustomerGateway_customerGatewayId,
+
+    -- ** DeleteDhcpOptions
+    deleteDhcpOptions_dryRun,
+    deleteDhcpOptions_dhcpOptionsId,
+
+    -- ** DeleteEgressOnlyInternetGateway
+    deleteEgressOnlyInternetGateway_dryRun,
+    deleteEgressOnlyInternetGateway_egressOnlyInternetGatewayId,
+    deleteEgressOnlyInternetGatewayResponse_returnCode,
+    deleteEgressOnlyInternetGatewayResponse_httpStatus,
+
+    -- ** DeleteFleets
+    deleteFleets_dryRun,
+    deleteFleets_fleetIds,
+    deleteFleets_terminateInstances,
+    deleteFleetsResponse_successfulFleetDeletions,
+    deleteFleetsResponse_unsuccessfulFleetDeletions,
+    deleteFleetsResponse_httpStatus,
+
+    -- ** DeleteFlowLogs
+    deleteFlowLogs_dryRun,
+    deleteFlowLogs_flowLogIds,
+    deleteFlowLogsResponse_unsuccessful,
+    deleteFlowLogsResponse_httpStatus,
+
+    -- ** DeleteFpgaImage
+    deleteFpgaImage_dryRun,
+    deleteFpgaImage_fpgaImageId,
+    deleteFpgaImageResponse_return,
+    deleteFpgaImageResponse_httpStatus,
+
+    -- ** DeleteInstanceEventWindow
+    deleteInstanceEventWindow_dryRun,
+    deleteInstanceEventWindow_forceDelete,
+    deleteInstanceEventWindow_instanceEventWindowId,
+    deleteInstanceEventWindowResponse_instanceEventWindowState,
+    deleteInstanceEventWindowResponse_httpStatus,
+
+    -- ** DeleteInternetGateway
+    deleteInternetGateway_dryRun,
+    deleteInternetGateway_internetGatewayId,
+
+    -- ** DeleteIpam
+    deleteIpam_cascade,
+    deleteIpam_dryRun,
+    deleteIpam_ipamId,
+    deleteIpamResponse_ipam,
+    deleteIpamResponse_httpStatus,
+
+    -- ** DeleteIpamPool
+    deleteIpamPool_dryRun,
+    deleteIpamPool_ipamPoolId,
+    deleteIpamPoolResponse_ipamPool,
+    deleteIpamPoolResponse_httpStatus,
+
+    -- ** DeleteIpamScope
+    deleteIpamScope_dryRun,
+    deleteIpamScope_ipamScopeId,
+    deleteIpamScopeResponse_ipamScope,
+    deleteIpamScopeResponse_httpStatus,
+
+    -- ** DeleteKeyPair
+    deleteKeyPair_dryRun,
+    deleteKeyPair_keyName,
+    deleteKeyPair_keyPairId,
+
+    -- ** DeleteLaunchTemplate
+    deleteLaunchTemplate_dryRun,
+    deleteLaunchTemplate_launchTemplateId,
+    deleteLaunchTemplate_launchTemplateName,
+    deleteLaunchTemplateResponse_launchTemplate,
+    deleteLaunchTemplateResponse_httpStatus,
+
+    -- ** DeleteLaunchTemplateVersions
+    deleteLaunchTemplateVersions_dryRun,
+    deleteLaunchTemplateVersions_launchTemplateId,
+    deleteLaunchTemplateVersions_launchTemplateName,
+    deleteLaunchTemplateVersions_versions,
+    deleteLaunchTemplateVersionsResponse_successfullyDeletedLaunchTemplateVersions,
+    deleteLaunchTemplateVersionsResponse_unsuccessfullyDeletedLaunchTemplateVersions,
+    deleteLaunchTemplateVersionsResponse_httpStatus,
+
+    -- ** DeleteLocalGatewayRoute
+    deleteLocalGatewayRoute_dryRun,
+    deleteLocalGatewayRoute_destinationCidrBlock,
+    deleteLocalGatewayRoute_localGatewayRouteTableId,
+    deleteLocalGatewayRouteResponse_route,
+    deleteLocalGatewayRouteResponse_httpStatus,
+
+    -- ** DeleteLocalGatewayRouteTable
+    deleteLocalGatewayRouteTable_dryRun,
+    deleteLocalGatewayRouteTable_localGatewayRouteTableId,
+    deleteLocalGatewayRouteTableResponse_localGatewayRouteTable,
+    deleteLocalGatewayRouteTableResponse_httpStatus,
+
+    -- ** DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_dryRun,
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId,
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_localGatewayRouteTableVirtualInterfaceGroupAssociation,
+    deleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse_httpStatus,
+
+    -- ** DeleteLocalGatewayRouteTableVpcAssociation
+    deleteLocalGatewayRouteTableVpcAssociation_dryRun,
+    deleteLocalGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId,
+    deleteLocalGatewayRouteTableVpcAssociationResponse_localGatewayRouteTableVpcAssociation,
+    deleteLocalGatewayRouteTableVpcAssociationResponse_httpStatus,
+
+    -- ** DeleteManagedPrefixList
+    deleteManagedPrefixList_dryRun,
+    deleteManagedPrefixList_prefixListId,
+    deleteManagedPrefixListResponse_prefixList,
+    deleteManagedPrefixListResponse_httpStatus,
+
+    -- ** DeleteNatGateway
+    deleteNatGateway_dryRun,
+    deleteNatGateway_natGatewayId,
+    deleteNatGatewayResponse_natGatewayId,
+    deleteNatGatewayResponse_httpStatus,
+
+    -- ** DeleteNetworkAcl
+    deleteNetworkAcl_dryRun,
+    deleteNetworkAcl_networkAclId,
+
+    -- ** DeleteNetworkAclEntry
+    deleteNetworkAclEntry_dryRun,
+    deleteNetworkAclEntry_egress,
+    deleteNetworkAclEntry_networkAclId,
+    deleteNetworkAclEntry_ruleNumber,
+
+    -- ** DeleteNetworkInsightsAccessScope
+    deleteNetworkInsightsAccessScope_dryRun,
+    deleteNetworkInsightsAccessScope_networkInsightsAccessScopeId,
+    deleteNetworkInsightsAccessScopeResponse_networkInsightsAccessScopeId,
+    deleteNetworkInsightsAccessScopeResponse_httpStatus,
+
+    -- ** DeleteNetworkInsightsAccessScopeAnalysis
+    deleteNetworkInsightsAccessScopeAnalysis_dryRun,
+    deleteNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId,
+    deleteNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysisId,
+    deleteNetworkInsightsAccessScopeAnalysisResponse_httpStatus,
+
+    -- ** DeleteNetworkInsightsAnalysis
+    deleteNetworkInsightsAnalysis_dryRun,
+    deleteNetworkInsightsAnalysis_networkInsightsAnalysisId,
+    deleteNetworkInsightsAnalysisResponse_networkInsightsAnalysisId,
+    deleteNetworkInsightsAnalysisResponse_httpStatus,
+
+    -- ** DeleteNetworkInsightsPath
+    deleteNetworkInsightsPath_dryRun,
+    deleteNetworkInsightsPath_networkInsightsPathId,
+    deleteNetworkInsightsPathResponse_networkInsightsPathId,
+    deleteNetworkInsightsPathResponse_httpStatus,
+
+    -- ** DeleteNetworkInterface
+    deleteNetworkInterface_dryRun,
+    deleteNetworkInterface_networkInterfaceId,
+
+    -- ** DeleteNetworkInterfacePermission
+    deleteNetworkInterfacePermission_dryRun,
+    deleteNetworkInterfacePermission_force,
+    deleteNetworkInterfacePermission_networkInterfacePermissionId,
+    deleteNetworkInterfacePermissionResponse_return,
+    deleteNetworkInterfacePermissionResponse_httpStatus,
+
+    -- ** DeletePlacementGroup
+    deletePlacementGroup_dryRun,
+    deletePlacementGroup_groupName,
+
+    -- ** DeletePublicIpv4Pool
+    deletePublicIpv4Pool_dryRun,
+    deletePublicIpv4Pool_poolId,
+    deletePublicIpv4PoolResponse_returnValue,
+    deletePublicIpv4PoolResponse_httpStatus,
+
+    -- ** DeleteQueuedReservedInstances
+    deleteQueuedReservedInstances_dryRun,
+    deleteQueuedReservedInstances_reservedInstancesIds,
+    deleteQueuedReservedInstancesResponse_failedQueuedPurchaseDeletions,
+    deleteQueuedReservedInstancesResponse_successfulQueuedPurchaseDeletions,
+    deleteQueuedReservedInstancesResponse_httpStatus,
+
+    -- ** DeleteRoute
+    deleteRoute_destinationCidrBlock,
+    deleteRoute_destinationIpv6CidrBlock,
+    deleteRoute_destinationPrefixListId,
+    deleteRoute_dryRun,
+    deleteRoute_routeTableId,
+
+    -- ** DeleteRouteTable
+    deleteRouteTable_dryRun,
+    deleteRouteTable_routeTableId,
+
+    -- ** DeleteSecurityGroup
+    deleteSecurityGroup_dryRun,
+    deleteSecurityGroup_groupId,
+    deleteSecurityGroup_groupName,
+
+    -- ** DeleteSnapshot
+    deleteSnapshot_dryRun,
+    deleteSnapshot_snapshotId,
+
+    -- ** DeleteSpotDatafeedSubscription
+    deleteSpotDatafeedSubscription_dryRun,
+
+    -- ** DeleteSubnet
+    deleteSubnet_dryRun,
+    deleteSubnet_subnetId,
+
+    -- ** DeleteSubnetCidrReservation
+    deleteSubnetCidrReservation_dryRun,
+    deleteSubnetCidrReservation_subnetCidrReservationId,
+    deleteSubnetCidrReservationResponse_deletedSubnetCidrReservation,
+    deleteSubnetCidrReservationResponse_httpStatus,
+
+    -- ** DeleteTags
+    deleteTags_dryRun,
+    deleteTags_tags,
+    deleteTags_resources,
+
+    -- ** DeleteTrafficMirrorFilter
+    deleteTrafficMirrorFilter_dryRun,
+    deleteTrafficMirrorFilter_trafficMirrorFilterId,
+    deleteTrafficMirrorFilterResponse_trafficMirrorFilterId,
+    deleteTrafficMirrorFilterResponse_httpStatus,
+
+    -- ** DeleteTrafficMirrorFilterRule
+    deleteTrafficMirrorFilterRule_dryRun,
+    deleteTrafficMirrorFilterRule_trafficMirrorFilterRuleId,
+    deleteTrafficMirrorFilterRuleResponse_trafficMirrorFilterRuleId,
+    deleteTrafficMirrorFilterRuleResponse_httpStatus,
+
+    -- ** DeleteTrafficMirrorSession
+    deleteTrafficMirrorSession_dryRun,
+    deleteTrafficMirrorSession_trafficMirrorSessionId,
+    deleteTrafficMirrorSessionResponse_trafficMirrorSessionId,
+    deleteTrafficMirrorSessionResponse_httpStatus,
+
+    -- ** DeleteTrafficMirrorTarget
+    deleteTrafficMirrorTarget_dryRun,
+    deleteTrafficMirrorTarget_trafficMirrorTargetId,
+    deleteTrafficMirrorTargetResponse_trafficMirrorTargetId,
+    deleteTrafficMirrorTargetResponse_httpStatus,
+
+    -- ** DeleteTransitGateway
+    deleteTransitGateway_dryRun,
+    deleteTransitGateway_transitGatewayId,
+    deleteTransitGatewayResponse_transitGateway,
+    deleteTransitGatewayResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayConnect
+    deleteTransitGatewayConnect_dryRun,
+    deleteTransitGatewayConnect_transitGatewayAttachmentId,
+    deleteTransitGatewayConnectResponse_transitGatewayConnect,
+    deleteTransitGatewayConnectResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayConnectPeer
+    deleteTransitGatewayConnectPeer_dryRun,
+    deleteTransitGatewayConnectPeer_transitGatewayConnectPeerId,
+    deleteTransitGatewayConnectPeerResponse_transitGatewayConnectPeer,
+    deleteTransitGatewayConnectPeerResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayMulticastDomain
+    deleteTransitGatewayMulticastDomain_dryRun,
+    deleteTransitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+    deleteTransitGatewayMulticastDomainResponse_transitGatewayMulticastDomain,
+    deleteTransitGatewayMulticastDomainResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayPeeringAttachment
+    deleteTransitGatewayPeeringAttachment_dryRun,
+    deleteTransitGatewayPeeringAttachment_transitGatewayAttachmentId,
+    deleteTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    deleteTransitGatewayPeeringAttachmentResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayPolicyTable
+    deleteTransitGatewayPolicyTable_dryRun,
+    deleteTransitGatewayPolicyTable_transitGatewayPolicyTableId,
+    deleteTransitGatewayPolicyTableResponse_transitGatewayPolicyTable,
+    deleteTransitGatewayPolicyTableResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayPrefixListReference
+    deleteTransitGatewayPrefixListReference_dryRun,
+    deleteTransitGatewayPrefixListReference_transitGatewayRouteTableId,
+    deleteTransitGatewayPrefixListReference_prefixListId,
+    deleteTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference,
+    deleteTransitGatewayPrefixListReferenceResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayRoute
+    deleteTransitGatewayRoute_dryRun,
+    deleteTransitGatewayRoute_transitGatewayRouteTableId,
+    deleteTransitGatewayRoute_destinationCidrBlock,
+    deleteTransitGatewayRouteResponse_route,
+    deleteTransitGatewayRouteResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayRouteTable
+    deleteTransitGatewayRouteTable_dryRun,
+    deleteTransitGatewayRouteTable_transitGatewayRouteTableId,
+    deleteTransitGatewayRouteTableResponse_transitGatewayRouteTable,
+    deleteTransitGatewayRouteTableResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayRouteTableAnnouncement
+    deleteTransitGatewayRouteTableAnnouncement_dryRun,
+    deleteTransitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId,
+    deleteTransitGatewayRouteTableAnnouncementResponse_transitGatewayRouteTableAnnouncement,
+    deleteTransitGatewayRouteTableAnnouncementResponse_httpStatus,
+
+    -- ** DeleteTransitGatewayVpcAttachment
+    deleteTransitGatewayVpcAttachment_dryRun,
+    deleteTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+    deleteTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    deleteTransitGatewayVpcAttachmentResponse_httpStatus,
+
+    -- ** DeleteVerifiedAccessEndpoint
+    deleteVerifiedAccessEndpoint_clientToken,
+    deleteVerifiedAccessEndpoint_dryRun,
+    deleteVerifiedAccessEndpoint_verifiedAccessEndpointId,
+    deleteVerifiedAccessEndpointResponse_verifiedAccessEndpoint,
+    deleteVerifiedAccessEndpointResponse_httpStatus,
+
+    -- ** DeleteVerifiedAccessGroup
+    deleteVerifiedAccessGroup_clientToken,
+    deleteVerifiedAccessGroup_dryRun,
+    deleteVerifiedAccessGroup_verifiedAccessGroupId,
+    deleteVerifiedAccessGroupResponse_verifiedAccessGroup,
+    deleteVerifiedAccessGroupResponse_httpStatus,
+
+    -- ** DeleteVerifiedAccessInstance
+    deleteVerifiedAccessInstance_clientToken,
+    deleteVerifiedAccessInstance_dryRun,
+    deleteVerifiedAccessInstance_verifiedAccessInstanceId,
+    deleteVerifiedAccessInstanceResponse_verifiedAccessInstance,
+    deleteVerifiedAccessInstanceResponse_httpStatus,
+
+    -- ** DeleteVerifiedAccessTrustProvider
+    deleteVerifiedAccessTrustProvider_clientToken,
+    deleteVerifiedAccessTrustProvider_dryRun,
+    deleteVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+    deleteVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    deleteVerifiedAccessTrustProviderResponse_httpStatus,
+
+    -- ** DeleteVolume
+    deleteVolume_dryRun,
+    deleteVolume_volumeId,
+
+    -- ** DeleteVpc
+    deleteVpc_dryRun,
+    deleteVpc_vpcId,
+
+    -- ** DeleteVpcEndpointConnectionNotifications
+    deleteVpcEndpointConnectionNotifications_dryRun,
+    deleteVpcEndpointConnectionNotifications_connectionNotificationIds,
+    deleteVpcEndpointConnectionNotificationsResponse_unsuccessful,
+    deleteVpcEndpointConnectionNotificationsResponse_httpStatus,
+
+    -- ** DeleteVpcEndpointServiceConfigurations
+    deleteVpcEndpointServiceConfigurations_dryRun,
+    deleteVpcEndpointServiceConfigurations_serviceIds,
+    deleteVpcEndpointServiceConfigurationsResponse_unsuccessful,
+    deleteVpcEndpointServiceConfigurationsResponse_httpStatus,
+
+    -- ** DeleteVpcEndpoints
+    deleteVpcEndpoints_dryRun,
+    deleteVpcEndpoints_vpcEndpointIds,
+    deleteVpcEndpointsResponse_unsuccessful,
+    deleteVpcEndpointsResponse_httpStatus,
+
+    -- ** DeleteVpcPeeringConnection
+    deleteVpcPeeringConnection_dryRun,
+    deleteVpcPeeringConnection_vpcPeeringConnectionId,
+    deleteVpcPeeringConnectionResponse_return,
+    deleteVpcPeeringConnectionResponse_httpStatus,
+
+    -- ** DeleteVpnConnection
+    deleteVpnConnection_dryRun,
+    deleteVpnConnection_vpnConnectionId,
+
+    -- ** DeleteVpnConnectionRoute
+    deleteVpnConnectionRoute_destinationCidrBlock,
+    deleteVpnConnectionRoute_vpnConnectionId,
+
+    -- ** DeleteVpnGateway
+    deleteVpnGateway_dryRun,
+    deleteVpnGateway_vpnGatewayId,
+
+    -- ** DeprovisionByoipCidr
+    deprovisionByoipCidr_dryRun,
+    deprovisionByoipCidr_cidr,
+    deprovisionByoipCidrResponse_byoipCidr,
+    deprovisionByoipCidrResponse_httpStatus,
+
+    -- ** DeprovisionIpamPoolCidr
+    deprovisionIpamPoolCidr_cidr,
+    deprovisionIpamPoolCidr_dryRun,
+    deprovisionIpamPoolCidr_ipamPoolId,
+    deprovisionIpamPoolCidrResponse_ipamPoolCidr,
+    deprovisionIpamPoolCidrResponse_httpStatus,
+
+    -- ** DeprovisionPublicIpv4PoolCidr
+    deprovisionPublicIpv4PoolCidr_dryRun,
+    deprovisionPublicIpv4PoolCidr_poolId,
+    deprovisionPublicIpv4PoolCidr_cidr,
+    deprovisionPublicIpv4PoolCidrResponse_deprovisionedAddresses,
+    deprovisionPublicIpv4PoolCidrResponse_poolId,
+    deprovisionPublicIpv4PoolCidrResponse_httpStatus,
+
+    -- ** DeregisterImage
+    deregisterImage_dryRun,
+    deregisterImage_imageId,
+
+    -- ** DeregisterInstanceEventNotificationAttributes
+    deregisterInstanceEventNotificationAttributes_dryRun,
+    deregisterInstanceEventNotificationAttributes_instanceTagAttribute,
+    deregisterInstanceEventNotificationAttributesResponse_instanceTagAttribute,
+    deregisterInstanceEventNotificationAttributesResponse_httpStatus,
+
+    -- ** DeregisterTransitGatewayMulticastGroupMembers
+    deregisterTransitGatewayMulticastGroupMembers_dryRun,
+    deregisterTransitGatewayMulticastGroupMembers_groupIpAddress,
+    deregisterTransitGatewayMulticastGroupMembers_networkInterfaceIds,
+    deregisterTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId,
+    deregisterTransitGatewayMulticastGroupMembersResponse_deregisteredMulticastGroupMembers,
+    deregisterTransitGatewayMulticastGroupMembersResponse_httpStatus,
+
+    -- ** DeregisterTransitGatewayMulticastGroupSources
+    deregisterTransitGatewayMulticastGroupSources_dryRun,
+    deregisterTransitGatewayMulticastGroupSources_groupIpAddress,
+    deregisterTransitGatewayMulticastGroupSources_networkInterfaceIds,
+    deregisterTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId,
+    deregisterTransitGatewayMulticastGroupSourcesResponse_deregisteredMulticastGroupSources,
+    deregisterTransitGatewayMulticastGroupSourcesResponse_httpStatus,
+
+    -- ** DescribeAccountAttributes
+    describeAccountAttributes_attributeNames,
+    describeAccountAttributes_dryRun,
+    describeAccountAttributesResponse_accountAttributes,
+    describeAccountAttributesResponse_httpStatus,
+
+    -- ** DescribeAddressTransfers
+    describeAddressTransfers_allocationIds,
+    describeAddressTransfers_dryRun,
+    describeAddressTransfers_maxResults,
+    describeAddressTransfers_nextToken,
+    describeAddressTransfersResponse_addressTransfers,
+    describeAddressTransfersResponse_nextToken,
+    describeAddressTransfersResponse_httpStatus,
+
+    -- ** DescribeAddresses
+    describeAddresses_allocationIds,
+    describeAddresses_dryRun,
+    describeAddresses_filters,
+    describeAddresses_publicIps,
+    describeAddressesResponse_addresses,
+    describeAddressesResponse_httpStatus,
+
+    -- ** DescribeAddressesAttribute
+    describeAddressesAttribute_allocationIds,
+    describeAddressesAttribute_attribute,
+    describeAddressesAttribute_dryRun,
+    describeAddressesAttribute_maxResults,
+    describeAddressesAttribute_nextToken,
+    describeAddressesAttributeResponse_addresses,
+    describeAddressesAttributeResponse_nextToken,
+    describeAddressesAttributeResponse_httpStatus,
+
+    -- ** DescribeAggregateIdFormat
+    describeAggregateIdFormat_dryRun,
+    describeAggregateIdFormatResponse_statuses,
+    describeAggregateIdFormatResponse_useLongIdsAggregated,
+    describeAggregateIdFormatResponse_httpStatus,
+
+    -- ** DescribeAvailabilityZones
+    describeAvailabilityZones_allAvailabilityZones,
+    describeAvailabilityZones_dryRun,
+    describeAvailabilityZones_filters,
+    describeAvailabilityZones_zoneIds,
+    describeAvailabilityZones_zoneNames,
+    describeAvailabilityZonesResponse_availabilityZones,
+    describeAvailabilityZonesResponse_httpStatus,
+
+    -- ** DescribeAwsNetworkPerformanceMetricSubscriptions
+    describeAwsNetworkPerformanceMetricSubscriptions_dryRun,
+    describeAwsNetworkPerformanceMetricSubscriptions_filters,
+    describeAwsNetworkPerformanceMetricSubscriptions_maxResults,
+    describeAwsNetworkPerformanceMetricSubscriptions_nextToken,
+    describeAwsNetworkPerformanceMetricSubscriptionsResponse_nextToken,
+    describeAwsNetworkPerformanceMetricSubscriptionsResponse_subscriptions,
+    describeAwsNetworkPerformanceMetricSubscriptionsResponse_httpStatus,
+
+    -- ** DescribeBundleTasks
+    describeBundleTasks_bundleIds,
+    describeBundleTasks_dryRun,
+    describeBundleTasks_filters,
+    describeBundleTasksResponse_bundleTasks,
+    describeBundleTasksResponse_httpStatus,
+
+    -- ** DescribeByoipCidrs
+    describeByoipCidrs_dryRun,
+    describeByoipCidrs_nextToken,
+    describeByoipCidrs_maxResults,
+    describeByoipCidrsResponse_byoipCidrs,
+    describeByoipCidrsResponse_nextToken,
+    describeByoipCidrsResponse_httpStatus,
+
+    -- ** DescribeCapacityReservationFleets
+    describeCapacityReservationFleets_capacityReservationFleetIds,
+    describeCapacityReservationFleets_dryRun,
+    describeCapacityReservationFleets_filters,
+    describeCapacityReservationFleets_maxResults,
+    describeCapacityReservationFleets_nextToken,
+    describeCapacityReservationFleetsResponse_capacityReservationFleets,
+    describeCapacityReservationFleetsResponse_nextToken,
+    describeCapacityReservationFleetsResponse_httpStatus,
+
+    -- ** DescribeCapacityReservations
+    describeCapacityReservations_capacityReservationIds,
+    describeCapacityReservations_dryRun,
+    describeCapacityReservations_filters,
+    describeCapacityReservations_maxResults,
+    describeCapacityReservations_nextToken,
+    describeCapacityReservationsResponse_capacityReservations,
+    describeCapacityReservationsResponse_nextToken,
+    describeCapacityReservationsResponse_httpStatus,
+
+    -- ** DescribeCarrierGateways
+    describeCarrierGateways_carrierGatewayIds,
+    describeCarrierGateways_dryRun,
+    describeCarrierGateways_filters,
+    describeCarrierGateways_maxResults,
+    describeCarrierGateways_nextToken,
+    describeCarrierGatewaysResponse_carrierGateways,
+    describeCarrierGatewaysResponse_nextToken,
+    describeCarrierGatewaysResponse_httpStatus,
+
+    -- ** DescribeClassicLinkInstances
+    describeClassicLinkInstances_dryRun,
+    describeClassicLinkInstances_filters,
+    describeClassicLinkInstances_instanceIds,
+    describeClassicLinkInstances_maxResults,
+    describeClassicLinkInstances_nextToken,
+    describeClassicLinkInstancesResponse_instances,
+    describeClassicLinkInstancesResponse_nextToken,
+    describeClassicLinkInstancesResponse_httpStatus,
+
+    -- ** DescribeClientVpnAuthorizationRules
+    describeClientVpnAuthorizationRules_dryRun,
+    describeClientVpnAuthorizationRules_filters,
+    describeClientVpnAuthorizationRules_maxResults,
+    describeClientVpnAuthorizationRules_nextToken,
+    describeClientVpnAuthorizationRules_clientVpnEndpointId,
+    describeClientVpnAuthorizationRulesResponse_authorizationRules,
+    describeClientVpnAuthorizationRulesResponse_nextToken,
+    describeClientVpnAuthorizationRulesResponse_httpStatus,
+
+    -- ** DescribeClientVpnConnections
+    describeClientVpnConnections_dryRun,
+    describeClientVpnConnections_filters,
+    describeClientVpnConnections_maxResults,
+    describeClientVpnConnections_nextToken,
+    describeClientVpnConnections_clientVpnEndpointId,
+    describeClientVpnConnectionsResponse_connections,
+    describeClientVpnConnectionsResponse_nextToken,
+    describeClientVpnConnectionsResponse_httpStatus,
+
+    -- ** DescribeClientVpnEndpoints
+    describeClientVpnEndpoints_clientVpnEndpointIds,
+    describeClientVpnEndpoints_dryRun,
+    describeClientVpnEndpoints_filters,
+    describeClientVpnEndpoints_maxResults,
+    describeClientVpnEndpoints_nextToken,
+    describeClientVpnEndpointsResponse_clientVpnEndpoints,
+    describeClientVpnEndpointsResponse_nextToken,
+    describeClientVpnEndpointsResponse_httpStatus,
+
+    -- ** DescribeClientVpnRoutes
+    describeClientVpnRoutes_dryRun,
+    describeClientVpnRoutes_filters,
+    describeClientVpnRoutes_maxResults,
+    describeClientVpnRoutes_nextToken,
+    describeClientVpnRoutes_clientVpnEndpointId,
+    describeClientVpnRoutesResponse_nextToken,
+    describeClientVpnRoutesResponse_routes,
+    describeClientVpnRoutesResponse_httpStatus,
+
+    -- ** DescribeClientVpnTargetNetworks
+    describeClientVpnTargetNetworks_associationIds,
+    describeClientVpnTargetNetworks_dryRun,
+    describeClientVpnTargetNetworks_filters,
+    describeClientVpnTargetNetworks_maxResults,
+    describeClientVpnTargetNetworks_nextToken,
+    describeClientVpnTargetNetworks_clientVpnEndpointId,
+    describeClientVpnTargetNetworksResponse_clientVpnTargetNetworks,
+    describeClientVpnTargetNetworksResponse_nextToken,
+    describeClientVpnTargetNetworksResponse_httpStatus,
+
+    -- ** DescribeCoipPools
+    describeCoipPools_dryRun,
+    describeCoipPools_filters,
+    describeCoipPools_maxResults,
+    describeCoipPools_nextToken,
+    describeCoipPools_poolIds,
+    describeCoipPoolsResponse_coipPools,
+    describeCoipPoolsResponse_nextToken,
+    describeCoipPoolsResponse_httpStatus,
+
+    -- ** DescribeConversionTasks
+    describeConversionTasks_conversionTaskIds,
+    describeConversionTasks_dryRun,
+    describeConversionTasksResponse_conversionTasks,
+    describeConversionTasksResponse_httpStatus,
+
+    -- ** DescribeCustomerGateways
+    describeCustomerGateways_customerGatewayIds,
+    describeCustomerGateways_dryRun,
+    describeCustomerGateways_filters,
+    describeCustomerGatewaysResponse_customerGateways,
+    describeCustomerGatewaysResponse_httpStatus,
+
+    -- ** DescribeDhcpOptions
+    describeDhcpOptions_dhcpOptionsIds,
+    describeDhcpOptions_dryRun,
+    describeDhcpOptions_filters,
+    describeDhcpOptions_maxResults,
+    describeDhcpOptions_nextToken,
+    describeDhcpOptionsResponse_dhcpOptions,
+    describeDhcpOptionsResponse_nextToken,
+    describeDhcpOptionsResponse_httpStatus,
+
+    -- ** DescribeEgressOnlyInternetGateways
+    describeEgressOnlyInternetGateways_dryRun,
+    describeEgressOnlyInternetGateways_egressOnlyInternetGatewayIds,
+    describeEgressOnlyInternetGateways_filters,
+    describeEgressOnlyInternetGateways_maxResults,
+    describeEgressOnlyInternetGateways_nextToken,
+    describeEgressOnlyInternetGatewaysResponse_egressOnlyInternetGateways,
+    describeEgressOnlyInternetGatewaysResponse_nextToken,
+    describeEgressOnlyInternetGatewaysResponse_httpStatus,
+
+    -- ** DescribeElasticGpus
+    describeElasticGpus_dryRun,
+    describeElasticGpus_elasticGpuIds,
+    describeElasticGpus_filters,
+    describeElasticGpus_maxResults,
+    describeElasticGpus_nextToken,
+    describeElasticGpusResponse_elasticGpuSet,
+    describeElasticGpusResponse_maxResults,
+    describeElasticGpusResponse_nextToken,
+    describeElasticGpusResponse_httpStatus,
+
+    -- ** DescribeExportImageTasks
+    describeExportImageTasks_dryRun,
+    describeExportImageTasks_exportImageTaskIds,
+    describeExportImageTasks_filters,
+    describeExportImageTasks_maxResults,
+    describeExportImageTasks_nextToken,
+    describeExportImageTasksResponse_exportImageTasks,
+    describeExportImageTasksResponse_nextToken,
+    describeExportImageTasksResponse_httpStatus,
+
+    -- ** DescribeExportTasks
+    describeExportTasks_exportTaskIds,
+    describeExportTasks_filters,
+    describeExportTasksResponse_exportTasks,
+    describeExportTasksResponse_httpStatus,
+
+    -- ** DescribeFastLaunchImages
+    describeFastLaunchImages_dryRun,
+    describeFastLaunchImages_filters,
+    describeFastLaunchImages_imageIds,
+    describeFastLaunchImages_maxResults,
+    describeFastLaunchImages_nextToken,
+    describeFastLaunchImagesResponse_fastLaunchImages,
+    describeFastLaunchImagesResponse_nextToken,
+    describeFastLaunchImagesResponse_httpStatus,
+
+    -- ** DescribeFastSnapshotRestores
+    describeFastSnapshotRestores_dryRun,
+    describeFastSnapshotRestores_filters,
+    describeFastSnapshotRestores_maxResults,
+    describeFastSnapshotRestores_nextToken,
+    describeFastSnapshotRestoresResponse_fastSnapshotRestores,
+    describeFastSnapshotRestoresResponse_nextToken,
+    describeFastSnapshotRestoresResponse_httpStatus,
+
+    -- ** DescribeFleetHistory
+    describeFleetHistory_dryRun,
+    describeFleetHistory_eventType,
+    describeFleetHistory_maxResults,
+    describeFleetHistory_nextToken,
+    describeFleetHistory_fleetId,
+    describeFleetHistory_startTime,
+    describeFleetHistoryResponse_fleetId,
+    describeFleetHistoryResponse_historyRecords,
+    describeFleetHistoryResponse_lastEvaluatedTime,
+    describeFleetHistoryResponse_nextToken,
+    describeFleetHistoryResponse_startTime,
+    describeFleetHistoryResponse_httpStatus,
+
+    -- ** DescribeFleetInstances
+    describeFleetInstances_dryRun,
+    describeFleetInstances_filters,
+    describeFleetInstances_maxResults,
+    describeFleetInstances_nextToken,
+    describeFleetInstances_fleetId,
+    describeFleetInstancesResponse_activeInstances,
+    describeFleetInstancesResponse_fleetId,
+    describeFleetInstancesResponse_nextToken,
+    describeFleetInstancesResponse_httpStatus,
+
+    -- ** DescribeFleets
+    describeFleets_dryRun,
+    describeFleets_filters,
+    describeFleets_fleetIds,
+    describeFleets_maxResults,
+    describeFleets_nextToken,
+    describeFleetsResponse_fleets,
+    describeFleetsResponse_nextToken,
+    describeFleetsResponse_httpStatus,
+
+    -- ** DescribeFlowLogs
+    describeFlowLogs_dryRun,
+    describeFlowLogs_filter,
+    describeFlowLogs_flowLogIds,
+    describeFlowLogs_maxResults,
+    describeFlowLogs_nextToken,
+    describeFlowLogsResponse_flowLogs,
+    describeFlowLogsResponse_nextToken,
+    describeFlowLogsResponse_httpStatus,
+
+    -- ** DescribeFpgaImageAttribute
+    describeFpgaImageAttribute_dryRun,
+    describeFpgaImageAttribute_fpgaImageId,
+    describeFpgaImageAttribute_attribute,
+    describeFpgaImageAttributeResponse_fpgaImageAttribute,
+    describeFpgaImageAttributeResponse_httpStatus,
+
+    -- ** DescribeFpgaImages
+    describeFpgaImages_dryRun,
+    describeFpgaImages_filters,
+    describeFpgaImages_fpgaImageIds,
+    describeFpgaImages_maxResults,
+    describeFpgaImages_nextToken,
+    describeFpgaImages_owners,
+    describeFpgaImagesResponse_fpgaImages,
+    describeFpgaImagesResponse_nextToken,
+    describeFpgaImagesResponse_httpStatus,
+
+    -- ** DescribeHostReservationOfferings
+    describeHostReservationOfferings_filter,
+    describeHostReservationOfferings_maxDuration,
+    describeHostReservationOfferings_maxResults,
+    describeHostReservationOfferings_minDuration,
+    describeHostReservationOfferings_nextToken,
+    describeHostReservationOfferings_offeringId,
+    describeHostReservationOfferingsResponse_nextToken,
+    describeHostReservationOfferingsResponse_offeringSet,
+    describeHostReservationOfferingsResponse_httpStatus,
+
+    -- ** DescribeHostReservations
+    describeHostReservations_filter,
+    describeHostReservations_hostReservationIdSet,
+    describeHostReservations_maxResults,
+    describeHostReservations_nextToken,
+    describeHostReservationsResponse_hostReservationSet,
+    describeHostReservationsResponse_nextToken,
+    describeHostReservationsResponse_httpStatus,
+
+    -- ** DescribeHosts
+    describeHosts_filter,
+    describeHosts_hostIds,
+    describeHosts_maxResults,
+    describeHosts_nextToken,
+    describeHostsResponse_hosts,
+    describeHostsResponse_nextToken,
+    describeHostsResponse_httpStatus,
+
+    -- ** DescribeIamInstanceProfileAssociations
+    describeIamInstanceProfileAssociations_associationIds,
+    describeIamInstanceProfileAssociations_filters,
+    describeIamInstanceProfileAssociations_maxResults,
+    describeIamInstanceProfileAssociations_nextToken,
+    describeIamInstanceProfileAssociationsResponse_iamInstanceProfileAssociations,
+    describeIamInstanceProfileAssociationsResponse_nextToken,
+    describeIamInstanceProfileAssociationsResponse_httpStatus,
+
+    -- ** DescribeIdFormat
+    describeIdFormat_resource,
+    describeIdFormatResponse_statuses,
+    describeIdFormatResponse_httpStatus,
+
+    -- ** DescribeIdentityIdFormat
+    describeIdentityIdFormat_resource,
+    describeIdentityIdFormat_principalArn,
+    describeIdentityIdFormatResponse_statuses,
+    describeIdentityIdFormatResponse_httpStatus,
+
+    -- ** DescribeImageAttribute
+    describeImageAttribute_dryRun,
+    describeImageAttribute_attribute,
+    describeImageAttribute_imageId,
+    describeImageAttributeResponse_blockDeviceMappings,
+    describeImageAttributeResponse_bootMode,
+    describeImageAttributeResponse_description,
+    describeImageAttributeResponse_imageId,
+    describeImageAttributeResponse_imdsSupport,
+    describeImageAttributeResponse_kernelId,
+    describeImageAttributeResponse_lastLaunchedTime,
+    describeImageAttributeResponse_launchPermissions,
+    describeImageAttributeResponse_productCodes,
+    describeImageAttributeResponse_ramdiskId,
+    describeImageAttributeResponse_sriovNetSupport,
+    describeImageAttributeResponse_tpmSupport,
+    describeImageAttributeResponse_uefiData,
+    describeImageAttributeResponse_httpStatus,
+
+    -- ** DescribeImages
+    describeImages_dryRun,
+    describeImages_executableUsers,
+    describeImages_filters,
+    describeImages_imageIds,
+    describeImages_includeDeprecated,
+    describeImages_maxResults,
+    describeImages_nextToken,
+    describeImages_owners,
+    describeImagesResponse_images,
+    describeImagesResponse_nextToken,
+    describeImagesResponse_httpStatus,
+
+    -- ** DescribeImportImageTasks
+    describeImportImageTasks_dryRun,
+    describeImportImageTasks_filters,
+    describeImportImageTasks_importTaskIds,
+    describeImportImageTasks_maxResults,
+    describeImportImageTasks_nextToken,
+    describeImportImageTasksResponse_importImageTasks,
+    describeImportImageTasksResponse_nextToken,
+    describeImportImageTasksResponse_httpStatus,
+
+    -- ** DescribeImportSnapshotTasks
+    describeImportSnapshotTasks_dryRun,
+    describeImportSnapshotTasks_filters,
+    describeImportSnapshotTasks_importTaskIds,
+    describeImportSnapshotTasks_maxResults,
+    describeImportSnapshotTasks_nextToken,
+    describeImportSnapshotTasksResponse_importSnapshotTasks,
+    describeImportSnapshotTasksResponse_nextToken,
+    describeImportSnapshotTasksResponse_httpStatus,
+
+    -- ** DescribeInstanceAttribute
+    describeInstanceAttribute_dryRun,
+    describeInstanceAttribute_attribute,
+    describeInstanceAttribute_instanceId,
+    describeInstanceAttributeResponse_blockDeviceMappings,
+    describeInstanceAttributeResponse_disableApiStop,
+    describeInstanceAttributeResponse_disableApiTermination,
+    describeInstanceAttributeResponse_ebsOptimized,
+    describeInstanceAttributeResponse_enaSupport,
+    describeInstanceAttributeResponse_enclaveOptions,
+    describeInstanceAttributeResponse_groups,
+    describeInstanceAttributeResponse_instanceId,
+    describeInstanceAttributeResponse_instanceInitiatedShutdownBehavior,
+    describeInstanceAttributeResponse_instanceType,
+    describeInstanceAttributeResponse_kernelId,
+    describeInstanceAttributeResponse_productCodes,
+    describeInstanceAttributeResponse_ramdiskId,
+    describeInstanceAttributeResponse_rootDeviceName,
+    describeInstanceAttributeResponse_sourceDestCheck,
+    describeInstanceAttributeResponse_sriovNetSupport,
+    describeInstanceAttributeResponse_userData,
+    describeInstanceAttributeResponse_httpStatus,
+
+    -- ** DescribeInstanceCreditSpecifications
+    describeInstanceCreditSpecifications_dryRun,
+    describeInstanceCreditSpecifications_filters,
+    describeInstanceCreditSpecifications_instanceIds,
+    describeInstanceCreditSpecifications_maxResults,
+    describeInstanceCreditSpecifications_nextToken,
+    describeInstanceCreditSpecificationsResponse_instanceCreditSpecifications,
+    describeInstanceCreditSpecificationsResponse_nextToken,
+    describeInstanceCreditSpecificationsResponse_httpStatus,
+
+    -- ** DescribeInstanceEventNotificationAttributes
+    describeInstanceEventNotificationAttributes_dryRun,
+    describeInstanceEventNotificationAttributesResponse_instanceTagAttribute,
+    describeInstanceEventNotificationAttributesResponse_httpStatus,
+
+    -- ** DescribeInstanceEventWindows
+    describeInstanceEventWindows_dryRun,
+    describeInstanceEventWindows_filters,
+    describeInstanceEventWindows_instanceEventWindowIds,
+    describeInstanceEventWindows_maxResults,
+    describeInstanceEventWindows_nextToken,
+    describeInstanceEventWindowsResponse_instanceEventWindows,
+    describeInstanceEventWindowsResponse_nextToken,
+    describeInstanceEventWindowsResponse_httpStatus,
+
+    -- ** DescribeInstanceStatus
+    describeInstanceStatus_dryRun,
+    describeInstanceStatus_filters,
+    describeInstanceStatus_includeAllInstances,
+    describeInstanceStatus_instanceIds,
+    describeInstanceStatus_maxResults,
+    describeInstanceStatus_nextToken,
+    describeInstanceStatusResponse_instanceStatuses,
+    describeInstanceStatusResponse_nextToken,
+    describeInstanceStatusResponse_httpStatus,
+
+    -- ** DescribeInstanceTypeOfferings
+    describeInstanceTypeOfferings_dryRun,
+    describeInstanceTypeOfferings_filters,
+    describeInstanceTypeOfferings_locationType,
+    describeInstanceTypeOfferings_maxResults,
+    describeInstanceTypeOfferings_nextToken,
+    describeInstanceTypeOfferingsResponse_instanceTypeOfferings,
+    describeInstanceTypeOfferingsResponse_nextToken,
+    describeInstanceTypeOfferingsResponse_httpStatus,
+
+    -- ** DescribeInstanceTypes
+    describeInstanceTypes_dryRun,
+    describeInstanceTypes_filters,
+    describeInstanceTypes_instanceTypes,
+    describeInstanceTypes_maxResults,
+    describeInstanceTypes_nextToken,
+    describeInstanceTypesResponse_instanceTypes,
+    describeInstanceTypesResponse_nextToken,
+    describeInstanceTypesResponse_httpStatus,
+
+    -- ** DescribeInstances
+    describeInstances_dryRun,
+    describeInstances_filters,
+    describeInstances_instanceIds,
+    describeInstances_maxResults,
+    describeInstances_nextToken,
+    describeInstancesResponse_nextToken,
+    describeInstancesResponse_reservations,
+    describeInstancesResponse_httpStatus,
+
+    -- ** DescribeInternetGateways
+    describeInternetGateways_dryRun,
+    describeInternetGateways_filters,
+    describeInternetGateways_internetGatewayIds,
+    describeInternetGateways_maxResults,
+    describeInternetGateways_nextToken,
+    describeInternetGatewaysResponse_internetGateways,
+    describeInternetGatewaysResponse_nextToken,
+    describeInternetGatewaysResponse_httpStatus,
+
+    -- ** DescribeIpamPools
+    describeIpamPools_dryRun,
+    describeIpamPools_filters,
+    describeIpamPools_ipamPoolIds,
+    describeIpamPools_maxResults,
+    describeIpamPools_nextToken,
+    describeIpamPoolsResponse_ipamPools,
+    describeIpamPoolsResponse_nextToken,
+    describeIpamPoolsResponse_httpStatus,
+
+    -- ** DescribeIpamScopes
+    describeIpamScopes_dryRun,
+    describeIpamScopes_filters,
+    describeIpamScopes_ipamScopeIds,
+    describeIpamScopes_maxResults,
+    describeIpamScopes_nextToken,
+    describeIpamScopesResponse_ipamScopes,
+    describeIpamScopesResponse_nextToken,
+    describeIpamScopesResponse_httpStatus,
+
+    -- ** DescribeIpams
+    describeIpams_dryRun,
+    describeIpams_filters,
+    describeIpams_ipamIds,
+    describeIpams_maxResults,
+    describeIpams_nextToken,
+    describeIpamsResponse_ipams,
+    describeIpamsResponse_nextToken,
+    describeIpamsResponse_httpStatus,
+
+    -- ** DescribeIpv6Pools
+    describeIpv6Pools_dryRun,
+    describeIpv6Pools_filters,
+    describeIpv6Pools_maxResults,
+    describeIpv6Pools_nextToken,
+    describeIpv6Pools_poolIds,
+    describeIpv6PoolsResponse_ipv6Pools,
+    describeIpv6PoolsResponse_nextToken,
+    describeIpv6PoolsResponse_httpStatus,
+
+    -- ** DescribeKeyPairs
+    describeKeyPairs_dryRun,
+    describeKeyPairs_filters,
+    describeKeyPairs_includePublicKey,
+    describeKeyPairs_keyNames,
+    describeKeyPairs_keyPairIds,
+    describeKeyPairsResponse_keyPairs,
+    describeKeyPairsResponse_httpStatus,
+
+    -- ** DescribeLaunchTemplateVersions
+    describeLaunchTemplateVersions_dryRun,
+    describeLaunchTemplateVersions_filters,
+    describeLaunchTemplateVersions_launchTemplateId,
+    describeLaunchTemplateVersions_launchTemplateName,
+    describeLaunchTemplateVersions_maxResults,
+    describeLaunchTemplateVersions_maxVersion,
+    describeLaunchTemplateVersions_minVersion,
+    describeLaunchTemplateVersions_nextToken,
+    describeLaunchTemplateVersions_versions,
+    describeLaunchTemplateVersionsResponse_launchTemplateVersions,
+    describeLaunchTemplateVersionsResponse_nextToken,
+    describeLaunchTemplateVersionsResponse_httpStatus,
+
+    -- ** DescribeLaunchTemplates
+    describeLaunchTemplates_dryRun,
+    describeLaunchTemplates_filters,
+    describeLaunchTemplates_launchTemplateIds,
+    describeLaunchTemplates_launchTemplateNames,
+    describeLaunchTemplates_maxResults,
+    describeLaunchTemplates_nextToken,
+    describeLaunchTemplatesResponse_launchTemplates,
+    describeLaunchTemplatesResponse_nextToken,
+    describeLaunchTemplatesResponse_httpStatus,
+
+    -- ** DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_dryRun,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_filters,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_localGatewayRouteTableVirtualInterfaceGroupAssociationIds,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_maxResults,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociations_nextToken,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_localGatewayRouteTableVirtualInterfaceGroupAssociations,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_nextToken,
+    describeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse_httpStatus,
+
+    -- ** DescribeLocalGatewayRouteTableVpcAssociations
+    describeLocalGatewayRouteTableVpcAssociations_dryRun,
+    describeLocalGatewayRouteTableVpcAssociations_filters,
+    describeLocalGatewayRouteTableVpcAssociations_localGatewayRouteTableVpcAssociationIds,
+    describeLocalGatewayRouteTableVpcAssociations_maxResults,
+    describeLocalGatewayRouteTableVpcAssociations_nextToken,
+    describeLocalGatewayRouteTableVpcAssociationsResponse_localGatewayRouteTableVpcAssociations,
+    describeLocalGatewayRouteTableVpcAssociationsResponse_nextToken,
+    describeLocalGatewayRouteTableVpcAssociationsResponse_httpStatus,
+
+    -- ** DescribeLocalGatewayRouteTables
+    describeLocalGatewayRouteTables_dryRun,
+    describeLocalGatewayRouteTables_filters,
+    describeLocalGatewayRouteTables_localGatewayRouteTableIds,
+    describeLocalGatewayRouteTables_maxResults,
+    describeLocalGatewayRouteTables_nextToken,
+    describeLocalGatewayRouteTablesResponse_localGatewayRouteTables,
+    describeLocalGatewayRouteTablesResponse_nextToken,
+    describeLocalGatewayRouteTablesResponse_httpStatus,
+
+    -- ** DescribeLocalGatewayVirtualInterfaceGroups
+    describeLocalGatewayVirtualInterfaceGroups_dryRun,
+    describeLocalGatewayVirtualInterfaceGroups_filters,
+    describeLocalGatewayVirtualInterfaceGroups_localGatewayVirtualInterfaceGroupIds,
+    describeLocalGatewayVirtualInterfaceGroups_maxResults,
+    describeLocalGatewayVirtualInterfaceGroups_nextToken,
+    describeLocalGatewayVirtualInterfaceGroupsResponse_localGatewayVirtualInterfaceGroups,
+    describeLocalGatewayVirtualInterfaceGroupsResponse_nextToken,
+    describeLocalGatewayVirtualInterfaceGroupsResponse_httpStatus,
+
+    -- ** DescribeLocalGatewayVirtualInterfaces
+    describeLocalGatewayVirtualInterfaces_dryRun,
+    describeLocalGatewayVirtualInterfaces_filters,
+    describeLocalGatewayVirtualInterfaces_localGatewayVirtualInterfaceIds,
+    describeLocalGatewayVirtualInterfaces_maxResults,
+    describeLocalGatewayVirtualInterfaces_nextToken,
+    describeLocalGatewayVirtualInterfacesResponse_localGatewayVirtualInterfaces,
+    describeLocalGatewayVirtualInterfacesResponse_nextToken,
+    describeLocalGatewayVirtualInterfacesResponse_httpStatus,
+
+    -- ** DescribeLocalGateways
+    describeLocalGateways_dryRun,
+    describeLocalGateways_filters,
+    describeLocalGateways_localGatewayIds,
+    describeLocalGateways_maxResults,
+    describeLocalGateways_nextToken,
+    describeLocalGatewaysResponse_localGateways,
+    describeLocalGatewaysResponse_nextToken,
+    describeLocalGatewaysResponse_httpStatus,
+
+    -- ** DescribeManagedPrefixLists
+    describeManagedPrefixLists_dryRun,
+    describeManagedPrefixLists_filters,
+    describeManagedPrefixLists_maxResults,
+    describeManagedPrefixLists_nextToken,
+    describeManagedPrefixLists_prefixListIds,
+    describeManagedPrefixListsResponse_nextToken,
+    describeManagedPrefixListsResponse_prefixLists,
+    describeManagedPrefixListsResponse_httpStatus,
+
+    -- ** DescribeMovingAddresses
+    describeMovingAddresses_dryRun,
+    describeMovingAddresses_filters,
+    describeMovingAddresses_maxResults,
+    describeMovingAddresses_nextToken,
+    describeMovingAddresses_publicIps,
+    describeMovingAddressesResponse_movingAddressStatuses,
+    describeMovingAddressesResponse_nextToken,
+    describeMovingAddressesResponse_httpStatus,
+
+    -- ** DescribeNatGateways
+    describeNatGateways_dryRun,
+    describeNatGateways_filter,
+    describeNatGateways_maxResults,
+    describeNatGateways_natGatewayIds,
+    describeNatGateways_nextToken,
+    describeNatGatewaysResponse_natGateways,
+    describeNatGatewaysResponse_nextToken,
+    describeNatGatewaysResponse_httpStatus,
+
+    -- ** DescribeNetworkAcls
+    describeNetworkAcls_dryRun,
+    describeNetworkAcls_filters,
+    describeNetworkAcls_maxResults,
+    describeNetworkAcls_networkAclIds,
+    describeNetworkAcls_nextToken,
+    describeNetworkAclsResponse_networkAcls,
+    describeNetworkAclsResponse_nextToken,
+    describeNetworkAclsResponse_httpStatus,
+
+    -- ** DescribeNetworkInsightsAccessScopeAnalyses
+    describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeBegin,
+    describeNetworkInsightsAccessScopeAnalyses_analysisStartTimeEnd,
+    describeNetworkInsightsAccessScopeAnalyses_dryRun,
+    describeNetworkInsightsAccessScopeAnalyses_filters,
+    describeNetworkInsightsAccessScopeAnalyses_maxResults,
+    describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeAnalysisIds,
+    describeNetworkInsightsAccessScopeAnalyses_networkInsightsAccessScopeId,
+    describeNetworkInsightsAccessScopeAnalyses_nextToken,
+    describeNetworkInsightsAccessScopeAnalysesResponse_networkInsightsAccessScopeAnalyses,
+    describeNetworkInsightsAccessScopeAnalysesResponse_nextToken,
+    describeNetworkInsightsAccessScopeAnalysesResponse_httpStatus,
+
+    -- ** DescribeNetworkInsightsAccessScopes
+    describeNetworkInsightsAccessScopes_dryRun,
+    describeNetworkInsightsAccessScopes_filters,
+    describeNetworkInsightsAccessScopes_maxResults,
+    describeNetworkInsightsAccessScopes_networkInsightsAccessScopeIds,
+    describeNetworkInsightsAccessScopes_nextToken,
+    describeNetworkInsightsAccessScopesResponse_networkInsightsAccessScopes,
+    describeNetworkInsightsAccessScopesResponse_nextToken,
+    describeNetworkInsightsAccessScopesResponse_httpStatus,
+
+    -- ** DescribeNetworkInsightsAnalyses
+    describeNetworkInsightsAnalyses_analysisEndTime,
+    describeNetworkInsightsAnalyses_analysisStartTime,
+    describeNetworkInsightsAnalyses_dryRun,
+    describeNetworkInsightsAnalyses_filters,
+    describeNetworkInsightsAnalyses_maxResults,
+    describeNetworkInsightsAnalyses_networkInsightsAnalysisIds,
+    describeNetworkInsightsAnalyses_networkInsightsPathId,
+    describeNetworkInsightsAnalyses_nextToken,
+    describeNetworkInsightsAnalysesResponse_networkInsightsAnalyses,
+    describeNetworkInsightsAnalysesResponse_nextToken,
+    describeNetworkInsightsAnalysesResponse_httpStatus,
+
+    -- ** DescribeNetworkInsightsPaths
+    describeNetworkInsightsPaths_dryRun,
+    describeNetworkInsightsPaths_filters,
+    describeNetworkInsightsPaths_maxResults,
+    describeNetworkInsightsPaths_networkInsightsPathIds,
+    describeNetworkInsightsPaths_nextToken,
+    describeNetworkInsightsPathsResponse_networkInsightsPaths,
+    describeNetworkInsightsPathsResponse_nextToken,
+    describeNetworkInsightsPathsResponse_httpStatus,
+
+    -- ** DescribeNetworkInterfaceAttribute
+    describeNetworkInterfaceAttribute_attribute,
+    describeNetworkInterfaceAttribute_dryRun,
+    describeNetworkInterfaceAttribute_networkInterfaceId,
+    describeNetworkInterfaceAttributeResponse_attachment,
+    describeNetworkInterfaceAttributeResponse_description,
+    describeNetworkInterfaceAttributeResponse_groups,
+    describeNetworkInterfaceAttributeResponse_networkInterfaceId,
+    describeNetworkInterfaceAttributeResponse_sourceDestCheck,
+    describeNetworkInterfaceAttributeResponse_httpStatus,
+
+    -- ** DescribeNetworkInterfacePermissions
+    describeNetworkInterfacePermissions_filters,
+    describeNetworkInterfacePermissions_maxResults,
+    describeNetworkInterfacePermissions_networkInterfacePermissionIds,
+    describeNetworkInterfacePermissions_nextToken,
+    describeNetworkInterfacePermissionsResponse_networkInterfacePermissions,
+    describeNetworkInterfacePermissionsResponse_nextToken,
+    describeNetworkInterfacePermissionsResponse_httpStatus,
+
+    -- ** DescribeNetworkInterfaces
+    describeNetworkInterfaces_dryRun,
+    describeNetworkInterfaces_filters,
+    describeNetworkInterfaces_maxResults,
+    describeNetworkInterfaces_networkInterfaceIds,
+    describeNetworkInterfaces_nextToken,
+    describeNetworkInterfacesResponse_networkInterfaces,
+    describeNetworkInterfacesResponse_nextToken,
+    describeNetworkInterfacesResponse_httpStatus,
+
+    -- ** DescribePlacementGroups
+    describePlacementGroups_dryRun,
+    describePlacementGroups_filters,
+    describePlacementGroups_groupIds,
+    describePlacementGroups_groupNames,
+    describePlacementGroupsResponse_placementGroups,
+    describePlacementGroupsResponse_httpStatus,
+
+    -- ** DescribePrefixLists
+    describePrefixLists_dryRun,
+    describePrefixLists_filters,
+    describePrefixLists_maxResults,
+    describePrefixLists_nextToken,
+    describePrefixLists_prefixListIds,
+    describePrefixListsResponse_nextToken,
+    describePrefixListsResponse_prefixLists,
+    describePrefixListsResponse_httpStatus,
+
+    -- ** DescribePrincipalIdFormat
+    describePrincipalIdFormat_dryRun,
+    describePrincipalIdFormat_maxResults,
+    describePrincipalIdFormat_nextToken,
+    describePrincipalIdFormat_resources,
+    describePrincipalIdFormatResponse_nextToken,
+    describePrincipalIdFormatResponse_principals,
+    describePrincipalIdFormatResponse_httpStatus,
+
+    -- ** DescribePublicIpv4Pools
+    describePublicIpv4Pools_filters,
+    describePublicIpv4Pools_maxResults,
+    describePublicIpv4Pools_nextToken,
+    describePublicIpv4Pools_poolIds,
+    describePublicIpv4PoolsResponse_nextToken,
+    describePublicIpv4PoolsResponse_publicIpv4Pools,
+    describePublicIpv4PoolsResponse_httpStatus,
+
+    -- ** DescribeRegions
+    describeRegions_allRegions,
+    describeRegions_dryRun,
+    describeRegions_filters,
+    describeRegions_regionNames,
+    describeRegionsResponse_regions,
+    describeRegionsResponse_httpStatus,
+
+    -- ** DescribeReplaceRootVolumeTasks
+    describeReplaceRootVolumeTasks_dryRun,
+    describeReplaceRootVolumeTasks_filters,
+    describeReplaceRootVolumeTasks_maxResults,
+    describeReplaceRootVolumeTasks_nextToken,
+    describeReplaceRootVolumeTasks_replaceRootVolumeTaskIds,
+    describeReplaceRootVolumeTasksResponse_nextToken,
+    describeReplaceRootVolumeTasksResponse_replaceRootVolumeTasks,
+    describeReplaceRootVolumeTasksResponse_httpStatus,
+
+    -- ** DescribeReservedInstances
+    describeReservedInstances_dryRun,
+    describeReservedInstances_filters,
+    describeReservedInstances_offeringClass,
+    describeReservedInstances_offeringType,
+    describeReservedInstances_reservedInstancesIds,
+    describeReservedInstancesResponse_reservedInstances,
+    describeReservedInstancesResponse_httpStatus,
+
+    -- ** DescribeReservedInstancesListings
+    describeReservedInstancesListings_filters,
+    describeReservedInstancesListings_reservedInstancesId,
+    describeReservedInstancesListings_reservedInstancesListingId,
+    describeReservedInstancesListingsResponse_reservedInstancesListings,
+    describeReservedInstancesListingsResponse_httpStatus,
+
+    -- ** DescribeReservedInstancesModifications
+    describeReservedInstancesModifications_filters,
+    describeReservedInstancesModifications_nextToken,
+    describeReservedInstancesModifications_reservedInstancesModificationIds,
+    describeReservedInstancesModificationsResponse_nextToken,
+    describeReservedInstancesModificationsResponse_reservedInstancesModifications,
+    describeReservedInstancesModificationsResponse_httpStatus,
+
+    -- ** DescribeReservedInstancesOfferings
+    describeReservedInstancesOfferings_availabilityZone,
+    describeReservedInstancesOfferings_dryRun,
+    describeReservedInstancesOfferings_filters,
+    describeReservedInstancesOfferings_includeMarketplace,
+    describeReservedInstancesOfferings_instanceTenancy,
+    describeReservedInstancesOfferings_instanceType,
+    describeReservedInstancesOfferings_maxDuration,
+    describeReservedInstancesOfferings_maxInstanceCount,
+    describeReservedInstancesOfferings_maxResults,
+    describeReservedInstancesOfferings_minDuration,
+    describeReservedInstancesOfferings_nextToken,
+    describeReservedInstancesOfferings_offeringClass,
+    describeReservedInstancesOfferings_offeringType,
+    describeReservedInstancesOfferings_productDescription,
+    describeReservedInstancesOfferings_reservedInstancesOfferingIds,
+    describeReservedInstancesOfferingsResponse_nextToken,
+    describeReservedInstancesOfferingsResponse_reservedInstancesOfferings,
+    describeReservedInstancesOfferingsResponse_httpStatus,
+
+    -- ** DescribeRouteTables
+    describeRouteTables_dryRun,
+    describeRouteTables_filters,
+    describeRouteTables_maxResults,
+    describeRouteTables_nextToken,
+    describeRouteTables_routeTableIds,
+    describeRouteTablesResponse_nextToken,
+    describeRouteTablesResponse_routeTables,
+    describeRouteTablesResponse_httpStatus,
+
+    -- ** DescribeScheduledInstanceAvailability
+    describeScheduledInstanceAvailability_dryRun,
+    describeScheduledInstanceAvailability_filters,
+    describeScheduledInstanceAvailability_maxResults,
+    describeScheduledInstanceAvailability_maxSlotDurationInHours,
+    describeScheduledInstanceAvailability_minSlotDurationInHours,
+    describeScheduledInstanceAvailability_nextToken,
+    describeScheduledInstanceAvailability_firstSlotStartTimeRange,
+    describeScheduledInstanceAvailability_recurrence,
+    describeScheduledInstanceAvailabilityResponse_nextToken,
+    describeScheduledInstanceAvailabilityResponse_scheduledInstanceAvailabilitySet,
+    describeScheduledInstanceAvailabilityResponse_httpStatus,
+
+    -- ** DescribeScheduledInstances
+    describeScheduledInstances_dryRun,
+    describeScheduledInstances_filters,
+    describeScheduledInstances_maxResults,
+    describeScheduledInstances_nextToken,
+    describeScheduledInstances_scheduledInstanceIds,
+    describeScheduledInstances_slotStartTimeRange,
+    describeScheduledInstancesResponse_nextToken,
+    describeScheduledInstancesResponse_scheduledInstanceSet,
+    describeScheduledInstancesResponse_httpStatus,
+
+    -- ** DescribeSecurityGroupReferences
+    describeSecurityGroupReferences_dryRun,
+    describeSecurityGroupReferences_groupId,
+    describeSecurityGroupReferencesResponse_securityGroupReferenceSet,
+    describeSecurityGroupReferencesResponse_httpStatus,
+
+    -- ** DescribeSecurityGroupRules
+    describeSecurityGroupRules_dryRun,
+    describeSecurityGroupRules_filters,
+    describeSecurityGroupRules_maxResults,
+    describeSecurityGroupRules_nextToken,
+    describeSecurityGroupRules_securityGroupRuleIds,
+    describeSecurityGroupRulesResponse_nextToken,
+    describeSecurityGroupRulesResponse_securityGroupRules,
+    describeSecurityGroupRulesResponse_httpStatus,
+
+    -- ** DescribeSecurityGroups
+    describeSecurityGroups_dryRun,
+    describeSecurityGroups_filters,
+    describeSecurityGroups_groupIds,
+    describeSecurityGroups_groupNames,
+    describeSecurityGroups_maxResults,
+    describeSecurityGroups_nextToken,
+    describeSecurityGroupsResponse_nextToken,
+    describeSecurityGroupsResponse_securityGroups,
+    describeSecurityGroupsResponse_httpStatus,
+
+    -- ** DescribeSnapshotAttribute
+    describeSnapshotAttribute_dryRun,
+    describeSnapshotAttribute_attribute,
+    describeSnapshotAttribute_snapshotId,
+    describeSnapshotAttributeResponse_createVolumePermissions,
+    describeSnapshotAttributeResponse_productCodes,
+    describeSnapshotAttributeResponse_snapshotId,
+    describeSnapshotAttributeResponse_httpStatus,
+
+    -- ** DescribeSnapshotTierStatus
+    describeSnapshotTierStatus_dryRun,
+    describeSnapshotTierStatus_filters,
+    describeSnapshotTierStatus_maxResults,
+    describeSnapshotTierStatus_nextToken,
+    describeSnapshotTierStatusResponse_nextToken,
+    describeSnapshotTierStatusResponse_snapshotTierStatuses,
+    describeSnapshotTierStatusResponse_httpStatus,
+
+    -- ** DescribeSnapshots
+    describeSnapshots_dryRun,
+    describeSnapshots_filters,
+    describeSnapshots_maxResults,
+    describeSnapshots_nextToken,
+    describeSnapshots_ownerIds,
+    describeSnapshots_restorableByUserIds,
+    describeSnapshots_snapshotIds,
+    describeSnapshotsResponse_nextToken,
+    describeSnapshotsResponse_snapshots,
+    describeSnapshotsResponse_httpStatus,
+
+    -- ** DescribeSpotDatafeedSubscription
+    describeSpotDatafeedSubscription_dryRun,
+    describeSpotDatafeedSubscriptionResponse_spotDatafeedSubscription,
+    describeSpotDatafeedSubscriptionResponse_httpStatus,
+
+    -- ** DescribeSpotFleetInstances
+    describeSpotFleetInstances_dryRun,
+    describeSpotFleetInstances_maxResults,
+    describeSpotFleetInstances_nextToken,
+    describeSpotFleetInstances_spotFleetRequestId,
+    describeSpotFleetInstancesResponse_activeInstances,
+    describeSpotFleetInstancesResponse_nextToken,
+    describeSpotFleetInstancesResponse_spotFleetRequestId,
+    describeSpotFleetInstancesResponse_httpStatus,
+
+    -- ** DescribeSpotFleetRequestHistory
+    describeSpotFleetRequestHistory_dryRun,
+    describeSpotFleetRequestHistory_eventType,
+    describeSpotFleetRequestHistory_maxResults,
+    describeSpotFleetRequestHistory_nextToken,
+    describeSpotFleetRequestHistory_spotFleetRequestId,
+    describeSpotFleetRequestHistory_startTime,
+    describeSpotFleetRequestHistoryResponse_historyRecords,
+    describeSpotFleetRequestHistoryResponse_lastEvaluatedTime,
+    describeSpotFleetRequestHistoryResponse_nextToken,
+    describeSpotFleetRequestHistoryResponse_spotFleetRequestId,
+    describeSpotFleetRequestHistoryResponse_startTime,
+    describeSpotFleetRequestHistoryResponse_httpStatus,
+
+    -- ** DescribeSpotFleetRequests
+    describeSpotFleetRequests_dryRun,
+    describeSpotFleetRequests_maxResults,
+    describeSpotFleetRequests_nextToken,
+    describeSpotFleetRequests_spotFleetRequestIds,
+    describeSpotFleetRequestsResponse_nextToken,
+    describeSpotFleetRequestsResponse_spotFleetRequestConfigs,
+    describeSpotFleetRequestsResponse_httpStatus,
+
+    -- ** DescribeSpotInstanceRequests
+    describeSpotInstanceRequests_dryRun,
+    describeSpotInstanceRequests_filters,
+    describeSpotInstanceRequests_maxResults,
+    describeSpotInstanceRequests_nextToken,
+    describeSpotInstanceRequests_spotInstanceRequestIds,
+    describeSpotInstanceRequestsResponse_nextToken,
+    describeSpotInstanceRequestsResponse_spotInstanceRequests,
+    describeSpotInstanceRequestsResponse_httpStatus,
+
+    -- ** DescribeSpotPriceHistory
+    describeSpotPriceHistory_availabilityZone,
+    describeSpotPriceHistory_dryRun,
+    describeSpotPriceHistory_endTime,
+    describeSpotPriceHistory_filters,
+    describeSpotPriceHistory_instanceTypes,
+    describeSpotPriceHistory_maxResults,
+    describeSpotPriceHistory_nextToken,
+    describeSpotPriceHistory_productDescriptions,
+    describeSpotPriceHistory_startTime,
+    describeSpotPriceHistoryResponse_nextToken,
+    describeSpotPriceHistoryResponse_spotPriceHistory,
+    describeSpotPriceHistoryResponse_httpStatus,
+
+    -- ** DescribeStaleSecurityGroups
+    describeStaleSecurityGroups_dryRun,
+    describeStaleSecurityGroups_maxResults,
+    describeStaleSecurityGroups_nextToken,
+    describeStaleSecurityGroups_vpcId,
+    describeStaleSecurityGroupsResponse_nextToken,
+    describeStaleSecurityGroupsResponse_staleSecurityGroupSet,
+    describeStaleSecurityGroupsResponse_httpStatus,
+
+    -- ** DescribeStoreImageTasks
+    describeStoreImageTasks_dryRun,
+    describeStoreImageTasks_filters,
+    describeStoreImageTasks_imageIds,
+    describeStoreImageTasks_maxResults,
+    describeStoreImageTasks_nextToken,
+    describeStoreImageTasksResponse_nextToken,
+    describeStoreImageTasksResponse_storeImageTaskResults,
+    describeStoreImageTasksResponse_httpStatus,
+
+    -- ** DescribeSubnets
+    describeSubnets_dryRun,
+    describeSubnets_filters,
+    describeSubnets_maxResults,
+    describeSubnets_nextToken,
+    describeSubnets_subnetIds,
+    describeSubnetsResponse_nextToken,
+    describeSubnetsResponse_subnets,
+    describeSubnetsResponse_httpStatus,
+
+    -- ** DescribeTags
+    describeTags_dryRun,
+    describeTags_filters,
+    describeTags_maxResults,
+    describeTags_nextToken,
+    describeTagsResponse_nextToken,
+    describeTagsResponse_tags,
+    describeTagsResponse_httpStatus,
+
+    -- ** DescribeTrafficMirrorFilters
+    describeTrafficMirrorFilters_dryRun,
+    describeTrafficMirrorFilters_filters,
+    describeTrafficMirrorFilters_maxResults,
+    describeTrafficMirrorFilters_nextToken,
+    describeTrafficMirrorFilters_trafficMirrorFilterIds,
+    describeTrafficMirrorFiltersResponse_nextToken,
+    describeTrafficMirrorFiltersResponse_trafficMirrorFilters,
+    describeTrafficMirrorFiltersResponse_httpStatus,
+
+    -- ** DescribeTrafficMirrorSessions
+    describeTrafficMirrorSessions_dryRun,
+    describeTrafficMirrorSessions_filters,
+    describeTrafficMirrorSessions_maxResults,
+    describeTrafficMirrorSessions_nextToken,
+    describeTrafficMirrorSessions_trafficMirrorSessionIds,
+    describeTrafficMirrorSessionsResponse_nextToken,
+    describeTrafficMirrorSessionsResponse_trafficMirrorSessions,
+    describeTrafficMirrorSessionsResponse_httpStatus,
+
+    -- ** DescribeTrafficMirrorTargets
+    describeTrafficMirrorTargets_dryRun,
+    describeTrafficMirrorTargets_filters,
+    describeTrafficMirrorTargets_maxResults,
+    describeTrafficMirrorTargets_nextToken,
+    describeTrafficMirrorTargets_trafficMirrorTargetIds,
+    describeTrafficMirrorTargetsResponse_nextToken,
+    describeTrafficMirrorTargetsResponse_trafficMirrorTargets,
+    describeTrafficMirrorTargetsResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayAttachments
+    describeTransitGatewayAttachments_dryRun,
+    describeTransitGatewayAttachments_filters,
+    describeTransitGatewayAttachments_maxResults,
+    describeTransitGatewayAttachments_nextToken,
+    describeTransitGatewayAttachments_transitGatewayAttachmentIds,
+    describeTransitGatewayAttachmentsResponse_nextToken,
+    describeTransitGatewayAttachmentsResponse_transitGatewayAttachments,
+    describeTransitGatewayAttachmentsResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayConnectPeers
+    describeTransitGatewayConnectPeers_dryRun,
+    describeTransitGatewayConnectPeers_filters,
+    describeTransitGatewayConnectPeers_maxResults,
+    describeTransitGatewayConnectPeers_nextToken,
+    describeTransitGatewayConnectPeers_transitGatewayConnectPeerIds,
+    describeTransitGatewayConnectPeersResponse_nextToken,
+    describeTransitGatewayConnectPeersResponse_transitGatewayConnectPeers,
+    describeTransitGatewayConnectPeersResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayConnects
+    describeTransitGatewayConnects_dryRun,
+    describeTransitGatewayConnects_filters,
+    describeTransitGatewayConnects_maxResults,
+    describeTransitGatewayConnects_nextToken,
+    describeTransitGatewayConnects_transitGatewayAttachmentIds,
+    describeTransitGatewayConnectsResponse_nextToken,
+    describeTransitGatewayConnectsResponse_transitGatewayConnects,
+    describeTransitGatewayConnectsResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayMulticastDomains
+    describeTransitGatewayMulticastDomains_dryRun,
+    describeTransitGatewayMulticastDomains_filters,
+    describeTransitGatewayMulticastDomains_maxResults,
+    describeTransitGatewayMulticastDomains_nextToken,
+    describeTransitGatewayMulticastDomains_transitGatewayMulticastDomainIds,
+    describeTransitGatewayMulticastDomainsResponse_nextToken,
+    describeTransitGatewayMulticastDomainsResponse_transitGatewayMulticastDomains,
+    describeTransitGatewayMulticastDomainsResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayPeeringAttachments
+    describeTransitGatewayPeeringAttachments_dryRun,
+    describeTransitGatewayPeeringAttachments_filters,
+    describeTransitGatewayPeeringAttachments_maxResults,
+    describeTransitGatewayPeeringAttachments_nextToken,
+    describeTransitGatewayPeeringAttachments_transitGatewayAttachmentIds,
+    describeTransitGatewayPeeringAttachmentsResponse_nextToken,
+    describeTransitGatewayPeeringAttachmentsResponse_transitGatewayPeeringAttachments,
+    describeTransitGatewayPeeringAttachmentsResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayPolicyTables
+    describeTransitGatewayPolicyTables_dryRun,
+    describeTransitGatewayPolicyTables_filters,
+    describeTransitGatewayPolicyTables_maxResults,
+    describeTransitGatewayPolicyTables_nextToken,
+    describeTransitGatewayPolicyTables_transitGatewayPolicyTableIds,
+    describeTransitGatewayPolicyTablesResponse_nextToken,
+    describeTransitGatewayPolicyTablesResponse_transitGatewayPolicyTables,
+    describeTransitGatewayPolicyTablesResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayRouteTableAnnouncements
+    describeTransitGatewayRouteTableAnnouncements_dryRun,
+    describeTransitGatewayRouteTableAnnouncements_filters,
+    describeTransitGatewayRouteTableAnnouncements_maxResults,
+    describeTransitGatewayRouteTableAnnouncements_nextToken,
+    describeTransitGatewayRouteTableAnnouncements_transitGatewayRouteTableAnnouncementIds,
+    describeTransitGatewayRouteTableAnnouncementsResponse_nextToken,
+    describeTransitGatewayRouteTableAnnouncementsResponse_transitGatewayRouteTableAnnouncements,
+    describeTransitGatewayRouteTableAnnouncementsResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayRouteTables
+    describeTransitGatewayRouteTables_dryRun,
+    describeTransitGatewayRouteTables_filters,
+    describeTransitGatewayRouteTables_maxResults,
+    describeTransitGatewayRouteTables_nextToken,
+    describeTransitGatewayRouteTables_transitGatewayRouteTableIds,
+    describeTransitGatewayRouteTablesResponse_nextToken,
+    describeTransitGatewayRouteTablesResponse_transitGatewayRouteTables,
+    describeTransitGatewayRouteTablesResponse_httpStatus,
+
+    -- ** DescribeTransitGatewayVpcAttachments
+    describeTransitGatewayVpcAttachments_dryRun,
+    describeTransitGatewayVpcAttachments_filters,
+    describeTransitGatewayVpcAttachments_maxResults,
+    describeTransitGatewayVpcAttachments_nextToken,
+    describeTransitGatewayVpcAttachments_transitGatewayAttachmentIds,
+    describeTransitGatewayVpcAttachmentsResponse_nextToken,
+    describeTransitGatewayVpcAttachmentsResponse_transitGatewayVpcAttachments,
+    describeTransitGatewayVpcAttachmentsResponse_httpStatus,
+
+    -- ** DescribeTransitGateways
+    describeTransitGateways_dryRun,
+    describeTransitGateways_filters,
+    describeTransitGateways_maxResults,
+    describeTransitGateways_nextToken,
+    describeTransitGateways_transitGatewayIds,
+    describeTransitGatewaysResponse_nextToken,
+    describeTransitGatewaysResponse_transitGateways,
+    describeTransitGatewaysResponse_httpStatus,
+
+    -- ** DescribeTrunkInterfaceAssociations
+    describeTrunkInterfaceAssociations_associationIds,
+    describeTrunkInterfaceAssociations_dryRun,
+    describeTrunkInterfaceAssociations_filters,
+    describeTrunkInterfaceAssociations_maxResults,
+    describeTrunkInterfaceAssociations_nextToken,
+    describeTrunkInterfaceAssociationsResponse_interfaceAssociations,
+    describeTrunkInterfaceAssociationsResponse_nextToken,
+    describeTrunkInterfaceAssociationsResponse_httpStatus,
+
+    -- ** DescribeVerifiedAccessEndpoints
+    describeVerifiedAccessEndpoints_dryRun,
+    describeVerifiedAccessEndpoints_filters,
+    describeVerifiedAccessEndpoints_maxResults,
+    describeVerifiedAccessEndpoints_nextToken,
+    describeVerifiedAccessEndpoints_verifiedAccessEndpointIds,
+    describeVerifiedAccessEndpoints_verifiedAccessGroupId,
+    describeVerifiedAccessEndpoints_verifiedAccessInstanceId,
+    describeVerifiedAccessEndpointsResponse_nextToken,
+    describeVerifiedAccessEndpointsResponse_verifiedAccessEndpoints,
+    describeVerifiedAccessEndpointsResponse_httpStatus,
+
+    -- ** DescribeVerifiedAccessGroups
+    describeVerifiedAccessGroups_dryRun,
+    describeVerifiedAccessGroups_filters,
+    describeVerifiedAccessGroups_maxResults,
+    describeVerifiedAccessGroups_nextToken,
+    describeVerifiedAccessGroups_verifiedAccessGroupIds,
+    describeVerifiedAccessGroups_verifiedAccessInstanceId,
+    describeVerifiedAccessGroupsResponse_nextToken,
+    describeVerifiedAccessGroupsResponse_verifiedAccessGroups,
+    describeVerifiedAccessGroupsResponse_httpStatus,
+
+    -- ** DescribeVerifiedAccessInstanceLoggingConfigurations
+    describeVerifiedAccessInstanceLoggingConfigurations_dryRun,
+    describeVerifiedAccessInstanceLoggingConfigurations_filters,
+    describeVerifiedAccessInstanceLoggingConfigurations_maxResults,
+    describeVerifiedAccessInstanceLoggingConfigurations_nextToken,
+    describeVerifiedAccessInstanceLoggingConfigurations_verifiedAccessInstanceIds,
+    describeVerifiedAccessInstanceLoggingConfigurationsResponse_loggingConfigurations,
+    describeVerifiedAccessInstanceLoggingConfigurationsResponse_nextToken,
+    describeVerifiedAccessInstanceLoggingConfigurationsResponse_httpStatus,
+
+    -- ** DescribeVerifiedAccessInstances
+    describeVerifiedAccessInstances_dryRun,
+    describeVerifiedAccessInstances_filters,
+    describeVerifiedAccessInstances_maxResults,
+    describeVerifiedAccessInstances_nextToken,
+    describeVerifiedAccessInstances_verifiedAccessInstanceIds,
+    describeVerifiedAccessInstancesResponse_nextToken,
+    describeVerifiedAccessInstancesResponse_verifiedAccessInstances,
+    describeVerifiedAccessInstancesResponse_httpStatus,
+
+    -- ** DescribeVerifiedAccessTrustProviders
+    describeVerifiedAccessTrustProviders_dryRun,
+    describeVerifiedAccessTrustProviders_filters,
+    describeVerifiedAccessTrustProviders_maxResults,
+    describeVerifiedAccessTrustProviders_nextToken,
+    describeVerifiedAccessTrustProviders_verifiedAccessTrustProviderIds,
+    describeVerifiedAccessTrustProvidersResponse_nextToken,
+    describeVerifiedAccessTrustProvidersResponse_verifiedAccessTrustProviders,
+    describeVerifiedAccessTrustProvidersResponse_httpStatus,
+
+    -- ** DescribeVolumeAttribute
+    describeVolumeAttribute_dryRun,
+    describeVolumeAttribute_attribute,
+    describeVolumeAttribute_volumeId,
+    describeVolumeAttributeResponse_autoEnableIO,
+    describeVolumeAttributeResponse_productCodes,
+    describeVolumeAttributeResponse_volumeId,
+    describeVolumeAttributeResponse_httpStatus,
+
+    -- ** DescribeVolumeStatus
+    describeVolumeStatus_dryRun,
+    describeVolumeStatus_filters,
+    describeVolumeStatus_maxResults,
+    describeVolumeStatus_nextToken,
+    describeVolumeStatus_volumeIds,
+    describeVolumeStatusResponse_nextToken,
+    describeVolumeStatusResponse_volumeStatuses,
+    describeVolumeStatusResponse_httpStatus,
+
+    -- ** DescribeVolumes
+    describeVolumes_dryRun,
+    describeVolumes_filters,
+    describeVolumes_maxResults,
+    describeVolumes_nextToken,
+    describeVolumes_volumeIds,
+    describeVolumesResponse_nextToken,
+    describeVolumesResponse_volumes,
+    describeVolumesResponse_httpStatus,
+
+    -- ** DescribeVolumesModifications
+    describeVolumesModifications_dryRun,
+    describeVolumesModifications_filters,
+    describeVolumesModifications_maxResults,
+    describeVolumesModifications_nextToken,
+    describeVolumesModifications_volumeIds,
+    describeVolumesModificationsResponse_nextToken,
+    describeVolumesModificationsResponse_volumesModifications,
+    describeVolumesModificationsResponse_httpStatus,
+
+    -- ** DescribeVpcAttribute
+    describeVpcAttribute_dryRun,
+    describeVpcAttribute_attribute,
+    describeVpcAttribute_vpcId,
+    describeVpcAttributeResponse_enableDnsHostnames,
+    describeVpcAttributeResponse_enableDnsSupport,
+    describeVpcAttributeResponse_enableNetworkAddressUsageMetrics,
+    describeVpcAttributeResponse_vpcId,
+    describeVpcAttributeResponse_httpStatus,
+
+    -- ** DescribeVpcClassicLink
+    describeVpcClassicLink_dryRun,
+    describeVpcClassicLink_filters,
+    describeVpcClassicLink_vpcIds,
+    describeVpcClassicLinkResponse_vpcs,
+    describeVpcClassicLinkResponse_httpStatus,
+
+    -- ** DescribeVpcClassicLinkDnsSupport
+    describeVpcClassicLinkDnsSupport_maxResults,
+    describeVpcClassicLinkDnsSupport_nextToken,
+    describeVpcClassicLinkDnsSupport_vpcIds,
+    describeVpcClassicLinkDnsSupportResponse_nextToken,
+    describeVpcClassicLinkDnsSupportResponse_vpcs,
+    describeVpcClassicLinkDnsSupportResponse_httpStatus,
+
+    -- ** DescribeVpcEndpointConnectionNotifications
+    describeVpcEndpointConnectionNotifications_connectionNotificationId,
+    describeVpcEndpointConnectionNotifications_dryRun,
+    describeVpcEndpointConnectionNotifications_filters,
+    describeVpcEndpointConnectionNotifications_maxResults,
+    describeVpcEndpointConnectionNotifications_nextToken,
+    describeVpcEndpointConnectionNotificationsResponse_connectionNotificationSet,
+    describeVpcEndpointConnectionNotificationsResponse_nextToken,
+    describeVpcEndpointConnectionNotificationsResponse_httpStatus,
+
+    -- ** DescribeVpcEndpointConnections
+    describeVpcEndpointConnections_dryRun,
+    describeVpcEndpointConnections_filters,
+    describeVpcEndpointConnections_maxResults,
+    describeVpcEndpointConnections_nextToken,
+    describeVpcEndpointConnectionsResponse_nextToken,
+    describeVpcEndpointConnectionsResponse_vpcEndpointConnections,
+    describeVpcEndpointConnectionsResponse_httpStatus,
+
+    -- ** DescribeVpcEndpointServiceConfigurations
+    describeVpcEndpointServiceConfigurations_dryRun,
+    describeVpcEndpointServiceConfigurations_filters,
+    describeVpcEndpointServiceConfigurations_maxResults,
+    describeVpcEndpointServiceConfigurations_nextToken,
+    describeVpcEndpointServiceConfigurations_serviceIds,
+    describeVpcEndpointServiceConfigurationsResponse_nextToken,
+    describeVpcEndpointServiceConfigurationsResponse_serviceConfigurations,
+    describeVpcEndpointServiceConfigurationsResponse_httpStatus,
+
+    -- ** DescribeVpcEndpointServicePermissions
+    describeVpcEndpointServicePermissions_dryRun,
+    describeVpcEndpointServicePermissions_filters,
+    describeVpcEndpointServicePermissions_maxResults,
+    describeVpcEndpointServicePermissions_nextToken,
+    describeVpcEndpointServicePermissions_serviceId,
+    describeVpcEndpointServicePermissionsResponse_allowedPrincipals,
+    describeVpcEndpointServicePermissionsResponse_nextToken,
+    describeVpcEndpointServicePermissionsResponse_httpStatus,
+
+    -- ** DescribeVpcEndpointServices
+    describeVpcEndpointServices_dryRun,
+    describeVpcEndpointServices_filters,
+    describeVpcEndpointServices_maxResults,
+    describeVpcEndpointServices_nextToken,
+    describeVpcEndpointServices_serviceNames,
+    describeVpcEndpointServicesResponse_nextToken,
+    describeVpcEndpointServicesResponse_serviceDetails,
+    describeVpcEndpointServicesResponse_serviceNames,
+    describeVpcEndpointServicesResponse_httpStatus,
+
+    -- ** DescribeVpcEndpoints
+    describeVpcEndpoints_dryRun,
+    describeVpcEndpoints_filters,
+    describeVpcEndpoints_maxResults,
+    describeVpcEndpoints_nextToken,
+    describeVpcEndpoints_vpcEndpointIds,
+    describeVpcEndpointsResponse_nextToken,
+    describeVpcEndpointsResponse_vpcEndpoints,
+    describeVpcEndpointsResponse_httpStatus,
+
+    -- ** DescribeVpcPeeringConnections
+    describeVpcPeeringConnections_dryRun,
+    describeVpcPeeringConnections_filters,
+    describeVpcPeeringConnections_maxResults,
+    describeVpcPeeringConnections_nextToken,
+    describeVpcPeeringConnections_vpcPeeringConnectionIds,
+    describeVpcPeeringConnectionsResponse_nextToken,
+    describeVpcPeeringConnectionsResponse_vpcPeeringConnections,
+    describeVpcPeeringConnectionsResponse_httpStatus,
+
+    -- ** DescribeVpcs
+    describeVpcs_dryRun,
+    describeVpcs_filters,
+    describeVpcs_maxResults,
+    describeVpcs_nextToken,
+    describeVpcs_vpcIds,
+    describeVpcsResponse_nextToken,
+    describeVpcsResponse_vpcs,
+    describeVpcsResponse_httpStatus,
+
+    -- ** DescribeVpnConnections
+    describeVpnConnections_dryRun,
+    describeVpnConnections_filters,
+    describeVpnConnections_vpnConnectionIds,
+    describeVpnConnectionsResponse_vpnConnections,
+    describeVpnConnectionsResponse_httpStatus,
+
+    -- ** DescribeVpnGateways
+    describeVpnGateways_dryRun,
+    describeVpnGateways_filters,
+    describeVpnGateways_vpnGatewayIds,
+    describeVpnGatewaysResponse_vpnGateways,
+    describeVpnGatewaysResponse_httpStatus,
+
+    -- ** DetachClassicLinkVpc
+    detachClassicLinkVpc_dryRun,
+    detachClassicLinkVpc_instanceId,
+    detachClassicLinkVpc_vpcId,
+    detachClassicLinkVpcResponse_return,
+    detachClassicLinkVpcResponse_httpStatus,
+
+    -- ** DetachInternetGateway
+    detachInternetGateway_dryRun,
+    detachInternetGateway_internetGatewayId,
+    detachInternetGateway_vpcId,
+
+    -- ** DetachNetworkInterface
+    detachNetworkInterface_dryRun,
+    detachNetworkInterface_force,
+    detachNetworkInterface_attachmentId,
+
+    -- ** DetachVerifiedAccessTrustProvider
+    detachVerifiedAccessTrustProvider_clientToken,
+    detachVerifiedAccessTrustProvider_dryRun,
+    detachVerifiedAccessTrustProvider_verifiedAccessInstanceId,
+    detachVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+    detachVerifiedAccessTrustProviderResponse_verifiedAccessInstance,
+    detachVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    detachVerifiedAccessTrustProviderResponse_httpStatus,
+
+    -- ** DetachVolume
+    detachVolume_device,
+    detachVolume_dryRun,
+    detachVolume_force,
+    detachVolume_instanceId,
+    detachVolume_volumeId,
+    volumeAttachment_attachTime,
+    volumeAttachment_deleteOnTermination,
+    volumeAttachment_device,
+    volumeAttachment_instanceId,
+    volumeAttachment_state,
+    volumeAttachment_volumeId,
+
+    -- ** DetachVpnGateway
+    detachVpnGateway_dryRun,
+    detachVpnGateway_vpcId,
+    detachVpnGateway_vpnGatewayId,
+
+    -- ** DisableAddressTransfer
+    disableAddressTransfer_dryRun,
+    disableAddressTransfer_allocationId,
+    disableAddressTransferResponse_addressTransfer,
+    disableAddressTransferResponse_httpStatus,
+
+    -- ** DisableAwsNetworkPerformanceMetricSubscription
+    disableAwsNetworkPerformanceMetricSubscription_destination,
+    disableAwsNetworkPerformanceMetricSubscription_dryRun,
+    disableAwsNetworkPerformanceMetricSubscription_metric,
+    disableAwsNetworkPerformanceMetricSubscription_source,
+    disableAwsNetworkPerformanceMetricSubscription_statistic,
+    disableAwsNetworkPerformanceMetricSubscriptionResponse_output,
+    disableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus,
+
+    -- ** DisableEbsEncryptionByDefault
+    disableEbsEncryptionByDefault_dryRun,
+    disableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault,
+    disableEbsEncryptionByDefaultResponse_httpStatus,
+
+    -- ** DisableFastLaunch
+    disableFastLaunch_dryRun,
+    disableFastLaunch_force,
+    disableFastLaunch_imageId,
+    disableFastLaunchResponse_imageId,
+    disableFastLaunchResponse_launchTemplate,
+    disableFastLaunchResponse_maxParallelLaunches,
+    disableFastLaunchResponse_ownerId,
+    disableFastLaunchResponse_resourceType,
+    disableFastLaunchResponse_snapshotConfiguration,
+    disableFastLaunchResponse_state,
+    disableFastLaunchResponse_stateTransitionReason,
+    disableFastLaunchResponse_stateTransitionTime,
+    disableFastLaunchResponse_httpStatus,
+
+    -- ** DisableFastSnapshotRestores
+    disableFastSnapshotRestores_dryRun,
+    disableFastSnapshotRestores_availabilityZones,
+    disableFastSnapshotRestores_sourceSnapshotIds,
+    disableFastSnapshotRestoresResponse_successful,
+    disableFastSnapshotRestoresResponse_unsuccessful,
+    disableFastSnapshotRestoresResponse_httpStatus,
+
+    -- ** DisableImageDeprecation
+    disableImageDeprecation_dryRun,
+    disableImageDeprecation_imageId,
+    disableImageDeprecationResponse_return,
+    disableImageDeprecationResponse_httpStatus,
+
+    -- ** DisableIpamOrganizationAdminAccount
+    disableIpamOrganizationAdminAccount_dryRun,
+    disableIpamOrganizationAdminAccount_delegatedAdminAccountId,
+    disableIpamOrganizationAdminAccountResponse_success,
+    disableIpamOrganizationAdminAccountResponse_httpStatus,
+
+    -- ** DisableSerialConsoleAccess
+    disableSerialConsoleAccess_dryRun,
+    disableSerialConsoleAccessResponse_serialConsoleAccessEnabled,
+    disableSerialConsoleAccessResponse_httpStatus,
+
+    -- ** DisableTransitGatewayRouteTablePropagation
+    disableTransitGatewayRouteTablePropagation_dryRun,
+    disableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId,
+    disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId,
+    disableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId,
+    disableTransitGatewayRouteTablePropagationResponse_propagation,
+    disableTransitGatewayRouteTablePropagationResponse_httpStatus,
+
+    -- ** DisableVgwRoutePropagation
+    disableVgwRoutePropagation_dryRun,
+    disableVgwRoutePropagation_gatewayId,
+    disableVgwRoutePropagation_routeTableId,
+
+    -- ** DisableVpcClassicLink
+    disableVpcClassicLink_dryRun,
+    disableVpcClassicLink_vpcId,
+    disableVpcClassicLinkResponse_return,
+    disableVpcClassicLinkResponse_httpStatus,
+
+    -- ** DisableVpcClassicLinkDnsSupport
+    disableVpcClassicLinkDnsSupport_vpcId,
+    disableVpcClassicLinkDnsSupportResponse_return,
+    disableVpcClassicLinkDnsSupportResponse_httpStatus,
+
+    -- ** DisassociateAddress
+    disassociateAddress_associationId,
+    disassociateAddress_dryRun,
+    disassociateAddress_publicIp,
+
+    -- ** DisassociateClientVpnTargetNetwork
+    disassociateClientVpnTargetNetwork_dryRun,
+    disassociateClientVpnTargetNetwork_clientVpnEndpointId,
+    disassociateClientVpnTargetNetwork_associationId,
+    disassociateClientVpnTargetNetworkResponse_associationId,
+    disassociateClientVpnTargetNetworkResponse_status,
+    disassociateClientVpnTargetNetworkResponse_httpStatus,
+
+    -- ** DisassociateEnclaveCertificateIamRole
+    disassociateEnclaveCertificateIamRole_certificateArn,
+    disassociateEnclaveCertificateIamRole_dryRun,
+    disassociateEnclaveCertificateIamRole_roleArn,
+    disassociateEnclaveCertificateIamRoleResponse_return,
+    disassociateEnclaveCertificateIamRoleResponse_httpStatus,
+
+    -- ** DisassociateIamInstanceProfile
+    disassociateIamInstanceProfile_associationId,
+    disassociateIamInstanceProfileResponse_iamInstanceProfileAssociation,
+    disassociateIamInstanceProfileResponse_httpStatus,
+
+    -- ** DisassociateInstanceEventWindow
+    disassociateInstanceEventWindow_dryRun,
+    disassociateInstanceEventWindow_instanceEventWindowId,
+    disassociateInstanceEventWindow_associationTarget,
+    disassociateInstanceEventWindowResponse_instanceEventWindow,
+    disassociateInstanceEventWindowResponse_httpStatus,
+
+    -- ** DisassociateRouteTable
+    disassociateRouteTable_dryRun,
+    disassociateRouteTable_associationId,
+
+    -- ** DisassociateSubnetCidrBlock
+    disassociateSubnetCidrBlock_associationId,
+    disassociateSubnetCidrBlockResponse_ipv6CidrBlockAssociation,
+    disassociateSubnetCidrBlockResponse_subnetId,
+    disassociateSubnetCidrBlockResponse_httpStatus,
+
+    -- ** DisassociateTransitGatewayMulticastDomain
+    disassociateTransitGatewayMulticastDomain_dryRun,
+    disassociateTransitGatewayMulticastDomain_subnetIds,
+    disassociateTransitGatewayMulticastDomain_transitGatewayAttachmentId,
+    disassociateTransitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+    disassociateTransitGatewayMulticastDomainResponse_associations,
+    disassociateTransitGatewayMulticastDomainResponse_httpStatus,
+
+    -- ** DisassociateTransitGatewayPolicyTable
+    disassociateTransitGatewayPolicyTable_dryRun,
+    disassociateTransitGatewayPolicyTable_transitGatewayPolicyTableId,
+    disassociateTransitGatewayPolicyTable_transitGatewayAttachmentId,
+    disassociateTransitGatewayPolicyTableResponse_association,
+    disassociateTransitGatewayPolicyTableResponse_httpStatus,
+
+    -- ** DisassociateTransitGatewayRouteTable
+    disassociateTransitGatewayRouteTable_dryRun,
+    disassociateTransitGatewayRouteTable_transitGatewayRouteTableId,
+    disassociateTransitGatewayRouteTable_transitGatewayAttachmentId,
+    disassociateTransitGatewayRouteTableResponse_association,
+    disassociateTransitGatewayRouteTableResponse_httpStatus,
+
+    -- ** DisassociateTrunkInterface
+    disassociateTrunkInterface_clientToken,
+    disassociateTrunkInterface_dryRun,
+    disassociateTrunkInterface_associationId,
+    disassociateTrunkInterfaceResponse_clientToken,
+    disassociateTrunkInterfaceResponse_return,
+    disassociateTrunkInterfaceResponse_httpStatus,
+
+    -- ** DisassociateVpcCidrBlock
+    disassociateVpcCidrBlock_associationId,
+    disassociateVpcCidrBlockResponse_cidrBlockAssociation,
+    disassociateVpcCidrBlockResponse_ipv6CidrBlockAssociation,
+    disassociateVpcCidrBlockResponse_vpcId,
+    disassociateVpcCidrBlockResponse_httpStatus,
+
+    -- ** EnableAddressTransfer
+    enableAddressTransfer_dryRun,
+    enableAddressTransfer_allocationId,
+    enableAddressTransfer_transferAccountId,
+    enableAddressTransferResponse_addressTransfer,
+    enableAddressTransferResponse_httpStatus,
+
+    -- ** EnableAwsNetworkPerformanceMetricSubscription
+    enableAwsNetworkPerformanceMetricSubscription_destination,
+    enableAwsNetworkPerformanceMetricSubscription_dryRun,
+    enableAwsNetworkPerformanceMetricSubscription_metric,
+    enableAwsNetworkPerformanceMetricSubscription_source,
+    enableAwsNetworkPerformanceMetricSubscription_statistic,
+    enableAwsNetworkPerformanceMetricSubscriptionResponse_output,
+    enableAwsNetworkPerformanceMetricSubscriptionResponse_httpStatus,
+
+    -- ** EnableEbsEncryptionByDefault
+    enableEbsEncryptionByDefault_dryRun,
+    enableEbsEncryptionByDefaultResponse_ebsEncryptionByDefault,
+    enableEbsEncryptionByDefaultResponse_httpStatus,
+
+    -- ** EnableFastLaunch
+    enableFastLaunch_dryRun,
+    enableFastLaunch_launchTemplate,
+    enableFastLaunch_maxParallelLaunches,
+    enableFastLaunch_resourceType,
+    enableFastLaunch_snapshotConfiguration,
+    enableFastLaunch_imageId,
+    enableFastLaunchResponse_imageId,
+    enableFastLaunchResponse_launchTemplate,
+    enableFastLaunchResponse_maxParallelLaunches,
+    enableFastLaunchResponse_ownerId,
+    enableFastLaunchResponse_resourceType,
+    enableFastLaunchResponse_snapshotConfiguration,
+    enableFastLaunchResponse_state,
+    enableFastLaunchResponse_stateTransitionReason,
+    enableFastLaunchResponse_stateTransitionTime,
+    enableFastLaunchResponse_httpStatus,
+
+    -- ** EnableFastSnapshotRestores
+    enableFastSnapshotRestores_dryRun,
+    enableFastSnapshotRestores_availabilityZones,
+    enableFastSnapshotRestores_sourceSnapshotIds,
+    enableFastSnapshotRestoresResponse_successful,
+    enableFastSnapshotRestoresResponse_unsuccessful,
+    enableFastSnapshotRestoresResponse_httpStatus,
+
+    -- ** EnableImageDeprecation
+    enableImageDeprecation_dryRun,
+    enableImageDeprecation_imageId,
+    enableImageDeprecation_deprecateAt,
+    enableImageDeprecationResponse_return,
+    enableImageDeprecationResponse_httpStatus,
+
+    -- ** EnableIpamOrganizationAdminAccount
+    enableIpamOrganizationAdminAccount_dryRun,
+    enableIpamOrganizationAdminAccount_delegatedAdminAccountId,
+    enableIpamOrganizationAdminAccountResponse_success,
+    enableIpamOrganizationAdminAccountResponse_httpStatus,
+
+    -- ** EnableReachabilityAnalyzerOrganizationSharing
+    enableReachabilityAnalyzerOrganizationSharing_dryRun,
+    enableReachabilityAnalyzerOrganizationSharingResponse_returnValue,
+    enableReachabilityAnalyzerOrganizationSharingResponse_httpStatus,
+
+    -- ** EnableSerialConsoleAccess
+    enableSerialConsoleAccess_dryRun,
+    enableSerialConsoleAccessResponse_serialConsoleAccessEnabled,
+    enableSerialConsoleAccessResponse_httpStatus,
+
+    -- ** EnableTransitGatewayRouteTablePropagation
+    enableTransitGatewayRouteTablePropagation_dryRun,
+    enableTransitGatewayRouteTablePropagation_transitGatewayAttachmentId,
+    enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId,
+    enableTransitGatewayRouteTablePropagation_transitGatewayRouteTableId,
+    enableTransitGatewayRouteTablePropagationResponse_propagation,
+    enableTransitGatewayRouteTablePropagationResponse_httpStatus,
+
+    -- ** EnableVgwRoutePropagation
+    enableVgwRoutePropagation_dryRun,
+    enableVgwRoutePropagation_gatewayId,
+    enableVgwRoutePropagation_routeTableId,
+
+    -- ** EnableVolumeIO
+    enableVolumeIO_dryRun,
+    enableVolumeIO_volumeId,
+
+    -- ** EnableVpcClassicLink
+    enableVpcClassicLink_dryRun,
+    enableVpcClassicLink_vpcId,
+    enableVpcClassicLinkResponse_return,
+    enableVpcClassicLinkResponse_httpStatus,
+
+    -- ** EnableVpcClassicLinkDnsSupport
+    enableVpcClassicLinkDnsSupport_vpcId,
+    enableVpcClassicLinkDnsSupportResponse_return,
+    enableVpcClassicLinkDnsSupportResponse_httpStatus,
+
+    -- ** ExportClientVpnClientCertificateRevocationList
+    exportClientVpnClientCertificateRevocationList_dryRun,
+    exportClientVpnClientCertificateRevocationList_clientVpnEndpointId,
+    exportClientVpnClientCertificateRevocationListResponse_certificateRevocationList,
+    exportClientVpnClientCertificateRevocationListResponse_status,
+    exportClientVpnClientCertificateRevocationListResponse_httpStatus,
+
+    -- ** ExportClientVpnClientConfiguration
+    exportClientVpnClientConfiguration_dryRun,
+    exportClientVpnClientConfiguration_clientVpnEndpointId,
+    exportClientVpnClientConfigurationResponse_clientConfiguration,
+    exportClientVpnClientConfigurationResponse_httpStatus,
+
+    -- ** ExportImage
+    exportImage_clientToken,
+    exportImage_description,
+    exportImage_dryRun,
+    exportImage_roleName,
+    exportImage_tagSpecifications,
+    exportImage_diskImageFormat,
+    exportImage_imageId,
+    exportImage_s3ExportLocation,
+    exportImageResponse_description,
+    exportImageResponse_diskImageFormat,
+    exportImageResponse_exportImageTaskId,
+    exportImageResponse_imageId,
+    exportImageResponse_progress,
+    exportImageResponse_roleName,
+    exportImageResponse_s3ExportLocation,
+    exportImageResponse_status,
+    exportImageResponse_statusMessage,
+    exportImageResponse_tags,
+    exportImageResponse_httpStatus,
+
+    -- ** ExportTransitGatewayRoutes
+    exportTransitGatewayRoutes_dryRun,
+    exportTransitGatewayRoutes_filters,
+    exportTransitGatewayRoutes_transitGatewayRouteTableId,
+    exportTransitGatewayRoutes_s3Bucket,
+    exportTransitGatewayRoutesResponse_s3Location,
+    exportTransitGatewayRoutesResponse_httpStatus,
+
+    -- ** GetAssociatedEnclaveCertificateIamRoles
+    getAssociatedEnclaveCertificateIamRoles_certificateArn,
+    getAssociatedEnclaveCertificateIamRoles_dryRun,
+    getAssociatedEnclaveCertificateIamRolesResponse_associatedRoles,
+    getAssociatedEnclaveCertificateIamRolesResponse_httpStatus,
+
+    -- ** GetAssociatedIpv6PoolCidrs
+    getAssociatedIpv6PoolCidrs_dryRun,
+    getAssociatedIpv6PoolCidrs_maxResults,
+    getAssociatedIpv6PoolCidrs_nextToken,
+    getAssociatedIpv6PoolCidrs_poolId,
+    getAssociatedIpv6PoolCidrsResponse_ipv6CidrAssociations,
+    getAssociatedIpv6PoolCidrsResponse_nextToken,
+    getAssociatedIpv6PoolCidrsResponse_httpStatus,
+
+    -- ** GetAwsNetworkPerformanceData
+    getAwsNetworkPerformanceData_dataQueries,
+    getAwsNetworkPerformanceData_dryRun,
+    getAwsNetworkPerformanceData_endTime,
+    getAwsNetworkPerformanceData_maxResults,
+    getAwsNetworkPerformanceData_nextToken,
+    getAwsNetworkPerformanceData_startTime,
+    getAwsNetworkPerformanceDataResponse_dataResponses,
+    getAwsNetworkPerformanceDataResponse_nextToken,
+    getAwsNetworkPerformanceDataResponse_httpStatus,
+
+    -- ** GetCapacityReservationUsage
+    getCapacityReservationUsage_dryRun,
+    getCapacityReservationUsage_maxResults,
+    getCapacityReservationUsage_nextToken,
+    getCapacityReservationUsage_capacityReservationId,
+    getCapacityReservationUsageResponse_availableInstanceCount,
+    getCapacityReservationUsageResponse_capacityReservationId,
+    getCapacityReservationUsageResponse_instanceType,
+    getCapacityReservationUsageResponse_instanceUsages,
+    getCapacityReservationUsageResponse_nextToken,
+    getCapacityReservationUsageResponse_state,
+    getCapacityReservationUsageResponse_totalInstanceCount,
+    getCapacityReservationUsageResponse_httpStatus,
+
+    -- ** GetCoipPoolUsage
+    getCoipPoolUsage_dryRun,
+    getCoipPoolUsage_filters,
+    getCoipPoolUsage_maxResults,
+    getCoipPoolUsage_nextToken,
+    getCoipPoolUsage_poolId,
+    getCoipPoolUsageResponse_coipAddressUsages,
+    getCoipPoolUsageResponse_coipPoolId,
+    getCoipPoolUsageResponse_localGatewayRouteTableId,
+    getCoipPoolUsageResponse_httpStatus,
+
+    -- ** GetConsoleOutput
+    getConsoleOutput_dryRun,
+    getConsoleOutput_latest,
+    getConsoleOutput_instanceId,
+    getConsoleOutputResponse_instanceId,
+    getConsoleOutputResponse_output,
+    getConsoleOutputResponse_timestamp,
+    getConsoleOutputResponse_httpStatus,
+
+    -- ** GetConsoleScreenshot
+    getConsoleScreenshot_dryRun,
+    getConsoleScreenshot_wakeUp,
+    getConsoleScreenshot_instanceId,
+    getConsoleScreenshotResponse_imageData,
+    getConsoleScreenshotResponse_instanceId,
+    getConsoleScreenshotResponse_httpStatus,
+
+    -- ** GetDefaultCreditSpecification
+    getDefaultCreditSpecification_dryRun,
+    getDefaultCreditSpecification_instanceFamily,
+    getDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification,
+    getDefaultCreditSpecificationResponse_httpStatus,
+
+    -- ** GetEbsDefaultKmsKeyId
+    getEbsDefaultKmsKeyId_dryRun,
+    getEbsDefaultKmsKeyIdResponse_kmsKeyId,
+    getEbsDefaultKmsKeyIdResponse_httpStatus,
+
+    -- ** GetEbsEncryptionByDefault
+    getEbsEncryptionByDefault_dryRun,
+    getEbsEncryptionByDefaultResponse_ebsEncryptionByDefault,
+    getEbsEncryptionByDefaultResponse_httpStatus,
+
+    -- ** GetFlowLogsIntegrationTemplate
+    getFlowLogsIntegrationTemplate_dryRun,
+    getFlowLogsIntegrationTemplate_flowLogId,
+    getFlowLogsIntegrationTemplate_configDeliveryS3DestinationArn,
+    getFlowLogsIntegrationTemplate_integrateServices,
+    getFlowLogsIntegrationTemplateResponse_result,
+    getFlowLogsIntegrationTemplateResponse_httpStatus,
+
+    -- ** GetGroupsForCapacityReservation
+    getGroupsForCapacityReservation_dryRun,
+    getGroupsForCapacityReservation_maxResults,
+    getGroupsForCapacityReservation_nextToken,
+    getGroupsForCapacityReservation_capacityReservationId,
+    getGroupsForCapacityReservationResponse_capacityReservationGroups,
+    getGroupsForCapacityReservationResponse_nextToken,
+    getGroupsForCapacityReservationResponse_httpStatus,
+
+    -- ** GetHostReservationPurchasePreview
+    getHostReservationPurchasePreview_hostIdSet,
+    getHostReservationPurchasePreview_offeringId,
+    getHostReservationPurchasePreviewResponse_currencyCode,
+    getHostReservationPurchasePreviewResponse_purchase,
+    getHostReservationPurchasePreviewResponse_totalHourlyPrice,
+    getHostReservationPurchasePreviewResponse_totalUpfrontPrice,
+    getHostReservationPurchasePreviewResponse_httpStatus,
+
+    -- ** GetInstanceTypesFromInstanceRequirements
+    getInstanceTypesFromInstanceRequirements_dryRun,
+    getInstanceTypesFromInstanceRequirements_maxResults,
+    getInstanceTypesFromInstanceRequirements_nextToken,
+    getInstanceTypesFromInstanceRequirements_architectureTypes,
+    getInstanceTypesFromInstanceRequirements_virtualizationTypes,
+    getInstanceTypesFromInstanceRequirements_instanceRequirements,
+    getInstanceTypesFromInstanceRequirementsResponse_instanceTypes,
+    getInstanceTypesFromInstanceRequirementsResponse_nextToken,
+    getInstanceTypesFromInstanceRequirementsResponse_httpStatus,
+
+    -- ** GetInstanceUefiData
+    getInstanceUefiData_dryRun,
+    getInstanceUefiData_instanceId,
+    getInstanceUefiDataResponse_instanceId,
+    getInstanceUefiDataResponse_uefiData,
+    getInstanceUefiDataResponse_httpStatus,
+
+    -- ** GetIpamAddressHistory
+    getIpamAddressHistory_dryRun,
+    getIpamAddressHistory_endTime,
+    getIpamAddressHistory_maxResults,
+    getIpamAddressHistory_nextToken,
+    getIpamAddressHistory_startTime,
+    getIpamAddressHistory_vpcId,
+    getIpamAddressHistory_cidr,
+    getIpamAddressHistory_ipamScopeId,
+    getIpamAddressHistoryResponse_historyRecords,
+    getIpamAddressHistoryResponse_nextToken,
+    getIpamAddressHistoryResponse_httpStatus,
+
+    -- ** GetIpamPoolAllocations
+    getIpamPoolAllocations_dryRun,
+    getIpamPoolAllocations_filters,
+    getIpamPoolAllocations_ipamPoolAllocationId,
+    getIpamPoolAllocations_maxResults,
+    getIpamPoolAllocations_nextToken,
+    getIpamPoolAllocations_ipamPoolId,
+    getIpamPoolAllocationsResponse_ipamPoolAllocations,
+    getIpamPoolAllocationsResponse_nextToken,
+    getIpamPoolAllocationsResponse_httpStatus,
+
+    -- ** GetIpamPoolCidrs
+    getIpamPoolCidrs_dryRun,
+    getIpamPoolCidrs_filters,
+    getIpamPoolCidrs_maxResults,
+    getIpamPoolCidrs_nextToken,
+    getIpamPoolCidrs_ipamPoolId,
+    getIpamPoolCidrsResponse_ipamPoolCidrs,
+    getIpamPoolCidrsResponse_nextToken,
+    getIpamPoolCidrsResponse_httpStatus,
+
+    -- ** GetIpamResourceCidrs
+    getIpamResourceCidrs_dryRun,
+    getIpamResourceCidrs_filters,
+    getIpamResourceCidrs_ipamPoolId,
+    getIpamResourceCidrs_maxResults,
+    getIpamResourceCidrs_nextToken,
+    getIpamResourceCidrs_resourceId,
+    getIpamResourceCidrs_resourceOwner,
+    getIpamResourceCidrs_resourceTag,
+    getIpamResourceCidrs_resourceType,
+    getIpamResourceCidrs_ipamScopeId,
+    getIpamResourceCidrsResponse_ipamResourceCidrs,
+    getIpamResourceCidrsResponse_nextToken,
+    getIpamResourceCidrsResponse_httpStatus,
+
+    -- ** GetLaunchTemplateData
+    getLaunchTemplateData_dryRun,
+    getLaunchTemplateData_instanceId,
+    getLaunchTemplateDataResponse_launchTemplateData,
+    getLaunchTemplateDataResponse_httpStatus,
+
+    -- ** GetManagedPrefixListAssociations
+    getManagedPrefixListAssociations_dryRun,
+    getManagedPrefixListAssociations_maxResults,
+    getManagedPrefixListAssociations_nextToken,
+    getManagedPrefixListAssociations_prefixListId,
+    getManagedPrefixListAssociationsResponse_nextToken,
+    getManagedPrefixListAssociationsResponse_prefixListAssociations,
+    getManagedPrefixListAssociationsResponse_httpStatus,
+
+    -- ** GetManagedPrefixListEntries
+    getManagedPrefixListEntries_dryRun,
+    getManagedPrefixListEntries_maxResults,
+    getManagedPrefixListEntries_nextToken,
+    getManagedPrefixListEntries_targetVersion,
+    getManagedPrefixListEntries_prefixListId,
+    getManagedPrefixListEntriesResponse_entries,
+    getManagedPrefixListEntriesResponse_nextToken,
+    getManagedPrefixListEntriesResponse_httpStatus,
+
+    -- ** GetNetworkInsightsAccessScopeAnalysisFindings
+    getNetworkInsightsAccessScopeAnalysisFindings_dryRun,
+    getNetworkInsightsAccessScopeAnalysisFindings_maxResults,
+    getNetworkInsightsAccessScopeAnalysisFindings_nextToken,
+    getNetworkInsightsAccessScopeAnalysisFindings_networkInsightsAccessScopeAnalysisId,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisFindings,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_analysisStatus,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_networkInsightsAccessScopeAnalysisId,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_nextToken,
+    getNetworkInsightsAccessScopeAnalysisFindingsResponse_httpStatus,
+
+    -- ** GetNetworkInsightsAccessScopeContent
+    getNetworkInsightsAccessScopeContent_dryRun,
+    getNetworkInsightsAccessScopeContent_networkInsightsAccessScopeId,
+    getNetworkInsightsAccessScopeContentResponse_networkInsightsAccessScopeContent,
+    getNetworkInsightsAccessScopeContentResponse_httpStatus,
+
+    -- ** GetPasswordData
+    getPasswordData_dryRun,
+    getPasswordData_instanceId,
+    getPasswordDataResponse_httpStatus,
+    getPasswordDataResponse_instanceId,
+    getPasswordDataResponse_passwordData,
+    getPasswordDataResponse_timestamp,
+
+    -- ** GetReservedInstancesExchangeQuote
+    getReservedInstancesExchangeQuote_dryRun,
+    getReservedInstancesExchangeQuote_targetConfigurations,
+    getReservedInstancesExchangeQuote_reservedInstanceIds,
+    getReservedInstancesExchangeQuoteResponse_currencyCode,
+    getReservedInstancesExchangeQuoteResponse_isValidExchange,
+    getReservedInstancesExchangeQuoteResponse_outputReservedInstancesWillExpireAt,
+    getReservedInstancesExchangeQuoteResponse_paymentDue,
+    getReservedInstancesExchangeQuoteResponse_reservedInstanceValueRollup,
+    getReservedInstancesExchangeQuoteResponse_reservedInstanceValueSet,
+    getReservedInstancesExchangeQuoteResponse_targetConfigurationValueRollup,
+    getReservedInstancesExchangeQuoteResponse_targetConfigurationValueSet,
+    getReservedInstancesExchangeQuoteResponse_validationFailureReason,
+    getReservedInstancesExchangeQuoteResponse_httpStatus,
+
+    -- ** GetSerialConsoleAccessStatus
+    getSerialConsoleAccessStatus_dryRun,
+    getSerialConsoleAccessStatusResponse_serialConsoleAccessEnabled,
+    getSerialConsoleAccessStatusResponse_httpStatus,
+
+    -- ** GetSpotPlacementScores
+    getSpotPlacementScores_dryRun,
+    getSpotPlacementScores_instanceRequirementsWithMetadata,
+    getSpotPlacementScores_instanceTypes,
+    getSpotPlacementScores_maxResults,
+    getSpotPlacementScores_nextToken,
+    getSpotPlacementScores_regionNames,
+    getSpotPlacementScores_singleAvailabilityZone,
+    getSpotPlacementScores_targetCapacityUnitType,
+    getSpotPlacementScores_targetCapacity,
+    getSpotPlacementScoresResponse_nextToken,
+    getSpotPlacementScoresResponse_spotPlacementScores,
+    getSpotPlacementScoresResponse_httpStatus,
+
+    -- ** GetSubnetCidrReservations
+    getSubnetCidrReservations_dryRun,
+    getSubnetCidrReservations_filters,
+    getSubnetCidrReservations_maxResults,
+    getSubnetCidrReservations_nextToken,
+    getSubnetCidrReservations_subnetId,
+    getSubnetCidrReservationsResponse_nextToken,
+    getSubnetCidrReservationsResponse_subnetIpv4CidrReservations,
+    getSubnetCidrReservationsResponse_subnetIpv6CidrReservations,
+    getSubnetCidrReservationsResponse_httpStatus,
+
+    -- ** GetTransitGatewayAttachmentPropagations
+    getTransitGatewayAttachmentPropagations_dryRun,
+    getTransitGatewayAttachmentPropagations_filters,
+    getTransitGatewayAttachmentPropagations_maxResults,
+    getTransitGatewayAttachmentPropagations_nextToken,
+    getTransitGatewayAttachmentPropagations_transitGatewayAttachmentId,
+    getTransitGatewayAttachmentPropagationsResponse_nextToken,
+    getTransitGatewayAttachmentPropagationsResponse_transitGatewayAttachmentPropagations,
+    getTransitGatewayAttachmentPropagationsResponse_httpStatus,
+
+    -- ** GetTransitGatewayMulticastDomainAssociations
+    getTransitGatewayMulticastDomainAssociations_dryRun,
+    getTransitGatewayMulticastDomainAssociations_filters,
+    getTransitGatewayMulticastDomainAssociations_maxResults,
+    getTransitGatewayMulticastDomainAssociations_nextToken,
+    getTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+    getTransitGatewayMulticastDomainAssociationsResponse_multicastDomainAssociations,
+    getTransitGatewayMulticastDomainAssociationsResponse_nextToken,
+    getTransitGatewayMulticastDomainAssociationsResponse_httpStatus,
+
+    -- ** GetTransitGatewayPolicyTableAssociations
+    getTransitGatewayPolicyTableAssociations_dryRun,
+    getTransitGatewayPolicyTableAssociations_filters,
+    getTransitGatewayPolicyTableAssociations_maxResults,
+    getTransitGatewayPolicyTableAssociations_nextToken,
+    getTransitGatewayPolicyTableAssociations_transitGatewayPolicyTableId,
+    getTransitGatewayPolicyTableAssociationsResponse_associations,
+    getTransitGatewayPolicyTableAssociationsResponse_nextToken,
+    getTransitGatewayPolicyTableAssociationsResponse_httpStatus,
+
+    -- ** GetTransitGatewayPolicyTableEntries
+    getTransitGatewayPolicyTableEntries_dryRun,
+    getTransitGatewayPolicyTableEntries_filters,
+    getTransitGatewayPolicyTableEntries_maxResults,
+    getTransitGatewayPolicyTableEntries_nextToken,
+    getTransitGatewayPolicyTableEntries_transitGatewayPolicyTableId,
+    getTransitGatewayPolicyTableEntriesResponse_transitGatewayPolicyTableEntries,
+    getTransitGatewayPolicyTableEntriesResponse_httpStatus,
+
+    -- ** GetTransitGatewayPrefixListReferences
+    getTransitGatewayPrefixListReferences_dryRun,
+    getTransitGatewayPrefixListReferences_filters,
+    getTransitGatewayPrefixListReferences_maxResults,
+    getTransitGatewayPrefixListReferences_nextToken,
+    getTransitGatewayPrefixListReferences_transitGatewayRouteTableId,
+    getTransitGatewayPrefixListReferencesResponse_nextToken,
+    getTransitGatewayPrefixListReferencesResponse_transitGatewayPrefixListReferences,
+    getTransitGatewayPrefixListReferencesResponse_httpStatus,
+
+    -- ** GetTransitGatewayRouteTableAssociations
+    getTransitGatewayRouteTableAssociations_dryRun,
+    getTransitGatewayRouteTableAssociations_filters,
+    getTransitGatewayRouteTableAssociations_maxResults,
+    getTransitGatewayRouteTableAssociations_nextToken,
+    getTransitGatewayRouteTableAssociations_transitGatewayRouteTableId,
+    getTransitGatewayRouteTableAssociationsResponse_associations,
+    getTransitGatewayRouteTableAssociationsResponse_nextToken,
+    getTransitGatewayRouteTableAssociationsResponse_httpStatus,
+
+    -- ** GetTransitGatewayRouteTablePropagations
+    getTransitGatewayRouteTablePropagations_dryRun,
+    getTransitGatewayRouteTablePropagations_filters,
+    getTransitGatewayRouteTablePropagations_maxResults,
+    getTransitGatewayRouteTablePropagations_nextToken,
+    getTransitGatewayRouteTablePropagations_transitGatewayRouteTableId,
+    getTransitGatewayRouteTablePropagationsResponse_nextToken,
+    getTransitGatewayRouteTablePropagationsResponse_transitGatewayRouteTablePropagations,
+    getTransitGatewayRouteTablePropagationsResponse_httpStatus,
+
+    -- ** GetVerifiedAccessEndpointPolicy
+    getVerifiedAccessEndpointPolicy_dryRun,
+    getVerifiedAccessEndpointPolicy_verifiedAccessEndpointId,
+    getVerifiedAccessEndpointPolicyResponse_policyDocument,
+    getVerifiedAccessEndpointPolicyResponse_policyEnabled,
+    getVerifiedAccessEndpointPolicyResponse_httpStatus,
+
+    -- ** GetVerifiedAccessGroupPolicy
+    getVerifiedAccessGroupPolicy_dryRun,
+    getVerifiedAccessGroupPolicy_verifiedAccessGroupId,
+    getVerifiedAccessGroupPolicyResponse_policyDocument,
+    getVerifiedAccessGroupPolicyResponse_policyEnabled,
+    getVerifiedAccessGroupPolicyResponse_httpStatus,
+
+    -- ** GetVpnConnectionDeviceSampleConfiguration
+    getVpnConnectionDeviceSampleConfiguration_dryRun,
+    getVpnConnectionDeviceSampleConfiguration_internetKeyExchangeVersion,
+    getVpnConnectionDeviceSampleConfiguration_vpnConnectionId,
+    getVpnConnectionDeviceSampleConfiguration_vpnConnectionDeviceTypeId,
+    getVpnConnectionDeviceSampleConfigurationResponse_vpnConnectionDeviceSampleConfiguration,
+    getVpnConnectionDeviceSampleConfigurationResponse_httpStatus,
+
+    -- ** GetVpnConnectionDeviceTypes
+    getVpnConnectionDeviceTypes_dryRun,
+    getVpnConnectionDeviceTypes_maxResults,
+    getVpnConnectionDeviceTypes_nextToken,
+    getVpnConnectionDeviceTypesResponse_nextToken,
+    getVpnConnectionDeviceTypesResponse_vpnConnectionDeviceTypes,
+    getVpnConnectionDeviceTypesResponse_httpStatus,
+
+    -- ** ImportClientVpnClientCertificateRevocationList
+    importClientVpnClientCertificateRevocationList_dryRun,
+    importClientVpnClientCertificateRevocationList_clientVpnEndpointId,
+    importClientVpnClientCertificateRevocationList_certificateRevocationList,
+    importClientVpnClientCertificateRevocationListResponse_return,
+    importClientVpnClientCertificateRevocationListResponse_httpStatus,
+
+    -- ** ImportImage
+    importImage_architecture,
+    importImage_bootMode,
+    importImage_clientData,
+    importImage_clientToken,
+    importImage_description,
+    importImage_diskContainers,
+    importImage_dryRun,
+    importImage_encrypted,
+    importImage_hypervisor,
+    importImage_kmsKeyId,
+    importImage_licenseSpecifications,
+    importImage_licenseType,
+    importImage_platform,
+    importImage_roleName,
+    importImage_tagSpecifications,
+    importImage_usageOperation,
+    importImageResponse_architecture,
+    importImageResponse_description,
+    importImageResponse_encrypted,
+    importImageResponse_hypervisor,
+    importImageResponse_imageId,
+    importImageResponse_importTaskId,
+    importImageResponse_kmsKeyId,
+    importImageResponse_licenseSpecifications,
+    importImageResponse_licenseType,
+    importImageResponse_platform,
+    importImageResponse_progress,
+    importImageResponse_snapshotDetails,
+    importImageResponse_status,
+    importImageResponse_statusMessage,
+    importImageResponse_tags,
+    importImageResponse_usageOperation,
+    importImageResponse_httpStatus,
+
+    -- ** ImportInstance
+    importInstance_description,
+    importInstance_diskImages,
+    importInstance_dryRun,
+    importInstance_launchSpecification,
+    importInstance_platform,
+    importInstanceResponse_conversionTask,
+    importInstanceResponse_httpStatus,
+
+    -- ** ImportKeyPair
+    importKeyPair_dryRun,
+    importKeyPair_tagSpecifications,
+    importKeyPair_keyName,
+    importKeyPair_publicKeyMaterial,
+    importKeyPairResponse_keyFingerprint,
+    importKeyPairResponse_keyName,
+    importKeyPairResponse_keyPairId,
+    importKeyPairResponse_tags,
+    importKeyPairResponse_httpStatus,
+
+    -- ** ImportSnapshot
+    importSnapshot_clientData,
+    importSnapshot_clientToken,
+    importSnapshot_description,
+    importSnapshot_diskContainer,
+    importSnapshot_dryRun,
+    importSnapshot_encrypted,
+    importSnapshot_kmsKeyId,
+    importSnapshot_roleName,
+    importSnapshot_tagSpecifications,
+    importSnapshotResponse_description,
+    importSnapshotResponse_importTaskId,
+    importSnapshotResponse_snapshotTaskDetail,
+    importSnapshotResponse_tags,
+    importSnapshotResponse_httpStatus,
+
+    -- ** ImportVolume
+    importVolume_description,
+    importVolume_dryRun,
+    importVolume_availabilityZone,
+    importVolume_image,
+    importVolume_volume,
+    importVolumeResponse_conversionTask,
+    importVolumeResponse_httpStatus,
+
+    -- ** ListImagesInRecycleBin
+    listImagesInRecycleBin_dryRun,
+    listImagesInRecycleBin_imageIds,
+    listImagesInRecycleBin_maxResults,
+    listImagesInRecycleBin_nextToken,
+    listImagesInRecycleBinResponse_images,
+    listImagesInRecycleBinResponse_nextToken,
+    listImagesInRecycleBinResponse_httpStatus,
+
+    -- ** ListSnapshotsInRecycleBin
+    listSnapshotsInRecycleBin_dryRun,
+    listSnapshotsInRecycleBin_maxResults,
+    listSnapshotsInRecycleBin_nextToken,
+    listSnapshotsInRecycleBin_snapshotIds,
+    listSnapshotsInRecycleBinResponse_nextToken,
+    listSnapshotsInRecycleBinResponse_snapshots,
+    listSnapshotsInRecycleBinResponse_httpStatus,
+
+    -- ** ModifyAddressAttribute
+    modifyAddressAttribute_domainName,
+    modifyAddressAttribute_dryRun,
+    modifyAddressAttribute_allocationId,
+    modifyAddressAttributeResponse_address,
+    modifyAddressAttributeResponse_httpStatus,
+
+    -- ** ModifyAvailabilityZoneGroup
+    modifyAvailabilityZoneGroup_dryRun,
+    modifyAvailabilityZoneGroup_groupName,
+    modifyAvailabilityZoneGroup_optInStatus,
+    modifyAvailabilityZoneGroupResponse_return,
+    modifyAvailabilityZoneGroupResponse_httpStatus,
+
+    -- ** ModifyCapacityReservation
+    modifyCapacityReservation_accept,
+    modifyCapacityReservation_additionalInfo,
+    modifyCapacityReservation_dryRun,
+    modifyCapacityReservation_endDate,
+    modifyCapacityReservation_endDateType,
+    modifyCapacityReservation_instanceCount,
+    modifyCapacityReservation_capacityReservationId,
+    modifyCapacityReservationResponse_return,
+    modifyCapacityReservationResponse_httpStatus,
+
+    -- ** ModifyCapacityReservationFleet
+    modifyCapacityReservationFleet_dryRun,
+    modifyCapacityReservationFleet_endDate,
+    modifyCapacityReservationFleet_removeEndDate,
+    modifyCapacityReservationFleet_totalTargetCapacity,
+    modifyCapacityReservationFleet_capacityReservationFleetId,
+    modifyCapacityReservationFleetResponse_return,
+    modifyCapacityReservationFleetResponse_httpStatus,
+
+    -- ** ModifyClientVpnEndpoint
+    modifyClientVpnEndpoint_clientConnectOptions,
+    modifyClientVpnEndpoint_clientLoginBannerOptions,
+    modifyClientVpnEndpoint_connectionLogOptions,
+    modifyClientVpnEndpoint_description,
+    modifyClientVpnEndpoint_dnsServers,
+    modifyClientVpnEndpoint_dryRun,
+    modifyClientVpnEndpoint_securityGroupIds,
+    modifyClientVpnEndpoint_selfServicePortal,
+    modifyClientVpnEndpoint_serverCertificateArn,
+    modifyClientVpnEndpoint_sessionTimeoutHours,
+    modifyClientVpnEndpoint_splitTunnel,
+    modifyClientVpnEndpoint_vpcId,
+    modifyClientVpnEndpoint_vpnPort,
+    modifyClientVpnEndpoint_clientVpnEndpointId,
+    modifyClientVpnEndpointResponse_return,
+    modifyClientVpnEndpointResponse_httpStatus,
+
+    -- ** ModifyDefaultCreditSpecification
+    modifyDefaultCreditSpecification_dryRun,
+    modifyDefaultCreditSpecification_instanceFamily,
+    modifyDefaultCreditSpecification_cpuCredits,
+    modifyDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification,
+    modifyDefaultCreditSpecificationResponse_httpStatus,
+
+    -- ** ModifyEbsDefaultKmsKeyId
+    modifyEbsDefaultKmsKeyId_dryRun,
+    modifyEbsDefaultKmsKeyId_kmsKeyId,
+    modifyEbsDefaultKmsKeyIdResponse_kmsKeyId,
+    modifyEbsDefaultKmsKeyIdResponse_httpStatus,
+
+    -- ** ModifyFleet
+    modifyFleet_context,
+    modifyFleet_dryRun,
+    modifyFleet_excessCapacityTerminationPolicy,
+    modifyFleet_launchTemplateConfigs,
+    modifyFleet_targetCapacitySpecification,
+    modifyFleet_fleetId,
+    modifyFleetResponse_return,
+    modifyFleetResponse_httpStatus,
+
+    -- ** ModifyFpgaImageAttribute
+    modifyFpgaImageAttribute_attribute,
+    modifyFpgaImageAttribute_description,
+    modifyFpgaImageAttribute_dryRun,
+    modifyFpgaImageAttribute_loadPermission,
+    modifyFpgaImageAttribute_name,
+    modifyFpgaImageAttribute_operationType,
+    modifyFpgaImageAttribute_productCodes,
+    modifyFpgaImageAttribute_userGroups,
+    modifyFpgaImageAttribute_userIds,
+    modifyFpgaImageAttribute_fpgaImageId,
+    modifyFpgaImageAttributeResponse_fpgaImageAttribute,
+    modifyFpgaImageAttributeResponse_httpStatus,
+
+    -- ** ModifyHosts
+    modifyHosts_autoPlacement,
+    modifyHosts_hostRecovery,
+    modifyHosts_instanceFamily,
+    modifyHosts_instanceType,
+    modifyHosts_hostIds,
+    modifyHostsResponse_successful,
+    modifyHostsResponse_unsuccessful,
+    modifyHostsResponse_httpStatus,
+
+    -- ** ModifyIdFormat
+    modifyIdFormat_resource,
+    modifyIdFormat_useLongIds,
+
+    -- ** ModifyIdentityIdFormat
+    modifyIdentityIdFormat_principalArn,
+    modifyIdentityIdFormat_resource,
+    modifyIdentityIdFormat_useLongIds,
+
+    -- ** ModifyImageAttribute
+    modifyImageAttribute_attribute,
+    modifyImageAttribute_description,
+    modifyImageAttribute_dryRun,
+    modifyImageAttribute_launchPermission,
+    modifyImageAttribute_operationType,
+    modifyImageAttribute_organizationArns,
+    modifyImageAttribute_organizationalUnitArns,
+    modifyImageAttribute_productCodes,
+    modifyImageAttribute_userGroups,
+    modifyImageAttribute_userIds,
+    modifyImageAttribute_value,
+    modifyImageAttribute_imageId,
+
+    -- ** ModifyInstanceAttribute
+    modifyInstanceAttribute_attribute,
+    modifyInstanceAttribute_blockDeviceMappings,
+    modifyInstanceAttribute_disableApiStop,
+    modifyInstanceAttribute_disableApiTermination,
+    modifyInstanceAttribute_dryRun,
+    modifyInstanceAttribute_ebsOptimized,
+    modifyInstanceAttribute_enaSupport,
+    modifyInstanceAttribute_groups,
+    modifyInstanceAttribute_instanceInitiatedShutdownBehavior,
+    modifyInstanceAttribute_instanceType,
+    modifyInstanceAttribute_kernel,
+    modifyInstanceAttribute_ramdisk,
+    modifyInstanceAttribute_sourceDestCheck,
+    modifyInstanceAttribute_sriovNetSupport,
+    modifyInstanceAttribute_userData,
+    modifyInstanceAttribute_value,
+    modifyInstanceAttribute_instanceId,
+
+    -- ** ModifyInstanceCapacityReservationAttributes
+    modifyInstanceCapacityReservationAttributes_dryRun,
+    modifyInstanceCapacityReservationAttributes_instanceId,
+    modifyInstanceCapacityReservationAttributes_capacityReservationSpecification,
+    modifyInstanceCapacityReservationAttributesResponse_return,
+    modifyInstanceCapacityReservationAttributesResponse_httpStatus,
+
+    -- ** ModifyInstanceCreditSpecification
+    modifyInstanceCreditSpecification_clientToken,
+    modifyInstanceCreditSpecification_dryRun,
+    modifyInstanceCreditSpecification_instanceCreditSpecifications,
+    modifyInstanceCreditSpecificationResponse_successfulInstanceCreditSpecifications,
+    modifyInstanceCreditSpecificationResponse_unsuccessfulInstanceCreditSpecifications,
+    modifyInstanceCreditSpecificationResponse_httpStatus,
+
+    -- ** ModifyInstanceEventStartTime
+    modifyInstanceEventStartTime_dryRun,
+    modifyInstanceEventStartTime_instanceId,
+    modifyInstanceEventStartTime_instanceEventId,
+    modifyInstanceEventStartTime_notBefore,
+    modifyInstanceEventStartTimeResponse_event,
+    modifyInstanceEventStartTimeResponse_httpStatus,
+
+    -- ** ModifyInstanceEventWindow
+    modifyInstanceEventWindow_cronExpression,
+    modifyInstanceEventWindow_dryRun,
+    modifyInstanceEventWindow_name,
+    modifyInstanceEventWindow_timeRanges,
+    modifyInstanceEventWindow_instanceEventWindowId,
+    modifyInstanceEventWindowResponse_instanceEventWindow,
+    modifyInstanceEventWindowResponse_httpStatus,
+
+    -- ** ModifyInstanceMaintenanceOptions
+    modifyInstanceMaintenanceOptions_autoRecovery,
+    modifyInstanceMaintenanceOptions_dryRun,
+    modifyInstanceMaintenanceOptions_instanceId,
+    modifyInstanceMaintenanceOptionsResponse_autoRecovery,
+    modifyInstanceMaintenanceOptionsResponse_instanceId,
+    modifyInstanceMaintenanceOptionsResponse_httpStatus,
+
+    -- ** ModifyInstanceMetadataOptions
+    modifyInstanceMetadataOptions_dryRun,
+    modifyInstanceMetadataOptions_httpEndpoint,
+    modifyInstanceMetadataOptions_httpProtocolIpv6,
+    modifyInstanceMetadataOptions_httpPutResponseHopLimit,
+    modifyInstanceMetadataOptions_httpTokens,
+    modifyInstanceMetadataOptions_instanceMetadataTags,
+    modifyInstanceMetadataOptions_instanceId,
+    modifyInstanceMetadataOptionsResponse_instanceId,
+    modifyInstanceMetadataOptionsResponse_instanceMetadataOptions,
+    modifyInstanceMetadataOptionsResponse_httpStatus,
+
+    -- ** ModifyInstancePlacement
+    modifyInstancePlacement_affinity,
+    modifyInstancePlacement_groupId,
+    modifyInstancePlacement_groupName,
+    modifyInstancePlacement_hostId,
+    modifyInstancePlacement_hostResourceGroupArn,
+    modifyInstancePlacement_partitionNumber,
+    modifyInstancePlacement_tenancy,
+    modifyInstancePlacement_instanceId,
+    modifyInstancePlacementResponse_return,
+    modifyInstancePlacementResponse_httpStatus,
+
+    -- ** ModifyIpam
+    modifyIpam_addOperatingRegions,
+    modifyIpam_description,
+    modifyIpam_dryRun,
+    modifyIpam_removeOperatingRegions,
+    modifyIpam_ipamId,
+    modifyIpamResponse_ipam,
+    modifyIpamResponse_httpStatus,
+
+    -- ** ModifyIpamPool
+    modifyIpamPool_addAllocationResourceTags,
+    modifyIpamPool_allocationDefaultNetmaskLength,
+    modifyIpamPool_allocationMaxNetmaskLength,
+    modifyIpamPool_allocationMinNetmaskLength,
+    modifyIpamPool_autoImport,
+    modifyIpamPool_clearAllocationDefaultNetmaskLength,
+    modifyIpamPool_description,
+    modifyIpamPool_dryRun,
+    modifyIpamPool_removeAllocationResourceTags,
+    modifyIpamPool_ipamPoolId,
+    modifyIpamPoolResponse_ipamPool,
+    modifyIpamPoolResponse_httpStatus,
+
+    -- ** ModifyIpamResourceCidr
+    modifyIpamResourceCidr_destinationIpamScopeId,
+    modifyIpamResourceCidr_dryRun,
+    modifyIpamResourceCidr_resourceId,
+    modifyIpamResourceCidr_resourceCidr,
+    modifyIpamResourceCidr_resourceRegion,
+    modifyIpamResourceCidr_currentIpamScopeId,
+    modifyIpamResourceCidr_monitored,
+    modifyIpamResourceCidrResponse_ipamResourceCidr,
+    modifyIpamResourceCidrResponse_httpStatus,
+
+    -- ** ModifyIpamScope
+    modifyIpamScope_description,
+    modifyIpamScope_dryRun,
+    modifyIpamScope_ipamScopeId,
+    modifyIpamScopeResponse_ipamScope,
+    modifyIpamScopeResponse_httpStatus,
+
+    -- ** ModifyLaunchTemplate
+    modifyLaunchTemplate_clientToken,
+    modifyLaunchTemplate_defaultVersion,
+    modifyLaunchTemplate_dryRun,
+    modifyLaunchTemplate_launchTemplateId,
+    modifyLaunchTemplate_launchTemplateName,
+    modifyLaunchTemplateResponse_launchTemplate,
+    modifyLaunchTemplateResponse_httpStatus,
+
+    -- ** ModifyLocalGatewayRoute
+    modifyLocalGatewayRoute_dryRun,
+    modifyLocalGatewayRoute_localGatewayVirtualInterfaceGroupId,
+    modifyLocalGatewayRoute_networkInterfaceId,
+    modifyLocalGatewayRoute_destinationCidrBlock,
+    modifyLocalGatewayRoute_localGatewayRouteTableId,
+    modifyLocalGatewayRouteResponse_route,
+    modifyLocalGatewayRouteResponse_httpStatus,
+
+    -- ** ModifyManagedPrefixList
+    modifyManagedPrefixList_addEntries,
+    modifyManagedPrefixList_currentVersion,
+    modifyManagedPrefixList_dryRun,
+    modifyManagedPrefixList_maxEntries,
+    modifyManagedPrefixList_prefixListName,
+    modifyManagedPrefixList_removeEntries,
+    modifyManagedPrefixList_prefixListId,
+    modifyManagedPrefixListResponse_prefixList,
+    modifyManagedPrefixListResponse_httpStatus,
+
+    -- ** ModifyNetworkInterfaceAttribute
+    modifyNetworkInterfaceAttribute_attachment,
+    modifyNetworkInterfaceAttribute_description,
+    modifyNetworkInterfaceAttribute_dryRun,
+    modifyNetworkInterfaceAttribute_enaSrdSpecification,
+    modifyNetworkInterfaceAttribute_groups,
+    modifyNetworkInterfaceAttribute_sourceDestCheck,
+    modifyNetworkInterfaceAttribute_networkInterfaceId,
+
+    -- ** ModifyPrivateDnsNameOptions
+    modifyPrivateDnsNameOptions_dryRun,
+    modifyPrivateDnsNameOptions_enableResourceNameDnsAAAARecord,
+    modifyPrivateDnsNameOptions_enableResourceNameDnsARecord,
+    modifyPrivateDnsNameOptions_instanceId,
+    modifyPrivateDnsNameOptions_privateDnsHostnameType,
+    modifyPrivateDnsNameOptionsResponse_return,
+    modifyPrivateDnsNameOptionsResponse_httpStatus,
+
+    -- ** ModifyReservedInstances
+    modifyReservedInstances_clientToken,
+    modifyReservedInstances_reservedInstancesIds,
+    modifyReservedInstances_targetConfigurations,
+    modifyReservedInstancesResponse_reservedInstancesModificationId,
+    modifyReservedInstancesResponse_httpStatus,
+
+    -- ** ModifySecurityGroupRules
+    modifySecurityGroupRules_dryRun,
+    modifySecurityGroupRules_groupId,
+    modifySecurityGroupRules_securityGroupRules,
+    modifySecurityGroupRulesResponse_return,
+    modifySecurityGroupRulesResponse_httpStatus,
+
+    -- ** ModifySnapshotAttribute
+    modifySnapshotAttribute_attribute,
+    modifySnapshotAttribute_createVolumePermission,
+    modifySnapshotAttribute_dryRun,
+    modifySnapshotAttribute_groupNames,
+    modifySnapshotAttribute_operationType,
+    modifySnapshotAttribute_userIds,
+    modifySnapshotAttribute_snapshotId,
+
+    -- ** ModifySnapshotTier
+    modifySnapshotTier_dryRun,
+    modifySnapshotTier_storageTier,
+    modifySnapshotTier_snapshotId,
+    modifySnapshotTierResponse_snapshotId,
+    modifySnapshotTierResponse_tieringStartTime,
+    modifySnapshotTierResponse_httpStatus,
+
+    -- ** ModifySpotFleetRequest
+    modifySpotFleetRequest_context,
+    modifySpotFleetRequest_excessCapacityTerminationPolicy,
+    modifySpotFleetRequest_launchTemplateConfigs,
+    modifySpotFleetRequest_onDemandTargetCapacity,
+    modifySpotFleetRequest_targetCapacity,
+    modifySpotFleetRequest_spotFleetRequestId,
+    modifySpotFleetRequestResponse_return,
+    modifySpotFleetRequestResponse_httpStatus,
+
+    -- ** ModifySubnetAttribute
+    modifySubnetAttribute_assignIpv6AddressOnCreation,
+    modifySubnetAttribute_customerOwnedIpv4Pool,
+    modifySubnetAttribute_disableLniAtDeviceIndex,
+    modifySubnetAttribute_enableDns64,
+    modifySubnetAttribute_enableLniAtDeviceIndex,
+    modifySubnetAttribute_enableResourceNameDnsAAAARecordOnLaunch,
+    modifySubnetAttribute_enableResourceNameDnsARecordOnLaunch,
+    modifySubnetAttribute_mapCustomerOwnedIpOnLaunch,
+    modifySubnetAttribute_mapPublicIpOnLaunch,
+    modifySubnetAttribute_privateDnsHostnameTypeOnLaunch,
+    modifySubnetAttribute_subnetId,
+
+    -- ** ModifyTrafficMirrorFilterNetworkServices
+    modifyTrafficMirrorFilterNetworkServices_addNetworkServices,
+    modifyTrafficMirrorFilterNetworkServices_dryRun,
+    modifyTrafficMirrorFilterNetworkServices_removeNetworkServices,
+    modifyTrafficMirrorFilterNetworkServices_trafficMirrorFilterId,
+    modifyTrafficMirrorFilterNetworkServicesResponse_trafficMirrorFilter,
+    modifyTrafficMirrorFilterNetworkServicesResponse_httpStatus,
+
+    -- ** ModifyTrafficMirrorFilterRule
+    modifyTrafficMirrorFilterRule_description,
+    modifyTrafficMirrorFilterRule_destinationCidrBlock,
+    modifyTrafficMirrorFilterRule_destinationPortRange,
+    modifyTrafficMirrorFilterRule_dryRun,
+    modifyTrafficMirrorFilterRule_protocol,
+    modifyTrafficMirrorFilterRule_removeFields,
+    modifyTrafficMirrorFilterRule_ruleAction,
+    modifyTrafficMirrorFilterRule_ruleNumber,
+    modifyTrafficMirrorFilterRule_sourceCidrBlock,
+    modifyTrafficMirrorFilterRule_sourcePortRange,
+    modifyTrafficMirrorFilterRule_trafficDirection,
+    modifyTrafficMirrorFilterRule_trafficMirrorFilterRuleId,
+    modifyTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule,
+    modifyTrafficMirrorFilterRuleResponse_httpStatus,
+
+    -- ** ModifyTrafficMirrorSession
+    modifyTrafficMirrorSession_description,
+    modifyTrafficMirrorSession_dryRun,
+    modifyTrafficMirrorSession_packetLength,
+    modifyTrafficMirrorSession_removeFields,
+    modifyTrafficMirrorSession_sessionNumber,
+    modifyTrafficMirrorSession_trafficMirrorFilterId,
+    modifyTrafficMirrorSession_trafficMirrorTargetId,
+    modifyTrafficMirrorSession_virtualNetworkId,
+    modifyTrafficMirrorSession_trafficMirrorSessionId,
+    modifyTrafficMirrorSessionResponse_trafficMirrorSession,
+    modifyTrafficMirrorSessionResponse_httpStatus,
+
+    -- ** ModifyTransitGateway
+    modifyTransitGateway_description,
+    modifyTransitGateway_dryRun,
+    modifyTransitGateway_options,
+    modifyTransitGateway_transitGatewayId,
+    modifyTransitGatewayResponse_transitGateway,
+    modifyTransitGatewayResponse_httpStatus,
+
+    -- ** ModifyTransitGatewayPrefixListReference
+    modifyTransitGatewayPrefixListReference_blackhole,
+    modifyTransitGatewayPrefixListReference_dryRun,
+    modifyTransitGatewayPrefixListReference_transitGatewayAttachmentId,
+    modifyTransitGatewayPrefixListReference_transitGatewayRouteTableId,
+    modifyTransitGatewayPrefixListReference_prefixListId,
+    modifyTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference,
+    modifyTransitGatewayPrefixListReferenceResponse_httpStatus,
+
+    -- ** ModifyTransitGatewayVpcAttachment
+    modifyTransitGatewayVpcAttachment_addSubnetIds,
+    modifyTransitGatewayVpcAttachment_dryRun,
+    modifyTransitGatewayVpcAttachment_options,
+    modifyTransitGatewayVpcAttachment_removeSubnetIds,
+    modifyTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+    modifyTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    modifyTransitGatewayVpcAttachmentResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessEndpoint
+    modifyVerifiedAccessEndpoint_clientToken,
+    modifyVerifiedAccessEndpoint_description,
+    modifyVerifiedAccessEndpoint_dryRun,
+    modifyVerifiedAccessEndpoint_loadBalancerOptions,
+    modifyVerifiedAccessEndpoint_networkInterfaceOptions,
+    modifyVerifiedAccessEndpoint_verifiedAccessGroupId,
+    modifyVerifiedAccessEndpoint_verifiedAccessEndpointId,
+    modifyVerifiedAccessEndpointResponse_verifiedAccessEndpoint,
+    modifyVerifiedAccessEndpointResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessEndpointPolicy
+    modifyVerifiedAccessEndpointPolicy_clientToken,
+    modifyVerifiedAccessEndpointPolicy_dryRun,
+    modifyVerifiedAccessEndpointPolicy_policyDocument,
+    modifyVerifiedAccessEndpointPolicy_verifiedAccessEndpointId,
+    modifyVerifiedAccessEndpointPolicy_policyEnabled,
+    modifyVerifiedAccessEndpointPolicyResponse_policyDocument,
+    modifyVerifiedAccessEndpointPolicyResponse_policyEnabled,
+    modifyVerifiedAccessEndpointPolicyResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessGroup
+    modifyVerifiedAccessGroup_clientToken,
+    modifyVerifiedAccessGroup_description,
+    modifyVerifiedAccessGroup_dryRun,
+    modifyVerifiedAccessGroup_verifiedAccessInstanceId,
+    modifyVerifiedAccessGroup_verifiedAccessGroupId,
+    modifyVerifiedAccessGroupResponse_verifiedAccessGroup,
+    modifyVerifiedAccessGroupResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessGroupPolicy
+    modifyVerifiedAccessGroupPolicy_clientToken,
+    modifyVerifiedAccessGroupPolicy_dryRun,
+    modifyVerifiedAccessGroupPolicy_policyDocument,
+    modifyVerifiedAccessGroupPolicy_verifiedAccessGroupId,
+    modifyVerifiedAccessGroupPolicy_policyEnabled,
+    modifyVerifiedAccessGroupPolicyResponse_policyDocument,
+    modifyVerifiedAccessGroupPolicyResponse_policyEnabled,
+    modifyVerifiedAccessGroupPolicyResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessInstance
+    modifyVerifiedAccessInstance_clientToken,
+    modifyVerifiedAccessInstance_description,
+    modifyVerifiedAccessInstance_dryRun,
+    modifyVerifiedAccessInstance_verifiedAccessInstanceId,
+    modifyVerifiedAccessInstanceResponse_verifiedAccessInstance,
+    modifyVerifiedAccessInstanceResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessInstanceLoggingConfiguration
+    modifyVerifiedAccessInstanceLoggingConfiguration_clientToken,
+    modifyVerifiedAccessInstanceLoggingConfiguration_dryRun,
+    modifyVerifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId,
+    modifyVerifiedAccessInstanceLoggingConfiguration_accessLogs,
+    modifyVerifiedAccessInstanceLoggingConfigurationResponse_loggingConfiguration,
+    modifyVerifiedAccessInstanceLoggingConfigurationResponse_httpStatus,
+
+    -- ** ModifyVerifiedAccessTrustProvider
+    modifyVerifiedAccessTrustProvider_clientToken,
+    modifyVerifiedAccessTrustProvider_description,
+    modifyVerifiedAccessTrustProvider_dryRun,
+    modifyVerifiedAccessTrustProvider_oidcOptions,
+    modifyVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+    modifyVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    modifyVerifiedAccessTrustProviderResponse_httpStatus,
+
+    -- ** ModifyVolume
+    modifyVolume_dryRun,
+    modifyVolume_iops,
+    modifyVolume_multiAttachEnabled,
+    modifyVolume_size,
+    modifyVolume_throughput,
+    modifyVolume_volumeType,
+    modifyVolume_volumeId,
+    modifyVolumeResponse_volumeModification,
+    modifyVolumeResponse_httpStatus,
+
+    -- ** ModifyVolumeAttribute
+    modifyVolumeAttribute_autoEnableIO,
+    modifyVolumeAttribute_dryRun,
+    modifyVolumeAttribute_volumeId,
+
+    -- ** ModifyVpcAttribute
+    modifyVpcAttribute_enableDnsHostnames,
+    modifyVpcAttribute_enableDnsSupport,
+    modifyVpcAttribute_enableNetworkAddressUsageMetrics,
+    modifyVpcAttribute_vpcId,
+
+    -- ** ModifyVpcEndpoint
+    modifyVpcEndpoint_addRouteTableIds,
+    modifyVpcEndpoint_addSecurityGroupIds,
+    modifyVpcEndpoint_addSubnetIds,
+    modifyVpcEndpoint_dnsOptions,
+    modifyVpcEndpoint_dryRun,
+    modifyVpcEndpoint_ipAddressType,
+    modifyVpcEndpoint_policyDocument,
+    modifyVpcEndpoint_privateDnsEnabled,
+    modifyVpcEndpoint_removeRouteTableIds,
+    modifyVpcEndpoint_removeSecurityGroupIds,
+    modifyVpcEndpoint_removeSubnetIds,
+    modifyVpcEndpoint_resetPolicy,
+    modifyVpcEndpoint_vpcEndpointId,
+    modifyVpcEndpointResponse_return,
+    modifyVpcEndpointResponse_httpStatus,
+
+    -- ** ModifyVpcEndpointConnectionNotification
+    modifyVpcEndpointConnectionNotification_connectionEvents,
+    modifyVpcEndpointConnectionNotification_connectionNotificationArn,
+    modifyVpcEndpointConnectionNotification_dryRun,
+    modifyVpcEndpointConnectionNotification_connectionNotificationId,
+    modifyVpcEndpointConnectionNotificationResponse_returnValue,
+    modifyVpcEndpointConnectionNotificationResponse_httpStatus,
+
+    -- ** ModifyVpcEndpointServiceConfiguration
+    modifyVpcEndpointServiceConfiguration_acceptanceRequired,
+    modifyVpcEndpointServiceConfiguration_addGatewayLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_addNetworkLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_addSupportedIpAddressTypes,
+    modifyVpcEndpointServiceConfiguration_dryRun,
+    modifyVpcEndpointServiceConfiguration_privateDnsName,
+    modifyVpcEndpointServiceConfiguration_removeGatewayLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_removeNetworkLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_removePrivateDnsName,
+    modifyVpcEndpointServiceConfiguration_removeSupportedIpAddressTypes,
+    modifyVpcEndpointServiceConfiguration_serviceId,
+    modifyVpcEndpointServiceConfigurationResponse_return,
+    modifyVpcEndpointServiceConfigurationResponse_httpStatus,
+
+    -- ** ModifyVpcEndpointServicePayerResponsibility
+    modifyVpcEndpointServicePayerResponsibility_dryRun,
+    modifyVpcEndpointServicePayerResponsibility_serviceId,
+    modifyVpcEndpointServicePayerResponsibility_payerResponsibility,
+    modifyVpcEndpointServicePayerResponsibilityResponse_returnValue,
+    modifyVpcEndpointServicePayerResponsibilityResponse_httpStatus,
+
+    -- ** ModifyVpcEndpointServicePermissions
+    modifyVpcEndpointServicePermissions_addAllowedPrincipals,
+    modifyVpcEndpointServicePermissions_dryRun,
+    modifyVpcEndpointServicePermissions_removeAllowedPrincipals,
+    modifyVpcEndpointServicePermissions_serviceId,
+    modifyVpcEndpointServicePermissionsResponse_addedPrincipals,
+    modifyVpcEndpointServicePermissionsResponse_returnValue,
+    modifyVpcEndpointServicePermissionsResponse_httpStatus,
+
+    -- ** ModifyVpcPeeringConnectionOptions
+    modifyVpcPeeringConnectionOptions_accepterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptions_dryRun,
+    modifyVpcPeeringConnectionOptions_requesterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptions_vpcPeeringConnectionId,
+    modifyVpcPeeringConnectionOptionsResponse_accepterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptionsResponse_requesterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptionsResponse_httpStatus,
+
+    -- ** ModifyVpcTenancy
+    modifyVpcTenancy_dryRun,
+    modifyVpcTenancy_vpcId,
+    modifyVpcTenancy_instanceTenancy,
+    modifyVpcTenancyResponse_returnValue,
+    modifyVpcTenancyResponse_httpStatus,
+
+    -- ** ModifyVpnConnection
+    modifyVpnConnection_customerGatewayId,
+    modifyVpnConnection_dryRun,
+    modifyVpnConnection_transitGatewayId,
+    modifyVpnConnection_vpnGatewayId,
+    modifyVpnConnection_vpnConnectionId,
+    modifyVpnConnectionResponse_vpnConnection,
+    modifyVpnConnectionResponse_httpStatus,
+
+    -- ** ModifyVpnConnectionOptions
+    modifyVpnConnectionOptions_dryRun,
+    modifyVpnConnectionOptions_localIpv4NetworkCidr,
+    modifyVpnConnectionOptions_localIpv6NetworkCidr,
+    modifyVpnConnectionOptions_remoteIpv4NetworkCidr,
+    modifyVpnConnectionOptions_remoteIpv6NetworkCidr,
+    modifyVpnConnectionOptions_vpnConnectionId,
+    modifyVpnConnectionOptionsResponse_vpnConnection,
+    modifyVpnConnectionOptionsResponse_httpStatus,
+
+    -- ** ModifyVpnTunnelCertificate
+    modifyVpnTunnelCertificate_dryRun,
+    modifyVpnTunnelCertificate_vpnConnectionId,
+    modifyVpnTunnelCertificate_vpnTunnelOutsideIpAddress,
+    modifyVpnTunnelCertificateResponse_vpnConnection,
+    modifyVpnTunnelCertificateResponse_httpStatus,
+
+    -- ** ModifyVpnTunnelOptions
+    modifyVpnTunnelOptions_dryRun,
+    modifyVpnTunnelOptions_vpnConnectionId,
+    modifyVpnTunnelOptions_vpnTunnelOutsideIpAddress,
+    modifyVpnTunnelOptions_tunnelOptions,
+    modifyVpnTunnelOptionsResponse_vpnConnection,
+    modifyVpnTunnelOptionsResponse_httpStatus,
+
+    -- ** MonitorInstances
+    monitorInstances_dryRun,
+    monitorInstances_instanceIds,
+    monitorInstancesResponse_instanceMonitorings,
+    monitorInstancesResponse_httpStatus,
+
+    -- ** MoveAddressToVpc
+    moveAddressToVpc_dryRun,
+    moveAddressToVpc_publicIp,
+    moveAddressToVpcResponse_allocationId,
+    moveAddressToVpcResponse_status,
+    moveAddressToVpcResponse_httpStatus,
+
+    -- ** MoveByoipCidrToIpam
+    moveByoipCidrToIpam_dryRun,
+    moveByoipCidrToIpam_cidr,
+    moveByoipCidrToIpam_ipamPoolId,
+    moveByoipCidrToIpam_ipamPoolOwner,
+    moveByoipCidrToIpamResponse_byoipCidr,
+    moveByoipCidrToIpamResponse_httpStatus,
+
+    -- ** ProvisionByoipCidr
+    provisionByoipCidr_cidrAuthorizationContext,
+    provisionByoipCidr_description,
+    provisionByoipCidr_dryRun,
+    provisionByoipCidr_multiRegion,
+    provisionByoipCidr_poolTagSpecifications,
+    provisionByoipCidr_publiclyAdvertisable,
+    provisionByoipCidr_cidr,
+    provisionByoipCidrResponse_byoipCidr,
+    provisionByoipCidrResponse_httpStatus,
+
+    -- ** ProvisionIpamPoolCidr
+    provisionIpamPoolCidr_cidr,
+    provisionIpamPoolCidr_cidrAuthorizationContext,
+    provisionIpamPoolCidr_dryRun,
+    provisionIpamPoolCidr_ipamPoolId,
+    provisionIpamPoolCidrResponse_ipamPoolCidr,
+    provisionIpamPoolCidrResponse_httpStatus,
+
+    -- ** ProvisionPublicIpv4PoolCidr
+    provisionPublicIpv4PoolCidr_dryRun,
+    provisionPublicIpv4PoolCidr_ipamPoolId,
+    provisionPublicIpv4PoolCidr_poolId,
+    provisionPublicIpv4PoolCidr_netmaskLength,
+    provisionPublicIpv4PoolCidrResponse_poolAddressRange,
+    provisionPublicIpv4PoolCidrResponse_poolId,
+    provisionPublicIpv4PoolCidrResponse_httpStatus,
+
+    -- ** PurchaseHostReservation
+    purchaseHostReservation_clientToken,
+    purchaseHostReservation_currencyCode,
+    purchaseHostReservation_limitPrice,
+    purchaseHostReservation_tagSpecifications,
+    purchaseHostReservation_hostIdSet,
+    purchaseHostReservation_offeringId,
+    purchaseHostReservationResponse_clientToken,
+    purchaseHostReservationResponse_currencyCode,
+    purchaseHostReservationResponse_purchase,
+    purchaseHostReservationResponse_totalHourlyPrice,
+    purchaseHostReservationResponse_totalUpfrontPrice,
+    purchaseHostReservationResponse_httpStatus,
+
+    -- ** PurchaseReservedInstancesOffering
+    purchaseReservedInstancesOffering_dryRun,
+    purchaseReservedInstancesOffering_limitPrice,
+    purchaseReservedInstancesOffering_purchaseTime,
+    purchaseReservedInstancesOffering_instanceCount,
+    purchaseReservedInstancesOffering_reservedInstancesOfferingId,
+    purchaseReservedInstancesOfferingResponse_reservedInstancesId,
+    purchaseReservedInstancesOfferingResponse_httpStatus,
+
+    -- ** PurchaseScheduledInstances
+    purchaseScheduledInstances_clientToken,
+    purchaseScheduledInstances_dryRun,
+    purchaseScheduledInstances_purchaseRequests,
+    purchaseScheduledInstancesResponse_scheduledInstanceSet,
+    purchaseScheduledInstancesResponse_httpStatus,
+
+    -- ** RebootInstances
+    rebootInstances_dryRun,
+    rebootInstances_instanceIds,
+
+    -- ** RegisterImage
+    registerImage_architecture,
+    registerImage_billingProducts,
+    registerImage_blockDeviceMappings,
+    registerImage_bootMode,
+    registerImage_description,
+    registerImage_dryRun,
+    registerImage_enaSupport,
+    registerImage_imageLocation,
+    registerImage_imdsSupport,
+    registerImage_kernelId,
+    registerImage_ramdiskId,
+    registerImage_rootDeviceName,
+    registerImage_sriovNetSupport,
+    registerImage_tpmSupport,
+    registerImage_uefiData,
+    registerImage_virtualizationType,
+    registerImage_name,
+    registerImageResponse_imageId,
+    registerImageResponse_httpStatus,
+
+    -- ** RegisterInstanceEventNotificationAttributes
+    registerInstanceEventNotificationAttributes_dryRun,
+    registerInstanceEventNotificationAttributes_instanceTagAttribute,
+    registerInstanceEventNotificationAttributesResponse_instanceTagAttribute,
+    registerInstanceEventNotificationAttributesResponse_httpStatus,
+
+    -- ** RegisterTransitGatewayMulticastGroupMembers
+    registerTransitGatewayMulticastGroupMembers_dryRun,
+    registerTransitGatewayMulticastGroupMembers_groupIpAddress,
+    registerTransitGatewayMulticastGroupMembers_networkInterfaceIds,
+    registerTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId,
+    registerTransitGatewayMulticastGroupMembersResponse_registeredMulticastGroupMembers,
+    registerTransitGatewayMulticastGroupMembersResponse_httpStatus,
+
+    -- ** RegisterTransitGatewayMulticastGroupSources
+    registerTransitGatewayMulticastGroupSources_dryRun,
+    registerTransitGatewayMulticastGroupSources_groupIpAddress,
+    registerTransitGatewayMulticastGroupSources_networkInterfaceIds,
+    registerTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId,
+    registerTransitGatewayMulticastGroupSourcesResponse_registeredMulticastGroupSources,
+    registerTransitGatewayMulticastGroupSourcesResponse_httpStatus,
+
+    -- ** RejectTransitGatewayMulticastDomainAssociations
+    rejectTransitGatewayMulticastDomainAssociations_dryRun,
+    rejectTransitGatewayMulticastDomainAssociations_subnetIds,
+    rejectTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId,
+    rejectTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+    rejectTransitGatewayMulticastDomainAssociationsResponse_associations,
+    rejectTransitGatewayMulticastDomainAssociationsResponse_httpStatus,
+
+    -- ** RejectTransitGatewayPeeringAttachment
+    rejectTransitGatewayPeeringAttachment_dryRun,
+    rejectTransitGatewayPeeringAttachment_transitGatewayAttachmentId,
+    rejectTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    rejectTransitGatewayPeeringAttachmentResponse_httpStatus,
+
+    -- ** RejectTransitGatewayVpcAttachment
+    rejectTransitGatewayVpcAttachment_dryRun,
+    rejectTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+    rejectTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    rejectTransitGatewayVpcAttachmentResponse_httpStatus,
+
+    -- ** RejectVpcEndpointConnections
+    rejectVpcEndpointConnections_dryRun,
+    rejectVpcEndpointConnections_serviceId,
+    rejectVpcEndpointConnections_vpcEndpointIds,
+    rejectVpcEndpointConnectionsResponse_unsuccessful,
+    rejectVpcEndpointConnectionsResponse_httpStatus,
+
+    -- ** RejectVpcPeeringConnection
+    rejectVpcPeeringConnection_dryRun,
+    rejectVpcPeeringConnection_vpcPeeringConnectionId,
+    rejectVpcPeeringConnectionResponse_return,
+    rejectVpcPeeringConnectionResponse_httpStatus,
+
+    -- ** ReleaseAddress
+    releaseAddress_allocationId,
+    releaseAddress_dryRun,
+    releaseAddress_networkBorderGroup,
+    releaseAddress_publicIp,
+
+    -- ** ReleaseHosts
+    releaseHosts_hostIds,
+    releaseHostsResponse_successful,
+    releaseHostsResponse_unsuccessful,
+    releaseHostsResponse_httpStatus,
+
+    -- ** ReleaseIpamPoolAllocation
+    releaseIpamPoolAllocation_dryRun,
+    releaseIpamPoolAllocation_ipamPoolId,
+    releaseIpamPoolAllocation_cidr,
+    releaseIpamPoolAllocation_ipamPoolAllocationId,
+    releaseIpamPoolAllocationResponse_success,
+    releaseIpamPoolAllocationResponse_httpStatus,
+
+    -- ** ReplaceIamInstanceProfileAssociation
+    replaceIamInstanceProfileAssociation_iamInstanceProfile,
+    replaceIamInstanceProfileAssociation_associationId,
+    replaceIamInstanceProfileAssociationResponse_iamInstanceProfileAssociation,
+    replaceIamInstanceProfileAssociationResponse_httpStatus,
+
+    -- ** ReplaceNetworkAclAssociation
+    replaceNetworkAclAssociation_dryRun,
+    replaceNetworkAclAssociation_associationId,
+    replaceNetworkAclAssociation_networkAclId,
+    replaceNetworkAclAssociationResponse_newAssociationId,
+    replaceNetworkAclAssociationResponse_httpStatus,
+
+    -- ** ReplaceNetworkAclEntry
+    replaceNetworkAclEntry_cidrBlock,
+    replaceNetworkAclEntry_dryRun,
+    replaceNetworkAclEntry_icmpTypeCode,
+    replaceNetworkAclEntry_ipv6CidrBlock,
+    replaceNetworkAclEntry_portRange,
+    replaceNetworkAclEntry_egress,
+    replaceNetworkAclEntry_networkAclId,
+    replaceNetworkAclEntry_protocol,
+    replaceNetworkAclEntry_ruleAction,
+    replaceNetworkAclEntry_ruleNumber,
+
+    -- ** ReplaceRoute
+    replaceRoute_carrierGatewayId,
+    replaceRoute_coreNetworkArn,
+    replaceRoute_destinationCidrBlock,
+    replaceRoute_destinationIpv6CidrBlock,
+    replaceRoute_destinationPrefixListId,
+    replaceRoute_dryRun,
+    replaceRoute_egressOnlyInternetGatewayId,
+    replaceRoute_gatewayId,
+    replaceRoute_instanceId,
+    replaceRoute_localGatewayId,
+    replaceRoute_localTarget,
+    replaceRoute_natGatewayId,
+    replaceRoute_networkInterfaceId,
+    replaceRoute_transitGatewayId,
+    replaceRoute_vpcEndpointId,
+    replaceRoute_vpcPeeringConnectionId,
+    replaceRoute_routeTableId,
+
+    -- ** ReplaceRouteTableAssociation
+    replaceRouteTableAssociation_dryRun,
+    replaceRouteTableAssociation_associationId,
+    replaceRouteTableAssociation_routeTableId,
+    replaceRouteTableAssociationResponse_associationState,
+    replaceRouteTableAssociationResponse_newAssociationId,
+    replaceRouteTableAssociationResponse_httpStatus,
+
+    -- ** ReplaceTransitGatewayRoute
+    replaceTransitGatewayRoute_blackhole,
+    replaceTransitGatewayRoute_dryRun,
+    replaceTransitGatewayRoute_transitGatewayAttachmentId,
+    replaceTransitGatewayRoute_destinationCidrBlock,
+    replaceTransitGatewayRoute_transitGatewayRouteTableId,
+    replaceTransitGatewayRouteResponse_route,
+    replaceTransitGatewayRouteResponse_httpStatus,
+
+    -- ** ReportInstanceStatus
+    reportInstanceStatus_description,
+    reportInstanceStatus_dryRun,
+    reportInstanceStatus_endTime,
+    reportInstanceStatus_startTime,
+    reportInstanceStatus_instances,
+    reportInstanceStatus_reasonCodes,
+    reportInstanceStatus_status,
+
+    -- ** RequestSpotFleet
+    requestSpotFleet_dryRun,
+    requestSpotFleet_spotFleetRequestConfig,
+    requestSpotFleetResponse_spotFleetRequestId,
+    requestSpotFleetResponse_httpStatus,
+
+    -- ** RequestSpotInstances
+    requestSpotInstances_availabilityZoneGroup,
+    requestSpotInstances_blockDurationMinutes,
+    requestSpotInstances_clientToken,
+    requestSpotInstances_dryRun,
+    requestSpotInstances_instanceCount,
+    requestSpotInstances_instanceInterruptionBehavior,
+    requestSpotInstances_launchGroup,
+    requestSpotInstances_launchSpecification,
+    requestSpotInstances_spotPrice,
+    requestSpotInstances_tagSpecifications,
+    requestSpotInstances_type,
+    requestSpotInstances_validFrom,
+    requestSpotInstances_validUntil,
+    requestSpotInstancesResponse_spotInstanceRequests,
+    requestSpotInstancesResponse_httpStatus,
+
+    -- ** ResetAddressAttribute
+    resetAddressAttribute_dryRun,
+    resetAddressAttribute_allocationId,
+    resetAddressAttribute_attribute,
+    resetAddressAttributeResponse_address,
+    resetAddressAttributeResponse_httpStatus,
+
+    -- ** ResetEbsDefaultKmsKeyId
+    resetEbsDefaultKmsKeyId_dryRun,
+    resetEbsDefaultKmsKeyIdResponse_kmsKeyId,
+    resetEbsDefaultKmsKeyIdResponse_httpStatus,
+
+    -- ** ResetFpgaImageAttribute
+    resetFpgaImageAttribute_attribute,
+    resetFpgaImageAttribute_dryRun,
+    resetFpgaImageAttribute_fpgaImageId,
+    resetFpgaImageAttributeResponse_return,
+    resetFpgaImageAttributeResponse_httpStatus,
+
+    -- ** ResetImageAttribute
+    resetImageAttribute_dryRun,
+    resetImageAttribute_attribute,
+    resetImageAttribute_imageId,
+
+    -- ** ResetInstanceAttribute
+    resetInstanceAttribute_dryRun,
+    resetInstanceAttribute_attribute,
+    resetInstanceAttribute_instanceId,
+
+    -- ** ResetNetworkInterfaceAttribute
+    resetNetworkInterfaceAttribute_dryRun,
+    resetNetworkInterfaceAttribute_sourceDestCheck,
+    resetNetworkInterfaceAttribute_networkInterfaceId,
+
+    -- ** ResetSnapshotAttribute
+    resetSnapshotAttribute_dryRun,
+    resetSnapshotAttribute_attribute,
+    resetSnapshotAttribute_snapshotId,
+
+    -- ** RestoreAddressToClassic
+    restoreAddressToClassic_dryRun,
+    restoreAddressToClassic_publicIp,
+    restoreAddressToClassicResponse_publicIp,
+    restoreAddressToClassicResponse_status,
+    restoreAddressToClassicResponse_httpStatus,
+
+    -- ** RestoreImageFromRecycleBin
+    restoreImageFromRecycleBin_dryRun,
+    restoreImageFromRecycleBin_imageId,
+    restoreImageFromRecycleBinResponse_return,
+    restoreImageFromRecycleBinResponse_httpStatus,
+
+    -- ** RestoreManagedPrefixListVersion
+    restoreManagedPrefixListVersion_dryRun,
+    restoreManagedPrefixListVersion_prefixListId,
+    restoreManagedPrefixListVersion_previousVersion,
+    restoreManagedPrefixListVersion_currentVersion,
+    restoreManagedPrefixListVersionResponse_prefixList,
+    restoreManagedPrefixListVersionResponse_httpStatus,
+
+    -- ** RestoreSnapshotFromRecycleBin
+    restoreSnapshotFromRecycleBin_dryRun,
+    restoreSnapshotFromRecycleBin_snapshotId,
+    restoreSnapshotFromRecycleBinResponse_description,
+    restoreSnapshotFromRecycleBinResponse_encrypted,
+    restoreSnapshotFromRecycleBinResponse_outpostArn,
+    restoreSnapshotFromRecycleBinResponse_ownerId,
+    restoreSnapshotFromRecycleBinResponse_progress,
+    restoreSnapshotFromRecycleBinResponse_snapshotId,
+    restoreSnapshotFromRecycleBinResponse_startTime,
+    restoreSnapshotFromRecycleBinResponse_state,
+    restoreSnapshotFromRecycleBinResponse_volumeId,
+    restoreSnapshotFromRecycleBinResponse_volumeSize,
+    restoreSnapshotFromRecycleBinResponse_httpStatus,
+
+    -- ** RestoreSnapshotTier
+    restoreSnapshotTier_dryRun,
+    restoreSnapshotTier_permanentRestore,
+    restoreSnapshotTier_temporaryRestoreDays,
+    restoreSnapshotTier_snapshotId,
+    restoreSnapshotTierResponse_isPermanentRestore,
+    restoreSnapshotTierResponse_restoreDuration,
+    restoreSnapshotTierResponse_restoreStartTime,
+    restoreSnapshotTierResponse_snapshotId,
+    restoreSnapshotTierResponse_httpStatus,
+
+    -- ** RevokeClientVpnIngress
+    revokeClientVpnIngress_accessGroupId,
+    revokeClientVpnIngress_dryRun,
+    revokeClientVpnIngress_revokeAllGroups,
+    revokeClientVpnIngress_clientVpnEndpointId,
+    revokeClientVpnIngress_targetNetworkCidr,
+    revokeClientVpnIngressResponse_status,
+    revokeClientVpnIngressResponse_httpStatus,
+
+    -- ** RevokeSecurityGroupEgress
+    revokeSecurityGroupEgress_cidrIp,
+    revokeSecurityGroupEgress_dryRun,
+    revokeSecurityGroupEgress_fromPort,
+    revokeSecurityGroupEgress_ipPermissions,
+    revokeSecurityGroupEgress_ipProtocol,
+    revokeSecurityGroupEgress_securityGroupRuleIds,
+    revokeSecurityGroupEgress_sourceSecurityGroupName,
+    revokeSecurityGroupEgress_sourceSecurityGroupOwnerId,
+    revokeSecurityGroupEgress_toPort,
+    revokeSecurityGroupEgress_groupId,
+    revokeSecurityGroupEgressResponse_return,
+    revokeSecurityGroupEgressResponse_unknownIpPermissions,
+    revokeSecurityGroupEgressResponse_httpStatus,
+
+    -- ** RevokeSecurityGroupIngress
+    revokeSecurityGroupIngress_cidrIp,
+    revokeSecurityGroupIngress_dryRun,
+    revokeSecurityGroupIngress_fromPort,
+    revokeSecurityGroupIngress_groupId,
+    revokeSecurityGroupIngress_groupName,
+    revokeSecurityGroupIngress_ipPermissions,
+    revokeSecurityGroupIngress_ipProtocol,
+    revokeSecurityGroupIngress_securityGroupRuleIds,
+    revokeSecurityGroupIngress_sourceSecurityGroupName,
+    revokeSecurityGroupIngress_sourceSecurityGroupOwnerId,
+    revokeSecurityGroupIngress_toPort,
+    revokeSecurityGroupIngressResponse_return,
+    revokeSecurityGroupIngressResponse_unknownIpPermissions,
+    revokeSecurityGroupIngressResponse_httpStatus,
+
+    -- ** RunInstances
+    runInstances_additionalInfo,
+    runInstances_blockDeviceMappings,
+    runInstances_capacityReservationSpecification,
+    runInstances_clientToken,
+    runInstances_cpuOptions,
+    runInstances_creditSpecification,
+    runInstances_disableApiStop,
+    runInstances_disableApiTermination,
+    runInstances_dryRun,
+    runInstances_ebsOptimized,
+    runInstances_elasticGpuSpecification,
+    runInstances_elasticInferenceAccelerators,
+    runInstances_enclaveOptions,
+    runInstances_hibernationOptions,
+    runInstances_iamInstanceProfile,
+    runInstances_imageId,
+    runInstances_instanceInitiatedShutdownBehavior,
+    runInstances_instanceMarketOptions,
+    runInstances_instanceType,
+    runInstances_ipv6AddressCount,
+    runInstances_ipv6Addresses,
+    runInstances_kernelId,
+    runInstances_keyName,
+    runInstances_launchTemplate,
+    runInstances_licenseSpecifications,
+    runInstances_maintenanceOptions,
+    runInstances_metadataOptions,
+    runInstances_monitoring,
+    runInstances_networkInterfaces,
+    runInstances_placement,
+    runInstances_privateDnsNameOptions,
+    runInstances_privateIpAddress,
+    runInstances_ramdiskId,
+    runInstances_securityGroupIds,
+    runInstances_securityGroups,
+    runInstances_subnetId,
+    runInstances_tagSpecifications,
+    runInstances_userData,
+    runInstances_maxCount,
+    runInstances_minCount,
+    reservation_groups,
+    reservation_instances,
+    reservation_requesterId,
+    reservation_reservationId,
+    reservation_ownerId,
+
+    -- ** RunScheduledInstances
+    runScheduledInstances_clientToken,
+    runScheduledInstances_dryRun,
+    runScheduledInstances_instanceCount,
+    runScheduledInstances_launchSpecification,
+    runScheduledInstances_scheduledInstanceId,
+    runScheduledInstancesResponse_instanceIdSet,
+    runScheduledInstancesResponse_httpStatus,
+
+    -- ** SearchLocalGatewayRoutes
+    searchLocalGatewayRoutes_dryRun,
+    searchLocalGatewayRoutes_filters,
+    searchLocalGatewayRoutes_maxResults,
+    searchLocalGatewayRoutes_nextToken,
+    searchLocalGatewayRoutes_localGatewayRouteTableId,
+    searchLocalGatewayRoutesResponse_nextToken,
+    searchLocalGatewayRoutesResponse_routes,
+    searchLocalGatewayRoutesResponse_httpStatus,
+
+    -- ** SearchTransitGatewayMulticastGroups
+    searchTransitGatewayMulticastGroups_dryRun,
+    searchTransitGatewayMulticastGroups_filters,
+    searchTransitGatewayMulticastGroups_maxResults,
+    searchTransitGatewayMulticastGroups_nextToken,
+    searchTransitGatewayMulticastGroups_transitGatewayMulticastDomainId,
+    searchTransitGatewayMulticastGroupsResponse_multicastGroups,
+    searchTransitGatewayMulticastGroupsResponse_nextToken,
+    searchTransitGatewayMulticastGroupsResponse_httpStatus,
+
+    -- ** SearchTransitGatewayRoutes
+    searchTransitGatewayRoutes_dryRun,
+    searchTransitGatewayRoutes_maxResults,
+    searchTransitGatewayRoutes_transitGatewayRouteTableId,
+    searchTransitGatewayRoutes_filters,
+    searchTransitGatewayRoutesResponse_additionalRoutesAvailable,
+    searchTransitGatewayRoutesResponse_routes,
+    searchTransitGatewayRoutesResponse_httpStatus,
+
+    -- ** SendDiagnosticInterrupt
+    sendDiagnosticInterrupt_dryRun,
+    sendDiagnosticInterrupt_instanceId,
+
+    -- ** StartInstances
+    startInstances_additionalInfo,
+    startInstances_dryRun,
+    startInstances_instanceIds,
+    startInstancesResponse_startingInstances,
+    startInstancesResponse_httpStatus,
+
+    -- ** StartNetworkInsightsAccessScopeAnalysis
+    startNetworkInsightsAccessScopeAnalysis_dryRun,
+    startNetworkInsightsAccessScopeAnalysis_tagSpecifications,
+    startNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId,
+    startNetworkInsightsAccessScopeAnalysis_clientToken,
+    startNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysis,
+    startNetworkInsightsAccessScopeAnalysisResponse_httpStatus,
+
+    -- ** StartNetworkInsightsAnalysis
+    startNetworkInsightsAnalysis_additionalAccounts,
+    startNetworkInsightsAnalysis_dryRun,
+    startNetworkInsightsAnalysis_filterInArns,
+    startNetworkInsightsAnalysis_tagSpecifications,
+    startNetworkInsightsAnalysis_networkInsightsPathId,
+    startNetworkInsightsAnalysis_clientToken,
+    startNetworkInsightsAnalysisResponse_networkInsightsAnalysis,
+    startNetworkInsightsAnalysisResponse_httpStatus,
+
+    -- ** StartVpcEndpointServicePrivateDnsVerification
+    startVpcEndpointServicePrivateDnsVerification_dryRun,
+    startVpcEndpointServicePrivateDnsVerification_serviceId,
+    startVpcEndpointServicePrivateDnsVerificationResponse_returnValue,
+    startVpcEndpointServicePrivateDnsVerificationResponse_httpStatus,
+
+    -- ** StopInstances
+    stopInstances_dryRun,
+    stopInstances_force,
+    stopInstances_hibernate,
+    stopInstances_instanceIds,
+    stopInstancesResponse_stoppingInstances,
+    stopInstancesResponse_httpStatus,
+
+    -- ** TerminateClientVpnConnections
+    terminateClientVpnConnections_connectionId,
+    terminateClientVpnConnections_dryRun,
+    terminateClientVpnConnections_username,
+    terminateClientVpnConnections_clientVpnEndpointId,
+    terminateClientVpnConnectionsResponse_clientVpnEndpointId,
+    terminateClientVpnConnectionsResponse_connectionStatuses,
+    terminateClientVpnConnectionsResponse_username,
+    terminateClientVpnConnectionsResponse_httpStatus,
+
+    -- ** TerminateInstances
+    terminateInstances_dryRun,
+    terminateInstances_instanceIds,
+    terminateInstancesResponse_terminatingInstances,
+    terminateInstancesResponse_httpStatus,
+
+    -- ** UnassignIpv6Addresses
+    unassignIpv6Addresses_ipv6Addresses,
+    unassignIpv6Addresses_ipv6Prefixes,
+    unassignIpv6Addresses_networkInterfaceId,
+    unassignIpv6AddressesResponse_networkInterfaceId,
+    unassignIpv6AddressesResponse_unassignedIpv6Addresses,
+    unassignIpv6AddressesResponse_unassignedIpv6Prefixes,
+    unassignIpv6AddressesResponse_httpStatus,
+
+    -- ** UnassignPrivateIpAddresses
+    unassignPrivateIpAddresses_ipv4Prefixes,
+    unassignPrivateIpAddresses_privateIpAddresses,
+    unassignPrivateIpAddresses_networkInterfaceId,
+
+    -- ** UnmonitorInstances
+    unmonitorInstances_dryRun,
+    unmonitorInstances_instanceIds,
+    unmonitorInstancesResponse_instanceMonitorings,
+    unmonitorInstancesResponse_httpStatus,
+
+    -- ** UpdateSecurityGroupRuleDescriptionsEgress
+    updateSecurityGroupRuleDescriptionsEgress_dryRun,
+    updateSecurityGroupRuleDescriptionsEgress_groupId,
+    updateSecurityGroupRuleDescriptionsEgress_groupName,
+    updateSecurityGroupRuleDescriptionsEgress_ipPermissions,
+    updateSecurityGroupRuleDescriptionsEgress_securityGroupRuleDescriptions,
+    updateSecurityGroupRuleDescriptionsEgressResponse_return,
+    updateSecurityGroupRuleDescriptionsEgressResponse_httpStatus,
+
+    -- ** UpdateSecurityGroupRuleDescriptionsIngress
+    updateSecurityGroupRuleDescriptionsIngress_dryRun,
+    updateSecurityGroupRuleDescriptionsIngress_groupId,
+    updateSecurityGroupRuleDescriptionsIngress_groupName,
+    updateSecurityGroupRuleDescriptionsIngress_ipPermissions,
+    updateSecurityGroupRuleDescriptionsIngress_securityGroupRuleDescriptions,
+    updateSecurityGroupRuleDescriptionsIngressResponse_return,
+    updateSecurityGroupRuleDescriptionsIngressResponse_httpStatus,
+
+    -- ** WithdrawByoipCidr
+    withdrawByoipCidr_dryRun,
+    withdrawByoipCidr_cidr,
+    withdrawByoipCidrResponse_byoipCidr,
+    withdrawByoipCidrResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AcceleratorCount
+    acceleratorCount_max,
+    acceleratorCount_min,
+
+    -- ** AcceleratorCountRequest
+    acceleratorCountRequest_max,
+    acceleratorCountRequest_min,
+
+    -- ** AcceleratorTotalMemoryMiB
+    acceleratorTotalMemoryMiB_max,
+    acceleratorTotalMemoryMiB_min,
+
+    -- ** AcceleratorTotalMemoryMiBRequest
+    acceleratorTotalMemoryMiBRequest_max,
+    acceleratorTotalMemoryMiBRequest_min,
+
+    -- ** AccessScopeAnalysisFinding
+    accessScopeAnalysisFinding_findingComponents,
+    accessScopeAnalysisFinding_findingId,
+    accessScopeAnalysisFinding_networkInsightsAccessScopeAnalysisId,
+    accessScopeAnalysisFinding_networkInsightsAccessScopeId,
+
+    -- ** AccessScopePath
+    accessScopePath_destination,
+    accessScopePath_source,
+    accessScopePath_throughResources,
+
+    -- ** AccessScopePathRequest
+    accessScopePathRequest_destination,
+    accessScopePathRequest_source,
+    accessScopePathRequest_throughResources,
+
+    -- ** AccountAttribute
+    accountAttribute_attributeName,
+    accountAttribute_attributeValues,
+
+    -- ** AccountAttributeValue
+    accountAttributeValue_attributeValue,
+
+    -- ** ActiveInstance
+    activeInstance_instanceHealth,
+    activeInstance_instanceId,
+    activeInstance_instanceType,
+    activeInstance_spotInstanceRequestId,
+
+    -- ** AddIpamOperatingRegion
+    addIpamOperatingRegion_regionName,
+
+    -- ** AddPrefixListEntry
+    addPrefixListEntry_description,
+    addPrefixListEntry_cidr,
+
+    -- ** AddedPrincipal
+    addedPrincipal_principal,
+    addedPrincipal_principalType,
+    addedPrincipal_serviceId,
+    addedPrincipal_servicePermissionId,
+
+    -- ** AdditionalDetail
+    additionalDetail_additionalDetailType,
+    additionalDetail_component,
+
+    -- ** Address
+    address_allocationId,
+    address_associationId,
+    address_carrierIp,
+    address_customerOwnedIp,
+    address_customerOwnedIpv4Pool,
+    address_domain,
+    address_instanceId,
+    address_networkBorderGroup,
+    address_networkInterfaceId,
+    address_networkInterfaceOwnerId,
+    address_privateIpAddress,
+    address_publicIp,
+    address_publicIpv4Pool,
+    address_tags,
+
+    -- ** AddressAttribute
+    addressAttribute_allocationId,
+    addressAttribute_ptrRecord,
+    addressAttribute_ptrRecordUpdate,
+    addressAttribute_publicIp,
+
+    -- ** AddressTransfer
+    addressTransfer_addressTransferStatus,
+    addressTransfer_allocationId,
+    addressTransfer_publicIp,
+    addressTransfer_transferAccountId,
+    addressTransfer_transferOfferAcceptedTimestamp,
+    addressTransfer_transferOfferExpirationTimestamp,
+
+    -- ** AllowedPrincipal
+    allowedPrincipal_principal,
+    allowedPrincipal_principalType,
+    allowedPrincipal_serviceId,
+    allowedPrincipal_servicePermissionId,
+    allowedPrincipal_tags,
+
+    -- ** AlternatePathHint
+    alternatePathHint_componentArn,
+    alternatePathHint_componentId,
+
+    -- ** AnalysisAclRule
+    analysisAclRule_cidr,
+    analysisAclRule_egress,
+    analysisAclRule_portRange,
+    analysisAclRule_protocol,
+    analysisAclRule_ruleAction,
+    analysisAclRule_ruleNumber,
+
+    -- ** AnalysisComponent
+    analysisComponent_arn,
+    analysisComponent_id,
+    analysisComponent_name,
+
+    -- ** AnalysisLoadBalancerListener
+    analysisLoadBalancerListener_instancePort,
+    analysisLoadBalancerListener_loadBalancerPort,
+
+    -- ** AnalysisLoadBalancerTarget
+    analysisLoadBalancerTarget_address,
+    analysisLoadBalancerTarget_availabilityZone,
+    analysisLoadBalancerTarget_instance,
+    analysisLoadBalancerTarget_port,
+
+    -- ** AnalysisPacketHeader
+    analysisPacketHeader_destinationAddresses,
+    analysisPacketHeader_destinationPortRanges,
+    analysisPacketHeader_protocol,
+    analysisPacketHeader_sourceAddresses,
+    analysisPacketHeader_sourcePortRanges,
+
+    -- ** AnalysisRouteTableRoute
+    analysisRouteTableRoute_destinationCidr,
+    analysisRouteTableRoute_destinationPrefixListId,
+    analysisRouteTableRoute_egressOnlyInternetGatewayId,
+    analysisRouteTableRoute_gatewayId,
+    analysisRouteTableRoute_instanceId,
+    analysisRouteTableRoute_natGatewayId,
+    analysisRouteTableRoute_networkInterfaceId,
+    analysisRouteTableRoute_origin,
+    analysisRouteTableRoute_state,
+    analysisRouteTableRoute_transitGatewayId,
+    analysisRouteTableRoute_vpcPeeringConnectionId,
+
+    -- ** AnalysisSecurityGroupRule
+    analysisSecurityGroupRule_cidr,
+    analysisSecurityGroupRule_direction,
+    analysisSecurityGroupRule_portRange,
+    analysisSecurityGroupRule_prefixListId,
+    analysisSecurityGroupRule_protocol,
+    analysisSecurityGroupRule_securityGroupId,
+
+    -- ** AssignedPrivateIpAddress
+    assignedPrivateIpAddress_privateIpAddress,
+
+    -- ** AssociatedRole
+    associatedRole_associatedRoleArn,
+    associatedRole_certificateS3BucketName,
+    associatedRole_certificateS3ObjectKey,
+    associatedRole_encryptionKmsKeyId,
+
+    -- ** AssociatedTargetNetwork
+    associatedTargetNetwork_networkId,
+    associatedTargetNetwork_networkType,
+
+    -- ** AssociationStatus
+    associationStatus_code,
+    associationStatus_message,
+
+    -- ** AthenaIntegration
+    athenaIntegration_partitionEndDate,
+    athenaIntegration_partitionStartDate,
+    athenaIntegration_integrationResultS3DestinationArn,
+    athenaIntegration_partitionLoadFrequency,
+
+    -- ** AttachmentEnaSrdSpecification
+    attachmentEnaSrdSpecification_enaSrdEnabled,
+    attachmentEnaSrdSpecification_enaSrdUdpSpecification,
+
+    -- ** AttachmentEnaSrdUdpSpecification
+    attachmentEnaSrdUdpSpecification_enaSrdUdpEnabled,
+
+    -- ** AttributeBooleanValue
+    attributeBooleanValue_value,
+
+    -- ** AttributeValue
+    attributeValue_value,
+
+    -- ** AuthorizationRule
+    authorizationRule_accessAll,
+    authorizationRule_clientVpnEndpointId,
+    authorizationRule_description,
+    authorizationRule_destinationCidr,
+    authorizationRule_groupId,
+    authorizationRule_status,
+
+    -- ** AvailabilityZone
+    availabilityZone_groupName,
+    availabilityZone_messages,
+    availabilityZone_networkBorderGroup,
+    availabilityZone_optInStatus,
+    availabilityZone_parentZoneId,
+    availabilityZone_parentZoneName,
+    availabilityZone_regionName,
+    availabilityZone_state,
+    availabilityZone_zoneId,
+    availabilityZone_zoneName,
+    availabilityZone_zoneType,
+
+    -- ** AvailabilityZoneMessage
+    availabilityZoneMessage_message,
+
+    -- ** AvailableCapacity
+    availableCapacity_availableInstanceCapacity,
+    availableCapacity_availableVCpus,
+
+    -- ** BaselineEbsBandwidthMbps
+    baselineEbsBandwidthMbps_max,
+    baselineEbsBandwidthMbps_min,
+
+    -- ** BaselineEbsBandwidthMbpsRequest
+    baselineEbsBandwidthMbpsRequest_max,
+    baselineEbsBandwidthMbpsRequest_min,
+
+    -- ** BlobAttributeValue
+    blobAttributeValue_value,
+
+    -- ** BlockDeviceMapping
+    blockDeviceMapping_ebs,
+    blockDeviceMapping_noDevice,
+    blockDeviceMapping_virtualName,
+    blockDeviceMapping_deviceName,
+
+    -- ** BundleTask
+    bundleTask_bundleTaskError,
+    bundleTask_bundleId,
+    bundleTask_instanceId,
+    bundleTask_progress,
+    bundleTask_startTime,
+    bundleTask_state,
+    bundleTask_storage,
+    bundleTask_updateTime,
+
+    -- ** BundleTaskError
+    bundleTaskError_code,
+    bundleTaskError_message,
+
+    -- ** ByoipCidr
+    byoipCidr_cidr,
+    byoipCidr_description,
+    byoipCidr_state,
+    byoipCidr_statusMessage,
+
+    -- ** CancelCapacityReservationFleetError
+    cancelCapacityReservationFleetError_code,
+    cancelCapacityReservationFleetError_message,
+
+    -- ** CancelSpotFleetRequestsError
+    cancelSpotFleetRequestsError_code,
+    cancelSpotFleetRequestsError_message,
+
+    -- ** CancelSpotFleetRequestsErrorItem
+    cancelSpotFleetRequestsErrorItem_error,
+    cancelSpotFleetRequestsErrorItem_spotFleetRequestId,
+
+    -- ** CancelSpotFleetRequestsSuccessItem
+    cancelSpotFleetRequestsSuccessItem_currentSpotFleetRequestState,
+    cancelSpotFleetRequestsSuccessItem_previousSpotFleetRequestState,
+    cancelSpotFleetRequestsSuccessItem_spotFleetRequestId,
+
+    -- ** CancelledSpotInstanceRequest
+    cancelledSpotInstanceRequest_spotInstanceRequestId,
+    cancelledSpotInstanceRequest_state,
+
+    -- ** CapacityAllocation
+    capacityAllocation_allocationType,
+    capacityAllocation_count,
+
+    -- ** CapacityReservation
+    capacityReservation_availabilityZone,
+    capacityReservation_availabilityZoneId,
+    capacityReservation_availableInstanceCount,
+    capacityReservation_capacityAllocations,
+    capacityReservation_capacityReservationArn,
+    capacityReservation_capacityReservationFleetId,
+    capacityReservation_capacityReservationId,
+    capacityReservation_createDate,
+    capacityReservation_ebsOptimized,
+    capacityReservation_endDate,
+    capacityReservation_endDateType,
+    capacityReservation_ephemeralStorage,
+    capacityReservation_instanceMatchCriteria,
+    capacityReservation_instancePlatform,
+    capacityReservation_instanceType,
+    capacityReservation_outpostArn,
+    capacityReservation_ownerId,
+    capacityReservation_placementGroupArn,
+    capacityReservation_startDate,
+    capacityReservation_state,
+    capacityReservation_tags,
+    capacityReservation_tenancy,
+    capacityReservation_totalInstanceCount,
+
+    -- ** CapacityReservationFleet
+    capacityReservationFleet_allocationStrategy,
+    capacityReservationFleet_capacityReservationFleetArn,
+    capacityReservationFleet_capacityReservationFleetId,
+    capacityReservationFleet_createTime,
+    capacityReservationFleet_endDate,
+    capacityReservationFleet_instanceMatchCriteria,
+    capacityReservationFleet_instanceTypeSpecifications,
+    capacityReservationFleet_state,
+    capacityReservationFleet_tags,
+    capacityReservationFleet_tenancy,
+    capacityReservationFleet_totalFulfilledCapacity,
+    capacityReservationFleet_totalTargetCapacity,
+
+    -- ** CapacityReservationFleetCancellationState
+    capacityReservationFleetCancellationState_capacityReservationFleetId,
+    capacityReservationFleetCancellationState_currentFleetState,
+    capacityReservationFleetCancellationState_previousFleetState,
+
+    -- ** CapacityReservationGroup
+    capacityReservationGroup_groupArn,
+    capacityReservationGroup_ownerId,
+
+    -- ** CapacityReservationOptions
+    capacityReservationOptions_usageStrategy,
+
+    -- ** CapacityReservationOptionsRequest
+    capacityReservationOptionsRequest_usageStrategy,
+
+    -- ** CapacityReservationSpecification
+    capacityReservationSpecification_capacityReservationPreference,
+    capacityReservationSpecification_capacityReservationTarget,
+
+    -- ** CapacityReservationSpecificationResponse
+    capacityReservationSpecificationResponse_capacityReservationPreference,
+    capacityReservationSpecificationResponse_capacityReservationTarget,
+
+    -- ** CapacityReservationTarget
+    capacityReservationTarget_capacityReservationId,
+    capacityReservationTarget_capacityReservationResourceGroupArn,
+
+    -- ** CapacityReservationTargetResponse
+    capacityReservationTargetResponse_capacityReservationId,
+    capacityReservationTargetResponse_capacityReservationResourceGroupArn,
+
+    -- ** CarrierGateway
+    carrierGateway_carrierGatewayId,
+    carrierGateway_ownerId,
+    carrierGateway_state,
+    carrierGateway_tags,
+    carrierGateway_vpcId,
+
+    -- ** CertificateAuthentication
+    certificateAuthentication_clientRootCertificateChain,
+
+    -- ** CertificateAuthenticationRequest
+    certificateAuthenticationRequest_clientRootCertificateChainArn,
+
+    -- ** CidrAuthorizationContext
+    cidrAuthorizationContext_message,
+    cidrAuthorizationContext_signature,
+
+    -- ** CidrBlock
+    cidrBlock_cidrBlock,
+
+    -- ** ClassicLinkDnsSupport
+    classicLinkDnsSupport_classicLinkDnsSupported,
+    classicLinkDnsSupport_vpcId,
+
+    -- ** ClassicLinkInstance
+    classicLinkInstance_groups,
+    classicLinkInstance_instanceId,
+    classicLinkInstance_tags,
+    classicLinkInstance_vpcId,
+
+    -- ** ClassicLoadBalancer
+    classicLoadBalancer_name,
+
+    -- ** ClassicLoadBalancersConfig
+    classicLoadBalancersConfig_classicLoadBalancers,
+
+    -- ** ClientCertificateRevocationListStatus
+    clientCertificateRevocationListStatus_code,
+    clientCertificateRevocationListStatus_message,
+
+    -- ** ClientConnectOptions
+    clientConnectOptions_enabled,
+    clientConnectOptions_lambdaFunctionArn,
+
+    -- ** ClientConnectResponseOptions
+    clientConnectResponseOptions_enabled,
+    clientConnectResponseOptions_lambdaFunctionArn,
+    clientConnectResponseOptions_status,
+
+    -- ** ClientData
+    clientData_comment,
+    clientData_uploadEnd,
+    clientData_uploadSize,
+    clientData_uploadStart,
+
+    -- ** ClientLoginBannerOptions
+    clientLoginBannerOptions_bannerText,
+    clientLoginBannerOptions_enabled,
+
+    -- ** ClientLoginBannerResponseOptions
+    clientLoginBannerResponseOptions_bannerText,
+    clientLoginBannerResponseOptions_enabled,
+
+    -- ** ClientVpnAuthentication
+    clientVpnAuthentication_activeDirectory,
+    clientVpnAuthentication_federatedAuthentication,
+    clientVpnAuthentication_mutualAuthentication,
+    clientVpnAuthentication_type,
+
+    -- ** ClientVpnAuthenticationRequest
+    clientVpnAuthenticationRequest_activeDirectory,
+    clientVpnAuthenticationRequest_federatedAuthentication,
+    clientVpnAuthenticationRequest_mutualAuthentication,
+    clientVpnAuthenticationRequest_type,
+
+    -- ** ClientVpnAuthorizationRuleStatus
+    clientVpnAuthorizationRuleStatus_code,
+    clientVpnAuthorizationRuleStatus_message,
+
+    -- ** ClientVpnConnection
+    clientVpnConnection_clientIp,
+    clientVpnConnection_clientVpnEndpointId,
+    clientVpnConnection_commonName,
+    clientVpnConnection_connectionEndTime,
+    clientVpnConnection_connectionEstablishedTime,
+    clientVpnConnection_connectionId,
+    clientVpnConnection_egressBytes,
+    clientVpnConnection_egressPackets,
+    clientVpnConnection_ingressBytes,
+    clientVpnConnection_ingressPackets,
+    clientVpnConnection_postureComplianceStatuses,
+    clientVpnConnection_status,
+    clientVpnConnection_timestamp,
+    clientVpnConnection_username,
+
+    -- ** ClientVpnConnectionStatus
+    clientVpnConnectionStatus_code,
+    clientVpnConnectionStatus_message,
+
+    -- ** ClientVpnEndpoint
+    clientVpnEndpoint_associatedTargetNetworks,
+    clientVpnEndpoint_authenticationOptions,
+    clientVpnEndpoint_clientCidrBlock,
+    clientVpnEndpoint_clientConnectOptions,
+    clientVpnEndpoint_clientLoginBannerOptions,
+    clientVpnEndpoint_clientVpnEndpointId,
+    clientVpnEndpoint_connectionLogOptions,
+    clientVpnEndpoint_creationTime,
+    clientVpnEndpoint_deletionTime,
+    clientVpnEndpoint_description,
+    clientVpnEndpoint_dnsName,
+    clientVpnEndpoint_dnsServers,
+    clientVpnEndpoint_securityGroupIds,
+    clientVpnEndpoint_selfServicePortalUrl,
+    clientVpnEndpoint_serverCertificateArn,
+    clientVpnEndpoint_sessionTimeoutHours,
+    clientVpnEndpoint_splitTunnel,
+    clientVpnEndpoint_status,
+    clientVpnEndpoint_tags,
+    clientVpnEndpoint_transportProtocol,
+    clientVpnEndpoint_vpcId,
+    clientVpnEndpoint_vpnPort,
+    clientVpnEndpoint_vpnProtocol,
+
+    -- ** ClientVpnEndpointAttributeStatus
+    clientVpnEndpointAttributeStatus_code,
+    clientVpnEndpointAttributeStatus_message,
+
+    -- ** ClientVpnEndpointStatus
+    clientVpnEndpointStatus_code,
+    clientVpnEndpointStatus_message,
+
+    -- ** ClientVpnRoute
+    clientVpnRoute_clientVpnEndpointId,
+    clientVpnRoute_description,
+    clientVpnRoute_destinationCidr,
+    clientVpnRoute_origin,
+    clientVpnRoute_status,
+    clientVpnRoute_targetSubnet,
+    clientVpnRoute_type,
+
+    -- ** ClientVpnRouteStatus
+    clientVpnRouteStatus_code,
+    clientVpnRouteStatus_message,
+
+    -- ** CloudWatchLogOptions
+    cloudWatchLogOptions_logEnabled,
+    cloudWatchLogOptions_logGroupArn,
+    cloudWatchLogOptions_logOutputFormat,
+
+    -- ** CloudWatchLogOptionsSpecification
+    cloudWatchLogOptionsSpecification_logEnabled,
+    cloudWatchLogOptionsSpecification_logGroupArn,
+    cloudWatchLogOptionsSpecification_logOutputFormat,
+
+    -- ** CoipAddressUsage
+    coipAddressUsage_allocationId,
+    coipAddressUsage_awsAccountId,
+    coipAddressUsage_awsService,
+    coipAddressUsage_coIp,
+
+    -- ** CoipCidr
+    coipCidr_cidr,
+    coipCidr_coipPoolId,
+    coipCidr_localGatewayRouteTableId,
+
+    -- ** CoipPool
+    coipPool_localGatewayRouteTableId,
+    coipPool_poolArn,
+    coipPool_poolCidrs,
+    coipPool_poolId,
+    coipPool_tags,
+
+    -- ** ConnectionLogOptions
+    connectionLogOptions_cloudwatchLogGroup,
+    connectionLogOptions_cloudwatchLogStream,
+    connectionLogOptions_enabled,
+
+    -- ** ConnectionLogResponseOptions
+    connectionLogResponseOptions_cloudwatchLogGroup,
+    connectionLogResponseOptions_cloudwatchLogStream,
+    connectionLogResponseOptions_enabled,
+
+    -- ** ConnectionNotification
+    connectionNotification_connectionEvents,
+    connectionNotification_connectionNotificationArn,
+    connectionNotification_connectionNotificationId,
+    connectionNotification_connectionNotificationState,
+    connectionNotification_connectionNotificationType,
+    connectionNotification_serviceId,
+    connectionNotification_vpcEndpointId,
+
+    -- ** ConversionTask
+    conversionTask_conversionTaskId,
+    conversionTask_expirationTime,
+    conversionTask_importInstance,
+    conversionTask_importVolume,
+    conversionTask_state,
+    conversionTask_statusMessage,
+    conversionTask_tags,
+
+    -- ** CpuOptions
+    cpuOptions_coreCount,
+    cpuOptions_threadsPerCore,
+
+    -- ** CpuOptionsRequest
+    cpuOptionsRequest_coreCount,
+    cpuOptionsRequest_threadsPerCore,
+
+    -- ** CreateFleetError
+    createFleetError_errorCode,
+    createFleetError_errorMessage,
+    createFleetError_launchTemplateAndOverrides,
+    createFleetError_lifecycle,
+
+    -- ** CreateFleetInstance
+    createFleetInstance_instanceIds,
+    createFleetInstance_instanceType,
+    createFleetInstance_launchTemplateAndOverrides,
+    createFleetInstance_lifecycle,
+    createFleetInstance_platform,
+
+    -- ** CreateTransitGatewayConnectRequestOptions
+    createTransitGatewayConnectRequestOptions_protocol,
+
+    -- ** CreateTransitGatewayMulticastDomainRequestOptions
+    createTransitGatewayMulticastDomainRequestOptions_autoAcceptSharedAssociations,
+    createTransitGatewayMulticastDomainRequestOptions_igmpv2Support,
+    createTransitGatewayMulticastDomainRequestOptions_staticSourcesSupport,
+
+    -- ** CreateTransitGatewayPeeringAttachmentRequestOptions
+    createTransitGatewayPeeringAttachmentRequestOptions_dynamicRouting,
+
+    -- ** CreateTransitGatewayVpcAttachmentRequestOptions
+    createTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport,
+    createTransitGatewayVpcAttachmentRequestOptions_dnsSupport,
+    createTransitGatewayVpcAttachmentRequestOptions_ipv6Support,
+
+    -- ** CreateVerifiedAccessEndpointEniOptions
+    createVerifiedAccessEndpointEniOptions_networkInterfaceId,
+    createVerifiedAccessEndpointEniOptions_port,
+    createVerifiedAccessEndpointEniOptions_protocol,
+
+    -- ** CreateVerifiedAccessEndpointLoadBalancerOptions
+    createVerifiedAccessEndpointLoadBalancerOptions_loadBalancerArn,
+    createVerifiedAccessEndpointLoadBalancerOptions_port,
+    createVerifiedAccessEndpointLoadBalancerOptions_protocol,
+    createVerifiedAccessEndpointLoadBalancerOptions_subnetIds,
+
+    -- ** CreateVerifiedAccessTrustProviderDeviceOptions
+    createVerifiedAccessTrustProviderDeviceOptions_tenantId,
+
+    -- ** CreateVerifiedAccessTrustProviderOidcOptions
+    createVerifiedAccessTrustProviderOidcOptions_authorizationEndpoint,
+    createVerifiedAccessTrustProviderOidcOptions_clientId,
+    createVerifiedAccessTrustProviderOidcOptions_clientSecret,
+    createVerifiedAccessTrustProviderOidcOptions_issuer,
+    createVerifiedAccessTrustProviderOidcOptions_scope,
+    createVerifiedAccessTrustProviderOidcOptions_tokenEndpoint,
+    createVerifiedAccessTrustProviderOidcOptions_userInfoEndpoint,
+
+    -- ** CreateVolumePermission
+    createVolumePermission_group,
+    createVolumePermission_userId,
+
+    -- ** CreateVolumePermissionModifications
+    createVolumePermissionModifications_add,
+    createVolumePermissionModifications_remove,
+
+    -- ** CreditSpecification
+    creditSpecification_cpuCredits,
+
+    -- ** CreditSpecificationRequest
+    creditSpecificationRequest_cpuCredits,
+
+    -- ** CustomerGateway
+    customerGateway_certificateArn,
+    customerGateway_deviceName,
+    customerGateway_tags,
+    customerGateway_bgpAsn,
+    customerGateway_customerGatewayId,
+    customerGateway_ipAddress,
+    customerGateway_state,
+    customerGateway_type,
+
+    -- ** DataQuery
+    dataQuery_destination,
+    dataQuery_id,
+    dataQuery_metric,
+    dataQuery_period,
+    dataQuery_source,
+    dataQuery_statistic,
+
+    -- ** DataResponse
+    dataResponse_destination,
+    dataResponse_id,
+    dataResponse_metric,
+    dataResponse_metricPoints,
+    dataResponse_period,
+    dataResponse_source,
+    dataResponse_statistic,
+
+    -- ** DeleteFleetError
+    deleteFleetError_code,
+    deleteFleetError_message,
+
+    -- ** DeleteFleetErrorItem
+    deleteFleetErrorItem_error,
+    deleteFleetErrorItem_fleetId,
+
+    -- ** DeleteFleetSuccessItem
+    deleteFleetSuccessItem_currentFleetState,
+    deleteFleetSuccessItem_fleetId,
+    deleteFleetSuccessItem_previousFleetState,
+
+    -- ** DeleteLaunchTemplateVersionsResponseErrorItem
+    deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateId,
+    deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateName,
+    deleteLaunchTemplateVersionsResponseErrorItem_responseError,
+    deleteLaunchTemplateVersionsResponseErrorItem_versionNumber,
+
+    -- ** DeleteLaunchTemplateVersionsResponseSuccessItem
+    deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateId,
+    deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateName,
+    deleteLaunchTemplateVersionsResponseSuccessItem_versionNumber,
+
+    -- ** DeleteQueuedReservedInstancesError
+    deleteQueuedReservedInstancesError_code,
+    deleteQueuedReservedInstancesError_message,
+
+    -- ** DeregisterInstanceTagAttributeRequest
+    deregisterInstanceTagAttributeRequest_includeAllTagsOfInstance,
+    deregisterInstanceTagAttributeRequest_instanceTagKeys,
+
+    -- ** DescribeFastLaunchImagesSuccessItem
+    describeFastLaunchImagesSuccessItem_imageId,
+    describeFastLaunchImagesSuccessItem_launchTemplate,
+    describeFastLaunchImagesSuccessItem_maxParallelLaunches,
+    describeFastLaunchImagesSuccessItem_ownerId,
+    describeFastLaunchImagesSuccessItem_resourceType,
+    describeFastLaunchImagesSuccessItem_snapshotConfiguration,
+    describeFastLaunchImagesSuccessItem_state,
+    describeFastLaunchImagesSuccessItem_stateTransitionReason,
+    describeFastLaunchImagesSuccessItem_stateTransitionTime,
+
+    -- ** DescribeFastSnapshotRestoreSuccessItem
+    describeFastSnapshotRestoreSuccessItem_availabilityZone,
+    describeFastSnapshotRestoreSuccessItem_disabledTime,
+    describeFastSnapshotRestoreSuccessItem_disablingTime,
+    describeFastSnapshotRestoreSuccessItem_enabledTime,
+    describeFastSnapshotRestoreSuccessItem_enablingTime,
+    describeFastSnapshotRestoreSuccessItem_optimizingTime,
+    describeFastSnapshotRestoreSuccessItem_ownerAlias,
+    describeFastSnapshotRestoreSuccessItem_ownerId,
+    describeFastSnapshotRestoreSuccessItem_snapshotId,
+    describeFastSnapshotRestoreSuccessItem_state,
+    describeFastSnapshotRestoreSuccessItem_stateTransitionReason,
+
+    -- ** DescribeFleetError
+    describeFleetError_errorCode,
+    describeFleetError_errorMessage,
+    describeFleetError_launchTemplateAndOverrides,
+    describeFleetError_lifecycle,
+
+    -- ** DescribeFleetsInstances
+    describeFleetsInstances_instanceIds,
+    describeFleetsInstances_instanceType,
+    describeFleetsInstances_launchTemplateAndOverrides,
+    describeFleetsInstances_lifecycle,
+    describeFleetsInstances_platform,
+
+    -- ** DestinationOptionsRequest
+    destinationOptionsRequest_fileFormat,
+    destinationOptionsRequest_hiveCompatiblePartitions,
+    destinationOptionsRequest_perHourPartition,
+
+    -- ** DestinationOptionsResponse
+    destinationOptionsResponse_fileFormat,
+    destinationOptionsResponse_hiveCompatiblePartitions,
+    destinationOptionsResponse_perHourPartition,
+
+    -- ** DeviceOptions
+    deviceOptions_tenantId,
+
+    -- ** DhcpConfiguration
+    dhcpConfiguration_key,
+    dhcpConfiguration_values,
+
+    -- ** DhcpOptions
+    dhcpOptions_dhcpConfigurations,
+    dhcpOptions_dhcpOptionsId,
+    dhcpOptions_ownerId,
+    dhcpOptions_tags,
+
+    -- ** DirectoryServiceAuthentication
+    directoryServiceAuthentication_directoryId,
+
+    -- ** DirectoryServiceAuthenticationRequest
+    directoryServiceAuthenticationRequest_directoryId,
+
+    -- ** DisableFastSnapshotRestoreErrorItem
+    disableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors,
+    disableFastSnapshotRestoreErrorItem_snapshotId,
+
+    -- ** DisableFastSnapshotRestoreStateError
+    disableFastSnapshotRestoreStateError_code,
+    disableFastSnapshotRestoreStateError_message,
+
+    -- ** DisableFastSnapshotRestoreStateErrorItem
+    disableFastSnapshotRestoreStateErrorItem_availabilityZone,
+    disableFastSnapshotRestoreStateErrorItem_error,
+
+    -- ** DisableFastSnapshotRestoreSuccessItem
+    disableFastSnapshotRestoreSuccessItem_availabilityZone,
+    disableFastSnapshotRestoreSuccessItem_disabledTime,
+    disableFastSnapshotRestoreSuccessItem_disablingTime,
+    disableFastSnapshotRestoreSuccessItem_enabledTime,
+    disableFastSnapshotRestoreSuccessItem_enablingTime,
+    disableFastSnapshotRestoreSuccessItem_optimizingTime,
+    disableFastSnapshotRestoreSuccessItem_ownerAlias,
+    disableFastSnapshotRestoreSuccessItem_ownerId,
+    disableFastSnapshotRestoreSuccessItem_snapshotId,
+    disableFastSnapshotRestoreSuccessItem_state,
+    disableFastSnapshotRestoreSuccessItem_stateTransitionReason,
+
+    -- ** DiskImage
+    diskImage_description,
+    diskImage_image,
+    diskImage_volume,
+
+    -- ** DiskImageDescription
+    diskImageDescription_checksum,
+    diskImageDescription_format,
+    diskImageDescription_importManifestUrl,
+    diskImageDescription_size,
+
+    -- ** DiskImageDetail
+    diskImageDetail_bytes,
+    diskImageDetail_format,
+    diskImageDetail_importManifestUrl,
+
+    -- ** DiskImageVolumeDescription
+    diskImageVolumeDescription_id,
+    diskImageVolumeDescription_size,
+
+    -- ** DiskInfo
+    diskInfo_count,
+    diskInfo_sizeInGB,
+    diskInfo_type,
+
+    -- ** DnsEntry
+    dnsEntry_dnsName,
+    dnsEntry_hostedZoneId,
+
+    -- ** DnsOptions
+    dnsOptions_dnsRecordIpType,
+
+    -- ** DnsOptionsSpecification
+    dnsOptionsSpecification_dnsRecordIpType,
+
+    -- ** DnsServersOptionsModifyStructure
+    dnsServersOptionsModifyStructure_customDnsServers,
+    dnsServersOptionsModifyStructure_enabled,
+
+    -- ** EbsBlockDevice
+    ebsBlockDevice_deleteOnTermination,
+    ebsBlockDevice_encrypted,
+    ebsBlockDevice_iops,
+    ebsBlockDevice_kmsKeyId,
+    ebsBlockDevice_outpostArn,
+    ebsBlockDevice_snapshotId,
+    ebsBlockDevice_throughput,
+    ebsBlockDevice_volumeSize,
+    ebsBlockDevice_volumeType,
+
+    -- ** EbsInfo
+    ebsInfo_ebsOptimizedInfo,
+    ebsInfo_ebsOptimizedSupport,
+    ebsInfo_encryptionSupport,
+    ebsInfo_nvmeSupport,
+
+    -- ** EbsInstanceBlockDevice
+    ebsInstanceBlockDevice_attachTime,
+    ebsInstanceBlockDevice_deleteOnTermination,
+    ebsInstanceBlockDevice_status,
+    ebsInstanceBlockDevice_volumeId,
+
+    -- ** EbsInstanceBlockDeviceSpecification
+    ebsInstanceBlockDeviceSpecification_deleteOnTermination,
+    ebsInstanceBlockDeviceSpecification_volumeId,
+
+    -- ** EbsOptimizedInfo
+    ebsOptimizedInfo_baselineBandwidthInMbps,
+    ebsOptimizedInfo_baselineIops,
+    ebsOptimizedInfo_baselineThroughputInMBps,
+    ebsOptimizedInfo_maximumBandwidthInMbps,
+    ebsOptimizedInfo_maximumIops,
+    ebsOptimizedInfo_maximumThroughputInMBps,
+
+    -- ** EfaInfo
+    efaInfo_maximumEfaInterfaces,
+
+    -- ** EgressOnlyInternetGateway
+    egressOnlyInternetGateway_attachments,
+    egressOnlyInternetGateway_egressOnlyInternetGatewayId,
+    egressOnlyInternetGateway_tags,
+
+    -- ** ElasticGpuAssociation
+    elasticGpuAssociation_elasticGpuAssociationId,
+    elasticGpuAssociation_elasticGpuAssociationState,
+    elasticGpuAssociation_elasticGpuAssociationTime,
+    elasticGpuAssociation_elasticGpuId,
+
+    -- ** ElasticGpuHealth
+    elasticGpuHealth_status,
+
+    -- ** ElasticGpuSpecification
+    elasticGpuSpecification_type,
+
+    -- ** ElasticGpuSpecificationResponse
+    elasticGpuSpecificationResponse_type,
+
+    -- ** ElasticGpus
+    elasticGpus_availabilityZone,
+    elasticGpus_elasticGpuHealth,
+    elasticGpus_elasticGpuId,
+    elasticGpus_elasticGpuState,
+    elasticGpus_elasticGpuType,
+    elasticGpus_instanceId,
+    elasticGpus_tags,
+
+    -- ** ElasticInferenceAccelerator
+    elasticInferenceAccelerator_count,
+    elasticInferenceAccelerator_type,
+
+    -- ** ElasticInferenceAcceleratorAssociation
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorArn,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationId,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationState,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationTime,
+
+    -- ** EnaSrdSpecification
+    enaSrdSpecification_enaSrdEnabled,
+    enaSrdSpecification_enaSrdUdpSpecification,
+
+    -- ** EnaSrdUdpSpecification
+    enaSrdUdpSpecification_enaSrdUdpEnabled,
+
+    -- ** EnableFastSnapshotRestoreErrorItem
+    enableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors,
+    enableFastSnapshotRestoreErrorItem_snapshotId,
+
+    -- ** EnableFastSnapshotRestoreStateError
+    enableFastSnapshotRestoreStateError_code,
+    enableFastSnapshotRestoreStateError_message,
+
+    -- ** EnableFastSnapshotRestoreStateErrorItem
+    enableFastSnapshotRestoreStateErrorItem_availabilityZone,
+    enableFastSnapshotRestoreStateErrorItem_error,
+
+    -- ** EnableFastSnapshotRestoreSuccessItem
+    enableFastSnapshotRestoreSuccessItem_availabilityZone,
+    enableFastSnapshotRestoreSuccessItem_disabledTime,
+    enableFastSnapshotRestoreSuccessItem_disablingTime,
+    enableFastSnapshotRestoreSuccessItem_enabledTime,
+    enableFastSnapshotRestoreSuccessItem_enablingTime,
+    enableFastSnapshotRestoreSuccessItem_optimizingTime,
+    enableFastSnapshotRestoreSuccessItem_ownerAlias,
+    enableFastSnapshotRestoreSuccessItem_ownerId,
+    enableFastSnapshotRestoreSuccessItem_snapshotId,
+    enableFastSnapshotRestoreSuccessItem_state,
+    enableFastSnapshotRestoreSuccessItem_stateTransitionReason,
+
+    -- ** EnclaveOptions
+    enclaveOptions_enabled,
+
+    -- ** EnclaveOptionsRequest
+    enclaveOptionsRequest_enabled,
+
+    -- ** EventInformation
+    eventInformation_eventDescription,
+    eventInformation_eventSubType,
+    eventInformation_instanceId,
+
+    -- ** Explanation
+    explanation_acl,
+    explanation_aclRule,
+    explanation_address,
+    explanation_addresses,
+    explanation_attachedTo,
+    explanation_availabilityZones,
+    explanation_cidrs,
+    explanation_classicLoadBalancerListener,
+    explanation_component,
+    explanation_componentAccount,
+    explanation_componentRegion,
+    explanation_customerGateway,
+    explanation_destination,
+    explanation_destinationVpc,
+    explanation_direction,
+    explanation_elasticLoadBalancerListener,
+    explanation_explanationCode,
+    explanation_ingressRouteTable,
+    explanation_internetGateway,
+    explanation_loadBalancerArn,
+    explanation_loadBalancerListenerPort,
+    explanation_loadBalancerTarget,
+    explanation_loadBalancerTargetGroup,
+    explanation_loadBalancerTargetGroups,
+    explanation_loadBalancerTargetPort,
+    explanation_missingComponent,
+    explanation_natGateway,
+    explanation_networkInterface,
+    explanation_packetField,
+    explanation_port,
+    explanation_portRanges,
+    explanation_prefixList,
+    explanation_protocols,
+    explanation_routeTable,
+    explanation_routeTableRoute,
+    explanation_securityGroup,
+    explanation_securityGroupRule,
+    explanation_securityGroups,
+    explanation_sourceVpc,
+    explanation_state,
+    explanation_subnet,
+    explanation_subnetRouteTable,
+    explanation_transitGateway,
+    explanation_transitGatewayAttachment,
+    explanation_transitGatewayRouteTable,
+    explanation_transitGatewayRouteTableRoute,
+    explanation_vpc,
+    explanation_vpcEndpoint,
+    explanation_vpcPeeringConnection,
+    explanation_vpnConnection,
+    explanation_vpnGateway,
+
+    -- ** ExportImageTask
+    exportImageTask_description,
+    exportImageTask_exportImageTaskId,
+    exportImageTask_imageId,
+    exportImageTask_progress,
+    exportImageTask_s3ExportLocation,
+    exportImageTask_status,
+    exportImageTask_statusMessage,
+    exportImageTask_tags,
+
+    -- ** ExportTask
+    exportTask_tags,
+    exportTask_description,
+    exportTask_exportTaskId,
+    exportTask_exportToS3Task,
+    exportTask_instanceExportDetails,
+    exportTask_state,
+    exportTask_statusMessage,
+
+    -- ** ExportTaskS3Location
+    exportTaskS3Location_s3Bucket,
+    exportTaskS3Location_s3Prefix,
+
+    -- ** ExportTaskS3LocationRequest
+    exportTaskS3LocationRequest_s3Prefix,
+    exportTaskS3LocationRequest_s3Bucket,
+
+    -- ** ExportToS3Task
+    exportToS3Task_containerFormat,
+    exportToS3Task_diskImageFormat,
+    exportToS3Task_s3Bucket,
+    exportToS3Task_s3Key,
+
+    -- ** ExportToS3TaskSpecification
+    exportToS3TaskSpecification_containerFormat,
+    exportToS3TaskSpecification_diskImageFormat,
+    exportToS3TaskSpecification_s3Bucket,
+    exportToS3TaskSpecification_s3Prefix,
+
+    -- ** FailedCapacityReservationFleetCancellationResult
+    failedCapacityReservationFleetCancellationResult_cancelCapacityReservationFleetError,
+    failedCapacityReservationFleetCancellationResult_capacityReservationFleetId,
+
+    -- ** FailedQueuedPurchaseDeletion
+    failedQueuedPurchaseDeletion_error,
+    failedQueuedPurchaseDeletion_reservedInstancesId,
+
+    -- ** FastLaunchLaunchTemplateSpecificationRequest
+    fastLaunchLaunchTemplateSpecificationRequest_launchTemplateId,
+    fastLaunchLaunchTemplateSpecificationRequest_launchTemplateName,
+    fastLaunchLaunchTemplateSpecificationRequest_version,
+
+    -- ** FastLaunchLaunchTemplateSpecificationResponse
+    fastLaunchLaunchTemplateSpecificationResponse_launchTemplateId,
+    fastLaunchLaunchTemplateSpecificationResponse_launchTemplateName,
+    fastLaunchLaunchTemplateSpecificationResponse_version,
+
+    -- ** FastLaunchSnapshotConfigurationRequest
+    fastLaunchSnapshotConfigurationRequest_targetResourceCount,
+
+    -- ** FastLaunchSnapshotConfigurationResponse
+    fastLaunchSnapshotConfigurationResponse_targetResourceCount,
+
+    -- ** FederatedAuthentication
+    federatedAuthentication_samlProviderArn,
+    federatedAuthentication_selfServiceSamlProviderArn,
+
+    -- ** FederatedAuthenticationRequest
+    federatedAuthenticationRequest_sAMLProviderArn,
+    federatedAuthenticationRequest_selfServiceSAMLProviderArn,
+
+    -- ** Filter
+    filter_values,
+    filter_name,
+
+    -- ** FleetCapacityReservation
+    fleetCapacityReservation_availabilityZone,
+    fleetCapacityReservation_availabilityZoneId,
+    fleetCapacityReservation_capacityReservationId,
+    fleetCapacityReservation_createDate,
+    fleetCapacityReservation_ebsOptimized,
+    fleetCapacityReservation_fulfilledCapacity,
+    fleetCapacityReservation_instancePlatform,
+    fleetCapacityReservation_instanceType,
+    fleetCapacityReservation_priority,
+    fleetCapacityReservation_totalInstanceCount,
+    fleetCapacityReservation_weight,
+
+    -- ** FleetData
+    fleetData_activityStatus,
+    fleetData_clientToken,
+    fleetData_context,
+    fleetData_createTime,
+    fleetData_errors,
+    fleetData_excessCapacityTerminationPolicy,
+    fleetData_fleetId,
+    fleetData_fleetState,
+    fleetData_fulfilledCapacity,
+    fleetData_fulfilledOnDemandCapacity,
+    fleetData_instances,
+    fleetData_launchTemplateConfigs,
+    fleetData_onDemandOptions,
+    fleetData_replaceUnhealthyInstances,
+    fleetData_spotOptions,
+    fleetData_tags,
+    fleetData_targetCapacitySpecification,
+    fleetData_terminateInstancesWithExpiration,
+    fleetData_type,
+    fleetData_validFrom,
+    fleetData_validUntil,
+
+    -- ** FleetLaunchTemplateConfig
+    fleetLaunchTemplateConfig_launchTemplateSpecification,
+    fleetLaunchTemplateConfig_overrides,
+
+    -- ** FleetLaunchTemplateConfigRequest
+    fleetLaunchTemplateConfigRequest_launchTemplateSpecification,
+    fleetLaunchTemplateConfigRequest_overrides,
+
+    -- ** FleetLaunchTemplateOverrides
+    fleetLaunchTemplateOverrides_availabilityZone,
+    fleetLaunchTemplateOverrides_imageId,
+    fleetLaunchTemplateOverrides_instanceRequirements,
+    fleetLaunchTemplateOverrides_instanceType,
+    fleetLaunchTemplateOverrides_maxPrice,
+    fleetLaunchTemplateOverrides_placement,
+    fleetLaunchTemplateOverrides_priority,
+    fleetLaunchTemplateOverrides_subnetId,
+    fleetLaunchTemplateOverrides_weightedCapacity,
+
+    -- ** FleetLaunchTemplateOverridesRequest
+    fleetLaunchTemplateOverridesRequest_availabilityZone,
+    fleetLaunchTemplateOverridesRequest_imageId,
+    fleetLaunchTemplateOverridesRequest_instanceRequirements,
+    fleetLaunchTemplateOverridesRequest_instanceType,
+    fleetLaunchTemplateOverridesRequest_maxPrice,
+    fleetLaunchTemplateOverridesRequest_placement,
+    fleetLaunchTemplateOverridesRequest_priority,
+    fleetLaunchTemplateOverridesRequest_subnetId,
+    fleetLaunchTemplateOverridesRequest_weightedCapacity,
+
+    -- ** FleetLaunchTemplateSpecification
+    fleetLaunchTemplateSpecification_launchTemplateId,
+    fleetLaunchTemplateSpecification_launchTemplateName,
+    fleetLaunchTemplateSpecification_version,
+
+    -- ** FleetLaunchTemplateSpecificationRequest
+    fleetLaunchTemplateSpecificationRequest_launchTemplateId,
+    fleetLaunchTemplateSpecificationRequest_launchTemplateName,
+    fleetLaunchTemplateSpecificationRequest_version,
+
+    -- ** FleetSpotCapacityRebalance
+    fleetSpotCapacityRebalance_replacementStrategy,
+    fleetSpotCapacityRebalance_terminationDelay,
+
+    -- ** FleetSpotCapacityRebalanceRequest
+    fleetSpotCapacityRebalanceRequest_replacementStrategy,
+    fleetSpotCapacityRebalanceRequest_terminationDelay,
+
+    -- ** FleetSpotMaintenanceStrategies
+    fleetSpotMaintenanceStrategies_capacityRebalance,
+
+    -- ** FleetSpotMaintenanceStrategiesRequest
+    fleetSpotMaintenanceStrategiesRequest_capacityRebalance,
+
+    -- ** FlowLog
+    flowLog_creationTime,
+    flowLog_deliverCrossAccountRole,
+    flowLog_deliverLogsErrorMessage,
+    flowLog_deliverLogsPermissionArn,
+    flowLog_deliverLogsStatus,
+    flowLog_destinationOptions,
+    flowLog_flowLogId,
+    flowLog_flowLogStatus,
+    flowLog_logDestination,
+    flowLog_logDestinationType,
+    flowLog_logFormat,
+    flowLog_logGroupName,
+    flowLog_maxAggregationInterval,
+    flowLog_resourceId,
+    flowLog_tags,
+    flowLog_trafficType,
+
+    -- ** FpgaDeviceInfo
+    fpgaDeviceInfo_count,
+    fpgaDeviceInfo_manufacturer,
+    fpgaDeviceInfo_memoryInfo,
+    fpgaDeviceInfo_name,
+
+    -- ** FpgaDeviceMemoryInfo
+    fpgaDeviceMemoryInfo_sizeInMiB,
+
+    -- ** FpgaImage
+    fpgaImage_createTime,
+    fpgaImage_dataRetentionSupport,
+    fpgaImage_description,
+    fpgaImage_fpgaImageGlobalId,
+    fpgaImage_fpgaImageId,
+    fpgaImage_instanceTypes,
+    fpgaImage_name,
+    fpgaImage_ownerAlias,
+    fpgaImage_ownerId,
+    fpgaImage_pciId,
+    fpgaImage_productCodes,
+    fpgaImage_public,
+    fpgaImage_shellVersion,
+    fpgaImage_state,
+    fpgaImage_tags,
+    fpgaImage_updateTime,
+
+    -- ** FpgaImageAttribute
+    fpgaImageAttribute_description,
+    fpgaImageAttribute_fpgaImageId,
+    fpgaImageAttribute_loadPermissions,
+    fpgaImageAttribute_name,
+    fpgaImageAttribute_productCodes,
+
+    -- ** FpgaImageState
+    fpgaImageState_code,
+    fpgaImageState_message,
+
+    -- ** FpgaInfo
+    fpgaInfo_fpgas,
+    fpgaInfo_totalFpgaMemoryInMiB,
+
+    -- ** GpuDeviceInfo
+    gpuDeviceInfo_count,
+    gpuDeviceInfo_manufacturer,
+    gpuDeviceInfo_memoryInfo,
+    gpuDeviceInfo_name,
+
+    -- ** GpuDeviceMemoryInfo
+    gpuDeviceMemoryInfo_sizeInMiB,
+
+    -- ** GpuInfo
+    gpuInfo_gpus,
+    gpuInfo_totalGpuMemoryInMiB,
+
+    -- ** GroupIdentifier
+    groupIdentifier_groupId,
+    groupIdentifier_groupName,
+
+    -- ** HibernationOptions
+    hibernationOptions_configured,
+
+    -- ** HibernationOptionsRequest
+    hibernationOptionsRequest_configured,
+
+    -- ** HistoryRecord
+    historyRecord_eventInformation,
+    historyRecord_eventType,
+    historyRecord_timestamp,
+
+    -- ** HistoryRecordEntry
+    historyRecordEntry_eventInformation,
+    historyRecordEntry_eventType,
+    historyRecordEntry_timestamp,
+
+    -- ** Host
+    host_allocationTime,
+    host_allowsMultipleInstanceTypes,
+    host_autoPlacement,
+    host_availabilityZone,
+    host_availabilityZoneId,
+    host_availableCapacity,
+    host_clientToken,
+    host_hostId,
+    host_hostProperties,
+    host_hostRecovery,
+    host_hostReservationId,
+    host_instances,
+    host_memberOfServiceLinkedResourceGroup,
+    host_outpostArn,
+    host_ownerId,
+    host_releaseTime,
+    host_state,
+    host_tags,
+
+    -- ** HostInstance
+    hostInstance_instanceId,
+    hostInstance_instanceType,
+    hostInstance_ownerId,
+
+    -- ** HostOffering
+    hostOffering_currencyCode,
+    hostOffering_duration,
+    hostOffering_hourlyPrice,
+    hostOffering_instanceFamily,
+    hostOffering_offeringId,
+    hostOffering_paymentOption,
+    hostOffering_upfrontPrice,
+
+    -- ** HostProperties
+    hostProperties_cores,
+    hostProperties_instanceFamily,
+    hostProperties_instanceType,
+    hostProperties_sockets,
+    hostProperties_totalVCpus,
+
+    -- ** HostReservation
+    hostReservation_count,
+    hostReservation_currencyCode,
+    hostReservation_duration,
+    hostReservation_end,
+    hostReservation_hostIdSet,
+    hostReservation_hostReservationId,
+    hostReservation_hourlyPrice,
+    hostReservation_instanceFamily,
+    hostReservation_offeringId,
+    hostReservation_paymentOption,
+    hostReservation_start,
+    hostReservation_state,
+    hostReservation_tags,
+    hostReservation_upfrontPrice,
+
+    -- ** IKEVersionsListValue
+    iKEVersionsListValue_value,
+
+    -- ** IKEVersionsRequestListValue
+    iKEVersionsRequestListValue_value,
+
+    -- ** IamInstanceProfile
+    iamInstanceProfile_arn,
+    iamInstanceProfile_id,
+
+    -- ** IamInstanceProfileAssociation
+    iamInstanceProfileAssociation_associationId,
+    iamInstanceProfileAssociation_iamInstanceProfile,
+    iamInstanceProfileAssociation_instanceId,
+    iamInstanceProfileAssociation_state,
+    iamInstanceProfileAssociation_timestamp,
+
+    -- ** IamInstanceProfileSpecification
+    iamInstanceProfileSpecification_arn,
+    iamInstanceProfileSpecification_name,
+
+    -- ** IcmpTypeCode
+    icmpTypeCode_code,
+    icmpTypeCode_type,
+
+    -- ** IdFormat
+    idFormat_deadline,
+    idFormat_resource,
+    idFormat_useLongIds,
+
+    -- ** Image
+    image_blockDeviceMappings,
+    image_bootMode,
+    image_creationDate,
+    image_deprecationTime,
+    image_description,
+    image_enaSupport,
+    image_imageOwnerAlias,
+    image_imdsSupport,
+    image_kernelId,
+    image_name,
+    image_platform,
+    image_platformDetails,
+    image_productCodes,
+    image_ramdiskId,
+    image_rootDeviceName,
+    image_sriovNetSupport,
+    image_stateReason,
+    image_tags,
+    image_tpmSupport,
+    image_usageOperation,
+    image_imageId,
+    image_imageLocation,
+    image_state,
+    image_ownerId,
+    image_public,
+    image_architecture,
+    image_imageType,
+    image_rootDeviceType,
+    image_virtualizationType,
+    image_hypervisor,
+
+    -- ** ImageDiskContainer
+    imageDiskContainer_description,
+    imageDiskContainer_deviceName,
+    imageDiskContainer_format,
+    imageDiskContainer_snapshotId,
+    imageDiskContainer_url,
+    imageDiskContainer_userBucket,
+
+    -- ** ImageRecycleBinInfo
+    imageRecycleBinInfo_description,
+    imageRecycleBinInfo_imageId,
+    imageRecycleBinInfo_name,
+    imageRecycleBinInfo_recycleBinEnterTime,
+    imageRecycleBinInfo_recycleBinExitTime,
+
+    -- ** ImportImageLicenseConfigurationRequest
+    importImageLicenseConfigurationRequest_licenseConfigurationArn,
+
+    -- ** ImportImageLicenseConfigurationResponse
+    importImageLicenseConfigurationResponse_licenseConfigurationArn,
+
+    -- ** ImportImageTask
+    importImageTask_architecture,
+    importImageTask_bootMode,
+    importImageTask_description,
+    importImageTask_encrypted,
+    importImageTask_hypervisor,
+    importImageTask_imageId,
+    importImageTask_importTaskId,
+    importImageTask_kmsKeyId,
+    importImageTask_licenseSpecifications,
+    importImageTask_licenseType,
+    importImageTask_platform,
+    importImageTask_progress,
+    importImageTask_snapshotDetails,
+    importImageTask_status,
+    importImageTask_statusMessage,
+    importImageTask_tags,
+    importImageTask_usageOperation,
+
+    -- ** ImportInstanceLaunchSpecification
+    importInstanceLaunchSpecification_additionalInfo,
+    importInstanceLaunchSpecification_architecture,
+    importInstanceLaunchSpecification_groupIds,
+    importInstanceLaunchSpecification_groupNames,
+    importInstanceLaunchSpecification_instanceInitiatedShutdownBehavior,
+    importInstanceLaunchSpecification_instanceType,
+    importInstanceLaunchSpecification_monitoring,
+    importInstanceLaunchSpecification_placement,
+    importInstanceLaunchSpecification_privateIpAddress,
+    importInstanceLaunchSpecification_subnetId,
+    importInstanceLaunchSpecification_userData,
+
+    -- ** ImportInstanceTaskDetails
+    importInstanceTaskDetails_description,
+    importInstanceTaskDetails_instanceId,
+    importInstanceTaskDetails_platform,
+    importInstanceTaskDetails_volumes,
+
+    -- ** ImportInstanceVolumeDetailItem
+    importInstanceVolumeDetailItem_availabilityZone,
+    importInstanceVolumeDetailItem_bytesConverted,
+    importInstanceVolumeDetailItem_description,
+    importInstanceVolumeDetailItem_image,
+    importInstanceVolumeDetailItem_status,
+    importInstanceVolumeDetailItem_statusMessage,
+    importInstanceVolumeDetailItem_volume,
+
+    -- ** ImportSnapshotTask
+    importSnapshotTask_description,
+    importSnapshotTask_importTaskId,
+    importSnapshotTask_snapshotTaskDetail,
+    importSnapshotTask_tags,
+
+    -- ** ImportVolumeTaskDetails
+    importVolumeTaskDetails_availabilityZone,
+    importVolumeTaskDetails_bytesConverted,
+    importVolumeTaskDetails_description,
+    importVolumeTaskDetails_image,
+    importVolumeTaskDetails_volume,
+
+    -- ** InferenceAcceleratorInfo
+    inferenceAcceleratorInfo_accelerators,
+
+    -- ** InferenceDeviceInfo
+    inferenceDeviceInfo_count,
+    inferenceDeviceInfo_manufacturer,
+    inferenceDeviceInfo_name,
+
+    -- ** Instance
+    instance_blockDeviceMappings,
+    instance_bootMode,
+    instance_capacityReservationId,
+    instance_capacityReservationSpecification,
+    instance_clientToken,
+    instance_cpuOptions,
+    instance_ebsOptimized,
+    instance_elasticGpuAssociations,
+    instance_elasticInferenceAcceleratorAssociations,
+    instance_enaSupport,
+    instance_enclaveOptions,
+    instance_hibernationOptions,
+    instance_iamInstanceProfile,
+    instance_instanceLifecycle,
+    instance_ipv6Address,
+    instance_kernelId,
+    instance_keyName,
+    instance_licenses,
+    instance_maintenanceOptions,
+    instance_metadataOptions,
+    instance_networkInterfaces,
+    instance_outpostArn,
+    instance_platform,
+    instance_platformDetails,
+    instance_privateDnsName,
+    instance_privateDnsNameOptions,
+    instance_privateIpAddress,
+    instance_productCodes,
+    instance_publicDnsName,
+    instance_publicIpAddress,
+    instance_ramdiskId,
+    instance_rootDeviceName,
+    instance_securityGroups,
+    instance_sourceDestCheck,
+    instance_spotInstanceRequestId,
+    instance_sriovNetSupport,
+    instance_stateReason,
+    instance_stateTransitionReason,
+    instance_subnetId,
+    instance_tags,
+    instance_tpmSupport,
+    instance_usageOperation,
+    instance_usageOperationUpdateTime,
+    instance_vpcId,
+    instance_instanceId,
+    instance_imageId,
+    instance_amiLaunchIndex,
+    instance_instanceType,
+    instance_launchTime,
+    instance_placement,
+    instance_monitoring,
+    instance_architecture,
+    instance_rootDeviceType,
+    instance_virtualizationType,
+    instance_hypervisor,
+    instance_state,
+
+    -- ** InstanceBlockDeviceMapping
+    instanceBlockDeviceMapping_deviceName,
+    instanceBlockDeviceMapping_ebs,
+
+    -- ** InstanceBlockDeviceMappingSpecification
+    instanceBlockDeviceMappingSpecification_deviceName,
+    instanceBlockDeviceMappingSpecification_ebs,
+    instanceBlockDeviceMappingSpecification_noDevice,
+    instanceBlockDeviceMappingSpecification_virtualName,
+
+    -- ** InstanceCapacity
+    instanceCapacity_availableCapacity,
+    instanceCapacity_instanceType,
+    instanceCapacity_totalCapacity,
+
+    -- ** InstanceCount
+    instanceCount_instanceCount,
+    instanceCount_state,
+
+    -- ** InstanceCreditSpecification
+    instanceCreditSpecification_cpuCredits,
+    instanceCreditSpecification_instanceId,
+
+    -- ** InstanceCreditSpecificationRequest
+    instanceCreditSpecificationRequest_cpuCredits,
+    instanceCreditSpecificationRequest_instanceId,
+
+    -- ** InstanceEventWindow
+    instanceEventWindow_associationTarget,
+    instanceEventWindow_cronExpression,
+    instanceEventWindow_instanceEventWindowId,
+    instanceEventWindow_name,
+    instanceEventWindow_state,
+    instanceEventWindow_tags,
+    instanceEventWindow_timeRanges,
+
+    -- ** InstanceEventWindowAssociationRequest
+    instanceEventWindowAssociationRequest_dedicatedHostIds,
+    instanceEventWindowAssociationRequest_instanceIds,
+    instanceEventWindowAssociationRequest_instanceTags,
+
+    -- ** InstanceEventWindowAssociationTarget
+    instanceEventWindowAssociationTarget_dedicatedHostIds,
+    instanceEventWindowAssociationTarget_instanceIds,
+    instanceEventWindowAssociationTarget_tags,
+
+    -- ** InstanceEventWindowDisassociationRequest
+    instanceEventWindowDisassociationRequest_dedicatedHostIds,
+    instanceEventWindowDisassociationRequest_instanceIds,
+    instanceEventWindowDisassociationRequest_instanceTags,
+
+    -- ** InstanceEventWindowStateChange
+    instanceEventWindowStateChange_instanceEventWindowId,
+    instanceEventWindowStateChange_state,
+
+    -- ** InstanceEventWindowTimeRange
+    instanceEventWindowTimeRange_endHour,
+    instanceEventWindowTimeRange_endWeekDay,
+    instanceEventWindowTimeRange_startHour,
+    instanceEventWindowTimeRange_startWeekDay,
+
+    -- ** InstanceEventWindowTimeRangeRequest
+    instanceEventWindowTimeRangeRequest_endHour,
+    instanceEventWindowTimeRangeRequest_endWeekDay,
+    instanceEventWindowTimeRangeRequest_startHour,
+    instanceEventWindowTimeRangeRequest_startWeekDay,
+
+    -- ** InstanceExportDetails
+    instanceExportDetails_instanceId,
+    instanceExportDetails_targetEnvironment,
+
+    -- ** InstanceFamilyCreditSpecification
+    instanceFamilyCreditSpecification_cpuCredits,
+    instanceFamilyCreditSpecification_instanceFamily,
+
+    -- ** InstanceIpv4Prefix
+    instanceIpv4Prefix_ipv4Prefix,
+
+    -- ** InstanceIpv6Address
+    instanceIpv6Address_ipv6Address,
+
+    -- ** InstanceIpv6AddressRequest
+    instanceIpv6AddressRequest_ipv6Address,
+
+    -- ** InstanceIpv6Prefix
+    instanceIpv6Prefix_ipv6Prefix,
+
+    -- ** InstanceMaintenanceOptions
+    instanceMaintenanceOptions_autoRecovery,
+
+    -- ** InstanceMaintenanceOptionsRequest
+    instanceMaintenanceOptionsRequest_autoRecovery,
+
+    -- ** InstanceMarketOptionsRequest
+    instanceMarketOptionsRequest_marketType,
+    instanceMarketOptionsRequest_spotOptions,
+
+    -- ** InstanceMetadataOptionsRequest
+    instanceMetadataOptionsRequest_httpEndpoint,
+    instanceMetadataOptionsRequest_httpProtocolIpv6,
+    instanceMetadataOptionsRequest_httpPutResponseHopLimit,
+    instanceMetadataOptionsRequest_httpTokens,
+    instanceMetadataOptionsRequest_instanceMetadataTags,
+
+    -- ** InstanceMetadataOptionsResponse
+    instanceMetadataOptionsResponse_httpEndpoint,
+    instanceMetadataOptionsResponse_httpProtocolIpv6,
+    instanceMetadataOptionsResponse_httpPutResponseHopLimit,
+    instanceMetadataOptionsResponse_httpTokens,
+    instanceMetadataOptionsResponse_instanceMetadataTags,
+    instanceMetadataOptionsResponse_state,
+
+    -- ** InstanceMonitoring
+    instanceMonitoring_instanceId,
+    instanceMonitoring_monitoring,
+
+    -- ** InstanceNetworkInterface
+    instanceNetworkInterface_association,
+    instanceNetworkInterface_attachment,
+    instanceNetworkInterface_description,
+    instanceNetworkInterface_groups,
+    instanceNetworkInterface_interfaceType,
+    instanceNetworkInterface_ipv4Prefixes,
+    instanceNetworkInterface_ipv6Addresses,
+    instanceNetworkInterface_ipv6Prefixes,
+    instanceNetworkInterface_macAddress,
+    instanceNetworkInterface_networkInterfaceId,
+    instanceNetworkInterface_ownerId,
+    instanceNetworkInterface_privateDnsName,
+    instanceNetworkInterface_privateIpAddress,
+    instanceNetworkInterface_privateIpAddresses,
+    instanceNetworkInterface_sourceDestCheck,
+    instanceNetworkInterface_status,
+    instanceNetworkInterface_subnetId,
+    instanceNetworkInterface_vpcId,
+
+    -- ** InstanceNetworkInterfaceAssociation
+    instanceNetworkInterfaceAssociation_carrierIp,
+    instanceNetworkInterfaceAssociation_customerOwnedIp,
+    instanceNetworkInterfaceAssociation_ipOwnerId,
+    instanceNetworkInterfaceAssociation_publicDnsName,
+    instanceNetworkInterfaceAssociation_publicIp,
+
+    -- ** InstanceNetworkInterfaceAttachment
+    instanceNetworkInterfaceAttachment_attachTime,
+    instanceNetworkInterfaceAttachment_attachmentId,
+    instanceNetworkInterfaceAttachment_deleteOnTermination,
+    instanceNetworkInterfaceAttachment_deviceIndex,
+    instanceNetworkInterfaceAttachment_networkCardIndex,
+    instanceNetworkInterfaceAttachment_status,
+
+    -- ** InstanceNetworkInterfaceSpecification
+    instanceNetworkInterfaceSpecification_associateCarrierIpAddress,
+    instanceNetworkInterfaceSpecification_associatePublicIpAddress,
+    instanceNetworkInterfaceSpecification_deleteOnTermination,
+    instanceNetworkInterfaceSpecification_description,
+    instanceNetworkInterfaceSpecification_deviceIndex,
+    instanceNetworkInterfaceSpecification_groups,
+    instanceNetworkInterfaceSpecification_interfaceType,
+    instanceNetworkInterfaceSpecification_ipv4PrefixCount,
+    instanceNetworkInterfaceSpecification_ipv4Prefixes,
+    instanceNetworkInterfaceSpecification_ipv6AddressCount,
+    instanceNetworkInterfaceSpecification_ipv6Addresses,
+    instanceNetworkInterfaceSpecification_ipv6PrefixCount,
+    instanceNetworkInterfaceSpecification_ipv6Prefixes,
+    instanceNetworkInterfaceSpecification_networkCardIndex,
+    instanceNetworkInterfaceSpecification_networkInterfaceId,
+    instanceNetworkInterfaceSpecification_privateIpAddress,
+    instanceNetworkInterfaceSpecification_privateIpAddresses,
+    instanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount,
+    instanceNetworkInterfaceSpecification_subnetId,
+
+    -- ** InstancePrivateIpAddress
+    instancePrivateIpAddress_association,
+    instancePrivateIpAddress_primary,
+    instancePrivateIpAddress_privateDnsName,
+    instancePrivateIpAddress_privateIpAddress,
+
+    -- ** InstanceRequirements
+    instanceRequirements_acceleratorCount,
+    instanceRequirements_acceleratorManufacturers,
+    instanceRequirements_acceleratorNames,
+    instanceRequirements_acceleratorTotalMemoryMiB,
+    instanceRequirements_acceleratorTypes,
+    instanceRequirements_allowedInstanceTypes,
+    instanceRequirements_bareMetal,
+    instanceRequirements_baselineEbsBandwidthMbps,
+    instanceRequirements_burstablePerformance,
+    instanceRequirements_cpuManufacturers,
+    instanceRequirements_excludedInstanceTypes,
+    instanceRequirements_instanceGenerations,
+    instanceRequirements_localStorage,
+    instanceRequirements_localStorageTypes,
+    instanceRequirements_memoryGiBPerVCpu,
+    instanceRequirements_memoryMiB,
+    instanceRequirements_networkBandwidthGbps,
+    instanceRequirements_networkInterfaceCount,
+    instanceRequirements_onDemandMaxPricePercentageOverLowestPrice,
+    instanceRequirements_requireHibernateSupport,
+    instanceRequirements_spotMaxPricePercentageOverLowestPrice,
+    instanceRequirements_totalLocalStorageGB,
+    instanceRequirements_vCpuCount,
+
+    -- ** InstanceRequirementsRequest
+    instanceRequirementsRequest_acceleratorCount,
+    instanceRequirementsRequest_acceleratorManufacturers,
+    instanceRequirementsRequest_acceleratorNames,
+    instanceRequirementsRequest_acceleratorTotalMemoryMiB,
+    instanceRequirementsRequest_acceleratorTypes,
+    instanceRequirementsRequest_allowedInstanceTypes,
+    instanceRequirementsRequest_bareMetal,
+    instanceRequirementsRequest_baselineEbsBandwidthMbps,
+    instanceRequirementsRequest_burstablePerformance,
+    instanceRequirementsRequest_cpuManufacturers,
+    instanceRequirementsRequest_excludedInstanceTypes,
+    instanceRequirementsRequest_instanceGenerations,
+    instanceRequirementsRequest_localStorage,
+    instanceRequirementsRequest_localStorageTypes,
+    instanceRequirementsRequest_memoryGiBPerVCpu,
+    instanceRequirementsRequest_networkBandwidthGbps,
+    instanceRequirementsRequest_networkInterfaceCount,
+    instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice,
+    instanceRequirementsRequest_requireHibernateSupport,
+    instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice,
+    instanceRequirementsRequest_totalLocalStorageGB,
+    instanceRequirementsRequest_vCpuCount,
+    instanceRequirementsRequest_memoryMiB,
+
+    -- ** InstanceRequirementsWithMetadataRequest
+    instanceRequirementsWithMetadataRequest_architectureTypes,
+    instanceRequirementsWithMetadataRequest_instanceRequirements,
+    instanceRequirementsWithMetadataRequest_virtualizationTypes,
+
+    -- ** InstanceSpecification
+    instanceSpecification_excludeBootVolume,
+    instanceSpecification_excludeDataVolumeIds,
+    instanceSpecification_instanceId,
+
+    -- ** InstanceState
+    instanceState_name,
+    instanceState_code,
+
+    -- ** InstanceStateChange
+    instanceStateChange_currentState,
+    instanceStateChange_instanceId,
+    instanceStateChange_previousState,
+
+    -- ** InstanceStatus
+    instanceStatus_availabilityZone,
+    instanceStatus_events,
+    instanceStatus_instanceId,
+    instanceStatus_instanceState,
+    instanceStatus_instanceStatus,
+    instanceStatus_outpostArn,
+    instanceStatus_systemStatus,
+
+    -- ** InstanceStatusDetails
+    instanceStatusDetails_impairedSince,
+    instanceStatusDetails_name,
+    instanceStatusDetails_status,
+
+    -- ** InstanceStatusEvent
+    instanceStatusEvent_code,
+    instanceStatusEvent_description,
+    instanceStatusEvent_instanceEventId,
+    instanceStatusEvent_notAfter,
+    instanceStatusEvent_notBefore,
+    instanceStatusEvent_notBeforeDeadline,
+
+    -- ** InstanceStatusSummary
+    instanceStatusSummary_details,
+    instanceStatusSummary_status,
+
+    -- ** InstanceStorageInfo
+    instanceStorageInfo_disks,
+    instanceStorageInfo_encryptionSupport,
+    instanceStorageInfo_nvmeSupport,
+    instanceStorageInfo_totalSizeInGB,
+
+    -- ** InstanceTagNotificationAttribute
+    instanceTagNotificationAttribute_includeAllTagsOfInstance,
+    instanceTagNotificationAttribute_instanceTagKeys,
+
+    -- ** InstanceTypeInfo
+    instanceTypeInfo_autoRecoverySupported,
+    instanceTypeInfo_bareMetal,
+    instanceTypeInfo_burstablePerformanceSupported,
+    instanceTypeInfo_currentGeneration,
+    instanceTypeInfo_dedicatedHostsSupported,
+    instanceTypeInfo_ebsInfo,
+    instanceTypeInfo_fpgaInfo,
+    instanceTypeInfo_freeTierEligible,
+    instanceTypeInfo_gpuInfo,
+    instanceTypeInfo_hibernationSupported,
+    instanceTypeInfo_hypervisor,
+    instanceTypeInfo_inferenceAcceleratorInfo,
+    instanceTypeInfo_instanceStorageInfo,
+    instanceTypeInfo_instanceStorageSupported,
+    instanceTypeInfo_instanceType,
+    instanceTypeInfo_memoryInfo,
+    instanceTypeInfo_networkInfo,
+    instanceTypeInfo_placementGroupInfo,
+    instanceTypeInfo_processorInfo,
+    instanceTypeInfo_supportedBootModes,
+    instanceTypeInfo_supportedRootDeviceTypes,
+    instanceTypeInfo_supportedUsageClasses,
+    instanceTypeInfo_supportedVirtualizationTypes,
+    instanceTypeInfo_vCpuInfo,
+
+    -- ** InstanceTypeInfoFromInstanceRequirements
+    instanceTypeInfoFromInstanceRequirements_instanceType,
+
+    -- ** InstanceTypeOffering
+    instanceTypeOffering_instanceType,
+    instanceTypeOffering_location,
+    instanceTypeOffering_locationType,
+
+    -- ** InstanceUsage
+    instanceUsage_accountId,
+    instanceUsage_usedInstanceCount,
+
+    -- ** IntegrateServices
+    integrateServices_athenaIntegrations,
+
+    -- ** InternetGateway
+    internetGateway_attachments,
+    internetGateway_ownerId,
+    internetGateway_tags,
+    internetGateway_internetGatewayId,
+
+    -- ** InternetGatewayAttachment
+    internetGatewayAttachment_state,
+    internetGatewayAttachment_vpcId,
+
+    -- ** IpPermission
+    ipPermission_fromPort,
+    ipPermission_ipRanges,
+    ipPermission_ipv6Ranges,
+    ipPermission_prefixListIds,
+    ipPermission_toPort,
+    ipPermission_userIdGroupPairs,
+    ipPermission_ipProtocol,
+
+    -- ** IpRange
+    ipRange_description,
+    ipRange_cidrIp,
+
+    -- ** Ipam
+    ipam_description,
+    ipam_ipamArn,
+    ipam_ipamId,
+    ipam_ipamRegion,
+    ipam_operatingRegions,
+    ipam_ownerId,
+    ipam_privateDefaultScopeId,
+    ipam_publicDefaultScopeId,
+    ipam_scopeCount,
+    ipam_state,
+    ipam_tags,
+
+    -- ** IpamAddressHistoryRecord
+    ipamAddressHistoryRecord_resourceCidr,
+    ipamAddressHistoryRecord_resourceComplianceStatus,
+    ipamAddressHistoryRecord_resourceId,
+    ipamAddressHistoryRecord_resourceName,
+    ipamAddressHistoryRecord_resourceOverlapStatus,
+    ipamAddressHistoryRecord_resourceOwnerId,
+    ipamAddressHistoryRecord_resourceRegion,
+    ipamAddressHistoryRecord_resourceType,
+    ipamAddressHistoryRecord_sampledEndTime,
+    ipamAddressHistoryRecord_sampledStartTime,
+    ipamAddressHistoryRecord_vpcId,
+
+    -- ** IpamCidrAuthorizationContext
+    ipamCidrAuthorizationContext_message,
+    ipamCidrAuthorizationContext_signature,
+
+    -- ** IpamOperatingRegion
+    ipamOperatingRegion_regionName,
+
+    -- ** IpamPool
+    ipamPool_addressFamily,
+    ipamPool_allocationDefaultNetmaskLength,
+    ipamPool_allocationMaxNetmaskLength,
+    ipamPool_allocationMinNetmaskLength,
+    ipamPool_allocationResourceTags,
+    ipamPool_autoImport,
+    ipamPool_awsService,
+    ipamPool_description,
+    ipamPool_ipamArn,
+    ipamPool_ipamPoolArn,
+    ipamPool_ipamPoolId,
+    ipamPool_ipamRegion,
+    ipamPool_ipamScopeArn,
+    ipamPool_ipamScopeType,
+    ipamPool_locale,
+    ipamPool_ownerId,
+    ipamPool_poolDepth,
+    ipamPool_publiclyAdvertisable,
+    ipamPool_sourceIpamPoolId,
+    ipamPool_state,
+    ipamPool_stateMessage,
+    ipamPool_tags,
+
+    -- ** IpamPoolAllocation
+    ipamPoolAllocation_cidr,
+    ipamPoolAllocation_description,
+    ipamPoolAllocation_ipamPoolAllocationId,
+    ipamPoolAllocation_resourceId,
+    ipamPoolAllocation_resourceOwner,
+    ipamPoolAllocation_resourceRegion,
+    ipamPoolAllocation_resourceType,
+
+    -- ** IpamPoolCidr
+    ipamPoolCidr_cidr,
+    ipamPoolCidr_failureReason,
+    ipamPoolCidr_state,
+
+    -- ** IpamPoolCidrFailureReason
+    ipamPoolCidrFailureReason_code,
+    ipamPoolCidrFailureReason_message,
+
+    -- ** IpamResourceCidr
+    ipamResourceCidr_complianceStatus,
+    ipamResourceCidr_ipUsage,
+    ipamResourceCidr_ipamId,
+    ipamResourceCidr_ipamPoolId,
+    ipamResourceCidr_ipamScopeId,
+    ipamResourceCidr_managementState,
+    ipamResourceCidr_overlapStatus,
+    ipamResourceCidr_resourceCidr,
+    ipamResourceCidr_resourceId,
+    ipamResourceCidr_resourceName,
+    ipamResourceCidr_resourceOwnerId,
+    ipamResourceCidr_resourceRegion,
+    ipamResourceCidr_resourceTags,
+    ipamResourceCidr_resourceType,
+    ipamResourceCidr_vpcId,
+
+    -- ** IpamResourceTag
+    ipamResourceTag_key,
+    ipamResourceTag_value,
+
+    -- ** IpamScope
+    ipamScope_description,
+    ipamScope_ipamArn,
+    ipamScope_ipamRegion,
+    ipamScope_ipamScopeArn,
+    ipamScope_ipamScopeId,
+    ipamScope_ipamScopeType,
+    ipamScope_isDefault,
+    ipamScope_ownerId,
+    ipamScope_poolCount,
+    ipamScope_state,
+    ipamScope_tags,
+
+    -- ** Ipv4PrefixSpecification
+    ipv4PrefixSpecification_ipv4Prefix,
+
+    -- ** Ipv4PrefixSpecificationRequest
+    ipv4PrefixSpecificationRequest_ipv4Prefix,
+
+    -- ** Ipv4PrefixSpecificationResponse
+    ipv4PrefixSpecificationResponse_ipv4Prefix,
+
+    -- ** Ipv6CidrAssociation
+    ipv6CidrAssociation_associatedResource,
+    ipv6CidrAssociation_ipv6Cidr,
+
+    -- ** Ipv6CidrBlock
+    ipv6CidrBlock_ipv6CidrBlock,
+
+    -- ** Ipv6Pool
+    ipv6Pool_description,
+    ipv6Pool_poolCidrBlocks,
+    ipv6Pool_poolId,
+    ipv6Pool_tags,
+
+    -- ** Ipv6PrefixSpecification
+    ipv6PrefixSpecification_ipv6Prefix,
+
+    -- ** Ipv6PrefixSpecificationRequest
+    ipv6PrefixSpecificationRequest_ipv6Prefix,
+
+    -- ** Ipv6PrefixSpecificationResponse
+    ipv6PrefixSpecificationResponse_ipv6Prefix,
+
+    -- ** Ipv6Range
+    ipv6Range_cidrIpv6,
+    ipv6Range_description,
+
+    -- ** KeyPairInfo
+    keyPairInfo_createTime,
+    keyPairInfo_keyFingerprint,
+    keyPairInfo_keyName,
+    keyPairInfo_keyPairId,
+    keyPairInfo_keyType,
+    keyPairInfo_publicKey,
+    keyPairInfo_tags,
+
+    -- ** LastError
+    lastError_code,
+    lastError_message,
+
+    -- ** LaunchPermission
+    launchPermission_group,
+    launchPermission_organizationArn,
+    launchPermission_organizationalUnitArn,
+    launchPermission_userId,
+
+    -- ** LaunchPermissionModifications
+    launchPermissionModifications_add,
+    launchPermissionModifications_remove,
+
+    -- ** LaunchSpecification
+    launchSpecification_addressingType,
+    launchSpecification_blockDeviceMappings,
+    launchSpecification_ebsOptimized,
+    launchSpecification_iamInstanceProfile,
+    launchSpecification_imageId,
+    launchSpecification_instanceType,
+    launchSpecification_kernelId,
+    launchSpecification_keyName,
+    launchSpecification_monitoring,
+    launchSpecification_networkInterfaces,
+    launchSpecification_placement,
+    launchSpecification_ramdiskId,
+    launchSpecification_securityGroups,
+    launchSpecification_subnetId,
+    launchSpecification_userData,
+
+    -- ** LaunchTemplate
+    launchTemplate_createTime,
+    launchTemplate_createdBy,
+    launchTemplate_defaultVersionNumber,
+    launchTemplate_latestVersionNumber,
+    launchTemplate_launchTemplateId,
+    launchTemplate_launchTemplateName,
+    launchTemplate_tags,
+
+    -- ** LaunchTemplateAndOverridesResponse
+    launchTemplateAndOverridesResponse_launchTemplateSpecification,
+    launchTemplateAndOverridesResponse_overrides,
+
+    -- ** LaunchTemplateBlockDeviceMapping
+    launchTemplateBlockDeviceMapping_deviceName,
+    launchTemplateBlockDeviceMapping_ebs,
+    launchTemplateBlockDeviceMapping_noDevice,
+    launchTemplateBlockDeviceMapping_virtualName,
+
+    -- ** LaunchTemplateBlockDeviceMappingRequest
+    launchTemplateBlockDeviceMappingRequest_deviceName,
+    launchTemplateBlockDeviceMappingRequest_ebs,
+    launchTemplateBlockDeviceMappingRequest_noDevice,
+    launchTemplateBlockDeviceMappingRequest_virtualName,
+
+    -- ** LaunchTemplateCapacityReservationSpecificationRequest
+    launchTemplateCapacityReservationSpecificationRequest_capacityReservationPreference,
+    launchTemplateCapacityReservationSpecificationRequest_capacityReservationTarget,
+
+    -- ** LaunchTemplateCapacityReservationSpecificationResponse
+    launchTemplateCapacityReservationSpecificationResponse_capacityReservationPreference,
+    launchTemplateCapacityReservationSpecificationResponse_capacityReservationTarget,
+
+    -- ** LaunchTemplateConfig
+    launchTemplateConfig_launchTemplateSpecification,
+    launchTemplateConfig_overrides,
+
+    -- ** LaunchTemplateCpuOptions
+    launchTemplateCpuOptions_coreCount,
+    launchTemplateCpuOptions_threadsPerCore,
+
+    -- ** LaunchTemplateCpuOptionsRequest
+    launchTemplateCpuOptionsRequest_coreCount,
+    launchTemplateCpuOptionsRequest_threadsPerCore,
+
+    -- ** LaunchTemplateEbsBlockDevice
+    launchTemplateEbsBlockDevice_deleteOnTermination,
+    launchTemplateEbsBlockDevice_encrypted,
+    launchTemplateEbsBlockDevice_iops,
+    launchTemplateEbsBlockDevice_kmsKeyId,
+    launchTemplateEbsBlockDevice_snapshotId,
+    launchTemplateEbsBlockDevice_throughput,
+    launchTemplateEbsBlockDevice_volumeSize,
+    launchTemplateEbsBlockDevice_volumeType,
+
+    -- ** LaunchTemplateEbsBlockDeviceRequest
+    launchTemplateEbsBlockDeviceRequest_deleteOnTermination,
+    launchTemplateEbsBlockDeviceRequest_encrypted,
+    launchTemplateEbsBlockDeviceRequest_iops,
+    launchTemplateEbsBlockDeviceRequest_kmsKeyId,
+    launchTemplateEbsBlockDeviceRequest_snapshotId,
+    launchTemplateEbsBlockDeviceRequest_throughput,
+    launchTemplateEbsBlockDeviceRequest_volumeSize,
+    launchTemplateEbsBlockDeviceRequest_volumeType,
+
+    -- ** LaunchTemplateElasticInferenceAccelerator
+    launchTemplateElasticInferenceAccelerator_count,
+    launchTemplateElasticInferenceAccelerator_type,
+
+    -- ** LaunchTemplateElasticInferenceAcceleratorResponse
+    launchTemplateElasticInferenceAcceleratorResponse_count,
+    launchTemplateElasticInferenceAcceleratorResponse_type,
+
+    -- ** LaunchTemplateEnclaveOptions
+    launchTemplateEnclaveOptions_enabled,
+
+    -- ** LaunchTemplateEnclaveOptionsRequest
+    launchTemplateEnclaveOptionsRequest_enabled,
+
+    -- ** LaunchTemplateHibernationOptions
+    launchTemplateHibernationOptions_configured,
+
+    -- ** LaunchTemplateHibernationOptionsRequest
+    launchTemplateHibernationOptionsRequest_configured,
+
+    -- ** LaunchTemplateIamInstanceProfileSpecification
+    launchTemplateIamInstanceProfileSpecification_arn,
+    launchTemplateIamInstanceProfileSpecification_name,
+
+    -- ** LaunchTemplateIamInstanceProfileSpecificationRequest
+    launchTemplateIamInstanceProfileSpecificationRequest_arn,
+    launchTemplateIamInstanceProfileSpecificationRequest_name,
+
+    -- ** LaunchTemplateInstanceMaintenanceOptions
+    launchTemplateInstanceMaintenanceOptions_autoRecovery,
+
+    -- ** LaunchTemplateInstanceMaintenanceOptionsRequest
+    launchTemplateInstanceMaintenanceOptionsRequest_autoRecovery,
+
+    -- ** LaunchTemplateInstanceMarketOptions
+    launchTemplateInstanceMarketOptions_marketType,
+    launchTemplateInstanceMarketOptions_spotOptions,
+
+    -- ** LaunchTemplateInstanceMarketOptionsRequest
+    launchTemplateInstanceMarketOptionsRequest_marketType,
+    launchTemplateInstanceMarketOptionsRequest_spotOptions,
+
+    -- ** LaunchTemplateInstanceMetadataOptions
+    launchTemplateInstanceMetadataOptions_httpEndpoint,
+    launchTemplateInstanceMetadataOptions_httpProtocolIpv6,
+    launchTemplateInstanceMetadataOptions_httpPutResponseHopLimit,
+    launchTemplateInstanceMetadataOptions_httpTokens,
+    launchTemplateInstanceMetadataOptions_instanceMetadataTags,
+    launchTemplateInstanceMetadataOptions_state,
+
+    -- ** LaunchTemplateInstanceMetadataOptionsRequest
+    launchTemplateInstanceMetadataOptionsRequest_httpEndpoint,
+    launchTemplateInstanceMetadataOptionsRequest_httpProtocolIpv6,
+    launchTemplateInstanceMetadataOptionsRequest_httpPutResponseHopLimit,
+    launchTemplateInstanceMetadataOptionsRequest_httpTokens,
+    launchTemplateInstanceMetadataOptionsRequest_instanceMetadataTags,
+
+    -- ** LaunchTemplateInstanceNetworkInterfaceSpecification
+    launchTemplateInstanceNetworkInterfaceSpecification_associateCarrierIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecification_associatePublicIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecification_deleteOnTermination,
+    launchTemplateInstanceNetworkInterfaceSpecification_description,
+    launchTemplateInstanceNetworkInterfaceSpecification_deviceIndex,
+    launchTemplateInstanceNetworkInterfaceSpecification_groups,
+    launchTemplateInstanceNetworkInterfaceSpecification_interfaceType,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv4PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv4Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6AddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6Addresses,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecification_networkCardIndex,
+    launchTemplateInstanceNetworkInterfaceSpecification_networkInterfaceId,
+    launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddresses,
+    launchTemplateInstanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_subnetId,
+
+    -- ** LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_associateCarrierIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_associatePublicIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_deleteOnTermination,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_description,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_deviceIndex,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_groups,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_interfaceType,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6AddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Addresses,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkCardIndex,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkInterfaceId,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddresses,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_secondaryPrivateIpAddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_subnetId,
+
+    -- ** LaunchTemplateLicenseConfiguration
+    launchTemplateLicenseConfiguration_licenseConfigurationArn,
+
+    -- ** LaunchTemplateLicenseConfigurationRequest
+    launchTemplateLicenseConfigurationRequest_licenseConfigurationArn,
+
+    -- ** LaunchTemplateOverrides
+    launchTemplateOverrides_availabilityZone,
+    launchTemplateOverrides_instanceRequirements,
+    launchTemplateOverrides_instanceType,
+    launchTemplateOverrides_priority,
+    launchTemplateOverrides_spotPrice,
+    launchTemplateOverrides_subnetId,
+    launchTemplateOverrides_weightedCapacity,
+
+    -- ** LaunchTemplatePlacement
+    launchTemplatePlacement_affinity,
+    launchTemplatePlacement_availabilityZone,
+    launchTemplatePlacement_groupId,
+    launchTemplatePlacement_groupName,
+    launchTemplatePlacement_hostId,
+    launchTemplatePlacement_hostResourceGroupArn,
+    launchTemplatePlacement_partitionNumber,
+    launchTemplatePlacement_spreadDomain,
+    launchTemplatePlacement_tenancy,
+
+    -- ** LaunchTemplatePlacementRequest
+    launchTemplatePlacementRequest_affinity,
+    launchTemplatePlacementRequest_availabilityZone,
+    launchTemplatePlacementRequest_groupId,
+    launchTemplatePlacementRequest_groupName,
+    launchTemplatePlacementRequest_hostId,
+    launchTemplatePlacementRequest_hostResourceGroupArn,
+    launchTemplatePlacementRequest_partitionNumber,
+    launchTemplatePlacementRequest_spreadDomain,
+    launchTemplatePlacementRequest_tenancy,
+
+    -- ** LaunchTemplatePrivateDnsNameOptions
+    launchTemplatePrivateDnsNameOptions_enableResourceNameDnsAAAARecord,
+    launchTemplatePrivateDnsNameOptions_enableResourceNameDnsARecord,
+    launchTemplatePrivateDnsNameOptions_hostnameType,
+
+    -- ** LaunchTemplatePrivateDnsNameOptionsRequest
+    launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord,
+    launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsARecord,
+    launchTemplatePrivateDnsNameOptionsRequest_hostnameType,
+
+    -- ** LaunchTemplateSpecification
+    launchTemplateSpecification_launchTemplateId,
+    launchTemplateSpecification_launchTemplateName,
+    launchTemplateSpecification_version,
+
+    -- ** LaunchTemplateSpotMarketOptions
+    launchTemplateSpotMarketOptions_blockDurationMinutes,
+    launchTemplateSpotMarketOptions_instanceInterruptionBehavior,
+    launchTemplateSpotMarketOptions_maxPrice,
+    launchTemplateSpotMarketOptions_spotInstanceType,
+    launchTemplateSpotMarketOptions_validUntil,
+
+    -- ** LaunchTemplateSpotMarketOptionsRequest
+    launchTemplateSpotMarketOptionsRequest_blockDurationMinutes,
+    launchTemplateSpotMarketOptionsRequest_instanceInterruptionBehavior,
+    launchTemplateSpotMarketOptionsRequest_maxPrice,
+    launchTemplateSpotMarketOptionsRequest_spotInstanceType,
+    launchTemplateSpotMarketOptionsRequest_validUntil,
+
+    -- ** LaunchTemplateTagSpecification
+    launchTemplateTagSpecification_resourceType,
+    launchTemplateTagSpecification_tags,
+
+    -- ** LaunchTemplateTagSpecificationRequest
+    launchTemplateTagSpecificationRequest_resourceType,
+    launchTemplateTagSpecificationRequest_tags,
+
+    -- ** LaunchTemplateVersion
+    launchTemplateVersion_createTime,
+    launchTemplateVersion_createdBy,
+    launchTemplateVersion_defaultVersion,
+    launchTemplateVersion_launchTemplateData,
+    launchTemplateVersion_launchTemplateId,
+    launchTemplateVersion_launchTemplateName,
+    launchTemplateVersion_versionDescription,
+    launchTemplateVersion_versionNumber,
+
+    -- ** LaunchTemplatesMonitoring
+    launchTemplatesMonitoring_enabled,
+
+    -- ** LaunchTemplatesMonitoringRequest
+    launchTemplatesMonitoringRequest_enabled,
+
+    -- ** LicenseConfiguration
+    licenseConfiguration_licenseConfigurationArn,
+
+    -- ** LicenseConfigurationRequest
+    licenseConfigurationRequest_licenseConfigurationArn,
+
+    -- ** LoadBalancersConfig
+    loadBalancersConfig_classicLoadBalancersConfig,
+    loadBalancersConfig_targetGroupsConfig,
+
+    -- ** LoadPermission
+    loadPermission_group,
+    loadPermission_userId,
+
+    -- ** LoadPermissionModifications
+    loadPermissionModifications_add,
+    loadPermissionModifications_remove,
+
+    -- ** LoadPermissionRequest
+    loadPermissionRequest_group,
+    loadPermissionRequest_userId,
+
+    -- ** LocalGateway
+    localGateway_localGatewayId,
+    localGateway_outpostArn,
+    localGateway_ownerId,
+    localGateway_state,
+    localGateway_tags,
+
+    -- ** LocalGatewayRoute
+    localGatewayRoute_coipPoolId,
+    localGatewayRoute_destinationCidrBlock,
+    localGatewayRoute_localGatewayRouteTableArn,
+    localGatewayRoute_localGatewayRouteTableId,
+    localGatewayRoute_localGatewayVirtualInterfaceGroupId,
+    localGatewayRoute_networkInterfaceId,
+    localGatewayRoute_ownerId,
+    localGatewayRoute_state,
+    localGatewayRoute_subnetId,
+    localGatewayRoute_type,
+
+    -- ** LocalGatewayRouteTable
+    localGatewayRouteTable_localGatewayId,
+    localGatewayRouteTable_localGatewayRouteTableArn,
+    localGatewayRouteTable_localGatewayRouteTableId,
+    localGatewayRouteTable_mode,
+    localGatewayRouteTable_outpostArn,
+    localGatewayRouteTable_ownerId,
+    localGatewayRouteTable_state,
+    localGatewayRouteTable_stateReason,
+    localGatewayRouteTable_tags,
+
+    -- ** LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableArn,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_ownerId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_state,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_tags,
+
+    -- ** LocalGatewayRouteTableVpcAssociation
+    localGatewayRouteTableVpcAssociation_localGatewayId,
+    localGatewayRouteTableVpcAssociation_localGatewayRouteTableArn,
+    localGatewayRouteTableVpcAssociation_localGatewayRouteTableId,
+    localGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId,
+    localGatewayRouteTableVpcAssociation_ownerId,
+    localGatewayRouteTableVpcAssociation_state,
+    localGatewayRouteTableVpcAssociation_tags,
+    localGatewayRouteTableVpcAssociation_vpcId,
+
+    -- ** LocalGatewayVirtualInterface
+    localGatewayVirtualInterface_localAddress,
+    localGatewayVirtualInterface_localBgpAsn,
+    localGatewayVirtualInterface_localGatewayId,
+    localGatewayVirtualInterface_localGatewayVirtualInterfaceId,
+    localGatewayVirtualInterface_ownerId,
+    localGatewayVirtualInterface_peerAddress,
+    localGatewayVirtualInterface_peerBgpAsn,
+    localGatewayVirtualInterface_tags,
+    localGatewayVirtualInterface_vlan,
+
+    -- ** LocalGatewayVirtualInterfaceGroup
+    localGatewayVirtualInterfaceGroup_localGatewayId,
+    localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceGroupId,
+    localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceIds,
+    localGatewayVirtualInterfaceGroup_ownerId,
+    localGatewayVirtualInterfaceGroup_tags,
+
+    -- ** ManagedPrefixList
+    managedPrefixList_addressFamily,
+    managedPrefixList_maxEntries,
+    managedPrefixList_ownerId,
+    managedPrefixList_prefixListArn,
+    managedPrefixList_prefixListId,
+    managedPrefixList_prefixListName,
+    managedPrefixList_state,
+    managedPrefixList_stateMessage,
+    managedPrefixList_tags,
+    managedPrefixList_version,
+
+    -- ** MemoryGiBPerVCpu
+    memoryGiBPerVCpu_max,
+    memoryGiBPerVCpu_min,
+
+    -- ** MemoryGiBPerVCpuRequest
+    memoryGiBPerVCpuRequest_max,
+    memoryGiBPerVCpuRequest_min,
+
+    -- ** MemoryInfo
+    memoryInfo_sizeInMiB,
+
+    -- ** MemoryMiB
+    memoryMiB_max,
+    memoryMiB_min,
+
+    -- ** MemoryMiBRequest
+    memoryMiBRequest_max,
+    memoryMiBRequest_min,
+
+    -- ** MetricPoint
+    metricPoint_endDate,
+    metricPoint_startDate,
+    metricPoint_status,
+    metricPoint_value,
+
+    -- ** ModifyTransitGatewayOptions
+    modifyTransitGatewayOptions_addTransitGatewayCidrBlocks,
+    modifyTransitGatewayOptions_amazonSideAsn,
+    modifyTransitGatewayOptions_associationDefaultRouteTableId,
+    modifyTransitGatewayOptions_autoAcceptSharedAttachments,
+    modifyTransitGatewayOptions_defaultRouteTableAssociation,
+    modifyTransitGatewayOptions_defaultRouteTablePropagation,
+    modifyTransitGatewayOptions_dnsSupport,
+    modifyTransitGatewayOptions_propagationDefaultRouteTableId,
+    modifyTransitGatewayOptions_removeTransitGatewayCidrBlocks,
+    modifyTransitGatewayOptions_vpnEcmpSupport,
+
+    -- ** ModifyTransitGatewayVpcAttachmentRequestOptions
+    modifyTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport,
+    modifyTransitGatewayVpcAttachmentRequestOptions_dnsSupport,
+    modifyTransitGatewayVpcAttachmentRequestOptions_ipv6Support,
+
+    -- ** ModifyVerifiedAccessEndpointEniOptions
+    modifyVerifiedAccessEndpointEniOptions_port,
+    modifyVerifiedAccessEndpointEniOptions_protocol,
+
+    -- ** ModifyVerifiedAccessEndpointLoadBalancerOptions
+    modifyVerifiedAccessEndpointLoadBalancerOptions_port,
+    modifyVerifiedAccessEndpointLoadBalancerOptions_protocol,
+    modifyVerifiedAccessEndpointLoadBalancerOptions_subnetIds,
+
+    -- ** ModifyVerifiedAccessTrustProviderOidcOptions
+    modifyVerifiedAccessTrustProviderOidcOptions_scope,
+
+    -- ** ModifyVpnTunnelOptionsSpecification
+    modifyVpnTunnelOptionsSpecification_dPDTimeoutAction,
+    modifyVpnTunnelOptionsSpecification_dPDTimeoutSeconds,
+    modifyVpnTunnelOptionsSpecification_iKEVersions,
+    modifyVpnTunnelOptionsSpecification_logOptions,
+    modifyVpnTunnelOptionsSpecification_phase1DHGroupNumbers,
+    modifyVpnTunnelOptionsSpecification_phase1EncryptionAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase1IntegrityAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase1LifetimeSeconds,
+    modifyVpnTunnelOptionsSpecification_phase2DHGroupNumbers,
+    modifyVpnTunnelOptionsSpecification_phase2EncryptionAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase2IntegrityAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase2LifetimeSeconds,
+    modifyVpnTunnelOptionsSpecification_preSharedKey,
+    modifyVpnTunnelOptionsSpecification_rekeyFuzzPercentage,
+    modifyVpnTunnelOptionsSpecification_rekeyMarginTimeSeconds,
+    modifyVpnTunnelOptionsSpecification_replayWindowSize,
+    modifyVpnTunnelOptionsSpecification_startupAction,
+    modifyVpnTunnelOptionsSpecification_tunnelInsideCidr,
+    modifyVpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr,
+
+    -- ** Monitoring
+    monitoring_state,
+
+    -- ** MovingAddressStatus
+    movingAddressStatus_moveStatus,
+    movingAddressStatus_publicIp,
+
+    -- ** NatGateway
+    natGateway_connectivityType,
+    natGateway_createTime,
+    natGateway_deleteTime,
+    natGateway_failureCode,
+    natGateway_failureMessage,
+    natGateway_natGatewayAddresses,
+    natGateway_natGatewayId,
+    natGateway_provisionedBandwidth,
+    natGateway_state,
+    natGateway_subnetId,
+    natGateway_tags,
+    natGateway_vpcId,
+
+    -- ** NatGatewayAddress
+    natGatewayAddress_allocationId,
+    natGatewayAddress_networkInterfaceId,
+    natGatewayAddress_privateIp,
+    natGatewayAddress_publicIp,
+
+    -- ** NetworkAcl
+    networkAcl_associations,
+    networkAcl_entries,
+    networkAcl_isDefault,
+    networkAcl_networkAclId,
+    networkAcl_ownerId,
+    networkAcl_tags,
+    networkAcl_vpcId,
+
+    -- ** NetworkAclAssociation
+    networkAclAssociation_networkAclAssociationId,
+    networkAclAssociation_networkAclId,
+    networkAclAssociation_subnetId,
+
+    -- ** NetworkAclEntry
+    networkAclEntry_cidrBlock,
+    networkAclEntry_egress,
+    networkAclEntry_icmpTypeCode,
+    networkAclEntry_ipv6CidrBlock,
+    networkAclEntry_portRange,
+    networkAclEntry_protocol,
+    networkAclEntry_ruleAction,
+    networkAclEntry_ruleNumber,
+
+    -- ** NetworkBandwidthGbps
+    networkBandwidthGbps_max,
+    networkBandwidthGbps_min,
+
+    -- ** NetworkBandwidthGbpsRequest
+    networkBandwidthGbpsRequest_max,
+    networkBandwidthGbpsRequest_min,
+
+    -- ** NetworkCardInfo
+    networkCardInfo_maximumNetworkInterfaces,
+    networkCardInfo_networkCardIndex,
+    networkCardInfo_networkPerformance,
+
+    -- ** NetworkInfo
+    networkInfo_defaultNetworkCardIndex,
+    networkInfo_efaInfo,
+    networkInfo_efaSupported,
+    networkInfo_enaSrdSupported,
+    networkInfo_enaSupport,
+    networkInfo_encryptionInTransitSupported,
+    networkInfo_ipv4AddressesPerInterface,
+    networkInfo_ipv6AddressesPerInterface,
+    networkInfo_ipv6Supported,
+    networkInfo_maximumNetworkCards,
+    networkInfo_maximumNetworkInterfaces,
+    networkInfo_networkCards,
+    networkInfo_networkPerformance,
+
+    -- ** NetworkInsightsAccessScope
+    networkInsightsAccessScope_createdDate,
+    networkInsightsAccessScope_networkInsightsAccessScopeArn,
+    networkInsightsAccessScope_networkInsightsAccessScopeId,
+    networkInsightsAccessScope_tags,
+    networkInsightsAccessScope_updatedDate,
+
+    -- ** NetworkInsightsAccessScopeAnalysis
+    networkInsightsAccessScopeAnalysis_analyzedEniCount,
+    networkInsightsAccessScopeAnalysis_endDate,
+    networkInsightsAccessScopeAnalysis_findingsFound,
+    networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisArn,
+    networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId,
+    networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId,
+    networkInsightsAccessScopeAnalysis_startDate,
+    networkInsightsAccessScopeAnalysis_status,
+    networkInsightsAccessScopeAnalysis_statusMessage,
+    networkInsightsAccessScopeAnalysis_tags,
+    networkInsightsAccessScopeAnalysis_warningMessage,
+
+    -- ** NetworkInsightsAccessScopeContent
+    networkInsightsAccessScopeContent_excludePaths,
+    networkInsightsAccessScopeContent_matchPaths,
+    networkInsightsAccessScopeContent_networkInsightsAccessScopeId,
+
+    -- ** NetworkInsightsAnalysis
+    networkInsightsAnalysis_additionalAccounts,
+    networkInsightsAnalysis_alternatePathHints,
+    networkInsightsAnalysis_explanations,
+    networkInsightsAnalysis_filterInArns,
+    networkInsightsAnalysis_forwardPathComponents,
+    networkInsightsAnalysis_networkInsightsAnalysisArn,
+    networkInsightsAnalysis_networkInsightsAnalysisId,
+    networkInsightsAnalysis_networkInsightsPathId,
+    networkInsightsAnalysis_networkPathFound,
+    networkInsightsAnalysis_returnPathComponents,
+    networkInsightsAnalysis_startDate,
+    networkInsightsAnalysis_status,
+    networkInsightsAnalysis_statusMessage,
+    networkInsightsAnalysis_suggestedAccounts,
+    networkInsightsAnalysis_tags,
+    networkInsightsAnalysis_warningMessage,
+
+    -- ** NetworkInsightsPath
+    networkInsightsPath_createdDate,
+    networkInsightsPath_destination,
+    networkInsightsPath_destinationArn,
+    networkInsightsPath_destinationIp,
+    networkInsightsPath_destinationPort,
+    networkInsightsPath_networkInsightsPathArn,
+    networkInsightsPath_networkInsightsPathId,
+    networkInsightsPath_protocol,
+    networkInsightsPath_source,
+    networkInsightsPath_sourceArn,
+    networkInsightsPath_sourceIp,
+    networkInsightsPath_tags,
+
+    -- ** NetworkInterface
+    networkInterface_association,
+    networkInterface_attachment,
+    networkInterface_availabilityZone,
+    networkInterface_denyAllIgwTraffic,
+    networkInterface_description,
+    networkInterface_groups,
+    networkInterface_interfaceType,
+    networkInterface_ipv4Prefixes,
+    networkInterface_ipv6Address,
+    networkInterface_ipv6Addresses,
+    networkInterface_ipv6Native,
+    networkInterface_ipv6Prefixes,
+    networkInterface_macAddress,
+    networkInterface_networkInterfaceId,
+    networkInterface_outpostArn,
+    networkInterface_ownerId,
+    networkInterface_privateDnsName,
+    networkInterface_privateIpAddress,
+    networkInterface_privateIpAddresses,
+    networkInterface_requesterId,
+    networkInterface_requesterManaged,
+    networkInterface_sourceDestCheck,
+    networkInterface_status,
+    networkInterface_subnetId,
+    networkInterface_tagSet,
+    networkInterface_vpcId,
+
+    -- ** NetworkInterfaceAssociation
+    networkInterfaceAssociation_allocationId,
+    networkInterfaceAssociation_associationId,
+    networkInterfaceAssociation_carrierIp,
+    networkInterfaceAssociation_customerOwnedIp,
+    networkInterfaceAssociation_ipOwnerId,
+    networkInterfaceAssociation_publicDnsName,
+    networkInterfaceAssociation_publicIp,
+
+    -- ** NetworkInterfaceAttachment
+    networkInterfaceAttachment_attachTime,
+    networkInterfaceAttachment_attachmentId,
+    networkInterfaceAttachment_deleteOnTermination,
+    networkInterfaceAttachment_deviceIndex,
+    networkInterfaceAttachment_enaSrdSpecification,
+    networkInterfaceAttachment_instanceId,
+    networkInterfaceAttachment_instanceOwnerId,
+    networkInterfaceAttachment_networkCardIndex,
+    networkInterfaceAttachment_status,
+
+    -- ** NetworkInterfaceAttachmentChanges
+    networkInterfaceAttachmentChanges_attachmentId,
+    networkInterfaceAttachmentChanges_deleteOnTermination,
+
+    -- ** NetworkInterfaceCount
+    networkInterfaceCount_max,
+    networkInterfaceCount_min,
+
+    -- ** NetworkInterfaceCountRequest
+    networkInterfaceCountRequest_max,
+    networkInterfaceCountRequest_min,
+
+    -- ** NetworkInterfaceIpv6Address
+    networkInterfaceIpv6Address_ipv6Address,
+
+    -- ** NetworkInterfacePermission
+    networkInterfacePermission_awsAccountId,
+    networkInterfacePermission_awsService,
+    networkInterfacePermission_networkInterfaceId,
+    networkInterfacePermission_networkInterfacePermissionId,
+    networkInterfacePermission_permission,
+    networkInterfacePermission_permissionState,
+
+    -- ** NetworkInterfacePermissionState
+    networkInterfacePermissionState_state,
+    networkInterfacePermissionState_statusMessage,
+
+    -- ** NetworkInterfacePrivateIpAddress
+    networkInterfacePrivateIpAddress_association,
+    networkInterfacePrivateIpAddress_primary,
+    networkInterfacePrivateIpAddress_privateDnsName,
+    networkInterfacePrivateIpAddress_privateIpAddress,
+
+    -- ** NewDhcpConfiguration
+    newDhcpConfiguration_key,
+    newDhcpConfiguration_values,
+
+    -- ** OidcOptions
+    oidcOptions_authorizationEndpoint,
+    oidcOptions_clientId,
+    oidcOptions_clientSecret,
+    oidcOptions_issuer,
+    oidcOptions_scope,
+    oidcOptions_tokenEndpoint,
+    oidcOptions_userInfoEndpoint,
+
+    -- ** OnDemandOptions
+    onDemandOptions_allocationStrategy,
+    onDemandOptions_capacityReservationOptions,
+    onDemandOptions_maxTotalPrice,
+    onDemandOptions_minTargetCapacity,
+    onDemandOptions_singleAvailabilityZone,
+    onDemandOptions_singleInstanceType,
+
+    -- ** OnDemandOptionsRequest
+    onDemandOptionsRequest_allocationStrategy,
+    onDemandOptionsRequest_capacityReservationOptions,
+    onDemandOptionsRequest_maxTotalPrice,
+    onDemandOptionsRequest_minTargetCapacity,
+    onDemandOptionsRequest_singleAvailabilityZone,
+    onDemandOptionsRequest_singleInstanceType,
+
+    -- ** PacketHeaderStatement
+    packetHeaderStatement_destinationAddresses,
+    packetHeaderStatement_destinationPorts,
+    packetHeaderStatement_destinationPrefixLists,
+    packetHeaderStatement_protocols,
+    packetHeaderStatement_sourceAddresses,
+    packetHeaderStatement_sourcePorts,
+    packetHeaderStatement_sourcePrefixLists,
+
+    -- ** PacketHeaderStatementRequest
+    packetHeaderStatementRequest_destinationAddresses,
+    packetHeaderStatementRequest_destinationPorts,
+    packetHeaderStatementRequest_destinationPrefixLists,
+    packetHeaderStatementRequest_protocols,
+    packetHeaderStatementRequest_sourceAddresses,
+    packetHeaderStatementRequest_sourcePorts,
+    packetHeaderStatementRequest_sourcePrefixLists,
+
+    -- ** PathComponent
+    pathComponent_aclRule,
+    pathComponent_additionalDetails,
+    pathComponent_attachedTo,
+    pathComponent_component,
+    pathComponent_destinationVpc,
+    pathComponent_elasticLoadBalancerListener,
+    pathComponent_explanations,
+    pathComponent_inboundHeader,
+    pathComponent_outboundHeader,
+    pathComponent_routeTableRoute,
+    pathComponent_securityGroupRule,
+    pathComponent_sequenceNumber,
+    pathComponent_sourceVpc,
+    pathComponent_subnet,
+    pathComponent_transitGateway,
+    pathComponent_transitGatewayRouteTableRoute,
+    pathComponent_vpc,
+
+    -- ** PathStatement
+    pathStatement_packetHeaderStatement,
+    pathStatement_resourceStatement,
+
+    -- ** PathStatementRequest
+    pathStatementRequest_packetHeaderStatement,
+    pathStatementRequest_resourceStatement,
+
+    -- ** PciId
+    pciId_deviceId,
+    pciId_subsystemId,
+    pciId_subsystemVendorId,
+    pciId_vendorId,
+
+    -- ** PeeringAttachmentStatus
+    peeringAttachmentStatus_code,
+    peeringAttachmentStatus_message,
+
+    -- ** PeeringConnectionOptions
+    peeringConnectionOptions_allowDnsResolutionFromRemoteVpc,
+    peeringConnectionOptions_allowEgressFromLocalClassicLinkToRemoteVpc,
+    peeringConnectionOptions_allowEgressFromLocalVpcToRemoteClassicLink,
+
+    -- ** PeeringConnectionOptionsRequest
+    peeringConnectionOptionsRequest_allowDnsResolutionFromRemoteVpc,
+    peeringConnectionOptionsRequest_allowEgressFromLocalClassicLinkToRemoteVpc,
+    peeringConnectionOptionsRequest_allowEgressFromLocalVpcToRemoteClassicLink,
+
+    -- ** PeeringTgwInfo
+    peeringTgwInfo_coreNetworkId,
+    peeringTgwInfo_ownerId,
+    peeringTgwInfo_region,
+    peeringTgwInfo_transitGatewayId,
+
+    -- ** Phase1DHGroupNumbersListValue
+    phase1DHGroupNumbersListValue_value,
+
+    -- ** Phase1DHGroupNumbersRequestListValue
+    phase1DHGroupNumbersRequestListValue_value,
+
+    -- ** Phase1EncryptionAlgorithmsListValue
+    phase1EncryptionAlgorithmsListValue_value,
+
+    -- ** Phase1EncryptionAlgorithmsRequestListValue
+    phase1EncryptionAlgorithmsRequestListValue_value,
+
+    -- ** Phase1IntegrityAlgorithmsListValue
+    phase1IntegrityAlgorithmsListValue_value,
+
+    -- ** Phase1IntegrityAlgorithmsRequestListValue
+    phase1IntegrityAlgorithmsRequestListValue_value,
+
+    -- ** Phase2DHGroupNumbersListValue
+    phase2DHGroupNumbersListValue_value,
+
+    -- ** Phase2DHGroupNumbersRequestListValue
+    phase2DHGroupNumbersRequestListValue_value,
+
+    -- ** Phase2EncryptionAlgorithmsListValue
+    phase2EncryptionAlgorithmsListValue_value,
+
+    -- ** Phase2EncryptionAlgorithmsRequestListValue
+    phase2EncryptionAlgorithmsRequestListValue_value,
+
+    -- ** Phase2IntegrityAlgorithmsListValue
+    phase2IntegrityAlgorithmsListValue_value,
+
+    -- ** Phase2IntegrityAlgorithmsRequestListValue
+    phase2IntegrityAlgorithmsRequestListValue_value,
+
+    -- ** Placement
+    placement_affinity,
+    placement_availabilityZone,
+    placement_groupId,
+    placement_groupName,
+    placement_hostId,
+    placement_hostResourceGroupArn,
+    placement_partitionNumber,
+    placement_spreadDomain,
+    placement_tenancy,
+
+    -- ** PlacementGroup
+    placementGroup_groupArn,
+    placementGroup_groupId,
+    placementGroup_groupName,
+    placementGroup_partitionCount,
+    placementGroup_spreadLevel,
+    placementGroup_state,
+    placementGroup_strategy,
+    placementGroup_tags,
+
+    -- ** PlacementGroupInfo
+    placementGroupInfo_supportedStrategies,
+
+    -- ** PlacementResponse
+    placementResponse_groupName,
+
+    -- ** PoolCidrBlock
+    poolCidrBlock_cidr,
+
+    -- ** PortRange
+    portRange_from,
+    portRange_to,
+
+    -- ** PrefixList
+    prefixList_cidrs,
+    prefixList_prefixListId,
+    prefixList_prefixListName,
+
+    -- ** PrefixListAssociation
+    prefixListAssociation_resourceId,
+    prefixListAssociation_resourceOwner,
+
+    -- ** PrefixListEntry
+    prefixListEntry_cidr,
+    prefixListEntry_description,
+
+    -- ** PrefixListId
+    prefixListId_description,
+    prefixListId_prefixListId,
+
+    -- ** PriceSchedule
+    priceSchedule_active,
+    priceSchedule_currencyCode,
+    priceSchedule_price,
+    priceSchedule_term,
+
+    -- ** PriceScheduleSpecification
+    priceScheduleSpecification_currencyCode,
+    priceScheduleSpecification_price,
+    priceScheduleSpecification_term,
+
+    -- ** PricingDetail
+    pricingDetail_count,
+    pricingDetail_price,
+
+    -- ** PrincipalIdFormat
+    principalIdFormat_arn,
+    principalIdFormat_statuses,
+
+    -- ** PrivateDnsDetails
+    privateDnsDetails_privateDnsName,
+
+    -- ** PrivateDnsNameConfiguration
+    privateDnsNameConfiguration_name,
+    privateDnsNameConfiguration_state,
+    privateDnsNameConfiguration_type,
+    privateDnsNameConfiguration_value,
+
+    -- ** PrivateDnsNameOptionsOnLaunch
+    privateDnsNameOptionsOnLaunch_enableResourceNameDnsAAAARecord,
+    privateDnsNameOptionsOnLaunch_enableResourceNameDnsARecord,
+    privateDnsNameOptionsOnLaunch_hostnameType,
+
+    -- ** PrivateDnsNameOptionsRequest
+    privateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord,
+    privateDnsNameOptionsRequest_enableResourceNameDnsARecord,
+    privateDnsNameOptionsRequest_hostnameType,
+
+    -- ** PrivateDnsNameOptionsResponse
+    privateDnsNameOptionsResponse_enableResourceNameDnsAAAARecord,
+    privateDnsNameOptionsResponse_enableResourceNameDnsARecord,
+    privateDnsNameOptionsResponse_hostnameType,
+
+    -- ** PrivateIpAddressSpecification
+    privateIpAddressSpecification_primary,
+    privateIpAddressSpecification_privateIpAddress,
+
+    -- ** ProcessorInfo
+    processorInfo_supportedArchitectures,
+    processorInfo_sustainedClockSpeedInGhz,
+
+    -- ** ProductCode
+    productCode_productCodeId,
+    productCode_productCodeType,
+
+    -- ** PropagatingVgw
+    propagatingVgw_gatewayId,
+
+    -- ** ProvisionedBandwidth
+    provisionedBandwidth_provisionTime,
+    provisionedBandwidth_provisioned,
+    provisionedBandwidth_requestTime,
+    provisionedBandwidth_requested,
+    provisionedBandwidth_status,
+
+    -- ** PtrUpdateStatus
+    ptrUpdateStatus_reason,
+    ptrUpdateStatus_status,
+    ptrUpdateStatus_value,
+
+    -- ** PublicIpv4Pool
+    publicIpv4Pool_description,
+    publicIpv4Pool_networkBorderGroup,
+    publicIpv4Pool_poolAddressRanges,
+    publicIpv4Pool_poolId,
+    publicIpv4Pool_tags,
+    publicIpv4Pool_totalAddressCount,
+    publicIpv4Pool_totalAvailableAddressCount,
+
+    -- ** PublicIpv4PoolRange
+    publicIpv4PoolRange_addressCount,
+    publicIpv4PoolRange_availableAddressCount,
+    publicIpv4PoolRange_firstAddress,
+    publicIpv4PoolRange_lastAddress,
+
+    -- ** Purchase
+    purchase_currencyCode,
+    purchase_duration,
+    purchase_hostIdSet,
+    purchase_hostReservationId,
+    purchase_hourlyPrice,
+    purchase_instanceFamily,
+    purchase_paymentOption,
+    purchase_upfrontPrice,
+
+    -- ** PurchaseRequest
+    purchaseRequest_instanceCount,
+    purchaseRequest_purchaseToken,
+
+    -- ** RecurringCharge
+    recurringCharge_amount,
+    recurringCharge_frequency,
+
+    -- ** ReferencedSecurityGroup
+    referencedSecurityGroup_groupId,
+    referencedSecurityGroup_peeringStatus,
+    referencedSecurityGroup_userId,
+    referencedSecurityGroup_vpcId,
+    referencedSecurityGroup_vpcPeeringConnectionId,
+
+    -- ** RegionInfo
+    regionInfo_endpoint,
+    regionInfo_optInStatus,
+    regionInfo_regionName,
+
+    -- ** RegisterInstanceTagAttributeRequest
+    registerInstanceTagAttributeRequest_includeAllTagsOfInstance,
+    registerInstanceTagAttributeRequest_instanceTagKeys,
+
+    -- ** RemoveIpamOperatingRegion
+    removeIpamOperatingRegion_regionName,
+
+    -- ** RemovePrefixListEntry
+    removePrefixListEntry_cidr,
+
+    -- ** ReplaceRootVolumeTask
+    replaceRootVolumeTask_completeTime,
+    replaceRootVolumeTask_deleteReplacedRootVolume,
+    replaceRootVolumeTask_imageId,
+    replaceRootVolumeTask_instanceId,
+    replaceRootVolumeTask_replaceRootVolumeTaskId,
+    replaceRootVolumeTask_snapshotId,
+    replaceRootVolumeTask_startTime,
+    replaceRootVolumeTask_tags,
+    replaceRootVolumeTask_taskState,
+
+    -- ** RequestIpamResourceTag
+    requestIpamResourceTag_key,
+    requestIpamResourceTag_value,
+
+    -- ** RequestLaunchTemplateData
+    requestLaunchTemplateData_blockDeviceMappings,
+    requestLaunchTemplateData_capacityReservationSpecification,
+    requestLaunchTemplateData_cpuOptions,
+    requestLaunchTemplateData_creditSpecification,
+    requestLaunchTemplateData_disableApiStop,
+    requestLaunchTemplateData_disableApiTermination,
+    requestLaunchTemplateData_ebsOptimized,
+    requestLaunchTemplateData_elasticGpuSpecifications,
+    requestLaunchTemplateData_elasticInferenceAccelerators,
+    requestLaunchTemplateData_enclaveOptions,
+    requestLaunchTemplateData_hibernationOptions,
+    requestLaunchTemplateData_iamInstanceProfile,
+    requestLaunchTemplateData_imageId,
+    requestLaunchTemplateData_instanceInitiatedShutdownBehavior,
+    requestLaunchTemplateData_instanceMarketOptions,
+    requestLaunchTemplateData_instanceRequirements,
+    requestLaunchTemplateData_instanceType,
+    requestLaunchTemplateData_kernelId,
+    requestLaunchTemplateData_keyName,
+    requestLaunchTemplateData_licenseSpecifications,
+    requestLaunchTemplateData_maintenanceOptions,
+    requestLaunchTemplateData_metadataOptions,
+    requestLaunchTemplateData_monitoring,
+    requestLaunchTemplateData_networkInterfaces,
+    requestLaunchTemplateData_placement,
+    requestLaunchTemplateData_privateDnsNameOptions,
+    requestLaunchTemplateData_ramDiskId,
+    requestLaunchTemplateData_securityGroupIds,
+    requestLaunchTemplateData_securityGroups,
+    requestLaunchTemplateData_tagSpecifications,
+    requestLaunchTemplateData_userData,
+
+    -- ** RequestSpotLaunchSpecification
+    requestSpotLaunchSpecification_addressingType,
+    requestSpotLaunchSpecification_blockDeviceMappings,
+    requestSpotLaunchSpecification_ebsOptimized,
+    requestSpotLaunchSpecification_iamInstanceProfile,
+    requestSpotLaunchSpecification_imageId,
+    requestSpotLaunchSpecification_instanceType,
+    requestSpotLaunchSpecification_kernelId,
+    requestSpotLaunchSpecification_keyName,
+    requestSpotLaunchSpecification_monitoring,
+    requestSpotLaunchSpecification_networkInterfaces,
+    requestSpotLaunchSpecification_placement,
+    requestSpotLaunchSpecification_ramdiskId,
+    requestSpotLaunchSpecification_securityGroupIds,
+    requestSpotLaunchSpecification_securityGroups,
+    requestSpotLaunchSpecification_subnetId,
+    requestSpotLaunchSpecification_userData,
+
+    -- ** Reservation
+    reservation_groups,
+    reservation_instances,
+    reservation_requesterId,
+    reservation_reservationId,
+    reservation_ownerId,
+
+    -- ** ReservationFleetInstanceSpecification
+    reservationFleetInstanceSpecification_availabilityZone,
+    reservationFleetInstanceSpecification_availabilityZoneId,
+    reservationFleetInstanceSpecification_ebsOptimized,
+    reservationFleetInstanceSpecification_instancePlatform,
+    reservationFleetInstanceSpecification_instanceType,
+    reservationFleetInstanceSpecification_priority,
+    reservationFleetInstanceSpecification_weight,
+
+    -- ** ReservationValue
+    reservationValue_hourlyPrice,
+    reservationValue_remainingTotalValue,
+    reservationValue_remainingUpfrontValue,
+
+    -- ** ReservedInstanceLimitPrice
+    reservedInstanceLimitPrice_amount,
+    reservedInstanceLimitPrice_currencyCode,
+
+    -- ** ReservedInstanceReservationValue
+    reservedInstanceReservationValue_reservationValue,
+    reservedInstanceReservationValue_reservedInstanceId,
+
+    -- ** ReservedInstances
+    reservedInstances_availabilityZone,
+    reservedInstances_currencyCode,
+    reservedInstances_duration,
+    reservedInstances_end,
+    reservedInstances_fixedPrice,
+    reservedInstances_instanceCount,
+    reservedInstances_instanceTenancy,
+    reservedInstances_instanceType,
+    reservedInstances_offeringClass,
+    reservedInstances_offeringType,
+    reservedInstances_productDescription,
+    reservedInstances_recurringCharges,
+    reservedInstances_reservedInstancesId,
+    reservedInstances_scope,
+    reservedInstances_start,
+    reservedInstances_state,
+    reservedInstances_tags,
+    reservedInstances_usagePrice,
+
+    -- ** ReservedInstancesConfiguration
+    reservedInstancesConfiguration_availabilityZone,
+    reservedInstancesConfiguration_instanceCount,
+    reservedInstancesConfiguration_instanceType,
+    reservedInstancesConfiguration_platform,
+    reservedInstancesConfiguration_scope,
+
+    -- ** ReservedInstancesId
+    reservedInstancesId_reservedInstancesId,
+
+    -- ** ReservedInstancesListing
+    reservedInstancesListing_clientToken,
+    reservedInstancesListing_createDate,
+    reservedInstancesListing_instanceCounts,
+    reservedInstancesListing_priceSchedules,
+    reservedInstancesListing_reservedInstancesId,
+    reservedInstancesListing_reservedInstancesListingId,
+    reservedInstancesListing_status,
+    reservedInstancesListing_statusMessage,
+    reservedInstancesListing_tags,
+    reservedInstancesListing_updateDate,
+
+    -- ** ReservedInstancesModification
+    reservedInstancesModification_clientToken,
+    reservedInstancesModification_createDate,
+    reservedInstancesModification_effectiveDate,
+    reservedInstancesModification_modificationResults,
+    reservedInstancesModification_reservedInstancesIds,
+    reservedInstancesModification_reservedInstancesModificationId,
+    reservedInstancesModification_status,
+    reservedInstancesModification_statusMessage,
+    reservedInstancesModification_updateDate,
+
+    -- ** ReservedInstancesModificationResult
+    reservedInstancesModificationResult_reservedInstancesId,
+    reservedInstancesModificationResult_targetConfiguration,
+
+    -- ** ReservedInstancesOffering
+    reservedInstancesOffering_availabilityZone,
+    reservedInstancesOffering_currencyCode,
+    reservedInstancesOffering_duration,
+    reservedInstancesOffering_fixedPrice,
+    reservedInstancesOffering_instanceTenancy,
+    reservedInstancesOffering_instanceType,
+    reservedInstancesOffering_marketplace,
+    reservedInstancesOffering_offeringClass,
+    reservedInstancesOffering_offeringType,
+    reservedInstancesOffering_pricingDetails,
+    reservedInstancesOffering_productDescription,
+    reservedInstancesOffering_recurringCharges,
+    reservedInstancesOffering_reservedInstancesOfferingId,
+    reservedInstancesOffering_scope,
+    reservedInstancesOffering_usagePrice,
+
+    -- ** ResourceStatement
+    resourceStatement_resourceTypes,
+    resourceStatement_resources,
+
+    -- ** ResourceStatementRequest
+    resourceStatementRequest_resourceTypes,
+    resourceStatementRequest_resources,
+
+    -- ** ResponseError
+    responseError_code,
+    responseError_message,
+
+    -- ** ResponseLaunchTemplateData
+    responseLaunchTemplateData_blockDeviceMappings,
+    responseLaunchTemplateData_capacityReservationSpecification,
+    responseLaunchTemplateData_cpuOptions,
+    responseLaunchTemplateData_creditSpecification,
+    responseLaunchTemplateData_disableApiStop,
+    responseLaunchTemplateData_disableApiTermination,
+    responseLaunchTemplateData_ebsOptimized,
+    responseLaunchTemplateData_elasticGpuSpecifications,
+    responseLaunchTemplateData_elasticInferenceAccelerators,
+    responseLaunchTemplateData_enclaveOptions,
+    responseLaunchTemplateData_hibernationOptions,
+    responseLaunchTemplateData_iamInstanceProfile,
+    responseLaunchTemplateData_imageId,
+    responseLaunchTemplateData_instanceInitiatedShutdownBehavior,
+    responseLaunchTemplateData_instanceMarketOptions,
+    responseLaunchTemplateData_instanceRequirements,
+    responseLaunchTemplateData_instanceType,
+    responseLaunchTemplateData_kernelId,
+    responseLaunchTemplateData_keyName,
+    responseLaunchTemplateData_licenseSpecifications,
+    responseLaunchTemplateData_maintenanceOptions,
+    responseLaunchTemplateData_metadataOptions,
+    responseLaunchTemplateData_monitoring,
+    responseLaunchTemplateData_networkInterfaces,
+    responseLaunchTemplateData_placement,
+    responseLaunchTemplateData_privateDnsNameOptions,
+    responseLaunchTemplateData_ramDiskId,
+    responseLaunchTemplateData_securityGroupIds,
+    responseLaunchTemplateData_securityGroups,
+    responseLaunchTemplateData_tagSpecifications,
+    responseLaunchTemplateData_userData,
+
+    -- ** Route
+    route_carrierGatewayId,
+    route_coreNetworkArn,
+    route_destinationCidrBlock,
+    route_destinationIpv6CidrBlock,
+    route_destinationPrefixListId,
+    route_egressOnlyInternetGatewayId,
+    route_gatewayId,
+    route_instanceId,
+    route_instanceOwnerId,
+    route_localGatewayId,
+    route_natGatewayId,
+    route_networkInterfaceId,
+    route_origin,
+    route_state,
+    route_transitGatewayId,
+    route_vpcPeeringConnectionId,
+
+    -- ** RouteTable
+    routeTable_associations,
+    routeTable_ownerId,
+    routeTable_propagatingVgws,
+    routeTable_routeTableId,
+    routeTable_routes,
+    routeTable_tags,
+    routeTable_vpcId,
+
+    -- ** RouteTableAssociation
+    routeTableAssociation_associationState,
+    routeTableAssociation_gatewayId,
+    routeTableAssociation_main,
+    routeTableAssociation_routeTableAssociationId,
+    routeTableAssociation_routeTableId,
+    routeTableAssociation_subnetId,
+
+    -- ** RouteTableAssociationState
+    routeTableAssociationState_state,
+    routeTableAssociationState_statusMessage,
+
+    -- ** RunInstancesMonitoringEnabled
+    runInstancesMonitoringEnabled_enabled,
+
+    -- ** S3ObjectTag
+    s3ObjectTag_key,
+    s3ObjectTag_value,
+
+    -- ** S3Storage
+    s3Storage_aWSAccessKeyId,
+    s3Storage_bucket,
+    s3Storage_prefix,
+    s3Storage_uploadPolicy,
+    s3Storage_uploadPolicySignature,
+
+    -- ** ScheduledInstance
+    scheduledInstance_availabilityZone,
+    scheduledInstance_createDate,
+    scheduledInstance_hourlyPrice,
+    scheduledInstance_instanceCount,
+    scheduledInstance_instanceType,
+    scheduledInstance_networkPlatform,
+    scheduledInstance_nextSlotStartTime,
+    scheduledInstance_platform,
+    scheduledInstance_previousSlotEndTime,
+    scheduledInstance_recurrence,
+    scheduledInstance_scheduledInstanceId,
+    scheduledInstance_slotDurationInHours,
+    scheduledInstance_termEndDate,
+    scheduledInstance_termStartDate,
+    scheduledInstance_totalScheduledInstanceHours,
+
+    -- ** ScheduledInstanceAvailability
+    scheduledInstanceAvailability_availabilityZone,
+    scheduledInstanceAvailability_availableInstanceCount,
+    scheduledInstanceAvailability_firstSlotStartTime,
+    scheduledInstanceAvailability_hourlyPrice,
+    scheduledInstanceAvailability_instanceType,
+    scheduledInstanceAvailability_maxTermDurationInDays,
+    scheduledInstanceAvailability_minTermDurationInDays,
+    scheduledInstanceAvailability_networkPlatform,
+    scheduledInstanceAvailability_platform,
+    scheduledInstanceAvailability_purchaseToken,
+    scheduledInstanceAvailability_recurrence,
+    scheduledInstanceAvailability_slotDurationInHours,
+    scheduledInstanceAvailability_totalScheduledInstanceHours,
+
+    -- ** ScheduledInstanceRecurrence
+    scheduledInstanceRecurrence_frequency,
+    scheduledInstanceRecurrence_interval,
+    scheduledInstanceRecurrence_occurrenceDaySet,
+    scheduledInstanceRecurrence_occurrenceRelativeToEnd,
+    scheduledInstanceRecurrence_occurrenceUnit,
+
+    -- ** ScheduledInstanceRecurrenceRequest
+    scheduledInstanceRecurrenceRequest_frequency,
+    scheduledInstanceRecurrenceRequest_interval,
+    scheduledInstanceRecurrenceRequest_occurrenceDays,
+    scheduledInstanceRecurrenceRequest_occurrenceRelativeToEnd,
+    scheduledInstanceRecurrenceRequest_occurrenceUnit,
+
+    -- ** ScheduledInstancesBlockDeviceMapping
+    scheduledInstancesBlockDeviceMapping_deviceName,
+    scheduledInstancesBlockDeviceMapping_ebs,
+    scheduledInstancesBlockDeviceMapping_noDevice,
+    scheduledInstancesBlockDeviceMapping_virtualName,
+
+    -- ** ScheduledInstancesEbs
+    scheduledInstancesEbs_deleteOnTermination,
+    scheduledInstancesEbs_encrypted,
+    scheduledInstancesEbs_iops,
+    scheduledInstancesEbs_snapshotId,
+    scheduledInstancesEbs_volumeSize,
+    scheduledInstancesEbs_volumeType,
+
+    -- ** ScheduledInstancesIamInstanceProfile
+    scheduledInstancesIamInstanceProfile_arn,
+    scheduledInstancesIamInstanceProfile_name,
+
+    -- ** ScheduledInstancesIpv6Address
+    scheduledInstancesIpv6Address_ipv6Address,
+
+    -- ** ScheduledInstancesLaunchSpecification
+    scheduledInstancesLaunchSpecification_blockDeviceMappings,
+    scheduledInstancesLaunchSpecification_ebsOptimized,
+    scheduledInstancesLaunchSpecification_iamInstanceProfile,
+    scheduledInstancesLaunchSpecification_instanceType,
+    scheduledInstancesLaunchSpecification_kernelId,
+    scheduledInstancesLaunchSpecification_keyName,
+    scheduledInstancesLaunchSpecification_monitoring,
+    scheduledInstancesLaunchSpecification_networkInterfaces,
+    scheduledInstancesLaunchSpecification_placement,
+    scheduledInstancesLaunchSpecification_ramdiskId,
+    scheduledInstancesLaunchSpecification_securityGroupIds,
+    scheduledInstancesLaunchSpecification_subnetId,
+    scheduledInstancesLaunchSpecification_userData,
+    scheduledInstancesLaunchSpecification_imageId,
+
+    -- ** ScheduledInstancesMonitoring
+    scheduledInstancesMonitoring_enabled,
+
+    -- ** ScheduledInstancesNetworkInterface
+    scheduledInstancesNetworkInterface_associatePublicIpAddress,
+    scheduledInstancesNetworkInterface_deleteOnTermination,
+    scheduledInstancesNetworkInterface_description,
+    scheduledInstancesNetworkInterface_deviceIndex,
+    scheduledInstancesNetworkInterface_groups,
+    scheduledInstancesNetworkInterface_ipv6AddressCount,
+    scheduledInstancesNetworkInterface_ipv6Addresses,
+    scheduledInstancesNetworkInterface_networkInterfaceId,
+    scheduledInstancesNetworkInterface_privateIpAddress,
+    scheduledInstancesNetworkInterface_privateIpAddressConfigs,
+    scheduledInstancesNetworkInterface_secondaryPrivateIpAddressCount,
+    scheduledInstancesNetworkInterface_subnetId,
+
+    -- ** ScheduledInstancesPlacement
+    scheduledInstancesPlacement_availabilityZone,
+    scheduledInstancesPlacement_groupName,
+
+    -- ** ScheduledInstancesPrivateIpAddressConfig
+    scheduledInstancesPrivateIpAddressConfig_primary,
+    scheduledInstancesPrivateIpAddressConfig_privateIpAddress,
+
+    -- ** SecurityGroup
+    securityGroup_ipPermissions,
+    securityGroup_ipPermissionsEgress,
+    securityGroup_tags,
+    securityGroup_vpcId,
+    securityGroup_ownerId,
+    securityGroup_groupId,
+    securityGroup_groupName,
+    securityGroup_description,
+
+    -- ** SecurityGroupIdentifier
+    securityGroupIdentifier_groupId,
+    securityGroupIdentifier_groupName,
+
+    -- ** SecurityGroupReference
+    securityGroupReference_groupId,
+    securityGroupReference_referencingVpcId,
+    securityGroupReference_vpcPeeringConnectionId,
+
+    -- ** SecurityGroupRule
+    securityGroupRule_cidrIpv4,
+    securityGroupRule_cidrIpv6,
+    securityGroupRule_description,
+    securityGroupRule_fromPort,
+    securityGroupRule_groupId,
+    securityGroupRule_groupOwnerId,
+    securityGroupRule_ipProtocol,
+    securityGroupRule_isEgress,
+    securityGroupRule_prefixListId,
+    securityGroupRule_referencedGroupInfo,
+    securityGroupRule_securityGroupRuleId,
+    securityGroupRule_tags,
+    securityGroupRule_toPort,
+
+    -- ** SecurityGroupRuleDescription
+    securityGroupRuleDescription_description,
+    securityGroupRuleDescription_securityGroupRuleId,
+
+    -- ** SecurityGroupRuleRequest
+    securityGroupRuleRequest_cidrIpv4,
+    securityGroupRuleRequest_cidrIpv6,
+    securityGroupRuleRequest_description,
+    securityGroupRuleRequest_fromPort,
+    securityGroupRuleRequest_ipProtocol,
+    securityGroupRuleRequest_prefixListId,
+    securityGroupRuleRequest_referencedGroupId,
+    securityGroupRuleRequest_toPort,
+
+    -- ** SecurityGroupRuleUpdate
+    securityGroupRuleUpdate_securityGroupRule,
+    securityGroupRuleUpdate_securityGroupRuleId,
+
+    -- ** ServiceConfiguration
+    serviceConfiguration_acceptanceRequired,
+    serviceConfiguration_availabilityZones,
+    serviceConfiguration_baseEndpointDnsNames,
+    serviceConfiguration_gatewayLoadBalancerArns,
+    serviceConfiguration_managesVpcEndpoints,
+    serviceConfiguration_networkLoadBalancerArns,
+    serviceConfiguration_payerResponsibility,
+    serviceConfiguration_privateDnsName,
+    serviceConfiguration_privateDnsNameConfiguration,
+    serviceConfiguration_serviceId,
+    serviceConfiguration_serviceName,
+    serviceConfiguration_serviceState,
+    serviceConfiguration_serviceType,
+    serviceConfiguration_supportedIpAddressTypes,
+    serviceConfiguration_tags,
+
+    -- ** ServiceDetail
+    serviceDetail_acceptanceRequired,
+    serviceDetail_availabilityZones,
+    serviceDetail_baseEndpointDnsNames,
+    serviceDetail_managesVpcEndpoints,
+    serviceDetail_owner,
+    serviceDetail_payerResponsibility,
+    serviceDetail_privateDnsName,
+    serviceDetail_privateDnsNameVerificationState,
+    serviceDetail_privateDnsNames,
+    serviceDetail_serviceId,
+    serviceDetail_serviceName,
+    serviceDetail_serviceType,
+    serviceDetail_supportedIpAddressTypes,
+    serviceDetail_tags,
+    serviceDetail_vpcEndpointPolicySupported,
+
+    -- ** ServiceTypeDetail
+    serviceTypeDetail_serviceType,
+
+    -- ** SlotDateTimeRangeRequest
+    slotDateTimeRangeRequest_earliestTime,
+    slotDateTimeRangeRequest_latestTime,
+
+    -- ** SlotStartTimeRangeRequest
+    slotStartTimeRangeRequest_earliestTime,
+    slotStartTimeRangeRequest_latestTime,
+
+    -- ** Snapshot
+    snapshot_dataEncryptionKeyId,
+    snapshot_kmsKeyId,
+    snapshot_outpostArn,
+    snapshot_ownerAlias,
+    snapshot_restoreExpiryTime,
+    snapshot_stateMessage,
+    snapshot_storageTier,
+    snapshot_tags,
+    snapshot_snapshotId,
+    snapshot_ownerId,
+    snapshot_volumeId,
+    snapshot_volumeSize,
+    snapshot_description,
+    snapshot_startTime,
+    snapshot_progress,
+    snapshot_state,
+    snapshot_encrypted,
+
+    -- ** SnapshotDetail
+    snapshotDetail_description,
+    snapshotDetail_deviceName,
+    snapshotDetail_diskImageSize,
+    snapshotDetail_format,
+    snapshotDetail_progress,
+    snapshotDetail_snapshotId,
+    snapshotDetail_status,
+    snapshotDetail_statusMessage,
+    snapshotDetail_url,
+    snapshotDetail_userBucket,
+
+    -- ** SnapshotDiskContainer
+    snapshotDiskContainer_description,
+    snapshotDiskContainer_format,
+    snapshotDiskContainer_url,
+    snapshotDiskContainer_userBucket,
+
+    -- ** SnapshotInfo
+    snapshotInfo_description,
+    snapshotInfo_encrypted,
+    snapshotInfo_outpostArn,
+    snapshotInfo_ownerId,
+    snapshotInfo_progress,
+    snapshotInfo_snapshotId,
+    snapshotInfo_startTime,
+    snapshotInfo_state,
+    snapshotInfo_tags,
+    snapshotInfo_volumeId,
+    snapshotInfo_volumeSize,
+
+    -- ** SnapshotRecycleBinInfo
+    snapshotRecycleBinInfo_description,
+    snapshotRecycleBinInfo_recycleBinEnterTime,
+    snapshotRecycleBinInfo_recycleBinExitTime,
+    snapshotRecycleBinInfo_snapshotId,
+    snapshotRecycleBinInfo_volumeId,
+
+    -- ** SnapshotTaskDetail
+    snapshotTaskDetail_description,
+    snapshotTaskDetail_diskImageSize,
+    snapshotTaskDetail_encrypted,
+    snapshotTaskDetail_format,
+    snapshotTaskDetail_kmsKeyId,
+    snapshotTaskDetail_progress,
+    snapshotTaskDetail_snapshotId,
+    snapshotTaskDetail_status,
+    snapshotTaskDetail_statusMessage,
+    snapshotTaskDetail_url,
+    snapshotTaskDetail_userBucket,
+
+    -- ** SnapshotTierStatus
+    snapshotTierStatus_archivalCompleteTime,
+    snapshotTierStatus_lastTieringOperationStatus,
+    snapshotTierStatus_lastTieringOperationStatusDetail,
+    snapshotTierStatus_lastTieringProgress,
+    snapshotTierStatus_lastTieringStartTime,
+    snapshotTierStatus_ownerId,
+    snapshotTierStatus_restoreExpiryTime,
+    snapshotTierStatus_snapshotId,
+    snapshotTierStatus_status,
+    snapshotTierStatus_storageTier,
+    snapshotTierStatus_tags,
+    snapshotTierStatus_volumeId,
+
+    -- ** SpotCapacityRebalance
+    spotCapacityRebalance_replacementStrategy,
+    spotCapacityRebalance_terminationDelay,
+
+    -- ** SpotDatafeedSubscription
+    spotDatafeedSubscription_bucket,
+    spotDatafeedSubscription_fault,
+    spotDatafeedSubscription_ownerId,
+    spotDatafeedSubscription_prefix,
+    spotDatafeedSubscription_state,
+
+    -- ** SpotFleetLaunchSpecification
+    spotFleetLaunchSpecification_addressingType,
+    spotFleetLaunchSpecification_blockDeviceMappings,
+    spotFleetLaunchSpecification_ebsOptimized,
+    spotFleetLaunchSpecification_iamInstanceProfile,
+    spotFleetLaunchSpecification_imageId,
+    spotFleetLaunchSpecification_instanceRequirements,
+    spotFleetLaunchSpecification_instanceType,
+    spotFleetLaunchSpecification_kernelId,
+    spotFleetLaunchSpecification_keyName,
+    spotFleetLaunchSpecification_monitoring,
+    spotFleetLaunchSpecification_networkInterfaces,
+    spotFleetLaunchSpecification_placement,
+    spotFleetLaunchSpecification_ramdiskId,
+    spotFleetLaunchSpecification_securityGroups,
+    spotFleetLaunchSpecification_spotPrice,
+    spotFleetLaunchSpecification_subnetId,
+    spotFleetLaunchSpecification_tagSpecifications,
+    spotFleetLaunchSpecification_userData,
+    spotFleetLaunchSpecification_weightedCapacity,
+
+    -- ** SpotFleetMonitoring
+    spotFleetMonitoring_enabled,
+
+    -- ** SpotFleetRequestConfig
+    spotFleetRequestConfig_activityStatus,
+    spotFleetRequestConfig_createTime,
+    spotFleetRequestConfig_spotFleetRequestConfig,
+    spotFleetRequestConfig_spotFleetRequestId,
+    spotFleetRequestConfig_spotFleetRequestState,
+    spotFleetRequestConfig_tags,
+
+    -- ** SpotFleetRequestConfigData
+    spotFleetRequestConfigData_allocationStrategy,
+    spotFleetRequestConfigData_clientToken,
+    spotFleetRequestConfigData_context,
+    spotFleetRequestConfigData_excessCapacityTerminationPolicy,
+    spotFleetRequestConfigData_fulfilledCapacity,
+    spotFleetRequestConfigData_instanceInterruptionBehavior,
+    spotFleetRequestConfigData_instancePoolsToUseCount,
+    spotFleetRequestConfigData_launchSpecifications,
+    spotFleetRequestConfigData_launchTemplateConfigs,
+    spotFleetRequestConfigData_loadBalancersConfig,
+    spotFleetRequestConfigData_onDemandAllocationStrategy,
+    spotFleetRequestConfigData_onDemandFulfilledCapacity,
+    spotFleetRequestConfigData_onDemandMaxTotalPrice,
+    spotFleetRequestConfigData_onDemandTargetCapacity,
+    spotFleetRequestConfigData_replaceUnhealthyInstances,
+    spotFleetRequestConfigData_spotMaintenanceStrategies,
+    spotFleetRequestConfigData_spotMaxTotalPrice,
+    spotFleetRequestConfigData_spotPrice,
+    spotFleetRequestConfigData_tagSpecifications,
+    spotFleetRequestConfigData_targetCapacityUnitType,
+    spotFleetRequestConfigData_terminateInstancesWithExpiration,
+    spotFleetRequestConfigData_type,
+    spotFleetRequestConfigData_validFrom,
+    spotFleetRequestConfigData_validUntil,
+    spotFleetRequestConfigData_iamFleetRole,
+    spotFleetRequestConfigData_targetCapacity,
+
+    -- ** SpotFleetTagSpecification
+    spotFleetTagSpecification_resourceType,
+    spotFleetTagSpecification_tags,
+
+    -- ** SpotInstanceRequest
+    spotInstanceRequest_actualBlockHourlyPrice,
+    spotInstanceRequest_availabilityZoneGroup,
+    spotInstanceRequest_blockDurationMinutes,
+    spotInstanceRequest_createTime,
+    spotInstanceRequest_fault,
+    spotInstanceRequest_instanceId,
+    spotInstanceRequest_instanceInterruptionBehavior,
+    spotInstanceRequest_launchGroup,
+    spotInstanceRequest_launchSpecification,
+    spotInstanceRequest_launchedAvailabilityZone,
+    spotInstanceRequest_productDescription,
+    spotInstanceRequest_spotInstanceRequestId,
+    spotInstanceRequest_spotPrice,
+    spotInstanceRequest_state,
+    spotInstanceRequest_status,
+    spotInstanceRequest_tags,
+    spotInstanceRequest_type,
+    spotInstanceRequest_validFrom,
+    spotInstanceRequest_validUntil,
+
+    -- ** SpotInstanceStateFault
+    spotInstanceStateFault_code,
+    spotInstanceStateFault_message,
+
+    -- ** SpotInstanceStatus
+    spotInstanceStatus_code,
+    spotInstanceStatus_message,
+    spotInstanceStatus_updateTime,
+
+    -- ** SpotMaintenanceStrategies
+    spotMaintenanceStrategies_capacityRebalance,
+
+    -- ** SpotMarketOptions
+    spotMarketOptions_blockDurationMinutes,
+    spotMarketOptions_instanceInterruptionBehavior,
+    spotMarketOptions_maxPrice,
+    spotMarketOptions_spotInstanceType,
+    spotMarketOptions_validUntil,
+
+    -- ** SpotOptions
+    spotOptions_allocationStrategy,
+    spotOptions_instanceInterruptionBehavior,
+    spotOptions_instancePoolsToUseCount,
+    spotOptions_maintenanceStrategies,
+    spotOptions_maxTotalPrice,
+    spotOptions_minTargetCapacity,
+    spotOptions_singleAvailabilityZone,
+    spotOptions_singleInstanceType,
+
+    -- ** SpotOptionsRequest
+    spotOptionsRequest_allocationStrategy,
+    spotOptionsRequest_instanceInterruptionBehavior,
+    spotOptionsRequest_instancePoolsToUseCount,
+    spotOptionsRequest_maintenanceStrategies,
+    spotOptionsRequest_maxTotalPrice,
+    spotOptionsRequest_minTargetCapacity,
+    spotOptionsRequest_singleAvailabilityZone,
+    spotOptionsRequest_singleInstanceType,
+
+    -- ** SpotPlacement
+    spotPlacement_availabilityZone,
+    spotPlacement_groupName,
+    spotPlacement_tenancy,
+
+    -- ** SpotPlacementScore
+    spotPlacementScore_availabilityZoneId,
+    spotPlacementScore_region,
+    spotPlacementScore_score,
+
+    -- ** SpotPrice
+    spotPrice_availabilityZone,
+    spotPrice_instanceType,
+    spotPrice_productDescription,
+    spotPrice_spotPrice,
+    spotPrice_timestamp,
+
+    -- ** StaleIpPermission
+    staleIpPermission_fromPort,
+    staleIpPermission_ipProtocol,
+    staleIpPermission_ipRanges,
+    staleIpPermission_prefixListIds,
+    staleIpPermission_toPort,
+    staleIpPermission_userIdGroupPairs,
+
+    -- ** StaleSecurityGroup
+    staleSecurityGroup_description,
+    staleSecurityGroup_groupId,
+    staleSecurityGroup_groupName,
+    staleSecurityGroup_staleIpPermissions,
+    staleSecurityGroup_staleIpPermissionsEgress,
+    staleSecurityGroup_vpcId,
+
+    -- ** StateReason
+    stateReason_code,
+    stateReason_message,
+
+    -- ** Storage
+    storage_s3,
+
+    -- ** StorageLocation
+    storageLocation_bucket,
+    storageLocation_key,
+
+    -- ** StoreImageTaskResult
+    storeImageTaskResult_amiId,
+    storeImageTaskResult_bucket,
+    storeImageTaskResult_progressPercentage,
+    storeImageTaskResult_s3objectKey,
+    storeImageTaskResult_storeTaskFailureReason,
+    storeImageTaskResult_storeTaskState,
+    storeImageTaskResult_taskStartTime,
+
+    -- ** Subnet
+    subnet_assignIpv6AddressOnCreation,
+    subnet_availabilityZoneId,
+    subnet_customerOwnedIpv4Pool,
+    subnet_defaultForAz,
+    subnet_enableDns64,
+    subnet_enableLniAtDeviceIndex,
+    subnet_ipv6CidrBlockAssociationSet,
+    subnet_ipv6Native,
+    subnet_mapCustomerOwnedIpOnLaunch,
+    subnet_mapPublicIpOnLaunch,
+    subnet_outpostArn,
+    subnet_ownerId,
+    subnet_privateDnsNameOptionsOnLaunch,
+    subnet_subnetArn,
+    subnet_tags,
+    subnet_availabilityZone,
+    subnet_availableIpAddressCount,
+    subnet_cidrBlock,
+    subnet_state,
+    subnet_subnetId,
+    subnet_vpcId,
+
+    -- ** SubnetAssociation
+    subnetAssociation_state,
+    subnetAssociation_subnetId,
+
+    -- ** SubnetCidrBlockState
+    subnetCidrBlockState_state,
+    subnetCidrBlockState_statusMessage,
+
+    -- ** SubnetCidrReservation
+    subnetCidrReservation_cidr,
+    subnetCidrReservation_description,
+    subnetCidrReservation_ownerId,
+    subnetCidrReservation_reservationType,
+    subnetCidrReservation_subnetCidrReservationId,
+    subnetCidrReservation_subnetId,
+    subnetCidrReservation_tags,
+
+    -- ** SubnetIpv6CidrBlockAssociation
+    subnetIpv6CidrBlockAssociation_associationId,
+    subnetIpv6CidrBlockAssociation_ipv6CidrBlock,
+    subnetIpv6CidrBlockAssociation_ipv6CidrBlockState,
+
+    -- ** Subscription
+    subscription_destination,
+    subscription_metric,
+    subscription_period,
+    subscription_source,
+    subscription_statistic,
+
+    -- ** SuccessfulInstanceCreditSpecificationItem
+    successfulInstanceCreditSpecificationItem_instanceId,
+
+    -- ** SuccessfulQueuedPurchaseDeletion
+    successfulQueuedPurchaseDeletion_reservedInstancesId,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** TagDescription
+    tagDescription_resourceId,
+    tagDescription_resourceType,
+    tagDescription_key,
+    tagDescription_value,
+
+    -- ** TagSpecification
+    tagSpecification_resourceType,
+    tagSpecification_tags,
+
+    -- ** TargetCapacitySpecification
+    targetCapacitySpecification_defaultTargetCapacityType,
+    targetCapacitySpecification_onDemandTargetCapacity,
+    targetCapacitySpecification_spotTargetCapacity,
+    targetCapacitySpecification_targetCapacityUnitType,
+    targetCapacitySpecification_totalTargetCapacity,
+
+    -- ** TargetCapacitySpecificationRequest
+    targetCapacitySpecificationRequest_defaultTargetCapacityType,
+    targetCapacitySpecificationRequest_onDemandTargetCapacity,
+    targetCapacitySpecificationRequest_spotTargetCapacity,
+    targetCapacitySpecificationRequest_targetCapacityUnitType,
+    targetCapacitySpecificationRequest_totalTargetCapacity,
+
+    -- ** TargetConfiguration
+    targetConfiguration_instanceCount,
+    targetConfiguration_offeringId,
+
+    -- ** TargetConfigurationRequest
+    targetConfigurationRequest_instanceCount,
+    targetConfigurationRequest_offeringId,
+
+    -- ** TargetGroup
+    targetGroup_arn,
+
+    -- ** TargetGroupsConfig
+    targetGroupsConfig_targetGroups,
+
+    -- ** TargetNetwork
+    targetNetwork_associationId,
+    targetNetwork_clientVpnEndpointId,
+    targetNetwork_securityGroups,
+    targetNetwork_status,
+    targetNetwork_targetNetworkId,
+    targetNetwork_vpcId,
+
+    -- ** TargetReservationValue
+    targetReservationValue_reservationValue,
+    targetReservationValue_targetConfiguration,
+
+    -- ** TerminateConnectionStatus
+    terminateConnectionStatus_connectionId,
+    terminateConnectionStatus_currentStatus,
+    terminateConnectionStatus_previousStatus,
+
+    -- ** ThroughResourcesStatement
+    throughResourcesStatement_resourceStatement,
+
+    -- ** ThroughResourcesStatementRequest
+    throughResourcesStatementRequest_resourceStatement,
+
+    -- ** TotalLocalStorageGB
+    totalLocalStorageGB_max,
+    totalLocalStorageGB_min,
+
+    -- ** TotalLocalStorageGBRequest
+    totalLocalStorageGBRequest_max,
+    totalLocalStorageGBRequest_min,
+
+    -- ** TrafficMirrorFilter
+    trafficMirrorFilter_description,
+    trafficMirrorFilter_egressFilterRules,
+    trafficMirrorFilter_ingressFilterRules,
+    trafficMirrorFilter_networkServices,
+    trafficMirrorFilter_tags,
+    trafficMirrorFilter_trafficMirrorFilterId,
+
+    -- ** TrafficMirrorFilterRule
+    trafficMirrorFilterRule_description,
+    trafficMirrorFilterRule_destinationCidrBlock,
+    trafficMirrorFilterRule_destinationPortRange,
+    trafficMirrorFilterRule_protocol,
+    trafficMirrorFilterRule_ruleAction,
+    trafficMirrorFilterRule_ruleNumber,
+    trafficMirrorFilterRule_sourceCidrBlock,
+    trafficMirrorFilterRule_sourcePortRange,
+    trafficMirrorFilterRule_trafficDirection,
+    trafficMirrorFilterRule_trafficMirrorFilterId,
+    trafficMirrorFilterRule_trafficMirrorFilterRuleId,
+
+    -- ** TrafficMirrorPortRange
+    trafficMirrorPortRange_fromPort,
+    trafficMirrorPortRange_toPort,
+
+    -- ** TrafficMirrorPortRangeRequest
+    trafficMirrorPortRangeRequest_fromPort,
+    trafficMirrorPortRangeRequest_toPort,
+
+    -- ** TrafficMirrorSession
+    trafficMirrorSession_description,
+    trafficMirrorSession_networkInterfaceId,
+    trafficMirrorSession_ownerId,
+    trafficMirrorSession_packetLength,
+    trafficMirrorSession_sessionNumber,
+    trafficMirrorSession_tags,
+    trafficMirrorSession_trafficMirrorFilterId,
+    trafficMirrorSession_trafficMirrorSessionId,
+    trafficMirrorSession_trafficMirrorTargetId,
+    trafficMirrorSession_virtualNetworkId,
+
+    -- ** TrafficMirrorTarget
+    trafficMirrorTarget_description,
+    trafficMirrorTarget_gatewayLoadBalancerEndpointId,
+    trafficMirrorTarget_networkInterfaceId,
+    trafficMirrorTarget_networkLoadBalancerArn,
+    trafficMirrorTarget_ownerId,
+    trafficMirrorTarget_tags,
+    trafficMirrorTarget_trafficMirrorTargetId,
+    trafficMirrorTarget_type,
+
+    -- ** TransitGateway
+    transitGateway_creationTime,
+    transitGateway_description,
+    transitGateway_options,
+    transitGateway_ownerId,
+    transitGateway_state,
+    transitGateway_tags,
+    transitGateway_transitGatewayArn,
+    transitGateway_transitGatewayId,
+
+    -- ** TransitGatewayAssociation
+    transitGatewayAssociation_resourceId,
+    transitGatewayAssociation_resourceType,
+    transitGatewayAssociation_state,
+    transitGatewayAssociation_transitGatewayAttachmentId,
+    transitGatewayAssociation_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayAttachment
+    transitGatewayAttachment_association,
+    transitGatewayAttachment_creationTime,
+    transitGatewayAttachment_resourceId,
+    transitGatewayAttachment_resourceOwnerId,
+    transitGatewayAttachment_resourceType,
+    transitGatewayAttachment_state,
+    transitGatewayAttachment_tags,
+    transitGatewayAttachment_transitGatewayAttachmentId,
+    transitGatewayAttachment_transitGatewayId,
+    transitGatewayAttachment_transitGatewayOwnerId,
+
+    -- ** TransitGatewayAttachmentAssociation
+    transitGatewayAttachmentAssociation_state,
+    transitGatewayAttachmentAssociation_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayAttachmentBgpConfiguration
+    transitGatewayAttachmentBgpConfiguration_bgpStatus,
+    transitGatewayAttachmentBgpConfiguration_peerAddress,
+    transitGatewayAttachmentBgpConfiguration_peerAsn,
+    transitGatewayAttachmentBgpConfiguration_transitGatewayAddress,
+    transitGatewayAttachmentBgpConfiguration_transitGatewayAsn,
+
+    -- ** TransitGatewayAttachmentPropagation
+    transitGatewayAttachmentPropagation_state,
+    transitGatewayAttachmentPropagation_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayConnect
+    transitGatewayConnect_creationTime,
+    transitGatewayConnect_options,
+    transitGatewayConnect_state,
+    transitGatewayConnect_tags,
+    transitGatewayConnect_transitGatewayAttachmentId,
+    transitGatewayConnect_transitGatewayId,
+    transitGatewayConnect_transportTransitGatewayAttachmentId,
+
+    -- ** TransitGatewayConnectOptions
+    transitGatewayConnectOptions_protocol,
+
+    -- ** TransitGatewayConnectPeer
+    transitGatewayConnectPeer_connectPeerConfiguration,
+    transitGatewayConnectPeer_creationTime,
+    transitGatewayConnectPeer_state,
+    transitGatewayConnectPeer_tags,
+    transitGatewayConnectPeer_transitGatewayAttachmentId,
+    transitGatewayConnectPeer_transitGatewayConnectPeerId,
+
+    -- ** TransitGatewayConnectPeerConfiguration
+    transitGatewayConnectPeerConfiguration_bgpConfigurations,
+    transitGatewayConnectPeerConfiguration_insideCidrBlocks,
+    transitGatewayConnectPeerConfiguration_peerAddress,
+    transitGatewayConnectPeerConfiguration_protocol,
+    transitGatewayConnectPeerConfiguration_transitGatewayAddress,
+
+    -- ** TransitGatewayConnectRequestBgpOptions
+    transitGatewayConnectRequestBgpOptions_peerAsn,
+
+    -- ** TransitGatewayMulticastDeregisteredGroupMembers
+    transitGatewayMulticastDeregisteredGroupMembers_deregisteredNetworkInterfaceIds,
+    transitGatewayMulticastDeregisteredGroupMembers_groupIpAddress,
+    transitGatewayMulticastDeregisteredGroupMembers_transitGatewayMulticastDomainId,
+
+    -- ** TransitGatewayMulticastDeregisteredGroupSources
+    transitGatewayMulticastDeregisteredGroupSources_deregisteredNetworkInterfaceIds,
+    transitGatewayMulticastDeregisteredGroupSources_groupIpAddress,
+    transitGatewayMulticastDeregisteredGroupSources_transitGatewayMulticastDomainId,
+
+    -- ** TransitGatewayMulticastDomain
+    transitGatewayMulticastDomain_creationTime,
+    transitGatewayMulticastDomain_options,
+    transitGatewayMulticastDomain_ownerId,
+    transitGatewayMulticastDomain_state,
+    transitGatewayMulticastDomain_tags,
+    transitGatewayMulticastDomain_transitGatewayId,
+    transitGatewayMulticastDomain_transitGatewayMulticastDomainArn,
+    transitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+
+    -- ** TransitGatewayMulticastDomainAssociation
+    transitGatewayMulticastDomainAssociation_resourceId,
+    transitGatewayMulticastDomainAssociation_resourceOwnerId,
+    transitGatewayMulticastDomainAssociation_resourceType,
+    transitGatewayMulticastDomainAssociation_subnet,
+    transitGatewayMulticastDomainAssociation_transitGatewayAttachmentId,
+
+    -- ** TransitGatewayMulticastDomainAssociations
+    transitGatewayMulticastDomainAssociations_resourceId,
+    transitGatewayMulticastDomainAssociations_resourceOwnerId,
+    transitGatewayMulticastDomainAssociations_resourceType,
+    transitGatewayMulticastDomainAssociations_subnets,
+    transitGatewayMulticastDomainAssociations_transitGatewayAttachmentId,
+    transitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+
+    -- ** TransitGatewayMulticastDomainOptions
+    transitGatewayMulticastDomainOptions_autoAcceptSharedAssociations,
+    transitGatewayMulticastDomainOptions_igmpv2Support,
+    transitGatewayMulticastDomainOptions_staticSourcesSupport,
+
+    -- ** TransitGatewayMulticastGroup
+    transitGatewayMulticastGroup_groupIpAddress,
+    transitGatewayMulticastGroup_groupMember,
+    transitGatewayMulticastGroup_groupSource,
+    transitGatewayMulticastGroup_memberType,
+    transitGatewayMulticastGroup_networkInterfaceId,
+    transitGatewayMulticastGroup_resourceId,
+    transitGatewayMulticastGroup_resourceOwnerId,
+    transitGatewayMulticastGroup_resourceType,
+    transitGatewayMulticastGroup_sourceType,
+    transitGatewayMulticastGroup_subnetId,
+    transitGatewayMulticastGroup_transitGatewayAttachmentId,
+
+    -- ** TransitGatewayMulticastRegisteredGroupMembers
+    transitGatewayMulticastRegisteredGroupMembers_groupIpAddress,
+    transitGatewayMulticastRegisteredGroupMembers_registeredNetworkInterfaceIds,
+    transitGatewayMulticastRegisteredGroupMembers_transitGatewayMulticastDomainId,
+
+    -- ** TransitGatewayMulticastRegisteredGroupSources
+    transitGatewayMulticastRegisteredGroupSources_groupIpAddress,
+    transitGatewayMulticastRegisteredGroupSources_registeredNetworkInterfaceIds,
+    transitGatewayMulticastRegisteredGroupSources_transitGatewayMulticastDomainId,
+
+    -- ** TransitGatewayOptions
+    transitGatewayOptions_amazonSideAsn,
+    transitGatewayOptions_associationDefaultRouteTableId,
+    transitGatewayOptions_autoAcceptSharedAttachments,
+    transitGatewayOptions_defaultRouteTableAssociation,
+    transitGatewayOptions_defaultRouteTablePropagation,
+    transitGatewayOptions_dnsSupport,
+    transitGatewayOptions_multicastSupport,
+    transitGatewayOptions_propagationDefaultRouteTableId,
+    transitGatewayOptions_transitGatewayCidrBlocks,
+    transitGatewayOptions_vpnEcmpSupport,
+
+    -- ** TransitGatewayPeeringAttachment
+    transitGatewayPeeringAttachment_accepterTgwInfo,
+    transitGatewayPeeringAttachment_accepterTransitGatewayAttachmentId,
+    transitGatewayPeeringAttachment_creationTime,
+    transitGatewayPeeringAttachment_options,
+    transitGatewayPeeringAttachment_requesterTgwInfo,
+    transitGatewayPeeringAttachment_state,
+    transitGatewayPeeringAttachment_status,
+    transitGatewayPeeringAttachment_tags,
+    transitGatewayPeeringAttachment_transitGatewayAttachmentId,
+
+    -- ** TransitGatewayPeeringAttachmentOptions
+    transitGatewayPeeringAttachmentOptions_dynamicRouting,
+
+    -- ** TransitGatewayPolicyRule
+    transitGatewayPolicyRule_destinationCidrBlock,
+    transitGatewayPolicyRule_destinationPortRange,
+    transitGatewayPolicyRule_metaData,
+    transitGatewayPolicyRule_protocol,
+    transitGatewayPolicyRule_sourceCidrBlock,
+    transitGatewayPolicyRule_sourcePortRange,
+
+    -- ** TransitGatewayPolicyRuleMetaData
+    transitGatewayPolicyRuleMetaData_metaDataKey,
+    transitGatewayPolicyRuleMetaData_metaDataValue,
+
+    -- ** TransitGatewayPolicyTable
+    transitGatewayPolicyTable_creationTime,
+    transitGatewayPolicyTable_state,
+    transitGatewayPolicyTable_tags,
+    transitGatewayPolicyTable_transitGatewayId,
+    transitGatewayPolicyTable_transitGatewayPolicyTableId,
+
+    -- ** TransitGatewayPolicyTableAssociation
+    transitGatewayPolicyTableAssociation_resourceId,
+    transitGatewayPolicyTableAssociation_resourceType,
+    transitGatewayPolicyTableAssociation_state,
+    transitGatewayPolicyTableAssociation_transitGatewayAttachmentId,
+    transitGatewayPolicyTableAssociation_transitGatewayPolicyTableId,
+
+    -- ** TransitGatewayPolicyTableEntry
+    transitGatewayPolicyTableEntry_policyRule,
+    transitGatewayPolicyTableEntry_policyRuleNumber,
+    transitGatewayPolicyTableEntry_targetRouteTableId,
+
+    -- ** TransitGatewayPrefixListAttachment
+    transitGatewayPrefixListAttachment_resourceId,
+    transitGatewayPrefixListAttachment_resourceType,
+    transitGatewayPrefixListAttachment_transitGatewayAttachmentId,
+
+    -- ** TransitGatewayPrefixListReference
+    transitGatewayPrefixListReference_blackhole,
+    transitGatewayPrefixListReference_prefixListId,
+    transitGatewayPrefixListReference_prefixListOwnerId,
+    transitGatewayPrefixListReference_state,
+    transitGatewayPrefixListReference_transitGatewayAttachment,
+    transitGatewayPrefixListReference_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayPropagation
+    transitGatewayPropagation_resourceId,
+    transitGatewayPropagation_resourceType,
+    transitGatewayPropagation_state,
+    transitGatewayPropagation_transitGatewayAttachmentId,
+    transitGatewayPropagation_transitGatewayRouteTableAnnouncementId,
+    transitGatewayPropagation_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayRequestOptions
+    transitGatewayRequestOptions_amazonSideAsn,
+    transitGatewayRequestOptions_autoAcceptSharedAttachments,
+    transitGatewayRequestOptions_defaultRouteTableAssociation,
+    transitGatewayRequestOptions_defaultRouteTablePropagation,
+    transitGatewayRequestOptions_dnsSupport,
+    transitGatewayRequestOptions_multicastSupport,
+    transitGatewayRequestOptions_transitGatewayCidrBlocks,
+    transitGatewayRequestOptions_vpnEcmpSupport,
+
+    -- ** TransitGatewayRoute
+    transitGatewayRoute_destinationCidrBlock,
+    transitGatewayRoute_prefixListId,
+    transitGatewayRoute_state,
+    transitGatewayRoute_transitGatewayAttachments,
+    transitGatewayRoute_transitGatewayRouteTableAnnouncementId,
+    transitGatewayRoute_type,
+
+    -- ** TransitGatewayRouteAttachment
+    transitGatewayRouteAttachment_resourceId,
+    transitGatewayRouteAttachment_resourceType,
+    transitGatewayRouteAttachment_transitGatewayAttachmentId,
+
+    -- ** TransitGatewayRouteTable
+    transitGatewayRouteTable_creationTime,
+    transitGatewayRouteTable_defaultAssociationRouteTable,
+    transitGatewayRouteTable_defaultPropagationRouteTable,
+    transitGatewayRouteTable_state,
+    transitGatewayRouteTable_tags,
+    transitGatewayRouteTable_transitGatewayId,
+    transitGatewayRouteTable_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayRouteTableAnnouncement
+    transitGatewayRouteTableAnnouncement_announcementDirection,
+    transitGatewayRouteTableAnnouncement_coreNetworkId,
+    transitGatewayRouteTableAnnouncement_creationTime,
+    transitGatewayRouteTableAnnouncement_peerCoreNetworkId,
+    transitGatewayRouteTableAnnouncement_peerTransitGatewayId,
+    transitGatewayRouteTableAnnouncement_peeringAttachmentId,
+    transitGatewayRouteTableAnnouncement_state,
+    transitGatewayRouteTableAnnouncement_tags,
+    transitGatewayRouteTableAnnouncement_transitGatewayId,
+    transitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId,
+    transitGatewayRouteTableAnnouncement_transitGatewayRouteTableId,
+
+    -- ** TransitGatewayRouteTableAssociation
+    transitGatewayRouteTableAssociation_resourceId,
+    transitGatewayRouteTableAssociation_resourceType,
+    transitGatewayRouteTableAssociation_state,
+    transitGatewayRouteTableAssociation_transitGatewayAttachmentId,
+
+    -- ** TransitGatewayRouteTablePropagation
+    transitGatewayRouteTablePropagation_resourceId,
+    transitGatewayRouteTablePropagation_resourceType,
+    transitGatewayRouteTablePropagation_state,
+    transitGatewayRouteTablePropagation_transitGatewayAttachmentId,
+    transitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId,
+
+    -- ** TransitGatewayRouteTableRoute
+    transitGatewayRouteTableRoute_attachmentId,
+    transitGatewayRouteTableRoute_destinationCidr,
+    transitGatewayRouteTableRoute_prefixListId,
+    transitGatewayRouteTableRoute_resourceId,
+    transitGatewayRouteTableRoute_resourceType,
+    transitGatewayRouteTableRoute_routeOrigin,
+    transitGatewayRouteTableRoute_state,
+
+    -- ** TransitGatewayVpcAttachment
+    transitGatewayVpcAttachment_creationTime,
+    transitGatewayVpcAttachment_options,
+    transitGatewayVpcAttachment_state,
+    transitGatewayVpcAttachment_subnetIds,
+    transitGatewayVpcAttachment_tags,
+    transitGatewayVpcAttachment_transitGatewayAttachmentId,
+    transitGatewayVpcAttachment_transitGatewayId,
+    transitGatewayVpcAttachment_vpcId,
+    transitGatewayVpcAttachment_vpcOwnerId,
+
+    -- ** TransitGatewayVpcAttachmentOptions
+    transitGatewayVpcAttachmentOptions_applianceModeSupport,
+    transitGatewayVpcAttachmentOptions_dnsSupport,
+    transitGatewayVpcAttachmentOptions_ipv6Support,
+
+    -- ** TrunkInterfaceAssociation
+    trunkInterfaceAssociation_associationId,
+    trunkInterfaceAssociation_branchInterfaceId,
+    trunkInterfaceAssociation_greKey,
+    trunkInterfaceAssociation_interfaceProtocol,
+    trunkInterfaceAssociation_tags,
+    trunkInterfaceAssociation_trunkInterfaceId,
+    trunkInterfaceAssociation_vlanId,
+
+    -- ** TunnelOption
+    tunnelOption_dpdTimeoutAction,
+    tunnelOption_dpdTimeoutSeconds,
+    tunnelOption_ikeVersions,
+    tunnelOption_logOptions,
+    tunnelOption_outsideIpAddress,
+    tunnelOption_phase1DHGroupNumbers,
+    tunnelOption_phase1EncryptionAlgorithms,
+    tunnelOption_phase1IntegrityAlgorithms,
+    tunnelOption_phase1LifetimeSeconds,
+    tunnelOption_phase2DHGroupNumbers,
+    tunnelOption_phase2EncryptionAlgorithms,
+    tunnelOption_phase2IntegrityAlgorithms,
+    tunnelOption_phase2LifetimeSeconds,
+    tunnelOption_preSharedKey,
+    tunnelOption_rekeyFuzzPercentage,
+    tunnelOption_rekeyMarginTimeSeconds,
+    tunnelOption_replayWindowSize,
+    tunnelOption_startupAction,
+    tunnelOption_tunnelInsideCidr,
+    tunnelOption_tunnelInsideIpv6Cidr,
+
+    -- ** UnsuccessfulInstanceCreditSpecificationItem
+    unsuccessfulInstanceCreditSpecificationItem_error,
+    unsuccessfulInstanceCreditSpecificationItem_instanceId,
+
+    -- ** UnsuccessfulInstanceCreditSpecificationItemError
+    unsuccessfulInstanceCreditSpecificationItemError_code,
+    unsuccessfulInstanceCreditSpecificationItemError_message,
+
+    -- ** UnsuccessfulItem
+    unsuccessfulItem_error,
+    unsuccessfulItem_resourceId,
+
+    -- ** UnsuccessfulItemError
+    unsuccessfulItemError_code,
+    unsuccessfulItemError_message,
+
+    -- ** UserBucket
+    userBucket_s3Bucket,
+    userBucket_s3Key,
+
+    -- ** UserBucketDetails
+    userBucketDetails_s3Bucket,
+    userBucketDetails_s3Key,
+
+    -- ** UserData
+    userData_data,
+
+    -- ** UserIdGroupPair
+    userIdGroupPair_description,
+    userIdGroupPair_groupId,
+    userIdGroupPair_groupName,
+    userIdGroupPair_peeringStatus,
+    userIdGroupPair_userId,
+    userIdGroupPair_vpcId,
+    userIdGroupPair_vpcPeeringConnectionId,
+
+    -- ** VCpuCountRange
+    vCpuCountRange_max,
+    vCpuCountRange_min,
+
+    -- ** VCpuCountRangeRequest
+    vCpuCountRangeRequest_max,
+    vCpuCountRangeRequest_min,
+
+    -- ** VCpuInfo
+    vCpuInfo_defaultCores,
+    vCpuInfo_defaultThreadsPerCore,
+    vCpuInfo_defaultVCpus,
+    vCpuInfo_validCores,
+    vCpuInfo_validThreadsPerCore,
+
+    -- ** ValidationError
+    validationError_code,
+    validationError_message,
+
+    -- ** ValidationWarning
+    validationWarning_errors,
+
+    -- ** VerifiedAccessEndpoint
+    verifiedAccessEndpoint_applicationDomain,
+    verifiedAccessEndpoint_attachmentType,
+    verifiedAccessEndpoint_creationTime,
+    verifiedAccessEndpoint_deletionTime,
+    verifiedAccessEndpoint_description,
+    verifiedAccessEndpoint_deviceValidationDomain,
+    verifiedAccessEndpoint_domainCertificateArn,
+    verifiedAccessEndpoint_endpointDomain,
+    verifiedAccessEndpoint_endpointType,
+    verifiedAccessEndpoint_lastUpdatedTime,
+    verifiedAccessEndpoint_loadBalancerOptions,
+    verifiedAccessEndpoint_networkInterfaceOptions,
+    verifiedAccessEndpoint_securityGroupIds,
+    verifiedAccessEndpoint_status,
+    verifiedAccessEndpoint_tags,
+    verifiedAccessEndpoint_verifiedAccessEndpointId,
+    verifiedAccessEndpoint_verifiedAccessGroupId,
+    verifiedAccessEndpoint_verifiedAccessInstanceId,
+
+    -- ** VerifiedAccessEndpointEniOptions
+    verifiedAccessEndpointEniOptions_networkInterfaceId,
+    verifiedAccessEndpointEniOptions_port,
+    verifiedAccessEndpointEniOptions_protocol,
+
+    -- ** VerifiedAccessEndpointLoadBalancerOptions
+    verifiedAccessEndpointLoadBalancerOptions_loadBalancerArn,
+    verifiedAccessEndpointLoadBalancerOptions_port,
+    verifiedAccessEndpointLoadBalancerOptions_protocol,
+    verifiedAccessEndpointLoadBalancerOptions_subnetIds,
+
+    -- ** VerifiedAccessEndpointStatus
+    verifiedAccessEndpointStatus_code,
+    verifiedAccessEndpointStatus_message,
+
+    -- ** VerifiedAccessGroup
+    verifiedAccessGroup_creationTime,
+    verifiedAccessGroup_deletionTime,
+    verifiedAccessGroup_description,
+    verifiedAccessGroup_lastUpdatedTime,
+    verifiedAccessGroup_owner,
+    verifiedAccessGroup_tags,
+    verifiedAccessGroup_verifiedAccessGroupArn,
+    verifiedAccessGroup_verifiedAccessGroupId,
+    verifiedAccessGroup_verifiedAccessInstanceId,
+
+    -- ** VerifiedAccessInstance
+    verifiedAccessInstance_creationTime,
+    verifiedAccessInstance_description,
+    verifiedAccessInstance_lastUpdatedTime,
+    verifiedAccessInstance_tags,
+    verifiedAccessInstance_verifiedAccessInstanceId,
+    verifiedAccessInstance_verifiedAccessTrustProviders,
+
+    -- ** VerifiedAccessInstanceLoggingConfiguration
+    verifiedAccessInstanceLoggingConfiguration_accessLogs,
+    verifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId,
+
+    -- ** VerifiedAccessLogCloudWatchLogsDestination
+    verifiedAccessLogCloudWatchLogsDestination_deliveryStatus,
+    verifiedAccessLogCloudWatchLogsDestination_enabled,
+    verifiedAccessLogCloudWatchLogsDestination_logGroup,
+
+    -- ** VerifiedAccessLogCloudWatchLogsDestinationOptions
+    verifiedAccessLogCloudWatchLogsDestinationOptions_logGroup,
+    verifiedAccessLogCloudWatchLogsDestinationOptions_enabled,
+
+    -- ** VerifiedAccessLogDeliveryStatus
+    verifiedAccessLogDeliveryStatus_code,
+    verifiedAccessLogDeliveryStatus_message,
+
+    -- ** VerifiedAccessLogKinesisDataFirehoseDestination
+    verifiedAccessLogKinesisDataFirehoseDestination_deliveryStatus,
+    verifiedAccessLogKinesisDataFirehoseDestination_deliveryStream,
+    verifiedAccessLogKinesisDataFirehoseDestination_enabled,
+
+    -- ** VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+    verifiedAccessLogKinesisDataFirehoseDestinationOptions_deliveryStream,
+    verifiedAccessLogKinesisDataFirehoseDestinationOptions_enabled,
+
+    -- ** VerifiedAccessLogOptions
+    verifiedAccessLogOptions_cloudWatchLogs,
+    verifiedAccessLogOptions_kinesisDataFirehose,
+    verifiedAccessLogOptions_s3,
+
+    -- ** VerifiedAccessLogS3Destination
+    verifiedAccessLogS3Destination_bucketName,
+    verifiedAccessLogS3Destination_bucketOwner,
+    verifiedAccessLogS3Destination_deliveryStatus,
+    verifiedAccessLogS3Destination_enabled,
+    verifiedAccessLogS3Destination_prefix,
+
+    -- ** VerifiedAccessLogS3DestinationOptions
+    verifiedAccessLogS3DestinationOptions_bucketName,
+    verifiedAccessLogS3DestinationOptions_bucketOwner,
+    verifiedAccessLogS3DestinationOptions_prefix,
+    verifiedAccessLogS3DestinationOptions_enabled,
+
+    -- ** VerifiedAccessLogs
+    verifiedAccessLogs_cloudWatchLogs,
+    verifiedAccessLogs_kinesisDataFirehose,
+    verifiedAccessLogs_s3,
+
+    -- ** VerifiedAccessTrustProvider
+    verifiedAccessTrustProvider_creationTime,
+    verifiedAccessTrustProvider_description,
+    verifiedAccessTrustProvider_deviceOptions,
+    verifiedAccessTrustProvider_deviceTrustProviderType,
+    verifiedAccessTrustProvider_lastUpdatedTime,
+    verifiedAccessTrustProvider_oidcOptions,
+    verifiedAccessTrustProvider_policyReferenceName,
+    verifiedAccessTrustProvider_tags,
+    verifiedAccessTrustProvider_trustProviderType,
+    verifiedAccessTrustProvider_userTrustProviderType,
+    verifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+
+    -- ** VerifiedAccessTrustProviderCondensed
+    verifiedAccessTrustProviderCondensed_description,
+    verifiedAccessTrustProviderCondensed_deviceTrustProviderType,
+    verifiedAccessTrustProviderCondensed_trustProviderType,
+    verifiedAccessTrustProviderCondensed_userTrustProviderType,
+    verifiedAccessTrustProviderCondensed_verifiedAccessTrustProviderId,
+
+    -- ** VgwTelemetry
+    vgwTelemetry_acceptedRouteCount,
+    vgwTelemetry_certificateArn,
+    vgwTelemetry_lastStatusChange,
+    vgwTelemetry_outsideIpAddress,
+    vgwTelemetry_status,
+    vgwTelemetry_statusMessage,
+
+    -- ** Volume
+    volume_attachments,
+    volume_fastRestored,
+    volume_iops,
+    volume_kmsKeyId,
+    volume_multiAttachEnabled,
+    volume_outpostArn,
+    volume_tags,
+    volume_throughput,
+    volume_availabilityZone,
+    volume_createTime,
+    volume_encrypted,
+    volume_size,
+    volume_snapshotId,
+    volume_state,
+    volume_volumeId,
+    volume_volumeType,
+
+    -- ** VolumeAttachment
+    volumeAttachment_attachTime,
+    volumeAttachment_deleteOnTermination,
+    volumeAttachment_device,
+    volumeAttachment_instanceId,
+    volumeAttachment_state,
+    volumeAttachment_volumeId,
+
+    -- ** VolumeDetail
+    volumeDetail_size,
+
+    -- ** VolumeModification
+    volumeModification_endTime,
+    volumeModification_modificationState,
+    volumeModification_originalIops,
+    volumeModification_originalMultiAttachEnabled,
+    volumeModification_originalSize,
+    volumeModification_originalThroughput,
+    volumeModification_originalVolumeType,
+    volumeModification_progress,
+    volumeModification_startTime,
+    volumeModification_statusMessage,
+    volumeModification_targetIops,
+    volumeModification_targetMultiAttachEnabled,
+    volumeModification_targetSize,
+    volumeModification_targetThroughput,
+    volumeModification_targetVolumeType,
+    volumeModification_volumeId,
+
+    -- ** VolumeStatusAction
+    volumeStatusAction_code,
+    volumeStatusAction_description,
+    volumeStatusAction_eventId,
+    volumeStatusAction_eventType,
+
+    -- ** VolumeStatusAttachmentStatus
+    volumeStatusAttachmentStatus_instanceId,
+    volumeStatusAttachmentStatus_ioPerformance,
+
+    -- ** VolumeStatusDetails
+    volumeStatusDetails_name,
+    volumeStatusDetails_status,
+
+    -- ** VolumeStatusEvent
+    volumeStatusEvent_description,
+    volumeStatusEvent_eventId,
+    volumeStatusEvent_eventType,
+    volumeStatusEvent_instanceId,
+    volumeStatusEvent_notAfter,
+    volumeStatusEvent_notBefore,
+
+    -- ** VolumeStatusInfo
+    volumeStatusInfo_details,
+    volumeStatusInfo_status,
+
+    -- ** VolumeStatusItem
+    volumeStatusItem_actions,
+    volumeStatusItem_attachmentStatuses,
+    volumeStatusItem_availabilityZone,
+    volumeStatusItem_events,
+    volumeStatusItem_outpostArn,
+    volumeStatusItem_volumeId,
+    volumeStatusItem_volumeStatus,
+
+    -- ** Vpc
+    vpc_cidrBlockAssociationSet,
+    vpc_ipv6CidrBlockAssociationSet,
+    vpc_isDefault,
+    vpc_ownerId,
+    vpc_tags,
+    vpc_cidrBlock,
+    vpc_dhcpOptionsId,
+    vpc_instanceTenancy,
+    vpc_state,
+    vpc_vpcId,
+
+    -- ** VpcAttachment
+    vpcAttachment_state,
+    vpcAttachment_vpcId,
+
+    -- ** VpcCidrBlockAssociation
+    vpcCidrBlockAssociation_associationId,
+    vpcCidrBlockAssociation_cidrBlock,
+    vpcCidrBlockAssociation_cidrBlockState,
+
+    -- ** VpcCidrBlockState
+    vpcCidrBlockState_state,
+    vpcCidrBlockState_statusMessage,
+
+    -- ** VpcClassicLink
+    vpcClassicLink_classicLinkEnabled,
+    vpcClassicLink_tags,
+    vpcClassicLink_vpcId,
+
+    -- ** VpcEndpoint
+    vpcEndpoint_creationTimestamp,
+    vpcEndpoint_dnsEntries,
+    vpcEndpoint_dnsOptions,
+    vpcEndpoint_groups,
+    vpcEndpoint_ipAddressType,
+    vpcEndpoint_lastError,
+    vpcEndpoint_networkInterfaceIds,
+    vpcEndpoint_ownerId,
+    vpcEndpoint_policyDocument,
+    vpcEndpoint_privateDnsEnabled,
+    vpcEndpoint_requesterManaged,
+    vpcEndpoint_routeTableIds,
+    vpcEndpoint_serviceName,
+    vpcEndpoint_state,
+    vpcEndpoint_subnetIds,
+    vpcEndpoint_tags,
+    vpcEndpoint_vpcEndpointId,
+    vpcEndpoint_vpcEndpointType,
+    vpcEndpoint_vpcId,
+
+    -- ** VpcEndpointConnection
+    vpcEndpointConnection_creationTimestamp,
+    vpcEndpointConnection_dnsEntries,
+    vpcEndpointConnection_gatewayLoadBalancerArns,
+    vpcEndpointConnection_ipAddressType,
+    vpcEndpointConnection_networkLoadBalancerArns,
+    vpcEndpointConnection_serviceId,
+    vpcEndpointConnection_tags,
+    vpcEndpointConnection_vpcEndpointConnectionId,
+    vpcEndpointConnection_vpcEndpointId,
+    vpcEndpointConnection_vpcEndpointOwner,
+    vpcEndpointConnection_vpcEndpointState,
+
+    -- ** VpcIpv6CidrBlockAssociation
+    vpcIpv6CidrBlockAssociation_associationId,
+    vpcIpv6CidrBlockAssociation_ipv6CidrBlock,
+    vpcIpv6CidrBlockAssociation_ipv6CidrBlockState,
+    vpcIpv6CidrBlockAssociation_ipv6Pool,
+    vpcIpv6CidrBlockAssociation_networkBorderGroup,
+
+    -- ** VpcPeeringConnection
+    vpcPeeringConnection_accepterVpcInfo,
+    vpcPeeringConnection_expirationTime,
+    vpcPeeringConnection_requesterVpcInfo,
+    vpcPeeringConnection_status,
+    vpcPeeringConnection_tags,
+    vpcPeeringConnection_vpcPeeringConnectionId,
+
+    -- ** VpcPeeringConnectionOptionsDescription
+    vpcPeeringConnectionOptionsDescription_allowDnsResolutionFromRemoteVpc,
+    vpcPeeringConnectionOptionsDescription_allowEgressFromLocalClassicLinkToRemoteVpc,
+    vpcPeeringConnectionOptionsDescription_allowEgressFromLocalVpcToRemoteClassicLink,
+
+    -- ** VpcPeeringConnectionStateReason
+    vpcPeeringConnectionStateReason_code,
+    vpcPeeringConnectionStateReason_message,
+
+    -- ** VpcPeeringConnectionVpcInfo
+    vpcPeeringConnectionVpcInfo_cidrBlock,
+    vpcPeeringConnectionVpcInfo_cidrBlockSet,
+    vpcPeeringConnectionVpcInfo_ipv6CidrBlockSet,
+    vpcPeeringConnectionVpcInfo_ownerId,
+    vpcPeeringConnectionVpcInfo_peeringOptions,
+    vpcPeeringConnectionVpcInfo_region,
+    vpcPeeringConnectionVpcInfo_vpcId,
+
+    -- ** VpnConnection
+    vpnConnection_category,
+    vpnConnection_coreNetworkArn,
+    vpnConnection_coreNetworkAttachmentArn,
+    vpnConnection_customerGatewayConfiguration,
+    vpnConnection_gatewayAssociationState,
+    vpnConnection_options,
+    vpnConnection_routes,
+    vpnConnection_tags,
+    vpnConnection_transitGatewayId,
+    vpnConnection_vgwTelemetry,
+    vpnConnection_vpnGatewayId,
+    vpnConnection_vpnConnectionId,
+    vpnConnection_customerGatewayId,
+    vpnConnection_state,
+    vpnConnection_type,
+
+    -- ** VpnConnectionDeviceType
+    vpnConnectionDeviceType_platform,
+    vpnConnectionDeviceType_software,
+    vpnConnectionDeviceType_vendor,
+    vpnConnectionDeviceType_vpnConnectionDeviceTypeId,
+
+    -- ** VpnConnectionOptions
+    vpnConnectionOptions_enableAcceleration,
+    vpnConnectionOptions_localIpv4NetworkCidr,
+    vpnConnectionOptions_localIpv6NetworkCidr,
+    vpnConnectionOptions_outsideIpAddressType,
+    vpnConnectionOptions_remoteIpv4NetworkCidr,
+    vpnConnectionOptions_remoteIpv6NetworkCidr,
+    vpnConnectionOptions_staticRoutesOnly,
+    vpnConnectionOptions_transportTransitGatewayAttachmentId,
+    vpnConnectionOptions_tunnelInsideIpVersion,
+    vpnConnectionOptions_tunnelOptions,
+
+    -- ** VpnConnectionOptionsSpecification
+    vpnConnectionOptionsSpecification_enableAcceleration,
+    vpnConnectionOptionsSpecification_localIpv4NetworkCidr,
+    vpnConnectionOptionsSpecification_localIpv6NetworkCidr,
+    vpnConnectionOptionsSpecification_outsideIpAddressType,
+    vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr,
+    vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr,
+    vpnConnectionOptionsSpecification_staticRoutesOnly,
+    vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId,
+    vpnConnectionOptionsSpecification_tunnelInsideIpVersion,
+    vpnConnectionOptionsSpecification_tunnelOptions,
+
+    -- ** VpnGateway
+    vpnGateway_amazonSideAsn,
+    vpnGateway_availabilityZone,
+    vpnGateway_state,
+    vpnGateway_tags,
+    vpnGateway_type,
+    vpnGateway_vpcAttachments,
+    vpnGateway_vpnGatewayId,
+
+    -- ** VpnStaticRoute
+    vpnStaticRoute_destinationCidrBlock,
+    vpnStaticRoute_source,
+    vpnStaticRoute_state,
+
+    -- ** VpnTunnelLogOptions
+    vpnTunnelLogOptions_cloudWatchLogOptions,
+
+    -- ** VpnTunnelLogOptionsSpecification
+    vpnTunnelLogOptionsSpecification_cloudWatchLogOptions,
+
+    -- ** VpnTunnelOptionsSpecification
+    vpnTunnelOptionsSpecification_dPDTimeoutAction,
+    vpnTunnelOptionsSpecification_dPDTimeoutSeconds,
+    vpnTunnelOptionsSpecification_iKEVersions,
+    vpnTunnelOptionsSpecification_logOptions,
+    vpnTunnelOptionsSpecification_phase1DHGroupNumbers,
+    vpnTunnelOptionsSpecification_phase1EncryptionAlgorithms,
+    vpnTunnelOptionsSpecification_phase1IntegrityAlgorithms,
+    vpnTunnelOptionsSpecification_phase1LifetimeSeconds,
+    vpnTunnelOptionsSpecification_phase2DHGroupNumbers,
+    vpnTunnelOptionsSpecification_phase2EncryptionAlgorithms,
+    vpnTunnelOptionsSpecification_phase2IntegrityAlgorithms,
+    vpnTunnelOptionsSpecification_phase2LifetimeSeconds,
+    vpnTunnelOptionsSpecification_preSharedKey,
+    vpnTunnelOptionsSpecification_rekeyFuzzPercentage,
+    vpnTunnelOptionsSpecification_rekeyMarginTimeSeconds,
+    vpnTunnelOptionsSpecification_replayWindowSize,
+    vpnTunnelOptionsSpecification_startupAction,
+    vpnTunnelOptionsSpecification_tunnelInsideCidr,
+    vpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr,
+  )
+where
+
+import Amazonka.EC2.AcceptAddressTransfer
+import Amazonka.EC2.AcceptReservedInstancesExchangeQuote
+import Amazonka.EC2.AcceptTransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.AcceptTransitGatewayPeeringAttachment
+import Amazonka.EC2.AcceptTransitGatewayVpcAttachment
+import Amazonka.EC2.AcceptVpcEndpointConnections
+import Amazonka.EC2.AcceptVpcPeeringConnection
+import Amazonka.EC2.AdvertiseByoipCidr
+import Amazonka.EC2.AllocateAddress
+import Amazonka.EC2.AllocateHosts
+import Amazonka.EC2.AllocateIpamPoolCidr
+import Amazonka.EC2.ApplySecurityGroupsToClientVpnTargetNetwork
+import Amazonka.EC2.AssignIpv6Addresses
+import Amazonka.EC2.AssignPrivateIpAddresses
+import Amazonka.EC2.AssociateAddress
+import Amazonka.EC2.AssociateClientVpnTargetNetwork
+import Amazonka.EC2.AssociateDhcpOptions
+import Amazonka.EC2.AssociateEnclaveCertificateIamRole
+import Amazonka.EC2.AssociateIamInstanceProfile
+import Amazonka.EC2.AssociateInstanceEventWindow
+import Amazonka.EC2.AssociateRouteTable
+import Amazonka.EC2.AssociateSubnetCidrBlock
+import Amazonka.EC2.AssociateTransitGatewayMulticastDomain
+import Amazonka.EC2.AssociateTransitGatewayPolicyTable
+import Amazonka.EC2.AssociateTransitGatewayRouteTable
+import Amazonka.EC2.AssociateTrunkInterface
+import Amazonka.EC2.AssociateVpcCidrBlock
+import Amazonka.EC2.AttachClassicLinkVpc
+import Amazonka.EC2.AttachInternetGateway
+import Amazonka.EC2.AttachNetworkInterface
+import Amazonka.EC2.AttachVerifiedAccessTrustProvider
+import Amazonka.EC2.AttachVolume
+import Amazonka.EC2.AttachVpnGateway
+import Amazonka.EC2.AuthorizeClientVpnIngress
+import Amazonka.EC2.AuthorizeSecurityGroupEgress
+import Amazonka.EC2.AuthorizeSecurityGroupIngress
+import Amazonka.EC2.BundleInstance
+import Amazonka.EC2.CancelBundleTask
+import Amazonka.EC2.CancelCapacityReservation
+import Amazonka.EC2.CancelCapacityReservationFleets
+import Amazonka.EC2.CancelConversionTask
+import Amazonka.EC2.CancelExportTask
+import Amazonka.EC2.CancelImageLaunchPermission
+import Amazonka.EC2.CancelImportTask
+import Amazonka.EC2.CancelReservedInstancesListing
+import Amazonka.EC2.CancelSpotFleetRequests
+import Amazonka.EC2.CancelSpotInstanceRequests
+import Amazonka.EC2.ConfirmProductInstance
+import Amazonka.EC2.CopyFpgaImage
+import Amazonka.EC2.CopyImage
+import Amazonka.EC2.CopySnapshot
+import Amazonka.EC2.CreateCapacityReservation
+import Amazonka.EC2.CreateCapacityReservationFleet
+import Amazonka.EC2.CreateCarrierGateway
+import Amazonka.EC2.CreateClientVpnEndpoint
+import Amazonka.EC2.CreateClientVpnRoute
+import Amazonka.EC2.CreateCoipCidr
+import Amazonka.EC2.CreateCoipPool
+import Amazonka.EC2.CreateCustomerGateway
+import Amazonka.EC2.CreateDefaultSubnet
+import Amazonka.EC2.CreateDefaultVpc
+import Amazonka.EC2.CreateDhcpOptions
+import Amazonka.EC2.CreateEgressOnlyInternetGateway
+import Amazonka.EC2.CreateFleet
+import Amazonka.EC2.CreateFlowLogs
+import Amazonka.EC2.CreateFpgaImage
+import Amazonka.EC2.CreateImage
+import Amazonka.EC2.CreateInstanceEventWindow
+import Amazonka.EC2.CreateInstanceExportTask
+import Amazonka.EC2.CreateInternetGateway
+import Amazonka.EC2.CreateIpam
+import Amazonka.EC2.CreateIpamPool
+import Amazonka.EC2.CreateIpamScope
+import Amazonka.EC2.CreateKeyPair
+import Amazonka.EC2.CreateLaunchTemplate
+import Amazonka.EC2.CreateLaunchTemplateVersion
+import Amazonka.EC2.CreateLocalGatewayRoute
+import Amazonka.EC2.CreateLocalGatewayRouteTable
+import Amazonka.EC2.CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+import Amazonka.EC2.CreateLocalGatewayRouteTableVpcAssociation
+import Amazonka.EC2.CreateManagedPrefixList
+import Amazonka.EC2.CreateNatGateway
+import Amazonka.EC2.CreateNetworkAcl
+import Amazonka.EC2.CreateNetworkAclEntry
+import Amazonka.EC2.CreateNetworkInsightsAccessScope
+import Amazonka.EC2.CreateNetworkInsightsPath
+import Amazonka.EC2.CreateNetworkInterface
+import Amazonka.EC2.CreateNetworkInterfacePermission
+import Amazonka.EC2.CreatePlacementGroup
+import Amazonka.EC2.CreatePublicIpv4Pool
+import Amazonka.EC2.CreateReplaceRootVolumeTask
+import Amazonka.EC2.CreateReservedInstancesListing
+import Amazonka.EC2.CreateRestoreImageTask
+import Amazonka.EC2.CreateRoute
+import Amazonka.EC2.CreateRouteTable
+import Amazonka.EC2.CreateSecurityGroup
+import Amazonka.EC2.CreateSnapshot
+import Amazonka.EC2.CreateSnapshots
+import Amazonka.EC2.CreateSpotDatafeedSubscription
+import Amazonka.EC2.CreateStoreImageTask
+import Amazonka.EC2.CreateSubnet
+import Amazonka.EC2.CreateSubnetCidrReservation
+import Amazonka.EC2.CreateTags
+import Amazonka.EC2.CreateTrafficMirrorFilter
+import Amazonka.EC2.CreateTrafficMirrorFilterRule
+import Amazonka.EC2.CreateTrafficMirrorSession
+import Amazonka.EC2.CreateTrafficMirrorTarget
+import Amazonka.EC2.CreateTransitGateway
+import Amazonka.EC2.CreateTransitGatewayConnect
+import Amazonka.EC2.CreateTransitGatewayConnectPeer
+import Amazonka.EC2.CreateTransitGatewayMulticastDomain
+import Amazonka.EC2.CreateTransitGatewayPeeringAttachment
+import Amazonka.EC2.CreateTransitGatewayPolicyTable
+import Amazonka.EC2.CreateTransitGatewayPrefixListReference
+import Amazonka.EC2.CreateTransitGatewayRoute
+import Amazonka.EC2.CreateTransitGatewayRouteTable
+import Amazonka.EC2.CreateTransitGatewayRouteTableAnnouncement
+import Amazonka.EC2.CreateTransitGatewayVpcAttachment
+import Amazonka.EC2.CreateVerifiedAccessEndpoint
+import Amazonka.EC2.CreateVerifiedAccessGroup
+import Amazonka.EC2.CreateVerifiedAccessInstance
+import Amazonka.EC2.CreateVerifiedAccessTrustProvider
+import Amazonka.EC2.CreateVolume
+import Amazonka.EC2.CreateVpc
+import Amazonka.EC2.CreateVpcEndpoint
+import Amazonka.EC2.CreateVpcEndpointConnectionNotification
+import Amazonka.EC2.CreateVpcEndpointServiceConfiguration
+import Amazonka.EC2.CreateVpcPeeringConnection
+import Amazonka.EC2.CreateVpnConnection
+import Amazonka.EC2.CreateVpnConnectionRoute
+import Amazonka.EC2.CreateVpnGateway
+import Amazonka.EC2.DeleteCarrierGateway
+import Amazonka.EC2.DeleteClientVpnEndpoint
+import Amazonka.EC2.DeleteClientVpnRoute
+import Amazonka.EC2.DeleteCoipCidr
+import Amazonka.EC2.DeleteCoipPool
+import Amazonka.EC2.DeleteCustomerGateway
+import Amazonka.EC2.DeleteDhcpOptions
+import Amazonka.EC2.DeleteEgressOnlyInternetGateway
+import Amazonka.EC2.DeleteFleets
+import Amazonka.EC2.DeleteFlowLogs
+import Amazonka.EC2.DeleteFpgaImage
+import Amazonka.EC2.DeleteInstanceEventWindow
+import Amazonka.EC2.DeleteInternetGateway
+import Amazonka.EC2.DeleteIpam
+import Amazonka.EC2.DeleteIpamPool
+import Amazonka.EC2.DeleteIpamScope
+import Amazonka.EC2.DeleteKeyPair
+import Amazonka.EC2.DeleteLaunchTemplate
+import Amazonka.EC2.DeleteLaunchTemplateVersions
+import Amazonka.EC2.DeleteLocalGatewayRoute
+import Amazonka.EC2.DeleteLocalGatewayRouteTable
+import Amazonka.EC2.DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+import Amazonka.EC2.DeleteLocalGatewayRouteTableVpcAssociation
+import Amazonka.EC2.DeleteManagedPrefixList
+import Amazonka.EC2.DeleteNatGateway
+import Amazonka.EC2.DeleteNetworkAcl
+import Amazonka.EC2.DeleteNetworkAclEntry
+import Amazonka.EC2.DeleteNetworkInsightsAccessScope
+import Amazonka.EC2.DeleteNetworkInsightsAccessScopeAnalysis
+import Amazonka.EC2.DeleteNetworkInsightsAnalysis
+import Amazonka.EC2.DeleteNetworkInsightsPath
+import Amazonka.EC2.DeleteNetworkInterface
+import Amazonka.EC2.DeleteNetworkInterfacePermission
+import Amazonka.EC2.DeletePlacementGroup
+import Amazonka.EC2.DeletePublicIpv4Pool
+import Amazonka.EC2.DeleteQueuedReservedInstances
+import Amazonka.EC2.DeleteRoute
+import Amazonka.EC2.DeleteRouteTable
+import Amazonka.EC2.DeleteSecurityGroup
+import Amazonka.EC2.DeleteSnapshot
+import Amazonka.EC2.DeleteSpotDatafeedSubscription
+import Amazonka.EC2.DeleteSubnet
+import Amazonka.EC2.DeleteSubnetCidrReservation
+import Amazonka.EC2.DeleteTags
+import Amazonka.EC2.DeleteTrafficMirrorFilter
+import Amazonka.EC2.DeleteTrafficMirrorFilterRule
+import Amazonka.EC2.DeleteTrafficMirrorSession
+import Amazonka.EC2.DeleteTrafficMirrorTarget
+import Amazonka.EC2.DeleteTransitGateway
+import Amazonka.EC2.DeleteTransitGatewayConnect
+import Amazonka.EC2.DeleteTransitGatewayConnectPeer
+import Amazonka.EC2.DeleteTransitGatewayMulticastDomain
+import Amazonka.EC2.DeleteTransitGatewayPeeringAttachment
+import Amazonka.EC2.DeleteTransitGatewayPolicyTable
+import Amazonka.EC2.DeleteTransitGatewayPrefixListReference
+import Amazonka.EC2.DeleteTransitGatewayRoute
+import Amazonka.EC2.DeleteTransitGatewayRouteTable
+import Amazonka.EC2.DeleteTransitGatewayRouteTableAnnouncement
+import Amazonka.EC2.DeleteTransitGatewayVpcAttachment
+import Amazonka.EC2.DeleteVerifiedAccessEndpoint
+import Amazonka.EC2.DeleteVerifiedAccessGroup
+import Amazonka.EC2.DeleteVerifiedAccessInstance
+import Amazonka.EC2.DeleteVerifiedAccessTrustProvider
+import Amazonka.EC2.DeleteVolume
+import Amazonka.EC2.DeleteVpc
+import Amazonka.EC2.DeleteVpcEndpointConnectionNotifications
+import Amazonka.EC2.DeleteVpcEndpointServiceConfigurations
+import Amazonka.EC2.DeleteVpcEndpoints
+import Amazonka.EC2.DeleteVpcPeeringConnection
+import Amazonka.EC2.DeleteVpnConnection
+import Amazonka.EC2.DeleteVpnConnectionRoute
+import Amazonka.EC2.DeleteVpnGateway
+import Amazonka.EC2.DeprovisionByoipCidr
+import Amazonka.EC2.DeprovisionIpamPoolCidr
+import Amazonka.EC2.DeprovisionPublicIpv4PoolCidr
+import Amazonka.EC2.DeregisterImage
+import Amazonka.EC2.DeregisterInstanceEventNotificationAttributes
+import Amazonka.EC2.DeregisterTransitGatewayMulticastGroupMembers
+import Amazonka.EC2.DeregisterTransitGatewayMulticastGroupSources
+import Amazonka.EC2.DescribeAccountAttributes
+import Amazonka.EC2.DescribeAddressTransfers
+import Amazonka.EC2.DescribeAddresses
+import Amazonka.EC2.DescribeAddressesAttribute
+import Amazonka.EC2.DescribeAggregateIdFormat
+import Amazonka.EC2.DescribeAvailabilityZones
+import Amazonka.EC2.DescribeAwsNetworkPerformanceMetricSubscriptions
+import Amazonka.EC2.DescribeBundleTasks
+import Amazonka.EC2.DescribeByoipCidrs
+import Amazonka.EC2.DescribeCapacityReservationFleets
+import Amazonka.EC2.DescribeCapacityReservations
+import Amazonka.EC2.DescribeCarrierGateways
+import Amazonka.EC2.DescribeClassicLinkInstances
+import Amazonka.EC2.DescribeClientVpnAuthorizationRules
+import Amazonka.EC2.DescribeClientVpnConnections
+import Amazonka.EC2.DescribeClientVpnEndpoints
+import Amazonka.EC2.DescribeClientVpnRoutes
+import Amazonka.EC2.DescribeClientVpnTargetNetworks
+import Amazonka.EC2.DescribeCoipPools
+import Amazonka.EC2.DescribeConversionTasks
+import Amazonka.EC2.DescribeCustomerGateways
+import Amazonka.EC2.DescribeDhcpOptions
+import Amazonka.EC2.DescribeEgressOnlyInternetGateways
+import Amazonka.EC2.DescribeElasticGpus
+import Amazonka.EC2.DescribeExportImageTasks
+import Amazonka.EC2.DescribeExportTasks
+import Amazonka.EC2.DescribeFastLaunchImages
+import Amazonka.EC2.DescribeFastSnapshotRestores
+import Amazonka.EC2.DescribeFleetHistory
+import Amazonka.EC2.DescribeFleetInstances
+import Amazonka.EC2.DescribeFleets
+import Amazonka.EC2.DescribeFlowLogs
+import Amazonka.EC2.DescribeFpgaImageAttribute
+import Amazonka.EC2.DescribeFpgaImages
+import Amazonka.EC2.DescribeHostReservationOfferings
+import Amazonka.EC2.DescribeHostReservations
+import Amazonka.EC2.DescribeHosts
+import Amazonka.EC2.DescribeIamInstanceProfileAssociations
+import Amazonka.EC2.DescribeIdFormat
+import Amazonka.EC2.DescribeIdentityIdFormat
+import Amazonka.EC2.DescribeImageAttribute
+import Amazonka.EC2.DescribeImages
+import Amazonka.EC2.DescribeImportImageTasks
+import Amazonka.EC2.DescribeImportSnapshotTasks
+import Amazonka.EC2.DescribeInstanceAttribute
+import Amazonka.EC2.DescribeInstanceCreditSpecifications
+import Amazonka.EC2.DescribeInstanceEventNotificationAttributes
+import Amazonka.EC2.DescribeInstanceEventWindows
+import Amazonka.EC2.DescribeInstanceStatus
+import Amazonka.EC2.DescribeInstanceTypeOfferings
+import Amazonka.EC2.DescribeInstanceTypes
+import Amazonka.EC2.DescribeInstances
+import Amazonka.EC2.DescribeInternetGateways
+import Amazonka.EC2.DescribeIpamPools
+import Amazonka.EC2.DescribeIpamScopes
+import Amazonka.EC2.DescribeIpams
+import Amazonka.EC2.DescribeIpv6Pools
+import Amazonka.EC2.DescribeKeyPairs
+import Amazonka.EC2.DescribeLaunchTemplateVersions
+import Amazonka.EC2.DescribeLaunchTemplates
+import Amazonka.EC2.DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+import Amazonka.EC2.DescribeLocalGatewayRouteTableVpcAssociations
+import Amazonka.EC2.DescribeLocalGatewayRouteTables
+import Amazonka.EC2.DescribeLocalGatewayVirtualInterfaceGroups
+import Amazonka.EC2.DescribeLocalGatewayVirtualInterfaces
+import Amazonka.EC2.DescribeLocalGateways
+import Amazonka.EC2.DescribeManagedPrefixLists
+import Amazonka.EC2.DescribeMovingAddresses
+import Amazonka.EC2.DescribeNatGateways
+import Amazonka.EC2.DescribeNetworkAcls
+import Amazonka.EC2.DescribeNetworkInsightsAccessScopeAnalyses
+import Amazonka.EC2.DescribeNetworkInsightsAccessScopes
+import Amazonka.EC2.DescribeNetworkInsightsAnalyses
+import Amazonka.EC2.DescribeNetworkInsightsPaths
+import Amazonka.EC2.DescribeNetworkInterfaceAttribute
+import Amazonka.EC2.DescribeNetworkInterfacePermissions
+import Amazonka.EC2.DescribeNetworkInterfaces
+import Amazonka.EC2.DescribePlacementGroups
+import Amazonka.EC2.DescribePrefixLists
+import Amazonka.EC2.DescribePrincipalIdFormat
+import Amazonka.EC2.DescribePublicIpv4Pools
+import Amazonka.EC2.DescribeRegions
+import Amazonka.EC2.DescribeReplaceRootVolumeTasks
+import Amazonka.EC2.DescribeReservedInstances
+import Amazonka.EC2.DescribeReservedInstancesListings
+import Amazonka.EC2.DescribeReservedInstancesModifications
+import Amazonka.EC2.DescribeReservedInstancesOfferings
+import Amazonka.EC2.DescribeRouteTables
+import Amazonka.EC2.DescribeScheduledInstanceAvailability
+import Amazonka.EC2.DescribeScheduledInstances
+import Amazonka.EC2.DescribeSecurityGroupReferences
+import Amazonka.EC2.DescribeSecurityGroupRules
+import Amazonka.EC2.DescribeSecurityGroups
+import Amazonka.EC2.DescribeSnapshotAttribute
+import Amazonka.EC2.DescribeSnapshotTierStatus
+import Amazonka.EC2.DescribeSnapshots
+import Amazonka.EC2.DescribeSpotDatafeedSubscription
+import Amazonka.EC2.DescribeSpotFleetInstances
+import Amazonka.EC2.DescribeSpotFleetRequestHistory
+import Amazonka.EC2.DescribeSpotFleetRequests
+import Amazonka.EC2.DescribeSpotInstanceRequests
+import Amazonka.EC2.DescribeSpotPriceHistory
+import Amazonka.EC2.DescribeStaleSecurityGroups
+import Amazonka.EC2.DescribeStoreImageTasks
+import Amazonka.EC2.DescribeSubnets
+import Amazonka.EC2.DescribeTags
+import Amazonka.EC2.DescribeTrafficMirrorFilters
+import Amazonka.EC2.DescribeTrafficMirrorSessions
+import Amazonka.EC2.DescribeTrafficMirrorTargets
+import Amazonka.EC2.DescribeTransitGatewayAttachments
+import Amazonka.EC2.DescribeTransitGatewayConnectPeers
+import Amazonka.EC2.DescribeTransitGatewayConnects
+import Amazonka.EC2.DescribeTransitGatewayMulticastDomains
+import Amazonka.EC2.DescribeTransitGatewayPeeringAttachments
+import Amazonka.EC2.DescribeTransitGatewayPolicyTables
+import Amazonka.EC2.DescribeTransitGatewayRouteTableAnnouncements
+import Amazonka.EC2.DescribeTransitGatewayRouteTables
+import Amazonka.EC2.DescribeTransitGatewayVpcAttachments
+import Amazonka.EC2.DescribeTransitGateways
+import Amazonka.EC2.DescribeTrunkInterfaceAssociations
+import Amazonka.EC2.DescribeVerifiedAccessEndpoints
+import Amazonka.EC2.DescribeVerifiedAccessGroups
+import Amazonka.EC2.DescribeVerifiedAccessInstanceLoggingConfigurations
+import Amazonka.EC2.DescribeVerifiedAccessInstances
+import Amazonka.EC2.DescribeVerifiedAccessTrustProviders
+import Amazonka.EC2.DescribeVolumeAttribute
+import Amazonka.EC2.DescribeVolumeStatus
+import Amazonka.EC2.DescribeVolumes
+import Amazonka.EC2.DescribeVolumesModifications
+import Amazonka.EC2.DescribeVpcAttribute
+import Amazonka.EC2.DescribeVpcClassicLink
+import Amazonka.EC2.DescribeVpcClassicLinkDnsSupport
+import Amazonka.EC2.DescribeVpcEndpointConnectionNotifications
+import Amazonka.EC2.DescribeVpcEndpointConnections
+import Amazonka.EC2.DescribeVpcEndpointServiceConfigurations
+import Amazonka.EC2.DescribeVpcEndpointServicePermissions
+import Amazonka.EC2.DescribeVpcEndpointServices
+import Amazonka.EC2.DescribeVpcEndpoints
+import Amazonka.EC2.DescribeVpcPeeringConnections
+import Amazonka.EC2.DescribeVpcs
+import Amazonka.EC2.DescribeVpnConnections
+import Amazonka.EC2.DescribeVpnGateways
+import Amazonka.EC2.DetachClassicLinkVpc
+import Amazonka.EC2.DetachInternetGateway
+import Amazonka.EC2.DetachNetworkInterface
+import Amazonka.EC2.DetachVerifiedAccessTrustProvider
+import Amazonka.EC2.DetachVolume
+import Amazonka.EC2.DetachVpnGateway
+import Amazonka.EC2.DisableAddressTransfer
+import Amazonka.EC2.DisableAwsNetworkPerformanceMetricSubscription
+import Amazonka.EC2.DisableEbsEncryptionByDefault
+import Amazonka.EC2.DisableFastLaunch
+import Amazonka.EC2.DisableFastSnapshotRestores
+import Amazonka.EC2.DisableImageDeprecation
+import Amazonka.EC2.DisableIpamOrganizationAdminAccount
+import Amazonka.EC2.DisableSerialConsoleAccess
+import Amazonka.EC2.DisableTransitGatewayRouteTablePropagation
+import Amazonka.EC2.DisableVgwRoutePropagation
+import Amazonka.EC2.DisableVpcClassicLink
+import Amazonka.EC2.DisableVpcClassicLinkDnsSupport
+import Amazonka.EC2.DisassociateAddress
+import Amazonka.EC2.DisassociateClientVpnTargetNetwork
+import Amazonka.EC2.DisassociateEnclaveCertificateIamRole
+import Amazonka.EC2.DisassociateIamInstanceProfile
+import Amazonka.EC2.DisassociateInstanceEventWindow
+import Amazonka.EC2.DisassociateRouteTable
+import Amazonka.EC2.DisassociateSubnetCidrBlock
+import Amazonka.EC2.DisassociateTransitGatewayMulticastDomain
+import Amazonka.EC2.DisassociateTransitGatewayPolicyTable
+import Amazonka.EC2.DisassociateTransitGatewayRouteTable
+import Amazonka.EC2.DisassociateTrunkInterface
+import Amazonka.EC2.DisassociateVpcCidrBlock
+import Amazonka.EC2.EnableAddressTransfer
+import Amazonka.EC2.EnableAwsNetworkPerformanceMetricSubscription
+import Amazonka.EC2.EnableEbsEncryptionByDefault
+import Amazonka.EC2.EnableFastLaunch
+import Amazonka.EC2.EnableFastSnapshotRestores
+import Amazonka.EC2.EnableImageDeprecation
+import Amazonka.EC2.EnableIpamOrganizationAdminAccount
+import Amazonka.EC2.EnableReachabilityAnalyzerOrganizationSharing
+import Amazonka.EC2.EnableSerialConsoleAccess
+import Amazonka.EC2.EnableTransitGatewayRouteTablePropagation
+import Amazonka.EC2.EnableVgwRoutePropagation
+import Amazonka.EC2.EnableVolumeIO
+import Amazonka.EC2.EnableVpcClassicLink
+import Amazonka.EC2.EnableVpcClassicLinkDnsSupport
+import Amazonka.EC2.ExportClientVpnClientCertificateRevocationList
+import Amazonka.EC2.ExportClientVpnClientConfiguration
+import Amazonka.EC2.ExportImage
+import Amazonka.EC2.ExportTransitGatewayRoutes
+import Amazonka.EC2.GetAssociatedEnclaveCertificateIamRoles
+import Amazonka.EC2.GetAssociatedIpv6PoolCidrs
+import Amazonka.EC2.GetAwsNetworkPerformanceData
+import Amazonka.EC2.GetCapacityReservationUsage
+import Amazonka.EC2.GetCoipPoolUsage
+import Amazonka.EC2.GetConsoleOutput
+import Amazonka.EC2.GetConsoleScreenshot
+import Amazonka.EC2.GetDefaultCreditSpecification
+import Amazonka.EC2.GetEbsDefaultKmsKeyId
+import Amazonka.EC2.GetEbsEncryptionByDefault
+import Amazonka.EC2.GetFlowLogsIntegrationTemplate
+import Amazonka.EC2.GetGroupsForCapacityReservation
+import Amazonka.EC2.GetHostReservationPurchasePreview
+import Amazonka.EC2.GetInstanceTypesFromInstanceRequirements
+import Amazonka.EC2.GetInstanceUefiData
+import Amazonka.EC2.GetIpamAddressHistory
+import Amazonka.EC2.GetIpamPoolAllocations
+import Amazonka.EC2.GetIpamPoolCidrs
+import Amazonka.EC2.GetIpamResourceCidrs
+import Amazonka.EC2.GetLaunchTemplateData
+import Amazonka.EC2.GetManagedPrefixListAssociations
+import Amazonka.EC2.GetManagedPrefixListEntries
+import Amazonka.EC2.GetNetworkInsightsAccessScopeAnalysisFindings
+import Amazonka.EC2.GetNetworkInsightsAccessScopeContent
+import Amazonka.EC2.GetPasswordData
+import Amazonka.EC2.GetReservedInstancesExchangeQuote
+import Amazonka.EC2.GetSerialConsoleAccessStatus
+import Amazonka.EC2.GetSpotPlacementScores
+import Amazonka.EC2.GetSubnetCidrReservations
+import Amazonka.EC2.GetTransitGatewayAttachmentPropagations
+import Amazonka.EC2.GetTransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.GetTransitGatewayPolicyTableAssociations
+import Amazonka.EC2.GetTransitGatewayPolicyTableEntries
+import Amazonka.EC2.GetTransitGatewayPrefixListReferences
+import Amazonka.EC2.GetTransitGatewayRouteTableAssociations
+import Amazonka.EC2.GetTransitGatewayRouteTablePropagations
+import Amazonka.EC2.GetVerifiedAccessEndpointPolicy
+import Amazonka.EC2.GetVerifiedAccessGroupPolicy
+import Amazonka.EC2.GetVpnConnectionDeviceSampleConfiguration
+import Amazonka.EC2.GetVpnConnectionDeviceTypes
+import Amazonka.EC2.ImportClientVpnClientCertificateRevocationList
+import Amazonka.EC2.ImportImage
+import Amazonka.EC2.ImportInstance
+import Amazonka.EC2.ImportKeyPair
+import Amazonka.EC2.ImportSnapshot
+import Amazonka.EC2.ImportVolume
+import Amazonka.EC2.ListImagesInRecycleBin
+import Amazonka.EC2.ListSnapshotsInRecycleBin
+import Amazonka.EC2.ModifyAddressAttribute
+import Amazonka.EC2.ModifyAvailabilityZoneGroup
+import Amazonka.EC2.ModifyCapacityReservation
+import Amazonka.EC2.ModifyCapacityReservationFleet
+import Amazonka.EC2.ModifyClientVpnEndpoint
+import Amazonka.EC2.ModifyDefaultCreditSpecification
+import Amazonka.EC2.ModifyEbsDefaultKmsKeyId
+import Amazonka.EC2.ModifyFleet
+import Amazonka.EC2.ModifyFpgaImageAttribute
+import Amazonka.EC2.ModifyHosts
+import Amazonka.EC2.ModifyIdFormat
+import Amazonka.EC2.ModifyIdentityIdFormat
+import Amazonka.EC2.ModifyImageAttribute
+import Amazonka.EC2.ModifyInstanceAttribute
+import Amazonka.EC2.ModifyInstanceCapacityReservationAttributes
+import Amazonka.EC2.ModifyInstanceCreditSpecification
+import Amazonka.EC2.ModifyInstanceEventStartTime
+import Amazonka.EC2.ModifyInstanceEventWindow
+import Amazonka.EC2.ModifyInstanceMaintenanceOptions
+import Amazonka.EC2.ModifyInstanceMetadataOptions
+import Amazonka.EC2.ModifyInstancePlacement
+import Amazonka.EC2.ModifyIpam
+import Amazonka.EC2.ModifyIpamPool
+import Amazonka.EC2.ModifyIpamResourceCidr
+import Amazonka.EC2.ModifyIpamScope
+import Amazonka.EC2.ModifyLaunchTemplate
+import Amazonka.EC2.ModifyLocalGatewayRoute
+import Amazonka.EC2.ModifyManagedPrefixList
+import Amazonka.EC2.ModifyNetworkInterfaceAttribute
+import Amazonka.EC2.ModifyPrivateDnsNameOptions
+import Amazonka.EC2.ModifyReservedInstances
+import Amazonka.EC2.ModifySecurityGroupRules
+import Amazonka.EC2.ModifySnapshotAttribute
+import Amazonka.EC2.ModifySnapshotTier
+import Amazonka.EC2.ModifySpotFleetRequest
+import Amazonka.EC2.ModifySubnetAttribute
+import Amazonka.EC2.ModifyTrafficMirrorFilterNetworkServices
+import Amazonka.EC2.ModifyTrafficMirrorFilterRule
+import Amazonka.EC2.ModifyTrafficMirrorSession
+import Amazonka.EC2.ModifyTransitGateway
+import Amazonka.EC2.ModifyTransitGatewayPrefixListReference
+import Amazonka.EC2.ModifyTransitGatewayVpcAttachment
+import Amazonka.EC2.ModifyVerifiedAccessEndpoint
+import Amazonka.EC2.ModifyVerifiedAccessEndpointPolicy
+import Amazonka.EC2.ModifyVerifiedAccessGroup
+import Amazonka.EC2.ModifyVerifiedAccessGroupPolicy
+import Amazonka.EC2.ModifyVerifiedAccessInstance
+import Amazonka.EC2.ModifyVerifiedAccessInstanceLoggingConfiguration
+import Amazonka.EC2.ModifyVerifiedAccessTrustProvider
+import Amazonka.EC2.ModifyVolume
+import Amazonka.EC2.ModifyVolumeAttribute
+import Amazonka.EC2.ModifyVpcAttribute
+import Amazonka.EC2.ModifyVpcEndpoint
+import Amazonka.EC2.ModifyVpcEndpointConnectionNotification
+import Amazonka.EC2.ModifyVpcEndpointServiceConfiguration
+import Amazonka.EC2.ModifyVpcEndpointServicePayerResponsibility
+import Amazonka.EC2.ModifyVpcEndpointServicePermissions
+import Amazonka.EC2.ModifyVpcPeeringConnectionOptions
+import Amazonka.EC2.ModifyVpcTenancy
+import Amazonka.EC2.ModifyVpnConnection
+import Amazonka.EC2.ModifyVpnConnectionOptions
+import Amazonka.EC2.ModifyVpnTunnelCertificate
+import Amazonka.EC2.ModifyVpnTunnelOptions
+import Amazonka.EC2.MonitorInstances
+import Amazonka.EC2.MoveAddressToVpc
+import Amazonka.EC2.MoveByoipCidrToIpam
+import Amazonka.EC2.ProvisionByoipCidr
+import Amazonka.EC2.ProvisionIpamPoolCidr
+import Amazonka.EC2.ProvisionPublicIpv4PoolCidr
+import Amazonka.EC2.PurchaseHostReservation
+import Amazonka.EC2.PurchaseReservedInstancesOffering
+import Amazonka.EC2.PurchaseScheduledInstances
+import Amazonka.EC2.RebootInstances
+import Amazonka.EC2.RegisterImage
+import Amazonka.EC2.RegisterInstanceEventNotificationAttributes
+import Amazonka.EC2.RegisterTransitGatewayMulticastGroupMembers
+import Amazonka.EC2.RegisterTransitGatewayMulticastGroupSources
+import Amazonka.EC2.RejectTransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.RejectTransitGatewayPeeringAttachment
+import Amazonka.EC2.RejectTransitGatewayVpcAttachment
+import Amazonka.EC2.RejectVpcEndpointConnections
+import Amazonka.EC2.RejectVpcPeeringConnection
+import Amazonka.EC2.ReleaseAddress
+import Amazonka.EC2.ReleaseHosts
+import Amazonka.EC2.ReleaseIpamPoolAllocation
+import Amazonka.EC2.ReplaceIamInstanceProfileAssociation
+import Amazonka.EC2.ReplaceNetworkAclAssociation
+import Amazonka.EC2.ReplaceNetworkAclEntry
+import Amazonka.EC2.ReplaceRoute
+import Amazonka.EC2.ReplaceRouteTableAssociation
+import Amazonka.EC2.ReplaceTransitGatewayRoute
+import Amazonka.EC2.ReportInstanceStatus
+import Amazonka.EC2.RequestSpotFleet
+import Amazonka.EC2.RequestSpotInstances
+import Amazonka.EC2.ResetAddressAttribute
+import Amazonka.EC2.ResetEbsDefaultKmsKeyId
+import Amazonka.EC2.ResetFpgaImageAttribute
+import Amazonka.EC2.ResetImageAttribute
+import Amazonka.EC2.ResetInstanceAttribute
+import Amazonka.EC2.ResetNetworkInterfaceAttribute
+import Amazonka.EC2.ResetSnapshotAttribute
+import Amazonka.EC2.RestoreAddressToClassic
+import Amazonka.EC2.RestoreImageFromRecycleBin
+import Amazonka.EC2.RestoreManagedPrefixListVersion
+import Amazonka.EC2.RestoreSnapshotFromRecycleBin
+import Amazonka.EC2.RestoreSnapshotTier
+import Amazonka.EC2.RevokeClientVpnIngress
+import Amazonka.EC2.RevokeSecurityGroupEgress
+import Amazonka.EC2.RevokeSecurityGroupIngress
+import Amazonka.EC2.RunInstances
+import Amazonka.EC2.RunScheduledInstances
+import Amazonka.EC2.SearchLocalGatewayRoutes
+import Amazonka.EC2.SearchTransitGatewayMulticastGroups
+import Amazonka.EC2.SearchTransitGatewayRoutes
+import Amazonka.EC2.SendDiagnosticInterrupt
+import Amazonka.EC2.StartInstances
+import Amazonka.EC2.StartNetworkInsightsAccessScopeAnalysis
+import Amazonka.EC2.StartNetworkInsightsAnalysis
+import Amazonka.EC2.StartVpcEndpointServicePrivateDnsVerification
+import Amazonka.EC2.StopInstances
+import Amazonka.EC2.TerminateClientVpnConnections
+import Amazonka.EC2.TerminateInstances
+import Amazonka.EC2.Types.AcceleratorCount
+import Amazonka.EC2.Types.AcceleratorCountRequest
+import Amazonka.EC2.Types.AcceleratorTotalMemoryMiB
+import Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest
+import Amazonka.EC2.Types.AccessScopeAnalysisFinding
+import Amazonka.EC2.Types.AccessScopePath
+import Amazonka.EC2.Types.AccessScopePathRequest
+import Amazonka.EC2.Types.AccountAttribute
+import Amazonka.EC2.Types.AccountAttributeValue
+import Amazonka.EC2.Types.ActiveInstance
+import Amazonka.EC2.Types.AddIpamOperatingRegion
+import Amazonka.EC2.Types.AddPrefixListEntry
+import Amazonka.EC2.Types.AddedPrincipal
+import Amazonka.EC2.Types.AdditionalDetail
+import Amazonka.EC2.Types.Address
+import Amazonka.EC2.Types.AddressAttribute
+import Amazonka.EC2.Types.AddressTransfer
+import Amazonka.EC2.Types.AllowedPrincipal
+import Amazonka.EC2.Types.AlternatePathHint
+import Amazonka.EC2.Types.AnalysisAclRule
+import Amazonka.EC2.Types.AnalysisComponent
+import Amazonka.EC2.Types.AnalysisLoadBalancerListener
+import Amazonka.EC2.Types.AnalysisLoadBalancerTarget
+import Amazonka.EC2.Types.AnalysisPacketHeader
+import Amazonka.EC2.Types.AnalysisRouteTableRoute
+import Amazonka.EC2.Types.AnalysisSecurityGroupRule
+import Amazonka.EC2.Types.AssignedPrivateIpAddress
+import Amazonka.EC2.Types.AssociatedRole
+import Amazonka.EC2.Types.AssociatedTargetNetwork
+import Amazonka.EC2.Types.AssociationStatus
+import Amazonka.EC2.Types.AthenaIntegration
+import Amazonka.EC2.Types.AttachmentEnaSrdSpecification
+import Amazonka.EC2.Types.AttachmentEnaSrdUdpSpecification
+import Amazonka.EC2.Types.AttributeBooleanValue
+import Amazonka.EC2.Types.AttributeValue
+import Amazonka.EC2.Types.AuthorizationRule
+import Amazonka.EC2.Types.AvailabilityZone
+import Amazonka.EC2.Types.AvailabilityZoneMessage
+import Amazonka.EC2.Types.AvailableCapacity
+import Amazonka.EC2.Types.BaselineEbsBandwidthMbps
+import Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest
+import Amazonka.EC2.Types.BlobAttributeValue
+import Amazonka.EC2.Types.BlockDeviceMapping
+import Amazonka.EC2.Types.BundleTask
+import Amazonka.EC2.Types.BundleTaskError
+import Amazonka.EC2.Types.ByoipCidr
+import Amazonka.EC2.Types.CancelCapacityReservationFleetError
+import Amazonka.EC2.Types.CancelSpotFleetRequestsError
+import Amazonka.EC2.Types.CancelSpotFleetRequestsErrorItem
+import Amazonka.EC2.Types.CancelSpotFleetRequestsSuccessItem
+import Amazonka.EC2.Types.CancelledSpotInstanceRequest
+import Amazonka.EC2.Types.CapacityAllocation
+import Amazonka.EC2.Types.CapacityReservation
+import Amazonka.EC2.Types.CapacityReservationFleet
+import Amazonka.EC2.Types.CapacityReservationFleetCancellationState
+import Amazonka.EC2.Types.CapacityReservationGroup
+import Amazonka.EC2.Types.CapacityReservationOptions
+import Amazonka.EC2.Types.CapacityReservationOptionsRequest
+import Amazonka.EC2.Types.CapacityReservationSpecification
+import Amazonka.EC2.Types.CapacityReservationSpecificationResponse
+import Amazonka.EC2.Types.CapacityReservationTarget
+import Amazonka.EC2.Types.CapacityReservationTargetResponse
+import Amazonka.EC2.Types.CarrierGateway
+import Amazonka.EC2.Types.CertificateAuthentication
+import Amazonka.EC2.Types.CertificateAuthenticationRequest
+import Amazonka.EC2.Types.CidrAuthorizationContext
+import Amazonka.EC2.Types.CidrBlock
+import Amazonka.EC2.Types.ClassicLinkDnsSupport
+import Amazonka.EC2.Types.ClassicLinkInstance
+import Amazonka.EC2.Types.ClassicLoadBalancer
+import Amazonka.EC2.Types.ClassicLoadBalancersConfig
+import Amazonka.EC2.Types.ClientCertificateRevocationListStatus
+import Amazonka.EC2.Types.ClientConnectOptions
+import Amazonka.EC2.Types.ClientConnectResponseOptions
+import Amazonka.EC2.Types.ClientData
+import Amazonka.EC2.Types.ClientLoginBannerOptions
+import Amazonka.EC2.Types.ClientLoginBannerResponseOptions
+import Amazonka.EC2.Types.ClientVpnAuthentication
+import Amazonka.EC2.Types.ClientVpnAuthenticationRequest
+import Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatus
+import Amazonka.EC2.Types.ClientVpnConnection
+import Amazonka.EC2.Types.ClientVpnConnectionStatus
+import Amazonka.EC2.Types.ClientVpnEndpoint
+import Amazonka.EC2.Types.ClientVpnEndpointAttributeStatus
+import Amazonka.EC2.Types.ClientVpnEndpointStatus
+import Amazonka.EC2.Types.ClientVpnRoute
+import Amazonka.EC2.Types.ClientVpnRouteStatus
+import Amazonka.EC2.Types.CloudWatchLogOptions
+import Amazonka.EC2.Types.CloudWatchLogOptionsSpecification
+import Amazonka.EC2.Types.CoipAddressUsage
+import Amazonka.EC2.Types.CoipCidr
+import Amazonka.EC2.Types.CoipPool
+import Amazonka.EC2.Types.ConnectionLogOptions
+import Amazonka.EC2.Types.ConnectionLogResponseOptions
+import Amazonka.EC2.Types.ConnectionNotification
+import Amazonka.EC2.Types.ConversionTask
+import Amazonka.EC2.Types.CpuOptions
+import Amazonka.EC2.Types.CpuOptionsRequest
+import Amazonka.EC2.Types.CreateFleetError
+import Amazonka.EC2.Types.CreateFleetInstance
+import Amazonka.EC2.Types.CreateTransitGatewayConnectRequestOptions
+import Amazonka.EC2.Types.CreateTransitGatewayMulticastDomainRequestOptions
+import Amazonka.EC2.Types.CreateTransitGatewayPeeringAttachmentRequestOptions
+import Amazonka.EC2.Types.CreateTransitGatewayVpcAttachmentRequestOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderDeviceOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderOidcOptions
+import Amazonka.EC2.Types.CreateVolumePermission
+import Amazonka.EC2.Types.CreateVolumePermissionModifications
+import Amazonka.EC2.Types.CreditSpecification
+import Amazonka.EC2.Types.CreditSpecificationRequest
+import Amazonka.EC2.Types.CustomerGateway
+import Amazonka.EC2.Types.DataQuery
+import Amazonka.EC2.Types.DataResponse
+import Amazonka.EC2.Types.DeleteFleetError
+import Amazonka.EC2.Types.DeleteFleetErrorItem
+import Amazonka.EC2.Types.DeleteFleetSuccessItem
+import Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseErrorItem
+import Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseSuccessItem
+import Amazonka.EC2.Types.DeleteQueuedReservedInstancesError
+import Amazonka.EC2.Types.DeregisterInstanceTagAttributeRequest
+import Amazonka.EC2.Types.DescribeFastLaunchImagesSuccessItem
+import Amazonka.EC2.Types.DescribeFastSnapshotRestoreSuccessItem
+import Amazonka.EC2.Types.DescribeFleetError
+import Amazonka.EC2.Types.DescribeFleetsInstances
+import Amazonka.EC2.Types.DestinationOptionsRequest
+import Amazonka.EC2.Types.DestinationOptionsResponse
+import Amazonka.EC2.Types.DeviceOptions
+import Amazonka.EC2.Types.DhcpConfiguration
+import Amazonka.EC2.Types.DhcpOptions
+import Amazonka.EC2.Types.DirectoryServiceAuthentication
+import Amazonka.EC2.Types.DirectoryServiceAuthenticationRequest
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreErrorItem
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreStateError
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreStateErrorItem
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreSuccessItem
+import Amazonka.EC2.Types.DiskImage
+import Amazonka.EC2.Types.DiskImageDescription
+import Amazonka.EC2.Types.DiskImageDetail
+import Amazonka.EC2.Types.DiskImageVolumeDescription
+import Amazonka.EC2.Types.DiskInfo
+import Amazonka.EC2.Types.DnsEntry
+import Amazonka.EC2.Types.DnsOptions
+import Amazonka.EC2.Types.DnsOptionsSpecification
+import Amazonka.EC2.Types.DnsServersOptionsModifyStructure
+import Amazonka.EC2.Types.EbsBlockDevice
+import Amazonka.EC2.Types.EbsInfo
+import Amazonka.EC2.Types.EbsInstanceBlockDevice
+import Amazonka.EC2.Types.EbsInstanceBlockDeviceSpecification
+import Amazonka.EC2.Types.EbsOptimizedInfo
+import Amazonka.EC2.Types.EfaInfo
+import Amazonka.EC2.Types.EgressOnlyInternetGateway
+import Amazonka.EC2.Types.ElasticGpuAssociation
+import Amazonka.EC2.Types.ElasticGpuHealth
+import Amazonka.EC2.Types.ElasticGpuSpecification
+import Amazonka.EC2.Types.ElasticGpuSpecificationResponse
+import Amazonka.EC2.Types.ElasticGpus
+import Amazonka.EC2.Types.ElasticInferenceAccelerator
+import Amazonka.EC2.Types.ElasticInferenceAcceleratorAssociation
+import Amazonka.EC2.Types.EnaSrdSpecification
+import Amazonka.EC2.Types.EnaSrdUdpSpecification
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreErrorItem
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreStateError
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreStateErrorItem
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreSuccessItem
+import Amazonka.EC2.Types.EnclaveOptions
+import Amazonka.EC2.Types.EnclaveOptionsRequest
+import Amazonka.EC2.Types.EventInformation
+import Amazonka.EC2.Types.Explanation
+import Amazonka.EC2.Types.ExportImageTask
+import Amazonka.EC2.Types.ExportTask
+import Amazonka.EC2.Types.ExportTaskS3Location
+import Amazonka.EC2.Types.ExportTaskS3LocationRequest
+import Amazonka.EC2.Types.ExportToS3Task
+import Amazonka.EC2.Types.ExportToS3TaskSpecification
+import Amazonka.EC2.Types.FailedCapacityReservationFleetCancellationResult
+import Amazonka.EC2.Types.FailedQueuedPurchaseDeletion
+import Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationRequest
+import Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationResponse
+import Amazonka.EC2.Types.FastLaunchSnapshotConfigurationRequest
+import Amazonka.EC2.Types.FastLaunchSnapshotConfigurationResponse
+import Amazonka.EC2.Types.FederatedAuthentication
+import Amazonka.EC2.Types.FederatedAuthenticationRequest
+import Amazonka.EC2.Types.Filter
+import Amazonka.EC2.Types.FleetCapacityReservation
+import Amazonka.EC2.Types.FleetData
+import Amazonka.EC2.Types.FleetLaunchTemplateConfig
+import Amazonka.EC2.Types.FleetLaunchTemplateConfigRequest
+import Amazonka.EC2.Types.FleetLaunchTemplateOverrides
+import Amazonka.EC2.Types.FleetLaunchTemplateOverridesRequest
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecificationRequest
+import Amazonka.EC2.Types.FleetSpotCapacityRebalance
+import Amazonka.EC2.Types.FleetSpotCapacityRebalanceRequest
+import Amazonka.EC2.Types.FleetSpotMaintenanceStrategies
+import Amazonka.EC2.Types.FleetSpotMaintenanceStrategiesRequest
+import Amazonka.EC2.Types.FlowLog
+import Amazonka.EC2.Types.FpgaDeviceInfo
+import Amazonka.EC2.Types.FpgaDeviceMemoryInfo
+import Amazonka.EC2.Types.FpgaImage
+import Amazonka.EC2.Types.FpgaImageAttribute
+import Amazonka.EC2.Types.FpgaImageState
+import Amazonka.EC2.Types.FpgaInfo
+import Amazonka.EC2.Types.GpuDeviceInfo
+import Amazonka.EC2.Types.GpuDeviceMemoryInfo
+import Amazonka.EC2.Types.GpuInfo
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.HibernationOptions
+import Amazonka.EC2.Types.HibernationOptionsRequest
+import Amazonka.EC2.Types.HistoryRecord
+import Amazonka.EC2.Types.HistoryRecordEntry
+import Amazonka.EC2.Types.Host
+import Amazonka.EC2.Types.HostInstance
+import Amazonka.EC2.Types.HostOffering
+import Amazonka.EC2.Types.HostProperties
+import Amazonka.EC2.Types.HostReservation
+import Amazonka.EC2.Types.IKEVersionsListValue
+import Amazonka.EC2.Types.IKEVersionsRequestListValue
+import Amazonka.EC2.Types.IamInstanceProfile
+import Amazonka.EC2.Types.IamInstanceProfileAssociation
+import Amazonka.EC2.Types.IamInstanceProfileSpecification
+import Amazonka.EC2.Types.IcmpTypeCode
+import Amazonka.EC2.Types.IdFormat
+import Amazonka.EC2.Types.Image
+import Amazonka.EC2.Types.ImageDiskContainer
+import Amazonka.EC2.Types.ImageRecycleBinInfo
+import Amazonka.EC2.Types.ImportImageLicenseConfigurationRequest
+import Amazonka.EC2.Types.ImportImageLicenseConfigurationResponse
+import Amazonka.EC2.Types.ImportImageTask
+import Amazonka.EC2.Types.ImportInstanceLaunchSpecification
+import Amazonka.EC2.Types.ImportInstanceTaskDetails
+import Amazonka.EC2.Types.ImportInstanceVolumeDetailItem
+import Amazonka.EC2.Types.ImportSnapshotTask
+import Amazonka.EC2.Types.ImportVolumeTaskDetails
+import Amazonka.EC2.Types.InferenceAcceleratorInfo
+import Amazonka.EC2.Types.InferenceDeviceInfo
+import Amazonka.EC2.Types.Instance
+import Amazonka.EC2.Types.InstanceBlockDeviceMapping
+import Amazonka.EC2.Types.InstanceBlockDeviceMappingSpecification
+import Amazonka.EC2.Types.InstanceCapacity
+import Amazonka.EC2.Types.InstanceCount
+import Amazonka.EC2.Types.InstanceCreditSpecification
+import Amazonka.EC2.Types.InstanceCreditSpecificationRequest
+import Amazonka.EC2.Types.InstanceEventWindow
+import Amazonka.EC2.Types.InstanceEventWindowAssociationRequest
+import Amazonka.EC2.Types.InstanceEventWindowAssociationTarget
+import Amazonka.EC2.Types.InstanceEventWindowDisassociationRequest
+import Amazonka.EC2.Types.InstanceEventWindowStateChange
+import Amazonka.EC2.Types.InstanceEventWindowTimeRange
+import Amazonka.EC2.Types.InstanceEventWindowTimeRangeRequest
+import Amazonka.EC2.Types.InstanceExportDetails
+import Amazonka.EC2.Types.InstanceFamilyCreditSpecification
+import Amazonka.EC2.Types.InstanceIpv4Prefix
+import Amazonka.EC2.Types.InstanceIpv6Address
+import Amazonka.EC2.Types.InstanceIpv6AddressRequest
+import Amazonka.EC2.Types.InstanceIpv6Prefix
+import Amazonka.EC2.Types.InstanceMaintenanceOptions
+import Amazonka.EC2.Types.InstanceMaintenanceOptionsRequest
+import Amazonka.EC2.Types.InstanceMarketOptionsRequest
+import Amazonka.EC2.Types.InstanceMetadataOptionsRequest
+import Amazonka.EC2.Types.InstanceMetadataOptionsResponse
+import Amazonka.EC2.Types.InstanceMonitoring
+import Amazonka.EC2.Types.InstanceNetworkInterface
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAttachment
+import Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.InstancePrivateIpAddress
+import Amazonka.EC2.Types.InstanceRequirements
+import Amazonka.EC2.Types.InstanceRequirementsRequest
+import Amazonka.EC2.Types.InstanceRequirementsWithMetadataRequest
+import Amazonka.EC2.Types.InstanceSpecification
+import Amazonka.EC2.Types.InstanceState
+import Amazonka.EC2.Types.InstanceStateChange
+import Amazonka.EC2.Types.InstanceStatus
+import Amazonka.EC2.Types.InstanceStatusDetails
+import Amazonka.EC2.Types.InstanceStatusEvent
+import Amazonka.EC2.Types.InstanceStatusSummary
+import Amazonka.EC2.Types.InstanceStorageInfo
+import Amazonka.EC2.Types.InstanceTagNotificationAttribute
+import Amazonka.EC2.Types.InstanceTypeInfo
+import Amazonka.EC2.Types.InstanceTypeInfoFromInstanceRequirements
+import Amazonka.EC2.Types.InstanceTypeOffering
+import Amazonka.EC2.Types.InstanceUsage
+import Amazonka.EC2.Types.IntegrateServices
+import Amazonka.EC2.Types.InternetGateway
+import Amazonka.EC2.Types.InternetGatewayAttachment
+import Amazonka.EC2.Types.IpPermission
+import Amazonka.EC2.Types.IpRange
+import Amazonka.EC2.Types.Ipam
+import Amazonka.EC2.Types.IpamAddressHistoryRecord
+import Amazonka.EC2.Types.IpamCidrAuthorizationContext
+import Amazonka.EC2.Types.IpamOperatingRegion
+import Amazonka.EC2.Types.IpamPool
+import Amazonka.EC2.Types.IpamPoolAllocation
+import Amazonka.EC2.Types.IpamPoolCidr
+import Amazonka.EC2.Types.IpamPoolCidrFailureReason
+import Amazonka.EC2.Types.IpamResourceCidr
+import Amazonka.EC2.Types.IpamResourceTag
+import Amazonka.EC2.Types.IpamScope
+import Amazonka.EC2.Types.Ipv4PrefixSpecification
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationResponse
+import Amazonka.EC2.Types.Ipv6CidrAssociation
+import Amazonka.EC2.Types.Ipv6CidrBlock
+import Amazonka.EC2.Types.Ipv6Pool
+import Amazonka.EC2.Types.Ipv6PrefixSpecification
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationResponse
+import Amazonka.EC2.Types.Ipv6Range
+import Amazonka.EC2.Types.KeyPairInfo
+import Amazonka.EC2.Types.LastError
+import Amazonka.EC2.Types.LaunchPermission
+import Amazonka.EC2.Types.LaunchPermissionModifications
+import Amazonka.EC2.Types.LaunchSpecification
+import Amazonka.EC2.Types.LaunchTemplate
+import Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+import Amazonka.EC2.Types.LaunchTemplateBlockDeviceMapping
+import Amazonka.EC2.Types.LaunchTemplateBlockDeviceMappingRequest
+import Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationResponse
+import Amazonka.EC2.Types.LaunchTemplateConfig
+import Amazonka.EC2.Types.LaunchTemplateCpuOptions
+import Amazonka.EC2.Types.LaunchTemplateCpuOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateEbsBlockDevice
+import Amazonka.EC2.Types.LaunchTemplateEbsBlockDeviceRequest
+import Amazonka.EC2.Types.LaunchTemplateElasticInferenceAccelerator
+import Amazonka.EC2.Types.LaunchTemplateElasticInferenceAcceleratorResponse
+import Amazonka.EC2.Types.LaunchTemplateEnclaveOptions
+import Amazonka.EC2.Types.LaunchTemplateEnclaveOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateHibernationOptions
+import Amazonka.EC2.Types.LaunchTemplateHibernationOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecification
+import Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateLicenseConfiguration
+import Amazonka.EC2.Types.LaunchTemplateLicenseConfigurationRequest
+import Amazonka.EC2.Types.LaunchTemplateOverrides
+import Amazonka.EC2.Types.LaunchTemplatePlacement
+import Amazonka.EC2.Types.LaunchTemplatePlacementRequest
+import Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptions
+import Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateSpecification
+import Amazonka.EC2.Types.LaunchTemplateSpotMarketOptions
+import Amazonka.EC2.Types.LaunchTemplateSpotMarketOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateTagSpecification
+import Amazonka.EC2.Types.LaunchTemplateTagSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateVersion
+import Amazonka.EC2.Types.LaunchTemplatesMonitoring
+import Amazonka.EC2.Types.LaunchTemplatesMonitoringRequest
+import Amazonka.EC2.Types.LicenseConfiguration
+import Amazonka.EC2.Types.LicenseConfigurationRequest
+import Amazonka.EC2.Types.LoadBalancersConfig
+import Amazonka.EC2.Types.LoadPermission
+import Amazonka.EC2.Types.LoadPermissionModifications
+import Amazonka.EC2.Types.LoadPermissionRequest
+import Amazonka.EC2.Types.LocalGateway
+import Amazonka.EC2.Types.LocalGatewayRoute
+import Amazonka.EC2.Types.LocalGatewayRouteTable
+import Amazonka.EC2.Types.LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+import Amazonka.EC2.Types.LocalGatewayRouteTableVpcAssociation
+import Amazonka.EC2.Types.LocalGatewayVirtualInterface
+import Amazonka.EC2.Types.LocalGatewayVirtualInterfaceGroup
+import Amazonka.EC2.Types.ManagedPrefixList
+import Amazonka.EC2.Types.MemoryGiBPerVCpu
+import Amazonka.EC2.Types.MemoryGiBPerVCpuRequest
+import Amazonka.EC2.Types.MemoryInfo
+import Amazonka.EC2.Types.MemoryMiB
+import Amazonka.EC2.Types.MemoryMiBRequest
+import Amazonka.EC2.Types.MetricPoint
+import Amazonka.EC2.Types.ModifyTransitGatewayOptions
+import Amazonka.EC2.Types.ModifyTransitGatewayVpcAttachmentRequestOptions
+import Amazonka.EC2.Types.ModifyVerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.ModifyVerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.ModifyVerifiedAccessTrustProviderOidcOptions
+import Amazonka.EC2.Types.ModifyVpnTunnelOptionsSpecification
+import Amazonka.EC2.Types.Monitoring
+import Amazonka.EC2.Types.MovingAddressStatus
+import Amazonka.EC2.Types.NatGateway
+import Amazonka.EC2.Types.NatGatewayAddress
+import Amazonka.EC2.Types.NetworkAcl
+import Amazonka.EC2.Types.NetworkAclAssociation
+import Amazonka.EC2.Types.NetworkAclEntry
+import Amazonka.EC2.Types.NetworkBandwidthGbps
+import Amazonka.EC2.Types.NetworkBandwidthGbpsRequest
+import Amazonka.EC2.Types.NetworkCardInfo
+import Amazonka.EC2.Types.NetworkInfo
+import Amazonka.EC2.Types.NetworkInsightsAccessScope
+import Amazonka.EC2.Types.NetworkInsightsAccessScopeAnalysis
+import Amazonka.EC2.Types.NetworkInsightsAccessScopeContent
+import Amazonka.EC2.Types.NetworkInsightsAnalysis
+import Amazonka.EC2.Types.NetworkInsightsPath
+import Amazonka.EC2.Types.NetworkInterface
+import Amazonka.EC2.Types.NetworkInterfaceAssociation
+import Amazonka.EC2.Types.NetworkInterfaceAttachment
+import Amazonka.EC2.Types.NetworkInterfaceAttachmentChanges
+import Amazonka.EC2.Types.NetworkInterfaceCount
+import Amazonka.EC2.Types.NetworkInterfaceCountRequest
+import Amazonka.EC2.Types.NetworkInterfaceIpv6Address
+import Amazonka.EC2.Types.NetworkInterfacePermission
+import Amazonka.EC2.Types.NetworkInterfacePermissionState
+import Amazonka.EC2.Types.NetworkInterfacePrivateIpAddress
+import Amazonka.EC2.Types.NewDhcpConfiguration
+import Amazonka.EC2.Types.OidcOptions
+import Amazonka.EC2.Types.OnDemandOptions
+import Amazonka.EC2.Types.OnDemandOptionsRequest
+import Amazonka.EC2.Types.PacketHeaderStatement
+import Amazonka.EC2.Types.PacketHeaderStatementRequest
+import Amazonka.EC2.Types.PathComponent
+import Amazonka.EC2.Types.PathStatement
+import Amazonka.EC2.Types.PathStatementRequest
+import Amazonka.EC2.Types.PciId
+import Amazonka.EC2.Types.PeeringAttachmentStatus
+import Amazonka.EC2.Types.PeeringConnectionOptions
+import Amazonka.EC2.Types.PeeringConnectionOptionsRequest
+import Amazonka.EC2.Types.PeeringTgwInfo
+import Amazonka.EC2.Types.Phase1DHGroupNumbersListValue
+import Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Placement
+import Amazonka.EC2.Types.PlacementGroup
+import Amazonka.EC2.Types.PlacementGroupInfo
+import Amazonka.EC2.Types.PlacementResponse
+import Amazonka.EC2.Types.PoolCidrBlock
+import Amazonka.EC2.Types.PortRange
+import Amazonka.EC2.Types.PrefixList
+import Amazonka.EC2.Types.PrefixListAssociation
+import Amazonka.EC2.Types.PrefixListEntry
+import Amazonka.EC2.Types.PrefixListId
+import Amazonka.EC2.Types.PriceSchedule
+import Amazonka.EC2.Types.PriceScheduleSpecification
+import Amazonka.EC2.Types.PricingDetail
+import Amazonka.EC2.Types.PrincipalIdFormat
+import Amazonka.EC2.Types.PrivateDnsDetails
+import Amazonka.EC2.Types.PrivateDnsNameConfiguration
+import Amazonka.EC2.Types.PrivateDnsNameOptionsOnLaunch
+import Amazonka.EC2.Types.PrivateDnsNameOptionsRequest
+import Amazonka.EC2.Types.PrivateDnsNameOptionsResponse
+import Amazonka.EC2.Types.PrivateIpAddressSpecification
+import Amazonka.EC2.Types.ProcessorInfo
+import Amazonka.EC2.Types.ProductCode
+import Amazonka.EC2.Types.PropagatingVgw
+import Amazonka.EC2.Types.ProvisionedBandwidth
+import Amazonka.EC2.Types.PtrUpdateStatus
+import Amazonka.EC2.Types.PublicIpv4Pool
+import Amazonka.EC2.Types.PublicIpv4PoolRange
+import Amazonka.EC2.Types.Purchase
+import Amazonka.EC2.Types.PurchaseRequest
+import Amazonka.EC2.Types.RecurringCharge
+import Amazonka.EC2.Types.ReferencedSecurityGroup
+import Amazonka.EC2.Types.RegionInfo
+import Amazonka.EC2.Types.RegisterInstanceTagAttributeRequest
+import Amazonka.EC2.Types.RemoveIpamOperatingRegion
+import Amazonka.EC2.Types.RemovePrefixListEntry
+import Amazonka.EC2.Types.ReplaceRootVolumeTask
+import Amazonka.EC2.Types.RequestIpamResourceTag
+import Amazonka.EC2.Types.RequestLaunchTemplateData
+import Amazonka.EC2.Types.RequestSpotLaunchSpecification
+import Amazonka.EC2.Types.Reservation
+import Amazonka.EC2.Types.ReservationFleetInstanceSpecification
+import Amazonka.EC2.Types.ReservationValue
+import Amazonka.EC2.Types.ReservedInstanceLimitPrice
+import Amazonka.EC2.Types.ReservedInstanceReservationValue
+import Amazonka.EC2.Types.ReservedInstances
+import Amazonka.EC2.Types.ReservedInstancesConfiguration
+import Amazonka.EC2.Types.ReservedInstancesId
+import Amazonka.EC2.Types.ReservedInstancesListing
+import Amazonka.EC2.Types.ReservedInstancesModification
+import Amazonka.EC2.Types.ReservedInstancesModificationResult
+import Amazonka.EC2.Types.ReservedInstancesOffering
+import Amazonka.EC2.Types.ResourceStatement
+import Amazonka.EC2.Types.ResourceStatementRequest
+import Amazonka.EC2.Types.ResponseError
+import Amazonka.EC2.Types.ResponseLaunchTemplateData
+import Amazonka.EC2.Types.Route
+import Amazonka.EC2.Types.RouteTable
+import Amazonka.EC2.Types.RouteTableAssociation
+import Amazonka.EC2.Types.RouteTableAssociationState
+import Amazonka.EC2.Types.RunInstancesMonitoringEnabled
+import Amazonka.EC2.Types.S3ObjectTag
+import Amazonka.EC2.Types.S3Storage
+import Amazonka.EC2.Types.ScheduledInstance
+import Amazonka.EC2.Types.ScheduledInstanceAvailability
+import Amazonka.EC2.Types.ScheduledInstanceRecurrence
+import Amazonka.EC2.Types.ScheduledInstanceRecurrenceRequest
+import Amazonka.EC2.Types.ScheduledInstancesBlockDeviceMapping
+import Amazonka.EC2.Types.ScheduledInstancesEbs
+import Amazonka.EC2.Types.ScheduledInstancesIamInstanceProfile
+import Amazonka.EC2.Types.ScheduledInstancesIpv6Address
+import Amazonka.EC2.Types.ScheduledInstancesLaunchSpecification
+import Amazonka.EC2.Types.ScheduledInstancesMonitoring
+import Amazonka.EC2.Types.ScheduledInstancesNetworkInterface
+import Amazonka.EC2.Types.ScheduledInstancesPlacement
+import Amazonka.EC2.Types.ScheduledInstancesPrivateIpAddressConfig
+import Amazonka.EC2.Types.SecurityGroup
+import Amazonka.EC2.Types.SecurityGroupIdentifier
+import Amazonka.EC2.Types.SecurityGroupReference
+import Amazonka.EC2.Types.SecurityGroupRule
+import Amazonka.EC2.Types.SecurityGroupRuleDescription
+import Amazonka.EC2.Types.SecurityGroupRuleRequest
+import Amazonka.EC2.Types.SecurityGroupRuleUpdate
+import Amazonka.EC2.Types.ServiceConfiguration
+import Amazonka.EC2.Types.ServiceDetail
+import Amazonka.EC2.Types.ServiceTypeDetail
+import Amazonka.EC2.Types.SlotDateTimeRangeRequest
+import Amazonka.EC2.Types.SlotStartTimeRangeRequest
+import Amazonka.EC2.Types.Snapshot
+import Amazonka.EC2.Types.SnapshotDetail
+import Amazonka.EC2.Types.SnapshotDiskContainer
+import Amazonka.EC2.Types.SnapshotInfo
+import Amazonka.EC2.Types.SnapshotRecycleBinInfo
+import Amazonka.EC2.Types.SnapshotTaskDetail
+import Amazonka.EC2.Types.SnapshotTierStatus
+import Amazonka.EC2.Types.SpotCapacityRebalance
+import Amazonka.EC2.Types.SpotDatafeedSubscription
+import Amazonka.EC2.Types.SpotFleetLaunchSpecification
+import Amazonka.EC2.Types.SpotFleetMonitoring
+import Amazonka.EC2.Types.SpotFleetRequestConfig
+import Amazonka.EC2.Types.SpotFleetRequestConfigData
+import Amazonka.EC2.Types.SpotFleetTagSpecification
+import Amazonka.EC2.Types.SpotInstanceRequest
+import Amazonka.EC2.Types.SpotInstanceStateFault
+import Amazonka.EC2.Types.SpotInstanceStatus
+import Amazonka.EC2.Types.SpotMaintenanceStrategies
+import Amazonka.EC2.Types.SpotMarketOptions
+import Amazonka.EC2.Types.SpotOptions
+import Amazonka.EC2.Types.SpotOptionsRequest
+import Amazonka.EC2.Types.SpotPlacement
+import Amazonka.EC2.Types.SpotPlacementScore
+import Amazonka.EC2.Types.SpotPrice
+import Amazonka.EC2.Types.StaleIpPermission
+import Amazonka.EC2.Types.StaleSecurityGroup
+import Amazonka.EC2.Types.StateReason
+import Amazonka.EC2.Types.Storage
+import Amazonka.EC2.Types.StorageLocation
+import Amazonka.EC2.Types.StoreImageTaskResult
+import Amazonka.EC2.Types.Subnet
+import Amazonka.EC2.Types.SubnetAssociation
+import Amazonka.EC2.Types.SubnetCidrBlockState
+import Amazonka.EC2.Types.SubnetCidrReservation
+import Amazonka.EC2.Types.SubnetIpv6CidrBlockAssociation
+import Amazonka.EC2.Types.Subscription
+import Amazonka.EC2.Types.SuccessfulInstanceCreditSpecificationItem
+import Amazonka.EC2.Types.SuccessfulQueuedPurchaseDeletion
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TagDescription
+import Amazonka.EC2.Types.TagSpecification
+import Amazonka.EC2.Types.TargetCapacitySpecification
+import Amazonka.EC2.Types.TargetCapacitySpecificationRequest
+import Amazonka.EC2.Types.TargetConfiguration
+import Amazonka.EC2.Types.TargetConfigurationRequest
+import Amazonka.EC2.Types.TargetGroup
+import Amazonka.EC2.Types.TargetGroupsConfig
+import Amazonka.EC2.Types.TargetNetwork
+import Amazonka.EC2.Types.TargetReservationValue
+import Amazonka.EC2.Types.TerminateConnectionStatus
+import Amazonka.EC2.Types.ThroughResourcesStatement
+import Amazonka.EC2.Types.ThroughResourcesStatementRequest
+import Amazonka.EC2.Types.TotalLocalStorageGB
+import Amazonka.EC2.Types.TotalLocalStorageGBRequest
+import Amazonka.EC2.Types.TrafficMirrorFilter
+import Amazonka.EC2.Types.TrafficMirrorFilterRule
+import Amazonka.EC2.Types.TrafficMirrorPortRange
+import Amazonka.EC2.Types.TrafficMirrorPortRangeRequest
+import Amazonka.EC2.Types.TrafficMirrorSession
+import Amazonka.EC2.Types.TrafficMirrorTarget
+import Amazonka.EC2.Types.TransitGateway
+import Amazonka.EC2.Types.TransitGatewayAssociation
+import Amazonka.EC2.Types.TransitGatewayAttachment
+import Amazonka.EC2.Types.TransitGatewayAttachmentAssociation
+import Amazonka.EC2.Types.TransitGatewayAttachmentBgpConfiguration
+import Amazonka.EC2.Types.TransitGatewayAttachmentPropagation
+import Amazonka.EC2.Types.TransitGatewayConnect
+import Amazonka.EC2.Types.TransitGatewayConnectOptions
+import Amazonka.EC2.Types.TransitGatewayConnectPeer
+import Amazonka.EC2.Types.TransitGatewayConnectPeerConfiguration
+import Amazonka.EC2.Types.TransitGatewayConnectRequestBgpOptions
+import Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupMembers
+import Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupSources
+import Amazonka.EC2.Types.TransitGatewayMulticastDomain
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociation
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainOptions
+import Amazonka.EC2.Types.TransitGatewayMulticastGroup
+import Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupMembers
+import Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupSources
+import Amazonka.EC2.Types.TransitGatewayOptions
+import Amazonka.EC2.Types.TransitGatewayPeeringAttachment
+import Amazonka.EC2.Types.TransitGatewayPeeringAttachmentOptions
+import Amazonka.EC2.Types.TransitGatewayPolicyRule
+import Amazonka.EC2.Types.TransitGatewayPolicyRuleMetaData
+import Amazonka.EC2.Types.TransitGatewayPolicyTable
+import Amazonka.EC2.Types.TransitGatewayPolicyTableAssociation
+import Amazonka.EC2.Types.TransitGatewayPolicyTableEntry
+import Amazonka.EC2.Types.TransitGatewayPrefixListAttachment
+import Amazonka.EC2.Types.TransitGatewayPrefixListReference
+import Amazonka.EC2.Types.TransitGatewayPropagation
+import Amazonka.EC2.Types.TransitGatewayRequestOptions
+import Amazonka.EC2.Types.TransitGatewayRoute
+import Amazonka.EC2.Types.TransitGatewayRouteAttachment
+import Amazonka.EC2.Types.TransitGatewayRouteTable
+import Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncement
+import Amazonka.EC2.Types.TransitGatewayRouteTableAssociation
+import Amazonka.EC2.Types.TransitGatewayRouteTablePropagation
+import Amazonka.EC2.Types.TransitGatewayRouteTableRoute
+import Amazonka.EC2.Types.TransitGatewayVpcAttachment
+import Amazonka.EC2.Types.TransitGatewayVpcAttachmentOptions
+import Amazonka.EC2.Types.TrunkInterfaceAssociation
+import Amazonka.EC2.Types.TunnelOption
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItem
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItemError
+import Amazonka.EC2.Types.UnsuccessfulItem
+import Amazonka.EC2.Types.UnsuccessfulItemError
+import Amazonka.EC2.Types.UserBucket
+import Amazonka.EC2.Types.UserBucketDetails
+import Amazonka.EC2.Types.UserData
+import Amazonka.EC2.Types.UserIdGroupPair
+import Amazonka.EC2.Types.VCpuCountRange
+import Amazonka.EC2.Types.VCpuCountRangeRequest
+import Amazonka.EC2.Types.VCpuInfo
+import Amazonka.EC2.Types.ValidationError
+import Amazonka.EC2.Types.ValidationWarning
+import Amazonka.EC2.Types.VerifiedAccessEndpoint
+import Amazonka.EC2.Types.VerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.VerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.VerifiedAccessEndpointStatus
+import Amazonka.EC2.Types.VerifiedAccessGroup
+import Amazonka.EC2.Types.VerifiedAccessInstance
+import Amazonka.EC2.Types.VerifiedAccessInstanceLoggingConfiguration
+import Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestination
+import Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+import Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestination
+import Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogOptions
+import Amazonka.EC2.Types.VerifiedAccessLogS3Destination
+import Amazonka.EC2.Types.VerifiedAccessLogS3DestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogs
+import Amazonka.EC2.Types.VerifiedAccessTrustProvider
+import Amazonka.EC2.Types.VerifiedAccessTrustProviderCondensed
+import Amazonka.EC2.Types.VgwTelemetry
+import Amazonka.EC2.Types.Volume
+import Amazonka.EC2.Types.VolumeAttachment
+import Amazonka.EC2.Types.VolumeDetail
+import Amazonka.EC2.Types.VolumeModification
+import Amazonka.EC2.Types.VolumeStatusAction
+import Amazonka.EC2.Types.VolumeStatusAttachmentStatus
+import Amazonka.EC2.Types.VolumeStatusDetails
+import Amazonka.EC2.Types.VolumeStatusEvent
+import Amazonka.EC2.Types.VolumeStatusInfo
+import Amazonka.EC2.Types.VolumeStatusItem
+import Amazonka.EC2.Types.Vpc
+import Amazonka.EC2.Types.VpcAttachment
+import Amazonka.EC2.Types.VpcCidrBlockAssociation
+import Amazonka.EC2.Types.VpcCidrBlockState
+import Amazonka.EC2.Types.VpcClassicLink
+import Amazonka.EC2.Types.VpcEndpoint
+import Amazonka.EC2.Types.VpcEndpointConnection
+import Amazonka.EC2.Types.VpcIpv6CidrBlockAssociation
+import Amazonka.EC2.Types.VpcPeeringConnection
+import Amazonka.EC2.Types.VpcPeeringConnectionOptionsDescription
+import Amazonka.EC2.Types.VpcPeeringConnectionStateReason
+import Amazonka.EC2.Types.VpcPeeringConnectionVpcInfo
+import Amazonka.EC2.Types.VpnConnection
+import Amazonka.EC2.Types.VpnConnectionDeviceType
+import Amazonka.EC2.Types.VpnConnectionOptions
+import Amazonka.EC2.Types.VpnConnectionOptionsSpecification
+import Amazonka.EC2.Types.VpnGateway
+import Amazonka.EC2.Types.VpnStaticRoute
+import Amazonka.EC2.Types.VpnTunnelLogOptions
+import Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification
+import Amazonka.EC2.Types.VpnTunnelOptionsSpecification
+import Amazonka.EC2.UnassignIpv6Addresses
+import Amazonka.EC2.UnassignPrivateIpAddresses
+import Amazonka.EC2.UnmonitorInstances
+import Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsEgress
+import Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsIngress
+import Amazonka.EC2.WithdrawByoipCidr
diff --git a/gen/Amazonka/EC2/ListImagesInRecycleBin.hs b/gen/Amazonka/EC2/ListImagesInRecycleBin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ListImagesInRecycleBin.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ListImagesInRecycleBin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists one or more AMIs that are currently in the Recycle Bin. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html Recycle Bin>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.ListImagesInRecycleBin
+  ( -- * Creating a Request
+    ListImagesInRecycleBin (..),
+    newListImagesInRecycleBin,
+
+    -- * Request Lenses
+    listImagesInRecycleBin_dryRun,
+    listImagesInRecycleBin_imageIds,
+    listImagesInRecycleBin_maxResults,
+    listImagesInRecycleBin_nextToken,
+
+    -- * Destructuring the Response
+    ListImagesInRecycleBinResponse (..),
+    newListImagesInRecycleBinResponse,
+
+    -- * Response Lenses
+    listImagesInRecycleBinResponse_images,
+    listImagesInRecycleBinResponse_nextToken,
+    listImagesInRecycleBinResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListImagesInRecycleBin' smart constructor.
+data ListImagesInRecycleBin = ListImagesInRecycleBin'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the AMIs to list. Omit this parameter to list all of the AMIs
+    -- that are in the Recycle Bin. You can specify up to 20 IDs in a single
+    -- request.
+    imageIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    --
+    -- If you do not specify a value for /MaxResults/, the request returns
+    -- 1,000 items per page by default. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination Pagination>.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagesInRecycleBin' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'listImagesInRecycleBin_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageIds', 'listImagesInRecycleBin_imageIds' - The IDs of the AMIs to list. Omit this parameter to list all of the AMIs
+-- that are in the Recycle Bin. You can specify up to 20 IDs in a single
+-- request.
+--
+-- 'maxResults', 'listImagesInRecycleBin_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- If you do not specify a value for /MaxResults/, the request returns
+-- 1,000 items per page by default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination Pagination>.
+--
+-- 'nextToken', 'listImagesInRecycleBin_nextToken' - The token for the next page of results.
+newListImagesInRecycleBin ::
+  ListImagesInRecycleBin
+newListImagesInRecycleBin =
+  ListImagesInRecycleBin'
+    { dryRun = Prelude.Nothing,
+      imageIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+listImagesInRecycleBin_dryRun :: Lens.Lens' ListImagesInRecycleBin (Prelude.Maybe Prelude.Bool)
+listImagesInRecycleBin_dryRun = Lens.lens (\ListImagesInRecycleBin' {dryRun} -> dryRun) (\s@ListImagesInRecycleBin' {} a -> s {dryRun = a} :: ListImagesInRecycleBin)
+
+-- | The IDs of the AMIs to list. Omit this parameter to list all of the AMIs
+-- that are in the Recycle Bin. You can specify up to 20 IDs in a single
+-- request.
+listImagesInRecycleBin_imageIds :: Lens.Lens' ListImagesInRecycleBin (Prelude.Maybe [Prelude.Text])
+listImagesInRecycleBin_imageIds = Lens.lens (\ListImagesInRecycleBin' {imageIds} -> imageIds) (\s@ListImagesInRecycleBin' {} a -> s {imageIds = a} :: ListImagesInRecycleBin) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- If you do not specify a value for /MaxResults/, the request returns
+-- 1,000 items per page by default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Query-Requests.html#api-pagination Pagination>.
+listImagesInRecycleBin_maxResults :: Lens.Lens' ListImagesInRecycleBin (Prelude.Maybe Prelude.Natural)
+listImagesInRecycleBin_maxResults = Lens.lens (\ListImagesInRecycleBin' {maxResults} -> maxResults) (\s@ListImagesInRecycleBin' {} a -> s {maxResults = a} :: ListImagesInRecycleBin)
+
+-- | The token for the next page of results.
+listImagesInRecycleBin_nextToken :: Lens.Lens' ListImagesInRecycleBin (Prelude.Maybe Prelude.Text)
+listImagesInRecycleBin_nextToken = Lens.lens (\ListImagesInRecycleBin' {nextToken} -> nextToken) (\s@ListImagesInRecycleBin' {} a -> s {nextToken = a} :: ListImagesInRecycleBin)
+
+instance Core.AWSPager ListImagesInRecycleBin where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listImagesInRecycleBinResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listImagesInRecycleBinResponse_images
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listImagesInRecycleBin_nextToken
+          Lens..~ rs
+          Lens.^? listImagesInRecycleBinResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListImagesInRecycleBin where
+  type
+    AWSResponse ListImagesInRecycleBin =
+      ListImagesInRecycleBinResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ListImagesInRecycleBinResponse'
+            Prelude.<$> ( x
+                            Data..@? "imageSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListImagesInRecycleBin where
+  hashWithSalt _salt ListImagesInRecycleBin' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListImagesInRecycleBin where
+  rnf ListImagesInRecycleBin' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListImagesInRecycleBin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListImagesInRecycleBin where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListImagesInRecycleBin where
+  toQuery ListImagesInRecycleBin' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ListImagesInRecycleBin" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "ImageId" Prelude.<$> imageIds),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListImagesInRecycleBinResponse' smart constructor.
+data ListImagesInRecycleBinResponse = ListImagesInRecycleBinResponse'
+  { -- | Information about the AMIs.
+    images :: Prelude.Maybe [ImageRecycleBinInfo],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListImagesInRecycleBinResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'images', 'listImagesInRecycleBinResponse_images' - Information about the AMIs.
+--
+-- 'nextToken', 'listImagesInRecycleBinResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'listImagesInRecycleBinResponse_httpStatus' - The response's http status code.
+newListImagesInRecycleBinResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListImagesInRecycleBinResponse
+newListImagesInRecycleBinResponse pHttpStatus_ =
+  ListImagesInRecycleBinResponse'
+    { images =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the AMIs.
+listImagesInRecycleBinResponse_images :: Lens.Lens' ListImagesInRecycleBinResponse (Prelude.Maybe [ImageRecycleBinInfo])
+listImagesInRecycleBinResponse_images = Lens.lens (\ListImagesInRecycleBinResponse' {images} -> images) (\s@ListImagesInRecycleBinResponse' {} a -> s {images = a} :: ListImagesInRecycleBinResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+listImagesInRecycleBinResponse_nextToken :: Lens.Lens' ListImagesInRecycleBinResponse (Prelude.Maybe Prelude.Text)
+listImagesInRecycleBinResponse_nextToken = Lens.lens (\ListImagesInRecycleBinResponse' {nextToken} -> nextToken) (\s@ListImagesInRecycleBinResponse' {} a -> s {nextToken = a} :: ListImagesInRecycleBinResponse)
+
+-- | The response's http status code.
+listImagesInRecycleBinResponse_httpStatus :: Lens.Lens' ListImagesInRecycleBinResponse Prelude.Int
+listImagesInRecycleBinResponse_httpStatus = Lens.lens (\ListImagesInRecycleBinResponse' {httpStatus} -> httpStatus) (\s@ListImagesInRecycleBinResponse' {} a -> s {httpStatus = a} :: ListImagesInRecycleBinResponse)
+
+instance
+  Prelude.NFData
+    ListImagesInRecycleBinResponse
+  where
+  rnf ListImagesInRecycleBinResponse' {..} =
+    Prelude.rnf images
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ListSnapshotsInRecycleBin.hs b/gen/Amazonka/EC2/ListSnapshotsInRecycleBin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ListSnapshotsInRecycleBin.hs
@@ -0,0 +1,265 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ListSnapshotsInRecycleBin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists one or more snapshots that are currently in the Recycle Bin.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.ListSnapshotsInRecycleBin
+  ( -- * Creating a Request
+    ListSnapshotsInRecycleBin (..),
+    newListSnapshotsInRecycleBin,
+
+    -- * Request Lenses
+    listSnapshotsInRecycleBin_dryRun,
+    listSnapshotsInRecycleBin_maxResults,
+    listSnapshotsInRecycleBin_nextToken,
+    listSnapshotsInRecycleBin_snapshotIds,
+
+    -- * Destructuring the Response
+    ListSnapshotsInRecycleBinResponse (..),
+    newListSnapshotsInRecycleBinResponse,
+
+    -- * Response Lenses
+    listSnapshotsInRecycleBinResponse_nextToken,
+    listSnapshotsInRecycleBinResponse_snapshots,
+    listSnapshotsInRecycleBinResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListSnapshotsInRecycleBin' smart constructor.
+data ListSnapshotsInRecycleBin = ListSnapshotsInRecycleBin'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the snapshots to list. Omit this parameter to list all of the
+    -- snapshots that are in the Recycle Bin.
+    snapshotIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSnapshotsInRecycleBin' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'listSnapshotsInRecycleBin_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'listSnapshotsInRecycleBin_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'listSnapshotsInRecycleBin_nextToken' - The token for the next page of results.
+--
+-- 'snapshotIds', 'listSnapshotsInRecycleBin_snapshotIds' - The IDs of the snapshots to list. Omit this parameter to list all of the
+-- snapshots that are in the Recycle Bin.
+newListSnapshotsInRecycleBin ::
+  ListSnapshotsInRecycleBin
+newListSnapshotsInRecycleBin =
+  ListSnapshotsInRecycleBin'
+    { dryRun =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      snapshotIds = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+listSnapshotsInRecycleBin_dryRun :: Lens.Lens' ListSnapshotsInRecycleBin (Prelude.Maybe Prelude.Bool)
+listSnapshotsInRecycleBin_dryRun = Lens.lens (\ListSnapshotsInRecycleBin' {dryRun} -> dryRun) (\s@ListSnapshotsInRecycleBin' {} a -> s {dryRun = a} :: ListSnapshotsInRecycleBin)
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+listSnapshotsInRecycleBin_maxResults :: Lens.Lens' ListSnapshotsInRecycleBin (Prelude.Maybe Prelude.Natural)
+listSnapshotsInRecycleBin_maxResults = Lens.lens (\ListSnapshotsInRecycleBin' {maxResults} -> maxResults) (\s@ListSnapshotsInRecycleBin' {} a -> s {maxResults = a} :: ListSnapshotsInRecycleBin)
+
+-- | The token for the next page of results.
+listSnapshotsInRecycleBin_nextToken :: Lens.Lens' ListSnapshotsInRecycleBin (Prelude.Maybe Prelude.Text)
+listSnapshotsInRecycleBin_nextToken = Lens.lens (\ListSnapshotsInRecycleBin' {nextToken} -> nextToken) (\s@ListSnapshotsInRecycleBin' {} a -> s {nextToken = a} :: ListSnapshotsInRecycleBin)
+
+-- | The IDs of the snapshots to list. Omit this parameter to list all of the
+-- snapshots that are in the Recycle Bin.
+listSnapshotsInRecycleBin_snapshotIds :: Lens.Lens' ListSnapshotsInRecycleBin (Prelude.Maybe [Prelude.Text])
+listSnapshotsInRecycleBin_snapshotIds = Lens.lens (\ListSnapshotsInRecycleBin' {snapshotIds} -> snapshotIds) (\s@ListSnapshotsInRecycleBin' {} a -> s {snapshotIds = a} :: ListSnapshotsInRecycleBin) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager ListSnapshotsInRecycleBin where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listSnapshotsInRecycleBinResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listSnapshotsInRecycleBinResponse_snapshots
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listSnapshotsInRecycleBin_nextToken
+          Lens..~ rs
+          Lens.^? listSnapshotsInRecycleBinResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListSnapshotsInRecycleBin where
+  type
+    AWSResponse ListSnapshotsInRecycleBin =
+      ListSnapshotsInRecycleBinResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ListSnapshotsInRecycleBinResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "snapshotSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListSnapshotsInRecycleBin where
+  hashWithSalt _salt ListSnapshotsInRecycleBin' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` snapshotIds
+
+instance Prelude.NFData ListSnapshotsInRecycleBin where
+  rnf ListSnapshotsInRecycleBin' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf snapshotIds
+
+instance Data.ToHeaders ListSnapshotsInRecycleBin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListSnapshotsInRecycleBin where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListSnapshotsInRecycleBin where
+  toQuery ListSnapshotsInRecycleBin' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ListSnapshotsInRecycleBin" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        Data.toQuery
+          ( Data.toQueryList "SnapshotId"
+              Prelude.<$> snapshotIds
+          )
+      ]
+
+-- | /See:/ 'newListSnapshotsInRecycleBinResponse' smart constructor.
+data ListSnapshotsInRecycleBinResponse = ListSnapshotsInRecycleBinResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the snapshots.
+    snapshots :: Prelude.Maybe [SnapshotRecycleBinInfo],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListSnapshotsInRecycleBinResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listSnapshotsInRecycleBinResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'snapshots', 'listSnapshotsInRecycleBinResponse_snapshots' - Information about the snapshots.
+--
+-- 'httpStatus', 'listSnapshotsInRecycleBinResponse_httpStatus' - The response's http status code.
+newListSnapshotsInRecycleBinResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListSnapshotsInRecycleBinResponse
+newListSnapshotsInRecycleBinResponse pHttpStatus_ =
+  ListSnapshotsInRecycleBinResponse'
+    { nextToken =
+        Prelude.Nothing,
+      snapshots = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+listSnapshotsInRecycleBinResponse_nextToken :: Lens.Lens' ListSnapshotsInRecycleBinResponse (Prelude.Maybe Prelude.Text)
+listSnapshotsInRecycleBinResponse_nextToken = Lens.lens (\ListSnapshotsInRecycleBinResponse' {nextToken} -> nextToken) (\s@ListSnapshotsInRecycleBinResponse' {} a -> s {nextToken = a} :: ListSnapshotsInRecycleBinResponse)
+
+-- | Information about the snapshots.
+listSnapshotsInRecycleBinResponse_snapshots :: Lens.Lens' ListSnapshotsInRecycleBinResponse (Prelude.Maybe [SnapshotRecycleBinInfo])
+listSnapshotsInRecycleBinResponse_snapshots = Lens.lens (\ListSnapshotsInRecycleBinResponse' {snapshots} -> snapshots) (\s@ListSnapshotsInRecycleBinResponse' {} a -> s {snapshots = a} :: ListSnapshotsInRecycleBinResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+listSnapshotsInRecycleBinResponse_httpStatus :: Lens.Lens' ListSnapshotsInRecycleBinResponse Prelude.Int
+listSnapshotsInRecycleBinResponse_httpStatus = Lens.lens (\ListSnapshotsInRecycleBinResponse' {httpStatus} -> httpStatus) (\s@ListSnapshotsInRecycleBinResponse' {} a -> s {httpStatus = a} :: ListSnapshotsInRecycleBinResponse)
+
+instance
+  Prelude.NFData
+    ListSnapshotsInRecycleBinResponse
+  where
+  rnf ListSnapshotsInRecycleBinResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf snapshots
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyAddressAttribute.hs b/gen/Amazonka/EC2/ModifyAddressAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyAddressAttribute.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyAddressAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies an attribute of the specified Elastic IP address. For
+-- requirements, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS Using reverse DNS for email applications>.
+module Amazonka.EC2.ModifyAddressAttribute
+  ( -- * Creating a Request
+    ModifyAddressAttribute (..),
+    newModifyAddressAttribute,
+
+    -- * Request Lenses
+    modifyAddressAttribute_domainName,
+    modifyAddressAttribute_dryRun,
+    modifyAddressAttribute_allocationId,
+
+    -- * Destructuring the Response
+    ModifyAddressAttributeResponse (..),
+    newModifyAddressAttributeResponse,
+
+    -- * Response Lenses
+    modifyAddressAttributeResponse_address,
+    modifyAddressAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyAddressAttribute' smart constructor.
+data ModifyAddressAttribute = ModifyAddressAttribute'
+  { -- | The domain name to modify for the IP address.
+    domainName :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | [EC2-VPC] The allocation ID.
+    allocationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyAddressAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'modifyAddressAttribute_domainName' - The domain name to modify for the IP address.
+--
+-- 'dryRun', 'modifyAddressAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'allocationId', 'modifyAddressAttribute_allocationId' - [EC2-VPC] The allocation ID.
+newModifyAddressAttribute ::
+  -- | 'allocationId'
+  Prelude.Text ->
+  ModifyAddressAttribute
+newModifyAddressAttribute pAllocationId_ =
+  ModifyAddressAttribute'
+    { domainName =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      allocationId = pAllocationId_
+    }
+
+-- | The domain name to modify for the IP address.
+modifyAddressAttribute_domainName :: Lens.Lens' ModifyAddressAttribute (Prelude.Maybe Prelude.Text)
+modifyAddressAttribute_domainName = Lens.lens (\ModifyAddressAttribute' {domainName} -> domainName) (\s@ModifyAddressAttribute' {} a -> s {domainName = a} :: ModifyAddressAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyAddressAttribute_dryRun :: Lens.Lens' ModifyAddressAttribute (Prelude.Maybe Prelude.Bool)
+modifyAddressAttribute_dryRun = Lens.lens (\ModifyAddressAttribute' {dryRun} -> dryRun) (\s@ModifyAddressAttribute' {} a -> s {dryRun = a} :: ModifyAddressAttribute)
+
+-- | [EC2-VPC] The allocation ID.
+modifyAddressAttribute_allocationId :: Lens.Lens' ModifyAddressAttribute Prelude.Text
+modifyAddressAttribute_allocationId = Lens.lens (\ModifyAddressAttribute' {allocationId} -> allocationId) (\s@ModifyAddressAttribute' {} a -> s {allocationId = a} :: ModifyAddressAttribute)
+
+instance Core.AWSRequest ModifyAddressAttribute where
+  type
+    AWSResponse ModifyAddressAttribute =
+      ModifyAddressAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyAddressAttributeResponse'
+            Prelude.<$> (x Data..@? "address")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyAddressAttribute where
+  hashWithSalt _salt ModifyAddressAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` allocationId
+
+instance Prelude.NFData ModifyAddressAttribute where
+  rnf ModifyAddressAttribute' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf allocationId
+
+instance Data.ToHeaders ModifyAddressAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyAddressAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyAddressAttribute where
+  toQuery ModifyAddressAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyAddressAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DomainName" Data.=: domainName,
+        "DryRun" Data.=: dryRun,
+        "AllocationId" Data.=: allocationId
+      ]
+
+-- | /See:/ 'newModifyAddressAttributeResponse' smart constructor.
+data ModifyAddressAttributeResponse = ModifyAddressAttributeResponse'
+  { -- | Information about the Elastic IP address.
+    address :: Prelude.Maybe AddressAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyAddressAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'modifyAddressAttributeResponse_address' - Information about the Elastic IP address.
+--
+-- 'httpStatus', 'modifyAddressAttributeResponse_httpStatus' - The response's http status code.
+newModifyAddressAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyAddressAttributeResponse
+newModifyAddressAttributeResponse pHttpStatus_ =
+  ModifyAddressAttributeResponse'
+    { address =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Elastic IP address.
+modifyAddressAttributeResponse_address :: Lens.Lens' ModifyAddressAttributeResponse (Prelude.Maybe AddressAttribute)
+modifyAddressAttributeResponse_address = Lens.lens (\ModifyAddressAttributeResponse' {address} -> address) (\s@ModifyAddressAttributeResponse' {} a -> s {address = a} :: ModifyAddressAttributeResponse)
+
+-- | The response's http status code.
+modifyAddressAttributeResponse_httpStatus :: Lens.Lens' ModifyAddressAttributeResponse Prelude.Int
+modifyAddressAttributeResponse_httpStatus = Lens.lens (\ModifyAddressAttributeResponse' {httpStatus} -> httpStatus) (\s@ModifyAddressAttributeResponse' {} a -> s {httpStatus = a} :: ModifyAddressAttributeResponse)
+
+instance
+  Prelude.NFData
+    ModifyAddressAttributeResponse
+  where
+  rnf ModifyAddressAttributeResponse' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyAvailabilityZoneGroup.hs b/gen/Amazonka/EC2/ModifyAvailabilityZoneGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyAvailabilityZoneGroup.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyAvailabilityZoneGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the opt-in status of the Local Zone and Wavelength Zone group
+-- for your account.
+--
+-- Use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeAvailabilityZones.html DescribeAvailabilityZones>
+-- to view the value for @GroupName@.
+module Amazonka.EC2.ModifyAvailabilityZoneGroup
+  ( -- * Creating a Request
+    ModifyAvailabilityZoneGroup (..),
+    newModifyAvailabilityZoneGroup,
+
+    -- * Request Lenses
+    modifyAvailabilityZoneGroup_dryRun,
+    modifyAvailabilityZoneGroup_groupName,
+    modifyAvailabilityZoneGroup_optInStatus,
+
+    -- * Destructuring the Response
+    ModifyAvailabilityZoneGroupResponse (..),
+    newModifyAvailabilityZoneGroupResponse,
+
+    -- * Response Lenses
+    modifyAvailabilityZoneGroupResponse_return,
+    modifyAvailabilityZoneGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyAvailabilityZoneGroup' smart constructor.
+data ModifyAvailabilityZoneGroup = ModifyAvailabilityZoneGroup'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the Availability Zone group, Local Zone group, or Wavelength
+    -- Zone group.
+    groupName :: Prelude.Text,
+    -- | Indicates whether you are opted in to the Local Zone group or Wavelength
+    -- Zone group. The only valid value is @opted-in@. You must contact
+    -- <https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services Amazon Web Services Support>
+    -- to opt out of a Local Zone or Wavelength Zone group.
+    optInStatus :: ModifyAvailabilityZoneOptInStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyAvailabilityZoneGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyAvailabilityZoneGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupName', 'modifyAvailabilityZoneGroup_groupName' - The name of the Availability Zone group, Local Zone group, or Wavelength
+-- Zone group.
+--
+-- 'optInStatus', 'modifyAvailabilityZoneGroup_optInStatus' - Indicates whether you are opted in to the Local Zone group or Wavelength
+-- Zone group. The only valid value is @opted-in@. You must contact
+-- <https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services Amazon Web Services Support>
+-- to opt out of a Local Zone or Wavelength Zone group.
+newModifyAvailabilityZoneGroup ::
+  -- | 'groupName'
+  Prelude.Text ->
+  -- | 'optInStatus'
+  ModifyAvailabilityZoneOptInStatus ->
+  ModifyAvailabilityZoneGroup
+newModifyAvailabilityZoneGroup
+  pGroupName_
+  pOptInStatus_ =
+    ModifyAvailabilityZoneGroup'
+      { dryRun =
+          Prelude.Nothing,
+        groupName = pGroupName_,
+        optInStatus = pOptInStatus_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyAvailabilityZoneGroup_dryRun :: Lens.Lens' ModifyAvailabilityZoneGroup (Prelude.Maybe Prelude.Bool)
+modifyAvailabilityZoneGroup_dryRun = Lens.lens (\ModifyAvailabilityZoneGroup' {dryRun} -> dryRun) (\s@ModifyAvailabilityZoneGroup' {} a -> s {dryRun = a} :: ModifyAvailabilityZoneGroup)
+
+-- | The name of the Availability Zone group, Local Zone group, or Wavelength
+-- Zone group.
+modifyAvailabilityZoneGroup_groupName :: Lens.Lens' ModifyAvailabilityZoneGroup Prelude.Text
+modifyAvailabilityZoneGroup_groupName = Lens.lens (\ModifyAvailabilityZoneGroup' {groupName} -> groupName) (\s@ModifyAvailabilityZoneGroup' {} a -> s {groupName = a} :: ModifyAvailabilityZoneGroup)
+
+-- | Indicates whether you are opted in to the Local Zone group or Wavelength
+-- Zone group. The only valid value is @opted-in@. You must contact
+-- <https://console.aws.amazon.com/support/home#/case/create%3FissueType=customer-service%26serviceCode=general-info%26getting-started%26categoryCode=using-aws%26services Amazon Web Services Support>
+-- to opt out of a Local Zone or Wavelength Zone group.
+modifyAvailabilityZoneGroup_optInStatus :: Lens.Lens' ModifyAvailabilityZoneGroup ModifyAvailabilityZoneOptInStatus
+modifyAvailabilityZoneGroup_optInStatus = Lens.lens (\ModifyAvailabilityZoneGroup' {optInStatus} -> optInStatus) (\s@ModifyAvailabilityZoneGroup' {} a -> s {optInStatus = a} :: ModifyAvailabilityZoneGroup)
+
+instance Core.AWSRequest ModifyAvailabilityZoneGroup where
+  type
+    AWSResponse ModifyAvailabilityZoneGroup =
+      ModifyAvailabilityZoneGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyAvailabilityZoneGroupResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyAvailabilityZoneGroup where
+  hashWithSalt _salt ModifyAvailabilityZoneGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` optInStatus
+
+instance Prelude.NFData ModifyAvailabilityZoneGroup where
+  rnf ModifyAvailabilityZoneGroup' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf optInStatus
+
+instance Data.ToHeaders ModifyAvailabilityZoneGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyAvailabilityZoneGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyAvailabilityZoneGroup where
+  toQuery ModifyAvailabilityZoneGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyAvailabilityZoneGroup" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GroupName" Data.=: groupName,
+        "OptInStatus" Data.=: optInStatus
+      ]
+
+-- | /See:/ 'newModifyAvailabilityZoneGroupResponse' smart constructor.
+data ModifyAvailabilityZoneGroupResponse = ModifyAvailabilityZoneGroupResponse'
+  { -- | Is @true@ if the request succeeds, and an error otherwise.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyAvailabilityZoneGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyAvailabilityZoneGroupResponse_return' - Is @true@ if the request succeeds, and an error otherwise.
+--
+-- 'httpStatus', 'modifyAvailabilityZoneGroupResponse_httpStatus' - The response's http status code.
+newModifyAvailabilityZoneGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyAvailabilityZoneGroupResponse
+newModifyAvailabilityZoneGroupResponse pHttpStatus_ =
+  ModifyAvailabilityZoneGroupResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Is @true@ if the request succeeds, and an error otherwise.
+modifyAvailabilityZoneGroupResponse_return :: Lens.Lens' ModifyAvailabilityZoneGroupResponse (Prelude.Maybe Prelude.Bool)
+modifyAvailabilityZoneGroupResponse_return = Lens.lens (\ModifyAvailabilityZoneGroupResponse' {return'} -> return') (\s@ModifyAvailabilityZoneGroupResponse' {} a -> s {return' = a} :: ModifyAvailabilityZoneGroupResponse)
+
+-- | The response's http status code.
+modifyAvailabilityZoneGroupResponse_httpStatus :: Lens.Lens' ModifyAvailabilityZoneGroupResponse Prelude.Int
+modifyAvailabilityZoneGroupResponse_httpStatus = Lens.lens (\ModifyAvailabilityZoneGroupResponse' {httpStatus} -> httpStatus) (\s@ModifyAvailabilityZoneGroupResponse' {} a -> s {httpStatus = a} :: ModifyAvailabilityZoneGroupResponse)
+
+instance
+  Prelude.NFData
+    ModifyAvailabilityZoneGroupResponse
+  where
+  rnf ModifyAvailabilityZoneGroupResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyCapacityReservation.hs b/gen/Amazonka/EC2/ModifyCapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyCapacityReservation.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyCapacityReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+module Amazonka.EC2.ModifyCapacityReservation
+  ( -- * Creating a Request
+    ModifyCapacityReservation (..),
+    newModifyCapacityReservation,
+
+    -- * Request Lenses
+    modifyCapacityReservation_accept,
+    modifyCapacityReservation_additionalInfo,
+    modifyCapacityReservation_dryRun,
+    modifyCapacityReservation_endDate,
+    modifyCapacityReservation_endDateType,
+    modifyCapacityReservation_instanceCount,
+    modifyCapacityReservation_capacityReservationId,
+
+    -- * Destructuring the Response
+    ModifyCapacityReservationResponse (..),
+    newModifyCapacityReservationResponse,
+
+    -- * Response Lenses
+    modifyCapacityReservationResponse_return,
+    modifyCapacityReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyCapacityReservation' smart constructor.
+data ModifyCapacityReservation = ModifyCapacityReservation'
+  { -- | Reserved. Capacity Reservations you have created are accepted by
+    -- default.
+    accept :: Prelude.Maybe Prelude.Bool,
+    -- | Reserved for future use.
+    additionalInfo :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    --
+    -- The Capacity Reservation is cancelled within an hour from the specified
+    -- time. For example, if you specify 5\/31\/2019, 13:30:55, the Capacity
+    -- Reservation is guaranteed to end between 13:30:55 and 14:30:55 on
+    -- 5\/31\/2019.
+    --
+    -- You must provide an @EndDate@ value if @EndDateType@ is @limited@. Omit
+    -- @EndDate@ if @EndDateType@ is @unlimited@.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | 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. Do not provide an @EndDate@ value if
+    --     @EndDateType@ is @unlimited@.
+    --
+    -- -   @limited@ - The Capacity Reservation expires automatically at a
+    --     specified date and time. You must provide an @EndDate@ value if
+    --     @EndDateType@ is @limited@.
+    endDateType :: Prelude.Maybe EndDateType,
+    -- | The number of instances for which to reserve capacity. The number of
+    -- instances can\'t be increased or decreased by more than @1000@ in a
+    -- single request.
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyCapacityReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accept', 'modifyCapacityReservation_accept' - Reserved. Capacity Reservations you have created are accepted by
+-- default.
+--
+-- 'additionalInfo', 'modifyCapacityReservation_additionalInfo' - Reserved for future use.
+--
+-- 'dryRun', 'modifyCapacityReservation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endDate', 'modifyCapacityReservation_endDate' - 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.
+--
+-- The Capacity Reservation is cancelled within an hour from the specified
+-- time. For example, if you specify 5\/31\/2019, 13:30:55, the Capacity
+-- Reservation is guaranteed to end between 13:30:55 and 14:30:55 on
+-- 5\/31\/2019.
+--
+-- You must provide an @EndDate@ value if @EndDateType@ is @limited@. Omit
+-- @EndDate@ if @EndDateType@ is @unlimited@.
+--
+-- 'endDateType', 'modifyCapacityReservation_endDateType' - 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. Do not provide an @EndDate@ value if
+--     @EndDateType@ is @unlimited@.
+--
+-- -   @limited@ - The Capacity Reservation expires automatically at a
+--     specified date and time. You must provide an @EndDate@ value if
+--     @EndDateType@ is @limited@.
+--
+-- 'instanceCount', 'modifyCapacityReservation_instanceCount' - The number of instances for which to reserve capacity. The number of
+-- instances can\'t be increased or decreased by more than @1000@ in a
+-- single request.
+--
+-- 'capacityReservationId', 'modifyCapacityReservation_capacityReservationId' - The ID of the Capacity Reservation.
+newModifyCapacityReservation ::
+  -- | 'capacityReservationId'
+  Prelude.Text ->
+  ModifyCapacityReservation
+newModifyCapacityReservation pCapacityReservationId_ =
+  ModifyCapacityReservation'
+    { accept =
+        Prelude.Nothing,
+      additionalInfo = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      endDate = Prelude.Nothing,
+      endDateType = Prelude.Nothing,
+      instanceCount = Prelude.Nothing,
+      capacityReservationId = pCapacityReservationId_
+    }
+
+-- | Reserved. Capacity Reservations you have created are accepted by
+-- default.
+modifyCapacityReservation_accept :: Lens.Lens' ModifyCapacityReservation (Prelude.Maybe Prelude.Bool)
+modifyCapacityReservation_accept = Lens.lens (\ModifyCapacityReservation' {accept} -> accept) (\s@ModifyCapacityReservation' {} a -> s {accept = a} :: ModifyCapacityReservation)
+
+-- | Reserved for future use.
+modifyCapacityReservation_additionalInfo :: Lens.Lens' ModifyCapacityReservation (Prelude.Maybe Prelude.Text)
+modifyCapacityReservation_additionalInfo = Lens.lens (\ModifyCapacityReservation' {additionalInfo} -> additionalInfo) (\s@ModifyCapacityReservation' {} a -> s {additionalInfo = a} :: ModifyCapacityReservation)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyCapacityReservation_dryRun :: Lens.Lens' ModifyCapacityReservation (Prelude.Maybe Prelude.Bool)
+modifyCapacityReservation_dryRun = Lens.lens (\ModifyCapacityReservation' {dryRun} -> dryRun) (\s@ModifyCapacityReservation' {} a -> s {dryRun = a} :: ModifyCapacityReservation)
+
+-- | 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.
+--
+-- The Capacity Reservation is cancelled within an hour from the specified
+-- time. For example, if you specify 5\/31\/2019, 13:30:55, the Capacity
+-- Reservation is guaranteed to end between 13:30:55 and 14:30:55 on
+-- 5\/31\/2019.
+--
+-- You must provide an @EndDate@ value if @EndDateType@ is @limited@. Omit
+-- @EndDate@ if @EndDateType@ is @unlimited@.
+modifyCapacityReservation_endDate :: Lens.Lens' ModifyCapacityReservation (Prelude.Maybe Prelude.UTCTime)
+modifyCapacityReservation_endDate = Lens.lens (\ModifyCapacityReservation' {endDate} -> endDate) (\s@ModifyCapacityReservation' {} a -> s {endDate = a} :: ModifyCapacityReservation) Prelude.. Lens.mapping Data._Time
+
+-- | 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. Do not provide an @EndDate@ value if
+--     @EndDateType@ is @unlimited@.
+--
+-- -   @limited@ - The Capacity Reservation expires automatically at a
+--     specified date and time. You must provide an @EndDate@ value if
+--     @EndDateType@ is @limited@.
+modifyCapacityReservation_endDateType :: Lens.Lens' ModifyCapacityReservation (Prelude.Maybe EndDateType)
+modifyCapacityReservation_endDateType = Lens.lens (\ModifyCapacityReservation' {endDateType} -> endDateType) (\s@ModifyCapacityReservation' {} a -> s {endDateType = a} :: ModifyCapacityReservation)
+
+-- | The number of instances for which to reserve capacity. The number of
+-- instances can\'t be increased or decreased by more than @1000@ in a
+-- single request.
+modifyCapacityReservation_instanceCount :: Lens.Lens' ModifyCapacityReservation (Prelude.Maybe Prelude.Int)
+modifyCapacityReservation_instanceCount = Lens.lens (\ModifyCapacityReservation' {instanceCount} -> instanceCount) (\s@ModifyCapacityReservation' {} a -> s {instanceCount = a} :: ModifyCapacityReservation)
+
+-- | The ID of the Capacity Reservation.
+modifyCapacityReservation_capacityReservationId :: Lens.Lens' ModifyCapacityReservation Prelude.Text
+modifyCapacityReservation_capacityReservationId = Lens.lens (\ModifyCapacityReservation' {capacityReservationId} -> capacityReservationId) (\s@ModifyCapacityReservation' {} a -> s {capacityReservationId = a} :: ModifyCapacityReservation)
+
+instance Core.AWSRequest ModifyCapacityReservation where
+  type
+    AWSResponse ModifyCapacityReservation =
+      ModifyCapacityReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyCapacityReservationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyCapacityReservation where
+  hashWithSalt _salt ModifyCapacityReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` accept
+      `Prelude.hashWithSalt` additionalInfo
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` endDateType
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` capacityReservationId
+
+instance Prelude.NFData ModifyCapacityReservation where
+  rnf ModifyCapacityReservation' {..} =
+    Prelude.rnf accept
+      `Prelude.seq` Prelude.rnf additionalInfo
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf endDateType
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf capacityReservationId
+
+instance Data.ToHeaders ModifyCapacityReservation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyCapacityReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyCapacityReservation where
+  toQuery ModifyCapacityReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyCapacityReservation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Accept" Data.=: accept,
+        "AdditionalInfo" Data.=: additionalInfo,
+        "DryRun" Data.=: dryRun,
+        "EndDate" Data.=: endDate,
+        "EndDateType" Data.=: endDateType,
+        "InstanceCount" Data.=: instanceCount,
+        "CapacityReservationId"
+          Data.=: capacityReservationId
+      ]
+
+-- | /See:/ 'newModifyCapacityReservationResponse' smart constructor.
+data ModifyCapacityReservationResponse = ModifyCapacityReservationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyCapacityReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyCapacityReservationResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyCapacityReservationResponse_httpStatus' - The response's http status code.
+newModifyCapacityReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyCapacityReservationResponse
+newModifyCapacityReservationResponse pHttpStatus_ =
+  ModifyCapacityReservationResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyCapacityReservationResponse_return :: Lens.Lens' ModifyCapacityReservationResponse (Prelude.Maybe Prelude.Bool)
+modifyCapacityReservationResponse_return = Lens.lens (\ModifyCapacityReservationResponse' {return'} -> return') (\s@ModifyCapacityReservationResponse' {} a -> s {return' = a} :: ModifyCapacityReservationResponse)
+
+-- | The response's http status code.
+modifyCapacityReservationResponse_httpStatus :: Lens.Lens' ModifyCapacityReservationResponse Prelude.Int
+modifyCapacityReservationResponse_httpStatus = Lens.lens (\ModifyCapacityReservationResponse' {httpStatus} -> httpStatus) (\s@ModifyCapacityReservationResponse' {} a -> s {httpStatus = a} :: ModifyCapacityReservationResponse)
+
+instance
+  Prelude.NFData
+    ModifyCapacityReservationResponse
+  where
+  rnf ModifyCapacityReservationResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyCapacityReservationFleet.hs b/gen/Amazonka/EC2/ModifyCapacityReservationFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyCapacityReservationFleet.hs
@@ -0,0 +1,321 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyCapacityReservationFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a Capacity Reservation Fleet.
+--
+-- When you modify the total target capacity of a Capacity Reservation
+-- Fleet, the Fleet automatically creates new Capacity Reservations, or
+-- modifies or cancels existing Capacity Reservations in the Fleet to meet
+-- the new total target capacity. When you modify the end date for the
+-- Fleet, the end dates for all of the individual Capacity Reservations in
+-- the Fleet are updated accordingly.
+module Amazonka.EC2.ModifyCapacityReservationFleet
+  ( -- * Creating a Request
+    ModifyCapacityReservationFleet (..),
+    newModifyCapacityReservationFleet,
+
+    -- * Request Lenses
+    modifyCapacityReservationFleet_dryRun,
+    modifyCapacityReservationFleet_endDate,
+    modifyCapacityReservationFleet_removeEndDate,
+    modifyCapacityReservationFleet_totalTargetCapacity,
+    modifyCapacityReservationFleet_capacityReservationFleetId,
+
+    -- * Destructuring the Response
+    ModifyCapacityReservationFleetResponse (..),
+    newModifyCapacityReservationFleetResponse,
+
+    -- * Response Lenses
+    modifyCapacityReservationFleetResponse_return,
+    modifyCapacityReservationFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyCapacityReservationFleet' smart constructor.
+data ModifyCapacityReservationFleet = ModifyCapacityReservationFleet'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The date and time at which the Capacity Reservation Fleet expires. When
+    -- the Capacity Reservation Fleet expires, its state changes to @expired@
+    -- and all of the Capacity Reservations in the Fleet expire.
+    --
+    -- The Capacity Reservation Fleet expires within an hour after the
+    -- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
+    -- the Capacity Reservation Fleet is guaranteed to expire between
+    -- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
+    --
+    -- You can\'t specify __EndDate__ and __RemoveEndDate__ in the same
+    -- request.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether to remove the end date from the Capacity Reservation
+    -- Fleet. If you remove the end date, the Capacity Reservation Fleet does
+    -- not expire and it remains active until you explicitly cancel it using
+    -- the __CancelCapacityReservationFleet__ action.
+    --
+    -- You can\'t specify __RemoveEndDate__ and __EndDate__ in the same
+    -- request.
+    removeEndDate :: Prelude.Maybe Prelude.Bool,
+    -- | The total number of capacity units to be reserved by the Capacity
+    -- Reservation Fleet. This value, together with the instance type weights
+    -- that you assign to each instance type used by the Fleet determine the
+    -- number of instances for which the Fleet reserves capacity. Both values
+    -- are based on units that make sense for your workload. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+    -- in the Amazon EC2 User Guide.
+    totalTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Capacity Reservation Fleet to modify.
+    capacityReservationFleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyCapacityReservationFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyCapacityReservationFleet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endDate', 'modifyCapacityReservationFleet_endDate' - The date and time at which the Capacity Reservation Fleet expires. When
+-- the Capacity Reservation Fleet expires, its state changes to @expired@
+-- and all of the Capacity Reservations in the Fleet expire.
+--
+-- The Capacity Reservation Fleet expires within an hour after the
+-- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
+-- the Capacity Reservation Fleet is guaranteed to expire between
+-- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
+--
+-- You can\'t specify __EndDate__ and __RemoveEndDate__ in the same
+-- request.
+--
+-- 'removeEndDate', 'modifyCapacityReservationFleet_removeEndDate' - Indicates whether to remove the end date from the Capacity Reservation
+-- Fleet. If you remove the end date, the Capacity Reservation Fleet does
+-- not expire and it remains active until you explicitly cancel it using
+-- the __CancelCapacityReservationFleet__ action.
+--
+-- You can\'t specify __RemoveEndDate__ and __EndDate__ in the same
+-- request.
+--
+-- 'totalTargetCapacity', 'modifyCapacityReservationFleet_totalTargetCapacity' - The total number of capacity units to be reserved by the Capacity
+-- Reservation Fleet. This value, together with the instance type weights
+-- that you assign to each instance type used by the Fleet determine the
+-- number of instances for which the Fleet reserves capacity. Both values
+-- are based on units that make sense for your workload. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+--
+-- 'capacityReservationFleetId', 'modifyCapacityReservationFleet_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet to modify.
+newModifyCapacityReservationFleet ::
+  -- | 'capacityReservationFleetId'
+  Prelude.Text ->
+  ModifyCapacityReservationFleet
+newModifyCapacityReservationFleet
+  pCapacityReservationFleetId_ =
+    ModifyCapacityReservationFleet'
+      { dryRun =
+          Prelude.Nothing,
+        endDate = Prelude.Nothing,
+        removeEndDate = Prelude.Nothing,
+        totalTargetCapacity = Prelude.Nothing,
+        capacityReservationFleetId =
+          pCapacityReservationFleetId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyCapacityReservationFleet_dryRun :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.Bool)
+modifyCapacityReservationFleet_dryRun = Lens.lens (\ModifyCapacityReservationFleet' {dryRun} -> dryRun) (\s@ModifyCapacityReservationFleet' {} a -> s {dryRun = a} :: ModifyCapacityReservationFleet)
+
+-- | The date and time at which the Capacity Reservation Fleet expires. When
+-- the Capacity Reservation Fleet expires, its state changes to @expired@
+-- and all of the Capacity Reservations in the Fleet expire.
+--
+-- The Capacity Reservation Fleet expires within an hour after the
+-- specified time. For example, if you specify @5\/31\/2019@, @13:30:55@,
+-- the Capacity Reservation Fleet is guaranteed to expire between
+-- @13:30:55@ and @14:30:55@ on @5\/31\/2019@.
+--
+-- You can\'t specify __EndDate__ and __RemoveEndDate__ in the same
+-- request.
+modifyCapacityReservationFleet_endDate :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
+modifyCapacityReservationFleet_endDate = Lens.lens (\ModifyCapacityReservationFleet' {endDate} -> endDate) (\s@ModifyCapacityReservationFleet' {} a -> s {endDate = a} :: ModifyCapacityReservationFleet) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether to remove the end date from the Capacity Reservation
+-- Fleet. If you remove the end date, the Capacity Reservation Fleet does
+-- not expire and it remains active until you explicitly cancel it using
+-- the __CancelCapacityReservationFleet__ action.
+--
+-- You can\'t specify __RemoveEndDate__ and __EndDate__ in the same
+-- request.
+modifyCapacityReservationFleet_removeEndDate :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.Bool)
+modifyCapacityReservationFleet_removeEndDate = Lens.lens (\ModifyCapacityReservationFleet' {removeEndDate} -> removeEndDate) (\s@ModifyCapacityReservationFleet' {} a -> s {removeEndDate = a} :: ModifyCapacityReservationFleet)
+
+-- | The total number of capacity units to be reserved by the Capacity
+-- Reservation Fleet. This value, together with the instance type weights
+-- that you assign to each instance type used by the Fleet determine the
+-- number of instances for which the Fleet reserves capacity. Both values
+-- are based on units that make sense for your workload. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+modifyCapacityReservationFleet_totalTargetCapacity :: Lens.Lens' ModifyCapacityReservationFleet (Prelude.Maybe Prelude.Int)
+modifyCapacityReservationFleet_totalTargetCapacity = Lens.lens (\ModifyCapacityReservationFleet' {totalTargetCapacity} -> totalTargetCapacity) (\s@ModifyCapacityReservationFleet' {} a -> s {totalTargetCapacity = a} :: ModifyCapacityReservationFleet)
+
+-- | The ID of the Capacity Reservation Fleet to modify.
+modifyCapacityReservationFleet_capacityReservationFleetId :: Lens.Lens' ModifyCapacityReservationFleet Prelude.Text
+modifyCapacityReservationFleet_capacityReservationFleetId = Lens.lens (\ModifyCapacityReservationFleet' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@ModifyCapacityReservationFleet' {} a -> s {capacityReservationFleetId = a} :: ModifyCapacityReservationFleet)
+
+instance
+  Core.AWSRequest
+    ModifyCapacityReservationFleet
+  where
+  type
+    AWSResponse ModifyCapacityReservationFleet =
+      ModifyCapacityReservationFleetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyCapacityReservationFleetResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyCapacityReservationFleet
+  where
+  hashWithSalt
+    _salt
+    ModifyCapacityReservationFleet' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` endDate
+        `Prelude.hashWithSalt` removeEndDate
+        `Prelude.hashWithSalt` totalTargetCapacity
+        `Prelude.hashWithSalt` capacityReservationFleetId
+
+instance
+  Prelude.NFData
+    ModifyCapacityReservationFleet
+  where
+  rnf ModifyCapacityReservationFleet' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf removeEndDate
+      `Prelude.seq` Prelude.rnf totalTargetCapacity
+      `Prelude.seq` Prelude.rnf capacityReservationFleetId
+
+instance
+  Data.ToHeaders
+    ModifyCapacityReservationFleet
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyCapacityReservationFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyCapacityReservationFleet where
+  toQuery ModifyCapacityReservationFleet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyCapacityReservationFleet" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EndDate" Data.=: endDate,
+        "RemoveEndDate" Data.=: removeEndDate,
+        "TotalTargetCapacity" Data.=: totalTargetCapacity,
+        "CapacityReservationFleetId"
+          Data.=: capacityReservationFleetId
+      ]
+
+-- | /See:/ 'newModifyCapacityReservationFleetResponse' smart constructor.
+data ModifyCapacityReservationFleetResponse = ModifyCapacityReservationFleetResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyCapacityReservationFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyCapacityReservationFleetResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyCapacityReservationFleetResponse_httpStatus' - The response's http status code.
+newModifyCapacityReservationFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyCapacityReservationFleetResponse
+newModifyCapacityReservationFleetResponse
+  pHttpStatus_ =
+    ModifyCapacityReservationFleetResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyCapacityReservationFleetResponse_return :: Lens.Lens' ModifyCapacityReservationFleetResponse (Prelude.Maybe Prelude.Bool)
+modifyCapacityReservationFleetResponse_return = Lens.lens (\ModifyCapacityReservationFleetResponse' {return'} -> return') (\s@ModifyCapacityReservationFleetResponse' {} a -> s {return' = a} :: ModifyCapacityReservationFleetResponse)
+
+-- | The response's http status code.
+modifyCapacityReservationFleetResponse_httpStatus :: Lens.Lens' ModifyCapacityReservationFleetResponse Prelude.Int
+modifyCapacityReservationFleetResponse_httpStatus = Lens.lens (\ModifyCapacityReservationFleetResponse' {httpStatus} -> httpStatus) (\s@ModifyCapacityReservationFleetResponse' {} a -> s {httpStatus = a} :: ModifyCapacityReservationFleetResponse)
+
+instance
+  Prelude.NFData
+    ModifyCapacityReservationFleetResponse
+  where
+  rnf ModifyCapacityReservationFleetResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyClientVpnEndpoint.hs b/gen/Amazonka/EC2/ModifyClientVpnEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyClientVpnEndpoint.hs
@@ -0,0 +1,440 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyClientVpnEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified Client VPN endpoint. Modifying the DNS server
+-- resets existing client connections.
+module Amazonka.EC2.ModifyClientVpnEndpoint
+  ( -- * Creating a Request
+    ModifyClientVpnEndpoint (..),
+    newModifyClientVpnEndpoint,
+
+    -- * Request Lenses
+    modifyClientVpnEndpoint_clientConnectOptions,
+    modifyClientVpnEndpoint_clientLoginBannerOptions,
+    modifyClientVpnEndpoint_connectionLogOptions,
+    modifyClientVpnEndpoint_description,
+    modifyClientVpnEndpoint_dnsServers,
+    modifyClientVpnEndpoint_dryRun,
+    modifyClientVpnEndpoint_securityGroupIds,
+    modifyClientVpnEndpoint_selfServicePortal,
+    modifyClientVpnEndpoint_serverCertificateArn,
+    modifyClientVpnEndpoint_sessionTimeoutHours,
+    modifyClientVpnEndpoint_splitTunnel,
+    modifyClientVpnEndpoint_vpcId,
+    modifyClientVpnEndpoint_vpnPort,
+    modifyClientVpnEndpoint_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    ModifyClientVpnEndpointResponse (..),
+    newModifyClientVpnEndpointResponse,
+
+    -- * Response Lenses
+    modifyClientVpnEndpointResponse_return,
+    modifyClientVpnEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyClientVpnEndpoint' smart constructor.
+data ModifyClientVpnEndpoint = ModifyClientVpnEndpoint'
+  { -- | The options for managing connection authorization for new client
+    -- connections.
+    clientConnectOptions :: Prelude.Maybe ClientConnectOptions,
+    -- | Options for enabling a customizable text banner that will be displayed
+    -- on Amazon Web Services provided clients when a VPN session is
+    -- established.
+    clientLoginBannerOptions :: Prelude.Maybe ClientLoginBannerOptions,
+    -- | Information about the client connection logging options.
+    --
+    -- If you enable client connection logging, data about client connections
+    -- is sent to a Cloudwatch Logs log stream. The following information is
+    -- logged:
+    --
+    -- -   Client connection requests
+    --
+    -- -   Client connection results (successful and unsuccessful)
+    --
+    -- -   Reasons for unsuccessful client connection requests
+    --
+    -- -   Client connection termination time
+    connectionLogOptions :: Prelude.Maybe ConnectionLogOptions,
+    -- | A brief description of the Client VPN endpoint.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about the DNS servers to be used by Client VPN connections.
+    -- A Client VPN endpoint can have up to two DNS servers.
+    dnsServers :: Prelude.Maybe DnsServersOptionsModifyStructure,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of one or more security groups to apply to the target network.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | Specify whether to enable the self-service portal for the Client VPN
+    -- endpoint.
+    selfServicePortal :: Prelude.Maybe SelfServicePortal,
+    -- | The ARN of the server certificate to be used. The server certificate
+    -- must be provisioned in Certificate Manager (ACM).
+    serverCertificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The maximum VPN session duration time in hours.
+    --
+    -- Valid values: @8 | 10 | 12 | 24@
+    --
+    -- Default value: @24@
+    sessionTimeoutHours :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether the VPN is split-tunnel.
+    --
+    -- For information about split-tunnel VPN endpoints, see
+    -- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-tunnel Client VPN endpoint>
+    -- in the /Client VPN Administrator Guide/.
+    splitTunnel :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC to associate with the Client VPN endpoint.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The port number to assign to the Client VPN endpoint for TCP and UDP
+    -- traffic.
+    --
+    -- Valid Values: @443@ | @1194@
+    --
+    -- Default Value: @443@
+    vpnPort :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Client VPN endpoint to modify.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyClientVpnEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientConnectOptions', 'modifyClientVpnEndpoint_clientConnectOptions' - The options for managing connection authorization for new client
+-- connections.
+--
+-- 'clientLoginBannerOptions', 'modifyClientVpnEndpoint_clientLoginBannerOptions' - Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+--
+-- 'connectionLogOptions', 'modifyClientVpnEndpoint_connectionLogOptions' - Information about the client connection logging options.
+--
+-- If you enable client connection logging, data about client connections
+-- is sent to a Cloudwatch Logs log stream. The following information is
+-- logged:
+--
+-- -   Client connection requests
+--
+-- -   Client connection results (successful and unsuccessful)
+--
+-- -   Reasons for unsuccessful client connection requests
+--
+-- -   Client connection termination time
+--
+-- 'description', 'modifyClientVpnEndpoint_description' - A brief description of the Client VPN endpoint.
+--
+-- 'dnsServers', 'modifyClientVpnEndpoint_dnsServers' - Information about the DNS servers to be used by Client VPN connections.
+-- A Client VPN endpoint can have up to two DNS servers.
+--
+-- 'dryRun', 'modifyClientVpnEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'securityGroupIds', 'modifyClientVpnEndpoint_securityGroupIds' - The IDs of one or more security groups to apply to the target network.
+--
+-- 'selfServicePortal', 'modifyClientVpnEndpoint_selfServicePortal' - Specify whether to enable the self-service portal for the Client VPN
+-- endpoint.
+--
+-- 'serverCertificateArn', 'modifyClientVpnEndpoint_serverCertificateArn' - The ARN of the server certificate to be used. The server certificate
+-- must be provisioned in Certificate Manager (ACM).
+--
+-- 'sessionTimeoutHours', 'modifyClientVpnEndpoint_sessionTimeoutHours' - The maximum VPN session duration time in hours.
+--
+-- Valid values: @8 | 10 | 12 | 24@
+--
+-- Default value: @24@
+--
+-- 'splitTunnel', 'modifyClientVpnEndpoint_splitTunnel' - Indicates whether the VPN is split-tunnel.
+--
+-- For information about split-tunnel VPN endpoints, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-tunnel Client VPN endpoint>
+-- in the /Client VPN Administrator Guide/.
+--
+-- 'vpcId', 'modifyClientVpnEndpoint_vpcId' - The ID of the VPC to associate with the Client VPN endpoint.
+--
+-- 'vpnPort', 'modifyClientVpnEndpoint_vpnPort' - The port number to assign to the Client VPN endpoint for TCP and UDP
+-- traffic.
+--
+-- Valid Values: @443@ | @1194@
+--
+-- Default Value: @443@
+--
+-- 'clientVpnEndpointId', 'modifyClientVpnEndpoint_clientVpnEndpointId' - The ID of the Client VPN endpoint to modify.
+newModifyClientVpnEndpoint ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  ModifyClientVpnEndpoint
+newModifyClientVpnEndpoint pClientVpnEndpointId_ =
+  ModifyClientVpnEndpoint'
+    { clientConnectOptions =
+        Prelude.Nothing,
+      clientLoginBannerOptions = Prelude.Nothing,
+      connectionLogOptions = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dnsServers = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      selfServicePortal = Prelude.Nothing,
+      serverCertificateArn = Prelude.Nothing,
+      sessionTimeoutHours = Prelude.Nothing,
+      splitTunnel = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      vpnPort = Prelude.Nothing,
+      clientVpnEndpointId = pClientVpnEndpointId_
+    }
+
+-- | The options for managing connection authorization for new client
+-- connections.
+modifyClientVpnEndpoint_clientConnectOptions :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe ClientConnectOptions)
+modifyClientVpnEndpoint_clientConnectOptions = Lens.lens (\ModifyClientVpnEndpoint' {clientConnectOptions} -> clientConnectOptions) (\s@ModifyClientVpnEndpoint' {} a -> s {clientConnectOptions = a} :: ModifyClientVpnEndpoint)
+
+-- | Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+modifyClientVpnEndpoint_clientLoginBannerOptions :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe ClientLoginBannerOptions)
+modifyClientVpnEndpoint_clientLoginBannerOptions = Lens.lens (\ModifyClientVpnEndpoint' {clientLoginBannerOptions} -> clientLoginBannerOptions) (\s@ModifyClientVpnEndpoint' {} a -> s {clientLoginBannerOptions = a} :: ModifyClientVpnEndpoint)
+
+-- | Information about the client connection logging options.
+--
+-- If you enable client connection logging, data about client connections
+-- is sent to a Cloudwatch Logs log stream. The following information is
+-- logged:
+--
+-- -   Client connection requests
+--
+-- -   Client connection results (successful and unsuccessful)
+--
+-- -   Reasons for unsuccessful client connection requests
+--
+-- -   Client connection termination time
+modifyClientVpnEndpoint_connectionLogOptions :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe ConnectionLogOptions)
+modifyClientVpnEndpoint_connectionLogOptions = Lens.lens (\ModifyClientVpnEndpoint' {connectionLogOptions} -> connectionLogOptions) (\s@ModifyClientVpnEndpoint' {} a -> s {connectionLogOptions = a} :: ModifyClientVpnEndpoint)
+
+-- | A brief description of the Client VPN endpoint.
+modifyClientVpnEndpoint_description :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+modifyClientVpnEndpoint_description = Lens.lens (\ModifyClientVpnEndpoint' {description} -> description) (\s@ModifyClientVpnEndpoint' {} a -> s {description = a} :: ModifyClientVpnEndpoint)
+
+-- | Information about the DNS servers to be used by Client VPN connections.
+-- A Client VPN endpoint can have up to two DNS servers.
+modifyClientVpnEndpoint_dnsServers :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe DnsServersOptionsModifyStructure)
+modifyClientVpnEndpoint_dnsServers = Lens.lens (\ModifyClientVpnEndpoint' {dnsServers} -> dnsServers) (\s@ModifyClientVpnEndpoint' {} a -> s {dnsServers = a} :: ModifyClientVpnEndpoint)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyClientVpnEndpoint_dryRun :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
+modifyClientVpnEndpoint_dryRun = Lens.lens (\ModifyClientVpnEndpoint' {dryRun} -> dryRun) (\s@ModifyClientVpnEndpoint' {} a -> s {dryRun = a} :: ModifyClientVpnEndpoint)
+
+-- | The IDs of one or more security groups to apply to the target network.
+modifyClientVpnEndpoint_securityGroupIds :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
+modifyClientVpnEndpoint_securityGroupIds = Lens.lens (\ModifyClientVpnEndpoint' {securityGroupIds} -> securityGroupIds) (\s@ModifyClientVpnEndpoint' {} a -> s {securityGroupIds = a} :: ModifyClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specify whether to enable the self-service portal for the Client VPN
+-- endpoint.
+modifyClientVpnEndpoint_selfServicePortal :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe SelfServicePortal)
+modifyClientVpnEndpoint_selfServicePortal = Lens.lens (\ModifyClientVpnEndpoint' {selfServicePortal} -> selfServicePortal) (\s@ModifyClientVpnEndpoint' {} a -> s {selfServicePortal = a} :: ModifyClientVpnEndpoint)
+
+-- | The ARN of the server certificate to be used. The server certificate
+-- must be provisioned in Certificate Manager (ACM).
+modifyClientVpnEndpoint_serverCertificateArn :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+modifyClientVpnEndpoint_serverCertificateArn = Lens.lens (\ModifyClientVpnEndpoint' {serverCertificateArn} -> serverCertificateArn) (\s@ModifyClientVpnEndpoint' {} a -> s {serverCertificateArn = a} :: ModifyClientVpnEndpoint)
+
+-- | The maximum VPN session duration time in hours.
+--
+-- Valid values: @8 | 10 | 12 | 24@
+--
+-- Default value: @24@
+modifyClientVpnEndpoint_sessionTimeoutHours :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Int)
+modifyClientVpnEndpoint_sessionTimeoutHours = Lens.lens (\ModifyClientVpnEndpoint' {sessionTimeoutHours} -> sessionTimeoutHours) (\s@ModifyClientVpnEndpoint' {} a -> s {sessionTimeoutHours = a} :: ModifyClientVpnEndpoint)
+
+-- | Indicates whether the VPN is split-tunnel.
+--
+-- For information about split-tunnel VPN endpoints, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-tunnel Client VPN endpoint>
+-- in the /Client VPN Administrator Guide/.
+modifyClientVpnEndpoint_splitTunnel :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
+modifyClientVpnEndpoint_splitTunnel = Lens.lens (\ModifyClientVpnEndpoint' {splitTunnel} -> splitTunnel) (\s@ModifyClientVpnEndpoint' {} a -> s {splitTunnel = a} :: ModifyClientVpnEndpoint)
+
+-- | The ID of the VPC to associate with the Client VPN endpoint.
+modifyClientVpnEndpoint_vpcId :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+modifyClientVpnEndpoint_vpcId = Lens.lens (\ModifyClientVpnEndpoint' {vpcId} -> vpcId) (\s@ModifyClientVpnEndpoint' {} a -> s {vpcId = a} :: ModifyClientVpnEndpoint)
+
+-- | The port number to assign to the Client VPN endpoint for TCP and UDP
+-- traffic.
+--
+-- Valid Values: @443@ | @1194@
+--
+-- Default Value: @443@
+modifyClientVpnEndpoint_vpnPort :: Lens.Lens' ModifyClientVpnEndpoint (Prelude.Maybe Prelude.Int)
+modifyClientVpnEndpoint_vpnPort = Lens.lens (\ModifyClientVpnEndpoint' {vpnPort} -> vpnPort) (\s@ModifyClientVpnEndpoint' {} a -> s {vpnPort = a} :: ModifyClientVpnEndpoint)
+
+-- | The ID of the Client VPN endpoint to modify.
+modifyClientVpnEndpoint_clientVpnEndpointId :: Lens.Lens' ModifyClientVpnEndpoint Prelude.Text
+modifyClientVpnEndpoint_clientVpnEndpointId = Lens.lens (\ModifyClientVpnEndpoint' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ModifyClientVpnEndpoint' {} a -> s {clientVpnEndpointId = a} :: ModifyClientVpnEndpoint)
+
+instance Core.AWSRequest ModifyClientVpnEndpoint where
+  type
+    AWSResponse ModifyClientVpnEndpoint =
+      ModifyClientVpnEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyClientVpnEndpointResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyClientVpnEndpoint where
+  hashWithSalt _salt ModifyClientVpnEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientConnectOptions
+      `Prelude.hashWithSalt` clientLoginBannerOptions
+      `Prelude.hashWithSalt` connectionLogOptions
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dnsServers
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` selfServicePortal
+      `Prelude.hashWithSalt` serverCertificateArn
+      `Prelude.hashWithSalt` sessionTimeoutHours
+      `Prelude.hashWithSalt` splitTunnel
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpnPort
+      `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance Prelude.NFData ModifyClientVpnEndpoint where
+  rnf ModifyClientVpnEndpoint' {..} =
+    Prelude.rnf clientConnectOptions
+      `Prelude.seq` Prelude.rnf clientLoginBannerOptions
+      `Prelude.seq` Prelude.rnf connectionLogOptions
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dnsServers
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf selfServicePortal
+      `Prelude.seq` Prelude.rnf serverCertificateArn
+      `Prelude.seq` Prelude.rnf sessionTimeoutHours
+      `Prelude.seq` Prelude.rnf splitTunnel
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpnPort
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance Data.ToHeaders ModifyClientVpnEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyClientVpnEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyClientVpnEndpoint where
+  toQuery ModifyClientVpnEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyClientVpnEndpoint" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientConnectOptions" Data.=: clientConnectOptions,
+        "ClientLoginBannerOptions"
+          Data.=: clientLoginBannerOptions,
+        "ConnectionLogOptions" Data.=: connectionLogOptions,
+        "Description" Data.=: description,
+        "DnsServers" Data.=: dnsServers,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        "SelfServicePortal" Data.=: selfServicePortal,
+        "ServerCertificateArn" Data.=: serverCertificateArn,
+        "SessionTimeoutHours" Data.=: sessionTimeoutHours,
+        "SplitTunnel" Data.=: splitTunnel,
+        "VpcId" Data.=: vpcId,
+        "VpnPort" Data.=: vpnPort,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newModifyClientVpnEndpointResponse' smart constructor.
+data ModifyClientVpnEndpointResponse = ModifyClientVpnEndpointResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyClientVpnEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyClientVpnEndpointResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyClientVpnEndpointResponse_httpStatus' - The response's http status code.
+newModifyClientVpnEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyClientVpnEndpointResponse
+newModifyClientVpnEndpointResponse pHttpStatus_ =
+  ModifyClientVpnEndpointResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyClientVpnEndpointResponse_return :: Lens.Lens' ModifyClientVpnEndpointResponse (Prelude.Maybe Prelude.Bool)
+modifyClientVpnEndpointResponse_return = Lens.lens (\ModifyClientVpnEndpointResponse' {return'} -> return') (\s@ModifyClientVpnEndpointResponse' {} a -> s {return' = a} :: ModifyClientVpnEndpointResponse)
+
+-- | The response's http status code.
+modifyClientVpnEndpointResponse_httpStatus :: Lens.Lens' ModifyClientVpnEndpointResponse Prelude.Int
+modifyClientVpnEndpointResponse_httpStatus = Lens.lens (\ModifyClientVpnEndpointResponse' {httpStatus} -> httpStatus) (\s@ModifyClientVpnEndpointResponse' {} a -> s {httpStatus = a} :: ModifyClientVpnEndpointResponse)
+
+instance
+  Prelude.NFData
+    ModifyClientVpnEndpointResponse
+  where
+  rnf ModifyClientVpnEndpointResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyDefaultCreditSpecification.hs b/gen/Amazonka/EC2/ModifyDefaultCreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyDefaultCreditSpecification.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyDefaultCreditSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the default credit option for CPU usage of burstable
+-- performance instances. The default credit option is set at the account
+-- level per Amazon Web Services Region, and is specified per instance
+-- family. All new burstable performance instances in the account launch
+-- using the default credit option.
+--
+-- @ModifyDefaultCreditSpecification@ is an asynchronous operation, which
+-- works at an Amazon Web Services 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
+-- @GetDefaultCreditSpecification@ and check @DefaultCreditSpecification@
+-- for updates.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.ModifyDefaultCreditSpecification
+  ( -- * Creating a Request
+    ModifyDefaultCreditSpecification (..),
+    newModifyDefaultCreditSpecification,
+
+    -- * Request Lenses
+    modifyDefaultCreditSpecification_dryRun,
+    modifyDefaultCreditSpecification_instanceFamily,
+    modifyDefaultCreditSpecification_cpuCredits,
+
+    -- * Destructuring the Response
+    ModifyDefaultCreditSpecificationResponse (..),
+    newModifyDefaultCreditSpecificationResponse,
+
+    -- * Response Lenses
+    modifyDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification,
+    modifyDefaultCreditSpecificationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyDefaultCreditSpecification' smart constructor.
+data ModifyDefaultCreditSpecification = ModifyDefaultCreditSpecification'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The instance family.
+    instanceFamily :: UnlimitedSupportedInstanceFamily,
+    -- | The credit option for CPU usage of the instance family.
+    --
+    -- Valid Values: @standard@ | @unlimited@
+    cpuCredits :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyDefaultCreditSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyDefaultCreditSpecification_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceFamily', 'modifyDefaultCreditSpecification_instanceFamily' - The instance family.
+--
+-- 'cpuCredits', 'modifyDefaultCreditSpecification_cpuCredits' - The credit option for CPU usage of the instance family.
+--
+-- Valid Values: @standard@ | @unlimited@
+newModifyDefaultCreditSpecification ::
+  -- | 'instanceFamily'
+  UnlimitedSupportedInstanceFamily ->
+  -- | 'cpuCredits'
+  Prelude.Text ->
+  ModifyDefaultCreditSpecification
+newModifyDefaultCreditSpecification
+  pInstanceFamily_
+  pCpuCredits_ =
+    ModifyDefaultCreditSpecification'
+      { dryRun =
+          Prelude.Nothing,
+        instanceFamily = pInstanceFamily_,
+        cpuCredits = pCpuCredits_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyDefaultCreditSpecification_dryRun :: Lens.Lens' ModifyDefaultCreditSpecification (Prelude.Maybe Prelude.Bool)
+modifyDefaultCreditSpecification_dryRun = Lens.lens (\ModifyDefaultCreditSpecification' {dryRun} -> dryRun) (\s@ModifyDefaultCreditSpecification' {} a -> s {dryRun = a} :: ModifyDefaultCreditSpecification)
+
+-- | The instance family.
+modifyDefaultCreditSpecification_instanceFamily :: Lens.Lens' ModifyDefaultCreditSpecification UnlimitedSupportedInstanceFamily
+modifyDefaultCreditSpecification_instanceFamily = Lens.lens (\ModifyDefaultCreditSpecification' {instanceFamily} -> instanceFamily) (\s@ModifyDefaultCreditSpecification' {} a -> s {instanceFamily = a} :: ModifyDefaultCreditSpecification)
+
+-- | The credit option for CPU usage of the instance family.
+--
+-- Valid Values: @standard@ | @unlimited@
+modifyDefaultCreditSpecification_cpuCredits :: Lens.Lens' ModifyDefaultCreditSpecification Prelude.Text
+modifyDefaultCreditSpecification_cpuCredits = Lens.lens (\ModifyDefaultCreditSpecification' {cpuCredits} -> cpuCredits) (\s@ModifyDefaultCreditSpecification' {} a -> s {cpuCredits = a} :: ModifyDefaultCreditSpecification)
+
+instance
+  Core.AWSRequest
+    ModifyDefaultCreditSpecification
+  where
+  type
+    AWSResponse ModifyDefaultCreditSpecification =
+      ModifyDefaultCreditSpecificationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyDefaultCreditSpecificationResponse'
+            Prelude.<$> (x Data..@? "instanceFamilyCreditSpecification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyDefaultCreditSpecification
+  where
+  hashWithSalt
+    _salt
+    ModifyDefaultCreditSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceFamily
+        `Prelude.hashWithSalt` cpuCredits
+
+instance
+  Prelude.NFData
+    ModifyDefaultCreditSpecification
+  where
+  rnf ModifyDefaultCreditSpecification' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf cpuCredits
+
+instance
+  Data.ToHeaders
+    ModifyDefaultCreditSpecification
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyDefaultCreditSpecification where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyDefaultCreditSpecification
+  where
+  toQuery ModifyDefaultCreditSpecification' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyDefaultCreditSpecification" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceFamily" Data.=: instanceFamily,
+        "CpuCredits" Data.=: cpuCredits
+      ]
+
+-- | /See:/ 'newModifyDefaultCreditSpecificationResponse' smart constructor.
+data ModifyDefaultCreditSpecificationResponse = ModifyDefaultCreditSpecificationResponse'
+  { -- | The default credit option for CPU usage of the instance family.
+    instanceFamilyCreditSpecification :: Prelude.Maybe InstanceFamilyCreditSpecification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyDefaultCreditSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceFamilyCreditSpecification', 'modifyDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification' - The default credit option for CPU usage of the instance family.
+--
+-- 'httpStatus', 'modifyDefaultCreditSpecificationResponse_httpStatus' - The response's http status code.
+newModifyDefaultCreditSpecificationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyDefaultCreditSpecificationResponse
+newModifyDefaultCreditSpecificationResponse
+  pHttpStatus_ =
+    ModifyDefaultCreditSpecificationResponse'
+      { instanceFamilyCreditSpecification =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The default credit option for CPU usage of the instance family.
+modifyDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification :: Lens.Lens' ModifyDefaultCreditSpecificationResponse (Prelude.Maybe InstanceFamilyCreditSpecification)
+modifyDefaultCreditSpecificationResponse_instanceFamilyCreditSpecification = Lens.lens (\ModifyDefaultCreditSpecificationResponse' {instanceFamilyCreditSpecification} -> instanceFamilyCreditSpecification) (\s@ModifyDefaultCreditSpecificationResponse' {} a -> s {instanceFamilyCreditSpecification = a} :: ModifyDefaultCreditSpecificationResponse)
+
+-- | The response's http status code.
+modifyDefaultCreditSpecificationResponse_httpStatus :: Lens.Lens' ModifyDefaultCreditSpecificationResponse Prelude.Int
+modifyDefaultCreditSpecificationResponse_httpStatus = Lens.lens (\ModifyDefaultCreditSpecificationResponse' {httpStatus} -> httpStatus) (\s@ModifyDefaultCreditSpecificationResponse' {} a -> s {httpStatus = a} :: ModifyDefaultCreditSpecificationResponse)
+
+instance
+  Prelude.NFData
+    ModifyDefaultCreditSpecificationResponse
+  where
+  rnf ModifyDefaultCreditSpecificationResponse' {..} =
+    Prelude.rnf instanceFamilyCreditSpecification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyEbsDefaultKmsKeyId.hs b/gen/Amazonka/EC2/ModifyEbsDefaultKmsKeyId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyEbsDefaultKmsKeyId.hs
@@ -0,0 +1,267 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyEbsDefaultKmsKeyId
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the default KMS key for EBS encryption by default for your
+-- account in this Region.
+--
+-- Amazon Web Services creates a unique Amazon Web Services managed KMS key
+-- in each Region for use with encryption by default. If you change the
+-- default KMS key to a symmetric customer managed KMS key, it is used
+-- instead of the Amazon Web Services managed KMS key. To reset the default
+-- KMS key to the Amazon Web Services managed KMS key for EBS, use
+-- ResetEbsDefaultKmsKeyId. Amazon EBS does not support asymmetric KMS
+-- keys.
+--
+-- If you delete or disable the customer managed KMS key that you specified
+-- for use with encryption by default, your instances will fail to launch.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ModifyEbsDefaultKmsKeyId
+  ( -- * Creating a Request
+    ModifyEbsDefaultKmsKeyId (..),
+    newModifyEbsDefaultKmsKeyId,
+
+    -- * Request Lenses
+    modifyEbsDefaultKmsKeyId_dryRun,
+    modifyEbsDefaultKmsKeyId_kmsKeyId,
+
+    -- * Destructuring the Response
+    ModifyEbsDefaultKmsKeyIdResponse (..),
+    newModifyEbsDefaultKmsKeyIdResponse,
+
+    -- * Response Lenses
+    modifyEbsDefaultKmsKeyIdResponse_kmsKeyId,
+    modifyEbsDefaultKmsKeyIdResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyEbsDefaultKmsKeyId' smart constructor.
+data ModifyEbsDefaultKmsKeyId = ModifyEbsDefaultKmsKeyId'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier of the Key Management Service (KMS) KMS key to use for
+    -- Amazon EBS encryption. If this parameter is not specified, your KMS key
+    -- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+    -- must be @true@.
+    --
+    -- You can specify the KMS key using any of the following:
+    --
+    -- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Key alias. For example, alias\/ExampleAlias.
+    --
+    -- -   Key ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+    --
+    -- -   Alias ARN. For example,
+    --     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+    --
+    -- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+    -- if you specify an ID, alias, or ARN that is not valid, the action can
+    -- appear to complete, but eventually fails.
+    --
+    -- Amazon EBS does not support asymmetric KMS keys.
+    kmsKeyId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyEbsDefaultKmsKeyId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyEbsDefaultKmsKeyId_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'kmsKeyId', 'modifyEbsDefaultKmsKeyId_kmsKeyId' - The identifier of the Key Management Service (KMS) KMS key to use for
+-- Amazon EBS encryption. If this parameter is not specified, your KMS key
+-- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+-- must be @true@.
+--
+-- You can specify the KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an ID, alias, or ARN that is not valid, the action can
+-- appear to complete, but eventually fails.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+newModifyEbsDefaultKmsKeyId ::
+  -- | 'kmsKeyId'
+  Prelude.Text ->
+  ModifyEbsDefaultKmsKeyId
+newModifyEbsDefaultKmsKeyId pKmsKeyId_ =
+  ModifyEbsDefaultKmsKeyId'
+    { dryRun = Prelude.Nothing,
+      kmsKeyId = pKmsKeyId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyEbsDefaultKmsKeyId_dryRun :: Lens.Lens' ModifyEbsDefaultKmsKeyId (Prelude.Maybe Prelude.Bool)
+modifyEbsDefaultKmsKeyId_dryRun = Lens.lens (\ModifyEbsDefaultKmsKeyId' {dryRun} -> dryRun) (\s@ModifyEbsDefaultKmsKeyId' {} a -> s {dryRun = a} :: ModifyEbsDefaultKmsKeyId)
+
+-- | The identifier of the Key Management Service (KMS) KMS key to use for
+-- Amazon EBS encryption. If this parameter is not specified, your KMS key
+-- for Amazon EBS is used. If @KmsKeyId@ is specified, the encrypted state
+-- must be @true@.
+--
+-- You can specify the KMS key using any of the following:
+--
+-- -   Key ID. For example, 1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Key alias. For example, alias\/ExampleAlias.
+--
+-- -   Key ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:key\/1234abcd-12ab-34cd-56ef-1234567890ab.
+--
+-- -   Alias ARN. For example,
+--     arn:aws:kms:us-east-1:012345678910:alias\/ExampleAlias.
+--
+-- Amazon Web Services authenticates the KMS key asynchronously. Therefore,
+-- if you specify an ID, alias, or ARN that is not valid, the action can
+-- appear to complete, but eventually fails.
+--
+-- Amazon EBS does not support asymmetric KMS keys.
+modifyEbsDefaultKmsKeyId_kmsKeyId :: Lens.Lens' ModifyEbsDefaultKmsKeyId Prelude.Text
+modifyEbsDefaultKmsKeyId_kmsKeyId = Lens.lens (\ModifyEbsDefaultKmsKeyId' {kmsKeyId} -> kmsKeyId) (\s@ModifyEbsDefaultKmsKeyId' {} a -> s {kmsKeyId = a} :: ModifyEbsDefaultKmsKeyId)
+
+instance Core.AWSRequest ModifyEbsDefaultKmsKeyId where
+  type
+    AWSResponse ModifyEbsDefaultKmsKeyId =
+      ModifyEbsDefaultKmsKeyIdResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyEbsDefaultKmsKeyIdResponse'
+            Prelude.<$> (x Data..@? "kmsKeyId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyEbsDefaultKmsKeyId where
+  hashWithSalt _salt ModifyEbsDefaultKmsKeyId' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` kmsKeyId
+
+instance Prelude.NFData ModifyEbsDefaultKmsKeyId where
+  rnf ModifyEbsDefaultKmsKeyId' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf kmsKeyId
+
+instance Data.ToHeaders ModifyEbsDefaultKmsKeyId where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyEbsDefaultKmsKeyId where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyEbsDefaultKmsKeyId where
+  toQuery ModifyEbsDefaultKmsKeyId' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyEbsDefaultKmsKeyId" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "KmsKeyId" Data.=: kmsKeyId
+      ]
+
+-- | /See:/ 'newModifyEbsDefaultKmsKeyIdResponse' smart constructor.
+data ModifyEbsDefaultKmsKeyIdResponse = ModifyEbsDefaultKmsKeyIdResponse'
+  { -- | The Amazon Resource Name (ARN) of the default KMS key for encryption by
+    -- default.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyEbsDefaultKmsKeyIdResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'modifyEbsDefaultKmsKeyIdResponse_kmsKeyId' - The Amazon Resource Name (ARN) of the default KMS key for encryption by
+-- default.
+--
+-- 'httpStatus', 'modifyEbsDefaultKmsKeyIdResponse_httpStatus' - The response's http status code.
+newModifyEbsDefaultKmsKeyIdResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyEbsDefaultKmsKeyIdResponse
+newModifyEbsDefaultKmsKeyIdResponse pHttpStatus_ =
+  ModifyEbsDefaultKmsKeyIdResponse'
+    { kmsKeyId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the default KMS key for encryption by
+-- default.
+modifyEbsDefaultKmsKeyIdResponse_kmsKeyId :: Lens.Lens' ModifyEbsDefaultKmsKeyIdResponse (Prelude.Maybe Prelude.Text)
+modifyEbsDefaultKmsKeyIdResponse_kmsKeyId = Lens.lens (\ModifyEbsDefaultKmsKeyIdResponse' {kmsKeyId} -> kmsKeyId) (\s@ModifyEbsDefaultKmsKeyIdResponse' {} a -> s {kmsKeyId = a} :: ModifyEbsDefaultKmsKeyIdResponse)
+
+-- | The response's http status code.
+modifyEbsDefaultKmsKeyIdResponse_httpStatus :: Lens.Lens' ModifyEbsDefaultKmsKeyIdResponse Prelude.Int
+modifyEbsDefaultKmsKeyIdResponse_httpStatus = Lens.lens (\ModifyEbsDefaultKmsKeyIdResponse' {httpStatus} -> httpStatus) (\s@ModifyEbsDefaultKmsKeyIdResponse' {} a -> s {httpStatus = a} :: ModifyEbsDefaultKmsKeyIdResponse)
+
+instance
+  Prelude.NFData
+    ModifyEbsDefaultKmsKeyIdResponse
+  where
+  rnf ModifyEbsDefaultKmsKeyIdResponse' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyFleet.hs b/gen/Amazonka/EC2/ModifyFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyFleet.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified EC2 Fleet.
+--
+-- You can only modify an EC2 Fleet request of type @maintain@.
+--
+-- While the EC2 Fleet is being modified, it is in the @modifying@ state.
+--
+-- To scale up your EC2 Fleet, increase its target capacity. The EC2 Fleet
+-- launches the additional Spot Instances according to the allocation
+-- strategy for the EC2 Fleet request. If the allocation strategy is
+-- @lowest-price@, the EC2 Fleet launches instances using the Spot Instance
+-- pool with the lowest price. If the allocation strategy is @diversified@,
+-- the EC2 Fleet distributes the instances across the Spot Instance pools.
+-- If the allocation strategy is @capacity-optimized@, EC2 Fleet launches
+-- instances from Spot Instance pools with optimal capacity for the number
+-- of instances that are launching.
+--
+-- To scale down your EC2 Fleet, decrease its target capacity. First, the
+-- EC2 Fleet cancels any open requests that exceed the new target capacity.
+-- You can request that the EC2 Fleet terminate Spot Instances until the
+-- size of the fleet no longer exceeds the new target capacity. If the
+-- allocation strategy is @lowest-price@, the EC2 Fleet terminates the
+-- instances with the highest price per unit. If the allocation strategy is
+-- @capacity-optimized@, the EC2 Fleet terminates the instances in the Spot
+-- Instance pools that have the least available Spot Instance capacity. If
+-- the allocation strategy is @diversified@, the EC2 Fleet terminates
+-- instances across the Spot Instance pools. Alternatively, you can request
+-- that the EC2 Fleet keep the fleet at its current size, but not replace
+-- any Spot Instances that are interrupted or that you terminate manually.
+--
+-- If you are finished with your EC2 Fleet for now, but will use it again
+-- later, you can set the target capacity to 0.
+module Amazonka.EC2.ModifyFleet
+  ( -- * Creating a Request
+    ModifyFleet (..),
+    newModifyFleet,
+
+    -- * Request Lenses
+    modifyFleet_context,
+    modifyFleet_dryRun,
+    modifyFleet_excessCapacityTerminationPolicy,
+    modifyFleet_launchTemplateConfigs,
+    modifyFleet_targetCapacitySpecification,
+    modifyFleet_fleetId,
+
+    -- * Destructuring the Response
+    ModifyFleetResponse (..),
+    newModifyFleetResponse,
+
+    -- * Response Lenses
+    modifyFleetResponse_return,
+    modifyFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyFleet' smart constructor.
+data ModifyFleet = ModifyFleet'
+  { -- | Reserved.
+    context :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    excessCapacityTerminationPolicy :: Prelude.Maybe FleetExcessCapacityTerminationPolicy,
+    -- | The launch template and overrides.
+    launchTemplateConfigs :: Prelude.Maybe [FleetLaunchTemplateConfigRequest],
+    -- | The size of the EC2 Fleet.
+    targetCapacitySpecification :: Prelude.Maybe TargetCapacitySpecificationRequest,
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'context', 'modifyFleet_context' - Reserved.
+--
+-- 'dryRun', 'modifyFleet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'excessCapacityTerminationPolicy', 'modifyFleet_excessCapacityTerminationPolicy' - 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.
+--
+-- 'launchTemplateConfigs', 'modifyFleet_launchTemplateConfigs' - The launch template and overrides.
+--
+-- 'targetCapacitySpecification', 'modifyFleet_targetCapacitySpecification' - The size of the EC2 Fleet.
+--
+-- 'fleetId', 'modifyFleet_fleetId' - The ID of the EC2 Fleet.
+newModifyFleet ::
+  -- | 'fleetId'
+  Prelude.Text ->
+  ModifyFleet
+newModifyFleet pFleetId_ =
+  ModifyFleet'
+    { context = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      excessCapacityTerminationPolicy = Prelude.Nothing,
+      launchTemplateConfigs = Prelude.Nothing,
+      targetCapacitySpecification = Prelude.Nothing,
+      fleetId = pFleetId_
+    }
+
+-- | Reserved.
+modifyFleet_context :: Lens.Lens' ModifyFleet (Prelude.Maybe Prelude.Text)
+modifyFleet_context = Lens.lens (\ModifyFleet' {context} -> context) (\s@ModifyFleet' {} a -> s {context = a} :: ModifyFleet)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyFleet_dryRun :: Lens.Lens' ModifyFleet (Prelude.Maybe Prelude.Bool)
+modifyFleet_dryRun = Lens.lens (\ModifyFleet' {dryRun} -> dryRun) (\s@ModifyFleet' {} a -> s {dryRun = a} :: ModifyFleet)
+
+-- | 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.
+modifyFleet_excessCapacityTerminationPolicy :: Lens.Lens' ModifyFleet (Prelude.Maybe FleetExcessCapacityTerminationPolicy)
+modifyFleet_excessCapacityTerminationPolicy = Lens.lens (\ModifyFleet' {excessCapacityTerminationPolicy} -> excessCapacityTerminationPolicy) (\s@ModifyFleet' {} a -> s {excessCapacityTerminationPolicy = a} :: ModifyFleet)
+
+-- | The launch template and overrides.
+modifyFleet_launchTemplateConfigs :: Lens.Lens' ModifyFleet (Prelude.Maybe [FleetLaunchTemplateConfigRequest])
+modifyFleet_launchTemplateConfigs = Lens.lens (\ModifyFleet' {launchTemplateConfigs} -> launchTemplateConfigs) (\s@ModifyFleet' {} a -> s {launchTemplateConfigs = a} :: ModifyFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The size of the EC2 Fleet.
+modifyFleet_targetCapacitySpecification :: Lens.Lens' ModifyFleet (Prelude.Maybe TargetCapacitySpecificationRequest)
+modifyFleet_targetCapacitySpecification = Lens.lens (\ModifyFleet' {targetCapacitySpecification} -> targetCapacitySpecification) (\s@ModifyFleet' {} a -> s {targetCapacitySpecification = a} :: ModifyFleet)
+
+-- | The ID of the EC2 Fleet.
+modifyFleet_fleetId :: Lens.Lens' ModifyFleet Prelude.Text
+modifyFleet_fleetId = Lens.lens (\ModifyFleet' {fleetId} -> fleetId) (\s@ModifyFleet' {} a -> s {fleetId = a} :: ModifyFleet)
+
+instance Core.AWSRequest ModifyFleet where
+  type AWSResponse ModifyFleet = ModifyFleetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyFleetResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyFleet where
+  hashWithSalt _salt ModifyFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` context
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` excessCapacityTerminationPolicy
+      `Prelude.hashWithSalt` launchTemplateConfigs
+      `Prelude.hashWithSalt` targetCapacitySpecification
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData ModifyFleet where
+  rnf ModifyFleet' {..} =
+    Prelude.rnf context
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf excessCapacityTerminationPolicy
+      `Prelude.seq` Prelude.rnf launchTemplateConfigs
+      `Prelude.seq` Prelude.rnf targetCapacitySpecification
+      `Prelude.seq` Prelude.rnf fleetId
+
+instance Data.ToHeaders ModifyFleet where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyFleet where
+  toQuery ModifyFleet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyFleet" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Context" Data.=: context,
+        "DryRun" Data.=: dryRun,
+        "ExcessCapacityTerminationPolicy"
+          Data.=: excessCapacityTerminationPolicy,
+        Data.toQuery
+          ( Data.toQueryList "LaunchTemplateConfig"
+              Prelude.<$> launchTemplateConfigs
+          ),
+        "TargetCapacitySpecification"
+          Data.=: targetCapacitySpecification,
+        "FleetId" Data.=: fleetId
+      ]
+
+-- | /See:/ 'newModifyFleetResponse' smart constructor.
+data ModifyFleetResponse = ModifyFleetResponse'
+  { -- | If the request succeeds, the response returns @true@. If the request
+    -- fails, no response is returned, and instead an error message is
+    -- returned.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyFleetResponse_return' - If the request succeeds, the response returns @true@. If the request
+-- fails, no response is returned, and instead an error message is
+-- returned.
+--
+-- 'httpStatus', 'modifyFleetResponse_httpStatus' - The response's http status code.
+newModifyFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyFleetResponse
+newModifyFleetResponse pHttpStatus_ =
+  ModifyFleetResponse'
+    { return' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the request succeeds, the response returns @true@. If the request
+-- fails, no response is returned, and instead an error message is
+-- returned.
+modifyFleetResponse_return :: Lens.Lens' ModifyFleetResponse (Prelude.Maybe Prelude.Bool)
+modifyFleetResponse_return = Lens.lens (\ModifyFleetResponse' {return'} -> return') (\s@ModifyFleetResponse' {} a -> s {return' = a} :: ModifyFleetResponse)
+
+-- | The response's http status code.
+modifyFleetResponse_httpStatus :: Lens.Lens' ModifyFleetResponse Prelude.Int
+modifyFleetResponse_httpStatus = Lens.lens (\ModifyFleetResponse' {httpStatus} -> httpStatus) (\s@ModifyFleetResponse' {} a -> s {httpStatus = a} :: ModifyFleetResponse)
+
+instance Prelude.NFData ModifyFleetResponse where
+  rnf ModifyFleetResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyFpgaImageAttribute.hs b/gen/Amazonka/EC2/ModifyFpgaImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyFpgaImageAttribute.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyFpgaImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified attribute of the specified Amazon FPGA Image
+-- (AFI).
+module Amazonka.EC2.ModifyFpgaImageAttribute
+  ( -- * Creating a Request
+    ModifyFpgaImageAttribute (..),
+    newModifyFpgaImageAttribute,
+
+    -- * Request Lenses
+    modifyFpgaImageAttribute_attribute,
+    modifyFpgaImageAttribute_description,
+    modifyFpgaImageAttribute_dryRun,
+    modifyFpgaImageAttribute_loadPermission,
+    modifyFpgaImageAttribute_name,
+    modifyFpgaImageAttribute_operationType,
+    modifyFpgaImageAttribute_productCodes,
+    modifyFpgaImageAttribute_userGroups,
+    modifyFpgaImageAttribute_userIds,
+    modifyFpgaImageAttribute_fpgaImageId,
+
+    -- * Destructuring the Response
+    ModifyFpgaImageAttributeResponse (..),
+    newModifyFpgaImageAttributeResponse,
+
+    -- * Response Lenses
+    modifyFpgaImageAttributeResponse_fpgaImageAttribute,
+    modifyFpgaImageAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyFpgaImageAttribute' smart constructor.
+data ModifyFpgaImageAttribute = ModifyFpgaImageAttribute'
+  { -- | The name of the attribute.
+    attribute :: Prelude.Maybe FpgaImageAttributeName,
+    -- | A description for the AFI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The load permission for the AFI.
+    loadPermission :: Prelude.Maybe LoadPermissionModifications,
+    -- | A name for the AFI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The operation type.
+    operationType :: Prelude.Maybe OperationType,
+    -- | The product codes. After you add a product code to an AFI, it can\'t be
+    -- removed. This parameter is valid only when modifying the @productCodes@
+    -- attribute.
+    productCodes :: Prelude.Maybe [Prelude.Text],
+    -- | The user groups. This parameter is valid only when modifying the
+    -- @loadPermission@ attribute.
+    userGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Web Services account IDs. This parameter is valid only when
+    -- modifying the @loadPermission@ attribute.
+    userIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the AFI.
+    fpgaImageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyFpgaImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'modifyFpgaImageAttribute_attribute' - The name of the attribute.
+--
+-- 'description', 'modifyFpgaImageAttribute_description' - A description for the AFI.
+--
+-- 'dryRun', 'modifyFpgaImageAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'loadPermission', 'modifyFpgaImageAttribute_loadPermission' - The load permission for the AFI.
+--
+-- 'name', 'modifyFpgaImageAttribute_name' - A name for the AFI.
+--
+-- 'operationType', 'modifyFpgaImageAttribute_operationType' - The operation type.
+--
+-- 'productCodes', 'modifyFpgaImageAttribute_productCodes' - The product codes. After you add a product code to an AFI, it can\'t be
+-- removed. This parameter is valid only when modifying the @productCodes@
+-- attribute.
+--
+-- 'userGroups', 'modifyFpgaImageAttribute_userGroups' - The user groups. This parameter is valid only when modifying the
+-- @loadPermission@ attribute.
+--
+-- 'userIds', 'modifyFpgaImageAttribute_userIds' - The Amazon Web Services account IDs. This parameter is valid only when
+-- modifying the @loadPermission@ attribute.
+--
+-- 'fpgaImageId', 'modifyFpgaImageAttribute_fpgaImageId' - The ID of the AFI.
+newModifyFpgaImageAttribute ::
+  -- | 'fpgaImageId'
+  Prelude.Text ->
+  ModifyFpgaImageAttribute
+newModifyFpgaImageAttribute pFpgaImageId_ =
+  ModifyFpgaImageAttribute'
+    { attribute =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      loadPermission = Prelude.Nothing,
+      name = Prelude.Nothing,
+      operationType = Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      userGroups = Prelude.Nothing,
+      userIds = Prelude.Nothing,
+      fpgaImageId = pFpgaImageId_
+    }
+
+-- | The name of the attribute.
+modifyFpgaImageAttribute_attribute :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe FpgaImageAttributeName)
+modifyFpgaImageAttribute_attribute = Lens.lens (\ModifyFpgaImageAttribute' {attribute} -> attribute) (\s@ModifyFpgaImageAttribute' {} a -> s {attribute = a} :: ModifyFpgaImageAttribute)
+
+-- | A description for the AFI.
+modifyFpgaImageAttribute_description :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe Prelude.Text)
+modifyFpgaImageAttribute_description = Lens.lens (\ModifyFpgaImageAttribute' {description} -> description) (\s@ModifyFpgaImageAttribute' {} a -> s {description = a} :: ModifyFpgaImageAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyFpgaImageAttribute_dryRun :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe Prelude.Bool)
+modifyFpgaImageAttribute_dryRun = Lens.lens (\ModifyFpgaImageAttribute' {dryRun} -> dryRun) (\s@ModifyFpgaImageAttribute' {} a -> s {dryRun = a} :: ModifyFpgaImageAttribute)
+
+-- | The load permission for the AFI.
+modifyFpgaImageAttribute_loadPermission :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe LoadPermissionModifications)
+modifyFpgaImageAttribute_loadPermission = Lens.lens (\ModifyFpgaImageAttribute' {loadPermission} -> loadPermission) (\s@ModifyFpgaImageAttribute' {} a -> s {loadPermission = a} :: ModifyFpgaImageAttribute)
+
+-- | A name for the AFI.
+modifyFpgaImageAttribute_name :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe Prelude.Text)
+modifyFpgaImageAttribute_name = Lens.lens (\ModifyFpgaImageAttribute' {name} -> name) (\s@ModifyFpgaImageAttribute' {} a -> s {name = a} :: ModifyFpgaImageAttribute)
+
+-- | The operation type.
+modifyFpgaImageAttribute_operationType :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe OperationType)
+modifyFpgaImageAttribute_operationType = Lens.lens (\ModifyFpgaImageAttribute' {operationType} -> operationType) (\s@ModifyFpgaImageAttribute' {} a -> s {operationType = a} :: ModifyFpgaImageAttribute)
+
+-- | The product codes. After you add a product code to an AFI, it can\'t be
+-- removed. This parameter is valid only when modifying the @productCodes@
+-- attribute.
+modifyFpgaImageAttribute_productCodes :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyFpgaImageAttribute_productCodes = Lens.lens (\ModifyFpgaImageAttribute' {productCodes} -> productCodes) (\s@ModifyFpgaImageAttribute' {} a -> s {productCodes = a} :: ModifyFpgaImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user groups. This parameter is valid only when modifying the
+-- @loadPermission@ attribute.
+modifyFpgaImageAttribute_userGroups :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyFpgaImageAttribute_userGroups = Lens.lens (\ModifyFpgaImageAttribute' {userGroups} -> userGroups) (\s@ModifyFpgaImageAttribute' {} a -> s {userGroups = a} :: ModifyFpgaImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services account IDs. This parameter is valid only when
+-- modifying the @loadPermission@ attribute.
+modifyFpgaImageAttribute_userIds :: Lens.Lens' ModifyFpgaImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyFpgaImageAttribute_userIds = Lens.lens (\ModifyFpgaImageAttribute' {userIds} -> userIds) (\s@ModifyFpgaImageAttribute' {} a -> s {userIds = a} :: ModifyFpgaImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the AFI.
+modifyFpgaImageAttribute_fpgaImageId :: Lens.Lens' ModifyFpgaImageAttribute Prelude.Text
+modifyFpgaImageAttribute_fpgaImageId = Lens.lens (\ModifyFpgaImageAttribute' {fpgaImageId} -> fpgaImageId) (\s@ModifyFpgaImageAttribute' {} a -> s {fpgaImageId = a} :: ModifyFpgaImageAttribute)
+
+instance Core.AWSRequest ModifyFpgaImageAttribute where
+  type
+    AWSResponse ModifyFpgaImageAttribute =
+      ModifyFpgaImageAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyFpgaImageAttributeResponse'
+            Prelude.<$> (x Data..@? "fpgaImageAttribute")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyFpgaImageAttribute where
+  hashWithSalt _salt ModifyFpgaImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` loadPermission
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` operationType
+      `Prelude.hashWithSalt` productCodes
+      `Prelude.hashWithSalt` userGroups
+      `Prelude.hashWithSalt` userIds
+      `Prelude.hashWithSalt` fpgaImageId
+
+instance Prelude.NFData ModifyFpgaImageAttribute where
+  rnf ModifyFpgaImageAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf loadPermission
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf operationType
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf userGroups
+      `Prelude.seq` Prelude.rnf userIds
+      `Prelude.seq` Prelude.rnf fpgaImageId
+
+instance Data.ToHeaders ModifyFpgaImageAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyFpgaImageAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyFpgaImageAttribute where
+  toQuery ModifyFpgaImageAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyFpgaImageAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attribute" Data.=: attribute,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "LoadPermission" Data.=: loadPermission,
+        "Name" Data.=: name,
+        "OperationType" Data.=: operationType,
+        Data.toQuery
+          ( Data.toQueryList "ProductCode"
+              Prelude.<$> productCodes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "UserGroup"
+              Prelude.<$> userGroups
+          ),
+        Data.toQuery
+          (Data.toQueryList "UserId" Prelude.<$> userIds),
+        "FpgaImageId" Data.=: fpgaImageId
+      ]
+
+-- | /See:/ 'newModifyFpgaImageAttributeResponse' smart constructor.
+data ModifyFpgaImageAttributeResponse = ModifyFpgaImageAttributeResponse'
+  { -- | Information about the attribute.
+    fpgaImageAttribute :: Prelude.Maybe FpgaImageAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyFpgaImageAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpgaImageAttribute', 'modifyFpgaImageAttributeResponse_fpgaImageAttribute' - Information about the attribute.
+--
+-- 'httpStatus', 'modifyFpgaImageAttributeResponse_httpStatus' - The response's http status code.
+newModifyFpgaImageAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyFpgaImageAttributeResponse
+newModifyFpgaImageAttributeResponse pHttpStatus_ =
+  ModifyFpgaImageAttributeResponse'
+    { fpgaImageAttribute =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the attribute.
+modifyFpgaImageAttributeResponse_fpgaImageAttribute :: Lens.Lens' ModifyFpgaImageAttributeResponse (Prelude.Maybe FpgaImageAttribute)
+modifyFpgaImageAttributeResponse_fpgaImageAttribute = Lens.lens (\ModifyFpgaImageAttributeResponse' {fpgaImageAttribute} -> fpgaImageAttribute) (\s@ModifyFpgaImageAttributeResponse' {} a -> s {fpgaImageAttribute = a} :: ModifyFpgaImageAttributeResponse)
+
+-- | The response's http status code.
+modifyFpgaImageAttributeResponse_httpStatus :: Lens.Lens' ModifyFpgaImageAttributeResponse Prelude.Int
+modifyFpgaImageAttributeResponse_httpStatus = Lens.lens (\ModifyFpgaImageAttributeResponse' {httpStatus} -> httpStatus) (\s@ModifyFpgaImageAttributeResponse' {} a -> s {httpStatus = a} :: ModifyFpgaImageAttributeResponse)
+
+instance
+  Prelude.NFData
+    ModifyFpgaImageAttributeResponse
+  where
+  rnf ModifyFpgaImageAttributeResponse' {..} =
+    Prelude.rnf fpgaImageAttribute
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyHosts.hs b/gen/Amazonka/EC2/ModifyHosts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyHosts.hs
@@ -0,0 +1,291 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyHosts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify the auto-placement setting of a Dedicated Host. When
+-- auto-placement is enabled, any instances that you launch with a tenancy
+-- of @host@ but without a specific host ID are placed onto any available
+-- Dedicated Host in your account that has auto-placement enabled. When
+-- auto-placement is disabled, you need to provide a host ID to have the
+-- instance launch onto a specific host. If no host ID is provided, the
+-- instance is launched onto a suitable host with auto-placement enabled.
+--
+-- You can also use this API action to modify a Dedicated Host to support
+-- either multiple instance types in an instance family, or to support a
+-- specific instance type only.
+module Amazonka.EC2.ModifyHosts
+  ( -- * Creating a Request
+    ModifyHosts (..),
+    newModifyHosts,
+
+    -- * Request Lenses
+    modifyHosts_autoPlacement,
+    modifyHosts_hostRecovery,
+    modifyHosts_instanceFamily,
+    modifyHosts_instanceType,
+    modifyHosts_hostIds,
+
+    -- * Destructuring the Response
+    ModifyHostsResponse (..),
+    newModifyHostsResponse,
+
+    -- * Response Lenses
+    modifyHostsResponse_successful,
+    modifyHostsResponse_unsuccessful,
+    modifyHostsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyHosts' smart constructor.
+data ModifyHosts = ModifyHosts'
+  { -- | Specify whether to enable or disable auto-placement.
+    autoPlacement :: Prelude.Maybe AutoPlacement,
+    -- | Indicates whether to enable or disable host recovery for the Dedicated
+    -- Host. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html Host recovery>
+    -- in the /Amazon EC2 User Guide/.
+    hostRecovery :: Prelude.Maybe HostRecovery,
+    -- | Specifies the instance family to be supported by the Dedicated Host.
+    -- Specify this parameter to modify a Dedicated Host to support multiple
+    -- instance types within its current instance family.
+    --
+    -- If you want to modify a Dedicated Host to support a specific instance
+    -- type only, omit this parameter and specify __InstanceType__ instead. You
+    -- cannot specify __InstanceFamily__ and __InstanceType__ in the same
+    -- request.
+    instanceFamily :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the instance type to be supported by the Dedicated Host.
+    -- Specify this parameter to modify a Dedicated Host to support only a
+    -- specific instance type.
+    --
+    -- If you want to modify a Dedicated Host to support multiple instance
+    -- types in its current instance family, omit this parameter and specify
+    -- __InstanceFamily__ instead. You cannot specify __InstanceType__ and
+    -- __InstanceFamily__ in the same request.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Dedicated Hosts to modify.
+    hostIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyHosts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoPlacement', 'modifyHosts_autoPlacement' - Specify whether to enable or disable auto-placement.
+--
+-- 'hostRecovery', 'modifyHosts_hostRecovery' - Indicates whether to enable or disable host recovery for the Dedicated
+-- Host. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html Host recovery>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'instanceFamily', 'modifyHosts_instanceFamily' - Specifies the instance family to be supported by the Dedicated Host.
+-- Specify this parameter to modify a Dedicated Host to support multiple
+-- instance types within its current instance family.
+--
+-- If you want to modify a Dedicated Host to support a specific instance
+-- type only, omit this parameter and specify __InstanceType__ instead. You
+-- cannot specify __InstanceFamily__ and __InstanceType__ in the same
+-- request.
+--
+-- 'instanceType', 'modifyHosts_instanceType' - Specifies the instance type to be supported by the Dedicated Host.
+-- Specify this parameter to modify a Dedicated Host to support only a
+-- specific instance type.
+--
+-- If you want to modify a Dedicated Host to support multiple instance
+-- types in its current instance family, omit this parameter and specify
+-- __InstanceFamily__ instead. You cannot specify __InstanceType__ and
+-- __InstanceFamily__ in the same request.
+--
+-- 'hostIds', 'modifyHosts_hostIds' - The IDs of the Dedicated Hosts to modify.
+newModifyHosts ::
+  ModifyHosts
+newModifyHosts =
+  ModifyHosts'
+    { autoPlacement = Prelude.Nothing,
+      hostRecovery = Prelude.Nothing,
+      instanceFamily = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      hostIds = Prelude.mempty
+    }
+
+-- | Specify whether to enable or disable auto-placement.
+modifyHosts_autoPlacement :: Lens.Lens' ModifyHosts (Prelude.Maybe AutoPlacement)
+modifyHosts_autoPlacement = Lens.lens (\ModifyHosts' {autoPlacement} -> autoPlacement) (\s@ModifyHosts' {} a -> s {autoPlacement = a} :: ModifyHosts)
+
+-- | Indicates whether to enable or disable host recovery for the Dedicated
+-- Host. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-recovery.html Host recovery>
+-- in the /Amazon EC2 User Guide/.
+modifyHosts_hostRecovery :: Lens.Lens' ModifyHosts (Prelude.Maybe HostRecovery)
+modifyHosts_hostRecovery = Lens.lens (\ModifyHosts' {hostRecovery} -> hostRecovery) (\s@ModifyHosts' {} a -> s {hostRecovery = a} :: ModifyHosts)
+
+-- | Specifies the instance family to be supported by the Dedicated Host.
+-- Specify this parameter to modify a Dedicated Host to support multiple
+-- instance types within its current instance family.
+--
+-- If you want to modify a Dedicated Host to support a specific instance
+-- type only, omit this parameter and specify __InstanceType__ instead. You
+-- cannot specify __InstanceFamily__ and __InstanceType__ in the same
+-- request.
+modifyHosts_instanceFamily :: Lens.Lens' ModifyHosts (Prelude.Maybe Prelude.Text)
+modifyHosts_instanceFamily = Lens.lens (\ModifyHosts' {instanceFamily} -> instanceFamily) (\s@ModifyHosts' {} a -> s {instanceFamily = a} :: ModifyHosts)
+
+-- | Specifies the instance type to be supported by the Dedicated Host.
+-- Specify this parameter to modify a Dedicated Host to support only a
+-- specific instance type.
+--
+-- If you want to modify a Dedicated Host to support multiple instance
+-- types in its current instance family, omit this parameter and specify
+-- __InstanceFamily__ instead. You cannot specify __InstanceType__ and
+-- __InstanceFamily__ in the same request.
+modifyHosts_instanceType :: Lens.Lens' ModifyHosts (Prelude.Maybe Prelude.Text)
+modifyHosts_instanceType = Lens.lens (\ModifyHosts' {instanceType} -> instanceType) (\s@ModifyHosts' {} a -> s {instanceType = a} :: ModifyHosts)
+
+-- | The IDs of the Dedicated Hosts to modify.
+modifyHosts_hostIds :: Lens.Lens' ModifyHosts [Prelude.Text]
+modifyHosts_hostIds = Lens.lens (\ModifyHosts' {hostIds} -> hostIds) (\s@ModifyHosts' {} a -> s {hostIds = a} :: ModifyHosts) Prelude.. Lens.coerced
+
+instance Core.AWSRequest ModifyHosts where
+  type AWSResponse ModifyHosts = ModifyHostsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyHostsResponse'
+            Prelude.<$> ( x
+                            Data..@? "successful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyHosts where
+  hashWithSalt _salt ModifyHosts' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoPlacement
+      `Prelude.hashWithSalt` hostRecovery
+      `Prelude.hashWithSalt` instanceFamily
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` hostIds
+
+instance Prelude.NFData ModifyHosts where
+  rnf ModifyHosts' {..} =
+    Prelude.rnf autoPlacement
+      `Prelude.seq` Prelude.rnf hostRecovery
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf hostIds
+
+instance Data.ToHeaders ModifyHosts where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyHosts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyHosts where
+  toQuery ModifyHosts' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyHosts" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AutoPlacement" Data.=: autoPlacement,
+        "HostRecovery" Data.=: hostRecovery,
+        "InstanceFamily" Data.=: instanceFamily,
+        "InstanceType" Data.=: instanceType,
+        Data.toQueryList "HostId" hostIds
+      ]
+
+-- | /See:/ 'newModifyHostsResponse' smart constructor.
+data ModifyHostsResponse = ModifyHostsResponse'
+  { -- | The IDs of the Dedicated Hosts that were successfully modified.
+    successful :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the Dedicated Hosts that could not be modified. Check whether
+    -- the setting you requested can be used.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyHostsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successful', 'modifyHostsResponse_successful' - The IDs of the Dedicated Hosts that were successfully modified.
+--
+-- 'unsuccessful', 'modifyHostsResponse_unsuccessful' - The IDs of the Dedicated Hosts that could not be modified. Check whether
+-- the setting you requested can be used.
+--
+-- 'httpStatus', 'modifyHostsResponse_httpStatus' - The response's http status code.
+newModifyHostsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyHostsResponse
+newModifyHostsResponse pHttpStatus_ =
+  ModifyHostsResponse'
+    { successful = Prelude.Nothing,
+      unsuccessful = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IDs of the Dedicated Hosts that were successfully modified.
+modifyHostsResponse_successful :: Lens.Lens' ModifyHostsResponse (Prelude.Maybe [Prelude.Text])
+modifyHostsResponse_successful = Lens.lens (\ModifyHostsResponse' {successful} -> successful) (\s@ModifyHostsResponse' {} a -> s {successful = a} :: ModifyHostsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Dedicated Hosts that could not be modified. Check whether
+-- the setting you requested can be used.
+modifyHostsResponse_unsuccessful :: Lens.Lens' ModifyHostsResponse (Prelude.Maybe [UnsuccessfulItem])
+modifyHostsResponse_unsuccessful = Lens.lens (\ModifyHostsResponse' {unsuccessful} -> unsuccessful) (\s@ModifyHostsResponse' {} a -> s {unsuccessful = a} :: ModifyHostsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+modifyHostsResponse_httpStatus :: Lens.Lens' ModifyHostsResponse Prelude.Int
+modifyHostsResponse_httpStatus = Lens.lens (\ModifyHostsResponse' {httpStatus} -> httpStatus) (\s@ModifyHostsResponse' {} a -> s {httpStatus = a} :: ModifyHostsResponse)
+
+instance Prelude.NFData ModifyHostsResponse where
+  rnf ModifyHostsResponse' {..} =
+    Prelude.rnf successful
+      `Prelude.seq` Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyIdFormat.hs b/gen/Amazonka/EC2/ModifyIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyIdFormat.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the ID format for the specified resource on a per-Region basis.
+-- You can specify that resources should receive longer IDs (17-character
+-- IDs) when they are created.
+--
+-- This request can only be used to modify longer ID settings for resource
+-- types that are within the opt-in period. Resources currently in their
+-- opt-in period include: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+-- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+-- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+-- @vpn-gateway@.
+--
+-- This setting applies to the IAM user who makes the request; it does not
+-- apply to the entire Amazon Web Services account. By default, an IAM user
+-- defaults to the same settings as the root user. If you\'re using this
+-- action as the root user, then these settings apply to the entire
+-- account, unless an IAM user explicitly overrides these settings for
+-- themselves. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html Resource IDs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Resources created with longer IDs are visible to all IAM roles and
+-- users, regardless of these settings and provided that they have
+-- permission to use the relevant @Describe@ command for the resource type.
+module Amazonka.EC2.ModifyIdFormat
+  ( -- * Creating a Request
+    ModifyIdFormat (..),
+    newModifyIdFormat,
+
+    -- * Request Lenses
+    modifyIdFormat_resource,
+    modifyIdFormat_useLongIds,
+
+    -- * Destructuring the Response
+    ModifyIdFormatResponse (..),
+    newModifyIdFormatResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyIdFormat' smart constructor.
+data ModifyIdFormat = ModifyIdFormat'
+  { -- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+    -- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+    -- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+    -- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+    -- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+    -- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+    -- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+    -- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+    -- @vpn-gateway@.
+    --
+    -- Alternatively, use the @all-current@ option to include all resource
+    -- types that are currently within their opt-in period for longer IDs.
+    resource :: Prelude.Text,
+    -- | Indicate whether the resource should use longer IDs (17-character IDs).
+    useLongIds :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resource', 'modifyIdFormat_resource' - The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+-- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+-- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+-- @vpn-gateway@.
+--
+-- Alternatively, use the @all-current@ option to include all resource
+-- types that are currently within their opt-in period for longer IDs.
+--
+-- 'useLongIds', 'modifyIdFormat_useLongIds' - Indicate whether the resource should use longer IDs (17-character IDs).
+newModifyIdFormat ::
+  -- | 'resource'
+  Prelude.Text ->
+  -- | 'useLongIds'
+  Prelude.Bool ->
+  ModifyIdFormat
+newModifyIdFormat pResource_ pUseLongIds_ =
+  ModifyIdFormat'
+    { resource = pResource_,
+      useLongIds = pUseLongIds_
+    }
+
+-- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+-- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+-- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+-- @vpn-gateway@.
+--
+-- Alternatively, use the @all-current@ option to include all resource
+-- types that are currently within their opt-in period for longer IDs.
+modifyIdFormat_resource :: Lens.Lens' ModifyIdFormat Prelude.Text
+modifyIdFormat_resource = Lens.lens (\ModifyIdFormat' {resource} -> resource) (\s@ModifyIdFormat' {} a -> s {resource = a} :: ModifyIdFormat)
+
+-- | Indicate whether the resource should use longer IDs (17-character IDs).
+modifyIdFormat_useLongIds :: Lens.Lens' ModifyIdFormat Prelude.Bool
+modifyIdFormat_useLongIds = Lens.lens (\ModifyIdFormat' {useLongIds} -> useLongIds) (\s@ModifyIdFormat' {} a -> s {useLongIds = a} :: ModifyIdFormat)
+
+instance Core.AWSRequest ModifyIdFormat where
+  type
+    AWSResponse ModifyIdFormat =
+      ModifyIdFormatResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ModifyIdFormatResponse'
+
+instance Prelude.Hashable ModifyIdFormat where
+  hashWithSalt _salt ModifyIdFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` useLongIds
+
+instance Prelude.NFData ModifyIdFormat where
+  rnf ModifyIdFormat' {..} =
+    Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf useLongIds
+
+instance Data.ToHeaders ModifyIdFormat where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyIdFormat where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyIdFormat where
+  toQuery ModifyIdFormat' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyIdFormat" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Resource" Data.=: resource,
+        "UseLongIds" Data.=: useLongIds
+      ]
+
+-- | /See:/ 'newModifyIdFormatResponse' smart constructor.
+data ModifyIdFormatResponse = ModifyIdFormatResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIdFormatResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyIdFormatResponse ::
+  ModifyIdFormatResponse
+newModifyIdFormatResponse = ModifyIdFormatResponse'
+
+instance Prelude.NFData ModifyIdFormatResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyIdentityIdFormat.hs b/gen/Amazonka/EC2/ModifyIdentityIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyIdentityIdFormat.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyIdentityIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the ID format of a resource for a specified IAM user, IAM role,
+-- or the root user for an account; or all IAM users, IAM roles, and the
+-- root user for an account. You can specify that resources should receive
+-- longer IDs (17-character IDs) when they are created.
+--
+-- This request can only be used to modify longer ID settings for resource
+-- types that are within the opt-in period. Resources currently in their
+-- opt-in period include: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+-- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+-- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+-- @vpn-gateway@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html Resource IDs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- This setting applies to the principal specified in the request; it does
+-- not apply to the principal that makes the request.
+--
+-- Resources created with longer IDs are visible to all IAM roles and
+-- users, regardless of these settings and provided that they have
+-- permission to use the relevant @Describe@ command for the resource type.
+module Amazonka.EC2.ModifyIdentityIdFormat
+  ( -- * Creating a Request
+    ModifyIdentityIdFormat (..),
+    newModifyIdentityIdFormat,
+
+    -- * Request Lenses
+    modifyIdentityIdFormat_principalArn,
+    modifyIdentityIdFormat_resource,
+    modifyIdentityIdFormat_useLongIds,
+
+    -- * Destructuring the Response
+    ModifyIdentityIdFormatResponse (..),
+    newModifyIdentityIdFormatResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyIdentityIdFormat' smart constructor.
+data ModifyIdentityIdFormat = ModifyIdentityIdFormat'
+  { -- | The ARN of the principal, which can be an IAM user, IAM role, or the
+    -- root user. Specify @all@ to modify the ID format for all IAM users, IAM
+    -- roles, and the root user of the account.
+    principalArn :: Prelude.Text,
+    -- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+    -- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+    -- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+    -- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+    -- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+    -- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+    -- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+    -- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+    -- @vpn-gateway@.
+    --
+    -- Alternatively, use the @all-current@ option to include all resource
+    -- types that are currently within their opt-in period for longer IDs.
+    resource :: Prelude.Text,
+    -- | Indicates whether the resource should use longer IDs (17-character IDs)
+    useLongIds :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIdentityIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'principalArn', 'modifyIdentityIdFormat_principalArn' - The ARN of the principal, which can be an IAM user, IAM role, or the
+-- root user. Specify @all@ to modify the ID format for all IAM users, IAM
+-- roles, and the root user of the account.
+--
+-- 'resource', 'modifyIdentityIdFormat_resource' - The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+-- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+-- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+-- @vpn-gateway@.
+--
+-- Alternatively, use the @all-current@ option to include all resource
+-- types that are currently within their opt-in period for longer IDs.
+--
+-- 'useLongIds', 'modifyIdentityIdFormat_useLongIds' - Indicates whether the resource should use longer IDs (17-character IDs)
+newModifyIdentityIdFormat ::
+  -- | 'principalArn'
+  Prelude.Text ->
+  -- | 'resource'
+  Prelude.Text ->
+  -- | 'useLongIds'
+  Prelude.Bool ->
+  ModifyIdentityIdFormat
+newModifyIdentityIdFormat
+  pPrincipalArn_
+  pResource_
+  pUseLongIds_ =
+    ModifyIdentityIdFormat'
+      { principalArn =
+          pPrincipalArn_,
+        resource = pResource_,
+        useLongIds = pUseLongIds_
+      }
+
+-- | The ARN of the principal, which can be an IAM user, IAM role, or the
+-- root user. Specify @all@ to modify the ID format for all IAM users, IAM
+-- roles, and the root user of the account.
+modifyIdentityIdFormat_principalArn :: Lens.Lens' ModifyIdentityIdFormat Prelude.Text
+modifyIdentityIdFormat_principalArn = Lens.lens (\ModifyIdentityIdFormat' {principalArn} -> principalArn) (\s@ModifyIdentityIdFormat' {} a -> s {principalArn = a} :: ModifyIdentityIdFormat)
+
+-- | The type of resource: @bundle@ | @conversion-task@ | @customer-gateway@
+-- | @dhcp-options@ | @elastic-ip-allocation@ | @elastic-ip-association@ |
+-- @export-task@ | @flow-log@ | @image@ | @import-task@ |
+-- @internet-gateway@ | @network-acl@ | @network-acl-association@ |
+-- @network-interface@ | @network-interface-attachment@ | @prefix-list@ |
+-- @route-table@ | @route-table-association@ | @security-group@ | @subnet@
+-- | @subnet-cidr-block-association@ | @vpc@ | @vpc-cidr-block-association@
+-- | @vpc-endpoint@ | @vpc-peering-connection@ | @vpn-connection@ |
+-- @vpn-gateway@.
+--
+-- Alternatively, use the @all-current@ option to include all resource
+-- types that are currently within their opt-in period for longer IDs.
+modifyIdentityIdFormat_resource :: Lens.Lens' ModifyIdentityIdFormat Prelude.Text
+modifyIdentityIdFormat_resource = Lens.lens (\ModifyIdentityIdFormat' {resource} -> resource) (\s@ModifyIdentityIdFormat' {} a -> s {resource = a} :: ModifyIdentityIdFormat)
+
+-- | Indicates whether the resource should use longer IDs (17-character IDs)
+modifyIdentityIdFormat_useLongIds :: Lens.Lens' ModifyIdentityIdFormat Prelude.Bool
+modifyIdentityIdFormat_useLongIds = Lens.lens (\ModifyIdentityIdFormat' {useLongIds} -> useLongIds) (\s@ModifyIdentityIdFormat' {} a -> s {useLongIds = a} :: ModifyIdentityIdFormat)
+
+instance Core.AWSRequest ModifyIdentityIdFormat where
+  type
+    AWSResponse ModifyIdentityIdFormat =
+      ModifyIdentityIdFormatResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ModifyIdentityIdFormatResponse'
+
+instance Prelude.Hashable ModifyIdentityIdFormat where
+  hashWithSalt _salt ModifyIdentityIdFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` principalArn
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` useLongIds
+
+instance Prelude.NFData ModifyIdentityIdFormat where
+  rnf ModifyIdentityIdFormat' {..} =
+    Prelude.rnf principalArn
+      `Prelude.seq` Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf useLongIds
+
+instance Data.ToHeaders ModifyIdentityIdFormat where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyIdentityIdFormat where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyIdentityIdFormat where
+  toQuery ModifyIdentityIdFormat' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyIdentityIdFormat" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "PrincipalArn" Data.=: principalArn,
+        "Resource" Data.=: resource,
+        "UseLongIds" Data.=: useLongIds
+      ]
+
+-- | /See:/ 'newModifyIdentityIdFormatResponse' smart constructor.
+data ModifyIdentityIdFormatResponse = ModifyIdentityIdFormatResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIdentityIdFormatResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyIdentityIdFormatResponse ::
+  ModifyIdentityIdFormatResponse
+newModifyIdentityIdFormatResponse =
+  ModifyIdentityIdFormatResponse'
+
+instance
+  Prelude.NFData
+    ModifyIdentityIdFormatResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyImageAttribute.hs b/gen/Amazonka/EC2/ModifyImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyImageAttribute.hs
@@ -0,0 +1,329 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified attribute of the specified AMI. You can specify
+-- only one attribute at a time. You can use the @Attribute@ parameter to
+-- specify the attribute or one of the following parameters: @Description@
+-- or @LaunchPermission@.
+--
+-- Images with an Amazon Web Services Marketplace product code cannot be
+-- made public.
+--
+-- To enable the SriovNetSupport enhanced networking attribute of an image,
+-- enable SriovNetSupport on an instance and create an AMI from the
+-- instance.
+module Amazonka.EC2.ModifyImageAttribute
+  ( -- * Creating a Request
+    ModifyImageAttribute (..),
+    newModifyImageAttribute,
+
+    -- * Request Lenses
+    modifyImageAttribute_attribute,
+    modifyImageAttribute_description,
+    modifyImageAttribute_dryRun,
+    modifyImageAttribute_launchPermission,
+    modifyImageAttribute_operationType,
+    modifyImageAttribute_organizationArns,
+    modifyImageAttribute_organizationalUnitArns,
+    modifyImageAttribute_productCodes,
+    modifyImageAttribute_userGroups,
+    modifyImageAttribute_userIds,
+    modifyImageAttribute_value,
+    modifyImageAttribute_imageId,
+
+    -- * Destructuring the Response
+    ModifyImageAttributeResponse (..),
+    newModifyImageAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ModifyImageAttribute.
+--
+-- /See:/ 'newModifyImageAttribute' smart constructor.
+data ModifyImageAttribute = ModifyImageAttribute'
+  { -- | The name of the attribute to modify.
+    --
+    -- Valid values: @description@ | @launchPermission@
+    attribute :: Prelude.Maybe Prelude.Text,
+    -- | A new description for the AMI.
+    description :: Prelude.Maybe AttributeValue,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | A new launch permission for the AMI.
+    launchPermission :: Prelude.Maybe LaunchPermissionModifications,
+    -- | The operation type. This parameter can be used only when the @Attribute@
+    -- parameter is @launchPermission@.
+    operationType :: Prelude.Maybe OperationType,
+    -- | The Amazon Resource Name (ARN) of an organization. This parameter can be
+    -- used only when the @Attribute@ parameter is @launchPermission@.
+    organizationArns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Name (ARN) of an organizational unit (OU). This
+    -- parameter can be used only when the @Attribute@ parameter is
+    -- @launchPermission@.
+    organizationalUnitArns :: Prelude.Maybe [Prelude.Text],
+    -- | Not supported.
+    productCodes :: Prelude.Maybe [Prelude.Text],
+    -- | The user groups. This parameter can be used only when the @Attribute@
+    -- parameter is @launchPermission@.
+    userGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Web Services account IDs. This parameter can be used only
+    -- when the @Attribute@ parameter is @launchPermission@.
+    userIds :: Prelude.Maybe [Prelude.Text],
+    -- | The value of the attribute being modified. This parameter can be used
+    -- only when the @Attribute@ parameter is @description@.
+    value :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'modifyImageAttribute_attribute' - The name of the attribute to modify.
+--
+-- Valid values: @description@ | @launchPermission@
+--
+-- 'description', 'modifyImageAttribute_description' - A new description for the AMI.
+--
+-- 'dryRun', 'modifyImageAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchPermission', 'modifyImageAttribute_launchPermission' - A new launch permission for the AMI.
+--
+-- 'operationType', 'modifyImageAttribute_operationType' - The operation type. This parameter can be used only when the @Attribute@
+-- parameter is @launchPermission@.
+--
+-- 'organizationArns', 'modifyImageAttribute_organizationArns' - The Amazon Resource Name (ARN) of an organization. This parameter can be
+-- used only when the @Attribute@ parameter is @launchPermission@.
+--
+-- 'organizationalUnitArns', 'modifyImageAttribute_organizationalUnitArns' - The Amazon Resource Name (ARN) of an organizational unit (OU). This
+-- parameter can be used only when the @Attribute@ parameter is
+-- @launchPermission@.
+--
+-- 'productCodes', 'modifyImageAttribute_productCodes' - Not supported.
+--
+-- 'userGroups', 'modifyImageAttribute_userGroups' - The user groups. This parameter can be used only when the @Attribute@
+-- parameter is @launchPermission@.
+--
+-- 'userIds', 'modifyImageAttribute_userIds' - The Amazon Web Services account IDs. This parameter can be used only
+-- when the @Attribute@ parameter is @launchPermission@.
+--
+-- 'value', 'modifyImageAttribute_value' - The value of the attribute being modified. This parameter can be used
+-- only when the @Attribute@ parameter is @description@.
+--
+-- 'imageId', 'modifyImageAttribute_imageId' - The ID of the AMI.
+newModifyImageAttribute ::
+  -- | 'imageId'
+  Prelude.Text ->
+  ModifyImageAttribute
+newModifyImageAttribute pImageId_ =
+  ModifyImageAttribute'
+    { attribute = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      launchPermission = Prelude.Nothing,
+      operationType = Prelude.Nothing,
+      organizationArns = Prelude.Nothing,
+      organizationalUnitArns = Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      userGroups = Prelude.Nothing,
+      userIds = Prelude.Nothing,
+      value = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | The name of the attribute to modify.
+--
+-- Valid values: @description@ | @launchPermission@
+modifyImageAttribute_attribute :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe Prelude.Text)
+modifyImageAttribute_attribute = Lens.lens (\ModifyImageAttribute' {attribute} -> attribute) (\s@ModifyImageAttribute' {} a -> s {attribute = a} :: ModifyImageAttribute)
+
+-- | A new description for the AMI.
+modifyImageAttribute_description :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe AttributeValue)
+modifyImageAttribute_description = Lens.lens (\ModifyImageAttribute' {description} -> description) (\s@ModifyImageAttribute' {} a -> s {description = a} :: ModifyImageAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyImageAttribute_dryRun :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe Prelude.Bool)
+modifyImageAttribute_dryRun = Lens.lens (\ModifyImageAttribute' {dryRun} -> dryRun) (\s@ModifyImageAttribute' {} a -> s {dryRun = a} :: ModifyImageAttribute)
+
+-- | A new launch permission for the AMI.
+modifyImageAttribute_launchPermission :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe LaunchPermissionModifications)
+modifyImageAttribute_launchPermission = Lens.lens (\ModifyImageAttribute' {launchPermission} -> launchPermission) (\s@ModifyImageAttribute' {} a -> s {launchPermission = a} :: ModifyImageAttribute)
+
+-- | The operation type. This parameter can be used only when the @Attribute@
+-- parameter is @launchPermission@.
+modifyImageAttribute_operationType :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe OperationType)
+modifyImageAttribute_operationType = Lens.lens (\ModifyImageAttribute' {operationType} -> operationType) (\s@ModifyImageAttribute' {} a -> s {operationType = a} :: ModifyImageAttribute)
+
+-- | The Amazon Resource Name (ARN) of an organization. This parameter can be
+-- used only when the @Attribute@ parameter is @launchPermission@.
+modifyImageAttribute_organizationArns :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyImageAttribute_organizationArns = Lens.lens (\ModifyImageAttribute' {organizationArns} -> organizationArns) (\s@ModifyImageAttribute' {} a -> s {organizationArns = a} :: ModifyImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of an organizational unit (OU). This
+-- parameter can be used only when the @Attribute@ parameter is
+-- @launchPermission@.
+modifyImageAttribute_organizationalUnitArns :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyImageAttribute_organizationalUnitArns = Lens.lens (\ModifyImageAttribute' {organizationalUnitArns} -> organizationalUnitArns) (\s@ModifyImageAttribute' {} a -> s {organizationalUnitArns = a} :: ModifyImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | Not supported.
+modifyImageAttribute_productCodes :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyImageAttribute_productCodes = Lens.lens (\ModifyImageAttribute' {productCodes} -> productCodes) (\s@ModifyImageAttribute' {} a -> s {productCodes = a} :: ModifyImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user groups. This parameter can be used only when the @Attribute@
+-- parameter is @launchPermission@.
+modifyImageAttribute_userGroups :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyImageAttribute_userGroups = Lens.lens (\ModifyImageAttribute' {userGroups} -> userGroups) (\s@ModifyImageAttribute' {} a -> s {userGroups = a} :: ModifyImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services account IDs. This parameter can be used only
+-- when the @Attribute@ parameter is @launchPermission@.
+modifyImageAttribute_userIds :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe [Prelude.Text])
+modifyImageAttribute_userIds = Lens.lens (\ModifyImageAttribute' {userIds} -> userIds) (\s@ModifyImageAttribute' {} a -> s {userIds = a} :: ModifyImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value of the attribute being modified. This parameter can be used
+-- only when the @Attribute@ parameter is @description@.
+modifyImageAttribute_value :: Lens.Lens' ModifyImageAttribute (Prelude.Maybe Prelude.Text)
+modifyImageAttribute_value = Lens.lens (\ModifyImageAttribute' {value} -> value) (\s@ModifyImageAttribute' {} a -> s {value = a} :: ModifyImageAttribute)
+
+-- | The ID of the AMI.
+modifyImageAttribute_imageId :: Lens.Lens' ModifyImageAttribute Prelude.Text
+modifyImageAttribute_imageId = Lens.lens (\ModifyImageAttribute' {imageId} -> imageId) (\s@ModifyImageAttribute' {} a -> s {imageId = a} :: ModifyImageAttribute)
+
+instance Core.AWSRequest ModifyImageAttribute where
+  type
+    AWSResponse ModifyImageAttribute =
+      ModifyImageAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ModifyImageAttributeResponse'
+
+instance Prelude.Hashable ModifyImageAttribute where
+  hashWithSalt _salt ModifyImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchPermission
+      `Prelude.hashWithSalt` operationType
+      `Prelude.hashWithSalt` organizationArns
+      `Prelude.hashWithSalt` organizationalUnitArns
+      `Prelude.hashWithSalt` productCodes
+      `Prelude.hashWithSalt` userGroups
+      `Prelude.hashWithSalt` userIds
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData ModifyImageAttribute where
+  rnf ModifyImageAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchPermission
+      `Prelude.seq` Prelude.rnf operationType
+      `Prelude.seq` Prelude.rnf organizationArns
+      `Prelude.seq` Prelude.rnf organizationalUnitArns
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf userGroups
+      `Prelude.seq` Prelude.rnf userIds
+      `Prelude.seq` Prelude.rnf value
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders ModifyImageAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyImageAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyImageAttribute where
+  toQuery ModifyImageAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyImageAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attribute" Data.=: attribute,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "LaunchPermission" Data.=: launchPermission,
+        "OperationType" Data.=: operationType,
+        Data.toQuery
+          ( Data.toQueryList "OrganizationArn"
+              Prelude.<$> organizationArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "OrganizationalUnitArn"
+              Prelude.<$> organizationalUnitArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "ProductCode"
+              Prelude.<$> productCodes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "UserGroup"
+              Prelude.<$> userGroups
+          ),
+        Data.toQuery
+          (Data.toQueryList "UserId" Prelude.<$> userIds),
+        "Value" Data.=: value,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newModifyImageAttributeResponse' smart constructor.
+data ModifyImageAttributeResponse = ModifyImageAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyImageAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyImageAttributeResponse ::
+  ModifyImageAttributeResponse
+newModifyImageAttributeResponse =
+  ModifyImageAttributeResponse'
+
+instance Prelude.NFData ModifyImageAttributeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyInstanceAttribute.hs b/gen/Amazonka/EC2/ModifyInstanceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceAttribute.hs
@@ -0,0 +1,538 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified attribute of the specified instance. You can
+-- specify only one attribute at a time.
+--
+-- __Note:__ Using this action to change the security groups associated
+-- with an elastic network interface (ENI) attached to an instance in a VPC
+-- can result in an error if the instance has more than one ENI. To change
+-- the security groups associated with an ENI attached to an instance that
+-- has multiple ENIs, we recommend that you use the
+-- ModifyNetworkInterfaceAttribute action.
+--
+-- To modify some attributes, the instance must be stopped. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html Modify a stopped instance>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.ModifyInstanceAttribute
+  ( -- * Creating a Request
+    ModifyInstanceAttribute (..),
+    newModifyInstanceAttribute,
+
+    -- * Request Lenses
+    modifyInstanceAttribute_attribute,
+    modifyInstanceAttribute_blockDeviceMappings,
+    modifyInstanceAttribute_disableApiStop,
+    modifyInstanceAttribute_disableApiTermination,
+    modifyInstanceAttribute_dryRun,
+    modifyInstanceAttribute_ebsOptimized,
+    modifyInstanceAttribute_enaSupport,
+    modifyInstanceAttribute_groups,
+    modifyInstanceAttribute_instanceInitiatedShutdownBehavior,
+    modifyInstanceAttribute_instanceType,
+    modifyInstanceAttribute_kernel,
+    modifyInstanceAttribute_ramdisk,
+    modifyInstanceAttribute_sourceDestCheck,
+    modifyInstanceAttribute_sriovNetSupport,
+    modifyInstanceAttribute_userData,
+    modifyInstanceAttribute_value,
+    modifyInstanceAttribute_instanceId,
+
+    -- * Destructuring the Response
+    ModifyInstanceAttributeResponse (..),
+    newModifyInstanceAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceAttribute' smart constructor.
+data ModifyInstanceAttribute = ModifyInstanceAttribute'
+  { -- | The name of the attribute to modify.
+    --
+    -- You can modify the following attributes only: @disableApiTermination@ |
+    -- @instanceType@ | @kernel@ | @ramdisk@ |
+    -- @instanceInitiatedShutdownBehavior@ | @blockDeviceMapping@ | @userData@
+    -- | @sourceDestCheck@ | @groupSet@ | @ebsOptimized@ | @sriovNetSupport@ |
+    -- @enaSupport@ | @nvmeSupport@ | @disableApiStop@ | @enclaveOptions@
+    attribute :: Prelude.Maybe InstanceAttributeName,
+    -- | Modifies the @DeleteOnTermination@ attribute for volumes that are
+    -- currently attached. The volume must be owned by the caller. If no value
+    -- is specified for @DeleteOnTermination@, the default is @true@ and the
+    -- volume is deleted when the instance is terminated.
+    --
+    -- To add instance store volumes to an Amazon EBS-backed instance, you must
+    -- add them when you launch the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM Update the block device mapping when launching an instance>
+    -- in the /Amazon EC2 User Guide/.
+    blockDeviceMappings :: Prelude.Maybe [InstanceBlockDeviceMappingSpecification],
+    -- | Indicates whether an instance is enabled for stop protection. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+    disableApiStop :: Prelude.Maybe AttributeBooleanValue,
+    -- | If the value is @true@, you can\'t terminate the instance using the
+    -- Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this
+    -- parameter for Spot Instances.
+    disableApiTermination :: Prelude.Maybe AttributeBooleanValue,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies whether the instance is optimized for Amazon EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal EBS I\/O performance.
+    -- This optimization isn\'t available with all instance types. Additional
+    -- usage charges apply when using an EBS Optimized instance.
+    ebsOptimized :: Prelude.Maybe AttributeBooleanValue,
+    -- | Set to @true@ to enable enhanced networking with ENA for the instance.
+    --
+    -- This option is supported only for HVM instances. Specifying this option
+    -- with a PV instance can make it unreachable.
+    enaSupport :: Prelude.Maybe AttributeBooleanValue,
+    -- | [EC2-VPC] Replaces the security groups of the instance with the
+    -- specified security groups. You must specify at least one security group,
+    -- even if it\'s just the default security group for the VPC. You must
+    -- specify the security group ID, not the security group name.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | Specifies whether an instance stops or terminates when you initiate
+    -- shutdown from the instance (using the operating system command for
+    -- system shutdown).
+    instanceInitiatedShutdownBehavior :: Prelude.Maybe AttributeValue,
+    -- | Changes the instance type to the specified value. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/. If the instance type is not valid, the
+    -- error returned is @InvalidInstanceAttributeValue@.
+    instanceType :: Prelude.Maybe AttributeValue,
+    -- | Changes the instance\'s kernel to the specified value. We recommend that
+    -- you use PV-GRUB instead of kernels and RAM disks. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB>.
+    kernel :: Prelude.Maybe AttributeValue,
+    -- | Changes the instance\'s RAM disk to the specified value. We recommend
+    -- that you use PV-GRUB instead of kernels and RAM disks. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB>.
+    ramdisk :: Prelude.Maybe AttributeValue,
+    -- | Enable or disable source\/destination checks, which ensure that the
+    -- instance is either the source or the destination of any traffic that it
+    -- receives. If the value is @true@, source\/destination checks are
+    -- enabled; otherwise, they are disabled. The default value is @true@. You
+    -- must disable source\/destination checks if the instance runs services
+    -- such as network address translation, routing, or firewalls.
+    sourceDestCheck :: Prelude.Maybe AttributeBooleanValue,
+    -- | Set to @simple@ to enable enhanced networking with the Intel 82599
+    -- Virtual Function interface for the instance.
+    --
+    -- There is no way to disable enhanced networking with the Intel 82599
+    -- Virtual Function interface at this time.
+    --
+    -- This option is supported only for HVM instances. Specifying this option
+    -- with a PV instance can make it unreachable.
+    sriovNetSupport :: Prelude.Maybe AttributeValue,
+    -- | Changes the instance\'s user data to the specified value. If you are
+    -- using an Amazon Web Services SDK or 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.
+    userData :: Prelude.Maybe BlobAttributeValue,
+    -- | A new value for the attribute. Use only with the @kernel@, @ramdisk@,
+    -- @userData@, @disableApiTermination@, or
+    -- @instanceInitiatedShutdownBehavior@ attribute.
+    value :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'modifyInstanceAttribute_attribute' - The name of the attribute to modify.
+--
+-- You can modify the following attributes only: @disableApiTermination@ |
+-- @instanceType@ | @kernel@ | @ramdisk@ |
+-- @instanceInitiatedShutdownBehavior@ | @blockDeviceMapping@ | @userData@
+-- | @sourceDestCheck@ | @groupSet@ | @ebsOptimized@ | @sriovNetSupport@ |
+-- @enaSupport@ | @nvmeSupport@ | @disableApiStop@ | @enclaveOptions@
+--
+-- 'blockDeviceMappings', 'modifyInstanceAttribute_blockDeviceMappings' - Modifies the @DeleteOnTermination@ attribute for volumes that are
+-- currently attached. The volume must be owned by the caller. If no value
+-- is specified for @DeleteOnTermination@, the default is @true@ and the
+-- volume is deleted when the instance is terminated.
+--
+-- To add instance store volumes to an Amazon EBS-backed instance, you must
+-- add them when you launch the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM Update the block device mapping when launching an instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'disableApiStop', 'modifyInstanceAttribute_disableApiStop' - Indicates whether an instance is enabled for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+--
+-- 'disableApiTermination', 'modifyInstanceAttribute_disableApiTermination' - If the value is @true@, you can\'t terminate the instance using the
+-- Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this
+-- parameter for Spot Instances.
+--
+-- 'dryRun', 'modifyInstanceAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ebsOptimized', 'modifyInstanceAttribute_ebsOptimized' - Specifies whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- 'enaSupport', 'modifyInstanceAttribute_enaSupport' - Set to @true@ to enable enhanced networking with ENA for the instance.
+--
+-- This option is supported only for HVM instances. Specifying this option
+-- with a PV instance can make it unreachable.
+--
+-- 'groups', 'modifyInstanceAttribute_groups' - [EC2-VPC] Replaces the security groups of the instance with the
+-- specified security groups. You must specify at least one security group,
+-- even if it\'s just the default security group for the VPC. You must
+-- specify the security group ID, not the security group name.
+--
+-- 'instanceInitiatedShutdownBehavior', 'modifyInstanceAttribute_instanceInitiatedShutdownBehavior' - Specifies whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- 'instanceType', 'modifyInstanceAttribute_instanceType' - Changes the instance type to the specified value. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/. If the instance type is not valid, the
+-- error returned is @InvalidInstanceAttributeValue@.
+--
+-- 'kernel', 'modifyInstanceAttribute_kernel' - Changes the instance\'s kernel to the specified value. We recommend that
+-- you use PV-GRUB instead of kernels and RAM disks. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB>.
+--
+-- 'ramdisk', 'modifyInstanceAttribute_ramdisk' - Changes the instance\'s RAM disk to the specified value. We recommend
+-- that you use PV-GRUB instead of kernels and RAM disks. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB>.
+--
+-- 'sourceDestCheck', 'modifyInstanceAttribute_sourceDestCheck' - Enable or disable source\/destination checks, which ensure that the
+-- instance is either the source or the destination of any traffic that it
+-- receives. If the value is @true@, source\/destination checks are
+-- enabled; otherwise, they are disabled. The default value is @true@. You
+-- must disable source\/destination checks if the instance runs services
+-- such as network address translation, routing, or firewalls.
+--
+-- 'sriovNetSupport', 'modifyInstanceAttribute_sriovNetSupport' - Set to @simple@ to enable enhanced networking with the Intel 82599
+-- Virtual Function interface for the instance.
+--
+-- There is no way to disable enhanced networking with the Intel 82599
+-- Virtual Function interface at this time.
+--
+-- This option is supported only for HVM instances. Specifying this option
+-- with a PV instance can make it unreachable.
+--
+-- 'userData', 'modifyInstanceAttribute_userData' - Changes the instance\'s user data to the specified value. If you are
+-- using an Amazon Web Services SDK or 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.
+--
+-- 'value', 'modifyInstanceAttribute_value' - A new value for the attribute. Use only with the @kernel@, @ramdisk@,
+-- @userData@, @disableApiTermination@, or
+-- @instanceInitiatedShutdownBehavior@ attribute.
+--
+-- 'instanceId', 'modifyInstanceAttribute_instanceId' - The ID of the instance.
+newModifyInstanceAttribute ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  ModifyInstanceAttribute
+newModifyInstanceAttribute pInstanceId_ =
+  ModifyInstanceAttribute'
+    { attribute =
+        Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      disableApiStop = Prelude.Nothing,
+      disableApiTermination = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      enaSupport = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      instanceInitiatedShutdownBehavior =
+        Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernel = Prelude.Nothing,
+      ramdisk = Prelude.Nothing,
+      sourceDestCheck = Prelude.Nothing,
+      sriovNetSupport = Prelude.Nothing,
+      userData = Prelude.Nothing,
+      value = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | The name of the attribute to modify.
+--
+-- You can modify the following attributes only: @disableApiTermination@ |
+-- @instanceType@ | @kernel@ | @ramdisk@ |
+-- @instanceInitiatedShutdownBehavior@ | @blockDeviceMapping@ | @userData@
+-- | @sourceDestCheck@ | @groupSet@ | @ebsOptimized@ | @sriovNetSupport@ |
+-- @enaSupport@ | @nvmeSupport@ | @disableApiStop@ | @enclaveOptions@
+modifyInstanceAttribute_attribute :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe InstanceAttributeName)
+modifyInstanceAttribute_attribute = Lens.lens (\ModifyInstanceAttribute' {attribute} -> attribute) (\s@ModifyInstanceAttribute' {} a -> s {attribute = a} :: ModifyInstanceAttribute)
+
+-- | Modifies the @DeleteOnTermination@ attribute for volumes that are
+-- currently attached. The volume must be owned by the caller. If no value
+-- is specified for @DeleteOnTermination@, the default is @true@ and the
+-- volume is deleted when the instance is terminated.
+--
+-- To add instance store volumes to an Amazon EBS-backed instance, you must
+-- add them when you launch the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM Update the block device mapping when launching an instance>
+-- in the /Amazon EC2 User Guide/.
+modifyInstanceAttribute_blockDeviceMappings :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe [InstanceBlockDeviceMappingSpecification])
+modifyInstanceAttribute_blockDeviceMappings = Lens.lens (\ModifyInstanceAttribute' {blockDeviceMappings} -> blockDeviceMappings) (\s@ModifyInstanceAttribute' {} a -> s {blockDeviceMappings = a} :: ModifyInstanceAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether an instance is enabled for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+modifyInstanceAttribute_disableApiStop :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyInstanceAttribute_disableApiStop = Lens.lens (\ModifyInstanceAttribute' {disableApiStop} -> disableApiStop) (\s@ModifyInstanceAttribute' {} a -> s {disableApiStop = a} :: ModifyInstanceAttribute)
+
+-- | If the value is @true@, you can\'t terminate the instance using the
+-- Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this
+-- parameter for Spot Instances.
+modifyInstanceAttribute_disableApiTermination :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyInstanceAttribute_disableApiTermination = Lens.lens (\ModifyInstanceAttribute' {disableApiTermination} -> disableApiTermination) (\s@ModifyInstanceAttribute' {} a -> s {disableApiTermination = a} :: ModifyInstanceAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceAttribute_dryRun :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe Prelude.Bool)
+modifyInstanceAttribute_dryRun = Lens.lens (\ModifyInstanceAttribute' {dryRun} -> dryRun) (\s@ModifyInstanceAttribute' {} a -> s {dryRun = a} :: ModifyInstanceAttribute)
+
+-- | Specifies whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+modifyInstanceAttribute_ebsOptimized :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyInstanceAttribute_ebsOptimized = Lens.lens (\ModifyInstanceAttribute' {ebsOptimized} -> ebsOptimized) (\s@ModifyInstanceAttribute' {} a -> s {ebsOptimized = a} :: ModifyInstanceAttribute)
+
+-- | Set to @true@ to enable enhanced networking with ENA for the instance.
+--
+-- This option is supported only for HVM instances. Specifying this option
+-- with a PV instance can make it unreachable.
+modifyInstanceAttribute_enaSupport :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyInstanceAttribute_enaSupport = Lens.lens (\ModifyInstanceAttribute' {enaSupport} -> enaSupport) (\s@ModifyInstanceAttribute' {} a -> s {enaSupport = a} :: ModifyInstanceAttribute)
+
+-- | [EC2-VPC] Replaces the security groups of the instance with the
+-- specified security groups. You must specify at least one security group,
+-- even if it\'s just the default security group for the VPC. You must
+-- specify the security group ID, not the security group name.
+modifyInstanceAttribute_groups :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe [Prelude.Text])
+modifyInstanceAttribute_groups = Lens.lens (\ModifyInstanceAttribute' {groups} -> groups) (\s@ModifyInstanceAttribute' {} a -> s {groups = a} :: ModifyInstanceAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+modifyInstanceAttribute_instanceInitiatedShutdownBehavior :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeValue)
+modifyInstanceAttribute_instanceInitiatedShutdownBehavior = Lens.lens (\ModifyInstanceAttribute' {instanceInitiatedShutdownBehavior} -> instanceInitiatedShutdownBehavior) (\s@ModifyInstanceAttribute' {} a -> s {instanceInitiatedShutdownBehavior = a} :: ModifyInstanceAttribute)
+
+-- | Changes the instance type to the specified value. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/. If the instance type is not valid, the
+-- error returned is @InvalidInstanceAttributeValue@.
+modifyInstanceAttribute_instanceType :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeValue)
+modifyInstanceAttribute_instanceType = Lens.lens (\ModifyInstanceAttribute' {instanceType} -> instanceType) (\s@ModifyInstanceAttribute' {} a -> s {instanceType = a} :: ModifyInstanceAttribute)
+
+-- | Changes the instance\'s kernel to the specified value. We recommend that
+-- you use PV-GRUB instead of kernels and RAM disks. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB>.
+modifyInstanceAttribute_kernel :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeValue)
+modifyInstanceAttribute_kernel = Lens.lens (\ModifyInstanceAttribute' {kernel} -> kernel) (\s@ModifyInstanceAttribute' {} a -> s {kernel = a} :: ModifyInstanceAttribute)
+
+-- | Changes the instance\'s RAM disk to the specified value. We recommend
+-- that you use PV-GRUB instead of kernels and RAM disks. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB>.
+modifyInstanceAttribute_ramdisk :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeValue)
+modifyInstanceAttribute_ramdisk = Lens.lens (\ModifyInstanceAttribute' {ramdisk} -> ramdisk) (\s@ModifyInstanceAttribute' {} a -> s {ramdisk = a} :: ModifyInstanceAttribute)
+
+-- | Enable or disable source\/destination checks, which ensure that the
+-- instance is either the source or the destination of any traffic that it
+-- receives. If the value is @true@, source\/destination checks are
+-- enabled; otherwise, they are disabled. The default value is @true@. You
+-- must disable source\/destination checks if the instance runs services
+-- such as network address translation, routing, or firewalls.
+modifyInstanceAttribute_sourceDestCheck :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyInstanceAttribute_sourceDestCheck = Lens.lens (\ModifyInstanceAttribute' {sourceDestCheck} -> sourceDestCheck) (\s@ModifyInstanceAttribute' {} a -> s {sourceDestCheck = a} :: ModifyInstanceAttribute)
+
+-- | Set to @simple@ to enable enhanced networking with the Intel 82599
+-- Virtual Function interface for the instance.
+--
+-- There is no way to disable enhanced networking with the Intel 82599
+-- Virtual Function interface at this time.
+--
+-- This option is supported only for HVM instances. Specifying this option
+-- with a PV instance can make it unreachable.
+modifyInstanceAttribute_sriovNetSupport :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe AttributeValue)
+modifyInstanceAttribute_sriovNetSupport = Lens.lens (\ModifyInstanceAttribute' {sriovNetSupport} -> sriovNetSupport) (\s@ModifyInstanceAttribute' {} a -> s {sriovNetSupport = a} :: ModifyInstanceAttribute)
+
+-- | Changes the instance\'s user data to the specified value. If you are
+-- using an Amazon Web Services SDK or 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.
+modifyInstanceAttribute_userData :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe BlobAttributeValue)
+modifyInstanceAttribute_userData = Lens.lens (\ModifyInstanceAttribute' {userData} -> userData) (\s@ModifyInstanceAttribute' {} a -> s {userData = a} :: ModifyInstanceAttribute)
+
+-- | A new value for the attribute. Use only with the @kernel@, @ramdisk@,
+-- @userData@, @disableApiTermination@, or
+-- @instanceInitiatedShutdownBehavior@ attribute.
+modifyInstanceAttribute_value :: Lens.Lens' ModifyInstanceAttribute (Prelude.Maybe Prelude.Text)
+modifyInstanceAttribute_value = Lens.lens (\ModifyInstanceAttribute' {value} -> value) (\s@ModifyInstanceAttribute' {} a -> s {value = a} :: ModifyInstanceAttribute)
+
+-- | The ID of the instance.
+modifyInstanceAttribute_instanceId :: Lens.Lens' ModifyInstanceAttribute Prelude.Text
+modifyInstanceAttribute_instanceId = Lens.lens (\ModifyInstanceAttribute' {instanceId} -> instanceId) (\s@ModifyInstanceAttribute' {} a -> s {instanceId = a} :: ModifyInstanceAttribute)
+
+instance Core.AWSRequest ModifyInstanceAttribute where
+  type
+    AWSResponse ModifyInstanceAttribute =
+      ModifyInstanceAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ModifyInstanceAttributeResponse'
+
+instance Prelude.Hashable ModifyInstanceAttribute where
+  hashWithSalt _salt ModifyInstanceAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` disableApiStop
+      `Prelude.hashWithSalt` disableApiTermination
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` enaSupport
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` instanceInitiatedShutdownBehavior
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` kernel
+      `Prelude.hashWithSalt` ramdisk
+      `Prelude.hashWithSalt` sourceDestCheck
+      `Prelude.hashWithSalt` sriovNetSupport
+      `Prelude.hashWithSalt` userData
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData ModifyInstanceAttribute where
+  rnf ModifyInstanceAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf disableApiStop
+      `Prelude.seq` Prelude.rnf disableApiTermination
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf enaSupport
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf instanceInitiatedShutdownBehavior
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernel
+      `Prelude.seq` Prelude.rnf ramdisk
+      `Prelude.seq` Prelude.rnf sourceDestCheck
+      `Prelude.seq` Prelude.rnf sriovNetSupport
+      `Prelude.seq` Prelude.rnf userData
+      `Prelude.seq` Prelude.rnf value
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders ModifyInstanceAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyInstanceAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyInstanceAttribute where
+  toQuery ModifyInstanceAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyInstanceAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attribute" Data.=: attribute,
+        Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "DisableApiStop" Data.=: disableApiStop,
+        "DisableApiTermination"
+          Data.=: disableApiTermination,
+        "DryRun" Data.=: dryRun,
+        "EbsOptimized" Data.=: ebsOptimized,
+        "EnaSupport" Data.=: enaSupport,
+        Data.toQuery
+          (Data.toQueryList "GroupId" Prelude.<$> groups),
+        "InstanceInitiatedShutdownBehavior"
+          Data.=: instanceInitiatedShutdownBehavior,
+        "InstanceType" Data.=: instanceType,
+        "Kernel" Data.=: kernel,
+        "Ramdisk" Data.=: ramdisk,
+        "SourceDestCheck" Data.=: sourceDestCheck,
+        "SriovNetSupport" Data.=: sriovNetSupport,
+        "UserData" Data.=: userData,
+        "Value" Data.=: value,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newModifyInstanceAttributeResponse' smart constructor.
+data ModifyInstanceAttributeResponse = ModifyInstanceAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyInstanceAttributeResponse ::
+  ModifyInstanceAttributeResponse
+newModifyInstanceAttributeResponse =
+  ModifyInstanceAttributeResponse'
+
+instance
+  Prelude.NFData
+    ModifyInstanceAttributeResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyInstanceCapacityReservationAttributes.hs b/gen/Amazonka/EC2/ModifyInstanceCapacityReservationAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceCapacityReservationAttributes.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceCapacityReservationAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the Capacity Reservation settings for a stopped instance. Use
+-- this action to configure an instance to target a specific Capacity
+-- Reservation, run in any @open@ Capacity Reservation with matching
+-- attributes, or run On-Demand Instance capacity.
+module Amazonka.EC2.ModifyInstanceCapacityReservationAttributes
+  ( -- * Creating a Request
+    ModifyInstanceCapacityReservationAttributes (..),
+    newModifyInstanceCapacityReservationAttributes,
+
+    -- * Request Lenses
+    modifyInstanceCapacityReservationAttributes_dryRun,
+    modifyInstanceCapacityReservationAttributes_instanceId,
+    modifyInstanceCapacityReservationAttributes_capacityReservationSpecification,
+
+    -- * Destructuring the Response
+    ModifyInstanceCapacityReservationAttributesResponse (..),
+    newModifyInstanceCapacityReservationAttributesResponse,
+
+    -- * Response Lenses
+    modifyInstanceCapacityReservationAttributesResponse_return,
+    modifyInstanceCapacityReservationAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceCapacityReservationAttributes' smart constructor.
+data ModifyInstanceCapacityReservationAttributes = ModifyInstanceCapacityReservationAttributes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance to be modified.
+    instanceId :: Prelude.Text,
+    -- | Information about the Capacity Reservation targeting option.
+    capacityReservationSpecification :: CapacityReservationSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceCapacityReservationAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyInstanceCapacityReservationAttributes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'modifyInstanceCapacityReservationAttributes_instanceId' - The ID of the instance to be modified.
+--
+-- 'capacityReservationSpecification', 'modifyInstanceCapacityReservationAttributes_capacityReservationSpecification' - Information about the Capacity Reservation targeting option.
+newModifyInstanceCapacityReservationAttributes ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'capacityReservationSpecification'
+  CapacityReservationSpecification ->
+  ModifyInstanceCapacityReservationAttributes
+newModifyInstanceCapacityReservationAttributes
+  pInstanceId_
+  pCapacityReservationSpecification_ =
+    ModifyInstanceCapacityReservationAttributes'
+      { dryRun =
+          Prelude.Nothing,
+        instanceId = pInstanceId_,
+        capacityReservationSpecification =
+          pCapacityReservationSpecification_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceCapacityReservationAttributes_dryRun :: Lens.Lens' ModifyInstanceCapacityReservationAttributes (Prelude.Maybe Prelude.Bool)
+modifyInstanceCapacityReservationAttributes_dryRun = Lens.lens (\ModifyInstanceCapacityReservationAttributes' {dryRun} -> dryRun) (\s@ModifyInstanceCapacityReservationAttributes' {} a -> s {dryRun = a} :: ModifyInstanceCapacityReservationAttributes)
+
+-- | The ID of the instance to be modified.
+modifyInstanceCapacityReservationAttributes_instanceId :: Lens.Lens' ModifyInstanceCapacityReservationAttributes Prelude.Text
+modifyInstanceCapacityReservationAttributes_instanceId = Lens.lens (\ModifyInstanceCapacityReservationAttributes' {instanceId} -> instanceId) (\s@ModifyInstanceCapacityReservationAttributes' {} a -> s {instanceId = a} :: ModifyInstanceCapacityReservationAttributes)
+
+-- | Information about the Capacity Reservation targeting option.
+modifyInstanceCapacityReservationAttributes_capacityReservationSpecification :: Lens.Lens' ModifyInstanceCapacityReservationAttributes CapacityReservationSpecification
+modifyInstanceCapacityReservationAttributes_capacityReservationSpecification = Lens.lens (\ModifyInstanceCapacityReservationAttributes' {capacityReservationSpecification} -> capacityReservationSpecification) (\s@ModifyInstanceCapacityReservationAttributes' {} a -> s {capacityReservationSpecification = a} :: ModifyInstanceCapacityReservationAttributes)
+
+instance
+  Core.AWSRequest
+    ModifyInstanceCapacityReservationAttributes
+  where
+  type
+    AWSResponse
+      ModifyInstanceCapacityReservationAttributes =
+      ModifyInstanceCapacityReservationAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstanceCapacityReservationAttributesResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyInstanceCapacityReservationAttributes
+  where
+  hashWithSalt
+    _salt
+    ModifyInstanceCapacityReservationAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceId
+        `Prelude.hashWithSalt` capacityReservationSpecification
+
+instance
+  Prelude.NFData
+    ModifyInstanceCapacityReservationAttributes
+  where
+  rnf ModifyInstanceCapacityReservationAttributes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf capacityReservationSpecification
+
+instance
+  Data.ToHeaders
+    ModifyInstanceCapacityReservationAttributes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyInstanceCapacityReservationAttributes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyInstanceCapacityReservationAttributes
+  where
+  toQuery
+    ModifyInstanceCapacityReservationAttributes' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "ModifyInstanceCapacityReservationAttributes" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "InstanceId" Data.=: instanceId,
+          "CapacityReservationSpecification"
+            Data.=: capacityReservationSpecification
+        ]
+
+-- | /See:/ 'newModifyInstanceCapacityReservationAttributesResponse' smart constructor.
+data ModifyInstanceCapacityReservationAttributesResponse = ModifyInstanceCapacityReservationAttributesResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceCapacityReservationAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyInstanceCapacityReservationAttributesResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyInstanceCapacityReservationAttributesResponse_httpStatus' - The response's http status code.
+newModifyInstanceCapacityReservationAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstanceCapacityReservationAttributesResponse
+newModifyInstanceCapacityReservationAttributesResponse
+  pHttpStatus_ =
+    ModifyInstanceCapacityReservationAttributesResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyInstanceCapacityReservationAttributesResponse_return :: Lens.Lens' ModifyInstanceCapacityReservationAttributesResponse (Prelude.Maybe Prelude.Bool)
+modifyInstanceCapacityReservationAttributesResponse_return = Lens.lens (\ModifyInstanceCapacityReservationAttributesResponse' {return'} -> return') (\s@ModifyInstanceCapacityReservationAttributesResponse' {} a -> s {return' = a} :: ModifyInstanceCapacityReservationAttributesResponse)
+
+-- | The response's http status code.
+modifyInstanceCapacityReservationAttributesResponse_httpStatus :: Lens.Lens' ModifyInstanceCapacityReservationAttributesResponse Prelude.Int
+modifyInstanceCapacityReservationAttributesResponse_httpStatus = Lens.lens (\ModifyInstanceCapacityReservationAttributesResponse' {httpStatus} -> httpStatus) (\s@ModifyInstanceCapacityReservationAttributesResponse' {} a -> s {httpStatus = a} :: ModifyInstanceCapacityReservationAttributesResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstanceCapacityReservationAttributesResponse
+  where
+  rnf
+    ModifyInstanceCapacityReservationAttributesResponse' {..} =
+      Prelude.rnf return'
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyInstanceCreditSpecification.hs b/gen/Amazonka/EC2/ModifyInstanceCreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceCreditSpecification.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceCreditSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the credit option for CPU usage on a running or stopped
+-- burstable performance instance. The credit options are @standard@ and
+-- @unlimited@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.ModifyInstanceCreditSpecification
+  ( -- * Creating a Request
+    ModifyInstanceCreditSpecification (..),
+    newModifyInstanceCreditSpecification,
+
+    -- * Request Lenses
+    modifyInstanceCreditSpecification_clientToken,
+    modifyInstanceCreditSpecification_dryRun,
+    modifyInstanceCreditSpecification_instanceCreditSpecifications,
+
+    -- * Destructuring the Response
+    ModifyInstanceCreditSpecificationResponse (..),
+    newModifyInstanceCreditSpecificationResponse,
+
+    -- * Response Lenses
+    modifyInstanceCreditSpecificationResponse_successfulInstanceCreditSpecifications,
+    modifyInstanceCreditSpecificationResponse_unsuccessfulInstanceCreditSpecifications,
+    modifyInstanceCreditSpecificationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceCreditSpecification' smart constructor.
+data ModifyInstanceCreditSpecification = ModifyInstanceCreditSpecification'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the credit option for CPU usage.
+    instanceCreditSpecifications :: [InstanceCreditSpecificationRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceCreditSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyInstanceCreditSpecification_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'modifyInstanceCreditSpecification_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceCreditSpecifications', 'modifyInstanceCreditSpecification_instanceCreditSpecifications' - Information about the credit option for CPU usage.
+newModifyInstanceCreditSpecification ::
+  ModifyInstanceCreditSpecification
+newModifyInstanceCreditSpecification =
+  ModifyInstanceCreditSpecification'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      instanceCreditSpecifications =
+        Prelude.mempty
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyInstanceCreditSpecification_clientToken :: Lens.Lens' ModifyInstanceCreditSpecification (Prelude.Maybe Prelude.Text)
+modifyInstanceCreditSpecification_clientToken = Lens.lens (\ModifyInstanceCreditSpecification' {clientToken} -> clientToken) (\s@ModifyInstanceCreditSpecification' {} a -> s {clientToken = a} :: ModifyInstanceCreditSpecification)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceCreditSpecification_dryRun :: Lens.Lens' ModifyInstanceCreditSpecification (Prelude.Maybe Prelude.Bool)
+modifyInstanceCreditSpecification_dryRun = Lens.lens (\ModifyInstanceCreditSpecification' {dryRun} -> dryRun) (\s@ModifyInstanceCreditSpecification' {} a -> s {dryRun = a} :: ModifyInstanceCreditSpecification)
+
+-- | Information about the credit option for CPU usage.
+modifyInstanceCreditSpecification_instanceCreditSpecifications :: Lens.Lens' ModifyInstanceCreditSpecification [InstanceCreditSpecificationRequest]
+modifyInstanceCreditSpecification_instanceCreditSpecifications = Lens.lens (\ModifyInstanceCreditSpecification' {instanceCreditSpecifications} -> instanceCreditSpecifications) (\s@ModifyInstanceCreditSpecification' {} a -> s {instanceCreditSpecifications = a} :: ModifyInstanceCreditSpecification) Prelude.. Lens.coerced
+
+instance
+  Core.AWSRequest
+    ModifyInstanceCreditSpecification
+  where
+  type
+    AWSResponse ModifyInstanceCreditSpecification =
+      ModifyInstanceCreditSpecificationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstanceCreditSpecificationResponse'
+            Prelude.<$> ( x
+                            Data..@? "successfulInstanceCreditSpecificationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessfulInstanceCreditSpecificationSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyInstanceCreditSpecification
+  where
+  hashWithSalt
+    _salt
+    ModifyInstanceCreditSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceCreditSpecifications
+
+instance
+  Prelude.NFData
+    ModifyInstanceCreditSpecification
+  where
+  rnf ModifyInstanceCreditSpecification' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceCreditSpecifications
+
+instance
+  Data.ToHeaders
+    ModifyInstanceCreditSpecification
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyInstanceCreditSpecification
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyInstanceCreditSpecification
+  where
+  toQuery ModifyInstanceCreditSpecification' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyInstanceCreditSpecification" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList
+          "InstanceCreditSpecification"
+          instanceCreditSpecifications
+      ]
+
+-- | /See:/ 'newModifyInstanceCreditSpecificationResponse' smart constructor.
+data ModifyInstanceCreditSpecificationResponse = ModifyInstanceCreditSpecificationResponse'
+  { -- | Information about the instances whose credit option for CPU usage was
+    -- successfully modified.
+    successfulInstanceCreditSpecifications :: Prelude.Maybe [SuccessfulInstanceCreditSpecificationItem],
+    -- | Information about the instances whose credit option for CPU usage was
+    -- not modified.
+    unsuccessfulInstanceCreditSpecifications :: Prelude.Maybe [UnsuccessfulInstanceCreditSpecificationItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceCreditSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successfulInstanceCreditSpecifications', 'modifyInstanceCreditSpecificationResponse_successfulInstanceCreditSpecifications' - Information about the instances whose credit option for CPU usage was
+-- successfully modified.
+--
+-- 'unsuccessfulInstanceCreditSpecifications', 'modifyInstanceCreditSpecificationResponse_unsuccessfulInstanceCreditSpecifications' - Information about the instances whose credit option for CPU usage was
+-- not modified.
+--
+-- 'httpStatus', 'modifyInstanceCreditSpecificationResponse_httpStatus' - The response's http status code.
+newModifyInstanceCreditSpecificationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstanceCreditSpecificationResponse
+newModifyInstanceCreditSpecificationResponse
+  pHttpStatus_ =
+    ModifyInstanceCreditSpecificationResponse'
+      { successfulInstanceCreditSpecifications =
+          Prelude.Nothing,
+        unsuccessfulInstanceCreditSpecifications =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the instances whose credit option for CPU usage was
+-- successfully modified.
+modifyInstanceCreditSpecificationResponse_successfulInstanceCreditSpecifications :: Lens.Lens' ModifyInstanceCreditSpecificationResponse (Prelude.Maybe [SuccessfulInstanceCreditSpecificationItem])
+modifyInstanceCreditSpecificationResponse_successfulInstanceCreditSpecifications = Lens.lens (\ModifyInstanceCreditSpecificationResponse' {successfulInstanceCreditSpecifications} -> successfulInstanceCreditSpecifications) (\s@ModifyInstanceCreditSpecificationResponse' {} a -> s {successfulInstanceCreditSpecifications = a} :: ModifyInstanceCreditSpecificationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the instances whose credit option for CPU usage was
+-- not modified.
+modifyInstanceCreditSpecificationResponse_unsuccessfulInstanceCreditSpecifications :: Lens.Lens' ModifyInstanceCreditSpecificationResponse (Prelude.Maybe [UnsuccessfulInstanceCreditSpecificationItem])
+modifyInstanceCreditSpecificationResponse_unsuccessfulInstanceCreditSpecifications = Lens.lens (\ModifyInstanceCreditSpecificationResponse' {unsuccessfulInstanceCreditSpecifications} -> unsuccessfulInstanceCreditSpecifications) (\s@ModifyInstanceCreditSpecificationResponse' {} a -> s {unsuccessfulInstanceCreditSpecifications = a} :: ModifyInstanceCreditSpecificationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+modifyInstanceCreditSpecificationResponse_httpStatus :: Lens.Lens' ModifyInstanceCreditSpecificationResponse Prelude.Int
+modifyInstanceCreditSpecificationResponse_httpStatus = Lens.lens (\ModifyInstanceCreditSpecificationResponse' {httpStatus} -> httpStatus) (\s@ModifyInstanceCreditSpecificationResponse' {} a -> s {httpStatus = a} :: ModifyInstanceCreditSpecificationResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstanceCreditSpecificationResponse
+  where
+  rnf ModifyInstanceCreditSpecificationResponse' {..} =
+    Prelude.rnf successfulInstanceCreditSpecifications
+      `Prelude.seq` Prelude.rnf unsuccessfulInstanceCreditSpecifications
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyInstanceEventStartTime.hs b/gen/Amazonka/EC2/ModifyInstanceEventStartTime.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceEventStartTime.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceEventStartTime
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the start time for a scheduled Amazon EC2 instance event.
+module Amazonka.EC2.ModifyInstanceEventStartTime
+  ( -- * Creating a Request
+    ModifyInstanceEventStartTime (..),
+    newModifyInstanceEventStartTime,
+
+    -- * Request Lenses
+    modifyInstanceEventStartTime_dryRun,
+    modifyInstanceEventStartTime_instanceId,
+    modifyInstanceEventStartTime_instanceEventId,
+    modifyInstanceEventStartTime_notBefore,
+
+    -- * Destructuring the Response
+    ModifyInstanceEventStartTimeResponse (..),
+    newModifyInstanceEventStartTimeResponse,
+
+    -- * Response Lenses
+    modifyInstanceEventStartTimeResponse_event,
+    modifyInstanceEventStartTimeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceEventStartTime' smart constructor.
+data ModifyInstanceEventStartTime = ModifyInstanceEventStartTime'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance with the scheduled event.
+    instanceId :: Prelude.Text,
+    -- | The ID of the event whose date and time you are modifying.
+    instanceEventId :: Prelude.Text,
+    -- | The new date and time when the event will take place.
+    notBefore :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceEventStartTime' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyInstanceEventStartTime_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'modifyInstanceEventStartTime_instanceId' - The ID of the instance with the scheduled event.
+--
+-- 'instanceEventId', 'modifyInstanceEventStartTime_instanceEventId' - The ID of the event whose date and time you are modifying.
+--
+-- 'notBefore', 'modifyInstanceEventStartTime_notBefore' - The new date and time when the event will take place.
+newModifyInstanceEventStartTime ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'instanceEventId'
+  Prelude.Text ->
+  -- | 'notBefore'
+  Prelude.UTCTime ->
+  ModifyInstanceEventStartTime
+newModifyInstanceEventStartTime
+  pInstanceId_
+  pInstanceEventId_
+  pNotBefore_ =
+    ModifyInstanceEventStartTime'
+      { dryRun =
+          Prelude.Nothing,
+        instanceId = pInstanceId_,
+        instanceEventId = pInstanceEventId_,
+        notBefore = Data._Time Lens.# pNotBefore_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceEventStartTime_dryRun :: Lens.Lens' ModifyInstanceEventStartTime (Prelude.Maybe Prelude.Bool)
+modifyInstanceEventStartTime_dryRun = Lens.lens (\ModifyInstanceEventStartTime' {dryRun} -> dryRun) (\s@ModifyInstanceEventStartTime' {} a -> s {dryRun = a} :: ModifyInstanceEventStartTime)
+
+-- | The ID of the instance with the scheduled event.
+modifyInstanceEventStartTime_instanceId :: Lens.Lens' ModifyInstanceEventStartTime Prelude.Text
+modifyInstanceEventStartTime_instanceId = Lens.lens (\ModifyInstanceEventStartTime' {instanceId} -> instanceId) (\s@ModifyInstanceEventStartTime' {} a -> s {instanceId = a} :: ModifyInstanceEventStartTime)
+
+-- | The ID of the event whose date and time you are modifying.
+modifyInstanceEventStartTime_instanceEventId :: Lens.Lens' ModifyInstanceEventStartTime Prelude.Text
+modifyInstanceEventStartTime_instanceEventId = Lens.lens (\ModifyInstanceEventStartTime' {instanceEventId} -> instanceEventId) (\s@ModifyInstanceEventStartTime' {} a -> s {instanceEventId = a} :: ModifyInstanceEventStartTime)
+
+-- | The new date and time when the event will take place.
+modifyInstanceEventStartTime_notBefore :: Lens.Lens' ModifyInstanceEventStartTime Prelude.UTCTime
+modifyInstanceEventStartTime_notBefore = Lens.lens (\ModifyInstanceEventStartTime' {notBefore} -> notBefore) (\s@ModifyInstanceEventStartTime' {} a -> s {notBefore = a} :: ModifyInstanceEventStartTime) Prelude.. Data._Time
+
+instance Core.AWSRequest ModifyInstanceEventStartTime where
+  type
+    AWSResponse ModifyInstanceEventStartTime =
+      ModifyInstanceEventStartTimeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstanceEventStartTimeResponse'
+            Prelude.<$> (x Data..@? "event")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyInstanceEventStartTime
+  where
+  hashWithSalt _salt ModifyInstanceEventStartTime' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceEventId
+      `Prelude.hashWithSalt` notBefore
+
+instance Prelude.NFData ModifyInstanceEventStartTime where
+  rnf ModifyInstanceEventStartTime' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceEventId
+      `Prelude.seq` Prelude.rnf notBefore
+
+instance Data.ToHeaders ModifyInstanceEventStartTime where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyInstanceEventStartTime where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyInstanceEventStartTime where
+  toQuery ModifyInstanceEventStartTime' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyInstanceEventStartTime" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId,
+        "InstanceEventId" Data.=: instanceEventId,
+        "NotBefore" Data.=: notBefore
+      ]
+
+-- | /See:/ 'newModifyInstanceEventStartTimeResponse' smart constructor.
+data ModifyInstanceEventStartTimeResponse = ModifyInstanceEventStartTimeResponse'
+  { -- | Information about the event.
+    event :: Prelude.Maybe InstanceStatusEvent,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceEventStartTimeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'event', 'modifyInstanceEventStartTimeResponse_event' - Information about the event.
+--
+-- 'httpStatus', 'modifyInstanceEventStartTimeResponse_httpStatus' - The response's http status code.
+newModifyInstanceEventStartTimeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstanceEventStartTimeResponse
+newModifyInstanceEventStartTimeResponse pHttpStatus_ =
+  ModifyInstanceEventStartTimeResponse'
+    { event =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the event.
+modifyInstanceEventStartTimeResponse_event :: Lens.Lens' ModifyInstanceEventStartTimeResponse (Prelude.Maybe InstanceStatusEvent)
+modifyInstanceEventStartTimeResponse_event = Lens.lens (\ModifyInstanceEventStartTimeResponse' {event} -> event) (\s@ModifyInstanceEventStartTimeResponse' {} a -> s {event = a} :: ModifyInstanceEventStartTimeResponse)
+
+-- | The response's http status code.
+modifyInstanceEventStartTimeResponse_httpStatus :: Lens.Lens' ModifyInstanceEventStartTimeResponse Prelude.Int
+modifyInstanceEventStartTimeResponse_httpStatus = Lens.lens (\ModifyInstanceEventStartTimeResponse' {httpStatus} -> httpStatus) (\s@ModifyInstanceEventStartTimeResponse' {} a -> s {httpStatus = a} :: ModifyInstanceEventStartTimeResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstanceEventStartTimeResponse
+  where
+  rnf ModifyInstanceEventStartTimeResponse' {..} =
+    Prelude.rnf event
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyInstanceEventWindow.hs b/gen/Amazonka/EC2/ModifyInstanceEventWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceEventWindow.hs
@@ -0,0 +1,305 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceEventWindow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified event window.
+--
+-- You can define either a set of time ranges or a cron expression when
+-- modifying the event window, but not both.
+--
+-- To modify the targets associated with the event window, use the
+-- AssociateInstanceEventWindow and DisassociateInstanceEventWindow API.
+--
+-- If Amazon Web Services has already scheduled an event, modifying an
+-- event window won\'t change the time of the scheduled event.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/event-windows.html Define event windows for scheduled events>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.ModifyInstanceEventWindow
+  ( -- * Creating a Request
+    ModifyInstanceEventWindow (..),
+    newModifyInstanceEventWindow,
+
+    -- * Request Lenses
+    modifyInstanceEventWindow_cronExpression,
+    modifyInstanceEventWindow_dryRun,
+    modifyInstanceEventWindow_name,
+    modifyInstanceEventWindow_timeRanges,
+    modifyInstanceEventWindow_instanceEventWindowId,
+
+    -- * Destructuring the Response
+    ModifyInstanceEventWindowResponse (..),
+    newModifyInstanceEventWindowResponse,
+
+    -- * Response Lenses
+    modifyInstanceEventWindowResponse_instanceEventWindow,
+    modifyInstanceEventWindowResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceEventWindow' smart constructor.
+data ModifyInstanceEventWindow = ModifyInstanceEventWindow'
+  { -- | The cron expression of the event window, for example,
+    -- @* 0-4,20-23 * * 1,5@.
+    --
+    -- Constraints:
+    --
+    -- -   Only hour and day of the week values are supported.
+    --
+    -- -   For day of the week values, you can specify either integers @0@
+    --     through @6@, or alternative single values @SUN@ through @SAT@.
+    --
+    -- -   The minute, month, and year must be specified by @*@.
+    --
+    -- -   The hour value must be one or a multiple range, for example, @0-4@
+    --     or @0-4,20-23@.
+    --
+    -- -   Each hour range must be >= 2 hours, for example, @0-2@ or @20-23@.
+    --
+    -- -   The event window must be >= 4 hours. The combined total time ranges
+    --     in the event window must be >= 4 hours.
+    --
+    -- For more information about cron expressions, see
+    -- <https://en.wikipedia.org/wiki/Cron cron> on the /Wikipedia website/.
+    cronExpression :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the event window.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The time ranges of the event window.
+    timeRanges :: Prelude.Maybe [InstanceEventWindowTimeRangeRequest],
+    -- | The ID of the event window.
+    instanceEventWindowId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceEventWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cronExpression', 'modifyInstanceEventWindow_cronExpression' - The cron expression of the event window, for example,
+-- @* 0-4,20-23 * * 1,5@.
+--
+-- Constraints:
+--
+-- -   Only hour and day of the week values are supported.
+--
+-- -   For day of the week values, you can specify either integers @0@
+--     through @6@, or alternative single values @SUN@ through @SAT@.
+--
+-- -   The minute, month, and year must be specified by @*@.
+--
+-- -   The hour value must be one or a multiple range, for example, @0-4@
+--     or @0-4,20-23@.
+--
+-- -   Each hour range must be >= 2 hours, for example, @0-2@ or @20-23@.
+--
+-- -   The event window must be >= 4 hours. The combined total time ranges
+--     in the event window must be >= 4 hours.
+--
+-- For more information about cron expressions, see
+-- <https://en.wikipedia.org/wiki/Cron cron> on the /Wikipedia website/.
+--
+-- 'dryRun', 'modifyInstanceEventWindow_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'name', 'modifyInstanceEventWindow_name' - The name of the event window.
+--
+-- 'timeRanges', 'modifyInstanceEventWindow_timeRanges' - The time ranges of the event window.
+--
+-- 'instanceEventWindowId', 'modifyInstanceEventWindow_instanceEventWindowId' - The ID of the event window.
+newModifyInstanceEventWindow ::
+  -- | 'instanceEventWindowId'
+  Prelude.Text ->
+  ModifyInstanceEventWindow
+newModifyInstanceEventWindow pInstanceEventWindowId_ =
+  ModifyInstanceEventWindow'
+    { cronExpression =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      name = Prelude.Nothing,
+      timeRanges = Prelude.Nothing,
+      instanceEventWindowId = pInstanceEventWindowId_
+    }
+
+-- | The cron expression of the event window, for example,
+-- @* 0-4,20-23 * * 1,5@.
+--
+-- Constraints:
+--
+-- -   Only hour and day of the week values are supported.
+--
+-- -   For day of the week values, you can specify either integers @0@
+--     through @6@, or alternative single values @SUN@ through @SAT@.
+--
+-- -   The minute, month, and year must be specified by @*@.
+--
+-- -   The hour value must be one or a multiple range, for example, @0-4@
+--     or @0-4,20-23@.
+--
+-- -   Each hour range must be >= 2 hours, for example, @0-2@ or @20-23@.
+--
+-- -   The event window must be >= 4 hours. The combined total time ranges
+--     in the event window must be >= 4 hours.
+--
+-- For more information about cron expressions, see
+-- <https://en.wikipedia.org/wiki/Cron cron> on the /Wikipedia website/.
+modifyInstanceEventWindow_cronExpression :: Lens.Lens' ModifyInstanceEventWindow (Prelude.Maybe Prelude.Text)
+modifyInstanceEventWindow_cronExpression = Lens.lens (\ModifyInstanceEventWindow' {cronExpression} -> cronExpression) (\s@ModifyInstanceEventWindow' {} a -> s {cronExpression = a} :: ModifyInstanceEventWindow)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceEventWindow_dryRun :: Lens.Lens' ModifyInstanceEventWindow (Prelude.Maybe Prelude.Bool)
+modifyInstanceEventWindow_dryRun = Lens.lens (\ModifyInstanceEventWindow' {dryRun} -> dryRun) (\s@ModifyInstanceEventWindow' {} a -> s {dryRun = a} :: ModifyInstanceEventWindow)
+
+-- | The name of the event window.
+modifyInstanceEventWindow_name :: Lens.Lens' ModifyInstanceEventWindow (Prelude.Maybe Prelude.Text)
+modifyInstanceEventWindow_name = Lens.lens (\ModifyInstanceEventWindow' {name} -> name) (\s@ModifyInstanceEventWindow' {} a -> s {name = a} :: ModifyInstanceEventWindow)
+
+-- | The time ranges of the event window.
+modifyInstanceEventWindow_timeRanges :: Lens.Lens' ModifyInstanceEventWindow (Prelude.Maybe [InstanceEventWindowTimeRangeRequest])
+modifyInstanceEventWindow_timeRanges = Lens.lens (\ModifyInstanceEventWindow' {timeRanges} -> timeRanges) (\s@ModifyInstanceEventWindow' {} a -> s {timeRanges = a} :: ModifyInstanceEventWindow) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the event window.
+modifyInstanceEventWindow_instanceEventWindowId :: Lens.Lens' ModifyInstanceEventWindow Prelude.Text
+modifyInstanceEventWindow_instanceEventWindowId = Lens.lens (\ModifyInstanceEventWindow' {instanceEventWindowId} -> instanceEventWindowId) (\s@ModifyInstanceEventWindow' {} a -> s {instanceEventWindowId = a} :: ModifyInstanceEventWindow)
+
+instance Core.AWSRequest ModifyInstanceEventWindow where
+  type
+    AWSResponse ModifyInstanceEventWindow =
+      ModifyInstanceEventWindowResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstanceEventWindowResponse'
+            Prelude.<$> (x Data..@? "instanceEventWindow")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyInstanceEventWindow where
+  hashWithSalt _salt ModifyInstanceEventWindow' {..} =
+    _salt
+      `Prelude.hashWithSalt` cronExpression
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` timeRanges
+      `Prelude.hashWithSalt` instanceEventWindowId
+
+instance Prelude.NFData ModifyInstanceEventWindow where
+  rnf ModifyInstanceEventWindow' {..} =
+    Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf timeRanges
+      `Prelude.seq` Prelude.rnf instanceEventWindowId
+
+instance Data.ToHeaders ModifyInstanceEventWindow where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyInstanceEventWindow where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyInstanceEventWindow where
+  toQuery ModifyInstanceEventWindow' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyInstanceEventWindow" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CronExpression" Data.=: cronExpression,
+        "DryRun" Data.=: dryRun,
+        "Name" Data.=: name,
+        Data.toQuery
+          ( Data.toQueryList "TimeRange"
+              Prelude.<$> timeRanges
+          ),
+        "InstanceEventWindowId"
+          Data.=: instanceEventWindowId
+      ]
+
+-- | /See:/ 'newModifyInstanceEventWindowResponse' smart constructor.
+data ModifyInstanceEventWindowResponse = ModifyInstanceEventWindowResponse'
+  { -- | Information about the event window.
+    instanceEventWindow :: Prelude.Maybe InstanceEventWindow,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceEventWindowResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindow', 'modifyInstanceEventWindowResponse_instanceEventWindow' - Information about the event window.
+--
+-- 'httpStatus', 'modifyInstanceEventWindowResponse_httpStatus' - The response's http status code.
+newModifyInstanceEventWindowResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstanceEventWindowResponse
+newModifyInstanceEventWindowResponse pHttpStatus_ =
+  ModifyInstanceEventWindowResponse'
+    { instanceEventWindow =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the event window.
+modifyInstanceEventWindowResponse_instanceEventWindow :: Lens.Lens' ModifyInstanceEventWindowResponse (Prelude.Maybe InstanceEventWindow)
+modifyInstanceEventWindowResponse_instanceEventWindow = Lens.lens (\ModifyInstanceEventWindowResponse' {instanceEventWindow} -> instanceEventWindow) (\s@ModifyInstanceEventWindowResponse' {} a -> s {instanceEventWindow = a} :: ModifyInstanceEventWindowResponse)
+
+-- | The response's http status code.
+modifyInstanceEventWindowResponse_httpStatus :: Lens.Lens' ModifyInstanceEventWindowResponse Prelude.Int
+modifyInstanceEventWindowResponse_httpStatus = Lens.lens (\ModifyInstanceEventWindowResponse' {httpStatus} -> httpStatus) (\s@ModifyInstanceEventWindowResponse' {} a -> s {httpStatus = a} :: ModifyInstanceEventWindowResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstanceEventWindowResponse
+  where
+  rnf ModifyInstanceEventWindowResponse' {..} =
+    Prelude.rnf instanceEventWindow
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyInstanceMaintenanceOptions.hs b/gen/Amazonka/EC2/ModifyInstanceMaintenanceOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceMaintenanceOptions.hs
@@ -0,0 +1,241 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceMaintenanceOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the recovery behavior of your instance to disable simplified
+-- automatic recovery or set the recovery behavior to default. The default
+-- configuration will not enable simplified automatic recovery for an
+-- unsupported instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+module Amazonka.EC2.ModifyInstanceMaintenanceOptions
+  ( -- * Creating a Request
+    ModifyInstanceMaintenanceOptions (..),
+    newModifyInstanceMaintenanceOptions,
+
+    -- * Request Lenses
+    modifyInstanceMaintenanceOptions_autoRecovery,
+    modifyInstanceMaintenanceOptions_dryRun,
+    modifyInstanceMaintenanceOptions_instanceId,
+
+    -- * Destructuring the Response
+    ModifyInstanceMaintenanceOptionsResponse (..),
+    newModifyInstanceMaintenanceOptionsResponse,
+
+    -- * Response Lenses
+    modifyInstanceMaintenanceOptionsResponse_autoRecovery,
+    modifyInstanceMaintenanceOptionsResponse_instanceId,
+    modifyInstanceMaintenanceOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceMaintenanceOptions' smart constructor.
+data ModifyInstanceMaintenanceOptions = ModifyInstanceMaintenanceOptions'
+  { -- | Disables the automatic recovery behavior of your instance or sets it to
+    -- default.
+    autoRecovery :: Prelude.Maybe InstanceAutoRecoveryState,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceMaintenanceOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecovery', 'modifyInstanceMaintenanceOptions_autoRecovery' - Disables the automatic recovery behavior of your instance or sets it to
+-- default.
+--
+-- 'dryRun', 'modifyInstanceMaintenanceOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'modifyInstanceMaintenanceOptions_instanceId' - The ID of the instance.
+newModifyInstanceMaintenanceOptions ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  ModifyInstanceMaintenanceOptions
+newModifyInstanceMaintenanceOptions pInstanceId_ =
+  ModifyInstanceMaintenanceOptions'
+    { autoRecovery =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Disables the automatic recovery behavior of your instance or sets it to
+-- default.
+modifyInstanceMaintenanceOptions_autoRecovery :: Lens.Lens' ModifyInstanceMaintenanceOptions (Prelude.Maybe InstanceAutoRecoveryState)
+modifyInstanceMaintenanceOptions_autoRecovery = Lens.lens (\ModifyInstanceMaintenanceOptions' {autoRecovery} -> autoRecovery) (\s@ModifyInstanceMaintenanceOptions' {} a -> s {autoRecovery = a} :: ModifyInstanceMaintenanceOptions)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceMaintenanceOptions_dryRun :: Lens.Lens' ModifyInstanceMaintenanceOptions (Prelude.Maybe Prelude.Bool)
+modifyInstanceMaintenanceOptions_dryRun = Lens.lens (\ModifyInstanceMaintenanceOptions' {dryRun} -> dryRun) (\s@ModifyInstanceMaintenanceOptions' {} a -> s {dryRun = a} :: ModifyInstanceMaintenanceOptions)
+
+-- | The ID of the instance.
+modifyInstanceMaintenanceOptions_instanceId :: Lens.Lens' ModifyInstanceMaintenanceOptions Prelude.Text
+modifyInstanceMaintenanceOptions_instanceId = Lens.lens (\ModifyInstanceMaintenanceOptions' {instanceId} -> instanceId) (\s@ModifyInstanceMaintenanceOptions' {} a -> s {instanceId = a} :: ModifyInstanceMaintenanceOptions)
+
+instance
+  Core.AWSRequest
+    ModifyInstanceMaintenanceOptions
+  where
+  type
+    AWSResponse ModifyInstanceMaintenanceOptions =
+      ModifyInstanceMaintenanceOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstanceMaintenanceOptionsResponse'
+            Prelude.<$> (x Data..@? "autoRecovery")
+            Prelude.<*> (x Data..@? "instanceId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyInstanceMaintenanceOptions
+  where
+  hashWithSalt
+    _salt
+    ModifyInstanceMaintenanceOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` autoRecovery
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceId
+
+instance
+  Prelude.NFData
+    ModifyInstanceMaintenanceOptions
+  where
+  rnf ModifyInstanceMaintenanceOptions' {..} =
+    Prelude.rnf autoRecovery
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance
+  Data.ToHeaders
+    ModifyInstanceMaintenanceOptions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyInstanceMaintenanceOptions where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyInstanceMaintenanceOptions
+  where
+  toQuery ModifyInstanceMaintenanceOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyInstanceMaintenanceOptions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AutoRecovery" Data.=: autoRecovery,
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newModifyInstanceMaintenanceOptionsResponse' smart constructor.
+data ModifyInstanceMaintenanceOptionsResponse = ModifyInstanceMaintenanceOptionsResponse'
+  { -- | Provides information on the current automatic recovery behavior of your
+    -- instance.
+    autoRecovery :: Prelude.Maybe InstanceAutoRecoveryState,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceMaintenanceOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecovery', 'modifyInstanceMaintenanceOptionsResponse_autoRecovery' - Provides information on the current automatic recovery behavior of your
+-- instance.
+--
+-- 'instanceId', 'modifyInstanceMaintenanceOptionsResponse_instanceId' - The ID of the instance.
+--
+-- 'httpStatus', 'modifyInstanceMaintenanceOptionsResponse_httpStatus' - The response's http status code.
+newModifyInstanceMaintenanceOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstanceMaintenanceOptionsResponse
+newModifyInstanceMaintenanceOptionsResponse
+  pHttpStatus_ =
+    ModifyInstanceMaintenanceOptionsResponse'
+      { autoRecovery =
+          Prelude.Nothing,
+        instanceId = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Provides information on the current automatic recovery behavior of your
+-- instance.
+modifyInstanceMaintenanceOptionsResponse_autoRecovery :: Lens.Lens' ModifyInstanceMaintenanceOptionsResponse (Prelude.Maybe InstanceAutoRecoveryState)
+modifyInstanceMaintenanceOptionsResponse_autoRecovery = Lens.lens (\ModifyInstanceMaintenanceOptionsResponse' {autoRecovery} -> autoRecovery) (\s@ModifyInstanceMaintenanceOptionsResponse' {} a -> s {autoRecovery = a} :: ModifyInstanceMaintenanceOptionsResponse)
+
+-- | The ID of the instance.
+modifyInstanceMaintenanceOptionsResponse_instanceId :: Lens.Lens' ModifyInstanceMaintenanceOptionsResponse (Prelude.Maybe Prelude.Text)
+modifyInstanceMaintenanceOptionsResponse_instanceId = Lens.lens (\ModifyInstanceMaintenanceOptionsResponse' {instanceId} -> instanceId) (\s@ModifyInstanceMaintenanceOptionsResponse' {} a -> s {instanceId = a} :: ModifyInstanceMaintenanceOptionsResponse)
+
+-- | The response's http status code.
+modifyInstanceMaintenanceOptionsResponse_httpStatus :: Lens.Lens' ModifyInstanceMaintenanceOptionsResponse Prelude.Int
+modifyInstanceMaintenanceOptionsResponse_httpStatus = Lens.lens (\ModifyInstanceMaintenanceOptionsResponse' {httpStatus} -> httpStatus) (\s@ModifyInstanceMaintenanceOptionsResponse' {} a -> s {httpStatus = a} :: ModifyInstanceMaintenanceOptionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstanceMaintenanceOptionsResponse
+  where
+  rnf ModifyInstanceMaintenanceOptionsResponse' {..} =
+    Prelude.rnf autoRecovery
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyInstanceMetadataOptions.hs b/gen/Amazonka/EC2/ModifyInstanceMetadataOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstanceMetadataOptions.hs
@@ -0,0 +1,365 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstanceMetadataOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify the instance metadata parameters on a running or stopped
+-- instance. When you modify the parameters on a stopped instance, they are
+-- applied when the instance is started. When you modify the parameters on
+-- a running instance, the API responds with a state of “pending”. After
+-- the parameter modifications are successfully applied to the instance,
+-- the state of the modifications changes from “pending” to “applied” in
+-- subsequent describe-instances API calls. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.ModifyInstanceMetadataOptions
+  ( -- * Creating a Request
+    ModifyInstanceMetadataOptions (..),
+    newModifyInstanceMetadataOptions,
+
+    -- * Request Lenses
+    modifyInstanceMetadataOptions_dryRun,
+    modifyInstanceMetadataOptions_httpEndpoint,
+    modifyInstanceMetadataOptions_httpProtocolIpv6,
+    modifyInstanceMetadataOptions_httpPutResponseHopLimit,
+    modifyInstanceMetadataOptions_httpTokens,
+    modifyInstanceMetadataOptions_instanceMetadataTags,
+    modifyInstanceMetadataOptions_instanceId,
+
+    -- * Destructuring the Response
+    ModifyInstanceMetadataOptionsResponse (..),
+    newModifyInstanceMetadataOptionsResponse,
+
+    -- * Response Lenses
+    modifyInstanceMetadataOptionsResponse_instanceId,
+    modifyInstanceMetadataOptionsResponse_instanceMetadataOptions,
+    modifyInstanceMetadataOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstanceMetadataOptions' smart constructor.
+data ModifyInstanceMetadataOptions = ModifyInstanceMetadataOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Enables or disables the HTTP metadata endpoint on your instances. If
+    -- this parameter is not specified, the existing state is maintained.
+    --
+    -- If you specify a value of @disabled@, you cannot access your instance
+    -- metadata.
+    httpEndpoint :: Prelude.Maybe InstanceMetadataEndpointState,
+    -- | Enables or disables the IPv6 endpoint for the instance metadata service.
+    -- This setting applies only if you have enabled the HTTP metadata
+    -- endpoint.
+    httpProtocolIpv6 :: Prelude.Maybe InstanceMetadataProtocolState,
+    -- | The desired HTTP PUT response hop limit for instance metadata requests.
+    -- The larger the number, the further instance metadata requests can
+    -- travel. If no parameter is specified, the existing state is maintained.
+    --
+    -- Possible values: Integers from 1 to 64
+    httpPutResponseHopLimit :: Prelude.Maybe Prelude.Int,
+    -- | The state of token usage for your instance metadata requests. If the
+    -- parameter is not specified in the request, the default state is
+    -- @optional@.
+    --
+    -- If the state is @optional@, you can choose to retrieve instance metadata
+    -- with or without a session token on your request. If you retrieve the IAM
+    -- role credentials without a token, the version 1.0 role credentials are
+    -- returned. If you retrieve the IAM role credentials using a valid session
+    -- token, the version 2.0 role credentials are returned.
+    --
+    -- If the state is @required@, you must send a session token with any
+    -- instance metadata retrieval requests. In this state, retrieving the IAM
+    -- role credentials always returns the version 2.0 credentials; the version
+    -- 1.0 credentials are not available.
+    httpTokens :: Prelude.Maybe HttpTokensState,
+    -- | Set to @enabled@ to allow access to instance tags from the instance
+    -- metadata. Set to @disabled@ to turn off access to instance tags from the
+    -- instance metadata. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+    --
+    -- Default: @disabled@
+    instanceMetadataTags :: Prelude.Maybe InstanceMetadataTagsState,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceMetadataOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyInstanceMetadataOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'httpEndpoint', 'modifyInstanceMetadataOptions_httpEndpoint' - Enables or disables the HTTP metadata endpoint on your instances. If
+-- this parameter is not specified, the existing state is maintained.
+--
+-- If you specify a value of @disabled@, you cannot access your instance
+-- metadata.
+--
+-- 'httpProtocolIpv6', 'modifyInstanceMetadataOptions_httpProtocolIpv6' - Enables or disables the IPv6 endpoint for the instance metadata service.
+-- This setting applies only if you have enabled the HTTP metadata
+-- endpoint.
+--
+-- 'httpPutResponseHopLimit', 'modifyInstanceMetadataOptions_httpPutResponseHopLimit' - The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel. If no parameter is specified, the existing state is maintained.
+--
+-- Possible values: Integers from 1 to 64
+--
+-- 'httpTokens', 'modifyInstanceMetadataOptions_httpTokens' - The state of token usage for your instance metadata requests. If the
+-- parameter is not specified in the request, the default state is
+-- @optional@.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a session token on your request. If you retrieve the IAM
+-- role credentials without a token, the version 1.0 role credentials are
+-- returned. If you retrieve the IAM role credentials using a valid session
+-- token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a session token with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- 'instanceMetadataTags', 'modifyInstanceMetadataOptions_instanceMetadataTags' - Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+--
+-- 'instanceId', 'modifyInstanceMetadataOptions_instanceId' - The ID of the instance.
+newModifyInstanceMetadataOptions ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  ModifyInstanceMetadataOptions
+newModifyInstanceMetadataOptions pInstanceId_ =
+  ModifyInstanceMetadataOptions'
+    { dryRun =
+        Prelude.Nothing,
+      httpEndpoint = Prelude.Nothing,
+      httpProtocolIpv6 = Prelude.Nothing,
+      httpPutResponseHopLimit = Prelude.Nothing,
+      httpTokens = Prelude.Nothing,
+      instanceMetadataTags = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyInstanceMetadataOptions_dryRun :: Lens.Lens' ModifyInstanceMetadataOptions (Prelude.Maybe Prelude.Bool)
+modifyInstanceMetadataOptions_dryRun = Lens.lens (\ModifyInstanceMetadataOptions' {dryRun} -> dryRun) (\s@ModifyInstanceMetadataOptions' {} a -> s {dryRun = a} :: ModifyInstanceMetadataOptions)
+
+-- | Enables or disables the HTTP metadata endpoint on your instances. If
+-- this parameter is not specified, the existing state is maintained.
+--
+-- If you specify a value of @disabled@, you cannot access your instance
+-- metadata.
+modifyInstanceMetadataOptions_httpEndpoint :: Lens.Lens' ModifyInstanceMetadataOptions (Prelude.Maybe InstanceMetadataEndpointState)
+modifyInstanceMetadataOptions_httpEndpoint = Lens.lens (\ModifyInstanceMetadataOptions' {httpEndpoint} -> httpEndpoint) (\s@ModifyInstanceMetadataOptions' {} a -> s {httpEndpoint = a} :: ModifyInstanceMetadataOptions)
+
+-- | Enables or disables the IPv6 endpoint for the instance metadata service.
+-- This setting applies only if you have enabled the HTTP metadata
+-- endpoint.
+modifyInstanceMetadataOptions_httpProtocolIpv6 :: Lens.Lens' ModifyInstanceMetadataOptions (Prelude.Maybe InstanceMetadataProtocolState)
+modifyInstanceMetadataOptions_httpProtocolIpv6 = Lens.lens (\ModifyInstanceMetadataOptions' {httpProtocolIpv6} -> httpProtocolIpv6) (\s@ModifyInstanceMetadataOptions' {} a -> s {httpProtocolIpv6 = a} :: ModifyInstanceMetadataOptions)
+
+-- | The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel. If no parameter is specified, the existing state is maintained.
+--
+-- Possible values: Integers from 1 to 64
+modifyInstanceMetadataOptions_httpPutResponseHopLimit :: Lens.Lens' ModifyInstanceMetadataOptions (Prelude.Maybe Prelude.Int)
+modifyInstanceMetadataOptions_httpPutResponseHopLimit = Lens.lens (\ModifyInstanceMetadataOptions' {httpPutResponseHopLimit} -> httpPutResponseHopLimit) (\s@ModifyInstanceMetadataOptions' {} a -> s {httpPutResponseHopLimit = a} :: ModifyInstanceMetadataOptions)
+
+-- | The state of token usage for your instance metadata requests. If the
+-- parameter is not specified in the request, the default state is
+-- @optional@.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a session token on your request. If you retrieve the IAM
+-- role credentials without a token, the version 1.0 role credentials are
+-- returned. If you retrieve the IAM role credentials using a valid session
+-- token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a session token with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+modifyInstanceMetadataOptions_httpTokens :: Lens.Lens' ModifyInstanceMetadataOptions (Prelude.Maybe HttpTokensState)
+modifyInstanceMetadataOptions_httpTokens = Lens.lens (\ModifyInstanceMetadataOptions' {httpTokens} -> httpTokens) (\s@ModifyInstanceMetadataOptions' {} a -> s {httpTokens = a} :: ModifyInstanceMetadataOptions)
+
+-- | Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+modifyInstanceMetadataOptions_instanceMetadataTags :: Lens.Lens' ModifyInstanceMetadataOptions (Prelude.Maybe InstanceMetadataTagsState)
+modifyInstanceMetadataOptions_instanceMetadataTags = Lens.lens (\ModifyInstanceMetadataOptions' {instanceMetadataTags} -> instanceMetadataTags) (\s@ModifyInstanceMetadataOptions' {} a -> s {instanceMetadataTags = a} :: ModifyInstanceMetadataOptions)
+
+-- | The ID of the instance.
+modifyInstanceMetadataOptions_instanceId :: Lens.Lens' ModifyInstanceMetadataOptions Prelude.Text
+modifyInstanceMetadataOptions_instanceId = Lens.lens (\ModifyInstanceMetadataOptions' {instanceId} -> instanceId) (\s@ModifyInstanceMetadataOptions' {} a -> s {instanceId = a} :: ModifyInstanceMetadataOptions)
+
+instance
+  Core.AWSRequest
+    ModifyInstanceMetadataOptions
+  where
+  type
+    AWSResponse ModifyInstanceMetadataOptions =
+      ModifyInstanceMetadataOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstanceMetadataOptionsResponse'
+            Prelude.<$> (x Data..@? "instanceId")
+            Prelude.<*> (x Data..@? "instanceMetadataOptions")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyInstanceMetadataOptions
+  where
+  hashWithSalt _salt ModifyInstanceMetadataOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` httpEndpoint
+      `Prelude.hashWithSalt` httpProtocolIpv6
+      `Prelude.hashWithSalt` httpPutResponseHopLimit
+      `Prelude.hashWithSalt` httpTokens
+      `Prelude.hashWithSalt` instanceMetadataTags
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData ModifyInstanceMetadataOptions where
+  rnf ModifyInstanceMetadataOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf httpEndpoint
+      `Prelude.seq` Prelude.rnf httpProtocolIpv6
+      `Prelude.seq` Prelude.rnf httpPutResponseHopLimit
+      `Prelude.seq` Prelude.rnf httpTokens
+      `Prelude.seq` Prelude.rnf instanceMetadataTags
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders ModifyInstanceMetadataOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyInstanceMetadataOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyInstanceMetadataOptions where
+  toQuery ModifyInstanceMetadataOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyInstanceMetadataOptions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "HttpEndpoint" Data.=: httpEndpoint,
+        "HttpProtocolIpv6" Data.=: httpProtocolIpv6,
+        "HttpPutResponseHopLimit"
+          Data.=: httpPutResponseHopLimit,
+        "HttpTokens" Data.=: httpTokens,
+        "InstanceMetadataTags" Data.=: instanceMetadataTags,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newModifyInstanceMetadataOptionsResponse' smart constructor.
+data ModifyInstanceMetadataOptionsResponse = ModifyInstanceMetadataOptionsResponse'
+  { -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The metadata options for the instance.
+    instanceMetadataOptions :: Prelude.Maybe InstanceMetadataOptionsResponse,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstanceMetadataOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'modifyInstanceMetadataOptionsResponse_instanceId' - The ID of the instance.
+--
+-- 'instanceMetadataOptions', 'modifyInstanceMetadataOptionsResponse_instanceMetadataOptions' - The metadata options for the instance.
+--
+-- 'httpStatus', 'modifyInstanceMetadataOptionsResponse_httpStatus' - The response's http status code.
+newModifyInstanceMetadataOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstanceMetadataOptionsResponse
+newModifyInstanceMetadataOptionsResponse pHttpStatus_ =
+  ModifyInstanceMetadataOptionsResponse'
+    { instanceId =
+        Prelude.Nothing,
+      instanceMetadataOptions =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the instance.
+modifyInstanceMetadataOptionsResponse_instanceId :: Lens.Lens' ModifyInstanceMetadataOptionsResponse (Prelude.Maybe Prelude.Text)
+modifyInstanceMetadataOptionsResponse_instanceId = Lens.lens (\ModifyInstanceMetadataOptionsResponse' {instanceId} -> instanceId) (\s@ModifyInstanceMetadataOptionsResponse' {} a -> s {instanceId = a} :: ModifyInstanceMetadataOptionsResponse)
+
+-- | The metadata options for the instance.
+modifyInstanceMetadataOptionsResponse_instanceMetadataOptions :: Lens.Lens' ModifyInstanceMetadataOptionsResponse (Prelude.Maybe InstanceMetadataOptionsResponse)
+modifyInstanceMetadataOptionsResponse_instanceMetadataOptions = Lens.lens (\ModifyInstanceMetadataOptionsResponse' {instanceMetadataOptions} -> instanceMetadataOptions) (\s@ModifyInstanceMetadataOptionsResponse' {} a -> s {instanceMetadataOptions = a} :: ModifyInstanceMetadataOptionsResponse)
+
+-- | The response's http status code.
+modifyInstanceMetadataOptionsResponse_httpStatus :: Lens.Lens' ModifyInstanceMetadataOptionsResponse Prelude.Int
+modifyInstanceMetadataOptionsResponse_httpStatus = Lens.lens (\ModifyInstanceMetadataOptionsResponse' {httpStatus} -> httpStatus) (\s@ModifyInstanceMetadataOptionsResponse' {} a -> s {httpStatus = a} :: ModifyInstanceMetadataOptionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstanceMetadataOptionsResponse
+  where
+  rnf ModifyInstanceMetadataOptionsResponse' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceMetadataOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyInstancePlacement.hs b/gen/Amazonka/EC2/ModifyInstancePlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyInstancePlacement.hs
@@ -0,0 +1,314 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyInstancePlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the placement attributes for a specified instance. You can do
+-- the following:
+--
+-- -   Modify the affinity between an instance and a
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html Dedicated Host>.
+--     When affinity is set to @host@ and the instance is not associated
+--     with a specific Dedicated Host, the next time the instance is
+--     launched, it is automatically associated with the host on which it
+--     lands. If the instance is restarted or rebooted, this relationship
+--     persists.
+--
+-- -   Change the Dedicated Host with which an instance is associated.
+--
+-- -   Change the instance tenancy of an instance.
+--
+-- -   Move an instance to or from a
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html placement group>.
+--
+-- At least one attribute for affinity, host ID, tenancy, or placement
+-- group name must be specified in the request. Affinity and tenancy can be
+-- modified in the same request.
+--
+-- To modify the host ID, tenancy, placement group, or partition for an
+-- instance, the instance must be in the @stopped@ state.
+module Amazonka.EC2.ModifyInstancePlacement
+  ( -- * Creating a Request
+    ModifyInstancePlacement (..),
+    newModifyInstancePlacement,
+
+    -- * Request Lenses
+    modifyInstancePlacement_affinity,
+    modifyInstancePlacement_groupId,
+    modifyInstancePlacement_groupName,
+    modifyInstancePlacement_hostId,
+    modifyInstancePlacement_hostResourceGroupArn,
+    modifyInstancePlacement_partitionNumber,
+    modifyInstancePlacement_tenancy,
+    modifyInstancePlacement_instanceId,
+
+    -- * Destructuring the Response
+    ModifyInstancePlacementResponse (..),
+    newModifyInstancePlacementResponse,
+
+    -- * Response Lenses
+    modifyInstancePlacementResponse_return,
+    modifyInstancePlacementResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyInstancePlacement' smart constructor.
+data ModifyInstancePlacement = ModifyInstancePlacement'
+  { -- | The affinity setting for the instance.
+    affinity :: Prelude.Maybe Affinity,
+    -- | The Group Id of a placement group. You must specify the Placement Group
+    -- __Group Id__ to launch an instance in a shared placement group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group in which to place the instance. For
+    -- spread placement groups, the instance must have a tenancy of @default@.
+    -- For cluster and partition placement groups, the instance must have a
+    -- tenancy of @default@ or @dedicated@.
+    --
+    -- To remove an instance from a placement group, specify an empty string
+    -- (\"\").
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Dedicated Host with which to associate the instance.
+    hostId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the host resource group in which to place the instance.
+    hostResourceGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The number of the partition in which to place the instance. Valid only
+    -- if the placement group strategy is set to @partition@.
+    partitionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The tenancy for the instance.
+    --
+    -- For T3 instances, you can\'t change the tenancy from @dedicated@ to
+    -- @host@, or from @host@ to @dedicated@. Attempting to make one of these
+    -- unsupported tenancy changes results in the @InvalidTenancy@ error code.
+    tenancy :: Prelude.Maybe HostTenancy,
+    -- | The ID of the instance that you are modifying.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstancePlacement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'affinity', 'modifyInstancePlacement_affinity' - The affinity setting for the instance.
+--
+-- 'groupId', 'modifyInstancePlacement_groupId' - The Group Id of a placement group. You must specify the Placement Group
+-- __Group Id__ to launch an instance in a shared placement group.
+--
+-- 'groupName', 'modifyInstancePlacement_groupName' - The name of the placement group in which to place the instance. For
+-- spread placement groups, the instance must have a tenancy of @default@.
+-- For cluster and partition placement groups, the instance must have a
+-- tenancy of @default@ or @dedicated@.
+--
+-- To remove an instance from a placement group, specify an empty string
+-- (\"\").
+--
+-- 'hostId', 'modifyInstancePlacement_hostId' - The ID of the Dedicated Host with which to associate the instance.
+--
+-- 'hostResourceGroupArn', 'modifyInstancePlacement_hostResourceGroupArn' - The ARN of the host resource group in which to place the instance.
+--
+-- 'partitionNumber', 'modifyInstancePlacement_partitionNumber' - The number of the partition in which to place the instance. Valid only
+-- if the placement group strategy is set to @partition@.
+--
+-- 'tenancy', 'modifyInstancePlacement_tenancy' - The tenancy for the instance.
+--
+-- For T3 instances, you can\'t change the tenancy from @dedicated@ to
+-- @host@, or from @host@ to @dedicated@. Attempting to make one of these
+-- unsupported tenancy changes results in the @InvalidTenancy@ error code.
+--
+-- 'instanceId', 'modifyInstancePlacement_instanceId' - The ID of the instance that you are modifying.
+newModifyInstancePlacement ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  ModifyInstancePlacement
+newModifyInstancePlacement pInstanceId_ =
+  ModifyInstancePlacement'
+    { affinity =
+        Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      hostId = Prelude.Nothing,
+      hostResourceGroupArn = Prelude.Nothing,
+      partitionNumber = Prelude.Nothing,
+      tenancy = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | The affinity setting for the instance.
+modifyInstancePlacement_affinity :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe Affinity)
+modifyInstancePlacement_affinity = Lens.lens (\ModifyInstancePlacement' {affinity} -> affinity) (\s@ModifyInstancePlacement' {} a -> s {affinity = a} :: ModifyInstancePlacement)
+
+-- | The Group Id of a placement group. You must specify the Placement Group
+-- __Group Id__ to launch an instance in a shared placement group.
+modifyInstancePlacement_groupId :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe Prelude.Text)
+modifyInstancePlacement_groupId = Lens.lens (\ModifyInstancePlacement' {groupId} -> groupId) (\s@ModifyInstancePlacement' {} a -> s {groupId = a} :: ModifyInstancePlacement)
+
+-- | The name of the placement group in which to place the instance. For
+-- spread placement groups, the instance must have a tenancy of @default@.
+-- For cluster and partition placement groups, the instance must have a
+-- tenancy of @default@ or @dedicated@.
+--
+-- To remove an instance from a placement group, specify an empty string
+-- (\"\").
+modifyInstancePlacement_groupName :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe Prelude.Text)
+modifyInstancePlacement_groupName = Lens.lens (\ModifyInstancePlacement' {groupName} -> groupName) (\s@ModifyInstancePlacement' {} a -> s {groupName = a} :: ModifyInstancePlacement)
+
+-- | The ID of the Dedicated Host with which to associate the instance.
+modifyInstancePlacement_hostId :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe Prelude.Text)
+modifyInstancePlacement_hostId = Lens.lens (\ModifyInstancePlacement' {hostId} -> hostId) (\s@ModifyInstancePlacement' {} a -> s {hostId = a} :: ModifyInstancePlacement)
+
+-- | The ARN of the host resource group in which to place the instance.
+modifyInstancePlacement_hostResourceGroupArn :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe Prelude.Text)
+modifyInstancePlacement_hostResourceGroupArn = Lens.lens (\ModifyInstancePlacement' {hostResourceGroupArn} -> hostResourceGroupArn) (\s@ModifyInstancePlacement' {} a -> s {hostResourceGroupArn = a} :: ModifyInstancePlacement)
+
+-- | The number of the partition in which to place the instance. Valid only
+-- if the placement group strategy is set to @partition@.
+modifyInstancePlacement_partitionNumber :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe Prelude.Int)
+modifyInstancePlacement_partitionNumber = Lens.lens (\ModifyInstancePlacement' {partitionNumber} -> partitionNumber) (\s@ModifyInstancePlacement' {} a -> s {partitionNumber = a} :: ModifyInstancePlacement)
+
+-- | The tenancy for the instance.
+--
+-- For T3 instances, you can\'t change the tenancy from @dedicated@ to
+-- @host@, or from @host@ to @dedicated@. Attempting to make one of these
+-- unsupported tenancy changes results in the @InvalidTenancy@ error code.
+modifyInstancePlacement_tenancy :: Lens.Lens' ModifyInstancePlacement (Prelude.Maybe HostTenancy)
+modifyInstancePlacement_tenancy = Lens.lens (\ModifyInstancePlacement' {tenancy} -> tenancy) (\s@ModifyInstancePlacement' {} a -> s {tenancy = a} :: ModifyInstancePlacement)
+
+-- | The ID of the instance that you are modifying.
+modifyInstancePlacement_instanceId :: Lens.Lens' ModifyInstancePlacement Prelude.Text
+modifyInstancePlacement_instanceId = Lens.lens (\ModifyInstancePlacement' {instanceId} -> instanceId) (\s@ModifyInstancePlacement' {} a -> s {instanceId = a} :: ModifyInstancePlacement)
+
+instance Core.AWSRequest ModifyInstancePlacement where
+  type
+    AWSResponse ModifyInstancePlacement =
+      ModifyInstancePlacementResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyInstancePlacementResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyInstancePlacement where
+  hashWithSalt _salt ModifyInstancePlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` affinity
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` hostId
+      `Prelude.hashWithSalt` hostResourceGroupArn
+      `Prelude.hashWithSalt` partitionNumber
+      `Prelude.hashWithSalt` tenancy
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData ModifyInstancePlacement where
+  rnf ModifyInstancePlacement' {..} =
+    Prelude.rnf affinity
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf hostId
+      `Prelude.seq` Prelude.rnf hostResourceGroupArn
+      `Prelude.seq` Prelude.rnf partitionNumber
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders ModifyInstancePlacement where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyInstancePlacement where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyInstancePlacement where
+  toQuery ModifyInstancePlacement' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyInstancePlacement" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Affinity" Data.=: affinity,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName,
+        "HostId" Data.=: hostId,
+        "HostResourceGroupArn" Data.=: hostResourceGroupArn,
+        "PartitionNumber" Data.=: partitionNumber,
+        "Tenancy" Data.=: tenancy,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newModifyInstancePlacementResponse' smart constructor.
+data ModifyInstancePlacementResponse = ModifyInstancePlacementResponse'
+  { -- | Is @true@ if the request succeeds, and an error otherwise.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyInstancePlacementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyInstancePlacementResponse_return' - Is @true@ if the request succeeds, and an error otherwise.
+--
+-- 'httpStatus', 'modifyInstancePlacementResponse_httpStatus' - The response's http status code.
+newModifyInstancePlacementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyInstancePlacementResponse
+newModifyInstancePlacementResponse pHttpStatus_ =
+  ModifyInstancePlacementResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Is @true@ if the request succeeds, and an error otherwise.
+modifyInstancePlacementResponse_return :: Lens.Lens' ModifyInstancePlacementResponse (Prelude.Maybe Prelude.Bool)
+modifyInstancePlacementResponse_return = Lens.lens (\ModifyInstancePlacementResponse' {return'} -> return') (\s@ModifyInstancePlacementResponse' {} a -> s {return' = a} :: ModifyInstancePlacementResponse)
+
+-- | The response's http status code.
+modifyInstancePlacementResponse_httpStatus :: Lens.Lens' ModifyInstancePlacementResponse Prelude.Int
+modifyInstancePlacementResponse_httpStatus = Lens.lens (\ModifyInstancePlacementResponse' {httpStatus} -> httpStatus) (\s@ModifyInstancePlacementResponse' {} a -> s {httpStatus = a} :: ModifyInstancePlacementResponse)
+
+instance
+  Prelude.NFData
+    ModifyInstancePlacementResponse
+  where
+  rnf ModifyInstancePlacementResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyIpam.hs b/gen/Amazonka/EC2/ModifyIpam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyIpam.hs
@@ -0,0 +1,245 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyIpam
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify the configurations of an IPAM.
+module Amazonka.EC2.ModifyIpam
+  ( -- * Creating a Request
+    ModifyIpam (..),
+    newModifyIpam,
+
+    -- * Request Lenses
+    modifyIpam_addOperatingRegions,
+    modifyIpam_description,
+    modifyIpam_dryRun,
+    modifyIpam_removeOperatingRegions,
+    modifyIpam_ipamId,
+
+    -- * Destructuring the Response
+    ModifyIpamResponse (..),
+    newModifyIpamResponse,
+
+    -- * Response Lenses
+    modifyIpamResponse_ipam,
+    modifyIpamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyIpam' smart constructor.
+data ModifyIpam = ModifyIpam'
+  { -- | Choose the operating Regions for the IPAM. Operating Regions are Amazon
+    -- Web Services Regions where the IPAM is allowed to manage IP address
+    -- CIDRs. IPAM only discovers and monitors resources in the Amazon Web
+    -- Services Regions you select as operating Regions.
+    --
+    -- For more information about operating Regions, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+    -- in the /Amazon VPC IPAM User Guide/.
+    addOperatingRegions :: Prelude.Maybe [AddIpamOperatingRegion],
+    -- | The description of the IPAM you want to modify.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The operating Regions to remove.
+    removeOperatingRegions :: Prelude.Maybe [RemoveIpamOperatingRegion],
+    -- | The ID of the IPAM you want to modify.
+    ipamId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpam' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addOperatingRegions', 'modifyIpam_addOperatingRegions' - Choose the operating Regions for the IPAM. Operating Regions are Amazon
+-- Web Services Regions where the IPAM is allowed to manage IP address
+-- CIDRs. IPAM only discovers and monitors resources in the Amazon Web
+-- Services Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'description', 'modifyIpam_description' - The description of the IPAM you want to modify.
+--
+-- 'dryRun', 'modifyIpam_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'removeOperatingRegions', 'modifyIpam_removeOperatingRegions' - The operating Regions to remove.
+--
+-- 'ipamId', 'modifyIpam_ipamId' - The ID of the IPAM you want to modify.
+newModifyIpam ::
+  -- | 'ipamId'
+  Prelude.Text ->
+  ModifyIpam
+newModifyIpam pIpamId_ =
+  ModifyIpam'
+    { addOperatingRegions = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      removeOperatingRegions = Prelude.Nothing,
+      ipamId = pIpamId_
+    }
+
+-- | Choose the operating Regions for the IPAM. Operating Regions are Amazon
+-- Web Services Regions where the IPAM is allowed to manage IP address
+-- CIDRs. IPAM only discovers and monitors resources in the Amazon Web
+-- Services Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+modifyIpam_addOperatingRegions :: Lens.Lens' ModifyIpam (Prelude.Maybe [AddIpamOperatingRegion])
+modifyIpam_addOperatingRegions = Lens.lens (\ModifyIpam' {addOperatingRegions} -> addOperatingRegions) (\s@ModifyIpam' {} a -> s {addOperatingRegions = a} :: ModifyIpam) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the IPAM you want to modify.
+modifyIpam_description :: Lens.Lens' ModifyIpam (Prelude.Maybe Prelude.Text)
+modifyIpam_description = Lens.lens (\ModifyIpam' {description} -> description) (\s@ModifyIpam' {} a -> s {description = a} :: ModifyIpam)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+modifyIpam_dryRun :: Lens.Lens' ModifyIpam (Prelude.Maybe Prelude.Bool)
+modifyIpam_dryRun = Lens.lens (\ModifyIpam' {dryRun} -> dryRun) (\s@ModifyIpam' {} a -> s {dryRun = a} :: ModifyIpam)
+
+-- | The operating Regions to remove.
+modifyIpam_removeOperatingRegions :: Lens.Lens' ModifyIpam (Prelude.Maybe [RemoveIpamOperatingRegion])
+modifyIpam_removeOperatingRegions = Lens.lens (\ModifyIpam' {removeOperatingRegions} -> removeOperatingRegions) (\s@ModifyIpam' {} a -> s {removeOperatingRegions = a} :: ModifyIpam) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the IPAM you want to modify.
+modifyIpam_ipamId :: Lens.Lens' ModifyIpam Prelude.Text
+modifyIpam_ipamId = Lens.lens (\ModifyIpam' {ipamId} -> ipamId) (\s@ModifyIpam' {} a -> s {ipamId = a} :: ModifyIpam)
+
+instance Core.AWSRequest ModifyIpam where
+  type AWSResponse ModifyIpam = ModifyIpamResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyIpamResponse'
+            Prelude.<$> (x Data..@? "ipam")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyIpam where
+  hashWithSalt _salt ModifyIpam' {..} =
+    _salt
+      `Prelude.hashWithSalt` addOperatingRegions
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` removeOperatingRegions
+      `Prelude.hashWithSalt` ipamId
+
+instance Prelude.NFData ModifyIpam where
+  rnf ModifyIpam' {..} =
+    Prelude.rnf addOperatingRegions
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf removeOperatingRegions
+      `Prelude.seq` Prelude.rnf ipamId
+
+instance Data.ToHeaders ModifyIpam where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyIpam where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyIpam where
+  toQuery ModifyIpam' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyIpam" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AddOperatingRegion"
+              Prelude.<$> addOperatingRegions
+          ),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "RemoveOperatingRegion"
+              Prelude.<$> removeOperatingRegions
+          ),
+        "IpamId" Data.=: ipamId
+      ]
+
+-- | /See:/ 'newModifyIpamResponse' smart constructor.
+data ModifyIpamResponse = ModifyIpamResponse'
+  { -- | The results of the modification.
+    ipam :: Prelude.Maybe Ipam,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipam', 'modifyIpamResponse_ipam' - The results of the modification.
+--
+-- 'httpStatus', 'modifyIpamResponse_httpStatus' - The response's http status code.
+newModifyIpamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyIpamResponse
+newModifyIpamResponse pHttpStatus_ =
+  ModifyIpamResponse'
+    { ipam = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The results of the modification.
+modifyIpamResponse_ipam :: Lens.Lens' ModifyIpamResponse (Prelude.Maybe Ipam)
+modifyIpamResponse_ipam = Lens.lens (\ModifyIpamResponse' {ipam} -> ipam) (\s@ModifyIpamResponse' {} a -> s {ipam = a} :: ModifyIpamResponse)
+
+-- | The response's http status code.
+modifyIpamResponse_httpStatus :: Lens.Lens' ModifyIpamResponse Prelude.Int
+modifyIpamResponse_httpStatus = Lens.lens (\ModifyIpamResponse' {httpStatus} -> httpStatus) (\s@ModifyIpamResponse' {} a -> s {httpStatus = a} :: ModifyIpamResponse)
+
+instance Prelude.NFData ModifyIpamResponse where
+  rnf ModifyIpamResponse' {..} =
+    Prelude.rnf ipam
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyIpamPool.hs b/gen/Amazonka/EC2/ModifyIpamPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyIpamPool.hs
@@ -0,0 +1,367 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyIpamPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify the configurations of an IPAM pool.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/mod-pool-ipam.html Modify a pool>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.ModifyIpamPool
+  ( -- * Creating a Request
+    ModifyIpamPool (..),
+    newModifyIpamPool,
+
+    -- * Request Lenses
+    modifyIpamPool_addAllocationResourceTags,
+    modifyIpamPool_allocationDefaultNetmaskLength,
+    modifyIpamPool_allocationMaxNetmaskLength,
+    modifyIpamPool_allocationMinNetmaskLength,
+    modifyIpamPool_autoImport,
+    modifyIpamPool_clearAllocationDefaultNetmaskLength,
+    modifyIpamPool_description,
+    modifyIpamPool_dryRun,
+    modifyIpamPool_removeAllocationResourceTags,
+    modifyIpamPool_ipamPoolId,
+
+    -- * Destructuring the Response
+    ModifyIpamPoolResponse (..),
+    newModifyIpamPoolResponse,
+
+    -- * Response Lenses
+    modifyIpamPoolResponse_ipamPool,
+    modifyIpamPoolResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyIpamPool' smart constructor.
+data ModifyIpamPool = ModifyIpamPool'
+  { -- | Add tag allocation rules to a pool. For more information about
+    -- allocation rules, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html Create a top-level pool>
+    -- in the /Amazon VPC IPAM User Guide/.
+    addAllocationResourceTags :: Prelude.Maybe [RequestIpamResourceTag],
+    -- | The default netmask length for allocations added to this pool. If, for
+    -- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+    -- here, new allocations will default to 10.0.0.0\/16.
+    allocationDefaultNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum netmask length possible for CIDR allocations in this IPAM
+    -- pool to be compliant. Possible netmask lengths for IPv4 addresses are 0
+    -- - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.The
+    -- maximum netmask length must be greater than the minimum netmask length.
+    allocationMaxNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum netmask length required for CIDR allocations in this IPAM
+    -- pool to be compliant. Possible netmask lengths for IPv4 addresses are 0
+    -- - 32. Possible netmask lengths for IPv6 addresses are 0 - 128. The
+    -- minimum netmask length must be less than the maximum netmask length.
+    allocationMinNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | If true, IPAM will continuously look for resources within the CIDR range
+    -- of this pool and automatically import them as allocations into your
+    -- IPAM. The CIDRs that will be allocated for these resources must not
+    -- already be allocated to other resources in order for the import to
+    -- succeed. IPAM will import a CIDR regardless of its compliance with the
+    -- pool\'s allocation rules, so a resource might be imported and
+    -- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+    -- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+    -- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+    -- them only.
+    --
+    -- A locale must be set on the pool for this feature to work.
+    autoImport :: Prelude.Maybe Prelude.Bool,
+    -- | Clear the default netmask length allocation rule for this pool.
+    clearAllocationDefaultNetmaskLength :: Prelude.Maybe Prelude.Bool,
+    -- | The description of the IPAM pool you want to modify.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Remove tag allocation rules from a pool.
+    removeAllocationResourceTags :: Prelude.Maybe [RequestIpamResourceTag],
+    -- | The ID of the IPAM pool you want to modify.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addAllocationResourceTags', 'modifyIpamPool_addAllocationResourceTags' - Add tag allocation rules to a pool. For more information about
+-- allocation rules, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html Create a top-level pool>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'allocationDefaultNetmaskLength', 'modifyIpamPool_allocationDefaultNetmaskLength' - The default netmask length for allocations added to this pool. If, for
+-- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+-- here, new allocations will default to 10.0.0.0\/16.
+--
+-- 'allocationMaxNetmaskLength', 'modifyIpamPool_allocationMaxNetmaskLength' - The maximum netmask length possible for CIDR allocations in this IPAM
+-- pool to be compliant. Possible netmask lengths for IPv4 addresses are 0
+-- - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.The
+-- maximum netmask length must be greater than the minimum netmask length.
+--
+-- 'allocationMinNetmaskLength', 'modifyIpamPool_allocationMinNetmaskLength' - The minimum netmask length required for CIDR allocations in this IPAM
+-- pool to be compliant. Possible netmask lengths for IPv4 addresses are 0
+-- - 32. Possible netmask lengths for IPv6 addresses are 0 - 128. The
+-- minimum netmask length must be less than the maximum netmask length.
+--
+-- 'autoImport', 'modifyIpamPool_autoImport' - If true, IPAM will continuously look for resources within the CIDR range
+-- of this pool and automatically import them as allocations into your
+-- IPAM. The CIDRs that will be allocated for these resources must not
+-- already be allocated to other resources in order for the import to
+-- succeed. IPAM will import a CIDR regardless of its compliance with the
+-- pool\'s allocation rules, so a resource might be imported and
+-- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+-- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+-- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+-- them only.
+--
+-- A locale must be set on the pool for this feature to work.
+--
+-- 'clearAllocationDefaultNetmaskLength', 'modifyIpamPool_clearAllocationDefaultNetmaskLength' - Clear the default netmask length allocation rule for this pool.
+--
+-- 'description', 'modifyIpamPool_description' - The description of the IPAM pool you want to modify.
+--
+-- 'dryRun', 'modifyIpamPool_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'removeAllocationResourceTags', 'modifyIpamPool_removeAllocationResourceTags' - Remove tag allocation rules from a pool.
+--
+-- 'ipamPoolId', 'modifyIpamPool_ipamPoolId' - The ID of the IPAM pool you want to modify.
+newModifyIpamPool ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  ModifyIpamPool
+newModifyIpamPool pIpamPoolId_ =
+  ModifyIpamPool'
+    { addAllocationResourceTags =
+        Prelude.Nothing,
+      allocationDefaultNetmaskLength = Prelude.Nothing,
+      allocationMaxNetmaskLength = Prelude.Nothing,
+      allocationMinNetmaskLength = Prelude.Nothing,
+      autoImport = Prelude.Nothing,
+      clearAllocationDefaultNetmaskLength =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      removeAllocationResourceTags = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | Add tag allocation rules to a pool. For more information about
+-- allocation rules, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-top-ipam.html Create a top-level pool>
+-- in the /Amazon VPC IPAM User Guide/.
+modifyIpamPool_addAllocationResourceTags :: Lens.Lens' ModifyIpamPool (Prelude.Maybe [RequestIpamResourceTag])
+modifyIpamPool_addAllocationResourceTags = Lens.lens (\ModifyIpamPool' {addAllocationResourceTags} -> addAllocationResourceTags) (\s@ModifyIpamPool' {} a -> s {addAllocationResourceTags = a} :: ModifyIpamPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The default netmask length for allocations added to this pool. If, for
+-- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+-- here, new allocations will default to 10.0.0.0\/16.
+modifyIpamPool_allocationDefaultNetmaskLength :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Natural)
+modifyIpamPool_allocationDefaultNetmaskLength = Lens.lens (\ModifyIpamPool' {allocationDefaultNetmaskLength} -> allocationDefaultNetmaskLength) (\s@ModifyIpamPool' {} a -> s {allocationDefaultNetmaskLength = a} :: ModifyIpamPool)
+
+-- | The maximum netmask length possible for CIDR allocations in this IPAM
+-- pool to be compliant. Possible netmask lengths for IPv4 addresses are 0
+-- - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.The
+-- maximum netmask length must be greater than the minimum netmask length.
+modifyIpamPool_allocationMaxNetmaskLength :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Natural)
+modifyIpamPool_allocationMaxNetmaskLength = Lens.lens (\ModifyIpamPool' {allocationMaxNetmaskLength} -> allocationMaxNetmaskLength) (\s@ModifyIpamPool' {} a -> s {allocationMaxNetmaskLength = a} :: ModifyIpamPool)
+
+-- | The minimum netmask length required for CIDR allocations in this IPAM
+-- pool to be compliant. Possible netmask lengths for IPv4 addresses are 0
+-- - 32. Possible netmask lengths for IPv6 addresses are 0 - 128. The
+-- minimum netmask length must be less than the maximum netmask length.
+modifyIpamPool_allocationMinNetmaskLength :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Natural)
+modifyIpamPool_allocationMinNetmaskLength = Lens.lens (\ModifyIpamPool' {allocationMinNetmaskLength} -> allocationMinNetmaskLength) (\s@ModifyIpamPool' {} a -> s {allocationMinNetmaskLength = a} :: ModifyIpamPool)
+
+-- | If true, IPAM will continuously look for resources within the CIDR range
+-- of this pool and automatically import them as allocations into your
+-- IPAM. The CIDRs that will be allocated for these resources must not
+-- already be allocated to other resources in order for the import to
+-- succeed. IPAM will import a CIDR regardless of its compliance with the
+-- pool\'s allocation rules, so a resource might be imported and
+-- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+-- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+-- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+-- them only.
+--
+-- A locale must be set on the pool for this feature to work.
+modifyIpamPool_autoImport :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Bool)
+modifyIpamPool_autoImport = Lens.lens (\ModifyIpamPool' {autoImport} -> autoImport) (\s@ModifyIpamPool' {} a -> s {autoImport = a} :: ModifyIpamPool)
+
+-- | Clear the default netmask length allocation rule for this pool.
+modifyIpamPool_clearAllocationDefaultNetmaskLength :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Bool)
+modifyIpamPool_clearAllocationDefaultNetmaskLength = Lens.lens (\ModifyIpamPool' {clearAllocationDefaultNetmaskLength} -> clearAllocationDefaultNetmaskLength) (\s@ModifyIpamPool' {} a -> s {clearAllocationDefaultNetmaskLength = a} :: ModifyIpamPool)
+
+-- | The description of the IPAM pool you want to modify.
+modifyIpamPool_description :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Text)
+modifyIpamPool_description = Lens.lens (\ModifyIpamPool' {description} -> description) (\s@ModifyIpamPool' {} a -> s {description = a} :: ModifyIpamPool)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+modifyIpamPool_dryRun :: Lens.Lens' ModifyIpamPool (Prelude.Maybe Prelude.Bool)
+modifyIpamPool_dryRun = Lens.lens (\ModifyIpamPool' {dryRun} -> dryRun) (\s@ModifyIpamPool' {} a -> s {dryRun = a} :: ModifyIpamPool)
+
+-- | Remove tag allocation rules from a pool.
+modifyIpamPool_removeAllocationResourceTags :: Lens.Lens' ModifyIpamPool (Prelude.Maybe [RequestIpamResourceTag])
+modifyIpamPool_removeAllocationResourceTags = Lens.lens (\ModifyIpamPool' {removeAllocationResourceTags} -> removeAllocationResourceTags) (\s@ModifyIpamPool' {} a -> s {removeAllocationResourceTags = a} :: ModifyIpamPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the IPAM pool you want to modify.
+modifyIpamPool_ipamPoolId :: Lens.Lens' ModifyIpamPool Prelude.Text
+modifyIpamPool_ipamPoolId = Lens.lens (\ModifyIpamPool' {ipamPoolId} -> ipamPoolId) (\s@ModifyIpamPool' {} a -> s {ipamPoolId = a} :: ModifyIpamPool)
+
+instance Core.AWSRequest ModifyIpamPool where
+  type
+    AWSResponse ModifyIpamPool =
+      ModifyIpamPoolResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyIpamPoolResponse'
+            Prelude.<$> (x Data..@? "ipamPool")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyIpamPool where
+  hashWithSalt _salt ModifyIpamPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` addAllocationResourceTags
+      `Prelude.hashWithSalt` allocationDefaultNetmaskLength
+      `Prelude.hashWithSalt` allocationMaxNetmaskLength
+      `Prelude.hashWithSalt` allocationMinNetmaskLength
+      `Prelude.hashWithSalt` autoImport
+      `Prelude.hashWithSalt` clearAllocationDefaultNetmaskLength
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` removeAllocationResourceTags
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData ModifyIpamPool where
+  rnf ModifyIpamPool' {..} =
+    Prelude.rnf addAllocationResourceTags
+      `Prelude.seq` Prelude.rnf allocationDefaultNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationMaxNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationMinNetmaskLength
+      `Prelude.seq` Prelude.rnf autoImport
+      `Prelude.seq` Prelude.rnf clearAllocationDefaultNetmaskLength
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf removeAllocationResourceTags
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders ModifyIpamPool where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyIpamPool where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyIpamPool where
+  toQuery ModifyIpamPool' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyIpamPool" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AddAllocationResourceTag"
+              Prelude.<$> addAllocationResourceTags
+          ),
+        "AllocationDefaultNetmaskLength"
+          Data.=: allocationDefaultNetmaskLength,
+        "AllocationMaxNetmaskLength"
+          Data.=: allocationMaxNetmaskLength,
+        "AllocationMinNetmaskLength"
+          Data.=: allocationMinNetmaskLength,
+        "AutoImport" Data.=: autoImport,
+        "ClearAllocationDefaultNetmaskLength"
+          Data.=: clearAllocationDefaultNetmaskLength,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "RemoveAllocationResourceTag"
+              Prelude.<$> removeAllocationResourceTags
+          ),
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newModifyIpamPoolResponse' smart constructor.
+data ModifyIpamPoolResponse = ModifyIpamPoolResponse'
+  { -- | The results of the modification.
+    ipamPool :: Prelude.Maybe IpamPool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamPoolResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPool', 'modifyIpamPoolResponse_ipamPool' - The results of the modification.
+--
+-- 'httpStatus', 'modifyIpamPoolResponse_httpStatus' - The response's http status code.
+newModifyIpamPoolResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyIpamPoolResponse
+newModifyIpamPoolResponse pHttpStatus_ =
+  ModifyIpamPoolResponse'
+    { ipamPool = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The results of the modification.
+modifyIpamPoolResponse_ipamPool :: Lens.Lens' ModifyIpamPoolResponse (Prelude.Maybe IpamPool)
+modifyIpamPoolResponse_ipamPool = Lens.lens (\ModifyIpamPoolResponse' {ipamPool} -> ipamPool) (\s@ModifyIpamPoolResponse' {} a -> s {ipamPool = a} :: ModifyIpamPoolResponse)
+
+-- | The response's http status code.
+modifyIpamPoolResponse_httpStatus :: Lens.Lens' ModifyIpamPoolResponse Prelude.Int
+modifyIpamPoolResponse_httpStatus = Lens.lens (\ModifyIpamPoolResponse' {httpStatus} -> httpStatus) (\s@ModifyIpamPoolResponse' {} a -> s {httpStatus = a} :: ModifyIpamPoolResponse)
+
+instance Prelude.NFData ModifyIpamPoolResponse where
+  rnf ModifyIpamPoolResponse' {..} =
+    Prelude.rnf ipamPool
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyIpamResourceCidr.hs b/gen/Amazonka/EC2/ModifyIpamResourceCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyIpamResourceCidr.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyIpamResourceCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify a resource CIDR. You can use this action to transfer resource
+-- CIDRs between scopes and ignore resource CIDRs that you do not want to
+-- manage. If set to false, the resource will not be tracked for overlap,
+-- it cannot be auto-imported into a pool, and it will be removed from any
+-- pool it has an allocation in.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/move-resource-ipam.html Move resource CIDRs between scopes>
+-- and
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/change-monitoring-state-ipam.html Change the monitoring state of resource CIDRs>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.ModifyIpamResourceCidr
+  ( -- * Creating a Request
+    ModifyIpamResourceCidr (..),
+    newModifyIpamResourceCidr,
+
+    -- * Request Lenses
+    modifyIpamResourceCidr_destinationIpamScopeId,
+    modifyIpamResourceCidr_dryRun,
+    modifyIpamResourceCidr_resourceId,
+    modifyIpamResourceCidr_resourceCidr,
+    modifyIpamResourceCidr_resourceRegion,
+    modifyIpamResourceCidr_currentIpamScopeId,
+    modifyIpamResourceCidr_monitored,
+
+    -- * Destructuring the Response
+    ModifyIpamResourceCidrResponse (..),
+    newModifyIpamResourceCidrResponse,
+
+    -- * Response Lenses
+    modifyIpamResourceCidrResponse_ipamResourceCidr,
+    modifyIpamResourceCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyIpamResourceCidr' smart constructor.
+data ModifyIpamResourceCidr = ModifyIpamResourceCidr'
+  { -- | The ID of the scope you want to transfer the resource CIDR to.
+    destinationIpamScopeId :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the resource you want to modify.
+    resourceId :: Prelude.Text,
+    -- | The CIDR of the resource you want to modify.
+    resourceCidr :: Prelude.Text,
+    -- | The Amazon Web Services Region of the resource you want to modify.
+    resourceRegion :: Prelude.Text,
+    -- | The ID of the current scope that the resource CIDR is in.
+    currentIpamScopeId :: Prelude.Text,
+    -- | Determines if the resource is monitored by IPAM. If a resource is
+    -- monitored, the resource is discovered by IPAM and you can view details
+    -- about the resource’s CIDR.
+    monitored :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamResourceCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationIpamScopeId', 'modifyIpamResourceCidr_destinationIpamScopeId' - The ID of the scope you want to transfer the resource CIDR to.
+--
+-- 'dryRun', 'modifyIpamResourceCidr_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'resourceId', 'modifyIpamResourceCidr_resourceId' - The ID of the resource you want to modify.
+--
+-- 'resourceCidr', 'modifyIpamResourceCidr_resourceCidr' - The CIDR of the resource you want to modify.
+--
+-- 'resourceRegion', 'modifyIpamResourceCidr_resourceRegion' - The Amazon Web Services Region of the resource you want to modify.
+--
+-- 'currentIpamScopeId', 'modifyIpamResourceCidr_currentIpamScopeId' - The ID of the current scope that the resource CIDR is in.
+--
+-- 'monitored', 'modifyIpamResourceCidr_monitored' - Determines if the resource is monitored by IPAM. If a resource is
+-- monitored, the resource is discovered by IPAM and you can view details
+-- about the resource’s CIDR.
+newModifyIpamResourceCidr ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'resourceCidr'
+  Prelude.Text ->
+  -- | 'resourceRegion'
+  Prelude.Text ->
+  -- | 'currentIpamScopeId'
+  Prelude.Text ->
+  -- | 'monitored'
+  Prelude.Bool ->
+  ModifyIpamResourceCidr
+newModifyIpamResourceCidr
+  pResourceId_
+  pResourceCidr_
+  pResourceRegion_
+  pCurrentIpamScopeId_
+  pMonitored_ =
+    ModifyIpamResourceCidr'
+      { destinationIpamScopeId =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        resourceId = pResourceId_,
+        resourceCidr = pResourceCidr_,
+        resourceRegion = pResourceRegion_,
+        currentIpamScopeId = pCurrentIpamScopeId_,
+        monitored = pMonitored_
+      }
+
+-- | The ID of the scope you want to transfer the resource CIDR to.
+modifyIpamResourceCidr_destinationIpamScopeId :: Lens.Lens' ModifyIpamResourceCidr (Prelude.Maybe Prelude.Text)
+modifyIpamResourceCidr_destinationIpamScopeId = Lens.lens (\ModifyIpamResourceCidr' {destinationIpamScopeId} -> destinationIpamScopeId) (\s@ModifyIpamResourceCidr' {} a -> s {destinationIpamScopeId = a} :: ModifyIpamResourceCidr)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+modifyIpamResourceCidr_dryRun :: Lens.Lens' ModifyIpamResourceCidr (Prelude.Maybe Prelude.Bool)
+modifyIpamResourceCidr_dryRun = Lens.lens (\ModifyIpamResourceCidr' {dryRun} -> dryRun) (\s@ModifyIpamResourceCidr' {} a -> s {dryRun = a} :: ModifyIpamResourceCidr)
+
+-- | The ID of the resource you want to modify.
+modifyIpamResourceCidr_resourceId :: Lens.Lens' ModifyIpamResourceCidr Prelude.Text
+modifyIpamResourceCidr_resourceId = Lens.lens (\ModifyIpamResourceCidr' {resourceId} -> resourceId) (\s@ModifyIpamResourceCidr' {} a -> s {resourceId = a} :: ModifyIpamResourceCidr)
+
+-- | The CIDR of the resource you want to modify.
+modifyIpamResourceCidr_resourceCidr :: Lens.Lens' ModifyIpamResourceCidr Prelude.Text
+modifyIpamResourceCidr_resourceCidr = Lens.lens (\ModifyIpamResourceCidr' {resourceCidr} -> resourceCidr) (\s@ModifyIpamResourceCidr' {} a -> s {resourceCidr = a} :: ModifyIpamResourceCidr)
+
+-- | The Amazon Web Services Region of the resource you want to modify.
+modifyIpamResourceCidr_resourceRegion :: Lens.Lens' ModifyIpamResourceCidr Prelude.Text
+modifyIpamResourceCidr_resourceRegion = Lens.lens (\ModifyIpamResourceCidr' {resourceRegion} -> resourceRegion) (\s@ModifyIpamResourceCidr' {} a -> s {resourceRegion = a} :: ModifyIpamResourceCidr)
+
+-- | The ID of the current scope that the resource CIDR is in.
+modifyIpamResourceCidr_currentIpamScopeId :: Lens.Lens' ModifyIpamResourceCidr Prelude.Text
+modifyIpamResourceCidr_currentIpamScopeId = Lens.lens (\ModifyIpamResourceCidr' {currentIpamScopeId} -> currentIpamScopeId) (\s@ModifyIpamResourceCidr' {} a -> s {currentIpamScopeId = a} :: ModifyIpamResourceCidr)
+
+-- | Determines if the resource is monitored by IPAM. If a resource is
+-- monitored, the resource is discovered by IPAM and you can view details
+-- about the resource’s CIDR.
+modifyIpamResourceCidr_monitored :: Lens.Lens' ModifyIpamResourceCidr Prelude.Bool
+modifyIpamResourceCidr_monitored = Lens.lens (\ModifyIpamResourceCidr' {monitored} -> monitored) (\s@ModifyIpamResourceCidr' {} a -> s {monitored = a} :: ModifyIpamResourceCidr)
+
+instance Core.AWSRequest ModifyIpamResourceCidr where
+  type
+    AWSResponse ModifyIpamResourceCidr =
+      ModifyIpamResourceCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyIpamResourceCidrResponse'
+            Prelude.<$> (x Data..@? "ipamResourceCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyIpamResourceCidr where
+  hashWithSalt _salt ModifyIpamResourceCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationIpamScopeId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceCidr
+      `Prelude.hashWithSalt` resourceRegion
+      `Prelude.hashWithSalt` currentIpamScopeId
+      `Prelude.hashWithSalt` monitored
+
+instance Prelude.NFData ModifyIpamResourceCidr where
+  rnf ModifyIpamResourceCidr' {..} =
+    Prelude.rnf destinationIpamScopeId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceCidr
+      `Prelude.seq` Prelude.rnf resourceRegion
+      `Prelude.seq` Prelude.rnf currentIpamScopeId
+      `Prelude.seq` Prelude.rnf monitored
+
+instance Data.ToHeaders ModifyIpamResourceCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyIpamResourceCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyIpamResourceCidr where
+  toQuery ModifyIpamResourceCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyIpamResourceCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DestinationIpamScopeId"
+          Data.=: destinationIpamScopeId,
+        "DryRun" Data.=: dryRun,
+        "ResourceId" Data.=: resourceId,
+        "ResourceCidr" Data.=: resourceCidr,
+        "ResourceRegion" Data.=: resourceRegion,
+        "CurrentIpamScopeId" Data.=: currentIpamScopeId,
+        "Monitored" Data.=: monitored
+      ]
+
+-- | /See:/ 'newModifyIpamResourceCidrResponse' smart constructor.
+data ModifyIpamResourceCidrResponse = ModifyIpamResourceCidrResponse'
+  { -- | The CIDR of the resource.
+    ipamResourceCidr :: Prelude.Maybe IpamResourceCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamResourceCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamResourceCidr', 'modifyIpamResourceCidrResponse_ipamResourceCidr' - The CIDR of the resource.
+--
+-- 'httpStatus', 'modifyIpamResourceCidrResponse_httpStatus' - The response's http status code.
+newModifyIpamResourceCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyIpamResourceCidrResponse
+newModifyIpamResourceCidrResponse pHttpStatus_ =
+  ModifyIpamResourceCidrResponse'
+    { ipamResourceCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The CIDR of the resource.
+modifyIpamResourceCidrResponse_ipamResourceCidr :: Lens.Lens' ModifyIpamResourceCidrResponse (Prelude.Maybe IpamResourceCidr)
+modifyIpamResourceCidrResponse_ipamResourceCidr = Lens.lens (\ModifyIpamResourceCidrResponse' {ipamResourceCidr} -> ipamResourceCidr) (\s@ModifyIpamResourceCidrResponse' {} a -> s {ipamResourceCidr = a} :: ModifyIpamResourceCidrResponse)
+
+-- | The response's http status code.
+modifyIpamResourceCidrResponse_httpStatus :: Lens.Lens' ModifyIpamResourceCidrResponse Prelude.Int
+modifyIpamResourceCidrResponse_httpStatus = Lens.lens (\ModifyIpamResourceCidrResponse' {httpStatus} -> httpStatus) (\s@ModifyIpamResourceCidrResponse' {} a -> s {httpStatus = a} :: ModifyIpamResourceCidrResponse)
+
+instance
+  Prelude.NFData
+    ModifyIpamResourceCidrResponse
+  where
+  rnf ModifyIpamResourceCidrResponse' {..} =
+    Prelude.rnf ipamResourceCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyIpamScope.hs b/gen/Amazonka/EC2/ModifyIpamScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyIpamScope.hs
@@ -0,0 +1,195 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyIpamScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modify an IPAM scope.
+module Amazonka.EC2.ModifyIpamScope
+  ( -- * Creating a Request
+    ModifyIpamScope (..),
+    newModifyIpamScope,
+
+    -- * Request Lenses
+    modifyIpamScope_description,
+    modifyIpamScope_dryRun,
+    modifyIpamScope_ipamScopeId,
+
+    -- * Destructuring the Response
+    ModifyIpamScopeResponse (..),
+    newModifyIpamScopeResponse,
+
+    -- * Response Lenses
+    modifyIpamScopeResponse_ipamScope,
+    modifyIpamScopeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyIpamScope' smart constructor.
+data ModifyIpamScope = ModifyIpamScope'
+  { -- | The description of the scope you want to modify.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the scope you want to modify.
+    ipamScopeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'modifyIpamScope_description' - The description of the scope you want to modify.
+--
+-- 'dryRun', 'modifyIpamScope_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamScopeId', 'modifyIpamScope_ipamScopeId' - The ID of the scope you want to modify.
+newModifyIpamScope ::
+  -- | 'ipamScopeId'
+  Prelude.Text ->
+  ModifyIpamScope
+newModifyIpamScope pIpamScopeId_ =
+  ModifyIpamScope'
+    { description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipamScopeId = pIpamScopeId_
+    }
+
+-- | The description of the scope you want to modify.
+modifyIpamScope_description :: Lens.Lens' ModifyIpamScope (Prelude.Maybe Prelude.Text)
+modifyIpamScope_description = Lens.lens (\ModifyIpamScope' {description} -> description) (\s@ModifyIpamScope' {} a -> s {description = a} :: ModifyIpamScope)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+modifyIpamScope_dryRun :: Lens.Lens' ModifyIpamScope (Prelude.Maybe Prelude.Bool)
+modifyIpamScope_dryRun = Lens.lens (\ModifyIpamScope' {dryRun} -> dryRun) (\s@ModifyIpamScope' {} a -> s {dryRun = a} :: ModifyIpamScope)
+
+-- | The ID of the scope you want to modify.
+modifyIpamScope_ipamScopeId :: Lens.Lens' ModifyIpamScope Prelude.Text
+modifyIpamScope_ipamScopeId = Lens.lens (\ModifyIpamScope' {ipamScopeId} -> ipamScopeId) (\s@ModifyIpamScope' {} a -> s {ipamScopeId = a} :: ModifyIpamScope)
+
+instance Core.AWSRequest ModifyIpamScope where
+  type
+    AWSResponse ModifyIpamScope =
+      ModifyIpamScopeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyIpamScopeResponse'
+            Prelude.<$> (x Data..@? "ipamScope")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyIpamScope where
+  hashWithSalt _salt ModifyIpamScope' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamScopeId
+
+instance Prelude.NFData ModifyIpamScope where
+  rnf ModifyIpamScope' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamScopeId
+
+instance Data.ToHeaders ModifyIpamScope where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyIpamScope where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyIpamScope where
+  toQuery ModifyIpamScope' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyIpamScope" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "IpamScopeId" Data.=: ipamScopeId
+      ]
+
+-- | /See:/ 'newModifyIpamScopeResponse' smart constructor.
+data ModifyIpamScopeResponse = ModifyIpamScopeResponse'
+  { -- | The results of the modification.
+    ipamScope :: Prelude.Maybe IpamScope,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyIpamScopeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamScope', 'modifyIpamScopeResponse_ipamScope' - The results of the modification.
+--
+-- 'httpStatus', 'modifyIpamScopeResponse_httpStatus' - The response's http status code.
+newModifyIpamScopeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyIpamScopeResponse
+newModifyIpamScopeResponse pHttpStatus_ =
+  ModifyIpamScopeResponse'
+    { ipamScope =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The results of the modification.
+modifyIpamScopeResponse_ipamScope :: Lens.Lens' ModifyIpamScopeResponse (Prelude.Maybe IpamScope)
+modifyIpamScopeResponse_ipamScope = Lens.lens (\ModifyIpamScopeResponse' {ipamScope} -> ipamScope) (\s@ModifyIpamScopeResponse' {} a -> s {ipamScope = a} :: ModifyIpamScopeResponse)
+
+-- | The response's http status code.
+modifyIpamScopeResponse_httpStatus :: Lens.Lens' ModifyIpamScopeResponse Prelude.Int
+modifyIpamScopeResponse_httpStatus = Lens.lens (\ModifyIpamScopeResponse' {httpStatus} -> httpStatus) (\s@ModifyIpamScopeResponse' {} a -> s {httpStatus = a} :: ModifyIpamScopeResponse)
+
+instance Prelude.NFData ModifyIpamScopeResponse where
+  rnf ModifyIpamScopeResponse' {..} =
+    Prelude.rnf ipamScope
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyLaunchTemplate.hs b/gen/Amazonka/EC2/ModifyLaunchTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyLaunchTemplate.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyLaunchTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a launch template. You can specify which version of the launch
+-- template to set as the default version. When launching an instance, the
+-- default version applies when a launch template version is not specified.
+module Amazonka.EC2.ModifyLaunchTemplate
+  ( -- * Creating a Request
+    ModifyLaunchTemplate (..),
+    newModifyLaunchTemplate,
+
+    -- * Request Lenses
+    modifyLaunchTemplate_clientToken,
+    modifyLaunchTemplate_defaultVersion,
+    modifyLaunchTemplate_dryRun,
+    modifyLaunchTemplate_launchTemplateId,
+    modifyLaunchTemplate_launchTemplateName,
+
+    -- * Destructuring the Response
+    ModifyLaunchTemplateResponse (..),
+    newModifyLaunchTemplateResponse,
+
+    -- * Response Lenses
+    modifyLaunchTemplateResponse_launchTemplate,
+    modifyLaunchTemplateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyLaunchTemplate' smart constructor.
+data ModifyLaunchTemplate = ModifyLaunchTemplate'
+  { -- | Unique, case-sensitive identifier you provide to ensure the idempotency
+    -- of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+    --
+    -- Constraint: Maximum 128 ASCII characters.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the launch template to set as the default version.
+    defaultVersion :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateId@ or the
+    -- @LaunchTemplateName@, but not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify either the @LaunchTemplateName@ or the
+    -- @LaunchTemplateId@, but not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyLaunchTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyLaunchTemplate_clientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraint: Maximum 128 ASCII characters.
+--
+-- 'defaultVersion', 'modifyLaunchTemplate_defaultVersion' - The version number of the launch template to set as the default version.
+--
+-- 'dryRun', 'modifyLaunchTemplate_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'launchTemplateId', 'modifyLaunchTemplate_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+--
+-- 'launchTemplateName', 'modifyLaunchTemplate_launchTemplateName' - The name of the launch template.
+--
+-- You must specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+newModifyLaunchTemplate ::
+  ModifyLaunchTemplate
+newModifyLaunchTemplate =
+  ModifyLaunchTemplate'
+    { clientToken =
+        Prelude.Nothing,
+      defaultVersion = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing
+    }
+
+-- | Unique, case-sensitive identifier you provide to ensure the idempotency
+-- of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraint: Maximum 128 ASCII characters.
+modifyLaunchTemplate_clientToken :: Lens.Lens' ModifyLaunchTemplate (Prelude.Maybe Prelude.Text)
+modifyLaunchTemplate_clientToken = Lens.lens (\ModifyLaunchTemplate' {clientToken} -> clientToken) (\s@ModifyLaunchTemplate' {} a -> s {clientToken = a} :: ModifyLaunchTemplate)
+
+-- | The version number of the launch template to set as the default version.
+modifyLaunchTemplate_defaultVersion :: Lens.Lens' ModifyLaunchTemplate (Prelude.Maybe Prelude.Text)
+modifyLaunchTemplate_defaultVersion = Lens.lens (\ModifyLaunchTemplate' {defaultVersion} -> defaultVersion) (\s@ModifyLaunchTemplate' {} a -> s {defaultVersion = a} :: ModifyLaunchTemplate)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyLaunchTemplate_dryRun :: Lens.Lens' ModifyLaunchTemplate (Prelude.Maybe Prelude.Bool)
+modifyLaunchTemplate_dryRun = Lens.lens (\ModifyLaunchTemplate' {dryRun} -> dryRun) (\s@ModifyLaunchTemplate' {} a -> s {dryRun = a} :: ModifyLaunchTemplate)
+
+-- | The ID of the launch template.
+--
+-- You must specify either the @LaunchTemplateId@ or the
+-- @LaunchTemplateName@, but not both.
+modifyLaunchTemplate_launchTemplateId :: Lens.Lens' ModifyLaunchTemplate (Prelude.Maybe Prelude.Text)
+modifyLaunchTemplate_launchTemplateId = Lens.lens (\ModifyLaunchTemplate' {launchTemplateId} -> launchTemplateId) (\s@ModifyLaunchTemplate' {} a -> s {launchTemplateId = a} :: ModifyLaunchTemplate)
+
+-- | The name of the launch template.
+--
+-- You must specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+modifyLaunchTemplate_launchTemplateName :: Lens.Lens' ModifyLaunchTemplate (Prelude.Maybe Prelude.Text)
+modifyLaunchTemplate_launchTemplateName = Lens.lens (\ModifyLaunchTemplate' {launchTemplateName} -> launchTemplateName) (\s@ModifyLaunchTemplate' {} a -> s {launchTemplateName = a} :: ModifyLaunchTemplate)
+
+instance Core.AWSRequest ModifyLaunchTemplate where
+  type
+    AWSResponse ModifyLaunchTemplate =
+      ModifyLaunchTemplateResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyLaunchTemplateResponse'
+            Prelude.<$> (x Data..@? "launchTemplate")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyLaunchTemplate where
+  hashWithSalt _salt ModifyLaunchTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` defaultVersion
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+
+instance Prelude.NFData ModifyLaunchTemplate where
+  rnf ModifyLaunchTemplate' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf defaultVersion
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+
+instance Data.ToHeaders ModifyLaunchTemplate where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyLaunchTemplate where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyLaunchTemplate where
+  toQuery ModifyLaunchTemplate' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyLaunchTemplate" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "SetDefaultVersion" Data.=: defaultVersion,
+        "DryRun" Data.=: dryRun,
+        "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName
+      ]
+
+-- | /See:/ 'newModifyLaunchTemplateResponse' smart constructor.
+data ModifyLaunchTemplateResponse = ModifyLaunchTemplateResponse'
+  { -- | Information about the launch template.
+    launchTemplate :: Prelude.Maybe LaunchTemplate,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyLaunchTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplate', 'modifyLaunchTemplateResponse_launchTemplate' - Information about the launch template.
+--
+-- 'httpStatus', 'modifyLaunchTemplateResponse_httpStatus' - The response's http status code.
+newModifyLaunchTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyLaunchTemplateResponse
+newModifyLaunchTemplateResponse pHttpStatus_ =
+  ModifyLaunchTemplateResponse'
+    { launchTemplate =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the launch template.
+modifyLaunchTemplateResponse_launchTemplate :: Lens.Lens' ModifyLaunchTemplateResponse (Prelude.Maybe LaunchTemplate)
+modifyLaunchTemplateResponse_launchTemplate = Lens.lens (\ModifyLaunchTemplateResponse' {launchTemplate} -> launchTemplate) (\s@ModifyLaunchTemplateResponse' {} a -> s {launchTemplate = a} :: ModifyLaunchTemplateResponse)
+
+-- | The response's http status code.
+modifyLaunchTemplateResponse_httpStatus :: Lens.Lens' ModifyLaunchTemplateResponse Prelude.Int
+modifyLaunchTemplateResponse_httpStatus = Lens.lens (\ModifyLaunchTemplateResponse' {httpStatus} -> httpStatus) (\s@ModifyLaunchTemplateResponse' {} a -> s {httpStatus = a} :: ModifyLaunchTemplateResponse)
+
+instance Prelude.NFData ModifyLaunchTemplateResponse where
+  rnf ModifyLaunchTemplateResponse' {..} =
+    Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyLocalGatewayRoute.hs b/gen/Amazonka/EC2/ModifyLocalGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyLocalGatewayRoute.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyLocalGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified local gateway route.
+module Amazonka.EC2.ModifyLocalGatewayRoute
+  ( -- * Creating a Request
+    ModifyLocalGatewayRoute (..),
+    newModifyLocalGatewayRoute,
+
+    -- * Request Lenses
+    modifyLocalGatewayRoute_dryRun,
+    modifyLocalGatewayRoute_localGatewayVirtualInterfaceGroupId,
+    modifyLocalGatewayRoute_networkInterfaceId,
+    modifyLocalGatewayRoute_destinationCidrBlock,
+    modifyLocalGatewayRoute_localGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    ModifyLocalGatewayRouteResponse (..),
+    newModifyLocalGatewayRouteResponse,
+
+    -- * Response Lenses
+    modifyLocalGatewayRouteResponse_route,
+    modifyLocalGatewayRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyLocalGatewayRoute' smart constructor.
+data ModifyLocalGatewayRoute = ModifyLocalGatewayRoute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the virtual interface group.
+    localGatewayVirtualInterfaceGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR block used for destination matches. The value that you provide
+    -- must match the CIDR of an existing route in the table.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyLocalGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyLocalGatewayRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'localGatewayVirtualInterfaceGroupId', 'modifyLocalGatewayRoute_localGatewayVirtualInterfaceGroupId' - The ID of the virtual interface group.
+--
+-- 'networkInterfaceId', 'modifyLocalGatewayRoute_networkInterfaceId' - The ID of the network interface.
+--
+-- 'destinationCidrBlock', 'modifyLocalGatewayRoute_destinationCidrBlock' - The CIDR block used for destination matches. The value that you provide
+-- must match the CIDR of an existing route in the table.
+--
+-- 'localGatewayRouteTableId', 'modifyLocalGatewayRoute_localGatewayRouteTableId' - The ID of the local gateway route table.
+newModifyLocalGatewayRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  ModifyLocalGatewayRoute
+newModifyLocalGatewayRoute
+  pDestinationCidrBlock_
+  pLocalGatewayRouteTableId_ =
+    ModifyLocalGatewayRoute'
+      { dryRun = Prelude.Nothing,
+        localGatewayVirtualInterfaceGroupId =
+          Prelude.Nothing,
+        networkInterfaceId = Prelude.Nothing,
+        destinationCidrBlock = pDestinationCidrBlock_,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyLocalGatewayRoute_dryRun :: Lens.Lens' ModifyLocalGatewayRoute (Prelude.Maybe Prelude.Bool)
+modifyLocalGatewayRoute_dryRun = Lens.lens (\ModifyLocalGatewayRoute' {dryRun} -> dryRun) (\s@ModifyLocalGatewayRoute' {} a -> s {dryRun = a} :: ModifyLocalGatewayRoute)
+
+-- | The ID of the virtual interface group.
+modifyLocalGatewayRoute_localGatewayVirtualInterfaceGroupId :: Lens.Lens' ModifyLocalGatewayRoute (Prelude.Maybe Prelude.Text)
+modifyLocalGatewayRoute_localGatewayVirtualInterfaceGroupId = Lens.lens (\ModifyLocalGatewayRoute' {localGatewayVirtualInterfaceGroupId} -> localGatewayVirtualInterfaceGroupId) (\s@ModifyLocalGatewayRoute' {} a -> s {localGatewayVirtualInterfaceGroupId = a} :: ModifyLocalGatewayRoute)
+
+-- | The ID of the network interface.
+modifyLocalGatewayRoute_networkInterfaceId :: Lens.Lens' ModifyLocalGatewayRoute (Prelude.Maybe Prelude.Text)
+modifyLocalGatewayRoute_networkInterfaceId = Lens.lens (\ModifyLocalGatewayRoute' {networkInterfaceId} -> networkInterfaceId) (\s@ModifyLocalGatewayRoute' {} a -> s {networkInterfaceId = a} :: ModifyLocalGatewayRoute)
+
+-- | The CIDR block used for destination matches. The value that you provide
+-- must match the CIDR of an existing route in the table.
+modifyLocalGatewayRoute_destinationCidrBlock :: Lens.Lens' ModifyLocalGatewayRoute Prelude.Text
+modifyLocalGatewayRoute_destinationCidrBlock = Lens.lens (\ModifyLocalGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@ModifyLocalGatewayRoute' {} a -> s {destinationCidrBlock = a} :: ModifyLocalGatewayRoute)
+
+-- | The ID of the local gateway route table.
+modifyLocalGatewayRoute_localGatewayRouteTableId :: Lens.Lens' ModifyLocalGatewayRoute Prelude.Text
+modifyLocalGatewayRoute_localGatewayRouteTableId = Lens.lens (\ModifyLocalGatewayRoute' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@ModifyLocalGatewayRoute' {} a -> s {localGatewayRouteTableId = a} :: ModifyLocalGatewayRoute)
+
+instance Core.AWSRequest ModifyLocalGatewayRoute where
+  type
+    AWSResponse ModifyLocalGatewayRoute =
+      ModifyLocalGatewayRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyLocalGatewayRouteResponse'
+            Prelude.<$> (x Data..@? "route")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyLocalGatewayRoute where
+  hashWithSalt _salt ModifyLocalGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData ModifyLocalGatewayRoute where
+  rnf ModifyLocalGatewayRoute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+
+instance Data.ToHeaders ModifyLocalGatewayRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyLocalGatewayRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyLocalGatewayRoute where
+  toQuery ModifyLocalGatewayRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyLocalGatewayRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LocalGatewayVirtualInterfaceGroupId"
+          Data.=: localGatewayVirtualInterfaceGroupId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "LocalGatewayRouteTableId"
+          Data.=: localGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newModifyLocalGatewayRouteResponse' smart constructor.
+data ModifyLocalGatewayRouteResponse = ModifyLocalGatewayRouteResponse'
+  { -- | Information about the local gateway route table.
+    route :: Prelude.Maybe LocalGatewayRoute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyLocalGatewayRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'route', 'modifyLocalGatewayRouteResponse_route' - Information about the local gateway route table.
+--
+-- 'httpStatus', 'modifyLocalGatewayRouteResponse_httpStatus' - The response's http status code.
+newModifyLocalGatewayRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyLocalGatewayRouteResponse
+newModifyLocalGatewayRouteResponse pHttpStatus_ =
+  ModifyLocalGatewayRouteResponse'
+    { route =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the local gateway route table.
+modifyLocalGatewayRouteResponse_route :: Lens.Lens' ModifyLocalGatewayRouteResponse (Prelude.Maybe LocalGatewayRoute)
+modifyLocalGatewayRouteResponse_route = Lens.lens (\ModifyLocalGatewayRouteResponse' {route} -> route) (\s@ModifyLocalGatewayRouteResponse' {} a -> s {route = a} :: ModifyLocalGatewayRouteResponse)
+
+-- | The response's http status code.
+modifyLocalGatewayRouteResponse_httpStatus :: Lens.Lens' ModifyLocalGatewayRouteResponse Prelude.Int
+modifyLocalGatewayRouteResponse_httpStatus = Lens.lens (\ModifyLocalGatewayRouteResponse' {httpStatus} -> httpStatus) (\s@ModifyLocalGatewayRouteResponse' {} a -> s {httpStatus = a} :: ModifyLocalGatewayRouteResponse)
+
+instance
+  Prelude.NFData
+    ModifyLocalGatewayRouteResponse
+  where
+  rnf ModifyLocalGatewayRouteResponse' {..} =
+    Prelude.rnf route
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyManagedPrefixList.hs b/gen/Amazonka/EC2/ModifyManagedPrefixList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyManagedPrefixList.hs
@@ -0,0 +1,283 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyManagedPrefixList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified managed prefix list.
+--
+-- Adding or removing entries in a prefix list creates a new version of the
+-- prefix list. Changing the name of the prefix list does not affect the
+-- version.
+--
+-- If you specify a current version number that does not match the true
+-- current version number, the request fails.
+module Amazonka.EC2.ModifyManagedPrefixList
+  ( -- * Creating a Request
+    ModifyManagedPrefixList (..),
+    newModifyManagedPrefixList,
+
+    -- * Request Lenses
+    modifyManagedPrefixList_addEntries,
+    modifyManagedPrefixList_currentVersion,
+    modifyManagedPrefixList_dryRun,
+    modifyManagedPrefixList_maxEntries,
+    modifyManagedPrefixList_prefixListName,
+    modifyManagedPrefixList_removeEntries,
+    modifyManagedPrefixList_prefixListId,
+
+    -- * Destructuring the Response
+    ModifyManagedPrefixListResponse (..),
+    newModifyManagedPrefixListResponse,
+
+    -- * Response Lenses
+    modifyManagedPrefixListResponse_prefixList,
+    modifyManagedPrefixListResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyManagedPrefixList' smart constructor.
+data ModifyManagedPrefixList = ModifyManagedPrefixList'
+  { -- | One or more entries to add to the prefix list.
+    addEntries :: Prelude.Maybe [AddPrefixListEntry],
+    -- | The current version of the prefix list.
+    currentVersion :: Prelude.Maybe Prelude.Integer,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of entries for the prefix list. You cannot modify the
+    -- entries of a prefix list and modify the size of a prefix list at the
+    -- same time.
+    --
+    -- If any of the resources that reference the prefix list cannot support
+    -- the new maximum size, the modify operation fails. Check the state
+    -- message for the IDs of the first ten resources that do not support the
+    -- new maximum size.
+    maxEntries :: Prelude.Maybe Prelude.Int,
+    -- | A name for the prefix list.
+    prefixListName :: Prelude.Maybe Prelude.Text,
+    -- | One or more entries to remove from the prefix list.
+    removeEntries :: Prelude.Maybe [RemovePrefixListEntry],
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyManagedPrefixList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addEntries', 'modifyManagedPrefixList_addEntries' - One or more entries to add to the prefix list.
+--
+-- 'currentVersion', 'modifyManagedPrefixList_currentVersion' - The current version of the prefix list.
+--
+-- 'dryRun', 'modifyManagedPrefixList_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxEntries', 'modifyManagedPrefixList_maxEntries' - The maximum number of entries for the prefix list. You cannot modify the
+-- entries of a prefix list and modify the size of a prefix list at the
+-- same time.
+--
+-- If any of the resources that reference the prefix list cannot support
+-- the new maximum size, the modify operation fails. Check the state
+-- message for the IDs of the first ten resources that do not support the
+-- new maximum size.
+--
+-- 'prefixListName', 'modifyManagedPrefixList_prefixListName' - A name for the prefix list.
+--
+-- 'removeEntries', 'modifyManagedPrefixList_removeEntries' - One or more entries to remove from the prefix list.
+--
+-- 'prefixListId', 'modifyManagedPrefixList_prefixListId' - The ID of the prefix list.
+newModifyManagedPrefixList ::
+  -- | 'prefixListId'
+  Prelude.Text ->
+  ModifyManagedPrefixList
+newModifyManagedPrefixList pPrefixListId_ =
+  ModifyManagedPrefixList'
+    { addEntries =
+        Prelude.Nothing,
+      currentVersion = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      maxEntries = Prelude.Nothing,
+      prefixListName = Prelude.Nothing,
+      removeEntries = Prelude.Nothing,
+      prefixListId = pPrefixListId_
+    }
+
+-- | One or more entries to add to the prefix list.
+modifyManagedPrefixList_addEntries :: Lens.Lens' ModifyManagedPrefixList (Prelude.Maybe [AddPrefixListEntry])
+modifyManagedPrefixList_addEntries = Lens.lens (\ModifyManagedPrefixList' {addEntries} -> addEntries) (\s@ModifyManagedPrefixList' {} a -> s {addEntries = a} :: ModifyManagedPrefixList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current version of the prefix list.
+modifyManagedPrefixList_currentVersion :: Lens.Lens' ModifyManagedPrefixList (Prelude.Maybe Prelude.Integer)
+modifyManagedPrefixList_currentVersion = Lens.lens (\ModifyManagedPrefixList' {currentVersion} -> currentVersion) (\s@ModifyManagedPrefixList' {} a -> s {currentVersion = a} :: ModifyManagedPrefixList)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyManagedPrefixList_dryRun :: Lens.Lens' ModifyManagedPrefixList (Prelude.Maybe Prelude.Bool)
+modifyManagedPrefixList_dryRun = Lens.lens (\ModifyManagedPrefixList' {dryRun} -> dryRun) (\s@ModifyManagedPrefixList' {} a -> s {dryRun = a} :: ModifyManagedPrefixList)
+
+-- | The maximum number of entries for the prefix list. You cannot modify the
+-- entries of a prefix list and modify the size of a prefix list at the
+-- same time.
+--
+-- If any of the resources that reference the prefix list cannot support
+-- the new maximum size, the modify operation fails. Check the state
+-- message for the IDs of the first ten resources that do not support the
+-- new maximum size.
+modifyManagedPrefixList_maxEntries :: Lens.Lens' ModifyManagedPrefixList (Prelude.Maybe Prelude.Int)
+modifyManagedPrefixList_maxEntries = Lens.lens (\ModifyManagedPrefixList' {maxEntries} -> maxEntries) (\s@ModifyManagedPrefixList' {} a -> s {maxEntries = a} :: ModifyManagedPrefixList)
+
+-- | A name for the prefix list.
+modifyManagedPrefixList_prefixListName :: Lens.Lens' ModifyManagedPrefixList (Prelude.Maybe Prelude.Text)
+modifyManagedPrefixList_prefixListName = Lens.lens (\ModifyManagedPrefixList' {prefixListName} -> prefixListName) (\s@ModifyManagedPrefixList' {} a -> s {prefixListName = a} :: ModifyManagedPrefixList)
+
+-- | One or more entries to remove from the prefix list.
+modifyManagedPrefixList_removeEntries :: Lens.Lens' ModifyManagedPrefixList (Prelude.Maybe [RemovePrefixListEntry])
+modifyManagedPrefixList_removeEntries = Lens.lens (\ModifyManagedPrefixList' {removeEntries} -> removeEntries) (\s@ModifyManagedPrefixList' {} a -> s {removeEntries = a} :: ModifyManagedPrefixList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the prefix list.
+modifyManagedPrefixList_prefixListId :: Lens.Lens' ModifyManagedPrefixList Prelude.Text
+modifyManagedPrefixList_prefixListId = Lens.lens (\ModifyManagedPrefixList' {prefixListId} -> prefixListId) (\s@ModifyManagedPrefixList' {} a -> s {prefixListId = a} :: ModifyManagedPrefixList)
+
+instance Core.AWSRequest ModifyManagedPrefixList where
+  type
+    AWSResponse ModifyManagedPrefixList =
+      ModifyManagedPrefixListResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyManagedPrefixListResponse'
+            Prelude.<$> (x Data..@? "prefixList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyManagedPrefixList where
+  hashWithSalt _salt ModifyManagedPrefixList' {..} =
+    _salt
+      `Prelude.hashWithSalt` addEntries
+      `Prelude.hashWithSalt` currentVersion
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxEntries
+      `Prelude.hashWithSalt` prefixListName
+      `Prelude.hashWithSalt` removeEntries
+      `Prelude.hashWithSalt` prefixListId
+
+instance Prelude.NFData ModifyManagedPrefixList where
+  rnf ModifyManagedPrefixList' {..} =
+    Prelude.rnf addEntries
+      `Prelude.seq` Prelude.rnf currentVersion
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxEntries
+      `Prelude.seq` Prelude.rnf prefixListName
+      `Prelude.seq` Prelude.rnf removeEntries
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance Data.ToHeaders ModifyManagedPrefixList where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyManagedPrefixList where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyManagedPrefixList where
+  toQuery ModifyManagedPrefixList' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyManagedPrefixList" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          (Data.toQueryList "AddEntry" Prelude.<$> addEntries),
+        "CurrentVersion" Data.=: currentVersion,
+        "DryRun" Data.=: dryRun,
+        "MaxEntries" Data.=: maxEntries,
+        "PrefixListName" Data.=: prefixListName,
+        Data.toQuery
+          ( Data.toQueryList "RemoveEntry"
+              Prelude.<$> removeEntries
+          ),
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newModifyManagedPrefixListResponse' smart constructor.
+data ModifyManagedPrefixListResponse = ModifyManagedPrefixListResponse'
+  { -- | Information about the prefix list.
+    prefixList :: Prelude.Maybe ManagedPrefixList,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyManagedPrefixListResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'prefixList', 'modifyManagedPrefixListResponse_prefixList' - Information about the prefix list.
+--
+-- 'httpStatus', 'modifyManagedPrefixListResponse_httpStatus' - The response's http status code.
+newModifyManagedPrefixListResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyManagedPrefixListResponse
+newModifyManagedPrefixListResponse pHttpStatus_ =
+  ModifyManagedPrefixListResponse'
+    { prefixList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the prefix list.
+modifyManagedPrefixListResponse_prefixList :: Lens.Lens' ModifyManagedPrefixListResponse (Prelude.Maybe ManagedPrefixList)
+modifyManagedPrefixListResponse_prefixList = Lens.lens (\ModifyManagedPrefixListResponse' {prefixList} -> prefixList) (\s@ModifyManagedPrefixListResponse' {} a -> s {prefixList = a} :: ModifyManagedPrefixListResponse)
+
+-- | The response's http status code.
+modifyManagedPrefixListResponse_httpStatus :: Lens.Lens' ModifyManagedPrefixListResponse Prelude.Int
+modifyManagedPrefixListResponse_httpStatus = Lens.lens (\ModifyManagedPrefixListResponse' {httpStatus} -> httpStatus) (\s@ModifyManagedPrefixListResponse' {} a -> s {httpStatus = a} :: ModifyManagedPrefixListResponse)
+
+instance
+  Prelude.NFData
+    ModifyManagedPrefixListResponse
+  where
+  rnf ModifyManagedPrefixListResponse' {..} =
+    Prelude.rnf prefixList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyNetworkInterfaceAttribute.hs b/gen/Amazonka/EC2/ModifyNetworkInterfaceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyNetworkInterfaceAttribute.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyNetworkInterfaceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified network interface attribute. You can specify only
+-- one attribute at a time. You can use this action to attach and detach
+-- security groups from an existing EC2 instance.
+module Amazonka.EC2.ModifyNetworkInterfaceAttribute
+  ( -- * Creating a Request
+    ModifyNetworkInterfaceAttribute (..),
+    newModifyNetworkInterfaceAttribute,
+
+    -- * Request Lenses
+    modifyNetworkInterfaceAttribute_attachment,
+    modifyNetworkInterfaceAttribute_description,
+    modifyNetworkInterfaceAttribute_dryRun,
+    modifyNetworkInterfaceAttribute_enaSrdSpecification,
+    modifyNetworkInterfaceAttribute_groups,
+    modifyNetworkInterfaceAttribute_sourceDestCheck,
+    modifyNetworkInterfaceAttribute_networkInterfaceId,
+
+    -- * Destructuring the Response
+    ModifyNetworkInterfaceAttributeResponse (..),
+    newModifyNetworkInterfaceAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ModifyNetworkInterfaceAttribute.
+--
+-- /See:/ 'newModifyNetworkInterfaceAttribute' smart constructor.
+data ModifyNetworkInterfaceAttribute = ModifyNetworkInterfaceAttribute'
+  { -- | Information about the interface attachment. If modifying the
+    -- @delete on termination@ attribute, you must specify the ID of the
+    -- interface attachment.
+    attachment :: Prelude.Maybe NetworkInterfaceAttachmentChanges,
+    -- | A description for the network interface.
+    description :: Prelude.Maybe AttributeValue,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Updates the ENA Express configuration for the network interface that’s
+    -- attached to the instance.
+    enaSrdSpecification :: Prelude.Maybe EnaSrdSpecification,
+    -- | Changes the security groups for the network interface. The new set of
+    -- groups you specify replaces the current set. You must specify at least
+    -- one group, even if it\'s just the default security group in the VPC. You
+    -- must specify the ID of the security group, not the name.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | Enable or disable source\/destination checks, which ensure that the
+    -- instance is either the source or the destination of any traffic that it
+    -- receives. If the value is @true@, source\/destination checks are
+    -- enabled; otherwise, they are disabled. The default value is @true@. You
+    -- must disable source\/destination checks if the instance runs services
+    -- such as network address translation, routing, or firewalls.
+    sourceDestCheck :: Prelude.Maybe AttributeBooleanValue,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyNetworkInterfaceAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachment', 'modifyNetworkInterfaceAttribute_attachment' - Information about the interface attachment. If modifying the
+-- @delete on termination@ attribute, you must specify the ID of the
+-- interface attachment.
+--
+-- 'description', 'modifyNetworkInterfaceAttribute_description' - A description for the network interface.
+--
+-- 'dryRun', 'modifyNetworkInterfaceAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'enaSrdSpecification', 'modifyNetworkInterfaceAttribute_enaSrdSpecification' - Updates the ENA Express configuration for the network interface that’s
+-- attached to the instance.
+--
+-- 'groups', 'modifyNetworkInterfaceAttribute_groups' - Changes the security groups for the network interface. The new set of
+-- groups you specify replaces the current set. You must specify at least
+-- one group, even if it\'s just the default security group in the VPC. You
+-- must specify the ID of the security group, not the name.
+--
+-- 'sourceDestCheck', 'modifyNetworkInterfaceAttribute_sourceDestCheck' - Enable or disable source\/destination checks, which ensure that the
+-- instance is either the source or the destination of any traffic that it
+-- receives. If the value is @true@, source\/destination checks are
+-- enabled; otherwise, they are disabled. The default value is @true@. You
+-- must disable source\/destination checks if the instance runs services
+-- such as network address translation, routing, or firewalls.
+--
+-- 'networkInterfaceId', 'modifyNetworkInterfaceAttribute_networkInterfaceId' - The ID of the network interface.
+newModifyNetworkInterfaceAttribute ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  ModifyNetworkInterfaceAttribute
+newModifyNetworkInterfaceAttribute
+  pNetworkInterfaceId_ =
+    ModifyNetworkInterfaceAttribute'
+      { attachment =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        enaSrdSpecification = Prelude.Nothing,
+        groups = Prelude.Nothing,
+        sourceDestCheck = Prelude.Nothing,
+        networkInterfaceId = pNetworkInterfaceId_
+      }
+
+-- | Information about the interface attachment. If modifying the
+-- @delete on termination@ attribute, you must specify the ID of the
+-- interface attachment.
+modifyNetworkInterfaceAttribute_attachment :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe NetworkInterfaceAttachmentChanges)
+modifyNetworkInterfaceAttribute_attachment = Lens.lens (\ModifyNetworkInterfaceAttribute' {attachment} -> attachment) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {attachment = a} :: ModifyNetworkInterfaceAttribute)
+
+-- | A description for the network interface.
+modifyNetworkInterfaceAttribute_description :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe AttributeValue)
+modifyNetworkInterfaceAttribute_description = Lens.lens (\ModifyNetworkInterfaceAttribute' {description} -> description) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {description = a} :: ModifyNetworkInterfaceAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyNetworkInterfaceAttribute_dryRun :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe Prelude.Bool)
+modifyNetworkInterfaceAttribute_dryRun = Lens.lens (\ModifyNetworkInterfaceAttribute' {dryRun} -> dryRun) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {dryRun = a} :: ModifyNetworkInterfaceAttribute)
+
+-- | Updates the ENA Express configuration for the network interface that’s
+-- attached to the instance.
+modifyNetworkInterfaceAttribute_enaSrdSpecification :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe EnaSrdSpecification)
+modifyNetworkInterfaceAttribute_enaSrdSpecification = Lens.lens (\ModifyNetworkInterfaceAttribute' {enaSrdSpecification} -> enaSrdSpecification) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {enaSrdSpecification = a} :: ModifyNetworkInterfaceAttribute)
+
+-- | Changes the security groups for the network interface. The new set of
+-- groups you specify replaces the current set. You must specify at least
+-- one group, even if it\'s just the default security group in the VPC. You
+-- must specify the ID of the security group, not the name.
+modifyNetworkInterfaceAttribute_groups :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe [Prelude.Text])
+modifyNetworkInterfaceAttribute_groups = Lens.lens (\ModifyNetworkInterfaceAttribute' {groups} -> groups) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {groups = a} :: ModifyNetworkInterfaceAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | Enable or disable source\/destination checks, which ensure that the
+-- instance is either the source or the destination of any traffic that it
+-- receives. If the value is @true@, source\/destination checks are
+-- enabled; otherwise, they are disabled. The default value is @true@. You
+-- must disable source\/destination checks if the instance runs services
+-- such as network address translation, routing, or firewalls.
+modifyNetworkInterfaceAttribute_sourceDestCheck :: Lens.Lens' ModifyNetworkInterfaceAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyNetworkInterfaceAttribute_sourceDestCheck = Lens.lens (\ModifyNetworkInterfaceAttribute' {sourceDestCheck} -> sourceDestCheck) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {sourceDestCheck = a} :: ModifyNetworkInterfaceAttribute)
+
+-- | The ID of the network interface.
+modifyNetworkInterfaceAttribute_networkInterfaceId :: Lens.Lens' ModifyNetworkInterfaceAttribute Prelude.Text
+modifyNetworkInterfaceAttribute_networkInterfaceId = Lens.lens (\ModifyNetworkInterfaceAttribute' {networkInterfaceId} -> networkInterfaceId) (\s@ModifyNetworkInterfaceAttribute' {} a -> s {networkInterfaceId = a} :: ModifyNetworkInterfaceAttribute)
+
+instance
+  Core.AWSRequest
+    ModifyNetworkInterfaceAttribute
+  where
+  type
+    AWSResponse ModifyNetworkInterfaceAttribute =
+      ModifyNetworkInterfaceAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ModifyNetworkInterfaceAttributeResponse'
+
+instance
+  Prelude.Hashable
+    ModifyNetworkInterfaceAttribute
+  where
+  hashWithSalt
+    _salt
+    ModifyNetworkInterfaceAttribute' {..} =
+      _salt
+        `Prelude.hashWithSalt` attachment
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` enaSrdSpecification
+        `Prelude.hashWithSalt` groups
+        `Prelude.hashWithSalt` sourceDestCheck
+        `Prelude.hashWithSalt` networkInterfaceId
+
+instance
+  Prelude.NFData
+    ModifyNetworkInterfaceAttribute
+  where
+  rnf ModifyNetworkInterfaceAttribute' {..} =
+    Prelude.rnf attachment
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf enaSrdSpecification
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf sourceDestCheck
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance
+  Data.ToHeaders
+    ModifyNetworkInterfaceAttribute
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyNetworkInterfaceAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyNetworkInterfaceAttribute where
+  toQuery ModifyNetworkInterfaceAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyNetworkInterfaceAttribute" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attachment" Data.=: attachment,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "EnaSrdSpecification" Data.=: enaSrdSpecification,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> groups
+          ),
+        "SourceDestCheck" Data.=: sourceDestCheck,
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newModifyNetworkInterfaceAttributeResponse' smart constructor.
+data ModifyNetworkInterfaceAttributeResponse = ModifyNetworkInterfaceAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyNetworkInterfaceAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyNetworkInterfaceAttributeResponse ::
+  ModifyNetworkInterfaceAttributeResponse
+newModifyNetworkInterfaceAttributeResponse =
+  ModifyNetworkInterfaceAttributeResponse'
+
+instance
+  Prelude.NFData
+    ModifyNetworkInterfaceAttributeResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyPrivateDnsNameOptions.hs b/gen/Amazonka/EC2/ModifyPrivateDnsNameOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyPrivateDnsNameOptions.hs
@@ -0,0 +1,247 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyPrivateDnsNameOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the options for instance hostnames for the specified instance.
+module Amazonka.EC2.ModifyPrivateDnsNameOptions
+  ( -- * Creating a Request
+    ModifyPrivateDnsNameOptions (..),
+    newModifyPrivateDnsNameOptions,
+
+    -- * Request Lenses
+    modifyPrivateDnsNameOptions_dryRun,
+    modifyPrivateDnsNameOptions_enableResourceNameDnsAAAARecord,
+    modifyPrivateDnsNameOptions_enableResourceNameDnsARecord,
+    modifyPrivateDnsNameOptions_instanceId,
+    modifyPrivateDnsNameOptions_privateDnsHostnameType,
+
+    -- * Destructuring the Response
+    ModifyPrivateDnsNameOptionsResponse (..),
+    newModifyPrivateDnsNameOptionsResponse,
+
+    -- * Response Lenses
+    modifyPrivateDnsNameOptionsResponse_return,
+    modifyPrivateDnsNameOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyPrivateDnsNameOptions' smart constructor.
+data ModifyPrivateDnsNameOptions = ModifyPrivateDnsNameOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecord :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecord :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of hostname for EC2 instances. For IPv4 only subnets, an
+    -- instance DNS name must be based on the instance IPv4 address. For IPv6
+    -- only subnets, an instance DNS name must be based on the instance ID. For
+    -- dual-stack subnets, you can specify whether DNS names use the instance
+    -- IPv4 address or the instance ID.
+    privateDnsHostnameType :: Prelude.Maybe HostnameType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyPrivateDnsNameOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyPrivateDnsNameOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'enableResourceNameDnsAAAARecord', 'modifyPrivateDnsNameOptions_enableResourceNameDnsAAAARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecord', 'modifyPrivateDnsNameOptions_enableResourceNameDnsARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'instanceId', 'modifyPrivateDnsNameOptions_instanceId' - The ID of the instance.
+--
+-- 'privateDnsHostnameType', 'modifyPrivateDnsNameOptions_privateDnsHostnameType' - The type of hostname for EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- only subnets, an instance DNS name must be based on the instance ID. For
+-- dual-stack subnets, you can specify whether DNS names use the instance
+-- IPv4 address or the instance ID.
+newModifyPrivateDnsNameOptions ::
+  ModifyPrivateDnsNameOptions
+newModifyPrivateDnsNameOptions =
+  ModifyPrivateDnsNameOptions'
+    { dryRun =
+        Prelude.Nothing,
+      enableResourceNameDnsAAAARecord =
+        Prelude.Nothing,
+      enableResourceNameDnsARecord = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      privateDnsHostnameType = Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyPrivateDnsNameOptions_dryRun :: Lens.Lens' ModifyPrivateDnsNameOptions (Prelude.Maybe Prelude.Bool)
+modifyPrivateDnsNameOptions_dryRun = Lens.lens (\ModifyPrivateDnsNameOptions' {dryRun} -> dryRun) (\s@ModifyPrivateDnsNameOptions' {} a -> s {dryRun = a} :: ModifyPrivateDnsNameOptions)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+modifyPrivateDnsNameOptions_enableResourceNameDnsAAAARecord :: Lens.Lens' ModifyPrivateDnsNameOptions (Prelude.Maybe Prelude.Bool)
+modifyPrivateDnsNameOptions_enableResourceNameDnsAAAARecord = Lens.lens (\ModifyPrivateDnsNameOptions' {enableResourceNameDnsAAAARecord} -> enableResourceNameDnsAAAARecord) (\s@ModifyPrivateDnsNameOptions' {} a -> s {enableResourceNameDnsAAAARecord = a} :: ModifyPrivateDnsNameOptions)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+modifyPrivateDnsNameOptions_enableResourceNameDnsARecord :: Lens.Lens' ModifyPrivateDnsNameOptions (Prelude.Maybe Prelude.Bool)
+modifyPrivateDnsNameOptions_enableResourceNameDnsARecord = Lens.lens (\ModifyPrivateDnsNameOptions' {enableResourceNameDnsARecord} -> enableResourceNameDnsARecord) (\s@ModifyPrivateDnsNameOptions' {} a -> s {enableResourceNameDnsARecord = a} :: ModifyPrivateDnsNameOptions)
+
+-- | The ID of the instance.
+modifyPrivateDnsNameOptions_instanceId :: Lens.Lens' ModifyPrivateDnsNameOptions (Prelude.Maybe Prelude.Text)
+modifyPrivateDnsNameOptions_instanceId = Lens.lens (\ModifyPrivateDnsNameOptions' {instanceId} -> instanceId) (\s@ModifyPrivateDnsNameOptions' {} a -> s {instanceId = a} :: ModifyPrivateDnsNameOptions)
+
+-- | The type of hostname for EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- only subnets, an instance DNS name must be based on the instance ID. For
+-- dual-stack subnets, you can specify whether DNS names use the instance
+-- IPv4 address or the instance ID.
+modifyPrivateDnsNameOptions_privateDnsHostnameType :: Lens.Lens' ModifyPrivateDnsNameOptions (Prelude.Maybe HostnameType)
+modifyPrivateDnsNameOptions_privateDnsHostnameType = Lens.lens (\ModifyPrivateDnsNameOptions' {privateDnsHostnameType} -> privateDnsHostnameType) (\s@ModifyPrivateDnsNameOptions' {} a -> s {privateDnsHostnameType = a} :: ModifyPrivateDnsNameOptions)
+
+instance Core.AWSRequest ModifyPrivateDnsNameOptions where
+  type
+    AWSResponse ModifyPrivateDnsNameOptions =
+      ModifyPrivateDnsNameOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyPrivateDnsNameOptionsResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyPrivateDnsNameOptions where
+  hashWithSalt _salt ModifyPrivateDnsNameOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` enableResourceNameDnsAAAARecord
+      `Prelude.hashWithSalt` enableResourceNameDnsARecord
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` privateDnsHostnameType
+
+instance Prelude.NFData ModifyPrivateDnsNameOptions where
+  rnf ModifyPrivateDnsNameOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsAAAARecord
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecord
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf privateDnsHostnameType
+
+instance Data.ToHeaders ModifyPrivateDnsNameOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyPrivateDnsNameOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyPrivateDnsNameOptions where
+  toQuery ModifyPrivateDnsNameOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyPrivateDnsNameOptions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "EnableResourceNameDnsAAAARecord"
+          Data.=: enableResourceNameDnsAAAARecord,
+        "EnableResourceNameDnsARecord"
+          Data.=: enableResourceNameDnsARecord,
+        "InstanceId" Data.=: instanceId,
+        "PrivateDnsHostnameType"
+          Data.=: privateDnsHostnameType
+      ]
+
+-- | /See:/ 'newModifyPrivateDnsNameOptionsResponse' smart constructor.
+data ModifyPrivateDnsNameOptionsResponse = ModifyPrivateDnsNameOptionsResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyPrivateDnsNameOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyPrivateDnsNameOptionsResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyPrivateDnsNameOptionsResponse_httpStatus' - The response's http status code.
+newModifyPrivateDnsNameOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyPrivateDnsNameOptionsResponse
+newModifyPrivateDnsNameOptionsResponse pHttpStatus_ =
+  ModifyPrivateDnsNameOptionsResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyPrivateDnsNameOptionsResponse_return :: Lens.Lens' ModifyPrivateDnsNameOptionsResponse (Prelude.Maybe Prelude.Bool)
+modifyPrivateDnsNameOptionsResponse_return = Lens.lens (\ModifyPrivateDnsNameOptionsResponse' {return'} -> return') (\s@ModifyPrivateDnsNameOptionsResponse' {} a -> s {return' = a} :: ModifyPrivateDnsNameOptionsResponse)
+
+-- | The response's http status code.
+modifyPrivateDnsNameOptionsResponse_httpStatus :: Lens.Lens' ModifyPrivateDnsNameOptionsResponse Prelude.Int
+modifyPrivateDnsNameOptionsResponse_httpStatus = Lens.lens (\ModifyPrivateDnsNameOptionsResponse' {httpStatus} -> httpStatus) (\s@ModifyPrivateDnsNameOptionsResponse' {} a -> s {httpStatus = a} :: ModifyPrivateDnsNameOptionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyPrivateDnsNameOptionsResponse
+  where
+  rnf ModifyPrivateDnsNameOptionsResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyReservedInstances.hs b/gen/Amazonka/EC2/ModifyReservedInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyReservedInstances.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyReservedInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the configuration of your Reserved Instances, such as the
+-- Availability Zone, instance count, or instance type. The Reserved
+-- Instances to be modified must be identical, except for Availability
+-- Zone, network platform, and instance type.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html Modifying Reserved Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ModifyReservedInstances
+  ( -- * Creating a Request
+    ModifyReservedInstances (..),
+    newModifyReservedInstances,
+
+    -- * Request Lenses
+    modifyReservedInstances_clientToken,
+    modifyReservedInstances_reservedInstancesIds,
+    modifyReservedInstances_targetConfigurations,
+
+    -- * Destructuring the Response
+    ModifyReservedInstancesResponse (..),
+    newModifyReservedInstancesResponse,
+
+    -- * Response Lenses
+    modifyReservedInstancesResponse_reservedInstancesModificationId,
+    modifyReservedInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ModifyReservedInstances.
+--
+-- /See:/ 'newModifyReservedInstances' smart constructor.
+data ModifyReservedInstances = ModifyReservedInstances'
+  { -- | A unique, case-sensitive token you provide to ensure idempotency of your
+    -- modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Reserved Instances to modify.
+    reservedInstancesIds :: [Prelude.Text],
+    -- | The configuration settings for the Reserved Instances to modify.
+    targetConfigurations :: [ReservedInstancesConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyReservedInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyReservedInstances_clientToken' - A unique, case-sensitive token you provide to ensure idempotency of your
+-- modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'reservedInstancesIds', 'modifyReservedInstances_reservedInstancesIds' - The IDs of the Reserved Instances to modify.
+--
+-- 'targetConfigurations', 'modifyReservedInstances_targetConfigurations' - The configuration settings for the Reserved Instances to modify.
+newModifyReservedInstances ::
+  ModifyReservedInstances
+newModifyReservedInstances =
+  ModifyReservedInstances'
+    { clientToken =
+        Prelude.Nothing,
+      reservedInstancesIds = Prelude.mempty,
+      targetConfigurations = Prelude.mempty
+    }
+
+-- | A unique, case-sensitive token you provide to ensure idempotency of your
+-- modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyReservedInstances_clientToken :: Lens.Lens' ModifyReservedInstances (Prelude.Maybe Prelude.Text)
+modifyReservedInstances_clientToken = Lens.lens (\ModifyReservedInstances' {clientToken} -> clientToken) (\s@ModifyReservedInstances' {} a -> s {clientToken = a} :: ModifyReservedInstances)
+
+-- | The IDs of the Reserved Instances to modify.
+modifyReservedInstances_reservedInstancesIds :: Lens.Lens' ModifyReservedInstances [Prelude.Text]
+modifyReservedInstances_reservedInstancesIds = Lens.lens (\ModifyReservedInstances' {reservedInstancesIds} -> reservedInstancesIds) (\s@ModifyReservedInstances' {} a -> s {reservedInstancesIds = a} :: ModifyReservedInstances) Prelude.. Lens.coerced
+
+-- | The configuration settings for the Reserved Instances to modify.
+modifyReservedInstances_targetConfigurations :: Lens.Lens' ModifyReservedInstances [ReservedInstancesConfiguration]
+modifyReservedInstances_targetConfigurations = Lens.lens (\ModifyReservedInstances' {targetConfigurations} -> targetConfigurations) (\s@ModifyReservedInstances' {} a -> s {targetConfigurations = a} :: ModifyReservedInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest ModifyReservedInstances where
+  type
+    AWSResponse ModifyReservedInstances =
+      ModifyReservedInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyReservedInstancesResponse'
+            Prelude.<$> (x Data..@? "reservedInstancesModificationId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyReservedInstances where
+  hashWithSalt _salt ModifyReservedInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` reservedInstancesIds
+      `Prelude.hashWithSalt` targetConfigurations
+
+instance Prelude.NFData ModifyReservedInstances where
+  rnf ModifyReservedInstances' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf reservedInstancesIds
+      `Prelude.seq` Prelude.rnf targetConfigurations
+
+instance Data.ToHeaders ModifyReservedInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyReservedInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyReservedInstances where
+  toQuery ModifyReservedInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyReservedInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        Data.toQueryList
+          "ReservedInstancesId"
+          reservedInstancesIds,
+        Data.toQueryList
+          "ReservedInstancesConfigurationSetItemType"
+          targetConfigurations
+      ]
+
+-- | Contains the output of ModifyReservedInstances.
+--
+-- /See:/ 'newModifyReservedInstancesResponse' smart constructor.
+data ModifyReservedInstancesResponse = ModifyReservedInstancesResponse'
+  { -- | The ID for the modification.
+    reservedInstancesModificationId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyReservedInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesModificationId', 'modifyReservedInstancesResponse_reservedInstancesModificationId' - The ID for the modification.
+--
+-- 'httpStatus', 'modifyReservedInstancesResponse_httpStatus' - The response's http status code.
+newModifyReservedInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyReservedInstancesResponse
+newModifyReservedInstancesResponse pHttpStatus_ =
+  ModifyReservedInstancesResponse'
+    { reservedInstancesModificationId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID for the modification.
+modifyReservedInstancesResponse_reservedInstancesModificationId :: Lens.Lens' ModifyReservedInstancesResponse (Prelude.Maybe Prelude.Text)
+modifyReservedInstancesResponse_reservedInstancesModificationId = Lens.lens (\ModifyReservedInstancesResponse' {reservedInstancesModificationId} -> reservedInstancesModificationId) (\s@ModifyReservedInstancesResponse' {} a -> s {reservedInstancesModificationId = a} :: ModifyReservedInstancesResponse)
+
+-- | The response's http status code.
+modifyReservedInstancesResponse_httpStatus :: Lens.Lens' ModifyReservedInstancesResponse Prelude.Int
+modifyReservedInstancesResponse_httpStatus = Lens.lens (\ModifyReservedInstancesResponse' {httpStatus} -> httpStatus) (\s@ModifyReservedInstancesResponse' {} a -> s {httpStatus = a} :: ModifyReservedInstancesResponse)
+
+instance
+  Prelude.NFData
+    ModifyReservedInstancesResponse
+  where
+  rnf ModifyReservedInstancesResponse' {..} =
+    Prelude.rnf reservedInstancesModificationId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifySecurityGroupRules.hs b/gen/Amazonka/EC2/ModifySecurityGroupRules.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifySecurityGroupRules.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifySecurityGroupRules
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the rules of a security group.
+module Amazonka.EC2.ModifySecurityGroupRules
+  ( -- * Creating a Request
+    ModifySecurityGroupRules (..),
+    newModifySecurityGroupRules,
+
+    -- * Request Lenses
+    modifySecurityGroupRules_dryRun,
+    modifySecurityGroupRules_groupId,
+    modifySecurityGroupRules_securityGroupRules,
+
+    -- * Destructuring the Response
+    ModifySecurityGroupRulesResponse (..),
+    newModifySecurityGroupRulesResponse,
+
+    -- * Response Lenses
+    modifySecurityGroupRulesResponse_return,
+    modifySecurityGroupRulesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifySecurityGroupRules' smart constructor.
+data ModifySecurityGroupRules = ModifySecurityGroupRules'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the security group.
+    groupId :: Prelude.Text,
+    -- | Information about the security group properties to update.
+    securityGroupRules :: [SecurityGroupRuleUpdate]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySecurityGroupRules' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifySecurityGroupRules_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupId', 'modifySecurityGroupRules_groupId' - The ID of the security group.
+--
+-- 'securityGroupRules', 'modifySecurityGroupRules_securityGroupRules' - Information about the security group properties to update.
+newModifySecurityGroupRules ::
+  -- | 'groupId'
+  Prelude.Text ->
+  ModifySecurityGroupRules
+newModifySecurityGroupRules pGroupId_ =
+  ModifySecurityGroupRules'
+    { dryRun = Prelude.Nothing,
+      groupId = pGroupId_,
+      securityGroupRules = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifySecurityGroupRules_dryRun :: Lens.Lens' ModifySecurityGroupRules (Prelude.Maybe Prelude.Bool)
+modifySecurityGroupRules_dryRun = Lens.lens (\ModifySecurityGroupRules' {dryRun} -> dryRun) (\s@ModifySecurityGroupRules' {} a -> s {dryRun = a} :: ModifySecurityGroupRules)
+
+-- | The ID of the security group.
+modifySecurityGroupRules_groupId :: Lens.Lens' ModifySecurityGroupRules Prelude.Text
+modifySecurityGroupRules_groupId = Lens.lens (\ModifySecurityGroupRules' {groupId} -> groupId) (\s@ModifySecurityGroupRules' {} a -> s {groupId = a} :: ModifySecurityGroupRules)
+
+-- | Information about the security group properties to update.
+modifySecurityGroupRules_securityGroupRules :: Lens.Lens' ModifySecurityGroupRules [SecurityGroupRuleUpdate]
+modifySecurityGroupRules_securityGroupRules = Lens.lens (\ModifySecurityGroupRules' {securityGroupRules} -> securityGroupRules) (\s@ModifySecurityGroupRules' {} a -> s {securityGroupRules = a} :: ModifySecurityGroupRules) Prelude.. Lens.coerced
+
+instance Core.AWSRequest ModifySecurityGroupRules where
+  type
+    AWSResponse ModifySecurityGroupRules =
+      ModifySecurityGroupRulesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifySecurityGroupRulesResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifySecurityGroupRules where
+  hashWithSalt _salt ModifySecurityGroupRules' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` securityGroupRules
+
+instance Prelude.NFData ModifySecurityGroupRules where
+  rnf ModifySecurityGroupRules' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf securityGroupRules
+
+instance Data.ToHeaders ModifySecurityGroupRules where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifySecurityGroupRules where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySecurityGroupRules where
+  toQuery ModifySecurityGroupRules' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifySecurityGroupRules" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "GroupId" Data.=: groupId,
+        Data.toQueryList
+          "SecurityGroupRule"
+          securityGroupRules
+      ]
+
+-- | /See:/ 'newModifySecurityGroupRulesResponse' smart constructor.
+data ModifySecurityGroupRulesResponse = ModifySecurityGroupRulesResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySecurityGroupRulesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifySecurityGroupRulesResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'httpStatus', 'modifySecurityGroupRulesResponse_httpStatus' - The response's http status code.
+newModifySecurityGroupRulesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifySecurityGroupRulesResponse
+newModifySecurityGroupRulesResponse pHttpStatus_ =
+  ModifySecurityGroupRulesResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+modifySecurityGroupRulesResponse_return :: Lens.Lens' ModifySecurityGroupRulesResponse (Prelude.Maybe Prelude.Bool)
+modifySecurityGroupRulesResponse_return = Lens.lens (\ModifySecurityGroupRulesResponse' {return'} -> return') (\s@ModifySecurityGroupRulesResponse' {} a -> s {return' = a} :: ModifySecurityGroupRulesResponse)
+
+-- | The response's http status code.
+modifySecurityGroupRulesResponse_httpStatus :: Lens.Lens' ModifySecurityGroupRulesResponse Prelude.Int
+modifySecurityGroupRulesResponse_httpStatus = Lens.lens (\ModifySecurityGroupRulesResponse' {httpStatus} -> httpStatus) (\s@ModifySecurityGroupRulesResponse' {} a -> s {httpStatus = a} :: ModifySecurityGroupRulesResponse)
+
+instance
+  Prelude.NFData
+    ModifySecurityGroupRulesResponse
+  where
+  rnf ModifySecurityGroupRulesResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifySnapshotAttribute.hs b/gen/Amazonka/EC2/ModifySnapshotAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifySnapshotAttribute.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifySnapshotAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or removes permission settings for the specified snapshot. You may
+-- add or remove specified Amazon Web Services account IDs from a
+-- snapshot\'s list of create volume permissions, but you cannot do both in
+-- a single operation. If you need to both add and remove account IDs for a
+-- snapshot, you must use multiple operations. You can make up to 500
+-- modifications to a snapshot in a single operation.
+--
+-- Encrypted snapshots and snapshots with Amazon Web Services Marketplace
+-- product codes cannot be made public. Snapshots encrypted with your
+-- default KMS key cannot be shared with other accounts.
+--
+-- For more information about modifying snapshot permissions, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html Share a snapshot>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ModifySnapshotAttribute
+  ( -- * Creating a Request
+    ModifySnapshotAttribute (..),
+    newModifySnapshotAttribute,
+
+    -- * Request Lenses
+    modifySnapshotAttribute_attribute,
+    modifySnapshotAttribute_createVolumePermission,
+    modifySnapshotAttribute_dryRun,
+    modifySnapshotAttribute_groupNames,
+    modifySnapshotAttribute_operationType,
+    modifySnapshotAttribute_userIds,
+    modifySnapshotAttribute_snapshotId,
+
+    -- * Destructuring the Response
+    ModifySnapshotAttributeResponse (..),
+    newModifySnapshotAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifySnapshotAttribute' smart constructor.
+data ModifySnapshotAttribute = ModifySnapshotAttribute'
+  { -- | The snapshot attribute to modify. Only volume creation permissions can
+    -- be modified.
+    attribute :: Prelude.Maybe SnapshotAttributeName,
+    -- | A JSON representation of the snapshot attribute modification.
+    createVolumePermission :: Prelude.Maybe CreateVolumePermissionModifications,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The group to modify for the snapshot.
+    groupNames :: Prelude.Maybe [Prelude.Text],
+    -- | The type of operation to perform to the attribute.
+    operationType :: Prelude.Maybe OperationType,
+    -- | The account ID to modify for the snapshot.
+    userIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySnapshotAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'modifySnapshotAttribute_attribute' - The snapshot attribute to modify. Only volume creation permissions can
+-- be modified.
+--
+-- 'createVolumePermission', 'modifySnapshotAttribute_createVolumePermission' - A JSON representation of the snapshot attribute modification.
+--
+-- 'dryRun', 'modifySnapshotAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupNames', 'modifySnapshotAttribute_groupNames' - The group to modify for the snapshot.
+--
+-- 'operationType', 'modifySnapshotAttribute_operationType' - The type of operation to perform to the attribute.
+--
+-- 'userIds', 'modifySnapshotAttribute_userIds' - The account ID to modify for the snapshot.
+--
+-- 'snapshotId', 'modifySnapshotAttribute_snapshotId' - The ID of the snapshot.
+newModifySnapshotAttribute ::
+  -- | 'snapshotId'
+  Prelude.Text ->
+  ModifySnapshotAttribute
+newModifySnapshotAttribute pSnapshotId_ =
+  ModifySnapshotAttribute'
+    { attribute =
+        Prelude.Nothing,
+      createVolumePermission = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      groupNames = Prelude.Nothing,
+      operationType = Prelude.Nothing,
+      userIds = Prelude.Nothing,
+      snapshotId = pSnapshotId_
+    }
+
+-- | The snapshot attribute to modify. Only volume creation permissions can
+-- be modified.
+modifySnapshotAttribute_attribute :: Lens.Lens' ModifySnapshotAttribute (Prelude.Maybe SnapshotAttributeName)
+modifySnapshotAttribute_attribute = Lens.lens (\ModifySnapshotAttribute' {attribute} -> attribute) (\s@ModifySnapshotAttribute' {} a -> s {attribute = a} :: ModifySnapshotAttribute)
+
+-- | A JSON representation of the snapshot attribute modification.
+modifySnapshotAttribute_createVolumePermission :: Lens.Lens' ModifySnapshotAttribute (Prelude.Maybe CreateVolumePermissionModifications)
+modifySnapshotAttribute_createVolumePermission = Lens.lens (\ModifySnapshotAttribute' {createVolumePermission} -> createVolumePermission) (\s@ModifySnapshotAttribute' {} a -> s {createVolumePermission = a} :: ModifySnapshotAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifySnapshotAttribute_dryRun :: Lens.Lens' ModifySnapshotAttribute (Prelude.Maybe Prelude.Bool)
+modifySnapshotAttribute_dryRun = Lens.lens (\ModifySnapshotAttribute' {dryRun} -> dryRun) (\s@ModifySnapshotAttribute' {} a -> s {dryRun = a} :: ModifySnapshotAttribute)
+
+-- | The group to modify for the snapshot.
+modifySnapshotAttribute_groupNames :: Lens.Lens' ModifySnapshotAttribute (Prelude.Maybe [Prelude.Text])
+modifySnapshotAttribute_groupNames = Lens.lens (\ModifySnapshotAttribute' {groupNames} -> groupNames) (\s@ModifySnapshotAttribute' {} a -> s {groupNames = a} :: ModifySnapshotAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of operation to perform to the attribute.
+modifySnapshotAttribute_operationType :: Lens.Lens' ModifySnapshotAttribute (Prelude.Maybe OperationType)
+modifySnapshotAttribute_operationType = Lens.lens (\ModifySnapshotAttribute' {operationType} -> operationType) (\s@ModifySnapshotAttribute' {} a -> s {operationType = a} :: ModifySnapshotAttribute)
+
+-- | The account ID to modify for the snapshot.
+modifySnapshotAttribute_userIds :: Lens.Lens' ModifySnapshotAttribute (Prelude.Maybe [Prelude.Text])
+modifySnapshotAttribute_userIds = Lens.lens (\ModifySnapshotAttribute' {userIds} -> userIds) (\s@ModifySnapshotAttribute' {} a -> s {userIds = a} :: ModifySnapshotAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the snapshot.
+modifySnapshotAttribute_snapshotId :: Lens.Lens' ModifySnapshotAttribute Prelude.Text
+modifySnapshotAttribute_snapshotId = Lens.lens (\ModifySnapshotAttribute' {snapshotId} -> snapshotId) (\s@ModifySnapshotAttribute' {} a -> s {snapshotId = a} :: ModifySnapshotAttribute)
+
+instance Core.AWSRequest ModifySnapshotAttribute where
+  type
+    AWSResponse ModifySnapshotAttribute =
+      ModifySnapshotAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ModifySnapshotAttributeResponse'
+
+instance Prelude.Hashable ModifySnapshotAttribute where
+  hashWithSalt _salt ModifySnapshotAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` createVolumePermission
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` groupNames
+      `Prelude.hashWithSalt` operationType
+      `Prelude.hashWithSalt` userIds
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData ModifySnapshotAttribute where
+  rnf ModifySnapshotAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf createVolumePermission
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupNames
+      `Prelude.seq` Prelude.rnf operationType
+      `Prelude.seq` Prelude.rnf userIds
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders ModifySnapshotAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifySnapshotAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySnapshotAttribute where
+  toQuery ModifySnapshotAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifySnapshotAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attribute" Data.=: attribute,
+        "CreateVolumePermission"
+          Data.=: createVolumePermission,
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "UserGroup"
+              Prelude.<$> groupNames
+          ),
+        "OperationType" Data.=: operationType,
+        Data.toQuery
+          (Data.toQueryList "UserId" Prelude.<$> userIds),
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newModifySnapshotAttributeResponse' smart constructor.
+data ModifySnapshotAttributeResponse = ModifySnapshotAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySnapshotAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifySnapshotAttributeResponse ::
+  ModifySnapshotAttributeResponse
+newModifySnapshotAttributeResponse =
+  ModifySnapshotAttributeResponse'
+
+instance
+  Prelude.NFData
+    ModifySnapshotAttributeResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifySnapshotTier.hs b/gen/Amazonka/EC2/ModifySnapshotTier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifySnapshotTier.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifySnapshotTier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Archives an Amazon EBS snapshot. When you archive a snapshot, it is
+-- converted to a full snapshot that includes all of the blocks of data
+-- that were written to the volume at the time the snapshot was created,
+-- and moved from the standard tier to the archive tier. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshot-archive.html Archive Amazon EBS snapshots>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ModifySnapshotTier
+  ( -- * Creating a Request
+    ModifySnapshotTier (..),
+    newModifySnapshotTier,
+
+    -- * Request Lenses
+    modifySnapshotTier_dryRun,
+    modifySnapshotTier_storageTier,
+    modifySnapshotTier_snapshotId,
+
+    -- * Destructuring the Response
+    ModifySnapshotTierResponse (..),
+    newModifySnapshotTierResponse,
+
+    -- * Response Lenses
+    modifySnapshotTierResponse_snapshotId,
+    modifySnapshotTierResponse_tieringStartTime,
+    modifySnapshotTierResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifySnapshotTier' smart constructor.
+data ModifySnapshotTier = ModifySnapshotTier'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the storage tier. You must specify @archive@.
+    storageTier :: Prelude.Maybe TargetStorageTier,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySnapshotTier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifySnapshotTier_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'storageTier', 'modifySnapshotTier_storageTier' - The name of the storage tier. You must specify @archive@.
+--
+-- 'snapshotId', 'modifySnapshotTier_snapshotId' - The ID of the snapshot.
+newModifySnapshotTier ::
+  -- | 'snapshotId'
+  Prelude.Text ->
+  ModifySnapshotTier
+newModifySnapshotTier pSnapshotId_ =
+  ModifySnapshotTier'
+    { dryRun = Prelude.Nothing,
+      storageTier = Prelude.Nothing,
+      snapshotId = pSnapshotId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifySnapshotTier_dryRun :: Lens.Lens' ModifySnapshotTier (Prelude.Maybe Prelude.Bool)
+modifySnapshotTier_dryRun = Lens.lens (\ModifySnapshotTier' {dryRun} -> dryRun) (\s@ModifySnapshotTier' {} a -> s {dryRun = a} :: ModifySnapshotTier)
+
+-- | The name of the storage tier. You must specify @archive@.
+modifySnapshotTier_storageTier :: Lens.Lens' ModifySnapshotTier (Prelude.Maybe TargetStorageTier)
+modifySnapshotTier_storageTier = Lens.lens (\ModifySnapshotTier' {storageTier} -> storageTier) (\s@ModifySnapshotTier' {} a -> s {storageTier = a} :: ModifySnapshotTier)
+
+-- | The ID of the snapshot.
+modifySnapshotTier_snapshotId :: Lens.Lens' ModifySnapshotTier Prelude.Text
+modifySnapshotTier_snapshotId = Lens.lens (\ModifySnapshotTier' {snapshotId} -> snapshotId) (\s@ModifySnapshotTier' {} a -> s {snapshotId = a} :: ModifySnapshotTier)
+
+instance Core.AWSRequest ModifySnapshotTier where
+  type
+    AWSResponse ModifySnapshotTier =
+      ModifySnapshotTierResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifySnapshotTierResponse'
+            Prelude.<$> (x Data..@? "snapshotId")
+            Prelude.<*> (x Data..@? "tieringStartTime")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifySnapshotTier where
+  hashWithSalt _salt ModifySnapshotTier' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` storageTier
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData ModifySnapshotTier where
+  rnf ModifySnapshotTier' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf storageTier
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders ModifySnapshotTier where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifySnapshotTier where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySnapshotTier where
+  toQuery ModifySnapshotTier' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifySnapshotTier" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "StorageTier" Data.=: storageTier,
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newModifySnapshotTierResponse' smart constructor.
+data ModifySnapshotTierResponse = ModifySnapshotTierResponse'
+  { -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the archive process was started.
+    tieringStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySnapshotTierResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snapshotId', 'modifySnapshotTierResponse_snapshotId' - The ID of the snapshot.
+--
+-- 'tieringStartTime', 'modifySnapshotTierResponse_tieringStartTime' - The date and time when the archive process was started.
+--
+-- 'httpStatus', 'modifySnapshotTierResponse_httpStatus' - The response's http status code.
+newModifySnapshotTierResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifySnapshotTierResponse
+newModifySnapshotTierResponse pHttpStatus_ =
+  ModifySnapshotTierResponse'
+    { snapshotId =
+        Prelude.Nothing,
+      tieringStartTime = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the snapshot.
+modifySnapshotTierResponse_snapshotId :: Lens.Lens' ModifySnapshotTierResponse (Prelude.Maybe Prelude.Text)
+modifySnapshotTierResponse_snapshotId = Lens.lens (\ModifySnapshotTierResponse' {snapshotId} -> snapshotId) (\s@ModifySnapshotTierResponse' {} a -> s {snapshotId = a} :: ModifySnapshotTierResponse)
+
+-- | The date and time when the archive process was started.
+modifySnapshotTierResponse_tieringStartTime :: Lens.Lens' ModifySnapshotTierResponse (Prelude.Maybe Prelude.UTCTime)
+modifySnapshotTierResponse_tieringStartTime = Lens.lens (\ModifySnapshotTierResponse' {tieringStartTime} -> tieringStartTime) (\s@ModifySnapshotTierResponse' {} a -> s {tieringStartTime = a} :: ModifySnapshotTierResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The response's http status code.
+modifySnapshotTierResponse_httpStatus :: Lens.Lens' ModifySnapshotTierResponse Prelude.Int
+modifySnapshotTierResponse_httpStatus = Lens.lens (\ModifySnapshotTierResponse' {httpStatus} -> httpStatus) (\s@ModifySnapshotTierResponse' {} a -> s {httpStatus = a} :: ModifySnapshotTierResponse)
+
+instance Prelude.NFData ModifySnapshotTierResponse where
+  rnf ModifySnapshotTierResponse' {..} =
+    Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf tieringStartTime
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifySpotFleetRequest.hs b/gen/Amazonka/EC2/ModifySpotFleetRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifySpotFleetRequest.hs
@@ -0,0 +1,290 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifySpotFleetRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified Spot Fleet request.
+--
+-- You can only modify a Spot Fleet request of type @maintain@.
+--
+-- While the Spot Fleet request is being modified, it is in the @modifying@
+-- state.
+--
+-- To scale up your Spot Fleet, increase its target capacity. The Spot
+-- Fleet launches the additional Spot Instances according to the allocation
+-- strategy for the Spot Fleet request. If the allocation strategy is
+-- @lowestPrice@, the Spot Fleet launches instances using the Spot Instance
+-- pool with the lowest price. If the allocation strategy is @diversified@,
+-- the Spot Fleet distributes the instances across the Spot Instance pools.
+-- If the allocation strategy is @capacityOptimized@, Spot Fleet launches
+-- instances from Spot Instance pools with optimal capacity for the number
+-- of instances that are launching.
+--
+-- To scale down your Spot Fleet, decrease its target capacity. First, the
+-- Spot Fleet cancels any open requests that exceed the new target
+-- capacity. You can request that the Spot Fleet terminate Spot Instances
+-- until the size of the fleet no longer exceeds the new target capacity.
+-- If the allocation strategy is @lowestPrice@, the Spot Fleet terminates
+-- the instances with the highest price per unit. If the allocation
+-- strategy is @capacityOptimized@, the Spot Fleet terminates the instances
+-- in the Spot Instance pools that have the least available Spot Instance
+-- capacity. If the allocation strategy is @diversified@, the Spot Fleet
+-- terminates instances across the Spot Instance pools. Alternatively, you
+-- can request that the Spot Fleet keep the fleet at its current size, but
+-- not replace any Spot Instances that are interrupted or that you
+-- terminate manually.
+--
+-- If you are finished with your Spot Fleet for now, but will use it again
+-- later, you can set the target capacity to 0.
+module Amazonka.EC2.ModifySpotFleetRequest
+  ( -- * Creating a Request
+    ModifySpotFleetRequest (..),
+    newModifySpotFleetRequest,
+
+    -- * Request Lenses
+    modifySpotFleetRequest_context,
+    modifySpotFleetRequest_excessCapacityTerminationPolicy,
+    modifySpotFleetRequest_launchTemplateConfigs,
+    modifySpotFleetRequest_onDemandTargetCapacity,
+    modifySpotFleetRequest_targetCapacity,
+    modifySpotFleetRequest_spotFleetRequestId,
+
+    -- * Destructuring the Response
+    ModifySpotFleetRequestResponse (..),
+    newModifySpotFleetRequestResponse,
+
+    -- * Response Lenses
+    modifySpotFleetRequestResponse_return,
+    modifySpotFleetRequestResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ModifySpotFleetRequest.
+--
+-- /See:/ 'newModifySpotFleetRequest' smart constructor.
+data ModifySpotFleetRequest = ModifySpotFleetRequest'
+  { -- | Reserved.
+    context :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether running Spot Instances should be terminated if the
+    -- target capacity of the Spot Fleet request is decreased below the current
+    -- size of the Spot Fleet.
+    excessCapacityTerminationPolicy :: Prelude.Maybe ExcessCapacityTerminationPolicy,
+    -- | The launch template and overrides. You can only use this parameter if
+    -- you specified a launch template (@LaunchTemplateConfigs@) in your Spot
+    -- Fleet request. If you specified @LaunchSpecifications@ in your Spot
+    -- Fleet request, then omit this parameter.
+    launchTemplateConfigs :: Prelude.Maybe [LaunchTemplateConfig],
+    -- | The number of On-Demand Instances in the fleet.
+    onDemandTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The size of the fleet.
+    targetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySpotFleetRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'context', 'modifySpotFleetRequest_context' - Reserved.
+--
+-- 'excessCapacityTerminationPolicy', 'modifySpotFleetRequest_excessCapacityTerminationPolicy' - Indicates whether running Spot Instances should be terminated if the
+-- target capacity of the Spot Fleet request is decreased below the current
+-- size of the Spot Fleet.
+--
+-- 'launchTemplateConfigs', 'modifySpotFleetRequest_launchTemplateConfigs' - The launch template and overrides. You can only use this parameter if
+-- you specified a launch template (@LaunchTemplateConfigs@) in your Spot
+-- Fleet request. If you specified @LaunchSpecifications@ in your Spot
+-- Fleet request, then omit this parameter.
+--
+-- 'onDemandTargetCapacity', 'modifySpotFleetRequest_onDemandTargetCapacity' - The number of On-Demand Instances in the fleet.
+--
+-- 'targetCapacity', 'modifySpotFleetRequest_targetCapacity' - The size of the fleet.
+--
+-- 'spotFleetRequestId', 'modifySpotFleetRequest_spotFleetRequestId' - The ID of the Spot Fleet request.
+newModifySpotFleetRequest ::
+  -- | 'spotFleetRequestId'
+  Prelude.Text ->
+  ModifySpotFleetRequest
+newModifySpotFleetRequest pSpotFleetRequestId_ =
+  ModifySpotFleetRequest'
+    { context = Prelude.Nothing,
+      excessCapacityTerminationPolicy = Prelude.Nothing,
+      launchTemplateConfigs = Prelude.Nothing,
+      onDemandTargetCapacity = Prelude.Nothing,
+      targetCapacity = Prelude.Nothing,
+      spotFleetRequestId = pSpotFleetRequestId_
+    }
+
+-- | Reserved.
+modifySpotFleetRequest_context :: Lens.Lens' ModifySpotFleetRequest (Prelude.Maybe Prelude.Text)
+modifySpotFleetRequest_context = Lens.lens (\ModifySpotFleetRequest' {context} -> context) (\s@ModifySpotFleetRequest' {} a -> s {context = a} :: ModifySpotFleetRequest)
+
+-- | Indicates whether running Spot Instances should be terminated if the
+-- target capacity of the Spot Fleet request is decreased below the current
+-- size of the Spot Fleet.
+modifySpotFleetRequest_excessCapacityTerminationPolicy :: Lens.Lens' ModifySpotFleetRequest (Prelude.Maybe ExcessCapacityTerminationPolicy)
+modifySpotFleetRequest_excessCapacityTerminationPolicy = Lens.lens (\ModifySpotFleetRequest' {excessCapacityTerminationPolicy} -> excessCapacityTerminationPolicy) (\s@ModifySpotFleetRequest' {} a -> s {excessCapacityTerminationPolicy = a} :: ModifySpotFleetRequest)
+
+-- | The launch template and overrides. You can only use this parameter if
+-- you specified a launch template (@LaunchTemplateConfigs@) in your Spot
+-- Fleet request. If you specified @LaunchSpecifications@ in your Spot
+-- Fleet request, then omit this parameter.
+modifySpotFleetRequest_launchTemplateConfigs :: Lens.Lens' ModifySpotFleetRequest (Prelude.Maybe [LaunchTemplateConfig])
+modifySpotFleetRequest_launchTemplateConfigs = Lens.lens (\ModifySpotFleetRequest' {launchTemplateConfigs} -> launchTemplateConfigs) (\s@ModifySpotFleetRequest' {} a -> s {launchTemplateConfigs = a} :: ModifySpotFleetRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of On-Demand Instances in the fleet.
+modifySpotFleetRequest_onDemandTargetCapacity :: Lens.Lens' ModifySpotFleetRequest (Prelude.Maybe Prelude.Int)
+modifySpotFleetRequest_onDemandTargetCapacity = Lens.lens (\ModifySpotFleetRequest' {onDemandTargetCapacity} -> onDemandTargetCapacity) (\s@ModifySpotFleetRequest' {} a -> s {onDemandTargetCapacity = a} :: ModifySpotFleetRequest)
+
+-- | The size of the fleet.
+modifySpotFleetRequest_targetCapacity :: Lens.Lens' ModifySpotFleetRequest (Prelude.Maybe Prelude.Int)
+modifySpotFleetRequest_targetCapacity = Lens.lens (\ModifySpotFleetRequest' {targetCapacity} -> targetCapacity) (\s@ModifySpotFleetRequest' {} a -> s {targetCapacity = a} :: ModifySpotFleetRequest)
+
+-- | The ID of the Spot Fleet request.
+modifySpotFleetRequest_spotFleetRequestId :: Lens.Lens' ModifySpotFleetRequest Prelude.Text
+modifySpotFleetRequest_spotFleetRequestId = Lens.lens (\ModifySpotFleetRequest' {spotFleetRequestId} -> spotFleetRequestId) (\s@ModifySpotFleetRequest' {} a -> s {spotFleetRequestId = a} :: ModifySpotFleetRequest)
+
+instance Core.AWSRequest ModifySpotFleetRequest where
+  type
+    AWSResponse ModifySpotFleetRequest =
+      ModifySpotFleetRequestResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifySpotFleetRequestResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifySpotFleetRequest where
+  hashWithSalt _salt ModifySpotFleetRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` context
+      `Prelude.hashWithSalt` excessCapacityTerminationPolicy
+      `Prelude.hashWithSalt` launchTemplateConfigs
+      `Prelude.hashWithSalt` onDemandTargetCapacity
+      `Prelude.hashWithSalt` targetCapacity
+      `Prelude.hashWithSalt` spotFleetRequestId
+
+instance Prelude.NFData ModifySpotFleetRequest where
+  rnf ModifySpotFleetRequest' {..} =
+    Prelude.rnf context
+      `Prelude.seq` Prelude.rnf excessCapacityTerminationPolicy
+      `Prelude.seq` Prelude.rnf launchTemplateConfigs
+      `Prelude.seq` Prelude.rnf onDemandTargetCapacity
+      `Prelude.seq` Prelude.rnf targetCapacity
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
+
+instance Data.ToHeaders ModifySpotFleetRequest where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifySpotFleetRequest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySpotFleetRequest where
+  toQuery ModifySpotFleetRequest' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifySpotFleetRequest" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Context" Data.=: context,
+        "ExcessCapacityTerminationPolicy"
+          Data.=: excessCapacityTerminationPolicy,
+        Data.toQuery
+          ( Data.toQueryList "LaunchTemplateConfig"
+              Prelude.<$> launchTemplateConfigs
+          ),
+        "OnDemandTargetCapacity"
+          Data.=: onDemandTargetCapacity,
+        "TargetCapacity" Data.=: targetCapacity,
+        "SpotFleetRequestId" Data.=: spotFleetRequestId
+      ]
+
+-- | Contains the output of ModifySpotFleetRequest.
+--
+-- /See:/ 'newModifySpotFleetRequestResponse' smart constructor.
+data ModifySpotFleetRequestResponse = ModifySpotFleetRequestResponse'
+  { -- | If the request succeeds, the response returns @true@. If the request
+    -- fails, no response is returned, and instead an error message is
+    -- returned.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySpotFleetRequestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifySpotFleetRequestResponse_return' - If the request succeeds, the response returns @true@. If the request
+-- fails, no response is returned, and instead an error message is
+-- returned.
+--
+-- 'httpStatus', 'modifySpotFleetRequestResponse_httpStatus' - The response's http status code.
+newModifySpotFleetRequestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifySpotFleetRequestResponse
+newModifySpotFleetRequestResponse pHttpStatus_ =
+  ModifySpotFleetRequestResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If the request succeeds, the response returns @true@. If the request
+-- fails, no response is returned, and instead an error message is
+-- returned.
+modifySpotFleetRequestResponse_return :: Lens.Lens' ModifySpotFleetRequestResponse (Prelude.Maybe Prelude.Bool)
+modifySpotFleetRequestResponse_return = Lens.lens (\ModifySpotFleetRequestResponse' {return'} -> return') (\s@ModifySpotFleetRequestResponse' {} a -> s {return' = a} :: ModifySpotFleetRequestResponse)
+
+-- | The response's http status code.
+modifySpotFleetRequestResponse_httpStatus :: Lens.Lens' ModifySpotFleetRequestResponse Prelude.Int
+modifySpotFleetRequestResponse_httpStatus = Lens.lens (\ModifySpotFleetRequestResponse' {httpStatus} -> httpStatus) (\s@ModifySpotFleetRequestResponse' {} a -> s {httpStatus = a} :: ModifySpotFleetRequestResponse)
+
+instance
+  Prelude.NFData
+    ModifySpotFleetRequestResponse
+  where
+  rnf ModifySpotFleetRequestResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifySubnetAttribute.hs b/gen/Amazonka/EC2/ModifySubnetAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifySubnetAttribute.hs
@@ -0,0 +1,370 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifySubnetAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a subnet attribute. You can only modify one attribute at a
+-- time.
+--
+-- Use this action to modify subnets on Amazon Web Services Outposts.
+--
+-- -   To modify a subnet on an Outpost rack, set both
+--     @MapCustomerOwnedIpOnLaunch@ and @CustomerOwnedIpv4Pool@. These two
+--     parameters act as a single attribute.
+--
+-- -   To modify a subnet on an Outpost server, set either
+--     @EnableLniAtDeviceIndex@ or @DisableLniAtDeviceIndex@.
+--
+-- For more information about Amazon Web Services Outposts, see the
+-- following:
+--
+-- -   <https://docs.aws.amazon.com/outposts/latest/userguide/how-servers-work.html Outpost servers>
+--
+-- -   <https://docs.aws.amazon.com/outposts/latest/userguide/how-racks-work.html Outpost racks>
+module Amazonka.EC2.ModifySubnetAttribute
+  ( -- * Creating a Request
+    ModifySubnetAttribute (..),
+    newModifySubnetAttribute,
+
+    -- * Request Lenses
+    modifySubnetAttribute_assignIpv6AddressOnCreation,
+    modifySubnetAttribute_customerOwnedIpv4Pool,
+    modifySubnetAttribute_disableLniAtDeviceIndex,
+    modifySubnetAttribute_enableDns64,
+    modifySubnetAttribute_enableLniAtDeviceIndex,
+    modifySubnetAttribute_enableResourceNameDnsAAAARecordOnLaunch,
+    modifySubnetAttribute_enableResourceNameDnsARecordOnLaunch,
+    modifySubnetAttribute_mapCustomerOwnedIpOnLaunch,
+    modifySubnetAttribute_mapPublicIpOnLaunch,
+    modifySubnetAttribute_privateDnsHostnameTypeOnLaunch,
+    modifySubnetAttribute_subnetId,
+
+    -- * Destructuring the Response
+    ModifySubnetAttributeResponse (..),
+    newModifySubnetAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifySubnetAttribute' smart constructor.
+data ModifySubnetAttribute = ModifySubnetAttribute'
+  { -- | Specify @true@ to indicate that network interfaces created in the
+    -- specified subnet should be assigned an IPv6 address. This includes a
+    -- network interface that\'s created when launching an instance into the
+    -- subnet (the instance therefore receives an IPv6 address).
+    --
+    -- If you enable the IPv6 addressing feature for your subnet, your network
+    -- interface or instance only receives an IPv6 address if it\'s created
+    -- using version @2016-11-15@ or later of the Amazon EC2 API.
+    assignIpv6AddressOnCreation :: Prelude.Maybe AttributeBooleanValue,
+    -- | The customer-owned IPv4 address pool associated with the subnet.
+    --
+    -- You must set this value when you specify @true@ for
+    -- @MapCustomerOwnedIpOnLaunch@.
+    customerOwnedIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | Specify @true@ to indicate that local network interfaces at the current
+    -- position should be disabled.
+    disableLniAtDeviceIndex :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether DNS queries made to the Amazon-provided DNS Resolver
+    -- in this subnet should return synthetic IPv6 addresses for IPv4-only
+    -- destinations.
+    enableDns64 :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates the device position for local network interfaces in this
+    -- subnet. For example, @1@ indicates local network interfaces in this
+    -- subnet are the secondary network interface (eth1). A local network
+    -- interface cannot be the primary network interface (eth0).
+    enableLniAtDeviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecordOnLaunch :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecordOnLaunch :: Prelude.Maybe AttributeBooleanValue,
+    -- | Specify @true@ to indicate that network interfaces attached to instances
+    -- created in the specified subnet should be assigned a customer-owned IPv4
+    -- address.
+    --
+    -- When this value is @true@, you must specify the customer-owned IP pool
+    -- using @CustomerOwnedIpv4Pool@.
+    mapCustomerOwnedIpOnLaunch :: Prelude.Maybe AttributeBooleanValue,
+    -- | Specify @true@ to indicate that network interfaces attached to instances
+    -- created in the specified subnet should be assigned a public IPv4
+    -- address.
+    mapPublicIpOnLaunch :: Prelude.Maybe AttributeBooleanValue,
+    -- | The type of hostname to assign to instances in the subnet at launch. For
+    -- IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name
+    -- can be based on the instance IPv4 address (ip-name) or the instance ID
+    -- (resource-name). For IPv6 only subnets, an instance DNS name must be
+    -- based on the instance ID (resource-name).
+    privateDnsHostnameTypeOnLaunch :: Prelude.Maybe HostnameType,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySubnetAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assignIpv6AddressOnCreation', 'modifySubnetAttribute_assignIpv6AddressOnCreation' - Specify @true@ to indicate that network interfaces created in the
+-- specified subnet should be assigned an IPv6 address. This includes a
+-- network interface that\'s created when launching an instance into the
+-- subnet (the instance therefore receives an IPv6 address).
+--
+-- If you enable the IPv6 addressing feature for your subnet, your network
+-- interface or instance only receives an IPv6 address if it\'s created
+-- using version @2016-11-15@ or later of the Amazon EC2 API.
+--
+-- 'customerOwnedIpv4Pool', 'modifySubnetAttribute_customerOwnedIpv4Pool' - The customer-owned IPv4 address pool associated with the subnet.
+--
+-- You must set this value when you specify @true@ for
+-- @MapCustomerOwnedIpOnLaunch@.
+--
+-- 'disableLniAtDeviceIndex', 'modifySubnetAttribute_disableLniAtDeviceIndex' - Specify @true@ to indicate that local network interfaces at the current
+-- position should be disabled.
+--
+-- 'enableDns64', 'modifySubnetAttribute_enableDns64' - Indicates whether DNS queries made to the Amazon-provided DNS Resolver
+-- in this subnet should return synthetic IPv6 addresses for IPv4-only
+-- destinations.
+--
+-- 'enableLniAtDeviceIndex', 'modifySubnetAttribute_enableLniAtDeviceIndex' - Indicates the device position for local network interfaces in this
+-- subnet. For example, @1@ indicates local network interfaces in this
+-- subnet are the secondary network interface (eth1). A local network
+-- interface cannot be the primary network interface (eth0).
+--
+-- 'enableResourceNameDnsAAAARecordOnLaunch', 'modifySubnetAttribute_enableResourceNameDnsAAAARecordOnLaunch' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecordOnLaunch', 'modifySubnetAttribute_enableResourceNameDnsARecordOnLaunch' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'mapCustomerOwnedIpOnLaunch', 'modifySubnetAttribute_mapCustomerOwnedIpOnLaunch' - Specify @true@ to indicate that network interfaces attached to instances
+-- created in the specified subnet should be assigned a customer-owned IPv4
+-- address.
+--
+-- When this value is @true@, you must specify the customer-owned IP pool
+-- using @CustomerOwnedIpv4Pool@.
+--
+-- 'mapPublicIpOnLaunch', 'modifySubnetAttribute_mapPublicIpOnLaunch' - Specify @true@ to indicate that network interfaces attached to instances
+-- created in the specified subnet should be assigned a public IPv4
+-- address.
+--
+-- 'privateDnsHostnameTypeOnLaunch', 'modifySubnetAttribute_privateDnsHostnameTypeOnLaunch' - The type of hostname to assign to instances in the subnet at launch. For
+-- IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name
+-- can be based on the instance IPv4 address (ip-name) or the instance ID
+-- (resource-name). For IPv6 only subnets, an instance DNS name must be
+-- based on the instance ID (resource-name).
+--
+-- 'subnetId', 'modifySubnetAttribute_subnetId' - The ID of the subnet.
+newModifySubnetAttribute ::
+  -- | 'subnetId'
+  Prelude.Text ->
+  ModifySubnetAttribute
+newModifySubnetAttribute pSubnetId_ =
+  ModifySubnetAttribute'
+    { assignIpv6AddressOnCreation =
+        Prelude.Nothing,
+      customerOwnedIpv4Pool = Prelude.Nothing,
+      disableLniAtDeviceIndex = Prelude.Nothing,
+      enableDns64 = Prelude.Nothing,
+      enableLniAtDeviceIndex = Prelude.Nothing,
+      enableResourceNameDnsAAAARecordOnLaunch =
+        Prelude.Nothing,
+      enableResourceNameDnsARecordOnLaunch =
+        Prelude.Nothing,
+      mapCustomerOwnedIpOnLaunch = Prelude.Nothing,
+      mapPublicIpOnLaunch = Prelude.Nothing,
+      privateDnsHostnameTypeOnLaunch = Prelude.Nothing,
+      subnetId = pSubnetId_
+    }
+
+-- | Specify @true@ to indicate that network interfaces created in the
+-- specified subnet should be assigned an IPv6 address. This includes a
+-- network interface that\'s created when launching an instance into the
+-- subnet (the instance therefore receives an IPv6 address).
+--
+-- If you enable the IPv6 addressing feature for your subnet, your network
+-- interface or instance only receives an IPv6 address if it\'s created
+-- using version @2016-11-15@ or later of the Amazon EC2 API.
+modifySubnetAttribute_assignIpv6AddressOnCreation :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_assignIpv6AddressOnCreation = Lens.lens (\ModifySubnetAttribute' {assignIpv6AddressOnCreation} -> assignIpv6AddressOnCreation) (\s@ModifySubnetAttribute' {} a -> s {assignIpv6AddressOnCreation = a} :: ModifySubnetAttribute)
+
+-- | The customer-owned IPv4 address pool associated with the subnet.
+--
+-- You must set this value when you specify @true@ for
+-- @MapCustomerOwnedIpOnLaunch@.
+modifySubnetAttribute_customerOwnedIpv4Pool :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe Prelude.Text)
+modifySubnetAttribute_customerOwnedIpv4Pool = Lens.lens (\ModifySubnetAttribute' {customerOwnedIpv4Pool} -> customerOwnedIpv4Pool) (\s@ModifySubnetAttribute' {} a -> s {customerOwnedIpv4Pool = a} :: ModifySubnetAttribute)
+
+-- | Specify @true@ to indicate that local network interfaces at the current
+-- position should be disabled.
+modifySubnetAttribute_disableLniAtDeviceIndex :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_disableLniAtDeviceIndex = Lens.lens (\ModifySubnetAttribute' {disableLniAtDeviceIndex} -> disableLniAtDeviceIndex) (\s@ModifySubnetAttribute' {} a -> s {disableLniAtDeviceIndex = a} :: ModifySubnetAttribute)
+
+-- | Indicates whether DNS queries made to the Amazon-provided DNS Resolver
+-- in this subnet should return synthetic IPv6 addresses for IPv4-only
+-- destinations.
+modifySubnetAttribute_enableDns64 :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_enableDns64 = Lens.lens (\ModifySubnetAttribute' {enableDns64} -> enableDns64) (\s@ModifySubnetAttribute' {} a -> s {enableDns64 = a} :: ModifySubnetAttribute)
+
+-- | Indicates the device position for local network interfaces in this
+-- subnet. For example, @1@ indicates local network interfaces in this
+-- subnet are the secondary network interface (eth1). A local network
+-- interface cannot be the primary network interface (eth0).
+modifySubnetAttribute_enableLniAtDeviceIndex :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe Prelude.Int)
+modifySubnetAttribute_enableLniAtDeviceIndex = Lens.lens (\ModifySubnetAttribute' {enableLniAtDeviceIndex} -> enableLniAtDeviceIndex) (\s@ModifySubnetAttribute' {} a -> s {enableLniAtDeviceIndex = a} :: ModifySubnetAttribute)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+modifySubnetAttribute_enableResourceNameDnsAAAARecordOnLaunch :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_enableResourceNameDnsAAAARecordOnLaunch = Lens.lens (\ModifySubnetAttribute' {enableResourceNameDnsAAAARecordOnLaunch} -> enableResourceNameDnsAAAARecordOnLaunch) (\s@ModifySubnetAttribute' {} a -> s {enableResourceNameDnsAAAARecordOnLaunch = a} :: ModifySubnetAttribute)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+modifySubnetAttribute_enableResourceNameDnsARecordOnLaunch :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_enableResourceNameDnsARecordOnLaunch = Lens.lens (\ModifySubnetAttribute' {enableResourceNameDnsARecordOnLaunch} -> enableResourceNameDnsARecordOnLaunch) (\s@ModifySubnetAttribute' {} a -> s {enableResourceNameDnsARecordOnLaunch = a} :: ModifySubnetAttribute)
+
+-- | Specify @true@ to indicate that network interfaces attached to instances
+-- created in the specified subnet should be assigned a customer-owned IPv4
+-- address.
+--
+-- When this value is @true@, you must specify the customer-owned IP pool
+-- using @CustomerOwnedIpv4Pool@.
+modifySubnetAttribute_mapCustomerOwnedIpOnLaunch :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_mapCustomerOwnedIpOnLaunch = Lens.lens (\ModifySubnetAttribute' {mapCustomerOwnedIpOnLaunch} -> mapCustomerOwnedIpOnLaunch) (\s@ModifySubnetAttribute' {} a -> s {mapCustomerOwnedIpOnLaunch = a} :: ModifySubnetAttribute)
+
+-- | Specify @true@ to indicate that network interfaces attached to instances
+-- created in the specified subnet should be assigned a public IPv4
+-- address.
+modifySubnetAttribute_mapPublicIpOnLaunch :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe AttributeBooleanValue)
+modifySubnetAttribute_mapPublicIpOnLaunch = Lens.lens (\ModifySubnetAttribute' {mapPublicIpOnLaunch} -> mapPublicIpOnLaunch) (\s@ModifySubnetAttribute' {} a -> s {mapPublicIpOnLaunch = a} :: ModifySubnetAttribute)
+
+-- | The type of hostname to assign to instances in the subnet at launch. For
+-- IPv4-only and dual-stack (IPv4 and IPv6) subnets, an instance DNS name
+-- can be based on the instance IPv4 address (ip-name) or the instance ID
+-- (resource-name). For IPv6 only subnets, an instance DNS name must be
+-- based on the instance ID (resource-name).
+modifySubnetAttribute_privateDnsHostnameTypeOnLaunch :: Lens.Lens' ModifySubnetAttribute (Prelude.Maybe HostnameType)
+modifySubnetAttribute_privateDnsHostnameTypeOnLaunch = Lens.lens (\ModifySubnetAttribute' {privateDnsHostnameTypeOnLaunch} -> privateDnsHostnameTypeOnLaunch) (\s@ModifySubnetAttribute' {} a -> s {privateDnsHostnameTypeOnLaunch = a} :: ModifySubnetAttribute)
+
+-- | The ID of the subnet.
+modifySubnetAttribute_subnetId :: Lens.Lens' ModifySubnetAttribute Prelude.Text
+modifySubnetAttribute_subnetId = Lens.lens (\ModifySubnetAttribute' {subnetId} -> subnetId) (\s@ModifySubnetAttribute' {} a -> s {subnetId = a} :: ModifySubnetAttribute)
+
+instance Core.AWSRequest ModifySubnetAttribute where
+  type
+    AWSResponse ModifySubnetAttribute =
+      ModifySubnetAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ModifySubnetAttributeResponse'
+
+instance Prelude.Hashable ModifySubnetAttribute where
+  hashWithSalt _salt ModifySubnetAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` assignIpv6AddressOnCreation
+      `Prelude.hashWithSalt` customerOwnedIpv4Pool
+      `Prelude.hashWithSalt` disableLniAtDeviceIndex
+      `Prelude.hashWithSalt` enableDns64
+      `Prelude.hashWithSalt` enableLniAtDeviceIndex
+      `Prelude.hashWithSalt` enableResourceNameDnsAAAARecordOnLaunch
+      `Prelude.hashWithSalt` enableResourceNameDnsARecordOnLaunch
+      `Prelude.hashWithSalt` mapCustomerOwnedIpOnLaunch
+      `Prelude.hashWithSalt` mapPublicIpOnLaunch
+      `Prelude.hashWithSalt` privateDnsHostnameTypeOnLaunch
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData ModifySubnetAttribute where
+  rnf ModifySubnetAttribute' {..} =
+    Prelude.rnf assignIpv6AddressOnCreation
+      `Prelude.seq` Prelude.rnf customerOwnedIpv4Pool
+      `Prelude.seq` Prelude.rnf disableLniAtDeviceIndex
+      `Prelude.seq` Prelude.rnf enableDns64
+      `Prelude.seq` Prelude.rnf enableLniAtDeviceIndex
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsAAAARecordOnLaunch
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecordOnLaunch
+      `Prelude.seq` Prelude.rnf mapCustomerOwnedIpOnLaunch
+      `Prelude.seq` Prelude.rnf mapPublicIpOnLaunch
+      `Prelude.seq` Prelude.rnf privateDnsHostnameTypeOnLaunch
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance Data.ToHeaders ModifySubnetAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifySubnetAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifySubnetAttribute where
+  toQuery ModifySubnetAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifySubnetAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AssignIpv6AddressOnCreation"
+          Data.=: assignIpv6AddressOnCreation,
+        "CustomerOwnedIpv4Pool"
+          Data.=: customerOwnedIpv4Pool,
+        "DisableLniAtDeviceIndex"
+          Data.=: disableLniAtDeviceIndex,
+        "EnableDns64" Data.=: enableDns64,
+        "EnableLniAtDeviceIndex"
+          Data.=: enableLniAtDeviceIndex,
+        "EnableResourceNameDnsAAAARecordOnLaunch"
+          Data.=: enableResourceNameDnsAAAARecordOnLaunch,
+        "EnableResourceNameDnsARecordOnLaunch"
+          Data.=: enableResourceNameDnsARecordOnLaunch,
+        "MapCustomerOwnedIpOnLaunch"
+          Data.=: mapCustomerOwnedIpOnLaunch,
+        "MapPublicIpOnLaunch" Data.=: mapPublicIpOnLaunch,
+        "PrivateDnsHostnameTypeOnLaunch"
+          Data.=: privateDnsHostnameTypeOnLaunch,
+        "SubnetId" Data.=: subnetId
+      ]
+
+-- | /See:/ 'newModifySubnetAttributeResponse' smart constructor.
+data ModifySubnetAttributeResponse = ModifySubnetAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifySubnetAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifySubnetAttributeResponse ::
+  ModifySubnetAttributeResponse
+newModifySubnetAttributeResponse =
+  ModifySubnetAttributeResponse'
+
+instance Prelude.NFData ModifySubnetAttributeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyTrafficMirrorFilterNetworkServices.hs b/gen/Amazonka/EC2/ModifyTrafficMirrorFilterNetworkServices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyTrafficMirrorFilterNetworkServices.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyTrafficMirrorFilterNetworkServices
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allows or restricts mirroring network services.
+--
+-- By default, Amazon DNS network services are not eligible for Traffic
+-- Mirror. Use @AddNetworkServices@ to add network services to a Traffic
+-- Mirror filter. When a network service is added to the Traffic Mirror
+-- filter, all traffic related to that network service will be mirrored.
+-- When you no longer want to mirror network services, use
+-- @RemoveNetworkServices@ to remove the network services from the Traffic
+-- Mirror filter.
+module Amazonka.EC2.ModifyTrafficMirrorFilterNetworkServices
+  ( -- * Creating a Request
+    ModifyTrafficMirrorFilterNetworkServices (..),
+    newModifyTrafficMirrorFilterNetworkServices,
+
+    -- * Request Lenses
+    modifyTrafficMirrorFilterNetworkServices_addNetworkServices,
+    modifyTrafficMirrorFilterNetworkServices_dryRun,
+    modifyTrafficMirrorFilterNetworkServices_removeNetworkServices,
+    modifyTrafficMirrorFilterNetworkServices_trafficMirrorFilterId,
+
+    -- * Destructuring the Response
+    ModifyTrafficMirrorFilterNetworkServicesResponse (..),
+    newModifyTrafficMirrorFilterNetworkServicesResponse,
+
+    -- * Response Lenses
+    modifyTrafficMirrorFilterNetworkServicesResponse_trafficMirrorFilter,
+    modifyTrafficMirrorFilterNetworkServicesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyTrafficMirrorFilterNetworkServices' smart constructor.
+data ModifyTrafficMirrorFilterNetworkServices = ModifyTrafficMirrorFilterNetworkServices'
+  { -- | The network service, for example Amazon DNS, that you want to mirror.
+    addNetworkServices :: Prelude.Maybe [TrafficMirrorNetworkService],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The network service, for example Amazon DNS, that you no longer want to
+    -- mirror.
+    removeNetworkServices :: Prelude.Maybe [TrafficMirrorNetworkService],
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTrafficMirrorFilterNetworkServices' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addNetworkServices', 'modifyTrafficMirrorFilterNetworkServices_addNetworkServices' - The network service, for example Amazon DNS, that you want to mirror.
+--
+-- 'dryRun', 'modifyTrafficMirrorFilterNetworkServices_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'removeNetworkServices', 'modifyTrafficMirrorFilterNetworkServices_removeNetworkServices' - The network service, for example Amazon DNS, that you no longer want to
+-- mirror.
+--
+-- 'trafficMirrorFilterId', 'modifyTrafficMirrorFilterNetworkServices_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+newModifyTrafficMirrorFilterNetworkServices ::
+  -- | 'trafficMirrorFilterId'
+  Prelude.Text ->
+  ModifyTrafficMirrorFilterNetworkServices
+newModifyTrafficMirrorFilterNetworkServices
+  pTrafficMirrorFilterId_ =
+    ModifyTrafficMirrorFilterNetworkServices'
+      { addNetworkServices =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        removeNetworkServices =
+          Prelude.Nothing,
+        trafficMirrorFilterId =
+          pTrafficMirrorFilterId_
+      }
+
+-- | The network service, for example Amazon DNS, that you want to mirror.
+modifyTrafficMirrorFilterNetworkServices_addNetworkServices :: Lens.Lens' ModifyTrafficMirrorFilterNetworkServices (Prelude.Maybe [TrafficMirrorNetworkService])
+modifyTrafficMirrorFilterNetworkServices_addNetworkServices = Lens.lens (\ModifyTrafficMirrorFilterNetworkServices' {addNetworkServices} -> addNetworkServices) (\s@ModifyTrafficMirrorFilterNetworkServices' {} a -> s {addNetworkServices = a} :: ModifyTrafficMirrorFilterNetworkServices) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyTrafficMirrorFilterNetworkServices_dryRun :: Lens.Lens' ModifyTrafficMirrorFilterNetworkServices (Prelude.Maybe Prelude.Bool)
+modifyTrafficMirrorFilterNetworkServices_dryRun = Lens.lens (\ModifyTrafficMirrorFilterNetworkServices' {dryRun} -> dryRun) (\s@ModifyTrafficMirrorFilterNetworkServices' {} a -> s {dryRun = a} :: ModifyTrafficMirrorFilterNetworkServices)
+
+-- | The network service, for example Amazon DNS, that you no longer want to
+-- mirror.
+modifyTrafficMirrorFilterNetworkServices_removeNetworkServices :: Lens.Lens' ModifyTrafficMirrorFilterNetworkServices (Prelude.Maybe [TrafficMirrorNetworkService])
+modifyTrafficMirrorFilterNetworkServices_removeNetworkServices = Lens.lens (\ModifyTrafficMirrorFilterNetworkServices' {removeNetworkServices} -> removeNetworkServices) (\s@ModifyTrafficMirrorFilterNetworkServices' {} a -> s {removeNetworkServices = a} :: ModifyTrafficMirrorFilterNetworkServices) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Traffic Mirror filter.
+modifyTrafficMirrorFilterNetworkServices_trafficMirrorFilterId :: Lens.Lens' ModifyTrafficMirrorFilterNetworkServices Prelude.Text
+modifyTrafficMirrorFilterNetworkServices_trafficMirrorFilterId = Lens.lens (\ModifyTrafficMirrorFilterNetworkServices' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@ModifyTrafficMirrorFilterNetworkServices' {} a -> s {trafficMirrorFilterId = a} :: ModifyTrafficMirrorFilterNetworkServices)
+
+instance
+  Core.AWSRequest
+    ModifyTrafficMirrorFilterNetworkServices
+  where
+  type
+    AWSResponse
+      ModifyTrafficMirrorFilterNetworkServices =
+      ModifyTrafficMirrorFilterNetworkServicesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyTrafficMirrorFilterNetworkServicesResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorFilter")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyTrafficMirrorFilterNetworkServices
+  where
+  hashWithSalt
+    _salt
+    ModifyTrafficMirrorFilterNetworkServices' {..} =
+      _salt
+        `Prelude.hashWithSalt` addNetworkServices
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` removeNetworkServices
+        `Prelude.hashWithSalt` trafficMirrorFilterId
+
+instance
+  Prelude.NFData
+    ModifyTrafficMirrorFilterNetworkServices
+  where
+  rnf ModifyTrafficMirrorFilterNetworkServices' {..} =
+    Prelude.rnf addNetworkServices
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf removeNetworkServices
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+
+instance
+  Data.ToHeaders
+    ModifyTrafficMirrorFilterNetworkServices
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyTrafficMirrorFilterNetworkServices
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyTrafficMirrorFilterNetworkServices
+  where
+  toQuery ModifyTrafficMirrorFilterNetworkServices' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyTrafficMirrorFilterNetworkServices" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AddNetworkService"
+              Prelude.<$> addNetworkServices
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "RemoveNetworkService"
+              Prelude.<$> removeNetworkServices
+          ),
+        "TrafficMirrorFilterId"
+          Data.=: trafficMirrorFilterId
+      ]
+
+-- | /See:/ 'newModifyTrafficMirrorFilterNetworkServicesResponse' smart constructor.
+data ModifyTrafficMirrorFilterNetworkServicesResponse = ModifyTrafficMirrorFilterNetworkServicesResponse'
+  { -- | The Traffic Mirror filter that the network service is associated with.
+    trafficMirrorFilter :: Prelude.Maybe TrafficMirrorFilter,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTrafficMirrorFilterNetworkServicesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorFilter', 'modifyTrafficMirrorFilterNetworkServicesResponse_trafficMirrorFilter' - The Traffic Mirror filter that the network service is associated with.
+--
+-- 'httpStatus', 'modifyTrafficMirrorFilterNetworkServicesResponse_httpStatus' - The response's http status code.
+newModifyTrafficMirrorFilterNetworkServicesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyTrafficMirrorFilterNetworkServicesResponse
+newModifyTrafficMirrorFilterNetworkServicesResponse
+  pHttpStatus_ =
+    ModifyTrafficMirrorFilterNetworkServicesResponse'
+      { trafficMirrorFilter =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Traffic Mirror filter that the network service is associated with.
+modifyTrafficMirrorFilterNetworkServicesResponse_trafficMirrorFilter :: Lens.Lens' ModifyTrafficMirrorFilterNetworkServicesResponse (Prelude.Maybe TrafficMirrorFilter)
+modifyTrafficMirrorFilterNetworkServicesResponse_trafficMirrorFilter = Lens.lens (\ModifyTrafficMirrorFilterNetworkServicesResponse' {trafficMirrorFilter} -> trafficMirrorFilter) (\s@ModifyTrafficMirrorFilterNetworkServicesResponse' {} a -> s {trafficMirrorFilter = a} :: ModifyTrafficMirrorFilterNetworkServicesResponse)
+
+-- | The response's http status code.
+modifyTrafficMirrorFilterNetworkServicesResponse_httpStatus :: Lens.Lens' ModifyTrafficMirrorFilterNetworkServicesResponse Prelude.Int
+modifyTrafficMirrorFilterNetworkServicesResponse_httpStatus = Lens.lens (\ModifyTrafficMirrorFilterNetworkServicesResponse' {httpStatus} -> httpStatus) (\s@ModifyTrafficMirrorFilterNetworkServicesResponse' {} a -> s {httpStatus = a} :: ModifyTrafficMirrorFilterNetworkServicesResponse)
+
+instance
+  Prelude.NFData
+    ModifyTrafficMirrorFilterNetworkServicesResponse
+  where
+  rnf
+    ModifyTrafficMirrorFilterNetworkServicesResponse' {..} =
+      Prelude.rnf trafficMirrorFilter
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyTrafficMirrorFilterRule.hs b/gen/Amazonka/EC2/ModifyTrafficMirrorFilterRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyTrafficMirrorFilterRule.hs
@@ -0,0 +1,351 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyTrafficMirrorFilterRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified Traffic Mirror rule.
+--
+-- @DestinationCidrBlock@ and @SourceCidrBlock@ must both be an IPv4 range
+-- or an IPv6 range.
+module Amazonka.EC2.ModifyTrafficMirrorFilterRule
+  ( -- * Creating a Request
+    ModifyTrafficMirrorFilterRule (..),
+    newModifyTrafficMirrorFilterRule,
+
+    -- * Request Lenses
+    modifyTrafficMirrorFilterRule_description,
+    modifyTrafficMirrorFilterRule_destinationCidrBlock,
+    modifyTrafficMirrorFilterRule_destinationPortRange,
+    modifyTrafficMirrorFilterRule_dryRun,
+    modifyTrafficMirrorFilterRule_protocol,
+    modifyTrafficMirrorFilterRule_removeFields,
+    modifyTrafficMirrorFilterRule_ruleAction,
+    modifyTrafficMirrorFilterRule_ruleNumber,
+    modifyTrafficMirrorFilterRule_sourceCidrBlock,
+    modifyTrafficMirrorFilterRule_sourcePortRange,
+    modifyTrafficMirrorFilterRule_trafficDirection,
+    modifyTrafficMirrorFilterRule_trafficMirrorFilterRuleId,
+
+    -- * Destructuring the Response
+    ModifyTrafficMirrorFilterRuleResponse (..),
+    newModifyTrafficMirrorFilterRuleResponse,
+
+    -- * Response Lenses
+    modifyTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule,
+    modifyTrafficMirrorFilterRuleResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyTrafficMirrorFilterRule' smart constructor.
+data ModifyTrafficMirrorFilterRule = ModifyTrafficMirrorFilterRule'
+  { -- | The description to assign to the Traffic Mirror rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The destination CIDR block to assign to the Traffic Mirror rule.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The destination ports that are associated with the Traffic Mirror rule.
+    destinationPortRange :: Prelude.Maybe TrafficMirrorPortRangeRequest,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The protocol, for example TCP, to assign to the Traffic Mirror rule.
+    protocol :: Prelude.Maybe Prelude.Int,
+    -- | The properties that you want to remove from the Traffic Mirror filter
+    -- rule.
+    --
+    -- When you remove a property from a Traffic Mirror filter rule, the
+    -- property is set to the default.
+    removeFields :: Prelude.Maybe [TrafficMirrorFilterRuleField],
+    -- | The action to assign to the rule.
+    ruleAction :: Prelude.Maybe TrafficMirrorRuleAction,
+    -- | The number of the Traffic Mirror rule. This number must be unique for
+    -- each Traffic Mirror rule in a given direction. The rules are processed
+    -- in ascending order by rule number.
+    ruleNumber :: Prelude.Maybe Prelude.Int,
+    -- | The source CIDR block to assign to the Traffic Mirror rule.
+    sourceCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The port range to assign to the Traffic Mirror rule.
+    sourcePortRange :: Prelude.Maybe TrafficMirrorPortRangeRequest,
+    -- | The type of traffic to assign to the rule.
+    trafficDirection :: Prelude.Maybe TrafficDirection,
+    -- | The ID of the Traffic Mirror rule.
+    trafficMirrorFilterRuleId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTrafficMirrorFilterRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'modifyTrafficMirrorFilterRule_description' - The description to assign to the Traffic Mirror rule.
+--
+-- 'destinationCidrBlock', 'modifyTrafficMirrorFilterRule_destinationCidrBlock' - The destination CIDR block to assign to the Traffic Mirror rule.
+--
+-- 'destinationPortRange', 'modifyTrafficMirrorFilterRule_destinationPortRange' - The destination ports that are associated with the Traffic Mirror rule.
+--
+-- 'dryRun', 'modifyTrafficMirrorFilterRule_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'protocol', 'modifyTrafficMirrorFilterRule_protocol' - The protocol, for example TCP, to assign to the Traffic Mirror rule.
+--
+-- 'removeFields', 'modifyTrafficMirrorFilterRule_removeFields' - The properties that you want to remove from the Traffic Mirror filter
+-- rule.
+--
+-- When you remove a property from a Traffic Mirror filter rule, the
+-- property is set to the default.
+--
+-- 'ruleAction', 'modifyTrafficMirrorFilterRule_ruleAction' - The action to assign to the rule.
+--
+-- 'ruleNumber', 'modifyTrafficMirrorFilterRule_ruleNumber' - The number of the Traffic Mirror rule. This number must be unique for
+-- each Traffic Mirror rule in a given direction. The rules are processed
+-- in ascending order by rule number.
+--
+-- 'sourceCidrBlock', 'modifyTrafficMirrorFilterRule_sourceCidrBlock' - The source CIDR block to assign to the Traffic Mirror rule.
+--
+-- 'sourcePortRange', 'modifyTrafficMirrorFilterRule_sourcePortRange' - The port range to assign to the Traffic Mirror rule.
+--
+-- 'trafficDirection', 'modifyTrafficMirrorFilterRule_trafficDirection' - The type of traffic to assign to the rule.
+--
+-- 'trafficMirrorFilterRuleId', 'modifyTrafficMirrorFilterRule_trafficMirrorFilterRuleId' - The ID of the Traffic Mirror rule.
+newModifyTrafficMirrorFilterRule ::
+  -- | 'trafficMirrorFilterRuleId'
+  Prelude.Text ->
+  ModifyTrafficMirrorFilterRule
+newModifyTrafficMirrorFilterRule
+  pTrafficMirrorFilterRuleId_ =
+    ModifyTrafficMirrorFilterRule'
+      { description =
+          Prelude.Nothing,
+        destinationCidrBlock = Prelude.Nothing,
+        destinationPortRange = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        protocol = Prelude.Nothing,
+        removeFields = Prelude.Nothing,
+        ruleAction = Prelude.Nothing,
+        ruleNumber = Prelude.Nothing,
+        sourceCidrBlock = Prelude.Nothing,
+        sourcePortRange = Prelude.Nothing,
+        trafficDirection = Prelude.Nothing,
+        trafficMirrorFilterRuleId =
+          pTrafficMirrorFilterRuleId_
+      }
+
+-- | The description to assign to the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_description :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+modifyTrafficMirrorFilterRule_description = Lens.lens (\ModifyTrafficMirrorFilterRule' {description} -> description) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {description = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The destination CIDR block to assign to the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_destinationCidrBlock :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+modifyTrafficMirrorFilterRule_destinationCidrBlock = Lens.lens (\ModifyTrafficMirrorFilterRule' {destinationCidrBlock} -> destinationCidrBlock) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {destinationCidrBlock = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The destination ports that are associated with the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_destinationPortRange :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorPortRangeRequest)
+modifyTrafficMirrorFilterRule_destinationPortRange = Lens.lens (\ModifyTrafficMirrorFilterRule' {destinationPortRange} -> destinationPortRange) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {destinationPortRange = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyTrafficMirrorFilterRule_dryRun :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe Prelude.Bool)
+modifyTrafficMirrorFilterRule_dryRun = Lens.lens (\ModifyTrafficMirrorFilterRule' {dryRun} -> dryRun) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {dryRun = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The protocol, for example TCP, to assign to the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_protocol :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe Prelude.Int)
+modifyTrafficMirrorFilterRule_protocol = Lens.lens (\ModifyTrafficMirrorFilterRule' {protocol} -> protocol) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {protocol = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The properties that you want to remove from the Traffic Mirror filter
+-- rule.
+--
+-- When you remove a property from a Traffic Mirror filter rule, the
+-- property is set to the default.
+modifyTrafficMirrorFilterRule_removeFields :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe [TrafficMirrorFilterRuleField])
+modifyTrafficMirrorFilterRule_removeFields = Lens.lens (\ModifyTrafficMirrorFilterRule' {removeFields} -> removeFields) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {removeFields = a} :: ModifyTrafficMirrorFilterRule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The action to assign to the rule.
+modifyTrafficMirrorFilterRule_ruleAction :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorRuleAction)
+modifyTrafficMirrorFilterRule_ruleAction = Lens.lens (\ModifyTrafficMirrorFilterRule' {ruleAction} -> ruleAction) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {ruleAction = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The number of the Traffic Mirror rule. This number must be unique for
+-- each Traffic Mirror rule in a given direction. The rules are processed
+-- in ascending order by rule number.
+modifyTrafficMirrorFilterRule_ruleNumber :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe Prelude.Int)
+modifyTrafficMirrorFilterRule_ruleNumber = Lens.lens (\ModifyTrafficMirrorFilterRule' {ruleNumber} -> ruleNumber) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {ruleNumber = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The source CIDR block to assign to the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_sourceCidrBlock :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+modifyTrafficMirrorFilterRule_sourceCidrBlock = Lens.lens (\ModifyTrafficMirrorFilterRule' {sourceCidrBlock} -> sourceCidrBlock) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {sourceCidrBlock = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The port range to assign to the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_sourcePortRange :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorPortRangeRequest)
+modifyTrafficMirrorFilterRule_sourcePortRange = Lens.lens (\ModifyTrafficMirrorFilterRule' {sourcePortRange} -> sourcePortRange) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {sourcePortRange = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The type of traffic to assign to the rule.
+modifyTrafficMirrorFilterRule_trafficDirection :: Lens.Lens' ModifyTrafficMirrorFilterRule (Prelude.Maybe TrafficDirection)
+modifyTrafficMirrorFilterRule_trafficDirection = Lens.lens (\ModifyTrafficMirrorFilterRule' {trafficDirection} -> trafficDirection) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {trafficDirection = a} :: ModifyTrafficMirrorFilterRule)
+
+-- | The ID of the Traffic Mirror rule.
+modifyTrafficMirrorFilterRule_trafficMirrorFilterRuleId :: Lens.Lens' ModifyTrafficMirrorFilterRule Prelude.Text
+modifyTrafficMirrorFilterRule_trafficMirrorFilterRuleId = Lens.lens (\ModifyTrafficMirrorFilterRule' {trafficMirrorFilterRuleId} -> trafficMirrorFilterRuleId) (\s@ModifyTrafficMirrorFilterRule' {} a -> s {trafficMirrorFilterRuleId = a} :: ModifyTrafficMirrorFilterRule)
+
+instance
+  Core.AWSRequest
+    ModifyTrafficMirrorFilterRule
+  where
+  type
+    AWSResponse ModifyTrafficMirrorFilterRule =
+      ModifyTrafficMirrorFilterRuleResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyTrafficMirrorFilterRuleResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorFilterRule")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyTrafficMirrorFilterRule
+  where
+  hashWithSalt _salt ModifyTrafficMirrorFilterRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationPortRange
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` removeFields
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` ruleNumber
+      `Prelude.hashWithSalt` sourceCidrBlock
+      `Prelude.hashWithSalt` sourcePortRange
+      `Prelude.hashWithSalt` trafficDirection
+      `Prelude.hashWithSalt` trafficMirrorFilterRuleId
+
+instance Prelude.NFData ModifyTrafficMirrorFilterRule where
+  rnf ModifyTrafficMirrorFilterRule' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationPortRange
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf removeFields
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf ruleNumber
+      `Prelude.seq` Prelude.rnf sourceCidrBlock
+      `Prelude.seq` Prelude.rnf sourcePortRange
+      `Prelude.seq` Prelude.rnf trafficDirection
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterRuleId
+
+instance Data.ToHeaders ModifyTrafficMirrorFilterRule where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyTrafficMirrorFilterRule where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyTrafficMirrorFilterRule where
+  toQuery ModifyTrafficMirrorFilterRule' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyTrafficMirrorFilterRule" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "DestinationPortRange" Data.=: destinationPortRange,
+        "DryRun" Data.=: dryRun,
+        "Protocol" Data.=: protocol,
+        Data.toQuery
+          ( Data.toQueryList "RemoveField"
+              Prelude.<$> removeFields
+          ),
+        "RuleAction" Data.=: ruleAction,
+        "RuleNumber" Data.=: ruleNumber,
+        "SourceCidrBlock" Data.=: sourceCidrBlock,
+        "SourcePortRange" Data.=: sourcePortRange,
+        "TrafficDirection" Data.=: trafficDirection,
+        "TrafficMirrorFilterRuleId"
+          Data.=: trafficMirrorFilterRuleId
+      ]
+
+-- | /See:/ 'newModifyTrafficMirrorFilterRuleResponse' smart constructor.
+data ModifyTrafficMirrorFilterRuleResponse = ModifyTrafficMirrorFilterRuleResponse'
+  { -- | Modifies a Traffic Mirror rule.
+    trafficMirrorFilterRule :: Prelude.Maybe TrafficMirrorFilterRule,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTrafficMirrorFilterRuleResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorFilterRule', 'modifyTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule' - Modifies a Traffic Mirror rule.
+--
+-- 'httpStatus', 'modifyTrafficMirrorFilterRuleResponse_httpStatus' - The response's http status code.
+newModifyTrafficMirrorFilterRuleResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyTrafficMirrorFilterRuleResponse
+newModifyTrafficMirrorFilterRuleResponse pHttpStatus_ =
+  ModifyTrafficMirrorFilterRuleResponse'
+    { trafficMirrorFilterRule =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Modifies a Traffic Mirror rule.
+modifyTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule :: Lens.Lens' ModifyTrafficMirrorFilterRuleResponse (Prelude.Maybe TrafficMirrorFilterRule)
+modifyTrafficMirrorFilterRuleResponse_trafficMirrorFilterRule = Lens.lens (\ModifyTrafficMirrorFilterRuleResponse' {trafficMirrorFilterRule} -> trafficMirrorFilterRule) (\s@ModifyTrafficMirrorFilterRuleResponse' {} a -> s {trafficMirrorFilterRule = a} :: ModifyTrafficMirrorFilterRuleResponse)
+
+-- | The response's http status code.
+modifyTrafficMirrorFilterRuleResponse_httpStatus :: Lens.Lens' ModifyTrafficMirrorFilterRuleResponse Prelude.Int
+modifyTrafficMirrorFilterRuleResponse_httpStatus = Lens.lens (\ModifyTrafficMirrorFilterRuleResponse' {httpStatus} -> httpStatus) (\s@ModifyTrafficMirrorFilterRuleResponse' {} a -> s {httpStatus = a} :: ModifyTrafficMirrorFilterRuleResponse)
+
+instance
+  Prelude.NFData
+    ModifyTrafficMirrorFilterRuleResponse
+  where
+  rnf ModifyTrafficMirrorFilterRuleResponse' {..} =
+    Prelude.rnf trafficMirrorFilterRule
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyTrafficMirrorSession.hs b/gen/Amazonka/EC2/ModifyTrafficMirrorSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyTrafficMirrorSession.hs
@@ -0,0 +1,321 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyTrafficMirrorSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a Traffic Mirror session.
+module Amazonka.EC2.ModifyTrafficMirrorSession
+  ( -- * Creating a Request
+    ModifyTrafficMirrorSession (..),
+    newModifyTrafficMirrorSession,
+
+    -- * Request Lenses
+    modifyTrafficMirrorSession_description,
+    modifyTrafficMirrorSession_dryRun,
+    modifyTrafficMirrorSession_packetLength,
+    modifyTrafficMirrorSession_removeFields,
+    modifyTrafficMirrorSession_sessionNumber,
+    modifyTrafficMirrorSession_trafficMirrorFilterId,
+    modifyTrafficMirrorSession_trafficMirrorTargetId,
+    modifyTrafficMirrorSession_virtualNetworkId,
+    modifyTrafficMirrorSession_trafficMirrorSessionId,
+
+    -- * Destructuring the Response
+    ModifyTrafficMirrorSessionResponse (..),
+    newModifyTrafficMirrorSessionResponse,
+
+    -- * Response Lenses
+    modifyTrafficMirrorSessionResponse_trafficMirrorSession,
+    modifyTrafficMirrorSessionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyTrafficMirrorSession' smart constructor.
+data ModifyTrafficMirrorSession = ModifyTrafficMirrorSession'
+  { -- | The description to assign to the Traffic Mirror session.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The number of bytes in each packet to mirror. These are bytes after the
+    -- VXLAN header. To mirror a subset, set this to the length (in bytes) to
+    -- mirror. For example, if you set this value to 100, then the first 100
+    -- bytes that meet the filter criteria are copied to the target. Do not
+    -- specify this parameter when you want to mirror the entire packet.
+    packetLength :: Prelude.Maybe Prelude.Int,
+    -- | The properties that you want to remove from the Traffic Mirror session.
+    --
+    -- When you remove a property from a Traffic Mirror session, the property
+    -- is set to the default.
+    removeFields :: Prelude.Maybe [TrafficMirrorSessionField],
+    -- | The session number determines the order in which sessions are evaluated
+    -- when an interface is used by multiple sessions. The first session with a
+    -- matching filter is the one that mirrors the packets.
+    --
+    -- Valid values are 1-32766.
+    sessionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Maybe Prelude.Text,
+    -- | The Traffic Mirror target. The target must be in the same VPC as the
+    -- source, or have a VPC peering connection with the source.
+    trafficMirrorTargetId :: Prelude.Maybe Prelude.Text,
+    -- | The virtual network ID of the Traffic Mirror session.
+    virtualNetworkId :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Traffic Mirror session.
+    trafficMirrorSessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTrafficMirrorSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'modifyTrafficMirrorSession_description' - The description to assign to the Traffic Mirror session.
+--
+-- 'dryRun', 'modifyTrafficMirrorSession_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'packetLength', 'modifyTrafficMirrorSession_packetLength' - The number of bytes in each packet to mirror. These are bytes after the
+-- VXLAN header. To mirror a subset, set this to the length (in bytes) to
+-- mirror. For example, if you set this value to 100, then the first 100
+-- bytes that meet the filter criteria are copied to the target. Do not
+-- specify this parameter when you want to mirror the entire packet.
+--
+-- 'removeFields', 'modifyTrafficMirrorSession_removeFields' - The properties that you want to remove from the Traffic Mirror session.
+--
+-- When you remove a property from a Traffic Mirror session, the property
+-- is set to the default.
+--
+-- 'sessionNumber', 'modifyTrafficMirrorSession_sessionNumber' - The session number determines the order in which sessions are evaluated
+-- when an interface is used by multiple sessions. The first session with a
+-- matching filter is the one that mirrors the packets.
+--
+-- Valid values are 1-32766.
+--
+-- 'trafficMirrorFilterId', 'modifyTrafficMirrorSession_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+--
+-- 'trafficMirrorTargetId', 'modifyTrafficMirrorSession_trafficMirrorTargetId' - The Traffic Mirror target. The target must be in the same VPC as the
+-- source, or have a VPC peering connection with the source.
+--
+-- 'virtualNetworkId', 'modifyTrafficMirrorSession_virtualNetworkId' - The virtual network ID of the Traffic Mirror session.
+--
+-- 'trafficMirrorSessionId', 'modifyTrafficMirrorSession_trafficMirrorSessionId' - The ID of the Traffic Mirror session.
+newModifyTrafficMirrorSession ::
+  -- | 'trafficMirrorSessionId'
+  Prelude.Text ->
+  ModifyTrafficMirrorSession
+newModifyTrafficMirrorSession
+  pTrafficMirrorSessionId_ =
+    ModifyTrafficMirrorSession'
+      { description =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        packetLength = Prelude.Nothing,
+        removeFields = Prelude.Nothing,
+        sessionNumber = Prelude.Nothing,
+        trafficMirrorFilterId = Prelude.Nothing,
+        trafficMirrorTargetId = Prelude.Nothing,
+        virtualNetworkId = Prelude.Nothing,
+        trafficMirrorSessionId =
+          pTrafficMirrorSessionId_
+      }
+
+-- | The description to assign to the Traffic Mirror session.
+modifyTrafficMirrorSession_description :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Text)
+modifyTrafficMirrorSession_description = Lens.lens (\ModifyTrafficMirrorSession' {description} -> description) (\s@ModifyTrafficMirrorSession' {} a -> s {description = a} :: ModifyTrafficMirrorSession)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyTrafficMirrorSession_dryRun :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Bool)
+modifyTrafficMirrorSession_dryRun = Lens.lens (\ModifyTrafficMirrorSession' {dryRun} -> dryRun) (\s@ModifyTrafficMirrorSession' {} a -> s {dryRun = a} :: ModifyTrafficMirrorSession)
+
+-- | The number of bytes in each packet to mirror. These are bytes after the
+-- VXLAN header. To mirror a subset, set this to the length (in bytes) to
+-- mirror. For example, if you set this value to 100, then the first 100
+-- bytes that meet the filter criteria are copied to the target. Do not
+-- specify this parameter when you want to mirror the entire packet.
+modifyTrafficMirrorSession_packetLength :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Int)
+modifyTrafficMirrorSession_packetLength = Lens.lens (\ModifyTrafficMirrorSession' {packetLength} -> packetLength) (\s@ModifyTrafficMirrorSession' {} a -> s {packetLength = a} :: ModifyTrafficMirrorSession)
+
+-- | The properties that you want to remove from the Traffic Mirror session.
+--
+-- When you remove a property from a Traffic Mirror session, the property
+-- is set to the default.
+modifyTrafficMirrorSession_removeFields :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe [TrafficMirrorSessionField])
+modifyTrafficMirrorSession_removeFields = Lens.lens (\ModifyTrafficMirrorSession' {removeFields} -> removeFields) (\s@ModifyTrafficMirrorSession' {} a -> s {removeFields = a} :: ModifyTrafficMirrorSession) Prelude.. Lens.mapping Lens.coerced
+
+-- | The session number determines the order in which sessions are evaluated
+-- when an interface is used by multiple sessions. The first session with a
+-- matching filter is the one that mirrors the packets.
+--
+-- Valid values are 1-32766.
+modifyTrafficMirrorSession_sessionNumber :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Int)
+modifyTrafficMirrorSession_sessionNumber = Lens.lens (\ModifyTrafficMirrorSession' {sessionNumber} -> sessionNumber) (\s@ModifyTrafficMirrorSession' {} a -> s {sessionNumber = a} :: ModifyTrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror filter.
+modifyTrafficMirrorSession_trafficMirrorFilterId :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Text)
+modifyTrafficMirrorSession_trafficMirrorFilterId = Lens.lens (\ModifyTrafficMirrorSession' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@ModifyTrafficMirrorSession' {} a -> s {trafficMirrorFilterId = a} :: ModifyTrafficMirrorSession)
+
+-- | The Traffic Mirror target. The target must be in the same VPC as the
+-- source, or have a VPC peering connection with the source.
+modifyTrafficMirrorSession_trafficMirrorTargetId :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Text)
+modifyTrafficMirrorSession_trafficMirrorTargetId = Lens.lens (\ModifyTrafficMirrorSession' {trafficMirrorTargetId} -> trafficMirrorTargetId) (\s@ModifyTrafficMirrorSession' {} a -> s {trafficMirrorTargetId = a} :: ModifyTrafficMirrorSession)
+
+-- | The virtual network ID of the Traffic Mirror session.
+modifyTrafficMirrorSession_virtualNetworkId :: Lens.Lens' ModifyTrafficMirrorSession (Prelude.Maybe Prelude.Int)
+modifyTrafficMirrorSession_virtualNetworkId = Lens.lens (\ModifyTrafficMirrorSession' {virtualNetworkId} -> virtualNetworkId) (\s@ModifyTrafficMirrorSession' {} a -> s {virtualNetworkId = a} :: ModifyTrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror session.
+modifyTrafficMirrorSession_trafficMirrorSessionId :: Lens.Lens' ModifyTrafficMirrorSession Prelude.Text
+modifyTrafficMirrorSession_trafficMirrorSessionId = Lens.lens (\ModifyTrafficMirrorSession' {trafficMirrorSessionId} -> trafficMirrorSessionId) (\s@ModifyTrafficMirrorSession' {} a -> s {trafficMirrorSessionId = a} :: ModifyTrafficMirrorSession)
+
+instance Core.AWSRequest ModifyTrafficMirrorSession where
+  type
+    AWSResponse ModifyTrafficMirrorSession =
+      ModifyTrafficMirrorSessionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyTrafficMirrorSessionResponse'
+            Prelude.<$> (x Data..@? "trafficMirrorSession")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyTrafficMirrorSession where
+  hashWithSalt _salt ModifyTrafficMirrorSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` packetLength
+      `Prelude.hashWithSalt` removeFields
+      `Prelude.hashWithSalt` sessionNumber
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+      `Prelude.hashWithSalt` trafficMirrorTargetId
+      `Prelude.hashWithSalt` virtualNetworkId
+      `Prelude.hashWithSalt` trafficMirrorSessionId
+
+instance Prelude.NFData ModifyTrafficMirrorSession where
+  rnf ModifyTrafficMirrorSession' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf packetLength
+      `Prelude.seq` Prelude.rnf removeFields
+      `Prelude.seq` Prelude.rnf sessionNumber
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+      `Prelude.seq` Prelude.rnf trafficMirrorTargetId
+      `Prelude.seq` Prelude.rnf virtualNetworkId
+      `Prelude.seq` Prelude.rnf trafficMirrorSessionId
+
+instance Data.ToHeaders ModifyTrafficMirrorSession where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyTrafficMirrorSession where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyTrafficMirrorSession where
+  toQuery ModifyTrafficMirrorSession' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyTrafficMirrorSession" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "PacketLength" Data.=: packetLength,
+        Data.toQuery
+          ( Data.toQueryList "RemoveField"
+              Prelude.<$> removeFields
+          ),
+        "SessionNumber" Data.=: sessionNumber,
+        "TrafficMirrorFilterId"
+          Data.=: trafficMirrorFilterId,
+        "TrafficMirrorTargetId"
+          Data.=: trafficMirrorTargetId,
+        "VirtualNetworkId" Data.=: virtualNetworkId,
+        "TrafficMirrorSessionId"
+          Data.=: trafficMirrorSessionId
+      ]
+
+-- | /See:/ 'newModifyTrafficMirrorSessionResponse' smart constructor.
+data ModifyTrafficMirrorSessionResponse = ModifyTrafficMirrorSessionResponse'
+  { -- | Information about the Traffic Mirror session.
+    trafficMirrorSession :: Prelude.Maybe TrafficMirrorSession,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTrafficMirrorSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'trafficMirrorSession', 'modifyTrafficMirrorSessionResponse_trafficMirrorSession' - Information about the Traffic Mirror session.
+--
+-- 'httpStatus', 'modifyTrafficMirrorSessionResponse_httpStatus' - The response's http status code.
+newModifyTrafficMirrorSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyTrafficMirrorSessionResponse
+newModifyTrafficMirrorSessionResponse pHttpStatus_ =
+  ModifyTrafficMirrorSessionResponse'
+    { trafficMirrorSession =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Traffic Mirror session.
+modifyTrafficMirrorSessionResponse_trafficMirrorSession :: Lens.Lens' ModifyTrafficMirrorSessionResponse (Prelude.Maybe TrafficMirrorSession)
+modifyTrafficMirrorSessionResponse_trafficMirrorSession = Lens.lens (\ModifyTrafficMirrorSessionResponse' {trafficMirrorSession} -> trafficMirrorSession) (\s@ModifyTrafficMirrorSessionResponse' {} a -> s {trafficMirrorSession = a} :: ModifyTrafficMirrorSessionResponse)
+
+-- | The response's http status code.
+modifyTrafficMirrorSessionResponse_httpStatus :: Lens.Lens' ModifyTrafficMirrorSessionResponse Prelude.Int
+modifyTrafficMirrorSessionResponse_httpStatus = Lens.lens (\ModifyTrafficMirrorSessionResponse' {httpStatus} -> httpStatus) (\s@ModifyTrafficMirrorSessionResponse' {} a -> s {httpStatus = a} :: ModifyTrafficMirrorSessionResponse)
+
+instance
+  Prelude.NFData
+    ModifyTrafficMirrorSessionResponse
+  where
+  rnf ModifyTrafficMirrorSessionResponse' {..} =
+    Prelude.rnf trafficMirrorSession
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyTransitGateway.hs b/gen/Amazonka/EC2/ModifyTransitGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyTransitGateway.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyTransitGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified transit gateway. When you modify a transit
+-- gateway, the modified options are applied to new transit gateway
+-- attachments only. Your existing transit gateway attachments are not
+-- modified.
+module Amazonka.EC2.ModifyTransitGateway
+  ( -- * Creating a Request
+    ModifyTransitGateway (..),
+    newModifyTransitGateway,
+
+    -- * Request Lenses
+    modifyTransitGateway_description,
+    modifyTransitGateway_dryRun,
+    modifyTransitGateway_options,
+    modifyTransitGateway_transitGatewayId,
+
+    -- * Destructuring the Response
+    ModifyTransitGatewayResponse (..),
+    newModifyTransitGatewayResponse,
+
+    -- * Response Lenses
+    modifyTransitGatewayResponse_transitGateway,
+    modifyTransitGatewayResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyTransitGateway' smart constructor.
+data ModifyTransitGateway = ModifyTransitGateway'
+  { -- | The description for the transit gateway.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The options to modify.
+    options :: Prelude.Maybe ModifyTransitGatewayOptions,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'modifyTransitGateway_description' - The description for the transit gateway.
+--
+-- 'dryRun', 'modifyTransitGateway_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'modifyTransitGateway_options' - The options to modify.
+--
+-- 'transitGatewayId', 'modifyTransitGateway_transitGatewayId' - The ID of the transit gateway.
+newModifyTransitGateway ::
+  -- | 'transitGatewayId'
+  Prelude.Text ->
+  ModifyTransitGateway
+newModifyTransitGateway pTransitGatewayId_ =
+  ModifyTransitGateway'
+    { description =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      options = Prelude.Nothing,
+      transitGatewayId = pTransitGatewayId_
+    }
+
+-- | The description for the transit gateway.
+modifyTransitGateway_description :: Lens.Lens' ModifyTransitGateway (Prelude.Maybe Prelude.Text)
+modifyTransitGateway_description = Lens.lens (\ModifyTransitGateway' {description} -> description) (\s@ModifyTransitGateway' {} a -> s {description = a} :: ModifyTransitGateway)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyTransitGateway_dryRun :: Lens.Lens' ModifyTransitGateway (Prelude.Maybe Prelude.Bool)
+modifyTransitGateway_dryRun = Lens.lens (\ModifyTransitGateway' {dryRun} -> dryRun) (\s@ModifyTransitGateway' {} a -> s {dryRun = a} :: ModifyTransitGateway)
+
+-- | The options to modify.
+modifyTransitGateway_options :: Lens.Lens' ModifyTransitGateway (Prelude.Maybe ModifyTransitGatewayOptions)
+modifyTransitGateway_options = Lens.lens (\ModifyTransitGateway' {options} -> options) (\s@ModifyTransitGateway' {} a -> s {options = a} :: ModifyTransitGateway)
+
+-- | The ID of the transit gateway.
+modifyTransitGateway_transitGatewayId :: Lens.Lens' ModifyTransitGateway Prelude.Text
+modifyTransitGateway_transitGatewayId = Lens.lens (\ModifyTransitGateway' {transitGatewayId} -> transitGatewayId) (\s@ModifyTransitGateway' {} a -> s {transitGatewayId = a} :: ModifyTransitGateway)
+
+instance Core.AWSRequest ModifyTransitGateway where
+  type
+    AWSResponse ModifyTransitGateway =
+      ModifyTransitGatewayResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyTransitGatewayResponse'
+            Prelude.<$> (x Data..@? "transitGateway")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyTransitGateway where
+  hashWithSalt _salt ModifyTransitGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` transitGatewayId
+
+instance Prelude.NFData ModifyTransitGateway where
+  rnf ModifyTransitGateway' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf transitGatewayId
+
+instance Data.ToHeaders ModifyTransitGateway where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyTransitGateway where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyTransitGateway where
+  toQuery ModifyTransitGateway' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyTransitGateway" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        "TransitGatewayId" Data.=: transitGatewayId
+      ]
+
+-- | /See:/ 'newModifyTransitGatewayResponse' smart constructor.
+data ModifyTransitGatewayResponse = ModifyTransitGatewayResponse'
+  { -- | Information about the transit gateway.
+    transitGateway :: Prelude.Maybe TransitGateway,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGateway', 'modifyTransitGatewayResponse_transitGateway' - Information about the transit gateway.
+--
+-- 'httpStatus', 'modifyTransitGatewayResponse_httpStatus' - The response's http status code.
+newModifyTransitGatewayResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyTransitGatewayResponse
+newModifyTransitGatewayResponse pHttpStatus_ =
+  ModifyTransitGatewayResponse'
+    { transitGateway =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the transit gateway.
+modifyTransitGatewayResponse_transitGateway :: Lens.Lens' ModifyTransitGatewayResponse (Prelude.Maybe TransitGateway)
+modifyTransitGatewayResponse_transitGateway = Lens.lens (\ModifyTransitGatewayResponse' {transitGateway} -> transitGateway) (\s@ModifyTransitGatewayResponse' {} a -> s {transitGateway = a} :: ModifyTransitGatewayResponse)
+
+-- | The response's http status code.
+modifyTransitGatewayResponse_httpStatus :: Lens.Lens' ModifyTransitGatewayResponse Prelude.Int
+modifyTransitGatewayResponse_httpStatus = Lens.lens (\ModifyTransitGatewayResponse' {httpStatus} -> httpStatus) (\s@ModifyTransitGatewayResponse' {} a -> s {httpStatus = a} :: ModifyTransitGatewayResponse)
+
+instance Prelude.NFData ModifyTransitGatewayResponse where
+  rnf ModifyTransitGatewayResponse' {..} =
+    Prelude.rnf transitGateway
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyTransitGatewayPrefixListReference.hs b/gen/Amazonka/EC2/ModifyTransitGatewayPrefixListReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyTransitGatewayPrefixListReference.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyTransitGatewayPrefixListReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a reference (route) to a prefix list in a specified transit
+-- gateway route table.
+module Amazonka.EC2.ModifyTransitGatewayPrefixListReference
+  ( -- * Creating a Request
+    ModifyTransitGatewayPrefixListReference (..),
+    newModifyTransitGatewayPrefixListReference,
+
+    -- * Request Lenses
+    modifyTransitGatewayPrefixListReference_blackhole,
+    modifyTransitGatewayPrefixListReference_dryRun,
+    modifyTransitGatewayPrefixListReference_transitGatewayAttachmentId,
+    modifyTransitGatewayPrefixListReference_transitGatewayRouteTableId,
+    modifyTransitGatewayPrefixListReference_prefixListId,
+
+    -- * Destructuring the Response
+    ModifyTransitGatewayPrefixListReferenceResponse (..),
+    newModifyTransitGatewayPrefixListReferenceResponse,
+
+    -- * Response Lenses
+    modifyTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference,
+    modifyTransitGatewayPrefixListReferenceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyTransitGatewayPrefixListReference' smart constructor.
+data ModifyTransitGatewayPrefixListReference = ModifyTransitGatewayPrefixListReference'
+  { -- | Indicates whether to drop traffic that matches this route.
+    blackhole :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment to which traffic is routed.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayPrefixListReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blackhole', 'modifyTransitGatewayPrefixListReference_blackhole' - Indicates whether to drop traffic that matches this route.
+--
+-- 'dryRun', 'modifyTransitGatewayPrefixListReference_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'modifyTransitGatewayPrefixListReference_transitGatewayAttachmentId' - The ID of the attachment to which traffic is routed.
+--
+-- 'transitGatewayRouteTableId', 'modifyTransitGatewayPrefixListReference_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'prefixListId', 'modifyTransitGatewayPrefixListReference_prefixListId' - The ID of the prefix list.
+newModifyTransitGatewayPrefixListReference ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  -- | 'prefixListId'
+  Prelude.Text ->
+  ModifyTransitGatewayPrefixListReference
+newModifyTransitGatewayPrefixListReference
+  pTransitGatewayRouteTableId_
+  pPrefixListId_ =
+    ModifyTransitGatewayPrefixListReference'
+      { blackhole =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        transitGatewayAttachmentId =
+          Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        prefixListId = pPrefixListId_
+      }
+
+-- | Indicates whether to drop traffic that matches this route.
+modifyTransitGatewayPrefixListReference_blackhole :: Lens.Lens' ModifyTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Bool)
+modifyTransitGatewayPrefixListReference_blackhole = Lens.lens (\ModifyTransitGatewayPrefixListReference' {blackhole} -> blackhole) (\s@ModifyTransitGatewayPrefixListReference' {} a -> s {blackhole = a} :: ModifyTransitGatewayPrefixListReference)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyTransitGatewayPrefixListReference_dryRun :: Lens.Lens' ModifyTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Bool)
+modifyTransitGatewayPrefixListReference_dryRun = Lens.lens (\ModifyTransitGatewayPrefixListReference' {dryRun} -> dryRun) (\s@ModifyTransitGatewayPrefixListReference' {} a -> s {dryRun = a} :: ModifyTransitGatewayPrefixListReference)
+
+-- | The ID of the attachment to which traffic is routed.
+modifyTransitGatewayPrefixListReference_transitGatewayAttachmentId :: Lens.Lens' ModifyTransitGatewayPrefixListReference (Prelude.Maybe Prelude.Text)
+modifyTransitGatewayPrefixListReference_transitGatewayAttachmentId = Lens.lens (\ModifyTransitGatewayPrefixListReference' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@ModifyTransitGatewayPrefixListReference' {} a -> s {transitGatewayAttachmentId = a} :: ModifyTransitGatewayPrefixListReference)
+
+-- | The ID of the transit gateway route table.
+modifyTransitGatewayPrefixListReference_transitGatewayRouteTableId :: Lens.Lens' ModifyTransitGatewayPrefixListReference Prelude.Text
+modifyTransitGatewayPrefixListReference_transitGatewayRouteTableId = Lens.lens (\ModifyTransitGatewayPrefixListReference' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@ModifyTransitGatewayPrefixListReference' {} a -> s {transitGatewayRouteTableId = a} :: ModifyTransitGatewayPrefixListReference)
+
+-- | The ID of the prefix list.
+modifyTransitGatewayPrefixListReference_prefixListId :: Lens.Lens' ModifyTransitGatewayPrefixListReference Prelude.Text
+modifyTransitGatewayPrefixListReference_prefixListId = Lens.lens (\ModifyTransitGatewayPrefixListReference' {prefixListId} -> prefixListId) (\s@ModifyTransitGatewayPrefixListReference' {} a -> s {prefixListId = a} :: ModifyTransitGatewayPrefixListReference)
+
+instance
+  Core.AWSRequest
+    ModifyTransitGatewayPrefixListReference
+  where
+  type
+    AWSResponse
+      ModifyTransitGatewayPrefixListReference =
+      ModifyTransitGatewayPrefixListReferenceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyTransitGatewayPrefixListReferenceResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPrefixListReference")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyTransitGatewayPrefixListReference
+  where
+  hashWithSalt
+    _salt
+    ModifyTransitGatewayPrefixListReference' {..} =
+      _salt
+        `Prelude.hashWithSalt` blackhole
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+        `Prelude.hashWithSalt` prefixListId
+
+instance
+  Prelude.NFData
+    ModifyTransitGatewayPrefixListReference
+  where
+  rnf ModifyTransitGatewayPrefixListReference' {..} =
+    Prelude.rnf blackhole
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance
+  Data.ToHeaders
+    ModifyTransitGatewayPrefixListReference
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyTransitGatewayPrefixListReference
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyTransitGatewayPrefixListReference
+  where
+  toQuery ModifyTransitGatewayPrefixListReference' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyTransitGatewayPrefixListReference" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Blackhole" Data.=: blackhole,
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        "PrefixListId" Data.=: prefixListId
+      ]
+
+-- | /See:/ 'newModifyTransitGatewayPrefixListReferenceResponse' smart constructor.
+data ModifyTransitGatewayPrefixListReferenceResponse = ModifyTransitGatewayPrefixListReferenceResponse'
+  { -- | Information about the prefix list reference.
+    transitGatewayPrefixListReference :: Prelude.Maybe TransitGatewayPrefixListReference,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayPrefixListReferenceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPrefixListReference', 'modifyTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference' - Information about the prefix list reference.
+--
+-- 'httpStatus', 'modifyTransitGatewayPrefixListReferenceResponse_httpStatus' - The response's http status code.
+newModifyTransitGatewayPrefixListReferenceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyTransitGatewayPrefixListReferenceResponse
+newModifyTransitGatewayPrefixListReferenceResponse
+  pHttpStatus_ =
+    ModifyTransitGatewayPrefixListReferenceResponse'
+      { transitGatewayPrefixListReference =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the prefix list reference.
+modifyTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference :: Lens.Lens' ModifyTransitGatewayPrefixListReferenceResponse (Prelude.Maybe TransitGatewayPrefixListReference)
+modifyTransitGatewayPrefixListReferenceResponse_transitGatewayPrefixListReference = Lens.lens (\ModifyTransitGatewayPrefixListReferenceResponse' {transitGatewayPrefixListReference} -> transitGatewayPrefixListReference) (\s@ModifyTransitGatewayPrefixListReferenceResponse' {} a -> s {transitGatewayPrefixListReference = a} :: ModifyTransitGatewayPrefixListReferenceResponse)
+
+-- | The response's http status code.
+modifyTransitGatewayPrefixListReferenceResponse_httpStatus :: Lens.Lens' ModifyTransitGatewayPrefixListReferenceResponse Prelude.Int
+modifyTransitGatewayPrefixListReferenceResponse_httpStatus = Lens.lens (\ModifyTransitGatewayPrefixListReferenceResponse' {httpStatus} -> httpStatus) (\s@ModifyTransitGatewayPrefixListReferenceResponse' {} a -> s {httpStatus = a} :: ModifyTransitGatewayPrefixListReferenceResponse)
+
+instance
+  Prelude.NFData
+    ModifyTransitGatewayPrefixListReferenceResponse
+  where
+  rnf
+    ModifyTransitGatewayPrefixListReferenceResponse' {..} =
+      Prelude.rnf transitGatewayPrefixListReference
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyTransitGatewayVpcAttachment.hs b/gen/Amazonka/EC2/ModifyTransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyTransitGatewayVpcAttachment.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyTransitGatewayVpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified VPC attachment.
+module Amazonka.EC2.ModifyTransitGatewayVpcAttachment
+  ( -- * Creating a Request
+    ModifyTransitGatewayVpcAttachment (..),
+    newModifyTransitGatewayVpcAttachment,
+
+    -- * Request Lenses
+    modifyTransitGatewayVpcAttachment_addSubnetIds,
+    modifyTransitGatewayVpcAttachment_dryRun,
+    modifyTransitGatewayVpcAttachment_options,
+    modifyTransitGatewayVpcAttachment_removeSubnetIds,
+    modifyTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    ModifyTransitGatewayVpcAttachmentResponse (..),
+    newModifyTransitGatewayVpcAttachmentResponse,
+
+    -- * Response Lenses
+    modifyTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    modifyTransitGatewayVpcAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyTransitGatewayVpcAttachment' smart constructor.
+data ModifyTransitGatewayVpcAttachment = ModifyTransitGatewayVpcAttachment'
+  { -- | The IDs of one or more subnets to add. You can specify at most one
+    -- subnet per Availability Zone.
+    addSubnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The new VPC attachment options.
+    options :: Prelude.Maybe ModifyTransitGatewayVpcAttachmentRequestOptions,
+    -- | The IDs of one or more subnets to remove.
+    removeSubnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayVpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addSubnetIds', 'modifyTransitGatewayVpcAttachment_addSubnetIds' - The IDs of one or more subnets to add. You can specify at most one
+-- subnet per Availability Zone.
+--
+-- 'dryRun', 'modifyTransitGatewayVpcAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'options', 'modifyTransitGatewayVpcAttachment_options' - The new VPC attachment options.
+--
+-- 'removeSubnetIds', 'modifyTransitGatewayVpcAttachment_removeSubnetIds' - The IDs of one or more subnets to remove.
+--
+-- 'transitGatewayAttachmentId', 'modifyTransitGatewayVpcAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+newModifyTransitGatewayVpcAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  ModifyTransitGatewayVpcAttachment
+newModifyTransitGatewayVpcAttachment
+  pTransitGatewayAttachmentId_ =
+    ModifyTransitGatewayVpcAttachment'
+      { addSubnetIds =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        options = Prelude.Nothing,
+        removeSubnetIds = Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | The IDs of one or more subnets to add. You can specify at most one
+-- subnet per Availability Zone.
+modifyTransitGatewayVpcAttachment_addSubnetIds :: Lens.Lens' ModifyTransitGatewayVpcAttachment (Prelude.Maybe [Prelude.Text])
+modifyTransitGatewayVpcAttachment_addSubnetIds = Lens.lens (\ModifyTransitGatewayVpcAttachment' {addSubnetIds} -> addSubnetIds) (\s@ModifyTransitGatewayVpcAttachment' {} a -> s {addSubnetIds = a} :: ModifyTransitGatewayVpcAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyTransitGatewayVpcAttachment_dryRun :: Lens.Lens' ModifyTransitGatewayVpcAttachment (Prelude.Maybe Prelude.Bool)
+modifyTransitGatewayVpcAttachment_dryRun = Lens.lens (\ModifyTransitGatewayVpcAttachment' {dryRun} -> dryRun) (\s@ModifyTransitGatewayVpcAttachment' {} a -> s {dryRun = a} :: ModifyTransitGatewayVpcAttachment)
+
+-- | The new VPC attachment options.
+modifyTransitGatewayVpcAttachment_options :: Lens.Lens' ModifyTransitGatewayVpcAttachment (Prelude.Maybe ModifyTransitGatewayVpcAttachmentRequestOptions)
+modifyTransitGatewayVpcAttachment_options = Lens.lens (\ModifyTransitGatewayVpcAttachment' {options} -> options) (\s@ModifyTransitGatewayVpcAttachment' {} a -> s {options = a} :: ModifyTransitGatewayVpcAttachment)
+
+-- | The IDs of one or more subnets to remove.
+modifyTransitGatewayVpcAttachment_removeSubnetIds :: Lens.Lens' ModifyTransitGatewayVpcAttachment (Prelude.Maybe [Prelude.Text])
+modifyTransitGatewayVpcAttachment_removeSubnetIds = Lens.lens (\ModifyTransitGatewayVpcAttachment' {removeSubnetIds} -> removeSubnetIds) (\s@ModifyTransitGatewayVpcAttachment' {} a -> s {removeSubnetIds = a} :: ModifyTransitGatewayVpcAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the attachment.
+modifyTransitGatewayVpcAttachment_transitGatewayAttachmentId :: Lens.Lens' ModifyTransitGatewayVpcAttachment Prelude.Text
+modifyTransitGatewayVpcAttachment_transitGatewayAttachmentId = Lens.lens (\ModifyTransitGatewayVpcAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@ModifyTransitGatewayVpcAttachment' {} a -> s {transitGatewayAttachmentId = a} :: ModifyTransitGatewayVpcAttachment)
+
+instance
+  Core.AWSRequest
+    ModifyTransitGatewayVpcAttachment
+  where
+  type
+    AWSResponse ModifyTransitGatewayVpcAttachment =
+      ModifyTransitGatewayVpcAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyTransitGatewayVpcAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayVpcAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyTransitGatewayVpcAttachment
+  where
+  hashWithSalt
+    _salt
+    ModifyTransitGatewayVpcAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` addSubnetIds
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` options
+        `Prelude.hashWithSalt` removeSubnetIds
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    ModifyTransitGatewayVpcAttachment
+  where
+  rnf ModifyTransitGatewayVpcAttachment' {..} =
+    Prelude.rnf addSubnetIds
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf removeSubnetIds
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    ModifyTransitGatewayVpcAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyTransitGatewayVpcAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyTransitGatewayVpcAttachment
+  where
+  toQuery ModifyTransitGatewayVpcAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyTransitGatewayVpcAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AddSubnetIds"
+              Prelude.<$> addSubnetIds
+          ),
+        "DryRun" Data.=: dryRun,
+        "Options" Data.=: options,
+        Data.toQuery
+          ( Data.toQueryList "RemoveSubnetIds"
+              Prelude.<$> removeSubnetIds
+          ),
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newModifyTransitGatewayVpcAttachmentResponse' smart constructor.
+data ModifyTransitGatewayVpcAttachmentResponse = ModifyTransitGatewayVpcAttachmentResponse'
+  { -- | Information about the modified attachment.
+    transitGatewayVpcAttachment :: Prelude.Maybe TransitGatewayVpcAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayVpcAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayVpcAttachment', 'modifyTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment' - Information about the modified attachment.
+--
+-- 'httpStatus', 'modifyTransitGatewayVpcAttachmentResponse_httpStatus' - The response's http status code.
+newModifyTransitGatewayVpcAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyTransitGatewayVpcAttachmentResponse
+newModifyTransitGatewayVpcAttachmentResponse
+  pHttpStatus_ =
+    ModifyTransitGatewayVpcAttachmentResponse'
+      { transitGatewayVpcAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the modified attachment.
+modifyTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment :: Lens.Lens' ModifyTransitGatewayVpcAttachmentResponse (Prelude.Maybe TransitGatewayVpcAttachment)
+modifyTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment = Lens.lens (\ModifyTransitGatewayVpcAttachmentResponse' {transitGatewayVpcAttachment} -> transitGatewayVpcAttachment) (\s@ModifyTransitGatewayVpcAttachmentResponse' {} a -> s {transitGatewayVpcAttachment = a} :: ModifyTransitGatewayVpcAttachmentResponse)
+
+-- | The response's http status code.
+modifyTransitGatewayVpcAttachmentResponse_httpStatus :: Lens.Lens' ModifyTransitGatewayVpcAttachmentResponse Prelude.Int
+modifyTransitGatewayVpcAttachmentResponse_httpStatus = Lens.lens (\ModifyTransitGatewayVpcAttachmentResponse' {httpStatus} -> httpStatus) (\s@ModifyTransitGatewayVpcAttachmentResponse' {} a -> s {httpStatus = a} :: ModifyTransitGatewayVpcAttachmentResponse)
+
+instance
+  Prelude.NFData
+    ModifyTransitGatewayVpcAttachmentResponse
+  where
+  rnf ModifyTransitGatewayVpcAttachmentResponse' {..} =
+    Prelude.rnf transitGatewayVpcAttachment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessEndpoint.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessEndpoint.hs
@@ -0,0 +1,271 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the configuration of an Amazon Web Services Verified Access
+-- endpoint.
+module Amazonka.EC2.ModifyVerifiedAccessEndpoint
+  ( -- * Creating a Request
+    ModifyVerifiedAccessEndpoint (..),
+    newModifyVerifiedAccessEndpoint,
+
+    -- * Request Lenses
+    modifyVerifiedAccessEndpoint_clientToken,
+    modifyVerifiedAccessEndpoint_description,
+    modifyVerifiedAccessEndpoint_dryRun,
+    modifyVerifiedAccessEndpoint_loadBalancerOptions,
+    modifyVerifiedAccessEndpoint_networkInterfaceOptions,
+    modifyVerifiedAccessEndpoint_verifiedAccessGroupId,
+    modifyVerifiedAccessEndpoint_verifiedAccessEndpointId,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessEndpointResponse (..),
+    newModifyVerifiedAccessEndpointResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessEndpointResponse_verifiedAccessEndpoint,
+    modifyVerifiedAccessEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessEndpoint' smart constructor.
+data ModifyVerifiedAccessEndpoint = ModifyVerifiedAccessEndpoint'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access endpoint.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The load balancer details if creating the Amazon Web Services Verified
+    -- Access endpoint as @load-balancer@type.
+    loadBalancerOptions :: Prelude.Maybe ModifyVerifiedAccessEndpointLoadBalancerOptions,
+    -- | The network interface options.
+    networkInterfaceOptions :: Prelude.Maybe ModifyVerifiedAccessEndpointEniOptions,
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessEndpoint_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'modifyVerifiedAccessEndpoint_description' - A description for the Amazon Web Services Verified Access endpoint.
+--
+-- 'dryRun', 'modifyVerifiedAccessEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'loadBalancerOptions', 'modifyVerifiedAccessEndpoint_loadBalancerOptions' - The load balancer details if creating the Amazon Web Services Verified
+-- Access endpoint as @load-balancer@type.
+--
+-- 'networkInterfaceOptions', 'modifyVerifiedAccessEndpoint_networkInterfaceOptions' - The network interface options.
+--
+-- 'verifiedAccessGroupId', 'modifyVerifiedAccessEndpoint_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+--
+-- 'verifiedAccessEndpointId', 'modifyVerifiedAccessEndpoint_verifiedAccessEndpointId' - The ID of the Amazon Web Services Verified Access endpoint.
+newModifyVerifiedAccessEndpoint ::
+  -- | 'verifiedAccessEndpointId'
+  Prelude.Text ->
+  ModifyVerifiedAccessEndpoint
+newModifyVerifiedAccessEndpoint
+  pVerifiedAccessEndpointId_ =
+    ModifyVerifiedAccessEndpoint'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        loadBalancerOptions = Prelude.Nothing,
+        networkInterfaceOptions = Prelude.Nothing,
+        verifiedAccessGroupId = Prelude.Nothing,
+        verifiedAccessEndpointId =
+          pVerifiedAccessEndpointId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessEndpoint_clientToken :: Lens.Lens' ModifyVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessEndpoint_clientToken = Lens.lens (\ModifyVerifiedAccessEndpoint' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {clientToken = a} :: ModifyVerifiedAccessEndpoint)
+
+-- | A description for the Amazon Web Services Verified Access endpoint.
+modifyVerifiedAccessEndpoint_description :: Lens.Lens' ModifyVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessEndpoint_description = Lens.lens (\ModifyVerifiedAccessEndpoint' {description} -> description) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {description = a} :: ModifyVerifiedAccessEndpoint)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessEndpoint_dryRun :: Lens.Lens' ModifyVerifiedAccessEndpoint (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessEndpoint_dryRun = Lens.lens (\ModifyVerifiedAccessEndpoint' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {dryRun = a} :: ModifyVerifiedAccessEndpoint)
+
+-- | The load balancer details if creating the Amazon Web Services Verified
+-- Access endpoint as @load-balancer@type.
+modifyVerifiedAccessEndpoint_loadBalancerOptions :: Lens.Lens' ModifyVerifiedAccessEndpoint (Prelude.Maybe ModifyVerifiedAccessEndpointLoadBalancerOptions)
+modifyVerifiedAccessEndpoint_loadBalancerOptions = Lens.lens (\ModifyVerifiedAccessEndpoint' {loadBalancerOptions} -> loadBalancerOptions) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {loadBalancerOptions = a} :: ModifyVerifiedAccessEndpoint)
+
+-- | The network interface options.
+modifyVerifiedAccessEndpoint_networkInterfaceOptions :: Lens.Lens' ModifyVerifiedAccessEndpoint (Prelude.Maybe ModifyVerifiedAccessEndpointEniOptions)
+modifyVerifiedAccessEndpoint_networkInterfaceOptions = Lens.lens (\ModifyVerifiedAccessEndpoint' {networkInterfaceOptions} -> networkInterfaceOptions) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {networkInterfaceOptions = a} :: ModifyVerifiedAccessEndpoint)
+
+-- | The ID of the Amazon Web Services Verified Access group.
+modifyVerifiedAccessEndpoint_verifiedAccessGroupId :: Lens.Lens' ModifyVerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessEndpoint_verifiedAccessGroupId = Lens.lens (\ModifyVerifiedAccessEndpoint' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {verifiedAccessGroupId = a} :: ModifyVerifiedAccessEndpoint)
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+modifyVerifiedAccessEndpoint_verifiedAccessEndpointId :: Lens.Lens' ModifyVerifiedAccessEndpoint Prelude.Text
+modifyVerifiedAccessEndpoint_verifiedAccessEndpointId = Lens.lens (\ModifyVerifiedAccessEndpoint' {verifiedAccessEndpointId} -> verifiedAccessEndpointId) (\s@ModifyVerifiedAccessEndpoint' {} a -> s {verifiedAccessEndpointId = a} :: ModifyVerifiedAccessEndpoint)
+
+instance Core.AWSRequest ModifyVerifiedAccessEndpoint where
+  type
+    AWSResponse ModifyVerifiedAccessEndpoint =
+      ModifyVerifiedAccessEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessEndpointResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessEndpoint")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessEndpoint
+  where
+  hashWithSalt _salt ModifyVerifiedAccessEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` loadBalancerOptions
+      `Prelude.hashWithSalt` networkInterfaceOptions
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+      `Prelude.hashWithSalt` verifiedAccessEndpointId
+
+instance Prelude.NFData ModifyVerifiedAccessEndpoint where
+  rnf ModifyVerifiedAccessEndpoint' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf loadBalancerOptions
+      `Prelude.seq` Prelude.rnf networkInterfaceOptions
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpointId
+
+instance Data.ToHeaders ModifyVerifiedAccessEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVerifiedAccessEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVerifiedAccessEndpoint where
+  toQuery ModifyVerifiedAccessEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVerifiedAccessEndpoint" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "LoadBalancerOptions" Data.=: loadBalancerOptions,
+        "NetworkInterfaceOptions"
+          Data.=: networkInterfaceOptions,
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId,
+        "VerifiedAccessEndpointId"
+          Data.=: verifiedAccessEndpointId
+      ]
+
+-- | /See:/ 'newModifyVerifiedAccessEndpointResponse' smart constructor.
+data ModifyVerifiedAccessEndpointResponse = ModifyVerifiedAccessEndpointResponse'
+  { -- | The Amazon Web Services Verified Access endpoint details.
+    verifiedAccessEndpoint :: Prelude.Maybe VerifiedAccessEndpoint,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessEndpoint', 'modifyVerifiedAccessEndpointResponse_verifiedAccessEndpoint' - The Amazon Web Services Verified Access endpoint details.
+--
+-- 'httpStatus', 'modifyVerifiedAccessEndpointResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessEndpointResponse
+newModifyVerifiedAccessEndpointResponse pHttpStatus_ =
+  ModifyVerifiedAccessEndpointResponse'
+    { verifiedAccessEndpoint =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Web Services Verified Access endpoint details.
+modifyVerifiedAccessEndpointResponse_verifiedAccessEndpoint :: Lens.Lens' ModifyVerifiedAccessEndpointResponse (Prelude.Maybe VerifiedAccessEndpoint)
+modifyVerifiedAccessEndpointResponse_verifiedAccessEndpoint = Lens.lens (\ModifyVerifiedAccessEndpointResponse' {verifiedAccessEndpoint} -> verifiedAccessEndpoint) (\s@ModifyVerifiedAccessEndpointResponse' {} a -> s {verifiedAccessEndpoint = a} :: ModifyVerifiedAccessEndpointResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessEndpointResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessEndpointResponse Prelude.Int
+modifyVerifiedAccessEndpointResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessEndpointResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessEndpointResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessEndpointResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessEndpointResponse
+  where
+  rnf ModifyVerifiedAccessEndpointResponse' {..} =
+    Prelude.rnf verifiedAccessEndpoint
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessEndpointPolicy.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessEndpointPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessEndpointPolicy.hs
@@ -0,0 +1,272 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessEndpointPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified Verified Access endpoint policy.
+module Amazonka.EC2.ModifyVerifiedAccessEndpointPolicy
+  ( -- * Creating a Request
+    ModifyVerifiedAccessEndpointPolicy (..),
+    newModifyVerifiedAccessEndpointPolicy,
+
+    -- * Request Lenses
+    modifyVerifiedAccessEndpointPolicy_clientToken,
+    modifyVerifiedAccessEndpointPolicy_dryRun,
+    modifyVerifiedAccessEndpointPolicy_policyDocument,
+    modifyVerifiedAccessEndpointPolicy_verifiedAccessEndpointId,
+    modifyVerifiedAccessEndpointPolicy_policyEnabled,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessEndpointPolicyResponse (..),
+    newModifyVerifiedAccessEndpointPolicyResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessEndpointPolicyResponse_policyDocument,
+    modifyVerifiedAccessEndpointPolicyResponse_policyEnabled,
+    modifyVerifiedAccessEndpointPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessEndpointPolicy' smart constructor.
+data ModifyVerifiedAccessEndpointPolicy = ModifyVerifiedAccessEndpointPolicy'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpointId :: Prelude.Text,
+    -- | The status of the Verified Access policy.
+    policyEnabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessEndpointPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessEndpointPolicy_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'modifyVerifiedAccessEndpointPolicy_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'policyDocument', 'modifyVerifiedAccessEndpointPolicy_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'verifiedAccessEndpointId', 'modifyVerifiedAccessEndpointPolicy_verifiedAccessEndpointId' - The ID of the Amazon Web Services Verified Access endpoint.
+--
+-- 'policyEnabled', 'modifyVerifiedAccessEndpointPolicy_policyEnabled' - The status of the Verified Access policy.
+newModifyVerifiedAccessEndpointPolicy ::
+  -- | 'verifiedAccessEndpointId'
+  Prelude.Text ->
+  -- | 'policyEnabled'
+  Prelude.Bool ->
+  ModifyVerifiedAccessEndpointPolicy
+newModifyVerifiedAccessEndpointPolicy
+  pVerifiedAccessEndpointId_
+  pPolicyEnabled_ =
+    ModifyVerifiedAccessEndpointPolicy'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        policyDocument = Prelude.Nothing,
+        verifiedAccessEndpointId =
+          pVerifiedAccessEndpointId_,
+        policyEnabled = pPolicyEnabled_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessEndpointPolicy_clientToken :: Lens.Lens' ModifyVerifiedAccessEndpointPolicy (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessEndpointPolicy_clientToken = Lens.lens (\ModifyVerifiedAccessEndpointPolicy' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessEndpointPolicy' {} a -> s {clientToken = a} :: ModifyVerifiedAccessEndpointPolicy)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessEndpointPolicy_dryRun :: Lens.Lens' ModifyVerifiedAccessEndpointPolicy (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessEndpointPolicy_dryRun = Lens.lens (\ModifyVerifiedAccessEndpointPolicy' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessEndpointPolicy' {} a -> s {dryRun = a} :: ModifyVerifiedAccessEndpointPolicy)
+
+-- | The Amazon Web Services Verified Access policy document.
+modifyVerifiedAccessEndpointPolicy_policyDocument :: Lens.Lens' ModifyVerifiedAccessEndpointPolicy (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessEndpointPolicy_policyDocument = Lens.lens (\ModifyVerifiedAccessEndpointPolicy' {policyDocument} -> policyDocument) (\s@ModifyVerifiedAccessEndpointPolicy' {} a -> s {policyDocument = a} :: ModifyVerifiedAccessEndpointPolicy)
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+modifyVerifiedAccessEndpointPolicy_verifiedAccessEndpointId :: Lens.Lens' ModifyVerifiedAccessEndpointPolicy Prelude.Text
+modifyVerifiedAccessEndpointPolicy_verifiedAccessEndpointId = Lens.lens (\ModifyVerifiedAccessEndpointPolicy' {verifiedAccessEndpointId} -> verifiedAccessEndpointId) (\s@ModifyVerifiedAccessEndpointPolicy' {} a -> s {verifiedAccessEndpointId = a} :: ModifyVerifiedAccessEndpointPolicy)
+
+-- | The status of the Verified Access policy.
+modifyVerifiedAccessEndpointPolicy_policyEnabled :: Lens.Lens' ModifyVerifiedAccessEndpointPolicy Prelude.Bool
+modifyVerifiedAccessEndpointPolicy_policyEnabled = Lens.lens (\ModifyVerifiedAccessEndpointPolicy' {policyEnabled} -> policyEnabled) (\s@ModifyVerifiedAccessEndpointPolicy' {} a -> s {policyEnabled = a} :: ModifyVerifiedAccessEndpointPolicy)
+
+instance
+  Core.AWSRequest
+    ModifyVerifiedAccessEndpointPolicy
+  where
+  type
+    AWSResponse ModifyVerifiedAccessEndpointPolicy =
+      ModifyVerifiedAccessEndpointPolicyResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessEndpointPolicyResponse'
+            Prelude.<$> (x Data..@? "policyDocument")
+            Prelude.<*> (x Data..@? "policyEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessEndpointPolicy
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessEndpointPolicy' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` policyDocument
+        `Prelude.hashWithSalt` verifiedAccessEndpointId
+        `Prelude.hashWithSalt` policyEnabled
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessEndpointPolicy
+  where
+  rnf ModifyVerifiedAccessEndpointPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpointId
+      `Prelude.seq` Prelude.rnf policyEnabled
+
+instance
+  Data.ToHeaders
+    ModifyVerifiedAccessEndpointPolicy
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVerifiedAccessEndpointPolicy
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVerifiedAccessEndpointPolicy
+  where
+  toQuery ModifyVerifiedAccessEndpointPolicy' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVerifiedAccessEndpointPolicy" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "PolicyDocument" Data.=: policyDocument,
+        "VerifiedAccessEndpointId"
+          Data.=: verifiedAccessEndpointId,
+        "PolicyEnabled" Data.=: policyEnabled
+      ]
+
+-- | /See:/ 'newModifyVerifiedAccessEndpointPolicyResponse' smart constructor.
+data ModifyVerifiedAccessEndpointPolicyResponse = ModifyVerifiedAccessEndpointPolicyResponse'
+  { -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Verified Access policy.
+    policyEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessEndpointPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyDocument', 'modifyVerifiedAccessEndpointPolicyResponse_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'policyEnabled', 'modifyVerifiedAccessEndpointPolicyResponse_policyEnabled' - The status of the Verified Access policy.
+--
+-- 'httpStatus', 'modifyVerifiedAccessEndpointPolicyResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessEndpointPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessEndpointPolicyResponse
+newModifyVerifiedAccessEndpointPolicyResponse
+  pHttpStatus_ =
+    ModifyVerifiedAccessEndpointPolicyResponse'
+      { policyDocument =
+          Prelude.Nothing,
+        policyEnabled = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Web Services Verified Access policy document.
+modifyVerifiedAccessEndpointPolicyResponse_policyDocument :: Lens.Lens' ModifyVerifiedAccessEndpointPolicyResponse (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessEndpointPolicyResponse_policyDocument = Lens.lens (\ModifyVerifiedAccessEndpointPolicyResponse' {policyDocument} -> policyDocument) (\s@ModifyVerifiedAccessEndpointPolicyResponse' {} a -> s {policyDocument = a} :: ModifyVerifiedAccessEndpointPolicyResponse)
+
+-- | The status of the Verified Access policy.
+modifyVerifiedAccessEndpointPolicyResponse_policyEnabled :: Lens.Lens' ModifyVerifiedAccessEndpointPolicyResponse (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessEndpointPolicyResponse_policyEnabled = Lens.lens (\ModifyVerifiedAccessEndpointPolicyResponse' {policyEnabled} -> policyEnabled) (\s@ModifyVerifiedAccessEndpointPolicyResponse' {} a -> s {policyEnabled = a} :: ModifyVerifiedAccessEndpointPolicyResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessEndpointPolicyResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessEndpointPolicyResponse Prelude.Int
+modifyVerifiedAccessEndpointPolicyResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessEndpointPolicyResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessEndpointPolicyResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessEndpointPolicyResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessEndpointPolicyResponse
+  where
+  rnf ModifyVerifiedAccessEndpointPolicyResponse' {..} =
+    Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf policyEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessGroup.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessGroup.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified Verified Access group configuration.
+module Amazonka.EC2.ModifyVerifiedAccessGroup
+  ( -- * Creating a Request
+    ModifyVerifiedAccessGroup (..),
+    newModifyVerifiedAccessGroup,
+
+    -- * Request Lenses
+    modifyVerifiedAccessGroup_clientToken,
+    modifyVerifiedAccessGroup_description,
+    modifyVerifiedAccessGroup_dryRun,
+    modifyVerifiedAccessGroup_verifiedAccessInstanceId,
+    modifyVerifiedAccessGroup_verifiedAccessGroupId,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessGroupResponse (..),
+    newModifyVerifiedAccessGroupResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessGroupResponse_verifiedAccessGroup,
+    modifyVerifiedAccessGroupResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessGroup' smart constructor.
+data ModifyVerifiedAccessGroup = ModifyVerifiedAccessGroup'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessGroup_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'modifyVerifiedAccessGroup_description' - A description for the Amazon Web Services Verified Access group.
+--
+-- 'dryRun', 'modifyVerifiedAccessGroup_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessInstanceId', 'modifyVerifiedAccessGroup_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'verifiedAccessGroupId', 'modifyVerifiedAccessGroup_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+newModifyVerifiedAccessGroup ::
+  -- | 'verifiedAccessGroupId'
+  Prelude.Text ->
+  ModifyVerifiedAccessGroup
+newModifyVerifiedAccessGroup pVerifiedAccessGroupId_ =
+  ModifyVerifiedAccessGroup'
+    { clientToken =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      verifiedAccessInstanceId = Prelude.Nothing,
+      verifiedAccessGroupId = pVerifiedAccessGroupId_
+    }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessGroup_clientToken :: Lens.Lens' ModifyVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessGroup_clientToken = Lens.lens (\ModifyVerifiedAccessGroup' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessGroup' {} a -> s {clientToken = a} :: ModifyVerifiedAccessGroup)
+
+-- | A description for the Amazon Web Services Verified Access group.
+modifyVerifiedAccessGroup_description :: Lens.Lens' ModifyVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessGroup_description = Lens.lens (\ModifyVerifiedAccessGroup' {description} -> description) (\s@ModifyVerifiedAccessGroup' {} a -> s {description = a} :: ModifyVerifiedAccessGroup)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessGroup_dryRun :: Lens.Lens' ModifyVerifiedAccessGroup (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessGroup_dryRun = Lens.lens (\ModifyVerifiedAccessGroup' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessGroup' {} a -> s {dryRun = a} :: ModifyVerifiedAccessGroup)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+modifyVerifiedAccessGroup_verifiedAccessInstanceId :: Lens.Lens' ModifyVerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessGroup_verifiedAccessInstanceId = Lens.lens (\ModifyVerifiedAccessGroup' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@ModifyVerifiedAccessGroup' {} a -> s {verifiedAccessInstanceId = a} :: ModifyVerifiedAccessGroup)
+
+-- | The ID of the Amazon Web Services Verified Access group.
+modifyVerifiedAccessGroup_verifiedAccessGroupId :: Lens.Lens' ModifyVerifiedAccessGroup Prelude.Text
+modifyVerifiedAccessGroup_verifiedAccessGroupId = Lens.lens (\ModifyVerifiedAccessGroup' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@ModifyVerifiedAccessGroup' {} a -> s {verifiedAccessGroupId = a} :: ModifyVerifiedAccessGroup)
+
+instance Core.AWSRequest ModifyVerifiedAccessGroup where
+  type
+    AWSResponse ModifyVerifiedAccessGroup =
+      ModifyVerifiedAccessGroupResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessGroupResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessGroup")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVerifiedAccessGroup where
+  hashWithSalt _salt ModifyVerifiedAccessGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+
+instance Prelude.NFData ModifyVerifiedAccessGroup where
+  rnf ModifyVerifiedAccessGroup' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+
+instance Data.ToHeaders ModifyVerifiedAccessGroup where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVerifiedAccessGroup where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVerifiedAccessGroup where
+  toQuery ModifyVerifiedAccessGroup' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVerifiedAccessGroup" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId,
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId
+      ]
+
+-- | /See:/ 'newModifyVerifiedAccessGroupResponse' smart constructor.
+data ModifyVerifiedAccessGroupResponse = ModifyVerifiedAccessGroupResponse'
+  { -- | Details of Amazon Web Services Verified Access group.
+    verifiedAccessGroup :: Prelude.Maybe VerifiedAccessGroup,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessGroupResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessGroup', 'modifyVerifiedAccessGroupResponse_verifiedAccessGroup' - Details of Amazon Web Services Verified Access group.
+--
+-- 'httpStatus', 'modifyVerifiedAccessGroupResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessGroupResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessGroupResponse
+newModifyVerifiedAccessGroupResponse pHttpStatus_ =
+  ModifyVerifiedAccessGroupResponse'
+    { verifiedAccessGroup =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Details of Amazon Web Services Verified Access group.
+modifyVerifiedAccessGroupResponse_verifiedAccessGroup :: Lens.Lens' ModifyVerifiedAccessGroupResponse (Prelude.Maybe VerifiedAccessGroup)
+modifyVerifiedAccessGroupResponse_verifiedAccessGroup = Lens.lens (\ModifyVerifiedAccessGroupResponse' {verifiedAccessGroup} -> verifiedAccessGroup) (\s@ModifyVerifiedAccessGroupResponse' {} a -> s {verifiedAccessGroup = a} :: ModifyVerifiedAccessGroupResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessGroupResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessGroupResponse Prelude.Int
+modifyVerifiedAccessGroupResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessGroupResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessGroupResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessGroupResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessGroupResponse
+  where
+  rnf ModifyVerifiedAccessGroupResponse' {..} =
+    Prelude.rnf verifiedAccessGroup
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessGroupPolicy.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessGroupPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessGroupPolicy.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessGroupPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified Verified Access group policy.
+module Amazonka.EC2.ModifyVerifiedAccessGroupPolicy
+  ( -- * Creating a Request
+    ModifyVerifiedAccessGroupPolicy (..),
+    newModifyVerifiedAccessGroupPolicy,
+
+    -- * Request Lenses
+    modifyVerifiedAccessGroupPolicy_clientToken,
+    modifyVerifiedAccessGroupPolicy_dryRun,
+    modifyVerifiedAccessGroupPolicy_policyDocument,
+    modifyVerifiedAccessGroupPolicy_verifiedAccessGroupId,
+    modifyVerifiedAccessGroupPolicy_policyEnabled,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessGroupPolicyResponse (..),
+    newModifyVerifiedAccessGroupPolicyResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessGroupPolicyResponse_policyDocument,
+    modifyVerifiedAccessGroupPolicyResponse_policyEnabled,
+    modifyVerifiedAccessGroupPolicyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessGroupPolicy' smart constructor.
+data ModifyVerifiedAccessGroupPolicy = ModifyVerifiedAccessGroupPolicy'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Text,
+    -- | The status of the Verified Access policy.
+    policyEnabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessGroupPolicy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessGroupPolicy_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'modifyVerifiedAccessGroupPolicy_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'policyDocument', 'modifyVerifiedAccessGroupPolicy_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'verifiedAccessGroupId', 'modifyVerifiedAccessGroupPolicy_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+--
+-- 'policyEnabled', 'modifyVerifiedAccessGroupPolicy_policyEnabled' - The status of the Verified Access policy.
+newModifyVerifiedAccessGroupPolicy ::
+  -- | 'verifiedAccessGroupId'
+  Prelude.Text ->
+  -- | 'policyEnabled'
+  Prelude.Bool ->
+  ModifyVerifiedAccessGroupPolicy
+newModifyVerifiedAccessGroupPolicy
+  pVerifiedAccessGroupId_
+  pPolicyEnabled_ =
+    ModifyVerifiedAccessGroupPolicy'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        policyDocument = Prelude.Nothing,
+        verifiedAccessGroupId =
+          pVerifiedAccessGroupId_,
+        policyEnabled = pPolicyEnabled_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessGroupPolicy_clientToken :: Lens.Lens' ModifyVerifiedAccessGroupPolicy (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessGroupPolicy_clientToken = Lens.lens (\ModifyVerifiedAccessGroupPolicy' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessGroupPolicy' {} a -> s {clientToken = a} :: ModifyVerifiedAccessGroupPolicy)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessGroupPolicy_dryRun :: Lens.Lens' ModifyVerifiedAccessGroupPolicy (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessGroupPolicy_dryRun = Lens.lens (\ModifyVerifiedAccessGroupPolicy' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessGroupPolicy' {} a -> s {dryRun = a} :: ModifyVerifiedAccessGroupPolicy)
+
+-- | The Amazon Web Services Verified Access policy document.
+modifyVerifiedAccessGroupPolicy_policyDocument :: Lens.Lens' ModifyVerifiedAccessGroupPolicy (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessGroupPolicy_policyDocument = Lens.lens (\ModifyVerifiedAccessGroupPolicy' {policyDocument} -> policyDocument) (\s@ModifyVerifiedAccessGroupPolicy' {} a -> s {policyDocument = a} :: ModifyVerifiedAccessGroupPolicy)
+
+-- | The ID of the Amazon Web Services Verified Access group.
+modifyVerifiedAccessGroupPolicy_verifiedAccessGroupId :: Lens.Lens' ModifyVerifiedAccessGroupPolicy Prelude.Text
+modifyVerifiedAccessGroupPolicy_verifiedAccessGroupId = Lens.lens (\ModifyVerifiedAccessGroupPolicy' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@ModifyVerifiedAccessGroupPolicy' {} a -> s {verifiedAccessGroupId = a} :: ModifyVerifiedAccessGroupPolicy)
+
+-- | The status of the Verified Access policy.
+modifyVerifiedAccessGroupPolicy_policyEnabled :: Lens.Lens' ModifyVerifiedAccessGroupPolicy Prelude.Bool
+modifyVerifiedAccessGroupPolicy_policyEnabled = Lens.lens (\ModifyVerifiedAccessGroupPolicy' {policyEnabled} -> policyEnabled) (\s@ModifyVerifiedAccessGroupPolicy' {} a -> s {policyEnabled = a} :: ModifyVerifiedAccessGroupPolicy)
+
+instance
+  Core.AWSRequest
+    ModifyVerifiedAccessGroupPolicy
+  where
+  type
+    AWSResponse ModifyVerifiedAccessGroupPolicy =
+      ModifyVerifiedAccessGroupPolicyResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessGroupPolicyResponse'
+            Prelude.<$> (x Data..@? "policyDocument")
+            Prelude.<*> (x Data..@? "policyEnabled")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessGroupPolicy
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessGroupPolicy' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` policyDocument
+        `Prelude.hashWithSalt` verifiedAccessGroupId
+        `Prelude.hashWithSalt` policyEnabled
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessGroupPolicy
+  where
+  rnf ModifyVerifiedAccessGroupPolicy' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+      `Prelude.seq` Prelude.rnf policyEnabled
+
+instance
+  Data.ToHeaders
+    ModifyVerifiedAccessGroupPolicy
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVerifiedAccessGroupPolicy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVerifiedAccessGroupPolicy where
+  toQuery ModifyVerifiedAccessGroupPolicy' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVerifiedAccessGroupPolicy" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "PolicyDocument" Data.=: policyDocument,
+        "VerifiedAccessGroupId"
+          Data.=: verifiedAccessGroupId,
+        "PolicyEnabled" Data.=: policyEnabled
+      ]
+
+-- | /See:/ 'newModifyVerifiedAccessGroupPolicyResponse' smart constructor.
+data ModifyVerifiedAccessGroupPolicyResponse = ModifyVerifiedAccessGroupPolicyResponse'
+  { -- | The Amazon Web Services Verified Access policy document.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Verified Access policy.
+    policyEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessGroupPolicyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyDocument', 'modifyVerifiedAccessGroupPolicyResponse_policyDocument' - The Amazon Web Services Verified Access policy document.
+--
+-- 'policyEnabled', 'modifyVerifiedAccessGroupPolicyResponse_policyEnabled' - The status of the Verified Access policy.
+--
+-- 'httpStatus', 'modifyVerifiedAccessGroupPolicyResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessGroupPolicyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessGroupPolicyResponse
+newModifyVerifiedAccessGroupPolicyResponse
+  pHttpStatus_ =
+    ModifyVerifiedAccessGroupPolicyResponse'
+      { policyDocument =
+          Prelude.Nothing,
+        policyEnabled = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Amazon Web Services Verified Access policy document.
+modifyVerifiedAccessGroupPolicyResponse_policyDocument :: Lens.Lens' ModifyVerifiedAccessGroupPolicyResponse (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessGroupPolicyResponse_policyDocument = Lens.lens (\ModifyVerifiedAccessGroupPolicyResponse' {policyDocument} -> policyDocument) (\s@ModifyVerifiedAccessGroupPolicyResponse' {} a -> s {policyDocument = a} :: ModifyVerifiedAccessGroupPolicyResponse)
+
+-- | The status of the Verified Access policy.
+modifyVerifiedAccessGroupPolicyResponse_policyEnabled :: Lens.Lens' ModifyVerifiedAccessGroupPolicyResponse (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessGroupPolicyResponse_policyEnabled = Lens.lens (\ModifyVerifiedAccessGroupPolicyResponse' {policyEnabled} -> policyEnabled) (\s@ModifyVerifiedAccessGroupPolicyResponse' {} a -> s {policyEnabled = a} :: ModifyVerifiedAccessGroupPolicyResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessGroupPolicyResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessGroupPolicyResponse Prelude.Int
+modifyVerifiedAccessGroupPolicyResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessGroupPolicyResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessGroupPolicyResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessGroupPolicyResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessGroupPolicyResponse
+  where
+  rnf ModifyVerifiedAccessGroupPolicyResponse' {..} =
+    Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf policyEnabled
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessInstance.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessInstance.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the configuration of the specified Verified Access instance.
+module Amazonka.EC2.ModifyVerifiedAccessInstance
+  ( -- * Creating a Request
+    ModifyVerifiedAccessInstance (..),
+    newModifyVerifiedAccessInstance,
+
+    -- * Request Lenses
+    modifyVerifiedAccessInstance_clientToken,
+    modifyVerifiedAccessInstance_description,
+    modifyVerifiedAccessInstance_dryRun,
+    modifyVerifiedAccessInstance_verifiedAccessInstanceId,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessInstanceResponse (..),
+    newModifyVerifiedAccessInstanceResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessInstanceResponse_verifiedAccessInstance,
+    modifyVerifiedAccessInstanceResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessInstance' smart constructor.
+data ModifyVerifiedAccessInstance = ModifyVerifiedAccessInstance'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access instance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessInstance_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'modifyVerifiedAccessInstance_description' - A description for the Amazon Web Services Verified Access instance.
+--
+-- 'dryRun', 'modifyVerifiedAccessInstance_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessInstanceId', 'modifyVerifiedAccessInstance_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newModifyVerifiedAccessInstance ::
+  -- | 'verifiedAccessInstanceId'
+  Prelude.Text ->
+  ModifyVerifiedAccessInstance
+newModifyVerifiedAccessInstance
+  pVerifiedAccessInstanceId_ =
+    ModifyVerifiedAccessInstance'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessInstanceId =
+          pVerifiedAccessInstanceId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessInstance_clientToken :: Lens.Lens' ModifyVerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessInstance_clientToken = Lens.lens (\ModifyVerifiedAccessInstance' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessInstance' {} a -> s {clientToken = a} :: ModifyVerifiedAccessInstance)
+
+-- | A description for the Amazon Web Services Verified Access instance.
+modifyVerifiedAccessInstance_description :: Lens.Lens' ModifyVerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessInstance_description = Lens.lens (\ModifyVerifiedAccessInstance' {description} -> description) (\s@ModifyVerifiedAccessInstance' {} a -> s {description = a} :: ModifyVerifiedAccessInstance)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessInstance_dryRun :: Lens.Lens' ModifyVerifiedAccessInstance (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessInstance_dryRun = Lens.lens (\ModifyVerifiedAccessInstance' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessInstance' {} a -> s {dryRun = a} :: ModifyVerifiedAccessInstance)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+modifyVerifiedAccessInstance_verifiedAccessInstanceId :: Lens.Lens' ModifyVerifiedAccessInstance Prelude.Text
+modifyVerifiedAccessInstance_verifiedAccessInstanceId = Lens.lens (\ModifyVerifiedAccessInstance' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@ModifyVerifiedAccessInstance' {} a -> s {verifiedAccessInstanceId = a} :: ModifyVerifiedAccessInstance)
+
+instance Core.AWSRequest ModifyVerifiedAccessInstance where
+  type
+    AWSResponse ModifyVerifiedAccessInstance =
+      ModifyVerifiedAccessInstanceResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessInstanceResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessInstance")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessInstance
+  where
+  hashWithSalt _salt ModifyVerifiedAccessInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance Prelude.NFData ModifyVerifiedAccessInstance where
+  rnf ModifyVerifiedAccessInstance' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+
+instance Data.ToHeaders ModifyVerifiedAccessInstance where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVerifiedAccessInstance where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVerifiedAccessInstance where
+  toQuery ModifyVerifiedAccessInstance' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVerifiedAccessInstance" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "VerifiedAccessInstanceId"
+          Data.=: verifiedAccessInstanceId
+      ]
+
+-- | /See:/ 'newModifyVerifiedAccessInstanceResponse' smart constructor.
+data ModifyVerifiedAccessInstanceResponse = ModifyVerifiedAccessInstanceResponse'
+  { -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstance :: Prelude.Maybe VerifiedAccessInstance,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessInstanceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessInstance', 'modifyVerifiedAccessInstanceResponse_verifiedAccessInstance' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'httpStatus', 'modifyVerifiedAccessInstanceResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessInstanceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessInstanceResponse
+newModifyVerifiedAccessInstanceResponse pHttpStatus_ =
+  ModifyVerifiedAccessInstanceResponse'
+    { verifiedAccessInstance =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+modifyVerifiedAccessInstanceResponse_verifiedAccessInstance :: Lens.Lens' ModifyVerifiedAccessInstanceResponse (Prelude.Maybe VerifiedAccessInstance)
+modifyVerifiedAccessInstanceResponse_verifiedAccessInstance = Lens.lens (\ModifyVerifiedAccessInstanceResponse' {verifiedAccessInstance} -> verifiedAccessInstance) (\s@ModifyVerifiedAccessInstanceResponse' {} a -> s {verifiedAccessInstance = a} :: ModifyVerifiedAccessInstanceResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessInstanceResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessInstanceResponse Prelude.Int
+modifyVerifiedAccessInstanceResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessInstanceResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessInstanceResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessInstanceResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessInstanceResponse
+  where
+  rnf ModifyVerifiedAccessInstanceResponse' {..} =
+    Prelude.rnf verifiedAccessInstance
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessInstanceLoggingConfiguration.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessInstanceLoggingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessInstanceLoggingConfiguration.hs
@@ -0,0 +1,259 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessInstanceLoggingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the logging configuration for the specified Amazon Web Services
+-- Verified Access instance.
+module Amazonka.EC2.ModifyVerifiedAccessInstanceLoggingConfiguration
+  ( -- * Creating a Request
+    ModifyVerifiedAccessInstanceLoggingConfiguration (..),
+    newModifyVerifiedAccessInstanceLoggingConfiguration,
+
+    -- * Request Lenses
+    modifyVerifiedAccessInstanceLoggingConfiguration_clientToken,
+    modifyVerifiedAccessInstanceLoggingConfiguration_dryRun,
+    modifyVerifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId,
+    modifyVerifiedAccessInstanceLoggingConfiguration_accessLogs,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessInstanceLoggingConfigurationResponse (..),
+    newModifyVerifiedAccessInstanceLoggingConfigurationResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessInstanceLoggingConfigurationResponse_loggingConfiguration,
+    modifyVerifiedAccessInstanceLoggingConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessInstanceLoggingConfiguration' smart constructor.
+data ModifyVerifiedAccessInstanceLoggingConfiguration = ModifyVerifiedAccessInstanceLoggingConfiguration'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Text,
+    -- | The configuration options for Amazon Web Services Verified Access
+    -- instances.
+    accessLogs :: VerifiedAccessLogOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessInstanceLoggingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessInstanceLoggingConfiguration_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'modifyVerifiedAccessInstanceLoggingConfiguration_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'verifiedAccessInstanceId', 'modifyVerifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'accessLogs', 'modifyVerifiedAccessInstanceLoggingConfiguration_accessLogs' - The configuration options for Amazon Web Services Verified Access
+-- instances.
+newModifyVerifiedAccessInstanceLoggingConfiguration ::
+  -- | 'verifiedAccessInstanceId'
+  Prelude.Text ->
+  -- | 'accessLogs'
+  VerifiedAccessLogOptions ->
+  ModifyVerifiedAccessInstanceLoggingConfiguration
+newModifyVerifiedAccessInstanceLoggingConfiguration
+  pVerifiedAccessInstanceId_
+  pAccessLogs_ =
+    ModifyVerifiedAccessInstanceLoggingConfiguration'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        verifiedAccessInstanceId =
+          pVerifiedAccessInstanceId_,
+        accessLogs = pAccessLogs_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessInstanceLoggingConfiguration_clientToken :: Lens.Lens' ModifyVerifiedAccessInstanceLoggingConfiguration (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessInstanceLoggingConfiguration_clientToken = Lens.lens (\ModifyVerifiedAccessInstanceLoggingConfiguration' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessInstanceLoggingConfiguration' {} a -> s {clientToken = a} :: ModifyVerifiedAccessInstanceLoggingConfiguration)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessInstanceLoggingConfiguration_dryRun :: Lens.Lens' ModifyVerifiedAccessInstanceLoggingConfiguration (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessInstanceLoggingConfiguration_dryRun = Lens.lens (\ModifyVerifiedAccessInstanceLoggingConfiguration' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessInstanceLoggingConfiguration' {} a -> s {dryRun = a} :: ModifyVerifiedAccessInstanceLoggingConfiguration)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+modifyVerifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId :: Lens.Lens' ModifyVerifiedAccessInstanceLoggingConfiguration Prelude.Text
+modifyVerifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId = Lens.lens (\ModifyVerifiedAccessInstanceLoggingConfiguration' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@ModifyVerifiedAccessInstanceLoggingConfiguration' {} a -> s {verifiedAccessInstanceId = a} :: ModifyVerifiedAccessInstanceLoggingConfiguration)
+
+-- | The configuration options for Amazon Web Services Verified Access
+-- instances.
+modifyVerifiedAccessInstanceLoggingConfiguration_accessLogs :: Lens.Lens' ModifyVerifiedAccessInstanceLoggingConfiguration VerifiedAccessLogOptions
+modifyVerifiedAccessInstanceLoggingConfiguration_accessLogs = Lens.lens (\ModifyVerifiedAccessInstanceLoggingConfiguration' {accessLogs} -> accessLogs) (\s@ModifyVerifiedAccessInstanceLoggingConfiguration' {} a -> s {accessLogs = a} :: ModifyVerifiedAccessInstanceLoggingConfiguration)
+
+instance
+  Core.AWSRequest
+    ModifyVerifiedAccessInstanceLoggingConfiguration
+  where
+  type
+    AWSResponse
+      ModifyVerifiedAccessInstanceLoggingConfiguration =
+      ModifyVerifiedAccessInstanceLoggingConfigurationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessInstanceLoggingConfigurationResponse'
+            Prelude.<$> (x Data..@? "loggingConfiguration")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessInstanceLoggingConfiguration
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessInstanceLoggingConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` verifiedAccessInstanceId
+        `Prelude.hashWithSalt` accessLogs
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessInstanceLoggingConfiguration
+  where
+  rnf
+    ModifyVerifiedAccessInstanceLoggingConfiguration' {..} =
+      Prelude.rnf clientToken
+        `Prelude.seq` Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+        `Prelude.seq` Prelude.rnf accessLogs
+
+instance
+  Data.ToHeaders
+    ModifyVerifiedAccessInstanceLoggingConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVerifiedAccessInstanceLoggingConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVerifiedAccessInstanceLoggingConfiguration
+  where
+  toQuery
+    ModifyVerifiedAccessInstanceLoggingConfiguration' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "ModifyVerifiedAccessInstanceLoggingConfiguration" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "ClientToken" Data.=: clientToken,
+          "DryRun" Data.=: dryRun,
+          "VerifiedAccessInstanceId"
+            Data.=: verifiedAccessInstanceId,
+          "AccessLogs" Data.=: accessLogs
+        ]
+
+-- | /See:/ 'newModifyVerifiedAccessInstanceLoggingConfigurationResponse' smart constructor.
+data ModifyVerifiedAccessInstanceLoggingConfigurationResponse = ModifyVerifiedAccessInstanceLoggingConfigurationResponse'
+  { -- | The logging configuration for Amazon Web Services Verified Access
+    -- instance.
+    loggingConfiguration :: Prelude.Maybe VerifiedAccessInstanceLoggingConfiguration,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessInstanceLoggingConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'loggingConfiguration', 'modifyVerifiedAccessInstanceLoggingConfigurationResponse_loggingConfiguration' - The logging configuration for Amazon Web Services Verified Access
+-- instance.
+--
+-- 'httpStatus', 'modifyVerifiedAccessInstanceLoggingConfigurationResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessInstanceLoggingConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessInstanceLoggingConfigurationResponse
+newModifyVerifiedAccessInstanceLoggingConfigurationResponse
+  pHttpStatus_ =
+    ModifyVerifiedAccessInstanceLoggingConfigurationResponse'
+      { loggingConfiguration =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The logging configuration for Amazon Web Services Verified Access
+-- instance.
+modifyVerifiedAccessInstanceLoggingConfigurationResponse_loggingConfiguration :: Lens.Lens' ModifyVerifiedAccessInstanceLoggingConfigurationResponse (Prelude.Maybe VerifiedAccessInstanceLoggingConfiguration)
+modifyVerifiedAccessInstanceLoggingConfigurationResponse_loggingConfiguration = Lens.lens (\ModifyVerifiedAccessInstanceLoggingConfigurationResponse' {loggingConfiguration} -> loggingConfiguration) (\s@ModifyVerifiedAccessInstanceLoggingConfigurationResponse' {} a -> s {loggingConfiguration = a} :: ModifyVerifiedAccessInstanceLoggingConfigurationResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessInstanceLoggingConfigurationResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessInstanceLoggingConfigurationResponse Prelude.Int
+modifyVerifiedAccessInstanceLoggingConfigurationResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessInstanceLoggingConfigurationResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessInstanceLoggingConfigurationResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessInstanceLoggingConfigurationResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessInstanceLoggingConfigurationResponse
+  where
+  rnf
+    ModifyVerifiedAccessInstanceLoggingConfigurationResponse' {..} =
+      Prelude.rnf loggingConfiguration
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVerifiedAccessTrustProvider.hs b/gen/Amazonka/EC2/ModifyVerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVerifiedAccessTrustProvider.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVerifiedAccessTrustProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the configuration of the specified Amazon Web Services Verified
+-- Access trust provider.
+module Amazonka.EC2.ModifyVerifiedAccessTrustProvider
+  ( -- * Creating a Request
+    ModifyVerifiedAccessTrustProvider (..),
+    newModifyVerifiedAccessTrustProvider,
+
+    -- * Request Lenses
+    modifyVerifiedAccessTrustProvider_clientToken,
+    modifyVerifiedAccessTrustProvider_description,
+    modifyVerifiedAccessTrustProvider_dryRun,
+    modifyVerifiedAccessTrustProvider_oidcOptions,
+    modifyVerifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+
+    -- * Destructuring the Response
+    ModifyVerifiedAccessTrustProviderResponse (..),
+    newModifyVerifiedAccessTrustProviderResponse,
+
+    -- * Response Lenses
+    modifyVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
+    modifyVerifiedAccessTrustProviderResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVerifiedAccessTrustProvider' smart constructor.
+data ModifyVerifiedAccessTrustProvider = ModifyVerifiedAccessTrustProvider'
+  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
+    -- your modification request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access trust
+    -- provider.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The OpenID Connect details for an @oidc@-type, user-identity based trust
+    -- provider.
+    oidcOptions :: Prelude.Maybe ModifyVerifiedAccessTrustProviderOidcOptions,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProviderId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessTrustProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'modifyVerifiedAccessTrustProvider_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'description', 'modifyVerifiedAccessTrustProvider_description' - A description for the Amazon Web Services Verified Access trust
+-- provider.
+--
+-- 'dryRun', 'modifyVerifiedAccessTrustProvider_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'oidcOptions', 'modifyVerifiedAccessTrustProvider_oidcOptions' - The OpenID Connect details for an @oidc@-type, user-identity based trust
+-- provider.
+--
+-- 'verifiedAccessTrustProviderId', 'modifyVerifiedAccessTrustProvider_verifiedAccessTrustProviderId' - The ID of the Amazon Web Services Verified Access trust provider.
+newModifyVerifiedAccessTrustProvider ::
+  -- | 'verifiedAccessTrustProviderId'
+  Prelude.Text ->
+  ModifyVerifiedAccessTrustProvider
+newModifyVerifiedAccessTrustProvider
+  pVerifiedAccessTrustProviderId_ =
+    ModifyVerifiedAccessTrustProvider'
+      { clientToken =
+          Prelude.Nothing,
+        description = Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        oidcOptions = Prelude.Nothing,
+        verifiedAccessTrustProviderId =
+          pVerifiedAccessTrustProviderId_
+      }
+
+-- | A unique, case-sensitive token that you provide to ensure idempotency of
+-- your modification request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+modifyVerifiedAccessTrustProvider_clientToken :: Lens.Lens' ModifyVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessTrustProvider_clientToken = Lens.lens (\ModifyVerifiedAccessTrustProvider' {clientToken} -> clientToken) (\s@ModifyVerifiedAccessTrustProvider' {} a -> s {clientToken = a} :: ModifyVerifiedAccessTrustProvider)
+
+-- | A description for the Amazon Web Services Verified Access trust
+-- provider.
+modifyVerifiedAccessTrustProvider_description :: Lens.Lens' ModifyVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessTrustProvider_description = Lens.lens (\ModifyVerifiedAccessTrustProvider' {description} -> description) (\s@ModifyVerifiedAccessTrustProvider' {} a -> s {description = a} :: ModifyVerifiedAccessTrustProvider)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVerifiedAccessTrustProvider_dryRun :: Lens.Lens' ModifyVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Bool)
+modifyVerifiedAccessTrustProvider_dryRun = Lens.lens (\ModifyVerifiedAccessTrustProvider' {dryRun} -> dryRun) (\s@ModifyVerifiedAccessTrustProvider' {} a -> s {dryRun = a} :: ModifyVerifiedAccessTrustProvider)
+
+-- | The OpenID Connect details for an @oidc@-type, user-identity based trust
+-- provider.
+modifyVerifiedAccessTrustProvider_oidcOptions :: Lens.Lens' ModifyVerifiedAccessTrustProvider (Prelude.Maybe ModifyVerifiedAccessTrustProviderOidcOptions)
+modifyVerifiedAccessTrustProvider_oidcOptions = Lens.lens (\ModifyVerifiedAccessTrustProvider' {oidcOptions} -> oidcOptions) (\s@ModifyVerifiedAccessTrustProvider' {} a -> s {oidcOptions = a} :: ModifyVerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+modifyVerifiedAccessTrustProvider_verifiedAccessTrustProviderId :: Lens.Lens' ModifyVerifiedAccessTrustProvider Prelude.Text
+modifyVerifiedAccessTrustProvider_verifiedAccessTrustProviderId = Lens.lens (\ModifyVerifiedAccessTrustProvider' {verifiedAccessTrustProviderId} -> verifiedAccessTrustProviderId) (\s@ModifyVerifiedAccessTrustProvider' {} a -> s {verifiedAccessTrustProviderId = a} :: ModifyVerifiedAccessTrustProvider)
+
+instance
+  Core.AWSRequest
+    ModifyVerifiedAccessTrustProvider
+  where
+  type
+    AWSResponse ModifyVerifiedAccessTrustProvider =
+      ModifyVerifiedAccessTrustProviderResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVerifiedAccessTrustProviderResponse'
+            Prelude.<$> (x Data..@? "verifiedAccessTrustProvider")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessTrustProvider
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessTrustProvider' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientToken
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` oidcOptions
+        `Prelude.hashWithSalt` verifiedAccessTrustProviderId
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessTrustProvider
+  where
+  rnf ModifyVerifiedAccessTrustProvider' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf oidcOptions
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderId
+
+instance
+  Data.ToHeaders
+    ModifyVerifiedAccessTrustProvider
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVerifiedAccessTrustProvider
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVerifiedAccessTrustProvider
+  where
+  toQuery ModifyVerifiedAccessTrustProvider' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVerifiedAccessTrustProvider" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "OidcOptions" Data.=: oidcOptions,
+        "VerifiedAccessTrustProviderId"
+          Data.=: verifiedAccessTrustProviderId
+      ]
+
+-- | /See:/ 'newModifyVerifiedAccessTrustProviderResponse' smart constructor.
+data ModifyVerifiedAccessTrustProviderResponse = ModifyVerifiedAccessTrustProviderResponse'
+  { -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProvider :: Prelude.Maybe VerifiedAccessTrustProvider,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessTrustProviderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'verifiedAccessTrustProvider', 'modifyVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider' - The ID of the Amazon Web Services Verified Access trust provider.
+--
+-- 'httpStatus', 'modifyVerifiedAccessTrustProviderResponse_httpStatus' - The response's http status code.
+newModifyVerifiedAccessTrustProviderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVerifiedAccessTrustProviderResponse
+newModifyVerifiedAccessTrustProviderResponse
+  pHttpStatus_ =
+    ModifyVerifiedAccessTrustProviderResponse'
+      { verifiedAccessTrustProvider =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+modifyVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider :: Lens.Lens' ModifyVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessTrustProvider)
+modifyVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider = Lens.lens (\ModifyVerifiedAccessTrustProviderResponse' {verifiedAccessTrustProvider} -> verifiedAccessTrustProvider) (\s@ModifyVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessTrustProvider = a} :: ModifyVerifiedAccessTrustProviderResponse)
+
+-- | The response's http status code.
+modifyVerifiedAccessTrustProviderResponse_httpStatus :: Lens.Lens' ModifyVerifiedAccessTrustProviderResponse Prelude.Int
+modifyVerifiedAccessTrustProviderResponse_httpStatus = Lens.lens (\ModifyVerifiedAccessTrustProviderResponse' {httpStatus} -> httpStatus) (\s@ModifyVerifiedAccessTrustProviderResponse' {} a -> s {httpStatus = a} :: ModifyVerifiedAccessTrustProviderResponse)
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessTrustProviderResponse
+  where
+  rnf ModifyVerifiedAccessTrustProviderResponse' {..} =
+    Prelude.rnf verifiedAccessTrustProvider
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVolume.hs b/gen/Amazonka/EC2/ModifyVolume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVolume.hs
@@ -0,0 +1,403 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVolume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- You can modify several parameters of an existing EBS volume, including
+-- volume size, volume type, and IOPS capacity. If your EBS volume is
+-- attached to a current-generation EC2 instance type, you might be able to
+-- apply these changes without stopping the instance or detaching the
+-- volume from it. For more information about modifying EBS volumes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modify-volume.html Amazon EBS Elastic Volumes>
+-- (Linux instances) or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-modify-volume.html Amazon EBS Elastic Volumes>
+-- (Windows instances).
+--
+-- When you complete a resize operation on your volume, you need to extend
+-- the volume\'s file-system size to take advantage of the new storage
+-- capacity. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-expand-volume.html#recognize-expanded-volume-linux Extend a Linux file system>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-expand-volume.html#recognize-expanded-volume-windows Extend a Windows file system>.
+--
+-- You can use CloudWatch Events to check the status of a modification to
+-- an EBS volume. For information about CloudWatch Events, see the
+-- <https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ Amazon CloudWatch Events User Guide>.
+-- You can also track the status of a modification using
+-- DescribeVolumesModifications. For information about tracking status
+-- changes using either method, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-modifications.html Monitor the progress of volume modifications>.
+--
+-- With previous-generation instance types, resizing an EBS volume might
+-- require detaching and reattaching the volume or stopping and restarting
+-- the instance.
+--
+-- After modifying a volume, you must wait at least six hours and ensure
+-- that the volume is in the @in-use@ or @available@ state before you can
+-- modify the same volume. This is sometimes referred to as a cooldown
+-- period.
+module Amazonka.EC2.ModifyVolume
+  ( -- * Creating a Request
+    ModifyVolume (..),
+    newModifyVolume,
+
+    -- * Request Lenses
+    modifyVolume_dryRun,
+    modifyVolume_iops,
+    modifyVolume_multiAttachEnabled,
+    modifyVolume_size,
+    modifyVolume_throughput,
+    modifyVolume_volumeType,
+    modifyVolume_volumeId,
+
+    -- * Destructuring the Response
+    ModifyVolumeResponse (..),
+    newModifyVolumeResponse,
+
+    -- * Response Lenses
+    modifyVolumeResponse_volumeModification,
+    modifyVolumeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVolume' smart constructor.
+data ModifyVolume = ModifyVolume'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The target IOPS rate of the volume. This parameter is valid only for
+    -- @gp3@, @io1@, and @io2@ volumes.
+    --
+    -- The following are the supported values for each volume type:
+    --
+    -- -   @gp3@: 3,000-16,000 IOPS
+    --
+    -- -   @io1@: 100-64,000 IOPS
+    --
+    -- -   @io2@: 100-64,000 IOPS
+    --
+    -- Default: The existing value is retained if you keep the same volume
+    -- type. If you change the volume type to @io1@, @io2@, or @gp3@, the
+    -- default is 3,000.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | Specifies whether to enable Amazon EBS Multi-Attach. If you enable
+    -- Multi-Attach, you can attach the volume to up to 16
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instances>
+    -- in the same Availability Zone. This parameter is supported with @io1@
+    -- and @io2@ volumes only. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html Amazon EBS Multi-Attach>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    multiAttachEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The target size of the volume, in GiB. The target volume size must be
+    -- greater than or equal to the existing size of the volume.
+    --
+    -- The following are the supported volumes sizes for each volume type:
+    --
+    -- -   @gp2@ and @gp3@: 1-16,384
+    --
+    -- -   @io1@ and @io2@: 4-16,384
+    --
+    -- -   @st1@ and @sc1@: 125-16,384
+    --
+    -- -   @standard@: 1-1,024
+    --
+    -- Default: The existing size is retained.
+    size :: Prelude.Maybe Prelude.Int,
+    -- | The target throughput of the volume, in MiB\/s. This parameter is valid
+    -- only for @gp3@ volumes. The maximum value is 1,000.
+    --
+    -- Default: The existing value is retained if the source and target volume
+    -- type is @gp3@. Otherwise, the default value is 125.
+    --
+    -- Valid Range: Minimum value of 125. Maximum value of 1000.
+    throughput :: Prelude.Maybe Prelude.Int,
+    -- | The target EBS volume type of the volume. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- Default: The existing type is retained.
+    volumeType :: Prelude.Maybe VolumeType,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVolume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyVolume_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'iops', 'modifyVolume_iops' - The target IOPS rate of the volume. This parameter is valid only for
+-- @gp3@, @io1@, and @io2@ volumes.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- Default: The existing value is retained if you keep the same volume
+-- type. If you change the volume type to @io1@, @io2@, or @gp3@, the
+-- default is 3,000.
+--
+-- 'multiAttachEnabled', 'modifyVolume_multiAttachEnabled' - Specifies whether to enable Amazon EBS Multi-Attach. If you enable
+-- Multi-Attach, you can attach the volume to up to 16
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instances>
+-- in the same Availability Zone. This parameter is supported with @io1@
+-- and @io2@ volumes only. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html Amazon EBS Multi-Attach>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'size', 'modifyVolume_size' - The target size of the volume, in GiB. The target volume size must be
+-- greater than or equal to the existing size of the volume.
+--
+-- The following are the supported volumes sizes for each volume type:
+--
+-- -   @gp2@ and @gp3@: 1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+--
+-- Default: The existing size is retained.
+--
+-- 'throughput', 'modifyVolume_throughput' - The target throughput of the volume, in MiB\/s. This parameter is valid
+-- only for @gp3@ volumes. The maximum value is 1,000.
+--
+-- Default: The existing value is retained if the source and target volume
+-- type is @gp3@. Otherwise, the default value is 125.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+--
+-- 'volumeType', 'modifyVolume_volumeType' - The target EBS volume type of the volume. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Default: The existing type is retained.
+--
+-- 'volumeId', 'modifyVolume_volumeId' - The ID of the volume.
+newModifyVolume ::
+  -- | 'volumeId'
+  Prelude.Text ->
+  ModifyVolume
+newModifyVolume pVolumeId_ =
+  ModifyVolume'
+    { dryRun = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      multiAttachEnabled = Prelude.Nothing,
+      size = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeType = Prelude.Nothing,
+      volumeId = pVolumeId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVolume_dryRun :: Lens.Lens' ModifyVolume (Prelude.Maybe Prelude.Bool)
+modifyVolume_dryRun = Lens.lens (\ModifyVolume' {dryRun} -> dryRun) (\s@ModifyVolume' {} a -> s {dryRun = a} :: ModifyVolume)
+
+-- | The target IOPS rate of the volume. This parameter is valid only for
+-- @gp3@, @io1@, and @io2@ volumes.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- Default: The existing value is retained if you keep the same volume
+-- type. If you change the volume type to @io1@, @io2@, or @gp3@, the
+-- default is 3,000.
+modifyVolume_iops :: Lens.Lens' ModifyVolume (Prelude.Maybe Prelude.Int)
+modifyVolume_iops = Lens.lens (\ModifyVolume' {iops} -> iops) (\s@ModifyVolume' {} a -> s {iops = a} :: ModifyVolume)
+
+-- | Specifies whether to enable Amazon EBS Multi-Attach. If you enable
+-- Multi-Attach, you can attach the volume to up to 16
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instances>
+-- in the same Availability Zone. This parameter is supported with @io1@
+-- and @io2@ volumes only. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes-multi.html Amazon EBS Multi-Attach>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+modifyVolume_multiAttachEnabled :: Lens.Lens' ModifyVolume (Prelude.Maybe Prelude.Bool)
+modifyVolume_multiAttachEnabled = Lens.lens (\ModifyVolume' {multiAttachEnabled} -> multiAttachEnabled) (\s@ModifyVolume' {} a -> s {multiAttachEnabled = a} :: ModifyVolume)
+
+-- | The target size of the volume, in GiB. The target volume size must be
+-- greater than or equal to the existing size of the volume.
+--
+-- The following are the supported volumes sizes for each volume type:
+--
+-- -   @gp2@ and @gp3@: 1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+--
+-- Default: The existing size is retained.
+modifyVolume_size :: Lens.Lens' ModifyVolume (Prelude.Maybe Prelude.Int)
+modifyVolume_size = Lens.lens (\ModifyVolume' {size} -> size) (\s@ModifyVolume' {} a -> s {size = a} :: ModifyVolume)
+
+-- | The target throughput of the volume, in MiB\/s. This parameter is valid
+-- only for @gp3@ volumes. The maximum value is 1,000.
+--
+-- Default: The existing value is retained if the source and target volume
+-- type is @gp3@. Otherwise, the default value is 125.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+modifyVolume_throughput :: Lens.Lens' ModifyVolume (Prelude.Maybe Prelude.Int)
+modifyVolume_throughput = Lens.lens (\ModifyVolume' {throughput} -> throughput) (\s@ModifyVolume' {} a -> s {throughput = a} :: ModifyVolume)
+
+-- | The target EBS volume type of the volume. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Default: The existing type is retained.
+modifyVolume_volumeType :: Lens.Lens' ModifyVolume (Prelude.Maybe VolumeType)
+modifyVolume_volumeType = Lens.lens (\ModifyVolume' {volumeType} -> volumeType) (\s@ModifyVolume' {} a -> s {volumeType = a} :: ModifyVolume)
+
+-- | The ID of the volume.
+modifyVolume_volumeId :: Lens.Lens' ModifyVolume Prelude.Text
+modifyVolume_volumeId = Lens.lens (\ModifyVolume' {volumeId} -> volumeId) (\s@ModifyVolume' {} a -> s {volumeId = a} :: ModifyVolume)
+
+instance Core.AWSRequest ModifyVolume where
+  type AWSResponse ModifyVolume = ModifyVolumeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVolumeResponse'
+            Prelude.<$> (x Data..@? "volumeModification")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVolume where
+  hashWithSalt _salt ModifyVolume' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` multiAttachEnabled
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` throughput
+      `Prelude.hashWithSalt` volumeType
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData ModifyVolume where
+  rnf ModifyVolume' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf multiAttachEnabled
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeType
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders ModifyVolume where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVolume where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVolume where
+  toQuery ModifyVolume' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVolume" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Iops" Data.=: iops,
+        "MultiAttachEnabled" Data.=: multiAttachEnabled,
+        "Size" Data.=: size,
+        "Throughput" Data.=: throughput,
+        "VolumeType" Data.=: volumeType,
+        "VolumeId" Data.=: volumeId
+      ]
+
+-- | /See:/ 'newModifyVolumeResponse' smart constructor.
+data ModifyVolumeResponse = ModifyVolumeResponse'
+  { -- | Information about the volume modification.
+    volumeModification :: Prelude.Maybe VolumeModification,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVolumeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'volumeModification', 'modifyVolumeResponse_volumeModification' - Information about the volume modification.
+--
+-- 'httpStatus', 'modifyVolumeResponse_httpStatus' - The response's http status code.
+newModifyVolumeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVolumeResponse
+newModifyVolumeResponse pHttpStatus_ =
+  ModifyVolumeResponse'
+    { volumeModification =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the volume modification.
+modifyVolumeResponse_volumeModification :: Lens.Lens' ModifyVolumeResponse (Prelude.Maybe VolumeModification)
+modifyVolumeResponse_volumeModification = Lens.lens (\ModifyVolumeResponse' {volumeModification} -> volumeModification) (\s@ModifyVolumeResponse' {} a -> s {volumeModification = a} :: ModifyVolumeResponse)
+
+-- | The response's http status code.
+modifyVolumeResponse_httpStatus :: Lens.Lens' ModifyVolumeResponse Prelude.Int
+modifyVolumeResponse_httpStatus = Lens.lens (\ModifyVolumeResponse' {httpStatus} -> httpStatus) (\s@ModifyVolumeResponse' {} a -> s {httpStatus = a} :: ModifyVolumeResponse)
+
+instance Prelude.NFData ModifyVolumeResponse where
+  rnf ModifyVolumeResponse' {..} =
+    Prelude.rnf volumeModification
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVolumeAttribute.hs b/gen/Amazonka/EC2/ModifyVolumeAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVolumeAttribute.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVolumeAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a volume attribute.
+--
+-- By default, all I\/O operations for the volume are suspended when the
+-- data on the volume is determined to be potentially inconsistent, to
+-- prevent undetectable, latent data corruption. The I\/O access to the
+-- volume can be resumed by first enabling I\/O access and then checking
+-- the data consistency on your volume.
+--
+-- You can change the default behavior to resume I\/O operations. We
+-- recommend that you change this only for boot volumes or for volumes that
+-- are stateless or disposable.
+module Amazonka.EC2.ModifyVolumeAttribute
+  ( -- * Creating a Request
+    ModifyVolumeAttribute (..),
+    newModifyVolumeAttribute,
+
+    -- * Request Lenses
+    modifyVolumeAttribute_autoEnableIO,
+    modifyVolumeAttribute_dryRun,
+    modifyVolumeAttribute_volumeId,
+
+    -- * Destructuring the Response
+    ModifyVolumeAttributeResponse (..),
+    newModifyVolumeAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVolumeAttribute' smart constructor.
+data ModifyVolumeAttribute = ModifyVolumeAttribute'
+  { -- | Indicates whether the volume should be auto-enabled for I\/O operations.
+    autoEnableIO :: Prelude.Maybe AttributeBooleanValue,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVolumeAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoEnableIO', 'modifyVolumeAttribute_autoEnableIO' - Indicates whether the volume should be auto-enabled for I\/O operations.
+--
+-- 'dryRun', 'modifyVolumeAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'volumeId', 'modifyVolumeAttribute_volumeId' - The ID of the volume.
+newModifyVolumeAttribute ::
+  -- | 'volumeId'
+  Prelude.Text ->
+  ModifyVolumeAttribute
+newModifyVolumeAttribute pVolumeId_ =
+  ModifyVolumeAttribute'
+    { autoEnableIO =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      volumeId = pVolumeId_
+    }
+
+-- | Indicates whether the volume should be auto-enabled for I\/O operations.
+modifyVolumeAttribute_autoEnableIO :: Lens.Lens' ModifyVolumeAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyVolumeAttribute_autoEnableIO = Lens.lens (\ModifyVolumeAttribute' {autoEnableIO} -> autoEnableIO) (\s@ModifyVolumeAttribute' {} a -> s {autoEnableIO = a} :: ModifyVolumeAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVolumeAttribute_dryRun :: Lens.Lens' ModifyVolumeAttribute (Prelude.Maybe Prelude.Bool)
+modifyVolumeAttribute_dryRun = Lens.lens (\ModifyVolumeAttribute' {dryRun} -> dryRun) (\s@ModifyVolumeAttribute' {} a -> s {dryRun = a} :: ModifyVolumeAttribute)
+
+-- | The ID of the volume.
+modifyVolumeAttribute_volumeId :: Lens.Lens' ModifyVolumeAttribute Prelude.Text
+modifyVolumeAttribute_volumeId = Lens.lens (\ModifyVolumeAttribute' {volumeId} -> volumeId) (\s@ModifyVolumeAttribute' {} a -> s {volumeId = a} :: ModifyVolumeAttribute)
+
+instance Core.AWSRequest ModifyVolumeAttribute where
+  type
+    AWSResponse ModifyVolumeAttribute =
+      ModifyVolumeAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ModifyVolumeAttributeResponse'
+
+instance Prelude.Hashable ModifyVolumeAttribute where
+  hashWithSalt _salt ModifyVolumeAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoEnableIO
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData ModifyVolumeAttribute where
+  rnf ModifyVolumeAttribute' {..} =
+    Prelude.rnf autoEnableIO
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance Data.ToHeaders ModifyVolumeAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVolumeAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVolumeAttribute where
+  toQuery ModifyVolumeAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVolumeAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AutoEnableIO" Data.=: autoEnableIO,
+        "DryRun" Data.=: dryRun,
+        "VolumeId" Data.=: volumeId
+      ]
+
+-- | /See:/ 'newModifyVolumeAttributeResponse' smart constructor.
+data ModifyVolumeAttributeResponse = ModifyVolumeAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVolumeAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyVolumeAttributeResponse ::
+  ModifyVolumeAttributeResponse
+newModifyVolumeAttributeResponse =
+  ModifyVolumeAttributeResponse'
+
+instance Prelude.NFData ModifyVolumeAttributeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyVpcAttribute.hs b/gen/Amazonka/EC2/ModifyVpcAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcAttribute.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the specified attribute of the specified VPC.
+module Amazonka.EC2.ModifyVpcAttribute
+  ( -- * Creating a Request
+    ModifyVpcAttribute (..),
+    newModifyVpcAttribute,
+
+    -- * Request Lenses
+    modifyVpcAttribute_enableDnsHostnames,
+    modifyVpcAttribute_enableDnsSupport,
+    modifyVpcAttribute_enableNetworkAddressUsageMetrics,
+    modifyVpcAttribute_vpcId,
+
+    -- * Destructuring the Response
+    ModifyVpcAttributeResponse (..),
+    newModifyVpcAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcAttribute' smart constructor.
+data ModifyVpcAttribute = ModifyVpcAttribute'
+  { -- | Indicates whether the instances launched in the VPC get DNS hostnames.
+    -- If enabled, instances in the VPC get DNS hostnames; otherwise, they do
+    -- not.
+    --
+    -- You cannot modify the DNS resolution and DNS hostnames attributes in the
+    -- same request. Use separate requests for each attribute. You can only
+    -- enable DNS hostnames if you\'ve enabled DNS support.
+    enableDnsHostnames :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether the DNS resolution is supported for the VPC. If
+    -- enabled, queries to the Amazon provided DNS server at the
+    -- 169.254.169.253 IP address, or the reserved IP address at the base of
+    -- the VPC network range \"plus two\" succeed. If disabled, the Amazon
+    -- provided DNS service in the VPC that resolves public DNS hostnames to IP
+    -- addresses is not enabled.
+    --
+    -- You cannot modify the DNS resolution and DNS hostnames attributes in the
+    -- same request. Use separate requests for each attribute.
+    enableDnsSupport :: Prelude.Maybe AttributeBooleanValue,
+    -- | Indicates whether Network Address Usage metrics are enabled for your
+    -- VPC.
+    enableNetworkAddressUsageMetrics :: Prelude.Maybe AttributeBooleanValue,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableDnsHostnames', 'modifyVpcAttribute_enableDnsHostnames' - Indicates whether the instances launched in the VPC get DNS hostnames.
+-- If enabled, instances in the VPC get DNS hostnames; otherwise, they do
+-- not.
+--
+-- You cannot modify the DNS resolution and DNS hostnames attributes in the
+-- same request. Use separate requests for each attribute. You can only
+-- enable DNS hostnames if you\'ve enabled DNS support.
+--
+-- 'enableDnsSupport', 'modifyVpcAttribute_enableDnsSupport' - Indicates whether the DNS resolution is supported for the VPC. If
+-- enabled, queries to the Amazon provided DNS server at the
+-- 169.254.169.253 IP address, or the reserved IP address at the base of
+-- the VPC network range \"plus two\" succeed. If disabled, the Amazon
+-- provided DNS service in the VPC that resolves public DNS hostnames to IP
+-- addresses is not enabled.
+--
+-- You cannot modify the DNS resolution and DNS hostnames attributes in the
+-- same request. Use separate requests for each attribute.
+--
+-- 'enableNetworkAddressUsageMetrics', 'modifyVpcAttribute_enableNetworkAddressUsageMetrics' - Indicates whether Network Address Usage metrics are enabled for your
+-- VPC.
+--
+-- 'vpcId', 'modifyVpcAttribute_vpcId' - The ID of the VPC.
+newModifyVpcAttribute ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  ModifyVpcAttribute
+newModifyVpcAttribute pVpcId_ =
+  ModifyVpcAttribute'
+    { enableDnsHostnames =
+        Prelude.Nothing,
+      enableDnsSupport = Prelude.Nothing,
+      enableNetworkAddressUsageMetrics = Prelude.Nothing,
+      vpcId = pVpcId_
+    }
+
+-- | Indicates whether the instances launched in the VPC get DNS hostnames.
+-- If enabled, instances in the VPC get DNS hostnames; otherwise, they do
+-- not.
+--
+-- You cannot modify the DNS resolution and DNS hostnames attributes in the
+-- same request. Use separate requests for each attribute. You can only
+-- enable DNS hostnames if you\'ve enabled DNS support.
+modifyVpcAttribute_enableDnsHostnames :: Lens.Lens' ModifyVpcAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyVpcAttribute_enableDnsHostnames = Lens.lens (\ModifyVpcAttribute' {enableDnsHostnames} -> enableDnsHostnames) (\s@ModifyVpcAttribute' {} a -> s {enableDnsHostnames = a} :: ModifyVpcAttribute)
+
+-- | Indicates whether the DNS resolution is supported for the VPC. If
+-- enabled, queries to the Amazon provided DNS server at the
+-- 169.254.169.253 IP address, or the reserved IP address at the base of
+-- the VPC network range \"plus two\" succeed. If disabled, the Amazon
+-- provided DNS service in the VPC that resolves public DNS hostnames to IP
+-- addresses is not enabled.
+--
+-- You cannot modify the DNS resolution and DNS hostnames attributes in the
+-- same request. Use separate requests for each attribute.
+modifyVpcAttribute_enableDnsSupport :: Lens.Lens' ModifyVpcAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyVpcAttribute_enableDnsSupport = Lens.lens (\ModifyVpcAttribute' {enableDnsSupport} -> enableDnsSupport) (\s@ModifyVpcAttribute' {} a -> s {enableDnsSupport = a} :: ModifyVpcAttribute)
+
+-- | Indicates whether Network Address Usage metrics are enabled for your
+-- VPC.
+modifyVpcAttribute_enableNetworkAddressUsageMetrics :: Lens.Lens' ModifyVpcAttribute (Prelude.Maybe AttributeBooleanValue)
+modifyVpcAttribute_enableNetworkAddressUsageMetrics = Lens.lens (\ModifyVpcAttribute' {enableNetworkAddressUsageMetrics} -> enableNetworkAddressUsageMetrics) (\s@ModifyVpcAttribute' {} a -> s {enableNetworkAddressUsageMetrics = a} :: ModifyVpcAttribute)
+
+-- | The ID of the VPC.
+modifyVpcAttribute_vpcId :: Lens.Lens' ModifyVpcAttribute Prelude.Text
+modifyVpcAttribute_vpcId = Lens.lens (\ModifyVpcAttribute' {vpcId} -> vpcId) (\s@ModifyVpcAttribute' {} a -> s {vpcId = a} :: ModifyVpcAttribute)
+
+instance Core.AWSRequest ModifyVpcAttribute where
+  type
+    AWSResponse ModifyVpcAttribute =
+      ModifyVpcAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ModifyVpcAttributeResponse'
+
+instance Prelude.Hashable ModifyVpcAttribute where
+  hashWithSalt _salt ModifyVpcAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableDnsHostnames
+      `Prelude.hashWithSalt` enableDnsSupport
+      `Prelude.hashWithSalt` enableNetworkAddressUsageMetrics
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData ModifyVpcAttribute where
+  rnf ModifyVpcAttribute' {..} =
+    Prelude.rnf enableDnsHostnames
+      `Prelude.seq` Prelude.rnf enableDnsSupport
+      `Prelude.seq` Prelude.rnf enableNetworkAddressUsageMetrics
+      `Prelude.seq` Prelude.rnf vpcId
+
+instance Data.ToHeaders ModifyVpcAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpcAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpcAttribute where
+  toQuery ModifyVpcAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpcAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "EnableDnsHostnames" Data.=: enableDnsHostnames,
+        "EnableDnsSupport" Data.=: enableDnsSupport,
+        "EnableNetworkAddressUsageMetrics"
+          Data.=: enableNetworkAddressUsageMetrics,
+        "VpcId" Data.=: vpcId
+      ]
+
+-- | /See:/ 'newModifyVpcAttributeResponse' smart constructor.
+data ModifyVpcAttributeResponse = ModifyVpcAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newModifyVpcAttributeResponse ::
+  ModifyVpcAttributeResponse
+newModifyVpcAttributeResponse =
+  ModifyVpcAttributeResponse'
+
+instance Prelude.NFData ModifyVpcAttributeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ModifyVpcEndpoint.hs b/gen/Amazonka/EC2/ModifyVpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcEndpoint.hs
@@ -0,0 +1,382 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies attributes of a specified VPC endpoint. The attributes that you
+-- can modify depend on the type of VPC endpoint (interface, gateway, or
+-- Gateway Load Balancer). For more information, see the
+-- <https://docs.aws.amazon.com/vpc/latest/privatelink/ Amazon Web Services PrivateLink Guide>.
+module Amazonka.EC2.ModifyVpcEndpoint
+  ( -- * Creating a Request
+    ModifyVpcEndpoint (..),
+    newModifyVpcEndpoint,
+
+    -- * Request Lenses
+    modifyVpcEndpoint_addRouteTableIds,
+    modifyVpcEndpoint_addSecurityGroupIds,
+    modifyVpcEndpoint_addSubnetIds,
+    modifyVpcEndpoint_dnsOptions,
+    modifyVpcEndpoint_dryRun,
+    modifyVpcEndpoint_ipAddressType,
+    modifyVpcEndpoint_policyDocument,
+    modifyVpcEndpoint_privateDnsEnabled,
+    modifyVpcEndpoint_removeRouteTableIds,
+    modifyVpcEndpoint_removeSecurityGroupIds,
+    modifyVpcEndpoint_removeSubnetIds,
+    modifyVpcEndpoint_resetPolicy,
+    modifyVpcEndpoint_vpcEndpointId,
+
+    -- * Destructuring the Response
+    ModifyVpcEndpointResponse (..),
+    newModifyVpcEndpointResponse,
+
+    -- * Response Lenses
+    modifyVpcEndpointResponse_return,
+    modifyVpcEndpointResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ModifyVpcEndpoint.
+--
+-- /See:/ 'newModifyVpcEndpoint' smart constructor.
+data ModifyVpcEndpoint = ModifyVpcEndpoint'
+  { -- | (Gateway endpoint) One or more route tables IDs to associate with the
+    -- endpoint.
+    addRouteTableIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface endpoint) One or more security group IDs to associate with
+    -- the network interface.
+    addSecurityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface and Gateway Load Balancer endpoints) One or more subnet IDs
+    -- in which to serve the endpoint. For a Gateway Load Balancer endpoint,
+    -- you can specify only one subnet.
+    addSubnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The DNS options for the endpoint.
+    dnsOptions :: Prelude.Maybe DnsOptionsSpecification,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address type for the endpoint.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | (Interface and gateway endpoints) A policy to attach to the endpoint
+    -- that controls access to the service. The policy must be in valid JSON
+    -- format.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | (Interface endpoint) Indicates whether a private hosted zone is
+    -- associated with the VPC.
+    privateDnsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | (Gateway endpoint) One or more route table IDs to disassociate from the
+    -- endpoint.
+    removeRouteTableIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface endpoint) One or more security group IDs to disassociate from
+    -- the network interface.
+    removeSecurityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface endpoint) One or more subnets IDs in which to remove the
+    -- endpoint.
+    removeSubnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | (Gateway endpoint) Specify @true@ to reset the policy document to the
+    -- default policy. The default policy allows full access to the service.
+    resetPolicy :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the endpoint.
+    vpcEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addRouteTableIds', 'modifyVpcEndpoint_addRouteTableIds' - (Gateway endpoint) One or more route tables IDs to associate with the
+-- endpoint.
+--
+-- 'addSecurityGroupIds', 'modifyVpcEndpoint_addSecurityGroupIds' - (Interface endpoint) One or more security group IDs to associate with
+-- the network interface.
+--
+-- 'addSubnetIds', 'modifyVpcEndpoint_addSubnetIds' - (Interface and Gateway Load Balancer endpoints) One or more subnet IDs
+-- in which to serve the endpoint. For a Gateway Load Balancer endpoint,
+-- you can specify only one subnet.
+--
+-- 'dnsOptions', 'modifyVpcEndpoint_dnsOptions' - The DNS options for the endpoint.
+--
+-- 'dryRun', 'modifyVpcEndpoint_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipAddressType', 'modifyVpcEndpoint_ipAddressType' - The IP address type for the endpoint.
+--
+-- 'policyDocument', 'modifyVpcEndpoint_policyDocument' - (Interface and gateway endpoints) A policy to attach to the endpoint
+-- that controls access to the service. The policy must be in valid JSON
+-- format.
+--
+-- 'privateDnsEnabled', 'modifyVpcEndpoint_privateDnsEnabled' - (Interface endpoint) Indicates whether a private hosted zone is
+-- associated with the VPC.
+--
+-- 'removeRouteTableIds', 'modifyVpcEndpoint_removeRouteTableIds' - (Gateway endpoint) One or more route table IDs to disassociate from the
+-- endpoint.
+--
+-- 'removeSecurityGroupIds', 'modifyVpcEndpoint_removeSecurityGroupIds' - (Interface endpoint) One or more security group IDs to disassociate from
+-- the network interface.
+--
+-- 'removeSubnetIds', 'modifyVpcEndpoint_removeSubnetIds' - (Interface endpoint) One or more subnets IDs in which to remove the
+-- endpoint.
+--
+-- 'resetPolicy', 'modifyVpcEndpoint_resetPolicy' - (Gateway endpoint) Specify @true@ to reset the policy document to the
+-- default policy. The default policy allows full access to the service.
+--
+-- 'vpcEndpointId', 'modifyVpcEndpoint_vpcEndpointId' - The ID of the endpoint.
+newModifyVpcEndpoint ::
+  -- | 'vpcEndpointId'
+  Prelude.Text ->
+  ModifyVpcEndpoint
+newModifyVpcEndpoint pVpcEndpointId_ =
+  ModifyVpcEndpoint'
+    { addRouteTableIds =
+        Prelude.Nothing,
+      addSecurityGroupIds = Prelude.Nothing,
+      addSubnetIds = Prelude.Nothing,
+      dnsOptions = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      policyDocument = Prelude.Nothing,
+      privateDnsEnabled = Prelude.Nothing,
+      removeRouteTableIds = Prelude.Nothing,
+      removeSecurityGroupIds = Prelude.Nothing,
+      removeSubnetIds = Prelude.Nothing,
+      resetPolicy = Prelude.Nothing,
+      vpcEndpointId = pVpcEndpointId_
+    }
+
+-- | (Gateway endpoint) One or more route tables IDs to associate with the
+-- endpoint.
+modifyVpcEndpoint_addRouteTableIds :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpoint_addRouteTableIds = Lens.lens (\ModifyVpcEndpoint' {addRouteTableIds} -> addRouteTableIds) (\s@ModifyVpcEndpoint' {} a -> s {addRouteTableIds = a} :: ModifyVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface endpoint) One or more security group IDs to associate with
+-- the network interface.
+modifyVpcEndpoint_addSecurityGroupIds :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpoint_addSecurityGroupIds = Lens.lens (\ModifyVpcEndpoint' {addSecurityGroupIds} -> addSecurityGroupIds) (\s@ModifyVpcEndpoint' {} a -> s {addSecurityGroupIds = a} :: ModifyVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface and Gateway Load Balancer endpoints) One or more subnet IDs
+-- in which to serve the endpoint. For a Gateway Load Balancer endpoint,
+-- you can specify only one subnet.
+modifyVpcEndpoint_addSubnetIds :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpoint_addSubnetIds = Lens.lens (\ModifyVpcEndpoint' {addSubnetIds} -> addSubnetIds) (\s@ModifyVpcEndpoint' {} a -> s {addSubnetIds = a} :: ModifyVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The DNS options for the endpoint.
+modifyVpcEndpoint_dnsOptions :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe DnsOptionsSpecification)
+modifyVpcEndpoint_dnsOptions = Lens.lens (\ModifyVpcEndpoint' {dnsOptions} -> dnsOptions) (\s@ModifyVpcEndpoint' {} a -> s {dnsOptions = a} :: ModifyVpcEndpoint)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcEndpoint_dryRun :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpoint_dryRun = Lens.lens (\ModifyVpcEndpoint' {dryRun} -> dryRun) (\s@ModifyVpcEndpoint' {} a -> s {dryRun = a} :: ModifyVpcEndpoint)
+
+-- | The IP address type for the endpoint.
+modifyVpcEndpoint_ipAddressType :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe IpAddressType)
+modifyVpcEndpoint_ipAddressType = Lens.lens (\ModifyVpcEndpoint' {ipAddressType} -> ipAddressType) (\s@ModifyVpcEndpoint' {} a -> s {ipAddressType = a} :: ModifyVpcEndpoint)
+
+-- | (Interface and gateway endpoints) A policy to attach to the endpoint
+-- that controls access to the service. The policy must be in valid JSON
+-- format.
+modifyVpcEndpoint_policyDocument :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe Prelude.Text)
+modifyVpcEndpoint_policyDocument = Lens.lens (\ModifyVpcEndpoint' {policyDocument} -> policyDocument) (\s@ModifyVpcEndpoint' {} a -> s {policyDocument = a} :: ModifyVpcEndpoint)
+
+-- | (Interface endpoint) Indicates whether a private hosted zone is
+-- associated with the VPC.
+modifyVpcEndpoint_privateDnsEnabled :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpoint_privateDnsEnabled = Lens.lens (\ModifyVpcEndpoint' {privateDnsEnabled} -> privateDnsEnabled) (\s@ModifyVpcEndpoint' {} a -> s {privateDnsEnabled = a} :: ModifyVpcEndpoint)
+
+-- | (Gateway endpoint) One or more route table IDs to disassociate from the
+-- endpoint.
+modifyVpcEndpoint_removeRouteTableIds :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpoint_removeRouteTableIds = Lens.lens (\ModifyVpcEndpoint' {removeRouteTableIds} -> removeRouteTableIds) (\s@ModifyVpcEndpoint' {} a -> s {removeRouteTableIds = a} :: ModifyVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface endpoint) One or more security group IDs to disassociate from
+-- the network interface.
+modifyVpcEndpoint_removeSecurityGroupIds :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpoint_removeSecurityGroupIds = Lens.lens (\ModifyVpcEndpoint' {removeSecurityGroupIds} -> removeSecurityGroupIds) (\s@ModifyVpcEndpoint' {} a -> s {removeSecurityGroupIds = a} :: ModifyVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface endpoint) One or more subnets IDs in which to remove the
+-- endpoint.
+modifyVpcEndpoint_removeSubnetIds :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpoint_removeSubnetIds = Lens.lens (\ModifyVpcEndpoint' {removeSubnetIds} -> removeSubnetIds) (\s@ModifyVpcEndpoint' {} a -> s {removeSubnetIds = a} :: ModifyVpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Gateway endpoint) Specify @true@ to reset the policy document to the
+-- default policy. The default policy allows full access to the service.
+modifyVpcEndpoint_resetPolicy :: Lens.Lens' ModifyVpcEndpoint (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpoint_resetPolicy = Lens.lens (\ModifyVpcEndpoint' {resetPolicy} -> resetPolicy) (\s@ModifyVpcEndpoint' {} a -> s {resetPolicy = a} :: ModifyVpcEndpoint)
+
+-- | The ID of the endpoint.
+modifyVpcEndpoint_vpcEndpointId :: Lens.Lens' ModifyVpcEndpoint Prelude.Text
+modifyVpcEndpoint_vpcEndpointId = Lens.lens (\ModifyVpcEndpoint' {vpcEndpointId} -> vpcEndpointId) (\s@ModifyVpcEndpoint' {} a -> s {vpcEndpointId = a} :: ModifyVpcEndpoint)
+
+instance Core.AWSRequest ModifyVpcEndpoint where
+  type
+    AWSResponse ModifyVpcEndpoint =
+      ModifyVpcEndpointResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcEndpointResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVpcEndpoint where
+  hashWithSalt _salt ModifyVpcEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` addRouteTableIds
+      `Prelude.hashWithSalt` addSecurityGroupIds
+      `Prelude.hashWithSalt` addSubnetIds
+      `Prelude.hashWithSalt` dnsOptions
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` privateDnsEnabled
+      `Prelude.hashWithSalt` removeRouteTableIds
+      `Prelude.hashWithSalt` removeSecurityGroupIds
+      `Prelude.hashWithSalt` removeSubnetIds
+      `Prelude.hashWithSalt` resetPolicy
+      `Prelude.hashWithSalt` vpcEndpointId
+
+instance Prelude.NFData ModifyVpcEndpoint where
+  rnf ModifyVpcEndpoint' {..} =
+    Prelude.rnf addRouteTableIds
+      `Prelude.seq` Prelude.rnf addSecurityGroupIds
+      `Prelude.seq` Prelude.rnf addSubnetIds
+      `Prelude.seq` Prelude.rnf dnsOptions
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf privateDnsEnabled
+      `Prelude.seq` Prelude.rnf removeRouteTableIds
+      `Prelude.seq` Prelude.rnf removeSecurityGroupIds
+      `Prelude.seq` Prelude.rnf removeSubnetIds
+      `Prelude.seq` Prelude.rnf resetPolicy
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+
+instance Data.ToHeaders ModifyVpcEndpoint where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpcEndpoint where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpcEndpoint where
+  toQuery ModifyVpcEndpoint' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpcEndpoint" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AddRouteTableId"
+              Prelude.<$> addRouteTableIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AddSecurityGroupId"
+              Prelude.<$> addSecurityGroupIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AddSubnetId"
+              Prelude.<$> addSubnetIds
+          ),
+        "DnsOptions" Data.=: dnsOptions,
+        "DryRun" Data.=: dryRun,
+        "IpAddressType" Data.=: ipAddressType,
+        "PolicyDocument" Data.=: policyDocument,
+        "PrivateDnsEnabled" Data.=: privateDnsEnabled,
+        Data.toQuery
+          ( Data.toQueryList "RemoveRouteTableId"
+              Prelude.<$> removeRouteTableIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "RemoveSecurityGroupId"
+              Prelude.<$> removeSecurityGroupIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "RemoveSubnetId"
+              Prelude.<$> removeSubnetIds
+          ),
+        "ResetPolicy" Data.=: resetPolicy,
+        "VpcEndpointId" Data.=: vpcEndpointId
+      ]
+
+-- | /See:/ 'newModifyVpcEndpointResponse' smart constructor.
+data ModifyVpcEndpointResponse = ModifyVpcEndpointResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyVpcEndpointResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyVpcEndpointResponse_httpStatus' - The response's http status code.
+newModifyVpcEndpointResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcEndpointResponse
+newModifyVpcEndpointResponse pHttpStatus_ =
+  ModifyVpcEndpointResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyVpcEndpointResponse_return :: Lens.Lens' ModifyVpcEndpointResponse (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointResponse_return = Lens.lens (\ModifyVpcEndpointResponse' {return'} -> return') (\s@ModifyVpcEndpointResponse' {} a -> s {return' = a} :: ModifyVpcEndpointResponse)
+
+-- | The response's http status code.
+modifyVpcEndpointResponse_httpStatus :: Lens.Lens' ModifyVpcEndpointResponse Prelude.Int
+modifyVpcEndpointResponse_httpStatus = Lens.lens (\ModifyVpcEndpointResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcEndpointResponse' {} a -> s {httpStatus = a} :: ModifyVpcEndpointResponse)
+
+instance Prelude.NFData ModifyVpcEndpointResponse where
+  rnf ModifyVpcEndpointResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpcEndpointConnectionNotification.hs b/gen/Amazonka/EC2/ModifyVpcEndpointConnectionNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcEndpointConnectionNotification.hs
@@ -0,0 +1,250 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcEndpointConnectionNotification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies a connection notification for VPC endpoint or VPC endpoint
+-- service. You can change the SNS topic for the notification, or the
+-- events for which to be notified.
+module Amazonka.EC2.ModifyVpcEndpointConnectionNotification
+  ( -- * Creating a Request
+    ModifyVpcEndpointConnectionNotification (..),
+    newModifyVpcEndpointConnectionNotification,
+
+    -- * Request Lenses
+    modifyVpcEndpointConnectionNotification_connectionEvents,
+    modifyVpcEndpointConnectionNotification_connectionNotificationArn,
+    modifyVpcEndpointConnectionNotification_dryRun,
+    modifyVpcEndpointConnectionNotification_connectionNotificationId,
+
+    -- * Destructuring the Response
+    ModifyVpcEndpointConnectionNotificationResponse (..),
+    newModifyVpcEndpointConnectionNotificationResponse,
+
+    -- * Response Lenses
+    modifyVpcEndpointConnectionNotificationResponse_returnValue,
+    modifyVpcEndpointConnectionNotificationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcEndpointConnectionNotification' smart constructor.
+data ModifyVpcEndpointConnectionNotification = ModifyVpcEndpointConnectionNotification'
+  { -- | One or more events for the endpoint. Valid values are @Accept@,
+    -- @Connect@, @Delete@, and @Reject@.
+    connectionEvents :: Prelude.Maybe [Prelude.Text],
+    -- | The ARN for the SNS topic for the notification.
+    connectionNotificationArn :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the notification.
+    connectionNotificationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointConnectionNotification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionEvents', 'modifyVpcEndpointConnectionNotification_connectionEvents' - One or more events for the endpoint. Valid values are @Accept@,
+-- @Connect@, @Delete@, and @Reject@.
+--
+-- 'connectionNotificationArn', 'modifyVpcEndpointConnectionNotification_connectionNotificationArn' - The ARN for the SNS topic for the notification.
+--
+-- 'dryRun', 'modifyVpcEndpointConnectionNotification_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'connectionNotificationId', 'modifyVpcEndpointConnectionNotification_connectionNotificationId' - The ID of the notification.
+newModifyVpcEndpointConnectionNotification ::
+  -- | 'connectionNotificationId'
+  Prelude.Text ->
+  ModifyVpcEndpointConnectionNotification
+newModifyVpcEndpointConnectionNotification
+  pConnectionNotificationId_ =
+    ModifyVpcEndpointConnectionNotification'
+      { connectionEvents =
+          Prelude.Nothing,
+        connectionNotificationArn =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        connectionNotificationId =
+          pConnectionNotificationId_
+      }
+
+-- | One or more events for the endpoint. Valid values are @Accept@,
+-- @Connect@, @Delete@, and @Reject@.
+modifyVpcEndpointConnectionNotification_connectionEvents :: Lens.Lens' ModifyVpcEndpointConnectionNotification (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointConnectionNotification_connectionEvents = Lens.lens (\ModifyVpcEndpointConnectionNotification' {connectionEvents} -> connectionEvents) (\s@ModifyVpcEndpointConnectionNotification' {} a -> s {connectionEvents = a} :: ModifyVpcEndpointConnectionNotification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN for the SNS topic for the notification.
+modifyVpcEndpointConnectionNotification_connectionNotificationArn :: Lens.Lens' ModifyVpcEndpointConnectionNotification (Prelude.Maybe Prelude.Text)
+modifyVpcEndpointConnectionNotification_connectionNotificationArn = Lens.lens (\ModifyVpcEndpointConnectionNotification' {connectionNotificationArn} -> connectionNotificationArn) (\s@ModifyVpcEndpointConnectionNotification' {} a -> s {connectionNotificationArn = a} :: ModifyVpcEndpointConnectionNotification)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcEndpointConnectionNotification_dryRun :: Lens.Lens' ModifyVpcEndpointConnectionNotification (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointConnectionNotification_dryRun = Lens.lens (\ModifyVpcEndpointConnectionNotification' {dryRun} -> dryRun) (\s@ModifyVpcEndpointConnectionNotification' {} a -> s {dryRun = a} :: ModifyVpcEndpointConnectionNotification)
+
+-- | The ID of the notification.
+modifyVpcEndpointConnectionNotification_connectionNotificationId :: Lens.Lens' ModifyVpcEndpointConnectionNotification Prelude.Text
+modifyVpcEndpointConnectionNotification_connectionNotificationId = Lens.lens (\ModifyVpcEndpointConnectionNotification' {connectionNotificationId} -> connectionNotificationId) (\s@ModifyVpcEndpointConnectionNotification' {} a -> s {connectionNotificationId = a} :: ModifyVpcEndpointConnectionNotification)
+
+instance
+  Core.AWSRequest
+    ModifyVpcEndpointConnectionNotification
+  where
+  type
+    AWSResponse
+      ModifyVpcEndpointConnectionNotification =
+      ModifyVpcEndpointConnectionNotificationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcEndpointConnectionNotificationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVpcEndpointConnectionNotification
+  where
+  hashWithSalt
+    _salt
+    ModifyVpcEndpointConnectionNotification' {..} =
+      _salt
+        `Prelude.hashWithSalt` connectionEvents
+        `Prelude.hashWithSalt` connectionNotificationArn
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` connectionNotificationId
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointConnectionNotification
+  where
+  rnf ModifyVpcEndpointConnectionNotification' {..} =
+    Prelude.rnf connectionEvents
+      `Prelude.seq` Prelude.rnf connectionNotificationArn
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf connectionNotificationId
+
+instance
+  Data.ToHeaders
+    ModifyVpcEndpointConnectionNotification
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVpcEndpointConnectionNotification
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVpcEndpointConnectionNotification
+  where
+  toQuery ModifyVpcEndpointConnectionNotification' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVpcEndpointConnectionNotification" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "ConnectionEvents"
+              Prelude.<$> connectionEvents
+          ),
+        "ConnectionNotificationArn"
+          Data.=: connectionNotificationArn,
+        "DryRun" Data.=: dryRun,
+        "ConnectionNotificationId"
+          Data.=: connectionNotificationId
+      ]
+
+-- | /See:/ 'newModifyVpcEndpointConnectionNotificationResponse' smart constructor.
+data ModifyVpcEndpointConnectionNotificationResponse = ModifyVpcEndpointConnectionNotificationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointConnectionNotificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnValue', 'modifyVpcEndpointConnectionNotificationResponse_returnValue' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyVpcEndpointConnectionNotificationResponse_httpStatus' - The response's http status code.
+newModifyVpcEndpointConnectionNotificationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcEndpointConnectionNotificationResponse
+newModifyVpcEndpointConnectionNotificationResponse
+  pHttpStatus_ =
+    ModifyVpcEndpointConnectionNotificationResponse'
+      { returnValue =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyVpcEndpointConnectionNotificationResponse_returnValue :: Lens.Lens' ModifyVpcEndpointConnectionNotificationResponse (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointConnectionNotificationResponse_returnValue = Lens.lens (\ModifyVpcEndpointConnectionNotificationResponse' {returnValue} -> returnValue) (\s@ModifyVpcEndpointConnectionNotificationResponse' {} a -> s {returnValue = a} :: ModifyVpcEndpointConnectionNotificationResponse)
+
+-- | The response's http status code.
+modifyVpcEndpointConnectionNotificationResponse_httpStatus :: Lens.Lens' ModifyVpcEndpointConnectionNotificationResponse Prelude.Int
+modifyVpcEndpointConnectionNotificationResponse_httpStatus = Lens.lens (\ModifyVpcEndpointConnectionNotificationResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcEndpointConnectionNotificationResponse' {} a -> s {httpStatus = a} :: ModifyVpcEndpointConnectionNotificationResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointConnectionNotificationResponse
+  where
+  rnf
+    ModifyVpcEndpointConnectionNotificationResponse' {..} =
+      Prelude.rnf returnValue
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpcEndpointServiceConfiguration.hs b/gen/Amazonka/EC2/ModifyVpcEndpointServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcEndpointServiceConfiguration.hs
@@ -0,0 +1,380 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcEndpointServiceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the attributes of your VPC endpoint service configuration. You
+-- can change the Network Load Balancers or Gateway Load Balancers for your
+-- service, and you can specify whether acceptance is required for requests
+-- to connect to your endpoint service through an interface VPC endpoint.
+--
+-- If you set or modify the private DNS name, you must prove that you own
+-- the private DNS domain name.
+module Amazonka.EC2.ModifyVpcEndpointServiceConfiguration
+  ( -- * Creating a Request
+    ModifyVpcEndpointServiceConfiguration (..),
+    newModifyVpcEndpointServiceConfiguration,
+
+    -- * Request Lenses
+    modifyVpcEndpointServiceConfiguration_acceptanceRequired,
+    modifyVpcEndpointServiceConfiguration_addGatewayLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_addNetworkLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_addSupportedIpAddressTypes,
+    modifyVpcEndpointServiceConfiguration_dryRun,
+    modifyVpcEndpointServiceConfiguration_privateDnsName,
+    modifyVpcEndpointServiceConfiguration_removeGatewayLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_removeNetworkLoadBalancerArns,
+    modifyVpcEndpointServiceConfiguration_removePrivateDnsName,
+    modifyVpcEndpointServiceConfiguration_removeSupportedIpAddressTypes,
+    modifyVpcEndpointServiceConfiguration_serviceId,
+
+    -- * Destructuring the Response
+    ModifyVpcEndpointServiceConfigurationResponse (..),
+    newModifyVpcEndpointServiceConfigurationResponse,
+
+    -- * Response Lenses
+    modifyVpcEndpointServiceConfigurationResponse_return,
+    modifyVpcEndpointServiceConfigurationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcEndpointServiceConfiguration' smart constructor.
+data ModifyVpcEndpointServiceConfiguration = ModifyVpcEndpointServiceConfiguration'
+  { -- | Indicates whether requests to create an endpoint to your service must be
+    -- accepted.
+    acceptanceRequired :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to
+    -- your service configuration.
+    addGatewayLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Names (ARNs) of Network Load Balancers to add to
+    -- your service configuration.
+    addNetworkLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The IP address types to add to your service configuration.
+    addSupportedIpAddressTypes :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | (Interface endpoint configuration) The private DNS name to assign to the
+    -- endpoint service.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove
+    -- from your service configuration.
+    removeGatewayLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Names (ARNs) of Network Load Balancers to remove
+    -- from your service configuration.
+    removeNetworkLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | (Interface endpoint configuration) Removes the private DNS name of the
+    -- endpoint service.
+    removePrivateDnsName :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address types to remove from your service configuration.
+    removeSupportedIpAddressTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the service.
+    serviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceptanceRequired', 'modifyVpcEndpointServiceConfiguration_acceptanceRequired' - Indicates whether requests to create an endpoint to your service must be
+-- accepted.
+--
+-- 'addGatewayLoadBalancerArns', 'modifyVpcEndpointServiceConfiguration_addGatewayLoadBalancerArns' - The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to
+-- your service configuration.
+--
+-- 'addNetworkLoadBalancerArns', 'modifyVpcEndpointServiceConfiguration_addNetworkLoadBalancerArns' - The Amazon Resource Names (ARNs) of Network Load Balancers to add to
+-- your service configuration.
+--
+-- 'addSupportedIpAddressTypes', 'modifyVpcEndpointServiceConfiguration_addSupportedIpAddressTypes' - The IP address types to add to your service configuration.
+--
+-- 'dryRun', 'modifyVpcEndpointServiceConfiguration_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'privateDnsName', 'modifyVpcEndpointServiceConfiguration_privateDnsName' - (Interface endpoint configuration) The private DNS name to assign to the
+-- endpoint service.
+--
+-- 'removeGatewayLoadBalancerArns', 'modifyVpcEndpointServiceConfiguration_removeGatewayLoadBalancerArns' - The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove
+-- from your service configuration.
+--
+-- 'removeNetworkLoadBalancerArns', 'modifyVpcEndpointServiceConfiguration_removeNetworkLoadBalancerArns' - The Amazon Resource Names (ARNs) of Network Load Balancers to remove
+-- from your service configuration.
+--
+-- 'removePrivateDnsName', 'modifyVpcEndpointServiceConfiguration_removePrivateDnsName' - (Interface endpoint configuration) Removes the private DNS name of the
+-- endpoint service.
+--
+-- 'removeSupportedIpAddressTypes', 'modifyVpcEndpointServiceConfiguration_removeSupportedIpAddressTypes' - The IP address types to remove from your service configuration.
+--
+-- 'serviceId', 'modifyVpcEndpointServiceConfiguration_serviceId' - The ID of the service.
+newModifyVpcEndpointServiceConfiguration ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  ModifyVpcEndpointServiceConfiguration
+newModifyVpcEndpointServiceConfiguration pServiceId_ =
+  ModifyVpcEndpointServiceConfiguration'
+    { acceptanceRequired =
+        Prelude.Nothing,
+      addGatewayLoadBalancerArns =
+        Prelude.Nothing,
+      addNetworkLoadBalancerArns =
+        Prelude.Nothing,
+      addSupportedIpAddressTypes =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      removeGatewayLoadBalancerArns =
+        Prelude.Nothing,
+      removeNetworkLoadBalancerArns =
+        Prelude.Nothing,
+      removePrivateDnsName =
+        Prelude.Nothing,
+      removeSupportedIpAddressTypes =
+        Prelude.Nothing,
+      serviceId = pServiceId_
+    }
+
+-- | Indicates whether requests to create an endpoint to your service must be
+-- accepted.
+modifyVpcEndpointServiceConfiguration_acceptanceRequired :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServiceConfiguration_acceptanceRequired = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {acceptanceRequired} -> acceptanceRequired) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {acceptanceRequired = a} :: ModifyVpcEndpointServiceConfiguration)
+
+-- | The Amazon Resource Names (ARNs) of Gateway Load Balancers to add to
+-- your service configuration.
+modifyVpcEndpointServiceConfiguration_addGatewayLoadBalancerArns :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServiceConfiguration_addGatewayLoadBalancerArns = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {addGatewayLoadBalancerArns} -> addGatewayLoadBalancerArns) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {addGatewayLoadBalancerArns = a} :: ModifyVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of Network Load Balancers to add to
+-- your service configuration.
+modifyVpcEndpointServiceConfiguration_addNetworkLoadBalancerArns :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServiceConfiguration_addNetworkLoadBalancerArns = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {addNetworkLoadBalancerArns} -> addNetworkLoadBalancerArns) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {addNetworkLoadBalancerArns = a} :: ModifyVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP address types to add to your service configuration.
+modifyVpcEndpointServiceConfiguration_addSupportedIpAddressTypes :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServiceConfiguration_addSupportedIpAddressTypes = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {addSupportedIpAddressTypes} -> addSupportedIpAddressTypes) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {addSupportedIpAddressTypes = a} :: ModifyVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcEndpointServiceConfiguration_dryRun :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServiceConfiguration_dryRun = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {dryRun} -> dryRun) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {dryRun = a} :: ModifyVpcEndpointServiceConfiguration)
+
+-- | (Interface endpoint configuration) The private DNS name to assign to the
+-- endpoint service.
+modifyVpcEndpointServiceConfiguration_privateDnsName :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Text)
+modifyVpcEndpointServiceConfiguration_privateDnsName = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {privateDnsName} -> privateDnsName) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {privateDnsName = a} :: ModifyVpcEndpointServiceConfiguration)
+
+-- | The Amazon Resource Names (ARNs) of Gateway Load Balancers to remove
+-- from your service configuration.
+modifyVpcEndpointServiceConfiguration_removeGatewayLoadBalancerArns :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServiceConfiguration_removeGatewayLoadBalancerArns = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {removeGatewayLoadBalancerArns} -> removeGatewayLoadBalancerArns) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {removeGatewayLoadBalancerArns = a} :: ModifyVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of Network Load Balancers to remove
+-- from your service configuration.
+modifyVpcEndpointServiceConfiguration_removeNetworkLoadBalancerArns :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServiceConfiguration_removeNetworkLoadBalancerArns = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {removeNetworkLoadBalancerArns} -> removeNetworkLoadBalancerArns) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {removeNetworkLoadBalancerArns = a} :: ModifyVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | (Interface endpoint configuration) Removes the private DNS name of the
+-- endpoint service.
+modifyVpcEndpointServiceConfiguration_removePrivateDnsName :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServiceConfiguration_removePrivateDnsName = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {removePrivateDnsName} -> removePrivateDnsName) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {removePrivateDnsName = a} :: ModifyVpcEndpointServiceConfiguration)
+
+-- | The IP address types to remove from your service configuration.
+modifyVpcEndpointServiceConfiguration_removeSupportedIpAddressTypes :: Lens.Lens' ModifyVpcEndpointServiceConfiguration (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServiceConfiguration_removeSupportedIpAddressTypes = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {removeSupportedIpAddressTypes} -> removeSupportedIpAddressTypes) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {removeSupportedIpAddressTypes = a} :: ModifyVpcEndpointServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the service.
+modifyVpcEndpointServiceConfiguration_serviceId :: Lens.Lens' ModifyVpcEndpointServiceConfiguration Prelude.Text
+modifyVpcEndpointServiceConfiguration_serviceId = Lens.lens (\ModifyVpcEndpointServiceConfiguration' {serviceId} -> serviceId) (\s@ModifyVpcEndpointServiceConfiguration' {} a -> s {serviceId = a} :: ModifyVpcEndpointServiceConfiguration)
+
+instance
+  Core.AWSRequest
+    ModifyVpcEndpointServiceConfiguration
+  where
+  type
+    AWSResponse
+      ModifyVpcEndpointServiceConfiguration =
+      ModifyVpcEndpointServiceConfigurationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcEndpointServiceConfigurationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVpcEndpointServiceConfiguration
+  where
+  hashWithSalt
+    _salt
+    ModifyVpcEndpointServiceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` acceptanceRequired
+        `Prelude.hashWithSalt` addGatewayLoadBalancerArns
+        `Prelude.hashWithSalt` addNetworkLoadBalancerArns
+        `Prelude.hashWithSalt` addSupportedIpAddressTypes
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` privateDnsName
+        `Prelude.hashWithSalt` removeGatewayLoadBalancerArns
+        `Prelude.hashWithSalt` removeNetworkLoadBalancerArns
+        `Prelude.hashWithSalt` removePrivateDnsName
+        `Prelude.hashWithSalt` removeSupportedIpAddressTypes
+        `Prelude.hashWithSalt` serviceId
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointServiceConfiguration
+  where
+  rnf ModifyVpcEndpointServiceConfiguration' {..} =
+    Prelude.rnf acceptanceRequired
+      `Prelude.seq` Prelude.rnf addGatewayLoadBalancerArns
+      `Prelude.seq` Prelude.rnf addNetworkLoadBalancerArns
+      `Prelude.seq` Prelude.rnf addSupportedIpAddressTypes
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf removeGatewayLoadBalancerArns
+      `Prelude.seq` Prelude.rnf removeNetworkLoadBalancerArns
+      `Prelude.seq` Prelude.rnf removePrivateDnsName
+      `Prelude.seq` Prelude.rnf removeSupportedIpAddressTypes
+      `Prelude.seq` Prelude.rnf serviceId
+
+instance
+  Data.ToHeaders
+    ModifyVpcEndpointServiceConfiguration
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVpcEndpointServiceConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVpcEndpointServiceConfiguration
+  where
+  toQuery ModifyVpcEndpointServiceConfiguration' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVpcEndpointServiceConfiguration" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AcceptanceRequired" Data.=: acceptanceRequired,
+        Data.toQuery
+          ( Data.toQueryList "AddGatewayLoadBalancerArn"
+              Prelude.<$> addGatewayLoadBalancerArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AddNetworkLoadBalancerArn"
+              Prelude.<$> addNetworkLoadBalancerArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AddSupportedIpAddressType"
+              Prelude.<$> addSupportedIpAddressTypes
+          ),
+        "DryRun" Data.=: dryRun,
+        "PrivateDnsName" Data.=: privateDnsName,
+        Data.toQuery
+          ( Data.toQueryList "RemoveGatewayLoadBalancerArn"
+              Prelude.<$> removeGatewayLoadBalancerArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "RemoveNetworkLoadBalancerArn"
+              Prelude.<$> removeNetworkLoadBalancerArns
+          ),
+        "RemovePrivateDnsName" Data.=: removePrivateDnsName,
+        Data.toQuery
+          ( Data.toQueryList "RemoveSupportedIpAddressType"
+              Prelude.<$> removeSupportedIpAddressTypes
+          ),
+        "ServiceId" Data.=: serviceId
+      ]
+
+-- | /See:/ 'newModifyVpcEndpointServiceConfigurationResponse' smart constructor.
+data ModifyVpcEndpointServiceConfigurationResponse = ModifyVpcEndpointServiceConfigurationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointServiceConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'modifyVpcEndpointServiceConfigurationResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyVpcEndpointServiceConfigurationResponse_httpStatus' - The response's http status code.
+newModifyVpcEndpointServiceConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcEndpointServiceConfigurationResponse
+newModifyVpcEndpointServiceConfigurationResponse
+  pHttpStatus_ =
+    ModifyVpcEndpointServiceConfigurationResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyVpcEndpointServiceConfigurationResponse_return :: Lens.Lens' ModifyVpcEndpointServiceConfigurationResponse (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServiceConfigurationResponse_return = Lens.lens (\ModifyVpcEndpointServiceConfigurationResponse' {return'} -> return') (\s@ModifyVpcEndpointServiceConfigurationResponse' {} a -> s {return' = a} :: ModifyVpcEndpointServiceConfigurationResponse)
+
+-- | The response's http status code.
+modifyVpcEndpointServiceConfigurationResponse_httpStatus :: Lens.Lens' ModifyVpcEndpointServiceConfigurationResponse Prelude.Int
+modifyVpcEndpointServiceConfigurationResponse_httpStatus = Lens.lens (\ModifyVpcEndpointServiceConfigurationResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcEndpointServiceConfigurationResponse' {} a -> s {httpStatus = a} :: ModifyVpcEndpointServiceConfigurationResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointServiceConfigurationResponse
+  where
+  rnf
+    ModifyVpcEndpointServiceConfigurationResponse' {..} =
+      Prelude.rnf return'
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpcEndpointServicePayerResponsibility.hs b/gen/Amazonka/EC2/ModifyVpcEndpointServicePayerResponsibility.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcEndpointServicePayerResponsibility.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcEndpointServicePayerResponsibility
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the payer responsibility for your VPC endpoint service.
+module Amazonka.EC2.ModifyVpcEndpointServicePayerResponsibility
+  ( -- * Creating a Request
+    ModifyVpcEndpointServicePayerResponsibility (..),
+    newModifyVpcEndpointServicePayerResponsibility,
+
+    -- * Request Lenses
+    modifyVpcEndpointServicePayerResponsibility_dryRun,
+    modifyVpcEndpointServicePayerResponsibility_serviceId,
+    modifyVpcEndpointServicePayerResponsibility_payerResponsibility,
+
+    -- * Destructuring the Response
+    ModifyVpcEndpointServicePayerResponsibilityResponse (..),
+    newModifyVpcEndpointServicePayerResponsibilityResponse,
+
+    -- * Response Lenses
+    modifyVpcEndpointServicePayerResponsibilityResponse_returnValue,
+    modifyVpcEndpointServicePayerResponsibilityResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcEndpointServicePayerResponsibility' smart constructor.
+data ModifyVpcEndpointServicePayerResponsibility = ModifyVpcEndpointServicePayerResponsibility'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the service.
+    serviceId :: Prelude.Text,
+    -- | The entity that is responsible for the endpoint costs. The default is
+    -- the endpoint owner. If you set the payer responsibility to the service
+    -- owner, you cannot set it back to the endpoint owner.
+    payerResponsibility :: PayerResponsibility
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointServicePayerResponsibility' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyVpcEndpointServicePayerResponsibility_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'serviceId', 'modifyVpcEndpointServicePayerResponsibility_serviceId' - The ID of the service.
+--
+-- 'payerResponsibility', 'modifyVpcEndpointServicePayerResponsibility_payerResponsibility' - The entity that is responsible for the endpoint costs. The default is
+-- the endpoint owner. If you set the payer responsibility to the service
+-- owner, you cannot set it back to the endpoint owner.
+newModifyVpcEndpointServicePayerResponsibility ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  -- | 'payerResponsibility'
+  PayerResponsibility ->
+  ModifyVpcEndpointServicePayerResponsibility
+newModifyVpcEndpointServicePayerResponsibility
+  pServiceId_
+  pPayerResponsibility_ =
+    ModifyVpcEndpointServicePayerResponsibility'
+      { dryRun =
+          Prelude.Nothing,
+        serviceId = pServiceId_,
+        payerResponsibility =
+          pPayerResponsibility_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcEndpointServicePayerResponsibility_dryRun :: Lens.Lens' ModifyVpcEndpointServicePayerResponsibility (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServicePayerResponsibility_dryRun = Lens.lens (\ModifyVpcEndpointServicePayerResponsibility' {dryRun} -> dryRun) (\s@ModifyVpcEndpointServicePayerResponsibility' {} a -> s {dryRun = a} :: ModifyVpcEndpointServicePayerResponsibility)
+
+-- | The ID of the service.
+modifyVpcEndpointServicePayerResponsibility_serviceId :: Lens.Lens' ModifyVpcEndpointServicePayerResponsibility Prelude.Text
+modifyVpcEndpointServicePayerResponsibility_serviceId = Lens.lens (\ModifyVpcEndpointServicePayerResponsibility' {serviceId} -> serviceId) (\s@ModifyVpcEndpointServicePayerResponsibility' {} a -> s {serviceId = a} :: ModifyVpcEndpointServicePayerResponsibility)
+
+-- | The entity that is responsible for the endpoint costs. The default is
+-- the endpoint owner. If you set the payer responsibility to the service
+-- owner, you cannot set it back to the endpoint owner.
+modifyVpcEndpointServicePayerResponsibility_payerResponsibility :: Lens.Lens' ModifyVpcEndpointServicePayerResponsibility PayerResponsibility
+modifyVpcEndpointServicePayerResponsibility_payerResponsibility = Lens.lens (\ModifyVpcEndpointServicePayerResponsibility' {payerResponsibility} -> payerResponsibility) (\s@ModifyVpcEndpointServicePayerResponsibility' {} a -> s {payerResponsibility = a} :: ModifyVpcEndpointServicePayerResponsibility)
+
+instance
+  Core.AWSRequest
+    ModifyVpcEndpointServicePayerResponsibility
+  where
+  type
+    AWSResponse
+      ModifyVpcEndpointServicePayerResponsibility =
+      ModifyVpcEndpointServicePayerResponsibilityResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcEndpointServicePayerResponsibilityResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVpcEndpointServicePayerResponsibility
+  where
+  hashWithSalt
+    _salt
+    ModifyVpcEndpointServicePayerResponsibility' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` serviceId
+        `Prelude.hashWithSalt` payerResponsibility
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointServicePayerResponsibility
+  where
+  rnf ModifyVpcEndpointServicePayerResponsibility' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf payerResponsibility
+
+instance
+  Data.ToHeaders
+    ModifyVpcEndpointServicePayerResponsibility
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVpcEndpointServicePayerResponsibility
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVpcEndpointServicePayerResponsibility
+  where
+  toQuery
+    ModifyVpcEndpointServicePayerResponsibility' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "ModifyVpcEndpointServicePayerResponsibility" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "ServiceId" Data.=: serviceId,
+          "PayerResponsibility" Data.=: payerResponsibility
+        ]
+
+-- | /See:/ 'newModifyVpcEndpointServicePayerResponsibilityResponse' smart constructor.
+data ModifyVpcEndpointServicePayerResponsibilityResponse = ModifyVpcEndpointServicePayerResponsibilityResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointServicePayerResponsibilityResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnValue', 'modifyVpcEndpointServicePayerResponsibilityResponse_returnValue' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyVpcEndpointServicePayerResponsibilityResponse_httpStatus' - The response's http status code.
+newModifyVpcEndpointServicePayerResponsibilityResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcEndpointServicePayerResponsibilityResponse
+newModifyVpcEndpointServicePayerResponsibilityResponse
+  pHttpStatus_ =
+    ModifyVpcEndpointServicePayerResponsibilityResponse'
+      { returnValue =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyVpcEndpointServicePayerResponsibilityResponse_returnValue :: Lens.Lens' ModifyVpcEndpointServicePayerResponsibilityResponse (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServicePayerResponsibilityResponse_returnValue = Lens.lens (\ModifyVpcEndpointServicePayerResponsibilityResponse' {returnValue} -> returnValue) (\s@ModifyVpcEndpointServicePayerResponsibilityResponse' {} a -> s {returnValue = a} :: ModifyVpcEndpointServicePayerResponsibilityResponse)
+
+-- | The response's http status code.
+modifyVpcEndpointServicePayerResponsibilityResponse_httpStatus :: Lens.Lens' ModifyVpcEndpointServicePayerResponsibilityResponse Prelude.Int
+modifyVpcEndpointServicePayerResponsibilityResponse_httpStatus = Lens.lens (\ModifyVpcEndpointServicePayerResponsibilityResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcEndpointServicePayerResponsibilityResponse' {} a -> s {httpStatus = a} :: ModifyVpcEndpointServicePayerResponsibilityResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointServicePayerResponsibilityResponse
+  where
+  rnf
+    ModifyVpcEndpointServicePayerResponsibilityResponse' {..} =
+      Prelude.rnf returnValue
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpcEndpointServicePermissions.hs b/gen/Amazonka/EC2/ModifyVpcEndpointServicePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcEndpointServicePermissions.hs
@@ -0,0 +1,274 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcEndpointServicePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the permissions for your VPC endpoint service. You can add or
+-- remove permissions for service consumers (IAM users, IAM roles, and
+-- Amazon Web Services accounts) to connect to your endpoint service.
+--
+-- If you grant permissions to all principals, the service is public. Any
+-- users who know the name of a public service can send a request to attach
+-- an endpoint. If the service does not require manual approval,
+-- attachments are automatically approved.
+module Amazonka.EC2.ModifyVpcEndpointServicePermissions
+  ( -- * Creating a Request
+    ModifyVpcEndpointServicePermissions (..),
+    newModifyVpcEndpointServicePermissions,
+
+    -- * Request Lenses
+    modifyVpcEndpointServicePermissions_addAllowedPrincipals,
+    modifyVpcEndpointServicePermissions_dryRun,
+    modifyVpcEndpointServicePermissions_removeAllowedPrincipals,
+    modifyVpcEndpointServicePermissions_serviceId,
+
+    -- * Destructuring the Response
+    ModifyVpcEndpointServicePermissionsResponse (..),
+    newModifyVpcEndpointServicePermissionsResponse,
+
+    -- * Response Lenses
+    modifyVpcEndpointServicePermissionsResponse_addedPrincipals,
+    modifyVpcEndpointServicePermissionsResponse_returnValue,
+    modifyVpcEndpointServicePermissionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcEndpointServicePermissions' smart constructor.
+data ModifyVpcEndpointServicePermissions = ModifyVpcEndpointServicePermissions'
+  { -- | The Amazon Resource Names (ARN) of one or more principals. Permissions
+    -- are granted to the principals in this list. To grant permissions to all
+    -- principals, specify an asterisk (*).
+    addAllowedPrincipals :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Names (ARN) of one or more principals. Permissions
+    -- are revoked for principals in this list.
+    removeAllowedPrincipals :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the service.
+    serviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointServicePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addAllowedPrincipals', 'modifyVpcEndpointServicePermissions_addAllowedPrincipals' - The Amazon Resource Names (ARN) of one or more principals. Permissions
+-- are granted to the principals in this list. To grant permissions to all
+-- principals, specify an asterisk (*).
+--
+-- 'dryRun', 'modifyVpcEndpointServicePermissions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'removeAllowedPrincipals', 'modifyVpcEndpointServicePermissions_removeAllowedPrincipals' - The Amazon Resource Names (ARN) of one or more principals. Permissions
+-- are revoked for principals in this list.
+--
+-- 'serviceId', 'modifyVpcEndpointServicePermissions_serviceId' - The ID of the service.
+newModifyVpcEndpointServicePermissions ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  ModifyVpcEndpointServicePermissions
+newModifyVpcEndpointServicePermissions pServiceId_ =
+  ModifyVpcEndpointServicePermissions'
+    { addAllowedPrincipals =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      removeAllowedPrincipals =
+        Prelude.Nothing,
+      serviceId = pServiceId_
+    }
+
+-- | The Amazon Resource Names (ARN) of one or more principals. Permissions
+-- are granted to the principals in this list. To grant permissions to all
+-- principals, specify an asterisk (*).
+modifyVpcEndpointServicePermissions_addAllowedPrincipals :: Lens.Lens' ModifyVpcEndpointServicePermissions (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServicePermissions_addAllowedPrincipals = Lens.lens (\ModifyVpcEndpointServicePermissions' {addAllowedPrincipals} -> addAllowedPrincipals) (\s@ModifyVpcEndpointServicePermissions' {} a -> s {addAllowedPrincipals = a} :: ModifyVpcEndpointServicePermissions) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcEndpointServicePermissions_dryRun :: Lens.Lens' ModifyVpcEndpointServicePermissions (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServicePermissions_dryRun = Lens.lens (\ModifyVpcEndpointServicePermissions' {dryRun} -> dryRun) (\s@ModifyVpcEndpointServicePermissions' {} a -> s {dryRun = a} :: ModifyVpcEndpointServicePermissions)
+
+-- | The Amazon Resource Names (ARN) of one or more principals. Permissions
+-- are revoked for principals in this list.
+modifyVpcEndpointServicePermissions_removeAllowedPrincipals :: Lens.Lens' ModifyVpcEndpointServicePermissions (Prelude.Maybe [Prelude.Text])
+modifyVpcEndpointServicePermissions_removeAllowedPrincipals = Lens.lens (\ModifyVpcEndpointServicePermissions' {removeAllowedPrincipals} -> removeAllowedPrincipals) (\s@ModifyVpcEndpointServicePermissions' {} a -> s {removeAllowedPrincipals = a} :: ModifyVpcEndpointServicePermissions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the service.
+modifyVpcEndpointServicePermissions_serviceId :: Lens.Lens' ModifyVpcEndpointServicePermissions Prelude.Text
+modifyVpcEndpointServicePermissions_serviceId = Lens.lens (\ModifyVpcEndpointServicePermissions' {serviceId} -> serviceId) (\s@ModifyVpcEndpointServicePermissions' {} a -> s {serviceId = a} :: ModifyVpcEndpointServicePermissions)
+
+instance
+  Core.AWSRequest
+    ModifyVpcEndpointServicePermissions
+  where
+  type
+    AWSResponse ModifyVpcEndpointServicePermissions =
+      ModifyVpcEndpointServicePermissionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcEndpointServicePermissionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "addedPrincipalSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVpcEndpointServicePermissions
+  where
+  hashWithSalt
+    _salt
+    ModifyVpcEndpointServicePermissions' {..} =
+      _salt
+        `Prelude.hashWithSalt` addAllowedPrincipals
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` removeAllowedPrincipals
+        `Prelude.hashWithSalt` serviceId
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointServicePermissions
+  where
+  rnf ModifyVpcEndpointServicePermissions' {..} =
+    Prelude.rnf addAllowedPrincipals
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf removeAllowedPrincipals
+      `Prelude.seq` Prelude.rnf serviceId
+
+instance
+  Data.ToHeaders
+    ModifyVpcEndpointServicePermissions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVpcEndpointServicePermissions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVpcEndpointServicePermissions
+  where
+  toQuery ModifyVpcEndpointServicePermissions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVpcEndpointServicePermissions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AddAllowedPrincipals"
+              Prelude.<$> addAllowedPrincipals
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "RemoveAllowedPrincipals"
+              Prelude.<$> removeAllowedPrincipals
+          ),
+        "ServiceId" Data.=: serviceId
+      ]
+
+-- | /See:/ 'newModifyVpcEndpointServicePermissionsResponse' smart constructor.
+data ModifyVpcEndpointServicePermissionsResponse = ModifyVpcEndpointServicePermissionsResponse'
+  { -- | Information about the added principals.
+    addedPrincipals :: Prelude.Maybe [AddedPrincipal],
+    -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcEndpointServicePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addedPrincipals', 'modifyVpcEndpointServicePermissionsResponse_addedPrincipals' - Information about the added principals.
+--
+-- 'returnValue', 'modifyVpcEndpointServicePermissionsResponse_returnValue' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'modifyVpcEndpointServicePermissionsResponse_httpStatus' - The response's http status code.
+newModifyVpcEndpointServicePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcEndpointServicePermissionsResponse
+newModifyVpcEndpointServicePermissionsResponse
+  pHttpStatus_ =
+    ModifyVpcEndpointServicePermissionsResponse'
+      { addedPrincipals =
+          Prelude.Nothing,
+        returnValue = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the added principals.
+modifyVpcEndpointServicePermissionsResponse_addedPrincipals :: Lens.Lens' ModifyVpcEndpointServicePermissionsResponse (Prelude.Maybe [AddedPrincipal])
+modifyVpcEndpointServicePermissionsResponse_addedPrincipals = Lens.lens (\ModifyVpcEndpointServicePermissionsResponse' {addedPrincipals} -> addedPrincipals) (\s@ModifyVpcEndpointServicePermissionsResponse' {} a -> s {addedPrincipals = a} :: ModifyVpcEndpointServicePermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+modifyVpcEndpointServicePermissionsResponse_returnValue :: Lens.Lens' ModifyVpcEndpointServicePermissionsResponse (Prelude.Maybe Prelude.Bool)
+modifyVpcEndpointServicePermissionsResponse_returnValue = Lens.lens (\ModifyVpcEndpointServicePermissionsResponse' {returnValue} -> returnValue) (\s@ModifyVpcEndpointServicePermissionsResponse' {} a -> s {returnValue = a} :: ModifyVpcEndpointServicePermissionsResponse)
+
+-- | The response's http status code.
+modifyVpcEndpointServicePermissionsResponse_httpStatus :: Lens.Lens' ModifyVpcEndpointServicePermissionsResponse Prelude.Int
+modifyVpcEndpointServicePermissionsResponse_httpStatus = Lens.lens (\ModifyVpcEndpointServicePermissionsResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcEndpointServicePermissionsResponse' {} a -> s {httpStatus = a} :: ModifyVpcEndpointServicePermissionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpcEndpointServicePermissionsResponse
+  where
+  rnf ModifyVpcEndpointServicePermissionsResponse' {..} =
+    Prelude.rnf addedPrincipals
+      `Prelude.seq` Prelude.rnf returnValue
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpcPeeringConnectionOptions.hs b/gen/Amazonka/EC2/ModifyVpcPeeringConnectionOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcPeeringConnectionOptions.hs
@@ -0,0 +1,291 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcPeeringConnectionOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Modifies the VPC peering connection options on one side of a VPC peering
+-- connection. You can do the following:
+--
+-- -   Enable\/disable communication over the peering connection between an
+--     EC2-Classic instance that\'s linked to your VPC (using ClassicLink)
+--     and instances in the peer VPC.
+--
+-- -   Enable\/disable communication over the peering connection between
+--     instances in your VPC and an EC2-Classic instance that\'s linked to
+--     the peer VPC.
+--
+-- -   Enable\/disable the ability to resolve public DNS hostnames to
+--     private IP addresses when queried from instances in the peer VPC.
+--
+-- If the peered VPCs are in the same Amazon Web Services account, you can
+-- enable DNS resolution for queries from the local VPC. This ensures that
+-- queries from the local VPC resolve to private IP addresses in the peer
+-- VPC. This option is not available if the peered VPCs are in different
+-- different Amazon Web Services accounts or different Regions. For peered
+-- VPCs in different Amazon Web Services accounts, each Amazon Web Services
+-- account owner must initiate a separate request to modify the peering
+-- connection options. For inter-region peering connections, you must use
+-- the Region for the requester VPC to modify the requester VPC peering
+-- options and the Region for the accepter VPC to modify the accepter VPC
+-- peering options. To verify which VPCs are the accepter and the requester
+-- for a VPC peering connection, use the DescribeVpcPeeringConnections
+-- command.
+module Amazonka.EC2.ModifyVpcPeeringConnectionOptions
+  ( -- * Creating a Request
+    ModifyVpcPeeringConnectionOptions (..),
+    newModifyVpcPeeringConnectionOptions,
+
+    -- * Request Lenses
+    modifyVpcPeeringConnectionOptions_accepterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptions_dryRun,
+    modifyVpcPeeringConnectionOptions_requesterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptions_vpcPeeringConnectionId,
+
+    -- * Destructuring the Response
+    ModifyVpcPeeringConnectionOptionsResponse (..),
+    newModifyVpcPeeringConnectionOptionsResponse,
+
+    -- * Response Lenses
+    modifyVpcPeeringConnectionOptionsResponse_accepterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptionsResponse_requesterPeeringConnectionOptions,
+    modifyVpcPeeringConnectionOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcPeeringConnectionOptions' smart constructor.
+data ModifyVpcPeeringConnectionOptions = ModifyVpcPeeringConnectionOptions'
+  { -- | The VPC peering connection options for the accepter VPC.
+    accepterPeeringConnectionOptions :: Prelude.Maybe PeeringConnectionOptionsRequest,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The VPC peering connection options for the requester VPC.
+    requesterPeeringConnectionOptions :: Prelude.Maybe PeeringConnectionOptionsRequest,
+    -- | The ID of the VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcPeeringConnectionOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accepterPeeringConnectionOptions', 'modifyVpcPeeringConnectionOptions_accepterPeeringConnectionOptions' - The VPC peering connection options for the accepter VPC.
+--
+-- 'dryRun', 'modifyVpcPeeringConnectionOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'requesterPeeringConnectionOptions', 'modifyVpcPeeringConnectionOptions_requesterPeeringConnectionOptions' - The VPC peering connection options for the requester VPC.
+--
+-- 'vpcPeeringConnectionId', 'modifyVpcPeeringConnectionOptions_vpcPeeringConnectionId' - The ID of the VPC peering connection.
+newModifyVpcPeeringConnectionOptions ::
+  -- | 'vpcPeeringConnectionId'
+  Prelude.Text ->
+  ModifyVpcPeeringConnectionOptions
+newModifyVpcPeeringConnectionOptions
+  pVpcPeeringConnectionId_ =
+    ModifyVpcPeeringConnectionOptions'
+      { accepterPeeringConnectionOptions =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        requesterPeeringConnectionOptions =
+          Prelude.Nothing,
+        vpcPeeringConnectionId =
+          pVpcPeeringConnectionId_
+      }
+
+-- | The VPC peering connection options for the accepter VPC.
+modifyVpcPeeringConnectionOptions_accepterPeeringConnectionOptions :: Lens.Lens' ModifyVpcPeeringConnectionOptions (Prelude.Maybe PeeringConnectionOptionsRequest)
+modifyVpcPeeringConnectionOptions_accepterPeeringConnectionOptions = Lens.lens (\ModifyVpcPeeringConnectionOptions' {accepterPeeringConnectionOptions} -> accepterPeeringConnectionOptions) (\s@ModifyVpcPeeringConnectionOptions' {} a -> s {accepterPeeringConnectionOptions = a} :: ModifyVpcPeeringConnectionOptions)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcPeeringConnectionOptions_dryRun :: Lens.Lens' ModifyVpcPeeringConnectionOptions (Prelude.Maybe Prelude.Bool)
+modifyVpcPeeringConnectionOptions_dryRun = Lens.lens (\ModifyVpcPeeringConnectionOptions' {dryRun} -> dryRun) (\s@ModifyVpcPeeringConnectionOptions' {} a -> s {dryRun = a} :: ModifyVpcPeeringConnectionOptions)
+
+-- | The VPC peering connection options for the requester VPC.
+modifyVpcPeeringConnectionOptions_requesterPeeringConnectionOptions :: Lens.Lens' ModifyVpcPeeringConnectionOptions (Prelude.Maybe PeeringConnectionOptionsRequest)
+modifyVpcPeeringConnectionOptions_requesterPeeringConnectionOptions = Lens.lens (\ModifyVpcPeeringConnectionOptions' {requesterPeeringConnectionOptions} -> requesterPeeringConnectionOptions) (\s@ModifyVpcPeeringConnectionOptions' {} a -> s {requesterPeeringConnectionOptions = a} :: ModifyVpcPeeringConnectionOptions)
+
+-- | The ID of the VPC peering connection.
+modifyVpcPeeringConnectionOptions_vpcPeeringConnectionId :: Lens.Lens' ModifyVpcPeeringConnectionOptions Prelude.Text
+modifyVpcPeeringConnectionOptions_vpcPeeringConnectionId = Lens.lens (\ModifyVpcPeeringConnectionOptions' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@ModifyVpcPeeringConnectionOptions' {} a -> s {vpcPeeringConnectionId = a} :: ModifyVpcPeeringConnectionOptions)
+
+instance
+  Core.AWSRequest
+    ModifyVpcPeeringConnectionOptions
+  where
+  type
+    AWSResponse ModifyVpcPeeringConnectionOptions =
+      ModifyVpcPeeringConnectionOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcPeeringConnectionOptionsResponse'
+            Prelude.<$> (x Data..@? "accepterPeeringConnectionOptions")
+            Prelude.<*> (x Data..@? "requesterPeeringConnectionOptions")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ModifyVpcPeeringConnectionOptions
+  where
+  hashWithSalt
+    _salt
+    ModifyVpcPeeringConnectionOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` accepterPeeringConnectionOptions
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` requesterPeeringConnectionOptions
+        `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance
+  Prelude.NFData
+    ModifyVpcPeeringConnectionOptions
+  where
+  rnf ModifyVpcPeeringConnectionOptions' {..} =
+    Prelude.rnf accepterPeeringConnectionOptions
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf requesterPeeringConnectionOptions
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+
+instance
+  Data.ToHeaders
+    ModifyVpcPeeringConnectionOptions
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ModifyVpcPeeringConnectionOptions
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ModifyVpcPeeringConnectionOptions
+  where
+  toQuery ModifyVpcPeeringConnectionOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ModifyVpcPeeringConnectionOptions" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AccepterPeeringConnectionOptions"
+          Data.=: accepterPeeringConnectionOptions,
+        "DryRun" Data.=: dryRun,
+        "RequesterPeeringConnectionOptions"
+          Data.=: requesterPeeringConnectionOptions,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId
+      ]
+
+-- | /See:/ 'newModifyVpcPeeringConnectionOptionsResponse' smart constructor.
+data ModifyVpcPeeringConnectionOptionsResponse = ModifyVpcPeeringConnectionOptionsResponse'
+  { -- | Information about the VPC peering connection options for the accepter
+    -- VPC.
+    accepterPeeringConnectionOptions :: Prelude.Maybe PeeringConnectionOptions,
+    -- | Information about the VPC peering connection options for the requester
+    -- VPC.
+    requesterPeeringConnectionOptions :: Prelude.Maybe PeeringConnectionOptions,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcPeeringConnectionOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accepterPeeringConnectionOptions', 'modifyVpcPeeringConnectionOptionsResponse_accepterPeeringConnectionOptions' - Information about the VPC peering connection options for the accepter
+-- VPC.
+--
+-- 'requesterPeeringConnectionOptions', 'modifyVpcPeeringConnectionOptionsResponse_requesterPeeringConnectionOptions' - Information about the VPC peering connection options for the requester
+-- VPC.
+--
+-- 'httpStatus', 'modifyVpcPeeringConnectionOptionsResponse_httpStatus' - The response's http status code.
+newModifyVpcPeeringConnectionOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcPeeringConnectionOptionsResponse
+newModifyVpcPeeringConnectionOptionsResponse
+  pHttpStatus_ =
+    ModifyVpcPeeringConnectionOptionsResponse'
+      { accepterPeeringConnectionOptions =
+          Prelude.Nothing,
+        requesterPeeringConnectionOptions =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the VPC peering connection options for the accepter
+-- VPC.
+modifyVpcPeeringConnectionOptionsResponse_accepterPeeringConnectionOptions :: Lens.Lens' ModifyVpcPeeringConnectionOptionsResponse (Prelude.Maybe PeeringConnectionOptions)
+modifyVpcPeeringConnectionOptionsResponse_accepterPeeringConnectionOptions = Lens.lens (\ModifyVpcPeeringConnectionOptionsResponse' {accepterPeeringConnectionOptions} -> accepterPeeringConnectionOptions) (\s@ModifyVpcPeeringConnectionOptionsResponse' {} a -> s {accepterPeeringConnectionOptions = a} :: ModifyVpcPeeringConnectionOptionsResponse)
+
+-- | Information about the VPC peering connection options for the requester
+-- VPC.
+modifyVpcPeeringConnectionOptionsResponse_requesterPeeringConnectionOptions :: Lens.Lens' ModifyVpcPeeringConnectionOptionsResponse (Prelude.Maybe PeeringConnectionOptions)
+modifyVpcPeeringConnectionOptionsResponse_requesterPeeringConnectionOptions = Lens.lens (\ModifyVpcPeeringConnectionOptionsResponse' {requesterPeeringConnectionOptions} -> requesterPeeringConnectionOptions) (\s@ModifyVpcPeeringConnectionOptionsResponse' {} a -> s {requesterPeeringConnectionOptions = a} :: ModifyVpcPeeringConnectionOptionsResponse)
+
+-- | The response's http status code.
+modifyVpcPeeringConnectionOptionsResponse_httpStatus :: Lens.Lens' ModifyVpcPeeringConnectionOptionsResponse Prelude.Int
+modifyVpcPeeringConnectionOptionsResponse_httpStatus = Lens.lens (\ModifyVpcPeeringConnectionOptionsResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcPeeringConnectionOptionsResponse' {} a -> s {httpStatus = a} :: ModifyVpcPeeringConnectionOptionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpcPeeringConnectionOptionsResponse
+  where
+  rnf ModifyVpcPeeringConnectionOptionsResponse' {..} =
+    Prelude.rnf accepterPeeringConnectionOptions
+      `Prelude.seq` Prelude.rnf requesterPeeringConnectionOptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpcTenancy.hs b/gen/Amazonka/EC2/ModifyVpcTenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpcTenancy.hs
@@ -0,0 +1,208 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpcTenancy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the instance tenancy attribute of the specified VPC. You can
+-- change the instance tenancy attribute of a VPC to @default@ only. You
+-- cannot change the instance tenancy attribute to @dedicated@.
+--
+-- After you modify the tenancy of the VPC, any new instances that you
+-- launch into the VPC have a tenancy of @default@, unless you specify
+-- otherwise during launch. The tenancy of any existing instances in the
+-- VPC is not affected.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html Dedicated Instances>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ModifyVpcTenancy
+  ( -- * Creating a Request
+    ModifyVpcTenancy (..),
+    newModifyVpcTenancy,
+
+    -- * Request Lenses
+    modifyVpcTenancy_dryRun,
+    modifyVpcTenancy_vpcId,
+    modifyVpcTenancy_instanceTenancy,
+
+    -- * Destructuring the Response
+    ModifyVpcTenancyResponse (..),
+    newModifyVpcTenancyResponse,
+
+    -- * Response Lenses
+    modifyVpcTenancyResponse_returnValue,
+    modifyVpcTenancyResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpcTenancy' smart constructor.
+data ModifyVpcTenancy = ModifyVpcTenancy'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text,
+    -- | The instance tenancy attribute for the VPC.
+    instanceTenancy :: VpcTenancy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcTenancy' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyVpcTenancy_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcId', 'modifyVpcTenancy_vpcId' - The ID of the VPC.
+--
+-- 'instanceTenancy', 'modifyVpcTenancy_instanceTenancy' - The instance tenancy attribute for the VPC.
+newModifyVpcTenancy ::
+  -- | 'vpcId'
+  Prelude.Text ->
+  -- | 'instanceTenancy'
+  VpcTenancy ->
+  ModifyVpcTenancy
+newModifyVpcTenancy pVpcId_ pInstanceTenancy_ =
+  ModifyVpcTenancy'
+    { dryRun = Prelude.Nothing,
+      vpcId = pVpcId_,
+      instanceTenancy = pInstanceTenancy_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpcTenancy_dryRun :: Lens.Lens' ModifyVpcTenancy (Prelude.Maybe Prelude.Bool)
+modifyVpcTenancy_dryRun = Lens.lens (\ModifyVpcTenancy' {dryRun} -> dryRun) (\s@ModifyVpcTenancy' {} a -> s {dryRun = a} :: ModifyVpcTenancy)
+
+-- | The ID of the VPC.
+modifyVpcTenancy_vpcId :: Lens.Lens' ModifyVpcTenancy Prelude.Text
+modifyVpcTenancy_vpcId = Lens.lens (\ModifyVpcTenancy' {vpcId} -> vpcId) (\s@ModifyVpcTenancy' {} a -> s {vpcId = a} :: ModifyVpcTenancy)
+
+-- | The instance tenancy attribute for the VPC.
+modifyVpcTenancy_instanceTenancy :: Lens.Lens' ModifyVpcTenancy VpcTenancy
+modifyVpcTenancy_instanceTenancy = Lens.lens (\ModifyVpcTenancy' {instanceTenancy} -> instanceTenancy) (\s@ModifyVpcTenancy' {} a -> s {instanceTenancy = a} :: ModifyVpcTenancy)
+
+instance Core.AWSRequest ModifyVpcTenancy where
+  type
+    AWSResponse ModifyVpcTenancy =
+      ModifyVpcTenancyResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpcTenancyResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVpcTenancy where
+  hashWithSalt _salt ModifyVpcTenancy' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` instanceTenancy
+
+instance Prelude.NFData ModifyVpcTenancy where
+  rnf ModifyVpcTenancy' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf instanceTenancy
+
+instance Data.ToHeaders ModifyVpcTenancy where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpcTenancy where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpcTenancy where
+  toQuery ModifyVpcTenancy' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpcTenancy" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcId" Data.=: vpcId,
+        "InstanceTenancy" Data.=: instanceTenancy
+      ]
+
+-- | /See:/ 'newModifyVpcTenancyResponse' smart constructor.
+data ModifyVpcTenancyResponse = ModifyVpcTenancyResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpcTenancyResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnValue', 'modifyVpcTenancyResponse_returnValue' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'httpStatus', 'modifyVpcTenancyResponse_httpStatus' - The response's http status code.
+newModifyVpcTenancyResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpcTenancyResponse
+newModifyVpcTenancyResponse pHttpStatus_ =
+  ModifyVpcTenancyResponse'
+    { returnValue =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+modifyVpcTenancyResponse_returnValue :: Lens.Lens' ModifyVpcTenancyResponse (Prelude.Maybe Prelude.Bool)
+modifyVpcTenancyResponse_returnValue = Lens.lens (\ModifyVpcTenancyResponse' {returnValue} -> returnValue) (\s@ModifyVpcTenancyResponse' {} a -> s {returnValue = a} :: ModifyVpcTenancyResponse)
+
+-- | The response's http status code.
+modifyVpcTenancyResponse_httpStatus :: Lens.Lens' ModifyVpcTenancyResponse Prelude.Int
+modifyVpcTenancyResponse_httpStatus = Lens.lens (\ModifyVpcTenancyResponse' {httpStatus} -> httpStatus) (\s@ModifyVpcTenancyResponse' {} a -> s {httpStatus = a} :: ModifyVpcTenancyResponse)
+
+instance Prelude.NFData ModifyVpcTenancyResponse where
+  rnf ModifyVpcTenancyResponse' {..} =
+    Prelude.rnf returnValue
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpnConnection.hs b/gen/Amazonka/EC2/ModifyVpnConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpnConnection.hs
@@ -0,0 +1,267 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpnConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the customer gateway or the target gateway of an Amazon Web
+-- Services Site-to-Site VPN connection. To modify the target gateway, the
+-- following migration options are available:
+--
+-- -   An existing virtual private gateway to a new virtual private gateway
+--
+-- -   An existing virtual private gateway to a transit gateway
+--
+-- -   An existing transit gateway to a new transit gateway
+--
+-- -   An existing transit gateway to a virtual private gateway
+--
+-- Before you perform the migration to the new gateway, you must configure
+-- the new gateway. Use CreateVpnGateway to create a virtual private
+-- gateway, or CreateTransitGateway to create a transit gateway.
+--
+-- This step is required when you migrate from a virtual private gateway
+-- with static routes to a transit gateway.
+--
+-- You must delete the static routes before you migrate to the new gateway.
+--
+-- Keep a copy of the static route before you delete it. You will need to
+-- add back these routes to the transit gateway after the VPN connection
+-- migration is complete.
+--
+-- After you migrate to the new gateway, you might need to modify your VPC
+-- route table. Use CreateRoute and DeleteRoute to make the changes
+-- described in
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/modify-vpn-target.html#step-update-routing Update VPC route tables>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+--
+-- When the new gateway is a transit gateway, modify the transit gateway
+-- route table to allow traffic between the VPC and the Amazon Web Services
+-- Site-to-Site VPN connection. Use CreateTransitGatewayRoute to add the
+-- routes.
+--
+-- If you deleted VPN static routes, you must add the static routes to the
+-- transit gateway route table.
+--
+-- After you perform this operation, the VPN endpoint\'s IP addresses on
+-- the Amazon Web Services side and the tunnel options remain intact. Your
+-- Amazon Web Services Site-to-Site VPN connection will be temporarily
+-- unavailable for a brief period while we provision the new endpoints.
+module Amazonka.EC2.ModifyVpnConnection
+  ( -- * Creating a Request
+    ModifyVpnConnection (..),
+    newModifyVpnConnection,
+
+    -- * Request Lenses
+    modifyVpnConnection_customerGatewayId,
+    modifyVpnConnection_dryRun,
+    modifyVpnConnection_transitGatewayId,
+    modifyVpnConnection_vpnGatewayId,
+    modifyVpnConnection_vpnConnectionId,
+
+    -- * Destructuring the Response
+    ModifyVpnConnectionResponse (..),
+    newModifyVpnConnectionResponse,
+
+    -- * Response Lenses
+    modifyVpnConnectionResponse_vpnConnection,
+    modifyVpnConnectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpnConnection' smart constructor.
+data ModifyVpnConnection = ModifyVpnConnection'
+  { -- | The ID of the customer gateway at your end of the VPN connection.
+    customerGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the virtual private gateway at the Amazon Web Services side of
+    -- the VPN connection.
+    vpnGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPN connection.
+    vpnConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customerGatewayId', 'modifyVpnConnection_customerGatewayId' - The ID of the customer gateway at your end of the VPN connection.
+--
+-- 'dryRun', 'modifyVpnConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayId', 'modifyVpnConnection_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'vpnGatewayId', 'modifyVpnConnection_vpnGatewayId' - The ID of the virtual private gateway at the Amazon Web Services side of
+-- the VPN connection.
+--
+-- 'vpnConnectionId', 'modifyVpnConnection_vpnConnectionId' - The ID of the VPN connection.
+newModifyVpnConnection ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  ModifyVpnConnection
+newModifyVpnConnection pVpnConnectionId_ =
+  ModifyVpnConnection'
+    { customerGatewayId =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpnGatewayId = Prelude.Nothing,
+      vpnConnectionId = pVpnConnectionId_
+    }
+
+-- | The ID of the customer gateway at your end of the VPN connection.
+modifyVpnConnection_customerGatewayId :: Lens.Lens' ModifyVpnConnection (Prelude.Maybe Prelude.Text)
+modifyVpnConnection_customerGatewayId = Lens.lens (\ModifyVpnConnection' {customerGatewayId} -> customerGatewayId) (\s@ModifyVpnConnection' {} a -> s {customerGatewayId = a} :: ModifyVpnConnection)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpnConnection_dryRun :: Lens.Lens' ModifyVpnConnection (Prelude.Maybe Prelude.Bool)
+modifyVpnConnection_dryRun = Lens.lens (\ModifyVpnConnection' {dryRun} -> dryRun) (\s@ModifyVpnConnection' {} a -> s {dryRun = a} :: ModifyVpnConnection)
+
+-- | The ID of the transit gateway.
+modifyVpnConnection_transitGatewayId :: Lens.Lens' ModifyVpnConnection (Prelude.Maybe Prelude.Text)
+modifyVpnConnection_transitGatewayId = Lens.lens (\ModifyVpnConnection' {transitGatewayId} -> transitGatewayId) (\s@ModifyVpnConnection' {} a -> s {transitGatewayId = a} :: ModifyVpnConnection)
+
+-- | The ID of the virtual private gateway at the Amazon Web Services side of
+-- the VPN connection.
+modifyVpnConnection_vpnGatewayId :: Lens.Lens' ModifyVpnConnection (Prelude.Maybe Prelude.Text)
+modifyVpnConnection_vpnGatewayId = Lens.lens (\ModifyVpnConnection' {vpnGatewayId} -> vpnGatewayId) (\s@ModifyVpnConnection' {} a -> s {vpnGatewayId = a} :: ModifyVpnConnection)
+
+-- | The ID of the VPN connection.
+modifyVpnConnection_vpnConnectionId :: Lens.Lens' ModifyVpnConnection Prelude.Text
+modifyVpnConnection_vpnConnectionId = Lens.lens (\ModifyVpnConnection' {vpnConnectionId} -> vpnConnectionId) (\s@ModifyVpnConnection' {} a -> s {vpnConnectionId = a} :: ModifyVpnConnection)
+
+instance Core.AWSRequest ModifyVpnConnection where
+  type
+    AWSResponse ModifyVpnConnection =
+      ModifyVpnConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpnConnectionResponse'
+            Prelude.<$> (x Data..@? "vpnConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVpnConnection where
+  hashWithSalt _salt ModifyVpnConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` customerGatewayId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpnGatewayId
+      `Prelude.hashWithSalt` vpnConnectionId
+
+instance Prelude.NFData ModifyVpnConnection where
+  rnf ModifyVpnConnection' {..} =
+    Prelude.rnf customerGatewayId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpnGatewayId
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+
+instance Data.ToHeaders ModifyVpnConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpnConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpnConnection where
+  toQuery ModifyVpnConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpnConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CustomerGatewayId" Data.=: customerGatewayId,
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayId" Data.=: transitGatewayId,
+        "VpnGatewayId" Data.=: vpnGatewayId,
+        "VpnConnectionId" Data.=: vpnConnectionId
+      ]
+
+-- | /See:/ 'newModifyVpnConnectionResponse' smart constructor.
+data ModifyVpnConnectionResponse = ModifyVpnConnectionResponse'
+  { -- | Information about the VPN connection.
+    vpnConnection :: Prelude.Maybe VpnConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnection', 'modifyVpnConnectionResponse_vpnConnection' - Information about the VPN connection.
+--
+-- 'httpStatus', 'modifyVpnConnectionResponse_httpStatus' - The response's http status code.
+newModifyVpnConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpnConnectionResponse
+newModifyVpnConnectionResponse pHttpStatus_ =
+  ModifyVpnConnectionResponse'
+    { vpnConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPN connection.
+modifyVpnConnectionResponse_vpnConnection :: Lens.Lens' ModifyVpnConnectionResponse (Prelude.Maybe VpnConnection)
+modifyVpnConnectionResponse_vpnConnection = Lens.lens (\ModifyVpnConnectionResponse' {vpnConnection} -> vpnConnection) (\s@ModifyVpnConnectionResponse' {} a -> s {vpnConnection = a} :: ModifyVpnConnectionResponse)
+
+-- | The response's http status code.
+modifyVpnConnectionResponse_httpStatus :: Lens.Lens' ModifyVpnConnectionResponse Prelude.Int
+modifyVpnConnectionResponse_httpStatus = Lens.lens (\ModifyVpnConnectionResponse' {httpStatus} -> httpStatus) (\s@ModifyVpnConnectionResponse' {} a -> s {httpStatus = a} :: ModifyVpnConnectionResponse)
+
+instance Prelude.NFData ModifyVpnConnectionResponse where
+  rnf ModifyVpnConnectionResponse' {..} =
+    Prelude.rnf vpnConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpnConnectionOptions.hs b/gen/Amazonka/EC2/ModifyVpnConnectionOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpnConnectionOptions.hs
@@ -0,0 +1,275 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpnConnectionOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the connection options for your Site-to-Site VPN connection.
+--
+-- When you modify the VPN connection options, the VPN endpoint IP
+-- addresses on the Amazon Web Services side do not change, and the tunnel
+-- options do not change. Your VPN connection will be temporarily
+-- unavailable for a brief period while the VPN connection is updated.
+module Amazonka.EC2.ModifyVpnConnectionOptions
+  ( -- * Creating a Request
+    ModifyVpnConnectionOptions (..),
+    newModifyVpnConnectionOptions,
+
+    -- * Request Lenses
+    modifyVpnConnectionOptions_dryRun,
+    modifyVpnConnectionOptions_localIpv4NetworkCidr,
+    modifyVpnConnectionOptions_localIpv6NetworkCidr,
+    modifyVpnConnectionOptions_remoteIpv4NetworkCidr,
+    modifyVpnConnectionOptions_remoteIpv6NetworkCidr,
+    modifyVpnConnectionOptions_vpnConnectionId,
+
+    -- * Destructuring the Response
+    ModifyVpnConnectionOptionsResponse (..),
+    newModifyVpnConnectionOptionsResponse,
+
+    -- * Response Lenses
+    modifyVpnConnectionOptionsResponse_vpnConnection,
+    modifyVpnConnectionOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpnConnectionOptions' smart constructor.
+data ModifyVpnConnectionOptions = ModifyVpnConnectionOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+    -- connection.
+    --
+    -- Default: @0.0.0.0\/0@
+    localIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+    -- connection.
+    --
+    -- Default: @::\/0@
+    localIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+    --
+    -- Default: @0.0.0.0\/0@
+    remoteIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+    --
+    -- Default: @::\/0@
+    remoteIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Site-to-Site VPN connection.
+    vpnConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnConnectionOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyVpnConnectionOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'localIpv4NetworkCidr', 'modifyVpnConnectionOptions_localIpv4NetworkCidr' - The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @0.0.0.0\/0@
+--
+-- 'localIpv6NetworkCidr', 'modifyVpnConnectionOptions_localIpv6NetworkCidr' - The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @::\/0@
+--
+-- 'remoteIpv4NetworkCidr', 'modifyVpnConnectionOptions_remoteIpv4NetworkCidr' - The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @0.0.0.0\/0@
+--
+-- 'remoteIpv6NetworkCidr', 'modifyVpnConnectionOptions_remoteIpv6NetworkCidr' - The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @::\/0@
+--
+-- 'vpnConnectionId', 'modifyVpnConnectionOptions_vpnConnectionId' - The ID of the Site-to-Site VPN connection.
+newModifyVpnConnectionOptions ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  ModifyVpnConnectionOptions
+newModifyVpnConnectionOptions pVpnConnectionId_ =
+  ModifyVpnConnectionOptions'
+    { dryRun =
+        Prelude.Nothing,
+      localIpv4NetworkCidr = Prelude.Nothing,
+      localIpv6NetworkCidr = Prelude.Nothing,
+      remoteIpv4NetworkCidr = Prelude.Nothing,
+      remoteIpv6NetworkCidr = Prelude.Nothing,
+      vpnConnectionId = pVpnConnectionId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpnConnectionOptions_dryRun :: Lens.Lens' ModifyVpnConnectionOptions (Prelude.Maybe Prelude.Bool)
+modifyVpnConnectionOptions_dryRun = Lens.lens (\ModifyVpnConnectionOptions' {dryRun} -> dryRun) (\s@ModifyVpnConnectionOptions' {} a -> s {dryRun = a} :: ModifyVpnConnectionOptions)
+
+-- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @0.0.0.0\/0@
+modifyVpnConnectionOptions_localIpv4NetworkCidr :: Lens.Lens' ModifyVpnConnectionOptions (Prelude.Maybe Prelude.Text)
+modifyVpnConnectionOptions_localIpv4NetworkCidr = Lens.lens (\ModifyVpnConnectionOptions' {localIpv4NetworkCidr} -> localIpv4NetworkCidr) (\s@ModifyVpnConnectionOptions' {} a -> s {localIpv4NetworkCidr = a} :: ModifyVpnConnectionOptions)
+
+-- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @::\/0@
+modifyVpnConnectionOptions_localIpv6NetworkCidr :: Lens.Lens' ModifyVpnConnectionOptions (Prelude.Maybe Prelude.Text)
+modifyVpnConnectionOptions_localIpv6NetworkCidr = Lens.lens (\ModifyVpnConnectionOptions' {localIpv6NetworkCidr} -> localIpv6NetworkCidr) (\s@ModifyVpnConnectionOptions' {} a -> s {localIpv6NetworkCidr = a} :: ModifyVpnConnectionOptions)
+
+-- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @0.0.0.0\/0@
+modifyVpnConnectionOptions_remoteIpv4NetworkCidr :: Lens.Lens' ModifyVpnConnectionOptions (Prelude.Maybe Prelude.Text)
+modifyVpnConnectionOptions_remoteIpv4NetworkCidr = Lens.lens (\ModifyVpnConnectionOptions' {remoteIpv4NetworkCidr} -> remoteIpv4NetworkCidr) (\s@ModifyVpnConnectionOptions' {} a -> s {remoteIpv4NetworkCidr = a} :: ModifyVpnConnectionOptions)
+
+-- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @::\/0@
+modifyVpnConnectionOptions_remoteIpv6NetworkCidr :: Lens.Lens' ModifyVpnConnectionOptions (Prelude.Maybe Prelude.Text)
+modifyVpnConnectionOptions_remoteIpv6NetworkCidr = Lens.lens (\ModifyVpnConnectionOptions' {remoteIpv6NetworkCidr} -> remoteIpv6NetworkCidr) (\s@ModifyVpnConnectionOptions' {} a -> s {remoteIpv6NetworkCidr = a} :: ModifyVpnConnectionOptions)
+
+-- | The ID of the Site-to-Site VPN connection.
+modifyVpnConnectionOptions_vpnConnectionId :: Lens.Lens' ModifyVpnConnectionOptions Prelude.Text
+modifyVpnConnectionOptions_vpnConnectionId = Lens.lens (\ModifyVpnConnectionOptions' {vpnConnectionId} -> vpnConnectionId) (\s@ModifyVpnConnectionOptions' {} a -> s {vpnConnectionId = a} :: ModifyVpnConnectionOptions)
+
+instance Core.AWSRequest ModifyVpnConnectionOptions where
+  type
+    AWSResponse ModifyVpnConnectionOptions =
+      ModifyVpnConnectionOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpnConnectionOptionsResponse'
+            Prelude.<$> (x Data..@? "vpnConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVpnConnectionOptions where
+  hashWithSalt _salt ModifyVpnConnectionOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` localIpv4NetworkCidr
+      `Prelude.hashWithSalt` localIpv6NetworkCidr
+      `Prelude.hashWithSalt` remoteIpv4NetworkCidr
+      `Prelude.hashWithSalt` remoteIpv6NetworkCidr
+      `Prelude.hashWithSalt` vpnConnectionId
+
+instance Prelude.NFData ModifyVpnConnectionOptions where
+  rnf ModifyVpnConnectionOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf localIpv4NetworkCidr
+      `Prelude.seq` Prelude.rnf localIpv6NetworkCidr
+      `Prelude.seq` Prelude.rnf remoteIpv4NetworkCidr
+      `Prelude.seq` Prelude.rnf remoteIpv6NetworkCidr
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+
+instance Data.ToHeaders ModifyVpnConnectionOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpnConnectionOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpnConnectionOptions where
+  toQuery ModifyVpnConnectionOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpnConnectionOptions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LocalIpv4NetworkCidr" Data.=: localIpv4NetworkCidr,
+        "LocalIpv6NetworkCidr" Data.=: localIpv6NetworkCidr,
+        "RemoteIpv4NetworkCidr"
+          Data.=: remoteIpv4NetworkCidr,
+        "RemoteIpv6NetworkCidr"
+          Data.=: remoteIpv6NetworkCidr,
+        "VpnConnectionId" Data.=: vpnConnectionId
+      ]
+
+-- | /See:/ 'newModifyVpnConnectionOptionsResponse' smart constructor.
+data ModifyVpnConnectionOptionsResponse = ModifyVpnConnectionOptionsResponse'
+  { -- | Information about the VPN connection.
+    vpnConnection :: Prelude.Maybe VpnConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnConnectionOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnection', 'modifyVpnConnectionOptionsResponse_vpnConnection' - Information about the VPN connection.
+--
+-- 'httpStatus', 'modifyVpnConnectionOptionsResponse_httpStatus' - The response's http status code.
+newModifyVpnConnectionOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpnConnectionOptionsResponse
+newModifyVpnConnectionOptionsResponse pHttpStatus_ =
+  ModifyVpnConnectionOptionsResponse'
+    { vpnConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPN connection.
+modifyVpnConnectionOptionsResponse_vpnConnection :: Lens.Lens' ModifyVpnConnectionOptionsResponse (Prelude.Maybe VpnConnection)
+modifyVpnConnectionOptionsResponse_vpnConnection = Lens.lens (\ModifyVpnConnectionOptionsResponse' {vpnConnection} -> vpnConnection) (\s@ModifyVpnConnectionOptionsResponse' {} a -> s {vpnConnection = a} :: ModifyVpnConnectionOptionsResponse)
+
+-- | The response's http status code.
+modifyVpnConnectionOptionsResponse_httpStatus :: Lens.Lens' ModifyVpnConnectionOptionsResponse Prelude.Int
+modifyVpnConnectionOptionsResponse_httpStatus = Lens.lens (\ModifyVpnConnectionOptionsResponse' {httpStatus} -> httpStatus) (\s@ModifyVpnConnectionOptionsResponse' {} a -> s {httpStatus = a} :: ModifyVpnConnectionOptionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpnConnectionOptionsResponse
+  where
+  rnf ModifyVpnConnectionOptionsResponse' {..} =
+    Prelude.rnf vpnConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpnTunnelCertificate.hs b/gen/Amazonka/EC2/ModifyVpnTunnelCertificate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpnTunnelCertificate.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpnTunnelCertificate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the VPN tunnel endpoint certificate.
+module Amazonka.EC2.ModifyVpnTunnelCertificate
+  ( -- * Creating a Request
+    ModifyVpnTunnelCertificate (..),
+    newModifyVpnTunnelCertificate,
+
+    -- * Request Lenses
+    modifyVpnTunnelCertificate_dryRun,
+    modifyVpnTunnelCertificate_vpnConnectionId,
+    modifyVpnTunnelCertificate_vpnTunnelOutsideIpAddress,
+
+    -- * Destructuring the Response
+    ModifyVpnTunnelCertificateResponse (..),
+    newModifyVpnTunnelCertificateResponse,
+
+    -- * Response Lenses
+    modifyVpnTunnelCertificateResponse_vpnConnection,
+    modifyVpnTunnelCertificateResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpnTunnelCertificate' smart constructor.
+data ModifyVpnTunnelCertificate = ModifyVpnTunnelCertificate'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Site-to-Site VPN connection.
+    vpnConnectionId :: Prelude.Text,
+    -- | The external IP address of the VPN tunnel.
+    vpnTunnelOutsideIpAddress :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnTunnelCertificate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyVpnTunnelCertificate_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpnConnectionId', 'modifyVpnTunnelCertificate_vpnConnectionId' - The ID of the Amazon Web Services Site-to-Site VPN connection.
+--
+-- 'vpnTunnelOutsideIpAddress', 'modifyVpnTunnelCertificate_vpnTunnelOutsideIpAddress' - The external IP address of the VPN tunnel.
+newModifyVpnTunnelCertificate ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  -- | 'vpnTunnelOutsideIpAddress'
+  Prelude.Text ->
+  ModifyVpnTunnelCertificate
+newModifyVpnTunnelCertificate
+  pVpnConnectionId_
+  pVpnTunnelOutsideIpAddress_ =
+    ModifyVpnTunnelCertificate'
+      { dryRun =
+          Prelude.Nothing,
+        vpnConnectionId = pVpnConnectionId_,
+        vpnTunnelOutsideIpAddress =
+          pVpnTunnelOutsideIpAddress_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpnTunnelCertificate_dryRun :: Lens.Lens' ModifyVpnTunnelCertificate (Prelude.Maybe Prelude.Bool)
+modifyVpnTunnelCertificate_dryRun = Lens.lens (\ModifyVpnTunnelCertificate' {dryRun} -> dryRun) (\s@ModifyVpnTunnelCertificate' {} a -> s {dryRun = a} :: ModifyVpnTunnelCertificate)
+
+-- | The ID of the Amazon Web Services Site-to-Site VPN connection.
+modifyVpnTunnelCertificate_vpnConnectionId :: Lens.Lens' ModifyVpnTunnelCertificate Prelude.Text
+modifyVpnTunnelCertificate_vpnConnectionId = Lens.lens (\ModifyVpnTunnelCertificate' {vpnConnectionId} -> vpnConnectionId) (\s@ModifyVpnTunnelCertificate' {} a -> s {vpnConnectionId = a} :: ModifyVpnTunnelCertificate)
+
+-- | The external IP address of the VPN tunnel.
+modifyVpnTunnelCertificate_vpnTunnelOutsideIpAddress :: Lens.Lens' ModifyVpnTunnelCertificate Prelude.Text
+modifyVpnTunnelCertificate_vpnTunnelOutsideIpAddress = Lens.lens (\ModifyVpnTunnelCertificate' {vpnTunnelOutsideIpAddress} -> vpnTunnelOutsideIpAddress) (\s@ModifyVpnTunnelCertificate' {} a -> s {vpnTunnelOutsideIpAddress = a} :: ModifyVpnTunnelCertificate)
+
+instance Core.AWSRequest ModifyVpnTunnelCertificate where
+  type
+    AWSResponse ModifyVpnTunnelCertificate =
+      ModifyVpnTunnelCertificateResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpnTunnelCertificateResponse'
+            Prelude.<$> (x Data..@? "vpnConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVpnTunnelCertificate where
+  hashWithSalt _salt ModifyVpnTunnelCertificate' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpnConnectionId
+      `Prelude.hashWithSalt` vpnTunnelOutsideIpAddress
+
+instance Prelude.NFData ModifyVpnTunnelCertificate where
+  rnf ModifyVpnTunnelCertificate' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+      `Prelude.seq` Prelude.rnf vpnTunnelOutsideIpAddress
+
+instance Data.ToHeaders ModifyVpnTunnelCertificate where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpnTunnelCertificate where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpnTunnelCertificate where
+  toQuery ModifyVpnTunnelCertificate' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpnTunnelCertificate" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpnConnectionId" Data.=: vpnConnectionId,
+        "VpnTunnelOutsideIpAddress"
+          Data.=: vpnTunnelOutsideIpAddress
+      ]
+
+-- | /See:/ 'newModifyVpnTunnelCertificateResponse' smart constructor.
+data ModifyVpnTunnelCertificateResponse = ModifyVpnTunnelCertificateResponse'
+  { -- | Information about the VPN connection.
+    vpnConnection :: Prelude.Maybe VpnConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnTunnelCertificateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnection', 'modifyVpnTunnelCertificateResponse_vpnConnection' - Information about the VPN connection.
+--
+-- 'httpStatus', 'modifyVpnTunnelCertificateResponse_httpStatus' - The response's http status code.
+newModifyVpnTunnelCertificateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpnTunnelCertificateResponse
+newModifyVpnTunnelCertificateResponse pHttpStatus_ =
+  ModifyVpnTunnelCertificateResponse'
+    { vpnConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPN connection.
+modifyVpnTunnelCertificateResponse_vpnConnection :: Lens.Lens' ModifyVpnTunnelCertificateResponse (Prelude.Maybe VpnConnection)
+modifyVpnTunnelCertificateResponse_vpnConnection = Lens.lens (\ModifyVpnTunnelCertificateResponse' {vpnConnection} -> vpnConnection) (\s@ModifyVpnTunnelCertificateResponse' {} a -> s {vpnConnection = a} :: ModifyVpnTunnelCertificateResponse)
+
+-- | The response's http status code.
+modifyVpnTunnelCertificateResponse_httpStatus :: Lens.Lens' ModifyVpnTunnelCertificateResponse Prelude.Int
+modifyVpnTunnelCertificateResponse_httpStatus = Lens.lens (\ModifyVpnTunnelCertificateResponse' {httpStatus} -> httpStatus) (\s@ModifyVpnTunnelCertificateResponse' {} a -> s {httpStatus = a} :: ModifyVpnTunnelCertificateResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpnTunnelCertificateResponse
+  where
+  rnf ModifyVpnTunnelCertificateResponse' {..} =
+    Prelude.rnf vpnConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ModifyVpnTunnelOptions.hs b/gen/Amazonka/EC2/ModifyVpnTunnelOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ModifyVpnTunnelOptions.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ModifyVpnTunnelOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies the options for a VPN tunnel in an Amazon Web Services
+-- Site-to-Site VPN connection. You can modify multiple options for a
+-- tunnel in a single request, but you can only modify one tunnel at a
+-- time. For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNTunnels.html Site-to-Site VPN tunnel options for your Site-to-Site VPN connection>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+module Amazonka.EC2.ModifyVpnTunnelOptions
+  ( -- * Creating a Request
+    ModifyVpnTunnelOptions (..),
+    newModifyVpnTunnelOptions,
+
+    -- * Request Lenses
+    modifyVpnTunnelOptions_dryRun,
+    modifyVpnTunnelOptions_vpnConnectionId,
+    modifyVpnTunnelOptions_vpnTunnelOutsideIpAddress,
+    modifyVpnTunnelOptions_tunnelOptions,
+
+    -- * Destructuring the Response
+    ModifyVpnTunnelOptionsResponse (..),
+    newModifyVpnTunnelOptionsResponse,
+
+    -- * Response Lenses
+    modifyVpnTunnelOptionsResponse_vpnConnection,
+    modifyVpnTunnelOptionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newModifyVpnTunnelOptions' smart constructor.
+data ModifyVpnTunnelOptions = ModifyVpnTunnelOptions'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services Site-to-Site VPN connection.
+    vpnConnectionId :: Prelude.Text,
+    -- | The external IP address of the VPN tunnel.
+    vpnTunnelOutsideIpAddress :: Prelude.Text,
+    -- | The tunnel options to modify.
+    tunnelOptions :: ModifyVpnTunnelOptionsSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnTunnelOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'modifyVpnTunnelOptions_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpnConnectionId', 'modifyVpnTunnelOptions_vpnConnectionId' - The ID of the Amazon Web Services Site-to-Site VPN connection.
+--
+-- 'vpnTunnelOutsideIpAddress', 'modifyVpnTunnelOptions_vpnTunnelOutsideIpAddress' - The external IP address of the VPN tunnel.
+--
+-- 'tunnelOptions', 'modifyVpnTunnelOptions_tunnelOptions' - The tunnel options to modify.
+newModifyVpnTunnelOptions ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  -- | 'vpnTunnelOutsideIpAddress'
+  Prelude.Text ->
+  -- | 'tunnelOptions'
+  ModifyVpnTunnelOptionsSpecification ->
+  ModifyVpnTunnelOptions
+newModifyVpnTunnelOptions
+  pVpnConnectionId_
+  pVpnTunnelOutsideIpAddress_
+  pTunnelOptions_ =
+    ModifyVpnTunnelOptions'
+      { dryRun = Prelude.Nothing,
+        vpnConnectionId = pVpnConnectionId_,
+        vpnTunnelOutsideIpAddress =
+          pVpnTunnelOutsideIpAddress_,
+        tunnelOptions = pTunnelOptions_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+modifyVpnTunnelOptions_dryRun :: Lens.Lens' ModifyVpnTunnelOptions (Prelude.Maybe Prelude.Bool)
+modifyVpnTunnelOptions_dryRun = Lens.lens (\ModifyVpnTunnelOptions' {dryRun} -> dryRun) (\s@ModifyVpnTunnelOptions' {} a -> s {dryRun = a} :: ModifyVpnTunnelOptions)
+
+-- | The ID of the Amazon Web Services Site-to-Site VPN connection.
+modifyVpnTunnelOptions_vpnConnectionId :: Lens.Lens' ModifyVpnTunnelOptions Prelude.Text
+modifyVpnTunnelOptions_vpnConnectionId = Lens.lens (\ModifyVpnTunnelOptions' {vpnConnectionId} -> vpnConnectionId) (\s@ModifyVpnTunnelOptions' {} a -> s {vpnConnectionId = a} :: ModifyVpnTunnelOptions)
+
+-- | The external IP address of the VPN tunnel.
+modifyVpnTunnelOptions_vpnTunnelOutsideIpAddress :: Lens.Lens' ModifyVpnTunnelOptions Prelude.Text
+modifyVpnTunnelOptions_vpnTunnelOutsideIpAddress = Lens.lens (\ModifyVpnTunnelOptions' {vpnTunnelOutsideIpAddress} -> vpnTunnelOutsideIpAddress) (\s@ModifyVpnTunnelOptions' {} a -> s {vpnTunnelOutsideIpAddress = a} :: ModifyVpnTunnelOptions)
+
+-- | The tunnel options to modify.
+modifyVpnTunnelOptions_tunnelOptions :: Lens.Lens' ModifyVpnTunnelOptions ModifyVpnTunnelOptionsSpecification
+modifyVpnTunnelOptions_tunnelOptions = Lens.lens (\ModifyVpnTunnelOptions' {tunnelOptions} -> tunnelOptions) (\s@ModifyVpnTunnelOptions' {} a -> s {tunnelOptions = a} :: ModifyVpnTunnelOptions)
+
+instance Core.AWSRequest ModifyVpnTunnelOptions where
+  type
+    AWSResponse ModifyVpnTunnelOptions =
+      ModifyVpnTunnelOptionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ModifyVpnTunnelOptionsResponse'
+            Prelude.<$> (x Data..@? "vpnConnection")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ModifyVpnTunnelOptions where
+  hashWithSalt _salt ModifyVpnTunnelOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpnConnectionId
+      `Prelude.hashWithSalt` vpnTunnelOutsideIpAddress
+      `Prelude.hashWithSalt` tunnelOptions
+
+instance Prelude.NFData ModifyVpnTunnelOptions where
+  rnf ModifyVpnTunnelOptions' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+      `Prelude.seq` Prelude.rnf vpnTunnelOutsideIpAddress
+      `Prelude.seq` Prelude.rnf tunnelOptions
+
+instance Data.ToHeaders ModifyVpnTunnelOptions where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ModifyVpnTunnelOptions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ModifyVpnTunnelOptions where
+  toQuery ModifyVpnTunnelOptions' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ModifyVpnTunnelOptions" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpnConnectionId" Data.=: vpnConnectionId,
+        "VpnTunnelOutsideIpAddress"
+          Data.=: vpnTunnelOutsideIpAddress,
+        "TunnelOptions" Data.=: tunnelOptions
+      ]
+
+-- | /See:/ 'newModifyVpnTunnelOptionsResponse' smart constructor.
+data ModifyVpnTunnelOptionsResponse = ModifyVpnTunnelOptionsResponse'
+  { -- | Information about the VPN connection.
+    vpnConnection :: Prelude.Maybe VpnConnection,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnTunnelOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpnConnection', 'modifyVpnTunnelOptionsResponse_vpnConnection' - Information about the VPN connection.
+--
+-- 'httpStatus', 'modifyVpnTunnelOptionsResponse_httpStatus' - The response's http status code.
+newModifyVpnTunnelOptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ModifyVpnTunnelOptionsResponse
+newModifyVpnTunnelOptionsResponse pHttpStatus_ =
+  ModifyVpnTunnelOptionsResponse'
+    { vpnConnection =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the VPN connection.
+modifyVpnTunnelOptionsResponse_vpnConnection :: Lens.Lens' ModifyVpnTunnelOptionsResponse (Prelude.Maybe VpnConnection)
+modifyVpnTunnelOptionsResponse_vpnConnection = Lens.lens (\ModifyVpnTunnelOptionsResponse' {vpnConnection} -> vpnConnection) (\s@ModifyVpnTunnelOptionsResponse' {} a -> s {vpnConnection = a} :: ModifyVpnTunnelOptionsResponse)
+
+-- | The response's http status code.
+modifyVpnTunnelOptionsResponse_httpStatus :: Lens.Lens' ModifyVpnTunnelOptionsResponse Prelude.Int
+modifyVpnTunnelOptionsResponse_httpStatus = Lens.lens (\ModifyVpnTunnelOptionsResponse' {httpStatus} -> httpStatus) (\s@ModifyVpnTunnelOptionsResponse' {} a -> s {httpStatus = a} :: ModifyVpnTunnelOptionsResponse)
+
+instance
+  Prelude.NFData
+    ModifyVpnTunnelOptionsResponse
+  where
+  rnf ModifyVpnTunnelOptionsResponse' {..} =
+    Prelude.rnf vpnConnection
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/MonitorInstances.hs b/gen/Amazonka/EC2/MonitorInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/MonitorInstances.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.MonitorInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables detailed monitoring for a running instance. Otherwise, basic
+-- monitoring is enabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html Monitor your instances using CloudWatch>
+-- in the /Amazon EC2 User Guide/.
+--
+-- To disable detailed monitoring, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_UnmonitorInstances.html UnmonitorInstances>.
+module Amazonka.EC2.MonitorInstances
+  ( -- * Creating a Request
+    MonitorInstances (..),
+    newMonitorInstances,
+
+    -- * Request Lenses
+    monitorInstances_dryRun,
+    monitorInstances_instanceIds,
+
+    -- * Destructuring the Response
+    MonitorInstancesResponse (..),
+    newMonitorInstancesResponse,
+
+    -- * Response Lenses
+    monitorInstancesResponse_instanceMonitorings,
+    monitorInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newMonitorInstances' smart constructor.
+data MonitorInstances = MonitorInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the instances.
+    instanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitorInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'monitorInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceIds', 'monitorInstances_instanceIds' - The IDs of the instances.
+newMonitorInstances ::
+  MonitorInstances
+newMonitorInstances =
+  MonitorInstances'
+    { dryRun = Prelude.Nothing,
+      instanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+monitorInstances_dryRun :: Lens.Lens' MonitorInstances (Prelude.Maybe Prelude.Bool)
+monitorInstances_dryRun = Lens.lens (\MonitorInstances' {dryRun} -> dryRun) (\s@MonitorInstances' {} a -> s {dryRun = a} :: MonitorInstances)
+
+-- | The IDs of the instances.
+monitorInstances_instanceIds :: Lens.Lens' MonitorInstances [Prelude.Text]
+monitorInstances_instanceIds = Lens.lens (\MonitorInstances' {instanceIds} -> instanceIds) (\s@MonitorInstances' {} a -> s {instanceIds = a} :: MonitorInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest MonitorInstances where
+  type
+    AWSResponse MonitorInstances =
+      MonitorInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          MonitorInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable MonitorInstances where
+  hashWithSalt _salt MonitorInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceIds
+
+instance Prelude.NFData MonitorInstances where
+  rnf MonitorInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceIds
+
+instance Data.ToHeaders MonitorInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath MonitorInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery MonitorInstances where
+  toQuery MonitorInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("MonitorInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "InstanceId" instanceIds
+      ]
+
+-- | /See:/ 'newMonitorInstancesResponse' smart constructor.
+data MonitorInstancesResponse = MonitorInstancesResponse'
+  { -- | The monitoring information.
+    instanceMonitorings :: Prelude.Maybe [InstanceMonitoring],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MonitorInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceMonitorings', 'monitorInstancesResponse_instanceMonitorings' - The monitoring information.
+--
+-- 'httpStatus', 'monitorInstancesResponse_httpStatus' - The response's http status code.
+newMonitorInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  MonitorInstancesResponse
+newMonitorInstancesResponse pHttpStatus_ =
+  MonitorInstancesResponse'
+    { instanceMonitorings =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The monitoring information.
+monitorInstancesResponse_instanceMonitorings :: Lens.Lens' MonitorInstancesResponse (Prelude.Maybe [InstanceMonitoring])
+monitorInstancesResponse_instanceMonitorings = Lens.lens (\MonitorInstancesResponse' {instanceMonitorings} -> instanceMonitorings) (\s@MonitorInstancesResponse' {} a -> s {instanceMonitorings = a} :: MonitorInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+monitorInstancesResponse_httpStatus :: Lens.Lens' MonitorInstancesResponse Prelude.Int
+monitorInstancesResponse_httpStatus = Lens.lens (\MonitorInstancesResponse' {httpStatus} -> httpStatus) (\s@MonitorInstancesResponse' {} a -> s {httpStatus = a} :: MonitorInstancesResponse)
+
+instance Prelude.NFData MonitorInstancesResponse where
+  rnf MonitorInstancesResponse' {..} =
+    Prelude.rnf instanceMonitorings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/MoveAddressToVpc.hs b/gen/Amazonka/EC2/MoveAddressToVpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/MoveAddressToVpc.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.MoveAddressToVpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC
+-- platform. The Elastic IP address must be allocated to your account for
+-- more than 24 hours, and it must not be associated with an instance.
+-- After the Elastic IP address is moved, it is no longer available for use
+-- in the EC2-Classic platform, unless you move it back using the
+-- RestoreAddressToClassic request. You cannot move an Elastic IP address
+-- that was originally allocated for use in the EC2-VPC platform to the
+-- EC2-Classic platform.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.MoveAddressToVpc
+  ( -- * Creating a Request
+    MoveAddressToVpc (..),
+    newMoveAddressToVpc,
+
+    -- * Request Lenses
+    moveAddressToVpc_dryRun,
+    moveAddressToVpc_publicIp,
+
+    -- * Destructuring the Response
+    MoveAddressToVpcResponse (..),
+    newMoveAddressToVpcResponse,
+
+    -- * Response Lenses
+    moveAddressToVpcResponse_allocationId,
+    moveAddressToVpcResponse_status,
+    moveAddressToVpcResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newMoveAddressToVpc' smart constructor.
+data MoveAddressToVpc = MoveAddressToVpc'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Elastic IP address.
+    publicIp :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MoveAddressToVpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'moveAddressToVpc_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'publicIp', 'moveAddressToVpc_publicIp' - The Elastic IP address.
+newMoveAddressToVpc ::
+  -- | 'publicIp'
+  Prelude.Text ->
+  MoveAddressToVpc
+newMoveAddressToVpc pPublicIp_ =
+  MoveAddressToVpc'
+    { dryRun = Prelude.Nothing,
+      publicIp = pPublicIp_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+moveAddressToVpc_dryRun :: Lens.Lens' MoveAddressToVpc (Prelude.Maybe Prelude.Bool)
+moveAddressToVpc_dryRun = Lens.lens (\MoveAddressToVpc' {dryRun} -> dryRun) (\s@MoveAddressToVpc' {} a -> s {dryRun = a} :: MoveAddressToVpc)
+
+-- | The Elastic IP address.
+moveAddressToVpc_publicIp :: Lens.Lens' MoveAddressToVpc Prelude.Text
+moveAddressToVpc_publicIp = Lens.lens (\MoveAddressToVpc' {publicIp} -> publicIp) (\s@MoveAddressToVpc' {} a -> s {publicIp = a} :: MoveAddressToVpc)
+
+instance Core.AWSRequest MoveAddressToVpc where
+  type
+    AWSResponse MoveAddressToVpc =
+      MoveAddressToVpcResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          MoveAddressToVpcResponse'
+            Prelude.<$> (x Data..@? "allocationId")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable MoveAddressToVpc where
+  hashWithSalt _salt MoveAddressToVpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData MoveAddressToVpc where
+  rnf MoveAddressToVpc' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf publicIp
+
+instance Data.ToHeaders MoveAddressToVpc where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath MoveAddressToVpc where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery MoveAddressToVpc where
+  toQuery MoveAddressToVpc' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("MoveAddressToVpc" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PublicIp" Data.=: publicIp
+      ]
+
+-- | /See:/ 'newMoveAddressToVpcResponse' smart constructor.
+data MoveAddressToVpcResponse = MoveAddressToVpcResponse'
+  { -- | The allocation ID for the Elastic IP address.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the move of the IP address.
+    status :: Prelude.Maybe AddressStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MoveAddressToVpcResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'moveAddressToVpcResponse_allocationId' - The allocation ID for the Elastic IP address.
+--
+-- 'status', 'moveAddressToVpcResponse_status' - The status of the move of the IP address.
+--
+-- 'httpStatus', 'moveAddressToVpcResponse_httpStatus' - The response's http status code.
+newMoveAddressToVpcResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  MoveAddressToVpcResponse
+newMoveAddressToVpcResponse pHttpStatus_ =
+  MoveAddressToVpcResponse'
+    { allocationId =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The allocation ID for the Elastic IP address.
+moveAddressToVpcResponse_allocationId :: Lens.Lens' MoveAddressToVpcResponse (Prelude.Maybe Prelude.Text)
+moveAddressToVpcResponse_allocationId = Lens.lens (\MoveAddressToVpcResponse' {allocationId} -> allocationId) (\s@MoveAddressToVpcResponse' {} a -> s {allocationId = a} :: MoveAddressToVpcResponse)
+
+-- | The status of the move of the IP address.
+moveAddressToVpcResponse_status :: Lens.Lens' MoveAddressToVpcResponse (Prelude.Maybe AddressStatus)
+moveAddressToVpcResponse_status = Lens.lens (\MoveAddressToVpcResponse' {status} -> status) (\s@MoveAddressToVpcResponse' {} a -> s {status = a} :: MoveAddressToVpcResponse)
+
+-- | The response's http status code.
+moveAddressToVpcResponse_httpStatus :: Lens.Lens' MoveAddressToVpcResponse Prelude.Int
+moveAddressToVpcResponse_httpStatus = Lens.lens (\MoveAddressToVpcResponse' {httpStatus} -> httpStatus) (\s@MoveAddressToVpcResponse' {} a -> s {httpStatus = a} :: MoveAddressToVpcResponse)
+
+instance Prelude.NFData MoveAddressToVpcResponse where
+  rnf MoveAddressToVpcResponse' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/MoveByoipCidrToIpam.hs b/gen/Amazonka/EC2/MoveByoipCidrToIpam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/MoveByoipCidrToIpam.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.MoveByoipCidrToIpam
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Move an BYOIP IPv4 CIDR to IPAM from a public IPv4 pool.
+--
+-- If you already have an IPv4 BYOIP CIDR with Amazon Web Services, you can
+-- move the CIDR to IPAM from a public IPv4 pool. You cannot move an IPv6
+-- CIDR to IPAM. If you are bringing a new IP address to Amazon Web
+-- Services for the first time, complete the steps in
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoip-ipam.html Tutorial: BYOIP address CIDRs to IPAM>.
+module Amazonka.EC2.MoveByoipCidrToIpam
+  ( -- * Creating a Request
+    MoveByoipCidrToIpam (..),
+    newMoveByoipCidrToIpam,
+
+    -- * Request Lenses
+    moveByoipCidrToIpam_dryRun,
+    moveByoipCidrToIpam_cidr,
+    moveByoipCidrToIpam_ipamPoolId,
+    moveByoipCidrToIpam_ipamPoolOwner,
+
+    -- * Destructuring the Response
+    MoveByoipCidrToIpamResponse (..),
+    newMoveByoipCidrToIpamResponse,
+
+    -- * Response Lenses
+    moveByoipCidrToIpamResponse_byoipCidr,
+    moveByoipCidrToIpamResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newMoveByoipCidrToIpam' smart constructor.
+data MoveByoipCidrToIpam = MoveByoipCidrToIpam'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The BYOIP CIDR.
+    cidr :: Prelude.Text,
+    -- | The IPAM pool ID.
+    ipamPoolId :: Prelude.Text,
+    -- | The Amazon Web Services account ID of the owner of the IPAM pool.
+    ipamPoolOwner :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MoveByoipCidrToIpam' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'moveByoipCidrToIpam_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'cidr', 'moveByoipCidrToIpam_cidr' - The BYOIP CIDR.
+--
+-- 'ipamPoolId', 'moveByoipCidrToIpam_ipamPoolId' - The IPAM pool ID.
+--
+-- 'ipamPoolOwner', 'moveByoipCidrToIpam_ipamPoolOwner' - The Amazon Web Services account ID of the owner of the IPAM pool.
+newMoveByoipCidrToIpam ::
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  -- | 'ipamPoolOwner'
+  Prelude.Text ->
+  MoveByoipCidrToIpam
+newMoveByoipCidrToIpam
+  pCidr_
+  pIpamPoolId_
+  pIpamPoolOwner_ =
+    MoveByoipCidrToIpam'
+      { dryRun = Prelude.Nothing,
+        cidr = pCidr_,
+        ipamPoolId = pIpamPoolId_,
+        ipamPoolOwner = pIpamPoolOwner_
+      }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+moveByoipCidrToIpam_dryRun :: Lens.Lens' MoveByoipCidrToIpam (Prelude.Maybe Prelude.Bool)
+moveByoipCidrToIpam_dryRun = Lens.lens (\MoveByoipCidrToIpam' {dryRun} -> dryRun) (\s@MoveByoipCidrToIpam' {} a -> s {dryRun = a} :: MoveByoipCidrToIpam)
+
+-- | The BYOIP CIDR.
+moveByoipCidrToIpam_cidr :: Lens.Lens' MoveByoipCidrToIpam Prelude.Text
+moveByoipCidrToIpam_cidr = Lens.lens (\MoveByoipCidrToIpam' {cidr} -> cidr) (\s@MoveByoipCidrToIpam' {} a -> s {cidr = a} :: MoveByoipCidrToIpam)
+
+-- | The IPAM pool ID.
+moveByoipCidrToIpam_ipamPoolId :: Lens.Lens' MoveByoipCidrToIpam Prelude.Text
+moveByoipCidrToIpam_ipamPoolId = Lens.lens (\MoveByoipCidrToIpam' {ipamPoolId} -> ipamPoolId) (\s@MoveByoipCidrToIpam' {} a -> s {ipamPoolId = a} :: MoveByoipCidrToIpam)
+
+-- | The Amazon Web Services account ID of the owner of the IPAM pool.
+moveByoipCidrToIpam_ipamPoolOwner :: Lens.Lens' MoveByoipCidrToIpam Prelude.Text
+moveByoipCidrToIpam_ipamPoolOwner = Lens.lens (\MoveByoipCidrToIpam' {ipamPoolOwner} -> ipamPoolOwner) (\s@MoveByoipCidrToIpam' {} a -> s {ipamPoolOwner = a} :: MoveByoipCidrToIpam)
+
+instance Core.AWSRequest MoveByoipCidrToIpam where
+  type
+    AWSResponse MoveByoipCidrToIpam =
+      MoveByoipCidrToIpamResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          MoveByoipCidrToIpamResponse'
+            Prelude.<$> (x Data..@? "byoipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable MoveByoipCidrToIpam where
+  hashWithSalt _salt MoveByoipCidrToIpam' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` ipamPoolId
+      `Prelude.hashWithSalt` ipamPoolOwner
+
+instance Prelude.NFData MoveByoipCidrToIpam where
+  rnf MoveByoipCidrToIpam' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf ipamPoolId
+      `Prelude.seq` Prelude.rnf ipamPoolOwner
+
+instance Data.ToHeaders MoveByoipCidrToIpam where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath MoveByoipCidrToIpam where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery MoveByoipCidrToIpam where
+  toQuery MoveByoipCidrToIpam' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("MoveByoipCidrToIpam" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Cidr" Data.=: cidr,
+        "IpamPoolId" Data.=: ipamPoolId,
+        "IpamPoolOwner" Data.=: ipamPoolOwner
+      ]
+
+-- | /See:/ 'newMoveByoipCidrToIpamResponse' smart constructor.
+data MoveByoipCidrToIpamResponse = MoveByoipCidrToIpamResponse'
+  { -- | The BYOIP CIDR.
+    byoipCidr :: Prelude.Maybe ByoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MoveByoipCidrToIpamResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byoipCidr', 'moveByoipCidrToIpamResponse_byoipCidr' - The BYOIP CIDR.
+--
+-- 'httpStatus', 'moveByoipCidrToIpamResponse_httpStatus' - The response's http status code.
+newMoveByoipCidrToIpamResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  MoveByoipCidrToIpamResponse
+newMoveByoipCidrToIpamResponse pHttpStatus_ =
+  MoveByoipCidrToIpamResponse'
+    { byoipCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The BYOIP CIDR.
+moveByoipCidrToIpamResponse_byoipCidr :: Lens.Lens' MoveByoipCidrToIpamResponse (Prelude.Maybe ByoipCidr)
+moveByoipCidrToIpamResponse_byoipCidr = Lens.lens (\MoveByoipCidrToIpamResponse' {byoipCidr} -> byoipCidr) (\s@MoveByoipCidrToIpamResponse' {} a -> s {byoipCidr = a} :: MoveByoipCidrToIpamResponse)
+
+-- | The response's http status code.
+moveByoipCidrToIpamResponse_httpStatus :: Lens.Lens' MoveByoipCidrToIpamResponse Prelude.Int
+moveByoipCidrToIpamResponse_httpStatus = Lens.lens (\MoveByoipCidrToIpamResponse' {httpStatus} -> httpStatus) (\s@MoveByoipCidrToIpamResponse' {} a -> s {httpStatus = a} :: MoveByoipCidrToIpamResponse)
+
+instance Prelude.NFData MoveByoipCidrToIpamResponse where
+  rnf MoveByoipCidrToIpamResponse' {..} =
+    Prelude.rnf byoipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ProvisionByoipCidr.hs b/gen/Amazonka/EC2/ProvisionByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ProvisionByoipCidr.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ProvisionByoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provisions an IPv4 or IPv6 address range for use with your Amazon Web
+-- Services resources through bring your own IP addresses (BYOIP) and
+-- creates a corresponding address pool. After the address range is
+-- provisioned, it is ready to be advertised using AdvertiseByoipCidr.
+--
+-- Amazon Web Services verifies that you own the address range and are
+-- authorized to advertise it. You must ensure that the address range is
+-- registered to you and that you created an RPKI ROA to authorize Amazon
+-- ASNs 16509 and 14618 to advertise the address range. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html Bring your own IP addresses (BYOIP)>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Provisioning an address range is an asynchronous operation, so the call
+-- returns immediately, but the address range is not ready to use until its
+-- status changes from @pending-provision@ to @provisioned@. To monitor the
+-- status of an address range, use DescribeByoipCidrs. To allocate an
+-- Elastic IP address from your IPv4 address pool, use AllocateAddress with
+-- either the specific address from the address pool or the ID of the
+-- address pool.
+module Amazonka.EC2.ProvisionByoipCidr
+  ( -- * Creating a Request
+    ProvisionByoipCidr (..),
+    newProvisionByoipCidr,
+
+    -- * Request Lenses
+    provisionByoipCidr_cidrAuthorizationContext,
+    provisionByoipCidr_description,
+    provisionByoipCidr_dryRun,
+    provisionByoipCidr_multiRegion,
+    provisionByoipCidr_poolTagSpecifications,
+    provisionByoipCidr_publiclyAdvertisable,
+    provisionByoipCidr_cidr,
+
+    -- * Destructuring the Response
+    ProvisionByoipCidrResponse (..),
+    newProvisionByoipCidrResponse,
+
+    -- * Response Lenses
+    provisionByoipCidrResponse_byoipCidr,
+    provisionByoipCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newProvisionByoipCidr' smart constructor.
+data ProvisionByoipCidr = ProvisionByoipCidr'
+  { -- | A signed document that proves that you are authorized to bring the
+    -- specified IP address range to Amazon using BYOIP.
+    cidrAuthorizationContext :: Prelude.Maybe CidrAuthorizationContext,
+    -- | A description for the address range and the address pool.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Reserved.
+    multiRegion :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply to the address pool.
+    poolTagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | (IPv6 only) Indicate whether the address range will be publicly
+    -- advertised to the internet.
+    --
+    -- Default: true
+    publiclyAdvertisable :: Prelude.Maybe Prelude.Bool,
+    -- | The public IPv4 or IPv6 address range, in CIDR notation. The most
+    -- specific IPv4 prefix that you can specify is \/24. The most specific
+    -- IPv6 prefix you can specify is \/56. The address range cannot overlap
+    -- with another address range that you\'ve brought to this or another
+    -- Region.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionByoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrAuthorizationContext', 'provisionByoipCidr_cidrAuthorizationContext' - A signed document that proves that you are authorized to bring the
+-- specified IP address range to Amazon using BYOIP.
+--
+-- 'description', 'provisionByoipCidr_description' - A description for the address range and the address pool.
+--
+-- 'dryRun', 'provisionByoipCidr_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'multiRegion', 'provisionByoipCidr_multiRegion' - Reserved.
+--
+-- 'poolTagSpecifications', 'provisionByoipCidr_poolTagSpecifications' - The tags to apply to the address pool.
+--
+-- 'publiclyAdvertisable', 'provisionByoipCidr_publiclyAdvertisable' - (IPv6 only) Indicate whether the address range will be publicly
+-- advertised to the internet.
+--
+-- Default: true
+--
+-- 'cidr', 'provisionByoipCidr_cidr' - The public IPv4 or IPv6 address range, in CIDR notation. The most
+-- specific IPv4 prefix that you can specify is \/24. The most specific
+-- IPv6 prefix you can specify is \/56. The address range cannot overlap
+-- with another address range that you\'ve brought to this or another
+-- Region.
+newProvisionByoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  ProvisionByoipCidr
+newProvisionByoipCidr pCidr_ =
+  ProvisionByoipCidr'
+    { cidrAuthorizationContext =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      multiRegion = Prelude.Nothing,
+      poolTagSpecifications = Prelude.Nothing,
+      publiclyAdvertisable = Prelude.Nothing,
+      cidr = pCidr_
+    }
+
+-- | A signed document that proves that you are authorized to bring the
+-- specified IP address range to Amazon using BYOIP.
+provisionByoipCidr_cidrAuthorizationContext :: Lens.Lens' ProvisionByoipCidr (Prelude.Maybe CidrAuthorizationContext)
+provisionByoipCidr_cidrAuthorizationContext = Lens.lens (\ProvisionByoipCidr' {cidrAuthorizationContext} -> cidrAuthorizationContext) (\s@ProvisionByoipCidr' {} a -> s {cidrAuthorizationContext = a} :: ProvisionByoipCidr)
+
+-- | A description for the address range and the address pool.
+provisionByoipCidr_description :: Lens.Lens' ProvisionByoipCidr (Prelude.Maybe Prelude.Text)
+provisionByoipCidr_description = Lens.lens (\ProvisionByoipCidr' {description} -> description) (\s@ProvisionByoipCidr' {} a -> s {description = a} :: ProvisionByoipCidr)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+provisionByoipCidr_dryRun :: Lens.Lens' ProvisionByoipCidr (Prelude.Maybe Prelude.Bool)
+provisionByoipCidr_dryRun = Lens.lens (\ProvisionByoipCidr' {dryRun} -> dryRun) (\s@ProvisionByoipCidr' {} a -> s {dryRun = a} :: ProvisionByoipCidr)
+
+-- | Reserved.
+provisionByoipCidr_multiRegion :: Lens.Lens' ProvisionByoipCidr (Prelude.Maybe Prelude.Bool)
+provisionByoipCidr_multiRegion = Lens.lens (\ProvisionByoipCidr' {multiRegion} -> multiRegion) (\s@ProvisionByoipCidr' {} a -> s {multiRegion = a} :: ProvisionByoipCidr)
+
+-- | The tags to apply to the address pool.
+provisionByoipCidr_poolTagSpecifications :: Lens.Lens' ProvisionByoipCidr (Prelude.Maybe [TagSpecification])
+provisionByoipCidr_poolTagSpecifications = Lens.lens (\ProvisionByoipCidr' {poolTagSpecifications} -> poolTagSpecifications) (\s@ProvisionByoipCidr' {} a -> s {poolTagSpecifications = a} :: ProvisionByoipCidr) Prelude.. Lens.mapping Lens.coerced
+
+-- | (IPv6 only) Indicate whether the address range will be publicly
+-- advertised to the internet.
+--
+-- Default: true
+provisionByoipCidr_publiclyAdvertisable :: Lens.Lens' ProvisionByoipCidr (Prelude.Maybe Prelude.Bool)
+provisionByoipCidr_publiclyAdvertisable = Lens.lens (\ProvisionByoipCidr' {publiclyAdvertisable} -> publiclyAdvertisable) (\s@ProvisionByoipCidr' {} a -> s {publiclyAdvertisable = a} :: ProvisionByoipCidr)
+
+-- | The public IPv4 or IPv6 address range, in CIDR notation. The most
+-- specific IPv4 prefix that you can specify is \/24. The most specific
+-- IPv6 prefix you can specify is \/56. The address range cannot overlap
+-- with another address range that you\'ve brought to this or another
+-- Region.
+provisionByoipCidr_cidr :: Lens.Lens' ProvisionByoipCidr Prelude.Text
+provisionByoipCidr_cidr = Lens.lens (\ProvisionByoipCidr' {cidr} -> cidr) (\s@ProvisionByoipCidr' {} a -> s {cidr = a} :: ProvisionByoipCidr)
+
+instance Core.AWSRequest ProvisionByoipCidr where
+  type
+    AWSResponse ProvisionByoipCidr =
+      ProvisionByoipCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ProvisionByoipCidrResponse'
+            Prelude.<$> (x Data..@? "byoipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ProvisionByoipCidr where
+  hashWithSalt _salt ProvisionByoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrAuthorizationContext
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` multiRegion
+      `Prelude.hashWithSalt` poolTagSpecifications
+      `Prelude.hashWithSalt` publiclyAdvertisable
+      `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData ProvisionByoipCidr where
+  rnf ProvisionByoipCidr' {..} =
+    Prelude.rnf cidrAuthorizationContext
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf multiRegion
+      `Prelude.seq` Prelude.rnf poolTagSpecifications
+      `Prelude.seq` Prelude.rnf publiclyAdvertisable
+      `Prelude.seq` Prelude.rnf cidr
+
+instance Data.ToHeaders ProvisionByoipCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ProvisionByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ProvisionByoipCidr where
+  toQuery ProvisionByoipCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ProvisionByoipCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrAuthorizationContext"
+          Data.=: cidrAuthorizationContext,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "MultiRegion" Data.=: multiRegion,
+        Data.toQuery
+          ( Data.toQueryList "PoolTagSpecification"
+              Prelude.<$> poolTagSpecifications
+          ),
+        "PubliclyAdvertisable" Data.=: publiclyAdvertisable,
+        "Cidr" Data.=: cidr
+      ]
+
+-- | /See:/ 'newProvisionByoipCidrResponse' smart constructor.
+data ProvisionByoipCidrResponse = ProvisionByoipCidrResponse'
+  { -- | Information about the address range.
+    byoipCidr :: Prelude.Maybe ByoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionByoipCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byoipCidr', 'provisionByoipCidrResponse_byoipCidr' - Information about the address range.
+--
+-- 'httpStatus', 'provisionByoipCidrResponse_httpStatus' - The response's http status code.
+newProvisionByoipCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ProvisionByoipCidrResponse
+newProvisionByoipCidrResponse pHttpStatus_ =
+  ProvisionByoipCidrResponse'
+    { byoipCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address range.
+provisionByoipCidrResponse_byoipCidr :: Lens.Lens' ProvisionByoipCidrResponse (Prelude.Maybe ByoipCidr)
+provisionByoipCidrResponse_byoipCidr = Lens.lens (\ProvisionByoipCidrResponse' {byoipCidr} -> byoipCidr) (\s@ProvisionByoipCidrResponse' {} a -> s {byoipCidr = a} :: ProvisionByoipCidrResponse)
+
+-- | The response's http status code.
+provisionByoipCidrResponse_httpStatus :: Lens.Lens' ProvisionByoipCidrResponse Prelude.Int
+provisionByoipCidrResponse_httpStatus = Lens.lens (\ProvisionByoipCidrResponse' {httpStatus} -> httpStatus) (\s@ProvisionByoipCidrResponse' {} a -> s {httpStatus = a} :: ProvisionByoipCidrResponse)
+
+instance Prelude.NFData ProvisionByoipCidrResponse where
+  rnf ProvisionByoipCidrResponse' {..} =
+    Prelude.rnf byoipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ProvisionIpamPoolCidr.hs b/gen/Amazonka/EC2/ProvisionIpamPoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ProvisionIpamPoolCidr.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ProvisionIpamPoolCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provision a CIDR to an IPAM pool. You can use this action to provision
+-- new CIDRs to a top-level pool or to transfer a CIDR from a top-level
+-- pool to a pool within it.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/prov-cidr-ipam.html Provision CIDRs to pools>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.ProvisionIpamPoolCidr
+  ( -- * Creating a Request
+    ProvisionIpamPoolCidr (..),
+    newProvisionIpamPoolCidr,
+
+    -- * Request Lenses
+    provisionIpamPoolCidr_cidr,
+    provisionIpamPoolCidr_cidrAuthorizationContext,
+    provisionIpamPoolCidr_dryRun,
+    provisionIpamPoolCidr_ipamPoolId,
+
+    -- * Destructuring the Response
+    ProvisionIpamPoolCidrResponse (..),
+    newProvisionIpamPoolCidrResponse,
+
+    -- * Response Lenses
+    provisionIpamPoolCidrResponse_ipamPoolCidr,
+    provisionIpamPoolCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newProvisionIpamPoolCidr' smart constructor.
+data ProvisionIpamPoolCidr = ProvisionIpamPoolCidr'
+  { -- | The CIDR you want to assign to the IPAM pool.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | A signed document that proves that you are authorized to bring a
+    -- specified IP address range to Amazon using BYOIP. This option applies to
+    -- public pools only.
+    cidrAuthorizationContext :: Prelude.Maybe IpamCidrAuthorizationContext,
+    -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the IPAM pool to which you want to assign a CIDR.
+    ipamPoolId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionIpamPoolCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'provisionIpamPoolCidr_cidr' - The CIDR you want to assign to the IPAM pool.
+--
+-- 'cidrAuthorizationContext', 'provisionIpamPoolCidr_cidrAuthorizationContext' - A signed document that proves that you are authorized to bring a
+-- specified IP address range to Amazon using BYOIP. This option applies to
+-- public pools only.
+--
+-- 'dryRun', 'provisionIpamPoolCidr_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamPoolId', 'provisionIpamPoolCidr_ipamPoolId' - The ID of the IPAM pool to which you want to assign a CIDR.
+newProvisionIpamPoolCidr ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  ProvisionIpamPoolCidr
+newProvisionIpamPoolCidr pIpamPoolId_ =
+  ProvisionIpamPoolCidr'
+    { cidr = Prelude.Nothing,
+      cidrAuthorizationContext = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ipamPoolId = pIpamPoolId_
+    }
+
+-- | The CIDR you want to assign to the IPAM pool.
+provisionIpamPoolCidr_cidr :: Lens.Lens' ProvisionIpamPoolCidr (Prelude.Maybe Prelude.Text)
+provisionIpamPoolCidr_cidr = Lens.lens (\ProvisionIpamPoolCidr' {cidr} -> cidr) (\s@ProvisionIpamPoolCidr' {} a -> s {cidr = a} :: ProvisionIpamPoolCidr)
+
+-- | A signed document that proves that you are authorized to bring a
+-- specified IP address range to Amazon using BYOIP. This option applies to
+-- public pools only.
+provisionIpamPoolCidr_cidrAuthorizationContext :: Lens.Lens' ProvisionIpamPoolCidr (Prelude.Maybe IpamCidrAuthorizationContext)
+provisionIpamPoolCidr_cidrAuthorizationContext = Lens.lens (\ProvisionIpamPoolCidr' {cidrAuthorizationContext} -> cidrAuthorizationContext) (\s@ProvisionIpamPoolCidr' {} a -> s {cidrAuthorizationContext = a} :: ProvisionIpamPoolCidr)
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+provisionIpamPoolCidr_dryRun :: Lens.Lens' ProvisionIpamPoolCidr (Prelude.Maybe Prelude.Bool)
+provisionIpamPoolCidr_dryRun = Lens.lens (\ProvisionIpamPoolCidr' {dryRun} -> dryRun) (\s@ProvisionIpamPoolCidr' {} a -> s {dryRun = a} :: ProvisionIpamPoolCidr)
+
+-- | The ID of the IPAM pool to which you want to assign a CIDR.
+provisionIpamPoolCidr_ipamPoolId :: Lens.Lens' ProvisionIpamPoolCidr Prelude.Text
+provisionIpamPoolCidr_ipamPoolId = Lens.lens (\ProvisionIpamPoolCidr' {ipamPoolId} -> ipamPoolId) (\s@ProvisionIpamPoolCidr' {} a -> s {ipamPoolId = a} :: ProvisionIpamPoolCidr)
+
+instance Core.AWSRequest ProvisionIpamPoolCidr where
+  type
+    AWSResponse ProvisionIpamPoolCidr =
+      ProvisionIpamPoolCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ProvisionIpamPoolCidrResponse'
+            Prelude.<$> (x Data..@? "ipamPoolCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ProvisionIpamPoolCidr where
+  hashWithSalt _salt ProvisionIpamPoolCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` cidrAuthorizationContext
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamPoolId
+
+instance Prelude.NFData ProvisionIpamPoolCidr where
+  rnf ProvisionIpamPoolCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf cidrAuthorizationContext
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamPoolId
+
+instance Data.ToHeaders ProvisionIpamPoolCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ProvisionIpamPoolCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ProvisionIpamPoolCidr where
+  toQuery ProvisionIpamPoolCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ProvisionIpamPoolCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Cidr" Data.=: cidr,
+        "CidrAuthorizationContext"
+          Data.=: cidrAuthorizationContext,
+        "DryRun" Data.=: dryRun,
+        "IpamPoolId" Data.=: ipamPoolId
+      ]
+
+-- | /See:/ 'newProvisionIpamPoolCidrResponse' smart constructor.
+data ProvisionIpamPoolCidrResponse = ProvisionIpamPoolCidrResponse'
+  { -- | Information about the provisioned CIDR.
+    ipamPoolCidr :: Prelude.Maybe IpamPoolCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionIpamPoolCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipamPoolCidr', 'provisionIpamPoolCidrResponse_ipamPoolCidr' - Information about the provisioned CIDR.
+--
+-- 'httpStatus', 'provisionIpamPoolCidrResponse_httpStatus' - The response's http status code.
+newProvisionIpamPoolCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ProvisionIpamPoolCidrResponse
+newProvisionIpamPoolCidrResponse pHttpStatus_ =
+  ProvisionIpamPoolCidrResponse'
+    { ipamPoolCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the provisioned CIDR.
+provisionIpamPoolCidrResponse_ipamPoolCidr :: Lens.Lens' ProvisionIpamPoolCidrResponse (Prelude.Maybe IpamPoolCidr)
+provisionIpamPoolCidrResponse_ipamPoolCidr = Lens.lens (\ProvisionIpamPoolCidrResponse' {ipamPoolCidr} -> ipamPoolCidr) (\s@ProvisionIpamPoolCidrResponse' {} a -> s {ipamPoolCidr = a} :: ProvisionIpamPoolCidrResponse)
+
+-- | The response's http status code.
+provisionIpamPoolCidrResponse_httpStatus :: Lens.Lens' ProvisionIpamPoolCidrResponse Prelude.Int
+provisionIpamPoolCidrResponse_httpStatus = Lens.lens (\ProvisionIpamPoolCidrResponse' {httpStatus} -> httpStatus) (\s@ProvisionIpamPoolCidrResponse' {} a -> s {httpStatus = a} :: ProvisionIpamPoolCidrResponse)
+
+instance Prelude.NFData ProvisionIpamPoolCidrResponse where
+  rnf ProvisionIpamPoolCidrResponse' {..} =
+    Prelude.rnf ipamPoolCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ProvisionPublicIpv4PoolCidr.hs b/gen/Amazonka/EC2/ProvisionPublicIpv4PoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ProvisionPublicIpv4PoolCidr.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ProvisionPublicIpv4PoolCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provision a CIDR to a public IPv4 pool.
+--
+-- For more information about IPAM, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.ProvisionPublicIpv4PoolCidr
+  ( -- * Creating a Request
+    ProvisionPublicIpv4PoolCidr (..),
+    newProvisionPublicIpv4PoolCidr,
+
+    -- * Request Lenses
+    provisionPublicIpv4PoolCidr_dryRun,
+    provisionPublicIpv4PoolCidr_ipamPoolId,
+    provisionPublicIpv4PoolCidr_poolId,
+    provisionPublicIpv4PoolCidr_netmaskLength,
+
+    -- * Destructuring the Response
+    ProvisionPublicIpv4PoolCidrResponse (..),
+    newProvisionPublicIpv4PoolCidrResponse,
+
+    -- * Response Lenses
+    provisionPublicIpv4PoolCidrResponse_poolAddressRange,
+    provisionPublicIpv4PoolCidrResponse_poolId,
+    provisionPublicIpv4PoolCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newProvisionPublicIpv4PoolCidr' smart constructor.
+data ProvisionPublicIpv4PoolCidr = ProvisionPublicIpv4PoolCidr'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the IPAM pool you would like to use to allocate this CIDR.
+    ipamPoolId :: Prelude.Text,
+    -- | The ID of the public IPv4 pool you would like to use for this CIDR.
+    poolId :: Prelude.Text,
+    -- | The netmask length of the CIDR you would like to allocate to the public
+    -- IPv4 pool.
+    netmaskLength :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionPublicIpv4PoolCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'provisionPublicIpv4PoolCidr_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamPoolId', 'provisionPublicIpv4PoolCidr_ipamPoolId' - The ID of the IPAM pool you would like to use to allocate this CIDR.
+--
+-- 'poolId', 'provisionPublicIpv4PoolCidr_poolId' - The ID of the public IPv4 pool you would like to use for this CIDR.
+--
+-- 'netmaskLength', 'provisionPublicIpv4PoolCidr_netmaskLength' - The netmask length of the CIDR you would like to allocate to the public
+-- IPv4 pool.
+newProvisionPublicIpv4PoolCidr ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  -- | 'poolId'
+  Prelude.Text ->
+  -- | 'netmaskLength'
+  Prelude.Int ->
+  ProvisionPublicIpv4PoolCidr
+newProvisionPublicIpv4PoolCidr
+  pIpamPoolId_
+  pPoolId_
+  pNetmaskLength_ =
+    ProvisionPublicIpv4PoolCidr'
+      { dryRun =
+          Prelude.Nothing,
+        ipamPoolId = pIpamPoolId_,
+        poolId = pPoolId_,
+        netmaskLength = pNetmaskLength_
+      }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+provisionPublicIpv4PoolCidr_dryRun :: Lens.Lens' ProvisionPublicIpv4PoolCidr (Prelude.Maybe Prelude.Bool)
+provisionPublicIpv4PoolCidr_dryRun = Lens.lens (\ProvisionPublicIpv4PoolCidr' {dryRun} -> dryRun) (\s@ProvisionPublicIpv4PoolCidr' {} a -> s {dryRun = a} :: ProvisionPublicIpv4PoolCidr)
+
+-- | The ID of the IPAM pool you would like to use to allocate this CIDR.
+provisionPublicIpv4PoolCidr_ipamPoolId :: Lens.Lens' ProvisionPublicIpv4PoolCidr Prelude.Text
+provisionPublicIpv4PoolCidr_ipamPoolId = Lens.lens (\ProvisionPublicIpv4PoolCidr' {ipamPoolId} -> ipamPoolId) (\s@ProvisionPublicIpv4PoolCidr' {} a -> s {ipamPoolId = a} :: ProvisionPublicIpv4PoolCidr)
+
+-- | The ID of the public IPv4 pool you would like to use for this CIDR.
+provisionPublicIpv4PoolCidr_poolId :: Lens.Lens' ProvisionPublicIpv4PoolCidr Prelude.Text
+provisionPublicIpv4PoolCidr_poolId = Lens.lens (\ProvisionPublicIpv4PoolCidr' {poolId} -> poolId) (\s@ProvisionPublicIpv4PoolCidr' {} a -> s {poolId = a} :: ProvisionPublicIpv4PoolCidr)
+
+-- | The netmask length of the CIDR you would like to allocate to the public
+-- IPv4 pool.
+provisionPublicIpv4PoolCidr_netmaskLength :: Lens.Lens' ProvisionPublicIpv4PoolCidr Prelude.Int
+provisionPublicIpv4PoolCidr_netmaskLength = Lens.lens (\ProvisionPublicIpv4PoolCidr' {netmaskLength} -> netmaskLength) (\s@ProvisionPublicIpv4PoolCidr' {} a -> s {netmaskLength = a} :: ProvisionPublicIpv4PoolCidr)
+
+instance Core.AWSRequest ProvisionPublicIpv4PoolCidr where
+  type
+    AWSResponse ProvisionPublicIpv4PoolCidr =
+      ProvisionPublicIpv4PoolCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ProvisionPublicIpv4PoolCidrResponse'
+            Prelude.<$> (x Data..@? "poolAddressRange")
+            Prelude.<*> (x Data..@? "poolId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ProvisionPublicIpv4PoolCidr where
+  hashWithSalt _salt ProvisionPublicIpv4PoolCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamPoolId
+      `Prelude.hashWithSalt` poolId
+      `Prelude.hashWithSalt` netmaskLength
+
+instance Prelude.NFData ProvisionPublicIpv4PoolCidr where
+  rnf ProvisionPublicIpv4PoolCidr' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamPoolId
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf netmaskLength
+
+instance Data.ToHeaders ProvisionPublicIpv4PoolCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ProvisionPublicIpv4PoolCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ProvisionPublicIpv4PoolCidr where
+  toQuery ProvisionPublicIpv4PoolCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ProvisionPublicIpv4PoolCidr" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "IpamPoolId" Data.=: ipamPoolId,
+        "PoolId" Data.=: poolId,
+        "NetmaskLength" Data.=: netmaskLength
+      ]
+
+-- | /See:/ 'newProvisionPublicIpv4PoolCidrResponse' smart constructor.
+data ProvisionPublicIpv4PoolCidrResponse = ProvisionPublicIpv4PoolCidrResponse'
+  { -- | Information about the address range of the public IPv4 pool.
+    poolAddressRange :: Prelude.Maybe PublicIpv4PoolRange,
+    -- | The ID of the pool that you want to provision the CIDR to.
+    poolId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionPublicIpv4PoolCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'poolAddressRange', 'provisionPublicIpv4PoolCidrResponse_poolAddressRange' - Information about the address range of the public IPv4 pool.
+--
+-- 'poolId', 'provisionPublicIpv4PoolCidrResponse_poolId' - The ID of the pool that you want to provision the CIDR to.
+--
+-- 'httpStatus', 'provisionPublicIpv4PoolCidrResponse_httpStatus' - The response's http status code.
+newProvisionPublicIpv4PoolCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ProvisionPublicIpv4PoolCidrResponse
+newProvisionPublicIpv4PoolCidrResponse pHttpStatus_ =
+  ProvisionPublicIpv4PoolCidrResponse'
+    { poolAddressRange =
+        Prelude.Nothing,
+      poolId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address range of the public IPv4 pool.
+provisionPublicIpv4PoolCidrResponse_poolAddressRange :: Lens.Lens' ProvisionPublicIpv4PoolCidrResponse (Prelude.Maybe PublicIpv4PoolRange)
+provisionPublicIpv4PoolCidrResponse_poolAddressRange = Lens.lens (\ProvisionPublicIpv4PoolCidrResponse' {poolAddressRange} -> poolAddressRange) (\s@ProvisionPublicIpv4PoolCidrResponse' {} a -> s {poolAddressRange = a} :: ProvisionPublicIpv4PoolCidrResponse)
+
+-- | The ID of the pool that you want to provision the CIDR to.
+provisionPublicIpv4PoolCidrResponse_poolId :: Lens.Lens' ProvisionPublicIpv4PoolCidrResponse (Prelude.Maybe Prelude.Text)
+provisionPublicIpv4PoolCidrResponse_poolId = Lens.lens (\ProvisionPublicIpv4PoolCidrResponse' {poolId} -> poolId) (\s@ProvisionPublicIpv4PoolCidrResponse' {} a -> s {poolId = a} :: ProvisionPublicIpv4PoolCidrResponse)
+
+-- | The response's http status code.
+provisionPublicIpv4PoolCidrResponse_httpStatus :: Lens.Lens' ProvisionPublicIpv4PoolCidrResponse Prelude.Int
+provisionPublicIpv4PoolCidrResponse_httpStatus = Lens.lens (\ProvisionPublicIpv4PoolCidrResponse' {httpStatus} -> httpStatus) (\s@ProvisionPublicIpv4PoolCidrResponse' {} a -> s {httpStatus = a} :: ProvisionPublicIpv4PoolCidrResponse)
+
+instance
+  Prelude.NFData
+    ProvisionPublicIpv4PoolCidrResponse
+  where
+  rnf ProvisionPublicIpv4PoolCidrResponse' {..} =
+    Prelude.rnf poolAddressRange
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/PurchaseHostReservation.hs b/gen/Amazonka/EC2/PurchaseHostReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/PurchaseHostReservation.hs
@@ -0,0 +1,335 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.PurchaseHostReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Purchase a reservation with configurations that match those of your
+-- Dedicated Host. You must have active Dedicated Hosts in your account
+-- before you purchase a reservation. This action results in the specified
+-- reservation being purchased and charged to your account.
+module Amazonka.EC2.PurchaseHostReservation
+  ( -- * Creating a Request
+    PurchaseHostReservation (..),
+    newPurchaseHostReservation,
+
+    -- * Request Lenses
+    purchaseHostReservation_clientToken,
+    purchaseHostReservation_currencyCode,
+    purchaseHostReservation_limitPrice,
+    purchaseHostReservation_tagSpecifications,
+    purchaseHostReservation_hostIdSet,
+    purchaseHostReservation_offeringId,
+
+    -- * Destructuring the Response
+    PurchaseHostReservationResponse (..),
+    newPurchaseHostReservationResponse,
+
+    -- * Response Lenses
+    purchaseHostReservationResponse_clientToken,
+    purchaseHostReservationResponse_currencyCode,
+    purchaseHostReservationResponse_purchase,
+    purchaseHostReservationResponse_totalHourlyPrice,
+    purchaseHostReservationResponse_totalUpfrontPrice,
+    purchaseHostReservationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPurchaseHostReservation' smart constructor.
+data PurchaseHostReservation = PurchaseHostReservation'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The currency in which the @totalUpfrontPrice@, @LimitPrice@, and
+    -- @totalHourlyPrice@ amounts are specified. At this time, the only
+    -- supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The specified limit is checked against the total upfront cost of the
+    -- reservation (calculated as the offering\'s upfront cost multiplied by
+    -- the host count). If the total upfront cost is greater than the specified
+    -- price limit, the request fails. This is used to ensure that the purchase
+    -- does not exceed the expected upfront cost of the purchase. At this time,
+    -- the only supported currency is @USD@. For example, to indicate a limit
+    -- price of USD 100, specify 100.00.
+    limitPrice :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the Dedicated Host Reservation during purchase.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The IDs of the Dedicated Hosts with which the reservation will be
+    -- associated.
+    hostIdSet :: [Prelude.Text],
+    -- | The ID of the offering.
+    offeringId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseHostReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'purchaseHostReservation_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'currencyCode', 'purchaseHostReservation_currencyCode' - The currency in which the @totalUpfrontPrice@, @LimitPrice@, and
+-- @totalHourlyPrice@ amounts are specified. At this time, the only
+-- supported currency is @USD@.
+--
+-- 'limitPrice', 'purchaseHostReservation_limitPrice' - The specified limit is checked against the total upfront cost of the
+-- reservation (calculated as the offering\'s upfront cost multiplied by
+-- the host count). If the total upfront cost is greater than the specified
+-- price limit, the request fails. This is used to ensure that the purchase
+-- does not exceed the expected upfront cost of the purchase. At this time,
+-- the only supported currency is @USD@. For example, to indicate a limit
+-- price of USD 100, specify 100.00.
+--
+-- 'tagSpecifications', 'purchaseHostReservation_tagSpecifications' - The tags to apply to the Dedicated Host Reservation during purchase.
+--
+-- 'hostIdSet', 'purchaseHostReservation_hostIdSet' - The IDs of the Dedicated Hosts with which the reservation will be
+-- associated.
+--
+-- 'offeringId', 'purchaseHostReservation_offeringId' - The ID of the offering.
+newPurchaseHostReservation ::
+  -- | 'offeringId'
+  Prelude.Text ->
+  PurchaseHostReservation
+newPurchaseHostReservation pOfferingId_ =
+  PurchaseHostReservation'
+    { clientToken =
+        Prelude.Nothing,
+      currencyCode = Prelude.Nothing,
+      limitPrice = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      hostIdSet = Prelude.mempty,
+      offeringId = pOfferingId_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+purchaseHostReservation_clientToken :: Lens.Lens' PurchaseHostReservation (Prelude.Maybe Prelude.Text)
+purchaseHostReservation_clientToken = Lens.lens (\PurchaseHostReservation' {clientToken} -> clientToken) (\s@PurchaseHostReservation' {} a -> s {clientToken = a} :: PurchaseHostReservation)
+
+-- | The currency in which the @totalUpfrontPrice@, @LimitPrice@, and
+-- @totalHourlyPrice@ amounts are specified. At this time, the only
+-- supported currency is @USD@.
+purchaseHostReservation_currencyCode :: Lens.Lens' PurchaseHostReservation (Prelude.Maybe CurrencyCodeValues)
+purchaseHostReservation_currencyCode = Lens.lens (\PurchaseHostReservation' {currencyCode} -> currencyCode) (\s@PurchaseHostReservation' {} a -> s {currencyCode = a} :: PurchaseHostReservation)
+
+-- | The specified limit is checked against the total upfront cost of the
+-- reservation (calculated as the offering\'s upfront cost multiplied by
+-- the host count). If the total upfront cost is greater than the specified
+-- price limit, the request fails. This is used to ensure that the purchase
+-- does not exceed the expected upfront cost of the purchase. At this time,
+-- the only supported currency is @USD@. For example, to indicate a limit
+-- price of USD 100, specify 100.00.
+purchaseHostReservation_limitPrice :: Lens.Lens' PurchaseHostReservation (Prelude.Maybe Prelude.Text)
+purchaseHostReservation_limitPrice = Lens.lens (\PurchaseHostReservation' {limitPrice} -> limitPrice) (\s@PurchaseHostReservation' {} a -> s {limitPrice = a} :: PurchaseHostReservation)
+
+-- | The tags to apply to the Dedicated Host Reservation during purchase.
+purchaseHostReservation_tagSpecifications :: Lens.Lens' PurchaseHostReservation (Prelude.Maybe [TagSpecification])
+purchaseHostReservation_tagSpecifications = Lens.lens (\PurchaseHostReservation' {tagSpecifications} -> tagSpecifications) (\s@PurchaseHostReservation' {} a -> s {tagSpecifications = a} :: PurchaseHostReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Dedicated Hosts with which the reservation will be
+-- associated.
+purchaseHostReservation_hostIdSet :: Lens.Lens' PurchaseHostReservation [Prelude.Text]
+purchaseHostReservation_hostIdSet = Lens.lens (\PurchaseHostReservation' {hostIdSet} -> hostIdSet) (\s@PurchaseHostReservation' {} a -> s {hostIdSet = a} :: PurchaseHostReservation) Prelude.. Lens.coerced
+
+-- | The ID of the offering.
+purchaseHostReservation_offeringId :: Lens.Lens' PurchaseHostReservation Prelude.Text
+purchaseHostReservation_offeringId = Lens.lens (\PurchaseHostReservation' {offeringId} -> offeringId) (\s@PurchaseHostReservation' {} a -> s {offeringId = a} :: PurchaseHostReservation)
+
+instance Core.AWSRequest PurchaseHostReservation where
+  type
+    AWSResponse PurchaseHostReservation =
+      PurchaseHostReservationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          PurchaseHostReservationResponse'
+            Prelude.<$> (x Data..@? "clientToken")
+            Prelude.<*> (x Data..@? "currencyCode")
+            Prelude.<*> ( x
+                            Data..@? "purchase"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "totalHourlyPrice")
+            Prelude.<*> (x Data..@? "totalUpfrontPrice")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PurchaseHostReservation where
+  hashWithSalt _salt PurchaseHostReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` limitPrice
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` hostIdSet
+      `Prelude.hashWithSalt` offeringId
+
+instance Prelude.NFData PurchaseHostReservation where
+  rnf PurchaseHostReservation' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf limitPrice
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf hostIdSet
+      `Prelude.seq` Prelude.rnf offeringId
+
+instance Data.ToHeaders PurchaseHostReservation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath PurchaseHostReservation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PurchaseHostReservation where
+  toQuery PurchaseHostReservation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("PurchaseHostReservation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "CurrencyCode" Data.=: currencyCode,
+        "LimitPrice" Data.=: limitPrice,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        Data.toQueryList "HostIdSet" hostIdSet,
+        "OfferingId" Data.=: offeringId
+      ]
+
+-- | /See:/ 'newPurchaseHostReservationResponse' smart constructor.
+data PurchaseHostReservationResponse = PurchaseHostReservationResponse'
+  { -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@
+    -- amounts are specified. At this time, the only supported currency is
+    -- @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | Describes the details of the purchase.
+    purchase :: Prelude.Maybe [Purchase],
+    -- | The total hourly price of the reservation calculated per hour.
+    totalHourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The total amount charged to your account when you purchase the
+    -- reservation.
+    totalUpfrontPrice :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseHostReservationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'purchaseHostReservationResponse_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'currencyCode', 'purchaseHostReservationResponse_currencyCode' - The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@
+-- amounts are specified. At this time, the only supported currency is
+-- @USD@.
+--
+-- 'purchase', 'purchaseHostReservationResponse_purchase' - Describes the details of the purchase.
+--
+-- 'totalHourlyPrice', 'purchaseHostReservationResponse_totalHourlyPrice' - The total hourly price of the reservation calculated per hour.
+--
+-- 'totalUpfrontPrice', 'purchaseHostReservationResponse_totalUpfrontPrice' - The total amount charged to your account when you purchase the
+-- reservation.
+--
+-- 'httpStatus', 'purchaseHostReservationResponse_httpStatus' - The response's http status code.
+newPurchaseHostReservationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PurchaseHostReservationResponse
+newPurchaseHostReservationResponse pHttpStatus_ =
+  PurchaseHostReservationResponse'
+    { clientToken =
+        Prelude.Nothing,
+      currencyCode = Prelude.Nothing,
+      purchase = Prelude.Nothing,
+      totalHourlyPrice = Prelude.Nothing,
+      totalUpfrontPrice = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+purchaseHostReservationResponse_clientToken :: Lens.Lens' PurchaseHostReservationResponse (Prelude.Maybe Prelude.Text)
+purchaseHostReservationResponse_clientToken = Lens.lens (\PurchaseHostReservationResponse' {clientToken} -> clientToken) (\s@PurchaseHostReservationResponse' {} a -> s {clientToken = a} :: PurchaseHostReservationResponse)
+
+-- | The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@
+-- amounts are specified. At this time, the only supported currency is
+-- @USD@.
+purchaseHostReservationResponse_currencyCode :: Lens.Lens' PurchaseHostReservationResponse (Prelude.Maybe CurrencyCodeValues)
+purchaseHostReservationResponse_currencyCode = Lens.lens (\PurchaseHostReservationResponse' {currencyCode} -> currencyCode) (\s@PurchaseHostReservationResponse' {} a -> s {currencyCode = a} :: PurchaseHostReservationResponse)
+
+-- | Describes the details of the purchase.
+purchaseHostReservationResponse_purchase :: Lens.Lens' PurchaseHostReservationResponse (Prelude.Maybe [Purchase])
+purchaseHostReservationResponse_purchase = Lens.lens (\PurchaseHostReservationResponse' {purchase} -> purchase) (\s@PurchaseHostReservationResponse' {} a -> s {purchase = a} :: PurchaseHostReservationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total hourly price of the reservation calculated per hour.
+purchaseHostReservationResponse_totalHourlyPrice :: Lens.Lens' PurchaseHostReservationResponse (Prelude.Maybe Prelude.Text)
+purchaseHostReservationResponse_totalHourlyPrice = Lens.lens (\PurchaseHostReservationResponse' {totalHourlyPrice} -> totalHourlyPrice) (\s@PurchaseHostReservationResponse' {} a -> s {totalHourlyPrice = a} :: PurchaseHostReservationResponse)
+
+-- | The total amount charged to your account when you purchase the
+-- reservation.
+purchaseHostReservationResponse_totalUpfrontPrice :: Lens.Lens' PurchaseHostReservationResponse (Prelude.Maybe Prelude.Text)
+purchaseHostReservationResponse_totalUpfrontPrice = Lens.lens (\PurchaseHostReservationResponse' {totalUpfrontPrice} -> totalUpfrontPrice) (\s@PurchaseHostReservationResponse' {} a -> s {totalUpfrontPrice = a} :: PurchaseHostReservationResponse)
+
+-- | The response's http status code.
+purchaseHostReservationResponse_httpStatus :: Lens.Lens' PurchaseHostReservationResponse Prelude.Int
+purchaseHostReservationResponse_httpStatus = Lens.lens (\PurchaseHostReservationResponse' {httpStatus} -> httpStatus) (\s@PurchaseHostReservationResponse' {} a -> s {httpStatus = a} :: PurchaseHostReservationResponse)
+
+instance
+  Prelude.NFData
+    PurchaseHostReservationResponse
+  where
+  rnf PurchaseHostReservationResponse' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf purchase
+      `Prelude.seq` Prelude.rnf totalHourlyPrice
+      `Prelude.seq` Prelude.rnf totalUpfrontPrice
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/PurchaseReservedInstancesOffering.hs b/gen/Amazonka/EC2/PurchaseReservedInstancesOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/PurchaseReservedInstancesOffering.hs
@@ -0,0 +1,300 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.PurchaseReservedInstancesOffering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Purchases a Reserved Instance for use with your account. With Reserved
+-- Instances, you pay a lower hourly rate compared to On-Demand instance
+-- pricing.
+--
+-- Use DescribeReservedInstancesOfferings to get a list of Reserved
+-- Instance offerings that match your specifications. After you\'ve
+-- purchased a Reserved Instance, you can check for your new Reserved
+-- Instance with DescribeReservedInstances.
+--
+-- To queue a purchase for a future date and time, specify a purchase time.
+-- If you do not specify a purchase time, the default is the current time.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
+-- in the /Amazon EC2 User Guide/.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.PurchaseReservedInstancesOffering
+  ( -- * Creating a Request
+    PurchaseReservedInstancesOffering (..),
+    newPurchaseReservedInstancesOffering,
+
+    -- * Request Lenses
+    purchaseReservedInstancesOffering_dryRun,
+    purchaseReservedInstancesOffering_limitPrice,
+    purchaseReservedInstancesOffering_purchaseTime,
+    purchaseReservedInstancesOffering_instanceCount,
+    purchaseReservedInstancesOffering_reservedInstancesOfferingId,
+
+    -- * Destructuring the Response
+    PurchaseReservedInstancesOfferingResponse (..),
+    newPurchaseReservedInstancesOfferingResponse,
+
+    -- * Response Lenses
+    purchaseReservedInstancesOfferingResponse_reservedInstancesId,
+    purchaseReservedInstancesOfferingResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for PurchaseReservedInstancesOffering.
+--
+-- /See:/ 'newPurchaseReservedInstancesOffering' smart constructor.
+data PurchaseReservedInstancesOffering = PurchaseReservedInstancesOffering'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Specified for Reserved Instance Marketplace offerings to limit the total
+    -- order and ensure that the Reserved Instances are not purchased at
+    -- unexpected prices.
+    limitPrice :: Prelude.Maybe ReservedInstanceLimitPrice,
+    -- | The time at which to purchase the Reserved Instance, in UTC format (for
+    -- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    purchaseTime :: Prelude.Maybe Data.ISO8601,
+    -- | The number of Reserved Instances to purchase.
+    instanceCount :: Prelude.Int,
+    -- | The ID of the Reserved Instance offering to purchase.
+    reservedInstancesOfferingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseReservedInstancesOffering' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'purchaseReservedInstancesOffering_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'limitPrice', 'purchaseReservedInstancesOffering_limitPrice' - Specified for Reserved Instance Marketplace offerings to limit the total
+-- order and ensure that the Reserved Instances are not purchased at
+-- unexpected prices.
+--
+-- 'purchaseTime', 'purchaseReservedInstancesOffering_purchaseTime' - The time at which to purchase the Reserved Instance, in UTC format (for
+-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- 'instanceCount', 'purchaseReservedInstancesOffering_instanceCount' - The number of Reserved Instances to purchase.
+--
+-- 'reservedInstancesOfferingId', 'purchaseReservedInstancesOffering_reservedInstancesOfferingId' - The ID of the Reserved Instance offering to purchase.
+newPurchaseReservedInstancesOffering ::
+  -- | 'instanceCount'
+  Prelude.Int ->
+  -- | 'reservedInstancesOfferingId'
+  Prelude.Text ->
+  PurchaseReservedInstancesOffering
+newPurchaseReservedInstancesOffering
+  pInstanceCount_
+  pReservedInstancesOfferingId_ =
+    PurchaseReservedInstancesOffering'
+      { dryRun =
+          Prelude.Nothing,
+        limitPrice = Prelude.Nothing,
+        purchaseTime = Prelude.Nothing,
+        instanceCount = pInstanceCount_,
+        reservedInstancesOfferingId =
+          pReservedInstancesOfferingId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+purchaseReservedInstancesOffering_dryRun :: Lens.Lens' PurchaseReservedInstancesOffering (Prelude.Maybe Prelude.Bool)
+purchaseReservedInstancesOffering_dryRun = Lens.lens (\PurchaseReservedInstancesOffering' {dryRun} -> dryRun) (\s@PurchaseReservedInstancesOffering' {} a -> s {dryRun = a} :: PurchaseReservedInstancesOffering)
+
+-- | Specified for Reserved Instance Marketplace offerings to limit the total
+-- order and ensure that the Reserved Instances are not purchased at
+-- unexpected prices.
+purchaseReservedInstancesOffering_limitPrice :: Lens.Lens' PurchaseReservedInstancesOffering (Prelude.Maybe ReservedInstanceLimitPrice)
+purchaseReservedInstancesOffering_limitPrice = Lens.lens (\PurchaseReservedInstancesOffering' {limitPrice} -> limitPrice) (\s@PurchaseReservedInstancesOffering' {} a -> s {limitPrice = a} :: PurchaseReservedInstancesOffering)
+
+-- | The time at which to purchase the Reserved Instance, in UTC format (for
+-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+purchaseReservedInstancesOffering_purchaseTime :: Lens.Lens' PurchaseReservedInstancesOffering (Prelude.Maybe Prelude.UTCTime)
+purchaseReservedInstancesOffering_purchaseTime = Lens.lens (\PurchaseReservedInstancesOffering' {purchaseTime} -> purchaseTime) (\s@PurchaseReservedInstancesOffering' {} a -> s {purchaseTime = a} :: PurchaseReservedInstancesOffering) Prelude.. Lens.mapping Data._Time
+
+-- | The number of Reserved Instances to purchase.
+purchaseReservedInstancesOffering_instanceCount :: Lens.Lens' PurchaseReservedInstancesOffering Prelude.Int
+purchaseReservedInstancesOffering_instanceCount = Lens.lens (\PurchaseReservedInstancesOffering' {instanceCount} -> instanceCount) (\s@PurchaseReservedInstancesOffering' {} a -> s {instanceCount = a} :: PurchaseReservedInstancesOffering)
+
+-- | The ID of the Reserved Instance offering to purchase.
+purchaseReservedInstancesOffering_reservedInstancesOfferingId :: Lens.Lens' PurchaseReservedInstancesOffering Prelude.Text
+purchaseReservedInstancesOffering_reservedInstancesOfferingId = Lens.lens (\PurchaseReservedInstancesOffering' {reservedInstancesOfferingId} -> reservedInstancesOfferingId) (\s@PurchaseReservedInstancesOffering' {} a -> s {reservedInstancesOfferingId = a} :: PurchaseReservedInstancesOffering)
+
+instance
+  Core.AWSRequest
+    PurchaseReservedInstancesOffering
+  where
+  type
+    AWSResponse PurchaseReservedInstancesOffering =
+      PurchaseReservedInstancesOfferingResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          PurchaseReservedInstancesOfferingResponse'
+            Prelude.<$> (x Data..@? "reservedInstancesId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PurchaseReservedInstancesOffering
+  where
+  hashWithSalt
+    _salt
+    PurchaseReservedInstancesOffering' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` limitPrice
+        `Prelude.hashWithSalt` purchaseTime
+        `Prelude.hashWithSalt` instanceCount
+        `Prelude.hashWithSalt` reservedInstancesOfferingId
+
+instance
+  Prelude.NFData
+    PurchaseReservedInstancesOffering
+  where
+  rnf PurchaseReservedInstancesOffering' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf limitPrice
+      `Prelude.seq` Prelude.rnf purchaseTime
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf reservedInstancesOfferingId
+
+instance
+  Data.ToHeaders
+    PurchaseReservedInstancesOffering
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    PurchaseReservedInstancesOffering
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    PurchaseReservedInstancesOffering
+  where
+  toQuery PurchaseReservedInstancesOffering' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "PurchaseReservedInstancesOffering" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "LimitPrice" Data.=: limitPrice,
+        "PurchaseTime" Data.=: purchaseTime,
+        "InstanceCount" Data.=: instanceCount,
+        "ReservedInstancesOfferingId"
+          Data.=: reservedInstancesOfferingId
+      ]
+
+-- | Contains the output of PurchaseReservedInstancesOffering.
+--
+-- /See:/ 'newPurchaseReservedInstancesOfferingResponse' smart constructor.
+data PurchaseReservedInstancesOfferingResponse = PurchaseReservedInstancesOfferingResponse'
+  { -- | The IDs of the purchased Reserved Instances. If your purchase crosses
+    -- into a discounted pricing tier, the final Reserved Instances IDs might
+    -- change. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers Crossing pricing tiers>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseReservedInstancesOfferingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesId', 'purchaseReservedInstancesOfferingResponse_reservedInstancesId' - The IDs of the purchased Reserved Instances. If your purchase crosses
+-- into a discounted pricing tier, the final Reserved Instances IDs might
+-- change. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers Crossing pricing tiers>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'httpStatus', 'purchaseReservedInstancesOfferingResponse_httpStatus' - The response's http status code.
+newPurchaseReservedInstancesOfferingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PurchaseReservedInstancesOfferingResponse
+newPurchaseReservedInstancesOfferingResponse
+  pHttpStatus_ =
+    PurchaseReservedInstancesOfferingResponse'
+      { reservedInstancesId =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The IDs of the purchased Reserved Instances. If your purchase crosses
+-- into a discounted pricing tier, the final Reserved Instances IDs might
+-- change. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-reserved-instances-application.html#crossing-pricing-tiers Crossing pricing tiers>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+purchaseReservedInstancesOfferingResponse_reservedInstancesId :: Lens.Lens' PurchaseReservedInstancesOfferingResponse (Prelude.Maybe Prelude.Text)
+purchaseReservedInstancesOfferingResponse_reservedInstancesId = Lens.lens (\PurchaseReservedInstancesOfferingResponse' {reservedInstancesId} -> reservedInstancesId) (\s@PurchaseReservedInstancesOfferingResponse' {} a -> s {reservedInstancesId = a} :: PurchaseReservedInstancesOfferingResponse)
+
+-- | The response's http status code.
+purchaseReservedInstancesOfferingResponse_httpStatus :: Lens.Lens' PurchaseReservedInstancesOfferingResponse Prelude.Int
+purchaseReservedInstancesOfferingResponse_httpStatus = Lens.lens (\PurchaseReservedInstancesOfferingResponse' {httpStatus} -> httpStatus) (\s@PurchaseReservedInstancesOfferingResponse' {} a -> s {httpStatus = a} :: PurchaseReservedInstancesOfferingResponse)
+
+instance
+  Prelude.NFData
+    PurchaseReservedInstancesOfferingResponse
+  where
+  rnf PurchaseReservedInstancesOfferingResponse' {..} =
+    Prelude.rnf reservedInstancesId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/PurchaseScheduledInstances.hs b/gen/Amazonka/EC2/PurchaseScheduledInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/PurchaseScheduledInstances.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.PurchaseScheduledInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- You can no longer purchase Scheduled Instances.
+--
+-- Purchases the Scheduled Instances with the specified schedule.
+--
+-- Scheduled Instances enable you to purchase Amazon EC2 compute capacity
+-- by the hour for a one-year term. Before you can purchase a Scheduled
+-- Instance, you must call DescribeScheduledInstanceAvailability to check
+-- for available schedules and obtain a purchase token. After you purchase
+-- a Scheduled Instance, you must call RunScheduledInstances during each
+-- scheduled time period.
+--
+-- After you purchase a Scheduled Instance, you can\'t cancel, modify, or
+-- resell your purchase.
+module Amazonka.EC2.PurchaseScheduledInstances
+  ( -- * Creating a Request
+    PurchaseScheduledInstances (..),
+    newPurchaseScheduledInstances,
+
+    -- * Request Lenses
+    purchaseScheduledInstances_clientToken,
+    purchaseScheduledInstances_dryRun,
+    purchaseScheduledInstances_purchaseRequests,
+
+    -- * Destructuring the Response
+    PurchaseScheduledInstancesResponse (..),
+    newPurchaseScheduledInstancesResponse,
+
+    -- * Response Lenses
+    purchaseScheduledInstancesResponse_scheduledInstanceSet,
+    purchaseScheduledInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for PurchaseScheduledInstances.
+--
+-- /See:/ 'newPurchaseScheduledInstances' smart constructor.
+data PurchaseScheduledInstances = PurchaseScheduledInstances'
+  { -- | Unique, case-sensitive identifier that ensures the idempotency of the
+    -- request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The purchase requests.
+    purchaseRequests :: Prelude.NonEmpty PurchaseRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseScheduledInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'purchaseScheduledInstances_clientToken' - Unique, case-sensitive identifier that ensures the idempotency of the
+-- request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'purchaseScheduledInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'purchaseRequests', 'purchaseScheduledInstances_purchaseRequests' - The purchase requests.
+newPurchaseScheduledInstances ::
+  -- | 'purchaseRequests'
+  Prelude.NonEmpty PurchaseRequest ->
+  PurchaseScheduledInstances
+newPurchaseScheduledInstances pPurchaseRequests_ =
+  PurchaseScheduledInstances'
+    { clientToken =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      purchaseRequests =
+        Lens.coerced Lens.# pPurchaseRequests_
+    }
+
+-- | Unique, case-sensitive identifier that ensures the idempotency of the
+-- request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+purchaseScheduledInstances_clientToken :: Lens.Lens' PurchaseScheduledInstances (Prelude.Maybe Prelude.Text)
+purchaseScheduledInstances_clientToken = Lens.lens (\PurchaseScheduledInstances' {clientToken} -> clientToken) (\s@PurchaseScheduledInstances' {} a -> s {clientToken = a} :: PurchaseScheduledInstances)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+purchaseScheduledInstances_dryRun :: Lens.Lens' PurchaseScheduledInstances (Prelude.Maybe Prelude.Bool)
+purchaseScheduledInstances_dryRun = Lens.lens (\PurchaseScheduledInstances' {dryRun} -> dryRun) (\s@PurchaseScheduledInstances' {} a -> s {dryRun = a} :: PurchaseScheduledInstances)
+
+-- | The purchase requests.
+purchaseScheduledInstances_purchaseRequests :: Lens.Lens' PurchaseScheduledInstances (Prelude.NonEmpty PurchaseRequest)
+purchaseScheduledInstances_purchaseRequests = Lens.lens (\PurchaseScheduledInstances' {purchaseRequests} -> purchaseRequests) (\s@PurchaseScheduledInstances' {} a -> s {purchaseRequests = a} :: PurchaseScheduledInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest PurchaseScheduledInstances where
+  type
+    AWSResponse PurchaseScheduledInstances =
+      PurchaseScheduledInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          PurchaseScheduledInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "scheduledInstanceSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PurchaseScheduledInstances where
+  hashWithSalt _salt PurchaseScheduledInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` purchaseRequests
+
+instance Prelude.NFData PurchaseScheduledInstances where
+  rnf PurchaseScheduledInstances' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf purchaseRequests
+
+instance Data.ToHeaders PurchaseScheduledInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath PurchaseScheduledInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PurchaseScheduledInstances where
+  toQuery PurchaseScheduledInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("PurchaseScheduledInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "PurchaseRequest" purchaseRequests
+      ]
+
+-- | Contains the output of PurchaseScheduledInstances.
+--
+-- /See:/ 'newPurchaseScheduledInstancesResponse' smart constructor.
+data PurchaseScheduledInstancesResponse = PurchaseScheduledInstancesResponse'
+  { -- | Information about the Scheduled Instances.
+    scheduledInstanceSet :: Prelude.Maybe [ScheduledInstance],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseScheduledInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scheduledInstanceSet', 'purchaseScheduledInstancesResponse_scheduledInstanceSet' - Information about the Scheduled Instances.
+--
+-- 'httpStatus', 'purchaseScheduledInstancesResponse_httpStatus' - The response's http status code.
+newPurchaseScheduledInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PurchaseScheduledInstancesResponse
+newPurchaseScheduledInstancesResponse pHttpStatus_ =
+  PurchaseScheduledInstancesResponse'
+    { scheduledInstanceSet =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Scheduled Instances.
+purchaseScheduledInstancesResponse_scheduledInstanceSet :: Lens.Lens' PurchaseScheduledInstancesResponse (Prelude.Maybe [ScheduledInstance])
+purchaseScheduledInstancesResponse_scheduledInstanceSet = Lens.lens (\PurchaseScheduledInstancesResponse' {scheduledInstanceSet} -> scheduledInstanceSet) (\s@PurchaseScheduledInstancesResponse' {} a -> s {scheduledInstanceSet = a} :: PurchaseScheduledInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+purchaseScheduledInstancesResponse_httpStatus :: Lens.Lens' PurchaseScheduledInstancesResponse Prelude.Int
+purchaseScheduledInstancesResponse_httpStatus = Lens.lens (\PurchaseScheduledInstancesResponse' {httpStatus} -> httpStatus) (\s@PurchaseScheduledInstancesResponse' {} a -> s {httpStatus = a} :: PurchaseScheduledInstancesResponse)
+
+instance
+  Prelude.NFData
+    PurchaseScheduledInstancesResponse
+  where
+  rnf PurchaseScheduledInstancesResponse' {..} =
+    Prelude.rnf scheduledInstanceSet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RebootInstances.hs b/gen/Amazonka/EC2/RebootInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RebootInstances.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RebootInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Requests a reboot of the specified instances. This operation is
+-- asynchronous; it only queues a request to reboot the specified
+-- instances. The operation succeeds if the instances are valid and belong
+-- to you. Requests to reboot terminated instances are ignored.
+--
+-- If an instance does not cleanly shut down within a few minutes, Amazon
+-- EC2 performs a hard reboot.
+--
+-- For more information about troubleshooting, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html Troubleshoot an unreachable instance>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.RebootInstances
+  ( -- * Creating a Request
+    RebootInstances (..),
+    newRebootInstances,
+
+    -- * Request Lenses
+    rebootInstances_dryRun,
+    rebootInstances_instanceIds,
+
+    -- * Destructuring the Response
+    RebootInstancesResponse (..),
+    newRebootInstancesResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRebootInstances' smart constructor.
+data RebootInstances = RebootInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The instance IDs.
+    instanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebootInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'rebootInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceIds', 'rebootInstances_instanceIds' - The instance IDs.
+newRebootInstances ::
+  RebootInstances
+newRebootInstances =
+  RebootInstances'
+    { dryRun = Prelude.Nothing,
+      instanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+rebootInstances_dryRun :: Lens.Lens' RebootInstances (Prelude.Maybe Prelude.Bool)
+rebootInstances_dryRun = Lens.lens (\RebootInstances' {dryRun} -> dryRun) (\s@RebootInstances' {} a -> s {dryRun = a} :: RebootInstances)
+
+-- | The instance IDs.
+rebootInstances_instanceIds :: Lens.Lens' RebootInstances [Prelude.Text]
+rebootInstances_instanceIds = Lens.lens (\RebootInstances' {instanceIds} -> instanceIds) (\s@RebootInstances' {} a -> s {instanceIds = a} :: RebootInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest RebootInstances where
+  type
+    AWSResponse RebootInstances =
+      RebootInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull RebootInstancesResponse'
+
+instance Prelude.Hashable RebootInstances where
+  hashWithSalt _salt RebootInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceIds
+
+instance Prelude.NFData RebootInstances where
+  rnf RebootInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceIds
+
+instance Data.ToHeaders RebootInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RebootInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RebootInstances where
+  toQuery RebootInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RebootInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "InstanceId" instanceIds
+      ]
+
+-- | /See:/ 'newRebootInstancesResponse' smart constructor.
+data RebootInstancesResponse = RebootInstancesResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RebootInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newRebootInstancesResponse ::
+  RebootInstancesResponse
+newRebootInstancesResponse = RebootInstancesResponse'
+
+instance Prelude.NFData RebootInstancesResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/RegisterImage.hs b/gen/Amazonka/EC2/RegisterImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RegisterImage.hs
@@ -0,0 +1,639 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RegisterImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers an AMI. When you\'re creating an AMI, this is the final step
+-- you must complete before you can launch an instance from the AMI. For
+-- more information about creating AMIs, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html Create your own AMI>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- For Amazon EBS-backed instances, CreateImage creates and registers the
+-- AMI in a single request, so you don\'t have to register the AMI
+-- yourself. We recommend that you always use CreateImage unless you have a
+-- specific reason to use RegisterImage.
+--
+-- If needed, you can deregister an AMI at any time. Any modifications you
+-- make to an AMI backed by an instance store volume invalidates its
+-- registration. If you make changes to an image, deregister the previous
+-- image and register the new image.
+--
+-- __Register a snapshot of a root device volume__
+--
+-- You can use @RegisterImage@ to create an Amazon EBS-backed Linux AMI
+-- from a snapshot of a root device volume. You specify the snapshot using
+-- a block device mapping. You can\'t set the encryption state of the
+-- volume using the block device mapping. If the snapshot is encrypted, or
+-- encryption by default is enabled, the root volume of an instance
+-- launched from the AMI is encrypted.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html#creating-launching-ami-from-snapshot Create a Linux AMI from a snapshot>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIEncryption.html Use encryption with Amazon EBS-backed AMIs>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- __Amazon Web Services Marketplace product codes__
+--
+-- If any snapshots have Amazon Web Services Marketplace product codes,
+-- they are copied to the new AMI.
+--
+-- Windows and some Linux distributions, such as Red Hat Enterprise Linux
+-- (RHEL) and SUSE Linux Enterprise Server (SLES), use the Amazon EC2
+-- billing product code associated with an AMI to verify the subscription
+-- status for package updates. To create a new AMI for operating systems
+-- that require a billing product code, instead of registering the AMI, do
+-- the following to preserve the billing product code association:
+--
+-- 1.  Launch an instance from an existing AMI with that billing product
+--     code.
+--
+-- 2.  Customize the instance.
+--
+-- 3.  Create an AMI from the instance using CreateImage.
+--
+-- If you purchase a Reserved Instance to apply to an On-Demand Instance
+-- that was launched from an AMI with a billing product code, make sure
+-- that the Reserved Instance has the matching billing product code. If you
+-- purchase a Reserved Instance without the matching billing product code,
+-- the Reserved Instance will not be applied to the On-Demand Instance. For
+-- information about how to obtain the platform details and billing
+-- information of an AMI, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html Understand AMI billing information>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.RegisterImage
+  ( -- * Creating a Request
+    RegisterImage (..),
+    newRegisterImage,
+
+    -- * Request Lenses
+    registerImage_architecture,
+    registerImage_billingProducts,
+    registerImage_blockDeviceMappings,
+    registerImage_bootMode,
+    registerImage_description,
+    registerImage_dryRun,
+    registerImage_enaSupport,
+    registerImage_imageLocation,
+    registerImage_imdsSupport,
+    registerImage_kernelId,
+    registerImage_ramdiskId,
+    registerImage_rootDeviceName,
+    registerImage_sriovNetSupport,
+    registerImage_tpmSupport,
+    registerImage_uefiData,
+    registerImage_virtualizationType,
+    registerImage_name,
+
+    -- * Destructuring the Response
+    RegisterImageResponse (..),
+    newRegisterImageResponse,
+
+    -- * Response Lenses
+    registerImageResponse_imageId,
+    registerImageResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for RegisterImage.
+--
+-- /See:/ 'newRegisterImage' smart constructor.
+data RegisterImage = RegisterImage'
+  { -- | The architecture of the AMI.
+    --
+    -- Default: For Amazon EBS-backed AMIs, @i386@. For instance store-backed
+    -- AMIs, the architecture specified in the manifest file.
+    architecture :: Prelude.Maybe ArchitectureValues,
+    -- | The billing product codes. Your account must be authorized to specify
+    -- billing product codes.
+    --
+    -- If your account is not authorized to specify billing product codes, you
+    -- can publish AMIs that include billable software and list them on the
+    -- Amazon Web Services Marketplace. You must first register as a seller on
+    -- the Amazon Web Services Marketplace. For more information, see
+    -- <https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html Getting started as a seller>
+    -- and
+    -- <https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html AMI-based products>
+    -- in the /Amazon Web Services Marketplace Seller Guide/.
+    billingProducts :: Prelude.Maybe [Prelude.Text],
+    -- | The block device mapping entries.
+    --
+    -- If you specify an Amazon EBS volume using the ID of an Amazon EBS
+    -- snapshot, you can\'t specify the encryption state of the volume.
+    --
+    -- If you create an AMI on an Outpost, then all backing snapshots must be
+    -- on the same Outpost or in the Region of that Outpost. AMIs on an Outpost
+    -- that include local snapshots can be used to launch instances on the same
+    -- Outpost only. For more information,
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami Amazon EBS local snapshots on Outposts>
+    -- in the /Amazon EC2 User Guide/.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | The boot mode of the AMI. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+    -- in the /Amazon EC2 User Guide/.
+    bootMode :: Prelude.Maybe BootModeValues,
+    -- | A description for your AMI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Set to @true@ to enable enhanced networking with ENA for the AMI and any
+    -- instances that you launch from the AMI.
+    --
+    -- This option is supported only for HVM AMIs. Specifying this option with
+    -- a PV AMI can make instances launched from the AMI unreachable.
+    enaSupport :: Prelude.Maybe Prelude.Bool,
+    -- | The full path to your AMI manifest in Amazon S3 storage. The specified
+    -- bucket must have the @aws-exec-read@ canned access control list (ACL) to
+    -- ensure that it can be accessed by Amazon EC2. For more information, see
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl Canned ACLs>
+    -- in the /Amazon S3 Service Developer Guide/.
+    imageLocation :: Prelude.Maybe Prelude.Text,
+    -- | Set to @v2.0@ to indicate that IMDSv2 is specified in the AMI. Instances
+    -- launched from this AMI will have @HttpTokens@ automatically set to
+    -- @required@ so that, by default, the instance requires that IMDSv2 is
+    -- used when requesting instance metadata. In addition,
+    -- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- If you set the value to @v2.0@, make sure that your AMI software can
+    -- support IMDSv2.
+    imdsSupport :: Prelude.Maybe ImdsSupportValues,
+    -- | The ID of the kernel.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the RAM disk.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | The device name of the root device volume (for example, @\/dev\/sda1@).
+    rootDeviceName :: Prelude.Maybe Prelude.Text,
+    -- | Set to @simple@ to enable enhanced networking with the Intel 82599
+    -- Virtual Function interface for the AMI and any instances that you launch
+    -- from the AMI.
+    --
+    -- There is no way to disable @sriovNetSupport@ at this time.
+    --
+    -- This option is supported only for HVM AMIs. Specifying this option with
+    -- a PV AMI can make instances launched from the AMI unreachable.
+    sriovNetSupport :: Prelude.Maybe Prelude.Text,
+    -- | Set to @v2.0@ to enable Trusted Platform Module (TPM) support. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+    -- in the /Amazon EC2 User Guide/.
+    tpmSupport :: Prelude.Maybe TpmSupportValues,
+    -- | Base64 representation of the non-volatile UEFI variable store. To
+    -- retrieve the UEFI data, use the
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData GetInstanceUefiData>
+    -- command. You can inspect and modify the UEFI data by using the
+    -- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+    -- GitHub. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+    -- in the /Amazon EC2 User Guide/.
+    uefiData :: Prelude.Maybe Prelude.Text,
+    -- | The type of virtualization (@hvm@ | @paravirtual@).
+    --
+    -- Default: @paravirtual@
+    virtualizationType :: Prelude.Maybe Prelude.Text,
+    -- | A name for your AMI.
+    --
+    -- Constraints: 3-128 alphanumeric characters, parentheses (()), square
+    -- brackets ([]), spaces ( ), periods (.), slashes (\/), dashes (-), single
+    -- quotes (\'), at-signs (\@), or underscores(_)
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architecture', 'registerImage_architecture' - The architecture of the AMI.
+--
+-- Default: For Amazon EBS-backed AMIs, @i386@. For instance store-backed
+-- AMIs, the architecture specified in the manifest file.
+--
+-- 'billingProducts', 'registerImage_billingProducts' - The billing product codes. Your account must be authorized to specify
+-- billing product codes.
+--
+-- If your account is not authorized to specify billing product codes, you
+-- can publish AMIs that include billable software and list them on the
+-- Amazon Web Services Marketplace. You must first register as a seller on
+-- the Amazon Web Services Marketplace. For more information, see
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html Getting started as a seller>
+-- and
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html AMI-based products>
+-- in the /Amazon Web Services Marketplace Seller Guide/.
+--
+-- 'blockDeviceMappings', 'registerImage_blockDeviceMappings' - The block device mapping entries.
+--
+-- If you specify an Amazon EBS volume using the ID of an Amazon EBS
+-- snapshot, you can\'t specify the encryption state of the volume.
+--
+-- If you create an AMI on an Outpost, then all backing snapshots must be
+-- on the same Outpost or in the Region of that Outpost. AMIs on an Outpost
+-- that include local snapshots can be used to launch instances on the same
+-- Outpost only. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami Amazon EBS local snapshots on Outposts>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'bootMode', 'registerImage_bootMode' - The boot mode of the AMI. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'description', 'registerImage_description' - A description for your AMI.
+--
+-- 'dryRun', 'registerImage_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'enaSupport', 'registerImage_enaSupport' - Set to @true@ to enable enhanced networking with ENA for the AMI and any
+-- instances that you launch from the AMI.
+--
+-- This option is supported only for HVM AMIs. Specifying this option with
+-- a PV AMI can make instances launched from the AMI unreachable.
+--
+-- 'imageLocation', 'registerImage_imageLocation' - The full path to your AMI manifest in Amazon S3 storage. The specified
+-- bucket must have the @aws-exec-read@ canned access control list (ACL) to
+-- ensure that it can be accessed by Amazon EC2. For more information, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl Canned ACLs>
+-- in the /Amazon S3 Service Developer Guide/.
+--
+-- 'imdsSupport', 'registerImage_imdsSupport' - Set to @v2.0@ to indicate that IMDSv2 is specified in the AMI. Instances
+-- launched from this AMI will have @HttpTokens@ automatically set to
+-- @required@ so that, by default, the instance requires that IMDSv2 is
+-- used when requesting instance metadata. In addition,
+-- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+-- in the /Amazon EC2 User Guide/.
+--
+-- If you set the value to @v2.0@, make sure that your AMI software can
+-- support IMDSv2.
+--
+-- 'kernelId', 'registerImage_kernelId' - The ID of the kernel.
+--
+-- 'ramdiskId', 'registerImage_ramdiskId' - The ID of the RAM disk.
+--
+-- 'rootDeviceName', 'registerImage_rootDeviceName' - The device name of the root device volume (for example, @\/dev\/sda1@).
+--
+-- 'sriovNetSupport', 'registerImage_sriovNetSupport' - Set to @simple@ to enable enhanced networking with the Intel 82599
+-- Virtual Function interface for the AMI and any instances that you launch
+-- from the AMI.
+--
+-- There is no way to disable @sriovNetSupport@ at this time.
+--
+-- This option is supported only for HVM AMIs. Specifying this option with
+-- a PV AMI can make instances launched from the AMI unreachable.
+--
+-- 'tpmSupport', 'registerImage_tpmSupport' - Set to @v2.0@ to enable Trusted Platform Module (TPM) support. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'uefiData', 'registerImage_uefiData' - Base64 representation of the non-volatile UEFI variable store. To
+-- retrieve the UEFI data, use the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData GetInstanceUefiData>
+-- command. You can inspect and modify the UEFI data by using the
+-- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+-- GitHub. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'virtualizationType', 'registerImage_virtualizationType' - The type of virtualization (@hvm@ | @paravirtual@).
+--
+-- Default: @paravirtual@
+--
+-- 'name', 'registerImage_name' - A name for your AMI.
+--
+-- Constraints: 3-128 alphanumeric characters, parentheses (()), square
+-- brackets ([]), spaces ( ), periods (.), slashes (\/), dashes (-), single
+-- quotes (\'), at-signs (\@), or underscores(_)
+newRegisterImage ::
+  -- | 'name'
+  Prelude.Text ->
+  RegisterImage
+newRegisterImage pName_ =
+  RegisterImage'
+    { architecture = Prelude.Nothing,
+      billingProducts = Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      bootMode = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      enaSupport = Prelude.Nothing,
+      imageLocation = Prelude.Nothing,
+      imdsSupport = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      rootDeviceName = Prelude.Nothing,
+      sriovNetSupport = Prelude.Nothing,
+      tpmSupport = Prelude.Nothing,
+      uefiData = Prelude.Nothing,
+      virtualizationType = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The architecture of the AMI.
+--
+-- Default: For Amazon EBS-backed AMIs, @i386@. For instance store-backed
+-- AMIs, the architecture specified in the manifest file.
+registerImage_architecture :: Lens.Lens' RegisterImage (Prelude.Maybe ArchitectureValues)
+registerImage_architecture = Lens.lens (\RegisterImage' {architecture} -> architecture) (\s@RegisterImage' {} a -> s {architecture = a} :: RegisterImage)
+
+-- | The billing product codes. Your account must be authorized to specify
+-- billing product codes.
+--
+-- If your account is not authorized to specify billing product codes, you
+-- can publish AMIs that include billable software and list them on the
+-- Amazon Web Services Marketplace. You must first register as a seller on
+-- the Amazon Web Services Marketplace. For more information, see
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html Getting started as a seller>
+-- and
+-- <https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html AMI-based products>
+-- in the /Amazon Web Services Marketplace Seller Guide/.
+registerImage_billingProducts :: Lens.Lens' RegisterImage (Prelude.Maybe [Prelude.Text])
+registerImage_billingProducts = Lens.lens (\RegisterImage' {billingProducts} -> billingProducts) (\s@RegisterImage' {} a -> s {billingProducts = a} :: RegisterImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The block device mapping entries.
+--
+-- If you specify an Amazon EBS volume using the ID of an Amazon EBS
+-- snapshot, you can\'t specify the encryption state of the volume.
+--
+-- If you create an AMI on an Outpost, then all backing snapshots must be
+-- on the same Outpost or in the Region of that Outpost. AMIs on an Outpost
+-- that include local snapshots can be used to launch instances on the same
+-- Outpost only. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html#ami Amazon EBS local snapshots on Outposts>
+-- in the /Amazon EC2 User Guide/.
+registerImage_blockDeviceMappings :: Lens.Lens' RegisterImage (Prelude.Maybe [BlockDeviceMapping])
+registerImage_blockDeviceMappings = Lens.lens (\RegisterImage' {blockDeviceMappings} -> blockDeviceMappings) (\s@RegisterImage' {} a -> s {blockDeviceMappings = a} :: RegisterImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The boot mode of the AMI. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+registerImage_bootMode :: Lens.Lens' RegisterImage (Prelude.Maybe BootModeValues)
+registerImage_bootMode = Lens.lens (\RegisterImage' {bootMode} -> bootMode) (\s@RegisterImage' {} a -> s {bootMode = a} :: RegisterImage)
+
+-- | A description for your AMI.
+registerImage_description :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_description = Lens.lens (\RegisterImage' {description} -> description) (\s@RegisterImage' {} a -> s {description = a} :: RegisterImage)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+registerImage_dryRun :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Bool)
+registerImage_dryRun = Lens.lens (\RegisterImage' {dryRun} -> dryRun) (\s@RegisterImage' {} a -> s {dryRun = a} :: RegisterImage)
+
+-- | Set to @true@ to enable enhanced networking with ENA for the AMI and any
+-- instances that you launch from the AMI.
+--
+-- This option is supported only for HVM AMIs. Specifying this option with
+-- a PV AMI can make instances launched from the AMI unreachable.
+registerImage_enaSupport :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Bool)
+registerImage_enaSupport = Lens.lens (\RegisterImage' {enaSupport} -> enaSupport) (\s@RegisterImage' {} a -> s {enaSupport = a} :: RegisterImage)
+
+-- | The full path to your AMI manifest in Amazon S3 storage. The specified
+-- bucket must have the @aws-exec-read@ canned access control list (ACL) to
+-- ensure that it can be accessed by Amazon EC2. For more information, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl Canned ACLs>
+-- in the /Amazon S3 Service Developer Guide/.
+registerImage_imageLocation :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_imageLocation = Lens.lens (\RegisterImage' {imageLocation} -> imageLocation) (\s@RegisterImage' {} a -> s {imageLocation = a} :: RegisterImage)
+
+-- | Set to @v2.0@ to indicate that IMDSv2 is specified in the AMI. Instances
+-- launched from this AMI will have @HttpTokens@ automatically set to
+-- @required@ so that, by default, the instance requires that IMDSv2 is
+-- used when requesting instance metadata. In addition,
+-- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+-- in the /Amazon EC2 User Guide/.
+--
+-- If you set the value to @v2.0@, make sure that your AMI software can
+-- support IMDSv2.
+registerImage_imdsSupport :: Lens.Lens' RegisterImage (Prelude.Maybe ImdsSupportValues)
+registerImage_imdsSupport = Lens.lens (\RegisterImage' {imdsSupport} -> imdsSupport) (\s@RegisterImage' {} a -> s {imdsSupport = a} :: RegisterImage)
+
+-- | The ID of the kernel.
+registerImage_kernelId :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_kernelId = Lens.lens (\RegisterImage' {kernelId} -> kernelId) (\s@RegisterImage' {} a -> s {kernelId = a} :: RegisterImage)
+
+-- | The ID of the RAM disk.
+registerImage_ramdiskId :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_ramdiskId = Lens.lens (\RegisterImage' {ramdiskId} -> ramdiskId) (\s@RegisterImage' {} a -> s {ramdiskId = a} :: RegisterImage)
+
+-- | The device name of the root device volume (for example, @\/dev\/sda1@).
+registerImage_rootDeviceName :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_rootDeviceName = Lens.lens (\RegisterImage' {rootDeviceName} -> rootDeviceName) (\s@RegisterImage' {} a -> s {rootDeviceName = a} :: RegisterImage)
+
+-- | Set to @simple@ to enable enhanced networking with the Intel 82599
+-- Virtual Function interface for the AMI and any instances that you launch
+-- from the AMI.
+--
+-- There is no way to disable @sriovNetSupport@ at this time.
+--
+-- This option is supported only for HVM AMIs. Specifying this option with
+-- a PV AMI can make instances launched from the AMI unreachable.
+registerImage_sriovNetSupport :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_sriovNetSupport = Lens.lens (\RegisterImage' {sriovNetSupport} -> sriovNetSupport) (\s@RegisterImage' {} a -> s {sriovNetSupport = a} :: RegisterImage)
+
+-- | Set to @v2.0@ to enable Trusted Platform Module (TPM) support. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+-- in the /Amazon EC2 User Guide/.
+registerImage_tpmSupport :: Lens.Lens' RegisterImage (Prelude.Maybe TpmSupportValues)
+registerImage_tpmSupport = Lens.lens (\RegisterImage' {tpmSupport} -> tpmSupport) (\s@RegisterImage' {} a -> s {tpmSupport = a} :: RegisterImage)
+
+-- | Base64 representation of the non-volatile UEFI variable store. To
+-- retrieve the UEFI data, use the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceUefiData GetInstanceUefiData>
+-- command. You can inspect and modify the UEFI data by using the
+-- <https://github.com/awslabs/python-uefivars python-uefivars tool> on
+-- GitHub. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/uefi-secure-boot.html UEFI Secure Boot>
+-- in the /Amazon EC2 User Guide/.
+registerImage_uefiData :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_uefiData = Lens.lens (\RegisterImage' {uefiData} -> uefiData) (\s@RegisterImage' {} a -> s {uefiData = a} :: RegisterImage)
+
+-- | The type of virtualization (@hvm@ | @paravirtual@).
+--
+-- Default: @paravirtual@
+registerImage_virtualizationType :: Lens.Lens' RegisterImage (Prelude.Maybe Prelude.Text)
+registerImage_virtualizationType = Lens.lens (\RegisterImage' {virtualizationType} -> virtualizationType) (\s@RegisterImage' {} a -> s {virtualizationType = a} :: RegisterImage)
+
+-- | A name for your AMI.
+--
+-- Constraints: 3-128 alphanumeric characters, parentheses (()), square
+-- brackets ([]), spaces ( ), periods (.), slashes (\/), dashes (-), single
+-- quotes (\'), at-signs (\@), or underscores(_)
+registerImage_name :: Lens.Lens' RegisterImage Prelude.Text
+registerImage_name = Lens.lens (\RegisterImage' {name} -> name) (\s@RegisterImage' {} a -> s {name = a} :: RegisterImage)
+
+instance Core.AWSRequest RegisterImage where
+  type
+    AWSResponse RegisterImage =
+      RegisterImageResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RegisterImageResponse'
+            Prelude.<$> (x Data..@? "imageId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RegisterImage where
+  hashWithSalt _salt RegisterImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` billingProducts
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` enaSupport
+      `Prelude.hashWithSalt` imageLocation
+      `Prelude.hashWithSalt` imdsSupport
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` ramdiskId
+      `Prelude.hashWithSalt` rootDeviceName
+      `Prelude.hashWithSalt` sriovNetSupport
+      `Prelude.hashWithSalt` tpmSupport
+      `Prelude.hashWithSalt` uefiData
+      `Prelude.hashWithSalt` virtualizationType
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData RegisterImage where
+  rnf RegisterImage' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf billingProducts
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf enaSupport
+      `Prelude.seq` Prelude.rnf imageLocation
+      `Prelude.seq` Prelude.rnf imdsSupport
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf rootDeviceName
+      `Prelude.seq` Prelude.rnf sriovNetSupport
+      `Prelude.seq` Prelude.rnf tpmSupport
+      `Prelude.seq` Prelude.rnf uefiData
+      `Prelude.seq` Prelude.rnf virtualizationType
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders RegisterImage where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RegisterImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RegisterImage where
+  toQuery RegisterImage' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RegisterImage" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Architecture" Data.=: architecture,
+        Data.toQuery
+          ( Data.toQueryList "BillingProduct"
+              Prelude.<$> billingProducts
+          ),
+        Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "BootMode" Data.=: bootMode,
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "EnaSupport" Data.=: enaSupport,
+        "ImageLocation" Data.=: imageLocation,
+        "ImdsSupport" Data.=: imdsSupport,
+        "KernelId" Data.=: kernelId,
+        "RamdiskId" Data.=: ramdiskId,
+        "RootDeviceName" Data.=: rootDeviceName,
+        "SriovNetSupport" Data.=: sriovNetSupport,
+        "TpmSupport" Data.=: tpmSupport,
+        "UefiData" Data.=: uefiData,
+        "VirtualizationType" Data.=: virtualizationType,
+        "Name" Data.=: name
+      ]
+
+-- | Contains the output of RegisterImage.
+--
+-- /See:/ 'newRegisterImageResponse' smart constructor.
+data RegisterImageResponse = RegisterImageResponse'
+  { -- | The ID of the newly registered AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'registerImageResponse_imageId' - The ID of the newly registered AMI.
+--
+-- 'httpStatus', 'registerImageResponse_httpStatus' - The response's http status code.
+newRegisterImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterImageResponse
+newRegisterImageResponse pHttpStatus_ =
+  RegisterImageResponse'
+    { imageId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the newly registered AMI.
+registerImageResponse_imageId :: Lens.Lens' RegisterImageResponse (Prelude.Maybe Prelude.Text)
+registerImageResponse_imageId = Lens.lens (\RegisterImageResponse' {imageId} -> imageId) (\s@RegisterImageResponse' {} a -> s {imageId = a} :: RegisterImageResponse)
+
+-- | The response's http status code.
+registerImageResponse_httpStatus :: Lens.Lens' RegisterImageResponse Prelude.Int
+registerImageResponse_httpStatus = Lens.lens (\RegisterImageResponse' {httpStatus} -> httpStatus) (\s@RegisterImageResponse' {} a -> s {httpStatus = a} :: RegisterImageResponse)
+
+instance Prelude.NFData RegisterImageResponse where
+  rnf RegisterImageResponse' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RegisterInstanceEventNotificationAttributes.hs b/gen/Amazonka/EC2/RegisterInstanceEventNotificationAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RegisterInstanceEventNotificationAttributes.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RegisterInstanceEventNotificationAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers a set of tag keys to include in scheduled event notifications
+-- for your resources.
+--
+-- To remove tags, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeregisterInstanceEventNotificationAttributes.html DeregisterInstanceEventNotificationAttributes>.
+module Amazonka.EC2.RegisterInstanceEventNotificationAttributes
+  ( -- * Creating a Request
+    RegisterInstanceEventNotificationAttributes (..),
+    newRegisterInstanceEventNotificationAttributes,
+
+    -- * Request Lenses
+    registerInstanceEventNotificationAttributes_dryRun,
+    registerInstanceEventNotificationAttributes_instanceTagAttribute,
+
+    -- * Destructuring the Response
+    RegisterInstanceEventNotificationAttributesResponse (..),
+    newRegisterInstanceEventNotificationAttributesResponse,
+
+    -- * Response Lenses
+    registerInstanceEventNotificationAttributesResponse_instanceTagAttribute,
+    registerInstanceEventNotificationAttributesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterInstanceEventNotificationAttributes' smart constructor.
+data RegisterInstanceEventNotificationAttributes = RegisterInstanceEventNotificationAttributes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the tag keys to register.
+    instanceTagAttribute :: Prelude.Maybe RegisterInstanceTagAttributeRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterInstanceEventNotificationAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'registerInstanceEventNotificationAttributes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceTagAttribute', 'registerInstanceEventNotificationAttributes_instanceTagAttribute' - Information about the tag keys to register.
+newRegisterInstanceEventNotificationAttributes ::
+  RegisterInstanceEventNotificationAttributes
+newRegisterInstanceEventNotificationAttributes =
+  RegisterInstanceEventNotificationAttributes'
+    { dryRun =
+        Prelude.Nothing,
+      instanceTagAttribute =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+registerInstanceEventNotificationAttributes_dryRun :: Lens.Lens' RegisterInstanceEventNotificationAttributes (Prelude.Maybe Prelude.Bool)
+registerInstanceEventNotificationAttributes_dryRun = Lens.lens (\RegisterInstanceEventNotificationAttributes' {dryRun} -> dryRun) (\s@RegisterInstanceEventNotificationAttributes' {} a -> s {dryRun = a} :: RegisterInstanceEventNotificationAttributes)
+
+-- | Information about the tag keys to register.
+registerInstanceEventNotificationAttributes_instanceTagAttribute :: Lens.Lens' RegisterInstanceEventNotificationAttributes (Prelude.Maybe RegisterInstanceTagAttributeRequest)
+registerInstanceEventNotificationAttributes_instanceTagAttribute = Lens.lens (\RegisterInstanceEventNotificationAttributes' {instanceTagAttribute} -> instanceTagAttribute) (\s@RegisterInstanceEventNotificationAttributes' {} a -> s {instanceTagAttribute = a} :: RegisterInstanceEventNotificationAttributes)
+
+instance
+  Core.AWSRequest
+    RegisterInstanceEventNotificationAttributes
+  where
+  type
+    AWSResponse
+      RegisterInstanceEventNotificationAttributes =
+      RegisterInstanceEventNotificationAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RegisterInstanceEventNotificationAttributesResponse'
+            Prelude.<$> (x Data..@? "instanceTagAttribute")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RegisterInstanceEventNotificationAttributes
+  where
+  hashWithSalt
+    _salt
+    RegisterInstanceEventNotificationAttributes' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` instanceTagAttribute
+
+instance
+  Prelude.NFData
+    RegisterInstanceEventNotificationAttributes
+  where
+  rnf RegisterInstanceEventNotificationAttributes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceTagAttribute
+
+instance
+  Data.ToHeaders
+    RegisterInstanceEventNotificationAttributes
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    RegisterInstanceEventNotificationAttributes
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    RegisterInstanceEventNotificationAttributes
+  where
+  toQuery
+    RegisterInstanceEventNotificationAttributes' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "RegisterInstanceEventNotificationAttributes" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "InstanceTagAttribute" Data.=: instanceTagAttribute
+        ]
+
+-- | /See:/ 'newRegisterInstanceEventNotificationAttributesResponse' smart constructor.
+data RegisterInstanceEventNotificationAttributesResponse = RegisterInstanceEventNotificationAttributesResponse'
+  { -- | The resulting set of tag keys.
+    instanceTagAttribute :: Prelude.Maybe InstanceTagNotificationAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterInstanceEventNotificationAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceTagAttribute', 'registerInstanceEventNotificationAttributesResponse_instanceTagAttribute' - The resulting set of tag keys.
+--
+-- 'httpStatus', 'registerInstanceEventNotificationAttributesResponse_httpStatus' - The response's http status code.
+newRegisterInstanceEventNotificationAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterInstanceEventNotificationAttributesResponse
+newRegisterInstanceEventNotificationAttributesResponse
+  pHttpStatus_ =
+    RegisterInstanceEventNotificationAttributesResponse'
+      { instanceTagAttribute =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | The resulting set of tag keys.
+registerInstanceEventNotificationAttributesResponse_instanceTagAttribute :: Lens.Lens' RegisterInstanceEventNotificationAttributesResponse (Prelude.Maybe InstanceTagNotificationAttribute)
+registerInstanceEventNotificationAttributesResponse_instanceTagAttribute = Lens.lens (\RegisterInstanceEventNotificationAttributesResponse' {instanceTagAttribute} -> instanceTagAttribute) (\s@RegisterInstanceEventNotificationAttributesResponse' {} a -> s {instanceTagAttribute = a} :: RegisterInstanceEventNotificationAttributesResponse)
+
+-- | The response's http status code.
+registerInstanceEventNotificationAttributesResponse_httpStatus :: Lens.Lens' RegisterInstanceEventNotificationAttributesResponse Prelude.Int
+registerInstanceEventNotificationAttributesResponse_httpStatus = Lens.lens (\RegisterInstanceEventNotificationAttributesResponse' {httpStatus} -> httpStatus) (\s@RegisterInstanceEventNotificationAttributesResponse' {} a -> s {httpStatus = a} :: RegisterInstanceEventNotificationAttributesResponse)
+
+instance
+  Prelude.NFData
+    RegisterInstanceEventNotificationAttributesResponse
+  where
+  rnf
+    RegisterInstanceEventNotificationAttributesResponse' {..} =
+      Prelude.rnf instanceTagAttribute
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RegisterTransitGatewayMulticastGroupMembers.hs b/gen/Amazonka/EC2/RegisterTransitGatewayMulticastGroupMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RegisterTransitGatewayMulticastGroupMembers.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RegisterTransitGatewayMulticastGroupMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers members (network interfaces) with the transit gateway
+-- multicast group. A member is a network interface associated with a
+-- supported EC2 instance that receives multicast traffic. For information
+-- about supported instances, see
+-- <https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-limits.html#multicast-limits Multicast Consideration>
+-- in /Amazon VPC Transit Gateways/.
+--
+-- After you add the members, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html SearchTransitGatewayMulticastGroups>
+-- to verify that the members were added to the transit gateway multicast
+-- group.
+module Amazonka.EC2.RegisterTransitGatewayMulticastGroupMembers
+  ( -- * Creating a Request
+    RegisterTransitGatewayMulticastGroupMembers (..),
+    newRegisterTransitGatewayMulticastGroupMembers,
+
+    -- * Request Lenses
+    registerTransitGatewayMulticastGroupMembers_dryRun,
+    registerTransitGatewayMulticastGroupMembers_groupIpAddress,
+    registerTransitGatewayMulticastGroupMembers_networkInterfaceIds,
+    registerTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    RegisterTransitGatewayMulticastGroupMembersResponse (..),
+    newRegisterTransitGatewayMulticastGroupMembersResponse,
+
+    -- * Response Lenses
+    registerTransitGatewayMulticastGroupMembersResponse_registeredMulticastGroupMembers,
+    registerTransitGatewayMulticastGroupMembersResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterTransitGatewayMulticastGroupMembers' smart constructor.
+data RegisterTransitGatewayMulticastGroupMembers = RegisterTransitGatewayMulticastGroupMembers'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The group members\' network interface IDs to register with the transit
+    -- gateway multicast group.
+    networkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterTransitGatewayMulticastGroupMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'registerTransitGatewayMulticastGroupMembers_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupIpAddress', 'registerTransitGatewayMulticastGroupMembers_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'networkInterfaceIds', 'registerTransitGatewayMulticastGroupMembers_networkInterfaceIds' - The group members\' network interface IDs to register with the transit
+-- gateway multicast group.
+--
+-- 'transitGatewayMulticastDomainId', 'registerTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newRegisterTransitGatewayMulticastGroupMembers ::
+  RegisterTransitGatewayMulticastGroupMembers
+newRegisterTransitGatewayMulticastGroupMembers =
+  RegisterTransitGatewayMulticastGroupMembers'
+    { dryRun =
+        Prelude.Nothing,
+      groupIpAddress =
+        Prelude.Nothing,
+      networkInterfaceIds =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+registerTransitGatewayMulticastGroupMembers_dryRun :: Lens.Lens' RegisterTransitGatewayMulticastGroupMembers (Prelude.Maybe Prelude.Bool)
+registerTransitGatewayMulticastGroupMembers_dryRun = Lens.lens (\RegisterTransitGatewayMulticastGroupMembers' {dryRun} -> dryRun) (\s@RegisterTransitGatewayMulticastGroupMembers' {} a -> s {dryRun = a} :: RegisterTransitGatewayMulticastGroupMembers)
+
+-- | The IP address assigned to the transit gateway multicast group.
+registerTransitGatewayMulticastGroupMembers_groupIpAddress :: Lens.Lens' RegisterTransitGatewayMulticastGroupMembers (Prelude.Maybe Prelude.Text)
+registerTransitGatewayMulticastGroupMembers_groupIpAddress = Lens.lens (\RegisterTransitGatewayMulticastGroupMembers' {groupIpAddress} -> groupIpAddress) (\s@RegisterTransitGatewayMulticastGroupMembers' {} a -> s {groupIpAddress = a} :: RegisterTransitGatewayMulticastGroupMembers)
+
+-- | The group members\' network interface IDs to register with the transit
+-- gateway multicast group.
+registerTransitGatewayMulticastGroupMembers_networkInterfaceIds :: Lens.Lens' RegisterTransitGatewayMulticastGroupMembers (Prelude.Maybe [Prelude.Text])
+registerTransitGatewayMulticastGroupMembers_networkInterfaceIds = Lens.lens (\RegisterTransitGatewayMulticastGroupMembers' {networkInterfaceIds} -> networkInterfaceIds) (\s@RegisterTransitGatewayMulticastGroupMembers' {} a -> s {networkInterfaceIds = a} :: RegisterTransitGatewayMulticastGroupMembers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway multicast domain.
+registerTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId :: Lens.Lens' RegisterTransitGatewayMulticastGroupMembers (Prelude.Maybe Prelude.Text)
+registerTransitGatewayMulticastGroupMembers_transitGatewayMulticastDomainId = Lens.lens (\RegisterTransitGatewayMulticastGroupMembers' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@RegisterTransitGatewayMulticastGroupMembers' {} a -> s {transitGatewayMulticastDomainId = a} :: RegisterTransitGatewayMulticastGroupMembers)
+
+instance
+  Core.AWSRequest
+    RegisterTransitGatewayMulticastGroupMembers
+  where
+  type
+    AWSResponse
+      RegisterTransitGatewayMulticastGroupMembers =
+      RegisterTransitGatewayMulticastGroupMembersResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RegisterTransitGatewayMulticastGroupMembersResponse'
+            Prelude.<$> (x Data..@? "registeredMulticastGroupMembers")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RegisterTransitGatewayMulticastGroupMembers
+  where
+  hashWithSalt
+    _salt
+    RegisterTransitGatewayMulticastGroupMembers' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` networkInterfaceIds
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    RegisterTransitGatewayMulticastGroupMembers
+  where
+  rnf RegisterTransitGatewayMulticastGroupMembers' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupIpAddress
+      `Prelude.seq` Prelude.rnf networkInterfaceIds
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    RegisterTransitGatewayMulticastGroupMembers
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    RegisterTransitGatewayMulticastGroupMembers
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    RegisterTransitGatewayMulticastGroupMembers
+  where
+  toQuery
+    RegisterTransitGatewayMulticastGroupMembers' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "RegisterTransitGatewayMulticastGroupMembers" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "GroupIpAddress" Data.=: groupIpAddress,
+          Data.toQuery
+            ( Data.toQueryList "NetworkInterfaceIds"
+                Prelude.<$> networkInterfaceIds
+            ),
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newRegisterTransitGatewayMulticastGroupMembersResponse' smart constructor.
+data RegisterTransitGatewayMulticastGroupMembersResponse = RegisterTransitGatewayMulticastGroupMembersResponse'
+  { -- | Information about the registered transit gateway multicast group
+    -- members.
+    registeredMulticastGroupMembers :: Prelude.Maybe TransitGatewayMulticastRegisteredGroupMembers,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterTransitGatewayMulticastGroupMembersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'registeredMulticastGroupMembers', 'registerTransitGatewayMulticastGroupMembersResponse_registeredMulticastGroupMembers' - Information about the registered transit gateway multicast group
+-- members.
+--
+-- 'httpStatus', 'registerTransitGatewayMulticastGroupMembersResponse_httpStatus' - The response's http status code.
+newRegisterTransitGatewayMulticastGroupMembersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterTransitGatewayMulticastGroupMembersResponse
+newRegisterTransitGatewayMulticastGroupMembersResponse
+  pHttpStatus_ =
+    RegisterTransitGatewayMulticastGroupMembersResponse'
+      { registeredMulticastGroupMembers =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the registered transit gateway multicast group
+-- members.
+registerTransitGatewayMulticastGroupMembersResponse_registeredMulticastGroupMembers :: Lens.Lens' RegisterTransitGatewayMulticastGroupMembersResponse (Prelude.Maybe TransitGatewayMulticastRegisteredGroupMembers)
+registerTransitGatewayMulticastGroupMembersResponse_registeredMulticastGroupMembers = Lens.lens (\RegisterTransitGatewayMulticastGroupMembersResponse' {registeredMulticastGroupMembers} -> registeredMulticastGroupMembers) (\s@RegisterTransitGatewayMulticastGroupMembersResponse' {} a -> s {registeredMulticastGroupMembers = a} :: RegisterTransitGatewayMulticastGroupMembersResponse)
+
+-- | The response's http status code.
+registerTransitGatewayMulticastGroupMembersResponse_httpStatus :: Lens.Lens' RegisterTransitGatewayMulticastGroupMembersResponse Prelude.Int
+registerTransitGatewayMulticastGroupMembersResponse_httpStatus = Lens.lens (\RegisterTransitGatewayMulticastGroupMembersResponse' {httpStatus} -> httpStatus) (\s@RegisterTransitGatewayMulticastGroupMembersResponse' {} a -> s {httpStatus = a} :: RegisterTransitGatewayMulticastGroupMembersResponse)
+
+instance
+  Prelude.NFData
+    RegisterTransitGatewayMulticastGroupMembersResponse
+  where
+  rnf
+    RegisterTransitGatewayMulticastGroupMembersResponse' {..} =
+      Prelude.rnf registeredMulticastGroupMembers
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RegisterTransitGatewayMulticastGroupSources.hs b/gen/Amazonka/EC2/RegisterTransitGatewayMulticastGroupSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RegisterTransitGatewayMulticastGroupSources.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RegisterTransitGatewayMulticastGroupSources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Registers sources (network interfaces) with the specified transit
+-- gateway multicast group.
+--
+-- A multicast source is a network interface attached to a supported
+-- instance that sends multicast traffic. For information about supported
+-- instances, see
+-- <https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-limits.html#multicast-limits Multicast Considerations>
+-- in /Amazon VPC Transit Gateways/.
+--
+-- After you add the source, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SearchTransitGatewayMulticastGroups.html SearchTransitGatewayMulticastGroups>
+-- to verify that the source was added to the multicast group.
+module Amazonka.EC2.RegisterTransitGatewayMulticastGroupSources
+  ( -- * Creating a Request
+    RegisterTransitGatewayMulticastGroupSources (..),
+    newRegisterTransitGatewayMulticastGroupSources,
+
+    -- * Request Lenses
+    registerTransitGatewayMulticastGroupSources_dryRun,
+    registerTransitGatewayMulticastGroupSources_groupIpAddress,
+    registerTransitGatewayMulticastGroupSources_networkInterfaceIds,
+    registerTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    RegisterTransitGatewayMulticastGroupSourcesResponse (..),
+    newRegisterTransitGatewayMulticastGroupSourcesResponse,
+
+    -- * Response Lenses
+    registerTransitGatewayMulticastGroupSourcesResponse_registeredMulticastGroupSources,
+    registerTransitGatewayMulticastGroupSourcesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRegisterTransitGatewayMulticastGroupSources' smart constructor.
+data RegisterTransitGatewayMulticastGroupSources = RegisterTransitGatewayMulticastGroupSources'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The group sources\' network interface IDs to register with the transit
+    -- gateway multicast group.
+    networkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterTransitGatewayMulticastGroupSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'registerTransitGatewayMulticastGroupSources_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupIpAddress', 'registerTransitGatewayMulticastGroupSources_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'networkInterfaceIds', 'registerTransitGatewayMulticastGroupSources_networkInterfaceIds' - The group sources\' network interface IDs to register with the transit
+-- gateway multicast group.
+--
+-- 'transitGatewayMulticastDomainId', 'registerTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newRegisterTransitGatewayMulticastGroupSources ::
+  RegisterTransitGatewayMulticastGroupSources
+newRegisterTransitGatewayMulticastGroupSources =
+  RegisterTransitGatewayMulticastGroupSources'
+    { dryRun =
+        Prelude.Nothing,
+      groupIpAddress =
+        Prelude.Nothing,
+      networkInterfaceIds =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+registerTransitGatewayMulticastGroupSources_dryRun :: Lens.Lens' RegisterTransitGatewayMulticastGroupSources (Prelude.Maybe Prelude.Bool)
+registerTransitGatewayMulticastGroupSources_dryRun = Lens.lens (\RegisterTransitGatewayMulticastGroupSources' {dryRun} -> dryRun) (\s@RegisterTransitGatewayMulticastGroupSources' {} a -> s {dryRun = a} :: RegisterTransitGatewayMulticastGroupSources)
+
+-- | The IP address assigned to the transit gateway multicast group.
+registerTransitGatewayMulticastGroupSources_groupIpAddress :: Lens.Lens' RegisterTransitGatewayMulticastGroupSources (Prelude.Maybe Prelude.Text)
+registerTransitGatewayMulticastGroupSources_groupIpAddress = Lens.lens (\RegisterTransitGatewayMulticastGroupSources' {groupIpAddress} -> groupIpAddress) (\s@RegisterTransitGatewayMulticastGroupSources' {} a -> s {groupIpAddress = a} :: RegisterTransitGatewayMulticastGroupSources)
+
+-- | The group sources\' network interface IDs to register with the transit
+-- gateway multicast group.
+registerTransitGatewayMulticastGroupSources_networkInterfaceIds :: Lens.Lens' RegisterTransitGatewayMulticastGroupSources (Prelude.Maybe [Prelude.Text])
+registerTransitGatewayMulticastGroupSources_networkInterfaceIds = Lens.lens (\RegisterTransitGatewayMulticastGroupSources' {networkInterfaceIds} -> networkInterfaceIds) (\s@RegisterTransitGatewayMulticastGroupSources' {} a -> s {networkInterfaceIds = a} :: RegisterTransitGatewayMulticastGroupSources) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway multicast domain.
+registerTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId :: Lens.Lens' RegisterTransitGatewayMulticastGroupSources (Prelude.Maybe Prelude.Text)
+registerTransitGatewayMulticastGroupSources_transitGatewayMulticastDomainId = Lens.lens (\RegisterTransitGatewayMulticastGroupSources' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@RegisterTransitGatewayMulticastGroupSources' {} a -> s {transitGatewayMulticastDomainId = a} :: RegisterTransitGatewayMulticastGroupSources)
+
+instance
+  Core.AWSRequest
+    RegisterTransitGatewayMulticastGroupSources
+  where
+  type
+    AWSResponse
+      RegisterTransitGatewayMulticastGroupSources =
+      RegisterTransitGatewayMulticastGroupSourcesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RegisterTransitGatewayMulticastGroupSourcesResponse'
+            Prelude.<$> (x Data..@? "registeredMulticastGroupSources")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RegisterTransitGatewayMulticastGroupSources
+  where
+  hashWithSalt
+    _salt
+    RegisterTransitGatewayMulticastGroupSources' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` networkInterfaceIds
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    RegisterTransitGatewayMulticastGroupSources
+  where
+  rnf RegisterTransitGatewayMulticastGroupSources' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupIpAddress
+      `Prelude.seq` Prelude.rnf networkInterfaceIds
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    RegisterTransitGatewayMulticastGroupSources
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    RegisterTransitGatewayMulticastGroupSources
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    RegisterTransitGatewayMulticastGroupSources
+  where
+  toQuery
+    RegisterTransitGatewayMulticastGroupSources' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "RegisterTransitGatewayMulticastGroupSources" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "GroupIpAddress" Data.=: groupIpAddress,
+          Data.toQuery
+            ( Data.toQueryList "NetworkInterfaceIds"
+                Prelude.<$> networkInterfaceIds
+            ),
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newRegisterTransitGatewayMulticastGroupSourcesResponse' smart constructor.
+data RegisterTransitGatewayMulticastGroupSourcesResponse = RegisterTransitGatewayMulticastGroupSourcesResponse'
+  { -- | Information about the transit gateway multicast group sources.
+    registeredMulticastGroupSources :: Prelude.Maybe TransitGatewayMulticastRegisteredGroupSources,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterTransitGatewayMulticastGroupSourcesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'registeredMulticastGroupSources', 'registerTransitGatewayMulticastGroupSourcesResponse_registeredMulticastGroupSources' - Information about the transit gateway multicast group sources.
+--
+-- 'httpStatus', 'registerTransitGatewayMulticastGroupSourcesResponse_httpStatus' - The response's http status code.
+newRegisterTransitGatewayMulticastGroupSourcesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RegisterTransitGatewayMulticastGroupSourcesResponse
+newRegisterTransitGatewayMulticastGroupSourcesResponse
+  pHttpStatus_ =
+    RegisterTransitGatewayMulticastGroupSourcesResponse'
+      { registeredMulticastGroupSources =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the transit gateway multicast group sources.
+registerTransitGatewayMulticastGroupSourcesResponse_registeredMulticastGroupSources :: Lens.Lens' RegisterTransitGatewayMulticastGroupSourcesResponse (Prelude.Maybe TransitGatewayMulticastRegisteredGroupSources)
+registerTransitGatewayMulticastGroupSourcesResponse_registeredMulticastGroupSources = Lens.lens (\RegisterTransitGatewayMulticastGroupSourcesResponse' {registeredMulticastGroupSources} -> registeredMulticastGroupSources) (\s@RegisterTransitGatewayMulticastGroupSourcesResponse' {} a -> s {registeredMulticastGroupSources = a} :: RegisterTransitGatewayMulticastGroupSourcesResponse)
+
+-- | The response's http status code.
+registerTransitGatewayMulticastGroupSourcesResponse_httpStatus :: Lens.Lens' RegisterTransitGatewayMulticastGroupSourcesResponse Prelude.Int
+registerTransitGatewayMulticastGroupSourcesResponse_httpStatus = Lens.lens (\RegisterTransitGatewayMulticastGroupSourcesResponse' {httpStatus} -> httpStatus) (\s@RegisterTransitGatewayMulticastGroupSourcesResponse' {} a -> s {httpStatus = a} :: RegisterTransitGatewayMulticastGroupSourcesResponse)
+
+instance
+  Prelude.NFData
+    RegisterTransitGatewayMulticastGroupSourcesResponse
+  where
+  rnf
+    RegisterTransitGatewayMulticastGroupSourcesResponse' {..} =
+      Prelude.rnf registeredMulticastGroupSources
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RejectTransitGatewayMulticastDomainAssociations.hs b/gen/Amazonka/EC2/RejectTransitGatewayMulticastDomainAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RejectTransitGatewayMulticastDomainAssociations.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RejectTransitGatewayMulticastDomainAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rejects a request to associate cross-account subnets with a transit
+-- gateway multicast domain.
+module Amazonka.EC2.RejectTransitGatewayMulticastDomainAssociations
+  ( -- * Creating a Request
+    RejectTransitGatewayMulticastDomainAssociations (..),
+    newRejectTransitGatewayMulticastDomainAssociations,
+
+    -- * Request Lenses
+    rejectTransitGatewayMulticastDomainAssociations_dryRun,
+    rejectTransitGatewayMulticastDomainAssociations_subnetIds,
+    rejectTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId,
+    rejectTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    RejectTransitGatewayMulticastDomainAssociationsResponse (..),
+    newRejectTransitGatewayMulticastDomainAssociationsResponse,
+
+    -- * Response Lenses
+    rejectTransitGatewayMulticastDomainAssociationsResponse_associations,
+    rejectTransitGatewayMulticastDomainAssociationsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectTransitGatewayMulticastDomainAssociations' smart constructor.
+data RejectTransitGatewayMulticastDomainAssociations = RejectTransitGatewayMulticastDomainAssociations'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the subnets to associate with the transit gateway multicast
+    -- domain.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectTransitGatewayMulticastDomainAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'rejectTransitGatewayMulticastDomainAssociations_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'subnetIds', 'rejectTransitGatewayMulticastDomainAssociations_subnetIds' - The IDs of the subnets to associate with the transit gateway multicast
+-- domain.
+--
+-- 'transitGatewayAttachmentId', 'rejectTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+--
+-- 'transitGatewayMulticastDomainId', 'rejectTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newRejectTransitGatewayMulticastDomainAssociations ::
+  RejectTransitGatewayMulticastDomainAssociations
+newRejectTransitGatewayMulticastDomainAssociations =
+  RejectTransitGatewayMulticastDomainAssociations'
+    { dryRun =
+        Prelude.Nothing,
+      subnetIds =
+        Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+rejectTransitGatewayMulticastDomainAssociations_dryRun :: Lens.Lens' RejectTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Bool)
+rejectTransitGatewayMulticastDomainAssociations_dryRun = Lens.lens (\RejectTransitGatewayMulticastDomainAssociations' {dryRun} -> dryRun) (\s@RejectTransitGatewayMulticastDomainAssociations' {} a -> s {dryRun = a} :: RejectTransitGatewayMulticastDomainAssociations)
+
+-- | The IDs of the subnets to associate with the transit gateway multicast
+-- domain.
+rejectTransitGatewayMulticastDomainAssociations_subnetIds :: Lens.Lens' RejectTransitGatewayMulticastDomainAssociations (Prelude.Maybe [Prelude.Text])
+rejectTransitGatewayMulticastDomainAssociations_subnetIds = Lens.lens (\RejectTransitGatewayMulticastDomainAssociations' {subnetIds} -> subnetIds) (\s@RejectTransitGatewayMulticastDomainAssociations' {} a -> s {subnetIds = a} :: RejectTransitGatewayMulticastDomainAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway attachment.
+rejectTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId :: Lens.Lens' RejectTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+rejectTransitGatewayMulticastDomainAssociations_transitGatewayAttachmentId = Lens.lens (\RejectTransitGatewayMulticastDomainAssociations' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@RejectTransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayAttachmentId = a} :: RejectTransitGatewayMulticastDomainAssociations)
+
+-- | The ID of the transit gateway multicast domain.
+rejectTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId :: Lens.Lens' RejectTransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+rejectTransitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId = Lens.lens (\RejectTransitGatewayMulticastDomainAssociations' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@RejectTransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayMulticastDomainId = a} :: RejectTransitGatewayMulticastDomainAssociations)
+
+instance
+  Core.AWSRequest
+    RejectTransitGatewayMulticastDomainAssociations
+  where
+  type
+    AWSResponse
+      RejectTransitGatewayMulticastDomainAssociations =
+      RejectTransitGatewayMulticastDomainAssociationsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RejectTransitGatewayMulticastDomainAssociationsResponse'
+            Prelude.<$> (x Data..@? "associations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RejectTransitGatewayMulticastDomainAssociations
+  where
+  hashWithSalt
+    _salt
+    RejectTransitGatewayMulticastDomainAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` subnetIds
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    RejectTransitGatewayMulticastDomainAssociations
+  where
+  rnf
+    RejectTransitGatewayMulticastDomainAssociations' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf subnetIds
+        `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    RejectTransitGatewayMulticastDomainAssociations
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    RejectTransitGatewayMulticastDomainAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    RejectTransitGatewayMulticastDomainAssociations
+  where
+  toQuery
+    RejectTransitGatewayMulticastDomainAssociations' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "RejectTransitGatewayMulticastDomainAssociations" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          Data.toQuery
+            (Data.toQueryList "SubnetIds" Prelude.<$> subnetIds),
+          "TransitGatewayAttachmentId"
+            Data.=: transitGatewayAttachmentId,
+          "TransitGatewayMulticastDomainId"
+            Data.=: transitGatewayMulticastDomainId
+        ]
+
+-- | /See:/ 'newRejectTransitGatewayMulticastDomainAssociationsResponse' smart constructor.
+data RejectTransitGatewayMulticastDomainAssociationsResponse = RejectTransitGatewayMulticastDomainAssociationsResponse'
+  { -- | Information about the multicast domain associations.
+    associations :: Prelude.Maybe TransitGatewayMulticastDomainAssociations,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectTransitGatewayMulticastDomainAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'rejectTransitGatewayMulticastDomainAssociationsResponse_associations' - Information about the multicast domain associations.
+--
+-- 'httpStatus', 'rejectTransitGatewayMulticastDomainAssociationsResponse_httpStatus' - The response's http status code.
+newRejectTransitGatewayMulticastDomainAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectTransitGatewayMulticastDomainAssociationsResponse
+newRejectTransitGatewayMulticastDomainAssociationsResponse
+  pHttpStatus_ =
+    RejectTransitGatewayMulticastDomainAssociationsResponse'
+      { associations =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Information about the multicast domain associations.
+rejectTransitGatewayMulticastDomainAssociationsResponse_associations :: Lens.Lens' RejectTransitGatewayMulticastDomainAssociationsResponse (Prelude.Maybe TransitGatewayMulticastDomainAssociations)
+rejectTransitGatewayMulticastDomainAssociationsResponse_associations = Lens.lens (\RejectTransitGatewayMulticastDomainAssociationsResponse' {associations} -> associations) (\s@RejectTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {associations = a} :: RejectTransitGatewayMulticastDomainAssociationsResponse)
+
+-- | The response's http status code.
+rejectTransitGatewayMulticastDomainAssociationsResponse_httpStatus :: Lens.Lens' RejectTransitGatewayMulticastDomainAssociationsResponse Prelude.Int
+rejectTransitGatewayMulticastDomainAssociationsResponse_httpStatus = Lens.lens (\RejectTransitGatewayMulticastDomainAssociationsResponse' {httpStatus} -> httpStatus) (\s@RejectTransitGatewayMulticastDomainAssociationsResponse' {} a -> s {httpStatus = a} :: RejectTransitGatewayMulticastDomainAssociationsResponse)
+
+instance
+  Prelude.NFData
+    RejectTransitGatewayMulticastDomainAssociationsResponse
+  where
+  rnf
+    RejectTransitGatewayMulticastDomainAssociationsResponse' {..} =
+      Prelude.rnf associations
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RejectTransitGatewayPeeringAttachment.hs b/gen/Amazonka/EC2/RejectTransitGatewayPeeringAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RejectTransitGatewayPeeringAttachment.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RejectTransitGatewayPeeringAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rejects a transit gateway peering attachment request.
+module Amazonka.EC2.RejectTransitGatewayPeeringAttachment
+  ( -- * Creating a Request
+    RejectTransitGatewayPeeringAttachment (..),
+    newRejectTransitGatewayPeeringAttachment,
+
+    -- * Request Lenses
+    rejectTransitGatewayPeeringAttachment_dryRun,
+    rejectTransitGatewayPeeringAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    RejectTransitGatewayPeeringAttachmentResponse (..),
+    newRejectTransitGatewayPeeringAttachmentResponse,
+
+    -- * Response Lenses
+    rejectTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment,
+    rejectTransitGatewayPeeringAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectTransitGatewayPeeringAttachment' smart constructor.
+data RejectTransitGatewayPeeringAttachment = RejectTransitGatewayPeeringAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the transit gateway peering attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectTransitGatewayPeeringAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'rejectTransitGatewayPeeringAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'rejectTransitGatewayPeeringAttachment_transitGatewayAttachmentId' - The ID of the transit gateway peering attachment.
+newRejectTransitGatewayPeeringAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  RejectTransitGatewayPeeringAttachment
+newRejectTransitGatewayPeeringAttachment
+  pTransitGatewayAttachmentId_ =
+    RejectTransitGatewayPeeringAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+rejectTransitGatewayPeeringAttachment_dryRun :: Lens.Lens' RejectTransitGatewayPeeringAttachment (Prelude.Maybe Prelude.Bool)
+rejectTransitGatewayPeeringAttachment_dryRun = Lens.lens (\RejectTransitGatewayPeeringAttachment' {dryRun} -> dryRun) (\s@RejectTransitGatewayPeeringAttachment' {} a -> s {dryRun = a} :: RejectTransitGatewayPeeringAttachment)
+
+-- | The ID of the transit gateway peering attachment.
+rejectTransitGatewayPeeringAttachment_transitGatewayAttachmentId :: Lens.Lens' RejectTransitGatewayPeeringAttachment Prelude.Text
+rejectTransitGatewayPeeringAttachment_transitGatewayAttachmentId = Lens.lens (\RejectTransitGatewayPeeringAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@RejectTransitGatewayPeeringAttachment' {} a -> s {transitGatewayAttachmentId = a} :: RejectTransitGatewayPeeringAttachment)
+
+instance
+  Core.AWSRequest
+    RejectTransitGatewayPeeringAttachment
+  where
+  type
+    AWSResponse
+      RejectTransitGatewayPeeringAttachment =
+      RejectTransitGatewayPeeringAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RejectTransitGatewayPeeringAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayPeeringAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RejectTransitGatewayPeeringAttachment
+  where
+  hashWithSalt
+    _salt
+    RejectTransitGatewayPeeringAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    RejectTransitGatewayPeeringAttachment
+  where
+  rnf RejectTransitGatewayPeeringAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    RejectTransitGatewayPeeringAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    RejectTransitGatewayPeeringAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    RejectTransitGatewayPeeringAttachment
+  where
+  toQuery RejectTransitGatewayPeeringAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "RejectTransitGatewayPeeringAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newRejectTransitGatewayPeeringAttachmentResponse' smart constructor.
+data RejectTransitGatewayPeeringAttachmentResponse = RejectTransitGatewayPeeringAttachmentResponse'
+  { -- | The transit gateway peering attachment.
+    transitGatewayPeeringAttachment :: Prelude.Maybe TransitGatewayPeeringAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectTransitGatewayPeeringAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayPeeringAttachment', 'rejectTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment' - The transit gateway peering attachment.
+--
+-- 'httpStatus', 'rejectTransitGatewayPeeringAttachmentResponse_httpStatus' - The response's http status code.
+newRejectTransitGatewayPeeringAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectTransitGatewayPeeringAttachmentResponse
+newRejectTransitGatewayPeeringAttachmentResponse
+  pHttpStatus_ =
+    RejectTransitGatewayPeeringAttachmentResponse'
+      { transitGatewayPeeringAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The transit gateway peering attachment.
+rejectTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment :: Lens.Lens' RejectTransitGatewayPeeringAttachmentResponse (Prelude.Maybe TransitGatewayPeeringAttachment)
+rejectTransitGatewayPeeringAttachmentResponse_transitGatewayPeeringAttachment = Lens.lens (\RejectTransitGatewayPeeringAttachmentResponse' {transitGatewayPeeringAttachment} -> transitGatewayPeeringAttachment) (\s@RejectTransitGatewayPeeringAttachmentResponse' {} a -> s {transitGatewayPeeringAttachment = a} :: RejectTransitGatewayPeeringAttachmentResponse)
+
+-- | The response's http status code.
+rejectTransitGatewayPeeringAttachmentResponse_httpStatus :: Lens.Lens' RejectTransitGatewayPeeringAttachmentResponse Prelude.Int
+rejectTransitGatewayPeeringAttachmentResponse_httpStatus = Lens.lens (\RejectTransitGatewayPeeringAttachmentResponse' {httpStatus} -> httpStatus) (\s@RejectTransitGatewayPeeringAttachmentResponse' {} a -> s {httpStatus = a} :: RejectTransitGatewayPeeringAttachmentResponse)
+
+instance
+  Prelude.NFData
+    RejectTransitGatewayPeeringAttachmentResponse
+  where
+  rnf
+    RejectTransitGatewayPeeringAttachmentResponse' {..} =
+      Prelude.rnf transitGatewayPeeringAttachment
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RejectTransitGatewayVpcAttachment.hs b/gen/Amazonka/EC2/RejectTransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RejectTransitGatewayVpcAttachment.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RejectTransitGatewayVpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rejects a request to attach a VPC to a transit gateway.
+--
+-- The VPC attachment must be in the @pendingAcceptance@ state. Use
+-- DescribeTransitGatewayVpcAttachments to view your pending VPC attachment
+-- requests. Use AcceptTransitGatewayVpcAttachment to accept a VPC
+-- attachment request.
+module Amazonka.EC2.RejectTransitGatewayVpcAttachment
+  ( -- * Creating a Request
+    RejectTransitGatewayVpcAttachment (..),
+    newRejectTransitGatewayVpcAttachment,
+
+    -- * Request Lenses
+    rejectTransitGatewayVpcAttachment_dryRun,
+    rejectTransitGatewayVpcAttachment_transitGatewayAttachmentId,
+
+    -- * Destructuring the Response
+    RejectTransitGatewayVpcAttachmentResponse (..),
+    newRejectTransitGatewayVpcAttachmentResponse,
+
+    -- * Response Lenses
+    rejectTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment,
+    rejectTransitGatewayVpcAttachmentResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectTransitGatewayVpcAttachment' smart constructor.
+data RejectTransitGatewayVpcAttachment = RejectTransitGatewayVpcAttachment'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectTransitGatewayVpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'rejectTransitGatewayVpcAttachment_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'rejectTransitGatewayVpcAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+newRejectTransitGatewayVpcAttachment ::
+  -- | 'transitGatewayAttachmentId'
+  Prelude.Text ->
+  RejectTransitGatewayVpcAttachment
+newRejectTransitGatewayVpcAttachment
+  pTransitGatewayAttachmentId_ =
+    RejectTransitGatewayVpcAttachment'
+      { dryRun =
+          Prelude.Nothing,
+        transitGatewayAttachmentId =
+          pTransitGatewayAttachmentId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+rejectTransitGatewayVpcAttachment_dryRun :: Lens.Lens' RejectTransitGatewayVpcAttachment (Prelude.Maybe Prelude.Bool)
+rejectTransitGatewayVpcAttachment_dryRun = Lens.lens (\RejectTransitGatewayVpcAttachment' {dryRun} -> dryRun) (\s@RejectTransitGatewayVpcAttachment' {} a -> s {dryRun = a} :: RejectTransitGatewayVpcAttachment)
+
+-- | The ID of the attachment.
+rejectTransitGatewayVpcAttachment_transitGatewayAttachmentId :: Lens.Lens' RejectTransitGatewayVpcAttachment Prelude.Text
+rejectTransitGatewayVpcAttachment_transitGatewayAttachmentId = Lens.lens (\RejectTransitGatewayVpcAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@RejectTransitGatewayVpcAttachment' {} a -> s {transitGatewayAttachmentId = a} :: RejectTransitGatewayVpcAttachment)
+
+instance
+  Core.AWSRequest
+    RejectTransitGatewayVpcAttachment
+  where
+  type
+    AWSResponse RejectTransitGatewayVpcAttachment =
+      RejectTransitGatewayVpcAttachmentResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RejectTransitGatewayVpcAttachmentResponse'
+            Prelude.<$> (x Data..@? "transitGatewayVpcAttachment")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RejectTransitGatewayVpcAttachment
+  where
+  hashWithSalt
+    _salt
+    RejectTransitGatewayVpcAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    RejectTransitGatewayVpcAttachment
+  where
+  rnf RejectTransitGatewayVpcAttachment' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+
+instance
+  Data.ToHeaders
+    RejectTransitGatewayVpcAttachment
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    RejectTransitGatewayVpcAttachment
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    RejectTransitGatewayVpcAttachment
+  where
+  toQuery RejectTransitGatewayVpcAttachment' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "RejectTransitGatewayVpcAttachment" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId
+      ]
+
+-- | /See:/ 'newRejectTransitGatewayVpcAttachmentResponse' smart constructor.
+data RejectTransitGatewayVpcAttachmentResponse = RejectTransitGatewayVpcAttachmentResponse'
+  { -- | Information about the attachment.
+    transitGatewayVpcAttachment :: Prelude.Maybe TransitGatewayVpcAttachment,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectTransitGatewayVpcAttachmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'transitGatewayVpcAttachment', 'rejectTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment' - Information about the attachment.
+--
+-- 'httpStatus', 'rejectTransitGatewayVpcAttachmentResponse_httpStatus' - The response's http status code.
+newRejectTransitGatewayVpcAttachmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectTransitGatewayVpcAttachmentResponse
+newRejectTransitGatewayVpcAttachmentResponse
+  pHttpStatus_ =
+    RejectTransitGatewayVpcAttachmentResponse'
+      { transitGatewayVpcAttachment =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the attachment.
+rejectTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment :: Lens.Lens' RejectTransitGatewayVpcAttachmentResponse (Prelude.Maybe TransitGatewayVpcAttachment)
+rejectTransitGatewayVpcAttachmentResponse_transitGatewayVpcAttachment = Lens.lens (\RejectTransitGatewayVpcAttachmentResponse' {transitGatewayVpcAttachment} -> transitGatewayVpcAttachment) (\s@RejectTransitGatewayVpcAttachmentResponse' {} a -> s {transitGatewayVpcAttachment = a} :: RejectTransitGatewayVpcAttachmentResponse)
+
+-- | The response's http status code.
+rejectTransitGatewayVpcAttachmentResponse_httpStatus :: Lens.Lens' RejectTransitGatewayVpcAttachmentResponse Prelude.Int
+rejectTransitGatewayVpcAttachmentResponse_httpStatus = Lens.lens (\RejectTransitGatewayVpcAttachmentResponse' {httpStatus} -> httpStatus) (\s@RejectTransitGatewayVpcAttachmentResponse' {} a -> s {httpStatus = a} :: RejectTransitGatewayVpcAttachmentResponse)
+
+instance
+  Prelude.NFData
+    RejectTransitGatewayVpcAttachmentResponse
+  where
+  rnf RejectTransitGatewayVpcAttachmentResponse' {..} =
+    Prelude.rnf transitGatewayVpcAttachment
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RejectVpcEndpointConnections.hs b/gen/Amazonka/EC2/RejectVpcEndpointConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RejectVpcEndpointConnections.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RejectVpcEndpointConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rejects one or more VPC endpoint connection requests to your VPC
+-- endpoint service.
+module Amazonka.EC2.RejectVpcEndpointConnections
+  ( -- * Creating a Request
+    RejectVpcEndpointConnections (..),
+    newRejectVpcEndpointConnections,
+
+    -- * Request Lenses
+    rejectVpcEndpointConnections_dryRun,
+    rejectVpcEndpointConnections_serviceId,
+    rejectVpcEndpointConnections_vpcEndpointIds,
+
+    -- * Destructuring the Response
+    RejectVpcEndpointConnectionsResponse (..),
+    newRejectVpcEndpointConnectionsResponse,
+
+    -- * Response Lenses
+    rejectVpcEndpointConnectionsResponse_unsuccessful,
+    rejectVpcEndpointConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectVpcEndpointConnections' smart constructor.
+data RejectVpcEndpointConnections = RejectVpcEndpointConnections'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the service.
+    serviceId :: Prelude.Text,
+    -- | The IDs of one or more VPC endpoints.
+    vpcEndpointIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectVpcEndpointConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'rejectVpcEndpointConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'serviceId', 'rejectVpcEndpointConnections_serviceId' - The ID of the service.
+--
+-- 'vpcEndpointIds', 'rejectVpcEndpointConnections_vpcEndpointIds' - The IDs of one or more VPC endpoints.
+newRejectVpcEndpointConnections ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  RejectVpcEndpointConnections
+newRejectVpcEndpointConnections pServiceId_ =
+  RejectVpcEndpointConnections'
+    { dryRun =
+        Prelude.Nothing,
+      serviceId = pServiceId_,
+      vpcEndpointIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+rejectVpcEndpointConnections_dryRun :: Lens.Lens' RejectVpcEndpointConnections (Prelude.Maybe Prelude.Bool)
+rejectVpcEndpointConnections_dryRun = Lens.lens (\RejectVpcEndpointConnections' {dryRun} -> dryRun) (\s@RejectVpcEndpointConnections' {} a -> s {dryRun = a} :: RejectVpcEndpointConnections)
+
+-- | The ID of the service.
+rejectVpcEndpointConnections_serviceId :: Lens.Lens' RejectVpcEndpointConnections Prelude.Text
+rejectVpcEndpointConnections_serviceId = Lens.lens (\RejectVpcEndpointConnections' {serviceId} -> serviceId) (\s@RejectVpcEndpointConnections' {} a -> s {serviceId = a} :: RejectVpcEndpointConnections)
+
+-- | The IDs of one or more VPC endpoints.
+rejectVpcEndpointConnections_vpcEndpointIds :: Lens.Lens' RejectVpcEndpointConnections [Prelude.Text]
+rejectVpcEndpointConnections_vpcEndpointIds = Lens.lens (\RejectVpcEndpointConnections' {vpcEndpointIds} -> vpcEndpointIds) (\s@RejectVpcEndpointConnections' {} a -> s {vpcEndpointIds = a} :: RejectVpcEndpointConnections) Prelude.. Lens.coerced
+
+instance Core.AWSRequest RejectVpcEndpointConnections where
+  type
+    AWSResponse RejectVpcEndpointConnections =
+      RejectVpcEndpointConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RejectVpcEndpointConnectionsResponse'
+            Prelude.<$> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RejectVpcEndpointConnections
+  where
+  hashWithSalt _salt RejectVpcEndpointConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` vpcEndpointIds
+
+instance Prelude.NFData RejectVpcEndpointConnections where
+  rnf RejectVpcEndpointConnections' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf vpcEndpointIds
+
+instance Data.ToHeaders RejectVpcEndpointConnections where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RejectVpcEndpointConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RejectVpcEndpointConnections where
+  toQuery RejectVpcEndpointConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "RejectVpcEndpointConnections" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ServiceId" Data.=: serviceId,
+        Data.toQueryList "VpcEndpointId" vpcEndpointIds
+      ]
+
+-- | /See:/ 'newRejectVpcEndpointConnectionsResponse' smart constructor.
+data RejectVpcEndpointConnectionsResponse = RejectVpcEndpointConnectionsResponse'
+  { -- | Information about the endpoints that were not rejected, if applicable.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectVpcEndpointConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unsuccessful', 'rejectVpcEndpointConnectionsResponse_unsuccessful' - Information about the endpoints that were not rejected, if applicable.
+--
+-- 'httpStatus', 'rejectVpcEndpointConnectionsResponse_httpStatus' - The response's http status code.
+newRejectVpcEndpointConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectVpcEndpointConnectionsResponse
+newRejectVpcEndpointConnectionsResponse pHttpStatus_ =
+  RejectVpcEndpointConnectionsResponse'
+    { unsuccessful =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the endpoints that were not rejected, if applicable.
+rejectVpcEndpointConnectionsResponse_unsuccessful :: Lens.Lens' RejectVpcEndpointConnectionsResponse (Prelude.Maybe [UnsuccessfulItem])
+rejectVpcEndpointConnectionsResponse_unsuccessful = Lens.lens (\RejectVpcEndpointConnectionsResponse' {unsuccessful} -> unsuccessful) (\s@RejectVpcEndpointConnectionsResponse' {} a -> s {unsuccessful = a} :: RejectVpcEndpointConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+rejectVpcEndpointConnectionsResponse_httpStatus :: Lens.Lens' RejectVpcEndpointConnectionsResponse Prelude.Int
+rejectVpcEndpointConnectionsResponse_httpStatus = Lens.lens (\RejectVpcEndpointConnectionsResponse' {httpStatus} -> httpStatus) (\s@RejectVpcEndpointConnectionsResponse' {} a -> s {httpStatus = a} :: RejectVpcEndpointConnectionsResponse)
+
+instance
+  Prelude.NFData
+    RejectVpcEndpointConnectionsResponse
+  where
+  rnf RejectVpcEndpointConnectionsResponse' {..} =
+    Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RejectVpcPeeringConnection.hs b/gen/Amazonka/EC2/RejectVpcPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RejectVpcPeeringConnection.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RejectVpcPeeringConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Rejects a VPC peering connection request. The VPC peering connection
+-- must be in the @pending-acceptance@ state. Use the
+-- DescribeVpcPeeringConnections request to view your outstanding VPC
+-- peering connection requests. To delete an active VPC peering connection,
+-- or to delete a VPC peering connection request that you initiated, use
+-- DeleteVpcPeeringConnection.
+module Amazonka.EC2.RejectVpcPeeringConnection
+  ( -- * Creating a Request
+    RejectVpcPeeringConnection (..),
+    newRejectVpcPeeringConnection,
+
+    -- * Request Lenses
+    rejectVpcPeeringConnection_dryRun,
+    rejectVpcPeeringConnection_vpcPeeringConnectionId,
+
+    -- * Destructuring the Response
+    RejectVpcPeeringConnectionResponse (..),
+    newRejectVpcPeeringConnectionResponse,
+
+    -- * Response Lenses
+    rejectVpcPeeringConnectionResponse_return,
+    rejectVpcPeeringConnectionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRejectVpcPeeringConnection' smart constructor.
+data RejectVpcPeeringConnection = RejectVpcPeeringConnection'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectVpcPeeringConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'rejectVpcPeeringConnection_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'vpcPeeringConnectionId', 'rejectVpcPeeringConnection_vpcPeeringConnectionId' - The ID of the VPC peering connection.
+newRejectVpcPeeringConnection ::
+  -- | 'vpcPeeringConnectionId'
+  Prelude.Text ->
+  RejectVpcPeeringConnection
+newRejectVpcPeeringConnection
+  pVpcPeeringConnectionId_ =
+    RejectVpcPeeringConnection'
+      { dryRun =
+          Prelude.Nothing,
+        vpcPeeringConnectionId =
+          pVpcPeeringConnectionId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+rejectVpcPeeringConnection_dryRun :: Lens.Lens' RejectVpcPeeringConnection (Prelude.Maybe Prelude.Bool)
+rejectVpcPeeringConnection_dryRun = Lens.lens (\RejectVpcPeeringConnection' {dryRun} -> dryRun) (\s@RejectVpcPeeringConnection' {} a -> s {dryRun = a} :: RejectVpcPeeringConnection)
+
+-- | The ID of the VPC peering connection.
+rejectVpcPeeringConnection_vpcPeeringConnectionId :: Lens.Lens' RejectVpcPeeringConnection Prelude.Text
+rejectVpcPeeringConnection_vpcPeeringConnectionId = Lens.lens (\RejectVpcPeeringConnection' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@RejectVpcPeeringConnection' {} a -> s {vpcPeeringConnectionId = a} :: RejectVpcPeeringConnection)
+
+instance Core.AWSRequest RejectVpcPeeringConnection where
+  type
+    AWSResponse RejectVpcPeeringConnection =
+      RejectVpcPeeringConnectionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RejectVpcPeeringConnectionResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RejectVpcPeeringConnection where
+  hashWithSalt _salt RejectVpcPeeringConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData RejectVpcPeeringConnection where
+  rnf RejectVpcPeeringConnection' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+
+instance Data.ToHeaders RejectVpcPeeringConnection where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RejectVpcPeeringConnection where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RejectVpcPeeringConnection where
+  toQuery RejectVpcPeeringConnection' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RejectVpcPeeringConnection" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId
+      ]
+
+-- | /See:/ 'newRejectVpcPeeringConnectionResponse' smart constructor.
+data RejectVpcPeeringConnectionResponse = RejectVpcPeeringConnectionResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RejectVpcPeeringConnectionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'rejectVpcPeeringConnectionResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'rejectVpcPeeringConnectionResponse_httpStatus' - The response's http status code.
+newRejectVpcPeeringConnectionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RejectVpcPeeringConnectionResponse
+newRejectVpcPeeringConnectionResponse pHttpStatus_ =
+  RejectVpcPeeringConnectionResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+rejectVpcPeeringConnectionResponse_return :: Lens.Lens' RejectVpcPeeringConnectionResponse (Prelude.Maybe Prelude.Bool)
+rejectVpcPeeringConnectionResponse_return = Lens.lens (\RejectVpcPeeringConnectionResponse' {return'} -> return') (\s@RejectVpcPeeringConnectionResponse' {} a -> s {return' = a} :: RejectVpcPeeringConnectionResponse)
+
+-- | The response's http status code.
+rejectVpcPeeringConnectionResponse_httpStatus :: Lens.Lens' RejectVpcPeeringConnectionResponse Prelude.Int
+rejectVpcPeeringConnectionResponse_httpStatus = Lens.lens (\RejectVpcPeeringConnectionResponse' {httpStatus} -> httpStatus) (\s@RejectVpcPeeringConnectionResponse' {} a -> s {httpStatus = a} :: RejectVpcPeeringConnectionResponse)
+
+instance
+  Prelude.NFData
+    RejectVpcPeeringConnectionResponse
+  where
+  rnf RejectVpcPeeringConnectionResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReleaseAddress.hs b/gen/Amazonka/EC2/ReleaseAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReleaseAddress.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReleaseAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Releases the specified Elastic IP address.
+--
+-- [EC2-Classic, default VPC] Releasing an Elastic IP address automatically
+-- disassociates it from any instance that it\'s associated with. To
+-- disassociate an Elastic IP address without releasing it, use
+-- DisassociateAddress.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- [Nondefault VPC] You must use DisassociateAddress to disassociate the
+-- Elastic IP address before you can release it. Otherwise, Amazon EC2
+-- returns an error (@InvalidIPAddress.InUse@).
+--
+-- After releasing an Elastic IP address, it is released to the IP address
+-- pool. Be sure to update your DNS records and any servers or devices that
+-- communicate with the address. If you attempt to release an Elastic IP
+-- address that you already released, you\'ll get an @AuthFailure@ error if
+-- the address is already allocated to another Amazon Web Services account.
+--
+-- [EC2-VPC] After you release an Elastic IP address for use in a VPC, you
+-- might be able to recover it. For more information, see AllocateAddress.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ReleaseAddress
+  ( -- * Creating a Request
+    ReleaseAddress (..),
+    newReleaseAddress,
+
+    -- * Request Lenses
+    releaseAddress_allocationId,
+    releaseAddress_dryRun,
+    releaseAddress_networkBorderGroup,
+    releaseAddress_publicIp,
+
+    -- * Destructuring the Response
+    ReleaseAddressResponse (..),
+    newReleaseAddressResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReleaseAddress' smart constructor.
+data ReleaseAddress = ReleaseAddress'
+  { -- | [EC2-VPC] The allocation ID. Required for EC2-VPC.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The set of Availability Zones, Local Zones, or Wavelength Zones from
+    -- which Amazon Web Services advertises IP addresses.
+    --
+    -- If you provide an incorrect network border group, you receive an
+    -- @InvalidAddress.NotFound@ error.
+    --
+    -- You cannot use a network border group with EC2 Classic. If you attempt
+    -- this operation on EC2 classic, you receive an
+    -- @InvalidParameterCombination@ error.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReleaseAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'releaseAddress_allocationId' - [EC2-VPC] The allocation ID. Required for EC2-VPC.
+--
+-- 'dryRun', 'releaseAddress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'networkBorderGroup', 'releaseAddress_networkBorderGroup' - The set of Availability Zones, Local Zones, or Wavelength Zones from
+-- which Amazon Web Services advertises IP addresses.
+--
+-- If you provide an incorrect network border group, you receive an
+-- @InvalidAddress.NotFound@ error.
+--
+-- You cannot use a network border group with EC2 Classic. If you attempt
+-- this operation on EC2 classic, you receive an
+-- @InvalidParameterCombination@ error.
+--
+-- 'publicIp', 'releaseAddress_publicIp' - [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
+newReleaseAddress ::
+  ReleaseAddress
+newReleaseAddress =
+  ReleaseAddress'
+    { allocationId = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] The allocation ID. Required for EC2-VPC.
+releaseAddress_allocationId :: Lens.Lens' ReleaseAddress (Prelude.Maybe Prelude.Text)
+releaseAddress_allocationId = Lens.lens (\ReleaseAddress' {allocationId} -> allocationId) (\s@ReleaseAddress' {} a -> s {allocationId = a} :: ReleaseAddress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+releaseAddress_dryRun :: Lens.Lens' ReleaseAddress (Prelude.Maybe Prelude.Bool)
+releaseAddress_dryRun = Lens.lens (\ReleaseAddress' {dryRun} -> dryRun) (\s@ReleaseAddress' {} a -> s {dryRun = a} :: ReleaseAddress)
+
+-- | The set of Availability Zones, Local Zones, or Wavelength Zones from
+-- which Amazon Web Services advertises IP addresses.
+--
+-- If you provide an incorrect network border group, you receive an
+-- @InvalidAddress.NotFound@ error.
+--
+-- You cannot use a network border group with EC2 Classic. If you attempt
+-- this operation on EC2 classic, you receive an
+-- @InvalidParameterCombination@ error.
+releaseAddress_networkBorderGroup :: Lens.Lens' ReleaseAddress (Prelude.Maybe Prelude.Text)
+releaseAddress_networkBorderGroup = Lens.lens (\ReleaseAddress' {networkBorderGroup} -> networkBorderGroup) (\s@ReleaseAddress' {} a -> s {networkBorderGroup = a} :: ReleaseAddress)
+
+-- | [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
+releaseAddress_publicIp :: Lens.Lens' ReleaseAddress (Prelude.Maybe Prelude.Text)
+releaseAddress_publicIp = Lens.lens (\ReleaseAddress' {publicIp} -> publicIp) (\s@ReleaseAddress' {} a -> s {publicIp = a} :: ReleaseAddress)
+
+instance Core.AWSRequest ReleaseAddress where
+  type
+    AWSResponse ReleaseAddress =
+      ReleaseAddressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ReleaseAddressResponse'
+
+instance Prelude.Hashable ReleaseAddress where
+  hashWithSalt _salt ReleaseAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` networkBorderGroup
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData ReleaseAddress where
+  rnf ReleaseAddress' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf networkBorderGroup
+      `Prelude.seq` Prelude.rnf publicIp
+
+instance Data.ToHeaders ReleaseAddress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReleaseAddress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReleaseAddress where
+  toQuery ReleaseAddress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReleaseAddress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AllocationId" Data.=: allocationId,
+        "DryRun" Data.=: dryRun,
+        "NetworkBorderGroup" Data.=: networkBorderGroup,
+        "PublicIp" Data.=: publicIp
+      ]
+
+-- | /See:/ 'newReleaseAddressResponse' smart constructor.
+data ReleaseAddressResponse = ReleaseAddressResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReleaseAddressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newReleaseAddressResponse ::
+  ReleaseAddressResponse
+newReleaseAddressResponse = ReleaseAddressResponse'
+
+instance Prelude.NFData ReleaseAddressResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ReleaseHosts.hs b/gen/Amazonka/EC2/ReleaseHosts.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReleaseHosts.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReleaseHosts
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- When you no longer want to use an On-Demand Dedicated Host it can be
+-- released. On-Demand billing is stopped and the host goes into @released@
+-- state. The host ID of Dedicated Hosts that have been released can no
+-- longer be specified in another request, for example, to modify the host.
+-- You must stop or terminate all instances on a host before it can be
+-- released.
+--
+-- When Dedicated Hosts are released, it may take some time for them to
+-- stop counting toward your limit and you may receive capacity errors when
+-- trying to allocate new Dedicated Hosts. Wait a few minutes and then try
+-- again.
+--
+-- Released hosts still appear in a DescribeHosts response.
+module Amazonka.EC2.ReleaseHosts
+  ( -- * Creating a Request
+    ReleaseHosts (..),
+    newReleaseHosts,
+
+    -- * Request Lenses
+    releaseHosts_hostIds,
+
+    -- * Destructuring the Response
+    ReleaseHostsResponse (..),
+    newReleaseHostsResponse,
+
+    -- * Response Lenses
+    releaseHostsResponse_successful,
+    releaseHostsResponse_unsuccessful,
+    releaseHostsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReleaseHosts' smart constructor.
+data ReleaseHosts = ReleaseHosts'
+  { -- | The IDs of the Dedicated Hosts to release.
+    hostIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReleaseHosts' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hostIds', 'releaseHosts_hostIds' - The IDs of the Dedicated Hosts to release.
+newReleaseHosts ::
+  ReleaseHosts
+newReleaseHosts =
+  ReleaseHosts' {hostIds = Prelude.mempty}
+
+-- | The IDs of the Dedicated Hosts to release.
+releaseHosts_hostIds :: Lens.Lens' ReleaseHosts [Prelude.Text]
+releaseHosts_hostIds = Lens.lens (\ReleaseHosts' {hostIds} -> hostIds) (\s@ReleaseHosts' {} a -> s {hostIds = a} :: ReleaseHosts) Prelude.. Lens.coerced
+
+instance Core.AWSRequest ReleaseHosts where
+  type AWSResponse ReleaseHosts = ReleaseHostsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ReleaseHostsResponse'
+            Prelude.<$> ( x
+                            Data..@? "successful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unsuccessful"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ReleaseHosts where
+  hashWithSalt _salt ReleaseHosts' {..} =
+    _salt `Prelude.hashWithSalt` hostIds
+
+instance Prelude.NFData ReleaseHosts where
+  rnf ReleaseHosts' {..} = Prelude.rnf hostIds
+
+instance Data.ToHeaders ReleaseHosts where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReleaseHosts where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReleaseHosts where
+  toQuery ReleaseHosts' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReleaseHosts" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQueryList "HostId" hostIds
+      ]
+
+-- | /See:/ 'newReleaseHostsResponse' smart constructor.
+data ReleaseHostsResponse = ReleaseHostsResponse'
+  { -- | The IDs of the Dedicated Hosts that were successfully released.
+    successful :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the Dedicated Hosts that could not be released, including an
+    -- error message.
+    unsuccessful :: Prelude.Maybe [UnsuccessfulItem],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReleaseHostsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'successful', 'releaseHostsResponse_successful' - The IDs of the Dedicated Hosts that were successfully released.
+--
+-- 'unsuccessful', 'releaseHostsResponse_unsuccessful' - The IDs of the Dedicated Hosts that could not be released, including an
+-- error message.
+--
+-- 'httpStatus', 'releaseHostsResponse_httpStatus' - The response's http status code.
+newReleaseHostsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReleaseHostsResponse
+newReleaseHostsResponse pHttpStatus_ =
+  ReleaseHostsResponse'
+    { successful = Prelude.Nothing,
+      unsuccessful = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IDs of the Dedicated Hosts that were successfully released.
+releaseHostsResponse_successful :: Lens.Lens' ReleaseHostsResponse (Prelude.Maybe [Prelude.Text])
+releaseHostsResponse_successful = Lens.lens (\ReleaseHostsResponse' {successful} -> successful) (\s@ReleaseHostsResponse' {} a -> s {successful = a} :: ReleaseHostsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the Dedicated Hosts that could not be released, including an
+-- error message.
+releaseHostsResponse_unsuccessful :: Lens.Lens' ReleaseHostsResponse (Prelude.Maybe [UnsuccessfulItem])
+releaseHostsResponse_unsuccessful = Lens.lens (\ReleaseHostsResponse' {unsuccessful} -> unsuccessful) (\s@ReleaseHostsResponse' {} a -> s {unsuccessful = a} :: ReleaseHostsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+releaseHostsResponse_httpStatus :: Lens.Lens' ReleaseHostsResponse Prelude.Int
+releaseHostsResponse_httpStatus = Lens.lens (\ReleaseHostsResponse' {httpStatus} -> httpStatus) (\s@ReleaseHostsResponse' {} a -> s {httpStatus = a} :: ReleaseHostsResponse)
+
+instance Prelude.NFData ReleaseHostsResponse where
+  rnf ReleaseHostsResponse' {..} =
+    Prelude.rnf successful
+      `Prelude.seq` Prelude.rnf unsuccessful
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReleaseIpamPoolAllocation.hs b/gen/Amazonka/EC2/ReleaseIpamPoolAllocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReleaseIpamPoolAllocation.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReleaseIpamPoolAllocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Release an allocation within an IPAM pool. You can only use this action
+-- to release manual allocations. To remove an allocation for a resource
+-- without deleting the resource, set its monitored state to false using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyIpamResourceCidr.html ModifyIpamResourceCidr>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/release-pool-alloc-ipam.html Release an allocation>
+-- in the /Amazon VPC IPAM User Guide/.
+module Amazonka.EC2.ReleaseIpamPoolAllocation
+  ( -- * Creating a Request
+    ReleaseIpamPoolAllocation (..),
+    newReleaseIpamPoolAllocation,
+
+    -- * Request Lenses
+    releaseIpamPoolAllocation_dryRun,
+    releaseIpamPoolAllocation_ipamPoolId,
+    releaseIpamPoolAllocation_cidr,
+    releaseIpamPoolAllocation_ipamPoolAllocationId,
+
+    -- * Destructuring the Response
+    ReleaseIpamPoolAllocationResponse (..),
+    newReleaseIpamPoolAllocationResponse,
+
+    -- * Response Lenses
+    releaseIpamPoolAllocationResponse_success,
+    releaseIpamPoolAllocationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReleaseIpamPoolAllocation' smart constructor.
+data ReleaseIpamPoolAllocation = ReleaseIpamPoolAllocation'
+  { -- | A check for whether you have the required permissions for the action
+    -- without actually making the request and provides an error response. If
+    -- you have the required permissions, the error response is
+    -- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the IPAM pool which contains the allocation you want to
+    -- release.
+    ipamPoolId :: Prelude.Text,
+    -- | The CIDR of the allocation you want to release.
+    cidr :: Prelude.Text,
+    -- | The ID of the allocation.
+    ipamPoolAllocationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReleaseIpamPoolAllocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'releaseIpamPoolAllocation_dryRun' - A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ipamPoolId', 'releaseIpamPoolAllocation_ipamPoolId' - The ID of the IPAM pool which contains the allocation you want to
+-- release.
+--
+-- 'cidr', 'releaseIpamPoolAllocation_cidr' - The CIDR of the allocation you want to release.
+--
+-- 'ipamPoolAllocationId', 'releaseIpamPoolAllocation_ipamPoolAllocationId' - The ID of the allocation.
+newReleaseIpamPoolAllocation ::
+  -- | 'ipamPoolId'
+  Prelude.Text ->
+  -- | 'cidr'
+  Prelude.Text ->
+  -- | 'ipamPoolAllocationId'
+  Prelude.Text ->
+  ReleaseIpamPoolAllocation
+newReleaseIpamPoolAllocation
+  pIpamPoolId_
+  pCidr_
+  pIpamPoolAllocationId_ =
+    ReleaseIpamPoolAllocation'
+      { dryRun =
+          Prelude.Nothing,
+        ipamPoolId = pIpamPoolId_,
+        cidr = pCidr_,
+        ipamPoolAllocationId = pIpamPoolAllocationId_
+      }
+
+-- | A check for whether you have the required permissions for the action
+-- without actually making the request and provides an error response. If
+-- you have the required permissions, the error response is
+-- @DryRunOperation@. Otherwise, it is @UnauthorizedOperation@.
+releaseIpamPoolAllocation_dryRun :: Lens.Lens' ReleaseIpamPoolAllocation (Prelude.Maybe Prelude.Bool)
+releaseIpamPoolAllocation_dryRun = Lens.lens (\ReleaseIpamPoolAllocation' {dryRun} -> dryRun) (\s@ReleaseIpamPoolAllocation' {} a -> s {dryRun = a} :: ReleaseIpamPoolAllocation)
+
+-- | The ID of the IPAM pool which contains the allocation you want to
+-- release.
+releaseIpamPoolAllocation_ipamPoolId :: Lens.Lens' ReleaseIpamPoolAllocation Prelude.Text
+releaseIpamPoolAllocation_ipamPoolId = Lens.lens (\ReleaseIpamPoolAllocation' {ipamPoolId} -> ipamPoolId) (\s@ReleaseIpamPoolAllocation' {} a -> s {ipamPoolId = a} :: ReleaseIpamPoolAllocation)
+
+-- | The CIDR of the allocation you want to release.
+releaseIpamPoolAllocation_cidr :: Lens.Lens' ReleaseIpamPoolAllocation Prelude.Text
+releaseIpamPoolAllocation_cidr = Lens.lens (\ReleaseIpamPoolAllocation' {cidr} -> cidr) (\s@ReleaseIpamPoolAllocation' {} a -> s {cidr = a} :: ReleaseIpamPoolAllocation)
+
+-- | The ID of the allocation.
+releaseIpamPoolAllocation_ipamPoolAllocationId :: Lens.Lens' ReleaseIpamPoolAllocation Prelude.Text
+releaseIpamPoolAllocation_ipamPoolAllocationId = Lens.lens (\ReleaseIpamPoolAllocation' {ipamPoolAllocationId} -> ipamPoolAllocationId) (\s@ReleaseIpamPoolAllocation' {} a -> s {ipamPoolAllocationId = a} :: ReleaseIpamPoolAllocation)
+
+instance Core.AWSRequest ReleaseIpamPoolAllocation where
+  type
+    AWSResponse ReleaseIpamPoolAllocation =
+      ReleaseIpamPoolAllocationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ReleaseIpamPoolAllocationResponse'
+            Prelude.<$> (x Data..@? "success")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ReleaseIpamPoolAllocation where
+  hashWithSalt _salt ReleaseIpamPoolAllocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ipamPoolId
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` ipamPoolAllocationId
+
+instance Prelude.NFData ReleaseIpamPoolAllocation where
+  rnf ReleaseIpamPoolAllocation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ipamPoolId
+      `Prelude.seq` Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf ipamPoolAllocationId
+
+instance Data.ToHeaders ReleaseIpamPoolAllocation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReleaseIpamPoolAllocation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReleaseIpamPoolAllocation where
+  toQuery ReleaseIpamPoolAllocation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReleaseIpamPoolAllocation" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "IpamPoolId" Data.=: ipamPoolId,
+        "Cidr" Data.=: cidr,
+        "IpamPoolAllocationId" Data.=: ipamPoolAllocationId
+      ]
+
+-- | /See:/ 'newReleaseIpamPoolAllocationResponse' smart constructor.
+data ReleaseIpamPoolAllocationResponse = ReleaseIpamPoolAllocationResponse'
+  { -- | Indicates if the release was successful.
+    success :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReleaseIpamPoolAllocationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'success', 'releaseIpamPoolAllocationResponse_success' - Indicates if the release was successful.
+--
+-- 'httpStatus', 'releaseIpamPoolAllocationResponse_httpStatus' - The response's http status code.
+newReleaseIpamPoolAllocationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReleaseIpamPoolAllocationResponse
+newReleaseIpamPoolAllocationResponse pHttpStatus_ =
+  ReleaseIpamPoolAllocationResponse'
+    { success =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates if the release was successful.
+releaseIpamPoolAllocationResponse_success :: Lens.Lens' ReleaseIpamPoolAllocationResponse (Prelude.Maybe Prelude.Bool)
+releaseIpamPoolAllocationResponse_success = Lens.lens (\ReleaseIpamPoolAllocationResponse' {success} -> success) (\s@ReleaseIpamPoolAllocationResponse' {} a -> s {success = a} :: ReleaseIpamPoolAllocationResponse)
+
+-- | The response's http status code.
+releaseIpamPoolAllocationResponse_httpStatus :: Lens.Lens' ReleaseIpamPoolAllocationResponse Prelude.Int
+releaseIpamPoolAllocationResponse_httpStatus = Lens.lens (\ReleaseIpamPoolAllocationResponse' {httpStatus} -> httpStatus) (\s@ReleaseIpamPoolAllocationResponse' {} a -> s {httpStatus = a} :: ReleaseIpamPoolAllocationResponse)
+
+instance
+  Prelude.NFData
+    ReleaseIpamPoolAllocationResponse
+  where
+  rnf ReleaseIpamPoolAllocationResponse' {..} =
+    Prelude.rnf success
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReplaceIamInstanceProfileAssociation.hs b/gen/Amazonka/EC2/ReplaceIamInstanceProfileAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReplaceIamInstanceProfileAssociation.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReplaceIamInstanceProfileAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces an IAM instance profile for the specified running instance. You
+-- can use this action to change the IAM instance profile that\'s
+-- associated with an instance without having to disassociate the existing
+-- IAM instance profile first.
+--
+-- Use DescribeIamInstanceProfileAssociations to get the association ID.
+module Amazonka.EC2.ReplaceIamInstanceProfileAssociation
+  ( -- * Creating a Request
+    ReplaceIamInstanceProfileAssociation (..),
+    newReplaceIamInstanceProfileAssociation,
+
+    -- * Request Lenses
+    replaceIamInstanceProfileAssociation_iamInstanceProfile,
+    replaceIamInstanceProfileAssociation_associationId,
+
+    -- * Destructuring the Response
+    ReplaceIamInstanceProfileAssociationResponse (..),
+    newReplaceIamInstanceProfileAssociationResponse,
+
+    -- * Response Lenses
+    replaceIamInstanceProfileAssociationResponse_iamInstanceProfileAssociation,
+    replaceIamInstanceProfileAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReplaceIamInstanceProfileAssociation' smart constructor.
+data ReplaceIamInstanceProfileAssociation = ReplaceIamInstanceProfileAssociation'
+  { -- | The IAM instance profile.
+    iamInstanceProfile :: IamInstanceProfileSpecification,
+    -- | The ID of the existing IAM instance profile association.
+    associationId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceIamInstanceProfileAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamInstanceProfile', 'replaceIamInstanceProfileAssociation_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'associationId', 'replaceIamInstanceProfileAssociation_associationId' - The ID of the existing IAM instance profile association.
+newReplaceIamInstanceProfileAssociation ::
+  -- | 'iamInstanceProfile'
+  IamInstanceProfileSpecification ->
+  -- | 'associationId'
+  Prelude.Text ->
+  ReplaceIamInstanceProfileAssociation
+newReplaceIamInstanceProfileAssociation
+  pIamInstanceProfile_
+  pAssociationId_ =
+    ReplaceIamInstanceProfileAssociation'
+      { iamInstanceProfile =
+          pIamInstanceProfile_,
+        associationId = pAssociationId_
+      }
+
+-- | The IAM instance profile.
+replaceIamInstanceProfileAssociation_iamInstanceProfile :: Lens.Lens' ReplaceIamInstanceProfileAssociation IamInstanceProfileSpecification
+replaceIamInstanceProfileAssociation_iamInstanceProfile = Lens.lens (\ReplaceIamInstanceProfileAssociation' {iamInstanceProfile} -> iamInstanceProfile) (\s@ReplaceIamInstanceProfileAssociation' {} a -> s {iamInstanceProfile = a} :: ReplaceIamInstanceProfileAssociation)
+
+-- | The ID of the existing IAM instance profile association.
+replaceIamInstanceProfileAssociation_associationId :: Lens.Lens' ReplaceIamInstanceProfileAssociation Prelude.Text
+replaceIamInstanceProfileAssociation_associationId = Lens.lens (\ReplaceIamInstanceProfileAssociation' {associationId} -> associationId) (\s@ReplaceIamInstanceProfileAssociation' {} a -> s {associationId = a} :: ReplaceIamInstanceProfileAssociation)
+
+instance
+  Core.AWSRequest
+    ReplaceIamInstanceProfileAssociation
+  where
+  type
+    AWSResponse ReplaceIamInstanceProfileAssociation =
+      ReplaceIamInstanceProfileAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ReplaceIamInstanceProfileAssociationResponse'
+            Prelude.<$> (x Data..@? "iamInstanceProfileAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ReplaceIamInstanceProfileAssociation
+  where
+  hashWithSalt
+    _salt
+    ReplaceIamInstanceProfileAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` iamInstanceProfile
+        `Prelude.hashWithSalt` associationId
+
+instance
+  Prelude.NFData
+    ReplaceIamInstanceProfileAssociation
+  where
+  rnf ReplaceIamInstanceProfileAssociation' {..} =
+    Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf associationId
+
+instance
+  Data.ToHeaders
+    ReplaceIamInstanceProfileAssociation
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    ReplaceIamInstanceProfileAssociation
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    ReplaceIamInstanceProfileAssociation
+  where
+  toQuery ReplaceIamInstanceProfileAssociation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ReplaceIamInstanceProfileAssociation" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "AssociationId" Data.=: associationId
+      ]
+
+-- | /See:/ 'newReplaceIamInstanceProfileAssociationResponse' smart constructor.
+data ReplaceIamInstanceProfileAssociationResponse = ReplaceIamInstanceProfileAssociationResponse'
+  { -- | Information about the IAM instance profile association.
+    iamInstanceProfileAssociation :: Prelude.Maybe IamInstanceProfileAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceIamInstanceProfileAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'iamInstanceProfileAssociation', 'replaceIamInstanceProfileAssociationResponse_iamInstanceProfileAssociation' - Information about the IAM instance profile association.
+--
+-- 'httpStatus', 'replaceIamInstanceProfileAssociationResponse_httpStatus' - The response's http status code.
+newReplaceIamInstanceProfileAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReplaceIamInstanceProfileAssociationResponse
+newReplaceIamInstanceProfileAssociationResponse
+  pHttpStatus_ =
+    ReplaceIamInstanceProfileAssociationResponse'
+      { iamInstanceProfileAssociation =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the IAM instance profile association.
+replaceIamInstanceProfileAssociationResponse_iamInstanceProfileAssociation :: Lens.Lens' ReplaceIamInstanceProfileAssociationResponse (Prelude.Maybe IamInstanceProfileAssociation)
+replaceIamInstanceProfileAssociationResponse_iamInstanceProfileAssociation = Lens.lens (\ReplaceIamInstanceProfileAssociationResponse' {iamInstanceProfileAssociation} -> iamInstanceProfileAssociation) (\s@ReplaceIamInstanceProfileAssociationResponse' {} a -> s {iamInstanceProfileAssociation = a} :: ReplaceIamInstanceProfileAssociationResponse)
+
+-- | The response's http status code.
+replaceIamInstanceProfileAssociationResponse_httpStatus :: Lens.Lens' ReplaceIamInstanceProfileAssociationResponse Prelude.Int
+replaceIamInstanceProfileAssociationResponse_httpStatus = Lens.lens (\ReplaceIamInstanceProfileAssociationResponse' {httpStatus} -> httpStatus) (\s@ReplaceIamInstanceProfileAssociationResponse' {} a -> s {httpStatus = a} :: ReplaceIamInstanceProfileAssociationResponse)
+
+instance
+  Prelude.NFData
+    ReplaceIamInstanceProfileAssociationResponse
+  where
+  rnf ReplaceIamInstanceProfileAssociationResponse' {..} =
+    Prelude.rnf iamInstanceProfileAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReplaceNetworkAclAssociation.hs b/gen/Amazonka/EC2/ReplaceNetworkAclAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReplaceNetworkAclAssociation.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReplaceNetworkAclAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes which network ACL a subnet is associated with. By default when
+-- you create a subnet, it\'s automatically associated with the default
+-- network ACL. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html Network ACLs>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- This is an idempotent operation.
+module Amazonka.EC2.ReplaceNetworkAclAssociation
+  ( -- * Creating a Request
+    ReplaceNetworkAclAssociation (..),
+    newReplaceNetworkAclAssociation,
+
+    -- * Request Lenses
+    replaceNetworkAclAssociation_dryRun,
+    replaceNetworkAclAssociation_associationId,
+    replaceNetworkAclAssociation_networkAclId,
+
+    -- * Destructuring the Response
+    ReplaceNetworkAclAssociationResponse (..),
+    newReplaceNetworkAclAssociationResponse,
+
+    -- * Response Lenses
+    replaceNetworkAclAssociationResponse_newAssociationId,
+    replaceNetworkAclAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReplaceNetworkAclAssociation' smart constructor.
+data ReplaceNetworkAclAssociation = ReplaceNetworkAclAssociation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the current association between the original network ACL and
+    -- the subnet.
+    associationId :: Prelude.Text,
+    -- | The ID of the new network ACL to associate with the subnet.
+    networkAclId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceNetworkAclAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'replaceNetworkAclAssociation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'associationId', 'replaceNetworkAclAssociation_associationId' - The ID of the current association between the original network ACL and
+-- the subnet.
+--
+-- 'networkAclId', 'replaceNetworkAclAssociation_networkAclId' - The ID of the new network ACL to associate with the subnet.
+newReplaceNetworkAclAssociation ::
+  -- | 'associationId'
+  Prelude.Text ->
+  -- | 'networkAclId'
+  Prelude.Text ->
+  ReplaceNetworkAclAssociation
+newReplaceNetworkAclAssociation
+  pAssociationId_
+  pNetworkAclId_ =
+    ReplaceNetworkAclAssociation'
+      { dryRun =
+          Prelude.Nothing,
+        associationId = pAssociationId_,
+        networkAclId = pNetworkAclId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+replaceNetworkAclAssociation_dryRun :: Lens.Lens' ReplaceNetworkAclAssociation (Prelude.Maybe Prelude.Bool)
+replaceNetworkAclAssociation_dryRun = Lens.lens (\ReplaceNetworkAclAssociation' {dryRun} -> dryRun) (\s@ReplaceNetworkAclAssociation' {} a -> s {dryRun = a} :: ReplaceNetworkAclAssociation)
+
+-- | The ID of the current association between the original network ACL and
+-- the subnet.
+replaceNetworkAclAssociation_associationId :: Lens.Lens' ReplaceNetworkAclAssociation Prelude.Text
+replaceNetworkAclAssociation_associationId = Lens.lens (\ReplaceNetworkAclAssociation' {associationId} -> associationId) (\s@ReplaceNetworkAclAssociation' {} a -> s {associationId = a} :: ReplaceNetworkAclAssociation)
+
+-- | The ID of the new network ACL to associate with the subnet.
+replaceNetworkAclAssociation_networkAclId :: Lens.Lens' ReplaceNetworkAclAssociation Prelude.Text
+replaceNetworkAclAssociation_networkAclId = Lens.lens (\ReplaceNetworkAclAssociation' {networkAclId} -> networkAclId) (\s@ReplaceNetworkAclAssociation' {} a -> s {networkAclId = a} :: ReplaceNetworkAclAssociation)
+
+instance Core.AWSRequest ReplaceNetworkAclAssociation where
+  type
+    AWSResponse ReplaceNetworkAclAssociation =
+      ReplaceNetworkAclAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ReplaceNetworkAclAssociationResponse'
+            Prelude.<$> (x Data..@? "newAssociationId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ReplaceNetworkAclAssociation
+  where
+  hashWithSalt _salt ReplaceNetworkAclAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` networkAclId
+
+instance Prelude.NFData ReplaceNetworkAclAssociation where
+  rnf ReplaceNetworkAclAssociation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf networkAclId
+
+instance Data.ToHeaders ReplaceNetworkAclAssociation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReplaceNetworkAclAssociation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReplaceNetworkAclAssociation where
+  toQuery ReplaceNetworkAclAssociation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ReplaceNetworkAclAssociation" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "AssociationId" Data.=: associationId,
+        "NetworkAclId" Data.=: networkAclId
+      ]
+
+-- | /See:/ 'newReplaceNetworkAclAssociationResponse' smart constructor.
+data ReplaceNetworkAclAssociationResponse = ReplaceNetworkAclAssociationResponse'
+  { -- | The ID of the new association.
+    newAssociationId' :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceNetworkAclAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'newAssociationId'', 'replaceNetworkAclAssociationResponse_newAssociationId' - The ID of the new association.
+--
+-- 'httpStatus', 'replaceNetworkAclAssociationResponse_httpStatus' - The response's http status code.
+newReplaceNetworkAclAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReplaceNetworkAclAssociationResponse
+newReplaceNetworkAclAssociationResponse pHttpStatus_ =
+  ReplaceNetworkAclAssociationResponse'
+    { newAssociationId' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the new association.
+replaceNetworkAclAssociationResponse_newAssociationId :: Lens.Lens' ReplaceNetworkAclAssociationResponse (Prelude.Maybe Prelude.Text)
+replaceNetworkAclAssociationResponse_newAssociationId = Lens.lens (\ReplaceNetworkAclAssociationResponse' {newAssociationId'} -> newAssociationId') (\s@ReplaceNetworkAclAssociationResponse' {} a -> s {newAssociationId' = a} :: ReplaceNetworkAclAssociationResponse)
+
+-- | The response's http status code.
+replaceNetworkAclAssociationResponse_httpStatus :: Lens.Lens' ReplaceNetworkAclAssociationResponse Prelude.Int
+replaceNetworkAclAssociationResponse_httpStatus = Lens.lens (\ReplaceNetworkAclAssociationResponse' {httpStatus} -> httpStatus) (\s@ReplaceNetworkAclAssociationResponse' {} a -> s {httpStatus = a} :: ReplaceNetworkAclAssociationResponse)
+
+instance
+  Prelude.NFData
+    ReplaceNetworkAclAssociationResponse
+  where
+  rnf ReplaceNetworkAclAssociationResponse' {..} =
+    Prelude.rnf newAssociationId'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReplaceNetworkAclEntry.hs b/gen/Amazonka/EC2/ReplaceNetworkAclEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReplaceNetworkAclEntry.hs
@@ -0,0 +1,310 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReplaceNetworkAclEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces an entry (rule) in a network ACL. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ACLs.html Network ACLs>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.ReplaceNetworkAclEntry
+  ( -- * Creating a Request
+    ReplaceNetworkAclEntry (..),
+    newReplaceNetworkAclEntry,
+
+    -- * Request Lenses
+    replaceNetworkAclEntry_cidrBlock,
+    replaceNetworkAclEntry_dryRun,
+    replaceNetworkAclEntry_icmpTypeCode,
+    replaceNetworkAclEntry_ipv6CidrBlock,
+    replaceNetworkAclEntry_portRange,
+    replaceNetworkAclEntry_egress,
+    replaceNetworkAclEntry_networkAclId,
+    replaceNetworkAclEntry_protocol,
+    replaceNetworkAclEntry_ruleAction,
+    replaceNetworkAclEntry_ruleNumber,
+
+    -- * Destructuring the Response
+    ReplaceNetworkAclEntryResponse (..),
+    newReplaceNetworkAclEntryResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReplaceNetworkAclEntry' smart constructor.
+data ReplaceNetworkAclEntry = ReplaceNetworkAclEntry'
+  { -- | The IPv4 network range to allow or deny, in CIDR notation (for example
+    -- @172.16.0.0\/24@).
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
+    -- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
+    icmpTypeCode :: Prelude.Maybe IcmpTypeCode,
+    -- | The IPv6 network range to allow or deny, in CIDR notation (for example
+    -- @2001:bd8:1234:1a00::\/64@).
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | TCP or UDP protocols: The range of ports the rule applies to. Required
+    -- if specifying protocol 6 (TCP) or 17 (UDP).
+    portRange :: Prelude.Maybe PortRange,
+    -- | Indicates whether to replace the egress rule.
+    --
+    -- Default: If no value is specified, we replace the ingress rule.
+    egress :: Prelude.Bool,
+    -- | The ID of the ACL.
+    networkAclId :: Prelude.Text,
+    -- | The protocol number. A value of \"-1\" means all protocols. If you
+    -- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
+    -- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
+    -- any ports or ICMP types or codes that you specify. If you specify
+    -- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
+    -- ICMP types and codes allowed, regardless of any that you specify. If you
+    -- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
+    -- must specify an ICMP type and code.
+    protocol :: Prelude.Text,
+    -- | Indicates whether to allow or deny the traffic that matches the rule.
+    ruleAction :: RuleAction,
+    -- | The rule number of the entry to replace.
+    ruleNumber :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceNetworkAclEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlock', 'replaceNetworkAclEntry_cidrBlock' - The IPv4 network range to allow or deny, in CIDR notation (for example
+-- @172.16.0.0\/24@).
+--
+-- 'dryRun', 'replaceNetworkAclEntry_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'icmpTypeCode', 'replaceNetworkAclEntry_icmpTypeCode' - ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
+-- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
+--
+-- 'ipv6CidrBlock', 'replaceNetworkAclEntry_ipv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation (for example
+-- @2001:bd8:1234:1a00::\/64@).
+--
+-- 'portRange', 'replaceNetworkAclEntry_portRange' - TCP or UDP protocols: The range of ports the rule applies to. Required
+-- if specifying protocol 6 (TCP) or 17 (UDP).
+--
+-- 'egress', 'replaceNetworkAclEntry_egress' - Indicates whether to replace the egress rule.
+--
+-- Default: If no value is specified, we replace the ingress rule.
+--
+-- 'networkAclId', 'replaceNetworkAclEntry_networkAclId' - The ID of the ACL.
+--
+-- 'protocol', 'replaceNetworkAclEntry_protocol' - The protocol number. A value of \"-1\" means all protocols. If you
+-- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
+-- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
+-- any ports or ICMP types or codes that you specify. If you specify
+-- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
+-- ICMP types and codes allowed, regardless of any that you specify. If you
+-- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
+-- must specify an ICMP type and code.
+--
+-- 'ruleAction', 'replaceNetworkAclEntry_ruleAction' - Indicates whether to allow or deny the traffic that matches the rule.
+--
+-- 'ruleNumber', 'replaceNetworkAclEntry_ruleNumber' - The rule number of the entry to replace.
+newReplaceNetworkAclEntry ::
+  -- | 'egress'
+  Prelude.Bool ->
+  -- | 'networkAclId'
+  Prelude.Text ->
+  -- | 'protocol'
+  Prelude.Text ->
+  -- | 'ruleAction'
+  RuleAction ->
+  -- | 'ruleNumber'
+  Prelude.Int ->
+  ReplaceNetworkAclEntry
+newReplaceNetworkAclEntry
+  pEgress_
+  pNetworkAclId_
+  pProtocol_
+  pRuleAction_
+  pRuleNumber_ =
+    ReplaceNetworkAclEntry'
+      { cidrBlock =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        icmpTypeCode = Prelude.Nothing,
+        ipv6CidrBlock = Prelude.Nothing,
+        portRange = Prelude.Nothing,
+        egress = pEgress_,
+        networkAclId = pNetworkAclId_,
+        protocol = pProtocol_,
+        ruleAction = pRuleAction_,
+        ruleNumber = pRuleNumber_
+      }
+
+-- | The IPv4 network range to allow or deny, in CIDR notation (for example
+-- @172.16.0.0\/24@).
+replaceNetworkAclEntry_cidrBlock :: Lens.Lens' ReplaceNetworkAclEntry (Prelude.Maybe Prelude.Text)
+replaceNetworkAclEntry_cidrBlock = Lens.lens (\ReplaceNetworkAclEntry' {cidrBlock} -> cidrBlock) (\s@ReplaceNetworkAclEntry' {} a -> s {cidrBlock = a} :: ReplaceNetworkAclEntry)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+replaceNetworkAclEntry_dryRun :: Lens.Lens' ReplaceNetworkAclEntry (Prelude.Maybe Prelude.Bool)
+replaceNetworkAclEntry_dryRun = Lens.lens (\ReplaceNetworkAclEntry' {dryRun} -> dryRun) (\s@ReplaceNetworkAclEntry' {} a -> s {dryRun = a} :: ReplaceNetworkAclEntry)
+
+-- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying
+-- protocol 1 (ICMP) or protocol 58 (ICMPv6) with an IPv6 CIDR block.
+replaceNetworkAclEntry_icmpTypeCode :: Lens.Lens' ReplaceNetworkAclEntry (Prelude.Maybe IcmpTypeCode)
+replaceNetworkAclEntry_icmpTypeCode = Lens.lens (\ReplaceNetworkAclEntry' {icmpTypeCode} -> icmpTypeCode) (\s@ReplaceNetworkAclEntry' {} a -> s {icmpTypeCode = a} :: ReplaceNetworkAclEntry)
+
+-- | The IPv6 network range to allow or deny, in CIDR notation (for example
+-- @2001:bd8:1234:1a00::\/64@).
+replaceNetworkAclEntry_ipv6CidrBlock :: Lens.Lens' ReplaceNetworkAclEntry (Prelude.Maybe Prelude.Text)
+replaceNetworkAclEntry_ipv6CidrBlock = Lens.lens (\ReplaceNetworkAclEntry' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@ReplaceNetworkAclEntry' {} a -> s {ipv6CidrBlock = a} :: ReplaceNetworkAclEntry)
+
+-- | TCP or UDP protocols: The range of ports the rule applies to. Required
+-- if specifying protocol 6 (TCP) or 17 (UDP).
+replaceNetworkAclEntry_portRange :: Lens.Lens' ReplaceNetworkAclEntry (Prelude.Maybe PortRange)
+replaceNetworkAclEntry_portRange = Lens.lens (\ReplaceNetworkAclEntry' {portRange} -> portRange) (\s@ReplaceNetworkAclEntry' {} a -> s {portRange = a} :: ReplaceNetworkAclEntry)
+
+-- | Indicates whether to replace the egress rule.
+--
+-- Default: If no value is specified, we replace the ingress rule.
+replaceNetworkAclEntry_egress :: Lens.Lens' ReplaceNetworkAclEntry Prelude.Bool
+replaceNetworkAclEntry_egress = Lens.lens (\ReplaceNetworkAclEntry' {egress} -> egress) (\s@ReplaceNetworkAclEntry' {} a -> s {egress = a} :: ReplaceNetworkAclEntry)
+
+-- | The ID of the ACL.
+replaceNetworkAclEntry_networkAclId :: Lens.Lens' ReplaceNetworkAclEntry Prelude.Text
+replaceNetworkAclEntry_networkAclId = Lens.lens (\ReplaceNetworkAclEntry' {networkAclId} -> networkAclId) (\s@ReplaceNetworkAclEntry' {} a -> s {networkAclId = a} :: ReplaceNetworkAclEntry)
+
+-- | The protocol number. A value of \"-1\" means all protocols. If you
+-- specify \"-1\" or a protocol number other than \"6\" (TCP), \"17\"
+-- (UDP), or \"1\" (ICMP), traffic on all ports is allowed, regardless of
+-- any ports or ICMP types or codes that you specify. If you specify
+-- protocol \"58\" (ICMPv6) and specify an IPv4 CIDR block, traffic for all
+-- ICMP types and codes allowed, regardless of any that you specify. If you
+-- specify protocol \"58\" (ICMPv6) and specify an IPv6 CIDR block, you
+-- must specify an ICMP type and code.
+replaceNetworkAclEntry_protocol :: Lens.Lens' ReplaceNetworkAclEntry Prelude.Text
+replaceNetworkAclEntry_protocol = Lens.lens (\ReplaceNetworkAclEntry' {protocol} -> protocol) (\s@ReplaceNetworkAclEntry' {} a -> s {protocol = a} :: ReplaceNetworkAclEntry)
+
+-- | Indicates whether to allow or deny the traffic that matches the rule.
+replaceNetworkAclEntry_ruleAction :: Lens.Lens' ReplaceNetworkAclEntry RuleAction
+replaceNetworkAclEntry_ruleAction = Lens.lens (\ReplaceNetworkAclEntry' {ruleAction} -> ruleAction) (\s@ReplaceNetworkAclEntry' {} a -> s {ruleAction = a} :: ReplaceNetworkAclEntry)
+
+-- | The rule number of the entry to replace.
+replaceNetworkAclEntry_ruleNumber :: Lens.Lens' ReplaceNetworkAclEntry Prelude.Int
+replaceNetworkAclEntry_ruleNumber = Lens.lens (\ReplaceNetworkAclEntry' {ruleNumber} -> ruleNumber) (\s@ReplaceNetworkAclEntry' {} a -> s {ruleNumber = a} :: ReplaceNetworkAclEntry)
+
+instance Core.AWSRequest ReplaceNetworkAclEntry where
+  type
+    AWSResponse ReplaceNetworkAclEntry =
+      ReplaceNetworkAclEntryResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ReplaceNetworkAclEntryResponse'
+
+instance Prelude.Hashable ReplaceNetworkAclEntry where
+  hashWithSalt _salt ReplaceNetworkAclEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` icmpTypeCode
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` portRange
+      `Prelude.hashWithSalt` egress
+      `Prelude.hashWithSalt` networkAclId
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` ruleNumber
+
+instance Prelude.NFData ReplaceNetworkAclEntry where
+  rnf ReplaceNetworkAclEntry' {..} =
+    Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf icmpTypeCode
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf portRange
+      `Prelude.seq` Prelude.rnf egress
+      `Prelude.seq` Prelude.rnf networkAclId
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf ruleNumber
+
+instance Data.ToHeaders ReplaceNetworkAclEntry where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReplaceNetworkAclEntry where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReplaceNetworkAclEntry where
+  toQuery ReplaceNetworkAclEntry' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReplaceNetworkAclEntry" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrBlock" Data.=: cidrBlock,
+        "DryRun" Data.=: dryRun,
+        "Icmp" Data.=: icmpTypeCode,
+        "Ipv6CidrBlock" Data.=: ipv6CidrBlock,
+        "PortRange" Data.=: portRange,
+        "Egress" Data.=: egress,
+        "NetworkAclId" Data.=: networkAclId,
+        "Protocol" Data.=: protocol,
+        "RuleAction" Data.=: ruleAction,
+        "RuleNumber" Data.=: ruleNumber
+      ]
+
+-- | /See:/ 'newReplaceNetworkAclEntryResponse' smart constructor.
+data ReplaceNetworkAclEntryResponse = ReplaceNetworkAclEntryResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceNetworkAclEntryResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newReplaceNetworkAclEntryResponse ::
+  ReplaceNetworkAclEntryResponse
+newReplaceNetworkAclEntryResponse =
+  ReplaceNetworkAclEntryResponse'
+
+instance
+  Prelude.NFData
+    ReplaceNetworkAclEntryResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ReplaceRoute.hs b/gen/Amazonka/EC2/ReplaceRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReplaceRoute.hs
@@ -0,0 +1,362 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReplaceRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces an existing route within a route table in a VPC.
+--
+-- You must specify either a destination CIDR block or a prefix list ID.
+-- You must also specify exactly one of the resources from the parameter
+-- list, or reset the local route to its default target.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+module Amazonka.EC2.ReplaceRoute
+  ( -- * Creating a Request
+    ReplaceRoute (..),
+    newReplaceRoute,
+
+    -- * Request Lenses
+    replaceRoute_carrierGatewayId,
+    replaceRoute_coreNetworkArn,
+    replaceRoute_destinationCidrBlock,
+    replaceRoute_destinationIpv6CidrBlock,
+    replaceRoute_destinationPrefixListId,
+    replaceRoute_dryRun,
+    replaceRoute_egressOnlyInternetGatewayId,
+    replaceRoute_gatewayId,
+    replaceRoute_instanceId,
+    replaceRoute_localGatewayId,
+    replaceRoute_localTarget,
+    replaceRoute_natGatewayId,
+    replaceRoute_networkInterfaceId,
+    replaceRoute_transitGatewayId,
+    replaceRoute_vpcEndpointId,
+    replaceRoute_vpcPeeringConnectionId,
+    replaceRoute_routeTableId,
+
+    -- * Destructuring the Response
+    ReplaceRouteResponse (..),
+    newReplaceRouteResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReplaceRoute' smart constructor.
+data ReplaceRoute = ReplaceRoute'
+  { -- | [IPv4 traffic only] The ID of a carrier gateway.
+    carrierGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the core network.
+    coreNetworkArn :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR address block used for the destination match. The value
+    -- that you provide must match the CIDR of an existing route in the table.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR address block used for the destination match. The value
+    -- that you provide must match the CIDR of an existing route in the table.
+    destinationIpv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list for the route.
+    destinationPrefixListId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | [IPv6 traffic only] The ID of an egress-only internet gateway.
+    egressOnlyInternetGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an internet gateway or virtual private gateway.
+    gatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a NAT instance in your VPC.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether to reset the local route to its default target
+    -- (@local@).
+    localTarget :: Prelude.Maybe Prelude.Bool,
+    -- | [IPv4 traffic only] The ID of a NAT gateway.
+    natGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints
+    -- only.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGatewayId', 'replaceRoute_carrierGatewayId' - [IPv4 traffic only] The ID of a carrier gateway.
+--
+-- 'coreNetworkArn', 'replaceRoute_coreNetworkArn' - The Amazon Resource Name (ARN) of the core network.
+--
+-- 'destinationCidrBlock', 'replaceRoute_destinationCidrBlock' - The IPv4 CIDR address block used for the destination match. The value
+-- that you provide must match the CIDR of an existing route in the table.
+--
+-- 'destinationIpv6CidrBlock', 'replaceRoute_destinationIpv6CidrBlock' - The IPv6 CIDR address block used for the destination match. The value
+-- that you provide must match the CIDR of an existing route in the table.
+--
+-- 'destinationPrefixListId', 'replaceRoute_destinationPrefixListId' - The ID of the prefix list for the route.
+--
+-- 'dryRun', 'replaceRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'egressOnlyInternetGatewayId', 'replaceRoute_egressOnlyInternetGatewayId' - [IPv6 traffic only] The ID of an egress-only internet gateway.
+--
+-- 'gatewayId', 'replaceRoute_gatewayId' - The ID of an internet gateway or virtual private gateway.
+--
+-- 'instanceId', 'replaceRoute_instanceId' - The ID of a NAT instance in your VPC.
+--
+-- 'localGatewayId', 'replaceRoute_localGatewayId' - The ID of the local gateway.
+--
+-- 'localTarget', 'replaceRoute_localTarget' - Specifies whether to reset the local route to its default target
+-- (@local@).
+--
+-- 'natGatewayId', 'replaceRoute_natGatewayId' - [IPv4 traffic only] The ID of a NAT gateway.
+--
+-- 'networkInterfaceId', 'replaceRoute_networkInterfaceId' - The ID of a network interface.
+--
+-- 'transitGatewayId', 'replaceRoute_transitGatewayId' - The ID of a transit gateway.
+--
+-- 'vpcEndpointId', 'replaceRoute_vpcEndpointId' - The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints
+-- only.
+--
+-- 'vpcPeeringConnectionId', 'replaceRoute_vpcPeeringConnectionId' - The ID of a VPC peering connection.
+--
+-- 'routeTableId', 'replaceRoute_routeTableId' - The ID of the route table.
+newReplaceRoute ::
+  -- | 'routeTableId'
+  Prelude.Text ->
+  ReplaceRoute
+newReplaceRoute pRouteTableId_ =
+  ReplaceRoute'
+    { carrierGatewayId = Prelude.Nothing,
+      coreNetworkArn = Prelude.Nothing,
+      destinationCidrBlock = Prelude.Nothing,
+      destinationIpv6CidrBlock = Prelude.Nothing,
+      destinationPrefixListId = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      egressOnlyInternetGatewayId = Prelude.Nothing,
+      gatewayId = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      localGatewayId = Prelude.Nothing,
+      localTarget = Prelude.Nothing,
+      natGatewayId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing,
+      routeTableId = pRouteTableId_
+    }
+
+-- | [IPv4 traffic only] The ID of a carrier gateway.
+replaceRoute_carrierGatewayId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_carrierGatewayId = Lens.lens (\ReplaceRoute' {carrierGatewayId} -> carrierGatewayId) (\s@ReplaceRoute' {} a -> s {carrierGatewayId = a} :: ReplaceRoute)
+
+-- | The Amazon Resource Name (ARN) of the core network.
+replaceRoute_coreNetworkArn :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_coreNetworkArn = Lens.lens (\ReplaceRoute' {coreNetworkArn} -> coreNetworkArn) (\s@ReplaceRoute' {} a -> s {coreNetworkArn = a} :: ReplaceRoute)
+
+-- | The IPv4 CIDR address block used for the destination match. The value
+-- that you provide must match the CIDR of an existing route in the table.
+replaceRoute_destinationCidrBlock :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_destinationCidrBlock = Lens.lens (\ReplaceRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@ReplaceRoute' {} a -> s {destinationCidrBlock = a} :: ReplaceRoute)
+
+-- | The IPv6 CIDR address block used for the destination match. The value
+-- that you provide must match the CIDR of an existing route in the table.
+replaceRoute_destinationIpv6CidrBlock :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_destinationIpv6CidrBlock = Lens.lens (\ReplaceRoute' {destinationIpv6CidrBlock} -> destinationIpv6CidrBlock) (\s@ReplaceRoute' {} a -> s {destinationIpv6CidrBlock = a} :: ReplaceRoute)
+
+-- | The ID of the prefix list for the route.
+replaceRoute_destinationPrefixListId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_destinationPrefixListId = Lens.lens (\ReplaceRoute' {destinationPrefixListId} -> destinationPrefixListId) (\s@ReplaceRoute' {} a -> s {destinationPrefixListId = a} :: ReplaceRoute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+replaceRoute_dryRun :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Bool)
+replaceRoute_dryRun = Lens.lens (\ReplaceRoute' {dryRun} -> dryRun) (\s@ReplaceRoute' {} a -> s {dryRun = a} :: ReplaceRoute)
+
+-- | [IPv6 traffic only] The ID of an egress-only internet gateway.
+replaceRoute_egressOnlyInternetGatewayId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_egressOnlyInternetGatewayId = Lens.lens (\ReplaceRoute' {egressOnlyInternetGatewayId} -> egressOnlyInternetGatewayId) (\s@ReplaceRoute' {} a -> s {egressOnlyInternetGatewayId = a} :: ReplaceRoute)
+
+-- | The ID of an internet gateway or virtual private gateway.
+replaceRoute_gatewayId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_gatewayId = Lens.lens (\ReplaceRoute' {gatewayId} -> gatewayId) (\s@ReplaceRoute' {} a -> s {gatewayId = a} :: ReplaceRoute)
+
+-- | The ID of a NAT instance in your VPC.
+replaceRoute_instanceId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_instanceId = Lens.lens (\ReplaceRoute' {instanceId} -> instanceId) (\s@ReplaceRoute' {} a -> s {instanceId = a} :: ReplaceRoute)
+
+-- | The ID of the local gateway.
+replaceRoute_localGatewayId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_localGatewayId = Lens.lens (\ReplaceRoute' {localGatewayId} -> localGatewayId) (\s@ReplaceRoute' {} a -> s {localGatewayId = a} :: ReplaceRoute)
+
+-- | Specifies whether to reset the local route to its default target
+-- (@local@).
+replaceRoute_localTarget :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Bool)
+replaceRoute_localTarget = Lens.lens (\ReplaceRoute' {localTarget} -> localTarget) (\s@ReplaceRoute' {} a -> s {localTarget = a} :: ReplaceRoute)
+
+-- | [IPv4 traffic only] The ID of a NAT gateway.
+replaceRoute_natGatewayId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_natGatewayId = Lens.lens (\ReplaceRoute' {natGatewayId} -> natGatewayId) (\s@ReplaceRoute' {} a -> s {natGatewayId = a} :: ReplaceRoute)
+
+-- | The ID of a network interface.
+replaceRoute_networkInterfaceId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_networkInterfaceId = Lens.lens (\ReplaceRoute' {networkInterfaceId} -> networkInterfaceId) (\s@ReplaceRoute' {} a -> s {networkInterfaceId = a} :: ReplaceRoute)
+
+-- | The ID of a transit gateway.
+replaceRoute_transitGatewayId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_transitGatewayId = Lens.lens (\ReplaceRoute' {transitGatewayId} -> transitGatewayId) (\s@ReplaceRoute' {} a -> s {transitGatewayId = a} :: ReplaceRoute)
+
+-- | The ID of a VPC endpoint. Supported for Gateway Load Balancer endpoints
+-- only.
+replaceRoute_vpcEndpointId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_vpcEndpointId = Lens.lens (\ReplaceRoute' {vpcEndpointId} -> vpcEndpointId) (\s@ReplaceRoute' {} a -> s {vpcEndpointId = a} :: ReplaceRoute)
+
+-- | The ID of a VPC peering connection.
+replaceRoute_vpcPeeringConnectionId :: Lens.Lens' ReplaceRoute (Prelude.Maybe Prelude.Text)
+replaceRoute_vpcPeeringConnectionId = Lens.lens (\ReplaceRoute' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@ReplaceRoute' {} a -> s {vpcPeeringConnectionId = a} :: ReplaceRoute)
+
+-- | The ID of the route table.
+replaceRoute_routeTableId :: Lens.Lens' ReplaceRoute Prelude.Text
+replaceRoute_routeTableId = Lens.lens (\ReplaceRoute' {routeTableId} -> routeTableId) (\s@ReplaceRoute' {} a -> s {routeTableId = a} :: ReplaceRoute)
+
+instance Core.AWSRequest ReplaceRoute where
+  type AWSResponse ReplaceRoute = ReplaceRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull ReplaceRouteResponse'
+
+instance Prelude.Hashable ReplaceRoute where
+  hashWithSalt _salt ReplaceRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` carrierGatewayId
+      `Prelude.hashWithSalt` coreNetworkArn
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationIpv6CidrBlock
+      `Prelude.hashWithSalt` destinationPrefixListId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` egressOnlyInternetGatewayId
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` localGatewayId
+      `Prelude.hashWithSalt` localTarget
+      `Prelude.hashWithSalt` natGatewayId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpcEndpointId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData ReplaceRoute where
+  rnf ReplaceRoute' {..} =
+    Prelude.rnf carrierGatewayId
+      `Prelude.seq` Prelude.rnf coreNetworkArn
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationIpv6CidrBlock
+      `Prelude.seq` Prelude.rnf destinationPrefixListId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayId
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf localTarget
+      `Prelude.seq` Prelude.rnf natGatewayId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders ReplaceRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReplaceRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReplaceRoute where
+  toQuery ReplaceRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReplaceRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CarrierGatewayId" Data.=: carrierGatewayId,
+        "CoreNetworkArn" Data.=: coreNetworkArn,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "DestinationIpv6CidrBlock"
+          Data.=: destinationIpv6CidrBlock,
+        "DestinationPrefixListId"
+          Data.=: destinationPrefixListId,
+        "DryRun" Data.=: dryRun,
+        "EgressOnlyInternetGatewayId"
+          Data.=: egressOnlyInternetGatewayId,
+        "GatewayId" Data.=: gatewayId,
+        "InstanceId" Data.=: instanceId,
+        "LocalGatewayId" Data.=: localGatewayId,
+        "LocalTarget" Data.=: localTarget,
+        "NatGatewayId" Data.=: natGatewayId,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "TransitGatewayId" Data.=: transitGatewayId,
+        "VpcEndpointId" Data.=: vpcEndpointId,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newReplaceRouteResponse' smart constructor.
+data ReplaceRouteResponse = ReplaceRouteResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newReplaceRouteResponse ::
+  ReplaceRouteResponse
+newReplaceRouteResponse = ReplaceRouteResponse'
+
+instance Prelude.NFData ReplaceRouteResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ReplaceRouteTableAssociation.hs b/gen/Amazonka/EC2/ReplaceRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReplaceRouteTableAssociation.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReplaceRouteTableAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html Route tables>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- 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.
+module Amazonka.EC2.ReplaceRouteTableAssociation
+  ( -- * Creating a Request
+    ReplaceRouteTableAssociation (..),
+    newReplaceRouteTableAssociation,
+
+    -- * Request Lenses
+    replaceRouteTableAssociation_dryRun,
+    replaceRouteTableAssociation_associationId,
+    replaceRouteTableAssociation_routeTableId,
+
+    -- * Destructuring the Response
+    ReplaceRouteTableAssociationResponse (..),
+    newReplaceRouteTableAssociationResponse,
+
+    -- * Response Lenses
+    replaceRouteTableAssociationResponse_associationState,
+    replaceRouteTableAssociationResponse_newAssociationId,
+    replaceRouteTableAssociationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReplaceRouteTableAssociation' smart constructor.
+data ReplaceRouteTableAssociation = ReplaceRouteTableAssociation'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The association ID.
+    associationId :: Prelude.Text,
+    -- | The ID of the new route table to associate with the subnet.
+    routeTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceRouteTableAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'replaceRouteTableAssociation_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'associationId', 'replaceRouteTableAssociation_associationId' - The association ID.
+--
+-- 'routeTableId', 'replaceRouteTableAssociation_routeTableId' - The ID of the new route table to associate with the subnet.
+newReplaceRouteTableAssociation ::
+  -- | 'associationId'
+  Prelude.Text ->
+  -- | 'routeTableId'
+  Prelude.Text ->
+  ReplaceRouteTableAssociation
+newReplaceRouteTableAssociation
+  pAssociationId_
+  pRouteTableId_ =
+    ReplaceRouteTableAssociation'
+      { dryRun =
+          Prelude.Nothing,
+        associationId = pAssociationId_,
+        routeTableId = pRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+replaceRouteTableAssociation_dryRun :: Lens.Lens' ReplaceRouteTableAssociation (Prelude.Maybe Prelude.Bool)
+replaceRouteTableAssociation_dryRun = Lens.lens (\ReplaceRouteTableAssociation' {dryRun} -> dryRun) (\s@ReplaceRouteTableAssociation' {} a -> s {dryRun = a} :: ReplaceRouteTableAssociation)
+
+-- | The association ID.
+replaceRouteTableAssociation_associationId :: Lens.Lens' ReplaceRouteTableAssociation Prelude.Text
+replaceRouteTableAssociation_associationId = Lens.lens (\ReplaceRouteTableAssociation' {associationId} -> associationId) (\s@ReplaceRouteTableAssociation' {} a -> s {associationId = a} :: ReplaceRouteTableAssociation)
+
+-- | The ID of the new route table to associate with the subnet.
+replaceRouteTableAssociation_routeTableId :: Lens.Lens' ReplaceRouteTableAssociation Prelude.Text
+replaceRouteTableAssociation_routeTableId = Lens.lens (\ReplaceRouteTableAssociation' {routeTableId} -> routeTableId) (\s@ReplaceRouteTableAssociation' {} a -> s {routeTableId = a} :: ReplaceRouteTableAssociation)
+
+instance Core.AWSRequest ReplaceRouteTableAssociation where
+  type
+    AWSResponse ReplaceRouteTableAssociation =
+      ReplaceRouteTableAssociationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ReplaceRouteTableAssociationResponse'
+            Prelude.<$> (x Data..@? "associationState")
+            Prelude.<*> (x Data..@? "newAssociationId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    ReplaceRouteTableAssociation
+  where
+  hashWithSalt _salt ReplaceRouteTableAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` routeTableId
+
+instance Prelude.NFData ReplaceRouteTableAssociation where
+  rnf ReplaceRouteTableAssociation' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf routeTableId
+
+instance Data.ToHeaders ReplaceRouteTableAssociation where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReplaceRouteTableAssociation where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReplaceRouteTableAssociation where
+  toQuery ReplaceRouteTableAssociation' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ReplaceRouteTableAssociation" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "AssociationId" Data.=: associationId,
+        "RouteTableId" Data.=: routeTableId
+      ]
+
+-- | /See:/ 'newReplaceRouteTableAssociationResponse' smart constructor.
+data ReplaceRouteTableAssociationResponse = ReplaceRouteTableAssociationResponse'
+  { -- | The state of the association.
+    associationState :: Prelude.Maybe RouteTableAssociationState,
+    -- | The ID of the new association.
+    newAssociationId' :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceRouteTableAssociationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationState', 'replaceRouteTableAssociationResponse_associationState' - The state of the association.
+--
+-- 'newAssociationId'', 'replaceRouteTableAssociationResponse_newAssociationId' - The ID of the new association.
+--
+-- 'httpStatus', 'replaceRouteTableAssociationResponse_httpStatus' - The response's http status code.
+newReplaceRouteTableAssociationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReplaceRouteTableAssociationResponse
+newReplaceRouteTableAssociationResponse pHttpStatus_ =
+  ReplaceRouteTableAssociationResponse'
+    { associationState =
+        Prelude.Nothing,
+      newAssociationId' = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The state of the association.
+replaceRouteTableAssociationResponse_associationState :: Lens.Lens' ReplaceRouteTableAssociationResponse (Prelude.Maybe RouteTableAssociationState)
+replaceRouteTableAssociationResponse_associationState = Lens.lens (\ReplaceRouteTableAssociationResponse' {associationState} -> associationState) (\s@ReplaceRouteTableAssociationResponse' {} a -> s {associationState = a} :: ReplaceRouteTableAssociationResponse)
+
+-- | The ID of the new association.
+replaceRouteTableAssociationResponse_newAssociationId :: Lens.Lens' ReplaceRouteTableAssociationResponse (Prelude.Maybe Prelude.Text)
+replaceRouteTableAssociationResponse_newAssociationId = Lens.lens (\ReplaceRouteTableAssociationResponse' {newAssociationId'} -> newAssociationId') (\s@ReplaceRouteTableAssociationResponse' {} a -> s {newAssociationId' = a} :: ReplaceRouteTableAssociationResponse)
+
+-- | The response's http status code.
+replaceRouteTableAssociationResponse_httpStatus :: Lens.Lens' ReplaceRouteTableAssociationResponse Prelude.Int
+replaceRouteTableAssociationResponse_httpStatus = Lens.lens (\ReplaceRouteTableAssociationResponse' {httpStatus} -> httpStatus) (\s@ReplaceRouteTableAssociationResponse' {} a -> s {httpStatus = a} :: ReplaceRouteTableAssociationResponse)
+
+instance
+  Prelude.NFData
+    ReplaceRouteTableAssociationResponse
+  where
+  rnf ReplaceRouteTableAssociationResponse' {..} =
+    Prelude.rnf associationState
+      `Prelude.seq` Prelude.rnf newAssociationId'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReplaceTransitGatewayRoute.hs b/gen/Amazonka/EC2/ReplaceTransitGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReplaceTransitGatewayRoute.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReplaceTransitGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Replaces the specified route in the specified transit gateway route
+-- table.
+module Amazonka.EC2.ReplaceTransitGatewayRoute
+  ( -- * Creating a Request
+    ReplaceTransitGatewayRoute (..),
+    newReplaceTransitGatewayRoute,
+
+    -- * Request Lenses
+    replaceTransitGatewayRoute_blackhole,
+    replaceTransitGatewayRoute_dryRun,
+    replaceTransitGatewayRoute_transitGatewayAttachmentId,
+    replaceTransitGatewayRoute_destinationCidrBlock,
+    replaceTransitGatewayRoute_transitGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    ReplaceTransitGatewayRouteResponse (..),
+    newReplaceTransitGatewayRouteResponse,
+
+    -- * Response Lenses
+    replaceTransitGatewayRouteResponse_route,
+    replaceTransitGatewayRouteResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReplaceTransitGatewayRoute' smart constructor.
+data ReplaceTransitGatewayRoute = ReplaceTransitGatewayRoute'
+  { -- | Indicates whether traffic matching this route is to be dropped.
+    blackhole :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR range used for the destination match. Routing decisions are
+    -- based on the most specific match.
+    destinationCidrBlock :: Prelude.Text,
+    -- | The ID of the route table.
+    transitGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceTransitGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blackhole', 'replaceTransitGatewayRoute_blackhole' - Indicates whether traffic matching this route is to be dropped.
+--
+-- 'dryRun', 'replaceTransitGatewayRoute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'transitGatewayAttachmentId', 'replaceTransitGatewayRoute_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'destinationCidrBlock', 'replaceTransitGatewayRoute_destinationCidrBlock' - The CIDR range used for the destination match. Routing decisions are
+-- based on the most specific match.
+--
+-- 'transitGatewayRouteTableId', 'replaceTransitGatewayRoute_transitGatewayRouteTableId' - The ID of the route table.
+newReplaceTransitGatewayRoute ::
+  -- | 'destinationCidrBlock'
+  Prelude.Text ->
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  ReplaceTransitGatewayRoute
+newReplaceTransitGatewayRoute
+  pDestinationCidrBlock_
+  pTransitGatewayRouteTableId_ =
+    ReplaceTransitGatewayRoute'
+      { blackhole =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        transitGatewayAttachmentId = Prelude.Nothing,
+        destinationCidrBlock = pDestinationCidrBlock_,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_
+      }
+
+-- | Indicates whether traffic matching this route is to be dropped.
+replaceTransitGatewayRoute_blackhole :: Lens.Lens' ReplaceTransitGatewayRoute (Prelude.Maybe Prelude.Bool)
+replaceTransitGatewayRoute_blackhole = Lens.lens (\ReplaceTransitGatewayRoute' {blackhole} -> blackhole) (\s@ReplaceTransitGatewayRoute' {} a -> s {blackhole = a} :: ReplaceTransitGatewayRoute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+replaceTransitGatewayRoute_dryRun :: Lens.Lens' ReplaceTransitGatewayRoute (Prelude.Maybe Prelude.Bool)
+replaceTransitGatewayRoute_dryRun = Lens.lens (\ReplaceTransitGatewayRoute' {dryRun} -> dryRun) (\s@ReplaceTransitGatewayRoute' {} a -> s {dryRun = a} :: ReplaceTransitGatewayRoute)
+
+-- | The ID of the attachment.
+replaceTransitGatewayRoute_transitGatewayAttachmentId :: Lens.Lens' ReplaceTransitGatewayRoute (Prelude.Maybe Prelude.Text)
+replaceTransitGatewayRoute_transitGatewayAttachmentId = Lens.lens (\ReplaceTransitGatewayRoute' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@ReplaceTransitGatewayRoute' {} a -> s {transitGatewayAttachmentId = a} :: ReplaceTransitGatewayRoute)
+
+-- | The CIDR range used for the destination match. Routing decisions are
+-- based on the most specific match.
+replaceTransitGatewayRoute_destinationCidrBlock :: Lens.Lens' ReplaceTransitGatewayRoute Prelude.Text
+replaceTransitGatewayRoute_destinationCidrBlock = Lens.lens (\ReplaceTransitGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@ReplaceTransitGatewayRoute' {} a -> s {destinationCidrBlock = a} :: ReplaceTransitGatewayRoute)
+
+-- | The ID of the route table.
+replaceTransitGatewayRoute_transitGatewayRouteTableId :: Lens.Lens' ReplaceTransitGatewayRoute Prelude.Text
+replaceTransitGatewayRoute_transitGatewayRouteTableId = Lens.lens (\ReplaceTransitGatewayRoute' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@ReplaceTransitGatewayRoute' {} a -> s {transitGatewayRouteTableId = a} :: ReplaceTransitGatewayRoute)
+
+instance Core.AWSRequest ReplaceTransitGatewayRoute where
+  type
+    AWSResponse ReplaceTransitGatewayRoute =
+      ReplaceTransitGatewayRouteResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ReplaceTransitGatewayRouteResponse'
+            Prelude.<$> (x Data..@? "route")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ReplaceTransitGatewayRoute where
+  hashWithSalt _salt ReplaceTransitGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` blackhole
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance Prelude.NFData ReplaceTransitGatewayRoute where
+  rnf ReplaceTransitGatewayRoute' {..} =
+    Prelude.rnf blackhole
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+
+instance Data.ToHeaders ReplaceTransitGatewayRoute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReplaceTransitGatewayRoute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReplaceTransitGatewayRoute where
+  toQuery ReplaceTransitGatewayRoute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReplaceTransitGatewayRoute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Blackhole" Data.=: blackhole,
+        "DryRun" Data.=: dryRun,
+        "TransitGatewayAttachmentId"
+          Data.=: transitGatewayAttachmentId,
+        "DestinationCidrBlock" Data.=: destinationCidrBlock,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newReplaceTransitGatewayRouteResponse' smart constructor.
+data ReplaceTransitGatewayRouteResponse = ReplaceTransitGatewayRouteResponse'
+  { -- | Information about the modified route.
+    route :: Prelude.Maybe TransitGatewayRoute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceTransitGatewayRouteResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'route', 'replaceTransitGatewayRouteResponse_route' - Information about the modified route.
+--
+-- 'httpStatus', 'replaceTransitGatewayRouteResponse_httpStatus' - The response's http status code.
+newReplaceTransitGatewayRouteResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ReplaceTransitGatewayRouteResponse
+newReplaceTransitGatewayRouteResponse pHttpStatus_ =
+  ReplaceTransitGatewayRouteResponse'
+    { route =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the modified route.
+replaceTransitGatewayRouteResponse_route :: Lens.Lens' ReplaceTransitGatewayRouteResponse (Prelude.Maybe TransitGatewayRoute)
+replaceTransitGatewayRouteResponse_route = Lens.lens (\ReplaceTransitGatewayRouteResponse' {route} -> route) (\s@ReplaceTransitGatewayRouteResponse' {} a -> s {route = a} :: ReplaceTransitGatewayRouteResponse)
+
+-- | The response's http status code.
+replaceTransitGatewayRouteResponse_httpStatus :: Lens.Lens' ReplaceTransitGatewayRouteResponse Prelude.Int
+replaceTransitGatewayRouteResponse_httpStatus = Lens.lens (\ReplaceTransitGatewayRouteResponse' {httpStatus} -> httpStatus) (\s@ReplaceTransitGatewayRouteResponse' {} a -> s {httpStatus = a} :: ReplaceTransitGatewayRouteResponse)
+
+instance
+  Prelude.NFData
+    ReplaceTransitGatewayRouteResponse
+  where
+  rnf ReplaceTransitGatewayRouteResponse' {..} =
+    Prelude.rnf route
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ReportInstanceStatus.hs b/gen/Amazonka/EC2/ReportInstanceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ReportInstanceStatus.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ReportInstanceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Submits feedback about the status of an instance. The instance must be
+-- in the @running@ state. If your experience with the instance differs
+-- from the instance status returned by DescribeInstanceStatus, use
+-- ReportInstanceStatus to report your experience with the instance. Amazon
+-- EC2 collects this information to improve the accuracy of status checks.
+--
+-- Use of this action does not change the value returned by
+-- DescribeInstanceStatus.
+module Amazonka.EC2.ReportInstanceStatus
+  ( -- * Creating a Request
+    ReportInstanceStatus (..),
+    newReportInstanceStatus,
+
+    -- * Request Lenses
+    reportInstanceStatus_description,
+    reportInstanceStatus_dryRun,
+    reportInstanceStatus_endTime,
+    reportInstanceStatus_startTime,
+    reportInstanceStatus_instances,
+    reportInstanceStatus_reasonCodes,
+    reportInstanceStatus_status,
+
+    -- * Destructuring the Response
+    ReportInstanceStatusResponse (..),
+    newReportInstanceStatusResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newReportInstanceStatus' smart constructor.
+data ReportInstanceStatus = ReportInstanceStatus'
+  { -- | Descriptive text about the health state of your instance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The time at which the reported instance health state ended.
+    endTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which the reported instance health state began.
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | The instances.
+    instances :: [Prelude.Text],
+    -- | The reason codes that describe the health state of your instance.
+    --
+    -- -   @instance-stuck-in-state@: My instance is stuck in a state.
+    --
+    -- -   @unresponsive@: My instance is unresponsive.
+    --
+    -- -   @not-accepting-credentials@: My instance is not accepting my
+    --     credentials.
+    --
+    -- -   @password-not-available@: A password is not available for my
+    --     instance.
+    --
+    -- -   @performance-network@: My instance is experiencing performance
+    --     problems that I believe are network related.
+    --
+    -- -   @performance-instance-store@: My instance is experiencing
+    --     performance problems that I believe are related to the instance
+    --     stores.
+    --
+    -- -   @performance-ebs-volume@: My instance is experiencing performance
+    --     problems that I believe are related to an EBS volume.
+    --
+    -- -   @performance-other@: My instance is experiencing performance
+    --     problems.
+    --
+    -- -   @other@: [explain using the description parameter]
+    reasonCodes :: [ReportInstanceReasonCodes],
+    -- | The status of all instances listed.
+    status :: ReportStatusType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReportInstanceStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'reportInstanceStatus_description' - Descriptive text about the health state of your instance.
+--
+-- 'dryRun', 'reportInstanceStatus_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'endTime', 'reportInstanceStatus_endTime' - The time at which the reported instance health state ended.
+--
+-- 'startTime', 'reportInstanceStatus_startTime' - The time at which the reported instance health state began.
+--
+-- 'instances', 'reportInstanceStatus_instances' - The instances.
+--
+-- 'reasonCodes', 'reportInstanceStatus_reasonCodes' - The reason codes that describe the health state of your instance.
+--
+-- -   @instance-stuck-in-state@: My instance is stuck in a state.
+--
+-- -   @unresponsive@: My instance is unresponsive.
+--
+-- -   @not-accepting-credentials@: My instance is not accepting my
+--     credentials.
+--
+-- -   @password-not-available@: A password is not available for my
+--     instance.
+--
+-- -   @performance-network@: My instance is experiencing performance
+--     problems that I believe are network related.
+--
+-- -   @performance-instance-store@: My instance is experiencing
+--     performance problems that I believe are related to the instance
+--     stores.
+--
+-- -   @performance-ebs-volume@: My instance is experiencing performance
+--     problems that I believe are related to an EBS volume.
+--
+-- -   @performance-other@: My instance is experiencing performance
+--     problems.
+--
+-- -   @other@: [explain using the description parameter]
+--
+-- 'status', 'reportInstanceStatus_status' - The status of all instances listed.
+newReportInstanceStatus ::
+  -- | 'status'
+  ReportStatusType ->
+  ReportInstanceStatus
+newReportInstanceStatus pStatus_ =
+  ReportInstanceStatus'
+    { description =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      endTime = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      instances = Prelude.mempty,
+      reasonCodes = Prelude.mempty,
+      status = pStatus_
+    }
+
+-- | Descriptive text about the health state of your instance.
+reportInstanceStatus_description :: Lens.Lens' ReportInstanceStatus (Prelude.Maybe Prelude.Text)
+reportInstanceStatus_description = Lens.lens (\ReportInstanceStatus' {description} -> description) (\s@ReportInstanceStatus' {} a -> s {description = a} :: ReportInstanceStatus)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+reportInstanceStatus_dryRun :: Lens.Lens' ReportInstanceStatus (Prelude.Maybe Prelude.Bool)
+reportInstanceStatus_dryRun = Lens.lens (\ReportInstanceStatus' {dryRun} -> dryRun) (\s@ReportInstanceStatus' {} a -> s {dryRun = a} :: ReportInstanceStatus)
+
+-- | The time at which the reported instance health state ended.
+reportInstanceStatus_endTime :: Lens.Lens' ReportInstanceStatus (Prelude.Maybe Prelude.UTCTime)
+reportInstanceStatus_endTime = Lens.lens (\ReportInstanceStatus' {endTime} -> endTime) (\s@ReportInstanceStatus' {} a -> s {endTime = a} :: ReportInstanceStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which the reported instance health state began.
+reportInstanceStatus_startTime :: Lens.Lens' ReportInstanceStatus (Prelude.Maybe Prelude.UTCTime)
+reportInstanceStatus_startTime = Lens.lens (\ReportInstanceStatus' {startTime} -> startTime) (\s@ReportInstanceStatus' {} a -> s {startTime = a} :: ReportInstanceStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The instances.
+reportInstanceStatus_instances :: Lens.Lens' ReportInstanceStatus [Prelude.Text]
+reportInstanceStatus_instances = Lens.lens (\ReportInstanceStatus' {instances} -> instances) (\s@ReportInstanceStatus' {} a -> s {instances = a} :: ReportInstanceStatus) Prelude.. Lens.coerced
+
+-- | The reason codes that describe the health state of your instance.
+--
+-- -   @instance-stuck-in-state@: My instance is stuck in a state.
+--
+-- -   @unresponsive@: My instance is unresponsive.
+--
+-- -   @not-accepting-credentials@: My instance is not accepting my
+--     credentials.
+--
+-- -   @password-not-available@: A password is not available for my
+--     instance.
+--
+-- -   @performance-network@: My instance is experiencing performance
+--     problems that I believe are network related.
+--
+-- -   @performance-instance-store@: My instance is experiencing
+--     performance problems that I believe are related to the instance
+--     stores.
+--
+-- -   @performance-ebs-volume@: My instance is experiencing performance
+--     problems that I believe are related to an EBS volume.
+--
+-- -   @performance-other@: My instance is experiencing performance
+--     problems.
+--
+-- -   @other@: [explain using the description parameter]
+reportInstanceStatus_reasonCodes :: Lens.Lens' ReportInstanceStatus [ReportInstanceReasonCodes]
+reportInstanceStatus_reasonCodes = Lens.lens (\ReportInstanceStatus' {reasonCodes} -> reasonCodes) (\s@ReportInstanceStatus' {} a -> s {reasonCodes = a} :: ReportInstanceStatus) Prelude.. Lens.coerced
+
+-- | The status of all instances listed.
+reportInstanceStatus_status :: Lens.Lens' ReportInstanceStatus ReportStatusType
+reportInstanceStatus_status = Lens.lens (\ReportInstanceStatus' {status} -> status) (\s@ReportInstanceStatus' {} a -> s {status = a} :: ReportInstanceStatus)
+
+instance Core.AWSRequest ReportInstanceStatus where
+  type
+    AWSResponse ReportInstanceStatus =
+      ReportInstanceStatusResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ReportInstanceStatusResponse'
+
+instance Prelude.Hashable ReportInstanceStatus where
+  hashWithSalt _salt ReportInstanceStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` instances
+      `Prelude.hashWithSalt` reasonCodes
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ReportInstanceStatus where
+  rnf ReportInstanceStatus' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf instances
+      `Prelude.seq` Prelude.rnf reasonCodes
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToHeaders ReportInstanceStatus where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ReportInstanceStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ReportInstanceStatus where
+  toQuery ReportInstanceStatus' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ReportInstanceStatus" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Description" Data.=: description,
+        "DryRun" Data.=: dryRun,
+        "EndTime" Data.=: endTime,
+        "StartTime" Data.=: startTime,
+        Data.toQueryList "InstanceId" instances,
+        Data.toQueryList "ReasonCode" reasonCodes,
+        "Status" Data.=: status
+      ]
+
+-- | /See:/ 'newReportInstanceStatusResponse' smart constructor.
+data ReportInstanceStatusResponse = ReportInstanceStatusResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReportInstanceStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newReportInstanceStatusResponse ::
+  ReportInstanceStatusResponse
+newReportInstanceStatusResponse =
+  ReportInstanceStatusResponse'
+
+instance Prelude.NFData ReportInstanceStatusResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/RequestSpotFleet.hs b/gen/Amazonka/EC2/RequestSpotFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RequestSpotFleet.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RequestSpotFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Spot Fleet request.
+--
+-- 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.
+--
+-- You can submit a single request that includes multiple launch
+-- specifications that vary by instance type, AMI, Availability Zone, or
+-- subnet.
+--
+-- 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.
+--
+-- 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.
+--
+-- 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
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html Spot Fleet requests>
+-- in the /Amazon EC2 User Guide/.
+--
+-- We strongly discourage using the RequestSpotFleet API because it is a
+-- legacy API with no planned investment. For options for requesting Spot
+-- Instances, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use Which is the best Spot request method to use?>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.RequestSpotFleet
+  ( -- * Creating a Request
+    RequestSpotFleet (..),
+    newRequestSpotFleet,
+
+    -- * Request Lenses
+    requestSpotFleet_dryRun,
+    requestSpotFleet_spotFleetRequestConfig,
+
+    -- * Destructuring the Response
+    RequestSpotFleetResponse (..),
+    newRequestSpotFleetResponse,
+
+    -- * Response Lenses
+    requestSpotFleetResponse_spotFleetRequestId,
+    requestSpotFleetResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for RequestSpotFleet.
+--
+-- /See:/ 'newRequestSpotFleet' smart constructor.
+data RequestSpotFleet = RequestSpotFleet'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The configuration for the Spot Fleet request.
+    spotFleetRequestConfig :: SpotFleetRequestConfigData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestSpotFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'requestSpotFleet_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'spotFleetRequestConfig', 'requestSpotFleet_spotFleetRequestConfig' - The configuration for the Spot Fleet request.
+newRequestSpotFleet ::
+  -- | 'spotFleetRequestConfig'
+  SpotFleetRequestConfigData ->
+  RequestSpotFleet
+newRequestSpotFleet pSpotFleetRequestConfig_ =
+  RequestSpotFleet'
+    { dryRun = Prelude.Nothing,
+      spotFleetRequestConfig = pSpotFleetRequestConfig_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+requestSpotFleet_dryRun :: Lens.Lens' RequestSpotFleet (Prelude.Maybe Prelude.Bool)
+requestSpotFleet_dryRun = Lens.lens (\RequestSpotFleet' {dryRun} -> dryRun) (\s@RequestSpotFleet' {} a -> s {dryRun = a} :: RequestSpotFleet)
+
+-- | The configuration for the Spot Fleet request.
+requestSpotFleet_spotFleetRequestConfig :: Lens.Lens' RequestSpotFleet SpotFleetRequestConfigData
+requestSpotFleet_spotFleetRequestConfig = Lens.lens (\RequestSpotFleet' {spotFleetRequestConfig} -> spotFleetRequestConfig) (\s@RequestSpotFleet' {} a -> s {spotFleetRequestConfig = a} :: RequestSpotFleet)
+
+instance Core.AWSRequest RequestSpotFleet where
+  type
+    AWSResponse RequestSpotFleet =
+      RequestSpotFleetResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RequestSpotFleetResponse'
+            Prelude.<$> (x Data..@? "spotFleetRequestId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RequestSpotFleet where
+  hashWithSalt _salt RequestSpotFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` spotFleetRequestConfig
+
+instance Prelude.NFData RequestSpotFleet where
+  rnf RequestSpotFleet' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf spotFleetRequestConfig
+
+instance Data.ToHeaders RequestSpotFleet where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RequestSpotFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RequestSpotFleet where
+  toQuery RequestSpotFleet' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RequestSpotFleet" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "SpotFleetRequestConfig"
+          Data.=: spotFleetRequestConfig
+      ]
+
+-- | Contains the output of RequestSpotFleet.
+--
+-- /See:/ 'newRequestSpotFleetResponse' smart constructor.
+data RequestSpotFleetResponse = RequestSpotFleetResponse'
+  { -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestSpotFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'spotFleetRequestId', 'requestSpotFleetResponse_spotFleetRequestId' - The ID of the Spot Fleet request.
+--
+-- 'httpStatus', 'requestSpotFleetResponse_httpStatus' - The response's http status code.
+newRequestSpotFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RequestSpotFleetResponse
+newRequestSpotFleetResponse pHttpStatus_ =
+  RequestSpotFleetResponse'
+    { spotFleetRequestId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Spot Fleet request.
+requestSpotFleetResponse_spotFleetRequestId :: Lens.Lens' RequestSpotFleetResponse (Prelude.Maybe Prelude.Text)
+requestSpotFleetResponse_spotFleetRequestId = Lens.lens (\RequestSpotFleetResponse' {spotFleetRequestId} -> spotFleetRequestId) (\s@RequestSpotFleetResponse' {} a -> s {spotFleetRequestId = a} :: RequestSpotFleetResponse)
+
+-- | The response's http status code.
+requestSpotFleetResponse_httpStatus :: Lens.Lens' RequestSpotFleetResponse Prelude.Int
+requestSpotFleetResponse_httpStatus = Lens.lens (\RequestSpotFleetResponse' {httpStatus} -> httpStatus) (\s@RequestSpotFleetResponse' {} a -> s {httpStatus = a} :: RequestSpotFleetResponse)
+
+instance Prelude.NFData RequestSpotFleetResponse where
+  rnf RequestSpotFleetResponse' {..} =
+    Prelude.rnf spotFleetRequestId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RequestSpotInstances.hs b/gen/Amazonka/EC2/RequestSpotInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RequestSpotInstances.hs
@@ -0,0 +1,529 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RequestSpotInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a Spot Instance request.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html Spot Instance requests>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- We strongly discourage using the RequestSpotInstances API because it is
+-- a legacy API with no planned investment. For options for requesting Spot
+-- Instances, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-best-practices.html#which-spot-request-method-to-use Which is the best Spot request method to use?>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+module Amazonka.EC2.RequestSpotInstances
+  ( -- * Creating a Request
+    RequestSpotInstances (..),
+    newRequestSpotInstances,
+
+    -- * Request Lenses
+    requestSpotInstances_availabilityZoneGroup,
+    requestSpotInstances_blockDurationMinutes,
+    requestSpotInstances_clientToken,
+    requestSpotInstances_dryRun,
+    requestSpotInstances_instanceCount,
+    requestSpotInstances_instanceInterruptionBehavior,
+    requestSpotInstances_launchGroup,
+    requestSpotInstances_launchSpecification,
+    requestSpotInstances_spotPrice,
+    requestSpotInstances_tagSpecifications,
+    requestSpotInstances_type,
+    requestSpotInstances_validFrom,
+    requestSpotInstances_validUntil,
+
+    -- * Destructuring the Response
+    RequestSpotInstancesResponse (..),
+    newRequestSpotInstancesResponse,
+
+    -- * Response Lenses
+    requestSpotInstancesResponse_spotInstanceRequests,
+    requestSpotInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for RequestSpotInstances.
+--
+-- /See:/ 'newRequestSpotInstances' smart constructor.
+data RequestSpotInstances = RequestSpotInstances'
+  { -- | The user-specified name for a logical grouping of requests.
+    --
+    -- When you specify an Availability Zone group in a Spot Instance request,
+    -- all Spot Instances in the request are launched in the same Availability
+    -- Zone. Instance proximity is maintained with this parameter, but the
+    -- choice of Availability Zone is not. The group applies only to requests
+    -- for Spot Instances of the same instance type. Any additional Spot
+    -- Instance requests that are specified with the same Availability Zone
+    -- group name are launched in that same Availability Zone, as long as at
+    -- least one instance from the group is still active.
+    --
+    -- If there is no active instance running in the Availability Zone group
+    -- that you specify for a new Spot Instance request (all instances are
+    -- terminated, the request is expired, or the maximum price you specified
+    -- falls below current Spot price), then Amazon EC2 launches the instance
+    -- in any Availability Zone where the constraint can be met. Consequently,
+    -- the subsequent set of Spot Instances could be placed in a different zone
+    -- from the original request, even if you specified the same Availability
+    -- Zone group.
+    --
+    -- Default: Instances are launched in any available Availability Zone.
+    availabilityZoneGroup :: Prelude.Maybe Prelude.Text,
+    -- | Deprecated.
+    blockDurationMinutes :: Prelude.Maybe Prelude.Int,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>
+    -- in the /Amazon EC2 User Guide for Linux Instances/.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of Spot Instances to launch.
+    --
+    -- Default: 1
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The behavior when a Spot Instance is interrupted. The default is
+    -- @terminate@.
+    instanceInterruptionBehavior :: Prelude.Maybe InstanceInterruptionBehavior,
+    -- | The instance launch group. Launch groups are Spot Instances that launch
+    -- together and terminate together.
+    --
+    -- Default: Instances are launched and terminated individually
+    launchGroup :: Prelude.Maybe Prelude.Text,
+    -- | The launch specification.
+    launchSpecification :: Prelude.Maybe RequestSpotLaunchSpecification,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    spotPrice :: Prelude.Maybe Prelude.Text,
+    -- | The key-value pair for tagging the Spot Instance request on creation.
+    -- The value for @ResourceType@ must be @spot-instances-request@, otherwise
+    -- the Spot Instance request fails. To tag the Spot Instance request after
+    -- it has been created, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The Spot Instance request type.
+    --
+    -- Default: @one-time@
+    type' :: Prelude.Maybe SpotInstanceType,
+    -- | The start date of the request. If this is a one-time request, the
+    -- request becomes active at this date and time and remains active until
+    -- all instances launch, the request expires, or the request is canceled.
+    -- If the request is persistent, the request becomes active at this date
+    -- and time and remains active until it expires or is canceled.
+    --
+    -- The specified start date and time cannot be equal to the current date
+    -- and time. You must specify a start date and time that occurs after the
+    -- current date and time.
+    validFrom :: Prelude.Maybe Data.ISO8601,
+    -- | The end date of the request, in UTC format
+    -- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    --
+    -- -   For a persistent request, the request remains active until the
+    --     @ValidUntil@ date and time is reached. Otherwise, the request
+    --     remains active until you cancel it.
+    --
+    -- -   For a one-time request, the request remains active until all
+    --     instances launch, the request is canceled, or the @ValidUntil@ date
+    --     and time is reached. By default, the request is valid for 7 days
+    --     from the date the request was created.
+    validUntil :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestSpotInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZoneGroup', 'requestSpotInstances_availabilityZoneGroup' - The user-specified name for a logical grouping of requests.
+--
+-- When you specify an Availability Zone group in a Spot Instance request,
+-- all Spot Instances in the request are launched in the same Availability
+-- Zone. Instance proximity is maintained with this parameter, but the
+-- choice of Availability Zone is not. The group applies only to requests
+-- for Spot Instances of the same instance type. Any additional Spot
+-- Instance requests that are specified with the same Availability Zone
+-- group name are launched in that same Availability Zone, as long as at
+-- least one instance from the group is still active.
+--
+-- If there is no active instance running in the Availability Zone group
+-- that you specify for a new Spot Instance request (all instances are
+-- terminated, the request is expired, or the maximum price you specified
+-- falls below current Spot price), then Amazon EC2 launches the instance
+-- in any Availability Zone where the constraint can be met. Consequently,
+-- the subsequent set of Spot Instances could be placed in a different zone
+-- from the original request, even if you specified the same Availability
+-- Zone group.
+--
+-- Default: Instances are launched in any available Availability Zone.
+--
+-- 'blockDurationMinutes', 'requestSpotInstances_blockDurationMinutes' - Deprecated.
+--
+-- 'clientToken', 'requestSpotInstances_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- 'dryRun', 'requestSpotInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceCount', 'requestSpotInstances_instanceCount' - The maximum number of Spot Instances to launch.
+--
+-- Default: 1
+--
+-- 'instanceInterruptionBehavior', 'requestSpotInstances_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+--
+-- 'launchGroup', 'requestSpotInstances_launchGroup' - The instance launch group. Launch groups are Spot Instances that launch
+-- together and terminate together.
+--
+-- Default: Instances are launched and terminated individually
+--
+-- 'launchSpecification', 'requestSpotInstances_launchSpecification' - The launch specification.
+--
+-- 'spotPrice', 'requestSpotInstances_spotPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'tagSpecifications', 'requestSpotInstances_tagSpecifications' - The key-value pair for tagging the Spot Instance request on creation.
+-- The value for @ResourceType@ must be @spot-instances-request@, otherwise
+-- the Spot Instance request fails. To tag the Spot Instance request after
+-- it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+--
+-- 'type'', 'requestSpotInstances_type' - The Spot Instance request type.
+--
+-- Default: @one-time@
+--
+-- 'validFrom', 'requestSpotInstances_validFrom' - The start date of the request. If this is a one-time request, the
+-- request becomes active at this date and time and remains active until
+-- all instances launch, the request expires, or the request is canceled.
+-- If the request is persistent, the request becomes active at this date
+-- and time and remains active until it expires or is canceled.
+--
+-- The specified start date and time cannot be equal to the current date
+-- and time. You must specify a start date and time that occurs after the
+-- current date and time.
+--
+-- 'validUntil', 'requestSpotInstances_validUntil' - The end date of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- -   For a persistent request, the request remains active until the
+--     @ValidUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, the request remains active until all
+--     instances launch, the request is canceled, or the @ValidUntil@ date
+--     and time is reached. By default, the request is valid for 7 days
+--     from the date the request was created.
+newRequestSpotInstances ::
+  RequestSpotInstances
+newRequestSpotInstances =
+  RequestSpotInstances'
+    { availabilityZoneGroup =
+        Prelude.Nothing,
+      blockDurationMinutes = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      instanceCount = Prelude.Nothing,
+      instanceInterruptionBehavior = Prelude.Nothing,
+      launchGroup = Prelude.Nothing,
+      launchSpecification = Prelude.Nothing,
+      spotPrice = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validFrom = Prelude.Nothing,
+      validUntil = Prelude.Nothing
+    }
+
+-- | The user-specified name for a logical grouping of requests.
+--
+-- When you specify an Availability Zone group in a Spot Instance request,
+-- all Spot Instances in the request are launched in the same Availability
+-- Zone. Instance proximity is maintained with this parameter, but the
+-- choice of Availability Zone is not. The group applies only to requests
+-- for Spot Instances of the same instance type. Any additional Spot
+-- Instance requests that are specified with the same Availability Zone
+-- group name are launched in that same Availability Zone, as long as at
+-- least one instance from the group is still active.
+--
+-- If there is no active instance running in the Availability Zone group
+-- that you specify for a new Spot Instance request (all instances are
+-- terminated, the request is expired, or the maximum price you specified
+-- falls below current Spot price), then Amazon EC2 launches the instance
+-- in any Availability Zone where the constraint can be met. Consequently,
+-- the subsequent set of Spot Instances could be placed in a different zone
+-- from the original request, even if you specified the same Availability
+-- Zone group.
+--
+-- Default: Instances are launched in any available Availability Zone.
+requestSpotInstances_availabilityZoneGroup :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Text)
+requestSpotInstances_availabilityZoneGroup = Lens.lens (\RequestSpotInstances' {availabilityZoneGroup} -> availabilityZoneGroup) (\s@RequestSpotInstances' {} a -> s {availabilityZoneGroup = a} :: RequestSpotInstances)
+
+-- | Deprecated.
+requestSpotInstances_blockDurationMinutes :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Int)
+requestSpotInstances_blockDurationMinutes = Lens.lens (\RequestSpotInstances' {blockDurationMinutes} -> blockDurationMinutes) (\s@RequestSpotInstances' {} a -> s {blockDurationMinutes = a} :: RequestSpotInstances)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+requestSpotInstances_clientToken :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Text)
+requestSpotInstances_clientToken = Lens.lens (\RequestSpotInstances' {clientToken} -> clientToken) (\s@RequestSpotInstances' {} a -> s {clientToken = a} :: RequestSpotInstances)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+requestSpotInstances_dryRun :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Bool)
+requestSpotInstances_dryRun = Lens.lens (\RequestSpotInstances' {dryRun} -> dryRun) (\s@RequestSpotInstances' {} a -> s {dryRun = a} :: RequestSpotInstances)
+
+-- | The maximum number of Spot Instances to launch.
+--
+-- Default: 1
+requestSpotInstances_instanceCount :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Int)
+requestSpotInstances_instanceCount = Lens.lens (\RequestSpotInstances' {instanceCount} -> instanceCount) (\s@RequestSpotInstances' {} a -> s {instanceCount = a} :: RequestSpotInstances)
+
+-- | The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+requestSpotInstances_instanceInterruptionBehavior :: Lens.Lens' RequestSpotInstances (Prelude.Maybe InstanceInterruptionBehavior)
+requestSpotInstances_instanceInterruptionBehavior = Lens.lens (\RequestSpotInstances' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@RequestSpotInstances' {} a -> s {instanceInterruptionBehavior = a} :: RequestSpotInstances)
+
+-- | The instance launch group. Launch groups are Spot Instances that launch
+-- together and terminate together.
+--
+-- Default: Instances are launched and terminated individually
+requestSpotInstances_launchGroup :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Text)
+requestSpotInstances_launchGroup = Lens.lens (\RequestSpotInstances' {launchGroup} -> launchGroup) (\s@RequestSpotInstances' {} a -> s {launchGroup = a} :: RequestSpotInstances)
+
+-- | The launch specification.
+requestSpotInstances_launchSpecification :: Lens.Lens' RequestSpotInstances (Prelude.Maybe RequestSpotLaunchSpecification)
+requestSpotInstances_launchSpecification = Lens.lens (\RequestSpotInstances' {launchSpecification} -> launchSpecification) (\s@RequestSpotInstances' {} a -> s {launchSpecification = a} :: RequestSpotInstances)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+requestSpotInstances_spotPrice :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.Text)
+requestSpotInstances_spotPrice = Lens.lens (\RequestSpotInstances' {spotPrice} -> spotPrice) (\s@RequestSpotInstances' {} a -> s {spotPrice = a} :: RequestSpotInstances)
+
+-- | The key-value pair for tagging the Spot Instance request on creation.
+-- The value for @ResourceType@ must be @spot-instances-request@, otherwise
+-- the Spot Instance request fails. To tag the Spot Instance request after
+-- it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+requestSpotInstances_tagSpecifications :: Lens.Lens' RequestSpotInstances (Prelude.Maybe [TagSpecification])
+requestSpotInstances_tagSpecifications = Lens.lens (\RequestSpotInstances' {tagSpecifications} -> tagSpecifications) (\s@RequestSpotInstances' {} a -> s {tagSpecifications = a} :: RequestSpotInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Spot Instance request type.
+--
+-- Default: @one-time@
+requestSpotInstances_type :: Lens.Lens' RequestSpotInstances (Prelude.Maybe SpotInstanceType)
+requestSpotInstances_type = Lens.lens (\RequestSpotInstances' {type'} -> type') (\s@RequestSpotInstances' {} a -> s {type' = a} :: RequestSpotInstances)
+
+-- | The start date of the request. If this is a one-time request, the
+-- request becomes active at this date and time and remains active until
+-- all instances launch, the request expires, or the request is canceled.
+-- If the request is persistent, the request becomes active at this date
+-- and time and remains active until it expires or is canceled.
+--
+-- The specified start date and time cannot be equal to the current date
+-- and time. You must specify a start date and time that occurs after the
+-- current date and time.
+requestSpotInstances_validFrom :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.UTCTime)
+requestSpotInstances_validFrom = Lens.lens (\RequestSpotInstances' {validFrom} -> validFrom) (\s@RequestSpotInstances' {} a -> s {validFrom = a} :: RequestSpotInstances) Prelude.. Lens.mapping Data._Time
+
+-- | The end date of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- -   For a persistent request, the request remains active until the
+--     @ValidUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, the request remains active until all
+--     instances launch, the request is canceled, or the @ValidUntil@ date
+--     and time is reached. By default, the request is valid for 7 days
+--     from the date the request was created.
+requestSpotInstances_validUntil :: Lens.Lens' RequestSpotInstances (Prelude.Maybe Prelude.UTCTime)
+requestSpotInstances_validUntil = Lens.lens (\RequestSpotInstances' {validUntil} -> validUntil) (\s@RequestSpotInstances' {} a -> s {validUntil = a} :: RequestSpotInstances) Prelude.. Lens.mapping Data._Time
+
+instance Core.AWSRequest RequestSpotInstances where
+  type
+    AWSResponse RequestSpotInstances =
+      RequestSpotInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RequestSpotInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "spotInstanceRequestSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RequestSpotInstances where
+  hashWithSalt _salt RequestSpotInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZoneGroup
+      `Prelude.hashWithSalt` blockDurationMinutes
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` instanceInterruptionBehavior
+      `Prelude.hashWithSalt` launchGroup
+      `Prelude.hashWithSalt` launchSpecification
+      `Prelude.hashWithSalt` spotPrice
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validFrom
+      `Prelude.hashWithSalt` validUntil
+
+instance Prelude.NFData RequestSpotInstances where
+  rnf RequestSpotInstances' {..} =
+    Prelude.rnf availabilityZoneGroup
+      `Prelude.seq` Prelude.rnf blockDurationMinutes
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf launchGroup
+      `Prelude.seq` Prelude.rnf launchSpecification
+      `Prelude.seq` Prelude.rnf spotPrice
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validFrom
+      `Prelude.seq` Prelude.rnf validUntil
+
+instance Data.ToHeaders RequestSpotInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RequestSpotInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RequestSpotInstances where
+  toQuery RequestSpotInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RequestSpotInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AvailabilityZoneGroup"
+          Data.=: availabilityZoneGroup,
+        "BlockDurationMinutes" Data.=: blockDurationMinutes,
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "InstanceCount" Data.=: instanceCount,
+        "InstanceInterruptionBehavior"
+          Data.=: instanceInterruptionBehavior,
+        "LaunchGroup" Data.=: launchGroup,
+        "LaunchSpecification" Data.=: launchSpecification,
+        "SpotPrice" Data.=: spotPrice,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "Type" Data.=: type',
+        "ValidFrom" Data.=: validFrom,
+        "ValidUntil" Data.=: validUntil
+      ]
+
+-- | Contains the output of RequestSpotInstances.
+--
+-- /See:/ 'newRequestSpotInstancesResponse' smart constructor.
+data RequestSpotInstancesResponse = RequestSpotInstancesResponse'
+  { -- | One or more Spot Instance requests.
+    spotInstanceRequests :: Prelude.Maybe [SpotInstanceRequest],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestSpotInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'spotInstanceRequests', 'requestSpotInstancesResponse_spotInstanceRequests' - One or more Spot Instance requests.
+--
+-- 'httpStatus', 'requestSpotInstancesResponse_httpStatus' - The response's http status code.
+newRequestSpotInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RequestSpotInstancesResponse
+newRequestSpotInstancesResponse pHttpStatus_ =
+  RequestSpotInstancesResponse'
+    { spotInstanceRequests =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | One or more Spot Instance requests.
+requestSpotInstancesResponse_spotInstanceRequests :: Lens.Lens' RequestSpotInstancesResponse (Prelude.Maybe [SpotInstanceRequest])
+requestSpotInstancesResponse_spotInstanceRequests = Lens.lens (\RequestSpotInstancesResponse' {spotInstanceRequests} -> spotInstanceRequests) (\s@RequestSpotInstancesResponse' {} a -> s {spotInstanceRequests = a} :: RequestSpotInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+requestSpotInstancesResponse_httpStatus :: Lens.Lens' RequestSpotInstancesResponse Prelude.Int
+requestSpotInstancesResponse_httpStatus = Lens.lens (\RequestSpotInstancesResponse' {httpStatus} -> httpStatus) (\s@RequestSpotInstancesResponse' {} a -> s {httpStatus = a} :: RequestSpotInstancesResponse)
+
+instance Prelude.NFData RequestSpotInstancesResponse where
+  rnf RequestSpotInstancesResponse' {..} =
+    Prelude.rnf spotInstanceRequests
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ResetAddressAttribute.hs b/gen/Amazonka/EC2/ResetAddressAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetAddressAttribute.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetAddressAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets the attribute of the specified IP address. For requirements, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html#Using_Elastic_Addressing_Reverse_DNS Using reverse DNS for email applications>.
+module Amazonka.EC2.ResetAddressAttribute
+  ( -- * Creating a Request
+    ResetAddressAttribute (..),
+    newResetAddressAttribute,
+
+    -- * Request Lenses
+    resetAddressAttribute_dryRun,
+    resetAddressAttribute_allocationId,
+    resetAddressAttribute_attribute,
+
+    -- * Destructuring the Response
+    ResetAddressAttributeResponse (..),
+    newResetAddressAttributeResponse,
+
+    -- * Response Lenses
+    resetAddressAttributeResponse_address,
+    resetAddressAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetAddressAttribute' smart constructor.
+data ResetAddressAttribute = ResetAddressAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | [EC2-VPC] The allocation ID.
+    allocationId :: Prelude.Text,
+    -- | The attribute of the IP address.
+    attribute :: AddressAttributeName
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetAddressAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'resetAddressAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'allocationId', 'resetAddressAttribute_allocationId' - [EC2-VPC] The allocation ID.
+--
+-- 'attribute', 'resetAddressAttribute_attribute' - The attribute of the IP address.
+newResetAddressAttribute ::
+  -- | 'allocationId'
+  Prelude.Text ->
+  -- | 'attribute'
+  AddressAttributeName ->
+  ResetAddressAttribute
+newResetAddressAttribute pAllocationId_ pAttribute_ =
+  ResetAddressAttribute'
+    { dryRun = Prelude.Nothing,
+      allocationId = pAllocationId_,
+      attribute = pAttribute_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetAddressAttribute_dryRun :: Lens.Lens' ResetAddressAttribute (Prelude.Maybe Prelude.Bool)
+resetAddressAttribute_dryRun = Lens.lens (\ResetAddressAttribute' {dryRun} -> dryRun) (\s@ResetAddressAttribute' {} a -> s {dryRun = a} :: ResetAddressAttribute)
+
+-- | [EC2-VPC] The allocation ID.
+resetAddressAttribute_allocationId :: Lens.Lens' ResetAddressAttribute Prelude.Text
+resetAddressAttribute_allocationId = Lens.lens (\ResetAddressAttribute' {allocationId} -> allocationId) (\s@ResetAddressAttribute' {} a -> s {allocationId = a} :: ResetAddressAttribute)
+
+-- | The attribute of the IP address.
+resetAddressAttribute_attribute :: Lens.Lens' ResetAddressAttribute AddressAttributeName
+resetAddressAttribute_attribute = Lens.lens (\ResetAddressAttribute' {attribute} -> attribute) (\s@ResetAddressAttribute' {} a -> s {attribute = a} :: ResetAddressAttribute)
+
+instance Core.AWSRequest ResetAddressAttribute where
+  type
+    AWSResponse ResetAddressAttribute =
+      ResetAddressAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ResetAddressAttributeResponse'
+            Prelude.<$> (x Data..@? "address")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResetAddressAttribute where
+  hashWithSalt _salt ResetAddressAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` attribute
+
+instance Prelude.NFData ResetAddressAttribute where
+  rnf ResetAddressAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf attribute
+
+instance Data.ToHeaders ResetAddressAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetAddressAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetAddressAttribute where
+  toQuery ResetAddressAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ResetAddressAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "AllocationId" Data.=: allocationId,
+        "Attribute" Data.=: attribute
+      ]
+
+-- | /See:/ 'newResetAddressAttributeResponse' smart constructor.
+data ResetAddressAttributeResponse = ResetAddressAttributeResponse'
+  { -- | Information about the IP address.
+    address :: Prelude.Maybe AddressAttribute,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetAddressAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'resetAddressAttributeResponse_address' - Information about the IP address.
+--
+-- 'httpStatus', 'resetAddressAttributeResponse_httpStatus' - The response's http status code.
+newResetAddressAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResetAddressAttributeResponse
+newResetAddressAttributeResponse pHttpStatus_ =
+  ResetAddressAttributeResponse'
+    { address =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the IP address.
+resetAddressAttributeResponse_address :: Lens.Lens' ResetAddressAttributeResponse (Prelude.Maybe AddressAttribute)
+resetAddressAttributeResponse_address = Lens.lens (\ResetAddressAttributeResponse' {address} -> address) (\s@ResetAddressAttributeResponse' {} a -> s {address = a} :: ResetAddressAttributeResponse)
+
+-- | The response's http status code.
+resetAddressAttributeResponse_httpStatus :: Lens.Lens' ResetAddressAttributeResponse Prelude.Int
+resetAddressAttributeResponse_httpStatus = Lens.lens (\ResetAddressAttributeResponse' {httpStatus} -> httpStatus) (\s@ResetAddressAttributeResponse' {} a -> s {httpStatus = a} :: ResetAddressAttributeResponse)
+
+instance Prelude.NFData ResetAddressAttributeResponse where
+  rnf ResetAddressAttributeResponse' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ResetEbsDefaultKmsKeyId.hs b/gen/Amazonka/EC2/ResetEbsDefaultKmsKeyId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetEbsDefaultKmsKeyId.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetEbsDefaultKmsKeyId
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets the default KMS key for EBS encryption for your account in this
+-- Region to the Amazon Web Services managed KMS key for EBS.
+--
+-- After resetting the default KMS key to the Amazon Web Services managed
+-- KMS key, you can continue to encrypt by a customer managed KMS key by
+-- specifying it when you create the volume. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS encryption>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ResetEbsDefaultKmsKeyId
+  ( -- * Creating a Request
+    ResetEbsDefaultKmsKeyId (..),
+    newResetEbsDefaultKmsKeyId,
+
+    -- * Request Lenses
+    resetEbsDefaultKmsKeyId_dryRun,
+
+    -- * Destructuring the Response
+    ResetEbsDefaultKmsKeyIdResponse (..),
+    newResetEbsDefaultKmsKeyIdResponse,
+
+    -- * Response Lenses
+    resetEbsDefaultKmsKeyIdResponse_kmsKeyId,
+    resetEbsDefaultKmsKeyIdResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetEbsDefaultKmsKeyId' smart constructor.
+data ResetEbsDefaultKmsKeyId = ResetEbsDefaultKmsKeyId'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetEbsDefaultKmsKeyId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'resetEbsDefaultKmsKeyId_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+newResetEbsDefaultKmsKeyId ::
+  ResetEbsDefaultKmsKeyId
+newResetEbsDefaultKmsKeyId =
+  ResetEbsDefaultKmsKeyId' {dryRun = Prelude.Nothing}
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetEbsDefaultKmsKeyId_dryRun :: Lens.Lens' ResetEbsDefaultKmsKeyId (Prelude.Maybe Prelude.Bool)
+resetEbsDefaultKmsKeyId_dryRun = Lens.lens (\ResetEbsDefaultKmsKeyId' {dryRun} -> dryRun) (\s@ResetEbsDefaultKmsKeyId' {} a -> s {dryRun = a} :: ResetEbsDefaultKmsKeyId)
+
+instance Core.AWSRequest ResetEbsDefaultKmsKeyId where
+  type
+    AWSResponse ResetEbsDefaultKmsKeyId =
+      ResetEbsDefaultKmsKeyIdResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ResetEbsDefaultKmsKeyIdResponse'
+            Prelude.<$> (x Data..@? "kmsKeyId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResetEbsDefaultKmsKeyId where
+  hashWithSalt _salt ResetEbsDefaultKmsKeyId' {..} =
+    _salt `Prelude.hashWithSalt` dryRun
+
+instance Prelude.NFData ResetEbsDefaultKmsKeyId where
+  rnf ResetEbsDefaultKmsKeyId' {..} = Prelude.rnf dryRun
+
+instance Data.ToHeaders ResetEbsDefaultKmsKeyId where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetEbsDefaultKmsKeyId where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetEbsDefaultKmsKeyId where
+  toQuery ResetEbsDefaultKmsKeyId' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ResetEbsDefaultKmsKeyId" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun
+      ]
+
+-- | /See:/ 'newResetEbsDefaultKmsKeyIdResponse' smart constructor.
+data ResetEbsDefaultKmsKeyIdResponse = ResetEbsDefaultKmsKeyIdResponse'
+  { -- | The Amazon Resource Name (ARN) of the default KMS key for EBS encryption
+    -- by default.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetEbsDefaultKmsKeyIdResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'kmsKeyId', 'resetEbsDefaultKmsKeyIdResponse_kmsKeyId' - The Amazon Resource Name (ARN) of the default KMS key for EBS encryption
+-- by default.
+--
+-- 'httpStatus', 'resetEbsDefaultKmsKeyIdResponse_httpStatus' - The response's http status code.
+newResetEbsDefaultKmsKeyIdResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResetEbsDefaultKmsKeyIdResponse
+newResetEbsDefaultKmsKeyIdResponse pHttpStatus_ =
+  ResetEbsDefaultKmsKeyIdResponse'
+    { kmsKeyId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the default KMS key for EBS encryption
+-- by default.
+resetEbsDefaultKmsKeyIdResponse_kmsKeyId :: Lens.Lens' ResetEbsDefaultKmsKeyIdResponse (Prelude.Maybe Prelude.Text)
+resetEbsDefaultKmsKeyIdResponse_kmsKeyId = Lens.lens (\ResetEbsDefaultKmsKeyIdResponse' {kmsKeyId} -> kmsKeyId) (\s@ResetEbsDefaultKmsKeyIdResponse' {} a -> s {kmsKeyId = a} :: ResetEbsDefaultKmsKeyIdResponse)
+
+-- | The response's http status code.
+resetEbsDefaultKmsKeyIdResponse_httpStatus :: Lens.Lens' ResetEbsDefaultKmsKeyIdResponse Prelude.Int
+resetEbsDefaultKmsKeyIdResponse_httpStatus = Lens.lens (\ResetEbsDefaultKmsKeyIdResponse' {httpStatus} -> httpStatus) (\s@ResetEbsDefaultKmsKeyIdResponse' {} a -> s {httpStatus = a} :: ResetEbsDefaultKmsKeyIdResponse)
+
+instance
+  Prelude.NFData
+    ResetEbsDefaultKmsKeyIdResponse
+  where
+  rnf ResetEbsDefaultKmsKeyIdResponse' {..} =
+    Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ResetFpgaImageAttribute.hs b/gen/Amazonka/EC2/ResetFpgaImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetFpgaImageAttribute.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetFpgaImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets the specified attribute of the specified Amazon FPGA Image (AFI)
+-- to its default value. You can only reset the load permission attribute.
+module Amazonka.EC2.ResetFpgaImageAttribute
+  ( -- * Creating a Request
+    ResetFpgaImageAttribute (..),
+    newResetFpgaImageAttribute,
+
+    -- * Request Lenses
+    resetFpgaImageAttribute_attribute,
+    resetFpgaImageAttribute_dryRun,
+    resetFpgaImageAttribute_fpgaImageId,
+
+    -- * Destructuring the Response
+    ResetFpgaImageAttributeResponse (..),
+    newResetFpgaImageAttributeResponse,
+
+    -- * Response Lenses
+    resetFpgaImageAttributeResponse_return,
+    resetFpgaImageAttributeResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetFpgaImageAttribute' smart constructor.
+data ResetFpgaImageAttribute = ResetFpgaImageAttribute'
+  { -- | The attribute.
+    attribute :: Prelude.Maybe ResetFpgaImageAttributeName,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AFI.
+    fpgaImageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetFpgaImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attribute', 'resetFpgaImageAttribute_attribute' - The attribute.
+--
+-- 'dryRun', 'resetFpgaImageAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fpgaImageId', 'resetFpgaImageAttribute_fpgaImageId' - The ID of the AFI.
+newResetFpgaImageAttribute ::
+  -- | 'fpgaImageId'
+  Prelude.Text ->
+  ResetFpgaImageAttribute
+newResetFpgaImageAttribute pFpgaImageId_ =
+  ResetFpgaImageAttribute'
+    { attribute =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      fpgaImageId = pFpgaImageId_
+    }
+
+-- | The attribute.
+resetFpgaImageAttribute_attribute :: Lens.Lens' ResetFpgaImageAttribute (Prelude.Maybe ResetFpgaImageAttributeName)
+resetFpgaImageAttribute_attribute = Lens.lens (\ResetFpgaImageAttribute' {attribute} -> attribute) (\s@ResetFpgaImageAttribute' {} a -> s {attribute = a} :: ResetFpgaImageAttribute)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetFpgaImageAttribute_dryRun :: Lens.Lens' ResetFpgaImageAttribute (Prelude.Maybe Prelude.Bool)
+resetFpgaImageAttribute_dryRun = Lens.lens (\ResetFpgaImageAttribute' {dryRun} -> dryRun) (\s@ResetFpgaImageAttribute' {} a -> s {dryRun = a} :: ResetFpgaImageAttribute)
+
+-- | The ID of the AFI.
+resetFpgaImageAttribute_fpgaImageId :: Lens.Lens' ResetFpgaImageAttribute Prelude.Text
+resetFpgaImageAttribute_fpgaImageId = Lens.lens (\ResetFpgaImageAttribute' {fpgaImageId} -> fpgaImageId) (\s@ResetFpgaImageAttribute' {} a -> s {fpgaImageId = a} :: ResetFpgaImageAttribute)
+
+instance Core.AWSRequest ResetFpgaImageAttribute where
+  type
+    AWSResponse ResetFpgaImageAttribute =
+      ResetFpgaImageAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          ResetFpgaImageAttributeResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ResetFpgaImageAttribute where
+  hashWithSalt _salt ResetFpgaImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fpgaImageId
+
+instance Prelude.NFData ResetFpgaImageAttribute where
+  rnf ResetFpgaImageAttribute' {..} =
+    Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fpgaImageId
+
+instance Data.ToHeaders ResetFpgaImageAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetFpgaImageAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetFpgaImageAttribute where
+  toQuery ResetFpgaImageAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ResetFpgaImageAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "Attribute" Data.=: attribute,
+        "DryRun" Data.=: dryRun,
+        "FpgaImageId" Data.=: fpgaImageId
+      ]
+
+-- | /See:/ 'newResetFpgaImageAttributeResponse' smart constructor.
+data ResetFpgaImageAttributeResponse = ResetFpgaImageAttributeResponse'
+  { -- | Is @true@ if the request succeeds, and an error otherwise.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetFpgaImageAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'resetFpgaImageAttributeResponse_return' - Is @true@ if the request succeeds, and an error otherwise.
+--
+-- 'httpStatus', 'resetFpgaImageAttributeResponse_httpStatus' - The response's http status code.
+newResetFpgaImageAttributeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ResetFpgaImageAttributeResponse
+newResetFpgaImageAttributeResponse pHttpStatus_ =
+  ResetFpgaImageAttributeResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Is @true@ if the request succeeds, and an error otherwise.
+resetFpgaImageAttributeResponse_return :: Lens.Lens' ResetFpgaImageAttributeResponse (Prelude.Maybe Prelude.Bool)
+resetFpgaImageAttributeResponse_return = Lens.lens (\ResetFpgaImageAttributeResponse' {return'} -> return') (\s@ResetFpgaImageAttributeResponse' {} a -> s {return' = a} :: ResetFpgaImageAttributeResponse)
+
+-- | The response's http status code.
+resetFpgaImageAttributeResponse_httpStatus :: Lens.Lens' ResetFpgaImageAttributeResponse Prelude.Int
+resetFpgaImageAttributeResponse_httpStatus = Lens.lens (\ResetFpgaImageAttributeResponse' {httpStatus} -> httpStatus) (\s@ResetFpgaImageAttributeResponse' {} a -> s {httpStatus = a} :: ResetFpgaImageAttributeResponse)
+
+instance
+  Prelude.NFData
+    ResetFpgaImageAttributeResponse
+  where
+  rnf ResetFpgaImageAttributeResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/ResetImageAttribute.hs b/gen/Amazonka/EC2/ResetImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetImageAttribute.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets an attribute of an AMI to its default value.
+module Amazonka.EC2.ResetImageAttribute
+  ( -- * Creating a Request
+    ResetImageAttribute (..),
+    newResetImageAttribute,
+
+    -- * Request Lenses
+    resetImageAttribute_dryRun,
+    resetImageAttribute_attribute,
+    resetImageAttribute_imageId,
+
+    -- * Destructuring the Response
+    ResetImageAttributeResponse (..),
+    newResetImageAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ResetImageAttribute.
+--
+-- /See:/ 'newResetImageAttribute' smart constructor.
+data ResetImageAttribute = ResetImageAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The attribute to reset (currently you can only reset the launch
+    -- permission attribute).
+    attribute :: ResetImageAttributeName,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'resetImageAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'resetImageAttribute_attribute' - The attribute to reset (currently you can only reset the launch
+-- permission attribute).
+--
+-- 'imageId', 'resetImageAttribute_imageId' - The ID of the AMI.
+newResetImageAttribute ::
+  -- | 'attribute'
+  ResetImageAttributeName ->
+  -- | 'imageId'
+  Prelude.Text ->
+  ResetImageAttribute
+newResetImageAttribute pAttribute_ pImageId_ =
+  ResetImageAttribute'
+    { dryRun = Prelude.Nothing,
+      attribute = pAttribute_,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetImageAttribute_dryRun :: Lens.Lens' ResetImageAttribute (Prelude.Maybe Prelude.Bool)
+resetImageAttribute_dryRun = Lens.lens (\ResetImageAttribute' {dryRun} -> dryRun) (\s@ResetImageAttribute' {} a -> s {dryRun = a} :: ResetImageAttribute)
+
+-- | The attribute to reset (currently you can only reset the launch
+-- permission attribute).
+resetImageAttribute_attribute :: Lens.Lens' ResetImageAttribute ResetImageAttributeName
+resetImageAttribute_attribute = Lens.lens (\ResetImageAttribute' {attribute} -> attribute) (\s@ResetImageAttribute' {} a -> s {attribute = a} :: ResetImageAttribute)
+
+-- | The ID of the AMI.
+resetImageAttribute_imageId :: Lens.Lens' ResetImageAttribute Prelude.Text
+resetImageAttribute_imageId = Lens.lens (\ResetImageAttribute' {imageId} -> imageId) (\s@ResetImageAttribute' {} a -> s {imageId = a} :: ResetImageAttribute)
+
+instance Core.AWSRequest ResetImageAttribute where
+  type
+    AWSResponse ResetImageAttribute =
+      ResetImageAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull ResetImageAttributeResponse'
+
+instance Prelude.Hashable ResetImageAttribute where
+  hashWithSalt _salt ResetImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData ResetImageAttribute where
+  rnf ResetImageAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders ResetImageAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetImageAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetImageAttribute where
+  toQuery ResetImageAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ResetImageAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newResetImageAttributeResponse' smart constructor.
+data ResetImageAttributeResponse = ResetImageAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetImageAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResetImageAttributeResponse ::
+  ResetImageAttributeResponse
+newResetImageAttributeResponse =
+  ResetImageAttributeResponse'
+
+instance Prelude.NFData ResetImageAttributeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ResetInstanceAttribute.hs b/gen/Amazonka/EC2/ResetInstanceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetInstanceAttribute.hs
@@ -0,0 +1,184 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetInstanceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets an attribute of an instance to its default value. To reset the
+-- @kernel@ or @ramdisk@, the instance must be in a stopped state. To reset
+-- the @sourceDestCheck@, the instance can be either running or stopped.
+--
+-- The @sourceDestCheck@ attribute controls whether source\/destination
+-- checking is enabled. The default value is @true@, which means checking
+-- is enabled. This value must be @false@ for a NAT instance to perform
+-- NAT. For more information, see
+-- <https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances>
+-- in the /Amazon VPC User Guide/.
+module Amazonka.EC2.ResetInstanceAttribute
+  ( -- * Creating a Request
+    ResetInstanceAttribute (..),
+    newResetInstanceAttribute,
+
+    -- * Request Lenses
+    resetInstanceAttribute_dryRun,
+    resetInstanceAttribute_attribute,
+    resetInstanceAttribute_instanceId,
+
+    -- * Destructuring the Response
+    ResetInstanceAttributeResponse (..),
+    newResetInstanceAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetInstanceAttribute' smart constructor.
+data ResetInstanceAttribute = ResetInstanceAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The attribute to reset.
+    --
+    -- You can only reset the following attributes: @kernel@ | @ramdisk@ |
+    -- @sourceDestCheck@.
+    attribute :: InstanceAttributeName,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetInstanceAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'resetInstanceAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'resetInstanceAttribute_attribute' - The attribute to reset.
+--
+-- You can only reset the following attributes: @kernel@ | @ramdisk@ |
+-- @sourceDestCheck@.
+--
+-- 'instanceId', 'resetInstanceAttribute_instanceId' - The ID of the instance.
+newResetInstanceAttribute ::
+  -- | 'attribute'
+  InstanceAttributeName ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  ResetInstanceAttribute
+newResetInstanceAttribute pAttribute_ pInstanceId_ =
+  ResetInstanceAttribute'
+    { dryRun = Prelude.Nothing,
+      attribute = pAttribute_,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetInstanceAttribute_dryRun :: Lens.Lens' ResetInstanceAttribute (Prelude.Maybe Prelude.Bool)
+resetInstanceAttribute_dryRun = Lens.lens (\ResetInstanceAttribute' {dryRun} -> dryRun) (\s@ResetInstanceAttribute' {} a -> s {dryRun = a} :: ResetInstanceAttribute)
+
+-- | The attribute to reset.
+--
+-- You can only reset the following attributes: @kernel@ | @ramdisk@ |
+-- @sourceDestCheck@.
+resetInstanceAttribute_attribute :: Lens.Lens' ResetInstanceAttribute InstanceAttributeName
+resetInstanceAttribute_attribute = Lens.lens (\ResetInstanceAttribute' {attribute} -> attribute) (\s@ResetInstanceAttribute' {} a -> s {attribute = a} :: ResetInstanceAttribute)
+
+-- | The ID of the instance.
+resetInstanceAttribute_instanceId :: Lens.Lens' ResetInstanceAttribute Prelude.Text
+resetInstanceAttribute_instanceId = Lens.lens (\ResetInstanceAttribute' {instanceId} -> instanceId) (\s@ResetInstanceAttribute' {} a -> s {instanceId = a} :: ResetInstanceAttribute)
+
+instance Core.AWSRequest ResetInstanceAttribute where
+  type
+    AWSResponse ResetInstanceAttribute =
+      ResetInstanceAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ResetInstanceAttributeResponse'
+
+instance Prelude.Hashable ResetInstanceAttribute where
+  hashWithSalt _salt ResetInstanceAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData ResetInstanceAttribute where
+  rnf ResetInstanceAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders ResetInstanceAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetInstanceAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetInstanceAttribute where
+  toQuery ResetInstanceAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ResetInstanceAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newResetInstanceAttributeResponse' smart constructor.
+data ResetInstanceAttributeResponse = ResetInstanceAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetInstanceAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResetInstanceAttributeResponse ::
+  ResetInstanceAttributeResponse
+newResetInstanceAttributeResponse =
+  ResetInstanceAttributeResponse'
+
+instance
+  Prelude.NFData
+    ResetInstanceAttributeResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ResetNetworkInterfaceAttribute.hs b/gen/Amazonka/EC2/ResetNetworkInterfaceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetNetworkInterfaceAttribute.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetNetworkInterfaceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets a network interface attribute. You can specify only one attribute
+-- at a time.
+module Amazonka.EC2.ResetNetworkInterfaceAttribute
+  ( -- * Creating a Request
+    ResetNetworkInterfaceAttribute (..),
+    newResetNetworkInterfaceAttribute,
+
+    -- * Request Lenses
+    resetNetworkInterfaceAttribute_dryRun,
+    resetNetworkInterfaceAttribute_sourceDestCheck,
+    resetNetworkInterfaceAttribute_networkInterfaceId,
+
+    -- * Destructuring the Response
+    ResetNetworkInterfaceAttributeResponse (..),
+    newResetNetworkInterfaceAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for ResetNetworkInterfaceAttribute.
+--
+-- /See:/ 'newResetNetworkInterfaceAttribute' smart constructor.
+data ResetNetworkInterfaceAttribute = ResetNetworkInterfaceAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The source\/destination checking attribute. Resets the value to @true@.
+    sourceDestCheck :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetNetworkInterfaceAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'resetNetworkInterfaceAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'sourceDestCheck', 'resetNetworkInterfaceAttribute_sourceDestCheck' - The source\/destination checking attribute. Resets the value to @true@.
+--
+-- 'networkInterfaceId', 'resetNetworkInterfaceAttribute_networkInterfaceId' - The ID of the network interface.
+newResetNetworkInterfaceAttribute ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  ResetNetworkInterfaceAttribute
+newResetNetworkInterfaceAttribute
+  pNetworkInterfaceId_ =
+    ResetNetworkInterfaceAttribute'
+      { dryRun =
+          Prelude.Nothing,
+        sourceDestCheck = Prelude.Nothing,
+        networkInterfaceId = pNetworkInterfaceId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetNetworkInterfaceAttribute_dryRun :: Lens.Lens' ResetNetworkInterfaceAttribute (Prelude.Maybe Prelude.Bool)
+resetNetworkInterfaceAttribute_dryRun = Lens.lens (\ResetNetworkInterfaceAttribute' {dryRun} -> dryRun) (\s@ResetNetworkInterfaceAttribute' {} a -> s {dryRun = a} :: ResetNetworkInterfaceAttribute)
+
+-- | The source\/destination checking attribute. Resets the value to @true@.
+resetNetworkInterfaceAttribute_sourceDestCheck :: Lens.Lens' ResetNetworkInterfaceAttribute (Prelude.Maybe Prelude.Text)
+resetNetworkInterfaceAttribute_sourceDestCheck = Lens.lens (\ResetNetworkInterfaceAttribute' {sourceDestCheck} -> sourceDestCheck) (\s@ResetNetworkInterfaceAttribute' {} a -> s {sourceDestCheck = a} :: ResetNetworkInterfaceAttribute)
+
+-- | The ID of the network interface.
+resetNetworkInterfaceAttribute_networkInterfaceId :: Lens.Lens' ResetNetworkInterfaceAttribute Prelude.Text
+resetNetworkInterfaceAttribute_networkInterfaceId = Lens.lens (\ResetNetworkInterfaceAttribute' {networkInterfaceId} -> networkInterfaceId) (\s@ResetNetworkInterfaceAttribute' {} a -> s {networkInterfaceId = a} :: ResetNetworkInterfaceAttribute)
+
+instance
+  Core.AWSRequest
+    ResetNetworkInterfaceAttribute
+  where
+  type
+    AWSResponse ResetNetworkInterfaceAttribute =
+      ResetNetworkInterfaceAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ResetNetworkInterfaceAttributeResponse'
+
+instance
+  Prelude.Hashable
+    ResetNetworkInterfaceAttribute
+  where
+  hashWithSalt
+    _salt
+    ResetNetworkInterfaceAttribute' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` sourceDestCheck
+        `Prelude.hashWithSalt` networkInterfaceId
+
+instance
+  Prelude.NFData
+    ResetNetworkInterfaceAttribute
+  where
+  rnf ResetNetworkInterfaceAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf sourceDestCheck
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance
+  Data.ToHeaders
+    ResetNetworkInterfaceAttribute
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetNetworkInterfaceAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetNetworkInterfaceAttribute where
+  toQuery ResetNetworkInterfaceAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "ResetNetworkInterfaceAttribute" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "SourceDestCheck" Data.=: sourceDestCheck,
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newResetNetworkInterfaceAttributeResponse' smart constructor.
+data ResetNetworkInterfaceAttributeResponse = ResetNetworkInterfaceAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetNetworkInterfaceAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResetNetworkInterfaceAttributeResponse ::
+  ResetNetworkInterfaceAttributeResponse
+newResetNetworkInterfaceAttributeResponse =
+  ResetNetworkInterfaceAttributeResponse'
+
+instance
+  Prelude.NFData
+    ResetNetworkInterfaceAttributeResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/ResetSnapshotAttribute.hs b/gen/Amazonka/EC2/ResetSnapshotAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/ResetSnapshotAttribute.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.ResetSnapshotAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets permission settings for the specified snapshot.
+--
+-- For more information about modifying snapshot permissions, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html Share a snapshot>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.ResetSnapshotAttribute
+  ( -- * Creating a Request
+    ResetSnapshotAttribute (..),
+    newResetSnapshotAttribute,
+
+    -- * Request Lenses
+    resetSnapshotAttribute_dryRun,
+    resetSnapshotAttribute_attribute,
+    resetSnapshotAttribute_snapshotId,
+
+    -- * Destructuring the Response
+    ResetSnapshotAttributeResponse (..),
+    newResetSnapshotAttributeResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newResetSnapshotAttribute' smart constructor.
+data ResetSnapshotAttribute = ResetSnapshotAttribute'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The attribute to reset. Currently, only the attribute for permission to
+    -- create volumes can be reset.
+    attribute :: SnapshotAttributeName,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetSnapshotAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'resetSnapshotAttribute_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'attribute', 'resetSnapshotAttribute_attribute' - The attribute to reset. Currently, only the attribute for permission to
+-- create volumes can be reset.
+--
+-- 'snapshotId', 'resetSnapshotAttribute_snapshotId' - The ID of the snapshot.
+newResetSnapshotAttribute ::
+  -- | 'attribute'
+  SnapshotAttributeName ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  ResetSnapshotAttribute
+newResetSnapshotAttribute pAttribute_ pSnapshotId_ =
+  ResetSnapshotAttribute'
+    { dryRun = Prelude.Nothing,
+      attribute = pAttribute_,
+      snapshotId = pSnapshotId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+resetSnapshotAttribute_dryRun :: Lens.Lens' ResetSnapshotAttribute (Prelude.Maybe Prelude.Bool)
+resetSnapshotAttribute_dryRun = Lens.lens (\ResetSnapshotAttribute' {dryRun} -> dryRun) (\s@ResetSnapshotAttribute' {} a -> s {dryRun = a} :: ResetSnapshotAttribute)
+
+-- | The attribute to reset. Currently, only the attribute for permission to
+-- create volumes can be reset.
+resetSnapshotAttribute_attribute :: Lens.Lens' ResetSnapshotAttribute SnapshotAttributeName
+resetSnapshotAttribute_attribute = Lens.lens (\ResetSnapshotAttribute' {attribute} -> attribute) (\s@ResetSnapshotAttribute' {} a -> s {attribute = a} :: ResetSnapshotAttribute)
+
+-- | The ID of the snapshot.
+resetSnapshotAttribute_snapshotId :: Lens.Lens' ResetSnapshotAttribute Prelude.Text
+resetSnapshotAttribute_snapshotId = Lens.lens (\ResetSnapshotAttribute' {snapshotId} -> snapshotId) (\s@ResetSnapshotAttribute' {} a -> s {snapshotId = a} :: ResetSnapshotAttribute)
+
+instance Core.AWSRequest ResetSnapshotAttribute where
+  type
+    AWSResponse ResetSnapshotAttribute =
+      ResetSnapshotAttributeResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      ResetSnapshotAttributeResponse'
+
+instance Prelude.Hashable ResetSnapshotAttribute where
+  hashWithSalt _salt ResetSnapshotAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` attribute
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData ResetSnapshotAttribute where
+  rnf ResetSnapshotAttribute' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf attribute
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders ResetSnapshotAttribute where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ResetSnapshotAttribute where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ResetSnapshotAttribute where
+  toQuery ResetSnapshotAttribute' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ResetSnapshotAttribute" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Attribute" Data.=: attribute,
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newResetSnapshotAttributeResponse' smart constructor.
+data ResetSnapshotAttributeResponse = ResetSnapshotAttributeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResetSnapshotAttributeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newResetSnapshotAttributeResponse ::
+  ResetSnapshotAttributeResponse
+newResetSnapshotAttributeResponse =
+  ResetSnapshotAttributeResponse'
+
+instance
+  Prelude.NFData
+    ResetSnapshotAttributeResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/RestoreAddressToClassic.hs b/gen/Amazonka/EC2/RestoreAddressToClassic.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RestoreAddressToClassic.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RestoreAddressToClassic
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores an Elastic IP address that was previously moved to the EC2-VPC
+-- platform back to the EC2-Classic platform. You cannot move an Elastic IP
+-- address that was originally allocated for use in EC2-VPC. The Elastic IP
+-- address must not be associated with an instance or network interface.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.RestoreAddressToClassic
+  ( -- * Creating a Request
+    RestoreAddressToClassic (..),
+    newRestoreAddressToClassic,
+
+    -- * Request Lenses
+    restoreAddressToClassic_dryRun,
+    restoreAddressToClassic_publicIp,
+
+    -- * Destructuring the Response
+    RestoreAddressToClassicResponse (..),
+    newRestoreAddressToClassicResponse,
+
+    -- * Response Lenses
+    restoreAddressToClassicResponse_publicIp,
+    restoreAddressToClassicResponse_status,
+    restoreAddressToClassicResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRestoreAddressToClassic' smart constructor.
+data RestoreAddressToClassic = RestoreAddressToClassic'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Elastic IP address.
+    publicIp :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreAddressToClassic' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'restoreAddressToClassic_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'publicIp', 'restoreAddressToClassic_publicIp' - The Elastic IP address.
+newRestoreAddressToClassic ::
+  -- | 'publicIp'
+  Prelude.Text ->
+  RestoreAddressToClassic
+newRestoreAddressToClassic pPublicIp_ =
+  RestoreAddressToClassic'
+    { dryRun = Prelude.Nothing,
+      publicIp = pPublicIp_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+restoreAddressToClassic_dryRun :: Lens.Lens' RestoreAddressToClassic (Prelude.Maybe Prelude.Bool)
+restoreAddressToClassic_dryRun = Lens.lens (\RestoreAddressToClassic' {dryRun} -> dryRun) (\s@RestoreAddressToClassic' {} a -> s {dryRun = a} :: RestoreAddressToClassic)
+
+-- | The Elastic IP address.
+restoreAddressToClassic_publicIp :: Lens.Lens' RestoreAddressToClassic Prelude.Text
+restoreAddressToClassic_publicIp = Lens.lens (\RestoreAddressToClassic' {publicIp} -> publicIp) (\s@RestoreAddressToClassic' {} a -> s {publicIp = a} :: RestoreAddressToClassic)
+
+instance Core.AWSRequest RestoreAddressToClassic where
+  type
+    AWSResponse RestoreAddressToClassic =
+      RestoreAddressToClassicResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RestoreAddressToClassicResponse'
+            Prelude.<$> (x Data..@? "publicIp")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RestoreAddressToClassic where
+  hashWithSalt _salt RestoreAddressToClassic' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData RestoreAddressToClassic where
+  rnf RestoreAddressToClassic' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf publicIp
+
+instance Data.ToHeaders RestoreAddressToClassic where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RestoreAddressToClassic where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RestoreAddressToClassic where
+  toQuery RestoreAddressToClassic' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RestoreAddressToClassic" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PublicIp" Data.=: publicIp
+      ]
+
+-- | /See:/ 'newRestoreAddressToClassicResponse' smart constructor.
+data RestoreAddressToClassicResponse = RestoreAddressToClassicResponse'
+  { -- | The Elastic IP address.
+    publicIp :: Prelude.Maybe Prelude.Text,
+    -- | The move status for the IP address.
+    status :: Prelude.Maybe AddressStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreAddressToClassicResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'publicIp', 'restoreAddressToClassicResponse_publicIp' - The Elastic IP address.
+--
+-- 'status', 'restoreAddressToClassicResponse_status' - The move status for the IP address.
+--
+-- 'httpStatus', 'restoreAddressToClassicResponse_httpStatus' - The response's http status code.
+newRestoreAddressToClassicResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestoreAddressToClassicResponse
+newRestoreAddressToClassicResponse pHttpStatus_ =
+  RestoreAddressToClassicResponse'
+    { publicIp =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Elastic IP address.
+restoreAddressToClassicResponse_publicIp :: Lens.Lens' RestoreAddressToClassicResponse (Prelude.Maybe Prelude.Text)
+restoreAddressToClassicResponse_publicIp = Lens.lens (\RestoreAddressToClassicResponse' {publicIp} -> publicIp) (\s@RestoreAddressToClassicResponse' {} a -> s {publicIp = a} :: RestoreAddressToClassicResponse)
+
+-- | The move status for the IP address.
+restoreAddressToClassicResponse_status :: Lens.Lens' RestoreAddressToClassicResponse (Prelude.Maybe AddressStatus)
+restoreAddressToClassicResponse_status = Lens.lens (\RestoreAddressToClassicResponse' {status} -> status) (\s@RestoreAddressToClassicResponse' {} a -> s {status = a} :: RestoreAddressToClassicResponse)
+
+-- | The response's http status code.
+restoreAddressToClassicResponse_httpStatus :: Lens.Lens' RestoreAddressToClassicResponse Prelude.Int
+restoreAddressToClassicResponse_httpStatus = Lens.lens (\RestoreAddressToClassicResponse' {httpStatus} -> httpStatus) (\s@RestoreAddressToClassicResponse' {} a -> s {httpStatus = a} :: RestoreAddressToClassicResponse)
+
+instance
+  Prelude.NFData
+    RestoreAddressToClassicResponse
+  where
+  rnf RestoreAddressToClassicResponse' {..} =
+    Prelude.rnf publicIp
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RestoreImageFromRecycleBin.hs b/gen/Amazonka/EC2/RestoreImageFromRecycleBin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RestoreImageFromRecycleBin.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RestoreImageFromRecycleBin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores an AMI from the Recycle Bin. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin.html Recycle Bin>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.RestoreImageFromRecycleBin
+  ( -- * Creating a Request
+    RestoreImageFromRecycleBin (..),
+    newRestoreImageFromRecycleBin,
+
+    -- * Request Lenses
+    restoreImageFromRecycleBin_dryRun,
+    restoreImageFromRecycleBin_imageId,
+
+    -- * Destructuring the Response
+    RestoreImageFromRecycleBinResponse (..),
+    newRestoreImageFromRecycleBinResponse,
+
+    -- * Response Lenses
+    restoreImageFromRecycleBinResponse_return,
+    restoreImageFromRecycleBinResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRestoreImageFromRecycleBin' smart constructor.
+data RestoreImageFromRecycleBin = RestoreImageFromRecycleBin'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI to restore.
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreImageFromRecycleBin' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'restoreImageFromRecycleBin_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'restoreImageFromRecycleBin_imageId' - The ID of the AMI to restore.
+newRestoreImageFromRecycleBin ::
+  -- | 'imageId'
+  Prelude.Text ->
+  RestoreImageFromRecycleBin
+newRestoreImageFromRecycleBin pImageId_ =
+  RestoreImageFromRecycleBin'
+    { dryRun =
+        Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+restoreImageFromRecycleBin_dryRun :: Lens.Lens' RestoreImageFromRecycleBin (Prelude.Maybe Prelude.Bool)
+restoreImageFromRecycleBin_dryRun = Lens.lens (\RestoreImageFromRecycleBin' {dryRun} -> dryRun) (\s@RestoreImageFromRecycleBin' {} a -> s {dryRun = a} :: RestoreImageFromRecycleBin)
+
+-- | The ID of the AMI to restore.
+restoreImageFromRecycleBin_imageId :: Lens.Lens' RestoreImageFromRecycleBin Prelude.Text
+restoreImageFromRecycleBin_imageId = Lens.lens (\RestoreImageFromRecycleBin' {imageId} -> imageId) (\s@RestoreImageFromRecycleBin' {} a -> s {imageId = a} :: RestoreImageFromRecycleBin)
+
+instance Core.AWSRequest RestoreImageFromRecycleBin where
+  type
+    AWSResponse RestoreImageFromRecycleBin =
+      RestoreImageFromRecycleBinResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RestoreImageFromRecycleBinResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RestoreImageFromRecycleBin where
+  hashWithSalt _salt RestoreImageFromRecycleBin' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+
+instance Prelude.NFData RestoreImageFromRecycleBin where
+  rnf RestoreImageFromRecycleBin' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+
+instance Data.ToHeaders RestoreImageFromRecycleBin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RestoreImageFromRecycleBin where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RestoreImageFromRecycleBin where
+  toQuery RestoreImageFromRecycleBin' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RestoreImageFromRecycleBin" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "ImageId" Data.=: imageId
+      ]
+
+-- | /See:/ 'newRestoreImageFromRecycleBinResponse' smart constructor.
+data RestoreImageFromRecycleBinResponse = RestoreImageFromRecycleBinResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreImageFromRecycleBinResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'restoreImageFromRecycleBinResponse_return' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'restoreImageFromRecycleBinResponse_httpStatus' - The response's http status code.
+newRestoreImageFromRecycleBinResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestoreImageFromRecycleBinResponse
+newRestoreImageFromRecycleBinResponse pHttpStatus_ =
+  RestoreImageFromRecycleBinResponse'
+    { return' =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+restoreImageFromRecycleBinResponse_return :: Lens.Lens' RestoreImageFromRecycleBinResponse (Prelude.Maybe Prelude.Bool)
+restoreImageFromRecycleBinResponse_return = Lens.lens (\RestoreImageFromRecycleBinResponse' {return'} -> return') (\s@RestoreImageFromRecycleBinResponse' {} a -> s {return' = a} :: RestoreImageFromRecycleBinResponse)
+
+-- | The response's http status code.
+restoreImageFromRecycleBinResponse_httpStatus :: Lens.Lens' RestoreImageFromRecycleBinResponse Prelude.Int
+restoreImageFromRecycleBinResponse_httpStatus = Lens.lens (\RestoreImageFromRecycleBinResponse' {httpStatus} -> httpStatus) (\s@RestoreImageFromRecycleBinResponse' {} a -> s {httpStatus = a} :: RestoreImageFromRecycleBinResponse)
+
+instance
+  Prelude.NFData
+    RestoreImageFromRecycleBinResponse
+  where
+  rnf RestoreImageFromRecycleBinResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RestoreManagedPrefixListVersion.hs b/gen/Amazonka/EC2/RestoreManagedPrefixListVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RestoreManagedPrefixListVersion.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RestoreManagedPrefixListVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores the entries from a previous version of a managed prefix list to
+-- a new version of the prefix list.
+module Amazonka.EC2.RestoreManagedPrefixListVersion
+  ( -- * Creating a Request
+    RestoreManagedPrefixListVersion (..),
+    newRestoreManagedPrefixListVersion,
+
+    -- * Request Lenses
+    restoreManagedPrefixListVersion_dryRun,
+    restoreManagedPrefixListVersion_prefixListId,
+    restoreManagedPrefixListVersion_previousVersion,
+    restoreManagedPrefixListVersion_currentVersion,
+
+    -- * Destructuring the Response
+    RestoreManagedPrefixListVersionResponse (..),
+    newRestoreManagedPrefixListVersionResponse,
+
+    -- * Response Lenses
+    restoreManagedPrefixListVersionResponse_prefixList,
+    restoreManagedPrefixListVersionResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRestoreManagedPrefixListVersion' smart constructor.
+data RestoreManagedPrefixListVersion = RestoreManagedPrefixListVersion'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Text,
+    -- | The version to restore.
+    previousVersion :: Prelude.Integer,
+    -- | The current version number for the prefix list.
+    currentVersion :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreManagedPrefixListVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'restoreManagedPrefixListVersion_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'prefixListId', 'restoreManagedPrefixListVersion_prefixListId' - The ID of the prefix list.
+--
+-- 'previousVersion', 'restoreManagedPrefixListVersion_previousVersion' - The version to restore.
+--
+-- 'currentVersion', 'restoreManagedPrefixListVersion_currentVersion' - The current version number for the prefix list.
+newRestoreManagedPrefixListVersion ::
+  -- | 'prefixListId'
+  Prelude.Text ->
+  -- | 'previousVersion'
+  Prelude.Integer ->
+  -- | 'currentVersion'
+  Prelude.Integer ->
+  RestoreManagedPrefixListVersion
+newRestoreManagedPrefixListVersion
+  pPrefixListId_
+  pPreviousVersion_
+  pCurrentVersion_ =
+    RestoreManagedPrefixListVersion'
+      { dryRun =
+          Prelude.Nothing,
+        prefixListId = pPrefixListId_,
+        previousVersion = pPreviousVersion_,
+        currentVersion = pCurrentVersion_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+restoreManagedPrefixListVersion_dryRun :: Lens.Lens' RestoreManagedPrefixListVersion (Prelude.Maybe Prelude.Bool)
+restoreManagedPrefixListVersion_dryRun = Lens.lens (\RestoreManagedPrefixListVersion' {dryRun} -> dryRun) (\s@RestoreManagedPrefixListVersion' {} a -> s {dryRun = a} :: RestoreManagedPrefixListVersion)
+
+-- | The ID of the prefix list.
+restoreManagedPrefixListVersion_prefixListId :: Lens.Lens' RestoreManagedPrefixListVersion Prelude.Text
+restoreManagedPrefixListVersion_prefixListId = Lens.lens (\RestoreManagedPrefixListVersion' {prefixListId} -> prefixListId) (\s@RestoreManagedPrefixListVersion' {} a -> s {prefixListId = a} :: RestoreManagedPrefixListVersion)
+
+-- | The version to restore.
+restoreManagedPrefixListVersion_previousVersion :: Lens.Lens' RestoreManagedPrefixListVersion Prelude.Integer
+restoreManagedPrefixListVersion_previousVersion = Lens.lens (\RestoreManagedPrefixListVersion' {previousVersion} -> previousVersion) (\s@RestoreManagedPrefixListVersion' {} a -> s {previousVersion = a} :: RestoreManagedPrefixListVersion)
+
+-- | The current version number for the prefix list.
+restoreManagedPrefixListVersion_currentVersion :: Lens.Lens' RestoreManagedPrefixListVersion Prelude.Integer
+restoreManagedPrefixListVersion_currentVersion = Lens.lens (\RestoreManagedPrefixListVersion' {currentVersion} -> currentVersion) (\s@RestoreManagedPrefixListVersion' {} a -> s {currentVersion = a} :: RestoreManagedPrefixListVersion)
+
+instance
+  Core.AWSRequest
+    RestoreManagedPrefixListVersion
+  where
+  type
+    AWSResponse RestoreManagedPrefixListVersion =
+      RestoreManagedPrefixListVersionResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RestoreManagedPrefixListVersionResponse'
+            Prelude.<$> (x Data..@? "prefixList")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RestoreManagedPrefixListVersion
+  where
+  hashWithSalt
+    _salt
+    RestoreManagedPrefixListVersion' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` prefixListId
+        `Prelude.hashWithSalt` previousVersion
+        `Prelude.hashWithSalt` currentVersion
+
+instance
+  Prelude.NFData
+    RestoreManagedPrefixListVersion
+  where
+  rnf RestoreManagedPrefixListVersion' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf previousVersion
+      `Prelude.seq` Prelude.rnf currentVersion
+
+instance
+  Data.ToHeaders
+    RestoreManagedPrefixListVersion
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RestoreManagedPrefixListVersion where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RestoreManagedPrefixListVersion where
+  toQuery RestoreManagedPrefixListVersion' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "RestoreManagedPrefixListVersion" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PrefixListId" Data.=: prefixListId,
+        "PreviousVersion" Data.=: previousVersion,
+        "CurrentVersion" Data.=: currentVersion
+      ]
+
+-- | /See:/ 'newRestoreManagedPrefixListVersionResponse' smart constructor.
+data RestoreManagedPrefixListVersionResponse = RestoreManagedPrefixListVersionResponse'
+  { -- | Information about the prefix list.
+    prefixList :: Prelude.Maybe ManagedPrefixList,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreManagedPrefixListVersionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'prefixList', 'restoreManagedPrefixListVersionResponse_prefixList' - Information about the prefix list.
+--
+-- 'httpStatus', 'restoreManagedPrefixListVersionResponse_httpStatus' - The response's http status code.
+newRestoreManagedPrefixListVersionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestoreManagedPrefixListVersionResponse
+newRestoreManagedPrefixListVersionResponse
+  pHttpStatus_ =
+    RestoreManagedPrefixListVersionResponse'
+      { prefixList =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the prefix list.
+restoreManagedPrefixListVersionResponse_prefixList :: Lens.Lens' RestoreManagedPrefixListVersionResponse (Prelude.Maybe ManagedPrefixList)
+restoreManagedPrefixListVersionResponse_prefixList = Lens.lens (\RestoreManagedPrefixListVersionResponse' {prefixList} -> prefixList) (\s@RestoreManagedPrefixListVersionResponse' {} a -> s {prefixList = a} :: RestoreManagedPrefixListVersionResponse)
+
+-- | The response's http status code.
+restoreManagedPrefixListVersionResponse_httpStatus :: Lens.Lens' RestoreManagedPrefixListVersionResponse Prelude.Int
+restoreManagedPrefixListVersionResponse_httpStatus = Lens.lens (\RestoreManagedPrefixListVersionResponse' {httpStatus} -> httpStatus) (\s@RestoreManagedPrefixListVersionResponse' {} a -> s {httpStatus = a} :: RestoreManagedPrefixListVersionResponse)
+
+instance
+  Prelude.NFData
+    RestoreManagedPrefixListVersionResponse
+  where
+  rnf RestoreManagedPrefixListVersionResponse' {..} =
+    Prelude.rnf prefixList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RestoreSnapshotFromRecycleBin.hs b/gen/Amazonka/EC2/RestoreSnapshotFromRecycleBin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RestoreSnapshotFromRecycleBin.hs
@@ -0,0 +1,313 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RestoreSnapshotFromRecycleBin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores a snapshot from the Recycle Bin. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/recycle-bin-working-with-snaps.html#recycle-bin-restore-snaps Restore snapshots from the Recycle Bin>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.RestoreSnapshotFromRecycleBin
+  ( -- * Creating a Request
+    RestoreSnapshotFromRecycleBin (..),
+    newRestoreSnapshotFromRecycleBin,
+
+    -- * Request Lenses
+    restoreSnapshotFromRecycleBin_dryRun,
+    restoreSnapshotFromRecycleBin_snapshotId,
+
+    -- * Destructuring the Response
+    RestoreSnapshotFromRecycleBinResponse (..),
+    newRestoreSnapshotFromRecycleBinResponse,
+
+    -- * Response Lenses
+    restoreSnapshotFromRecycleBinResponse_description,
+    restoreSnapshotFromRecycleBinResponse_encrypted,
+    restoreSnapshotFromRecycleBinResponse_outpostArn,
+    restoreSnapshotFromRecycleBinResponse_ownerId,
+    restoreSnapshotFromRecycleBinResponse_progress,
+    restoreSnapshotFromRecycleBinResponse_snapshotId,
+    restoreSnapshotFromRecycleBinResponse_startTime,
+    restoreSnapshotFromRecycleBinResponse_state,
+    restoreSnapshotFromRecycleBinResponse_volumeId,
+    restoreSnapshotFromRecycleBinResponse_volumeSize,
+    restoreSnapshotFromRecycleBinResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRestoreSnapshotFromRecycleBin' smart constructor.
+data RestoreSnapshotFromRecycleBin = RestoreSnapshotFromRecycleBin'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the snapshot to restore.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreSnapshotFromRecycleBin' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'restoreSnapshotFromRecycleBin_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'snapshotId', 'restoreSnapshotFromRecycleBin_snapshotId' - The ID of the snapshot to restore.
+newRestoreSnapshotFromRecycleBin ::
+  -- | 'snapshotId'
+  Prelude.Text ->
+  RestoreSnapshotFromRecycleBin
+newRestoreSnapshotFromRecycleBin pSnapshotId_ =
+  RestoreSnapshotFromRecycleBin'
+    { dryRun =
+        Prelude.Nothing,
+      snapshotId = pSnapshotId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+restoreSnapshotFromRecycleBin_dryRun :: Lens.Lens' RestoreSnapshotFromRecycleBin (Prelude.Maybe Prelude.Bool)
+restoreSnapshotFromRecycleBin_dryRun = Lens.lens (\RestoreSnapshotFromRecycleBin' {dryRun} -> dryRun) (\s@RestoreSnapshotFromRecycleBin' {} a -> s {dryRun = a} :: RestoreSnapshotFromRecycleBin)
+
+-- | The ID of the snapshot to restore.
+restoreSnapshotFromRecycleBin_snapshotId :: Lens.Lens' RestoreSnapshotFromRecycleBin Prelude.Text
+restoreSnapshotFromRecycleBin_snapshotId = Lens.lens (\RestoreSnapshotFromRecycleBin' {snapshotId} -> snapshotId) (\s@RestoreSnapshotFromRecycleBin' {} a -> s {snapshotId = a} :: RestoreSnapshotFromRecycleBin)
+
+instance
+  Core.AWSRequest
+    RestoreSnapshotFromRecycleBin
+  where
+  type
+    AWSResponse RestoreSnapshotFromRecycleBin =
+      RestoreSnapshotFromRecycleBinResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RestoreSnapshotFromRecycleBinResponse'
+            Prelude.<$> (x Data..@? "description")
+            Prelude.<*> (x Data..@? "encrypted")
+            Prelude.<*> (x Data..@? "outpostArn")
+            Prelude.<*> (x Data..@? "ownerId")
+            Prelude.<*> (x Data..@? "progress")
+            Prelude.<*> (x Data..@? "snapshotId")
+            Prelude.<*> (x Data..@? "startTime")
+            Prelude.<*> (x Data..@? "status")
+            Prelude.<*> (x Data..@? "volumeId")
+            Prelude.<*> (x Data..@? "volumeSize")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    RestoreSnapshotFromRecycleBin
+  where
+  hashWithSalt _salt RestoreSnapshotFromRecycleBin' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData RestoreSnapshotFromRecycleBin where
+  rnf RestoreSnapshotFromRecycleBin' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders RestoreSnapshotFromRecycleBin where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RestoreSnapshotFromRecycleBin where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RestoreSnapshotFromRecycleBin where
+  toQuery RestoreSnapshotFromRecycleBin' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "RestoreSnapshotFromRecycleBin" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newRestoreSnapshotFromRecycleBinResponse' smart constructor.
+data RestoreSnapshotFromRecycleBinResponse = RestoreSnapshotFromRecycleBinResponse'
+  { -- | The description for the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the snapshot is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the Outpost on which the snapshot is stored. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the EBS snapshot.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The progress of the snapshot, as a percentage.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The time stamp when the snapshot was initiated.
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the snapshot.
+    state :: Prelude.Maybe SnapshotState,
+    -- | The ID of the volume that was used to create the snapshot.
+    volumeId :: Prelude.Maybe Prelude.Text,
+    -- | The size of the volume, in GiB.
+    volumeSize :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreSnapshotFromRecycleBinResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'restoreSnapshotFromRecycleBinResponse_description' - The description for the snapshot.
+--
+-- 'encrypted', 'restoreSnapshotFromRecycleBinResponse_encrypted' - Indicates whether the snapshot is encrypted.
+--
+-- 'outpostArn', 'restoreSnapshotFromRecycleBinResponse_outpostArn' - The ARN of the Outpost on which the snapshot is stored. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'ownerId', 'restoreSnapshotFromRecycleBinResponse_ownerId' - The ID of the Amazon Web Services account that owns the EBS snapshot.
+--
+-- 'progress', 'restoreSnapshotFromRecycleBinResponse_progress' - The progress of the snapshot, as a percentage.
+--
+-- 'snapshotId', 'restoreSnapshotFromRecycleBinResponse_snapshotId' - The ID of the snapshot.
+--
+-- 'startTime', 'restoreSnapshotFromRecycleBinResponse_startTime' - The time stamp when the snapshot was initiated.
+--
+-- 'state', 'restoreSnapshotFromRecycleBinResponse_state' - The state of the snapshot.
+--
+-- 'volumeId', 'restoreSnapshotFromRecycleBinResponse_volumeId' - The ID of the volume that was used to create the snapshot.
+--
+-- 'volumeSize', 'restoreSnapshotFromRecycleBinResponse_volumeSize' - The size of the volume, in GiB.
+--
+-- 'httpStatus', 'restoreSnapshotFromRecycleBinResponse_httpStatus' - The response's http status code.
+newRestoreSnapshotFromRecycleBinResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestoreSnapshotFromRecycleBinResponse
+newRestoreSnapshotFromRecycleBinResponse pHttpStatus_ =
+  RestoreSnapshotFromRecycleBinResponse'
+    { description =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      state = Prelude.Nothing,
+      volumeId = Prelude.Nothing,
+      volumeSize = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The description for the snapshot.
+restoreSnapshotFromRecycleBinResponse_description :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotFromRecycleBinResponse_description = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {description} -> description) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {description = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | Indicates whether the snapshot is encrypted.
+restoreSnapshotFromRecycleBinResponse_encrypted :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Bool)
+restoreSnapshotFromRecycleBinResponse_encrypted = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {encrypted} -> encrypted) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {encrypted = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The ARN of the Outpost on which the snapshot is stored. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+restoreSnapshotFromRecycleBinResponse_outpostArn :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotFromRecycleBinResponse_outpostArn = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {outpostArn} -> outpostArn) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {outpostArn = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The ID of the Amazon Web Services account that owns the EBS snapshot.
+restoreSnapshotFromRecycleBinResponse_ownerId :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotFromRecycleBinResponse_ownerId = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {ownerId} -> ownerId) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {ownerId = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The progress of the snapshot, as a percentage.
+restoreSnapshotFromRecycleBinResponse_progress :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotFromRecycleBinResponse_progress = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {progress} -> progress) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {progress = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The ID of the snapshot.
+restoreSnapshotFromRecycleBinResponse_snapshotId :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotFromRecycleBinResponse_snapshotId = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {snapshotId} -> snapshotId) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {snapshotId = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The time stamp when the snapshot was initiated.
+restoreSnapshotFromRecycleBinResponse_startTime :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.UTCTime)
+restoreSnapshotFromRecycleBinResponse_startTime = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {startTime} -> startTime) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {startTime = a} :: RestoreSnapshotFromRecycleBinResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the snapshot.
+restoreSnapshotFromRecycleBinResponse_state :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe SnapshotState)
+restoreSnapshotFromRecycleBinResponse_state = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {state} -> state) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {state = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The ID of the volume that was used to create the snapshot.
+restoreSnapshotFromRecycleBinResponse_volumeId :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotFromRecycleBinResponse_volumeId = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {volumeId} -> volumeId) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {volumeId = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The size of the volume, in GiB.
+restoreSnapshotFromRecycleBinResponse_volumeSize :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse (Prelude.Maybe Prelude.Int)
+restoreSnapshotFromRecycleBinResponse_volumeSize = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {volumeSize} -> volumeSize) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {volumeSize = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+-- | The response's http status code.
+restoreSnapshotFromRecycleBinResponse_httpStatus :: Lens.Lens' RestoreSnapshotFromRecycleBinResponse Prelude.Int
+restoreSnapshotFromRecycleBinResponse_httpStatus = Lens.lens (\RestoreSnapshotFromRecycleBinResponse' {httpStatus} -> httpStatus) (\s@RestoreSnapshotFromRecycleBinResponse' {} a -> s {httpStatus = a} :: RestoreSnapshotFromRecycleBinResponse)
+
+instance
+  Prelude.NFData
+    RestoreSnapshotFromRecycleBinResponse
+  where
+  rnf RestoreSnapshotFromRecycleBinResponse' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf volumeId
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RestoreSnapshotTier.hs b/gen/Amazonka/EC2/RestoreSnapshotTier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RestoreSnapshotTier.hs
@@ -0,0 +1,279 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RestoreSnapshotTier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Restores an archived Amazon EBS snapshot for use temporarily or
+-- permanently, or modifies the restore period or restore type for a
+-- snapshot that was previously temporarily restored.
+--
+-- For more information see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-snapshot-archiving.html#restore-archived-snapshot Restore an archived snapshot>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-snapshot-archiving.html#modify-temp-restore-period modify the restore period or restore type for a temporarily restored snapshot>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.RestoreSnapshotTier
+  ( -- * Creating a Request
+    RestoreSnapshotTier (..),
+    newRestoreSnapshotTier,
+
+    -- * Request Lenses
+    restoreSnapshotTier_dryRun,
+    restoreSnapshotTier_permanentRestore,
+    restoreSnapshotTier_temporaryRestoreDays,
+    restoreSnapshotTier_snapshotId,
+
+    -- * Destructuring the Response
+    RestoreSnapshotTierResponse (..),
+    newRestoreSnapshotTierResponse,
+
+    -- * Response Lenses
+    restoreSnapshotTierResponse_isPermanentRestore,
+    restoreSnapshotTierResponse_restoreDuration,
+    restoreSnapshotTierResponse_restoreStartTime,
+    restoreSnapshotTierResponse_snapshotId,
+    restoreSnapshotTierResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRestoreSnapshotTier' smart constructor.
+data RestoreSnapshotTier = RestoreSnapshotTier'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to permanently restore an archived snapshot. To
+    -- permanently restore an archived snapshot, specify @true@ and omit the
+    -- __RestoreSnapshotTierRequest$TemporaryRestoreDays__ parameter.
+    permanentRestore :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies the number of days for which to temporarily restore an
+    -- archived snapshot. Required for temporary restores only. The snapshot
+    -- will be automatically re-archived after this period.
+    --
+    -- To temporarily restore an archived snapshot, specify the number of days
+    -- and omit the __PermanentRestore__ parameter or set it to @false@.
+    temporaryRestoreDays :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the snapshot to restore.
+    snapshotId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreSnapshotTier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'restoreSnapshotTier_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'permanentRestore', 'restoreSnapshotTier_permanentRestore' - Indicates whether to permanently restore an archived snapshot. To
+-- permanently restore an archived snapshot, specify @true@ and omit the
+-- __RestoreSnapshotTierRequest$TemporaryRestoreDays__ parameter.
+--
+-- 'temporaryRestoreDays', 'restoreSnapshotTier_temporaryRestoreDays' - Specifies the number of days for which to temporarily restore an
+-- archived snapshot. Required for temporary restores only. The snapshot
+-- will be automatically re-archived after this period.
+--
+-- To temporarily restore an archived snapshot, specify the number of days
+-- and omit the __PermanentRestore__ parameter or set it to @false@.
+--
+-- 'snapshotId', 'restoreSnapshotTier_snapshotId' - The ID of the snapshot to restore.
+newRestoreSnapshotTier ::
+  -- | 'snapshotId'
+  Prelude.Text ->
+  RestoreSnapshotTier
+newRestoreSnapshotTier pSnapshotId_ =
+  RestoreSnapshotTier'
+    { dryRun = Prelude.Nothing,
+      permanentRestore = Prelude.Nothing,
+      temporaryRestoreDays = Prelude.Nothing,
+      snapshotId = pSnapshotId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+restoreSnapshotTier_dryRun :: Lens.Lens' RestoreSnapshotTier (Prelude.Maybe Prelude.Bool)
+restoreSnapshotTier_dryRun = Lens.lens (\RestoreSnapshotTier' {dryRun} -> dryRun) (\s@RestoreSnapshotTier' {} a -> s {dryRun = a} :: RestoreSnapshotTier)
+
+-- | Indicates whether to permanently restore an archived snapshot. To
+-- permanently restore an archived snapshot, specify @true@ and omit the
+-- __RestoreSnapshotTierRequest$TemporaryRestoreDays__ parameter.
+restoreSnapshotTier_permanentRestore :: Lens.Lens' RestoreSnapshotTier (Prelude.Maybe Prelude.Bool)
+restoreSnapshotTier_permanentRestore = Lens.lens (\RestoreSnapshotTier' {permanentRestore} -> permanentRestore) (\s@RestoreSnapshotTier' {} a -> s {permanentRestore = a} :: RestoreSnapshotTier)
+
+-- | Specifies the number of days for which to temporarily restore an
+-- archived snapshot. Required for temporary restores only. The snapshot
+-- will be automatically re-archived after this period.
+--
+-- To temporarily restore an archived snapshot, specify the number of days
+-- and omit the __PermanentRestore__ parameter or set it to @false@.
+restoreSnapshotTier_temporaryRestoreDays :: Lens.Lens' RestoreSnapshotTier (Prelude.Maybe Prelude.Int)
+restoreSnapshotTier_temporaryRestoreDays = Lens.lens (\RestoreSnapshotTier' {temporaryRestoreDays} -> temporaryRestoreDays) (\s@RestoreSnapshotTier' {} a -> s {temporaryRestoreDays = a} :: RestoreSnapshotTier)
+
+-- | The ID of the snapshot to restore.
+restoreSnapshotTier_snapshotId :: Lens.Lens' RestoreSnapshotTier Prelude.Text
+restoreSnapshotTier_snapshotId = Lens.lens (\RestoreSnapshotTier' {snapshotId} -> snapshotId) (\s@RestoreSnapshotTier' {} a -> s {snapshotId = a} :: RestoreSnapshotTier)
+
+instance Core.AWSRequest RestoreSnapshotTier where
+  type
+    AWSResponse RestoreSnapshotTier =
+      RestoreSnapshotTierResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RestoreSnapshotTierResponse'
+            Prelude.<$> (x Data..@? "isPermanentRestore")
+            Prelude.<*> (x Data..@? "restoreDuration")
+            Prelude.<*> (x Data..@? "restoreStartTime")
+            Prelude.<*> (x Data..@? "snapshotId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RestoreSnapshotTier where
+  hashWithSalt _salt RestoreSnapshotTier' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` permanentRestore
+      `Prelude.hashWithSalt` temporaryRestoreDays
+      `Prelude.hashWithSalt` snapshotId
+
+instance Prelude.NFData RestoreSnapshotTier where
+  rnf RestoreSnapshotTier' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf permanentRestore
+      `Prelude.seq` Prelude.rnf temporaryRestoreDays
+      `Prelude.seq` Prelude.rnf snapshotId
+
+instance Data.ToHeaders RestoreSnapshotTier where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RestoreSnapshotTier where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RestoreSnapshotTier where
+  toQuery RestoreSnapshotTier' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RestoreSnapshotTier" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "PermanentRestore" Data.=: permanentRestore,
+        "TemporaryRestoreDays" Data.=: temporaryRestoreDays,
+        "SnapshotId" Data.=: snapshotId
+      ]
+
+-- | /See:/ 'newRestoreSnapshotTierResponse' smart constructor.
+data RestoreSnapshotTierResponse = RestoreSnapshotTierResponse'
+  { -- | Indicates whether the snapshot is permanently restored. @true@ indicates
+    -- a permanent restore. @false@ indicates a temporary restore.
+    isPermanentRestore :: Prelude.Maybe Prelude.Bool,
+    -- | For temporary restores only. The number of days for which the archived
+    -- snapshot is temporarily restored.
+    restoreDuration :: Prelude.Maybe Prelude.Int,
+    -- | The date and time when the snapshot restore process started.
+    restoreStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RestoreSnapshotTierResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isPermanentRestore', 'restoreSnapshotTierResponse_isPermanentRestore' - Indicates whether the snapshot is permanently restored. @true@ indicates
+-- a permanent restore. @false@ indicates a temporary restore.
+--
+-- 'restoreDuration', 'restoreSnapshotTierResponse_restoreDuration' - For temporary restores only. The number of days for which the archived
+-- snapshot is temporarily restored.
+--
+-- 'restoreStartTime', 'restoreSnapshotTierResponse_restoreStartTime' - The date and time when the snapshot restore process started.
+--
+-- 'snapshotId', 'restoreSnapshotTierResponse_snapshotId' - The ID of the snapshot.
+--
+-- 'httpStatus', 'restoreSnapshotTierResponse_httpStatus' - The response's http status code.
+newRestoreSnapshotTierResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RestoreSnapshotTierResponse
+newRestoreSnapshotTierResponse pHttpStatus_ =
+  RestoreSnapshotTierResponse'
+    { isPermanentRestore =
+        Prelude.Nothing,
+      restoreDuration = Prelude.Nothing,
+      restoreStartTime = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether the snapshot is permanently restored. @true@ indicates
+-- a permanent restore. @false@ indicates a temporary restore.
+restoreSnapshotTierResponse_isPermanentRestore :: Lens.Lens' RestoreSnapshotTierResponse (Prelude.Maybe Prelude.Bool)
+restoreSnapshotTierResponse_isPermanentRestore = Lens.lens (\RestoreSnapshotTierResponse' {isPermanentRestore} -> isPermanentRestore) (\s@RestoreSnapshotTierResponse' {} a -> s {isPermanentRestore = a} :: RestoreSnapshotTierResponse)
+
+-- | For temporary restores only. The number of days for which the archived
+-- snapshot is temporarily restored.
+restoreSnapshotTierResponse_restoreDuration :: Lens.Lens' RestoreSnapshotTierResponse (Prelude.Maybe Prelude.Int)
+restoreSnapshotTierResponse_restoreDuration = Lens.lens (\RestoreSnapshotTierResponse' {restoreDuration} -> restoreDuration) (\s@RestoreSnapshotTierResponse' {} a -> s {restoreDuration = a} :: RestoreSnapshotTierResponse)
+
+-- | The date and time when the snapshot restore process started.
+restoreSnapshotTierResponse_restoreStartTime :: Lens.Lens' RestoreSnapshotTierResponse (Prelude.Maybe Prelude.UTCTime)
+restoreSnapshotTierResponse_restoreStartTime = Lens.lens (\RestoreSnapshotTierResponse' {restoreStartTime} -> restoreStartTime) (\s@RestoreSnapshotTierResponse' {} a -> s {restoreStartTime = a} :: RestoreSnapshotTierResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the snapshot.
+restoreSnapshotTierResponse_snapshotId :: Lens.Lens' RestoreSnapshotTierResponse (Prelude.Maybe Prelude.Text)
+restoreSnapshotTierResponse_snapshotId = Lens.lens (\RestoreSnapshotTierResponse' {snapshotId} -> snapshotId) (\s@RestoreSnapshotTierResponse' {} a -> s {snapshotId = a} :: RestoreSnapshotTierResponse)
+
+-- | The response's http status code.
+restoreSnapshotTierResponse_httpStatus :: Lens.Lens' RestoreSnapshotTierResponse Prelude.Int
+restoreSnapshotTierResponse_httpStatus = Lens.lens (\RestoreSnapshotTierResponse' {httpStatus} -> httpStatus) (\s@RestoreSnapshotTierResponse' {} a -> s {httpStatus = a} :: RestoreSnapshotTierResponse)
+
+instance Prelude.NFData RestoreSnapshotTierResponse where
+  rnf RestoreSnapshotTierResponse' {..} =
+    Prelude.rnf isPermanentRestore
+      `Prelude.seq` Prelude.rnf restoreDuration
+      `Prelude.seq` Prelude.rnf restoreStartTime
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RevokeClientVpnIngress.hs b/gen/Amazonka/EC2/RevokeClientVpnIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RevokeClientVpnIngress.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RevokeClientVpnIngress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes an ingress authorization rule from a Client VPN endpoint.
+module Amazonka.EC2.RevokeClientVpnIngress
+  ( -- * Creating a Request
+    RevokeClientVpnIngress (..),
+    newRevokeClientVpnIngress,
+
+    -- * Request Lenses
+    revokeClientVpnIngress_accessGroupId,
+    revokeClientVpnIngress_dryRun,
+    revokeClientVpnIngress_revokeAllGroups,
+    revokeClientVpnIngress_clientVpnEndpointId,
+    revokeClientVpnIngress_targetNetworkCidr,
+
+    -- * Destructuring the Response
+    RevokeClientVpnIngressResponse (..),
+    newRevokeClientVpnIngressResponse,
+
+    -- * Response Lenses
+    revokeClientVpnIngressResponse_status,
+    revokeClientVpnIngressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRevokeClientVpnIngress' smart constructor.
+data RevokeClientVpnIngress = RevokeClientVpnIngress'
+  { -- | The ID of the Active Directory group for which to revoke access.
+    accessGroupId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether access should be revoked for all clients.
+    revokeAllGroups :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint with which the authorization rule is
+    -- associated.
+    clientVpnEndpointId :: Prelude.Text,
+    -- | The IPv4 address range, in CIDR notation, of the network for which
+    -- access is being removed.
+    targetNetworkCidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeClientVpnIngress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessGroupId', 'revokeClientVpnIngress_accessGroupId' - The ID of the Active Directory group for which to revoke access.
+--
+-- 'dryRun', 'revokeClientVpnIngress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'revokeAllGroups', 'revokeClientVpnIngress_revokeAllGroups' - Indicates whether access should be revoked for all clients.
+--
+-- 'clientVpnEndpointId', 'revokeClientVpnIngress_clientVpnEndpointId' - The ID of the Client VPN endpoint with which the authorization rule is
+-- associated.
+--
+-- 'targetNetworkCidr', 'revokeClientVpnIngress_targetNetworkCidr' - The IPv4 address range, in CIDR notation, of the network for which
+-- access is being removed.
+newRevokeClientVpnIngress ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  -- | 'targetNetworkCidr'
+  Prelude.Text ->
+  RevokeClientVpnIngress
+newRevokeClientVpnIngress
+  pClientVpnEndpointId_
+  pTargetNetworkCidr_ =
+    RevokeClientVpnIngress'
+      { accessGroupId =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        revokeAllGroups = Prelude.Nothing,
+        clientVpnEndpointId = pClientVpnEndpointId_,
+        targetNetworkCidr = pTargetNetworkCidr_
+      }
+
+-- | The ID of the Active Directory group for which to revoke access.
+revokeClientVpnIngress_accessGroupId :: Lens.Lens' RevokeClientVpnIngress (Prelude.Maybe Prelude.Text)
+revokeClientVpnIngress_accessGroupId = Lens.lens (\RevokeClientVpnIngress' {accessGroupId} -> accessGroupId) (\s@RevokeClientVpnIngress' {} a -> s {accessGroupId = a} :: RevokeClientVpnIngress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+revokeClientVpnIngress_dryRun :: Lens.Lens' RevokeClientVpnIngress (Prelude.Maybe Prelude.Bool)
+revokeClientVpnIngress_dryRun = Lens.lens (\RevokeClientVpnIngress' {dryRun} -> dryRun) (\s@RevokeClientVpnIngress' {} a -> s {dryRun = a} :: RevokeClientVpnIngress)
+
+-- | Indicates whether access should be revoked for all clients.
+revokeClientVpnIngress_revokeAllGroups :: Lens.Lens' RevokeClientVpnIngress (Prelude.Maybe Prelude.Bool)
+revokeClientVpnIngress_revokeAllGroups = Lens.lens (\RevokeClientVpnIngress' {revokeAllGroups} -> revokeAllGroups) (\s@RevokeClientVpnIngress' {} a -> s {revokeAllGroups = a} :: RevokeClientVpnIngress)
+
+-- | The ID of the Client VPN endpoint with which the authorization rule is
+-- associated.
+revokeClientVpnIngress_clientVpnEndpointId :: Lens.Lens' RevokeClientVpnIngress Prelude.Text
+revokeClientVpnIngress_clientVpnEndpointId = Lens.lens (\RevokeClientVpnIngress' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@RevokeClientVpnIngress' {} a -> s {clientVpnEndpointId = a} :: RevokeClientVpnIngress)
+
+-- | The IPv4 address range, in CIDR notation, of the network for which
+-- access is being removed.
+revokeClientVpnIngress_targetNetworkCidr :: Lens.Lens' RevokeClientVpnIngress Prelude.Text
+revokeClientVpnIngress_targetNetworkCidr = Lens.lens (\RevokeClientVpnIngress' {targetNetworkCidr} -> targetNetworkCidr) (\s@RevokeClientVpnIngress' {} a -> s {targetNetworkCidr = a} :: RevokeClientVpnIngress)
+
+instance Core.AWSRequest RevokeClientVpnIngress where
+  type
+    AWSResponse RevokeClientVpnIngress =
+      RevokeClientVpnIngressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RevokeClientVpnIngressResponse'
+            Prelude.<$> (x Data..@? "status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeClientVpnIngress where
+  hashWithSalt _salt RevokeClientVpnIngress' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessGroupId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` revokeAllGroups
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` targetNetworkCidr
+
+instance Prelude.NFData RevokeClientVpnIngress where
+  rnf RevokeClientVpnIngress' {..} =
+    Prelude.rnf accessGroupId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf revokeAllGroups
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf targetNetworkCidr
+
+instance Data.ToHeaders RevokeClientVpnIngress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RevokeClientVpnIngress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RevokeClientVpnIngress where
+  toQuery RevokeClientVpnIngress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RevokeClientVpnIngress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AccessGroupId" Data.=: accessGroupId,
+        "DryRun" Data.=: dryRun,
+        "RevokeAllGroups" Data.=: revokeAllGroups,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId,
+        "TargetNetworkCidr" Data.=: targetNetworkCidr
+      ]
+
+-- | /See:/ 'newRevokeClientVpnIngressResponse' smart constructor.
+data RevokeClientVpnIngressResponse = RevokeClientVpnIngressResponse'
+  { -- | The current state of the authorization rule.
+    status :: Prelude.Maybe ClientVpnAuthorizationRuleStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeClientVpnIngressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'revokeClientVpnIngressResponse_status' - The current state of the authorization rule.
+--
+-- 'httpStatus', 'revokeClientVpnIngressResponse_httpStatus' - The response's http status code.
+newRevokeClientVpnIngressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeClientVpnIngressResponse
+newRevokeClientVpnIngressResponse pHttpStatus_ =
+  RevokeClientVpnIngressResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The current state of the authorization rule.
+revokeClientVpnIngressResponse_status :: Lens.Lens' RevokeClientVpnIngressResponse (Prelude.Maybe ClientVpnAuthorizationRuleStatus)
+revokeClientVpnIngressResponse_status = Lens.lens (\RevokeClientVpnIngressResponse' {status} -> status) (\s@RevokeClientVpnIngressResponse' {} a -> s {status = a} :: RevokeClientVpnIngressResponse)
+
+-- | The response's http status code.
+revokeClientVpnIngressResponse_httpStatus :: Lens.Lens' RevokeClientVpnIngressResponse Prelude.Int
+revokeClientVpnIngressResponse_httpStatus = Lens.lens (\RevokeClientVpnIngressResponse' {httpStatus} -> httpStatus) (\s@RevokeClientVpnIngressResponse' {} a -> s {httpStatus = a} :: RevokeClientVpnIngressResponse)
+
+instance
+  Prelude.NFData
+    RevokeClientVpnIngressResponse
+  where
+  rnf RevokeClientVpnIngressResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RevokeSecurityGroupEgress.hs b/gen/Amazonka/EC2/RevokeSecurityGroupEgress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RevokeSecurityGroupEgress.hs
@@ -0,0 +1,354 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RevokeSecurityGroupEgress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- [VPC only] Removes the specified outbound (egress) rules from a security
+-- group for EC2-VPC. This action does not apply to security groups for use
+-- in EC2-Classic.
+--
+-- You can specify rules using either rule IDs or security group rule
+-- properties. If you use rule properties, the values that you specify (for
+-- example, ports) must match the existing rule\'s values exactly. Each
+-- rule has a protocol, from and to ports, and destination (CIDR range,
+-- security group, or prefix list). For the TCP and UDP protocols, you must
+-- also specify the destination port or range of ports. For the ICMP
+-- protocol, you must also specify the ICMP type and code. If the security
+-- group rule has a description, you do not need to specify the description
+-- to revoke the rule.
+--
+-- [Default VPC] If the values you specify do not match the existing
+-- rule\'s values, no error is returned, and the output describes the
+-- security group rules that were not revoked.
+--
+-- Amazon Web Services recommends that you describe the security group to
+-- verify that the rules were removed.
+--
+-- Rule changes are propagated to instances within the security group as
+-- quickly as possible. However, a small delay might occur.
+module Amazonka.EC2.RevokeSecurityGroupEgress
+  ( -- * Creating a Request
+    RevokeSecurityGroupEgress (..),
+    newRevokeSecurityGroupEgress,
+
+    -- * Request Lenses
+    revokeSecurityGroupEgress_cidrIp,
+    revokeSecurityGroupEgress_dryRun,
+    revokeSecurityGroupEgress_fromPort,
+    revokeSecurityGroupEgress_ipPermissions,
+    revokeSecurityGroupEgress_ipProtocol,
+    revokeSecurityGroupEgress_securityGroupRuleIds,
+    revokeSecurityGroupEgress_sourceSecurityGroupName,
+    revokeSecurityGroupEgress_sourceSecurityGroupOwnerId,
+    revokeSecurityGroupEgress_toPort,
+    revokeSecurityGroupEgress_groupId,
+
+    -- * Destructuring the Response
+    RevokeSecurityGroupEgressResponse (..),
+    newRevokeSecurityGroupEgressResponse,
+
+    -- * Response Lenses
+    revokeSecurityGroupEgressResponse_return,
+    revokeSecurityGroupEgressResponse_unknownIpPermissions,
+    revokeSecurityGroupEgressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRevokeSecurityGroupEgress' smart constructor.
+data RevokeSecurityGroupEgress = RevokeSecurityGroupEgress'
+  { -- | Not supported. Use a set of IP permissions to specify the CIDR.
+    cidrIp :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Not supported. Use a set of IP permissions to specify the port.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The sets of IP permissions. You can\'t specify a destination security
+    -- group and a CIDR IP address range in the same set of permissions.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | Not supported. Use a set of IP permissions to specify the protocol name
+    -- or number.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the security group rules.
+    securityGroupRuleIds :: Prelude.Maybe [Prelude.Text],
+    -- | Not supported. Use a set of IP permissions to specify a destination
+    -- security group.
+    sourceSecurityGroupName :: Prelude.Maybe Prelude.Text,
+    -- | Not supported. Use a set of IP permissions to specify a destination
+    -- security group.
+    sourceSecurityGroupOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | Not supported. Use a set of IP permissions to specify the port.
+    toPort :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the security group.
+    groupId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSecurityGroupEgress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIp', 'revokeSecurityGroupEgress_cidrIp' - Not supported. Use a set of IP permissions to specify the CIDR.
+--
+-- 'dryRun', 'revokeSecurityGroupEgress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fromPort', 'revokeSecurityGroupEgress_fromPort' - Not supported. Use a set of IP permissions to specify the port.
+--
+-- 'ipPermissions', 'revokeSecurityGroupEgress_ipPermissions' - The sets of IP permissions. You can\'t specify a destination security
+-- group and a CIDR IP address range in the same set of permissions.
+--
+-- 'ipProtocol', 'revokeSecurityGroupEgress_ipProtocol' - Not supported. Use a set of IP permissions to specify the protocol name
+-- or number.
+--
+-- 'securityGroupRuleIds', 'revokeSecurityGroupEgress_securityGroupRuleIds' - The IDs of the security group rules.
+--
+-- 'sourceSecurityGroupName', 'revokeSecurityGroupEgress_sourceSecurityGroupName' - Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+--
+-- 'sourceSecurityGroupOwnerId', 'revokeSecurityGroupEgress_sourceSecurityGroupOwnerId' - Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+--
+-- 'toPort', 'revokeSecurityGroupEgress_toPort' - Not supported. Use a set of IP permissions to specify the port.
+--
+-- 'groupId', 'revokeSecurityGroupEgress_groupId' - The ID of the security group.
+newRevokeSecurityGroupEgress ::
+  -- | 'groupId'
+  Prelude.Text ->
+  RevokeSecurityGroupEgress
+newRevokeSecurityGroupEgress pGroupId_ =
+  RevokeSecurityGroupEgress'
+    { cidrIp =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      fromPort = Prelude.Nothing,
+      ipPermissions = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      securityGroupRuleIds = Prelude.Nothing,
+      sourceSecurityGroupName = Prelude.Nothing,
+      sourceSecurityGroupOwnerId = Prelude.Nothing,
+      toPort = Prelude.Nothing,
+      groupId = pGroupId_
+    }
+
+-- | Not supported. Use a set of IP permissions to specify the CIDR.
+revokeSecurityGroupEgress_cidrIp :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupEgress_cidrIp = Lens.lens (\RevokeSecurityGroupEgress' {cidrIp} -> cidrIp) (\s@RevokeSecurityGroupEgress' {} a -> s {cidrIp = a} :: RevokeSecurityGroupEgress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+revokeSecurityGroupEgress_dryRun :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Bool)
+revokeSecurityGroupEgress_dryRun = Lens.lens (\RevokeSecurityGroupEgress' {dryRun} -> dryRun) (\s@RevokeSecurityGroupEgress' {} a -> s {dryRun = a} :: RevokeSecurityGroupEgress)
+
+-- | Not supported. Use a set of IP permissions to specify the port.
+revokeSecurityGroupEgress_fromPort :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Int)
+revokeSecurityGroupEgress_fromPort = Lens.lens (\RevokeSecurityGroupEgress' {fromPort} -> fromPort) (\s@RevokeSecurityGroupEgress' {} a -> s {fromPort = a} :: RevokeSecurityGroupEgress)
+
+-- | The sets of IP permissions. You can\'t specify a destination security
+-- group and a CIDR IP address range in the same set of permissions.
+revokeSecurityGroupEgress_ipPermissions :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe [IpPermission])
+revokeSecurityGroupEgress_ipPermissions = Lens.lens (\RevokeSecurityGroupEgress' {ipPermissions} -> ipPermissions) (\s@RevokeSecurityGroupEgress' {} a -> s {ipPermissions = a} :: RevokeSecurityGroupEgress) Prelude.. Lens.mapping Lens.coerced
+
+-- | Not supported. Use a set of IP permissions to specify the protocol name
+-- or number.
+revokeSecurityGroupEgress_ipProtocol :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupEgress_ipProtocol = Lens.lens (\RevokeSecurityGroupEgress' {ipProtocol} -> ipProtocol) (\s@RevokeSecurityGroupEgress' {} a -> s {ipProtocol = a} :: RevokeSecurityGroupEgress)
+
+-- | The IDs of the security group rules.
+revokeSecurityGroupEgress_securityGroupRuleIds :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe [Prelude.Text])
+revokeSecurityGroupEgress_securityGroupRuleIds = Lens.lens (\RevokeSecurityGroupEgress' {securityGroupRuleIds} -> securityGroupRuleIds) (\s@RevokeSecurityGroupEgress' {} a -> s {securityGroupRuleIds = a} :: RevokeSecurityGroupEgress) Prelude.. Lens.mapping Lens.coerced
+
+-- | Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+revokeSecurityGroupEgress_sourceSecurityGroupName :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupEgress_sourceSecurityGroupName = Lens.lens (\RevokeSecurityGroupEgress' {sourceSecurityGroupName} -> sourceSecurityGroupName) (\s@RevokeSecurityGroupEgress' {} a -> s {sourceSecurityGroupName = a} :: RevokeSecurityGroupEgress)
+
+-- | Not supported. Use a set of IP permissions to specify a destination
+-- security group.
+revokeSecurityGroupEgress_sourceSecurityGroupOwnerId :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupEgress_sourceSecurityGroupOwnerId = Lens.lens (\RevokeSecurityGroupEgress' {sourceSecurityGroupOwnerId} -> sourceSecurityGroupOwnerId) (\s@RevokeSecurityGroupEgress' {} a -> s {sourceSecurityGroupOwnerId = a} :: RevokeSecurityGroupEgress)
+
+-- | Not supported. Use a set of IP permissions to specify the port.
+revokeSecurityGroupEgress_toPort :: Lens.Lens' RevokeSecurityGroupEgress (Prelude.Maybe Prelude.Int)
+revokeSecurityGroupEgress_toPort = Lens.lens (\RevokeSecurityGroupEgress' {toPort} -> toPort) (\s@RevokeSecurityGroupEgress' {} a -> s {toPort = a} :: RevokeSecurityGroupEgress)
+
+-- | The ID of the security group.
+revokeSecurityGroupEgress_groupId :: Lens.Lens' RevokeSecurityGroupEgress Prelude.Text
+revokeSecurityGroupEgress_groupId = Lens.lens (\RevokeSecurityGroupEgress' {groupId} -> groupId) (\s@RevokeSecurityGroupEgress' {} a -> s {groupId = a} :: RevokeSecurityGroupEgress)
+
+instance Core.AWSRequest RevokeSecurityGroupEgress where
+  type
+    AWSResponse RevokeSecurityGroupEgress =
+      RevokeSecurityGroupEgressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RevokeSecurityGroupEgressResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> ( x
+                            Data..@? "unknownIpPermissionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeSecurityGroupEgress where
+  hashWithSalt _salt RevokeSecurityGroupEgress' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIp
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` ipPermissions
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` securityGroupRuleIds
+      `Prelude.hashWithSalt` sourceSecurityGroupName
+      `Prelude.hashWithSalt` sourceSecurityGroupOwnerId
+      `Prelude.hashWithSalt` toPort
+      `Prelude.hashWithSalt` groupId
+
+instance Prelude.NFData RevokeSecurityGroupEgress where
+  rnf RevokeSecurityGroupEgress' {..} =
+    Prelude.rnf cidrIp
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf securityGroupRuleIds
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupName
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupOwnerId
+      `Prelude.seq` Prelude.rnf toPort
+      `Prelude.seq` Prelude.rnf groupId
+
+instance Data.ToHeaders RevokeSecurityGroupEgress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RevokeSecurityGroupEgress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RevokeSecurityGroupEgress where
+  toQuery RevokeSecurityGroupEgress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RevokeSecurityGroupEgress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrIp" Data.=: cidrIp,
+        "DryRun" Data.=: dryRun,
+        "FromPort" Data.=: fromPort,
+        Data.toQuery
+          ( Data.toQueryList "IpPermissions"
+              Prelude.<$> ipPermissions
+          ),
+        "IpProtocol" Data.=: ipProtocol,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupRuleId"
+              Prelude.<$> securityGroupRuleIds
+          ),
+        "SourceSecurityGroupName"
+          Data.=: sourceSecurityGroupName,
+        "SourceSecurityGroupOwnerId"
+          Data.=: sourceSecurityGroupOwnerId,
+        "ToPort" Data.=: toPort,
+        "GroupId" Data.=: groupId
+      ]
+
+-- | /See:/ 'newRevokeSecurityGroupEgressResponse' smart constructor.
+data RevokeSecurityGroupEgressResponse = RevokeSecurityGroupEgressResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The outbound rules that were unknown to the service. In some cases,
+    -- @unknownIpPermissionSet@ might be in a different format from the request
+    -- parameter.
+    unknownIpPermissions :: Prelude.Maybe [IpPermission],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSecurityGroupEgressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'revokeSecurityGroupEgressResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'unknownIpPermissions', 'revokeSecurityGroupEgressResponse_unknownIpPermissions' - The outbound rules that were unknown to the service. In some cases,
+-- @unknownIpPermissionSet@ might be in a different format from the request
+-- parameter.
+--
+-- 'httpStatus', 'revokeSecurityGroupEgressResponse_httpStatus' - The response's http status code.
+newRevokeSecurityGroupEgressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeSecurityGroupEgressResponse
+newRevokeSecurityGroupEgressResponse pHttpStatus_ =
+  RevokeSecurityGroupEgressResponse'
+    { return' =
+        Prelude.Nothing,
+      unknownIpPermissions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+revokeSecurityGroupEgressResponse_return :: Lens.Lens' RevokeSecurityGroupEgressResponse (Prelude.Maybe Prelude.Bool)
+revokeSecurityGroupEgressResponse_return = Lens.lens (\RevokeSecurityGroupEgressResponse' {return'} -> return') (\s@RevokeSecurityGroupEgressResponse' {} a -> s {return' = a} :: RevokeSecurityGroupEgressResponse)
+
+-- | The outbound rules that were unknown to the service. In some cases,
+-- @unknownIpPermissionSet@ might be in a different format from the request
+-- parameter.
+revokeSecurityGroupEgressResponse_unknownIpPermissions :: Lens.Lens' RevokeSecurityGroupEgressResponse (Prelude.Maybe [IpPermission])
+revokeSecurityGroupEgressResponse_unknownIpPermissions = Lens.lens (\RevokeSecurityGroupEgressResponse' {unknownIpPermissions} -> unknownIpPermissions) (\s@RevokeSecurityGroupEgressResponse' {} a -> s {unknownIpPermissions = a} :: RevokeSecurityGroupEgressResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+revokeSecurityGroupEgressResponse_httpStatus :: Lens.Lens' RevokeSecurityGroupEgressResponse Prelude.Int
+revokeSecurityGroupEgressResponse_httpStatus = Lens.lens (\RevokeSecurityGroupEgressResponse' {httpStatus} -> httpStatus) (\s@RevokeSecurityGroupEgressResponse' {} a -> s {httpStatus = a} :: RevokeSecurityGroupEgressResponse)
+
+instance
+  Prelude.NFData
+    RevokeSecurityGroupEgressResponse
+  where
+  rnf RevokeSecurityGroupEgressResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf unknownIpPermissions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RevokeSecurityGroupIngress.hs b/gen/Amazonka/EC2/RevokeSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RevokeSecurityGroupIngress.hs
@@ -0,0 +1,422 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RevokeSecurityGroupIngress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes the specified inbound (ingress) rules from a security group.
+--
+-- You can specify rules using either rule IDs or security group rule
+-- properties. If you use rule properties, the values that you specify (for
+-- example, ports) must match the existing rule\'s values exactly. Each
+-- rule has a protocol, from and to ports, and source (CIDR range, security
+-- group, or prefix list). For the TCP and UDP protocols, you must also
+-- specify the destination port or range of ports. For the ICMP protocol,
+-- you must also specify the ICMP type and code. If the security group rule
+-- has a description, you do not need to specify the description to revoke
+-- the rule.
+--
+-- [EC2-Classic, default VPC] If the values you specify do not match the
+-- existing rule\'s values, no error is returned, and the output describes
+-- the security group rules that were not revoked.
+--
+-- Amazon Web Services recommends that you describe the security group to
+-- verify that the rules were removed.
+--
+-- Rule changes are propagated to instances within the security group as
+-- quickly as possible. However, a small delay might occur.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+module Amazonka.EC2.RevokeSecurityGroupIngress
+  ( -- * Creating a Request
+    RevokeSecurityGroupIngress (..),
+    newRevokeSecurityGroupIngress,
+
+    -- * Request Lenses
+    revokeSecurityGroupIngress_cidrIp,
+    revokeSecurityGroupIngress_dryRun,
+    revokeSecurityGroupIngress_fromPort,
+    revokeSecurityGroupIngress_groupId,
+    revokeSecurityGroupIngress_groupName,
+    revokeSecurityGroupIngress_ipPermissions,
+    revokeSecurityGroupIngress_ipProtocol,
+    revokeSecurityGroupIngress_securityGroupRuleIds,
+    revokeSecurityGroupIngress_sourceSecurityGroupName,
+    revokeSecurityGroupIngress_sourceSecurityGroupOwnerId,
+    revokeSecurityGroupIngress_toPort,
+
+    -- * Destructuring the Response
+    RevokeSecurityGroupIngressResponse (..),
+    newRevokeSecurityGroupIngressResponse,
+
+    -- * Response Lenses
+    revokeSecurityGroupIngressResponse_return,
+    revokeSecurityGroupIngressResponse_unknownIpPermissions,
+    revokeSecurityGroupIngressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRevokeSecurityGroupIngress' smart constructor.
+data RevokeSecurityGroupIngress = RevokeSecurityGroupIngress'
+  { -- | The CIDR IP address range. You can\'t specify this parameter when
+    -- specifying a source security group.
+    cidrIp :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The start of port range for the TCP and UDP protocols, or an ICMP type
+    -- number. For the ICMP type number, use @-1@ to specify all ICMP types.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | 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.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic, default VPC] The name 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.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The sets of IP permissions. You can\'t specify a source security group
+    -- and a CIDR IP address range in the same set of permissions.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | The IP protocol name (@tcp@, @udp@, @icmp@) or number (see
+    -- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+    -- Use @-1@ to specify all.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the security group rules.
+    securityGroupRuleIds :: Prelude.Maybe [Prelude.Text],
+    -- | [EC2-Classic, default VPC] The name of the source security group. You
+    -- can\'t specify this parameter in combination with the following
+    -- parameters: the CIDR IP address range, the start of the port range, the
+    -- IP protocol, and the end of the port range. For EC2-VPC, the source
+    -- security group must be in the same VPC. To revoke a specific rule for an
+    -- IP protocol and port range, use a set of IP permissions instead.
+    sourceSecurityGroupName :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic] The Amazon Web Services account ID of the source security
+    -- group, if the source security group is in a different account. You
+    -- can\'t specify this parameter in combination with the following
+    -- parameters: the CIDR IP address range, the IP protocol, the start of the
+    -- port range, and the end of the port range. To revoke a specific rule for
+    -- an IP protocol and port range, use a set of IP permissions instead.
+    sourceSecurityGroupOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The end of port range for the TCP and UDP protocols, or an ICMP code
+    -- number. For the ICMP code number, use @-1@ to specify all ICMP codes for
+    -- the ICMP type.
+    toPort :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSecurityGroupIngress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIp', 'revokeSecurityGroupIngress_cidrIp' - The CIDR IP address range. You can\'t specify this parameter when
+-- specifying a source security group.
+--
+-- 'dryRun', 'revokeSecurityGroupIngress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'fromPort', 'revokeSecurityGroupIngress_fromPort' - The start of port range for the TCP and UDP protocols, or an ICMP type
+-- number. For the ICMP type number, use @-1@ to specify all ICMP types.
+--
+-- 'groupId', 'revokeSecurityGroupIngress_groupId' - 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.
+--
+-- 'groupName', 'revokeSecurityGroupIngress_groupName' - [EC2-Classic, default VPC] The name 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.
+--
+-- 'ipPermissions', 'revokeSecurityGroupIngress_ipPermissions' - The sets of IP permissions. You can\'t specify a source security group
+-- and a CIDR IP address range in the same set of permissions.
+--
+-- 'ipProtocol', 'revokeSecurityGroupIngress_ipProtocol' - The IP protocol name (@tcp@, @udp@, @icmp@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+-- Use @-1@ to specify all.
+--
+-- 'securityGroupRuleIds', 'revokeSecurityGroupIngress_securityGroupRuleIds' - The IDs of the security group rules.
+--
+-- 'sourceSecurityGroupName', 'revokeSecurityGroupIngress_sourceSecurityGroupName' - [EC2-Classic, default VPC] The name of the source security group. You
+-- can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the start of the port range, the
+-- IP protocol, and the end of the port range. For EC2-VPC, the source
+-- security group must be in the same VPC. To revoke a specific rule for an
+-- IP protocol and port range, use a set of IP permissions instead.
+--
+-- 'sourceSecurityGroupOwnerId', 'revokeSecurityGroupIngress_sourceSecurityGroupOwnerId' - [EC2-Classic] The Amazon Web Services account ID of the source security
+-- group, if the source security group is in a different account. You
+-- can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the IP protocol, the start of the
+-- port range, and the end of the port range. To revoke a specific rule for
+-- an IP protocol and port range, use a set of IP permissions instead.
+--
+-- 'toPort', 'revokeSecurityGroupIngress_toPort' - The end of port range for the TCP and UDP protocols, or an ICMP code
+-- number. For the ICMP code number, use @-1@ to specify all ICMP codes for
+-- the ICMP type.
+newRevokeSecurityGroupIngress ::
+  RevokeSecurityGroupIngress
+newRevokeSecurityGroupIngress =
+  RevokeSecurityGroupIngress'
+    { cidrIp =
+        Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      fromPort = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      ipPermissions = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      securityGroupRuleIds = Prelude.Nothing,
+      sourceSecurityGroupName = Prelude.Nothing,
+      sourceSecurityGroupOwnerId = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The CIDR IP address range. You can\'t specify this parameter when
+-- specifying a source security group.
+revokeSecurityGroupIngress_cidrIp :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupIngress_cidrIp = Lens.lens (\RevokeSecurityGroupIngress' {cidrIp} -> cidrIp) (\s@RevokeSecurityGroupIngress' {} a -> s {cidrIp = a} :: RevokeSecurityGroupIngress)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+revokeSecurityGroupIngress_dryRun :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Bool)
+revokeSecurityGroupIngress_dryRun = Lens.lens (\RevokeSecurityGroupIngress' {dryRun} -> dryRun) (\s@RevokeSecurityGroupIngress' {} a -> s {dryRun = a} :: RevokeSecurityGroupIngress)
+
+-- | The start of port range for the TCP and UDP protocols, or an ICMP type
+-- number. For the ICMP type number, use @-1@ to specify all ICMP types.
+revokeSecurityGroupIngress_fromPort :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Int)
+revokeSecurityGroupIngress_fromPort = Lens.lens (\RevokeSecurityGroupIngress' {fromPort} -> fromPort) (\s@RevokeSecurityGroupIngress' {} a -> s {fromPort = a} :: RevokeSecurityGroupIngress)
+
+-- | 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.
+revokeSecurityGroupIngress_groupId :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupIngress_groupId = Lens.lens (\RevokeSecurityGroupIngress' {groupId} -> groupId) (\s@RevokeSecurityGroupIngress' {} a -> s {groupId = a} :: RevokeSecurityGroupIngress)
+
+-- | [EC2-Classic, default VPC] The name 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.
+revokeSecurityGroupIngress_groupName :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupIngress_groupName = Lens.lens (\RevokeSecurityGroupIngress' {groupName} -> groupName) (\s@RevokeSecurityGroupIngress' {} a -> s {groupName = a} :: RevokeSecurityGroupIngress)
+
+-- | The sets of IP permissions. You can\'t specify a source security group
+-- and a CIDR IP address range in the same set of permissions.
+revokeSecurityGroupIngress_ipPermissions :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe [IpPermission])
+revokeSecurityGroupIngress_ipPermissions = Lens.lens (\RevokeSecurityGroupIngress' {ipPermissions} -> ipPermissions) (\s@RevokeSecurityGroupIngress' {} a -> s {ipPermissions = a} :: RevokeSecurityGroupIngress) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP protocol name (@tcp@, @udp@, @icmp@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+-- Use @-1@ to specify all.
+revokeSecurityGroupIngress_ipProtocol :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupIngress_ipProtocol = Lens.lens (\RevokeSecurityGroupIngress' {ipProtocol} -> ipProtocol) (\s@RevokeSecurityGroupIngress' {} a -> s {ipProtocol = a} :: RevokeSecurityGroupIngress)
+
+-- | The IDs of the security group rules.
+revokeSecurityGroupIngress_securityGroupRuleIds :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe [Prelude.Text])
+revokeSecurityGroupIngress_securityGroupRuleIds = Lens.lens (\RevokeSecurityGroupIngress' {securityGroupRuleIds} -> securityGroupRuleIds) (\s@RevokeSecurityGroupIngress' {} a -> s {securityGroupRuleIds = a} :: RevokeSecurityGroupIngress) Prelude.. Lens.mapping Lens.coerced
+
+-- | [EC2-Classic, default VPC] The name of the source security group. You
+-- can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the start of the port range, the
+-- IP protocol, and the end of the port range. For EC2-VPC, the source
+-- security group must be in the same VPC. To revoke a specific rule for an
+-- IP protocol and port range, use a set of IP permissions instead.
+revokeSecurityGroupIngress_sourceSecurityGroupName :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupIngress_sourceSecurityGroupName = Lens.lens (\RevokeSecurityGroupIngress' {sourceSecurityGroupName} -> sourceSecurityGroupName) (\s@RevokeSecurityGroupIngress' {} a -> s {sourceSecurityGroupName = a} :: RevokeSecurityGroupIngress)
+
+-- | [EC2-Classic] The Amazon Web Services account ID of the source security
+-- group, if the source security group is in a different account. You
+-- can\'t specify this parameter in combination with the following
+-- parameters: the CIDR IP address range, the IP protocol, the start of the
+-- port range, and the end of the port range. To revoke a specific rule for
+-- an IP protocol and port range, use a set of IP permissions instead.
+revokeSecurityGroupIngress_sourceSecurityGroupOwnerId :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Text)
+revokeSecurityGroupIngress_sourceSecurityGroupOwnerId = Lens.lens (\RevokeSecurityGroupIngress' {sourceSecurityGroupOwnerId} -> sourceSecurityGroupOwnerId) (\s@RevokeSecurityGroupIngress' {} a -> s {sourceSecurityGroupOwnerId = a} :: RevokeSecurityGroupIngress)
+
+-- | The end of port range for the TCP and UDP protocols, or an ICMP code
+-- number. For the ICMP code number, use @-1@ to specify all ICMP codes for
+-- the ICMP type.
+revokeSecurityGroupIngress_toPort :: Lens.Lens' RevokeSecurityGroupIngress (Prelude.Maybe Prelude.Int)
+revokeSecurityGroupIngress_toPort = Lens.lens (\RevokeSecurityGroupIngress' {toPort} -> toPort) (\s@RevokeSecurityGroupIngress' {} a -> s {toPort = a} :: RevokeSecurityGroupIngress)
+
+instance Core.AWSRequest RevokeSecurityGroupIngress where
+  type
+    AWSResponse RevokeSecurityGroupIngress =
+      RevokeSecurityGroupIngressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RevokeSecurityGroupIngressResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> ( x
+                            Data..@? "unknownIpPermissionSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RevokeSecurityGroupIngress where
+  hashWithSalt _salt RevokeSecurityGroupIngress' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIp
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` ipPermissions
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` securityGroupRuleIds
+      `Prelude.hashWithSalt` sourceSecurityGroupName
+      `Prelude.hashWithSalt` sourceSecurityGroupOwnerId
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData RevokeSecurityGroupIngress where
+  rnf RevokeSecurityGroupIngress' {..} =
+    Prelude.rnf cidrIp
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf securityGroupRuleIds
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupName
+      `Prelude.seq` Prelude.rnf sourceSecurityGroupOwnerId
+      `Prelude.seq` Prelude.rnf toPort
+
+instance Data.ToHeaders RevokeSecurityGroupIngress where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RevokeSecurityGroupIngress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RevokeSecurityGroupIngress where
+  toQuery RevokeSecurityGroupIngress' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RevokeSecurityGroupIngress" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "CidrIp" Data.=: cidrIp,
+        "DryRun" Data.=: dryRun,
+        "FromPort" Data.=: fromPort,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName,
+        Data.toQuery
+          ( Data.toQueryList "IpPermissions"
+              Prelude.<$> ipPermissions
+          ),
+        "IpProtocol" Data.=: ipProtocol,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupRuleId"
+              Prelude.<$> securityGroupRuleIds
+          ),
+        "SourceSecurityGroupName"
+          Data.=: sourceSecurityGroupName,
+        "SourceSecurityGroupOwnerId"
+          Data.=: sourceSecurityGroupOwnerId,
+        "ToPort" Data.=: toPort
+      ]
+
+-- | /See:/ 'newRevokeSecurityGroupIngressResponse' smart constructor.
+data RevokeSecurityGroupIngressResponse = RevokeSecurityGroupIngressResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The inbound rules that were unknown to the service. In some cases,
+    -- @unknownIpPermissionSet@ might be in a different format from the request
+    -- parameter.
+    unknownIpPermissions :: Prelude.Maybe [IpPermission],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RevokeSecurityGroupIngressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'revokeSecurityGroupIngressResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'unknownIpPermissions', 'revokeSecurityGroupIngressResponse_unknownIpPermissions' - The inbound rules that were unknown to the service. In some cases,
+-- @unknownIpPermissionSet@ might be in a different format from the request
+-- parameter.
+--
+-- 'httpStatus', 'revokeSecurityGroupIngressResponse_httpStatus' - The response's http status code.
+newRevokeSecurityGroupIngressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RevokeSecurityGroupIngressResponse
+newRevokeSecurityGroupIngressResponse pHttpStatus_ =
+  RevokeSecurityGroupIngressResponse'
+    { return' =
+        Prelude.Nothing,
+      unknownIpPermissions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+revokeSecurityGroupIngressResponse_return :: Lens.Lens' RevokeSecurityGroupIngressResponse (Prelude.Maybe Prelude.Bool)
+revokeSecurityGroupIngressResponse_return = Lens.lens (\RevokeSecurityGroupIngressResponse' {return'} -> return') (\s@RevokeSecurityGroupIngressResponse' {} a -> s {return' = a} :: RevokeSecurityGroupIngressResponse)
+
+-- | The inbound rules that were unknown to the service. In some cases,
+-- @unknownIpPermissionSet@ might be in a different format from the request
+-- parameter.
+revokeSecurityGroupIngressResponse_unknownIpPermissions :: Lens.Lens' RevokeSecurityGroupIngressResponse (Prelude.Maybe [IpPermission])
+revokeSecurityGroupIngressResponse_unknownIpPermissions = Lens.lens (\RevokeSecurityGroupIngressResponse' {unknownIpPermissions} -> unknownIpPermissions) (\s@RevokeSecurityGroupIngressResponse' {} a -> s {unknownIpPermissions = a} :: RevokeSecurityGroupIngressResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+revokeSecurityGroupIngressResponse_httpStatus :: Lens.Lens' RevokeSecurityGroupIngressResponse Prelude.Int
+revokeSecurityGroupIngressResponse_httpStatus = Lens.lens (\RevokeSecurityGroupIngressResponse' {httpStatus} -> httpStatus) (\s@RevokeSecurityGroupIngressResponse' {} a -> s {httpStatus = a} :: RevokeSecurityGroupIngressResponse)
+
+instance
+  Prelude.NFData
+    RevokeSecurityGroupIngressResponse
+  where
+  rnf RevokeSecurityGroupIngressResponse' {..} =
+    Prelude.rnf return'
+      `Prelude.seq` Prelude.rnf unknownIpPermissions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/RunInstances.hs b/gen/Amazonka/EC2/RunInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RunInstances.hs
@@ -0,0 +1,1286 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RunInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launches the specified number of instances using an AMI for which you
+-- have permissions.
+--
+-- You can specify a number of options, or leave the default options. The
+-- following rules apply:
+--
+-- -   [EC2-VPC] If you don\'t specify a subnet ID, we choose a default
+--     subnet from your default VPC for you. If you don\'t have a default
+--     VPC, you must specify a subnet ID in the request.
+--
+-- -   [EC2-Classic] If don\'t specify an Availability Zone, we choose one
+--     for you.
+--
+-- -   Some instance types must be launched into a VPC. If you do not have
+--     a default VPC, or if you do not specify a subnet ID, the request
+--     fails. For more information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types Instance types available only in a VPC>.
+--
+-- -   [EC2-VPC] All instances have a network interface with a primary
+--     private IPv4 address. If you don\'t specify this address, we choose
+--     one from the IPv4 range of your subnet.
+--
+-- -   Not all instance types support IPv6 addresses. For more information,
+--     see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>.
+--
+-- -   If you don\'t specify a security group ID, we use the default
+--     security group. For more information, see
+--     <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Security groups>.
+--
+-- -   If any of the AMIs have a product code attached for which the user
+--     has not subscribed, the request fails.
+--
+-- You can create a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html launch template>,
+-- which is a resource that contains the parameters to launch an instance.
+-- When you launch an instance using RunInstances, you can specify the
+-- launch template instead of specifying the launch parameters.
+--
+-- To ensure faster instance launches, break up large requests into smaller
+-- batches. For example, create five separate launch requests for 100
+-- instances each instead of one launch request for 500 instances.
+--
+-- An instance is ready for you to use when it\'s in the @running@ state.
+-- You can check the state of your instance using DescribeInstances. You
+-- can tag instances and EBS volumes during launch, after launch, or both.
+-- For more information, see CreateTags and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging your Amazon EC2 resources>.
+--
+-- Linux instances have access to the public key of the key pair at boot.
+-- You can use this key to provide secure access to the instance. Amazon
+-- EC2 public images use this feature to provide secure access without
+-- passwords. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key pairs>.
+--
+-- For troubleshooting, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html What to do if an instance immediately terminates>,
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html Troubleshooting connecting to your instance>.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.RunInstances
+  ( -- * Creating a Request
+    RunInstances (..),
+    newRunInstances,
+
+    -- * Request Lenses
+    runInstances_additionalInfo,
+    runInstances_blockDeviceMappings,
+    runInstances_capacityReservationSpecification,
+    runInstances_clientToken,
+    runInstances_cpuOptions,
+    runInstances_creditSpecification,
+    runInstances_disableApiStop,
+    runInstances_disableApiTermination,
+    runInstances_dryRun,
+    runInstances_ebsOptimized,
+    runInstances_elasticGpuSpecification,
+    runInstances_elasticInferenceAccelerators,
+    runInstances_enclaveOptions,
+    runInstances_hibernationOptions,
+    runInstances_iamInstanceProfile,
+    runInstances_imageId,
+    runInstances_instanceInitiatedShutdownBehavior,
+    runInstances_instanceMarketOptions,
+    runInstances_instanceType,
+    runInstances_ipv6AddressCount,
+    runInstances_ipv6Addresses,
+    runInstances_kernelId,
+    runInstances_keyName,
+    runInstances_launchTemplate,
+    runInstances_licenseSpecifications,
+    runInstances_maintenanceOptions,
+    runInstances_metadataOptions,
+    runInstances_monitoring,
+    runInstances_networkInterfaces,
+    runInstances_placement,
+    runInstances_privateDnsNameOptions,
+    runInstances_privateIpAddress,
+    runInstances_ramdiskId,
+    runInstances_securityGroupIds,
+    runInstances_securityGroups,
+    runInstances_subnetId,
+    runInstances_tagSpecifications,
+    runInstances_userData,
+    runInstances_maxCount,
+    runInstances_minCount,
+
+    -- * Destructuring the Response
+    Reservation (..),
+    newReservation,
+
+    -- * Response Lenses
+    reservation_groups,
+    reservation_instances,
+    reservation_requesterId,
+    reservation_reservationId,
+    reservation_ownerId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRunInstances' smart constructor.
+data RunInstances = RunInstances'
+  { -- | Reserved.
+    additionalInfo :: Prelude.Maybe Prelude.Text,
+    -- | The block device mapping, which defines the EBS volumes and instance
+    -- store volumes to attach to the instance at launch. For more information,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html Block device mappings>
+    -- in the /Amazon EC2 User Guide/.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | Information about the Capacity Reservation targeting option. If you do
+    -- not specify this parameter, the instance\'s Capacity Reservation
+    -- preference defaults to @open@, which enables it to run in any open
+    -- Capacity Reservation that has matching attributes (instance type,
+    -- platform, Availability Zone).
+    capacityReservationSpecification :: Prelude.Maybe CapacityReservationSpecification,
+    -- | 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.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    --
+    -- Constraints: Maximum 64 ASCII characters
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The CPU options for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimize CPU options>
+    -- in the /Amazon EC2 User Guide/.
+    cpuOptions :: Prelude.Maybe CpuOptionsRequest,
+    -- | The credit option for CPU usage of the burstable performance instance.
+    -- Valid values are @standard@ and @unlimited@. To change this attribute
+    -- after launch, use
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html ModifyInstanceCreditSpecification>.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: @standard@ (T2 instances) or @unlimited@ (T3\/T3a\/T4g
+    -- instances)
+    --
+    -- For T3 instances with @host@ tenancy, only @standard@ is supported.
+    creditSpecification :: Prelude.Maybe CreditSpecificationRequest,
+    -- | Indicates whether an instance is enabled for stop protection. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop protection>.
+    disableApiStop :: Prelude.Maybe Prelude.Bool,
+    -- | If you set this parameter to @true@, you can\'t terminate the instance
+    -- using the Amazon EC2 console, CLI, or API; otherwise, you can. To change
+    -- this attribute after launch, use
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html ModifyInstanceAttribute>.
+    -- Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to
+    -- @terminate@, you can terminate the instance by running the shutdown
+    -- command from the instance.
+    --
+    -- Default: @false@
+    disableApiTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance is optimized for Amazon EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal Amazon EBS I\/O
+    -- performance. This optimization isn\'t available with all instance types.
+    -- Additional usage charges apply when using an EBS-optimized instance.
+    --
+    -- Default: @false@
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | An elastic GPU to associate with the instance. An Elastic GPU is a GPU
+    -- resource that you can attach to your Windows instance to accelerate the
+    -- graphics performance of your applications. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html Amazon EC2 Elastic GPUs>
+    -- in the /Amazon EC2 User Guide/.
+    elasticGpuSpecification :: Prelude.Maybe [ElasticGpuSpecification],
+    -- | An elastic inference accelerator to associate with the instance. Elastic
+    -- inference accelerators are a resource you can attach to your Amazon EC2
+    -- instances to accelerate your Deep Learning (DL) inference workloads.
+    --
+    -- You cannot specify accelerators from different generations in the same
+    -- request.
+    elasticInferenceAccelerators :: Prelude.Maybe [ElasticInferenceAccelerator],
+    -- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+    -- Enclaves. For more information, see
+    -- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+    -- in the /Amazon Web Services Nitro Enclaves User Guide/.
+    --
+    -- You can\'t enable Amazon Web Services Nitro Enclaves and hibernation on
+    -- the same instance.
+    enclaveOptions :: Prelude.Maybe EnclaveOptionsRequest,
+    -- | Indicates whether an instance is enabled for hibernation. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- You can\'t enable hibernation and Amazon Web Services Nitro Enclaves on
+    -- the same instance.
+    hibernationOptions :: Prelude.Maybe HibernationOptionsRequest,
+    -- | The name or Amazon Resource Name (ARN) of an IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe IamInstanceProfileSpecification,
+    -- | The ID of the AMI. An AMI ID is required to launch an instance and must
+    -- be specified here or in a launch template.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether an instance stops or terminates when you initiate
+    -- shutdown from the instance (using the operating system command for
+    -- system shutdown).
+    --
+    -- Default: @stop@
+    instanceInitiatedShutdownBehavior :: Prelude.Maybe ShutdownBehavior,
+    -- | The market (purchasing) option for the instances.
+    --
+    -- For RunInstances, persistent Spot Instance requests are only supported
+    -- when __InstanceInterruptionBehavior__ is set to either @hibernate@ or
+    -- @stop@.
+    instanceMarketOptions :: Prelude.Maybe InstanceMarketOptionsRequest,
+    -- | The instance type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: @m1.small@
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | [EC2-VPC] The number of IPv6 addresses to associate with the primary
+    -- network interface. Amazon EC2 chooses the IPv6 addresses from the range
+    -- of your subnet. You cannot specify this option and the option to assign
+    -- specific IPv6 addresses in the same request. You can specify this option
+    -- if you\'ve specified a minimum number of instances to launch.
+    --
+    -- You cannot specify this option and the network interfaces option in the
+    -- same request.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | [EC2-VPC] The IPv6 addresses from the range of the subnet to associate
+    -- with the primary network interface. You cannot specify this option and
+    -- the option to assign a number of IPv6 addresses in the same request. You
+    -- cannot specify this option if you\'ve specified a minimum number of
+    -- instances to launch.
+    --
+    -- You cannot specify this option and the network interfaces option in the
+    -- same request.
+    ipv6Addresses :: Prelude.Maybe [InstanceIpv6Address],
+    -- | The ID of the kernel.
+    --
+    -- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB>
+    -- in the /Amazon EC2 User Guide/.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair. You can create a key pair using
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html CreateKeyPair>
+    -- or
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html ImportKeyPair>.
+    --
+    -- If you do not specify a key pair, you can\'t connect to the instance
+    -- unless you choose an AMI that is configured to allow users another way
+    -- to log in.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The launch template to use to launch the instances. Any parameters that
+    -- you specify in RunInstances override the same parameters in the launch
+    -- template. You can specify either the name or ID of a launch template,
+    -- but not both.
+    launchTemplate :: Prelude.Maybe LaunchTemplateSpecification,
+    -- | The license configurations.
+    licenseSpecifications :: Prelude.Maybe [LicenseConfigurationRequest],
+    -- | The maintenance and recovery options for the instance.
+    maintenanceOptions :: Prelude.Maybe InstanceMaintenanceOptionsRequest,
+    -- | The metadata options for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>.
+    metadataOptions :: Prelude.Maybe InstanceMetadataOptionsRequest,
+    -- | Specifies whether detailed monitoring is enabled for the instance.
+    monitoring :: Prelude.Maybe RunInstancesMonitoringEnabled,
+    -- | The network interfaces to associate with the instance. If you specify a
+    -- network interface, you must specify any security groups and subnets as
+    -- part of the network interface.
+    networkInterfaces :: Prelude.Maybe [InstanceNetworkInterfaceSpecification],
+    -- | The placement for the instance.
+    placement :: Prelude.Maybe Placement,
+    -- | The options for the instance hostname. The default values are inherited
+    -- from the subnet.
+    privateDnsNameOptions :: Prelude.Maybe PrivateDnsNameOptionsRequest,
+    -- | [EC2-VPC] The primary IPv4 address. You must specify a value from the
+    -- IPv4 address range of the subnet.
+    --
+    -- 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.
+    --
+    -- You cannot specify this option and the network interfaces option in the
+    -- same request.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | 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 Amazon Web Services Resource Center and search for the kernel ID.
+    --
+    -- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB>
+    -- in the /Amazon EC2 User Guide/.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the security groups. You can create a security group using
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html CreateSecurityGroup>.
+    --
+    -- If you specify a network interface, you must specify any security groups
+    -- as part of the network interface.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | [EC2-Classic, default VPC] The names of the security groups. For a
+    -- nondefault VPC, you must use security group IDs instead.
+    --
+    -- If you specify a network interface, you must specify any security groups
+    -- as part of the network interface.
+    --
+    -- Default: Amazon EC2 uses the default security group.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | [EC2-VPC] The ID of the subnet to launch the instance into.
+    --
+    -- If you specify a network interface, you must specify any subnets as part
+    -- of the network interface.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply to the resources that are created during instance
+    -- launch.
+    --
+    -- You can specify tags for the following resources only:
+    --
+    -- -   Instances
+    --
+    -- -   Volumes
+    --
+    -- -   Elastic graphics
+    --
+    -- -   Spot Instance requests
+    --
+    -- -   Network interfaces
+    --
+    -- To tag a resource after it has been created, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The user data script to make available to the instance. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Run commands on your Linux instance at launch>
+    -- and
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html Run commands on your Windows instance at launch>.
+    -- 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.
+    userData :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The maximum number of instances to launch. If you specify more instances
+    -- than Amazon EC2 can launch in the target Availability Zone, Amazon EC2
+    -- launches the largest possible number of instances above @MinCount@.
+    --
+    -- Constraints: Between 1 and the maximum number you\'re allowed for the
+    -- specified instance type. For more information about the default limits,
+    -- and how to request an increase, see
+    -- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
+    -- in the Amazon EC2 FAQ.
+    maxCount :: Prelude.Int,
+    -- | The minimum number of instances to launch. If you specify a minimum that
+    -- is more instances than Amazon EC2 can launch in the target Availability
+    -- Zone, Amazon EC2 launches no instances.
+    --
+    -- Constraints: Between 1 and the maximum number you\'re allowed for the
+    -- specified instance type. For more information about the default limits,
+    -- and how to request an increase, see
+    -- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
+    -- in the Amazon EC2 General FAQ.
+    minCount :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RunInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalInfo', 'runInstances_additionalInfo' - Reserved.
+--
+-- 'blockDeviceMappings', 'runInstances_blockDeviceMappings' - The block device mapping, which defines the EBS volumes and instance
+-- store volumes to attach to the instance at launch. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html Block device mappings>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'capacityReservationSpecification', 'runInstances_capacityReservationSpecification' - Information about the Capacity Reservation targeting option. If you do
+-- not specify this parameter, the instance\'s Capacity Reservation
+-- preference defaults to @open@, which enables it to run in any open
+-- Capacity Reservation that has matching attributes (instance type,
+-- platform, Availability Zone).
+--
+-- 'clientToken', 'runInstances_clientToken' - 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.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- Constraints: Maximum 64 ASCII characters
+--
+-- 'cpuOptions', 'runInstances_cpuOptions' - The CPU options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimize CPU options>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'creditSpecification', 'runInstances_creditSpecification' - The credit option for CPU usage of the burstable performance instance.
+-- Valid values are @standard@ and @unlimited@. To change this attribute
+-- after launch, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html ModifyInstanceCreditSpecification>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @standard@ (T2 instances) or @unlimited@ (T3\/T3a\/T4g
+-- instances)
+--
+-- For T3 instances with @host@ tenancy, only @standard@ is supported.
+--
+-- 'disableApiStop', 'runInstances_disableApiStop' - Indicates whether an instance is enabled for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop protection>.
+--
+-- 'disableApiTermination', 'runInstances_disableApiTermination' - If you set this parameter to @true@, you can\'t terminate the instance
+-- using the Amazon EC2 console, CLI, or API; otherwise, you can. To change
+-- this attribute after launch, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html ModifyInstanceAttribute>.
+-- Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to
+-- @terminate@, you can terminate the instance by running the shutdown
+-- command from the instance.
+--
+-- Default: @false@
+--
+-- 'dryRun', 'runInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'ebsOptimized', 'runInstances_ebsOptimized' - Indicates whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal Amazon EBS I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS-optimized instance.
+--
+-- Default: @false@
+--
+-- 'elasticGpuSpecification', 'runInstances_elasticGpuSpecification' - An elastic GPU to associate with the instance. An Elastic GPU is a GPU
+-- resource that you can attach to your Windows instance to accelerate the
+-- graphics performance of your applications. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html Amazon EC2 Elastic GPUs>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'elasticInferenceAccelerators', 'runInstances_elasticInferenceAccelerators' - An elastic inference accelerator to associate with the instance. Elastic
+-- inference accelerators are a resource you can attach to your Amazon EC2
+-- instances to accelerate your Deep Learning (DL) inference workloads.
+--
+-- You cannot specify accelerators from different generations in the same
+-- request.
+--
+-- 'enclaveOptions', 'runInstances_enclaveOptions' - Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- You can\'t enable Amazon Web Services Nitro Enclaves and hibernation on
+-- the same instance.
+--
+-- 'hibernationOptions', 'runInstances_hibernationOptions' - Indicates whether an instance is enabled for hibernation. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- You can\'t enable hibernation and Amazon Web Services Nitro Enclaves on
+-- the same instance.
+--
+-- 'iamInstanceProfile', 'runInstances_iamInstanceProfile' - The name or Amazon Resource Name (ARN) of an IAM instance profile.
+--
+-- 'imageId', 'runInstances_imageId' - The ID of the AMI. An AMI ID is required to launch an instance and must
+-- be specified here or in a launch template.
+--
+-- 'instanceInitiatedShutdownBehavior', 'runInstances_instanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- Default: @stop@
+--
+-- 'instanceMarketOptions', 'runInstances_instanceMarketOptions' - The market (purchasing) option for the instances.
+--
+-- For RunInstances, persistent Spot Instance requests are only supported
+-- when __InstanceInterruptionBehavior__ is set to either @hibernate@ or
+-- @stop@.
+--
+-- 'instanceType', 'runInstances_instanceType' - The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @m1.small@
+--
+-- 'ipv6AddressCount', 'runInstances_ipv6AddressCount' - [EC2-VPC] The number of IPv6 addresses to associate with the primary
+-- network interface. Amazon EC2 chooses the IPv6 addresses from the range
+-- of your subnet. You cannot specify this option and the option to assign
+-- specific IPv6 addresses in the same request. You can specify this option
+-- if you\'ve specified a minimum number of instances to launch.
+--
+-- You cannot specify this option and the network interfaces option in the
+-- same request.
+--
+-- 'ipv6Addresses', 'runInstances_ipv6Addresses' - [EC2-VPC] The IPv6 addresses from the range of the subnet to associate
+-- with the primary network interface. You cannot specify this option and
+-- the option to assign a number of IPv6 addresses in the same request. You
+-- cannot specify this option if you\'ve specified a minimum number of
+-- instances to launch.
+--
+-- You cannot specify this option and the network interfaces option in the
+-- same request.
+--
+-- 'kernelId', 'runInstances_kernelId' - The ID of the kernel.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'keyName', 'runInstances_keyName' - The name of the key pair. You can create a key pair using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html CreateKeyPair>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html ImportKeyPair>.
+--
+-- If you do not specify a key pair, you can\'t connect to the instance
+-- unless you choose an AMI that is configured to allow users another way
+-- to log in.
+--
+-- 'launchTemplate', 'runInstances_launchTemplate' - The launch template to use to launch the instances. Any parameters that
+-- you specify in RunInstances override the same parameters in the launch
+-- template. You can specify either the name or ID of a launch template,
+-- but not both.
+--
+-- 'licenseSpecifications', 'runInstances_licenseSpecifications' - The license configurations.
+--
+-- 'maintenanceOptions', 'runInstances_maintenanceOptions' - The maintenance and recovery options for the instance.
+--
+-- 'metadataOptions', 'runInstances_metadataOptions' - The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>.
+--
+-- 'monitoring', 'runInstances_monitoring' - Specifies whether detailed monitoring is enabled for the instance.
+--
+-- 'networkInterfaces', 'runInstances_networkInterfaces' - The network interfaces to associate with the instance. If you specify a
+-- network interface, you must specify any security groups and subnets as
+-- part of the network interface.
+--
+-- 'placement', 'runInstances_placement' - The placement for the instance.
+--
+-- 'privateDnsNameOptions', 'runInstances_privateDnsNameOptions' - The options for the instance hostname. The default values are inherited
+-- from the subnet.
+--
+-- 'privateIpAddress', 'runInstances_privateIpAddress' - [EC2-VPC] The primary IPv4 address. You must specify a value from the
+-- IPv4 address range of the subnet.
+--
+-- 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.
+--
+-- You cannot specify this option and the network interfaces option in the
+-- same request.
+--
+-- 'ramdiskId', 'runInstances_ramdiskId' - 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 Amazon Web Services Resource Center and search for the kernel ID.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'securityGroupIds', 'runInstances_securityGroupIds' - The IDs of the security groups. You can create a security group using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html CreateSecurityGroup>.
+--
+-- If you specify a network interface, you must specify any security groups
+-- as part of the network interface.
+--
+-- 'securityGroups', 'runInstances_securityGroups' - [EC2-Classic, default VPC] The names of the security groups. For a
+-- nondefault VPC, you must use security group IDs instead.
+--
+-- If you specify a network interface, you must specify any security groups
+-- as part of the network interface.
+--
+-- Default: Amazon EC2 uses the default security group.
+--
+-- 'subnetId', 'runInstances_subnetId' - [EC2-VPC] The ID of the subnet to launch the instance into.
+--
+-- If you specify a network interface, you must specify any subnets as part
+-- of the network interface.
+--
+-- 'tagSpecifications', 'runInstances_tagSpecifications' - The tags to apply to the resources that are created during instance
+-- launch.
+--
+-- You can specify tags for the following resources only:
+--
+-- -   Instances
+--
+-- -   Volumes
+--
+-- -   Elastic graphics
+--
+-- -   Spot Instance requests
+--
+-- -   Network interfaces
+--
+-- To tag a resource after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+--
+-- 'userData', 'runInstances_userData' - The user data script to make available to the instance. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Run commands on your Linux instance at launch>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html Run commands on your Windows instance at launch>.
+-- 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.
+--
+-- 'maxCount', 'runInstances_maxCount' - The maximum number of instances to launch. If you specify more instances
+-- than Amazon EC2 can launch in the target Availability Zone, Amazon EC2
+-- launches the largest possible number of instances above @MinCount@.
+--
+-- Constraints: Between 1 and the maximum number you\'re allowed for the
+-- specified instance type. For more information about the default limits,
+-- and how to request an increase, see
+-- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
+-- in the Amazon EC2 FAQ.
+--
+-- 'minCount', 'runInstances_minCount' - The minimum number of instances to launch. If you specify a minimum that
+-- is more instances than Amazon EC2 can launch in the target Availability
+-- Zone, Amazon EC2 launches no instances.
+--
+-- Constraints: Between 1 and the maximum number you\'re allowed for the
+-- specified instance type. For more information about the default limits,
+-- and how to request an increase, see
+-- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
+-- in the Amazon EC2 General FAQ.
+newRunInstances ::
+  -- | 'maxCount'
+  Prelude.Int ->
+  -- | 'minCount'
+  Prelude.Int ->
+  RunInstances
+newRunInstances pMaxCount_ pMinCount_ =
+  RunInstances'
+    { additionalInfo = Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      capacityReservationSpecification = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      cpuOptions = Prelude.Nothing,
+      creditSpecification = Prelude.Nothing,
+      disableApiStop = Prelude.Nothing,
+      disableApiTermination = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      elasticGpuSpecification = Prelude.Nothing,
+      elasticInferenceAccelerators = Prelude.Nothing,
+      enclaveOptions = Prelude.Nothing,
+      hibernationOptions = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceInitiatedShutdownBehavior = Prelude.Nothing,
+      instanceMarketOptions = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      ipv6AddressCount = Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      licenseSpecifications = Prelude.Nothing,
+      maintenanceOptions = Prelude.Nothing,
+      metadataOptions = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      privateDnsNameOptions = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      userData = Prelude.Nothing,
+      maxCount = pMaxCount_,
+      minCount = pMinCount_
+    }
+
+-- | Reserved.
+runInstances_additionalInfo :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_additionalInfo = Lens.lens (\RunInstances' {additionalInfo} -> additionalInfo) (\s@RunInstances' {} a -> s {additionalInfo = a} :: RunInstances)
+
+-- | The block device mapping, which defines the EBS volumes and instance
+-- store volumes to attach to the instance at launch. For more information,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html Block device mappings>
+-- in the /Amazon EC2 User Guide/.
+runInstances_blockDeviceMappings :: Lens.Lens' RunInstances (Prelude.Maybe [BlockDeviceMapping])
+runInstances_blockDeviceMappings = Lens.lens (\RunInstances' {blockDeviceMappings} -> blockDeviceMappings) (\s@RunInstances' {} a -> s {blockDeviceMappings = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the Capacity Reservation targeting option. If you do
+-- not specify this parameter, the instance\'s Capacity Reservation
+-- preference defaults to @open@, which enables it to run in any open
+-- Capacity Reservation that has matching attributes (instance type,
+-- platform, Availability Zone).
+runInstances_capacityReservationSpecification :: Lens.Lens' RunInstances (Prelude.Maybe CapacityReservationSpecification)
+runInstances_capacityReservationSpecification = Lens.lens (\RunInstances' {capacityReservationSpecification} -> capacityReservationSpecification) (\s@RunInstances' {} a -> s {capacityReservationSpecification = a} :: RunInstances)
+
+-- | 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.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- Constraints: Maximum 64 ASCII characters
+runInstances_clientToken :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_clientToken = Lens.lens (\RunInstances' {clientToken} -> clientToken) (\s@RunInstances' {} a -> s {clientToken = a} :: RunInstances)
+
+-- | The CPU options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimize CPU options>
+-- in the /Amazon EC2 User Guide/.
+runInstances_cpuOptions :: Lens.Lens' RunInstances (Prelude.Maybe CpuOptionsRequest)
+runInstances_cpuOptions = Lens.lens (\RunInstances' {cpuOptions} -> cpuOptions) (\s@RunInstances' {} a -> s {cpuOptions = a} :: RunInstances)
+
+-- | The credit option for CPU usage of the burstable performance instance.
+-- Valid values are @standard@ and @unlimited@. To change this attribute
+-- after launch, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceCreditSpecification.html ModifyInstanceCreditSpecification>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @standard@ (T2 instances) or @unlimited@ (T3\/T3a\/T4g
+-- instances)
+--
+-- For T3 instances with @host@ tenancy, only @standard@ is supported.
+runInstances_creditSpecification :: Lens.Lens' RunInstances (Prelude.Maybe CreditSpecificationRequest)
+runInstances_creditSpecification = Lens.lens (\RunInstances' {creditSpecification} -> creditSpecification) (\s@RunInstances' {} a -> s {creditSpecification = a} :: RunInstances)
+
+-- | Indicates whether an instance is enabled for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop protection>.
+runInstances_disableApiStop :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Bool)
+runInstances_disableApiStop = Lens.lens (\RunInstances' {disableApiStop} -> disableApiStop) (\s@RunInstances' {} a -> s {disableApiStop = a} :: RunInstances)
+
+-- | If you set this parameter to @true@, you can\'t terminate the instance
+-- using the Amazon EC2 console, CLI, or API; otherwise, you can. To change
+-- this attribute after launch, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html ModifyInstanceAttribute>.
+-- Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to
+-- @terminate@, you can terminate the instance by running the shutdown
+-- command from the instance.
+--
+-- Default: @false@
+runInstances_disableApiTermination :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Bool)
+runInstances_disableApiTermination = Lens.lens (\RunInstances' {disableApiTermination} -> disableApiTermination) (\s@RunInstances' {} a -> s {disableApiTermination = a} :: RunInstances)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+runInstances_dryRun :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Bool)
+runInstances_dryRun = Lens.lens (\RunInstances' {dryRun} -> dryRun) (\s@RunInstances' {} a -> s {dryRun = a} :: RunInstances)
+
+-- | Indicates whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal Amazon EBS I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS-optimized instance.
+--
+-- Default: @false@
+runInstances_ebsOptimized :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Bool)
+runInstances_ebsOptimized = Lens.lens (\RunInstances' {ebsOptimized} -> ebsOptimized) (\s@RunInstances' {} a -> s {ebsOptimized = a} :: RunInstances)
+
+-- | An elastic GPU to associate with the instance. An Elastic GPU is a GPU
+-- resource that you can attach to your Windows instance to accelerate the
+-- graphics performance of your applications. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html Amazon EC2 Elastic GPUs>
+-- in the /Amazon EC2 User Guide/.
+runInstances_elasticGpuSpecification :: Lens.Lens' RunInstances (Prelude.Maybe [ElasticGpuSpecification])
+runInstances_elasticGpuSpecification = Lens.lens (\RunInstances' {elasticGpuSpecification} -> elasticGpuSpecification) (\s@RunInstances' {} a -> s {elasticGpuSpecification = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | An elastic inference accelerator to associate with the instance. Elastic
+-- inference accelerators are a resource you can attach to your Amazon EC2
+-- instances to accelerate your Deep Learning (DL) inference workloads.
+--
+-- You cannot specify accelerators from different generations in the same
+-- request.
+runInstances_elasticInferenceAccelerators :: Lens.Lens' RunInstances (Prelude.Maybe [ElasticInferenceAccelerator])
+runInstances_elasticInferenceAccelerators = Lens.lens (\RunInstances' {elasticInferenceAccelerators} -> elasticInferenceAccelerators) (\s@RunInstances' {} a -> s {elasticInferenceAccelerators = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- You can\'t enable Amazon Web Services Nitro Enclaves and hibernation on
+-- the same instance.
+runInstances_enclaveOptions :: Lens.Lens' RunInstances (Prelude.Maybe EnclaveOptionsRequest)
+runInstances_enclaveOptions = Lens.lens (\RunInstances' {enclaveOptions} -> enclaveOptions) (\s@RunInstances' {} a -> s {enclaveOptions = a} :: RunInstances)
+
+-- | Indicates whether an instance is enabled for hibernation. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- You can\'t enable hibernation and Amazon Web Services Nitro Enclaves on
+-- the same instance.
+runInstances_hibernationOptions :: Lens.Lens' RunInstances (Prelude.Maybe HibernationOptionsRequest)
+runInstances_hibernationOptions = Lens.lens (\RunInstances' {hibernationOptions} -> hibernationOptions) (\s@RunInstances' {} a -> s {hibernationOptions = a} :: RunInstances)
+
+-- | The name or Amazon Resource Name (ARN) of an IAM instance profile.
+runInstances_iamInstanceProfile :: Lens.Lens' RunInstances (Prelude.Maybe IamInstanceProfileSpecification)
+runInstances_iamInstanceProfile = Lens.lens (\RunInstances' {iamInstanceProfile} -> iamInstanceProfile) (\s@RunInstances' {} a -> s {iamInstanceProfile = a} :: RunInstances)
+
+-- | The ID of the AMI. An AMI ID is required to launch an instance and must
+-- be specified here or in a launch template.
+runInstances_imageId :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_imageId = Lens.lens (\RunInstances' {imageId} -> imageId) (\s@RunInstances' {} a -> s {imageId = a} :: RunInstances)
+
+-- | Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- Default: @stop@
+runInstances_instanceInitiatedShutdownBehavior :: Lens.Lens' RunInstances (Prelude.Maybe ShutdownBehavior)
+runInstances_instanceInitiatedShutdownBehavior = Lens.lens (\RunInstances' {instanceInitiatedShutdownBehavior} -> instanceInitiatedShutdownBehavior) (\s@RunInstances' {} a -> s {instanceInitiatedShutdownBehavior = a} :: RunInstances)
+
+-- | The market (purchasing) option for the instances.
+--
+-- For RunInstances, persistent Spot Instance requests are only supported
+-- when __InstanceInterruptionBehavior__ is set to either @hibernate@ or
+-- @stop@.
+runInstances_instanceMarketOptions :: Lens.Lens' RunInstances (Prelude.Maybe InstanceMarketOptionsRequest)
+runInstances_instanceMarketOptions = Lens.lens (\RunInstances' {instanceMarketOptions} -> instanceMarketOptions) (\s@RunInstances' {} a -> s {instanceMarketOptions = a} :: RunInstances)
+
+-- | The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @m1.small@
+runInstances_instanceType :: Lens.Lens' RunInstances (Prelude.Maybe InstanceType)
+runInstances_instanceType = Lens.lens (\RunInstances' {instanceType} -> instanceType) (\s@RunInstances' {} a -> s {instanceType = a} :: RunInstances)
+
+-- | [EC2-VPC] The number of IPv6 addresses to associate with the primary
+-- network interface. Amazon EC2 chooses the IPv6 addresses from the range
+-- of your subnet. You cannot specify this option and the option to assign
+-- specific IPv6 addresses in the same request. You can specify this option
+-- if you\'ve specified a minimum number of instances to launch.
+--
+-- You cannot specify this option and the network interfaces option in the
+-- same request.
+runInstances_ipv6AddressCount :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Int)
+runInstances_ipv6AddressCount = Lens.lens (\RunInstances' {ipv6AddressCount} -> ipv6AddressCount) (\s@RunInstances' {} a -> s {ipv6AddressCount = a} :: RunInstances)
+
+-- | [EC2-VPC] The IPv6 addresses from the range of the subnet to associate
+-- with the primary network interface. You cannot specify this option and
+-- the option to assign a number of IPv6 addresses in the same request. You
+-- cannot specify this option if you\'ve specified a minimum number of
+-- instances to launch.
+--
+-- You cannot specify this option and the network interfaces option in the
+-- same request.
+runInstances_ipv6Addresses :: Lens.Lens' RunInstances (Prelude.Maybe [InstanceIpv6Address])
+runInstances_ipv6Addresses = Lens.lens (\RunInstances' {ipv6Addresses} -> ipv6Addresses) (\s@RunInstances' {} a -> s {ipv6Addresses = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the kernel.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB>
+-- in the /Amazon EC2 User Guide/.
+runInstances_kernelId :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_kernelId = Lens.lens (\RunInstances' {kernelId} -> kernelId) (\s@RunInstances' {} a -> s {kernelId = a} :: RunInstances)
+
+-- | The name of the key pair. You can create a key pair using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html CreateKeyPair>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html ImportKeyPair>.
+--
+-- If you do not specify a key pair, you can\'t connect to the instance
+-- unless you choose an AMI that is configured to allow users another way
+-- to log in.
+runInstances_keyName :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_keyName = Lens.lens (\RunInstances' {keyName} -> keyName) (\s@RunInstances' {} a -> s {keyName = a} :: RunInstances)
+
+-- | The launch template to use to launch the instances. Any parameters that
+-- you specify in RunInstances override the same parameters in the launch
+-- template. You can specify either the name or ID of a launch template,
+-- but not both.
+runInstances_launchTemplate :: Lens.Lens' RunInstances (Prelude.Maybe LaunchTemplateSpecification)
+runInstances_launchTemplate = Lens.lens (\RunInstances' {launchTemplate} -> launchTemplate) (\s@RunInstances' {} a -> s {launchTemplate = a} :: RunInstances)
+
+-- | The license configurations.
+runInstances_licenseSpecifications :: Lens.Lens' RunInstances (Prelude.Maybe [LicenseConfigurationRequest])
+runInstances_licenseSpecifications = Lens.lens (\RunInstances' {licenseSpecifications} -> licenseSpecifications) (\s@RunInstances' {} a -> s {licenseSpecifications = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maintenance and recovery options for the instance.
+runInstances_maintenanceOptions :: Lens.Lens' RunInstances (Prelude.Maybe InstanceMaintenanceOptionsRequest)
+runInstances_maintenanceOptions = Lens.lens (\RunInstances' {maintenanceOptions} -> maintenanceOptions) (\s@RunInstances' {} a -> s {maintenanceOptions = a} :: RunInstances)
+
+-- | The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>.
+runInstances_metadataOptions :: Lens.Lens' RunInstances (Prelude.Maybe InstanceMetadataOptionsRequest)
+runInstances_metadataOptions = Lens.lens (\RunInstances' {metadataOptions} -> metadataOptions) (\s@RunInstances' {} a -> s {metadataOptions = a} :: RunInstances)
+
+-- | Specifies whether detailed monitoring is enabled for the instance.
+runInstances_monitoring :: Lens.Lens' RunInstances (Prelude.Maybe RunInstancesMonitoringEnabled)
+runInstances_monitoring = Lens.lens (\RunInstances' {monitoring} -> monitoring) (\s@RunInstances' {} a -> s {monitoring = a} :: RunInstances)
+
+-- | The network interfaces to associate with the instance. If you specify a
+-- network interface, you must specify any security groups and subnets as
+-- part of the network interface.
+runInstances_networkInterfaces :: Lens.Lens' RunInstances (Prelude.Maybe [InstanceNetworkInterfaceSpecification])
+runInstances_networkInterfaces = Lens.lens (\RunInstances' {networkInterfaces} -> networkInterfaces) (\s@RunInstances' {} a -> s {networkInterfaces = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement for the instance.
+runInstances_placement :: Lens.Lens' RunInstances (Prelude.Maybe Placement)
+runInstances_placement = Lens.lens (\RunInstances' {placement} -> placement) (\s@RunInstances' {} a -> s {placement = a} :: RunInstances)
+
+-- | The options for the instance hostname. The default values are inherited
+-- from the subnet.
+runInstances_privateDnsNameOptions :: Lens.Lens' RunInstances (Prelude.Maybe PrivateDnsNameOptionsRequest)
+runInstances_privateDnsNameOptions = Lens.lens (\RunInstances' {privateDnsNameOptions} -> privateDnsNameOptions) (\s@RunInstances' {} a -> s {privateDnsNameOptions = a} :: RunInstances)
+
+-- | [EC2-VPC] The primary IPv4 address. You must specify a value from the
+-- IPv4 address range of the subnet.
+--
+-- 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.
+--
+-- You cannot specify this option and the network interfaces option in the
+-- same request.
+runInstances_privateIpAddress :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_privateIpAddress = Lens.lens (\RunInstances' {privateIpAddress} -> privateIpAddress) (\s@RunInstances' {} a -> s {privateIpAddress = a} :: RunInstances)
+
+-- | 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 Amazon Web Services Resource Center and search for the kernel ID.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB>
+-- in the /Amazon EC2 User Guide/.
+runInstances_ramdiskId :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_ramdiskId = Lens.lens (\RunInstances' {ramdiskId} -> ramdiskId) (\s@RunInstances' {} a -> s {ramdiskId = a} :: RunInstances)
+
+-- | The IDs of the security groups. You can create a security group using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html CreateSecurityGroup>.
+--
+-- If you specify a network interface, you must specify any security groups
+-- as part of the network interface.
+runInstances_securityGroupIds :: Lens.Lens' RunInstances (Prelude.Maybe [Prelude.Text])
+runInstances_securityGroupIds = Lens.lens (\RunInstances' {securityGroupIds} -> securityGroupIds) (\s@RunInstances' {} a -> s {securityGroupIds = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | [EC2-Classic, default VPC] The names of the security groups. For a
+-- nondefault VPC, you must use security group IDs instead.
+--
+-- If you specify a network interface, you must specify any security groups
+-- as part of the network interface.
+--
+-- Default: Amazon EC2 uses the default security group.
+runInstances_securityGroups :: Lens.Lens' RunInstances (Prelude.Maybe [Prelude.Text])
+runInstances_securityGroups = Lens.lens (\RunInstances' {securityGroups} -> securityGroups) (\s@RunInstances' {} a -> s {securityGroups = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | [EC2-VPC] The ID of the subnet to launch the instance into.
+--
+-- If you specify a network interface, you must specify any subnets as part
+-- of the network interface.
+runInstances_subnetId :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_subnetId = Lens.lens (\RunInstances' {subnetId} -> subnetId) (\s@RunInstances' {} a -> s {subnetId = a} :: RunInstances)
+
+-- | The tags to apply to the resources that are created during instance
+-- launch.
+--
+-- You can specify tags for the following resources only:
+--
+-- -   Instances
+--
+-- -   Volumes
+--
+-- -   Elastic graphics
+--
+-- -   Spot Instance requests
+--
+-- -   Network interfaces
+--
+-- To tag a resource after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+runInstances_tagSpecifications :: Lens.Lens' RunInstances (Prelude.Maybe [TagSpecification])
+runInstances_tagSpecifications = Lens.lens (\RunInstances' {tagSpecifications} -> tagSpecifications) (\s@RunInstances' {} a -> s {tagSpecifications = a} :: RunInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user data script to make available to the instance. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Run commands on your Linux instance at launch>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html Run commands on your Windows instance at launch>.
+-- 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.
+runInstances_userData :: Lens.Lens' RunInstances (Prelude.Maybe Prelude.Text)
+runInstances_userData = Lens.lens (\RunInstances' {userData} -> userData) (\s@RunInstances' {} a -> s {userData = a} :: RunInstances) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The maximum number of instances to launch. If you specify more instances
+-- than Amazon EC2 can launch in the target Availability Zone, Amazon EC2
+-- launches the largest possible number of instances above @MinCount@.
+--
+-- Constraints: Between 1 and the maximum number you\'re allowed for the
+-- specified instance type. For more information about the default limits,
+-- and how to request an increase, see
+-- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
+-- in the Amazon EC2 FAQ.
+runInstances_maxCount :: Lens.Lens' RunInstances Prelude.Int
+runInstances_maxCount = Lens.lens (\RunInstances' {maxCount} -> maxCount) (\s@RunInstances' {} a -> s {maxCount = a} :: RunInstances)
+
+-- | The minimum number of instances to launch. If you specify a minimum that
+-- is more instances than Amazon EC2 can launch in the target Availability
+-- Zone, Amazon EC2 launches no instances.
+--
+-- Constraints: Between 1 and the maximum number you\'re allowed for the
+-- specified instance type. For more information about the default limits,
+-- and how to request an increase, see
+-- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
+-- in the Amazon EC2 General FAQ.
+runInstances_minCount :: Lens.Lens' RunInstances Prelude.Int
+runInstances_minCount = Lens.lens (\RunInstances' {minCount} -> minCount) (\s@RunInstances' {} a -> s {minCount = a} :: RunInstances)
+
+instance Core.AWSRequest RunInstances where
+  type AWSResponse RunInstances = Reservation
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML (\s h x -> Data.parseXML x)
+
+instance Prelude.Hashable RunInstances where
+  hashWithSalt _salt RunInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalInfo
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` capacityReservationSpecification
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` cpuOptions
+      `Prelude.hashWithSalt` creditSpecification
+      `Prelude.hashWithSalt` disableApiStop
+      `Prelude.hashWithSalt` disableApiTermination
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` elasticGpuSpecification
+      `Prelude.hashWithSalt` elasticInferenceAccelerators
+      `Prelude.hashWithSalt` enclaveOptions
+      `Prelude.hashWithSalt` hibernationOptions
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceInitiatedShutdownBehavior
+      `Prelude.hashWithSalt` instanceMarketOptions
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` ipv6AddressCount
+      `Prelude.hashWithSalt` ipv6Addresses
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` launchTemplate
+      `Prelude.hashWithSalt` licenseSpecifications
+      `Prelude.hashWithSalt` maintenanceOptions
+      `Prelude.hashWithSalt` metadataOptions
+      `Prelude.hashWithSalt` monitoring
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` privateDnsNameOptions
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` ramdiskId
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` userData
+      `Prelude.hashWithSalt` maxCount
+      `Prelude.hashWithSalt` minCount
+
+instance Prelude.NFData RunInstances where
+  rnf RunInstances' {..} =
+    Prelude.rnf additionalInfo
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf capacityReservationSpecification
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf cpuOptions
+      `Prelude.seq` Prelude.rnf creditSpecification
+      `Prelude.seq` Prelude.rnf disableApiStop
+      `Prelude.seq` Prelude.rnf disableApiTermination
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf elasticGpuSpecification
+      `Prelude.seq` Prelude.rnf elasticInferenceAccelerators
+      `Prelude.seq` Prelude.rnf enclaveOptions
+      `Prelude.seq` Prelude.rnf hibernationOptions
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf
+        instanceInitiatedShutdownBehavior
+      `Prelude.seq` Prelude.rnf instanceMarketOptions
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf ipv6AddressCount
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf
+        launchTemplate
+      `Prelude.seq` Prelude.rnf
+        licenseSpecifications
+      `Prelude.seq` Prelude.rnf
+        maintenanceOptions
+      `Prelude.seq` Prelude.rnf
+        metadataOptions
+      `Prelude.seq` Prelude.rnf
+        monitoring
+      `Prelude.seq` Prelude.rnf
+        networkInterfaces
+      `Prelude.seq` Prelude.rnf
+        placement
+      `Prelude.seq` Prelude.rnf
+        privateDnsNameOptions
+      `Prelude.seq` Prelude.rnf
+        privateIpAddress
+      `Prelude.seq` Prelude.rnf
+        ramdiskId
+      `Prelude.seq` Prelude.rnf
+        securityGroupIds
+      `Prelude.seq` Prelude.rnf
+        securityGroups
+      `Prelude.seq` Prelude.rnf
+        subnetId
+      `Prelude.seq` Prelude.rnf
+        tagSpecifications
+      `Prelude.seq` Prelude.rnf
+        userData
+      `Prelude.seq` Prelude.rnf
+        maxCount
+      `Prelude.seq` Prelude.rnf
+        minCount
+
+instance Data.ToHeaders RunInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RunInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RunInstances where
+  toQuery RunInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RunInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AdditionalInfo" Data.=: additionalInfo,
+        Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "CapacityReservationSpecification"
+          Data.=: capacityReservationSpecification,
+        "ClientToken" Data.=: clientToken,
+        "CpuOptions" Data.=: cpuOptions,
+        "CreditSpecification" Data.=: creditSpecification,
+        "DisableApiStop" Data.=: disableApiStop,
+        "DisableApiTermination"
+          Data.=: disableApiTermination,
+        "DryRun" Data.=: dryRun,
+        "EbsOptimized" Data.=: ebsOptimized,
+        Data.toQuery
+          ( Data.toQueryList "ElasticGpuSpecification"
+              Prelude.<$> elasticGpuSpecification
+          ),
+        Data.toQuery
+          ( Data.toQueryList "ElasticInferenceAccelerator"
+              Prelude.<$> elasticInferenceAccelerators
+          ),
+        "EnclaveOptions" Data.=: enclaveOptions,
+        "HibernationOptions" Data.=: hibernationOptions,
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "ImageId" Data.=: imageId,
+        "InstanceInitiatedShutdownBehavior"
+          Data.=: instanceInitiatedShutdownBehavior,
+        "InstanceMarketOptions"
+          Data.=: instanceMarketOptions,
+        "InstanceType" Data.=: instanceType,
+        "Ipv6AddressCount" Data.=: ipv6AddressCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Address"
+              Prelude.<$> ipv6Addresses
+          ),
+        "KernelId" Data.=: kernelId,
+        "KeyName" Data.=: keyName,
+        "LaunchTemplate" Data.=: launchTemplate,
+        Data.toQuery
+          ( Data.toQueryList "LicenseSpecification"
+              Prelude.<$> licenseSpecifications
+          ),
+        "MaintenanceOptions" Data.=: maintenanceOptions,
+        "MetadataOptions" Data.=: metadataOptions,
+        "Monitoring" Data.=: monitoring,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterface"
+              Prelude.<$> networkInterfaces
+          ),
+        "Placement" Data.=: placement,
+        "PrivateDnsNameOptions"
+          Data.=: privateDnsNameOptions,
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        "RamdiskId" Data.=: ramdiskId,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroup"
+              Prelude.<$> securityGroups
+          ),
+        "SubnetId" Data.=: subnetId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "UserData" Data.=: userData,
+        "MaxCount" Data.=: maxCount,
+        "MinCount" Data.=: minCount
+      ]
diff --git a/gen/Amazonka/EC2/RunScheduledInstances.hs b/gen/Amazonka/EC2/RunScheduledInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/RunScheduledInstances.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.RunScheduledInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launches the specified Scheduled Instances.
+--
+-- Before you can launch a Scheduled Instance, you must purchase it and
+-- obtain an identifier using PurchaseScheduledInstances.
+--
+-- You must launch a Scheduled Instance during its scheduled time period.
+-- You can\'t stop or reboot a Scheduled Instance, but you can terminate it
+-- as needed. If you terminate a Scheduled Instance before the current
+-- scheduled time period ends, you can launch it again after a few minutes.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html Scheduled Instances>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.RunScheduledInstances
+  ( -- * Creating a Request
+    RunScheduledInstances (..),
+    newRunScheduledInstances,
+
+    -- * Request Lenses
+    runScheduledInstances_clientToken,
+    runScheduledInstances_dryRun,
+    runScheduledInstances_instanceCount,
+    runScheduledInstances_launchSpecification,
+    runScheduledInstances_scheduledInstanceId,
+
+    -- * Destructuring the Response
+    RunScheduledInstancesResponse (..),
+    newRunScheduledInstancesResponse,
+
+    -- * Response Lenses
+    runScheduledInstancesResponse_instanceIdSet,
+    runScheduledInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for RunScheduledInstances.
+--
+-- /See:/ 'newRunScheduledInstances' smart constructor.
+data RunScheduledInstances = RunScheduledInstances'
+  { -- | Unique, case-sensitive identifier that ensures the idempotency of the
+    -- request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The number of instances.
+    --
+    -- Default: 1
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The launch specification. You must match the instance type, Availability
+    -- Zone, network, and platform of the schedule that you purchased.
+    launchSpecification :: ScheduledInstancesLaunchSpecification,
+    -- | The Scheduled Instance ID.
+    scheduledInstanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RunScheduledInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'runScheduledInstances_clientToken' - Unique, case-sensitive identifier that ensures the idempotency of the
+-- request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'dryRun', 'runScheduledInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceCount', 'runScheduledInstances_instanceCount' - The number of instances.
+--
+-- Default: 1
+--
+-- 'launchSpecification', 'runScheduledInstances_launchSpecification' - The launch specification. You must match the instance type, Availability
+-- Zone, network, and platform of the schedule that you purchased.
+--
+-- 'scheduledInstanceId', 'runScheduledInstances_scheduledInstanceId' - The Scheduled Instance ID.
+newRunScheduledInstances ::
+  -- | 'launchSpecification'
+  ScheduledInstancesLaunchSpecification ->
+  -- | 'scheduledInstanceId'
+  Prelude.Text ->
+  RunScheduledInstances
+newRunScheduledInstances
+  pLaunchSpecification_
+  pScheduledInstanceId_ =
+    RunScheduledInstances'
+      { clientToken =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        instanceCount = Prelude.Nothing,
+        launchSpecification = pLaunchSpecification_,
+        scheduledInstanceId = pScheduledInstanceId_
+      }
+
+-- | Unique, case-sensitive identifier that ensures the idempotency of the
+-- request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+runScheduledInstances_clientToken :: Lens.Lens' RunScheduledInstances (Prelude.Maybe Prelude.Text)
+runScheduledInstances_clientToken = Lens.lens (\RunScheduledInstances' {clientToken} -> clientToken) (\s@RunScheduledInstances' {} a -> s {clientToken = a} :: RunScheduledInstances)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+runScheduledInstances_dryRun :: Lens.Lens' RunScheduledInstances (Prelude.Maybe Prelude.Bool)
+runScheduledInstances_dryRun = Lens.lens (\RunScheduledInstances' {dryRun} -> dryRun) (\s@RunScheduledInstances' {} a -> s {dryRun = a} :: RunScheduledInstances)
+
+-- | The number of instances.
+--
+-- Default: 1
+runScheduledInstances_instanceCount :: Lens.Lens' RunScheduledInstances (Prelude.Maybe Prelude.Int)
+runScheduledInstances_instanceCount = Lens.lens (\RunScheduledInstances' {instanceCount} -> instanceCount) (\s@RunScheduledInstances' {} a -> s {instanceCount = a} :: RunScheduledInstances)
+
+-- | The launch specification. You must match the instance type, Availability
+-- Zone, network, and platform of the schedule that you purchased.
+runScheduledInstances_launchSpecification :: Lens.Lens' RunScheduledInstances ScheduledInstancesLaunchSpecification
+runScheduledInstances_launchSpecification = Lens.lens (\RunScheduledInstances' {launchSpecification} -> launchSpecification) (\s@RunScheduledInstances' {} a -> s {launchSpecification = a} :: RunScheduledInstances)
+
+-- | The Scheduled Instance ID.
+runScheduledInstances_scheduledInstanceId :: Lens.Lens' RunScheduledInstances Prelude.Text
+runScheduledInstances_scheduledInstanceId = Lens.lens (\RunScheduledInstances' {scheduledInstanceId} -> scheduledInstanceId) (\s@RunScheduledInstances' {} a -> s {scheduledInstanceId = a} :: RunScheduledInstances)
+
+instance Core.AWSRequest RunScheduledInstances where
+  type
+    AWSResponse RunScheduledInstances =
+      RunScheduledInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          RunScheduledInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instanceIdSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable RunScheduledInstances where
+  hashWithSalt _salt RunScheduledInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` launchSpecification
+      `Prelude.hashWithSalt` scheduledInstanceId
+
+instance Prelude.NFData RunScheduledInstances where
+  rnf RunScheduledInstances' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf launchSpecification
+      `Prelude.seq` Prelude.rnf scheduledInstanceId
+
+instance Data.ToHeaders RunScheduledInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath RunScheduledInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery RunScheduledInstances where
+  toQuery RunScheduledInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("RunScheduledInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ClientToken" Data.=: clientToken,
+        "DryRun" Data.=: dryRun,
+        "InstanceCount" Data.=: instanceCount,
+        "LaunchSpecification" Data.=: launchSpecification,
+        "ScheduledInstanceId" Data.=: scheduledInstanceId
+      ]
+
+-- | Contains the output of RunScheduledInstances.
+--
+-- /See:/ 'newRunScheduledInstancesResponse' smart constructor.
+data RunScheduledInstancesResponse = RunScheduledInstancesResponse'
+  { -- | The IDs of the newly launched instances.
+    instanceIdSet :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RunScheduledInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceIdSet', 'runScheduledInstancesResponse_instanceIdSet' - The IDs of the newly launched instances.
+--
+-- 'httpStatus', 'runScheduledInstancesResponse_httpStatus' - The response's http status code.
+newRunScheduledInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  RunScheduledInstancesResponse
+newRunScheduledInstancesResponse pHttpStatus_ =
+  RunScheduledInstancesResponse'
+    { instanceIdSet =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The IDs of the newly launched instances.
+runScheduledInstancesResponse_instanceIdSet :: Lens.Lens' RunScheduledInstancesResponse (Prelude.Maybe [Prelude.Text])
+runScheduledInstancesResponse_instanceIdSet = Lens.lens (\RunScheduledInstancesResponse' {instanceIdSet} -> instanceIdSet) (\s@RunScheduledInstancesResponse' {} a -> s {instanceIdSet = a} :: RunScheduledInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+runScheduledInstancesResponse_httpStatus :: Lens.Lens' RunScheduledInstancesResponse Prelude.Int
+runScheduledInstancesResponse_httpStatus = Lens.lens (\RunScheduledInstancesResponse' {httpStatus} -> httpStatus) (\s@RunScheduledInstancesResponse' {} a -> s {httpStatus = a} :: RunScheduledInstancesResponse)
+
+instance Prelude.NFData RunScheduledInstancesResponse where
+  rnf RunScheduledInstancesResponse' {..} =
+    Prelude.rnf instanceIdSet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/SearchLocalGatewayRoutes.hs b/gen/Amazonka/EC2/SearchLocalGatewayRoutes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/SearchLocalGatewayRoutes.hs
@@ -0,0 +1,334 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.SearchLocalGatewayRoutes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches for routes in the specified local gateway route table.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.SearchLocalGatewayRoutes
+  ( -- * Creating a Request
+    SearchLocalGatewayRoutes (..),
+    newSearchLocalGatewayRoutes,
+
+    -- * Request Lenses
+    searchLocalGatewayRoutes_dryRun,
+    searchLocalGatewayRoutes_filters,
+    searchLocalGatewayRoutes_maxResults,
+    searchLocalGatewayRoutes_nextToken,
+    searchLocalGatewayRoutes_localGatewayRouteTableId,
+
+    -- * Destructuring the Response
+    SearchLocalGatewayRoutesResponse (..),
+    newSearchLocalGatewayRoutesResponse,
+
+    -- * Response Lenses
+    searchLocalGatewayRoutesResponse_nextToken,
+    searchLocalGatewayRoutesResponse_routes,
+    searchLocalGatewayRoutesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchLocalGatewayRoutes' smart constructor.
+data SearchLocalGatewayRoutes = SearchLocalGatewayRoutes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters.
+    --
+    -- -   @route-search.exact-match@ - The exact match of the specified
+    --     filter.
+    --
+    -- -   @route-search.longest-prefix-match@ - The longest prefix that
+    --     matches the route.
+    --
+    -- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+    --     the specified CIDR filter.
+    --
+    -- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+    --     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+    --     10.0.1.0\/31 routes in your route table and you specify
+    --     @supernet-of-match@ as 10.0.1.0\/30, then the result returns
+    --     10.0.1.0\/29.
+    --
+    -- -   @state@ - The state of the route.
+    --
+    -- -   @type@ - The route type.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchLocalGatewayRoutes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'searchLocalGatewayRoutes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'searchLocalGatewayRoutes_filters' - One or more filters.
+--
+-- -   @route-search.exact-match@ - The exact match of the specified
+--     filter.
+--
+-- -   @route-search.longest-prefix-match@ - The longest prefix that
+--     matches the route.
+--
+-- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+--     the specified CIDR filter.
+--
+-- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+--     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+--     10.0.1.0\/31 routes in your route table and you specify
+--     @supernet-of-match@ as 10.0.1.0\/30, then the result returns
+--     10.0.1.0\/29.
+--
+-- -   @state@ - The state of the route.
+--
+-- -   @type@ - The route type.
+--
+-- 'maxResults', 'searchLocalGatewayRoutes_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'searchLocalGatewayRoutes_nextToken' - The token for the next page of results.
+--
+-- 'localGatewayRouteTableId', 'searchLocalGatewayRoutes_localGatewayRouteTableId' - The ID of the local gateway route table.
+newSearchLocalGatewayRoutes ::
+  -- | 'localGatewayRouteTableId'
+  Prelude.Text ->
+  SearchLocalGatewayRoutes
+newSearchLocalGatewayRoutes
+  pLocalGatewayRouteTableId_ =
+    SearchLocalGatewayRoutes'
+      { dryRun = Prelude.Nothing,
+        filters = Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        localGatewayRouteTableId =
+          pLocalGatewayRouteTableId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+searchLocalGatewayRoutes_dryRun :: Lens.Lens' SearchLocalGatewayRoutes (Prelude.Maybe Prelude.Bool)
+searchLocalGatewayRoutes_dryRun = Lens.lens (\SearchLocalGatewayRoutes' {dryRun} -> dryRun) (\s@SearchLocalGatewayRoutes' {} a -> s {dryRun = a} :: SearchLocalGatewayRoutes)
+
+-- | One or more filters.
+--
+-- -   @route-search.exact-match@ - The exact match of the specified
+--     filter.
+--
+-- -   @route-search.longest-prefix-match@ - The longest prefix that
+--     matches the route.
+--
+-- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+--     the specified CIDR filter.
+--
+-- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+--     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+--     10.0.1.0\/31 routes in your route table and you specify
+--     @supernet-of-match@ as 10.0.1.0\/30, then the result returns
+--     10.0.1.0\/29.
+--
+-- -   @state@ - The state of the route.
+--
+-- -   @type@ - The route type.
+searchLocalGatewayRoutes_filters :: Lens.Lens' SearchLocalGatewayRoutes (Prelude.Maybe [Filter])
+searchLocalGatewayRoutes_filters = Lens.lens (\SearchLocalGatewayRoutes' {filters} -> filters) (\s@SearchLocalGatewayRoutes' {} a -> s {filters = a} :: SearchLocalGatewayRoutes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+searchLocalGatewayRoutes_maxResults :: Lens.Lens' SearchLocalGatewayRoutes (Prelude.Maybe Prelude.Int)
+searchLocalGatewayRoutes_maxResults = Lens.lens (\SearchLocalGatewayRoutes' {maxResults} -> maxResults) (\s@SearchLocalGatewayRoutes' {} a -> s {maxResults = a} :: SearchLocalGatewayRoutes)
+
+-- | The token for the next page of results.
+searchLocalGatewayRoutes_nextToken :: Lens.Lens' SearchLocalGatewayRoutes (Prelude.Maybe Prelude.Text)
+searchLocalGatewayRoutes_nextToken = Lens.lens (\SearchLocalGatewayRoutes' {nextToken} -> nextToken) (\s@SearchLocalGatewayRoutes' {} a -> s {nextToken = a} :: SearchLocalGatewayRoutes)
+
+-- | The ID of the local gateway route table.
+searchLocalGatewayRoutes_localGatewayRouteTableId :: Lens.Lens' SearchLocalGatewayRoutes Prelude.Text
+searchLocalGatewayRoutes_localGatewayRouteTableId = Lens.lens (\SearchLocalGatewayRoutes' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@SearchLocalGatewayRoutes' {} a -> s {localGatewayRouteTableId = a} :: SearchLocalGatewayRoutes)
+
+instance Core.AWSPager SearchLocalGatewayRoutes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchLocalGatewayRoutesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchLocalGatewayRoutesResponse_routes
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchLocalGatewayRoutes_nextToken
+          Lens..~ rs
+          Lens.^? searchLocalGatewayRoutesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest SearchLocalGatewayRoutes where
+  type
+    AWSResponse SearchLocalGatewayRoutes =
+      SearchLocalGatewayRoutesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          SearchLocalGatewayRoutesResponse'
+            Prelude.<$> (x Data..@? "nextToken")
+            Prelude.<*> ( x
+                            Data..@? "routeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchLocalGatewayRoutes where
+  hashWithSalt _salt SearchLocalGatewayRoutes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filters
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData SearchLocalGatewayRoutes where
+  rnf SearchLocalGatewayRoutes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+
+instance Data.ToHeaders SearchLocalGatewayRoutes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath SearchLocalGatewayRoutes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchLocalGatewayRoutes where
+  toQuery SearchLocalGatewayRoutes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("SearchLocalGatewayRoutes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "LocalGatewayRouteTableId"
+          Data.=: localGatewayRouteTableId
+      ]
+
+-- | /See:/ 'newSearchLocalGatewayRoutesResponse' smart constructor.
+data SearchLocalGatewayRoutesResponse = SearchLocalGatewayRoutesResponse'
+  { -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the routes.
+    routes :: Prelude.Maybe [LocalGatewayRoute],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchLocalGatewayRoutesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'searchLocalGatewayRoutesResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'routes', 'searchLocalGatewayRoutesResponse_routes' - Information about the routes.
+--
+-- 'httpStatus', 'searchLocalGatewayRoutesResponse_httpStatus' - The response's http status code.
+newSearchLocalGatewayRoutesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchLocalGatewayRoutesResponse
+newSearchLocalGatewayRoutesResponse pHttpStatus_ =
+  SearchLocalGatewayRoutesResponse'
+    { nextToken =
+        Prelude.Nothing,
+      routes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+searchLocalGatewayRoutesResponse_nextToken :: Lens.Lens' SearchLocalGatewayRoutesResponse (Prelude.Maybe Prelude.Text)
+searchLocalGatewayRoutesResponse_nextToken = Lens.lens (\SearchLocalGatewayRoutesResponse' {nextToken} -> nextToken) (\s@SearchLocalGatewayRoutesResponse' {} a -> s {nextToken = a} :: SearchLocalGatewayRoutesResponse)
+
+-- | Information about the routes.
+searchLocalGatewayRoutesResponse_routes :: Lens.Lens' SearchLocalGatewayRoutesResponse (Prelude.Maybe [LocalGatewayRoute])
+searchLocalGatewayRoutesResponse_routes = Lens.lens (\SearchLocalGatewayRoutesResponse' {routes} -> routes) (\s@SearchLocalGatewayRoutesResponse' {} a -> s {routes = a} :: SearchLocalGatewayRoutesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+searchLocalGatewayRoutesResponse_httpStatus :: Lens.Lens' SearchLocalGatewayRoutesResponse Prelude.Int
+searchLocalGatewayRoutesResponse_httpStatus = Lens.lens (\SearchLocalGatewayRoutesResponse' {httpStatus} -> httpStatus) (\s@SearchLocalGatewayRoutesResponse' {} a -> s {httpStatus = a} :: SearchLocalGatewayRoutesResponse)
+
+instance
+  Prelude.NFData
+    SearchLocalGatewayRoutesResponse
+  where
+  rnf SearchLocalGatewayRoutesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf routes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/SearchTransitGatewayMulticastGroups.hs b/gen/Amazonka/EC2/SearchTransitGatewayMulticastGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/SearchTransitGatewayMulticastGroups.hs
@@ -0,0 +1,371 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.SearchTransitGatewayMulticastGroups
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches one or more transit gateway multicast groups and returns the
+-- group membership information.
+--
+-- This operation returns paginated results.
+module Amazonka.EC2.SearchTransitGatewayMulticastGroups
+  ( -- * Creating a Request
+    SearchTransitGatewayMulticastGroups (..),
+    newSearchTransitGatewayMulticastGroups,
+
+    -- * Request Lenses
+    searchTransitGatewayMulticastGroups_dryRun,
+    searchTransitGatewayMulticastGroups_filters,
+    searchTransitGatewayMulticastGroups_maxResults,
+    searchTransitGatewayMulticastGroups_nextToken,
+    searchTransitGatewayMulticastGroups_transitGatewayMulticastDomainId,
+
+    -- * Destructuring the Response
+    SearchTransitGatewayMulticastGroupsResponse (..),
+    newSearchTransitGatewayMulticastGroupsResponse,
+
+    -- * Response Lenses
+    searchTransitGatewayMulticastGroupsResponse_multicastGroups,
+    searchTransitGatewayMulticastGroupsResponse_nextToken,
+    searchTransitGatewayMulticastGroupsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchTransitGatewayMulticastGroups' smart constructor.
+data SearchTransitGatewayMulticastGroups = SearchTransitGatewayMulticastGroups'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @group-ip-address@ - The IP address of the transit gateway multicast
+    --     group.
+    --
+    -- -   @is-group-member@ - The resource is a group member. Valid values are
+    --     @true@ | @false@.
+    --
+    -- -   @is-group-source@ - The resource is a group source. Valid values are
+    --     @true@ | @false@.
+    --
+    -- -   @member-type@ - The member type. Valid values are @igmp@ | @static@.
+    --
+    -- -   @resource-id@ - The ID of the resource.
+    --
+    -- -   @resource-type@ - The type of resource. Valid values are @vpc@ |
+    --     @vpn@ | @direct-connect-gateway@ | @tgw-peering@.
+    --
+    -- -   @source-type@ - The source type. Valid values are @igmp@ | @static@.
+    --
+    -- -   @subnet-id@ - The ID of the subnet.
+    --
+    -- -   @transit-gateway-attachment-id@ - The id of the transit gateway
+    --     attachment.
+    filters :: Prelude.Maybe [Filter],
+    -- | The maximum number of results to return with a single call. To retrieve
+    -- the remaining results, make another call with the returned @nextToken@
+    -- value.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token for the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchTransitGatewayMulticastGroups' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'searchTransitGatewayMulticastGroups_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filters', 'searchTransitGatewayMulticastGroups_filters' - One or more filters. The possible values are:
+--
+-- -   @group-ip-address@ - The IP address of the transit gateway multicast
+--     group.
+--
+-- -   @is-group-member@ - The resource is a group member. Valid values are
+--     @true@ | @false@.
+--
+-- -   @is-group-source@ - The resource is a group source. Valid values are
+--     @true@ | @false@.
+--
+-- -   @member-type@ - The member type. Valid values are @igmp@ | @static@.
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The type of resource. Valid values are @vpc@ |
+--     @vpn@ | @direct-connect-gateway@ | @tgw-peering@.
+--
+-- -   @source-type@ - The source type. Valid values are @igmp@ | @static@.
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @transit-gateway-attachment-id@ - The id of the transit gateway
+--     attachment.
+--
+-- 'maxResults', 'searchTransitGatewayMulticastGroups_maxResults' - The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+--
+-- 'nextToken', 'searchTransitGatewayMulticastGroups_nextToken' - The token for the next page of results.
+--
+-- 'transitGatewayMulticastDomainId', 'searchTransitGatewayMulticastGroups_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newSearchTransitGatewayMulticastGroups ::
+  SearchTransitGatewayMulticastGroups
+newSearchTransitGatewayMulticastGroups =
+  SearchTransitGatewayMulticastGroups'
+    { dryRun =
+        Prelude.Nothing,
+      filters = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+searchTransitGatewayMulticastGroups_dryRun :: Lens.Lens' SearchTransitGatewayMulticastGroups (Prelude.Maybe Prelude.Bool)
+searchTransitGatewayMulticastGroups_dryRun = Lens.lens (\SearchTransitGatewayMulticastGroups' {dryRun} -> dryRun) (\s@SearchTransitGatewayMulticastGroups' {} a -> s {dryRun = a} :: SearchTransitGatewayMulticastGroups)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @group-ip-address@ - The IP address of the transit gateway multicast
+--     group.
+--
+-- -   @is-group-member@ - The resource is a group member. Valid values are
+--     @true@ | @false@.
+--
+-- -   @is-group-source@ - The resource is a group source. Valid values are
+--     @true@ | @false@.
+--
+-- -   @member-type@ - The member type. Valid values are @igmp@ | @static@.
+--
+-- -   @resource-id@ - The ID of the resource.
+--
+-- -   @resource-type@ - The type of resource. Valid values are @vpc@ |
+--     @vpn@ | @direct-connect-gateway@ | @tgw-peering@.
+--
+-- -   @source-type@ - The source type. Valid values are @igmp@ | @static@.
+--
+-- -   @subnet-id@ - The ID of the subnet.
+--
+-- -   @transit-gateway-attachment-id@ - The id of the transit gateway
+--     attachment.
+searchTransitGatewayMulticastGroups_filters :: Lens.Lens' SearchTransitGatewayMulticastGroups (Prelude.Maybe [Filter])
+searchTransitGatewayMulticastGroups_filters = Lens.lens (\SearchTransitGatewayMulticastGroups' {filters} -> filters) (\s@SearchTransitGatewayMulticastGroups' {} a -> s {filters = a} :: SearchTransitGatewayMulticastGroups) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return with a single call. To retrieve
+-- the remaining results, make another call with the returned @nextToken@
+-- value.
+searchTransitGatewayMulticastGroups_maxResults :: Lens.Lens' SearchTransitGatewayMulticastGroups (Prelude.Maybe Prelude.Natural)
+searchTransitGatewayMulticastGroups_maxResults = Lens.lens (\SearchTransitGatewayMulticastGroups' {maxResults} -> maxResults) (\s@SearchTransitGatewayMulticastGroups' {} a -> s {maxResults = a} :: SearchTransitGatewayMulticastGroups)
+
+-- | The token for the next page of results.
+searchTransitGatewayMulticastGroups_nextToken :: Lens.Lens' SearchTransitGatewayMulticastGroups (Prelude.Maybe Prelude.Text)
+searchTransitGatewayMulticastGroups_nextToken = Lens.lens (\SearchTransitGatewayMulticastGroups' {nextToken} -> nextToken) (\s@SearchTransitGatewayMulticastGroups' {} a -> s {nextToken = a} :: SearchTransitGatewayMulticastGroups)
+
+-- | The ID of the transit gateway multicast domain.
+searchTransitGatewayMulticastGroups_transitGatewayMulticastDomainId :: Lens.Lens' SearchTransitGatewayMulticastGroups (Prelude.Maybe Prelude.Text)
+searchTransitGatewayMulticastGroups_transitGatewayMulticastDomainId = Lens.lens (\SearchTransitGatewayMulticastGroups' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@SearchTransitGatewayMulticastGroups' {} a -> s {transitGatewayMulticastDomainId = a} :: SearchTransitGatewayMulticastGroups)
+
+instance
+  Core.AWSPager
+    SearchTransitGatewayMulticastGroups
+  where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? searchTransitGatewayMulticastGroupsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? searchTransitGatewayMulticastGroupsResponse_multicastGroups
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& searchTransitGatewayMulticastGroups_nextToken
+          Lens..~ rs
+          Lens.^? searchTransitGatewayMulticastGroupsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    SearchTransitGatewayMulticastGroups
+  where
+  type
+    AWSResponse SearchTransitGatewayMulticastGroups =
+      SearchTransitGatewayMulticastGroupsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          SearchTransitGatewayMulticastGroupsResponse'
+            Prelude.<$> ( x
+                            Data..@? "multicastGroups"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    SearchTransitGatewayMulticastGroups
+  where
+  hashWithSalt
+    _salt
+    SearchTransitGatewayMulticastGroups' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` filters
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    SearchTransitGatewayMulticastGroups
+  where
+  rnf SearchTransitGatewayMulticastGroups' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filters
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
+
+instance
+  Data.ToHeaders
+    SearchTransitGatewayMulticastGroups
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    SearchTransitGatewayMulticastGroups
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    SearchTransitGatewayMulticastGroups
+  where
+  toQuery SearchTransitGatewayMulticastGroups' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "SearchTransitGatewayMulticastGroups" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          (Data.toQueryList "Filter" Prelude.<$> filters),
+        "MaxResults" Data.=: maxResults,
+        "NextToken" Data.=: nextToken,
+        "TransitGatewayMulticastDomainId"
+          Data.=: transitGatewayMulticastDomainId
+      ]
+
+-- | /See:/ 'newSearchTransitGatewayMulticastGroupsResponse' smart constructor.
+data SearchTransitGatewayMulticastGroupsResponse = SearchTransitGatewayMulticastGroupsResponse'
+  { -- | Information about the transit gateway multicast group.
+    multicastGroups :: Prelude.Maybe [TransitGatewayMulticastGroup],
+    -- | The token to use to retrieve the next page of results. This value is
+    -- @null@ when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchTransitGatewayMulticastGroupsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'multicastGroups', 'searchTransitGatewayMulticastGroupsResponse_multicastGroups' - Information about the transit gateway multicast group.
+--
+-- 'nextToken', 'searchTransitGatewayMulticastGroupsResponse_nextToken' - The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+--
+-- 'httpStatus', 'searchTransitGatewayMulticastGroupsResponse_httpStatus' - The response's http status code.
+newSearchTransitGatewayMulticastGroupsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchTransitGatewayMulticastGroupsResponse
+newSearchTransitGatewayMulticastGroupsResponse
+  pHttpStatus_ =
+    SearchTransitGatewayMulticastGroupsResponse'
+      { multicastGroups =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the transit gateway multicast group.
+searchTransitGatewayMulticastGroupsResponse_multicastGroups :: Lens.Lens' SearchTransitGatewayMulticastGroupsResponse (Prelude.Maybe [TransitGatewayMulticastGroup])
+searchTransitGatewayMulticastGroupsResponse_multicastGroups = Lens.lens (\SearchTransitGatewayMulticastGroupsResponse' {multicastGroups} -> multicastGroups) (\s@SearchTransitGatewayMulticastGroupsResponse' {} a -> s {multicastGroups = a} :: SearchTransitGatewayMulticastGroupsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token to use to retrieve the next page of results. This value is
+-- @null@ when there are no more results to return.
+searchTransitGatewayMulticastGroupsResponse_nextToken :: Lens.Lens' SearchTransitGatewayMulticastGroupsResponse (Prelude.Maybe Prelude.Text)
+searchTransitGatewayMulticastGroupsResponse_nextToken = Lens.lens (\SearchTransitGatewayMulticastGroupsResponse' {nextToken} -> nextToken) (\s@SearchTransitGatewayMulticastGroupsResponse' {} a -> s {nextToken = a} :: SearchTransitGatewayMulticastGroupsResponse)
+
+-- | The response's http status code.
+searchTransitGatewayMulticastGroupsResponse_httpStatus :: Lens.Lens' SearchTransitGatewayMulticastGroupsResponse Prelude.Int
+searchTransitGatewayMulticastGroupsResponse_httpStatus = Lens.lens (\SearchTransitGatewayMulticastGroupsResponse' {httpStatus} -> httpStatus) (\s@SearchTransitGatewayMulticastGroupsResponse' {} a -> s {httpStatus = a} :: SearchTransitGatewayMulticastGroupsResponse)
+
+instance
+  Prelude.NFData
+    SearchTransitGatewayMulticastGroupsResponse
+  where
+  rnf SearchTransitGatewayMulticastGroupsResponse' {..} =
+    Prelude.rnf multicastGroups
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/SearchTransitGatewayRoutes.hs b/gen/Amazonka/EC2/SearchTransitGatewayRoutes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/SearchTransitGatewayRoutes.hs
@@ -0,0 +1,324 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.SearchTransitGatewayRoutes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Searches for routes in the specified transit gateway route table.
+module Amazonka.EC2.SearchTransitGatewayRoutes
+  ( -- * Creating a Request
+    SearchTransitGatewayRoutes (..),
+    newSearchTransitGatewayRoutes,
+
+    -- * Request Lenses
+    searchTransitGatewayRoutes_dryRun,
+    searchTransitGatewayRoutes_maxResults,
+    searchTransitGatewayRoutes_transitGatewayRouteTableId,
+    searchTransitGatewayRoutes_filters,
+
+    -- * Destructuring the Response
+    SearchTransitGatewayRoutesResponse (..),
+    newSearchTransitGatewayRoutesResponse,
+
+    -- * Response Lenses
+    searchTransitGatewayRoutesResponse_additionalRoutesAvailable,
+    searchTransitGatewayRoutesResponse_routes,
+    searchTransitGatewayRoutesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSearchTransitGatewayRoutes' smart constructor.
+data SearchTransitGatewayRoutes = SearchTransitGatewayRoutes'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of routes to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Text,
+    -- | One or more filters. The possible values are:
+    --
+    -- -   @attachment.transit-gateway-attachment-id@- The id of the transit
+    --     gateway attachment.
+    --
+    -- -   @attachment.resource-id@ - The resource id of the transit gateway
+    --     attachment.
+    --
+    -- -   @attachment.resource-type@ - The attachment resource type. Valid
+    --     values are @vpc@ | @vpn@ | @direct-connect-gateway@ | @peering@ |
+    --     @connect@.
+    --
+    -- -   @prefix-list-id@ - The ID of the prefix list.
+    --
+    -- -   @route-search.exact-match@ - The exact match of the specified
+    --     filter.
+    --
+    -- -   @route-search.longest-prefix-match@ - The longest prefix that
+    --     matches the route.
+    --
+    -- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+    --     the specified CIDR filter.
+    --
+    -- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+    --     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+    --     10.0.1.0\/31 routes in your route table and you specify
+    --     supernet-of-match as 10.0.1.0\/30, then the result returns
+    --     10.0.1.0\/29.
+    --
+    -- -   @state@ - The state of the route (@active@ | @blackhole@).
+    --
+    -- -   @type@ - The type of route (@propagated@ | @static@).
+    filters :: [Filter]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchTransitGatewayRoutes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'searchTransitGatewayRoutes_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'maxResults', 'searchTransitGatewayRoutes_maxResults' - The maximum number of routes to return.
+--
+-- 'transitGatewayRouteTableId', 'searchTransitGatewayRoutes_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+--
+-- 'filters', 'searchTransitGatewayRoutes_filters' - One or more filters. The possible values are:
+--
+-- -   @attachment.transit-gateway-attachment-id@- The id of the transit
+--     gateway attachment.
+--
+-- -   @attachment.resource-id@ - The resource id of the transit gateway
+--     attachment.
+--
+-- -   @attachment.resource-type@ - The attachment resource type. Valid
+--     values are @vpc@ | @vpn@ | @direct-connect-gateway@ | @peering@ |
+--     @connect@.
+--
+-- -   @prefix-list-id@ - The ID of the prefix list.
+--
+-- -   @route-search.exact-match@ - The exact match of the specified
+--     filter.
+--
+-- -   @route-search.longest-prefix-match@ - The longest prefix that
+--     matches the route.
+--
+-- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+--     the specified CIDR filter.
+--
+-- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+--     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+--     10.0.1.0\/31 routes in your route table and you specify
+--     supernet-of-match as 10.0.1.0\/30, then the result returns
+--     10.0.1.0\/29.
+--
+-- -   @state@ - The state of the route (@active@ | @blackhole@).
+--
+-- -   @type@ - The type of route (@propagated@ | @static@).
+newSearchTransitGatewayRoutes ::
+  -- | 'transitGatewayRouteTableId'
+  Prelude.Text ->
+  SearchTransitGatewayRoutes
+newSearchTransitGatewayRoutes
+  pTransitGatewayRouteTableId_ =
+    SearchTransitGatewayRoutes'
+      { dryRun =
+          Prelude.Nothing,
+        maxResults = Prelude.Nothing,
+        transitGatewayRouteTableId =
+          pTransitGatewayRouteTableId_,
+        filters = Prelude.mempty
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+searchTransitGatewayRoutes_dryRun :: Lens.Lens' SearchTransitGatewayRoutes (Prelude.Maybe Prelude.Bool)
+searchTransitGatewayRoutes_dryRun = Lens.lens (\SearchTransitGatewayRoutes' {dryRun} -> dryRun) (\s@SearchTransitGatewayRoutes' {} a -> s {dryRun = a} :: SearchTransitGatewayRoutes)
+
+-- | The maximum number of routes to return.
+searchTransitGatewayRoutes_maxResults :: Lens.Lens' SearchTransitGatewayRoutes (Prelude.Maybe Prelude.Natural)
+searchTransitGatewayRoutes_maxResults = Lens.lens (\SearchTransitGatewayRoutes' {maxResults} -> maxResults) (\s@SearchTransitGatewayRoutes' {} a -> s {maxResults = a} :: SearchTransitGatewayRoutes)
+
+-- | The ID of the transit gateway route table.
+searchTransitGatewayRoutes_transitGatewayRouteTableId :: Lens.Lens' SearchTransitGatewayRoutes Prelude.Text
+searchTransitGatewayRoutes_transitGatewayRouteTableId = Lens.lens (\SearchTransitGatewayRoutes' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@SearchTransitGatewayRoutes' {} a -> s {transitGatewayRouteTableId = a} :: SearchTransitGatewayRoutes)
+
+-- | One or more filters. The possible values are:
+--
+-- -   @attachment.transit-gateway-attachment-id@- The id of the transit
+--     gateway attachment.
+--
+-- -   @attachment.resource-id@ - The resource id of the transit gateway
+--     attachment.
+--
+-- -   @attachment.resource-type@ - The attachment resource type. Valid
+--     values are @vpc@ | @vpn@ | @direct-connect-gateway@ | @peering@ |
+--     @connect@.
+--
+-- -   @prefix-list-id@ - The ID of the prefix list.
+--
+-- -   @route-search.exact-match@ - The exact match of the specified
+--     filter.
+--
+-- -   @route-search.longest-prefix-match@ - The longest prefix that
+--     matches the route.
+--
+-- -   @route-search.subnet-of-match@ - The routes with a subnet that match
+--     the specified CIDR filter.
+--
+-- -   @route-search.supernet-of-match@ - The routes with a CIDR that
+--     encompass the CIDR filter. For example, if you have 10.0.1.0\/29 and
+--     10.0.1.0\/31 routes in your route table and you specify
+--     supernet-of-match as 10.0.1.0\/30, then the result returns
+--     10.0.1.0\/29.
+--
+-- -   @state@ - The state of the route (@active@ | @blackhole@).
+--
+-- -   @type@ - The type of route (@propagated@ | @static@).
+searchTransitGatewayRoutes_filters :: Lens.Lens' SearchTransitGatewayRoutes [Filter]
+searchTransitGatewayRoutes_filters = Lens.lens (\SearchTransitGatewayRoutes' {filters} -> filters) (\s@SearchTransitGatewayRoutes' {} a -> s {filters = a} :: SearchTransitGatewayRoutes) Prelude.. Lens.coerced
+
+instance Core.AWSRequest SearchTransitGatewayRoutes where
+  type
+    AWSResponse SearchTransitGatewayRoutes =
+      SearchTransitGatewayRoutesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          SearchTransitGatewayRoutesResponse'
+            Prelude.<$> (x Data..@? "additionalRoutesAvailable")
+            Prelude.<*> ( x
+                            Data..@? "routeSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable SearchTransitGatewayRoutes where
+  hashWithSalt _salt SearchTransitGatewayRoutes' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+      `Prelude.hashWithSalt` filters
+
+instance Prelude.NFData SearchTransitGatewayRoutes where
+  rnf SearchTransitGatewayRoutes' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf filters
+
+instance Data.ToHeaders SearchTransitGatewayRoutes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath SearchTransitGatewayRoutes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SearchTransitGatewayRoutes where
+  toQuery SearchTransitGatewayRoutes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("SearchTransitGatewayRoutes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "MaxResults" Data.=: maxResults,
+        "TransitGatewayRouteTableId"
+          Data.=: transitGatewayRouteTableId,
+        Data.toQueryList "Filter" filters
+      ]
+
+-- | /See:/ 'newSearchTransitGatewayRoutesResponse' smart constructor.
+data SearchTransitGatewayRoutesResponse = SearchTransitGatewayRoutesResponse'
+  { -- | Indicates whether there are additional routes available.
+    additionalRoutesAvailable :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the routes.
+    routes :: Prelude.Maybe [TransitGatewayRoute],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SearchTransitGatewayRoutesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalRoutesAvailable', 'searchTransitGatewayRoutesResponse_additionalRoutesAvailable' - Indicates whether there are additional routes available.
+--
+-- 'routes', 'searchTransitGatewayRoutesResponse_routes' - Information about the routes.
+--
+-- 'httpStatus', 'searchTransitGatewayRoutesResponse_httpStatus' - The response's http status code.
+newSearchTransitGatewayRoutesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SearchTransitGatewayRoutesResponse
+newSearchTransitGatewayRoutesResponse pHttpStatus_ =
+  SearchTransitGatewayRoutesResponse'
+    { additionalRoutesAvailable =
+        Prelude.Nothing,
+      routes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether there are additional routes available.
+searchTransitGatewayRoutesResponse_additionalRoutesAvailable :: Lens.Lens' SearchTransitGatewayRoutesResponse (Prelude.Maybe Prelude.Bool)
+searchTransitGatewayRoutesResponse_additionalRoutesAvailable = Lens.lens (\SearchTransitGatewayRoutesResponse' {additionalRoutesAvailable} -> additionalRoutesAvailable) (\s@SearchTransitGatewayRoutesResponse' {} a -> s {additionalRoutesAvailable = a} :: SearchTransitGatewayRoutesResponse)
+
+-- | Information about the routes.
+searchTransitGatewayRoutesResponse_routes :: Lens.Lens' SearchTransitGatewayRoutesResponse (Prelude.Maybe [TransitGatewayRoute])
+searchTransitGatewayRoutesResponse_routes = Lens.lens (\SearchTransitGatewayRoutesResponse' {routes} -> routes) (\s@SearchTransitGatewayRoutesResponse' {} a -> s {routes = a} :: SearchTransitGatewayRoutesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+searchTransitGatewayRoutesResponse_httpStatus :: Lens.Lens' SearchTransitGatewayRoutesResponse Prelude.Int
+searchTransitGatewayRoutesResponse_httpStatus = Lens.lens (\SearchTransitGatewayRoutesResponse' {httpStatus} -> httpStatus) (\s@SearchTransitGatewayRoutesResponse' {} a -> s {httpStatus = a} :: SearchTransitGatewayRoutesResponse)
+
+instance
+  Prelude.NFData
+    SearchTransitGatewayRoutesResponse
+  where
+  rnf SearchTransitGatewayRoutesResponse' {..} =
+    Prelude.rnf additionalRoutesAvailable
+      `Prelude.seq` Prelude.rnf routes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/SendDiagnosticInterrupt.hs b/gen/Amazonka/EC2/SendDiagnosticInterrupt.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/SendDiagnosticInterrupt.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.SendDiagnosticInterrupt
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sends a diagnostic interrupt to the specified Amazon EC2 instance to
+-- trigger a /kernel panic/ (on Linux instances), or a /blue screen/\//stop
+-- error/ (on Windows instances). For instances based on Intel and AMD
+-- processors, the interrupt is received as a /non-maskable interrupt/
+-- (NMI).
+--
+-- 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.
+--
+-- Before sending a diagnostic interrupt to your instance, ensure that its
+-- operating system is configured to perform the required diagnostic tasks.
+--
+-- For more information about configuring your operating system to generate
+-- a crash dump when a kernel panic or stop error occurs, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/diagnostic-interrupt.html Send a diagnostic interrupt (for advanced users)>
+-- (Linux instances) or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/diagnostic-interrupt.html Send a diagnostic interrupt (for advanced users)>
+-- (Windows instances).
+module Amazonka.EC2.SendDiagnosticInterrupt
+  ( -- * Creating a Request
+    SendDiagnosticInterrupt (..),
+    newSendDiagnosticInterrupt,
+
+    -- * Request Lenses
+    sendDiagnosticInterrupt_dryRun,
+    sendDiagnosticInterrupt_instanceId,
+
+    -- * Destructuring the Response
+    SendDiagnosticInterruptResponse (..),
+    newSendDiagnosticInterruptResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newSendDiagnosticInterrupt' smart constructor.
+data SendDiagnosticInterrupt = SendDiagnosticInterrupt'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendDiagnosticInterrupt' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'sendDiagnosticInterrupt_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceId', 'sendDiagnosticInterrupt_instanceId' - The ID of the instance.
+newSendDiagnosticInterrupt ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  SendDiagnosticInterrupt
+newSendDiagnosticInterrupt pInstanceId_ =
+  SendDiagnosticInterrupt'
+    { dryRun = Prelude.Nothing,
+      instanceId = pInstanceId_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+sendDiagnosticInterrupt_dryRun :: Lens.Lens' SendDiagnosticInterrupt (Prelude.Maybe Prelude.Bool)
+sendDiagnosticInterrupt_dryRun = Lens.lens (\SendDiagnosticInterrupt' {dryRun} -> dryRun) (\s@SendDiagnosticInterrupt' {} a -> s {dryRun = a} :: SendDiagnosticInterrupt)
+
+-- | The ID of the instance.
+sendDiagnosticInterrupt_instanceId :: Lens.Lens' SendDiagnosticInterrupt Prelude.Text
+sendDiagnosticInterrupt_instanceId = Lens.lens (\SendDiagnosticInterrupt' {instanceId} -> instanceId) (\s@SendDiagnosticInterrupt' {} a -> s {instanceId = a} :: SendDiagnosticInterrupt)
+
+instance Core.AWSRequest SendDiagnosticInterrupt where
+  type
+    AWSResponse SendDiagnosticInterrupt =
+      SendDiagnosticInterruptResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      SendDiagnosticInterruptResponse'
+
+instance Prelude.Hashable SendDiagnosticInterrupt where
+  hashWithSalt _salt SendDiagnosticInterrupt' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData SendDiagnosticInterrupt where
+  rnf SendDiagnosticInterrupt' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToHeaders SendDiagnosticInterrupt where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath SendDiagnosticInterrupt where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery SendDiagnosticInterrupt where
+  toQuery SendDiagnosticInterrupt' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("SendDiagnosticInterrupt" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "InstanceId" Data.=: instanceId
+      ]
+
+-- | /See:/ 'newSendDiagnosticInterruptResponse' smart constructor.
+data SendDiagnosticInterruptResponse = SendDiagnosticInterruptResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SendDiagnosticInterruptResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newSendDiagnosticInterruptResponse ::
+  SendDiagnosticInterruptResponse
+newSendDiagnosticInterruptResponse =
+  SendDiagnosticInterruptResponse'
+
+instance
+  Prelude.NFData
+    SendDiagnosticInterruptResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/StartInstances.hs b/gen/Amazonka/EC2/StartInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/StartInstances.hs
@@ -0,0 +1,223 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.StartInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an Amazon EBS-backed instance that you\'ve previously stopped.
+--
+-- 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
+-- instance, Amazon EC2 charges a one-minute minimum for instance usage,
+-- and thereafter charges per second for instance usage.
+--
+-- 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.
+--
+-- Performing this operation on an instance that uses an instance store as
+-- its root device returns an error.
+--
+-- If you attempt to start a T3 instance with @host@ tenancy and the
+-- @unlimted@ CPU credit option, the request fails. The @unlimited@ CPU
+-- credit option is not supported on Dedicated Hosts. Before you start the
+-- instance, either change its CPU credit option to @standard@, or change
+-- its tenancy to @default@ or @dedicated@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html Stop and start your instance>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.StartInstances
+  ( -- * Creating a Request
+    StartInstances (..),
+    newStartInstances,
+
+    -- * Request Lenses
+    startInstances_additionalInfo,
+    startInstances_dryRun,
+    startInstances_instanceIds,
+
+    -- * Destructuring the Response
+    StartInstancesResponse (..),
+    newStartInstancesResponse,
+
+    -- * Response Lenses
+    startInstancesResponse_startingInstances,
+    startInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartInstances' smart constructor.
+data StartInstances = StartInstances'
+  { -- | Reserved.
+    additionalInfo :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the instances.
+    instanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalInfo', 'startInstances_additionalInfo' - Reserved.
+--
+-- 'dryRun', 'startInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceIds', 'startInstances_instanceIds' - The IDs of the instances.
+newStartInstances ::
+  StartInstances
+newStartInstances =
+  StartInstances'
+    { additionalInfo = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      instanceIds = Prelude.mempty
+    }
+
+-- | Reserved.
+startInstances_additionalInfo :: Lens.Lens' StartInstances (Prelude.Maybe Prelude.Text)
+startInstances_additionalInfo = Lens.lens (\StartInstances' {additionalInfo} -> additionalInfo) (\s@StartInstances' {} a -> s {additionalInfo = a} :: StartInstances)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+startInstances_dryRun :: Lens.Lens' StartInstances (Prelude.Maybe Prelude.Bool)
+startInstances_dryRun = Lens.lens (\StartInstances' {dryRun} -> dryRun) (\s@StartInstances' {} a -> s {dryRun = a} :: StartInstances)
+
+-- | The IDs of the instances.
+startInstances_instanceIds :: Lens.Lens' StartInstances [Prelude.Text]
+startInstances_instanceIds = Lens.lens (\StartInstances' {instanceIds} -> instanceIds) (\s@StartInstances' {} a -> s {instanceIds = a} :: StartInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StartInstances where
+  type
+    AWSResponse StartInstances =
+      StartInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          StartInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartInstances where
+  hashWithSalt _salt StartInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalInfo
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceIds
+
+instance Prelude.NFData StartInstances where
+  rnf StartInstances' {..} =
+    Prelude.rnf additionalInfo
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceIds
+
+instance Data.ToHeaders StartInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath StartInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartInstances where
+  toQuery StartInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("StartInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "AdditionalInfo" Data.=: additionalInfo,
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "InstanceId" instanceIds
+      ]
+
+-- | /See:/ 'newStartInstancesResponse' smart constructor.
+data StartInstancesResponse = StartInstancesResponse'
+  { -- | Information about the started instances.
+    startingInstances :: Prelude.Maybe [InstanceStateChange],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'startingInstances', 'startInstancesResponse_startingInstances' - Information about the started instances.
+--
+-- 'httpStatus', 'startInstancesResponse_httpStatus' - The response's http status code.
+newStartInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartInstancesResponse
+newStartInstancesResponse pHttpStatus_ =
+  StartInstancesResponse'
+    { startingInstances =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the started instances.
+startInstancesResponse_startingInstances :: Lens.Lens' StartInstancesResponse (Prelude.Maybe [InstanceStateChange])
+startInstancesResponse_startingInstances = Lens.lens (\StartInstancesResponse' {startingInstances} -> startingInstances) (\s@StartInstancesResponse' {} a -> s {startingInstances = a} :: StartInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+startInstancesResponse_httpStatus :: Lens.Lens' StartInstancesResponse Prelude.Int
+startInstancesResponse_httpStatus = Lens.lens (\StartInstancesResponse' {httpStatus} -> httpStatus) (\s@StartInstancesResponse' {} a -> s {httpStatus = a} :: StartInstancesResponse)
+
+instance Prelude.NFData StartInstancesResponse where
+  rnf StartInstancesResponse' {..} =
+    Prelude.rnf startingInstances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/StartNetworkInsightsAccessScopeAnalysis.hs b/gen/Amazonka/EC2/StartNetworkInsightsAccessScopeAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/StartNetworkInsightsAccessScopeAnalysis.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.StartNetworkInsightsAccessScopeAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts analyzing the specified Network Access Scope.
+module Amazonka.EC2.StartNetworkInsightsAccessScopeAnalysis
+  ( -- * Creating a Request
+    StartNetworkInsightsAccessScopeAnalysis (..),
+    newStartNetworkInsightsAccessScopeAnalysis,
+
+    -- * Request Lenses
+    startNetworkInsightsAccessScopeAnalysis_dryRun,
+    startNetworkInsightsAccessScopeAnalysis_tagSpecifications,
+    startNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId,
+    startNetworkInsightsAccessScopeAnalysis_clientToken,
+
+    -- * Destructuring the Response
+    StartNetworkInsightsAccessScopeAnalysisResponse (..),
+    newStartNetworkInsightsAccessScopeAnalysisResponse,
+
+    -- * Response Lenses
+    startNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysis,
+    startNetworkInsightsAccessScopeAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartNetworkInsightsAccessScopeAnalysis' smart constructor.
+data StartNetworkInsightsAccessScopeAnalysis = StartNetworkInsightsAccessScopeAnalysis'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The tags to apply.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartNetworkInsightsAccessScopeAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'startNetworkInsightsAccessScopeAnalysis_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'tagSpecifications', 'startNetworkInsightsAccessScopeAnalysis_tagSpecifications' - The tags to apply.
+--
+-- 'networkInsightsAccessScopeId', 'startNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+--
+-- 'clientToken', 'startNetworkInsightsAccessScopeAnalysis_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+newStartNetworkInsightsAccessScopeAnalysis ::
+  -- | 'networkInsightsAccessScopeId'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  StartNetworkInsightsAccessScopeAnalysis
+newStartNetworkInsightsAccessScopeAnalysis
+  pNetworkInsightsAccessScopeId_
+  pClientToken_ =
+    StartNetworkInsightsAccessScopeAnalysis'
+      { dryRun =
+          Prelude.Nothing,
+        tagSpecifications =
+          Prelude.Nothing,
+        networkInsightsAccessScopeId =
+          pNetworkInsightsAccessScopeId_,
+        clientToken = pClientToken_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+startNetworkInsightsAccessScopeAnalysis_dryRun :: Lens.Lens' StartNetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Bool)
+startNetworkInsightsAccessScopeAnalysis_dryRun = Lens.lens (\StartNetworkInsightsAccessScopeAnalysis' {dryRun} -> dryRun) (\s@StartNetworkInsightsAccessScopeAnalysis' {} a -> s {dryRun = a} :: StartNetworkInsightsAccessScopeAnalysis)
+
+-- | The tags to apply.
+startNetworkInsightsAccessScopeAnalysis_tagSpecifications :: Lens.Lens' StartNetworkInsightsAccessScopeAnalysis (Prelude.Maybe [TagSpecification])
+startNetworkInsightsAccessScopeAnalysis_tagSpecifications = Lens.lens (\StartNetworkInsightsAccessScopeAnalysis' {tagSpecifications} -> tagSpecifications) (\s@StartNetworkInsightsAccessScopeAnalysis' {} a -> s {tagSpecifications = a} :: StartNetworkInsightsAccessScopeAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Network Access Scope.
+startNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId :: Lens.Lens' StartNetworkInsightsAccessScopeAnalysis Prelude.Text
+startNetworkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId = Lens.lens (\StartNetworkInsightsAccessScopeAnalysis' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@StartNetworkInsightsAccessScopeAnalysis' {} a -> s {networkInsightsAccessScopeId = a} :: StartNetworkInsightsAccessScopeAnalysis)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+startNetworkInsightsAccessScopeAnalysis_clientToken :: Lens.Lens' StartNetworkInsightsAccessScopeAnalysis Prelude.Text
+startNetworkInsightsAccessScopeAnalysis_clientToken = Lens.lens (\StartNetworkInsightsAccessScopeAnalysis' {clientToken} -> clientToken) (\s@StartNetworkInsightsAccessScopeAnalysis' {} a -> s {clientToken = a} :: StartNetworkInsightsAccessScopeAnalysis)
+
+instance
+  Core.AWSRequest
+    StartNetworkInsightsAccessScopeAnalysis
+  where
+  type
+    AWSResponse
+      StartNetworkInsightsAccessScopeAnalysis =
+      StartNetworkInsightsAccessScopeAnalysisResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          StartNetworkInsightsAccessScopeAnalysisResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAccessScopeAnalysis")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartNetworkInsightsAccessScopeAnalysis
+  where
+  hashWithSalt
+    _salt
+    StartNetworkInsightsAccessScopeAnalysis' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` tagSpecifications
+        `Prelude.hashWithSalt` networkInsightsAccessScopeId
+        `Prelude.hashWithSalt` clientToken
+
+instance
+  Prelude.NFData
+    StartNetworkInsightsAccessScopeAnalysis
+  where
+  rnf StartNetworkInsightsAccessScopeAnalysis' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance
+  Data.ToHeaders
+    StartNetworkInsightsAccessScopeAnalysis
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    StartNetworkInsightsAccessScopeAnalysis
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    StartNetworkInsightsAccessScopeAnalysis
+  where
+  toQuery StartNetworkInsightsAccessScopeAnalysis' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "StartNetworkInsightsAccessScopeAnalysis" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "NetworkInsightsAccessScopeId"
+          Data.=: networkInsightsAccessScopeId,
+        "ClientToken" Data.=: clientToken
+      ]
+
+-- | /See:/ 'newStartNetworkInsightsAccessScopeAnalysisResponse' smart constructor.
+data StartNetworkInsightsAccessScopeAnalysisResponse = StartNetworkInsightsAccessScopeAnalysisResponse'
+  { -- | The Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysis :: Prelude.Maybe NetworkInsightsAccessScopeAnalysis,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartNetworkInsightsAccessScopeAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAccessScopeAnalysis', 'startNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysis' - The Network Access Scope analysis.
+--
+-- 'httpStatus', 'startNetworkInsightsAccessScopeAnalysisResponse_httpStatus' - The response's http status code.
+newStartNetworkInsightsAccessScopeAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartNetworkInsightsAccessScopeAnalysisResponse
+newStartNetworkInsightsAccessScopeAnalysisResponse
+  pHttpStatus_ =
+    StartNetworkInsightsAccessScopeAnalysisResponse'
+      { networkInsightsAccessScopeAnalysis =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The Network Access Scope analysis.
+startNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysis :: Lens.Lens' StartNetworkInsightsAccessScopeAnalysisResponse (Prelude.Maybe NetworkInsightsAccessScopeAnalysis)
+startNetworkInsightsAccessScopeAnalysisResponse_networkInsightsAccessScopeAnalysis = Lens.lens (\StartNetworkInsightsAccessScopeAnalysisResponse' {networkInsightsAccessScopeAnalysis} -> networkInsightsAccessScopeAnalysis) (\s@StartNetworkInsightsAccessScopeAnalysisResponse' {} a -> s {networkInsightsAccessScopeAnalysis = a} :: StartNetworkInsightsAccessScopeAnalysisResponse)
+
+-- | The response's http status code.
+startNetworkInsightsAccessScopeAnalysisResponse_httpStatus :: Lens.Lens' StartNetworkInsightsAccessScopeAnalysisResponse Prelude.Int
+startNetworkInsightsAccessScopeAnalysisResponse_httpStatus = Lens.lens (\StartNetworkInsightsAccessScopeAnalysisResponse' {httpStatus} -> httpStatus) (\s@StartNetworkInsightsAccessScopeAnalysisResponse' {} a -> s {httpStatus = a} :: StartNetworkInsightsAccessScopeAnalysisResponse)
+
+instance
+  Prelude.NFData
+    StartNetworkInsightsAccessScopeAnalysisResponse
+  where
+  rnf
+    StartNetworkInsightsAccessScopeAnalysisResponse' {..} =
+      Prelude.rnf networkInsightsAccessScopeAnalysis
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/StartNetworkInsightsAnalysis.hs b/gen/Amazonka/EC2/StartNetworkInsightsAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/StartNetworkInsightsAnalysis.hs
@@ -0,0 +1,268 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.StartNetworkInsightsAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts analyzing the specified path. If the path is reachable, the
+-- operation returns the shortest feasible path.
+module Amazonka.EC2.StartNetworkInsightsAnalysis
+  ( -- * Creating a Request
+    StartNetworkInsightsAnalysis (..),
+    newStartNetworkInsightsAnalysis,
+
+    -- * Request Lenses
+    startNetworkInsightsAnalysis_additionalAccounts,
+    startNetworkInsightsAnalysis_dryRun,
+    startNetworkInsightsAnalysis_filterInArns,
+    startNetworkInsightsAnalysis_tagSpecifications,
+    startNetworkInsightsAnalysis_networkInsightsPathId,
+    startNetworkInsightsAnalysis_clientToken,
+
+    -- * Destructuring the Response
+    StartNetworkInsightsAnalysisResponse (..),
+    newStartNetworkInsightsAnalysisResponse,
+
+    -- * Response Lenses
+    startNetworkInsightsAnalysisResponse_networkInsightsAnalysis,
+    startNetworkInsightsAnalysisResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartNetworkInsightsAnalysis' smart constructor.
+data StartNetworkInsightsAnalysis = StartNetworkInsightsAnalysis'
+  { -- | The member accounts that contain resources that the path can traverse.
+    additionalAccounts :: Prelude.Maybe [Prelude.Text],
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Names (ARN) of the resources that the path must
+    -- traverse.
+    filterInArns :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to apply.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The ID of the path.
+    networkInsightsPathId :: Prelude.Text,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+    clientToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartNetworkInsightsAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalAccounts', 'startNetworkInsightsAnalysis_additionalAccounts' - The member accounts that contain resources that the path can traverse.
+--
+-- 'dryRun', 'startNetworkInsightsAnalysis_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'filterInArns', 'startNetworkInsightsAnalysis_filterInArns' - The Amazon Resource Names (ARN) of the resources that the path must
+-- traverse.
+--
+-- 'tagSpecifications', 'startNetworkInsightsAnalysis_tagSpecifications' - The tags to apply.
+--
+-- 'networkInsightsPathId', 'startNetworkInsightsAnalysis_networkInsightsPathId' - The ID of the path.
+--
+-- 'clientToken', 'startNetworkInsightsAnalysis_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+newStartNetworkInsightsAnalysis ::
+  -- | 'networkInsightsPathId'
+  Prelude.Text ->
+  -- | 'clientToken'
+  Prelude.Text ->
+  StartNetworkInsightsAnalysis
+newStartNetworkInsightsAnalysis
+  pNetworkInsightsPathId_
+  pClientToken_ =
+    StartNetworkInsightsAnalysis'
+      { additionalAccounts =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        filterInArns = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        networkInsightsPathId =
+          pNetworkInsightsPathId_,
+        clientToken = pClientToken_
+      }
+
+-- | The member accounts that contain resources that the path can traverse.
+startNetworkInsightsAnalysis_additionalAccounts :: Lens.Lens' StartNetworkInsightsAnalysis (Prelude.Maybe [Prelude.Text])
+startNetworkInsightsAnalysis_additionalAccounts = Lens.lens (\StartNetworkInsightsAnalysis' {additionalAccounts} -> additionalAccounts) (\s@StartNetworkInsightsAnalysis' {} a -> s {additionalAccounts = a} :: StartNetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+startNetworkInsightsAnalysis_dryRun :: Lens.Lens' StartNetworkInsightsAnalysis (Prelude.Maybe Prelude.Bool)
+startNetworkInsightsAnalysis_dryRun = Lens.lens (\StartNetworkInsightsAnalysis' {dryRun} -> dryRun) (\s@StartNetworkInsightsAnalysis' {} a -> s {dryRun = a} :: StartNetworkInsightsAnalysis)
+
+-- | The Amazon Resource Names (ARN) of the resources that the path must
+-- traverse.
+startNetworkInsightsAnalysis_filterInArns :: Lens.Lens' StartNetworkInsightsAnalysis (Prelude.Maybe [Prelude.Text])
+startNetworkInsightsAnalysis_filterInArns = Lens.lens (\StartNetworkInsightsAnalysis' {filterInArns} -> filterInArns) (\s@StartNetworkInsightsAnalysis' {} a -> s {filterInArns = a} :: StartNetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to apply.
+startNetworkInsightsAnalysis_tagSpecifications :: Lens.Lens' StartNetworkInsightsAnalysis (Prelude.Maybe [TagSpecification])
+startNetworkInsightsAnalysis_tagSpecifications = Lens.lens (\StartNetworkInsightsAnalysis' {tagSpecifications} -> tagSpecifications) (\s@StartNetworkInsightsAnalysis' {} a -> s {tagSpecifications = a} :: StartNetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the path.
+startNetworkInsightsAnalysis_networkInsightsPathId :: Lens.Lens' StartNetworkInsightsAnalysis Prelude.Text
+startNetworkInsightsAnalysis_networkInsightsPathId = Lens.lens (\StartNetworkInsightsAnalysis' {networkInsightsPathId} -> networkInsightsPathId) (\s@StartNetworkInsightsAnalysis' {} a -> s {networkInsightsPathId = a} :: StartNetworkInsightsAnalysis)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to ensure idempotency>.
+startNetworkInsightsAnalysis_clientToken :: Lens.Lens' StartNetworkInsightsAnalysis Prelude.Text
+startNetworkInsightsAnalysis_clientToken = Lens.lens (\StartNetworkInsightsAnalysis' {clientToken} -> clientToken) (\s@StartNetworkInsightsAnalysis' {} a -> s {clientToken = a} :: StartNetworkInsightsAnalysis)
+
+instance Core.AWSRequest StartNetworkInsightsAnalysis where
+  type
+    AWSResponse StartNetworkInsightsAnalysis =
+      StartNetworkInsightsAnalysisResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          StartNetworkInsightsAnalysisResponse'
+            Prelude.<$> (x Data..@? "networkInsightsAnalysis")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartNetworkInsightsAnalysis
+  where
+  hashWithSalt _salt StartNetworkInsightsAnalysis' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalAccounts
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` filterInArns
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` networkInsightsPathId
+      `Prelude.hashWithSalt` clientToken
+
+instance Prelude.NFData StartNetworkInsightsAnalysis where
+  rnf StartNetworkInsightsAnalysis' {..} =
+    Prelude.rnf additionalAccounts
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf filterInArns
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf networkInsightsPathId
+      `Prelude.seq` Prelude.rnf clientToken
+
+instance Data.ToHeaders StartNetworkInsightsAnalysis where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath StartNetworkInsightsAnalysis where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartNetworkInsightsAnalysis where
+  toQuery StartNetworkInsightsAnalysis' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "StartNetworkInsightsAnalysis" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AdditionalAccount"
+              Prelude.<$> additionalAccounts
+          ),
+        "DryRun" Data.=: dryRun,
+        Data.toQuery
+          ( Data.toQueryList "FilterInArn"
+              Prelude.<$> filterInArns
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "NetworkInsightsPathId"
+          Data.=: networkInsightsPathId,
+        "ClientToken" Data.=: clientToken
+      ]
+
+-- | /See:/ 'newStartNetworkInsightsAnalysisResponse' smart constructor.
+data StartNetworkInsightsAnalysisResponse = StartNetworkInsightsAnalysisResponse'
+  { -- | Information about the network insights analysis.
+    networkInsightsAnalysis :: Prelude.Maybe NetworkInsightsAnalysis,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartNetworkInsightsAnalysisResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInsightsAnalysis', 'startNetworkInsightsAnalysisResponse_networkInsightsAnalysis' - Information about the network insights analysis.
+--
+-- 'httpStatus', 'startNetworkInsightsAnalysisResponse_httpStatus' - The response's http status code.
+newStartNetworkInsightsAnalysisResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartNetworkInsightsAnalysisResponse
+newStartNetworkInsightsAnalysisResponse pHttpStatus_ =
+  StartNetworkInsightsAnalysisResponse'
+    { networkInsightsAnalysis =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the network insights analysis.
+startNetworkInsightsAnalysisResponse_networkInsightsAnalysis :: Lens.Lens' StartNetworkInsightsAnalysisResponse (Prelude.Maybe NetworkInsightsAnalysis)
+startNetworkInsightsAnalysisResponse_networkInsightsAnalysis = Lens.lens (\StartNetworkInsightsAnalysisResponse' {networkInsightsAnalysis} -> networkInsightsAnalysis) (\s@StartNetworkInsightsAnalysisResponse' {} a -> s {networkInsightsAnalysis = a} :: StartNetworkInsightsAnalysisResponse)
+
+-- | The response's http status code.
+startNetworkInsightsAnalysisResponse_httpStatus :: Lens.Lens' StartNetworkInsightsAnalysisResponse Prelude.Int
+startNetworkInsightsAnalysisResponse_httpStatus = Lens.lens (\StartNetworkInsightsAnalysisResponse' {httpStatus} -> httpStatus) (\s@StartNetworkInsightsAnalysisResponse' {} a -> s {httpStatus = a} :: StartNetworkInsightsAnalysisResponse)
+
+instance
+  Prelude.NFData
+    StartNetworkInsightsAnalysisResponse
+  where
+  rnf StartNetworkInsightsAnalysisResponse' {..} =
+    Prelude.rnf networkInsightsAnalysis
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/StartVpcEndpointServicePrivateDnsVerification.hs b/gen/Amazonka/EC2/StartVpcEndpointServicePrivateDnsVerification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/StartVpcEndpointServicePrivateDnsVerification.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.StartVpcEndpointServicePrivateDnsVerification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Initiates the verification process to prove that the service provider
+-- owns the private DNS name domain for the endpoint service.
+--
+-- The service provider must successfully perform the verification before
+-- the consumer can use the name to access the service.
+--
+-- Before the service provider runs this command, they must add a record to
+-- the DNS server.
+module Amazonka.EC2.StartVpcEndpointServicePrivateDnsVerification
+  ( -- * Creating a Request
+    StartVpcEndpointServicePrivateDnsVerification (..),
+    newStartVpcEndpointServicePrivateDnsVerification,
+
+    -- * Request Lenses
+    startVpcEndpointServicePrivateDnsVerification_dryRun,
+    startVpcEndpointServicePrivateDnsVerification_serviceId,
+
+    -- * Destructuring the Response
+    StartVpcEndpointServicePrivateDnsVerificationResponse (..),
+    newStartVpcEndpointServicePrivateDnsVerificationResponse,
+
+    -- * Response Lenses
+    startVpcEndpointServicePrivateDnsVerificationResponse_returnValue,
+    startVpcEndpointServicePrivateDnsVerificationResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartVpcEndpointServicePrivateDnsVerification' smart constructor.
+data StartVpcEndpointServicePrivateDnsVerification = StartVpcEndpointServicePrivateDnsVerification'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the endpoint service.
+    serviceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartVpcEndpointServicePrivateDnsVerification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'startVpcEndpointServicePrivateDnsVerification_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'serviceId', 'startVpcEndpointServicePrivateDnsVerification_serviceId' - The ID of the endpoint service.
+newStartVpcEndpointServicePrivateDnsVerification ::
+  -- | 'serviceId'
+  Prelude.Text ->
+  StartVpcEndpointServicePrivateDnsVerification
+newStartVpcEndpointServicePrivateDnsVerification
+  pServiceId_ =
+    StartVpcEndpointServicePrivateDnsVerification'
+      { dryRun =
+          Prelude.Nothing,
+        serviceId = pServiceId_
+      }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+startVpcEndpointServicePrivateDnsVerification_dryRun :: Lens.Lens' StartVpcEndpointServicePrivateDnsVerification (Prelude.Maybe Prelude.Bool)
+startVpcEndpointServicePrivateDnsVerification_dryRun = Lens.lens (\StartVpcEndpointServicePrivateDnsVerification' {dryRun} -> dryRun) (\s@StartVpcEndpointServicePrivateDnsVerification' {} a -> s {dryRun = a} :: StartVpcEndpointServicePrivateDnsVerification)
+
+-- | The ID of the endpoint service.
+startVpcEndpointServicePrivateDnsVerification_serviceId :: Lens.Lens' StartVpcEndpointServicePrivateDnsVerification Prelude.Text
+startVpcEndpointServicePrivateDnsVerification_serviceId = Lens.lens (\StartVpcEndpointServicePrivateDnsVerification' {serviceId} -> serviceId) (\s@StartVpcEndpointServicePrivateDnsVerification' {} a -> s {serviceId = a} :: StartVpcEndpointServicePrivateDnsVerification)
+
+instance
+  Core.AWSRequest
+    StartVpcEndpointServicePrivateDnsVerification
+  where
+  type
+    AWSResponse
+      StartVpcEndpointServicePrivateDnsVerification =
+      StartVpcEndpointServicePrivateDnsVerificationResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          StartVpcEndpointServicePrivateDnsVerificationResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    StartVpcEndpointServicePrivateDnsVerification
+  where
+  hashWithSalt
+    _salt
+    StartVpcEndpointServicePrivateDnsVerification' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` serviceId
+
+instance
+  Prelude.NFData
+    StartVpcEndpointServicePrivateDnsVerification
+  where
+  rnf
+    StartVpcEndpointServicePrivateDnsVerification' {..} =
+      Prelude.rnf dryRun
+        `Prelude.seq` Prelude.rnf serviceId
+
+instance
+  Data.ToHeaders
+    StartVpcEndpointServicePrivateDnsVerification
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    StartVpcEndpointServicePrivateDnsVerification
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    StartVpcEndpointServicePrivateDnsVerification
+  where
+  toQuery
+    StartVpcEndpointServicePrivateDnsVerification' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "StartVpcEndpointServicePrivateDnsVerification" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "ServiceId" Data.=: serviceId
+        ]
+
+-- | /See:/ 'newStartVpcEndpointServicePrivateDnsVerificationResponse' smart constructor.
+data StartVpcEndpointServicePrivateDnsVerificationResponse = StartVpcEndpointServicePrivateDnsVerificationResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+    returnValue :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartVpcEndpointServicePrivateDnsVerificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'returnValue', 'startVpcEndpointServicePrivateDnsVerificationResponse_returnValue' - Returns @true@ if the request succeeds; otherwise, it returns an error.
+--
+-- 'httpStatus', 'startVpcEndpointServicePrivateDnsVerificationResponse_httpStatus' - The response's http status code.
+newStartVpcEndpointServicePrivateDnsVerificationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartVpcEndpointServicePrivateDnsVerificationResponse
+newStartVpcEndpointServicePrivateDnsVerificationResponse
+  pHttpStatus_ =
+    StartVpcEndpointServicePrivateDnsVerificationResponse'
+      { returnValue =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, it returns an error.
+startVpcEndpointServicePrivateDnsVerificationResponse_returnValue :: Lens.Lens' StartVpcEndpointServicePrivateDnsVerificationResponse (Prelude.Maybe Prelude.Bool)
+startVpcEndpointServicePrivateDnsVerificationResponse_returnValue = Lens.lens (\StartVpcEndpointServicePrivateDnsVerificationResponse' {returnValue} -> returnValue) (\s@StartVpcEndpointServicePrivateDnsVerificationResponse' {} a -> s {returnValue = a} :: StartVpcEndpointServicePrivateDnsVerificationResponse)
+
+-- | The response's http status code.
+startVpcEndpointServicePrivateDnsVerificationResponse_httpStatus :: Lens.Lens' StartVpcEndpointServicePrivateDnsVerificationResponse Prelude.Int
+startVpcEndpointServicePrivateDnsVerificationResponse_httpStatus = Lens.lens (\StartVpcEndpointServicePrivateDnsVerificationResponse' {httpStatus} -> httpStatus) (\s@StartVpcEndpointServicePrivateDnsVerificationResponse' {} a -> s {httpStatus = a} :: StartVpcEndpointServicePrivateDnsVerificationResponse)
+
+instance
+  Prelude.NFData
+    StartVpcEndpointServicePrivateDnsVerificationResponse
+  where
+  rnf
+    StartVpcEndpointServicePrivateDnsVerificationResponse' {..} =
+      Prelude.rnf returnValue
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/StopInstances.hs b/gen/Amazonka/EC2/StopInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/StopInstances.hs
@@ -0,0 +1,291 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.StopInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops an Amazon EBS-backed instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html Stop and start your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- You can use the Stop action to hibernate an instance if the instance is
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#enabling-hibernation enabled for hibernation>
+-- and it meets the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites hibernation prerequisites>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 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 instance, Amazon EC2 charges a one-minute
+-- minimum for instance usage, and thereafter charges per second for
+-- instance usage.
+--
+-- 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
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#hibernate-spot-instances Hibernating interrupted Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 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.
+--
+-- 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
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance lifecycle>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 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
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html Troubleshoot stopping your instance>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.StopInstances
+  ( -- * Creating a Request
+    StopInstances (..),
+    newStopInstances,
+
+    -- * Request Lenses
+    stopInstances_dryRun,
+    stopInstances_force,
+    stopInstances_hibernate,
+    stopInstances_instanceIds,
+
+    -- * Destructuring the Response
+    StopInstancesResponse (..),
+    newStopInstancesResponse,
+
+    -- * Response Lenses
+    stopInstancesResponse_stoppingInstances,
+    stopInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopInstances' smart constructor.
+data StopInstances = StopInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | Forces the instances to stop. The instances do not have an opportunity
+    -- to flush file system caches or file system metadata. If you use this
+    -- option, you must perform file system check and repair procedures. This
+    -- option is not recommended for Windows instances.
+    --
+    -- Default: @false@
+    force :: Prelude.Maybe Prelude.Bool,
+    -- | Hibernates the instance if the instance was enabled for hibernation at
+    -- launch. If the instance cannot hibernate successfully, a normal shutdown
+    -- occurs. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: @false@
+    hibernate :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the instances.
+    instanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'stopInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'force', 'stopInstances_force' - Forces the instances to stop. The instances do not have an opportunity
+-- to flush file system caches or file system metadata. If you use this
+-- option, you must perform file system check and repair procedures. This
+-- option is not recommended for Windows instances.
+--
+-- Default: @false@
+--
+-- 'hibernate', 'stopInstances_hibernate' - Hibernates the instance if the instance was enabled for hibernation at
+-- launch. If the instance cannot hibernate successfully, a normal shutdown
+-- occurs. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @false@
+--
+-- 'instanceIds', 'stopInstances_instanceIds' - The IDs of the instances.
+newStopInstances ::
+  StopInstances
+newStopInstances =
+  StopInstances'
+    { dryRun = Prelude.Nothing,
+      force = Prelude.Nothing,
+      hibernate = Prelude.Nothing,
+      instanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+stopInstances_dryRun :: Lens.Lens' StopInstances (Prelude.Maybe Prelude.Bool)
+stopInstances_dryRun = Lens.lens (\StopInstances' {dryRun} -> dryRun) (\s@StopInstances' {} a -> s {dryRun = a} :: StopInstances)
+
+-- | Forces the instances to stop. The instances do not have an opportunity
+-- to flush file system caches or file system metadata. If you use this
+-- option, you must perform file system check and repair procedures. This
+-- option is not recommended for Windows instances.
+--
+-- Default: @false@
+stopInstances_force :: Lens.Lens' StopInstances (Prelude.Maybe Prelude.Bool)
+stopInstances_force = Lens.lens (\StopInstances' {force} -> force) (\s@StopInstances' {} a -> s {force = a} :: StopInstances)
+
+-- | Hibernates the instance if the instance was enabled for hibernation at
+-- launch. If the instance cannot hibernate successfully, a normal shutdown
+-- occurs. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: @false@
+stopInstances_hibernate :: Lens.Lens' StopInstances (Prelude.Maybe Prelude.Bool)
+stopInstances_hibernate = Lens.lens (\StopInstances' {hibernate} -> hibernate) (\s@StopInstances' {} a -> s {hibernate = a} :: StopInstances)
+
+-- | The IDs of the instances.
+stopInstances_instanceIds :: Lens.Lens' StopInstances [Prelude.Text]
+stopInstances_instanceIds = Lens.lens (\StopInstances' {instanceIds} -> instanceIds) (\s@StopInstances' {} a -> s {instanceIds = a} :: StopInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest StopInstances where
+  type
+    AWSResponse StopInstances =
+      StopInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          StopInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopInstances where
+  hashWithSalt _salt StopInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` force
+      `Prelude.hashWithSalt` hibernate
+      `Prelude.hashWithSalt` instanceIds
+
+instance Prelude.NFData StopInstances where
+  rnf StopInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf force
+      `Prelude.seq` Prelude.rnf hibernate
+      `Prelude.seq` Prelude.rnf instanceIds
+
+instance Data.ToHeaders StopInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath StopInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopInstances where
+  toQuery StopInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("StopInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Force" Data.=: force,
+        "Hibernate" Data.=: hibernate,
+        Data.toQueryList "InstanceId" instanceIds
+      ]
+
+-- | /See:/ 'newStopInstancesResponse' smart constructor.
+data StopInstancesResponse = StopInstancesResponse'
+  { -- | Information about the stopped instances.
+    stoppingInstances :: Prelude.Maybe [InstanceStateChange],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stoppingInstances', 'stopInstancesResponse_stoppingInstances' - Information about the stopped instances.
+--
+-- 'httpStatus', 'stopInstancesResponse_httpStatus' - The response's http status code.
+newStopInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopInstancesResponse
+newStopInstancesResponse pHttpStatus_ =
+  StopInstancesResponse'
+    { stoppingInstances =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the stopped instances.
+stopInstancesResponse_stoppingInstances :: Lens.Lens' StopInstancesResponse (Prelude.Maybe [InstanceStateChange])
+stopInstancesResponse_stoppingInstances = Lens.lens (\StopInstancesResponse' {stoppingInstances} -> stoppingInstances) (\s@StopInstancesResponse' {} a -> s {stoppingInstances = a} :: StopInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+stopInstancesResponse_httpStatus :: Lens.Lens' StopInstancesResponse Prelude.Int
+stopInstancesResponse_httpStatus = Lens.lens (\StopInstancesResponse' {httpStatus} -> httpStatus) (\s@StopInstancesResponse' {} a -> s {httpStatus = a} :: StopInstancesResponse)
+
+instance Prelude.NFData StopInstancesResponse where
+  rnf StopInstancesResponse' {..} =
+    Prelude.rnf stoppingInstances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/TerminateClientVpnConnections.hs b/gen/Amazonka/EC2/TerminateClientVpnConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/TerminateClientVpnConnections.hs
@@ -0,0 +1,257 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.TerminateClientVpnConnections
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- 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.
+module Amazonka.EC2.TerminateClientVpnConnections
+  ( -- * Creating a Request
+    TerminateClientVpnConnections (..),
+    newTerminateClientVpnConnections,
+
+    -- * Request Lenses
+    terminateClientVpnConnections_connectionId,
+    terminateClientVpnConnections_dryRun,
+    terminateClientVpnConnections_username,
+    terminateClientVpnConnections_clientVpnEndpointId,
+
+    -- * Destructuring the Response
+    TerminateClientVpnConnectionsResponse (..),
+    newTerminateClientVpnConnectionsResponse,
+
+    -- * Response Lenses
+    terminateClientVpnConnectionsResponse_clientVpnEndpointId,
+    terminateClientVpnConnectionsResponse_connectionStatuses,
+    terminateClientVpnConnectionsResponse_username,
+    terminateClientVpnConnectionsResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTerminateClientVpnConnections' smart constructor.
+data TerminateClientVpnConnections = TerminateClientVpnConnections'
+  { -- | The ID of the client connection to be terminated.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    username :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint to which the client is connected.
+    clientVpnEndpointId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateClientVpnConnections' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionId', 'terminateClientVpnConnections_connectionId' - The ID of the client connection to be terminated.
+--
+-- 'dryRun', 'terminateClientVpnConnections_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'username', 'terminateClientVpnConnections_username' - 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.
+--
+-- 'clientVpnEndpointId', 'terminateClientVpnConnections_clientVpnEndpointId' - The ID of the Client VPN endpoint to which the client is connected.
+newTerminateClientVpnConnections ::
+  -- | 'clientVpnEndpointId'
+  Prelude.Text ->
+  TerminateClientVpnConnections
+newTerminateClientVpnConnections
+  pClientVpnEndpointId_ =
+    TerminateClientVpnConnections'
+      { connectionId =
+          Prelude.Nothing,
+        dryRun = Prelude.Nothing,
+        username = Prelude.Nothing,
+        clientVpnEndpointId = pClientVpnEndpointId_
+      }
+
+-- | The ID of the client connection to be terminated.
+terminateClientVpnConnections_connectionId :: Lens.Lens' TerminateClientVpnConnections (Prelude.Maybe Prelude.Text)
+terminateClientVpnConnections_connectionId = Lens.lens (\TerminateClientVpnConnections' {connectionId} -> connectionId) (\s@TerminateClientVpnConnections' {} a -> s {connectionId = a} :: TerminateClientVpnConnections)
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+terminateClientVpnConnections_dryRun :: Lens.Lens' TerminateClientVpnConnections (Prelude.Maybe Prelude.Bool)
+terminateClientVpnConnections_dryRun = Lens.lens (\TerminateClientVpnConnections' {dryRun} -> dryRun) (\s@TerminateClientVpnConnections' {} a -> s {dryRun = a} :: TerminateClientVpnConnections)
+
+-- | 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.
+terminateClientVpnConnections_username :: Lens.Lens' TerminateClientVpnConnections (Prelude.Maybe Prelude.Text)
+terminateClientVpnConnections_username = Lens.lens (\TerminateClientVpnConnections' {username} -> username) (\s@TerminateClientVpnConnections' {} a -> s {username = a} :: TerminateClientVpnConnections)
+
+-- | The ID of the Client VPN endpoint to which the client is connected.
+terminateClientVpnConnections_clientVpnEndpointId :: Lens.Lens' TerminateClientVpnConnections Prelude.Text
+terminateClientVpnConnections_clientVpnEndpointId = Lens.lens (\TerminateClientVpnConnections' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@TerminateClientVpnConnections' {} a -> s {clientVpnEndpointId = a} :: TerminateClientVpnConnections)
+
+instance
+  Core.AWSRequest
+    TerminateClientVpnConnections
+  where
+  type
+    AWSResponse TerminateClientVpnConnections =
+      TerminateClientVpnConnectionsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          TerminateClientVpnConnectionsResponse'
+            Prelude.<$> (x Data..@? "clientVpnEndpointId")
+            Prelude.<*> ( x
+                            Data..@? "connectionStatuses"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (x Data..@? "username")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    TerminateClientVpnConnections
+  where
+  hashWithSalt _salt TerminateClientVpnConnections' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionId
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` username
+      `Prelude.hashWithSalt` clientVpnEndpointId
+
+instance Prelude.NFData TerminateClientVpnConnections where
+  rnf TerminateClientVpnConnections' {..} =
+    Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf username
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+
+instance Data.ToHeaders TerminateClientVpnConnections where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath TerminateClientVpnConnections where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TerminateClientVpnConnections where
+  toQuery TerminateClientVpnConnections' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ( "TerminateClientVpnConnections" ::
+                      Prelude.ByteString
+                  ),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "ConnectionId" Data.=: connectionId,
+        "DryRun" Data.=: dryRun,
+        "Username" Data.=: username,
+        "ClientVpnEndpointId" Data.=: clientVpnEndpointId
+      ]
+
+-- | /See:/ 'newTerminateClientVpnConnectionsResponse' smart constructor.
+data TerminateClientVpnConnectionsResponse = TerminateClientVpnConnectionsResponse'
+  { -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the client connections.
+    connectionStatuses :: Prelude.Maybe [TerminateConnectionStatus],
+    -- | The user who established the terminated client connections.
+    username :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateClientVpnConnectionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientVpnEndpointId', 'terminateClientVpnConnectionsResponse_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+--
+-- 'connectionStatuses', 'terminateClientVpnConnectionsResponse_connectionStatuses' - The current state of the client connections.
+--
+-- 'username', 'terminateClientVpnConnectionsResponse_username' - The user who established the terminated client connections.
+--
+-- 'httpStatus', 'terminateClientVpnConnectionsResponse_httpStatus' - The response's http status code.
+newTerminateClientVpnConnectionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TerminateClientVpnConnectionsResponse
+newTerminateClientVpnConnectionsResponse pHttpStatus_ =
+  TerminateClientVpnConnectionsResponse'
+    { clientVpnEndpointId =
+        Prelude.Nothing,
+      connectionStatuses = Prelude.Nothing,
+      username = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the Client VPN endpoint.
+terminateClientVpnConnectionsResponse_clientVpnEndpointId :: Lens.Lens' TerminateClientVpnConnectionsResponse (Prelude.Maybe Prelude.Text)
+terminateClientVpnConnectionsResponse_clientVpnEndpointId = Lens.lens (\TerminateClientVpnConnectionsResponse' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@TerminateClientVpnConnectionsResponse' {} a -> s {clientVpnEndpointId = a} :: TerminateClientVpnConnectionsResponse)
+
+-- | The current state of the client connections.
+terminateClientVpnConnectionsResponse_connectionStatuses :: Lens.Lens' TerminateClientVpnConnectionsResponse (Prelude.Maybe [TerminateConnectionStatus])
+terminateClientVpnConnectionsResponse_connectionStatuses = Lens.lens (\TerminateClientVpnConnectionsResponse' {connectionStatuses} -> connectionStatuses) (\s@TerminateClientVpnConnectionsResponse' {} a -> s {connectionStatuses = a} :: TerminateClientVpnConnectionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user who established the terminated client connections.
+terminateClientVpnConnectionsResponse_username :: Lens.Lens' TerminateClientVpnConnectionsResponse (Prelude.Maybe Prelude.Text)
+terminateClientVpnConnectionsResponse_username = Lens.lens (\TerminateClientVpnConnectionsResponse' {username} -> username) (\s@TerminateClientVpnConnectionsResponse' {} a -> s {username = a} :: TerminateClientVpnConnectionsResponse)
+
+-- | The response's http status code.
+terminateClientVpnConnectionsResponse_httpStatus :: Lens.Lens' TerminateClientVpnConnectionsResponse Prelude.Int
+terminateClientVpnConnectionsResponse_httpStatus = Lens.lens (\TerminateClientVpnConnectionsResponse' {httpStatus} -> httpStatus) (\s@TerminateClientVpnConnectionsResponse' {} a -> s {httpStatus = a} :: TerminateClientVpnConnectionsResponse)
+
+instance
+  Prelude.NFData
+    TerminateClientVpnConnectionsResponse
+  where
+  rnf TerminateClientVpnConnectionsResponse' {..} =
+    Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf connectionStatuses
+      `Prelude.seq` Prelude.rnf username
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/TerminateInstances.hs b/gen/Amazonka/EC2/TerminateInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/TerminateInstances.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.TerminateInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Shuts down the specified instances. This operation is idempotent; if you
+-- terminate an instance more than once, each call succeeds.
+--
+-- If you specify multiple instances and the request fails (for example,
+-- because of a single incorrect instance ID), none of the instances are
+-- terminated.
+--
+-- If you terminate multiple instances across multiple Availability Zones,
+-- and one or more of the specified instances are enabled for termination
+-- protection, the request fails with the following results:
+--
+-- -   The specified instances that are in the same Availability Zone as
+--     the protected instance are not terminated.
+--
+-- -   The specified instances that are in different Availability Zones,
+--     where no other specified instances are protected, are successfully
+--     terminated.
+--
+-- For example, say you have the following instances:
+--
+-- -   Instance A: @us-east-1a@; Not protected
+--
+-- -   Instance B: @us-east-1a@; Not protected
+--
+-- -   Instance C: @us-east-1b@; Protected
+--
+-- -   Instance D: @us-east-1b@; not protected
+--
+-- If you attempt to terminate all of these instances in the same request,
+-- the request reports failure with the following results:
+--
+-- -   Instance A and Instance B are successfully terminated because none
+--     of the specified instances in @us-east-1a@ are enabled for
+--     termination protection.
+--
+-- -   Instance C and Instance D fail to terminate because at least one of
+--     the specified instances in @us-east-1b@ (Instance C) is enabled for
+--     termination protection.
+--
+-- Terminated instances remain visible after termination (for approximately
+-- one hour).
+--
+-- By default, Amazon EC2 deletes all EBS volumes that were attached when
+-- the instance launched. Volumes attached after instance launch continue
+-- running.
+--
+-- 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 @DeleteOnTermination@ block device mapping parameter set to @true@
+-- are automatically deleted. For more information about the differences
+-- between stopping and terminating instances, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance lifecycle>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For more information about troubleshooting, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html Troubleshooting terminating your instance>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.TerminateInstances
+  ( -- * Creating a Request
+    TerminateInstances (..),
+    newTerminateInstances,
+
+    -- * Request Lenses
+    terminateInstances_dryRun,
+    terminateInstances_instanceIds,
+
+    -- * Destructuring the Response
+    TerminateInstancesResponse (..),
+    newTerminateInstancesResponse,
+
+    -- * Response Lenses
+    terminateInstancesResponse_terminatingInstances,
+    terminateInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTerminateInstances' smart constructor.
+data TerminateInstances = TerminateInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the instances.
+    --
+    -- Constraints: Up to 1000 instance IDs. We recommend breaking up this
+    -- request into smaller batches.
+    instanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'terminateInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceIds', 'terminateInstances_instanceIds' - The IDs of the instances.
+--
+-- Constraints: Up to 1000 instance IDs. We recommend breaking up this
+-- request into smaller batches.
+newTerminateInstances ::
+  TerminateInstances
+newTerminateInstances =
+  TerminateInstances'
+    { dryRun = Prelude.Nothing,
+      instanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+terminateInstances_dryRun :: Lens.Lens' TerminateInstances (Prelude.Maybe Prelude.Bool)
+terminateInstances_dryRun = Lens.lens (\TerminateInstances' {dryRun} -> dryRun) (\s@TerminateInstances' {} a -> s {dryRun = a} :: TerminateInstances)
+
+-- | The IDs of the instances.
+--
+-- Constraints: Up to 1000 instance IDs. We recommend breaking up this
+-- request into smaller batches.
+terminateInstances_instanceIds :: Lens.Lens' TerminateInstances [Prelude.Text]
+terminateInstances_instanceIds = Lens.lens (\TerminateInstances' {instanceIds} -> instanceIds) (\s@TerminateInstances' {} a -> s {instanceIds = a} :: TerminateInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TerminateInstances where
+  type
+    AWSResponse TerminateInstances =
+      TerminateInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          TerminateInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TerminateInstances where
+  hashWithSalt _salt TerminateInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceIds
+
+instance Prelude.NFData TerminateInstances where
+  rnf TerminateInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceIds
+
+instance Data.ToHeaders TerminateInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath TerminateInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TerminateInstances where
+  toQuery TerminateInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("TerminateInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "InstanceId" instanceIds
+      ]
+
+-- | /See:/ 'newTerminateInstancesResponse' smart constructor.
+data TerminateInstancesResponse = TerminateInstancesResponse'
+  { -- | Information about the terminated instances.
+    terminatingInstances :: Prelude.Maybe [InstanceStateChange],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'terminatingInstances', 'terminateInstancesResponse_terminatingInstances' - Information about the terminated instances.
+--
+-- 'httpStatus', 'terminateInstancesResponse_httpStatus' - The response's http status code.
+newTerminateInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TerminateInstancesResponse
+newTerminateInstancesResponse pHttpStatus_ =
+  TerminateInstancesResponse'
+    { terminatingInstances =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the terminated instances.
+terminateInstancesResponse_terminatingInstances :: Lens.Lens' TerminateInstancesResponse (Prelude.Maybe [InstanceStateChange])
+terminateInstancesResponse_terminatingInstances = Lens.lens (\TerminateInstancesResponse' {terminatingInstances} -> terminatingInstances) (\s@TerminateInstancesResponse' {} a -> s {terminatingInstances = a} :: TerminateInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+terminateInstancesResponse_httpStatus :: Lens.Lens' TerminateInstancesResponse Prelude.Int
+terminateInstancesResponse_httpStatus = Lens.lens (\TerminateInstancesResponse' {httpStatus} -> httpStatus) (\s@TerminateInstancesResponse' {} a -> s {httpStatus = a} :: TerminateInstancesResponse)
+
+instance Prelude.NFData TerminateInstancesResponse where
+  rnf TerminateInstancesResponse' {..} =
+    Prelude.rnf terminatingInstances
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/Types.hs b/gen/Amazonka/EC2/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types.hs
@@ -0,0 +1,8078 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+
+    -- * Re-exported Types
+    module Amazonka.EC2.Internal,
+
+    -- * AcceleratorManufacturer
+    AcceleratorManufacturer (..),
+
+    -- * AcceleratorName
+    AcceleratorName (..),
+
+    -- * AcceleratorType
+    AcceleratorType (..),
+
+    -- * AccountAttributeName
+    AccountAttributeName (..),
+
+    -- * ActivityStatus
+    ActivityStatus (..),
+
+    -- * AddressAttributeName
+    AddressAttributeName (..),
+
+    -- * AddressFamily
+    AddressFamily (..),
+
+    -- * AddressStatus
+    AddressStatus (..),
+
+    -- * AddressTransferStatus
+    AddressTransferStatus (..),
+
+    -- * Affinity
+    Affinity (..),
+
+    -- * AllocationState
+    AllocationState (..),
+
+    -- * AllocationStrategy
+    AllocationStrategy (..),
+
+    -- * AllocationType
+    AllocationType (..),
+
+    -- * AllowsMultipleInstanceTypes
+    AllowsMultipleInstanceTypes (..),
+
+    -- * AnalysisStatus
+    AnalysisStatus (..),
+
+    -- * ApplianceModeSupportValue
+    ApplianceModeSupportValue (..),
+
+    -- * ArchitectureType
+    ArchitectureType (..),
+
+    -- * ArchitectureValues
+    ArchitectureValues (..),
+
+    -- * AssociatedNetworkType
+    AssociatedNetworkType (..),
+
+    -- * AssociationStatusCode
+    AssociationStatusCode (..),
+
+    -- * AttachmentStatus
+    AttachmentStatus (..),
+
+    -- * AutoAcceptSharedAssociationsValue
+    AutoAcceptSharedAssociationsValue (..),
+
+    -- * AutoAcceptSharedAttachmentsValue
+    AutoAcceptSharedAttachmentsValue (..),
+
+    -- * AutoPlacement
+    AutoPlacement (..),
+
+    -- * AvailabilityZoneOptInStatus
+    AvailabilityZoneOptInStatus (..),
+
+    -- * AvailabilityZoneState
+    AvailabilityZoneState (..),
+
+    -- * BareMetal
+    BareMetal (..),
+
+    -- * BatchState
+    BatchState (..),
+
+    -- * BgpStatus
+    BgpStatus (..),
+
+    -- * BootModeType
+    BootModeType (..),
+
+    -- * BootModeValues
+    BootModeValues (..),
+
+    -- * BundleTaskState
+    BundleTaskState (..),
+
+    -- * BurstablePerformance
+    BurstablePerformance (..),
+
+    -- * ByoipCidrState
+    ByoipCidrState (..),
+
+    -- * CancelBatchErrorCode
+    CancelBatchErrorCode (..),
+
+    -- * CancelSpotInstanceRequestState
+    CancelSpotInstanceRequestState (..),
+
+    -- * CapacityReservationFleetState
+    CapacityReservationFleetState (..),
+
+    -- * CapacityReservationInstancePlatform
+    CapacityReservationInstancePlatform (..),
+
+    -- * CapacityReservationPreference
+    CapacityReservationPreference (..),
+
+    -- * CapacityReservationState
+    CapacityReservationState (..),
+
+    -- * CapacityReservationTenancy
+    CapacityReservationTenancy (..),
+
+    -- * CarrierGatewayState
+    CarrierGatewayState (..),
+
+    -- * ClientCertificateRevocationListStatusCode
+    ClientCertificateRevocationListStatusCode (..),
+
+    -- * ClientVpnAuthenticationType
+    ClientVpnAuthenticationType (..),
+
+    -- * ClientVpnAuthorizationRuleStatusCode
+    ClientVpnAuthorizationRuleStatusCode (..),
+
+    -- * ClientVpnConnectionStatusCode
+    ClientVpnConnectionStatusCode (..),
+
+    -- * ClientVpnEndpointAttributeStatusCode
+    ClientVpnEndpointAttributeStatusCode (..),
+
+    -- * ClientVpnEndpointStatusCode
+    ClientVpnEndpointStatusCode (..),
+
+    -- * ClientVpnRouteStatusCode
+    ClientVpnRouteStatusCode (..),
+
+    -- * ConnectionNotificationState
+    ConnectionNotificationState (..),
+
+    -- * ConnectionNotificationType
+    ConnectionNotificationType (..),
+
+    -- * ConnectivityType
+    ConnectivityType (..),
+
+    -- * ContainerFormat
+    ContainerFormat (..),
+
+    -- * ConversionTaskState
+    ConversionTaskState (..),
+
+    -- * CopyTagsFromSource
+    CopyTagsFromSource (..),
+
+    -- * CpuManufacturer
+    CpuManufacturer (..),
+
+    -- * CurrencyCodeValues
+    CurrencyCodeValues (..),
+
+    -- * DatafeedSubscriptionState
+    DatafeedSubscriptionState (..),
+
+    -- * DefaultRouteTableAssociationValue
+    DefaultRouteTableAssociationValue (..),
+
+    -- * DefaultRouteTablePropagationValue
+    DefaultRouteTablePropagationValue (..),
+
+    -- * DefaultTargetCapacityType
+    DefaultTargetCapacityType (..),
+
+    -- * DeleteFleetErrorCode
+    DeleteFleetErrorCode (..),
+
+    -- * DeleteQueuedReservedInstancesErrorCode
+    DeleteQueuedReservedInstancesErrorCode (..),
+
+    -- * DestinationFileFormat
+    DestinationFileFormat (..),
+
+    -- * DeviceTrustProviderType
+    DeviceTrustProviderType (..),
+
+    -- * DeviceType
+    DeviceType (..),
+
+    -- * DiskImageFormat
+    DiskImageFormat (..),
+
+    -- * DiskType
+    DiskType (..),
+
+    -- * DnsNameState
+    DnsNameState (..),
+
+    -- * DnsRecordIpType
+    DnsRecordIpType (..),
+
+    -- * DnsSupportValue
+    DnsSupportValue (..),
+
+    -- * DomainType
+    DomainType (..),
+
+    -- * DynamicRoutingValue
+    DynamicRoutingValue (..),
+
+    -- * EbsEncryptionSupport
+    EbsEncryptionSupport (..),
+
+    -- * EbsNvmeSupport
+    EbsNvmeSupport (..),
+
+    -- * EbsOptimizedSupport
+    EbsOptimizedSupport (..),
+
+    -- * ElasticGpuState
+    ElasticGpuState (..),
+
+    -- * ElasticGpuStatus
+    ElasticGpuStatus (..),
+
+    -- * EnaSupport
+    EnaSupport (..),
+
+    -- * EndDateType
+    EndDateType (..),
+
+    -- * EphemeralNvmeSupport
+    EphemeralNvmeSupport (..),
+
+    -- * EventCode
+    EventCode (..),
+
+    -- * EventType
+    EventType (..),
+
+    -- * ExcessCapacityTerminationPolicy
+    ExcessCapacityTerminationPolicy (..),
+
+    -- * ExportEnvironment
+    ExportEnvironment (..),
+
+    -- * ExportTaskState
+    ExportTaskState (..),
+
+    -- * FastLaunchResourceType
+    FastLaunchResourceType (..),
+
+    -- * FastLaunchStateCode
+    FastLaunchStateCode (..),
+
+    -- * FastSnapshotRestoreStateCode
+    FastSnapshotRestoreStateCode (..),
+
+    -- * FindingsFound
+    FindingsFound (..),
+
+    -- * FleetActivityStatus
+    FleetActivityStatus (..),
+
+    -- * FleetCapacityReservationTenancy
+    FleetCapacityReservationTenancy (..),
+
+    -- * FleetCapacityReservationUsageStrategy
+    FleetCapacityReservationUsageStrategy (..),
+
+    -- * FleetEventType
+    FleetEventType (..),
+
+    -- * FleetExcessCapacityTerminationPolicy
+    FleetExcessCapacityTerminationPolicy (..),
+
+    -- * FleetInstanceMatchCriteria
+    FleetInstanceMatchCriteria (..),
+
+    -- * FleetOnDemandAllocationStrategy
+    FleetOnDemandAllocationStrategy (..),
+
+    -- * FleetReplacementStrategy
+    FleetReplacementStrategy (..),
+
+    -- * FleetStateCode
+    FleetStateCode (..),
+
+    -- * FleetType
+    FleetType (..),
+
+    -- * FlowLogsResourceType
+    FlowLogsResourceType (..),
+
+    -- * FpgaImageAttributeName
+    FpgaImageAttributeName (..),
+
+    -- * FpgaImageStateCode
+    FpgaImageStateCode (..),
+
+    -- * GatewayAssociationState
+    GatewayAssociationState (..),
+
+    -- * GatewayType
+    GatewayType (..),
+
+    -- * HostRecovery
+    HostRecovery (..),
+
+    -- * HostTenancy
+    HostTenancy (..),
+
+    -- * HostnameType
+    HostnameType (..),
+
+    -- * HttpTokensState
+    HttpTokensState (..),
+
+    -- * HypervisorType
+    HypervisorType (..),
+
+    -- * IamInstanceProfileAssociationState
+    IamInstanceProfileAssociationState (..),
+
+    -- * Igmpv2SupportValue
+    Igmpv2SupportValue (..),
+
+    -- * ImageAttributeName
+    ImageAttributeName (..),
+
+    -- * ImageState
+    ImageState (..),
+
+    -- * ImageTypeValues
+    ImageTypeValues (..),
+
+    -- * ImdsSupportValues
+    ImdsSupportValues (..),
+
+    -- * InstanceAttributeName
+    InstanceAttributeName (..),
+
+    -- * InstanceAutoRecoveryState
+    InstanceAutoRecoveryState (..),
+
+    -- * InstanceEventWindowState
+    InstanceEventWindowState (..),
+
+    -- * InstanceGeneration
+    InstanceGeneration (..),
+
+    -- * InstanceHealthStatus
+    InstanceHealthStatus (..),
+
+    -- * InstanceInterruptionBehavior
+    InstanceInterruptionBehavior (..),
+
+    -- * InstanceLifecycle
+    InstanceLifecycle (..),
+
+    -- * InstanceLifecycleType
+    InstanceLifecycleType (..),
+
+    -- * InstanceMatchCriteria
+    InstanceMatchCriteria (..),
+
+    -- * InstanceMetadataEndpointState
+    InstanceMetadataEndpointState (..),
+
+    -- * InstanceMetadataOptionsState
+    InstanceMetadataOptionsState (..),
+
+    -- * InstanceMetadataProtocolState
+    InstanceMetadataProtocolState (..),
+
+    -- * InstanceMetadataTagsState
+    InstanceMetadataTagsState (..),
+
+    -- * InstanceStateName
+    InstanceStateName (..),
+
+    -- * InstanceStorageEncryptionSupport
+    InstanceStorageEncryptionSupport (..),
+
+    -- * InstanceType
+    InstanceType (..),
+
+    -- * InstanceTypeHypervisor
+    InstanceTypeHypervisor (..),
+
+    -- * InterfacePermissionType
+    InterfacePermissionType (..),
+
+    -- * InterfaceProtocolType
+    InterfaceProtocolType (..),
+
+    -- * IpAddressType
+    IpAddressType (..),
+
+    -- * IpamAddressHistoryResourceType
+    IpamAddressHistoryResourceType (..),
+
+    -- * IpamComplianceStatus
+    IpamComplianceStatus (..),
+
+    -- * IpamManagementState
+    IpamManagementState (..),
+
+    -- * IpamOverlapStatus
+    IpamOverlapStatus (..),
+
+    -- * IpamPoolAllocationResourceType
+    IpamPoolAllocationResourceType (..),
+
+    -- * IpamPoolAwsService
+    IpamPoolAwsService (..),
+
+    -- * IpamPoolCidrFailureCode
+    IpamPoolCidrFailureCode (..),
+
+    -- * IpamPoolCidrState
+    IpamPoolCidrState (..),
+
+    -- * IpamPoolState
+    IpamPoolState (..),
+
+    -- * IpamResourceType
+    IpamResourceType (..),
+
+    -- * IpamScopeState
+    IpamScopeState (..),
+
+    -- * IpamScopeType
+    IpamScopeType (..),
+
+    -- * IpamState
+    IpamState (..),
+
+    -- * Ipv6SupportValue
+    Ipv6SupportValue (..),
+
+    -- * KeyFormat
+    KeyFormat (..),
+
+    -- * KeyType
+    KeyType (..),
+
+    -- * LaunchTemplateAutoRecoveryState
+    LaunchTemplateAutoRecoveryState (..),
+
+    -- * LaunchTemplateErrorCode
+    LaunchTemplateErrorCode (..),
+
+    -- * LaunchTemplateHttpTokensState
+    LaunchTemplateHttpTokensState (..),
+
+    -- * LaunchTemplateInstanceMetadataEndpointState
+    LaunchTemplateInstanceMetadataEndpointState (..),
+
+    -- * LaunchTemplateInstanceMetadataOptionsState
+    LaunchTemplateInstanceMetadataOptionsState (..),
+
+    -- * LaunchTemplateInstanceMetadataProtocolIpv6
+    LaunchTemplateInstanceMetadataProtocolIpv6 (..),
+
+    -- * LaunchTemplateInstanceMetadataTagsState
+    LaunchTemplateInstanceMetadataTagsState (..),
+
+    -- * ListingState
+    ListingState (..),
+
+    -- * ListingStatus
+    ListingStatus (..),
+
+    -- * LocalGatewayRouteState
+    LocalGatewayRouteState (..),
+
+    -- * LocalGatewayRouteTableMode
+    LocalGatewayRouteTableMode (..),
+
+    -- * LocalGatewayRouteType
+    LocalGatewayRouteType (..),
+
+    -- * LocalStorage
+    LocalStorage (..),
+
+    -- * LocalStorageType
+    LocalStorageType (..),
+
+    -- * LocationType
+    LocationType (..),
+
+    -- * LogDestinationType
+    LogDestinationType (..),
+
+    -- * MarketType
+    MarketType (..),
+
+    -- * MembershipType
+    MembershipType (..),
+
+    -- * MetricType
+    MetricType (..),
+
+    -- * ModifyAvailabilityZoneOptInStatus
+    ModifyAvailabilityZoneOptInStatus (..),
+
+    -- * MonitoringState
+    MonitoringState (..),
+
+    -- * MoveStatus
+    MoveStatus (..),
+
+    -- * MulticastSupportValue
+    MulticastSupportValue (..),
+
+    -- * NatGatewayState
+    NatGatewayState (..),
+
+    -- * NetworkInterfaceAttribute
+    NetworkInterfaceAttribute (..),
+
+    -- * NetworkInterfaceCreationType
+    NetworkInterfaceCreationType (..),
+
+    -- * NetworkInterfacePermissionStateCode
+    NetworkInterfacePermissionStateCode (..),
+
+    -- * NetworkInterfaceStatus
+    NetworkInterfaceStatus (..),
+
+    -- * NetworkInterfaceType
+    NetworkInterfaceType (..),
+
+    -- * OfferingClassType
+    OfferingClassType (..),
+
+    -- * OfferingTypeValues
+    OfferingTypeValues (..),
+
+    -- * OnDemandAllocationStrategy
+    OnDemandAllocationStrategy (..),
+
+    -- * OperationType
+    OperationType (..),
+
+    -- * PartitionLoadFrequency
+    PartitionLoadFrequency (..),
+
+    -- * PayerResponsibility
+    PayerResponsibility (..),
+
+    -- * PaymentOption
+    PaymentOption (..),
+
+    -- * PeriodType
+    PeriodType (..),
+
+    -- * PermissionGroup
+    PermissionGroup (..),
+
+    -- * PlacementGroupState
+    PlacementGroupState (..),
+
+    -- * PlacementGroupStrategy
+    PlacementGroupStrategy (..),
+
+    -- * PlacementStrategy
+    PlacementStrategy (..),
+
+    -- * PlatformValues
+    PlatformValues (..),
+
+    -- * PrefixListState
+    PrefixListState (..),
+
+    -- * PrincipalType
+    PrincipalType (..),
+
+    -- * ProductCodeValues
+    ProductCodeValues (..),
+
+    -- * Protocol
+    Protocol (..),
+
+    -- * ProtocolValue
+    ProtocolValue (..),
+
+    -- * RIProductDescription
+    RIProductDescription (..),
+
+    -- * RecurringChargeFrequency
+    RecurringChargeFrequency (..),
+
+    -- * ReplaceRootVolumeTaskState
+    ReplaceRootVolumeTaskState (..),
+
+    -- * ReplacementStrategy
+    ReplacementStrategy (..),
+
+    -- * ReportInstanceReasonCodes
+    ReportInstanceReasonCodes (..),
+
+    -- * ReportStatusType
+    ReportStatusType (..),
+
+    -- * ReservationState
+    ReservationState (..),
+
+    -- * ReservedInstanceState
+    ReservedInstanceState (..),
+
+    -- * ResetFpgaImageAttributeName
+    ResetFpgaImageAttributeName (..),
+
+    -- * ResetImageAttributeName
+    ResetImageAttributeName (..),
+
+    -- * ResourceType
+    ResourceType (..),
+
+    -- * RootDeviceType
+    RootDeviceType (..),
+
+    -- * RouteOrigin
+    RouteOrigin (..),
+
+    -- * RouteState
+    RouteState (..),
+
+    -- * RouteTableAssociationStateCode
+    RouteTableAssociationStateCode (..),
+
+    -- * RuleAction
+    RuleAction (..),
+
+    -- * Scope
+    Scope (..),
+
+    -- * SelfServicePortal
+    SelfServicePortal (..),
+
+    -- * ServiceConnectivityType
+    ServiceConnectivityType (..),
+
+    -- * ServiceState
+    ServiceState (..),
+
+    -- * ServiceType
+    ServiceType (..),
+
+    -- * ShutdownBehavior
+    ShutdownBehavior (..),
+
+    -- * SnapshotAttributeName
+    SnapshotAttributeName (..),
+
+    -- * SnapshotState
+    SnapshotState (..),
+
+    -- * SpotAllocationStrategy
+    SpotAllocationStrategy (..),
+
+    -- * SpotInstanceInterruptionBehavior
+    SpotInstanceInterruptionBehavior (..),
+
+    -- * SpotInstanceState
+    SpotInstanceState (..),
+
+    -- * SpotInstanceType
+    SpotInstanceType (..),
+
+    -- * SpreadLevel
+    SpreadLevel (..),
+
+    -- * State
+    State (..),
+
+    -- * StaticSourcesSupportValue
+    StaticSourcesSupportValue (..),
+
+    -- * StatisticType
+    StatisticType (..),
+
+    -- * StatusName
+    StatusName (..),
+
+    -- * StatusType
+    StatusType (..),
+
+    -- * StorageTier
+    StorageTier (..),
+
+    -- * SubnetCidrBlockStateCode
+    SubnetCidrBlockStateCode (..),
+
+    -- * SubnetCidrReservationType
+    SubnetCidrReservationType (..),
+
+    -- * SubnetState
+    SubnetState (..),
+
+    -- * SummaryStatus
+    SummaryStatus (..),
+
+    -- * TargetCapacityUnitType
+    TargetCapacityUnitType (..),
+
+    -- * TargetStorageTier
+    TargetStorageTier (..),
+
+    -- * TelemetryStatus
+    TelemetryStatus (..),
+
+    -- * Tenancy
+    Tenancy (..),
+
+    -- * TieringOperationStatus
+    TieringOperationStatus (..),
+
+    -- * TpmSupportValues
+    TpmSupportValues (..),
+
+    -- * TrafficDirection
+    TrafficDirection (..),
+
+    -- * TrafficMirrorFilterRuleField
+    TrafficMirrorFilterRuleField (..),
+
+    -- * TrafficMirrorNetworkService
+    TrafficMirrorNetworkService (..),
+
+    -- * TrafficMirrorRuleAction
+    TrafficMirrorRuleAction (..),
+
+    -- * TrafficMirrorSessionField
+    TrafficMirrorSessionField (..),
+
+    -- * TrafficMirrorTargetType
+    TrafficMirrorTargetType (..),
+
+    -- * TrafficType
+    TrafficType (..),
+
+    -- * TransitGatewayAssociationState
+    TransitGatewayAssociationState (..),
+
+    -- * TransitGatewayAttachmentResourceType
+    TransitGatewayAttachmentResourceType (..),
+
+    -- * TransitGatewayAttachmentState
+    TransitGatewayAttachmentState (..),
+
+    -- * TransitGatewayConnectPeerState
+    TransitGatewayConnectPeerState (..),
+
+    -- * TransitGatewayMulitcastDomainAssociationState
+    TransitGatewayMulitcastDomainAssociationState (..),
+
+    -- * TransitGatewayMulticastDomainState
+    TransitGatewayMulticastDomainState (..),
+
+    -- * TransitGatewayPolicyTableState
+    TransitGatewayPolicyTableState (..),
+
+    -- * TransitGatewayPrefixListReferenceState
+    TransitGatewayPrefixListReferenceState (..),
+
+    -- * TransitGatewayPropagationState
+    TransitGatewayPropagationState (..),
+
+    -- * TransitGatewayRouteState
+    TransitGatewayRouteState (..),
+
+    -- * TransitGatewayRouteTableAnnouncementDirection
+    TransitGatewayRouteTableAnnouncementDirection (..),
+
+    -- * TransitGatewayRouteTableAnnouncementState
+    TransitGatewayRouteTableAnnouncementState (..),
+
+    -- * TransitGatewayRouteTableState
+    TransitGatewayRouteTableState (..),
+
+    -- * TransitGatewayRouteType
+    TransitGatewayRouteType (..),
+
+    -- * TransitGatewayState
+    TransitGatewayState (..),
+
+    -- * TransportProtocol
+    TransportProtocol (..),
+
+    -- * TrustProviderType
+    TrustProviderType (..),
+
+    -- * TunnelInsideIpVersion
+    TunnelInsideIpVersion (..),
+
+    -- * UnlimitedSupportedInstanceFamily
+    UnlimitedSupportedInstanceFamily (..),
+
+    -- * UnsuccessfulInstanceCreditSpecificationErrorCode
+    UnsuccessfulInstanceCreditSpecificationErrorCode (..),
+
+    -- * UsageClassType
+    UsageClassType (..),
+
+    -- * UserTrustProviderType
+    UserTrustProviderType (..),
+
+    -- * VerifiedAccessEndpointAttachmentType
+    VerifiedAccessEndpointAttachmentType (..),
+
+    -- * VerifiedAccessEndpointProtocol
+    VerifiedAccessEndpointProtocol (..),
+
+    -- * VerifiedAccessEndpointStatusCode
+    VerifiedAccessEndpointStatusCode (..),
+
+    -- * VerifiedAccessEndpointType
+    VerifiedAccessEndpointType (..),
+
+    -- * VerifiedAccessLogDeliveryStatusCode
+    VerifiedAccessLogDeliveryStatusCode (..),
+
+    -- * VirtualizationType
+    VirtualizationType (..),
+
+    -- * VolumeAttachmentState
+    VolumeAttachmentState (..),
+
+    -- * VolumeAttributeName
+    VolumeAttributeName (..),
+
+    -- * VolumeModificationState
+    VolumeModificationState (..),
+
+    -- * VolumeState
+    VolumeState (..),
+
+    -- * VolumeStatusInfoStatus
+    VolumeStatusInfoStatus (..),
+
+    -- * VolumeStatusName
+    VolumeStatusName (..),
+
+    -- * VolumeType
+    VolumeType (..),
+
+    -- * VpcAttributeName
+    VpcAttributeName (..),
+
+    -- * VpcCidrBlockStateCode
+    VpcCidrBlockStateCode (..),
+
+    -- * VpcEndpointType
+    VpcEndpointType (..),
+
+    -- * VpcPeeringConnectionStateReasonCode
+    VpcPeeringConnectionStateReasonCode (..),
+
+    -- * VpcState
+    VpcState (..),
+
+    -- * VpcTenancy
+    VpcTenancy (..),
+
+    -- * VpnEcmpSupportValue
+    VpnEcmpSupportValue (..),
+
+    -- * VpnProtocol
+    VpnProtocol (..),
+
+    -- * VpnState
+    VpnState (..),
+
+    -- * VpnStaticRouteSource
+    VpnStaticRouteSource (..),
+
+    -- * WeekDay
+    WeekDay (..),
+
+    -- * AcceleratorCount
+    AcceleratorCount (..),
+    newAcceleratorCount,
+    acceleratorCount_max,
+    acceleratorCount_min,
+
+    -- * AcceleratorCountRequest
+    AcceleratorCountRequest (..),
+    newAcceleratorCountRequest,
+    acceleratorCountRequest_max,
+    acceleratorCountRequest_min,
+
+    -- * AcceleratorTotalMemoryMiB
+    AcceleratorTotalMemoryMiB (..),
+    newAcceleratorTotalMemoryMiB,
+    acceleratorTotalMemoryMiB_max,
+    acceleratorTotalMemoryMiB_min,
+
+    -- * AcceleratorTotalMemoryMiBRequest
+    AcceleratorTotalMemoryMiBRequest (..),
+    newAcceleratorTotalMemoryMiBRequest,
+    acceleratorTotalMemoryMiBRequest_max,
+    acceleratorTotalMemoryMiBRequest_min,
+
+    -- * AccessScopeAnalysisFinding
+    AccessScopeAnalysisFinding (..),
+    newAccessScopeAnalysisFinding,
+    accessScopeAnalysisFinding_findingComponents,
+    accessScopeAnalysisFinding_findingId,
+    accessScopeAnalysisFinding_networkInsightsAccessScopeAnalysisId,
+    accessScopeAnalysisFinding_networkInsightsAccessScopeId,
+
+    -- * AccessScopePath
+    AccessScopePath (..),
+    newAccessScopePath,
+    accessScopePath_destination,
+    accessScopePath_source,
+    accessScopePath_throughResources,
+
+    -- * AccessScopePathRequest
+    AccessScopePathRequest (..),
+    newAccessScopePathRequest,
+    accessScopePathRequest_destination,
+    accessScopePathRequest_source,
+    accessScopePathRequest_throughResources,
+
+    -- * AccountAttribute
+    AccountAttribute (..),
+    newAccountAttribute,
+    accountAttribute_attributeName,
+    accountAttribute_attributeValues,
+
+    -- * AccountAttributeValue
+    AccountAttributeValue (..),
+    newAccountAttributeValue,
+    accountAttributeValue_attributeValue,
+
+    -- * ActiveInstance
+    ActiveInstance (..),
+    newActiveInstance,
+    activeInstance_instanceHealth,
+    activeInstance_instanceId,
+    activeInstance_instanceType,
+    activeInstance_spotInstanceRequestId,
+
+    -- * AddIpamOperatingRegion
+    AddIpamOperatingRegion (..),
+    newAddIpamOperatingRegion,
+    addIpamOperatingRegion_regionName,
+
+    -- * AddPrefixListEntry
+    AddPrefixListEntry (..),
+    newAddPrefixListEntry,
+    addPrefixListEntry_description,
+    addPrefixListEntry_cidr,
+
+    -- * AddedPrincipal
+    AddedPrincipal (..),
+    newAddedPrincipal,
+    addedPrincipal_principal,
+    addedPrincipal_principalType,
+    addedPrincipal_serviceId,
+    addedPrincipal_servicePermissionId,
+
+    -- * AdditionalDetail
+    AdditionalDetail (..),
+    newAdditionalDetail,
+    additionalDetail_additionalDetailType,
+    additionalDetail_component,
+
+    -- * Address
+    Address (..),
+    newAddress,
+    address_allocationId,
+    address_associationId,
+    address_carrierIp,
+    address_customerOwnedIp,
+    address_customerOwnedIpv4Pool,
+    address_domain,
+    address_instanceId,
+    address_networkBorderGroup,
+    address_networkInterfaceId,
+    address_networkInterfaceOwnerId,
+    address_privateIpAddress,
+    address_publicIp,
+    address_publicIpv4Pool,
+    address_tags,
+
+    -- * AddressAttribute
+    AddressAttribute (..),
+    newAddressAttribute,
+    addressAttribute_allocationId,
+    addressAttribute_ptrRecord,
+    addressAttribute_ptrRecordUpdate,
+    addressAttribute_publicIp,
+
+    -- * AddressTransfer
+    AddressTransfer (..),
+    newAddressTransfer,
+    addressTransfer_addressTransferStatus,
+    addressTransfer_allocationId,
+    addressTransfer_publicIp,
+    addressTransfer_transferAccountId,
+    addressTransfer_transferOfferAcceptedTimestamp,
+    addressTransfer_transferOfferExpirationTimestamp,
+
+    -- * AllowedPrincipal
+    AllowedPrincipal (..),
+    newAllowedPrincipal,
+    allowedPrincipal_principal,
+    allowedPrincipal_principalType,
+    allowedPrincipal_serviceId,
+    allowedPrincipal_servicePermissionId,
+    allowedPrincipal_tags,
+
+    -- * AlternatePathHint
+    AlternatePathHint (..),
+    newAlternatePathHint,
+    alternatePathHint_componentArn,
+    alternatePathHint_componentId,
+
+    -- * AnalysisAclRule
+    AnalysisAclRule (..),
+    newAnalysisAclRule,
+    analysisAclRule_cidr,
+    analysisAclRule_egress,
+    analysisAclRule_portRange,
+    analysisAclRule_protocol,
+    analysisAclRule_ruleAction,
+    analysisAclRule_ruleNumber,
+
+    -- * AnalysisComponent
+    AnalysisComponent (..),
+    newAnalysisComponent,
+    analysisComponent_arn,
+    analysisComponent_id,
+    analysisComponent_name,
+
+    -- * AnalysisLoadBalancerListener
+    AnalysisLoadBalancerListener (..),
+    newAnalysisLoadBalancerListener,
+    analysisLoadBalancerListener_instancePort,
+    analysisLoadBalancerListener_loadBalancerPort,
+
+    -- * AnalysisLoadBalancerTarget
+    AnalysisLoadBalancerTarget (..),
+    newAnalysisLoadBalancerTarget,
+    analysisLoadBalancerTarget_address,
+    analysisLoadBalancerTarget_availabilityZone,
+    analysisLoadBalancerTarget_instance,
+    analysisLoadBalancerTarget_port,
+
+    -- * AnalysisPacketHeader
+    AnalysisPacketHeader (..),
+    newAnalysisPacketHeader,
+    analysisPacketHeader_destinationAddresses,
+    analysisPacketHeader_destinationPortRanges,
+    analysisPacketHeader_protocol,
+    analysisPacketHeader_sourceAddresses,
+    analysisPacketHeader_sourcePortRanges,
+
+    -- * AnalysisRouteTableRoute
+    AnalysisRouteTableRoute (..),
+    newAnalysisRouteTableRoute,
+    analysisRouteTableRoute_destinationCidr,
+    analysisRouteTableRoute_destinationPrefixListId,
+    analysisRouteTableRoute_egressOnlyInternetGatewayId,
+    analysisRouteTableRoute_gatewayId,
+    analysisRouteTableRoute_instanceId,
+    analysisRouteTableRoute_natGatewayId,
+    analysisRouteTableRoute_networkInterfaceId,
+    analysisRouteTableRoute_origin,
+    analysisRouteTableRoute_state,
+    analysisRouteTableRoute_transitGatewayId,
+    analysisRouteTableRoute_vpcPeeringConnectionId,
+
+    -- * AnalysisSecurityGroupRule
+    AnalysisSecurityGroupRule (..),
+    newAnalysisSecurityGroupRule,
+    analysisSecurityGroupRule_cidr,
+    analysisSecurityGroupRule_direction,
+    analysisSecurityGroupRule_portRange,
+    analysisSecurityGroupRule_prefixListId,
+    analysisSecurityGroupRule_protocol,
+    analysisSecurityGroupRule_securityGroupId,
+
+    -- * AssignedPrivateIpAddress
+    AssignedPrivateIpAddress (..),
+    newAssignedPrivateIpAddress,
+    assignedPrivateIpAddress_privateIpAddress,
+
+    -- * AssociatedRole
+    AssociatedRole (..),
+    newAssociatedRole,
+    associatedRole_associatedRoleArn,
+    associatedRole_certificateS3BucketName,
+    associatedRole_certificateS3ObjectKey,
+    associatedRole_encryptionKmsKeyId,
+
+    -- * AssociatedTargetNetwork
+    AssociatedTargetNetwork (..),
+    newAssociatedTargetNetwork,
+    associatedTargetNetwork_networkId,
+    associatedTargetNetwork_networkType,
+
+    -- * AssociationStatus
+    AssociationStatus (..),
+    newAssociationStatus,
+    associationStatus_code,
+    associationStatus_message,
+
+    -- * AthenaIntegration
+    AthenaIntegration (..),
+    newAthenaIntegration,
+    athenaIntegration_partitionEndDate,
+    athenaIntegration_partitionStartDate,
+    athenaIntegration_integrationResultS3DestinationArn,
+    athenaIntegration_partitionLoadFrequency,
+
+    -- * AttachmentEnaSrdSpecification
+    AttachmentEnaSrdSpecification (..),
+    newAttachmentEnaSrdSpecification,
+    attachmentEnaSrdSpecification_enaSrdEnabled,
+    attachmentEnaSrdSpecification_enaSrdUdpSpecification,
+
+    -- * AttachmentEnaSrdUdpSpecification
+    AttachmentEnaSrdUdpSpecification (..),
+    newAttachmentEnaSrdUdpSpecification,
+    attachmentEnaSrdUdpSpecification_enaSrdUdpEnabled,
+
+    -- * AttributeBooleanValue
+    AttributeBooleanValue (..),
+    newAttributeBooleanValue,
+    attributeBooleanValue_value,
+
+    -- * AttributeValue
+    AttributeValue (..),
+    newAttributeValue,
+    attributeValue_value,
+
+    -- * AuthorizationRule
+    AuthorizationRule (..),
+    newAuthorizationRule,
+    authorizationRule_accessAll,
+    authorizationRule_clientVpnEndpointId,
+    authorizationRule_description,
+    authorizationRule_destinationCidr,
+    authorizationRule_groupId,
+    authorizationRule_status,
+
+    -- * AvailabilityZone
+    AvailabilityZone (..),
+    newAvailabilityZone,
+    availabilityZone_groupName,
+    availabilityZone_messages,
+    availabilityZone_networkBorderGroup,
+    availabilityZone_optInStatus,
+    availabilityZone_parentZoneId,
+    availabilityZone_parentZoneName,
+    availabilityZone_regionName,
+    availabilityZone_state,
+    availabilityZone_zoneId,
+    availabilityZone_zoneName,
+    availabilityZone_zoneType,
+
+    -- * AvailabilityZoneMessage
+    AvailabilityZoneMessage (..),
+    newAvailabilityZoneMessage,
+    availabilityZoneMessage_message,
+
+    -- * AvailableCapacity
+    AvailableCapacity (..),
+    newAvailableCapacity,
+    availableCapacity_availableInstanceCapacity,
+    availableCapacity_availableVCpus,
+
+    -- * BaselineEbsBandwidthMbps
+    BaselineEbsBandwidthMbps (..),
+    newBaselineEbsBandwidthMbps,
+    baselineEbsBandwidthMbps_max,
+    baselineEbsBandwidthMbps_min,
+
+    -- * BaselineEbsBandwidthMbpsRequest
+    BaselineEbsBandwidthMbpsRequest (..),
+    newBaselineEbsBandwidthMbpsRequest,
+    baselineEbsBandwidthMbpsRequest_max,
+    baselineEbsBandwidthMbpsRequest_min,
+
+    -- * BlobAttributeValue
+    BlobAttributeValue (..),
+    newBlobAttributeValue,
+    blobAttributeValue_value,
+
+    -- * BlockDeviceMapping
+    BlockDeviceMapping (..),
+    newBlockDeviceMapping,
+    blockDeviceMapping_ebs,
+    blockDeviceMapping_noDevice,
+    blockDeviceMapping_virtualName,
+    blockDeviceMapping_deviceName,
+
+    -- * BundleTask
+    BundleTask (..),
+    newBundleTask,
+    bundleTask_bundleTaskError,
+    bundleTask_bundleId,
+    bundleTask_instanceId,
+    bundleTask_progress,
+    bundleTask_startTime,
+    bundleTask_state,
+    bundleTask_storage,
+    bundleTask_updateTime,
+
+    -- * BundleTaskError
+    BundleTaskError (..),
+    newBundleTaskError,
+    bundleTaskError_code,
+    bundleTaskError_message,
+
+    -- * ByoipCidr
+    ByoipCidr (..),
+    newByoipCidr,
+    byoipCidr_cidr,
+    byoipCidr_description,
+    byoipCidr_state,
+    byoipCidr_statusMessage,
+
+    -- * CancelCapacityReservationFleetError
+    CancelCapacityReservationFleetError (..),
+    newCancelCapacityReservationFleetError,
+    cancelCapacityReservationFleetError_code,
+    cancelCapacityReservationFleetError_message,
+
+    -- * CancelSpotFleetRequestsError
+    CancelSpotFleetRequestsError (..),
+    newCancelSpotFleetRequestsError,
+    cancelSpotFleetRequestsError_code,
+    cancelSpotFleetRequestsError_message,
+
+    -- * CancelSpotFleetRequestsErrorItem
+    CancelSpotFleetRequestsErrorItem (..),
+    newCancelSpotFleetRequestsErrorItem,
+    cancelSpotFleetRequestsErrorItem_error,
+    cancelSpotFleetRequestsErrorItem_spotFleetRequestId,
+
+    -- * CancelSpotFleetRequestsSuccessItem
+    CancelSpotFleetRequestsSuccessItem (..),
+    newCancelSpotFleetRequestsSuccessItem,
+    cancelSpotFleetRequestsSuccessItem_currentSpotFleetRequestState,
+    cancelSpotFleetRequestsSuccessItem_previousSpotFleetRequestState,
+    cancelSpotFleetRequestsSuccessItem_spotFleetRequestId,
+
+    -- * CancelledSpotInstanceRequest
+    CancelledSpotInstanceRequest (..),
+    newCancelledSpotInstanceRequest,
+    cancelledSpotInstanceRequest_spotInstanceRequestId,
+    cancelledSpotInstanceRequest_state,
+
+    -- * CapacityAllocation
+    CapacityAllocation (..),
+    newCapacityAllocation,
+    capacityAllocation_allocationType,
+    capacityAllocation_count,
+
+    -- * CapacityReservation
+    CapacityReservation (..),
+    newCapacityReservation,
+    capacityReservation_availabilityZone,
+    capacityReservation_availabilityZoneId,
+    capacityReservation_availableInstanceCount,
+    capacityReservation_capacityAllocations,
+    capacityReservation_capacityReservationArn,
+    capacityReservation_capacityReservationFleetId,
+    capacityReservation_capacityReservationId,
+    capacityReservation_createDate,
+    capacityReservation_ebsOptimized,
+    capacityReservation_endDate,
+    capacityReservation_endDateType,
+    capacityReservation_ephemeralStorage,
+    capacityReservation_instanceMatchCriteria,
+    capacityReservation_instancePlatform,
+    capacityReservation_instanceType,
+    capacityReservation_outpostArn,
+    capacityReservation_ownerId,
+    capacityReservation_placementGroupArn,
+    capacityReservation_startDate,
+    capacityReservation_state,
+    capacityReservation_tags,
+    capacityReservation_tenancy,
+    capacityReservation_totalInstanceCount,
+
+    -- * CapacityReservationFleet
+    CapacityReservationFleet (..),
+    newCapacityReservationFleet,
+    capacityReservationFleet_allocationStrategy,
+    capacityReservationFleet_capacityReservationFleetArn,
+    capacityReservationFleet_capacityReservationFleetId,
+    capacityReservationFleet_createTime,
+    capacityReservationFleet_endDate,
+    capacityReservationFleet_instanceMatchCriteria,
+    capacityReservationFleet_instanceTypeSpecifications,
+    capacityReservationFleet_state,
+    capacityReservationFleet_tags,
+    capacityReservationFleet_tenancy,
+    capacityReservationFleet_totalFulfilledCapacity,
+    capacityReservationFleet_totalTargetCapacity,
+
+    -- * CapacityReservationFleetCancellationState
+    CapacityReservationFleetCancellationState (..),
+    newCapacityReservationFleetCancellationState,
+    capacityReservationFleetCancellationState_capacityReservationFleetId,
+    capacityReservationFleetCancellationState_currentFleetState,
+    capacityReservationFleetCancellationState_previousFleetState,
+
+    -- * CapacityReservationGroup
+    CapacityReservationGroup (..),
+    newCapacityReservationGroup,
+    capacityReservationGroup_groupArn,
+    capacityReservationGroup_ownerId,
+
+    -- * CapacityReservationOptions
+    CapacityReservationOptions (..),
+    newCapacityReservationOptions,
+    capacityReservationOptions_usageStrategy,
+
+    -- * CapacityReservationOptionsRequest
+    CapacityReservationOptionsRequest (..),
+    newCapacityReservationOptionsRequest,
+    capacityReservationOptionsRequest_usageStrategy,
+
+    -- * CapacityReservationSpecification
+    CapacityReservationSpecification (..),
+    newCapacityReservationSpecification,
+    capacityReservationSpecification_capacityReservationPreference,
+    capacityReservationSpecification_capacityReservationTarget,
+
+    -- * CapacityReservationSpecificationResponse
+    CapacityReservationSpecificationResponse (..),
+    newCapacityReservationSpecificationResponse,
+    capacityReservationSpecificationResponse_capacityReservationPreference,
+    capacityReservationSpecificationResponse_capacityReservationTarget,
+
+    -- * CapacityReservationTarget
+    CapacityReservationTarget (..),
+    newCapacityReservationTarget,
+    capacityReservationTarget_capacityReservationId,
+    capacityReservationTarget_capacityReservationResourceGroupArn,
+
+    -- * CapacityReservationTargetResponse
+    CapacityReservationTargetResponse (..),
+    newCapacityReservationTargetResponse,
+    capacityReservationTargetResponse_capacityReservationId,
+    capacityReservationTargetResponse_capacityReservationResourceGroupArn,
+
+    -- * CarrierGateway
+    CarrierGateway (..),
+    newCarrierGateway,
+    carrierGateway_carrierGatewayId,
+    carrierGateway_ownerId,
+    carrierGateway_state,
+    carrierGateway_tags,
+    carrierGateway_vpcId,
+
+    -- * CertificateAuthentication
+    CertificateAuthentication (..),
+    newCertificateAuthentication,
+    certificateAuthentication_clientRootCertificateChain,
+
+    -- * CertificateAuthenticationRequest
+    CertificateAuthenticationRequest (..),
+    newCertificateAuthenticationRequest,
+    certificateAuthenticationRequest_clientRootCertificateChainArn,
+
+    -- * CidrAuthorizationContext
+    CidrAuthorizationContext (..),
+    newCidrAuthorizationContext,
+    cidrAuthorizationContext_message,
+    cidrAuthorizationContext_signature,
+
+    -- * CidrBlock
+    CidrBlock (..),
+    newCidrBlock,
+    cidrBlock_cidrBlock,
+
+    -- * ClassicLinkDnsSupport
+    ClassicLinkDnsSupport (..),
+    newClassicLinkDnsSupport,
+    classicLinkDnsSupport_classicLinkDnsSupported,
+    classicLinkDnsSupport_vpcId,
+
+    -- * ClassicLinkInstance
+    ClassicLinkInstance (..),
+    newClassicLinkInstance,
+    classicLinkInstance_groups,
+    classicLinkInstance_instanceId,
+    classicLinkInstance_tags,
+    classicLinkInstance_vpcId,
+
+    -- * ClassicLoadBalancer
+    ClassicLoadBalancer (..),
+    newClassicLoadBalancer,
+    classicLoadBalancer_name,
+
+    -- * ClassicLoadBalancersConfig
+    ClassicLoadBalancersConfig (..),
+    newClassicLoadBalancersConfig,
+    classicLoadBalancersConfig_classicLoadBalancers,
+
+    -- * ClientCertificateRevocationListStatus
+    ClientCertificateRevocationListStatus (..),
+    newClientCertificateRevocationListStatus,
+    clientCertificateRevocationListStatus_code,
+    clientCertificateRevocationListStatus_message,
+
+    -- * ClientConnectOptions
+    ClientConnectOptions (..),
+    newClientConnectOptions,
+    clientConnectOptions_enabled,
+    clientConnectOptions_lambdaFunctionArn,
+
+    -- * ClientConnectResponseOptions
+    ClientConnectResponseOptions (..),
+    newClientConnectResponseOptions,
+    clientConnectResponseOptions_enabled,
+    clientConnectResponseOptions_lambdaFunctionArn,
+    clientConnectResponseOptions_status,
+
+    -- * ClientData
+    ClientData (..),
+    newClientData,
+    clientData_comment,
+    clientData_uploadEnd,
+    clientData_uploadSize,
+    clientData_uploadStart,
+
+    -- * ClientLoginBannerOptions
+    ClientLoginBannerOptions (..),
+    newClientLoginBannerOptions,
+    clientLoginBannerOptions_bannerText,
+    clientLoginBannerOptions_enabled,
+
+    -- * ClientLoginBannerResponseOptions
+    ClientLoginBannerResponseOptions (..),
+    newClientLoginBannerResponseOptions,
+    clientLoginBannerResponseOptions_bannerText,
+    clientLoginBannerResponseOptions_enabled,
+
+    -- * ClientVpnAuthentication
+    ClientVpnAuthentication (..),
+    newClientVpnAuthentication,
+    clientVpnAuthentication_activeDirectory,
+    clientVpnAuthentication_federatedAuthentication,
+    clientVpnAuthentication_mutualAuthentication,
+    clientVpnAuthentication_type,
+
+    -- * ClientVpnAuthenticationRequest
+    ClientVpnAuthenticationRequest (..),
+    newClientVpnAuthenticationRequest,
+    clientVpnAuthenticationRequest_activeDirectory,
+    clientVpnAuthenticationRequest_federatedAuthentication,
+    clientVpnAuthenticationRequest_mutualAuthentication,
+    clientVpnAuthenticationRequest_type,
+
+    -- * ClientVpnAuthorizationRuleStatus
+    ClientVpnAuthorizationRuleStatus (..),
+    newClientVpnAuthorizationRuleStatus,
+    clientVpnAuthorizationRuleStatus_code,
+    clientVpnAuthorizationRuleStatus_message,
+
+    -- * ClientVpnConnection
+    ClientVpnConnection (..),
+    newClientVpnConnection,
+    clientVpnConnection_clientIp,
+    clientVpnConnection_clientVpnEndpointId,
+    clientVpnConnection_commonName,
+    clientVpnConnection_connectionEndTime,
+    clientVpnConnection_connectionEstablishedTime,
+    clientVpnConnection_connectionId,
+    clientVpnConnection_egressBytes,
+    clientVpnConnection_egressPackets,
+    clientVpnConnection_ingressBytes,
+    clientVpnConnection_ingressPackets,
+    clientVpnConnection_postureComplianceStatuses,
+    clientVpnConnection_status,
+    clientVpnConnection_timestamp,
+    clientVpnConnection_username,
+
+    -- * ClientVpnConnectionStatus
+    ClientVpnConnectionStatus (..),
+    newClientVpnConnectionStatus,
+    clientVpnConnectionStatus_code,
+    clientVpnConnectionStatus_message,
+
+    -- * ClientVpnEndpoint
+    ClientVpnEndpoint (..),
+    newClientVpnEndpoint,
+    clientVpnEndpoint_associatedTargetNetworks,
+    clientVpnEndpoint_authenticationOptions,
+    clientVpnEndpoint_clientCidrBlock,
+    clientVpnEndpoint_clientConnectOptions,
+    clientVpnEndpoint_clientLoginBannerOptions,
+    clientVpnEndpoint_clientVpnEndpointId,
+    clientVpnEndpoint_connectionLogOptions,
+    clientVpnEndpoint_creationTime,
+    clientVpnEndpoint_deletionTime,
+    clientVpnEndpoint_description,
+    clientVpnEndpoint_dnsName,
+    clientVpnEndpoint_dnsServers,
+    clientVpnEndpoint_securityGroupIds,
+    clientVpnEndpoint_selfServicePortalUrl,
+    clientVpnEndpoint_serverCertificateArn,
+    clientVpnEndpoint_sessionTimeoutHours,
+    clientVpnEndpoint_splitTunnel,
+    clientVpnEndpoint_status,
+    clientVpnEndpoint_tags,
+    clientVpnEndpoint_transportProtocol,
+    clientVpnEndpoint_vpcId,
+    clientVpnEndpoint_vpnPort,
+    clientVpnEndpoint_vpnProtocol,
+
+    -- * ClientVpnEndpointAttributeStatus
+    ClientVpnEndpointAttributeStatus (..),
+    newClientVpnEndpointAttributeStatus,
+    clientVpnEndpointAttributeStatus_code,
+    clientVpnEndpointAttributeStatus_message,
+
+    -- * ClientVpnEndpointStatus
+    ClientVpnEndpointStatus (..),
+    newClientVpnEndpointStatus,
+    clientVpnEndpointStatus_code,
+    clientVpnEndpointStatus_message,
+
+    -- * ClientVpnRoute
+    ClientVpnRoute (..),
+    newClientVpnRoute,
+    clientVpnRoute_clientVpnEndpointId,
+    clientVpnRoute_description,
+    clientVpnRoute_destinationCidr,
+    clientVpnRoute_origin,
+    clientVpnRoute_status,
+    clientVpnRoute_targetSubnet,
+    clientVpnRoute_type,
+
+    -- * ClientVpnRouteStatus
+    ClientVpnRouteStatus (..),
+    newClientVpnRouteStatus,
+    clientVpnRouteStatus_code,
+    clientVpnRouteStatus_message,
+
+    -- * CloudWatchLogOptions
+    CloudWatchLogOptions (..),
+    newCloudWatchLogOptions,
+    cloudWatchLogOptions_logEnabled,
+    cloudWatchLogOptions_logGroupArn,
+    cloudWatchLogOptions_logOutputFormat,
+
+    -- * CloudWatchLogOptionsSpecification
+    CloudWatchLogOptionsSpecification (..),
+    newCloudWatchLogOptionsSpecification,
+    cloudWatchLogOptionsSpecification_logEnabled,
+    cloudWatchLogOptionsSpecification_logGroupArn,
+    cloudWatchLogOptionsSpecification_logOutputFormat,
+
+    -- * CoipAddressUsage
+    CoipAddressUsage (..),
+    newCoipAddressUsage,
+    coipAddressUsage_allocationId,
+    coipAddressUsage_awsAccountId,
+    coipAddressUsage_awsService,
+    coipAddressUsage_coIp,
+
+    -- * CoipCidr
+    CoipCidr (..),
+    newCoipCidr,
+    coipCidr_cidr,
+    coipCidr_coipPoolId,
+    coipCidr_localGatewayRouteTableId,
+
+    -- * CoipPool
+    CoipPool (..),
+    newCoipPool,
+    coipPool_localGatewayRouteTableId,
+    coipPool_poolArn,
+    coipPool_poolCidrs,
+    coipPool_poolId,
+    coipPool_tags,
+
+    -- * ConnectionLogOptions
+    ConnectionLogOptions (..),
+    newConnectionLogOptions,
+    connectionLogOptions_cloudwatchLogGroup,
+    connectionLogOptions_cloudwatchLogStream,
+    connectionLogOptions_enabled,
+
+    -- * ConnectionLogResponseOptions
+    ConnectionLogResponseOptions (..),
+    newConnectionLogResponseOptions,
+    connectionLogResponseOptions_cloudwatchLogGroup,
+    connectionLogResponseOptions_cloudwatchLogStream,
+    connectionLogResponseOptions_enabled,
+
+    -- * ConnectionNotification
+    ConnectionNotification (..),
+    newConnectionNotification,
+    connectionNotification_connectionEvents,
+    connectionNotification_connectionNotificationArn,
+    connectionNotification_connectionNotificationId,
+    connectionNotification_connectionNotificationState,
+    connectionNotification_connectionNotificationType,
+    connectionNotification_serviceId,
+    connectionNotification_vpcEndpointId,
+
+    -- * ConversionTask
+    ConversionTask (..),
+    newConversionTask,
+    conversionTask_conversionTaskId,
+    conversionTask_expirationTime,
+    conversionTask_importInstance,
+    conversionTask_importVolume,
+    conversionTask_state,
+    conversionTask_statusMessage,
+    conversionTask_tags,
+
+    -- * CpuOptions
+    CpuOptions (..),
+    newCpuOptions,
+    cpuOptions_coreCount,
+    cpuOptions_threadsPerCore,
+
+    -- * CpuOptionsRequest
+    CpuOptionsRequest (..),
+    newCpuOptionsRequest,
+    cpuOptionsRequest_coreCount,
+    cpuOptionsRequest_threadsPerCore,
+
+    -- * CreateFleetError
+    CreateFleetError (..),
+    newCreateFleetError,
+    createFleetError_errorCode,
+    createFleetError_errorMessage,
+    createFleetError_launchTemplateAndOverrides,
+    createFleetError_lifecycle,
+
+    -- * CreateFleetInstance
+    CreateFleetInstance (..),
+    newCreateFleetInstance,
+    createFleetInstance_instanceIds,
+    createFleetInstance_instanceType,
+    createFleetInstance_launchTemplateAndOverrides,
+    createFleetInstance_lifecycle,
+    createFleetInstance_platform,
+
+    -- * CreateTransitGatewayConnectRequestOptions
+    CreateTransitGatewayConnectRequestOptions (..),
+    newCreateTransitGatewayConnectRequestOptions,
+    createTransitGatewayConnectRequestOptions_protocol,
+
+    -- * CreateTransitGatewayMulticastDomainRequestOptions
+    CreateTransitGatewayMulticastDomainRequestOptions (..),
+    newCreateTransitGatewayMulticastDomainRequestOptions,
+    createTransitGatewayMulticastDomainRequestOptions_autoAcceptSharedAssociations,
+    createTransitGatewayMulticastDomainRequestOptions_igmpv2Support,
+    createTransitGatewayMulticastDomainRequestOptions_staticSourcesSupport,
+
+    -- * CreateTransitGatewayPeeringAttachmentRequestOptions
+    CreateTransitGatewayPeeringAttachmentRequestOptions (..),
+    newCreateTransitGatewayPeeringAttachmentRequestOptions,
+    createTransitGatewayPeeringAttachmentRequestOptions_dynamicRouting,
+
+    -- * CreateTransitGatewayVpcAttachmentRequestOptions
+    CreateTransitGatewayVpcAttachmentRequestOptions (..),
+    newCreateTransitGatewayVpcAttachmentRequestOptions,
+    createTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport,
+    createTransitGatewayVpcAttachmentRequestOptions_dnsSupport,
+    createTransitGatewayVpcAttachmentRequestOptions_ipv6Support,
+
+    -- * CreateVerifiedAccessEndpointEniOptions
+    CreateVerifiedAccessEndpointEniOptions (..),
+    newCreateVerifiedAccessEndpointEniOptions,
+    createVerifiedAccessEndpointEniOptions_networkInterfaceId,
+    createVerifiedAccessEndpointEniOptions_port,
+    createVerifiedAccessEndpointEniOptions_protocol,
+
+    -- * CreateVerifiedAccessEndpointLoadBalancerOptions
+    CreateVerifiedAccessEndpointLoadBalancerOptions (..),
+    newCreateVerifiedAccessEndpointLoadBalancerOptions,
+    createVerifiedAccessEndpointLoadBalancerOptions_loadBalancerArn,
+    createVerifiedAccessEndpointLoadBalancerOptions_port,
+    createVerifiedAccessEndpointLoadBalancerOptions_protocol,
+    createVerifiedAccessEndpointLoadBalancerOptions_subnetIds,
+
+    -- * CreateVerifiedAccessTrustProviderDeviceOptions
+    CreateVerifiedAccessTrustProviderDeviceOptions (..),
+    newCreateVerifiedAccessTrustProviderDeviceOptions,
+    createVerifiedAccessTrustProviderDeviceOptions_tenantId,
+
+    -- * CreateVerifiedAccessTrustProviderOidcOptions
+    CreateVerifiedAccessTrustProviderOidcOptions (..),
+    newCreateVerifiedAccessTrustProviderOidcOptions,
+    createVerifiedAccessTrustProviderOidcOptions_authorizationEndpoint,
+    createVerifiedAccessTrustProviderOidcOptions_clientId,
+    createVerifiedAccessTrustProviderOidcOptions_clientSecret,
+    createVerifiedAccessTrustProviderOidcOptions_issuer,
+    createVerifiedAccessTrustProviderOidcOptions_scope,
+    createVerifiedAccessTrustProviderOidcOptions_tokenEndpoint,
+    createVerifiedAccessTrustProviderOidcOptions_userInfoEndpoint,
+
+    -- * CreateVolumePermission
+    CreateVolumePermission (..),
+    newCreateVolumePermission,
+    createVolumePermission_group,
+    createVolumePermission_userId,
+
+    -- * CreateVolumePermissionModifications
+    CreateVolumePermissionModifications (..),
+    newCreateVolumePermissionModifications,
+    createVolumePermissionModifications_add,
+    createVolumePermissionModifications_remove,
+
+    -- * CreditSpecification
+    CreditSpecification (..),
+    newCreditSpecification,
+    creditSpecification_cpuCredits,
+
+    -- * CreditSpecificationRequest
+    CreditSpecificationRequest (..),
+    newCreditSpecificationRequest,
+    creditSpecificationRequest_cpuCredits,
+
+    -- * CustomerGateway
+    CustomerGateway (..),
+    newCustomerGateway,
+    customerGateway_certificateArn,
+    customerGateway_deviceName,
+    customerGateway_tags,
+    customerGateway_bgpAsn,
+    customerGateway_customerGatewayId,
+    customerGateway_ipAddress,
+    customerGateway_state,
+    customerGateway_type,
+
+    -- * DataQuery
+    DataQuery (..),
+    newDataQuery,
+    dataQuery_destination,
+    dataQuery_id,
+    dataQuery_metric,
+    dataQuery_period,
+    dataQuery_source,
+    dataQuery_statistic,
+
+    -- * DataResponse
+    DataResponse (..),
+    newDataResponse,
+    dataResponse_destination,
+    dataResponse_id,
+    dataResponse_metric,
+    dataResponse_metricPoints,
+    dataResponse_period,
+    dataResponse_source,
+    dataResponse_statistic,
+
+    -- * DeleteFleetError
+    DeleteFleetError (..),
+    newDeleteFleetError,
+    deleteFleetError_code,
+    deleteFleetError_message,
+
+    -- * DeleteFleetErrorItem
+    DeleteFleetErrorItem (..),
+    newDeleteFleetErrorItem,
+    deleteFleetErrorItem_error,
+    deleteFleetErrorItem_fleetId,
+
+    -- * DeleteFleetSuccessItem
+    DeleteFleetSuccessItem (..),
+    newDeleteFleetSuccessItem,
+    deleteFleetSuccessItem_currentFleetState,
+    deleteFleetSuccessItem_fleetId,
+    deleteFleetSuccessItem_previousFleetState,
+
+    -- * DeleteLaunchTemplateVersionsResponseErrorItem
+    DeleteLaunchTemplateVersionsResponseErrorItem (..),
+    newDeleteLaunchTemplateVersionsResponseErrorItem,
+    deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateId,
+    deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateName,
+    deleteLaunchTemplateVersionsResponseErrorItem_responseError,
+    deleteLaunchTemplateVersionsResponseErrorItem_versionNumber,
+
+    -- * DeleteLaunchTemplateVersionsResponseSuccessItem
+    DeleteLaunchTemplateVersionsResponseSuccessItem (..),
+    newDeleteLaunchTemplateVersionsResponseSuccessItem,
+    deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateId,
+    deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateName,
+    deleteLaunchTemplateVersionsResponseSuccessItem_versionNumber,
+
+    -- * DeleteQueuedReservedInstancesError
+    DeleteQueuedReservedInstancesError (..),
+    newDeleteQueuedReservedInstancesError,
+    deleteQueuedReservedInstancesError_code,
+    deleteQueuedReservedInstancesError_message,
+
+    -- * DeregisterInstanceTagAttributeRequest
+    DeregisterInstanceTagAttributeRequest (..),
+    newDeregisterInstanceTagAttributeRequest,
+    deregisterInstanceTagAttributeRequest_includeAllTagsOfInstance,
+    deregisterInstanceTagAttributeRequest_instanceTagKeys,
+
+    -- * DescribeFastLaunchImagesSuccessItem
+    DescribeFastLaunchImagesSuccessItem (..),
+    newDescribeFastLaunchImagesSuccessItem,
+    describeFastLaunchImagesSuccessItem_imageId,
+    describeFastLaunchImagesSuccessItem_launchTemplate,
+    describeFastLaunchImagesSuccessItem_maxParallelLaunches,
+    describeFastLaunchImagesSuccessItem_ownerId,
+    describeFastLaunchImagesSuccessItem_resourceType,
+    describeFastLaunchImagesSuccessItem_snapshotConfiguration,
+    describeFastLaunchImagesSuccessItem_state,
+    describeFastLaunchImagesSuccessItem_stateTransitionReason,
+    describeFastLaunchImagesSuccessItem_stateTransitionTime,
+
+    -- * DescribeFastSnapshotRestoreSuccessItem
+    DescribeFastSnapshotRestoreSuccessItem (..),
+    newDescribeFastSnapshotRestoreSuccessItem,
+    describeFastSnapshotRestoreSuccessItem_availabilityZone,
+    describeFastSnapshotRestoreSuccessItem_disabledTime,
+    describeFastSnapshotRestoreSuccessItem_disablingTime,
+    describeFastSnapshotRestoreSuccessItem_enabledTime,
+    describeFastSnapshotRestoreSuccessItem_enablingTime,
+    describeFastSnapshotRestoreSuccessItem_optimizingTime,
+    describeFastSnapshotRestoreSuccessItem_ownerAlias,
+    describeFastSnapshotRestoreSuccessItem_ownerId,
+    describeFastSnapshotRestoreSuccessItem_snapshotId,
+    describeFastSnapshotRestoreSuccessItem_state,
+    describeFastSnapshotRestoreSuccessItem_stateTransitionReason,
+
+    -- * DescribeFleetError
+    DescribeFleetError (..),
+    newDescribeFleetError,
+    describeFleetError_errorCode,
+    describeFleetError_errorMessage,
+    describeFleetError_launchTemplateAndOverrides,
+    describeFleetError_lifecycle,
+
+    -- * DescribeFleetsInstances
+    DescribeFleetsInstances (..),
+    newDescribeFleetsInstances,
+    describeFleetsInstances_instanceIds,
+    describeFleetsInstances_instanceType,
+    describeFleetsInstances_launchTemplateAndOverrides,
+    describeFleetsInstances_lifecycle,
+    describeFleetsInstances_platform,
+
+    -- * DestinationOptionsRequest
+    DestinationOptionsRequest (..),
+    newDestinationOptionsRequest,
+    destinationOptionsRequest_fileFormat,
+    destinationOptionsRequest_hiveCompatiblePartitions,
+    destinationOptionsRequest_perHourPartition,
+
+    -- * DestinationOptionsResponse
+    DestinationOptionsResponse (..),
+    newDestinationOptionsResponse,
+    destinationOptionsResponse_fileFormat,
+    destinationOptionsResponse_hiveCompatiblePartitions,
+    destinationOptionsResponse_perHourPartition,
+
+    -- * DeviceOptions
+    DeviceOptions (..),
+    newDeviceOptions,
+    deviceOptions_tenantId,
+
+    -- * DhcpConfiguration
+    DhcpConfiguration (..),
+    newDhcpConfiguration,
+    dhcpConfiguration_key,
+    dhcpConfiguration_values,
+
+    -- * DhcpOptions
+    DhcpOptions (..),
+    newDhcpOptions,
+    dhcpOptions_dhcpConfigurations,
+    dhcpOptions_dhcpOptionsId,
+    dhcpOptions_ownerId,
+    dhcpOptions_tags,
+
+    -- * DirectoryServiceAuthentication
+    DirectoryServiceAuthentication (..),
+    newDirectoryServiceAuthentication,
+    directoryServiceAuthentication_directoryId,
+
+    -- * DirectoryServiceAuthenticationRequest
+    DirectoryServiceAuthenticationRequest (..),
+    newDirectoryServiceAuthenticationRequest,
+    directoryServiceAuthenticationRequest_directoryId,
+
+    -- * DisableFastSnapshotRestoreErrorItem
+    DisableFastSnapshotRestoreErrorItem (..),
+    newDisableFastSnapshotRestoreErrorItem,
+    disableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors,
+    disableFastSnapshotRestoreErrorItem_snapshotId,
+
+    -- * DisableFastSnapshotRestoreStateError
+    DisableFastSnapshotRestoreStateError (..),
+    newDisableFastSnapshotRestoreStateError,
+    disableFastSnapshotRestoreStateError_code,
+    disableFastSnapshotRestoreStateError_message,
+
+    -- * DisableFastSnapshotRestoreStateErrorItem
+    DisableFastSnapshotRestoreStateErrorItem (..),
+    newDisableFastSnapshotRestoreStateErrorItem,
+    disableFastSnapshotRestoreStateErrorItem_availabilityZone,
+    disableFastSnapshotRestoreStateErrorItem_error,
+
+    -- * DisableFastSnapshotRestoreSuccessItem
+    DisableFastSnapshotRestoreSuccessItem (..),
+    newDisableFastSnapshotRestoreSuccessItem,
+    disableFastSnapshotRestoreSuccessItem_availabilityZone,
+    disableFastSnapshotRestoreSuccessItem_disabledTime,
+    disableFastSnapshotRestoreSuccessItem_disablingTime,
+    disableFastSnapshotRestoreSuccessItem_enabledTime,
+    disableFastSnapshotRestoreSuccessItem_enablingTime,
+    disableFastSnapshotRestoreSuccessItem_optimizingTime,
+    disableFastSnapshotRestoreSuccessItem_ownerAlias,
+    disableFastSnapshotRestoreSuccessItem_ownerId,
+    disableFastSnapshotRestoreSuccessItem_snapshotId,
+    disableFastSnapshotRestoreSuccessItem_state,
+    disableFastSnapshotRestoreSuccessItem_stateTransitionReason,
+
+    -- * DiskImage
+    DiskImage (..),
+    newDiskImage,
+    diskImage_description,
+    diskImage_image,
+    diskImage_volume,
+
+    -- * DiskImageDescription
+    DiskImageDescription (..),
+    newDiskImageDescription,
+    diskImageDescription_checksum,
+    diskImageDescription_format,
+    diskImageDescription_importManifestUrl,
+    diskImageDescription_size,
+
+    -- * DiskImageDetail
+    DiskImageDetail (..),
+    newDiskImageDetail,
+    diskImageDetail_bytes,
+    diskImageDetail_format,
+    diskImageDetail_importManifestUrl,
+
+    -- * DiskImageVolumeDescription
+    DiskImageVolumeDescription (..),
+    newDiskImageVolumeDescription,
+    diskImageVolumeDescription_id,
+    diskImageVolumeDescription_size,
+
+    -- * DiskInfo
+    DiskInfo (..),
+    newDiskInfo,
+    diskInfo_count,
+    diskInfo_sizeInGB,
+    diskInfo_type,
+
+    -- * DnsEntry
+    DnsEntry (..),
+    newDnsEntry,
+    dnsEntry_dnsName,
+    dnsEntry_hostedZoneId,
+
+    -- * DnsOptions
+    DnsOptions (..),
+    newDnsOptions,
+    dnsOptions_dnsRecordIpType,
+
+    -- * DnsOptionsSpecification
+    DnsOptionsSpecification (..),
+    newDnsOptionsSpecification,
+    dnsOptionsSpecification_dnsRecordIpType,
+
+    -- * DnsServersOptionsModifyStructure
+    DnsServersOptionsModifyStructure (..),
+    newDnsServersOptionsModifyStructure,
+    dnsServersOptionsModifyStructure_customDnsServers,
+    dnsServersOptionsModifyStructure_enabled,
+
+    -- * EbsBlockDevice
+    EbsBlockDevice (..),
+    newEbsBlockDevice,
+    ebsBlockDevice_deleteOnTermination,
+    ebsBlockDevice_encrypted,
+    ebsBlockDevice_iops,
+    ebsBlockDevice_kmsKeyId,
+    ebsBlockDevice_outpostArn,
+    ebsBlockDevice_snapshotId,
+    ebsBlockDevice_throughput,
+    ebsBlockDevice_volumeSize,
+    ebsBlockDevice_volumeType,
+
+    -- * EbsInfo
+    EbsInfo (..),
+    newEbsInfo,
+    ebsInfo_ebsOptimizedInfo,
+    ebsInfo_ebsOptimizedSupport,
+    ebsInfo_encryptionSupport,
+    ebsInfo_nvmeSupport,
+
+    -- * EbsInstanceBlockDevice
+    EbsInstanceBlockDevice (..),
+    newEbsInstanceBlockDevice,
+    ebsInstanceBlockDevice_attachTime,
+    ebsInstanceBlockDevice_deleteOnTermination,
+    ebsInstanceBlockDevice_status,
+    ebsInstanceBlockDevice_volumeId,
+
+    -- * EbsInstanceBlockDeviceSpecification
+    EbsInstanceBlockDeviceSpecification (..),
+    newEbsInstanceBlockDeviceSpecification,
+    ebsInstanceBlockDeviceSpecification_deleteOnTermination,
+    ebsInstanceBlockDeviceSpecification_volumeId,
+
+    -- * EbsOptimizedInfo
+    EbsOptimizedInfo (..),
+    newEbsOptimizedInfo,
+    ebsOptimizedInfo_baselineBandwidthInMbps,
+    ebsOptimizedInfo_baselineIops,
+    ebsOptimizedInfo_baselineThroughputInMBps,
+    ebsOptimizedInfo_maximumBandwidthInMbps,
+    ebsOptimizedInfo_maximumIops,
+    ebsOptimizedInfo_maximumThroughputInMBps,
+
+    -- * EfaInfo
+    EfaInfo (..),
+    newEfaInfo,
+    efaInfo_maximumEfaInterfaces,
+
+    -- * EgressOnlyInternetGateway
+    EgressOnlyInternetGateway (..),
+    newEgressOnlyInternetGateway,
+    egressOnlyInternetGateway_attachments,
+    egressOnlyInternetGateway_egressOnlyInternetGatewayId,
+    egressOnlyInternetGateway_tags,
+
+    -- * ElasticGpuAssociation
+    ElasticGpuAssociation (..),
+    newElasticGpuAssociation,
+    elasticGpuAssociation_elasticGpuAssociationId,
+    elasticGpuAssociation_elasticGpuAssociationState,
+    elasticGpuAssociation_elasticGpuAssociationTime,
+    elasticGpuAssociation_elasticGpuId,
+
+    -- * ElasticGpuHealth
+    ElasticGpuHealth (..),
+    newElasticGpuHealth,
+    elasticGpuHealth_status,
+
+    -- * ElasticGpuSpecification
+    ElasticGpuSpecification (..),
+    newElasticGpuSpecification,
+    elasticGpuSpecification_type,
+
+    -- * ElasticGpuSpecificationResponse
+    ElasticGpuSpecificationResponse (..),
+    newElasticGpuSpecificationResponse,
+    elasticGpuSpecificationResponse_type,
+
+    -- * ElasticGpus
+    ElasticGpus (..),
+    newElasticGpus,
+    elasticGpus_availabilityZone,
+    elasticGpus_elasticGpuHealth,
+    elasticGpus_elasticGpuId,
+    elasticGpus_elasticGpuState,
+    elasticGpus_elasticGpuType,
+    elasticGpus_instanceId,
+    elasticGpus_tags,
+
+    -- * ElasticInferenceAccelerator
+    ElasticInferenceAccelerator (..),
+    newElasticInferenceAccelerator,
+    elasticInferenceAccelerator_count,
+    elasticInferenceAccelerator_type,
+
+    -- * ElasticInferenceAcceleratorAssociation
+    ElasticInferenceAcceleratorAssociation (..),
+    newElasticInferenceAcceleratorAssociation,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorArn,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationId,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationState,
+    elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationTime,
+
+    -- * EnaSrdSpecification
+    EnaSrdSpecification (..),
+    newEnaSrdSpecification,
+    enaSrdSpecification_enaSrdEnabled,
+    enaSrdSpecification_enaSrdUdpSpecification,
+
+    -- * EnaSrdUdpSpecification
+    EnaSrdUdpSpecification (..),
+    newEnaSrdUdpSpecification,
+    enaSrdUdpSpecification_enaSrdUdpEnabled,
+
+    -- * EnableFastSnapshotRestoreErrorItem
+    EnableFastSnapshotRestoreErrorItem (..),
+    newEnableFastSnapshotRestoreErrorItem,
+    enableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors,
+    enableFastSnapshotRestoreErrorItem_snapshotId,
+
+    -- * EnableFastSnapshotRestoreStateError
+    EnableFastSnapshotRestoreStateError (..),
+    newEnableFastSnapshotRestoreStateError,
+    enableFastSnapshotRestoreStateError_code,
+    enableFastSnapshotRestoreStateError_message,
+
+    -- * EnableFastSnapshotRestoreStateErrorItem
+    EnableFastSnapshotRestoreStateErrorItem (..),
+    newEnableFastSnapshotRestoreStateErrorItem,
+    enableFastSnapshotRestoreStateErrorItem_availabilityZone,
+    enableFastSnapshotRestoreStateErrorItem_error,
+
+    -- * EnableFastSnapshotRestoreSuccessItem
+    EnableFastSnapshotRestoreSuccessItem (..),
+    newEnableFastSnapshotRestoreSuccessItem,
+    enableFastSnapshotRestoreSuccessItem_availabilityZone,
+    enableFastSnapshotRestoreSuccessItem_disabledTime,
+    enableFastSnapshotRestoreSuccessItem_disablingTime,
+    enableFastSnapshotRestoreSuccessItem_enabledTime,
+    enableFastSnapshotRestoreSuccessItem_enablingTime,
+    enableFastSnapshotRestoreSuccessItem_optimizingTime,
+    enableFastSnapshotRestoreSuccessItem_ownerAlias,
+    enableFastSnapshotRestoreSuccessItem_ownerId,
+    enableFastSnapshotRestoreSuccessItem_snapshotId,
+    enableFastSnapshotRestoreSuccessItem_state,
+    enableFastSnapshotRestoreSuccessItem_stateTransitionReason,
+
+    -- * EnclaveOptions
+    EnclaveOptions (..),
+    newEnclaveOptions,
+    enclaveOptions_enabled,
+
+    -- * EnclaveOptionsRequest
+    EnclaveOptionsRequest (..),
+    newEnclaveOptionsRequest,
+    enclaveOptionsRequest_enabled,
+
+    -- * EventInformation
+    EventInformation (..),
+    newEventInformation,
+    eventInformation_eventDescription,
+    eventInformation_eventSubType,
+    eventInformation_instanceId,
+
+    -- * Explanation
+    Explanation (..),
+    newExplanation,
+    explanation_acl,
+    explanation_aclRule,
+    explanation_address,
+    explanation_addresses,
+    explanation_attachedTo,
+    explanation_availabilityZones,
+    explanation_cidrs,
+    explanation_classicLoadBalancerListener,
+    explanation_component,
+    explanation_componentAccount,
+    explanation_componentRegion,
+    explanation_customerGateway,
+    explanation_destination,
+    explanation_destinationVpc,
+    explanation_direction,
+    explanation_elasticLoadBalancerListener,
+    explanation_explanationCode,
+    explanation_ingressRouteTable,
+    explanation_internetGateway,
+    explanation_loadBalancerArn,
+    explanation_loadBalancerListenerPort,
+    explanation_loadBalancerTarget,
+    explanation_loadBalancerTargetGroup,
+    explanation_loadBalancerTargetGroups,
+    explanation_loadBalancerTargetPort,
+    explanation_missingComponent,
+    explanation_natGateway,
+    explanation_networkInterface,
+    explanation_packetField,
+    explanation_port,
+    explanation_portRanges,
+    explanation_prefixList,
+    explanation_protocols,
+    explanation_routeTable,
+    explanation_routeTableRoute,
+    explanation_securityGroup,
+    explanation_securityGroupRule,
+    explanation_securityGroups,
+    explanation_sourceVpc,
+    explanation_state,
+    explanation_subnet,
+    explanation_subnetRouteTable,
+    explanation_transitGateway,
+    explanation_transitGatewayAttachment,
+    explanation_transitGatewayRouteTable,
+    explanation_transitGatewayRouteTableRoute,
+    explanation_vpc,
+    explanation_vpcEndpoint,
+    explanation_vpcPeeringConnection,
+    explanation_vpnConnection,
+    explanation_vpnGateway,
+
+    -- * ExportImageTask
+    ExportImageTask (..),
+    newExportImageTask,
+    exportImageTask_description,
+    exportImageTask_exportImageTaskId,
+    exportImageTask_imageId,
+    exportImageTask_progress,
+    exportImageTask_s3ExportLocation,
+    exportImageTask_status,
+    exportImageTask_statusMessage,
+    exportImageTask_tags,
+
+    -- * ExportTask
+    ExportTask (..),
+    newExportTask,
+    exportTask_tags,
+    exportTask_description,
+    exportTask_exportTaskId,
+    exportTask_exportToS3Task,
+    exportTask_instanceExportDetails,
+    exportTask_state,
+    exportTask_statusMessage,
+
+    -- * ExportTaskS3Location
+    ExportTaskS3Location (..),
+    newExportTaskS3Location,
+    exportTaskS3Location_s3Bucket,
+    exportTaskS3Location_s3Prefix,
+
+    -- * ExportTaskS3LocationRequest
+    ExportTaskS3LocationRequest (..),
+    newExportTaskS3LocationRequest,
+    exportTaskS3LocationRequest_s3Prefix,
+    exportTaskS3LocationRequest_s3Bucket,
+
+    -- * ExportToS3Task
+    ExportToS3Task (..),
+    newExportToS3Task,
+    exportToS3Task_containerFormat,
+    exportToS3Task_diskImageFormat,
+    exportToS3Task_s3Bucket,
+    exportToS3Task_s3Key,
+
+    -- * ExportToS3TaskSpecification
+    ExportToS3TaskSpecification (..),
+    newExportToS3TaskSpecification,
+    exportToS3TaskSpecification_containerFormat,
+    exportToS3TaskSpecification_diskImageFormat,
+    exportToS3TaskSpecification_s3Bucket,
+    exportToS3TaskSpecification_s3Prefix,
+
+    -- * FailedCapacityReservationFleetCancellationResult
+    FailedCapacityReservationFleetCancellationResult (..),
+    newFailedCapacityReservationFleetCancellationResult,
+    failedCapacityReservationFleetCancellationResult_cancelCapacityReservationFleetError,
+    failedCapacityReservationFleetCancellationResult_capacityReservationFleetId,
+
+    -- * FailedQueuedPurchaseDeletion
+    FailedQueuedPurchaseDeletion (..),
+    newFailedQueuedPurchaseDeletion,
+    failedQueuedPurchaseDeletion_error,
+    failedQueuedPurchaseDeletion_reservedInstancesId,
+
+    -- * FastLaunchLaunchTemplateSpecificationRequest
+    FastLaunchLaunchTemplateSpecificationRequest (..),
+    newFastLaunchLaunchTemplateSpecificationRequest,
+    fastLaunchLaunchTemplateSpecificationRequest_launchTemplateId,
+    fastLaunchLaunchTemplateSpecificationRequest_launchTemplateName,
+    fastLaunchLaunchTemplateSpecificationRequest_version,
+
+    -- * FastLaunchLaunchTemplateSpecificationResponse
+    FastLaunchLaunchTemplateSpecificationResponse (..),
+    newFastLaunchLaunchTemplateSpecificationResponse,
+    fastLaunchLaunchTemplateSpecificationResponse_launchTemplateId,
+    fastLaunchLaunchTemplateSpecificationResponse_launchTemplateName,
+    fastLaunchLaunchTemplateSpecificationResponse_version,
+
+    -- * FastLaunchSnapshotConfigurationRequest
+    FastLaunchSnapshotConfigurationRequest (..),
+    newFastLaunchSnapshotConfigurationRequest,
+    fastLaunchSnapshotConfigurationRequest_targetResourceCount,
+
+    -- * FastLaunchSnapshotConfigurationResponse
+    FastLaunchSnapshotConfigurationResponse (..),
+    newFastLaunchSnapshotConfigurationResponse,
+    fastLaunchSnapshotConfigurationResponse_targetResourceCount,
+
+    -- * FederatedAuthentication
+    FederatedAuthentication (..),
+    newFederatedAuthentication,
+    federatedAuthentication_samlProviderArn,
+    federatedAuthentication_selfServiceSamlProviderArn,
+
+    -- * FederatedAuthenticationRequest
+    FederatedAuthenticationRequest (..),
+    newFederatedAuthenticationRequest,
+    federatedAuthenticationRequest_sAMLProviderArn,
+    federatedAuthenticationRequest_selfServiceSAMLProviderArn,
+
+    -- * Filter
+    Filter (..),
+    newFilter,
+    filter_values,
+    filter_name,
+
+    -- * FleetCapacityReservation
+    FleetCapacityReservation (..),
+    newFleetCapacityReservation,
+    fleetCapacityReservation_availabilityZone,
+    fleetCapacityReservation_availabilityZoneId,
+    fleetCapacityReservation_capacityReservationId,
+    fleetCapacityReservation_createDate,
+    fleetCapacityReservation_ebsOptimized,
+    fleetCapacityReservation_fulfilledCapacity,
+    fleetCapacityReservation_instancePlatform,
+    fleetCapacityReservation_instanceType,
+    fleetCapacityReservation_priority,
+    fleetCapacityReservation_totalInstanceCount,
+    fleetCapacityReservation_weight,
+
+    -- * FleetData
+    FleetData (..),
+    newFleetData,
+    fleetData_activityStatus,
+    fleetData_clientToken,
+    fleetData_context,
+    fleetData_createTime,
+    fleetData_errors,
+    fleetData_excessCapacityTerminationPolicy,
+    fleetData_fleetId,
+    fleetData_fleetState,
+    fleetData_fulfilledCapacity,
+    fleetData_fulfilledOnDemandCapacity,
+    fleetData_instances,
+    fleetData_launchTemplateConfigs,
+    fleetData_onDemandOptions,
+    fleetData_replaceUnhealthyInstances,
+    fleetData_spotOptions,
+    fleetData_tags,
+    fleetData_targetCapacitySpecification,
+    fleetData_terminateInstancesWithExpiration,
+    fleetData_type,
+    fleetData_validFrom,
+    fleetData_validUntil,
+
+    -- * FleetLaunchTemplateConfig
+    FleetLaunchTemplateConfig (..),
+    newFleetLaunchTemplateConfig,
+    fleetLaunchTemplateConfig_launchTemplateSpecification,
+    fleetLaunchTemplateConfig_overrides,
+
+    -- * FleetLaunchTemplateConfigRequest
+    FleetLaunchTemplateConfigRequest (..),
+    newFleetLaunchTemplateConfigRequest,
+    fleetLaunchTemplateConfigRequest_launchTemplateSpecification,
+    fleetLaunchTemplateConfigRequest_overrides,
+
+    -- * FleetLaunchTemplateOverrides
+    FleetLaunchTemplateOverrides (..),
+    newFleetLaunchTemplateOverrides,
+    fleetLaunchTemplateOverrides_availabilityZone,
+    fleetLaunchTemplateOverrides_imageId,
+    fleetLaunchTemplateOverrides_instanceRequirements,
+    fleetLaunchTemplateOverrides_instanceType,
+    fleetLaunchTemplateOverrides_maxPrice,
+    fleetLaunchTemplateOverrides_placement,
+    fleetLaunchTemplateOverrides_priority,
+    fleetLaunchTemplateOverrides_subnetId,
+    fleetLaunchTemplateOverrides_weightedCapacity,
+
+    -- * FleetLaunchTemplateOverridesRequest
+    FleetLaunchTemplateOverridesRequest (..),
+    newFleetLaunchTemplateOverridesRequest,
+    fleetLaunchTemplateOverridesRequest_availabilityZone,
+    fleetLaunchTemplateOverridesRequest_imageId,
+    fleetLaunchTemplateOverridesRequest_instanceRequirements,
+    fleetLaunchTemplateOverridesRequest_instanceType,
+    fleetLaunchTemplateOverridesRequest_maxPrice,
+    fleetLaunchTemplateOverridesRequest_placement,
+    fleetLaunchTemplateOverridesRequest_priority,
+    fleetLaunchTemplateOverridesRequest_subnetId,
+    fleetLaunchTemplateOverridesRequest_weightedCapacity,
+
+    -- * FleetLaunchTemplateSpecification
+    FleetLaunchTemplateSpecification (..),
+    newFleetLaunchTemplateSpecification,
+    fleetLaunchTemplateSpecification_launchTemplateId,
+    fleetLaunchTemplateSpecification_launchTemplateName,
+    fleetLaunchTemplateSpecification_version,
+
+    -- * FleetLaunchTemplateSpecificationRequest
+    FleetLaunchTemplateSpecificationRequest (..),
+    newFleetLaunchTemplateSpecificationRequest,
+    fleetLaunchTemplateSpecificationRequest_launchTemplateId,
+    fleetLaunchTemplateSpecificationRequest_launchTemplateName,
+    fleetLaunchTemplateSpecificationRequest_version,
+
+    -- * FleetSpotCapacityRebalance
+    FleetSpotCapacityRebalance (..),
+    newFleetSpotCapacityRebalance,
+    fleetSpotCapacityRebalance_replacementStrategy,
+    fleetSpotCapacityRebalance_terminationDelay,
+
+    -- * FleetSpotCapacityRebalanceRequest
+    FleetSpotCapacityRebalanceRequest (..),
+    newFleetSpotCapacityRebalanceRequest,
+    fleetSpotCapacityRebalanceRequest_replacementStrategy,
+    fleetSpotCapacityRebalanceRequest_terminationDelay,
+
+    -- * FleetSpotMaintenanceStrategies
+    FleetSpotMaintenanceStrategies (..),
+    newFleetSpotMaintenanceStrategies,
+    fleetSpotMaintenanceStrategies_capacityRebalance,
+
+    -- * FleetSpotMaintenanceStrategiesRequest
+    FleetSpotMaintenanceStrategiesRequest (..),
+    newFleetSpotMaintenanceStrategiesRequest,
+    fleetSpotMaintenanceStrategiesRequest_capacityRebalance,
+
+    -- * FlowLog
+    FlowLog (..),
+    newFlowLog,
+    flowLog_creationTime,
+    flowLog_deliverCrossAccountRole,
+    flowLog_deliverLogsErrorMessage,
+    flowLog_deliverLogsPermissionArn,
+    flowLog_deliverLogsStatus,
+    flowLog_destinationOptions,
+    flowLog_flowLogId,
+    flowLog_flowLogStatus,
+    flowLog_logDestination,
+    flowLog_logDestinationType,
+    flowLog_logFormat,
+    flowLog_logGroupName,
+    flowLog_maxAggregationInterval,
+    flowLog_resourceId,
+    flowLog_tags,
+    flowLog_trafficType,
+
+    -- * FpgaDeviceInfo
+    FpgaDeviceInfo (..),
+    newFpgaDeviceInfo,
+    fpgaDeviceInfo_count,
+    fpgaDeviceInfo_manufacturer,
+    fpgaDeviceInfo_memoryInfo,
+    fpgaDeviceInfo_name,
+
+    -- * FpgaDeviceMemoryInfo
+    FpgaDeviceMemoryInfo (..),
+    newFpgaDeviceMemoryInfo,
+    fpgaDeviceMemoryInfo_sizeInMiB,
+
+    -- * FpgaImage
+    FpgaImage (..),
+    newFpgaImage,
+    fpgaImage_createTime,
+    fpgaImage_dataRetentionSupport,
+    fpgaImage_description,
+    fpgaImage_fpgaImageGlobalId,
+    fpgaImage_fpgaImageId,
+    fpgaImage_instanceTypes,
+    fpgaImage_name,
+    fpgaImage_ownerAlias,
+    fpgaImage_ownerId,
+    fpgaImage_pciId,
+    fpgaImage_productCodes,
+    fpgaImage_public,
+    fpgaImage_shellVersion,
+    fpgaImage_state,
+    fpgaImage_tags,
+    fpgaImage_updateTime,
+
+    -- * FpgaImageAttribute
+    FpgaImageAttribute (..),
+    newFpgaImageAttribute,
+    fpgaImageAttribute_description,
+    fpgaImageAttribute_fpgaImageId,
+    fpgaImageAttribute_loadPermissions,
+    fpgaImageAttribute_name,
+    fpgaImageAttribute_productCodes,
+
+    -- * FpgaImageState
+    FpgaImageState (..),
+    newFpgaImageState,
+    fpgaImageState_code,
+    fpgaImageState_message,
+
+    -- * FpgaInfo
+    FpgaInfo (..),
+    newFpgaInfo,
+    fpgaInfo_fpgas,
+    fpgaInfo_totalFpgaMemoryInMiB,
+
+    -- * GpuDeviceInfo
+    GpuDeviceInfo (..),
+    newGpuDeviceInfo,
+    gpuDeviceInfo_count,
+    gpuDeviceInfo_manufacturer,
+    gpuDeviceInfo_memoryInfo,
+    gpuDeviceInfo_name,
+
+    -- * GpuDeviceMemoryInfo
+    GpuDeviceMemoryInfo (..),
+    newGpuDeviceMemoryInfo,
+    gpuDeviceMemoryInfo_sizeInMiB,
+
+    -- * GpuInfo
+    GpuInfo (..),
+    newGpuInfo,
+    gpuInfo_gpus,
+    gpuInfo_totalGpuMemoryInMiB,
+
+    -- * GroupIdentifier
+    GroupIdentifier (..),
+    newGroupIdentifier,
+    groupIdentifier_groupId,
+    groupIdentifier_groupName,
+
+    -- * HibernationOptions
+    HibernationOptions (..),
+    newHibernationOptions,
+    hibernationOptions_configured,
+
+    -- * HibernationOptionsRequest
+    HibernationOptionsRequest (..),
+    newHibernationOptionsRequest,
+    hibernationOptionsRequest_configured,
+
+    -- * HistoryRecord
+    HistoryRecord (..),
+    newHistoryRecord,
+    historyRecord_eventInformation,
+    historyRecord_eventType,
+    historyRecord_timestamp,
+
+    -- * HistoryRecordEntry
+    HistoryRecordEntry (..),
+    newHistoryRecordEntry,
+    historyRecordEntry_eventInformation,
+    historyRecordEntry_eventType,
+    historyRecordEntry_timestamp,
+
+    -- * Host
+    Host (..),
+    newHost,
+    host_allocationTime,
+    host_allowsMultipleInstanceTypes,
+    host_autoPlacement,
+    host_availabilityZone,
+    host_availabilityZoneId,
+    host_availableCapacity,
+    host_clientToken,
+    host_hostId,
+    host_hostProperties,
+    host_hostRecovery,
+    host_hostReservationId,
+    host_instances,
+    host_memberOfServiceLinkedResourceGroup,
+    host_outpostArn,
+    host_ownerId,
+    host_releaseTime,
+    host_state,
+    host_tags,
+
+    -- * HostInstance
+    HostInstance (..),
+    newHostInstance,
+    hostInstance_instanceId,
+    hostInstance_instanceType,
+    hostInstance_ownerId,
+
+    -- * HostOffering
+    HostOffering (..),
+    newHostOffering,
+    hostOffering_currencyCode,
+    hostOffering_duration,
+    hostOffering_hourlyPrice,
+    hostOffering_instanceFamily,
+    hostOffering_offeringId,
+    hostOffering_paymentOption,
+    hostOffering_upfrontPrice,
+
+    -- * HostProperties
+    HostProperties (..),
+    newHostProperties,
+    hostProperties_cores,
+    hostProperties_instanceFamily,
+    hostProperties_instanceType,
+    hostProperties_sockets,
+    hostProperties_totalVCpus,
+
+    -- * HostReservation
+    HostReservation (..),
+    newHostReservation,
+    hostReservation_count,
+    hostReservation_currencyCode,
+    hostReservation_duration,
+    hostReservation_end,
+    hostReservation_hostIdSet,
+    hostReservation_hostReservationId,
+    hostReservation_hourlyPrice,
+    hostReservation_instanceFamily,
+    hostReservation_offeringId,
+    hostReservation_paymentOption,
+    hostReservation_start,
+    hostReservation_state,
+    hostReservation_tags,
+    hostReservation_upfrontPrice,
+
+    -- * IKEVersionsListValue
+    IKEVersionsListValue (..),
+    newIKEVersionsListValue,
+    iKEVersionsListValue_value,
+
+    -- * IKEVersionsRequestListValue
+    IKEVersionsRequestListValue (..),
+    newIKEVersionsRequestListValue,
+    iKEVersionsRequestListValue_value,
+
+    -- * IamInstanceProfile
+    IamInstanceProfile (..),
+    newIamInstanceProfile,
+    iamInstanceProfile_arn,
+    iamInstanceProfile_id,
+
+    -- * IamInstanceProfileAssociation
+    IamInstanceProfileAssociation (..),
+    newIamInstanceProfileAssociation,
+    iamInstanceProfileAssociation_associationId,
+    iamInstanceProfileAssociation_iamInstanceProfile,
+    iamInstanceProfileAssociation_instanceId,
+    iamInstanceProfileAssociation_state,
+    iamInstanceProfileAssociation_timestamp,
+
+    -- * IamInstanceProfileSpecification
+    IamInstanceProfileSpecification (..),
+    newIamInstanceProfileSpecification,
+    iamInstanceProfileSpecification_arn,
+    iamInstanceProfileSpecification_name,
+
+    -- * IcmpTypeCode
+    IcmpTypeCode (..),
+    newIcmpTypeCode,
+    icmpTypeCode_code,
+    icmpTypeCode_type,
+
+    -- * IdFormat
+    IdFormat (..),
+    newIdFormat,
+    idFormat_deadline,
+    idFormat_resource,
+    idFormat_useLongIds,
+
+    -- * Image
+    Image (..),
+    newImage,
+    image_blockDeviceMappings,
+    image_bootMode,
+    image_creationDate,
+    image_deprecationTime,
+    image_description,
+    image_enaSupport,
+    image_imageOwnerAlias,
+    image_imdsSupport,
+    image_kernelId,
+    image_name,
+    image_platform,
+    image_platformDetails,
+    image_productCodes,
+    image_ramdiskId,
+    image_rootDeviceName,
+    image_sriovNetSupport,
+    image_stateReason,
+    image_tags,
+    image_tpmSupport,
+    image_usageOperation,
+    image_imageId,
+    image_imageLocation,
+    image_state,
+    image_ownerId,
+    image_public,
+    image_architecture,
+    image_imageType,
+    image_rootDeviceType,
+    image_virtualizationType,
+    image_hypervisor,
+
+    -- * ImageDiskContainer
+    ImageDiskContainer (..),
+    newImageDiskContainer,
+    imageDiskContainer_description,
+    imageDiskContainer_deviceName,
+    imageDiskContainer_format,
+    imageDiskContainer_snapshotId,
+    imageDiskContainer_url,
+    imageDiskContainer_userBucket,
+
+    -- * ImageRecycleBinInfo
+    ImageRecycleBinInfo (..),
+    newImageRecycleBinInfo,
+    imageRecycleBinInfo_description,
+    imageRecycleBinInfo_imageId,
+    imageRecycleBinInfo_name,
+    imageRecycleBinInfo_recycleBinEnterTime,
+    imageRecycleBinInfo_recycleBinExitTime,
+
+    -- * ImportImageLicenseConfigurationRequest
+    ImportImageLicenseConfigurationRequest (..),
+    newImportImageLicenseConfigurationRequest,
+    importImageLicenseConfigurationRequest_licenseConfigurationArn,
+
+    -- * ImportImageLicenseConfigurationResponse
+    ImportImageLicenseConfigurationResponse (..),
+    newImportImageLicenseConfigurationResponse,
+    importImageLicenseConfigurationResponse_licenseConfigurationArn,
+
+    -- * ImportImageTask
+    ImportImageTask (..),
+    newImportImageTask,
+    importImageTask_architecture,
+    importImageTask_bootMode,
+    importImageTask_description,
+    importImageTask_encrypted,
+    importImageTask_hypervisor,
+    importImageTask_imageId,
+    importImageTask_importTaskId,
+    importImageTask_kmsKeyId,
+    importImageTask_licenseSpecifications,
+    importImageTask_licenseType,
+    importImageTask_platform,
+    importImageTask_progress,
+    importImageTask_snapshotDetails,
+    importImageTask_status,
+    importImageTask_statusMessage,
+    importImageTask_tags,
+    importImageTask_usageOperation,
+
+    -- * ImportInstanceLaunchSpecification
+    ImportInstanceLaunchSpecification (..),
+    newImportInstanceLaunchSpecification,
+    importInstanceLaunchSpecification_additionalInfo,
+    importInstanceLaunchSpecification_architecture,
+    importInstanceLaunchSpecification_groupIds,
+    importInstanceLaunchSpecification_groupNames,
+    importInstanceLaunchSpecification_instanceInitiatedShutdownBehavior,
+    importInstanceLaunchSpecification_instanceType,
+    importInstanceLaunchSpecification_monitoring,
+    importInstanceLaunchSpecification_placement,
+    importInstanceLaunchSpecification_privateIpAddress,
+    importInstanceLaunchSpecification_subnetId,
+    importInstanceLaunchSpecification_userData,
+
+    -- * ImportInstanceTaskDetails
+    ImportInstanceTaskDetails (..),
+    newImportInstanceTaskDetails,
+    importInstanceTaskDetails_description,
+    importInstanceTaskDetails_instanceId,
+    importInstanceTaskDetails_platform,
+    importInstanceTaskDetails_volumes,
+
+    -- * ImportInstanceVolumeDetailItem
+    ImportInstanceVolumeDetailItem (..),
+    newImportInstanceVolumeDetailItem,
+    importInstanceVolumeDetailItem_availabilityZone,
+    importInstanceVolumeDetailItem_bytesConverted,
+    importInstanceVolumeDetailItem_description,
+    importInstanceVolumeDetailItem_image,
+    importInstanceVolumeDetailItem_status,
+    importInstanceVolumeDetailItem_statusMessage,
+    importInstanceVolumeDetailItem_volume,
+
+    -- * ImportSnapshotTask
+    ImportSnapshotTask (..),
+    newImportSnapshotTask,
+    importSnapshotTask_description,
+    importSnapshotTask_importTaskId,
+    importSnapshotTask_snapshotTaskDetail,
+    importSnapshotTask_tags,
+
+    -- * ImportVolumeTaskDetails
+    ImportVolumeTaskDetails (..),
+    newImportVolumeTaskDetails,
+    importVolumeTaskDetails_availabilityZone,
+    importVolumeTaskDetails_bytesConverted,
+    importVolumeTaskDetails_description,
+    importVolumeTaskDetails_image,
+    importVolumeTaskDetails_volume,
+
+    -- * InferenceAcceleratorInfo
+    InferenceAcceleratorInfo (..),
+    newInferenceAcceleratorInfo,
+    inferenceAcceleratorInfo_accelerators,
+
+    -- * InferenceDeviceInfo
+    InferenceDeviceInfo (..),
+    newInferenceDeviceInfo,
+    inferenceDeviceInfo_count,
+    inferenceDeviceInfo_manufacturer,
+    inferenceDeviceInfo_name,
+
+    -- * Instance
+    Instance (..),
+    newInstance,
+    instance_blockDeviceMappings,
+    instance_bootMode,
+    instance_capacityReservationId,
+    instance_capacityReservationSpecification,
+    instance_clientToken,
+    instance_cpuOptions,
+    instance_ebsOptimized,
+    instance_elasticGpuAssociations,
+    instance_elasticInferenceAcceleratorAssociations,
+    instance_enaSupport,
+    instance_enclaveOptions,
+    instance_hibernationOptions,
+    instance_iamInstanceProfile,
+    instance_instanceLifecycle,
+    instance_ipv6Address,
+    instance_kernelId,
+    instance_keyName,
+    instance_licenses,
+    instance_maintenanceOptions,
+    instance_metadataOptions,
+    instance_networkInterfaces,
+    instance_outpostArn,
+    instance_platform,
+    instance_platformDetails,
+    instance_privateDnsName,
+    instance_privateDnsNameOptions,
+    instance_privateIpAddress,
+    instance_productCodes,
+    instance_publicDnsName,
+    instance_publicIpAddress,
+    instance_ramdiskId,
+    instance_rootDeviceName,
+    instance_securityGroups,
+    instance_sourceDestCheck,
+    instance_spotInstanceRequestId,
+    instance_sriovNetSupport,
+    instance_stateReason,
+    instance_stateTransitionReason,
+    instance_subnetId,
+    instance_tags,
+    instance_tpmSupport,
+    instance_usageOperation,
+    instance_usageOperationUpdateTime,
+    instance_vpcId,
+    instance_instanceId,
+    instance_imageId,
+    instance_amiLaunchIndex,
+    instance_instanceType,
+    instance_launchTime,
+    instance_placement,
+    instance_monitoring,
+    instance_architecture,
+    instance_rootDeviceType,
+    instance_virtualizationType,
+    instance_hypervisor,
+    instance_state,
+
+    -- * InstanceBlockDeviceMapping
+    InstanceBlockDeviceMapping (..),
+    newInstanceBlockDeviceMapping,
+    instanceBlockDeviceMapping_deviceName,
+    instanceBlockDeviceMapping_ebs,
+
+    -- * InstanceBlockDeviceMappingSpecification
+    InstanceBlockDeviceMappingSpecification (..),
+    newInstanceBlockDeviceMappingSpecification,
+    instanceBlockDeviceMappingSpecification_deviceName,
+    instanceBlockDeviceMappingSpecification_ebs,
+    instanceBlockDeviceMappingSpecification_noDevice,
+    instanceBlockDeviceMappingSpecification_virtualName,
+
+    -- * InstanceCapacity
+    InstanceCapacity (..),
+    newInstanceCapacity,
+    instanceCapacity_availableCapacity,
+    instanceCapacity_instanceType,
+    instanceCapacity_totalCapacity,
+
+    -- * InstanceCount
+    InstanceCount (..),
+    newInstanceCount,
+    instanceCount_instanceCount,
+    instanceCount_state,
+
+    -- * InstanceCreditSpecification
+    InstanceCreditSpecification (..),
+    newInstanceCreditSpecification,
+    instanceCreditSpecification_cpuCredits,
+    instanceCreditSpecification_instanceId,
+
+    -- * InstanceCreditSpecificationRequest
+    InstanceCreditSpecificationRequest (..),
+    newInstanceCreditSpecificationRequest,
+    instanceCreditSpecificationRequest_cpuCredits,
+    instanceCreditSpecificationRequest_instanceId,
+
+    -- * InstanceEventWindow
+    InstanceEventWindow (..),
+    newInstanceEventWindow,
+    instanceEventWindow_associationTarget,
+    instanceEventWindow_cronExpression,
+    instanceEventWindow_instanceEventWindowId,
+    instanceEventWindow_name,
+    instanceEventWindow_state,
+    instanceEventWindow_tags,
+    instanceEventWindow_timeRanges,
+
+    -- * InstanceEventWindowAssociationRequest
+    InstanceEventWindowAssociationRequest (..),
+    newInstanceEventWindowAssociationRequest,
+    instanceEventWindowAssociationRequest_dedicatedHostIds,
+    instanceEventWindowAssociationRequest_instanceIds,
+    instanceEventWindowAssociationRequest_instanceTags,
+
+    -- * InstanceEventWindowAssociationTarget
+    InstanceEventWindowAssociationTarget (..),
+    newInstanceEventWindowAssociationTarget,
+    instanceEventWindowAssociationTarget_dedicatedHostIds,
+    instanceEventWindowAssociationTarget_instanceIds,
+    instanceEventWindowAssociationTarget_tags,
+
+    -- * InstanceEventWindowDisassociationRequest
+    InstanceEventWindowDisassociationRequest (..),
+    newInstanceEventWindowDisassociationRequest,
+    instanceEventWindowDisassociationRequest_dedicatedHostIds,
+    instanceEventWindowDisassociationRequest_instanceIds,
+    instanceEventWindowDisassociationRequest_instanceTags,
+
+    -- * InstanceEventWindowStateChange
+    InstanceEventWindowStateChange (..),
+    newInstanceEventWindowStateChange,
+    instanceEventWindowStateChange_instanceEventWindowId,
+    instanceEventWindowStateChange_state,
+
+    -- * InstanceEventWindowTimeRange
+    InstanceEventWindowTimeRange (..),
+    newInstanceEventWindowTimeRange,
+    instanceEventWindowTimeRange_endHour,
+    instanceEventWindowTimeRange_endWeekDay,
+    instanceEventWindowTimeRange_startHour,
+    instanceEventWindowTimeRange_startWeekDay,
+
+    -- * InstanceEventWindowTimeRangeRequest
+    InstanceEventWindowTimeRangeRequest (..),
+    newInstanceEventWindowTimeRangeRequest,
+    instanceEventWindowTimeRangeRequest_endHour,
+    instanceEventWindowTimeRangeRequest_endWeekDay,
+    instanceEventWindowTimeRangeRequest_startHour,
+    instanceEventWindowTimeRangeRequest_startWeekDay,
+
+    -- * InstanceExportDetails
+    InstanceExportDetails (..),
+    newInstanceExportDetails,
+    instanceExportDetails_instanceId,
+    instanceExportDetails_targetEnvironment,
+
+    -- * InstanceFamilyCreditSpecification
+    InstanceFamilyCreditSpecification (..),
+    newInstanceFamilyCreditSpecification,
+    instanceFamilyCreditSpecification_cpuCredits,
+    instanceFamilyCreditSpecification_instanceFamily,
+
+    -- * InstanceIpv4Prefix
+    InstanceIpv4Prefix (..),
+    newInstanceIpv4Prefix,
+    instanceIpv4Prefix_ipv4Prefix,
+
+    -- * InstanceIpv6Address
+    InstanceIpv6Address (..),
+    newInstanceIpv6Address,
+    instanceIpv6Address_ipv6Address,
+
+    -- * InstanceIpv6AddressRequest
+    InstanceIpv6AddressRequest (..),
+    newInstanceIpv6AddressRequest,
+    instanceIpv6AddressRequest_ipv6Address,
+
+    -- * InstanceIpv6Prefix
+    InstanceIpv6Prefix (..),
+    newInstanceIpv6Prefix,
+    instanceIpv6Prefix_ipv6Prefix,
+
+    -- * InstanceMaintenanceOptions
+    InstanceMaintenanceOptions (..),
+    newInstanceMaintenanceOptions,
+    instanceMaintenanceOptions_autoRecovery,
+
+    -- * InstanceMaintenanceOptionsRequest
+    InstanceMaintenanceOptionsRequest (..),
+    newInstanceMaintenanceOptionsRequest,
+    instanceMaintenanceOptionsRequest_autoRecovery,
+
+    -- * InstanceMarketOptionsRequest
+    InstanceMarketOptionsRequest (..),
+    newInstanceMarketOptionsRequest,
+    instanceMarketOptionsRequest_marketType,
+    instanceMarketOptionsRequest_spotOptions,
+
+    -- * InstanceMetadataOptionsRequest
+    InstanceMetadataOptionsRequest (..),
+    newInstanceMetadataOptionsRequest,
+    instanceMetadataOptionsRequest_httpEndpoint,
+    instanceMetadataOptionsRequest_httpProtocolIpv6,
+    instanceMetadataOptionsRequest_httpPutResponseHopLimit,
+    instanceMetadataOptionsRequest_httpTokens,
+    instanceMetadataOptionsRequest_instanceMetadataTags,
+
+    -- * InstanceMetadataOptionsResponse
+    InstanceMetadataOptionsResponse (..),
+    newInstanceMetadataOptionsResponse,
+    instanceMetadataOptionsResponse_httpEndpoint,
+    instanceMetadataOptionsResponse_httpProtocolIpv6,
+    instanceMetadataOptionsResponse_httpPutResponseHopLimit,
+    instanceMetadataOptionsResponse_httpTokens,
+    instanceMetadataOptionsResponse_instanceMetadataTags,
+    instanceMetadataOptionsResponse_state,
+
+    -- * InstanceMonitoring
+    InstanceMonitoring (..),
+    newInstanceMonitoring,
+    instanceMonitoring_instanceId,
+    instanceMonitoring_monitoring,
+
+    -- * InstanceNetworkInterface
+    InstanceNetworkInterface (..),
+    newInstanceNetworkInterface,
+    instanceNetworkInterface_association,
+    instanceNetworkInterface_attachment,
+    instanceNetworkInterface_description,
+    instanceNetworkInterface_groups,
+    instanceNetworkInterface_interfaceType,
+    instanceNetworkInterface_ipv4Prefixes,
+    instanceNetworkInterface_ipv6Addresses,
+    instanceNetworkInterface_ipv6Prefixes,
+    instanceNetworkInterface_macAddress,
+    instanceNetworkInterface_networkInterfaceId,
+    instanceNetworkInterface_ownerId,
+    instanceNetworkInterface_privateDnsName,
+    instanceNetworkInterface_privateIpAddress,
+    instanceNetworkInterface_privateIpAddresses,
+    instanceNetworkInterface_sourceDestCheck,
+    instanceNetworkInterface_status,
+    instanceNetworkInterface_subnetId,
+    instanceNetworkInterface_vpcId,
+
+    -- * InstanceNetworkInterfaceAssociation
+    InstanceNetworkInterfaceAssociation (..),
+    newInstanceNetworkInterfaceAssociation,
+    instanceNetworkInterfaceAssociation_carrierIp,
+    instanceNetworkInterfaceAssociation_customerOwnedIp,
+    instanceNetworkInterfaceAssociation_ipOwnerId,
+    instanceNetworkInterfaceAssociation_publicDnsName,
+    instanceNetworkInterfaceAssociation_publicIp,
+
+    -- * InstanceNetworkInterfaceAttachment
+    InstanceNetworkInterfaceAttachment (..),
+    newInstanceNetworkInterfaceAttachment,
+    instanceNetworkInterfaceAttachment_attachTime,
+    instanceNetworkInterfaceAttachment_attachmentId,
+    instanceNetworkInterfaceAttachment_deleteOnTermination,
+    instanceNetworkInterfaceAttachment_deviceIndex,
+    instanceNetworkInterfaceAttachment_networkCardIndex,
+    instanceNetworkInterfaceAttachment_status,
+
+    -- * InstanceNetworkInterfaceSpecification
+    InstanceNetworkInterfaceSpecification (..),
+    newInstanceNetworkInterfaceSpecification,
+    instanceNetworkInterfaceSpecification_associateCarrierIpAddress,
+    instanceNetworkInterfaceSpecification_associatePublicIpAddress,
+    instanceNetworkInterfaceSpecification_deleteOnTermination,
+    instanceNetworkInterfaceSpecification_description,
+    instanceNetworkInterfaceSpecification_deviceIndex,
+    instanceNetworkInterfaceSpecification_groups,
+    instanceNetworkInterfaceSpecification_interfaceType,
+    instanceNetworkInterfaceSpecification_ipv4PrefixCount,
+    instanceNetworkInterfaceSpecification_ipv4Prefixes,
+    instanceNetworkInterfaceSpecification_ipv6AddressCount,
+    instanceNetworkInterfaceSpecification_ipv6Addresses,
+    instanceNetworkInterfaceSpecification_ipv6PrefixCount,
+    instanceNetworkInterfaceSpecification_ipv6Prefixes,
+    instanceNetworkInterfaceSpecification_networkCardIndex,
+    instanceNetworkInterfaceSpecification_networkInterfaceId,
+    instanceNetworkInterfaceSpecification_privateIpAddress,
+    instanceNetworkInterfaceSpecification_privateIpAddresses,
+    instanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount,
+    instanceNetworkInterfaceSpecification_subnetId,
+
+    -- * InstancePrivateIpAddress
+    InstancePrivateIpAddress (..),
+    newInstancePrivateIpAddress,
+    instancePrivateIpAddress_association,
+    instancePrivateIpAddress_primary,
+    instancePrivateIpAddress_privateDnsName,
+    instancePrivateIpAddress_privateIpAddress,
+
+    -- * InstanceRequirements
+    InstanceRequirements (..),
+    newInstanceRequirements,
+    instanceRequirements_acceleratorCount,
+    instanceRequirements_acceleratorManufacturers,
+    instanceRequirements_acceleratorNames,
+    instanceRequirements_acceleratorTotalMemoryMiB,
+    instanceRequirements_acceleratorTypes,
+    instanceRequirements_allowedInstanceTypes,
+    instanceRequirements_bareMetal,
+    instanceRequirements_baselineEbsBandwidthMbps,
+    instanceRequirements_burstablePerformance,
+    instanceRequirements_cpuManufacturers,
+    instanceRequirements_excludedInstanceTypes,
+    instanceRequirements_instanceGenerations,
+    instanceRequirements_localStorage,
+    instanceRequirements_localStorageTypes,
+    instanceRequirements_memoryGiBPerVCpu,
+    instanceRequirements_memoryMiB,
+    instanceRequirements_networkBandwidthGbps,
+    instanceRequirements_networkInterfaceCount,
+    instanceRequirements_onDemandMaxPricePercentageOverLowestPrice,
+    instanceRequirements_requireHibernateSupport,
+    instanceRequirements_spotMaxPricePercentageOverLowestPrice,
+    instanceRequirements_totalLocalStorageGB,
+    instanceRequirements_vCpuCount,
+
+    -- * InstanceRequirementsRequest
+    InstanceRequirementsRequest (..),
+    newInstanceRequirementsRequest,
+    instanceRequirementsRequest_acceleratorCount,
+    instanceRequirementsRequest_acceleratorManufacturers,
+    instanceRequirementsRequest_acceleratorNames,
+    instanceRequirementsRequest_acceleratorTotalMemoryMiB,
+    instanceRequirementsRequest_acceleratorTypes,
+    instanceRequirementsRequest_allowedInstanceTypes,
+    instanceRequirementsRequest_bareMetal,
+    instanceRequirementsRequest_baselineEbsBandwidthMbps,
+    instanceRequirementsRequest_burstablePerformance,
+    instanceRequirementsRequest_cpuManufacturers,
+    instanceRequirementsRequest_excludedInstanceTypes,
+    instanceRequirementsRequest_instanceGenerations,
+    instanceRequirementsRequest_localStorage,
+    instanceRequirementsRequest_localStorageTypes,
+    instanceRequirementsRequest_memoryGiBPerVCpu,
+    instanceRequirementsRequest_networkBandwidthGbps,
+    instanceRequirementsRequest_networkInterfaceCount,
+    instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice,
+    instanceRequirementsRequest_requireHibernateSupport,
+    instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice,
+    instanceRequirementsRequest_totalLocalStorageGB,
+    instanceRequirementsRequest_vCpuCount,
+    instanceRequirementsRequest_memoryMiB,
+
+    -- * InstanceRequirementsWithMetadataRequest
+    InstanceRequirementsWithMetadataRequest (..),
+    newInstanceRequirementsWithMetadataRequest,
+    instanceRequirementsWithMetadataRequest_architectureTypes,
+    instanceRequirementsWithMetadataRequest_instanceRequirements,
+    instanceRequirementsWithMetadataRequest_virtualizationTypes,
+
+    -- * InstanceSpecification
+    InstanceSpecification (..),
+    newInstanceSpecification,
+    instanceSpecification_excludeBootVolume,
+    instanceSpecification_excludeDataVolumeIds,
+    instanceSpecification_instanceId,
+
+    -- * InstanceState
+    InstanceState (..),
+    newInstanceState,
+    instanceState_name,
+    instanceState_code,
+
+    -- * InstanceStateChange
+    InstanceStateChange (..),
+    newInstanceStateChange,
+    instanceStateChange_currentState,
+    instanceStateChange_instanceId,
+    instanceStateChange_previousState,
+
+    -- * InstanceStatus
+    InstanceStatus (..),
+    newInstanceStatus,
+    instanceStatus_availabilityZone,
+    instanceStatus_events,
+    instanceStatus_instanceId,
+    instanceStatus_instanceState,
+    instanceStatus_instanceStatus,
+    instanceStatus_outpostArn,
+    instanceStatus_systemStatus,
+
+    -- * InstanceStatusDetails
+    InstanceStatusDetails (..),
+    newInstanceStatusDetails,
+    instanceStatusDetails_impairedSince,
+    instanceStatusDetails_name,
+    instanceStatusDetails_status,
+
+    -- * InstanceStatusEvent
+    InstanceStatusEvent (..),
+    newInstanceStatusEvent,
+    instanceStatusEvent_code,
+    instanceStatusEvent_description,
+    instanceStatusEvent_instanceEventId,
+    instanceStatusEvent_notAfter,
+    instanceStatusEvent_notBefore,
+    instanceStatusEvent_notBeforeDeadline,
+
+    -- * InstanceStatusSummary
+    InstanceStatusSummary (..),
+    newInstanceStatusSummary,
+    instanceStatusSummary_details,
+    instanceStatusSummary_status,
+
+    -- * InstanceStorageInfo
+    InstanceStorageInfo (..),
+    newInstanceStorageInfo,
+    instanceStorageInfo_disks,
+    instanceStorageInfo_encryptionSupport,
+    instanceStorageInfo_nvmeSupport,
+    instanceStorageInfo_totalSizeInGB,
+
+    -- * InstanceTagNotificationAttribute
+    InstanceTagNotificationAttribute (..),
+    newInstanceTagNotificationAttribute,
+    instanceTagNotificationAttribute_includeAllTagsOfInstance,
+    instanceTagNotificationAttribute_instanceTagKeys,
+
+    -- * InstanceTypeInfo
+    InstanceTypeInfo (..),
+    newInstanceTypeInfo,
+    instanceTypeInfo_autoRecoverySupported,
+    instanceTypeInfo_bareMetal,
+    instanceTypeInfo_burstablePerformanceSupported,
+    instanceTypeInfo_currentGeneration,
+    instanceTypeInfo_dedicatedHostsSupported,
+    instanceTypeInfo_ebsInfo,
+    instanceTypeInfo_fpgaInfo,
+    instanceTypeInfo_freeTierEligible,
+    instanceTypeInfo_gpuInfo,
+    instanceTypeInfo_hibernationSupported,
+    instanceTypeInfo_hypervisor,
+    instanceTypeInfo_inferenceAcceleratorInfo,
+    instanceTypeInfo_instanceStorageInfo,
+    instanceTypeInfo_instanceStorageSupported,
+    instanceTypeInfo_instanceType,
+    instanceTypeInfo_memoryInfo,
+    instanceTypeInfo_networkInfo,
+    instanceTypeInfo_placementGroupInfo,
+    instanceTypeInfo_processorInfo,
+    instanceTypeInfo_supportedBootModes,
+    instanceTypeInfo_supportedRootDeviceTypes,
+    instanceTypeInfo_supportedUsageClasses,
+    instanceTypeInfo_supportedVirtualizationTypes,
+    instanceTypeInfo_vCpuInfo,
+
+    -- * InstanceTypeInfoFromInstanceRequirements
+    InstanceTypeInfoFromInstanceRequirements (..),
+    newInstanceTypeInfoFromInstanceRequirements,
+    instanceTypeInfoFromInstanceRequirements_instanceType,
+
+    -- * InstanceTypeOffering
+    InstanceTypeOffering (..),
+    newInstanceTypeOffering,
+    instanceTypeOffering_instanceType,
+    instanceTypeOffering_location,
+    instanceTypeOffering_locationType,
+
+    -- * InstanceUsage
+    InstanceUsage (..),
+    newInstanceUsage,
+    instanceUsage_accountId,
+    instanceUsage_usedInstanceCount,
+
+    -- * IntegrateServices
+    IntegrateServices (..),
+    newIntegrateServices,
+    integrateServices_athenaIntegrations,
+
+    -- * InternetGateway
+    InternetGateway (..),
+    newInternetGateway,
+    internetGateway_attachments,
+    internetGateway_ownerId,
+    internetGateway_tags,
+    internetGateway_internetGatewayId,
+
+    -- * InternetGatewayAttachment
+    InternetGatewayAttachment (..),
+    newInternetGatewayAttachment,
+    internetGatewayAttachment_state,
+    internetGatewayAttachment_vpcId,
+
+    -- * IpPermission
+    IpPermission (..),
+    newIpPermission,
+    ipPermission_fromPort,
+    ipPermission_ipRanges,
+    ipPermission_ipv6Ranges,
+    ipPermission_prefixListIds,
+    ipPermission_toPort,
+    ipPermission_userIdGroupPairs,
+    ipPermission_ipProtocol,
+
+    -- * IpRange
+    IpRange (..),
+    newIpRange,
+    ipRange_description,
+    ipRange_cidrIp,
+
+    -- * Ipam
+    Ipam (..),
+    newIpam,
+    ipam_description,
+    ipam_ipamArn,
+    ipam_ipamId,
+    ipam_ipamRegion,
+    ipam_operatingRegions,
+    ipam_ownerId,
+    ipam_privateDefaultScopeId,
+    ipam_publicDefaultScopeId,
+    ipam_scopeCount,
+    ipam_state,
+    ipam_tags,
+
+    -- * IpamAddressHistoryRecord
+    IpamAddressHistoryRecord (..),
+    newIpamAddressHistoryRecord,
+    ipamAddressHistoryRecord_resourceCidr,
+    ipamAddressHistoryRecord_resourceComplianceStatus,
+    ipamAddressHistoryRecord_resourceId,
+    ipamAddressHistoryRecord_resourceName,
+    ipamAddressHistoryRecord_resourceOverlapStatus,
+    ipamAddressHistoryRecord_resourceOwnerId,
+    ipamAddressHistoryRecord_resourceRegion,
+    ipamAddressHistoryRecord_resourceType,
+    ipamAddressHistoryRecord_sampledEndTime,
+    ipamAddressHistoryRecord_sampledStartTime,
+    ipamAddressHistoryRecord_vpcId,
+
+    -- * IpamCidrAuthorizationContext
+    IpamCidrAuthorizationContext (..),
+    newIpamCidrAuthorizationContext,
+    ipamCidrAuthorizationContext_message,
+    ipamCidrAuthorizationContext_signature,
+
+    -- * IpamOperatingRegion
+    IpamOperatingRegion (..),
+    newIpamOperatingRegion,
+    ipamOperatingRegion_regionName,
+
+    -- * IpamPool
+    IpamPool (..),
+    newIpamPool,
+    ipamPool_addressFamily,
+    ipamPool_allocationDefaultNetmaskLength,
+    ipamPool_allocationMaxNetmaskLength,
+    ipamPool_allocationMinNetmaskLength,
+    ipamPool_allocationResourceTags,
+    ipamPool_autoImport,
+    ipamPool_awsService,
+    ipamPool_description,
+    ipamPool_ipamArn,
+    ipamPool_ipamPoolArn,
+    ipamPool_ipamPoolId,
+    ipamPool_ipamRegion,
+    ipamPool_ipamScopeArn,
+    ipamPool_ipamScopeType,
+    ipamPool_locale,
+    ipamPool_ownerId,
+    ipamPool_poolDepth,
+    ipamPool_publiclyAdvertisable,
+    ipamPool_sourceIpamPoolId,
+    ipamPool_state,
+    ipamPool_stateMessage,
+    ipamPool_tags,
+
+    -- * IpamPoolAllocation
+    IpamPoolAllocation (..),
+    newIpamPoolAllocation,
+    ipamPoolAllocation_cidr,
+    ipamPoolAllocation_description,
+    ipamPoolAllocation_ipamPoolAllocationId,
+    ipamPoolAllocation_resourceId,
+    ipamPoolAllocation_resourceOwner,
+    ipamPoolAllocation_resourceRegion,
+    ipamPoolAllocation_resourceType,
+
+    -- * IpamPoolCidr
+    IpamPoolCidr (..),
+    newIpamPoolCidr,
+    ipamPoolCidr_cidr,
+    ipamPoolCidr_failureReason,
+    ipamPoolCidr_state,
+
+    -- * IpamPoolCidrFailureReason
+    IpamPoolCidrFailureReason (..),
+    newIpamPoolCidrFailureReason,
+    ipamPoolCidrFailureReason_code,
+    ipamPoolCidrFailureReason_message,
+
+    -- * IpamResourceCidr
+    IpamResourceCidr (..),
+    newIpamResourceCidr,
+    ipamResourceCidr_complianceStatus,
+    ipamResourceCidr_ipUsage,
+    ipamResourceCidr_ipamId,
+    ipamResourceCidr_ipamPoolId,
+    ipamResourceCidr_ipamScopeId,
+    ipamResourceCidr_managementState,
+    ipamResourceCidr_overlapStatus,
+    ipamResourceCidr_resourceCidr,
+    ipamResourceCidr_resourceId,
+    ipamResourceCidr_resourceName,
+    ipamResourceCidr_resourceOwnerId,
+    ipamResourceCidr_resourceRegion,
+    ipamResourceCidr_resourceTags,
+    ipamResourceCidr_resourceType,
+    ipamResourceCidr_vpcId,
+
+    -- * IpamResourceTag
+    IpamResourceTag (..),
+    newIpamResourceTag,
+    ipamResourceTag_key,
+    ipamResourceTag_value,
+
+    -- * IpamScope
+    IpamScope (..),
+    newIpamScope,
+    ipamScope_description,
+    ipamScope_ipamArn,
+    ipamScope_ipamRegion,
+    ipamScope_ipamScopeArn,
+    ipamScope_ipamScopeId,
+    ipamScope_ipamScopeType,
+    ipamScope_isDefault,
+    ipamScope_ownerId,
+    ipamScope_poolCount,
+    ipamScope_state,
+    ipamScope_tags,
+
+    -- * Ipv4PrefixSpecification
+    Ipv4PrefixSpecification (..),
+    newIpv4PrefixSpecification,
+    ipv4PrefixSpecification_ipv4Prefix,
+
+    -- * Ipv4PrefixSpecificationRequest
+    Ipv4PrefixSpecificationRequest (..),
+    newIpv4PrefixSpecificationRequest,
+    ipv4PrefixSpecificationRequest_ipv4Prefix,
+
+    -- * Ipv4PrefixSpecificationResponse
+    Ipv4PrefixSpecificationResponse (..),
+    newIpv4PrefixSpecificationResponse,
+    ipv4PrefixSpecificationResponse_ipv4Prefix,
+
+    -- * Ipv6CidrAssociation
+    Ipv6CidrAssociation (..),
+    newIpv6CidrAssociation,
+    ipv6CidrAssociation_associatedResource,
+    ipv6CidrAssociation_ipv6Cidr,
+
+    -- * Ipv6CidrBlock
+    Ipv6CidrBlock (..),
+    newIpv6CidrBlock,
+    ipv6CidrBlock_ipv6CidrBlock,
+
+    -- * Ipv6Pool
+    Ipv6Pool (..),
+    newIpv6Pool,
+    ipv6Pool_description,
+    ipv6Pool_poolCidrBlocks,
+    ipv6Pool_poolId,
+    ipv6Pool_tags,
+
+    -- * Ipv6PrefixSpecification
+    Ipv6PrefixSpecification (..),
+    newIpv6PrefixSpecification,
+    ipv6PrefixSpecification_ipv6Prefix,
+
+    -- * Ipv6PrefixSpecificationRequest
+    Ipv6PrefixSpecificationRequest (..),
+    newIpv6PrefixSpecificationRequest,
+    ipv6PrefixSpecificationRequest_ipv6Prefix,
+
+    -- * Ipv6PrefixSpecificationResponse
+    Ipv6PrefixSpecificationResponse (..),
+    newIpv6PrefixSpecificationResponse,
+    ipv6PrefixSpecificationResponse_ipv6Prefix,
+
+    -- * Ipv6Range
+    Ipv6Range (..),
+    newIpv6Range,
+    ipv6Range_cidrIpv6,
+    ipv6Range_description,
+
+    -- * KeyPairInfo
+    KeyPairInfo (..),
+    newKeyPairInfo,
+    keyPairInfo_createTime,
+    keyPairInfo_keyFingerprint,
+    keyPairInfo_keyName,
+    keyPairInfo_keyPairId,
+    keyPairInfo_keyType,
+    keyPairInfo_publicKey,
+    keyPairInfo_tags,
+
+    -- * LastError
+    LastError (..),
+    newLastError,
+    lastError_code,
+    lastError_message,
+
+    -- * LaunchPermission
+    LaunchPermission (..),
+    newLaunchPermission,
+    launchPermission_group,
+    launchPermission_organizationArn,
+    launchPermission_organizationalUnitArn,
+    launchPermission_userId,
+
+    -- * LaunchPermissionModifications
+    LaunchPermissionModifications (..),
+    newLaunchPermissionModifications,
+    launchPermissionModifications_add,
+    launchPermissionModifications_remove,
+
+    -- * LaunchSpecification
+    LaunchSpecification (..),
+    newLaunchSpecification,
+    launchSpecification_addressingType,
+    launchSpecification_blockDeviceMappings,
+    launchSpecification_ebsOptimized,
+    launchSpecification_iamInstanceProfile,
+    launchSpecification_imageId,
+    launchSpecification_instanceType,
+    launchSpecification_kernelId,
+    launchSpecification_keyName,
+    launchSpecification_monitoring,
+    launchSpecification_networkInterfaces,
+    launchSpecification_placement,
+    launchSpecification_ramdiskId,
+    launchSpecification_securityGroups,
+    launchSpecification_subnetId,
+    launchSpecification_userData,
+
+    -- * LaunchTemplate
+    LaunchTemplate (..),
+    newLaunchTemplate,
+    launchTemplate_createTime,
+    launchTemplate_createdBy,
+    launchTemplate_defaultVersionNumber,
+    launchTemplate_latestVersionNumber,
+    launchTemplate_launchTemplateId,
+    launchTemplate_launchTemplateName,
+    launchTemplate_tags,
+
+    -- * LaunchTemplateAndOverridesResponse
+    LaunchTemplateAndOverridesResponse (..),
+    newLaunchTemplateAndOverridesResponse,
+    launchTemplateAndOverridesResponse_launchTemplateSpecification,
+    launchTemplateAndOverridesResponse_overrides,
+
+    -- * LaunchTemplateBlockDeviceMapping
+    LaunchTemplateBlockDeviceMapping (..),
+    newLaunchTemplateBlockDeviceMapping,
+    launchTemplateBlockDeviceMapping_deviceName,
+    launchTemplateBlockDeviceMapping_ebs,
+    launchTemplateBlockDeviceMapping_noDevice,
+    launchTemplateBlockDeviceMapping_virtualName,
+
+    -- * LaunchTemplateBlockDeviceMappingRequest
+    LaunchTemplateBlockDeviceMappingRequest (..),
+    newLaunchTemplateBlockDeviceMappingRequest,
+    launchTemplateBlockDeviceMappingRequest_deviceName,
+    launchTemplateBlockDeviceMappingRequest_ebs,
+    launchTemplateBlockDeviceMappingRequest_noDevice,
+    launchTemplateBlockDeviceMappingRequest_virtualName,
+
+    -- * LaunchTemplateCapacityReservationSpecificationRequest
+    LaunchTemplateCapacityReservationSpecificationRequest (..),
+    newLaunchTemplateCapacityReservationSpecificationRequest,
+    launchTemplateCapacityReservationSpecificationRequest_capacityReservationPreference,
+    launchTemplateCapacityReservationSpecificationRequest_capacityReservationTarget,
+
+    -- * LaunchTemplateCapacityReservationSpecificationResponse
+    LaunchTemplateCapacityReservationSpecificationResponse (..),
+    newLaunchTemplateCapacityReservationSpecificationResponse,
+    launchTemplateCapacityReservationSpecificationResponse_capacityReservationPreference,
+    launchTemplateCapacityReservationSpecificationResponse_capacityReservationTarget,
+
+    -- * LaunchTemplateConfig
+    LaunchTemplateConfig (..),
+    newLaunchTemplateConfig,
+    launchTemplateConfig_launchTemplateSpecification,
+    launchTemplateConfig_overrides,
+
+    -- * LaunchTemplateCpuOptions
+    LaunchTemplateCpuOptions (..),
+    newLaunchTemplateCpuOptions,
+    launchTemplateCpuOptions_coreCount,
+    launchTemplateCpuOptions_threadsPerCore,
+
+    -- * LaunchTemplateCpuOptionsRequest
+    LaunchTemplateCpuOptionsRequest (..),
+    newLaunchTemplateCpuOptionsRequest,
+    launchTemplateCpuOptionsRequest_coreCount,
+    launchTemplateCpuOptionsRequest_threadsPerCore,
+
+    -- * LaunchTemplateEbsBlockDevice
+    LaunchTemplateEbsBlockDevice (..),
+    newLaunchTemplateEbsBlockDevice,
+    launchTemplateEbsBlockDevice_deleteOnTermination,
+    launchTemplateEbsBlockDevice_encrypted,
+    launchTemplateEbsBlockDevice_iops,
+    launchTemplateEbsBlockDevice_kmsKeyId,
+    launchTemplateEbsBlockDevice_snapshotId,
+    launchTemplateEbsBlockDevice_throughput,
+    launchTemplateEbsBlockDevice_volumeSize,
+    launchTemplateEbsBlockDevice_volumeType,
+
+    -- * LaunchTemplateEbsBlockDeviceRequest
+    LaunchTemplateEbsBlockDeviceRequest (..),
+    newLaunchTemplateEbsBlockDeviceRequest,
+    launchTemplateEbsBlockDeviceRequest_deleteOnTermination,
+    launchTemplateEbsBlockDeviceRequest_encrypted,
+    launchTemplateEbsBlockDeviceRequest_iops,
+    launchTemplateEbsBlockDeviceRequest_kmsKeyId,
+    launchTemplateEbsBlockDeviceRequest_snapshotId,
+    launchTemplateEbsBlockDeviceRequest_throughput,
+    launchTemplateEbsBlockDeviceRequest_volumeSize,
+    launchTemplateEbsBlockDeviceRequest_volumeType,
+
+    -- * LaunchTemplateElasticInferenceAccelerator
+    LaunchTemplateElasticInferenceAccelerator (..),
+    newLaunchTemplateElasticInferenceAccelerator,
+    launchTemplateElasticInferenceAccelerator_count,
+    launchTemplateElasticInferenceAccelerator_type,
+
+    -- * LaunchTemplateElasticInferenceAcceleratorResponse
+    LaunchTemplateElasticInferenceAcceleratorResponse (..),
+    newLaunchTemplateElasticInferenceAcceleratorResponse,
+    launchTemplateElasticInferenceAcceleratorResponse_count,
+    launchTemplateElasticInferenceAcceleratorResponse_type,
+
+    -- * LaunchTemplateEnclaveOptions
+    LaunchTemplateEnclaveOptions (..),
+    newLaunchTemplateEnclaveOptions,
+    launchTemplateEnclaveOptions_enabled,
+
+    -- * LaunchTemplateEnclaveOptionsRequest
+    LaunchTemplateEnclaveOptionsRequest (..),
+    newLaunchTemplateEnclaveOptionsRequest,
+    launchTemplateEnclaveOptionsRequest_enabled,
+
+    -- * LaunchTemplateHibernationOptions
+    LaunchTemplateHibernationOptions (..),
+    newLaunchTemplateHibernationOptions,
+    launchTemplateHibernationOptions_configured,
+
+    -- * LaunchTemplateHibernationOptionsRequest
+    LaunchTemplateHibernationOptionsRequest (..),
+    newLaunchTemplateHibernationOptionsRequest,
+    launchTemplateHibernationOptionsRequest_configured,
+
+    -- * LaunchTemplateIamInstanceProfileSpecification
+    LaunchTemplateIamInstanceProfileSpecification (..),
+    newLaunchTemplateIamInstanceProfileSpecification,
+    launchTemplateIamInstanceProfileSpecification_arn,
+    launchTemplateIamInstanceProfileSpecification_name,
+
+    -- * LaunchTemplateIamInstanceProfileSpecificationRequest
+    LaunchTemplateIamInstanceProfileSpecificationRequest (..),
+    newLaunchTemplateIamInstanceProfileSpecificationRequest,
+    launchTemplateIamInstanceProfileSpecificationRequest_arn,
+    launchTemplateIamInstanceProfileSpecificationRequest_name,
+
+    -- * LaunchTemplateInstanceMaintenanceOptions
+    LaunchTemplateInstanceMaintenanceOptions (..),
+    newLaunchTemplateInstanceMaintenanceOptions,
+    launchTemplateInstanceMaintenanceOptions_autoRecovery,
+
+    -- * LaunchTemplateInstanceMaintenanceOptionsRequest
+    LaunchTemplateInstanceMaintenanceOptionsRequest (..),
+    newLaunchTemplateInstanceMaintenanceOptionsRequest,
+    launchTemplateInstanceMaintenanceOptionsRequest_autoRecovery,
+
+    -- * LaunchTemplateInstanceMarketOptions
+    LaunchTemplateInstanceMarketOptions (..),
+    newLaunchTemplateInstanceMarketOptions,
+    launchTemplateInstanceMarketOptions_marketType,
+    launchTemplateInstanceMarketOptions_spotOptions,
+
+    -- * LaunchTemplateInstanceMarketOptionsRequest
+    LaunchTemplateInstanceMarketOptionsRequest (..),
+    newLaunchTemplateInstanceMarketOptionsRequest,
+    launchTemplateInstanceMarketOptionsRequest_marketType,
+    launchTemplateInstanceMarketOptionsRequest_spotOptions,
+
+    -- * LaunchTemplateInstanceMetadataOptions
+    LaunchTemplateInstanceMetadataOptions (..),
+    newLaunchTemplateInstanceMetadataOptions,
+    launchTemplateInstanceMetadataOptions_httpEndpoint,
+    launchTemplateInstanceMetadataOptions_httpProtocolIpv6,
+    launchTemplateInstanceMetadataOptions_httpPutResponseHopLimit,
+    launchTemplateInstanceMetadataOptions_httpTokens,
+    launchTemplateInstanceMetadataOptions_instanceMetadataTags,
+    launchTemplateInstanceMetadataOptions_state,
+
+    -- * LaunchTemplateInstanceMetadataOptionsRequest
+    LaunchTemplateInstanceMetadataOptionsRequest (..),
+    newLaunchTemplateInstanceMetadataOptionsRequest,
+    launchTemplateInstanceMetadataOptionsRequest_httpEndpoint,
+    launchTemplateInstanceMetadataOptionsRequest_httpProtocolIpv6,
+    launchTemplateInstanceMetadataOptionsRequest_httpPutResponseHopLimit,
+    launchTemplateInstanceMetadataOptionsRequest_httpTokens,
+    launchTemplateInstanceMetadataOptionsRequest_instanceMetadataTags,
+
+    -- * LaunchTemplateInstanceNetworkInterfaceSpecification
+    LaunchTemplateInstanceNetworkInterfaceSpecification (..),
+    newLaunchTemplateInstanceNetworkInterfaceSpecification,
+    launchTemplateInstanceNetworkInterfaceSpecification_associateCarrierIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecification_associatePublicIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecification_deleteOnTermination,
+    launchTemplateInstanceNetworkInterfaceSpecification_description,
+    launchTemplateInstanceNetworkInterfaceSpecification_deviceIndex,
+    launchTemplateInstanceNetworkInterfaceSpecification_groups,
+    launchTemplateInstanceNetworkInterfaceSpecification_interfaceType,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv4PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv4Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6AddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6Addresses,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_ipv6Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecification_networkCardIndex,
+    launchTemplateInstanceNetworkInterfaceSpecification_networkInterfaceId,
+    launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddresses,
+    launchTemplateInstanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecification_subnetId,
+
+    -- * LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (..),
+    newLaunchTemplateInstanceNetworkInterfaceSpecificationRequest,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_associateCarrierIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_associatePublicIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_deleteOnTermination,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_description,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_deviceIndex,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_groups,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_interfaceType,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6AddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Addresses,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6PrefixCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Prefixes,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkCardIndex,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkInterfaceId,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddress,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddresses,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_secondaryPrivateIpAddressCount,
+    launchTemplateInstanceNetworkInterfaceSpecificationRequest_subnetId,
+
+    -- * LaunchTemplateLicenseConfiguration
+    LaunchTemplateLicenseConfiguration (..),
+    newLaunchTemplateLicenseConfiguration,
+    launchTemplateLicenseConfiguration_licenseConfigurationArn,
+
+    -- * LaunchTemplateLicenseConfigurationRequest
+    LaunchTemplateLicenseConfigurationRequest (..),
+    newLaunchTemplateLicenseConfigurationRequest,
+    launchTemplateLicenseConfigurationRequest_licenseConfigurationArn,
+
+    -- * LaunchTemplateOverrides
+    LaunchTemplateOverrides (..),
+    newLaunchTemplateOverrides,
+    launchTemplateOverrides_availabilityZone,
+    launchTemplateOverrides_instanceRequirements,
+    launchTemplateOverrides_instanceType,
+    launchTemplateOverrides_priority,
+    launchTemplateOverrides_spotPrice,
+    launchTemplateOverrides_subnetId,
+    launchTemplateOverrides_weightedCapacity,
+
+    -- * LaunchTemplatePlacement
+    LaunchTemplatePlacement (..),
+    newLaunchTemplatePlacement,
+    launchTemplatePlacement_affinity,
+    launchTemplatePlacement_availabilityZone,
+    launchTemplatePlacement_groupId,
+    launchTemplatePlacement_groupName,
+    launchTemplatePlacement_hostId,
+    launchTemplatePlacement_hostResourceGroupArn,
+    launchTemplatePlacement_partitionNumber,
+    launchTemplatePlacement_spreadDomain,
+    launchTemplatePlacement_tenancy,
+
+    -- * LaunchTemplatePlacementRequest
+    LaunchTemplatePlacementRequest (..),
+    newLaunchTemplatePlacementRequest,
+    launchTemplatePlacementRequest_affinity,
+    launchTemplatePlacementRequest_availabilityZone,
+    launchTemplatePlacementRequest_groupId,
+    launchTemplatePlacementRequest_groupName,
+    launchTemplatePlacementRequest_hostId,
+    launchTemplatePlacementRequest_hostResourceGroupArn,
+    launchTemplatePlacementRequest_partitionNumber,
+    launchTemplatePlacementRequest_spreadDomain,
+    launchTemplatePlacementRequest_tenancy,
+
+    -- * LaunchTemplatePrivateDnsNameOptions
+    LaunchTemplatePrivateDnsNameOptions (..),
+    newLaunchTemplatePrivateDnsNameOptions,
+    launchTemplatePrivateDnsNameOptions_enableResourceNameDnsAAAARecord,
+    launchTemplatePrivateDnsNameOptions_enableResourceNameDnsARecord,
+    launchTemplatePrivateDnsNameOptions_hostnameType,
+
+    -- * LaunchTemplatePrivateDnsNameOptionsRequest
+    LaunchTemplatePrivateDnsNameOptionsRequest (..),
+    newLaunchTemplatePrivateDnsNameOptionsRequest,
+    launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord,
+    launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsARecord,
+    launchTemplatePrivateDnsNameOptionsRequest_hostnameType,
+
+    -- * LaunchTemplateSpecification
+    LaunchTemplateSpecification (..),
+    newLaunchTemplateSpecification,
+    launchTemplateSpecification_launchTemplateId,
+    launchTemplateSpecification_launchTemplateName,
+    launchTemplateSpecification_version,
+
+    -- * LaunchTemplateSpotMarketOptions
+    LaunchTemplateSpotMarketOptions (..),
+    newLaunchTemplateSpotMarketOptions,
+    launchTemplateSpotMarketOptions_blockDurationMinutes,
+    launchTemplateSpotMarketOptions_instanceInterruptionBehavior,
+    launchTemplateSpotMarketOptions_maxPrice,
+    launchTemplateSpotMarketOptions_spotInstanceType,
+    launchTemplateSpotMarketOptions_validUntil,
+
+    -- * LaunchTemplateSpotMarketOptionsRequest
+    LaunchTemplateSpotMarketOptionsRequest (..),
+    newLaunchTemplateSpotMarketOptionsRequest,
+    launchTemplateSpotMarketOptionsRequest_blockDurationMinutes,
+    launchTemplateSpotMarketOptionsRequest_instanceInterruptionBehavior,
+    launchTemplateSpotMarketOptionsRequest_maxPrice,
+    launchTemplateSpotMarketOptionsRequest_spotInstanceType,
+    launchTemplateSpotMarketOptionsRequest_validUntil,
+
+    -- * LaunchTemplateTagSpecification
+    LaunchTemplateTagSpecification (..),
+    newLaunchTemplateTagSpecification,
+    launchTemplateTagSpecification_resourceType,
+    launchTemplateTagSpecification_tags,
+
+    -- * LaunchTemplateTagSpecificationRequest
+    LaunchTemplateTagSpecificationRequest (..),
+    newLaunchTemplateTagSpecificationRequest,
+    launchTemplateTagSpecificationRequest_resourceType,
+    launchTemplateTagSpecificationRequest_tags,
+
+    -- * LaunchTemplateVersion
+    LaunchTemplateVersion (..),
+    newLaunchTemplateVersion,
+    launchTemplateVersion_createTime,
+    launchTemplateVersion_createdBy,
+    launchTemplateVersion_defaultVersion,
+    launchTemplateVersion_launchTemplateData,
+    launchTemplateVersion_launchTemplateId,
+    launchTemplateVersion_launchTemplateName,
+    launchTemplateVersion_versionDescription,
+    launchTemplateVersion_versionNumber,
+
+    -- * LaunchTemplatesMonitoring
+    LaunchTemplatesMonitoring (..),
+    newLaunchTemplatesMonitoring,
+    launchTemplatesMonitoring_enabled,
+
+    -- * LaunchTemplatesMonitoringRequest
+    LaunchTemplatesMonitoringRequest (..),
+    newLaunchTemplatesMonitoringRequest,
+    launchTemplatesMonitoringRequest_enabled,
+
+    -- * LicenseConfiguration
+    LicenseConfiguration (..),
+    newLicenseConfiguration,
+    licenseConfiguration_licenseConfigurationArn,
+
+    -- * LicenseConfigurationRequest
+    LicenseConfigurationRequest (..),
+    newLicenseConfigurationRequest,
+    licenseConfigurationRequest_licenseConfigurationArn,
+
+    -- * LoadBalancersConfig
+    LoadBalancersConfig (..),
+    newLoadBalancersConfig,
+    loadBalancersConfig_classicLoadBalancersConfig,
+    loadBalancersConfig_targetGroupsConfig,
+
+    -- * LoadPermission
+    LoadPermission (..),
+    newLoadPermission,
+    loadPermission_group,
+    loadPermission_userId,
+
+    -- * LoadPermissionModifications
+    LoadPermissionModifications (..),
+    newLoadPermissionModifications,
+    loadPermissionModifications_add,
+    loadPermissionModifications_remove,
+
+    -- * LoadPermissionRequest
+    LoadPermissionRequest (..),
+    newLoadPermissionRequest,
+    loadPermissionRequest_group,
+    loadPermissionRequest_userId,
+
+    -- * LocalGateway
+    LocalGateway (..),
+    newLocalGateway,
+    localGateway_localGatewayId,
+    localGateway_outpostArn,
+    localGateway_ownerId,
+    localGateway_state,
+    localGateway_tags,
+
+    -- * LocalGatewayRoute
+    LocalGatewayRoute (..),
+    newLocalGatewayRoute,
+    localGatewayRoute_coipPoolId,
+    localGatewayRoute_destinationCidrBlock,
+    localGatewayRoute_localGatewayRouteTableArn,
+    localGatewayRoute_localGatewayRouteTableId,
+    localGatewayRoute_localGatewayVirtualInterfaceGroupId,
+    localGatewayRoute_networkInterfaceId,
+    localGatewayRoute_ownerId,
+    localGatewayRoute_state,
+    localGatewayRoute_subnetId,
+    localGatewayRoute_type,
+
+    -- * LocalGatewayRouteTable
+    LocalGatewayRouteTable (..),
+    newLocalGatewayRouteTable,
+    localGatewayRouteTable_localGatewayId,
+    localGatewayRouteTable_localGatewayRouteTableArn,
+    localGatewayRouteTable_localGatewayRouteTableId,
+    localGatewayRouteTable_mode,
+    localGatewayRouteTable_outpostArn,
+    localGatewayRouteTable_ownerId,
+    localGatewayRouteTable_state,
+    localGatewayRouteTable_stateReason,
+    localGatewayRouteTable_tags,
+
+    -- * LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation (..),
+    newLocalGatewayRouteTableVirtualInterfaceGroupAssociation,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableArn,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_ownerId,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_state,
+    localGatewayRouteTableVirtualInterfaceGroupAssociation_tags,
+
+    -- * LocalGatewayRouteTableVpcAssociation
+    LocalGatewayRouteTableVpcAssociation (..),
+    newLocalGatewayRouteTableVpcAssociation,
+    localGatewayRouteTableVpcAssociation_localGatewayId,
+    localGatewayRouteTableVpcAssociation_localGatewayRouteTableArn,
+    localGatewayRouteTableVpcAssociation_localGatewayRouteTableId,
+    localGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId,
+    localGatewayRouteTableVpcAssociation_ownerId,
+    localGatewayRouteTableVpcAssociation_state,
+    localGatewayRouteTableVpcAssociation_tags,
+    localGatewayRouteTableVpcAssociation_vpcId,
+
+    -- * LocalGatewayVirtualInterface
+    LocalGatewayVirtualInterface (..),
+    newLocalGatewayVirtualInterface,
+    localGatewayVirtualInterface_localAddress,
+    localGatewayVirtualInterface_localBgpAsn,
+    localGatewayVirtualInterface_localGatewayId,
+    localGatewayVirtualInterface_localGatewayVirtualInterfaceId,
+    localGatewayVirtualInterface_ownerId,
+    localGatewayVirtualInterface_peerAddress,
+    localGatewayVirtualInterface_peerBgpAsn,
+    localGatewayVirtualInterface_tags,
+    localGatewayVirtualInterface_vlan,
+
+    -- * LocalGatewayVirtualInterfaceGroup
+    LocalGatewayVirtualInterfaceGroup (..),
+    newLocalGatewayVirtualInterfaceGroup,
+    localGatewayVirtualInterfaceGroup_localGatewayId,
+    localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceGroupId,
+    localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceIds,
+    localGatewayVirtualInterfaceGroup_ownerId,
+    localGatewayVirtualInterfaceGroup_tags,
+
+    -- * ManagedPrefixList
+    ManagedPrefixList (..),
+    newManagedPrefixList,
+    managedPrefixList_addressFamily,
+    managedPrefixList_maxEntries,
+    managedPrefixList_ownerId,
+    managedPrefixList_prefixListArn,
+    managedPrefixList_prefixListId,
+    managedPrefixList_prefixListName,
+    managedPrefixList_state,
+    managedPrefixList_stateMessage,
+    managedPrefixList_tags,
+    managedPrefixList_version,
+
+    -- * MemoryGiBPerVCpu
+    MemoryGiBPerVCpu (..),
+    newMemoryGiBPerVCpu,
+    memoryGiBPerVCpu_max,
+    memoryGiBPerVCpu_min,
+
+    -- * MemoryGiBPerVCpuRequest
+    MemoryGiBPerVCpuRequest (..),
+    newMemoryGiBPerVCpuRequest,
+    memoryGiBPerVCpuRequest_max,
+    memoryGiBPerVCpuRequest_min,
+
+    -- * MemoryInfo
+    MemoryInfo (..),
+    newMemoryInfo,
+    memoryInfo_sizeInMiB,
+
+    -- * MemoryMiB
+    MemoryMiB (..),
+    newMemoryMiB,
+    memoryMiB_max,
+    memoryMiB_min,
+
+    -- * MemoryMiBRequest
+    MemoryMiBRequest (..),
+    newMemoryMiBRequest,
+    memoryMiBRequest_max,
+    memoryMiBRequest_min,
+
+    -- * MetricPoint
+    MetricPoint (..),
+    newMetricPoint,
+    metricPoint_endDate,
+    metricPoint_startDate,
+    metricPoint_status,
+    metricPoint_value,
+
+    -- * ModifyTransitGatewayOptions
+    ModifyTransitGatewayOptions (..),
+    newModifyTransitGatewayOptions,
+    modifyTransitGatewayOptions_addTransitGatewayCidrBlocks,
+    modifyTransitGatewayOptions_amazonSideAsn,
+    modifyTransitGatewayOptions_associationDefaultRouteTableId,
+    modifyTransitGatewayOptions_autoAcceptSharedAttachments,
+    modifyTransitGatewayOptions_defaultRouteTableAssociation,
+    modifyTransitGatewayOptions_defaultRouteTablePropagation,
+    modifyTransitGatewayOptions_dnsSupport,
+    modifyTransitGatewayOptions_propagationDefaultRouteTableId,
+    modifyTransitGatewayOptions_removeTransitGatewayCidrBlocks,
+    modifyTransitGatewayOptions_vpnEcmpSupport,
+
+    -- * ModifyTransitGatewayVpcAttachmentRequestOptions
+    ModifyTransitGatewayVpcAttachmentRequestOptions (..),
+    newModifyTransitGatewayVpcAttachmentRequestOptions,
+    modifyTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport,
+    modifyTransitGatewayVpcAttachmentRequestOptions_dnsSupport,
+    modifyTransitGatewayVpcAttachmentRequestOptions_ipv6Support,
+
+    -- * ModifyVerifiedAccessEndpointEniOptions
+    ModifyVerifiedAccessEndpointEniOptions (..),
+    newModifyVerifiedAccessEndpointEniOptions,
+    modifyVerifiedAccessEndpointEniOptions_port,
+    modifyVerifiedAccessEndpointEniOptions_protocol,
+
+    -- * ModifyVerifiedAccessEndpointLoadBalancerOptions
+    ModifyVerifiedAccessEndpointLoadBalancerOptions (..),
+    newModifyVerifiedAccessEndpointLoadBalancerOptions,
+    modifyVerifiedAccessEndpointLoadBalancerOptions_port,
+    modifyVerifiedAccessEndpointLoadBalancerOptions_protocol,
+    modifyVerifiedAccessEndpointLoadBalancerOptions_subnetIds,
+
+    -- * ModifyVerifiedAccessTrustProviderOidcOptions
+    ModifyVerifiedAccessTrustProviderOidcOptions (..),
+    newModifyVerifiedAccessTrustProviderOidcOptions,
+    modifyVerifiedAccessTrustProviderOidcOptions_scope,
+
+    -- * ModifyVpnTunnelOptionsSpecification
+    ModifyVpnTunnelOptionsSpecification (..),
+    newModifyVpnTunnelOptionsSpecification,
+    modifyVpnTunnelOptionsSpecification_dPDTimeoutAction,
+    modifyVpnTunnelOptionsSpecification_dPDTimeoutSeconds,
+    modifyVpnTunnelOptionsSpecification_iKEVersions,
+    modifyVpnTunnelOptionsSpecification_logOptions,
+    modifyVpnTunnelOptionsSpecification_phase1DHGroupNumbers,
+    modifyVpnTunnelOptionsSpecification_phase1EncryptionAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase1IntegrityAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase1LifetimeSeconds,
+    modifyVpnTunnelOptionsSpecification_phase2DHGroupNumbers,
+    modifyVpnTunnelOptionsSpecification_phase2EncryptionAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase2IntegrityAlgorithms,
+    modifyVpnTunnelOptionsSpecification_phase2LifetimeSeconds,
+    modifyVpnTunnelOptionsSpecification_preSharedKey,
+    modifyVpnTunnelOptionsSpecification_rekeyFuzzPercentage,
+    modifyVpnTunnelOptionsSpecification_rekeyMarginTimeSeconds,
+    modifyVpnTunnelOptionsSpecification_replayWindowSize,
+    modifyVpnTunnelOptionsSpecification_startupAction,
+    modifyVpnTunnelOptionsSpecification_tunnelInsideCidr,
+    modifyVpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr,
+
+    -- * Monitoring
+    Monitoring (..),
+    newMonitoring,
+    monitoring_state,
+
+    -- * MovingAddressStatus
+    MovingAddressStatus (..),
+    newMovingAddressStatus,
+    movingAddressStatus_moveStatus,
+    movingAddressStatus_publicIp,
+
+    -- * NatGateway
+    NatGateway (..),
+    newNatGateway,
+    natGateway_connectivityType,
+    natGateway_createTime,
+    natGateway_deleteTime,
+    natGateway_failureCode,
+    natGateway_failureMessage,
+    natGateway_natGatewayAddresses,
+    natGateway_natGatewayId,
+    natGateway_provisionedBandwidth,
+    natGateway_state,
+    natGateway_subnetId,
+    natGateway_tags,
+    natGateway_vpcId,
+
+    -- * NatGatewayAddress
+    NatGatewayAddress (..),
+    newNatGatewayAddress,
+    natGatewayAddress_allocationId,
+    natGatewayAddress_networkInterfaceId,
+    natGatewayAddress_privateIp,
+    natGatewayAddress_publicIp,
+
+    -- * NetworkAcl
+    NetworkAcl (..),
+    newNetworkAcl,
+    networkAcl_associations,
+    networkAcl_entries,
+    networkAcl_isDefault,
+    networkAcl_networkAclId,
+    networkAcl_ownerId,
+    networkAcl_tags,
+    networkAcl_vpcId,
+
+    -- * NetworkAclAssociation
+    NetworkAclAssociation (..),
+    newNetworkAclAssociation,
+    networkAclAssociation_networkAclAssociationId,
+    networkAclAssociation_networkAclId,
+    networkAclAssociation_subnetId,
+
+    -- * NetworkAclEntry
+    NetworkAclEntry (..),
+    newNetworkAclEntry,
+    networkAclEntry_cidrBlock,
+    networkAclEntry_egress,
+    networkAclEntry_icmpTypeCode,
+    networkAclEntry_ipv6CidrBlock,
+    networkAclEntry_portRange,
+    networkAclEntry_protocol,
+    networkAclEntry_ruleAction,
+    networkAclEntry_ruleNumber,
+
+    -- * NetworkBandwidthGbps
+    NetworkBandwidthGbps (..),
+    newNetworkBandwidthGbps,
+    networkBandwidthGbps_max,
+    networkBandwidthGbps_min,
+
+    -- * NetworkBandwidthGbpsRequest
+    NetworkBandwidthGbpsRequest (..),
+    newNetworkBandwidthGbpsRequest,
+    networkBandwidthGbpsRequest_max,
+    networkBandwidthGbpsRequest_min,
+
+    -- * NetworkCardInfo
+    NetworkCardInfo (..),
+    newNetworkCardInfo,
+    networkCardInfo_maximumNetworkInterfaces,
+    networkCardInfo_networkCardIndex,
+    networkCardInfo_networkPerformance,
+
+    -- * NetworkInfo
+    NetworkInfo (..),
+    newNetworkInfo,
+    networkInfo_defaultNetworkCardIndex,
+    networkInfo_efaInfo,
+    networkInfo_efaSupported,
+    networkInfo_enaSrdSupported,
+    networkInfo_enaSupport,
+    networkInfo_encryptionInTransitSupported,
+    networkInfo_ipv4AddressesPerInterface,
+    networkInfo_ipv6AddressesPerInterface,
+    networkInfo_ipv6Supported,
+    networkInfo_maximumNetworkCards,
+    networkInfo_maximumNetworkInterfaces,
+    networkInfo_networkCards,
+    networkInfo_networkPerformance,
+
+    -- * NetworkInsightsAccessScope
+    NetworkInsightsAccessScope (..),
+    newNetworkInsightsAccessScope,
+    networkInsightsAccessScope_createdDate,
+    networkInsightsAccessScope_networkInsightsAccessScopeArn,
+    networkInsightsAccessScope_networkInsightsAccessScopeId,
+    networkInsightsAccessScope_tags,
+    networkInsightsAccessScope_updatedDate,
+
+    -- * NetworkInsightsAccessScopeAnalysis
+    NetworkInsightsAccessScopeAnalysis (..),
+    newNetworkInsightsAccessScopeAnalysis,
+    networkInsightsAccessScopeAnalysis_analyzedEniCount,
+    networkInsightsAccessScopeAnalysis_endDate,
+    networkInsightsAccessScopeAnalysis_findingsFound,
+    networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisArn,
+    networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId,
+    networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId,
+    networkInsightsAccessScopeAnalysis_startDate,
+    networkInsightsAccessScopeAnalysis_status,
+    networkInsightsAccessScopeAnalysis_statusMessage,
+    networkInsightsAccessScopeAnalysis_tags,
+    networkInsightsAccessScopeAnalysis_warningMessage,
+
+    -- * NetworkInsightsAccessScopeContent
+    NetworkInsightsAccessScopeContent (..),
+    newNetworkInsightsAccessScopeContent,
+    networkInsightsAccessScopeContent_excludePaths,
+    networkInsightsAccessScopeContent_matchPaths,
+    networkInsightsAccessScopeContent_networkInsightsAccessScopeId,
+
+    -- * NetworkInsightsAnalysis
+    NetworkInsightsAnalysis (..),
+    newNetworkInsightsAnalysis,
+    networkInsightsAnalysis_additionalAccounts,
+    networkInsightsAnalysis_alternatePathHints,
+    networkInsightsAnalysis_explanations,
+    networkInsightsAnalysis_filterInArns,
+    networkInsightsAnalysis_forwardPathComponents,
+    networkInsightsAnalysis_networkInsightsAnalysisArn,
+    networkInsightsAnalysis_networkInsightsAnalysisId,
+    networkInsightsAnalysis_networkInsightsPathId,
+    networkInsightsAnalysis_networkPathFound,
+    networkInsightsAnalysis_returnPathComponents,
+    networkInsightsAnalysis_startDate,
+    networkInsightsAnalysis_status,
+    networkInsightsAnalysis_statusMessage,
+    networkInsightsAnalysis_suggestedAccounts,
+    networkInsightsAnalysis_tags,
+    networkInsightsAnalysis_warningMessage,
+
+    -- * NetworkInsightsPath
+    NetworkInsightsPath (..),
+    newNetworkInsightsPath,
+    networkInsightsPath_createdDate,
+    networkInsightsPath_destination,
+    networkInsightsPath_destinationArn,
+    networkInsightsPath_destinationIp,
+    networkInsightsPath_destinationPort,
+    networkInsightsPath_networkInsightsPathArn,
+    networkInsightsPath_networkInsightsPathId,
+    networkInsightsPath_protocol,
+    networkInsightsPath_source,
+    networkInsightsPath_sourceArn,
+    networkInsightsPath_sourceIp,
+    networkInsightsPath_tags,
+
+    -- * NetworkInterface
+    NetworkInterface (..),
+    newNetworkInterface,
+    networkInterface_association,
+    networkInterface_attachment,
+    networkInterface_availabilityZone,
+    networkInterface_denyAllIgwTraffic,
+    networkInterface_description,
+    networkInterface_groups,
+    networkInterface_interfaceType,
+    networkInterface_ipv4Prefixes,
+    networkInterface_ipv6Address,
+    networkInterface_ipv6Addresses,
+    networkInterface_ipv6Native,
+    networkInterface_ipv6Prefixes,
+    networkInterface_macAddress,
+    networkInterface_networkInterfaceId,
+    networkInterface_outpostArn,
+    networkInterface_ownerId,
+    networkInterface_privateDnsName,
+    networkInterface_privateIpAddress,
+    networkInterface_privateIpAddresses,
+    networkInterface_requesterId,
+    networkInterface_requesterManaged,
+    networkInterface_sourceDestCheck,
+    networkInterface_status,
+    networkInterface_subnetId,
+    networkInterface_tagSet,
+    networkInterface_vpcId,
+
+    -- * NetworkInterfaceAssociation
+    NetworkInterfaceAssociation (..),
+    newNetworkInterfaceAssociation,
+    networkInterfaceAssociation_allocationId,
+    networkInterfaceAssociation_associationId,
+    networkInterfaceAssociation_carrierIp,
+    networkInterfaceAssociation_customerOwnedIp,
+    networkInterfaceAssociation_ipOwnerId,
+    networkInterfaceAssociation_publicDnsName,
+    networkInterfaceAssociation_publicIp,
+
+    -- * NetworkInterfaceAttachment
+    NetworkInterfaceAttachment (..),
+    newNetworkInterfaceAttachment,
+    networkInterfaceAttachment_attachTime,
+    networkInterfaceAttachment_attachmentId,
+    networkInterfaceAttachment_deleteOnTermination,
+    networkInterfaceAttachment_deviceIndex,
+    networkInterfaceAttachment_enaSrdSpecification,
+    networkInterfaceAttachment_instanceId,
+    networkInterfaceAttachment_instanceOwnerId,
+    networkInterfaceAttachment_networkCardIndex,
+    networkInterfaceAttachment_status,
+
+    -- * NetworkInterfaceAttachmentChanges
+    NetworkInterfaceAttachmentChanges (..),
+    newNetworkInterfaceAttachmentChanges,
+    networkInterfaceAttachmentChanges_attachmentId,
+    networkInterfaceAttachmentChanges_deleteOnTermination,
+
+    -- * NetworkInterfaceCount
+    NetworkInterfaceCount (..),
+    newNetworkInterfaceCount,
+    networkInterfaceCount_max,
+    networkInterfaceCount_min,
+
+    -- * NetworkInterfaceCountRequest
+    NetworkInterfaceCountRequest (..),
+    newNetworkInterfaceCountRequest,
+    networkInterfaceCountRequest_max,
+    networkInterfaceCountRequest_min,
+
+    -- * NetworkInterfaceIpv6Address
+    NetworkInterfaceIpv6Address (..),
+    newNetworkInterfaceIpv6Address,
+    networkInterfaceIpv6Address_ipv6Address,
+
+    -- * NetworkInterfacePermission
+    NetworkInterfacePermission (..),
+    newNetworkInterfacePermission,
+    networkInterfacePermission_awsAccountId,
+    networkInterfacePermission_awsService,
+    networkInterfacePermission_networkInterfaceId,
+    networkInterfacePermission_networkInterfacePermissionId,
+    networkInterfacePermission_permission,
+    networkInterfacePermission_permissionState,
+
+    -- * NetworkInterfacePermissionState
+    NetworkInterfacePermissionState (..),
+    newNetworkInterfacePermissionState,
+    networkInterfacePermissionState_state,
+    networkInterfacePermissionState_statusMessage,
+
+    -- * NetworkInterfacePrivateIpAddress
+    NetworkInterfacePrivateIpAddress (..),
+    newNetworkInterfacePrivateIpAddress,
+    networkInterfacePrivateIpAddress_association,
+    networkInterfacePrivateIpAddress_primary,
+    networkInterfacePrivateIpAddress_privateDnsName,
+    networkInterfacePrivateIpAddress_privateIpAddress,
+
+    -- * NewDhcpConfiguration
+    NewDhcpConfiguration (..),
+    newNewDhcpConfiguration,
+    newDhcpConfiguration_key,
+    newDhcpConfiguration_values,
+
+    -- * OidcOptions
+    OidcOptions (..),
+    newOidcOptions,
+    oidcOptions_authorizationEndpoint,
+    oidcOptions_clientId,
+    oidcOptions_clientSecret,
+    oidcOptions_issuer,
+    oidcOptions_scope,
+    oidcOptions_tokenEndpoint,
+    oidcOptions_userInfoEndpoint,
+
+    -- * OnDemandOptions
+    OnDemandOptions (..),
+    newOnDemandOptions,
+    onDemandOptions_allocationStrategy,
+    onDemandOptions_capacityReservationOptions,
+    onDemandOptions_maxTotalPrice,
+    onDemandOptions_minTargetCapacity,
+    onDemandOptions_singleAvailabilityZone,
+    onDemandOptions_singleInstanceType,
+
+    -- * OnDemandOptionsRequest
+    OnDemandOptionsRequest (..),
+    newOnDemandOptionsRequest,
+    onDemandOptionsRequest_allocationStrategy,
+    onDemandOptionsRequest_capacityReservationOptions,
+    onDemandOptionsRequest_maxTotalPrice,
+    onDemandOptionsRequest_minTargetCapacity,
+    onDemandOptionsRequest_singleAvailabilityZone,
+    onDemandOptionsRequest_singleInstanceType,
+
+    -- * PacketHeaderStatement
+    PacketHeaderStatement (..),
+    newPacketHeaderStatement,
+    packetHeaderStatement_destinationAddresses,
+    packetHeaderStatement_destinationPorts,
+    packetHeaderStatement_destinationPrefixLists,
+    packetHeaderStatement_protocols,
+    packetHeaderStatement_sourceAddresses,
+    packetHeaderStatement_sourcePorts,
+    packetHeaderStatement_sourcePrefixLists,
+
+    -- * PacketHeaderStatementRequest
+    PacketHeaderStatementRequest (..),
+    newPacketHeaderStatementRequest,
+    packetHeaderStatementRequest_destinationAddresses,
+    packetHeaderStatementRequest_destinationPorts,
+    packetHeaderStatementRequest_destinationPrefixLists,
+    packetHeaderStatementRequest_protocols,
+    packetHeaderStatementRequest_sourceAddresses,
+    packetHeaderStatementRequest_sourcePorts,
+    packetHeaderStatementRequest_sourcePrefixLists,
+
+    -- * PathComponent
+    PathComponent (..),
+    newPathComponent,
+    pathComponent_aclRule,
+    pathComponent_additionalDetails,
+    pathComponent_attachedTo,
+    pathComponent_component,
+    pathComponent_destinationVpc,
+    pathComponent_elasticLoadBalancerListener,
+    pathComponent_explanations,
+    pathComponent_inboundHeader,
+    pathComponent_outboundHeader,
+    pathComponent_routeTableRoute,
+    pathComponent_securityGroupRule,
+    pathComponent_sequenceNumber,
+    pathComponent_sourceVpc,
+    pathComponent_subnet,
+    pathComponent_transitGateway,
+    pathComponent_transitGatewayRouteTableRoute,
+    pathComponent_vpc,
+
+    -- * PathStatement
+    PathStatement (..),
+    newPathStatement,
+    pathStatement_packetHeaderStatement,
+    pathStatement_resourceStatement,
+
+    -- * PathStatementRequest
+    PathStatementRequest (..),
+    newPathStatementRequest,
+    pathStatementRequest_packetHeaderStatement,
+    pathStatementRequest_resourceStatement,
+
+    -- * PciId
+    PciId (..),
+    newPciId,
+    pciId_deviceId,
+    pciId_subsystemId,
+    pciId_subsystemVendorId,
+    pciId_vendorId,
+
+    -- * PeeringAttachmentStatus
+    PeeringAttachmentStatus (..),
+    newPeeringAttachmentStatus,
+    peeringAttachmentStatus_code,
+    peeringAttachmentStatus_message,
+
+    -- * PeeringConnectionOptions
+    PeeringConnectionOptions (..),
+    newPeeringConnectionOptions,
+    peeringConnectionOptions_allowDnsResolutionFromRemoteVpc,
+    peeringConnectionOptions_allowEgressFromLocalClassicLinkToRemoteVpc,
+    peeringConnectionOptions_allowEgressFromLocalVpcToRemoteClassicLink,
+
+    -- * PeeringConnectionOptionsRequest
+    PeeringConnectionOptionsRequest (..),
+    newPeeringConnectionOptionsRequest,
+    peeringConnectionOptionsRequest_allowDnsResolutionFromRemoteVpc,
+    peeringConnectionOptionsRequest_allowEgressFromLocalClassicLinkToRemoteVpc,
+    peeringConnectionOptionsRequest_allowEgressFromLocalVpcToRemoteClassicLink,
+
+    -- * PeeringTgwInfo
+    PeeringTgwInfo (..),
+    newPeeringTgwInfo,
+    peeringTgwInfo_coreNetworkId,
+    peeringTgwInfo_ownerId,
+    peeringTgwInfo_region,
+    peeringTgwInfo_transitGatewayId,
+
+    -- * Phase1DHGroupNumbersListValue
+    Phase1DHGroupNumbersListValue (..),
+    newPhase1DHGroupNumbersListValue,
+    phase1DHGroupNumbersListValue_value,
+
+    -- * Phase1DHGroupNumbersRequestListValue
+    Phase1DHGroupNumbersRequestListValue (..),
+    newPhase1DHGroupNumbersRequestListValue,
+    phase1DHGroupNumbersRequestListValue_value,
+
+    -- * Phase1EncryptionAlgorithmsListValue
+    Phase1EncryptionAlgorithmsListValue (..),
+    newPhase1EncryptionAlgorithmsListValue,
+    phase1EncryptionAlgorithmsListValue_value,
+
+    -- * Phase1EncryptionAlgorithmsRequestListValue
+    Phase1EncryptionAlgorithmsRequestListValue (..),
+    newPhase1EncryptionAlgorithmsRequestListValue,
+    phase1EncryptionAlgorithmsRequestListValue_value,
+
+    -- * Phase1IntegrityAlgorithmsListValue
+    Phase1IntegrityAlgorithmsListValue (..),
+    newPhase1IntegrityAlgorithmsListValue,
+    phase1IntegrityAlgorithmsListValue_value,
+
+    -- * Phase1IntegrityAlgorithmsRequestListValue
+    Phase1IntegrityAlgorithmsRequestListValue (..),
+    newPhase1IntegrityAlgorithmsRequestListValue,
+    phase1IntegrityAlgorithmsRequestListValue_value,
+
+    -- * Phase2DHGroupNumbersListValue
+    Phase2DHGroupNumbersListValue (..),
+    newPhase2DHGroupNumbersListValue,
+    phase2DHGroupNumbersListValue_value,
+
+    -- * Phase2DHGroupNumbersRequestListValue
+    Phase2DHGroupNumbersRequestListValue (..),
+    newPhase2DHGroupNumbersRequestListValue,
+    phase2DHGroupNumbersRequestListValue_value,
+
+    -- * Phase2EncryptionAlgorithmsListValue
+    Phase2EncryptionAlgorithmsListValue (..),
+    newPhase2EncryptionAlgorithmsListValue,
+    phase2EncryptionAlgorithmsListValue_value,
+
+    -- * Phase2EncryptionAlgorithmsRequestListValue
+    Phase2EncryptionAlgorithmsRequestListValue (..),
+    newPhase2EncryptionAlgorithmsRequestListValue,
+    phase2EncryptionAlgorithmsRequestListValue_value,
+
+    -- * Phase2IntegrityAlgorithmsListValue
+    Phase2IntegrityAlgorithmsListValue (..),
+    newPhase2IntegrityAlgorithmsListValue,
+    phase2IntegrityAlgorithmsListValue_value,
+
+    -- * Phase2IntegrityAlgorithmsRequestListValue
+    Phase2IntegrityAlgorithmsRequestListValue (..),
+    newPhase2IntegrityAlgorithmsRequestListValue,
+    phase2IntegrityAlgorithmsRequestListValue_value,
+
+    -- * Placement
+    Placement (..),
+    newPlacement,
+    placement_affinity,
+    placement_availabilityZone,
+    placement_groupId,
+    placement_groupName,
+    placement_hostId,
+    placement_hostResourceGroupArn,
+    placement_partitionNumber,
+    placement_spreadDomain,
+    placement_tenancy,
+
+    -- * PlacementGroup
+    PlacementGroup (..),
+    newPlacementGroup,
+    placementGroup_groupArn,
+    placementGroup_groupId,
+    placementGroup_groupName,
+    placementGroup_partitionCount,
+    placementGroup_spreadLevel,
+    placementGroup_state,
+    placementGroup_strategy,
+    placementGroup_tags,
+
+    -- * PlacementGroupInfo
+    PlacementGroupInfo (..),
+    newPlacementGroupInfo,
+    placementGroupInfo_supportedStrategies,
+
+    -- * PlacementResponse
+    PlacementResponse (..),
+    newPlacementResponse,
+    placementResponse_groupName,
+
+    -- * PoolCidrBlock
+    PoolCidrBlock (..),
+    newPoolCidrBlock,
+    poolCidrBlock_cidr,
+
+    -- * PortRange
+    PortRange (..),
+    newPortRange,
+    portRange_from,
+    portRange_to,
+
+    -- * PrefixList
+    PrefixList (..),
+    newPrefixList,
+    prefixList_cidrs,
+    prefixList_prefixListId,
+    prefixList_prefixListName,
+
+    -- * PrefixListAssociation
+    PrefixListAssociation (..),
+    newPrefixListAssociation,
+    prefixListAssociation_resourceId,
+    prefixListAssociation_resourceOwner,
+
+    -- * PrefixListEntry
+    PrefixListEntry (..),
+    newPrefixListEntry,
+    prefixListEntry_cidr,
+    prefixListEntry_description,
+
+    -- * PrefixListId
+    PrefixListId (..),
+    newPrefixListId,
+    prefixListId_description,
+    prefixListId_prefixListId,
+
+    -- * PriceSchedule
+    PriceSchedule (..),
+    newPriceSchedule,
+    priceSchedule_active,
+    priceSchedule_currencyCode,
+    priceSchedule_price,
+    priceSchedule_term,
+
+    -- * PriceScheduleSpecification
+    PriceScheduleSpecification (..),
+    newPriceScheduleSpecification,
+    priceScheduleSpecification_currencyCode,
+    priceScheduleSpecification_price,
+    priceScheduleSpecification_term,
+
+    -- * PricingDetail
+    PricingDetail (..),
+    newPricingDetail,
+    pricingDetail_count,
+    pricingDetail_price,
+
+    -- * PrincipalIdFormat
+    PrincipalIdFormat (..),
+    newPrincipalIdFormat,
+    principalIdFormat_arn,
+    principalIdFormat_statuses,
+
+    -- * PrivateDnsDetails
+    PrivateDnsDetails (..),
+    newPrivateDnsDetails,
+    privateDnsDetails_privateDnsName,
+
+    -- * PrivateDnsNameConfiguration
+    PrivateDnsNameConfiguration (..),
+    newPrivateDnsNameConfiguration,
+    privateDnsNameConfiguration_name,
+    privateDnsNameConfiguration_state,
+    privateDnsNameConfiguration_type,
+    privateDnsNameConfiguration_value,
+
+    -- * PrivateDnsNameOptionsOnLaunch
+    PrivateDnsNameOptionsOnLaunch (..),
+    newPrivateDnsNameOptionsOnLaunch,
+    privateDnsNameOptionsOnLaunch_enableResourceNameDnsAAAARecord,
+    privateDnsNameOptionsOnLaunch_enableResourceNameDnsARecord,
+    privateDnsNameOptionsOnLaunch_hostnameType,
+
+    -- * PrivateDnsNameOptionsRequest
+    PrivateDnsNameOptionsRequest (..),
+    newPrivateDnsNameOptionsRequest,
+    privateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord,
+    privateDnsNameOptionsRequest_enableResourceNameDnsARecord,
+    privateDnsNameOptionsRequest_hostnameType,
+
+    -- * PrivateDnsNameOptionsResponse
+    PrivateDnsNameOptionsResponse (..),
+    newPrivateDnsNameOptionsResponse,
+    privateDnsNameOptionsResponse_enableResourceNameDnsAAAARecord,
+    privateDnsNameOptionsResponse_enableResourceNameDnsARecord,
+    privateDnsNameOptionsResponse_hostnameType,
+
+    -- * PrivateIpAddressSpecification
+    PrivateIpAddressSpecification (..),
+    newPrivateIpAddressSpecification,
+    privateIpAddressSpecification_primary,
+    privateIpAddressSpecification_privateIpAddress,
+
+    -- * ProcessorInfo
+    ProcessorInfo (..),
+    newProcessorInfo,
+    processorInfo_supportedArchitectures,
+    processorInfo_sustainedClockSpeedInGhz,
+
+    -- * ProductCode
+    ProductCode (..),
+    newProductCode,
+    productCode_productCodeId,
+    productCode_productCodeType,
+
+    -- * PropagatingVgw
+    PropagatingVgw (..),
+    newPropagatingVgw,
+    propagatingVgw_gatewayId,
+
+    -- * ProvisionedBandwidth
+    ProvisionedBandwidth (..),
+    newProvisionedBandwidth,
+    provisionedBandwidth_provisionTime,
+    provisionedBandwidth_provisioned,
+    provisionedBandwidth_requestTime,
+    provisionedBandwidth_requested,
+    provisionedBandwidth_status,
+
+    -- * PtrUpdateStatus
+    PtrUpdateStatus (..),
+    newPtrUpdateStatus,
+    ptrUpdateStatus_reason,
+    ptrUpdateStatus_status,
+    ptrUpdateStatus_value,
+
+    -- * PublicIpv4Pool
+    PublicIpv4Pool (..),
+    newPublicIpv4Pool,
+    publicIpv4Pool_description,
+    publicIpv4Pool_networkBorderGroup,
+    publicIpv4Pool_poolAddressRanges,
+    publicIpv4Pool_poolId,
+    publicIpv4Pool_tags,
+    publicIpv4Pool_totalAddressCount,
+    publicIpv4Pool_totalAvailableAddressCount,
+
+    -- * PublicIpv4PoolRange
+    PublicIpv4PoolRange (..),
+    newPublicIpv4PoolRange,
+    publicIpv4PoolRange_addressCount,
+    publicIpv4PoolRange_availableAddressCount,
+    publicIpv4PoolRange_firstAddress,
+    publicIpv4PoolRange_lastAddress,
+
+    -- * Purchase
+    Purchase (..),
+    newPurchase,
+    purchase_currencyCode,
+    purchase_duration,
+    purchase_hostIdSet,
+    purchase_hostReservationId,
+    purchase_hourlyPrice,
+    purchase_instanceFamily,
+    purchase_paymentOption,
+    purchase_upfrontPrice,
+
+    -- * PurchaseRequest
+    PurchaseRequest (..),
+    newPurchaseRequest,
+    purchaseRequest_instanceCount,
+    purchaseRequest_purchaseToken,
+
+    -- * RecurringCharge
+    RecurringCharge (..),
+    newRecurringCharge,
+    recurringCharge_amount,
+    recurringCharge_frequency,
+
+    -- * ReferencedSecurityGroup
+    ReferencedSecurityGroup (..),
+    newReferencedSecurityGroup,
+    referencedSecurityGroup_groupId,
+    referencedSecurityGroup_peeringStatus,
+    referencedSecurityGroup_userId,
+    referencedSecurityGroup_vpcId,
+    referencedSecurityGroup_vpcPeeringConnectionId,
+
+    -- * RegionInfo
+    RegionInfo (..),
+    newRegionInfo,
+    regionInfo_endpoint,
+    regionInfo_optInStatus,
+    regionInfo_regionName,
+
+    -- * RegisterInstanceTagAttributeRequest
+    RegisterInstanceTagAttributeRequest (..),
+    newRegisterInstanceTagAttributeRequest,
+    registerInstanceTagAttributeRequest_includeAllTagsOfInstance,
+    registerInstanceTagAttributeRequest_instanceTagKeys,
+
+    -- * RemoveIpamOperatingRegion
+    RemoveIpamOperatingRegion (..),
+    newRemoveIpamOperatingRegion,
+    removeIpamOperatingRegion_regionName,
+
+    -- * RemovePrefixListEntry
+    RemovePrefixListEntry (..),
+    newRemovePrefixListEntry,
+    removePrefixListEntry_cidr,
+
+    -- * ReplaceRootVolumeTask
+    ReplaceRootVolumeTask (..),
+    newReplaceRootVolumeTask,
+    replaceRootVolumeTask_completeTime,
+    replaceRootVolumeTask_deleteReplacedRootVolume,
+    replaceRootVolumeTask_imageId,
+    replaceRootVolumeTask_instanceId,
+    replaceRootVolumeTask_replaceRootVolumeTaskId,
+    replaceRootVolumeTask_snapshotId,
+    replaceRootVolumeTask_startTime,
+    replaceRootVolumeTask_tags,
+    replaceRootVolumeTask_taskState,
+
+    -- * RequestIpamResourceTag
+    RequestIpamResourceTag (..),
+    newRequestIpamResourceTag,
+    requestIpamResourceTag_key,
+    requestIpamResourceTag_value,
+
+    -- * RequestLaunchTemplateData
+    RequestLaunchTemplateData (..),
+    newRequestLaunchTemplateData,
+    requestLaunchTemplateData_blockDeviceMappings,
+    requestLaunchTemplateData_capacityReservationSpecification,
+    requestLaunchTemplateData_cpuOptions,
+    requestLaunchTemplateData_creditSpecification,
+    requestLaunchTemplateData_disableApiStop,
+    requestLaunchTemplateData_disableApiTermination,
+    requestLaunchTemplateData_ebsOptimized,
+    requestLaunchTemplateData_elasticGpuSpecifications,
+    requestLaunchTemplateData_elasticInferenceAccelerators,
+    requestLaunchTemplateData_enclaveOptions,
+    requestLaunchTemplateData_hibernationOptions,
+    requestLaunchTemplateData_iamInstanceProfile,
+    requestLaunchTemplateData_imageId,
+    requestLaunchTemplateData_instanceInitiatedShutdownBehavior,
+    requestLaunchTemplateData_instanceMarketOptions,
+    requestLaunchTemplateData_instanceRequirements,
+    requestLaunchTemplateData_instanceType,
+    requestLaunchTemplateData_kernelId,
+    requestLaunchTemplateData_keyName,
+    requestLaunchTemplateData_licenseSpecifications,
+    requestLaunchTemplateData_maintenanceOptions,
+    requestLaunchTemplateData_metadataOptions,
+    requestLaunchTemplateData_monitoring,
+    requestLaunchTemplateData_networkInterfaces,
+    requestLaunchTemplateData_placement,
+    requestLaunchTemplateData_privateDnsNameOptions,
+    requestLaunchTemplateData_ramDiskId,
+    requestLaunchTemplateData_securityGroupIds,
+    requestLaunchTemplateData_securityGroups,
+    requestLaunchTemplateData_tagSpecifications,
+    requestLaunchTemplateData_userData,
+
+    -- * RequestSpotLaunchSpecification
+    RequestSpotLaunchSpecification (..),
+    newRequestSpotLaunchSpecification,
+    requestSpotLaunchSpecification_addressingType,
+    requestSpotLaunchSpecification_blockDeviceMappings,
+    requestSpotLaunchSpecification_ebsOptimized,
+    requestSpotLaunchSpecification_iamInstanceProfile,
+    requestSpotLaunchSpecification_imageId,
+    requestSpotLaunchSpecification_instanceType,
+    requestSpotLaunchSpecification_kernelId,
+    requestSpotLaunchSpecification_keyName,
+    requestSpotLaunchSpecification_monitoring,
+    requestSpotLaunchSpecification_networkInterfaces,
+    requestSpotLaunchSpecification_placement,
+    requestSpotLaunchSpecification_ramdiskId,
+    requestSpotLaunchSpecification_securityGroupIds,
+    requestSpotLaunchSpecification_securityGroups,
+    requestSpotLaunchSpecification_subnetId,
+    requestSpotLaunchSpecification_userData,
+
+    -- * Reservation
+    Reservation (..),
+    newReservation,
+    reservation_groups,
+    reservation_instances,
+    reservation_requesterId,
+    reservation_reservationId,
+    reservation_ownerId,
+
+    -- * ReservationFleetInstanceSpecification
+    ReservationFleetInstanceSpecification (..),
+    newReservationFleetInstanceSpecification,
+    reservationFleetInstanceSpecification_availabilityZone,
+    reservationFleetInstanceSpecification_availabilityZoneId,
+    reservationFleetInstanceSpecification_ebsOptimized,
+    reservationFleetInstanceSpecification_instancePlatform,
+    reservationFleetInstanceSpecification_instanceType,
+    reservationFleetInstanceSpecification_priority,
+    reservationFleetInstanceSpecification_weight,
+
+    -- * ReservationValue
+    ReservationValue (..),
+    newReservationValue,
+    reservationValue_hourlyPrice,
+    reservationValue_remainingTotalValue,
+    reservationValue_remainingUpfrontValue,
+
+    -- * ReservedInstanceLimitPrice
+    ReservedInstanceLimitPrice (..),
+    newReservedInstanceLimitPrice,
+    reservedInstanceLimitPrice_amount,
+    reservedInstanceLimitPrice_currencyCode,
+
+    -- * ReservedInstanceReservationValue
+    ReservedInstanceReservationValue (..),
+    newReservedInstanceReservationValue,
+    reservedInstanceReservationValue_reservationValue,
+    reservedInstanceReservationValue_reservedInstanceId,
+
+    -- * ReservedInstances
+    ReservedInstances (..),
+    newReservedInstances,
+    reservedInstances_availabilityZone,
+    reservedInstances_currencyCode,
+    reservedInstances_duration,
+    reservedInstances_end,
+    reservedInstances_fixedPrice,
+    reservedInstances_instanceCount,
+    reservedInstances_instanceTenancy,
+    reservedInstances_instanceType,
+    reservedInstances_offeringClass,
+    reservedInstances_offeringType,
+    reservedInstances_productDescription,
+    reservedInstances_recurringCharges,
+    reservedInstances_reservedInstancesId,
+    reservedInstances_scope,
+    reservedInstances_start,
+    reservedInstances_state,
+    reservedInstances_tags,
+    reservedInstances_usagePrice,
+
+    -- * ReservedInstancesConfiguration
+    ReservedInstancesConfiguration (..),
+    newReservedInstancesConfiguration,
+    reservedInstancesConfiguration_availabilityZone,
+    reservedInstancesConfiguration_instanceCount,
+    reservedInstancesConfiguration_instanceType,
+    reservedInstancesConfiguration_platform,
+    reservedInstancesConfiguration_scope,
+
+    -- * ReservedInstancesId
+    ReservedInstancesId (..),
+    newReservedInstancesId,
+    reservedInstancesId_reservedInstancesId,
+
+    -- * ReservedInstancesListing
+    ReservedInstancesListing (..),
+    newReservedInstancesListing,
+    reservedInstancesListing_clientToken,
+    reservedInstancesListing_createDate,
+    reservedInstancesListing_instanceCounts,
+    reservedInstancesListing_priceSchedules,
+    reservedInstancesListing_reservedInstancesId,
+    reservedInstancesListing_reservedInstancesListingId,
+    reservedInstancesListing_status,
+    reservedInstancesListing_statusMessage,
+    reservedInstancesListing_tags,
+    reservedInstancesListing_updateDate,
+
+    -- * ReservedInstancesModification
+    ReservedInstancesModification (..),
+    newReservedInstancesModification,
+    reservedInstancesModification_clientToken,
+    reservedInstancesModification_createDate,
+    reservedInstancesModification_effectiveDate,
+    reservedInstancesModification_modificationResults,
+    reservedInstancesModification_reservedInstancesIds,
+    reservedInstancesModification_reservedInstancesModificationId,
+    reservedInstancesModification_status,
+    reservedInstancesModification_statusMessage,
+    reservedInstancesModification_updateDate,
+
+    -- * ReservedInstancesModificationResult
+    ReservedInstancesModificationResult (..),
+    newReservedInstancesModificationResult,
+    reservedInstancesModificationResult_reservedInstancesId,
+    reservedInstancesModificationResult_targetConfiguration,
+
+    -- * ReservedInstancesOffering
+    ReservedInstancesOffering (..),
+    newReservedInstancesOffering,
+    reservedInstancesOffering_availabilityZone,
+    reservedInstancesOffering_currencyCode,
+    reservedInstancesOffering_duration,
+    reservedInstancesOffering_fixedPrice,
+    reservedInstancesOffering_instanceTenancy,
+    reservedInstancesOffering_instanceType,
+    reservedInstancesOffering_marketplace,
+    reservedInstancesOffering_offeringClass,
+    reservedInstancesOffering_offeringType,
+    reservedInstancesOffering_pricingDetails,
+    reservedInstancesOffering_productDescription,
+    reservedInstancesOffering_recurringCharges,
+    reservedInstancesOffering_reservedInstancesOfferingId,
+    reservedInstancesOffering_scope,
+    reservedInstancesOffering_usagePrice,
+
+    -- * ResourceStatement
+    ResourceStatement (..),
+    newResourceStatement,
+    resourceStatement_resourceTypes,
+    resourceStatement_resources,
+
+    -- * ResourceStatementRequest
+    ResourceStatementRequest (..),
+    newResourceStatementRequest,
+    resourceStatementRequest_resourceTypes,
+    resourceStatementRequest_resources,
+
+    -- * ResponseError
+    ResponseError (..),
+    newResponseError,
+    responseError_code,
+    responseError_message,
+
+    -- * ResponseLaunchTemplateData
+    ResponseLaunchTemplateData (..),
+    newResponseLaunchTemplateData,
+    responseLaunchTemplateData_blockDeviceMappings,
+    responseLaunchTemplateData_capacityReservationSpecification,
+    responseLaunchTemplateData_cpuOptions,
+    responseLaunchTemplateData_creditSpecification,
+    responseLaunchTemplateData_disableApiStop,
+    responseLaunchTemplateData_disableApiTermination,
+    responseLaunchTemplateData_ebsOptimized,
+    responseLaunchTemplateData_elasticGpuSpecifications,
+    responseLaunchTemplateData_elasticInferenceAccelerators,
+    responseLaunchTemplateData_enclaveOptions,
+    responseLaunchTemplateData_hibernationOptions,
+    responseLaunchTemplateData_iamInstanceProfile,
+    responseLaunchTemplateData_imageId,
+    responseLaunchTemplateData_instanceInitiatedShutdownBehavior,
+    responseLaunchTemplateData_instanceMarketOptions,
+    responseLaunchTemplateData_instanceRequirements,
+    responseLaunchTemplateData_instanceType,
+    responseLaunchTemplateData_kernelId,
+    responseLaunchTemplateData_keyName,
+    responseLaunchTemplateData_licenseSpecifications,
+    responseLaunchTemplateData_maintenanceOptions,
+    responseLaunchTemplateData_metadataOptions,
+    responseLaunchTemplateData_monitoring,
+    responseLaunchTemplateData_networkInterfaces,
+    responseLaunchTemplateData_placement,
+    responseLaunchTemplateData_privateDnsNameOptions,
+    responseLaunchTemplateData_ramDiskId,
+    responseLaunchTemplateData_securityGroupIds,
+    responseLaunchTemplateData_securityGroups,
+    responseLaunchTemplateData_tagSpecifications,
+    responseLaunchTemplateData_userData,
+
+    -- * Route
+    Route (..),
+    newRoute,
+    route_carrierGatewayId,
+    route_coreNetworkArn,
+    route_destinationCidrBlock,
+    route_destinationIpv6CidrBlock,
+    route_destinationPrefixListId,
+    route_egressOnlyInternetGatewayId,
+    route_gatewayId,
+    route_instanceId,
+    route_instanceOwnerId,
+    route_localGatewayId,
+    route_natGatewayId,
+    route_networkInterfaceId,
+    route_origin,
+    route_state,
+    route_transitGatewayId,
+    route_vpcPeeringConnectionId,
+
+    -- * RouteTable
+    RouteTable (..),
+    newRouteTable,
+    routeTable_associations,
+    routeTable_ownerId,
+    routeTable_propagatingVgws,
+    routeTable_routeTableId,
+    routeTable_routes,
+    routeTable_tags,
+    routeTable_vpcId,
+
+    -- * RouteTableAssociation
+    RouteTableAssociation (..),
+    newRouteTableAssociation,
+    routeTableAssociation_associationState,
+    routeTableAssociation_gatewayId,
+    routeTableAssociation_main,
+    routeTableAssociation_routeTableAssociationId,
+    routeTableAssociation_routeTableId,
+    routeTableAssociation_subnetId,
+
+    -- * RouteTableAssociationState
+    RouteTableAssociationState (..),
+    newRouteTableAssociationState,
+    routeTableAssociationState_state,
+    routeTableAssociationState_statusMessage,
+
+    -- * RunInstancesMonitoringEnabled
+    RunInstancesMonitoringEnabled (..),
+    newRunInstancesMonitoringEnabled,
+    runInstancesMonitoringEnabled_enabled,
+
+    -- * S3ObjectTag
+    S3ObjectTag (..),
+    newS3ObjectTag,
+    s3ObjectTag_key,
+    s3ObjectTag_value,
+
+    -- * S3Storage
+    S3Storage (..),
+    newS3Storage,
+    s3Storage_aWSAccessKeyId,
+    s3Storage_bucket,
+    s3Storage_prefix,
+    s3Storage_uploadPolicy,
+    s3Storage_uploadPolicySignature,
+
+    -- * ScheduledInstance
+    ScheduledInstance (..),
+    newScheduledInstance,
+    scheduledInstance_availabilityZone,
+    scheduledInstance_createDate,
+    scheduledInstance_hourlyPrice,
+    scheduledInstance_instanceCount,
+    scheduledInstance_instanceType,
+    scheduledInstance_networkPlatform,
+    scheduledInstance_nextSlotStartTime,
+    scheduledInstance_platform,
+    scheduledInstance_previousSlotEndTime,
+    scheduledInstance_recurrence,
+    scheduledInstance_scheduledInstanceId,
+    scheduledInstance_slotDurationInHours,
+    scheduledInstance_termEndDate,
+    scheduledInstance_termStartDate,
+    scheduledInstance_totalScheduledInstanceHours,
+
+    -- * ScheduledInstanceAvailability
+    ScheduledInstanceAvailability (..),
+    newScheduledInstanceAvailability,
+    scheduledInstanceAvailability_availabilityZone,
+    scheduledInstanceAvailability_availableInstanceCount,
+    scheduledInstanceAvailability_firstSlotStartTime,
+    scheduledInstanceAvailability_hourlyPrice,
+    scheduledInstanceAvailability_instanceType,
+    scheduledInstanceAvailability_maxTermDurationInDays,
+    scheduledInstanceAvailability_minTermDurationInDays,
+    scheduledInstanceAvailability_networkPlatform,
+    scheduledInstanceAvailability_platform,
+    scheduledInstanceAvailability_purchaseToken,
+    scheduledInstanceAvailability_recurrence,
+    scheduledInstanceAvailability_slotDurationInHours,
+    scheduledInstanceAvailability_totalScheduledInstanceHours,
+
+    -- * ScheduledInstanceRecurrence
+    ScheduledInstanceRecurrence (..),
+    newScheduledInstanceRecurrence,
+    scheduledInstanceRecurrence_frequency,
+    scheduledInstanceRecurrence_interval,
+    scheduledInstanceRecurrence_occurrenceDaySet,
+    scheduledInstanceRecurrence_occurrenceRelativeToEnd,
+    scheduledInstanceRecurrence_occurrenceUnit,
+
+    -- * ScheduledInstanceRecurrenceRequest
+    ScheduledInstanceRecurrenceRequest (..),
+    newScheduledInstanceRecurrenceRequest,
+    scheduledInstanceRecurrenceRequest_frequency,
+    scheduledInstanceRecurrenceRequest_interval,
+    scheduledInstanceRecurrenceRequest_occurrenceDays,
+    scheduledInstanceRecurrenceRequest_occurrenceRelativeToEnd,
+    scheduledInstanceRecurrenceRequest_occurrenceUnit,
+
+    -- * ScheduledInstancesBlockDeviceMapping
+    ScheduledInstancesBlockDeviceMapping (..),
+    newScheduledInstancesBlockDeviceMapping,
+    scheduledInstancesBlockDeviceMapping_deviceName,
+    scheduledInstancesBlockDeviceMapping_ebs,
+    scheduledInstancesBlockDeviceMapping_noDevice,
+    scheduledInstancesBlockDeviceMapping_virtualName,
+
+    -- * ScheduledInstancesEbs
+    ScheduledInstancesEbs (..),
+    newScheduledInstancesEbs,
+    scheduledInstancesEbs_deleteOnTermination,
+    scheduledInstancesEbs_encrypted,
+    scheduledInstancesEbs_iops,
+    scheduledInstancesEbs_snapshotId,
+    scheduledInstancesEbs_volumeSize,
+    scheduledInstancesEbs_volumeType,
+
+    -- * ScheduledInstancesIamInstanceProfile
+    ScheduledInstancesIamInstanceProfile (..),
+    newScheduledInstancesIamInstanceProfile,
+    scheduledInstancesIamInstanceProfile_arn,
+    scheduledInstancesIamInstanceProfile_name,
+
+    -- * ScheduledInstancesIpv6Address
+    ScheduledInstancesIpv6Address (..),
+    newScheduledInstancesIpv6Address,
+    scheduledInstancesIpv6Address_ipv6Address,
+
+    -- * ScheduledInstancesLaunchSpecification
+    ScheduledInstancesLaunchSpecification (..),
+    newScheduledInstancesLaunchSpecification,
+    scheduledInstancesLaunchSpecification_blockDeviceMappings,
+    scheduledInstancesLaunchSpecification_ebsOptimized,
+    scheduledInstancesLaunchSpecification_iamInstanceProfile,
+    scheduledInstancesLaunchSpecification_instanceType,
+    scheduledInstancesLaunchSpecification_kernelId,
+    scheduledInstancesLaunchSpecification_keyName,
+    scheduledInstancesLaunchSpecification_monitoring,
+    scheduledInstancesLaunchSpecification_networkInterfaces,
+    scheduledInstancesLaunchSpecification_placement,
+    scheduledInstancesLaunchSpecification_ramdiskId,
+    scheduledInstancesLaunchSpecification_securityGroupIds,
+    scheduledInstancesLaunchSpecification_subnetId,
+    scheduledInstancesLaunchSpecification_userData,
+    scheduledInstancesLaunchSpecification_imageId,
+
+    -- * ScheduledInstancesMonitoring
+    ScheduledInstancesMonitoring (..),
+    newScheduledInstancesMonitoring,
+    scheduledInstancesMonitoring_enabled,
+
+    -- * ScheduledInstancesNetworkInterface
+    ScheduledInstancesNetworkInterface (..),
+    newScheduledInstancesNetworkInterface,
+    scheduledInstancesNetworkInterface_associatePublicIpAddress,
+    scheduledInstancesNetworkInterface_deleteOnTermination,
+    scheduledInstancesNetworkInterface_description,
+    scheduledInstancesNetworkInterface_deviceIndex,
+    scheduledInstancesNetworkInterface_groups,
+    scheduledInstancesNetworkInterface_ipv6AddressCount,
+    scheduledInstancesNetworkInterface_ipv6Addresses,
+    scheduledInstancesNetworkInterface_networkInterfaceId,
+    scheduledInstancesNetworkInterface_privateIpAddress,
+    scheduledInstancesNetworkInterface_privateIpAddressConfigs,
+    scheduledInstancesNetworkInterface_secondaryPrivateIpAddressCount,
+    scheduledInstancesNetworkInterface_subnetId,
+
+    -- * ScheduledInstancesPlacement
+    ScheduledInstancesPlacement (..),
+    newScheduledInstancesPlacement,
+    scheduledInstancesPlacement_availabilityZone,
+    scheduledInstancesPlacement_groupName,
+
+    -- * ScheduledInstancesPrivateIpAddressConfig
+    ScheduledInstancesPrivateIpAddressConfig (..),
+    newScheduledInstancesPrivateIpAddressConfig,
+    scheduledInstancesPrivateIpAddressConfig_primary,
+    scheduledInstancesPrivateIpAddressConfig_privateIpAddress,
+
+    -- * SecurityGroup
+    SecurityGroup (..),
+    newSecurityGroup,
+    securityGroup_ipPermissions,
+    securityGroup_ipPermissionsEgress,
+    securityGroup_tags,
+    securityGroup_vpcId,
+    securityGroup_ownerId,
+    securityGroup_groupId,
+    securityGroup_groupName,
+    securityGroup_description,
+
+    -- * SecurityGroupIdentifier
+    SecurityGroupIdentifier (..),
+    newSecurityGroupIdentifier,
+    securityGroupIdentifier_groupId,
+    securityGroupIdentifier_groupName,
+
+    -- * SecurityGroupReference
+    SecurityGroupReference (..),
+    newSecurityGroupReference,
+    securityGroupReference_groupId,
+    securityGroupReference_referencingVpcId,
+    securityGroupReference_vpcPeeringConnectionId,
+
+    -- * SecurityGroupRule
+    SecurityGroupRule (..),
+    newSecurityGroupRule,
+    securityGroupRule_cidrIpv4,
+    securityGroupRule_cidrIpv6,
+    securityGroupRule_description,
+    securityGroupRule_fromPort,
+    securityGroupRule_groupId,
+    securityGroupRule_groupOwnerId,
+    securityGroupRule_ipProtocol,
+    securityGroupRule_isEgress,
+    securityGroupRule_prefixListId,
+    securityGroupRule_referencedGroupInfo,
+    securityGroupRule_securityGroupRuleId,
+    securityGroupRule_tags,
+    securityGroupRule_toPort,
+
+    -- * SecurityGroupRuleDescription
+    SecurityGroupRuleDescription (..),
+    newSecurityGroupRuleDescription,
+    securityGroupRuleDescription_description,
+    securityGroupRuleDescription_securityGroupRuleId,
+
+    -- * SecurityGroupRuleRequest
+    SecurityGroupRuleRequest (..),
+    newSecurityGroupRuleRequest,
+    securityGroupRuleRequest_cidrIpv4,
+    securityGroupRuleRequest_cidrIpv6,
+    securityGroupRuleRequest_description,
+    securityGroupRuleRequest_fromPort,
+    securityGroupRuleRequest_ipProtocol,
+    securityGroupRuleRequest_prefixListId,
+    securityGroupRuleRequest_referencedGroupId,
+    securityGroupRuleRequest_toPort,
+
+    -- * SecurityGroupRuleUpdate
+    SecurityGroupRuleUpdate (..),
+    newSecurityGroupRuleUpdate,
+    securityGroupRuleUpdate_securityGroupRule,
+    securityGroupRuleUpdate_securityGroupRuleId,
+
+    -- * ServiceConfiguration
+    ServiceConfiguration (..),
+    newServiceConfiguration,
+    serviceConfiguration_acceptanceRequired,
+    serviceConfiguration_availabilityZones,
+    serviceConfiguration_baseEndpointDnsNames,
+    serviceConfiguration_gatewayLoadBalancerArns,
+    serviceConfiguration_managesVpcEndpoints,
+    serviceConfiguration_networkLoadBalancerArns,
+    serviceConfiguration_payerResponsibility,
+    serviceConfiguration_privateDnsName,
+    serviceConfiguration_privateDnsNameConfiguration,
+    serviceConfiguration_serviceId,
+    serviceConfiguration_serviceName,
+    serviceConfiguration_serviceState,
+    serviceConfiguration_serviceType,
+    serviceConfiguration_supportedIpAddressTypes,
+    serviceConfiguration_tags,
+
+    -- * ServiceDetail
+    ServiceDetail (..),
+    newServiceDetail,
+    serviceDetail_acceptanceRequired,
+    serviceDetail_availabilityZones,
+    serviceDetail_baseEndpointDnsNames,
+    serviceDetail_managesVpcEndpoints,
+    serviceDetail_owner,
+    serviceDetail_payerResponsibility,
+    serviceDetail_privateDnsName,
+    serviceDetail_privateDnsNameVerificationState,
+    serviceDetail_privateDnsNames,
+    serviceDetail_serviceId,
+    serviceDetail_serviceName,
+    serviceDetail_serviceType,
+    serviceDetail_supportedIpAddressTypes,
+    serviceDetail_tags,
+    serviceDetail_vpcEndpointPolicySupported,
+
+    -- * ServiceTypeDetail
+    ServiceTypeDetail (..),
+    newServiceTypeDetail,
+    serviceTypeDetail_serviceType,
+
+    -- * SlotDateTimeRangeRequest
+    SlotDateTimeRangeRequest (..),
+    newSlotDateTimeRangeRequest,
+    slotDateTimeRangeRequest_earliestTime,
+    slotDateTimeRangeRequest_latestTime,
+
+    -- * SlotStartTimeRangeRequest
+    SlotStartTimeRangeRequest (..),
+    newSlotStartTimeRangeRequest,
+    slotStartTimeRangeRequest_earliestTime,
+    slotStartTimeRangeRequest_latestTime,
+
+    -- * Snapshot
+    Snapshot (..),
+    newSnapshot,
+    snapshot_dataEncryptionKeyId,
+    snapshot_kmsKeyId,
+    snapshot_outpostArn,
+    snapshot_ownerAlias,
+    snapshot_restoreExpiryTime,
+    snapshot_stateMessage,
+    snapshot_storageTier,
+    snapshot_tags,
+    snapshot_snapshotId,
+    snapshot_ownerId,
+    snapshot_volumeId,
+    snapshot_volumeSize,
+    snapshot_description,
+    snapshot_startTime,
+    snapshot_progress,
+    snapshot_state,
+    snapshot_encrypted,
+
+    -- * SnapshotDetail
+    SnapshotDetail (..),
+    newSnapshotDetail,
+    snapshotDetail_description,
+    snapshotDetail_deviceName,
+    snapshotDetail_diskImageSize,
+    snapshotDetail_format,
+    snapshotDetail_progress,
+    snapshotDetail_snapshotId,
+    snapshotDetail_status,
+    snapshotDetail_statusMessage,
+    snapshotDetail_url,
+    snapshotDetail_userBucket,
+
+    -- * SnapshotDiskContainer
+    SnapshotDiskContainer (..),
+    newSnapshotDiskContainer,
+    snapshotDiskContainer_description,
+    snapshotDiskContainer_format,
+    snapshotDiskContainer_url,
+    snapshotDiskContainer_userBucket,
+
+    -- * SnapshotInfo
+    SnapshotInfo (..),
+    newSnapshotInfo,
+    snapshotInfo_description,
+    snapshotInfo_encrypted,
+    snapshotInfo_outpostArn,
+    snapshotInfo_ownerId,
+    snapshotInfo_progress,
+    snapshotInfo_snapshotId,
+    snapshotInfo_startTime,
+    snapshotInfo_state,
+    snapshotInfo_tags,
+    snapshotInfo_volumeId,
+    snapshotInfo_volumeSize,
+
+    -- * SnapshotRecycleBinInfo
+    SnapshotRecycleBinInfo (..),
+    newSnapshotRecycleBinInfo,
+    snapshotRecycleBinInfo_description,
+    snapshotRecycleBinInfo_recycleBinEnterTime,
+    snapshotRecycleBinInfo_recycleBinExitTime,
+    snapshotRecycleBinInfo_snapshotId,
+    snapshotRecycleBinInfo_volumeId,
+
+    -- * SnapshotTaskDetail
+    SnapshotTaskDetail (..),
+    newSnapshotTaskDetail,
+    snapshotTaskDetail_description,
+    snapshotTaskDetail_diskImageSize,
+    snapshotTaskDetail_encrypted,
+    snapshotTaskDetail_format,
+    snapshotTaskDetail_kmsKeyId,
+    snapshotTaskDetail_progress,
+    snapshotTaskDetail_snapshotId,
+    snapshotTaskDetail_status,
+    snapshotTaskDetail_statusMessage,
+    snapshotTaskDetail_url,
+    snapshotTaskDetail_userBucket,
+
+    -- * SnapshotTierStatus
+    SnapshotTierStatus (..),
+    newSnapshotTierStatus,
+    snapshotTierStatus_archivalCompleteTime,
+    snapshotTierStatus_lastTieringOperationStatus,
+    snapshotTierStatus_lastTieringOperationStatusDetail,
+    snapshotTierStatus_lastTieringProgress,
+    snapshotTierStatus_lastTieringStartTime,
+    snapshotTierStatus_ownerId,
+    snapshotTierStatus_restoreExpiryTime,
+    snapshotTierStatus_snapshotId,
+    snapshotTierStatus_status,
+    snapshotTierStatus_storageTier,
+    snapshotTierStatus_tags,
+    snapshotTierStatus_volumeId,
+
+    -- * SpotCapacityRebalance
+    SpotCapacityRebalance (..),
+    newSpotCapacityRebalance,
+    spotCapacityRebalance_replacementStrategy,
+    spotCapacityRebalance_terminationDelay,
+
+    -- * SpotDatafeedSubscription
+    SpotDatafeedSubscription (..),
+    newSpotDatafeedSubscription,
+    spotDatafeedSubscription_bucket,
+    spotDatafeedSubscription_fault,
+    spotDatafeedSubscription_ownerId,
+    spotDatafeedSubscription_prefix,
+    spotDatafeedSubscription_state,
+
+    -- * SpotFleetLaunchSpecification
+    SpotFleetLaunchSpecification (..),
+    newSpotFleetLaunchSpecification,
+    spotFleetLaunchSpecification_addressingType,
+    spotFleetLaunchSpecification_blockDeviceMappings,
+    spotFleetLaunchSpecification_ebsOptimized,
+    spotFleetLaunchSpecification_iamInstanceProfile,
+    spotFleetLaunchSpecification_imageId,
+    spotFleetLaunchSpecification_instanceRequirements,
+    spotFleetLaunchSpecification_instanceType,
+    spotFleetLaunchSpecification_kernelId,
+    spotFleetLaunchSpecification_keyName,
+    spotFleetLaunchSpecification_monitoring,
+    spotFleetLaunchSpecification_networkInterfaces,
+    spotFleetLaunchSpecification_placement,
+    spotFleetLaunchSpecification_ramdiskId,
+    spotFleetLaunchSpecification_securityGroups,
+    spotFleetLaunchSpecification_spotPrice,
+    spotFleetLaunchSpecification_subnetId,
+    spotFleetLaunchSpecification_tagSpecifications,
+    spotFleetLaunchSpecification_userData,
+    spotFleetLaunchSpecification_weightedCapacity,
+
+    -- * SpotFleetMonitoring
+    SpotFleetMonitoring (..),
+    newSpotFleetMonitoring,
+    spotFleetMonitoring_enabled,
+
+    -- * SpotFleetRequestConfig
+    SpotFleetRequestConfig (..),
+    newSpotFleetRequestConfig,
+    spotFleetRequestConfig_activityStatus,
+    spotFleetRequestConfig_createTime,
+    spotFleetRequestConfig_spotFleetRequestConfig,
+    spotFleetRequestConfig_spotFleetRequestId,
+    spotFleetRequestConfig_spotFleetRequestState,
+    spotFleetRequestConfig_tags,
+
+    -- * SpotFleetRequestConfigData
+    SpotFleetRequestConfigData (..),
+    newSpotFleetRequestConfigData,
+    spotFleetRequestConfigData_allocationStrategy,
+    spotFleetRequestConfigData_clientToken,
+    spotFleetRequestConfigData_context,
+    spotFleetRequestConfigData_excessCapacityTerminationPolicy,
+    spotFleetRequestConfigData_fulfilledCapacity,
+    spotFleetRequestConfigData_instanceInterruptionBehavior,
+    spotFleetRequestConfigData_instancePoolsToUseCount,
+    spotFleetRequestConfigData_launchSpecifications,
+    spotFleetRequestConfigData_launchTemplateConfigs,
+    spotFleetRequestConfigData_loadBalancersConfig,
+    spotFleetRequestConfigData_onDemandAllocationStrategy,
+    spotFleetRequestConfigData_onDemandFulfilledCapacity,
+    spotFleetRequestConfigData_onDemandMaxTotalPrice,
+    spotFleetRequestConfigData_onDemandTargetCapacity,
+    spotFleetRequestConfigData_replaceUnhealthyInstances,
+    spotFleetRequestConfigData_spotMaintenanceStrategies,
+    spotFleetRequestConfigData_spotMaxTotalPrice,
+    spotFleetRequestConfigData_spotPrice,
+    spotFleetRequestConfigData_tagSpecifications,
+    spotFleetRequestConfigData_targetCapacityUnitType,
+    spotFleetRequestConfigData_terminateInstancesWithExpiration,
+    spotFleetRequestConfigData_type,
+    spotFleetRequestConfigData_validFrom,
+    spotFleetRequestConfigData_validUntil,
+    spotFleetRequestConfigData_iamFleetRole,
+    spotFleetRequestConfigData_targetCapacity,
+
+    -- * SpotFleetTagSpecification
+    SpotFleetTagSpecification (..),
+    newSpotFleetTagSpecification,
+    spotFleetTagSpecification_resourceType,
+    spotFleetTagSpecification_tags,
+
+    -- * SpotInstanceRequest
+    SpotInstanceRequest (..),
+    newSpotInstanceRequest,
+    spotInstanceRequest_actualBlockHourlyPrice,
+    spotInstanceRequest_availabilityZoneGroup,
+    spotInstanceRequest_blockDurationMinutes,
+    spotInstanceRequest_createTime,
+    spotInstanceRequest_fault,
+    spotInstanceRequest_instanceId,
+    spotInstanceRequest_instanceInterruptionBehavior,
+    spotInstanceRequest_launchGroup,
+    spotInstanceRequest_launchSpecification,
+    spotInstanceRequest_launchedAvailabilityZone,
+    spotInstanceRequest_productDescription,
+    spotInstanceRequest_spotInstanceRequestId,
+    spotInstanceRequest_spotPrice,
+    spotInstanceRequest_state,
+    spotInstanceRequest_status,
+    spotInstanceRequest_tags,
+    spotInstanceRequest_type,
+    spotInstanceRequest_validFrom,
+    spotInstanceRequest_validUntil,
+
+    -- * SpotInstanceStateFault
+    SpotInstanceStateFault (..),
+    newSpotInstanceStateFault,
+    spotInstanceStateFault_code,
+    spotInstanceStateFault_message,
+
+    -- * SpotInstanceStatus
+    SpotInstanceStatus (..),
+    newSpotInstanceStatus,
+    spotInstanceStatus_code,
+    spotInstanceStatus_message,
+    spotInstanceStatus_updateTime,
+
+    -- * SpotMaintenanceStrategies
+    SpotMaintenanceStrategies (..),
+    newSpotMaintenanceStrategies,
+    spotMaintenanceStrategies_capacityRebalance,
+
+    -- * SpotMarketOptions
+    SpotMarketOptions (..),
+    newSpotMarketOptions,
+    spotMarketOptions_blockDurationMinutes,
+    spotMarketOptions_instanceInterruptionBehavior,
+    spotMarketOptions_maxPrice,
+    spotMarketOptions_spotInstanceType,
+    spotMarketOptions_validUntil,
+
+    -- * SpotOptions
+    SpotOptions (..),
+    newSpotOptions,
+    spotOptions_allocationStrategy,
+    spotOptions_instanceInterruptionBehavior,
+    spotOptions_instancePoolsToUseCount,
+    spotOptions_maintenanceStrategies,
+    spotOptions_maxTotalPrice,
+    spotOptions_minTargetCapacity,
+    spotOptions_singleAvailabilityZone,
+    spotOptions_singleInstanceType,
+
+    -- * SpotOptionsRequest
+    SpotOptionsRequest (..),
+    newSpotOptionsRequest,
+    spotOptionsRequest_allocationStrategy,
+    spotOptionsRequest_instanceInterruptionBehavior,
+    spotOptionsRequest_instancePoolsToUseCount,
+    spotOptionsRequest_maintenanceStrategies,
+    spotOptionsRequest_maxTotalPrice,
+    spotOptionsRequest_minTargetCapacity,
+    spotOptionsRequest_singleAvailabilityZone,
+    spotOptionsRequest_singleInstanceType,
+
+    -- * SpotPlacement
+    SpotPlacement (..),
+    newSpotPlacement,
+    spotPlacement_availabilityZone,
+    spotPlacement_groupName,
+    spotPlacement_tenancy,
+
+    -- * SpotPlacementScore
+    SpotPlacementScore (..),
+    newSpotPlacementScore,
+    spotPlacementScore_availabilityZoneId,
+    spotPlacementScore_region,
+    spotPlacementScore_score,
+
+    -- * SpotPrice
+    SpotPrice (..),
+    newSpotPrice,
+    spotPrice_availabilityZone,
+    spotPrice_instanceType,
+    spotPrice_productDescription,
+    spotPrice_spotPrice,
+    spotPrice_timestamp,
+
+    -- * StaleIpPermission
+    StaleIpPermission (..),
+    newStaleIpPermission,
+    staleIpPermission_fromPort,
+    staleIpPermission_ipProtocol,
+    staleIpPermission_ipRanges,
+    staleIpPermission_prefixListIds,
+    staleIpPermission_toPort,
+    staleIpPermission_userIdGroupPairs,
+
+    -- * StaleSecurityGroup
+    StaleSecurityGroup (..),
+    newStaleSecurityGroup,
+    staleSecurityGroup_description,
+    staleSecurityGroup_groupId,
+    staleSecurityGroup_groupName,
+    staleSecurityGroup_staleIpPermissions,
+    staleSecurityGroup_staleIpPermissionsEgress,
+    staleSecurityGroup_vpcId,
+
+    -- * StateReason
+    StateReason (..),
+    newStateReason,
+    stateReason_code,
+    stateReason_message,
+
+    -- * Storage
+    Storage (..),
+    newStorage,
+    storage_s3,
+
+    -- * StorageLocation
+    StorageLocation (..),
+    newStorageLocation,
+    storageLocation_bucket,
+    storageLocation_key,
+
+    -- * StoreImageTaskResult
+    StoreImageTaskResult (..),
+    newStoreImageTaskResult,
+    storeImageTaskResult_amiId,
+    storeImageTaskResult_bucket,
+    storeImageTaskResult_progressPercentage,
+    storeImageTaskResult_s3objectKey,
+    storeImageTaskResult_storeTaskFailureReason,
+    storeImageTaskResult_storeTaskState,
+    storeImageTaskResult_taskStartTime,
+
+    -- * Subnet
+    Subnet (..),
+    newSubnet,
+    subnet_assignIpv6AddressOnCreation,
+    subnet_availabilityZoneId,
+    subnet_customerOwnedIpv4Pool,
+    subnet_defaultForAz,
+    subnet_enableDns64,
+    subnet_enableLniAtDeviceIndex,
+    subnet_ipv6CidrBlockAssociationSet,
+    subnet_ipv6Native,
+    subnet_mapCustomerOwnedIpOnLaunch,
+    subnet_mapPublicIpOnLaunch,
+    subnet_outpostArn,
+    subnet_ownerId,
+    subnet_privateDnsNameOptionsOnLaunch,
+    subnet_subnetArn,
+    subnet_tags,
+    subnet_availabilityZone,
+    subnet_availableIpAddressCount,
+    subnet_cidrBlock,
+    subnet_state,
+    subnet_subnetId,
+    subnet_vpcId,
+
+    -- * SubnetAssociation
+    SubnetAssociation (..),
+    newSubnetAssociation,
+    subnetAssociation_state,
+    subnetAssociation_subnetId,
+
+    -- * SubnetCidrBlockState
+    SubnetCidrBlockState (..),
+    newSubnetCidrBlockState,
+    subnetCidrBlockState_state,
+    subnetCidrBlockState_statusMessage,
+
+    -- * SubnetCidrReservation
+    SubnetCidrReservation (..),
+    newSubnetCidrReservation,
+    subnetCidrReservation_cidr,
+    subnetCidrReservation_description,
+    subnetCidrReservation_ownerId,
+    subnetCidrReservation_reservationType,
+    subnetCidrReservation_subnetCidrReservationId,
+    subnetCidrReservation_subnetId,
+    subnetCidrReservation_tags,
+
+    -- * SubnetIpv6CidrBlockAssociation
+    SubnetIpv6CidrBlockAssociation (..),
+    newSubnetIpv6CidrBlockAssociation,
+    subnetIpv6CidrBlockAssociation_associationId,
+    subnetIpv6CidrBlockAssociation_ipv6CidrBlock,
+    subnetIpv6CidrBlockAssociation_ipv6CidrBlockState,
+
+    -- * Subscription
+    Subscription (..),
+    newSubscription,
+    subscription_destination,
+    subscription_metric,
+    subscription_period,
+    subscription_source,
+    subscription_statistic,
+
+    -- * SuccessfulInstanceCreditSpecificationItem
+    SuccessfulInstanceCreditSpecificationItem (..),
+    newSuccessfulInstanceCreditSpecificationItem,
+    successfulInstanceCreditSpecificationItem_instanceId,
+
+    -- * SuccessfulQueuedPurchaseDeletion
+    SuccessfulQueuedPurchaseDeletion (..),
+    newSuccessfulQueuedPurchaseDeletion,
+    successfulQueuedPurchaseDeletion_reservedInstancesId,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * TagDescription
+    TagDescription (..),
+    newTagDescription,
+    tagDescription_resourceId,
+    tagDescription_resourceType,
+    tagDescription_key,
+    tagDescription_value,
+
+    -- * TagSpecification
+    TagSpecification (..),
+    newTagSpecification,
+    tagSpecification_resourceType,
+    tagSpecification_tags,
+
+    -- * TargetCapacitySpecification
+    TargetCapacitySpecification (..),
+    newTargetCapacitySpecification,
+    targetCapacitySpecification_defaultTargetCapacityType,
+    targetCapacitySpecification_onDemandTargetCapacity,
+    targetCapacitySpecification_spotTargetCapacity,
+    targetCapacitySpecification_targetCapacityUnitType,
+    targetCapacitySpecification_totalTargetCapacity,
+
+    -- * TargetCapacitySpecificationRequest
+    TargetCapacitySpecificationRequest (..),
+    newTargetCapacitySpecificationRequest,
+    targetCapacitySpecificationRequest_defaultTargetCapacityType,
+    targetCapacitySpecificationRequest_onDemandTargetCapacity,
+    targetCapacitySpecificationRequest_spotTargetCapacity,
+    targetCapacitySpecificationRequest_targetCapacityUnitType,
+    targetCapacitySpecificationRequest_totalTargetCapacity,
+
+    -- * TargetConfiguration
+    TargetConfiguration (..),
+    newTargetConfiguration,
+    targetConfiguration_instanceCount,
+    targetConfiguration_offeringId,
+
+    -- * TargetConfigurationRequest
+    TargetConfigurationRequest (..),
+    newTargetConfigurationRequest,
+    targetConfigurationRequest_instanceCount,
+    targetConfigurationRequest_offeringId,
+
+    -- * TargetGroup
+    TargetGroup (..),
+    newTargetGroup,
+    targetGroup_arn,
+
+    -- * TargetGroupsConfig
+    TargetGroupsConfig (..),
+    newTargetGroupsConfig,
+    targetGroupsConfig_targetGroups,
+
+    -- * TargetNetwork
+    TargetNetwork (..),
+    newTargetNetwork,
+    targetNetwork_associationId,
+    targetNetwork_clientVpnEndpointId,
+    targetNetwork_securityGroups,
+    targetNetwork_status,
+    targetNetwork_targetNetworkId,
+    targetNetwork_vpcId,
+
+    -- * TargetReservationValue
+    TargetReservationValue (..),
+    newTargetReservationValue,
+    targetReservationValue_reservationValue,
+    targetReservationValue_targetConfiguration,
+
+    -- * TerminateConnectionStatus
+    TerminateConnectionStatus (..),
+    newTerminateConnectionStatus,
+    terminateConnectionStatus_connectionId,
+    terminateConnectionStatus_currentStatus,
+    terminateConnectionStatus_previousStatus,
+
+    -- * ThroughResourcesStatement
+    ThroughResourcesStatement (..),
+    newThroughResourcesStatement,
+    throughResourcesStatement_resourceStatement,
+
+    -- * ThroughResourcesStatementRequest
+    ThroughResourcesStatementRequest (..),
+    newThroughResourcesStatementRequest,
+    throughResourcesStatementRequest_resourceStatement,
+
+    -- * TotalLocalStorageGB
+    TotalLocalStorageGB (..),
+    newTotalLocalStorageGB,
+    totalLocalStorageGB_max,
+    totalLocalStorageGB_min,
+
+    -- * TotalLocalStorageGBRequest
+    TotalLocalStorageGBRequest (..),
+    newTotalLocalStorageGBRequest,
+    totalLocalStorageGBRequest_max,
+    totalLocalStorageGBRequest_min,
+
+    -- * TrafficMirrorFilter
+    TrafficMirrorFilter (..),
+    newTrafficMirrorFilter,
+    trafficMirrorFilter_description,
+    trafficMirrorFilter_egressFilterRules,
+    trafficMirrorFilter_ingressFilterRules,
+    trafficMirrorFilter_networkServices,
+    trafficMirrorFilter_tags,
+    trafficMirrorFilter_trafficMirrorFilterId,
+
+    -- * TrafficMirrorFilterRule
+    TrafficMirrorFilterRule (..),
+    newTrafficMirrorFilterRule,
+    trafficMirrorFilterRule_description,
+    trafficMirrorFilterRule_destinationCidrBlock,
+    trafficMirrorFilterRule_destinationPortRange,
+    trafficMirrorFilterRule_protocol,
+    trafficMirrorFilterRule_ruleAction,
+    trafficMirrorFilterRule_ruleNumber,
+    trafficMirrorFilterRule_sourceCidrBlock,
+    trafficMirrorFilterRule_sourcePortRange,
+    trafficMirrorFilterRule_trafficDirection,
+    trafficMirrorFilterRule_trafficMirrorFilterId,
+    trafficMirrorFilterRule_trafficMirrorFilterRuleId,
+
+    -- * TrafficMirrorPortRange
+    TrafficMirrorPortRange (..),
+    newTrafficMirrorPortRange,
+    trafficMirrorPortRange_fromPort,
+    trafficMirrorPortRange_toPort,
+
+    -- * TrafficMirrorPortRangeRequest
+    TrafficMirrorPortRangeRequest (..),
+    newTrafficMirrorPortRangeRequest,
+    trafficMirrorPortRangeRequest_fromPort,
+    trafficMirrorPortRangeRequest_toPort,
+
+    -- * TrafficMirrorSession
+    TrafficMirrorSession (..),
+    newTrafficMirrorSession,
+    trafficMirrorSession_description,
+    trafficMirrorSession_networkInterfaceId,
+    trafficMirrorSession_ownerId,
+    trafficMirrorSession_packetLength,
+    trafficMirrorSession_sessionNumber,
+    trafficMirrorSession_tags,
+    trafficMirrorSession_trafficMirrorFilterId,
+    trafficMirrorSession_trafficMirrorSessionId,
+    trafficMirrorSession_trafficMirrorTargetId,
+    trafficMirrorSession_virtualNetworkId,
+
+    -- * TrafficMirrorTarget
+    TrafficMirrorTarget (..),
+    newTrafficMirrorTarget,
+    trafficMirrorTarget_description,
+    trafficMirrorTarget_gatewayLoadBalancerEndpointId,
+    trafficMirrorTarget_networkInterfaceId,
+    trafficMirrorTarget_networkLoadBalancerArn,
+    trafficMirrorTarget_ownerId,
+    trafficMirrorTarget_tags,
+    trafficMirrorTarget_trafficMirrorTargetId,
+    trafficMirrorTarget_type,
+
+    -- * TransitGateway
+    TransitGateway (..),
+    newTransitGateway,
+    transitGateway_creationTime,
+    transitGateway_description,
+    transitGateway_options,
+    transitGateway_ownerId,
+    transitGateway_state,
+    transitGateway_tags,
+    transitGateway_transitGatewayArn,
+    transitGateway_transitGatewayId,
+
+    -- * TransitGatewayAssociation
+    TransitGatewayAssociation (..),
+    newTransitGatewayAssociation,
+    transitGatewayAssociation_resourceId,
+    transitGatewayAssociation_resourceType,
+    transitGatewayAssociation_state,
+    transitGatewayAssociation_transitGatewayAttachmentId,
+    transitGatewayAssociation_transitGatewayRouteTableId,
+
+    -- * TransitGatewayAttachment
+    TransitGatewayAttachment (..),
+    newTransitGatewayAttachment,
+    transitGatewayAttachment_association,
+    transitGatewayAttachment_creationTime,
+    transitGatewayAttachment_resourceId,
+    transitGatewayAttachment_resourceOwnerId,
+    transitGatewayAttachment_resourceType,
+    transitGatewayAttachment_state,
+    transitGatewayAttachment_tags,
+    transitGatewayAttachment_transitGatewayAttachmentId,
+    transitGatewayAttachment_transitGatewayId,
+    transitGatewayAttachment_transitGatewayOwnerId,
+
+    -- * TransitGatewayAttachmentAssociation
+    TransitGatewayAttachmentAssociation (..),
+    newTransitGatewayAttachmentAssociation,
+    transitGatewayAttachmentAssociation_state,
+    transitGatewayAttachmentAssociation_transitGatewayRouteTableId,
+
+    -- * TransitGatewayAttachmentBgpConfiguration
+    TransitGatewayAttachmentBgpConfiguration (..),
+    newTransitGatewayAttachmentBgpConfiguration,
+    transitGatewayAttachmentBgpConfiguration_bgpStatus,
+    transitGatewayAttachmentBgpConfiguration_peerAddress,
+    transitGatewayAttachmentBgpConfiguration_peerAsn,
+    transitGatewayAttachmentBgpConfiguration_transitGatewayAddress,
+    transitGatewayAttachmentBgpConfiguration_transitGatewayAsn,
+
+    -- * TransitGatewayAttachmentPropagation
+    TransitGatewayAttachmentPropagation (..),
+    newTransitGatewayAttachmentPropagation,
+    transitGatewayAttachmentPropagation_state,
+    transitGatewayAttachmentPropagation_transitGatewayRouteTableId,
+
+    -- * TransitGatewayConnect
+    TransitGatewayConnect (..),
+    newTransitGatewayConnect,
+    transitGatewayConnect_creationTime,
+    transitGatewayConnect_options,
+    transitGatewayConnect_state,
+    transitGatewayConnect_tags,
+    transitGatewayConnect_transitGatewayAttachmentId,
+    transitGatewayConnect_transitGatewayId,
+    transitGatewayConnect_transportTransitGatewayAttachmentId,
+
+    -- * TransitGatewayConnectOptions
+    TransitGatewayConnectOptions (..),
+    newTransitGatewayConnectOptions,
+    transitGatewayConnectOptions_protocol,
+
+    -- * TransitGatewayConnectPeer
+    TransitGatewayConnectPeer (..),
+    newTransitGatewayConnectPeer,
+    transitGatewayConnectPeer_connectPeerConfiguration,
+    transitGatewayConnectPeer_creationTime,
+    transitGatewayConnectPeer_state,
+    transitGatewayConnectPeer_tags,
+    transitGatewayConnectPeer_transitGatewayAttachmentId,
+    transitGatewayConnectPeer_transitGatewayConnectPeerId,
+
+    -- * TransitGatewayConnectPeerConfiguration
+    TransitGatewayConnectPeerConfiguration (..),
+    newTransitGatewayConnectPeerConfiguration,
+    transitGatewayConnectPeerConfiguration_bgpConfigurations,
+    transitGatewayConnectPeerConfiguration_insideCidrBlocks,
+    transitGatewayConnectPeerConfiguration_peerAddress,
+    transitGatewayConnectPeerConfiguration_protocol,
+    transitGatewayConnectPeerConfiguration_transitGatewayAddress,
+
+    -- * TransitGatewayConnectRequestBgpOptions
+    TransitGatewayConnectRequestBgpOptions (..),
+    newTransitGatewayConnectRequestBgpOptions,
+    transitGatewayConnectRequestBgpOptions_peerAsn,
+
+    -- * TransitGatewayMulticastDeregisteredGroupMembers
+    TransitGatewayMulticastDeregisteredGroupMembers (..),
+    newTransitGatewayMulticastDeregisteredGroupMembers,
+    transitGatewayMulticastDeregisteredGroupMembers_deregisteredNetworkInterfaceIds,
+    transitGatewayMulticastDeregisteredGroupMembers_groupIpAddress,
+    transitGatewayMulticastDeregisteredGroupMembers_transitGatewayMulticastDomainId,
+
+    -- * TransitGatewayMulticastDeregisteredGroupSources
+    TransitGatewayMulticastDeregisteredGroupSources (..),
+    newTransitGatewayMulticastDeregisteredGroupSources,
+    transitGatewayMulticastDeregisteredGroupSources_deregisteredNetworkInterfaceIds,
+    transitGatewayMulticastDeregisteredGroupSources_groupIpAddress,
+    transitGatewayMulticastDeregisteredGroupSources_transitGatewayMulticastDomainId,
+
+    -- * TransitGatewayMulticastDomain
+    TransitGatewayMulticastDomain (..),
+    newTransitGatewayMulticastDomain,
+    transitGatewayMulticastDomain_creationTime,
+    transitGatewayMulticastDomain_options,
+    transitGatewayMulticastDomain_ownerId,
+    transitGatewayMulticastDomain_state,
+    transitGatewayMulticastDomain_tags,
+    transitGatewayMulticastDomain_transitGatewayId,
+    transitGatewayMulticastDomain_transitGatewayMulticastDomainArn,
+    transitGatewayMulticastDomain_transitGatewayMulticastDomainId,
+
+    -- * TransitGatewayMulticastDomainAssociation
+    TransitGatewayMulticastDomainAssociation (..),
+    newTransitGatewayMulticastDomainAssociation,
+    transitGatewayMulticastDomainAssociation_resourceId,
+    transitGatewayMulticastDomainAssociation_resourceOwnerId,
+    transitGatewayMulticastDomainAssociation_resourceType,
+    transitGatewayMulticastDomainAssociation_subnet,
+    transitGatewayMulticastDomainAssociation_transitGatewayAttachmentId,
+
+    -- * TransitGatewayMulticastDomainAssociations
+    TransitGatewayMulticastDomainAssociations (..),
+    newTransitGatewayMulticastDomainAssociations,
+    transitGatewayMulticastDomainAssociations_resourceId,
+    transitGatewayMulticastDomainAssociations_resourceOwnerId,
+    transitGatewayMulticastDomainAssociations_resourceType,
+    transitGatewayMulticastDomainAssociations_subnets,
+    transitGatewayMulticastDomainAssociations_transitGatewayAttachmentId,
+    transitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId,
+
+    -- * TransitGatewayMulticastDomainOptions
+    TransitGatewayMulticastDomainOptions (..),
+    newTransitGatewayMulticastDomainOptions,
+    transitGatewayMulticastDomainOptions_autoAcceptSharedAssociations,
+    transitGatewayMulticastDomainOptions_igmpv2Support,
+    transitGatewayMulticastDomainOptions_staticSourcesSupport,
+
+    -- * TransitGatewayMulticastGroup
+    TransitGatewayMulticastGroup (..),
+    newTransitGatewayMulticastGroup,
+    transitGatewayMulticastGroup_groupIpAddress,
+    transitGatewayMulticastGroup_groupMember,
+    transitGatewayMulticastGroup_groupSource,
+    transitGatewayMulticastGroup_memberType,
+    transitGatewayMulticastGroup_networkInterfaceId,
+    transitGatewayMulticastGroup_resourceId,
+    transitGatewayMulticastGroup_resourceOwnerId,
+    transitGatewayMulticastGroup_resourceType,
+    transitGatewayMulticastGroup_sourceType,
+    transitGatewayMulticastGroup_subnetId,
+    transitGatewayMulticastGroup_transitGatewayAttachmentId,
+
+    -- * TransitGatewayMulticastRegisteredGroupMembers
+    TransitGatewayMulticastRegisteredGroupMembers (..),
+    newTransitGatewayMulticastRegisteredGroupMembers,
+    transitGatewayMulticastRegisteredGroupMembers_groupIpAddress,
+    transitGatewayMulticastRegisteredGroupMembers_registeredNetworkInterfaceIds,
+    transitGatewayMulticastRegisteredGroupMembers_transitGatewayMulticastDomainId,
+
+    -- * TransitGatewayMulticastRegisteredGroupSources
+    TransitGatewayMulticastRegisteredGroupSources (..),
+    newTransitGatewayMulticastRegisteredGroupSources,
+    transitGatewayMulticastRegisteredGroupSources_groupIpAddress,
+    transitGatewayMulticastRegisteredGroupSources_registeredNetworkInterfaceIds,
+    transitGatewayMulticastRegisteredGroupSources_transitGatewayMulticastDomainId,
+
+    -- * TransitGatewayOptions
+    TransitGatewayOptions (..),
+    newTransitGatewayOptions,
+    transitGatewayOptions_amazonSideAsn,
+    transitGatewayOptions_associationDefaultRouteTableId,
+    transitGatewayOptions_autoAcceptSharedAttachments,
+    transitGatewayOptions_defaultRouteTableAssociation,
+    transitGatewayOptions_defaultRouteTablePropagation,
+    transitGatewayOptions_dnsSupport,
+    transitGatewayOptions_multicastSupport,
+    transitGatewayOptions_propagationDefaultRouteTableId,
+    transitGatewayOptions_transitGatewayCidrBlocks,
+    transitGatewayOptions_vpnEcmpSupport,
+
+    -- * TransitGatewayPeeringAttachment
+    TransitGatewayPeeringAttachment (..),
+    newTransitGatewayPeeringAttachment,
+    transitGatewayPeeringAttachment_accepterTgwInfo,
+    transitGatewayPeeringAttachment_accepterTransitGatewayAttachmentId,
+    transitGatewayPeeringAttachment_creationTime,
+    transitGatewayPeeringAttachment_options,
+    transitGatewayPeeringAttachment_requesterTgwInfo,
+    transitGatewayPeeringAttachment_state,
+    transitGatewayPeeringAttachment_status,
+    transitGatewayPeeringAttachment_tags,
+    transitGatewayPeeringAttachment_transitGatewayAttachmentId,
+
+    -- * TransitGatewayPeeringAttachmentOptions
+    TransitGatewayPeeringAttachmentOptions (..),
+    newTransitGatewayPeeringAttachmentOptions,
+    transitGatewayPeeringAttachmentOptions_dynamicRouting,
+
+    -- * TransitGatewayPolicyRule
+    TransitGatewayPolicyRule (..),
+    newTransitGatewayPolicyRule,
+    transitGatewayPolicyRule_destinationCidrBlock,
+    transitGatewayPolicyRule_destinationPortRange,
+    transitGatewayPolicyRule_metaData,
+    transitGatewayPolicyRule_protocol,
+    transitGatewayPolicyRule_sourceCidrBlock,
+    transitGatewayPolicyRule_sourcePortRange,
+
+    -- * TransitGatewayPolicyRuleMetaData
+    TransitGatewayPolicyRuleMetaData (..),
+    newTransitGatewayPolicyRuleMetaData,
+    transitGatewayPolicyRuleMetaData_metaDataKey,
+    transitGatewayPolicyRuleMetaData_metaDataValue,
+
+    -- * TransitGatewayPolicyTable
+    TransitGatewayPolicyTable (..),
+    newTransitGatewayPolicyTable,
+    transitGatewayPolicyTable_creationTime,
+    transitGatewayPolicyTable_state,
+    transitGatewayPolicyTable_tags,
+    transitGatewayPolicyTable_transitGatewayId,
+    transitGatewayPolicyTable_transitGatewayPolicyTableId,
+
+    -- * TransitGatewayPolicyTableAssociation
+    TransitGatewayPolicyTableAssociation (..),
+    newTransitGatewayPolicyTableAssociation,
+    transitGatewayPolicyTableAssociation_resourceId,
+    transitGatewayPolicyTableAssociation_resourceType,
+    transitGatewayPolicyTableAssociation_state,
+    transitGatewayPolicyTableAssociation_transitGatewayAttachmentId,
+    transitGatewayPolicyTableAssociation_transitGatewayPolicyTableId,
+
+    -- * TransitGatewayPolicyTableEntry
+    TransitGatewayPolicyTableEntry (..),
+    newTransitGatewayPolicyTableEntry,
+    transitGatewayPolicyTableEntry_policyRule,
+    transitGatewayPolicyTableEntry_policyRuleNumber,
+    transitGatewayPolicyTableEntry_targetRouteTableId,
+
+    -- * TransitGatewayPrefixListAttachment
+    TransitGatewayPrefixListAttachment (..),
+    newTransitGatewayPrefixListAttachment,
+    transitGatewayPrefixListAttachment_resourceId,
+    transitGatewayPrefixListAttachment_resourceType,
+    transitGatewayPrefixListAttachment_transitGatewayAttachmentId,
+
+    -- * TransitGatewayPrefixListReference
+    TransitGatewayPrefixListReference (..),
+    newTransitGatewayPrefixListReference,
+    transitGatewayPrefixListReference_blackhole,
+    transitGatewayPrefixListReference_prefixListId,
+    transitGatewayPrefixListReference_prefixListOwnerId,
+    transitGatewayPrefixListReference_state,
+    transitGatewayPrefixListReference_transitGatewayAttachment,
+    transitGatewayPrefixListReference_transitGatewayRouteTableId,
+
+    -- * TransitGatewayPropagation
+    TransitGatewayPropagation (..),
+    newTransitGatewayPropagation,
+    transitGatewayPropagation_resourceId,
+    transitGatewayPropagation_resourceType,
+    transitGatewayPropagation_state,
+    transitGatewayPropagation_transitGatewayAttachmentId,
+    transitGatewayPropagation_transitGatewayRouteTableAnnouncementId,
+    transitGatewayPropagation_transitGatewayRouteTableId,
+
+    -- * TransitGatewayRequestOptions
+    TransitGatewayRequestOptions (..),
+    newTransitGatewayRequestOptions,
+    transitGatewayRequestOptions_amazonSideAsn,
+    transitGatewayRequestOptions_autoAcceptSharedAttachments,
+    transitGatewayRequestOptions_defaultRouteTableAssociation,
+    transitGatewayRequestOptions_defaultRouteTablePropagation,
+    transitGatewayRequestOptions_dnsSupport,
+    transitGatewayRequestOptions_multicastSupport,
+    transitGatewayRequestOptions_transitGatewayCidrBlocks,
+    transitGatewayRequestOptions_vpnEcmpSupport,
+
+    -- * TransitGatewayRoute
+    TransitGatewayRoute (..),
+    newTransitGatewayRoute,
+    transitGatewayRoute_destinationCidrBlock,
+    transitGatewayRoute_prefixListId,
+    transitGatewayRoute_state,
+    transitGatewayRoute_transitGatewayAttachments,
+    transitGatewayRoute_transitGatewayRouteTableAnnouncementId,
+    transitGatewayRoute_type,
+
+    -- * TransitGatewayRouteAttachment
+    TransitGatewayRouteAttachment (..),
+    newTransitGatewayRouteAttachment,
+    transitGatewayRouteAttachment_resourceId,
+    transitGatewayRouteAttachment_resourceType,
+    transitGatewayRouteAttachment_transitGatewayAttachmentId,
+
+    -- * TransitGatewayRouteTable
+    TransitGatewayRouteTable (..),
+    newTransitGatewayRouteTable,
+    transitGatewayRouteTable_creationTime,
+    transitGatewayRouteTable_defaultAssociationRouteTable,
+    transitGatewayRouteTable_defaultPropagationRouteTable,
+    transitGatewayRouteTable_state,
+    transitGatewayRouteTable_tags,
+    transitGatewayRouteTable_transitGatewayId,
+    transitGatewayRouteTable_transitGatewayRouteTableId,
+
+    -- * TransitGatewayRouteTableAnnouncement
+    TransitGatewayRouteTableAnnouncement (..),
+    newTransitGatewayRouteTableAnnouncement,
+    transitGatewayRouteTableAnnouncement_announcementDirection,
+    transitGatewayRouteTableAnnouncement_coreNetworkId,
+    transitGatewayRouteTableAnnouncement_creationTime,
+    transitGatewayRouteTableAnnouncement_peerCoreNetworkId,
+    transitGatewayRouteTableAnnouncement_peerTransitGatewayId,
+    transitGatewayRouteTableAnnouncement_peeringAttachmentId,
+    transitGatewayRouteTableAnnouncement_state,
+    transitGatewayRouteTableAnnouncement_tags,
+    transitGatewayRouteTableAnnouncement_transitGatewayId,
+    transitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId,
+    transitGatewayRouteTableAnnouncement_transitGatewayRouteTableId,
+
+    -- * TransitGatewayRouteTableAssociation
+    TransitGatewayRouteTableAssociation (..),
+    newTransitGatewayRouteTableAssociation,
+    transitGatewayRouteTableAssociation_resourceId,
+    transitGatewayRouteTableAssociation_resourceType,
+    transitGatewayRouteTableAssociation_state,
+    transitGatewayRouteTableAssociation_transitGatewayAttachmentId,
+
+    -- * TransitGatewayRouteTablePropagation
+    TransitGatewayRouteTablePropagation (..),
+    newTransitGatewayRouteTablePropagation,
+    transitGatewayRouteTablePropagation_resourceId,
+    transitGatewayRouteTablePropagation_resourceType,
+    transitGatewayRouteTablePropagation_state,
+    transitGatewayRouteTablePropagation_transitGatewayAttachmentId,
+    transitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId,
+
+    -- * TransitGatewayRouteTableRoute
+    TransitGatewayRouteTableRoute (..),
+    newTransitGatewayRouteTableRoute,
+    transitGatewayRouteTableRoute_attachmentId,
+    transitGatewayRouteTableRoute_destinationCidr,
+    transitGatewayRouteTableRoute_prefixListId,
+    transitGatewayRouteTableRoute_resourceId,
+    transitGatewayRouteTableRoute_resourceType,
+    transitGatewayRouteTableRoute_routeOrigin,
+    transitGatewayRouteTableRoute_state,
+
+    -- * TransitGatewayVpcAttachment
+    TransitGatewayVpcAttachment (..),
+    newTransitGatewayVpcAttachment,
+    transitGatewayVpcAttachment_creationTime,
+    transitGatewayVpcAttachment_options,
+    transitGatewayVpcAttachment_state,
+    transitGatewayVpcAttachment_subnetIds,
+    transitGatewayVpcAttachment_tags,
+    transitGatewayVpcAttachment_transitGatewayAttachmentId,
+    transitGatewayVpcAttachment_transitGatewayId,
+    transitGatewayVpcAttachment_vpcId,
+    transitGatewayVpcAttachment_vpcOwnerId,
+
+    -- * TransitGatewayVpcAttachmentOptions
+    TransitGatewayVpcAttachmentOptions (..),
+    newTransitGatewayVpcAttachmentOptions,
+    transitGatewayVpcAttachmentOptions_applianceModeSupport,
+    transitGatewayVpcAttachmentOptions_dnsSupport,
+    transitGatewayVpcAttachmentOptions_ipv6Support,
+
+    -- * TrunkInterfaceAssociation
+    TrunkInterfaceAssociation (..),
+    newTrunkInterfaceAssociation,
+    trunkInterfaceAssociation_associationId,
+    trunkInterfaceAssociation_branchInterfaceId,
+    trunkInterfaceAssociation_greKey,
+    trunkInterfaceAssociation_interfaceProtocol,
+    trunkInterfaceAssociation_tags,
+    trunkInterfaceAssociation_trunkInterfaceId,
+    trunkInterfaceAssociation_vlanId,
+
+    -- * TunnelOption
+    TunnelOption (..),
+    newTunnelOption,
+    tunnelOption_dpdTimeoutAction,
+    tunnelOption_dpdTimeoutSeconds,
+    tunnelOption_ikeVersions,
+    tunnelOption_logOptions,
+    tunnelOption_outsideIpAddress,
+    tunnelOption_phase1DHGroupNumbers,
+    tunnelOption_phase1EncryptionAlgorithms,
+    tunnelOption_phase1IntegrityAlgorithms,
+    tunnelOption_phase1LifetimeSeconds,
+    tunnelOption_phase2DHGroupNumbers,
+    tunnelOption_phase2EncryptionAlgorithms,
+    tunnelOption_phase2IntegrityAlgorithms,
+    tunnelOption_phase2LifetimeSeconds,
+    tunnelOption_preSharedKey,
+    tunnelOption_rekeyFuzzPercentage,
+    tunnelOption_rekeyMarginTimeSeconds,
+    tunnelOption_replayWindowSize,
+    tunnelOption_startupAction,
+    tunnelOption_tunnelInsideCidr,
+    tunnelOption_tunnelInsideIpv6Cidr,
+
+    -- * UnsuccessfulInstanceCreditSpecificationItem
+    UnsuccessfulInstanceCreditSpecificationItem (..),
+    newUnsuccessfulInstanceCreditSpecificationItem,
+    unsuccessfulInstanceCreditSpecificationItem_error,
+    unsuccessfulInstanceCreditSpecificationItem_instanceId,
+
+    -- * UnsuccessfulInstanceCreditSpecificationItemError
+    UnsuccessfulInstanceCreditSpecificationItemError (..),
+    newUnsuccessfulInstanceCreditSpecificationItemError,
+    unsuccessfulInstanceCreditSpecificationItemError_code,
+    unsuccessfulInstanceCreditSpecificationItemError_message,
+
+    -- * UnsuccessfulItem
+    UnsuccessfulItem (..),
+    newUnsuccessfulItem,
+    unsuccessfulItem_error,
+    unsuccessfulItem_resourceId,
+
+    -- * UnsuccessfulItemError
+    UnsuccessfulItemError (..),
+    newUnsuccessfulItemError,
+    unsuccessfulItemError_code,
+    unsuccessfulItemError_message,
+
+    -- * UserBucket
+    UserBucket (..),
+    newUserBucket,
+    userBucket_s3Bucket,
+    userBucket_s3Key,
+
+    -- * UserBucketDetails
+    UserBucketDetails (..),
+    newUserBucketDetails,
+    userBucketDetails_s3Bucket,
+    userBucketDetails_s3Key,
+
+    -- * UserData
+    UserData (..),
+    newUserData,
+    userData_data,
+
+    -- * UserIdGroupPair
+    UserIdGroupPair (..),
+    newUserIdGroupPair,
+    userIdGroupPair_description,
+    userIdGroupPair_groupId,
+    userIdGroupPair_groupName,
+    userIdGroupPair_peeringStatus,
+    userIdGroupPair_userId,
+    userIdGroupPair_vpcId,
+    userIdGroupPair_vpcPeeringConnectionId,
+
+    -- * VCpuCountRange
+    VCpuCountRange (..),
+    newVCpuCountRange,
+    vCpuCountRange_max,
+    vCpuCountRange_min,
+
+    -- * VCpuCountRangeRequest
+    VCpuCountRangeRequest (..),
+    newVCpuCountRangeRequest,
+    vCpuCountRangeRequest_max,
+    vCpuCountRangeRequest_min,
+
+    -- * VCpuInfo
+    VCpuInfo (..),
+    newVCpuInfo,
+    vCpuInfo_defaultCores,
+    vCpuInfo_defaultThreadsPerCore,
+    vCpuInfo_defaultVCpus,
+    vCpuInfo_validCores,
+    vCpuInfo_validThreadsPerCore,
+
+    -- * ValidationError
+    ValidationError (..),
+    newValidationError,
+    validationError_code,
+    validationError_message,
+
+    -- * ValidationWarning
+    ValidationWarning (..),
+    newValidationWarning,
+    validationWarning_errors,
+
+    -- * VerifiedAccessEndpoint
+    VerifiedAccessEndpoint (..),
+    newVerifiedAccessEndpoint,
+    verifiedAccessEndpoint_applicationDomain,
+    verifiedAccessEndpoint_attachmentType,
+    verifiedAccessEndpoint_creationTime,
+    verifiedAccessEndpoint_deletionTime,
+    verifiedAccessEndpoint_description,
+    verifiedAccessEndpoint_deviceValidationDomain,
+    verifiedAccessEndpoint_domainCertificateArn,
+    verifiedAccessEndpoint_endpointDomain,
+    verifiedAccessEndpoint_endpointType,
+    verifiedAccessEndpoint_lastUpdatedTime,
+    verifiedAccessEndpoint_loadBalancerOptions,
+    verifiedAccessEndpoint_networkInterfaceOptions,
+    verifiedAccessEndpoint_securityGroupIds,
+    verifiedAccessEndpoint_status,
+    verifiedAccessEndpoint_tags,
+    verifiedAccessEndpoint_verifiedAccessEndpointId,
+    verifiedAccessEndpoint_verifiedAccessGroupId,
+    verifiedAccessEndpoint_verifiedAccessInstanceId,
+
+    -- * VerifiedAccessEndpointEniOptions
+    VerifiedAccessEndpointEniOptions (..),
+    newVerifiedAccessEndpointEniOptions,
+    verifiedAccessEndpointEniOptions_networkInterfaceId,
+    verifiedAccessEndpointEniOptions_port,
+    verifiedAccessEndpointEniOptions_protocol,
+
+    -- * VerifiedAccessEndpointLoadBalancerOptions
+    VerifiedAccessEndpointLoadBalancerOptions (..),
+    newVerifiedAccessEndpointLoadBalancerOptions,
+    verifiedAccessEndpointLoadBalancerOptions_loadBalancerArn,
+    verifiedAccessEndpointLoadBalancerOptions_port,
+    verifiedAccessEndpointLoadBalancerOptions_protocol,
+    verifiedAccessEndpointLoadBalancerOptions_subnetIds,
+
+    -- * VerifiedAccessEndpointStatus
+    VerifiedAccessEndpointStatus (..),
+    newVerifiedAccessEndpointStatus,
+    verifiedAccessEndpointStatus_code,
+    verifiedAccessEndpointStatus_message,
+
+    -- * VerifiedAccessGroup
+    VerifiedAccessGroup (..),
+    newVerifiedAccessGroup,
+    verifiedAccessGroup_creationTime,
+    verifiedAccessGroup_deletionTime,
+    verifiedAccessGroup_description,
+    verifiedAccessGroup_lastUpdatedTime,
+    verifiedAccessGroup_owner,
+    verifiedAccessGroup_tags,
+    verifiedAccessGroup_verifiedAccessGroupArn,
+    verifiedAccessGroup_verifiedAccessGroupId,
+    verifiedAccessGroup_verifiedAccessInstanceId,
+
+    -- * VerifiedAccessInstance
+    VerifiedAccessInstance (..),
+    newVerifiedAccessInstance,
+    verifiedAccessInstance_creationTime,
+    verifiedAccessInstance_description,
+    verifiedAccessInstance_lastUpdatedTime,
+    verifiedAccessInstance_tags,
+    verifiedAccessInstance_verifiedAccessInstanceId,
+    verifiedAccessInstance_verifiedAccessTrustProviders,
+
+    -- * VerifiedAccessInstanceLoggingConfiguration
+    VerifiedAccessInstanceLoggingConfiguration (..),
+    newVerifiedAccessInstanceLoggingConfiguration,
+    verifiedAccessInstanceLoggingConfiguration_accessLogs,
+    verifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId,
+
+    -- * VerifiedAccessLogCloudWatchLogsDestination
+    VerifiedAccessLogCloudWatchLogsDestination (..),
+    newVerifiedAccessLogCloudWatchLogsDestination,
+    verifiedAccessLogCloudWatchLogsDestination_deliveryStatus,
+    verifiedAccessLogCloudWatchLogsDestination_enabled,
+    verifiedAccessLogCloudWatchLogsDestination_logGroup,
+
+    -- * VerifiedAccessLogCloudWatchLogsDestinationOptions
+    VerifiedAccessLogCloudWatchLogsDestinationOptions (..),
+    newVerifiedAccessLogCloudWatchLogsDestinationOptions,
+    verifiedAccessLogCloudWatchLogsDestinationOptions_logGroup,
+    verifiedAccessLogCloudWatchLogsDestinationOptions_enabled,
+
+    -- * VerifiedAccessLogDeliveryStatus
+    VerifiedAccessLogDeliveryStatus (..),
+    newVerifiedAccessLogDeliveryStatus,
+    verifiedAccessLogDeliveryStatus_code,
+    verifiedAccessLogDeliveryStatus_message,
+
+    -- * VerifiedAccessLogKinesisDataFirehoseDestination
+    VerifiedAccessLogKinesisDataFirehoseDestination (..),
+    newVerifiedAccessLogKinesisDataFirehoseDestination,
+    verifiedAccessLogKinesisDataFirehoseDestination_deliveryStatus,
+    verifiedAccessLogKinesisDataFirehoseDestination_deliveryStream,
+    verifiedAccessLogKinesisDataFirehoseDestination_enabled,
+
+    -- * VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions (..),
+    newVerifiedAccessLogKinesisDataFirehoseDestinationOptions,
+    verifiedAccessLogKinesisDataFirehoseDestinationOptions_deliveryStream,
+    verifiedAccessLogKinesisDataFirehoseDestinationOptions_enabled,
+
+    -- * VerifiedAccessLogOptions
+    VerifiedAccessLogOptions (..),
+    newVerifiedAccessLogOptions,
+    verifiedAccessLogOptions_cloudWatchLogs,
+    verifiedAccessLogOptions_kinesisDataFirehose,
+    verifiedAccessLogOptions_s3,
+
+    -- * VerifiedAccessLogS3Destination
+    VerifiedAccessLogS3Destination (..),
+    newVerifiedAccessLogS3Destination,
+    verifiedAccessLogS3Destination_bucketName,
+    verifiedAccessLogS3Destination_bucketOwner,
+    verifiedAccessLogS3Destination_deliveryStatus,
+    verifiedAccessLogS3Destination_enabled,
+    verifiedAccessLogS3Destination_prefix,
+
+    -- * VerifiedAccessLogS3DestinationOptions
+    VerifiedAccessLogS3DestinationOptions (..),
+    newVerifiedAccessLogS3DestinationOptions,
+    verifiedAccessLogS3DestinationOptions_bucketName,
+    verifiedAccessLogS3DestinationOptions_bucketOwner,
+    verifiedAccessLogS3DestinationOptions_prefix,
+    verifiedAccessLogS3DestinationOptions_enabled,
+
+    -- * VerifiedAccessLogs
+    VerifiedAccessLogs (..),
+    newVerifiedAccessLogs,
+    verifiedAccessLogs_cloudWatchLogs,
+    verifiedAccessLogs_kinesisDataFirehose,
+    verifiedAccessLogs_s3,
+
+    -- * VerifiedAccessTrustProvider
+    VerifiedAccessTrustProvider (..),
+    newVerifiedAccessTrustProvider,
+    verifiedAccessTrustProvider_creationTime,
+    verifiedAccessTrustProvider_description,
+    verifiedAccessTrustProvider_deviceOptions,
+    verifiedAccessTrustProvider_deviceTrustProviderType,
+    verifiedAccessTrustProvider_lastUpdatedTime,
+    verifiedAccessTrustProvider_oidcOptions,
+    verifiedAccessTrustProvider_policyReferenceName,
+    verifiedAccessTrustProvider_tags,
+    verifiedAccessTrustProvider_trustProviderType,
+    verifiedAccessTrustProvider_userTrustProviderType,
+    verifiedAccessTrustProvider_verifiedAccessTrustProviderId,
+
+    -- * VerifiedAccessTrustProviderCondensed
+    VerifiedAccessTrustProviderCondensed (..),
+    newVerifiedAccessTrustProviderCondensed,
+    verifiedAccessTrustProviderCondensed_description,
+    verifiedAccessTrustProviderCondensed_deviceTrustProviderType,
+    verifiedAccessTrustProviderCondensed_trustProviderType,
+    verifiedAccessTrustProviderCondensed_userTrustProviderType,
+    verifiedAccessTrustProviderCondensed_verifiedAccessTrustProviderId,
+
+    -- * VgwTelemetry
+    VgwTelemetry (..),
+    newVgwTelemetry,
+    vgwTelemetry_acceptedRouteCount,
+    vgwTelemetry_certificateArn,
+    vgwTelemetry_lastStatusChange,
+    vgwTelemetry_outsideIpAddress,
+    vgwTelemetry_status,
+    vgwTelemetry_statusMessage,
+
+    -- * Volume
+    Volume (..),
+    newVolume,
+    volume_attachments,
+    volume_fastRestored,
+    volume_iops,
+    volume_kmsKeyId,
+    volume_multiAttachEnabled,
+    volume_outpostArn,
+    volume_tags,
+    volume_throughput,
+    volume_availabilityZone,
+    volume_createTime,
+    volume_encrypted,
+    volume_size,
+    volume_snapshotId,
+    volume_state,
+    volume_volumeId,
+    volume_volumeType,
+
+    -- * VolumeAttachment
+    VolumeAttachment (..),
+    newVolumeAttachment,
+    volumeAttachment_attachTime,
+    volumeAttachment_deleteOnTermination,
+    volumeAttachment_device,
+    volumeAttachment_instanceId,
+    volumeAttachment_state,
+    volumeAttachment_volumeId,
+
+    -- * VolumeDetail
+    VolumeDetail (..),
+    newVolumeDetail,
+    volumeDetail_size,
+
+    -- * VolumeModification
+    VolumeModification (..),
+    newVolumeModification,
+    volumeModification_endTime,
+    volumeModification_modificationState,
+    volumeModification_originalIops,
+    volumeModification_originalMultiAttachEnabled,
+    volumeModification_originalSize,
+    volumeModification_originalThroughput,
+    volumeModification_originalVolumeType,
+    volumeModification_progress,
+    volumeModification_startTime,
+    volumeModification_statusMessage,
+    volumeModification_targetIops,
+    volumeModification_targetMultiAttachEnabled,
+    volumeModification_targetSize,
+    volumeModification_targetThroughput,
+    volumeModification_targetVolumeType,
+    volumeModification_volumeId,
+
+    -- * VolumeStatusAction
+    VolumeStatusAction (..),
+    newVolumeStatusAction,
+    volumeStatusAction_code,
+    volumeStatusAction_description,
+    volumeStatusAction_eventId,
+    volumeStatusAction_eventType,
+
+    -- * VolumeStatusAttachmentStatus
+    VolumeStatusAttachmentStatus (..),
+    newVolumeStatusAttachmentStatus,
+    volumeStatusAttachmentStatus_instanceId,
+    volumeStatusAttachmentStatus_ioPerformance,
+
+    -- * VolumeStatusDetails
+    VolumeStatusDetails (..),
+    newVolumeStatusDetails,
+    volumeStatusDetails_name,
+    volumeStatusDetails_status,
+
+    -- * VolumeStatusEvent
+    VolumeStatusEvent (..),
+    newVolumeStatusEvent,
+    volumeStatusEvent_description,
+    volumeStatusEvent_eventId,
+    volumeStatusEvent_eventType,
+    volumeStatusEvent_instanceId,
+    volumeStatusEvent_notAfter,
+    volumeStatusEvent_notBefore,
+
+    -- * VolumeStatusInfo
+    VolumeStatusInfo (..),
+    newVolumeStatusInfo,
+    volumeStatusInfo_details,
+    volumeStatusInfo_status,
+
+    -- * VolumeStatusItem
+    VolumeStatusItem (..),
+    newVolumeStatusItem,
+    volumeStatusItem_actions,
+    volumeStatusItem_attachmentStatuses,
+    volumeStatusItem_availabilityZone,
+    volumeStatusItem_events,
+    volumeStatusItem_outpostArn,
+    volumeStatusItem_volumeId,
+    volumeStatusItem_volumeStatus,
+
+    -- * Vpc
+    Vpc (..),
+    newVpc,
+    vpc_cidrBlockAssociationSet,
+    vpc_ipv6CidrBlockAssociationSet,
+    vpc_isDefault,
+    vpc_ownerId,
+    vpc_tags,
+    vpc_cidrBlock,
+    vpc_dhcpOptionsId,
+    vpc_instanceTenancy,
+    vpc_state,
+    vpc_vpcId,
+
+    -- * VpcAttachment
+    VpcAttachment (..),
+    newVpcAttachment,
+    vpcAttachment_state,
+    vpcAttachment_vpcId,
+
+    -- * VpcCidrBlockAssociation
+    VpcCidrBlockAssociation (..),
+    newVpcCidrBlockAssociation,
+    vpcCidrBlockAssociation_associationId,
+    vpcCidrBlockAssociation_cidrBlock,
+    vpcCidrBlockAssociation_cidrBlockState,
+
+    -- * VpcCidrBlockState
+    VpcCidrBlockState (..),
+    newVpcCidrBlockState,
+    vpcCidrBlockState_state,
+    vpcCidrBlockState_statusMessage,
+
+    -- * VpcClassicLink
+    VpcClassicLink (..),
+    newVpcClassicLink,
+    vpcClassicLink_classicLinkEnabled,
+    vpcClassicLink_tags,
+    vpcClassicLink_vpcId,
+
+    -- * VpcEndpoint
+    VpcEndpoint (..),
+    newVpcEndpoint,
+    vpcEndpoint_creationTimestamp,
+    vpcEndpoint_dnsEntries,
+    vpcEndpoint_dnsOptions,
+    vpcEndpoint_groups,
+    vpcEndpoint_ipAddressType,
+    vpcEndpoint_lastError,
+    vpcEndpoint_networkInterfaceIds,
+    vpcEndpoint_ownerId,
+    vpcEndpoint_policyDocument,
+    vpcEndpoint_privateDnsEnabled,
+    vpcEndpoint_requesterManaged,
+    vpcEndpoint_routeTableIds,
+    vpcEndpoint_serviceName,
+    vpcEndpoint_state,
+    vpcEndpoint_subnetIds,
+    vpcEndpoint_tags,
+    vpcEndpoint_vpcEndpointId,
+    vpcEndpoint_vpcEndpointType,
+    vpcEndpoint_vpcId,
+
+    -- * VpcEndpointConnection
+    VpcEndpointConnection (..),
+    newVpcEndpointConnection,
+    vpcEndpointConnection_creationTimestamp,
+    vpcEndpointConnection_dnsEntries,
+    vpcEndpointConnection_gatewayLoadBalancerArns,
+    vpcEndpointConnection_ipAddressType,
+    vpcEndpointConnection_networkLoadBalancerArns,
+    vpcEndpointConnection_serviceId,
+    vpcEndpointConnection_tags,
+    vpcEndpointConnection_vpcEndpointConnectionId,
+    vpcEndpointConnection_vpcEndpointId,
+    vpcEndpointConnection_vpcEndpointOwner,
+    vpcEndpointConnection_vpcEndpointState,
+
+    -- * VpcIpv6CidrBlockAssociation
+    VpcIpv6CidrBlockAssociation (..),
+    newVpcIpv6CidrBlockAssociation,
+    vpcIpv6CidrBlockAssociation_associationId,
+    vpcIpv6CidrBlockAssociation_ipv6CidrBlock,
+    vpcIpv6CidrBlockAssociation_ipv6CidrBlockState,
+    vpcIpv6CidrBlockAssociation_ipv6Pool,
+    vpcIpv6CidrBlockAssociation_networkBorderGroup,
+
+    -- * VpcPeeringConnection
+    VpcPeeringConnection (..),
+    newVpcPeeringConnection,
+    vpcPeeringConnection_accepterVpcInfo,
+    vpcPeeringConnection_expirationTime,
+    vpcPeeringConnection_requesterVpcInfo,
+    vpcPeeringConnection_status,
+    vpcPeeringConnection_tags,
+    vpcPeeringConnection_vpcPeeringConnectionId,
+
+    -- * VpcPeeringConnectionOptionsDescription
+    VpcPeeringConnectionOptionsDescription (..),
+    newVpcPeeringConnectionOptionsDescription,
+    vpcPeeringConnectionOptionsDescription_allowDnsResolutionFromRemoteVpc,
+    vpcPeeringConnectionOptionsDescription_allowEgressFromLocalClassicLinkToRemoteVpc,
+    vpcPeeringConnectionOptionsDescription_allowEgressFromLocalVpcToRemoteClassicLink,
+
+    -- * VpcPeeringConnectionStateReason
+    VpcPeeringConnectionStateReason (..),
+    newVpcPeeringConnectionStateReason,
+    vpcPeeringConnectionStateReason_code,
+    vpcPeeringConnectionStateReason_message,
+
+    -- * VpcPeeringConnectionVpcInfo
+    VpcPeeringConnectionVpcInfo (..),
+    newVpcPeeringConnectionVpcInfo,
+    vpcPeeringConnectionVpcInfo_cidrBlock,
+    vpcPeeringConnectionVpcInfo_cidrBlockSet,
+    vpcPeeringConnectionVpcInfo_ipv6CidrBlockSet,
+    vpcPeeringConnectionVpcInfo_ownerId,
+    vpcPeeringConnectionVpcInfo_peeringOptions,
+    vpcPeeringConnectionVpcInfo_region,
+    vpcPeeringConnectionVpcInfo_vpcId,
+
+    -- * VpnConnection
+    VpnConnection (..),
+    newVpnConnection,
+    vpnConnection_category,
+    vpnConnection_coreNetworkArn,
+    vpnConnection_coreNetworkAttachmentArn,
+    vpnConnection_customerGatewayConfiguration,
+    vpnConnection_gatewayAssociationState,
+    vpnConnection_options,
+    vpnConnection_routes,
+    vpnConnection_tags,
+    vpnConnection_transitGatewayId,
+    vpnConnection_vgwTelemetry,
+    vpnConnection_vpnGatewayId,
+    vpnConnection_vpnConnectionId,
+    vpnConnection_customerGatewayId,
+    vpnConnection_state,
+    vpnConnection_type,
+
+    -- * VpnConnectionDeviceType
+    VpnConnectionDeviceType (..),
+    newVpnConnectionDeviceType,
+    vpnConnectionDeviceType_platform,
+    vpnConnectionDeviceType_software,
+    vpnConnectionDeviceType_vendor,
+    vpnConnectionDeviceType_vpnConnectionDeviceTypeId,
+
+    -- * VpnConnectionOptions
+    VpnConnectionOptions (..),
+    newVpnConnectionOptions,
+    vpnConnectionOptions_enableAcceleration,
+    vpnConnectionOptions_localIpv4NetworkCidr,
+    vpnConnectionOptions_localIpv6NetworkCidr,
+    vpnConnectionOptions_outsideIpAddressType,
+    vpnConnectionOptions_remoteIpv4NetworkCidr,
+    vpnConnectionOptions_remoteIpv6NetworkCidr,
+    vpnConnectionOptions_staticRoutesOnly,
+    vpnConnectionOptions_transportTransitGatewayAttachmentId,
+    vpnConnectionOptions_tunnelInsideIpVersion,
+    vpnConnectionOptions_tunnelOptions,
+
+    -- * VpnConnectionOptionsSpecification
+    VpnConnectionOptionsSpecification (..),
+    newVpnConnectionOptionsSpecification,
+    vpnConnectionOptionsSpecification_enableAcceleration,
+    vpnConnectionOptionsSpecification_localIpv4NetworkCidr,
+    vpnConnectionOptionsSpecification_localIpv6NetworkCidr,
+    vpnConnectionOptionsSpecification_outsideIpAddressType,
+    vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr,
+    vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr,
+    vpnConnectionOptionsSpecification_staticRoutesOnly,
+    vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId,
+    vpnConnectionOptionsSpecification_tunnelInsideIpVersion,
+    vpnConnectionOptionsSpecification_tunnelOptions,
+
+    -- * VpnGateway
+    VpnGateway (..),
+    newVpnGateway,
+    vpnGateway_amazonSideAsn,
+    vpnGateway_availabilityZone,
+    vpnGateway_state,
+    vpnGateway_tags,
+    vpnGateway_type,
+    vpnGateway_vpcAttachments,
+    vpnGateway_vpnGatewayId,
+
+    -- * VpnStaticRoute
+    VpnStaticRoute (..),
+    newVpnStaticRoute,
+    vpnStaticRoute_destinationCidrBlock,
+    vpnStaticRoute_source,
+    vpnStaticRoute_state,
+
+    -- * VpnTunnelLogOptions
+    VpnTunnelLogOptions (..),
+    newVpnTunnelLogOptions,
+    vpnTunnelLogOptions_cloudWatchLogOptions,
+
+    -- * VpnTunnelLogOptionsSpecification
+    VpnTunnelLogOptionsSpecification (..),
+    newVpnTunnelLogOptionsSpecification,
+    vpnTunnelLogOptionsSpecification_cloudWatchLogOptions,
+
+    -- * VpnTunnelOptionsSpecification
+    VpnTunnelOptionsSpecification (..),
+    newVpnTunnelOptionsSpecification,
+    vpnTunnelOptionsSpecification_dPDTimeoutAction,
+    vpnTunnelOptionsSpecification_dPDTimeoutSeconds,
+    vpnTunnelOptionsSpecification_iKEVersions,
+    vpnTunnelOptionsSpecification_logOptions,
+    vpnTunnelOptionsSpecification_phase1DHGroupNumbers,
+    vpnTunnelOptionsSpecification_phase1EncryptionAlgorithms,
+    vpnTunnelOptionsSpecification_phase1IntegrityAlgorithms,
+    vpnTunnelOptionsSpecification_phase1LifetimeSeconds,
+    vpnTunnelOptionsSpecification_phase2DHGroupNumbers,
+    vpnTunnelOptionsSpecification_phase2EncryptionAlgorithms,
+    vpnTunnelOptionsSpecification_phase2IntegrityAlgorithms,
+    vpnTunnelOptionsSpecification_phase2LifetimeSeconds,
+    vpnTunnelOptionsSpecification_preSharedKey,
+    vpnTunnelOptionsSpecification_rekeyFuzzPercentage,
+    vpnTunnelOptionsSpecification_rekeyMarginTimeSeconds,
+    vpnTunnelOptionsSpecification_replayWindowSize,
+    vpnTunnelOptionsSpecification_startupAction,
+    vpnTunnelOptionsSpecification_tunnelInsideCidr,
+    vpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AcceleratorCount
+import Amazonka.EC2.Types.AcceleratorCountRequest
+import Amazonka.EC2.Types.AcceleratorManufacturer
+import Amazonka.EC2.Types.AcceleratorName
+import Amazonka.EC2.Types.AcceleratorTotalMemoryMiB
+import Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest
+import Amazonka.EC2.Types.AcceleratorType
+import Amazonka.EC2.Types.AccessScopeAnalysisFinding
+import Amazonka.EC2.Types.AccessScopePath
+import Amazonka.EC2.Types.AccessScopePathRequest
+import Amazonka.EC2.Types.AccountAttribute
+import Amazonka.EC2.Types.AccountAttributeName
+import Amazonka.EC2.Types.AccountAttributeValue
+import Amazonka.EC2.Types.ActiveInstance
+import Amazonka.EC2.Types.ActivityStatus
+import Amazonka.EC2.Types.AddIpamOperatingRegion
+import Amazonka.EC2.Types.AddPrefixListEntry
+import Amazonka.EC2.Types.AddedPrincipal
+import Amazonka.EC2.Types.AdditionalDetail
+import Amazonka.EC2.Types.Address
+import Amazonka.EC2.Types.AddressAttribute
+import Amazonka.EC2.Types.AddressAttributeName
+import Amazonka.EC2.Types.AddressFamily
+import Amazonka.EC2.Types.AddressStatus
+import Amazonka.EC2.Types.AddressTransfer
+import Amazonka.EC2.Types.AddressTransferStatus
+import Amazonka.EC2.Types.Affinity
+import Amazonka.EC2.Types.AllocationState
+import Amazonka.EC2.Types.AllocationStrategy
+import Amazonka.EC2.Types.AllocationType
+import Amazonka.EC2.Types.AllowedPrincipal
+import Amazonka.EC2.Types.AllowsMultipleInstanceTypes
+import Amazonka.EC2.Types.AlternatePathHint
+import Amazonka.EC2.Types.AnalysisAclRule
+import Amazonka.EC2.Types.AnalysisComponent
+import Amazonka.EC2.Types.AnalysisLoadBalancerListener
+import Amazonka.EC2.Types.AnalysisLoadBalancerTarget
+import Amazonka.EC2.Types.AnalysisPacketHeader
+import Amazonka.EC2.Types.AnalysisRouteTableRoute
+import Amazonka.EC2.Types.AnalysisSecurityGroupRule
+import Amazonka.EC2.Types.AnalysisStatus
+import Amazonka.EC2.Types.ApplianceModeSupportValue
+import Amazonka.EC2.Types.ArchitectureType
+import Amazonka.EC2.Types.ArchitectureValues
+import Amazonka.EC2.Types.AssignedPrivateIpAddress
+import Amazonka.EC2.Types.AssociatedNetworkType
+import Amazonka.EC2.Types.AssociatedRole
+import Amazonka.EC2.Types.AssociatedTargetNetwork
+import Amazonka.EC2.Types.AssociationStatus
+import Amazonka.EC2.Types.AssociationStatusCode
+import Amazonka.EC2.Types.AthenaIntegration
+import Amazonka.EC2.Types.AttachmentEnaSrdSpecification
+import Amazonka.EC2.Types.AttachmentEnaSrdUdpSpecification
+import Amazonka.EC2.Types.AttachmentStatus
+import Amazonka.EC2.Types.AttributeBooleanValue
+import Amazonka.EC2.Types.AttributeValue
+import Amazonka.EC2.Types.AuthorizationRule
+import Amazonka.EC2.Types.AutoAcceptSharedAssociationsValue
+import Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+import Amazonka.EC2.Types.AutoPlacement
+import Amazonka.EC2.Types.AvailabilityZone
+import Amazonka.EC2.Types.AvailabilityZoneMessage
+import Amazonka.EC2.Types.AvailabilityZoneOptInStatus
+import Amazonka.EC2.Types.AvailabilityZoneState
+import Amazonka.EC2.Types.AvailableCapacity
+import Amazonka.EC2.Types.BareMetal
+import Amazonka.EC2.Types.BaselineEbsBandwidthMbps
+import Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest
+import Amazonka.EC2.Types.BatchState
+import Amazonka.EC2.Types.BgpStatus
+import Amazonka.EC2.Types.BlobAttributeValue
+import Amazonka.EC2.Types.BlockDeviceMapping
+import Amazonka.EC2.Types.BootModeType
+import Amazonka.EC2.Types.BootModeValues
+import Amazonka.EC2.Types.BundleTask
+import Amazonka.EC2.Types.BundleTaskError
+import Amazonka.EC2.Types.BundleTaskState
+import Amazonka.EC2.Types.BurstablePerformance
+import Amazonka.EC2.Types.ByoipCidr
+import Amazonka.EC2.Types.ByoipCidrState
+import Amazonka.EC2.Types.CancelBatchErrorCode
+import Amazonka.EC2.Types.CancelCapacityReservationFleetError
+import Amazonka.EC2.Types.CancelSpotFleetRequestsError
+import Amazonka.EC2.Types.CancelSpotFleetRequestsErrorItem
+import Amazonka.EC2.Types.CancelSpotFleetRequestsSuccessItem
+import Amazonka.EC2.Types.CancelSpotInstanceRequestState
+import Amazonka.EC2.Types.CancelledSpotInstanceRequest
+import Amazonka.EC2.Types.CapacityAllocation
+import Amazonka.EC2.Types.CapacityReservation
+import Amazonka.EC2.Types.CapacityReservationFleet
+import Amazonka.EC2.Types.CapacityReservationFleetCancellationState
+import Amazonka.EC2.Types.CapacityReservationFleetState
+import Amazonka.EC2.Types.CapacityReservationGroup
+import Amazonka.EC2.Types.CapacityReservationInstancePlatform
+import Amazonka.EC2.Types.CapacityReservationOptions
+import Amazonka.EC2.Types.CapacityReservationOptionsRequest
+import Amazonka.EC2.Types.CapacityReservationPreference
+import Amazonka.EC2.Types.CapacityReservationSpecification
+import Amazonka.EC2.Types.CapacityReservationSpecificationResponse
+import Amazonka.EC2.Types.CapacityReservationState
+import Amazonka.EC2.Types.CapacityReservationTarget
+import Amazonka.EC2.Types.CapacityReservationTargetResponse
+import Amazonka.EC2.Types.CapacityReservationTenancy
+import Amazonka.EC2.Types.CarrierGateway
+import Amazonka.EC2.Types.CarrierGatewayState
+import Amazonka.EC2.Types.CertificateAuthentication
+import Amazonka.EC2.Types.CertificateAuthenticationRequest
+import Amazonka.EC2.Types.CidrAuthorizationContext
+import Amazonka.EC2.Types.CidrBlock
+import Amazonka.EC2.Types.ClassicLinkDnsSupport
+import Amazonka.EC2.Types.ClassicLinkInstance
+import Amazonka.EC2.Types.ClassicLoadBalancer
+import Amazonka.EC2.Types.ClassicLoadBalancersConfig
+import Amazonka.EC2.Types.ClientCertificateRevocationListStatus
+import Amazonka.EC2.Types.ClientCertificateRevocationListStatusCode
+import Amazonka.EC2.Types.ClientConnectOptions
+import Amazonka.EC2.Types.ClientConnectResponseOptions
+import Amazonka.EC2.Types.ClientData
+import Amazonka.EC2.Types.ClientLoginBannerOptions
+import Amazonka.EC2.Types.ClientLoginBannerResponseOptions
+import Amazonka.EC2.Types.ClientVpnAuthentication
+import Amazonka.EC2.Types.ClientVpnAuthenticationRequest
+import Amazonka.EC2.Types.ClientVpnAuthenticationType
+import Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatus
+import Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatusCode
+import Amazonka.EC2.Types.ClientVpnConnection
+import Amazonka.EC2.Types.ClientVpnConnectionStatus
+import Amazonka.EC2.Types.ClientVpnConnectionStatusCode
+import Amazonka.EC2.Types.ClientVpnEndpoint
+import Amazonka.EC2.Types.ClientVpnEndpointAttributeStatus
+import Amazonka.EC2.Types.ClientVpnEndpointAttributeStatusCode
+import Amazonka.EC2.Types.ClientVpnEndpointStatus
+import Amazonka.EC2.Types.ClientVpnEndpointStatusCode
+import Amazonka.EC2.Types.ClientVpnRoute
+import Amazonka.EC2.Types.ClientVpnRouteStatus
+import Amazonka.EC2.Types.ClientVpnRouteStatusCode
+import Amazonka.EC2.Types.CloudWatchLogOptions
+import Amazonka.EC2.Types.CloudWatchLogOptionsSpecification
+import Amazonka.EC2.Types.CoipAddressUsage
+import Amazonka.EC2.Types.CoipCidr
+import Amazonka.EC2.Types.CoipPool
+import Amazonka.EC2.Types.ConnectionLogOptions
+import Amazonka.EC2.Types.ConnectionLogResponseOptions
+import Amazonka.EC2.Types.ConnectionNotification
+import Amazonka.EC2.Types.ConnectionNotificationState
+import Amazonka.EC2.Types.ConnectionNotificationType
+import Amazonka.EC2.Types.ConnectivityType
+import Amazonka.EC2.Types.ContainerFormat
+import Amazonka.EC2.Types.ConversionTask
+import Amazonka.EC2.Types.ConversionTaskState
+import Amazonka.EC2.Types.CopyTagsFromSource
+import Amazonka.EC2.Types.CpuManufacturer
+import Amazonka.EC2.Types.CpuOptions
+import Amazonka.EC2.Types.CpuOptionsRequest
+import Amazonka.EC2.Types.CreateFleetError
+import Amazonka.EC2.Types.CreateFleetInstance
+import Amazonka.EC2.Types.CreateTransitGatewayConnectRequestOptions
+import Amazonka.EC2.Types.CreateTransitGatewayMulticastDomainRequestOptions
+import Amazonka.EC2.Types.CreateTransitGatewayPeeringAttachmentRequestOptions
+import Amazonka.EC2.Types.CreateTransitGatewayVpcAttachmentRequestOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderDeviceOptions
+import Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderOidcOptions
+import Amazonka.EC2.Types.CreateVolumePermission
+import Amazonka.EC2.Types.CreateVolumePermissionModifications
+import Amazonka.EC2.Types.CreditSpecification
+import Amazonka.EC2.Types.CreditSpecificationRequest
+import Amazonka.EC2.Types.CurrencyCodeValues
+import Amazonka.EC2.Types.CustomerGateway
+import Amazonka.EC2.Types.DataQuery
+import Amazonka.EC2.Types.DataResponse
+import Amazonka.EC2.Types.DatafeedSubscriptionState
+import Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+import Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+import Amazonka.EC2.Types.DefaultTargetCapacityType
+import Amazonka.EC2.Types.DeleteFleetError
+import Amazonka.EC2.Types.DeleteFleetErrorCode
+import Amazonka.EC2.Types.DeleteFleetErrorItem
+import Amazonka.EC2.Types.DeleteFleetSuccessItem
+import Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseErrorItem
+import Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseSuccessItem
+import Amazonka.EC2.Types.DeleteQueuedReservedInstancesError
+import Amazonka.EC2.Types.DeleteQueuedReservedInstancesErrorCode
+import Amazonka.EC2.Types.DeregisterInstanceTagAttributeRequest
+import Amazonka.EC2.Types.DescribeFastLaunchImagesSuccessItem
+import Amazonka.EC2.Types.DescribeFastSnapshotRestoreSuccessItem
+import Amazonka.EC2.Types.DescribeFleetError
+import Amazonka.EC2.Types.DescribeFleetsInstances
+import Amazonka.EC2.Types.DestinationFileFormat
+import Amazonka.EC2.Types.DestinationOptionsRequest
+import Amazonka.EC2.Types.DestinationOptionsResponse
+import Amazonka.EC2.Types.DeviceOptions
+import Amazonka.EC2.Types.DeviceTrustProviderType
+import Amazonka.EC2.Types.DeviceType
+import Amazonka.EC2.Types.DhcpConfiguration
+import Amazonka.EC2.Types.DhcpOptions
+import Amazonka.EC2.Types.DirectoryServiceAuthentication
+import Amazonka.EC2.Types.DirectoryServiceAuthenticationRequest
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreErrorItem
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreStateError
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreStateErrorItem
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreSuccessItem
+import Amazonka.EC2.Types.DiskImage
+import Amazonka.EC2.Types.DiskImageDescription
+import Amazonka.EC2.Types.DiskImageDetail
+import Amazonka.EC2.Types.DiskImageFormat
+import Amazonka.EC2.Types.DiskImageVolumeDescription
+import Amazonka.EC2.Types.DiskInfo
+import Amazonka.EC2.Types.DiskType
+import Amazonka.EC2.Types.DnsEntry
+import Amazonka.EC2.Types.DnsNameState
+import Amazonka.EC2.Types.DnsOptions
+import Amazonka.EC2.Types.DnsOptionsSpecification
+import Amazonka.EC2.Types.DnsRecordIpType
+import Amazonka.EC2.Types.DnsServersOptionsModifyStructure
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.DomainType
+import Amazonka.EC2.Types.DynamicRoutingValue
+import Amazonka.EC2.Types.EbsBlockDevice
+import Amazonka.EC2.Types.EbsEncryptionSupport
+import Amazonka.EC2.Types.EbsInfo
+import Amazonka.EC2.Types.EbsInstanceBlockDevice
+import Amazonka.EC2.Types.EbsInstanceBlockDeviceSpecification
+import Amazonka.EC2.Types.EbsNvmeSupport
+import Amazonka.EC2.Types.EbsOptimizedInfo
+import Amazonka.EC2.Types.EbsOptimizedSupport
+import Amazonka.EC2.Types.EfaInfo
+import Amazonka.EC2.Types.EgressOnlyInternetGateway
+import Amazonka.EC2.Types.ElasticGpuAssociation
+import Amazonka.EC2.Types.ElasticGpuHealth
+import Amazonka.EC2.Types.ElasticGpuSpecification
+import Amazonka.EC2.Types.ElasticGpuSpecificationResponse
+import Amazonka.EC2.Types.ElasticGpuState
+import Amazonka.EC2.Types.ElasticGpuStatus
+import Amazonka.EC2.Types.ElasticGpus
+import Amazonka.EC2.Types.ElasticInferenceAccelerator
+import Amazonka.EC2.Types.ElasticInferenceAcceleratorAssociation
+import Amazonka.EC2.Types.EnaSrdSpecification
+import Amazonka.EC2.Types.EnaSrdUdpSpecification
+import Amazonka.EC2.Types.EnaSupport
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreErrorItem
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreStateError
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreStateErrorItem
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreSuccessItem
+import Amazonka.EC2.Types.EnclaveOptions
+import Amazonka.EC2.Types.EnclaveOptionsRequest
+import Amazonka.EC2.Types.EndDateType
+import Amazonka.EC2.Types.EphemeralNvmeSupport
+import Amazonka.EC2.Types.EventCode
+import Amazonka.EC2.Types.EventInformation
+import Amazonka.EC2.Types.EventType
+import Amazonka.EC2.Types.ExcessCapacityTerminationPolicy
+import Amazonka.EC2.Types.Explanation
+import Amazonka.EC2.Types.ExportEnvironment
+import Amazonka.EC2.Types.ExportImageTask
+import Amazonka.EC2.Types.ExportTask
+import Amazonka.EC2.Types.ExportTaskS3Location
+import Amazonka.EC2.Types.ExportTaskS3LocationRequest
+import Amazonka.EC2.Types.ExportTaskState
+import Amazonka.EC2.Types.ExportToS3Task
+import Amazonka.EC2.Types.ExportToS3TaskSpecification
+import Amazonka.EC2.Types.FailedCapacityReservationFleetCancellationResult
+import Amazonka.EC2.Types.FailedQueuedPurchaseDeletion
+import Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationRequest
+import Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationResponse
+import Amazonka.EC2.Types.FastLaunchResourceType
+import Amazonka.EC2.Types.FastLaunchSnapshotConfigurationRequest
+import Amazonka.EC2.Types.FastLaunchSnapshotConfigurationResponse
+import Amazonka.EC2.Types.FastLaunchStateCode
+import Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+import Amazonka.EC2.Types.FederatedAuthentication
+import Amazonka.EC2.Types.FederatedAuthenticationRequest
+import Amazonka.EC2.Types.Filter
+import Amazonka.EC2.Types.FindingsFound
+import Amazonka.EC2.Types.FleetActivityStatus
+import Amazonka.EC2.Types.FleetCapacityReservation
+import Amazonka.EC2.Types.FleetCapacityReservationTenancy
+import Amazonka.EC2.Types.FleetCapacityReservationUsageStrategy
+import Amazonka.EC2.Types.FleetData
+import Amazonka.EC2.Types.FleetEventType
+import Amazonka.EC2.Types.FleetExcessCapacityTerminationPolicy
+import Amazonka.EC2.Types.FleetInstanceMatchCriteria
+import Amazonka.EC2.Types.FleetLaunchTemplateConfig
+import Amazonka.EC2.Types.FleetLaunchTemplateConfigRequest
+import Amazonka.EC2.Types.FleetLaunchTemplateOverrides
+import Amazonka.EC2.Types.FleetLaunchTemplateOverridesRequest
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecificationRequest
+import Amazonka.EC2.Types.FleetOnDemandAllocationStrategy
+import Amazonka.EC2.Types.FleetReplacementStrategy
+import Amazonka.EC2.Types.FleetSpotCapacityRebalance
+import Amazonka.EC2.Types.FleetSpotCapacityRebalanceRequest
+import Amazonka.EC2.Types.FleetSpotMaintenanceStrategies
+import Amazonka.EC2.Types.FleetSpotMaintenanceStrategiesRequest
+import Amazonka.EC2.Types.FleetStateCode
+import Amazonka.EC2.Types.FleetType
+import Amazonka.EC2.Types.FlowLog
+import Amazonka.EC2.Types.FlowLogsResourceType
+import Amazonka.EC2.Types.FpgaDeviceInfo
+import Amazonka.EC2.Types.FpgaDeviceMemoryInfo
+import Amazonka.EC2.Types.FpgaImage
+import Amazonka.EC2.Types.FpgaImageAttribute
+import Amazonka.EC2.Types.FpgaImageAttributeName
+import Amazonka.EC2.Types.FpgaImageState
+import Amazonka.EC2.Types.FpgaImageStateCode
+import Amazonka.EC2.Types.FpgaInfo
+import Amazonka.EC2.Types.GatewayAssociationState
+import Amazonka.EC2.Types.GatewayType
+import Amazonka.EC2.Types.GpuDeviceInfo
+import Amazonka.EC2.Types.GpuDeviceMemoryInfo
+import Amazonka.EC2.Types.GpuInfo
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.HibernationOptions
+import Amazonka.EC2.Types.HibernationOptionsRequest
+import Amazonka.EC2.Types.HistoryRecord
+import Amazonka.EC2.Types.HistoryRecordEntry
+import Amazonka.EC2.Types.Host
+import Amazonka.EC2.Types.HostInstance
+import Amazonka.EC2.Types.HostOffering
+import Amazonka.EC2.Types.HostProperties
+import Amazonka.EC2.Types.HostRecovery
+import Amazonka.EC2.Types.HostReservation
+import Amazonka.EC2.Types.HostTenancy
+import Amazonka.EC2.Types.HostnameType
+import Amazonka.EC2.Types.HttpTokensState
+import Amazonka.EC2.Types.HypervisorType
+import Amazonka.EC2.Types.IKEVersionsListValue
+import Amazonka.EC2.Types.IKEVersionsRequestListValue
+import Amazonka.EC2.Types.IamInstanceProfile
+import Amazonka.EC2.Types.IamInstanceProfileAssociation
+import Amazonka.EC2.Types.IamInstanceProfileAssociationState
+import Amazonka.EC2.Types.IamInstanceProfileSpecification
+import Amazonka.EC2.Types.IcmpTypeCode
+import Amazonka.EC2.Types.IdFormat
+import Amazonka.EC2.Types.Igmpv2SupportValue
+import Amazonka.EC2.Types.Image
+import Amazonka.EC2.Types.ImageAttributeName
+import Amazonka.EC2.Types.ImageDiskContainer
+import Amazonka.EC2.Types.ImageRecycleBinInfo
+import Amazonka.EC2.Types.ImageState
+import Amazonka.EC2.Types.ImageTypeValues
+import Amazonka.EC2.Types.ImdsSupportValues
+import Amazonka.EC2.Types.ImportImageLicenseConfigurationRequest
+import Amazonka.EC2.Types.ImportImageLicenseConfigurationResponse
+import Amazonka.EC2.Types.ImportImageTask
+import Amazonka.EC2.Types.ImportInstanceLaunchSpecification
+import Amazonka.EC2.Types.ImportInstanceTaskDetails
+import Amazonka.EC2.Types.ImportInstanceVolumeDetailItem
+import Amazonka.EC2.Types.ImportSnapshotTask
+import Amazonka.EC2.Types.ImportVolumeTaskDetails
+import Amazonka.EC2.Types.InferenceAcceleratorInfo
+import Amazonka.EC2.Types.InferenceDeviceInfo
+import Amazonka.EC2.Types.Instance
+import Amazonka.EC2.Types.InstanceAttributeName
+import Amazonka.EC2.Types.InstanceAutoRecoveryState
+import Amazonka.EC2.Types.InstanceBlockDeviceMapping
+import Amazonka.EC2.Types.InstanceBlockDeviceMappingSpecification
+import Amazonka.EC2.Types.InstanceCapacity
+import Amazonka.EC2.Types.InstanceCount
+import Amazonka.EC2.Types.InstanceCreditSpecification
+import Amazonka.EC2.Types.InstanceCreditSpecificationRequest
+import Amazonka.EC2.Types.InstanceEventWindow
+import Amazonka.EC2.Types.InstanceEventWindowAssociationRequest
+import Amazonka.EC2.Types.InstanceEventWindowAssociationTarget
+import Amazonka.EC2.Types.InstanceEventWindowDisassociationRequest
+import Amazonka.EC2.Types.InstanceEventWindowState
+import Amazonka.EC2.Types.InstanceEventWindowStateChange
+import Amazonka.EC2.Types.InstanceEventWindowTimeRange
+import Amazonka.EC2.Types.InstanceEventWindowTimeRangeRequest
+import Amazonka.EC2.Types.InstanceExportDetails
+import Amazonka.EC2.Types.InstanceFamilyCreditSpecification
+import Amazonka.EC2.Types.InstanceGeneration
+import Amazonka.EC2.Types.InstanceHealthStatus
+import Amazonka.EC2.Types.InstanceInterruptionBehavior
+import Amazonka.EC2.Types.InstanceIpv4Prefix
+import Amazonka.EC2.Types.InstanceIpv6Address
+import Amazonka.EC2.Types.InstanceIpv6AddressRequest
+import Amazonka.EC2.Types.InstanceIpv6Prefix
+import Amazonka.EC2.Types.InstanceLifecycle
+import Amazonka.EC2.Types.InstanceLifecycleType
+import Amazonka.EC2.Types.InstanceMaintenanceOptions
+import Amazonka.EC2.Types.InstanceMaintenanceOptionsRequest
+import Amazonka.EC2.Types.InstanceMarketOptionsRequest
+import Amazonka.EC2.Types.InstanceMatchCriteria
+import Amazonka.EC2.Types.InstanceMetadataEndpointState
+import Amazonka.EC2.Types.InstanceMetadataOptionsRequest
+import Amazonka.EC2.Types.InstanceMetadataOptionsResponse
+import Amazonka.EC2.Types.InstanceMetadataOptionsState
+import Amazonka.EC2.Types.InstanceMetadataProtocolState
+import Amazonka.EC2.Types.InstanceMetadataTagsState
+import Amazonka.EC2.Types.InstanceMonitoring
+import Amazonka.EC2.Types.InstanceNetworkInterface
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAttachment
+import Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.InstancePrivateIpAddress
+import Amazonka.EC2.Types.InstanceRequirements
+import Amazonka.EC2.Types.InstanceRequirementsRequest
+import Amazonka.EC2.Types.InstanceRequirementsWithMetadataRequest
+import Amazonka.EC2.Types.InstanceSpecification
+import Amazonka.EC2.Types.InstanceState
+import Amazonka.EC2.Types.InstanceStateChange
+import Amazonka.EC2.Types.InstanceStateName
+import Amazonka.EC2.Types.InstanceStatus
+import Amazonka.EC2.Types.InstanceStatusDetails
+import Amazonka.EC2.Types.InstanceStatusEvent
+import Amazonka.EC2.Types.InstanceStatusSummary
+import Amazonka.EC2.Types.InstanceStorageEncryptionSupport
+import Amazonka.EC2.Types.InstanceStorageInfo
+import Amazonka.EC2.Types.InstanceTagNotificationAttribute
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.InstanceTypeHypervisor
+import Amazonka.EC2.Types.InstanceTypeInfo
+import Amazonka.EC2.Types.InstanceTypeInfoFromInstanceRequirements
+import Amazonka.EC2.Types.InstanceTypeOffering
+import Amazonka.EC2.Types.InstanceUsage
+import Amazonka.EC2.Types.IntegrateServices
+import Amazonka.EC2.Types.InterfacePermissionType
+import Amazonka.EC2.Types.InterfaceProtocolType
+import Amazonka.EC2.Types.InternetGateway
+import Amazonka.EC2.Types.InternetGatewayAttachment
+import Amazonka.EC2.Types.IpAddressType
+import Amazonka.EC2.Types.IpPermission
+import Amazonka.EC2.Types.IpRange
+import Amazonka.EC2.Types.Ipam
+import Amazonka.EC2.Types.IpamAddressHistoryRecord
+import Amazonka.EC2.Types.IpamAddressHistoryResourceType
+import Amazonka.EC2.Types.IpamCidrAuthorizationContext
+import Amazonka.EC2.Types.IpamComplianceStatus
+import Amazonka.EC2.Types.IpamManagementState
+import Amazonka.EC2.Types.IpamOperatingRegion
+import Amazonka.EC2.Types.IpamOverlapStatus
+import Amazonka.EC2.Types.IpamPool
+import Amazonka.EC2.Types.IpamPoolAllocation
+import Amazonka.EC2.Types.IpamPoolAllocationResourceType
+import Amazonka.EC2.Types.IpamPoolAwsService
+import Amazonka.EC2.Types.IpamPoolCidr
+import Amazonka.EC2.Types.IpamPoolCidrFailureCode
+import Amazonka.EC2.Types.IpamPoolCidrFailureReason
+import Amazonka.EC2.Types.IpamPoolCidrState
+import Amazonka.EC2.Types.IpamPoolState
+import Amazonka.EC2.Types.IpamResourceCidr
+import Amazonka.EC2.Types.IpamResourceTag
+import Amazonka.EC2.Types.IpamResourceType
+import Amazonka.EC2.Types.IpamScope
+import Amazonka.EC2.Types.IpamScopeState
+import Amazonka.EC2.Types.IpamScopeType
+import Amazonka.EC2.Types.IpamState
+import Amazonka.EC2.Types.Ipv4PrefixSpecification
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationResponse
+import Amazonka.EC2.Types.Ipv6CidrAssociation
+import Amazonka.EC2.Types.Ipv6CidrBlock
+import Amazonka.EC2.Types.Ipv6Pool
+import Amazonka.EC2.Types.Ipv6PrefixSpecification
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationResponse
+import Amazonka.EC2.Types.Ipv6Range
+import Amazonka.EC2.Types.Ipv6SupportValue
+import Amazonka.EC2.Types.KeyFormat
+import Amazonka.EC2.Types.KeyPairInfo
+import Amazonka.EC2.Types.KeyType
+import Amazonka.EC2.Types.LastError
+import Amazonka.EC2.Types.LaunchPermission
+import Amazonka.EC2.Types.LaunchPermissionModifications
+import Amazonka.EC2.Types.LaunchSpecification
+import Amazonka.EC2.Types.LaunchTemplate
+import Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+import Amazonka.EC2.Types.LaunchTemplateAutoRecoveryState
+import Amazonka.EC2.Types.LaunchTemplateBlockDeviceMapping
+import Amazonka.EC2.Types.LaunchTemplateBlockDeviceMappingRequest
+import Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationResponse
+import Amazonka.EC2.Types.LaunchTemplateConfig
+import Amazonka.EC2.Types.LaunchTemplateCpuOptions
+import Amazonka.EC2.Types.LaunchTemplateCpuOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateEbsBlockDevice
+import Amazonka.EC2.Types.LaunchTemplateEbsBlockDeviceRequest
+import Amazonka.EC2.Types.LaunchTemplateElasticInferenceAccelerator
+import Amazonka.EC2.Types.LaunchTemplateElasticInferenceAcceleratorResponse
+import Amazonka.EC2.Types.LaunchTemplateEnclaveOptions
+import Amazonka.EC2.Types.LaunchTemplateEnclaveOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateErrorCode
+import Amazonka.EC2.Types.LaunchTemplateHibernationOptions
+import Amazonka.EC2.Types.LaunchTemplateHibernationOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateHttpTokensState
+import Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecification
+import Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataEndpointState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataProtocolIpv6
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataTagsState
+import Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateLicenseConfiguration
+import Amazonka.EC2.Types.LaunchTemplateLicenseConfigurationRequest
+import Amazonka.EC2.Types.LaunchTemplateOverrides
+import Amazonka.EC2.Types.LaunchTemplatePlacement
+import Amazonka.EC2.Types.LaunchTemplatePlacementRequest
+import Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptions
+import Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateSpecification
+import Amazonka.EC2.Types.LaunchTemplateSpotMarketOptions
+import Amazonka.EC2.Types.LaunchTemplateSpotMarketOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateTagSpecification
+import Amazonka.EC2.Types.LaunchTemplateTagSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateVersion
+import Amazonka.EC2.Types.LaunchTemplatesMonitoring
+import Amazonka.EC2.Types.LaunchTemplatesMonitoringRequest
+import Amazonka.EC2.Types.LicenseConfiguration
+import Amazonka.EC2.Types.LicenseConfigurationRequest
+import Amazonka.EC2.Types.ListingState
+import Amazonka.EC2.Types.ListingStatus
+import Amazonka.EC2.Types.LoadBalancersConfig
+import Amazonka.EC2.Types.LoadPermission
+import Amazonka.EC2.Types.LoadPermissionModifications
+import Amazonka.EC2.Types.LoadPermissionRequest
+import Amazonka.EC2.Types.LocalGateway
+import Amazonka.EC2.Types.LocalGatewayRoute
+import Amazonka.EC2.Types.LocalGatewayRouteState
+import Amazonka.EC2.Types.LocalGatewayRouteTable
+import Amazonka.EC2.Types.LocalGatewayRouteTableMode
+import Amazonka.EC2.Types.LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+import Amazonka.EC2.Types.LocalGatewayRouteTableVpcAssociation
+import Amazonka.EC2.Types.LocalGatewayRouteType
+import Amazonka.EC2.Types.LocalGatewayVirtualInterface
+import Amazonka.EC2.Types.LocalGatewayVirtualInterfaceGroup
+import Amazonka.EC2.Types.LocalStorage
+import Amazonka.EC2.Types.LocalStorageType
+import Amazonka.EC2.Types.LocationType
+import Amazonka.EC2.Types.LogDestinationType
+import Amazonka.EC2.Types.ManagedPrefixList
+import Amazonka.EC2.Types.MarketType
+import Amazonka.EC2.Types.MembershipType
+import Amazonka.EC2.Types.MemoryGiBPerVCpu
+import Amazonka.EC2.Types.MemoryGiBPerVCpuRequest
+import Amazonka.EC2.Types.MemoryInfo
+import Amazonka.EC2.Types.MemoryMiB
+import Amazonka.EC2.Types.MemoryMiBRequest
+import Amazonka.EC2.Types.MetricPoint
+import Amazonka.EC2.Types.MetricType
+import Amazonka.EC2.Types.ModifyAvailabilityZoneOptInStatus
+import Amazonka.EC2.Types.ModifyTransitGatewayOptions
+import Amazonka.EC2.Types.ModifyTransitGatewayVpcAttachmentRequestOptions
+import Amazonka.EC2.Types.ModifyVerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.ModifyVerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.ModifyVerifiedAccessTrustProviderOidcOptions
+import Amazonka.EC2.Types.ModifyVpnTunnelOptionsSpecification
+import Amazonka.EC2.Types.Monitoring
+import Amazonka.EC2.Types.MonitoringState
+import Amazonka.EC2.Types.MoveStatus
+import Amazonka.EC2.Types.MovingAddressStatus
+import Amazonka.EC2.Types.MulticastSupportValue
+import Amazonka.EC2.Types.NatGateway
+import Amazonka.EC2.Types.NatGatewayAddress
+import Amazonka.EC2.Types.NatGatewayState
+import Amazonka.EC2.Types.NetworkAcl
+import Amazonka.EC2.Types.NetworkAclAssociation
+import Amazonka.EC2.Types.NetworkAclEntry
+import Amazonka.EC2.Types.NetworkBandwidthGbps
+import Amazonka.EC2.Types.NetworkBandwidthGbpsRequest
+import Amazonka.EC2.Types.NetworkCardInfo
+import Amazonka.EC2.Types.NetworkInfo
+import Amazonka.EC2.Types.NetworkInsightsAccessScope
+import Amazonka.EC2.Types.NetworkInsightsAccessScopeAnalysis
+import Amazonka.EC2.Types.NetworkInsightsAccessScopeContent
+import Amazonka.EC2.Types.NetworkInsightsAnalysis
+import Amazonka.EC2.Types.NetworkInsightsPath
+import Amazonka.EC2.Types.NetworkInterface
+import Amazonka.EC2.Types.NetworkInterfaceAssociation
+import Amazonka.EC2.Types.NetworkInterfaceAttachment
+import Amazonka.EC2.Types.NetworkInterfaceAttachmentChanges
+import Amazonka.EC2.Types.NetworkInterfaceAttribute
+import Amazonka.EC2.Types.NetworkInterfaceCount
+import Amazonka.EC2.Types.NetworkInterfaceCountRequest
+import Amazonka.EC2.Types.NetworkInterfaceCreationType
+import Amazonka.EC2.Types.NetworkInterfaceIpv6Address
+import Amazonka.EC2.Types.NetworkInterfacePermission
+import Amazonka.EC2.Types.NetworkInterfacePermissionState
+import Amazonka.EC2.Types.NetworkInterfacePermissionStateCode
+import Amazonka.EC2.Types.NetworkInterfacePrivateIpAddress
+import Amazonka.EC2.Types.NetworkInterfaceStatus
+import Amazonka.EC2.Types.NetworkInterfaceType
+import Amazonka.EC2.Types.NewDhcpConfiguration
+import Amazonka.EC2.Types.OfferingClassType
+import Amazonka.EC2.Types.OfferingTypeValues
+import Amazonka.EC2.Types.OidcOptions
+import Amazonka.EC2.Types.OnDemandAllocationStrategy
+import Amazonka.EC2.Types.OnDemandOptions
+import Amazonka.EC2.Types.OnDemandOptionsRequest
+import Amazonka.EC2.Types.OperationType
+import Amazonka.EC2.Types.PacketHeaderStatement
+import Amazonka.EC2.Types.PacketHeaderStatementRequest
+import Amazonka.EC2.Types.PartitionLoadFrequency
+import Amazonka.EC2.Types.PathComponent
+import Amazonka.EC2.Types.PathStatement
+import Amazonka.EC2.Types.PathStatementRequest
+import Amazonka.EC2.Types.PayerResponsibility
+import Amazonka.EC2.Types.PaymentOption
+import Amazonka.EC2.Types.PciId
+import Amazonka.EC2.Types.PeeringAttachmentStatus
+import Amazonka.EC2.Types.PeeringConnectionOptions
+import Amazonka.EC2.Types.PeeringConnectionOptionsRequest
+import Amazonka.EC2.Types.PeeringTgwInfo
+import Amazonka.EC2.Types.PeriodType
+import Amazonka.EC2.Types.PermissionGroup
+import Amazonka.EC2.Types.Phase1DHGroupNumbersListValue
+import Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Placement
+import Amazonka.EC2.Types.PlacementGroup
+import Amazonka.EC2.Types.PlacementGroupInfo
+import Amazonka.EC2.Types.PlacementGroupState
+import Amazonka.EC2.Types.PlacementGroupStrategy
+import Amazonka.EC2.Types.PlacementResponse
+import Amazonka.EC2.Types.PlacementStrategy
+import Amazonka.EC2.Types.PlatformValues
+import Amazonka.EC2.Types.PoolCidrBlock
+import Amazonka.EC2.Types.PortRange
+import Amazonka.EC2.Types.PrefixList
+import Amazonka.EC2.Types.PrefixListAssociation
+import Amazonka.EC2.Types.PrefixListEntry
+import Amazonka.EC2.Types.PrefixListId
+import Amazonka.EC2.Types.PrefixListState
+import Amazonka.EC2.Types.PriceSchedule
+import Amazonka.EC2.Types.PriceScheduleSpecification
+import Amazonka.EC2.Types.PricingDetail
+import Amazonka.EC2.Types.PrincipalIdFormat
+import Amazonka.EC2.Types.PrincipalType
+import Amazonka.EC2.Types.PrivateDnsDetails
+import Amazonka.EC2.Types.PrivateDnsNameConfiguration
+import Amazonka.EC2.Types.PrivateDnsNameOptionsOnLaunch
+import Amazonka.EC2.Types.PrivateDnsNameOptionsRequest
+import Amazonka.EC2.Types.PrivateDnsNameOptionsResponse
+import Amazonka.EC2.Types.PrivateIpAddressSpecification
+import Amazonka.EC2.Types.ProcessorInfo
+import Amazonka.EC2.Types.ProductCode
+import Amazonka.EC2.Types.ProductCodeValues
+import Amazonka.EC2.Types.PropagatingVgw
+import Amazonka.EC2.Types.Protocol
+import Amazonka.EC2.Types.ProtocolValue
+import Amazonka.EC2.Types.ProvisionedBandwidth
+import Amazonka.EC2.Types.PtrUpdateStatus
+import Amazonka.EC2.Types.PublicIpv4Pool
+import Amazonka.EC2.Types.PublicIpv4PoolRange
+import Amazonka.EC2.Types.Purchase
+import Amazonka.EC2.Types.PurchaseRequest
+import Amazonka.EC2.Types.RIProductDescription
+import Amazonka.EC2.Types.RecurringCharge
+import Amazonka.EC2.Types.RecurringChargeFrequency
+import Amazonka.EC2.Types.ReferencedSecurityGroup
+import Amazonka.EC2.Types.RegionInfo
+import Amazonka.EC2.Types.RegisterInstanceTagAttributeRequest
+import Amazonka.EC2.Types.RemoveIpamOperatingRegion
+import Amazonka.EC2.Types.RemovePrefixListEntry
+import Amazonka.EC2.Types.ReplaceRootVolumeTask
+import Amazonka.EC2.Types.ReplaceRootVolumeTaskState
+import Amazonka.EC2.Types.ReplacementStrategy
+import Amazonka.EC2.Types.ReportInstanceReasonCodes
+import Amazonka.EC2.Types.ReportStatusType
+import Amazonka.EC2.Types.RequestIpamResourceTag
+import Amazonka.EC2.Types.RequestLaunchTemplateData
+import Amazonka.EC2.Types.RequestSpotLaunchSpecification
+import Amazonka.EC2.Types.Reservation
+import Amazonka.EC2.Types.ReservationFleetInstanceSpecification
+import Amazonka.EC2.Types.ReservationState
+import Amazonka.EC2.Types.ReservationValue
+import Amazonka.EC2.Types.ReservedInstanceLimitPrice
+import Amazonka.EC2.Types.ReservedInstanceReservationValue
+import Amazonka.EC2.Types.ReservedInstanceState
+import Amazonka.EC2.Types.ReservedInstances
+import Amazonka.EC2.Types.ReservedInstancesConfiguration
+import Amazonka.EC2.Types.ReservedInstancesId
+import Amazonka.EC2.Types.ReservedInstancesListing
+import Amazonka.EC2.Types.ReservedInstancesModification
+import Amazonka.EC2.Types.ReservedInstancesModificationResult
+import Amazonka.EC2.Types.ReservedInstancesOffering
+import Amazonka.EC2.Types.ResetFpgaImageAttributeName
+import Amazonka.EC2.Types.ResetImageAttributeName
+import Amazonka.EC2.Types.ResourceStatement
+import Amazonka.EC2.Types.ResourceStatementRequest
+import Amazonka.EC2.Types.ResourceType
+import Amazonka.EC2.Types.ResponseError
+import Amazonka.EC2.Types.ResponseLaunchTemplateData
+import Amazonka.EC2.Types.RootDeviceType
+import Amazonka.EC2.Types.Route
+import Amazonka.EC2.Types.RouteOrigin
+import Amazonka.EC2.Types.RouteState
+import Amazonka.EC2.Types.RouteTable
+import Amazonka.EC2.Types.RouteTableAssociation
+import Amazonka.EC2.Types.RouteTableAssociationState
+import Amazonka.EC2.Types.RouteTableAssociationStateCode
+import Amazonka.EC2.Types.RuleAction
+import Amazonka.EC2.Types.RunInstancesMonitoringEnabled
+import Amazonka.EC2.Types.S3ObjectTag
+import Amazonka.EC2.Types.S3Storage
+import Amazonka.EC2.Types.ScheduledInstance
+import Amazonka.EC2.Types.ScheduledInstanceAvailability
+import Amazonka.EC2.Types.ScheduledInstanceRecurrence
+import Amazonka.EC2.Types.ScheduledInstanceRecurrenceRequest
+import Amazonka.EC2.Types.ScheduledInstancesBlockDeviceMapping
+import Amazonka.EC2.Types.ScheduledInstancesEbs
+import Amazonka.EC2.Types.ScheduledInstancesIamInstanceProfile
+import Amazonka.EC2.Types.ScheduledInstancesIpv6Address
+import Amazonka.EC2.Types.ScheduledInstancesLaunchSpecification
+import Amazonka.EC2.Types.ScheduledInstancesMonitoring
+import Amazonka.EC2.Types.ScheduledInstancesNetworkInterface
+import Amazonka.EC2.Types.ScheduledInstancesPlacement
+import Amazonka.EC2.Types.ScheduledInstancesPrivateIpAddressConfig
+import Amazonka.EC2.Types.Scope
+import Amazonka.EC2.Types.SecurityGroup
+import Amazonka.EC2.Types.SecurityGroupIdentifier
+import Amazonka.EC2.Types.SecurityGroupReference
+import Amazonka.EC2.Types.SecurityGroupRule
+import Amazonka.EC2.Types.SecurityGroupRuleDescription
+import Amazonka.EC2.Types.SecurityGroupRuleRequest
+import Amazonka.EC2.Types.SecurityGroupRuleUpdate
+import Amazonka.EC2.Types.SelfServicePortal
+import Amazonka.EC2.Types.ServiceConfiguration
+import Amazonka.EC2.Types.ServiceConnectivityType
+import Amazonka.EC2.Types.ServiceDetail
+import Amazonka.EC2.Types.ServiceState
+import Amazonka.EC2.Types.ServiceType
+import Amazonka.EC2.Types.ServiceTypeDetail
+import Amazonka.EC2.Types.ShutdownBehavior
+import Amazonka.EC2.Types.SlotDateTimeRangeRequest
+import Amazonka.EC2.Types.SlotStartTimeRangeRequest
+import Amazonka.EC2.Types.Snapshot
+import Amazonka.EC2.Types.SnapshotAttributeName
+import Amazonka.EC2.Types.SnapshotDetail
+import Amazonka.EC2.Types.SnapshotDiskContainer
+import Amazonka.EC2.Types.SnapshotInfo
+import Amazonka.EC2.Types.SnapshotRecycleBinInfo
+import Amazonka.EC2.Types.SnapshotState
+import Amazonka.EC2.Types.SnapshotTaskDetail
+import Amazonka.EC2.Types.SnapshotTierStatus
+import Amazonka.EC2.Types.SpotAllocationStrategy
+import Amazonka.EC2.Types.SpotCapacityRebalance
+import Amazonka.EC2.Types.SpotDatafeedSubscription
+import Amazonka.EC2.Types.SpotFleetLaunchSpecification
+import Amazonka.EC2.Types.SpotFleetMonitoring
+import Amazonka.EC2.Types.SpotFleetRequestConfig
+import Amazonka.EC2.Types.SpotFleetRequestConfigData
+import Amazonka.EC2.Types.SpotFleetTagSpecification
+import Amazonka.EC2.Types.SpotInstanceInterruptionBehavior
+import Amazonka.EC2.Types.SpotInstanceRequest
+import Amazonka.EC2.Types.SpotInstanceState
+import Amazonka.EC2.Types.SpotInstanceStateFault
+import Amazonka.EC2.Types.SpotInstanceStatus
+import Amazonka.EC2.Types.SpotInstanceType
+import Amazonka.EC2.Types.SpotMaintenanceStrategies
+import Amazonka.EC2.Types.SpotMarketOptions
+import Amazonka.EC2.Types.SpotOptions
+import Amazonka.EC2.Types.SpotOptionsRequest
+import Amazonka.EC2.Types.SpotPlacement
+import Amazonka.EC2.Types.SpotPlacementScore
+import Amazonka.EC2.Types.SpotPrice
+import Amazonka.EC2.Types.SpreadLevel
+import Amazonka.EC2.Types.StaleIpPermission
+import Amazonka.EC2.Types.StaleSecurityGroup
+import Amazonka.EC2.Types.State
+import Amazonka.EC2.Types.StateReason
+import Amazonka.EC2.Types.StaticSourcesSupportValue
+import Amazonka.EC2.Types.StatisticType
+import Amazonka.EC2.Types.StatusName
+import Amazonka.EC2.Types.StatusType
+import Amazonka.EC2.Types.Storage
+import Amazonka.EC2.Types.StorageLocation
+import Amazonka.EC2.Types.StorageTier
+import Amazonka.EC2.Types.StoreImageTaskResult
+import Amazonka.EC2.Types.Subnet
+import Amazonka.EC2.Types.SubnetAssociation
+import Amazonka.EC2.Types.SubnetCidrBlockState
+import Amazonka.EC2.Types.SubnetCidrBlockStateCode
+import Amazonka.EC2.Types.SubnetCidrReservation
+import Amazonka.EC2.Types.SubnetCidrReservationType
+import Amazonka.EC2.Types.SubnetIpv6CidrBlockAssociation
+import Amazonka.EC2.Types.SubnetState
+import Amazonka.EC2.Types.Subscription
+import Amazonka.EC2.Types.SuccessfulInstanceCreditSpecificationItem
+import Amazonka.EC2.Types.SuccessfulQueuedPurchaseDeletion
+import Amazonka.EC2.Types.SummaryStatus
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TagDescription
+import Amazonka.EC2.Types.TagSpecification
+import Amazonka.EC2.Types.TargetCapacitySpecification
+import Amazonka.EC2.Types.TargetCapacitySpecificationRequest
+import Amazonka.EC2.Types.TargetCapacityUnitType
+import Amazonka.EC2.Types.TargetConfiguration
+import Amazonka.EC2.Types.TargetConfigurationRequest
+import Amazonka.EC2.Types.TargetGroup
+import Amazonka.EC2.Types.TargetGroupsConfig
+import Amazonka.EC2.Types.TargetNetwork
+import Amazonka.EC2.Types.TargetReservationValue
+import Amazonka.EC2.Types.TargetStorageTier
+import Amazonka.EC2.Types.TelemetryStatus
+import Amazonka.EC2.Types.Tenancy
+import Amazonka.EC2.Types.TerminateConnectionStatus
+import Amazonka.EC2.Types.ThroughResourcesStatement
+import Amazonka.EC2.Types.ThroughResourcesStatementRequest
+import Amazonka.EC2.Types.TieringOperationStatus
+import Amazonka.EC2.Types.TotalLocalStorageGB
+import Amazonka.EC2.Types.TotalLocalStorageGBRequest
+import Amazonka.EC2.Types.TpmSupportValues
+import Amazonka.EC2.Types.TrafficDirection
+import Amazonka.EC2.Types.TrafficMirrorFilter
+import Amazonka.EC2.Types.TrafficMirrorFilterRule
+import Amazonka.EC2.Types.TrafficMirrorFilterRuleField
+import Amazonka.EC2.Types.TrafficMirrorNetworkService
+import Amazonka.EC2.Types.TrafficMirrorPortRange
+import Amazonka.EC2.Types.TrafficMirrorPortRangeRequest
+import Amazonka.EC2.Types.TrafficMirrorRuleAction
+import Amazonka.EC2.Types.TrafficMirrorSession
+import Amazonka.EC2.Types.TrafficMirrorSessionField
+import Amazonka.EC2.Types.TrafficMirrorTarget
+import Amazonka.EC2.Types.TrafficMirrorTargetType
+import Amazonka.EC2.Types.TrafficType
+import Amazonka.EC2.Types.TransitGateway
+import Amazonka.EC2.Types.TransitGatewayAssociation
+import Amazonka.EC2.Types.TransitGatewayAssociationState
+import Amazonka.EC2.Types.TransitGatewayAttachment
+import Amazonka.EC2.Types.TransitGatewayAttachmentAssociation
+import Amazonka.EC2.Types.TransitGatewayAttachmentBgpConfiguration
+import Amazonka.EC2.Types.TransitGatewayAttachmentPropagation
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import Amazonka.EC2.Types.TransitGatewayAttachmentState
+import Amazonka.EC2.Types.TransitGatewayConnect
+import Amazonka.EC2.Types.TransitGatewayConnectOptions
+import Amazonka.EC2.Types.TransitGatewayConnectPeer
+import Amazonka.EC2.Types.TransitGatewayConnectPeerConfiguration
+import Amazonka.EC2.Types.TransitGatewayConnectPeerState
+import Amazonka.EC2.Types.TransitGatewayConnectRequestBgpOptions
+import Amazonka.EC2.Types.TransitGatewayMulitcastDomainAssociationState
+import Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupMembers
+import Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupSources
+import Amazonka.EC2.Types.TransitGatewayMulticastDomain
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociation
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociations
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainOptions
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainState
+import Amazonka.EC2.Types.TransitGatewayMulticastGroup
+import Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupMembers
+import Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupSources
+import Amazonka.EC2.Types.TransitGatewayOptions
+import Amazonka.EC2.Types.TransitGatewayPeeringAttachment
+import Amazonka.EC2.Types.TransitGatewayPeeringAttachmentOptions
+import Amazonka.EC2.Types.TransitGatewayPolicyRule
+import Amazonka.EC2.Types.TransitGatewayPolicyRuleMetaData
+import Amazonka.EC2.Types.TransitGatewayPolicyTable
+import Amazonka.EC2.Types.TransitGatewayPolicyTableAssociation
+import Amazonka.EC2.Types.TransitGatewayPolicyTableEntry
+import Amazonka.EC2.Types.TransitGatewayPolicyTableState
+import Amazonka.EC2.Types.TransitGatewayPrefixListAttachment
+import Amazonka.EC2.Types.TransitGatewayPrefixListReference
+import Amazonka.EC2.Types.TransitGatewayPrefixListReferenceState
+import Amazonka.EC2.Types.TransitGatewayPropagation
+import Amazonka.EC2.Types.TransitGatewayPropagationState
+import Amazonka.EC2.Types.TransitGatewayRequestOptions
+import Amazonka.EC2.Types.TransitGatewayRoute
+import Amazonka.EC2.Types.TransitGatewayRouteAttachment
+import Amazonka.EC2.Types.TransitGatewayRouteState
+import Amazonka.EC2.Types.TransitGatewayRouteTable
+import Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncement
+import Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementDirection
+import Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementState
+import Amazonka.EC2.Types.TransitGatewayRouteTableAssociation
+import Amazonka.EC2.Types.TransitGatewayRouteTablePropagation
+import Amazonka.EC2.Types.TransitGatewayRouteTableRoute
+import Amazonka.EC2.Types.TransitGatewayRouteTableState
+import Amazonka.EC2.Types.TransitGatewayRouteType
+import Amazonka.EC2.Types.TransitGatewayState
+import Amazonka.EC2.Types.TransitGatewayVpcAttachment
+import Amazonka.EC2.Types.TransitGatewayVpcAttachmentOptions
+import Amazonka.EC2.Types.TransportProtocol
+import Amazonka.EC2.Types.TrunkInterfaceAssociation
+import Amazonka.EC2.Types.TrustProviderType
+import Amazonka.EC2.Types.TunnelInsideIpVersion
+import Amazonka.EC2.Types.TunnelOption
+import Amazonka.EC2.Types.UnlimitedSupportedInstanceFamily
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationErrorCode
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItem
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItemError
+import Amazonka.EC2.Types.UnsuccessfulItem
+import Amazonka.EC2.Types.UnsuccessfulItemError
+import Amazonka.EC2.Types.UsageClassType
+import Amazonka.EC2.Types.UserBucket
+import Amazonka.EC2.Types.UserBucketDetails
+import Amazonka.EC2.Types.UserData
+import Amazonka.EC2.Types.UserIdGroupPair
+import Amazonka.EC2.Types.UserTrustProviderType
+import Amazonka.EC2.Types.VCpuCountRange
+import Amazonka.EC2.Types.VCpuCountRangeRequest
+import Amazonka.EC2.Types.VCpuInfo
+import Amazonka.EC2.Types.ValidationError
+import Amazonka.EC2.Types.ValidationWarning
+import Amazonka.EC2.Types.VerifiedAccessEndpoint
+import Amazonka.EC2.Types.VerifiedAccessEndpointAttachmentType
+import Amazonka.EC2.Types.VerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.VerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import Amazonka.EC2.Types.VerifiedAccessEndpointStatus
+import Amazonka.EC2.Types.VerifiedAccessEndpointStatusCode
+import Amazonka.EC2.Types.VerifiedAccessEndpointType
+import Amazonka.EC2.Types.VerifiedAccessGroup
+import Amazonka.EC2.Types.VerifiedAccessInstance
+import Amazonka.EC2.Types.VerifiedAccessInstanceLoggingConfiguration
+import Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestination
+import Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatusCode
+import Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestination
+import Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogOptions
+import Amazonka.EC2.Types.VerifiedAccessLogS3Destination
+import Amazonka.EC2.Types.VerifiedAccessLogS3DestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogs
+import Amazonka.EC2.Types.VerifiedAccessTrustProvider
+import Amazonka.EC2.Types.VerifiedAccessTrustProviderCondensed
+import Amazonka.EC2.Types.VgwTelemetry
+import Amazonka.EC2.Types.VirtualizationType
+import Amazonka.EC2.Types.Volume
+import Amazonka.EC2.Types.VolumeAttachment
+import Amazonka.EC2.Types.VolumeAttachmentState
+import Amazonka.EC2.Types.VolumeAttributeName
+import Amazonka.EC2.Types.VolumeDetail
+import Amazonka.EC2.Types.VolumeModification
+import Amazonka.EC2.Types.VolumeModificationState
+import Amazonka.EC2.Types.VolumeState
+import Amazonka.EC2.Types.VolumeStatusAction
+import Amazonka.EC2.Types.VolumeStatusAttachmentStatus
+import Amazonka.EC2.Types.VolumeStatusDetails
+import Amazonka.EC2.Types.VolumeStatusEvent
+import Amazonka.EC2.Types.VolumeStatusInfo
+import Amazonka.EC2.Types.VolumeStatusInfoStatus
+import Amazonka.EC2.Types.VolumeStatusItem
+import Amazonka.EC2.Types.VolumeStatusName
+import Amazonka.EC2.Types.VolumeType
+import Amazonka.EC2.Types.Vpc
+import Amazonka.EC2.Types.VpcAttachment
+import Amazonka.EC2.Types.VpcAttributeName
+import Amazonka.EC2.Types.VpcCidrBlockAssociation
+import Amazonka.EC2.Types.VpcCidrBlockState
+import Amazonka.EC2.Types.VpcCidrBlockStateCode
+import Amazonka.EC2.Types.VpcClassicLink
+import Amazonka.EC2.Types.VpcEndpoint
+import Amazonka.EC2.Types.VpcEndpointConnection
+import Amazonka.EC2.Types.VpcEndpointType
+import Amazonka.EC2.Types.VpcIpv6CidrBlockAssociation
+import Amazonka.EC2.Types.VpcPeeringConnection
+import Amazonka.EC2.Types.VpcPeeringConnectionOptionsDescription
+import Amazonka.EC2.Types.VpcPeeringConnectionStateReason
+import Amazonka.EC2.Types.VpcPeeringConnectionStateReasonCode
+import Amazonka.EC2.Types.VpcPeeringConnectionVpcInfo
+import Amazonka.EC2.Types.VpcState
+import Amazonka.EC2.Types.VpcTenancy
+import Amazonka.EC2.Types.VpnConnection
+import Amazonka.EC2.Types.VpnConnectionDeviceType
+import Amazonka.EC2.Types.VpnConnectionOptions
+import Amazonka.EC2.Types.VpnConnectionOptionsSpecification
+import Amazonka.EC2.Types.VpnEcmpSupportValue
+import Amazonka.EC2.Types.VpnGateway
+import Amazonka.EC2.Types.VpnProtocol
+import Amazonka.EC2.Types.VpnState
+import Amazonka.EC2.Types.VpnStaticRoute
+import Amazonka.EC2.Types.VpnStaticRouteSource
+import Amazonka.EC2.Types.VpnTunnelLogOptions
+import Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification
+import Amazonka.EC2.Types.VpnTunnelOptionsSpecification
+import Amazonka.EC2.Types.WeekDay
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2016-11-15@ of the Amazon Elastic Compute Cloud SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "EC2",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "ec2",
+      Core.signingName = "ec2",
+      Core.version = "2016-11-15",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseXMLError "EC2",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has
+          ( Core.hasCode "EC2ThrottledException"
+              Prelude.. Core.hasStatus 503
+          )
+          e =
+          Prelude.Just "ec2_throttled_exception"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestLimitExceeded"
+              Prelude.. Core.hasStatus 503
+          )
+          e =
+          Prelude.Just "request_limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
diff --git a/gen/Amazonka/EC2/Types/AcceleratorCount.hs b/gen/Amazonka/EC2/Types/AcceleratorCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorCount.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorCount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorCount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+-- Web Services Inferentia chips) on an instance.
+--
+-- /See:/ 'newAcceleratorCount' smart constructor.
+data AcceleratorCount = AcceleratorCount'
+  { -- | The maximum number of accelerators. If this parameter is not specified,
+    -- there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of accelerators. If this parameter is not specified,
+    -- there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceleratorCount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'acceleratorCount_max' - The maximum number of accelerators. If this parameter is not specified,
+-- there is no maximum limit.
+--
+-- 'min', 'acceleratorCount_min' - The minimum number of accelerators. If this parameter is not specified,
+-- there is no minimum limit.
+newAcceleratorCount ::
+  AcceleratorCount
+newAcceleratorCount =
+  AcceleratorCount'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum number of accelerators. If this parameter is not specified,
+-- there is no maximum limit.
+acceleratorCount_max :: Lens.Lens' AcceleratorCount (Prelude.Maybe Prelude.Int)
+acceleratorCount_max = Lens.lens (\AcceleratorCount' {max} -> max) (\s@AcceleratorCount' {} a -> s {max = a} :: AcceleratorCount)
+
+-- | The minimum number of accelerators. If this parameter is not specified,
+-- there is no minimum limit.
+acceleratorCount_min :: Lens.Lens' AcceleratorCount (Prelude.Maybe Prelude.Int)
+acceleratorCount_min = Lens.lens (\AcceleratorCount' {min} -> min) (\s@AcceleratorCount' {} a -> s {min = a} :: AcceleratorCount)
+
+instance Data.FromXML AcceleratorCount where
+  parseXML x =
+    AcceleratorCount'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable AcceleratorCount where
+  hashWithSalt _salt AcceleratorCount' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData AcceleratorCount where
+  rnf AcceleratorCount' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery AcceleratorCount where
+  toQuery AcceleratorCount' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/AcceleratorCountRequest.hs b/gen/Amazonka/EC2/Types/AcceleratorCountRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorCountRequest.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorCountRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorCountRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+-- Web Services Inferentia chips) on an instance. To exclude
+-- accelerator-enabled instance types, set @Max@ to @0@.
+--
+-- /See:/ 'newAcceleratorCountRequest' smart constructor.
+data AcceleratorCountRequest = AcceleratorCountRequest'
+  { -- | The maximum number of accelerators. To specify no maximum limit, omit
+    -- this parameter. To exclude accelerator-enabled instance types, set @Max@
+    -- to @0@.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of accelerators. To specify no minimum limit, omit
+    -- this parameter.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceleratorCountRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'acceleratorCountRequest_max' - The maximum number of accelerators. To specify no maximum limit, omit
+-- this parameter. To exclude accelerator-enabled instance types, set @Max@
+-- to @0@.
+--
+-- 'min', 'acceleratorCountRequest_min' - The minimum number of accelerators. To specify no minimum limit, omit
+-- this parameter.
+newAcceleratorCountRequest ::
+  AcceleratorCountRequest
+newAcceleratorCountRequest =
+  AcceleratorCountRequest'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum number of accelerators. To specify no maximum limit, omit
+-- this parameter. To exclude accelerator-enabled instance types, set @Max@
+-- to @0@.
+acceleratorCountRequest_max :: Lens.Lens' AcceleratorCountRequest (Prelude.Maybe Prelude.Int)
+acceleratorCountRequest_max = Lens.lens (\AcceleratorCountRequest' {max} -> max) (\s@AcceleratorCountRequest' {} a -> s {max = a} :: AcceleratorCountRequest)
+
+-- | The minimum number of accelerators. To specify no minimum limit, omit
+-- this parameter.
+acceleratorCountRequest_min :: Lens.Lens' AcceleratorCountRequest (Prelude.Maybe Prelude.Int)
+acceleratorCountRequest_min = Lens.lens (\AcceleratorCountRequest' {min} -> min) (\s@AcceleratorCountRequest' {} a -> s {min = a} :: AcceleratorCountRequest)
+
+instance Prelude.Hashable AcceleratorCountRequest where
+  hashWithSalt _salt AcceleratorCountRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData AcceleratorCountRequest where
+  rnf AcceleratorCountRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery AcceleratorCountRequest where
+  toQuery AcceleratorCountRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/AcceleratorManufacturer.hs b/gen/Amazonka/EC2/Types/AcceleratorManufacturer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorManufacturer.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorManufacturer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorManufacturer
+  ( AcceleratorManufacturer
+      ( ..,
+        AcceleratorManufacturer_Amazon_web_services,
+        AcceleratorManufacturer_Amd,
+        AcceleratorManufacturer_Nvidia,
+        AcceleratorManufacturer_Xilinx
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AcceleratorManufacturer = AcceleratorManufacturer'
+  { fromAcceleratorManufacturer ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AcceleratorManufacturer_Amazon_web_services :: AcceleratorManufacturer
+pattern AcceleratorManufacturer_Amazon_web_services = AcceleratorManufacturer' "amazon-web-services"
+
+pattern AcceleratorManufacturer_Amd :: AcceleratorManufacturer
+pattern AcceleratorManufacturer_Amd = AcceleratorManufacturer' "amd"
+
+pattern AcceleratorManufacturer_Nvidia :: AcceleratorManufacturer
+pattern AcceleratorManufacturer_Nvidia = AcceleratorManufacturer' "nvidia"
+
+pattern AcceleratorManufacturer_Xilinx :: AcceleratorManufacturer
+pattern AcceleratorManufacturer_Xilinx = AcceleratorManufacturer' "xilinx"
+
+{-# COMPLETE
+  AcceleratorManufacturer_Amazon_web_services,
+  AcceleratorManufacturer_Amd,
+  AcceleratorManufacturer_Nvidia,
+  AcceleratorManufacturer_Xilinx,
+  AcceleratorManufacturer'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AcceleratorName.hs b/gen/Amazonka/EC2/Types/AcceleratorName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorName.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorName
+  ( AcceleratorName
+      ( ..,
+        AcceleratorName_A100,
+        AcceleratorName_Inferentia,
+        AcceleratorName_K520,
+        AcceleratorName_K80,
+        AcceleratorName_M60,
+        AcceleratorName_Radeon_pro_v520,
+        AcceleratorName_T4,
+        AcceleratorName_V100,
+        AcceleratorName_Vu9p
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AcceleratorName = AcceleratorName'
+  { fromAcceleratorName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AcceleratorName_A100 :: AcceleratorName
+pattern AcceleratorName_A100 = AcceleratorName' "a100"
+
+pattern AcceleratorName_Inferentia :: AcceleratorName
+pattern AcceleratorName_Inferentia = AcceleratorName' "inferentia"
+
+pattern AcceleratorName_K520 :: AcceleratorName
+pattern AcceleratorName_K520 = AcceleratorName' "k520"
+
+pattern AcceleratorName_K80 :: AcceleratorName
+pattern AcceleratorName_K80 = AcceleratorName' "k80"
+
+pattern AcceleratorName_M60 :: AcceleratorName
+pattern AcceleratorName_M60 = AcceleratorName' "m60"
+
+pattern AcceleratorName_Radeon_pro_v520 :: AcceleratorName
+pattern AcceleratorName_Radeon_pro_v520 = AcceleratorName' "radeon-pro-v520"
+
+pattern AcceleratorName_T4 :: AcceleratorName
+pattern AcceleratorName_T4 = AcceleratorName' "t4"
+
+pattern AcceleratorName_V100 :: AcceleratorName
+pattern AcceleratorName_V100 = AcceleratorName' "v100"
+
+pattern AcceleratorName_Vu9p :: AcceleratorName
+pattern AcceleratorName_Vu9p = AcceleratorName' "vu9p"
+
+{-# COMPLETE
+  AcceleratorName_A100,
+  AcceleratorName_Inferentia,
+  AcceleratorName_K520,
+  AcceleratorName_K80,
+  AcceleratorName_M60,
+  AcceleratorName_Radeon_pro_v520,
+  AcceleratorName_T4,
+  AcceleratorName_V100,
+  AcceleratorName_Vu9p,
+  AcceleratorName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AcceleratorTotalMemoryMiB.hs b/gen/Amazonka/EC2/Types/AcceleratorTotalMemoryMiB.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorTotalMemoryMiB.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorTotalMemoryMiB
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorTotalMemoryMiB where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of total accelerator memory, in MiB.
+--
+-- /See:/ 'newAcceleratorTotalMemoryMiB' smart constructor.
+data AcceleratorTotalMemoryMiB = AcceleratorTotalMemoryMiB'
+  { -- | The maximum amount of accelerator memory, in MiB. If this parameter is
+    -- not specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum amount of accelerator memory, in MiB. If this parameter is
+    -- not specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceleratorTotalMemoryMiB' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'acceleratorTotalMemoryMiB_max' - The maximum amount of accelerator memory, in MiB. If this parameter is
+-- not specified, there is no maximum limit.
+--
+-- 'min', 'acceleratorTotalMemoryMiB_min' - The minimum amount of accelerator memory, in MiB. If this parameter is
+-- not specified, there is no minimum limit.
+newAcceleratorTotalMemoryMiB ::
+  AcceleratorTotalMemoryMiB
+newAcceleratorTotalMemoryMiB =
+  AcceleratorTotalMemoryMiB'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of accelerator memory, in MiB. If this parameter is
+-- not specified, there is no maximum limit.
+acceleratorTotalMemoryMiB_max :: Lens.Lens' AcceleratorTotalMemoryMiB (Prelude.Maybe Prelude.Int)
+acceleratorTotalMemoryMiB_max = Lens.lens (\AcceleratorTotalMemoryMiB' {max} -> max) (\s@AcceleratorTotalMemoryMiB' {} a -> s {max = a} :: AcceleratorTotalMemoryMiB)
+
+-- | The minimum amount of accelerator memory, in MiB. If this parameter is
+-- not specified, there is no minimum limit.
+acceleratorTotalMemoryMiB_min :: Lens.Lens' AcceleratorTotalMemoryMiB (Prelude.Maybe Prelude.Int)
+acceleratorTotalMemoryMiB_min = Lens.lens (\AcceleratorTotalMemoryMiB' {min} -> min) (\s@AcceleratorTotalMemoryMiB' {} a -> s {min = a} :: AcceleratorTotalMemoryMiB)
+
+instance Data.FromXML AcceleratorTotalMemoryMiB where
+  parseXML x =
+    AcceleratorTotalMemoryMiB'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable AcceleratorTotalMemoryMiB where
+  hashWithSalt _salt AcceleratorTotalMemoryMiB' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData AcceleratorTotalMemoryMiB where
+  rnf AcceleratorTotalMemoryMiB' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery AcceleratorTotalMemoryMiB where
+  toQuery AcceleratorTotalMemoryMiB' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/AcceleratorTotalMemoryMiBRequest.hs b/gen/Amazonka/EC2/Types/AcceleratorTotalMemoryMiBRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorTotalMemoryMiBRequest.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of total accelerator memory, in MiB.
+--
+-- /See:/ 'newAcceleratorTotalMemoryMiBRequest' smart constructor.
+data AcceleratorTotalMemoryMiBRequest = AcceleratorTotalMemoryMiBRequest'
+  { -- | The maximum amount of accelerator memory, in MiB. To specify no maximum
+    -- limit, omit this parameter.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum amount of accelerator memory, in MiB. To specify no minimum
+    -- limit, omit this parameter.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AcceleratorTotalMemoryMiBRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'acceleratorTotalMemoryMiBRequest_max' - The maximum amount of accelerator memory, in MiB. To specify no maximum
+-- limit, omit this parameter.
+--
+-- 'min', 'acceleratorTotalMemoryMiBRequest_min' - The minimum amount of accelerator memory, in MiB. To specify no minimum
+-- limit, omit this parameter.
+newAcceleratorTotalMemoryMiBRequest ::
+  AcceleratorTotalMemoryMiBRequest
+newAcceleratorTotalMemoryMiBRequest =
+  AcceleratorTotalMemoryMiBRequest'
+    { max =
+        Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of accelerator memory, in MiB. To specify no maximum
+-- limit, omit this parameter.
+acceleratorTotalMemoryMiBRequest_max :: Lens.Lens' AcceleratorTotalMemoryMiBRequest (Prelude.Maybe Prelude.Int)
+acceleratorTotalMemoryMiBRequest_max = Lens.lens (\AcceleratorTotalMemoryMiBRequest' {max} -> max) (\s@AcceleratorTotalMemoryMiBRequest' {} a -> s {max = a} :: AcceleratorTotalMemoryMiBRequest)
+
+-- | The minimum amount of accelerator memory, in MiB. To specify no minimum
+-- limit, omit this parameter.
+acceleratorTotalMemoryMiBRequest_min :: Lens.Lens' AcceleratorTotalMemoryMiBRequest (Prelude.Maybe Prelude.Int)
+acceleratorTotalMemoryMiBRequest_min = Lens.lens (\AcceleratorTotalMemoryMiBRequest' {min} -> min) (\s@AcceleratorTotalMemoryMiBRequest' {} a -> s {min = a} :: AcceleratorTotalMemoryMiBRequest)
+
+instance
+  Prelude.Hashable
+    AcceleratorTotalMemoryMiBRequest
+  where
+  hashWithSalt
+    _salt
+    AcceleratorTotalMemoryMiBRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` max
+        `Prelude.hashWithSalt` min
+
+instance
+  Prelude.NFData
+    AcceleratorTotalMemoryMiBRequest
+  where
+  rnf AcceleratorTotalMemoryMiBRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance
+  Data.ToQuery
+    AcceleratorTotalMemoryMiBRequest
+  where
+  toQuery AcceleratorTotalMemoryMiBRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/AcceleratorType.hs b/gen/Amazonka/EC2/Types/AcceleratorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AcceleratorType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AcceleratorType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AcceleratorType
+  ( AcceleratorType
+      ( ..,
+        AcceleratorType_Fpga,
+        AcceleratorType_Gpu,
+        AcceleratorType_Inference
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AcceleratorType = AcceleratorType'
+  { fromAcceleratorType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AcceleratorType_Fpga :: AcceleratorType
+pattern AcceleratorType_Fpga = AcceleratorType' "fpga"
+
+pattern AcceleratorType_Gpu :: AcceleratorType
+pattern AcceleratorType_Gpu = AcceleratorType' "gpu"
+
+pattern AcceleratorType_Inference :: AcceleratorType
+pattern AcceleratorType_Inference = AcceleratorType' "inference"
+
+{-# COMPLETE
+  AcceleratorType_Fpga,
+  AcceleratorType_Gpu,
+  AcceleratorType_Inference,
+  AcceleratorType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AccessScopeAnalysisFinding.hs b/gen/Amazonka/EC2/Types/AccessScopeAnalysisFinding.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AccessScopeAnalysisFinding.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AccessScopeAnalysisFinding
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AccessScopeAnalysisFinding where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PathComponent
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a finding for a Network Access Scope.
+--
+-- /See:/ 'newAccessScopeAnalysisFinding' smart constructor.
+data AccessScopeAnalysisFinding = AccessScopeAnalysisFinding'
+  { -- | The finding components.
+    findingComponents :: Prelude.Maybe [PathComponent],
+    -- | The ID of the finding.
+    findingId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessScopeAnalysisFinding' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'findingComponents', 'accessScopeAnalysisFinding_findingComponents' - The finding components.
+--
+-- 'findingId', 'accessScopeAnalysisFinding_findingId' - The ID of the finding.
+--
+-- 'networkInsightsAccessScopeAnalysisId', 'accessScopeAnalysisFinding_networkInsightsAccessScopeAnalysisId' - The ID of the Network Access Scope analysis.
+--
+-- 'networkInsightsAccessScopeId', 'accessScopeAnalysisFinding_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+newAccessScopeAnalysisFinding ::
+  AccessScopeAnalysisFinding
+newAccessScopeAnalysisFinding =
+  AccessScopeAnalysisFinding'
+    { findingComponents =
+        Prelude.Nothing,
+      findingId = Prelude.Nothing,
+      networkInsightsAccessScopeAnalysisId =
+        Prelude.Nothing,
+      networkInsightsAccessScopeId = Prelude.Nothing
+    }
+
+-- | The finding components.
+accessScopeAnalysisFinding_findingComponents :: Lens.Lens' AccessScopeAnalysisFinding (Prelude.Maybe [PathComponent])
+accessScopeAnalysisFinding_findingComponents = Lens.lens (\AccessScopeAnalysisFinding' {findingComponents} -> findingComponents) (\s@AccessScopeAnalysisFinding' {} a -> s {findingComponents = a} :: AccessScopeAnalysisFinding) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the finding.
+accessScopeAnalysisFinding_findingId :: Lens.Lens' AccessScopeAnalysisFinding (Prelude.Maybe Prelude.Text)
+accessScopeAnalysisFinding_findingId = Lens.lens (\AccessScopeAnalysisFinding' {findingId} -> findingId) (\s@AccessScopeAnalysisFinding' {} a -> s {findingId = a} :: AccessScopeAnalysisFinding)
+
+-- | The ID of the Network Access Scope analysis.
+accessScopeAnalysisFinding_networkInsightsAccessScopeAnalysisId :: Lens.Lens' AccessScopeAnalysisFinding (Prelude.Maybe Prelude.Text)
+accessScopeAnalysisFinding_networkInsightsAccessScopeAnalysisId = Lens.lens (\AccessScopeAnalysisFinding' {networkInsightsAccessScopeAnalysisId} -> networkInsightsAccessScopeAnalysisId) (\s@AccessScopeAnalysisFinding' {} a -> s {networkInsightsAccessScopeAnalysisId = a} :: AccessScopeAnalysisFinding)
+
+-- | The ID of the Network Access Scope.
+accessScopeAnalysisFinding_networkInsightsAccessScopeId :: Lens.Lens' AccessScopeAnalysisFinding (Prelude.Maybe Prelude.Text)
+accessScopeAnalysisFinding_networkInsightsAccessScopeId = Lens.lens (\AccessScopeAnalysisFinding' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@AccessScopeAnalysisFinding' {} a -> s {networkInsightsAccessScopeId = a} :: AccessScopeAnalysisFinding)
+
+instance Data.FromXML AccessScopeAnalysisFinding where
+  parseXML x =
+    AccessScopeAnalysisFinding'
+      Prelude.<$> ( x
+                      Data..@? "findingComponentSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "findingId")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeAnalysisId")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeId")
+
+instance Prelude.Hashable AccessScopeAnalysisFinding where
+  hashWithSalt _salt AccessScopeAnalysisFinding' {..} =
+    _salt
+      `Prelude.hashWithSalt` findingComponents
+      `Prelude.hashWithSalt` findingId
+      `Prelude.hashWithSalt` networkInsightsAccessScopeAnalysisId
+      `Prelude.hashWithSalt` networkInsightsAccessScopeId
+
+instance Prelude.NFData AccessScopeAnalysisFinding where
+  rnf AccessScopeAnalysisFinding' {..} =
+    Prelude.rnf findingComponents
+      `Prelude.seq` Prelude.rnf findingId
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisId
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
diff --git a/gen/Amazonka/EC2/Types/AccessScopePath.hs b/gen/Amazonka/EC2/Types/AccessScopePath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AccessScopePath.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AccessScopePath
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AccessScopePath where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PathStatement
+import Amazonka.EC2.Types.ThroughResourcesStatement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path.
+--
+-- /See:/ 'newAccessScopePath' smart constructor.
+data AccessScopePath = AccessScopePath'
+  { -- | The destination.
+    destination :: Prelude.Maybe PathStatement,
+    -- | The source.
+    source :: Prelude.Maybe PathStatement,
+    -- | The through resources.
+    throughResources :: Prelude.Maybe [ThroughResourcesStatement]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessScopePath' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'accessScopePath_destination' - The destination.
+--
+-- 'source', 'accessScopePath_source' - The source.
+--
+-- 'throughResources', 'accessScopePath_throughResources' - The through resources.
+newAccessScopePath ::
+  AccessScopePath
+newAccessScopePath =
+  AccessScopePath'
+    { destination = Prelude.Nothing,
+      source = Prelude.Nothing,
+      throughResources = Prelude.Nothing
+    }
+
+-- | The destination.
+accessScopePath_destination :: Lens.Lens' AccessScopePath (Prelude.Maybe PathStatement)
+accessScopePath_destination = Lens.lens (\AccessScopePath' {destination} -> destination) (\s@AccessScopePath' {} a -> s {destination = a} :: AccessScopePath)
+
+-- | The source.
+accessScopePath_source :: Lens.Lens' AccessScopePath (Prelude.Maybe PathStatement)
+accessScopePath_source = Lens.lens (\AccessScopePath' {source} -> source) (\s@AccessScopePath' {} a -> s {source = a} :: AccessScopePath)
+
+-- | The through resources.
+accessScopePath_throughResources :: Lens.Lens' AccessScopePath (Prelude.Maybe [ThroughResourcesStatement])
+accessScopePath_throughResources = Lens.lens (\AccessScopePath' {throughResources} -> throughResources) (\s@AccessScopePath' {} a -> s {throughResources = a} :: AccessScopePath) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML AccessScopePath where
+  parseXML x =
+    AccessScopePath'
+      Prelude.<$> (x Data..@? "destination")
+      Prelude.<*> (x Data..@? "source")
+      Prelude.<*> ( x
+                      Data..@? "throughResourceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable AccessScopePath where
+  hashWithSalt _salt AccessScopePath' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` throughResources
+
+instance Prelude.NFData AccessScopePath where
+  rnf AccessScopePath' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf throughResources
diff --git a/gen/Amazonka/EC2/Types/AccessScopePathRequest.hs b/gen/Amazonka/EC2/Types/AccessScopePathRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AccessScopePathRequest.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AccessScopePathRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AccessScopePathRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PathStatementRequest
+import Amazonka.EC2.Types.ThroughResourcesStatementRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path.
+--
+-- /See:/ 'newAccessScopePathRequest' smart constructor.
+data AccessScopePathRequest = AccessScopePathRequest'
+  { -- | The destination.
+    destination :: Prelude.Maybe PathStatementRequest,
+    -- | The source.
+    source :: Prelude.Maybe PathStatementRequest,
+    -- | The through resources.
+    throughResources :: Prelude.Maybe [ThroughResourcesStatementRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessScopePathRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'accessScopePathRequest_destination' - The destination.
+--
+-- 'source', 'accessScopePathRequest_source' - The source.
+--
+-- 'throughResources', 'accessScopePathRequest_throughResources' - The through resources.
+newAccessScopePathRequest ::
+  AccessScopePathRequest
+newAccessScopePathRequest =
+  AccessScopePathRequest'
+    { destination =
+        Prelude.Nothing,
+      source = Prelude.Nothing,
+      throughResources = Prelude.Nothing
+    }
+
+-- | The destination.
+accessScopePathRequest_destination :: Lens.Lens' AccessScopePathRequest (Prelude.Maybe PathStatementRequest)
+accessScopePathRequest_destination = Lens.lens (\AccessScopePathRequest' {destination} -> destination) (\s@AccessScopePathRequest' {} a -> s {destination = a} :: AccessScopePathRequest)
+
+-- | The source.
+accessScopePathRequest_source :: Lens.Lens' AccessScopePathRequest (Prelude.Maybe PathStatementRequest)
+accessScopePathRequest_source = Lens.lens (\AccessScopePathRequest' {source} -> source) (\s@AccessScopePathRequest' {} a -> s {source = a} :: AccessScopePathRequest)
+
+-- | The through resources.
+accessScopePathRequest_throughResources :: Lens.Lens' AccessScopePathRequest (Prelude.Maybe [ThroughResourcesStatementRequest])
+accessScopePathRequest_throughResources = Lens.lens (\AccessScopePathRequest' {throughResources} -> throughResources) (\s@AccessScopePathRequest' {} a -> s {throughResources = a} :: AccessScopePathRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable AccessScopePathRequest where
+  hashWithSalt _salt AccessScopePathRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` throughResources
+
+instance Prelude.NFData AccessScopePathRequest where
+  rnf AccessScopePathRequest' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf throughResources
+
+instance Data.ToQuery AccessScopePathRequest where
+  toQuery AccessScopePathRequest' {..} =
+    Prelude.mconcat
+      [ "Destination" Data.=: destination,
+        "Source" Data.=: source,
+        Data.toQuery
+          ( Data.toQueryList "ThroughResource"
+              Prelude.<$> throughResources
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/AccountAttribute.hs b/gen/Amazonka/EC2/Types/AccountAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AccountAttribute.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AccountAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AccountAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AccountAttributeValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an account attribute.
+--
+-- /See:/ 'newAccountAttribute' smart constructor.
+data AccountAttribute = AccountAttribute'
+  { -- | The name of the account attribute.
+    attributeName :: Prelude.Maybe Prelude.Text,
+    -- | The values for the account attribute.
+    attributeValues :: Prelude.Maybe [AccountAttributeValue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeName', 'accountAttribute_attributeName' - The name of the account attribute.
+--
+-- 'attributeValues', 'accountAttribute_attributeValues' - The values for the account attribute.
+newAccountAttribute ::
+  AccountAttribute
+newAccountAttribute =
+  AccountAttribute'
+    { attributeName = Prelude.Nothing,
+      attributeValues = Prelude.Nothing
+    }
+
+-- | The name of the account attribute.
+accountAttribute_attributeName :: Lens.Lens' AccountAttribute (Prelude.Maybe Prelude.Text)
+accountAttribute_attributeName = Lens.lens (\AccountAttribute' {attributeName} -> attributeName) (\s@AccountAttribute' {} a -> s {attributeName = a} :: AccountAttribute)
+
+-- | The values for the account attribute.
+accountAttribute_attributeValues :: Lens.Lens' AccountAttribute (Prelude.Maybe [AccountAttributeValue])
+accountAttribute_attributeValues = Lens.lens (\AccountAttribute' {attributeValues} -> attributeValues) (\s@AccountAttribute' {} a -> s {attributeValues = a} :: AccountAttribute) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML AccountAttribute where
+  parseXML x =
+    AccountAttribute'
+      Prelude.<$> (x Data..@? "attributeName")
+      Prelude.<*> ( x
+                      Data..@? "attributeValueSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable AccountAttribute where
+  hashWithSalt _salt AccountAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeName
+      `Prelude.hashWithSalt` attributeValues
+
+instance Prelude.NFData AccountAttribute where
+  rnf AccountAttribute' {..} =
+    Prelude.rnf attributeName
+      `Prelude.seq` Prelude.rnf attributeValues
diff --git a/gen/Amazonka/EC2/Types/AccountAttributeName.hs b/gen/Amazonka/EC2/Types/AccountAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AccountAttributeName.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AccountAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AccountAttributeName
+  ( AccountAttributeName
+      ( ..,
+        AccountAttributeName_Default_vpc,
+        AccountAttributeName_Supported_platforms
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccountAttributeName = AccountAttributeName'
+  { fromAccountAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AccountAttributeName_Default_vpc :: AccountAttributeName
+pattern AccountAttributeName_Default_vpc = AccountAttributeName' "default-vpc"
+
+pattern AccountAttributeName_Supported_platforms :: AccountAttributeName
+pattern AccountAttributeName_Supported_platforms = AccountAttributeName' "supported-platforms"
+
+{-# COMPLETE
+  AccountAttributeName_Default_vpc,
+  AccountAttributeName_Supported_platforms,
+  AccountAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AccountAttributeValue.hs b/gen/Amazonka/EC2/Types/AccountAttributeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AccountAttributeValue.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AccountAttributeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AccountAttributeValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a value of an account attribute.
+--
+-- /See:/ 'newAccountAttributeValue' smart constructor.
+data AccountAttributeValue = AccountAttributeValue'
+  { -- | The value of the attribute.
+    attributeValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccountAttributeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeValue', 'accountAttributeValue_attributeValue' - The value of the attribute.
+newAccountAttributeValue ::
+  AccountAttributeValue
+newAccountAttributeValue =
+  AccountAttributeValue'
+    { attributeValue =
+        Prelude.Nothing
+    }
+
+-- | The value of the attribute.
+accountAttributeValue_attributeValue :: Lens.Lens' AccountAttributeValue (Prelude.Maybe Prelude.Text)
+accountAttributeValue_attributeValue = Lens.lens (\AccountAttributeValue' {attributeValue} -> attributeValue) (\s@AccountAttributeValue' {} a -> s {attributeValue = a} :: AccountAttributeValue)
+
+instance Data.FromXML AccountAttributeValue where
+  parseXML x =
+    AccountAttributeValue'
+      Prelude.<$> (x Data..@? "attributeValue")
+
+instance Prelude.Hashable AccountAttributeValue where
+  hashWithSalt _salt AccountAttributeValue' {..} =
+    _salt `Prelude.hashWithSalt` attributeValue
+
+instance Prelude.NFData AccountAttributeValue where
+  rnf AccountAttributeValue' {..} =
+    Prelude.rnf attributeValue
diff --git a/gen/Amazonka/EC2/Types/ActiveInstance.hs b/gen/Amazonka/EC2/Types/ActiveInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ActiveInstance.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ActiveInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ActiveInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceHealthStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a running instance in a Spot Fleet.
+--
+-- /See:/ 'newActiveInstance' smart constructor.
+data ActiveInstance = ActiveInstance'
+  { -- | The health status of the instance. If the status of either the instance
+    -- status check or the system status check is @impaired@, the health status
+    -- of the instance is @unhealthy@. Otherwise, the health status is
+    -- @healthy@.
+    instanceHealth :: Prelude.Maybe InstanceHealthStatus,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Spot Instance request.
+    spotInstanceRequestId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActiveInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceHealth', 'activeInstance_instanceHealth' - The health status of the instance. If the status of either the instance
+-- status check or the system status check is @impaired@, the health status
+-- of the instance is @unhealthy@. Otherwise, the health status is
+-- @healthy@.
+--
+-- 'instanceId', 'activeInstance_instanceId' - The ID of the instance.
+--
+-- 'instanceType', 'activeInstance_instanceType' - The instance type.
+--
+-- 'spotInstanceRequestId', 'activeInstance_spotInstanceRequestId' - The ID of the Spot Instance request.
+newActiveInstance ::
+  ActiveInstance
+newActiveInstance =
+  ActiveInstance'
+    { instanceHealth = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      spotInstanceRequestId = Prelude.Nothing
+    }
+
+-- | The health status of the instance. If the status of either the instance
+-- status check or the system status check is @impaired@, the health status
+-- of the instance is @unhealthy@. Otherwise, the health status is
+-- @healthy@.
+activeInstance_instanceHealth :: Lens.Lens' ActiveInstance (Prelude.Maybe InstanceHealthStatus)
+activeInstance_instanceHealth = Lens.lens (\ActiveInstance' {instanceHealth} -> instanceHealth) (\s@ActiveInstance' {} a -> s {instanceHealth = a} :: ActiveInstance)
+
+-- | The ID of the instance.
+activeInstance_instanceId :: Lens.Lens' ActiveInstance (Prelude.Maybe Prelude.Text)
+activeInstance_instanceId = Lens.lens (\ActiveInstance' {instanceId} -> instanceId) (\s@ActiveInstance' {} a -> s {instanceId = a} :: ActiveInstance)
+
+-- | The instance type.
+activeInstance_instanceType :: Lens.Lens' ActiveInstance (Prelude.Maybe Prelude.Text)
+activeInstance_instanceType = Lens.lens (\ActiveInstance' {instanceType} -> instanceType) (\s@ActiveInstance' {} a -> s {instanceType = a} :: ActiveInstance)
+
+-- | The ID of the Spot Instance request.
+activeInstance_spotInstanceRequestId :: Lens.Lens' ActiveInstance (Prelude.Maybe Prelude.Text)
+activeInstance_spotInstanceRequestId = Lens.lens (\ActiveInstance' {spotInstanceRequestId} -> spotInstanceRequestId) (\s@ActiveInstance' {} a -> s {spotInstanceRequestId = a} :: ActiveInstance)
+
+instance Data.FromXML ActiveInstance where
+  parseXML x =
+    ActiveInstance'
+      Prelude.<$> (x Data..@? "instanceHealth")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "spotInstanceRequestId")
+
+instance Prelude.Hashable ActiveInstance where
+  hashWithSalt _salt ActiveInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceHealth
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` spotInstanceRequestId
+
+instance Prelude.NFData ActiveInstance where
+  rnf ActiveInstance' {..} =
+    Prelude.rnf instanceHealth
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf spotInstanceRequestId
diff --git a/gen/Amazonka/EC2/Types/ActivityStatus.hs b/gen/Amazonka/EC2/Types/ActivityStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ActivityStatus.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ActivityStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ActivityStatus
+  ( ActivityStatus
+      ( ..,
+        ActivityStatus_Error,
+        ActivityStatus_Fulfilled,
+        ActivityStatus_Pending_fulfillment,
+        ActivityStatus_Pending_termination
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ActivityStatus = ActivityStatus'
+  { fromActivityStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ActivityStatus_Error :: ActivityStatus
+pattern ActivityStatus_Error = ActivityStatus' "error"
+
+pattern ActivityStatus_Fulfilled :: ActivityStatus
+pattern ActivityStatus_Fulfilled = ActivityStatus' "fulfilled"
+
+pattern ActivityStatus_Pending_fulfillment :: ActivityStatus
+pattern ActivityStatus_Pending_fulfillment = ActivityStatus' "pending_fulfillment"
+
+pattern ActivityStatus_Pending_termination :: ActivityStatus
+pattern ActivityStatus_Pending_termination = ActivityStatus' "pending_termination"
+
+{-# COMPLETE
+  ActivityStatus_Error,
+  ActivityStatus_Fulfilled,
+  ActivityStatus_Pending_fulfillment,
+  ActivityStatus_Pending_termination,
+  ActivityStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AddIpamOperatingRegion.hs b/gen/Amazonka/EC2/Types/AddIpamOperatingRegion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddIpamOperatingRegion.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddIpamOperatingRegion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddIpamOperatingRegion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Add an operating Region to an IPAM. Operating Regions are Amazon Web
+-- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+-- IPAM only discovers and monitors resources in the Amazon Web Services
+-- Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- /See:/ 'newAddIpamOperatingRegion' smart constructor.
+data AddIpamOperatingRegion = AddIpamOperatingRegion'
+  { -- | The name of the operating Region.
+    regionName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddIpamOperatingRegion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'regionName', 'addIpamOperatingRegion_regionName' - The name of the operating Region.
+newAddIpamOperatingRegion ::
+  AddIpamOperatingRegion
+newAddIpamOperatingRegion =
+  AddIpamOperatingRegion'
+    { regionName =
+        Prelude.Nothing
+    }
+
+-- | The name of the operating Region.
+addIpamOperatingRegion_regionName :: Lens.Lens' AddIpamOperatingRegion (Prelude.Maybe Prelude.Text)
+addIpamOperatingRegion_regionName = Lens.lens (\AddIpamOperatingRegion' {regionName} -> regionName) (\s@AddIpamOperatingRegion' {} a -> s {regionName = a} :: AddIpamOperatingRegion)
+
+instance Prelude.Hashable AddIpamOperatingRegion where
+  hashWithSalt _salt AddIpamOperatingRegion' {..} =
+    _salt `Prelude.hashWithSalt` regionName
+
+instance Prelude.NFData AddIpamOperatingRegion where
+  rnf AddIpamOperatingRegion' {..} =
+    Prelude.rnf regionName
+
+instance Data.ToQuery AddIpamOperatingRegion where
+  toQuery AddIpamOperatingRegion' {..} =
+    Prelude.mconcat ["RegionName" Data.=: regionName]
diff --git a/gen/Amazonka/EC2/Types/AddPrefixListEntry.hs b/gen/Amazonka/EC2/Types/AddPrefixListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddPrefixListEntry.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddPrefixListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddPrefixListEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | An entry for a prefix list.
+--
+-- /See:/ 'newAddPrefixListEntry' smart constructor.
+data AddPrefixListEntry = AddPrefixListEntry'
+  { -- | A description for the entry.
+    --
+    -- Constraints: Up to 255 characters in length.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR block.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddPrefixListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'addPrefixListEntry_description' - A description for the entry.
+--
+-- Constraints: Up to 255 characters in length.
+--
+-- 'cidr', 'addPrefixListEntry_cidr' - The CIDR block.
+newAddPrefixListEntry ::
+  -- | 'cidr'
+  Prelude.Text ->
+  AddPrefixListEntry
+newAddPrefixListEntry pCidr_ =
+  AddPrefixListEntry'
+    { description = Prelude.Nothing,
+      cidr = pCidr_
+    }
+
+-- | A description for the entry.
+--
+-- Constraints: Up to 255 characters in length.
+addPrefixListEntry_description :: Lens.Lens' AddPrefixListEntry (Prelude.Maybe Prelude.Text)
+addPrefixListEntry_description = Lens.lens (\AddPrefixListEntry' {description} -> description) (\s@AddPrefixListEntry' {} a -> s {description = a} :: AddPrefixListEntry)
+
+-- | The CIDR block.
+addPrefixListEntry_cidr :: Lens.Lens' AddPrefixListEntry Prelude.Text
+addPrefixListEntry_cidr = Lens.lens (\AddPrefixListEntry' {cidr} -> cidr) (\s@AddPrefixListEntry' {} a -> s {cidr = a} :: AddPrefixListEntry)
+
+instance Prelude.Hashable AddPrefixListEntry where
+  hashWithSalt _salt AddPrefixListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData AddPrefixListEntry where
+  rnf AddPrefixListEntry' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf cidr
+
+instance Data.ToQuery AddPrefixListEntry where
+  toQuery AddPrefixListEntry' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "Cidr" Data.=: cidr
+      ]
diff --git a/gen/Amazonka/EC2/Types/AddedPrincipal.hs b/gen/Amazonka/EC2/Types/AddedPrincipal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddedPrincipal.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddedPrincipal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddedPrincipal where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PrincipalType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a principal.
+--
+-- /See:/ 'newAddedPrincipal' smart constructor.
+data AddedPrincipal = AddedPrincipal'
+  { -- | The Amazon Resource Name (ARN) of the principal.
+    principal :: Prelude.Maybe Prelude.Text,
+    -- | The type of principal.
+    principalType :: Prelude.Maybe PrincipalType,
+    -- | The ID of the service.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the service permission.
+    servicePermissionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddedPrincipal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'principal', 'addedPrincipal_principal' - The Amazon Resource Name (ARN) of the principal.
+--
+-- 'principalType', 'addedPrincipal_principalType' - The type of principal.
+--
+-- 'serviceId', 'addedPrincipal_serviceId' - The ID of the service.
+--
+-- 'servicePermissionId', 'addedPrincipal_servicePermissionId' - The ID of the service permission.
+newAddedPrincipal ::
+  AddedPrincipal
+newAddedPrincipal =
+  AddedPrincipal'
+    { principal = Prelude.Nothing,
+      principalType = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      servicePermissionId = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the principal.
+addedPrincipal_principal :: Lens.Lens' AddedPrincipal (Prelude.Maybe Prelude.Text)
+addedPrincipal_principal = Lens.lens (\AddedPrincipal' {principal} -> principal) (\s@AddedPrincipal' {} a -> s {principal = a} :: AddedPrincipal)
+
+-- | The type of principal.
+addedPrincipal_principalType :: Lens.Lens' AddedPrincipal (Prelude.Maybe PrincipalType)
+addedPrincipal_principalType = Lens.lens (\AddedPrincipal' {principalType} -> principalType) (\s@AddedPrincipal' {} a -> s {principalType = a} :: AddedPrincipal)
+
+-- | The ID of the service.
+addedPrincipal_serviceId :: Lens.Lens' AddedPrincipal (Prelude.Maybe Prelude.Text)
+addedPrincipal_serviceId = Lens.lens (\AddedPrincipal' {serviceId} -> serviceId) (\s@AddedPrincipal' {} a -> s {serviceId = a} :: AddedPrincipal)
+
+-- | The ID of the service permission.
+addedPrincipal_servicePermissionId :: Lens.Lens' AddedPrincipal (Prelude.Maybe Prelude.Text)
+addedPrincipal_servicePermissionId = Lens.lens (\AddedPrincipal' {servicePermissionId} -> servicePermissionId) (\s@AddedPrincipal' {} a -> s {servicePermissionId = a} :: AddedPrincipal)
+
+instance Data.FromXML AddedPrincipal where
+  parseXML x =
+    AddedPrincipal'
+      Prelude.<$> (x Data..@? "principal")
+      Prelude.<*> (x Data..@? "principalType")
+      Prelude.<*> (x Data..@? "serviceId")
+      Prelude.<*> (x Data..@? "servicePermissionId")
+
+instance Prelude.Hashable AddedPrincipal where
+  hashWithSalt _salt AddedPrincipal' {..} =
+    _salt
+      `Prelude.hashWithSalt` principal
+      `Prelude.hashWithSalt` principalType
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` servicePermissionId
+
+instance Prelude.NFData AddedPrincipal where
+  rnf AddedPrincipal' {..} =
+    Prelude.rnf principal
+      `Prelude.seq` Prelude.rnf principalType
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf servicePermissionId
diff --git a/gen/Amazonka/EC2/Types/AdditionalDetail.hs b/gen/Amazonka/EC2/Types/AdditionalDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AdditionalDetail.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AdditionalDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AdditionalDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AnalysisComponent
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an additional detail for a path analysis.
+--
+-- /See:/ 'newAdditionalDetail' smart constructor.
+data AdditionalDetail = AdditionalDetail'
+  { -- | The information type.
+    additionalDetailType :: Prelude.Maybe Prelude.Text,
+    -- | The path component.
+    component :: Prelude.Maybe AnalysisComponent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AdditionalDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalDetailType', 'additionalDetail_additionalDetailType' - The information type.
+--
+-- 'component', 'additionalDetail_component' - The path component.
+newAdditionalDetail ::
+  AdditionalDetail
+newAdditionalDetail =
+  AdditionalDetail'
+    { additionalDetailType =
+        Prelude.Nothing,
+      component = Prelude.Nothing
+    }
+
+-- | The information type.
+additionalDetail_additionalDetailType :: Lens.Lens' AdditionalDetail (Prelude.Maybe Prelude.Text)
+additionalDetail_additionalDetailType = Lens.lens (\AdditionalDetail' {additionalDetailType} -> additionalDetailType) (\s@AdditionalDetail' {} a -> s {additionalDetailType = a} :: AdditionalDetail)
+
+-- | The path component.
+additionalDetail_component :: Lens.Lens' AdditionalDetail (Prelude.Maybe AnalysisComponent)
+additionalDetail_component = Lens.lens (\AdditionalDetail' {component} -> component) (\s@AdditionalDetail' {} a -> s {component = a} :: AdditionalDetail)
+
+instance Data.FromXML AdditionalDetail where
+  parseXML x =
+    AdditionalDetail'
+      Prelude.<$> (x Data..@? "additionalDetailType")
+      Prelude.<*> (x Data..@? "component")
+
+instance Prelude.Hashable AdditionalDetail where
+  hashWithSalt _salt AdditionalDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalDetailType
+      `Prelude.hashWithSalt` component
+
+instance Prelude.NFData AdditionalDetail where
+  rnf AdditionalDetail' {..} =
+    Prelude.rnf additionalDetailType
+      `Prelude.seq` Prelude.rnf component
diff --git a/gen/Amazonka/EC2/Types/Address.hs b/gen/Amazonka/EC2/Types/Address.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Address.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Address
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Address where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DomainType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Elastic IP address, or a carrier IP address.
+--
+-- /See:/ 'newAddress' smart constructor.
+data Address = Address'
+  { -- | The ID representing the allocation of the address for use with EC2-VPC.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID representing the association of the address with an instance in a
+    -- VPC.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The carrier IP address associated. This option is only available for
+    -- network interfaces which reside in a subnet in a Wavelength Zone (for
+    -- example an EC2 instance).
+    carrierIp :: Prelude.Maybe Prelude.Text,
+    -- | The customer-owned IP address.
+    customerOwnedIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the customer-owned address pool.
+    customerOwnedIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether this Elastic IP address is for use with instances in
+    -- EC2-Classic (@standard@) or instances in a VPC (@vpc@).
+    domain :: Prelude.Maybe DomainType,
+    -- | The ID of the instance that the address is associated with (if any).
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the unique set of Availability Zones, Local Zones, or
+    -- Wavelength Zones from which Amazon Web Services advertises IP addresses.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the network
+    -- interface.
+    networkInterfaceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The private IP address associated with the Elastic IP address.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The Elastic IP address.
+    publicIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an address pool.
+    publicIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the Elastic IP address.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Address' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'address_allocationId' - The ID representing the allocation of the address for use with EC2-VPC.
+--
+-- 'associationId', 'address_associationId' - The ID representing the association of the address with an instance in a
+-- VPC.
+--
+-- 'carrierIp', 'address_carrierIp' - The carrier IP address associated. This option is only available for
+-- network interfaces which reside in a subnet in a Wavelength Zone (for
+-- example an EC2 instance).
+--
+-- 'customerOwnedIp', 'address_customerOwnedIp' - The customer-owned IP address.
+--
+-- 'customerOwnedIpv4Pool', 'address_customerOwnedIpv4Pool' - The ID of the customer-owned address pool.
+--
+-- 'domain', 'address_domain' - Indicates whether this Elastic IP address is for use with instances in
+-- EC2-Classic (@standard@) or instances in a VPC (@vpc@).
+--
+-- 'instanceId', 'address_instanceId' - The ID of the instance that the address is associated with (if any).
+--
+-- 'networkBorderGroup', 'address_networkBorderGroup' - The name of the unique set of Availability Zones, Local Zones, or
+-- Wavelength Zones from which Amazon Web Services advertises IP addresses.
+--
+-- 'networkInterfaceId', 'address_networkInterfaceId' - The ID of the network interface.
+--
+-- 'networkInterfaceOwnerId', 'address_networkInterfaceOwnerId' - The ID of the Amazon Web Services account that owns the network
+-- interface.
+--
+-- 'privateIpAddress', 'address_privateIpAddress' - The private IP address associated with the Elastic IP address.
+--
+-- 'publicIp', 'address_publicIp' - The Elastic IP address.
+--
+-- 'publicIpv4Pool', 'address_publicIpv4Pool' - The ID of an address pool.
+--
+-- 'tags', 'address_tags' - Any tags assigned to the Elastic IP address.
+newAddress ::
+  Address
+newAddress =
+  Address'
+    { allocationId = Prelude.Nothing,
+      associationId = Prelude.Nothing,
+      carrierIp = Prelude.Nothing,
+      customerOwnedIp = Prelude.Nothing,
+      customerOwnedIpv4Pool = Prelude.Nothing,
+      domain = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      networkInterfaceOwnerId = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      publicIp = Prelude.Nothing,
+      publicIpv4Pool = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID representing the allocation of the address for use with EC2-VPC.
+address_allocationId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_allocationId = Lens.lens (\Address' {allocationId} -> allocationId) (\s@Address' {} a -> s {allocationId = a} :: Address)
+
+-- | The ID representing the association of the address with an instance in a
+-- VPC.
+address_associationId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_associationId = Lens.lens (\Address' {associationId} -> associationId) (\s@Address' {} a -> s {associationId = a} :: Address)
+
+-- | The carrier IP address associated. This option is only available for
+-- network interfaces which reside in a subnet in a Wavelength Zone (for
+-- example an EC2 instance).
+address_carrierIp :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_carrierIp = Lens.lens (\Address' {carrierIp} -> carrierIp) (\s@Address' {} a -> s {carrierIp = a} :: Address)
+
+-- | The customer-owned IP address.
+address_customerOwnedIp :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_customerOwnedIp = Lens.lens (\Address' {customerOwnedIp} -> customerOwnedIp) (\s@Address' {} a -> s {customerOwnedIp = a} :: Address)
+
+-- | The ID of the customer-owned address pool.
+address_customerOwnedIpv4Pool :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_customerOwnedIpv4Pool = Lens.lens (\Address' {customerOwnedIpv4Pool} -> customerOwnedIpv4Pool) (\s@Address' {} a -> s {customerOwnedIpv4Pool = a} :: Address)
+
+-- | Indicates whether this Elastic IP address is for use with instances in
+-- EC2-Classic (@standard@) or instances in a VPC (@vpc@).
+address_domain :: Lens.Lens' Address (Prelude.Maybe DomainType)
+address_domain = Lens.lens (\Address' {domain} -> domain) (\s@Address' {} a -> s {domain = a} :: Address)
+
+-- | The ID of the instance that the address is associated with (if any).
+address_instanceId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_instanceId = Lens.lens (\Address' {instanceId} -> instanceId) (\s@Address' {} a -> s {instanceId = a} :: Address)
+
+-- | The name of the unique set of Availability Zones, Local Zones, or
+-- Wavelength Zones from which Amazon Web Services advertises IP addresses.
+address_networkBorderGroup :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_networkBorderGroup = Lens.lens (\Address' {networkBorderGroup} -> networkBorderGroup) (\s@Address' {} a -> s {networkBorderGroup = a} :: Address)
+
+-- | The ID of the network interface.
+address_networkInterfaceId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_networkInterfaceId = Lens.lens (\Address' {networkInterfaceId} -> networkInterfaceId) (\s@Address' {} a -> s {networkInterfaceId = a} :: Address)
+
+-- | The ID of the Amazon Web Services account that owns the network
+-- interface.
+address_networkInterfaceOwnerId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_networkInterfaceOwnerId = Lens.lens (\Address' {networkInterfaceOwnerId} -> networkInterfaceOwnerId) (\s@Address' {} a -> s {networkInterfaceOwnerId = a} :: Address)
+
+-- | The private IP address associated with the Elastic IP address.
+address_privateIpAddress :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_privateIpAddress = Lens.lens (\Address' {privateIpAddress} -> privateIpAddress) (\s@Address' {} a -> s {privateIpAddress = a} :: Address)
+
+-- | The Elastic IP address.
+address_publicIp :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_publicIp = Lens.lens (\Address' {publicIp} -> publicIp) (\s@Address' {} a -> s {publicIp = a} :: Address)
+
+-- | The ID of an address pool.
+address_publicIpv4Pool :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_publicIpv4Pool = Lens.lens (\Address' {publicIpv4Pool} -> publicIpv4Pool) (\s@Address' {} a -> s {publicIpv4Pool = a} :: Address)
+
+-- | Any tags assigned to the Elastic IP address.
+address_tags :: Lens.Lens' Address (Prelude.Maybe [Tag])
+address_tags = Lens.lens (\Address' {tags} -> tags) (\s@Address' {} a -> s {tags = a} :: Address) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML Address where
+  parseXML x =
+    Address'
+      Prelude.<$> (x Data..@? "allocationId")
+      Prelude.<*> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "carrierIp")
+      Prelude.<*> (x Data..@? "customerOwnedIp")
+      Prelude.<*> (x Data..@? "customerOwnedIpv4Pool")
+      Prelude.<*> (x Data..@? "domain")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "networkBorderGroup")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "networkInterfaceOwnerId")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+      Prelude.<*> (x Data..@? "publicIp")
+      Prelude.<*> (x Data..@? "publicIpv4Pool")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable Address where
+  hashWithSalt _salt Address' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` carrierIp
+      `Prelude.hashWithSalt` customerOwnedIp
+      `Prelude.hashWithSalt` customerOwnedIpv4Pool
+      `Prelude.hashWithSalt` domain
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` networkBorderGroup
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` networkInterfaceOwnerId
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` publicIp
+      `Prelude.hashWithSalt` publicIpv4Pool
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Address where
+  rnf Address' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf carrierIp
+      `Prelude.seq` Prelude.rnf customerOwnedIp
+      `Prelude.seq` Prelude.rnf customerOwnedIpv4Pool
+      `Prelude.seq` Prelude.rnf domain
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf networkBorderGroup
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf networkInterfaceOwnerId
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf publicIp
+      `Prelude.seq` Prelude.rnf publicIpv4Pool
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/AddressAttribute.hs b/gen/Amazonka/EC2/Types/AddressAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddressAttribute.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddressAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddressAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PtrUpdateStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attributes associated with an Elastic IP address.
+--
+-- /See:/ 'newAddressAttribute' smart constructor.
+data AddressAttribute = AddressAttribute'
+  { -- | [EC2-VPC] The allocation ID.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The pointer (PTR) record for the IP address.
+    ptrRecord :: Prelude.Maybe Prelude.Text,
+    -- | The updated PTR record for the IP address.
+    ptrRecordUpdate :: Prelude.Maybe PtrUpdateStatus,
+    -- | The public IP address.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddressAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'addressAttribute_allocationId' - [EC2-VPC] The allocation ID.
+--
+-- 'ptrRecord', 'addressAttribute_ptrRecord' - The pointer (PTR) record for the IP address.
+--
+-- 'ptrRecordUpdate', 'addressAttribute_ptrRecordUpdate' - The updated PTR record for the IP address.
+--
+-- 'publicIp', 'addressAttribute_publicIp' - The public IP address.
+newAddressAttribute ::
+  AddressAttribute
+newAddressAttribute =
+  AddressAttribute'
+    { allocationId = Prelude.Nothing,
+      ptrRecord = Prelude.Nothing,
+      ptrRecordUpdate = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | [EC2-VPC] The allocation ID.
+addressAttribute_allocationId :: Lens.Lens' AddressAttribute (Prelude.Maybe Prelude.Text)
+addressAttribute_allocationId = Lens.lens (\AddressAttribute' {allocationId} -> allocationId) (\s@AddressAttribute' {} a -> s {allocationId = a} :: AddressAttribute)
+
+-- | The pointer (PTR) record for the IP address.
+addressAttribute_ptrRecord :: Lens.Lens' AddressAttribute (Prelude.Maybe Prelude.Text)
+addressAttribute_ptrRecord = Lens.lens (\AddressAttribute' {ptrRecord} -> ptrRecord) (\s@AddressAttribute' {} a -> s {ptrRecord = a} :: AddressAttribute)
+
+-- | The updated PTR record for the IP address.
+addressAttribute_ptrRecordUpdate :: Lens.Lens' AddressAttribute (Prelude.Maybe PtrUpdateStatus)
+addressAttribute_ptrRecordUpdate = Lens.lens (\AddressAttribute' {ptrRecordUpdate} -> ptrRecordUpdate) (\s@AddressAttribute' {} a -> s {ptrRecordUpdate = a} :: AddressAttribute)
+
+-- | The public IP address.
+addressAttribute_publicIp :: Lens.Lens' AddressAttribute (Prelude.Maybe Prelude.Text)
+addressAttribute_publicIp = Lens.lens (\AddressAttribute' {publicIp} -> publicIp) (\s@AddressAttribute' {} a -> s {publicIp = a} :: AddressAttribute)
+
+instance Data.FromXML AddressAttribute where
+  parseXML x =
+    AddressAttribute'
+      Prelude.<$> (x Data..@? "allocationId")
+      Prelude.<*> (x Data..@? "ptrRecord")
+      Prelude.<*> (x Data..@? "ptrRecordUpdate")
+      Prelude.<*> (x Data..@? "publicIp")
+
+instance Prelude.Hashable AddressAttribute where
+  hashWithSalt _salt AddressAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` ptrRecord
+      `Prelude.hashWithSalt` ptrRecordUpdate
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData AddressAttribute where
+  rnf AddressAttribute' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf ptrRecord
+      `Prelude.seq` Prelude.rnf ptrRecordUpdate
+      `Prelude.seq` Prelude.rnf publicIp
diff --git a/gen/Amazonka/EC2/Types/AddressAttributeName.hs b/gen/Amazonka/EC2/Types/AddressAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddressAttributeName.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddressAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddressAttributeName
+  ( AddressAttributeName
+      ( ..,
+        AddressAttributeName_Domain_name
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AddressAttributeName = AddressAttributeName'
+  { fromAddressAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AddressAttributeName_Domain_name :: AddressAttributeName
+pattern AddressAttributeName_Domain_name = AddressAttributeName' "domain-name"
+
+{-# COMPLETE
+  AddressAttributeName_Domain_name,
+  AddressAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AddressFamily.hs b/gen/Amazonka/EC2/Types/AddressFamily.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddressFamily.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddressFamily
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddressFamily
+  ( AddressFamily
+      ( ..,
+        AddressFamily_Ipv4,
+        AddressFamily_Ipv6
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AddressFamily = AddressFamily'
+  { fromAddressFamily ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AddressFamily_Ipv4 :: AddressFamily
+pattern AddressFamily_Ipv4 = AddressFamily' "ipv4"
+
+pattern AddressFamily_Ipv6 :: AddressFamily
+pattern AddressFamily_Ipv6 = AddressFamily' "ipv6"
+
+{-# COMPLETE
+  AddressFamily_Ipv4,
+  AddressFamily_Ipv6,
+  AddressFamily'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AddressStatus.hs b/gen/Amazonka/EC2/Types/AddressStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddressStatus.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddressStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddressStatus
+  ( AddressStatus
+      ( ..,
+        AddressStatus_InClassic,
+        AddressStatus_InVpc,
+        AddressStatus_MoveInProgress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AddressStatus = AddressStatus'
+  { fromAddressStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AddressStatus_InClassic :: AddressStatus
+pattern AddressStatus_InClassic = AddressStatus' "InClassic"
+
+pattern AddressStatus_InVpc :: AddressStatus
+pattern AddressStatus_InVpc = AddressStatus' "InVpc"
+
+pattern AddressStatus_MoveInProgress :: AddressStatus
+pattern AddressStatus_MoveInProgress = AddressStatus' "MoveInProgress"
+
+{-# COMPLETE
+  AddressStatus_InClassic,
+  AddressStatus_InVpc,
+  AddressStatus_MoveInProgress,
+  AddressStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AddressTransfer.hs b/gen/Amazonka/EC2/Types/AddressTransfer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddressTransfer.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddressTransfer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddressTransfer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AddressTransferStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details on the Elastic IP address transfer. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro Transfer Elastic IP addresses>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+--
+-- /See:/ 'newAddressTransfer' smart constructor.
+data AddressTransfer = AddressTransfer'
+  { -- | The Elastic IP address transfer status.
+    addressTransferStatus :: Prelude.Maybe AddressTransferStatus,
+    -- | The allocation ID of an Elastic IP address.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The Elastic IP address being transferred.
+    publicIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the account that you want to transfer the Elastic IP address
+    -- to.
+    transferAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the Elastic IP address transfer was accepted.
+    transferOfferAcceptedTimestamp :: Prelude.Maybe Data.ISO8601,
+    -- | The timestamp when the Elastic IP address transfer expired. When the
+    -- source account starts the transfer, the transfer account has seven hours
+    -- to allocate the Elastic IP address to complete the transfer, or the
+    -- Elastic IP address will return to its original owner.
+    transferOfferExpirationTimestamp :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AddressTransfer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressTransferStatus', 'addressTransfer_addressTransferStatus' - The Elastic IP address transfer status.
+--
+-- 'allocationId', 'addressTransfer_allocationId' - The allocation ID of an Elastic IP address.
+--
+-- 'publicIp', 'addressTransfer_publicIp' - The Elastic IP address being transferred.
+--
+-- 'transferAccountId', 'addressTransfer_transferAccountId' - The ID of the account that you want to transfer the Elastic IP address
+-- to.
+--
+-- 'transferOfferAcceptedTimestamp', 'addressTransfer_transferOfferAcceptedTimestamp' - The timestamp when the Elastic IP address transfer was accepted.
+--
+-- 'transferOfferExpirationTimestamp', 'addressTransfer_transferOfferExpirationTimestamp' - The timestamp when the Elastic IP address transfer expired. When the
+-- source account starts the transfer, the transfer account has seven hours
+-- to allocate the Elastic IP address to complete the transfer, or the
+-- Elastic IP address will return to its original owner.
+newAddressTransfer ::
+  AddressTransfer
+newAddressTransfer =
+  AddressTransfer'
+    { addressTransferStatus =
+        Prelude.Nothing,
+      allocationId = Prelude.Nothing,
+      publicIp = Prelude.Nothing,
+      transferAccountId = Prelude.Nothing,
+      transferOfferAcceptedTimestamp = Prelude.Nothing,
+      transferOfferExpirationTimestamp = Prelude.Nothing
+    }
+
+-- | The Elastic IP address transfer status.
+addressTransfer_addressTransferStatus :: Lens.Lens' AddressTransfer (Prelude.Maybe AddressTransferStatus)
+addressTransfer_addressTransferStatus = Lens.lens (\AddressTransfer' {addressTransferStatus} -> addressTransferStatus) (\s@AddressTransfer' {} a -> s {addressTransferStatus = a} :: AddressTransfer)
+
+-- | The allocation ID of an Elastic IP address.
+addressTransfer_allocationId :: Lens.Lens' AddressTransfer (Prelude.Maybe Prelude.Text)
+addressTransfer_allocationId = Lens.lens (\AddressTransfer' {allocationId} -> allocationId) (\s@AddressTransfer' {} a -> s {allocationId = a} :: AddressTransfer)
+
+-- | The Elastic IP address being transferred.
+addressTransfer_publicIp :: Lens.Lens' AddressTransfer (Prelude.Maybe Prelude.Text)
+addressTransfer_publicIp = Lens.lens (\AddressTransfer' {publicIp} -> publicIp) (\s@AddressTransfer' {} a -> s {publicIp = a} :: AddressTransfer)
+
+-- | The ID of the account that you want to transfer the Elastic IP address
+-- to.
+addressTransfer_transferAccountId :: Lens.Lens' AddressTransfer (Prelude.Maybe Prelude.Text)
+addressTransfer_transferAccountId = Lens.lens (\AddressTransfer' {transferAccountId} -> transferAccountId) (\s@AddressTransfer' {} a -> s {transferAccountId = a} :: AddressTransfer)
+
+-- | The timestamp when the Elastic IP address transfer was accepted.
+addressTransfer_transferOfferAcceptedTimestamp :: Lens.Lens' AddressTransfer (Prelude.Maybe Prelude.UTCTime)
+addressTransfer_transferOfferAcceptedTimestamp = Lens.lens (\AddressTransfer' {transferOfferAcceptedTimestamp} -> transferOfferAcceptedTimestamp) (\s@AddressTransfer' {} a -> s {transferOfferAcceptedTimestamp = a} :: AddressTransfer) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp when the Elastic IP address transfer expired. When the
+-- source account starts the transfer, the transfer account has seven hours
+-- to allocate the Elastic IP address to complete the transfer, or the
+-- Elastic IP address will return to its original owner.
+addressTransfer_transferOfferExpirationTimestamp :: Lens.Lens' AddressTransfer (Prelude.Maybe Prelude.UTCTime)
+addressTransfer_transferOfferExpirationTimestamp = Lens.lens (\AddressTransfer' {transferOfferExpirationTimestamp} -> transferOfferExpirationTimestamp) (\s@AddressTransfer' {} a -> s {transferOfferExpirationTimestamp = a} :: AddressTransfer) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML AddressTransfer where
+  parseXML x =
+    AddressTransfer'
+      Prelude.<$> (x Data..@? "addressTransferStatus")
+      Prelude.<*> (x Data..@? "allocationId")
+      Prelude.<*> (x Data..@? "publicIp")
+      Prelude.<*> (x Data..@? "transferAccountId")
+      Prelude.<*> (x Data..@? "transferOfferAcceptedTimestamp")
+      Prelude.<*> (x Data..@? "transferOfferExpirationTimestamp")
+
+instance Prelude.Hashable AddressTransfer where
+  hashWithSalt _salt AddressTransfer' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressTransferStatus
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` publicIp
+      `Prelude.hashWithSalt` transferAccountId
+      `Prelude.hashWithSalt` transferOfferAcceptedTimestamp
+      `Prelude.hashWithSalt` transferOfferExpirationTimestamp
+
+instance Prelude.NFData AddressTransfer where
+  rnf AddressTransfer' {..} =
+    Prelude.rnf addressTransferStatus
+      `Prelude.seq` Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf publicIp
+      `Prelude.seq` Prelude.rnf transferAccountId
+      `Prelude.seq` Prelude.rnf transferOfferAcceptedTimestamp
+      `Prelude.seq` Prelude.rnf transferOfferExpirationTimestamp
diff --git a/gen/Amazonka/EC2/Types/AddressTransferStatus.hs b/gen/Amazonka/EC2/Types/AddressTransferStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AddressTransferStatus.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AddressTransferStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AddressTransferStatus
+  ( AddressTransferStatus
+      ( ..,
+        AddressTransferStatus_Accepted,
+        AddressTransferStatus_Disabled,
+        AddressTransferStatus_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AddressTransferStatus = AddressTransferStatus'
+  { fromAddressTransferStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AddressTransferStatus_Accepted :: AddressTransferStatus
+pattern AddressTransferStatus_Accepted = AddressTransferStatus' "accepted"
+
+pattern AddressTransferStatus_Disabled :: AddressTransferStatus
+pattern AddressTransferStatus_Disabled = AddressTransferStatus' "disabled"
+
+pattern AddressTransferStatus_Pending :: AddressTransferStatus
+pattern AddressTransferStatus_Pending = AddressTransferStatus' "pending"
+
+{-# COMPLETE
+  AddressTransferStatus_Accepted,
+  AddressTransferStatus_Disabled,
+  AddressTransferStatus_Pending,
+  AddressTransferStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Affinity.hs b/gen/Amazonka/EC2/Types/Affinity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Affinity.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Affinity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Affinity
+  ( Affinity
+      ( ..,
+        Affinity_Default,
+        Affinity_Host
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype Affinity = Affinity'
+  { fromAffinity ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Affinity_Default :: Affinity
+pattern Affinity_Default = Affinity' "default"
+
+pattern Affinity_Host :: Affinity
+pattern Affinity_Host = Affinity' "host"
+
+{-# COMPLETE
+  Affinity_Default,
+  Affinity_Host,
+  Affinity'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AllocationState.hs b/gen/Amazonka/EC2/Types/AllocationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AllocationState.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AllocationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AllocationState
+  ( AllocationState
+      ( ..,
+        AllocationState_Available,
+        AllocationState_Pending,
+        AllocationState_Permanent_failure,
+        AllocationState_Released,
+        AllocationState_Released_permanent_failure,
+        AllocationState_Under_assessment
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllocationState = AllocationState'
+  { fromAllocationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AllocationState_Available :: AllocationState
+pattern AllocationState_Available = AllocationState' "available"
+
+pattern AllocationState_Pending :: AllocationState
+pattern AllocationState_Pending = AllocationState' "pending"
+
+pattern AllocationState_Permanent_failure :: AllocationState
+pattern AllocationState_Permanent_failure = AllocationState' "permanent-failure"
+
+pattern AllocationState_Released :: AllocationState
+pattern AllocationState_Released = AllocationState' "released"
+
+pattern AllocationState_Released_permanent_failure :: AllocationState
+pattern AllocationState_Released_permanent_failure = AllocationState' "released-permanent-failure"
+
+pattern AllocationState_Under_assessment :: AllocationState
+pattern AllocationState_Under_assessment = AllocationState' "under-assessment"
+
+{-# COMPLETE
+  AllocationState_Available,
+  AllocationState_Pending,
+  AllocationState_Permanent_failure,
+  AllocationState_Released,
+  AllocationState_Released_permanent_failure,
+  AllocationState_Under_assessment,
+  AllocationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AllocationStrategy.hs b/gen/Amazonka/EC2/Types/AllocationStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AllocationStrategy.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AllocationStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AllocationStrategy
+  ( AllocationStrategy
+      ( ..,
+        AllocationStrategy_CapacityOptimized,
+        AllocationStrategy_CapacityOptimizedPrioritized,
+        AllocationStrategy_Diversified,
+        AllocationStrategy_LowestPrice,
+        AllocationStrategy_PriceCapacityOptimized
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllocationStrategy = AllocationStrategy'
+  { fromAllocationStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AllocationStrategy_CapacityOptimized :: AllocationStrategy
+pattern AllocationStrategy_CapacityOptimized = AllocationStrategy' "capacityOptimized"
+
+pattern AllocationStrategy_CapacityOptimizedPrioritized :: AllocationStrategy
+pattern AllocationStrategy_CapacityOptimizedPrioritized = AllocationStrategy' "capacityOptimizedPrioritized"
+
+pattern AllocationStrategy_Diversified :: AllocationStrategy
+pattern AllocationStrategy_Diversified = AllocationStrategy' "diversified"
+
+pattern AllocationStrategy_LowestPrice :: AllocationStrategy
+pattern AllocationStrategy_LowestPrice = AllocationStrategy' "lowestPrice"
+
+pattern AllocationStrategy_PriceCapacityOptimized :: AllocationStrategy
+pattern AllocationStrategy_PriceCapacityOptimized = AllocationStrategy' "priceCapacityOptimized"
+
+{-# COMPLETE
+  AllocationStrategy_CapacityOptimized,
+  AllocationStrategy_CapacityOptimizedPrioritized,
+  AllocationStrategy_Diversified,
+  AllocationStrategy_LowestPrice,
+  AllocationStrategy_PriceCapacityOptimized,
+  AllocationStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AllocationType.hs b/gen/Amazonka/EC2/Types/AllocationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AllocationType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AllocationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AllocationType
+  ( AllocationType
+      ( ..,
+        AllocationType_Used
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllocationType = AllocationType'
+  { fromAllocationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AllocationType_Used :: AllocationType
+pattern AllocationType_Used = AllocationType' "used"
+
+{-# COMPLETE
+  AllocationType_Used,
+  AllocationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AllowedPrincipal.hs b/gen/Amazonka/EC2/Types/AllowedPrincipal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AllowedPrincipal.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AllowedPrincipal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AllowedPrincipal where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PrincipalType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a principal.
+--
+-- /See:/ 'newAllowedPrincipal' smart constructor.
+data AllowedPrincipal = AllowedPrincipal'
+  { -- | The Amazon Resource Name (ARN) of the principal.
+    principal :: Prelude.Maybe Prelude.Text,
+    -- | The type of principal.
+    principalType :: Prelude.Maybe PrincipalType,
+    -- | The ID of the service.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the service permission.
+    servicePermissionId :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AllowedPrincipal' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'principal', 'allowedPrincipal_principal' - The Amazon Resource Name (ARN) of the principal.
+--
+-- 'principalType', 'allowedPrincipal_principalType' - The type of principal.
+--
+-- 'serviceId', 'allowedPrincipal_serviceId' - The ID of the service.
+--
+-- 'servicePermissionId', 'allowedPrincipal_servicePermissionId' - The ID of the service permission.
+--
+-- 'tags', 'allowedPrincipal_tags' - The tags.
+newAllowedPrincipal ::
+  AllowedPrincipal
+newAllowedPrincipal =
+  AllowedPrincipal'
+    { principal = Prelude.Nothing,
+      principalType = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      servicePermissionId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the principal.
+allowedPrincipal_principal :: Lens.Lens' AllowedPrincipal (Prelude.Maybe Prelude.Text)
+allowedPrincipal_principal = Lens.lens (\AllowedPrincipal' {principal} -> principal) (\s@AllowedPrincipal' {} a -> s {principal = a} :: AllowedPrincipal)
+
+-- | The type of principal.
+allowedPrincipal_principalType :: Lens.Lens' AllowedPrincipal (Prelude.Maybe PrincipalType)
+allowedPrincipal_principalType = Lens.lens (\AllowedPrincipal' {principalType} -> principalType) (\s@AllowedPrincipal' {} a -> s {principalType = a} :: AllowedPrincipal)
+
+-- | The ID of the service.
+allowedPrincipal_serviceId :: Lens.Lens' AllowedPrincipal (Prelude.Maybe Prelude.Text)
+allowedPrincipal_serviceId = Lens.lens (\AllowedPrincipal' {serviceId} -> serviceId) (\s@AllowedPrincipal' {} a -> s {serviceId = a} :: AllowedPrincipal)
+
+-- | The ID of the service permission.
+allowedPrincipal_servicePermissionId :: Lens.Lens' AllowedPrincipal (Prelude.Maybe Prelude.Text)
+allowedPrincipal_servicePermissionId = Lens.lens (\AllowedPrincipal' {servicePermissionId} -> servicePermissionId) (\s@AllowedPrincipal' {} a -> s {servicePermissionId = a} :: AllowedPrincipal)
+
+-- | The tags.
+allowedPrincipal_tags :: Lens.Lens' AllowedPrincipal (Prelude.Maybe [Tag])
+allowedPrincipal_tags = Lens.lens (\AllowedPrincipal' {tags} -> tags) (\s@AllowedPrincipal' {} a -> s {tags = a} :: AllowedPrincipal) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML AllowedPrincipal where
+  parseXML x =
+    AllowedPrincipal'
+      Prelude.<$> (x Data..@? "principal")
+      Prelude.<*> (x Data..@? "principalType")
+      Prelude.<*> (x Data..@? "serviceId")
+      Prelude.<*> (x Data..@? "servicePermissionId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable AllowedPrincipal where
+  hashWithSalt _salt AllowedPrincipal' {..} =
+    _salt
+      `Prelude.hashWithSalt` principal
+      `Prelude.hashWithSalt` principalType
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` servicePermissionId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData AllowedPrincipal where
+  rnf AllowedPrincipal' {..} =
+    Prelude.rnf principal
+      `Prelude.seq` Prelude.rnf principalType
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf servicePermissionId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/AllowsMultipleInstanceTypes.hs b/gen/Amazonka/EC2/Types/AllowsMultipleInstanceTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AllowsMultipleInstanceTypes.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AllowsMultipleInstanceTypes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AllowsMultipleInstanceTypes
+  ( AllowsMultipleInstanceTypes
+      ( ..,
+        AllowsMultipleInstanceTypes_Off,
+        AllowsMultipleInstanceTypes_On
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AllowsMultipleInstanceTypes = AllowsMultipleInstanceTypes'
+  { fromAllowsMultipleInstanceTypes ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AllowsMultipleInstanceTypes_Off :: AllowsMultipleInstanceTypes
+pattern AllowsMultipleInstanceTypes_Off = AllowsMultipleInstanceTypes' "off"
+
+pattern AllowsMultipleInstanceTypes_On :: AllowsMultipleInstanceTypes
+pattern AllowsMultipleInstanceTypes_On = AllowsMultipleInstanceTypes' "on"
+
+{-# COMPLETE
+  AllowsMultipleInstanceTypes_Off,
+  AllowsMultipleInstanceTypes_On,
+  AllowsMultipleInstanceTypes'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AlternatePathHint.hs b/gen/Amazonka/EC2/Types/AlternatePathHint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AlternatePathHint.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AlternatePathHint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AlternatePathHint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an potential intermediate component of a feasible path.
+--
+-- /See:/ 'newAlternatePathHint' smart constructor.
+data AlternatePathHint = AlternatePathHint'
+  { -- | The Amazon Resource Name (ARN) of the component.
+    componentArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the component.
+    componentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AlternatePathHint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentArn', 'alternatePathHint_componentArn' - The Amazon Resource Name (ARN) of the component.
+--
+-- 'componentId', 'alternatePathHint_componentId' - The ID of the component.
+newAlternatePathHint ::
+  AlternatePathHint
+newAlternatePathHint =
+  AlternatePathHint'
+    { componentArn = Prelude.Nothing,
+      componentId = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the component.
+alternatePathHint_componentArn :: Lens.Lens' AlternatePathHint (Prelude.Maybe Prelude.Text)
+alternatePathHint_componentArn = Lens.lens (\AlternatePathHint' {componentArn} -> componentArn) (\s@AlternatePathHint' {} a -> s {componentArn = a} :: AlternatePathHint)
+
+-- | The ID of the component.
+alternatePathHint_componentId :: Lens.Lens' AlternatePathHint (Prelude.Maybe Prelude.Text)
+alternatePathHint_componentId = Lens.lens (\AlternatePathHint' {componentId} -> componentId) (\s@AlternatePathHint' {} a -> s {componentId = a} :: AlternatePathHint)
+
+instance Data.FromXML AlternatePathHint where
+  parseXML x =
+    AlternatePathHint'
+      Prelude.<$> (x Data..@? "componentArn")
+      Prelude.<*> (x Data..@? "componentId")
+
+instance Prelude.Hashable AlternatePathHint where
+  hashWithSalt _salt AlternatePathHint' {..} =
+    _salt
+      `Prelude.hashWithSalt` componentArn
+      `Prelude.hashWithSalt` componentId
+
+instance Prelude.NFData AlternatePathHint where
+  rnf AlternatePathHint' {..} =
+    Prelude.rnf componentArn
+      `Prelude.seq` Prelude.rnf componentId
diff --git a/gen/Amazonka/EC2/Types/AnalysisAclRule.hs b/gen/Amazonka/EC2/Types/AnalysisAclRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisAclRule.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisAclRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisAclRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PortRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network access control (ACL) rule.
+--
+-- /See:/ 'newAnalysisAclRule' smart constructor.
+data AnalysisAclRule = AnalysisAclRule'
+  { -- | The IPv4 address range, in CIDR notation.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the rule is an outbound rule.
+    egress :: Prelude.Maybe Prelude.Bool,
+    -- | The range of ports.
+    portRange :: Prelude.Maybe PortRange,
+    -- | The protocol.
+    protocol :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to allow or deny traffic that matches the rule.
+    ruleAction :: Prelude.Maybe Prelude.Text,
+    -- | The rule number.
+    ruleNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisAclRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'analysisAclRule_cidr' - The IPv4 address range, in CIDR notation.
+--
+-- 'egress', 'analysisAclRule_egress' - Indicates whether the rule is an outbound rule.
+--
+-- 'portRange', 'analysisAclRule_portRange' - The range of ports.
+--
+-- 'protocol', 'analysisAclRule_protocol' - The protocol.
+--
+-- 'ruleAction', 'analysisAclRule_ruleAction' - Indicates whether to allow or deny traffic that matches the rule.
+--
+-- 'ruleNumber', 'analysisAclRule_ruleNumber' - The rule number.
+newAnalysisAclRule ::
+  AnalysisAclRule
+newAnalysisAclRule =
+  AnalysisAclRule'
+    { cidr = Prelude.Nothing,
+      egress = Prelude.Nothing,
+      portRange = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      ruleAction = Prelude.Nothing,
+      ruleNumber = Prelude.Nothing
+    }
+
+-- | The IPv4 address range, in CIDR notation.
+analysisAclRule_cidr :: Lens.Lens' AnalysisAclRule (Prelude.Maybe Prelude.Text)
+analysisAclRule_cidr = Lens.lens (\AnalysisAclRule' {cidr} -> cidr) (\s@AnalysisAclRule' {} a -> s {cidr = a} :: AnalysisAclRule)
+
+-- | Indicates whether the rule is an outbound rule.
+analysisAclRule_egress :: Lens.Lens' AnalysisAclRule (Prelude.Maybe Prelude.Bool)
+analysisAclRule_egress = Lens.lens (\AnalysisAclRule' {egress} -> egress) (\s@AnalysisAclRule' {} a -> s {egress = a} :: AnalysisAclRule)
+
+-- | The range of ports.
+analysisAclRule_portRange :: Lens.Lens' AnalysisAclRule (Prelude.Maybe PortRange)
+analysisAclRule_portRange = Lens.lens (\AnalysisAclRule' {portRange} -> portRange) (\s@AnalysisAclRule' {} a -> s {portRange = a} :: AnalysisAclRule)
+
+-- | The protocol.
+analysisAclRule_protocol :: Lens.Lens' AnalysisAclRule (Prelude.Maybe Prelude.Text)
+analysisAclRule_protocol = Lens.lens (\AnalysisAclRule' {protocol} -> protocol) (\s@AnalysisAclRule' {} a -> s {protocol = a} :: AnalysisAclRule)
+
+-- | Indicates whether to allow or deny traffic that matches the rule.
+analysisAclRule_ruleAction :: Lens.Lens' AnalysisAclRule (Prelude.Maybe Prelude.Text)
+analysisAclRule_ruleAction = Lens.lens (\AnalysisAclRule' {ruleAction} -> ruleAction) (\s@AnalysisAclRule' {} a -> s {ruleAction = a} :: AnalysisAclRule)
+
+-- | The rule number.
+analysisAclRule_ruleNumber :: Lens.Lens' AnalysisAclRule (Prelude.Maybe Prelude.Int)
+analysisAclRule_ruleNumber = Lens.lens (\AnalysisAclRule' {ruleNumber} -> ruleNumber) (\s@AnalysisAclRule' {} a -> s {ruleNumber = a} :: AnalysisAclRule)
+
+instance Data.FromXML AnalysisAclRule where
+  parseXML x =
+    AnalysisAclRule'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "egress")
+      Prelude.<*> (x Data..@? "portRange")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "ruleAction")
+      Prelude.<*> (x Data..@? "ruleNumber")
+
+instance Prelude.Hashable AnalysisAclRule where
+  hashWithSalt _salt AnalysisAclRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` egress
+      `Prelude.hashWithSalt` portRange
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` ruleNumber
+
+instance Prelude.NFData AnalysisAclRule where
+  rnf AnalysisAclRule' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf egress
+      `Prelude.seq` Prelude.rnf portRange
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf ruleNumber
diff --git a/gen/Amazonka/EC2/Types/AnalysisComponent.hs b/gen/Amazonka/EC2/Types/AnalysisComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisComponent.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisComponent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path component.
+--
+-- /See:/ 'newAnalysisComponent' smart constructor.
+data AnalysisComponent = AnalysisComponent'
+  { -- | The Amazon Resource Name (ARN) of the component.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the component.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the analysis component.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'analysisComponent_arn' - The Amazon Resource Name (ARN) of the component.
+--
+-- 'id', 'analysisComponent_id' - The ID of the component.
+--
+-- 'name', 'analysisComponent_name' - The name of the analysis component.
+newAnalysisComponent ::
+  AnalysisComponent
+newAnalysisComponent =
+  AnalysisComponent'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the component.
+analysisComponent_arn :: Lens.Lens' AnalysisComponent (Prelude.Maybe Prelude.Text)
+analysisComponent_arn = Lens.lens (\AnalysisComponent' {arn} -> arn) (\s@AnalysisComponent' {} a -> s {arn = a} :: AnalysisComponent)
+
+-- | The ID of the component.
+analysisComponent_id :: Lens.Lens' AnalysisComponent (Prelude.Maybe Prelude.Text)
+analysisComponent_id = Lens.lens (\AnalysisComponent' {id} -> id) (\s@AnalysisComponent' {} a -> s {id = a} :: AnalysisComponent)
+
+-- | The name of the analysis component.
+analysisComponent_name :: Lens.Lens' AnalysisComponent (Prelude.Maybe Prelude.Text)
+analysisComponent_name = Lens.lens (\AnalysisComponent' {name} -> name) (\s@AnalysisComponent' {} a -> s {name = a} :: AnalysisComponent)
+
+instance Data.FromXML AnalysisComponent where
+  parseXML x =
+    AnalysisComponent'
+      Prelude.<$> (x Data..@? "arn")
+      Prelude.<*> (x Data..@? "id")
+      Prelude.<*> (x Data..@? "name")
+
+instance Prelude.Hashable AnalysisComponent where
+  hashWithSalt _salt AnalysisComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData AnalysisComponent where
+  rnf AnalysisComponent' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/EC2/Types/AnalysisLoadBalancerListener.hs b/gen/Amazonka/EC2/Types/AnalysisLoadBalancerListener.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisLoadBalancerListener.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisLoadBalancerListener
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisLoadBalancerListener where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load balancer listener.
+--
+-- /See:/ 'newAnalysisLoadBalancerListener' smart constructor.
+data AnalysisLoadBalancerListener = AnalysisLoadBalancerListener'
+  { -- | [Classic Load Balancers] The back-end port for the listener.
+    instancePort :: Prelude.Maybe Prelude.Natural,
+    -- | The port on which the load balancer is listening.
+    loadBalancerPort :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisLoadBalancerListener' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instancePort', 'analysisLoadBalancerListener_instancePort' - [Classic Load Balancers] The back-end port for the listener.
+--
+-- 'loadBalancerPort', 'analysisLoadBalancerListener_loadBalancerPort' - The port on which the load balancer is listening.
+newAnalysisLoadBalancerListener ::
+  AnalysisLoadBalancerListener
+newAnalysisLoadBalancerListener =
+  AnalysisLoadBalancerListener'
+    { instancePort =
+        Prelude.Nothing,
+      loadBalancerPort = Prelude.Nothing
+    }
+
+-- | [Classic Load Balancers] The back-end port for the listener.
+analysisLoadBalancerListener_instancePort :: Lens.Lens' AnalysisLoadBalancerListener (Prelude.Maybe Prelude.Natural)
+analysisLoadBalancerListener_instancePort = Lens.lens (\AnalysisLoadBalancerListener' {instancePort} -> instancePort) (\s@AnalysisLoadBalancerListener' {} a -> s {instancePort = a} :: AnalysisLoadBalancerListener)
+
+-- | The port on which the load balancer is listening.
+analysisLoadBalancerListener_loadBalancerPort :: Lens.Lens' AnalysisLoadBalancerListener (Prelude.Maybe Prelude.Natural)
+analysisLoadBalancerListener_loadBalancerPort = Lens.lens (\AnalysisLoadBalancerListener' {loadBalancerPort} -> loadBalancerPort) (\s@AnalysisLoadBalancerListener' {} a -> s {loadBalancerPort = a} :: AnalysisLoadBalancerListener)
+
+instance Data.FromXML AnalysisLoadBalancerListener where
+  parseXML x =
+    AnalysisLoadBalancerListener'
+      Prelude.<$> (x Data..@? "instancePort")
+      Prelude.<*> (x Data..@? "loadBalancerPort")
+
+instance
+  Prelude.Hashable
+    AnalysisLoadBalancerListener
+  where
+  hashWithSalt _salt AnalysisLoadBalancerListener' {..} =
+    _salt
+      `Prelude.hashWithSalt` instancePort
+      `Prelude.hashWithSalt` loadBalancerPort
+
+instance Prelude.NFData AnalysisLoadBalancerListener where
+  rnf AnalysisLoadBalancerListener' {..} =
+    Prelude.rnf instancePort
+      `Prelude.seq` Prelude.rnf loadBalancerPort
diff --git a/gen/Amazonka/EC2/Types/AnalysisLoadBalancerTarget.hs b/gen/Amazonka/EC2/Types/AnalysisLoadBalancerTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisLoadBalancerTarget.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisLoadBalancerTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisLoadBalancerTarget where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AnalysisComponent
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load balancer target.
+--
+-- /See:/ 'newAnalysisLoadBalancerTarget' smart constructor.
+data AnalysisLoadBalancerTarget = AnalysisLoadBalancerTarget'
+  { -- | The IP address.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Information about the instance.
+    instance' :: Prelude.Maybe AnalysisComponent,
+    -- | The port on which the target is listening.
+    port :: Prelude.Maybe Prelude.Natural
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisLoadBalancerTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'analysisLoadBalancerTarget_address' - The IP address.
+--
+-- 'availabilityZone', 'analysisLoadBalancerTarget_availabilityZone' - The Availability Zone.
+--
+-- 'instance'', 'analysisLoadBalancerTarget_instance' - Information about the instance.
+--
+-- 'port', 'analysisLoadBalancerTarget_port' - The port on which the target is listening.
+newAnalysisLoadBalancerTarget ::
+  AnalysisLoadBalancerTarget
+newAnalysisLoadBalancerTarget =
+  AnalysisLoadBalancerTarget'
+    { address =
+        Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      instance' = Prelude.Nothing,
+      port = Prelude.Nothing
+    }
+
+-- | The IP address.
+analysisLoadBalancerTarget_address :: Lens.Lens' AnalysisLoadBalancerTarget (Prelude.Maybe Prelude.Text)
+analysisLoadBalancerTarget_address = Lens.lens (\AnalysisLoadBalancerTarget' {address} -> address) (\s@AnalysisLoadBalancerTarget' {} a -> s {address = a} :: AnalysisLoadBalancerTarget)
+
+-- | The Availability Zone.
+analysisLoadBalancerTarget_availabilityZone :: Lens.Lens' AnalysisLoadBalancerTarget (Prelude.Maybe Prelude.Text)
+analysisLoadBalancerTarget_availabilityZone = Lens.lens (\AnalysisLoadBalancerTarget' {availabilityZone} -> availabilityZone) (\s@AnalysisLoadBalancerTarget' {} a -> s {availabilityZone = a} :: AnalysisLoadBalancerTarget)
+
+-- | Information about the instance.
+analysisLoadBalancerTarget_instance :: Lens.Lens' AnalysisLoadBalancerTarget (Prelude.Maybe AnalysisComponent)
+analysisLoadBalancerTarget_instance = Lens.lens (\AnalysisLoadBalancerTarget' {instance'} -> instance') (\s@AnalysisLoadBalancerTarget' {} a -> s {instance' = a} :: AnalysisLoadBalancerTarget)
+
+-- | The port on which the target is listening.
+analysisLoadBalancerTarget_port :: Lens.Lens' AnalysisLoadBalancerTarget (Prelude.Maybe Prelude.Natural)
+analysisLoadBalancerTarget_port = Lens.lens (\AnalysisLoadBalancerTarget' {port} -> port) (\s@AnalysisLoadBalancerTarget' {} a -> s {port = a} :: AnalysisLoadBalancerTarget)
+
+instance Data.FromXML AnalysisLoadBalancerTarget where
+  parseXML x =
+    AnalysisLoadBalancerTarget'
+      Prelude.<$> (x Data..@? "address")
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "instance")
+      Prelude.<*> (x Data..@? "port")
+
+instance Prelude.Hashable AnalysisLoadBalancerTarget where
+  hashWithSalt _salt AnalysisLoadBalancerTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` instance'
+      `Prelude.hashWithSalt` port
+
+instance Prelude.NFData AnalysisLoadBalancerTarget where
+  rnf AnalysisLoadBalancerTarget' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf instance'
+      `Prelude.seq` Prelude.rnf port
diff --git a/gen/Amazonka/EC2/Types/AnalysisPacketHeader.hs b/gen/Amazonka/EC2/Types/AnalysisPacketHeader.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisPacketHeader.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisPacketHeader
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisPacketHeader where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PortRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a header. Reflects any changes made by a component as traffic
+-- passes through. The fields of an inbound header are null except for the
+-- first component of a path.
+--
+-- /See:/ 'newAnalysisPacketHeader' smart constructor.
+data AnalysisPacketHeader = AnalysisPacketHeader'
+  { -- | The destination addresses.
+    destinationAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The destination port ranges.
+    destinationPortRanges :: Prelude.Maybe [PortRange],
+    -- | The protocol.
+    protocol :: Prelude.Maybe Prelude.Text,
+    -- | The source addresses.
+    sourceAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The source port ranges.
+    sourcePortRanges :: Prelude.Maybe [PortRange]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisPacketHeader' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationAddresses', 'analysisPacketHeader_destinationAddresses' - The destination addresses.
+--
+-- 'destinationPortRanges', 'analysisPacketHeader_destinationPortRanges' - The destination port ranges.
+--
+-- 'protocol', 'analysisPacketHeader_protocol' - The protocol.
+--
+-- 'sourceAddresses', 'analysisPacketHeader_sourceAddresses' - The source addresses.
+--
+-- 'sourcePortRanges', 'analysisPacketHeader_sourcePortRanges' - The source port ranges.
+newAnalysisPacketHeader ::
+  AnalysisPacketHeader
+newAnalysisPacketHeader =
+  AnalysisPacketHeader'
+    { destinationAddresses =
+        Prelude.Nothing,
+      destinationPortRanges = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      sourceAddresses = Prelude.Nothing,
+      sourcePortRanges = Prelude.Nothing
+    }
+
+-- | The destination addresses.
+analysisPacketHeader_destinationAddresses :: Lens.Lens' AnalysisPacketHeader (Prelude.Maybe [Prelude.Text])
+analysisPacketHeader_destinationAddresses = Lens.lens (\AnalysisPacketHeader' {destinationAddresses} -> destinationAddresses) (\s@AnalysisPacketHeader' {} a -> s {destinationAddresses = a} :: AnalysisPacketHeader) Prelude.. Lens.mapping Lens.coerced
+
+-- | The destination port ranges.
+analysisPacketHeader_destinationPortRanges :: Lens.Lens' AnalysisPacketHeader (Prelude.Maybe [PortRange])
+analysisPacketHeader_destinationPortRanges = Lens.lens (\AnalysisPacketHeader' {destinationPortRanges} -> destinationPortRanges) (\s@AnalysisPacketHeader' {} a -> s {destinationPortRanges = a} :: AnalysisPacketHeader) Prelude.. Lens.mapping Lens.coerced
+
+-- | The protocol.
+analysisPacketHeader_protocol :: Lens.Lens' AnalysisPacketHeader (Prelude.Maybe Prelude.Text)
+analysisPacketHeader_protocol = Lens.lens (\AnalysisPacketHeader' {protocol} -> protocol) (\s@AnalysisPacketHeader' {} a -> s {protocol = a} :: AnalysisPacketHeader)
+
+-- | The source addresses.
+analysisPacketHeader_sourceAddresses :: Lens.Lens' AnalysisPacketHeader (Prelude.Maybe [Prelude.Text])
+analysisPacketHeader_sourceAddresses = Lens.lens (\AnalysisPacketHeader' {sourceAddresses} -> sourceAddresses) (\s@AnalysisPacketHeader' {} a -> s {sourceAddresses = a} :: AnalysisPacketHeader) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source port ranges.
+analysisPacketHeader_sourcePortRanges :: Lens.Lens' AnalysisPacketHeader (Prelude.Maybe [PortRange])
+analysisPacketHeader_sourcePortRanges = Lens.lens (\AnalysisPacketHeader' {sourcePortRanges} -> sourcePortRanges) (\s@AnalysisPacketHeader' {} a -> s {sourcePortRanges = a} :: AnalysisPacketHeader) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML AnalysisPacketHeader where
+  parseXML x =
+    AnalysisPacketHeader'
+      Prelude.<$> ( x
+                      Data..@? "destinationAddressSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "destinationPortRangeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> ( x
+                      Data..@? "sourceAddressSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "sourcePortRangeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable AnalysisPacketHeader where
+  hashWithSalt _salt AnalysisPacketHeader' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationAddresses
+      `Prelude.hashWithSalt` destinationPortRanges
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` sourceAddresses
+      `Prelude.hashWithSalt` sourcePortRanges
+
+instance Prelude.NFData AnalysisPacketHeader where
+  rnf AnalysisPacketHeader' {..} =
+    Prelude.rnf destinationAddresses
+      `Prelude.seq` Prelude.rnf destinationPortRanges
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf sourceAddresses
+      `Prelude.seq` Prelude.rnf sourcePortRanges
diff --git a/gen/Amazonka/EC2/Types/AnalysisRouteTableRoute.hs b/gen/Amazonka/EC2/Types/AnalysisRouteTableRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisRouteTableRoute.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisRouteTableRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisRouteTableRoute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route table route.
+--
+-- /See:/ 'newAnalysisRouteTableRoute' smart constructor.
+data AnalysisRouteTableRoute = AnalysisRouteTableRoute'
+  { -- | The destination IPv4 address, in CIDR notation.
+    destinationCidr :: Prelude.Maybe Prelude.Text,
+    -- | The prefix of the Amazon Web Service.
+    destinationPrefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an egress-only internet gateway.
+    egressOnlyInternetGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the gateway, such as an internet gateway or virtual private
+    -- gateway.
+    gatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance, such as a NAT instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a NAT gateway.
+    natGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | Describes how the route was created. The following are the possible
+    -- values:
+    --
+    -- -   CreateRouteTable - The route was automatically created when the
+    --     route table was created.
+    --
+    -- -   CreateRoute - The route was manually added to the route table.
+    --
+    -- -   EnableVgwRoutePropagation - The route was propagated by route
+    --     propagation.
+    origin :: Prelude.Maybe Prelude.Text,
+    -- | The state. The following are the possible values:
+    --
+    -- -   active
+    --
+    -- -   blackhole
+    state :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisRouteTableRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidr', 'analysisRouteTableRoute_destinationCidr' - The destination IPv4 address, in CIDR notation.
+--
+-- 'destinationPrefixListId', 'analysisRouteTableRoute_destinationPrefixListId' - The prefix of the Amazon Web Service.
+--
+-- 'egressOnlyInternetGatewayId', 'analysisRouteTableRoute_egressOnlyInternetGatewayId' - The ID of an egress-only internet gateway.
+--
+-- 'gatewayId', 'analysisRouteTableRoute_gatewayId' - The ID of the gateway, such as an internet gateway or virtual private
+-- gateway.
+--
+-- 'instanceId', 'analysisRouteTableRoute_instanceId' - The ID of the instance, such as a NAT instance.
+--
+-- 'natGatewayId', 'analysisRouteTableRoute_natGatewayId' - The ID of a NAT gateway.
+--
+-- 'networkInterfaceId', 'analysisRouteTableRoute_networkInterfaceId' - The ID of a network interface.
+--
+-- 'origin', 'analysisRouteTableRoute_origin' - Describes how the route was created. The following are the possible
+-- values:
+--
+-- -   CreateRouteTable - The route was automatically created when the
+--     route table was created.
+--
+-- -   CreateRoute - The route was manually added to the route table.
+--
+-- -   EnableVgwRoutePropagation - The route was propagated by route
+--     propagation.
+--
+-- 'state', 'analysisRouteTableRoute_state' - The state. The following are the possible values:
+--
+-- -   active
+--
+-- -   blackhole
+--
+-- 'transitGatewayId', 'analysisRouteTableRoute_transitGatewayId' - The ID of a transit gateway.
+--
+-- 'vpcPeeringConnectionId', 'analysisRouteTableRoute_vpcPeeringConnectionId' - The ID of a VPC peering connection.
+newAnalysisRouteTableRoute ::
+  AnalysisRouteTableRoute
+newAnalysisRouteTableRoute =
+  AnalysisRouteTableRoute'
+    { destinationCidr =
+        Prelude.Nothing,
+      destinationPrefixListId = Prelude.Nothing,
+      egressOnlyInternetGatewayId = Prelude.Nothing,
+      gatewayId = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      natGatewayId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | The destination IPv4 address, in CIDR notation.
+analysisRouteTableRoute_destinationCidr :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_destinationCidr = Lens.lens (\AnalysisRouteTableRoute' {destinationCidr} -> destinationCidr) (\s@AnalysisRouteTableRoute' {} a -> s {destinationCidr = a} :: AnalysisRouteTableRoute)
+
+-- | The prefix of the Amazon Web Service.
+analysisRouteTableRoute_destinationPrefixListId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_destinationPrefixListId = Lens.lens (\AnalysisRouteTableRoute' {destinationPrefixListId} -> destinationPrefixListId) (\s@AnalysisRouteTableRoute' {} a -> s {destinationPrefixListId = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of an egress-only internet gateway.
+analysisRouteTableRoute_egressOnlyInternetGatewayId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_egressOnlyInternetGatewayId = Lens.lens (\AnalysisRouteTableRoute' {egressOnlyInternetGatewayId} -> egressOnlyInternetGatewayId) (\s@AnalysisRouteTableRoute' {} a -> s {egressOnlyInternetGatewayId = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of the gateway, such as an internet gateway or virtual private
+-- gateway.
+analysisRouteTableRoute_gatewayId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_gatewayId = Lens.lens (\AnalysisRouteTableRoute' {gatewayId} -> gatewayId) (\s@AnalysisRouteTableRoute' {} a -> s {gatewayId = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of the instance, such as a NAT instance.
+analysisRouteTableRoute_instanceId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_instanceId = Lens.lens (\AnalysisRouteTableRoute' {instanceId} -> instanceId) (\s@AnalysisRouteTableRoute' {} a -> s {instanceId = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of a NAT gateway.
+analysisRouteTableRoute_natGatewayId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_natGatewayId = Lens.lens (\AnalysisRouteTableRoute' {natGatewayId} -> natGatewayId) (\s@AnalysisRouteTableRoute' {} a -> s {natGatewayId = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of a network interface.
+analysisRouteTableRoute_networkInterfaceId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_networkInterfaceId = Lens.lens (\AnalysisRouteTableRoute' {networkInterfaceId} -> networkInterfaceId) (\s@AnalysisRouteTableRoute' {} a -> s {networkInterfaceId = a} :: AnalysisRouteTableRoute)
+
+-- | Describes how the route was created. The following are the possible
+-- values:
+--
+-- -   CreateRouteTable - The route was automatically created when the
+--     route table was created.
+--
+-- -   CreateRoute - The route was manually added to the route table.
+--
+-- -   EnableVgwRoutePropagation - The route was propagated by route
+--     propagation.
+analysisRouteTableRoute_origin :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_origin = Lens.lens (\AnalysisRouteTableRoute' {origin} -> origin) (\s@AnalysisRouteTableRoute' {} a -> s {origin = a} :: AnalysisRouteTableRoute)
+
+-- | The state. The following are the possible values:
+--
+-- -   active
+--
+-- -   blackhole
+analysisRouteTableRoute_state :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_state = Lens.lens (\AnalysisRouteTableRoute' {state} -> state) (\s@AnalysisRouteTableRoute' {} a -> s {state = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of a transit gateway.
+analysisRouteTableRoute_transitGatewayId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_transitGatewayId = Lens.lens (\AnalysisRouteTableRoute' {transitGatewayId} -> transitGatewayId) (\s@AnalysisRouteTableRoute' {} a -> s {transitGatewayId = a} :: AnalysisRouteTableRoute)
+
+-- | The ID of a VPC peering connection.
+analysisRouteTableRoute_vpcPeeringConnectionId :: Lens.Lens' AnalysisRouteTableRoute (Prelude.Maybe Prelude.Text)
+analysisRouteTableRoute_vpcPeeringConnectionId = Lens.lens (\AnalysisRouteTableRoute' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@AnalysisRouteTableRoute' {} a -> s {vpcPeeringConnectionId = a} :: AnalysisRouteTableRoute)
+
+instance Data.FromXML AnalysisRouteTableRoute where
+  parseXML x =
+    AnalysisRouteTableRoute'
+      Prelude.<$> (x Data..@? "destinationCidr")
+      Prelude.<*> (x Data..@? "destinationPrefixListId")
+      Prelude.<*> (x Data..@? "egressOnlyInternetGatewayId")
+      Prelude.<*> (x Data..@? "gatewayId")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "natGatewayId")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "origin")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "vpcPeeringConnectionId")
+
+instance Prelude.Hashable AnalysisRouteTableRoute where
+  hashWithSalt _salt AnalysisRouteTableRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidr
+      `Prelude.hashWithSalt` destinationPrefixListId
+      `Prelude.hashWithSalt` egressOnlyInternetGatewayId
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` natGatewayId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` origin
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData AnalysisRouteTableRoute where
+  rnf AnalysisRouteTableRoute' {..} =
+    Prelude.rnf destinationCidr
+      `Prelude.seq` Prelude.rnf destinationPrefixListId
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayId
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf natGatewayId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
diff --git a/gen/Amazonka/EC2/Types/AnalysisSecurityGroupRule.hs b/gen/Amazonka/EC2/Types/AnalysisSecurityGroupRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisSecurityGroupRule.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisSecurityGroupRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisSecurityGroupRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PortRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group rule.
+--
+-- /See:/ 'newAnalysisSecurityGroupRule' smart constructor.
+data AnalysisSecurityGroupRule = AnalysisSecurityGroupRule'
+  { -- | The IPv4 address range, in CIDR notation.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | The direction. The following are the possible values:
+    --
+    -- -   egress
+    --
+    -- -   ingress
+    direction :: Prelude.Maybe Prelude.Text,
+    -- | The port range.
+    portRange :: Prelude.Maybe PortRange,
+    -- | The prefix list ID.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The protocol name.
+    protocol :: Prelude.Maybe Prelude.Text,
+    -- | The security group ID.
+    securityGroupId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AnalysisSecurityGroupRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'analysisSecurityGroupRule_cidr' - The IPv4 address range, in CIDR notation.
+--
+-- 'direction', 'analysisSecurityGroupRule_direction' - The direction. The following are the possible values:
+--
+-- -   egress
+--
+-- -   ingress
+--
+-- 'portRange', 'analysisSecurityGroupRule_portRange' - The port range.
+--
+-- 'prefixListId', 'analysisSecurityGroupRule_prefixListId' - The prefix list ID.
+--
+-- 'protocol', 'analysisSecurityGroupRule_protocol' - The protocol name.
+--
+-- 'securityGroupId', 'analysisSecurityGroupRule_securityGroupId' - The security group ID.
+newAnalysisSecurityGroupRule ::
+  AnalysisSecurityGroupRule
+newAnalysisSecurityGroupRule =
+  AnalysisSecurityGroupRule'
+    { cidr = Prelude.Nothing,
+      direction = Prelude.Nothing,
+      portRange = Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      securityGroupId = Prelude.Nothing
+    }
+
+-- | The IPv4 address range, in CIDR notation.
+analysisSecurityGroupRule_cidr :: Lens.Lens' AnalysisSecurityGroupRule (Prelude.Maybe Prelude.Text)
+analysisSecurityGroupRule_cidr = Lens.lens (\AnalysisSecurityGroupRule' {cidr} -> cidr) (\s@AnalysisSecurityGroupRule' {} a -> s {cidr = a} :: AnalysisSecurityGroupRule)
+
+-- | The direction. The following are the possible values:
+--
+-- -   egress
+--
+-- -   ingress
+analysisSecurityGroupRule_direction :: Lens.Lens' AnalysisSecurityGroupRule (Prelude.Maybe Prelude.Text)
+analysisSecurityGroupRule_direction = Lens.lens (\AnalysisSecurityGroupRule' {direction} -> direction) (\s@AnalysisSecurityGroupRule' {} a -> s {direction = a} :: AnalysisSecurityGroupRule)
+
+-- | The port range.
+analysisSecurityGroupRule_portRange :: Lens.Lens' AnalysisSecurityGroupRule (Prelude.Maybe PortRange)
+analysisSecurityGroupRule_portRange = Lens.lens (\AnalysisSecurityGroupRule' {portRange} -> portRange) (\s@AnalysisSecurityGroupRule' {} a -> s {portRange = a} :: AnalysisSecurityGroupRule)
+
+-- | The prefix list ID.
+analysisSecurityGroupRule_prefixListId :: Lens.Lens' AnalysisSecurityGroupRule (Prelude.Maybe Prelude.Text)
+analysisSecurityGroupRule_prefixListId = Lens.lens (\AnalysisSecurityGroupRule' {prefixListId} -> prefixListId) (\s@AnalysisSecurityGroupRule' {} a -> s {prefixListId = a} :: AnalysisSecurityGroupRule)
+
+-- | The protocol name.
+analysisSecurityGroupRule_protocol :: Lens.Lens' AnalysisSecurityGroupRule (Prelude.Maybe Prelude.Text)
+analysisSecurityGroupRule_protocol = Lens.lens (\AnalysisSecurityGroupRule' {protocol} -> protocol) (\s@AnalysisSecurityGroupRule' {} a -> s {protocol = a} :: AnalysisSecurityGroupRule)
+
+-- | The security group ID.
+analysisSecurityGroupRule_securityGroupId :: Lens.Lens' AnalysisSecurityGroupRule (Prelude.Maybe Prelude.Text)
+analysisSecurityGroupRule_securityGroupId = Lens.lens (\AnalysisSecurityGroupRule' {securityGroupId} -> securityGroupId) (\s@AnalysisSecurityGroupRule' {} a -> s {securityGroupId = a} :: AnalysisSecurityGroupRule)
+
+instance Data.FromXML AnalysisSecurityGroupRule where
+  parseXML x =
+    AnalysisSecurityGroupRule'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "direction")
+      Prelude.<*> (x Data..@? "portRange")
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "securityGroupId")
+
+instance Prelude.Hashable AnalysisSecurityGroupRule where
+  hashWithSalt _salt AnalysisSecurityGroupRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` direction
+      `Prelude.hashWithSalt` portRange
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` securityGroupId
+
+instance Prelude.NFData AnalysisSecurityGroupRule where
+  rnf AnalysisSecurityGroupRule' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf direction
+      `Prelude.seq` Prelude.rnf portRange
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf securityGroupId
diff --git a/gen/Amazonka/EC2/Types/AnalysisStatus.hs b/gen/Amazonka/EC2/Types/AnalysisStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AnalysisStatus.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AnalysisStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AnalysisStatus
+  ( AnalysisStatus
+      ( ..,
+        AnalysisStatus_Failed,
+        AnalysisStatus_Running,
+        AnalysisStatus_Succeeded
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AnalysisStatus = AnalysisStatus'
+  { fromAnalysisStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AnalysisStatus_Failed :: AnalysisStatus
+pattern AnalysisStatus_Failed = AnalysisStatus' "failed"
+
+pattern AnalysisStatus_Running :: AnalysisStatus
+pattern AnalysisStatus_Running = AnalysisStatus' "running"
+
+pattern AnalysisStatus_Succeeded :: AnalysisStatus
+pattern AnalysisStatus_Succeeded = AnalysisStatus' "succeeded"
+
+{-# COMPLETE
+  AnalysisStatus_Failed,
+  AnalysisStatus_Running,
+  AnalysisStatus_Succeeded,
+  AnalysisStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ApplianceModeSupportValue.hs b/gen/Amazonka/EC2/Types/ApplianceModeSupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ApplianceModeSupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ApplianceModeSupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ApplianceModeSupportValue
+  ( ApplianceModeSupportValue
+      ( ..,
+        ApplianceModeSupportValue_Disable,
+        ApplianceModeSupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplianceModeSupportValue = ApplianceModeSupportValue'
+  { fromApplianceModeSupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ApplianceModeSupportValue_Disable :: ApplianceModeSupportValue
+pattern ApplianceModeSupportValue_Disable = ApplianceModeSupportValue' "disable"
+
+pattern ApplianceModeSupportValue_Enable :: ApplianceModeSupportValue
+pattern ApplianceModeSupportValue_Enable = ApplianceModeSupportValue' "enable"
+
+{-# COMPLETE
+  ApplianceModeSupportValue_Disable,
+  ApplianceModeSupportValue_Enable,
+  ApplianceModeSupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ArchitectureType.hs b/gen/Amazonka/EC2/Types/ArchitectureType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ArchitectureType.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ArchitectureType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ArchitectureType
+  ( ArchitectureType
+      ( ..,
+        ArchitectureType_Arm64,
+        ArchitectureType_Arm64_mac,
+        ArchitectureType_I386,
+        ArchitectureType_X86_64,
+        ArchitectureType_X86_64_mac
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ArchitectureType = ArchitectureType'
+  { fromArchitectureType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ArchitectureType_Arm64 :: ArchitectureType
+pattern ArchitectureType_Arm64 = ArchitectureType' "arm64"
+
+pattern ArchitectureType_Arm64_mac :: ArchitectureType
+pattern ArchitectureType_Arm64_mac = ArchitectureType' "arm64_mac"
+
+pattern ArchitectureType_I386 :: ArchitectureType
+pattern ArchitectureType_I386 = ArchitectureType' "i386"
+
+pattern ArchitectureType_X86_64 :: ArchitectureType
+pattern ArchitectureType_X86_64 = ArchitectureType' "x86_64"
+
+pattern ArchitectureType_X86_64_mac :: ArchitectureType
+pattern ArchitectureType_X86_64_mac = ArchitectureType' "x86_64_mac"
+
+{-# COMPLETE
+  ArchitectureType_Arm64,
+  ArchitectureType_Arm64_mac,
+  ArchitectureType_I386,
+  ArchitectureType_X86_64,
+  ArchitectureType_X86_64_mac,
+  ArchitectureType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ArchitectureValues.hs b/gen/Amazonka/EC2/Types/ArchitectureValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ArchitectureValues.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ArchitectureValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ArchitectureValues
+  ( ArchitectureValues
+      ( ..,
+        ArchitectureValues_Arm64,
+        ArchitectureValues_Arm64_mac,
+        ArchitectureValues_I386,
+        ArchitectureValues_X86_64,
+        ArchitectureValues_X86_64_mac
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ArchitectureValues = ArchitectureValues'
+  { fromArchitectureValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ArchitectureValues_Arm64 :: ArchitectureValues
+pattern ArchitectureValues_Arm64 = ArchitectureValues' "arm64"
+
+pattern ArchitectureValues_Arm64_mac :: ArchitectureValues
+pattern ArchitectureValues_Arm64_mac = ArchitectureValues' "arm64_mac"
+
+pattern ArchitectureValues_I386 :: ArchitectureValues
+pattern ArchitectureValues_I386 = ArchitectureValues' "i386"
+
+pattern ArchitectureValues_X86_64 :: ArchitectureValues
+pattern ArchitectureValues_X86_64 = ArchitectureValues' "x86_64"
+
+pattern ArchitectureValues_X86_64_mac :: ArchitectureValues
+pattern ArchitectureValues_X86_64_mac = ArchitectureValues' "x86_64_mac"
+
+{-# COMPLETE
+  ArchitectureValues_Arm64,
+  ArchitectureValues_Arm64_mac,
+  ArchitectureValues_I386,
+  ArchitectureValues_X86_64,
+  ArchitectureValues_X86_64_mac,
+  ArchitectureValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AssignedPrivateIpAddress.hs b/gen/Amazonka/EC2/Types/AssignedPrivateIpAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AssignedPrivateIpAddress.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AssignedPrivateIpAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AssignedPrivateIpAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the private IP addresses assigned to a network interface.
+--
+-- /See:/ 'newAssignedPrivateIpAddress' smart constructor.
+data AssignedPrivateIpAddress = AssignedPrivateIpAddress'
+  { -- | The private IP address assigned to the network interface.
+    privateIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssignedPrivateIpAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'privateIpAddress', 'assignedPrivateIpAddress_privateIpAddress' - The private IP address assigned to the network interface.
+newAssignedPrivateIpAddress ::
+  AssignedPrivateIpAddress
+newAssignedPrivateIpAddress =
+  AssignedPrivateIpAddress'
+    { privateIpAddress =
+        Prelude.Nothing
+    }
+
+-- | The private IP address assigned to the network interface.
+assignedPrivateIpAddress_privateIpAddress :: Lens.Lens' AssignedPrivateIpAddress (Prelude.Maybe Prelude.Text)
+assignedPrivateIpAddress_privateIpAddress = Lens.lens (\AssignedPrivateIpAddress' {privateIpAddress} -> privateIpAddress) (\s@AssignedPrivateIpAddress' {} a -> s {privateIpAddress = a} :: AssignedPrivateIpAddress)
+
+instance Data.FromXML AssignedPrivateIpAddress where
+  parseXML x =
+    AssignedPrivateIpAddress'
+      Prelude.<$> (x Data..@? "privateIpAddress")
+
+instance Prelude.Hashable AssignedPrivateIpAddress where
+  hashWithSalt _salt AssignedPrivateIpAddress' {..} =
+    _salt `Prelude.hashWithSalt` privateIpAddress
+
+instance Prelude.NFData AssignedPrivateIpAddress where
+  rnf AssignedPrivateIpAddress' {..} =
+    Prelude.rnf privateIpAddress
diff --git a/gen/Amazonka/EC2/Types/AssociatedNetworkType.hs b/gen/Amazonka/EC2/Types/AssociatedNetworkType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AssociatedNetworkType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AssociatedNetworkType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AssociatedNetworkType
+  ( AssociatedNetworkType
+      ( ..,
+        AssociatedNetworkType_Vpc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssociatedNetworkType = AssociatedNetworkType'
+  { fromAssociatedNetworkType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AssociatedNetworkType_Vpc :: AssociatedNetworkType
+pattern AssociatedNetworkType_Vpc = AssociatedNetworkType' "vpc"
+
+{-# COMPLETE
+  AssociatedNetworkType_Vpc,
+  AssociatedNetworkType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AssociatedRole.hs b/gen/Amazonka/EC2/Types/AssociatedRole.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AssociatedRole.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AssociatedRole
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AssociatedRole where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the associated IAM roles.
+--
+-- /See:/ 'newAssociatedRole' smart constructor.
+data AssociatedRole = AssociatedRole'
+  { -- | The ARN of the associated IAM role.
+    associatedRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon S3 bucket in which the Amazon S3 object is
+    -- stored.
+    certificateS3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The key of the Amazon S3 object ey where the certificate, certificate
+    -- chain, and encrypted private key bundle is stored. The object key is
+    -- formated as follows: @role_arn@\/@certificate_arn@.
+    certificateS3ObjectKey :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the KMS customer master key (CMK) used to encrypt the private
+    -- key.
+    encryptionKmsKeyId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociatedRole' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedRoleArn', 'associatedRole_associatedRoleArn' - The ARN of the associated IAM role.
+--
+-- 'certificateS3BucketName', 'associatedRole_certificateS3BucketName' - The name of the Amazon S3 bucket in which the Amazon S3 object is
+-- stored.
+--
+-- 'certificateS3ObjectKey', 'associatedRole_certificateS3ObjectKey' - The key of the Amazon S3 object ey where the certificate, certificate
+-- chain, and encrypted private key bundle is stored. The object key is
+-- formated as follows: @role_arn@\/@certificate_arn@.
+--
+-- 'encryptionKmsKeyId', 'associatedRole_encryptionKmsKeyId' - The ID of the KMS customer master key (CMK) used to encrypt the private
+-- key.
+newAssociatedRole ::
+  AssociatedRole
+newAssociatedRole =
+  AssociatedRole'
+    { associatedRoleArn =
+        Prelude.Nothing,
+      certificateS3BucketName = Prelude.Nothing,
+      certificateS3ObjectKey = Prelude.Nothing,
+      encryptionKmsKeyId = Prelude.Nothing
+    }
+
+-- | The ARN of the associated IAM role.
+associatedRole_associatedRoleArn :: Lens.Lens' AssociatedRole (Prelude.Maybe Prelude.Text)
+associatedRole_associatedRoleArn = Lens.lens (\AssociatedRole' {associatedRoleArn} -> associatedRoleArn) (\s@AssociatedRole' {} a -> s {associatedRoleArn = a} :: AssociatedRole)
+
+-- | The name of the Amazon S3 bucket in which the Amazon S3 object is
+-- stored.
+associatedRole_certificateS3BucketName :: Lens.Lens' AssociatedRole (Prelude.Maybe Prelude.Text)
+associatedRole_certificateS3BucketName = Lens.lens (\AssociatedRole' {certificateS3BucketName} -> certificateS3BucketName) (\s@AssociatedRole' {} a -> s {certificateS3BucketName = a} :: AssociatedRole)
+
+-- | The key of the Amazon S3 object ey where the certificate, certificate
+-- chain, and encrypted private key bundle is stored. The object key is
+-- formated as follows: @role_arn@\/@certificate_arn@.
+associatedRole_certificateS3ObjectKey :: Lens.Lens' AssociatedRole (Prelude.Maybe Prelude.Text)
+associatedRole_certificateS3ObjectKey = Lens.lens (\AssociatedRole' {certificateS3ObjectKey} -> certificateS3ObjectKey) (\s@AssociatedRole' {} a -> s {certificateS3ObjectKey = a} :: AssociatedRole)
+
+-- | The ID of the KMS customer master key (CMK) used to encrypt the private
+-- key.
+associatedRole_encryptionKmsKeyId :: Lens.Lens' AssociatedRole (Prelude.Maybe Prelude.Text)
+associatedRole_encryptionKmsKeyId = Lens.lens (\AssociatedRole' {encryptionKmsKeyId} -> encryptionKmsKeyId) (\s@AssociatedRole' {} a -> s {encryptionKmsKeyId = a} :: AssociatedRole)
+
+instance Data.FromXML AssociatedRole where
+  parseXML x =
+    AssociatedRole'
+      Prelude.<$> (x Data..@? "associatedRoleArn")
+      Prelude.<*> (x Data..@? "certificateS3BucketName")
+      Prelude.<*> (x Data..@? "certificateS3ObjectKey")
+      Prelude.<*> (x Data..@? "encryptionKmsKeyId")
+
+instance Prelude.Hashable AssociatedRole where
+  hashWithSalt _salt AssociatedRole' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedRoleArn
+      `Prelude.hashWithSalt` certificateS3BucketName
+      `Prelude.hashWithSalt` certificateS3ObjectKey
+      `Prelude.hashWithSalt` encryptionKmsKeyId
+
+instance Prelude.NFData AssociatedRole where
+  rnf AssociatedRole' {..} =
+    Prelude.rnf associatedRoleArn
+      `Prelude.seq` Prelude.rnf certificateS3BucketName
+      `Prelude.seq` Prelude.rnf certificateS3ObjectKey
+      `Prelude.seq` Prelude.rnf encryptionKmsKeyId
diff --git a/gen/Amazonka/EC2/Types/AssociatedTargetNetwork.hs b/gen/Amazonka/EC2/Types/AssociatedTargetNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AssociatedTargetNetwork.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AssociatedTargetNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AssociatedTargetNetwork where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AssociatedNetworkType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a target network that is associated with a Client VPN
+-- endpoint. A target network is a subnet in a VPC.
+--
+-- /See:/ 'newAssociatedTargetNetwork' smart constructor.
+data AssociatedTargetNetwork = AssociatedTargetNetwork'
+  { -- | The ID of the subnet.
+    networkId :: Prelude.Maybe Prelude.Text,
+    -- | The target network type.
+    networkType :: Prelude.Maybe AssociatedNetworkType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociatedTargetNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkId', 'associatedTargetNetwork_networkId' - The ID of the subnet.
+--
+-- 'networkType', 'associatedTargetNetwork_networkType' - The target network type.
+newAssociatedTargetNetwork ::
+  AssociatedTargetNetwork
+newAssociatedTargetNetwork =
+  AssociatedTargetNetwork'
+    { networkId =
+        Prelude.Nothing,
+      networkType = Prelude.Nothing
+    }
+
+-- | The ID of the subnet.
+associatedTargetNetwork_networkId :: Lens.Lens' AssociatedTargetNetwork (Prelude.Maybe Prelude.Text)
+associatedTargetNetwork_networkId = Lens.lens (\AssociatedTargetNetwork' {networkId} -> networkId) (\s@AssociatedTargetNetwork' {} a -> s {networkId = a} :: AssociatedTargetNetwork)
+
+-- | The target network type.
+associatedTargetNetwork_networkType :: Lens.Lens' AssociatedTargetNetwork (Prelude.Maybe AssociatedNetworkType)
+associatedTargetNetwork_networkType = Lens.lens (\AssociatedTargetNetwork' {networkType} -> networkType) (\s@AssociatedTargetNetwork' {} a -> s {networkType = a} :: AssociatedTargetNetwork)
+
+instance Data.FromXML AssociatedTargetNetwork where
+  parseXML x =
+    AssociatedTargetNetwork'
+      Prelude.<$> (x Data..@? "networkId")
+      Prelude.<*> (x Data..@? "networkType")
+
+instance Prelude.Hashable AssociatedTargetNetwork where
+  hashWithSalt _salt AssociatedTargetNetwork' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkId
+      `Prelude.hashWithSalt` networkType
+
+instance Prelude.NFData AssociatedTargetNetwork where
+  rnf AssociatedTargetNetwork' {..} =
+    Prelude.rnf networkId
+      `Prelude.seq` Prelude.rnf networkType
diff --git a/gen/Amazonka/EC2/Types/AssociationStatus.hs b/gen/Amazonka/EC2/Types/AssociationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AssociationStatus.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AssociationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AssociationStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AssociationStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a target network association.
+--
+-- /See:/ 'newAssociationStatus' smart constructor.
+data AssociationStatus = AssociationStatus'
+  { -- | The state of the target network association.
+    code :: Prelude.Maybe AssociationStatusCode,
+    -- | A message about the status of the target network association, if
+    -- applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociationStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'associationStatus_code' - The state of the target network association.
+--
+-- 'message', 'associationStatus_message' - A message about the status of the target network association, if
+-- applicable.
+newAssociationStatus ::
+  AssociationStatus
+newAssociationStatus =
+  AssociationStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state of the target network association.
+associationStatus_code :: Lens.Lens' AssociationStatus (Prelude.Maybe AssociationStatusCode)
+associationStatus_code = Lens.lens (\AssociationStatus' {code} -> code) (\s@AssociationStatus' {} a -> s {code = a} :: AssociationStatus)
+
+-- | A message about the status of the target network association, if
+-- applicable.
+associationStatus_message :: Lens.Lens' AssociationStatus (Prelude.Maybe Prelude.Text)
+associationStatus_message = Lens.lens (\AssociationStatus' {message} -> message) (\s@AssociationStatus' {} a -> s {message = a} :: AssociationStatus)
+
+instance Data.FromXML AssociationStatus where
+  parseXML x =
+    AssociationStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable AssociationStatus where
+  hashWithSalt _salt AssociationStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData AssociationStatus where
+  rnf AssociationStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/AssociationStatusCode.hs b/gen/Amazonka/EC2/Types/AssociationStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AssociationStatusCode.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AssociationStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AssociationStatusCode
+  ( AssociationStatusCode
+      ( ..,
+        AssociationStatusCode_Associated,
+        AssociationStatusCode_Associating,
+        AssociationStatusCode_Association_failed,
+        AssociationStatusCode_Disassociated,
+        AssociationStatusCode_Disassociating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AssociationStatusCode = AssociationStatusCode'
+  { fromAssociationStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AssociationStatusCode_Associated :: AssociationStatusCode
+pattern AssociationStatusCode_Associated = AssociationStatusCode' "associated"
+
+pattern AssociationStatusCode_Associating :: AssociationStatusCode
+pattern AssociationStatusCode_Associating = AssociationStatusCode' "associating"
+
+pattern AssociationStatusCode_Association_failed :: AssociationStatusCode
+pattern AssociationStatusCode_Association_failed = AssociationStatusCode' "association-failed"
+
+pattern AssociationStatusCode_Disassociated :: AssociationStatusCode
+pattern AssociationStatusCode_Disassociated = AssociationStatusCode' "disassociated"
+
+pattern AssociationStatusCode_Disassociating :: AssociationStatusCode
+pattern AssociationStatusCode_Disassociating = AssociationStatusCode' "disassociating"
+
+{-# COMPLETE
+  AssociationStatusCode_Associated,
+  AssociationStatusCode_Associating,
+  AssociationStatusCode_Association_failed,
+  AssociationStatusCode_Disassociated,
+  AssociationStatusCode_Disassociating,
+  AssociationStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AthenaIntegration.hs b/gen/Amazonka/EC2/Types/AthenaIntegration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AthenaIntegration.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AthenaIntegration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AthenaIntegration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PartitionLoadFrequency
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes integration options for Amazon Athena.
+--
+-- /See:/ 'newAthenaIntegration' smart constructor.
+data AthenaIntegration = AthenaIntegration'
+  { -- | The end date for the partition.
+    partitionEndDate :: Prelude.Maybe Data.ISO8601,
+    -- | The start date for the partition.
+    partitionStartDate :: Prelude.Maybe Data.ISO8601,
+    -- | The location in Amazon S3 to store the generated CloudFormation
+    -- template.
+    integrationResultS3DestinationArn :: Prelude.Text,
+    -- | The schedule for adding new partitions to the table.
+    partitionLoadFrequency :: PartitionLoadFrequency
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AthenaIntegration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'partitionEndDate', 'athenaIntegration_partitionEndDate' - The end date for the partition.
+--
+-- 'partitionStartDate', 'athenaIntegration_partitionStartDate' - The start date for the partition.
+--
+-- 'integrationResultS3DestinationArn', 'athenaIntegration_integrationResultS3DestinationArn' - The location in Amazon S3 to store the generated CloudFormation
+-- template.
+--
+-- 'partitionLoadFrequency', 'athenaIntegration_partitionLoadFrequency' - The schedule for adding new partitions to the table.
+newAthenaIntegration ::
+  -- | 'integrationResultS3DestinationArn'
+  Prelude.Text ->
+  -- | 'partitionLoadFrequency'
+  PartitionLoadFrequency ->
+  AthenaIntegration
+newAthenaIntegration
+  pIntegrationResultS3DestinationArn_
+  pPartitionLoadFrequency_ =
+    AthenaIntegration'
+      { partitionEndDate =
+          Prelude.Nothing,
+        partitionStartDate = Prelude.Nothing,
+        integrationResultS3DestinationArn =
+          pIntegrationResultS3DestinationArn_,
+        partitionLoadFrequency = pPartitionLoadFrequency_
+      }
+
+-- | The end date for the partition.
+athenaIntegration_partitionEndDate :: Lens.Lens' AthenaIntegration (Prelude.Maybe Prelude.UTCTime)
+athenaIntegration_partitionEndDate = Lens.lens (\AthenaIntegration' {partitionEndDate} -> partitionEndDate) (\s@AthenaIntegration' {} a -> s {partitionEndDate = a} :: AthenaIntegration) Prelude.. Lens.mapping Data._Time
+
+-- | The start date for the partition.
+athenaIntegration_partitionStartDate :: Lens.Lens' AthenaIntegration (Prelude.Maybe Prelude.UTCTime)
+athenaIntegration_partitionStartDate = Lens.lens (\AthenaIntegration' {partitionStartDate} -> partitionStartDate) (\s@AthenaIntegration' {} a -> s {partitionStartDate = a} :: AthenaIntegration) Prelude.. Lens.mapping Data._Time
+
+-- | The location in Amazon S3 to store the generated CloudFormation
+-- template.
+athenaIntegration_integrationResultS3DestinationArn :: Lens.Lens' AthenaIntegration Prelude.Text
+athenaIntegration_integrationResultS3DestinationArn = Lens.lens (\AthenaIntegration' {integrationResultS3DestinationArn} -> integrationResultS3DestinationArn) (\s@AthenaIntegration' {} a -> s {integrationResultS3DestinationArn = a} :: AthenaIntegration)
+
+-- | The schedule for adding new partitions to the table.
+athenaIntegration_partitionLoadFrequency :: Lens.Lens' AthenaIntegration PartitionLoadFrequency
+athenaIntegration_partitionLoadFrequency = Lens.lens (\AthenaIntegration' {partitionLoadFrequency} -> partitionLoadFrequency) (\s@AthenaIntegration' {} a -> s {partitionLoadFrequency = a} :: AthenaIntegration)
+
+instance Prelude.Hashable AthenaIntegration where
+  hashWithSalt _salt AthenaIntegration' {..} =
+    _salt
+      `Prelude.hashWithSalt` partitionEndDate
+      `Prelude.hashWithSalt` partitionStartDate
+      `Prelude.hashWithSalt` integrationResultS3DestinationArn
+      `Prelude.hashWithSalt` partitionLoadFrequency
+
+instance Prelude.NFData AthenaIntegration where
+  rnf AthenaIntegration' {..} =
+    Prelude.rnf partitionEndDate
+      `Prelude.seq` Prelude.rnf partitionStartDate
+      `Prelude.seq` Prelude.rnf integrationResultS3DestinationArn
+      `Prelude.seq` Prelude.rnf partitionLoadFrequency
+
+instance Data.ToQuery AthenaIntegration where
+  toQuery AthenaIntegration' {..} =
+    Prelude.mconcat
+      [ "PartitionEndDate" Data.=: partitionEndDate,
+        "PartitionStartDate" Data.=: partitionStartDate,
+        "IntegrationResultS3DestinationArn"
+          Data.=: integrationResultS3DestinationArn,
+        "PartitionLoadFrequency"
+          Data.=: partitionLoadFrequency
+      ]
diff --git a/gen/Amazonka/EC2/Types/AttachmentEnaSrdSpecification.hs b/gen/Amazonka/EC2/Types/AttachmentEnaSrdSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AttachmentEnaSrdSpecification.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AttachmentEnaSrdSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AttachmentEnaSrdSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttachmentEnaSrdUdpSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the ENA Express configuration for the network interface
+-- that\'s attached to the instance.
+--
+-- /See:/ 'newAttachmentEnaSrdSpecification' smart constructor.
+data AttachmentEnaSrdSpecification = AttachmentEnaSrdSpecification'
+  { -- | Indicates whether ENA Express is enabled for the network interface
+    -- that\'s attached to the instance.
+    enaSrdEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | ENA Express configuration for UDP network traffic.
+    enaSrdUdpSpecification :: Prelude.Maybe AttachmentEnaSrdUdpSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachmentEnaSrdSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enaSrdEnabled', 'attachmentEnaSrdSpecification_enaSrdEnabled' - Indicates whether ENA Express is enabled for the network interface
+-- that\'s attached to the instance.
+--
+-- 'enaSrdUdpSpecification', 'attachmentEnaSrdSpecification_enaSrdUdpSpecification' - ENA Express configuration for UDP network traffic.
+newAttachmentEnaSrdSpecification ::
+  AttachmentEnaSrdSpecification
+newAttachmentEnaSrdSpecification =
+  AttachmentEnaSrdSpecification'
+    { enaSrdEnabled =
+        Prelude.Nothing,
+      enaSrdUdpSpecification = Prelude.Nothing
+    }
+
+-- | Indicates whether ENA Express is enabled for the network interface
+-- that\'s attached to the instance.
+attachmentEnaSrdSpecification_enaSrdEnabled :: Lens.Lens' AttachmentEnaSrdSpecification (Prelude.Maybe Prelude.Bool)
+attachmentEnaSrdSpecification_enaSrdEnabled = Lens.lens (\AttachmentEnaSrdSpecification' {enaSrdEnabled} -> enaSrdEnabled) (\s@AttachmentEnaSrdSpecification' {} a -> s {enaSrdEnabled = a} :: AttachmentEnaSrdSpecification)
+
+-- | ENA Express configuration for UDP network traffic.
+attachmentEnaSrdSpecification_enaSrdUdpSpecification :: Lens.Lens' AttachmentEnaSrdSpecification (Prelude.Maybe AttachmentEnaSrdUdpSpecification)
+attachmentEnaSrdSpecification_enaSrdUdpSpecification = Lens.lens (\AttachmentEnaSrdSpecification' {enaSrdUdpSpecification} -> enaSrdUdpSpecification) (\s@AttachmentEnaSrdSpecification' {} a -> s {enaSrdUdpSpecification = a} :: AttachmentEnaSrdSpecification)
+
+instance Data.FromXML AttachmentEnaSrdSpecification where
+  parseXML x =
+    AttachmentEnaSrdSpecification'
+      Prelude.<$> (x Data..@? "enaSrdEnabled")
+      Prelude.<*> (x Data..@? "enaSrdUdpSpecification")
+
+instance
+  Prelude.Hashable
+    AttachmentEnaSrdSpecification
+  where
+  hashWithSalt _salt AttachmentEnaSrdSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` enaSrdEnabled
+      `Prelude.hashWithSalt` enaSrdUdpSpecification
+
+instance Prelude.NFData AttachmentEnaSrdSpecification where
+  rnf AttachmentEnaSrdSpecification' {..} =
+    Prelude.rnf enaSrdEnabled
+      `Prelude.seq` Prelude.rnf enaSrdUdpSpecification
diff --git a/gen/Amazonka/EC2/Types/AttachmentEnaSrdUdpSpecification.hs b/gen/Amazonka/EC2/Types/AttachmentEnaSrdUdpSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AttachmentEnaSrdUdpSpecification.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AttachmentEnaSrdUdpSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AttachmentEnaSrdUdpSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the ENA Express configuration for UDP traffic on the network
+-- interface that\'s attached to the instance.
+--
+-- /See:/ 'newAttachmentEnaSrdUdpSpecification' smart constructor.
+data AttachmentEnaSrdUdpSpecification = AttachmentEnaSrdUdpSpecification'
+  { -- | Indicates whether UDP traffic to and from the instance uses ENA Express.
+    -- To specify this setting, you must first enable ENA Express.
+    enaSrdUdpEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttachmentEnaSrdUdpSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enaSrdUdpEnabled', 'attachmentEnaSrdUdpSpecification_enaSrdUdpEnabled' - Indicates whether UDP traffic to and from the instance uses ENA Express.
+-- To specify this setting, you must first enable ENA Express.
+newAttachmentEnaSrdUdpSpecification ::
+  AttachmentEnaSrdUdpSpecification
+newAttachmentEnaSrdUdpSpecification =
+  AttachmentEnaSrdUdpSpecification'
+    { enaSrdUdpEnabled =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether UDP traffic to and from the instance uses ENA Express.
+-- To specify this setting, you must first enable ENA Express.
+attachmentEnaSrdUdpSpecification_enaSrdUdpEnabled :: Lens.Lens' AttachmentEnaSrdUdpSpecification (Prelude.Maybe Prelude.Bool)
+attachmentEnaSrdUdpSpecification_enaSrdUdpEnabled = Lens.lens (\AttachmentEnaSrdUdpSpecification' {enaSrdUdpEnabled} -> enaSrdUdpEnabled) (\s@AttachmentEnaSrdUdpSpecification' {} a -> s {enaSrdUdpEnabled = a} :: AttachmentEnaSrdUdpSpecification)
+
+instance
+  Data.FromXML
+    AttachmentEnaSrdUdpSpecification
+  where
+  parseXML x =
+    AttachmentEnaSrdUdpSpecification'
+      Prelude.<$> (x Data..@? "enaSrdUdpEnabled")
+
+instance
+  Prelude.Hashable
+    AttachmentEnaSrdUdpSpecification
+  where
+  hashWithSalt
+    _salt
+    AttachmentEnaSrdUdpSpecification' {..} =
+      _salt `Prelude.hashWithSalt` enaSrdUdpEnabled
+
+instance
+  Prelude.NFData
+    AttachmentEnaSrdUdpSpecification
+  where
+  rnf AttachmentEnaSrdUdpSpecification' {..} =
+    Prelude.rnf enaSrdUdpEnabled
diff --git a/gen/Amazonka/EC2/Types/AttachmentStatus.hs b/gen/Amazonka/EC2/Types/AttachmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AttachmentStatus.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AttachmentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AttachmentStatus
+  ( AttachmentStatus
+      ( ..,
+        AttachmentStatus_Attached,
+        AttachmentStatus_Attaching,
+        AttachmentStatus_Available,
+        AttachmentStatus_Busy,
+        AttachmentStatus_Detached,
+        AttachmentStatus_Detaching
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AttachmentStatus = AttachmentStatus'
+  { fromAttachmentStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AttachmentStatus_Attached :: AttachmentStatus
+pattern AttachmentStatus_Attached = AttachmentStatus' "attached"
+
+pattern AttachmentStatus_Attaching :: AttachmentStatus
+pattern AttachmentStatus_Attaching = AttachmentStatus' "attaching"
+
+pattern AttachmentStatus_Available :: AttachmentStatus
+pattern AttachmentStatus_Available = AttachmentStatus' "available"
+
+pattern AttachmentStatus_Busy :: AttachmentStatus
+pattern AttachmentStatus_Busy = AttachmentStatus' "busy"
+
+pattern AttachmentStatus_Detached :: AttachmentStatus
+pattern AttachmentStatus_Detached = AttachmentStatus' "detached"
+
+pattern AttachmentStatus_Detaching :: AttachmentStatus
+pattern AttachmentStatus_Detaching = AttachmentStatus' "detaching"
+
+{-# COMPLETE
+  AttachmentStatus_Attached,
+  AttachmentStatus_Attaching,
+  AttachmentStatus_Available,
+  AttachmentStatus_Busy,
+  AttachmentStatus_Detached,
+  AttachmentStatus_Detaching,
+  AttachmentStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AttributeBooleanValue.hs b/gen/Amazonka/EC2/Types/AttributeBooleanValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AttributeBooleanValue.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AttributeBooleanValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AttributeBooleanValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a value for a resource attribute that is a Boolean value.
+--
+-- /See:/ 'newAttributeBooleanValue' smart constructor.
+data AttributeBooleanValue = AttributeBooleanValue'
+  { -- | The attribute value. The valid values are @true@ or @false@.
+    value :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeBooleanValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'attributeBooleanValue_value' - The attribute value. The valid values are @true@ or @false@.
+newAttributeBooleanValue ::
+  AttributeBooleanValue
+newAttributeBooleanValue =
+  AttributeBooleanValue' {value = Prelude.Nothing}
+
+-- | The attribute value. The valid values are @true@ or @false@.
+attributeBooleanValue_value :: Lens.Lens' AttributeBooleanValue (Prelude.Maybe Prelude.Bool)
+attributeBooleanValue_value = Lens.lens (\AttributeBooleanValue' {value} -> value) (\s@AttributeBooleanValue' {} a -> s {value = a} :: AttributeBooleanValue)
+
+instance Data.FromXML AttributeBooleanValue where
+  parseXML x =
+    AttributeBooleanValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance Prelude.Hashable AttributeBooleanValue where
+  hashWithSalt _salt AttributeBooleanValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData AttributeBooleanValue where
+  rnf AttributeBooleanValue' {..} = Prelude.rnf value
+
+instance Data.ToQuery AttributeBooleanValue where
+  toQuery AttributeBooleanValue' {..} =
+    Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/AttributeValue.hs b/gen/Amazonka/EC2/Types/AttributeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AttributeValue.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AttributeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AttributeValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a value for a resource attribute that is a String.
+--
+-- /See:/ 'newAttributeValue' smart constructor.
+data AttributeValue = AttributeValue'
+  { -- | The attribute value. The value is case-sensitive.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AttributeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'attributeValue_value' - The attribute value. The value is case-sensitive.
+newAttributeValue ::
+  AttributeValue
+newAttributeValue =
+  AttributeValue' {value = Prelude.Nothing}
+
+-- | The attribute value. The value is case-sensitive.
+attributeValue_value :: Lens.Lens' AttributeValue (Prelude.Maybe Prelude.Text)
+attributeValue_value = Lens.lens (\AttributeValue' {value} -> value) (\s@AttributeValue' {} a -> s {value = a} :: AttributeValue)
+
+instance Data.FromXML AttributeValue where
+  parseXML x =
+    AttributeValue' Prelude.<$> (x Data..@? "value")
+
+instance Prelude.Hashable AttributeValue where
+  hashWithSalt _salt AttributeValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData AttributeValue where
+  rnf AttributeValue' {..} = Prelude.rnf value
+
+instance Data.ToQuery AttributeValue where
+  toQuery AttributeValue' {..} =
+    Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/AuthorizationRule.hs b/gen/Amazonka/EC2/Types/AuthorizationRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AuthorizationRule.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AuthorizationRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AuthorizationRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an authorization rule.
+--
+-- /See:/ 'newAuthorizationRule' smart constructor.
+data AuthorizationRule = AuthorizationRule'
+  { -- | Indicates whether the authorization rule grants access to all clients.
+    accessAll :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Client VPN endpoint with which the authorization rule is
+    -- associated.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the authorization rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 address range, in CIDR notation, of the network to which the
+    -- authorization rule applies.
+    destinationCidr :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Active Directory group to which the authorization rule
+    -- grants access.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the authorization rule.
+    status :: Prelude.Maybe ClientVpnAuthorizationRuleStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AuthorizationRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessAll', 'authorizationRule_accessAll' - Indicates whether the authorization rule grants access to all clients.
+--
+-- 'clientVpnEndpointId', 'authorizationRule_clientVpnEndpointId' - The ID of the Client VPN endpoint with which the authorization rule is
+-- associated.
+--
+-- 'description', 'authorizationRule_description' - A brief description of the authorization rule.
+--
+-- 'destinationCidr', 'authorizationRule_destinationCidr' - The IPv4 address range, in CIDR notation, of the network to which the
+-- authorization rule applies.
+--
+-- 'groupId', 'authorizationRule_groupId' - The ID of the Active Directory group to which the authorization rule
+-- grants access.
+--
+-- 'status', 'authorizationRule_status' - The current state of the authorization rule.
+newAuthorizationRule ::
+  AuthorizationRule
+newAuthorizationRule =
+  AuthorizationRule'
+    { accessAll = Prelude.Nothing,
+      clientVpnEndpointId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      destinationCidr = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Indicates whether the authorization rule grants access to all clients.
+authorizationRule_accessAll :: Lens.Lens' AuthorizationRule (Prelude.Maybe Prelude.Bool)
+authorizationRule_accessAll = Lens.lens (\AuthorizationRule' {accessAll} -> accessAll) (\s@AuthorizationRule' {} a -> s {accessAll = a} :: AuthorizationRule)
+
+-- | The ID of the Client VPN endpoint with which the authorization rule is
+-- associated.
+authorizationRule_clientVpnEndpointId :: Lens.Lens' AuthorizationRule (Prelude.Maybe Prelude.Text)
+authorizationRule_clientVpnEndpointId = Lens.lens (\AuthorizationRule' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@AuthorizationRule' {} a -> s {clientVpnEndpointId = a} :: AuthorizationRule)
+
+-- | A brief description of the authorization rule.
+authorizationRule_description :: Lens.Lens' AuthorizationRule (Prelude.Maybe Prelude.Text)
+authorizationRule_description = Lens.lens (\AuthorizationRule' {description} -> description) (\s@AuthorizationRule' {} a -> s {description = a} :: AuthorizationRule)
+
+-- | The IPv4 address range, in CIDR notation, of the network to which the
+-- authorization rule applies.
+authorizationRule_destinationCidr :: Lens.Lens' AuthorizationRule (Prelude.Maybe Prelude.Text)
+authorizationRule_destinationCidr = Lens.lens (\AuthorizationRule' {destinationCidr} -> destinationCidr) (\s@AuthorizationRule' {} a -> s {destinationCidr = a} :: AuthorizationRule)
+
+-- | The ID of the Active Directory group to which the authorization rule
+-- grants access.
+authorizationRule_groupId :: Lens.Lens' AuthorizationRule (Prelude.Maybe Prelude.Text)
+authorizationRule_groupId = Lens.lens (\AuthorizationRule' {groupId} -> groupId) (\s@AuthorizationRule' {} a -> s {groupId = a} :: AuthorizationRule)
+
+-- | The current state of the authorization rule.
+authorizationRule_status :: Lens.Lens' AuthorizationRule (Prelude.Maybe ClientVpnAuthorizationRuleStatus)
+authorizationRule_status = Lens.lens (\AuthorizationRule' {status} -> status) (\s@AuthorizationRule' {} a -> s {status = a} :: AuthorizationRule)
+
+instance Data.FromXML AuthorizationRule where
+  parseXML x =
+    AuthorizationRule'
+      Prelude.<$> (x Data..@? "accessAll")
+      Prelude.<*> (x Data..@? "clientVpnEndpointId")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "destinationCidr")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "status")
+
+instance Prelude.Hashable AuthorizationRule where
+  hashWithSalt _salt AuthorizationRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessAll
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationCidr
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData AuthorizationRule where
+  rnf AuthorizationRule' {..} =
+    Prelude.rnf accessAll
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationCidr
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/AutoAcceptSharedAssociationsValue.hs b/gen/Amazonka/EC2/Types/AutoAcceptSharedAssociationsValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AutoAcceptSharedAssociationsValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AutoAcceptSharedAssociationsValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AutoAcceptSharedAssociationsValue
+  ( AutoAcceptSharedAssociationsValue
+      ( ..,
+        AutoAcceptSharedAssociationsValue_Disable,
+        AutoAcceptSharedAssociationsValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AutoAcceptSharedAssociationsValue = AutoAcceptSharedAssociationsValue'
+  { fromAutoAcceptSharedAssociationsValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AutoAcceptSharedAssociationsValue_Disable :: AutoAcceptSharedAssociationsValue
+pattern AutoAcceptSharedAssociationsValue_Disable = AutoAcceptSharedAssociationsValue' "disable"
+
+pattern AutoAcceptSharedAssociationsValue_Enable :: AutoAcceptSharedAssociationsValue
+pattern AutoAcceptSharedAssociationsValue_Enable = AutoAcceptSharedAssociationsValue' "enable"
+
+{-# COMPLETE
+  AutoAcceptSharedAssociationsValue_Disable,
+  AutoAcceptSharedAssociationsValue_Enable,
+  AutoAcceptSharedAssociationsValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AutoAcceptSharedAttachmentsValue.hs b/gen/Amazonka/EC2/Types/AutoAcceptSharedAttachmentsValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AutoAcceptSharedAttachmentsValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+  ( AutoAcceptSharedAttachmentsValue
+      ( ..,
+        AutoAcceptSharedAttachmentsValue_Disable,
+        AutoAcceptSharedAttachmentsValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AutoAcceptSharedAttachmentsValue = AutoAcceptSharedAttachmentsValue'
+  { fromAutoAcceptSharedAttachmentsValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AutoAcceptSharedAttachmentsValue_Disable :: AutoAcceptSharedAttachmentsValue
+pattern AutoAcceptSharedAttachmentsValue_Disable = AutoAcceptSharedAttachmentsValue' "disable"
+
+pattern AutoAcceptSharedAttachmentsValue_Enable :: AutoAcceptSharedAttachmentsValue
+pattern AutoAcceptSharedAttachmentsValue_Enable = AutoAcceptSharedAttachmentsValue' "enable"
+
+{-# COMPLETE
+  AutoAcceptSharedAttachmentsValue_Disable,
+  AutoAcceptSharedAttachmentsValue_Enable,
+  AutoAcceptSharedAttachmentsValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AutoPlacement.hs b/gen/Amazonka/EC2/Types/AutoPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AutoPlacement.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AutoPlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AutoPlacement
+  ( AutoPlacement
+      ( ..,
+        AutoPlacement_Off,
+        AutoPlacement_On
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AutoPlacement = AutoPlacement'
+  { fromAutoPlacement ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AutoPlacement_Off :: AutoPlacement
+pattern AutoPlacement_Off = AutoPlacement' "off"
+
+pattern AutoPlacement_On :: AutoPlacement
+pattern AutoPlacement_On = AutoPlacement' "on"
+
+{-# COMPLETE
+  AutoPlacement_Off,
+  AutoPlacement_On,
+  AutoPlacement'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AvailabilityZone.hs b/gen/Amazonka/EC2/Types/AvailabilityZone.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AvailabilityZone.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AvailabilityZone
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AvailabilityZone where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AvailabilityZoneMessage
+import Amazonka.EC2.Types.AvailabilityZoneOptInStatus
+import Amazonka.EC2.Types.AvailabilityZoneState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes Availability Zones, Local Zones, and Wavelength Zones.
+--
+-- /See:/ 'newAvailabilityZone' smart constructor.
+data AvailabilityZone = AvailabilityZone'
+  { -- | For Availability Zones, this parameter has the same value as the Region
+    -- name.
+    --
+    -- For Local Zones, the name of the associated group, for example
+    -- @us-west-2-lax-1@.
+    --
+    -- For Wavelength Zones, the name of the associated group, for example
+    -- @us-east-1-wl1-bos-wlz-1@.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | Any messages about the Availability Zone, Local Zone, or Wavelength
+    -- Zone.
+    messages :: Prelude.Maybe [AvailabilityZoneMessage],
+    -- | The name of the network border group.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | For Availability Zones, this parameter always has the value of
+    -- @opt-in-not-required@.
+    --
+    -- For Local Zones and Wavelength Zones, this parameter is the opt-in
+    -- status. The possible values are @opted-in@, and @not-opted-in@.
+    optInStatus :: Prelude.Maybe AvailabilityZoneOptInStatus,
+    -- | The ID of the zone that handles some of the Local Zone or Wavelength
+    -- Zone control plane operations, such as API calls.
+    parentZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the zone that handles some of the Local Zone or Wavelength
+    -- Zone control plane operations, such as API calls.
+    parentZoneName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Region.
+    regionName :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Availability Zone, Local Zone, or Wavelength Zone. This
+    -- value is always @available@.
+    state :: Prelude.Maybe AvailabilityZoneState,
+    -- | The ID of the Availability Zone, Local Zone, or Wavelength Zone.
+    zoneId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Availability Zone, Local Zone, or Wavelength Zone.
+    zoneName :: Prelude.Maybe Prelude.Text,
+    -- | The type of zone. The valid values are @availability-zone@,
+    -- @local-zone@, and @wavelength-zone@.
+    zoneType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AvailabilityZone' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupName', 'availabilityZone_groupName' - For Availability Zones, this parameter has the same value as the Region
+-- name.
+--
+-- For Local Zones, the name of the associated group, for example
+-- @us-west-2-lax-1@.
+--
+-- For Wavelength Zones, the name of the associated group, for example
+-- @us-east-1-wl1-bos-wlz-1@.
+--
+-- 'messages', 'availabilityZone_messages' - Any messages about the Availability Zone, Local Zone, or Wavelength
+-- Zone.
+--
+-- 'networkBorderGroup', 'availabilityZone_networkBorderGroup' - The name of the network border group.
+--
+-- 'optInStatus', 'availabilityZone_optInStatus' - For Availability Zones, this parameter always has the value of
+-- @opt-in-not-required@.
+--
+-- For Local Zones and Wavelength Zones, this parameter is the opt-in
+-- status. The possible values are @opted-in@, and @not-opted-in@.
+--
+-- 'parentZoneId', 'availabilityZone_parentZoneId' - The ID of the zone that handles some of the Local Zone or Wavelength
+-- Zone control plane operations, such as API calls.
+--
+-- 'parentZoneName', 'availabilityZone_parentZoneName' - The name of the zone that handles some of the Local Zone or Wavelength
+-- Zone control plane operations, such as API calls.
+--
+-- 'regionName', 'availabilityZone_regionName' - The name of the Region.
+--
+-- 'state', 'availabilityZone_state' - The state of the Availability Zone, Local Zone, or Wavelength Zone. This
+-- value is always @available@.
+--
+-- 'zoneId', 'availabilityZone_zoneId' - The ID of the Availability Zone, Local Zone, or Wavelength Zone.
+--
+-- 'zoneName', 'availabilityZone_zoneName' - The name of the Availability Zone, Local Zone, or Wavelength Zone.
+--
+-- 'zoneType', 'availabilityZone_zoneType' - The type of zone. The valid values are @availability-zone@,
+-- @local-zone@, and @wavelength-zone@.
+newAvailabilityZone ::
+  AvailabilityZone
+newAvailabilityZone =
+  AvailabilityZone'
+    { groupName = Prelude.Nothing,
+      messages = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing,
+      optInStatus = Prelude.Nothing,
+      parentZoneId = Prelude.Nothing,
+      parentZoneName = Prelude.Nothing,
+      regionName = Prelude.Nothing,
+      state = Prelude.Nothing,
+      zoneId = Prelude.Nothing,
+      zoneName = Prelude.Nothing,
+      zoneType = Prelude.Nothing
+    }
+
+-- | For Availability Zones, this parameter has the same value as the Region
+-- name.
+--
+-- For Local Zones, the name of the associated group, for example
+-- @us-west-2-lax-1@.
+--
+-- For Wavelength Zones, the name of the associated group, for example
+-- @us-east-1-wl1-bos-wlz-1@.
+availabilityZone_groupName :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_groupName = Lens.lens (\AvailabilityZone' {groupName} -> groupName) (\s@AvailabilityZone' {} a -> s {groupName = a} :: AvailabilityZone)
+
+-- | Any messages about the Availability Zone, Local Zone, or Wavelength
+-- Zone.
+availabilityZone_messages :: Lens.Lens' AvailabilityZone (Prelude.Maybe [AvailabilityZoneMessage])
+availabilityZone_messages = Lens.lens (\AvailabilityZone' {messages} -> messages) (\s@AvailabilityZone' {} a -> s {messages = a} :: AvailabilityZone) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the network border group.
+availabilityZone_networkBorderGroup :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_networkBorderGroup = Lens.lens (\AvailabilityZone' {networkBorderGroup} -> networkBorderGroup) (\s@AvailabilityZone' {} a -> s {networkBorderGroup = a} :: AvailabilityZone)
+
+-- | For Availability Zones, this parameter always has the value of
+-- @opt-in-not-required@.
+--
+-- For Local Zones and Wavelength Zones, this parameter is the opt-in
+-- status. The possible values are @opted-in@, and @not-opted-in@.
+availabilityZone_optInStatus :: Lens.Lens' AvailabilityZone (Prelude.Maybe AvailabilityZoneOptInStatus)
+availabilityZone_optInStatus = Lens.lens (\AvailabilityZone' {optInStatus} -> optInStatus) (\s@AvailabilityZone' {} a -> s {optInStatus = a} :: AvailabilityZone)
+
+-- | The ID of the zone that handles some of the Local Zone or Wavelength
+-- Zone control plane operations, such as API calls.
+availabilityZone_parentZoneId :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_parentZoneId = Lens.lens (\AvailabilityZone' {parentZoneId} -> parentZoneId) (\s@AvailabilityZone' {} a -> s {parentZoneId = a} :: AvailabilityZone)
+
+-- | The name of the zone that handles some of the Local Zone or Wavelength
+-- Zone control plane operations, such as API calls.
+availabilityZone_parentZoneName :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_parentZoneName = Lens.lens (\AvailabilityZone' {parentZoneName} -> parentZoneName) (\s@AvailabilityZone' {} a -> s {parentZoneName = a} :: AvailabilityZone)
+
+-- | The name of the Region.
+availabilityZone_regionName :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_regionName = Lens.lens (\AvailabilityZone' {regionName} -> regionName) (\s@AvailabilityZone' {} a -> s {regionName = a} :: AvailabilityZone)
+
+-- | The state of the Availability Zone, Local Zone, or Wavelength Zone. This
+-- value is always @available@.
+availabilityZone_state :: Lens.Lens' AvailabilityZone (Prelude.Maybe AvailabilityZoneState)
+availabilityZone_state = Lens.lens (\AvailabilityZone' {state} -> state) (\s@AvailabilityZone' {} a -> s {state = a} :: AvailabilityZone)
+
+-- | The ID of the Availability Zone, Local Zone, or Wavelength Zone.
+availabilityZone_zoneId :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_zoneId = Lens.lens (\AvailabilityZone' {zoneId} -> zoneId) (\s@AvailabilityZone' {} a -> s {zoneId = a} :: AvailabilityZone)
+
+-- | The name of the Availability Zone, Local Zone, or Wavelength Zone.
+availabilityZone_zoneName :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_zoneName = Lens.lens (\AvailabilityZone' {zoneName} -> zoneName) (\s@AvailabilityZone' {} a -> s {zoneName = a} :: AvailabilityZone)
+
+-- | The type of zone. The valid values are @availability-zone@,
+-- @local-zone@, and @wavelength-zone@.
+availabilityZone_zoneType :: Lens.Lens' AvailabilityZone (Prelude.Maybe Prelude.Text)
+availabilityZone_zoneType = Lens.lens (\AvailabilityZone' {zoneType} -> zoneType) (\s@AvailabilityZone' {} a -> s {zoneType = a} :: AvailabilityZone)
+
+instance Data.FromXML AvailabilityZone where
+  parseXML x =
+    AvailabilityZone'
+      Prelude.<$> (x Data..@? "groupName")
+      Prelude.<*> ( x
+                      Data..@? "messageSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "networkBorderGroup")
+      Prelude.<*> (x Data..@? "optInStatus")
+      Prelude.<*> (x Data..@? "parentZoneId")
+      Prelude.<*> (x Data..@? "parentZoneName")
+      Prelude.<*> (x Data..@? "regionName")
+      Prelude.<*> (x Data..@? "zoneState")
+      Prelude.<*> (x Data..@? "zoneId")
+      Prelude.<*> (x Data..@? "zoneName")
+      Prelude.<*> (x Data..@? "zoneType")
+
+instance Prelude.Hashable AvailabilityZone where
+  hashWithSalt _salt AvailabilityZone' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` messages
+      `Prelude.hashWithSalt` networkBorderGroup
+      `Prelude.hashWithSalt` optInStatus
+      `Prelude.hashWithSalt` parentZoneId
+      `Prelude.hashWithSalt` parentZoneName
+      `Prelude.hashWithSalt` regionName
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` zoneId
+      `Prelude.hashWithSalt` zoneName
+      `Prelude.hashWithSalt` zoneType
+
+instance Prelude.NFData AvailabilityZone where
+  rnf AvailabilityZone' {..} =
+    Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf messages
+      `Prelude.seq` Prelude.rnf networkBorderGroup
+      `Prelude.seq` Prelude.rnf optInStatus
+      `Prelude.seq` Prelude.rnf parentZoneId
+      `Prelude.seq` Prelude.rnf parentZoneName
+      `Prelude.seq` Prelude.rnf regionName
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf zoneId
+      `Prelude.seq` Prelude.rnf zoneName
+      `Prelude.seq` Prelude.rnf zoneType
diff --git a/gen/Amazonka/EC2/Types/AvailabilityZoneMessage.hs b/gen/Amazonka/EC2/Types/AvailabilityZoneMessage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AvailabilityZoneMessage.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AvailabilityZoneMessage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AvailabilityZoneMessage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a message about an Availability Zone, Local Zone, or
+-- Wavelength Zone.
+--
+-- /See:/ 'newAvailabilityZoneMessage' smart constructor.
+data AvailabilityZoneMessage = AvailabilityZoneMessage'
+  { -- | The message about the Availability Zone, Local Zone, or Wavelength Zone.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AvailabilityZoneMessage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'availabilityZoneMessage_message' - The message about the Availability Zone, Local Zone, or Wavelength Zone.
+newAvailabilityZoneMessage ::
+  AvailabilityZoneMessage
+newAvailabilityZoneMessage =
+  AvailabilityZoneMessage' {message = Prelude.Nothing}
+
+-- | The message about the Availability Zone, Local Zone, or Wavelength Zone.
+availabilityZoneMessage_message :: Lens.Lens' AvailabilityZoneMessage (Prelude.Maybe Prelude.Text)
+availabilityZoneMessage_message = Lens.lens (\AvailabilityZoneMessage' {message} -> message) (\s@AvailabilityZoneMessage' {} a -> s {message = a} :: AvailabilityZoneMessage)
+
+instance Data.FromXML AvailabilityZoneMessage where
+  parseXML x =
+    AvailabilityZoneMessage'
+      Prelude.<$> (x Data..@? "message")
+
+instance Prelude.Hashable AvailabilityZoneMessage where
+  hashWithSalt _salt AvailabilityZoneMessage' {..} =
+    _salt `Prelude.hashWithSalt` message
+
+instance Prelude.NFData AvailabilityZoneMessage where
+  rnf AvailabilityZoneMessage' {..} =
+    Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/AvailabilityZoneOptInStatus.hs b/gen/Amazonka/EC2/Types/AvailabilityZoneOptInStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AvailabilityZoneOptInStatus.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AvailabilityZoneOptInStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AvailabilityZoneOptInStatus
+  ( AvailabilityZoneOptInStatus
+      ( ..,
+        AvailabilityZoneOptInStatus_Not_opted_in,
+        AvailabilityZoneOptInStatus_Opt_in_not_required,
+        AvailabilityZoneOptInStatus_Opted_in
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AvailabilityZoneOptInStatus = AvailabilityZoneOptInStatus'
+  { fromAvailabilityZoneOptInStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AvailabilityZoneOptInStatus_Not_opted_in :: AvailabilityZoneOptInStatus
+pattern AvailabilityZoneOptInStatus_Not_opted_in = AvailabilityZoneOptInStatus' "not-opted-in"
+
+pattern AvailabilityZoneOptInStatus_Opt_in_not_required :: AvailabilityZoneOptInStatus
+pattern AvailabilityZoneOptInStatus_Opt_in_not_required = AvailabilityZoneOptInStatus' "opt-in-not-required"
+
+pattern AvailabilityZoneOptInStatus_Opted_in :: AvailabilityZoneOptInStatus
+pattern AvailabilityZoneOptInStatus_Opted_in = AvailabilityZoneOptInStatus' "opted-in"
+
+{-# COMPLETE
+  AvailabilityZoneOptInStatus_Not_opted_in,
+  AvailabilityZoneOptInStatus_Opt_in_not_required,
+  AvailabilityZoneOptInStatus_Opted_in,
+  AvailabilityZoneOptInStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AvailabilityZoneState.hs b/gen/Amazonka/EC2/Types/AvailabilityZoneState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AvailabilityZoneState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AvailabilityZoneState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AvailabilityZoneState
+  ( AvailabilityZoneState
+      ( ..,
+        AvailabilityZoneState_Available,
+        AvailabilityZoneState_Impaired,
+        AvailabilityZoneState_Information,
+        AvailabilityZoneState_Unavailable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype AvailabilityZoneState = AvailabilityZoneState'
+  { fromAvailabilityZoneState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern AvailabilityZoneState_Available :: AvailabilityZoneState
+pattern AvailabilityZoneState_Available = AvailabilityZoneState' "available"
+
+pattern AvailabilityZoneState_Impaired :: AvailabilityZoneState
+pattern AvailabilityZoneState_Impaired = AvailabilityZoneState' "impaired"
+
+pattern AvailabilityZoneState_Information :: AvailabilityZoneState
+pattern AvailabilityZoneState_Information = AvailabilityZoneState' "information"
+
+pattern AvailabilityZoneState_Unavailable :: AvailabilityZoneState
+pattern AvailabilityZoneState_Unavailable = AvailabilityZoneState' "unavailable"
+
+{-# COMPLETE
+  AvailabilityZoneState_Available,
+  AvailabilityZoneState_Impaired,
+  AvailabilityZoneState_Information,
+  AvailabilityZoneState_Unavailable,
+  AvailabilityZoneState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/AvailableCapacity.hs b/gen/Amazonka/EC2/Types/AvailableCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/AvailableCapacity.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.AvailableCapacity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.AvailableCapacity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceCapacity
+import qualified Amazonka.Prelude as Prelude
+
+-- | The capacity information for instances that can be launched onto the
+-- Dedicated Host.
+--
+-- /See:/ 'newAvailableCapacity' smart constructor.
+data AvailableCapacity = AvailableCapacity'
+  { -- | The number of instances that can be launched onto the Dedicated Host
+    -- depending on the host\'s available capacity. For Dedicated Hosts that
+    -- support multiple instance types, this parameter represents the number of
+    -- instances for each instance size that is supported on the host.
+    availableInstanceCapacity :: Prelude.Maybe [InstanceCapacity],
+    -- | The number of vCPUs available for launching instances onto the Dedicated
+    -- Host.
+    availableVCpus :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AvailableCapacity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availableInstanceCapacity', 'availableCapacity_availableInstanceCapacity' - The number of instances that can be launched onto the Dedicated Host
+-- depending on the host\'s available capacity. For Dedicated Hosts that
+-- support multiple instance types, this parameter represents the number of
+-- instances for each instance size that is supported on the host.
+--
+-- 'availableVCpus', 'availableCapacity_availableVCpus' - The number of vCPUs available for launching instances onto the Dedicated
+-- Host.
+newAvailableCapacity ::
+  AvailableCapacity
+newAvailableCapacity =
+  AvailableCapacity'
+    { availableInstanceCapacity =
+        Prelude.Nothing,
+      availableVCpus = Prelude.Nothing
+    }
+
+-- | The number of instances that can be launched onto the Dedicated Host
+-- depending on the host\'s available capacity. For Dedicated Hosts that
+-- support multiple instance types, this parameter represents the number of
+-- instances for each instance size that is supported on the host.
+availableCapacity_availableInstanceCapacity :: Lens.Lens' AvailableCapacity (Prelude.Maybe [InstanceCapacity])
+availableCapacity_availableInstanceCapacity = Lens.lens (\AvailableCapacity' {availableInstanceCapacity} -> availableInstanceCapacity) (\s@AvailableCapacity' {} a -> s {availableInstanceCapacity = a} :: AvailableCapacity) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of vCPUs available for launching instances onto the Dedicated
+-- Host.
+availableCapacity_availableVCpus :: Lens.Lens' AvailableCapacity (Prelude.Maybe Prelude.Int)
+availableCapacity_availableVCpus = Lens.lens (\AvailableCapacity' {availableVCpus} -> availableVCpus) (\s@AvailableCapacity' {} a -> s {availableVCpus = a} :: AvailableCapacity)
+
+instance Data.FromXML AvailableCapacity where
+  parseXML x =
+    AvailableCapacity'
+      Prelude.<$> ( x
+                      Data..@? "availableInstanceCapacity"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "availableVCpus")
+
+instance Prelude.Hashable AvailableCapacity where
+  hashWithSalt _salt AvailableCapacity' {..} =
+    _salt
+      `Prelude.hashWithSalt` availableInstanceCapacity
+      `Prelude.hashWithSalt` availableVCpus
+
+instance Prelude.NFData AvailableCapacity where
+  rnf AvailableCapacity' {..} =
+    Prelude.rnf availableInstanceCapacity
+      `Prelude.seq` Prelude.rnf availableVCpus
diff --git a/gen/Amazonka/EC2/Types/BareMetal.hs b/gen/Amazonka/EC2/Types/BareMetal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BareMetal.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BareMetal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BareMetal
+  ( BareMetal
+      ( ..,
+        BareMetal_Excluded,
+        BareMetal_Included,
+        BareMetal_Required
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BareMetal = BareMetal'
+  { fromBareMetal ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BareMetal_Excluded :: BareMetal
+pattern BareMetal_Excluded = BareMetal' "excluded"
+
+pattern BareMetal_Included :: BareMetal
+pattern BareMetal_Included = BareMetal' "included"
+
+pattern BareMetal_Required :: BareMetal
+pattern BareMetal_Required = BareMetal' "required"
+
+{-# COMPLETE
+  BareMetal_Excluded,
+  BareMetal_Included,
+  BareMetal_Required,
+  BareMetal'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/BaselineEbsBandwidthMbps.hs b/gen/Amazonka/EC2/Types/BaselineEbsBandwidthMbps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BaselineEbsBandwidthMbps.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BaselineEbsBandwidthMbps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BaselineEbsBandwidthMbps where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newBaselineEbsBandwidthMbps' smart constructor.
+data BaselineEbsBandwidthMbps = BaselineEbsBandwidthMbps'
+  { -- | The maximum baseline bandwidth, in Mbps. If this parameter is not
+    -- specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum baseline bandwidth, in Mbps. If this parameter is not
+    -- specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BaselineEbsBandwidthMbps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'baselineEbsBandwidthMbps_max' - The maximum baseline bandwidth, in Mbps. If this parameter is not
+-- specified, there is no maximum limit.
+--
+-- 'min', 'baselineEbsBandwidthMbps_min' - The minimum baseline bandwidth, in Mbps. If this parameter is not
+-- specified, there is no minimum limit.
+newBaselineEbsBandwidthMbps ::
+  BaselineEbsBandwidthMbps
+newBaselineEbsBandwidthMbps =
+  BaselineEbsBandwidthMbps'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum baseline bandwidth, in Mbps. If this parameter is not
+-- specified, there is no maximum limit.
+baselineEbsBandwidthMbps_max :: Lens.Lens' BaselineEbsBandwidthMbps (Prelude.Maybe Prelude.Int)
+baselineEbsBandwidthMbps_max = Lens.lens (\BaselineEbsBandwidthMbps' {max} -> max) (\s@BaselineEbsBandwidthMbps' {} a -> s {max = a} :: BaselineEbsBandwidthMbps)
+
+-- | The minimum baseline bandwidth, in Mbps. If this parameter is not
+-- specified, there is no minimum limit.
+baselineEbsBandwidthMbps_min :: Lens.Lens' BaselineEbsBandwidthMbps (Prelude.Maybe Prelude.Int)
+baselineEbsBandwidthMbps_min = Lens.lens (\BaselineEbsBandwidthMbps' {min} -> min) (\s@BaselineEbsBandwidthMbps' {} a -> s {min = a} :: BaselineEbsBandwidthMbps)
+
+instance Data.FromXML BaselineEbsBandwidthMbps where
+  parseXML x =
+    BaselineEbsBandwidthMbps'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable BaselineEbsBandwidthMbps where
+  hashWithSalt _salt BaselineEbsBandwidthMbps' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData BaselineEbsBandwidthMbps where
+  rnf BaselineEbsBandwidthMbps' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery BaselineEbsBandwidthMbps where
+  toQuery BaselineEbsBandwidthMbps' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/BaselineEbsBandwidthMbpsRequest.hs b/gen/Amazonka/EC2/Types/BaselineEbsBandwidthMbpsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BaselineEbsBandwidthMbpsRequest.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newBaselineEbsBandwidthMbpsRequest' smart constructor.
+data BaselineEbsBandwidthMbpsRequest = BaselineEbsBandwidthMbpsRequest'
+  { -- | The maximum baseline bandwidth, in Mbps. To specify no maximum limit,
+    -- omit this parameter.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum baseline bandwidth, in Mbps. To specify no minimum limit,
+    -- omit this parameter.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BaselineEbsBandwidthMbpsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'baselineEbsBandwidthMbpsRequest_max' - The maximum baseline bandwidth, in Mbps. To specify no maximum limit,
+-- omit this parameter.
+--
+-- 'min', 'baselineEbsBandwidthMbpsRequest_min' - The minimum baseline bandwidth, in Mbps. To specify no minimum limit,
+-- omit this parameter.
+newBaselineEbsBandwidthMbpsRequest ::
+  BaselineEbsBandwidthMbpsRequest
+newBaselineEbsBandwidthMbpsRequest =
+  BaselineEbsBandwidthMbpsRequest'
+    { max =
+        Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum baseline bandwidth, in Mbps. To specify no maximum limit,
+-- omit this parameter.
+baselineEbsBandwidthMbpsRequest_max :: Lens.Lens' BaselineEbsBandwidthMbpsRequest (Prelude.Maybe Prelude.Int)
+baselineEbsBandwidthMbpsRequest_max = Lens.lens (\BaselineEbsBandwidthMbpsRequest' {max} -> max) (\s@BaselineEbsBandwidthMbpsRequest' {} a -> s {max = a} :: BaselineEbsBandwidthMbpsRequest)
+
+-- | The minimum baseline bandwidth, in Mbps. To specify no minimum limit,
+-- omit this parameter.
+baselineEbsBandwidthMbpsRequest_min :: Lens.Lens' BaselineEbsBandwidthMbpsRequest (Prelude.Maybe Prelude.Int)
+baselineEbsBandwidthMbpsRequest_min = Lens.lens (\BaselineEbsBandwidthMbpsRequest' {min} -> min) (\s@BaselineEbsBandwidthMbpsRequest' {} a -> s {min = a} :: BaselineEbsBandwidthMbpsRequest)
+
+instance
+  Prelude.Hashable
+    BaselineEbsBandwidthMbpsRequest
+  where
+  hashWithSalt
+    _salt
+    BaselineEbsBandwidthMbpsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` max
+        `Prelude.hashWithSalt` min
+
+instance
+  Prelude.NFData
+    BaselineEbsBandwidthMbpsRequest
+  where
+  rnf BaselineEbsBandwidthMbpsRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery BaselineEbsBandwidthMbpsRequest where
+  toQuery BaselineEbsBandwidthMbpsRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/BatchState.hs b/gen/Amazonka/EC2/Types/BatchState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BatchState.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BatchState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BatchState
+  ( BatchState
+      ( ..,
+        BatchState_Active,
+        BatchState_Cancelled,
+        BatchState_Cancelled_running,
+        BatchState_Cancelled_terminating,
+        BatchState_Failed,
+        BatchState_Modifying,
+        BatchState_Submitted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BatchState = BatchState'
+  { fromBatchState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BatchState_Active :: BatchState
+pattern BatchState_Active = BatchState' "active"
+
+pattern BatchState_Cancelled :: BatchState
+pattern BatchState_Cancelled = BatchState' "cancelled"
+
+pattern BatchState_Cancelled_running :: BatchState
+pattern BatchState_Cancelled_running = BatchState' "cancelled_running"
+
+pattern BatchState_Cancelled_terminating :: BatchState
+pattern BatchState_Cancelled_terminating = BatchState' "cancelled_terminating"
+
+pattern BatchState_Failed :: BatchState
+pattern BatchState_Failed = BatchState' "failed"
+
+pattern BatchState_Modifying :: BatchState
+pattern BatchState_Modifying = BatchState' "modifying"
+
+pattern BatchState_Submitted :: BatchState
+pattern BatchState_Submitted = BatchState' "submitted"
+
+{-# COMPLETE
+  BatchState_Active,
+  BatchState_Cancelled,
+  BatchState_Cancelled_running,
+  BatchState_Cancelled_terminating,
+  BatchState_Failed,
+  BatchState_Modifying,
+  BatchState_Submitted,
+  BatchState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/BgpStatus.hs b/gen/Amazonka/EC2/Types/BgpStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BgpStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BgpStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BgpStatus
+  ( BgpStatus
+      ( ..,
+        BgpStatus_Down,
+        BgpStatus_Up
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BgpStatus = BgpStatus'
+  { fromBgpStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BgpStatus_Down :: BgpStatus
+pattern BgpStatus_Down = BgpStatus' "down"
+
+pattern BgpStatus_Up :: BgpStatus
+pattern BgpStatus_Up = BgpStatus' "up"
+
+{-# COMPLETE
+  BgpStatus_Down,
+  BgpStatus_Up,
+  BgpStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/BlobAttributeValue.hs b/gen/Amazonka/EC2/Types/BlobAttributeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BlobAttributeValue.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BlobAttributeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BlobAttributeValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newBlobAttributeValue' smart constructor.
+data BlobAttributeValue = BlobAttributeValue'
+  { value :: Prelude.Maybe Data.Base64
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BlobAttributeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'blobAttributeValue_value' - Undocumented member.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+newBlobAttributeValue ::
+  BlobAttributeValue
+newBlobAttributeValue =
+  BlobAttributeValue' {value = Prelude.Nothing}
+
+-- | Undocumented member.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+blobAttributeValue_value :: Lens.Lens' BlobAttributeValue (Prelude.Maybe Prelude.ByteString)
+blobAttributeValue_value = Lens.lens (\BlobAttributeValue' {value} -> value) (\s@BlobAttributeValue' {} a -> s {value = a} :: BlobAttributeValue) Prelude.. Lens.mapping Data._Base64
+
+instance Prelude.Hashable BlobAttributeValue where
+  hashWithSalt _salt BlobAttributeValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData BlobAttributeValue where
+  rnf BlobAttributeValue' {..} = Prelude.rnf value
+
+instance Data.ToQuery BlobAttributeValue where
+  toQuery BlobAttributeValue' {..} =
+    Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/BlockDeviceMapping.hs b/gen/Amazonka/EC2/Types/BlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BlockDeviceMapping.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BlockDeviceMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BlockDeviceMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EbsBlockDevice
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device mapping, which defines the EBS volumes and
+-- instance store volumes to attach to an instance at launch.
+--
+-- /See:/ 'newBlockDeviceMapping' smart constructor.
+data BlockDeviceMapping = BlockDeviceMapping'
+  { -- | Parameters used to automatically set up EBS volumes when the instance is
+    -- launched.
+    ebs :: Prelude.Maybe EbsBlockDevice,
+    -- | To omit the device from the block device mapping, specify an empty
+    -- string. When this property is specified, the device is removed from the
+    -- block device mapping regardless of the assigned value.
+    noDevice :: Prelude.Maybe Prelude.Text,
+    -- | The virtual device name (@ephemeral@N). 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.
+    --
+    -- NVMe instance store volumes are automatically enumerated and assigned a
+    -- device name. Including them in your block device mapping has no effect.
+    --
+    -- Constraints: For M3 instances, you must specify instance store volumes
+    -- in the block device mapping for the instance. When you launch an M3
+    -- instance, we ignore any instance store volumes specified in the block
+    -- device mapping for the AMI.
+    virtualName :: Prelude.Maybe Prelude.Text,
+    -- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+    deviceName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BlockDeviceMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebs', 'blockDeviceMapping_ebs' - Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+--
+-- 'noDevice', 'blockDeviceMapping_noDevice' - To omit the device from the block device mapping, specify an empty
+-- string. When this property is specified, the device is removed from the
+-- block device mapping regardless of the assigned value.
+--
+-- 'virtualName', 'blockDeviceMapping_virtualName' - The virtual device name (@ephemeral@N). 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.
+--
+-- NVMe instance store volumes are automatically enumerated and assigned a
+-- device name. Including them in your block device mapping has no effect.
+--
+-- Constraints: For M3 instances, you must specify instance store volumes
+-- in the block device mapping for the instance. When you launch an M3
+-- instance, we ignore any instance store volumes specified in the block
+-- device mapping for the AMI.
+--
+-- 'deviceName', 'blockDeviceMapping_deviceName' - The device name (for example, @\/dev\/sdh@ or @xvdh@).
+newBlockDeviceMapping ::
+  -- | 'deviceName'
+  Prelude.Text ->
+  BlockDeviceMapping
+newBlockDeviceMapping pDeviceName_ =
+  BlockDeviceMapping'
+    { ebs = Prelude.Nothing,
+      noDevice = Prelude.Nothing,
+      virtualName = Prelude.Nothing,
+      deviceName = pDeviceName_
+    }
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+blockDeviceMapping_ebs :: Lens.Lens' BlockDeviceMapping (Prelude.Maybe EbsBlockDevice)
+blockDeviceMapping_ebs = Lens.lens (\BlockDeviceMapping' {ebs} -> ebs) (\s@BlockDeviceMapping' {} a -> s {ebs = a} :: BlockDeviceMapping)
+
+-- | To omit the device from the block device mapping, specify an empty
+-- string. When this property is specified, the device is removed from the
+-- block device mapping regardless of the assigned value.
+blockDeviceMapping_noDevice :: Lens.Lens' BlockDeviceMapping (Prelude.Maybe Prelude.Text)
+blockDeviceMapping_noDevice = Lens.lens (\BlockDeviceMapping' {noDevice} -> noDevice) (\s@BlockDeviceMapping' {} a -> s {noDevice = a} :: BlockDeviceMapping)
+
+-- | The virtual device name (@ephemeral@N). 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.
+--
+-- NVMe instance store volumes are automatically enumerated and assigned a
+-- device name. Including them in your block device mapping has no effect.
+--
+-- Constraints: For M3 instances, you must specify instance store volumes
+-- in the block device mapping for the instance. When you launch an M3
+-- instance, we ignore any instance store volumes specified in the block
+-- device mapping for the AMI.
+blockDeviceMapping_virtualName :: Lens.Lens' BlockDeviceMapping (Prelude.Maybe Prelude.Text)
+blockDeviceMapping_virtualName = Lens.lens (\BlockDeviceMapping' {virtualName} -> virtualName) (\s@BlockDeviceMapping' {} a -> s {virtualName = a} :: BlockDeviceMapping)
+
+-- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+blockDeviceMapping_deviceName :: Lens.Lens' BlockDeviceMapping Prelude.Text
+blockDeviceMapping_deviceName = Lens.lens (\BlockDeviceMapping' {deviceName} -> deviceName) (\s@BlockDeviceMapping' {} a -> s {deviceName = a} :: BlockDeviceMapping)
+
+instance Data.FromXML BlockDeviceMapping where
+  parseXML x =
+    BlockDeviceMapping'
+      Prelude.<$> (x Data..@? "ebs")
+      Prelude.<*> (x Data..@? "noDevice")
+      Prelude.<*> (x Data..@? "virtualName")
+      Prelude.<*> (x Data..@ "deviceName")
+
+instance Prelude.Hashable BlockDeviceMapping where
+  hashWithSalt _salt BlockDeviceMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` ebs
+      `Prelude.hashWithSalt` noDevice
+      `Prelude.hashWithSalt` virtualName
+      `Prelude.hashWithSalt` deviceName
+
+instance Prelude.NFData BlockDeviceMapping where
+  rnf BlockDeviceMapping' {..} =
+    Prelude.rnf ebs
+      `Prelude.seq` Prelude.rnf noDevice
+      `Prelude.seq` Prelude.rnf virtualName
+      `Prelude.seq` Prelude.rnf deviceName
+
+instance Data.ToQuery BlockDeviceMapping where
+  toQuery BlockDeviceMapping' {..} =
+    Prelude.mconcat
+      [ "Ebs" Data.=: ebs,
+        "NoDevice" Data.=: noDevice,
+        "VirtualName" Data.=: virtualName,
+        "DeviceName" Data.=: deviceName
+      ]
diff --git a/gen/Amazonka/EC2/Types/BootModeType.hs b/gen/Amazonka/EC2/Types/BootModeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BootModeType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BootModeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BootModeType
+  ( BootModeType
+      ( ..,
+        BootModeType_Legacy_bios,
+        BootModeType_Uefi
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BootModeType = BootModeType'
+  { fromBootModeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BootModeType_Legacy_bios :: BootModeType
+pattern BootModeType_Legacy_bios = BootModeType' "legacy-bios"
+
+pattern BootModeType_Uefi :: BootModeType
+pattern BootModeType_Uefi = BootModeType' "uefi"
+
+{-# COMPLETE
+  BootModeType_Legacy_bios,
+  BootModeType_Uefi,
+  BootModeType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/BootModeValues.hs b/gen/Amazonka/EC2/Types/BootModeValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BootModeValues.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BootModeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BootModeValues
+  ( BootModeValues
+      ( ..,
+        BootModeValues_Legacy_bios,
+        BootModeValues_Uefi
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BootModeValues = BootModeValues'
+  { fromBootModeValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BootModeValues_Legacy_bios :: BootModeValues
+pattern BootModeValues_Legacy_bios = BootModeValues' "legacy-bios"
+
+pattern BootModeValues_Uefi :: BootModeValues
+pattern BootModeValues_Uefi = BootModeValues' "uefi"
+
+{-# COMPLETE
+  BootModeValues_Legacy_bios,
+  BootModeValues_Uefi,
+  BootModeValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/BundleTask.hs b/gen/Amazonka/EC2/Types/BundleTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BundleTask.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BundleTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BundleTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BundleTaskError
+import Amazonka.EC2.Types.BundleTaskState
+import Amazonka.EC2.Types.Storage
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a bundle task.
+--
+-- /See:/ 'newBundleTask' smart constructor.
+data BundleTask = BundleTask'
+  { -- | If the task fails, a description of the error.
+    bundleTaskError :: Prelude.Maybe BundleTaskError,
+    -- | The ID of the bundle task.
+    bundleId :: Prelude.Text,
+    -- | The ID of the instance associated with this bundle task.
+    instanceId :: Prelude.Text,
+    -- | The level of task completion, as a percent (for example, 20%).
+    progress :: Prelude.Text,
+    -- | The time this task started.
+    startTime :: Data.ISO8601,
+    -- | The state of the task.
+    state :: BundleTaskState,
+    -- | The Amazon S3 storage locations.
+    storage :: Storage,
+    -- | The time of the most recent update for the task.
+    updateTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BundleTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bundleTaskError', 'bundleTask_bundleTaskError' - If the task fails, a description of the error.
+--
+-- 'bundleId', 'bundleTask_bundleId' - The ID of the bundle task.
+--
+-- 'instanceId', 'bundleTask_instanceId' - The ID of the instance associated with this bundle task.
+--
+-- 'progress', 'bundleTask_progress' - The level of task completion, as a percent (for example, 20%).
+--
+-- 'startTime', 'bundleTask_startTime' - The time this task started.
+--
+-- 'state', 'bundleTask_state' - The state of the task.
+--
+-- 'storage', 'bundleTask_storage' - The Amazon S3 storage locations.
+--
+-- 'updateTime', 'bundleTask_updateTime' - The time of the most recent update for the task.
+newBundleTask ::
+  -- | 'bundleId'
+  Prelude.Text ->
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'progress'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'state'
+  BundleTaskState ->
+  -- | 'storage'
+  Storage ->
+  -- | 'updateTime'
+  Prelude.UTCTime ->
+  BundleTask
+newBundleTask
+  pBundleId_
+  pInstanceId_
+  pProgress_
+  pStartTime_
+  pState_
+  pStorage_
+  pUpdateTime_ =
+    BundleTask'
+      { bundleTaskError = Prelude.Nothing,
+        bundleId = pBundleId_,
+        instanceId = pInstanceId_,
+        progress = pProgress_,
+        startTime = Data._Time Lens.# pStartTime_,
+        state = pState_,
+        storage = pStorage_,
+        updateTime = Data._Time Lens.# pUpdateTime_
+      }
+
+-- | If the task fails, a description of the error.
+bundleTask_bundleTaskError :: Lens.Lens' BundleTask (Prelude.Maybe BundleTaskError)
+bundleTask_bundleTaskError = Lens.lens (\BundleTask' {bundleTaskError} -> bundleTaskError) (\s@BundleTask' {} a -> s {bundleTaskError = a} :: BundleTask)
+
+-- | The ID of the bundle task.
+bundleTask_bundleId :: Lens.Lens' BundleTask Prelude.Text
+bundleTask_bundleId = Lens.lens (\BundleTask' {bundleId} -> bundleId) (\s@BundleTask' {} a -> s {bundleId = a} :: BundleTask)
+
+-- | The ID of the instance associated with this bundle task.
+bundleTask_instanceId :: Lens.Lens' BundleTask Prelude.Text
+bundleTask_instanceId = Lens.lens (\BundleTask' {instanceId} -> instanceId) (\s@BundleTask' {} a -> s {instanceId = a} :: BundleTask)
+
+-- | The level of task completion, as a percent (for example, 20%).
+bundleTask_progress :: Lens.Lens' BundleTask Prelude.Text
+bundleTask_progress = Lens.lens (\BundleTask' {progress} -> progress) (\s@BundleTask' {} a -> s {progress = a} :: BundleTask)
+
+-- | The time this task started.
+bundleTask_startTime :: Lens.Lens' BundleTask Prelude.UTCTime
+bundleTask_startTime = Lens.lens (\BundleTask' {startTime} -> startTime) (\s@BundleTask' {} a -> s {startTime = a} :: BundleTask) Prelude.. Data._Time
+
+-- | The state of the task.
+bundleTask_state :: Lens.Lens' BundleTask BundleTaskState
+bundleTask_state = Lens.lens (\BundleTask' {state} -> state) (\s@BundleTask' {} a -> s {state = a} :: BundleTask)
+
+-- | The Amazon S3 storage locations.
+bundleTask_storage :: Lens.Lens' BundleTask Storage
+bundleTask_storage = Lens.lens (\BundleTask' {storage} -> storage) (\s@BundleTask' {} a -> s {storage = a} :: BundleTask)
+
+-- | The time of the most recent update for the task.
+bundleTask_updateTime :: Lens.Lens' BundleTask Prelude.UTCTime
+bundleTask_updateTime = Lens.lens (\BundleTask' {updateTime} -> updateTime) (\s@BundleTask' {} a -> s {updateTime = a} :: BundleTask) Prelude.. Data._Time
+
+instance Data.FromXML BundleTask where
+  parseXML x =
+    BundleTask'
+      Prelude.<$> (x Data..@? "error")
+      Prelude.<*> (x Data..@ "bundleId")
+      Prelude.<*> (x Data..@ "instanceId")
+      Prelude.<*> (x Data..@ "progress")
+      Prelude.<*> (x Data..@ "startTime")
+      Prelude.<*> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "storage")
+      Prelude.<*> (x Data..@ "updateTime")
+
+instance Prelude.Hashable BundleTask where
+  hashWithSalt _salt BundleTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` bundleTaskError
+      `Prelude.hashWithSalt` bundleId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` storage
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData BundleTask where
+  rnf BundleTask' {..} =
+    Prelude.rnf bundleTaskError
+      `Prelude.seq` Prelude.rnf bundleId
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf storage
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/EC2/Types/BundleTaskError.hs b/gen/Amazonka/EC2/Types/BundleTaskError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BundleTaskError.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BundleTaskError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BundleTaskError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an error for BundleInstance.
+--
+-- /See:/ 'newBundleTaskError' smart constructor.
+data BundleTaskError = BundleTaskError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BundleTaskError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'bundleTaskError_code' - The error code.
+--
+-- 'message', 'bundleTaskError_message' - The error message.
+newBundleTaskError ::
+  BundleTaskError
+newBundleTaskError =
+  BundleTaskError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+bundleTaskError_code :: Lens.Lens' BundleTaskError (Prelude.Maybe Prelude.Text)
+bundleTaskError_code = Lens.lens (\BundleTaskError' {code} -> code) (\s@BundleTaskError' {} a -> s {code = a} :: BundleTaskError)
+
+-- | The error message.
+bundleTaskError_message :: Lens.Lens' BundleTaskError (Prelude.Maybe Prelude.Text)
+bundleTaskError_message = Lens.lens (\BundleTaskError' {message} -> message) (\s@BundleTaskError' {} a -> s {message = a} :: BundleTaskError)
+
+instance Data.FromXML BundleTaskError where
+  parseXML x =
+    BundleTaskError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable BundleTaskError where
+  hashWithSalt _salt BundleTaskError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData BundleTaskError where
+  rnf BundleTaskError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/BundleTaskState.hs b/gen/Amazonka/EC2/Types/BundleTaskState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BundleTaskState.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BundleTaskState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BundleTaskState
+  ( BundleTaskState
+      ( ..,
+        BundleTaskState_Bundling,
+        BundleTaskState_Cancelling,
+        BundleTaskState_Complete,
+        BundleTaskState_Failed,
+        BundleTaskState_Pending,
+        BundleTaskState_Storing,
+        BundleTaskState_Waiting_for_shutdown
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BundleTaskState = BundleTaskState'
+  { fromBundleTaskState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BundleTaskState_Bundling :: BundleTaskState
+pattern BundleTaskState_Bundling = BundleTaskState' "bundling"
+
+pattern BundleTaskState_Cancelling :: BundleTaskState
+pattern BundleTaskState_Cancelling = BundleTaskState' "cancelling"
+
+pattern BundleTaskState_Complete :: BundleTaskState
+pattern BundleTaskState_Complete = BundleTaskState' "complete"
+
+pattern BundleTaskState_Failed :: BundleTaskState
+pattern BundleTaskState_Failed = BundleTaskState' "failed"
+
+pattern BundleTaskState_Pending :: BundleTaskState
+pattern BundleTaskState_Pending = BundleTaskState' "pending"
+
+pattern BundleTaskState_Storing :: BundleTaskState
+pattern BundleTaskState_Storing = BundleTaskState' "storing"
+
+pattern BundleTaskState_Waiting_for_shutdown :: BundleTaskState
+pattern BundleTaskState_Waiting_for_shutdown = BundleTaskState' "waiting-for-shutdown"
+
+{-# COMPLETE
+  BundleTaskState_Bundling,
+  BundleTaskState_Cancelling,
+  BundleTaskState_Complete,
+  BundleTaskState_Failed,
+  BundleTaskState_Pending,
+  BundleTaskState_Storing,
+  BundleTaskState_Waiting_for_shutdown,
+  BundleTaskState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/BurstablePerformance.hs b/gen/Amazonka/EC2/Types/BurstablePerformance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/BurstablePerformance.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.BurstablePerformance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.BurstablePerformance
+  ( BurstablePerformance
+      ( ..,
+        BurstablePerformance_Excluded,
+        BurstablePerformance_Included,
+        BurstablePerformance_Required
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype BurstablePerformance = BurstablePerformance'
+  { fromBurstablePerformance ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern BurstablePerformance_Excluded :: BurstablePerformance
+pattern BurstablePerformance_Excluded = BurstablePerformance' "excluded"
+
+pattern BurstablePerformance_Included :: BurstablePerformance
+pattern BurstablePerformance_Included = BurstablePerformance' "included"
+
+pattern BurstablePerformance_Required :: BurstablePerformance
+pattern BurstablePerformance_Required = BurstablePerformance' "required"
+
+{-# COMPLETE
+  BurstablePerformance_Excluded,
+  BurstablePerformance_Included,
+  BurstablePerformance_Required,
+  BurstablePerformance'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ByoipCidr.hs b/gen/Amazonka/EC2/Types/ByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ByoipCidr.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ByoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ByoipCidr where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ByoipCidrState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an address range that is provisioned for use with your
+-- Amazon Web Services resources through bring your own IP addresses
+-- (BYOIP).
+--
+-- /See:/ 'newByoipCidr' smart constructor.
+data ByoipCidr = ByoipCidr'
+  { -- | The address range, in CIDR notation.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | The description of the address range.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The state of the address pool.
+    state :: Prelude.Maybe ByoipCidrState,
+    -- | Upon success, contains the ID of the address pool. Otherwise, contains
+    -- an error message.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ByoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'byoipCidr_cidr' - The address range, in CIDR notation.
+--
+-- 'description', 'byoipCidr_description' - The description of the address range.
+--
+-- 'state', 'byoipCidr_state' - The state of the address pool.
+--
+-- 'statusMessage', 'byoipCidr_statusMessage' - Upon success, contains the ID of the address pool. Otherwise, contains
+-- an error message.
+newByoipCidr ::
+  ByoipCidr
+newByoipCidr =
+  ByoipCidr'
+    { cidr = Prelude.Nothing,
+      description = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The address range, in CIDR notation.
+byoipCidr_cidr :: Lens.Lens' ByoipCidr (Prelude.Maybe Prelude.Text)
+byoipCidr_cidr = Lens.lens (\ByoipCidr' {cidr} -> cidr) (\s@ByoipCidr' {} a -> s {cidr = a} :: ByoipCidr)
+
+-- | The description of the address range.
+byoipCidr_description :: Lens.Lens' ByoipCidr (Prelude.Maybe Prelude.Text)
+byoipCidr_description = Lens.lens (\ByoipCidr' {description} -> description) (\s@ByoipCidr' {} a -> s {description = a} :: ByoipCidr)
+
+-- | The state of the address pool.
+byoipCidr_state :: Lens.Lens' ByoipCidr (Prelude.Maybe ByoipCidrState)
+byoipCidr_state = Lens.lens (\ByoipCidr' {state} -> state) (\s@ByoipCidr' {} a -> s {state = a} :: ByoipCidr)
+
+-- | Upon success, contains the ID of the address pool. Otherwise, contains
+-- an error message.
+byoipCidr_statusMessage :: Lens.Lens' ByoipCidr (Prelude.Maybe Prelude.Text)
+byoipCidr_statusMessage = Lens.lens (\ByoipCidr' {statusMessage} -> statusMessage) (\s@ByoipCidr' {} a -> s {statusMessage = a} :: ByoipCidr)
+
+instance Data.FromXML ByoipCidr where
+  parseXML x =
+    ByoipCidr'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "statusMessage")
+
+instance Prelude.Hashable ByoipCidr where
+  hashWithSalt _salt ByoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData ByoipCidr where
+  rnf ByoipCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/ByoipCidrState.hs b/gen/Amazonka/EC2/Types/ByoipCidrState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ByoipCidrState.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ByoipCidrState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ByoipCidrState
+  ( ByoipCidrState
+      ( ..,
+        ByoipCidrState_Advertised,
+        ByoipCidrState_Deprovisioned,
+        ByoipCidrState_Failed_deprovision,
+        ByoipCidrState_Failed_provision,
+        ByoipCidrState_Pending_deprovision,
+        ByoipCidrState_Pending_provision,
+        ByoipCidrState_Provisioned,
+        ByoipCidrState_Provisioned_not_publicly_advertisable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ByoipCidrState = ByoipCidrState'
+  { fromByoipCidrState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ByoipCidrState_Advertised :: ByoipCidrState
+pattern ByoipCidrState_Advertised = ByoipCidrState' "advertised"
+
+pattern ByoipCidrState_Deprovisioned :: ByoipCidrState
+pattern ByoipCidrState_Deprovisioned = ByoipCidrState' "deprovisioned"
+
+pattern ByoipCidrState_Failed_deprovision :: ByoipCidrState
+pattern ByoipCidrState_Failed_deprovision = ByoipCidrState' "failed-deprovision"
+
+pattern ByoipCidrState_Failed_provision :: ByoipCidrState
+pattern ByoipCidrState_Failed_provision = ByoipCidrState' "failed-provision"
+
+pattern ByoipCidrState_Pending_deprovision :: ByoipCidrState
+pattern ByoipCidrState_Pending_deprovision = ByoipCidrState' "pending-deprovision"
+
+pattern ByoipCidrState_Pending_provision :: ByoipCidrState
+pattern ByoipCidrState_Pending_provision = ByoipCidrState' "pending-provision"
+
+pattern ByoipCidrState_Provisioned :: ByoipCidrState
+pattern ByoipCidrState_Provisioned = ByoipCidrState' "provisioned"
+
+pattern ByoipCidrState_Provisioned_not_publicly_advertisable :: ByoipCidrState
+pattern ByoipCidrState_Provisioned_not_publicly_advertisable = ByoipCidrState' "provisioned-not-publicly-advertisable"
+
+{-# COMPLETE
+  ByoipCidrState_Advertised,
+  ByoipCidrState_Deprovisioned,
+  ByoipCidrState_Failed_deprovision,
+  ByoipCidrState_Failed_provision,
+  ByoipCidrState_Pending_deprovision,
+  ByoipCidrState_Pending_provision,
+  ByoipCidrState_Provisioned,
+  ByoipCidrState_Provisioned_not_publicly_advertisable,
+  ByoipCidrState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CancelBatchErrorCode.hs b/gen/Amazonka/EC2/Types/CancelBatchErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelBatchErrorCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelBatchErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelBatchErrorCode
+  ( CancelBatchErrorCode
+      ( ..,
+        CancelBatchErrorCode_FleetRequestIdDoesNotExist,
+        CancelBatchErrorCode_FleetRequestIdMalformed,
+        CancelBatchErrorCode_FleetRequestNotInCancellableState,
+        CancelBatchErrorCode_UnexpectedError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CancelBatchErrorCode = CancelBatchErrorCode'
+  { fromCancelBatchErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CancelBatchErrorCode_FleetRequestIdDoesNotExist :: CancelBatchErrorCode
+pattern CancelBatchErrorCode_FleetRequestIdDoesNotExist = CancelBatchErrorCode' "fleetRequestIdDoesNotExist"
+
+pattern CancelBatchErrorCode_FleetRequestIdMalformed :: CancelBatchErrorCode
+pattern CancelBatchErrorCode_FleetRequestIdMalformed = CancelBatchErrorCode' "fleetRequestIdMalformed"
+
+pattern CancelBatchErrorCode_FleetRequestNotInCancellableState :: CancelBatchErrorCode
+pattern CancelBatchErrorCode_FleetRequestNotInCancellableState = CancelBatchErrorCode' "fleetRequestNotInCancellableState"
+
+pattern CancelBatchErrorCode_UnexpectedError :: CancelBatchErrorCode
+pattern CancelBatchErrorCode_UnexpectedError = CancelBatchErrorCode' "unexpectedError"
+
+{-# COMPLETE
+  CancelBatchErrorCode_FleetRequestIdDoesNotExist,
+  CancelBatchErrorCode_FleetRequestIdMalformed,
+  CancelBatchErrorCode_FleetRequestNotInCancellableState,
+  CancelBatchErrorCode_UnexpectedError,
+  CancelBatchErrorCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CancelCapacityReservationFleetError.hs b/gen/Amazonka/EC2/Types/CancelCapacityReservationFleetError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelCapacityReservationFleetError.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelCapacityReservationFleetError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelCapacityReservationFleetError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Capacity Reservation Fleet cancellation error.
+--
+-- /See:/ 'newCancelCapacityReservationFleetError' smart constructor.
+data CancelCapacityReservationFleetError = CancelCapacityReservationFleetError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelCapacityReservationFleetError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'cancelCapacityReservationFleetError_code' - The error code.
+--
+-- 'message', 'cancelCapacityReservationFleetError_message' - The error message.
+newCancelCapacityReservationFleetError ::
+  CancelCapacityReservationFleetError
+newCancelCapacityReservationFleetError =
+  CancelCapacityReservationFleetError'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+cancelCapacityReservationFleetError_code :: Lens.Lens' CancelCapacityReservationFleetError (Prelude.Maybe Prelude.Text)
+cancelCapacityReservationFleetError_code = Lens.lens (\CancelCapacityReservationFleetError' {code} -> code) (\s@CancelCapacityReservationFleetError' {} a -> s {code = a} :: CancelCapacityReservationFleetError)
+
+-- | The error message.
+cancelCapacityReservationFleetError_message :: Lens.Lens' CancelCapacityReservationFleetError (Prelude.Maybe Prelude.Text)
+cancelCapacityReservationFleetError_message = Lens.lens (\CancelCapacityReservationFleetError' {message} -> message) (\s@CancelCapacityReservationFleetError' {} a -> s {message = a} :: CancelCapacityReservationFleetError)
+
+instance
+  Data.FromXML
+    CancelCapacityReservationFleetError
+  where
+  parseXML x =
+    CancelCapacityReservationFleetError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    CancelCapacityReservationFleetError
+  where
+  hashWithSalt
+    _salt
+    CancelCapacityReservationFleetError' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    CancelCapacityReservationFleetError
+  where
+  rnf CancelCapacityReservationFleetError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsError.hs b/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsError.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelSpotFleetRequestsError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelSpotFleetRequestsError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CancelBatchErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Spot Fleet error.
+--
+-- /See:/ 'newCancelSpotFleetRequestsError' smart constructor.
+data CancelSpotFleetRequestsError = CancelSpotFleetRequestsError'
+  { -- | The error code.
+    code :: Prelude.Maybe CancelBatchErrorCode,
+    -- | The description for the error code.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotFleetRequestsError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'cancelSpotFleetRequestsError_code' - The error code.
+--
+-- 'message', 'cancelSpotFleetRequestsError_message' - The description for the error code.
+newCancelSpotFleetRequestsError ::
+  CancelSpotFleetRequestsError
+newCancelSpotFleetRequestsError =
+  CancelSpotFleetRequestsError'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+cancelSpotFleetRequestsError_code :: Lens.Lens' CancelSpotFleetRequestsError (Prelude.Maybe CancelBatchErrorCode)
+cancelSpotFleetRequestsError_code = Lens.lens (\CancelSpotFleetRequestsError' {code} -> code) (\s@CancelSpotFleetRequestsError' {} a -> s {code = a} :: CancelSpotFleetRequestsError)
+
+-- | The description for the error code.
+cancelSpotFleetRequestsError_message :: Lens.Lens' CancelSpotFleetRequestsError (Prelude.Maybe Prelude.Text)
+cancelSpotFleetRequestsError_message = Lens.lens (\CancelSpotFleetRequestsError' {message} -> message) (\s@CancelSpotFleetRequestsError' {} a -> s {message = a} :: CancelSpotFleetRequestsError)
+
+instance Data.FromXML CancelSpotFleetRequestsError where
+  parseXML x =
+    CancelSpotFleetRequestsError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    CancelSpotFleetRequestsError
+  where
+  hashWithSalt _salt CancelSpotFleetRequestsError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData CancelSpotFleetRequestsError where
+  rnf CancelSpotFleetRequestsError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsErrorItem.hs b/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsErrorItem.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelSpotFleetRequestsErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelSpotFleetRequestsErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CancelSpotFleetRequestsError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Spot Fleet request that was not successfully canceled.
+--
+-- /See:/ 'newCancelSpotFleetRequestsErrorItem' smart constructor.
+data CancelSpotFleetRequestsErrorItem = CancelSpotFleetRequestsErrorItem'
+  { -- | The error.
+    error :: Prelude.Maybe CancelSpotFleetRequestsError,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotFleetRequestsErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'cancelSpotFleetRequestsErrorItem_error' - The error.
+--
+-- 'spotFleetRequestId', 'cancelSpotFleetRequestsErrorItem_spotFleetRequestId' - The ID of the Spot Fleet request.
+newCancelSpotFleetRequestsErrorItem ::
+  CancelSpotFleetRequestsErrorItem
+newCancelSpotFleetRequestsErrorItem =
+  CancelSpotFleetRequestsErrorItem'
+    { error =
+        Prelude.Nothing,
+      spotFleetRequestId = Prelude.Nothing
+    }
+
+-- | The error.
+cancelSpotFleetRequestsErrorItem_error :: Lens.Lens' CancelSpotFleetRequestsErrorItem (Prelude.Maybe CancelSpotFleetRequestsError)
+cancelSpotFleetRequestsErrorItem_error = Lens.lens (\CancelSpotFleetRequestsErrorItem' {error} -> error) (\s@CancelSpotFleetRequestsErrorItem' {} a -> s {error = a} :: CancelSpotFleetRequestsErrorItem)
+
+-- | The ID of the Spot Fleet request.
+cancelSpotFleetRequestsErrorItem_spotFleetRequestId :: Lens.Lens' CancelSpotFleetRequestsErrorItem (Prelude.Maybe Prelude.Text)
+cancelSpotFleetRequestsErrorItem_spotFleetRequestId = Lens.lens (\CancelSpotFleetRequestsErrorItem' {spotFleetRequestId} -> spotFleetRequestId) (\s@CancelSpotFleetRequestsErrorItem' {} a -> s {spotFleetRequestId = a} :: CancelSpotFleetRequestsErrorItem)
+
+instance
+  Data.FromXML
+    CancelSpotFleetRequestsErrorItem
+  where
+  parseXML x =
+    CancelSpotFleetRequestsErrorItem'
+      Prelude.<$> (x Data..@? "error")
+      Prelude.<*> (x Data..@? "spotFleetRequestId")
+
+instance
+  Prelude.Hashable
+    CancelSpotFleetRequestsErrorItem
+  where
+  hashWithSalt
+    _salt
+    CancelSpotFleetRequestsErrorItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` error
+        `Prelude.hashWithSalt` spotFleetRequestId
+
+instance
+  Prelude.NFData
+    CancelSpotFleetRequestsErrorItem
+  where
+  rnf CancelSpotFleetRequestsErrorItem' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
diff --git a/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsSuccessItem.hs b/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelSpotFleetRequestsSuccessItem.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelSpotFleetRequestsSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelSpotFleetRequestsSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BatchState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Spot Fleet request that was successfully canceled.
+--
+-- /See:/ 'newCancelSpotFleetRequestsSuccessItem' smart constructor.
+data CancelSpotFleetRequestsSuccessItem = CancelSpotFleetRequestsSuccessItem'
+  { -- | The current state of the Spot Fleet request.
+    currentSpotFleetRequestState :: Prelude.Maybe BatchState,
+    -- | The previous state of the Spot Fleet request.
+    previousSpotFleetRequestState :: Prelude.Maybe BatchState,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelSpotFleetRequestsSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currentSpotFleetRequestState', 'cancelSpotFleetRequestsSuccessItem_currentSpotFleetRequestState' - The current state of the Spot Fleet request.
+--
+-- 'previousSpotFleetRequestState', 'cancelSpotFleetRequestsSuccessItem_previousSpotFleetRequestState' - The previous state of the Spot Fleet request.
+--
+-- 'spotFleetRequestId', 'cancelSpotFleetRequestsSuccessItem_spotFleetRequestId' - The ID of the Spot Fleet request.
+newCancelSpotFleetRequestsSuccessItem ::
+  CancelSpotFleetRequestsSuccessItem
+newCancelSpotFleetRequestsSuccessItem =
+  CancelSpotFleetRequestsSuccessItem'
+    { currentSpotFleetRequestState =
+        Prelude.Nothing,
+      previousSpotFleetRequestState =
+        Prelude.Nothing,
+      spotFleetRequestId = Prelude.Nothing
+    }
+
+-- | The current state of the Spot Fleet request.
+cancelSpotFleetRequestsSuccessItem_currentSpotFleetRequestState :: Lens.Lens' CancelSpotFleetRequestsSuccessItem (Prelude.Maybe BatchState)
+cancelSpotFleetRequestsSuccessItem_currentSpotFleetRequestState = Lens.lens (\CancelSpotFleetRequestsSuccessItem' {currentSpotFleetRequestState} -> currentSpotFleetRequestState) (\s@CancelSpotFleetRequestsSuccessItem' {} a -> s {currentSpotFleetRequestState = a} :: CancelSpotFleetRequestsSuccessItem)
+
+-- | The previous state of the Spot Fleet request.
+cancelSpotFleetRequestsSuccessItem_previousSpotFleetRequestState :: Lens.Lens' CancelSpotFleetRequestsSuccessItem (Prelude.Maybe BatchState)
+cancelSpotFleetRequestsSuccessItem_previousSpotFleetRequestState = Lens.lens (\CancelSpotFleetRequestsSuccessItem' {previousSpotFleetRequestState} -> previousSpotFleetRequestState) (\s@CancelSpotFleetRequestsSuccessItem' {} a -> s {previousSpotFleetRequestState = a} :: CancelSpotFleetRequestsSuccessItem)
+
+-- | The ID of the Spot Fleet request.
+cancelSpotFleetRequestsSuccessItem_spotFleetRequestId :: Lens.Lens' CancelSpotFleetRequestsSuccessItem (Prelude.Maybe Prelude.Text)
+cancelSpotFleetRequestsSuccessItem_spotFleetRequestId = Lens.lens (\CancelSpotFleetRequestsSuccessItem' {spotFleetRequestId} -> spotFleetRequestId) (\s@CancelSpotFleetRequestsSuccessItem' {} a -> s {spotFleetRequestId = a} :: CancelSpotFleetRequestsSuccessItem)
+
+instance
+  Data.FromXML
+    CancelSpotFleetRequestsSuccessItem
+  where
+  parseXML x =
+    CancelSpotFleetRequestsSuccessItem'
+      Prelude.<$> (x Data..@? "currentSpotFleetRequestState")
+      Prelude.<*> (x Data..@? "previousSpotFleetRequestState")
+      Prelude.<*> (x Data..@? "spotFleetRequestId")
+
+instance
+  Prelude.Hashable
+    CancelSpotFleetRequestsSuccessItem
+  where
+  hashWithSalt
+    _salt
+    CancelSpotFleetRequestsSuccessItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` currentSpotFleetRequestState
+        `Prelude.hashWithSalt` previousSpotFleetRequestState
+        `Prelude.hashWithSalt` spotFleetRequestId
+
+instance
+  Prelude.NFData
+    CancelSpotFleetRequestsSuccessItem
+  where
+  rnf CancelSpotFleetRequestsSuccessItem' {..} =
+    Prelude.rnf currentSpotFleetRequestState
+      `Prelude.seq` Prelude.rnf previousSpotFleetRequestState
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
diff --git a/gen/Amazonka/EC2/Types/CancelSpotInstanceRequestState.hs b/gen/Amazonka/EC2/Types/CancelSpotInstanceRequestState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelSpotInstanceRequestState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelSpotInstanceRequestState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelSpotInstanceRequestState
+  ( CancelSpotInstanceRequestState
+      ( ..,
+        CancelSpotInstanceRequestState_Active,
+        CancelSpotInstanceRequestState_Cancelled,
+        CancelSpotInstanceRequestState_Closed,
+        CancelSpotInstanceRequestState_Completed,
+        CancelSpotInstanceRequestState_Open
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CancelSpotInstanceRequestState = CancelSpotInstanceRequestState'
+  { fromCancelSpotInstanceRequestState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CancelSpotInstanceRequestState_Active :: CancelSpotInstanceRequestState
+pattern CancelSpotInstanceRequestState_Active = CancelSpotInstanceRequestState' "active"
+
+pattern CancelSpotInstanceRequestState_Cancelled :: CancelSpotInstanceRequestState
+pattern CancelSpotInstanceRequestState_Cancelled = CancelSpotInstanceRequestState' "cancelled"
+
+pattern CancelSpotInstanceRequestState_Closed :: CancelSpotInstanceRequestState
+pattern CancelSpotInstanceRequestState_Closed = CancelSpotInstanceRequestState' "closed"
+
+pattern CancelSpotInstanceRequestState_Completed :: CancelSpotInstanceRequestState
+pattern CancelSpotInstanceRequestState_Completed = CancelSpotInstanceRequestState' "completed"
+
+pattern CancelSpotInstanceRequestState_Open :: CancelSpotInstanceRequestState
+pattern CancelSpotInstanceRequestState_Open = CancelSpotInstanceRequestState' "open"
+
+{-# COMPLETE
+  CancelSpotInstanceRequestState_Active,
+  CancelSpotInstanceRequestState_Cancelled,
+  CancelSpotInstanceRequestState_Closed,
+  CancelSpotInstanceRequestState_Completed,
+  CancelSpotInstanceRequestState_Open,
+  CancelSpotInstanceRequestState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CancelledSpotInstanceRequest.hs b/gen/Amazonka/EC2/Types/CancelledSpotInstanceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CancelledSpotInstanceRequest.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CancelledSpotInstanceRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CancelledSpotInstanceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CancelSpotInstanceRequestState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a request to cancel a Spot Instance.
+--
+-- /See:/ 'newCancelledSpotInstanceRequest' smart constructor.
+data CancelledSpotInstanceRequest = CancelledSpotInstanceRequest'
+  { -- | The ID of the Spot Instance request.
+    spotInstanceRequestId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Spot Instance request.
+    state :: Prelude.Maybe CancelSpotInstanceRequestState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelledSpotInstanceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'spotInstanceRequestId', 'cancelledSpotInstanceRequest_spotInstanceRequestId' - The ID of the Spot Instance request.
+--
+-- 'state', 'cancelledSpotInstanceRequest_state' - The state of the Spot Instance request.
+newCancelledSpotInstanceRequest ::
+  CancelledSpotInstanceRequest
+newCancelledSpotInstanceRequest =
+  CancelledSpotInstanceRequest'
+    { spotInstanceRequestId =
+        Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The ID of the Spot Instance request.
+cancelledSpotInstanceRequest_spotInstanceRequestId :: Lens.Lens' CancelledSpotInstanceRequest (Prelude.Maybe Prelude.Text)
+cancelledSpotInstanceRequest_spotInstanceRequestId = Lens.lens (\CancelledSpotInstanceRequest' {spotInstanceRequestId} -> spotInstanceRequestId) (\s@CancelledSpotInstanceRequest' {} a -> s {spotInstanceRequestId = a} :: CancelledSpotInstanceRequest)
+
+-- | The state of the Spot Instance request.
+cancelledSpotInstanceRequest_state :: Lens.Lens' CancelledSpotInstanceRequest (Prelude.Maybe CancelSpotInstanceRequestState)
+cancelledSpotInstanceRequest_state = Lens.lens (\CancelledSpotInstanceRequest' {state} -> state) (\s@CancelledSpotInstanceRequest' {} a -> s {state = a} :: CancelledSpotInstanceRequest)
+
+instance Data.FromXML CancelledSpotInstanceRequest where
+  parseXML x =
+    CancelledSpotInstanceRequest'
+      Prelude.<$> (x Data..@? "spotInstanceRequestId")
+      Prelude.<*> (x Data..@? "state")
+
+instance
+  Prelude.Hashable
+    CancelledSpotInstanceRequest
+  where
+  hashWithSalt _salt CancelledSpotInstanceRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` spotInstanceRequestId
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData CancelledSpotInstanceRequest where
+  rnf CancelledSpotInstanceRequest' {..} =
+    Prelude.rnf spotInstanceRequestId
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/CapacityAllocation.hs b/gen/Amazonka/EC2/Types/CapacityAllocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityAllocation.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityAllocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityAllocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AllocationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about instance capacity usage for a Capacity Reservation.
+--
+-- /See:/ 'newCapacityAllocation' smart constructor.
+data CapacityAllocation = CapacityAllocation'
+  { -- | The usage type. @used@ indicates that the instance capacity is in use by
+    -- instances that are running in the Capacity Reservation.
+    allocationType :: Prelude.Maybe AllocationType,
+    -- | The amount of instance capacity associated with the usage. For example a
+    -- value of @4@ indicates that instance capacity for 4 instances is
+    -- currently in use.
+    count :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityAllocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationType', 'capacityAllocation_allocationType' - The usage type. @used@ indicates that the instance capacity is in use by
+-- instances that are running in the Capacity Reservation.
+--
+-- 'count', 'capacityAllocation_count' - The amount of instance capacity associated with the usage. For example a
+-- value of @4@ indicates that instance capacity for 4 instances is
+-- currently in use.
+newCapacityAllocation ::
+  CapacityAllocation
+newCapacityAllocation =
+  CapacityAllocation'
+    { allocationType =
+        Prelude.Nothing,
+      count = Prelude.Nothing
+    }
+
+-- | The usage type. @used@ indicates that the instance capacity is in use by
+-- instances that are running in the Capacity Reservation.
+capacityAllocation_allocationType :: Lens.Lens' CapacityAllocation (Prelude.Maybe AllocationType)
+capacityAllocation_allocationType = Lens.lens (\CapacityAllocation' {allocationType} -> allocationType) (\s@CapacityAllocation' {} a -> s {allocationType = a} :: CapacityAllocation)
+
+-- | The amount of instance capacity associated with the usage. For example a
+-- value of @4@ indicates that instance capacity for 4 instances is
+-- currently in use.
+capacityAllocation_count :: Lens.Lens' CapacityAllocation (Prelude.Maybe Prelude.Int)
+capacityAllocation_count = Lens.lens (\CapacityAllocation' {count} -> count) (\s@CapacityAllocation' {} a -> s {count = a} :: CapacityAllocation)
+
+instance Data.FromXML CapacityAllocation where
+  parseXML x =
+    CapacityAllocation'
+      Prelude.<$> (x Data..@? "allocationType")
+      Prelude.<*> (x Data..@? "count")
+
+instance Prelude.Hashable CapacityAllocation where
+  hashWithSalt _salt CapacityAllocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationType
+      `Prelude.hashWithSalt` count
+
+instance Prelude.NFData CapacityAllocation where
+  rnf CapacityAllocation' {..} =
+    Prelude.rnf allocationType
+      `Prelude.seq` Prelude.rnf count
diff --git a/gen/Amazonka/EC2/Types/CapacityReservation.hs b/gen/Amazonka/EC2/Types/CapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservation.hs
@@ -0,0 +1,539 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityAllocation
+import Amazonka.EC2.Types.CapacityReservationInstancePlatform
+import Amazonka.EC2.Types.CapacityReservationState
+import Amazonka.EC2.Types.CapacityReservationTenancy
+import Amazonka.EC2.Types.EndDateType
+import Amazonka.EC2.Types.InstanceMatchCriteria
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Capacity Reservation.
+--
+-- /See:/ 'newCapacityReservation' smart constructor.
+data CapacityReservation = CapacityReservation'
+  { -- | The Availability Zone in which the capacity is reserved.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone ID of the Capacity Reservation.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The remaining capacity. Indicates the number of instances that can be
+    -- launched in the Capacity Reservation.
+    availableInstanceCount :: Prelude.Maybe Prelude.Int,
+    -- | Information about instance capacity usage.
+    capacityAllocations :: Prelude.Maybe [CapacityAllocation],
+    -- | The Amazon Resource Name (ARN) of the Capacity Reservation.
+    capacityReservationArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation Fleet to which the Capacity
+    -- Reservation belongs. Only valid for Capacity Reservations that were
+    -- created by a Capacity Reservation Fleet.
+    capacityReservationFleetId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time at which the Capacity Reservation was created.
+    createDate :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether the Capacity Reservation supports EBS-optimized
+    -- instances. This optimization provides dedicated throughput to Amazon EBS
+    -- and an optimized configuration stack to provide optimal I\/O
+    -- performance. This optimization isn\'t available with all instance types.
+    -- Additional usage charges apply when using an EBS- optimized instance.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | 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.
+    endDateType :: Prelude.Maybe EndDateType,
+    -- | /Deprecated./
+    ephemeralStorage :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    instanceMatchCriteria :: Prelude.Maybe InstanceMatchCriteria,
+    -- | The type of operating system for which the Capacity Reservation reserves
+    -- capacity.
+    instancePlatform :: Prelude.Maybe CapacityReservationInstancePlatform,
+    -- | The type of instance for which the Capacity Reservation reserves
+    -- capacity.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Outpost on which the Capacity
+    -- Reservation was created.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the Capacity
+    -- Reservation.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the cluster placement group in which
+    -- the Capacity Reservation was created. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html Capacity Reservations for cluster placement groups>
+    -- in the /Amazon EC2 User Guide/.
+    placementGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time at which the Capacity Reservation was started.
+    startDate :: Prelude.Maybe Data.ISO8601,
+    -- | 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 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.
+    state :: Prelude.Maybe CapacityReservationState,
+    -- | Any tags assigned to the Capacity Reservation.
+    tags :: Prelude.Maybe [Tag],
+    -- | 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 Amazon Web Services accounts.
+    --
+    -- -   @dedicated@ - The Capacity Reservation is created on single-tenant
+    --     hardware that is dedicated to a single Amazon Web Services account.
+    tenancy :: Prelude.Maybe CapacityReservationTenancy,
+    -- | The total number of instances for which the Capacity Reservation
+    -- reserves capacity.
+    totalInstanceCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'capacityReservation_availabilityZone' - The Availability Zone in which the capacity is reserved.
+--
+-- 'availabilityZoneId', 'capacityReservation_availabilityZoneId' - The Availability Zone ID of the Capacity Reservation.
+--
+-- 'availableInstanceCount', 'capacityReservation_availableInstanceCount' - The remaining capacity. Indicates the number of instances that can be
+-- launched in the Capacity Reservation.
+--
+-- 'capacityAllocations', 'capacityReservation_capacityAllocations' - Information about instance capacity usage.
+--
+-- 'capacityReservationArn', 'capacityReservation_capacityReservationArn' - The Amazon Resource Name (ARN) of the Capacity Reservation.
+--
+-- 'capacityReservationFleetId', 'capacityReservation_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet to which the Capacity
+-- Reservation belongs. Only valid for Capacity Reservations that were
+-- created by a Capacity Reservation Fleet.
+--
+-- 'capacityReservationId', 'capacityReservation_capacityReservationId' - The ID of the Capacity Reservation.
+--
+-- 'createDate', 'capacityReservation_createDate' - The date and time at which the Capacity Reservation was created.
+--
+-- 'ebsOptimized', 'capacityReservation_ebsOptimized' - Indicates whether the Capacity Reservation supports EBS-optimized
+-- instances. This optimization provides dedicated throughput to Amazon EBS
+-- and an optimized configuration stack to provide optimal I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS- optimized instance.
+--
+-- 'endDate', 'capacityReservation_endDate' - 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.
+--
+-- 'endDateType', 'capacityReservation_endDateType' - 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.
+--
+-- 'ephemeralStorage', 'capacityReservation_ephemeralStorage' - /Deprecated./
+--
+-- 'instanceMatchCriteria', 'capacityReservation_instanceMatchCriteria' - 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.
+--
+-- 'instancePlatform', 'capacityReservation_instancePlatform' - The type of operating system for which the Capacity Reservation reserves
+-- capacity.
+--
+-- 'instanceType', 'capacityReservation_instanceType' - The type of instance for which the Capacity Reservation reserves
+-- capacity.
+--
+-- 'outpostArn', 'capacityReservation_outpostArn' - The Amazon Resource Name (ARN) of the Outpost on which the Capacity
+-- Reservation was created.
+--
+-- 'ownerId', 'capacityReservation_ownerId' - The ID of the Amazon Web Services account that owns the Capacity
+-- Reservation.
+--
+-- 'placementGroupArn', 'capacityReservation_placementGroupArn' - The Amazon Resource Name (ARN) of the cluster placement group in which
+-- the Capacity Reservation was created. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html Capacity Reservations for cluster placement groups>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'startDate', 'capacityReservation_startDate' - The date and time at which the Capacity Reservation was started.
+--
+-- 'state', 'capacityReservation_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 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.
+--
+-- 'tags', 'capacityReservation_tags' - Any tags assigned to the Capacity Reservation.
+--
+-- 'tenancy', 'capacityReservation_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 Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservation is created on single-tenant
+--     hardware that is dedicated to a single Amazon Web Services account.
+--
+-- 'totalInstanceCount', 'capacityReservation_totalInstanceCount' - The total number of instances for which the Capacity Reservation
+-- reserves capacity.
+newCapacityReservation ::
+  CapacityReservation
+newCapacityReservation =
+  CapacityReservation'
+    { availabilityZone =
+        Prelude.Nothing,
+      availabilityZoneId = Prelude.Nothing,
+      availableInstanceCount = Prelude.Nothing,
+      capacityAllocations = Prelude.Nothing,
+      capacityReservationArn = Prelude.Nothing,
+      capacityReservationFleetId = Prelude.Nothing,
+      capacityReservationId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      endDate = Prelude.Nothing,
+      endDateType = Prelude.Nothing,
+      ephemeralStorage = Prelude.Nothing,
+      instanceMatchCriteria = Prelude.Nothing,
+      instancePlatform = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      placementGroupArn = Prelude.Nothing,
+      startDate = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tenancy = Prelude.Nothing,
+      totalInstanceCount = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which the capacity is reserved.
+capacityReservation_availabilityZone :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_availabilityZone = Lens.lens (\CapacityReservation' {availabilityZone} -> availabilityZone) (\s@CapacityReservation' {} a -> s {availabilityZone = a} :: CapacityReservation)
+
+-- | The Availability Zone ID of the Capacity Reservation.
+capacityReservation_availabilityZoneId :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_availabilityZoneId = Lens.lens (\CapacityReservation' {availabilityZoneId} -> availabilityZoneId) (\s@CapacityReservation' {} a -> s {availabilityZoneId = a} :: CapacityReservation)
+
+-- | The remaining capacity. Indicates the number of instances that can be
+-- launched in the Capacity Reservation.
+capacityReservation_availableInstanceCount :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Int)
+capacityReservation_availableInstanceCount = Lens.lens (\CapacityReservation' {availableInstanceCount} -> availableInstanceCount) (\s@CapacityReservation' {} a -> s {availableInstanceCount = a} :: CapacityReservation)
+
+-- | Information about instance capacity usage.
+capacityReservation_capacityAllocations :: Lens.Lens' CapacityReservation (Prelude.Maybe [CapacityAllocation])
+capacityReservation_capacityAllocations = Lens.lens (\CapacityReservation' {capacityAllocations} -> capacityAllocations) (\s@CapacityReservation' {} a -> s {capacityAllocations = a} :: CapacityReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Capacity Reservation.
+capacityReservation_capacityReservationArn :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_capacityReservationArn = Lens.lens (\CapacityReservation' {capacityReservationArn} -> capacityReservationArn) (\s@CapacityReservation' {} a -> s {capacityReservationArn = a} :: CapacityReservation)
+
+-- | The ID of the Capacity Reservation Fleet to which the Capacity
+-- Reservation belongs. Only valid for Capacity Reservations that were
+-- created by a Capacity Reservation Fleet.
+capacityReservation_capacityReservationFleetId :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_capacityReservationFleetId = Lens.lens (\CapacityReservation' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@CapacityReservation' {} a -> s {capacityReservationFleetId = a} :: CapacityReservation)
+
+-- | The ID of the Capacity Reservation.
+capacityReservation_capacityReservationId :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_capacityReservationId = Lens.lens (\CapacityReservation' {capacityReservationId} -> capacityReservationId) (\s@CapacityReservation' {} a -> s {capacityReservationId = a} :: CapacityReservation)
+
+-- | The date and time at which the Capacity Reservation was created.
+capacityReservation_createDate :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.UTCTime)
+capacityReservation_createDate = Lens.lens (\CapacityReservation' {createDate} -> createDate) (\s@CapacityReservation' {} a -> s {createDate = a} :: CapacityReservation) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether the Capacity Reservation supports EBS-optimized
+-- instances. This optimization provides dedicated throughput to Amazon EBS
+-- and an optimized configuration stack to provide optimal I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS- optimized instance.
+capacityReservation_ebsOptimized :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Bool)
+capacityReservation_ebsOptimized = Lens.lens (\CapacityReservation' {ebsOptimized} -> ebsOptimized) (\s@CapacityReservation' {} a -> s {ebsOptimized = a} :: CapacityReservation)
+
+-- | 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.
+capacityReservation_endDate :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.UTCTime)
+capacityReservation_endDate = Lens.lens (\CapacityReservation' {endDate} -> endDate) (\s@CapacityReservation' {} a -> s {endDate = a} :: CapacityReservation) Prelude.. Lens.mapping Data._Time
+
+-- | 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.
+capacityReservation_endDateType :: Lens.Lens' CapacityReservation (Prelude.Maybe EndDateType)
+capacityReservation_endDateType = Lens.lens (\CapacityReservation' {endDateType} -> endDateType) (\s@CapacityReservation' {} a -> s {endDateType = a} :: CapacityReservation)
+
+-- | /Deprecated./
+capacityReservation_ephemeralStorage :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Bool)
+capacityReservation_ephemeralStorage = Lens.lens (\CapacityReservation' {ephemeralStorage} -> ephemeralStorage) (\s@CapacityReservation' {} a -> s {ephemeralStorage = a} :: CapacityReservation)
+
+-- | 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.
+capacityReservation_instanceMatchCriteria :: Lens.Lens' CapacityReservation (Prelude.Maybe InstanceMatchCriteria)
+capacityReservation_instanceMatchCriteria = Lens.lens (\CapacityReservation' {instanceMatchCriteria} -> instanceMatchCriteria) (\s@CapacityReservation' {} a -> s {instanceMatchCriteria = a} :: CapacityReservation)
+
+-- | The type of operating system for which the Capacity Reservation reserves
+-- capacity.
+capacityReservation_instancePlatform :: Lens.Lens' CapacityReservation (Prelude.Maybe CapacityReservationInstancePlatform)
+capacityReservation_instancePlatform = Lens.lens (\CapacityReservation' {instancePlatform} -> instancePlatform) (\s@CapacityReservation' {} a -> s {instancePlatform = a} :: CapacityReservation)
+
+-- | The type of instance for which the Capacity Reservation reserves
+-- capacity.
+capacityReservation_instanceType :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_instanceType = Lens.lens (\CapacityReservation' {instanceType} -> instanceType) (\s@CapacityReservation' {} a -> s {instanceType = a} :: CapacityReservation)
+
+-- | The Amazon Resource Name (ARN) of the Outpost on which the Capacity
+-- Reservation was created.
+capacityReservation_outpostArn :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_outpostArn = Lens.lens (\CapacityReservation' {outpostArn} -> outpostArn) (\s@CapacityReservation' {} a -> s {outpostArn = a} :: CapacityReservation)
+
+-- | The ID of the Amazon Web Services account that owns the Capacity
+-- Reservation.
+capacityReservation_ownerId :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_ownerId = Lens.lens (\CapacityReservation' {ownerId} -> ownerId) (\s@CapacityReservation' {} a -> s {ownerId = a} :: CapacityReservation)
+
+-- | The Amazon Resource Name (ARN) of the cluster placement group in which
+-- the Capacity Reservation was created. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html Capacity Reservations for cluster placement groups>
+-- in the /Amazon EC2 User Guide/.
+capacityReservation_placementGroupArn :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Text)
+capacityReservation_placementGroupArn = Lens.lens (\CapacityReservation' {placementGroupArn} -> placementGroupArn) (\s@CapacityReservation' {} a -> s {placementGroupArn = a} :: CapacityReservation)
+
+-- | The date and time at which the Capacity Reservation was started.
+capacityReservation_startDate :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.UTCTime)
+capacityReservation_startDate = Lens.lens (\CapacityReservation' {startDate} -> startDate) (\s@CapacityReservation' {} a -> s {startDate = a} :: CapacityReservation) Prelude.. Lens.mapping Data._Time
+
+-- | 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 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.
+capacityReservation_state :: Lens.Lens' CapacityReservation (Prelude.Maybe CapacityReservationState)
+capacityReservation_state = Lens.lens (\CapacityReservation' {state} -> state) (\s@CapacityReservation' {} a -> s {state = a} :: CapacityReservation)
+
+-- | Any tags assigned to the Capacity Reservation.
+capacityReservation_tags :: Lens.Lens' CapacityReservation (Prelude.Maybe [Tag])
+capacityReservation_tags = Lens.lens (\CapacityReservation' {tags} -> tags) (\s@CapacityReservation' {} a -> s {tags = a} :: CapacityReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | 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 Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservation is created on single-tenant
+--     hardware that is dedicated to a single Amazon Web Services account.
+capacityReservation_tenancy :: Lens.Lens' CapacityReservation (Prelude.Maybe CapacityReservationTenancy)
+capacityReservation_tenancy = Lens.lens (\CapacityReservation' {tenancy} -> tenancy) (\s@CapacityReservation' {} a -> s {tenancy = a} :: CapacityReservation)
+
+-- | The total number of instances for which the Capacity Reservation
+-- reserves capacity.
+capacityReservation_totalInstanceCount :: Lens.Lens' CapacityReservation (Prelude.Maybe Prelude.Int)
+capacityReservation_totalInstanceCount = Lens.lens (\CapacityReservation' {totalInstanceCount} -> totalInstanceCount) (\s@CapacityReservation' {} a -> s {totalInstanceCount = a} :: CapacityReservation)
+
+instance Data.FromXML CapacityReservation where
+  parseXML x =
+    CapacityReservation'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "availabilityZoneId")
+      Prelude.<*> (x Data..@? "availableInstanceCount")
+      Prelude.<*> ( x
+                      Data..@? "capacityAllocationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "capacityReservationArn")
+      Prelude.<*> (x Data..@? "capacityReservationFleetId")
+      Prelude.<*> (x Data..@? "capacityReservationId")
+      Prelude.<*> (x Data..@? "createDate")
+      Prelude.<*> (x Data..@? "ebsOptimized")
+      Prelude.<*> (x Data..@? "endDate")
+      Prelude.<*> (x Data..@? "endDateType")
+      Prelude.<*> (x Data..@? "ephemeralStorage")
+      Prelude.<*> (x Data..@? "instanceMatchCriteria")
+      Prelude.<*> (x Data..@? "instancePlatform")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "placementGroupArn")
+      Prelude.<*> (x Data..@? "startDate")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "tenancy")
+      Prelude.<*> (x Data..@? "totalInstanceCount")
+
+instance Prelude.Hashable CapacityReservation where
+  hashWithSalt _salt CapacityReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` availableInstanceCount
+      `Prelude.hashWithSalt` capacityAllocations
+      `Prelude.hashWithSalt` capacityReservationArn
+      `Prelude.hashWithSalt` capacityReservationFleetId
+      `Prelude.hashWithSalt` capacityReservationId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` endDateType
+      `Prelude.hashWithSalt` ephemeralStorage
+      `Prelude.hashWithSalt` instanceMatchCriteria
+      `Prelude.hashWithSalt` instancePlatform
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` placementGroupArn
+      `Prelude.hashWithSalt` startDate
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tenancy
+      `Prelude.hashWithSalt` totalInstanceCount
+
+instance Prelude.NFData CapacityReservation where
+  rnf CapacityReservation' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf availableInstanceCount
+      `Prelude.seq` Prelude.rnf capacityAllocations
+      `Prelude.seq` Prelude.rnf capacityReservationArn
+      `Prelude.seq` Prelude.rnf capacityReservationFleetId
+      `Prelude.seq` Prelude.rnf capacityReservationId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf endDateType
+      `Prelude.seq` Prelude.rnf ephemeralStorage
+      `Prelude.seq` Prelude.rnf instanceMatchCriteria
+      `Prelude.seq` Prelude.rnf instancePlatform
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf placementGroupArn
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf
+        totalInstanceCount
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationFleet.hs b/gen/Amazonka/EC2/Types/CapacityReservationFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationFleet.hs
@@ -0,0 +1,386 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationFleet where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationFleetState
+import Amazonka.EC2.Types.FleetCapacityReservation
+import Amazonka.EC2.Types.FleetCapacityReservationTenancy
+import Amazonka.EC2.Types.FleetInstanceMatchCriteria
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a Capacity Reservation Fleet.
+--
+-- /See:/ 'newCapacityReservationFleet' smart constructor.
+data CapacityReservationFleet = CapacityReservationFleet'
+  { -- | The strategy used by the Capacity Reservation Fleet to determine which
+    -- of the specified instance types to use. For more information, see For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
+    -- in the Amazon EC2 User Guide.
+    allocationStrategy :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Capacity Reservation Fleet.
+    capacityReservationFleetArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation Fleet.
+    capacityReservationFleetId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time at which the Capacity Reservation Fleet was created.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time at which the Capacity Reservation Fleet expires.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates the type of instance launches that the Capacity Reservation
+    -- Fleet accepts. All Capacity Reservations in the Fleet inherit this
+    -- instance matching criteria.
+    --
+    -- Currently, Capacity Reservation Fleets support @open@ instance matching
+    -- criteria only. This means that instances that have matching attributes
+    -- (instance type, platform, and Availability Zone) run in the Capacity
+    -- Reservations automatically. Instances do not need to explicitly target a
+    -- Capacity Reservation Fleet to use its reserved capacity.
+    instanceMatchCriteria :: Prelude.Maybe FleetInstanceMatchCriteria,
+    -- | Information about the instance types for which to reserve the capacity.
+    instanceTypeSpecifications :: Prelude.Maybe [FleetCapacityReservation],
+    -- | The state of the Capacity Reservation Fleet. Possible states include:
+    --
+    -- -   @submitted@ - The Capacity Reservation Fleet request has been
+    --     submitted and Amazon Elastic Compute Cloud is preparing to create
+    --     the Capacity Reservations.
+    --
+    -- -   @modifying@ - The Capacity Reservation Fleet is being modified. The
+    --     Fleet remains in this state until the modification is complete.
+    --
+    -- -   @active@ - The Capacity Reservation Fleet has fulfilled its total
+    --     target capacity and it is attempting to maintain this capacity. The
+    --     Fleet remains in this state until it is modified or deleted.
+    --
+    -- -   @partially_fulfilled@ - The Capacity Reservation Fleet has partially
+    --     fulfilled its total target capacity. There is insufficient Amazon
+    --     EC2 to fulfill the total target capacity. The Fleet is attempting to
+    --     asynchronously fulfill its total target capacity.
+    --
+    -- -   @expiring@ - The Capacity Reservation Fleet has reach its end date
+    --     and it is in the process of expiring. One or more of its Capacity
+    --     reservations might still be active.
+    --
+    -- -   @expired@ - The Capacity Reservation Fleet has reach its end date.
+    --     The Fleet and its Capacity Reservations are expired. The Fleet
+    --     can\'t create new Capacity Reservations.
+    --
+    -- -   @cancelling@ - The Capacity Reservation Fleet is in the process of
+    --     being cancelled. One or more of its Capacity reservations might
+    --     still be active.
+    --
+    -- -   @cancelled@ - The Capacity Reservation Fleet has been manually
+    --     cancelled. The Fleet and its Capacity Reservations are cancelled and
+    --     the Fleet can\'t create new Capacity Reservations.
+    --
+    -- -   @failed@ - The Capacity Reservation Fleet failed to reserve capacity
+    --     for the specified instance types.
+    state :: Prelude.Maybe CapacityReservationFleetState,
+    -- | The tags assigned to the Capacity Reservation Fleet.
+    tags :: Prelude.Maybe [Tag],
+    -- | The tenancy of the Capacity Reservation Fleet. Tenancies include:
+    --
+    -- -   @default@ - The Capacity Reservation Fleet is created on hardware
+    --     that is shared with other Amazon Web Services accounts.
+    --
+    -- -   @dedicated@ - The Capacity Reservation Fleet is created on
+    --     single-tenant hardware that is dedicated to a single Amazon Web
+    --     Services account.
+    tenancy :: Prelude.Maybe FleetCapacityReservationTenancy,
+    -- | The capacity units that have been fulfilled.
+    totalFulfilledCapacity :: Prelude.Maybe Prelude.Double,
+    -- | The total number of capacity units for which the Capacity Reservation
+    -- Fleet reserves capacity. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+    -- in the Amazon EC2 User Guide.
+    totalTargetCapacity :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'capacityReservationFleet_allocationStrategy' - The strategy used by the Capacity Reservation Fleet to determine which
+-- of the specified instance types to use. For more information, see For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
+-- in the Amazon EC2 User Guide.
+--
+-- 'capacityReservationFleetArn', 'capacityReservationFleet_capacityReservationFleetArn' - The ARN of the Capacity Reservation Fleet.
+--
+-- 'capacityReservationFleetId', 'capacityReservationFleet_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet.
+--
+-- 'createTime', 'capacityReservationFleet_createTime' - The date and time at which the Capacity Reservation Fleet was created.
+--
+-- 'endDate', 'capacityReservationFleet_endDate' - The date and time at which the Capacity Reservation Fleet expires.
+--
+-- 'instanceMatchCriteria', 'capacityReservationFleet_instanceMatchCriteria' - Indicates the type of instance launches that the Capacity Reservation
+-- Fleet accepts. All Capacity Reservations in the Fleet inherit this
+-- instance matching criteria.
+--
+-- Currently, Capacity Reservation Fleets support @open@ instance matching
+-- criteria only. This means that instances that have matching attributes
+-- (instance type, platform, and Availability Zone) run in the Capacity
+-- Reservations automatically. Instances do not need to explicitly target a
+-- Capacity Reservation Fleet to use its reserved capacity.
+--
+-- 'instanceTypeSpecifications', 'capacityReservationFleet_instanceTypeSpecifications' - Information about the instance types for which to reserve the capacity.
+--
+-- 'state', 'capacityReservationFleet_state' - The state of the Capacity Reservation Fleet. Possible states include:
+--
+-- -   @submitted@ - The Capacity Reservation Fleet request has been
+--     submitted and Amazon Elastic Compute Cloud is preparing to create
+--     the Capacity Reservations.
+--
+-- -   @modifying@ - The Capacity Reservation Fleet is being modified. The
+--     Fleet remains in this state until the modification is complete.
+--
+-- -   @active@ - The Capacity Reservation Fleet has fulfilled its total
+--     target capacity and it is attempting to maintain this capacity. The
+--     Fleet remains in this state until it is modified or deleted.
+--
+-- -   @partially_fulfilled@ - The Capacity Reservation Fleet has partially
+--     fulfilled its total target capacity. There is insufficient Amazon
+--     EC2 to fulfill the total target capacity. The Fleet is attempting to
+--     asynchronously fulfill its total target capacity.
+--
+-- -   @expiring@ - The Capacity Reservation Fleet has reach its end date
+--     and it is in the process of expiring. One or more of its Capacity
+--     reservations might still be active.
+--
+-- -   @expired@ - The Capacity Reservation Fleet has reach its end date.
+--     The Fleet and its Capacity Reservations are expired. The Fleet
+--     can\'t create new Capacity Reservations.
+--
+-- -   @cancelling@ - The Capacity Reservation Fleet is in the process of
+--     being cancelled. One or more of its Capacity reservations might
+--     still be active.
+--
+-- -   @cancelled@ - The Capacity Reservation Fleet has been manually
+--     cancelled. The Fleet and its Capacity Reservations are cancelled and
+--     the Fleet can\'t create new Capacity Reservations.
+--
+-- -   @failed@ - The Capacity Reservation Fleet failed to reserve capacity
+--     for the specified instance types.
+--
+-- 'tags', 'capacityReservationFleet_tags' - The tags assigned to the Capacity Reservation Fleet.
+--
+-- 'tenancy', 'capacityReservationFleet_tenancy' - The tenancy of the Capacity Reservation Fleet. Tenancies include:
+--
+-- -   @default@ - The Capacity Reservation Fleet is created on hardware
+--     that is shared with other Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservation Fleet is created on
+--     single-tenant hardware that is dedicated to a single Amazon Web
+--     Services account.
+--
+-- 'totalFulfilledCapacity', 'capacityReservationFleet_totalFulfilledCapacity' - The capacity units that have been fulfilled.
+--
+-- 'totalTargetCapacity', 'capacityReservationFleet_totalTargetCapacity' - The total number of capacity units for which the Capacity Reservation
+-- Fleet reserves capacity. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+newCapacityReservationFleet ::
+  CapacityReservationFleet
+newCapacityReservationFleet =
+  CapacityReservationFleet'
+    { allocationStrategy =
+        Prelude.Nothing,
+      capacityReservationFleetArn = Prelude.Nothing,
+      capacityReservationFleetId = Prelude.Nothing,
+      createTime = Prelude.Nothing,
+      endDate = Prelude.Nothing,
+      instanceMatchCriteria = Prelude.Nothing,
+      instanceTypeSpecifications = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      tenancy = Prelude.Nothing,
+      totalFulfilledCapacity = Prelude.Nothing,
+      totalTargetCapacity = Prelude.Nothing
+    }
+
+-- | The strategy used by the Capacity Reservation Fleet to determine which
+-- of the specified instance types to use. For more information, see For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy Allocation strategy>
+-- in the Amazon EC2 User Guide.
+capacityReservationFleet_allocationStrategy :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Text)
+capacityReservationFleet_allocationStrategy = Lens.lens (\CapacityReservationFleet' {allocationStrategy} -> allocationStrategy) (\s@CapacityReservationFleet' {} a -> s {allocationStrategy = a} :: CapacityReservationFleet)
+
+-- | The ARN of the Capacity Reservation Fleet.
+capacityReservationFleet_capacityReservationFleetArn :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Text)
+capacityReservationFleet_capacityReservationFleetArn = Lens.lens (\CapacityReservationFleet' {capacityReservationFleetArn} -> capacityReservationFleetArn) (\s@CapacityReservationFleet' {} a -> s {capacityReservationFleetArn = a} :: CapacityReservationFleet)
+
+-- | The ID of the Capacity Reservation Fleet.
+capacityReservationFleet_capacityReservationFleetId :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Text)
+capacityReservationFleet_capacityReservationFleetId = Lens.lens (\CapacityReservationFleet' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@CapacityReservationFleet' {} a -> s {capacityReservationFleetId = a} :: CapacityReservationFleet)
+
+-- | The date and time at which the Capacity Reservation Fleet was created.
+capacityReservationFleet_createTime :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
+capacityReservationFleet_createTime = Lens.lens (\CapacityReservationFleet' {createTime} -> createTime) (\s@CapacityReservationFleet' {} a -> s {createTime = a} :: CapacityReservationFleet) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time at which the Capacity Reservation Fleet expires.
+capacityReservationFleet_endDate :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.UTCTime)
+capacityReservationFleet_endDate = Lens.lens (\CapacityReservationFleet' {endDate} -> endDate) (\s@CapacityReservationFleet' {} a -> s {endDate = a} :: CapacityReservationFleet) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates the type of instance launches that the Capacity Reservation
+-- Fleet accepts. All Capacity Reservations in the Fleet inherit this
+-- instance matching criteria.
+--
+-- Currently, Capacity Reservation Fleets support @open@ instance matching
+-- criteria only. This means that instances that have matching attributes
+-- (instance type, platform, and Availability Zone) run in the Capacity
+-- Reservations automatically. Instances do not need to explicitly target a
+-- Capacity Reservation Fleet to use its reserved capacity.
+capacityReservationFleet_instanceMatchCriteria :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe FleetInstanceMatchCriteria)
+capacityReservationFleet_instanceMatchCriteria = Lens.lens (\CapacityReservationFleet' {instanceMatchCriteria} -> instanceMatchCriteria) (\s@CapacityReservationFleet' {} a -> s {instanceMatchCriteria = a} :: CapacityReservationFleet)
+
+-- | Information about the instance types for which to reserve the capacity.
+capacityReservationFleet_instanceTypeSpecifications :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe [FleetCapacityReservation])
+capacityReservationFleet_instanceTypeSpecifications = Lens.lens (\CapacityReservationFleet' {instanceTypeSpecifications} -> instanceTypeSpecifications) (\s@CapacityReservationFleet' {} a -> s {instanceTypeSpecifications = a} :: CapacityReservationFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The state of the Capacity Reservation Fleet. Possible states include:
+--
+-- -   @submitted@ - The Capacity Reservation Fleet request has been
+--     submitted and Amazon Elastic Compute Cloud is preparing to create
+--     the Capacity Reservations.
+--
+-- -   @modifying@ - The Capacity Reservation Fleet is being modified. The
+--     Fleet remains in this state until the modification is complete.
+--
+-- -   @active@ - The Capacity Reservation Fleet has fulfilled its total
+--     target capacity and it is attempting to maintain this capacity. The
+--     Fleet remains in this state until it is modified or deleted.
+--
+-- -   @partially_fulfilled@ - The Capacity Reservation Fleet has partially
+--     fulfilled its total target capacity. There is insufficient Amazon
+--     EC2 to fulfill the total target capacity. The Fleet is attempting to
+--     asynchronously fulfill its total target capacity.
+--
+-- -   @expiring@ - The Capacity Reservation Fleet has reach its end date
+--     and it is in the process of expiring. One or more of its Capacity
+--     reservations might still be active.
+--
+-- -   @expired@ - The Capacity Reservation Fleet has reach its end date.
+--     The Fleet and its Capacity Reservations are expired. The Fleet
+--     can\'t create new Capacity Reservations.
+--
+-- -   @cancelling@ - The Capacity Reservation Fleet is in the process of
+--     being cancelled. One or more of its Capacity reservations might
+--     still be active.
+--
+-- -   @cancelled@ - The Capacity Reservation Fleet has been manually
+--     cancelled. The Fleet and its Capacity Reservations are cancelled and
+--     the Fleet can\'t create new Capacity Reservations.
+--
+-- -   @failed@ - The Capacity Reservation Fleet failed to reserve capacity
+--     for the specified instance types.
+capacityReservationFleet_state :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe CapacityReservationFleetState)
+capacityReservationFleet_state = Lens.lens (\CapacityReservationFleet' {state} -> state) (\s@CapacityReservationFleet' {} a -> s {state = a} :: CapacityReservationFleet)
+
+-- | The tags assigned to the Capacity Reservation Fleet.
+capacityReservationFleet_tags :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe [Tag])
+capacityReservationFleet_tags = Lens.lens (\CapacityReservationFleet' {tags} -> tags) (\s@CapacityReservationFleet' {} a -> s {tags = a} :: CapacityReservationFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tenancy of the Capacity Reservation Fleet. Tenancies include:
+--
+-- -   @default@ - The Capacity Reservation Fleet is created on hardware
+--     that is shared with other Amazon Web Services accounts.
+--
+-- -   @dedicated@ - The Capacity Reservation Fleet is created on
+--     single-tenant hardware that is dedicated to a single Amazon Web
+--     Services account.
+capacityReservationFleet_tenancy :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe FleetCapacityReservationTenancy)
+capacityReservationFleet_tenancy = Lens.lens (\CapacityReservationFleet' {tenancy} -> tenancy) (\s@CapacityReservationFleet' {} a -> s {tenancy = a} :: CapacityReservationFleet)
+
+-- | The capacity units that have been fulfilled.
+capacityReservationFleet_totalFulfilledCapacity :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Double)
+capacityReservationFleet_totalFulfilledCapacity = Lens.lens (\CapacityReservationFleet' {totalFulfilledCapacity} -> totalFulfilledCapacity) (\s@CapacityReservationFleet' {} a -> s {totalFulfilledCapacity = a} :: CapacityReservationFleet)
+
+-- | The total number of capacity units for which the Capacity Reservation
+-- Fleet reserves capacity. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+capacityReservationFleet_totalTargetCapacity :: Lens.Lens' CapacityReservationFleet (Prelude.Maybe Prelude.Int)
+capacityReservationFleet_totalTargetCapacity = Lens.lens (\CapacityReservationFleet' {totalTargetCapacity} -> totalTargetCapacity) (\s@CapacityReservationFleet' {} a -> s {totalTargetCapacity = a} :: CapacityReservationFleet)
+
+instance Data.FromXML CapacityReservationFleet where
+  parseXML x =
+    CapacityReservationFleet'
+      Prelude.<$> (x Data..@? "allocationStrategy")
+      Prelude.<*> (x Data..@? "capacityReservationFleetArn")
+      Prelude.<*> (x Data..@? "capacityReservationFleetId")
+      Prelude.<*> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "endDate")
+      Prelude.<*> (x Data..@? "instanceMatchCriteria")
+      Prelude.<*> ( x
+                      Data..@? "instanceTypeSpecificationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "tenancy")
+      Prelude.<*> (x Data..@? "totalFulfilledCapacity")
+      Prelude.<*> (x Data..@? "totalTargetCapacity")
+
+instance Prelude.Hashable CapacityReservationFleet where
+  hashWithSalt _salt CapacityReservationFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationStrategy
+      `Prelude.hashWithSalt` capacityReservationFleetArn
+      `Prelude.hashWithSalt` capacityReservationFleetId
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` instanceMatchCriteria
+      `Prelude.hashWithSalt` instanceTypeSpecifications
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tenancy
+      `Prelude.hashWithSalt` totalFulfilledCapacity
+      `Prelude.hashWithSalt` totalTargetCapacity
+
+instance Prelude.NFData CapacityReservationFleet where
+  rnf CapacityReservationFleet' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf capacityReservationFleetArn
+      `Prelude.seq` Prelude.rnf capacityReservationFleetId
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf instanceMatchCriteria
+      `Prelude.seq` Prelude.rnf instanceTypeSpecifications
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tenancy
+      `Prelude.seq` Prelude.rnf totalFulfilledCapacity
+      `Prelude.seq` Prelude.rnf totalTargetCapacity
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationFleetCancellationState.hs b/gen/Amazonka/EC2/Types/CapacityReservationFleetCancellationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationFleetCancellationState.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationFleetCancellationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationFleetCancellationState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationFleetState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Capacity Reservation Fleet that was successfully cancelled.
+--
+-- /See:/ 'newCapacityReservationFleetCancellationState' smart constructor.
+data CapacityReservationFleetCancellationState = CapacityReservationFleetCancellationState'
+  { -- | The ID of the Capacity Reservation Fleet that was successfully
+    -- cancelled.
+    capacityReservationFleetId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the Capacity Reservation Fleet.
+    currentFleetState :: Prelude.Maybe CapacityReservationFleetState,
+    -- | The previous state of the Capacity Reservation Fleet.
+    previousFleetState :: Prelude.Maybe CapacityReservationFleetState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationFleetCancellationState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationFleetId', 'capacityReservationFleetCancellationState_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet that was successfully
+-- cancelled.
+--
+-- 'currentFleetState', 'capacityReservationFleetCancellationState_currentFleetState' - The current state of the Capacity Reservation Fleet.
+--
+-- 'previousFleetState', 'capacityReservationFleetCancellationState_previousFleetState' - The previous state of the Capacity Reservation Fleet.
+newCapacityReservationFleetCancellationState ::
+  CapacityReservationFleetCancellationState
+newCapacityReservationFleetCancellationState =
+  CapacityReservationFleetCancellationState'
+    { capacityReservationFleetId =
+        Prelude.Nothing,
+      currentFleetState =
+        Prelude.Nothing,
+      previousFleetState =
+        Prelude.Nothing
+    }
+
+-- | The ID of the Capacity Reservation Fleet that was successfully
+-- cancelled.
+capacityReservationFleetCancellationState_capacityReservationFleetId :: Lens.Lens' CapacityReservationFleetCancellationState (Prelude.Maybe Prelude.Text)
+capacityReservationFleetCancellationState_capacityReservationFleetId = Lens.lens (\CapacityReservationFleetCancellationState' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@CapacityReservationFleetCancellationState' {} a -> s {capacityReservationFleetId = a} :: CapacityReservationFleetCancellationState)
+
+-- | The current state of the Capacity Reservation Fleet.
+capacityReservationFleetCancellationState_currentFleetState :: Lens.Lens' CapacityReservationFleetCancellationState (Prelude.Maybe CapacityReservationFleetState)
+capacityReservationFleetCancellationState_currentFleetState = Lens.lens (\CapacityReservationFleetCancellationState' {currentFleetState} -> currentFleetState) (\s@CapacityReservationFleetCancellationState' {} a -> s {currentFleetState = a} :: CapacityReservationFleetCancellationState)
+
+-- | The previous state of the Capacity Reservation Fleet.
+capacityReservationFleetCancellationState_previousFleetState :: Lens.Lens' CapacityReservationFleetCancellationState (Prelude.Maybe CapacityReservationFleetState)
+capacityReservationFleetCancellationState_previousFleetState = Lens.lens (\CapacityReservationFleetCancellationState' {previousFleetState} -> previousFleetState) (\s@CapacityReservationFleetCancellationState' {} a -> s {previousFleetState = a} :: CapacityReservationFleetCancellationState)
+
+instance
+  Data.FromXML
+    CapacityReservationFleetCancellationState
+  where
+  parseXML x =
+    CapacityReservationFleetCancellationState'
+      Prelude.<$> (x Data..@? "capacityReservationFleetId")
+      Prelude.<*> (x Data..@? "currentFleetState")
+      Prelude.<*> (x Data..@? "previousFleetState")
+
+instance
+  Prelude.Hashable
+    CapacityReservationFleetCancellationState
+  where
+  hashWithSalt
+    _salt
+    CapacityReservationFleetCancellationState' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationFleetId
+        `Prelude.hashWithSalt` currentFleetState
+        `Prelude.hashWithSalt` previousFleetState
+
+instance
+  Prelude.NFData
+    CapacityReservationFleetCancellationState
+  where
+  rnf CapacityReservationFleetCancellationState' {..} =
+    Prelude.rnf capacityReservationFleetId
+      `Prelude.seq` Prelude.rnf currentFleetState
+      `Prelude.seq` Prelude.rnf previousFleetState
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationFleetState.hs b/gen/Amazonka/EC2/Types/CapacityReservationFleetState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationFleetState.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationFleetState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationFleetState
+  ( CapacityReservationFleetState
+      ( ..,
+        CapacityReservationFleetState_Active,
+        CapacityReservationFleetState_Cancelled,
+        CapacityReservationFleetState_Cancelling,
+        CapacityReservationFleetState_Expired,
+        CapacityReservationFleetState_Expiring,
+        CapacityReservationFleetState_Failed,
+        CapacityReservationFleetState_Modifying,
+        CapacityReservationFleetState_Partially_fulfilled,
+        CapacityReservationFleetState_Submitted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CapacityReservationFleetState = CapacityReservationFleetState'
+  { fromCapacityReservationFleetState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CapacityReservationFleetState_Active :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Active = CapacityReservationFleetState' "active"
+
+pattern CapacityReservationFleetState_Cancelled :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Cancelled = CapacityReservationFleetState' "cancelled"
+
+pattern CapacityReservationFleetState_Cancelling :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Cancelling = CapacityReservationFleetState' "cancelling"
+
+pattern CapacityReservationFleetState_Expired :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Expired = CapacityReservationFleetState' "expired"
+
+pattern CapacityReservationFleetState_Expiring :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Expiring = CapacityReservationFleetState' "expiring"
+
+pattern CapacityReservationFleetState_Failed :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Failed = CapacityReservationFleetState' "failed"
+
+pattern CapacityReservationFleetState_Modifying :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Modifying = CapacityReservationFleetState' "modifying"
+
+pattern CapacityReservationFleetState_Partially_fulfilled :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Partially_fulfilled = CapacityReservationFleetState' "partially_fulfilled"
+
+pattern CapacityReservationFleetState_Submitted :: CapacityReservationFleetState
+pattern CapacityReservationFleetState_Submitted = CapacityReservationFleetState' "submitted"
+
+{-# COMPLETE
+  CapacityReservationFleetState_Active,
+  CapacityReservationFleetState_Cancelled,
+  CapacityReservationFleetState_Cancelling,
+  CapacityReservationFleetState_Expired,
+  CapacityReservationFleetState_Expiring,
+  CapacityReservationFleetState_Failed,
+  CapacityReservationFleetState_Modifying,
+  CapacityReservationFleetState_Partially_fulfilled,
+  CapacityReservationFleetState_Submitted,
+  CapacityReservationFleetState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationGroup.hs b/gen/Amazonka/EC2/Types/CapacityReservationGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationGroup.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a resource group to which a Capacity Reservation has been
+-- added.
+--
+-- /See:/ 'newCapacityReservationGroup' smart constructor.
+data CapacityReservationGroup = CapacityReservationGroup'
+  { -- | The ARN of the resource group.
+    groupArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the resource group.
+    ownerId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupArn', 'capacityReservationGroup_groupArn' - The ARN of the resource group.
+--
+-- 'ownerId', 'capacityReservationGroup_ownerId' - The ID of the Amazon Web Services account that owns the resource group.
+newCapacityReservationGroup ::
+  CapacityReservationGroup
+newCapacityReservationGroup =
+  CapacityReservationGroup'
+    { groupArn =
+        Prelude.Nothing,
+      ownerId = Prelude.Nothing
+    }
+
+-- | The ARN of the resource group.
+capacityReservationGroup_groupArn :: Lens.Lens' CapacityReservationGroup (Prelude.Maybe Prelude.Text)
+capacityReservationGroup_groupArn = Lens.lens (\CapacityReservationGroup' {groupArn} -> groupArn) (\s@CapacityReservationGroup' {} a -> s {groupArn = a} :: CapacityReservationGroup)
+
+-- | The ID of the Amazon Web Services account that owns the resource group.
+capacityReservationGroup_ownerId :: Lens.Lens' CapacityReservationGroup (Prelude.Maybe Prelude.Text)
+capacityReservationGroup_ownerId = Lens.lens (\CapacityReservationGroup' {ownerId} -> ownerId) (\s@CapacityReservationGroup' {} a -> s {ownerId = a} :: CapacityReservationGroup)
+
+instance Data.FromXML CapacityReservationGroup where
+  parseXML x =
+    CapacityReservationGroup'
+      Prelude.<$> (x Data..@? "groupArn")
+      Prelude.<*> (x Data..@? "ownerId")
+
+instance Prelude.Hashable CapacityReservationGroup where
+  hashWithSalt _salt CapacityReservationGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupArn
+      `Prelude.hashWithSalt` ownerId
+
+instance Prelude.NFData CapacityReservationGroup where
+  rnf CapacityReservationGroup' {..} =
+    Prelude.rnf groupArn
+      `Prelude.seq` Prelude.rnf ownerId
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationInstancePlatform.hs b/gen/Amazonka/EC2/Types/CapacityReservationInstancePlatform.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationInstancePlatform.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationInstancePlatform
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationInstancePlatform
+  ( CapacityReservationInstancePlatform
+      ( ..,
+        CapacityReservationInstancePlatform_Linux_UNIX,
+        CapacityReservationInstancePlatform_Linux_with_SQL_Server_Enterprise,
+        CapacityReservationInstancePlatform_Linux_with_SQL_Server_Standard,
+        CapacityReservationInstancePlatform_Linux_with_SQL_Server_Web,
+        CapacityReservationInstancePlatform_RHEL_with_HA,
+        CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Enterprise,
+        CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Standard,
+        CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Enterprise,
+        CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Standard,
+        CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Web,
+        CapacityReservationInstancePlatform_Red_Hat_Enterprise_Linux,
+        CapacityReservationInstancePlatform_SUSE_Linux,
+        CapacityReservationInstancePlatform_Windows,
+        CapacityReservationInstancePlatform_Windows_with_SQL_Server,
+        CapacityReservationInstancePlatform_Windows_with_SQL_Server_Enterprise,
+        CapacityReservationInstancePlatform_Windows_with_SQL_Server_Standard,
+        CapacityReservationInstancePlatform_Windows_with_SQL_Server_Web
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CapacityReservationInstancePlatform = CapacityReservationInstancePlatform'
+  { fromCapacityReservationInstancePlatform ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CapacityReservationInstancePlatform_Linux_UNIX :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Linux_UNIX = CapacityReservationInstancePlatform' "Linux/UNIX"
+
+pattern CapacityReservationInstancePlatform_Linux_with_SQL_Server_Enterprise :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Linux_with_SQL_Server_Enterprise = CapacityReservationInstancePlatform' "Linux with SQL Server Enterprise"
+
+pattern CapacityReservationInstancePlatform_Linux_with_SQL_Server_Standard :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Linux_with_SQL_Server_Standard = CapacityReservationInstancePlatform' "Linux with SQL Server Standard"
+
+pattern CapacityReservationInstancePlatform_Linux_with_SQL_Server_Web :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Linux_with_SQL_Server_Web = CapacityReservationInstancePlatform' "Linux with SQL Server Web"
+
+pattern CapacityReservationInstancePlatform_RHEL_with_HA :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_RHEL_with_HA = CapacityReservationInstancePlatform' "RHEL with HA"
+
+pattern CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Enterprise :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Enterprise = CapacityReservationInstancePlatform' "RHEL with HA and SQL Server Enterprise"
+
+pattern CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Standard :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Standard = CapacityReservationInstancePlatform' "RHEL with HA and SQL Server Standard"
+
+pattern CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Enterprise :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Enterprise = CapacityReservationInstancePlatform' "RHEL with SQL Server Enterprise"
+
+pattern CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Standard :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Standard = CapacityReservationInstancePlatform' "RHEL with SQL Server Standard"
+
+pattern CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Web :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Web = CapacityReservationInstancePlatform' "RHEL with SQL Server Web"
+
+pattern CapacityReservationInstancePlatform_Red_Hat_Enterprise_Linux :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Red_Hat_Enterprise_Linux = CapacityReservationInstancePlatform' "Red Hat Enterprise Linux"
+
+pattern CapacityReservationInstancePlatform_SUSE_Linux :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_SUSE_Linux = CapacityReservationInstancePlatform' "SUSE Linux"
+
+pattern CapacityReservationInstancePlatform_Windows :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Windows = CapacityReservationInstancePlatform' "Windows"
+
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server = CapacityReservationInstancePlatform' "Windows with SQL Server"
+
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server_Enterprise :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server_Enterprise = CapacityReservationInstancePlatform' "Windows with SQL Server Enterprise"
+
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server_Standard :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server_Standard = CapacityReservationInstancePlatform' "Windows with SQL Server Standard"
+
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server_Web :: CapacityReservationInstancePlatform
+pattern CapacityReservationInstancePlatform_Windows_with_SQL_Server_Web = CapacityReservationInstancePlatform' "Windows with SQL Server Web"
+
+{-# COMPLETE
+  CapacityReservationInstancePlatform_Linux_UNIX,
+  CapacityReservationInstancePlatform_Linux_with_SQL_Server_Enterprise,
+  CapacityReservationInstancePlatform_Linux_with_SQL_Server_Standard,
+  CapacityReservationInstancePlatform_Linux_with_SQL_Server_Web,
+  CapacityReservationInstancePlatform_RHEL_with_HA,
+  CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Enterprise,
+  CapacityReservationInstancePlatform_RHEL_with_HA_and_SQL_Server_Standard,
+  CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Enterprise,
+  CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Standard,
+  CapacityReservationInstancePlatform_RHEL_with_SQL_Server_Web,
+  CapacityReservationInstancePlatform_Red_Hat_Enterprise_Linux,
+  CapacityReservationInstancePlatform_SUSE_Linux,
+  CapacityReservationInstancePlatform_Windows,
+  CapacityReservationInstancePlatform_Windows_with_SQL_Server,
+  CapacityReservationInstancePlatform_Windows_with_SQL_Server_Enterprise,
+  CapacityReservationInstancePlatform_Windows_with_SQL_Server_Standard,
+  CapacityReservationInstancePlatform_Windows_with_SQL_Server_Web,
+  CapacityReservationInstancePlatform'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationOptions.hs b/gen/Amazonka/EC2/Types/CapacityReservationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationOptions.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetCapacityReservationUsageStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the strategy for using unused Capacity Reservations for
+-- fulfilling On-Demand capacity.
+--
+-- This strategy can only be used if the EC2 Fleet is of type @instant@.
+--
+-- For more information about Capacity Reservations, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html On-Demand Capacity Reservations>
+-- in the /Amazon EC2 User Guide/. For examples of using Capacity
+-- Reservations in an EC2 Fleet, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-examples.html EC2 Fleet example configurations>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newCapacityReservationOptions' smart constructor.
+data CapacityReservationOptions = CapacityReservationOptions'
+  { -- | Indicates whether to use unused Capacity Reservations for fulfilling
+    -- On-Demand capacity.
+    --
+    -- If you specify @use-capacity-reservations-first@, the fleet uses unused
+    -- Capacity Reservations to fulfill On-Demand capacity up to the target
+    -- On-Demand capacity. If multiple instance pools have unused Capacity
+    -- Reservations, the On-Demand allocation strategy (@lowest-price@ or
+    -- @prioritized@) is applied. If the number of unused Capacity Reservations
+    -- is less than the On-Demand target capacity, the remaining On-Demand
+    -- target capacity is launched according to the On-Demand allocation
+    -- strategy (@lowest-price@ or @prioritized@).
+    --
+    -- If you do not specify a value, the fleet fulfils the On-Demand capacity
+    -- according to the chosen On-Demand allocation strategy.
+    usageStrategy :: Prelude.Maybe FleetCapacityReservationUsageStrategy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'usageStrategy', 'capacityReservationOptions_usageStrategy' - Indicates whether to use unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- If you specify @use-capacity-reservations-first@, the fleet uses unused
+-- Capacity Reservations to fulfill On-Demand capacity up to the target
+-- On-Demand capacity. If multiple instance pools have unused Capacity
+-- Reservations, the On-Demand allocation strategy (@lowest-price@ or
+-- @prioritized@) is applied. If the number of unused Capacity Reservations
+-- is less than the On-Demand target capacity, the remaining On-Demand
+-- target capacity is launched according to the On-Demand allocation
+-- strategy (@lowest-price@ or @prioritized@).
+--
+-- If you do not specify a value, the fleet fulfils the On-Demand capacity
+-- according to the chosen On-Demand allocation strategy.
+newCapacityReservationOptions ::
+  CapacityReservationOptions
+newCapacityReservationOptions =
+  CapacityReservationOptions'
+    { usageStrategy =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether to use unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- If you specify @use-capacity-reservations-first@, the fleet uses unused
+-- Capacity Reservations to fulfill On-Demand capacity up to the target
+-- On-Demand capacity. If multiple instance pools have unused Capacity
+-- Reservations, the On-Demand allocation strategy (@lowest-price@ or
+-- @prioritized@) is applied. If the number of unused Capacity Reservations
+-- is less than the On-Demand target capacity, the remaining On-Demand
+-- target capacity is launched according to the On-Demand allocation
+-- strategy (@lowest-price@ or @prioritized@).
+--
+-- If you do not specify a value, the fleet fulfils the On-Demand capacity
+-- according to the chosen On-Demand allocation strategy.
+capacityReservationOptions_usageStrategy :: Lens.Lens' CapacityReservationOptions (Prelude.Maybe FleetCapacityReservationUsageStrategy)
+capacityReservationOptions_usageStrategy = Lens.lens (\CapacityReservationOptions' {usageStrategy} -> usageStrategy) (\s@CapacityReservationOptions' {} a -> s {usageStrategy = a} :: CapacityReservationOptions)
+
+instance Data.FromXML CapacityReservationOptions where
+  parseXML x =
+    CapacityReservationOptions'
+      Prelude.<$> (x Data..@? "usageStrategy")
+
+instance Prelude.Hashable CapacityReservationOptions where
+  hashWithSalt _salt CapacityReservationOptions' {..} =
+    _salt `Prelude.hashWithSalt` usageStrategy
+
+instance Prelude.NFData CapacityReservationOptions where
+  rnf CapacityReservationOptions' {..} =
+    Prelude.rnf usageStrategy
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationOptionsRequest.hs b/gen/Amazonka/EC2/Types/CapacityReservationOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationOptionsRequest.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetCapacityReservationUsageStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the strategy for using unused Capacity Reservations for
+-- fulfilling On-Demand capacity.
+--
+-- This strategy can only be used if the EC2 Fleet is of type @instant@.
+--
+-- For more information about Capacity Reservations, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html On-Demand Capacity Reservations>
+-- in the /Amazon EC2 User Guide/. For examples of using Capacity
+-- Reservations in an EC2 Fleet, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-examples.html EC2 Fleet example configurations>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newCapacityReservationOptionsRequest' smart constructor.
+data CapacityReservationOptionsRequest = CapacityReservationOptionsRequest'
+  { -- | Indicates whether to use unused Capacity Reservations for fulfilling
+    -- On-Demand capacity.
+    --
+    -- If you specify @use-capacity-reservations-first@, the fleet uses unused
+    -- Capacity Reservations to fulfill On-Demand capacity up to the target
+    -- On-Demand capacity. If multiple instance pools have unused Capacity
+    -- Reservations, the On-Demand allocation strategy (@lowest-price@ or
+    -- @prioritized@) is applied. If the number of unused Capacity Reservations
+    -- is less than the On-Demand target capacity, the remaining On-Demand
+    -- target capacity is launched according to the On-Demand allocation
+    -- strategy (@lowest-price@ or @prioritized@).
+    --
+    -- If you do not specify a value, the fleet fulfils the On-Demand capacity
+    -- according to the chosen On-Demand allocation strategy.
+    usageStrategy :: Prelude.Maybe FleetCapacityReservationUsageStrategy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'usageStrategy', 'capacityReservationOptionsRequest_usageStrategy' - Indicates whether to use unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- If you specify @use-capacity-reservations-first@, the fleet uses unused
+-- Capacity Reservations to fulfill On-Demand capacity up to the target
+-- On-Demand capacity. If multiple instance pools have unused Capacity
+-- Reservations, the On-Demand allocation strategy (@lowest-price@ or
+-- @prioritized@) is applied. If the number of unused Capacity Reservations
+-- is less than the On-Demand target capacity, the remaining On-Demand
+-- target capacity is launched according to the On-Demand allocation
+-- strategy (@lowest-price@ or @prioritized@).
+--
+-- If you do not specify a value, the fleet fulfils the On-Demand capacity
+-- according to the chosen On-Demand allocation strategy.
+newCapacityReservationOptionsRequest ::
+  CapacityReservationOptionsRequest
+newCapacityReservationOptionsRequest =
+  CapacityReservationOptionsRequest'
+    { usageStrategy =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether to use unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- If you specify @use-capacity-reservations-first@, the fleet uses unused
+-- Capacity Reservations to fulfill On-Demand capacity up to the target
+-- On-Demand capacity. If multiple instance pools have unused Capacity
+-- Reservations, the On-Demand allocation strategy (@lowest-price@ or
+-- @prioritized@) is applied. If the number of unused Capacity Reservations
+-- is less than the On-Demand target capacity, the remaining On-Demand
+-- target capacity is launched according to the On-Demand allocation
+-- strategy (@lowest-price@ or @prioritized@).
+--
+-- If you do not specify a value, the fleet fulfils the On-Demand capacity
+-- according to the chosen On-Demand allocation strategy.
+capacityReservationOptionsRequest_usageStrategy :: Lens.Lens' CapacityReservationOptionsRequest (Prelude.Maybe FleetCapacityReservationUsageStrategy)
+capacityReservationOptionsRequest_usageStrategy = Lens.lens (\CapacityReservationOptionsRequest' {usageStrategy} -> usageStrategy) (\s@CapacityReservationOptionsRequest' {} a -> s {usageStrategy = a} :: CapacityReservationOptionsRequest)
+
+instance
+  Prelude.Hashable
+    CapacityReservationOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    CapacityReservationOptionsRequest' {..} =
+      _salt `Prelude.hashWithSalt` usageStrategy
+
+instance
+  Prelude.NFData
+    CapacityReservationOptionsRequest
+  where
+  rnf CapacityReservationOptionsRequest' {..} =
+    Prelude.rnf usageStrategy
+
+instance
+  Data.ToQuery
+    CapacityReservationOptionsRequest
+  where
+  toQuery CapacityReservationOptionsRequest' {..} =
+    Prelude.mconcat
+      ["UsageStrategy" Data.=: usageStrategy]
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationPreference.hs b/gen/Amazonka/EC2/Types/CapacityReservationPreference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationPreference.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationPreference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationPreference
+  ( CapacityReservationPreference
+      ( ..,
+        CapacityReservationPreference_None,
+        CapacityReservationPreference_Open
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CapacityReservationPreference = CapacityReservationPreference'
+  { fromCapacityReservationPreference ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CapacityReservationPreference_None :: CapacityReservationPreference
+pattern CapacityReservationPreference_None = CapacityReservationPreference' "none"
+
+pattern CapacityReservationPreference_Open :: CapacityReservationPreference
+pattern CapacityReservationPreference_Open = CapacityReservationPreference' "open"
+
+{-# COMPLETE
+  CapacityReservationPreference_None,
+  CapacityReservationPreference_Open,
+  CapacityReservationPreference'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationSpecification.hs b/gen/Amazonka/EC2/Types/CapacityReservationSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationSpecification.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationPreference
+import Amazonka.EC2.Types.CapacityReservationTarget
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an instance\'s Capacity Reservation targeting option. You can
+-- specify only one parameter at a time. If you specify
+-- @CapacityReservationPreference@ and @CapacityReservationTarget@, the
+-- request fails.
+--
+-- Use the @CapacityReservationPreference@ parameter to configure the
+-- instance to run as an On-Demand Instance or to run in any @open@
+-- Capacity Reservation that has matching attributes (instance type,
+-- platform, Availability Zone). Use the @CapacityReservationTarget@
+-- parameter to explicitly target a specific Capacity Reservation or a
+-- Capacity Reservation group.
+--
+-- /See:/ 'newCapacityReservationSpecification' smart constructor.
+data CapacityReservationSpecification = CapacityReservationSpecification'
+  { -- | Indicates the instance\'s Capacity Reservation preferences. Possible
+    -- preferences include:
+    --
+    -- -   @open@ - The instance can run in any @open@ Capacity Reservation
+    --     that has matching attributes (instance type, platform, Availability
+    --     Zone).
+    --
+    -- -   @none@ - The instance avoids running in a Capacity Reservation even
+    --     if one is available. The instance runs as an On-Demand Instance.
+    capacityReservationPreference :: Prelude.Maybe CapacityReservationPreference,
+    -- | Information about the target Capacity Reservation or Capacity
+    -- Reservation group.
+    capacityReservationTarget :: Prelude.Maybe CapacityReservationTarget
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationPreference', 'capacityReservationSpecification_capacityReservationPreference' - Indicates the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs as an On-Demand Instance.
+--
+-- 'capacityReservationTarget', 'capacityReservationSpecification_capacityReservationTarget' - Information about the target Capacity Reservation or Capacity
+-- Reservation group.
+newCapacityReservationSpecification ::
+  CapacityReservationSpecification
+newCapacityReservationSpecification =
+  CapacityReservationSpecification'
+    { capacityReservationPreference =
+        Prelude.Nothing,
+      capacityReservationTarget =
+        Prelude.Nothing
+    }
+
+-- | Indicates the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs as an On-Demand Instance.
+capacityReservationSpecification_capacityReservationPreference :: Lens.Lens' CapacityReservationSpecification (Prelude.Maybe CapacityReservationPreference)
+capacityReservationSpecification_capacityReservationPreference = Lens.lens (\CapacityReservationSpecification' {capacityReservationPreference} -> capacityReservationPreference) (\s@CapacityReservationSpecification' {} a -> s {capacityReservationPreference = a} :: CapacityReservationSpecification)
+
+-- | Information about the target Capacity Reservation or Capacity
+-- Reservation group.
+capacityReservationSpecification_capacityReservationTarget :: Lens.Lens' CapacityReservationSpecification (Prelude.Maybe CapacityReservationTarget)
+capacityReservationSpecification_capacityReservationTarget = Lens.lens (\CapacityReservationSpecification' {capacityReservationTarget} -> capacityReservationTarget) (\s@CapacityReservationSpecification' {} a -> s {capacityReservationTarget = a} :: CapacityReservationSpecification)
+
+instance
+  Prelude.Hashable
+    CapacityReservationSpecification
+  where
+  hashWithSalt
+    _salt
+    CapacityReservationSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationPreference
+        `Prelude.hashWithSalt` capacityReservationTarget
+
+instance
+  Prelude.NFData
+    CapacityReservationSpecification
+  where
+  rnf CapacityReservationSpecification' {..} =
+    Prelude.rnf capacityReservationPreference
+      `Prelude.seq` Prelude.rnf capacityReservationTarget
+
+instance
+  Data.ToQuery
+    CapacityReservationSpecification
+  where
+  toQuery CapacityReservationSpecification' {..} =
+    Prelude.mconcat
+      [ "CapacityReservationPreference"
+          Data.=: capacityReservationPreference,
+        "CapacityReservationTarget"
+          Data.=: capacityReservationTarget
+      ]
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationSpecificationResponse.hs b/gen/Amazonka/EC2/Types/CapacityReservationSpecificationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationSpecificationResponse.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationSpecificationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationSpecificationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationPreference
+import Amazonka.EC2.Types.CapacityReservationTargetResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instance\'s Capacity Reservation targeting preferences.
+-- The action returns the @capacityReservationPreference@ response element
+-- if the instance is configured to run in On-Demand capacity, or if it is
+-- configured in run in any @open@ Capacity Reservation that has matching
+-- attributes (instance type, platform, Availability Zone). The action
+-- returns the @capacityReservationTarget@ response element if the instance
+-- explicily targets a specific Capacity Reservation or Capacity
+-- Reservation group.
+--
+-- /See:/ 'newCapacityReservationSpecificationResponse' smart constructor.
+data CapacityReservationSpecificationResponse = CapacityReservationSpecificationResponse'
+  { -- | Describes the instance\'s Capacity Reservation preferences. Possible
+    -- preferences include:
+    --
+    -- -   @open@ - The instance can run in any @open@ Capacity Reservation
+    --     that has matching attributes (instance type, platform, Availability
+    --     Zone).
+    --
+    -- -   @none@ - The instance avoids running in a Capacity Reservation even
+    --     if one is available. The instance runs in On-Demand capacity.
+    capacityReservationPreference :: Prelude.Maybe CapacityReservationPreference,
+    -- | Information about the targeted Capacity Reservation or Capacity
+    -- Reservation group.
+    capacityReservationTarget :: Prelude.Maybe CapacityReservationTargetResponse
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationPreference', 'capacityReservationSpecificationResponse_capacityReservationPreference' - Describes the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs in On-Demand capacity.
+--
+-- 'capacityReservationTarget', 'capacityReservationSpecificationResponse_capacityReservationTarget' - Information about the targeted Capacity Reservation or Capacity
+-- Reservation group.
+newCapacityReservationSpecificationResponse ::
+  CapacityReservationSpecificationResponse
+newCapacityReservationSpecificationResponse =
+  CapacityReservationSpecificationResponse'
+    { capacityReservationPreference =
+        Prelude.Nothing,
+      capacityReservationTarget =
+        Prelude.Nothing
+    }
+
+-- | Describes the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs in On-Demand capacity.
+capacityReservationSpecificationResponse_capacityReservationPreference :: Lens.Lens' CapacityReservationSpecificationResponse (Prelude.Maybe CapacityReservationPreference)
+capacityReservationSpecificationResponse_capacityReservationPreference = Lens.lens (\CapacityReservationSpecificationResponse' {capacityReservationPreference} -> capacityReservationPreference) (\s@CapacityReservationSpecificationResponse' {} a -> s {capacityReservationPreference = a} :: CapacityReservationSpecificationResponse)
+
+-- | Information about the targeted Capacity Reservation or Capacity
+-- Reservation group.
+capacityReservationSpecificationResponse_capacityReservationTarget :: Lens.Lens' CapacityReservationSpecificationResponse (Prelude.Maybe CapacityReservationTargetResponse)
+capacityReservationSpecificationResponse_capacityReservationTarget = Lens.lens (\CapacityReservationSpecificationResponse' {capacityReservationTarget} -> capacityReservationTarget) (\s@CapacityReservationSpecificationResponse' {} a -> s {capacityReservationTarget = a} :: CapacityReservationSpecificationResponse)
+
+instance
+  Data.FromXML
+    CapacityReservationSpecificationResponse
+  where
+  parseXML x =
+    CapacityReservationSpecificationResponse'
+      Prelude.<$> (x Data..@? "capacityReservationPreference")
+      Prelude.<*> (x Data..@? "capacityReservationTarget")
+
+instance
+  Prelude.Hashable
+    CapacityReservationSpecificationResponse
+  where
+  hashWithSalt
+    _salt
+    CapacityReservationSpecificationResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationPreference
+        `Prelude.hashWithSalt` capacityReservationTarget
+
+instance
+  Prelude.NFData
+    CapacityReservationSpecificationResponse
+  where
+  rnf CapacityReservationSpecificationResponse' {..} =
+    Prelude.rnf capacityReservationPreference
+      `Prelude.seq` Prelude.rnf capacityReservationTarget
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationState.hs b/gen/Amazonka/EC2/Types/CapacityReservationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationState
+  ( CapacityReservationState
+      ( ..,
+        CapacityReservationState_Active,
+        CapacityReservationState_Cancelled,
+        CapacityReservationState_Expired,
+        CapacityReservationState_Failed,
+        CapacityReservationState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CapacityReservationState = CapacityReservationState'
+  { fromCapacityReservationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CapacityReservationState_Active :: CapacityReservationState
+pattern CapacityReservationState_Active = CapacityReservationState' "active"
+
+pattern CapacityReservationState_Cancelled :: CapacityReservationState
+pattern CapacityReservationState_Cancelled = CapacityReservationState' "cancelled"
+
+pattern CapacityReservationState_Expired :: CapacityReservationState
+pattern CapacityReservationState_Expired = CapacityReservationState' "expired"
+
+pattern CapacityReservationState_Failed :: CapacityReservationState
+pattern CapacityReservationState_Failed = CapacityReservationState' "failed"
+
+pattern CapacityReservationState_Pending :: CapacityReservationState
+pattern CapacityReservationState_Pending = CapacityReservationState' "pending"
+
+{-# COMPLETE
+  CapacityReservationState_Active,
+  CapacityReservationState_Cancelled,
+  CapacityReservationState_Expired,
+  CapacityReservationState_Failed,
+  CapacityReservationState_Pending,
+  CapacityReservationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationTarget.hs b/gen/Amazonka/EC2/Types/CapacityReservationTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationTarget.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationTarget where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a target Capacity Reservation or Capacity Reservation group.
+--
+-- /See:/ 'newCapacityReservationTarget' smart constructor.
+data CapacityReservationTarget = CapacityReservationTarget'
+  { -- | The ID of the Capacity Reservation in which to run the instance.
+    capacityReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Capacity Reservation resource group in which to run the
+    -- instance.
+    capacityReservationResourceGroupArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationId', 'capacityReservationTarget_capacityReservationId' - The ID of the Capacity Reservation in which to run the instance.
+--
+-- 'capacityReservationResourceGroupArn', 'capacityReservationTarget_capacityReservationResourceGroupArn' - The ARN of the Capacity Reservation resource group in which to run the
+-- instance.
+newCapacityReservationTarget ::
+  CapacityReservationTarget
+newCapacityReservationTarget =
+  CapacityReservationTarget'
+    { capacityReservationId =
+        Prelude.Nothing,
+      capacityReservationResourceGroupArn =
+        Prelude.Nothing
+    }
+
+-- | The ID of the Capacity Reservation in which to run the instance.
+capacityReservationTarget_capacityReservationId :: Lens.Lens' CapacityReservationTarget (Prelude.Maybe Prelude.Text)
+capacityReservationTarget_capacityReservationId = Lens.lens (\CapacityReservationTarget' {capacityReservationId} -> capacityReservationId) (\s@CapacityReservationTarget' {} a -> s {capacityReservationId = a} :: CapacityReservationTarget)
+
+-- | The ARN of the Capacity Reservation resource group in which to run the
+-- instance.
+capacityReservationTarget_capacityReservationResourceGroupArn :: Lens.Lens' CapacityReservationTarget (Prelude.Maybe Prelude.Text)
+capacityReservationTarget_capacityReservationResourceGroupArn = Lens.lens (\CapacityReservationTarget' {capacityReservationResourceGroupArn} -> capacityReservationResourceGroupArn) (\s@CapacityReservationTarget' {} a -> s {capacityReservationResourceGroupArn = a} :: CapacityReservationTarget)
+
+instance Prelude.Hashable CapacityReservationTarget where
+  hashWithSalt _salt CapacityReservationTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` capacityReservationId
+      `Prelude.hashWithSalt` capacityReservationResourceGroupArn
+
+instance Prelude.NFData CapacityReservationTarget where
+  rnf CapacityReservationTarget' {..} =
+    Prelude.rnf capacityReservationId
+      `Prelude.seq` Prelude.rnf capacityReservationResourceGroupArn
+
+instance Data.ToQuery CapacityReservationTarget where
+  toQuery CapacityReservationTarget' {..} =
+    Prelude.mconcat
+      [ "CapacityReservationId"
+          Data.=: capacityReservationId,
+        "CapacityReservationResourceGroupArn"
+          Data.=: capacityReservationResourceGroupArn
+      ]
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationTargetResponse.hs b/gen/Amazonka/EC2/Types/CapacityReservationTargetResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationTargetResponse.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationTargetResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationTargetResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a target Capacity Reservation or Capacity Reservation group.
+--
+-- /See:/ 'newCapacityReservationTargetResponse' smart constructor.
+data CapacityReservationTargetResponse = CapacityReservationTargetResponse'
+  { -- | The ID of the targeted Capacity Reservation.
+    capacityReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the targeted Capacity Reservation group.
+    capacityReservationResourceGroupArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CapacityReservationTargetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationId', 'capacityReservationTargetResponse_capacityReservationId' - The ID of the targeted Capacity Reservation.
+--
+-- 'capacityReservationResourceGroupArn', 'capacityReservationTargetResponse_capacityReservationResourceGroupArn' - The ARN of the targeted Capacity Reservation group.
+newCapacityReservationTargetResponse ::
+  CapacityReservationTargetResponse
+newCapacityReservationTargetResponse =
+  CapacityReservationTargetResponse'
+    { capacityReservationId =
+        Prelude.Nothing,
+      capacityReservationResourceGroupArn =
+        Prelude.Nothing
+    }
+
+-- | The ID of the targeted Capacity Reservation.
+capacityReservationTargetResponse_capacityReservationId :: Lens.Lens' CapacityReservationTargetResponse (Prelude.Maybe Prelude.Text)
+capacityReservationTargetResponse_capacityReservationId = Lens.lens (\CapacityReservationTargetResponse' {capacityReservationId} -> capacityReservationId) (\s@CapacityReservationTargetResponse' {} a -> s {capacityReservationId = a} :: CapacityReservationTargetResponse)
+
+-- | The ARN of the targeted Capacity Reservation group.
+capacityReservationTargetResponse_capacityReservationResourceGroupArn :: Lens.Lens' CapacityReservationTargetResponse (Prelude.Maybe Prelude.Text)
+capacityReservationTargetResponse_capacityReservationResourceGroupArn = Lens.lens (\CapacityReservationTargetResponse' {capacityReservationResourceGroupArn} -> capacityReservationResourceGroupArn) (\s@CapacityReservationTargetResponse' {} a -> s {capacityReservationResourceGroupArn = a} :: CapacityReservationTargetResponse)
+
+instance
+  Data.FromXML
+    CapacityReservationTargetResponse
+  where
+  parseXML x =
+    CapacityReservationTargetResponse'
+      Prelude.<$> (x Data..@? "capacityReservationId")
+      Prelude.<*> (x Data..@? "capacityReservationResourceGroupArn")
+
+instance
+  Prelude.Hashable
+    CapacityReservationTargetResponse
+  where
+  hashWithSalt
+    _salt
+    CapacityReservationTargetResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationId
+        `Prelude.hashWithSalt` capacityReservationResourceGroupArn
+
+instance
+  Prelude.NFData
+    CapacityReservationTargetResponse
+  where
+  rnf CapacityReservationTargetResponse' {..} =
+    Prelude.rnf capacityReservationId
+      `Prelude.seq` Prelude.rnf capacityReservationResourceGroupArn
diff --git a/gen/Amazonka/EC2/Types/CapacityReservationTenancy.hs b/gen/Amazonka/EC2/Types/CapacityReservationTenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CapacityReservationTenancy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CapacityReservationTenancy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CapacityReservationTenancy
+  ( CapacityReservationTenancy
+      ( ..,
+        CapacityReservationTenancy_Dedicated,
+        CapacityReservationTenancy_Default
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CapacityReservationTenancy = CapacityReservationTenancy'
+  { fromCapacityReservationTenancy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CapacityReservationTenancy_Dedicated :: CapacityReservationTenancy
+pattern CapacityReservationTenancy_Dedicated = CapacityReservationTenancy' "dedicated"
+
+pattern CapacityReservationTenancy_Default :: CapacityReservationTenancy
+pattern CapacityReservationTenancy_Default = CapacityReservationTenancy' "default"
+
+{-# COMPLETE
+  CapacityReservationTenancy_Dedicated,
+  CapacityReservationTenancy_Default,
+  CapacityReservationTenancy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CarrierGateway.hs b/gen/Amazonka/EC2/Types/CarrierGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CarrierGateway.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CarrierGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CarrierGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CarrierGatewayState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a carrier gateway.
+--
+-- /See:/ 'newCarrierGateway' smart constructor.
+data CarrierGateway = CarrierGateway'
+  { -- | The ID of the carrier gateway.
+    carrierGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID of the owner of the carrier gateway.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the carrier gateway.
+    state :: Prelude.Maybe CarrierGatewayState,
+    -- | The tags assigned to the carrier gateway.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC associated with the carrier gateway.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CarrierGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGatewayId', 'carrierGateway_carrierGatewayId' - The ID of the carrier gateway.
+--
+-- 'ownerId', 'carrierGateway_ownerId' - The Amazon Web Services account ID of the owner of the carrier gateway.
+--
+-- 'state', 'carrierGateway_state' - The state of the carrier gateway.
+--
+-- 'tags', 'carrierGateway_tags' - The tags assigned to the carrier gateway.
+--
+-- 'vpcId', 'carrierGateway_vpcId' - The ID of the VPC associated with the carrier gateway.
+newCarrierGateway ::
+  CarrierGateway
+newCarrierGateway =
+  CarrierGateway'
+    { carrierGatewayId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The ID of the carrier gateway.
+carrierGateway_carrierGatewayId :: Lens.Lens' CarrierGateway (Prelude.Maybe Prelude.Text)
+carrierGateway_carrierGatewayId = Lens.lens (\CarrierGateway' {carrierGatewayId} -> carrierGatewayId) (\s@CarrierGateway' {} a -> s {carrierGatewayId = a} :: CarrierGateway)
+
+-- | The Amazon Web Services account ID of the owner of the carrier gateway.
+carrierGateway_ownerId :: Lens.Lens' CarrierGateway (Prelude.Maybe Prelude.Text)
+carrierGateway_ownerId = Lens.lens (\CarrierGateway' {ownerId} -> ownerId) (\s@CarrierGateway' {} a -> s {ownerId = a} :: CarrierGateway)
+
+-- | The state of the carrier gateway.
+carrierGateway_state :: Lens.Lens' CarrierGateway (Prelude.Maybe CarrierGatewayState)
+carrierGateway_state = Lens.lens (\CarrierGateway' {state} -> state) (\s@CarrierGateway' {} a -> s {state = a} :: CarrierGateway)
+
+-- | The tags assigned to the carrier gateway.
+carrierGateway_tags :: Lens.Lens' CarrierGateway (Prelude.Maybe [Tag])
+carrierGateway_tags = Lens.lens (\CarrierGateway' {tags} -> tags) (\s@CarrierGateway' {} a -> s {tags = a} :: CarrierGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC associated with the carrier gateway.
+carrierGateway_vpcId :: Lens.Lens' CarrierGateway (Prelude.Maybe Prelude.Text)
+carrierGateway_vpcId = Lens.lens (\CarrierGateway' {vpcId} -> vpcId) (\s@CarrierGateway' {} a -> s {vpcId = a} :: CarrierGateway)
+
+instance Data.FromXML CarrierGateway where
+  parseXML x =
+    CarrierGateway'
+      Prelude.<$> (x Data..@? "carrierGatewayId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable CarrierGateway where
+  hashWithSalt _salt CarrierGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` carrierGatewayId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData CarrierGateway where
+  rnf CarrierGateway' {..} =
+    Prelude.rnf carrierGatewayId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/CarrierGatewayState.hs b/gen/Amazonka/EC2/Types/CarrierGatewayState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CarrierGatewayState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CarrierGatewayState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CarrierGatewayState
+  ( CarrierGatewayState
+      ( ..,
+        CarrierGatewayState_Available,
+        CarrierGatewayState_Deleted,
+        CarrierGatewayState_Deleting,
+        CarrierGatewayState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CarrierGatewayState = CarrierGatewayState'
+  { fromCarrierGatewayState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CarrierGatewayState_Available :: CarrierGatewayState
+pattern CarrierGatewayState_Available = CarrierGatewayState' "available"
+
+pattern CarrierGatewayState_Deleted :: CarrierGatewayState
+pattern CarrierGatewayState_Deleted = CarrierGatewayState' "deleted"
+
+pattern CarrierGatewayState_Deleting :: CarrierGatewayState
+pattern CarrierGatewayState_Deleting = CarrierGatewayState' "deleting"
+
+pattern CarrierGatewayState_Pending :: CarrierGatewayState
+pattern CarrierGatewayState_Pending = CarrierGatewayState' "pending"
+
+{-# COMPLETE
+  CarrierGatewayState_Available,
+  CarrierGatewayState_Deleted,
+  CarrierGatewayState_Deleting,
+  CarrierGatewayState_Pending,
+  CarrierGatewayState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CertificateAuthentication.hs b/gen/Amazonka/EC2/Types/CertificateAuthentication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CertificateAuthentication.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CertificateAuthentication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CertificateAuthentication where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the client certificate used for authentication.
+--
+-- /See:/ 'newCertificateAuthentication' smart constructor.
+data CertificateAuthentication = CertificateAuthentication'
+  { -- | The ARN of the client certificate.
+    clientRootCertificateChain :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CertificateAuthentication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRootCertificateChain', 'certificateAuthentication_clientRootCertificateChain' - The ARN of the client certificate.
+newCertificateAuthentication ::
+  CertificateAuthentication
+newCertificateAuthentication =
+  CertificateAuthentication'
+    { clientRootCertificateChain =
+        Prelude.Nothing
+    }
+
+-- | The ARN of the client certificate.
+certificateAuthentication_clientRootCertificateChain :: Lens.Lens' CertificateAuthentication (Prelude.Maybe Prelude.Text)
+certificateAuthentication_clientRootCertificateChain = Lens.lens (\CertificateAuthentication' {clientRootCertificateChain} -> clientRootCertificateChain) (\s@CertificateAuthentication' {} a -> s {clientRootCertificateChain = a} :: CertificateAuthentication)
+
+instance Data.FromXML CertificateAuthentication where
+  parseXML x =
+    CertificateAuthentication'
+      Prelude.<$> (x Data..@? "clientRootCertificateChain")
+
+instance Prelude.Hashable CertificateAuthentication where
+  hashWithSalt _salt CertificateAuthentication' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientRootCertificateChain
+
+instance Prelude.NFData CertificateAuthentication where
+  rnf CertificateAuthentication' {..} =
+    Prelude.rnf clientRootCertificateChain
diff --git a/gen/Amazonka/EC2/Types/CertificateAuthenticationRequest.hs b/gen/Amazonka/EC2/Types/CertificateAuthenticationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CertificateAuthenticationRequest.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CertificateAuthenticationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CertificateAuthenticationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the client certificate to be used for authentication.
+--
+-- /See:/ 'newCertificateAuthenticationRequest' smart constructor.
+data CertificateAuthenticationRequest = CertificateAuthenticationRequest'
+  { -- | The ARN of the client certificate. The certificate must be signed by a
+    -- certificate authority (CA) and it must be provisioned in Certificate
+    -- Manager (ACM).
+    clientRootCertificateChainArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CertificateAuthenticationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientRootCertificateChainArn', 'certificateAuthenticationRequest_clientRootCertificateChainArn' - The ARN of the client certificate. The certificate must be signed by a
+-- certificate authority (CA) and it must be provisioned in Certificate
+-- Manager (ACM).
+newCertificateAuthenticationRequest ::
+  CertificateAuthenticationRequest
+newCertificateAuthenticationRequest =
+  CertificateAuthenticationRequest'
+    { clientRootCertificateChainArn =
+        Prelude.Nothing
+    }
+
+-- | The ARN of the client certificate. The certificate must be signed by a
+-- certificate authority (CA) and it must be provisioned in Certificate
+-- Manager (ACM).
+certificateAuthenticationRequest_clientRootCertificateChainArn :: Lens.Lens' CertificateAuthenticationRequest (Prelude.Maybe Prelude.Text)
+certificateAuthenticationRequest_clientRootCertificateChainArn = Lens.lens (\CertificateAuthenticationRequest' {clientRootCertificateChainArn} -> clientRootCertificateChainArn) (\s@CertificateAuthenticationRequest' {} a -> s {clientRootCertificateChainArn = a} :: CertificateAuthenticationRequest)
+
+instance
+  Prelude.Hashable
+    CertificateAuthenticationRequest
+  where
+  hashWithSalt
+    _salt
+    CertificateAuthenticationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` clientRootCertificateChainArn
+
+instance
+  Prelude.NFData
+    CertificateAuthenticationRequest
+  where
+  rnf CertificateAuthenticationRequest' {..} =
+    Prelude.rnf clientRootCertificateChainArn
+
+instance
+  Data.ToQuery
+    CertificateAuthenticationRequest
+  where
+  toQuery CertificateAuthenticationRequest' {..} =
+    Prelude.mconcat
+      [ "ClientRootCertificateChainArn"
+          Data.=: clientRootCertificateChainArn
+      ]
diff --git a/gen/Amazonka/EC2/Types/CidrAuthorizationContext.hs b/gen/Amazonka/EC2/Types/CidrAuthorizationContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CidrAuthorizationContext.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CidrAuthorizationContext
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CidrAuthorizationContext where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides authorization for Amazon to bring a specific IP address range
+-- to a specific Amazon Web Services account using bring your own IP
+-- addresses (BYOIP). For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip Configuring your BYOIP address range>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- /See:/ 'newCidrAuthorizationContext' smart constructor.
+data CidrAuthorizationContext = CidrAuthorizationContext'
+  { -- | The plain-text authorization message for the prefix and account.
+    message :: Prelude.Text,
+    -- | The signed authorization message for the prefix and account.
+    signature :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CidrAuthorizationContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'cidrAuthorizationContext_message' - The plain-text authorization message for the prefix and account.
+--
+-- 'signature', 'cidrAuthorizationContext_signature' - The signed authorization message for the prefix and account.
+newCidrAuthorizationContext ::
+  -- | 'message'
+  Prelude.Text ->
+  -- | 'signature'
+  Prelude.Text ->
+  CidrAuthorizationContext
+newCidrAuthorizationContext pMessage_ pSignature_ =
+  CidrAuthorizationContext'
+    { message = pMessage_,
+      signature = pSignature_
+    }
+
+-- | The plain-text authorization message for the prefix and account.
+cidrAuthorizationContext_message :: Lens.Lens' CidrAuthorizationContext Prelude.Text
+cidrAuthorizationContext_message = Lens.lens (\CidrAuthorizationContext' {message} -> message) (\s@CidrAuthorizationContext' {} a -> s {message = a} :: CidrAuthorizationContext)
+
+-- | The signed authorization message for the prefix and account.
+cidrAuthorizationContext_signature :: Lens.Lens' CidrAuthorizationContext Prelude.Text
+cidrAuthorizationContext_signature = Lens.lens (\CidrAuthorizationContext' {signature} -> signature) (\s@CidrAuthorizationContext' {} a -> s {signature = a} :: CidrAuthorizationContext)
+
+instance Prelude.Hashable CidrAuthorizationContext where
+  hashWithSalt _salt CidrAuthorizationContext' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` signature
+
+instance Prelude.NFData CidrAuthorizationContext where
+  rnf CidrAuthorizationContext' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf signature
+
+instance Data.ToQuery CidrAuthorizationContext where
+  toQuery CidrAuthorizationContext' {..} =
+    Prelude.mconcat
+      [ "Message" Data.=: message,
+        "Signature" Data.=: signature
+      ]
diff --git a/gen/Amazonka/EC2/Types/CidrBlock.hs b/gen/Amazonka/EC2/Types/CidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CidrBlock.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CidrBlock where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv4 CIDR block.
+--
+-- /See:/ 'newCidrBlock' smart constructor.
+data CidrBlock = CidrBlock'
+  { -- | The IPv4 CIDR block.
+    cidrBlock :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlock', 'cidrBlock_cidrBlock' - The IPv4 CIDR block.
+newCidrBlock ::
+  CidrBlock
+newCidrBlock =
+  CidrBlock' {cidrBlock = Prelude.Nothing}
+
+-- | The IPv4 CIDR block.
+cidrBlock_cidrBlock :: Lens.Lens' CidrBlock (Prelude.Maybe Prelude.Text)
+cidrBlock_cidrBlock = Lens.lens (\CidrBlock' {cidrBlock} -> cidrBlock) (\s@CidrBlock' {} a -> s {cidrBlock = a} :: CidrBlock)
+
+instance Data.FromXML CidrBlock where
+  parseXML x =
+    CidrBlock' Prelude.<$> (x Data..@? "cidrBlock")
+
+instance Prelude.Hashable CidrBlock where
+  hashWithSalt _salt CidrBlock' {..} =
+    _salt `Prelude.hashWithSalt` cidrBlock
+
+instance Prelude.NFData CidrBlock where
+  rnf CidrBlock' {..} = Prelude.rnf cidrBlock
diff --git a/gen/Amazonka/EC2/Types/ClassicLinkDnsSupport.hs b/gen/Amazonka/EC2/Types/ClassicLinkDnsSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClassicLinkDnsSupport.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClassicLinkDnsSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClassicLinkDnsSupport where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the ClassicLink DNS support status of a VPC.
+--
+-- /See:/ 'newClassicLinkDnsSupport' smart constructor.
+data ClassicLinkDnsSupport = ClassicLinkDnsSupport'
+  { -- | Indicates whether ClassicLink DNS support is enabled for the VPC.
+    classicLinkDnsSupported :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassicLinkDnsSupport' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classicLinkDnsSupported', 'classicLinkDnsSupport_classicLinkDnsSupported' - Indicates whether ClassicLink DNS support is enabled for the VPC.
+--
+-- 'vpcId', 'classicLinkDnsSupport_vpcId' - The ID of the VPC.
+newClassicLinkDnsSupport ::
+  ClassicLinkDnsSupport
+newClassicLinkDnsSupport =
+  ClassicLinkDnsSupport'
+    { classicLinkDnsSupported =
+        Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | Indicates whether ClassicLink DNS support is enabled for the VPC.
+classicLinkDnsSupport_classicLinkDnsSupported :: Lens.Lens' ClassicLinkDnsSupport (Prelude.Maybe Prelude.Bool)
+classicLinkDnsSupport_classicLinkDnsSupported = Lens.lens (\ClassicLinkDnsSupport' {classicLinkDnsSupported} -> classicLinkDnsSupported) (\s@ClassicLinkDnsSupport' {} a -> s {classicLinkDnsSupported = a} :: ClassicLinkDnsSupport)
+
+-- | The ID of the VPC.
+classicLinkDnsSupport_vpcId :: Lens.Lens' ClassicLinkDnsSupport (Prelude.Maybe Prelude.Text)
+classicLinkDnsSupport_vpcId = Lens.lens (\ClassicLinkDnsSupport' {vpcId} -> vpcId) (\s@ClassicLinkDnsSupport' {} a -> s {vpcId = a} :: ClassicLinkDnsSupport)
+
+instance Data.FromXML ClassicLinkDnsSupport where
+  parseXML x =
+    ClassicLinkDnsSupport'
+      Prelude.<$> (x Data..@? "classicLinkDnsSupported")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable ClassicLinkDnsSupport where
+  hashWithSalt _salt ClassicLinkDnsSupport' {..} =
+    _salt
+      `Prelude.hashWithSalt` classicLinkDnsSupported
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData ClassicLinkDnsSupport where
+  rnf ClassicLinkDnsSupport' {..} =
+    Prelude.rnf classicLinkDnsSupported
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/ClassicLinkInstance.hs b/gen/Amazonka/EC2/Types/ClassicLinkInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClassicLinkInstance.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClassicLinkInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClassicLinkInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Describes a linked EC2-Classic instance.
+--
+-- /See:/ 'newClassicLinkInstance' smart constructor.
+data ClassicLinkInstance = ClassicLinkInstance'
+  { -- | A list of security groups.
+    groups :: Prelude.Maybe [GroupIdentifier],
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the instance.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassicLinkInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groups', 'classicLinkInstance_groups' - A list of security groups.
+--
+-- 'instanceId', 'classicLinkInstance_instanceId' - The ID of the instance.
+--
+-- 'tags', 'classicLinkInstance_tags' - Any tags assigned to the instance.
+--
+-- 'vpcId', 'classicLinkInstance_vpcId' - The ID of the VPC.
+newClassicLinkInstance ::
+  ClassicLinkInstance
+newClassicLinkInstance =
+  ClassicLinkInstance'
+    { groups = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | A list of security groups.
+classicLinkInstance_groups :: Lens.Lens' ClassicLinkInstance (Prelude.Maybe [GroupIdentifier])
+classicLinkInstance_groups = Lens.lens (\ClassicLinkInstance' {groups} -> groups) (\s@ClassicLinkInstance' {} a -> s {groups = a} :: ClassicLinkInstance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the instance.
+classicLinkInstance_instanceId :: Lens.Lens' ClassicLinkInstance (Prelude.Maybe Prelude.Text)
+classicLinkInstance_instanceId = Lens.lens (\ClassicLinkInstance' {instanceId} -> instanceId) (\s@ClassicLinkInstance' {} a -> s {instanceId = a} :: ClassicLinkInstance)
+
+-- | Any tags assigned to the instance.
+classicLinkInstance_tags :: Lens.Lens' ClassicLinkInstance (Prelude.Maybe [Tag])
+classicLinkInstance_tags = Lens.lens (\ClassicLinkInstance' {tags} -> tags) (\s@ClassicLinkInstance' {} a -> s {tags = a} :: ClassicLinkInstance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+classicLinkInstance_vpcId :: Lens.Lens' ClassicLinkInstance (Prelude.Maybe Prelude.Text)
+classicLinkInstance_vpcId = Lens.lens (\ClassicLinkInstance' {vpcId} -> vpcId) (\s@ClassicLinkInstance' {} a -> s {vpcId = a} :: ClassicLinkInstance)
+
+instance Data.FromXML ClassicLinkInstance where
+  parseXML x =
+    ClassicLinkInstance'
+      Prelude.<$> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable ClassicLinkInstance where
+  hashWithSalt _salt ClassicLinkInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData ClassicLinkInstance where
+  rnf ClassicLinkInstance' {..} =
+    Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/ClassicLoadBalancer.hs b/gen/Amazonka/EC2/Types/ClassicLoadBalancer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClassicLoadBalancer.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClassicLoadBalancer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClassicLoadBalancer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Classic Load Balancer.
+--
+-- /See:/ 'newClassicLoadBalancer' smart constructor.
+data ClassicLoadBalancer = ClassicLoadBalancer'
+  { -- | The name of the load balancer.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassicLoadBalancer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'classicLoadBalancer_name' - The name of the load balancer.
+newClassicLoadBalancer ::
+  ClassicLoadBalancer
+newClassicLoadBalancer =
+  ClassicLoadBalancer' {name = Prelude.Nothing}
+
+-- | The name of the load balancer.
+classicLoadBalancer_name :: Lens.Lens' ClassicLoadBalancer (Prelude.Maybe Prelude.Text)
+classicLoadBalancer_name = Lens.lens (\ClassicLoadBalancer' {name} -> name) (\s@ClassicLoadBalancer' {} a -> s {name = a} :: ClassicLoadBalancer)
+
+instance Data.FromXML ClassicLoadBalancer where
+  parseXML x =
+    ClassicLoadBalancer'
+      Prelude.<$> (x Data..@? "name")
+
+instance Prelude.Hashable ClassicLoadBalancer where
+  hashWithSalt _salt ClassicLoadBalancer' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ClassicLoadBalancer where
+  rnf ClassicLoadBalancer' {..} = Prelude.rnf name
+
+instance Data.ToQuery ClassicLoadBalancer where
+  toQuery ClassicLoadBalancer' {..} =
+    Prelude.mconcat ["Name" Data.=: name]
diff --git a/gen/Amazonka/EC2/Types/ClassicLoadBalancersConfig.hs b/gen/Amazonka/EC2/Types/ClassicLoadBalancersConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClassicLoadBalancersConfig.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClassicLoadBalancersConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClassicLoadBalancersConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClassicLoadBalancer
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Classic Load Balancers to attach to a Spot Fleet. Spot
+-- Fleet registers the running Spot Instances with these Classic Load
+-- Balancers.
+--
+-- /See:/ 'newClassicLoadBalancersConfig' smart constructor.
+data ClassicLoadBalancersConfig = ClassicLoadBalancersConfig'
+  { -- | One or more Classic Load Balancers.
+    classicLoadBalancers :: Prelude.Maybe (Prelude.NonEmpty ClassicLoadBalancer)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClassicLoadBalancersConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classicLoadBalancers', 'classicLoadBalancersConfig_classicLoadBalancers' - One or more Classic Load Balancers.
+newClassicLoadBalancersConfig ::
+  ClassicLoadBalancersConfig
+newClassicLoadBalancersConfig =
+  ClassicLoadBalancersConfig'
+    { classicLoadBalancers =
+        Prelude.Nothing
+    }
+
+-- | One or more Classic Load Balancers.
+classicLoadBalancersConfig_classicLoadBalancers :: Lens.Lens' ClassicLoadBalancersConfig (Prelude.Maybe (Prelude.NonEmpty ClassicLoadBalancer))
+classicLoadBalancersConfig_classicLoadBalancers = Lens.lens (\ClassicLoadBalancersConfig' {classicLoadBalancers} -> classicLoadBalancers) (\s@ClassicLoadBalancersConfig' {} a -> s {classicLoadBalancers = a} :: ClassicLoadBalancersConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ClassicLoadBalancersConfig where
+  parseXML x =
+    ClassicLoadBalancersConfig'
+      Prelude.<$> ( x
+                      Data..@? "classicLoadBalancers"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList1 "item")
+                  )
+
+instance Prelude.Hashable ClassicLoadBalancersConfig where
+  hashWithSalt _salt ClassicLoadBalancersConfig' {..} =
+    _salt `Prelude.hashWithSalt` classicLoadBalancers
+
+instance Prelude.NFData ClassicLoadBalancersConfig where
+  rnf ClassicLoadBalancersConfig' {..} =
+    Prelude.rnf classicLoadBalancers
+
+instance Data.ToQuery ClassicLoadBalancersConfig where
+  toQuery ClassicLoadBalancersConfig' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "ClassicLoadBalancers"
+              Prelude.<$> classicLoadBalancers
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/ClientCertificateRevocationListStatus.hs b/gen/Amazonka/EC2/Types/ClientCertificateRevocationListStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientCertificateRevocationListStatus.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientCertificateRevocationListStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientCertificateRevocationListStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientCertificateRevocationListStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a client certificate revocation list.
+--
+-- /See:/ 'newClientCertificateRevocationListStatus' smart constructor.
+data ClientCertificateRevocationListStatus = ClientCertificateRevocationListStatus'
+  { -- | The state of the client certificate revocation list.
+    code :: Prelude.Maybe ClientCertificateRevocationListStatusCode,
+    -- | A message about the status of the client certificate revocation list, if
+    -- applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientCertificateRevocationListStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clientCertificateRevocationListStatus_code' - The state of the client certificate revocation list.
+--
+-- 'message', 'clientCertificateRevocationListStatus_message' - A message about the status of the client certificate revocation list, if
+-- applicable.
+newClientCertificateRevocationListStatus ::
+  ClientCertificateRevocationListStatus
+newClientCertificateRevocationListStatus =
+  ClientCertificateRevocationListStatus'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state of the client certificate revocation list.
+clientCertificateRevocationListStatus_code :: Lens.Lens' ClientCertificateRevocationListStatus (Prelude.Maybe ClientCertificateRevocationListStatusCode)
+clientCertificateRevocationListStatus_code = Lens.lens (\ClientCertificateRevocationListStatus' {code} -> code) (\s@ClientCertificateRevocationListStatus' {} a -> s {code = a} :: ClientCertificateRevocationListStatus)
+
+-- | A message about the status of the client certificate revocation list, if
+-- applicable.
+clientCertificateRevocationListStatus_message :: Lens.Lens' ClientCertificateRevocationListStatus (Prelude.Maybe Prelude.Text)
+clientCertificateRevocationListStatus_message = Lens.lens (\ClientCertificateRevocationListStatus' {message} -> message) (\s@ClientCertificateRevocationListStatus' {} a -> s {message = a} :: ClientCertificateRevocationListStatus)
+
+instance
+  Data.FromXML
+    ClientCertificateRevocationListStatus
+  where
+  parseXML x =
+    ClientCertificateRevocationListStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    ClientCertificateRevocationListStatus
+  where
+  hashWithSalt
+    _salt
+    ClientCertificateRevocationListStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    ClientCertificateRevocationListStatus
+  where
+  rnf ClientCertificateRevocationListStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ClientCertificateRevocationListStatusCode.hs b/gen/Amazonka/EC2/Types/ClientCertificateRevocationListStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientCertificateRevocationListStatusCode.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientCertificateRevocationListStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientCertificateRevocationListStatusCode
+  ( ClientCertificateRevocationListStatusCode
+      ( ..,
+        ClientCertificateRevocationListStatusCode_Active,
+        ClientCertificateRevocationListStatusCode_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientCertificateRevocationListStatusCode = ClientCertificateRevocationListStatusCode'
+  { fromClientCertificateRevocationListStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientCertificateRevocationListStatusCode_Active :: ClientCertificateRevocationListStatusCode
+pattern ClientCertificateRevocationListStatusCode_Active = ClientCertificateRevocationListStatusCode' "active"
+
+pattern ClientCertificateRevocationListStatusCode_Pending :: ClientCertificateRevocationListStatusCode
+pattern ClientCertificateRevocationListStatusCode_Pending = ClientCertificateRevocationListStatusCode' "pending"
+
+{-# COMPLETE
+  ClientCertificateRevocationListStatusCode_Active,
+  ClientCertificateRevocationListStatusCode_Pending,
+  ClientCertificateRevocationListStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ClientConnectOptions.hs b/gen/Amazonka/EC2/Types/ClientConnectOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientConnectOptions.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientConnectOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientConnectOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for managing connection authorization for new client
+-- connections.
+--
+-- /See:/ 'newClientConnectOptions' smart constructor.
+data ClientConnectOptions = ClientConnectOptions'
+  { -- | Indicates whether client connect options are enabled. The default is
+    -- @false@ (not enabled).
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Lambda function used for
+    -- connection authorization.
+    lambdaFunctionArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientConnectOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'clientConnectOptions_enabled' - Indicates whether client connect options are enabled. The default is
+-- @false@ (not enabled).
+--
+-- 'lambdaFunctionArn', 'clientConnectOptions_lambdaFunctionArn' - The Amazon Resource Name (ARN) of the Lambda function used for
+-- connection authorization.
+newClientConnectOptions ::
+  ClientConnectOptions
+newClientConnectOptions =
+  ClientConnectOptions'
+    { enabled = Prelude.Nothing,
+      lambdaFunctionArn = Prelude.Nothing
+    }
+
+-- | Indicates whether client connect options are enabled. The default is
+-- @false@ (not enabled).
+clientConnectOptions_enabled :: Lens.Lens' ClientConnectOptions (Prelude.Maybe Prelude.Bool)
+clientConnectOptions_enabled = Lens.lens (\ClientConnectOptions' {enabled} -> enabled) (\s@ClientConnectOptions' {} a -> s {enabled = a} :: ClientConnectOptions)
+
+-- | The Amazon Resource Name (ARN) of the Lambda function used for
+-- connection authorization.
+clientConnectOptions_lambdaFunctionArn :: Lens.Lens' ClientConnectOptions (Prelude.Maybe Prelude.Text)
+clientConnectOptions_lambdaFunctionArn = Lens.lens (\ClientConnectOptions' {lambdaFunctionArn} -> lambdaFunctionArn) (\s@ClientConnectOptions' {} a -> s {lambdaFunctionArn = a} :: ClientConnectOptions)
+
+instance Prelude.Hashable ClientConnectOptions where
+  hashWithSalt _salt ClientConnectOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` lambdaFunctionArn
+
+instance Prelude.NFData ClientConnectOptions where
+  rnf ClientConnectOptions' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf lambdaFunctionArn
+
+instance Data.ToQuery ClientConnectOptions where
+  toQuery ClientConnectOptions' {..} =
+    Prelude.mconcat
+      [ "Enabled" Data.=: enabled,
+        "LambdaFunctionArn" Data.=: lambdaFunctionArn
+      ]
diff --git a/gen/Amazonka/EC2/Types/ClientConnectResponseOptions.hs b/gen/Amazonka/EC2/Types/ClientConnectResponseOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientConnectResponseOptions.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientConnectResponseOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientConnectResponseOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnEndpointAttributeStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for managing connection authorization for new client
+-- connections.
+--
+-- /See:/ 'newClientConnectResponseOptions' smart constructor.
+data ClientConnectResponseOptions = ClientConnectResponseOptions'
+  { -- | Indicates whether client connect options are enabled.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Lambda function used for
+    -- connection authorization.
+    lambdaFunctionArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of any updates to the client connect options.
+    status :: Prelude.Maybe ClientVpnEndpointAttributeStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientConnectResponseOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'clientConnectResponseOptions_enabled' - Indicates whether client connect options are enabled.
+--
+-- 'lambdaFunctionArn', 'clientConnectResponseOptions_lambdaFunctionArn' - The Amazon Resource Name (ARN) of the Lambda function used for
+-- connection authorization.
+--
+-- 'status', 'clientConnectResponseOptions_status' - The status of any updates to the client connect options.
+newClientConnectResponseOptions ::
+  ClientConnectResponseOptions
+newClientConnectResponseOptions =
+  ClientConnectResponseOptions'
+    { enabled =
+        Prelude.Nothing,
+      lambdaFunctionArn = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Indicates whether client connect options are enabled.
+clientConnectResponseOptions_enabled :: Lens.Lens' ClientConnectResponseOptions (Prelude.Maybe Prelude.Bool)
+clientConnectResponseOptions_enabled = Lens.lens (\ClientConnectResponseOptions' {enabled} -> enabled) (\s@ClientConnectResponseOptions' {} a -> s {enabled = a} :: ClientConnectResponseOptions)
+
+-- | The Amazon Resource Name (ARN) of the Lambda function used for
+-- connection authorization.
+clientConnectResponseOptions_lambdaFunctionArn :: Lens.Lens' ClientConnectResponseOptions (Prelude.Maybe Prelude.Text)
+clientConnectResponseOptions_lambdaFunctionArn = Lens.lens (\ClientConnectResponseOptions' {lambdaFunctionArn} -> lambdaFunctionArn) (\s@ClientConnectResponseOptions' {} a -> s {lambdaFunctionArn = a} :: ClientConnectResponseOptions)
+
+-- | The status of any updates to the client connect options.
+clientConnectResponseOptions_status :: Lens.Lens' ClientConnectResponseOptions (Prelude.Maybe ClientVpnEndpointAttributeStatus)
+clientConnectResponseOptions_status = Lens.lens (\ClientConnectResponseOptions' {status} -> status) (\s@ClientConnectResponseOptions' {} a -> s {status = a} :: ClientConnectResponseOptions)
+
+instance Data.FromXML ClientConnectResponseOptions where
+  parseXML x =
+    ClientConnectResponseOptions'
+      Prelude.<$> (x Data..@? "enabled")
+      Prelude.<*> (x Data..@? "lambdaFunctionArn")
+      Prelude.<*> (x Data..@? "status")
+
+instance
+  Prelude.Hashable
+    ClientConnectResponseOptions
+  where
+  hashWithSalt _salt ClientConnectResponseOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` lambdaFunctionArn
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ClientConnectResponseOptions where
+  rnf ClientConnectResponseOptions' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf lambdaFunctionArn
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/ClientData.hs b/gen/Amazonka/EC2/Types/ClientData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientData.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the client-specific data.
+--
+-- /See:/ 'newClientData' smart constructor.
+data ClientData = ClientData'
+  { -- | A user-defined comment about the disk upload.
+    comment :: Prelude.Maybe Prelude.Text,
+    -- | The time that the disk upload ends.
+    uploadEnd :: Prelude.Maybe Data.ISO8601,
+    -- | The size of the uploaded disk image, in GiB.
+    uploadSize :: Prelude.Maybe Prelude.Double,
+    -- | The time that the disk upload starts.
+    uploadStart :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'comment', 'clientData_comment' - A user-defined comment about the disk upload.
+--
+-- 'uploadEnd', 'clientData_uploadEnd' - The time that the disk upload ends.
+--
+-- 'uploadSize', 'clientData_uploadSize' - The size of the uploaded disk image, in GiB.
+--
+-- 'uploadStart', 'clientData_uploadStart' - The time that the disk upload starts.
+newClientData ::
+  ClientData
+newClientData =
+  ClientData'
+    { comment = Prelude.Nothing,
+      uploadEnd = Prelude.Nothing,
+      uploadSize = Prelude.Nothing,
+      uploadStart = Prelude.Nothing
+    }
+
+-- | A user-defined comment about the disk upload.
+clientData_comment :: Lens.Lens' ClientData (Prelude.Maybe Prelude.Text)
+clientData_comment = Lens.lens (\ClientData' {comment} -> comment) (\s@ClientData' {} a -> s {comment = a} :: ClientData)
+
+-- | The time that the disk upload ends.
+clientData_uploadEnd :: Lens.Lens' ClientData (Prelude.Maybe Prelude.UTCTime)
+clientData_uploadEnd = Lens.lens (\ClientData' {uploadEnd} -> uploadEnd) (\s@ClientData' {} a -> s {uploadEnd = a} :: ClientData) Prelude.. Lens.mapping Data._Time
+
+-- | The size of the uploaded disk image, in GiB.
+clientData_uploadSize :: Lens.Lens' ClientData (Prelude.Maybe Prelude.Double)
+clientData_uploadSize = Lens.lens (\ClientData' {uploadSize} -> uploadSize) (\s@ClientData' {} a -> s {uploadSize = a} :: ClientData)
+
+-- | The time that the disk upload starts.
+clientData_uploadStart :: Lens.Lens' ClientData (Prelude.Maybe Prelude.UTCTime)
+clientData_uploadStart = Lens.lens (\ClientData' {uploadStart} -> uploadStart) (\s@ClientData' {} a -> s {uploadStart = a} :: ClientData) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable ClientData where
+  hashWithSalt _salt ClientData' {..} =
+    _salt
+      `Prelude.hashWithSalt` comment
+      `Prelude.hashWithSalt` uploadEnd
+      `Prelude.hashWithSalt` uploadSize
+      `Prelude.hashWithSalt` uploadStart
+
+instance Prelude.NFData ClientData where
+  rnf ClientData' {..} =
+    Prelude.rnf comment
+      `Prelude.seq` Prelude.rnf uploadEnd
+      `Prelude.seq` Prelude.rnf uploadSize
+      `Prelude.seq` Prelude.rnf uploadStart
+
+instance Data.ToQuery ClientData where
+  toQuery ClientData' {..} =
+    Prelude.mconcat
+      [ "Comment" Data.=: comment,
+        "UploadEnd" Data.=: uploadEnd,
+        "UploadSize" Data.=: uploadSize,
+        "UploadStart" Data.=: uploadStart
+      ]
diff --git a/gen/Amazonka/EC2/Types/ClientLoginBannerOptions.hs b/gen/Amazonka/EC2/Types/ClientLoginBannerOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientLoginBannerOptions.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientLoginBannerOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientLoginBannerOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+--
+-- /See:/ 'newClientLoginBannerOptions' smart constructor.
+data ClientLoginBannerOptions = ClientLoginBannerOptions'
+  { -- | Customizable text that will be displayed in a banner on Amazon Web
+    -- Services provided clients when a VPN session is established. UTF-8
+    -- encoded characters only. Maximum of 1400 characters.
+    bannerText :: Prelude.Maybe Prelude.Text,
+    -- | Enable or disable a customizable text banner that will be displayed on
+    -- Amazon Web Services provided clients when a VPN session is established.
+    --
+    -- Valid values: @true | false@
+    --
+    -- Default value: @false@
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientLoginBannerOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bannerText', 'clientLoginBannerOptions_bannerText' - Customizable text that will be displayed in a banner on Amazon Web
+-- Services provided clients when a VPN session is established. UTF-8
+-- encoded characters only. Maximum of 1400 characters.
+--
+-- 'enabled', 'clientLoginBannerOptions_enabled' - Enable or disable a customizable text banner that will be displayed on
+-- Amazon Web Services provided clients when a VPN session is established.
+--
+-- Valid values: @true | false@
+--
+-- Default value: @false@
+newClientLoginBannerOptions ::
+  ClientLoginBannerOptions
+newClientLoginBannerOptions =
+  ClientLoginBannerOptions'
+    { bannerText =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | Customizable text that will be displayed in a banner on Amazon Web
+-- Services provided clients when a VPN session is established. UTF-8
+-- encoded characters only. Maximum of 1400 characters.
+clientLoginBannerOptions_bannerText :: Lens.Lens' ClientLoginBannerOptions (Prelude.Maybe Prelude.Text)
+clientLoginBannerOptions_bannerText = Lens.lens (\ClientLoginBannerOptions' {bannerText} -> bannerText) (\s@ClientLoginBannerOptions' {} a -> s {bannerText = a} :: ClientLoginBannerOptions)
+
+-- | Enable or disable a customizable text banner that will be displayed on
+-- Amazon Web Services provided clients when a VPN session is established.
+--
+-- Valid values: @true | false@
+--
+-- Default value: @false@
+clientLoginBannerOptions_enabled :: Lens.Lens' ClientLoginBannerOptions (Prelude.Maybe Prelude.Bool)
+clientLoginBannerOptions_enabled = Lens.lens (\ClientLoginBannerOptions' {enabled} -> enabled) (\s@ClientLoginBannerOptions' {} a -> s {enabled = a} :: ClientLoginBannerOptions)
+
+instance Prelude.Hashable ClientLoginBannerOptions where
+  hashWithSalt _salt ClientLoginBannerOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` bannerText
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData ClientLoginBannerOptions where
+  rnf ClientLoginBannerOptions' {..} =
+    Prelude.rnf bannerText
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToQuery ClientLoginBannerOptions where
+  toQuery ClientLoginBannerOptions' {..} =
+    Prelude.mconcat
+      [ "BannerText" Data.=: bannerText,
+        "Enabled" Data.=: enabled
+      ]
diff --git a/gen/Amazonka/EC2/Types/ClientLoginBannerResponseOptions.hs b/gen/Amazonka/EC2/Types/ClientLoginBannerResponseOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientLoginBannerResponseOptions.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientLoginBannerResponseOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientLoginBannerResponseOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Current state of options for customizable text banner that will be
+-- displayed on Amazon Web Services provided clients when a VPN session is
+-- established.
+--
+-- /See:/ 'newClientLoginBannerResponseOptions' smart constructor.
+data ClientLoginBannerResponseOptions = ClientLoginBannerResponseOptions'
+  { -- | Customizable text that will be displayed in a banner on Amazon Web
+    -- Services provided clients when a VPN session is established. UTF-8
+    -- encoded characters only. Maximum of 1400 characters.
+    bannerText :: Prelude.Maybe Prelude.Text,
+    -- | Current state of text banner feature.
+    --
+    -- Valid values: @true | false@
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientLoginBannerResponseOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bannerText', 'clientLoginBannerResponseOptions_bannerText' - Customizable text that will be displayed in a banner on Amazon Web
+-- Services provided clients when a VPN session is established. UTF-8
+-- encoded characters only. Maximum of 1400 characters.
+--
+-- 'enabled', 'clientLoginBannerResponseOptions_enabled' - Current state of text banner feature.
+--
+-- Valid values: @true | false@
+newClientLoginBannerResponseOptions ::
+  ClientLoginBannerResponseOptions
+newClientLoginBannerResponseOptions =
+  ClientLoginBannerResponseOptions'
+    { bannerText =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | Customizable text that will be displayed in a banner on Amazon Web
+-- Services provided clients when a VPN session is established. UTF-8
+-- encoded characters only. Maximum of 1400 characters.
+clientLoginBannerResponseOptions_bannerText :: Lens.Lens' ClientLoginBannerResponseOptions (Prelude.Maybe Prelude.Text)
+clientLoginBannerResponseOptions_bannerText = Lens.lens (\ClientLoginBannerResponseOptions' {bannerText} -> bannerText) (\s@ClientLoginBannerResponseOptions' {} a -> s {bannerText = a} :: ClientLoginBannerResponseOptions)
+
+-- | Current state of text banner feature.
+--
+-- Valid values: @true | false@
+clientLoginBannerResponseOptions_enabled :: Lens.Lens' ClientLoginBannerResponseOptions (Prelude.Maybe Prelude.Bool)
+clientLoginBannerResponseOptions_enabled = Lens.lens (\ClientLoginBannerResponseOptions' {enabled} -> enabled) (\s@ClientLoginBannerResponseOptions' {} a -> s {enabled = a} :: ClientLoginBannerResponseOptions)
+
+instance
+  Data.FromXML
+    ClientLoginBannerResponseOptions
+  where
+  parseXML x =
+    ClientLoginBannerResponseOptions'
+      Prelude.<$> (x Data..@? "bannerText")
+      Prelude.<*> (x Data..@? "enabled")
+
+instance
+  Prelude.Hashable
+    ClientLoginBannerResponseOptions
+  where
+  hashWithSalt
+    _salt
+    ClientLoginBannerResponseOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` bannerText
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    ClientLoginBannerResponseOptions
+  where
+  rnf ClientLoginBannerResponseOptions' {..} =
+    Prelude.rnf bannerText
+      `Prelude.seq` Prelude.rnf enabled
diff --git a/gen/Amazonka/EC2/Types/ClientVpnAuthentication.hs b/gen/Amazonka/EC2/Types/ClientVpnAuthentication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnAuthentication.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnAuthentication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnAuthentication where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CertificateAuthentication
+import Amazonka.EC2.Types.ClientVpnAuthenticationType
+import Amazonka.EC2.Types.DirectoryServiceAuthentication
+import Amazonka.EC2.Types.FederatedAuthentication
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the authentication methods used by a Client VPN endpoint. For
+-- more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html Authentication>
+-- in the /Client VPN Administrator Guide/.
+--
+-- /See:/ 'newClientVpnAuthentication' smart constructor.
+data ClientVpnAuthentication = ClientVpnAuthentication'
+  { -- | Information about the Active Directory, if applicable.
+    activeDirectory :: Prelude.Maybe DirectoryServiceAuthentication,
+    -- | Information about the IAM SAML identity provider, if applicable.
+    federatedAuthentication :: Prelude.Maybe FederatedAuthentication,
+    -- | Information about the authentication certificates, if applicable.
+    mutualAuthentication :: Prelude.Maybe CertificateAuthentication,
+    -- | The authentication type used.
+    type' :: Prelude.Maybe ClientVpnAuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnAuthentication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeDirectory', 'clientVpnAuthentication_activeDirectory' - Information about the Active Directory, if applicable.
+--
+-- 'federatedAuthentication', 'clientVpnAuthentication_federatedAuthentication' - Information about the IAM SAML identity provider, if applicable.
+--
+-- 'mutualAuthentication', 'clientVpnAuthentication_mutualAuthentication' - Information about the authentication certificates, if applicable.
+--
+-- 'type'', 'clientVpnAuthentication_type' - The authentication type used.
+newClientVpnAuthentication ::
+  ClientVpnAuthentication
+newClientVpnAuthentication =
+  ClientVpnAuthentication'
+    { activeDirectory =
+        Prelude.Nothing,
+      federatedAuthentication = Prelude.Nothing,
+      mutualAuthentication = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | Information about the Active Directory, if applicable.
+clientVpnAuthentication_activeDirectory :: Lens.Lens' ClientVpnAuthentication (Prelude.Maybe DirectoryServiceAuthentication)
+clientVpnAuthentication_activeDirectory = Lens.lens (\ClientVpnAuthentication' {activeDirectory} -> activeDirectory) (\s@ClientVpnAuthentication' {} a -> s {activeDirectory = a} :: ClientVpnAuthentication)
+
+-- | Information about the IAM SAML identity provider, if applicable.
+clientVpnAuthentication_federatedAuthentication :: Lens.Lens' ClientVpnAuthentication (Prelude.Maybe FederatedAuthentication)
+clientVpnAuthentication_federatedAuthentication = Lens.lens (\ClientVpnAuthentication' {federatedAuthentication} -> federatedAuthentication) (\s@ClientVpnAuthentication' {} a -> s {federatedAuthentication = a} :: ClientVpnAuthentication)
+
+-- | Information about the authentication certificates, if applicable.
+clientVpnAuthentication_mutualAuthentication :: Lens.Lens' ClientVpnAuthentication (Prelude.Maybe CertificateAuthentication)
+clientVpnAuthentication_mutualAuthentication = Lens.lens (\ClientVpnAuthentication' {mutualAuthentication} -> mutualAuthentication) (\s@ClientVpnAuthentication' {} a -> s {mutualAuthentication = a} :: ClientVpnAuthentication)
+
+-- | The authentication type used.
+clientVpnAuthentication_type :: Lens.Lens' ClientVpnAuthentication (Prelude.Maybe ClientVpnAuthenticationType)
+clientVpnAuthentication_type = Lens.lens (\ClientVpnAuthentication' {type'} -> type') (\s@ClientVpnAuthentication' {} a -> s {type' = a} :: ClientVpnAuthentication)
+
+instance Data.FromXML ClientVpnAuthentication where
+  parseXML x =
+    ClientVpnAuthentication'
+      Prelude.<$> (x Data..@? "activeDirectory")
+      Prelude.<*> (x Data..@? "federatedAuthentication")
+      Prelude.<*> (x Data..@? "mutualAuthentication")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable ClientVpnAuthentication where
+  hashWithSalt _salt ClientVpnAuthentication' {..} =
+    _salt
+      `Prelude.hashWithSalt` activeDirectory
+      `Prelude.hashWithSalt` federatedAuthentication
+      `Prelude.hashWithSalt` mutualAuthentication
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ClientVpnAuthentication where
+  rnf ClientVpnAuthentication' {..} =
+    Prelude.rnf activeDirectory
+      `Prelude.seq` Prelude.rnf federatedAuthentication
+      `Prelude.seq` Prelude.rnf mutualAuthentication
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/ClientVpnAuthenticationRequest.hs b/gen/Amazonka/EC2/Types/ClientVpnAuthenticationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnAuthenticationRequest.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnAuthenticationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnAuthenticationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CertificateAuthenticationRequest
+import Amazonka.EC2.Types.ClientVpnAuthenticationType
+import Amazonka.EC2.Types.DirectoryServiceAuthenticationRequest
+import Amazonka.EC2.Types.FederatedAuthenticationRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the authentication method to be used by a Client VPN endpoint.
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication Authentication>
+-- in the /Client VPN Administrator Guide/.
+--
+-- /See:/ 'newClientVpnAuthenticationRequest' smart constructor.
+data ClientVpnAuthenticationRequest = ClientVpnAuthenticationRequest'
+  { -- | Information about the Active Directory to be used, if applicable. You
+    -- must provide this information if __Type__ is
+    -- @directory-service-authentication@.
+    activeDirectory :: Prelude.Maybe DirectoryServiceAuthenticationRequest,
+    -- | Information about the IAM SAML identity provider to be used, if
+    -- applicable. You must provide this information if __Type__ is
+    -- @federated-authentication@.
+    federatedAuthentication :: Prelude.Maybe FederatedAuthenticationRequest,
+    -- | Information about the authentication certificates to be used, if
+    -- applicable. You must provide this information if __Type__ is
+    -- @certificate-authentication@.
+    mutualAuthentication :: Prelude.Maybe CertificateAuthenticationRequest,
+    -- | The type of client authentication to be used.
+    type' :: Prelude.Maybe ClientVpnAuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnAuthenticationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activeDirectory', 'clientVpnAuthenticationRequest_activeDirectory' - Information about the Active Directory to be used, if applicable. You
+-- must provide this information if __Type__ is
+-- @directory-service-authentication@.
+--
+-- 'federatedAuthentication', 'clientVpnAuthenticationRequest_federatedAuthentication' - Information about the IAM SAML identity provider to be used, if
+-- applicable. You must provide this information if __Type__ is
+-- @federated-authentication@.
+--
+-- 'mutualAuthentication', 'clientVpnAuthenticationRequest_mutualAuthentication' - Information about the authentication certificates to be used, if
+-- applicable. You must provide this information if __Type__ is
+-- @certificate-authentication@.
+--
+-- 'type'', 'clientVpnAuthenticationRequest_type' - The type of client authentication to be used.
+newClientVpnAuthenticationRequest ::
+  ClientVpnAuthenticationRequest
+newClientVpnAuthenticationRequest =
+  ClientVpnAuthenticationRequest'
+    { activeDirectory =
+        Prelude.Nothing,
+      federatedAuthentication = Prelude.Nothing,
+      mutualAuthentication = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | Information about the Active Directory to be used, if applicable. You
+-- must provide this information if __Type__ is
+-- @directory-service-authentication@.
+clientVpnAuthenticationRequest_activeDirectory :: Lens.Lens' ClientVpnAuthenticationRequest (Prelude.Maybe DirectoryServiceAuthenticationRequest)
+clientVpnAuthenticationRequest_activeDirectory = Lens.lens (\ClientVpnAuthenticationRequest' {activeDirectory} -> activeDirectory) (\s@ClientVpnAuthenticationRequest' {} a -> s {activeDirectory = a} :: ClientVpnAuthenticationRequest)
+
+-- | Information about the IAM SAML identity provider to be used, if
+-- applicable. You must provide this information if __Type__ is
+-- @federated-authentication@.
+clientVpnAuthenticationRequest_federatedAuthentication :: Lens.Lens' ClientVpnAuthenticationRequest (Prelude.Maybe FederatedAuthenticationRequest)
+clientVpnAuthenticationRequest_federatedAuthentication = Lens.lens (\ClientVpnAuthenticationRequest' {federatedAuthentication} -> federatedAuthentication) (\s@ClientVpnAuthenticationRequest' {} a -> s {federatedAuthentication = a} :: ClientVpnAuthenticationRequest)
+
+-- | Information about the authentication certificates to be used, if
+-- applicable. You must provide this information if __Type__ is
+-- @certificate-authentication@.
+clientVpnAuthenticationRequest_mutualAuthentication :: Lens.Lens' ClientVpnAuthenticationRequest (Prelude.Maybe CertificateAuthenticationRequest)
+clientVpnAuthenticationRequest_mutualAuthentication = Lens.lens (\ClientVpnAuthenticationRequest' {mutualAuthentication} -> mutualAuthentication) (\s@ClientVpnAuthenticationRequest' {} a -> s {mutualAuthentication = a} :: ClientVpnAuthenticationRequest)
+
+-- | The type of client authentication to be used.
+clientVpnAuthenticationRequest_type :: Lens.Lens' ClientVpnAuthenticationRequest (Prelude.Maybe ClientVpnAuthenticationType)
+clientVpnAuthenticationRequest_type = Lens.lens (\ClientVpnAuthenticationRequest' {type'} -> type') (\s@ClientVpnAuthenticationRequest' {} a -> s {type' = a} :: ClientVpnAuthenticationRequest)
+
+instance
+  Prelude.Hashable
+    ClientVpnAuthenticationRequest
+  where
+  hashWithSalt
+    _salt
+    ClientVpnAuthenticationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` activeDirectory
+        `Prelude.hashWithSalt` federatedAuthentication
+        `Prelude.hashWithSalt` mutualAuthentication
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    ClientVpnAuthenticationRequest
+  where
+  rnf ClientVpnAuthenticationRequest' {..} =
+    Prelude.rnf activeDirectory
+      `Prelude.seq` Prelude.rnf federatedAuthentication
+      `Prelude.seq` Prelude.rnf mutualAuthentication
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToQuery ClientVpnAuthenticationRequest where
+  toQuery ClientVpnAuthenticationRequest' {..} =
+    Prelude.mconcat
+      [ "ActiveDirectory" Data.=: activeDirectory,
+        "FederatedAuthentication"
+          Data.=: federatedAuthentication,
+        "MutualAuthentication" Data.=: mutualAuthentication,
+        "Type" Data.=: type'
+      ]
diff --git a/gen/Amazonka/EC2/Types/ClientVpnAuthenticationType.hs b/gen/Amazonka/EC2/Types/ClientVpnAuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnAuthenticationType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnAuthenticationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnAuthenticationType
+  ( ClientVpnAuthenticationType
+      ( ..,
+        ClientVpnAuthenticationType_Certificate_authentication,
+        ClientVpnAuthenticationType_Directory_service_authentication,
+        ClientVpnAuthenticationType_Federated_authentication
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientVpnAuthenticationType = ClientVpnAuthenticationType'
+  { fromClientVpnAuthenticationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientVpnAuthenticationType_Certificate_authentication :: ClientVpnAuthenticationType
+pattern ClientVpnAuthenticationType_Certificate_authentication = ClientVpnAuthenticationType' "certificate-authentication"
+
+pattern ClientVpnAuthenticationType_Directory_service_authentication :: ClientVpnAuthenticationType
+pattern ClientVpnAuthenticationType_Directory_service_authentication = ClientVpnAuthenticationType' "directory-service-authentication"
+
+pattern ClientVpnAuthenticationType_Federated_authentication :: ClientVpnAuthenticationType
+pattern ClientVpnAuthenticationType_Federated_authentication = ClientVpnAuthenticationType' "federated-authentication"
+
+{-# COMPLETE
+  ClientVpnAuthenticationType_Certificate_authentication,
+  ClientVpnAuthenticationType_Directory_service_authentication,
+  ClientVpnAuthenticationType_Federated_authentication,
+  ClientVpnAuthenticationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ClientVpnAuthorizationRuleStatus.hs b/gen/Amazonka/EC2/Types/ClientVpnAuthorizationRuleStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnAuthorizationRuleStatus.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of an authorization rule.
+--
+-- /See:/ 'newClientVpnAuthorizationRuleStatus' smart constructor.
+data ClientVpnAuthorizationRuleStatus = ClientVpnAuthorizationRuleStatus'
+  { -- | The state of the authorization rule.
+    code :: Prelude.Maybe ClientVpnAuthorizationRuleStatusCode,
+    -- | A message about the status of the authorization rule, if applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnAuthorizationRuleStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clientVpnAuthorizationRuleStatus_code' - The state of the authorization rule.
+--
+-- 'message', 'clientVpnAuthorizationRuleStatus_message' - A message about the status of the authorization rule, if applicable.
+newClientVpnAuthorizationRuleStatus ::
+  ClientVpnAuthorizationRuleStatus
+newClientVpnAuthorizationRuleStatus =
+  ClientVpnAuthorizationRuleStatus'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state of the authorization rule.
+clientVpnAuthorizationRuleStatus_code :: Lens.Lens' ClientVpnAuthorizationRuleStatus (Prelude.Maybe ClientVpnAuthorizationRuleStatusCode)
+clientVpnAuthorizationRuleStatus_code = Lens.lens (\ClientVpnAuthorizationRuleStatus' {code} -> code) (\s@ClientVpnAuthorizationRuleStatus' {} a -> s {code = a} :: ClientVpnAuthorizationRuleStatus)
+
+-- | A message about the status of the authorization rule, if applicable.
+clientVpnAuthorizationRuleStatus_message :: Lens.Lens' ClientVpnAuthorizationRuleStatus (Prelude.Maybe Prelude.Text)
+clientVpnAuthorizationRuleStatus_message = Lens.lens (\ClientVpnAuthorizationRuleStatus' {message} -> message) (\s@ClientVpnAuthorizationRuleStatus' {} a -> s {message = a} :: ClientVpnAuthorizationRuleStatus)
+
+instance
+  Data.FromXML
+    ClientVpnAuthorizationRuleStatus
+  where
+  parseXML x =
+    ClientVpnAuthorizationRuleStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    ClientVpnAuthorizationRuleStatus
+  where
+  hashWithSalt
+    _salt
+    ClientVpnAuthorizationRuleStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    ClientVpnAuthorizationRuleStatus
+  where
+  rnf ClientVpnAuthorizationRuleStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ClientVpnAuthorizationRuleStatusCode.hs b/gen/Amazonka/EC2/Types/ClientVpnAuthorizationRuleStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnAuthorizationRuleStatusCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnAuthorizationRuleStatusCode
+  ( ClientVpnAuthorizationRuleStatusCode
+      ( ..,
+        ClientVpnAuthorizationRuleStatusCode_Active,
+        ClientVpnAuthorizationRuleStatusCode_Authorizing,
+        ClientVpnAuthorizationRuleStatusCode_Failed,
+        ClientVpnAuthorizationRuleStatusCode_Revoking
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientVpnAuthorizationRuleStatusCode = ClientVpnAuthorizationRuleStatusCode'
+  { fromClientVpnAuthorizationRuleStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientVpnAuthorizationRuleStatusCode_Active :: ClientVpnAuthorizationRuleStatusCode
+pattern ClientVpnAuthorizationRuleStatusCode_Active = ClientVpnAuthorizationRuleStatusCode' "active"
+
+pattern ClientVpnAuthorizationRuleStatusCode_Authorizing :: ClientVpnAuthorizationRuleStatusCode
+pattern ClientVpnAuthorizationRuleStatusCode_Authorizing = ClientVpnAuthorizationRuleStatusCode' "authorizing"
+
+pattern ClientVpnAuthorizationRuleStatusCode_Failed :: ClientVpnAuthorizationRuleStatusCode
+pattern ClientVpnAuthorizationRuleStatusCode_Failed = ClientVpnAuthorizationRuleStatusCode' "failed"
+
+pattern ClientVpnAuthorizationRuleStatusCode_Revoking :: ClientVpnAuthorizationRuleStatusCode
+pattern ClientVpnAuthorizationRuleStatusCode_Revoking = ClientVpnAuthorizationRuleStatusCode' "revoking"
+
+{-# COMPLETE
+  ClientVpnAuthorizationRuleStatusCode_Active,
+  ClientVpnAuthorizationRuleStatusCode_Authorizing,
+  ClientVpnAuthorizationRuleStatusCode_Failed,
+  ClientVpnAuthorizationRuleStatusCode_Revoking,
+  ClientVpnAuthorizationRuleStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ClientVpnConnection.hs b/gen/Amazonka/EC2/Types/ClientVpnConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnConnection.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnConnection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnConnectionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a client connection.
+--
+-- /See:/ 'newClientVpnConnection' smart constructor.
+data ClientVpnConnection = ClientVpnConnection'
+  { -- | The IP address of the client.
+    clientIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint to which the client is connected.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The common name associated with the client. This is either the name of
+    -- the client certificate, or the Active Directory user name.
+    commonName :: Prelude.Maybe Prelude.Text,
+    -- | The date and time the client connection was terminated.
+    connectionEndTime :: Prelude.Maybe Prelude.Text,
+    -- | The date and time the client connection was established.
+    connectionEstablishedTime :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the client connection.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | The number of bytes received by the client.
+    egressBytes :: Prelude.Maybe Prelude.Text,
+    -- | The number of packets received by the client.
+    egressPackets :: Prelude.Maybe Prelude.Text,
+    -- | The number of bytes sent by the client.
+    ingressBytes :: Prelude.Maybe Prelude.Text,
+    -- | The number of packets sent by the client.
+    ingressPackets :: Prelude.Maybe Prelude.Text,
+    -- | The statuses returned by the client connect handler for posture
+    -- compliance, if applicable.
+    postureComplianceStatuses :: Prelude.Maybe [Prelude.Text],
+    -- | The current state of the client connection.
+    status :: Prelude.Maybe ClientVpnConnectionStatus,
+    -- | The current date and time.
+    timestamp :: Prelude.Maybe Prelude.Text,
+    -- | The username of the client who established the client connection. This
+    -- information is only provided if Active Directory client authentication
+    -- is used.
+    username :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientIp', 'clientVpnConnection_clientIp' - The IP address of the client.
+--
+-- 'clientVpnEndpointId', 'clientVpnConnection_clientVpnEndpointId' - The ID of the Client VPN endpoint to which the client is connected.
+--
+-- 'commonName', 'clientVpnConnection_commonName' - The common name associated with the client. This is either the name of
+-- the client certificate, or the Active Directory user name.
+--
+-- 'connectionEndTime', 'clientVpnConnection_connectionEndTime' - The date and time the client connection was terminated.
+--
+-- 'connectionEstablishedTime', 'clientVpnConnection_connectionEstablishedTime' - The date and time the client connection was established.
+--
+-- 'connectionId', 'clientVpnConnection_connectionId' - The ID of the client connection.
+--
+-- 'egressBytes', 'clientVpnConnection_egressBytes' - The number of bytes received by the client.
+--
+-- 'egressPackets', 'clientVpnConnection_egressPackets' - The number of packets received by the client.
+--
+-- 'ingressBytes', 'clientVpnConnection_ingressBytes' - The number of bytes sent by the client.
+--
+-- 'ingressPackets', 'clientVpnConnection_ingressPackets' - The number of packets sent by the client.
+--
+-- 'postureComplianceStatuses', 'clientVpnConnection_postureComplianceStatuses' - The statuses returned by the client connect handler for posture
+-- compliance, if applicable.
+--
+-- 'status', 'clientVpnConnection_status' - The current state of the client connection.
+--
+-- 'timestamp', 'clientVpnConnection_timestamp' - The current date and time.
+--
+-- 'username', 'clientVpnConnection_username' - The username of the client who established the client connection. This
+-- information is only provided if Active Directory client authentication
+-- is used.
+newClientVpnConnection ::
+  ClientVpnConnection
+newClientVpnConnection =
+  ClientVpnConnection'
+    { clientIp = Prelude.Nothing,
+      clientVpnEndpointId = Prelude.Nothing,
+      commonName = Prelude.Nothing,
+      connectionEndTime = Prelude.Nothing,
+      connectionEstablishedTime = Prelude.Nothing,
+      connectionId = Prelude.Nothing,
+      egressBytes = Prelude.Nothing,
+      egressPackets = Prelude.Nothing,
+      ingressBytes = Prelude.Nothing,
+      ingressPackets = Prelude.Nothing,
+      postureComplianceStatuses = Prelude.Nothing,
+      status = Prelude.Nothing,
+      timestamp = Prelude.Nothing,
+      username = Prelude.Nothing
+    }
+
+-- | The IP address of the client.
+clientVpnConnection_clientIp :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_clientIp = Lens.lens (\ClientVpnConnection' {clientIp} -> clientIp) (\s@ClientVpnConnection' {} a -> s {clientIp = a} :: ClientVpnConnection)
+
+-- | The ID of the Client VPN endpoint to which the client is connected.
+clientVpnConnection_clientVpnEndpointId :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_clientVpnEndpointId = Lens.lens (\ClientVpnConnection' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ClientVpnConnection' {} a -> s {clientVpnEndpointId = a} :: ClientVpnConnection)
+
+-- | The common name associated with the client. This is either the name of
+-- the client certificate, or the Active Directory user name.
+clientVpnConnection_commonName :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_commonName = Lens.lens (\ClientVpnConnection' {commonName} -> commonName) (\s@ClientVpnConnection' {} a -> s {commonName = a} :: ClientVpnConnection)
+
+-- | The date and time the client connection was terminated.
+clientVpnConnection_connectionEndTime :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_connectionEndTime = Lens.lens (\ClientVpnConnection' {connectionEndTime} -> connectionEndTime) (\s@ClientVpnConnection' {} a -> s {connectionEndTime = a} :: ClientVpnConnection)
+
+-- | The date and time the client connection was established.
+clientVpnConnection_connectionEstablishedTime :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_connectionEstablishedTime = Lens.lens (\ClientVpnConnection' {connectionEstablishedTime} -> connectionEstablishedTime) (\s@ClientVpnConnection' {} a -> s {connectionEstablishedTime = a} :: ClientVpnConnection)
+
+-- | The ID of the client connection.
+clientVpnConnection_connectionId :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_connectionId = Lens.lens (\ClientVpnConnection' {connectionId} -> connectionId) (\s@ClientVpnConnection' {} a -> s {connectionId = a} :: ClientVpnConnection)
+
+-- | The number of bytes received by the client.
+clientVpnConnection_egressBytes :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_egressBytes = Lens.lens (\ClientVpnConnection' {egressBytes} -> egressBytes) (\s@ClientVpnConnection' {} a -> s {egressBytes = a} :: ClientVpnConnection)
+
+-- | The number of packets received by the client.
+clientVpnConnection_egressPackets :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_egressPackets = Lens.lens (\ClientVpnConnection' {egressPackets} -> egressPackets) (\s@ClientVpnConnection' {} a -> s {egressPackets = a} :: ClientVpnConnection)
+
+-- | The number of bytes sent by the client.
+clientVpnConnection_ingressBytes :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_ingressBytes = Lens.lens (\ClientVpnConnection' {ingressBytes} -> ingressBytes) (\s@ClientVpnConnection' {} a -> s {ingressBytes = a} :: ClientVpnConnection)
+
+-- | The number of packets sent by the client.
+clientVpnConnection_ingressPackets :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_ingressPackets = Lens.lens (\ClientVpnConnection' {ingressPackets} -> ingressPackets) (\s@ClientVpnConnection' {} a -> s {ingressPackets = a} :: ClientVpnConnection)
+
+-- | The statuses returned by the client connect handler for posture
+-- compliance, if applicable.
+clientVpnConnection_postureComplianceStatuses :: Lens.Lens' ClientVpnConnection (Prelude.Maybe [Prelude.Text])
+clientVpnConnection_postureComplianceStatuses = Lens.lens (\ClientVpnConnection' {postureComplianceStatuses} -> postureComplianceStatuses) (\s@ClientVpnConnection' {} a -> s {postureComplianceStatuses = a} :: ClientVpnConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current state of the client connection.
+clientVpnConnection_status :: Lens.Lens' ClientVpnConnection (Prelude.Maybe ClientVpnConnectionStatus)
+clientVpnConnection_status = Lens.lens (\ClientVpnConnection' {status} -> status) (\s@ClientVpnConnection' {} a -> s {status = a} :: ClientVpnConnection)
+
+-- | The current date and time.
+clientVpnConnection_timestamp :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_timestamp = Lens.lens (\ClientVpnConnection' {timestamp} -> timestamp) (\s@ClientVpnConnection' {} a -> s {timestamp = a} :: ClientVpnConnection)
+
+-- | The username of the client who established the client connection. This
+-- information is only provided if Active Directory client authentication
+-- is used.
+clientVpnConnection_username :: Lens.Lens' ClientVpnConnection (Prelude.Maybe Prelude.Text)
+clientVpnConnection_username = Lens.lens (\ClientVpnConnection' {username} -> username) (\s@ClientVpnConnection' {} a -> s {username = a} :: ClientVpnConnection)
+
+instance Data.FromXML ClientVpnConnection where
+  parseXML x =
+    ClientVpnConnection'
+      Prelude.<$> (x Data..@? "clientIp")
+      Prelude.<*> (x Data..@? "clientVpnEndpointId")
+      Prelude.<*> (x Data..@? "commonName")
+      Prelude.<*> (x Data..@? "connectionEndTime")
+      Prelude.<*> (x Data..@? "connectionEstablishedTime")
+      Prelude.<*> (x Data..@? "connectionId")
+      Prelude.<*> (x Data..@? "egressBytes")
+      Prelude.<*> (x Data..@? "egressPackets")
+      Prelude.<*> (x Data..@? "ingressBytes")
+      Prelude.<*> (x Data..@? "ingressPackets")
+      Prelude.<*> ( x
+                      Data..@? "postureComplianceStatusSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "timestamp")
+      Prelude.<*> (x Data..@? "username")
+
+instance Prelude.Hashable ClientVpnConnection where
+  hashWithSalt _salt ClientVpnConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientIp
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` commonName
+      `Prelude.hashWithSalt` connectionEndTime
+      `Prelude.hashWithSalt` connectionEstablishedTime
+      `Prelude.hashWithSalt` connectionId
+      `Prelude.hashWithSalt` egressBytes
+      `Prelude.hashWithSalt` egressPackets
+      `Prelude.hashWithSalt` ingressBytes
+      `Prelude.hashWithSalt` ingressPackets
+      `Prelude.hashWithSalt` postureComplianceStatuses
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` timestamp
+      `Prelude.hashWithSalt` username
+
+instance Prelude.NFData ClientVpnConnection where
+  rnf ClientVpnConnection' {..} =
+    Prelude.rnf clientIp
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf commonName
+      `Prelude.seq` Prelude.rnf connectionEndTime
+      `Prelude.seq` Prelude.rnf connectionEstablishedTime
+      `Prelude.seq` Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf egressBytes
+      `Prelude.seq` Prelude.rnf egressPackets
+      `Prelude.seq` Prelude.rnf ingressBytes
+      `Prelude.seq` Prelude.rnf ingressPackets
+      `Prelude.seq` Prelude.rnf postureComplianceStatuses
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf username
diff --git a/gen/Amazonka/EC2/Types/ClientVpnConnectionStatus.hs b/gen/Amazonka/EC2/Types/ClientVpnConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnConnectionStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnConnectionStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnConnectionStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of a client connection.
+--
+-- /See:/ 'newClientVpnConnectionStatus' smart constructor.
+data ClientVpnConnectionStatus = ClientVpnConnectionStatus'
+  { -- | The state of the client connection.
+    code :: Prelude.Maybe ClientVpnConnectionStatusCode,
+    -- | A message about the status of the client connection, if applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnConnectionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clientVpnConnectionStatus_code' - The state of the client connection.
+--
+-- 'message', 'clientVpnConnectionStatus_message' - A message about the status of the client connection, if applicable.
+newClientVpnConnectionStatus ::
+  ClientVpnConnectionStatus
+newClientVpnConnectionStatus =
+  ClientVpnConnectionStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state of the client connection.
+clientVpnConnectionStatus_code :: Lens.Lens' ClientVpnConnectionStatus (Prelude.Maybe ClientVpnConnectionStatusCode)
+clientVpnConnectionStatus_code = Lens.lens (\ClientVpnConnectionStatus' {code} -> code) (\s@ClientVpnConnectionStatus' {} a -> s {code = a} :: ClientVpnConnectionStatus)
+
+-- | A message about the status of the client connection, if applicable.
+clientVpnConnectionStatus_message :: Lens.Lens' ClientVpnConnectionStatus (Prelude.Maybe Prelude.Text)
+clientVpnConnectionStatus_message = Lens.lens (\ClientVpnConnectionStatus' {message} -> message) (\s@ClientVpnConnectionStatus' {} a -> s {message = a} :: ClientVpnConnectionStatus)
+
+instance Data.FromXML ClientVpnConnectionStatus where
+  parseXML x =
+    ClientVpnConnectionStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable ClientVpnConnectionStatus where
+  hashWithSalt _salt ClientVpnConnectionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ClientVpnConnectionStatus where
+  rnf ClientVpnConnectionStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ClientVpnConnectionStatusCode.hs b/gen/Amazonka/EC2/Types/ClientVpnConnectionStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnConnectionStatusCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnConnectionStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnConnectionStatusCode
+  ( ClientVpnConnectionStatusCode
+      ( ..,
+        ClientVpnConnectionStatusCode_Active,
+        ClientVpnConnectionStatusCode_Failed_to_terminate,
+        ClientVpnConnectionStatusCode_Terminated,
+        ClientVpnConnectionStatusCode_Terminating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientVpnConnectionStatusCode = ClientVpnConnectionStatusCode'
+  { fromClientVpnConnectionStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientVpnConnectionStatusCode_Active :: ClientVpnConnectionStatusCode
+pattern ClientVpnConnectionStatusCode_Active = ClientVpnConnectionStatusCode' "active"
+
+pattern ClientVpnConnectionStatusCode_Failed_to_terminate :: ClientVpnConnectionStatusCode
+pattern ClientVpnConnectionStatusCode_Failed_to_terminate = ClientVpnConnectionStatusCode' "failed-to-terminate"
+
+pattern ClientVpnConnectionStatusCode_Terminated :: ClientVpnConnectionStatusCode
+pattern ClientVpnConnectionStatusCode_Terminated = ClientVpnConnectionStatusCode' "terminated"
+
+pattern ClientVpnConnectionStatusCode_Terminating :: ClientVpnConnectionStatusCode
+pattern ClientVpnConnectionStatusCode_Terminating = ClientVpnConnectionStatusCode' "terminating"
+
+{-# COMPLETE
+  ClientVpnConnectionStatusCode_Active,
+  ClientVpnConnectionStatusCode_Failed_to_terminate,
+  ClientVpnConnectionStatusCode_Terminated,
+  ClientVpnConnectionStatusCode_Terminating,
+  ClientVpnConnectionStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ClientVpnEndpoint.hs b/gen/Amazonka/EC2/Types/ClientVpnEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnEndpoint.hs
@@ -0,0 +1,411 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnEndpoint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AssociatedTargetNetwork
+import Amazonka.EC2.Types.ClientConnectResponseOptions
+import Amazonka.EC2.Types.ClientLoginBannerResponseOptions
+import Amazonka.EC2.Types.ClientVpnAuthentication
+import Amazonka.EC2.Types.ClientVpnEndpointStatus
+import Amazonka.EC2.Types.ConnectionLogResponseOptions
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransportProtocol
+import Amazonka.EC2.Types.VpnProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Client VPN endpoint.
+--
+-- /See:/ 'newClientVpnEndpoint' smart constructor.
+data ClientVpnEndpoint = ClientVpnEndpoint'
+  { -- | Information about the associated target networks. A target network is a
+    -- subnet in a VPC.
+    associatedTargetNetworks :: Prelude.Maybe [AssociatedTargetNetwork],
+    -- | Information about the authentication method used by the Client VPN
+    -- endpoint.
+    authenticationOptions :: Prelude.Maybe [ClientVpnAuthentication],
+    -- | The IPv4 address range, in CIDR notation, from which client IP addresses
+    -- are assigned.
+    clientCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The options for managing connection authorization for new client
+    -- connections.
+    clientConnectOptions :: Prelude.Maybe ClientConnectResponseOptions,
+    -- | Options for enabling a customizable text banner that will be displayed
+    -- on Amazon Web Services provided clients when a VPN session is
+    -- established.
+    clientLoginBannerOptions :: Prelude.Maybe ClientLoginBannerResponseOptions,
+    -- | The ID of the Client VPN endpoint.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the client connection logging options for the Client
+    -- VPN endpoint.
+    connectionLogOptions :: Prelude.Maybe ConnectionLogResponseOptions,
+    -- | The date and time the Client VPN endpoint was created.
+    creationTime :: Prelude.Maybe Prelude.Text,
+    -- | The date and time the Client VPN endpoint was deleted, if applicable.
+    deletionTime :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the endpoint.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The DNS name to be used by clients when connecting to the Client VPN
+    -- endpoint.
+    dnsName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the DNS servers to be used for DNS resolution.
+    dnsServers :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the security groups for the target network.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The URL of the self-service portal.
+    selfServicePortalUrl :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the server certificate.
+    serverCertificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The maximum VPN session duration time in hours.
+    --
+    -- Valid values: @8 | 10 | 12 | 24@
+    --
+    -- Default value: @24@
+    sessionTimeoutHours :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether split-tunnel is enabled in the Client VPN endpoint.
+    --
+    -- For information about split-tunnel VPN endpoints, see
+    -- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-Tunnel Client VPN endpoint>
+    -- in the /Client VPN Administrator Guide/.
+    splitTunnel :: Prelude.Maybe Prelude.Bool,
+    -- | The current state of the Client VPN endpoint.
+    status :: Prelude.Maybe ClientVpnEndpointStatus,
+    -- | Any tags assigned to the Client VPN endpoint.
+    tags :: Prelude.Maybe [Tag],
+    -- | The transport protocol used by the Client VPN endpoint.
+    transportProtocol :: Prelude.Maybe TransportProtocol,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The port number for the Client VPN endpoint.
+    vpnPort :: Prelude.Maybe Prelude.Int,
+    -- | The protocol used by the VPN session.
+    vpnProtocol :: Prelude.Maybe VpnProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedTargetNetworks', 'clientVpnEndpoint_associatedTargetNetworks' - Information about the associated target networks. A target network is a
+-- subnet in a VPC.
+--
+-- 'authenticationOptions', 'clientVpnEndpoint_authenticationOptions' - Information about the authentication method used by the Client VPN
+-- endpoint.
+--
+-- 'clientCidrBlock', 'clientVpnEndpoint_clientCidrBlock' - The IPv4 address range, in CIDR notation, from which client IP addresses
+-- are assigned.
+--
+-- 'clientConnectOptions', 'clientVpnEndpoint_clientConnectOptions' - The options for managing connection authorization for new client
+-- connections.
+--
+-- 'clientLoginBannerOptions', 'clientVpnEndpoint_clientLoginBannerOptions' - Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+--
+-- 'clientVpnEndpointId', 'clientVpnEndpoint_clientVpnEndpointId' - The ID of the Client VPN endpoint.
+--
+-- 'connectionLogOptions', 'clientVpnEndpoint_connectionLogOptions' - Information about the client connection logging options for the Client
+-- VPN endpoint.
+--
+-- 'creationTime', 'clientVpnEndpoint_creationTime' - The date and time the Client VPN endpoint was created.
+--
+-- 'deletionTime', 'clientVpnEndpoint_deletionTime' - The date and time the Client VPN endpoint was deleted, if applicable.
+--
+-- 'description', 'clientVpnEndpoint_description' - A brief description of the endpoint.
+--
+-- 'dnsName', 'clientVpnEndpoint_dnsName' - The DNS name to be used by clients when connecting to the Client VPN
+-- endpoint.
+--
+-- 'dnsServers', 'clientVpnEndpoint_dnsServers' - Information about the DNS servers to be used for DNS resolution.
+--
+-- 'securityGroupIds', 'clientVpnEndpoint_securityGroupIds' - The IDs of the security groups for the target network.
+--
+-- 'selfServicePortalUrl', 'clientVpnEndpoint_selfServicePortalUrl' - The URL of the self-service portal.
+--
+-- 'serverCertificateArn', 'clientVpnEndpoint_serverCertificateArn' - The ARN of the server certificate.
+--
+-- 'sessionTimeoutHours', 'clientVpnEndpoint_sessionTimeoutHours' - The maximum VPN session duration time in hours.
+--
+-- Valid values: @8 | 10 | 12 | 24@
+--
+-- Default value: @24@
+--
+-- 'splitTunnel', 'clientVpnEndpoint_splitTunnel' - Indicates whether split-tunnel is enabled in the Client VPN endpoint.
+--
+-- For information about split-tunnel VPN endpoints, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-Tunnel Client VPN endpoint>
+-- in the /Client VPN Administrator Guide/.
+--
+-- 'status', 'clientVpnEndpoint_status' - The current state of the Client VPN endpoint.
+--
+-- 'tags', 'clientVpnEndpoint_tags' - Any tags assigned to the Client VPN endpoint.
+--
+-- 'transportProtocol', 'clientVpnEndpoint_transportProtocol' - The transport protocol used by the Client VPN endpoint.
+--
+-- 'vpcId', 'clientVpnEndpoint_vpcId' - The ID of the VPC.
+--
+-- 'vpnPort', 'clientVpnEndpoint_vpnPort' - The port number for the Client VPN endpoint.
+--
+-- 'vpnProtocol', 'clientVpnEndpoint_vpnProtocol' - The protocol used by the VPN session.
+newClientVpnEndpoint ::
+  ClientVpnEndpoint
+newClientVpnEndpoint =
+  ClientVpnEndpoint'
+    { associatedTargetNetworks =
+        Prelude.Nothing,
+      authenticationOptions = Prelude.Nothing,
+      clientCidrBlock = Prelude.Nothing,
+      clientConnectOptions = Prelude.Nothing,
+      clientLoginBannerOptions = Prelude.Nothing,
+      clientVpnEndpointId = Prelude.Nothing,
+      connectionLogOptions = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      deletionTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dnsName = Prelude.Nothing,
+      dnsServers = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      selfServicePortalUrl = Prelude.Nothing,
+      serverCertificateArn = Prelude.Nothing,
+      sessionTimeoutHours = Prelude.Nothing,
+      splitTunnel = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transportProtocol = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      vpnPort = Prelude.Nothing,
+      vpnProtocol = Prelude.Nothing
+    }
+
+-- | Information about the associated target networks. A target network is a
+-- subnet in a VPC.
+clientVpnEndpoint_associatedTargetNetworks :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [AssociatedTargetNetwork])
+clientVpnEndpoint_associatedTargetNetworks = Lens.lens (\ClientVpnEndpoint' {associatedTargetNetworks} -> associatedTargetNetworks) (\s@ClientVpnEndpoint' {} a -> s {associatedTargetNetworks = a} :: ClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the authentication method used by the Client VPN
+-- endpoint.
+clientVpnEndpoint_authenticationOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [ClientVpnAuthentication])
+clientVpnEndpoint_authenticationOptions = Lens.lens (\ClientVpnEndpoint' {authenticationOptions} -> authenticationOptions) (\s@ClientVpnEndpoint' {} a -> s {authenticationOptions = a} :: ClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv4 address range, in CIDR notation, from which client IP addresses
+-- are assigned.
+clientVpnEndpoint_clientCidrBlock :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_clientCidrBlock = Lens.lens (\ClientVpnEndpoint' {clientCidrBlock} -> clientCidrBlock) (\s@ClientVpnEndpoint' {} a -> s {clientCidrBlock = a} :: ClientVpnEndpoint)
+
+-- | The options for managing connection authorization for new client
+-- connections.
+clientVpnEndpoint_clientConnectOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ClientConnectResponseOptions)
+clientVpnEndpoint_clientConnectOptions = Lens.lens (\ClientVpnEndpoint' {clientConnectOptions} -> clientConnectOptions) (\s@ClientVpnEndpoint' {} a -> s {clientConnectOptions = a} :: ClientVpnEndpoint)
+
+-- | Options for enabling a customizable text banner that will be displayed
+-- on Amazon Web Services provided clients when a VPN session is
+-- established.
+clientVpnEndpoint_clientLoginBannerOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ClientLoginBannerResponseOptions)
+clientVpnEndpoint_clientLoginBannerOptions = Lens.lens (\ClientVpnEndpoint' {clientLoginBannerOptions} -> clientLoginBannerOptions) (\s@ClientVpnEndpoint' {} a -> s {clientLoginBannerOptions = a} :: ClientVpnEndpoint)
+
+-- | The ID of the Client VPN endpoint.
+clientVpnEndpoint_clientVpnEndpointId :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_clientVpnEndpointId = Lens.lens (\ClientVpnEndpoint' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ClientVpnEndpoint' {} a -> s {clientVpnEndpointId = a} :: ClientVpnEndpoint)
+
+-- | Information about the client connection logging options for the Client
+-- VPN endpoint.
+clientVpnEndpoint_connectionLogOptions :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ConnectionLogResponseOptions)
+clientVpnEndpoint_connectionLogOptions = Lens.lens (\ClientVpnEndpoint' {connectionLogOptions} -> connectionLogOptions) (\s@ClientVpnEndpoint' {} a -> s {connectionLogOptions = a} :: ClientVpnEndpoint)
+
+-- | The date and time the Client VPN endpoint was created.
+clientVpnEndpoint_creationTime :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_creationTime = Lens.lens (\ClientVpnEndpoint' {creationTime} -> creationTime) (\s@ClientVpnEndpoint' {} a -> s {creationTime = a} :: ClientVpnEndpoint)
+
+-- | The date and time the Client VPN endpoint was deleted, if applicable.
+clientVpnEndpoint_deletionTime :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_deletionTime = Lens.lens (\ClientVpnEndpoint' {deletionTime} -> deletionTime) (\s@ClientVpnEndpoint' {} a -> s {deletionTime = a} :: ClientVpnEndpoint)
+
+-- | A brief description of the endpoint.
+clientVpnEndpoint_description :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_description = Lens.lens (\ClientVpnEndpoint' {description} -> description) (\s@ClientVpnEndpoint' {} a -> s {description = a} :: ClientVpnEndpoint)
+
+-- | The DNS name to be used by clients when connecting to the Client VPN
+-- endpoint.
+clientVpnEndpoint_dnsName :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_dnsName = Lens.lens (\ClientVpnEndpoint' {dnsName} -> dnsName) (\s@ClientVpnEndpoint' {} a -> s {dnsName = a} :: ClientVpnEndpoint)
+
+-- | Information about the DNS servers to be used for DNS resolution.
+clientVpnEndpoint_dnsServers :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
+clientVpnEndpoint_dnsServers = Lens.lens (\ClientVpnEndpoint' {dnsServers} -> dnsServers) (\s@ClientVpnEndpoint' {} a -> s {dnsServers = a} :: ClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the security groups for the target network.
+clientVpnEndpoint_securityGroupIds :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [Prelude.Text])
+clientVpnEndpoint_securityGroupIds = Lens.lens (\ClientVpnEndpoint' {securityGroupIds} -> securityGroupIds) (\s@ClientVpnEndpoint' {} a -> s {securityGroupIds = a} :: ClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL of the self-service portal.
+clientVpnEndpoint_selfServicePortalUrl :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_selfServicePortalUrl = Lens.lens (\ClientVpnEndpoint' {selfServicePortalUrl} -> selfServicePortalUrl) (\s@ClientVpnEndpoint' {} a -> s {selfServicePortalUrl = a} :: ClientVpnEndpoint)
+
+-- | The ARN of the server certificate.
+clientVpnEndpoint_serverCertificateArn :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_serverCertificateArn = Lens.lens (\ClientVpnEndpoint' {serverCertificateArn} -> serverCertificateArn) (\s@ClientVpnEndpoint' {} a -> s {serverCertificateArn = a} :: ClientVpnEndpoint)
+
+-- | The maximum VPN session duration time in hours.
+--
+-- Valid values: @8 | 10 | 12 | 24@
+--
+-- Default value: @24@
+clientVpnEndpoint_sessionTimeoutHours :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Int)
+clientVpnEndpoint_sessionTimeoutHours = Lens.lens (\ClientVpnEndpoint' {sessionTimeoutHours} -> sessionTimeoutHours) (\s@ClientVpnEndpoint' {} a -> s {sessionTimeoutHours = a} :: ClientVpnEndpoint)
+
+-- | Indicates whether split-tunnel is enabled in the Client VPN endpoint.
+--
+-- For information about split-tunnel VPN endpoints, see
+-- <https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html Split-Tunnel Client VPN endpoint>
+-- in the /Client VPN Administrator Guide/.
+clientVpnEndpoint_splitTunnel :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Bool)
+clientVpnEndpoint_splitTunnel = Lens.lens (\ClientVpnEndpoint' {splitTunnel} -> splitTunnel) (\s@ClientVpnEndpoint' {} a -> s {splitTunnel = a} :: ClientVpnEndpoint)
+
+-- | The current state of the Client VPN endpoint.
+clientVpnEndpoint_status :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe ClientVpnEndpointStatus)
+clientVpnEndpoint_status = Lens.lens (\ClientVpnEndpoint' {status} -> status) (\s@ClientVpnEndpoint' {} a -> s {status = a} :: ClientVpnEndpoint)
+
+-- | Any tags assigned to the Client VPN endpoint.
+clientVpnEndpoint_tags :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe [Tag])
+clientVpnEndpoint_tags = Lens.lens (\ClientVpnEndpoint' {tags} -> tags) (\s@ClientVpnEndpoint' {} a -> s {tags = a} :: ClientVpnEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The transport protocol used by the Client VPN endpoint.
+clientVpnEndpoint_transportProtocol :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe TransportProtocol)
+clientVpnEndpoint_transportProtocol = Lens.lens (\ClientVpnEndpoint' {transportProtocol} -> transportProtocol) (\s@ClientVpnEndpoint' {} a -> s {transportProtocol = a} :: ClientVpnEndpoint)
+
+-- | The ID of the VPC.
+clientVpnEndpoint_vpcId :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Text)
+clientVpnEndpoint_vpcId = Lens.lens (\ClientVpnEndpoint' {vpcId} -> vpcId) (\s@ClientVpnEndpoint' {} a -> s {vpcId = a} :: ClientVpnEndpoint)
+
+-- | The port number for the Client VPN endpoint.
+clientVpnEndpoint_vpnPort :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe Prelude.Int)
+clientVpnEndpoint_vpnPort = Lens.lens (\ClientVpnEndpoint' {vpnPort} -> vpnPort) (\s@ClientVpnEndpoint' {} a -> s {vpnPort = a} :: ClientVpnEndpoint)
+
+-- | The protocol used by the VPN session.
+clientVpnEndpoint_vpnProtocol :: Lens.Lens' ClientVpnEndpoint (Prelude.Maybe VpnProtocol)
+clientVpnEndpoint_vpnProtocol = Lens.lens (\ClientVpnEndpoint' {vpnProtocol} -> vpnProtocol) (\s@ClientVpnEndpoint' {} a -> s {vpnProtocol = a} :: ClientVpnEndpoint)
+
+instance Data.FromXML ClientVpnEndpoint where
+  parseXML x =
+    ClientVpnEndpoint'
+      Prelude.<$> ( x
+                      Data..@? "associatedTargetNetwork"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "authenticationOptions"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "clientCidrBlock")
+      Prelude.<*> (x Data..@? "clientConnectOptions")
+      Prelude.<*> (x Data..@? "clientLoginBannerOptions")
+      Prelude.<*> (x Data..@? "clientVpnEndpointId")
+      Prelude.<*> (x Data..@? "connectionLogOptions")
+      Prelude.<*> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "deletionTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "dnsName")
+      Prelude.<*> ( x
+                      Data..@? "dnsServer"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "securityGroupIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "selfServicePortalUrl")
+      Prelude.<*> (x Data..@? "serverCertificateArn")
+      Prelude.<*> (x Data..@? "sessionTimeoutHours")
+      Prelude.<*> (x Data..@? "splitTunnel")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transportProtocol")
+      Prelude.<*> (x Data..@? "vpcId")
+      Prelude.<*> (x Data..@? "vpnPort")
+      Prelude.<*> (x Data..@? "vpnProtocol")
+
+instance Prelude.Hashable ClientVpnEndpoint where
+  hashWithSalt _salt ClientVpnEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedTargetNetworks
+      `Prelude.hashWithSalt` authenticationOptions
+      `Prelude.hashWithSalt` clientCidrBlock
+      `Prelude.hashWithSalt` clientConnectOptions
+      `Prelude.hashWithSalt` clientLoginBannerOptions
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` connectionLogOptions
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` deletionTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dnsName
+      `Prelude.hashWithSalt` dnsServers
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` selfServicePortalUrl
+      `Prelude.hashWithSalt` serverCertificateArn
+      `Prelude.hashWithSalt` sessionTimeoutHours
+      `Prelude.hashWithSalt` splitTunnel
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transportProtocol
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpnPort
+      `Prelude.hashWithSalt` vpnProtocol
+
+instance Prelude.NFData ClientVpnEndpoint where
+  rnf ClientVpnEndpoint' {..} =
+    Prelude.rnf associatedTargetNetworks
+      `Prelude.seq` Prelude.rnf authenticationOptions
+      `Prelude.seq` Prelude.rnf clientCidrBlock
+      `Prelude.seq` Prelude.rnf clientConnectOptions
+      `Prelude.seq` Prelude.rnf clientLoginBannerOptions
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf connectionLogOptions
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf deletionTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dnsName
+      `Prelude.seq` Prelude.rnf dnsServers
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf selfServicePortalUrl
+      `Prelude.seq` Prelude.rnf serverCertificateArn
+      `Prelude.seq` Prelude.rnf sessionTimeoutHours
+      `Prelude.seq` Prelude.rnf splitTunnel
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transportProtocol
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpnPort
+      `Prelude.seq` Prelude.rnf vpnProtocol
diff --git a/gen/Amazonka/EC2/Types/ClientVpnEndpointAttributeStatus.hs b/gen/Amazonka/EC2/Types/ClientVpnEndpointAttributeStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnEndpointAttributeStatus.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnEndpointAttributeStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnEndpointAttributeStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnEndpointAttributeStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of the Client VPN endpoint attribute.
+--
+-- /See:/ 'newClientVpnEndpointAttributeStatus' smart constructor.
+data ClientVpnEndpointAttributeStatus = ClientVpnEndpointAttributeStatus'
+  { -- | The status code.
+    code :: Prelude.Maybe ClientVpnEndpointAttributeStatusCode,
+    -- | The status message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnEndpointAttributeStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clientVpnEndpointAttributeStatus_code' - The status code.
+--
+-- 'message', 'clientVpnEndpointAttributeStatus_message' - The status message.
+newClientVpnEndpointAttributeStatus ::
+  ClientVpnEndpointAttributeStatus
+newClientVpnEndpointAttributeStatus =
+  ClientVpnEndpointAttributeStatus'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The status code.
+clientVpnEndpointAttributeStatus_code :: Lens.Lens' ClientVpnEndpointAttributeStatus (Prelude.Maybe ClientVpnEndpointAttributeStatusCode)
+clientVpnEndpointAttributeStatus_code = Lens.lens (\ClientVpnEndpointAttributeStatus' {code} -> code) (\s@ClientVpnEndpointAttributeStatus' {} a -> s {code = a} :: ClientVpnEndpointAttributeStatus)
+
+-- | The status message.
+clientVpnEndpointAttributeStatus_message :: Lens.Lens' ClientVpnEndpointAttributeStatus (Prelude.Maybe Prelude.Text)
+clientVpnEndpointAttributeStatus_message = Lens.lens (\ClientVpnEndpointAttributeStatus' {message} -> message) (\s@ClientVpnEndpointAttributeStatus' {} a -> s {message = a} :: ClientVpnEndpointAttributeStatus)
+
+instance
+  Data.FromXML
+    ClientVpnEndpointAttributeStatus
+  where
+  parseXML x =
+    ClientVpnEndpointAttributeStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    ClientVpnEndpointAttributeStatus
+  where
+  hashWithSalt
+    _salt
+    ClientVpnEndpointAttributeStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    ClientVpnEndpointAttributeStatus
+  where
+  rnf ClientVpnEndpointAttributeStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ClientVpnEndpointAttributeStatusCode.hs b/gen/Amazonka/EC2/Types/ClientVpnEndpointAttributeStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnEndpointAttributeStatusCode.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnEndpointAttributeStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnEndpointAttributeStatusCode
+  ( ClientVpnEndpointAttributeStatusCode
+      ( ..,
+        ClientVpnEndpointAttributeStatusCode_Applied,
+        ClientVpnEndpointAttributeStatusCode_Applying
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientVpnEndpointAttributeStatusCode = ClientVpnEndpointAttributeStatusCode'
+  { fromClientVpnEndpointAttributeStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientVpnEndpointAttributeStatusCode_Applied :: ClientVpnEndpointAttributeStatusCode
+pattern ClientVpnEndpointAttributeStatusCode_Applied = ClientVpnEndpointAttributeStatusCode' "applied"
+
+pattern ClientVpnEndpointAttributeStatusCode_Applying :: ClientVpnEndpointAttributeStatusCode
+pattern ClientVpnEndpointAttributeStatusCode_Applying = ClientVpnEndpointAttributeStatusCode' "applying"
+
+{-# COMPLETE
+  ClientVpnEndpointAttributeStatusCode_Applied,
+  ClientVpnEndpointAttributeStatusCode_Applying,
+  ClientVpnEndpointAttributeStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ClientVpnEndpointStatus.hs b/gen/Amazonka/EC2/Types/ClientVpnEndpointStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnEndpointStatus.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnEndpointStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnEndpointStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnEndpointStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a Client VPN endpoint.
+--
+-- /See:/ 'newClientVpnEndpointStatus' smart constructor.
+data ClientVpnEndpointStatus = ClientVpnEndpointStatus'
+  { -- | The state of the Client VPN endpoint. Possible states include:
+    --
+    -- -   @pending-associate@ - The Client VPN endpoint has been created but
+    --     no target networks have been associated. The Client VPN endpoint
+    --     cannot accept connections.
+    --
+    -- -   @available@ - The Client VPN endpoint has been created and a target
+    --     network has been associated. The Client VPN endpoint can accept
+    --     connections.
+    --
+    -- -   @deleting@ - The Client VPN endpoint is being deleted. The Client
+    --     VPN endpoint cannot accept connections.
+    --
+    -- -   @deleted@ - The Client VPN endpoint has been deleted. The Client VPN
+    --     endpoint cannot accept connections.
+    code :: Prelude.Maybe ClientVpnEndpointStatusCode,
+    -- | A message about the status of the Client VPN endpoint.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnEndpointStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clientVpnEndpointStatus_code' - The state of the Client VPN endpoint. Possible states include:
+--
+-- -   @pending-associate@ - The Client VPN endpoint has been created but
+--     no target networks have been associated. The Client VPN endpoint
+--     cannot accept connections.
+--
+-- -   @available@ - The Client VPN endpoint has been created and a target
+--     network has been associated. The Client VPN endpoint can accept
+--     connections.
+--
+-- -   @deleting@ - The Client VPN endpoint is being deleted. The Client
+--     VPN endpoint cannot accept connections.
+--
+-- -   @deleted@ - The Client VPN endpoint has been deleted. The Client VPN
+--     endpoint cannot accept connections.
+--
+-- 'message', 'clientVpnEndpointStatus_message' - A message about the status of the Client VPN endpoint.
+newClientVpnEndpointStatus ::
+  ClientVpnEndpointStatus
+newClientVpnEndpointStatus =
+  ClientVpnEndpointStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state of the Client VPN endpoint. Possible states include:
+--
+-- -   @pending-associate@ - The Client VPN endpoint has been created but
+--     no target networks have been associated. The Client VPN endpoint
+--     cannot accept connections.
+--
+-- -   @available@ - The Client VPN endpoint has been created and a target
+--     network has been associated. The Client VPN endpoint can accept
+--     connections.
+--
+-- -   @deleting@ - The Client VPN endpoint is being deleted. The Client
+--     VPN endpoint cannot accept connections.
+--
+-- -   @deleted@ - The Client VPN endpoint has been deleted. The Client VPN
+--     endpoint cannot accept connections.
+clientVpnEndpointStatus_code :: Lens.Lens' ClientVpnEndpointStatus (Prelude.Maybe ClientVpnEndpointStatusCode)
+clientVpnEndpointStatus_code = Lens.lens (\ClientVpnEndpointStatus' {code} -> code) (\s@ClientVpnEndpointStatus' {} a -> s {code = a} :: ClientVpnEndpointStatus)
+
+-- | A message about the status of the Client VPN endpoint.
+clientVpnEndpointStatus_message :: Lens.Lens' ClientVpnEndpointStatus (Prelude.Maybe Prelude.Text)
+clientVpnEndpointStatus_message = Lens.lens (\ClientVpnEndpointStatus' {message} -> message) (\s@ClientVpnEndpointStatus' {} a -> s {message = a} :: ClientVpnEndpointStatus)
+
+instance Data.FromXML ClientVpnEndpointStatus where
+  parseXML x =
+    ClientVpnEndpointStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable ClientVpnEndpointStatus where
+  hashWithSalt _salt ClientVpnEndpointStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ClientVpnEndpointStatus where
+  rnf ClientVpnEndpointStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ClientVpnEndpointStatusCode.hs b/gen/Amazonka/EC2/Types/ClientVpnEndpointStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnEndpointStatusCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnEndpointStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnEndpointStatusCode
+  ( ClientVpnEndpointStatusCode
+      ( ..,
+        ClientVpnEndpointStatusCode_Available,
+        ClientVpnEndpointStatusCode_Deleted,
+        ClientVpnEndpointStatusCode_Deleting,
+        ClientVpnEndpointStatusCode_Pending_associate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientVpnEndpointStatusCode = ClientVpnEndpointStatusCode'
+  { fromClientVpnEndpointStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientVpnEndpointStatusCode_Available :: ClientVpnEndpointStatusCode
+pattern ClientVpnEndpointStatusCode_Available = ClientVpnEndpointStatusCode' "available"
+
+pattern ClientVpnEndpointStatusCode_Deleted :: ClientVpnEndpointStatusCode
+pattern ClientVpnEndpointStatusCode_Deleted = ClientVpnEndpointStatusCode' "deleted"
+
+pattern ClientVpnEndpointStatusCode_Deleting :: ClientVpnEndpointStatusCode
+pattern ClientVpnEndpointStatusCode_Deleting = ClientVpnEndpointStatusCode' "deleting"
+
+pattern ClientVpnEndpointStatusCode_Pending_associate :: ClientVpnEndpointStatusCode
+pattern ClientVpnEndpointStatusCode_Pending_associate = ClientVpnEndpointStatusCode' "pending-associate"
+
+{-# COMPLETE
+  ClientVpnEndpointStatusCode_Available,
+  ClientVpnEndpointStatusCode_Deleted,
+  ClientVpnEndpointStatusCode_Deleting,
+  ClientVpnEndpointStatusCode_Pending_associate,
+  ClientVpnEndpointStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ClientVpnRoute.hs b/gen/Amazonka/EC2/Types/ClientVpnRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnRoute.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnRoute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnRouteStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a Client VPN endpoint route.
+--
+-- /See:/ 'newClientVpnRoute' smart constructor.
+data ClientVpnRoute = ClientVpnRoute'
+  { -- | The ID of the Client VPN endpoint with which the route is associated.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | A brief description of the route.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 address range, in CIDR notation, of the route destination.
+    destinationCidr :: Prelude.Maybe Prelude.Text,
+    -- | Indicates how the route was associated with the Client VPN endpoint.
+    -- @associate@ indicates that the route was automatically added when the
+    -- target network was associated with the Client VPN endpoint. @add-route@
+    -- indicates that the route was manually added using the
+    -- __CreateClientVpnRoute__ action.
+    origin :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the route.
+    status :: Prelude.Maybe ClientVpnRouteStatus,
+    -- | The ID of the subnet through which traffic is routed.
+    targetSubnet :: Prelude.Maybe Prelude.Text,
+    -- | The route type.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientVpnEndpointId', 'clientVpnRoute_clientVpnEndpointId' - The ID of the Client VPN endpoint with which the route is associated.
+--
+-- 'description', 'clientVpnRoute_description' - A brief description of the route.
+--
+-- 'destinationCidr', 'clientVpnRoute_destinationCidr' - The IPv4 address range, in CIDR notation, of the route destination.
+--
+-- 'origin', 'clientVpnRoute_origin' - Indicates how the route was associated with the Client VPN endpoint.
+-- @associate@ indicates that the route was automatically added when the
+-- target network was associated with the Client VPN endpoint. @add-route@
+-- indicates that the route was manually added using the
+-- __CreateClientVpnRoute__ action.
+--
+-- 'status', 'clientVpnRoute_status' - The current state of the route.
+--
+-- 'targetSubnet', 'clientVpnRoute_targetSubnet' - The ID of the subnet through which traffic is routed.
+--
+-- 'type'', 'clientVpnRoute_type' - The route type.
+newClientVpnRoute ::
+  ClientVpnRoute
+newClientVpnRoute =
+  ClientVpnRoute'
+    { clientVpnEndpointId =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      destinationCidr = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      status = Prelude.Nothing,
+      targetSubnet = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The ID of the Client VPN endpoint with which the route is associated.
+clientVpnRoute_clientVpnEndpointId :: Lens.Lens' ClientVpnRoute (Prelude.Maybe Prelude.Text)
+clientVpnRoute_clientVpnEndpointId = Lens.lens (\ClientVpnRoute' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@ClientVpnRoute' {} a -> s {clientVpnEndpointId = a} :: ClientVpnRoute)
+
+-- | A brief description of the route.
+clientVpnRoute_description :: Lens.Lens' ClientVpnRoute (Prelude.Maybe Prelude.Text)
+clientVpnRoute_description = Lens.lens (\ClientVpnRoute' {description} -> description) (\s@ClientVpnRoute' {} a -> s {description = a} :: ClientVpnRoute)
+
+-- | The IPv4 address range, in CIDR notation, of the route destination.
+clientVpnRoute_destinationCidr :: Lens.Lens' ClientVpnRoute (Prelude.Maybe Prelude.Text)
+clientVpnRoute_destinationCidr = Lens.lens (\ClientVpnRoute' {destinationCidr} -> destinationCidr) (\s@ClientVpnRoute' {} a -> s {destinationCidr = a} :: ClientVpnRoute)
+
+-- | Indicates how the route was associated with the Client VPN endpoint.
+-- @associate@ indicates that the route was automatically added when the
+-- target network was associated with the Client VPN endpoint. @add-route@
+-- indicates that the route was manually added using the
+-- __CreateClientVpnRoute__ action.
+clientVpnRoute_origin :: Lens.Lens' ClientVpnRoute (Prelude.Maybe Prelude.Text)
+clientVpnRoute_origin = Lens.lens (\ClientVpnRoute' {origin} -> origin) (\s@ClientVpnRoute' {} a -> s {origin = a} :: ClientVpnRoute)
+
+-- | The current state of the route.
+clientVpnRoute_status :: Lens.Lens' ClientVpnRoute (Prelude.Maybe ClientVpnRouteStatus)
+clientVpnRoute_status = Lens.lens (\ClientVpnRoute' {status} -> status) (\s@ClientVpnRoute' {} a -> s {status = a} :: ClientVpnRoute)
+
+-- | The ID of the subnet through which traffic is routed.
+clientVpnRoute_targetSubnet :: Lens.Lens' ClientVpnRoute (Prelude.Maybe Prelude.Text)
+clientVpnRoute_targetSubnet = Lens.lens (\ClientVpnRoute' {targetSubnet} -> targetSubnet) (\s@ClientVpnRoute' {} a -> s {targetSubnet = a} :: ClientVpnRoute)
+
+-- | The route type.
+clientVpnRoute_type :: Lens.Lens' ClientVpnRoute (Prelude.Maybe Prelude.Text)
+clientVpnRoute_type = Lens.lens (\ClientVpnRoute' {type'} -> type') (\s@ClientVpnRoute' {} a -> s {type' = a} :: ClientVpnRoute)
+
+instance Data.FromXML ClientVpnRoute where
+  parseXML x =
+    ClientVpnRoute'
+      Prelude.<$> (x Data..@? "clientVpnEndpointId")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "destinationCidr")
+      Prelude.<*> (x Data..@? "origin")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "targetSubnet")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable ClientVpnRoute where
+  hashWithSalt _salt ClientVpnRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationCidr
+      `Prelude.hashWithSalt` origin
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` targetSubnet
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ClientVpnRoute where
+  rnf ClientVpnRoute' {..} =
+    Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationCidr
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf targetSubnet
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/ClientVpnRouteStatus.hs b/gen/Amazonka/EC2/Types/ClientVpnRouteStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnRouteStatus.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnRouteStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnRouteStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnRouteStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a Client VPN endpoint route.
+--
+-- /See:/ 'newClientVpnRouteStatus' smart constructor.
+data ClientVpnRouteStatus = ClientVpnRouteStatus'
+  { -- | The state of the Client VPN endpoint route.
+    code :: Prelude.Maybe ClientVpnRouteStatusCode,
+    -- | A message about the status of the Client VPN endpoint route, if
+    -- applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClientVpnRouteStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'clientVpnRouteStatus_code' - The state of the Client VPN endpoint route.
+--
+-- 'message', 'clientVpnRouteStatus_message' - A message about the status of the Client VPN endpoint route, if
+-- applicable.
+newClientVpnRouteStatus ::
+  ClientVpnRouteStatus
+newClientVpnRouteStatus =
+  ClientVpnRouteStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state of the Client VPN endpoint route.
+clientVpnRouteStatus_code :: Lens.Lens' ClientVpnRouteStatus (Prelude.Maybe ClientVpnRouteStatusCode)
+clientVpnRouteStatus_code = Lens.lens (\ClientVpnRouteStatus' {code} -> code) (\s@ClientVpnRouteStatus' {} a -> s {code = a} :: ClientVpnRouteStatus)
+
+-- | A message about the status of the Client VPN endpoint route, if
+-- applicable.
+clientVpnRouteStatus_message :: Lens.Lens' ClientVpnRouteStatus (Prelude.Maybe Prelude.Text)
+clientVpnRouteStatus_message = Lens.lens (\ClientVpnRouteStatus' {message} -> message) (\s@ClientVpnRouteStatus' {} a -> s {message = a} :: ClientVpnRouteStatus)
+
+instance Data.FromXML ClientVpnRouteStatus where
+  parseXML x =
+    ClientVpnRouteStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable ClientVpnRouteStatus where
+  hashWithSalt _salt ClientVpnRouteStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ClientVpnRouteStatus where
+  rnf ClientVpnRouteStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ClientVpnRouteStatusCode.hs b/gen/Amazonka/EC2/Types/ClientVpnRouteStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ClientVpnRouteStatusCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ClientVpnRouteStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ClientVpnRouteStatusCode
+  ( ClientVpnRouteStatusCode
+      ( ..,
+        ClientVpnRouteStatusCode_Active,
+        ClientVpnRouteStatusCode_Creating,
+        ClientVpnRouteStatusCode_Deleting,
+        ClientVpnRouteStatusCode_Failed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClientVpnRouteStatusCode = ClientVpnRouteStatusCode'
+  { fromClientVpnRouteStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClientVpnRouteStatusCode_Active :: ClientVpnRouteStatusCode
+pattern ClientVpnRouteStatusCode_Active = ClientVpnRouteStatusCode' "active"
+
+pattern ClientVpnRouteStatusCode_Creating :: ClientVpnRouteStatusCode
+pattern ClientVpnRouteStatusCode_Creating = ClientVpnRouteStatusCode' "creating"
+
+pattern ClientVpnRouteStatusCode_Deleting :: ClientVpnRouteStatusCode
+pattern ClientVpnRouteStatusCode_Deleting = ClientVpnRouteStatusCode' "deleting"
+
+pattern ClientVpnRouteStatusCode_Failed :: ClientVpnRouteStatusCode
+pattern ClientVpnRouteStatusCode_Failed = ClientVpnRouteStatusCode' "failed"
+
+{-# COMPLETE
+  ClientVpnRouteStatusCode_Active,
+  ClientVpnRouteStatusCode_Creating,
+  ClientVpnRouteStatusCode_Deleting,
+  ClientVpnRouteStatusCode_Failed,
+  ClientVpnRouteStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CloudWatchLogOptions.hs b/gen/Amazonka/EC2/Types/CloudWatchLogOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CloudWatchLogOptions.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CloudWatchLogOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CloudWatchLogOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for sending VPN tunnel logs to CloudWatch.
+--
+-- /See:/ 'newCloudWatchLogOptions' smart constructor.
+data CloudWatchLogOptions = CloudWatchLogOptions'
+  { -- | Status of VPN tunnel logging feature. Default value is @False@.
+    --
+    -- Valid values: @True@ | @False@
+    logEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the CloudWatch log group to send logs
+    -- to.
+    logGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | Configured log format. Default format is @json@.
+    --
+    -- Valid values: @json@ | @text@
+    logOutputFormat :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchLogOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logEnabled', 'cloudWatchLogOptions_logEnabled' - Status of VPN tunnel logging feature. Default value is @False@.
+--
+-- Valid values: @True@ | @False@
+--
+-- 'logGroupArn', 'cloudWatchLogOptions_logGroupArn' - The Amazon Resource Name (ARN) of the CloudWatch log group to send logs
+-- to.
+--
+-- 'logOutputFormat', 'cloudWatchLogOptions_logOutputFormat' - Configured log format. Default format is @json@.
+--
+-- Valid values: @json@ | @text@
+newCloudWatchLogOptions ::
+  CloudWatchLogOptions
+newCloudWatchLogOptions =
+  CloudWatchLogOptions'
+    { logEnabled = Prelude.Nothing,
+      logGroupArn = Prelude.Nothing,
+      logOutputFormat = Prelude.Nothing
+    }
+
+-- | Status of VPN tunnel logging feature. Default value is @False@.
+--
+-- Valid values: @True@ | @False@
+cloudWatchLogOptions_logEnabled :: Lens.Lens' CloudWatchLogOptions (Prelude.Maybe Prelude.Bool)
+cloudWatchLogOptions_logEnabled = Lens.lens (\CloudWatchLogOptions' {logEnabled} -> logEnabled) (\s@CloudWatchLogOptions' {} a -> s {logEnabled = a} :: CloudWatchLogOptions)
+
+-- | The Amazon Resource Name (ARN) of the CloudWatch log group to send logs
+-- to.
+cloudWatchLogOptions_logGroupArn :: Lens.Lens' CloudWatchLogOptions (Prelude.Maybe Prelude.Text)
+cloudWatchLogOptions_logGroupArn = Lens.lens (\CloudWatchLogOptions' {logGroupArn} -> logGroupArn) (\s@CloudWatchLogOptions' {} a -> s {logGroupArn = a} :: CloudWatchLogOptions)
+
+-- | Configured log format. Default format is @json@.
+--
+-- Valid values: @json@ | @text@
+cloudWatchLogOptions_logOutputFormat :: Lens.Lens' CloudWatchLogOptions (Prelude.Maybe Prelude.Text)
+cloudWatchLogOptions_logOutputFormat = Lens.lens (\CloudWatchLogOptions' {logOutputFormat} -> logOutputFormat) (\s@CloudWatchLogOptions' {} a -> s {logOutputFormat = a} :: CloudWatchLogOptions)
+
+instance Data.FromXML CloudWatchLogOptions where
+  parseXML x =
+    CloudWatchLogOptions'
+      Prelude.<$> (x Data..@? "logEnabled")
+      Prelude.<*> (x Data..@? "logGroupArn")
+      Prelude.<*> (x Data..@? "logOutputFormat")
+
+instance Prelude.Hashable CloudWatchLogOptions where
+  hashWithSalt _salt CloudWatchLogOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` logEnabled
+      `Prelude.hashWithSalt` logGroupArn
+      `Prelude.hashWithSalt` logOutputFormat
+
+instance Prelude.NFData CloudWatchLogOptions where
+  rnf CloudWatchLogOptions' {..} =
+    Prelude.rnf logEnabled
+      `Prelude.seq` Prelude.rnf logGroupArn
+      `Prelude.seq` Prelude.rnf logOutputFormat
diff --git a/gen/Amazonka/EC2/Types/CloudWatchLogOptionsSpecification.hs b/gen/Amazonka/EC2/Types/CloudWatchLogOptionsSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CloudWatchLogOptionsSpecification.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CloudWatchLogOptionsSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CloudWatchLogOptionsSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for sending VPN tunnel logs to CloudWatch.
+--
+-- /See:/ 'newCloudWatchLogOptionsSpecification' smart constructor.
+data CloudWatchLogOptionsSpecification = CloudWatchLogOptionsSpecification'
+  { -- | Enable or disable VPN tunnel logging feature. Default value is @False@.
+    --
+    -- Valid values: @True@ | @False@
+    logEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the CloudWatch log group to send logs
+    -- to.
+    logGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | Set log format. Default format is @json@.
+    --
+    -- Valid values: @json@ | @text@
+    logOutputFormat :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CloudWatchLogOptionsSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logEnabled', 'cloudWatchLogOptionsSpecification_logEnabled' - Enable or disable VPN tunnel logging feature. Default value is @False@.
+--
+-- Valid values: @True@ | @False@
+--
+-- 'logGroupArn', 'cloudWatchLogOptionsSpecification_logGroupArn' - The Amazon Resource Name (ARN) of the CloudWatch log group to send logs
+-- to.
+--
+-- 'logOutputFormat', 'cloudWatchLogOptionsSpecification_logOutputFormat' - Set log format. Default format is @json@.
+--
+-- Valid values: @json@ | @text@
+newCloudWatchLogOptionsSpecification ::
+  CloudWatchLogOptionsSpecification
+newCloudWatchLogOptionsSpecification =
+  CloudWatchLogOptionsSpecification'
+    { logEnabled =
+        Prelude.Nothing,
+      logGroupArn = Prelude.Nothing,
+      logOutputFormat = Prelude.Nothing
+    }
+
+-- | Enable or disable VPN tunnel logging feature. Default value is @False@.
+--
+-- Valid values: @True@ | @False@
+cloudWatchLogOptionsSpecification_logEnabled :: Lens.Lens' CloudWatchLogOptionsSpecification (Prelude.Maybe Prelude.Bool)
+cloudWatchLogOptionsSpecification_logEnabled = Lens.lens (\CloudWatchLogOptionsSpecification' {logEnabled} -> logEnabled) (\s@CloudWatchLogOptionsSpecification' {} a -> s {logEnabled = a} :: CloudWatchLogOptionsSpecification)
+
+-- | The Amazon Resource Name (ARN) of the CloudWatch log group to send logs
+-- to.
+cloudWatchLogOptionsSpecification_logGroupArn :: Lens.Lens' CloudWatchLogOptionsSpecification (Prelude.Maybe Prelude.Text)
+cloudWatchLogOptionsSpecification_logGroupArn = Lens.lens (\CloudWatchLogOptionsSpecification' {logGroupArn} -> logGroupArn) (\s@CloudWatchLogOptionsSpecification' {} a -> s {logGroupArn = a} :: CloudWatchLogOptionsSpecification)
+
+-- | Set log format. Default format is @json@.
+--
+-- Valid values: @json@ | @text@
+cloudWatchLogOptionsSpecification_logOutputFormat :: Lens.Lens' CloudWatchLogOptionsSpecification (Prelude.Maybe Prelude.Text)
+cloudWatchLogOptionsSpecification_logOutputFormat = Lens.lens (\CloudWatchLogOptionsSpecification' {logOutputFormat} -> logOutputFormat) (\s@CloudWatchLogOptionsSpecification' {} a -> s {logOutputFormat = a} :: CloudWatchLogOptionsSpecification)
+
+instance
+  Prelude.Hashable
+    CloudWatchLogOptionsSpecification
+  where
+  hashWithSalt
+    _salt
+    CloudWatchLogOptionsSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` logEnabled
+        `Prelude.hashWithSalt` logGroupArn
+        `Prelude.hashWithSalt` logOutputFormat
+
+instance
+  Prelude.NFData
+    CloudWatchLogOptionsSpecification
+  where
+  rnf CloudWatchLogOptionsSpecification' {..} =
+    Prelude.rnf logEnabled
+      `Prelude.seq` Prelude.rnf logGroupArn
+      `Prelude.seq` Prelude.rnf logOutputFormat
+
+instance
+  Data.ToQuery
+    CloudWatchLogOptionsSpecification
+  where
+  toQuery CloudWatchLogOptionsSpecification' {..} =
+    Prelude.mconcat
+      [ "LogEnabled" Data.=: logEnabled,
+        "LogGroupArn" Data.=: logGroupArn,
+        "LogOutputFormat" Data.=: logOutputFormat
+      ]
diff --git a/gen/Amazonka/EC2/Types/CoipAddressUsage.hs b/gen/Amazonka/EC2/Types/CoipAddressUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CoipAddressUsage.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CoipAddressUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CoipAddressUsage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes address usage for a customer-owned address pool.
+--
+-- /See:/ 'newCoipAddressUsage' smart constructor.
+data CoipAddressUsage = CoipAddressUsage'
+  { -- | The allocation ID of the address.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID.
+    awsAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services service.
+    awsService :: Prelude.Maybe Prelude.Text,
+    -- | The customer-owned IP address.
+    coIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CoipAddressUsage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'coipAddressUsage_allocationId' - The allocation ID of the address.
+--
+-- 'awsAccountId', 'coipAddressUsage_awsAccountId' - The Amazon Web Services account ID.
+--
+-- 'awsService', 'coipAddressUsage_awsService' - The Amazon Web Services service.
+--
+-- 'coIp', 'coipAddressUsage_coIp' - The customer-owned IP address.
+newCoipAddressUsage ::
+  CoipAddressUsage
+newCoipAddressUsage =
+  CoipAddressUsage'
+    { allocationId = Prelude.Nothing,
+      awsAccountId = Prelude.Nothing,
+      awsService = Prelude.Nothing,
+      coIp = Prelude.Nothing
+    }
+
+-- | The allocation ID of the address.
+coipAddressUsage_allocationId :: Lens.Lens' CoipAddressUsage (Prelude.Maybe Prelude.Text)
+coipAddressUsage_allocationId = Lens.lens (\CoipAddressUsage' {allocationId} -> allocationId) (\s@CoipAddressUsage' {} a -> s {allocationId = a} :: CoipAddressUsage)
+
+-- | The Amazon Web Services account ID.
+coipAddressUsage_awsAccountId :: Lens.Lens' CoipAddressUsage (Prelude.Maybe Prelude.Text)
+coipAddressUsage_awsAccountId = Lens.lens (\CoipAddressUsage' {awsAccountId} -> awsAccountId) (\s@CoipAddressUsage' {} a -> s {awsAccountId = a} :: CoipAddressUsage)
+
+-- | The Amazon Web Services service.
+coipAddressUsage_awsService :: Lens.Lens' CoipAddressUsage (Prelude.Maybe Prelude.Text)
+coipAddressUsage_awsService = Lens.lens (\CoipAddressUsage' {awsService} -> awsService) (\s@CoipAddressUsage' {} a -> s {awsService = a} :: CoipAddressUsage)
+
+-- | The customer-owned IP address.
+coipAddressUsage_coIp :: Lens.Lens' CoipAddressUsage (Prelude.Maybe Prelude.Text)
+coipAddressUsage_coIp = Lens.lens (\CoipAddressUsage' {coIp} -> coIp) (\s@CoipAddressUsage' {} a -> s {coIp = a} :: CoipAddressUsage)
+
+instance Data.FromXML CoipAddressUsage where
+  parseXML x =
+    CoipAddressUsage'
+      Prelude.<$> (x Data..@? "allocationId")
+      Prelude.<*> (x Data..@? "awsAccountId")
+      Prelude.<*> (x Data..@? "awsService")
+      Prelude.<*> (x Data..@? "coIp")
+
+instance Prelude.Hashable CoipAddressUsage where
+  hashWithSalt _salt CoipAddressUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` awsAccountId
+      `Prelude.hashWithSalt` awsService
+      `Prelude.hashWithSalt` coIp
+
+instance Prelude.NFData CoipAddressUsage where
+  rnf CoipAddressUsage' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf awsAccountId
+      `Prelude.seq` Prelude.rnf awsService
+      `Prelude.seq` Prelude.rnf coIp
diff --git a/gen/Amazonka/EC2/Types/CoipCidr.hs b/gen/Amazonka/EC2/Types/CoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CoipCidr.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CoipCidr where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a customer-owned IP address range.
+--
+-- /See:/ 'newCoipCidr' smart constructor.
+data CoipCidr = CoipCidr'
+  { -- | An address range in a customer-owned IP address space.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the address pool.
+    coipPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'coipCidr_cidr' - An address range in a customer-owned IP address space.
+--
+-- 'coipPoolId', 'coipCidr_coipPoolId' - The ID of the address pool.
+--
+-- 'localGatewayRouteTableId', 'coipCidr_localGatewayRouteTableId' - The ID of the local gateway route table.
+newCoipCidr ::
+  CoipCidr
+newCoipCidr =
+  CoipCidr'
+    { cidr = Prelude.Nothing,
+      coipPoolId = Prelude.Nothing,
+      localGatewayRouteTableId = Prelude.Nothing
+    }
+
+-- | An address range in a customer-owned IP address space.
+coipCidr_cidr :: Lens.Lens' CoipCidr (Prelude.Maybe Prelude.Text)
+coipCidr_cidr = Lens.lens (\CoipCidr' {cidr} -> cidr) (\s@CoipCidr' {} a -> s {cidr = a} :: CoipCidr)
+
+-- | The ID of the address pool.
+coipCidr_coipPoolId :: Lens.Lens' CoipCidr (Prelude.Maybe Prelude.Text)
+coipCidr_coipPoolId = Lens.lens (\CoipCidr' {coipPoolId} -> coipPoolId) (\s@CoipCidr' {} a -> s {coipPoolId = a} :: CoipCidr)
+
+-- | The ID of the local gateway route table.
+coipCidr_localGatewayRouteTableId :: Lens.Lens' CoipCidr (Prelude.Maybe Prelude.Text)
+coipCidr_localGatewayRouteTableId = Lens.lens (\CoipCidr' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@CoipCidr' {} a -> s {localGatewayRouteTableId = a} :: CoipCidr)
+
+instance Data.FromXML CoipCidr where
+  parseXML x =
+    CoipCidr'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "coipPoolId")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableId")
+
+instance Prelude.Hashable CoipCidr where
+  hashWithSalt _salt CoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` coipPoolId
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+
+instance Prelude.NFData CoipCidr where
+  rnf CoipCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf coipPoolId
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/CoipPool.hs b/gen/Amazonka/EC2/Types/CoipPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CoipPool.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CoipPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CoipPool where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a customer-owned address pool.
+--
+-- /See:/ 'newCoipPool' smart constructor.
+data CoipPool = CoipPool'
+  { -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the address pool.
+    poolArn :: Prelude.Maybe Prelude.Text,
+    -- | The address ranges of the address pool.
+    poolCidrs :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the address pool.
+    poolId :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CoipPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayRouteTableId', 'coipPool_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'poolArn', 'coipPool_poolArn' - The ARN of the address pool.
+--
+-- 'poolCidrs', 'coipPool_poolCidrs' - The address ranges of the address pool.
+--
+-- 'poolId', 'coipPool_poolId' - The ID of the address pool.
+--
+-- 'tags', 'coipPool_tags' - The tags.
+newCoipPool ::
+  CoipPool
+newCoipPool =
+  CoipPool'
+    { localGatewayRouteTableId =
+        Prelude.Nothing,
+      poolArn = Prelude.Nothing,
+      poolCidrs = Prelude.Nothing,
+      poolId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID of the local gateway route table.
+coipPool_localGatewayRouteTableId :: Lens.Lens' CoipPool (Prelude.Maybe Prelude.Text)
+coipPool_localGatewayRouteTableId = Lens.lens (\CoipPool' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@CoipPool' {} a -> s {localGatewayRouteTableId = a} :: CoipPool)
+
+-- | The ARN of the address pool.
+coipPool_poolArn :: Lens.Lens' CoipPool (Prelude.Maybe Prelude.Text)
+coipPool_poolArn = Lens.lens (\CoipPool' {poolArn} -> poolArn) (\s@CoipPool' {} a -> s {poolArn = a} :: CoipPool)
+
+-- | The address ranges of the address pool.
+coipPool_poolCidrs :: Lens.Lens' CoipPool (Prelude.Maybe [Prelude.Text])
+coipPool_poolCidrs = Lens.lens (\CoipPool' {poolCidrs} -> poolCidrs) (\s@CoipPool' {} a -> s {poolCidrs = a} :: CoipPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the address pool.
+coipPool_poolId :: Lens.Lens' CoipPool (Prelude.Maybe Prelude.Text)
+coipPool_poolId = Lens.lens (\CoipPool' {poolId} -> poolId) (\s@CoipPool' {} a -> s {poolId = a} :: CoipPool)
+
+-- | The tags.
+coipPool_tags :: Lens.Lens' CoipPool (Prelude.Maybe [Tag])
+coipPool_tags = Lens.lens (\CoipPool' {tags} -> tags) (\s@CoipPool' {} a -> s {tags = a} :: CoipPool) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML CoipPool where
+  parseXML x =
+    CoipPool'
+      Prelude.<$> (x Data..@? "localGatewayRouteTableId")
+      Prelude.<*> (x Data..@? "poolArn")
+      Prelude.<*> ( x
+                      Data..@? "poolCidrSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "poolId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable CoipPool where
+  hashWithSalt _salt CoipPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+      `Prelude.hashWithSalt` poolArn
+      `Prelude.hashWithSalt` poolCidrs
+      `Prelude.hashWithSalt` poolId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData CoipPool where
+  rnf CoipPool' {..} =
+    Prelude.rnf localGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf poolArn
+      `Prelude.seq` Prelude.rnf poolCidrs
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ConnectionLogOptions.hs b/gen/Amazonka/EC2/Types/ConnectionLogOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConnectionLogOptions.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConnectionLogOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConnectionLogOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the client connection logging options for the Client VPN
+-- endpoint.
+--
+-- /See:/ 'newConnectionLogOptions' smart constructor.
+data ConnectionLogOptions = ConnectionLogOptions'
+  { -- | The name of the CloudWatch Logs log group. Required if connection
+    -- logging is enabled.
+    cloudwatchLogGroup :: Prelude.Maybe Prelude.Text,
+    -- | The name of the CloudWatch Logs log stream to which the connection data
+    -- is published.
+    cloudwatchLogStream :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether connection logging is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionLogOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudwatchLogGroup', 'connectionLogOptions_cloudwatchLogGroup' - The name of the CloudWatch Logs log group. Required if connection
+-- logging is enabled.
+--
+-- 'cloudwatchLogStream', 'connectionLogOptions_cloudwatchLogStream' - The name of the CloudWatch Logs log stream to which the connection data
+-- is published.
+--
+-- 'enabled', 'connectionLogOptions_enabled' - Indicates whether connection logging is enabled.
+newConnectionLogOptions ::
+  ConnectionLogOptions
+newConnectionLogOptions =
+  ConnectionLogOptions'
+    { cloudwatchLogGroup =
+        Prelude.Nothing,
+      cloudwatchLogStream = Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | The name of the CloudWatch Logs log group. Required if connection
+-- logging is enabled.
+connectionLogOptions_cloudwatchLogGroup :: Lens.Lens' ConnectionLogOptions (Prelude.Maybe Prelude.Text)
+connectionLogOptions_cloudwatchLogGroup = Lens.lens (\ConnectionLogOptions' {cloudwatchLogGroup} -> cloudwatchLogGroup) (\s@ConnectionLogOptions' {} a -> s {cloudwatchLogGroup = a} :: ConnectionLogOptions)
+
+-- | The name of the CloudWatch Logs log stream to which the connection data
+-- is published.
+connectionLogOptions_cloudwatchLogStream :: Lens.Lens' ConnectionLogOptions (Prelude.Maybe Prelude.Text)
+connectionLogOptions_cloudwatchLogStream = Lens.lens (\ConnectionLogOptions' {cloudwatchLogStream} -> cloudwatchLogStream) (\s@ConnectionLogOptions' {} a -> s {cloudwatchLogStream = a} :: ConnectionLogOptions)
+
+-- | Indicates whether connection logging is enabled.
+connectionLogOptions_enabled :: Lens.Lens' ConnectionLogOptions (Prelude.Maybe Prelude.Bool)
+connectionLogOptions_enabled = Lens.lens (\ConnectionLogOptions' {enabled} -> enabled) (\s@ConnectionLogOptions' {} a -> s {enabled = a} :: ConnectionLogOptions)
+
+instance Prelude.Hashable ConnectionLogOptions where
+  hashWithSalt _salt ConnectionLogOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudwatchLogGroup
+      `Prelude.hashWithSalt` cloudwatchLogStream
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData ConnectionLogOptions where
+  rnf ConnectionLogOptions' {..} =
+    Prelude.rnf cloudwatchLogGroup
+      `Prelude.seq` Prelude.rnf cloudwatchLogStream
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToQuery ConnectionLogOptions where
+  toQuery ConnectionLogOptions' {..} =
+    Prelude.mconcat
+      [ "CloudwatchLogGroup" Data.=: cloudwatchLogGroup,
+        "CloudwatchLogStream" Data.=: cloudwatchLogStream,
+        "Enabled" Data.=: enabled
+      ]
diff --git a/gen/Amazonka/EC2/Types/ConnectionLogResponseOptions.hs b/gen/Amazonka/EC2/Types/ConnectionLogResponseOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConnectionLogResponseOptions.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConnectionLogResponseOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConnectionLogResponseOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the client connection logging options for a Client VPN
+-- endpoint.
+--
+-- /See:/ 'newConnectionLogResponseOptions' smart constructor.
+data ConnectionLogResponseOptions = ConnectionLogResponseOptions'
+  { -- | The name of the Amazon CloudWatch Logs log group to which connection
+    -- logging data is published.
+    cloudwatchLogGroup :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon CloudWatch Logs log stream to which connection
+    -- logging data is published.
+    cloudwatchLogStream :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether client connection logging is enabled for the Client
+    -- VPN endpoint.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionLogResponseOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudwatchLogGroup', 'connectionLogResponseOptions_cloudwatchLogGroup' - The name of the Amazon CloudWatch Logs log group to which connection
+-- logging data is published.
+--
+-- 'cloudwatchLogStream', 'connectionLogResponseOptions_cloudwatchLogStream' - The name of the Amazon CloudWatch Logs log stream to which connection
+-- logging data is published.
+--
+-- 'enabled', 'connectionLogResponseOptions_enabled' - Indicates whether client connection logging is enabled for the Client
+-- VPN endpoint.
+newConnectionLogResponseOptions ::
+  ConnectionLogResponseOptions
+newConnectionLogResponseOptions =
+  ConnectionLogResponseOptions'
+    { cloudwatchLogGroup =
+        Prelude.Nothing,
+      cloudwatchLogStream = Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | The name of the Amazon CloudWatch Logs log group to which connection
+-- logging data is published.
+connectionLogResponseOptions_cloudwatchLogGroup :: Lens.Lens' ConnectionLogResponseOptions (Prelude.Maybe Prelude.Text)
+connectionLogResponseOptions_cloudwatchLogGroup = Lens.lens (\ConnectionLogResponseOptions' {cloudwatchLogGroup} -> cloudwatchLogGroup) (\s@ConnectionLogResponseOptions' {} a -> s {cloudwatchLogGroup = a} :: ConnectionLogResponseOptions)
+
+-- | The name of the Amazon CloudWatch Logs log stream to which connection
+-- logging data is published.
+connectionLogResponseOptions_cloudwatchLogStream :: Lens.Lens' ConnectionLogResponseOptions (Prelude.Maybe Prelude.Text)
+connectionLogResponseOptions_cloudwatchLogStream = Lens.lens (\ConnectionLogResponseOptions' {cloudwatchLogStream} -> cloudwatchLogStream) (\s@ConnectionLogResponseOptions' {} a -> s {cloudwatchLogStream = a} :: ConnectionLogResponseOptions)
+
+-- | Indicates whether client connection logging is enabled for the Client
+-- VPN endpoint.
+connectionLogResponseOptions_enabled :: Lens.Lens' ConnectionLogResponseOptions (Prelude.Maybe Prelude.Bool)
+connectionLogResponseOptions_enabled = Lens.lens (\ConnectionLogResponseOptions' {enabled} -> enabled) (\s@ConnectionLogResponseOptions' {} a -> s {enabled = a} :: ConnectionLogResponseOptions)
+
+instance Data.FromXML ConnectionLogResponseOptions where
+  parseXML x =
+    ConnectionLogResponseOptions'
+      Prelude.<$> (x Data..@? "CloudwatchLogGroup")
+      Prelude.<*> (x Data..@? "CloudwatchLogStream")
+      Prelude.<*> (x Data..@? "Enabled")
+
+instance
+  Prelude.Hashable
+    ConnectionLogResponseOptions
+  where
+  hashWithSalt _salt ConnectionLogResponseOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudwatchLogGroup
+      `Prelude.hashWithSalt` cloudwatchLogStream
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData ConnectionLogResponseOptions where
+  rnf ConnectionLogResponseOptions' {..} =
+    Prelude.rnf cloudwatchLogGroup
+      `Prelude.seq` Prelude.rnf cloudwatchLogStream
+      `Prelude.seq` Prelude.rnf enabled
diff --git a/gen/Amazonka/EC2/Types/ConnectionNotification.hs b/gen/Amazonka/EC2/Types/ConnectionNotification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConnectionNotification.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConnectionNotification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConnectionNotification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ConnectionNotificationState
+import Amazonka.EC2.Types.ConnectionNotificationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a connection notification for a VPC endpoint or VPC endpoint
+-- service.
+--
+-- /See:/ 'newConnectionNotification' smart constructor.
+data ConnectionNotification = ConnectionNotification'
+  { -- | The events for the notification. Valid values are @Accept@, @Connect@,
+    -- @Delete@, and @Reject@.
+    connectionEvents :: Prelude.Maybe [Prelude.Text],
+    -- | The ARN of the SNS topic for the notification.
+    connectionNotificationArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the notification.
+    connectionNotificationId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the notification.
+    connectionNotificationState :: Prelude.Maybe ConnectionNotificationState,
+    -- | The type of notification.
+    connectionNotificationType :: Prelude.Maybe ConnectionNotificationType,
+    -- | The ID of the endpoint service.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC endpoint.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConnectionNotification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionEvents', 'connectionNotification_connectionEvents' - The events for the notification. Valid values are @Accept@, @Connect@,
+-- @Delete@, and @Reject@.
+--
+-- 'connectionNotificationArn', 'connectionNotification_connectionNotificationArn' - The ARN of the SNS topic for the notification.
+--
+-- 'connectionNotificationId', 'connectionNotification_connectionNotificationId' - The ID of the notification.
+--
+-- 'connectionNotificationState', 'connectionNotification_connectionNotificationState' - The state of the notification.
+--
+-- 'connectionNotificationType', 'connectionNotification_connectionNotificationType' - The type of notification.
+--
+-- 'serviceId', 'connectionNotification_serviceId' - The ID of the endpoint service.
+--
+-- 'vpcEndpointId', 'connectionNotification_vpcEndpointId' - The ID of the VPC endpoint.
+newConnectionNotification ::
+  ConnectionNotification
+newConnectionNotification =
+  ConnectionNotification'
+    { connectionEvents =
+        Prelude.Nothing,
+      connectionNotificationArn = Prelude.Nothing,
+      connectionNotificationId = Prelude.Nothing,
+      connectionNotificationState = Prelude.Nothing,
+      connectionNotificationType = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing
+    }
+
+-- | The events for the notification. Valid values are @Accept@, @Connect@,
+-- @Delete@, and @Reject@.
+connectionNotification_connectionEvents :: Lens.Lens' ConnectionNotification (Prelude.Maybe [Prelude.Text])
+connectionNotification_connectionEvents = Lens.lens (\ConnectionNotification' {connectionEvents} -> connectionEvents) (\s@ConnectionNotification' {} a -> s {connectionEvents = a} :: ConnectionNotification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the SNS topic for the notification.
+connectionNotification_connectionNotificationArn :: Lens.Lens' ConnectionNotification (Prelude.Maybe Prelude.Text)
+connectionNotification_connectionNotificationArn = Lens.lens (\ConnectionNotification' {connectionNotificationArn} -> connectionNotificationArn) (\s@ConnectionNotification' {} a -> s {connectionNotificationArn = a} :: ConnectionNotification)
+
+-- | The ID of the notification.
+connectionNotification_connectionNotificationId :: Lens.Lens' ConnectionNotification (Prelude.Maybe Prelude.Text)
+connectionNotification_connectionNotificationId = Lens.lens (\ConnectionNotification' {connectionNotificationId} -> connectionNotificationId) (\s@ConnectionNotification' {} a -> s {connectionNotificationId = a} :: ConnectionNotification)
+
+-- | The state of the notification.
+connectionNotification_connectionNotificationState :: Lens.Lens' ConnectionNotification (Prelude.Maybe ConnectionNotificationState)
+connectionNotification_connectionNotificationState = Lens.lens (\ConnectionNotification' {connectionNotificationState} -> connectionNotificationState) (\s@ConnectionNotification' {} a -> s {connectionNotificationState = a} :: ConnectionNotification)
+
+-- | The type of notification.
+connectionNotification_connectionNotificationType :: Lens.Lens' ConnectionNotification (Prelude.Maybe ConnectionNotificationType)
+connectionNotification_connectionNotificationType = Lens.lens (\ConnectionNotification' {connectionNotificationType} -> connectionNotificationType) (\s@ConnectionNotification' {} a -> s {connectionNotificationType = a} :: ConnectionNotification)
+
+-- | The ID of the endpoint service.
+connectionNotification_serviceId :: Lens.Lens' ConnectionNotification (Prelude.Maybe Prelude.Text)
+connectionNotification_serviceId = Lens.lens (\ConnectionNotification' {serviceId} -> serviceId) (\s@ConnectionNotification' {} a -> s {serviceId = a} :: ConnectionNotification)
+
+-- | The ID of the VPC endpoint.
+connectionNotification_vpcEndpointId :: Lens.Lens' ConnectionNotification (Prelude.Maybe Prelude.Text)
+connectionNotification_vpcEndpointId = Lens.lens (\ConnectionNotification' {vpcEndpointId} -> vpcEndpointId) (\s@ConnectionNotification' {} a -> s {vpcEndpointId = a} :: ConnectionNotification)
+
+instance Data.FromXML ConnectionNotification where
+  parseXML x =
+    ConnectionNotification'
+      Prelude.<$> ( x
+                      Data..@? "connectionEvents"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "connectionNotificationArn")
+      Prelude.<*> (x Data..@? "connectionNotificationId")
+      Prelude.<*> (x Data..@? "connectionNotificationState")
+      Prelude.<*> (x Data..@? "connectionNotificationType")
+      Prelude.<*> (x Data..@? "serviceId")
+      Prelude.<*> (x Data..@? "vpcEndpointId")
+
+instance Prelude.Hashable ConnectionNotification where
+  hashWithSalt _salt ConnectionNotification' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionEvents
+      `Prelude.hashWithSalt` connectionNotificationArn
+      `Prelude.hashWithSalt` connectionNotificationId
+      `Prelude.hashWithSalt` connectionNotificationState
+      `Prelude.hashWithSalt` connectionNotificationType
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` vpcEndpointId
+
+instance Prelude.NFData ConnectionNotification where
+  rnf ConnectionNotification' {..} =
+    Prelude.rnf connectionEvents
+      `Prelude.seq` Prelude.rnf connectionNotificationArn
+      `Prelude.seq` Prelude.rnf connectionNotificationId
+      `Prelude.seq` Prelude.rnf connectionNotificationState
+      `Prelude.seq` Prelude.rnf connectionNotificationType
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf vpcEndpointId
diff --git a/gen/Amazonka/EC2/Types/ConnectionNotificationState.hs b/gen/Amazonka/EC2/Types/ConnectionNotificationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConnectionNotificationState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConnectionNotificationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConnectionNotificationState
+  ( ConnectionNotificationState
+      ( ..,
+        ConnectionNotificationState_Disabled,
+        ConnectionNotificationState_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionNotificationState = ConnectionNotificationState'
+  { fromConnectionNotificationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConnectionNotificationState_Disabled :: ConnectionNotificationState
+pattern ConnectionNotificationState_Disabled = ConnectionNotificationState' "Disabled"
+
+pattern ConnectionNotificationState_Enabled :: ConnectionNotificationState
+pattern ConnectionNotificationState_Enabled = ConnectionNotificationState' "Enabled"
+
+{-# COMPLETE
+  ConnectionNotificationState_Disabled,
+  ConnectionNotificationState_Enabled,
+  ConnectionNotificationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ConnectionNotificationType.hs b/gen/Amazonka/EC2/Types/ConnectionNotificationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConnectionNotificationType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConnectionNotificationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConnectionNotificationType
+  ( ConnectionNotificationType
+      ( ..,
+        ConnectionNotificationType_Topic
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionNotificationType = ConnectionNotificationType'
+  { fromConnectionNotificationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConnectionNotificationType_Topic :: ConnectionNotificationType
+pattern ConnectionNotificationType_Topic = ConnectionNotificationType' "Topic"
+
+{-# COMPLETE
+  ConnectionNotificationType_Topic,
+  ConnectionNotificationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ConnectivityType.hs b/gen/Amazonka/EC2/Types/ConnectivityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConnectivityType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConnectivityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConnectivityType
+  ( ConnectivityType
+      ( ..,
+        ConnectivityType_Private,
+        ConnectivityType_Public
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectivityType = ConnectivityType'
+  { fromConnectivityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConnectivityType_Private :: ConnectivityType
+pattern ConnectivityType_Private = ConnectivityType' "private"
+
+pattern ConnectivityType_Public :: ConnectivityType
+pattern ConnectivityType_Public = ConnectivityType' "public"
+
+{-# COMPLETE
+  ConnectivityType_Private,
+  ConnectivityType_Public,
+  ConnectivityType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ContainerFormat.hs b/gen/Amazonka/EC2/Types/ContainerFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ContainerFormat.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ContainerFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ContainerFormat
+  ( ContainerFormat
+      ( ..,
+        ContainerFormat_Ova
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ContainerFormat = ContainerFormat'
+  { fromContainerFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ContainerFormat_Ova :: ContainerFormat
+pattern ContainerFormat_Ova = ContainerFormat' "ova"
+
+{-# COMPLETE
+  ContainerFormat_Ova,
+  ContainerFormat'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ConversionTask.hs b/gen/Amazonka/EC2/Types/ConversionTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConversionTask.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConversionTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConversionTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ConversionTaskState
+import Amazonka.EC2.Types.ImportInstanceTaskDetails
+import Amazonka.EC2.Types.ImportVolumeTaskDetails
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a conversion task.
+--
+-- /See:/ 'newConversionTask' smart constructor.
+data ConversionTask = ConversionTask'
+  { -- | The ID of the conversion task.
+    conversionTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The time when the task expires. If the upload isn\'t complete before the
+    -- expiration time, we automatically cancel the task.
+    expirationTime :: Prelude.Maybe Prelude.Text,
+    -- | If the task is for importing an instance, this contains information
+    -- about the import instance task.
+    importInstance :: Prelude.Maybe ImportInstanceTaskDetails,
+    -- | If the task is for importing a volume, this contains information about
+    -- the import volume task.
+    importVolume :: Prelude.Maybe ImportVolumeTaskDetails,
+    -- | The state of the conversion task.
+    state :: Prelude.Maybe ConversionTaskState,
+    -- | The status message related to the conversion task.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the task.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ConversionTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'conversionTaskId', 'conversionTask_conversionTaskId' - The ID of the conversion task.
+--
+-- 'expirationTime', 'conversionTask_expirationTime' - The time when the task expires. If the upload isn\'t complete before the
+-- expiration time, we automatically cancel the task.
+--
+-- 'importInstance', 'conversionTask_importInstance' - If the task is for importing an instance, this contains information
+-- about the import instance task.
+--
+-- 'importVolume', 'conversionTask_importVolume' - If the task is for importing a volume, this contains information about
+-- the import volume task.
+--
+-- 'state', 'conversionTask_state' - The state of the conversion task.
+--
+-- 'statusMessage', 'conversionTask_statusMessage' - The status message related to the conversion task.
+--
+-- 'tags', 'conversionTask_tags' - Any tags assigned to the task.
+newConversionTask ::
+  ConversionTask
+newConversionTask =
+  ConversionTask'
+    { conversionTaskId = Prelude.Nothing,
+      expirationTime = Prelude.Nothing,
+      importInstance = Prelude.Nothing,
+      importVolume = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID of the conversion task.
+conversionTask_conversionTaskId :: Lens.Lens' ConversionTask (Prelude.Maybe Prelude.Text)
+conversionTask_conversionTaskId = Lens.lens (\ConversionTask' {conversionTaskId} -> conversionTaskId) (\s@ConversionTask' {} a -> s {conversionTaskId = a} :: ConversionTask)
+
+-- | The time when the task expires. If the upload isn\'t complete before the
+-- expiration time, we automatically cancel the task.
+conversionTask_expirationTime :: Lens.Lens' ConversionTask (Prelude.Maybe Prelude.Text)
+conversionTask_expirationTime = Lens.lens (\ConversionTask' {expirationTime} -> expirationTime) (\s@ConversionTask' {} a -> s {expirationTime = a} :: ConversionTask)
+
+-- | If the task is for importing an instance, this contains information
+-- about the import instance task.
+conversionTask_importInstance :: Lens.Lens' ConversionTask (Prelude.Maybe ImportInstanceTaskDetails)
+conversionTask_importInstance = Lens.lens (\ConversionTask' {importInstance} -> importInstance) (\s@ConversionTask' {} a -> s {importInstance = a} :: ConversionTask)
+
+-- | If the task is for importing a volume, this contains information about
+-- the import volume task.
+conversionTask_importVolume :: Lens.Lens' ConversionTask (Prelude.Maybe ImportVolumeTaskDetails)
+conversionTask_importVolume = Lens.lens (\ConversionTask' {importVolume} -> importVolume) (\s@ConversionTask' {} a -> s {importVolume = a} :: ConversionTask)
+
+-- | The state of the conversion task.
+conversionTask_state :: Lens.Lens' ConversionTask (Prelude.Maybe ConversionTaskState)
+conversionTask_state = Lens.lens (\ConversionTask' {state} -> state) (\s@ConversionTask' {} a -> s {state = a} :: ConversionTask)
+
+-- | The status message related to the conversion task.
+conversionTask_statusMessage :: Lens.Lens' ConversionTask (Prelude.Maybe Prelude.Text)
+conversionTask_statusMessage = Lens.lens (\ConversionTask' {statusMessage} -> statusMessage) (\s@ConversionTask' {} a -> s {statusMessage = a} :: ConversionTask)
+
+-- | Any tags assigned to the task.
+conversionTask_tags :: Lens.Lens' ConversionTask (Prelude.Maybe [Tag])
+conversionTask_tags = Lens.lens (\ConversionTask' {tags} -> tags) (\s@ConversionTask' {} a -> s {tags = a} :: ConversionTask) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ConversionTask where
+  parseXML x =
+    ConversionTask'
+      Prelude.<$> (x Data..@? "conversionTaskId")
+      Prelude.<*> (x Data..@? "expirationTime")
+      Prelude.<*> (x Data..@? "importInstance")
+      Prelude.<*> (x Data..@? "importVolume")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ConversionTask where
+  hashWithSalt _salt ConversionTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` conversionTaskId
+      `Prelude.hashWithSalt` expirationTime
+      `Prelude.hashWithSalt` importInstance
+      `Prelude.hashWithSalt` importVolume
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ConversionTask where
+  rnf ConversionTask' {..} =
+    Prelude.rnf conversionTaskId
+      `Prelude.seq` Prelude.rnf expirationTime
+      `Prelude.seq` Prelude.rnf importInstance
+      `Prelude.seq` Prelude.rnf importVolume
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ConversionTaskState.hs b/gen/Amazonka/EC2/Types/ConversionTaskState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ConversionTaskState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ConversionTaskState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ConversionTaskState
+  ( ConversionTaskState
+      ( ..,
+        ConversionTaskState_Active,
+        ConversionTaskState_Cancelled,
+        ConversionTaskState_Cancelling,
+        ConversionTaskState_Completed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConversionTaskState = ConversionTaskState'
+  { fromConversionTaskState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ConversionTaskState_Active :: ConversionTaskState
+pattern ConversionTaskState_Active = ConversionTaskState' "active"
+
+pattern ConversionTaskState_Cancelled :: ConversionTaskState
+pattern ConversionTaskState_Cancelled = ConversionTaskState' "cancelled"
+
+pattern ConversionTaskState_Cancelling :: ConversionTaskState
+pattern ConversionTaskState_Cancelling = ConversionTaskState' "cancelling"
+
+pattern ConversionTaskState_Completed :: ConversionTaskState
+pattern ConversionTaskState_Completed = ConversionTaskState' "completed"
+
+{-# COMPLETE
+  ConversionTaskState_Active,
+  ConversionTaskState_Cancelled,
+  ConversionTaskState_Cancelling,
+  ConversionTaskState_Completed,
+  ConversionTaskState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CopyTagsFromSource.hs b/gen/Amazonka/EC2/Types/CopyTagsFromSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CopyTagsFromSource.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CopyTagsFromSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CopyTagsFromSource
+  ( CopyTagsFromSource
+      ( ..,
+        CopyTagsFromSource_Volume
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CopyTagsFromSource = CopyTagsFromSource'
+  { fromCopyTagsFromSource ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CopyTagsFromSource_Volume :: CopyTagsFromSource
+pattern CopyTagsFromSource_Volume = CopyTagsFromSource' "volume"
+
+{-# COMPLETE
+  CopyTagsFromSource_Volume,
+  CopyTagsFromSource'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CpuManufacturer.hs b/gen/Amazonka/EC2/Types/CpuManufacturer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CpuManufacturer.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CpuManufacturer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CpuManufacturer
+  ( CpuManufacturer
+      ( ..,
+        CpuManufacturer_Amazon_web_services,
+        CpuManufacturer_Amd,
+        CpuManufacturer_Intel
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CpuManufacturer = CpuManufacturer'
+  { fromCpuManufacturer ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CpuManufacturer_Amazon_web_services :: CpuManufacturer
+pattern CpuManufacturer_Amazon_web_services = CpuManufacturer' "amazon-web-services"
+
+pattern CpuManufacturer_Amd :: CpuManufacturer
+pattern CpuManufacturer_Amd = CpuManufacturer' "amd"
+
+pattern CpuManufacturer_Intel :: CpuManufacturer
+pattern CpuManufacturer_Intel = CpuManufacturer' "intel"
+
+{-# COMPLETE
+  CpuManufacturer_Amazon_web_services,
+  CpuManufacturer_Amd,
+  CpuManufacturer_Intel,
+  CpuManufacturer'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CpuOptions.hs b/gen/Amazonka/EC2/Types/CpuOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CpuOptions.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CpuOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CpuOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The CPU options for the instance.
+--
+-- /See:/ 'newCpuOptions' smart constructor.
+data CpuOptions = CpuOptions'
+  { -- | The number of CPU cores for the instance.
+    coreCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of threads per CPU core.
+    threadsPerCore :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CpuOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coreCount', 'cpuOptions_coreCount' - The number of CPU cores for the instance.
+--
+-- 'threadsPerCore', 'cpuOptions_threadsPerCore' - The number of threads per CPU core.
+newCpuOptions ::
+  CpuOptions
+newCpuOptions =
+  CpuOptions'
+    { coreCount = Prelude.Nothing,
+      threadsPerCore = Prelude.Nothing
+    }
+
+-- | The number of CPU cores for the instance.
+cpuOptions_coreCount :: Lens.Lens' CpuOptions (Prelude.Maybe Prelude.Int)
+cpuOptions_coreCount = Lens.lens (\CpuOptions' {coreCount} -> coreCount) (\s@CpuOptions' {} a -> s {coreCount = a} :: CpuOptions)
+
+-- | The number of threads per CPU core.
+cpuOptions_threadsPerCore :: Lens.Lens' CpuOptions (Prelude.Maybe Prelude.Int)
+cpuOptions_threadsPerCore = Lens.lens (\CpuOptions' {threadsPerCore} -> threadsPerCore) (\s@CpuOptions' {} a -> s {threadsPerCore = a} :: CpuOptions)
+
+instance Data.FromXML CpuOptions where
+  parseXML x =
+    CpuOptions'
+      Prelude.<$> (x Data..@? "coreCount")
+      Prelude.<*> (x Data..@? "threadsPerCore")
+
+instance Prelude.Hashable CpuOptions where
+  hashWithSalt _salt CpuOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` coreCount
+      `Prelude.hashWithSalt` threadsPerCore
+
+instance Prelude.NFData CpuOptions where
+  rnf CpuOptions' {..} =
+    Prelude.rnf coreCount
+      `Prelude.seq` Prelude.rnf threadsPerCore
diff --git a/gen/Amazonka/EC2/Types/CpuOptionsRequest.hs b/gen/Amazonka/EC2/Types/CpuOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CpuOptionsRequest.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CpuOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CpuOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The CPU options for the instance. Both the core count and threads per
+-- core must be specified in the request.
+--
+-- /See:/ 'newCpuOptionsRequest' smart constructor.
+data CpuOptionsRequest = CpuOptionsRequest'
+  { -- | The number of CPU cores for the instance.
+    coreCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of threads per CPU core. To disable multithreading for the
+    -- instance, specify a value of @1@. Otherwise, specify the default value
+    -- of @2@.
+    threadsPerCore :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CpuOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coreCount', 'cpuOptionsRequest_coreCount' - The number of CPU cores for the instance.
+--
+-- 'threadsPerCore', 'cpuOptionsRequest_threadsPerCore' - The number of threads per CPU core. To disable multithreading for the
+-- instance, specify a value of @1@. Otherwise, specify the default value
+-- of @2@.
+newCpuOptionsRequest ::
+  CpuOptionsRequest
+newCpuOptionsRequest =
+  CpuOptionsRequest'
+    { coreCount = Prelude.Nothing,
+      threadsPerCore = Prelude.Nothing
+    }
+
+-- | The number of CPU cores for the instance.
+cpuOptionsRequest_coreCount :: Lens.Lens' CpuOptionsRequest (Prelude.Maybe Prelude.Int)
+cpuOptionsRequest_coreCount = Lens.lens (\CpuOptionsRequest' {coreCount} -> coreCount) (\s@CpuOptionsRequest' {} a -> s {coreCount = a} :: CpuOptionsRequest)
+
+-- | The number of threads per CPU core. To disable multithreading for the
+-- instance, specify a value of @1@. Otherwise, specify the default value
+-- of @2@.
+cpuOptionsRequest_threadsPerCore :: Lens.Lens' CpuOptionsRequest (Prelude.Maybe Prelude.Int)
+cpuOptionsRequest_threadsPerCore = Lens.lens (\CpuOptionsRequest' {threadsPerCore} -> threadsPerCore) (\s@CpuOptionsRequest' {} a -> s {threadsPerCore = a} :: CpuOptionsRequest)
+
+instance Prelude.Hashable CpuOptionsRequest where
+  hashWithSalt _salt CpuOptionsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` coreCount
+      `Prelude.hashWithSalt` threadsPerCore
+
+instance Prelude.NFData CpuOptionsRequest where
+  rnf CpuOptionsRequest' {..} =
+    Prelude.rnf coreCount
+      `Prelude.seq` Prelude.rnf threadsPerCore
+
+instance Data.ToQuery CpuOptionsRequest where
+  toQuery CpuOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "CoreCount" Data.=: coreCount,
+        "ThreadsPerCore" Data.=: threadsPerCore
+      ]
diff --git a/gen/Amazonka/EC2/Types/CreateFleetError.hs b/gen/Amazonka/EC2/Types/CreateFleetError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateFleetError.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateFleetError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateFleetError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceLifecycle
+import Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instances that could not be launched by the fleet.
+--
+-- /See:/ 'newCreateFleetError' smart constructor.
+data CreateFleetError = CreateFleetError'
+  { -- | The error code that indicates why the instance could not be launched.
+    -- For more information about error codes, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The error message that describes why the instance could not be launched.
+    -- For more information about error messages, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The launch templates and overrides that were used for launching the
+    -- instances. The values that you specify in the Overrides replace the
+    -- values in the launch template.
+    launchTemplateAndOverrides :: Prelude.Maybe LaunchTemplateAndOverridesResponse,
+    -- | Indicates if the instance that could not be launched was a Spot Instance
+    -- or On-Demand Instance.
+    lifecycle :: Prelude.Maybe InstanceLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleetError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'createFleetError_errorCode' - The error code that indicates why the instance could not be launched.
+-- For more information about error codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+--
+-- 'errorMessage', 'createFleetError_errorMessage' - The error message that describes why the instance could not be launched.
+-- For more information about error messages, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+--
+-- 'launchTemplateAndOverrides', 'createFleetError_launchTemplateAndOverrides' - The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+--
+-- 'lifecycle', 'createFleetError_lifecycle' - Indicates if the instance that could not be launched was a Spot Instance
+-- or On-Demand Instance.
+newCreateFleetError ::
+  CreateFleetError
+newCreateFleetError =
+  CreateFleetError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      launchTemplateAndOverrides = Prelude.Nothing,
+      lifecycle = Prelude.Nothing
+    }
+
+-- | The error code that indicates why the instance could not be launched.
+-- For more information about error codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+createFleetError_errorCode :: Lens.Lens' CreateFleetError (Prelude.Maybe Prelude.Text)
+createFleetError_errorCode = Lens.lens (\CreateFleetError' {errorCode} -> errorCode) (\s@CreateFleetError' {} a -> s {errorCode = a} :: CreateFleetError)
+
+-- | The error message that describes why the instance could not be launched.
+-- For more information about error messages, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+createFleetError_errorMessage :: Lens.Lens' CreateFleetError (Prelude.Maybe Prelude.Text)
+createFleetError_errorMessage = Lens.lens (\CreateFleetError' {errorMessage} -> errorMessage) (\s@CreateFleetError' {} a -> s {errorMessage = a} :: CreateFleetError)
+
+-- | The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+createFleetError_launchTemplateAndOverrides :: Lens.Lens' CreateFleetError (Prelude.Maybe LaunchTemplateAndOverridesResponse)
+createFleetError_launchTemplateAndOverrides = Lens.lens (\CreateFleetError' {launchTemplateAndOverrides} -> launchTemplateAndOverrides) (\s@CreateFleetError' {} a -> s {launchTemplateAndOverrides = a} :: CreateFleetError)
+
+-- | Indicates if the instance that could not be launched was a Spot Instance
+-- or On-Demand Instance.
+createFleetError_lifecycle :: Lens.Lens' CreateFleetError (Prelude.Maybe InstanceLifecycle)
+createFleetError_lifecycle = Lens.lens (\CreateFleetError' {lifecycle} -> lifecycle) (\s@CreateFleetError' {} a -> s {lifecycle = a} :: CreateFleetError)
+
+instance Data.FromXML CreateFleetError where
+  parseXML x =
+    CreateFleetError'
+      Prelude.<$> (x Data..@? "errorCode")
+      Prelude.<*> (x Data..@? "errorMessage")
+      Prelude.<*> (x Data..@? "launchTemplateAndOverrides")
+      Prelude.<*> (x Data..@? "lifecycle")
+
+instance Prelude.Hashable CreateFleetError where
+  hashWithSalt _salt CreateFleetError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` launchTemplateAndOverrides
+      `Prelude.hashWithSalt` lifecycle
+
+instance Prelude.NFData CreateFleetError where
+  rnf CreateFleetError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf launchTemplateAndOverrides
+      `Prelude.seq` Prelude.rnf lifecycle
diff --git a/gen/Amazonka/EC2/Types/CreateFleetInstance.hs b/gen/Amazonka/EC2/Types/CreateFleetInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateFleetInstance.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateFleetInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateFleetInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceLifecycle
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+import Amazonka.EC2.Types.PlatformValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instances that were launched by the fleet.
+--
+-- /See:/ 'newCreateFleetInstance' smart constructor.
+data CreateFleetInstance = CreateFleetInstance'
+  { -- | The IDs of the instances.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The instance type.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The launch templates and overrides that were used for launching the
+    -- instances. The values that you specify in the Overrides replace the
+    -- values in the launch template.
+    launchTemplateAndOverrides :: Prelude.Maybe LaunchTemplateAndOverridesResponse,
+    -- | Indicates if the instance that was launched is a Spot Instance or
+    -- On-Demand Instance.
+    lifecycle :: Prelude.Maybe InstanceLifecycle,
+    -- | The value is @Windows@ for Windows instances. Otherwise, the value is
+    -- blank.
+    platform :: Prelude.Maybe PlatformValues
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleetInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceIds', 'createFleetInstance_instanceIds' - The IDs of the instances.
+--
+-- 'instanceType', 'createFleetInstance_instanceType' - The instance type.
+--
+-- 'launchTemplateAndOverrides', 'createFleetInstance_launchTemplateAndOverrides' - The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+--
+-- 'lifecycle', 'createFleetInstance_lifecycle' - Indicates if the instance that was launched is a Spot Instance or
+-- On-Demand Instance.
+--
+-- 'platform', 'createFleetInstance_platform' - The value is @Windows@ for Windows instances. Otherwise, the value is
+-- blank.
+newCreateFleetInstance ::
+  CreateFleetInstance
+newCreateFleetInstance =
+  CreateFleetInstance'
+    { instanceIds = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      launchTemplateAndOverrides = Prelude.Nothing,
+      lifecycle = Prelude.Nothing,
+      platform = Prelude.Nothing
+    }
+
+-- | The IDs of the instances.
+createFleetInstance_instanceIds :: Lens.Lens' CreateFleetInstance (Prelude.Maybe [Prelude.Text])
+createFleetInstance_instanceIds = Lens.lens (\CreateFleetInstance' {instanceIds} -> instanceIds) (\s@CreateFleetInstance' {} a -> s {instanceIds = a} :: CreateFleetInstance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type.
+createFleetInstance_instanceType :: Lens.Lens' CreateFleetInstance (Prelude.Maybe InstanceType)
+createFleetInstance_instanceType = Lens.lens (\CreateFleetInstance' {instanceType} -> instanceType) (\s@CreateFleetInstance' {} a -> s {instanceType = a} :: CreateFleetInstance)
+
+-- | The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+createFleetInstance_launchTemplateAndOverrides :: Lens.Lens' CreateFleetInstance (Prelude.Maybe LaunchTemplateAndOverridesResponse)
+createFleetInstance_launchTemplateAndOverrides = Lens.lens (\CreateFleetInstance' {launchTemplateAndOverrides} -> launchTemplateAndOverrides) (\s@CreateFleetInstance' {} a -> s {launchTemplateAndOverrides = a} :: CreateFleetInstance)
+
+-- | Indicates if the instance that was launched is a Spot Instance or
+-- On-Demand Instance.
+createFleetInstance_lifecycle :: Lens.Lens' CreateFleetInstance (Prelude.Maybe InstanceLifecycle)
+createFleetInstance_lifecycle = Lens.lens (\CreateFleetInstance' {lifecycle} -> lifecycle) (\s@CreateFleetInstance' {} a -> s {lifecycle = a} :: CreateFleetInstance)
+
+-- | The value is @Windows@ for Windows instances. Otherwise, the value is
+-- blank.
+createFleetInstance_platform :: Lens.Lens' CreateFleetInstance (Prelude.Maybe PlatformValues)
+createFleetInstance_platform = Lens.lens (\CreateFleetInstance' {platform} -> platform) (\s@CreateFleetInstance' {} a -> s {platform = a} :: CreateFleetInstance)
+
+instance Data.FromXML CreateFleetInstance where
+  parseXML x =
+    CreateFleetInstance'
+      Prelude.<$> ( x
+                      Data..@? "instanceIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "launchTemplateAndOverrides")
+      Prelude.<*> (x Data..@? "lifecycle")
+      Prelude.<*> (x Data..@? "platform")
+
+instance Prelude.Hashable CreateFleetInstance where
+  hashWithSalt _salt CreateFleetInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceIds
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` launchTemplateAndOverrides
+      `Prelude.hashWithSalt` lifecycle
+      `Prelude.hashWithSalt` platform
+
+instance Prelude.NFData CreateFleetInstance where
+  rnf CreateFleetInstance' {..} =
+    Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf launchTemplateAndOverrides
+      `Prelude.seq` Prelude.rnf lifecycle
+      `Prelude.seq` Prelude.rnf platform
diff --git a/gen/Amazonka/EC2/Types/CreateTransitGatewayConnectRequestOptions.hs b/gen/Amazonka/EC2/Types/CreateTransitGatewayConnectRequestOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateTransitGatewayConnectRequestOptions.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateTransitGatewayConnectRequestOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateTransitGatewayConnectRequestOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ProtocolValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for a Connect attachment.
+--
+-- /See:/ 'newCreateTransitGatewayConnectRequestOptions' smart constructor.
+data CreateTransitGatewayConnectRequestOptions = CreateTransitGatewayConnectRequestOptions'
+  { -- | The tunnel protocol.
+    protocol :: ProtocolValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayConnectRequestOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'protocol', 'createTransitGatewayConnectRequestOptions_protocol' - The tunnel protocol.
+newCreateTransitGatewayConnectRequestOptions ::
+  -- | 'protocol'
+  ProtocolValue ->
+  CreateTransitGatewayConnectRequestOptions
+newCreateTransitGatewayConnectRequestOptions
+  pProtocol_ =
+    CreateTransitGatewayConnectRequestOptions'
+      { protocol =
+          pProtocol_
+      }
+
+-- | The tunnel protocol.
+createTransitGatewayConnectRequestOptions_protocol :: Lens.Lens' CreateTransitGatewayConnectRequestOptions ProtocolValue
+createTransitGatewayConnectRequestOptions_protocol = Lens.lens (\CreateTransitGatewayConnectRequestOptions' {protocol} -> protocol) (\s@CreateTransitGatewayConnectRequestOptions' {} a -> s {protocol = a} :: CreateTransitGatewayConnectRequestOptions)
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayConnectRequestOptions
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayConnectRequestOptions' {..} =
+      _salt `Prelude.hashWithSalt` protocol
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayConnectRequestOptions
+  where
+  rnf CreateTransitGatewayConnectRequestOptions' {..} =
+    Prelude.rnf protocol
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayConnectRequestOptions
+  where
+  toQuery
+    CreateTransitGatewayConnectRequestOptions' {..} =
+      Prelude.mconcat ["Protocol" Data.=: protocol]
diff --git a/gen/Amazonka/EC2/Types/CreateTransitGatewayMulticastDomainRequestOptions.hs b/gen/Amazonka/EC2/Types/CreateTransitGatewayMulticastDomainRequestOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateTransitGatewayMulticastDomainRequestOptions.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateTransitGatewayMulticastDomainRequestOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateTransitGatewayMulticastDomainRequestOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AutoAcceptSharedAssociationsValue
+import Amazonka.EC2.Types.Igmpv2SupportValue
+import Amazonka.EC2.Types.StaticSourcesSupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for the transit gateway multicast domain.
+--
+-- /See:/ 'newCreateTransitGatewayMulticastDomainRequestOptions' smart constructor.
+data CreateTransitGatewayMulticastDomainRequestOptions = CreateTransitGatewayMulticastDomainRequestOptions'
+  { -- | Indicates whether to automatically accept cross-account subnet
+    -- associations that are associated with the transit gateway multicast
+    -- domain.
+    autoAcceptSharedAssociations :: Prelude.Maybe AutoAcceptSharedAssociationsValue,
+    -- | Specify whether to enable Internet Group Management Protocol (IGMP)
+    -- version 2 for the transit gateway multicast domain.
+    igmpv2Support :: Prelude.Maybe Igmpv2SupportValue,
+    -- | Specify whether to enable support for statically configuring multicast
+    -- group sources for a domain.
+    staticSourcesSupport :: Prelude.Maybe StaticSourcesSupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayMulticastDomainRequestOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoAcceptSharedAssociations', 'createTransitGatewayMulticastDomainRequestOptions_autoAcceptSharedAssociations' - Indicates whether to automatically accept cross-account subnet
+-- associations that are associated with the transit gateway multicast
+-- domain.
+--
+-- 'igmpv2Support', 'createTransitGatewayMulticastDomainRequestOptions_igmpv2Support' - Specify whether to enable Internet Group Management Protocol (IGMP)
+-- version 2 for the transit gateway multicast domain.
+--
+-- 'staticSourcesSupport', 'createTransitGatewayMulticastDomainRequestOptions_staticSourcesSupport' - Specify whether to enable support for statically configuring multicast
+-- group sources for a domain.
+newCreateTransitGatewayMulticastDomainRequestOptions ::
+  CreateTransitGatewayMulticastDomainRequestOptions
+newCreateTransitGatewayMulticastDomainRequestOptions =
+  CreateTransitGatewayMulticastDomainRequestOptions'
+    { autoAcceptSharedAssociations =
+        Prelude.Nothing,
+      igmpv2Support =
+        Prelude.Nothing,
+      staticSourcesSupport =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether to automatically accept cross-account subnet
+-- associations that are associated with the transit gateway multicast
+-- domain.
+createTransitGatewayMulticastDomainRequestOptions_autoAcceptSharedAssociations :: Lens.Lens' CreateTransitGatewayMulticastDomainRequestOptions (Prelude.Maybe AutoAcceptSharedAssociationsValue)
+createTransitGatewayMulticastDomainRequestOptions_autoAcceptSharedAssociations = Lens.lens (\CreateTransitGatewayMulticastDomainRequestOptions' {autoAcceptSharedAssociations} -> autoAcceptSharedAssociations) (\s@CreateTransitGatewayMulticastDomainRequestOptions' {} a -> s {autoAcceptSharedAssociations = a} :: CreateTransitGatewayMulticastDomainRequestOptions)
+
+-- | Specify whether to enable Internet Group Management Protocol (IGMP)
+-- version 2 for the transit gateway multicast domain.
+createTransitGatewayMulticastDomainRequestOptions_igmpv2Support :: Lens.Lens' CreateTransitGatewayMulticastDomainRequestOptions (Prelude.Maybe Igmpv2SupportValue)
+createTransitGatewayMulticastDomainRequestOptions_igmpv2Support = Lens.lens (\CreateTransitGatewayMulticastDomainRequestOptions' {igmpv2Support} -> igmpv2Support) (\s@CreateTransitGatewayMulticastDomainRequestOptions' {} a -> s {igmpv2Support = a} :: CreateTransitGatewayMulticastDomainRequestOptions)
+
+-- | Specify whether to enable support for statically configuring multicast
+-- group sources for a domain.
+createTransitGatewayMulticastDomainRequestOptions_staticSourcesSupport :: Lens.Lens' CreateTransitGatewayMulticastDomainRequestOptions (Prelude.Maybe StaticSourcesSupportValue)
+createTransitGatewayMulticastDomainRequestOptions_staticSourcesSupport = Lens.lens (\CreateTransitGatewayMulticastDomainRequestOptions' {staticSourcesSupport} -> staticSourcesSupport) (\s@CreateTransitGatewayMulticastDomainRequestOptions' {} a -> s {staticSourcesSupport = a} :: CreateTransitGatewayMulticastDomainRequestOptions)
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayMulticastDomainRequestOptions
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayMulticastDomainRequestOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` autoAcceptSharedAssociations
+        `Prelude.hashWithSalt` igmpv2Support
+        `Prelude.hashWithSalt` staticSourcesSupport
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayMulticastDomainRequestOptions
+  where
+  rnf
+    CreateTransitGatewayMulticastDomainRequestOptions' {..} =
+      Prelude.rnf autoAcceptSharedAssociations
+        `Prelude.seq` Prelude.rnf igmpv2Support
+        `Prelude.seq` Prelude.rnf staticSourcesSupport
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayMulticastDomainRequestOptions
+  where
+  toQuery
+    CreateTransitGatewayMulticastDomainRequestOptions' {..} =
+      Prelude.mconcat
+        [ "AutoAcceptSharedAssociations"
+            Data.=: autoAcceptSharedAssociations,
+          "Igmpv2Support" Data.=: igmpv2Support,
+          "StaticSourcesSupport" Data.=: staticSourcesSupport
+        ]
diff --git a/gen/Amazonka/EC2/Types/CreateTransitGatewayPeeringAttachmentRequestOptions.hs b/gen/Amazonka/EC2/Types/CreateTransitGatewayPeeringAttachmentRequestOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateTransitGatewayPeeringAttachmentRequestOptions.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateTransitGatewayPeeringAttachmentRequestOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateTransitGatewayPeeringAttachmentRequestOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DynamicRoutingValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes whether dynamic routing is enabled or disabled for the transit
+-- gateway peering request.
+--
+-- /See:/ 'newCreateTransitGatewayPeeringAttachmentRequestOptions' smart constructor.
+data CreateTransitGatewayPeeringAttachmentRequestOptions = CreateTransitGatewayPeeringAttachmentRequestOptions'
+  { -- | Indicates whether dynamic routing is enabled or disabled.
+    dynamicRouting :: Prelude.Maybe DynamicRoutingValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayPeeringAttachmentRequestOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dynamicRouting', 'createTransitGatewayPeeringAttachmentRequestOptions_dynamicRouting' - Indicates whether dynamic routing is enabled or disabled.
+newCreateTransitGatewayPeeringAttachmentRequestOptions ::
+  CreateTransitGatewayPeeringAttachmentRequestOptions
+newCreateTransitGatewayPeeringAttachmentRequestOptions =
+  CreateTransitGatewayPeeringAttachmentRequestOptions'
+    { dynamicRouting =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether dynamic routing is enabled or disabled.
+createTransitGatewayPeeringAttachmentRequestOptions_dynamicRouting :: Lens.Lens' CreateTransitGatewayPeeringAttachmentRequestOptions (Prelude.Maybe DynamicRoutingValue)
+createTransitGatewayPeeringAttachmentRequestOptions_dynamicRouting = Lens.lens (\CreateTransitGatewayPeeringAttachmentRequestOptions' {dynamicRouting} -> dynamicRouting) (\s@CreateTransitGatewayPeeringAttachmentRequestOptions' {} a -> s {dynamicRouting = a} :: CreateTransitGatewayPeeringAttachmentRequestOptions)
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayPeeringAttachmentRequestOptions
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayPeeringAttachmentRequestOptions' {..} =
+      _salt `Prelude.hashWithSalt` dynamicRouting
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayPeeringAttachmentRequestOptions
+  where
+  rnf
+    CreateTransitGatewayPeeringAttachmentRequestOptions' {..} =
+      Prelude.rnf dynamicRouting
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayPeeringAttachmentRequestOptions
+  where
+  toQuery
+    CreateTransitGatewayPeeringAttachmentRequestOptions' {..} =
+      Prelude.mconcat
+        ["DynamicRouting" Data.=: dynamicRouting]
diff --git a/gen/Amazonka/EC2/Types/CreateTransitGatewayVpcAttachmentRequestOptions.hs b/gen/Amazonka/EC2/Types/CreateTransitGatewayVpcAttachmentRequestOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateTransitGatewayVpcAttachmentRequestOptions.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateTransitGatewayVpcAttachmentRequestOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateTransitGatewayVpcAttachmentRequestOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ApplianceModeSupportValue
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.Ipv6SupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for a VPC attachment.
+--
+-- /See:/ 'newCreateTransitGatewayVpcAttachmentRequestOptions' smart constructor.
+data CreateTransitGatewayVpcAttachmentRequestOptions = CreateTransitGatewayVpcAttachmentRequestOptions'
+  { -- | Enable or disable support for appliance mode. If enabled, a traffic flow
+    -- between a source and destination uses the same Availability Zone for the
+    -- VPC attachment for the lifetime of that flow. The default is @disable@.
+    applianceModeSupport :: Prelude.Maybe ApplianceModeSupportValue,
+    -- | Enable or disable DNS support. The default is @enable@.
+    dnsSupport :: Prelude.Maybe DnsSupportValue,
+    -- | Enable or disable IPv6 support. The default is @disable@.
+    ipv6Support :: Prelude.Maybe Ipv6SupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTransitGatewayVpcAttachmentRequestOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applianceModeSupport', 'createTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport' - Enable or disable support for appliance mode. If enabled, a traffic flow
+-- between a source and destination uses the same Availability Zone for the
+-- VPC attachment for the lifetime of that flow. The default is @disable@.
+--
+-- 'dnsSupport', 'createTransitGatewayVpcAttachmentRequestOptions_dnsSupport' - Enable or disable DNS support. The default is @enable@.
+--
+-- 'ipv6Support', 'createTransitGatewayVpcAttachmentRequestOptions_ipv6Support' - Enable or disable IPv6 support. The default is @disable@.
+newCreateTransitGatewayVpcAttachmentRequestOptions ::
+  CreateTransitGatewayVpcAttachmentRequestOptions
+newCreateTransitGatewayVpcAttachmentRequestOptions =
+  CreateTransitGatewayVpcAttachmentRequestOptions'
+    { applianceModeSupport =
+        Prelude.Nothing,
+      dnsSupport =
+        Prelude.Nothing,
+      ipv6Support =
+        Prelude.Nothing
+    }
+
+-- | Enable or disable support for appliance mode. If enabled, a traffic flow
+-- between a source and destination uses the same Availability Zone for the
+-- VPC attachment for the lifetime of that flow. The default is @disable@.
+createTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport :: Lens.Lens' CreateTransitGatewayVpcAttachmentRequestOptions (Prelude.Maybe ApplianceModeSupportValue)
+createTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport = Lens.lens (\CreateTransitGatewayVpcAttachmentRequestOptions' {applianceModeSupport} -> applianceModeSupport) (\s@CreateTransitGatewayVpcAttachmentRequestOptions' {} a -> s {applianceModeSupport = a} :: CreateTransitGatewayVpcAttachmentRequestOptions)
+
+-- | Enable or disable DNS support. The default is @enable@.
+createTransitGatewayVpcAttachmentRequestOptions_dnsSupport :: Lens.Lens' CreateTransitGatewayVpcAttachmentRequestOptions (Prelude.Maybe DnsSupportValue)
+createTransitGatewayVpcAttachmentRequestOptions_dnsSupport = Lens.lens (\CreateTransitGatewayVpcAttachmentRequestOptions' {dnsSupport} -> dnsSupport) (\s@CreateTransitGatewayVpcAttachmentRequestOptions' {} a -> s {dnsSupport = a} :: CreateTransitGatewayVpcAttachmentRequestOptions)
+
+-- | Enable or disable IPv6 support. The default is @disable@.
+createTransitGatewayVpcAttachmentRequestOptions_ipv6Support :: Lens.Lens' CreateTransitGatewayVpcAttachmentRequestOptions (Prelude.Maybe Ipv6SupportValue)
+createTransitGatewayVpcAttachmentRequestOptions_ipv6Support = Lens.lens (\CreateTransitGatewayVpcAttachmentRequestOptions' {ipv6Support} -> ipv6Support) (\s@CreateTransitGatewayVpcAttachmentRequestOptions' {} a -> s {ipv6Support = a} :: CreateTransitGatewayVpcAttachmentRequestOptions)
+
+instance
+  Prelude.Hashable
+    CreateTransitGatewayVpcAttachmentRequestOptions
+  where
+  hashWithSalt
+    _salt
+    CreateTransitGatewayVpcAttachmentRequestOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` applianceModeSupport
+        `Prelude.hashWithSalt` dnsSupport
+        `Prelude.hashWithSalt` ipv6Support
+
+instance
+  Prelude.NFData
+    CreateTransitGatewayVpcAttachmentRequestOptions
+  where
+  rnf
+    CreateTransitGatewayVpcAttachmentRequestOptions' {..} =
+      Prelude.rnf applianceModeSupport
+        `Prelude.seq` Prelude.rnf dnsSupport
+        `Prelude.seq` Prelude.rnf ipv6Support
+
+instance
+  Data.ToQuery
+    CreateTransitGatewayVpcAttachmentRequestOptions
+  where
+  toQuery
+    CreateTransitGatewayVpcAttachmentRequestOptions' {..} =
+      Prelude.mconcat
+        [ "ApplianceModeSupport" Data.=: applianceModeSupport,
+          "DnsSupport" Data.=: dnsSupport,
+          "Ipv6Support" Data.=: ipv6Support
+        ]
diff --git a/gen/Amazonka/EC2/Types/CreateVerifiedAccessEndpointEniOptions.hs b/gen/Amazonka/EC2/Types/CreateVerifiedAccessEndpointEniOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateVerifiedAccessEndpointEniOptions.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateVerifiedAccessEndpointEniOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateVerifiedAccessEndpointEniOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for a network interface-type endpoint.
+--
+-- /See:/ 'newCreateVerifiedAccessEndpointEniOptions' smart constructor.
+data CreateVerifiedAccessEndpointEniOptions = CreateVerifiedAccessEndpointEniOptions'
+  { -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The IP port number.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The IP protocol.
+    protocol :: Prelude.Maybe VerifiedAccessEndpointProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessEndpointEniOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInterfaceId', 'createVerifiedAccessEndpointEniOptions_networkInterfaceId' - The ID of the network interface.
+--
+-- 'port', 'createVerifiedAccessEndpointEniOptions_port' - The IP port number.
+--
+-- 'protocol', 'createVerifiedAccessEndpointEniOptions_protocol' - The IP protocol.
+newCreateVerifiedAccessEndpointEniOptions ::
+  CreateVerifiedAccessEndpointEniOptions
+newCreateVerifiedAccessEndpointEniOptions =
+  CreateVerifiedAccessEndpointEniOptions'
+    { networkInterfaceId =
+        Prelude.Nothing,
+      port = Prelude.Nothing,
+      protocol = Prelude.Nothing
+    }
+
+-- | The ID of the network interface.
+createVerifiedAccessEndpointEniOptions_networkInterfaceId :: Lens.Lens' CreateVerifiedAccessEndpointEniOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessEndpointEniOptions_networkInterfaceId = Lens.lens (\CreateVerifiedAccessEndpointEniOptions' {networkInterfaceId} -> networkInterfaceId) (\s@CreateVerifiedAccessEndpointEniOptions' {} a -> s {networkInterfaceId = a} :: CreateVerifiedAccessEndpointEniOptions)
+
+-- | The IP port number.
+createVerifiedAccessEndpointEniOptions_port :: Lens.Lens' CreateVerifiedAccessEndpointEniOptions (Prelude.Maybe Prelude.Natural)
+createVerifiedAccessEndpointEniOptions_port = Lens.lens (\CreateVerifiedAccessEndpointEniOptions' {port} -> port) (\s@CreateVerifiedAccessEndpointEniOptions' {} a -> s {port = a} :: CreateVerifiedAccessEndpointEniOptions)
+
+-- | The IP protocol.
+createVerifiedAccessEndpointEniOptions_protocol :: Lens.Lens' CreateVerifiedAccessEndpointEniOptions (Prelude.Maybe VerifiedAccessEndpointProtocol)
+createVerifiedAccessEndpointEniOptions_protocol = Lens.lens (\CreateVerifiedAccessEndpointEniOptions' {protocol} -> protocol) (\s@CreateVerifiedAccessEndpointEniOptions' {} a -> s {protocol = a} :: CreateVerifiedAccessEndpointEniOptions)
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessEndpointEniOptions
+  where
+  hashWithSalt
+    _salt
+    CreateVerifiedAccessEndpointEniOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` protocol
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessEndpointEniOptions
+  where
+  rnf CreateVerifiedAccessEndpointEniOptions' {..} =
+    Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf protocol
+
+instance
+  Data.ToQuery
+    CreateVerifiedAccessEndpointEniOptions
+  where
+  toQuery CreateVerifiedAccessEndpointEniOptions' {..} =
+    Prelude.mconcat
+      [ "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "Port" Data.=: port,
+        "Protocol" Data.=: protocol
+      ]
diff --git a/gen/Amazonka/EC2/Types/CreateVerifiedAccessEndpointLoadBalancerOptions.hs b/gen/Amazonka/EC2/Types/CreateVerifiedAccessEndpointLoadBalancerOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateVerifiedAccessEndpointLoadBalancerOptions.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateVerifiedAccessEndpointLoadBalancerOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateVerifiedAccessEndpointLoadBalancerOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load balancer when creating an Amazon Web Services Verified
+-- Access endpoint using the @load-balancer@ type.
+--
+-- /See:/ 'newCreateVerifiedAccessEndpointLoadBalancerOptions' smart constructor.
+data CreateVerifiedAccessEndpointLoadBalancerOptions = CreateVerifiedAccessEndpointLoadBalancerOptions'
+  { -- | The ARN of the load balancer.
+    loadBalancerArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP port number.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The IP protocol.
+    protocol :: Prelude.Maybe VerifiedAccessEndpointProtocol,
+    -- | The IDs of the subnets.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessEndpointLoadBalancerOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'loadBalancerArn', 'createVerifiedAccessEndpointLoadBalancerOptions_loadBalancerArn' - The ARN of the load balancer.
+--
+-- 'port', 'createVerifiedAccessEndpointLoadBalancerOptions_port' - The IP port number.
+--
+-- 'protocol', 'createVerifiedAccessEndpointLoadBalancerOptions_protocol' - The IP protocol.
+--
+-- 'subnetIds', 'createVerifiedAccessEndpointLoadBalancerOptions_subnetIds' - The IDs of the subnets.
+newCreateVerifiedAccessEndpointLoadBalancerOptions ::
+  CreateVerifiedAccessEndpointLoadBalancerOptions
+newCreateVerifiedAccessEndpointLoadBalancerOptions =
+  CreateVerifiedAccessEndpointLoadBalancerOptions'
+    { loadBalancerArn =
+        Prelude.Nothing,
+      port = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      subnetIds =
+        Prelude.Nothing
+    }
+
+-- | The ARN of the load balancer.
+createVerifiedAccessEndpointLoadBalancerOptions_loadBalancerArn :: Lens.Lens' CreateVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessEndpointLoadBalancerOptions_loadBalancerArn = Lens.lens (\CreateVerifiedAccessEndpointLoadBalancerOptions' {loadBalancerArn} -> loadBalancerArn) (\s@CreateVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {loadBalancerArn = a} :: CreateVerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IP port number.
+createVerifiedAccessEndpointLoadBalancerOptions_port :: Lens.Lens' CreateVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe Prelude.Natural)
+createVerifiedAccessEndpointLoadBalancerOptions_port = Lens.lens (\CreateVerifiedAccessEndpointLoadBalancerOptions' {port} -> port) (\s@CreateVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {port = a} :: CreateVerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IP protocol.
+createVerifiedAccessEndpointLoadBalancerOptions_protocol :: Lens.Lens' CreateVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe VerifiedAccessEndpointProtocol)
+createVerifiedAccessEndpointLoadBalancerOptions_protocol = Lens.lens (\CreateVerifiedAccessEndpointLoadBalancerOptions' {protocol} -> protocol) (\s@CreateVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {protocol = a} :: CreateVerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IDs of the subnets.
+createVerifiedAccessEndpointLoadBalancerOptions_subnetIds :: Lens.Lens' CreateVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe [Prelude.Text])
+createVerifiedAccessEndpointLoadBalancerOptions_subnetIds = Lens.lens (\CreateVerifiedAccessEndpointLoadBalancerOptions' {subnetIds} -> subnetIds) (\s@CreateVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {subnetIds = a} :: CreateVerifiedAccessEndpointLoadBalancerOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessEndpointLoadBalancerOptions
+  where
+  hashWithSalt
+    _salt
+    CreateVerifiedAccessEndpointLoadBalancerOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` loadBalancerArn
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` protocol
+        `Prelude.hashWithSalt` subnetIds
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessEndpointLoadBalancerOptions
+  where
+  rnf
+    CreateVerifiedAccessEndpointLoadBalancerOptions' {..} =
+      Prelude.rnf loadBalancerArn
+        `Prelude.seq` Prelude.rnf port
+        `Prelude.seq` Prelude.rnf protocol
+        `Prelude.seq` Prelude.rnf subnetIds
+
+instance
+  Data.ToQuery
+    CreateVerifiedAccessEndpointLoadBalancerOptions
+  where
+  toQuery
+    CreateVerifiedAccessEndpointLoadBalancerOptions' {..} =
+      Prelude.mconcat
+        [ "LoadBalancerArn" Data.=: loadBalancerArn,
+          "Port" Data.=: port,
+          "Protocol" Data.=: protocol,
+          Data.toQuery
+            (Data.toQueryList "SubnetId" Prelude.<$> subnetIds)
+        ]
diff --git a/gen/Amazonka/EC2/Types/CreateVerifiedAccessTrustProviderDeviceOptions.hs b/gen/Amazonka/EC2/Types/CreateVerifiedAccessTrustProviderDeviceOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateVerifiedAccessTrustProviderDeviceOptions.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderDeviceOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderDeviceOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for a device-identity type trust provider.
+--
+-- /See:/ 'newCreateVerifiedAccessTrustProviderDeviceOptions' smart constructor.
+data CreateVerifiedAccessTrustProviderDeviceOptions = CreateVerifiedAccessTrustProviderDeviceOptions'
+  { -- | The ID of the tenant application with the device-identity provider.
+    tenantId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessTrustProviderDeviceOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tenantId', 'createVerifiedAccessTrustProviderDeviceOptions_tenantId' - The ID of the tenant application with the device-identity provider.
+newCreateVerifiedAccessTrustProviderDeviceOptions ::
+  CreateVerifiedAccessTrustProviderDeviceOptions
+newCreateVerifiedAccessTrustProviderDeviceOptions =
+  CreateVerifiedAccessTrustProviderDeviceOptions'
+    { tenantId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the tenant application with the device-identity provider.
+createVerifiedAccessTrustProviderDeviceOptions_tenantId :: Lens.Lens' CreateVerifiedAccessTrustProviderDeviceOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderDeviceOptions_tenantId = Lens.lens (\CreateVerifiedAccessTrustProviderDeviceOptions' {tenantId} -> tenantId) (\s@CreateVerifiedAccessTrustProviderDeviceOptions' {} a -> s {tenantId = a} :: CreateVerifiedAccessTrustProviderDeviceOptions)
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessTrustProviderDeviceOptions
+  where
+  hashWithSalt
+    _salt
+    CreateVerifiedAccessTrustProviderDeviceOptions' {..} =
+      _salt `Prelude.hashWithSalt` tenantId
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessTrustProviderDeviceOptions
+  where
+  rnf
+    CreateVerifiedAccessTrustProviderDeviceOptions' {..} =
+      Prelude.rnf tenantId
+
+instance
+  Data.ToQuery
+    CreateVerifiedAccessTrustProviderDeviceOptions
+  where
+  toQuery
+    CreateVerifiedAccessTrustProviderDeviceOptions' {..} =
+      Prelude.mconcat ["TenantId" Data.=: tenantId]
diff --git a/gen/Amazonka/EC2/Types/CreateVerifiedAccessTrustProviderOidcOptions.hs b/gen/Amazonka/EC2/Types/CreateVerifiedAccessTrustProviderOidcOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateVerifiedAccessTrustProviderOidcOptions.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderOidcOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateVerifiedAccessTrustProviderOidcOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for an OIDC-based, user-identity type trust provider.
+--
+-- /See:/ 'newCreateVerifiedAccessTrustProviderOidcOptions' smart constructor.
+data CreateVerifiedAccessTrustProviderOidcOptions = CreateVerifiedAccessTrustProviderOidcOptions'
+  { -- | The OIDC authorization endpoint.
+    authorizationEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The client identifier.
+    clientId :: Prelude.Maybe Prelude.Text,
+    -- | The client secret.
+    clientSecret :: Prelude.Maybe Prelude.Text,
+    -- | The OIDC issuer.
+    issuer :: Prelude.Maybe Prelude.Text,
+    -- | OpenID Connect (OIDC) scopes are used by an application during
+    -- authentication to authorize access to a user\'s details. Each scope
+    -- returns a specific set of user attributes.
+    scope :: Prelude.Maybe Prelude.Text,
+    -- | The OIDC token endpoint.
+    tokenEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The OIDC user info endpoint.
+    userInfoEndpoint :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVerifiedAccessTrustProviderOidcOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizationEndpoint', 'createVerifiedAccessTrustProviderOidcOptions_authorizationEndpoint' - The OIDC authorization endpoint.
+--
+-- 'clientId', 'createVerifiedAccessTrustProviderOidcOptions_clientId' - The client identifier.
+--
+-- 'clientSecret', 'createVerifiedAccessTrustProviderOidcOptions_clientSecret' - The client secret.
+--
+-- 'issuer', 'createVerifiedAccessTrustProviderOidcOptions_issuer' - The OIDC issuer.
+--
+-- 'scope', 'createVerifiedAccessTrustProviderOidcOptions_scope' - OpenID Connect (OIDC) scopes are used by an application during
+-- authentication to authorize access to a user\'s details. Each scope
+-- returns a specific set of user attributes.
+--
+-- 'tokenEndpoint', 'createVerifiedAccessTrustProviderOidcOptions_tokenEndpoint' - The OIDC token endpoint.
+--
+-- 'userInfoEndpoint', 'createVerifiedAccessTrustProviderOidcOptions_userInfoEndpoint' - The OIDC user info endpoint.
+newCreateVerifiedAccessTrustProviderOidcOptions ::
+  CreateVerifiedAccessTrustProviderOidcOptions
+newCreateVerifiedAccessTrustProviderOidcOptions =
+  CreateVerifiedAccessTrustProviderOidcOptions'
+    { authorizationEndpoint =
+        Prelude.Nothing,
+      clientId = Prelude.Nothing,
+      clientSecret =
+        Prelude.Nothing,
+      issuer = Prelude.Nothing,
+      scope = Prelude.Nothing,
+      tokenEndpoint =
+        Prelude.Nothing,
+      userInfoEndpoint =
+        Prelude.Nothing
+    }
+
+-- | The OIDC authorization endpoint.
+createVerifiedAccessTrustProviderOidcOptions_authorizationEndpoint :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_authorizationEndpoint = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {authorizationEndpoint} -> authorizationEndpoint) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {authorizationEndpoint = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+-- | The client identifier.
+createVerifiedAccessTrustProviderOidcOptions_clientId :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_clientId = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {clientId} -> clientId) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {clientId = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+-- | The client secret.
+createVerifiedAccessTrustProviderOidcOptions_clientSecret :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_clientSecret = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {clientSecret} -> clientSecret) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {clientSecret = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+-- | The OIDC issuer.
+createVerifiedAccessTrustProviderOidcOptions_issuer :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_issuer = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {issuer} -> issuer) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {issuer = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+-- | OpenID Connect (OIDC) scopes are used by an application during
+-- authentication to authorize access to a user\'s details. Each scope
+-- returns a specific set of user attributes.
+createVerifiedAccessTrustProviderOidcOptions_scope :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_scope = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {scope} -> scope) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {scope = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+-- | The OIDC token endpoint.
+createVerifiedAccessTrustProviderOidcOptions_tokenEndpoint :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_tokenEndpoint = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {tokenEndpoint} -> tokenEndpoint) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {tokenEndpoint = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+-- | The OIDC user info endpoint.
+createVerifiedAccessTrustProviderOidcOptions_userInfoEndpoint :: Lens.Lens' CreateVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+createVerifiedAccessTrustProviderOidcOptions_userInfoEndpoint = Lens.lens (\CreateVerifiedAccessTrustProviderOidcOptions' {userInfoEndpoint} -> userInfoEndpoint) (\s@CreateVerifiedAccessTrustProviderOidcOptions' {} a -> s {userInfoEndpoint = a} :: CreateVerifiedAccessTrustProviderOidcOptions)
+
+instance
+  Prelude.Hashable
+    CreateVerifiedAccessTrustProviderOidcOptions
+  where
+  hashWithSalt
+    _salt
+    CreateVerifiedAccessTrustProviderOidcOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` authorizationEndpoint
+        `Prelude.hashWithSalt` clientId
+        `Prelude.hashWithSalt` clientSecret
+        `Prelude.hashWithSalt` issuer
+        `Prelude.hashWithSalt` scope
+        `Prelude.hashWithSalt` tokenEndpoint
+        `Prelude.hashWithSalt` userInfoEndpoint
+
+instance
+  Prelude.NFData
+    CreateVerifiedAccessTrustProviderOidcOptions
+  where
+  rnf CreateVerifiedAccessTrustProviderOidcOptions' {..} =
+    Prelude.rnf authorizationEndpoint
+      `Prelude.seq` Prelude.rnf clientId
+      `Prelude.seq` Prelude.rnf clientSecret
+      `Prelude.seq` Prelude.rnf issuer
+      `Prelude.seq` Prelude.rnf scope
+      `Prelude.seq` Prelude.rnf tokenEndpoint
+      `Prelude.seq` Prelude.rnf userInfoEndpoint
+
+instance
+  Data.ToQuery
+    CreateVerifiedAccessTrustProviderOidcOptions
+  where
+  toQuery
+    CreateVerifiedAccessTrustProviderOidcOptions' {..} =
+      Prelude.mconcat
+        [ "AuthorizationEndpoint"
+            Data.=: authorizationEndpoint,
+          "ClientId" Data.=: clientId,
+          "ClientSecret" Data.=: clientSecret,
+          "Issuer" Data.=: issuer,
+          "Scope" Data.=: scope,
+          "TokenEndpoint" Data.=: tokenEndpoint,
+          "UserInfoEndpoint" Data.=: userInfoEndpoint
+        ]
diff --git a/gen/Amazonka/EC2/Types/CreateVolumePermission.hs b/gen/Amazonka/EC2/Types/CreateVolumePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateVolumePermission.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateVolumePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateVolumePermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PermissionGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the user or group to be added or removed from the list of
+-- create volume permissions for a volume.
+--
+-- /See:/ 'newCreateVolumePermission' smart constructor.
+data CreateVolumePermission = CreateVolumePermission'
+  { -- | The group to be added or removed. The possible value is @all@.
+    group' :: Prelude.Maybe PermissionGroup,
+    -- | The ID of the Amazon Web Services account to be added or removed.
+    userId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVolumePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'group'', 'createVolumePermission_group' - The group to be added or removed. The possible value is @all@.
+--
+-- 'userId', 'createVolumePermission_userId' - The ID of the Amazon Web Services account to be added or removed.
+newCreateVolumePermission ::
+  CreateVolumePermission
+newCreateVolumePermission =
+  CreateVolumePermission'
+    { group' = Prelude.Nothing,
+      userId = Prelude.Nothing
+    }
+
+-- | The group to be added or removed. The possible value is @all@.
+createVolumePermission_group :: Lens.Lens' CreateVolumePermission (Prelude.Maybe PermissionGroup)
+createVolumePermission_group = Lens.lens (\CreateVolumePermission' {group'} -> group') (\s@CreateVolumePermission' {} a -> s {group' = a} :: CreateVolumePermission)
+
+-- | The ID of the Amazon Web Services account to be added or removed.
+createVolumePermission_userId :: Lens.Lens' CreateVolumePermission (Prelude.Maybe Prelude.Text)
+createVolumePermission_userId = Lens.lens (\CreateVolumePermission' {userId} -> userId) (\s@CreateVolumePermission' {} a -> s {userId = a} :: CreateVolumePermission)
+
+instance Data.FromXML CreateVolumePermission where
+  parseXML x =
+    CreateVolumePermission'
+      Prelude.<$> (x Data..@? "group")
+      Prelude.<*> (x Data..@? "userId")
+
+instance Prelude.Hashable CreateVolumePermission where
+  hashWithSalt _salt CreateVolumePermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` group'
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData CreateVolumePermission where
+  rnf CreateVolumePermission' {..} =
+    Prelude.rnf group' `Prelude.seq` Prelude.rnf userId
+
+instance Data.ToQuery CreateVolumePermission where
+  toQuery CreateVolumePermission' {..} =
+    Prelude.mconcat
+      ["Group" Data.=: group', "UserId" Data.=: userId]
diff --git a/gen/Amazonka/EC2/Types/CreateVolumePermissionModifications.hs b/gen/Amazonka/EC2/Types/CreateVolumePermissionModifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreateVolumePermissionModifications.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreateVolumePermissionModifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreateVolumePermissionModifications where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CreateVolumePermission
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes modifications to the list of create volume permissions for a
+-- volume.
+--
+-- /See:/ 'newCreateVolumePermissionModifications' smart constructor.
+data CreateVolumePermissionModifications = CreateVolumePermissionModifications'
+  { -- | Adds the specified Amazon Web Services account ID or group to the list.
+    add :: Prelude.Maybe [CreateVolumePermission],
+    -- | Removes the specified Amazon Web Services account ID or group from the
+    -- list.
+    remove :: Prelude.Maybe [CreateVolumePermission]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateVolumePermissionModifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'add', 'createVolumePermissionModifications_add' - Adds the specified Amazon Web Services account ID or group to the list.
+--
+-- 'remove', 'createVolumePermissionModifications_remove' - Removes the specified Amazon Web Services account ID or group from the
+-- list.
+newCreateVolumePermissionModifications ::
+  CreateVolumePermissionModifications
+newCreateVolumePermissionModifications =
+  CreateVolumePermissionModifications'
+    { add =
+        Prelude.Nothing,
+      remove = Prelude.Nothing
+    }
+
+-- | Adds the specified Amazon Web Services account ID or group to the list.
+createVolumePermissionModifications_add :: Lens.Lens' CreateVolumePermissionModifications (Prelude.Maybe [CreateVolumePermission])
+createVolumePermissionModifications_add = Lens.lens (\CreateVolumePermissionModifications' {add} -> add) (\s@CreateVolumePermissionModifications' {} a -> s {add = a} :: CreateVolumePermissionModifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | Removes the specified Amazon Web Services account ID or group from the
+-- list.
+createVolumePermissionModifications_remove :: Lens.Lens' CreateVolumePermissionModifications (Prelude.Maybe [CreateVolumePermission])
+createVolumePermissionModifications_remove = Lens.lens (\CreateVolumePermissionModifications' {remove} -> remove) (\s@CreateVolumePermissionModifications' {} a -> s {remove = a} :: CreateVolumePermissionModifications) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    CreateVolumePermissionModifications
+  where
+  hashWithSalt
+    _salt
+    CreateVolumePermissionModifications' {..} =
+      _salt
+        `Prelude.hashWithSalt` add
+        `Prelude.hashWithSalt` remove
+
+instance
+  Prelude.NFData
+    CreateVolumePermissionModifications
+  where
+  rnf CreateVolumePermissionModifications' {..} =
+    Prelude.rnf add `Prelude.seq` Prelude.rnf remove
+
+instance
+  Data.ToQuery
+    CreateVolumePermissionModifications
+  where
+  toQuery CreateVolumePermissionModifications' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          (Data.toQueryList "Add" Prelude.<$> add),
+        Data.toQuery
+          (Data.toQueryList "Remove" Prelude.<$> remove)
+      ]
diff --git a/gen/Amazonka/EC2/Types/CreditSpecification.hs b/gen/Amazonka/EC2/Types/CreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreditSpecification.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreditSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreditSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the credit option for CPU usage of a T instance.
+--
+-- /See:/ 'newCreditSpecification' smart constructor.
+data CreditSpecification = CreditSpecification'
+  { -- | The credit option for CPU usage of a T instance.
+    --
+    -- Valid values: @standard@ | @unlimited@
+    cpuCredits :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreditSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpuCredits', 'creditSpecification_cpuCredits' - The credit option for CPU usage of a T instance.
+--
+-- Valid values: @standard@ | @unlimited@
+newCreditSpecification ::
+  CreditSpecification
+newCreditSpecification =
+  CreditSpecification' {cpuCredits = Prelude.Nothing}
+
+-- | The credit option for CPU usage of a T instance.
+--
+-- Valid values: @standard@ | @unlimited@
+creditSpecification_cpuCredits :: Lens.Lens' CreditSpecification (Prelude.Maybe Prelude.Text)
+creditSpecification_cpuCredits = Lens.lens (\CreditSpecification' {cpuCredits} -> cpuCredits) (\s@CreditSpecification' {} a -> s {cpuCredits = a} :: CreditSpecification)
+
+instance Data.FromXML CreditSpecification where
+  parseXML x =
+    CreditSpecification'
+      Prelude.<$> (x Data..@? "cpuCredits")
+
+instance Prelude.Hashable CreditSpecification where
+  hashWithSalt _salt CreditSpecification' {..} =
+    _salt `Prelude.hashWithSalt` cpuCredits
+
+instance Prelude.NFData CreditSpecification where
+  rnf CreditSpecification' {..} = Prelude.rnf cpuCredits
diff --git a/gen/Amazonka/EC2/Types/CreditSpecificationRequest.hs b/gen/Amazonka/EC2/Types/CreditSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CreditSpecificationRequest.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CreditSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CreditSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The credit option for CPU usage of a T instance.
+--
+-- /See:/ 'newCreditSpecificationRequest' smart constructor.
+data CreditSpecificationRequest = CreditSpecificationRequest'
+  { -- | The credit option for CPU usage of a T instance.
+    --
+    -- Valid values: @standard@ | @unlimited@
+    cpuCredits :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreditSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpuCredits', 'creditSpecificationRequest_cpuCredits' - The credit option for CPU usage of a T instance.
+--
+-- Valid values: @standard@ | @unlimited@
+newCreditSpecificationRequest ::
+  -- | 'cpuCredits'
+  Prelude.Text ->
+  CreditSpecificationRequest
+newCreditSpecificationRequest pCpuCredits_ =
+  CreditSpecificationRequest'
+    { cpuCredits =
+        pCpuCredits_
+    }
+
+-- | The credit option for CPU usage of a T instance.
+--
+-- Valid values: @standard@ | @unlimited@
+creditSpecificationRequest_cpuCredits :: Lens.Lens' CreditSpecificationRequest Prelude.Text
+creditSpecificationRequest_cpuCredits = Lens.lens (\CreditSpecificationRequest' {cpuCredits} -> cpuCredits) (\s@CreditSpecificationRequest' {} a -> s {cpuCredits = a} :: CreditSpecificationRequest)
+
+instance Prelude.Hashable CreditSpecificationRequest where
+  hashWithSalt _salt CreditSpecificationRequest' {..} =
+    _salt `Prelude.hashWithSalt` cpuCredits
+
+instance Prelude.NFData CreditSpecificationRequest where
+  rnf CreditSpecificationRequest' {..} =
+    Prelude.rnf cpuCredits
+
+instance Data.ToQuery CreditSpecificationRequest where
+  toQuery CreditSpecificationRequest' {..} =
+    Prelude.mconcat ["CpuCredits" Data.=: cpuCredits]
diff --git a/gen/Amazonka/EC2/Types/CurrencyCodeValues.hs b/gen/Amazonka/EC2/Types/CurrencyCodeValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CurrencyCodeValues.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CurrencyCodeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CurrencyCodeValues
+  ( CurrencyCodeValues
+      ( ..,
+        CurrencyCodeValues_USD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype CurrencyCodeValues = CurrencyCodeValues'
+  { fromCurrencyCodeValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern CurrencyCodeValues_USD :: CurrencyCodeValues
+pattern CurrencyCodeValues_USD = CurrencyCodeValues' "USD"
+
+{-# COMPLETE
+  CurrencyCodeValues_USD,
+  CurrencyCodeValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/CustomerGateway.hs b/gen/Amazonka/EC2/Types/CustomerGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/CustomerGateway.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.CustomerGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.CustomerGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a customer gateway.
+--
+-- /See:/ 'newCustomerGateway' smart constructor.
+data CustomerGateway = CustomerGateway'
+  { -- | The Amazon Resource Name (ARN) for the customer gateway certificate.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of customer gateway device.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the customer gateway.
+    tags :: Prelude.Maybe [Tag],
+    -- | The customer gateway\'s Border Gateway Protocol (BGP) Autonomous System
+    -- Number (ASN).
+    bgpAsn :: Prelude.Text,
+    -- | The ID of the customer gateway.
+    customerGatewayId :: Prelude.Text,
+    -- | The IP address of the customer gateway device\'s outside interface.
+    ipAddress :: Prelude.Text,
+    -- | The current state of the customer gateway
+    -- (@pending | available | deleting | deleted@).
+    state :: Prelude.Text,
+    -- | The type of VPN connection the customer gateway supports (@ipsec.1@).
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CustomerGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateArn', 'customerGateway_certificateArn' - The Amazon Resource Name (ARN) for the customer gateway certificate.
+--
+-- 'deviceName', 'customerGateway_deviceName' - The name of customer gateway device.
+--
+-- 'tags', 'customerGateway_tags' - Any tags assigned to the customer gateway.
+--
+-- 'bgpAsn', 'customerGateway_bgpAsn' - The customer gateway\'s Border Gateway Protocol (BGP) Autonomous System
+-- Number (ASN).
+--
+-- 'customerGatewayId', 'customerGateway_customerGatewayId' - The ID of the customer gateway.
+--
+-- 'ipAddress', 'customerGateway_ipAddress' - The IP address of the customer gateway device\'s outside interface.
+--
+-- 'state', 'customerGateway_state' - The current state of the customer gateway
+-- (@pending | available | deleting | deleted@).
+--
+-- 'type'', 'customerGateway_type' - The type of VPN connection the customer gateway supports (@ipsec.1@).
+newCustomerGateway ::
+  -- | 'bgpAsn'
+  Prelude.Text ->
+  -- | 'customerGatewayId'
+  Prelude.Text ->
+  -- | 'ipAddress'
+  Prelude.Text ->
+  -- | 'state'
+  Prelude.Text ->
+  -- | 'type''
+  Prelude.Text ->
+  CustomerGateway
+newCustomerGateway
+  pBgpAsn_
+  pCustomerGatewayId_
+  pIpAddress_
+  pState_
+  pType_ =
+    CustomerGateway'
+      { certificateArn = Prelude.Nothing,
+        deviceName = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        bgpAsn = pBgpAsn_,
+        customerGatewayId = pCustomerGatewayId_,
+        ipAddress = pIpAddress_,
+        state = pState_,
+        type' = pType_
+      }
+
+-- | The Amazon Resource Name (ARN) for the customer gateway certificate.
+customerGateway_certificateArn :: Lens.Lens' CustomerGateway (Prelude.Maybe Prelude.Text)
+customerGateway_certificateArn = Lens.lens (\CustomerGateway' {certificateArn} -> certificateArn) (\s@CustomerGateway' {} a -> s {certificateArn = a} :: CustomerGateway)
+
+-- | The name of customer gateway device.
+customerGateway_deviceName :: Lens.Lens' CustomerGateway (Prelude.Maybe Prelude.Text)
+customerGateway_deviceName = Lens.lens (\CustomerGateway' {deviceName} -> deviceName) (\s@CustomerGateway' {} a -> s {deviceName = a} :: CustomerGateway)
+
+-- | Any tags assigned to the customer gateway.
+customerGateway_tags :: Lens.Lens' CustomerGateway (Prelude.Maybe [Tag])
+customerGateway_tags = Lens.lens (\CustomerGateway' {tags} -> tags) (\s@CustomerGateway' {} a -> s {tags = a} :: CustomerGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The customer gateway\'s Border Gateway Protocol (BGP) Autonomous System
+-- Number (ASN).
+customerGateway_bgpAsn :: Lens.Lens' CustomerGateway Prelude.Text
+customerGateway_bgpAsn = Lens.lens (\CustomerGateway' {bgpAsn} -> bgpAsn) (\s@CustomerGateway' {} a -> s {bgpAsn = a} :: CustomerGateway)
+
+-- | The ID of the customer gateway.
+customerGateway_customerGatewayId :: Lens.Lens' CustomerGateway Prelude.Text
+customerGateway_customerGatewayId = Lens.lens (\CustomerGateway' {customerGatewayId} -> customerGatewayId) (\s@CustomerGateway' {} a -> s {customerGatewayId = a} :: CustomerGateway)
+
+-- | The IP address of the customer gateway device\'s outside interface.
+customerGateway_ipAddress :: Lens.Lens' CustomerGateway Prelude.Text
+customerGateway_ipAddress = Lens.lens (\CustomerGateway' {ipAddress} -> ipAddress) (\s@CustomerGateway' {} a -> s {ipAddress = a} :: CustomerGateway)
+
+-- | The current state of the customer gateway
+-- (@pending | available | deleting | deleted@).
+customerGateway_state :: Lens.Lens' CustomerGateway Prelude.Text
+customerGateway_state = Lens.lens (\CustomerGateway' {state} -> state) (\s@CustomerGateway' {} a -> s {state = a} :: CustomerGateway)
+
+-- | The type of VPN connection the customer gateway supports (@ipsec.1@).
+customerGateway_type :: Lens.Lens' CustomerGateway Prelude.Text
+customerGateway_type = Lens.lens (\CustomerGateway' {type'} -> type') (\s@CustomerGateway' {} a -> s {type' = a} :: CustomerGateway)
+
+instance Data.FromXML CustomerGateway where
+  parseXML x =
+    CustomerGateway'
+      Prelude.<$> (x Data..@? "certificateArn")
+      Prelude.<*> (x Data..@? "deviceName")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "bgpAsn")
+      Prelude.<*> (x Data..@ "customerGatewayId")
+      Prelude.<*> (x Data..@ "ipAddress")
+      Prelude.<*> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "type")
+
+instance Prelude.Hashable CustomerGateway where
+  hashWithSalt _salt CustomerGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateArn
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` bgpAsn
+      `Prelude.hashWithSalt` customerGatewayId
+      `Prelude.hashWithSalt` ipAddress
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData CustomerGateway where
+  rnf CustomerGateway' {..} =
+    Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf bgpAsn
+      `Prelude.seq` Prelude.rnf customerGatewayId
+      `Prelude.seq` Prelude.rnf ipAddress
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/DataQuery.hs b/gen/Amazonka/EC2/Types/DataQuery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DataQuery.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DataQuery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DataQuery where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MetricType
+import Amazonka.EC2.Types.PeriodType
+import Amazonka.EC2.Types.StatisticType
+import qualified Amazonka.Prelude as Prelude
+
+-- | A query used for retrieving network health data.
+--
+-- /See:/ 'newDataQuery' smart constructor.
+data DataQuery = DataQuery'
+  { -- | The Region or Availability Zone that\'s the target for the data query.
+    -- For example, @eu-north-1@.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | A user-defined ID associated with a data query that\'s returned in the
+    -- @dataResponse@ identifying the query. For example, if you set the Id to
+    -- @MyQuery01@in the query, the @dataResponse@ identifies the query as
+    -- @MyQuery01@.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The aggregation metric used for the data query. Currently only
+    -- @aggregation-latency@ is supported, indicating network latency.
+    metric :: Prelude.Maybe MetricType,
+    -- | The aggregation period used for the data query.
+    period :: Prelude.Maybe PeriodType,
+    -- | The Region or Availability Zone that\'s the source for the data query.
+    -- For example, @us-east-1@.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | Metric data aggregations over specified periods of time. The following
+    -- are the supported Infrastructure Performance statistics:
+    --
+    -- -   @p50@ - The median value of the metric aggregated over a specified
+    --     start and end time. For example, a metric of @five_minutes@ is the
+    --     median of all the data points gathered within those five minutes.
+    statistic :: Prelude.Maybe StatisticType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataQuery' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'dataQuery_destination' - The Region or Availability Zone that\'s the target for the data query.
+-- For example, @eu-north-1@.
+--
+-- 'id', 'dataQuery_id' - A user-defined ID associated with a data query that\'s returned in the
+-- @dataResponse@ identifying the query. For example, if you set the Id to
+-- @MyQuery01@in the query, the @dataResponse@ identifies the query as
+-- @MyQuery01@.
+--
+-- 'metric', 'dataQuery_metric' - The aggregation metric used for the data query. Currently only
+-- @aggregation-latency@ is supported, indicating network latency.
+--
+-- 'period', 'dataQuery_period' - The aggregation period used for the data query.
+--
+-- 'source', 'dataQuery_source' - The Region or Availability Zone that\'s the source for the data query.
+-- For example, @us-east-1@.
+--
+-- 'statistic', 'dataQuery_statistic' - Metric data aggregations over specified periods of time. The following
+-- are the supported Infrastructure Performance statistics:
+--
+-- -   @p50@ - The median value of the metric aggregated over a specified
+--     start and end time. For example, a metric of @five_minutes@ is the
+--     median of all the data points gathered within those five minutes.
+newDataQuery ::
+  DataQuery
+newDataQuery =
+  DataQuery'
+    { destination = Prelude.Nothing,
+      id = Prelude.Nothing,
+      metric = Prelude.Nothing,
+      period = Prelude.Nothing,
+      source = Prelude.Nothing,
+      statistic = Prelude.Nothing
+    }
+
+-- | The Region or Availability Zone that\'s the target for the data query.
+-- For example, @eu-north-1@.
+dataQuery_destination :: Lens.Lens' DataQuery (Prelude.Maybe Prelude.Text)
+dataQuery_destination = Lens.lens (\DataQuery' {destination} -> destination) (\s@DataQuery' {} a -> s {destination = a} :: DataQuery)
+
+-- | A user-defined ID associated with a data query that\'s returned in the
+-- @dataResponse@ identifying the query. For example, if you set the Id to
+-- @MyQuery01@in the query, the @dataResponse@ identifies the query as
+-- @MyQuery01@.
+dataQuery_id :: Lens.Lens' DataQuery (Prelude.Maybe Prelude.Text)
+dataQuery_id = Lens.lens (\DataQuery' {id} -> id) (\s@DataQuery' {} a -> s {id = a} :: DataQuery)
+
+-- | The aggregation metric used for the data query. Currently only
+-- @aggregation-latency@ is supported, indicating network latency.
+dataQuery_metric :: Lens.Lens' DataQuery (Prelude.Maybe MetricType)
+dataQuery_metric = Lens.lens (\DataQuery' {metric} -> metric) (\s@DataQuery' {} a -> s {metric = a} :: DataQuery)
+
+-- | The aggregation period used for the data query.
+dataQuery_period :: Lens.Lens' DataQuery (Prelude.Maybe PeriodType)
+dataQuery_period = Lens.lens (\DataQuery' {period} -> period) (\s@DataQuery' {} a -> s {period = a} :: DataQuery)
+
+-- | The Region or Availability Zone that\'s the source for the data query.
+-- For example, @us-east-1@.
+dataQuery_source :: Lens.Lens' DataQuery (Prelude.Maybe Prelude.Text)
+dataQuery_source = Lens.lens (\DataQuery' {source} -> source) (\s@DataQuery' {} a -> s {source = a} :: DataQuery)
+
+-- | Metric data aggregations over specified periods of time. The following
+-- are the supported Infrastructure Performance statistics:
+--
+-- -   @p50@ - The median value of the metric aggregated over a specified
+--     start and end time. For example, a metric of @five_minutes@ is the
+--     median of all the data points gathered within those five minutes.
+dataQuery_statistic :: Lens.Lens' DataQuery (Prelude.Maybe StatisticType)
+dataQuery_statistic = Lens.lens (\DataQuery' {statistic} -> statistic) (\s@DataQuery' {} a -> s {statistic = a} :: DataQuery)
+
+instance Prelude.Hashable DataQuery where
+  hashWithSalt _salt DataQuery' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` metric
+      `Prelude.hashWithSalt` period
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` statistic
+
+instance Prelude.NFData DataQuery where
+  rnf DataQuery' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf metric
+      `Prelude.seq` Prelude.rnf period
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf statistic
+
+instance Data.ToQuery DataQuery where
+  toQuery DataQuery' {..} =
+    Prelude.mconcat
+      [ "Destination" Data.=: destination,
+        "Id" Data.=: id,
+        "Metric" Data.=: metric,
+        "Period" Data.=: period,
+        "Source" Data.=: source,
+        "Statistic" Data.=: statistic
+      ]
diff --git a/gen/Amazonka/EC2/Types/DataResponse.hs b/gen/Amazonka/EC2/Types/DataResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DataResponse.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DataResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DataResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MetricPoint
+import Amazonka.EC2.Types.MetricType
+import Amazonka.EC2.Types.PeriodType
+import Amazonka.EC2.Types.StatisticType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The response to a @DataQuery@.
+--
+-- /See:/ 'newDataResponse' smart constructor.
+data DataResponse = DataResponse'
+  { -- | The Region or Availability Zone that\'s the destination for the data
+    -- query. For example, @eu-west-1@.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The ID passed in the @DataQuery@.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The metric used for the network performance request. Currently only
+    -- @aggregate-latency@ is supported, showing network latency during a
+    -- specified period.
+    metric :: Prelude.Maybe MetricType,
+    -- | A list of @MetricPoint@ objects.
+    metricPoints :: Prelude.Maybe [MetricPoint],
+    -- | The period used for the network performance request.
+    period :: Prelude.Maybe PeriodType,
+    -- | The Region or Availability Zone that\'s the source for the data query.
+    -- For example, @us-east-1@.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The statistic used for the network performance request.
+    statistic :: Prelude.Maybe StatisticType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'dataResponse_destination' - The Region or Availability Zone that\'s the destination for the data
+-- query. For example, @eu-west-1@.
+--
+-- 'id', 'dataResponse_id' - The ID passed in the @DataQuery@.
+--
+-- 'metric', 'dataResponse_metric' - The metric used for the network performance request. Currently only
+-- @aggregate-latency@ is supported, showing network latency during a
+-- specified period.
+--
+-- 'metricPoints', 'dataResponse_metricPoints' - A list of @MetricPoint@ objects.
+--
+-- 'period', 'dataResponse_period' - The period used for the network performance request.
+--
+-- 'source', 'dataResponse_source' - The Region or Availability Zone that\'s the source for the data query.
+-- For example, @us-east-1@.
+--
+-- 'statistic', 'dataResponse_statistic' - The statistic used for the network performance request.
+newDataResponse ::
+  DataResponse
+newDataResponse =
+  DataResponse'
+    { destination = Prelude.Nothing,
+      id = Prelude.Nothing,
+      metric = Prelude.Nothing,
+      metricPoints = Prelude.Nothing,
+      period = Prelude.Nothing,
+      source = Prelude.Nothing,
+      statistic = Prelude.Nothing
+    }
+
+-- | The Region or Availability Zone that\'s the destination for the data
+-- query. For example, @eu-west-1@.
+dataResponse_destination :: Lens.Lens' DataResponse (Prelude.Maybe Prelude.Text)
+dataResponse_destination = Lens.lens (\DataResponse' {destination} -> destination) (\s@DataResponse' {} a -> s {destination = a} :: DataResponse)
+
+-- | The ID passed in the @DataQuery@.
+dataResponse_id :: Lens.Lens' DataResponse (Prelude.Maybe Prelude.Text)
+dataResponse_id = Lens.lens (\DataResponse' {id} -> id) (\s@DataResponse' {} a -> s {id = a} :: DataResponse)
+
+-- | The metric used for the network performance request. Currently only
+-- @aggregate-latency@ is supported, showing network latency during a
+-- specified period.
+dataResponse_metric :: Lens.Lens' DataResponse (Prelude.Maybe MetricType)
+dataResponse_metric = Lens.lens (\DataResponse' {metric} -> metric) (\s@DataResponse' {} a -> s {metric = a} :: DataResponse)
+
+-- | A list of @MetricPoint@ objects.
+dataResponse_metricPoints :: Lens.Lens' DataResponse (Prelude.Maybe [MetricPoint])
+dataResponse_metricPoints = Lens.lens (\DataResponse' {metricPoints} -> metricPoints) (\s@DataResponse' {} a -> s {metricPoints = a} :: DataResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The period used for the network performance request.
+dataResponse_period :: Lens.Lens' DataResponse (Prelude.Maybe PeriodType)
+dataResponse_period = Lens.lens (\DataResponse' {period} -> period) (\s@DataResponse' {} a -> s {period = a} :: DataResponse)
+
+-- | The Region or Availability Zone that\'s the source for the data query.
+-- For example, @us-east-1@.
+dataResponse_source :: Lens.Lens' DataResponse (Prelude.Maybe Prelude.Text)
+dataResponse_source = Lens.lens (\DataResponse' {source} -> source) (\s@DataResponse' {} a -> s {source = a} :: DataResponse)
+
+-- | The statistic used for the network performance request.
+dataResponse_statistic :: Lens.Lens' DataResponse (Prelude.Maybe StatisticType)
+dataResponse_statistic = Lens.lens (\DataResponse' {statistic} -> statistic) (\s@DataResponse' {} a -> s {statistic = a} :: DataResponse)
+
+instance Data.FromXML DataResponse where
+  parseXML x =
+    DataResponse'
+      Prelude.<$> (x Data..@? "destination")
+      Prelude.<*> (x Data..@? "id")
+      Prelude.<*> (x Data..@? "metric")
+      Prelude.<*> ( x
+                      Data..@? "metricPointSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "period")
+      Prelude.<*> (x Data..@? "source")
+      Prelude.<*> (x Data..@? "statistic")
+
+instance Prelude.Hashable DataResponse where
+  hashWithSalt _salt DataResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` metric
+      `Prelude.hashWithSalt` metricPoints
+      `Prelude.hashWithSalt` period
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` statistic
+
+instance Prelude.NFData DataResponse where
+  rnf DataResponse' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf metric
+      `Prelude.seq` Prelude.rnf metricPoints
+      `Prelude.seq` Prelude.rnf period
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf statistic
diff --git a/gen/Amazonka/EC2/Types/DatafeedSubscriptionState.hs b/gen/Amazonka/EC2/Types/DatafeedSubscriptionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DatafeedSubscriptionState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DatafeedSubscriptionState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DatafeedSubscriptionState
+  ( DatafeedSubscriptionState
+      ( ..,
+        DatafeedSubscriptionState_Active,
+        DatafeedSubscriptionState_Inactive
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DatafeedSubscriptionState = DatafeedSubscriptionState'
+  { fromDatafeedSubscriptionState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DatafeedSubscriptionState_Active :: DatafeedSubscriptionState
+pattern DatafeedSubscriptionState_Active = DatafeedSubscriptionState' "Active"
+
+pattern DatafeedSubscriptionState_Inactive :: DatafeedSubscriptionState
+pattern DatafeedSubscriptionState_Inactive = DatafeedSubscriptionState' "Inactive"
+
+{-# COMPLETE
+  DatafeedSubscriptionState_Active,
+  DatafeedSubscriptionState_Inactive,
+  DatafeedSubscriptionState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DefaultRouteTableAssociationValue.hs b/gen/Amazonka/EC2/Types/DefaultRouteTableAssociationValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DefaultRouteTableAssociationValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+  ( DefaultRouteTableAssociationValue
+      ( ..,
+        DefaultRouteTableAssociationValue_Disable,
+        DefaultRouteTableAssociationValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DefaultRouteTableAssociationValue = DefaultRouteTableAssociationValue'
+  { fromDefaultRouteTableAssociationValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DefaultRouteTableAssociationValue_Disable :: DefaultRouteTableAssociationValue
+pattern DefaultRouteTableAssociationValue_Disable = DefaultRouteTableAssociationValue' "disable"
+
+pattern DefaultRouteTableAssociationValue_Enable :: DefaultRouteTableAssociationValue
+pattern DefaultRouteTableAssociationValue_Enable = DefaultRouteTableAssociationValue' "enable"
+
+{-# COMPLETE
+  DefaultRouteTableAssociationValue_Disable,
+  DefaultRouteTableAssociationValue_Enable,
+  DefaultRouteTableAssociationValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DefaultRouteTablePropagationValue.hs b/gen/Amazonka/EC2/Types/DefaultRouteTablePropagationValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DefaultRouteTablePropagationValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+  ( DefaultRouteTablePropagationValue
+      ( ..,
+        DefaultRouteTablePropagationValue_Disable,
+        DefaultRouteTablePropagationValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DefaultRouteTablePropagationValue = DefaultRouteTablePropagationValue'
+  { fromDefaultRouteTablePropagationValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DefaultRouteTablePropagationValue_Disable :: DefaultRouteTablePropagationValue
+pattern DefaultRouteTablePropagationValue_Disable = DefaultRouteTablePropagationValue' "disable"
+
+pattern DefaultRouteTablePropagationValue_Enable :: DefaultRouteTablePropagationValue
+pattern DefaultRouteTablePropagationValue_Enable = DefaultRouteTablePropagationValue' "enable"
+
+{-# COMPLETE
+  DefaultRouteTablePropagationValue_Disable,
+  DefaultRouteTablePropagationValue_Enable,
+  DefaultRouteTablePropagationValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DefaultTargetCapacityType.hs b/gen/Amazonka/EC2/Types/DefaultTargetCapacityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DefaultTargetCapacityType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DefaultTargetCapacityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DefaultTargetCapacityType
+  ( DefaultTargetCapacityType
+      ( ..,
+        DefaultTargetCapacityType_On_demand,
+        DefaultTargetCapacityType_Spot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DefaultTargetCapacityType = DefaultTargetCapacityType'
+  { fromDefaultTargetCapacityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DefaultTargetCapacityType_On_demand :: DefaultTargetCapacityType
+pattern DefaultTargetCapacityType_On_demand = DefaultTargetCapacityType' "on-demand"
+
+pattern DefaultTargetCapacityType_Spot :: DefaultTargetCapacityType
+pattern DefaultTargetCapacityType_Spot = DefaultTargetCapacityType' "spot"
+
+{-# COMPLETE
+  DefaultTargetCapacityType_On_demand,
+  DefaultTargetCapacityType_Spot,
+  DefaultTargetCapacityType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DeleteFleetError.hs b/gen/Amazonka/EC2/Types/DeleteFleetError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteFleetError.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteFleetError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteFleetError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DeleteFleetErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EC2 Fleet error.
+--
+-- /See:/ 'newDeleteFleetError' smart constructor.
+data DeleteFleetError = DeleteFleetError'
+  { -- | The error code.
+    code :: Prelude.Maybe DeleteFleetErrorCode,
+    -- | The description for the error code.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleetError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'deleteFleetError_code' - The error code.
+--
+-- 'message', 'deleteFleetError_message' - The description for the error code.
+newDeleteFleetError ::
+  DeleteFleetError
+newDeleteFleetError =
+  DeleteFleetError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+deleteFleetError_code :: Lens.Lens' DeleteFleetError (Prelude.Maybe DeleteFleetErrorCode)
+deleteFleetError_code = Lens.lens (\DeleteFleetError' {code} -> code) (\s@DeleteFleetError' {} a -> s {code = a} :: DeleteFleetError)
+
+-- | The description for the error code.
+deleteFleetError_message :: Lens.Lens' DeleteFleetError (Prelude.Maybe Prelude.Text)
+deleteFleetError_message = Lens.lens (\DeleteFleetError' {message} -> message) (\s@DeleteFleetError' {} a -> s {message = a} :: DeleteFleetError)
+
+instance Data.FromXML DeleteFleetError where
+  parseXML x =
+    DeleteFleetError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable DeleteFleetError where
+  hashWithSalt _salt DeleteFleetError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData DeleteFleetError where
+  rnf DeleteFleetError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/DeleteFleetErrorCode.hs b/gen/Amazonka/EC2/Types/DeleteFleetErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteFleetErrorCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteFleetErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteFleetErrorCode
+  ( DeleteFleetErrorCode
+      ( ..,
+        DeleteFleetErrorCode_FleetIdDoesNotExist,
+        DeleteFleetErrorCode_FleetIdMalformed,
+        DeleteFleetErrorCode_FleetNotInDeletableState,
+        DeleteFleetErrorCode_UnexpectedError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeleteFleetErrorCode = DeleteFleetErrorCode'
+  { fromDeleteFleetErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeleteFleetErrorCode_FleetIdDoesNotExist :: DeleteFleetErrorCode
+pattern DeleteFleetErrorCode_FleetIdDoesNotExist = DeleteFleetErrorCode' "fleetIdDoesNotExist"
+
+pattern DeleteFleetErrorCode_FleetIdMalformed :: DeleteFleetErrorCode
+pattern DeleteFleetErrorCode_FleetIdMalformed = DeleteFleetErrorCode' "fleetIdMalformed"
+
+pattern DeleteFleetErrorCode_FleetNotInDeletableState :: DeleteFleetErrorCode
+pattern DeleteFleetErrorCode_FleetNotInDeletableState = DeleteFleetErrorCode' "fleetNotInDeletableState"
+
+pattern DeleteFleetErrorCode_UnexpectedError :: DeleteFleetErrorCode
+pattern DeleteFleetErrorCode_UnexpectedError = DeleteFleetErrorCode' "unexpectedError"
+
+{-# COMPLETE
+  DeleteFleetErrorCode_FleetIdDoesNotExist,
+  DeleteFleetErrorCode_FleetIdMalformed,
+  DeleteFleetErrorCode_FleetNotInDeletableState,
+  DeleteFleetErrorCode_UnexpectedError,
+  DeleteFleetErrorCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DeleteFleetErrorItem.hs b/gen/Amazonka/EC2/Types/DeleteFleetErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteFleetErrorItem.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteFleetErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteFleetErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DeleteFleetError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EC2 Fleet that was not successfully deleted.
+--
+-- /See:/ 'newDeleteFleetErrorItem' smart constructor.
+data DeleteFleetErrorItem = DeleteFleetErrorItem'
+  { -- | The error.
+    error :: Prelude.Maybe DeleteFleetError,
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleetErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'deleteFleetErrorItem_error' - The error.
+--
+-- 'fleetId', 'deleteFleetErrorItem_fleetId' - The ID of the EC2 Fleet.
+newDeleteFleetErrorItem ::
+  DeleteFleetErrorItem
+newDeleteFleetErrorItem =
+  DeleteFleetErrorItem'
+    { error = Prelude.Nothing,
+      fleetId = Prelude.Nothing
+    }
+
+-- | The error.
+deleteFleetErrorItem_error :: Lens.Lens' DeleteFleetErrorItem (Prelude.Maybe DeleteFleetError)
+deleteFleetErrorItem_error = Lens.lens (\DeleteFleetErrorItem' {error} -> error) (\s@DeleteFleetErrorItem' {} a -> s {error = a} :: DeleteFleetErrorItem)
+
+-- | The ID of the EC2 Fleet.
+deleteFleetErrorItem_fleetId :: Lens.Lens' DeleteFleetErrorItem (Prelude.Maybe Prelude.Text)
+deleteFleetErrorItem_fleetId = Lens.lens (\DeleteFleetErrorItem' {fleetId} -> fleetId) (\s@DeleteFleetErrorItem' {} a -> s {fleetId = a} :: DeleteFleetErrorItem)
+
+instance Data.FromXML DeleteFleetErrorItem where
+  parseXML x =
+    DeleteFleetErrorItem'
+      Prelude.<$> (x Data..@? "error")
+      Prelude.<*> (x Data..@? "fleetId")
+
+instance Prelude.Hashable DeleteFleetErrorItem where
+  hashWithSalt _salt DeleteFleetErrorItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` fleetId
+
+instance Prelude.NFData DeleteFleetErrorItem where
+  rnf DeleteFleetErrorItem' {..} =
+    Prelude.rnf error `Prelude.seq` Prelude.rnf fleetId
diff --git a/gen/Amazonka/EC2/Types/DeleteFleetSuccessItem.hs b/gen/Amazonka/EC2/Types/DeleteFleetSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteFleetSuccessItem.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteFleetSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteFleetSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EC2 Fleet that was successfully deleted.
+--
+-- /See:/ 'newDeleteFleetSuccessItem' smart constructor.
+data DeleteFleetSuccessItem = DeleteFleetSuccessItem'
+  { -- | The current state of the EC2 Fleet.
+    currentFleetState :: Prelude.Maybe FleetStateCode,
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Maybe Prelude.Text,
+    -- | The previous state of the EC2 Fleet.
+    previousFleetState :: Prelude.Maybe FleetStateCode
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleetSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currentFleetState', 'deleteFleetSuccessItem_currentFleetState' - The current state of the EC2 Fleet.
+--
+-- 'fleetId', 'deleteFleetSuccessItem_fleetId' - The ID of the EC2 Fleet.
+--
+-- 'previousFleetState', 'deleteFleetSuccessItem_previousFleetState' - The previous state of the EC2 Fleet.
+newDeleteFleetSuccessItem ::
+  DeleteFleetSuccessItem
+newDeleteFleetSuccessItem =
+  DeleteFleetSuccessItem'
+    { currentFleetState =
+        Prelude.Nothing,
+      fleetId = Prelude.Nothing,
+      previousFleetState = Prelude.Nothing
+    }
+
+-- | The current state of the EC2 Fleet.
+deleteFleetSuccessItem_currentFleetState :: Lens.Lens' DeleteFleetSuccessItem (Prelude.Maybe FleetStateCode)
+deleteFleetSuccessItem_currentFleetState = Lens.lens (\DeleteFleetSuccessItem' {currentFleetState} -> currentFleetState) (\s@DeleteFleetSuccessItem' {} a -> s {currentFleetState = a} :: DeleteFleetSuccessItem)
+
+-- | The ID of the EC2 Fleet.
+deleteFleetSuccessItem_fleetId :: Lens.Lens' DeleteFleetSuccessItem (Prelude.Maybe Prelude.Text)
+deleteFleetSuccessItem_fleetId = Lens.lens (\DeleteFleetSuccessItem' {fleetId} -> fleetId) (\s@DeleteFleetSuccessItem' {} a -> s {fleetId = a} :: DeleteFleetSuccessItem)
+
+-- | The previous state of the EC2 Fleet.
+deleteFleetSuccessItem_previousFleetState :: Lens.Lens' DeleteFleetSuccessItem (Prelude.Maybe FleetStateCode)
+deleteFleetSuccessItem_previousFleetState = Lens.lens (\DeleteFleetSuccessItem' {previousFleetState} -> previousFleetState) (\s@DeleteFleetSuccessItem' {} a -> s {previousFleetState = a} :: DeleteFleetSuccessItem)
+
+instance Data.FromXML DeleteFleetSuccessItem where
+  parseXML x =
+    DeleteFleetSuccessItem'
+      Prelude.<$> (x Data..@? "currentFleetState")
+      Prelude.<*> (x Data..@? "fleetId")
+      Prelude.<*> (x Data..@? "previousFleetState")
+
+instance Prelude.Hashable DeleteFleetSuccessItem where
+  hashWithSalt _salt DeleteFleetSuccessItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentFleetState
+      `Prelude.hashWithSalt` fleetId
+      `Prelude.hashWithSalt` previousFleetState
+
+instance Prelude.NFData DeleteFleetSuccessItem where
+  rnf DeleteFleetSuccessItem' {..} =
+    Prelude.rnf currentFleetState
+      `Prelude.seq` Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf previousFleetState
diff --git a/gen/Amazonka/EC2/Types/DeleteLaunchTemplateVersionsResponseErrorItem.hs b/gen/Amazonka/EC2/Types/DeleteLaunchTemplateVersionsResponseErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteLaunchTemplateVersionsResponseErrorItem.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResponseError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template version that could not be deleted.
+--
+-- /See:/ 'newDeleteLaunchTemplateVersionsResponseErrorItem' smart constructor.
+data DeleteLaunchTemplateVersionsResponseErrorItem = DeleteLaunchTemplateVersionsResponseErrorItem'
+  { -- | The ID of the launch template.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the error.
+    responseError :: Prelude.Maybe ResponseError,
+    -- | The version number of the launch template.
+    versionNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchTemplateVersionsResponseErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateId' - The ID of the launch template.
+--
+-- 'launchTemplateName', 'deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateName' - The name of the launch template.
+--
+-- 'responseError', 'deleteLaunchTemplateVersionsResponseErrorItem_responseError' - Information about the error.
+--
+-- 'versionNumber', 'deleteLaunchTemplateVersionsResponseErrorItem_versionNumber' - The version number of the launch template.
+newDeleteLaunchTemplateVersionsResponseErrorItem ::
+  DeleteLaunchTemplateVersionsResponseErrorItem
+newDeleteLaunchTemplateVersionsResponseErrorItem =
+  DeleteLaunchTemplateVersionsResponseErrorItem'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName =
+        Prelude.Nothing,
+      responseError =
+        Prelude.Nothing,
+      versionNumber =
+        Prelude.Nothing
+    }
+
+-- | The ID of the launch template.
+deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateId :: Lens.Lens' DeleteLaunchTemplateVersionsResponseErrorItem (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateId = Lens.lens (\DeleteLaunchTemplateVersionsResponseErrorItem' {launchTemplateId} -> launchTemplateId) (\s@DeleteLaunchTemplateVersionsResponseErrorItem' {} a -> s {launchTemplateId = a} :: DeleteLaunchTemplateVersionsResponseErrorItem)
+
+-- | The name of the launch template.
+deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateName :: Lens.Lens' DeleteLaunchTemplateVersionsResponseErrorItem (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplateVersionsResponseErrorItem_launchTemplateName = Lens.lens (\DeleteLaunchTemplateVersionsResponseErrorItem' {launchTemplateName} -> launchTemplateName) (\s@DeleteLaunchTemplateVersionsResponseErrorItem' {} a -> s {launchTemplateName = a} :: DeleteLaunchTemplateVersionsResponseErrorItem)
+
+-- | Information about the error.
+deleteLaunchTemplateVersionsResponseErrorItem_responseError :: Lens.Lens' DeleteLaunchTemplateVersionsResponseErrorItem (Prelude.Maybe ResponseError)
+deleteLaunchTemplateVersionsResponseErrorItem_responseError = Lens.lens (\DeleteLaunchTemplateVersionsResponseErrorItem' {responseError} -> responseError) (\s@DeleteLaunchTemplateVersionsResponseErrorItem' {} a -> s {responseError = a} :: DeleteLaunchTemplateVersionsResponseErrorItem)
+
+-- | The version number of the launch template.
+deleteLaunchTemplateVersionsResponseErrorItem_versionNumber :: Lens.Lens' DeleteLaunchTemplateVersionsResponseErrorItem (Prelude.Maybe Prelude.Integer)
+deleteLaunchTemplateVersionsResponseErrorItem_versionNumber = Lens.lens (\DeleteLaunchTemplateVersionsResponseErrorItem' {versionNumber} -> versionNumber) (\s@DeleteLaunchTemplateVersionsResponseErrorItem' {} a -> s {versionNumber = a} :: DeleteLaunchTemplateVersionsResponseErrorItem)
+
+instance
+  Data.FromXML
+    DeleteLaunchTemplateVersionsResponseErrorItem
+  where
+  parseXML x =
+    DeleteLaunchTemplateVersionsResponseErrorItem'
+      Prelude.<$> (x Data..@? "launchTemplateId")
+      Prelude.<*> (x Data..@? "launchTemplateName")
+      Prelude.<*> (x Data..@? "responseError")
+      Prelude.<*> (x Data..@? "versionNumber")
+
+instance
+  Prelude.Hashable
+    DeleteLaunchTemplateVersionsResponseErrorItem
+  where
+  hashWithSalt
+    _salt
+    DeleteLaunchTemplateVersionsResponseErrorItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` responseError
+        `Prelude.hashWithSalt` versionNumber
+
+instance
+  Prelude.NFData
+    DeleteLaunchTemplateVersionsResponseErrorItem
+  where
+  rnf
+    DeleteLaunchTemplateVersionsResponseErrorItem' {..} =
+      Prelude.rnf launchTemplateId
+        `Prelude.seq` Prelude.rnf launchTemplateName
+        `Prelude.seq` Prelude.rnf responseError
+        `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/EC2/Types/DeleteLaunchTemplateVersionsResponseSuccessItem.hs b/gen/Amazonka/EC2/Types/DeleteLaunchTemplateVersionsResponseSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteLaunchTemplateVersionsResponseSuccessItem.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteLaunchTemplateVersionsResponseSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template version that was successfully deleted.
+--
+-- /See:/ 'newDeleteLaunchTemplateVersionsResponseSuccessItem' smart constructor.
+data DeleteLaunchTemplateVersionsResponseSuccessItem = DeleteLaunchTemplateVersionsResponseSuccessItem'
+  { -- | The ID of the launch template.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the launch template.
+    versionNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteLaunchTemplateVersionsResponseSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateId' - The ID of the launch template.
+--
+-- 'launchTemplateName', 'deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateName' - The name of the launch template.
+--
+-- 'versionNumber', 'deleteLaunchTemplateVersionsResponseSuccessItem_versionNumber' - The version number of the launch template.
+newDeleteLaunchTemplateVersionsResponseSuccessItem ::
+  DeleteLaunchTemplateVersionsResponseSuccessItem
+newDeleteLaunchTemplateVersionsResponseSuccessItem =
+  DeleteLaunchTemplateVersionsResponseSuccessItem'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName =
+        Prelude.Nothing,
+      versionNumber =
+        Prelude.Nothing
+    }
+
+-- | The ID of the launch template.
+deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateId :: Lens.Lens' DeleteLaunchTemplateVersionsResponseSuccessItem (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateId = Lens.lens (\DeleteLaunchTemplateVersionsResponseSuccessItem' {launchTemplateId} -> launchTemplateId) (\s@DeleteLaunchTemplateVersionsResponseSuccessItem' {} a -> s {launchTemplateId = a} :: DeleteLaunchTemplateVersionsResponseSuccessItem)
+
+-- | The name of the launch template.
+deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateName :: Lens.Lens' DeleteLaunchTemplateVersionsResponseSuccessItem (Prelude.Maybe Prelude.Text)
+deleteLaunchTemplateVersionsResponseSuccessItem_launchTemplateName = Lens.lens (\DeleteLaunchTemplateVersionsResponseSuccessItem' {launchTemplateName} -> launchTemplateName) (\s@DeleteLaunchTemplateVersionsResponseSuccessItem' {} a -> s {launchTemplateName = a} :: DeleteLaunchTemplateVersionsResponseSuccessItem)
+
+-- | The version number of the launch template.
+deleteLaunchTemplateVersionsResponseSuccessItem_versionNumber :: Lens.Lens' DeleteLaunchTemplateVersionsResponseSuccessItem (Prelude.Maybe Prelude.Integer)
+deleteLaunchTemplateVersionsResponseSuccessItem_versionNumber = Lens.lens (\DeleteLaunchTemplateVersionsResponseSuccessItem' {versionNumber} -> versionNumber) (\s@DeleteLaunchTemplateVersionsResponseSuccessItem' {} a -> s {versionNumber = a} :: DeleteLaunchTemplateVersionsResponseSuccessItem)
+
+instance
+  Data.FromXML
+    DeleteLaunchTemplateVersionsResponseSuccessItem
+  where
+  parseXML x =
+    DeleteLaunchTemplateVersionsResponseSuccessItem'
+      Prelude.<$> (x Data..@? "launchTemplateId")
+      Prelude.<*> (x Data..@? "launchTemplateName")
+      Prelude.<*> (x Data..@? "versionNumber")
+
+instance
+  Prelude.Hashable
+    DeleteLaunchTemplateVersionsResponseSuccessItem
+  where
+  hashWithSalt
+    _salt
+    DeleteLaunchTemplateVersionsResponseSuccessItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` versionNumber
+
+instance
+  Prelude.NFData
+    DeleteLaunchTemplateVersionsResponseSuccessItem
+  where
+  rnf
+    DeleteLaunchTemplateVersionsResponseSuccessItem' {..} =
+      Prelude.rnf launchTemplateId
+        `Prelude.seq` Prelude.rnf launchTemplateName
+        `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/EC2/Types/DeleteQueuedReservedInstancesError.hs b/gen/Amazonka/EC2/Types/DeleteQueuedReservedInstancesError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteQueuedReservedInstancesError.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteQueuedReservedInstancesError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteQueuedReservedInstancesError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DeleteQueuedReservedInstancesErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the error for a Reserved Instance whose queued purchase could
+-- not be deleted.
+--
+-- /See:/ 'newDeleteQueuedReservedInstancesError' smart constructor.
+data DeleteQueuedReservedInstancesError = DeleteQueuedReservedInstancesError'
+  { -- | The error code.
+    code :: Prelude.Maybe DeleteQueuedReservedInstancesErrorCode,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteQueuedReservedInstancesError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'deleteQueuedReservedInstancesError_code' - The error code.
+--
+-- 'message', 'deleteQueuedReservedInstancesError_message' - The error message.
+newDeleteQueuedReservedInstancesError ::
+  DeleteQueuedReservedInstancesError
+newDeleteQueuedReservedInstancesError =
+  DeleteQueuedReservedInstancesError'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+deleteQueuedReservedInstancesError_code :: Lens.Lens' DeleteQueuedReservedInstancesError (Prelude.Maybe DeleteQueuedReservedInstancesErrorCode)
+deleteQueuedReservedInstancesError_code = Lens.lens (\DeleteQueuedReservedInstancesError' {code} -> code) (\s@DeleteQueuedReservedInstancesError' {} a -> s {code = a} :: DeleteQueuedReservedInstancesError)
+
+-- | The error message.
+deleteQueuedReservedInstancesError_message :: Lens.Lens' DeleteQueuedReservedInstancesError (Prelude.Maybe Prelude.Text)
+deleteQueuedReservedInstancesError_message = Lens.lens (\DeleteQueuedReservedInstancesError' {message} -> message) (\s@DeleteQueuedReservedInstancesError' {} a -> s {message = a} :: DeleteQueuedReservedInstancesError)
+
+instance
+  Data.FromXML
+    DeleteQueuedReservedInstancesError
+  where
+  parseXML x =
+    DeleteQueuedReservedInstancesError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    DeleteQueuedReservedInstancesError
+  where
+  hashWithSalt
+    _salt
+    DeleteQueuedReservedInstancesError' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    DeleteQueuedReservedInstancesError
+  where
+  rnf DeleteQueuedReservedInstancesError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/DeleteQueuedReservedInstancesErrorCode.hs b/gen/Amazonka/EC2/Types/DeleteQueuedReservedInstancesErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeleteQueuedReservedInstancesErrorCode.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeleteQueuedReservedInstancesErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeleteQueuedReservedInstancesErrorCode
+  ( DeleteQueuedReservedInstancesErrorCode
+      ( ..,
+        DeleteQueuedReservedInstancesErrorCode_Reserved_instances_id_invalid,
+        DeleteQueuedReservedInstancesErrorCode_Reserved_instances_not_in_queued_state,
+        DeleteQueuedReservedInstancesErrorCode_Unexpected_error
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeleteQueuedReservedInstancesErrorCode = DeleteQueuedReservedInstancesErrorCode'
+  { fromDeleteQueuedReservedInstancesErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeleteQueuedReservedInstancesErrorCode_Reserved_instances_id_invalid :: DeleteQueuedReservedInstancesErrorCode
+pattern DeleteQueuedReservedInstancesErrorCode_Reserved_instances_id_invalid = DeleteQueuedReservedInstancesErrorCode' "reserved-instances-id-invalid"
+
+pattern DeleteQueuedReservedInstancesErrorCode_Reserved_instances_not_in_queued_state :: DeleteQueuedReservedInstancesErrorCode
+pattern DeleteQueuedReservedInstancesErrorCode_Reserved_instances_not_in_queued_state = DeleteQueuedReservedInstancesErrorCode' "reserved-instances-not-in-queued-state"
+
+pattern DeleteQueuedReservedInstancesErrorCode_Unexpected_error :: DeleteQueuedReservedInstancesErrorCode
+pattern DeleteQueuedReservedInstancesErrorCode_Unexpected_error = DeleteQueuedReservedInstancesErrorCode' "unexpected-error"
+
+{-# COMPLETE
+  DeleteQueuedReservedInstancesErrorCode_Reserved_instances_id_invalid,
+  DeleteQueuedReservedInstancesErrorCode_Reserved_instances_not_in_queued_state,
+  DeleteQueuedReservedInstancesErrorCode_Unexpected_error,
+  DeleteQueuedReservedInstancesErrorCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DeregisterInstanceTagAttributeRequest.hs b/gen/Amazonka/EC2/Types/DeregisterInstanceTagAttributeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeregisterInstanceTagAttributeRequest.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeregisterInstanceTagAttributeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeregisterInstanceTagAttributeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the tag keys to deregister for the current Region. You
+-- can either specify individual tag keys or deregister all tag keys in the
+-- current Region. You must specify either @IncludeAllTagsOfInstance@ or
+-- @InstanceTagKeys@ in the request
+--
+-- /See:/ 'newDeregisterInstanceTagAttributeRequest' smart constructor.
+data DeregisterInstanceTagAttributeRequest = DeregisterInstanceTagAttributeRequest'
+  { -- | Indicates whether to deregister all tag keys in the current Region.
+    -- Specify @false@ to deregister all tag keys.
+    includeAllTagsOfInstance :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the tag keys to deregister.
+    instanceTagKeys :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeregisterInstanceTagAttributeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeAllTagsOfInstance', 'deregisterInstanceTagAttributeRequest_includeAllTagsOfInstance' - Indicates whether to deregister all tag keys in the current Region.
+-- Specify @false@ to deregister all tag keys.
+--
+-- 'instanceTagKeys', 'deregisterInstanceTagAttributeRequest_instanceTagKeys' - Information about the tag keys to deregister.
+newDeregisterInstanceTagAttributeRequest ::
+  DeregisterInstanceTagAttributeRequest
+newDeregisterInstanceTagAttributeRequest =
+  DeregisterInstanceTagAttributeRequest'
+    { includeAllTagsOfInstance =
+        Prelude.Nothing,
+      instanceTagKeys = Prelude.Nothing
+    }
+
+-- | Indicates whether to deregister all tag keys in the current Region.
+-- Specify @false@ to deregister all tag keys.
+deregisterInstanceTagAttributeRequest_includeAllTagsOfInstance :: Lens.Lens' DeregisterInstanceTagAttributeRequest (Prelude.Maybe Prelude.Bool)
+deregisterInstanceTagAttributeRequest_includeAllTagsOfInstance = Lens.lens (\DeregisterInstanceTagAttributeRequest' {includeAllTagsOfInstance} -> includeAllTagsOfInstance) (\s@DeregisterInstanceTagAttributeRequest' {} a -> s {includeAllTagsOfInstance = a} :: DeregisterInstanceTagAttributeRequest)
+
+-- | Information about the tag keys to deregister.
+deregisterInstanceTagAttributeRequest_instanceTagKeys :: Lens.Lens' DeregisterInstanceTagAttributeRequest (Prelude.Maybe [Prelude.Text])
+deregisterInstanceTagAttributeRequest_instanceTagKeys = Lens.lens (\DeregisterInstanceTagAttributeRequest' {instanceTagKeys} -> instanceTagKeys) (\s@DeregisterInstanceTagAttributeRequest' {} a -> s {instanceTagKeys = a} :: DeregisterInstanceTagAttributeRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    DeregisterInstanceTagAttributeRequest
+  where
+  hashWithSalt
+    _salt
+    DeregisterInstanceTagAttributeRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` includeAllTagsOfInstance
+        `Prelude.hashWithSalt` instanceTagKeys
+
+instance
+  Prelude.NFData
+    DeregisterInstanceTagAttributeRequest
+  where
+  rnf DeregisterInstanceTagAttributeRequest' {..} =
+    Prelude.rnf includeAllTagsOfInstance
+      `Prelude.seq` Prelude.rnf instanceTagKeys
+
+instance
+  Data.ToQuery
+    DeregisterInstanceTagAttributeRequest
+  where
+  toQuery DeregisterInstanceTagAttributeRequest' {..} =
+    Prelude.mconcat
+      [ "IncludeAllTagsOfInstance"
+          Data.=: includeAllTagsOfInstance,
+        Data.toQuery
+          ( Data.toQueryList "InstanceTagKey"
+              Prelude.<$> instanceTagKeys
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/DescribeFastLaunchImagesSuccessItem.hs b/gen/Amazonka/EC2/Types/DescribeFastLaunchImagesSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DescribeFastLaunchImagesSuccessItem.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DescribeFastLaunchImagesSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DescribeFastLaunchImagesSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationResponse
+import Amazonka.EC2.Types.FastLaunchResourceType
+import Amazonka.EC2.Types.FastLaunchSnapshotConfigurationResponse
+import Amazonka.EC2.Types.FastLaunchStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describe details about a fast-launch enabled Windows image that meets
+-- the requested criteria. Criteria are defined by the
+-- @DescribeFastLaunchImages@ action filters.
+--
+-- /See:/ 'newDescribeFastLaunchImagesSuccessItem' smart constructor.
+data DescribeFastLaunchImagesSuccessItem = DescribeFastLaunchImagesSuccessItem'
+  { -- | The image ID that identifies the fast-launch enabled Windows image.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The launch template that the fast-launch enabled Windows AMI uses when
+    -- it launches Windows instances from pre-provisioned snapshots.
+    launchTemplate :: Prelude.Maybe FastLaunchLaunchTemplateSpecificationResponse,
+    -- | The maximum number of parallel instances that are launched for creating
+    -- resources.
+    maxParallelLaunches :: Prelude.Maybe Prelude.Int,
+    -- | The owner ID for the fast-launch enabled Windows AMI.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type that is used for pre-provisioning the Windows AMI.
+    -- Supported values include: @snapshot@.
+    resourceType :: Prelude.Maybe FastLaunchResourceType,
+    -- | A group of parameters that are used for pre-provisioning the associated
+    -- Windows AMI using snapshots.
+    snapshotConfiguration :: Prelude.Maybe FastLaunchSnapshotConfigurationResponse,
+    -- | The current state of faster launching for the specified Windows AMI.
+    state :: Prelude.Maybe FastLaunchStateCode,
+    -- | The reason that faster launching for the Windows AMI changed to the
+    -- current state.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text,
+    -- | The time that faster launching for the Windows AMI changed to the
+    -- current state.
+    stateTransitionTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFastLaunchImagesSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageId', 'describeFastLaunchImagesSuccessItem_imageId' - The image ID that identifies the fast-launch enabled Windows image.
+--
+-- 'launchTemplate', 'describeFastLaunchImagesSuccessItem_launchTemplate' - The launch template that the fast-launch enabled Windows AMI uses when
+-- it launches Windows instances from pre-provisioned snapshots.
+--
+-- 'maxParallelLaunches', 'describeFastLaunchImagesSuccessItem_maxParallelLaunches' - The maximum number of parallel instances that are launched for creating
+-- resources.
+--
+-- 'ownerId', 'describeFastLaunchImagesSuccessItem_ownerId' - The owner ID for the fast-launch enabled Windows AMI.
+--
+-- 'resourceType', 'describeFastLaunchImagesSuccessItem_resourceType' - The resource type that is used for pre-provisioning the Windows AMI.
+-- Supported values include: @snapshot@.
+--
+-- 'snapshotConfiguration', 'describeFastLaunchImagesSuccessItem_snapshotConfiguration' - A group of parameters that are used for pre-provisioning the associated
+-- Windows AMI using snapshots.
+--
+-- 'state', 'describeFastLaunchImagesSuccessItem_state' - The current state of faster launching for the specified Windows AMI.
+--
+-- 'stateTransitionReason', 'describeFastLaunchImagesSuccessItem_stateTransitionReason' - The reason that faster launching for the Windows AMI changed to the
+-- current state.
+--
+-- 'stateTransitionTime', 'describeFastLaunchImagesSuccessItem_stateTransitionTime' - The time that faster launching for the Windows AMI changed to the
+-- current state.
+newDescribeFastLaunchImagesSuccessItem ::
+  DescribeFastLaunchImagesSuccessItem
+newDescribeFastLaunchImagesSuccessItem =
+  DescribeFastLaunchImagesSuccessItem'
+    { imageId =
+        Prelude.Nothing,
+      launchTemplate = Prelude.Nothing,
+      maxParallelLaunches = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      snapshotConfiguration =
+        Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateTransitionReason =
+        Prelude.Nothing,
+      stateTransitionTime = Prelude.Nothing
+    }
+
+-- | The image ID that identifies the fast-launch enabled Windows image.
+describeFastLaunchImagesSuccessItem_imageId :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastLaunchImagesSuccessItem_imageId = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {imageId} -> imageId) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {imageId = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The launch template that the fast-launch enabled Windows AMI uses when
+-- it launches Windows instances from pre-provisioned snapshots.
+describeFastLaunchImagesSuccessItem_launchTemplate :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe FastLaunchLaunchTemplateSpecificationResponse)
+describeFastLaunchImagesSuccessItem_launchTemplate = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {launchTemplate} -> launchTemplate) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {launchTemplate = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The maximum number of parallel instances that are launched for creating
+-- resources.
+describeFastLaunchImagesSuccessItem_maxParallelLaunches :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe Prelude.Int)
+describeFastLaunchImagesSuccessItem_maxParallelLaunches = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {maxParallelLaunches} -> maxParallelLaunches) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {maxParallelLaunches = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The owner ID for the fast-launch enabled Windows AMI.
+describeFastLaunchImagesSuccessItem_ownerId :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastLaunchImagesSuccessItem_ownerId = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {ownerId} -> ownerId) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {ownerId = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The resource type that is used for pre-provisioning the Windows AMI.
+-- Supported values include: @snapshot@.
+describeFastLaunchImagesSuccessItem_resourceType :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe FastLaunchResourceType)
+describeFastLaunchImagesSuccessItem_resourceType = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {resourceType} -> resourceType) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {resourceType = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | A group of parameters that are used for pre-provisioning the associated
+-- Windows AMI using snapshots.
+describeFastLaunchImagesSuccessItem_snapshotConfiguration :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe FastLaunchSnapshotConfigurationResponse)
+describeFastLaunchImagesSuccessItem_snapshotConfiguration = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {snapshotConfiguration} -> snapshotConfiguration) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {snapshotConfiguration = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The current state of faster launching for the specified Windows AMI.
+describeFastLaunchImagesSuccessItem_state :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe FastLaunchStateCode)
+describeFastLaunchImagesSuccessItem_state = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {state} -> state) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {state = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The reason that faster launching for the Windows AMI changed to the
+-- current state.
+describeFastLaunchImagesSuccessItem_stateTransitionReason :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastLaunchImagesSuccessItem_stateTransitionReason = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {stateTransitionReason} -> stateTransitionReason) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {stateTransitionReason = a} :: DescribeFastLaunchImagesSuccessItem)
+
+-- | The time that faster launching for the Windows AMI changed to the
+-- current state.
+describeFastLaunchImagesSuccessItem_stateTransitionTime :: Lens.Lens' DescribeFastLaunchImagesSuccessItem (Prelude.Maybe Prelude.UTCTime)
+describeFastLaunchImagesSuccessItem_stateTransitionTime = Lens.lens (\DescribeFastLaunchImagesSuccessItem' {stateTransitionTime} -> stateTransitionTime) (\s@DescribeFastLaunchImagesSuccessItem' {} a -> s {stateTransitionTime = a} :: DescribeFastLaunchImagesSuccessItem) Prelude.. Lens.mapping Data._Time
+
+instance
+  Data.FromXML
+    DescribeFastLaunchImagesSuccessItem
+  where
+  parseXML x =
+    DescribeFastLaunchImagesSuccessItem'
+      Prelude.<$> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "launchTemplate")
+      Prelude.<*> (x Data..@? "maxParallelLaunches")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "snapshotConfiguration")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateTransitionReason")
+      Prelude.<*> (x Data..@? "stateTransitionTime")
+
+instance
+  Prelude.Hashable
+    DescribeFastLaunchImagesSuccessItem
+  where
+  hashWithSalt
+    _salt
+    DescribeFastLaunchImagesSuccessItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` imageId
+        `Prelude.hashWithSalt` launchTemplate
+        `Prelude.hashWithSalt` maxParallelLaunches
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` snapshotConfiguration
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` stateTransitionReason
+        `Prelude.hashWithSalt` stateTransitionTime
+
+instance
+  Prelude.NFData
+    DescribeFastLaunchImagesSuccessItem
+  where
+  rnf DescribeFastLaunchImagesSuccessItem' {..} =
+    Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf launchTemplate
+      `Prelude.seq` Prelude.rnf maxParallelLaunches
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf snapshotConfiguration
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateTransitionReason
+      `Prelude.seq` Prelude.rnf stateTransitionTime
diff --git a/gen/Amazonka/EC2/Types/DescribeFastSnapshotRestoreSuccessItem.hs b/gen/Amazonka/EC2/Types/DescribeFastSnapshotRestoreSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DescribeFastSnapshotRestoreSuccessItem.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DescribeFastSnapshotRestoreSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DescribeFastSnapshotRestoreSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes fast snapshot restores for a snapshot.
+--
+-- /See:/ 'newDescribeFastSnapshotRestoreSuccessItem' smart constructor.
+data DescribeFastSnapshotRestoreSuccessItem = DescribeFastSnapshotRestoreSuccessItem'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The time at which fast snapshot restores entered the @disabled@ state.
+    disabledTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @disabling@ state.
+    disablingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @enabled@ state.
+    enabledTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @enabling@ state.
+    enablingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @optimizing@ state.
+    optimizingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Web Services owner alias that enabled fast snapshot restores
+    -- on the snapshot. This is intended for future use.
+    ownerAlias :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that enabled fast snapshot
+    -- restores on the snapshot.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The state of fast snapshot restores.
+    state :: Prelude.Maybe FastSnapshotRestoreStateCode,
+    -- | The reason for the state transition. The possible values are as follows:
+    --
+    -- -   @Client.UserInitiated@ - The state successfully transitioned to
+    --     @enabling@ or @disabling@.
+    --
+    -- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+    --     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFastSnapshotRestoreSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'describeFastSnapshotRestoreSuccessItem_availabilityZone' - The Availability Zone.
+--
+-- 'disabledTime', 'describeFastSnapshotRestoreSuccessItem_disabledTime' - The time at which fast snapshot restores entered the @disabled@ state.
+--
+-- 'disablingTime', 'describeFastSnapshotRestoreSuccessItem_disablingTime' - The time at which fast snapshot restores entered the @disabling@ state.
+--
+-- 'enabledTime', 'describeFastSnapshotRestoreSuccessItem_enabledTime' - The time at which fast snapshot restores entered the @enabled@ state.
+--
+-- 'enablingTime', 'describeFastSnapshotRestoreSuccessItem_enablingTime' - The time at which fast snapshot restores entered the @enabling@ state.
+--
+-- 'optimizingTime', 'describeFastSnapshotRestoreSuccessItem_optimizingTime' - The time at which fast snapshot restores entered the @optimizing@ state.
+--
+-- 'ownerAlias', 'describeFastSnapshotRestoreSuccessItem_ownerAlias' - The Amazon Web Services owner alias that enabled fast snapshot restores
+-- on the snapshot. This is intended for future use.
+--
+-- 'ownerId', 'describeFastSnapshotRestoreSuccessItem_ownerId' - The ID of the Amazon Web Services account that enabled fast snapshot
+-- restores on the snapshot.
+--
+-- 'snapshotId', 'describeFastSnapshotRestoreSuccessItem_snapshotId' - The ID of the snapshot.
+--
+-- 'state', 'describeFastSnapshotRestoreSuccessItem_state' - The state of fast snapshot restores.
+--
+-- 'stateTransitionReason', 'describeFastSnapshotRestoreSuccessItem_stateTransitionReason' - The reason for the state transition. The possible values are as follows:
+--
+-- -   @Client.UserInitiated@ - The state successfully transitioned to
+--     @enabling@ or @disabling@.
+--
+-- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+--     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+newDescribeFastSnapshotRestoreSuccessItem ::
+  DescribeFastSnapshotRestoreSuccessItem
+newDescribeFastSnapshotRestoreSuccessItem =
+  DescribeFastSnapshotRestoreSuccessItem'
+    { availabilityZone =
+        Prelude.Nothing,
+      disabledTime = Prelude.Nothing,
+      disablingTime = Prelude.Nothing,
+      enabledTime = Prelude.Nothing,
+      enablingTime = Prelude.Nothing,
+      optimizingTime = Prelude.Nothing,
+      ownerAlias = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateTransitionReason =
+        Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+describeFastSnapshotRestoreSuccessItem_availabilityZone :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestoreSuccessItem_availabilityZone = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {availabilityZone} -> availabilityZone) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {availabilityZone = a} :: DescribeFastSnapshotRestoreSuccessItem)
+
+-- | The time at which fast snapshot restores entered the @disabled@ state.
+describeFastSnapshotRestoreSuccessItem_disabledTime :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+describeFastSnapshotRestoreSuccessItem_disabledTime = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {disabledTime} -> disabledTime) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {disabledTime = a} :: DescribeFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @disabling@ state.
+describeFastSnapshotRestoreSuccessItem_disablingTime :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+describeFastSnapshotRestoreSuccessItem_disablingTime = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {disablingTime} -> disablingTime) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {disablingTime = a} :: DescribeFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @enabled@ state.
+describeFastSnapshotRestoreSuccessItem_enabledTime :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+describeFastSnapshotRestoreSuccessItem_enabledTime = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {enabledTime} -> enabledTime) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {enabledTime = a} :: DescribeFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @enabling@ state.
+describeFastSnapshotRestoreSuccessItem_enablingTime :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+describeFastSnapshotRestoreSuccessItem_enablingTime = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {enablingTime} -> enablingTime) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {enablingTime = a} :: DescribeFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @optimizing@ state.
+describeFastSnapshotRestoreSuccessItem_optimizingTime :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+describeFastSnapshotRestoreSuccessItem_optimizingTime = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {optimizingTime} -> optimizingTime) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {optimizingTime = a} :: DescribeFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Web Services owner alias that enabled fast snapshot restores
+-- on the snapshot. This is intended for future use.
+describeFastSnapshotRestoreSuccessItem_ownerAlias :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestoreSuccessItem_ownerAlias = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {ownerAlias} -> ownerAlias) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {ownerAlias = a} :: DescribeFastSnapshotRestoreSuccessItem)
+
+-- | The ID of the Amazon Web Services account that enabled fast snapshot
+-- restores on the snapshot.
+describeFastSnapshotRestoreSuccessItem_ownerId :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestoreSuccessItem_ownerId = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {ownerId} -> ownerId) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {ownerId = a} :: DescribeFastSnapshotRestoreSuccessItem)
+
+-- | The ID of the snapshot.
+describeFastSnapshotRestoreSuccessItem_snapshotId :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestoreSuccessItem_snapshotId = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {snapshotId} -> snapshotId) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {snapshotId = a} :: DescribeFastSnapshotRestoreSuccessItem)
+
+-- | The state of fast snapshot restores.
+describeFastSnapshotRestoreSuccessItem_state :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe FastSnapshotRestoreStateCode)
+describeFastSnapshotRestoreSuccessItem_state = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {state} -> state) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {state = a} :: DescribeFastSnapshotRestoreSuccessItem)
+
+-- | The reason for the state transition. The possible values are as follows:
+--
+-- -   @Client.UserInitiated@ - The state successfully transitioned to
+--     @enabling@ or @disabling@.
+--
+-- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+--     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+describeFastSnapshotRestoreSuccessItem_stateTransitionReason :: Lens.Lens' DescribeFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+describeFastSnapshotRestoreSuccessItem_stateTransitionReason = Lens.lens (\DescribeFastSnapshotRestoreSuccessItem' {stateTransitionReason} -> stateTransitionReason) (\s@DescribeFastSnapshotRestoreSuccessItem' {} a -> s {stateTransitionReason = a} :: DescribeFastSnapshotRestoreSuccessItem)
+
+instance
+  Data.FromXML
+    DescribeFastSnapshotRestoreSuccessItem
+  where
+  parseXML x =
+    DescribeFastSnapshotRestoreSuccessItem'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "disabledTime")
+      Prelude.<*> (x Data..@? "disablingTime")
+      Prelude.<*> (x Data..@? "enabledTime")
+      Prelude.<*> (x Data..@? "enablingTime")
+      Prelude.<*> (x Data..@? "optimizingTime")
+      Prelude.<*> (x Data..@? "ownerAlias")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateTransitionReason")
+
+instance
+  Prelude.Hashable
+    DescribeFastSnapshotRestoreSuccessItem
+  where
+  hashWithSalt
+    _salt
+    DescribeFastSnapshotRestoreSuccessItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` disabledTime
+        `Prelude.hashWithSalt` disablingTime
+        `Prelude.hashWithSalt` enabledTime
+        `Prelude.hashWithSalt` enablingTime
+        `Prelude.hashWithSalt` optimizingTime
+        `Prelude.hashWithSalt` ownerAlias
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` snapshotId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` stateTransitionReason
+
+instance
+  Prelude.NFData
+    DescribeFastSnapshotRestoreSuccessItem
+  where
+  rnf DescribeFastSnapshotRestoreSuccessItem' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf disabledTime
+      `Prelude.seq` Prelude.rnf disablingTime
+      `Prelude.seq` Prelude.rnf enabledTime
+      `Prelude.seq` Prelude.rnf enablingTime
+      `Prelude.seq` Prelude.rnf optimizingTime
+      `Prelude.seq` Prelude.rnf ownerAlias
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateTransitionReason
diff --git a/gen/Amazonka/EC2/Types/DescribeFleetError.hs b/gen/Amazonka/EC2/Types/DescribeFleetError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DescribeFleetError.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DescribeFleetError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DescribeFleetError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceLifecycle
+import Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instances that could not be launched by the fleet.
+--
+-- /See:/ 'newDescribeFleetError' smart constructor.
+data DescribeFleetError = DescribeFleetError'
+  { -- | The error code that indicates why the instance could not be launched.
+    -- For more information about error codes, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+    errorCode :: Prelude.Maybe Prelude.Text,
+    -- | The error message that describes why the instance could not be launched.
+    -- For more information about error messages, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The launch templates and overrides that were used for launching the
+    -- instances. The values that you specify in the Overrides replace the
+    -- values in the launch template.
+    launchTemplateAndOverrides :: Prelude.Maybe LaunchTemplateAndOverridesResponse,
+    -- | Indicates if the instance that could not be launched was a Spot Instance
+    -- or On-Demand Instance.
+    lifecycle :: Prelude.Maybe InstanceLifecycle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'describeFleetError_errorCode' - The error code that indicates why the instance could not be launched.
+-- For more information about error codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+--
+-- 'errorMessage', 'describeFleetError_errorMessage' - The error message that describes why the instance could not be launched.
+-- For more information about error messages, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+--
+-- 'launchTemplateAndOverrides', 'describeFleetError_launchTemplateAndOverrides' - The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+--
+-- 'lifecycle', 'describeFleetError_lifecycle' - Indicates if the instance that could not be launched was a Spot Instance
+-- or On-Demand Instance.
+newDescribeFleetError ::
+  DescribeFleetError
+newDescribeFleetError =
+  DescribeFleetError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      launchTemplateAndOverrides = Prelude.Nothing,
+      lifecycle = Prelude.Nothing
+    }
+
+-- | The error code that indicates why the instance could not be launched.
+-- For more information about error codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+describeFleetError_errorCode :: Lens.Lens' DescribeFleetError (Prelude.Maybe Prelude.Text)
+describeFleetError_errorCode = Lens.lens (\DescribeFleetError' {errorCode} -> errorCode) (\s@DescribeFleetError' {} a -> s {errorCode = a} :: DescribeFleetError)
+
+-- | The error message that describes why the instance could not be launched.
+-- For more information about error messages, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html Error codes>.
+describeFleetError_errorMessage :: Lens.Lens' DescribeFleetError (Prelude.Maybe Prelude.Text)
+describeFleetError_errorMessage = Lens.lens (\DescribeFleetError' {errorMessage} -> errorMessage) (\s@DescribeFleetError' {} a -> s {errorMessage = a} :: DescribeFleetError)
+
+-- | The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+describeFleetError_launchTemplateAndOverrides :: Lens.Lens' DescribeFleetError (Prelude.Maybe LaunchTemplateAndOverridesResponse)
+describeFleetError_launchTemplateAndOverrides = Lens.lens (\DescribeFleetError' {launchTemplateAndOverrides} -> launchTemplateAndOverrides) (\s@DescribeFleetError' {} a -> s {launchTemplateAndOverrides = a} :: DescribeFleetError)
+
+-- | Indicates if the instance that could not be launched was a Spot Instance
+-- or On-Demand Instance.
+describeFleetError_lifecycle :: Lens.Lens' DescribeFleetError (Prelude.Maybe InstanceLifecycle)
+describeFleetError_lifecycle = Lens.lens (\DescribeFleetError' {lifecycle} -> lifecycle) (\s@DescribeFleetError' {} a -> s {lifecycle = a} :: DescribeFleetError)
+
+instance Data.FromXML DescribeFleetError where
+  parseXML x =
+    DescribeFleetError'
+      Prelude.<$> (x Data..@? "errorCode")
+      Prelude.<*> (x Data..@? "errorMessage")
+      Prelude.<*> (x Data..@? "launchTemplateAndOverrides")
+      Prelude.<*> (x Data..@? "lifecycle")
+
+instance Prelude.Hashable DescribeFleetError where
+  hashWithSalt _salt DescribeFleetError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` launchTemplateAndOverrides
+      `Prelude.hashWithSalt` lifecycle
+
+instance Prelude.NFData DescribeFleetError where
+  rnf DescribeFleetError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf launchTemplateAndOverrides
+      `Prelude.seq` Prelude.rnf lifecycle
diff --git a/gen/Amazonka/EC2/Types/DescribeFleetsInstances.hs b/gen/Amazonka/EC2/Types/DescribeFleetsInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DescribeFleetsInstances.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DescribeFleetsInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DescribeFleetsInstances where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceLifecycle
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+import Amazonka.EC2.Types.PlatformValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instances that were launched by the fleet.
+--
+-- /See:/ 'newDescribeFleetsInstances' smart constructor.
+data DescribeFleetsInstances = DescribeFleetsInstances'
+  { -- | The IDs of the instances.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The instance type.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The launch templates and overrides that were used for launching the
+    -- instances. The values that you specify in the Overrides replace the
+    -- values in the launch template.
+    launchTemplateAndOverrides :: Prelude.Maybe LaunchTemplateAndOverridesResponse,
+    -- | Indicates if the instance that was launched is a Spot Instance or
+    -- On-Demand Instance.
+    lifecycle :: Prelude.Maybe InstanceLifecycle,
+    -- | The value is @Windows@ for Windows instances. Otherwise, the value is
+    -- blank.
+    platform :: Prelude.Maybe PlatformValues
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleetsInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceIds', 'describeFleetsInstances_instanceIds' - The IDs of the instances.
+--
+-- 'instanceType', 'describeFleetsInstances_instanceType' - The instance type.
+--
+-- 'launchTemplateAndOverrides', 'describeFleetsInstances_launchTemplateAndOverrides' - The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+--
+-- 'lifecycle', 'describeFleetsInstances_lifecycle' - Indicates if the instance that was launched is a Spot Instance or
+-- On-Demand Instance.
+--
+-- 'platform', 'describeFleetsInstances_platform' - The value is @Windows@ for Windows instances. Otherwise, the value is
+-- blank.
+newDescribeFleetsInstances ::
+  DescribeFleetsInstances
+newDescribeFleetsInstances =
+  DescribeFleetsInstances'
+    { instanceIds =
+        Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      launchTemplateAndOverrides = Prelude.Nothing,
+      lifecycle = Prelude.Nothing,
+      platform = Prelude.Nothing
+    }
+
+-- | The IDs of the instances.
+describeFleetsInstances_instanceIds :: Lens.Lens' DescribeFleetsInstances (Prelude.Maybe [Prelude.Text])
+describeFleetsInstances_instanceIds = Lens.lens (\DescribeFleetsInstances' {instanceIds} -> instanceIds) (\s@DescribeFleetsInstances' {} a -> s {instanceIds = a} :: DescribeFleetsInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type.
+describeFleetsInstances_instanceType :: Lens.Lens' DescribeFleetsInstances (Prelude.Maybe InstanceType)
+describeFleetsInstances_instanceType = Lens.lens (\DescribeFleetsInstances' {instanceType} -> instanceType) (\s@DescribeFleetsInstances' {} a -> s {instanceType = a} :: DescribeFleetsInstances)
+
+-- | The launch templates and overrides that were used for launching the
+-- instances. The values that you specify in the Overrides replace the
+-- values in the launch template.
+describeFleetsInstances_launchTemplateAndOverrides :: Lens.Lens' DescribeFleetsInstances (Prelude.Maybe LaunchTemplateAndOverridesResponse)
+describeFleetsInstances_launchTemplateAndOverrides = Lens.lens (\DescribeFleetsInstances' {launchTemplateAndOverrides} -> launchTemplateAndOverrides) (\s@DescribeFleetsInstances' {} a -> s {launchTemplateAndOverrides = a} :: DescribeFleetsInstances)
+
+-- | Indicates if the instance that was launched is a Spot Instance or
+-- On-Demand Instance.
+describeFleetsInstances_lifecycle :: Lens.Lens' DescribeFleetsInstances (Prelude.Maybe InstanceLifecycle)
+describeFleetsInstances_lifecycle = Lens.lens (\DescribeFleetsInstances' {lifecycle} -> lifecycle) (\s@DescribeFleetsInstances' {} a -> s {lifecycle = a} :: DescribeFleetsInstances)
+
+-- | The value is @Windows@ for Windows instances. Otherwise, the value is
+-- blank.
+describeFleetsInstances_platform :: Lens.Lens' DescribeFleetsInstances (Prelude.Maybe PlatformValues)
+describeFleetsInstances_platform = Lens.lens (\DescribeFleetsInstances' {platform} -> platform) (\s@DescribeFleetsInstances' {} a -> s {platform = a} :: DescribeFleetsInstances)
+
+instance Data.FromXML DescribeFleetsInstances where
+  parseXML x =
+    DescribeFleetsInstances'
+      Prelude.<$> ( x
+                      Data..@? "instanceIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "launchTemplateAndOverrides")
+      Prelude.<*> (x Data..@? "lifecycle")
+      Prelude.<*> (x Data..@? "platform")
+
+instance Prelude.Hashable DescribeFleetsInstances where
+  hashWithSalt _salt DescribeFleetsInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceIds
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` launchTemplateAndOverrides
+      `Prelude.hashWithSalt` lifecycle
+      `Prelude.hashWithSalt` platform
+
+instance Prelude.NFData DescribeFleetsInstances where
+  rnf DescribeFleetsInstances' {..} =
+    Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf launchTemplateAndOverrides
+      `Prelude.seq` Prelude.rnf lifecycle
+      `Prelude.seq` Prelude.rnf platform
diff --git a/gen/Amazonka/EC2/Types/DestinationFileFormat.hs b/gen/Amazonka/EC2/Types/DestinationFileFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DestinationFileFormat.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DestinationFileFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DestinationFileFormat
+  ( DestinationFileFormat
+      ( ..,
+        DestinationFileFormat_Parquet,
+        DestinationFileFormat_Plain_text
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DestinationFileFormat = DestinationFileFormat'
+  { fromDestinationFileFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DestinationFileFormat_Parquet :: DestinationFileFormat
+pattern DestinationFileFormat_Parquet = DestinationFileFormat' "parquet"
+
+pattern DestinationFileFormat_Plain_text :: DestinationFileFormat
+pattern DestinationFileFormat_Plain_text = DestinationFileFormat' "plain-text"
+
+{-# COMPLETE
+  DestinationFileFormat_Parquet,
+  DestinationFileFormat_Plain_text,
+  DestinationFileFormat'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DestinationOptionsRequest.hs b/gen/Amazonka/EC2/Types/DestinationOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DestinationOptionsRequest.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DestinationOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DestinationOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DestinationFileFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the destination options for a flow log.
+--
+-- /See:/ 'newDestinationOptionsRequest' smart constructor.
+data DestinationOptionsRequest = DestinationOptionsRequest'
+  { -- | The format for the flow log. The default is @plain-text@.
+    fileFormat :: Prelude.Maybe DestinationFileFormat,
+    -- | Indicates whether to use Hive-compatible prefixes for flow logs stored
+    -- in Amazon S3. The default is @false@.
+    hiveCompatiblePartitions :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to partition the flow log per hour. This reduces the
+    -- cost and response time for queries. The default is @false@.
+    perHourPartition :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DestinationOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileFormat', 'destinationOptionsRequest_fileFormat' - The format for the flow log. The default is @plain-text@.
+--
+-- 'hiveCompatiblePartitions', 'destinationOptionsRequest_hiveCompatiblePartitions' - Indicates whether to use Hive-compatible prefixes for flow logs stored
+-- in Amazon S3. The default is @false@.
+--
+-- 'perHourPartition', 'destinationOptionsRequest_perHourPartition' - Indicates whether to partition the flow log per hour. This reduces the
+-- cost and response time for queries. The default is @false@.
+newDestinationOptionsRequest ::
+  DestinationOptionsRequest
+newDestinationOptionsRequest =
+  DestinationOptionsRequest'
+    { fileFormat =
+        Prelude.Nothing,
+      hiveCompatiblePartitions = Prelude.Nothing,
+      perHourPartition = Prelude.Nothing
+    }
+
+-- | The format for the flow log. The default is @plain-text@.
+destinationOptionsRequest_fileFormat :: Lens.Lens' DestinationOptionsRequest (Prelude.Maybe DestinationFileFormat)
+destinationOptionsRequest_fileFormat = Lens.lens (\DestinationOptionsRequest' {fileFormat} -> fileFormat) (\s@DestinationOptionsRequest' {} a -> s {fileFormat = a} :: DestinationOptionsRequest)
+
+-- | Indicates whether to use Hive-compatible prefixes for flow logs stored
+-- in Amazon S3. The default is @false@.
+destinationOptionsRequest_hiveCompatiblePartitions :: Lens.Lens' DestinationOptionsRequest (Prelude.Maybe Prelude.Bool)
+destinationOptionsRequest_hiveCompatiblePartitions = Lens.lens (\DestinationOptionsRequest' {hiveCompatiblePartitions} -> hiveCompatiblePartitions) (\s@DestinationOptionsRequest' {} a -> s {hiveCompatiblePartitions = a} :: DestinationOptionsRequest)
+
+-- | Indicates whether to partition the flow log per hour. This reduces the
+-- cost and response time for queries. The default is @false@.
+destinationOptionsRequest_perHourPartition :: Lens.Lens' DestinationOptionsRequest (Prelude.Maybe Prelude.Bool)
+destinationOptionsRequest_perHourPartition = Lens.lens (\DestinationOptionsRequest' {perHourPartition} -> perHourPartition) (\s@DestinationOptionsRequest' {} a -> s {perHourPartition = a} :: DestinationOptionsRequest)
+
+instance Prelude.Hashable DestinationOptionsRequest where
+  hashWithSalt _salt DestinationOptionsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileFormat
+      `Prelude.hashWithSalt` hiveCompatiblePartitions
+      `Prelude.hashWithSalt` perHourPartition
+
+instance Prelude.NFData DestinationOptionsRequest where
+  rnf DestinationOptionsRequest' {..} =
+    Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf hiveCompatiblePartitions
+      `Prelude.seq` Prelude.rnf perHourPartition
+
+instance Data.ToQuery DestinationOptionsRequest where
+  toQuery DestinationOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "FileFormat" Data.=: fileFormat,
+        "HiveCompatiblePartitions"
+          Data.=: hiveCompatiblePartitions,
+        "PerHourPartition" Data.=: perHourPartition
+      ]
diff --git a/gen/Amazonka/EC2/Types/DestinationOptionsResponse.hs b/gen/Amazonka/EC2/Types/DestinationOptionsResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DestinationOptionsResponse.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DestinationOptionsResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DestinationOptionsResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DestinationFileFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the destination options for a flow log.
+--
+-- /See:/ 'newDestinationOptionsResponse' smart constructor.
+data DestinationOptionsResponse = DestinationOptionsResponse'
+  { -- | The format for the flow log.
+    fileFormat :: Prelude.Maybe DestinationFileFormat,
+    -- | Indicates whether to use Hive-compatible prefixes for flow logs stored
+    -- in Amazon S3.
+    hiveCompatiblePartitions :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to partition the flow log per hour.
+    perHourPartition :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DestinationOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fileFormat', 'destinationOptionsResponse_fileFormat' - The format for the flow log.
+--
+-- 'hiveCompatiblePartitions', 'destinationOptionsResponse_hiveCompatiblePartitions' - Indicates whether to use Hive-compatible prefixes for flow logs stored
+-- in Amazon S3.
+--
+-- 'perHourPartition', 'destinationOptionsResponse_perHourPartition' - Indicates whether to partition the flow log per hour.
+newDestinationOptionsResponse ::
+  DestinationOptionsResponse
+newDestinationOptionsResponse =
+  DestinationOptionsResponse'
+    { fileFormat =
+        Prelude.Nothing,
+      hiveCompatiblePartitions = Prelude.Nothing,
+      perHourPartition = Prelude.Nothing
+    }
+
+-- | The format for the flow log.
+destinationOptionsResponse_fileFormat :: Lens.Lens' DestinationOptionsResponse (Prelude.Maybe DestinationFileFormat)
+destinationOptionsResponse_fileFormat = Lens.lens (\DestinationOptionsResponse' {fileFormat} -> fileFormat) (\s@DestinationOptionsResponse' {} a -> s {fileFormat = a} :: DestinationOptionsResponse)
+
+-- | Indicates whether to use Hive-compatible prefixes for flow logs stored
+-- in Amazon S3.
+destinationOptionsResponse_hiveCompatiblePartitions :: Lens.Lens' DestinationOptionsResponse (Prelude.Maybe Prelude.Bool)
+destinationOptionsResponse_hiveCompatiblePartitions = Lens.lens (\DestinationOptionsResponse' {hiveCompatiblePartitions} -> hiveCompatiblePartitions) (\s@DestinationOptionsResponse' {} a -> s {hiveCompatiblePartitions = a} :: DestinationOptionsResponse)
+
+-- | Indicates whether to partition the flow log per hour.
+destinationOptionsResponse_perHourPartition :: Lens.Lens' DestinationOptionsResponse (Prelude.Maybe Prelude.Bool)
+destinationOptionsResponse_perHourPartition = Lens.lens (\DestinationOptionsResponse' {perHourPartition} -> perHourPartition) (\s@DestinationOptionsResponse' {} a -> s {perHourPartition = a} :: DestinationOptionsResponse)
+
+instance Data.FromXML DestinationOptionsResponse where
+  parseXML x =
+    DestinationOptionsResponse'
+      Prelude.<$> (x Data..@? "fileFormat")
+      Prelude.<*> (x Data..@? "hiveCompatiblePartitions")
+      Prelude.<*> (x Data..@? "perHourPartition")
+
+instance Prelude.Hashable DestinationOptionsResponse where
+  hashWithSalt _salt DestinationOptionsResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` fileFormat
+      `Prelude.hashWithSalt` hiveCompatiblePartitions
+      `Prelude.hashWithSalt` perHourPartition
+
+instance Prelude.NFData DestinationOptionsResponse where
+  rnf DestinationOptionsResponse' {..} =
+    Prelude.rnf fileFormat
+      `Prelude.seq` Prelude.rnf hiveCompatiblePartitions
+      `Prelude.seq` Prelude.rnf perHourPartition
diff --git a/gen/Amazonka/EC2/Types/DeviceOptions.hs b/gen/Amazonka/EC2/Types/DeviceOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeviceOptions.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeviceOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeviceOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for an Amazon Web Services Verified Access device-identity based
+-- trust provider.
+--
+-- /See:/ 'newDeviceOptions' smart constructor.
+data DeviceOptions = DeviceOptions'
+  { -- | The ID of the tenant application with the device-identity provider.
+    tenantId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tenantId', 'deviceOptions_tenantId' - The ID of the tenant application with the device-identity provider.
+newDeviceOptions ::
+  DeviceOptions
+newDeviceOptions =
+  DeviceOptions' {tenantId = Prelude.Nothing}
+
+-- | The ID of the tenant application with the device-identity provider.
+deviceOptions_tenantId :: Lens.Lens' DeviceOptions (Prelude.Maybe Prelude.Text)
+deviceOptions_tenantId = Lens.lens (\DeviceOptions' {tenantId} -> tenantId) (\s@DeviceOptions' {} a -> s {tenantId = a} :: DeviceOptions)
+
+instance Data.FromXML DeviceOptions where
+  parseXML x =
+    DeviceOptions' Prelude.<$> (x Data..@? "tenantId")
+
+instance Prelude.Hashable DeviceOptions where
+  hashWithSalt _salt DeviceOptions' {..} =
+    _salt `Prelude.hashWithSalt` tenantId
+
+instance Prelude.NFData DeviceOptions where
+  rnf DeviceOptions' {..} = Prelude.rnf tenantId
diff --git a/gen/Amazonka/EC2/Types/DeviceTrustProviderType.hs b/gen/Amazonka/EC2/Types/DeviceTrustProviderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeviceTrustProviderType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeviceTrustProviderType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeviceTrustProviderType
+  ( DeviceTrustProviderType
+      ( ..,
+        DeviceTrustProviderType_Crowdstrike,
+        DeviceTrustProviderType_Jamf
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceTrustProviderType = DeviceTrustProviderType'
+  { fromDeviceTrustProviderType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceTrustProviderType_Crowdstrike :: DeviceTrustProviderType
+pattern DeviceTrustProviderType_Crowdstrike = DeviceTrustProviderType' "crowdstrike"
+
+pattern DeviceTrustProviderType_Jamf :: DeviceTrustProviderType
+pattern DeviceTrustProviderType_Jamf = DeviceTrustProviderType' "jamf"
+
+{-# COMPLETE
+  DeviceTrustProviderType_Crowdstrike,
+  DeviceTrustProviderType_Jamf,
+  DeviceTrustProviderType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DeviceType.hs b/gen/Amazonka/EC2/Types/DeviceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DeviceType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DeviceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DeviceType
+  ( DeviceType
+      ( ..,
+        DeviceType_Ebs,
+        DeviceType_Instance_store
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceType = DeviceType'
+  { fromDeviceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceType_Ebs :: DeviceType
+pattern DeviceType_Ebs = DeviceType' "ebs"
+
+pattern DeviceType_Instance_store :: DeviceType
+pattern DeviceType_Instance_store = DeviceType' "instance-store"
+
+{-# COMPLETE
+  DeviceType_Ebs,
+  DeviceType_Instance_store,
+  DeviceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DhcpConfiguration.hs b/gen/Amazonka/EC2/Types/DhcpConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DhcpConfiguration.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DhcpConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DhcpConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttributeValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a DHCP configuration option.
+--
+-- /See:/ 'newDhcpConfiguration' smart constructor.
+data DhcpConfiguration = DhcpConfiguration'
+  { -- | The name of a DHCP option.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | One or more values for the DHCP option.
+    values :: Prelude.Maybe [AttributeValue]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DhcpConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'dhcpConfiguration_key' - The name of a DHCP option.
+--
+-- 'values', 'dhcpConfiguration_values' - One or more values for the DHCP option.
+newDhcpConfiguration ::
+  DhcpConfiguration
+newDhcpConfiguration =
+  DhcpConfiguration'
+    { key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | The name of a DHCP option.
+dhcpConfiguration_key :: Lens.Lens' DhcpConfiguration (Prelude.Maybe Prelude.Text)
+dhcpConfiguration_key = Lens.lens (\DhcpConfiguration' {key} -> key) (\s@DhcpConfiguration' {} a -> s {key = a} :: DhcpConfiguration)
+
+-- | One or more values for the DHCP option.
+dhcpConfiguration_values :: Lens.Lens' DhcpConfiguration (Prelude.Maybe [AttributeValue])
+dhcpConfiguration_values = Lens.lens (\DhcpConfiguration' {values} -> values) (\s@DhcpConfiguration' {} a -> s {values = a} :: DhcpConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML DhcpConfiguration where
+  parseXML x =
+    DhcpConfiguration'
+      Prelude.<$> (x Data..@? "key")
+      Prelude.<*> ( x
+                      Data..@? "valueSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable DhcpConfiguration where
+  hashWithSalt _salt DhcpConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData DhcpConfiguration where
+  rnf DhcpConfiguration' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf values
diff --git a/gen/Amazonka/EC2/Types/DhcpOptions.hs b/gen/Amazonka/EC2/Types/DhcpOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DhcpOptions.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DhcpOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DhcpOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DhcpConfiguration
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a set of DHCP options.
+--
+-- /See:/ 'newDhcpOptions' smart constructor.
+data DhcpOptions = DhcpOptions'
+  { -- | One or more DHCP options in the set.
+    dhcpConfigurations :: Prelude.Maybe [DhcpConfiguration],
+    -- | The ID of the set of DHCP options.
+    dhcpOptionsId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the DHCP options
+    -- set.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the DHCP options set.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DhcpOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dhcpConfigurations', 'dhcpOptions_dhcpConfigurations' - One or more DHCP options in the set.
+--
+-- 'dhcpOptionsId', 'dhcpOptions_dhcpOptionsId' - The ID of the set of DHCP options.
+--
+-- 'ownerId', 'dhcpOptions_ownerId' - The ID of the Amazon Web Services account that owns the DHCP options
+-- set.
+--
+-- 'tags', 'dhcpOptions_tags' - Any tags assigned to the DHCP options set.
+newDhcpOptions ::
+  DhcpOptions
+newDhcpOptions =
+  DhcpOptions'
+    { dhcpConfigurations = Prelude.Nothing,
+      dhcpOptionsId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | One or more DHCP options in the set.
+dhcpOptions_dhcpConfigurations :: Lens.Lens' DhcpOptions (Prelude.Maybe [DhcpConfiguration])
+dhcpOptions_dhcpConfigurations = Lens.lens (\DhcpOptions' {dhcpConfigurations} -> dhcpConfigurations) (\s@DhcpOptions' {} a -> s {dhcpConfigurations = a} :: DhcpOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the set of DHCP options.
+dhcpOptions_dhcpOptionsId :: Lens.Lens' DhcpOptions (Prelude.Maybe Prelude.Text)
+dhcpOptions_dhcpOptionsId = Lens.lens (\DhcpOptions' {dhcpOptionsId} -> dhcpOptionsId) (\s@DhcpOptions' {} a -> s {dhcpOptionsId = a} :: DhcpOptions)
+
+-- | The ID of the Amazon Web Services account that owns the DHCP options
+-- set.
+dhcpOptions_ownerId :: Lens.Lens' DhcpOptions (Prelude.Maybe Prelude.Text)
+dhcpOptions_ownerId = Lens.lens (\DhcpOptions' {ownerId} -> ownerId) (\s@DhcpOptions' {} a -> s {ownerId = a} :: DhcpOptions)
+
+-- | Any tags assigned to the DHCP options set.
+dhcpOptions_tags :: Lens.Lens' DhcpOptions (Prelude.Maybe [Tag])
+dhcpOptions_tags = Lens.lens (\DhcpOptions' {tags} -> tags) (\s@DhcpOptions' {} a -> s {tags = a} :: DhcpOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML DhcpOptions where
+  parseXML x =
+    DhcpOptions'
+      Prelude.<$> ( x
+                      Data..@? "dhcpConfigurationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "dhcpOptionsId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable DhcpOptions where
+  hashWithSalt _salt DhcpOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` dhcpConfigurations
+      `Prelude.hashWithSalt` dhcpOptionsId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData DhcpOptions where
+  rnf DhcpOptions' {..} =
+    Prelude.rnf dhcpConfigurations
+      `Prelude.seq` Prelude.rnf dhcpOptionsId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/DirectoryServiceAuthentication.hs b/gen/Amazonka/EC2/Types/DirectoryServiceAuthentication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DirectoryServiceAuthentication.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DirectoryServiceAuthentication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DirectoryServiceAuthentication where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Active Directory.
+--
+-- /See:/ 'newDirectoryServiceAuthentication' smart constructor.
+data DirectoryServiceAuthentication = DirectoryServiceAuthentication'
+  { -- | The ID of the Active Directory used for authentication.
+    directoryId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DirectoryServiceAuthentication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryId', 'directoryServiceAuthentication_directoryId' - The ID of the Active Directory used for authentication.
+newDirectoryServiceAuthentication ::
+  DirectoryServiceAuthentication
+newDirectoryServiceAuthentication =
+  DirectoryServiceAuthentication'
+    { directoryId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the Active Directory used for authentication.
+directoryServiceAuthentication_directoryId :: Lens.Lens' DirectoryServiceAuthentication (Prelude.Maybe Prelude.Text)
+directoryServiceAuthentication_directoryId = Lens.lens (\DirectoryServiceAuthentication' {directoryId} -> directoryId) (\s@DirectoryServiceAuthentication' {} a -> s {directoryId = a} :: DirectoryServiceAuthentication)
+
+instance Data.FromXML DirectoryServiceAuthentication where
+  parseXML x =
+    DirectoryServiceAuthentication'
+      Prelude.<$> (x Data..@? "directoryId")
+
+instance
+  Prelude.Hashable
+    DirectoryServiceAuthentication
+  where
+  hashWithSalt
+    _salt
+    DirectoryServiceAuthentication' {..} =
+      _salt `Prelude.hashWithSalt` directoryId
+
+instance
+  Prelude.NFData
+    DirectoryServiceAuthentication
+  where
+  rnf DirectoryServiceAuthentication' {..} =
+    Prelude.rnf directoryId
diff --git a/gen/Amazonka/EC2/Types/DirectoryServiceAuthenticationRequest.hs b/gen/Amazonka/EC2/Types/DirectoryServiceAuthenticationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DirectoryServiceAuthenticationRequest.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DirectoryServiceAuthenticationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DirectoryServiceAuthenticationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Active Directory to be used for client authentication.
+--
+-- /See:/ 'newDirectoryServiceAuthenticationRequest' smart constructor.
+data DirectoryServiceAuthenticationRequest = DirectoryServiceAuthenticationRequest'
+  { -- | The ID of the Active Directory to be used for authentication.
+    directoryId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DirectoryServiceAuthenticationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryId', 'directoryServiceAuthenticationRequest_directoryId' - The ID of the Active Directory to be used for authentication.
+newDirectoryServiceAuthenticationRequest ::
+  DirectoryServiceAuthenticationRequest
+newDirectoryServiceAuthenticationRequest =
+  DirectoryServiceAuthenticationRequest'
+    { directoryId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the Active Directory to be used for authentication.
+directoryServiceAuthenticationRequest_directoryId :: Lens.Lens' DirectoryServiceAuthenticationRequest (Prelude.Maybe Prelude.Text)
+directoryServiceAuthenticationRequest_directoryId = Lens.lens (\DirectoryServiceAuthenticationRequest' {directoryId} -> directoryId) (\s@DirectoryServiceAuthenticationRequest' {} a -> s {directoryId = a} :: DirectoryServiceAuthenticationRequest)
+
+instance
+  Prelude.Hashable
+    DirectoryServiceAuthenticationRequest
+  where
+  hashWithSalt
+    _salt
+    DirectoryServiceAuthenticationRequest' {..} =
+      _salt `Prelude.hashWithSalt` directoryId
+
+instance
+  Prelude.NFData
+    DirectoryServiceAuthenticationRequest
+  where
+  rnf DirectoryServiceAuthenticationRequest' {..} =
+    Prelude.rnf directoryId
+
+instance
+  Data.ToQuery
+    DirectoryServiceAuthenticationRequest
+  where
+  toQuery DirectoryServiceAuthenticationRequest' {..} =
+    Prelude.mconcat ["DirectoryId" Data.=: directoryId]
diff --git a/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreErrorItem.hs b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreErrorItem.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DisableFastSnapshotRestoreErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DisableFastSnapshotRestoreErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreStateErrorItem
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the errors that occurred when disabling fast
+-- snapshot restores.
+--
+-- /See:/ 'newDisableFastSnapshotRestoreErrorItem' smart constructor.
+data DisableFastSnapshotRestoreErrorItem = DisableFastSnapshotRestoreErrorItem'
+  { -- | The errors.
+    fastSnapshotRestoreStateErrors :: Prelude.Maybe [DisableFastSnapshotRestoreStateErrorItem],
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastSnapshotRestoreErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fastSnapshotRestoreStateErrors', 'disableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors' - The errors.
+--
+-- 'snapshotId', 'disableFastSnapshotRestoreErrorItem_snapshotId' - The ID of the snapshot.
+newDisableFastSnapshotRestoreErrorItem ::
+  DisableFastSnapshotRestoreErrorItem
+newDisableFastSnapshotRestoreErrorItem =
+  DisableFastSnapshotRestoreErrorItem'
+    { fastSnapshotRestoreStateErrors =
+        Prelude.Nothing,
+      snapshotId = Prelude.Nothing
+    }
+
+-- | The errors.
+disableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors :: Lens.Lens' DisableFastSnapshotRestoreErrorItem (Prelude.Maybe [DisableFastSnapshotRestoreStateErrorItem])
+disableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors = Lens.lens (\DisableFastSnapshotRestoreErrorItem' {fastSnapshotRestoreStateErrors} -> fastSnapshotRestoreStateErrors) (\s@DisableFastSnapshotRestoreErrorItem' {} a -> s {fastSnapshotRestoreStateErrors = a} :: DisableFastSnapshotRestoreErrorItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the snapshot.
+disableFastSnapshotRestoreErrorItem_snapshotId :: Lens.Lens' DisableFastSnapshotRestoreErrorItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreErrorItem_snapshotId = Lens.lens (\DisableFastSnapshotRestoreErrorItem' {snapshotId} -> snapshotId) (\s@DisableFastSnapshotRestoreErrorItem' {} a -> s {snapshotId = a} :: DisableFastSnapshotRestoreErrorItem)
+
+instance
+  Data.FromXML
+    DisableFastSnapshotRestoreErrorItem
+  where
+  parseXML x =
+    DisableFastSnapshotRestoreErrorItem'
+      Prelude.<$> ( x
+                      Data..@? "fastSnapshotRestoreStateErrorSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "snapshotId")
+
+instance
+  Prelude.Hashable
+    DisableFastSnapshotRestoreErrorItem
+  where
+  hashWithSalt
+    _salt
+    DisableFastSnapshotRestoreErrorItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` fastSnapshotRestoreStateErrors
+        `Prelude.hashWithSalt` snapshotId
+
+instance
+  Prelude.NFData
+    DisableFastSnapshotRestoreErrorItem
+  where
+  rnf DisableFastSnapshotRestoreErrorItem' {..} =
+    Prelude.rnf fastSnapshotRestoreStateErrors
+      `Prelude.seq` Prelude.rnf snapshotId
diff --git a/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreStateError.hs b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreStateError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreStateError.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DisableFastSnapshotRestoreStateError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DisableFastSnapshotRestoreStateError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an error that occurred when disabling fast snapshot restores.
+--
+-- /See:/ 'newDisableFastSnapshotRestoreStateError' smart constructor.
+data DisableFastSnapshotRestoreStateError = DisableFastSnapshotRestoreStateError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastSnapshotRestoreStateError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'disableFastSnapshotRestoreStateError_code' - The error code.
+--
+-- 'message', 'disableFastSnapshotRestoreStateError_message' - The error message.
+newDisableFastSnapshotRestoreStateError ::
+  DisableFastSnapshotRestoreStateError
+newDisableFastSnapshotRestoreStateError =
+  DisableFastSnapshotRestoreStateError'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+disableFastSnapshotRestoreStateError_code :: Lens.Lens' DisableFastSnapshotRestoreStateError (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreStateError_code = Lens.lens (\DisableFastSnapshotRestoreStateError' {code} -> code) (\s@DisableFastSnapshotRestoreStateError' {} a -> s {code = a} :: DisableFastSnapshotRestoreStateError)
+
+-- | The error message.
+disableFastSnapshotRestoreStateError_message :: Lens.Lens' DisableFastSnapshotRestoreStateError (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreStateError_message = Lens.lens (\DisableFastSnapshotRestoreStateError' {message} -> message) (\s@DisableFastSnapshotRestoreStateError' {} a -> s {message = a} :: DisableFastSnapshotRestoreStateError)
+
+instance
+  Data.FromXML
+    DisableFastSnapshotRestoreStateError
+  where
+  parseXML x =
+    DisableFastSnapshotRestoreStateError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    DisableFastSnapshotRestoreStateError
+  where
+  hashWithSalt
+    _salt
+    DisableFastSnapshotRestoreStateError' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    DisableFastSnapshotRestoreStateError
+  where
+  rnf DisableFastSnapshotRestoreStateError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreStateErrorItem.hs b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreStateErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreStateErrorItem.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DisableFastSnapshotRestoreStateErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DisableFastSnapshotRestoreStateErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DisableFastSnapshotRestoreStateError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about an error that occurred when disabling fast
+-- snapshot restores.
+--
+-- /See:/ 'newDisableFastSnapshotRestoreStateErrorItem' smart constructor.
+data DisableFastSnapshotRestoreStateErrorItem = DisableFastSnapshotRestoreStateErrorItem'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The error.
+    error :: Prelude.Maybe DisableFastSnapshotRestoreStateError
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastSnapshotRestoreStateErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'disableFastSnapshotRestoreStateErrorItem_availabilityZone' - The Availability Zone.
+--
+-- 'error', 'disableFastSnapshotRestoreStateErrorItem_error' - The error.
+newDisableFastSnapshotRestoreStateErrorItem ::
+  DisableFastSnapshotRestoreStateErrorItem
+newDisableFastSnapshotRestoreStateErrorItem =
+  DisableFastSnapshotRestoreStateErrorItem'
+    { availabilityZone =
+        Prelude.Nothing,
+      error = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+disableFastSnapshotRestoreStateErrorItem_availabilityZone :: Lens.Lens' DisableFastSnapshotRestoreStateErrorItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreStateErrorItem_availabilityZone = Lens.lens (\DisableFastSnapshotRestoreStateErrorItem' {availabilityZone} -> availabilityZone) (\s@DisableFastSnapshotRestoreStateErrorItem' {} a -> s {availabilityZone = a} :: DisableFastSnapshotRestoreStateErrorItem)
+
+-- | The error.
+disableFastSnapshotRestoreStateErrorItem_error :: Lens.Lens' DisableFastSnapshotRestoreStateErrorItem (Prelude.Maybe DisableFastSnapshotRestoreStateError)
+disableFastSnapshotRestoreStateErrorItem_error = Lens.lens (\DisableFastSnapshotRestoreStateErrorItem' {error} -> error) (\s@DisableFastSnapshotRestoreStateErrorItem' {} a -> s {error = a} :: DisableFastSnapshotRestoreStateErrorItem)
+
+instance
+  Data.FromXML
+    DisableFastSnapshotRestoreStateErrorItem
+  where
+  parseXML x =
+    DisableFastSnapshotRestoreStateErrorItem'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "error")
+
+instance
+  Prelude.Hashable
+    DisableFastSnapshotRestoreStateErrorItem
+  where
+  hashWithSalt
+    _salt
+    DisableFastSnapshotRestoreStateErrorItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` error
+
+instance
+  Prelude.NFData
+    DisableFastSnapshotRestoreStateErrorItem
+  where
+  rnf DisableFastSnapshotRestoreStateErrorItem' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf error
diff --git a/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreSuccessItem.hs b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DisableFastSnapshotRestoreSuccessItem.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DisableFastSnapshotRestoreSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DisableFastSnapshotRestoreSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes fast snapshot restores that were successfully disabled.
+--
+-- /See:/ 'newDisableFastSnapshotRestoreSuccessItem' smart constructor.
+data DisableFastSnapshotRestoreSuccessItem = DisableFastSnapshotRestoreSuccessItem'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The time at which fast snapshot restores entered the @disabled@ state.
+    disabledTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @disabling@ state.
+    disablingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @enabled@ state.
+    enabledTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @enabling@ state.
+    enablingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @optimizing@ state.
+    optimizingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Web Services owner alias that enabled fast snapshot restores
+    -- on the snapshot. This is intended for future use.
+    ownerAlias :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that enabled fast snapshot
+    -- restores on the snapshot.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The state of fast snapshot restores for the snapshot.
+    state :: Prelude.Maybe FastSnapshotRestoreStateCode,
+    -- | The reason for the state transition. The possible values are as follows:
+    --
+    -- -   @Client.UserInitiated@ - The state successfully transitioned to
+    --     @enabling@ or @disabling@.
+    --
+    -- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+    --     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableFastSnapshotRestoreSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'disableFastSnapshotRestoreSuccessItem_availabilityZone' - The Availability Zone.
+--
+-- 'disabledTime', 'disableFastSnapshotRestoreSuccessItem_disabledTime' - The time at which fast snapshot restores entered the @disabled@ state.
+--
+-- 'disablingTime', 'disableFastSnapshotRestoreSuccessItem_disablingTime' - The time at which fast snapshot restores entered the @disabling@ state.
+--
+-- 'enabledTime', 'disableFastSnapshotRestoreSuccessItem_enabledTime' - The time at which fast snapshot restores entered the @enabled@ state.
+--
+-- 'enablingTime', 'disableFastSnapshotRestoreSuccessItem_enablingTime' - The time at which fast snapshot restores entered the @enabling@ state.
+--
+-- 'optimizingTime', 'disableFastSnapshotRestoreSuccessItem_optimizingTime' - The time at which fast snapshot restores entered the @optimizing@ state.
+--
+-- 'ownerAlias', 'disableFastSnapshotRestoreSuccessItem_ownerAlias' - The Amazon Web Services owner alias that enabled fast snapshot restores
+-- on the snapshot. This is intended for future use.
+--
+-- 'ownerId', 'disableFastSnapshotRestoreSuccessItem_ownerId' - The ID of the Amazon Web Services account that enabled fast snapshot
+-- restores on the snapshot.
+--
+-- 'snapshotId', 'disableFastSnapshotRestoreSuccessItem_snapshotId' - The ID of the snapshot.
+--
+-- 'state', 'disableFastSnapshotRestoreSuccessItem_state' - The state of fast snapshot restores for the snapshot.
+--
+-- 'stateTransitionReason', 'disableFastSnapshotRestoreSuccessItem_stateTransitionReason' - The reason for the state transition. The possible values are as follows:
+--
+-- -   @Client.UserInitiated@ - The state successfully transitioned to
+--     @enabling@ or @disabling@.
+--
+-- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+--     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+newDisableFastSnapshotRestoreSuccessItem ::
+  DisableFastSnapshotRestoreSuccessItem
+newDisableFastSnapshotRestoreSuccessItem =
+  DisableFastSnapshotRestoreSuccessItem'
+    { availabilityZone =
+        Prelude.Nothing,
+      disabledTime = Prelude.Nothing,
+      disablingTime = Prelude.Nothing,
+      enabledTime = Prelude.Nothing,
+      enablingTime = Prelude.Nothing,
+      optimizingTime = Prelude.Nothing,
+      ownerAlias = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateTransitionReason =
+        Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+disableFastSnapshotRestoreSuccessItem_availabilityZone :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreSuccessItem_availabilityZone = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {availabilityZone} -> availabilityZone) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {availabilityZone = a} :: DisableFastSnapshotRestoreSuccessItem)
+
+-- | The time at which fast snapshot restores entered the @disabled@ state.
+disableFastSnapshotRestoreSuccessItem_disabledTime :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+disableFastSnapshotRestoreSuccessItem_disabledTime = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {disabledTime} -> disabledTime) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {disabledTime = a} :: DisableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @disabling@ state.
+disableFastSnapshotRestoreSuccessItem_disablingTime :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+disableFastSnapshotRestoreSuccessItem_disablingTime = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {disablingTime} -> disablingTime) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {disablingTime = a} :: DisableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @enabled@ state.
+disableFastSnapshotRestoreSuccessItem_enabledTime :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+disableFastSnapshotRestoreSuccessItem_enabledTime = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {enabledTime} -> enabledTime) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {enabledTime = a} :: DisableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @enabling@ state.
+disableFastSnapshotRestoreSuccessItem_enablingTime :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+disableFastSnapshotRestoreSuccessItem_enablingTime = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {enablingTime} -> enablingTime) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {enablingTime = a} :: DisableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @optimizing@ state.
+disableFastSnapshotRestoreSuccessItem_optimizingTime :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+disableFastSnapshotRestoreSuccessItem_optimizingTime = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {optimizingTime} -> optimizingTime) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {optimizingTime = a} :: DisableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Web Services owner alias that enabled fast snapshot restores
+-- on the snapshot. This is intended for future use.
+disableFastSnapshotRestoreSuccessItem_ownerAlias :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreSuccessItem_ownerAlias = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {ownerAlias} -> ownerAlias) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {ownerAlias = a} :: DisableFastSnapshotRestoreSuccessItem)
+
+-- | The ID of the Amazon Web Services account that enabled fast snapshot
+-- restores on the snapshot.
+disableFastSnapshotRestoreSuccessItem_ownerId :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreSuccessItem_ownerId = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {ownerId} -> ownerId) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {ownerId = a} :: DisableFastSnapshotRestoreSuccessItem)
+
+-- | The ID of the snapshot.
+disableFastSnapshotRestoreSuccessItem_snapshotId :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreSuccessItem_snapshotId = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {snapshotId} -> snapshotId) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {snapshotId = a} :: DisableFastSnapshotRestoreSuccessItem)
+
+-- | The state of fast snapshot restores for the snapshot.
+disableFastSnapshotRestoreSuccessItem_state :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe FastSnapshotRestoreStateCode)
+disableFastSnapshotRestoreSuccessItem_state = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {state} -> state) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {state = a} :: DisableFastSnapshotRestoreSuccessItem)
+
+-- | The reason for the state transition. The possible values are as follows:
+--
+-- -   @Client.UserInitiated@ - The state successfully transitioned to
+--     @enabling@ or @disabling@.
+--
+-- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+--     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+disableFastSnapshotRestoreSuccessItem_stateTransitionReason :: Lens.Lens' DisableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+disableFastSnapshotRestoreSuccessItem_stateTransitionReason = Lens.lens (\DisableFastSnapshotRestoreSuccessItem' {stateTransitionReason} -> stateTransitionReason) (\s@DisableFastSnapshotRestoreSuccessItem' {} a -> s {stateTransitionReason = a} :: DisableFastSnapshotRestoreSuccessItem)
+
+instance
+  Data.FromXML
+    DisableFastSnapshotRestoreSuccessItem
+  where
+  parseXML x =
+    DisableFastSnapshotRestoreSuccessItem'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "disabledTime")
+      Prelude.<*> (x Data..@? "disablingTime")
+      Prelude.<*> (x Data..@? "enabledTime")
+      Prelude.<*> (x Data..@? "enablingTime")
+      Prelude.<*> (x Data..@? "optimizingTime")
+      Prelude.<*> (x Data..@? "ownerAlias")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateTransitionReason")
+
+instance
+  Prelude.Hashable
+    DisableFastSnapshotRestoreSuccessItem
+  where
+  hashWithSalt
+    _salt
+    DisableFastSnapshotRestoreSuccessItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` disabledTime
+        `Prelude.hashWithSalt` disablingTime
+        `Prelude.hashWithSalt` enabledTime
+        `Prelude.hashWithSalt` enablingTime
+        `Prelude.hashWithSalt` optimizingTime
+        `Prelude.hashWithSalt` ownerAlias
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` snapshotId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` stateTransitionReason
+
+instance
+  Prelude.NFData
+    DisableFastSnapshotRestoreSuccessItem
+  where
+  rnf DisableFastSnapshotRestoreSuccessItem' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf disabledTime
+      `Prelude.seq` Prelude.rnf disablingTime
+      `Prelude.seq` Prelude.rnf enabledTime
+      `Prelude.seq` Prelude.rnf enablingTime
+      `Prelude.seq` Prelude.rnf optimizingTime
+      `Prelude.seq` Prelude.rnf ownerAlias
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateTransitionReason
diff --git a/gen/Amazonka/EC2/Types/DiskImage.hs b/gen/Amazonka/EC2/Types/DiskImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskImage.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskImage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskImageDetail
+import Amazonka.EC2.Types.VolumeDetail
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a disk image.
+--
+-- /See:/ 'newDiskImage' smart constructor.
+data DiskImage = DiskImage'
+  { -- | A description of the disk image.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about the disk image.
+    image :: Prelude.Maybe DiskImageDetail,
+    -- | Information about the volume.
+    volume :: Prelude.Maybe VolumeDetail
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DiskImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'diskImage_description' - A description of the disk image.
+--
+-- 'image', 'diskImage_image' - Information about the disk image.
+--
+-- 'volume', 'diskImage_volume' - Information about the volume.
+newDiskImage ::
+  DiskImage
+newDiskImage =
+  DiskImage'
+    { description = Prelude.Nothing,
+      image = Prelude.Nothing,
+      volume = Prelude.Nothing
+    }
+
+-- | A description of the disk image.
+diskImage_description :: Lens.Lens' DiskImage (Prelude.Maybe Prelude.Text)
+diskImage_description = Lens.lens (\DiskImage' {description} -> description) (\s@DiskImage' {} a -> s {description = a} :: DiskImage)
+
+-- | Information about the disk image.
+diskImage_image :: Lens.Lens' DiskImage (Prelude.Maybe DiskImageDetail)
+diskImage_image = Lens.lens (\DiskImage' {image} -> image) (\s@DiskImage' {} a -> s {image = a} :: DiskImage)
+
+-- | Information about the volume.
+diskImage_volume :: Lens.Lens' DiskImage (Prelude.Maybe VolumeDetail)
+diskImage_volume = Lens.lens (\DiskImage' {volume} -> volume) (\s@DiskImage' {} a -> s {volume = a} :: DiskImage)
+
+instance Prelude.Hashable DiskImage where
+  hashWithSalt _salt DiskImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` image
+      `Prelude.hashWithSalt` volume
+
+instance Prelude.NFData DiskImage where
+  rnf DiskImage' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf image
+      `Prelude.seq` Prelude.rnf volume
+
+instance Data.ToQuery DiskImage where
+  toQuery DiskImage' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "Image" Data.=: image,
+        "Volume" Data.=: volume
+      ]
diff --git a/gen/Amazonka/EC2/Types/DiskImageDescription.hs b/gen/Amazonka/EC2/Types/DiskImageDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskImageDescription.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskImageDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskImageDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskImageFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a disk image.
+--
+-- /See:/ 'newDiskImageDescription' smart constructor.
+data DiskImageDescription = DiskImageDescription'
+  { -- | The checksum computed for the disk image.
+    checksum :: Prelude.Maybe Prelude.Text,
+    -- | The disk image format.
+    format :: Prelude.Maybe DiskImageFormat,
+    -- | A presigned URL for the import manifest stored in Amazon S3. For
+    -- information about creating a presigned URL for an Amazon S3 object, read
+    -- the \"Query String Request Authentication Alternative\" section of the
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+    -- topic in the /Amazon Simple Storage Service Developer Guide/.
+    --
+    -- For information about the import manifest referenced by this API action,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+    importManifestUrl :: Prelude.Maybe Prelude.Text,
+    -- | The size of the disk image, in GiB.
+    size :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DiskImageDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'checksum', 'diskImageDescription_checksum' - The checksum computed for the disk image.
+--
+-- 'format', 'diskImageDescription_format' - The disk image format.
+--
+-- 'importManifestUrl', 'diskImageDescription_importManifestUrl' - A presigned URL for the import manifest stored in Amazon S3. For
+-- information about creating a presigned URL for an Amazon S3 object, read
+-- the \"Query String Request Authentication Alternative\" section of the
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+-- topic in the /Amazon Simple Storage Service Developer Guide/.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+--
+-- 'size', 'diskImageDescription_size' - The size of the disk image, in GiB.
+newDiskImageDescription ::
+  DiskImageDescription
+newDiskImageDescription =
+  DiskImageDescription'
+    { checksum = Prelude.Nothing,
+      format = Prelude.Nothing,
+      importManifestUrl = Prelude.Nothing,
+      size = Prelude.Nothing
+    }
+
+-- | The checksum computed for the disk image.
+diskImageDescription_checksum :: Lens.Lens' DiskImageDescription (Prelude.Maybe Prelude.Text)
+diskImageDescription_checksum = Lens.lens (\DiskImageDescription' {checksum} -> checksum) (\s@DiskImageDescription' {} a -> s {checksum = a} :: DiskImageDescription)
+
+-- | The disk image format.
+diskImageDescription_format :: Lens.Lens' DiskImageDescription (Prelude.Maybe DiskImageFormat)
+diskImageDescription_format = Lens.lens (\DiskImageDescription' {format} -> format) (\s@DiskImageDescription' {} a -> s {format = a} :: DiskImageDescription)
+
+-- | A presigned URL for the import manifest stored in Amazon S3. For
+-- information about creating a presigned URL for an Amazon S3 object, read
+-- the \"Query String Request Authentication Alternative\" section of the
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+-- topic in the /Amazon Simple Storage Service Developer Guide/.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+diskImageDescription_importManifestUrl :: Lens.Lens' DiskImageDescription (Prelude.Maybe Prelude.Text)
+diskImageDescription_importManifestUrl = Lens.lens (\DiskImageDescription' {importManifestUrl} -> importManifestUrl) (\s@DiskImageDescription' {} a -> s {importManifestUrl = a} :: DiskImageDescription)
+
+-- | The size of the disk image, in GiB.
+diskImageDescription_size :: Lens.Lens' DiskImageDescription (Prelude.Maybe Prelude.Integer)
+diskImageDescription_size = Lens.lens (\DiskImageDescription' {size} -> size) (\s@DiskImageDescription' {} a -> s {size = a} :: DiskImageDescription)
+
+instance Data.FromXML DiskImageDescription where
+  parseXML x =
+    DiskImageDescription'
+      Prelude.<$> (x Data..@? "checksum")
+      Prelude.<*> (x Data..@? "format")
+      Prelude.<*> (x Data..@? "importManifestUrl")
+      Prelude.<*> (x Data..@? "size")
+
+instance Prelude.Hashable DiskImageDescription where
+  hashWithSalt _salt DiskImageDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` checksum
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` importManifestUrl
+      `Prelude.hashWithSalt` size
+
+instance Prelude.NFData DiskImageDescription where
+  rnf DiskImageDescription' {..} =
+    Prelude.rnf checksum
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf importManifestUrl
+      `Prelude.seq` Prelude.rnf size
diff --git a/gen/Amazonka/EC2/Types/DiskImageDetail.hs b/gen/Amazonka/EC2/Types/DiskImageDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskImageDetail.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskImageDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskImageDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskImageFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a disk image.
+--
+-- /See:/ 'newDiskImageDetail' smart constructor.
+data DiskImageDetail = DiskImageDetail'
+  { -- | The size of the disk image, in GiB.
+    bytes :: Prelude.Integer,
+    -- | The disk image format.
+    format :: DiskImageFormat,
+    -- | A presigned URL for the import manifest stored in Amazon S3 and
+    -- presented here as an Amazon S3 presigned URL. For information about
+    -- creating a presigned URL for an Amazon S3 object, read the \"Query
+    -- String Request Authentication Alternative\" section of the
+    -- <https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+    -- topic in the /Amazon Simple Storage Service Developer Guide/.
+    --
+    -- For information about the import manifest referenced by this API action,
+    -- see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+    importManifestUrl :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DiskImageDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bytes', 'diskImageDetail_bytes' - The size of the disk image, in GiB.
+--
+-- 'format', 'diskImageDetail_format' - The disk image format.
+--
+-- 'importManifestUrl', 'diskImageDetail_importManifestUrl' - A presigned URL for the import manifest stored in Amazon S3 and
+-- presented here as an Amazon S3 presigned URL. For information about
+-- creating a presigned URL for an Amazon S3 object, read the \"Query
+-- String Request Authentication Alternative\" section of the
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+-- topic in the /Amazon Simple Storage Service Developer Guide/.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+newDiskImageDetail ::
+  -- | 'bytes'
+  Prelude.Integer ->
+  -- | 'format'
+  DiskImageFormat ->
+  -- | 'importManifestUrl'
+  Prelude.Text ->
+  DiskImageDetail
+newDiskImageDetail
+  pBytes_
+  pFormat_
+  pImportManifestUrl_ =
+    DiskImageDetail'
+      { bytes = pBytes_,
+        format = pFormat_,
+        importManifestUrl = pImportManifestUrl_
+      }
+
+-- | The size of the disk image, in GiB.
+diskImageDetail_bytes :: Lens.Lens' DiskImageDetail Prelude.Integer
+diskImageDetail_bytes = Lens.lens (\DiskImageDetail' {bytes} -> bytes) (\s@DiskImageDetail' {} a -> s {bytes = a} :: DiskImageDetail)
+
+-- | The disk image format.
+diskImageDetail_format :: Lens.Lens' DiskImageDetail DiskImageFormat
+diskImageDetail_format = Lens.lens (\DiskImageDetail' {format} -> format) (\s@DiskImageDetail' {} a -> s {format = a} :: DiskImageDetail)
+
+-- | A presigned URL for the import manifest stored in Amazon S3 and
+-- presented here as an Amazon S3 presigned URL. For information about
+-- creating a presigned URL for an Amazon S3 object, read the \"Query
+-- String Request Authentication Alternative\" section of the
+-- <https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+-- topic in the /Amazon Simple Storage Service Developer Guide/.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+diskImageDetail_importManifestUrl :: Lens.Lens' DiskImageDetail Prelude.Text
+diskImageDetail_importManifestUrl = Lens.lens (\DiskImageDetail' {importManifestUrl} -> importManifestUrl) (\s@DiskImageDetail' {} a -> s {importManifestUrl = a} :: DiskImageDetail)
+
+instance Prelude.Hashable DiskImageDetail where
+  hashWithSalt _salt DiskImageDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` bytes
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` importManifestUrl
+
+instance Prelude.NFData DiskImageDetail where
+  rnf DiskImageDetail' {..} =
+    Prelude.rnf bytes
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf importManifestUrl
+
+instance Data.ToQuery DiskImageDetail where
+  toQuery DiskImageDetail' {..} =
+    Prelude.mconcat
+      [ "Bytes" Data.=: bytes,
+        "Format" Data.=: format,
+        "ImportManifestUrl" Data.=: importManifestUrl
+      ]
diff --git a/gen/Amazonka/EC2/Types/DiskImageFormat.hs b/gen/Amazonka/EC2/Types/DiskImageFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskImageFormat.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskImageFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskImageFormat
+  ( DiskImageFormat
+      ( ..,
+        DiskImageFormat_RAW,
+        DiskImageFormat_VHD,
+        DiskImageFormat_VMDK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DiskImageFormat = DiskImageFormat'
+  { fromDiskImageFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DiskImageFormat_RAW :: DiskImageFormat
+pattern DiskImageFormat_RAW = DiskImageFormat' "RAW"
+
+pattern DiskImageFormat_VHD :: DiskImageFormat
+pattern DiskImageFormat_VHD = DiskImageFormat' "VHD"
+
+pattern DiskImageFormat_VMDK :: DiskImageFormat
+pattern DiskImageFormat_VMDK = DiskImageFormat' "VMDK"
+
+{-# COMPLETE
+  DiskImageFormat_RAW,
+  DiskImageFormat_VHD,
+  DiskImageFormat_VMDK,
+  DiskImageFormat'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DiskImageVolumeDescription.hs b/gen/Amazonka/EC2/Types/DiskImageVolumeDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskImageVolumeDescription.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskImageVolumeDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskImageVolumeDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a disk image volume.
+--
+-- /See:/ 'newDiskImageVolumeDescription' smart constructor.
+data DiskImageVolumeDescription = DiskImageVolumeDescription'
+  { -- | The volume identifier.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The size of the volume, in GiB.
+    size :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DiskImageVolumeDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'diskImageVolumeDescription_id' - The volume identifier.
+--
+-- 'size', 'diskImageVolumeDescription_size' - The size of the volume, in GiB.
+newDiskImageVolumeDescription ::
+  DiskImageVolumeDescription
+newDiskImageVolumeDescription =
+  DiskImageVolumeDescription'
+    { id = Prelude.Nothing,
+      size = Prelude.Nothing
+    }
+
+-- | The volume identifier.
+diskImageVolumeDescription_id :: Lens.Lens' DiskImageVolumeDescription (Prelude.Maybe Prelude.Text)
+diskImageVolumeDescription_id = Lens.lens (\DiskImageVolumeDescription' {id} -> id) (\s@DiskImageVolumeDescription' {} a -> s {id = a} :: DiskImageVolumeDescription)
+
+-- | The size of the volume, in GiB.
+diskImageVolumeDescription_size :: Lens.Lens' DiskImageVolumeDescription (Prelude.Maybe Prelude.Integer)
+diskImageVolumeDescription_size = Lens.lens (\DiskImageVolumeDescription' {size} -> size) (\s@DiskImageVolumeDescription' {} a -> s {size = a} :: DiskImageVolumeDescription)
+
+instance Data.FromXML DiskImageVolumeDescription where
+  parseXML x =
+    DiskImageVolumeDescription'
+      Prelude.<$> (x Data..@? "id")
+      Prelude.<*> (x Data..@? "size")
+
+instance Prelude.Hashable DiskImageVolumeDescription where
+  hashWithSalt _salt DiskImageVolumeDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` size
+
+instance Prelude.NFData DiskImageVolumeDescription where
+  rnf DiskImageVolumeDescription' {..} =
+    Prelude.rnf id `Prelude.seq` Prelude.rnf size
diff --git a/gen/Amazonka/EC2/Types/DiskInfo.hs b/gen/Amazonka/EC2/Types/DiskInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskInfo.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a disk.
+--
+-- /See:/ 'newDiskInfo' smart constructor.
+data DiskInfo = DiskInfo'
+  { -- | The number of disks with this configuration.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The size of the disk in GB.
+    sizeInGB :: Prelude.Maybe Prelude.Integer,
+    -- | The type of disk.
+    type' :: Prelude.Maybe DiskType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DiskInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'diskInfo_count' - The number of disks with this configuration.
+--
+-- 'sizeInGB', 'diskInfo_sizeInGB' - The size of the disk in GB.
+--
+-- 'type'', 'diskInfo_type' - The type of disk.
+newDiskInfo ::
+  DiskInfo
+newDiskInfo =
+  DiskInfo'
+    { count = Prelude.Nothing,
+      sizeInGB = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The number of disks with this configuration.
+diskInfo_count :: Lens.Lens' DiskInfo (Prelude.Maybe Prelude.Int)
+diskInfo_count = Lens.lens (\DiskInfo' {count} -> count) (\s@DiskInfo' {} a -> s {count = a} :: DiskInfo)
+
+-- | The size of the disk in GB.
+diskInfo_sizeInGB :: Lens.Lens' DiskInfo (Prelude.Maybe Prelude.Integer)
+diskInfo_sizeInGB = Lens.lens (\DiskInfo' {sizeInGB} -> sizeInGB) (\s@DiskInfo' {} a -> s {sizeInGB = a} :: DiskInfo)
+
+-- | The type of disk.
+diskInfo_type :: Lens.Lens' DiskInfo (Prelude.Maybe DiskType)
+diskInfo_type = Lens.lens (\DiskInfo' {type'} -> type') (\s@DiskInfo' {} a -> s {type' = a} :: DiskInfo)
+
+instance Data.FromXML DiskInfo where
+  parseXML x =
+    DiskInfo'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "sizeInGB")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable DiskInfo where
+  hashWithSalt _salt DiskInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` sizeInGB
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DiskInfo where
+  rnf DiskInfo' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf sizeInGB
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/DiskType.hs b/gen/Amazonka/EC2/Types/DiskType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DiskType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DiskType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DiskType
+  ( DiskType
+      ( ..,
+        DiskType_Hdd,
+        DiskType_Ssd
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DiskType = DiskType'
+  { fromDiskType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DiskType_Hdd :: DiskType
+pattern DiskType_Hdd = DiskType' "hdd"
+
+pattern DiskType_Ssd :: DiskType
+pattern DiskType_Ssd = DiskType' "ssd"
+
+{-# COMPLETE
+  DiskType_Hdd,
+  DiskType_Ssd,
+  DiskType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DnsEntry.hs b/gen/Amazonka/EC2/Types/DnsEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsEntry.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a DNS entry.
+--
+-- /See:/ 'newDnsEntry' smart constructor.
+data DnsEntry = DnsEntry'
+  { -- | The DNS name.
+    dnsName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the private hosted zone.
+    hostedZoneId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DnsEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dnsName', 'dnsEntry_dnsName' - The DNS name.
+--
+-- 'hostedZoneId', 'dnsEntry_hostedZoneId' - The ID of the private hosted zone.
+newDnsEntry ::
+  DnsEntry
+newDnsEntry =
+  DnsEntry'
+    { dnsName = Prelude.Nothing,
+      hostedZoneId = Prelude.Nothing
+    }
+
+-- | The DNS name.
+dnsEntry_dnsName :: Lens.Lens' DnsEntry (Prelude.Maybe Prelude.Text)
+dnsEntry_dnsName = Lens.lens (\DnsEntry' {dnsName} -> dnsName) (\s@DnsEntry' {} a -> s {dnsName = a} :: DnsEntry)
+
+-- | The ID of the private hosted zone.
+dnsEntry_hostedZoneId :: Lens.Lens' DnsEntry (Prelude.Maybe Prelude.Text)
+dnsEntry_hostedZoneId = Lens.lens (\DnsEntry' {hostedZoneId} -> hostedZoneId) (\s@DnsEntry' {} a -> s {hostedZoneId = a} :: DnsEntry)
+
+instance Data.FromXML DnsEntry where
+  parseXML x =
+    DnsEntry'
+      Prelude.<$> (x Data..@? "dnsName")
+      Prelude.<*> (x Data..@? "hostedZoneId")
+
+instance Prelude.Hashable DnsEntry where
+  hashWithSalt _salt DnsEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` dnsName
+      `Prelude.hashWithSalt` hostedZoneId
+
+instance Prelude.NFData DnsEntry where
+  rnf DnsEntry' {..} =
+    Prelude.rnf dnsName
+      `Prelude.seq` Prelude.rnf hostedZoneId
diff --git a/gen/Amazonka/EC2/Types/DnsNameState.hs b/gen/Amazonka/EC2/Types/DnsNameState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsNameState.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsNameState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsNameState
+  ( DnsNameState
+      ( ..,
+        DnsNameState_Failed,
+        DnsNameState_PendingVerification,
+        DnsNameState_Verified
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DnsNameState = DnsNameState'
+  { fromDnsNameState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DnsNameState_Failed :: DnsNameState
+pattern DnsNameState_Failed = DnsNameState' "failed"
+
+pattern DnsNameState_PendingVerification :: DnsNameState
+pattern DnsNameState_PendingVerification = DnsNameState' "pendingVerification"
+
+pattern DnsNameState_Verified :: DnsNameState
+pattern DnsNameState_Verified = DnsNameState' "verified"
+
+{-# COMPLETE
+  DnsNameState_Failed,
+  DnsNameState_PendingVerification,
+  DnsNameState_Verified,
+  DnsNameState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DnsOptions.hs b/gen/Amazonka/EC2/Types/DnsOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsOptions.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DnsRecordIpType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the DNS options for an endpoint.
+--
+-- /See:/ 'newDnsOptions' smart constructor.
+data DnsOptions = DnsOptions'
+  { -- | The DNS records created for the endpoint.
+    dnsRecordIpType :: Prelude.Maybe DnsRecordIpType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DnsOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dnsRecordIpType', 'dnsOptions_dnsRecordIpType' - The DNS records created for the endpoint.
+newDnsOptions ::
+  DnsOptions
+newDnsOptions =
+  DnsOptions' {dnsRecordIpType = Prelude.Nothing}
+
+-- | The DNS records created for the endpoint.
+dnsOptions_dnsRecordIpType :: Lens.Lens' DnsOptions (Prelude.Maybe DnsRecordIpType)
+dnsOptions_dnsRecordIpType = Lens.lens (\DnsOptions' {dnsRecordIpType} -> dnsRecordIpType) (\s@DnsOptions' {} a -> s {dnsRecordIpType = a} :: DnsOptions)
+
+instance Data.FromXML DnsOptions where
+  parseXML x =
+    DnsOptions'
+      Prelude.<$> (x Data..@? "dnsRecordIpType")
+
+instance Prelude.Hashable DnsOptions where
+  hashWithSalt _salt DnsOptions' {..} =
+    _salt `Prelude.hashWithSalt` dnsRecordIpType
+
+instance Prelude.NFData DnsOptions where
+  rnf DnsOptions' {..} = Prelude.rnf dnsRecordIpType
diff --git a/gen/Amazonka/EC2/Types/DnsOptionsSpecification.hs b/gen/Amazonka/EC2/Types/DnsOptionsSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsOptionsSpecification.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsOptionsSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsOptionsSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DnsRecordIpType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the DNS options for an endpoint.
+--
+-- /See:/ 'newDnsOptionsSpecification' smart constructor.
+data DnsOptionsSpecification = DnsOptionsSpecification'
+  { -- | The DNS records created for the endpoint.
+    dnsRecordIpType :: Prelude.Maybe DnsRecordIpType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DnsOptionsSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dnsRecordIpType', 'dnsOptionsSpecification_dnsRecordIpType' - The DNS records created for the endpoint.
+newDnsOptionsSpecification ::
+  DnsOptionsSpecification
+newDnsOptionsSpecification =
+  DnsOptionsSpecification'
+    { dnsRecordIpType =
+        Prelude.Nothing
+    }
+
+-- | The DNS records created for the endpoint.
+dnsOptionsSpecification_dnsRecordIpType :: Lens.Lens' DnsOptionsSpecification (Prelude.Maybe DnsRecordIpType)
+dnsOptionsSpecification_dnsRecordIpType = Lens.lens (\DnsOptionsSpecification' {dnsRecordIpType} -> dnsRecordIpType) (\s@DnsOptionsSpecification' {} a -> s {dnsRecordIpType = a} :: DnsOptionsSpecification)
+
+instance Prelude.Hashable DnsOptionsSpecification where
+  hashWithSalt _salt DnsOptionsSpecification' {..} =
+    _salt `Prelude.hashWithSalt` dnsRecordIpType
+
+instance Prelude.NFData DnsOptionsSpecification where
+  rnf DnsOptionsSpecification' {..} =
+    Prelude.rnf dnsRecordIpType
+
+instance Data.ToQuery DnsOptionsSpecification where
+  toQuery DnsOptionsSpecification' {..} =
+    Prelude.mconcat
+      ["DnsRecordIpType" Data.=: dnsRecordIpType]
diff --git a/gen/Amazonka/EC2/Types/DnsRecordIpType.hs b/gen/Amazonka/EC2/Types/DnsRecordIpType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsRecordIpType.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsRecordIpType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsRecordIpType
+  ( DnsRecordIpType
+      ( ..,
+        DnsRecordIpType_Dualstack,
+        DnsRecordIpType_Ipv4,
+        DnsRecordIpType_Ipv6,
+        DnsRecordIpType_Service_defined
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DnsRecordIpType = DnsRecordIpType'
+  { fromDnsRecordIpType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DnsRecordIpType_Dualstack :: DnsRecordIpType
+pattern DnsRecordIpType_Dualstack = DnsRecordIpType' "dualstack"
+
+pattern DnsRecordIpType_Ipv4 :: DnsRecordIpType
+pattern DnsRecordIpType_Ipv4 = DnsRecordIpType' "ipv4"
+
+pattern DnsRecordIpType_Ipv6 :: DnsRecordIpType
+pattern DnsRecordIpType_Ipv6 = DnsRecordIpType' "ipv6"
+
+pattern DnsRecordIpType_Service_defined :: DnsRecordIpType
+pattern DnsRecordIpType_Service_defined = DnsRecordIpType' "service-defined"
+
+{-# COMPLETE
+  DnsRecordIpType_Dualstack,
+  DnsRecordIpType_Ipv4,
+  DnsRecordIpType_Ipv6,
+  DnsRecordIpType_Service_defined,
+  DnsRecordIpType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DnsServersOptionsModifyStructure.hs b/gen/Amazonka/EC2/Types/DnsServersOptionsModifyStructure.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsServersOptionsModifyStructure.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsServersOptionsModifyStructure
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsServersOptionsModifyStructure where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the DNS server to be used.
+--
+-- /See:/ 'newDnsServersOptionsModifyStructure' smart constructor.
+data DnsServersOptionsModifyStructure = DnsServersOptionsModifyStructure'
+  { -- | The IPv4 address range, in CIDR notation, of the DNS servers to be used.
+    -- You can specify up to two DNS servers. Ensure that the DNS servers can
+    -- be reached by the clients. The specified values overwrite the existing
+    -- values.
+    customDnsServers :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether DNS servers should be used. Specify @False@ to delete
+    -- the existing DNS servers.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DnsServersOptionsModifyStructure' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'customDnsServers', 'dnsServersOptionsModifyStructure_customDnsServers' - The IPv4 address range, in CIDR notation, of the DNS servers to be used.
+-- You can specify up to two DNS servers. Ensure that the DNS servers can
+-- be reached by the clients. The specified values overwrite the existing
+-- values.
+--
+-- 'enabled', 'dnsServersOptionsModifyStructure_enabled' - Indicates whether DNS servers should be used. Specify @False@ to delete
+-- the existing DNS servers.
+newDnsServersOptionsModifyStructure ::
+  DnsServersOptionsModifyStructure
+newDnsServersOptionsModifyStructure =
+  DnsServersOptionsModifyStructure'
+    { customDnsServers =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | The IPv4 address range, in CIDR notation, of the DNS servers to be used.
+-- You can specify up to two DNS servers. Ensure that the DNS servers can
+-- be reached by the clients. The specified values overwrite the existing
+-- values.
+dnsServersOptionsModifyStructure_customDnsServers :: Lens.Lens' DnsServersOptionsModifyStructure (Prelude.Maybe [Prelude.Text])
+dnsServersOptionsModifyStructure_customDnsServers = Lens.lens (\DnsServersOptionsModifyStructure' {customDnsServers} -> customDnsServers) (\s@DnsServersOptionsModifyStructure' {} a -> s {customDnsServers = a} :: DnsServersOptionsModifyStructure) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether DNS servers should be used. Specify @False@ to delete
+-- the existing DNS servers.
+dnsServersOptionsModifyStructure_enabled :: Lens.Lens' DnsServersOptionsModifyStructure (Prelude.Maybe Prelude.Bool)
+dnsServersOptionsModifyStructure_enabled = Lens.lens (\DnsServersOptionsModifyStructure' {enabled} -> enabled) (\s@DnsServersOptionsModifyStructure' {} a -> s {enabled = a} :: DnsServersOptionsModifyStructure)
+
+instance
+  Prelude.Hashable
+    DnsServersOptionsModifyStructure
+  where
+  hashWithSalt
+    _salt
+    DnsServersOptionsModifyStructure' {..} =
+      _salt
+        `Prelude.hashWithSalt` customDnsServers
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    DnsServersOptionsModifyStructure
+  where
+  rnf DnsServersOptionsModifyStructure' {..} =
+    Prelude.rnf customDnsServers
+      `Prelude.seq` Prelude.rnf enabled
+
+instance
+  Data.ToQuery
+    DnsServersOptionsModifyStructure
+  where
+  toQuery DnsServersOptionsModifyStructure' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "CustomDnsServers"
+              Prelude.<$> customDnsServers
+          ),
+        "Enabled" Data.=: enabled
+      ]
diff --git a/gen/Amazonka/EC2/Types/DnsSupportValue.hs b/gen/Amazonka/EC2/Types/DnsSupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DnsSupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DnsSupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DnsSupportValue
+  ( DnsSupportValue
+      ( ..,
+        DnsSupportValue_Disable,
+        DnsSupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DnsSupportValue = DnsSupportValue'
+  { fromDnsSupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DnsSupportValue_Disable :: DnsSupportValue
+pattern DnsSupportValue_Disable = DnsSupportValue' "disable"
+
+pattern DnsSupportValue_Enable :: DnsSupportValue
+pattern DnsSupportValue_Enable = DnsSupportValue' "enable"
+
+{-# COMPLETE
+  DnsSupportValue_Disable,
+  DnsSupportValue_Enable,
+  DnsSupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DomainType.hs b/gen/Amazonka/EC2/Types/DomainType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DomainType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DomainType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DomainType
+  ( DomainType
+      ( ..,
+        DomainType_Standard,
+        DomainType_Vpc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DomainType = DomainType'
+  { fromDomainType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DomainType_Standard :: DomainType
+pattern DomainType_Standard = DomainType' "standard"
+
+pattern DomainType_Vpc :: DomainType
+pattern DomainType_Vpc = DomainType' "vpc"
+
+{-# COMPLETE
+  DomainType_Standard,
+  DomainType_Vpc,
+  DomainType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/DynamicRoutingValue.hs b/gen/Amazonka/EC2/Types/DynamicRoutingValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/DynamicRoutingValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.DynamicRoutingValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.DynamicRoutingValue
+  ( DynamicRoutingValue
+      ( ..,
+        DynamicRoutingValue_Disable,
+        DynamicRoutingValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype DynamicRoutingValue = DynamicRoutingValue'
+  { fromDynamicRoutingValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DynamicRoutingValue_Disable :: DynamicRoutingValue
+pattern DynamicRoutingValue_Disable = DynamicRoutingValue' "disable"
+
+pattern DynamicRoutingValue_Enable :: DynamicRoutingValue
+pattern DynamicRoutingValue_Enable = DynamicRoutingValue' "enable"
+
+{-# COMPLETE
+  DynamicRoutingValue_Disable,
+  DynamicRoutingValue_Enable,
+  DynamicRoutingValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EbsBlockDevice.hs b/gen/Amazonka/EC2/Types/EbsBlockDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsBlockDevice.hs
@@ -0,0 +1,391 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsBlockDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsBlockDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device for an EBS volume.
+--
+-- /See:/ 'newEbsBlockDevice' smart constructor.
+data EbsBlockDevice = EbsBlockDevice'
+  { -- | Indicates whether the EBS volume is deleted on instance termination. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination Preserving Amazon EBS volumes on instance termination>
+    -- in the /Amazon EC2 User Guide/.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the encryption state of an EBS volume is changed while
+    -- being restored from a backing snapshot. The effect of setting the
+    -- encryption state to @true@ depends on the volume origin (new or from a
+    -- snapshot), starting encryption state, ownership, and whether encryption
+    -- by default is enabled. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-parameters Amazon EBS encryption>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- In no case can you remove encryption from an encrypted volume.
+    --
+    -- Encrypted volumes can only be attached to instances that support Amazon
+    -- EBS encryption. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+    --
+    -- This parameter is not returned by
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImageAttribute.html DescribeImageAttribute>.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+    -- @io2@ volumes, this represents the number of IOPS that are provisioned
+    -- for the volume. For @gp2@ volumes, this represents the baseline
+    -- performance of the volume and the rate at which the volume accumulates
+    -- I\/O credits for bursting.
+    --
+    -- The following are the supported values for each volume type:
+    --
+    -- -   @gp3@: 3,000-16,000 IOPS
+    --
+    -- -   @io1@: 100-64,000 IOPS
+    --
+    -- -   @io2@: 100-64,000 IOPS
+    --
+    -- For @io1@ and @io2@ volumes, we guarantee 64,000 IOPS only for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+    -- Other instance families guarantee performance up to 32,000 IOPS.
+    --
+    -- This parameter is required for @io1@ and @io2@ volumes. The default for
+    -- @gp3@ volumes is 3,000 IOPS. This parameter is not supported for @gp2@,
+    -- @st1@, @sc1@, or @standard@ volumes.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer
+    -- managed CMK under which the EBS volume is encrypted.
+    --
+    -- This parameter is only supported on @BlockDeviceMapping@ objects called
+    -- by
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>,
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html RequestSpotFleet>,
+    -- and
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Outpost on which the snapshot is stored.
+    --
+    -- This parameter is only supported on @BlockDeviceMapping@ objects called
+    -- by
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html CreateImage>.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The throughput that the volume supports, in MiB\/s.
+    --
+    -- This parameter is valid only for @gp3@ volumes.
+    --
+    -- Valid Range: Minimum value of 125. Maximum value of 1000.
+    throughput :: Prelude.Maybe Prelude.Int,
+    -- | The size of the volume, in GiBs. You must specify either a snapshot ID
+    -- or a volume size. If you specify a snapshot, the default is the snapshot
+    -- size. You can specify a volume size that is equal to or larger than the
+    -- snapshot size.
+    --
+    -- The following are the supported volumes sizes for each volume type:
+    --
+    -- -   @gp2@ and @gp3@:1-16,384
+    --
+    -- -   @io1@ and @io2@: 4-16,384
+    --
+    -- -   @st1@ and @sc1@: 125-16,384
+    --
+    -- -   @standard@: 1-1,024
+    volumeSize :: Prelude.Maybe Prelude.Int,
+    -- | The volume type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+    -- in the /Amazon EC2 User Guide/. If the volume type is @io1@ or @io2@,
+    -- you must specify the IOPS that the volume supports.
+    volumeType :: Prelude.Maybe VolumeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EbsBlockDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteOnTermination', 'ebsBlockDevice_deleteOnTermination' - Indicates whether the EBS volume is deleted on instance termination. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination Preserving Amazon EBS volumes on instance termination>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'encrypted', 'ebsBlockDevice_encrypted' - Indicates whether the encryption state of an EBS volume is changed while
+-- being restored from a backing snapshot. The effect of setting the
+-- encryption state to @true@ depends on the volume origin (new or from a
+-- snapshot), starting encryption state, ownership, and whether encryption
+-- by default is enabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-parameters Amazon EBS encryption>
+-- in the /Amazon EC2 User Guide/.
+--
+-- In no case can you remove encryption from an encrypted volume.
+--
+-- Encrypted volumes can only be attached to instances that support Amazon
+-- EBS encryption. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+--
+-- This parameter is not returned by
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImageAttribute.html DescribeImageAttribute>.
+--
+-- 'iops', 'ebsBlockDevice_iops' - The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- For @io1@ and @io2@ volumes, we guarantee 64,000 IOPS only for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+-- Other instance families guarantee performance up to 32,000 IOPS.
+--
+-- This parameter is required for @io1@ and @io2@ volumes. The default for
+-- @gp3@ volumes is 3,000 IOPS. This parameter is not supported for @gp2@,
+-- @st1@, @sc1@, or @standard@ volumes.
+--
+-- 'kmsKeyId', 'ebsBlockDevice_kmsKeyId' - Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer
+-- managed CMK under which the EBS volume is encrypted.
+--
+-- This parameter is only supported on @BlockDeviceMapping@ objects called
+-- by
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html RequestSpotFleet>,
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>.
+--
+-- 'outpostArn', 'ebsBlockDevice_outpostArn' - The ARN of the Outpost on which the snapshot is stored.
+--
+-- This parameter is only supported on @BlockDeviceMapping@ objects called
+-- by
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html CreateImage>.
+--
+-- 'snapshotId', 'ebsBlockDevice_snapshotId' - The ID of the snapshot.
+--
+-- 'throughput', 'ebsBlockDevice_throughput' - The throughput that the volume supports, in MiB\/s.
+--
+-- This parameter is valid only for @gp3@ volumes.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+--
+-- 'volumeSize', 'ebsBlockDevice_volumeSize' - The size of the volume, in GiBs. You must specify either a snapshot ID
+-- or a volume size. If you specify a snapshot, the default is the snapshot
+-- size. You can specify a volume size that is equal to or larger than the
+-- snapshot size.
+--
+-- The following are the supported volumes sizes for each volume type:
+--
+-- -   @gp2@ and @gp3@:1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+--
+-- 'volumeType', 'ebsBlockDevice_volumeType' - The volume type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon EC2 User Guide/. If the volume type is @io1@ or @io2@,
+-- you must specify the IOPS that the volume supports.
+newEbsBlockDevice ::
+  EbsBlockDevice
+newEbsBlockDevice =
+  EbsBlockDevice'
+    { deleteOnTermination =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeSize = Prelude.Nothing,
+      volumeType = Prelude.Nothing
+    }
+
+-- | Indicates whether the EBS volume is deleted on instance termination. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination Preserving Amazon EBS volumes on instance termination>
+-- in the /Amazon EC2 User Guide/.
+ebsBlockDevice_deleteOnTermination :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Bool)
+ebsBlockDevice_deleteOnTermination = Lens.lens (\EbsBlockDevice' {deleteOnTermination} -> deleteOnTermination) (\s@EbsBlockDevice' {} a -> s {deleteOnTermination = a} :: EbsBlockDevice)
+
+-- | Indicates whether the encryption state of an EBS volume is changed while
+-- being restored from a backing snapshot. The effect of setting the
+-- encryption state to @true@ depends on the volume origin (new or from a
+-- snapshot), starting encryption state, ownership, and whether encryption
+-- by default is enabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-parameters Amazon EBS encryption>
+-- in the /Amazon EC2 User Guide/.
+--
+-- In no case can you remove encryption from an encrypted volume.
+--
+-- Encrypted volumes can only be attached to instances that support Amazon
+-- EBS encryption. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances Supported instance types>.
+--
+-- This parameter is not returned by
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImageAttribute.html DescribeImageAttribute>.
+ebsBlockDevice_encrypted :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Bool)
+ebsBlockDevice_encrypted = Lens.lens (\EbsBlockDevice' {encrypted} -> encrypted) (\s@EbsBlockDevice' {} a -> s {encrypted = a} :: EbsBlockDevice)
+
+-- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- For @io1@ and @io2@ volumes, we guarantee 64,000 IOPS only for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+-- Other instance families guarantee performance up to 32,000 IOPS.
+--
+-- This parameter is required for @io1@ and @io2@ volumes. The default for
+-- @gp3@ volumes is 3,000 IOPS. This parameter is not supported for @gp2@,
+-- @st1@, @sc1@, or @standard@ volumes.
+ebsBlockDevice_iops :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Int)
+ebsBlockDevice_iops = Lens.lens (\EbsBlockDevice' {iops} -> iops) (\s@EbsBlockDevice' {} a -> s {iops = a} :: EbsBlockDevice)
+
+-- | Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer
+-- managed CMK under which the EBS volume is encrypted.
+--
+-- This parameter is only supported on @BlockDeviceMapping@ objects called
+-- by
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html RequestSpotFleet>,
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>.
+ebsBlockDevice_kmsKeyId :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Text)
+ebsBlockDevice_kmsKeyId = Lens.lens (\EbsBlockDevice' {kmsKeyId} -> kmsKeyId) (\s@EbsBlockDevice' {} a -> s {kmsKeyId = a} :: EbsBlockDevice)
+
+-- | The ARN of the Outpost on which the snapshot is stored.
+--
+-- This parameter is only supported on @BlockDeviceMapping@ objects called
+-- by
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html CreateImage>.
+ebsBlockDevice_outpostArn :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Text)
+ebsBlockDevice_outpostArn = Lens.lens (\EbsBlockDevice' {outpostArn} -> outpostArn) (\s@EbsBlockDevice' {} a -> s {outpostArn = a} :: EbsBlockDevice)
+
+-- | The ID of the snapshot.
+ebsBlockDevice_snapshotId :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Text)
+ebsBlockDevice_snapshotId = Lens.lens (\EbsBlockDevice' {snapshotId} -> snapshotId) (\s@EbsBlockDevice' {} a -> s {snapshotId = a} :: EbsBlockDevice)
+
+-- | The throughput that the volume supports, in MiB\/s.
+--
+-- This parameter is valid only for @gp3@ volumes.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+ebsBlockDevice_throughput :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Int)
+ebsBlockDevice_throughput = Lens.lens (\EbsBlockDevice' {throughput} -> throughput) (\s@EbsBlockDevice' {} a -> s {throughput = a} :: EbsBlockDevice)
+
+-- | The size of the volume, in GiBs. You must specify either a snapshot ID
+-- or a volume size. If you specify a snapshot, the default is the snapshot
+-- size. You can specify a volume size that is equal to or larger than the
+-- snapshot size.
+--
+-- The following are the supported volumes sizes for each volume type:
+--
+-- -   @gp2@ and @gp3@:1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+ebsBlockDevice_volumeSize :: Lens.Lens' EbsBlockDevice (Prelude.Maybe Prelude.Int)
+ebsBlockDevice_volumeSize = Lens.lens (\EbsBlockDevice' {volumeSize} -> volumeSize) (\s@EbsBlockDevice' {} a -> s {volumeSize = a} :: EbsBlockDevice)
+
+-- | The volume type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon EC2 User Guide/. If the volume type is @io1@ or @io2@,
+-- you must specify the IOPS that the volume supports.
+ebsBlockDevice_volumeType :: Lens.Lens' EbsBlockDevice (Prelude.Maybe VolumeType)
+ebsBlockDevice_volumeType = Lens.lens (\EbsBlockDevice' {volumeType} -> volumeType) (\s@EbsBlockDevice' {} a -> s {volumeType = a} :: EbsBlockDevice)
+
+instance Data.FromXML EbsBlockDevice where
+  parseXML x =
+    EbsBlockDevice'
+      Prelude.<$> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "encrypted")
+      Prelude.<*> (x Data..@? "iops")
+      Prelude.<*> (x Data..@? "kmsKeyId")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "throughput")
+      Prelude.<*> (x Data..@? "volumeSize")
+      Prelude.<*> (x Data..@? "volumeType")
+
+instance Prelude.Hashable EbsBlockDevice where
+  hashWithSalt _salt EbsBlockDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` deleteOnTermination
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` throughput
+      `Prelude.hashWithSalt` volumeSize
+      `Prelude.hashWithSalt` volumeType
+
+instance Prelude.NFData EbsBlockDevice where
+  rnf EbsBlockDevice' {..} =
+    Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf volumeType
+
+instance Data.ToQuery EbsBlockDevice where
+  toQuery EbsBlockDevice' {..} =
+    Prelude.mconcat
+      [ "DeleteOnTermination" Data.=: deleteOnTermination,
+        "Encrypted" Data.=: encrypted,
+        "Iops" Data.=: iops,
+        "KmsKeyId" Data.=: kmsKeyId,
+        "OutpostArn" Data.=: outpostArn,
+        "SnapshotId" Data.=: snapshotId,
+        "Throughput" Data.=: throughput,
+        "VolumeSize" Data.=: volumeSize,
+        "VolumeType" Data.=: volumeType
+      ]
diff --git a/gen/Amazonka/EC2/Types/EbsEncryptionSupport.hs b/gen/Amazonka/EC2/Types/EbsEncryptionSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsEncryptionSupport.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsEncryptionSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsEncryptionSupport
+  ( EbsEncryptionSupport
+      ( ..,
+        EbsEncryptionSupport_Supported,
+        EbsEncryptionSupport_Unsupported
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EbsEncryptionSupport = EbsEncryptionSupport'
+  { fromEbsEncryptionSupport ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EbsEncryptionSupport_Supported :: EbsEncryptionSupport
+pattern EbsEncryptionSupport_Supported = EbsEncryptionSupport' "supported"
+
+pattern EbsEncryptionSupport_Unsupported :: EbsEncryptionSupport
+pattern EbsEncryptionSupport_Unsupported = EbsEncryptionSupport' "unsupported"
+
+{-# COMPLETE
+  EbsEncryptionSupport_Supported,
+  EbsEncryptionSupport_Unsupported,
+  EbsEncryptionSupport'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EbsInfo.hs b/gen/Amazonka/EC2/Types/EbsInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsInfo.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EbsEncryptionSupport
+import Amazonka.EC2.Types.EbsNvmeSupport
+import Amazonka.EC2.Types.EbsOptimizedInfo
+import Amazonka.EC2.Types.EbsOptimizedSupport
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Amazon EBS features supported by the instance type.
+--
+-- /See:/ 'newEbsInfo' smart constructor.
+data EbsInfo = EbsInfo'
+  { -- | Describes the optimized EBS performance for the instance type.
+    ebsOptimizedInfo :: Prelude.Maybe EbsOptimizedInfo,
+    -- | Indicates whether the instance type is Amazon EBS-optimized. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html Amazon EBS-optimized instances>
+    -- in /Amazon EC2 User Guide/.
+    ebsOptimizedSupport :: Prelude.Maybe EbsOptimizedSupport,
+    -- | Indicates whether Amazon EBS encryption is supported.
+    encryptionSupport :: Prelude.Maybe EbsEncryptionSupport,
+    -- | Indicates whether non-volatile memory express (NVMe) is supported.
+    nvmeSupport :: Prelude.Maybe EbsNvmeSupport
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EbsInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ebsOptimizedInfo', 'ebsInfo_ebsOptimizedInfo' - Describes the optimized EBS performance for the instance type.
+--
+-- 'ebsOptimizedSupport', 'ebsInfo_ebsOptimizedSupport' - Indicates whether the instance type is Amazon EBS-optimized. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html Amazon EBS-optimized instances>
+-- in /Amazon EC2 User Guide/.
+--
+-- 'encryptionSupport', 'ebsInfo_encryptionSupport' - Indicates whether Amazon EBS encryption is supported.
+--
+-- 'nvmeSupport', 'ebsInfo_nvmeSupport' - Indicates whether non-volatile memory express (NVMe) is supported.
+newEbsInfo ::
+  EbsInfo
+newEbsInfo =
+  EbsInfo'
+    { ebsOptimizedInfo = Prelude.Nothing,
+      ebsOptimizedSupport = Prelude.Nothing,
+      encryptionSupport = Prelude.Nothing,
+      nvmeSupport = Prelude.Nothing
+    }
+
+-- | Describes the optimized EBS performance for the instance type.
+ebsInfo_ebsOptimizedInfo :: Lens.Lens' EbsInfo (Prelude.Maybe EbsOptimizedInfo)
+ebsInfo_ebsOptimizedInfo = Lens.lens (\EbsInfo' {ebsOptimizedInfo} -> ebsOptimizedInfo) (\s@EbsInfo' {} a -> s {ebsOptimizedInfo = a} :: EbsInfo)
+
+-- | Indicates whether the instance type is Amazon EBS-optimized. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html Amazon EBS-optimized instances>
+-- in /Amazon EC2 User Guide/.
+ebsInfo_ebsOptimizedSupport :: Lens.Lens' EbsInfo (Prelude.Maybe EbsOptimizedSupport)
+ebsInfo_ebsOptimizedSupport = Lens.lens (\EbsInfo' {ebsOptimizedSupport} -> ebsOptimizedSupport) (\s@EbsInfo' {} a -> s {ebsOptimizedSupport = a} :: EbsInfo)
+
+-- | Indicates whether Amazon EBS encryption is supported.
+ebsInfo_encryptionSupport :: Lens.Lens' EbsInfo (Prelude.Maybe EbsEncryptionSupport)
+ebsInfo_encryptionSupport = Lens.lens (\EbsInfo' {encryptionSupport} -> encryptionSupport) (\s@EbsInfo' {} a -> s {encryptionSupport = a} :: EbsInfo)
+
+-- | Indicates whether non-volatile memory express (NVMe) is supported.
+ebsInfo_nvmeSupport :: Lens.Lens' EbsInfo (Prelude.Maybe EbsNvmeSupport)
+ebsInfo_nvmeSupport = Lens.lens (\EbsInfo' {nvmeSupport} -> nvmeSupport) (\s@EbsInfo' {} a -> s {nvmeSupport = a} :: EbsInfo)
+
+instance Data.FromXML EbsInfo where
+  parseXML x =
+    EbsInfo'
+      Prelude.<$> (x Data..@? "ebsOptimizedInfo")
+      Prelude.<*> (x Data..@? "ebsOptimizedSupport")
+      Prelude.<*> (x Data..@? "encryptionSupport")
+      Prelude.<*> (x Data..@? "nvmeSupport")
+
+instance Prelude.Hashable EbsInfo where
+  hashWithSalt _salt EbsInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` ebsOptimizedInfo
+      `Prelude.hashWithSalt` ebsOptimizedSupport
+      `Prelude.hashWithSalt` encryptionSupport
+      `Prelude.hashWithSalt` nvmeSupport
+
+instance Prelude.NFData EbsInfo where
+  rnf EbsInfo' {..} =
+    Prelude.rnf ebsOptimizedInfo
+      `Prelude.seq` Prelude.rnf ebsOptimizedSupport
+      `Prelude.seq` Prelude.rnf encryptionSupport
+      `Prelude.seq` Prelude.rnf nvmeSupport
diff --git a/gen/Amazonka/EC2/Types/EbsInstanceBlockDevice.hs b/gen/Amazonka/EC2/Types/EbsInstanceBlockDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsInstanceBlockDevice.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsInstanceBlockDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsInstanceBlockDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttachmentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a parameter used to set up an EBS volume in a block device
+-- mapping.
+--
+-- /See:/ 'newEbsInstanceBlockDevice' smart constructor.
+data EbsInstanceBlockDevice = EbsInstanceBlockDevice'
+  { -- | The time stamp when the attachment initiated.
+    attachTime :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether the volume is deleted on instance termination.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The attachment state.
+    status :: Prelude.Maybe AttachmentStatus,
+    -- | The ID of the EBS volume.
+    volumeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EbsInstanceBlockDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachTime', 'ebsInstanceBlockDevice_attachTime' - The time stamp when the attachment initiated.
+--
+-- 'deleteOnTermination', 'ebsInstanceBlockDevice_deleteOnTermination' - Indicates whether the volume is deleted on instance termination.
+--
+-- 'status', 'ebsInstanceBlockDevice_status' - The attachment state.
+--
+-- 'volumeId', 'ebsInstanceBlockDevice_volumeId' - The ID of the EBS volume.
+newEbsInstanceBlockDevice ::
+  EbsInstanceBlockDevice
+newEbsInstanceBlockDevice =
+  EbsInstanceBlockDevice'
+    { attachTime =
+        Prelude.Nothing,
+      deleteOnTermination = Prelude.Nothing,
+      status = Prelude.Nothing,
+      volumeId = Prelude.Nothing
+    }
+
+-- | The time stamp when the attachment initiated.
+ebsInstanceBlockDevice_attachTime :: Lens.Lens' EbsInstanceBlockDevice (Prelude.Maybe Prelude.UTCTime)
+ebsInstanceBlockDevice_attachTime = Lens.lens (\EbsInstanceBlockDevice' {attachTime} -> attachTime) (\s@EbsInstanceBlockDevice' {} a -> s {attachTime = a} :: EbsInstanceBlockDevice) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether the volume is deleted on instance termination.
+ebsInstanceBlockDevice_deleteOnTermination :: Lens.Lens' EbsInstanceBlockDevice (Prelude.Maybe Prelude.Bool)
+ebsInstanceBlockDevice_deleteOnTermination = Lens.lens (\EbsInstanceBlockDevice' {deleteOnTermination} -> deleteOnTermination) (\s@EbsInstanceBlockDevice' {} a -> s {deleteOnTermination = a} :: EbsInstanceBlockDevice)
+
+-- | The attachment state.
+ebsInstanceBlockDevice_status :: Lens.Lens' EbsInstanceBlockDevice (Prelude.Maybe AttachmentStatus)
+ebsInstanceBlockDevice_status = Lens.lens (\EbsInstanceBlockDevice' {status} -> status) (\s@EbsInstanceBlockDevice' {} a -> s {status = a} :: EbsInstanceBlockDevice)
+
+-- | The ID of the EBS volume.
+ebsInstanceBlockDevice_volumeId :: Lens.Lens' EbsInstanceBlockDevice (Prelude.Maybe Prelude.Text)
+ebsInstanceBlockDevice_volumeId = Lens.lens (\EbsInstanceBlockDevice' {volumeId} -> volumeId) (\s@EbsInstanceBlockDevice' {} a -> s {volumeId = a} :: EbsInstanceBlockDevice)
+
+instance Data.FromXML EbsInstanceBlockDevice where
+  parseXML x =
+    EbsInstanceBlockDevice'
+      Prelude.<$> (x Data..@? "attachTime")
+      Prelude.<*> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "volumeId")
+
+instance Prelude.Hashable EbsInstanceBlockDevice where
+  hashWithSalt _salt EbsInstanceBlockDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachTime
+      `Prelude.hashWithSalt` deleteOnTermination
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData EbsInstanceBlockDevice where
+  rnf EbsInstanceBlockDevice' {..} =
+    Prelude.rnf attachTime
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf volumeId
diff --git a/gen/Amazonka/EC2/Types/EbsInstanceBlockDeviceSpecification.hs b/gen/Amazonka/EC2/Types/EbsInstanceBlockDeviceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsInstanceBlockDeviceSpecification.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsInstanceBlockDeviceSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsInstanceBlockDeviceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes information used to set up an EBS volume specified in a block
+-- device mapping.
+--
+-- /See:/ 'newEbsInstanceBlockDeviceSpecification' smart constructor.
+data EbsInstanceBlockDeviceSpecification = EbsInstanceBlockDeviceSpecification'
+  { -- | Indicates whether the volume is deleted on instance termination.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the EBS volume.
+    volumeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EbsInstanceBlockDeviceSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteOnTermination', 'ebsInstanceBlockDeviceSpecification_deleteOnTermination' - Indicates whether the volume is deleted on instance termination.
+--
+-- 'volumeId', 'ebsInstanceBlockDeviceSpecification_volumeId' - The ID of the EBS volume.
+newEbsInstanceBlockDeviceSpecification ::
+  EbsInstanceBlockDeviceSpecification
+newEbsInstanceBlockDeviceSpecification =
+  EbsInstanceBlockDeviceSpecification'
+    { deleteOnTermination =
+        Prelude.Nothing,
+      volumeId = Prelude.Nothing
+    }
+
+-- | Indicates whether the volume is deleted on instance termination.
+ebsInstanceBlockDeviceSpecification_deleteOnTermination :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Bool)
+ebsInstanceBlockDeviceSpecification_deleteOnTermination = Lens.lens (\EbsInstanceBlockDeviceSpecification' {deleteOnTermination} -> deleteOnTermination) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {deleteOnTermination = a} :: EbsInstanceBlockDeviceSpecification)
+
+-- | The ID of the EBS volume.
+ebsInstanceBlockDeviceSpecification_volumeId :: Lens.Lens' EbsInstanceBlockDeviceSpecification (Prelude.Maybe Prelude.Text)
+ebsInstanceBlockDeviceSpecification_volumeId = Lens.lens (\EbsInstanceBlockDeviceSpecification' {volumeId} -> volumeId) (\s@EbsInstanceBlockDeviceSpecification' {} a -> s {volumeId = a} :: EbsInstanceBlockDeviceSpecification)
+
+instance
+  Prelude.Hashable
+    EbsInstanceBlockDeviceSpecification
+  where
+  hashWithSalt
+    _salt
+    EbsInstanceBlockDeviceSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` volumeId
+
+instance
+  Prelude.NFData
+    EbsInstanceBlockDeviceSpecification
+  where
+  rnf EbsInstanceBlockDeviceSpecification' {..} =
+    Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf volumeId
+
+instance
+  Data.ToQuery
+    EbsInstanceBlockDeviceSpecification
+  where
+  toQuery EbsInstanceBlockDeviceSpecification' {..} =
+    Prelude.mconcat
+      [ "DeleteOnTermination" Data.=: deleteOnTermination,
+        "VolumeId" Data.=: volumeId
+      ]
diff --git a/gen/Amazonka/EC2/Types/EbsNvmeSupport.hs b/gen/Amazonka/EC2/Types/EbsNvmeSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsNvmeSupport.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsNvmeSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsNvmeSupport
+  ( EbsNvmeSupport
+      ( ..,
+        EbsNvmeSupport_Required,
+        EbsNvmeSupport_Supported,
+        EbsNvmeSupport_Unsupported
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EbsNvmeSupport = EbsNvmeSupport'
+  { fromEbsNvmeSupport ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EbsNvmeSupport_Required :: EbsNvmeSupport
+pattern EbsNvmeSupport_Required = EbsNvmeSupport' "required"
+
+pattern EbsNvmeSupport_Supported :: EbsNvmeSupport
+pattern EbsNvmeSupport_Supported = EbsNvmeSupport' "supported"
+
+pattern EbsNvmeSupport_Unsupported :: EbsNvmeSupport
+pattern EbsNvmeSupport_Unsupported = EbsNvmeSupport' "unsupported"
+
+{-# COMPLETE
+  EbsNvmeSupport_Required,
+  EbsNvmeSupport_Supported,
+  EbsNvmeSupport_Unsupported,
+  EbsNvmeSupport'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EbsOptimizedInfo.hs b/gen/Amazonka/EC2/Types/EbsOptimizedInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsOptimizedInfo.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsOptimizedInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsOptimizedInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the optimized EBS performance for supported instance types.
+--
+-- /See:/ 'newEbsOptimizedInfo' smart constructor.
+data EbsOptimizedInfo = EbsOptimizedInfo'
+  { -- | The baseline bandwidth performance for an EBS-optimized instance type,
+    -- in Mbps.
+    baselineBandwidthInMbps :: Prelude.Maybe Prelude.Int,
+    -- | The baseline input\/output storage operations per seconds for an
+    -- EBS-optimized instance type.
+    baselineIops :: Prelude.Maybe Prelude.Int,
+    -- | The baseline throughput performance for an EBS-optimized instance type,
+    -- in MB\/s.
+    baselineThroughputInMBps :: Prelude.Maybe Prelude.Double,
+    -- | The maximum bandwidth performance for an EBS-optimized instance type, in
+    -- Mbps.
+    maximumBandwidthInMbps :: Prelude.Maybe Prelude.Int,
+    -- | The maximum input\/output storage operations per second for an
+    -- EBS-optimized instance type.
+    maximumIops :: Prelude.Maybe Prelude.Int,
+    -- | The maximum throughput performance for an EBS-optimized instance type,
+    -- in MB\/s.
+    maximumThroughputInMBps :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EbsOptimizedInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'baselineBandwidthInMbps', 'ebsOptimizedInfo_baselineBandwidthInMbps' - The baseline bandwidth performance for an EBS-optimized instance type,
+-- in Mbps.
+--
+-- 'baselineIops', 'ebsOptimizedInfo_baselineIops' - The baseline input\/output storage operations per seconds for an
+-- EBS-optimized instance type.
+--
+-- 'baselineThroughputInMBps', 'ebsOptimizedInfo_baselineThroughputInMBps' - The baseline throughput performance for an EBS-optimized instance type,
+-- in MB\/s.
+--
+-- 'maximumBandwidthInMbps', 'ebsOptimizedInfo_maximumBandwidthInMbps' - The maximum bandwidth performance for an EBS-optimized instance type, in
+-- Mbps.
+--
+-- 'maximumIops', 'ebsOptimizedInfo_maximumIops' - The maximum input\/output storage operations per second for an
+-- EBS-optimized instance type.
+--
+-- 'maximumThroughputInMBps', 'ebsOptimizedInfo_maximumThroughputInMBps' - The maximum throughput performance for an EBS-optimized instance type,
+-- in MB\/s.
+newEbsOptimizedInfo ::
+  EbsOptimizedInfo
+newEbsOptimizedInfo =
+  EbsOptimizedInfo'
+    { baselineBandwidthInMbps =
+        Prelude.Nothing,
+      baselineIops = Prelude.Nothing,
+      baselineThroughputInMBps = Prelude.Nothing,
+      maximumBandwidthInMbps = Prelude.Nothing,
+      maximumIops = Prelude.Nothing,
+      maximumThroughputInMBps = Prelude.Nothing
+    }
+
+-- | The baseline bandwidth performance for an EBS-optimized instance type,
+-- in Mbps.
+ebsOptimizedInfo_baselineBandwidthInMbps :: Lens.Lens' EbsOptimizedInfo (Prelude.Maybe Prelude.Int)
+ebsOptimizedInfo_baselineBandwidthInMbps = Lens.lens (\EbsOptimizedInfo' {baselineBandwidthInMbps} -> baselineBandwidthInMbps) (\s@EbsOptimizedInfo' {} a -> s {baselineBandwidthInMbps = a} :: EbsOptimizedInfo)
+
+-- | The baseline input\/output storage operations per seconds for an
+-- EBS-optimized instance type.
+ebsOptimizedInfo_baselineIops :: Lens.Lens' EbsOptimizedInfo (Prelude.Maybe Prelude.Int)
+ebsOptimizedInfo_baselineIops = Lens.lens (\EbsOptimizedInfo' {baselineIops} -> baselineIops) (\s@EbsOptimizedInfo' {} a -> s {baselineIops = a} :: EbsOptimizedInfo)
+
+-- | The baseline throughput performance for an EBS-optimized instance type,
+-- in MB\/s.
+ebsOptimizedInfo_baselineThroughputInMBps :: Lens.Lens' EbsOptimizedInfo (Prelude.Maybe Prelude.Double)
+ebsOptimizedInfo_baselineThroughputInMBps = Lens.lens (\EbsOptimizedInfo' {baselineThroughputInMBps} -> baselineThroughputInMBps) (\s@EbsOptimizedInfo' {} a -> s {baselineThroughputInMBps = a} :: EbsOptimizedInfo)
+
+-- | The maximum bandwidth performance for an EBS-optimized instance type, in
+-- Mbps.
+ebsOptimizedInfo_maximumBandwidthInMbps :: Lens.Lens' EbsOptimizedInfo (Prelude.Maybe Prelude.Int)
+ebsOptimizedInfo_maximumBandwidthInMbps = Lens.lens (\EbsOptimizedInfo' {maximumBandwidthInMbps} -> maximumBandwidthInMbps) (\s@EbsOptimizedInfo' {} a -> s {maximumBandwidthInMbps = a} :: EbsOptimizedInfo)
+
+-- | The maximum input\/output storage operations per second for an
+-- EBS-optimized instance type.
+ebsOptimizedInfo_maximumIops :: Lens.Lens' EbsOptimizedInfo (Prelude.Maybe Prelude.Int)
+ebsOptimizedInfo_maximumIops = Lens.lens (\EbsOptimizedInfo' {maximumIops} -> maximumIops) (\s@EbsOptimizedInfo' {} a -> s {maximumIops = a} :: EbsOptimizedInfo)
+
+-- | The maximum throughput performance for an EBS-optimized instance type,
+-- in MB\/s.
+ebsOptimizedInfo_maximumThroughputInMBps :: Lens.Lens' EbsOptimizedInfo (Prelude.Maybe Prelude.Double)
+ebsOptimizedInfo_maximumThroughputInMBps = Lens.lens (\EbsOptimizedInfo' {maximumThroughputInMBps} -> maximumThroughputInMBps) (\s@EbsOptimizedInfo' {} a -> s {maximumThroughputInMBps = a} :: EbsOptimizedInfo)
+
+instance Data.FromXML EbsOptimizedInfo where
+  parseXML x =
+    EbsOptimizedInfo'
+      Prelude.<$> (x Data..@? "baselineBandwidthInMbps")
+      Prelude.<*> (x Data..@? "baselineIops")
+      Prelude.<*> (x Data..@? "baselineThroughputInMBps")
+      Prelude.<*> (x Data..@? "maximumBandwidthInMbps")
+      Prelude.<*> (x Data..@? "maximumIops")
+      Prelude.<*> (x Data..@? "maximumThroughputInMBps")
+
+instance Prelude.Hashable EbsOptimizedInfo where
+  hashWithSalt _salt EbsOptimizedInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` baselineBandwidthInMbps
+      `Prelude.hashWithSalt` baselineIops
+      `Prelude.hashWithSalt` baselineThroughputInMBps
+      `Prelude.hashWithSalt` maximumBandwidthInMbps
+      `Prelude.hashWithSalt` maximumIops
+      `Prelude.hashWithSalt` maximumThroughputInMBps
+
+instance Prelude.NFData EbsOptimizedInfo where
+  rnf EbsOptimizedInfo' {..} =
+    Prelude.rnf baselineBandwidthInMbps
+      `Prelude.seq` Prelude.rnf baselineIops
+      `Prelude.seq` Prelude.rnf baselineThroughputInMBps
+      `Prelude.seq` Prelude.rnf maximumBandwidthInMbps
+      `Prelude.seq` Prelude.rnf maximumIops
+      `Prelude.seq` Prelude.rnf maximumThroughputInMBps
diff --git a/gen/Amazonka/EC2/Types/EbsOptimizedSupport.hs b/gen/Amazonka/EC2/Types/EbsOptimizedSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EbsOptimizedSupport.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EbsOptimizedSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EbsOptimizedSupport
+  ( EbsOptimizedSupport
+      ( ..,
+        EbsOptimizedSupport_Default,
+        EbsOptimizedSupport_Supported,
+        EbsOptimizedSupport_Unsupported
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EbsOptimizedSupport = EbsOptimizedSupport'
+  { fromEbsOptimizedSupport ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EbsOptimizedSupport_Default :: EbsOptimizedSupport
+pattern EbsOptimizedSupport_Default = EbsOptimizedSupport' "default"
+
+pattern EbsOptimizedSupport_Supported :: EbsOptimizedSupport
+pattern EbsOptimizedSupport_Supported = EbsOptimizedSupport' "supported"
+
+pattern EbsOptimizedSupport_Unsupported :: EbsOptimizedSupport
+pattern EbsOptimizedSupport_Unsupported = EbsOptimizedSupport' "unsupported"
+
+{-# COMPLETE
+  EbsOptimizedSupport_Default,
+  EbsOptimizedSupport_Supported,
+  EbsOptimizedSupport_Unsupported,
+  EbsOptimizedSupport'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EfaInfo.hs b/gen/Amazonka/EC2/Types/EfaInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EfaInfo.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EfaInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EfaInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Elastic Fabric Adapters for the instance type.
+--
+-- /See:/ 'newEfaInfo' smart constructor.
+data EfaInfo = EfaInfo'
+  { -- | The maximum number of Elastic Fabric Adapters for the instance type.
+    maximumEfaInterfaces :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EfaInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maximumEfaInterfaces', 'efaInfo_maximumEfaInterfaces' - The maximum number of Elastic Fabric Adapters for the instance type.
+newEfaInfo ::
+  EfaInfo
+newEfaInfo =
+  EfaInfo' {maximumEfaInterfaces = Prelude.Nothing}
+
+-- | The maximum number of Elastic Fabric Adapters for the instance type.
+efaInfo_maximumEfaInterfaces :: Lens.Lens' EfaInfo (Prelude.Maybe Prelude.Int)
+efaInfo_maximumEfaInterfaces = Lens.lens (\EfaInfo' {maximumEfaInterfaces} -> maximumEfaInterfaces) (\s@EfaInfo' {} a -> s {maximumEfaInterfaces = a} :: EfaInfo)
+
+instance Data.FromXML EfaInfo where
+  parseXML x =
+    EfaInfo'
+      Prelude.<$> (x Data..@? "maximumEfaInterfaces")
+
+instance Prelude.Hashable EfaInfo where
+  hashWithSalt _salt EfaInfo' {..} =
+    _salt `Prelude.hashWithSalt` maximumEfaInterfaces
+
+instance Prelude.NFData EfaInfo where
+  rnf EfaInfo' {..} = Prelude.rnf maximumEfaInterfaces
diff --git a/gen/Amazonka/EC2/Types/EgressOnlyInternetGateway.hs b/gen/Amazonka/EC2/Types/EgressOnlyInternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EgressOnlyInternetGateway.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EgressOnlyInternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EgressOnlyInternetGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InternetGatewayAttachment
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an egress-only internet gateway.
+--
+-- /See:/ 'newEgressOnlyInternetGateway' smart constructor.
+data EgressOnlyInternetGateway = EgressOnlyInternetGateway'
+  { -- | Information about the attachment of the egress-only internet gateway.
+    attachments :: Prelude.Maybe [InternetGatewayAttachment],
+    -- | The ID of the egress-only internet gateway.
+    egressOnlyInternetGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the egress-only internet gateway.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EgressOnlyInternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachments', 'egressOnlyInternetGateway_attachments' - Information about the attachment of the egress-only internet gateway.
+--
+-- 'egressOnlyInternetGatewayId', 'egressOnlyInternetGateway_egressOnlyInternetGatewayId' - The ID of the egress-only internet gateway.
+--
+-- 'tags', 'egressOnlyInternetGateway_tags' - The tags assigned to the egress-only internet gateway.
+newEgressOnlyInternetGateway ::
+  EgressOnlyInternetGateway
+newEgressOnlyInternetGateway =
+  EgressOnlyInternetGateway'
+    { attachments =
+        Prelude.Nothing,
+      egressOnlyInternetGatewayId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Information about the attachment of the egress-only internet gateway.
+egressOnlyInternetGateway_attachments :: Lens.Lens' EgressOnlyInternetGateway (Prelude.Maybe [InternetGatewayAttachment])
+egressOnlyInternetGateway_attachments = Lens.lens (\EgressOnlyInternetGateway' {attachments} -> attachments) (\s@EgressOnlyInternetGateway' {} a -> s {attachments = a} :: EgressOnlyInternetGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the egress-only internet gateway.
+egressOnlyInternetGateway_egressOnlyInternetGatewayId :: Lens.Lens' EgressOnlyInternetGateway (Prelude.Maybe Prelude.Text)
+egressOnlyInternetGateway_egressOnlyInternetGatewayId = Lens.lens (\EgressOnlyInternetGateway' {egressOnlyInternetGatewayId} -> egressOnlyInternetGatewayId) (\s@EgressOnlyInternetGateway' {} a -> s {egressOnlyInternetGatewayId = a} :: EgressOnlyInternetGateway)
+
+-- | The tags assigned to the egress-only internet gateway.
+egressOnlyInternetGateway_tags :: Lens.Lens' EgressOnlyInternetGateway (Prelude.Maybe [Tag])
+egressOnlyInternetGateway_tags = Lens.lens (\EgressOnlyInternetGateway' {tags} -> tags) (\s@EgressOnlyInternetGateway' {} a -> s {tags = a} :: EgressOnlyInternetGateway) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML EgressOnlyInternetGateway where
+  parseXML x =
+    EgressOnlyInternetGateway'
+      Prelude.<$> ( x
+                      Data..@? "attachmentSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "egressOnlyInternetGatewayId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable EgressOnlyInternetGateway where
+  hashWithSalt _salt EgressOnlyInternetGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachments
+      `Prelude.hashWithSalt` egressOnlyInternetGatewayId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData EgressOnlyInternetGateway where
+  rnf EgressOnlyInternetGateway' {..} =
+    Prelude.rnf attachments
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ElasticGpuAssociation.hs b/gen/Amazonka/EC2/Types/ElasticGpuAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpuAssociation.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpuAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpuAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the association between an instance and an Elastic Graphics
+-- accelerator.
+--
+-- /See:/ 'newElasticGpuAssociation' smart constructor.
+data ElasticGpuAssociation = ElasticGpuAssociation'
+  { -- | The ID of the association.
+    elasticGpuAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the association between the instance and the Elastic
+    -- Graphics accelerator.
+    elasticGpuAssociationState :: Prelude.Maybe Prelude.Text,
+    -- | The time the Elastic Graphics accelerator was associated with the
+    -- instance.
+    elasticGpuAssociationTime :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Elastic Graphics accelerator.
+    elasticGpuId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticGpuAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'elasticGpuAssociationId', 'elasticGpuAssociation_elasticGpuAssociationId' - The ID of the association.
+--
+-- 'elasticGpuAssociationState', 'elasticGpuAssociation_elasticGpuAssociationState' - The state of the association between the instance and the Elastic
+-- Graphics accelerator.
+--
+-- 'elasticGpuAssociationTime', 'elasticGpuAssociation_elasticGpuAssociationTime' - The time the Elastic Graphics accelerator was associated with the
+-- instance.
+--
+-- 'elasticGpuId', 'elasticGpuAssociation_elasticGpuId' - The ID of the Elastic Graphics accelerator.
+newElasticGpuAssociation ::
+  ElasticGpuAssociation
+newElasticGpuAssociation =
+  ElasticGpuAssociation'
+    { elasticGpuAssociationId =
+        Prelude.Nothing,
+      elasticGpuAssociationState = Prelude.Nothing,
+      elasticGpuAssociationTime = Prelude.Nothing,
+      elasticGpuId = Prelude.Nothing
+    }
+
+-- | The ID of the association.
+elasticGpuAssociation_elasticGpuAssociationId :: Lens.Lens' ElasticGpuAssociation (Prelude.Maybe Prelude.Text)
+elasticGpuAssociation_elasticGpuAssociationId = Lens.lens (\ElasticGpuAssociation' {elasticGpuAssociationId} -> elasticGpuAssociationId) (\s@ElasticGpuAssociation' {} a -> s {elasticGpuAssociationId = a} :: ElasticGpuAssociation)
+
+-- | The state of the association between the instance and the Elastic
+-- Graphics accelerator.
+elasticGpuAssociation_elasticGpuAssociationState :: Lens.Lens' ElasticGpuAssociation (Prelude.Maybe Prelude.Text)
+elasticGpuAssociation_elasticGpuAssociationState = Lens.lens (\ElasticGpuAssociation' {elasticGpuAssociationState} -> elasticGpuAssociationState) (\s@ElasticGpuAssociation' {} a -> s {elasticGpuAssociationState = a} :: ElasticGpuAssociation)
+
+-- | The time the Elastic Graphics accelerator was associated with the
+-- instance.
+elasticGpuAssociation_elasticGpuAssociationTime :: Lens.Lens' ElasticGpuAssociation (Prelude.Maybe Prelude.Text)
+elasticGpuAssociation_elasticGpuAssociationTime = Lens.lens (\ElasticGpuAssociation' {elasticGpuAssociationTime} -> elasticGpuAssociationTime) (\s@ElasticGpuAssociation' {} a -> s {elasticGpuAssociationTime = a} :: ElasticGpuAssociation)
+
+-- | The ID of the Elastic Graphics accelerator.
+elasticGpuAssociation_elasticGpuId :: Lens.Lens' ElasticGpuAssociation (Prelude.Maybe Prelude.Text)
+elasticGpuAssociation_elasticGpuId = Lens.lens (\ElasticGpuAssociation' {elasticGpuId} -> elasticGpuId) (\s@ElasticGpuAssociation' {} a -> s {elasticGpuId = a} :: ElasticGpuAssociation)
+
+instance Data.FromXML ElasticGpuAssociation where
+  parseXML x =
+    ElasticGpuAssociation'
+      Prelude.<$> (x Data..@? "elasticGpuAssociationId")
+      Prelude.<*> (x Data..@? "elasticGpuAssociationState")
+      Prelude.<*> (x Data..@? "elasticGpuAssociationTime")
+      Prelude.<*> (x Data..@? "elasticGpuId")
+
+instance Prelude.Hashable ElasticGpuAssociation where
+  hashWithSalt _salt ElasticGpuAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` elasticGpuAssociationId
+      `Prelude.hashWithSalt` elasticGpuAssociationState
+      `Prelude.hashWithSalt` elasticGpuAssociationTime
+      `Prelude.hashWithSalt` elasticGpuId
+
+instance Prelude.NFData ElasticGpuAssociation where
+  rnf ElasticGpuAssociation' {..} =
+    Prelude.rnf elasticGpuAssociationId
+      `Prelude.seq` Prelude.rnf elasticGpuAssociationState
+      `Prelude.seq` Prelude.rnf elasticGpuAssociationTime
+      `Prelude.seq` Prelude.rnf elasticGpuId
diff --git a/gen/Amazonka/EC2/Types/ElasticGpuHealth.hs b/gen/Amazonka/EC2/Types/ElasticGpuHealth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpuHealth.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpuHealth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpuHealth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ElasticGpuStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of an Elastic Graphics accelerator.
+--
+-- /See:/ 'newElasticGpuHealth' smart constructor.
+data ElasticGpuHealth = ElasticGpuHealth'
+  { -- | The health status.
+    status :: Prelude.Maybe ElasticGpuStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticGpuHealth' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'elasticGpuHealth_status' - The health status.
+newElasticGpuHealth ::
+  ElasticGpuHealth
+newElasticGpuHealth =
+  ElasticGpuHealth' {status = Prelude.Nothing}
+
+-- | The health status.
+elasticGpuHealth_status :: Lens.Lens' ElasticGpuHealth (Prelude.Maybe ElasticGpuStatus)
+elasticGpuHealth_status = Lens.lens (\ElasticGpuHealth' {status} -> status) (\s@ElasticGpuHealth' {} a -> s {status = a} :: ElasticGpuHealth)
+
+instance Data.FromXML ElasticGpuHealth where
+  parseXML x =
+    ElasticGpuHealth' Prelude.<$> (x Data..@? "status")
+
+instance Prelude.Hashable ElasticGpuHealth where
+  hashWithSalt _salt ElasticGpuHealth' {..} =
+    _salt `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ElasticGpuHealth where
+  rnf ElasticGpuHealth' {..} = Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/ElasticGpuSpecification.hs b/gen/Amazonka/EC2/Types/ElasticGpuSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpuSpecification.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpuSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpuSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | A specification for an Elastic Graphics accelerator.
+--
+-- /See:/ 'newElasticGpuSpecification' smart constructor.
+data ElasticGpuSpecification = ElasticGpuSpecification'
+  { -- | The type of Elastic Graphics accelerator. For more information about the
+    -- values to specify for @Type@, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html#elastic-graphics-basics Elastic Graphics Basics>,
+    -- specifically the Elastic Graphics accelerator column, in the /Amazon
+    -- Elastic Compute Cloud User Guide for Windows Instances/.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticGpuSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'type'', 'elasticGpuSpecification_type' - The type of Elastic Graphics accelerator. For more information about the
+-- values to specify for @Type@, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html#elastic-graphics-basics Elastic Graphics Basics>,
+-- specifically the Elastic Graphics accelerator column, in the /Amazon
+-- Elastic Compute Cloud User Guide for Windows Instances/.
+newElasticGpuSpecification ::
+  -- | 'type''
+  Prelude.Text ->
+  ElasticGpuSpecification
+newElasticGpuSpecification pType_ =
+  ElasticGpuSpecification' {type' = pType_}
+
+-- | The type of Elastic Graphics accelerator. For more information about the
+-- values to specify for @Type@, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html#elastic-graphics-basics Elastic Graphics Basics>,
+-- specifically the Elastic Graphics accelerator column, in the /Amazon
+-- Elastic Compute Cloud User Guide for Windows Instances/.
+elasticGpuSpecification_type :: Lens.Lens' ElasticGpuSpecification Prelude.Text
+elasticGpuSpecification_type = Lens.lens (\ElasticGpuSpecification' {type'} -> type') (\s@ElasticGpuSpecification' {} a -> s {type' = a} :: ElasticGpuSpecification)
+
+instance Prelude.Hashable ElasticGpuSpecification where
+  hashWithSalt _salt ElasticGpuSpecification' {..} =
+    _salt `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ElasticGpuSpecification where
+  rnf ElasticGpuSpecification' {..} = Prelude.rnf type'
+
+instance Data.ToQuery ElasticGpuSpecification where
+  toQuery ElasticGpuSpecification' {..} =
+    Prelude.mconcat ["Type" Data.=: type']
diff --git a/gen/Amazonka/EC2/Types/ElasticGpuSpecificationResponse.hs b/gen/Amazonka/EC2/Types/ElasticGpuSpecificationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpuSpecificationResponse.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpuSpecificationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpuSpecificationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an elastic GPU.
+--
+-- /See:/ 'newElasticGpuSpecificationResponse' smart constructor.
+data ElasticGpuSpecificationResponse = ElasticGpuSpecificationResponse'
+  { -- | The elastic GPU type.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticGpuSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'type'', 'elasticGpuSpecificationResponse_type' - The elastic GPU type.
+newElasticGpuSpecificationResponse ::
+  ElasticGpuSpecificationResponse
+newElasticGpuSpecificationResponse =
+  ElasticGpuSpecificationResponse'
+    { type' =
+        Prelude.Nothing
+    }
+
+-- | The elastic GPU type.
+elasticGpuSpecificationResponse_type :: Lens.Lens' ElasticGpuSpecificationResponse (Prelude.Maybe Prelude.Text)
+elasticGpuSpecificationResponse_type = Lens.lens (\ElasticGpuSpecificationResponse' {type'} -> type') (\s@ElasticGpuSpecificationResponse' {} a -> s {type' = a} :: ElasticGpuSpecificationResponse)
+
+instance Data.FromXML ElasticGpuSpecificationResponse where
+  parseXML x =
+    ElasticGpuSpecificationResponse'
+      Prelude.<$> (x Data..@? "type")
+
+instance
+  Prelude.Hashable
+    ElasticGpuSpecificationResponse
+  where
+  hashWithSalt
+    _salt
+    ElasticGpuSpecificationResponse' {..} =
+      _salt `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    ElasticGpuSpecificationResponse
+  where
+  rnf ElasticGpuSpecificationResponse' {..} =
+    Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/ElasticGpuState.hs b/gen/Amazonka/EC2/Types/ElasticGpuState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpuState.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpuState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpuState
+  ( ElasticGpuState
+      ( ..,
+        ElasticGpuState_ATTACHED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ElasticGpuState = ElasticGpuState'
+  { fromElasticGpuState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ElasticGpuState_ATTACHED :: ElasticGpuState
+pattern ElasticGpuState_ATTACHED = ElasticGpuState' "ATTACHED"
+
+{-# COMPLETE
+  ElasticGpuState_ATTACHED,
+  ElasticGpuState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ElasticGpuStatus.hs b/gen/Amazonka/EC2/Types/ElasticGpuStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpuStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpuStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpuStatus
+  ( ElasticGpuStatus
+      ( ..,
+        ElasticGpuStatus_IMPAIRED,
+        ElasticGpuStatus_OK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ElasticGpuStatus = ElasticGpuStatus'
+  { fromElasticGpuStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ElasticGpuStatus_IMPAIRED :: ElasticGpuStatus
+pattern ElasticGpuStatus_IMPAIRED = ElasticGpuStatus' "IMPAIRED"
+
+pattern ElasticGpuStatus_OK :: ElasticGpuStatus
+pattern ElasticGpuStatus_OK = ElasticGpuStatus' "OK"
+
+{-# COMPLETE
+  ElasticGpuStatus_IMPAIRED,
+  ElasticGpuStatus_OK,
+  ElasticGpuStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ElasticGpus.hs b/gen/Amazonka/EC2/Types/ElasticGpus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticGpus.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticGpus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticGpus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ElasticGpuHealth
+import Amazonka.EC2.Types.ElasticGpuState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Elastic Graphics accelerator.
+--
+-- /See:/ 'newElasticGpus' smart constructor.
+data ElasticGpus = ElasticGpus'
+  { -- | The Availability Zone in the which the Elastic Graphics accelerator
+    -- resides.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Elastic Graphics accelerator.
+    elasticGpuHealth :: Prelude.Maybe ElasticGpuHealth,
+    -- | The ID of the Elastic Graphics accelerator.
+    elasticGpuId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Elastic Graphics accelerator.
+    elasticGpuState :: Prelude.Maybe ElasticGpuState,
+    -- | The type of Elastic Graphics accelerator.
+    elasticGpuType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance to which the Elastic Graphics accelerator is
+    -- attached.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the Elastic Graphics accelerator.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticGpus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'elasticGpus_availabilityZone' - The Availability Zone in the which the Elastic Graphics accelerator
+-- resides.
+--
+-- 'elasticGpuHealth', 'elasticGpus_elasticGpuHealth' - The status of the Elastic Graphics accelerator.
+--
+-- 'elasticGpuId', 'elasticGpus_elasticGpuId' - The ID of the Elastic Graphics accelerator.
+--
+-- 'elasticGpuState', 'elasticGpus_elasticGpuState' - The state of the Elastic Graphics accelerator.
+--
+-- 'elasticGpuType', 'elasticGpus_elasticGpuType' - The type of Elastic Graphics accelerator.
+--
+-- 'instanceId', 'elasticGpus_instanceId' - The ID of the instance to which the Elastic Graphics accelerator is
+-- attached.
+--
+-- 'tags', 'elasticGpus_tags' - The tags assigned to the Elastic Graphics accelerator.
+newElasticGpus ::
+  ElasticGpus
+newElasticGpus =
+  ElasticGpus'
+    { availabilityZone = Prelude.Nothing,
+      elasticGpuHealth = Prelude.Nothing,
+      elasticGpuId = Prelude.Nothing,
+      elasticGpuState = Prelude.Nothing,
+      elasticGpuType = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Availability Zone in the which the Elastic Graphics accelerator
+-- resides.
+elasticGpus_availabilityZone :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
+elasticGpus_availabilityZone = Lens.lens (\ElasticGpus' {availabilityZone} -> availabilityZone) (\s@ElasticGpus' {} a -> s {availabilityZone = a} :: ElasticGpus)
+
+-- | The status of the Elastic Graphics accelerator.
+elasticGpus_elasticGpuHealth :: Lens.Lens' ElasticGpus (Prelude.Maybe ElasticGpuHealth)
+elasticGpus_elasticGpuHealth = Lens.lens (\ElasticGpus' {elasticGpuHealth} -> elasticGpuHealth) (\s@ElasticGpus' {} a -> s {elasticGpuHealth = a} :: ElasticGpus)
+
+-- | The ID of the Elastic Graphics accelerator.
+elasticGpus_elasticGpuId :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
+elasticGpus_elasticGpuId = Lens.lens (\ElasticGpus' {elasticGpuId} -> elasticGpuId) (\s@ElasticGpus' {} a -> s {elasticGpuId = a} :: ElasticGpus)
+
+-- | The state of the Elastic Graphics accelerator.
+elasticGpus_elasticGpuState :: Lens.Lens' ElasticGpus (Prelude.Maybe ElasticGpuState)
+elasticGpus_elasticGpuState = Lens.lens (\ElasticGpus' {elasticGpuState} -> elasticGpuState) (\s@ElasticGpus' {} a -> s {elasticGpuState = a} :: ElasticGpus)
+
+-- | The type of Elastic Graphics accelerator.
+elasticGpus_elasticGpuType :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
+elasticGpus_elasticGpuType = Lens.lens (\ElasticGpus' {elasticGpuType} -> elasticGpuType) (\s@ElasticGpus' {} a -> s {elasticGpuType = a} :: ElasticGpus)
+
+-- | The ID of the instance to which the Elastic Graphics accelerator is
+-- attached.
+elasticGpus_instanceId :: Lens.Lens' ElasticGpus (Prelude.Maybe Prelude.Text)
+elasticGpus_instanceId = Lens.lens (\ElasticGpus' {instanceId} -> instanceId) (\s@ElasticGpus' {} a -> s {instanceId = a} :: ElasticGpus)
+
+-- | The tags assigned to the Elastic Graphics accelerator.
+elasticGpus_tags :: Lens.Lens' ElasticGpus (Prelude.Maybe [Tag])
+elasticGpus_tags = Lens.lens (\ElasticGpus' {tags} -> tags) (\s@ElasticGpus' {} a -> s {tags = a} :: ElasticGpus) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ElasticGpus where
+  parseXML x =
+    ElasticGpus'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "elasticGpuHealth")
+      Prelude.<*> (x Data..@? "elasticGpuId")
+      Prelude.<*> (x Data..@? "elasticGpuState")
+      Prelude.<*> (x Data..@? "elasticGpuType")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ElasticGpus where
+  hashWithSalt _salt ElasticGpus' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` elasticGpuHealth
+      `Prelude.hashWithSalt` elasticGpuId
+      `Prelude.hashWithSalt` elasticGpuState
+      `Prelude.hashWithSalt` elasticGpuType
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ElasticGpus where
+  rnf ElasticGpus' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf elasticGpuHealth
+      `Prelude.seq` Prelude.rnf elasticGpuId
+      `Prelude.seq` Prelude.rnf elasticGpuState
+      `Prelude.seq` Prelude.rnf elasticGpuType
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ElasticInferenceAccelerator.hs b/gen/Amazonka/EC2/Types/ElasticInferenceAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticInferenceAccelerator.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticInferenceAccelerator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticInferenceAccelerator where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an elastic inference accelerator.
+--
+-- /See:/ 'newElasticInferenceAccelerator' smart constructor.
+data ElasticInferenceAccelerator = ElasticInferenceAccelerator'
+  { -- | The number of elastic inference accelerators to attach to the instance.
+    --
+    -- Default: 1
+    count :: Prelude.Maybe Prelude.Natural,
+    -- | The type of elastic inference accelerator. The possible values are
+    -- @eia1.medium@, @eia1.large@, @eia1.xlarge@, @eia2.medium@, @eia2.large@,
+    -- and @eia2.xlarge@.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticInferenceAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'elasticInferenceAccelerator_count' - The number of elastic inference accelerators to attach to the instance.
+--
+-- Default: 1
+--
+-- 'type'', 'elasticInferenceAccelerator_type' - The type of elastic inference accelerator. The possible values are
+-- @eia1.medium@, @eia1.large@, @eia1.xlarge@, @eia2.medium@, @eia2.large@,
+-- and @eia2.xlarge@.
+newElasticInferenceAccelerator ::
+  -- | 'type''
+  Prelude.Text ->
+  ElasticInferenceAccelerator
+newElasticInferenceAccelerator pType_ =
+  ElasticInferenceAccelerator'
+    { count =
+        Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | The number of elastic inference accelerators to attach to the instance.
+--
+-- Default: 1
+elasticInferenceAccelerator_count :: Lens.Lens' ElasticInferenceAccelerator (Prelude.Maybe Prelude.Natural)
+elasticInferenceAccelerator_count = Lens.lens (\ElasticInferenceAccelerator' {count} -> count) (\s@ElasticInferenceAccelerator' {} a -> s {count = a} :: ElasticInferenceAccelerator)
+
+-- | The type of elastic inference accelerator. The possible values are
+-- @eia1.medium@, @eia1.large@, @eia1.xlarge@, @eia2.medium@, @eia2.large@,
+-- and @eia2.xlarge@.
+elasticInferenceAccelerator_type :: Lens.Lens' ElasticInferenceAccelerator Prelude.Text
+elasticInferenceAccelerator_type = Lens.lens (\ElasticInferenceAccelerator' {type'} -> type') (\s@ElasticInferenceAccelerator' {} a -> s {type' = a} :: ElasticInferenceAccelerator)
+
+instance Prelude.Hashable ElasticInferenceAccelerator where
+  hashWithSalt _salt ElasticInferenceAccelerator' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ElasticInferenceAccelerator where
+  rnf ElasticInferenceAccelerator' {..} =
+    Prelude.rnf count `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToQuery ElasticInferenceAccelerator where
+  toQuery ElasticInferenceAccelerator' {..} =
+    Prelude.mconcat
+      ["Count" Data.=: count, "Type" Data.=: type']
diff --git a/gen/Amazonka/EC2/Types/ElasticInferenceAcceleratorAssociation.hs b/gen/Amazonka/EC2/Types/ElasticInferenceAcceleratorAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ElasticInferenceAcceleratorAssociation.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ElasticInferenceAcceleratorAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ElasticInferenceAcceleratorAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the association between an instance and an elastic inference
+-- accelerator.
+--
+-- /See:/ 'newElasticInferenceAcceleratorAssociation' smart constructor.
+data ElasticInferenceAcceleratorAssociation = ElasticInferenceAcceleratorAssociation'
+  { -- | The Amazon Resource Name (ARN) of the elastic inference accelerator.
+    elasticInferenceAcceleratorArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the association.
+    elasticInferenceAcceleratorAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the elastic inference accelerator.
+    elasticInferenceAcceleratorAssociationState :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the elastic inference accelerator is associated with
+    -- an instance.
+    elasticInferenceAcceleratorAssociationTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ElasticInferenceAcceleratorAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'elasticInferenceAcceleratorArn', 'elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorArn' - The Amazon Resource Name (ARN) of the elastic inference accelerator.
+--
+-- 'elasticInferenceAcceleratorAssociationId', 'elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationId' - The ID of the association.
+--
+-- 'elasticInferenceAcceleratorAssociationState', 'elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationState' - The state of the elastic inference accelerator.
+--
+-- 'elasticInferenceAcceleratorAssociationTime', 'elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationTime' - The time at which the elastic inference accelerator is associated with
+-- an instance.
+newElasticInferenceAcceleratorAssociation ::
+  ElasticInferenceAcceleratorAssociation
+newElasticInferenceAcceleratorAssociation =
+  ElasticInferenceAcceleratorAssociation'
+    { elasticInferenceAcceleratorArn =
+        Prelude.Nothing,
+      elasticInferenceAcceleratorAssociationId =
+        Prelude.Nothing,
+      elasticInferenceAcceleratorAssociationState =
+        Prelude.Nothing,
+      elasticInferenceAcceleratorAssociationTime =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the elastic inference accelerator.
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorArn :: Lens.Lens' ElasticInferenceAcceleratorAssociation (Prelude.Maybe Prelude.Text)
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorArn = Lens.lens (\ElasticInferenceAcceleratorAssociation' {elasticInferenceAcceleratorArn} -> elasticInferenceAcceleratorArn) (\s@ElasticInferenceAcceleratorAssociation' {} a -> s {elasticInferenceAcceleratorArn = a} :: ElasticInferenceAcceleratorAssociation)
+
+-- | The ID of the association.
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationId :: Lens.Lens' ElasticInferenceAcceleratorAssociation (Prelude.Maybe Prelude.Text)
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationId = Lens.lens (\ElasticInferenceAcceleratorAssociation' {elasticInferenceAcceleratorAssociationId} -> elasticInferenceAcceleratorAssociationId) (\s@ElasticInferenceAcceleratorAssociation' {} a -> s {elasticInferenceAcceleratorAssociationId = a} :: ElasticInferenceAcceleratorAssociation)
+
+-- | The state of the elastic inference accelerator.
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationState :: Lens.Lens' ElasticInferenceAcceleratorAssociation (Prelude.Maybe Prelude.Text)
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationState = Lens.lens (\ElasticInferenceAcceleratorAssociation' {elasticInferenceAcceleratorAssociationState} -> elasticInferenceAcceleratorAssociationState) (\s@ElasticInferenceAcceleratorAssociation' {} a -> s {elasticInferenceAcceleratorAssociationState = a} :: ElasticInferenceAcceleratorAssociation)
+
+-- | The time at which the elastic inference accelerator is associated with
+-- an instance.
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationTime :: Lens.Lens' ElasticInferenceAcceleratorAssociation (Prelude.Maybe Prelude.UTCTime)
+elasticInferenceAcceleratorAssociation_elasticInferenceAcceleratorAssociationTime = Lens.lens (\ElasticInferenceAcceleratorAssociation' {elasticInferenceAcceleratorAssociationTime} -> elasticInferenceAcceleratorAssociationTime) (\s@ElasticInferenceAcceleratorAssociation' {} a -> s {elasticInferenceAcceleratorAssociationTime = a} :: ElasticInferenceAcceleratorAssociation) Prelude.. Lens.mapping Data._Time
+
+instance
+  Data.FromXML
+    ElasticInferenceAcceleratorAssociation
+  where
+  parseXML x =
+    ElasticInferenceAcceleratorAssociation'
+      Prelude.<$> (x Data..@? "elasticInferenceAcceleratorArn")
+      Prelude.<*> ( x
+                      Data..@? "elasticInferenceAcceleratorAssociationId"
+                  )
+      Prelude.<*> ( x
+                      Data..@? "elasticInferenceAcceleratorAssociationState"
+                  )
+      Prelude.<*> ( x
+                      Data..@? "elasticInferenceAcceleratorAssociationTime"
+                  )
+
+instance
+  Prelude.Hashable
+    ElasticInferenceAcceleratorAssociation
+  where
+  hashWithSalt
+    _salt
+    ElasticInferenceAcceleratorAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` elasticInferenceAcceleratorArn
+        `Prelude.hashWithSalt` elasticInferenceAcceleratorAssociationId
+        `Prelude.hashWithSalt` elasticInferenceAcceleratorAssociationState
+        `Prelude.hashWithSalt` elasticInferenceAcceleratorAssociationTime
+
+instance
+  Prelude.NFData
+    ElasticInferenceAcceleratorAssociation
+  where
+  rnf ElasticInferenceAcceleratorAssociation' {..} =
+    Prelude.rnf elasticInferenceAcceleratorArn
+      `Prelude.seq` Prelude.rnf elasticInferenceAcceleratorAssociationId
+      `Prelude.seq` Prelude.rnf
+        elasticInferenceAcceleratorAssociationState
+      `Prelude.seq` Prelude.rnf
+        elasticInferenceAcceleratorAssociationTime
diff --git a/gen/Amazonka/EC2/Types/EnaSrdSpecification.hs b/gen/Amazonka/EC2/Types/EnaSrdSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnaSrdSpecification.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnaSrdSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnaSrdSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EnaSrdUdpSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
+-- technology to increase the maximum bandwidth used per stream and
+-- minimize tail latency of network traffic between EC2 instances. With ENA
+-- Express, you can communicate between two EC2 instances in the same
+-- subnet within the same account, or in different accounts. Both sending
+-- and receiving instances must have ENA Express enabled.
+--
+-- To improve the reliability of network packet delivery, ENA Express
+-- reorders network packets on the receiving end by default. However, some
+-- UDP-based applications are designed to handle network packets that are
+-- out of order to reduce the overhead for packet delivery at the network
+-- layer. When ENA Express is enabled, you can specify whether UDP network
+-- traffic uses it.
+--
+-- /See:/ 'newEnaSrdSpecification' smart constructor.
+data EnaSrdSpecification = EnaSrdSpecification'
+  { -- | Indicates whether ENA Express is enabled for the network interface.
+    enaSrdEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Configures ENA Express for UDP network traffic.
+    enaSrdUdpSpecification :: Prelude.Maybe EnaSrdUdpSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnaSrdSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enaSrdEnabled', 'enaSrdSpecification_enaSrdEnabled' - Indicates whether ENA Express is enabled for the network interface.
+--
+-- 'enaSrdUdpSpecification', 'enaSrdSpecification_enaSrdUdpSpecification' - Configures ENA Express for UDP network traffic.
+newEnaSrdSpecification ::
+  EnaSrdSpecification
+newEnaSrdSpecification =
+  EnaSrdSpecification'
+    { enaSrdEnabled =
+        Prelude.Nothing,
+      enaSrdUdpSpecification = Prelude.Nothing
+    }
+
+-- | Indicates whether ENA Express is enabled for the network interface.
+enaSrdSpecification_enaSrdEnabled :: Lens.Lens' EnaSrdSpecification (Prelude.Maybe Prelude.Bool)
+enaSrdSpecification_enaSrdEnabled = Lens.lens (\EnaSrdSpecification' {enaSrdEnabled} -> enaSrdEnabled) (\s@EnaSrdSpecification' {} a -> s {enaSrdEnabled = a} :: EnaSrdSpecification)
+
+-- | Configures ENA Express for UDP network traffic.
+enaSrdSpecification_enaSrdUdpSpecification :: Lens.Lens' EnaSrdSpecification (Prelude.Maybe EnaSrdUdpSpecification)
+enaSrdSpecification_enaSrdUdpSpecification = Lens.lens (\EnaSrdSpecification' {enaSrdUdpSpecification} -> enaSrdUdpSpecification) (\s@EnaSrdSpecification' {} a -> s {enaSrdUdpSpecification = a} :: EnaSrdSpecification)
+
+instance Prelude.Hashable EnaSrdSpecification where
+  hashWithSalt _salt EnaSrdSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` enaSrdEnabled
+      `Prelude.hashWithSalt` enaSrdUdpSpecification
+
+instance Prelude.NFData EnaSrdSpecification where
+  rnf EnaSrdSpecification' {..} =
+    Prelude.rnf enaSrdEnabled
+      `Prelude.seq` Prelude.rnf enaSrdUdpSpecification
+
+instance Data.ToQuery EnaSrdSpecification where
+  toQuery EnaSrdSpecification' {..} =
+    Prelude.mconcat
+      [ "EnaSrdEnabled" Data.=: enaSrdEnabled,
+        "EnaSrdUdpSpecification"
+          Data.=: enaSrdUdpSpecification
+      ]
diff --git a/gen/Amazonka/EC2/Types/EnaSrdUdpSpecification.hs b/gen/Amazonka/EC2/Types/EnaSrdUdpSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnaSrdUdpSpecification.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnaSrdUdpSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnaSrdUdpSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | ENA Express is compatible with both TCP and UDP transport protocols.
+-- When it’s enabled, TCP traffic automatically uses it. However, some
+-- UDP-based applications are designed to handle network packets that are
+-- out of order, without a need for retransmission, such as live video
+-- broadcasting or other near-real-time applications. For UDP traffic, you
+-- can specify whether to use ENA Express, based on your application
+-- environment needs.
+--
+-- /See:/ 'newEnaSrdUdpSpecification' smart constructor.
+data EnaSrdUdpSpecification = EnaSrdUdpSpecification'
+  { -- | Indicates whether UDP traffic uses ENA Express. To specify this setting,
+    -- you must first enable ENA Express.
+    enaSrdUdpEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnaSrdUdpSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enaSrdUdpEnabled', 'enaSrdUdpSpecification_enaSrdUdpEnabled' - Indicates whether UDP traffic uses ENA Express. To specify this setting,
+-- you must first enable ENA Express.
+newEnaSrdUdpSpecification ::
+  EnaSrdUdpSpecification
+newEnaSrdUdpSpecification =
+  EnaSrdUdpSpecification'
+    { enaSrdUdpEnabled =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether UDP traffic uses ENA Express. To specify this setting,
+-- you must first enable ENA Express.
+enaSrdUdpSpecification_enaSrdUdpEnabled :: Lens.Lens' EnaSrdUdpSpecification (Prelude.Maybe Prelude.Bool)
+enaSrdUdpSpecification_enaSrdUdpEnabled = Lens.lens (\EnaSrdUdpSpecification' {enaSrdUdpEnabled} -> enaSrdUdpEnabled) (\s@EnaSrdUdpSpecification' {} a -> s {enaSrdUdpEnabled = a} :: EnaSrdUdpSpecification)
+
+instance Prelude.Hashable EnaSrdUdpSpecification where
+  hashWithSalt _salt EnaSrdUdpSpecification' {..} =
+    _salt `Prelude.hashWithSalt` enaSrdUdpEnabled
+
+instance Prelude.NFData EnaSrdUdpSpecification where
+  rnf EnaSrdUdpSpecification' {..} =
+    Prelude.rnf enaSrdUdpEnabled
+
+instance Data.ToQuery EnaSrdUdpSpecification where
+  toQuery EnaSrdUdpSpecification' {..} =
+    Prelude.mconcat
+      ["EnaSrdUdpEnabled" Data.=: enaSrdUdpEnabled]
diff --git a/gen/Amazonka/EC2/Types/EnaSupport.hs b/gen/Amazonka/EC2/Types/EnaSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnaSupport.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnaSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnaSupport
+  ( EnaSupport
+      ( ..,
+        EnaSupport_Required,
+        EnaSupport_Supported,
+        EnaSupport_Unsupported
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnaSupport = EnaSupport'
+  { fromEnaSupport ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EnaSupport_Required :: EnaSupport
+pattern EnaSupport_Required = EnaSupport' "required"
+
+pattern EnaSupport_Supported :: EnaSupport
+pattern EnaSupport_Supported = EnaSupport' "supported"
+
+pattern EnaSupport_Unsupported :: EnaSupport
+pattern EnaSupport_Unsupported = EnaSupport' "unsupported"
+
+{-# COMPLETE
+  EnaSupport_Required,
+  EnaSupport_Supported,
+  EnaSupport_Unsupported,
+  EnaSupport'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreErrorItem.hs b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreErrorItem.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnableFastSnapshotRestoreErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnableFastSnapshotRestoreErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreStateErrorItem
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about the errors that occurred when enabling fast
+-- snapshot restores.
+--
+-- /See:/ 'newEnableFastSnapshotRestoreErrorItem' smart constructor.
+data EnableFastSnapshotRestoreErrorItem = EnableFastSnapshotRestoreErrorItem'
+  { -- | The errors.
+    fastSnapshotRestoreStateErrors :: Prelude.Maybe [EnableFastSnapshotRestoreStateErrorItem],
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastSnapshotRestoreErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fastSnapshotRestoreStateErrors', 'enableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors' - The errors.
+--
+-- 'snapshotId', 'enableFastSnapshotRestoreErrorItem_snapshotId' - The ID of the snapshot.
+newEnableFastSnapshotRestoreErrorItem ::
+  EnableFastSnapshotRestoreErrorItem
+newEnableFastSnapshotRestoreErrorItem =
+  EnableFastSnapshotRestoreErrorItem'
+    { fastSnapshotRestoreStateErrors =
+        Prelude.Nothing,
+      snapshotId = Prelude.Nothing
+    }
+
+-- | The errors.
+enableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors :: Lens.Lens' EnableFastSnapshotRestoreErrorItem (Prelude.Maybe [EnableFastSnapshotRestoreStateErrorItem])
+enableFastSnapshotRestoreErrorItem_fastSnapshotRestoreStateErrors = Lens.lens (\EnableFastSnapshotRestoreErrorItem' {fastSnapshotRestoreStateErrors} -> fastSnapshotRestoreStateErrors) (\s@EnableFastSnapshotRestoreErrorItem' {} a -> s {fastSnapshotRestoreStateErrors = a} :: EnableFastSnapshotRestoreErrorItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the snapshot.
+enableFastSnapshotRestoreErrorItem_snapshotId :: Lens.Lens' EnableFastSnapshotRestoreErrorItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreErrorItem_snapshotId = Lens.lens (\EnableFastSnapshotRestoreErrorItem' {snapshotId} -> snapshotId) (\s@EnableFastSnapshotRestoreErrorItem' {} a -> s {snapshotId = a} :: EnableFastSnapshotRestoreErrorItem)
+
+instance
+  Data.FromXML
+    EnableFastSnapshotRestoreErrorItem
+  where
+  parseXML x =
+    EnableFastSnapshotRestoreErrorItem'
+      Prelude.<$> ( x
+                      Data..@? "fastSnapshotRestoreStateErrorSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "snapshotId")
+
+instance
+  Prelude.Hashable
+    EnableFastSnapshotRestoreErrorItem
+  where
+  hashWithSalt
+    _salt
+    EnableFastSnapshotRestoreErrorItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` fastSnapshotRestoreStateErrors
+        `Prelude.hashWithSalt` snapshotId
+
+instance
+  Prelude.NFData
+    EnableFastSnapshotRestoreErrorItem
+  where
+  rnf EnableFastSnapshotRestoreErrorItem' {..} =
+    Prelude.rnf fastSnapshotRestoreStateErrors
+      `Prelude.seq` Prelude.rnf snapshotId
diff --git a/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreStateError.hs b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreStateError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreStateError.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnableFastSnapshotRestoreStateError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnableFastSnapshotRestoreStateError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an error that occurred when enabling fast snapshot restores.
+--
+-- /See:/ 'newEnableFastSnapshotRestoreStateError' smart constructor.
+data EnableFastSnapshotRestoreStateError = EnableFastSnapshotRestoreStateError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastSnapshotRestoreStateError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'enableFastSnapshotRestoreStateError_code' - The error code.
+--
+-- 'message', 'enableFastSnapshotRestoreStateError_message' - The error message.
+newEnableFastSnapshotRestoreStateError ::
+  EnableFastSnapshotRestoreStateError
+newEnableFastSnapshotRestoreStateError =
+  EnableFastSnapshotRestoreStateError'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+enableFastSnapshotRestoreStateError_code :: Lens.Lens' EnableFastSnapshotRestoreStateError (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreStateError_code = Lens.lens (\EnableFastSnapshotRestoreStateError' {code} -> code) (\s@EnableFastSnapshotRestoreStateError' {} a -> s {code = a} :: EnableFastSnapshotRestoreStateError)
+
+-- | The error message.
+enableFastSnapshotRestoreStateError_message :: Lens.Lens' EnableFastSnapshotRestoreStateError (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreStateError_message = Lens.lens (\EnableFastSnapshotRestoreStateError' {message} -> message) (\s@EnableFastSnapshotRestoreStateError' {} a -> s {message = a} :: EnableFastSnapshotRestoreStateError)
+
+instance
+  Data.FromXML
+    EnableFastSnapshotRestoreStateError
+  where
+  parseXML x =
+    EnableFastSnapshotRestoreStateError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    EnableFastSnapshotRestoreStateError
+  where
+  hashWithSalt
+    _salt
+    EnableFastSnapshotRestoreStateError' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    EnableFastSnapshotRestoreStateError
+  where
+  rnf EnableFastSnapshotRestoreStateError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreStateErrorItem.hs b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreStateErrorItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreStateErrorItem.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnableFastSnapshotRestoreStateErrorItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnableFastSnapshotRestoreStateErrorItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EnableFastSnapshotRestoreStateError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains information about an error that occurred when enabling fast
+-- snapshot restores.
+--
+-- /See:/ 'newEnableFastSnapshotRestoreStateErrorItem' smart constructor.
+data EnableFastSnapshotRestoreStateErrorItem = EnableFastSnapshotRestoreStateErrorItem'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The error.
+    error :: Prelude.Maybe EnableFastSnapshotRestoreStateError
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastSnapshotRestoreStateErrorItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'enableFastSnapshotRestoreStateErrorItem_availabilityZone' - The Availability Zone.
+--
+-- 'error', 'enableFastSnapshotRestoreStateErrorItem_error' - The error.
+newEnableFastSnapshotRestoreStateErrorItem ::
+  EnableFastSnapshotRestoreStateErrorItem
+newEnableFastSnapshotRestoreStateErrorItem =
+  EnableFastSnapshotRestoreStateErrorItem'
+    { availabilityZone =
+        Prelude.Nothing,
+      error = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+enableFastSnapshotRestoreStateErrorItem_availabilityZone :: Lens.Lens' EnableFastSnapshotRestoreStateErrorItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreStateErrorItem_availabilityZone = Lens.lens (\EnableFastSnapshotRestoreStateErrorItem' {availabilityZone} -> availabilityZone) (\s@EnableFastSnapshotRestoreStateErrorItem' {} a -> s {availabilityZone = a} :: EnableFastSnapshotRestoreStateErrorItem)
+
+-- | The error.
+enableFastSnapshotRestoreStateErrorItem_error :: Lens.Lens' EnableFastSnapshotRestoreStateErrorItem (Prelude.Maybe EnableFastSnapshotRestoreStateError)
+enableFastSnapshotRestoreStateErrorItem_error = Lens.lens (\EnableFastSnapshotRestoreStateErrorItem' {error} -> error) (\s@EnableFastSnapshotRestoreStateErrorItem' {} a -> s {error = a} :: EnableFastSnapshotRestoreStateErrorItem)
+
+instance
+  Data.FromXML
+    EnableFastSnapshotRestoreStateErrorItem
+  where
+  parseXML x =
+    EnableFastSnapshotRestoreStateErrorItem'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "error")
+
+instance
+  Prelude.Hashable
+    EnableFastSnapshotRestoreStateErrorItem
+  where
+  hashWithSalt
+    _salt
+    EnableFastSnapshotRestoreStateErrorItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` error
+
+instance
+  Prelude.NFData
+    EnableFastSnapshotRestoreStateErrorItem
+  where
+  rnf EnableFastSnapshotRestoreStateErrorItem' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf error
diff --git a/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreSuccessItem.hs b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreSuccessItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnableFastSnapshotRestoreSuccessItem.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnableFastSnapshotRestoreSuccessItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnableFastSnapshotRestoreSuccessItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes fast snapshot restores that were successfully enabled.
+--
+-- /See:/ 'newEnableFastSnapshotRestoreSuccessItem' smart constructor.
+data EnableFastSnapshotRestoreSuccessItem = EnableFastSnapshotRestoreSuccessItem'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The time at which fast snapshot restores entered the @disabled@ state.
+    disabledTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @disabling@ state.
+    disablingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @enabled@ state.
+    enabledTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @enabling@ state.
+    enablingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The time at which fast snapshot restores entered the @optimizing@ state.
+    optimizingTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Web Services owner alias that enabled fast snapshot restores
+    -- on the snapshot. This is intended for future use.
+    ownerAlias :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that enabled fast snapshot
+    -- restores on the snapshot.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The state of fast snapshot restores.
+    state :: Prelude.Maybe FastSnapshotRestoreStateCode,
+    -- | The reason for the state transition. The possible values are as follows:
+    --
+    -- -   @Client.UserInitiated@ - The state successfully transitioned to
+    --     @enabling@ or @disabling@.
+    --
+    -- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+    --     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableFastSnapshotRestoreSuccessItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'enableFastSnapshotRestoreSuccessItem_availabilityZone' - The Availability Zone.
+--
+-- 'disabledTime', 'enableFastSnapshotRestoreSuccessItem_disabledTime' - The time at which fast snapshot restores entered the @disabled@ state.
+--
+-- 'disablingTime', 'enableFastSnapshotRestoreSuccessItem_disablingTime' - The time at which fast snapshot restores entered the @disabling@ state.
+--
+-- 'enabledTime', 'enableFastSnapshotRestoreSuccessItem_enabledTime' - The time at which fast snapshot restores entered the @enabled@ state.
+--
+-- 'enablingTime', 'enableFastSnapshotRestoreSuccessItem_enablingTime' - The time at which fast snapshot restores entered the @enabling@ state.
+--
+-- 'optimizingTime', 'enableFastSnapshotRestoreSuccessItem_optimizingTime' - The time at which fast snapshot restores entered the @optimizing@ state.
+--
+-- 'ownerAlias', 'enableFastSnapshotRestoreSuccessItem_ownerAlias' - The Amazon Web Services owner alias that enabled fast snapshot restores
+-- on the snapshot. This is intended for future use.
+--
+-- 'ownerId', 'enableFastSnapshotRestoreSuccessItem_ownerId' - The ID of the Amazon Web Services account that enabled fast snapshot
+-- restores on the snapshot.
+--
+-- 'snapshotId', 'enableFastSnapshotRestoreSuccessItem_snapshotId' - The ID of the snapshot.
+--
+-- 'state', 'enableFastSnapshotRestoreSuccessItem_state' - The state of fast snapshot restores.
+--
+-- 'stateTransitionReason', 'enableFastSnapshotRestoreSuccessItem_stateTransitionReason' - The reason for the state transition. The possible values are as follows:
+--
+-- -   @Client.UserInitiated@ - The state successfully transitioned to
+--     @enabling@ or @disabling@.
+--
+-- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+--     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+newEnableFastSnapshotRestoreSuccessItem ::
+  EnableFastSnapshotRestoreSuccessItem
+newEnableFastSnapshotRestoreSuccessItem =
+  EnableFastSnapshotRestoreSuccessItem'
+    { availabilityZone =
+        Prelude.Nothing,
+      disabledTime = Prelude.Nothing,
+      disablingTime = Prelude.Nothing,
+      enabledTime = Prelude.Nothing,
+      enablingTime = Prelude.Nothing,
+      optimizingTime = Prelude.Nothing,
+      ownerAlias = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateTransitionReason =
+        Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+enableFastSnapshotRestoreSuccessItem_availabilityZone :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreSuccessItem_availabilityZone = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {availabilityZone} -> availabilityZone) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {availabilityZone = a} :: EnableFastSnapshotRestoreSuccessItem)
+
+-- | The time at which fast snapshot restores entered the @disabled@ state.
+enableFastSnapshotRestoreSuccessItem_disabledTime :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+enableFastSnapshotRestoreSuccessItem_disabledTime = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {disabledTime} -> disabledTime) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {disabledTime = a} :: EnableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @disabling@ state.
+enableFastSnapshotRestoreSuccessItem_disablingTime :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+enableFastSnapshotRestoreSuccessItem_disablingTime = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {disablingTime} -> disablingTime) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {disablingTime = a} :: EnableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @enabled@ state.
+enableFastSnapshotRestoreSuccessItem_enabledTime :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+enableFastSnapshotRestoreSuccessItem_enabledTime = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {enabledTime} -> enabledTime) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {enabledTime = a} :: EnableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @enabling@ state.
+enableFastSnapshotRestoreSuccessItem_enablingTime :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+enableFastSnapshotRestoreSuccessItem_enablingTime = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {enablingTime} -> enablingTime) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {enablingTime = a} :: EnableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The time at which fast snapshot restores entered the @optimizing@ state.
+enableFastSnapshotRestoreSuccessItem_optimizingTime :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.UTCTime)
+enableFastSnapshotRestoreSuccessItem_optimizingTime = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {optimizingTime} -> optimizingTime) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {optimizingTime = a} :: EnableFastSnapshotRestoreSuccessItem) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Web Services owner alias that enabled fast snapshot restores
+-- on the snapshot. This is intended for future use.
+enableFastSnapshotRestoreSuccessItem_ownerAlias :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreSuccessItem_ownerAlias = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {ownerAlias} -> ownerAlias) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {ownerAlias = a} :: EnableFastSnapshotRestoreSuccessItem)
+
+-- | The ID of the Amazon Web Services account that enabled fast snapshot
+-- restores on the snapshot.
+enableFastSnapshotRestoreSuccessItem_ownerId :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreSuccessItem_ownerId = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {ownerId} -> ownerId) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {ownerId = a} :: EnableFastSnapshotRestoreSuccessItem)
+
+-- | The ID of the snapshot.
+enableFastSnapshotRestoreSuccessItem_snapshotId :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreSuccessItem_snapshotId = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {snapshotId} -> snapshotId) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {snapshotId = a} :: EnableFastSnapshotRestoreSuccessItem)
+
+-- | The state of fast snapshot restores.
+enableFastSnapshotRestoreSuccessItem_state :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe FastSnapshotRestoreStateCode)
+enableFastSnapshotRestoreSuccessItem_state = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {state} -> state) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {state = a} :: EnableFastSnapshotRestoreSuccessItem)
+
+-- | The reason for the state transition. The possible values are as follows:
+--
+-- -   @Client.UserInitiated@ - The state successfully transitioned to
+--     @enabling@ or @disabling@.
+--
+-- -   @Client.UserInitiated - Lifecycle state transition@ - The state
+--     successfully transitioned to @optimizing@, @enabled@, or @disabled@.
+enableFastSnapshotRestoreSuccessItem_stateTransitionReason :: Lens.Lens' EnableFastSnapshotRestoreSuccessItem (Prelude.Maybe Prelude.Text)
+enableFastSnapshotRestoreSuccessItem_stateTransitionReason = Lens.lens (\EnableFastSnapshotRestoreSuccessItem' {stateTransitionReason} -> stateTransitionReason) (\s@EnableFastSnapshotRestoreSuccessItem' {} a -> s {stateTransitionReason = a} :: EnableFastSnapshotRestoreSuccessItem)
+
+instance
+  Data.FromXML
+    EnableFastSnapshotRestoreSuccessItem
+  where
+  parseXML x =
+    EnableFastSnapshotRestoreSuccessItem'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "disabledTime")
+      Prelude.<*> (x Data..@? "disablingTime")
+      Prelude.<*> (x Data..@? "enabledTime")
+      Prelude.<*> (x Data..@? "enablingTime")
+      Prelude.<*> (x Data..@? "optimizingTime")
+      Prelude.<*> (x Data..@? "ownerAlias")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateTransitionReason")
+
+instance
+  Prelude.Hashable
+    EnableFastSnapshotRestoreSuccessItem
+  where
+  hashWithSalt
+    _salt
+    EnableFastSnapshotRestoreSuccessItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` disabledTime
+        `Prelude.hashWithSalt` disablingTime
+        `Prelude.hashWithSalt` enabledTime
+        `Prelude.hashWithSalt` enablingTime
+        `Prelude.hashWithSalt` optimizingTime
+        `Prelude.hashWithSalt` ownerAlias
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` snapshotId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` stateTransitionReason
+
+instance
+  Prelude.NFData
+    EnableFastSnapshotRestoreSuccessItem
+  where
+  rnf EnableFastSnapshotRestoreSuccessItem' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf disabledTime
+      `Prelude.seq` Prelude.rnf disablingTime
+      `Prelude.seq` Prelude.rnf enabledTime
+      `Prelude.seq` Prelude.rnf enablingTime
+      `Prelude.seq` Prelude.rnf optimizingTime
+      `Prelude.seq` Prelude.rnf ownerAlias
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateTransitionReason
diff --git a/gen/Amazonka/EC2/Types/EnclaveOptions.hs b/gen/Amazonka/EC2/Types/EnclaveOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnclaveOptions.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnclaveOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnclaveOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves.
+--
+-- /See:/ 'newEnclaveOptions' smart constructor.
+data EnclaveOptions = EnclaveOptions'
+  { -- | If this parameter is set to @true@, the instance is enabled for Amazon
+    -- Web Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web
+    -- Services Nitro Enclaves.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnclaveOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'enclaveOptions_enabled' - If this parameter is set to @true@, the instance is enabled for Amazon
+-- Web Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web
+-- Services Nitro Enclaves.
+newEnclaveOptions ::
+  EnclaveOptions
+newEnclaveOptions =
+  EnclaveOptions' {enabled = Prelude.Nothing}
+
+-- | If this parameter is set to @true@, the instance is enabled for Amazon
+-- Web Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web
+-- Services Nitro Enclaves.
+enclaveOptions_enabled :: Lens.Lens' EnclaveOptions (Prelude.Maybe Prelude.Bool)
+enclaveOptions_enabled = Lens.lens (\EnclaveOptions' {enabled} -> enabled) (\s@EnclaveOptions' {} a -> s {enabled = a} :: EnclaveOptions)
+
+instance Data.FromXML EnclaveOptions where
+  parseXML x =
+    EnclaveOptions' Prelude.<$> (x Data..@? "enabled")
+
+instance Prelude.Hashable EnclaveOptions where
+  hashWithSalt _salt EnclaveOptions' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData EnclaveOptions where
+  rnf EnclaveOptions' {..} = Prelude.rnf enabled
diff --git a/gen/Amazonka/EC2/Types/EnclaveOptionsRequest.hs b/gen/Amazonka/EC2/Types/EnclaveOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EnclaveOptionsRequest.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EnclaveOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EnclaveOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- /See:/ 'newEnclaveOptionsRequest' smart constructor.
+data EnclaveOptionsRequest = EnclaveOptionsRequest'
+  { -- | To enable the instance for Amazon Web Services Nitro Enclaves, set this
+    -- parameter to @true@.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnclaveOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'enclaveOptionsRequest_enabled' - To enable the instance for Amazon Web Services Nitro Enclaves, set this
+-- parameter to @true@.
+newEnclaveOptionsRequest ::
+  EnclaveOptionsRequest
+newEnclaveOptionsRequest =
+  EnclaveOptionsRequest' {enabled = Prelude.Nothing}
+
+-- | To enable the instance for Amazon Web Services Nitro Enclaves, set this
+-- parameter to @true@.
+enclaveOptionsRequest_enabled :: Lens.Lens' EnclaveOptionsRequest (Prelude.Maybe Prelude.Bool)
+enclaveOptionsRequest_enabled = Lens.lens (\EnclaveOptionsRequest' {enabled} -> enabled) (\s@EnclaveOptionsRequest' {} a -> s {enabled = a} :: EnclaveOptionsRequest)
+
+instance Prelude.Hashable EnclaveOptionsRequest where
+  hashWithSalt _salt EnclaveOptionsRequest' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData EnclaveOptionsRequest where
+  rnf EnclaveOptionsRequest' {..} = Prelude.rnf enabled
+
+instance Data.ToQuery EnclaveOptionsRequest where
+  toQuery EnclaveOptionsRequest' {..} =
+    Prelude.mconcat ["Enabled" Data.=: enabled]
diff --git a/gen/Amazonka/EC2/Types/EndDateType.hs b/gen/Amazonka/EC2/Types/EndDateType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EndDateType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EndDateType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EndDateType
+  ( EndDateType
+      ( ..,
+        EndDateType_Limited,
+        EndDateType_Unlimited
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EndDateType = EndDateType'
+  { fromEndDateType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EndDateType_Limited :: EndDateType
+pattern EndDateType_Limited = EndDateType' "limited"
+
+pattern EndDateType_Unlimited :: EndDateType
+pattern EndDateType_Unlimited = EndDateType' "unlimited"
+
+{-# COMPLETE
+  EndDateType_Limited,
+  EndDateType_Unlimited,
+  EndDateType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EphemeralNvmeSupport.hs b/gen/Amazonka/EC2/Types/EphemeralNvmeSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EphemeralNvmeSupport.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EphemeralNvmeSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EphemeralNvmeSupport
+  ( EphemeralNvmeSupport
+      ( ..,
+        EphemeralNvmeSupport_Required,
+        EphemeralNvmeSupport_Supported,
+        EphemeralNvmeSupport_Unsupported
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EphemeralNvmeSupport = EphemeralNvmeSupport'
+  { fromEphemeralNvmeSupport ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EphemeralNvmeSupport_Required :: EphemeralNvmeSupport
+pattern EphemeralNvmeSupport_Required = EphemeralNvmeSupport' "required"
+
+pattern EphemeralNvmeSupport_Supported :: EphemeralNvmeSupport
+pattern EphemeralNvmeSupport_Supported = EphemeralNvmeSupport' "supported"
+
+pattern EphemeralNvmeSupport_Unsupported :: EphemeralNvmeSupport
+pattern EphemeralNvmeSupport_Unsupported = EphemeralNvmeSupport' "unsupported"
+
+{-# COMPLETE
+  EphemeralNvmeSupport_Required,
+  EphemeralNvmeSupport_Supported,
+  EphemeralNvmeSupport_Unsupported,
+  EphemeralNvmeSupport'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EventCode.hs b/gen/Amazonka/EC2/Types/EventCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EventCode.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EventCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EventCode
+  ( EventCode
+      ( ..,
+        EventCode_Instance_reboot,
+        EventCode_Instance_retirement,
+        EventCode_Instance_stop,
+        EventCode_System_maintenance,
+        EventCode_System_reboot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventCode = EventCode'
+  { fromEventCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EventCode_Instance_reboot :: EventCode
+pattern EventCode_Instance_reboot = EventCode' "instance-reboot"
+
+pattern EventCode_Instance_retirement :: EventCode
+pattern EventCode_Instance_retirement = EventCode' "instance-retirement"
+
+pattern EventCode_Instance_stop :: EventCode
+pattern EventCode_Instance_stop = EventCode' "instance-stop"
+
+pattern EventCode_System_maintenance :: EventCode
+pattern EventCode_System_maintenance = EventCode' "system-maintenance"
+
+pattern EventCode_System_reboot :: EventCode
+pattern EventCode_System_reboot = EventCode' "system-reboot"
+
+{-# COMPLETE
+  EventCode_Instance_reboot,
+  EventCode_Instance_retirement,
+  EventCode_Instance_stop,
+  EventCode_System_maintenance,
+  EventCode_System_reboot,
+  EventCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/EventInformation.hs b/gen/Amazonka/EC2/Types/EventInformation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EventInformation.hs
@@ -0,0 +1,355 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EventInformation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EventInformation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EC2 Fleet or Spot Fleet event.
+--
+-- /See:/ 'newEventInformation' smart constructor.
+data EventInformation = EventInformation'
+  { -- | The description of the event.
+    eventDescription :: Prelude.Maybe Prelude.Text,
+    -- | The event.
+    --
+    -- @error@ events:
+    --
+    -- -   @iamFleetRoleInvalid@ - The EC2 Fleet or Spot Fleet does not have
+    --     the required permissions either to launch or terminate an instance.
+    --
+    -- -   @allLaunchSpecsTemporarilyBlacklisted@ - None of the configurations
+    --     are valid, and several attempts to launch instances have failed. For
+    --     more information, see the description of the event.
+    --
+    -- -   @spotInstanceCountLimitExceeded@ - You\'ve reached the limit on the
+    --     number of Spot Instances that you can launch.
+    --
+    -- -   @spotFleetRequestConfigurationInvalid@ - The configuration is not
+    --     valid. For more information, see the description of the event.
+    --
+    -- @fleetRequestChange@ events:
+    --
+    -- -   @active@ - The EC2 Fleet or Spot Fleet request has been validated
+    --     and Amazon EC2 is attempting to maintain the target number of
+    --     running instances.
+    --
+    -- -   @deleted@ (EC2 Fleet) \/ @cancelled@ (Spot Fleet) - The EC2 Fleet is
+    --     deleted or the Spot Fleet request is canceled and has no running
+    --     instances. The EC2 Fleet or Spot Fleet will be deleted two days
+    --     after its instances are terminated.
+    --
+    -- -   @deleted_running@ (EC2 Fleet) \/ @cancelled_running@ (Spot Fleet) -
+    --     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
+    --     does not launch additional instances. Its existing instances
+    --     continue to run until they are interrupted or terminated. The
+    --     request remains in this state until all instances are interrupted or
+    --     terminated.
+    --
+    -- -   @deleted_terminating@ (EC2 Fleet) \/ @cancelled_terminating@ (Spot
+    --     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
+    --     canceled and its instances are terminating. The request remains in
+    --     this state until all instances are terminated.
+    --
+    -- -   @expired@ - The EC2 Fleet or Spot Fleet request has expired. If the
+    --     request was created with @TerminateInstancesWithExpiration@ set, a
+    --     subsequent @terminated@ event indicates that the instances are
+    --     terminated.
+    --
+    -- -   @modify_in_progress@ - The EC2 Fleet or Spot Fleet request is being
+    --     modified. The request remains in this state until the modification
+    --     is fully processed.
+    --
+    -- -   @modify_succeeded@ - The EC2 Fleet or Spot Fleet request was
+    --     modified.
+    --
+    -- -   @submitted@ - The EC2 Fleet or Spot Fleet request is being evaluated
+    --     and Amazon EC2 is preparing to launch the target number of
+    --     instances.
+    --
+    -- -   @progress@ - The EC2 Fleet or Spot Fleet request is in the process
+    --     of being fulfilled.
+    --
+    -- @instanceChange@ events:
+    --
+    -- -   @launched@ - A new instance was launched.
+    --
+    -- -   @terminated@ - An instance was terminated by the user.
+    --
+    -- -   @termination_notified@ - An instance termination notification was
+    --     sent when a Spot Instance was terminated by Amazon EC2 during
+    --     scale-down, when the target capacity of the fleet was modified down,
+    --     for example, from a target capacity of 4 to a target capacity of 3.
+    --
+    -- @Information@ events:
+    --
+    -- -   @fleetProgressHalted@ - The price in every launch specification is
+    --     not valid because it is below the Spot price (all the launch
+    --     specifications have produced @launchSpecUnusable@ events). A launch
+    --     specification might become valid if the Spot price changes.
+    --
+    -- -   @launchSpecTemporarilyBlacklisted@ - The configuration is not valid
+    --     and several attempts to launch instances have failed. For more
+    --     information, see the description of the event.
+    --
+    -- -   @launchSpecUnusable@ - The price in a launch specification is not
+    --     valid because it is below the Spot price.
+    --
+    -- -   @registerWithLoadBalancersFailed@ - An attempt to register instances
+    --     with load balancers failed. For more information, see the
+    --     description of the event.
+    eventSubType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance. This information is available only for
+    -- @instanceChange@ events.
+    instanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventInformation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventDescription', 'eventInformation_eventDescription' - The description of the event.
+--
+-- 'eventSubType', 'eventInformation_eventSubType' - The event.
+--
+-- @error@ events:
+--
+-- -   @iamFleetRoleInvalid@ - The EC2 Fleet or Spot Fleet does not have
+--     the required permissions either to launch or terminate an instance.
+--
+-- -   @allLaunchSpecsTemporarilyBlacklisted@ - None of the configurations
+--     are valid, and several attempts to launch instances have failed. For
+--     more information, see the description of the event.
+--
+-- -   @spotInstanceCountLimitExceeded@ - You\'ve reached the limit on the
+--     number of Spot Instances that you can launch.
+--
+-- -   @spotFleetRequestConfigurationInvalid@ - The configuration is not
+--     valid. For more information, see the description of the event.
+--
+-- @fleetRequestChange@ events:
+--
+-- -   @active@ - The EC2 Fleet or Spot Fleet request has been validated
+--     and Amazon EC2 is attempting to maintain the target number of
+--     running instances.
+--
+-- -   @deleted@ (EC2 Fleet) \/ @cancelled@ (Spot Fleet) - The EC2 Fleet is
+--     deleted or the Spot Fleet request is canceled and has no running
+--     instances. The EC2 Fleet or Spot Fleet will be deleted two days
+--     after its instances are terminated.
+--
+-- -   @deleted_running@ (EC2 Fleet) \/ @cancelled_running@ (Spot Fleet) -
+--     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
+--     does not launch additional instances. Its existing instances
+--     continue to run until they are interrupted or terminated. The
+--     request remains in this state until all instances are interrupted or
+--     terminated.
+--
+-- -   @deleted_terminating@ (EC2 Fleet) \/ @cancelled_terminating@ (Spot
+--     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
+--     canceled and its instances are terminating. The request remains in
+--     this state until all instances are terminated.
+--
+-- -   @expired@ - The EC2 Fleet or Spot Fleet request has expired. If the
+--     request was created with @TerminateInstancesWithExpiration@ set, a
+--     subsequent @terminated@ event indicates that the instances are
+--     terminated.
+--
+-- -   @modify_in_progress@ - The EC2 Fleet or Spot Fleet request is being
+--     modified. The request remains in this state until the modification
+--     is fully processed.
+--
+-- -   @modify_succeeded@ - The EC2 Fleet or Spot Fleet request was
+--     modified.
+--
+-- -   @submitted@ - The EC2 Fleet or Spot Fleet request is being evaluated
+--     and Amazon EC2 is preparing to launch the target number of
+--     instances.
+--
+-- -   @progress@ - The EC2 Fleet or Spot Fleet request is in the process
+--     of being fulfilled.
+--
+-- @instanceChange@ events:
+--
+-- -   @launched@ - A new instance was launched.
+--
+-- -   @terminated@ - An instance was terminated by the user.
+--
+-- -   @termination_notified@ - An instance termination notification was
+--     sent when a Spot Instance was terminated by Amazon EC2 during
+--     scale-down, when the target capacity of the fleet was modified down,
+--     for example, from a target capacity of 4 to a target capacity of 3.
+--
+-- @Information@ events:
+--
+-- -   @fleetProgressHalted@ - The price in every launch specification is
+--     not valid because it is below the Spot price (all the launch
+--     specifications have produced @launchSpecUnusable@ events). A launch
+--     specification might become valid if the Spot price changes.
+--
+-- -   @launchSpecTemporarilyBlacklisted@ - The configuration is not valid
+--     and several attempts to launch instances have failed. For more
+--     information, see the description of the event.
+--
+-- -   @launchSpecUnusable@ - The price in a launch specification is not
+--     valid because it is below the Spot price.
+--
+-- -   @registerWithLoadBalancersFailed@ - An attempt to register instances
+--     with load balancers failed. For more information, see the
+--     description of the event.
+--
+-- 'instanceId', 'eventInformation_instanceId' - The ID of the instance. This information is available only for
+-- @instanceChange@ events.
+newEventInformation ::
+  EventInformation
+newEventInformation =
+  EventInformation'
+    { eventDescription =
+        Prelude.Nothing,
+      eventSubType = Prelude.Nothing,
+      instanceId = Prelude.Nothing
+    }
+
+-- | The description of the event.
+eventInformation_eventDescription :: Lens.Lens' EventInformation (Prelude.Maybe Prelude.Text)
+eventInformation_eventDescription = Lens.lens (\EventInformation' {eventDescription} -> eventDescription) (\s@EventInformation' {} a -> s {eventDescription = a} :: EventInformation)
+
+-- | The event.
+--
+-- @error@ events:
+--
+-- -   @iamFleetRoleInvalid@ - The EC2 Fleet or Spot Fleet does not have
+--     the required permissions either to launch or terminate an instance.
+--
+-- -   @allLaunchSpecsTemporarilyBlacklisted@ - None of the configurations
+--     are valid, and several attempts to launch instances have failed. For
+--     more information, see the description of the event.
+--
+-- -   @spotInstanceCountLimitExceeded@ - You\'ve reached the limit on the
+--     number of Spot Instances that you can launch.
+--
+-- -   @spotFleetRequestConfigurationInvalid@ - The configuration is not
+--     valid. For more information, see the description of the event.
+--
+-- @fleetRequestChange@ events:
+--
+-- -   @active@ - The EC2 Fleet or Spot Fleet request has been validated
+--     and Amazon EC2 is attempting to maintain the target number of
+--     running instances.
+--
+-- -   @deleted@ (EC2 Fleet) \/ @cancelled@ (Spot Fleet) - The EC2 Fleet is
+--     deleted or the Spot Fleet request is canceled and has no running
+--     instances. The EC2 Fleet or Spot Fleet will be deleted two days
+--     after its instances are terminated.
+--
+-- -   @deleted_running@ (EC2 Fleet) \/ @cancelled_running@ (Spot Fleet) -
+--     The EC2 Fleet is deleted or the Spot Fleet request is canceled and
+--     does not launch additional instances. Its existing instances
+--     continue to run until they are interrupted or terminated. The
+--     request remains in this state until all instances are interrupted or
+--     terminated.
+--
+-- -   @deleted_terminating@ (EC2 Fleet) \/ @cancelled_terminating@ (Spot
+--     Fleet) - The EC2 Fleet is deleted or the Spot Fleet request is
+--     canceled and its instances are terminating. The request remains in
+--     this state until all instances are terminated.
+--
+-- -   @expired@ - The EC2 Fleet or Spot Fleet request has expired. If the
+--     request was created with @TerminateInstancesWithExpiration@ set, a
+--     subsequent @terminated@ event indicates that the instances are
+--     terminated.
+--
+-- -   @modify_in_progress@ - The EC2 Fleet or Spot Fleet request is being
+--     modified. The request remains in this state until the modification
+--     is fully processed.
+--
+-- -   @modify_succeeded@ - The EC2 Fleet or Spot Fleet request was
+--     modified.
+--
+-- -   @submitted@ - The EC2 Fleet or Spot Fleet request is being evaluated
+--     and Amazon EC2 is preparing to launch the target number of
+--     instances.
+--
+-- -   @progress@ - The EC2 Fleet or Spot Fleet request is in the process
+--     of being fulfilled.
+--
+-- @instanceChange@ events:
+--
+-- -   @launched@ - A new instance was launched.
+--
+-- -   @terminated@ - An instance was terminated by the user.
+--
+-- -   @termination_notified@ - An instance termination notification was
+--     sent when a Spot Instance was terminated by Amazon EC2 during
+--     scale-down, when the target capacity of the fleet was modified down,
+--     for example, from a target capacity of 4 to a target capacity of 3.
+--
+-- @Information@ events:
+--
+-- -   @fleetProgressHalted@ - The price in every launch specification is
+--     not valid because it is below the Spot price (all the launch
+--     specifications have produced @launchSpecUnusable@ events). A launch
+--     specification might become valid if the Spot price changes.
+--
+-- -   @launchSpecTemporarilyBlacklisted@ - The configuration is not valid
+--     and several attempts to launch instances have failed. For more
+--     information, see the description of the event.
+--
+-- -   @launchSpecUnusable@ - The price in a launch specification is not
+--     valid because it is below the Spot price.
+--
+-- -   @registerWithLoadBalancersFailed@ - An attempt to register instances
+--     with load balancers failed. For more information, see the
+--     description of the event.
+eventInformation_eventSubType :: Lens.Lens' EventInformation (Prelude.Maybe Prelude.Text)
+eventInformation_eventSubType = Lens.lens (\EventInformation' {eventSubType} -> eventSubType) (\s@EventInformation' {} a -> s {eventSubType = a} :: EventInformation)
+
+-- | The ID of the instance. This information is available only for
+-- @instanceChange@ events.
+eventInformation_instanceId :: Lens.Lens' EventInformation (Prelude.Maybe Prelude.Text)
+eventInformation_instanceId = Lens.lens (\EventInformation' {instanceId} -> instanceId) (\s@EventInformation' {} a -> s {instanceId = a} :: EventInformation)
+
+instance Data.FromXML EventInformation where
+  parseXML x =
+    EventInformation'
+      Prelude.<$> (x Data..@? "eventDescription")
+      Prelude.<*> (x Data..@? "eventSubType")
+      Prelude.<*> (x Data..@? "instanceId")
+
+instance Prelude.Hashable EventInformation where
+  hashWithSalt _salt EventInformation' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventDescription
+      `Prelude.hashWithSalt` eventSubType
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData EventInformation where
+  rnf EventInformation' {..} =
+    Prelude.rnf eventDescription
+      `Prelude.seq` Prelude.rnf eventSubType
+      `Prelude.seq` Prelude.rnf instanceId
diff --git a/gen/Amazonka/EC2/Types/EventType.hs b/gen/Amazonka/EC2/Types/EventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/EventType.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.EventType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.EventType
+  ( EventType
+      ( ..,
+        EventType_Error,
+        EventType_FleetRequestChange,
+        EventType_Information,
+        EventType_InstanceChange
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype EventType = EventType'
+  { fromEventType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern EventType_Error :: EventType
+pattern EventType_Error = EventType' "error"
+
+pattern EventType_FleetRequestChange :: EventType
+pattern EventType_FleetRequestChange = EventType' "fleetRequestChange"
+
+pattern EventType_Information :: EventType
+pattern EventType_Information = EventType' "information"
+
+pattern EventType_InstanceChange :: EventType
+pattern EventType_InstanceChange = EventType' "instanceChange"
+
+{-# COMPLETE
+  EventType_Error,
+  EventType_FleetRequestChange,
+  EventType_Information,
+  EventType_InstanceChange,
+  EventType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ExcessCapacityTerminationPolicy.hs b/gen/Amazonka/EC2/Types/ExcessCapacityTerminationPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExcessCapacityTerminationPolicy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExcessCapacityTerminationPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExcessCapacityTerminationPolicy
+  ( ExcessCapacityTerminationPolicy
+      ( ..,
+        ExcessCapacityTerminationPolicy_Default,
+        ExcessCapacityTerminationPolicy_NoTermination
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExcessCapacityTerminationPolicy = ExcessCapacityTerminationPolicy'
+  { fromExcessCapacityTerminationPolicy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ExcessCapacityTerminationPolicy_Default :: ExcessCapacityTerminationPolicy
+pattern ExcessCapacityTerminationPolicy_Default = ExcessCapacityTerminationPolicy' "default"
+
+pattern ExcessCapacityTerminationPolicy_NoTermination :: ExcessCapacityTerminationPolicy
+pattern ExcessCapacityTerminationPolicy_NoTermination = ExcessCapacityTerminationPolicy' "noTermination"
+
+{-# COMPLETE
+  ExcessCapacityTerminationPolicy_Default,
+  ExcessCapacityTerminationPolicy_NoTermination,
+  ExcessCapacityTerminationPolicy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Explanation.hs b/gen/Amazonka/EC2/Types/Explanation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Explanation.hs
@@ -0,0 +1,751 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Explanation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Explanation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AnalysisAclRule
+import Amazonka.EC2.Types.AnalysisComponent
+import Amazonka.EC2.Types.AnalysisLoadBalancerListener
+import Amazonka.EC2.Types.AnalysisLoadBalancerTarget
+import Amazonka.EC2.Types.AnalysisRouteTableRoute
+import Amazonka.EC2.Types.AnalysisSecurityGroupRule
+import Amazonka.EC2.Types.PortRange
+import Amazonka.EC2.Types.TransitGatewayRouteTableRoute
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an explanation code for an unreachable path. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html Reachability Analyzer explanation codes>.
+--
+-- /See:/ 'newExplanation' smart constructor.
+data Explanation = Explanation'
+  { -- | The network ACL.
+    acl :: Prelude.Maybe AnalysisComponent,
+    -- | The network ACL rule.
+    aclRule :: Prelude.Maybe AnalysisAclRule,
+    -- | The IPv4 address, in CIDR notation.
+    address :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 addresses, in CIDR notation.
+    addresses :: Prelude.Maybe [Prelude.Text],
+    -- | The resource to which the component is attached.
+    attachedTo :: Prelude.Maybe AnalysisComponent,
+    -- | The Availability Zones.
+    availabilityZones :: Prelude.Maybe [Prelude.Text],
+    -- | The CIDR ranges.
+    cidrs :: Prelude.Maybe [Prelude.Text],
+    -- | The listener for a Classic Load Balancer.
+    classicLoadBalancerListener :: Prelude.Maybe AnalysisLoadBalancerListener,
+    -- | The component.
+    component :: Prelude.Maybe AnalysisComponent,
+    -- | The Amazon Web Services account for the component.
+    componentAccount :: Prelude.Maybe Prelude.Text,
+    -- | The Region for the component.
+    componentRegion :: Prelude.Maybe Prelude.Text,
+    -- | The customer gateway.
+    customerGateway :: Prelude.Maybe AnalysisComponent,
+    -- | The destination.
+    destination :: Prelude.Maybe AnalysisComponent,
+    -- | The destination VPC.
+    destinationVpc :: Prelude.Maybe AnalysisComponent,
+    -- | The direction. The following are the possible values:
+    --
+    -- -   egress
+    --
+    -- -   ingress
+    direction :: Prelude.Maybe Prelude.Text,
+    -- | The load balancer listener.
+    elasticLoadBalancerListener :: Prelude.Maybe AnalysisComponent,
+    -- | The explanation code.
+    explanationCode :: Prelude.Maybe Prelude.Text,
+    -- | The route table.
+    ingressRouteTable :: Prelude.Maybe AnalysisComponent,
+    -- | The internet gateway.
+    internetGateway :: Prelude.Maybe AnalysisComponent,
+    -- | The Amazon Resource Name (ARN) of the load balancer.
+    loadBalancerArn :: Prelude.Maybe Prelude.Text,
+    -- | The listener port of the load balancer.
+    loadBalancerListenerPort :: Prelude.Maybe Prelude.Natural,
+    -- | The target.
+    loadBalancerTarget :: Prelude.Maybe AnalysisLoadBalancerTarget,
+    -- | The target group.
+    loadBalancerTargetGroup :: Prelude.Maybe AnalysisComponent,
+    -- | The target groups.
+    loadBalancerTargetGroups :: Prelude.Maybe [AnalysisComponent],
+    -- | The target port.
+    loadBalancerTargetPort :: Prelude.Maybe Prelude.Natural,
+    -- | The missing component.
+    missingComponent :: Prelude.Maybe Prelude.Text,
+    -- | The NAT gateway.
+    natGateway :: Prelude.Maybe AnalysisComponent,
+    -- | The network interface.
+    networkInterface :: Prelude.Maybe AnalysisComponent,
+    -- | The packet field.
+    packetField :: Prelude.Maybe Prelude.Text,
+    -- | The port.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The port ranges.
+    portRanges :: Prelude.Maybe [PortRange],
+    -- | The prefix list.
+    prefixList :: Prelude.Maybe AnalysisComponent,
+    -- | The protocols.
+    protocols :: Prelude.Maybe [Prelude.Text],
+    -- | The route table.
+    routeTable :: Prelude.Maybe AnalysisComponent,
+    -- | The route table route.
+    routeTableRoute :: Prelude.Maybe AnalysisRouteTableRoute,
+    -- | The security group.
+    securityGroup :: Prelude.Maybe AnalysisComponent,
+    -- | The security group rule.
+    securityGroupRule :: Prelude.Maybe AnalysisSecurityGroupRule,
+    -- | The security groups.
+    securityGroups :: Prelude.Maybe [AnalysisComponent],
+    -- | The source VPC.
+    sourceVpc :: Prelude.Maybe AnalysisComponent,
+    -- | The state.
+    state :: Prelude.Maybe Prelude.Text,
+    -- | The subnet.
+    subnet :: Prelude.Maybe AnalysisComponent,
+    -- | The route table for the subnet.
+    subnetRouteTable :: Prelude.Maybe AnalysisComponent,
+    -- | The transit gateway.
+    transitGateway :: Prelude.Maybe AnalysisComponent,
+    -- | The transit gateway attachment.
+    transitGatewayAttachment :: Prelude.Maybe AnalysisComponent,
+    -- | The transit gateway route table.
+    transitGatewayRouteTable :: Prelude.Maybe AnalysisComponent,
+    -- | The transit gateway route table route.
+    transitGatewayRouteTableRoute :: Prelude.Maybe TransitGatewayRouteTableRoute,
+    -- | The component VPC.
+    vpc :: Prelude.Maybe AnalysisComponent,
+    -- | The VPC endpoint.
+    vpcEndpoint :: Prelude.Maybe AnalysisComponent,
+    -- | The VPC peering connection.
+    vpcPeeringConnection :: Prelude.Maybe AnalysisComponent,
+    -- | The VPN connection.
+    vpnConnection :: Prelude.Maybe AnalysisComponent,
+    -- | The VPN gateway.
+    vpnGateway :: Prelude.Maybe AnalysisComponent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Explanation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acl', 'explanation_acl' - The network ACL.
+--
+-- 'aclRule', 'explanation_aclRule' - The network ACL rule.
+--
+-- 'address', 'explanation_address' - The IPv4 address, in CIDR notation.
+--
+-- 'addresses', 'explanation_addresses' - The IPv4 addresses, in CIDR notation.
+--
+-- 'attachedTo', 'explanation_attachedTo' - The resource to which the component is attached.
+--
+-- 'availabilityZones', 'explanation_availabilityZones' - The Availability Zones.
+--
+-- 'cidrs', 'explanation_cidrs' - The CIDR ranges.
+--
+-- 'classicLoadBalancerListener', 'explanation_classicLoadBalancerListener' - The listener for a Classic Load Balancer.
+--
+-- 'component', 'explanation_component' - The component.
+--
+-- 'componentAccount', 'explanation_componentAccount' - The Amazon Web Services account for the component.
+--
+-- 'componentRegion', 'explanation_componentRegion' - The Region for the component.
+--
+-- 'customerGateway', 'explanation_customerGateway' - The customer gateway.
+--
+-- 'destination', 'explanation_destination' - The destination.
+--
+-- 'destinationVpc', 'explanation_destinationVpc' - The destination VPC.
+--
+-- 'direction', 'explanation_direction' - The direction. The following are the possible values:
+--
+-- -   egress
+--
+-- -   ingress
+--
+-- 'elasticLoadBalancerListener', 'explanation_elasticLoadBalancerListener' - The load balancer listener.
+--
+-- 'explanationCode', 'explanation_explanationCode' - The explanation code.
+--
+-- 'ingressRouteTable', 'explanation_ingressRouteTable' - The route table.
+--
+-- 'internetGateway', 'explanation_internetGateway' - The internet gateway.
+--
+-- 'loadBalancerArn', 'explanation_loadBalancerArn' - The Amazon Resource Name (ARN) of the load balancer.
+--
+-- 'loadBalancerListenerPort', 'explanation_loadBalancerListenerPort' - The listener port of the load balancer.
+--
+-- 'loadBalancerTarget', 'explanation_loadBalancerTarget' - The target.
+--
+-- 'loadBalancerTargetGroup', 'explanation_loadBalancerTargetGroup' - The target group.
+--
+-- 'loadBalancerTargetGroups', 'explanation_loadBalancerTargetGroups' - The target groups.
+--
+-- 'loadBalancerTargetPort', 'explanation_loadBalancerTargetPort' - The target port.
+--
+-- 'missingComponent', 'explanation_missingComponent' - The missing component.
+--
+-- 'natGateway', 'explanation_natGateway' - The NAT gateway.
+--
+-- 'networkInterface', 'explanation_networkInterface' - The network interface.
+--
+-- 'packetField', 'explanation_packetField' - The packet field.
+--
+-- 'port', 'explanation_port' - The port.
+--
+-- 'portRanges', 'explanation_portRanges' - The port ranges.
+--
+-- 'prefixList', 'explanation_prefixList' - The prefix list.
+--
+-- 'protocols', 'explanation_protocols' - The protocols.
+--
+-- 'routeTable', 'explanation_routeTable' - The route table.
+--
+-- 'routeTableRoute', 'explanation_routeTableRoute' - The route table route.
+--
+-- 'securityGroup', 'explanation_securityGroup' - The security group.
+--
+-- 'securityGroupRule', 'explanation_securityGroupRule' - The security group rule.
+--
+-- 'securityGroups', 'explanation_securityGroups' - The security groups.
+--
+-- 'sourceVpc', 'explanation_sourceVpc' - The source VPC.
+--
+-- 'state', 'explanation_state' - The state.
+--
+-- 'subnet', 'explanation_subnet' - The subnet.
+--
+-- 'subnetRouteTable', 'explanation_subnetRouteTable' - The route table for the subnet.
+--
+-- 'transitGateway', 'explanation_transitGateway' - The transit gateway.
+--
+-- 'transitGatewayAttachment', 'explanation_transitGatewayAttachment' - The transit gateway attachment.
+--
+-- 'transitGatewayRouteTable', 'explanation_transitGatewayRouteTable' - The transit gateway route table.
+--
+-- 'transitGatewayRouteTableRoute', 'explanation_transitGatewayRouteTableRoute' - The transit gateway route table route.
+--
+-- 'vpc', 'explanation_vpc' - The component VPC.
+--
+-- 'vpcEndpoint', 'explanation_vpcEndpoint' - The VPC endpoint.
+--
+-- 'vpcPeeringConnection', 'explanation_vpcPeeringConnection' - The VPC peering connection.
+--
+-- 'vpnConnection', 'explanation_vpnConnection' - The VPN connection.
+--
+-- 'vpnGateway', 'explanation_vpnGateway' - The VPN gateway.
+newExplanation ::
+  Explanation
+newExplanation =
+  Explanation'
+    { acl = Prelude.Nothing,
+      aclRule = Prelude.Nothing,
+      address = Prelude.Nothing,
+      addresses = Prelude.Nothing,
+      attachedTo = Prelude.Nothing,
+      availabilityZones = Prelude.Nothing,
+      cidrs = Prelude.Nothing,
+      classicLoadBalancerListener = Prelude.Nothing,
+      component = Prelude.Nothing,
+      componentAccount = Prelude.Nothing,
+      componentRegion = Prelude.Nothing,
+      customerGateway = Prelude.Nothing,
+      destination = Prelude.Nothing,
+      destinationVpc = Prelude.Nothing,
+      direction = Prelude.Nothing,
+      elasticLoadBalancerListener = Prelude.Nothing,
+      explanationCode = Prelude.Nothing,
+      ingressRouteTable = Prelude.Nothing,
+      internetGateway = Prelude.Nothing,
+      loadBalancerArn = Prelude.Nothing,
+      loadBalancerListenerPort = Prelude.Nothing,
+      loadBalancerTarget = Prelude.Nothing,
+      loadBalancerTargetGroup = Prelude.Nothing,
+      loadBalancerTargetGroups = Prelude.Nothing,
+      loadBalancerTargetPort = Prelude.Nothing,
+      missingComponent = Prelude.Nothing,
+      natGateway = Prelude.Nothing,
+      networkInterface = Prelude.Nothing,
+      packetField = Prelude.Nothing,
+      port = Prelude.Nothing,
+      portRanges = Prelude.Nothing,
+      prefixList = Prelude.Nothing,
+      protocols = Prelude.Nothing,
+      routeTable = Prelude.Nothing,
+      routeTableRoute = Prelude.Nothing,
+      securityGroup = Prelude.Nothing,
+      securityGroupRule = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      sourceVpc = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnet = Prelude.Nothing,
+      subnetRouteTable = Prelude.Nothing,
+      transitGateway = Prelude.Nothing,
+      transitGatewayAttachment = Prelude.Nothing,
+      transitGatewayRouteTable = Prelude.Nothing,
+      transitGatewayRouteTableRoute = Prelude.Nothing,
+      vpc = Prelude.Nothing,
+      vpcEndpoint = Prelude.Nothing,
+      vpcPeeringConnection = Prelude.Nothing,
+      vpnConnection = Prelude.Nothing,
+      vpnGateway = Prelude.Nothing
+    }
+
+-- | The network ACL.
+explanation_acl :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_acl = Lens.lens (\Explanation' {acl} -> acl) (\s@Explanation' {} a -> s {acl = a} :: Explanation)
+
+-- | The network ACL rule.
+explanation_aclRule :: Lens.Lens' Explanation (Prelude.Maybe AnalysisAclRule)
+explanation_aclRule = Lens.lens (\Explanation' {aclRule} -> aclRule) (\s@Explanation' {} a -> s {aclRule = a} :: Explanation)
+
+-- | The IPv4 address, in CIDR notation.
+explanation_address :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_address = Lens.lens (\Explanation' {address} -> address) (\s@Explanation' {} a -> s {address = a} :: Explanation)
+
+-- | The IPv4 addresses, in CIDR notation.
+explanation_addresses :: Lens.Lens' Explanation (Prelude.Maybe [Prelude.Text])
+explanation_addresses = Lens.lens (\Explanation' {addresses} -> addresses) (\s@Explanation' {} a -> s {addresses = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resource to which the component is attached.
+explanation_attachedTo :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_attachedTo = Lens.lens (\Explanation' {attachedTo} -> attachedTo) (\s@Explanation' {} a -> s {attachedTo = a} :: Explanation)
+
+-- | The Availability Zones.
+explanation_availabilityZones :: Lens.Lens' Explanation (Prelude.Maybe [Prelude.Text])
+explanation_availabilityZones = Lens.lens (\Explanation' {availabilityZones} -> availabilityZones) (\s@Explanation' {} a -> s {availabilityZones = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The CIDR ranges.
+explanation_cidrs :: Lens.Lens' Explanation (Prelude.Maybe [Prelude.Text])
+explanation_cidrs = Lens.lens (\Explanation' {cidrs} -> cidrs) (\s@Explanation' {} a -> s {cidrs = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The listener for a Classic Load Balancer.
+explanation_classicLoadBalancerListener :: Lens.Lens' Explanation (Prelude.Maybe AnalysisLoadBalancerListener)
+explanation_classicLoadBalancerListener = Lens.lens (\Explanation' {classicLoadBalancerListener} -> classicLoadBalancerListener) (\s@Explanation' {} a -> s {classicLoadBalancerListener = a} :: Explanation)
+
+-- | The component.
+explanation_component :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_component = Lens.lens (\Explanation' {component} -> component) (\s@Explanation' {} a -> s {component = a} :: Explanation)
+
+-- | The Amazon Web Services account for the component.
+explanation_componentAccount :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_componentAccount = Lens.lens (\Explanation' {componentAccount} -> componentAccount) (\s@Explanation' {} a -> s {componentAccount = a} :: Explanation)
+
+-- | The Region for the component.
+explanation_componentRegion :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_componentRegion = Lens.lens (\Explanation' {componentRegion} -> componentRegion) (\s@Explanation' {} a -> s {componentRegion = a} :: Explanation)
+
+-- | The customer gateway.
+explanation_customerGateway :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_customerGateway = Lens.lens (\Explanation' {customerGateway} -> customerGateway) (\s@Explanation' {} a -> s {customerGateway = a} :: Explanation)
+
+-- | The destination.
+explanation_destination :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_destination = Lens.lens (\Explanation' {destination} -> destination) (\s@Explanation' {} a -> s {destination = a} :: Explanation)
+
+-- | The destination VPC.
+explanation_destinationVpc :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_destinationVpc = Lens.lens (\Explanation' {destinationVpc} -> destinationVpc) (\s@Explanation' {} a -> s {destinationVpc = a} :: Explanation)
+
+-- | The direction. The following are the possible values:
+--
+-- -   egress
+--
+-- -   ingress
+explanation_direction :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_direction = Lens.lens (\Explanation' {direction} -> direction) (\s@Explanation' {} a -> s {direction = a} :: Explanation)
+
+-- | The load balancer listener.
+explanation_elasticLoadBalancerListener :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_elasticLoadBalancerListener = Lens.lens (\Explanation' {elasticLoadBalancerListener} -> elasticLoadBalancerListener) (\s@Explanation' {} a -> s {elasticLoadBalancerListener = a} :: Explanation)
+
+-- | The explanation code.
+explanation_explanationCode :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_explanationCode = Lens.lens (\Explanation' {explanationCode} -> explanationCode) (\s@Explanation' {} a -> s {explanationCode = a} :: Explanation)
+
+-- | The route table.
+explanation_ingressRouteTable :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_ingressRouteTable = Lens.lens (\Explanation' {ingressRouteTable} -> ingressRouteTable) (\s@Explanation' {} a -> s {ingressRouteTable = a} :: Explanation)
+
+-- | The internet gateway.
+explanation_internetGateway :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_internetGateway = Lens.lens (\Explanation' {internetGateway} -> internetGateway) (\s@Explanation' {} a -> s {internetGateway = a} :: Explanation)
+
+-- | The Amazon Resource Name (ARN) of the load balancer.
+explanation_loadBalancerArn :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_loadBalancerArn = Lens.lens (\Explanation' {loadBalancerArn} -> loadBalancerArn) (\s@Explanation' {} a -> s {loadBalancerArn = a} :: Explanation)
+
+-- | The listener port of the load balancer.
+explanation_loadBalancerListenerPort :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Natural)
+explanation_loadBalancerListenerPort = Lens.lens (\Explanation' {loadBalancerListenerPort} -> loadBalancerListenerPort) (\s@Explanation' {} a -> s {loadBalancerListenerPort = a} :: Explanation)
+
+-- | The target.
+explanation_loadBalancerTarget :: Lens.Lens' Explanation (Prelude.Maybe AnalysisLoadBalancerTarget)
+explanation_loadBalancerTarget = Lens.lens (\Explanation' {loadBalancerTarget} -> loadBalancerTarget) (\s@Explanation' {} a -> s {loadBalancerTarget = a} :: Explanation)
+
+-- | The target group.
+explanation_loadBalancerTargetGroup :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_loadBalancerTargetGroup = Lens.lens (\Explanation' {loadBalancerTargetGroup} -> loadBalancerTargetGroup) (\s@Explanation' {} a -> s {loadBalancerTargetGroup = a} :: Explanation)
+
+-- | The target groups.
+explanation_loadBalancerTargetGroups :: Lens.Lens' Explanation (Prelude.Maybe [AnalysisComponent])
+explanation_loadBalancerTargetGroups = Lens.lens (\Explanation' {loadBalancerTargetGroups} -> loadBalancerTargetGroups) (\s@Explanation' {} a -> s {loadBalancerTargetGroups = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The target port.
+explanation_loadBalancerTargetPort :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Natural)
+explanation_loadBalancerTargetPort = Lens.lens (\Explanation' {loadBalancerTargetPort} -> loadBalancerTargetPort) (\s@Explanation' {} a -> s {loadBalancerTargetPort = a} :: Explanation)
+
+-- | The missing component.
+explanation_missingComponent :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_missingComponent = Lens.lens (\Explanation' {missingComponent} -> missingComponent) (\s@Explanation' {} a -> s {missingComponent = a} :: Explanation)
+
+-- | The NAT gateway.
+explanation_natGateway :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_natGateway = Lens.lens (\Explanation' {natGateway} -> natGateway) (\s@Explanation' {} a -> s {natGateway = a} :: Explanation)
+
+-- | The network interface.
+explanation_networkInterface :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_networkInterface = Lens.lens (\Explanation' {networkInterface} -> networkInterface) (\s@Explanation' {} a -> s {networkInterface = a} :: Explanation)
+
+-- | The packet field.
+explanation_packetField :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_packetField = Lens.lens (\Explanation' {packetField} -> packetField) (\s@Explanation' {} a -> s {packetField = a} :: Explanation)
+
+-- | The port.
+explanation_port :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Natural)
+explanation_port = Lens.lens (\Explanation' {port} -> port) (\s@Explanation' {} a -> s {port = a} :: Explanation)
+
+-- | The port ranges.
+explanation_portRanges :: Lens.Lens' Explanation (Prelude.Maybe [PortRange])
+explanation_portRanges = Lens.lens (\Explanation' {portRanges} -> portRanges) (\s@Explanation' {} a -> s {portRanges = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The prefix list.
+explanation_prefixList :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_prefixList = Lens.lens (\Explanation' {prefixList} -> prefixList) (\s@Explanation' {} a -> s {prefixList = a} :: Explanation)
+
+-- | The protocols.
+explanation_protocols :: Lens.Lens' Explanation (Prelude.Maybe [Prelude.Text])
+explanation_protocols = Lens.lens (\Explanation' {protocols} -> protocols) (\s@Explanation' {} a -> s {protocols = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The route table.
+explanation_routeTable :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_routeTable = Lens.lens (\Explanation' {routeTable} -> routeTable) (\s@Explanation' {} a -> s {routeTable = a} :: Explanation)
+
+-- | The route table route.
+explanation_routeTableRoute :: Lens.Lens' Explanation (Prelude.Maybe AnalysisRouteTableRoute)
+explanation_routeTableRoute = Lens.lens (\Explanation' {routeTableRoute} -> routeTableRoute) (\s@Explanation' {} a -> s {routeTableRoute = a} :: Explanation)
+
+-- | The security group.
+explanation_securityGroup :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_securityGroup = Lens.lens (\Explanation' {securityGroup} -> securityGroup) (\s@Explanation' {} a -> s {securityGroup = a} :: Explanation)
+
+-- | The security group rule.
+explanation_securityGroupRule :: Lens.Lens' Explanation (Prelude.Maybe AnalysisSecurityGroupRule)
+explanation_securityGroupRule = Lens.lens (\Explanation' {securityGroupRule} -> securityGroupRule) (\s@Explanation' {} a -> s {securityGroupRule = a} :: Explanation)
+
+-- | The security groups.
+explanation_securityGroups :: Lens.Lens' Explanation (Prelude.Maybe [AnalysisComponent])
+explanation_securityGroups = Lens.lens (\Explanation' {securityGroups} -> securityGroups) (\s@Explanation' {} a -> s {securityGroups = a} :: Explanation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source VPC.
+explanation_sourceVpc :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_sourceVpc = Lens.lens (\Explanation' {sourceVpc} -> sourceVpc) (\s@Explanation' {} a -> s {sourceVpc = a} :: Explanation)
+
+-- | The state.
+explanation_state :: Lens.Lens' Explanation (Prelude.Maybe Prelude.Text)
+explanation_state = Lens.lens (\Explanation' {state} -> state) (\s@Explanation' {} a -> s {state = a} :: Explanation)
+
+-- | The subnet.
+explanation_subnet :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_subnet = Lens.lens (\Explanation' {subnet} -> subnet) (\s@Explanation' {} a -> s {subnet = a} :: Explanation)
+
+-- | The route table for the subnet.
+explanation_subnetRouteTable :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_subnetRouteTable = Lens.lens (\Explanation' {subnetRouteTable} -> subnetRouteTable) (\s@Explanation' {} a -> s {subnetRouteTable = a} :: Explanation)
+
+-- | The transit gateway.
+explanation_transitGateway :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_transitGateway = Lens.lens (\Explanation' {transitGateway} -> transitGateway) (\s@Explanation' {} a -> s {transitGateway = a} :: Explanation)
+
+-- | The transit gateway attachment.
+explanation_transitGatewayAttachment :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_transitGatewayAttachment = Lens.lens (\Explanation' {transitGatewayAttachment} -> transitGatewayAttachment) (\s@Explanation' {} a -> s {transitGatewayAttachment = a} :: Explanation)
+
+-- | The transit gateway route table.
+explanation_transitGatewayRouteTable :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_transitGatewayRouteTable = Lens.lens (\Explanation' {transitGatewayRouteTable} -> transitGatewayRouteTable) (\s@Explanation' {} a -> s {transitGatewayRouteTable = a} :: Explanation)
+
+-- | The transit gateway route table route.
+explanation_transitGatewayRouteTableRoute :: Lens.Lens' Explanation (Prelude.Maybe TransitGatewayRouteTableRoute)
+explanation_transitGatewayRouteTableRoute = Lens.lens (\Explanation' {transitGatewayRouteTableRoute} -> transitGatewayRouteTableRoute) (\s@Explanation' {} a -> s {transitGatewayRouteTableRoute = a} :: Explanation)
+
+-- | The component VPC.
+explanation_vpc :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_vpc = Lens.lens (\Explanation' {vpc} -> vpc) (\s@Explanation' {} a -> s {vpc = a} :: Explanation)
+
+-- | The VPC endpoint.
+explanation_vpcEndpoint :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_vpcEndpoint = Lens.lens (\Explanation' {vpcEndpoint} -> vpcEndpoint) (\s@Explanation' {} a -> s {vpcEndpoint = a} :: Explanation)
+
+-- | The VPC peering connection.
+explanation_vpcPeeringConnection :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_vpcPeeringConnection = Lens.lens (\Explanation' {vpcPeeringConnection} -> vpcPeeringConnection) (\s@Explanation' {} a -> s {vpcPeeringConnection = a} :: Explanation)
+
+-- | The VPN connection.
+explanation_vpnConnection :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_vpnConnection = Lens.lens (\Explanation' {vpnConnection} -> vpnConnection) (\s@Explanation' {} a -> s {vpnConnection = a} :: Explanation)
+
+-- | The VPN gateway.
+explanation_vpnGateway :: Lens.Lens' Explanation (Prelude.Maybe AnalysisComponent)
+explanation_vpnGateway = Lens.lens (\Explanation' {vpnGateway} -> vpnGateway) (\s@Explanation' {} a -> s {vpnGateway = a} :: Explanation)
+
+instance Data.FromXML Explanation where
+  parseXML x =
+    Explanation'
+      Prelude.<$> (x Data..@? "acl")
+      Prelude.<*> (x Data..@? "aclRule")
+      Prelude.<*> (x Data..@? "address")
+      Prelude.<*> ( x
+                      Data..@? "addressSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "attachedTo")
+      Prelude.<*> ( x
+                      Data..@? "availabilityZoneSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "cidrSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "classicLoadBalancerListener")
+      Prelude.<*> (x Data..@? "component")
+      Prelude.<*> (x Data..@? "componentAccount")
+      Prelude.<*> (x Data..@? "componentRegion")
+      Prelude.<*> (x Data..@? "customerGateway")
+      Prelude.<*> (x Data..@? "destination")
+      Prelude.<*> (x Data..@? "destinationVpc")
+      Prelude.<*> (x Data..@? "direction")
+      Prelude.<*> (x Data..@? "elasticLoadBalancerListener")
+      Prelude.<*> (x Data..@? "explanationCode")
+      Prelude.<*> (x Data..@? "ingressRouteTable")
+      Prelude.<*> (x Data..@? "internetGateway")
+      Prelude.<*> (x Data..@? "loadBalancerArn")
+      Prelude.<*> (x Data..@? "loadBalancerListenerPort")
+      Prelude.<*> (x Data..@? "loadBalancerTarget")
+      Prelude.<*> (x Data..@? "loadBalancerTargetGroup")
+      Prelude.<*> ( x
+                      Data..@? "loadBalancerTargetGroupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "loadBalancerTargetPort")
+      Prelude.<*> (x Data..@? "missingComponent")
+      Prelude.<*> (x Data..@? "natGateway")
+      Prelude.<*> (x Data..@? "networkInterface")
+      Prelude.<*> (x Data..@? "packetField")
+      Prelude.<*> (x Data..@? "port")
+      Prelude.<*> ( x
+                      Data..@? "portRangeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "prefixList")
+      Prelude.<*> ( x
+                      Data..@? "protocolSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "routeTable")
+      Prelude.<*> (x Data..@? "routeTableRoute")
+      Prelude.<*> (x Data..@? "securityGroup")
+      Prelude.<*> (x Data..@? "securityGroupRule")
+      Prelude.<*> ( x
+                      Data..@? "securityGroupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "sourceVpc")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "subnet")
+      Prelude.<*> (x Data..@? "subnetRouteTable")
+      Prelude.<*> (x Data..@? "transitGateway")
+      Prelude.<*> (x Data..@? "transitGatewayAttachment")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTable")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableRoute")
+      Prelude.<*> (x Data..@? "vpc")
+      Prelude.<*> (x Data..@? "vpcEndpoint")
+      Prelude.<*> (x Data..@? "vpcPeeringConnection")
+      Prelude.<*> (x Data..@? "vpnConnection")
+      Prelude.<*> (x Data..@? "vpnGateway")
+
+instance Prelude.Hashable Explanation where
+  hashWithSalt _salt Explanation' {..} =
+    _salt
+      `Prelude.hashWithSalt` acl
+      `Prelude.hashWithSalt` aclRule
+      `Prelude.hashWithSalt` address
+      `Prelude.hashWithSalt` addresses
+      `Prelude.hashWithSalt` attachedTo
+      `Prelude.hashWithSalt` availabilityZones
+      `Prelude.hashWithSalt` cidrs
+      `Prelude.hashWithSalt` classicLoadBalancerListener
+      `Prelude.hashWithSalt` component
+      `Prelude.hashWithSalt` componentAccount
+      `Prelude.hashWithSalt` componentRegion
+      `Prelude.hashWithSalt` customerGateway
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` destinationVpc
+      `Prelude.hashWithSalt` direction
+      `Prelude.hashWithSalt` elasticLoadBalancerListener
+      `Prelude.hashWithSalt` explanationCode
+      `Prelude.hashWithSalt` ingressRouteTable
+      `Prelude.hashWithSalt` internetGateway
+      `Prelude.hashWithSalt` loadBalancerArn
+      `Prelude.hashWithSalt` loadBalancerListenerPort
+      `Prelude.hashWithSalt` loadBalancerTarget
+      `Prelude.hashWithSalt` loadBalancerTargetGroup
+      `Prelude.hashWithSalt` loadBalancerTargetGroups
+      `Prelude.hashWithSalt` loadBalancerTargetPort
+      `Prelude.hashWithSalt` missingComponent
+      `Prelude.hashWithSalt` natGateway
+      `Prelude.hashWithSalt` networkInterface
+      `Prelude.hashWithSalt` packetField
+      `Prelude.hashWithSalt` port
+      `Prelude.hashWithSalt` portRanges
+      `Prelude.hashWithSalt` prefixList
+      `Prelude.hashWithSalt` protocols
+      `Prelude.hashWithSalt` routeTable
+      `Prelude.hashWithSalt` routeTableRoute
+      `Prelude.hashWithSalt` securityGroup
+      `Prelude.hashWithSalt` securityGroupRule
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` sourceVpc
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnet
+      `Prelude.hashWithSalt` subnetRouteTable
+      `Prelude.hashWithSalt` transitGateway
+      `Prelude.hashWithSalt` transitGatewayAttachment
+      `Prelude.hashWithSalt` transitGatewayRouteTable
+      `Prelude.hashWithSalt` transitGatewayRouteTableRoute
+      `Prelude.hashWithSalt` vpc
+      `Prelude.hashWithSalt` vpcEndpoint
+      `Prelude.hashWithSalt` vpcPeeringConnection
+      `Prelude.hashWithSalt` vpnConnection
+      `Prelude.hashWithSalt` vpnGateway
+
+instance Prelude.NFData Explanation where
+  rnf Explanation' {..} =
+    Prelude.rnf acl
+      `Prelude.seq` Prelude.rnf aclRule
+      `Prelude.seq` Prelude.rnf address
+      `Prelude.seq` Prelude.rnf addresses
+      `Prelude.seq` Prelude.rnf attachedTo
+      `Prelude.seq` Prelude.rnf availabilityZones
+      `Prelude.seq` Prelude.rnf cidrs
+      `Prelude.seq` Prelude.rnf classicLoadBalancerListener
+      `Prelude.seq` Prelude.rnf component
+      `Prelude.seq` Prelude.rnf componentAccount
+      `Prelude.seq` Prelude.rnf componentRegion
+      `Prelude.seq` Prelude.rnf customerGateway
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf destinationVpc
+      `Prelude.seq` Prelude.rnf direction
+      `Prelude.seq` Prelude.rnf
+        elasticLoadBalancerListener
+      `Prelude.seq` Prelude.rnf explanationCode
+      `Prelude.seq` Prelude.rnf ingressRouteTable
+      `Prelude.seq` Prelude.rnf internetGateway
+      `Prelude.seq` Prelude.rnf loadBalancerArn
+      `Prelude.seq` Prelude.rnf
+        loadBalancerListenerPort
+      `Prelude.seq` Prelude.rnf
+        loadBalancerTarget
+      `Prelude.seq` Prelude.rnf
+        loadBalancerTargetGroup
+      `Prelude.seq` Prelude.rnf
+        loadBalancerTargetGroups
+      `Prelude.seq` Prelude.rnf
+        loadBalancerTargetPort
+      `Prelude.seq` Prelude.rnf
+        missingComponent
+      `Prelude.seq` Prelude.rnf
+        natGateway
+      `Prelude.seq` Prelude.rnf
+        networkInterface
+      `Prelude.seq` Prelude.rnf
+        packetField
+      `Prelude.seq` Prelude.rnf
+        port
+      `Prelude.seq` Prelude.rnf
+        portRanges
+      `Prelude.seq` Prelude.rnf
+        prefixList
+      `Prelude.seq` Prelude.rnf
+        protocols
+      `Prelude.seq` Prelude.rnf
+        routeTable
+      `Prelude.seq` Prelude.rnf
+        routeTableRoute
+      `Prelude.seq` Prelude.rnf
+        securityGroup
+      `Prelude.seq` Prelude.rnf
+        securityGroupRule
+      `Prelude.seq` Prelude.rnf
+        securityGroups
+      `Prelude.seq` Prelude.rnf
+        sourceVpc
+      `Prelude.seq` Prelude.rnf
+        state
+      `Prelude.seq` Prelude.rnf
+        subnet
+      `Prelude.seq` Prelude.rnf
+        subnetRouteTable
+      `Prelude.seq` Prelude.rnf
+        transitGateway
+      `Prelude.seq` Prelude.rnf
+        transitGatewayAttachment
+      `Prelude.seq` Prelude.rnf
+        transitGatewayRouteTable
+      `Prelude.seq` Prelude.rnf
+        transitGatewayRouteTableRoute
+      `Prelude.seq` Prelude.rnf
+        vpc
+      `Prelude.seq` Prelude.rnf
+        vpcEndpoint
+      `Prelude.seq` Prelude.rnf
+        vpcPeeringConnection
+      `Prelude.seq` Prelude.rnf
+        vpnConnection
+      `Prelude.seq` Prelude.rnf
+        vpnGateway
diff --git a/gen/Amazonka/EC2/Types/ExportEnvironment.hs b/gen/Amazonka/EC2/Types/ExportEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportEnvironment.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportEnvironment
+  ( ExportEnvironment
+      ( ..,
+        ExportEnvironment_Citrix,
+        ExportEnvironment_Microsoft,
+        ExportEnvironment_Vmware
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportEnvironment = ExportEnvironment'
+  { fromExportEnvironment ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ExportEnvironment_Citrix :: ExportEnvironment
+pattern ExportEnvironment_Citrix = ExportEnvironment' "citrix"
+
+pattern ExportEnvironment_Microsoft :: ExportEnvironment
+pattern ExportEnvironment_Microsoft = ExportEnvironment' "microsoft"
+
+pattern ExportEnvironment_Vmware :: ExportEnvironment
+pattern ExportEnvironment_Vmware = ExportEnvironment' "vmware"
+
+{-# COMPLETE
+  ExportEnvironment_Citrix,
+  ExportEnvironment_Microsoft,
+  ExportEnvironment_Vmware,
+  ExportEnvironment'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ExportImageTask.hs b/gen/Amazonka/EC2/Types/ExportImageTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportImageTask.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportImageTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportImageTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ExportTaskS3Location
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an export image task.
+--
+-- /See:/ 'newExportImageTask' smart constructor.
+data ExportImageTask = ExportImageTask'
+  { -- | A description of the image being exported.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the export image task.
+    exportImageTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the image.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The percent complete of the export image task.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | Information about the destination Amazon S3 bucket.
+    s3ExportLocation :: Prelude.Maybe ExportTaskS3Location,
+    -- | The status of the export image task. The possible values are @active@,
+    -- @completed@, @deleting@, and @deleted@.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The status message for the export image task.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the export image task.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportImageTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'exportImageTask_description' - A description of the image being exported.
+--
+-- 'exportImageTaskId', 'exportImageTask_exportImageTaskId' - The ID of the export image task.
+--
+-- 'imageId', 'exportImageTask_imageId' - The ID of the image.
+--
+-- 'progress', 'exportImageTask_progress' - The percent complete of the export image task.
+--
+-- 's3ExportLocation', 'exportImageTask_s3ExportLocation' - Information about the destination Amazon S3 bucket.
+--
+-- 'status', 'exportImageTask_status' - The status of the export image task. The possible values are @active@,
+-- @completed@, @deleting@, and @deleted@.
+--
+-- 'statusMessage', 'exportImageTask_statusMessage' - The status message for the export image task.
+--
+-- 'tags', 'exportImageTask_tags' - Any tags assigned to the export image task.
+newExportImageTask ::
+  ExportImageTask
+newExportImageTask =
+  ExportImageTask'
+    { description = Prelude.Nothing,
+      exportImageTaskId = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      s3ExportLocation = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | A description of the image being exported.
+exportImageTask_description :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
+exportImageTask_description = Lens.lens (\ExportImageTask' {description} -> description) (\s@ExportImageTask' {} a -> s {description = a} :: ExportImageTask)
+
+-- | The ID of the export image task.
+exportImageTask_exportImageTaskId :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
+exportImageTask_exportImageTaskId = Lens.lens (\ExportImageTask' {exportImageTaskId} -> exportImageTaskId) (\s@ExportImageTask' {} a -> s {exportImageTaskId = a} :: ExportImageTask)
+
+-- | The ID of the image.
+exportImageTask_imageId :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
+exportImageTask_imageId = Lens.lens (\ExportImageTask' {imageId} -> imageId) (\s@ExportImageTask' {} a -> s {imageId = a} :: ExportImageTask)
+
+-- | The percent complete of the export image task.
+exportImageTask_progress :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
+exportImageTask_progress = Lens.lens (\ExportImageTask' {progress} -> progress) (\s@ExportImageTask' {} a -> s {progress = a} :: ExportImageTask)
+
+-- | Information about the destination Amazon S3 bucket.
+exportImageTask_s3ExportLocation :: Lens.Lens' ExportImageTask (Prelude.Maybe ExportTaskS3Location)
+exportImageTask_s3ExportLocation = Lens.lens (\ExportImageTask' {s3ExportLocation} -> s3ExportLocation) (\s@ExportImageTask' {} a -> s {s3ExportLocation = a} :: ExportImageTask)
+
+-- | The status of the export image task. The possible values are @active@,
+-- @completed@, @deleting@, and @deleted@.
+exportImageTask_status :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
+exportImageTask_status = Lens.lens (\ExportImageTask' {status} -> status) (\s@ExportImageTask' {} a -> s {status = a} :: ExportImageTask)
+
+-- | The status message for the export image task.
+exportImageTask_statusMessage :: Lens.Lens' ExportImageTask (Prelude.Maybe Prelude.Text)
+exportImageTask_statusMessage = Lens.lens (\ExportImageTask' {statusMessage} -> statusMessage) (\s@ExportImageTask' {} a -> s {statusMessage = a} :: ExportImageTask)
+
+-- | Any tags assigned to the export image task.
+exportImageTask_tags :: Lens.Lens' ExportImageTask (Prelude.Maybe [Tag])
+exportImageTask_tags = Lens.lens (\ExportImageTask' {tags} -> tags) (\s@ExportImageTask' {} a -> s {tags = a} :: ExportImageTask) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ExportImageTask where
+  parseXML x =
+    ExportImageTask'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "exportImageTaskId")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "progress")
+      Prelude.<*> (x Data..@? "s3ExportLocation")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ExportImageTask where
+  hashWithSalt _salt ExportImageTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` exportImageTaskId
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` s3ExportLocation
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ExportImageTask where
+  rnf ExportImageTask' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf exportImageTaskId
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf s3ExportLocation
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ExportTask.hs b/gen/Amazonka/EC2/Types/ExportTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportTask.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ExportTaskState
+import Amazonka.EC2.Types.ExportToS3Task
+import Amazonka.EC2.Types.InstanceExportDetails
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an export instance task.
+--
+-- /See:/ 'newExportTask' smart constructor.
+data ExportTask = ExportTask'
+  { -- | The tags for the export task.
+    tags :: Prelude.Maybe [Tag],
+    -- | A description of the resource being exported.
+    description :: Prelude.Text,
+    -- | The ID of the export task.
+    exportTaskId :: Prelude.Text,
+    -- | Information about the export task.
+    exportToS3Task :: ExportToS3Task,
+    -- | Information about the instance to export.
+    instanceExportDetails :: InstanceExportDetails,
+    -- | The state of the export task.
+    state :: ExportTaskState,
+    -- | The status message related to the export task.
+    statusMessage :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'exportTask_tags' - The tags for the export task.
+--
+-- 'description', 'exportTask_description' - A description of the resource being exported.
+--
+-- 'exportTaskId', 'exportTask_exportTaskId' - The ID of the export task.
+--
+-- 'exportToS3Task', 'exportTask_exportToS3Task' - Information about the export task.
+--
+-- 'instanceExportDetails', 'exportTask_instanceExportDetails' - Information about the instance to export.
+--
+-- 'state', 'exportTask_state' - The state of the export task.
+--
+-- 'statusMessage', 'exportTask_statusMessage' - The status message related to the export task.
+newExportTask ::
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'exportTaskId'
+  Prelude.Text ->
+  -- | 'exportToS3Task'
+  ExportToS3Task ->
+  -- | 'instanceExportDetails'
+  InstanceExportDetails ->
+  -- | 'state'
+  ExportTaskState ->
+  -- | 'statusMessage'
+  Prelude.Text ->
+  ExportTask
+newExportTask
+  pDescription_
+  pExportTaskId_
+  pExportToS3Task_
+  pInstanceExportDetails_
+  pState_
+  pStatusMessage_ =
+    ExportTask'
+      { tags = Prelude.Nothing,
+        description = pDescription_,
+        exportTaskId = pExportTaskId_,
+        exportToS3Task = pExportToS3Task_,
+        instanceExportDetails = pInstanceExportDetails_,
+        state = pState_,
+        statusMessage = pStatusMessage_
+      }
+
+-- | The tags for the export task.
+exportTask_tags :: Lens.Lens' ExportTask (Prelude.Maybe [Tag])
+exportTask_tags = Lens.lens (\ExportTask' {tags} -> tags) (\s@ExportTask' {} a -> s {tags = a} :: ExportTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | A description of the resource being exported.
+exportTask_description :: Lens.Lens' ExportTask Prelude.Text
+exportTask_description = Lens.lens (\ExportTask' {description} -> description) (\s@ExportTask' {} a -> s {description = a} :: ExportTask)
+
+-- | The ID of the export task.
+exportTask_exportTaskId :: Lens.Lens' ExportTask Prelude.Text
+exportTask_exportTaskId = Lens.lens (\ExportTask' {exportTaskId} -> exportTaskId) (\s@ExportTask' {} a -> s {exportTaskId = a} :: ExportTask)
+
+-- | Information about the export task.
+exportTask_exportToS3Task :: Lens.Lens' ExportTask ExportToS3Task
+exportTask_exportToS3Task = Lens.lens (\ExportTask' {exportToS3Task} -> exportToS3Task) (\s@ExportTask' {} a -> s {exportToS3Task = a} :: ExportTask)
+
+-- | Information about the instance to export.
+exportTask_instanceExportDetails :: Lens.Lens' ExportTask InstanceExportDetails
+exportTask_instanceExportDetails = Lens.lens (\ExportTask' {instanceExportDetails} -> instanceExportDetails) (\s@ExportTask' {} a -> s {instanceExportDetails = a} :: ExportTask)
+
+-- | The state of the export task.
+exportTask_state :: Lens.Lens' ExportTask ExportTaskState
+exportTask_state = Lens.lens (\ExportTask' {state} -> state) (\s@ExportTask' {} a -> s {state = a} :: ExportTask)
+
+-- | The status message related to the export task.
+exportTask_statusMessage :: Lens.Lens' ExportTask Prelude.Text
+exportTask_statusMessage = Lens.lens (\ExportTask' {statusMessage} -> statusMessage) (\s@ExportTask' {} a -> s {statusMessage = a} :: ExportTask)
+
+instance Data.FromXML ExportTask where
+  parseXML x =
+    ExportTask'
+      Prelude.<$> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "description")
+      Prelude.<*> (x Data..@ "exportTaskId")
+      Prelude.<*> (x Data..@ "exportToS3")
+      Prelude.<*> (x Data..@ "instanceExport")
+      Prelude.<*> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "statusMessage")
+
+instance Prelude.Hashable ExportTask where
+  hashWithSalt _salt ExportTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` exportTaskId
+      `Prelude.hashWithSalt` exportToS3Task
+      `Prelude.hashWithSalt` instanceExportDetails
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData ExportTask where
+  rnf ExportTask' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf exportTaskId
+      `Prelude.seq` Prelude.rnf exportToS3Task
+      `Prelude.seq` Prelude.rnf instanceExportDetails
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/ExportTaskS3Location.hs b/gen/Amazonka/EC2/Types/ExportTaskS3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportTaskS3Location.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportTaskS3Location
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportTaskS3Location where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the destination for an export image task.
+--
+-- /See:/ 'newExportTaskS3Location' smart constructor.
+data ExportTaskS3Location = ExportTaskS3Location'
+  { -- | The destination Amazon S3 bucket.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The prefix (logical hierarchy) in the bucket.
+    s3Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTaskS3Location' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Bucket', 'exportTaskS3Location_s3Bucket' - The destination Amazon S3 bucket.
+--
+-- 's3Prefix', 'exportTaskS3Location_s3Prefix' - The prefix (logical hierarchy) in the bucket.
+newExportTaskS3Location ::
+  ExportTaskS3Location
+newExportTaskS3Location =
+  ExportTaskS3Location'
+    { s3Bucket = Prelude.Nothing,
+      s3Prefix = Prelude.Nothing
+    }
+
+-- | The destination Amazon S3 bucket.
+exportTaskS3Location_s3Bucket :: Lens.Lens' ExportTaskS3Location (Prelude.Maybe Prelude.Text)
+exportTaskS3Location_s3Bucket = Lens.lens (\ExportTaskS3Location' {s3Bucket} -> s3Bucket) (\s@ExportTaskS3Location' {} a -> s {s3Bucket = a} :: ExportTaskS3Location)
+
+-- | The prefix (logical hierarchy) in the bucket.
+exportTaskS3Location_s3Prefix :: Lens.Lens' ExportTaskS3Location (Prelude.Maybe Prelude.Text)
+exportTaskS3Location_s3Prefix = Lens.lens (\ExportTaskS3Location' {s3Prefix} -> s3Prefix) (\s@ExportTaskS3Location' {} a -> s {s3Prefix = a} :: ExportTaskS3Location)
+
+instance Data.FromXML ExportTaskS3Location where
+  parseXML x =
+    ExportTaskS3Location'
+      Prelude.<$> (x Data..@? "s3Bucket")
+      Prelude.<*> (x Data..@? "s3Prefix")
+
+instance Prelude.Hashable ExportTaskS3Location where
+  hashWithSalt _salt ExportTaskS3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Prefix
+
+instance Prelude.NFData ExportTaskS3Location where
+  rnf ExportTaskS3Location' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Prefix
diff --git a/gen/Amazonka/EC2/Types/ExportTaskS3LocationRequest.hs b/gen/Amazonka/EC2/Types/ExportTaskS3LocationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportTaskS3LocationRequest.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportTaskS3LocationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportTaskS3LocationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the destination for an export image task.
+--
+-- /See:/ 'newExportTaskS3LocationRequest' smart constructor.
+data ExportTaskS3LocationRequest = ExportTaskS3LocationRequest'
+  { -- | The prefix (logical hierarchy) in the bucket.
+    s3Prefix :: Prelude.Maybe Prelude.Text,
+    -- | The destination Amazon S3 bucket.
+    s3Bucket :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportTaskS3LocationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Prefix', 'exportTaskS3LocationRequest_s3Prefix' - The prefix (logical hierarchy) in the bucket.
+--
+-- 's3Bucket', 'exportTaskS3LocationRequest_s3Bucket' - The destination Amazon S3 bucket.
+newExportTaskS3LocationRequest ::
+  -- | 's3Bucket'
+  Prelude.Text ->
+  ExportTaskS3LocationRequest
+newExportTaskS3LocationRequest pS3Bucket_ =
+  ExportTaskS3LocationRequest'
+    { s3Prefix =
+        Prelude.Nothing,
+      s3Bucket = pS3Bucket_
+    }
+
+-- | The prefix (logical hierarchy) in the bucket.
+exportTaskS3LocationRequest_s3Prefix :: Lens.Lens' ExportTaskS3LocationRequest (Prelude.Maybe Prelude.Text)
+exportTaskS3LocationRequest_s3Prefix = Lens.lens (\ExportTaskS3LocationRequest' {s3Prefix} -> s3Prefix) (\s@ExportTaskS3LocationRequest' {} a -> s {s3Prefix = a} :: ExportTaskS3LocationRequest)
+
+-- | The destination Amazon S3 bucket.
+exportTaskS3LocationRequest_s3Bucket :: Lens.Lens' ExportTaskS3LocationRequest Prelude.Text
+exportTaskS3LocationRequest_s3Bucket = Lens.lens (\ExportTaskS3LocationRequest' {s3Bucket} -> s3Bucket) (\s@ExportTaskS3LocationRequest' {} a -> s {s3Bucket = a} :: ExportTaskS3LocationRequest)
+
+instance Prelude.Hashable ExportTaskS3LocationRequest where
+  hashWithSalt _salt ExportTaskS3LocationRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Prefix
+      `Prelude.hashWithSalt` s3Bucket
+
+instance Prelude.NFData ExportTaskS3LocationRequest where
+  rnf ExportTaskS3LocationRequest' {..} =
+    Prelude.rnf s3Prefix
+      `Prelude.seq` Prelude.rnf s3Bucket
+
+instance Data.ToQuery ExportTaskS3LocationRequest where
+  toQuery ExportTaskS3LocationRequest' {..} =
+    Prelude.mconcat
+      [ "S3Prefix" Data.=: s3Prefix,
+        "S3Bucket" Data.=: s3Bucket
+      ]
diff --git a/gen/Amazonka/EC2/Types/ExportTaskState.hs b/gen/Amazonka/EC2/Types/ExportTaskState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportTaskState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportTaskState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportTaskState
+  ( ExportTaskState
+      ( ..,
+        ExportTaskState_Active,
+        ExportTaskState_Cancelled,
+        ExportTaskState_Cancelling,
+        ExportTaskState_Completed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ExportTaskState = ExportTaskState'
+  { fromExportTaskState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ExportTaskState_Active :: ExportTaskState
+pattern ExportTaskState_Active = ExportTaskState' "active"
+
+pattern ExportTaskState_Cancelled :: ExportTaskState
+pattern ExportTaskState_Cancelled = ExportTaskState' "cancelled"
+
+pattern ExportTaskState_Cancelling :: ExportTaskState
+pattern ExportTaskState_Cancelling = ExportTaskState' "cancelling"
+
+pattern ExportTaskState_Completed :: ExportTaskState
+pattern ExportTaskState_Completed = ExportTaskState' "completed"
+
+{-# COMPLETE
+  ExportTaskState_Active,
+  ExportTaskState_Cancelled,
+  ExportTaskState_Cancelling,
+  ExportTaskState_Completed,
+  ExportTaskState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ExportToS3Task.hs b/gen/Amazonka/EC2/Types/ExportToS3Task.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportToS3Task.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportToS3Task
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportToS3Task where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ContainerFormat
+import Amazonka.EC2.Types.DiskImageFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the format and location for the export task.
+--
+-- /See:/ 'newExportToS3Task' smart constructor.
+data ExportToS3Task = ExportToS3Task'
+  { -- | The container format used to combine disk images with metadata (such as
+    -- OVF). If absent, only the disk image is exported.
+    containerFormat :: Prelude.Maybe ContainerFormat,
+    -- | The format for the exported image.
+    diskImageFormat :: Prelude.Maybe DiskImageFormat,
+    -- | The Amazon S3 bucket for the destination image. The destination bucket
+    -- must exist and have an access control list (ACL) attached that specifies
+    -- the Region-specific canonical account ID for the @Grantee@. For more
+    -- information about the ACL to your S3 bucket, see
+    -- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites Prerequisites>
+    -- in the VM Import\/Export User Guide.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The encryption key for your S3 bucket.
+    s3Key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportToS3Task' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerFormat', 'exportToS3Task_containerFormat' - The container format used to combine disk images with metadata (such as
+-- OVF). If absent, only the disk image is exported.
+--
+-- 'diskImageFormat', 'exportToS3Task_diskImageFormat' - The format for the exported image.
+--
+-- 's3Bucket', 'exportToS3Task_s3Bucket' - The Amazon S3 bucket for the destination image. The destination bucket
+-- must exist and have an access control list (ACL) attached that specifies
+-- the Region-specific canonical account ID for the @Grantee@. For more
+-- information about the ACL to your S3 bucket, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites Prerequisites>
+-- in the VM Import\/Export User Guide.
+--
+-- 's3Key', 'exportToS3Task_s3Key' - The encryption key for your S3 bucket.
+newExportToS3Task ::
+  ExportToS3Task
+newExportToS3Task =
+  ExportToS3Task'
+    { containerFormat = Prelude.Nothing,
+      diskImageFormat = Prelude.Nothing,
+      s3Bucket = Prelude.Nothing,
+      s3Key = Prelude.Nothing
+    }
+
+-- | The container format used to combine disk images with metadata (such as
+-- OVF). If absent, only the disk image is exported.
+exportToS3Task_containerFormat :: Lens.Lens' ExportToS3Task (Prelude.Maybe ContainerFormat)
+exportToS3Task_containerFormat = Lens.lens (\ExportToS3Task' {containerFormat} -> containerFormat) (\s@ExportToS3Task' {} a -> s {containerFormat = a} :: ExportToS3Task)
+
+-- | The format for the exported image.
+exportToS3Task_diskImageFormat :: Lens.Lens' ExportToS3Task (Prelude.Maybe DiskImageFormat)
+exportToS3Task_diskImageFormat = Lens.lens (\ExportToS3Task' {diskImageFormat} -> diskImageFormat) (\s@ExportToS3Task' {} a -> s {diskImageFormat = a} :: ExportToS3Task)
+
+-- | The Amazon S3 bucket for the destination image. The destination bucket
+-- must exist and have an access control list (ACL) attached that specifies
+-- the Region-specific canonical account ID for the @Grantee@. For more
+-- information about the ACL to your S3 bucket, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites Prerequisites>
+-- in the VM Import\/Export User Guide.
+exportToS3Task_s3Bucket :: Lens.Lens' ExportToS3Task (Prelude.Maybe Prelude.Text)
+exportToS3Task_s3Bucket = Lens.lens (\ExportToS3Task' {s3Bucket} -> s3Bucket) (\s@ExportToS3Task' {} a -> s {s3Bucket = a} :: ExportToS3Task)
+
+-- | The encryption key for your S3 bucket.
+exportToS3Task_s3Key :: Lens.Lens' ExportToS3Task (Prelude.Maybe Prelude.Text)
+exportToS3Task_s3Key = Lens.lens (\ExportToS3Task' {s3Key} -> s3Key) (\s@ExportToS3Task' {} a -> s {s3Key = a} :: ExportToS3Task)
+
+instance Data.FromXML ExportToS3Task where
+  parseXML x =
+    ExportToS3Task'
+      Prelude.<$> (x Data..@? "containerFormat")
+      Prelude.<*> (x Data..@? "diskImageFormat")
+      Prelude.<*> (x Data..@? "s3Bucket")
+      Prelude.<*> (x Data..@? "s3Key")
+
+instance Prelude.Hashable ExportToS3Task where
+  hashWithSalt _salt ExportToS3Task' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerFormat
+      `Prelude.hashWithSalt` diskImageFormat
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData ExportToS3Task where
+  rnf ExportToS3Task' {..} =
+    Prelude.rnf containerFormat
+      `Prelude.seq` Prelude.rnf diskImageFormat
+      `Prelude.seq` Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
diff --git a/gen/Amazonka/EC2/Types/ExportToS3TaskSpecification.hs b/gen/Amazonka/EC2/Types/ExportToS3TaskSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ExportToS3TaskSpecification.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ExportToS3TaskSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ExportToS3TaskSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ContainerFormat
+import Amazonka.EC2.Types.DiskImageFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an export instance task.
+--
+-- /See:/ 'newExportToS3TaskSpecification' smart constructor.
+data ExportToS3TaskSpecification = ExportToS3TaskSpecification'
+  { -- | The container format used to combine disk images with metadata (such as
+    -- OVF). If absent, only the disk image is exported.
+    containerFormat :: Prelude.Maybe ContainerFormat,
+    -- | The format for the exported image.
+    diskImageFormat :: Prelude.Maybe DiskImageFormat,
+    -- | The Amazon S3 bucket for the destination image. The destination bucket
+    -- must exist and have an access control list (ACL) attached that specifies
+    -- the Region-specific canonical account ID for the @Grantee@. For more
+    -- information about the ACL to your S3 bucket, see
+    -- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites Prerequisites>
+    -- in the VM Import\/Export User Guide.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The image is written to a single object in the Amazon S3 bucket at the
+    -- S3 key s3prefix + exportTaskId + \'.\' + diskImageFormat.
+    s3Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportToS3TaskSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'containerFormat', 'exportToS3TaskSpecification_containerFormat' - The container format used to combine disk images with metadata (such as
+-- OVF). If absent, only the disk image is exported.
+--
+-- 'diskImageFormat', 'exportToS3TaskSpecification_diskImageFormat' - The format for the exported image.
+--
+-- 's3Bucket', 'exportToS3TaskSpecification_s3Bucket' - The Amazon S3 bucket for the destination image. The destination bucket
+-- must exist and have an access control list (ACL) attached that specifies
+-- the Region-specific canonical account ID for the @Grantee@. For more
+-- information about the ACL to your S3 bucket, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites Prerequisites>
+-- in the VM Import\/Export User Guide.
+--
+-- 's3Prefix', 'exportToS3TaskSpecification_s3Prefix' - The image is written to a single object in the Amazon S3 bucket at the
+-- S3 key s3prefix + exportTaskId + \'.\' + diskImageFormat.
+newExportToS3TaskSpecification ::
+  ExportToS3TaskSpecification
+newExportToS3TaskSpecification =
+  ExportToS3TaskSpecification'
+    { containerFormat =
+        Prelude.Nothing,
+      diskImageFormat = Prelude.Nothing,
+      s3Bucket = Prelude.Nothing,
+      s3Prefix = Prelude.Nothing
+    }
+
+-- | The container format used to combine disk images with metadata (such as
+-- OVF). If absent, only the disk image is exported.
+exportToS3TaskSpecification_containerFormat :: Lens.Lens' ExportToS3TaskSpecification (Prelude.Maybe ContainerFormat)
+exportToS3TaskSpecification_containerFormat = Lens.lens (\ExportToS3TaskSpecification' {containerFormat} -> containerFormat) (\s@ExportToS3TaskSpecification' {} a -> s {containerFormat = a} :: ExportToS3TaskSpecification)
+
+-- | The format for the exported image.
+exportToS3TaskSpecification_diskImageFormat :: Lens.Lens' ExportToS3TaskSpecification (Prelude.Maybe DiskImageFormat)
+exportToS3TaskSpecification_diskImageFormat = Lens.lens (\ExportToS3TaskSpecification' {diskImageFormat} -> diskImageFormat) (\s@ExportToS3TaskSpecification' {} a -> s {diskImageFormat = a} :: ExportToS3TaskSpecification)
+
+-- | The Amazon S3 bucket for the destination image. The destination bucket
+-- must exist and have an access control list (ACL) attached that specifies
+-- the Region-specific canonical account ID for the @Grantee@. For more
+-- information about the ACL to your S3 bucket, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites Prerequisites>
+-- in the VM Import\/Export User Guide.
+exportToS3TaskSpecification_s3Bucket :: Lens.Lens' ExportToS3TaskSpecification (Prelude.Maybe Prelude.Text)
+exportToS3TaskSpecification_s3Bucket = Lens.lens (\ExportToS3TaskSpecification' {s3Bucket} -> s3Bucket) (\s@ExportToS3TaskSpecification' {} a -> s {s3Bucket = a} :: ExportToS3TaskSpecification)
+
+-- | The image is written to a single object in the Amazon S3 bucket at the
+-- S3 key s3prefix + exportTaskId + \'.\' + diskImageFormat.
+exportToS3TaskSpecification_s3Prefix :: Lens.Lens' ExportToS3TaskSpecification (Prelude.Maybe Prelude.Text)
+exportToS3TaskSpecification_s3Prefix = Lens.lens (\ExportToS3TaskSpecification' {s3Prefix} -> s3Prefix) (\s@ExportToS3TaskSpecification' {} a -> s {s3Prefix = a} :: ExportToS3TaskSpecification)
+
+instance Prelude.Hashable ExportToS3TaskSpecification where
+  hashWithSalt _salt ExportToS3TaskSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` containerFormat
+      `Prelude.hashWithSalt` diskImageFormat
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Prefix
+
+instance Prelude.NFData ExportToS3TaskSpecification where
+  rnf ExportToS3TaskSpecification' {..} =
+    Prelude.rnf containerFormat
+      `Prelude.seq` Prelude.rnf diskImageFormat
+      `Prelude.seq` Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Prefix
+
+instance Data.ToQuery ExportToS3TaskSpecification where
+  toQuery ExportToS3TaskSpecification' {..} =
+    Prelude.mconcat
+      [ "ContainerFormat" Data.=: containerFormat,
+        "DiskImageFormat" Data.=: diskImageFormat,
+        "S3Bucket" Data.=: s3Bucket,
+        "S3Prefix" Data.=: s3Prefix
+      ]
diff --git a/gen/Amazonka/EC2/Types/FailedCapacityReservationFleetCancellationResult.hs b/gen/Amazonka/EC2/Types/FailedCapacityReservationFleetCancellationResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FailedCapacityReservationFleetCancellationResult.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FailedCapacityReservationFleetCancellationResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FailedCapacityReservationFleetCancellationResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CancelCapacityReservationFleetError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Capacity Reservation Fleet that could not be cancelled.
+--
+-- /See:/ 'newFailedCapacityReservationFleetCancellationResult' smart constructor.
+data FailedCapacityReservationFleetCancellationResult = FailedCapacityReservationFleetCancellationResult'
+  { -- | Information about the Capacity Reservation Fleet cancellation error.
+    cancelCapacityReservationFleetError :: Prelude.Maybe CancelCapacityReservationFleetError,
+    -- | The ID of the Capacity Reservation Fleet that could not be cancelled.
+    capacityReservationFleetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedCapacityReservationFleetCancellationResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cancelCapacityReservationFleetError', 'failedCapacityReservationFleetCancellationResult_cancelCapacityReservationFleetError' - Information about the Capacity Reservation Fleet cancellation error.
+--
+-- 'capacityReservationFleetId', 'failedCapacityReservationFleetCancellationResult_capacityReservationFleetId' - The ID of the Capacity Reservation Fleet that could not be cancelled.
+newFailedCapacityReservationFleetCancellationResult ::
+  FailedCapacityReservationFleetCancellationResult
+newFailedCapacityReservationFleetCancellationResult =
+  FailedCapacityReservationFleetCancellationResult'
+    { cancelCapacityReservationFleetError =
+        Prelude.Nothing,
+      capacityReservationFleetId =
+        Prelude.Nothing
+    }
+
+-- | Information about the Capacity Reservation Fleet cancellation error.
+failedCapacityReservationFleetCancellationResult_cancelCapacityReservationFleetError :: Lens.Lens' FailedCapacityReservationFleetCancellationResult (Prelude.Maybe CancelCapacityReservationFleetError)
+failedCapacityReservationFleetCancellationResult_cancelCapacityReservationFleetError = Lens.lens (\FailedCapacityReservationFleetCancellationResult' {cancelCapacityReservationFleetError} -> cancelCapacityReservationFleetError) (\s@FailedCapacityReservationFleetCancellationResult' {} a -> s {cancelCapacityReservationFleetError = a} :: FailedCapacityReservationFleetCancellationResult)
+
+-- | The ID of the Capacity Reservation Fleet that could not be cancelled.
+failedCapacityReservationFleetCancellationResult_capacityReservationFleetId :: Lens.Lens' FailedCapacityReservationFleetCancellationResult (Prelude.Maybe Prelude.Text)
+failedCapacityReservationFleetCancellationResult_capacityReservationFleetId = Lens.lens (\FailedCapacityReservationFleetCancellationResult' {capacityReservationFleetId} -> capacityReservationFleetId) (\s@FailedCapacityReservationFleetCancellationResult' {} a -> s {capacityReservationFleetId = a} :: FailedCapacityReservationFleetCancellationResult)
+
+instance
+  Data.FromXML
+    FailedCapacityReservationFleetCancellationResult
+  where
+  parseXML x =
+    FailedCapacityReservationFleetCancellationResult'
+      Prelude.<$> (x Data..@? "cancelCapacityReservationFleetError")
+      Prelude.<*> (x Data..@? "capacityReservationFleetId")
+
+instance
+  Prelude.Hashable
+    FailedCapacityReservationFleetCancellationResult
+  where
+  hashWithSalt
+    _salt
+    FailedCapacityReservationFleetCancellationResult' {..} =
+      _salt
+        `Prelude.hashWithSalt` cancelCapacityReservationFleetError
+        `Prelude.hashWithSalt` capacityReservationFleetId
+
+instance
+  Prelude.NFData
+    FailedCapacityReservationFleetCancellationResult
+  where
+  rnf
+    FailedCapacityReservationFleetCancellationResult' {..} =
+      Prelude.rnf cancelCapacityReservationFleetError
+        `Prelude.seq` Prelude.rnf capacityReservationFleetId
diff --git a/gen/Amazonka/EC2/Types/FailedQueuedPurchaseDeletion.hs b/gen/Amazonka/EC2/Types/FailedQueuedPurchaseDeletion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FailedQueuedPurchaseDeletion.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FailedQueuedPurchaseDeletion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FailedQueuedPurchaseDeletion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DeleteQueuedReservedInstancesError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance whose queued purchase was not deleted.
+--
+-- /See:/ 'newFailedQueuedPurchaseDeletion' smart constructor.
+data FailedQueuedPurchaseDeletion = FailedQueuedPurchaseDeletion'
+  { -- | The error.
+    error :: Prelude.Maybe DeleteQueuedReservedInstancesError,
+    -- | The ID of the Reserved Instance.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FailedQueuedPurchaseDeletion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'failedQueuedPurchaseDeletion_error' - The error.
+--
+-- 'reservedInstancesId', 'failedQueuedPurchaseDeletion_reservedInstancesId' - The ID of the Reserved Instance.
+newFailedQueuedPurchaseDeletion ::
+  FailedQueuedPurchaseDeletion
+newFailedQueuedPurchaseDeletion =
+  FailedQueuedPurchaseDeletion'
+    { error =
+        Prelude.Nothing,
+      reservedInstancesId = Prelude.Nothing
+    }
+
+-- | The error.
+failedQueuedPurchaseDeletion_error :: Lens.Lens' FailedQueuedPurchaseDeletion (Prelude.Maybe DeleteQueuedReservedInstancesError)
+failedQueuedPurchaseDeletion_error = Lens.lens (\FailedQueuedPurchaseDeletion' {error} -> error) (\s@FailedQueuedPurchaseDeletion' {} a -> s {error = a} :: FailedQueuedPurchaseDeletion)
+
+-- | The ID of the Reserved Instance.
+failedQueuedPurchaseDeletion_reservedInstancesId :: Lens.Lens' FailedQueuedPurchaseDeletion (Prelude.Maybe Prelude.Text)
+failedQueuedPurchaseDeletion_reservedInstancesId = Lens.lens (\FailedQueuedPurchaseDeletion' {reservedInstancesId} -> reservedInstancesId) (\s@FailedQueuedPurchaseDeletion' {} a -> s {reservedInstancesId = a} :: FailedQueuedPurchaseDeletion)
+
+instance Data.FromXML FailedQueuedPurchaseDeletion where
+  parseXML x =
+    FailedQueuedPurchaseDeletion'
+      Prelude.<$> (x Data..@? "error")
+      Prelude.<*> (x Data..@? "reservedInstancesId")
+
+instance
+  Prelude.Hashable
+    FailedQueuedPurchaseDeletion
+  where
+  hashWithSalt _salt FailedQueuedPurchaseDeletion' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` reservedInstancesId
+
+instance Prelude.NFData FailedQueuedPurchaseDeletion where
+  rnf FailedQueuedPurchaseDeletion' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf reservedInstancesId
diff --git a/gen/Amazonka/EC2/Types/FastLaunchLaunchTemplateSpecificationRequest.hs b/gen/Amazonka/EC2/Types/FastLaunchLaunchTemplateSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastLaunchLaunchTemplateSpecificationRequest.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Request to create a launch template for a fast-launch enabled Windows
+-- AMI.
+--
+-- Note - You can specify either the @LaunchTemplateName@ or the
+-- @LaunchTemplateId@, but not both.
+--
+-- /See:/ 'newFastLaunchLaunchTemplateSpecificationRequest' smart constructor.
+data FastLaunchLaunchTemplateSpecificationRequest = FastLaunchLaunchTemplateSpecificationRequest'
+  { -- | The ID of the launch template to use for faster launching for a Windows
+    -- AMI.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template to use for faster launching for a
+    -- Windows AMI.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the launch template to use for faster launching for a
+    -- Windows AMI.
+    version :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchLaunchTemplateSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'fastLaunchLaunchTemplateSpecificationRequest_launchTemplateId' - The ID of the launch template to use for faster launching for a Windows
+-- AMI.
+--
+-- 'launchTemplateName', 'fastLaunchLaunchTemplateSpecificationRequest_launchTemplateName' - The name of the launch template to use for faster launching for a
+-- Windows AMI.
+--
+-- 'version', 'fastLaunchLaunchTemplateSpecificationRequest_version' - The version of the launch template to use for faster launching for a
+-- Windows AMI.
+newFastLaunchLaunchTemplateSpecificationRequest ::
+  -- | 'version'
+  Prelude.Text ->
+  FastLaunchLaunchTemplateSpecificationRequest
+newFastLaunchLaunchTemplateSpecificationRequest
+  pVersion_ =
+    FastLaunchLaunchTemplateSpecificationRequest'
+      { launchTemplateId =
+          Prelude.Nothing,
+        launchTemplateName =
+          Prelude.Nothing,
+        version = pVersion_
+      }
+
+-- | The ID of the launch template to use for faster launching for a Windows
+-- AMI.
+fastLaunchLaunchTemplateSpecificationRequest_launchTemplateId :: Lens.Lens' FastLaunchLaunchTemplateSpecificationRequest (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecificationRequest_launchTemplateId = Lens.lens (\FastLaunchLaunchTemplateSpecificationRequest' {launchTemplateId} -> launchTemplateId) (\s@FastLaunchLaunchTemplateSpecificationRequest' {} a -> s {launchTemplateId = a} :: FastLaunchLaunchTemplateSpecificationRequest)
+
+-- | The name of the launch template to use for faster launching for a
+-- Windows AMI.
+fastLaunchLaunchTemplateSpecificationRequest_launchTemplateName :: Lens.Lens' FastLaunchLaunchTemplateSpecificationRequest (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecificationRequest_launchTemplateName = Lens.lens (\FastLaunchLaunchTemplateSpecificationRequest' {launchTemplateName} -> launchTemplateName) (\s@FastLaunchLaunchTemplateSpecificationRequest' {} a -> s {launchTemplateName = a} :: FastLaunchLaunchTemplateSpecificationRequest)
+
+-- | The version of the launch template to use for faster launching for a
+-- Windows AMI.
+fastLaunchLaunchTemplateSpecificationRequest_version :: Lens.Lens' FastLaunchLaunchTemplateSpecificationRequest Prelude.Text
+fastLaunchLaunchTemplateSpecificationRequest_version = Lens.lens (\FastLaunchLaunchTemplateSpecificationRequest' {version} -> version) (\s@FastLaunchLaunchTemplateSpecificationRequest' {} a -> s {version = a} :: FastLaunchLaunchTemplateSpecificationRequest)
+
+instance
+  Prelude.Hashable
+    FastLaunchLaunchTemplateSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    FastLaunchLaunchTemplateSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` version
+
+instance
+  Prelude.NFData
+    FastLaunchLaunchTemplateSpecificationRequest
+  where
+  rnf FastLaunchLaunchTemplateSpecificationRequest' {..} =
+    Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf version
+
+instance
+  Data.ToQuery
+    FastLaunchLaunchTemplateSpecificationRequest
+  where
+  toQuery
+    FastLaunchLaunchTemplateSpecificationRequest' {..} =
+      Prelude.mconcat
+        [ "LaunchTemplateId" Data.=: launchTemplateId,
+          "LaunchTemplateName" Data.=: launchTemplateName,
+          "Version" Data.=: version
+        ]
diff --git a/gen/Amazonka/EC2/Types/FastLaunchLaunchTemplateSpecificationResponse.hs b/gen/Amazonka/EC2/Types/FastLaunchLaunchTemplateSpecificationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastLaunchLaunchTemplateSpecificationResponse.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastLaunchLaunchTemplateSpecificationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Identifies the launch template to use for faster launching of the
+-- Windows AMI.
+--
+-- /See:/ 'newFastLaunchLaunchTemplateSpecificationResponse' smart constructor.
+data FastLaunchLaunchTemplateSpecificationResponse = FastLaunchLaunchTemplateSpecificationResponse'
+  { -- | The ID of the launch template for faster launching of the associated
+    -- Windows AMI.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template for faster launching of the associated
+    -- Windows AMI.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The version of the launch template for faster launching of the
+    -- associated Windows AMI.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchLaunchTemplateSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'fastLaunchLaunchTemplateSpecificationResponse_launchTemplateId' - The ID of the launch template for faster launching of the associated
+-- Windows AMI.
+--
+-- 'launchTemplateName', 'fastLaunchLaunchTemplateSpecificationResponse_launchTemplateName' - The name of the launch template for faster launching of the associated
+-- Windows AMI.
+--
+-- 'version', 'fastLaunchLaunchTemplateSpecificationResponse_version' - The version of the launch template for faster launching of the
+-- associated Windows AMI.
+newFastLaunchLaunchTemplateSpecificationResponse ::
+  FastLaunchLaunchTemplateSpecificationResponse
+newFastLaunchLaunchTemplateSpecificationResponse =
+  FastLaunchLaunchTemplateSpecificationResponse'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName =
+        Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The ID of the launch template for faster launching of the associated
+-- Windows AMI.
+fastLaunchLaunchTemplateSpecificationResponse_launchTemplateId :: Lens.Lens' FastLaunchLaunchTemplateSpecificationResponse (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecificationResponse_launchTemplateId = Lens.lens (\FastLaunchLaunchTemplateSpecificationResponse' {launchTemplateId} -> launchTemplateId) (\s@FastLaunchLaunchTemplateSpecificationResponse' {} a -> s {launchTemplateId = a} :: FastLaunchLaunchTemplateSpecificationResponse)
+
+-- | The name of the launch template for faster launching of the associated
+-- Windows AMI.
+fastLaunchLaunchTemplateSpecificationResponse_launchTemplateName :: Lens.Lens' FastLaunchLaunchTemplateSpecificationResponse (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecificationResponse_launchTemplateName = Lens.lens (\FastLaunchLaunchTemplateSpecificationResponse' {launchTemplateName} -> launchTemplateName) (\s@FastLaunchLaunchTemplateSpecificationResponse' {} a -> s {launchTemplateName = a} :: FastLaunchLaunchTemplateSpecificationResponse)
+
+-- | The version of the launch template for faster launching of the
+-- associated Windows AMI.
+fastLaunchLaunchTemplateSpecificationResponse_version :: Lens.Lens' FastLaunchLaunchTemplateSpecificationResponse (Prelude.Maybe Prelude.Text)
+fastLaunchLaunchTemplateSpecificationResponse_version = Lens.lens (\FastLaunchLaunchTemplateSpecificationResponse' {version} -> version) (\s@FastLaunchLaunchTemplateSpecificationResponse' {} a -> s {version = a} :: FastLaunchLaunchTemplateSpecificationResponse)
+
+instance
+  Data.FromXML
+    FastLaunchLaunchTemplateSpecificationResponse
+  where
+  parseXML x =
+    FastLaunchLaunchTemplateSpecificationResponse'
+      Prelude.<$> (x Data..@? "launchTemplateId")
+      Prelude.<*> (x Data..@? "launchTemplateName")
+      Prelude.<*> (x Data..@? "version")
+
+instance
+  Prelude.Hashable
+    FastLaunchLaunchTemplateSpecificationResponse
+  where
+  hashWithSalt
+    _salt
+    FastLaunchLaunchTemplateSpecificationResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` version
+
+instance
+  Prelude.NFData
+    FastLaunchLaunchTemplateSpecificationResponse
+  where
+  rnf
+    FastLaunchLaunchTemplateSpecificationResponse' {..} =
+      Prelude.rnf launchTemplateId
+        `Prelude.seq` Prelude.rnf launchTemplateName
+        `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/EC2/Types/FastLaunchResourceType.hs b/gen/Amazonka/EC2/Types/FastLaunchResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastLaunchResourceType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastLaunchResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastLaunchResourceType
+  ( FastLaunchResourceType
+      ( ..,
+        FastLaunchResourceType_Snapshot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FastLaunchResourceType = FastLaunchResourceType'
+  { fromFastLaunchResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FastLaunchResourceType_Snapshot :: FastLaunchResourceType
+pattern FastLaunchResourceType_Snapshot = FastLaunchResourceType' "snapshot"
+
+{-# COMPLETE
+  FastLaunchResourceType_Snapshot,
+  FastLaunchResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FastLaunchSnapshotConfigurationRequest.hs b/gen/Amazonka/EC2/Types/FastLaunchSnapshotConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastLaunchSnapshotConfigurationRequest.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastLaunchSnapshotConfigurationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastLaunchSnapshotConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration settings for creating and managing pre-provisioned
+-- snapshots for a fast-launch enabled Windows AMI.
+--
+-- /See:/ 'newFastLaunchSnapshotConfigurationRequest' smart constructor.
+data FastLaunchSnapshotConfigurationRequest = FastLaunchSnapshotConfigurationRequest'
+  { -- | The number of pre-provisioned snapshots to keep on hand for a
+    -- fast-launch enabled Windows AMI.
+    targetResourceCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchSnapshotConfigurationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'targetResourceCount', 'fastLaunchSnapshotConfigurationRequest_targetResourceCount' - The number of pre-provisioned snapshots to keep on hand for a
+-- fast-launch enabled Windows AMI.
+newFastLaunchSnapshotConfigurationRequest ::
+  FastLaunchSnapshotConfigurationRequest
+newFastLaunchSnapshotConfigurationRequest =
+  FastLaunchSnapshotConfigurationRequest'
+    { targetResourceCount =
+        Prelude.Nothing
+    }
+
+-- | The number of pre-provisioned snapshots to keep on hand for a
+-- fast-launch enabled Windows AMI.
+fastLaunchSnapshotConfigurationRequest_targetResourceCount :: Lens.Lens' FastLaunchSnapshotConfigurationRequest (Prelude.Maybe Prelude.Int)
+fastLaunchSnapshotConfigurationRequest_targetResourceCount = Lens.lens (\FastLaunchSnapshotConfigurationRequest' {targetResourceCount} -> targetResourceCount) (\s@FastLaunchSnapshotConfigurationRequest' {} a -> s {targetResourceCount = a} :: FastLaunchSnapshotConfigurationRequest)
+
+instance
+  Prelude.Hashable
+    FastLaunchSnapshotConfigurationRequest
+  where
+  hashWithSalt
+    _salt
+    FastLaunchSnapshotConfigurationRequest' {..} =
+      _salt `Prelude.hashWithSalt` targetResourceCount
+
+instance
+  Prelude.NFData
+    FastLaunchSnapshotConfigurationRequest
+  where
+  rnf FastLaunchSnapshotConfigurationRequest' {..} =
+    Prelude.rnf targetResourceCount
+
+instance
+  Data.ToQuery
+    FastLaunchSnapshotConfigurationRequest
+  where
+  toQuery FastLaunchSnapshotConfigurationRequest' {..} =
+    Prelude.mconcat
+      ["TargetResourceCount" Data.=: targetResourceCount]
diff --git a/gen/Amazonka/EC2/Types/FastLaunchSnapshotConfigurationResponse.hs b/gen/Amazonka/EC2/Types/FastLaunchSnapshotConfigurationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastLaunchSnapshotConfigurationResponse.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastLaunchSnapshotConfigurationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastLaunchSnapshotConfigurationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Configuration settings for creating and managing pre-provisioned
+-- snapshots for a fast-launch enabled Windows AMI.
+--
+-- /See:/ 'newFastLaunchSnapshotConfigurationResponse' smart constructor.
+data FastLaunchSnapshotConfigurationResponse = FastLaunchSnapshotConfigurationResponse'
+  { -- | The number of pre-provisioned snapshots requested to keep on hand for a
+    -- fast-launch enabled Windows AMI.
+    targetResourceCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FastLaunchSnapshotConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'targetResourceCount', 'fastLaunchSnapshotConfigurationResponse_targetResourceCount' - The number of pre-provisioned snapshots requested to keep on hand for a
+-- fast-launch enabled Windows AMI.
+newFastLaunchSnapshotConfigurationResponse ::
+  FastLaunchSnapshotConfigurationResponse
+newFastLaunchSnapshotConfigurationResponse =
+  FastLaunchSnapshotConfigurationResponse'
+    { targetResourceCount =
+        Prelude.Nothing
+    }
+
+-- | The number of pre-provisioned snapshots requested to keep on hand for a
+-- fast-launch enabled Windows AMI.
+fastLaunchSnapshotConfigurationResponse_targetResourceCount :: Lens.Lens' FastLaunchSnapshotConfigurationResponse (Prelude.Maybe Prelude.Int)
+fastLaunchSnapshotConfigurationResponse_targetResourceCount = Lens.lens (\FastLaunchSnapshotConfigurationResponse' {targetResourceCount} -> targetResourceCount) (\s@FastLaunchSnapshotConfigurationResponse' {} a -> s {targetResourceCount = a} :: FastLaunchSnapshotConfigurationResponse)
+
+instance
+  Data.FromXML
+    FastLaunchSnapshotConfigurationResponse
+  where
+  parseXML x =
+    FastLaunchSnapshotConfigurationResponse'
+      Prelude.<$> (x Data..@? "targetResourceCount")
+
+instance
+  Prelude.Hashable
+    FastLaunchSnapshotConfigurationResponse
+  where
+  hashWithSalt
+    _salt
+    FastLaunchSnapshotConfigurationResponse' {..} =
+      _salt `Prelude.hashWithSalt` targetResourceCount
+
+instance
+  Prelude.NFData
+    FastLaunchSnapshotConfigurationResponse
+  where
+  rnf FastLaunchSnapshotConfigurationResponse' {..} =
+    Prelude.rnf targetResourceCount
diff --git a/gen/Amazonka/EC2/Types/FastLaunchStateCode.hs b/gen/Amazonka/EC2/Types/FastLaunchStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastLaunchStateCode.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastLaunchStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastLaunchStateCode
+  ( FastLaunchStateCode
+      ( ..,
+        FastLaunchStateCode_Disabling,
+        FastLaunchStateCode_Disabling_failed,
+        FastLaunchStateCode_Enabled,
+        FastLaunchStateCode_Enabled_failed,
+        FastLaunchStateCode_Enabling,
+        FastLaunchStateCode_Enabling_failed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FastLaunchStateCode = FastLaunchStateCode'
+  { fromFastLaunchStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FastLaunchStateCode_Disabling :: FastLaunchStateCode
+pattern FastLaunchStateCode_Disabling = FastLaunchStateCode' "disabling"
+
+pattern FastLaunchStateCode_Disabling_failed :: FastLaunchStateCode
+pattern FastLaunchStateCode_Disabling_failed = FastLaunchStateCode' "disabling-failed"
+
+pattern FastLaunchStateCode_Enabled :: FastLaunchStateCode
+pattern FastLaunchStateCode_Enabled = FastLaunchStateCode' "enabled"
+
+pattern FastLaunchStateCode_Enabled_failed :: FastLaunchStateCode
+pattern FastLaunchStateCode_Enabled_failed = FastLaunchStateCode' "enabled-failed"
+
+pattern FastLaunchStateCode_Enabling :: FastLaunchStateCode
+pattern FastLaunchStateCode_Enabling = FastLaunchStateCode' "enabling"
+
+pattern FastLaunchStateCode_Enabling_failed :: FastLaunchStateCode
+pattern FastLaunchStateCode_Enabling_failed = FastLaunchStateCode' "enabling-failed"
+
+{-# COMPLETE
+  FastLaunchStateCode_Disabling,
+  FastLaunchStateCode_Disabling_failed,
+  FastLaunchStateCode_Enabled,
+  FastLaunchStateCode_Enabled_failed,
+  FastLaunchStateCode_Enabling,
+  FastLaunchStateCode_Enabling_failed,
+  FastLaunchStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FastSnapshotRestoreStateCode.hs b/gen/Amazonka/EC2/Types/FastSnapshotRestoreStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FastSnapshotRestoreStateCode.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FastSnapshotRestoreStateCode
+  ( FastSnapshotRestoreStateCode
+      ( ..,
+        FastSnapshotRestoreStateCode_Disabled,
+        FastSnapshotRestoreStateCode_Disabling,
+        FastSnapshotRestoreStateCode_Enabled,
+        FastSnapshotRestoreStateCode_Enabling,
+        FastSnapshotRestoreStateCode_Optimizing
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FastSnapshotRestoreStateCode = FastSnapshotRestoreStateCode'
+  { fromFastSnapshotRestoreStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FastSnapshotRestoreStateCode_Disabled :: FastSnapshotRestoreStateCode
+pattern FastSnapshotRestoreStateCode_Disabled = FastSnapshotRestoreStateCode' "disabled"
+
+pattern FastSnapshotRestoreStateCode_Disabling :: FastSnapshotRestoreStateCode
+pattern FastSnapshotRestoreStateCode_Disabling = FastSnapshotRestoreStateCode' "disabling"
+
+pattern FastSnapshotRestoreStateCode_Enabled :: FastSnapshotRestoreStateCode
+pattern FastSnapshotRestoreStateCode_Enabled = FastSnapshotRestoreStateCode' "enabled"
+
+pattern FastSnapshotRestoreStateCode_Enabling :: FastSnapshotRestoreStateCode
+pattern FastSnapshotRestoreStateCode_Enabling = FastSnapshotRestoreStateCode' "enabling"
+
+pattern FastSnapshotRestoreStateCode_Optimizing :: FastSnapshotRestoreStateCode
+pattern FastSnapshotRestoreStateCode_Optimizing = FastSnapshotRestoreStateCode' "optimizing"
+
+{-# COMPLETE
+  FastSnapshotRestoreStateCode_Disabled,
+  FastSnapshotRestoreStateCode_Disabling,
+  FastSnapshotRestoreStateCode_Enabled,
+  FastSnapshotRestoreStateCode_Enabling,
+  FastSnapshotRestoreStateCode_Optimizing,
+  FastSnapshotRestoreStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FederatedAuthentication.hs b/gen/Amazonka/EC2/Types/FederatedAuthentication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FederatedAuthentication.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FederatedAuthentication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FederatedAuthentication where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the IAM SAML identity providers used for federated
+-- authentication.
+--
+-- /See:/ 'newFederatedAuthentication' smart constructor.
+data FederatedAuthentication = FederatedAuthentication'
+  { -- | The Amazon Resource Name (ARN) of the IAM SAML identity provider.
+    samlProviderArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
+    -- self-service portal.
+    selfServiceSamlProviderArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FederatedAuthentication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'samlProviderArn', 'federatedAuthentication_samlProviderArn' - The Amazon Resource Name (ARN) of the IAM SAML identity provider.
+--
+-- 'selfServiceSamlProviderArn', 'federatedAuthentication_selfServiceSamlProviderArn' - The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
+-- self-service portal.
+newFederatedAuthentication ::
+  FederatedAuthentication
+newFederatedAuthentication =
+  FederatedAuthentication'
+    { samlProviderArn =
+        Prelude.Nothing,
+      selfServiceSamlProviderArn = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the IAM SAML identity provider.
+federatedAuthentication_samlProviderArn :: Lens.Lens' FederatedAuthentication (Prelude.Maybe Prelude.Text)
+federatedAuthentication_samlProviderArn = Lens.lens (\FederatedAuthentication' {samlProviderArn} -> samlProviderArn) (\s@FederatedAuthentication' {} a -> s {samlProviderArn = a} :: FederatedAuthentication)
+
+-- | The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
+-- self-service portal.
+federatedAuthentication_selfServiceSamlProviderArn :: Lens.Lens' FederatedAuthentication (Prelude.Maybe Prelude.Text)
+federatedAuthentication_selfServiceSamlProviderArn = Lens.lens (\FederatedAuthentication' {selfServiceSamlProviderArn} -> selfServiceSamlProviderArn) (\s@FederatedAuthentication' {} a -> s {selfServiceSamlProviderArn = a} :: FederatedAuthentication)
+
+instance Data.FromXML FederatedAuthentication where
+  parseXML x =
+    FederatedAuthentication'
+      Prelude.<$> (x Data..@? "samlProviderArn")
+      Prelude.<*> (x Data..@? "selfServiceSamlProviderArn")
+
+instance Prelude.Hashable FederatedAuthentication where
+  hashWithSalt _salt FederatedAuthentication' {..} =
+    _salt
+      `Prelude.hashWithSalt` samlProviderArn
+      `Prelude.hashWithSalt` selfServiceSamlProviderArn
+
+instance Prelude.NFData FederatedAuthentication where
+  rnf FederatedAuthentication' {..} =
+    Prelude.rnf samlProviderArn
+      `Prelude.seq` Prelude.rnf selfServiceSamlProviderArn
diff --git a/gen/Amazonka/EC2/Types/FederatedAuthenticationRequest.hs b/gen/Amazonka/EC2/Types/FederatedAuthenticationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FederatedAuthenticationRequest.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FederatedAuthenticationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FederatedAuthenticationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The IAM SAML identity provider used for federated authentication.
+--
+-- /See:/ 'newFederatedAuthenticationRequest' smart constructor.
+data FederatedAuthenticationRequest = FederatedAuthenticationRequest'
+  { -- | The Amazon Resource Name (ARN) of the IAM SAML identity provider.
+    sAMLProviderArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
+    -- self-service portal.
+    selfServiceSAMLProviderArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FederatedAuthenticationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sAMLProviderArn', 'federatedAuthenticationRequest_sAMLProviderArn' - The Amazon Resource Name (ARN) of the IAM SAML identity provider.
+--
+-- 'selfServiceSAMLProviderArn', 'federatedAuthenticationRequest_selfServiceSAMLProviderArn' - The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
+-- self-service portal.
+newFederatedAuthenticationRequest ::
+  FederatedAuthenticationRequest
+newFederatedAuthenticationRequest =
+  FederatedAuthenticationRequest'
+    { sAMLProviderArn =
+        Prelude.Nothing,
+      selfServiceSAMLProviderArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the IAM SAML identity provider.
+federatedAuthenticationRequest_sAMLProviderArn :: Lens.Lens' FederatedAuthenticationRequest (Prelude.Maybe Prelude.Text)
+federatedAuthenticationRequest_sAMLProviderArn = Lens.lens (\FederatedAuthenticationRequest' {sAMLProviderArn} -> sAMLProviderArn) (\s@FederatedAuthenticationRequest' {} a -> s {sAMLProviderArn = a} :: FederatedAuthenticationRequest)
+
+-- | The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
+-- self-service portal.
+federatedAuthenticationRequest_selfServiceSAMLProviderArn :: Lens.Lens' FederatedAuthenticationRequest (Prelude.Maybe Prelude.Text)
+federatedAuthenticationRequest_selfServiceSAMLProviderArn = Lens.lens (\FederatedAuthenticationRequest' {selfServiceSAMLProviderArn} -> selfServiceSAMLProviderArn) (\s@FederatedAuthenticationRequest' {} a -> s {selfServiceSAMLProviderArn = a} :: FederatedAuthenticationRequest)
+
+instance
+  Prelude.Hashable
+    FederatedAuthenticationRequest
+  where
+  hashWithSalt
+    _salt
+    FederatedAuthenticationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` sAMLProviderArn
+        `Prelude.hashWithSalt` selfServiceSAMLProviderArn
+
+instance
+  Prelude.NFData
+    FederatedAuthenticationRequest
+  where
+  rnf FederatedAuthenticationRequest' {..} =
+    Prelude.rnf sAMLProviderArn
+      `Prelude.seq` Prelude.rnf selfServiceSAMLProviderArn
+
+instance Data.ToQuery FederatedAuthenticationRequest where
+  toQuery FederatedAuthenticationRequest' {..} =
+    Prelude.mconcat
+      [ "SAMLProviderArn" Data.=: sAMLProviderArn,
+        "SelfServiceSAMLProviderArn"
+          Data.=: selfServiceSAMLProviderArn
+      ]
diff --git a/gen/Amazonka/EC2/Types/Filter.hs b/gen/Amazonka/EC2/Types/Filter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Filter.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Filter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Filter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | A filter name and value pair that is used to return a more specific list
+-- of results from a describe operation. Filters can be used to match a set
+-- of resources by specific criteria, such as tags, attributes, or IDs.
+--
+-- If you specify multiple filters, the filters are joined with an @AND@,
+-- and the request returns only results that match all of the specified
+-- filters.
+--
+-- /See:/ 'newFilter' smart constructor.
+data Filter = Filter'
+  { -- | The filter values. Filter values are case-sensitive. If you specify
+    -- multiple values for a filter, the values are joined with an @OR@, and
+    -- the request returns all results that match any of the specified values.
+    values :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the filter. Filter names are case-sensitive.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Filter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'values', 'filter_values' - The filter values. Filter values are case-sensitive. If you specify
+-- multiple values for a filter, the values are joined with an @OR@, and
+-- the request returns all results that match any of the specified values.
+--
+-- 'name', 'filter_name' - The name of the filter. Filter names are case-sensitive.
+newFilter ::
+  -- | 'name'
+  Prelude.Text ->
+  Filter
+newFilter pName_ =
+  Filter' {values = Prelude.Nothing, name = pName_}
+
+-- | The filter values. Filter values are case-sensitive. If you specify
+-- multiple values for a filter, the values are joined with an @OR@, and
+-- the request returns all results that match any of the specified values.
+filter_values :: Lens.Lens' Filter (Prelude.Maybe [Prelude.Text])
+filter_values = Lens.lens (\Filter' {values} -> values) (\s@Filter' {} a -> s {values = a} :: Filter) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the filter. Filter names are case-sensitive.
+filter_name :: Lens.Lens' Filter Prelude.Text
+filter_name = Lens.lens (\Filter' {name} -> name) (\s@Filter' {} a -> s {name = a} :: Filter)
+
+instance Prelude.Hashable Filter where
+  hashWithSalt _salt Filter' {..} =
+    _salt
+      `Prelude.hashWithSalt` values
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Filter where
+  rnf Filter' {..} =
+    Prelude.rnf values `Prelude.seq` Prelude.rnf name
+
+instance Data.ToQuery Filter where
+  toQuery Filter' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          (Data.toQueryList "Value" Prelude.<$> values),
+        "Name" Data.=: name
+      ]
diff --git a/gen/Amazonka/EC2/Types/FindingsFound.hs b/gen/Amazonka/EC2/Types/FindingsFound.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FindingsFound.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FindingsFound
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FindingsFound
+  ( FindingsFound
+      ( ..,
+        FindingsFound_False,
+        FindingsFound_True,
+        FindingsFound_Unknown
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FindingsFound = FindingsFound'
+  { fromFindingsFound ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FindingsFound_False :: FindingsFound
+pattern FindingsFound_False = FindingsFound' "false"
+
+pattern FindingsFound_True :: FindingsFound
+pattern FindingsFound_True = FindingsFound' "true"
+
+pattern FindingsFound_Unknown :: FindingsFound
+pattern FindingsFound_Unknown = FindingsFound' "unknown"
+
+{-# COMPLETE
+  FindingsFound_False,
+  FindingsFound_True,
+  FindingsFound_Unknown,
+  FindingsFound'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetActivityStatus.hs b/gen/Amazonka/EC2/Types/FleetActivityStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetActivityStatus.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetActivityStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetActivityStatus
+  ( FleetActivityStatus
+      ( ..,
+        FleetActivityStatus_Error,
+        FleetActivityStatus_Fulfilled,
+        FleetActivityStatus_Pending_fulfillment,
+        FleetActivityStatus_Pending_termination
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetActivityStatus = FleetActivityStatus'
+  { fromFleetActivityStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetActivityStatus_Error :: FleetActivityStatus
+pattern FleetActivityStatus_Error = FleetActivityStatus' "error"
+
+pattern FleetActivityStatus_Fulfilled :: FleetActivityStatus
+pattern FleetActivityStatus_Fulfilled = FleetActivityStatus' "fulfilled"
+
+pattern FleetActivityStatus_Pending_fulfillment :: FleetActivityStatus
+pattern FleetActivityStatus_Pending_fulfillment = FleetActivityStatus' "pending_fulfillment"
+
+pattern FleetActivityStatus_Pending_termination :: FleetActivityStatus
+pattern FleetActivityStatus_Pending_termination = FleetActivityStatus' "pending_termination"
+
+{-# COMPLETE
+  FleetActivityStatus_Error,
+  FleetActivityStatus_Fulfilled,
+  FleetActivityStatus_Pending_fulfillment,
+  FleetActivityStatus_Pending_termination,
+  FleetActivityStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetCapacityReservation.hs b/gen/Amazonka/EC2/Types/FleetCapacityReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetCapacityReservation.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetCapacityReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetCapacityReservation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationInstancePlatform
+import Amazonka.EC2.Types.InstanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a Capacity Reservation in a Capacity Reservation
+-- Fleet.
+--
+-- /See:/ 'newFleetCapacityReservation' smart constructor.
+data FleetCapacityReservation = FleetCapacityReservation'
+  { -- | The Availability Zone in which the Capacity Reservation reserves
+    -- capacity.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Availability Zone in which the Capacity Reservation
+    -- reserves capacity.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The date and time at which the Capacity Reservation was created.
+    createDate :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether the Capacity Reservation reserves capacity for
+    -- EBS-optimized instance types.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The number of capacity units fulfilled by the Capacity Reservation. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+    -- in the Amazon EC2 User Guide.
+    fulfilledCapacity :: Prelude.Maybe Prelude.Double,
+    -- | The type of operating system for which the Capacity Reservation reserves
+    -- capacity.
+    instancePlatform :: Prelude.Maybe CapacityReservationInstancePlatform,
+    -- | The instance type for which the Capacity Reservation reserves capacity.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The priority of the instance type in the Capacity Reservation Fleet. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority Instance type priority>
+    -- in the Amazon EC2 User Guide.
+    priority :: Prelude.Maybe Prelude.Natural,
+    -- | The total number of instances for which the Capacity Reservation
+    -- reserves capacity.
+    totalInstanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The weight of the instance type in the Capacity Reservation Fleet. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight Instance type weight>
+    -- in the Amazon EC2 User Guide.
+    weight :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetCapacityReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'fleetCapacityReservation_availabilityZone' - The Availability Zone in which the Capacity Reservation reserves
+-- capacity.
+--
+-- 'availabilityZoneId', 'fleetCapacityReservation_availabilityZoneId' - The ID of the Availability Zone in which the Capacity Reservation
+-- reserves capacity.
+--
+-- 'capacityReservationId', 'fleetCapacityReservation_capacityReservationId' - The ID of the Capacity Reservation.
+--
+-- 'createDate', 'fleetCapacityReservation_createDate' - The date and time at which the Capacity Reservation was created.
+--
+-- 'ebsOptimized', 'fleetCapacityReservation_ebsOptimized' - Indicates whether the Capacity Reservation reserves capacity for
+-- EBS-optimized instance types.
+--
+-- 'fulfilledCapacity', 'fleetCapacityReservation_fulfilledCapacity' - The number of capacity units fulfilled by the Capacity Reservation. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+--
+-- 'instancePlatform', 'fleetCapacityReservation_instancePlatform' - The type of operating system for which the Capacity Reservation reserves
+-- capacity.
+--
+-- 'instanceType', 'fleetCapacityReservation_instanceType' - The instance type for which the Capacity Reservation reserves capacity.
+--
+-- 'priority', 'fleetCapacityReservation_priority' - The priority of the instance type in the Capacity Reservation Fleet. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority Instance type priority>
+-- in the Amazon EC2 User Guide.
+--
+-- 'totalInstanceCount', 'fleetCapacityReservation_totalInstanceCount' - The total number of instances for which the Capacity Reservation
+-- reserves capacity.
+--
+-- 'weight', 'fleetCapacityReservation_weight' - The weight of the instance type in the Capacity Reservation Fleet. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight Instance type weight>
+-- in the Amazon EC2 User Guide.
+newFleetCapacityReservation ::
+  FleetCapacityReservation
+newFleetCapacityReservation =
+  FleetCapacityReservation'
+    { availabilityZone =
+        Prelude.Nothing,
+      availabilityZoneId = Prelude.Nothing,
+      capacityReservationId = Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      fulfilledCapacity = Prelude.Nothing,
+      instancePlatform = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      priority = Prelude.Nothing,
+      totalInstanceCount = Prelude.Nothing,
+      weight = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which the Capacity Reservation reserves
+-- capacity.
+fleetCapacityReservation_availabilityZone :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Text)
+fleetCapacityReservation_availabilityZone = Lens.lens (\FleetCapacityReservation' {availabilityZone} -> availabilityZone) (\s@FleetCapacityReservation' {} a -> s {availabilityZone = a} :: FleetCapacityReservation)
+
+-- | The ID of the Availability Zone in which the Capacity Reservation
+-- reserves capacity.
+fleetCapacityReservation_availabilityZoneId :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Text)
+fleetCapacityReservation_availabilityZoneId = Lens.lens (\FleetCapacityReservation' {availabilityZoneId} -> availabilityZoneId) (\s@FleetCapacityReservation' {} a -> s {availabilityZoneId = a} :: FleetCapacityReservation)
+
+-- | The ID of the Capacity Reservation.
+fleetCapacityReservation_capacityReservationId :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Text)
+fleetCapacityReservation_capacityReservationId = Lens.lens (\FleetCapacityReservation' {capacityReservationId} -> capacityReservationId) (\s@FleetCapacityReservation' {} a -> s {capacityReservationId = a} :: FleetCapacityReservation)
+
+-- | The date and time at which the Capacity Reservation was created.
+fleetCapacityReservation_createDate :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.UTCTime)
+fleetCapacityReservation_createDate = Lens.lens (\FleetCapacityReservation' {createDate} -> createDate) (\s@FleetCapacityReservation' {} a -> s {createDate = a} :: FleetCapacityReservation) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether the Capacity Reservation reserves capacity for
+-- EBS-optimized instance types.
+fleetCapacityReservation_ebsOptimized :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Bool)
+fleetCapacityReservation_ebsOptimized = Lens.lens (\FleetCapacityReservation' {ebsOptimized} -> ebsOptimized) (\s@FleetCapacityReservation' {} a -> s {ebsOptimized = a} :: FleetCapacityReservation)
+
+-- | The number of capacity units fulfilled by the Capacity Reservation. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+fleetCapacityReservation_fulfilledCapacity :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Double)
+fleetCapacityReservation_fulfilledCapacity = Lens.lens (\FleetCapacityReservation' {fulfilledCapacity} -> fulfilledCapacity) (\s@FleetCapacityReservation' {} a -> s {fulfilledCapacity = a} :: FleetCapacityReservation)
+
+-- | The type of operating system for which the Capacity Reservation reserves
+-- capacity.
+fleetCapacityReservation_instancePlatform :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe CapacityReservationInstancePlatform)
+fleetCapacityReservation_instancePlatform = Lens.lens (\FleetCapacityReservation' {instancePlatform} -> instancePlatform) (\s@FleetCapacityReservation' {} a -> s {instancePlatform = a} :: FleetCapacityReservation)
+
+-- | The instance type for which the Capacity Reservation reserves capacity.
+fleetCapacityReservation_instanceType :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe InstanceType)
+fleetCapacityReservation_instanceType = Lens.lens (\FleetCapacityReservation' {instanceType} -> instanceType) (\s@FleetCapacityReservation' {} a -> s {instanceType = a} :: FleetCapacityReservation)
+
+-- | The priority of the instance type in the Capacity Reservation Fleet. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority Instance type priority>
+-- in the Amazon EC2 User Guide.
+fleetCapacityReservation_priority :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Natural)
+fleetCapacityReservation_priority = Lens.lens (\FleetCapacityReservation' {priority} -> priority) (\s@FleetCapacityReservation' {} a -> s {priority = a} :: FleetCapacityReservation)
+
+-- | The total number of instances for which the Capacity Reservation
+-- reserves capacity.
+fleetCapacityReservation_totalInstanceCount :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Int)
+fleetCapacityReservation_totalInstanceCount = Lens.lens (\FleetCapacityReservation' {totalInstanceCount} -> totalInstanceCount) (\s@FleetCapacityReservation' {} a -> s {totalInstanceCount = a} :: FleetCapacityReservation)
+
+-- | The weight of the instance type in the Capacity Reservation Fleet. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight Instance type weight>
+-- in the Amazon EC2 User Guide.
+fleetCapacityReservation_weight :: Lens.Lens' FleetCapacityReservation (Prelude.Maybe Prelude.Double)
+fleetCapacityReservation_weight = Lens.lens (\FleetCapacityReservation' {weight} -> weight) (\s@FleetCapacityReservation' {} a -> s {weight = a} :: FleetCapacityReservation)
+
+instance Data.FromXML FleetCapacityReservation where
+  parseXML x =
+    FleetCapacityReservation'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "availabilityZoneId")
+      Prelude.<*> (x Data..@? "capacityReservationId")
+      Prelude.<*> (x Data..@? "createDate")
+      Prelude.<*> (x Data..@? "ebsOptimized")
+      Prelude.<*> (x Data..@? "fulfilledCapacity")
+      Prelude.<*> (x Data..@? "instancePlatform")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "priority")
+      Prelude.<*> (x Data..@? "totalInstanceCount")
+      Prelude.<*> (x Data..@? "weight")
+
+instance Prelude.Hashable FleetCapacityReservation where
+  hashWithSalt _salt FleetCapacityReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` capacityReservationId
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` fulfilledCapacity
+      `Prelude.hashWithSalt` instancePlatform
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` priority
+      `Prelude.hashWithSalt` totalInstanceCount
+      `Prelude.hashWithSalt` weight
+
+instance Prelude.NFData FleetCapacityReservation where
+  rnf FleetCapacityReservation' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf capacityReservationId
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf fulfilledCapacity
+      `Prelude.seq` Prelude.rnf instancePlatform
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf totalInstanceCount
+      `Prelude.seq` Prelude.rnf weight
diff --git a/gen/Amazonka/EC2/Types/FleetCapacityReservationTenancy.hs b/gen/Amazonka/EC2/Types/FleetCapacityReservationTenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetCapacityReservationTenancy.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetCapacityReservationTenancy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetCapacityReservationTenancy
+  ( FleetCapacityReservationTenancy
+      ( ..,
+        FleetCapacityReservationTenancy_Default
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetCapacityReservationTenancy = FleetCapacityReservationTenancy'
+  { fromFleetCapacityReservationTenancy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetCapacityReservationTenancy_Default :: FleetCapacityReservationTenancy
+pattern FleetCapacityReservationTenancy_Default = FleetCapacityReservationTenancy' "default"
+
+{-# COMPLETE
+  FleetCapacityReservationTenancy_Default,
+  FleetCapacityReservationTenancy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetCapacityReservationUsageStrategy.hs b/gen/Amazonka/EC2/Types/FleetCapacityReservationUsageStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetCapacityReservationUsageStrategy.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetCapacityReservationUsageStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetCapacityReservationUsageStrategy
+  ( FleetCapacityReservationUsageStrategy
+      ( ..,
+        FleetCapacityReservationUsageStrategy_Use_capacity_reservations_first
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetCapacityReservationUsageStrategy = FleetCapacityReservationUsageStrategy'
+  { fromFleetCapacityReservationUsageStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetCapacityReservationUsageStrategy_Use_capacity_reservations_first :: FleetCapacityReservationUsageStrategy
+pattern FleetCapacityReservationUsageStrategy_Use_capacity_reservations_first = FleetCapacityReservationUsageStrategy' "use-capacity-reservations-first"
+
+{-# COMPLETE
+  FleetCapacityReservationUsageStrategy_Use_capacity_reservations_first,
+  FleetCapacityReservationUsageStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetData.hs b/gen/Amazonka/EC2/Types/FleetData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetData.hs
@@ -0,0 +1,443 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DescribeFleetError
+import Amazonka.EC2.Types.DescribeFleetsInstances
+import Amazonka.EC2.Types.FleetActivityStatus
+import Amazonka.EC2.Types.FleetExcessCapacityTerminationPolicy
+import Amazonka.EC2.Types.FleetLaunchTemplateConfig
+import Amazonka.EC2.Types.FleetStateCode
+import Amazonka.EC2.Types.FleetType
+import Amazonka.EC2.Types.OnDemandOptions
+import Amazonka.EC2.Types.SpotOptions
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TargetCapacitySpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EC2 Fleet.
+--
+-- /See:/ 'newFleetData' smart constructor.
+data FleetData = FleetData'
+  { -- | The progress of the EC2 Fleet. If there is an error, the status is
+    -- @error@. After all requests are placed, the status is
+    -- @pending_fulfillment@. If the size of the EC2 Fleet is equal to or
+    -- greater than its target capacity, the status is @fulfilled@. If the size
+    -- of the EC2 Fleet is decreased, the status is @pending_termination@ while
+    -- instances are terminating.
+    activityStatus :: Prelude.Maybe FleetActivityStatus,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+    --
+    -- Constraints: Maximum 64 ASCII characters
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Reserved.
+    context :: Prelude.Maybe Prelude.Text,
+    -- | The creation date and time of the EC2 Fleet.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | Information about the instances that could not be launched by the fleet.
+    -- Valid only when __Type__ is set to @instant@.
+    errors :: Prelude.Maybe [DescribeFleetError],
+    -- | Indicates whether running instances should be terminated if the target
+    -- capacity of the EC2 Fleet is decreased below the current size of the EC2
+    -- Fleet.
+    excessCapacityTerminationPolicy :: Prelude.Maybe FleetExcessCapacityTerminationPolicy,
+    -- | The ID of the EC2 Fleet.
+    fleetId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the EC2 Fleet.
+    fleetState :: Prelude.Maybe FleetStateCode,
+    -- | The number of units fulfilled by this request compared to the set target
+    -- capacity.
+    fulfilledCapacity :: Prelude.Maybe Prelude.Double,
+    -- | The number of units fulfilled by this request compared to the set target
+    -- On-Demand capacity.
+    fulfilledOnDemandCapacity :: Prelude.Maybe Prelude.Double,
+    -- | Information about the instances that were launched by the fleet. Valid
+    -- only when __Type__ is set to @instant@.
+    instances :: Prelude.Maybe [DescribeFleetsInstances],
+    -- | The launch template and overrides.
+    launchTemplateConfigs :: Prelude.Maybe [FleetLaunchTemplateConfig],
+    -- | The allocation strategy of On-Demand Instances in an EC2 Fleet.
+    onDemandOptions :: Prelude.Maybe OnDemandOptions,
+    -- | Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
+    -- Supported only for fleets of type @maintain@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks EC2 Fleet health checks>
+    -- in the /Amazon EC2 User Guide/.
+    replaceUnhealthyInstances :: Prelude.Maybe Prelude.Bool,
+    -- | The configuration of Spot Instances in an EC2 Fleet.
+    spotOptions :: Prelude.Maybe SpotOptions,
+    -- | The tags for an EC2 Fleet resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The number of units to request. You can choose to set the target
+    -- capacity in terms of instances or a performance characteristic that is
+    -- important to your application workload, such as vCPUs, memory, or I\/O.
+    -- If the request type is @maintain@, you can specify a target capacity of
+    -- 0 and add capacity later.
+    targetCapacitySpecification :: Prelude.Maybe TargetCapacitySpecification,
+    -- | Indicates whether running instances should be terminated when the EC2
+    -- Fleet expires.
+    terminateInstancesWithExpiration :: Prelude.Maybe Prelude.Bool,
+    -- | The type of request. Indicates whether the EC2 Fleet only @requests@ the
+    -- target capacity, or also attempts to @maintain@ it. If you request a
+    -- certain target capacity, EC2 Fleet only places the required requests; it
+    -- does not attempt to replenish instances if capacity is diminished, and
+    -- it does not submit requests in alternative capacity pools if capacity is
+    -- unavailable. To maintain a certain target capacity, EC2 Fleet places the
+    -- required requests to meet this target capacity. It also automatically
+    -- replenishes any interrupted Spot Instances. Default: @maintain@.
+    type' :: Prelude.Maybe FleetType,
+    -- | The start date and time of the request, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+    -- the request immediately.
+    validFrom :: Prelude.Maybe Data.ISO8601,
+    -- | The end date and time of the request, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new instance
+    -- requests are placed or able to fulfill the request. The default end date
+    -- is 7 days from the current date.
+    validUntil :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activityStatus', 'fleetData_activityStatus' - The progress of the EC2 Fleet. If there is an error, the status is
+-- @error@. After all requests are placed, the status is
+-- @pending_fulfillment@. If the size of the EC2 Fleet is equal to or
+-- greater than its target capacity, the status is @fulfilled@. If the size
+-- of the EC2 Fleet is decreased, the status is @pending_termination@ while
+-- instances are terminating.
+--
+-- 'clientToken', 'fleetData_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraints: Maximum 64 ASCII characters
+--
+-- 'context', 'fleetData_context' - Reserved.
+--
+-- 'createTime', 'fleetData_createTime' - The creation date and time of the EC2 Fleet.
+--
+-- 'errors', 'fleetData_errors' - Information about the instances that could not be launched by the fleet.
+-- Valid only when __Type__ is set to @instant@.
+--
+-- 'excessCapacityTerminationPolicy', 'fleetData_excessCapacityTerminationPolicy' - Indicates whether running instances should be terminated if the target
+-- capacity of the EC2 Fleet is decreased below the current size of the EC2
+-- Fleet.
+--
+-- 'fleetId', 'fleetData_fleetId' - The ID of the EC2 Fleet.
+--
+-- 'fleetState', 'fleetData_fleetState' - The state of the EC2 Fleet.
+--
+-- 'fulfilledCapacity', 'fleetData_fulfilledCapacity' - The number of units fulfilled by this request compared to the set target
+-- capacity.
+--
+-- 'fulfilledOnDemandCapacity', 'fleetData_fulfilledOnDemandCapacity' - The number of units fulfilled by this request compared to the set target
+-- On-Demand capacity.
+--
+-- 'instances', 'fleetData_instances' - Information about the instances that were launched by the fleet. Valid
+-- only when __Type__ is set to @instant@.
+--
+-- 'launchTemplateConfigs', 'fleetData_launchTemplateConfigs' - The launch template and overrides.
+--
+-- 'onDemandOptions', 'fleetData_onDemandOptions' - The allocation strategy of On-Demand Instances in an EC2 Fleet.
+--
+-- 'replaceUnhealthyInstances', 'fleetData_replaceUnhealthyInstances' - Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
+-- Supported only for fleets of type @maintain@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks EC2 Fleet health checks>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'spotOptions', 'fleetData_spotOptions' - The configuration of Spot Instances in an EC2 Fleet.
+--
+-- 'tags', 'fleetData_tags' - The tags for an EC2 Fleet resource.
+--
+-- 'targetCapacitySpecification', 'fleetData_targetCapacitySpecification' - The number of units to request. You can choose to set the target
+-- capacity in terms of instances or a performance characteristic that is
+-- important to your application workload, such as vCPUs, memory, or I\/O.
+-- If the request type is @maintain@, you can specify a target capacity of
+-- 0 and add capacity later.
+--
+-- 'terminateInstancesWithExpiration', 'fleetData_terminateInstancesWithExpiration' - Indicates whether running instances should be terminated when the EC2
+-- Fleet expires.
+--
+-- 'type'', 'fleetData_type' - The type of request. Indicates whether the EC2 Fleet only @requests@ the
+-- target capacity, or also attempts to @maintain@ it. If you request a
+-- certain target capacity, EC2 Fleet only places the required requests; it
+-- does not attempt to replenish instances if capacity is diminished, and
+-- it does not submit requests in alternative capacity pools if capacity is
+-- unavailable. To maintain a certain target capacity, EC2 Fleet places the
+-- required requests to meet this target capacity. It also automatically
+-- replenishes any interrupted Spot Instances. Default: @maintain@.
+--
+-- 'validFrom', 'fleetData_validFrom' - The start date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+-- the request immediately.
+--
+-- 'validUntil', 'fleetData_validUntil' - The end date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new instance
+-- requests are placed or able to fulfill the request. The default end date
+-- is 7 days from the current date.
+newFleetData ::
+  FleetData
+newFleetData =
+  FleetData'
+    { activityStatus = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      context = Prelude.Nothing,
+      createTime = Prelude.Nothing,
+      errors = Prelude.Nothing,
+      excessCapacityTerminationPolicy = Prelude.Nothing,
+      fleetId = Prelude.Nothing,
+      fleetState = Prelude.Nothing,
+      fulfilledCapacity = Prelude.Nothing,
+      fulfilledOnDemandCapacity = Prelude.Nothing,
+      instances = Prelude.Nothing,
+      launchTemplateConfigs = Prelude.Nothing,
+      onDemandOptions = Prelude.Nothing,
+      replaceUnhealthyInstances = Prelude.Nothing,
+      spotOptions = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      targetCapacitySpecification = Prelude.Nothing,
+      terminateInstancesWithExpiration = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validFrom = Prelude.Nothing,
+      validUntil = Prelude.Nothing
+    }
+
+-- | The progress of the EC2 Fleet. If there is an error, the status is
+-- @error@. After all requests are placed, the status is
+-- @pending_fulfillment@. If the size of the EC2 Fleet is equal to or
+-- greater than its target capacity, the status is @fulfilled@. If the size
+-- of the EC2 Fleet is decreased, the status is @pending_termination@ while
+-- instances are terminating.
+fleetData_activityStatus :: Lens.Lens' FleetData (Prelude.Maybe FleetActivityStatus)
+fleetData_activityStatus = Lens.lens (\FleetData' {activityStatus} -> activityStatus) (\s@FleetData' {} a -> s {activityStatus = a} :: FleetData)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring idempotency>.
+--
+-- Constraints: Maximum 64 ASCII characters
+fleetData_clientToken :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Text)
+fleetData_clientToken = Lens.lens (\FleetData' {clientToken} -> clientToken) (\s@FleetData' {} a -> s {clientToken = a} :: FleetData)
+
+-- | Reserved.
+fleetData_context :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Text)
+fleetData_context = Lens.lens (\FleetData' {context} -> context) (\s@FleetData' {} a -> s {context = a} :: FleetData)
+
+-- | The creation date and time of the EC2 Fleet.
+fleetData_createTime :: Lens.Lens' FleetData (Prelude.Maybe Prelude.UTCTime)
+fleetData_createTime = Lens.lens (\FleetData' {createTime} -> createTime) (\s@FleetData' {} a -> s {createTime = a} :: FleetData) Prelude.. Lens.mapping Data._Time
+
+-- | Information about the instances that could not be launched by the fleet.
+-- Valid only when __Type__ is set to @instant@.
+fleetData_errors :: Lens.Lens' FleetData (Prelude.Maybe [DescribeFleetError])
+fleetData_errors = Lens.lens (\FleetData' {errors} -> errors) (\s@FleetData' {} a -> s {errors = a} :: FleetData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether running instances should be terminated if the target
+-- capacity of the EC2 Fleet is decreased below the current size of the EC2
+-- Fleet.
+fleetData_excessCapacityTerminationPolicy :: Lens.Lens' FleetData (Prelude.Maybe FleetExcessCapacityTerminationPolicy)
+fleetData_excessCapacityTerminationPolicy = Lens.lens (\FleetData' {excessCapacityTerminationPolicy} -> excessCapacityTerminationPolicy) (\s@FleetData' {} a -> s {excessCapacityTerminationPolicy = a} :: FleetData)
+
+-- | The ID of the EC2 Fleet.
+fleetData_fleetId :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Text)
+fleetData_fleetId = Lens.lens (\FleetData' {fleetId} -> fleetId) (\s@FleetData' {} a -> s {fleetId = a} :: FleetData)
+
+-- | The state of the EC2 Fleet.
+fleetData_fleetState :: Lens.Lens' FleetData (Prelude.Maybe FleetStateCode)
+fleetData_fleetState = Lens.lens (\FleetData' {fleetState} -> fleetState) (\s@FleetData' {} a -> s {fleetState = a} :: FleetData)
+
+-- | The number of units fulfilled by this request compared to the set target
+-- capacity.
+fleetData_fulfilledCapacity :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Double)
+fleetData_fulfilledCapacity = Lens.lens (\FleetData' {fulfilledCapacity} -> fulfilledCapacity) (\s@FleetData' {} a -> s {fulfilledCapacity = a} :: FleetData)
+
+-- | The number of units fulfilled by this request compared to the set target
+-- On-Demand capacity.
+fleetData_fulfilledOnDemandCapacity :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Double)
+fleetData_fulfilledOnDemandCapacity = Lens.lens (\FleetData' {fulfilledOnDemandCapacity} -> fulfilledOnDemandCapacity) (\s@FleetData' {} a -> s {fulfilledOnDemandCapacity = a} :: FleetData)
+
+-- | Information about the instances that were launched by the fleet. Valid
+-- only when __Type__ is set to @instant@.
+fleetData_instances :: Lens.Lens' FleetData (Prelude.Maybe [DescribeFleetsInstances])
+fleetData_instances = Lens.lens (\FleetData' {instances} -> instances) (\s@FleetData' {} a -> s {instances = a} :: FleetData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The launch template and overrides.
+fleetData_launchTemplateConfigs :: Lens.Lens' FleetData (Prelude.Maybe [FleetLaunchTemplateConfig])
+fleetData_launchTemplateConfigs = Lens.lens (\FleetData' {launchTemplateConfigs} -> launchTemplateConfigs) (\s@FleetData' {} a -> s {launchTemplateConfigs = a} :: FleetData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The allocation strategy of On-Demand Instances in an EC2 Fleet.
+fleetData_onDemandOptions :: Lens.Lens' FleetData (Prelude.Maybe OnDemandOptions)
+fleetData_onDemandOptions = Lens.lens (\FleetData' {onDemandOptions} -> onDemandOptions) (\s@FleetData' {} a -> s {onDemandOptions = a} :: FleetData)
+
+-- | Indicates whether EC2 Fleet should replace unhealthy Spot Instances.
+-- Supported only for fleets of type @maintain@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks EC2 Fleet health checks>
+-- in the /Amazon EC2 User Guide/.
+fleetData_replaceUnhealthyInstances :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Bool)
+fleetData_replaceUnhealthyInstances = Lens.lens (\FleetData' {replaceUnhealthyInstances} -> replaceUnhealthyInstances) (\s@FleetData' {} a -> s {replaceUnhealthyInstances = a} :: FleetData)
+
+-- | The configuration of Spot Instances in an EC2 Fleet.
+fleetData_spotOptions :: Lens.Lens' FleetData (Prelude.Maybe SpotOptions)
+fleetData_spotOptions = Lens.lens (\FleetData' {spotOptions} -> spotOptions) (\s@FleetData' {} a -> s {spotOptions = a} :: FleetData)
+
+-- | The tags for an EC2 Fleet resource.
+fleetData_tags :: Lens.Lens' FleetData (Prelude.Maybe [Tag])
+fleetData_tags = Lens.lens (\FleetData' {tags} -> tags) (\s@FleetData' {} a -> s {tags = a} :: FleetData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of units to request. You can choose to set the target
+-- capacity in terms of instances or a performance characteristic that is
+-- important to your application workload, such as vCPUs, memory, or I\/O.
+-- If the request type is @maintain@, you can specify a target capacity of
+-- 0 and add capacity later.
+fleetData_targetCapacitySpecification :: Lens.Lens' FleetData (Prelude.Maybe TargetCapacitySpecification)
+fleetData_targetCapacitySpecification = Lens.lens (\FleetData' {targetCapacitySpecification} -> targetCapacitySpecification) (\s@FleetData' {} a -> s {targetCapacitySpecification = a} :: FleetData)
+
+-- | Indicates whether running instances should be terminated when the EC2
+-- Fleet expires.
+fleetData_terminateInstancesWithExpiration :: Lens.Lens' FleetData (Prelude.Maybe Prelude.Bool)
+fleetData_terminateInstancesWithExpiration = Lens.lens (\FleetData' {terminateInstancesWithExpiration} -> terminateInstancesWithExpiration) (\s@FleetData' {} a -> s {terminateInstancesWithExpiration = a} :: FleetData)
+
+-- | The type of request. Indicates whether the EC2 Fleet only @requests@ the
+-- target capacity, or also attempts to @maintain@ it. If you request a
+-- certain target capacity, EC2 Fleet only places the required requests; it
+-- does not attempt to replenish instances if capacity is diminished, and
+-- it does not submit requests in alternative capacity pools if capacity is
+-- unavailable. To maintain a certain target capacity, EC2 Fleet places the
+-- required requests to meet this target capacity. It also automatically
+-- replenishes any interrupted Spot Instances. Default: @maintain@.
+fleetData_type :: Lens.Lens' FleetData (Prelude.Maybe FleetType)
+fleetData_type = Lens.lens (\FleetData' {type'} -> type') (\s@FleetData' {} a -> s {type' = a} :: FleetData)
+
+-- | The start date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+-- the request immediately.
+fleetData_validFrom :: Lens.Lens' FleetData (Prelude.Maybe Prelude.UTCTime)
+fleetData_validFrom = Lens.lens (\FleetData' {validFrom} -> validFrom) (\s@FleetData' {} a -> s {validFrom = a} :: FleetData) Prelude.. Lens.mapping Data._Time
+
+-- | The end date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new instance
+-- requests are placed or able to fulfill the request. The default end date
+-- is 7 days from the current date.
+fleetData_validUntil :: Lens.Lens' FleetData (Prelude.Maybe Prelude.UTCTime)
+fleetData_validUntil = Lens.lens (\FleetData' {validUntil} -> validUntil) (\s@FleetData' {} a -> s {validUntil = a} :: FleetData) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML FleetData where
+  parseXML x =
+    FleetData'
+      Prelude.<$> (x Data..@? "activityStatus")
+      Prelude.<*> (x Data..@? "clientToken")
+      Prelude.<*> (x Data..@? "context")
+      Prelude.<*> (x Data..@? "createTime")
+      Prelude.<*> ( x
+                      Data..@? "errorSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "excessCapacityTerminationPolicy")
+      Prelude.<*> (x Data..@? "fleetId")
+      Prelude.<*> (x Data..@? "fleetState")
+      Prelude.<*> (x Data..@? "fulfilledCapacity")
+      Prelude.<*> (x Data..@? "fulfilledOnDemandCapacity")
+      Prelude.<*> ( x
+                      Data..@? "fleetInstanceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "launchTemplateConfigs"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "onDemandOptions")
+      Prelude.<*> (x Data..@? "replaceUnhealthyInstances")
+      Prelude.<*> (x Data..@? "spotOptions")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "targetCapacitySpecification")
+      Prelude.<*> (x Data..@? "terminateInstancesWithExpiration")
+      Prelude.<*> (x Data..@? "type")
+      Prelude.<*> (x Data..@? "validFrom")
+      Prelude.<*> (x Data..@? "validUntil")
+
+instance Prelude.Hashable FleetData where
+  hashWithSalt _salt FleetData' {..} =
+    _salt
+      `Prelude.hashWithSalt` activityStatus
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` context
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` errors
+      `Prelude.hashWithSalt` excessCapacityTerminationPolicy
+      `Prelude.hashWithSalt` fleetId
+      `Prelude.hashWithSalt` fleetState
+      `Prelude.hashWithSalt` fulfilledCapacity
+      `Prelude.hashWithSalt` fulfilledOnDemandCapacity
+      `Prelude.hashWithSalt` instances
+      `Prelude.hashWithSalt` launchTemplateConfigs
+      `Prelude.hashWithSalt` onDemandOptions
+      `Prelude.hashWithSalt` replaceUnhealthyInstances
+      `Prelude.hashWithSalt` spotOptions
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` targetCapacitySpecification
+      `Prelude.hashWithSalt` terminateInstancesWithExpiration
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validFrom
+      `Prelude.hashWithSalt` validUntil
+
+instance Prelude.NFData FleetData where
+  rnf FleetData' {..} =
+    Prelude.rnf activityStatus
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf context
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf excessCapacityTerminationPolicy
+      `Prelude.seq` Prelude.rnf fleetId
+      `Prelude.seq` Prelude.rnf fleetState
+      `Prelude.seq` Prelude.rnf fulfilledCapacity
+      `Prelude.seq` Prelude.rnf fulfilledOnDemandCapacity
+      `Prelude.seq` Prelude.rnf instances
+      `Prelude.seq` Prelude.rnf launchTemplateConfigs
+      `Prelude.seq` Prelude.rnf onDemandOptions
+      `Prelude.seq` Prelude.rnf replaceUnhealthyInstances
+      `Prelude.seq` Prelude.rnf spotOptions
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf
+        targetCapacitySpecification
+      `Prelude.seq` Prelude.rnf
+        terminateInstancesWithExpiration
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validFrom
+      `Prelude.seq` Prelude.rnf validUntil
diff --git a/gen/Amazonka/EC2/Types/FleetEventType.hs b/gen/Amazonka/EC2/Types/FleetEventType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetEventType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetEventType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetEventType
+  ( FleetEventType
+      ( ..,
+        FleetEventType_Fleet_change,
+        FleetEventType_Instance_change,
+        FleetEventType_Service_error
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetEventType = FleetEventType'
+  { fromFleetEventType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetEventType_Fleet_change :: FleetEventType
+pattern FleetEventType_Fleet_change = FleetEventType' "fleet-change"
+
+pattern FleetEventType_Instance_change :: FleetEventType
+pattern FleetEventType_Instance_change = FleetEventType' "instance-change"
+
+pattern FleetEventType_Service_error :: FleetEventType
+pattern FleetEventType_Service_error = FleetEventType' "service-error"
+
+{-# COMPLETE
+  FleetEventType_Fleet_change,
+  FleetEventType_Instance_change,
+  FleetEventType_Service_error,
+  FleetEventType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetExcessCapacityTerminationPolicy.hs b/gen/Amazonka/EC2/Types/FleetExcessCapacityTerminationPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetExcessCapacityTerminationPolicy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetExcessCapacityTerminationPolicy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetExcessCapacityTerminationPolicy
+  ( FleetExcessCapacityTerminationPolicy
+      ( ..,
+        FleetExcessCapacityTerminationPolicy_No_termination,
+        FleetExcessCapacityTerminationPolicy_Termination
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetExcessCapacityTerminationPolicy = FleetExcessCapacityTerminationPolicy'
+  { fromFleetExcessCapacityTerminationPolicy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetExcessCapacityTerminationPolicy_No_termination :: FleetExcessCapacityTerminationPolicy
+pattern FleetExcessCapacityTerminationPolicy_No_termination = FleetExcessCapacityTerminationPolicy' "no-termination"
+
+pattern FleetExcessCapacityTerminationPolicy_Termination :: FleetExcessCapacityTerminationPolicy
+pattern FleetExcessCapacityTerminationPolicy_Termination = FleetExcessCapacityTerminationPolicy' "termination"
+
+{-# COMPLETE
+  FleetExcessCapacityTerminationPolicy_No_termination,
+  FleetExcessCapacityTerminationPolicy_Termination,
+  FleetExcessCapacityTerminationPolicy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetInstanceMatchCriteria.hs b/gen/Amazonka/EC2/Types/FleetInstanceMatchCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetInstanceMatchCriteria.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetInstanceMatchCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetInstanceMatchCriteria
+  ( FleetInstanceMatchCriteria
+      ( ..,
+        FleetInstanceMatchCriteria_Open
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetInstanceMatchCriteria = FleetInstanceMatchCriteria'
+  { fromFleetInstanceMatchCriteria ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetInstanceMatchCriteria_Open :: FleetInstanceMatchCriteria
+pattern FleetInstanceMatchCriteria_Open = FleetInstanceMatchCriteria' "open"
+
+{-# COMPLETE
+  FleetInstanceMatchCriteria_Open,
+  FleetInstanceMatchCriteria'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetLaunchTemplateConfig.hs b/gen/Amazonka/EC2/Types/FleetLaunchTemplateConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetLaunchTemplateConfig.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetLaunchTemplateConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetLaunchTemplateConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetLaunchTemplateOverrides
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template and overrides.
+--
+-- /See:/ 'newFleetLaunchTemplateConfig' smart constructor.
+data FleetLaunchTemplateConfig = FleetLaunchTemplateConfig'
+  { -- | The launch template.
+    launchTemplateSpecification :: Prelude.Maybe FleetLaunchTemplateSpecification,
+    -- | Any parameters that you specify override the same parameters in the
+    -- launch template.
+    overrides :: Prelude.Maybe [FleetLaunchTemplateOverrides]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetLaunchTemplateConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateSpecification', 'fleetLaunchTemplateConfig_launchTemplateSpecification' - The launch template.
+--
+-- 'overrides', 'fleetLaunchTemplateConfig_overrides' - Any parameters that you specify override the same parameters in the
+-- launch template.
+newFleetLaunchTemplateConfig ::
+  FleetLaunchTemplateConfig
+newFleetLaunchTemplateConfig =
+  FleetLaunchTemplateConfig'
+    { launchTemplateSpecification =
+        Prelude.Nothing,
+      overrides = Prelude.Nothing
+    }
+
+-- | The launch template.
+fleetLaunchTemplateConfig_launchTemplateSpecification :: Lens.Lens' FleetLaunchTemplateConfig (Prelude.Maybe FleetLaunchTemplateSpecification)
+fleetLaunchTemplateConfig_launchTemplateSpecification = Lens.lens (\FleetLaunchTemplateConfig' {launchTemplateSpecification} -> launchTemplateSpecification) (\s@FleetLaunchTemplateConfig' {} a -> s {launchTemplateSpecification = a} :: FleetLaunchTemplateConfig)
+
+-- | Any parameters that you specify override the same parameters in the
+-- launch template.
+fleetLaunchTemplateConfig_overrides :: Lens.Lens' FleetLaunchTemplateConfig (Prelude.Maybe [FleetLaunchTemplateOverrides])
+fleetLaunchTemplateConfig_overrides = Lens.lens (\FleetLaunchTemplateConfig' {overrides} -> overrides) (\s@FleetLaunchTemplateConfig' {} a -> s {overrides = a} :: FleetLaunchTemplateConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML FleetLaunchTemplateConfig where
+  parseXML x =
+    FleetLaunchTemplateConfig'
+      Prelude.<$> (x Data..@? "launchTemplateSpecification")
+      Prelude.<*> ( x
+                      Data..@? "overrides"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable FleetLaunchTemplateConfig where
+  hashWithSalt _salt FleetLaunchTemplateConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchTemplateSpecification
+      `Prelude.hashWithSalt` overrides
+
+instance Prelude.NFData FleetLaunchTemplateConfig where
+  rnf FleetLaunchTemplateConfig' {..} =
+    Prelude.rnf launchTemplateSpecification
+      `Prelude.seq` Prelude.rnf overrides
diff --git a/gen/Amazonka/EC2/Types/FleetLaunchTemplateConfigRequest.hs b/gen/Amazonka/EC2/Types/FleetLaunchTemplateConfigRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetLaunchTemplateConfigRequest.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetLaunchTemplateConfigRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetLaunchTemplateConfigRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetLaunchTemplateOverridesRequest
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecificationRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template and overrides.
+--
+-- /See:/ 'newFleetLaunchTemplateConfigRequest' smart constructor.
+data FleetLaunchTemplateConfigRequest = FleetLaunchTemplateConfigRequest'
+  { -- | The launch template to use. You must specify either the launch template
+    -- ID or launch template name in the request.
+    launchTemplateSpecification :: Prelude.Maybe FleetLaunchTemplateSpecificationRequest,
+    -- | Any parameters that you specify override the same parameters in the
+    -- launch template.
+    --
+    -- For fleets of type @request@ and @maintain@, a maximum of 300 items is
+    -- allowed across all launch templates.
+    overrides :: Prelude.Maybe [FleetLaunchTemplateOverridesRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetLaunchTemplateConfigRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateSpecification', 'fleetLaunchTemplateConfigRequest_launchTemplateSpecification' - The launch template to use. You must specify either the launch template
+-- ID or launch template name in the request.
+--
+-- 'overrides', 'fleetLaunchTemplateConfigRequest_overrides' - Any parameters that you specify override the same parameters in the
+-- launch template.
+--
+-- For fleets of type @request@ and @maintain@, a maximum of 300 items is
+-- allowed across all launch templates.
+newFleetLaunchTemplateConfigRequest ::
+  FleetLaunchTemplateConfigRequest
+newFleetLaunchTemplateConfigRequest =
+  FleetLaunchTemplateConfigRequest'
+    { launchTemplateSpecification =
+        Prelude.Nothing,
+      overrides = Prelude.Nothing
+    }
+
+-- | The launch template to use. You must specify either the launch template
+-- ID or launch template name in the request.
+fleetLaunchTemplateConfigRequest_launchTemplateSpecification :: Lens.Lens' FleetLaunchTemplateConfigRequest (Prelude.Maybe FleetLaunchTemplateSpecificationRequest)
+fleetLaunchTemplateConfigRequest_launchTemplateSpecification = Lens.lens (\FleetLaunchTemplateConfigRequest' {launchTemplateSpecification} -> launchTemplateSpecification) (\s@FleetLaunchTemplateConfigRequest' {} a -> s {launchTemplateSpecification = a} :: FleetLaunchTemplateConfigRequest)
+
+-- | Any parameters that you specify override the same parameters in the
+-- launch template.
+--
+-- For fleets of type @request@ and @maintain@, a maximum of 300 items is
+-- allowed across all launch templates.
+fleetLaunchTemplateConfigRequest_overrides :: Lens.Lens' FleetLaunchTemplateConfigRequest (Prelude.Maybe [FleetLaunchTemplateOverridesRequest])
+fleetLaunchTemplateConfigRequest_overrides = Lens.lens (\FleetLaunchTemplateConfigRequest' {overrides} -> overrides) (\s@FleetLaunchTemplateConfigRequest' {} a -> s {overrides = a} :: FleetLaunchTemplateConfigRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    FleetLaunchTemplateConfigRequest
+  where
+  hashWithSalt
+    _salt
+    FleetLaunchTemplateConfigRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateSpecification
+        `Prelude.hashWithSalt` overrides
+
+instance
+  Prelude.NFData
+    FleetLaunchTemplateConfigRequest
+  where
+  rnf FleetLaunchTemplateConfigRequest' {..} =
+    Prelude.rnf launchTemplateSpecification
+      `Prelude.seq` Prelude.rnf overrides
+
+instance
+  Data.ToQuery
+    FleetLaunchTemplateConfigRequest
+  where
+  toQuery FleetLaunchTemplateConfigRequest' {..} =
+    Prelude.mconcat
+      [ "LaunchTemplateSpecification"
+          Data.=: launchTemplateSpecification,
+        Data.toQuery
+          (Data.toQueryList "Overrides" Prelude.<$> overrides)
+      ]
diff --git a/gen/Amazonka/EC2/Types/FleetLaunchTemplateOverrides.hs b/gen/Amazonka/EC2/Types/FleetLaunchTemplateOverrides.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetLaunchTemplateOverrides.hs
@@ -0,0 +1,262 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetLaunchTemplateOverrides
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetLaunchTemplateOverrides where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceRequirements
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.PlacementResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes overrides for a launch template.
+--
+-- /See:/ 'newFleetLaunchTemplateOverrides' smart constructor.
+data FleetLaunchTemplateOverrides = FleetLaunchTemplateOverrides'
+  { -- | The Availability Zone in which to launch the instances.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AMI. An AMI is required to launch an instance. The AMI ID
+    -- must be specified here or in the launch template.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with those
+    -- attributes.
+    --
+    -- If you specify @InstanceRequirements@, you can\'t specify
+    -- @InstanceType@.
+    instanceRequirements :: Prelude.Maybe InstanceRequirements,
+    -- | The instance type.
+    --
+    -- If you specify @InstanceType@, you can\'t specify
+    -- @InstanceRequirements@.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    maxPrice :: Prelude.Maybe Prelude.Text,
+    -- | The location where the instance launched, if applicable.
+    placement :: Prelude.Maybe PlacementResponse,
+    -- | The priority for the launch template override. The highest priority is
+    -- launched first.
+    --
+    -- If the On-Demand @AllocationStrategy@ is set to @prioritized@, EC2 Fleet
+    -- uses priority to determine which launch template override to use first
+    -- in fulfilling On-Demand capacity.
+    --
+    -- If the Spot @AllocationStrategy@ is set to
+    -- @capacity-optimized-prioritized@, EC2 Fleet uses priority on a
+    -- best-effort basis to determine which launch template override to use in
+    -- fulfilling Spot capacity, but optimizes for capacity first.
+    --
+    -- Valid values are whole numbers starting at @0@. The lower the number,
+    -- the higher the priority. If no number is set, the override has the
+    -- lowest priority. You can set the same priority for different launch
+    -- template overrides.
+    priority :: Prelude.Maybe Prelude.Double,
+    -- | The ID of the subnet in which to launch the instances.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The number of units provided by the specified instance type.
+    weightedCapacity :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetLaunchTemplateOverrides' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'fleetLaunchTemplateOverrides_availabilityZone' - The Availability Zone in which to launch the instances.
+--
+-- 'imageId', 'fleetLaunchTemplateOverrides_imageId' - The ID of the AMI. An AMI is required to launch an instance. The AMI ID
+-- must be specified here or in the launch template.
+--
+-- 'instanceRequirements', 'fleetLaunchTemplateOverrides_instanceRequirements' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+--
+-- 'instanceType', 'fleetLaunchTemplateOverrides_instanceType' - The instance type.
+--
+-- If you specify @InstanceType@, you can\'t specify
+-- @InstanceRequirements@.
+--
+-- 'maxPrice', 'fleetLaunchTemplateOverrides_maxPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'placement', 'fleetLaunchTemplateOverrides_placement' - The location where the instance launched, if applicable.
+--
+-- 'priority', 'fleetLaunchTemplateOverrides_priority' - The priority for the launch template override. The highest priority is
+-- launched first.
+--
+-- If the On-Demand @AllocationStrategy@ is set to @prioritized@, EC2 Fleet
+-- uses priority to determine which launch template override to use first
+-- in fulfilling On-Demand capacity.
+--
+-- If the Spot @AllocationStrategy@ is set to
+-- @capacity-optimized-prioritized@, EC2 Fleet uses priority on a
+-- best-effort basis to determine which launch template override to use in
+-- fulfilling Spot capacity, but optimizes for capacity first.
+--
+-- Valid values are whole numbers starting at @0@. The lower the number,
+-- the higher the priority. If no number is set, the override has the
+-- lowest priority. You can set the same priority for different launch
+-- template overrides.
+--
+-- 'subnetId', 'fleetLaunchTemplateOverrides_subnetId' - The ID of the subnet in which to launch the instances.
+--
+-- 'weightedCapacity', 'fleetLaunchTemplateOverrides_weightedCapacity' - The number of units provided by the specified instance type.
+newFleetLaunchTemplateOverrides ::
+  FleetLaunchTemplateOverrides
+newFleetLaunchTemplateOverrides =
+  FleetLaunchTemplateOverrides'
+    { availabilityZone =
+        Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceRequirements = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      maxPrice = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      priority = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      weightedCapacity = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which to launch the instances.
+fleetLaunchTemplateOverrides_availabilityZone :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverrides_availabilityZone = Lens.lens (\FleetLaunchTemplateOverrides' {availabilityZone} -> availabilityZone) (\s@FleetLaunchTemplateOverrides' {} a -> s {availabilityZone = a} :: FleetLaunchTemplateOverrides)
+
+-- | The ID of the AMI. An AMI is required to launch an instance. The AMI ID
+-- must be specified here or in the launch template.
+fleetLaunchTemplateOverrides_imageId :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverrides_imageId = Lens.lens (\FleetLaunchTemplateOverrides' {imageId} -> imageId) (\s@FleetLaunchTemplateOverrides' {} a -> s {imageId = a} :: FleetLaunchTemplateOverrides)
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+fleetLaunchTemplateOverrides_instanceRequirements :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe InstanceRequirements)
+fleetLaunchTemplateOverrides_instanceRequirements = Lens.lens (\FleetLaunchTemplateOverrides' {instanceRequirements} -> instanceRequirements) (\s@FleetLaunchTemplateOverrides' {} a -> s {instanceRequirements = a} :: FleetLaunchTemplateOverrides)
+
+-- | The instance type.
+--
+-- If you specify @InstanceType@, you can\'t specify
+-- @InstanceRequirements@.
+fleetLaunchTemplateOverrides_instanceType :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe InstanceType)
+fleetLaunchTemplateOverrides_instanceType = Lens.lens (\FleetLaunchTemplateOverrides' {instanceType} -> instanceType) (\s@FleetLaunchTemplateOverrides' {} a -> s {instanceType = a} :: FleetLaunchTemplateOverrides)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+fleetLaunchTemplateOverrides_maxPrice :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverrides_maxPrice = Lens.lens (\FleetLaunchTemplateOverrides' {maxPrice} -> maxPrice) (\s@FleetLaunchTemplateOverrides' {} a -> s {maxPrice = a} :: FleetLaunchTemplateOverrides)
+
+-- | The location where the instance launched, if applicable.
+fleetLaunchTemplateOverrides_placement :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe PlacementResponse)
+fleetLaunchTemplateOverrides_placement = Lens.lens (\FleetLaunchTemplateOverrides' {placement} -> placement) (\s@FleetLaunchTemplateOverrides' {} a -> s {placement = a} :: FleetLaunchTemplateOverrides)
+
+-- | The priority for the launch template override. The highest priority is
+-- launched first.
+--
+-- If the On-Demand @AllocationStrategy@ is set to @prioritized@, EC2 Fleet
+-- uses priority to determine which launch template override to use first
+-- in fulfilling On-Demand capacity.
+--
+-- If the Spot @AllocationStrategy@ is set to
+-- @capacity-optimized-prioritized@, EC2 Fleet uses priority on a
+-- best-effort basis to determine which launch template override to use in
+-- fulfilling Spot capacity, but optimizes for capacity first.
+--
+-- Valid values are whole numbers starting at @0@. The lower the number,
+-- the higher the priority. If no number is set, the override has the
+-- lowest priority. You can set the same priority for different launch
+-- template overrides.
+fleetLaunchTemplateOverrides_priority :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe Prelude.Double)
+fleetLaunchTemplateOverrides_priority = Lens.lens (\FleetLaunchTemplateOverrides' {priority} -> priority) (\s@FleetLaunchTemplateOverrides' {} a -> s {priority = a} :: FleetLaunchTemplateOverrides)
+
+-- | The ID of the subnet in which to launch the instances.
+fleetLaunchTemplateOverrides_subnetId :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverrides_subnetId = Lens.lens (\FleetLaunchTemplateOverrides' {subnetId} -> subnetId) (\s@FleetLaunchTemplateOverrides' {} a -> s {subnetId = a} :: FleetLaunchTemplateOverrides)
+
+-- | The number of units provided by the specified instance type.
+fleetLaunchTemplateOverrides_weightedCapacity :: Lens.Lens' FleetLaunchTemplateOverrides (Prelude.Maybe Prelude.Double)
+fleetLaunchTemplateOverrides_weightedCapacity = Lens.lens (\FleetLaunchTemplateOverrides' {weightedCapacity} -> weightedCapacity) (\s@FleetLaunchTemplateOverrides' {} a -> s {weightedCapacity = a} :: FleetLaunchTemplateOverrides)
+
+instance Data.FromXML FleetLaunchTemplateOverrides where
+  parseXML x =
+    FleetLaunchTemplateOverrides'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "instanceRequirements")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "maxPrice")
+      Prelude.<*> (x Data..@? "placement")
+      Prelude.<*> (x Data..@? "priority")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> (x Data..@? "weightedCapacity")
+
+instance
+  Prelude.Hashable
+    FleetLaunchTemplateOverrides
+  where
+  hashWithSalt _salt FleetLaunchTemplateOverrides' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceRequirements
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` maxPrice
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` priority
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` weightedCapacity
+
+instance Prelude.NFData FleetLaunchTemplateOverrides where
+  rnf FleetLaunchTemplateOverrides' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf maxPrice
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf weightedCapacity
diff --git a/gen/Amazonka/EC2/Types/FleetLaunchTemplateOverridesRequest.hs b/gen/Amazonka/EC2/Types/FleetLaunchTemplateOverridesRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetLaunchTemplateOverridesRequest.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetLaunchTemplateOverridesRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetLaunchTemplateOverridesRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceRequirementsRequest
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.Placement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes overrides for a launch template.
+--
+-- /See:/ 'newFleetLaunchTemplateOverridesRequest' smart constructor.
+data FleetLaunchTemplateOverridesRequest = FleetLaunchTemplateOverridesRequest'
+  { -- | The Availability Zone in which to launch the instances.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AMI. An AMI is required to launch an instance. The AMI ID
+    -- must be specified here or in the launch template.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with those
+    -- attributes.
+    --
+    -- If you specify @InstanceRequirements@, you can\'t specify
+    -- @InstanceType@.
+    instanceRequirements :: Prelude.Maybe InstanceRequirementsRequest,
+    -- | The instance type.
+    --
+    -- If you specify @InstanceType@, you can\'t specify
+    -- @InstanceRequirements@.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    maxPrice :: Prelude.Maybe Prelude.Text,
+    -- | The location where the instance launched, if applicable.
+    placement :: Prelude.Maybe Placement,
+    -- | The priority for the launch template override. The highest priority is
+    -- launched first.
+    --
+    -- If the On-Demand @AllocationStrategy@ is set to @prioritized@, EC2 Fleet
+    -- uses priority to determine which launch template override to use first
+    -- in fulfilling On-Demand capacity.
+    --
+    -- If the Spot @AllocationStrategy@ is set to
+    -- @capacity-optimized-prioritized@, EC2 Fleet uses priority on a
+    -- best-effort basis to determine which launch template override to use in
+    -- fulfilling Spot capacity, but optimizes for capacity first.
+    --
+    -- Valid values are whole numbers starting at @0@. The lower the number,
+    -- the higher the priority. If no number is set, the launch template
+    -- override has the lowest priority. You can set the same priority for
+    -- different launch template overrides.
+    priority :: Prelude.Maybe Prelude.Double,
+    -- | The IDs of the subnets in which to launch the instances. Separate
+    -- multiple subnet IDs using commas (for example,
+    -- @subnet-1234abcdeexample1, subnet-0987cdef6example2@). A request of type
+    -- @instant@ can have only one subnet ID.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The number of units provided by the specified instance type.
+    weightedCapacity :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetLaunchTemplateOverridesRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'fleetLaunchTemplateOverridesRequest_availabilityZone' - The Availability Zone in which to launch the instances.
+--
+-- 'imageId', 'fleetLaunchTemplateOverridesRequest_imageId' - The ID of the AMI. An AMI is required to launch an instance. The AMI ID
+-- must be specified here or in the launch template.
+--
+-- 'instanceRequirements', 'fleetLaunchTemplateOverridesRequest_instanceRequirements' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+--
+-- 'instanceType', 'fleetLaunchTemplateOverridesRequest_instanceType' - The instance type.
+--
+-- If you specify @InstanceType@, you can\'t specify
+-- @InstanceRequirements@.
+--
+-- 'maxPrice', 'fleetLaunchTemplateOverridesRequest_maxPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'placement', 'fleetLaunchTemplateOverridesRequest_placement' - The location where the instance launched, if applicable.
+--
+-- 'priority', 'fleetLaunchTemplateOverridesRequest_priority' - The priority for the launch template override. The highest priority is
+-- launched first.
+--
+-- If the On-Demand @AllocationStrategy@ is set to @prioritized@, EC2 Fleet
+-- uses priority to determine which launch template override to use first
+-- in fulfilling On-Demand capacity.
+--
+-- If the Spot @AllocationStrategy@ is set to
+-- @capacity-optimized-prioritized@, EC2 Fleet uses priority on a
+-- best-effort basis to determine which launch template override to use in
+-- fulfilling Spot capacity, but optimizes for capacity first.
+--
+-- Valid values are whole numbers starting at @0@. The lower the number,
+-- the higher the priority. If no number is set, the launch template
+-- override has the lowest priority. You can set the same priority for
+-- different launch template overrides.
+--
+-- 'subnetId', 'fleetLaunchTemplateOverridesRequest_subnetId' - The IDs of the subnets in which to launch the instances. Separate
+-- multiple subnet IDs using commas (for example,
+-- @subnet-1234abcdeexample1, subnet-0987cdef6example2@). A request of type
+-- @instant@ can have only one subnet ID.
+--
+-- 'weightedCapacity', 'fleetLaunchTemplateOverridesRequest_weightedCapacity' - The number of units provided by the specified instance type.
+newFleetLaunchTemplateOverridesRequest ::
+  FleetLaunchTemplateOverridesRequest
+newFleetLaunchTemplateOverridesRequest =
+  FleetLaunchTemplateOverridesRequest'
+    { availabilityZone =
+        Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceRequirements = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      maxPrice = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      priority = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      weightedCapacity = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which to launch the instances.
+fleetLaunchTemplateOverridesRequest_availabilityZone :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverridesRequest_availabilityZone = Lens.lens (\FleetLaunchTemplateOverridesRequest' {availabilityZone} -> availabilityZone) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {availabilityZone = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The ID of the AMI. An AMI is required to launch an instance. The AMI ID
+-- must be specified here or in the launch template.
+fleetLaunchTemplateOverridesRequest_imageId :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverridesRequest_imageId = Lens.lens (\FleetLaunchTemplateOverridesRequest' {imageId} -> imageId) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {imageId = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+fleetLaunchTemplateOverridesRequest_instanceRequirements :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe InstanceRequirementsRequest)
+fleetLaunchTemplateOverridesRequest_instanceRequirements = Lens.lens (\FleetLaunchTemplateOverridesRequest' {instanceRequirements} -> instanceRequirements) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {instanceRequirements = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The instance type.
+--
+-- If you specify @InstanceType@, you can\'t specify
+-- @InstanceRequirements@.
+fleetLaunchTemplateOverridesRequest_instanceType :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe InstanceType)
+fleetLaunchTemplateOverridesRequest_instanceType = Lens.lens (\FleetLaunchTemplateOverridesRequest' {instanceType} -> instanceType) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {instanceType = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+fleetLaunchTemplateOverridesRequest_maxPrice :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverridesRequest_maxPrice = Lens.lens (\FleetLaunchTemplateOverridesRequest' {maxPrice} -> maxPrice) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {maxPrice = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The location where the instance launched, if applicable.
+fleetLaunchTemplateOverridesRequest_placement :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Placement)
+fleetLaunchTemplateOverridesRequest_placement = Lens.lens (\FleetLaunchTemplateOverridesRequest' {placement} -> placement) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {placement = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The priority for the launch template override. The highest priority is
+-- launched first.
+--
+-- If the On-Demand @AllocationStrategy@ is set to @prioritized@, EC2 Fleet
+-- uses priority to determine which launch template override to use first
+-- in fulfilling On-Demand capacity.
+--
+-- If the Spot @AllocationStrategy@ is set to
+-- @capacity-optimized-prioritized@, EC2 Fleet uses priority on a
+-- best-effort basis to determine which launch template override to use in
+-- fulfilling Spot capacity, but optimizes for capacity first.
+--
+-- Valid values are whole numbers starting at @0@. The lower the number,
+-- the higher the priority. If no number is set, the launch template
+-- override has the lowest priority. You can set the same priority for
+-- different launch template overrides.
+fleetLaunchTemplateOverridesRequest_priority :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Prelude.Double)
+fleetLaunchTemplateOverridesRequest_priority = Lens.lens (\FleetLaunchTemplateOverridesRequest' {priority} -> priority) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {priority = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The IDs of the subnets in which to launch the instances. Separate
+-- multiple subnet IDs using commas (for example,
+-- @subnet-1234abcdeexample1, subnet-0987cdef6example2@). A request of type
+-- @instant@ can have only one subnet ID.
+fleetLaunchTemplateOverridesRequest_subnetId :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateOverridesRequest_subnetId = Lens.lens (\FleetLaunchTemplateOverridesRequest' {subnetId} -> subnetId) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {subnetId = a} :: FleetLaunchTemplateOverridesRequest)
+
+-- | The number of units provided by the specified instance type.
+fleetLaunchTemplateOverridesRequest_weightedCapacity :: Lens.Lens' FleetLaunchTemplateOverridesRequest (Prelude.Maybe Prelude.Double)
+fleetLaunchTemplateOverridesRequest_weightedCapacity = Lens.lens (\FleetLaunchTemplateOverridesRequest' {weightedCapacity} -> weightedCapacity) (\s@FleetLaunchTemplateOverridesRequest' {} a -> s {weightedCapacity = a} :: FleetLaunchTemplateOverridesRequest)
+
+instance
+  Prelude.Hashable
+    FleetLaunchTemplateOverridesRequest
+  where
+  hashWithSalt
+    _salt
+    FleetLaunchTemplateOverridesRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` imageId
+        `Prelude.hashWithSalt` instanceRequirements
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` maxPrice
+        `Prelude.hashWithSalt` placement
+        `Prelude.hashWithSalt` priority
+        `Prelude.hashWithSalt` subnetId
+        `Prelude.hashWithSalt` weightedCapacity
+
+instance
+  Prelude.NFData
+    FleetLaunchTemplateOverridesRequest
+  where
+  rnf FleetLaunchTemplateOverridesRequest' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf maxPrice
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf weightedCapacity
+
+instance
+  Data.ToQuery
+    FleetLaunchTemplateOverridesRequest
+  where
+  toQuery FleetLaunchTemplateOverridesRequest' {..} =
+    Prelude.mconcat
+      [ "AvailabilityZone" Data.=: availabilityZone,
+        "ImageId" Data.=: imageId,
+        "InstanceRequirements" Data.=: instanceRequirements,
+        "InstanceType" Data.=: instanceType,
+        "MaxPrice" Data.=: maxPrice,
+        "Placement" Data.=: placement,
+        "Priority" Data.=: priority,
+        "SubnetId" Data.=: subnetId,
+        "WeightedCapacity" Data.=: weightedCapacity
+      ]
diff --git a/gen/Amazonka/EC2/Types/FleetLaunchTemplateSpecification.hs b/gen/Amazonka/EC2/Types/FleetLaunchTemplateSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetLaunchTemplateSpecification.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetLaunchTemplateSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Amazon EC2 launch template that can be used by a Spot Fleet to
+-- configure Amazon EC2 instances. You must specify either the ID or name
+-- of the launch template in the request, but not both.
+--
+-- For information about launch templates, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html Launch an instance from a launch template>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newFleetLaunchTemplateSpecification' smart constructor.
+data FleetLaunchTemplateSpecification = FleetLaunchTemplateSpecification'
+  { -- | The ID of the launch template.
+    --
+    -- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+    -- not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+    -- not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The launch template version number, @$Latest@, or @$Default@. You must
+    -- specify a value, otherwise the request fails.
+    --
+    -- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+    -- launch template.
+    --
+    -- If the value is @$Default@, Amazon EC2 uses the default version of the
+    -- launch template.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetLaunchTemplateSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'fleetLaunchTemplateSpecification_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+-- not both.
+--
+-- 'launchTemplateName', 'fleetLaunchTemplateSpecification_launchTemplateName' - The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+--
+-- 'version', 'fleetLaunchTemplateSpecification_version' - The launch template version number, @$Latest@, or @$Default@. You must
+-- specify a value, otherwise the request fails.
+--
+-- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+-- launch template.
+--
+-- If the value is @$Default@, Amazon EC2 uses the default version of the
+-- launch template.
+newFleetLaunchTemplateSpecification ::
+  FleetLaunchTemplateSpecification
+newFleetLaunchTemplateSpecification =
+  FleetLaunchTemplateSpecification'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The ID of the launch template.
+--
+-- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+-- not both.
+fleetLaunchTemplateSpecification_launchTemplateId :: Lens.Lens' FleetLaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateSpecification_launchTemplateId = Lens.lens (\FleetLaunchTemplateSpecification' {launchTemplateId} -> launchTemplateId) (\s@FleetLaunchTemplateSpecification' {} a -> s {launchTemplateId = a} :: FleetLaunchTemplateSpecification)
+
+-- | The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+fleetLaunchTemplateSpecification_launchTemplateName :: Lens.Lens' FleetLaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateSpecification_launchTemplateName = Lens.lens (\FleetLaunchTemplateSpecification' {launchTemplateName} -> launchTemplateName) (\s@FleetLaunchTemplateSpecification' {} a -> s {launchTemplateName = a} :: FleetLaunchTemplateSpecification)
+
+-- | The launch template version number, @$Latest@, or @$Default@. You must
+-- specify a value, otherwise the request fails.
+--
+-- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+-- launch template.
+--
+-- If the value is @$Default@, Amazon EC2 uses the default version of the
+-- launch template.
+fleetLaunchTemplateSpecification_version :: Lens.Lens' FleetLaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateSpecification_version = Lens.lens (\FleetLaunchTemplateSpecification' {version} -> version) (\s@FleetLaunchTemplateSpecification' {} a -> s {version = a} :: FleetLaunchTemplateSpecification)
+
+instance
+  Data.FromXML
+    FleetLaunchTemplateSpecification
+  where
+  parseXML x =
+    FleetLaunchTemplateSpecification'
+      Prelude.<$> (x Data..@? "launchTemplateId")
+      Prelude.<*> (x Data..@? "launchTemplateName")
+      Prelude.<*> (x Data..@? "version")
+
+instance
+  Prelude.Hashable
+    FleetLaunchTemplateSpecification
+  where
+  hashWithSalt
+    _salt
+    FleetLaunchTemplateSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` version
+
+instance
+  Prelude.NFData
+    FleetLaunchTemplateSpecification
+  where
+  rnf FleetLaunchTemplateSpecification' {..} =
+    Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf version
+
+instance
+  Data.ToQuery
+    FleetLaunchTemplateSpecification
+  where
+  toQuery FleetLaunchTemplateSpecification' {..} =
+    Prelude.mconcat
+      [ "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        "Version" Data.=: version
+      ]
diff --git a/gen/Amazonka/EC2/Types/FleetLaunchTemplateSpecificationRequest.hs b/gen/Amazonka/EC2/Types/FleetLaunchTemplateSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetLaunchTemplateSpecificationRequest.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetLaunchTemplateSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetLaunchTemplateSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Amazon EC2 launch template that can be used by an EC2 Fleet to
+-- configure Amazon EC2 instances. You must specify either the ID or name
+-- of the launch template in the request, but not both.
+--
+-- For information about launch templates, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html Launch an instance from a launch template>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newFleetLaunchTemplateSpecificationRequest' smart constructor.
+data FleetLaunchTemplateSpecificationRequest = FleetLaunchTemplateSpecificationRequest'
+  { -- | The ID of the launch template.
+    --
+    -- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+    -- not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+    -- not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The launch template version number, @$Latest@, or @$Default@. You must
+    -- specify a value, otherwise the request fails.
+    --
+    -- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+    -- launch template.
+    --
+    -- If the value is @$Default@, Amazon EC2 uses the default version of the
+    -- launch template.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetLaunchTemplateSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'fleetLaunchTemplateSpecificationRequest_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+-- not both.
+--
+-- 'launchTemplateName', 'fleetLaunchTemplateSpecificationRequest_launchTemplateName' - The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+--
+-- 'version', 'fleetLaunchTemplateSpecificationRequest_version' - The launch template version number, @$Latest@, or @$Default@. You must
+-- specify a value, otherwise the request fails.
+--
+-- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+-- launch template.
+--
+-- If the value is @$Default@, Amazon EC2 uses the default version of the
+-- launch template.
+newFleetLaunchTemplateSpecificationRequest ::
+  FleetLaunchTemplateSpecificationRequest
+newFleetLaunchTemplateSpecificationRequest =
+  FleetLaunchTemplateSpecificationRequest'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName =
+        Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The ID of the launch template.
+--
+-- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+-- not both.
+fleetLaunchTemplateSpecificationRequest_launchTemplateId :: Lens.Lens' FleetLaunchTemplateSpecificationRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateSpecificationRequest_launchTemplateId = Lens.lens (\FleetLaunchTemplateSpecificationRequest' {launchTemplateId} -> launchTemplateId) (\s@FleetLaunchTemplateSpecificationRequest' {} a -> s {launchTemplateId = a} :: FleetLaunchTemplateSpecificationRequest)
+
+-- | The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+fleetLaunchTemplateSpecificationRequest_launchTemplateName :: Lens.Lens' FleetLaunchTemplateSpecificationRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateSpecificationRequest_launchTemplateName = Lens.lens (\FleetLaunchTemplateSpecificationRequest' {launchTemplateName} -> launchTemplateName) (\s@FleetLaunchTemplateSpecificationRequest' {} a -> s {launchTemplateName = a} :: FleetLaunchTemplateSpecificationRequest)
+
+-- | The launch template version number, @$Latest@, or @$Default@. You must
+-- specify a value, otherwise the request fails.
+--
+-- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+-- launch template.
+--
+-- If the value is @$Default@, Amazon EC2 uses the default version of the
+-- launch template.
+fleetLaunchTemplateSpecificationRequest_version :: Lens.Lens' FleetLaunchTemplateSpecificationRequest (Prelude.Maybe Prelude.Text)
+fleetLaunchTemplateSpecificationRequest_version = Lens.lens (\FleetLaunchTemplateSpecificationRequest' {version} -> version) (\s@FleetLaunchTemplateSpecificationRequest' {} a -> s {version = a} :: FleetLaunchTemplateSpecificationRequest)
+
+instance
+  Prelude.Hashable
+    FleetLaunchTemplateSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    FleetLaunchTemplateSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateId
+        `Prelude.hashWithSalt` launchTemplateName
+        `Prelude.hashWithSalt` version
+
+instance
+  Prelude.NFData
+    FleetLaunchTemplateSpecificationRequest
+  where
+  rnf FleetLaunchTemplateSpecificationRequest' {..} =
+    Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf version
+
+instance
+  Data.ToQuery
+    FleetLaunchTemplateSpecificationRequest
+  where
+  toQuery FleetLaunchTemplateSpecificationRequest' {..} =
+    Prelude.mconcat
+      [ "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        "Version" Data.=: version
+      ]
diff --git a/gen/Amazonka/EC2/Types/FleetOnDemandAllocationStrategy.hs b/gen/Amazonka/EC2/Types/FleetOnDemandAllocationStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetOnDemandAllocationStrategy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetOnDemandAllocationStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetOnDemandAllocationStrategy
+  ( FleetOnDemandAllocationStrategy
+      ( ..,
+        FleetOnDemandAllocationStrategy_Lowest_price,
+        FleetOnDemandAllocationStrategy_Prioritized
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetOnDemandAllocationStrategy = FleetOnDemandAllocationStrategy'
+  { fromFleetOnDemandAllocationStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetOnDemandAllocationStrategy_Lowest_price :: FleetOnDemandAllocationStrategy
+pattern FleetOnDemandAllocationStrategy_Lowest_price = FleetOnDemandAllocationStrategy' "lowest-price"
+
+pattern FleetOnDemandAllocationStrategy_Prioritized :: FleetOnDemandAllocationStrategy
+pattern FleetOnDemandAllocationStrategy_Prioritized = FleetOnDemandAllocationStrategy' "prioritized"
+
+{-# COMPLETE
+  FleetOnDemandAllocationStrategy_Lowest_price,
+  FleetOnDemandAllocationStrategy_Prioritized,
+  FleetOnDemandAllocationStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetReplacementStrategy.hs b/gen/Amazonka/EC2/Types/FleetReplacementStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetReplacementStrategy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetReplacementStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetReplacementStrategy
+  ( FleetReplacementStrategy
+      ( ..,
+        FleetReplacementStrategy_Launch,
+        FleetReplacementStrategy_Launch_before_terminate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetReplacementStrategy = FleetReplacementStrategy'
+  { fromFleetReplacementStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetReplacementStrategy_Launch :: FleetReplacementStrategy
+pattern FleetReplacementStrategy_Launch = FleetReplacementStrategy' "launch"
+
+pattern FleetReplacementStrategy_Launch_before_terminate :: FleetReplacementStrategy
+pattern FleetReplacementStrategy_Launch_before_terminate = FleetReplacementStrategy' "launch-before-terminate"
+
+{-# COMPLETE
+  FleetReplacementStrategy_Launch,
+  FleetReplacementStrategy_Launch_before_terminate,
+  FleetReplacementStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetSpotCapacityRebalance.hs b/gen/Amazonka/EC2/Types/FleetSpotCapacityRebalance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetSpotCapacityRebalance.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetSpotCapacityRebalance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetSpotCapacityRebalance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetReplacementStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | The strategy to use when Amazon EC2 emits a signal that your Spot
+-- Instance is at an elevated risk of being interrupted.
+--
+-- /See:/ 'newFleetSpotCapacityRebalance' smart constructor.
+data FleetSpotCapacityRebalance = FleetSpotCapacityRebalance'
+  { -- | The replacement strategy to use. Only available for fleets of type
+    -- @maintain@.
+    --
+    -- @launch@ - EC2 Fleet launches a new replacement Spot Instance when a
+    -- rebalance notification is emitted for an existing Spot Instance in the
+    -- fleet. EC2 Fleet does not terminate the instances that receive a
+    -- rebalance notification. You can terminate the old instances, or you can
+    -- leave them running. You are charged for all instances while they are
+    -- running.
+    --
+    -- @launch-before-terminate@ - EC2 Fleet launches a new replacement Spot
+    -- Instance when a rebalance notification is emitted for an existing Spot
+    -- Instance in the fleet, and then, after a delay that you specify (in
+    -- @TerminationDelay@), terminates the instances that received a rebalance
+    -- notification.
+    replacementStrategy :: Prelude.Maybe FleetReplacementStrategy,
+    -- | The amount of time (in seconds) that Amazon EC2 waits before terminating
+    -- the old Spot Instance after launching a new replacement Spot Instance.
+    --
+    -- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+    --
+    -- Not valid when @ReplacementStrategy@ is set to @launch@.
+    --
+    -- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+    -- seconds.
+    terminationDelay :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetSpotCapacityRebalance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replacementStrategy', 'fleetSpotCapacityRebalance_replacementStrategy' - The replacement strategy to use. Only available for fleets of type
+-- @maintain@.
+--
+-- @launch@ - EC2 Fleet launches a new replacement Spot Instance when a
+-- rebalance notification is emitted for an existing Spot Instance in the
+-- fleet. EC2 Fleet does not terminate the instances that receive a
+-- rebalance notification. You can terminate the old instances, or you can
+-- leave them running. You are charged for all instances while they are
+-- running.
+--
+-- @launch-before-terminate@ - EC2 Fleet launches a new replacement Spot
+-- Instance when a rebalance notification is emitted for an existing Spot
+-- Instance in the fleet, and then, after a delay that you specify (in
+-- @TerminationDelay@), terminates the instances that received a rebalance
+-- notification.
+--
+-- 'terminationDelay', 'fleetSpotCapacityRebalance_terminationDelay' - The amount of time (in seconds) that Amazon EC2 waits before terminating
+-- the old Spot Instance after launching a new replacement Spot Instance.
+--
+-- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+--
+-- Not valid when @ReplacementStrategy@ is set to @launch@.
+--
+-- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+-- seconds.
+newFleetSpotCapacityRebalance ::
+  FleetSpotCapacityRebalance
+newFleetSpotCapacityRebalance =
+  FleetSpotCapacityRebalance'
+    { replacementStrategy =
+        Prelude.Nothing,
+      terminationDelay = Prelude.Nothing
+    }
+
+-- | The replacement strategy to use. Only available for fleets of type
+-- @maintain@.
+--
+-- @launch@ - EC2 Fleet launches a new replacement Spot Instance when a
+-- rebalance notification is emitted for an existing Spot Instance in the
+-- fleet. EC2 Fleet does not terminate the instances that receive a
+-- rebalance notification. You can terminate the old instances, or you can
+-- leave them running. You are charged for all instances while they are
+-- running.
+--
+-- @launch-before-terminate@ - EC2 Fleet launches a new replacement Spot
+-- Instance when a rebalance notification is emitted for an existing Spot
+-- Instance in the fleet, and then, after a delay that you specify (in
+-- @TerminationDelay@), terminates the instances that received a rebalance
+-- notification.
+fleetSpotCapacityRebalance_replacementStrategy :: Lens.Lens' FleetSpotCapacityRebalance (Prelude.Maybe FleetReplacementStrategy)
+fleetSpotCapacityRebalance_replacementStrategy = Lens.lens (\FleetSpotCapacityRebalance' {replacementStrategy} -> replacementStrategy) (\s@FleetSpotCapacityRebalance' {} a -> s {replacementStrategy = a} :: FleetSpotCapacityRebalance)
+
+-- | The amount of time (in seconds) that Amazon EC2 waits before terminating
+-- the old Spot Instance after launching a new replacement Spot Instance.
+--
+-- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+--
+-- Not valid when @ReplacementStrategy@ is set to @launch@.
+--
+-- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+-- seconds.
+fleetSpotCapacityRebalance_terminationDelay :: Lens.Lens' FleetSpotCapacityRebalance (Prelude.Maybe Prelude.Int)
+fleetSpotCapacityRebalance_terminationDelay = Lens.lens (\FleetSpotCapacityRebalance' {terminationDelay} -> terminationDelay) (\s@FleetSpotCapacityRebalance' {} a -> s {terminationDelay = a} :: FleetSpotCapacityRebalance)
+
+instance Data.FromXML FleetSpotCapacityRebalance where
+  parseXML x =
+    FleetSpotCapacityRebalance'
+      Prelude.<$> (x Data..@? "replacementStrategy")
+      Prelude.<*> (x Data..@? "terminationDelay")
+
+instance Prelude.Hashable FleetSpotCapacityRebalance where
+  hashWithSalt _salt FleetSpotCapacityRebalance' {..} =
+    _salt
+      `Prelude.hashWithSalt` replacementStrategy
+      `Prelude.hashWithSalt` terminationDelay
+
+instance Prelude.NFData FleetSpotCapacityRebalance where
+  rnf FleetSpotCapacityRebalance' {..} =
+    Prelude.rnf replacementStrategy
+      `Prelude.seq` Prelude.rnf terminationDelay
diff --git a/gen/Amazonka/EC2/Types/FleetSpotCapacityRebalanceRequest.hs b/gen/Amazonka/EC2/Types/FleetSpotCapacityRebalanceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetSpotCapacityRebalanceRequest.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetSpotCapacityRebalanceRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetSpotCapacityRebalanceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetReplacementStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Spot Instance replacement strategy to use when Amazon EC2 emits a
+-- rebalance notification signal that your Spot Instance is at an elevated
+-- risk of being interrupted. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-capacity-rebalance.html Capacity rebalancing>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newFleetSpotCapacityRebalanceRequest' smart constructor.
+data FleetSpotCapacityRebalanceRequest = FleetSpotCapacityRebalanceRequest'
+  { -- | The replacement strategy to use. Only available for fleets of type
+    -- @maintain@.
+    --
+    -- @launch@ - EC2 Fleet launches a replacement Spot Instance when a
+    -- rebalance notification is emitted for an existing Spot Instance in the
+    -- fleet. EC2 Fleet does not terminate the instances that receive a
+    -- rebalance notification. You can terminate the old instances, or you can
+    -- leave them running. You are charged for all instances while they are
+    -- running.
+    --
+    -- @launch-before-terminate@ - EC2 Fleet launches a replacement Spot
+    -- Instance when a rebalance notification is emitted for an existing Spot
+    -- Instance in the fleet, and then, after a delay that you specify (in
+    -- @TerminationDelay@), terminates the instances that received a rebalance
+    -- notification.
+    replacementStrategy :: Prelude.Maybe FleetReplacementStrategy,
+    -- | The amount of time (in seconds) that Amazon EC2 waits before terminating
+    -- the old Spot Instance after launching a new replacement Spot Instance.
+    --
+    -- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+    --
+    -- Not valid when @ReplacementStrategy@ is set to @launch@.
+    --
+    -- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+    -- seconds.
+    terminationDelay :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetSpotCapacityRebalanceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replacementStrategy', 'fleetSpotCapacityRebalanceRequest_replacementStrategy' - The replacement strategy to use. Only available for fleets of type
+-- @maintain@.
+--
+-- @launch@ - EC2 Fleet launches a replacement Spot Instance when a
+-- rebalance notification is emitted for an existing Spot Instance in the
+-- fleet. EC2 Fleet does not terminate the instances that receive a
+-- rebalance notification. You can terminate the old instances, or you can
+-- leave them running. You are charged for all instances while they are
+-- running.
+--
+-- @launch-before-terminate@ - EC2 Fleet launches a replacement Spot
+-- Instance when a rebalance notification is emitted for an existing Spot
+-- Instance in the fleet, and then, after a delay that you specify (in
+-- @TerminationDelay@), terminates the instances that received a rebalance
+-- notification.
+--
+-- 'terminationDelay', 'fleetSpotCapacityRebalanceRequest_terminationDelay' - The amount of time (in seconds) that Amazon EC2 waits before terminating
+-- the old Spot Instance after launching a new replacement Spot Instance.
+--
+-- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+--
+-- Not valid when @ReplacementStrategy@ is set to @launch@.
+--
+-- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+-- seconds.
+newFleetSpotCapacityRebalanceRequest ::
+  FleetSpotCapacityRebalanceRequest
+newFleetSpotCapacityRebalanceRequest =
+  FleetSpotCapacityRebalanceRequest'
+    { replacementStrategy =
+        Prelude.Nothing,
+      terminationDelay = Prelude.Nothing
+    }
+
+-- | The replacement strategy to use. Only available for fleets of type
+-- @maintain@.
+--
+-- @launch@ - EC2 Fleet launches a replacement Spot Instance when a
+-- rebalance notification is emitted for an existing Spot Instance in the
+-- fleet. EC2 Fleet does not terminate the instances that receive a
+-- rebalance notification. You can terminate the old instances, or you can
+-- leave them running. You are charged for all instances while they are
+-- running.
+--
+-- @launch-before-terminate@ - EC2 Fleet launches a replacement Spot
+-- Instance when a rebalance notification is emitted for an existing Spot
+-- Instance in the fleet, and then, after a delay that you specify (in
+-- @TerminationDelay@), terminates the instances that received a rebalance
+-- notification.
+fleetSpotCapacityRebalanceRequest_replacementStrategy :: Lens.Lens' FleetSpotCapacityRebalanceRequest (Prelude.Maybe FleetReplacementStrategy)
+fleetSpotCapacityRebalanceRequest_replacementStrategy = Lens.lens (\FleetSpotCapacityRebalanceRequest' {replacementStrategy} -> replacementStrategy) (\s@FleetSpotCapacityRebalanceRequest' {} a -> s {replacementStrategy = a} :: FleetSpotCapacityRebalanceRequest)
+
+-- | The amount of time (in seconds) that Amazon EC2 waits before terminating
+-- the old Spot Instance after launching a new replacement Spot Instance.
+--
+-- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+--
+-- Not valid when @ReplacementStrategy@ is set to @launch@.
+--
+-- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+-- seconds.
+fleetSpotCapacityRebalanceRequest_terminationDelay :: Lens.Lens' FleetSpotCapacityRebalanceRequest (Prelude.Maybe Prelude.Int)
+fleetSpotCapacityRebalanceRequest_terminationDelay = Lens.lens (\FleetSpotCapacityRebalanceRequest' {terminationDelay} -> terminationDelay) (\s@FleetSpotCapacityRebalanceRequest' {} a -> s {terminationDelay = a} :: FleetSpotCapacityRebalanceRequest)
+
+instance
+  Prelude.Hashable
+    FleetSpotCapacityRebalanceRequest
+  where
+  hashWithSalt
+    _salt
+    FleetSpotCapacityRebalanceRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` replacementStrategy
+        `Prelude.hashWithSalt` terminationDelay
+
+instance
+  Prelude.NFData
+    FleetSpotCapacityRebalanceRequest
+  where
+  rnf FleetSpotCapacityRebalanceRequest' {..} =
+    Prelude.rnf replacementStrategy
+      `Prelude.seq` Prelude.rnf terminationDelay
+
+instance
+  Data.ToQuery
+    FleetSpotCapacityRebalanceRequest
+  where
+  toQuery FleetSpotCapacityRebalanceRequest' {..} =
+    Prelude.mconcat
+      [ "ReplacementStrategy" Data.=: replacementStrategy,
+        "TerminationDelay" Data.=: terminationDelay
+      ]
diff --git a/gen/Amazonka/EC2/Types/FleetSpotMaintenanceStrategies.hs b/gen/Amazonka/EC2/Types/FleetSpotMaintenanceStrategies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetSpotMaintenanceStrategies.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetSpotMaintenanceStrategies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetSpotMaintenanceStrategies where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetSpotCapacityRebalance
+import qualified Amazonka.Prelude as Prelude
+
+-- | The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+--
+-- /See:/ 'newFleetSpotMaintenanceStrategies' smart constructor.
+data FleetSpotMaintenanceStrategies = FleetSpotMaintenanceStrategies'
+  { -- | The strategy to use when Amazon EC2 emits a signal that your Spot
+    -- Instance is at an elevated risk of being interrupted.
+    capacityRebalance :: Prelude.Maybe FleetSpotCapacityRebalance
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetSpotMaintenanceStrategies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityRebalance', 'fleetSpotMaintenanceStrategies_capacityRebalance' - The strategy to use when Amazon EC2 emits a signal that your Spot
+-- Instance is at an elevated risk of being interrupted.
+newFleetSpotMaintenanceStrategies ::
+  FleetSpotMaintenanceStrategies
+newFleetSpotMaintenanceStrategies =
+  FleetSpotMaintenanceStrategies'
+    { capacityRebalance =
+        Prelude.Nothing
+    }
+
+-- | The strategy to use when Amazon EC2 emits a signal that your Spot
+-- Instance is at an elevated risk of being interrupted.
+fleetSpotMaintenanceStrategies_capacityRebalance :: Lens.Lens' FleetSpotMaintenanceStrategies (Prelude.Maybe FleetSpotCapacityRebalance)
+fleetSpotMaintenanceStrategies_capacityRebalance = Lens.lens (\FleetSpotMaintenanceStrategies' {capacityRebalance} -> capacityRebalance) (\s@FleetSpotMaintenanceStrategies' {} a -> s {capacityRebalance = a} :: FleetSpotMaintenanceStrategies)
+
+instance Data.FromXML FleetSpotMaintenanceStrategies where
+  parseXML x =
+    FleetSpotMaintenanceStrategies'
+      Prelude.<$> (x Data..@? "capacityRebalance")
+
+instance
+  Prelude.Hashable
+    FleetSpotMaintenanceStrategies
+  where
+  hashWithSalt
+    _salt
+    FleetSpotMaintenanceStrategies' {..} =
+      _salt `Prelude.hashWithSalt` capacityRebalance
+
+instance
+  Prelude.NFData
+    FleetSpotMaintenanceStrategies
+  where
+  rnf FleetSpotMaintenanceStrategies' {..} =
+    Prelude.rnf capacityRebalance
diff --git a/gen/Amazonka/EC2/Types/FleetSpotMaintenanceStrategiesRequest.hs b/gen/Amazonka/EC2/Types/FleetSpotMaintenanceStrategiesRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetSpotMaintenanceStrategiesRequest.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetSpotMaintenanceStrategiesRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetSpotMaintenanceStrategiesRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetSpotCapacityRebalanceRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+--
+-- /See:/ 'newFleetSpotMaintenanceStrategiesRequest' smart constructor.
+data FleetSpotMaintenanceStrategiesRequest = FleetSpotMaintenanceStrategiesRequest'
+  { -- | The strategy to use when Amazon EC2 emits a signal that your Spot
+    -- Instance is at an elevated risk of being interrupted.
+    capacityRebalance :: Prelude.Maybe FleetSpotCapacityRebalanceRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetSpotMaintenanceStrategiesRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityRebalance', 'fleetSpotMaintenanceStrategiesRequest_capacityRebalance' - The strategy to use when Amazon EC2 emits a signal that your Spot
+-- Instance is at an elevated risk of being interrupted.
+newFleetSpotMaintenanceStrategiesRequest ::
+  FleetSpotMaintenanceStrategiesRequest
+newFleetSpotMaintenanceStrategiesRequest =
+  FleetSpotMaintenanceStrategiesRequest'
+    { capacityRebalance =
+        Prelude.Nothing
+    }
+
+-- | The strategy to use when Amazon EC2 emits a signal that your Spot
+-- Instance is at an elevated risk of being interrupted.
+fleetSpotMaintenanceStrategiesRequest_capacityRebalance :: Lens.Lens' FleetSpotMaintenanceStrategiesRequest (Prelude.Maybe FleetSpotCapacityRebalanceRequest)
+fleetSpotMaintenanceStrategiesRequest_capacityRebalance = Lens.lens (\FleetSpotMaintenanceStrategiesRequest' {capacityRebalance} -> capacityRebalance) (\s@FleetSpotMaintenanceStrategiesRequest' {} a -> s {capacityRebalance = a} :: FleetSpotMaintenanceStrategiesRequest)
+
+instance
+  Prelude.Hashable
+    FleetSpotMaintenanceStrategiesRequest
+  where
+  hashWithSalt
+    _salt
+    FleetSpotMaintenanceStrategiesRequest' {..} =
+      _salt `Prelude.hashWithSalt` capacityRebalance
+
+instance
+  Prelude.NFData
+    FleetSpotMaintenanceStrategiesRequest
+  where
+  rnf FleetSpotMaintenanceStrategiesRequest' {..} =
+    Prelude.rnf capacityRebalance
+
+instance
+  Data.ToQuery
+    FleetSpotMaintenanceStrategiesRequest
+  where
+  toQuery FleetSpotMaintenanceStrategiesRequest' {..} =
+    Prelude.mconcat
+      ["CapacityRebalance" Data.=: capacityRebalance]
diff --git a/gen/Amazonka/EC2/Types/FleetStateCode.hs b/gen/Amazonka/EC2/Types/FleetStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetStateCode.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetStateCode
+  ( FleetStateCode
+      ( ..,
+        FleetStateCode_Active,
+        FleetStateCode_Deleted,
+        FleetStateCode_Deleted_running,
+        FleetStateCode_Deleted_terminating,
+        FleetStateCode_Failed,
+        FleetStateCode_Modifying,
+        FleetStateCode_Submitted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetStateCode = FleetStateCode'
+  { fromFleetStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetStateCode_Active :: FleetStateCode
+pattern FleetStateCode_Active = FleetStateCode' "active"
+
+pattern FleetStateCode_Deleted :: FleetStateCode
+pattern FleetStateCode_Deleted = FleetStateCode' "deleted"
+
+pattern FleetStateCode_Deleted_running :: FleetStateCode
+pattern FleetStateCode_Deleted_running = FleetStateCode' "deleted_running"
+
+pattern FleetStateCode_Deleted_terminating :: FleetStateCode
+pattern FleetStateCode_Deleted_terminating = FleetStateCode' "deleted_terminating"
+
+pattern FleetStateCode_Failed :: FleetStateCode
+pattern FleetStateCode_Failed = FleetStateCode' "failed"
+
+pattern FleetStateCode_Modifying :: FleetStateCode
+pattern FleetStateCode_Modifying = FleetStateCode' "modifying"
+
+pattern FleetStateCode_Submitted :: FleetStateCode
+pattern FleetStateCode_Submitted = FleetStateCode' "submitted"
+
+{-# COMPLETE
+  FleetStateCode_Active,
+  FleetStateCode_Deleted,
+  FleetStateCode_Deleted_running,
+  FleetStateCode_Deleted_terminating,
+  FleetStateCode_Failed,
+  FleetStateCode_Modifying,
+  FleetStateCode_Submitted,
+  FleetStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FleetType.hs b/gen/Amazonka/EC2/Types/FleetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FleetType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FleetType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FleetType
+  ( FleetType
+      ( ..,
+        FleetType_Instant,
+        FleetType_Maintain,
+        FleetType_Request
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetType = FleetType'
+  { fromFleetType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FleetType_Instant :: FleetType
+pattern FleetType_Instant = FleetType' "instant"
+
+pattern FleetType_Maintain :: FleetType
+pattern FleetType_Maintain = FleetType' "maintain"
+
+pattern FleetType_Request :: FleetType
+pattern FleetType_Request = FleetType' "request"
+
+{-# COMPLETE
+  FleetType_Instant,
+  FleetType_Maintain,
+  FleetType_Request,
+  FleetType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FlowLog.hs b/gen/Amazonka/EC2/Types/FlowLog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FlowLog.hs
@@ -0,0 +1,302 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FlowLog
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FlowLog where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DestinationOptionsResponse
+import Amazonka.EC2.Types.LogDestinationType
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TrafficType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a flow log.
+--
+-- /See:/ 'newFlowLog' smart constructor.
+data FlowLog = FlowLog'
+  { -- | The date and time the flow log was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ARN of the IAM role that allows the service to publish flow logs
+    -- across accounts.
+    deliverCrossAccountRole :: Prelude.Maybe Prelude.Text,
+    -- | Information about the error that occurred. @Rate limited@ indicates that
+    -- CloudWatch Logs throttling has been applied for one or more network
+    -- interfaces, or that you\'ve reached the limit on the number of log
+    -- groups that you can create. @Access error@ indicates that the IAM role
+    -- associated with the flow log does not have sufficient permissions to
+    -- publish to CloudWatch Logs. @Unknown error@ indicates an internal error.
+    deliverLogsErrorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IAM role allows the service to publish logs to CloudWatch
+    -- Logs.
+    deliverLogsPermissionArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the logs delivery (@SUCCESS@ | @FAILED@).
+    deliverLogsStatus :: Prelude.Maybe Prelude.Text,
+    -- | The destination options.
+    destinationOptions :: Prelude.Maybe DestinationOptionsResponse,
+    -- | The ID of the flow log.
+    flowLogId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the flow log (@ACTIVE@).
+    flowLogStatus :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the destination for the flow log data.
+    logDestination :: Prelude.Maybe Prelude.Text,
+    -- | The type of destination for the flow log data.
+    logDestinationType :: Prelude.Maybe LogDestinationType,
+    -- | The format of the flow log record.
+    logFormat :: Prelude.Maybe Prelude.Text,
+    -- | The name of the flow log group.
+    logGroupName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum interval of time, in seconds, during which a flow of packets
+    -- is captured and aggregated into a flow log record.
+    --
+    -- When a network interface is attached to a
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instance>,
+    -- the aggregation interval is always 60 seconds (1 minute) or less,
+    -- regardless of the specified value.
+    --
+    -- Valid Values: @60@ | @600@
+    maxAggregationInterval :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the resource being monitored.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the flow log.
+    tags :: Prelude.Maybe [Tag],
+    -- | The type of traffic captured for the flow log.
+    trafficType :: Prelude.Maybe TrafficType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FlowLog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'flowLog_creationTime' - The date and time the flow log was created.
+--
+-- 'deliverCrossAccountRole', 'flowLog_deliverCrossAccountRole' - The ARN of the IAM role that allows the service to publish flow logs
+-- across accounts.
+--
+-- 'deliverLogsErrorMessage', 'flowLog_deliverLogsErrorMessage' - Information about the error that occurred. @Rate limited@ indicates that
+-- CloudWatch Logs throttling has been applied for one or more network
+-- interfaces, or that you\'ve reached the limit on the number of log
+-- groups that you can create. @Access error@ indicates that the IAM role
+-- associated with the flow log does not have sufficient permissions to
+-- publish to CloudWatch Logs. @Unknown error@ indicates an internal error.
+--
+-- 'deliverLogsPermissionArn', 'flowLog_deliverLogsPermissionArn' - The ARN of the IAM role allows the service to publish logs to CloudWatch
+-- Logs.
+--
+-- 'deliverLogsStatus', 'flowLog_deliverLogsStatus' - The status of the logs delivery (@SUCCESS@ | @FAILED@).
+--
+-- 'destinationOptions', 'flowLog_destinationOptions' - The destination options.
+--
+-- 'flowLogId', 'flowLog_flowLogId' - The ID of the flow log.
+--
+-- 'flowLogStatus', 'flowLog_flowLogStatus' - The status of the flow log (@ACTIVE@).
+--
+-- 'logDestination', 'flowLog_logDestination' - The Amazon Resource Name (ARN) of the destination for the flow log data.
+--
+-- 'logDestinationType', 'flowLog_logDestinationType' - The type of destination for the flow log data.
+--
+-- 'logFormat', 'flowLog_logFormat' - The format of the flow log record.
+--
+-- 'logGroupName', 'flowLog_logGroupName' - The name of the flow log group.
+--
+-- 'maxAggregationInterval', 'flowLog_maxAggregationInterval' - The maximum interval of time, in seconds, during which a flow of packets
+-- is captured and aggregated into a flow log record.
+--
+-- When a network interface is attached to a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instance>,
+-- the aggregation interval is always 60 seconds (1 minute) or less,
+-- regardless of the specified value.
+--
+-- Valid Values: @60@ | @600@
+--
+-- 'resourceId', 'flowLog_resourceId' - The ID of the resource being monitored.
+--
+-- 'tags', 'flowLog_tags' - The tags for the flow log.
+--
+-- 'trafficType', 'flowLog_trafficType' - The type of traffic captured for the flow log.
+newFlowLog ::
+  FlowLog
+newFlowLog =
+  FlowLog'
+    { creationTime = Prelude.Nothing,
+      deliverCrossAccountRole = Prelude.Nothing,
+      deliverLogsErrorMessage = Prelude.Nothing,
+      deliverLogsPermissionArn = Prelude.Nothing,
+      deliverLogsStatus = Prelude.Nothing,
+      destinationOptions = Prelude.Nothing,
+      flowLogId = Prelude.Nothing,
+      flowLogStatus = Prelude.Nothing,
+      logDestination = Prelude.Nothing,
+      logDestinationType = Prelude.Nothing,
+      logFormat = Prelude.Nothing,
+      logGroupName = Prelude.Nothing,
+      maxAggregationInterval = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trafficType = Prelude.Nothing
+    }
+
+-- | The date and time the flow log was created.
+flowLog_creationTime :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.UTCTime)
+flowLog_creationTime = Lens.lens (\FlowLog' {creationTime} -> creationTime) (\s@FlowLog' {} a -> s {creationTime = a} :: FlowLog) Prelude.. Lens.mapping Data._Time
+
+-- | The ARN of the IAM role that allows the service to publish flow logs
+-- across accounts.
+flowLog_deliverCrossAccountRole :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_deliverCrossAccountRole = Lens.lens (\FlowLog' {deliverCrossAccountRole} -> deliverCrossAccountRole) (\s@FlowLog' {} a -> s {deliverCrossAccountRole = a} :: FlowLog)
+
+-- | Information about the error that occurred. @Rate limited@ indicates that
+-- CloudWatch Logs throttling has been applied for one or more network
+-- interfaces, or that you\'ve reached the limit on the number of log
+-- groups that you can create. @Access error@ indicates that the IAM role
+-- associated with the flow log does not have sufficient permissions to
+-- publish to CloudWatch Logs. @Unknown error@ indicates an internal error.
+flowLog_deliverLogsErrorMessage :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_deliverLogsErrorMessage = Lens.lens (\FlowLog' {deliverLogsErrorMessage} -> deliverLogsErrorMessage) (\s@FlowLog' {} a -> s {deliverLogsErrorMessage = a} :: FlowLog)
+
+-- | The ARN of the IAM role allows the service to publish logs to CloudWatch
+-- Logs.
+flowLog_deliverLogsPermissionArn :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_deliverLogsPermissionArn = Lens.lens (\FlowLog' {deliverLogsPermissionArn} -> deliverLogsPermissionArn) (\s@FlowLog' {} a -> s {deliverLogsPermissionArn = a} :: FlowLog)
+
+-- | The status of the logs delivery (@SUCCESS@ | @FAILED@).
+flowLog_deliverLogsStatus :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_deliverLogsStatus = Lens.lens (\FlowLog' {deliverLogsStatus} -> deliverLogsStatus) (\s@FlowLog' {} a -> s {deliverLogsStatus = a} :: FlowLog)
+
+-- | The destination options.
+flowLog_destinationOptions :: Lens.Lens' FlowLog (Prelude.Maybe DestinationOptionsResponse)
+flowLog_destinationOptions = Lens.lens (\FlowLog' {destinationOptions} -> destinationOptions) (\s@FlowLog' {} a -> s {destinationOptions = a} :: FlowLog)
+
+-- | The ID of the flow log.
+flowLog_flowLogId :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_flowLogId = Lens.lens (\FlowLog' {flowLogId} -> flowLogId) (\s@FlowLog' {} a -> s {flowLogId = a} :: FlowLog)
+
+-- | The status of the flow log (@ACTIVE@).
+flowLog_flowLogStatus :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_flowLogStatus = Lens.lens (\FlowLog' {flowLogStatus} -> flowLogStatus) (\s@FlowLog' {} a -> s {flowLogStatus = a} :: FlowLog)
+
+-- | The Amazon Resource Name (ARN) of the destination for the flow log data.
+flowLog_logDestination :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_logDestination = Lens.lens (\FlowLog' {logDestination} -> logDestination) (\s@FlowLog' {} a -> s {logDestination = a} :: FlowLog)
+
+-- | The type of destination for the flow log data.
+flowLog_logDestinationType :: Lens.Lens' FlowLog (Prelude.Maybe LogDestinationType)
+flowLog_logDestinationType = Lens.lens (\FlowLog' {logDestinationType} -> logDestinationType) (\s@FlowLog' {} a -> s {logDestinationType = a} :: FlowLog)
+
+-- | The format of the flow log record.
+flowLog_logFormat :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_logFormat = Lens.lens (\FlowLog' {logFormat} -> logFormat) (\s@FlowLog' {} a -> s {logFormat = a} :: FlowLog)
+
+-- | The name of the flow log group.
+flowLog_logGroupName :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_logGroupName = Lens.lens (\FlowLog' {logGroupName} -> logGroupName) (\s@FlowLog' {} a -> s {logGroupName = a} :: FlowLog)
+
+-- | The maximum interval of time, in seconds, during which a flow of packets
+-- is captured and aggregated into a flow log record.
+--
+-- When a network interface is attached to a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Nitro-based instance>,
+-- the aggregation interval is always 60 seconds (1 minute) or less,
+-- regardless of the specified value.
+--
+-- Valid Values: @60@ | @600@
+flowLog_maxAggregationInterval :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Int)
+flowLog_maxAggregationInterval = Lens.lens (\FlowLog' {maxAggregationInterval} -> maxAggregationInterval) (\s@FlowLog' {} a -> s {maxAggregationInterval = a} :: FlowLog)
+
+-- | The ID of the resource being monitored.
+flowLog_resourceId :: Lens.Lens' FlowLog (Prelude.Maybe Prelude.Text)
+flowLog_resourceId = Lens.lens (\FlowLog' {resourceId} -> resourceId) (\s@FlowLog' {} a -> s {resourceId = a} :: FlowLog)
+
+-- | The tags for the flow log.
+flowLog_tags :: Lens.Lens' FlowLog (Prelude.Maybe [Tag])
+flowLog_tags = Lens.lens (\FlowLog' {tags} -> tags) (\s@FlowLog' {} a -> s {tags = a} :: FlowLog) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of traffic captured for the flow log.
+flowLog_trafficType :: Lens.Lens' FlowLog (Prelude.Maybe TrafficType)
+flowLog_trafficType = Lens.lens (\FlowLog' {trafficType} -> trafficType) (\s@FlowLog' {} a -> s {trafficType = a} :: FlowLog)
+
+instance Data.FromXML FlowLog where
+  parseXML x =
+    FlowLog'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "deliverCrossAccountRole")
+      Prelude.<*> (x Data..@? "deliverLogsErrorMessage")
+      Prelude.<*> (x Data..@? "deliverLogsPermissionArn")
+      Prelude.<*> (x Data..@? "deliverLogsStatus")
+      Prelude.<*> (x Data..@? "destinationOptions")
+      Prelude.<*> (x Data..@? "flowLogId")
+      Prelude.<*> (x Data..@? "flowLogStatus")
+      Prelude.<*> (x Data..@? "logDestination")
+      Prelude.<*> (x Data..@? "logDestinationType")
+      Prelude.<*> (x Data..@? "logFormat")
+      Prelude.<*> (x Data..@? "logGroupName")
+      Prelude.<*> (x Data..@? "maxAggregationInterval")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "trafficType")
+
+instance Prelude.Hashable FlowLog where
+  hashWithSalt _salt FlowLog' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` deliverCrossAccountRole
+      `Prelude.hashWithSalt` deliverLogsErrorMessage
+      `Prelude.hashWithSalt` deliverLogsPermissionArn
+      `Prelude.hashWithSalt` deliverLogsStatus
+      `Prelude.hashWithSalt` destinationOptions
+      `Prelude.hashWithSalt` flowLogId
+      `Prelude.hashWithSalt` flowLogStatus
+      `Prelude.hashWithSalt` logDestination
+      `Prelude.hashWithSalt` logDestinationType
+      `Prelude.hashWithSalt` logFormat
+      `Prelude.hashWithSalt` logGroupName
+      `Prelude.hashWithSalt` maxAggregationInterval
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trafficType
+
+instance Prelude.NFData FlowLog where
+  rnf FlowLog' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf deliverCrossAccountRole
+      `Prelude.seq` Prelude.rnf deliverLogsErrorMessage
+      `Prelude.seq` Prelude.rnf deliverLogsPermissionArn
+      `Prelude.seq` Prelude.rnf deliverLogsStatus
+      `Prelude.seq` Prelude.rnf destinationOptions
+      `Prelude.seq` Prelude.rnf flowLogId
+      `Prelude.seq` Prelude.rnf flowLogStatus
+      `Prelude.seq` Prelude.rnf logDestination
+      `Prelude.seq` Prelude.rnf logDestinationType
+      `Prelude.seq` Prelude.rnf logFormat
+      `Prelude.seq` Prelude.rnf logGroupName
+      `Prelude.seq` Prelude.rnf maxAggregationInterval
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trafficType
diff --git a/gen/Amazonka/EC2/Types/FlowLogsResourceType.hs b/gen/Amazonka/EC2/Types/FlowLogsResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FlowLogsResourceType.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FlowLogsResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FlowLogsResourceType
+  ( FlowLogsResourceType
+      ( ..,
+        FlowLogsResourceType_NetworkInterface,
+        FlowLogsResourceType_Subnet,
+        FlowLogsResourceType_TransitGateway,
+        FlowLogsResourceType_TransitGatewayAttachment,
+        FlowLogsResourceType_VPC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FlowLogsResourceType = FlowLogsResourceType'
+  { fromFlowLogsResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FlowLogsResourceType_NetworkInterface :: FlowLogsResourceType
+pattern FlowLogsResourceType_NetworkInterface = FlowLogsResourceType' "NetworkInterface"
+
+pattern FlowLogsResourceType_Subnet :: FlowLogsResourceType
+pattern FlowLogsResourceType_Subnet = FlowLogsResourceType' "Subnet"
+
+pattern FlowLogsResourceType_TransitGateway :: FlowLogsResourceType
+pattern FlowLogsResourceType_TransitGateway = FlowLogsResourceType' "TransitGateway"
+
+pattern FlowLogsResourceType_TransitGatewayAttachment :: FlowLogsResourceType
+pattern FlowLogsResourceType_TransitGatewayAttachment = FlowLogsResourceType' "TransitGatewayAttachment"
+
+pattern FlowLogsResourceType_VPC :: FlowLogsResourceType
+pattern FlowLogsResourceType_VPC = FlowLogsResourceType' "VPC"
+
+{-# COMPLETE
+  FlowLogsResourceType_NetworkInterface,
+  FlowLogsResourceType_Subnet,
+  FlowLogsResourceType_TransitGateway,
+  FlowLogsResourceType_TransitGatewayAttachment,
+  FlowLogsResourceType_VPC,
+  FlowLogsResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FpgaDeviceInfo.hs b/gen/Amazonka/EC2/Types/FpgaDeviceInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaDeviceInfo.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaDeviceInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaDeviceInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FpgaDeviceMemoryInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the FPGA accelerator for the instance type.
+--
+-- /See:/ 'newFpgaDeviceInfo' smart constructor.
+data FpgaDeviceInfo = FpgaDeviceInfo'
+  { -- | The count of FPGA accelerators for the instance type.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The manufacturer of the FPGA accelerator.
+    manufacturer :: Prelude.Maybe Prelude.Text,
+    -- | Describes the memory for the FPGA accelerator for the instance type.
+    memoryInfo :: Prelude.Maybe FpgaDeviceMemoryInfo,
+    -- | The name of the FPGA accelerator.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FpgaDeviceInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'fpgaDeviceInfo_count' - The count of FPGA accelerators for the instance type.
+--
+-- 'manufacturer', 'fpgaDeviceInfo_manufacturer' - The manufacturer of the FPGA accelerator.
+--
+-- 'memoryInfo', 'fpgaDeviceInfo_memoryInfo' - Describes the memory for the FPGA accelerator for the instance type.
+--
+-- 'name', 'fpgaDeviceInfo_name' - The name of the FPGA accelerator.
+newFpgaDeviceInfo ::
+  FpgaDeviceInfo
+newFpgaDeviceInfo =
+  FpgaDeviceInfo'
+    { count = Prelude.Nothing,
+      manufacturer = Prelude.Nothing,
+      memoryInfo = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The count of FPGA accelerators for the instance type.
+fpgaDeviceInfo_count :: Lens.Lens' FpgaDeviceInfo (Prelude.Maybe Prelude.Int)
+fpgaDeviceInfo_count = Lens.lens (\FpgaDeviceInfo' {count} -> count) (\s@FpgaDeviceInfo' {} a -> s {count = a} :: FpgaDeviceInfo)
+
+-- | The manufacturer of the FPGA accelerator.
+fpgaDeviceInfo_manufacturer :: Lens.Lens' FpgaDeviceInfo (Prelude.Maybe Prelude.Text)
+fpgaDeviceInfo_manufacturer = Lens.lens (\FpgaDeviceInfo' {manufacturer} -> manufacturer) (\s@FpgaDeviceInfo' {} a -> s {manufacturer = a} :: FpgaDeviceInfo)
+
+-- | Describes the memory for the FPGA accelerator for the instance type.
+fpgaDeviceInfo_memoryInfo :: Lens.Lens' FpgaDeviceInfo (Prelude.Maybe FpgaDeviceMemoryInfo)
+fpgaDeviceInfo_memoryInfo = Lens.lens (\FpgaDeviceInfo' {memoryInfo} -> memoryInfo) (\s@FpgaDeviceInfo' {} a -> s {memoryInfo = a} :: FpgaDeviceInfo)
+
+-- | The name of the FPGA accelerator.
+fpgaDeviceInfo_name :: Lens.Lens' FpgaDeviceInfo (Prelude.Maybe Prelude.Text)
+fpgaDeviceInfo_name = Lens.lens (\FpgaDeviceInfo' {name} -> name) (\s@FpgaDeviceInfo' {} a -> s {name = a} :: FpgaDeviceInfo)
+
+instance Data.FromXML FpgaDeviceInfo where
+  parseXML x =
+    FpgaDeviceInfo'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "manufacturer")
+      Prelude.<*> (x Data..@? "memoryInfo")
+      Prelude.<*> (x Data..@? "name")
+
+instance Prelude.Hashable FpgaDeviceInfo where
+  hashWithSalt _salt FpgaDeviceInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` manufacturer
+      `Prelude.hashWithSalt` memoryInfo
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData FpgaDeviceInfo where
+  rnf FpgaDeviceInfo' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf manufacturer
+      `Prelude.seq` Prelude.rnf memoryInfo
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/EC2/Types/FpgaDeviceMemoryInfo.hs b/gen/Amazonka/EC2/Types/FpgaDeviceMemoryInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaDeviceMemoryInfo.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaDeviceMemoryInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaDeviceMemoryInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the memory for the FPGA accelerator for the instance type.
+--
+-- /See:/ 'newFpgaDeviceMemoryInfo' smart constructor.
+data FpgaDeviceMemoryInfo = FpgaDeviceMemoryInfo'
+  { -- | The size of the memory available to the FPGA accelerator, in MiB.
+    sizeInMiB :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FpgaDeviceMemoryInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sizeInMiB', 'fpgaDeviceMemoryInfo_sizeInMiB' - The size of the memory available to the FPGA accelerator, in MiB.
+newFpgaDeviceMemoryInfo ::
+  FpgaDeviceMemoryInfo
+newFpgaDeviceMemoryInfo =
+  FpgaDeviceMemoryInfo' {sizeInMiB = Prelude.Nothing}
+
+-- | The size of the memory available to the FPGA accelerator, in MiB.
+fpgaDeviceMemoryInfo_sizeInMiB :: Lens.Lens' FpgaDeviceMemoryInfo (Prelude.Maybe Prelude.Int)
+fpgaDeviceMemoryInfo_sizeInMiB = Lens.lens (\FpgaDeviceMemoryInfo' {sizeInMiB} -> sizeInMiB) (\s@FpgaDeviceMemoryInfo' {} a -> s {sizeInMiB = a} :: FpgaDeviceMemoryInfo)
+
+instance Data.FromXML FpgaDeviceMemoryInfo where
+  parseXML x =
+    FpgaDeviceMemoryInfo'
+      Prelude.<$> (x Data..@? "sizeInMiB")
+
+instance Prelude.Hashable FpgaDeviceMemoryInfo where
+  hashWithSalt _salt FpgaDeviceMemoryInfo' {..} =
+    _salt `Prelude.hashWithSalt` sizeInMiB
+
+instance Prelude.NFData FpgaDeviceMemoryInfo where
+  rnf FpgaDeviceMemoryInfo' {..} = Prelude.rnf sizeInMiB
diff --git a/gen/Amazonka/EC2/Types/FpgaImage.hs b/gen/Amazonka/EC2/Types/FpgaImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaImage.hs
@@ -0,0 +1,270 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaImage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FpgaImageState
+import Amazonka.EC2.Types.PciId
+import Amazonka.EC2.Types.ProductCode
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Amazon FPGA image (AFI).
+--
+-- /See:/ 'newFpgaImage' smart constructor.
+data FpgaImage = FpgaImage'
+  { -- | The date and time the AFI was created.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether data retention support is enabled for the AFI.
+    dataRetentionSupport :: Prelude.Maybe Prelude.Bool,
+    -- | The description of the AFI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The global FPGA image identifier (AGFI ID).
+    fpgaImageGlobalId :: Prelude.Maybe Prelude.Text,
+    -- | The FPGA image identifier (AFI ID).
+    fpgaImageId :: Prelude.Maybe Prelude.Text,
+    instanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the AFI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The alias of the AFI owner. Possible values include @self@, @amazon@,
+    -- and @aws-marketplace@.
+    ownerAlias :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the AFI.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the PCI bus.
+    pciId :: Prelude.Maybe PciId,
+    -- | The product codes for the AFI.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | Indicates whether the AFI is public.
+    public :: Prelude.Maybe Prelude.Bool,
+    -- | The version of the Amazon Web Services Shell that was used to create the
+    -- bitstream.
+    shellVersion :: Prelude.Maybe Prelude.Text,
+    -- | Information about the state of the AFI.
+    state :: Prelude.Maybe FpgaImageState,
+    -- | Any tags assigned to the AFI.
+    tags :: Prelude.Maybe [Tag],
+    -- | The time of the most recent update to the AFI.
+    updateTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FpgaImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'fpgaImage_createTime' - The date and time the AFI was created.
+--
+-- 'dataRetentionSupport', 'fpgaImage_dataRetentionSupport' - Indicates whether data retention support is enabled for the AFI.
+--
+-- 'description', 'fpgaImage_description' - The description of the AFI.
+--
+-- 'fpgaImageGlobalId', 'fpgaImage_fpgaImageGlobalId' - The global FPGA image identifier (AGFI ID).
+--
+-- 'fpgaImageId', 'fpgaImage_fpgaImageId' - The FPGA image identifier (AFI ID).
+--
+-- 'instanceTypes', 'fpgaImage_instanceTypes' - Undocumented member.
+--
+-- 'name', 'fpgaImage_name' - The name of the AFI.
+--
+-- 'ownerAlias', 'fpgaImage_ownerAlias' - The alias of the AFI owner. Possible values include @self@, @amazon@,
+-- and @aws-marketplace@.
+--
+-- 'ownerId', 'fpgaImage_ownerId' - The ID of the Amazon Web Services account that owns the AFI.
+--
+-- 'pciId', 'fpgaImage_pciId' - Information about the PCI bus.
+--
+-- 'productCodes', 'fpgaImage_productCodes' - The product codes for the AFI.
+--
+-- 'public', 'fpgaImage_public' - Indicates whether the AFI is public.
+--
+-- 'shellVersion', 'fpgaImage_shellVersion' - The version of the Amazon Web Services Shell that was used to create the
+-- bitstream.
+--
+-- 'state', 'fpgaImage_state' - Information about the state of the AFI.
+--
+-- 'tags', 'fpgaImage_tags' - Any tags assigned to the AFI.
+--
+-- 'updateTime', 'fpgaImage_updateTime' - The time of the most recent update to the AFI.
+newFpgaImage ::
+  FpgaImage
+newFpgaImage =
+  FpgaImage'
+    { createTime = Prelude.Nothing,
+      dataRetentionSupport = Prelude.Nothing,
+      description = Prelude.Nothing,
+      fpgaImageGlobalId = Prelude.Nothing,
+      fpgaImageId = Prelude.Nothing,
+      instanceTypes = Prelude.Nothing,
+      name = Prelude.Nothing,
+      ownerAlias = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      pciId = Prelude.Nothing,
+      productCodes = Prelude.Nothing,
+      public = Prelude.Nothing,
+      shellVersion = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updateTime = Prelude.Nothing
+    }
+
+-- | The date and time the AFI was created.
+fpgaImage_createTime :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.UTCTime)
+fpgaImage_createTime = Lens.lens (\FpgaImage' {createTime} -> createTime) (\s@FpgaImage' {} a -> s {createTime = a} :: FpgaImage) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether data retention support is enabled for the AFI.
+fpgaImage_dataRetentionSupport :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Bool)
+fpgaImage_dataRetentionSupport = Lens.lens (\FpgaImage' {dataRetentionSupport} -> dataRetentionSupport) (\s@FpgaImage' {} a -> s {dataRetentionSupport = a} :: FpgaImage)
+
+-- | The description of the AFI.
+fpgaImage_description :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_description = Lens.lens (\FpgaImage' {description} -> description) (\s@FpgaImage' {} a -> s {description = a} :: FpgaImage)
+
+-- | The global FPGA image identifier (AGFI ID).
+fpgaImage_fpgaImageGlobalId :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_fpgaImageGlobalId = Lens.lens (\FpgaImage' {fpgaImageGlobalId} -> fpgaImageGlobalId) (\s@FpgaImage' {} a -> s {fpgaImageGlobalId = a} :: FpgaImage)
+
+-- | The FPGA image identifier (AFI ID).
+fpgaImage_fpgaImageId :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_fpgaImageId = Lens.lens (\FpgaImage' {fpgaImageId} -> fpgaImageId) (\s@FpgaImage' {} a -> s {fpgaImageId = a} :: FpgaImage)
+
+-- | Undocumented member.
+fpgaImage_instanceTypes :: Lens.Lens' FpgaImage (Prelude.Maybe [Prelude.Text])
+fpgaImage_instanceTypes = Lens.lens (\FpgaImage' {instanceTypes} -> instanceTypes) (\s@FpgaImage' {} a -> s {instanceTypes = a} :: FpgaImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the AFI.
+fpgaImage_name :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_name = Lens.lens (\FpgaImage' {name} -> name) (\s@FpgaImage' {} a -> s {name = a} :: FpgaImage)
+
+-- | The alias of the AFI owner. Possible values include @self@, @amazon@,
+-- and @aws-marketplace@.
+fpgaImage_ownerAlias :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_ownerAlias = Lens.lens (\FpgaImage' {ownerAlias} -> ownerAlias) (\s@FpgaImage' {} a -> s {ownerAlias = a} :: FpgaImage)
+
+-- | The ID of the Amazon Web Services account that owns the AFI.
+fpgaImage_ownerId :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_ownerId = Lens.lens (\FpgaImage' {ownerId} -> ownerId) (\s@FpgaImage' {} a -> s {ownerId = a} :: FpgaImage)
+
+-- | Information about the PCI bus.
+fpgaImage_pciId :: Lens.Lens' FpgaImage (Prelude.Maybe PciId)
+fpgaImage_pciId = Lens.lens (\FpgaImage' {pciId} -> pciId) (\s@FpgaImage' {} a -> s {pciId = a} :: FpgaImage)
+
+-- | The product codes for the AFI.
+fpgaImage_productCodes :: Lens.Lens' FpgaImage (Prelude.Maybe [ProductCode])
+fpgaImage_productCodes = Lens.lens (\FpgaImage' {productCodes} -> productCodes) (\s@FpgaImage' {} a -> s {productCodes = a} :: FpgaImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the AFI is public.
+fpgaImage_public :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Bool)
+fpgaImage_public = Lens.lens (\FpgaImage' {public} -> public) (\s@FpgaImage' {} a -> s {public = a} :: FpgaImage)
+
+-- | The version of the Amazon Web Services Shell that was used to create the
+-- bitstream.
+fpgaImage_shellVersion :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.Text)
+fpgaImage_shellVersion = Lens.lens (\FpgaImage' {shellVersion} -> shellVersion) (\s@FpgaImage' {} a -> s {shellVersion = a} :: FpgaImage)
+
+-- | Information about the state of the AFI.
+fpgaImage_state :: Lens.Lens' FpgaImage (Prelude.Maybe FpgaImageState)
+fpgaImage_state = Lens.lens (\FpgaImage' {state} -> state) (\s@FpgaImage' {} a -> s {state = a} :: FpgaImage)
+
+-- | Any tags assigned to the AFI.
+fpgaImage_tags :: Lens.Lens' FpgaImage (Prelude.Maybe [Tag])
+fpgaImage_tags = Lens.lens (\FpgaImage' {tags} -> tags) (\s@FpgaImage' {} a -> s {tags = a} :: FpgaImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time of the most recent update to the AFI.
+fpgaImage_updateTime :: Lens.Lens' FpgaImage (Prelude.Maybe Prelude.UTCTime)
+fpgaImage_updateTime = Lens.lens (\FpgaImage' {updateTime} -> updateTime) (\s@FpgaImage' {} a -> s {updateTime = a} :: FpgaImage) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML FpgaImage where
+  parseXML x =
+    FpgaImage'
+      Prelude.<$> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "dataRetentionSupport")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "fpgaImageGlobalId")
+      Prelude.<*> (x Data..@? "fpgaImageId")
+      Prelude.<*> ( x
+                      Data..@? "instanceTypes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "ownerAlias")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "pciId")
+      Prelude.<*> ( x
+                      Data..@? "productCodes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "public")
+      Prelude.<*> (x Data..@? "shellVersion")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tags"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "updateTime")
+
+instance Prelude.Hashable FpgaImage where
+  hashWithSalt _salt FpgaImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` dataRetentionSupport
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fpgaImageGlobalId
+      `Prelude.hashWithSalt` fpgaImageId
+      `Prelude.hashWithSalt` instanceTypes
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` ownerAlias
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` pciId
+      `Prelude.hashWithSalt` productCodes
+      `Prelude.hashWithSalt` public
+      `Prelude.hashWithSalt` shellVersion
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData FpgaImage where
+  rnf FpgaImage' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf dataRetentionSupport
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fpgaImageGlobalId
+      `Prelude.seq` Prelude.rnf fpgaImageId
+      `Prelude.seq` Prelude.rnf instanceTypes
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf ownerAlias
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf pciId
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf public
+      `Prelude.seq` Prelude.rnf shellVersion
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/EC2/Types/FpgaImageAttribute.hs b/gen/Amazonka/EC2/Types/FpgaImageAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaImageAttribute.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaImageAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaImageAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LoadPermission
+import Amazonka.EC2.Types.ProductCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Amazon FPGA image (AFI) attribute.
+--
+-- /See:/ 'newFpgaImageAttribute' smart constructor.
+data FpgaImageAttribute = FpgaImageAttribute'
+  { -- | The description of the AFI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AFI.
+    fpgaImageId :: Prelude.Maybe Prelude.Text,
+    -- | The load permissions.
+    loadPermissions :: Prelude.Maybe [LoadPermission],
+    -- | The name of the AFI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The product codes.
+    productCodes :: Prelude.Maybe [ProductCode]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FpgaImageAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'fpgaImageAttribute_description' - The description of the AFI.
+--
+-- 'fpgaImageId', 'fpgaImageAttribute_fpgaImageId' - The ID of the AFI.
+--
+-- 'loadPermissions', 'fpgaImageAttribute_loadPermissions' - The load permissions.
+--
+-- 'name', 'fpgaImageAttribute_name' - The name of the AFI.
+--
+-- 'productCodes', 'fpgaImageAttribute_productCodes' - The product codes.
+newFpgaImageAttribute ::
+  FpgaImageAttribute
+newFpgaImageAttribute =
+  FpgaImageAttribute'
+    { description = Prelude.Nothing,
+      fpgaImageId = Prelude.Nothing,
+      loadPermissions = Prelude.Nothing,
+      name = Prelude.Nothing,
+      productCodes = Prelude.Nothing
+    }
+
+-- | The description of the AFI.
+fpgaImageAttribute_description :: Lens.Lens' FpgaImageAttribute (Prelude.Maybe Prelude.Text)
+fpgaImageAttribute_description = Lens.lens (\FpgaImageAttribute' {description} -> description) (\s@FpgaImageAttribute' {} a -> s {description = a} :: FpgaImageAttribute)
+
+-- | The ID of the AFI.
+fpgaImageAttribute_fpgaImageId :: Lens.Lens' FpgaImageAttribute (Prelude.Maybe Prelude.Text)
+fpgaImageAttribute_fpgaImageId = Lens.lens (\FpgaImageAttribute' {fpgaImageId} -> fpgaImageId) (\s@FpgaImageAttribute' {} a -> s {fpgaImageId = a} :: FpgaImageAttribute)
+
+-- | The load permissions.
+fpgaImageAttribute_loadPermissions :: Lens.Lens' FpgaImageAttribute (Prelude.Maybe [LoadPermission])
+fpgaImageAttribute_loadPermissions = Lens.lens (\FpgaImageAttribute' {loadPermissions} -> loadPermissions) (\s@FpgaImageAttribute' {} a -> s {loadPermissions = a} :: FpgaImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the AFI.
+fpgaImageAttribute_name :: Lens.Lens' FpgaImageAttribute (Prelude.Maybe Prelude.Text)
+fpgaImageAttribute_name = Lens.lens (\FpgaImageAttribute' {name} -> name) (\s@FpgaImageAttribute' {} a -> s {name = a} :: FpgaImageAttribute)
+
+-- | The product codes.
+fpgaImageAttribute_productCodes :: Lens.Lens' FpgaImageAttribute (Prelude.Maybe [ProductCode])
+fpgaImageAttribute_productCodes = Lens.lens (\FpgaImageAttribute' {productCodes} -> productCodes) (\s@FpgaImageAttribute' {} a -> s {productCodes = a} :: FpgaImageAttribute) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML FpgaImageAttribute where
+  parseXML x =
+    FpgaImageAttribute'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "fpgaImageId")
+      Prelude.<*> ( x
+                      Data..@? "loadPermissions"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "name")
+      Prelude.<*> ( x
+                      Data..@? "productCodes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable FpgaImageAttribute where
+  hashWithSalt _salt FpgaImageAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fpgaImageId
+      `Prelude.hashWithSalt` loadPermissions
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` productCodes
+
+instance Prelude.NFData FpgaImageAttribute where
+  rnf FpgaImageAttribute' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fpgaImageId
+      `Prelude.seq` Prelude.rnf loadPermissions
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf productCodes
diff --git a/gen/Amazonka/EC2/Types/FpgaImageAttributeName.hs b/gen/Amazonka/EC2/Types/FpgaImageAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaImageAttributeName.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaImageAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaImageAttributeName
+  ( FpgaImageAttributeName
+      ( ..,
+        FpgaImageAttributeName_Description,
+        FpgaImageAttributeName_LoadPermission,
+        FpgaImageAttributeName_Name,
+        FpgaImageAttributeName_ProductCodes
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FpgaImageAttributeName = FpgaImageAttributeName'
+  { fromFpgaImageAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FpgaImageAttributeName_Description :: FpgaImageAttributeName
+pattern FpgaImageAttributeName_Description = FpgaImageAttributeName' "description"
+
+pattern FpgaImageAttributeName_LoadPermission :: FpgaImageAttributeName
+pattern FpgaImageAttributeName_LoadPermission = FpgaImageAttributeName' "loadPermission"
+
+pattern FpgaImageAttributeName_Name :: FpgaImageAttributeName
+pattern FpgaImageAttributeName_Name = FpgaImageAttributeName' "name"
+
+pattern FpgaImageAttributeName_ProductCodes :: FpgaImageAttributeName
+pattern FpgaImageAttributeName_ProductCodes = FpgaImageAttributeName' "productCodes"
+
+{-# COMPLETE
+  FpgaImageAttributeName_Description,
+  FpgaImageAttributeName_LoadPermission,
+  FpgaImageAttributeName_Name,
+  FpgaImageAttributeName_ProductCodes,
+  FpgaImageAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FpgaImageState.hs b/gen/Amazonka/EC2/Types/FpgaImageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaImageState.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaImageState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaImageState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FpgaImageStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of the bitstream generation process for an Amazon
+-- FPGA image (AFI).
+--
+-- /See:/ 'newFpgaImageState' smart constructor.
+data FpgaImageState = FpgaImageState'
+  { -- | The state. The following are the possible values:
+    --
+    -- -   @pending@ - AFI bitstream generation is in progress.
+    --
+    -- -   @available@ - The AFI is available for use.
+    --
+    -- -   @failed@ - AFI bitstream generation failed.
+    --
+    -- -   @unavailable@ - The AFI is no longer available for use.
+    code :: Prelude.Maybe FpgaImageStateCode,
+    -- | If the state is @failed@, this is the error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FpgaImageState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'fpgaImageState_code' - The state. The following are the possible values:
+--
+-- -   @pending@ - AFI bitstream generation is in progress.
+--
+-- -   @available@ - The AFI is available for use.
+--
+-- -   @failed@ - AFI bitstream generation failed.
+--
+-- -   @unavailable@ - The AFI is no longer available for use.
+--
+-- 'message', 'fpgaImageState_message' - If the state is @failed@, this is the error message.
+newFpgaImageState ::
+  FpgaImageState
+newFpgaImageState =
+  FpgaImageState'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state. The following are the possible values:
+--
+-- -   @pending@ - AFI bitstream generation is in progress.
+--
+-- -   @available@ - The AFI is available for use.
+--
+-- -   @failed@ - AFI bitstream generation failed.
+--
+-- -   @unavailable@ - The AFI is no longer available for use.
+fpgaImageState_code :: Lens.Lens' FpgaImageState (Prelude.Maybe FpgaImageStateCode)
+fpgaImageState_code = Lens.lens (\FpgaImageState' {code} -> code) (\s@FpgaImageState' {} a -> s {code = a} :: FpgaImageState)
+
+-- | If the state is @failed@, this is the error message.
+fpgaImageState_message :: Lens.Lens' FpgaImageState (Prelude.Maybe Prelude.Text)
+fpgaImageState_message = Lens.lens (\FpgaImageState' {message} -> message) (\s@FpgaImageState' {} a -> s {message = a} :: FpgaImageState)
+
+instance Data.FromXML FpgaImageState where
+  parseXML x =
+    FpgaImageState'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable FpgaImageState where
+  hashWithSalt _salt FpgaImageState' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData FpgaImageState where
+  rnf FpgaImageState' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/FpgaImageStateCode.hs b/gen/Amazonka/EC2/Types/FpgaImageStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaImageStateCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaImageStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaImageStateCode
+  ( FpgaImageStateCode
+      ( ..,
+        FpgaImageStateCode_Available,
+        FpgaImageStateCode_Failed,
+        FpgaImageStateCode_Pending,
+        FpgaImageStateCode_Unavailable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype FpgaImageStateCode = FpgaImageStateCode'
+  { fromFpgaImageStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FpgaImageStateCode_Available :: FpgaImageStateCode
+pattern FpgaImageStateCode_Available = FpgaImageStateCode' "available"
+
+pattern FpgaImageStateCode_Failed :: FpgaImageStateCode
+pattern FpgaImageStateCode_Failed = FpgaImageStateCode' "failed"
+
+pattern FpgaImageStateCode_Pending :: FpgaImageStateCode
+pattern FpgaImageStateCode_Pending = FpgaImageStateCode' "pending"
+
+pattern FpgaImageStateCode_Unavailable :: FpgaImageStateCode
+pattern FpgaImageStateCode_Unavailable = FpgaImageStateCode' "unavailable"
+
+{-# COMPLETE
+  FpgaImageStateCode_Available,
+  FpgaImageStateCode_Failed,
+  FpgaImageStateCode_Pending,
+  FpgaImageStateCode_Unavailable,
+  FpgaImageStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/FpgaInfo.hs b/gen/Amazonka/EC2/Types/FpgaInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/FpgaInfo.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.FpgaInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.FpgaInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FpgaDeviceInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the FPGAs for the instance type.
+--
+-- /See:/ 'newFpgaInfo' smart constructor.
+data FpgaInfo = FpgaInfo'
+  { -- | Describes the FPGAs for the instance type.
+    fpgas :: Prelude.Maybe [FpgaDeviceInfo],
+    -- | The total memory of all FPGA accelerators for the instance type.
+    totalFpgaMemoryInMiB :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FpgaInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fpgas', 'fpgaInfo_fpgas' - Describes the FPGAs for the instance type.
+--
+-- 'totalFpgaMemoryInMiB', 'fpgaInfo_totalFpgaMemoryInMiB' - The total memory of all FPGA accelerators for the instance type.
+newFpgaInfo ::
+  FpgaInfo
+newFpgaInfo =
+  FpgaInfo'
+    { fpgas = Prelude.Nothing,
+      totalFpgaMemoryInMiB = Prelude.Nothing
+    }
+
+-- | Describes the FPGAs for the instance type.
+fpgaInfo_fpgas :: Lens.Lens' FpgaInfo (Prelude.Maybe [FpgaDeviceInfo])
+fpgaInfo_fpgas = Lens.lens (\FpgaInfo' {fpgas} -> fpgas) (\s@FpgaInfo' {} a -> s {fpgas = a} :: FpgaInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total memory of all FPGA accelerators for the instance type.
+fpgaInfo_totalFpgaMemoryInMiB :: Lens.Lens' FpgaInfo (Prelude.Maybe Prelude.Int)
+fpgaInfo_totalFpgaMemoryInMiB = Lens.lens (\FpgaInfo' {totalFpgaMemoryInMiB} -> totalFpgaMemoryInMiB) (\s@FpgaInfo' {} a -> s {totalFpgaMemoryInMiB = a} :: FpgaInfo)
+
+instance Data.FromXML FpgaInfo where
+  parseXML x =
+    FpgaInfo'
+      Prelude.<$> ( x
+                      Data..@? "fpgas"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "totalFpgaMemoryInMiB")
+
+instance Prelude.Hashable FpgaInfo where
+  hashWithSalt _salt FpgaInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` fpgas
+      `Prelude.hashWithSalt` totalFpgaMemoryInMiB
+
+instance Prelude.NFData FpgaInfo where
+  rnf FpgaInfo' {..} =
+    Prelude.rnf fpgas
+      `Prelude.seq` Prelude.rnf totalFpgaMemoryInMiB
diff --git a/gen/Amazonka/EC2/Types/GatewayAssociationState.hs b/gen/Amazonka/EC2/Types/GatewayAssociationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/GatewayAssociationState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.GatewayAssociationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.GatewayAssociationState
+  ( GatewayAssociationState
+      ( ..,
+        GatewayAssociationState_Associated,
+        GatewayAssociationState_Associating,
+        GatewayAssociationState_Disassociating,
+        GatewayAssociationState_Not_associated
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype GatewayAssociationState = GatewayAssociationState'
+  { fromGatewayAssociationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern GatewayAssociationState_Associated :: GatewayAssociationState
+pattern GatewayAssociationState_Associated = GatewayAssociationState' "associated"
+
+pattern GatewayAssociationState_Associating :: GatewayAssociationState
+pattern GatewayAssociationState_Associating = GatewayAssociationState' "associating"
+
+pattern GatewayAssociationState_Disassociating :: GatewayAssociationState
+pattern GatewayAssociationState_Disassociating = GatewayAssociationState' "disassociating"
+
+pattern GatewayAssociationState_Not_associated :: GatewayAssociationState
+pattern GatewayAssociationState_Not_associated = GatewayAssociationState' "not-associated"
+
+{-# COMPLETE
+  GatewayAssociationState_Associated,
+  GatewayAssociationState_Associating,
+  GatewayAssociationState_Disassociating,
+  GatewayAssociationState_Not_associated,
+  GatewayAssociationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/GatewayType.hs b/gen/Amazonka/EC2/Types/GatewayType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/GatewayType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.GatewayType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.GatewayType
+  ( GatewayType
+      ( ..,
+        GatewayType_Ipsec_1
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype GatewayType = GatewayType'
+  { fromGatewayType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern GatewayType_Ipsec_1 :: GatewayType
+pattern GatewayType_Ipsec_1 = GatewayType' "ipsec.1"
+
+{-# COMPLETE
+  GatewayType_Ipsec_1,
+  GatewayType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/GpuDeviceInfo.hs b/gen/Amazonka/EC2/Types/GpuDeviceInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/GpuDeviceInfo.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.GpuDeviceInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.GpuDeviceInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GpuDeviceMemoryInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the GPU accelerators for the instance type.
+--
+-- /See:/ 'newGpuDeviceInfo' smart constructor.
+data GpuDeviceInfo = GpuDeviceInfo'
+  { -- | The number of GPUs for the instance type.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The manufacturer of the GPU accelerator.
+    manufacturer :: Prelude.Maybe Prelude.Text,
+    -- | Describes the memory available to the GPU accelerator.
+    memoryInfo :: Prelude.Maybe GpuDeviceMemoryInfo,
+    -- | The name of the GPU accelerator.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GpuDeviceInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'gpuDeviceInfo_count' - The number of GPUs for the instance type.
+--
+-- 'manufacturer', 'gpuDeviceInfo_manufacturer' - The manufacturer of the GPU accelerator.
+--
+-- 'memoryInfo', 'gpuDeviceInfo_memoryInfo' - Describes the memory available to the GPU accelerator.
+--
+-- 'name', 'gpuDeviceInfo_name' - The name of the GPU accelerator.
+newGpuDeviceInfo ::
+  GpuDeviceInfo
+newGpuDeviceInfo =
+  GpuDeviceInfo'
+    { count = Prelude.Nothing,
+      manufacturer = Prelude.Nothing,
+      memoryInfo = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The number of GPUs for the instance type.
+gpuDeviceInfo_count :: Lens.Lens' GpuDeviceInfo (Prelude.Maybe Prelude.Int)
+gpuDeviceInfo_count = Lens.lens (\GpuDeviceInfo' {count} -> count) (\s@GpuDeviceInfo' {} a -> s {count = a} :: GpuDeviceInfo)
+
+-- | The manufacturer of the GPU accelerator.
+gpuDeviceInfo_manufacturer :: Lens.Lens' GpuDeviceInfo (Prelude.Maybe Prelude.Text)
+gpuDeviceInfo_manufacturer = Lens.lens (\GpuDeviceInfo' {manufacturer} -> manufacturer) (\s@GpuDeviceInfo' {} a -> s {manufacturer = a} :: GpuDeviceInfo)
+
+-- | Describes the memory available to the GPU accelerator.
+gpuDeviceInfo_memoryInfo :: Lens.Lens' GpuDeviceInfo (Prelude.Maybe GpuDeviceMemoryInfo)
+gpuDeviceInfo_memoryInfo = Lens.lens (\GpuDeviceInfo' {memoryInfo} -> memoryInfo) (\s@GpuDeviceInfo' {} a -> s {memoryInfo = a} :: GpuDeviceInfo)
+
+-- | The name of the GPU accelerator.
+gpuDeviceInfo_name :: Lens.Lens' GpuDeviceInfo (Prelude.Maybe Prelude.Text)
+gpuDeviceInfo_name = Lens.lens (\GpuDeviceInfo' {name} -> name) (\s@GpuDeviceInfo' {} a -> s {name = a} :: GpuDeviceInfo)
+
+instance Data.FromXML GpuDeviceInfo where
+  parseXML x =
+    GpuDeviceInfo'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "manufacturer")
+      Prelude.<*> (x Data..@? "memoryInfo")
+      Prelude.<*> (x Data..@? "name")
+
+instance Prelude.Hashable GpuDeviceInfo where
+  hashWithSalt _salt GpuDeviceInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` manufacturer
+      `Prelude.hashWithSalt` memoryInfo
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData GpuDeviceInfo where
+  rnf GpuDeviceInfo' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf manufacturer
+      `Prelude.seq` Prelude.rnf memoryInfo
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/EC2/Types/GpuDeviceMemoryInfo.hs b/gen/Amazonka/EC2/Types/GpuDeviceMemoryInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/GpuDeviceMemoryInfo.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.GpuDeviceMemoryInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.GpuDeviceMemoryInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the memory available to the GPU accelerator.
+--
+-- /See:/ 'newGpuDeviceMemoryInfo' smart constructor.
+data GpuDeviceMemoryInfo = GpuDeviceMemoryInfo'
+  { -- | The size of the memory available to the GPU accelerator, in MiB.
+    sizeInMiB :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GpuDeviceMemoryInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sizeInMiB', 'gpuDeviceMemoryInfo_sizeInMiB' - The size of the memory available to the GPU accelerator, in MiB.
+newGpuDeviceMemoryInfo ::
+  GpuDeviceMemoryInfo
+newGpuDeviceMemoryInfo =
+  GpuDeviceMemoryInfo' {sizeInMiB = Prelude.Nothing}
+
+-- | The size of the memory available to the GPU accelerator, in MiB.
+gpuDeviceMemoryInfo_sizeInMiB :: Lens.Lens' GpuDeviceMemoryInfo (Prelude.Maybe Prelude.Int)
+gpuDeviceMemoryInfo_sizeInMiB = Lens.lens (\GpuDeviceMemoryInfo' {sizeInMiB} -> sizeInMiB) (\s@GpuDeviceMemoryInfo' {} a -> s {sizeInMiB = a} :: GpuDeviceMemoryInfo)
+
+instance Data.FromXML GpuDeviceMemoryInfo where
+  parseXML x =
+    GpuDeviceMemoryInfo'
+      Prelude.<$> (x Data..@? "sizeInMiB")
+
+instance Prelude.Hashable GpuDeviceMemoryInfo where
+  hashWithSalt _salt GpuDeviceMemoryInfo' {..} =
+    _salt `Prelude.hashWithSalt` sizeInMiB
+
+instance Prelude.NFData GpuDeviceMemoryInfo where
+  rnf GpuDeviceMemoryInfo' {..} = Prelude.rnf sizeInMiB
diff --git a/gen/Amazonka/EC2/Types/GpuInfo.hs b/gen/Amazonka/EC2/Types/GpuInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/GpuInfo.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.GpuInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.GpuInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GpuDeviceInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the GPU accelerators for the instance type.
+--
+-- /See:/ 'newGpuInfo' smart constructor.
+data GpuInfo = GpuInfo'
+  { -- | Describes the GPU accelerators for the instance type.
+    gpus :: Prelude.Maybe [GpuDeviceInfo],
+    -- | The total size of the memory for the GPU accelerators for the instance
+    -- type, in MiB.
+    totalGpuMemoryInMiB :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GpuInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gpus', 'gpuInfo_gpus' - Describes the GPU accelerators for the instance type.
+--
+-- 'totalGpuMemoryInMiB', 'gpuInfo_totalGpuMemoryInMiB' - The total size of the memory for the GPU accelerators for the instance
+-- type, in MiB.
+newGpuInfo ::
+  GpuInfo
+newGpuInfo =
+  GpuInfo'
+    { gpus = Prelude.Nothing,
+      totalGpuMemoryInMiB = Prelude.Nothing
+    }
+
+-- | Describes the GPU accelerators for the instance type.
+gpuInfo_gpus :: Lens.Lens' GpuInfo (Prelude.Maybe [GpuDeviceInfo])
+gpuInfo_gpus = Lens.lens (\GpuInfo' {gpus} -> gpus) (\s@GpuInfo' {} a -> s {gpus = a} :: GpuInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total size of the memory for the GPU accelerators for the instance
+-- type, in MiB.
+gpuInfo_totalGpuMemoryInMiB :: Lens.Lens' GpuInfo (Prelude.Maybe Prelude.Int)
+gpuInfo_totalGpuMemoryInMiB = Lens.lens (\GpuInfo' {totalGpuMemoryInMiB} -> totalGpuMemoryInMiB) (\s@GpuInfo' {} a -> s {totalGpuMemoryInMiB = a} :: GpuInfo)
+
+instance Data.FromXML GpuInfo where
+  parseXML x =
+    GpuInfo'
+      Prelude.<$> ( x
+                      Data..@? "gpus"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "totalGpuMemoryInMiB")
+
+instance Prelude.Hashable GpuInfo where
+  hashWithSalt _salt GpuInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` gpus
+      `Prelude.hashWithSalt` totalGpuMemoryInMiB
+
+instance Prelude.NFData GpuInfo where
+  rnf GpuInfo' {..} =
+    Prelude.rnf gpus
+      `Prelude.seq` Prelude.rnf totalGpuMemoryInMiB
diff --git a/gen/Amazonka/EC2/Types/GroupIdentifier.hs b/gen/Amazonka/EC2/Types/GroupIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/GroupIdentifier.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.GroupIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.GroupIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group.
+--
+-- /See:/ 'newGroupIdentifier' smart constructor.
+data GroupIdentifier = GroupIdentifier'
+  { -- | The ID of the security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the security group.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GroupIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'groupIdentifier_groupId' - The ID of the security group.
+--
+-- 'groupName', 'groupIdentifier_groupName' - The name of the security group.
+newGroupIdentifier ::
+  GroupIdentifier
+newGroupIdentifier =
+  GroupIdentifier'
+    { groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing
+    }
+
+-- | The ID of the security group.
+groupIdentifier_groupId :: Lens.Lens' GroupIdentifier (Prelude.Maybe Prelude.Text)
+groupIdentifier_groupId = Lens.lens (\GroupIdentifier' {groupId} -> groupId) (\s@GroupIdentifier' {} a -> s {groupId = a} :: GroupIdentifier)
+
+-- | The name of the security group.
+groupIdentifier_groupName :: Lens.Lens' GroupIdentifier (Prelude.Maybe Prelude.Text)
+groupIdentifier_groupName = Lens.lens (\GroupIdentifier' {groupName} -> groupName) (\s@GroupIdentifier' {} a -> s {groupName = a} :: GroupIdentifier)
+
+instance Data.FromXML GroupIdentifier where
+  parseXML x =
+    GroupIdentifier'
+      Prelude.<$> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+
+instance Prelude.Hashable GroupIdentifier where
+  hashWithSalt _salt GroupIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData GroupIdentifier where
+  rnf GroupIdentifier' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+
+instance Data.ToQuery GroupIdentifier where
+  toQuery GroupIdentifier' {..} =
+    Prelude.mconcat
+      [ "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName
+      ]
diff --git a/gen/Amazonka/EC2/Types/HibernationOptions.hs b/gen/Amazonka/EC2/Types/HibernationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HibernationOptions.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HibernationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HibernationOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether your instance is configured for hibernation. This
+-- parameter is valid only if the instance meets the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites hibernation prerequisites>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newHibernationOptions' smart constructor.
+data HibernationOptions = HibernationOptions'
+  { -- | If this parameter is set to @true@, your instance is enabled for
+    -- hibernation; otherwise, it is not enabled for hibernation.
+    configured :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HibernationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configured', 'hibernationOptions_configured' - If this parameter is set to @true@, your instance is enabled for
+-- hibernation; otherwise, it is not enabled for hibernation.
+newHibernationOptions ::
+  HibernationOptions
+newHibernationOptions =
+  HibernationOptions' {configured = Prelude.Nothing}
+
+-- | If this parameter is set to @true@, your instance is enabled for
+-- hibernation; otherwise, it is not enabled for hibernation.
+hibernationOptions_configured :: Lens.Lens' HibernationOptions (Prelude.Maybe Prelude.Bool)
+hibernationOptions_configured = Lens.lens (\HibernationOptions' {configured} -> configured) (\s@HibernationOptions' {} a -> s {configured = a} :: HibernationOptions)
+
+instance Data.FromXML HibernationOptions where
+  parseXML x =
+    HibernationOptions'
+      Prelude.<$> (x Data..@? "configured")
+
+instance Prelude.Hashable HibernationOptions where
+  hashWithSalt _salt HibernationOptions' {..} =
+    _salt `Prelude.hashWithSalt` configured
+
+instance Prelude.NFData HibernationOptions where
+  rnf HibernationOptions' {..} = Prelude.rnf configured
diff --git a/gen/Amazonka/EC2/Types/HibernationOptionsRequest.hs b/gen/Amazonka/EC2/Types/HibernationOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HibernationOptionsRequest.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HibernationOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HibernationOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether your instance is configured for hibernation. This
+-- parameter is valid only if the instance meets the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html#hibernating-prerequisites hibernation prerequisites>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newHibernationOptionsRequest' smart constructor.
+data HibernationOptionsRequest = HibernationOptionsRequest'
+  { -- | If you set this parameter to @true@, your instance is enabled for
+    -- hibernation.
+    --
+    -- Default: @false@
+    configured :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HibernationOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configured', 'hibernationOptionsRequest_configured' - If you set this parameter to @true@, your instance is enabled for
+-- hibernation.
+--
+-- Default: @false@
+newHibernationOptionsRequest ::
+  HibernationOptionsRequest
+newHibernationOptionsRequest =
+  HibernationOptionsRequest'
+    { configured =
+        Prelude.Nothing
+    }
+
+-- | If you set this parameter to @true@, your instance is enabled for
+-- hibernation.
+--
+-- Default: @false@
+hibernationOptionsRequest_configured :: Lens.Lens' HibernationOptionsRequest (Prelude.Maybe Prelude.Bool)
+hibernationOptionsRequest_configured = Lens.lens (\HibernationOptionsRequest' {configured} -> configured) (\s@HibernationOptionsRequest' {} a -> s {configured = a} :: HibernationOptionsRequest)
+
+instance Prelude.Hashable HibernationOptionsRequest where
+  hashWithSalt _salt HibernationOptionsRequest' {..} =
+    _salt `Prelude.hashWithSalt` configured
+
+instance Prelude.NFData HibernationOptionsRequest where
+  rnf HibernationOptionsRequest' {..} =
+    Prelude.rnf configured
+
+instance Data.ToQuery HibernationOptionsRequest where
+  toQuery HibernationOptionsRequest' {..} =
+    Prelude.mconcat ["Configured" Data.=: configured]
diff --git a/gen/Amazonka/EC2/Types/HistoryRecord.hs b/gen/Amazonka/EC2/Types/HistoryRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HistoryRecord.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HistoryRecord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HistoryRecord where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EventInformation
+import Amazonka.EC2.Types.EventType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an event in the history of the Spot Fleet request.
+--
+-- /See:/ 'newHistoryRecord' smart constructor.
+data HistoryRecord = HistoryRecord'
+  { -- | Information about the event.
+    eventInformation :: Prelude.Maybe EventInformation,
+    -- | The event type.
+    --
+    -- -   @error@ - An error with the Spot Fleet request.
+    --
+    -- -   @fleetRequestChange@ - A change in the status or configuration of
+    --     the Spot Fleet request.
+    --
+    -- -   @instanceChange@ - An instance was launched or terminated.
+    --
+    -- -   @Information@ - An informational event.
+    eventType :: Prelude.Maybe EventType,
+    -- | The date and time of the event, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    timestamp :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HistoryRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventInformation', 'historyRecord_eventInformation' - Information about the event.
+--
+-- 'eventType', 'historyRecord_eventType' - The event type.
+--
+-- -   @error@ - An error with the Spot Fleet request.
+--
+-- -   @fleetRequestChange@ - A change in the status or configuration of
+--     the Spot Fleet request.
+--
+-- -   @instanceChange@ - An instance was launched or terminated.
+--
+-- -   @Information@ - An informational event.
+--
+-- 'timestamp', 'historyRecord_timestamp' - The date and time of the event, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newHistoryRecord ::
+  HistoryRecord
+newHistoryRecord =
+  HistoryRecord'
+    { eventInformation = Prelude.Nothing,
+      eventType = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | Information about the event.
+historyRecord_eventInformation :: Lens.Lens' HistoryRecord (Prelude.Maybe EventInformation)
+historyRecord_eventInformation = Lens.lens (\HistoryRecord' {eventInformation} -> eventInformation) (\s@HistoryRecord' {} a -> s {eventInformation = a} :: HistoryRecord)
+
+-- | The event type.
+--
+-- -   @error@ - An error with the Spot Fleet request.
+--
+-- -   @fleetRequestChange@ - A change in the status or configuration of
+--     the Spot Fleet request.
+--
+-- -   @instanceChange@ - An instance was launched or terminated.
+--
+-- -   @Information@ - An informational event.
+historyRecord_eventType :: Lens.Lens' HistoryRecord (Prelude.Maybe EventType)
+historyRecord_eventType = Lens.lens (\HistoryRecord' {eventType} -> eventType) (\s@HistoryRecord' {} a -> s {eventType = a} :: HistoryRecord)
+
+-- | The date and time of the event, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+historyRecord_timestamp :: Lens.Lens' HistoryRecord (Prelude.Maybe Prelude.UTCTime)
+historyRecord_timestamp = Lens.lens (\HistoryRecord' {timestamp} -> timestamp) (\s@HistoryRecord' {} a -> s {timestamp = a} :: HistoryRecord) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML HistoryRecord where
+  parseXML x =
+    HistoryRecord'
+      Prelude.<$> (x Data..@? "eventInformation")
+      Prelude.<*> (x Data..@? "eventType")
+      Prelude.<*> (x Data..@? "timestamp")
+
+instance Prelude.Hashable HistoryRecord where
+  hashWithSalt _salt HistoryRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventInformation
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData HistoryRecord where
+  rnf HistoryRecord' {..} =
+    Prelude.rnf eventInformation
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/EC2/Types/HistoryRecordEntry.hs b/gen/Amazonka/EC2/Types/HistoryRecordEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HistoryRecordEntry.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HistoryRecordEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HistoryRecordEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EventInformation
+import Amazonka.EC2.Types.FleetEventType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an event in the history of an EC2 Fleet.
+--
+-- /See:/ 'newHistoryRecordEntry' smart constructor.
+data HistoryRecordEntry = HistoryRecordEntry'
+  { -- | Information about the event.
+    eventInformation :: Prelude.Maybe EventInformation,
+    -- | The event type.
+    eventType :: Prelude.Maybe FleetEventType,
+    -- | The date and time of the event, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    timestamp :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HistoryRecordEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventInformation', 'historyRecordEntry_eventInformation' - Information about the event.
+--
+-- 'eventType', 'historyRecordEntry_eventType' - The event type.
+--
+-- 'timestamp', 'historyRecordEntry_timestamp' - The date and time of the event, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newHistoryRecordEntry ::
+  HistoryRecordEntry
+newHistoryRecordEntry =
+  HistoryRecordEntry'
+    { eventInformation =
+        Prelude.Nothing,
+      eventType = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | Information about the event.
+historyRecordEntry_eventInformation :: Lens.Lens' HistoryRecordEntry (Prelude.Maybe EventInformation)
+historyRecordEntry_eventInformation = Lens.lens (\HistoryRecordEntry' {eventInformation} -> eventInformation) (\s@HistoryRecordEntry' {} a -> s {eventInformation = a} :: HistoryRecordEntry)
+
+-- | The event type.
+historyRecordEntry_eventType :: Lens.Lens' HistoryRecordEntry (Prelude.Maybe FleetEventType)
+historyRecordEntry_eventType = Lens.lens (\HistoryRecordEntry' {eventType} -> eventType) (\s@HistoryRecordEntry' {} a -> s {eventType = a} :: HistoryRecordEntry)
+
+-- | The date and time of the event, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+historyRecordEntry_timestamp :: Lens.Lens' HistoryRecordEntry (Prelude.Maybe Prelude.UTCTime)
+historyRecordEntry_timestamp = Lens.lens (\HistoryRecordEntry' {timestamp} -> timestamp) (\s@HistoryRecordEntry' {} a -> s {timestamp = a} :: HistoryRecordEntry) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML HistoryRecordEntry where
+  parseXML x =
+    HistoryRecordEntry'
+      Prelude.<$> (x Data..@? "eventInformation")
+      Prelude.<*> (x Data..@? "eventType")
+      Prelude.<*> (x Data..@? "timestamp")
+
+instance Prelude.Hashable HistoryRecordEntry where
+  hashWithSalt _salt HistoryRecordEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventInformation
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData HistoryRecordEntry where
+  rnf HistoryRecordEntry' {..} =
+    Prelude.rnf eventInformation
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/EC2/Types/Host.hs b/gen/Amazonka/EC2/Types/Host.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Host.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Host
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Host where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AllocationState
+import Amazonka.EC2.Types.AllowsMultipleInstanceTypes
+import Amazonka.EC2.Types.AutoPlacement
+import Amazonka.EC2.Types.AvailableCapacity
+import Amazonka.EC2.Types.HostInstance
+import Amazonka.EC2.Types.HostProperties
+import Amazonka.EC2.Types.HostRecovery
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the properties of the Dedicated Host.
+--
+-- /See:/ 'newHost' smart constructor.
+data Host = Host'
+  { -- | The time that the Dedicated Host was allocated.
+    allocationTime :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether the Dedicated Host supports multiple instance types of
+    -- the same instance family. If the value is @on@, the Dedicated Host
+    -- supports multiple instance types in the instance family. If the value is
+    -- @off@, the Dedicated Host supports a single instance type only.
+    allowsMultipleInstanceTypes :: Prelude.Maybe AllowsMultipleInstanceTypes,
+    -- | Whether auto-placement is on or off.
+    autoPlacement :: Prelude.Maybe AutoPlacement,
+    -- | The Availability Zone of the Dedicated Host.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Availability Zone in which the Dedicated Host is
+    -- allocated.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the instances running on the Dedicated Host.
+    availableCapacity :: Prelude.Maybe AvailableCapacity,
+    -- | Unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of the request. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Dedicated Host.
+    hostId :: Prelude.Maybe Prelude.Text,
+    -- | The hardware specifications of the Dedicated Host.
+    hostProperties :: Prelude.Maybe HostProperties,
+    -- | Indicates whether host recovery is enabled or disabled for the Dedicated
+    -- Host.
+    hostRecovery :: Prelude.Maybe HostRecovery,
+    -- | The reservation ID of the Dedicated Host. This returns a @null@ response
+    -- if the Dedicated Host doesn\'t have an associated reservation.
+    hostReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The IDs and instance type that are currently running on the Dedicated
+    -- Host.
+    instances :: Prelude.Maybe [HostInstance],
+    -- | Indicates whether the Dedicated Host is in a host resource group. If
+    -- __memberOfServiceLinkedResourceGroup__ is @true@, the host is in a host
+    -- resource group; otherwise, it is not.
+    memberOfServiceLinkedResourceGroup :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
+    -- which the Dedicated Host is allocated.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the Dedicated Host.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The time that the Dedicated Host was released.
+    releaseTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Dedicated Host\'s state.
+    state :: Prelude.Maybe AllocationState,
+    -- | Any tags assigned to the Dedicated Host.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Host' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationTime', 'host_allocationTime' - The time that the Dedicated Host was allocated.
+--
+-- 'allowsMultipleInstanceTypes', 'host_allowsMultipleInstanceTypes' - Indicates whether the Dedicated Host supports multiple instance types of
+-- the same instance family. If the value is @on@, the Dedicated Host
+-- supports multiple instance types in the instance family. If the value is
+-- @off@, the Dedicated Host supports a single instance type only.
+--
+-- 'autoPlacement', 'host_autoPlacement' - Whether auto-placement is on or off.
+--
+-- 'availabilityZone', 'host_availabilityZone' - The Availability Zone of the Dedicated Host.
+--
+-- 'availabilityZoneId', 'host_availabilityZoneId' - The ID of the Availability Zone in which the Dedicated Host is
+-- allocated.
+--
+-- 'availableCapacity', 'host_availableCapacity' - Information about the instances running on the Dedicated Host.
+--
+-- 'clientToken', 'host_clientToken' - Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'hostId', 'host_hostId' - The ID of the Dedicated Host.
+--
+-- 'hostProperties', 'host_hostProperties' - The hardware specifications of the Dedicated Host.
+--
+-- 'hostRecovery', 'host_hostRecovery' - Indicates whether host recovery is enabled or disabled for the Dedicated
+-- Host.
+--
+-- 'hostReservationId', 'host_hostReservationId' - The reservation ID of the Dedicated Host. This returns a @null@ response
+-- if the Dedicated Host doesn\'t have an associated reservation.
+--
+-- 'instances', 'host_instances' - The IDs and instance type that are currently running on the Dedicated
+-- Host.
+--
+-- 'memberOfServiceLinkedResourceGroup', 'host_memberOfServiceLinkedResourceGroup' - Indicates whether the Dedicated Host is in a host resource group. If
+-- __memberOfServiceLinkedResourceGroup__ is @true@, the host is in a host
+-- resource group; otherwise, it is not.
+--
+-- 'outpostArn', 'host_outpostArn' - The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
+-- which the Dedicated Host is allocated.
+--
+-- 'ownerId', 'host_ownerId' - The ID of the Amazon Web Services account that owns the Dedicated Host.
+--
+-- 'releaseTime', 'host_releaseTime' - The time that the Dedicated Host was released.
+--
+-- 'state', 'host_state' - The Dedicated Host\'s state.
+--
+-- 'tags', 'host_tags' - Any tags assigned to the Dedicated Host.
+newHost ::
+  Host
+newHost =
+  Host'
+    { allocationTime = Prelude.Nothing,
+      allowsMultipleInstanceTypes = Prelude.Nothing,
+      autoPlacement = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      availabilityZoneId = Prelude.Nothing,
+      availableCapacity = Prelude.Nothing,
+      clientToken = Prelude.Nothing,
+      hostId = Prelude.Nothing,
+      hostProperties = Prelude.Nothing,
+      hostRecovery = Prelude.Nothing,
+      hostReservationId = Prelude.Nothing,
+      instances = Prelude.Nothing,
+      memberOfServiceLinkedResourceGroup = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      releaseTime = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The time that the Dedicated Host was allocated.
+host_allocationTime :: Lens.Lens' Host (Prelude.Maybe Prelude.UTCTime)
+host_allocationTime = Lens.lens (\Host' {allocationTime} -> allocationTime) (\s@Host' {} a -> s {allocationTime = a} :: Host) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether the Dedicated Host supports multiple instance types of
+-- the same instance family. If the value is @on@, the Dedicated Host
+-- supports multiple instance types in the instance family. If the value is
+-- @off@, the Dedicated Host supports a single instance type only.
+host_allowsMultipleInstanceTypes :: Lens.Lens' Host (Prelude.Maybe AllowsMultipleInstanceTypes)
+host_allowsMultipleInstanceTypes = Lens.lens (\Host' {allowsMultipleInstanceTypes} -> allowsMultipleInstanceTypes) (\s@Host' {} a -> s {allowsMultipleInstanceTypes = a} :: Host)
+
+-- | Whether auto-placement is on or off.
+host_autoPlacement :: Lens.Lens' Host (Prelude.Maybe AutoPlacement)
+host_autoPlacement = Lens.lens (\Host' {autoPlacement} -> autoPlacement) (\s@Host' {} a -> s {autoPlacement = a} :: Host)
+
+-- | The Availability Zone of the Dedicated Host.
+host_availabilityZone :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_availabilityZone = Lens.lens (\Host' {availabilityZone} -> availabilityZone) (\s@Host' {} a -> s {availabilityZone = a} :: Host)
+
+-- | The ID of the Availability Zone in which the Dedicated Host is
+-- allocated.
+host_availabilityZoneId :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_availabilityZoneId = Lens.lens (\Host' {availabilityZoneId} -> availabilityZoneId) (\s@Host' {} a -> s {availabilityZoneId = a} :: Host)
+
+-- | Information about the instances running on the Dedicated Host.
+host_availableCapacity :: Lens.Lens' Host (Prelude.Maybe AvailableCapacity)
+host_availableCapacity = Lens.lens (\Host' {availableCapacity} -> availableCapacity) (\s@Host' {} a -> s {availableCapacity = a} :: Host)
+
+-- | Unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of the request. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+host_clientToken :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_clientToken = Lens.lens (\Host' {clientToken} -> clientToken) (\s@Host' {} a -> s {clientToken = a} :: Host)
+
+-- | The ID of the Dedicated Host.
+host_hostId :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_hostId = Lens.lens (\Host' {hostId} -> hostId) (\s@Host' {} a -> s {hostId = a} :: Host)
+
+-- | The hardware specifications of the Dedicated Host.
+host_hostProperties :: Lens.Lens' Host (Prelude.Maybe HostProperties)
+host_hostProperties = Lens.lens (\Host' {hostProperties} -> hostProperties) (\s@Host' {} a -> s {hostProperties = a} :: Host)
+
+-- | Indicates whether host recovery is enabled or disabled for the Dedicated
+-- Host.
+host_hostRecovery :: Lens.Lens' Host (Prelude.Maybe HostRecovery)
+host_hostRecovery = Lens.lens (\Host' {hostRecovery} -> hostRecovery) (\s@Host' {} a -> s {hostRecovery = a} :: Host)
+
+-- | The reservation ID of the Dedicated Host. This returns a @null@ response
+-- if the Dedicated Host doesn\'t have an associated reservation.
+host_hostReservationId :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_hostReservationId = Lens.lens (\Host' {hostReservationId} -> hostReservationId) (\s@Host' {} a -> s {hostReservationId = a} :: Host)
+
+-- | The IDs and instance type that are currently running on the Dedicated
+-- Host.
+host_instances :: Lens.Lens' Host (Prelude.Maybe [HostInstance])
+host_instances = Lens.lens (\Host' {instances} -> instances) (\s@Host' {} a -> s {instances = a} :: Host) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the Dedicated Host is in a host resource group. If
+-- __memberOfServiceLinkedResourceGroup__ is @true@, the host is in a host
+-- resource group; otherwise, it is not.
+host_memberOfServiceLinkedResourceGroup :: Lens.Lens' Host (Prelude.Maybe Prelude.Bool)
+host_memberOfServiceLinkedResourceGroup = Lens.lens (\Host' {memberOfServiceLinkedResourceGroup} -> memberOfServiceLinkedResourceGroup) (\s@Host' {} a -> s {memberOfServiceLinkedResourceGroup = a} :: Host)
+
+-- | The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on
+-- which the Dedicated Host is allocated.
+host_outpostArn :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_outpostArn = Lens.lens (\Host' {outpostArn} -> outpostArn) (\s@Host' {} a -> s {outpostArn = a} :: Host)
+
+-- | The ID of the Amazon Web Services account that owns the Dedicated Host.
+host_ownerId :: Lens.Lens' Host (Prelude.Maybe Prelude.Text)
+host_ownerId = Lens.lens (\Host' {ownerId} -> ownerId) (\s@Host' {} a -> s {ownerId = a} :: Host)
+
+-- | The time that the Dedicated Host was released.
+host_releaseTime :: Lens.Lens' Host (Prelude.Maybe Prelude.UTCTime)
+host_releaseTime = Lens.lens (\Host' {releaseTime} -> releaseTime) (\s@Host' {} a -> s {releaseTime = a} :: Host) Prelude.. Lens.mapping Data._Time
+
+-- | The Dedicated Host\'s state.
+host_state :: Lens.Lens' Host (Prelude.Maybe AllocationState)
+host_state = Lens.lens (\Host' {state} -> state) (\s@Host' {} a -> s {state = a} :: Host)
+
+-- | Any tags assigned to the Dedicated Host.
+host_tags :: Lens.Lens' Host (Prelude.Maybe [Tag])
+host_tags = Lens.lens (\Host' {tags} -> tags) (\s@Host' {} a -> s {tags = a} :: Host) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML Host where
+  parseXML x =
+    Host'
+      Prelude.<$> (x Data..@? "allocationTime")
+      Prelude.<*> (x Data..@? "allowsMultipleInstanceTypes")
+      Prelude.<*> (x Data..@? "autoPlacement")
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "availabilityZoneId")
+      Prelude.<*> (x Data..@? "availableCapacity")
+      Prelude.<*> (x Data..@? "clientToken")
+      Prelude.<*> (x Data..@? "hostId")
+      Prelude.<*> (x Data..@? "hostProperties")
+      Prelude.<*> (x Data..@? "hostRecovery")
+      Prelude.<*> (x Data..@? "hostReservationId")
+      Prelude.<*> ( x
+                      Data..@? "instances"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "memberOfServiceLinkedResourceGroup")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "releaseTime")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable Host where
+  hashWithSalt _salt Host' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationTime
+      `Prelude.hashWithSalt` allowsMultipleInstanceTypes
+      `Prelude.hashWithSalt` autoPlacement
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` availableCapacity
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` hostId
+      `Prelude.hashWithSalt` hostProperties
+      `Prelude.hashWithSalt` hostRecovery
+      `Prelude.hashWithSalt` hostReservationId
+      `Prelude.hashWithSalt` instances
+      `Prelude.hashWithSalt` memberOfServiceLinkedResourceGroup
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` releaseTime
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Host where
+  rnf Host' {..} =
+    Prelude.rnf allocationTime
+      `Prelude.seq` Prelude.rnf allowsMultipleInstanceTypes
+      `Prelude.seq` Prelude.rnf autoPlacement
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf availableCapacity
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf hostId
+      `Prelude.seq` Prelude.rnf hostProperties
+      `Prelude.seq` Prelude.rnf hostRecovery
+      `Prelude.seq` Prelude.rnf hostReservationId
+      `Prelude.seq` Prelude.rnf instances
+      `Prelude.seq` Prelude.rnf
+        memberOfServiceLinkedResourceGroup
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf releaseTime
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/HostInstance.hs b/gen/Amazonka/EC2/Types/HostInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostInstance.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an instance running on a Dedicated Host.
+--
+-- /See:/ 'newHostInstance' smart constructor.
+data HostInstance = HostInstance'
+  { -- | The ID of instance that is running on the Dedicated Host.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The instance type (for example, @m3.medium@) of the running instance.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the instance.
+    ownerId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HostInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'hostInstance_instanceId' - The ID of instance that is running on the Dedicated Host.
+--
+-- 'instanceType', 'hostInstance_instanceType' - The instance type (for example, @m3.medium@) of the running instance.
+--
+-- 'ownerId', 'hostInstance_ownerId' - The ID of the Amazon Web Services account that owns the instance.
+newHostInstance ::
+  HostInstance
+newHostInstance =
+  HostInstance'
+    { instanceId = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      ownerId = Prelude.Nothing
+    }
+
+-- | The ID of instance that is running on the Dedicated Host.
+hostInstance_instanceId :: Lens.Lens' HostInstance (Prelude.Maybe Prelude.Text)
+hostInstance_instanceId = Lens.lens (\HostInstance' {instanceId} -> instanceId) (\s@HostInstance' {} a -> s {instanceId = a} :: HostInstance)
+
+-- | The instance type (for example, @m3.medium@) of the running instance.
+hostInstance_instanceType :: Lens.Lens' HostInstance (Prelude.Maybe Prelude.Text)
+hostInstance_instanceType = Lens.lens (\HostInstance' {instanceType} -> instanceType) (\s@HostInstance' {} a -> s {instanceType = a} :: HostInstance)
+
+-- | The ID of the Amazon Web Services account that owns the instance.
+hostInstance_ownerId :: Lens.Lens' HostInstance (Prelude.Maybe Prelude.Text)
+hostInstance_ownerId = Lens.lens (\HostInstance' {ownerId} -> ownerId) (\s@HostInstance' {} a -> s {ownerId = a} :: HostInstance)
+
+instance Data.FromXML HostInstance where
+  parseXML x =
+    HostInstance'
+      Prelude.<$> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "ownerId")
+
+instance Prelude.Hashable HostInstance where
+  hashWithSalt _salt HostInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` ownerId
+
+instance Prelude.NFData HostInstance where
+  rnf HostInstance' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf ownerId
diff --git a/gen/Amazonka/EC2/Types/HostOffering.hs b/gen/Amazonka/EC2/Types/HostOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostOffering.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostOffering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostOffering where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import Amazonka.EC2.Types.PaymentOption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the Dedicated Host Reservation offering.
+--
+-- /See:/ 'newHostOffering' smart constructor.
+data HostOffering = HostOffering'
+  { -- | The currency of the offering.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The duration of the offering (in seconds).
+    duration :: Prelude.Maybe Prelude.Int,
+    -- | The hourly price of the offering.
+    hourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The instance family of the offering.
+    instanceFamily :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the offering.
+    offeringId :: Prelude.Maybe Prelude.Text,
+    -- | The available payment option.
+    paymentOption :: Prelude.Maybe PaymentOption,
+    -- | The upfront price of the offering. Does not apply to No Upfront
+    -- offerings.
+    upfrontPrice :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HostOffering' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currencyCode', 'hostOffering_currencyCode' - The currency of the offering.
+--
+-- 'duration', 'hostOffering_duration' - The duration of the offering (in seconds).
+--
+-- 'hourlyPrice', 'hostOffering_hourlyPrice' - The hourly price of the offering.
+--
+-- 'instanceFamily', 'hostOffering_instanceFamily' - The instance family of the offering.
+--
+-- 'offeringId', 'hostOffering_offeringId' - The ID of the offering.
+--
+-- 'paymentOption', 'hostOffering_paymentOption' - The available payment option.
+--
+-- 'upfrontPrice', 'hostOffering_upfrontPrice' - The upfront price of the offering. Does not apply to No Upfront
+-- offerings.
+newHostOffering ::
+  HostOffering
+newHostOffering =
+  HostOffering'
+    { currencyCode = Prelude.Nothing,
+      duration = Prelude.Nothing,
+      hourlyPrice = Prelude.Nothing,
+      instanceFamily = Prelude.Nothing,
+      offeringId = Prelude.Nothing,
+      paymentOption = Prelude.Nothing,
+      upfrontPrice = Prelude.Nothing
+    }
+
+-- | The currency of the offering.
+hostOffering_currencyCode :: Lens.Lens' HostOffering (Prelude.Maybe CurrencyCodeValues)
+hostOffering_currencyCode = Lens.lens (\HostOffering' {currencyCode} -> currencyCode) (\s@HostOffering' {} a -> s {currencyCode = a} :: HostOffering)
+
+-- | The duration of the offering (in seconds).
+hostOffering_duration :: Lens.Lens' HostOffering (Prelude.Maybe Prelude.Int)
+hostOffering_duration = Lens.lens (\HostOffering' {duration} -> duration) (\s@HostOffering' {} a -> s {duration = a} :: HostOffering)
+
+-- | The hourly price of the offering.
+hostOffering_hourlyPrice :: Lens.Lens' HostOffering (Prelude.Maybe Prelude.Text)
+hostOffering_hourlyPrice = Lens.lens (\HostOffering' {hourlyPrice} -> hourlyPrice) (\s@HostOffering' {} a -> s {hourlyPrice = a} :: HostOffering)
+
+-- | The instance family of the offering.
+hostOffering_instanceFamily :: Lens.Lens' HostOffering (Prelude.Maybe Prelude.Text)
+hostOffering_instanceFamily = Lens.lens (\HostOffering' {instanceFamily} -> instanceFamily) (\s@HostOffering' {} a -> s {instanceFamily = a} :: HostOffering)
+
+-- | The ID of the offering.
+hostOffering_offeringId :: Lens.Lens' HostOffering (Prelude.Maybe Prelude.Text)
+hostOffering_offeringId = Lens.lens (\HostOffering' {offeringId} -> offeringId) (\s@HostOffering' {} a -> s {offeringId = a} :: HostOffering)
+
+-- | The available payment option.
+hostOffering_paymentOption :: Lens.Lens' HostOffering (Prelude.Maybe PaymentOption)
+hostOffering_paymentOption = Lens.lens (\HostOffering' {paymentOption} -> paymentOption) (\s@HostOffering' {} a -> s {paymentOption = a} :: HostOffering)
+
+-- | The upfront price of the offering. Does not apply to No Upfront
+-- offerings.
+hostOffering_upfrontPrice :: Lens.Lens' HostOffering (Prelude.Maybe Prelude.Text)
+hostOffering_upfrontPrice = Lens.lens (\HostOffering' {upfrontPrice} -> upfrontPrice) (\s@HostOffering' {} a -> s {upfrontPrice = a} :: HostOffering)
+
+instance Data.FromXML HostOffering where
+  parseXML x =
+    HostOffering'
+      Prelude.<$> (x Data..@? "currencyCode")
+      Prelude.<*> (x Data..@? "duration")
+      Prelude.<*> (x Data..@? "hourlyPrice")
+      Prelude.<*> (x Data..@? "instanceFamily")
+      Prelude.<*> (x Data..@? "offeringId")
+      Prelude.<*> (x Data..@? "paymentOption")
+      Prelude.<*> (x Data..@? "upfrontPrice")
+
+instance Prelude.Hashable HostOffering where
+  hashWithSalt _salt HostOffering' {..} =
+    _salt
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` hourlyPrice
+      `Prelude.hashWithSalt` instanceFamily
+      `Prelude.hashWithSalt` offeringId
+      `Prelude.hashWithSalt` paymentOption
+      `Prelude.hashWithSalt` upfrontPrice
+
+instance Prelude.NFData HostOffering where
+  rnf HostOffering' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf hourlyPrice
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf offeringId
+      `Prelude.seq` Prelude.rnf paymentOption
+      `Prelude.seq` Prelude.rnf upfrontPrice
diff --git a/gen/Amazonka/EC2/Types/HostProperties.hs b/gen/Amazonka/EC2/Types/HostProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostProperties.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the properties of a Dedicated Host.
+--
+-- /See:/ 'newHostProperties' smart constructor.
+data HostProperties = HostProperties'
+  { -- | The number of cores on the Dedicated Host.
+    cores :: Prelude.Maybe Prelude.Int,
+    -- | The instance family supported by the Dedicated Host. For example, @m5@.
+    instanceFamily :: Prelude.Maybe Prelude.Text,
+    -- | The instance type supported by the Dedicated Host. For example,
+    -- @m5.large@. If the host supports multiple instance types, no
+    -- __instanceType__ is returned.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The number of sockets on the Dedicated Host.
+    sockets :: Prelude.Maybe Prelude.Int,
+    -- | The total number of vCPUs on the Dedicated Host.
+    totalVCpus :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HostProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cores', 'hostProperties_cores' - The number of cores on the Dedicated Host.
+--
+-- 'instanceFamily', 'hostProperties_instanceFamily' - The instance family supported by the Dedicated Host. For example, @m5@.
+--
+-- 'instanceType', 'hostProperties_instanceType' - The instance type supported by the Dedicated Host. For example,
+-- @m5.large@. If the host supports multiple instance types, no
+-- __instanceType__ is returned.
+--
+-- 'sockets', 'hostProperties_sockets' - The number of sockets on the Dedicated Host.
+--
+-- 'totalVCpus', 'hostProperties_totalVCpus' - The total number of vCPUs on the Dedicated Host.
+newHostProperties ::
+  HostProperties
+newHostProperties =
+  HostProperties'
+    { cores = Prelude.Nothing,
+      instanceFamily = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      sockets = Prelude.Nothing,
+      totalVCpus = Prelude.Nothing
+    }
+
+-- | The number of cores on the Dedicated Host.
+hostProperties_cores :: Lens.Lens' HostProperties (Prelude.Maybe Prelude.Int)
+hostProperties_cores = Lens.lens (\HostProperties' {cores} -> cores) (\s@HostProperties' {} a -> s {cores = a} :: HostProperties)
+
+-- | The instance family supported by the Dedicated Host. For example, @m5@.
+hostProperties_instanceFamily :: Lens.Lens' HostProperties (Prelude.Maybe Prelude.Text)
+hostProperties_instanceFamily = Lens.lens (\HostProperties' {instanceFamily} -> instanceFamily) (\s@HostProperties' {} a -> s {instanceFamily = a} :: HostProperties)
+
+-- | The instance type supported by the Dedicated Host. For example,
+-- @m5.large@. If the host supports multiple instance types, no
+-- __instanceType__ is returned.
+hostProperties_instanceType :: Lens.Lens' HostProperties (Prelude.Maybe Prelude.Text)
+hostProperties_instanceType = Lens.lens (\HostProperties' {instanceType} -> instanceType) (\s@HostProperties' {} a -> s {instanceType = a} :: HostProperties)
+
+-- | The number of sockets on the Dedicated Host.
+hostProperties_sockets :: Lens.Lens' HostProperties (Prelude.Maybe Prelude.Int)
+hostProperties_sockets = Lens.lens (\HostProperties' {sockets} -> sockets) (\s@HostProperties' {} a -> s {sockets = a} :: HostProperties)
+
+-- | The total number of vCPUs on the Dedicated Host.
+hostProperties_totalVCpus :: Lens.Lens' HostProperties (Prelude.Maybe Prelude.Int)
+hostProperties_totalVCpus = Lens.lens (\HostProperties' {totalVCpus} -> totalVCpus) (\s@HostProperties' {} a -> s {totalVCpus = a} :: HostProperties)
+
+instance Data.FromXML HostProperties where
+  parseXML x =
+    HostProperties'
+      Prelude.<$> (x Data..@? "cores")
+      Prelude.<*> (x Data..@? "instanceFamily")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "sockets")
+      Prelude.<*> (x Data..@? "totalVCpus")
+
+instance Prelude.Hashable HostProperties where
+  hashWithSalt _salt HostProperties' {..} =
+    _salt
+      `Prelude.hashWithSalt` cores
+      `Prelude.hashWithSalt` instanceFamily
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` sockets
+      `Prelude.hashWithSalt` totalVCpus
+
+instance Prelude.NFData HostProperties where
+  rnf HostProperties' {..} =
+    Prelude.rnf cores
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf sockets
+      `Prelude.seq` Prelude.rnf totalVCpus
diff --git a/gen/Amazonka/EC2/Types/HostRecovery.hs b/gen/Amazonka/EC2/Types/HostRecovery.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostRecovery.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostRecovery
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostRecovery
+  ( HostRecovery
+      ( ..,
+        HostRecovery_Off,
+        HostRecovery_On
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype HostRecovery = HostRecovery'
+  { fromHostRecovery ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HostRecovery_Off :: HostRecovery
+pattern HostRecovery_Off = HostRecovery' "off"
+
+pattern HostRecovery_On :: HostRecovery
+pattern HostRecovery_On = HostRecovery' "on"
+
+{-# COMPLETE
+  HostRecovery_Off,
+  HostRecovery_On,
+  HostRecovery'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/HostReservation.hs b/gen/Amazonka/EC2/Types/HostReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostReservation.hs
@@ -0,0 +1,253 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostReservation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import Amazonka.EC2.Types.PaymentOption
+import Amazonka.EC2.Types.ReservationState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the Dedicated Host Reservation and associated Dedicated
+-- Hosts.
+--
+-- /See:/ 'newHostReservation' smart constructor.
+data HostReservation = HostReservation'
+  { -- | The number of Dedicated Hosts the reservation is associated with.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The currency in which the @upfrontPrice@ and @hourlyPrice@ amounts are
+    -- specified. At this time, the only supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The length of the reservation\'s term, specified in seconds. Can be
+    -- @31536000 (1 year)@ | @94608000 (3 years)@.
+    duration :: Prelude.Maybe Prelude.Int,
+    -- | The date and time that the reservation ends.
+    end :: Prelude.Maybe Data.ISO8601,
+    -- | The IDs of the Dedicated Hosts associated with the reservation.
+    hostIdSet :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the reservation that specifies the associated Dedicated Hosts.
+    hostReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The hourly price of the reservation.
+    hourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The instance family of the Dedicated Host Reservation. The instance
+    -- family on the Dedicated Host must be the same in order for it to benefit
+    -- from the reservation.
+    instanceFamily :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the reservation. This remains the same regardless of which
+    -- Dedicated Hosts are associated with it.
+    offeringId :: Prelude.Maybe Prelude.Text,
+    -- | The payment option selected for this reservation.
+    paymentOption :: Prelude.Maybe PaymentOption,
+    -- | The date and time that the reservation started.
+    start :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the reservation.
+    state :: Prelude.Maybe ReservationState,
+    -- | Any tags assigned to the Dedicated Host Reservation.
+    tags :: Prelude.Maybe [Tag],
+    -- | The upfront price of the reservation.
+    upfrontPrice :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'HostReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'hostReservation_count' - The number of Dedicated Hosts the reservation is associated with.
+--
+-- 'currencyCode', 'hostReservation_currencyCode' - The currency in which the @upfrontPrice@ and @hourlyPrice@ amounts are
+-- specified. At this time, the only supported currency is @USD@.
+--
+-- 'duration', 'hostReservation_duration' - The length of the reservation\'s term, specified in seconds. Can be
+-- @31536000 (1 year)@ | @94608000 (3 years)@.
+--
+-- 'end', 'hostReservation_end' - The date and time that the reservation ends.
+--
+-- 'hostIdSet', 'hostReservation_hostIdSet' - The IDs of the Dedicated Hosts associated with the reservation.
+--
+-- 'hostReservationId', 'hostReservation_hostReservationId' - The ID of the reservation that specifies the associated Dedicated Hosts.
+--
+-- 'hourlyPrice', 'hostReservation_hourlyPrice' - The hourly price of the reservation.
+--
+-- 'instanceFamily', 'hostReservation_instanceFamily' - The instance family of the Dedicated Host Reservation. The instance
+-- family on the Dedicated Host must be the same in order for it to benefit
+-- from the reservation.
+--
+-- 'offeringId', 'hostReservation_offeringId' - The ID of the reservation. This remains the same regardless of which
+-- Dedicated Hosts are associated with it.
+--
+-- 'paymentOption', 'hostReservation_paymentOption' - The payment option selected for this reservation.
+--
+-- 'start', 'hostReservation_start' - The date and time that the reservation started.
+--
+-- 'state', 'hostReservation_state' - The state of the reservation.
+--
+-- 'tags', 'hostReservation_tags' - Any tags assigned to the Dedicated Host Reservation.
+--
+-- 'upfrontPrice', 'hostReservation_upfrontPrice' - The upfront price of the reservation.
+newHostReservation ::
+  HostReservation
+newHostReservation =
+  HostReservation'
+    { count = Prelude.Nothing,
+      currencyCode = Prelude.Nothing,
+      duration = Prelude.Nothing,
+      end = Prelude.Nothing,
+      hostIdSet = Prelude.Nothing,
+      hostReservationId = Prelude.Nothing,
+      hourlyPrice = Prelude.Nothing,
+      instanceFamily = Prelude.Nothing,
+      offeringId = Prelude.Nothing,
+      paymentOption = Prelude.Nothing,
+      start = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      upfrontPrice = Prelude.Nothing
+    }
+
+-- | The number of Dedicated Hosts the reservation is associated with.
+hostReservation_count :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Int)
+hostReservation_count = Lens.lens (\HostReservation' {count} -> count) (\s@HostReservation' {} a -> s {count = a} :: HostReservation)
+
+-- | The currency in which the @upfrontPrice@ and @hourlyPrice@ amounts are
+-- specified. At this time, the only supported currency is @USD@.
+hostReservation_currencyCode :: Lens.Lens' HostReservation (Prelude.Maybe CurrencyCodeValues)
+hostReservation_currencyCode = Lens.lens (\HostReservation' {currencyCode} -> currencyCode) (\s@HostReservation' {} a -> s {currencyCode = a} :: HostReservation)
+
+-- | The length of the reservation\'s term, specified in seconds. Can be
+-- @31536000 (1 year)@ | @94608000 (3 years)@.
+hostReservation_duration :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Int)
+hostReservation_duration = Lens.lens (\HostReservation' {duration} -> duration) (\s@HostReservation' {} a -> s {duration = a} :: HostReservation)
+
+-- | The date and time that the reservation ends.
+hostReservation_end :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.UTCTime)
+hostReservation_end = Lens.lens (\HostReservation' {end} -> end) (\s@HostReservation' {} a -> s {end = a} :: HostReservation) Prelude.. Lens.mapping Data._Time
+
+-- | The IDs of the Dedicated Hosts associated with the reservation.
+hostReservation_hostIdSet :: Lens.Lens' HostReservation (Prelude.Maybe [Prelude.Text])
+hostReservation_hostIdSet = Lens.lens (\HostReservation' {hostIdSet} -> hostIdSet) (\s@HostReservation' {} a -> s {hostIdSet = a} :: HostReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the reservation that specifies the associated Dedicated Hosts.
+hostReservation_hostReservationId :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Text)
+hostReservation_hostReservationId = Lens.lens (\HostReservation' {hostReservationId} -> hostReservationId) (\s@HostReservation' {} a -> s {hostReservationId = a} :: HostReservation)
+
+-- | The hourly price of the reservation.
+hostReservation_hourlyPrice :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Text)
+hostReservation_hourlyPrice = Lens.lens (\HostReservation' {hourlyPrice} -> hourlyPrice) (\s@HostReservation' {} a -> s {hourlyPrice = a} :: HostReservation)
+
+-- | The instance family of the Dedicated Host Reservation. The instance
+-- family on the Dedicated Host must be the same in order for it to benefit
+-- from the reservation.
+hostReservation_instanceFamily :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Text)
+hostReservation_instanceFamily = Lens.lens (\HostReservation' {instanceFamily} -> instanceFamily) (\s@HostReservation' {} a -> s {instanceFamily = a} :: HostReservation)
+
+-- | The ID of the reservation. This remains the same regardless of which
+-- Dedicated Hosts are associated with it.
+hostReservation_offeringId :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Text)
+hostReservation_offeringId = Lens.lens (\HostReservation' {offeringId} -> offeringId) (\s@HostReservation' {} a -> s {offeringId = a} :: HostReservation)
+
+-- | The payment option selected for this reservation.
+hostReservation_paymentOption :: Lens.Lens' HostReservation (Prelude.Maybe PaymentOption)
+hostReservation_paymentOption = Lens.lens (\HostReservation' {paymentOption} -> paymentOption) (\s@HostReservation' {} a -> s {paymentOption = a} :: HostReservation)
+
+-- | The date and time that the reservation started.
+hostReservation_start :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.UTCTime)
+hostReservation_start = Lens.lens (\HostReservation' {start} -> start) (\s@HostReservation' {} a -> s {start = a} :: HostReservation) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the reservation.
+hostReservation_state :: Lens.Lens' HostReservation (Prelude.Maybe ReservationState)
+hostReservation_state = Lens.lens (\HostReservation' {state} -> state) (\s@HostReservation' {} a -> s {state = a} :: HostReservation)
+
+-- | Any tags assigned to the Dedicated Host Reservation.
+hostReservation_tags :: Lens.Lens' HostReservation (Prelude.Maybe [Tag])
+hostReservation_tags = Lens.lens (\HostReservation' {tags} -> tags) (\s@HostReservation' {} a -> s {tags = a} :: HostReservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The upfront price of the reservation.
+hostReservation_upfrontPrice :: Lens.Lens' HostReservation (Prelude.Maybe Prelude.Text)
+hostReservation_upfrontPrice = Lens.lens (\HostReservation' {upfrontPrice} -> upfrontPrice) (\s@HostReservation' {} a -> s {upfrontPrice = a} :: HostReservation)
+
+instance Data.FromXML HostReservation where
+  parseXML x =
+    HostReservation'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "currencyCode")
+      Prelude.<*> (x Data..@? "duration")
+      Prelude.<*> (x Data..@? "end")
+      Prelude.<*> ( x
+                      Data..@? "hostIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "hostReservationId")
+      Prelude.<*> (x Data..@? "hourlyPrice")
+      Prelude.<*> (x Data..@? "instanceFamily")
+      Prelude.<*> (x Data..@? "offeringId")
+      Prelude.<*> (x Data..@? "paymentOption")
+      Prelude.<*> (x Data..@? "start")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "upfrontPrice")
+
+instance Prelude.Hashable HostReservation where
+  hashWithSalt _salt HostReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` end
+      `Prelude.hashWithSalt` hostIdSet
+      `Prelude.hashWithSalt` hostReservationId
+      `Prelude.hashWithSalt` hourlyPrice
+      `Prelude.hashWithSalt` instanceFamily
+      `Prelude.hashWithSalt` offeringId
+      `Prelude.hashWithSalt` paymentOption
+      `Prelude.hashWithSalt` start
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` upfrontPrice
+
+instance Prelude.NFData HostReservation where
+  rnf HostReservation' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf end
+      `Prelude.seq` Prelude.rnf hostIdSet
+      `Prelude.seq` Prelude.rnf hostReservationId
+      `Prelude.seq` Prelude.rnf hourlyPrice
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf offeringId
+      `Prelude.seq` Prelude.rnf paymentOption
+      `Prelude.seq` Prelude.rnf start
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf upfrontPrice
diff --git a/gen/Amazonka/EC2/Types/HostTenancy.hs b/gen/Amazonka/EC2/Types/HostTenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostTenancy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostTenancy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostTenancy
+  ( HostTenancy
+      ( ..,
+        HostTenancy_Dedicated,
+        HostTenancy_Host
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype HostTenancy = HostTenancy'
+  { fromHostTenancy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HostTenancy_Dedicated :: HostTenancy
+pattern HostTenancy_Dedicated = HostTenancy' "dedicated"
+
+pattern HostTenancy_Host :: HostTenancy
+pattern HostTenancy_Host = HostTenancy' "host"
+
+{-# COMPLETE
+  HostTenancy_Dedicated,
+  HostTenancy_Host,
+  HostTenancy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/HostnameType.hs b/gen/Amazonka/EC2/Types/HostnameType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HostnameType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HostnameType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HostnameType
+  ( HostnameType
+      ( ..,
+        HostnameType_Ip_name,
+        HostnameType_Resource_name
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype HostnameType = HostnameType'
+  { fromHostnameType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HostnameType_Ip_name :: HostnameType
+pattern HostnameType_Ip_name = HostnameType' "ip-name"
+
+pattern HostnameType_Resource_name :: HostnameType
+pattern HostnameType_Resource_name = HostnameType' "resource-name"
+
+{-# COMPLETE
+  HostnameType_Ip_name,
+  HostnameType_Resource_name,
+  HostnameType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/HttpTokensState.hs b/gen/Amazonka/EC2/Types/HttpTokensState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HttpTokensState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HttpTokensState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HttpTokensState
+  ( HttpTokensState
+      ( ..,
+        HttpTokensState_Optional,
+        HttpTokensState_Required
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype HttpTokensState = HttpTokensState'
+  { fromHttpTokensState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HttpTokensState_Optional :: HttpTokensState
+pattern HttpTokensState_Optional = HttpTokensState' "optional"
+
+pattern HttpTokensState_Required :: HttpTokensState
+pattern HttpTokensState_Required = HttpTokensState' "required"
+
+{-# COMPLETE
+  HttpTokensState_Optional,
+  HttpTokensState_Required,
+  HttpTokensState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/HypervisorType.hs b/gen/Amazonka/EC2/Types/HypervisorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/HypervisorType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.HypervisorType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.HypervisorType
+  ( HypervisorType
+      ( ..,
+        HypervisorType_Ovm,
+        HypervisorType_Xen
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype HypervisorType = HypervisorType'
+  { fromHypervisorType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern HypervisorType_Ovm :: HypervisorType
+pattern HypervisorType_Ovm = HypervisorType' "ovm"
+
+pattern HypervisorType_Xen :: HypervisorType
+pattern HypervisorType_Xen = HypervisorType' "xen"
+
+{-# COMPLETE
+  HypervisorType_Ovm,
+  HypervisorType_Xen,
+  HypervisorType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IKEVersionsListValue.hs b/gen/Amazonka/EC2/Types/IKEVersionsListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IKEVersionsListValue.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IKEVersionsListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IKEVersionsListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The internet key exchange (IKE) version permitted for the VPN tunnel.
+--
+-- /See:/ 'newIKEVersionsListValue' smart constructor.
+data IKEVersionsListValue = IKEVersionsListValue'
+  { -- | The IKE version.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IKEVersionsListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'iKEVersionsListValue_value' - The IKE version.
+newIKEVersionsListValue ::
+  IKEVersionsListValue
+newIKEVersionsListValue =
+  IKEVersionsListValue' {value = Prelude.Nothing}
+
+-- | The IKE version.
+iKEVersionsListValue_value :: Lens.Lens' IKEVersionsListValue (Prelude.Maybe Prelude.Text)
+iKEVersionsListValue_value = Lens.lens (\IKEVersionsListValue' {value} -> value) (\s@IKEVersionsListValue' {} a -> s {value = a} :: IKEVersionsListValue)
+
+instance Data.FromXML IKEVersionsListValue where
+  parseXML x =
+    IKEVersionsListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance Prelude.Hashable IKEVersionsListValue where
+  hashWithSalt _salt IKEVersionsListValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData IKEVersionsListValue where
+  rnf IKEVersionsListValue' {..} = Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/IKEVersionsRequestListValue.hs b/gen/Amazonka/EC2/Types/IKEVersionsRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IKEVersionsRequestListValue.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IKEVersionsRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IKEVersionsRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The IKE version that is permitted for the VPN tunnel.
+--
+-- /See:/ 'newIKEVersionsRequestListValue' smart constructor.
+data IKEVersionsRequestListValue = IKEVersionsRequestListValue'
+  { -- | The IKE version.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IKEVersionsRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'iKEVersionsRequestListValue_value' - The IKE version.
+newIKEVersionsRequestListValue ::
+  IKEVersionsRequestListValue
+newIKEVersionsRequestListValue =
+  IKEVersionsRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The IKE version.
+iKEVersionsRequestListValue_value :: Lens.Lens' IKEVersionsRequestListValue (Prelude.Maybe Prelude.Text)
+iKEVersionsRequestListValue_value = Lens.lens (\IKEVersionsRequestListValue' {value} -> value) (\s@IKEVersionsRequestListValue' {} a -> s {value = a} :: IKEVersionsRequestListValue)
+
+instance Prelude.Hashable IKEVersionsRequestListValue where
+  hashWithSalt _salt IKEVersionsRequestListValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData IKEVersionsRequestListValue where
+  rnf IKEVersionsRequestListValue' {..} =
+    Prelude.rnf value
+
+instance Data.ToQuery IKEVersionsRequestListValue where
+  toQuery IKEVersionsRequestListValue' {..} =
+    Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/IamInstanceProfile.hs b/gen/Amazonka/EC2/Types/IamInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IamInstanceProfile.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IamInstanceProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IamInstanceProfile where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IAM instance profile.
+--
+-- /See:/ 'newIamInstanceProfile' smart constructor.
+data IamInstanceProfile = IamInstanceProfile'
+  { -- | The Amazon Resource Name (ARN) of the instance profile.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance profile.
+    id :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IamInstanceProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'iamInstanceProfile_arn' - The Amazon Resource Name (ARN) of the instance profile.
+--
+-- 'id', 'iamInstanceProfile_id' - The ID of the instance profile.
+newIamInstanceProfile ::
+  IamInstanceProfile
+newIamInstanceProfile =
+  IamInstanceProfile'
+    { arn = Prelude.Nothing,
+      id = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the instance profile.
+iamInstanceProfile_arn :: Lens.Lens' IamInstanceProfile (Prelude.Maybe Prelude.Text)
+iamInstanceProfile_arn = Lens.lens (\IamInstanceProfile' {arn} -> arn) (\s@IamInstanceProfile' {} a -> s {arn = a} :: IamInstanceProfile)
+
+-- | The ID of the instance profile.
+iamInstanceProfile_id :: Lens.Lens' IamInstanceProfile (Prelude.Maybe Prelude.Text)
+iamInstanceProfile_id = Lens.lens (\IamInstanceProfile' {id} -> id) (\s@IamInstanceProfile' {} a -> s {id = a} :: IamInstanceProfile)
+
+instance Data.FromXML IamInstanceProfile where
+  parseXML x =
+    IamInstanceProfile'
+      Prelude.<$> (x Data..@? "arn")
+      Prelude.<*> (x Data..@? "id")
+
+instance Prelude.Hashable IamInstanceProfile where
+  hashWithSalt _salt IamInstanceProfile' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData IamInstanceProfile where
+  rnf IamInstanceProfile' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf id
diff --git a/gen/Amazonka/EC2/Types/IamInstanceProfileAssociation.hs b/gen/Amazonka/EC2/Types/IamInstanceProfileAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IamInstanceProfileAssociation.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IamInstanceProfileAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IamInstanceProfileAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IamInstanceProfile
+import Amazonka.EC2.Types.IamInstanceProfileAssociationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between an IAM instance profile and an
+-- instance.
+--
+-- /See:/ 'newIamInstanceProfileAssociation' smart constructor.
+data IamInstanceProfileAssociation = IamInstanceProfileAssociation'
+  { -- | The ID of the association.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe IamInstanceProfile,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the association.
+    state :: Prelude.Maybe IamInstanceProfileAssociationState,
+    -- | The time the IAM instance profile was associated with the instance.
+    timestamp :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IamInstanceProfileAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'iamInstanceProfileAssociation_associationId' - The ID of the association.
+--
+-- 'iamInstanceProfile', 'iamInstanceProfileAssociation_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'instanceId', 'iamInstanceProfileAssociation_instanceId' - The ID of the instance.
+--
+-- 'state', 'iamInstanceProfileAssociation_state' - The state of the association.
+--
+-- 'timestamp', 'iamInstanceProfileAssociation_timestamp' - The time the IAM instance profile was associated with the instance.
+newIamInstanceProfileAssociation ::
+  IamInstanceProfileAssociation
+newIamInstanceProfileAssociation =
+  IamInstanceProfileAssociation'
+    { associationId =
+        Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | The ID of the association.
+iamInstanceProfileAssociation_associationId :: Lens.Lens' IamInstanceProfileAssociation (Prelude.Maybe Prelude.Text)
+iamInstanceProfileAssociation_associationId = Lens.lens (\IamInstanceProfileAssociation' {associationId} -> associationId) (\s@IamInstanceProfileAssociation' {} a -> s {associationId = a} :: IamInstanceProfileAssociation)
+
+-- | The IAM instance profile.
+iamInstanceProfileAssociation_iamInstanceProfile :: Lens.Lens' IamInstanceProfileAssociation (Prelude.Maybe IamInstanceProfile)
+iamInstanceProfileAssociation_iamInstanceProfile = Lens.lens (\IamInstanceProfileAssociation' {iamInstanceProfile} -> iamInstanceProfile) (\s@IamInstanceProfileAssociation' {} a -> s {iamInstanceProfile = a} :: IamInstanceProfileAssociation)
+
+-- | The ID of the instance.
+iamInstanceProfileAssociation_instanceId :: Lens.Lens' IamInstanceProfileAssociation (Prelude.Maybe Prelude.Text)
+iamInstanceProfileAssociation_instanceId = Lens.lens (\IamInstanceProfileAssociation' {instanceId} -> instanceId) (\s@IamInstanceProfileAssociation' {} a -> s {instanceId = a} :: IamInstanceProfileAssociation)
+
+-- | The state of the association.
+iamInstanceProfileAssociation_state :: Lens.Lens' IamInstanceProfileAssociation (Prelude.Maybe IamInstanceProfileAssociationState)
+iamInstanceProfileAssociation_state = Lens.lens (\IamInstanceProfileAssociation' {state} -> state) (\s@IamInstanceProfileAssociation' {} a -> s {state = a} :: IamInstanceProfileAssociation)
+
+-- | The time the IAM instance profile was associated with the instance.
+iamInstanceProfileAssociation_timestamp :: Lens.Lens' IamInstanceProfileAssociation (Prelude.Maybe Prelude.UTCTime)
+iamInstanceProfileAssociation_timestamp = Lens.lens (\IamInstanceProfileAssociation' {timestamp} -> timestamp) (\s@IamInstanceProfileAssociation' {} a -> s {timestamp = a} :: IamInstanceProfileAssociation) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML IamInstanceProfileAssociation where
+  parseXML x =
+    IamInstanceProfileAssociation'
+      Prelude.<$> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "iamInstanceProfile")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "timestamp")
+
+instance
+  Prelude.Hashable
+    IamInstanceProfileAssociation
+  where
+  hashWithSalt _salt IamInstanceProfileAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData IamInstanceProfileAssociation where
+  rnf IamInstanceProfileAssociation' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/EC2/Types/IamInstanceProfileAssociationState.hs b/gen/Amazonka/EC2/Types/IamInstanceProfileAssociationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IamInstanceProfileAssociationState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IamInstanceProfileAssociationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IamInstanceProfileAssociationState
+  ( IamInstanceProfileAssociationState
+      ( ..,
+        IamInstanceProfileAssociationState_Associated,
+        IamInstanceProfileAssociationState_Associating,
+        IamInstanceProfileAssociationState_Disassociated,
+        IamInstanceProfileAssociationState_Disassociating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IamInstanceProfileAssociationState = IamInstanceProfileAssociationState'
+  { fromIamInstanceProfileAssociationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IamInstanceProfileAssociationState_Associated :: IamInstanceProfileAssociationState
+pattern IamInstanceProfileAssociationState_Associated = IamInstanceProfileAssociationState' "associated"
+
+pattern IamInstanceProfileAssociationState_Associating :: IamInstanceProfileAssociationState
+pattern IamInstanceProfileAssociationState_Associating = IamInstanceProfileAssociationState' "associating"
+
+pattern IamInstanceProfileAssociationState_Disassociated :: IamInstanceProfileAssociationState
+pattern IamInstanceProfileAssociationState_Disassociated = IamInstanceProfileAssociationState' "disassociated"
+
+pattern IamInstanceProfileAssociationState_Disassociating :: IamInstanceProfileAssociationState
+pattern IamInstanceProfileAssociationState_Disassociating = IamInstanceProfileAssociationState' "disassociating"
+
+{-# COMPLETE
+  IamInstanceProfileAssociationState_Associated,
+  IamInstanceProfileAssociationState_Associating,
+  IamInstanceProfileAssociationState_Disassociated,
+  IamInstanceProfileAssociationState_Disassociating,
+  IamInstanceProfileAssociationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IamInstanceProfileSpecification.hs b/gen/Amazonka/EC2/Types/IamInstanceProfileSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IamInstanceProfileSpecification.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IamInstanceProfileSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IamInstanceProfileSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IAM instance profile.
+--
+-- /See:/ 'newIamInstanceProfileSpecification' smart constructor.
+data IamInstanceProfileSpecification = IamInstanceProfileSpecification'
+  { -- | The Amazon Resource Name (ARN) of the instance profile.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the instance profile.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IamInstanceProfileSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'iamInstanceProfileSpecification_arn' - The Amazon Resource Name (ARN) of the instance profile.
+--
+-- 'name', 'iamInstanceProfileSpecification_name' - The name of the instance profile.
+newIamInstanceProfileSpecification ::
+  IamInstanceProfileSpecification
+newIamInstanceProfileSpecification =
+  IamInstanceProfileSpecification'
+    { arn =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the instance profile.
+iamInstanceProfileSpecification_arn :: Lens.Lens' IamInstanceProfileSpecification (Prelude.Maybe Prelude.Text)
+iamInstanceProfileSpecification_arn = Lens.lens (\IamInstanceProfileSpecification' {arn} -> arn) (\s@IamInstanceProfileSpecification' {} a -> s {arn = a} :: IamInstanceProfileSpecification)
+
+-- | The name of the instance profile.
+iamInstanceProfileSpecification_name :: Lens.Lens' IamInstanceProfileSpecification (Prelude.Maybe Prelude.Text)
+iamInstanceProfileSpecification_name = Lens.lens (\IamInstanceProfileSpecification' {name} -> name) (\s@IamInstanceProfileSpecification' {} a -> s {name = a} :: IamInstanceProfileSpecification)
+
+instance Data.FromXML IamInstanceProfileSpecification where
+  parseXML x =
+    IamInstanceProfileSpecification'
+      Prelude.<$> (x Data..@? "arn")
+      Prelude.<*> (x Data..@? "name")
+
+instance
+  Prelude.Hashable
+    IamInstanceProfileSpecification
+  where
+  hashWithSalt
+    _salt
+    IamInstanceProfileSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    IamInstanceProfileSpecification
+  where
+  rnf IamInstanceProfileSpecification' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf name
+
+instance Data.ToQuery IamInstanceProfileSpecification where
+  toQuery IamInstanceProfileSpecification' {..} =
+    Prelude.mconcat
+      ["Arn" Data.=: arn, "Name" Data.=: name]
diff --git a/gen/Amazonka/EC2/Types/IcmpTypeCode.hs b/gen/Amazonka/EC2/Types/IcmpTypeCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IcmpTypeCode.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IcmpTypeCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IcmpTypeCode where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the ICMP type and code.
+--
+-- /See:/ 'newIcmpTypeCode' smart constructor.
+data IcmpTypeCode = IcmpTypeCode'
+  { -- | The ICMP code. A value of -1 means all codes for the specified ICMP
+    -- type.
+    code :: Prelude.Maybe Prelude.Int,
+    -- | The ICMP type. A value of -1 means all types.
+    type' :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IcmpTypeCode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'icmpTypeCode_code' - The ICMP code. A value of -1 means all codes for the specified ICMP
+-- type.
+--
+-- 'type'', 'icmpTypeCode_type' - The ICMP type. A value of -1 means all types.
+newIcmpTypeCode ::
+  IcmpTypeCode
+newIcmpTypeCode =
+  IcmpTypeCode'
+    { code = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The ICMP code. A value of -1 means all codes for the specified ICMP
+-- type.
+icmpTypeCode_code :: Lens.Lens' IcmpTypeCode (Prelude.Maybe Prelude.Int)
+icmpTypeCode_code = Lens.lens (\IcmpTypeCode' {code} -> code) (\s@IcmpTypeCode' {} a -> s {code = a} :: IcmpTypeCode)
+
+-- | The ICMP type. A value of -1 means all types.
+icmpTypeCode_type :: Lens.Lens' IcmpTypeCode (Prelude.Maybe Prelude.Int)
+icmpTypeCode_type = Lens.lens (\IcmpTypeCode' {type'} -> type') (\s@IcmpTypeCode' {} a -> s {type' = a} :: IcmpTypeCode)
+
+instance Data.FromXML IcmpTypeCode where
+  parseXML x =
+    IcmpTypeCode'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable IcmpTypeCode where
+  hashWithSalt _salt IcmpTypeCode' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData IcmpTypeCode where
+  rnf IcmpTypeCode' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToQuery IcmpTypeCode where
+  toQuery IcmpTypeCode' {..} =
+    Prelude.mconcat
+      ["Code" Data.=: code, "Type" Data.=: type']
diff --git a/gen/Amazonka/EC2/Types/IdFormat.hs b/gen/Amazonka/EC2/Types/IdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IdFormat.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IdFormat where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the ID format for a resource.
+--
+-- /See:/ 'newIdFormat' smart constructor.
+data IdFormat = IdFormat'
+  { -- | The date in UTC at which you are permanently switched over to using
+    -- longer IDs. If a deadline is not yet available for this resource type,
+    -- this field is not returned.
+    deadline :: Prelude.Maybe Data.ISO8601,
+    -- | The type of resource.
+    resource :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether longer IDs (17-character IDs) are enabled for the
+    -- resource.
+    useLongIds :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deadline', 'idFormat_deadline' - The date in UTC at which you are permanently switched over to using
+-- longer IDs. If a deadline is not yet available for this resource type,
+-- this field is not returned.
+--
+-- 'resource', 'idFormat_resource' - The type of resource.
+--
+-- 'useLongIds', 'idFormat_useLongIds' - Indicates whether longer IDs (17-character IDs) are enabled for the
+-- resource.
+newIdFormat ::
+  IdFormat
+newIdFormat =
+  IdFormat'
+    { deadline = Prelude.Nothing,
+      resource = Prelude.Nothing,
+      useLongIds = Prelude.Nothing
+    }
+
+-- | The date in UTC at which you are permanently switched over to using
+-- longer IDs. If a deadline is not yet available for this resource type,
+-- this field is not returned.
+idFormat_deadline :: Lens.Lens' IdFormat (Prelude.Maybe Prelude.UTCTime)
+idFormat_deadline = Lens.lens (\IdFormat' {deadline} -> deadline) (\s@IdFormat' {} a -> s {deadline = a} :: IdFormat) Prelude.. Lens.mapping Data._Time
+
+-- | The type of resource.
+idFormat_resource :: Lens.Lens' IdFormat (Prelude.Maybe Prelude.Text)
+idFormat_resource = Lens.lens (\IdFormat' {resource} -> resource) (\s@IdFormat' {} a -> s {resource = a} :: IdFormat)
+
+-- | Indicates whether longer IDs (17-character IDs) are enabled for the
+-- resource.
+idFormat_useLongIds :: Lens.Lens' IdFormat (Prelude.Maybe Prelude.Bool)
+idFormat_useLongIds = Lens.lens (\IdFormat' {useLongIds} -> useLongIds) (\s@IdFormat' {} a -> s {useLongIds = a} :: IdFormat)
+
+instance Data.FromXML IdFormat where
+  parseXML x =
+    IdFormat'
+      Prelude.<$> (x Data..@? "deadline")
+      Prelude.<*> (x Data..@? "resource")
+      Prelude.<*> (x Data..@? "useLongIds")
+
+instance Prelude.Hashable IdFormat where
+  hashWithSalt _salt IdFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` deadline
+      `Prelude.hashWithSalt` resource
+      `Prelude.hashWithSalt` useLongIds
+
+instance Prelude.NFData IdFormat where
+  rnf IdFormat' {..} =
+    Prelude.rnf deadline
+      `Prelude.seq` Prelude.rnf resource
+      `Prelude.seq` Prelude.rnf useLongIds
diff --git a/gen/Amazonka/EC2/Types/Igmpv2SupportValue.hs b/gen/Amazonka/EC2/Types/Igmpv2SupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Igmpv2SupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Igmpv2SupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Igmpv2SupportValue
+  ( Igmpv2SupportValue
+      ( ..,
+        Igmpv2SupportValue_Disable,
+        Igmpv2SupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype Igmpv2SupportValue = Igmpv2SupportValue'
+  { fromIgmpv2SupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Igmpv2SupportValue_Disable :: Igmpv2SupportValue
+pattern Igmpv2SupportValue_Disable = Igmpv2SupportValue' "disable"
+
+pattern Igmpv2SupportValue_Enable :: Igmpv2SupportValue
+pattern Igmpv2SupportValue_Enable = Igmpv2SupportValue' "enable"
+
+{-# COMPLETE
+  Igmpv2SupportValue_Disable,
+  Igmpv2SupportValue_Enable,
+  Igmpv2SupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Image.hs b/gen/Amazonka/EC2/Types/Image.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Image.hs
@@ -0,0 +1,580 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Image
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Image where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ArchitectureValues
+import Amazonka.EC2.Types.BlockDeviceMapping
+import Amazonka.EC2.Types.BootModeValues
+import Amazonka.EC2.Types.DeviceType
+import Amazonka.EC2.Types.HypervisorType
+import Amazonka.EC2.Types.ImageState
+import Amazonka.EC2.Types.ImageTypeValues
+import Amazonka.EC2.Types.ImdsSupportValues
+import Amazonka.EC2.Types.PlatformValues
+import Amazonka.EC2.Types.ProductCode
+import Amazonka.EC2.Types.StateReason
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TpmSupportValues
+import Amazonka.EC2.Types.VirtualizationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an image.
+--
+-- /See:/ 'newImage' smart constructor.
+data Image = Image'
+  { -- | Any block device mapping entries.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | The boot mode of the image. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+    -- in the /Amazon EC2 User Guide/.
+    bootMode :: Prelude.Maybe BootModeValues,
+    -- | The date and time the image was created.
+    creationDate :: Prelude.Maybe Prelude.Text,
+    -- | The date and time to deprecate the AMI, in UTC, in the following format:
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z. If you specified a value for seconds,
+    -- Amazon EC2 rounds the seconds to the nearest minute.
+    deprecationTime :: Prelude.Maybe Prelude.Text,
+    -- | The description of the AMI that was provided during image creation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether enhanced networking with ENA is enabled.
+    enaSupport :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services account alias (for example, @amazon@, @self@) or
+    -- the Amazon Web Services account ID of the AMI owner.
+    imageOwnerAlias :: Prelude.Maybe Prelude.Text,
+    -- | If @v2.0@, it indicates that IMDSv2 is specified in the AMI. Instances
+    -- launched from this AMI will have @HttpTokens@ automatically set to
+    -- @required@ so that, by default, the instance requires that IMDSv2 is
+    -- used when requesting instance metadata. In addition,
+    -- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+    -- in the /Amazon EC2 User Guide/.
+    imdsSupport :: Prelude.Maybe ImdsSupportValues,
+    -- | The kernel associated with the image, if any. Only applicable for
+    -- machine images.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the AMI that was provided during image creation.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | This value is set to @windows@ for Windows AMIs; otherwise, it is blank.
+    platform :: Prelude.Maybe PlatformValues,
+    -- | The platform details associated with the billing code of the AMI. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html Understand AMI billing information>
+    -- in the /Amazon EC2 User Guide/.
+    platformDetails :: Prelude.Maybe Prelude.Text,
+    -- | Any product codes associated with the AMI.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | The RAM disk associated with the image, if any. Only applicable for
+    -- machine images.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | The device name of the root device volume (for example, @\/dev\/sda1@).
+    rootDeviceName :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether enhanced networking with the Intel 82599 Virtual
+    -- Function interface is enabled.
+    sriovNetSupport :: Prelude.Maybe Prelude.Text,
+    -- | The reason for the state change.
+    stateReason :: Prelude.Maybe StateReason,
+    -- | Any tags assigned to the image.
+    tags :: Prelude.Maybe [Tag],
+    -- | If the image is configured for NitroTPM support, the value is @v2.0@.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+    -- in the /Amazon EC2 User Guide/.
+    tpmSupport :: Prelude.Maybe TpmSupportValues,
+    -- | The operation of the Amazon EC2 instance and the billing code that is
+    -- associated with the AMI. @usageOperation@ corresponds to the
+    -- <https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation lineitem\/Operation>
+    -- column on your Amazon Web Services Cost and Usage Report and in the
+    -- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html Amazon Web Services Price List API>.
+    -- You can view these fields on the __Instances__ or __AMIs__ pages in the
+    -- Amazon EC2 console, or in the responses that are returned by the
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html DescribeImages>
+    -- command in the Amazon EC2 API, or the
+    -- <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html describe-images>
+    -- command in the CLI.
+    usageOperation :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Text,
+    -- | The location of the AMI.
+    imageLocation :: Prelude.Text,
+    -- | The current state of the AMI. If the state is @available@, the image is
+    -- successfully registered and can be used to launch an instance.
+    state :: ImageState,
+    -- | The ID of the Amazon Web Services account that owns the image.
+    ownerId :: Prelude.Text,
+    -- | Indicates whether the image has public launch permissions. The value is
+    -- @true@ if this image has public launch permissions or @false@ if it has
+    -- only implicit and explicit launch permissions.
+    public :: Prelude.Bool,
+    -- | The architecture of the image.
+    architecture :: ArchitectureValues,
+    -- | The type of image.
+    imageType :: ImageTypeValues,
+    -- | The type of root device used by the AMI. The AMI can use an Amazon EBS
+    -- volume or an instance store volume.
+    rootDeviceType :: DeviceType,
+    -- | The type of virtualization of the AMI.
+    virtualizationType :: VirtualizationType,
+    -- | The hypervisor type of the image.
+    hypervisor :: HypervisorType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Image' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'image_blockDeviceMappings' - Any block device mapping entries.
+--
+-- 'bootMode', 'image_bootMode' - The boot mode of the image. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'creationDate', 'image_creationDate' - The date and time the image was created.
+--
+-- 'deprecationTime', 'image_deprecationTime' - The date and time to deprecate the AMI, in UTC, in the following format:
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z. If you specified a value for seconds,
+-- Amazon EC2 rounds the seconds to the nearest minute.
+--
+-- 'description', 'image_description' - The description of the AMI that was provided during image creation.
+--
+-- 'enaSupport', 'image_enaSupport' - Specifies whether enhanced networking with ENA is enabled.
+--
+-- 'imageOwnerAlias', 'image_imageOwnerAlias' - The Amazon Web Services account alias (for example, @amazon@, @self@) or
+-- the Amazon Web Services account ID of the AMI owner.
+--
+-- 'imdsSupport', 'image_imdsSupport' - If @v2.0@, it indicates that IMDSv2 is specified in the AMI. Instances
+-- launched from this AMI will have @HttpTokens@ automatically set to
+-- @required@ so that, by default, the instance requires that IMDSv2 is
+-- used when requesting instance metadata. In addition,
+-- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'kernelId', 'image_kernelId' - The kernel associated with the image, if any. Only applicable for
+-- machine images.
+--
+-- 'name', 'image_name' - The name of the AMI that was provided during image creation.
+--
+-- 'platform', 'image_platform' - This value is set to @windows@ for Windows AMIs; otherwise, it is blank.
+--
+-- 'platformDetails', 'image_platformDetails' - The platform details associated with the billing code of the AMI. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html Understand AMI billing information>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'productCodes', 'image_productCodes' - Any product codes associated with the AMI.
+--
+-- 'ramdiskId', 'image_ramdiskId' - The RAM disk associated with the image, if any. Only applicable for
+-- machine images.
+--
+-- 'rootDeviceName', 'image_rootDeviceName' - The device name of the root device volume (for example, @\/dev\/sda1@).
+--
+-- 'sriovNetSupport', 'image_sriovNetSupport' - Specifies whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+--
+-- 'stateReason', 'image_stateReason' - The reason for the state change.
+--
+-- 'tags', 'image_tags' - Any tags assigned to the image.
+--
+-- 'tpmSupport', 'image_tpmSupport' - If the image is configured for NitroTPM support, the value is @v2.0@.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'usageOperation', 'image_usageOperation' - The operation of the Amazon EC2 instance and the billing code that is
+-- associated with the AMI. @usageOperation@ corresponds to the
+-- <https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation lineitem\/Operation>
+-- column on your Amazon Web Services Cost and Usage Report and in the
+-- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html Amazon Web Services Price List API>.
+-- You can view these fields on the __Instances__ or __AMIs__ pages in the
+-- Amazon EC2 console, or in the responses that are returned by the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html DescribeImages>
+-- command in the Amazon EC2 API, or the
+-- <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html describe-images>
+-- command in the CLI.
+--
+-- 'imageId', 'image_imageId' - The ID of the AMI.
+--
+-- 'imageLocation', 'image_imageLocation' - The location of the AMI.
+--
+-- 'state', 'image_state' - The current state of the AMI. If the state is @available@, the image is
+-- successfully registered and can be used to launch an instance.
+--
+-- 'ownerId', 'image_ownerId' - The ID of the Amazon Web Services account that owns the image.
+--
+-- 'public', 'image_public' - Indicates whether the image has public launch permissions. The value is
+-- @true@ if this image has public launch permissions or @false@ if it has
+-- only implicit and explicit launch permissions.
+--
+-- 'architecture', 'image_architecture' - The architecture of the image.
+--
+-- 'imageType', 'image_imageType' - The type of image.
+--
+-- 'rootDeviceType', 'image_rootDeviceType' - The type of root device used by the AMI. The AMI can use an Amazon EBS
+-- volume or an instance store volume.
+--
+-- 'virtualizationType', 'image_virtualizationType' - The type of virtualization of the AMI.
+--
+-- 'hypervisor', 'image_hypervisor' - The hypervisor type of the image.
+newImage ::
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 'imageLocation'
+  Prelude.Text ->
+  -- | 'state'
+  ImageState ->
+  -- | 'ownerId'
+  Prelude.Text ->
+  -- | 'public'
+  Prelude.Bool ->
+  -- | 'architecture'
+  ArchitectureValues ->
+  -- | 'imageType'
+  ImageTypeValues ->
+  -- | 'rootDeviceType'
+  DeviceType ->
+  -- | 'virtualizationType'
+  VirtualizationType ->
+  -- | 'hypervisor'
+  HypervisorType ->
+  Image
+newImage
+  pImageId_
+  pImageLocation_
+  pState_
+  pOwnerId_
+  pPublic_
+  pArchitecture_
+  pImageType_
+  pRootDeviceType_
+  pVirtualizationType_
+  pHypervisor_ =
+    Image'
+      { blockDeviceMappings = Prelude.Nothing,
+        bootMode = Prelude.Nothing,
+        creationDate = Prelude.Nothing,
+        deprecationTime = Prelude.Nothing,
+        description = Prelude.Nothing,
+        enaSupport = Prelude.Nothing,
+        imageOwnerAlias = Prelude.Nothing,
+        imdsSupport = Prelude.Nothing,
+        kernelId = Prelude.Nothing,
+        name = Prelude.Nothing,
+        platform = Prelude.Nothing,
+        platformDetails = Prelude.Nothing,
+        productCodes = Prelude.Nothing,
+        ramdiskId = Prelude.Nothing,
+        rootDeviceName = Prelude.Nothing,
+        sriovNetSupport = Prelude.Nothing,
+        stateReason = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        tpmSupport = Prelude.Nothing,
+        usageOperation = Prelude.Nothing,
+        imageId = pImageId_,
+        imageLocation = pImageLocation_,
+        state = pState_,
+        ownerId = pOwnerId_,
+        public = pPublic_,
+        architecture = pArchitecture_,
+        imageType = pImageType_,
+        rootDeviceType = pRootDeviceType_,
+        virtualizationType = pVirtualizationType_,
+        hypervisor = pHypervisor_
+      }
+
+-- | Any block device mapping entries.
+image_blockDeviceMappings :: Lens.Lens' Image (Prelude.Maybe [BlockDeviceMapping])
+image_blockDeviceMappings = Lens.lens (\Image' {blockDeviceMappings} -> blockDeviceMappings) (\s@Image' {} a -> s {blockDeviceMappings = a} :: Image) Prelude.. Lens.mapping Lens.coerced
+
+-- | The boot mode of the image. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+image_bootMode :: Lens.Lens' Image (Prelude.Maybe BootModeValues)
+image_bootMode = Lens.lens (\Image' {bootMode} -> bootMode) (\s@Image' {} a -> s {bootMode = a} :: Image)
+
+-- | The date and time the image was created.
+image_creationDate :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_creationDate = Lens.lens (\Image' {creationDate} -> creationDate) (\s@Image' {} a -> s {creationDate = a} :: Image)
+
+-- | The date and time to deprecate the AMI, in UTC, in the following format:
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z. If you specified a value for seconds,
+-- Amazon EC2 rounds the seconds to the nearest minute.
+image_deprecationTime :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_deprecationTime = Lens.lens (\Image' {deprecationTime} -> deprecationTime) (\s@Image' {} a -> s {deprecationTime = a} :: Image)
+
+-- | The description of the AMI that was provided during image creation.
+image_description :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_description = Lens.lens (\Image' {description} -> description) (\s@Image' {} a -> s {description = a} :: Image)
+
+-- | Specifies whether enhanced networking with ENA is enabled.
+image_enaSupport :: Lens.Lens' Image (Prelude.Maybe Prelude.Bool)
+image_enaSupport = Lens.lens (\Image' {enaSupport} -> enaSupport) (\s@Image' {} a -> s {enaSupport = a} :: Image)
+
+-- | The Amazon Web Services account alias (for example, @amazon@, @self@) or
+-- the Amazon Web Services account ID of the AMI owner.
+image_imageOwnerAlias :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_imageOwnerAlias = Lens.lens (\Image' {imageOwnerAlias} -> imageOwnerAlias) (\s@Image' {} a -> s {imageOwnerAlias = a} :: Image)
+
+-- | If @v2.0@, it indicates that IMDSv2 is specified in the AMI. Instances
+-- launched from this AMI will have @HttpTokens@ automatically set to
+-- @required@ so that, by default, the instance requires that IMDSv2 is
+-- used when requesting instance metadata. In addition,
+-- @HttpPutResponseHopLimit@ is set to @2@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration Configure the AMI>
+-- in the /Amazon EC2 User Guide/.
+image_imdsSupport :: Lens.Lens' Image (Prelude.Maybe ImdsSupportValues)
+image_imdsSupport = Lens.lens (\Image' {imdsSupport} -> imdsSupport) (\s@Image' {} a -> s {imdsSupport = a} :: Image)
+
+-- | The kernel associated with the image, if any. Only applicable for
+-- machine images.
+image_kernelId :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_kernelId = Lens.lens (\Image' {kernelId} -> kernelId) (\s@Image' {} a -> s {kernelId = a} :: Image)
+
+-- | The name of the AMI that was provided during image creation.
+image_name :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_name = Lens.lens (\Image' {name} -> name) (\s@Image' {} a -> s {name = a} :: Image)
+
+-- | This value is set to @windows@ for Windows AMIs; otherwise, it is blank.
+image_platform :: Lens.Lens' Image (Prelude.Maybe PlatformValues)
+image_platform = Lens.lens (\Image' {platform} -> platform) (\s@Image' {} a -> s {platform = a} :: Image)
+
+-- | The platform details associated with the billing code of the AMI. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html Understand AMI billing information>
+-- in the /Amazon EC2 User Guide/.
+image_platformDetails :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_platformDetails = Lens.lens (\Image' {platformDetails} -> platformDetails) (\s@Image' {} a -> s {platformDetails = a} :: Image)
+
+-- | Any product codes associated with the AMI.
+image_productCodes :: Lens.Lens' Image (Prelude.Maybe [ProductCode])
+image_productCodes = Lens.lens (\Image' {productCodes} -> productCodes) (\s@Image' {} a -> s {productCodes = a} :: Image) Prelude.. Lens.mapping Lens.coerced
+
+-- | The RAM disk associated with the image, if any. Only applicable for
+-- machine images.
+image_ramdiskId :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_ramdiskId = Lens.lens (\Image' {ramdiskId} -> ramdiskId) (\s@Image' {} a -> s {ramdiskId = a} :: Image)
+
+-- | The device name of the root device volume (for example, @\/dev\/sda1@).
+image_rootDeviceName :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_rootDeviceName = Lens.lens (\Image' {rootDeviceName} -> rootDeviceName) (\s@Image' {} a -> s {rootDeviceName = a} :: Image)
+
+-- | Specifies whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+image_sriovNetSupport :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_sriovNetSupport = Lens.lens (\Image' {sriovNetSupport} -> sriovNetSupport) (\s@Image' {} a -> s {sriovNetSupport = a} :: Image)
+
+-- | The reason for the state change.
+image_stateReason :: Lens.Lens' Image (Prelude.Maybe StateReason)
+image_stateReason = Lens.lens (\Image' {stateReason} -> stateReason) (\s@Image' {} a -> s {stateReason = a} :: Image)
+
+-- | Any tags assigned to the image.
+image_tags :: Lens.Lens' Image (Prelude.Maybe [Tag])
+image_tags = Lens.lens (\Image' {tags} -> tags) (\s@Image' {} a -> s {tags = a} :: Image) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the image is configured for NitroTPM support, the value is @v2.0@.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+-- in the /Amazon EC2 User Guide/.
+image_tpmSupport :: Lens.Lens' Image (Prelude.Maybe TpmSupportValues)
+image_tpmSupport = Lens.lens (\Image' {tpmSupport} -> tpmSupport) (\s@Image' {} a -> s {tpmSupport = a} :: Image)
+
+-- | The operation of the Amazon EC2 instance and the billing code that is
+-- associated with the AMI. @usageOperation@ corresponds to the
+-- <https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation lineitem\/Operation>
+-- column on your Amazon Web Services Cost and Usage Report and in the
+-- <https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html Amazon Web Services Price List API>.
+-- You can view these fields on the __Instances__ or __AMIs__ pages in the
+-- Amazon EC2 console, or in the responses that are returned by the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html DescribeImages>
+-- command in the Amazon EC2 API, or the
+-- <https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html describe-images>
+-- command in the CLI.
+image_usageOperation :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_usageOperation = Lens.lens (\Image' {usageOperation} -> usageOperation) (\s@Image' {} a -> s {usageOperation = a} :: Image)
+
+-- | The ID of the AMI.
+image_imageId :: Lens.Lens' Image Prelude.Text
+image_imageId = Lens.lens (\Image' {imageId} -> imageId) (\s@Image' {} a -> s {imageId = a} :: Image)
+
+-- | The location of the AMI.
+image_imageLocation :: Lens.Lens' Image Prelude.Text
+image_imageLocation = Lens.lens (\Image' {imageLocation} -> imageLocation) (\s@Image' {} a -> s {imageLocation = a} :: Image)
+
+-- | The current state of the AMI. If the state is @available@, the image is
+-- successfully registered and can be used to launch an instance.
+image_state :: Lens.Lens' Image ImageState
+image_state = Lens.lens (\Image' {state} -> state) (\s@Image' {} a -> s {state = a} :: Image)
+
+-- | The ID of the Amazon Web Services account that owns the image.
+image_ownerId :: Lens.Lens' Image Prelude.Text
+image_ownerId = Lens.lens (\Image' {ownerId} -> ownerId) (\s@Image' {} a -> s {ownerId = a} :: Image)
+
+-- | Indicates whether the image has public launch permissions. The value is
+-- @true@ if this image has public launch permissions or @false@ if it has
+-- only implicit and explicit launch permissions.
+image_public :: Lens.Lens' Image Prelude.Bool
+image_public = Lens.lens (\Image' {public} -> public) (\s@Image' {} a -> s {public = a} :: Image)
+
+-- | The architecture of the image.
+image_architecture :: Lens.Lens' Image ArchitectureValues
+image_architecture = Lens.lens (\Image' {architecture} -> architecture) (\s@Image' {} a -> s {architecture = a} :: Image)
+
+-- | The type of image.
+image_imageType :: Lens.Lens' Image ImageTypeValues
+image_imageType = Lens.lens (\Image' {imageType} -> imageType) (\s@Image' {} a -> s {imageType = a} :: Image)
+
+-- | The type of root device used by the AMI. The AMI can use an Amazon EBS
+-- volume or an instance store volume.
+image_rootDeviceType :: Lens.Lens' Image DeviceType
+image_rootDeviceType = Lens.lens (\Image' {rootDeviceType} -> rootDeviceType) (\s@Image' {} a -> s {rootDeviceType = a} :: Image)
+
+-- | The type of virtualization of the AMI.
+image_virtualizationType :: Lens.Lens' Image VirtualizationType
+image_virtualizationType = Lens.lens (\Image' {virtualizationType} -> virtualizationType) (\s@Image' {} a -> s {virtualizationType = a} :: Image)
+
+-- | The hypervisor type of the image.
+image_hypervisor :: Lens.Lens' Image HypervisorType
+image_hypervisor = Lens.lens (\Image' {hypervisor} -> hypervisor) (\s@Image' {} a -> s {hypervisor = a} :: Image)
+
+instance Data.FromXML Image where
+  parseXML x =
+    Image'
+      Prelude.<$> ( x
+                      Data..@? "blockDeviceMapping"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "bootMode")
+      Prelude.<*> (x Data..@? "creationDate")
+      Prelude.<*> (x Data..@? "deprecationTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "enaSupport")
+      Prelude.<*> (x Data..@? "imageOwnerAlias")
+      Prelude.<*> (x Data..@? "imdsSupport")
+      Prelude.<*> (x Data..@? "kernelId")
+      Prelude.<*> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "platformDetails")
+      Prelude.<*> ( x
+                      Data..@? "productCodes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ramdiskId")
+      Prelude.<*> (x Data..@? "rootDeviceName")
+      Prelude.<*> (x Data..@? "sriovNetSupport")
+      Prelude.<*> (x Data..@? "stateReason")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "tpmSupport")
+      Prelude.<*> (x Data..@? "usageOperation")
+      Prelude.<*> (x Data..@ "imageId")
+      Prelude.<*> (x Data..@ "imageLocation")
+      Prelude.<*> (x Data..@ "imageState")
+      Prelude.<*> (x Data..@ "imageOwnerId")
+      Prelude.<*> (x Data..@ "isPublic")
+      Prelude.<*> (x Data..@ "architecture")
+      Prelude.<*> (x Data..@ "imageType")
+      Prelude.<*> (x Data..@ "rootDeviceType")
+      Prelude.<*> (x Data..@ "virtualizationType")
+      Prelude.<*> (x Data..@ "hypervisor")
+
+instance Prelude.Hashable Image where
+  hashWithSalt _salt Image' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` deprecationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` enaSupport
+      `Prelude.hashWithSalt` imageOwnerAlias
+      `Prelude.hashWithSalt` imdsSupport
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` platformDetails
+      `Prelude.hashWithSalt` productCodes
+      `Prelude.hashWithSalt` ramdiskId
+      `Prelude.hashWithSalt` rootDeviceName
+      `Prelude.hashWithSalt` sriovNetSupport
+      `Prelude.hashWithSalt` stateReason
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tpmSupport
+      `Prelude.hashWithSalt` usageOperation
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` imageLocation
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` public
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` imageType
+      `Prelude.hashWithSalt` rootDeviceType
+      `Prelude.hashWithSalt` virtualizationType
+      `Prelude.hashWithSalt` hypervisor
+
+instance Prelude.NFData Image where
+  rnf Image' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf deprecationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf enaSupport
+      `Prelude.seq` Prelude.rnf imageOwnerAlias
+      `Prelude.seq` Prelude.rnf imdsSupport
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf platformDetails
+      `Prelude.seq` Prelude.rnf productCodes
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf rootDeviceName
+      `Prelude.seq` Prelude.rnf sriovNetSupport
+      `Prelude.seq` Prelude.rnf stateReason
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf tpmSupport
+      `Prelude.seq` Prelude.rnf usageOperation
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf imageLocation
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf public
+      `Prelude.seq` Prelude.rnf
+        architecture
+      `Prelude.seq` Prelude.rnf
+        imageType
+      `Prelude.seq` Prelude.rnf
+        rootDeviceType
+      `Prelude.seq` Prelude.rnf
+        virtualizationType
+      `Prelude.seq` Prelude.rnf
+        hypervisor
diff --git a/gen/Amazonka/EC2/Types/ImageAttributeName.hs b/gen/Amazonka/EC2/Types/ImageAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImageAttributeName.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImageAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImageAttributeName
+  ( ImageAttributeName
+      ( ..,
+        ImageAttributeName_BlockDeviceMapping,
+        ImageAttributeName_BootMode,
+        ImageAttributeName_Description,
+        ImageAttributeName_ImdsSupport,
+        ImageAttributeName_Kernel,
+        ImageAttributeName_LastLaunchedTime,
+        ImageAttributeName_LaunchPermission,
+        ImageAttributeName_ProductCodes,
+        ImageAttributeName_Ramdisk,
+        ImageAttributeName_SriovNetSupport,
+        ImageAttributeName_TpmSupport,
+        ImageAttributeName_UefiData
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageAttributeName = ImageAttributeName'
+  { fromImageAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageAttributeName_BlockDeviceMapping :: ImageAttributeName
+pattern ImageAttributeName_BlockDeviceMapping = ImageAttributeName' "blockDeviceMapping"
+
+pattern ImageAttributeName_BootMode :: ImageAttributeName
+pattern ImageAttributeName_BootMode = ImageAttributeName' "bootMode"
+
+pattern ImageAttributeName_Description :: ImageAttributeName
+pattern ImageAttributeName_Description = ImageAttributeName' "description"
+
+pattern ImageAttributeName_ImdsSupport :: ImageAttributeName
+pattern ImageAttributeName_ImdsSupport = ImageAttributeName' "imdsSupport"
+
+pattern ImageAttributeName_Kernel :: ImageAttributeName
+pattern ImageAttributeName_Kernel = ImageAttributeName' "kernel"
+
+pattern ImageAttributeName_LastLaunchedTime :: ImageAttributeName
+pattern ImageAttributeName_LastLaunchedTime = ImageAttributeName' "lastLaunchedTime"
+
+pattern ImageAttributeName_LaunchPermission :: ImageAttributeName
+pattern ImageAttributeName_LaunchPermission = ImageAttributeName' "launchPermission"
+
+pattern ImageAttributeName_ProductCodes :: ImageAttributeName
+pattern ImageAttributeName_ProductCodes = ImageAttributeName' "productCodes"
+
+pattern ImageAttributeName_Ramdisk :: ImageAttributeName
+pattern ImageAttributeName_Ramdisk = ImageAttributeName' "ramdisk"
+
+pattern ImageAttributeName_SriovNetSupport :: ImageAttributeName
+pattern ImageAttributeName_SriovNetSupport = ImageAttributeName' "sriovNetSupport"
+
+pattern ImageAttributeName_TpmSupport :: ImageAttributeName
+pattern ImageAttributeName_TpmSupport = ImageAttributeName' "tpmSupport"
+
+pattern ImageAttributeName_UefiData :: ImageAttributeName
+pattern ImageAttributeName_UefiData = ImageAttributeName' "uefiData"
+
+{-# COMPLETE
+  ImageAttributeName_BlockDeviceMapping,
+  ImageAttributeName_BootMode,
+  ImageAttributeName_Description,
+  ImageAttributeName_ImdsSupport,
+  ImageAttributeName_Kernel,
+  ImageAttributeName_LastLaunchedTime,
+  ImageAttributeName_LaunchPermission,
+  ImageAttributeName_ProductCodes,
+  ImageAttributeName_Ramdisk,
+  ImageAttributeName_SriovNetSupport,
+  ImageAttributeName_TpmSupport,
+  ImageAttributeName_UefiData,
+  ImageAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ImageDiskContainer.hs b/gen/Amazonka/EC2/Types/ImageDiskContainer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImageDiskContainer.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImageDiskContainer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImageDiskContainer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UserBucket
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the disk container object for an import image task.
+--
+-- /See:/ 'newImageDiskContainer' smart constructor.
+data ImageDiskContainer = ImageDiskContainer'
+  { -- | The description of the disk image.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The block device mapping for the disk.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The format of the disk image being imported.
+    --
+    -- Valid values: @OVA@ | @VHD@ | @VHDX@ | @VMDK@ | @RAW@
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the EBS snapshot to be used for importing the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The URL to the Amazon S3-based disk image being imported. The URL can
+    -- either be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..)
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The S3 bucket for the disk image.
+    userBucket :: Prelude.Maybe UserBucket
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageDiskContainer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'imageDiskContainer_description' - The description of the disk image.
+--
+-- 'deviceName', 'imageDiskContainer_deviceName' - The block device mapping for the disk.
+--
+-- 'format', 'imageDiskContainer_format' - The format of the disk image being imported.
+--
+-- Valid values: @OVA@ | @VHD@ | @VHDX@ | @VMDK@ | @RAW@
+--
+-- 'snapshotId', 'imageDiskContainer_snapshotId' - The ID of the EBS snapshot to be used for importing the snapshot.
+--
+-- 'url', 'imageDiskContainer_url' - The URL to the Amazon S3-based disk image being imported. The URL can
+-- either be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..)
+--
+-- 'userBucket', 'imageDiskContainer_userBucket' - The S3 bucket for the disk image.
+newImageDiskContainer ::
+  ImageDiskContainer
+newImageDiskContainer =
+  ImageDiskContainer'
+    { description = Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      format = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      url = Prelude.Nothing,
+      userBucket = Prelude.Nothing
+    }
+
+-- | The description of the disk image.
+imageDiskContainer_description :: Lens.Lens' ImageDiskContainer (Prelude.Maybe Prelude.Text)
+imageDiskContainer_description = Lens.lens (\ImageDiskContainer' {description} -> description) (\s@ImageDiskContainer' {} a -> s {description = a} :: ImageDiskContainer)
+
+-- | The block device mapping for the disk.
+imageDiskContainer_deviceName :: Lens.Lens' ImageDiskContainer (Prelude.Maybe Prelude.Text)
+imageDiskContainer_deviceName = Lens.lens (\ImageDiskContainer' {deviceName} -> deviceName) (\s@ImageDiskContainer' {} a -> s {deviceName = a} :: ImageDiskContainer)
+
+-- | The format of the disk image being imported.
+--
+-- Valid values: @OVA@ | @VHD@ | @VHDX@ | @VMDK@ | @RAW@
+imageDiskContainer_format :: Lens.Lens' ImageDiskContainer (Prelude.Maybe Prelude.Text)
+imageDiskContainer_format = Lens.lens (\ImageDiskContainer' {format} -> format) (\s@ImageDiskContainer' {} a -> s {format = a} :: ImageDiskContainer)
+
+-- | The ID of the EBS snapshot to be used for importing the snapshot.
+imageDiskContainer_snapshotId :: Lens.Lens' ImageDiskContainer (Prelude.Maybe Prelude.Text)
+imageDiskContainer_snapshotId = Lens.lens (\ImageDiskContainer' {snapshotId} -> snapshotId) (\s@ImageDiskContainer' {} a -> s {snapshotId = a} :: ImageDiskContainer)
+
+-- | The URL to the Amazon S3-based disk image being imported. The URL can
+-- either be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..)
+imageDiskContainer_url :: Lens.Lens' ImageDiskContainer (Prelude.Maybe Prelude.Text)
+imageDiskContainer_url = Lens.lens (\ImageDiskContainer' {url} -> url) (\s@ImageDiskContainer' {} a -> s {url = a} :: ImageDiskContainer)
+
+-- | The S3 bucket for the disk image.
+imageDiskContainer_userBucket :: Lens.Lens' ImageDiskContainer (Prelude.Maybe UserBucket)
+imageDiskContainer_userBucket = Lens.lens (\ImageDiskContainer' {userBucket} -> userBucket) (\s@ImageDiskContainer' {} a -> s {userBucket = a} :: ImageDiskContainer)
+
+instance Prelude.Hashable ImageDiskContainer where
+  hashWithSalt _salt ImageDiskContainer' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` userBucket
+
+instance Prelude.NFData ImageDiskContainer where
+  rnf ImageDiskContainer' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf userBucket
+
+instance Data.ToQuery ImageDiskContainer where
+  toQuery ImageDiskContainer' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "DeviceName" Data.=: deviceName,
+        "Format" Data.=: format,
+        "SnapshotId" Data.=: snapshotId,
+        "Url" Data.=: url,
+        "UserBucket" Data.=: userBucket
+      ]
diff --git a/gen/Amazonka/EC2/Types/ImageRecycleBinInfo.hs b/gen/Amazonka/EC2/Types/ImageRecycleBinInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImageRecycleBinInfo.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImageRecycleBinInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImageRecycleBinInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an AMI that is currently in the Recycle Bin.
+--
+-- /See:/ 'newImageRecycleBinInfo' smart constructor.
+data ImageRecycleBinInfo = ImageRecycleBinInfo'
+  { -- | The description of the AMI.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the AMI.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the AMI entered the Recycle Bin.
+    recycleBinEnterTime :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time when the AMI is to be permanently deleted from the
+    -- Recycle Bin.
+    recycleBinExitTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageRecycleBinInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'imageRecycleBinInfo_description' - The description of the AMI.
+--
+-- 'imageId', 'imageRecycleBinInfo_imageId' - The ID of the AMI.
+--
+-- 'name', 'imageRecycleBinInfo_name' - The name of the AMI.
+--
+-- 'recycleBinEnterTime', 'imageRecycleBinInfo_recycleBinEnterTime' - The date and time when the AMI entered the Recycle Bin.
+--
+-- 'recycleBinExitTime', 'imageRecycleBinInfo_recycleBinExitTime' - The date and time when the AMI is to be permanently deleted from the
+-- Recycle Bin.
+newImageRecycleBinInfo ::
+  ImageRecycleBinInfo
+newImageRecycleBinInfo =
+  ImageRecycleBinInfo'
+    { description = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      recycleBinEnterTime = Prelude.Nothing,
+      recycleBinExitTime = Prelude.Nothing
+    }
+
+-- | The description of the AMI.
+imageRecycleBinInfo_description :: Lens.Lens' ImageRecycleBinInfo (Prelude.Maybe Prelude.Text)
+imageRecycleBinInfo_description = Lens.lens (\ImageRecycleBinInfo' {description} -> description) (\s@ImageRecycleBinInfo' {} a -> s {description = a} :: ImageRecycleBinInfo)
+
+-- | The ID of the AMI.
+imageRecycleBinInfo_imageId :: Lens.Lens' ImageRecycleBinInfo (Prelude.Maybe Prelude.Text)
+imageRecycleBinInfo_imageId = Lens.lens (\ImageRecycleBinInfo' {imageId} -> imageId) (\s@ImageRecycleBinInfo' {} a -> s {imageId = a} :: ImageRecycleBinInfo)
+
+-- | The name of the AMI.
+imageRecycleBinInfo_name :: Lens.Lens' ImageRecycleBinInfo (Prelude.Maybe Prelude.Text)
+imageRecycleBinInfo_name = Lens.lens (\ImageRecycleBinInfo' {name} -> name) (\s@ImageRecycleBinInfo' {} a -> s {name = a} :: ImageRecycleBinInfo)
+
+-- | The date and time when the AMI entered the Recycle Bin.
+imageRecycleBinInfo_recycleBinEnterTime :: Lens.Lens' ImageRecycleBinInfo (Prelude.Maybe Prelude.UTCTime)
+imageRecycleBinInfo_recycleBinEnterTime = Lens.lens (\ImageRecycleBinInfo' {recycleBinEnterTime} -> recycleBinEnterTime) (\s@ImageRecycleBinInfo' {} a -> s {recycleBinEnterTime = a} :: ImageRecycleBinInfo) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time when the AMI is to be permanently deleted from the
+-- Recycle Bin.
+imageRecycleBinInfo_recycleBinExitTime :: Lens.Lens' ImageRecycleBinInfo (Prelude.Maybe Prelude.UTCTime)
+imageRecycleBinInfo_recycleBinExitTime = Lens.lens (\ImageRecycleBinInfo' {recycleBinExitTime} -> recycleBinExitTime) (\s@ImageRecycleBinInfo' {} a -> s {recycleBinExitTime = a} :: ImageRecycleBinInfo) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML ImageRecycleBinInfo where
+  parseXML x =
+    ImageRecycleBinInfo'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "recycleBinEnterTime")
+      Prelude.<*> (x Data..@? "recycleBinExitTime")
+
+instance Prelude.Hashable ImageRecycleBinInfo where
+  hashWithSalt _salt ImageRecycleBinInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` recycleBinEnterTime
+      `Prelude.hashWithSalt` recycleBinExitTime
+
+instance Prelude.NFData ImageRecycleBinInfo where
+  rnf ImageRecycleBinInfo' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf recycleBinEnterTime
+      `Prelude.seq` Prelude.rnf recycleBinExitTime
diff --git a/gen/Amazonka/EC2/Types/ImageState.hs b/gen/Amazonka/EC2/Types/ImageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImageState.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImageState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImageState
+  ( ImageState
+      ( ..,
+        ImageState_Available,
+        ImageState_Deregistered,
+        ImageState_Error,
+        ImageState_Failed,
+        ImageState_Invalid,
+        ImageState_Pending,
+        ImageState_Transient
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageState = ImageState'
+  { fromImageState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageState_Available :: ImageState
+pattern ImageState_Available = ImageState' "available"
+
+pattern ImageState_Deregistered :: ImageState
+pattern ImageState_Deregistered = ImageState' "deregistered"
+
+pattern ImageState_Error :: ImageState
+pattern ImageState_Error = ImageState' "error"
+
+pattern ImageState_Failed :: ImageState
+pattern ImageState_Failed = ImageState' "failed"
+
+pattern ImageState_Invalid :: ImageState
+pattern ImageState_Invalid = ImageState' "invalid"
+
+pattern ImageState_Pending :: ImageState
+pattern ImageState_Pending = ImageState' "pending"
+
+pattern ImageState_Transient :: ImageState
+pattern ImageState_Transient = ImageState' "transient"
+
+{-# COMPLETE
+  ImageState_Available,
+  ImageState_Deregistered,
+  ImageState_Error,
+  ImageState_Failed,
+  ImageState_Invalid,
+  ImageState_Pending,
+  ImageState_Transient,
+  ImageState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ImageTypeValues.hs b/gen/Amazonka/EC2/Types/ImageTypeValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImageTypeValues.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImageTypeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImageTypeValues
+  ( ImageTypeValues
+      ( ..,
+        ImageTypeValues_Kernel,
+        ImageTypeValues_Machine,
+        ImageTypeValues_Ramdisk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageTypeValues = ImageTypeValues'
+  { fromImageTypeValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImageTypeValues_Kernel :: ImageTypeValues
+pattern ImageTypeValues_Kernel = ImageTypeValues' "kernel"
+
+pattern ImageTypeValues_Machine :: ImageTypeValues
+pattern ImageTypeValues_Machine = ImageTypeValues' "machine"
+
+pattern ImageTypeValues_Ramdisk :: ImageTypeValues
+pattern ImageTypeValues_Ramdisk = ImageTypeValues' "ramdisk"
+
+{-# COMPLETE
+  ImageTypeValues_Kernel,
+  ImageTypeValues_Machine,
+  ImageTypeValues_Ramdisk,
+  ImageTypeValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ImdsSupportValues.hs b/gen/Amazonka/EC2/Types/ImdsSupportValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImdsSupportValues.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImdsSupportValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImdsSupportValues
+  ( ImdsSupportValues
+      ( ..,
+        ImdsSupportValues_V2_0
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImdsSupportValues = ImdsSupportValues'
+  { fromImdsSupportValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ImdsSupportValues_V2_0 :: ImdsSupportValues
+pattern ImdsSupportValues_V2_0 = ImdsSupportValues' "v2.0"
+
+{-# COMPLETE
+  ImdsSupportValues_V2_0,
+  ImdsSupportValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ImportImageLicenseConfigurationRequest.hs b/gen/Amazonka/EC2/Types/ImportImageLicenseConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportImageLicenseConfigurationRequest.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportImageLicenseConfigurationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportImageLicenseConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The request information of license configurations.
+--
+-- /See:/ 'newImportImageLicenseConfigurationRequest' smart constructor.
+data ImportImageLicenseConfigurationRequest = ImportImageLicenseConfigurationRequest'
+  { -- | The ARN of a license configuration.
+    licenseConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportImageLicenseConfigurationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'licenseConfigurationArn', 'importImageLicenseConfigurationRequest_licenseConfigurationArn' - The ARN of a license configuration.
+newImportImageLicenseConfigurationRequest ::
+  ImportImageLicenseConfigurationRequest
+newImportImageLicenseConfigurationRequest =
+  ImportImageLicenseConfigurationRequest'
+    { licenseConfigurationArn =
+        Prelude.Nothing
+    }
+
+-- | The ARN of a license configuration.
+importImageLicenseConfigurationRequest_licenseConfigurationArn :: Lens.Lens' ImportImageLicenseConfigurationRequest (Prelude.Maybe Prelude.Text)
+importImageLicenseConfigurationRequest_licenseConfigurationArn = Lens.lens (\ImportImageLicenseConfigurationRequest' {licenseConfigurationArn} -> licenseConfigurationArn) (\s@ImportImageLicenseConfigurationRequest' {} a -> s {licenseConfigurationArn = a} :: ImportImageLicenseConfigurationRequest)
+
+instance
+  Prelude.Hashable
+    ImportImageLicenseConfigurationRequest
+  where
+  hashWithSalt
+    _salt
+    ImportImageLicenseConfigurationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` licenseConfigurationArn
+
+instance
+  Prelude.NFData
+    ImportImageLicenseConfigurationRequest
+  where
+  rnf ImportImageLicenseConfigurationRequest' {..} =
+    Prelude.rnf licenseConfigurationArn
+
+instance
+  Data.ToQuery
+    ImportImageLicenseConfigurationRequest
+  where
+  toQuery ImportImageLicenseConfigurationRequest' {..} =
+    Prelude.mconcat
+      [ "LicenseConfigurationArn"
+          Data.=: licenseConfigurationArn
+      ]
diff --git a/gen/Amazonka/EC2/Types/ImportImageLicenseConfigurationResponse.hs b/gen/Amazonka/EC2/Types/ImportImageLicenseConfigurationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportImageLicenseConfigurationResponse.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportImageLicenseConfigurationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportImageLicenseConfigurationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The response information for license configurations.
+--
+-- /See:/ 'newImportImageLicenseConfigurationResponse' smart constructor.
+data ImportImageLicenseConfigurationResponse = ImportImageLicenseConfigurationResponse'
+  { -- | The ARN of a license configuration.
+    licenseConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportImageLicenseConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'licenseConfigurationArn', 'importImageLicenseConfigurationResponse_licenseConfigurationArn' - The ARN of a license configuration.
+newImportImageLicenseConfigurationResponse ::
+  ImportImageLicenseConfigurationResponse
+newImportImageLicenseConfigurationResponse =
+  ImportImageLicenseConfigurationResponse'
+    { licenseConfigurationArn =
+        Prelude.Nothing
+    }
+
+-- | The ARN of a license configuration.
+importImageLicenseConfigurationResponse_licenseConfigurationArn :: Lens.Lens' ImportImageLicenseConfigurationResponse (Prelude.Maybe Prelude.Text)
+importImageLicenseConfigurationResponse_licenseConfigurationArn = Lens.lens (\ImportImageLicenseConfigurationResponse' {licenseConfigurationArn} -> licenseConfigurationArn) (\s@ImportImageLicenseConfigurationResponse' {} a -> s {licenseConfigurationArn = a} :: ImportImageLicenseConfigurationResponse)
+
+instance
+  Data.FromXML
+    ImportImageLicenseConfigurationResponse
+  where
+  parseXML x =
+    ImportImageLicenseConfigurationResponse'
+      Prelude.<$> (x Data..@? "licenseConfigurationArn")
+
+instance
+  Prelude.Hashable
+    ImportImageLicenseConfigurationResponse
+  where
+  hashWithSalt
+    _salt
+    ImportImageLicenseConfigurationResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` licenseConfigurationArn
+
+instance
+  Prelude.NFData
+    ImportImageLicenseConfigurationResponse
+  where
+  rnf ImportImageLicenseConfigurationResponse' {..} =
+    Prelude.rnf licenseConfigurationArn
diff --git a/gen/Amazonka/EC2/Types/ImportImageTask.hs b/gen/Amazonka/EC2/Types/ImportImageTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportImageTask.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportImageTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportImageTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BootModeValues
+import Amazonka.EC2.Types.ImportImageLicenseConfigurationResponse
+import Amazonka.EC2.Types.SnapshotDetail
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an import image task.
+--
+-- /See:/ 'newImportImageTask' smart constructor.
+data ImportImageTask = ImportImageTask'
+  { -- | The architecture of the virtual machine.
+    --
+    -- Valid values: @i386@ | @x86_64@ | @arm64@
+    architecture :: Prelude.Maybe Prelude.Text,
+    -- | The boot mode of the virtual machine.
+    bootMode :: Prelude.Maybe BootModeValues,
+    -- | A description of the import task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the image is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The target hypervisor for the import task.
+    --
+    -- Valid values: @xen@
+    hypervisor :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Machine Image (AMI) of the imported virtual
+    -- machine.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the import image task.
+    importTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for the KMS key that was used to create the encrypted
+    -- image.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ARNs of the license configurations that are associated with the
+    -- import image task.
+    licenseSpecifications :: Prelude.Maybe [ImportImageLicenseConfigurationResponse],
+    -- | The license type of the virtual machine.
+    licenseType :: Prelude.Maybe Prelude.Text,
+    -- | The description string for the import image task.
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of progress of the import image task.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | Information about the snapshots.
+    snapshotDetails :: Prelude.Maybe [SnapshotDetail],
+    -- | A brief status for the import image task.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | A descriptive status message for the import image task.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the import image task.
+    tags :: Prelude.Maybe [Tag],
+    -- | The usage operation value.
+    usageOperation :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportImageTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architecture', 'importImageTask_architecture' - The architecture of the virtual machine.
+--
+-- Valid values: @i386@ | @x86_64@ | @arm64@
+--
+-- 'bootMode', 'importImageTask_bootMode' - The boot mode of the virtual machine.
+--
+-- 'description', 'importImageTask_description' - A description of the import task.
+--
+-- 'encrypted', 'importImageTask_encrypted' - Indicates whether the image is encrypted.
+--
+-- 'hypervisor', 'importImageTask_hypervisor' - The target hypervisor for the import task.
+--
+-- Valid values: @xen@
+--
+-- 'imageId', 'importImageTask_imageId' - The ID of the Amazon Machine Image (AMI) of the imported virtual
+-- machine.
+--
+-- 'importTaskId', 'importImageTask_importTaskId' - The ID of the import image task.
+--
+-- 'kmsKeyId', 'importImageTask_kmsKeyId' - The identifier for the KMS key that was used to create the encrypted
+-- image.
+--
+-- 'licenseSpecifications', 'importImageTask_licenseSpecifications' - The ARNs of the license configurations that are associated with the
+-- import image task.
+--
+-- 'licenseType', 'importImageTask_licenseType' - The license type of the virtual machine.
+--
+-- 'platform', 'importImageTask_platform' - The description string for the import image task.
+--
+-- 'progress', 'importImageTask_progress' - The percentage of progress of the import image task.
+--
+-- 'snapshotDetails', 'importImageTask_snapshotDetails' - Information about the snapshots.
+--
+-- 'status', 'importImageTask_status' - A brief status for the import image task.
+--
+-- 'statusMessage', 'importImageTask_statusMessage' - A descriptive status message for the import image task.
+--
+-- 'tags', 'importImageTask_tags' - The tags for the import image task.
+--
+-- 'usageOperation', 'importImageTask_usageOperation' - The usage operation value.
+newImportImageTask ::
+  ImportImageTask
+newImportImageTask =
+  ImportImageTask'
+    { architecture = Prelude.Nothing,
+      bootMode = Prelude.Nothing,
+      description = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      hypervisor = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      importTaskId = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      licenseSpecifications = Prelude.Nothing,
+      licenseType = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      snapshotDetails = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      usageOperation = Prelude.Nothing
+    }
+
+-- | The architecture of the virtual machine.
+--
+-- Valid values: @i386@ | @x86_64@ | @arm64@
+importImageTask_architecture :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_architecture = Lens.lens (\ImportImageTask' {architecture} -> architecture) (\s@ImportImageTask' {} a -> s {architecture = a} :: ImportImageTask)
+
+-- | The boot mode of the virtual machine.
+importImageTask_bootMode :: Lens.Lens' ImportImageTask (Prelude.Maybe BootModeValues)
+importImageTask_bootMode = Lens.lens (\ImportImageTask' {bootMode} -> bootMode) (\s@ImportImageTask' {} a -> s {bootMode = a} :: ImportImageTask)
+
+-- | A description of the import task.
+importImageTask_description :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_description = Lens.lens (\ImportImageTask' {description} -> description) (\s@ImportImageTask' {} a -> s {description = a} :: ImportImageTask)
+
+-- | Indicates whether the image is encrypted.
+importImageTask_encrypted :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Bool)
+importImageTask_encrypted = Lens.lens (\ImportImageTask' {encrypted} -> encrypted) (\s@ImportImageTask' {} a -> s {encrypted = a} :: ImportImageTask)
+
+-- | The target hypervisor for the import task.
+--
+-- Valid values: @xen@
+importImageTask_hypervisor :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_hypervisor = Lens.lens (\ImportImageTask' {hypervisor} -> hypervisor) (\s@ImportImageTask' {} a -> s {hypervisor = a} :: ImportImageTask)
+
+-- | The ID of the Amazon Machine Image (AMI) of the imported virtual
+-- machine.
+importImageTask_imageId :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_imageId = Lens.lens (\ImportImageTask' {imageId} -> imageId) (\s@ImportImageTask' {} a -> s {imageId = a} :: ImportImageTask)
+
+-- | The ID of the import image task.
+importImageTask_importTaskId :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_importTaskId = Lens.lens (\ImportImageTask' {importTaskId} -> importTaskId) (\s@ImportImageTask' {} a -> s {importTaskId = a} :: ImportImageTask)
+
+-- | The identifier for the KMS key that was used to create the encrypted
+-- image.
+importImageTask_kmsKeyId :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_kmsKeyId = Lens.lens (\ImportImageTask' {kmsKeyId} -> kmsKeyId) (\s@ImportImageTask' {} a -> s {kmsKeyId = a} :: ImportImageTask)
+
+-- | The ARNs of the license configurations that are associated with the
+-- import image task.
+importImageTask_licenseSpecifications :: Lens.Lens' ImportImageTask (Prelude.Maybe [ImportImageLicenseConfigurationResponse])
+importImageTask_licenseSpecifications = Lens.lens (\ImportImageTask' {licenseSpecifications} -> licenseSpecifications) (\s@ImportImageTask' {} a -> s {licenseSpecifications = a} :: ImportImageTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The license type of the virtual machine.
+importImageTask_licenseType :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_licenseType = Lens.lens (\ImportImageTask' {licenseType} -> licenseType) (\s@ImportImageTask' {} a -> s {licenseType = a} :: ImportImageTask)
+
+-- | The description string for the import image task.
+importImageTask_platform :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_platform = Lens.lens (\ImportImageTask' {platform} -> platform) (\s@ImportImageTask' {} a -> s {platform = a} :: ImportImageTask)
+
+-- | The percentage of progress of the import image task.
+importImageTask_progress :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_progress = Lens.lens (\ImportImageTask' {progress} -> progress) (\s@ImportImageTask' {} a -> s {progress = a} :: ImportImageTask)
+
+-- | Information about the snapshots.
+importImageTask_snapshotDetails :: Lens.Lens' ImportImageTask (Prelude.Maybe [SnapshotDetail])
+importImageTask_snapshotDetails = Lens.lens (\ImportImageTask' {snapshotDetails} -> snapshotDetails) (\s@ImportImageTask' {} a -> s {snapshotDetails = a} :: ImportImageTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | A brief status for the import image task.
+importImageTask_status :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_status = Lens.lens (\ImportImageTask' {status} -> status) (\s@ImportImageTask' {} a -> s {status = a} :: ImportImageTask)
+
+-- | A descriptive status message for the import image task.
+importImageTask_statusMessage :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_statusMessage = Lens.lens (\ImportImageTask' {statusMessage} -> statusMessage) (\s@ImportImageTask' {} a -> s {statusMessage = a} :: ImportImageTask)
+
+-- | The tags for the import image task.
+importImageTask_tags :: Lens.Lens' ImportImageTask (Prelude.Maybe [Tag])
+importImageTask_tags = Lens.lens (\ImportImageTask' {tags} -> tags) (\s@ImportImageTask' {} a -> s {tags = a} :: ImportImageTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The usage operation value.
+importImageTask_usageOperation :: Lens.Lens' ImportImageTask (Prelude.Maybe Prelude.Text)
+importImageTask_usageOperation = Lens.lens (\ImportImageTask' {usageOperation} -> usageOperation) (\s@ImportImageTask' {} a -> s {usageOperation = a} :: ImportImageTask)
+
+instance Data.FromXML ImportImageTask where
+  parseXML x =
+    ImportImageTask'
+      Prelude.<$> (x Data..@? "architecture")
+      Prelude.<*> (x Data..@? "bootMode")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "encrypted")
+      Prelude.<*> (x Data..@? "hypervisor")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "importTaskId")
+      Prelude.<*> (x Data..@? "kmsKeyId")
+      Prelude.<*> ( x
+                      Data..@? "licenseSpecifications"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "licenseType")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "progress")
+      Prelude.<*> ( x
+                      Data..@? "snapshotDetailSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "usageOperation")
+
+instance Prelude.Hashable ImportImageTask where
+  hashWithSalt _salt ImportImageTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` hypervisor
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` importTaskId
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` licenseSpecifications
+      `Prelude.hashWithSalt` licenseType
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` snapshotDetails
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` usageOperation
+
+instance Prelude.NFData ImportImageTask where
+  rnf ImportImageTask' {..} =
+    Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf hypervisor
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf importTaskId
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf licenseSpecifications
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf snapshotDetails
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf usageOperation
diff --git a/gen/Amazonka/EC2/Types/ImportInstanceLaunchSpecification.hs b/gen/Amazonka/EC2/Types/ImportInstanceLaunchSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportInstanceLaunchSpecification.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportInstanceLaunchSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportInstanceLaunchSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ArchitectureValues
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.Placement
+import Amazonka.EC2.Types.ShutdownBehavior
+import Amazonka.EC2.Types.UserData
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the launch specification for VM import.
+--
+-- /See:/ 'newImportInstanceLaunchSpecification' smart constructor.
+data ImportInstanceLaunchSpecification = ImportInstanceLaunchSpecification'
+  { -- | Reserved.
+    additionalInfo :: Prelude.Maybe Prelude.Text,
+    -- | The architecture of the instance.
+    architecture :: Prelude.Maybe ArchitectureValues,
+    -- | The security group IDs.
+    groupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The security group names.
+    groupNames :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether an instance stops or terminates when you initiate
+    -- shutdown from the instance (using the operating system command for
+    -- system shutdown).
+    instanceInitiatedShutdownBehavior :: Prelude.Maybe ShutdownBehavior,
+    -- | The instance type. For more information about the instance types that
+    -- you can import, see
+    -- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types Instance Types>
+    -- in the VM Import\/Export User Guide.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | Indicates whether monitoring is enabled.
+    monitoring :: Prelude.Maybe Prelude.Bool,
+    -- | The placement information for the instance.
+    placement :: Prelude.Maybe Placement,
+    -- | [EC2-VPC] An available IP address from the IP address range of the
+    -- subnet.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-VPC] The ID of the subnet in which to launch the instance.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The Base64-encoded user data to make available to the instance.
+    userData :: Prelude.Maybe (Data.Sensitive UserData)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportInstanceLaunchSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalInfo', 'importInstanceLaunchSpecification_additionalInfo' - Reserved.
+--
+-- 'architecture', 'importInstanceLaunchSpecification_architecture' - The architecture of the instance.
+--
+-- 'groupIds', 'importInstanceLaunchSpecification_groupIds' - The security group IDs.
+--
+-- 'groupNames', 'importInstanceLaunchSpecification_groupNames' - The security group names.
+--
+-- 'instanceInitiatedShutdownBehavior', 'importInstanceLaunchSpecification_instanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- 'instanceType', 'importInstanceLaunchSpecification_instanceType' - The instance type. For more information about the instance types that
+-- you can import, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types Instance Types>
+-- in the VM Import\/Export User Guide.
+--
+-- 'monitoring', 'importInstanceLaunchSpecification_monitoring' - Indicates whether monitoring is enabled.
+--
+-- 'placement', 'importInstanceLaunchSpecification_placement' - The placement information for the instance.
+--
+-- 'privateIpAddress', 'importInstanceLaunchSpecification_privateIpAddress' - [EC2-VPC] An available IP address from the IP address range of the
+-- subnet.
+--
+-- 'subnetId', 'importInstanceLaunchSpecification_subnetId' - [EC2-VPC] The ID of the subnet in which to launch the instance.
+--
+-- 'userData', 'importInstanceLaunchSpecification_userData' - The Base64-encoded user data to make available to the instance.
+newImportInstanceLaunchSpecification ::
+  ImportInstanceLaunchSpecification
+newImportInstanceLaunchSpecification =
+  ImportInstanceLaunchSpecification'
+    { additionalInfo =
+        Prelude.Nothing,
+      architecture = Prelude.Nothing,
+      groupIds = Prelude.Nothing,
+      groupNames = Prelude.Nothing,
+      instanceInitiatedShutdownBehavior =
+        Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      userData = Prelude.Nothing
+    }
+
+-- | Reserved.
+importInstanceLaunchSpecification_additionalInfo :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe Prelude.Text)
+importInstanceLaunchSpecification_additionalInfo = Lens.lens (\ImportInstanceLaunchSpecification' {additionalInfo} -> additionalInfo) (\s@ImportInstanceLaunchSpecification' {} a -> s {additionalInfo = a} :: ImportInstanceLaunchSpecification)
+
+-- | The architecture of the instance.
+importInstanceLaunchSpecification_architecture :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe ArchitectureValues)
+importInstanceLaunchSpecification_architecture = Lens.lens (\ImportInstanceLaunchSpecification' {architecture} -> architecture) (\s@ImportInstanceLaunchSpecification' {} a -> s {architecture = a} :: ImportInstanceLaunchSpecification)
+
+-- | The security group IDs.
+importInstanceLaunchSpecification_groupIds :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe [Prelude.Text])
+importInstanceLaunchSpecification_groupIds = Lens.lens (\ImportInstanceLaunchSpecification' {groupIds} -> groupIds) (\s@ImportInstanceLaunchSpecification' {} a -> s {groupIds = a} :: ImportInstanceLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The security group names.
+importInstanceLaunchSpecification_groupNames :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe [Prelude.Text])
+importInstanceLaunchSpecification_groupNames = Lens.lens (\ImportInstanceLaunchSpecification' {groupNames} -> groupNames) (\s@ImportInstanceLaunchSpecification' {} a -> s {groupNames = a} :: ImportInstanceLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+importInstanceLaunchSpecification_instanceInitiatedShutdownBehavior :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe ShutdownBehavior)
+importInstanceLaunchSpecification_instanceInitiatedShutdownBehavior = Lens.lens (\ImportInstanceLaunchSpecification' {instanceInitiatedShutdownBehavior} -> instanceInitiatedShutdownBehavior) (\s@ImportInstanceLaunchSpecification' {} a -> s {instanceInitiatedShutdownBehavior = a} :: ImportInstanceLaunchSpecification)
+
+-- | The instance type. For more information about the instance types that
+-- you can import, see
+-- <https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types Instance Types>
+-- in the VM Import\/Export User Guide.
+importInstanceLaunchSpecification_instanceType :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe InstanceType)
+importInstanceLaunchSpecification_instanceType = Lens.lens (\ImportInstanceLaunchSpecification' {instanceType} -> instanceType) (\s@ImportInstanceLaunchSpecification' {} a -> s {instanceType = a} :: ImportInstanceLaunchSpecification)
+
+-- | Indicates whether monitoring is enabled.
+importInstanceLaunchSpecification_monitoring :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe Prelude.Bool)
+importInstanceLaunchSpecification_monitoring = Lens.lens (\ImportInstanceLaunchSpecification' {monitoring} -> monitoring) (\s@ImportInstanceLaunchSpecification' {} a -> s {monitoring = a} :: ImportInstanceLaunchSpecification)
+
+-- | The placement information for the instance.
+importInstanceLaunchSpecification_placement :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe Placement)
+importInstanceLaunchSpecification_placement = Lens.lens (\ImportInstanceLaunchSpecification' {placement} -> placement) (\s@ImportInstanceLaunchSpecification' {} a -> s {placement = a} :: ImportInstanceLaunchSpecification)
+
+-- | [EC2-VPC] An available IP address from the IP address range of the
+-- subnet.
+importInstanceLaunchSpecification_privateIpAddress :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe Prelude.Text)
+importInstanceLaunchSpecification_privateIpAddress = Lens.lens (\ImportInstanceLaunchSpecification' {privateIpAddress} -> privateIpAddress) (\s@ImportInstanceLaunchSpecification' {} a -> s {privateIpAddress = a} :: ImportInstanceLaunchSpecification)
+
+-- | [EC2-VPC] The ID of the subnet in which to launch the instance.
+importInstanceLaunchSpecification_subnetId :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe Prelude.Text)
+importInstanceLaunchSpecification_subnetId = Lens.lens (\ImportInstanceLaunchSpecification' {subnetId} -> subnetId) (\s@ImportInstanceLaunchSpecification' {} a -> s {subnetId = a} :: ImportInstanceLaunchSpecification)
+
+-- | The Base64-encoded user data to make available to the instance.
+importInstanceLaunchSpecification_userData :: Lens.Lens' ImportInstanceLaunchSpecification (Prelude.Maybe UserData)
+importInstanceLaunchSpecification_userData = Lens.lens (\ImportInstanceLaunchSpecification' {userData} -> userData) (\s@ImportInstanceLaunchSpecification' {} a -> s {userData = a} :: ImportInstanceLaunchSpecification) Prelude.. Lens.mapping Data._Sensitive
+
+instance
+  Prelude.Hashable
+    ImportInstanceLaunchSpecification
+  where
+  hashWithSalt
+    _salt
+    ImportInstanceLaunchSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` additionalInfo
+        `Prelude.hashWithSalt` architecture
+        `Prelude.hashWithSalt` groupIds
+        `Prelude.hashWithSalt` groupNames
+        `Prelude.hashWithSalt` instanceInitiatedShutdownBehavior
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` monitoring
+        `Prelude.hashWithSalt` placement
+        `Prelude.hashWithSalt` privateIpAddress
+        `Prelude.hashWithSalt` subnetId
+        `Prelude.hashWithSalt` userData
+
+instance
+  Prelude.NFData
+    ImportInstanceLaunchSpecification
+  where
+  rnf ImportInstanceLaunchSpecification' {..} =
+    Prelude.rnf additionalInfo
+      `Prelude.seq` Prelude.rnf architecture
+      `Prelude.seq` Prelude.rnf groupIds
+      `Prelude.seq` Prelude.rnf groupNames
+      `Prelude.seq` Prelude.rnf instanceInitiatedShutdownBehavior
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf userData
+
+instance
+  Data.ToQuery
+    ImportInstanceLaunchSpecification
+  where
+  toQuery ImportInstanceLaunchSpecification' {..} =
+    Prelude.mconcat
+      [ "AdditionalInfo" Data.=: additionalInfo,
+        "Architecture" Data.=: architecture,
+        Data.toQuery
+          (Data.toQueryList "GroupId" Prelude.<$> groupIds),
+        Data.toQuery
+          ( Data.toQueryList "GroupName"
+              Prelude.<$> groupNames
+          ),
+        "InstanceInitiatedShutdownBehavior"
+          Data.=: instanceInitiatedShutdownBehavior,
+        "InstanceType" Data.=: instanceType,
+        "Monitoring" Data.=: monitoring,
+        "Placement" Data.=: placement,
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        "SubnetId" Data.=: subnetId,
+        "UserData" Data.=: userData
+      ]
diff --git a/gen/Amazonka/EC2/Types/ImportInstanceTaskDetails.hs b/gen/Amazonka/EC2/Types/ImportInstanceTaskDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportInstanceTaskDetails.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportInstanceTaskDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportInstanceTaskDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ImportInstanceVolumeDetailItem
+import Amazonka.EC2.Types.PlatformValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an import instance task.
+--
+-- /See:/ 'newImportInstanceTaskDetails' smart constructor.
+data ImportInstanceTaskDetails = ImportInstanceTaskDetails'
+  { -- | A description of the task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The instance operating system.
+    platform :: Prelude.Maybe PlatformValues,
+    -- | The volumes.
+    volumes :: Prelude.Maybe [ImportInstanceVolumeDetailItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportInstanceTaskDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'importInstanceTaskDetails_description' - A description of the task.
+--
+-- 'instanceId', 'importInstanceTaskDetails_instanceId' - The ID of the instance.
+--
+-- 'platform', 'importInstanceTaskDetails_platform' - The instance operating system.
+--
+-- 'volumes', 'importInstanceTaskDetails_volumes' - The volumes.
+newImportInstanceTaskDetails ::
+  ImportInstanceTaskDetails
+newImportInstanceTaskDetails =
+  ImportInstanceTaskDetails'
+    { description =
+        Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      volumes = Prelude.Nothing
+    }
+
+-- | A description of the task.
+importInstanceTaskDetails_description :: Lens.Lens' ImportInstanceTaskDetails (Prelude.Maybe Prelude.Text)
+importInstanceTaskDetails_description = Lens.lens (\ImportInstanceTaskDetails' {description} -> description) (\s@ImportInstanceTaskDetails' {} a -> s {description = a} :: ImportInstanceTaskDetails)
+
+-- | The ID of the instance.
+importInstanceTaskDetails_instanceId :: Lens.Lens' ImportInstanceTaskDetails (Prelude.Maybe Prelude.Text)
+importInstanceTaskDetails_instanceId = Lens.lens (\ImportInstanceTaskDetails' {instanceId} -> instanceId) (\s@ImportInstanceTaskDetails' {} a -> s {instanceId = a} :: ImportInstanceTaskDetails)
+
+-- | The instance operating system.
+importInstanceTaskDetails_platform :: Lens.Lens' ImportInstanceTaskDetails (Prelude.Maybe PlatformValues)
+importInstanceTaskDetails_platform = Lens.lens (\ImportInstanceTaskDetails' {platform} -> platform) (\s@ImportInstanceTaskDetails' {} a -> s {platform = a} :: ImportInstanceTaskDetails)
+
+-- | The volumes.
+importInstanceTaskDetails_volumes :: Lens.Lens' ImportInstanceTaskDetails (Prelude.Maybe [ImportInstanceVolumeDetailItem])
+importInstanceTaskDetails_volumes = Lens.lens (\ImportInstanceTaskDetails' {volumes} -> volumes) (\s@ImportInstanceTaskDetails' {} a -> s {volumes = a} :: ImportInstanceTaskDetails) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ImportInstanceTaskDetails where
+  parseXML x =
+    ImportInstanceTaskDetails'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> ( x
+                      Data..@? "volumes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ImportInstanceTaskDetails where
+  hashWithSalt _salt ImportInstanceTaskDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` volumes
+
+instance Prelude.NFData ImportInstanceTaskDetails where
+  rnf ImportInstanceTaskDetails' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf volumes
diff --git a/gen/Amazonka/EC2/Types/ImportInstanceVolumeDetailItem.hs b/gen/Amazonka/EC2/Types/ImportInstanceVolumeDetailItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportInstanceVolumeDetailItem.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportInstanceVolumeDetailItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportInstanceVolumeDetailItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskImageDescription
+import Amazonka.EC2.Types.DiskImageVolumeDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an import volume task.
+--
+-- /See:/ 'newImportInstanceVolumeDetailItem' smart constructor.
+data ImportInstanceVolumeDetailItem = ImportInstanceVolumeDetailItem'
+  { -- | The Availability Zone where the resulting instance will reside.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The number of bytes converted so far.
+    bytesConverted :: Prelude.Maybe Prelude.Integer,
+    -- | A description of the task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The image.
+    image :: Prelude.Maybe DiskImageDescription,
+    -- | The status of the import of this particular disk image.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The status information or errors related to the disk image.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The volume.
+    volume :: Prelude.Maybe DiskImageVolumeDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportInstanceVolumeDetailItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'importInstanceVolumeDetailItem_availabilityZone' - The Availability Zone where the resulting instance will reside.
+--
+-- 'bytesConverted', 'importInstanceVolumeDetailItem_bytesConverted' - The number of bytes converted so far.
+--
+-- 'description', 'importInstanceVolumeDetailItem_description' - A description of the task.
+--
+-- 'image', 'importInstanceVolumeDetailItem_image' - The image.
+--
+-- 'status', 'importInstanceVolumeDetailItem_status' - The status of the import of this particular disk image.
+--
+-- 'statusMessage', 'importInstanceVolumeDetailItem_statusMessage' - The status information or errors related to the disk image.
+--
+-- 'volume', 'importInstanceVolumeDetailItem_volume' - The volume.
+newImportInstanceVolumeDetailItem ::
+  ImportInstanceVolumeDetailItem
+newImportInstanceVolumeDetailItem =
+  ImportInstanceVolumeDetailItem'
+    { availabilityZone =
+        Prelude.Nothing,
+      bytesConverted = Prelude.Nothing,
+      description = Prelude.Nothing,
+      image = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      volume = Prelude.Nothing
+    }
+
+-- | The Availability Zone where the resulting instance will reside.
+importInstanceVolumeDetailItem_availabilityZone :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
+importInstanceVolumeDetailItem_availabilityZone = Lens.lens (\ImportInstanceVolumeDetailItem' {availabilityZone} -> availabilityZone) (\s@ImportInstanceVolumeDetailItem' {} a -> s {availabilityZone = a} :: ImportInstanceVolumeDetailItem)
+
+-- | The number of bytes converted so far.
+importInstanceVolumeDetailItem_bytesConverted :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Integer)
+importInstanceVolumeDetailItem_bytesConverted = Lens.lens (\ImportInstanceVolumeDetailItem' {bytesConverted} -> bytesConverted) (\s@ImportInstanceVolumeDetailItem' {} a -> s {bytesConverted = a} :: ImportInstanceVolumeDetailItem)
+
+-- | A description of the task.
+importInstanceVolumeDetailItem_description :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
+importInstanceVolumeDetailItem_description = Lens.lens (\ImportInstanceVolumeDetailItem' {description} -> description) (\s@ImportInstanceVolumeDetailItem' {} a -> s {description = a} :: ImportInstanceVolumeDetailItem)
+
+-- | The image.
+importInstanceVolumeDetailItem_image :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe DiskImageDescription)
+importInstanceVolumeDetailItem_image = Lens.lens (\ImportInstanceVolumeDetailItem' {image} -> image) (\s@ImportInstanceVolumeDetailItem' {} a -> s {image = a} :: ImportInstanceVolumeDetailItem)
+
+-- | The status of the import of this particular disk image.
+importInstanceVolumeDetailItem_status :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
+importInstanceVolumeDetailItem_status = Lens.lens (\ImportInstanceVolumeDetailItem' {status} -> status) (\s@ImportInstanceVolumeDetailItem' {} a -> s {status = a} :: ImportInstanceVolumeDetailItem)
+
+-- | The status information or errors related to the disk image.
+importInstanceVolumeDetailItem_statusMessage :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe Prelude.Text)
+importInstanceVolumeDetailItem_statusMessage = Lens.lens (\ImportInstanceVolumeDetailItem' {statusMessage} -> statusMessage) (\s@ImportInstanceVolumeDetailItem' {} a -> s {statusMessage = a} :: ImportInstanceVolumeDetailItem)
+
+-- | The volume.
+importInstanceVolumeDetailItem_volume :: Lens.Lens' ImportInstanceVolumeDetailItem (Prelude.Maybe DiskImageVolumeDescription)
+importInstanceVolumeDetailItem_volume = Lens.lens (\ImportInstanceVolumeDetailItem' {volume} -> volume) (\s@ImportInstanceVolumeDetailItem' {} a -> s {volume = a} :: ImportInstanceVolumeDetailItem)
+
+instance Data.FromXML ImportInstanceVolumeDetailItem where
+  parseXML x =
+    ImportInstanceVolumeDetailItem'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "bytesConverted")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "image")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> (x Data..@? "volume")
+
+instance
+  Prelude.Hashable
+    ImportInstanceVolumeDetailItem
+  where
+  hashWithSalt
+    _salt
+    ImportInstanceVolumeDetailItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` bytesConverted
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` image
+        `Prelude.hashWithSalt` status
+        `Prelude.hashWithSalt` statusMessage
+        `Prelude.hashWithSalt` volume
+
+instance
+  Prelude.NFData
+    ImportInstanceVolumeDetailItem
+  where
+  rnf ImportInstanceVolumeDetailItem' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf bytesConverted
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf image
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf volume
diff --git a/gen/Amazonka/EC2/Types/ImportSnapshotTask.hs b/gen/Amazonka/EC2/Types/ImportSnapshotTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportSnapshotTask.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportSnapshotTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportSnapshotTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SnapshotTaskDetail
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an import snapshot task.
+--
+-- /See:/ 'newImportSnapshotTask' smart constructor.
+data ImportSnapshotTask = ImportSnapshotTask'
+  { -- | A description of the import snapshot task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the import snapshot task.
+    importTaskId :: Prelude.Maybe Prelude.Text,
+    -- | Describes an import snapshot task.
+    snapshotTaskDetail :: Prelude.Maybe SnapshotTaskDetail,
+    -- | The tags for the import snapshot task.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportSnapshotTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'importSnapshotTask_description' - A description of the import snapshot task.
+--
+-- 'importTaskId', 'importSnapshotTask_importTaskId' - The ID of the import snapshot task.
+--
+-- 'snapshotTaskDetail', 'importSnapshotTask_snapshotTaskDetail' - Describes an import snapshot task.
+--
+-- 'tags', 'importSnapshotTask_tags' - The tags for the import snapshot task.
+newImportSnapshotTask ::
+  ImportSnapshotTask
+newImportSnapshotTask =
+  ImportSnapshotTask'
+    { description = Prelude.Nothing,
+      importTaskId = Prelude.Nothing,
+      snapshotTaskDetail = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | A description of the import snapshot task.
+importSnapshotTask_description :: Lens.Lens' ImportSnapshotTask (Prelude.Maybe Prelude.Text)
+importSnapshotTask_description = Lens.lens (\ImportSnapshotTask' {description} -> description) (\s@ImportSnapshotTask' {} a -> s {description = a} :: ImportSnapshotTask)
+
+-- | The ID of the import snapshot task.
+importSnapshotTask_importTaskId :: Lens.Lens' ImportSnapshotTask (Prelude.Maybe Prelude.Text)
+importSnapshotTask_importTaskId = Lens.lens (\ImportSnapshotTask' {importTaskId} -> importTaskId) (\s@ImportSnapshotTask' {} a -> s {importTaskId = a} :: ImportSnapshotTask)
+
+-- | Describes an import snapshot task.
+importSnapshotTask_snapshotTaskDetail :: Lens.Lens' ImportSnapshotTask (Prelude.Maybe SnapshotTaskDetail)
+importSnapshotTask_snapshotTaskDetail = Lens.lens (\ImportSnapshotTask' {snapshotTaskDetail} -> snapshotTaskDetail) (\s@ImportSnapshotTask' {} a -> s {snapshotTaskDetail = a} :: ImportSnapshotTask)
+
+-- | The tags for the import snapshot task.
+importSnapshotTask_tags :: Lens.Lens' ImportSnapshotTask (Prelude.Maybe [Tag])
+importSnapshotTask_tags = Lens.lens (\ImportSnapshotTask' {tags} -> tags) (\s@ImportSnapshotTask' {} a -> s {tags = a} :: ImportSnapshotTask) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ImportSnapshotTask where
+  parseXML x =
+    ImportSnapshotTask'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "importTaskId")
+      Prelude.<*> (x Data..@? "snapshotTaskDetail")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ImportSnapshotTask where
+  hashWithSalt _salt ImportSnapshotTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` importTaskId
+      `Prelude.hashWithSalt` snapshotTaskDetail
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ImportSnapshotTask where
+  rnf ImportSnapshotTask' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf importTaskId
+      `Prelude.seq` Prelude.rnf snapshotTaskDetail
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ImportVolumeTaskDetails.hs b/gen/Amazonka/EC2/Types/ImportVolumeTaskDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ImportVolumeTaskDetails.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ImportVolumeTaskDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ImportVolumeTaskDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskImageDescription
+import Amazonka.EC2.Types.DiskImageVolumeDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an import volume task.
+--
+-- /See:/ 'newImportVolumeTaskDetails' smart constructor.
+data ImportVolumeTaskDetails = ImportVolumeTaskDetails'
+  { -- | The Availability Zone where the resulting volume will reside.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The number of bytes converted so far.
+    bytesConverted :: Prelude.Maybe Prelude.Integer,
+    -- | The description you provided when starting the import volume task.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The image.
+    image :: Prelude.Maybe DiskImageDescription,
+    -- | The volume.
+    volume :: Prelude.Maybe DiskImageVolumeDescription
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportVolumeTaskDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'importVolumeTaskDetails_availabilityZone' - The Availability Zone where the resulting volume will reside.
+--
+-- 'bytesConverted', 'importVolumeTaskDetails_bytesConverted' - The number of bytes converted so far.
+--
+-- 'description', 'importVolumeTaskDetails_description' - The description you provided when starting the import volume task.
+--
+-- 'image', 'importVolumeTaskDetails_image' - The image.
+--
+-- 'volume', 'importVolumeTaskDetails_volume' - The volume.
+newImportVolumeTaskDetails ::
+  ImportVolumeTaskDetails
+newImportVolumeTaskDetails =
+  ImportVolumeTaskDetails'
+    { availabilityZone =
+        Prelude.Nothing,
+      bytesConverted = Prelude.Nothing,
+      description = Prelude.Nothing,
+      image = Prelude.Nothing,
+      volume = Prelude.Nothing
+    }
+
+-- | The Availability Zone where the resulting volume will reside.
+importVolumeTaskDetails_availabilityZone :: Lens.Lens' ImportVolumeTaskDetails (Prelude.Maybe Prelude.Text)
+importVolumeTaskDetails_availabilityZone = Lens.lens (\ImportVolumeTaskDetails' {availabilityZone} -> availabilityZone) (\s@ImportVolumeTaskDetails' {} a -> s {availabilityZone = a} :: ImportVolumeTaskDetails)
+
+-- | The number of bytes converted so far.
+importVolumeTaskDetails_bytesConverted :: Lens.Lens' ImportVolumeTaskDetails (Prelude.Maybe Prelude.Integer)
+importVolumeTaskDetails_bytesConverted = Lens.lens (\ImportVolumeTaskDetails' {bytesConverted} -> bytesConverted) (\s@ImportVolumeTaskDetails' {} a -> s {bytesConverted = a} :: ImportVolumeTaskDetails)
+
+-- | The description you provided when starting the import volume task.
+importVolumeTaskDetails_description :: Lens.Lens' ImportVolumeTaskDetails (Prelude.Maybe Prelude.Text)
+importVolumeTaskDetails_description = Lens.lens (\ImportVolumeTaskDetails' {description} -> description) (\s@ImportVolumeTaskDetails' {} a -> s {description = a} :: ImportVolumeTaskDetails)
+
+-- | The image.
+importVolumeTaskDetails_image :: Lens.Lens' ImportVolumeTaskDetails (Prelude.Maybe DiskImageDescription)
+importVolumeTaskDetails_image = Lens.lens (\ImportVolumeTaskDetails' {image} -> image) (\s@ImportVolumeTaskDetails' {} a -> s {image = a} :: ImportVolumeTaskDetails)
+
+-- | The volume.
+importVolumeTaskDetails_volume :: Lens.Lens' ImportVolumeTaskDetails (Prelude.Maybe DiskImageVolumeDescription)
+importVolumeTaskDetails_volume = Lens.lens (\ImportVolumeTaskDetails' {volume} -> volume) (\s@ImportVolumeTaskDetails' {} a -> s {volume = a} :: ImportVolumeTaskDetails)
+
+instance Data.FromXML ImportVolumeTaskDetails where
+  parseXML x =
+    ImportVolumeTaskDetails'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "bytesConverted")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "image")
+      Prelude.<*> (x Data..@? "volume")
+
+instance Prelude.Hashable ImportVolumeTaskDetails where
+  hashWithSalt _salt ImportVolumeTaskDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` bytesConverted
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` image
+      `Prelude.hashWithSalt` volume
+
+instance Prelude.NFData ImportVolumeTaskDetails where
+  rnf ImportVolumeTaskDetails' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf bytesConverted
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf image
+      `Prelude.seq` Prelude.rnf volume
diff --git a/gen/Amazonka/EC2/Types/InferenceAcceleratorInfo.hs b/gen/Amazonka/EC2/Types/InferenceAcceleratorInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InferenceAcceleratorInfo.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InferenceAcceleratorInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InferenceAcceleratorInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InferenceDeviceInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Inference accelerators for the instance type.
+--
+-- /See:/ 'newInferenceAcceleratorInfo' smart constructor.
+data InferenceAcceleratorInfo = InferenceAcceleratorInfo'
+  { -- | Describes the Inference accelerators for the instance type.
+    accelerators :: Prelude.Maybe [InferenceDeviceInfo]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferenceAcceleratorInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accelerators', 'inferenceAcceleratorInfo_accelerators' - Describes the Inference accelerators for the instance type.
+newInferenceAcceleratorInfo ::
+  InferenceAcceleratorInfo
+newInferenceAcceleratorInfo =
+  InferenceAcceleratorInfo'
+    { accelerators =
+        Prelude.Nothing
+    }
+
+-- | Describes the Inference accelerators for the instance type.
+inferenceAcceleratorInfo_accelerators :: Lens.Lens' InferenceAcceleratorInfo (Prelude.Maybe [InferenceDeviceInfo])
+inferenceAcceleratorInfo_accelerators = Lens.lens (\InferenceAcceleratorInfo' {accelerators} -> accelerators) (\s@InferenceAcceleratorInfo' {} a -> s {accelerators = a} :: InferenceAcceleratorInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML InferenceAcceleratorInfo where
+  parseXML x =
+    InferenceAcceleratorInfo'
+      Prelude.<$> ( x
+                      Data..@? "accelerators"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "member")
+                  )
+
+instance Prelude.Hashable InferenceAcceleratorInfo where
+  hashWithSalt _salt InferenceAcceleratorInfo' {..} =
+    _salt `Prelude.hashWithSalt` accelerators
+
+instance Prelude.NFData InferenceAcceleratorInfo where
+  rnf InferenceAcceleratorInfo' {..} =
+    Prelude.rnf accelerators
diff --git a/gen/Amazonka/EC2/Types/InferenceDeviceInfo.hs b/gen/Amazonka/EC2/Types/InferenceDeviceInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InferenceDeviceInfo.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InferenceDeviceInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InferenceDeviceInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Inference accelerators for the instance type.
+--
+-- /See:/ 'newInferenceDeviceInfo' smart constructor.
+data InferenceDeviceInfo = InferenceDeviceInfo'
+  { -- | The number of Inference accelerators for the instance type.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The manufacturer of the Inference accelerator.
+    manufacturer :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Inference accelerator.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InferenceDeviceInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'inferenceDeviceInfo_count' - The number of Inference accelerators for the instance type.
+--
+-- 'manufacturer', 'inferenceDeviceInfo_manufacturer' - The manufacturer of the Inference accelerator.
+--
+-- 'name', 'inferenceDeviceInfo_name' - The name of the Inference accelerator.
+newInferenceDeviceInfo ::
+  InferenceDeviceInfo
+newInferenceDeviceInfo =
+  InferenceDeviceInfo'
+    { count = Prelude.Nothing,
+      manufacturer = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The number of Inference accelerators for the instance type.
+inferenceDeviceInfo_count :: Lens.Lens' InferenceDeviceInfo (Prelude.Maybe Prelude.Int)
+inferenceDeviceInfo_count = Lens.lens (\InferenceDeviceInfo' {count} -> count) (\s@InferenceDeviceInfo' {} a -> s {count = a} :: InferenceDeviceInfo)
+
+-- | The manufacturer of the Inference accelerator.
+inferenceDeviceInfo_manufacturer :: Lens.Lens' InferenceDeviceInfo (Prelude.Maybe Prelude.Text)
+inferenceDeviceInfo_manufacturer = Lens.lens (\InferenceDeviceInfo' {manufacturer} -> manufacturer) (\s@InferenceDeviceInfo' {} a -> s {manufacturer = a} :: InferenceDeviceInfo)
+
+-- | The name of the Inference accelerator.
+inferenceDeviceInfo_name :: Lens.Lens' InferenceDeviceInfo (Prelude.Maybe Prelude.Text)
+inferenceDeviceInfo_name = Lens.lens (\InferenceDeviceInfo' {name} -> name) (\s@InferenceDeviceInfo' {} a -> s {name = a} :: InferenceDeviceInfo)
+
+instance Data.FromXML InferenceDeviceInfo where
+  parseXML x =
+    InferenceDeviceInfo'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "manufacturer")
+      Prelude.<*> (x Data..@? "name")
+
+instance Prelude.Hashable InferenceDeviceInfo where
+  hashWithSalt _salt InferenceDeviceInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` manufacturer
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData InferenceDeviceInfo where
+  rnf InferenceDeviceInfo' {..} =
+    Prelude.rnf count
+      `Prelude.seq` Prelude.rnf manufacturer
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/EC2/Types/Instance.hs b/gen/Amazonka/EC2/Types/Instance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Instance.hs
@@ -0,0 +1,971 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Instance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Instance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ArchitectureValues
+import Amazonka.EC2.Types.BootModeValues
+import Amazonka.EC2.Types.CapacityReservationSpecificationResponse
+import Amazonka.EC2.Types.CpuOptions
+import Amazonka.EC2.Types.DeviceType
+import Amazonka.EC2.Types.ElasticGpuAssociation
+import Amazonka.EC2.Types.ElasticInferenceAcceleratorAssociation
+import Amazonka.EC2.Types.EnclaveOptions
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.HibernationOptions
+import Amazonka.EC2.Types.HypervisorType
+import Amazonka.EC2.Types.IamInstanceProfile
+import Amazonka.EC2.Types.InstanceBlockDeviceMapping
+import Amazonka.EC2.Types.InstanceLifecycleType
+import Amazonka.EC2.Types.InstanceMaintenanceOptions
+import Amazonka.EC2.Types.InstanceMetadataOptionsResponse
+import Amazonka.EC2.Types.InstanceNetworkInterface
+import Amazonka.EC2.Types.InstanceState
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.LicenseConfiguration
+import Amazonka.EC2.Types.Monitoring
+import Amazonka.EC2.Types.Placement
+import Amazonka.EC2.Types.PlatformValues
+import Amazonka.EC2.Types.PrivateDnsNameOptionsResponse
+import Amazonka.EC2.Types.ProductCode
+import Amazonka.EC2.Types.StateReason
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VirtualizationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an instance.
+--
+-- /See:/ 'newInstance' smart constructor.
+data Instance = Instance'
+  { -- | Any block device mapping entries for the instance.
+    blockDeviceMappings :: Prelude.Maybe [InstanceBlockDeviceMapping],
+    -- | The boot mode of the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+    -- in the /Amazon EC2 User Guide/.
+    bootMode :: Prelude.Maybe BootModeValues,
+    -- | The ID of the Capacity Reservation.
+    capacityReservationId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the Capacity Reservation targeting option.
+    capacityReservationSpecification :: Prelude.Maybe CapacityReservationSpecificationResponse,
+    -- | The idempotency token you provided when you launched the instance, if
+    -- applicable.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The CPU options for the instance.
+    cpuOptions :: Prelude.Maybe CpuOptions,
+    -- | Indicates whether the instance is optimized for Amazon EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal I\/O performance. This
+    -- optimization isn\'t available with all instance types. Additional usage
+    -- charges apply when using an EBS Optimized instance.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The Elastic GPU associated with the instance.
+    elasticGpuAssociations :: Prelude.Maybe [ElasticGpuAssociation],
+    -- | The elastic inference accelerator associated with the instance.
+    elasticInferenceAcceleratorAssociations :: Prelude.Maybe [ElasticInferenceAcceleratorAssociation],
+    -- | Specifies whether enhanced networking with ENA is enabled.
+    enaSupport :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+    -- Enclaves.
+    enclaveOptions :: Prelude.Maybe EnclaveOptions,
+    -- | Indicates whether the instance is enabled for hibernation.
+    hibernationOptions :: Prelude.Maybe HibernationOptions,
+    -- | The IAM instance profile associated with the instance, if applicable.
+    iamInstanceProfile :: Prelude.Maybe IamInstanceProfile,
+    -- | Indicates whether this is a Spot Instance or a Scheduled Instance.
+    instanceLifecycle :: Prelude.Maybe InstanceLifecycleType,
+    -- | The IPv6 address assigned to the instance.
+    ipv6Address :: Prelude.Maybe Prelude.Text,
+    -- | The kernel associated with this instance, if applicable.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair, if this instance was launched with an
+    -- associated key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The license configurations for the instance.
+    licenses :: Prelude.Maybe [LicenseConfiguration],
+    -- | Provides information on the recovery and maintenance options of your
+    -- instance.
+    maintenanceOptions :: Prelude.Maybe InstanceMaintenanceOptions,
+    -- | The metadata options for the instance.
+    metadataOptions :: Prelude.Maybe InstanceMetadataOptionsResponse,
+    -- | [EC2-VPC] The network interfaces for the instance.
+    networkInterfaces :: Prelude.Maybe [InstanceNetworkInterface],
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The value is @Windows@ for Windows instances; otherwise blank.
+    platform :: Prelude.Maybe PlatformValues,
+    -- | The platform details value for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html AMI billing information fields>
+    -- in the /Amazon EC2 User Guide/.
+    platformDetails :: Prelude.Maybe Prelude.Text,
+    -- | (IPv4 only) The private DNS hostname name assigned to the instance. This
+    -- DNS hostname can only be used inside the Amazon EC2 network. This name
+    -- is not available until the instance enters the @running@ state.
+    --
+    -- [EC2-VPC] The Amazon-provided DNS server resolves Amazon-provided
+    -- private DNS hostnames if you\'ve enabled DNS resolution and DNS
+    -- hostnames in your VPC. If you are not using the Amazon-provided DNS
+    -- server in your VPC, your custom domain name servers must resolve the
+    -- hostname as appropriate.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The options for the instance hostname.
+    privateDnsNameOptions :: Prelude.Maybe PrivateDnsNameOptionsResponse,
+    -- | The private IPv4 address assigned to the instance.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The product codes attached to this instance, if applicable.
+    productCodes :: Prelude.Maybe [ProductCode],
+    -- | (IPv4 only) The public DNS name assigned to the instance. This name is
+    -- not available until the instance enters the @running@ state. For
+    -- EC2-VPC, this name is only available if you\'ve enabled DNS hostnames
+    -- for your VPC.
+    publicDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The public IPv4 address, or the Carrier IP address assigned to the
+    -- instance, if applicable.
+    --
+    -- A Carrier IP address only applies to an instance launched in a subnet
+    -- associated with a Wavelength Zone.
+    publicIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The RAM disk associated with this instance, if applicable.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | The device name of the root device volume (for example, @\/dev\/sda1@).
+    rootDeviceName :: Prelude.Maybe Prelude.Text,
+    -- | The security groups for the instance.
+    securityGroups :: Prelude.Maybe [GroupIdentifier],
+    -- | Indicates whether source\/destination checking is enabled.
+    sourceDestCheck :: Prelude.Maybe Prelude.Bool,
+    -- | If the request is a Spot Instance request, the ID of the request.
+    spotInstanceRequestId :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether enhanced networking with the Intel 82599 Virtual
+    -- Function interface is enabled.
+    sriovNetSupport :: Prelude.Maybe Prelude.Text,
+    -- | The reason for the most recent state transition.
+    stateReason :: Prelude.Maybe StateReason,
+    -- | The reason for the most recent state transition. This might be an empty
+    -- string.
+    stateTransitionReason :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-VPC] The ID of the subnet in which the instance is running.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the instance.
+    tags :: Prelude.Maybe [Tag],
+    -- | If the instance is configured for NitroTPM support, the value is @v2.0@.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+    -- in the /Amazon EC2 User Guide/.
+    tpmSupport :: Prelude.Maybe Prelude.Text,
+    -- | The usage operation value for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html AMI billing information fields>
+    -- in the /Amazon EC2 User Guide/.
+    usageOperation :: Prelude.Maybe Prelude.Text,
+    -- | The time that the usage operation was last updated.
+    usageOperationUpdateTime :: Prelude.Maybe Data.ISO8601,
+    -- | [EC2-VPC] The ID of the VPC in which the instance is running.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Text,
+    -- | The ID of the AMI used to launch the instance.
+    imageId :: Prelude.Text,
+    -- | The AMI launch index, which can be used to find this instance in the
+    -- launch group.
+    amiLaunchIndex :: Prelude.Int,
+    -- | The instance type.
+    instanceType :: InstanceType,
+    -- | The time the instance was launched.
+    launchTime :: Data.ISO8601,
+    -- | The location where the instance launched, if applicable.
+    placement :: Placement,
+    -- | The monitoring for the instance.
+    monitoring :: Monitoring,
+    -- | The architecture of the image.
+    architecture :: ArchitectureValues,
+    -- | The root device type used by the AMI. The AMI can use an EBS volume or
+    -- an instance store volume.
+    rootDeviceType :: DeviceType,
+    -- | The virtualization type of the instance.
+    virtualizationType :: VirtualizationType,
+    -- | The hypervisor type of the instance. The value @xen@ is used for both
+    -- Xen and Nitro hypervisors.
+    hypervisor :: HypervisorType,
+    -- | The current state of the instance.
+    state :: InstanceState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Instance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'instance_blockDeviceMappings' - Any block device mapping entries for the instance.
+--
+-- 'bootMode', 'instance_bootMode' - The boot mode of the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'capacityReservationId', 'instance_capacityReservationId' - The ID of the Capacity Reservation.
+--
+-- 'capacityReservationSpecification', 'instance_capacityReservationSpecification' - Information about the Capacity Reservation targeting option.
+--
+-- 'clientToken', 'instance_clientToken' - The idempotency token you provided when you launched the instance, if
+-- applicable.
+--
+-- 'cpuOptions', 'instance_cpuOptions' - The CPU options for the instance.
+--
+-- 'ebsOptimized', 'instance_ebsOptimized' - Indicates whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal I\/O performance. This
+-- optimization isn\'t available with all instance types. Additional usage
+-- charges apply when using an EBS Optimized instance.
+--
+-- 'elasticGpuAssociations', 'instance_elasticGpuAssociations' - The Elastic GPU associated with the instance.
+--
+-- 'elasticInferenceAcceleratorAssociations', 'instance_elasticInferenceAcceleratorAssociations' - The elastic inference accelerator associated with the instance.
+--
+-- 'enaSupport', 'instance_enaSupport' - Specifies whether enhanced networking with ENA is enabled.
+--
+-- 'enclaveOptions', 'instance_enclaveOptions' - Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves.
+--
+-- 'hibernationOptions', 'instance_hibernationOptions' - Indicates whether the instance is enabled for hibernation.
+--
+-- 'iamInstanceProfile', 'instance_iamInstanceProfile' - The IAM instance profile associated with the instance, if applicable.
+--
+-- 'instanceLifecycle', 'instance_instanceLifecycle' - Indicates whether this is a Spot Instance or a Scheduled Instance.
+--
+-- 'ipv6Address', 'instance_ipv6Address' - The IPv6 address assigned to the instance.
+--
+-- 'kernelId', 'instance_kernelId' - The kernel associated with this instance, if applicable.
+--
+-- 'keyName', 'instance_keyName' - The name of the key pair, if this instance was launched with an
+-- associated key pair.
+--
+-- 'licenses', 'instance_licenses' - The license configurations for the instance.
+--
+-- 'maintenanceOptions', 'instance_maintenanceOptions' - Provides information on the recovery and maintenance options of your
+-- instance.
+--
+-- 'metadataOptions', 'instance_metadataOptions' - The metadata options for the instance.
+--
+-- 'networkInterfaces', 'instance_networkInterfaces' - [EC2-VPC] The network interfaces for the instance.
+--
+-- 'outpostArn', 'instance_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'platform', 'instance_platform' - The value is @Windows@ for Windows instances; otherwise blank.
+--
+-- 'platformDetails', 'instance_platformDetails' - The platform details value for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html AMI billing information fields>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'privateDnsName', 'instance_privateDnsName' - (IPv4 only) The private DNS hostname name assigned to the instance. This
+-- DNS hostname can only be used inside the Amazon EC2 network. This name
+-- is not available until the instance enters the @running@ state.
+--
+-- [EC2-VPC] The Amazon-provided DNS server resolves Amazon-provided
+-- private DNS hostnames if you\'ve enabled DNS resolution and DNS
+-- hostnames in your VPC. If you are not using the Amazon-provided DNS
+-- server in your VPC, your custom domain name servers must resolve the
+-- hostname as appropriate.
+--
+-- 'privateDnsNameOptions', 'instance_privateDnsNameOptions' - The options for the instance hostname.
+--
+-- 'privateIpAddress', 'instance_privateIpAddress' - The private IPv4 address assigned to the instance.
+--
+-- 'productCodes', 'instance_productCodes' - The product codes attached to this instance, if applicable.
+--
+-- 'publicDnsName', 'instance_publicDnsName' - (IPv4 only) The public DNS name assigned to the instance. This name is
+-- not available until the instance enters the @running@ state. For
+-- EC2-VPC, this name is only available if you\'ve enabled DNS hostnames
+-- for your VPC.
+--
+-- 'publicIpAddress', 'instance_publicIpAddress' - The public IPv4 address, or the Carrier IP address assigned to the
+-- instance, if applicable.
+--
+-- A Carrier IP address only applies to an instance launched in a subnet
+-- associated with a Wavelength Zone.
+--
+-- 'ramdiskId', 'instance_ramdiskId' - The RAM disk associated with this instance, if applicable.
+--
+-- 'rootDeviceName', 'instance_rootDeviceName' - The device name of the root device volume (for example, @\/dev\/sda1@).
+--
+-- 'securityGroups', 'instance_securityGroups' - The security groups for the instance.
+--
+-- 'sourceDestCheck', 'instance_sourceDestCheck' - Indicates whether source\/destination checking is enabled.
+--
+-- 'spotInstanceRequestId', 'instance_spotInstanceRequestId' - If the request is a Spot Instance request, the ID of the request.
+--
+-- 'sriovNetSupport', 'instance_sriovNetSupport' - Specifies whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+--
+-- 'stateReason', 'instance_stateReason' - The reason for the most recent state transition.
+--
+-- 'stateTransitionReason', 'instance_stateTransitionReason' - The reason for the most recent state transition. This might be an empty
+-- string.
+--
+-- 'subnetId', 'instance_subnetId' - [EC2-VPC] The ID of the subnet in which the instance is running.
+--
+-- 'tags', 'instance_tags' - Any tags assigned to the instance.
+--
+-- 'tpmSupport', 'instance_tpmSupport' - If the instance is configured for NitroTPM support, the value is @v2.0@.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'usageOperation', 'instance_usageOperation' - The usage operation value for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html AMI billing information fields>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'usageOperationUpdateTime', 'instance_usageOperationUpdateTime' - The time that the usage operation was last updated.
+--
+-- 'vpcId', 'instance_vpcId' - [EC2-VPC] The ID of the VPC in which the instance is running.
+--
+-- 'instanceId', 'instance_instanceId' - The ID of the instance.
+--
+-- 'imageId', 'instance_imageId' - The ID of the AMI used to launch the instance.
+--
+-- 'amiLaunchIndex', 'instance_amiLaunchIndex' - The AMI launch index, which can be used to find this instance in the
+-- launch group.
+--
+-- 'instanceType', 'instance_instanceType' - The instance type.
+--
+-- 'launchTime', 'instance_launchTime' - The time the instance was launched.
+--
+-- 'placement', 'instance_placement' - The location where the instance launched, if applicable.
+--
+-- 'monitoring', 'instance_monitoring' - The monitoring for the instance.
+--
+-- 'architecture', 'instance_architecture' - The architecture of the image.
+--
+-- 'rootDeviceType', 'instance_rootDeviceType' - The root device type used by the AMI. The AMI can use an EBS volume or
+-- an instance store volume.
+--
+-- 'virtualizationType', 'instance_virtualizationType' - The virtualization type of the instance.
+--
+-- 'hypervisor', 'instance_hypervisor' - The hypervisor type of the instance. The value @xen@ is used for both
+-- Xen and Nitro hypervisors.
+--
+-- 'state', 'instance_state' - The current state of the instance.
+newInstance ::
+  -- | 'instanceId'
+  Prelude.Text ->
+  -- | 'imageId'
+  Prelude.Text ->
+  -- | 'amiLaunchIndex'
+  Prelude.Int ->
+  -- | 'instanceType'
+  InstanceType ->
+  -- | 'launchTime'
+  Prelude.UTCTime ->
+  -- | 'placement'
+  Placement ->
+  -- | 'monitoring'
+  Monitoring ->
+  -- | 'architecture'
+  ArchitectureValues ->
+  -- | 'rootDeviceType'
+  DeviceType ->
+  -- | 'virtualizationType'
+  VirtualizationType ->
+  -- | 'hypervisor'
+  HypervisorType ->
+  -- | 'state'
+  InstanceState ->
+  Instance
+newInstance
+  pInstanceId_
+  pImageId_
+  pAmiLaunchIndex_
+  pInstanceType_
+  pLaunchTime_
+  pPlacement_
+  pMonitoring_
+  pArchitecture_
+  pRootDeviceType_
+  pVirtualizationType_
+  pHypervisor_
+  pState_ =
+    Instance'
+      { blockDeviceMappings = Prelude.Nothing,
+        bootMode = Prelude.Nothing,
+        capacityReservationId = Prelude.Nothing,
+        capacityReservationSpecification = Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        cpuOptions = Prelude.Nothing,
+        ebsOptimized = Prelude.Nothing,
+        elasticGpuAssociations = Prelude.Nothing,
+        elasticInferenceAcceleratorAssociations =
+          Prelude.Nothing,
+        enaSupport = Prelude.Nothing,
+        enclaveOptions = Prelude.Nothing,
+        hibernationOptions = Prelude.Nothing,
+        iamInstanceProfile = Prelude.Nothing,
+        instanceLifecycle = Prelude.Nothing,
+        ipv6Address = Prelude.Nothing,
+        kernelId = Prelude.Nothing,
+        keyName = Prelude.Nothing,
+        licenses = Prelude.Nothing,
+        maintenanceOptions = Prelude.Nothing,
+        metadataOptions = Prelude.Nothing,
+        networkInterfaces = Prelude.Nothing,
+        outpostArn = Prelude.Nothing,
+        platform = Prelude.Nothing,
+        platformDetails = Prelude.Nothing,
+        privateDnsName = Prelude.Nothing,
+        privateDnsNameOptions = Prelude.Nothing,
+        privateIpAddress = Prelude.Nothing,
+        productCodes = Prelude.Nothing,
+        publicDnsName = Prelude.Nothing,
+        publicIpAddress = Prelude.Nothing,
+        ramdiskId = Prelude.Nothing,
+        rootDeviceName = Prelude.Nothing,
+        securityGroups = Prelude.Nothing,
+        sourceDestCheck = Prelude.Nothing,
+        spotInstanceRequestId = Prelude.Nothing,
+        sriovNetSupport = Prelude.Nothing,
+        stateReason = Prelude.Nothing,
+        stateTransitionReason = Prelude.Nothing,
+        subnetId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        tpmSupport = Prelude.Nothing,
+        usageOperation = Prelude.Nothing,
+        usageOperationUpdateTime = Prelude.Nothing,
+        vpcId = Prelude.Nothing,
+        instanceId = pInstanceId_,
+        imageId = pImageId_,
+        amiLaunchIndex = pAmiLaunchIndex_,
+        instanceType = pInstanceType_,
+        launchTime = Data._Time Lens.# pLaunchTime_,
+        placement = pPlacement_,
+        monitoring = pMonitoring_,
+        architecture = pArchitecture_,
+        rootDeviceType = pRootDeviceType_,
+        virtualizationType = pVirtualizationType_,
+        hypervisor = pHypervisor_,
+        state = pState_
+      }
+
+-- | Any block device mapping entries for the instance.
+instance_blockDeviceMappings :: Lens.Lens' Instance (Prelude.Maybe [InstanceBlockDeviceMapping])
+instance_blockDeviceMappings = Lens.lens (\Instance' {blockDeviceMappings} -> blockDeviceMappings) (\s@Instance' {} a -> s {blockDeviceMappings = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The boot mode of the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+instance_bootMode :: Lens.Lens' Instance (Prelude.Maybe BootModeValues)
+instance_bootMode = Lens.lens (\Instance' {bootMode} -> bootMode) (\s@Instance' {} a -> s {bootMode = a} :: Instance)
+
+-- | The ID of the Capacity Reservation.
+instance_capacityReservationId :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_capacityReservationId = Lens.lens (\Instance' {capacityReservationId} -> capacityReservationId) (\s@Instance' {} a -> s {capacityReservationId = a} :: Instance)
+
+-- | Information about the Capacity Reservation targeting option.
+instance_capacityReservationSpecification :: Lens.Lens' Instance (Prelude.Maybe CapacityReservationSpecificationResponse)
+instance_capacityReservationSpecification = Lens.lens (\Instance' {capacityReservationSpecification} -> capacityReservationSpecification) (\s@Instance' {} a -> s {capacityReservationSpecification = a} :: Instance)
+
+-- | The idempotency token you provided when you launched the instance, if
+-- applicable.
+instance_clientToken :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_clientToken = Lens.lens (\Instance' {clientToken} -> clientToken) (\s@Instance' {} a -> s {clientToken = a} :: Instance)
+
+-- | The CPU options for the instance.
+instance_cpuOptions :: Lens.Lens' Instance (Prelude.Maybe CpuOptions)
+instance_cpuOptions = Lens.lens (\Instance' {cpuOptions} -> cpuOptions) (\s@Instance' {} a -> s {cpuOptions = a} :: Instance)
+
+-- | Indicates whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal I\/O performance. This
+-- optimization isn\'t available with all instance types. Additional usage
+-- charges apply when using an EBS Optimized instance.
+instance_ebsOptimized :: Lens.Lens' Instance (Prelude.Maybe Prelude.Bool)
+instance_ebsOptimized = Lens.lens (\Instance' {ebsOptimized} -> ebsOptimized) (\s@Instance' {} a -> s {ebsOptimized = a} :: Instance)
+
+-- | The Elastic GPU associated with the instance.
+instance_elasticGpuAssociations :: Lens.Lens' Instance (Prelude.Maybe [ElasticGpuAssociation])
+instance_elasticGpuAssociations = Lens.lens (\Instance' {elasticGpuAssociations} -> elasticGpuAssociations) (\s@Instance' {} a -> s {elasticGpuAssociations = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The elastic inference accelerator associated with the instance.
+instance_elasticInferenceAcceleratorAssociations :: Lens.Lens' Instance (Prelude.Maybe [ElasticInferenceAcceleratorAssociation])
+instance_elasticInferenceAcceleratorAssociations = Lens.lens (\Instance' {elasticInferenceAcceleratorAssociations} -> elasticInferenceAcceleratorAssociations) (\s@Instance' {} a -> s {elasticInferenceAcceleratorAssociations = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether enhanced networking with ENA is enabled.
+instance_enaSupport :: Lens.Lens' Instance (Prelude.Maybe Prelude.Bool)
+instance_enaSupport = Lens.lens (\Instance' {enaSupport} -> enaSupport) (\s@Instance' {} a -> s {enaSupport = a} :: Instance)
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves.
+instance_enclaveOptions :: Lens.Lens' Instance (Prelude.Maybe EnclaveOptions)
+instance_enclaveOptions = Lens.lens (\Instance' {enclaveOptions} -> enclaveOptions) (\s@Instance' {} a -> s {enclaveOptions = a} :: Instance)
+
+-- | Indicates whether the instance is enabled for hibernation.
+instance_hibernationOptions :: Lens.Lens' Instance (Prelude.Maybe HibernationOptions)
+instance_hibernationOptions = Lens.lens (\Instance' {hibernationOptions} -> hibernationOptions) (\s@Instance' {} a -> s {hibernationOptions = a} :: Instance)
+
+-- | The IAM instance profile associated with the instance, if applicable.
+instance_iamInstanceProfile :: Lens.Lens' Instance (Prelude.Maybe IamInstanceProfile)
+instance_iamInstanceProfile = Lens.lens (\Instance' {iamInstanceProfile} -> iamInstanceProfile) (\s@Instance' {} a -> s {iamInstanceProfile = a} :: Instance)
+
+-- | Indicates whether this is a Spot Instance or a Scheduled Instance.
+instance_instanceLifecycle :: Lens.Lens' Instance (Prelude.Maybe InstanceLifecycleType)
+instance_instanceLifecycle = Lens.lens (\Instance' {instanceLifecycle} -> instanceLifecycle) (\s@Instance' {} a -> s {instanceLifecycle = a} :: Instance)
+
+-- | The IPv6 address assigned to the instance.
+instance_ipv6Address :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_ipv6Address = Lens.lens (\Instance' {ipv6Address} -> ipv6Address) (\s@Instance' {} a -> s {ipv6Address = a} :: Instance)
+
+-- | The kernel associated with this instance, if applicable.
+instance_kernelId :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_kernelId = Lens.lens (\Instance' {kernelId} -> kernelId) (\s@Instance' {} a -> s {kernelId = a} :: Instance)
+
+-- | The name of the key pair, if this instance was launched with an
+-- associated key pair.
+instance_keyName :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_keyName = Lens.lens (\Instance' {keyName} -> keyName) (\s@Instance' {} a -> s {keyName = a} :: Instance)
+
+-- | The license configurations for the instance.
+instance_licenses :: Lens.Lens' Instance (Prelude.Maybe [LicenseConfiguration])
+instance_licenses = Lens.lens (\Instance' {licenses} -> licenses) (\s@Instance' {} a -> s {licenses = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | Provides information on the recovery and maintenance options of your
+-- instance.
+instance_maintenanceOptions :: Lens.Lens' Instance (Prelude.Maybe InstanceMaintenanceOptions)
+instance_maintenanceOptions = Lens.lens (\Instance' {maintenanceOptions} -> maintenanceOptions) (\s@Instance' {} a -> s {maintenanceOptions = a} :: Instance)
+
+-- | The metadata options for the instance.
+instance_metadataOptions :: Lens.Lens' Instance (Prelude.Maybe InstanceMetadataOptionsResponse)
+instance_metadataOptions = Lens.lens (\Instance' {metadataOptions} -> metadataOptions) (\s@Instance' {} a -> s {metadataOptions = a} :: Instance)
+
+-- | [EC2-VPC] The network interfaces for the instance.
+instance_networkInterfaces :: Lens.Lens' Instance (Prelude.Maybe [InstanceNetworkInterface])
+instance_networkInterfaces = Lens.lens (\Instance' {networkInterfaces} -> networkInterfaces) (\s@Instance' {} a -> s {networkInterfaces = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+instance_outpostArn :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_outpostArn = Lens.lens (\Instance' {outpostArn} -> outpostArn) (\s@Instance' {} a -> s {outpostArn = a} :: Instance)
+
+-- | The value is @Windows@ for Windows instances; otherwise blank.
+instance_platform :: Lens.Lens' Instance (Prelude.Maybe PlatformValues)
+instance_platform = Lens.lens (\Instance' {platform} -> platform) (\s@Instance' {} a -> s {platform = a} :: Instance)
+
+-- | The platform details value for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html AMI billing information fields>
+-- in the /Amazon EC2 User Guide/.
+instance_platformDetails :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_platformDetails = Lens.lens (\Instance' {platformDetails} -> platformDetails) (\s@Instance' {} a -> s {platformDetails = a} :: Instance)
+
+-- | (IPv4 only) The private DNS hostname name assigned to the instance. This
+-- DNS hostname can only be used inside the Amazon EC2 network. This name
+-- is not available until the instance enters the @running@ state.
+--
+-- [EC2-VPC] The Amazon-provided DNS server resolves Amazon-provided
+-- private DNS hostnames if you\'ve enabled DNS resolution and DNS
+-- hostnames in your VPC. If you are not using the Amazon-provided DNS
+-- server in your VPC, your custom domain name servers must resolve the
+-- hostname as appropriate.
+instance_privateDnsName :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_privateDnsName = Lens.lens (\Instance' {privateDnsName} -> privateDnsName) (\s@Instance' {} a -> s {privateDnsName = a} :: Instance)
+
+-- | The options for the instance hostname.
+instance_privateDnsNameOptions :: Lens.Lens' Instance (Prelude.Maybe PrivateDnsNameOptionsResponse)
+instance_privateDnsNameOptions = Lens.lens (\Instance' {privateDnsNameOptions} -> privateDnsNameOptions) (\s@Instance' {} a -> s {privateDnsNameOptions = a} :: Instance)
+
+-- | The private IPv4 address assigned to the instance.
+instance_privateIpAddress :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_privateIpAddress = Lens.lens (\Instance' {privateIpAddress} -> privateIpAddress) (\s@Instance' {} a -> s {privateIpAddress = a} :: Instance)
+
+-- | The product codes attached to this instance, if applicable.
+instance_productCodes :: Lens.Lens' Instance (Prelude.Maybe [ProductCode])
+instance_productCodes = Lens.lens (\Instance' {productCodes} -> productCodes) (\s@Instance' {} a -> s {productCodes = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | (IPv4 only) The public DNS name assigned to the instance. This name is
+-- not available until the instance enters the @running@ state. For
+-- EC2-VPC, this name is only available if you\'ve enabled DNS hostnames
+-- for your VPC.
+instance_publicDnsName :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_publicDnsName = Lens.lens (\Instance' {publicDnsName} -> publicDnsName) (\s@Instance' {} a -> s {publicDnsName = a} :: Instance)
+
+-- | The public IPv4 address, or the Carrier IP address assigned to the
+-- instance, if applicable.
+--
+-- A Carrier IP address only applies to an instance launched in a subnet
+-- associated with a Wavelength Zone.
+instance_publicIpAddress :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_publicIpAddress = Lens.lens (\Instance' {publicIpAddress} -> publicIpAddress) (\s@Instance' {} a -> s {publicIpAddress = a} :: Instance)
+
+-- | The RAM disk associated with this instance, if applicable.
+instance_ramdiskId :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_ramdiskId = Lens.lens (\Instance' {ramdiskId} -> ramdiskId) (\s@Instance' {} a -> s {ramdiskId = a} :: Instance)
+
+-- | The device name of the root device volume (for example, @\/dev\/sda1@).
+instance_rootDeviceName :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_rootDeviceName = Lens.lens (\Instance' {rootDeviceName} -> rootDeviceName) (\s@Instance' {} a -> s {rootDeviceName = a} :: Instance)
+
+-- | The security groups for the instance.
+instance_securityGroups :: Lens.Lens' Instance (Prelude.Maybe [GroupIdentifier])
+instance_securityGroups = Lens.lens (\Instance' {securityGroups} -> securityGroups) (\s@Instance' {} a -> s {securityGroups = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether source\/destination checking is enabled.
+instance_sourceDestCheck :: Lens.Lens' Instance (Prelude.Maybe Prelude.Bool)
+instance_sourceDestCheck = Lens.lens (\Instance' {sourceDestCheck} -> sourceDestCheck) (\s@Instance' {} a -> s {sourceDestCheck = a} :: Instance)
+
+-- | If the request is a Spot Instance request, the ID of the request.
+instance_spotInstanceRequestId :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_spotInstanceRequestId = Lens.lens (\Instance' {spotInstanceRequestId} -> spotInstanceRequestId) (\s@Instance' {} a -> s {spotInstanceRequestId = a} :: Instance)
+
+-- | Specifies whether enhanced networking with the Intel 82599 Virtual
+-- Function interface is enabled.
+instance_sriovNetSupport :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_sriovNetSupport = Lens.lens (\Instance' {sriovNetSupport} -> sriovNetSupport) (\s@Instance' {} a -> s {sriovNetSupport = a} :: Instance)
+
+-- | The reason for the most recent state transition.
+instance_stateReason :: Lens.Lens' Instance (Prelude.Maybe StateReason)
+instance_stateReason = Lens.lens (\Instance' {stateReason} -> stateReason) (\s@Instance' {} a -> s {stateReason = a} :: Instance)
+
+-- | The reason for the most recent state transition. This might be an empty
+-- string.
+instance_stateTransitionReason :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_stateTransitionReason = Lens.lens (\Instance' {stateTransitionReason} -> stateTransitionReason) (\s@Instance' {} a -> s {stateTransitionReason = a} :: Instance)
+
+-- | [EC2-VPC] The ID of the subnet in which the instance is running.
+instance_subnetId :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_subnetId = Lens.lens (\Instance' {subnetId} -> subnetId) (\s@Instance' {} a -> s {subnetId = a} :: Instance)
+
+-- | Any tags assigned to the instance.
+instance_tags :: Lens.Lens' Instance (Prelude.Maybe [Tag])
+instance_tags = Lens.lens (\Instance' {tags} -> tags) (\s@Instance' {} a -> s {tags = a} :: Instance) Prelude.. Lens.mapping Lens.coerced
+
+-- | If the instance is configured for NitroTPM support, the value is @v2.0@.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html NitroTPM>
+-- in the /Amazon EC2 User Guide/.
+instance_tpmSupport :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_tpmSupport = Lens.lens (\Instance' {tpmSupport} -> tpmSupport) (\s@Instance' {} a -> s {tpmSupport = a} :: Instance)
+
+-- | The usage operation value for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html AMI billing information fields>
+-- in the /Amazon EC2 User Guide/.
+instance_usageOperation :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_usageOperation = Lens.lens (\Instance' {usageOperation} -> usageOperation) (\s@Instance' {} a -> s {usageOperation = a} :: Instance)
+
+-- | The time that the usage operation was last updated.
+instance_usageOperationUpdateTime :: Lens.Lens' Instance (Prelude.Maybe Prelude.UTCTime)
+instance_usageOperationUpdateTime = Lens.lens (\Instance' {usageOperationUpdateTime} -> usageOperationUpdateTime) (\s@Instance' {} a -> s {usageOperationUpdateTime = a} :: Instance) Prelude.. Lens.mapping Data._Time
+
+-- | [EC2-VPC] The ID of the VPC in which the instance is running.
+instance_vpcId :: Lens.Lens' Instance (Prelude.Maybe Prelude.Text)
+instance_vpcId = Lens.lens (\Instance' {vpcId} -> vpcId) (\s@Instance' {} a -> s {vpcId = a} :: Instance)
+
+-- | The ID of the instance.
+instance_instanceId :: Lens.Lens' Instance Prelude.Text
+instance_instanceId = Lens.lens (\Instance' {instanceId} -> instanceId) (\s@Instance' {} a -> s {instanceId = a} :: Instance)
+
+-- | The ID of the AMI used to launch the instance.
+instance_imageId :: Lens.Lens' Instance Prelude.Text
+instance_imageId = Lens.lens (\Instance' {imageId} -> imageId) (\s@Instance' {} a -> s {imageId = a} :: Instance)
+
+-- | The AMI launch index, which can be used to find this instance in the
+-- launch group.
+instance_amiLaunchIndex :: Lens.Lens' Instance Prelude.Int
+instance_amiLaunchIndex = Lens.lens (\Instance' {amiLaunchIndex} -> amiLaunchIndex) (\s@Instance' {} a -> s {amiLaunchIndex = a} :: Instance)
+
+-- | The instance type.
+instance_instanceType :: Lens.Lens' Instance InstanceType
+instance_instanceType = Lens.lens (\Instance' {instanceType} -> instanceType) (\s@Instance' {} a -> s {instanceType = a} :: Instance)
+
+-- | The time the instance was launched.
+instance_launchTime :: Lens.Lens' Instance Prelude.UTCTime
+instance_launchTime = Lens.lens (\Instance' {launchTime} -> launchTime) (\s@Instance' {} a -> s {launchTime = a} :: Instance) Prelude.. Data._Time
+
+-- | The location where the instance launched, if applicable.
+instance_placement :: Lens.Lens' Instance Placement
+instance_placement = Lens.lens (\Instance' {placement} -> placement) (\s@Instance' {} a -> s {placement = a} :: Instance)
+
+-- | The monitoring for the instance.
+instance_monitoring :: Lens.Lens' Instance Monitoring
+instance_monitoring = Lens.lens (\Instance' {monitoring} -> monitoring) (\s@Instance' {} a -> s {monitoring = a} :: Instance)
+
+-- | The architecture of the image.
+instance_architecture :: Lens.Lens' Instance ArchitectureValues
+instance_architecture = Lens.lens (\Instance' {architecture} -> architecture) (\s@Instance' {} a -> s {architecture = a} :: Instance)
+
+-- | The root device type used by the AMI. The AMI can use an EBS volume or
+-- an instance store volume.
+instance_rootDeviceType :: Lens.Lens' Instance DeviceType
+instance_rootDeviceType = Lens.lens (\Instance' {rootDeviceType} -> rootDeviceType) (\s@Instance' {} a -> s {rootDeviceType = a} :: Instance)
+
+-- | The virtualization type of the instance.
+instance_virtualizationType :: Lens.Lens' Instance VirtualizationType
+instance_virtualizationType = Lens.lens (\Instance' {virtualizationType} -> virtualizationType) (\s@Instance' {} a -> s {virtualizationType = a} :: Instance)
+
+-- | The hypervisor type of the instance. The value @xen@ is used for both
+-- Xen and Nitro hypervisors.
+instance_hypervisor :: Lens.Lens' Instance HypervisorType
+instance_hypervisor = Lens.lens (\Instance' {hypervisor} -> hypervisor) (\s@Instance' {} a -> s {hypervisor = a} :: Instance)
+
+-- | The current state of the instance.
+instance_state :: Lens.Lens' Instance InstanceState
+instance_state = Lens.lens (\Instance' {state} -> state) (\s@Instance' {} a -> s {state = a} :: Instance)
+
+instance Data.FromXML Instance where
+  parseXML x =
+    Instance'
+      Prelude.<$> ( x
+                      Data..@? "blockDeviceMapping"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "bootMode")
+      Prelude.<*> (x Data..@? "capacityReservationId")
+      Prelude.<*> (x Data..@? "capacityReservationSpecification")
+      Prelude.<*> (x Data..@? "clientToken")
+      Prelude.<*> (x Data..@? "cpuOptions")
+      Prelude.<*> (x Data..@? "ebsOptimized")
+      Prelude.<*> ( x
+                      Data..@? "elasticGpuAssociationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "elasticInferenceAcceleratorAssociationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "enaSupport")
+      Prelude.<*> (x Data..@? "enclaveOptions")
+      Prelude.<*> (x Data..@? "hibernationOptions")
+      Prelude.<*> (x Data..@? "iamInstanceProfile")
+      Prelude.<*> (x Data..@? "instanceLifecycle")
+      Prelude.<*> (x Data..@? "ipv6Address")
+      Prelude.<*> (x Data..@? "kernelId")
+      Prelude.<*> (x Data..@? "keyName")
+      Prelude.<*> ( x
+                      Data..@? "licenseSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "maintenanceOptions")
+      Prelude.<*> (x Data..@? "metadataOptions")
+      Prelude.<*> ( x
+                      Data..@? "networkInterfaceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "platformDetails")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateDnsNameOptions")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "productCodes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "dnsName")
+      Prelude.<*> (x Data..@? "ipAddress")
+      Prelude.<*> (x Data..@? "ramdiskId")
+      Prelude.<*> (x Data..@? "rootDeviceName")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "sourceDestCheck")
+      Prelude.<*> (x Data..@? "spotInstanceRequestId")
+      Prelude.<*> (x Data..@? "sriovNetSupport")
+      Prelude.<*> (x Data..@? "stateReason")
+      Prelude.<*> (x Data..@? "reason")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "tpmSupport")
+      Prelude.<*> (x Data..@? "usageOperation")
+      Prelude.<*> (x Data..@? "usageOperationUpdateTime")
+      Prelude.<*> (x Data..@? "vpcId")
+      Prelude.<*> (x Data..@ "instanceId")
+      Prelude.<*> (x Data..@ "imageId")
+      Prelude.<*> (x Data..@ "amiLaunchIndex")
+      Prelude.<*> (x Data..@ "instanceType")
+      Prelude.<*> (x Data..@ "launchTime")
+      Prelude.<*> (x Data..@ "placement")
+      Prelude.<*> (x Data..@ "monitoring")
+      Prelude.<*> (x Data..@ "architecture")
+      Prelude.<*> (x Data..@ "rootDeviceType")
+      Prelude.<*> (x Data..@ "virtualizationType")
+      Prelude.<*> (x Data..@ "hypervisor")
+      Prelude.<*> (x Data..@ "instanceState")
+
+instance Prelude.Hashable Instance where
+  hashWithSalt _salt Instance' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` bootMode
+      `Prelude.hashWithSalt` capacityReservationId
+      `Prelude.hashWithSalt` capacityReservationSpecification
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` cpuOptions
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` elasticGpuAssociations
+      `Prelude.hashWithSalt` elasticInferenceAcceleratorAssociations
+      `Prelude.hashWithSalt` enaSupport
+      `Prelude.hashWithSalt` enclaveOptions
+      `Prelude.hashWithSalt` hibernationOptions
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` instanceLifecycle
+      `Prelude.hashWithSalt` ipv6Address
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` licenses
+      `Prelude.hashWithSalt` maintenanceOptions
+      `Prelude.hashWithSalt` metadataOptions
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` platformDetails
+      `Prelude.hashWithSalt` privateDnsName
+      `Prelude.hashWithSalt` privateDnsNameOptions
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` productCodes
+      `Prelude.hashWithSalt` publicDnsName
+      `Prelude.hashWithSalt` publicIpAddress
+      `Prelude.hashWithSalt` ramdiskId
+      `Prelude.hashWithSalt` rootDeviceName
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` sourceDestCheck
+      `Prelude.hashWithSalt` spotInstanceRequestId
+      `Prelude.hashWithSalt` sriovNetSupport
+      `Prelude.hashWithSalt` stateReason
+      `Prelude.hashWithSalt` stateTransitionReason
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` tpmSupport
+      `Prelude.hashWithSalt` usageOperation
+      `Prelude.hashWithSalt` usageOperationUpdateTime
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` amiLaunchIndex
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` launchTime
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` monitoring
+      `Prelude.hashWithSalt` architecture
+      `Prelude.hashWithSalt` rootDeviceType
+      `Prelude.hashWithSalt` virtualizationType
+      `Prelude.hashWithSalt` hypervisor
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Instance where
+  rnf Instance' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf bootMode
+      `Prelude.seq` Prelude.rnf capacityReservationId
+      `Prelude.seq` Prelude.rnf capacityReservationSpecification
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf cpuOptions
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf elasticGpuAssociations
+      `Prelude.seq` Prelude.rnf elasticInferenceAcceleratorAssociations
+      `Prelude.seq` Prelude.rnf enaSupport
+      `Prelude.seq` Prelude.rnf enclaveOptions
+      `Prelude.seq` Prelude.rnf hibernationOptions
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf instanceLifecycle
+      `Prelude.seq` Prelude.rnf ipv6Address
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf licenses
+      `Prelude.seq` Prelude.rnf maintenanceOptions
+      `Prelude.seq` Prelude.rnf metadataOptions
+      `Prelude.seq` Prelude.rnf
+        networkInterfaces
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf
+        platformDetails
+      `Prelude.seq` Prelude.rnf
+        privateDnsName
+      `Prelude.seq` Prelude.rnf
+        privateDnsNameOptions
+      `Prelude.seq` Prelude.rnf
+        privateIpAddress
+      `Prelude.seq` Prelude.rnf
+        productCodes
+      `Prelude.seq` Prelude.rnf
+        publicDnsName
+      `Prelude.seq` Prelude.rnf
+        publicIpAddress
+      `Prelude.seq` Prelude.rnf
+        ramdiskId
+      `Prelude.seq` Prelude.rnf
+        rootDeviceName
+      `Prelude.seq` Prelude.rnf
+        securityGroups
+      `Prelude.seq` Prelude.rnf
+        sourceDestCheck
+      `Prelude.seq` Prelude.rnf
+        spotInstanceRequestId
+      `Prelude.seq` Prelude.rnf
+        sriovNetSupport
+      `Prelude.seq` Prelude.rnf
+        stateReason
+      `Prelude.seq` Prelude.rnf
+        stateTransitionReason
+      `Prelude.seq` Prelude.rnf
+        subnetId
+      `Prelude.seq` Prelude.rnf
+        tags
+      `Prelude.seq` Prelude.rnf
+        tpmSupport
+      `Prelude.seq` Prelude.rnf
+        usageOperation
+      `Prelude.seq` Prelude.rnf
+        usageOperationUpdateTime
+      `Prelude.seq` Prelude.rnf
+        vpcId
+      `Prelude.seq` Prelude.rnf
+        instanceId
+      `Prelude.seq` Prelude.rnf
+        imageId
+      `Prelude.seq` Prelude.rnf
+        amiLaunchIndex
+      `Prelude.seq` Prelude.rnf
+        instanceType
+      `Prelude.seq` Prelude.rnf
+        launchTime
+      `Prelude.seq` Prelude.rnf
+        placement
+      `Prelude.seq` Prelude.rnf
+        monitoring
+      `Prelude.seq` Prelude.rnf
+        architecture
+      `Prelude.seq` Prelude.rnf
+        rootDeviceType
+      `Prelude.seq` Prelude.rnf
+        virtualizationType
+      `Prelude.seq` Prelude.rnf
+        hypervisor
+      `Prelude.seq` Prelude.rnf
+        state
diff --git a/gen/Amazonka/EC2/Types/InstanceAttributeName.hs b/gen/Amazonka/EC2/Types/InstanceAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceAttributeName.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceAttributeName
+  ( InstanceAttributeName
+      ( ..,
+        InstanceAttributeName_BlockDeviceMapping,
+        InstanceAttributeName_DisableApiStop,
+        InstanceAttributeName_DisableApiTermination,
+        InstanceAttributeName_EbsOptimized,
+        InstanceAttributeName_EnaSupport,
+        InstanceAttributeName_EnclaveOptions,
+        InstanceAttributeName_GroupSet,
+        InstanceAttributeName_InstanceInitiatedShutdownBehavior,
+        InstanceAttributeName_InstanceType,
+        InstanceAttributeName_Kernel,
+        InstanceAttributeName_ProductCodes,
+        InstanceAttributeName_Ramdisk,
+        InstanceAttributeName_RootDeviceName,
+        InstanceAttributeName_SourceDestCheck,
+        InstanceAttributeName_SriovNetSupport,
+        InstanceAttributeName_UserData
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceAttributeName = InstanceAttributeName'
+  { fromInstanceAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceAttributeName_BlockDeviceMapping :: InstanceAttributeName
+pattern InstanceAttributeName_BlockDeviceMapping = InstanceAttributeName' "blockDeviceMapping"
+
+pattern InstanceAttributeName_DisableApiStop :: InstanceAttributeName
+pattern InstanceAttributeName_DisableApiStop = InstanceAttributeName' "disableApiStop"
+
+pattern InstanceAttributeName_DisableApiTermination :: InstanceAttributeName
+pattern InstanceAttributeName_DisableApiTermination = InstanceAttributeName' "disableApiTermination"
+
+pattern InstanceAttributeName_EbsOptimized :: InstanceAttributeName
+pattern InstanceAttributeName_EbsOptimized = InstanceAttributeName' "ebsOptimized"
+
+pattern InstanceAttributeName_EnaSupport :: InstanceAttributeName
+pattern InstanceAttributeName_EnaSupport = InstanceAttributeName' "enaSupport"
+
+pattern InstanceAttributeName_EnclaveOptions :: InstanceAttributeName
+pattern InstanceAttributeName_EnclaveOptions = InstanceAttributeName' "enclaveOptions"
+
+pattern InstanceAttributeName_GroupSet :: InstanceAttributeName
+pattern InstanceAttributeName_GroupSet = InstanceAttributeName' "groupSet"
+
+pattern InstanceAttributeName_InstanceInitiatedShutdownBehavior :: InstanceAttributeName
+pattern InstanceAttributeName_InstanceInitiatedShutdownBehavior = InstanceAttributeName' "instanceInitiatedShutdownBehavior"
+
+pattern InstanceAttributeName_InstanceType :: InstanceAttributeName
+pattern InstanceAttributeName_InstanceType = InstanceAttributeName' "instanceType"
+
+pattern InstanceAttributeName_Kernel :: InstanceAttributeName
+pattern InstanceAttributeName_Kernel = InstanceAttributeName' "kernel"
+
+pattern InstanceAttributeName_ProductCodes :: InstanceAttributeName
+pattern InstanceAttributeName_ProductCodes = InstanceAttributeName' "productCodes"
+
+pattern InstanceAttributeName_Ramdisk :: InstanceAttributeName
+pattern InstanceAttributeName_Ramdisk = InstanceAttributeName' "ramdisk"
+
+pattern InstanceAttributeName_RootDeviceName :: InstanceAttributeName
+pattern InstanceAttributeName_RootDeviceName = InstanceAttributeName' "rootDeviceName"
+
+pattern InstanceAttributeName_SourceDestCheck :: InstanceAttributeName
+pattern InstanceAttributeName_SourceDestCheck = InstanceAttributeName' "sourceDestCheck"
+
+pattern InstanceAttributeName_SriovNetSupport :: InstanceAttributeName
+pattern InstanceAttributeName_SriovNetSupport = InstanceAttributeName' "sriovNetSupport"
+
+pattern InstanceAttributeName_UserData :: InstanceAttributeName
+pattern InstanceAttributeName_UserData = InstanceAttributeName' "userData"
+
+{-# COMPLETE
+  InstanceAttributeName_BlockDeviceMapping,
+  InstanceAttributeName_DisableApiStop,
+  InstanceAttributeName_DisableApiTermination,
+  InstanceAttributeName_EbsOptimized,
+  InstanceAttributeName_EnaSupport,
+  InstanceAttributeName_EnclaveOptions,
+  InstanceAttributeName_GroupSet,
+  InstanceAttributeName_InstanceInitiatedShutdownBehavior,
+  InstanceAttributeName_InstanceType,
+  InstanceAttributeName_Kernel,
+  InstanceAttributeName_ProductCodes,
+  InstanceAttributeName_Ramdisk,
+  InstanceAttributeName_RootDeviceName,
+  InstanceAttributeName_SourceDestCheck,
+  InstanceAttributeName_SriovNetSupport,
+  InstanceAttributeName_UserData,
+  InstanceAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceAutoRecoveryState.hs b/gen/Amazonka/EC2/Types/InstanceAutoRecoveryState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceAutoRecoveryState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceAutoRecoveryState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceAutoRecoveryState
+  ( InstanceAutoRecoveryState
+      ( ..,
+        InstanceAutoRecoveryState_Default,
+        InstanceAutoRecoveryState_Disabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceAutoRecoveryState = InstanceAutoRecoveryState'
+  { fromInstanceAutoRecoveryState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceAutoRecoveryState_Default :: InstanceAutoRecoveryState
+pattern InstanceAutoRecoveryState_Default = InstanceAutoRecoveryState' "default"
+
+pattern InstanceAutoRecoveryState_Disabled :: InstanceAutoRecoveryState
+pattern InstanceAutoRecoveryState_Disabled = InstanceAutoRecoveryState' "disabled"
+
+{-# COMPLETE
+  InstanceAutoRecoveryState_Default,
+  InstanceAutoRecoveryState_Disabled,
+  InstanceAutoRecoveryState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceBlockDeviceMapping.hs b/gen/Amazonka/EC2/Types/InstanceBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceBlockDeviceMapping.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceBlockDeviceMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceBlockDeviceMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EbsInstanceBlockDevice
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device mapping.
+--
+-- /See:/ 'newInstanceBlockDeviceMapping' smart constructor.
+data InstanceBlockDeviceMapping = InstanceBlockDeviceMapping'
+  { -- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Parameters used to automatically set up EBS volumes when the instance is
+    -- launched.
+    ebs :: Prelude.Maybe EbsInstanceBlockDevice
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceBlockDeviceMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'instanceBlockDeviceMapping_deviceName' - The device name (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- 'ebs', 'instanceBlockDeviceMapping_ebs' - Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+newInstanceBlockDeviceMapping ::
+  InstanceBlockDeviceMapping
+newInstanceBlockDeviceMapping =
+  InstanceBlockDeviceMapping'
+    { deviceName =
+        Prelude.Nothing,
+      ebs = Prelude.Nothing
+    }
+
+-- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+instanceBlockDeviceMapping_deviceName :: Lens.Lens' InstanceBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMapping_deviceName = Lens.lens (\InstanceBlockDeviceMapping' {deviceName} -> deviceName) (\s@InstanceBlockDeviceMapping' {} a -> s {deviceName = a} :: InstanceBlockDeviceMapping)
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+instanceBlockDeviceMapping_ebs :: Lens.Lens' InstanceBlockDeviceMapping (Prelude.Maybe EbsInstanceBlockDevice)
+instanceBlockDeviceMapping_ebs = Lens.lens (\InstanceBlockDeviceMapping' {ebs} -> ebs) (\s@InstanceBlockDeviceMapping' {} a -> s {ebs = a} :: InstanceBlockDeviceMapping)
+
+instance Data.FromXML InstanceBlockDeviceMapping where
+  parseXML x =
+    InstanceBlockDeviceMapping'
+      Prelude.<$> (x Data..@? "deviceName")
+      Prelude.<*> (x Data..@? "ebs")
+
+instance Prelude.Hashable InstanceBlockDeviceMapping where
+  hashWithSalt _salt InstanceBlockDeviceMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` ebs
+
+instance Prelude.NFData InstanceBlockDeviceMapping where
+  rnf InstanceBlockDeviceMapping' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf ebs
diff --git a/gen/Amazonka/EC2/Types/InstanceBlockDeviceMappingSpecification.hs b/gen/Amazonka/EC2/Types/InstanceBlockDeviceMappingSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceBlockDeviceMappingSpecification.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceBlockDeviceMappingSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceBlockDeviceMappingSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EbsInstanceBlockDeviceSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device mapping entry.
+--
+-- /See:/ 'newInstanceBlockDeviceMappingSpecification' smart constructor.
+data InstanceBlockDeviceMappingSpecification = InstanceBlockDeviceMappingSpecification'
+  { -- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Parameters used to automatically set up EBS volumes when the instance is
+    -- launched.
+    ebs :: Prelude.Maybe EbsInstanceBlockDeviceSpecification,
+    -- | suppress the specified device included in the block device mapping.
+    noDevice :: Prelude.Maybe Prelude.Text,
+    -- | The virtual device name.
+    virtualName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceBlockDeviceMappingSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'instanceBlockDeviceMappingSpecification_deviceName' - The device name (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- 'ebs', 'instanceBlockDeviceMappingSpecification_ebs' - Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+--
+-- 'noDevice', 'instanceBlockDeviceMappingSpecification_noDevice' - suppress the specified device included in the block device mapping.
+--
+-- 'virtualName', 'instanceBlockDeviceMappingSpecification_virtualName' - The virtual device name.
+newInstanceBlockDeviceMappingSpecification ::
+  InstanceBlockDeviceMappingSpecification
+newInstanceBlockDeviceMappingSpecification =
+  InstanceBlockDeviceMappingSpecification'
+    { deviceName =
+        Prelude.Nothing,
+      ebs = Prelude.Nothing,
+      noDevice = Prelude.Nothing,
+      virtualName = Prelude.Nothing
+    }
+
+-- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+instanceBlockDeviceMappingSpecification_deviceName :: Lens.Lens' InstanceBlockDeviceMappingSpecification (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMappingSpecification_deviceName = Lens.lens (\InstanceBlockDeviceMappingSpecification' {deviceName} -> deviceName) (\s@InstanceBlockDeviceMappingSpecification' {} a -> s {deviceName = a} :: InstanceBlockDeviceMappingSpecification)
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+instanceBlockDeviceMappingSpecification_ebs :: Lens.Lens' InstanceBlockDeviceMappingSpecification (Prelude.Maybe EbsInstanceBlockDeviceSpecification)
+instanceBlockDeviceMappingSpecification_ebs = Lens.lens (\InstanceBlockDeviceMappingSpecification' {ebs} -> ebs) (\s@InstanceBlockDeviceMappingSpecification' {} a -> s {ebs = a} :: InstanceBlockDeviceMappingSpecification)
+
+-- | suppress the specified device included in the block device mapping.
+instanceBlockDeviceMappingSpecification_noDevice :: Lens.Lens' InstanceBlockDeviceMappingSpecification (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMappingSpecification_noDevice = Lens.lens (\InstanceBlockDeviceMappingSpecification' {noDevice} -> noDevice) (\s@InstanceBlockDeviceMappingSpecification' {} a -> s {noDevice = a} :: InstanceBlockDeviceMappingSpecification)
+
+-- | The virtual device name.
+instanceBlockDeviceMappingSpecification_virtualName :: Lens.Lens' InstanceBlockDeviceMappingSpecification (Prelude.Maybe Prelude.Text)
+instanceBlockDeviceMappingSpecification_virtualName = Lens.lens (\InstanceBlockDeviceMappingSpecification' {virtualName} -> virtualName) (\s@InstanceBlockDeviceMappingSpecification' {} a -> s {virtualName = a} :: InstanceBlockDeviceMappingSpecification)
+
+instance
+  Prelude.Hashable
+    InstanceBlockDeviceMappingSpecification
+  where
+  hashWithSalt
+    _salt
+    InstanceBlockDeviceMappingSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` ebs
+        `Prelude.hashWithSalt` noDevice
+        `Prelude.hashWithSalt` virtualName
+
+instance
+  Prelude.NFData
+    InstanceBlockDeviceMappingSpecification
+  where
+  rnf InstanceBlockDeviceMappingSpecification' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf ebs
+      `Prelude.seq` Prelude.rnf noDevice
+      `Prelude.seq` Prelude.rnf virtualName
+
+instance
+  Data.ToQuery
+    InstanceBlockDeviceMappingSpecification
+  where
+  toQuery InstanceBlockDeviceMappingSpecification' {..} =
+    Prelude.mconcat
+      [ "DeviceName" Data.=: deviceName,
+        "Ebs" Data.=: ebs,
+        "NoDevice" Data.=: noDevice,
+        "VirtualName" Data.=: virtualName
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceCapacity.hs b/gen/Amazonka/EC2/Types/InstanceCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceCapacity.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceCapacity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceCapacity where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the number of instances that can be launched onto the
+-- Dedicated Host.
+--
+-- /See:/ 'newInstanceCapacity' smart constructor.
+data InstanceCapacity = InstanceCapacity'
+  { -- | The number of instances that can be launched onto the Dedicated Host
+    -- based on the host\'s available capacity.
+    availableCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The instance type supported by the Dedicated Host.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The total number of instances that can be launched onto the Dedicated
+    -- Host if there are no instances running on it.
+    totalCapacity :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceCapacity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availableCapacity', 'instanceCapacity_availableCapacity' - The number of instances that can be launched onto the Dedicated Host
+-- based on the host\'s available capacity.
+--
+-- 'instanceType', 'instanceCapacity_instanceType' - The instance type supported by the Dedicated Host.
+--
+-- 'totalCapacity', 'instanceCapacity_totalCapacity' - The total number of instances that can be launched onto the Dedicated
+-- Host if there are no instances running on it.
+newInstanceCapacity ::
+  InstanceCapacity
+newInstanceCapacity =
+  InstanceCapacity'
+    { availableCapacity =
+        Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      totalCapacity = Prelude.Nothing
+    }
+
+-- | The number of instances that can be launched onto the Dedicated Host
+-- based on the host\'s available capacity.
+instanceCapacity_availableCapacity :: Lens.Lens' InstanceCapacity (Prelude.Maybe Prelude.Int)
+instanceCapacity_availableCapacity = Lens.lens (\InstanceCapacity' {availableCapacity} -> availableCapacity) (\s@InstanceCapacity' {} a -> s {availableCapacity = a} :: InstanceCapacity)
+
+-- | The instance type supported by the Dedicated Host.
+instanceCapacity_instanceType :: Lens.Lens' InstanceCapacity (Prelude.Maybe Prelude.Text)
+instanceCapacity_instanceType = Lens.lens (\InstanceCapacity' {instanceType} -> instanceType) (\s@InstanceCapacity' {} a -> s {instanceType = a} :: InstanceCapacity)
+
+-- | The total number of instances that can be launched onto the Dedicated
+-- Host if there are no instances running on it.
+instanceCapacity_totalCapacity :: Lens.Lens' InstanceCapacity (Prelude.Maybe Prelude.Int)
+instanceCapacity_totalCapacity = Lens.lens (\InstanceCapacity' {totalCapacity} -> totalCapacity) (\s@InstanceCapacity' {} a -> s {totalCapacity = a} :: InstanceCapacity)
+
+instance Data.FromXML InstanceCapacity where
+  parseXML x =
+    InstanceCapacity'
+      Prelude.<$> (x Data..@? "availableCapacity")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "totalCapacity")
+
+instance Prelude.Hashable InstanceCapacity where
+  hashWithSalt _salt InstanceCapacity' {..} =
+    _salt
+      `Prelude.hashWithSalt` availableCapacity
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` totalCapacity
+
+instance Prelude.NFData InstanceCapacity where
+  rnf InstanceCapacity' {..} =
+    Prelude.rnf availableCapacity
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf totalCapacity
diff --git a/gen/Amazonka/EC2/Types/InstanceCount.hs b/gen/Amazonka/EC2/Types/InstanceCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceCount.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceCount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceCount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ListingState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance listing state.
+--
+-- /See:/ 'newInstanceCount' smart constructor.
+data InstanceCount = InstanceCount'
+  { -- | The number of listed Reserved Instances in the state specified by the
+    -- @state@.
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The states of the listed Reserved Instances.
+    state :: Prelude.Maybe ListingState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceCount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceCount', 'instanceCount_instanceCount' - The number of listed Reserved Instances in the state specified by the
+-- @state@.
+--
+-- 'state', 'instanceCount_state' - The states of the listed Reserved Instances.
+newInstanceCount ::
+  InstanceCount
+newInstanceCount =
+  InstanceCount'
+    { instanceCount = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The number of listed Reserved Instances in the state specified by the
+-- @state@.
+instanceCount_instanceCount :: Lens.Lens' InstanceCount (Prelude.Maybe Prelude.Int)
+instanceCount_instanceCount = Lens.lens (\InstanceCount' {instanceCount} -> instanceCount) (\s@InstanceCount' {} a -> s {instanceCount = a} :: InstanceCount)
+
+-- | The states of the listed Reserved Instances.
+instanceCount_state :: Lens.Lens' InstanceCount (Prelude.Maybe ListingState)
+instanceCount_state = Lens.lens (\InstanceCount' {state} -> state) (\s@InstanceCount' {} a -> s {state = a} :: InstanceCount)
+
+instance Data.FromXML InstanceCount where
+  parseXML x =
+    InstanceCount'
+      Prelude.<$> (x Data..@? "instanceCount")
+      Prelude.<*> (x Data..@? "state")
+
+instance Prelude.Hashable InstanceCount where
+  hashWithSalt _salt InstanceCount' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData InstanceCount where
+  rnf InstanceCount' {..} =
+    Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/InstanceCreditSpecification.hs b/gen/Amazonka/EC2/Types/InstanceCreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceCreditSpecification.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceCreditSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceCreditSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the credit option for CPU usage of a burstable performance
+-- instance.
+--
+-- /See:/ 'newInstanceCreditSpecification' smart constructor.
+data InstanceCreditSpecification = InstanceCreditSpecification'
+  { -- | The credit option for CPU usage of the instance.
+    --
+    -- Valid values: @standard@ | @unlimited@
+    cpuCredits :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceCreditSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpuCredits', 'instanceCreditSpecification_cpuCredits' - The credit option for CPU usage of the instance.
+--
+-- Valid values: @standard@ | @unlimited@
+--
+-- 'instanceId', 'instanceCreditSpecification_instanceId' - The ID of the instance.
+newInstanceCreditSpecification ::
+  InstanceCreditSpecification
+newInstanceCreditSpecification =
+  InstanceCreditSpecification'
+    { cpuCredits =
+        Prelude.Nothing,
+      instanceId = Prelude.Nothing
+    }
+
+-- | The credit option for CPU usage of the instance.
+--
+-- Valid values: @standard@ | @unlimited@
+instanceCreditSpecification_cpuCredits :: Lens.Lens' InstanceCreditSpecification (Prelude.Maybe Prelude.Text)
+instanceCreditSpecification_cpuCredits = Lens.lens (\InstanceCreditSpecification' {cpuCredits} -> cpuCredits) (\s@InstanceCreditSpecification' {} a -> s {cpuCredits = a} :: InstanceCreditSpecification)
+
+-- | The ID of the instance.
+instanceCreditSpecification_instanceId :: Lens.Lens' InstanceCreditSpecification (Prelude.Maybe Prelude.Text)
+instanceCreditSpecification_instanceId = Lens.lens (\InstanceCreditSpecification' {instanceId} -> instanceId) (\s@InstanceCreditSpecification' {} a -> s {instanceId = a} :: InstanceCreditSpecification)
+
+instance Data.FromXML InstanceCreditSpecification where
+  parseXML x =
+    InstanceCreditSpecification'
+      Prelude.<$> (x Data..@? "cpuCredits")
+      Prelude.<*> (x Data..@? "instanceId")
+
+instance Prelude.Hashable InstanceCreditSpecification where
+  hashWithSalt _salt InstanceCreditSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` cpuCredits
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData InstanceCreditSpecification where
+  rnf InstanceCreditSpecification' {..} =
+    Prelude.rnf cpuCredits
+      `Prelude.seq` Prelude.rnf instanceId
diff --git a/gen/Amazonka/EC2/Types/InstanceCreditSpecificationRequest.hs b/gen/Amazonka/EC2/Types/InstanceCreditSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceCreditSpecificationRequest.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceCreditSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceCreditSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the credit option for CPU usage of a burstable performance
+-- instance.
+--
+-- /See:/ 'newInstanceCreditSpecificationRequest' smart constructor.
+data InstanceCreditSpecificationRequest = InstanceCreditSpecificationRequest'
+  { -- | The credit option for CPU usage of the instance.
+    --
+    -- Valid values: @standard@ | @unlimited@
+    --
+    -- T3 instances with @host@ tenancy do not support the @unlimited@ CPU
+    -- credit option.
+    cpuCredits :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceCreditSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpuCredits', 'instanceCreditSpecificationRequest_cpuCredits' - The credit option for CPU usage of the instance.
+--
+-- Valid values: @standard@ | @unlimited@
+--
+-- T3 instances with @host@ tenancy do not support the @unlimited@ CPU
+-- credit option.
+--
+-- 'instanceId', 'instanceCreditSpecificationRequest_instanceId' - The ID of the instance.
+newInstanceCreditSpecificationRequest ::
+  InstanceCreditSpecificationRequest
+newInstanceCreditSpecificationRequest =
+  InstanceCreditSpecificationRequest'
+    { cpuCredits =
+        Prelude.Nothing,
+      instanceId = Prelude.Nothing
+    }
+
+-- | The credit option for CPU usage of the instance.
+--
+-- Valid values: @standard@ | @unlimited@
+--
+-- T3 instances with @host@ tenancy do not support the @unlimited@ CPU
+-- credit option.
+instanceCreditSpecificationRequest_cpuCredits :: Lens.Lens' InstanceCreditSpecificationRequest (Prelude.Maybe Prelude.Text)
+instanceCreditSpecificationRequest_cpuCredits = Lens.lens (\InstanceCreditSpecificationRequest' {cpuCredits} -> cpuCredits) (\s@InstanceCreditSpecificationRequest' {} a -> s {cpuCredits = a} :: InstanceCreditSpecificationRequest)
+
+-- | The ID of the instance.
+instanceCreditSpecificationRequest_instanceId :: Lens.Lens' InstanceCreditSpecificationRequest (Prelude.Maybe Prelude.Text)
+instanceCreditSpecificationRequest_instanceId = Lens.lens (\InstanceCreditSpecificationRequest' {instanceId} -> instanceId) (\s@InstanceCreditSpecificationRequest' {} a -> s {instanceId = a} :: InstanceCreditSpecificationRequest)
+
+instance
+  Prelude.Hashable
+    InstanceCreditSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceCreditSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` cpuCredits
+        `Prelude.hashWithSalt` instanceId
+
+instance
+  Prelude.NFData
+    InstanceCreditSpecificationRequest
+  where
+  rnf InstanceCreditSpecificationRequest' {..} =
+    Prelude.rnf cpuCredits
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance
+  Data.ToQuery
+    InstanceCreditSpecificationRequest
+  where
+  toQuery InstanceCreditSpecificationRequest' {..} =
+    Prelude.mconcat
+      [ "CpuCredits" Data.=: cpuCredits,
+        "InstanceId" Data.=: instanceId
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindow.hs b/gen/Amazonka/EC2/Types/InstanceEventWindow.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindow.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindow
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindow where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceEventWindowAssociationTarget
+import Amazonka.EC2.Types.InstanceEventWindowState
+import Amazonka.EC2.Types.InstanceEventWindowTimeRange
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The event window.
+--
+-- /See:/ 'newInstanceEventWindow' smart constructor.
+data InstanceEventWindow = InstanceEventWindow'
+  { -- | One or more targets associated with the event window.
+    associationTarget :: Prelude.Maybe InstanceEventWindowAssociationTarget,
+    -- | The cron expression defined for the event window.
+    cronExpression :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the event window.
+    instanceEventWindowId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the event window.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the event window.
+    state :: Prelude.Maybe InstanceEventWindowState,
+    -- | The instance tags associated with the event window.
+    tags :: Prelude.Maybe [Tag],
+    -- | One or more time ranges defined for the event window.
+    timeRanges :: Prelude.Maybe [InstanceEventWindowTimeRange]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindow' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationTarget', 'instanceEventWindow_associationTarget' - One or more targets associated with the event window.
+--
+-- 'cronExpression', 'instanceEventWindow_cronExpression' - The cron expression defined for the event window.
+--
+-- 'instanceEventWindowId', 'instanceEventWindow_instanceEventWindowId' - The ID of the event window.
+--
+-- 'name', 'instanceEventWindow_name' - The name of the event window.
+--
+-- 'state', 'instanceEventWindow_state' - The current state of the event window.
+--
+-- 'tags', 'instanceEventWindow_tags' - The instance tags associated with the event window.
+--
+-- 'timeRanges', 'instanceEventWindow_timeRanges' - One or more time ranges defined for the event window.
+newInstanceEventWindow ::
+  InstanceEventWindow
+newInstanceEventWindow =
+  InstanceEventWindow'
+    { associationTarget =
+        Prelude.Nothing,
+      cronExpression = Prelude.Nothing,
+      instanceEventWindowId = Prelude.Nothing,
+      name = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      timeRanges = Prelude.Nothing
+    }
+
+-- | One or more targets associated with the event window.
+instanceEventWindow_associationTarget :: Lens.Lens' InstanceEventWindow (Prelude.Maybe InstanceEventWindowAssociationTarget)
+instanceEventWindow_associationTarget = Lens.lens (\InstanceEventWindow' {associationTarget} -> associationTarget) (\s@InstanceEventWindow' {} a -> s {associationTarget = a} :: InstanceEventWindow)
+
+-- | The cron expression defined for the event window.
+instanceEventWindow_cronExpression :: Lens.Lens' InstanceEventWindow (Prelude.Maybe Prelude.Text)
+instanceEventWindow_cronExpression = Lens.lens (\InstanceEventWindow' {cronExpression} -> cronExpression) (\s@InstanceEventWindow' {} a -> s {cronExpression = a} :: InstanceEventWindow)
+
+-- | The ID of the event window.
+instanceEventWindow_instanceEventWindowId :: Lens.Lens' InstanceEventWindow (Prelude.Maybe Prelude.Text)
+instanceEventWindow_instanceEventWindowId = Lens.lens (\InstanceEventWindow' {instanceEventWindowId} -> instanceEventWindowId) (\s@InstanceEventWindow' {} a -> s {instanceEventWindowId = a} :: InstanceEventWindow)
+
+-- | The name of the event window.
+instanceEventWindow_name :: Lens.Lens' InstanceEventWindow (Prelude.Maybe Prelude.Text)
+instanceEventWindow_name = Lens.lens (\InstanceEventWindow' {name} -> name) (\s@InstanceEventWindow' {} a -> s {name = a} :: InstanceEventWindow)
+
+-- | The current state of the event window.
+instanceEventWindow_state :: Lens.Lens' InstanceEventWindow (Prelude.Maybe InstanceEventWindowState)
+instanceEventWindow_state = Lens.lens (\InstanceEventWindow' {state} -> state) (\s@InstanceEventWindow' {} a -> s {state = a} :: InstanceEventWindow)
+
+-- | The instance tags associated with the event window.
+instanceEventWindow_tags :: Lens.Lens' InstanceEventWindow (Prelude.Maybe [Tag])
+instanceEventWindow_tags = Lens.lens (\InstanceEventWindow' {tags} -> tags) (\s@InstanceEventWindow' {} a -> s {tags = a} :: InstanceEventWindow) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more time ranges defined for the event window.
+instanceEventWindow_timeRanges :: Lens.Lens' InstanceEventWindow (Prelude.Maybe [InstanceEventWindowTimeRange])
+instanceEventWindow_timeRanges = Lens.lens (\InstanceEventWindow' {timeRanges} -> timeRanges) (\s@InstanceEventWindow' {} a -> s {timeRanges = a} :: InstanceEventWindow) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML InstanceEventWindow where
+  parseXML x =
+    InstanceEventWindow'
+      Prelude.<$> (x Data..@? "associationTarget")
+      Prelude.<*> (x Data..@? "cronExpression")
+      Prelude.<*> (x Data..@? "instanceEventWindowId")
+      Prelude.<*> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "timeRangeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable InstanceEventWindow where
+  hashWithSalt _salt InstanceEventWindow' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationTarget
+      `Prelude.hashWithSalt` cronExpression
+      `Prelude.hashWithSalt` instanceEventWindowId
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` timeRanges
+
+instance Prelude.NFData InstanceEventWindow where
+  rnf InstanceEventWindow' {..} =
+    Prelude.rnf associationTarget
+      `Prelude.seq` Prelude.rnf cronExpression
+      `Prelude.seq` Prelude.rnf instanceEventWindowId
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf timeRanges
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowAssociationRequest.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowAssociationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowAssociationRequest.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowAssociationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowAssociationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | One or more targets associated with the specified event window. Only one
+-- /type/ of target (instance ID, instance tag, or Dedicated Host ID) can
+-- be associated with an event window.
+--
+-- /See:/ 'newInstanceEventWindowAssociationRequest' smart constructor.
+data InstanceEventWindowAssociationRequest = InstanceEventWindowAssociationRequest'
+  { -- | The IDs of the Dedicated Hosts to associate with the event window.
+    dedicatedHostIds :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the instances to associate with the event window. If the
+    -- instance is on a Dedicated Host, you can\'t specify the Instance ID
+    -- parameter; you must use the Dedicated Host ID parameter.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The instance tags to associate with the event window. Any instances
+    -- associated with the tags will be associated with the event window.
+    instanceTags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindowAssociationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedHostIds', 'instanceEventWindowAssociationRequest_dedicatedHostIds' - The IDs of the Dedicated Hosts to associate with the event window.
+--
+-- 'instanceIds', 'instanceEventWindowAssociationRequest_instanceIds' - The IDs of the instances to associate with the event window. If the
+-- instance is on a Dedicated Host, you can\'t specify the Instance ID
+-- parameter; you must use the Dedicated Host ID parameter.
+--
+-- 'instanceTags', 'instanceEventWindowAssociationRequest_instanceTags' - The instance tags to associate with the event window. Any instances
+-- associated with the tags will be associated with the event window.
+newInstanceEventWindowAssociationRequest ::
+  InstanceEventWindowAssociationRequest
+newInstanceEventWindowAssociationRequest =
+  InstanceEventWindowAssociationRequest'
+    { dedicatedHostIds =
+        Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      instanceTags = Prelude.Nothing
+    }
+
+-- | The IDs of the Dedicated Hosts to associate with the event window.
+instanceEventWindowAssociationRequest_dedicatedHostIds :: Lens.Lens' InstanceEventWindowAssociationRequest (Prelude.Maybe [Prelude.Text])
+instanceEventWindowAssociationRequest_dedicatedHostIds = Lens.lens (\InstanceEventWindowAssociationRequest' {dedicatedHostIds} -> dedicatedHostIds) (\s@InstanceEventWindowAssociationRequest' {} a -> s {dedicatedHostIds = a} :: InstanceEventWindowAssociationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the instances to associate with the event window. If the
+-- instance is on a Dedicated Host, you can\'t specify the Instance ID
+-- parameter; you must use the Dedicated Host ID parameter.
+instanceEventWindowAssociationRequest_instanceIds :: Lens.Lens' InstanceEventWindowAssociationRequest (Prelude.Maybe [Prelude.Text])
+instanceEventWindowAssociationRequest_instanceIds = Lens.lens (\InstanceEventWindowAssociationRequest' {instanceIds} -> instanceIds) (\s@InstanceEventWindowAssociationRequest' {} a -> s {instanceIds = a} :: InstanceEventWindowAssociationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance tags to associate with the event window. Any instances
+-- associated with the tags will be associated with the event window.
+instanceEventWindowAssociationRequest_instanceTags :: Lens.Lens' InstanceEventWindowAssociationRequest (Prelude.Maybe [Tag])
+instanceEventWindowAssociationRequest_instanceTags = Lens.lens (\InstanceEventWindowAssociationRequest' {instanceTags} -> instanceTags) (\s@InstanceEventWindowAssociationRequest' {} a -> s {instanceTags = a} :: InstanceEventWindowAssociationRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    InstanceEventWindowAssociationRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceEventWindowAssociationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` dedicatedHostIds
+        `Prelude.hashWithSalt` instanceIds
+        `Prelude.hashWithSalt` instanceTags
+
+instance
+  Prelude.NFData
+    InstanceEventWindowAssociationRequest
+  where
+  rnf InstanceEventWindowAssociationRequest' {..} =
+    Prelude.rnf dedicatedHostIds
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf instanceTags
+
+instance
+  Data.ToQuery
+    InstanceEventWindowAssociationRequest
+  where
+  toQuery InstanceEventWindowAssociationRequest' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "DedicatedHostId"
+              Prelude.<$> dedicatedHostIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "InstanceId"
+              Prelude.<$> instanceIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "InstanceTag"
+              Prelude.<$> instanceTags
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowAssociationTarget.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowAssociationTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowAssociationTarget.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowAssociationTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowAssociationTarget where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | One or more targets associated with the event window.
+--
+-- /See:/ 'newInstanceEventWindowAssociationTarget' smart constructor.
+data InstanceEventWindowAssociationTarget = InstanceEventWindowAssociationTarget'
+  { -- | The IDs of the Dedicated Hosts associated with the event window.
+    dedicatedHostIds :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the instances associated with the event window.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The instance tags associated with the event window. Any instances
+    -- associated with the tags will be associated with the event window.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindowAssociationTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedHostIds', 'instanceEventWindowAssociationTarget_dedicatedHostIds' - The IDs of the Dedicated Hosts associated with the event window.
+--
+-- 'instanceIds', 'instanceEventWindowAssociationTarget_instanceIds' - The IDs of the instances associated with the event window.
+--
+-- 'tags', 'instanceEventWindowAssociationTarget_tags' - The instance tags associated with the event window. Any instances
+-- associated with the tags will be associated with the event window.
+newInstanceEventWindowAssociationTarget ::
+  InstanceEventWindowAssociationTarget
+newInstanceEventWindowAssociationTarget =
+  InstanceEventWindowAssociationTarget'
+    { dedicatedHostIds =
+        Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The IDs of the Dedicated Hosts associated with the event window.
+instanceEventWindowAssociationTarget_dedicatedHostIds :: Lens.Lens' InstanceEventWindowAssociationTarget (Prelude.Maybe [Prelude.Text])
+instanceEventWindowAssociationTarget_dedicatedHostIds = Lens.lens (\InstanceEventWindowAssociationTarget' {dedicatedHostIds} -> dedicatedHostIds) (\s@InstanceEventWindowAssociationTarget' {} a -> s {dedicatedHostIds = a} :: InstanceEventWindowAssociationTarget) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the instances associated with the event window.
+instanceEventWindowAssociationTarget_instanceIds :: Lens.Lens' InstanceEventWindowAssociationTarget (Prelude.Maybe [Prelude.Text])
+instanceEventWindowAssociationTarget_instanceIds = Lens.lens (\InstanceEventWindowAssociationTarget' {instanceIds} -> instanceIds) (\s@InstanceEventWindowAssociationTarget' {} a -> s {instanceIds = a} :: InstanceEventWindowAssociationTarget) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance tags associated with the event window. Any instances
+-- associated with the tags will be associated with the event window.
+instanceEventWindowAssociationTarget_tags :: Lens.Lens' InstanceEventWindowAssociationTarget (Prelude.Maybe [Tag])
+instanceEventWindowAssociationTarget_tags = Lens.lens (\InstanceEventWindowAssociationTarget' {tags} -> tags) (\s@InstanceEventWindowAssociationTarget' {} a -> s {tags = a} :: InstanceEventWindowAssociationTarget) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromXML
+    InstanceEventWindowAssociationTarget
+  where
+  parseXML x =
+    InstanceEventWindowAssociationTarget'
+      Prelude.<$> ( x
+                      Data..@? "dedicatedHostIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "instanceIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance
+  Prelude.Hashable
+    InstanceEventWindowAssociationTarget
+  where
+  hashWithSalt
+    _salt
+    InstanceEventWindowAssociationTarget' {..} =
+      _salt
+        `Prelude.hashWithSalt` dedicatedHostIds
+        `Prelude.hashWithSalt` instanceIds
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    InstanceEventWindowAssociationTarget
+  where
+  rnf InstanceEventWindowAssociationTarget' {..} =
+    Prelude.rnf dedicatedHostIds
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowDisassociationRequest.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowDisassociationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowDisassociationRequest.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowDisassociationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowDisassociationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The targets to disassociate from the specified event window.
+--
+-- /See:/ 'newInstanceEventWindowDisassociationRequest' smart constructor.
+data InstanceEventWindowDisassociationRequest = InstanceEventWindowDisassociationRequest'
+  { -- | The IDs of the Dedicated Hosts to disassociate from the event window.
+    dedicatedHostIds :: Prelude.Maybe [Prelude.Text],
+    -- | The IDs of the instances to disassociate from the event window.
+    instanceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The instance tags to disassociate from the event window. Any instances
+    -- associated with the tags will be disassociated from the event window.
+    instanceTags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindowDisassociationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dedicatedHostIds', 'instanceEventWindowDisassociationRequest_dedicatedHostIds' - The IDs of the Dedicated Hosts to disassociate from the event window.
+--
+-- 'instanceIds', 'instanceEventWindowDisassociationRequest_instanceIds' - The IDs of the instances to disassociate from the event window.
+--
+-- 'instanceTags', 'instanceEventWindowDisassociationRequest_instanceTags' - The instance tags to disassociate from the event window. Any instances
+-- associated with the tags will be disassociated from the event window.
+newInstanceEventWindowDisassociationRequest ::
+  InstanceEventWindowDisassociationRequest
+newInstanceEventWindowDisassociationRequest =
+  InstanceEventWindowDisassociationRequest'
+    { dedicatedHostIds =
+        Prelude.Nothing,
+      instanceIds = Prelude.Nothing,
+      instanceTags = Prelude.Nothing
+    }
+
+-- | The IDs of the Dedicated Hosts to disassociate from the event window.
+instanceEventWindowDisassociationRequest_dedicatedHostIds :: Lens.Lens' InstanceEventWindowDisassociationRequest (Prelude.Maybe [Prelude.Text])
+instanceEventWindowDisassociationRequest_dedicatedHostIds = Lens.lens (\InstanceEventWindowDisassociationRequest' {dedicatedHostIds} -> dedicatedHostIds) (\s@InstanceEventWindowDisassociationRequest' {} a -> s {dedicatedHostIds = a} :: InstanceEventWindowDisassociationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of the instances to disassociate from the event window.
+instanceEventWindowDisassociationRequest_instanceIds :: Lens.Lens' InstanceEventWindowDisassociationRequest (Prelude.Maybe [Prelude.Text])
+instanceEventWindowDisassociationRequest_instanceIds = Lens.lens (\InstanceEventWindowDisassociationRequest' {instanceIds} -> instanceIds) (\s@InstanceEventWindowDisassociationRequest' {} a -> s {instanceIds = a} :: InstanceEventWindowDisassociationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance tags to disassociate from the event window. Any instances
+-- associated with the tags will be disassociated from the event window.
+instanceEventWindowDisassociationRequest_instanceTags :: Lens.Lens' InstanceEventWindowDisassociationRequest (Prelude.Maybe [Tag])
+instanceEventWindowDisassociationRequest_instanceTags = Lens.lens (\InstanceEventWindowDisassociationRequest' {instanceTags} -> instanceTags) (\s@InstanceEventWindowDisassociationRequest' {} a -> s {instanceTags = a} :: InstanceEventWindowDisassociationRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    InstanceEventWindowDisassociationRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceEventWindowDisassociationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` dedicatedHostIds
+        `Prelude.hashWithSalt` instanceIds
+        `Prelude.hashWithSalt` instanceTags
+
+instance
+  Prelude.NFData
+    InstanceEventWindowDisassociationRequest
+  where
+  rnf InstanceEventWindowDisassociationRequest' {..} =
+    Prelude.rnf dedicatedHostIds
+      `Prelude.seq` Prelude.rnf instanceIds
+      `Prelude.seq` Prelude.rnf instanceTags
+
+instance
+  Data.ToQuery
+    InstanceEventWindowDisassociationRequest
+  where
+  toQuery InstanceEventWindowDisassociationRequest' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "DedicatedHostId"
+              Prelude.<$> dedicatedHostIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "InstanceId"
+              Prelude.<$> instanceIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "InstanceTag"
+              Prelude.<$> instanceTags
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowState.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowState
+  ( InstanceEventWindowState
+      ( ..,
+        InstanceEventWindowState_Active,
+        InstanceEventWindowState_Creating,
+        InstanceEventWindowState_Deleted,
+        InstanceEventWindowState_Deleting
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceEventWindowState = InstanceEventWindowState'
+  { fromInstanceEventWindowState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceEventWindowState_Active :: InstanceEventWindowState
+pattern InstanceEventWindowState_Active = InstanceEventWindowState' "active"
+
+pattern InstanceEventWindowState_Creating :: InstanceEventWindowState
+pattern InstanceEventWindowState_Creating = InstanceEventWindowState' "creating"
+
+pattern InstanceEventWindowState_Deleted :: InstanceEventWindowState
+pattern InstanceEventWindowState_Deleted = InstanceEventWindowState' "deleted"
+
+pattern InstanceEventWindowState_Deleting :: InstanceEventWindowState
+pattern InstanceEventWindowState_Deleting = InstanceEventWindowState' "deleting"
+
+{-# COMPLETE
+  InstanceEventWindowState_Active,
+  InstanceEventWindowState_Creating,
+  InstanceEventWindowState_Deleted,
+  InstanceEventWindowState_Deleting,
+  InstanceEventWindowState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowStateChange.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowStateChange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowStateChange.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowStateChange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowStateChange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceEventWindowState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The state of the event window.
+--
+-- /See:/ 'newInstanceEventWindowStateChange' smart constructor.
+data InstanceEventWindowStateChange = InstanceEventWindowStateChange'
+  { -- | The ID of the event window.
+    instanceEventWindowId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the event window.
+    state :: Prelude.Maybe InstanceEventWindowState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindowStateChange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceEventWindowId', 'instanceEventWindowStateChange_instanceEventWindowId' - The ID of the event window.
+--
+-- 'state', 'instanceEventWindowStateChange_state' - The current state of the event window.
+newInstanceEventWindowStateChange ::
+  InstanceEventWindowStateChange
+newInstanceEventWindowStateChange =
+  InstanceEventWindowStateChange'
+    { instanceEventWindowId =
+        Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The ID of the event window.
+instanceEventWindowStateChange_instanceEventWindowId :: Lens.Lens' InstanceEventWindowStateChange (Prelude.Maybe Prelude.Text)
+instanceEventWindowStateChange_instanceEventWindowId = Lens.lens (\InstanceEventWindowStateChange' {instanceEventWindowId} -> instanceEventWindowId) (\s@InstanceEventWindowStateChange' {} a -> s {instanceEventWindowId = a} :: InstanceEventWindowStateChange)
+
+-- | The current state of the event window.
+instanceEventWindowStateChange_state :: Lens.Lens' InstanceEventWindowStateChange (Prelude.Maybe InstanceEventWindowState)
+instanceEventWindowStateChange_state = Lens.lens (\InstanceEventWindowStateChange' {state} -> state) (\s@InstanceEventWindowStateChange' {} a -> s {state = a} :: InstanceEventWindowStateChange)
+
+instance Data.FromXML InstanceEventWindowStateChange where
+  parseXML x =
+    InstanceEventWindowStateChange'
+      Prelude.<$> (x Data..@? "instanceEventWindowId")
+      Prelude.<*> (x Data..@? "state")
+
+instance
+  Prelude.Hashable
+    InstanceEventWindowStateChange
+  where
+  hashWithSalt
+    _salt
+    InstanceEventWindowStateChange' {..} =
+      _salt
+        `Prelude.hashWithSalt` instanceEventWindowId
+        `Prelude.hashWithSalt` state
+
+instance
+  Prelude.NFData
+    InstanceEventWindowStateChange
+  where
+  rnf InstanceEventWindowStateChange' {..} =
+    Prelude.rnf instanceEventWindowId
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowTimeRange.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowTimeRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowTimeRange.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowTimeRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowTimeRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.WeekDay
+import qualified Amazonka.Prelude as Prelude
+
+-- | The start day and time and the end day and time of the time range, in
+-- UTC.
+--
+-- /See:/ 'newInstanceEventWindowTimeRange' smart constructor.
+data InstanceEventWindowTimeRange = InstanceEventWindowTimeRange'
+  { -- | The hour when the time range ends.
+    endHour :: Prelude.Maybe Prelude.Natural,
+    -- | The day on which the time range ends.
+    endWeekDay :: Prelude.Maybe WeekDay,
+    -- | The hour when the time range begins.
+    startHour :: Prelude.Maybe Prelude.Natural,
+    -- | The day on which the time range begins.
+    startWeekDay :: Prelude.Maybe WeekDay
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindowTimeRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endHour', 'instanceEventWindowTimeRange_endHour' - The hour when the time range ends.
+--
+-- 'endWeekDay', 'instanceEventWindowTimeRange_endWeekDay' - The day on which the time range ends.
+--
+-- 'startHour', 'instanceEventWindowTimeRange_startHour' - The hour when the time range begins.
+--
+-- 'startWeekDay', 'instanceEventWindowTimeRange_startWeekDay' - The day on which the time range begins.
+newInstanceEventWindowTimeRange ::
+  InstanceEventWindowTimeRange
+newInstanceEventWindowTimeRange =
+  InstanceEventWindowTimeRange'
+    { endHour =
+        Prelude.Nothing,
+      endWeekDay = Prelude.Nothing,
+      startHour = Prelude.Nothing,
+      startWeekDay = Prelude.Nothing
+    }
+
+-- | The hour when the time range ends.
+instanceEventWindowTimeRange_endHour :: Lens.Lens' InstanceEventWindowTimeRange (Prelude.Maybe Prelude.Natural)
+instanceEventWindowTimeRange_endHour = Lens.lens (\InstanceEventWindowTimeRange' {endHour} -> endHour) (\s@InstanceEventWindowTimeRange' {} a -> s {endHour = a} :: InstanceEventWindowTimeRange)
+
+-- | The day on which the time range ends.
+instanceEventWindowTimeRange_endWeekDay :: Lens.Lens' InstanceEventWindowTimeRange (Prelude.Maybe WeekDay)
+instanceEventWindowTimeRange_endWeekDay = Lens.lens (\InstanceEventWindowTimeRange' {endWeekDay} -> endWeekDay) (\s@InstanceEventWindowTimeRange' {} a -> s {endWeekDay = a} :: InstanceEventWindowTimeRange)
+
+-- | The hour when the time range begins.
+instanceEventWindowTimeRange_startHour :: Lens.Lens' InstanceEventWindowTimeRange (Prelude.Maybe Prelude.Natural)
+instanceEventWindowTimeRange_startHour = Lens.lens (\InstanceEventWindowTimeRange' {startHour} -> startHour) (\s@InstanceEventWindowTimeRange' {} a -> s {startHour = a} :: InstanceEventWindowTimeRange)
+
+-- | The day on which the time range begins.
+instanceEventWindowTimeRange_startWeekDay :: Lens.Lens' InstanceEventWindowTimeRange (Prelude.Maybe WeekDay)
+instanceEventWindowTimeRange_startWeekDay = Lens.lens (\InstanceEventWindowTimeRange' {startWeekDay} -> startWeekDay) (\s@InstanceEventWindowTimeRange' {} a -> s {startWeekDay = a} :: InstanceEventWindowTimeRange)
+
+instance Data.FromXML InstanceEventWindowTimeRange where
+  parseXML x =
+    InstanceEventWindowTimeRange'
+      Prelude.<$> (x Data..@? "endHour")
+      Prelude.<*> (x Data..@? "endWeekDay")
+      Prelude.<*> (x Data..@? "startHour")
+      Prelude.<*> (x Data..@? "startWeekDay")
+
+instance
+  Prelude.Hashable
+    InstanceEventWindowTimeRange
+  where
+  hashWithSalt _salt InstanceEventWindowTimeRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` endHour
+      `Prelude.hashWithSalt` endWeekDay
+      `Prelude.hashWithSalt` startHour
+      `Prelude.hashWithSalt` startWeekDay
+
+instance Prelude.NFData InstanceEventWindowTimeRange where
+  rnf InstanceEventWindowTimeRange' {..} =
+    Prelude.rnf endHour
+      `Prelude.seq` Prelude.rnf endWeekDay
+      `Prelude.seq` Prelude.rnf startHour
+      `Prelude.seq` Prelude.rnf startWeekDay
diff --git a/gen/Amazonka/EC2/Types/InstanceEventWindowTimeRangeRequest.hs b/gen/Amazonka/EC2/Types/InstanceEventWindowTimeRangeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceEventWindowTimeRangeRequest.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceEventWindowTimeRangeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceEventWindowTimeRangeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.WeekDay
+import qualified Amazonka.Prelude as Prelude
+
+-- | The start day and time and the end day and time of the time range, in
+-- UTC.
+--
+-- /See:/ 'newInstanceEventWindowTimeRangeRequest' smart constructor.
+data InstanceEventWindowTimeRangeRequest = InstanceEventWindowTimeRangeRequest'
+  { -- | The hour when the time range ends.
+    endHour :: Prelude.Maybe Prelude.Natural,
+    -- | The day on which the time range ends.
+    endWeekDay :: Prelude.Maybe WeekDay,
+    -- | The hour when the time range begins.
+    startHour :: Prelude.Maybe Prelude.Natural,
+    -- | The day on which the time range begins.
+    startWeekDay :: Prelude.Maybe WeekDay
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceEventWindowTimeRangeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endHour', 'instanceEventWindowTimeRangeRequest_endHour' - The hour when the time range ends.
+--
+-- 'endWeekDay', 'instanceEventWindowTimeRangeRequest_endWeekDay' - The day on which the time range ends.
+--
+-- 'startHour', 'instanceEventWindowTimeRangeRequest_startHour' - The hour when the time range begins.
+--
+-- 'startWeekDay', 'instanceEventWindowTimeRangeRequest_startWeekDay' - The day on which the time range begins.
+newInstanceEventWindowTimeRangeRequest ::
+  InstanceEventWindowTimeRangeRequest
+newInstanceEventWindowTimeRangeRequest =
+  InstanceEventWindowTimeRangeRequest'
+    { endHour =
+        Prelude.Nothing,
+      endWeekDay = Prelude.Nothing,
+      startHour = Prelude.Nothing,
+      startWeekDay = Prelude.Nothing
+    }
+
+-- | The hour when the time range ends.
+instanceEventWindowTimeRangeRequest_endHour :: Lens.Lens' InstanceEventWindowTimeRangeRequest (Prelude.Maybe Prelude.Natural)
+instanceEventWindowTimeRangeRequest_endHour = Lens.lens (\InstanceEventWindowTimeRangeRequest' {endHour} -> endHour) (\s@InstanceEventWindowTimeRangeRequest' {} a -> s {endHour = a} :: InstanceEventWindowTimeRangeRequest)
+
+-- | The day on which the time range ends.
+instanceEventWindowTimeRangeRequest_endWeekDay :: Lens.Lens' InstanceEventWindowTimeRangeRequest (Prelude.Maybe WeekDay)
+instanceEventWindowTimeRangeRequest_endWeekDay = Lens.lens (\InstanceEventWindowTimeRangeRequest' {endWeekDay} -> endWeekDay) (\s@InstanceEventWindowTimeRangeRequest' {} a -> s {endWeekDay = a} :: InstanceEventWindowTimeRangeRequest)
+
+-- | The hour when the time range begins.
+instanceEventWindowTimeRangeRequest_startHour :: Lens.Lens' InstanceEventWindowTimeRangeRequest (Prelude.Maybe Prelude.Natural)
+instanceEventWindowTimeRangeRequest_startHour = Lens.lens (\InstanceEventWindowTimeRangeRequest' {startHour} -> startHour) (\s@InstanceEventWindowTimeRangeRequest' {} a -> s {startHour = a} :: InstanceEventWindowTimeRangeRequest)
+
+-- | The day on which the time range begins.
+instanceEventWindowTimeRangeRequest_startWeekDay :: Lens.Lens' InstanceEventWindowTimeRangeRequest (Prelude.Maybe WeekDay)
+instanceEventWindowTimeRangeRequest_startWeekDay = Lens.lens (\InstanceEventWindowTimeRangeRequest' {startWeekDay} -> startWeekDay) (\s@InstanceEventWindowTimeRangeRequest' {} a -> s {startWeekDay = a} :: InstanceEventWindowTimeRangeRequest)
+
+instance
+  Prelude.Hashable
+    InstanceEventWindowTimeRangeRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceEventWindowTimeRangeRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` endHour
+        `Prelude.hashWithSalt` endWeekDay
+        `Prelude.hashWithSalt` startHour
+        `Prelude.hashWithSalt` startWeekDay
+
+instance
+  Prelude.NFData
+    InstanceEventWindowTimeRangeRequest
+  where
+  rnf InstanceEventWindowTimeRangeRequest' {..} =
+    Prelude.rnf endHour
+      `Prelude.seq` Prelude.rnf endWeekDay
+      `Prelude.seq` Prelude.rnf startHour
+      `Prelude.seq` Prelude.rnf startWeekDay
+
+instance
+  Data.ToQuery
+    InstanceEventWindowTimeRangeRequest
+  where
+  toQuery InstanceEventWindowTimeRangeRequest' {..} =
+    Prelude.mconcat
+      [ "EndHour" Data.=: endHour,
+        "EndWeekDay" Data.=: endWeekDay,
+        "StartHour" Data.=: startHour,
+        "StartWeekDay" Data.=: startWeekDay
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceExportDetails.hs b/gen/Amazonka/EC2/Types/InstanceExportDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceExportDetails.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceExportDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceExportDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ExportEnvironment
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an instance to export.
+--
+-- /See:/ 'newInstanceExportDetails' smart constructor.
+data InstanceExportDetails = InstanceExportDetails'
+  { -- | The ID of the resource being exported.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The target virtualization environment.
+    targetEnvironment :: Prelude.Maybe ExportEnvironment
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceExportDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'instanceExportDetails_instanceId' - The ID of the resource being exported.
+--
+-- 'targetEnvironment', 'instanceExportDetails_targetEnvironment' - The target virtualization environment.
+newInstanceExportDetails ::
+  InstanceExportDetails
+newInstanceExportDetails =
+  InstanceExportDetails'
+    { instanceId =
+        Prelude.Nothing,
+      targetEnvironment = Prelude.Nothing
+    }
+
+-- | The ID of the resource being exported.
+instanceExportDetails_instanceId :: Lens.Lens' InstanceExportDetails (Prelude.Maybe Prelude.Text)
+instanceExportDetails_instanceId = Lens.lens (\InstanceExportDetails' {instanceId} -> instanceId) (\s@InstanceExportDetails' {} a -> s {instanceId = a} :: InstanceExportDetails)
+
+-- | The target virtualization environment.
+instanceExportDetails_targetEnvironment :: Lens.Lens' InstanceExportDetails (Prelude.Maybe ExportEnvironment)
+instanceExportDetails_targetEnvironment = Lens.lens (\InstanceExportDetails' {targetEnvironment} -> targetEnvironment) (\s@InstanceExportDetails' {} a -> s {targetEnvironment = a} :: InstanceExportDetails)
+
+instance Data.FromXML InstanceExportDetails where
+  parseXML x =
+    InstanceExportDetails'
+      Prelude.<$> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "targetEnvironment")
+
+instance Prelude.Hashable InstanceExportDetails where
+  hashWithSalt _salt InstanceExportDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` targetEnvironment
+
+instance Prelude.NFData InstanceExportDetails where
+  rnf InstanceExportDetails' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf targetEnvironment
diff --git a/gen/Amazonka/EC2/Types/InstanceFamilyCreditSpecification.hs b/gen/Amazonka/EC2/Types/InstanceFamilyCreditSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceFamilyCreditSpecification.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceFamilyCreditSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceFamilyCreditSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UnlimitedSupportedInstanceFamily
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the default credit option for CPU usage of a burstable
+-- performance instance family.
+--
+-- /See:/ 'newInstanceFamilyCreditSpecification' smart constructor.
+data InstanceFamilyCreditSpecification = InstanceFamilyCreditSpecification'
+  { -- | The default credit option for CPU usage of the instance family. Valid
+    -- values are @standard@ and @unlimited@.
+    cpuCredits :: Prelude.Maybe Prelude.Text,
+    -- | The instance family.
+    instanceFamily :: Prelude.Maybe UnlimitedSupportedInstanceFamily
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceFamilyCreditSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cpuCredits', 'instanceFamilyCreditSpecification_cpuCredits' - The default credit option for CPU usage of the instance family. Valid
+-- values are @standard@ and @unlimited@.
+--
+-- 'instanceFamily', 'instanceFamilyCreditSpecification_instanceFamily' - The instance family.
+newInstanceFamilyCreditSpecification ::
+  InstanceFamilyCreditSpecification
+newInstanceFamilyCreditSpecification =
+  InstanceFamilyCreditSpecification'
+    { cpuCredits =
+        Prelude.Nothing,
+      instanceFamily = Prelude.Nothing
+    }
+
+-- | The default credit option for CPU usage of the instance family. Valid
+-- values are @standard@ and @unlimited@.
+instanceFamilyCreditSpecification_cpuCredits :: Lens.Lens' InstanceFamilyCreditSpecification (Prelude.Maybe Prelude.Text)
+instanceFamilyCreditSpecification_cpuCredits = Lens.lens (\InstanceFamilyCreditSpecification' {cpuCredits} -> cpuCredits) (\s@InstanceFamilyCreditSpecification' {} a -> s {cpuCredits = a} :: InstanceFamilyCreditSpecification)
+
+-- | The instance family.
+instanceFamilyCreditSpecification_instanceFamily :: Lens.Lens' InstanceFamilyCreditSpecification (Prelude.Maybe UnlimitedSupportedInstanceFamily)
+instanceFamilyCreditSpecification_instanceFamily = Lens.lens (\InstanceFamilyCreditSpecification' {instanceFamily} -> instanceFamily) (\s@InstanceFamilyCreditSpecification' {} a -> s {instanceFamily = a} :: InstanceFamilyCreditSpecification)
+
+instance
+  Data.FromXML
+    InstanceFamilyCreditSpecification
+  where
+  parseXML x =
+    InstanceFamilyCreditSpecification'
+      Prelude.<$> (x Data..@? "cpuCredits")
+      Prelude.<*> (x Data..@? "instanceFamily")
+
+instance
+  Prelude.Hashable
+    InstanceFamilyCreditSpecification
+  where
+  hashWithSalt
+    _salt
+    InstanceFamilyCreditSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` cpuCredits
+        `Prelude.hashWithSalt` instanceFamily
+
+instance
+  Prelude.NFData
+    InstanceFamilyCreditSpecification
+  where
+  rnf InstanceFamilyCreditSpecification' {..} =
+    Prelude.rnf cpuCredits
+      `Prelude.seq` Prelude.rnf instanceFamily
diff --git a/gen/Amazonka/EC2/Types/InstanceGeneration.hs b/gen/Amazonka/EC2/Types/InstanceGeneration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceGeneration.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceGeneration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceGeneration
+  ( InstanceGeneration
+      ( ..,
+        InstanceGeneration_Current,
+        InstanceGeneration_Previous
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceGeneration = InstanceGeneration'
+  { fromInstanceGeneration ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceGeneration_Current :: InstanceGeneration
+pattern InstanceGeneration_Current = InstanceGeneration' "current"
+
+pattern InstanceGeneration_Previous :: InstanceGeneration
+pattern InstanceGeneration_Previous = InstanceGeneration' "previous"
+
+{-# COMPLETE
+  InstanceGeneration_Current,
+  InstanceGeneration_Previous,
+  InstanceGeneration'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceHealthStatus.hs b/gen/Amazonka/EC2/Types/InstanceHealthStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceHealthStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceHealthStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceHealthStatus
+  ( InstanceHealthStatus
+      ( ..,
+        InstanceHealthStatus_Healthy,
+        InstanceHealthStatus_Unhealthy
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceHealthStatus = InstanceHealthStatus'
+  { fromInstanceHealthStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceHealthStatus_Healthy :: InstanceHealthStatus
+pattern InstanceHealthStatus_Healthy = InstanceHealthStatus' "healthy"
+
+pattern InstanceHealthStatus_Unhealthy :: InstanceHealthStatus
+pattern InstanceHealthStatus_Unhealthy = InstanceHealthStatus' "unhealthy"
+
+{-# COMPLETE
+  InstanceHealthStatus_Healthy,
+  InstanceHealthStatus_Unhealthy,
+  InstanceHealthStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceInterruptionBehavior.hs b/gen/Amazonka/EC2/Types/InstanceInterruptionBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceInterruptionBehavior.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceInterruptionBehavior
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceInterruptionBehavior
+  ( InstanceInterruptionBehavior
+      ( ..,
+        InstanceInterruptionBehavior_Hibernate,
+        InstanceInterruptionBehavior_Stop,
+        InstanceInterruptionBehavior_Terminate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceInterruptionBehavior = InstanceInterruptionBehavior'
+  { fromInstanceInterruptionBehavior ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceInterruptionBehavior_Hibernate :: InstanceInterruptionBehavior
+pattern InstanceInterruptionBehavior_Hibernate = InstanceInterruptionBehavior' "hibernate"
+
+pattern InstanceInterruptionBehavior_Stop :: InstanceInterruptionBehavior
+pattern InstanceInterruptionBehavior_Stop = InstanceInterruptionBehavior' "stop"
+
+pattern InstanceInterruptionBehavior_Terminate :: InstanceInterruptionBehavior
+pattern InstanceInterruptionBehavior_Terminate = InstanceInterruptionBehavior' "terminate"
+
+{-# COMPLETE
+  InstanceInterruptionBehavior_Hibernate,
+  InstanceInterruptionBehavior_Stop,
+  InstanceInterruptionBehavior_Terminate,
+  InstanceInterruptionBehavior'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceIpv4Prefix.hs b/gen/Amazonka/EC2/Types/InstanceIpv4Prefix.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceIpv4Prefix.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceIpv4Prefix
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceIpv4Prefix where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an IPv4 prefix.
+--
+-- /See:/ 'newInstanceIpv4Prefix' smart constructor.
+data InstanceIpv4Prefix = InstanceIpv4Prefix'
+  { -- | One or more IPv4 prefixes assigned to the network interface.
+    ipv4Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceIpv4Prefix' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv4Prefix', 'instanceIpv4Prefix_ipv4Prefix' - One or more IPv4 prefixes assigned to the network interface.
+newInstanceIpv4Prefix ::
+  InstanceIpv4Prefix
+newInstanceIpv4Prefix =
+  InstanceIpv4Prefix' {ipv4Prefix = Prelude.Nothing}
+
+-- | One or more IPv4 prefixes assigned to the network interface.
+instanceIpv4Prefix_ipv4Prefix :: Lens.Lens' InstanceIpv4Prefix (Prelude.Maybe Prelude.Text)
+instanceIpv4Prefix_ipv4Prefix = Lens.lens (\InstanceIpv4Prefix' {ipv4Prefix} -> ipv4Prefix) (\s@InstanceIpv4Prefix' {} a -> s {ipv4Prefix = a} :: InstanceIpv4Prefix)
+
+instance Data.FromXML InstanceIpv4Prefix where
+  parseXML x =
+    InstanceIpv4Prefix'
+      Prelude.<$> (x Data..@? "ipv4Prefix")
+
+instance Prelude.Hashable InstanceIpv4Prefix where
+  hashWithSalt _salt InstanceIpv4Prefix' {..} =
+    _salt `Prelude.hashWithSalt` ipv4Prefix
+
+instance Prelude.NFData InstanceIpv4Prefix where
+  rnf InstanceIpv4Prefix' {..} = Prelude.rnf ipv4Prefix
diff --git a/gen/Amazonka/EC2/Types/InstanceIpv6Address.hs b/gen/Amazonka/EC2/Types/InstanceIpv6Address.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceIpv6Address.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceIpv6Address
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceIpv6Address where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 address.
+--
+-- /See:/ 'newInstanceIpv6Address' smart constructor.
+data InstanceIpv6Address = InstanceIpv6Address'
+  { -- | The IPv6 address.
+    ipv6Address :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceIpv6Address' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Address', 'instanceIpv6Address_ipv6Address' - The IPv6 address.
+newInstanceIpv6Address ::
+  InstanceIpv6Address
+newInstanceIpv6Address =
+  InstanceIpv6Address' {ipv6Address = Prelude.Nothing}
+
+-- | The IPv6 address.
+instanceIpv6Address_ipv6Address :: Lens.Lens' InstanceIpv6Address (Prelude.Maybe Prelude.Text)
+instanceIpv6Address_ipv6Address = Lens.lens (\InstanceIpv6Address' {ipv6Address} -> ipv6Address) (\s@InstanceIpv6Address' {} a -> s {ipv6Address = a} :: InstanceIpv6Address)
+
+instance Data.FromXML InstanceIpv6Address where
+  parseXML x =
+    InstanceIpv6Address'
+      Prelude.<$> (x Data..@? "ipv6Address")
+
+instance Prelude.Hashable InstanceIpv6Address where
+  hashWithSalt _salt InstanceIpv6Address' {..} =
+    _salt `Prelude.hashWithSalt` ipv6Address
+
+instance Prelude.NFData InstanceIpv6Address where
+  rnf InstanceIpv6Address' {..} =
+    Prelude.rnf ipv6Address
+
+instance Data.ToQuery InstanceIpv6Address where
+  toQuery InstanceIpv6Address' {..} =
+    Prelude.mconcat ["Ipv6Address" Data.=: ipv6Address]
diff --git a/gen/Amazonka/EC2/Types/InstanceIpv6AddressRequest.hs b/gen/Amazonka/EC2/Types/InstanceIpv6AddressRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceIpv6AddressRequest.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceIpv6AddressRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceIpv6AddressRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 address.
+--
+-- /See:/ 'newInstanceIpv6AddressRequest' smart constructor.
+data InstanceIpv6AddressRequest = InstanceIpv6AddressRequest'
+  { -- | The IPv6 address.
+    ipv6Address :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceIpv6AddressRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Address', 'instanceIpv6AddressRequest_ipv6Address' - The IPv6 address.
+newInstanceIpv6AddressRequest ::
+  InstanceIpv6AddressRequest
+newInstanceIpv6AddressRequest =
+  InstanceIpv6AddressRequest'
+    { ipv6Address =
+        Prelude.Nothing
+    }
+
+-- | The IPv6 address.
+instanceIpv6AddressRequest_ipv6Address :: Lens.Lens' InstanceIpv6AddressRequest (Prelude.Maybe Prelude.Text)
+instanceIpv6AddressRequest_ipv6Address = Lens.lens (\InstanceIpv6AddressRequest' {ipv6Address} -> ipv6Address) (\s@InstanceIpv6AddressRequest' {} a -> s {ipv6Address = a} :: InstanceIpv6AddressRequest)
+
+instance Prelude.Hashable InstanceIpv6AddressRequest where
+  hashWithSalt _salt InstanceIpv6AddressRequest' {..} =
+    _salt `Prelude.hashWithSalt` ipv6Address
+
+instance Prelude.NFData InstanceIpv6AddressRequest where
+  rnf InstanceIpv6AddressRequest' {..} =
+    Prelude.rnf ipv6Address
+
+instance Data.ToQuery InstanceIpv6AddressRequest where
+  toQuery InstanceIpv6AddressRequest' {..} =
+    Prelude.mconcat ["Ipv6Address" Data.=: ipv6Address]
diff --git a/gen/Amazonka/EC2/Types/InstanceIpv6Prefix.hs b/gen/Amazonka/EC2/Types/InstanceIpv6Prefix.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceIpv6Prefix.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceIpv6Prefix
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceIpv6Prefix where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an IPv6 prefix.
+--
+-- /See:/ 'newInstanceIpv6Prefix' smart constructor.
+data InstanceIpv6Prefix = InstanceIpv6Prefix'
+  { -- | One or more IPv6 prefixes assigned to the network interface.
+    ipv6Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceIpv6Prefix' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Prefix', 'instanceIpv6Prefix_ipv6Prefix' - One or more IPv6 prefixes assigned to the network interface.
+newInstanceIpv6Prefix ::
+  InstanceIpv6Prefix
+newInstanceIpv6Prefix =
+  InstanceIpv6Prefix' {ipv6Prefix = Prelude.Nothing}
+
+-- | One or more IPv6 prefixes assigned to the network interface.
+instanceIpv6Prefix_ipv6Prefix :: Lens.Lens' InstanceIpv6Prefix (Prelude.Maybe Prelude.Text)
+instanceIpv6Prefix_ipv6Prefix = Lens.lens (\InstanceIpv6Prefix' {ipv6Prefix} -> ipv6Prefix) (\s@InstanceIpv6Prefix' {} a -> s {ipv6Prefix = a} :: InstanceIpv6Prefix)
+
+instance Data.FromXML InstanceIpv6Prefix where
+  parseXML x =
+    InstanceIpv6Prefix'
+      Prelude.<$> (x Data..@? "ipv6Prefix")
+
+instance Prelude.Hashable InstanceIpv6Prefix where
+  hashWithSalt _salt InstanceIpv6Prefix' {..} =
+    _salt `Prelude.hashWithSalt` ipv6Prefix
+
+instance Prelude.NFData InstanceIpv6Prefix where
+  rnf InstanceIpv6Prefix' {..} = Prelude.rnf ipv6Prefix
diff --git a/gen/Amazonka/EC2/Types/InstanceLifecycle.hs b/gen/Amazonka/EC2/Types/InstanceLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceLifecycle.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceLifecycle
+  ( InstanceLifecycle
+      ( ..,
+        InstanceLifecycle_On_demand,
+        InstanceLifecycle_Spot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceLifecycle = InstanceLifecycle'
+  { fromInstanceLifecycle ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceLifecycle_On_demand :: InstanceLifecycle
+pattern InstanceLifecycle_On_demand = InstanceLifecycle' "on-demand"
+
+pattern InstanceLifecycle_Spot :: InstanceLifecycle
+pattern InstanceLifecycle_Spot = InstanceLifecycle' "spot"
+
+{-# COMPLETE
+  InstanceLifecycle_On_demand,
+  InstanceLifecycle_Spot,
+  InstanceLifecycle'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceLifecycleType.hs b/gen/Amazonka/EC2/Types/InstanceLifecycleType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceLifecycleType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceLifecycleType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceLifecycleType
+  ( InstanceLifecycleType
+      ( ..,
+        InstanceLifecycleType_Scheduled,
+        InstanceLifecycleType_Spot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceLifecycleType = InstanceLifecycleType'
+  { fromInstanceLifecycleType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceLifecycleType_Scheduled :: InstanceLifecycleType
+pattern InstanceLifecycleType_Scheduled = InstanceLifecycleType' "scheduled"
+
+pattern InstanceLifecycleType_Spot :: InstanceLifecycleType
+pattern InstanceLifecycleType_Spot = InstanceLifecycleType' "spot"
+
+{-# COMPLETE
+  InstanceLifecycleType_Scheduled,
+  InstanceLifecycleType_Spot,
+  InstanceLifecycleType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceMaintenanceOptions.hs b/gen/Amazonka/EC2/Types/InstanceMaintenanceOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMaintenanceOptions.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMaintenanceOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMaintenanceOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceAutoRecoveryState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The maintenance options for the instance.
+--
+-- /See:/ 'newInstanceMaintenanceOptions' smart constructor.
+data InstanceMaintenanceOptions = InstanceMaintenanceOptions'
+  { -- | Provides information on the current automatic recovery behavior of your
+    -- instance.
+    autoRecovery :: Prelude.Maybe InstanceAutoRecoveryState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMaintenanceOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecovery', 'instanceMaintenanceOptions_autoRecovery' - Provides information on the current automatic recovery behavior of your
+-- instance.
+newInstanceMaintenanceOptions ::
+  InstanceMaintenanceOptions
+newInstanceMaintenanceOptions =
+  InstanceMaintenanceOptions'
+    { autoRecovery =
+        Prelude.Nothing
+    }
+
+-- | Provides information on the current automatic recovery behavior of your
+-- instance.
+instanceMaintenanceOptions_autoRecovery :: Lens.Lens' InstanceMaintenanceOptions (Prelude.Maybe InstanceAutoRecoveryState)
+instanceMaintenanceOptions_autoRecovery = Lens.lens (\InstanceMaintenanceOptions' {autoRecovery} -> autoRecovery) (\s@InstanceMaintenanceOptions' {} a -> s {autoRecovery = a} :: InstanceMaintenanceOptions)
+
+instance Data.FromXML InstanceMaintenanceOptions where
+  parseXML x =
+    InstanceMaintenanceOptions'
+      Prelude.<$> (x Data..@? "autoRecovery")
+
+instance Prelude.Hashable InstanceMaintenanceOptions where
+  hashWithSalt _salt InstanceMaintenanceOptions' {..} =
+    _salt `Prelude.hashWithSalt` autoRecovery
+
+instance Prelude.NFData InstanceMaintenanceOptions where
+  rnf InstanceMaintenanceOptions' {..} =
+    Prelude.rnf autoRecovery
diff --git a/gen/Amazonka/EC2/Types/InstanceMaintenanceOptionsRequest.hs b/gen/Amazonka/EC2/Types/InstanceMaintenanceOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMaintenanceOptionsRequest.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMaintenanceOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMaintenanceOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceAutoRecoveryState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The maintenance options for the instance.
+--
+-- /See:/ 'newInstanceMaintenanceOptionsRequest' smart constructor.
+data InstanceMaintenanceOptionsRequest = InstanceMaintenanceOptionsRequest'
+  { -- | Disables the automatic recovery behavior of your instance or sets it to
+    -- default. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+    autoRecovery :: Prelude.Maybe InstanceAutoRecoveryState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMaintenanceOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecovery', 'instanceMaintenanceOptionsRequest_autoRecovery' - Disables the automatic recovery behavior of your instance or sets it to
+-- default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+newInstanceMaintenanceOptionsRequest ::
+  InstanceMaintenanceOptionsRequest
+newInstanceMaintenanceOptionsRequest =
+  InstanceMaintenanceOptionsRequest'
+    { autoRecovery =
+        Prelude.Nothing
+    }
+
+-- | Disables the automatic recovery behavior of your instance or sets it to
+-- default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+instanceMaintenanceOptionsRequest_autoRecovery :: Lens.Lens' InstanceMaintenanceOptionsRequest (Prelude.Maybe InstanceAutoRecoveryState)
+instanceMaintenanceOptionsRequest_autoRecovery = Lens.lens (\InstanceMaintenanceOptionsRequest' {autoRecovery} -> autoRecovery) (\s@InstanceMaintenanceOptionsRequest' {} a -> s {autoRecovery = a} :: InstanceMaintenanceOptionsRequest)
+
+instance
+  Prelude.Hashable
+    InstanceMaintenanceOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceMaintenanceOptionsRequest' {..} =
+      _salt `Prelude.hashWithSalt` autoRecovery
+
+instance
+  Prelude.NFData
+    InstanceMaintenanceOptionsRequest
+  where
+  rnf InstanceMaintenanceOptionsRequest' {..} =
+    Prelude.rnf autoRecovery
+
+instance
+  Data.ToQuery
+    InstanceMaintenanceOptionsRequest
+  where
+  toQuery InstanceMaintenanceOptionsRequest' {..} =
+    Prelude.mconcat
+      ["AutoRecovery" Data.=: autoRecovery]
diff --git a/gen/Amazonka/EC2/Types/InstanceMarketOptionsRequest.hs b/gen/Amazonka/EC2/Types/InstanceMarketOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMarketOptionsRequest.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMarketOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMarketOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MarketType
+import Amazonka.EC2.Types.SpotMarketOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the market (purchasing) option for the instances.
+--
+-- /See:/ 'newInstanceMarketOptionsRequest' smart constructor.
+data InstanceMarketOptionsRequest = InstanceMarketOptionsRequest'
+  { -- | The market type.
+    marketType :: Prelude.Maybe MarketType,
+    -- | The options for Spot Instances.
+    spotOptions :: Prelude.Maybe SpotMarketOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMarketOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'marketType', 'instanceMarketOptionsRequest_marketType' - The market type.
+--
+-- 'spotOptions', 'instanceMarketOptionsRequest_spotOptions' - The options for Spot Instances.
+newInstanceMarketOptionsRequest ::
+  InstanceMarketOptionsRequest
+newInstanceMarketOptionsRequest =
+  InstanceMarketOptionsRequest'
+    { marketType =
+        Prelude.Nothing,
+      spotOptions = Prelude.Nothing
+    }
+
+-- | The market type.
+instanceMarketOptionsRequest_marketType :: Lens.Lens' InstanceMarketOptionsRequest (Prelude.Maybe MarketType)
+instanceMarketOptionsRequest_marketType = Lens.lens (\InstanceMarketOptionsRequest' {marketType} -> marketType) (\s@InstanceMarketOptionsRequest' {} a -> s {marketType = a} :: InstanceMarketOptionsRequest)
+
+-- | The options for Spot Instances.
+instanceMarketOptionsRequest_spotOptions :: Lens.Lens' InstanceMarketOptionsRequest (Prelude.Maybe SpotMarketOptions)
+instanceMarketOptionsRequest_spotOptions = Lens.lens (\InstanceMarketOptionsRequest' {spotOptions} -> spotOptions) (\s@InstanceMarketOptionsRequest' {} a -> s {spotOptions = a} :: InstanceMarketOptionsRequest)
+
+instance
+  Prelude.Hashable
+    InstanceMarketOptionsRequest
+  where
+  hashWithSalt _salt InstanceMarketOptionsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` marketType
+      `Prelude.hashWithSalt` spotOptions
+
+instance Prelude.NFData InstanceMarketOptionsRequest where
+  rnf InstanceMarketOptionsRequest' {..} =
+    Prelude.rnf marketType
+      `Prelude.seq` Prelude.rnf spotOptions
+
+instance Data.ToQuery InstanceMarketOptionsRequest where
+  toQuery InstanceMarketOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "MarketType" Data.=: marketType,
+        "SpotOptions" Data.=: spotOptions
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceMatchCriteria.hs b/gen/Amazonka/EC2/Types/InstanceMatchCriteria.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMatchCriteria.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMatchCriteria
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMatchCriteria
+  ( InstanceMatchCriteria
+      ( ..,
+        InstanceMatchCriteria_Open,
+        InstanceMatchCriteria_Targeted
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceMatchCriteria = InstanceMatchCriteria'
+  { fromInstanceMatchCriteria ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceMatchCriteria_Open :: InstanceMatchCriteria
+pattern InstanceMatchCriteria_Open = InstanceMatchCriteria' "open"
+
+pattern InstanceMatchCriteria_Targeted :: InstanceMatchCriteria
+pattern InstanceMatchCriteria_Targeted = InstanceMatchCriteria' "targeted"
+
+{-# COMPLETE
+  InstanceMatchCriteria_Open,
+  InstanceMatchCriteria_Targeted,
+  InstanceMatchCriteria'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceMetadataEndpointState.hs b/gen/Amazonka/EC2/Types/InstanceMetadataEndpointState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMetadataEndpointState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMetadataEndpointState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMetadataEndpointState
+  ( InstanceMetadataEndpointState
+      ( ..,
+        InstanceMetadataEndpointState_Disabled,
+        InstanceMetadataEndpointState_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceMetadataEndpointState = InstanceMetadataEndpointState'
+  { fromInstanceMetadataEndpointState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceMetadataEndpointState_Disabled :: InstanceMetadataEndpointState
+pattern InstanceMetadataEndpointState_Disabled = InstanceMetadataEndpointState' "disabled"
+
+pattern InstanceMetadataEndpointState_Enabled :: InstanceMetadataEndpointState
+pattern InstanceMetadataEndpointState_Enabled = InstanceMetadataEndpointState' "enabled"
+
+{-# COMPLETE
+  InstanceMetadataEndpointState_Disabled,
+  InstanceMetadataEndpointState_Enabled,
+  InstanceMetadataEndpointState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceMetadataOptionsRequest.hs b/gen/Amazonka/EC2/Types/InstanceMetadataOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMetadataOptionsRequest.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMetadataOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMetadataOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HttpTokensState
+import Amazonka.EC2.Types.InstanceMetadataEndpointState
+import Amazonka.EC2.Types.InstanceMetadataProtocolState
+import Amazonka.EC2.Types.InstanceMetadataTagsState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The metadata options for the instance.
+--
+-- /See:/ 'newInstanceMetadataOptionsRequest' smart constructor.
+data InstanceMetadataOptionsRequest = InstanceMetadataOptionsRequest'
+  { -- | Enables or disables the HTTP metadata endpoint on your instances.
+    --
+    -- If you specify a value of @disabled@, you cannot access your instance
+    -- metadata.
+    --
+    -- Default: @enabled@
+    httpEndpoint :: Prelude.Maybe InstanceMetadataEndpointState,
+    -- | Enables or disables the IPv6 endpoint for the instance metadata service.
+    httpProtocolIpv6 :: Prelude.Maybe InstanceMetadataProtocolState,
+    -- | The desired HTTP PUT response hop limit for instance metadata requests.
+    -- The larger the number, the further instance metadata requests can
+    -- travel.
+    --
+    -- Default: 1
+    --
+    -- Possible values: Integers from 1 to 64
+    httpPutResponseHopLimit :: Prelude.Maybe Prelude.Int,
+    -- | The state of token usage for your instance metadata requests.
+    --
+    -- If the state is @optional@, you can choose to retrieve instance metadata
+    -- with or without a session token on your request. If you retrieve the IAM
+    -- role credentials without a token, the version 1.0 role credentials are
+    -- returned. If you retrieve the IAM role credentials using a valid session
+    -- token, the version 2.0 role credentials are returned.
+    --
+    -- If the state is @required@, you must send a session token with any
+    -- instance metadata retrieval requests. In this state, retrieving the IAM
+    -- role credentials always returns the version 2.0 credentials; the version
+    -- 1.0 credentials are not available.
+    --
+    -- Default: @optional@
+    httpTokens :: Prelude.Maybe HttpTokensState,
+    -- | Set to @enabled@ to allow access to instance tags from the instance
+    -- metadata. Set to @disabled@ to turn off access to instance tags from the
+    -- instance metadata. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+    --
+    -- Default: @disabled@
+    instanceMetadataTags :: Prelude.Maybe InstanceMetadataTagsState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMetadataOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpEndpoint', 'instanceMetadataOptionsRequest_httpEndpoint' - Enables or disables the HTTP metadata endpoint on your instances.
+--
+-- If you specify a value of @disabled@, you cannot access your instance
+-- metadata.
+--
+-- Default: @enabled@
+--
+-- 'httpProtocolIpv6', 'instanceMetadataOptionsRequest_httpProtocolIpv6' - Enables or disables the IPv6 endpoint for the instance metadata service.
+--
+-- 'httpPutResponseHopLimit', 'instanceMetadataOptionsRequest_httpPutResponseHopLimit' - The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: 1
+--
+-- Possible values: Integers from 1 to 64
+--
+-- 'httpTokens', 'instanceMetadataOptionsRequest_httpTokens' - The state of token usage for your instance metadata requests.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a session token on your request. If you retrieve the IAM
+-- role credentials without a token, the version 1.0 role credentials are
+-- returned. If you retrieve the IAM role credentials using a valid session
+-- token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a session token with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- Default: @optional@
+--
+-- 'instanceMetadataTags', 'instanceMetadataOptionsRequest_instanceMetadataTags' - Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+newInstanceMetadataOptionsRequest ::
+  InstanceMetadataOptionsRequest
+newInstanceMetadataOptionsRequest =
+  InstanceMetadataOptionsRequest'
+    { httpEndpoint =
+        Prelude.Nothing,
+      httpProtocolIpv6 = Prelude.Nothing,
+      httpPutResponseHopLimit = Prelude.Nothing,
+      httpTokens = Prelude.Nothing,
+      instanceMetadataTags = Prelude.Nothing
+    }
+
+-- | Enables or disables the HTTP metadata endpoint on your instances.
+--
+-- If you specify a value of @disabled@, you cannot access your instance
+-- metadata.
+--
+-- Default: @enabled@
+instanceMetadataOptionsRequest_httpEndpoint :: Lens.Lens' InstanceMetadataOptionsRequest (Prelude.Maybe InstanceMetadataEndpointState)
+instanceMetadataOptionsRequest_httpEndpoint = Lens.lens (\InstanceMetadataOptionsRequest' {httpEndpoint} -> httpEndpoint) (\s@InstanceMetadataOptionsRequest' {} a -> s {httpEndpoint = a} :: InstanceMetadataOptionsRequest)
+
+-- | Enables or disables the IPv6 endpoint for the instance metadata service.
+instanceMetadataOptionsRequest_httpProtocolIpv6 :: Lens.Lens' InstanceMetadataOptionsRequest (Prelude.Maybe InstanceMetadataProtocolState)
+instanceMetadataOptionsRequest_httpProtocolIpv6 = Lens.lens (\InstanceMetadataOptionsRequest' {httpProtocolIpv6} -> httpProtocolIpv6) (\s@InstanceMetadataOptionsRequest' {} a -> s {httpProtocolIpv6 = a} :: InstanceMetadataOptionsRequest)
+
+-- | The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: 1
+--
+-- Possible values: Integers from 1 to 64
+instanceMetadataOptionsRequest_httpPutResponseHopLimit :: Lens.Lens' InstanceMetadataOptionsRequest (Prelude.Maybe Prelude.Int)
+instanceMetadataOptionsRequest_httpPutResponseHopLimit = Lens.lens (\InstanceMetadataOptionsRequest' {httpPutResponseHopLimit} -> httpPutResponseHopLimit) (\s@InstanceMetadataOptionsRequest' {} a -> s {httpPutResponseHopLimit = a} :: InstanceMetadataOptionsRequest)
+
+-- | The state of token usage for your instance metadata requests.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a session token on your request. If you retrieve the IAM
+-- role credentials without a token, the version 1.0 role credentials are
+-- returned. If you retrieve the IAM role credentials using a valid session
+-- token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a session token with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- Default: @optional@
+instanceMetadataOptionsRequest_httpTokens :: Lens.Lens' InstanceMetadataOptionsRequest (Prelude.Maybe HttpTokensState)
+instanceMetadataOptionsRequest_httpTokens = Lens.lens (\InstanceMetadataOptionsRequest' {httpTokens} -> httpTokens) (\s@InstanceMetadataOptionsRequest' {} a -> s {httpTokens = a} :: InstanceMetadataOptionsRequest)
+
+-- | Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+instanceMetadataOptionsRequest_instanceMetadataTags :: Lens.Lens' InstanceMetadataOptionsRequest (Prelude.Maybe InstanceMetadataTagsState)
+instanceMetadataOptionsRequest_instanceMetadataTags = Lens.lens (\InstanceMetadataOptionsRequest' {instanceMetadataTags} -> instanceMetadataTags) (\s@InstanceMetadataOptionsRequest' {} a -> s {instanceMetadataTags = a} :: InstanceMetadataOptionsRequest)
+
+instance
+  Prelude.Hashable
+    InstanceMetadataOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceMetadataOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` httpEndpoint
+        `Prelude.hashWithSalt` httpProtocolIpv6
+        `Prelude.hashWithSalt` httpPutResponseHopLimit
+        `Prelude.hashWithSalt` httpTokens
+        `Prelude.hashWithSalt` instanceMetadataTags
+
+instance
+  Prelude.NFData
+    InstanceMetadataOptionsRequest
+  where
+  rnf InstanceMetadataOptionsRequest' {..} =
+    Prelude.rnf httpEndpoint
+      `Prelude.seq` Prelude.rnf httpProtocolIpv6
+      `Prelude.seq` Prelude.rnf httpPutResponseHopLimit
+      `Prelude.seq` Prelude.rnf httpTokens
+      `Prelude.seq` Prelude.rnf instanceMetadataTags
+
+instance Data.ToQuery InstanceMetadataOptionsRequest where
+  toQuery InstanceMetadataOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "HttpEndpoint" Data.=: httpEndpoint,
+        "HttpProtocolIpv6" Data.=: httpProtocolIpv6,
+        "HttpPutResponseHopLimit"
+          Data.=: httpPutResponseHopLimit,
+        "HttpTokens" Data.=: httpTokens,
+        "InstanceMetadataTags" Data.=: instanceMetadataTags
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceMetadataOptionsResponse.hs b/gen/Amazonka/EC2/Types/InstanceMetadataOptionsResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMetadataOptionsResponse.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMetadataOptionsResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMetadataOptionsResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HttpTokensState
+import Amazonka.EC2.Types.InstanceMetadataEndpointState
+import Amazonka.EC2.Types.InstanceMetadataOptionsState
+import Amazonka.EC2.Types.InstanceMetadataProtocolState
+import Amazonka.EC2.Types.InstanceMetadataTagsState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The metadata options for the instance.
+--
+-- /See:/ 'newInstanceMetadataOptionsResponse' smart constructor.
+data InstanceMetadataOptionsResponse = InstanceMetadataOptionsResponse'
+  { -- | Indicates whether the HTTP metadata endpoint on your instances is
+    -- enabled or disabled.
+    --
+    -- If the value is @disabled@, you cannot access your instance metadata.
+    httpEndpoint :: Prelude.Maybe InstanceMetadataEndpointState,
+    -- | Indicates whether the IPv6 endpoint for the instance metadata service is
+    -- enabled or disabled.
+    httpProtocolIpv6 :: Prelude.Maybe InstanceMetadataProtocolState,
+    -- | The desired HTTP PUT response hop limit for instance metadata requests.
+    -- The larger the number, the further instance metadata requests can
+    -- travel.
+    --
+    -- Default: 1
+    --
+    -- Possible values: Integers from 1 to 64
+    httpPutResponseHopLimit :: Prelude.Maybe Prelude.Int,
+    -- | The state of token usage for your instance metadata requests.
+    --
+    -- If the state is @optional@, you can choose to retrieve instance metadata
+    -- with or without a session token on your request. If you retrieve the IAM
+    -- role credentials without a token, the version 1.0 role credentials are
+    -- returned. If you retrieve the IAM role credentials using a valid session
+    -- token, the version 2.0 role credentials are returned.
+    --
+    -- If the state is @required@, you must send a session token with any
+    -- instance metadata retrieval requests. In this state, retrieving the IAM
+    -- role credentials always returns the version 2.0 credentials; the version
+    -- 1.0 credentials are not available.
+    --
+    -- Default: @optional@
+    httpTokens :: Prelude.Maybe HttpTokensState,
+    -- | Indicates whether access to instance tags from the instance metadata is
+    -- enabled or disabled. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+    instanceMetadataTags :: Prelude.Maybe InstanceMetadataTagsState,
+    -- | The state of the metadata option changes.
+    --
+    -- @pending@ - The metadata options are being updated and the instance is
+    -- not ready to process metadata traffic with the new selection.
+    --
+    -- @applied@ - The metadata options have been successfully applied on the
+    -- instance.
+    state :: Prelude.Maybe InstanceMetadataOptionsState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMetadataOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpEndpoint', 'instanceMetadataOptionsResponse_httpEndpoint' - Indicates whether the HTTP metadata endpoint on your instances is
+-- enabled or disabled.
+--
+-- If the value is @disabled@, you cannot access your instance metadata.
+--
+-- 'httpProtocolIpv6', 'instanceMetadataOptionsResponse_httpProtocolIpv6' - Indicates whether the IPv6 endpoint for the instance metadata service is
+-- enabled or disabled.
+--
+-- 'httpPutResponseHopLimit', 'instanceMetadataOptionsResponse_httpPutResponseHopLimit' - The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: 1
+--
+-- Possible values: Integers from 1 to 64
+--
+-- 'httpTokens', 'instanceMetadataOptionsResponse_httpTokens' - The state of token usage for your instance metadata requests.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a session token on your request. If you retrieve the IAM
+-- role credentials without a token, the version 1.0 role credentials are
+-- returned. If you retrieve the IAM role credentials using a valid session
+-- token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a session token with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- Default: @optional@
+--
+-- 'instanceMetadataTags', 'instanceMetadataOptionsResponse_instanceMetadataTags' - Indicates whether access to instance tags from the instance metadata is
+-- enabled or disabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- 'state', 'instanceMetadataOptionsResponse_state' - The state of the metadata option changes.
+--
+-- @pending@ - The metadata options are being updated and the instance is
+-- not ready to process metadata traffic with the new selection.
+--
+-- @applied@ - The metadata options have been successfully applied on the
+-- instance.
+newInstanceMetadataOptionsResponse ::
+  InstanceMetadataOptionsResponse
+newInstanceMetadataOptionsResponse =
+  InstanceMetadataOptionsResponse'
+    { httpEndpoint =
+        Prelude.Nothing,
+      httpProtocolIpv6 = Prelude.Nothing,
+      httpPutResponseHopLimit = Prelude.Nothing,
+      httpTokens = Prelude.Nothing,
+      instanceMetadataTags = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | Indicates whether the HTTP metadata endpoint on your instances is
+-- enabled or disabled.
+--
+-- If the value is @disabled@, you cannot access your instance metadata.
+instanceMetadataOptionsResponse_httpEndpoint :: Lens.Lens' InstanceMetadataOptionsResponse (Prelude.Maybe InstanceMetadataEndpointState)
+instanceMetadataOptionsResponse_httpEndpoint = Lens.lens (\InstanceMetadataOptionsResponse' {httpEndpoint} -> httpEndpoint) (\s@InstanceMetadataOptionsResponse' {} a -> s {httpEndpoint = a} :: InstanceMetadataOptionsResponse)
+
+-- | Indicates whether the IPv6 endpoint for the instance metadata service is
+-- enabled or disabled.
+instanceMetadataOptionsResponse_httpProtocolIpv6 :: Lens.Lens' InstanceMetadataOptionsResponse (Prelude.Maybe InstanceMetadataProtocolState)
+instanceMetadataOptionsResponse_httpProtocolIpv6 = Lens.lens (\InstanceMetadataOptionsResponse' {httpProtocolIpv6} -> httpProtocolIpv6) (\s@InstanceMetadataOptionsResponse' {} a -> s {httpProtocolIpv6 = a} :: InstanceMetadataOptionsResponse)
+
+-- | The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: 1
+--
+-- Possible values: Integers from 1 to 64
+instanceMetadataOptionsResponse_httpPutResponseHopLimit :: Lens.Lens' InstanceMetadataOptionsResponse (Prelude.Maybe Prelude.Int)
+instanceMetadataOptionsResponse_httpPutResponseHopLimit = Lens.lens (\InstanceMetadataOptionsResponse' {httpPutResponseHopLimit} -> httpPutResponseHopLimit) (\s@InstanceMetadataOptionsResponse' {} a -> s {httpPutResponseHopLimit = a} :: InstanceMetadataOptionsResponse)
+
+-- | The state of token usage for your instance metadata requests.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a session token on your request. If you retrieve the IAM
+-- role credentials without a token, the version 1.0 role credentials are
+-- returned. If you retrieve the IAM role credentials using a valid session
+-- token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a session token with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- Default: @optional@
+instanceMetadataOptionsResponse_httpTokens :: Lens.Lens' InstanceMetadataOptionsResponse (Prelude.Maybe HttpTokensState)
+instanceMetadataOptionsResponse_httpTokens = Lens.lens (\InstanceMetadataOptionsResponse' {httpTokens} -> httpTokens) (\s@InstanceMetadataOptionsResponse' {} a -> s {httpTokens = a} :: InstanceMetadataOptionsResponse)
+
+-- | Indicates whether access to instance tags from the instance metadata is
+-- enabled or disabled. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+instanceMetadataOptionsResponse_instanceMetadataTags :: Lens.Lens' InstanceMetadataOptionsResponse (Prelude.Maybe InstanceMetadataTagsState)
+instanceMetadataOptionsResponse_instanceMetadataTags = Lens.lens (\InstanceMetadataOptionsResponse' {instanceMetadataTags} -> instanceMetadataTags) (\s@InstanceMetadataOptionsResponse' {} a -> s {instanceMetadataTags = a} :: InstanceMetadataOptionsResponse)
+
+-- | The state of the metadata option changes.
+--
+-- @pending@ - The metadata options are being updated and the instance is
+-- not ready to process metadata traffic with the new selection.
+--
+-- @applied@ - The metadata options have been successfully applied on the
+-- instance.
+instanceMetadataOptionsResponse_state :: Lens.Lens' InstanceMetadataOptionsResponse (Prelude.Maybe InstanceMetadataOptionsState)
+instanceMetadataOptionsResponse_state = Lens.lens (\InstanceMetadataOptionsResponse' {state} -> state) (\s@InstanceMetadataOptionsResponse' {} a -> s {state = a} :: InstanceMetadataOptionsResponse)
+
+instance Data.FromXML InstanceMetadataOptionsResponse where
+  parseXML x =
+    InstanceMetadataOptionsResponse'
+      Prelude.<$> (x Data..@? "httpEndpoint")
+      Prelude.<*> (x Data..@? "httpProtocolIpv6")
+      Prelude.<*> (x Data..@? "httpPutResponseHopLimit")
+      Prelude.<*> (x Data..@? "httpTokens")
+      Prelude.<*> (x Data..@? "instanceMetadataTags")
+      Prelude.<*> (x Data..@? "state")
+
+instance
+  Prelude.Hashable
+    InstanceMetadataOptionsResponse
+  where
+  hashWithSalt
+    _salt
+    InstanceMetadataOptionsResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` httpEndpoint
+        `Prelude.hashWithSalt` httpProtocolIpv6
+        `Prelude.hashWithSalt` httpPutResponseHopLimit
+        `Prelude.hashWithSalt` httpTokens
+        `Prelude.hashWithSalt` instanceMetadataTags
+        `Prelude.hashWithSalt` state
+
+instance
+  Prelude.NFData
+    InstanceMetadataOptionsResponse
+  where
+  rnf InstanceMetadataOptionsResponse' {..} =
+    Prelude.rnf httpEndpoint
+      `Prelude.seq` Prelude.rnf httpProtocolIpv6
+      `Prelude.seq` Prelude.rnf httpPutResponseHopLimit
+      `Prelude.seq` Prelude.rnf httpTokens
+      `Prelude.seq` Prelude.rnf instanceMetadataTags
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/InstanceMetadataOptionsState.hs b/gen/Amazonka/EC2/Types/InstanceMetadataOptionsState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMetadataOptionsState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMetadataOptionsState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMetadataOptionsState
+  ( InstanceMetadataOptionsState
+      ( ..,
+        InstanceMetadataOptionsState_Applied,
+        InstanceMetadataOptionsState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceMetadataOptionsState = InstanceMetadataOptionsState'
+  { fromInstanceMetadataOptionsState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceMetadataOptionsState_Applied :: InstanceMetadataOptionsState
+pattern InstanceMetadataOptionsState_Applied = InstanceMetadataOptionsState' "applied"
+
+pattern InstanceMetadataOptionsState_Pending :: InstanceMetadataOptionsState
+pattern InstanceMetadataOptionsState_Pending = InstanceMetadataOptionsState' "pending"
+
+{-# COMPLETE
+  InstanceMetadataOptionsState_Applied,
+  InstanceMetadataOptionsState_Pending,
+  InstanceMetadataOptionsState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceMetadataProtocolState.hs b/gen/Amazonka/EC2/Types/InstanceMetadataProtocolState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMetadataProtocolState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMetadataProtocolState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMetadataProtocolState
+  ( InstanceMetadataProtocolState
+      ( ..,
+        InstanceMetadataProtocolState_Disabled,
+        InstanceMetadataProtocolState_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceMetadataProtocolState = InstanceMetadataProtocolState'
+  { fromInstanceMetadataProtocolState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceMetadataProtocolState_Disabled :: InstanceMetadataProtocolState
+pattern InstanceMetadataProtocolState_Disabled = InstanceMetadataProtocolState' "disabled"
+
+pattern InstanceMetadataProtocolState_Enabled :: InstanceMetadataProtocolState
+pattern InstanceMetadataProtocolState_Enabled = InstanceMetadataProtocolState' "enabled"
+
+{-# COMPLETE
+  InstanceMetadataProtocolState_Disabled,
+  InstanceMetadataProtocolState_Enabled,
+  InstanceMetadataProtocolState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceMetadataTagsState.hs b/gen/Amazonka/EC2/Types/InstanceMetadataTagsState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMetadataTagsState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMetadataTagsState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMetadataTagsState
+  ( InstanceMetadataTagsState
+      ( ..,
+        InstanceMetadataTagsState_Disabled,
+        InstanceMetadataTagsState_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceMetadataTagsState = InstanceMetadataTagsState'
+  { fromInstanceMetadataTagsState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceMetadataTagsState_Disabled :: InstanceMetadataTagsState
+pattern InstanceMetadataTagsState_Disabled = InstanceMetadataTagsState' "disabled"
+
+pattern InstanceMetadataTagsState_Enabled :: InstanceMetadataTagsState
+pattern InstanceMetadataTagsState_Enabled = InstanceMetadataTagsState' "enabled"
+
+{-# COMPLETE
+  InstanceMetadataTagsState_Disabled,
+  InstanceMetadataTagsState_Enabled,
+  InstanceMetadataTagsState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceMonitoring.hs b/gen/Amazonka/EC2/Types/InstanceMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceMonitoring.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceMonitoring
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceMonitoring where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Monitoring
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the monitoring of an instance.
+--
+-- /See:/ 'newInstanceMonitoring' smart constructor.
+data InstanceMonitoring = InstanceMonitoring'
+  { -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The monitoring for the instance.
+    monitoring :: Prelude.Maybe Monitoring
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceMonitoring' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'instanceMonitoring_instanceId' - The ID of the instance.
+--
+-- 'monitoring', 'instanceMonitoring_monitoring' - The monitoring for the instance.
+newInstanceMonitoring ::
+  InstanceMonitoring
+newInstanceMonitoring =
+  InstanceMonitoring'
+    { instanceId = Prelude.Nothing,
+      monitoring = Prelude.Nothing
+    }
+
+-- | The ID of the instance.
+instanceMonitoring_instanceId :: Lens.Lens' InstanceMonitoring (Prelude.Maybe Prelude.Text)
+instanceMonitoring_instanceId = Lens.lens (\InstanceMonitoring' {instanceId} -> instanceId) (\s@InstanceMonitoring' {} a -> s {instanceId = a} :: InstanceMonitoring)
+
+-- | The monitoring for the instance.
+instanceMonitoring_monitoring :: Lens.Lens' InstanceMonitoring (Prelude.Maybe Monitoring)
+instanceMonitoring_monitoring = Lens.lens (\InstanceMonitoring' {monitoring} -> monitoring) (\s@InstanceMonitoring' {} a -> s {monitoring = a} :: InstanceMonitoring)
+
+instance Data.FromXML InstanceMonitoring where
+  parseXML x =
+    InstanceMonitoring'
+      Prelude.<$> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "monitoring")
+
+instance Prelude.Hashable InstanceMonitoring where
+  hashWithSalt _salt InstanceMonitoring' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` monitoring
+
+instance Prelude.NFData InstanceMonitoring where
+  rnf InstanceMonitoring' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf monitoring
diff --git a/gen/Amazonka/EC2/Types/InstanceNetworkInterface.hs b/gen/Amazonka/EC2/Types/InstanceNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceNetworkInterface.hs
@@ -0,0 +1,314 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceNetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceNetworkInterface where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.InstanceIpv4Prefix
+import Amazonka.EC2.Types.InstanceIpv6Address
+import Amazonka.EC2.Types.InstanceIpv6Prefix
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAttachment
+import Amazonka.EC2.Types.InstancePrivateIpAddress
+import Amazonka.EC2.Types.NetworkInterfaceStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface.
+--
+-- /See:/ 'newInstanceNetworkInterface' smart constructor.
+data InstanceNetworkInterface = InstanceNetworkInterface'
+  { -- | The association information for an Elastic IPv4 associated with the
+    -- network interface.
+    association :: Prelude.Maybe InstanceNetworkInterfaceAssociation,
+    -- | The network interface attachment.
+    attachment :: Prelude.Maybe InstanceNetworkInterfaceAttachment,
+    -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The security groups.
+    groups :: Prelude.Maybe [GroupIdentifier],
+    -- | The type of network interface.
+    --
+    -- Valid values: @interface@ | @efa@ | @trunk@
+    interfaceType :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 delegated prefixes that are assigned to the network interface.
+    ipv4Prefixes :: Prelude.Maybe [InstanceIpv4Prefix],
+    -- | The IPv6 addresses associated with the network interface.
+    ipv6Addresses :: Prelude.Maybe [InstanceIpv6Address],
+    -- | The IPv6 delegated prefixes that are assigned to the network interface.
+    ipv6Prefixes :: Prelude.Maybe [InstanceIpv6Prefix],
+    -- | The MAC address.
+    macAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that created the network
+    -- interface.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The private DNS name.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 address of the network interface within the subnet.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 addresses associated with the network interface.
+    privateIpAddresses :: Prelude.Maybe [InstancePrivateIpAddress],
+    -- | Indicates whether source\/destination checking is enabled.
+    sourceDestCheck :: Prelude.Maybe Prelude.Bool,
+    -- | The status of the network interface.
+    status :: Prelude.Maybe NetworkInterfaceStatus,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceNetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'instanceNetworkInterface_association' - The association information for an Elastic IPv4 associated with the
+-- network interface.
+--
+-- 'attachment', 'instanceNetworkInterface_attachment' - The network interface attachment.
+--
+-- 'description', 'instanceNetworkInterface_description' - The description.
+--
+-- 'groups', 'instanceNetworkInterface_groups' - The security groups.
+--
+-- 'interfaceType', 'instanceNetworkInterface_interfaceType' - The type of network interface.
+--
+-- Valid values: @interface@ | @efa@ | @trunk@
+--
+-- 'ipv4Prefixes', 'instanceNetworkInterface_ipv4Prefixes' - The IPv4 delegated prefixes that are assigned to the network interface.
+--
+-- 'ipv6Addresses', 'instanceNetworkInterface_ipv6Addresses' - The IPv6 addresses associated with the network interface.
+--
+-- 'ipv6Prefixes', 'instanceNetworkInterface_ipv6Prefixes' - The IPv6 delegated prefixes that are assigned to the network interface.
+--
+-- 'macAddress', 'instanceNetworkInterface_macAddress' - The MAC address.
+--
+-- 'networkInterfaceId', 'instanceNetworkInterface_networkInterfaceId' - The ID of the network interface.
+--
+-- 'ownerId', 'instanceNetworkInterface_ownerId' - The ID of the Amazon Web Services account that created the network
+-- interface.
+--
+-- 'privateDnsName', 'instanceNetworkInterface_privateDnsName' - The private DNS name.
+--
+-- 'privateIpAddress', 'instanceNetworkInterface_privateIpAddress' - The IPv4 address of the network interface within the subnet.
+--
+-- 'privateIpAddresses', 'instanceNetworkInterface_privateIpAddresses' - The private IPv4 addresses associated with the network interface.
+--
+-- 'sourceDestCheck', 'instanceNetworkInterface_sourceDestCheck' - Indicates whether source\/destination checking is enabled.
+--
+-- 'status', 'instanceNetworkInterface_status' - The status of the network interface.
+--
+-- 'subnetId', 'instanceNetworkInterface_subnetId' - The ID of the subnet.
+--
+-- 'vpcId', 'instanceNetworkInterface_vpcId' - The ID of the VPC.
+newInstanceNetworkInterface ::
+  InstanceNetworkInterface
+newInstanceNetworkInterface =
+  InstanceNetworkInterface'
+    { association =
+        Prelude.Nothing,
+      attachment = Prelude.Nothing,
+      description = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      interfaceType = Prelude.Nothing,
+      ipv4Prefixes = Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      ipv6Prefixes = Prelude.Nothing,
+      macAddress = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      privateIpAddresses = Prelude.Nothing,
+      sourceDestCheck = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The association information for an Elastic IPv4 associated with the
+-- network interface.
+instanceNetworkInterface_association :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe InstanceNetworkInterfaceAssociation)
+instanceNetworkInterface_association = Lens.lens (\InstanceNetworkInterface' {association} -> association) (\s@InstanceNetworkInterface' {} a -> s {association = a} :: InstanceNetworkInterface)
+
+-- | The network interface attachment.
+instanceNetworkInterface_attachment :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe InstanceNetworkInterfaceAttachment)
+instanceNetworkInterface_attachment = Lens.lens (\InstanceNetworkInterface' {attachment} -> attachment) (\s@InstanceNetworkInterface' {} a -> s {attachment = a} :: InstanceNetworkInterface)
+
+-- | The description.
+instanceNetworkInterface_description :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_description = Lens.lens (\InstanceNetworkInterface' {description} -> description) (\s@InstanceNetworkInterface' {} a -> s {description = a} :: InstanceNetworkInterface)
+
+-- | The security groups.
+instanceNetworkInterface_groups :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe [GroupIdentifier])
+instanceNetworkInterface_groups = Lens.lens (\InstanceNetworkInterface' {groups} -> groups) (\s@InstanceNetworkInterface' {} a -> s {groups = a} :: InstanceNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of network interface.
+--
+-- Valid values: @interface@ | @efa@ | @trunk@
+instanceNetworkInterface_interfaceType :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_interfaceType = Lens.lens (\InstanceNetworkInterface' {interfaceType} -> interfaceType) (\s@InstanceNetworkInterface' {} a -> s {interfaceType = a} :: InstanceNetworkInterface)
+
+-- | The IPv4 delegated prefixes that are assigned to the network interface.
+instanceNetworkInterface_ipv4Prefixes :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe [InstanceIpv4Prefix])
+instanceNetworkInterface_ipv4Prefixes = Lens.lens (\InstanceNetworkInterface' {ipv4Prefixes} -> ipv4Prefixes) (\s@InstanceNetworkInterface' {} a -> s {ipv4Prefixes = a} :: InstanceNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv6 addresses associated with the network interface.
+instanceNetworkInterface_ipv6Addresses :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe [InstanceIpv6Address])
+instanceNetworkInterface_ipv6Addresses = Lens.lens (\InstanceNetworkInterface' {ipv6Addresses} -> ipv6Addresses) (\s@InstanceNetworkInterface' {} a -> s {ipv6Addresses = a} :: InstanceNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv6 delegated prefixes that are assigned to the network interface.
+instanceNetworkInterface_ipv6Prefixes :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe [InstanceIpv6Prefix])
+instanceNetworkInterface_ipv6Prefixes = Lens.lens (\InstanceNetworkInterface' {ipv6Prefixes} -> ipv6Prefixes) (\s@InstanceNetworkInterface' {} a -> s {ipv6Prefixes = a} :: InstanceNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The MAC address.
+instanceNetworkInterface_macAddress :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_macAddress = Lens.lens (\InstanceNetworkInterface' {macAddress} -> macAddress) (\s@InstanceNetworkInterface' {} a -> s {macAddress = a} :: InstanceNetworkInterface)
+
+-- | The ID of the network interface.
+instanceNetworkInterface_networkInterfaceId :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_networkInterfaceId = Lens.lens (\InstanceNetworkInterface' {networkInterfaceId} -> networkInterfaceId) (\s@InstanceNetworkInterface' {} a -> s {networkInterfaceId = a} :: InstanceNetworkInterface)
+
+-- | The ID of the Amazon Web Services account that created the network
+-- interface.
+instanceNetworkInterface_ownerId :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_ownerId = Lens.lens (\InstanceNetworkInterface' {ownerId} -> ownerId) (\s@InstanceNetworkInterface' {} a -> s {ownerId = a} :: InstanceNetworkInterface)
+
+-- | The private DNS name.
+instanceNetworkInterface_privateDnsName :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_privateDnsName = Lens.lens (\InstanceNetworkInterface' {privateDnsName} -> privateDnsName) (\s@InstanceNetworkInterface' {} a -> s {privateDnsName = a} :: InstanceNetworkInterface)
+
+-- | The IPv4 address of the network interface within the subnet.
+instanceNetworkInterface_privateIpAddress :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_privateIpAddress = Lens.lens (\InstanceNetworkInterface' {privateIpAddress} -> privateIpAddress) (\s@InstanceNetworkInterface' {} a -> s {privateIpAddress = a} :: InstanceNetworkInterface)
+
+-- | The private IPv4 addresses associated with the network interface.
+instanceNetworkInterface_privateIpAddresses :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe [InstancePrivateIpAddress])
+instanceNetworkInterface_privateIpAddresses = Lens.lens (\InstanceNetworkInterface' {privateIpAddresses} -> privateIpAddresses) (\s@InstanceNetworkInterface' {} a -> s {privateIpAddresses = a} :: InstanceNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether source\/destination checking is enabled.
+instanceNetworkInterface_sourceDestCheck :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Bool)
+instanceNetworkInterface_sourceDestCheck = Lens.lens (\InstanceNetworkInterface' {sourceDestCheck} -> sourceDestCheck) (\s@InstanceNetworkInterface' {} a -> s {sourceDestCheck = a} :: InstanceNetworkInterface)
+
+-- | The status of the network interface.
+instanceNetworkInterface_status :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe NetworkInterfaceStatus)
+instanceNetworkInterface_status = Lens.lens (\InstanceNetworkInterface' {status} -> status) (\s@InstanceNetworkInterface' {} a -> s {status = a} :: InstanceNetworkInterface)
+
+-- | The ID of the subnet.
+instanceNetworkInterface_subnetId :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_subnetId = Lens.lens (\InstanceNetworkInterface' {subnetId} -> subnetId) (\s@InstanceNetworkInterface' {} a -> s {subnetId = a} :: InstanceNetworkInterface)
+
+-- | The ID of the VPC.
+instanceNetworkInterface_vpcId :: Lens.Lens' InstanceNetworkInterface (Prelude.Maybe Prelude.Text)
+instanceNetworkInterface_vpcId = Lens.lens (\InstanceNetworkInterface' {vpcId} -> vpcId) (\s@InstanceNetworkInterface' {} a -> s {vpcId = a} :: InstanceNetworkInterface)
+
+instance Data.FromXML InstanceNetworkInterface where
+  parseXML x =
+    InstanceNetworkInterface'
+      Prelude.<$> (x Data..@? "association")
+      Prelude.<*> (x Data..@? "attachment")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "interfaceType")
+      Prelude.<*> ( x
+                      Data..@? "ipv4PrefixSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ipv6AddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ipv6PrefixSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "macAddress")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "privateIpAddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "sourceDestCheck")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable InstanceNetworkInterface where
+  hashWithSalt _salt InstanceNetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` association
+      `Prelude.hashWithSalt` attachment
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` interfaceType
+      `Prelude.hashWithSalt` ipv4Prefixes
+      `Prelude.hashWithSalt` ipv6Addresses
+      `Prelude.hashWithSalt` ipv6Prefixes
+      `Prelude.hashWithSalt` macAddress
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` privateDnsName
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` privateIpAddresses
+      `Prelude.hashWithSalt` sourceDestCheck
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData InstanceNetworkInterface where
+  rnf InstanceNetworkInterface' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf attachment
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf interfaceType
+      `Prelude.seq` Prelude.rnf ipv4Prefixes
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf ipv6Prefixes
+      `Prelude.seq` Prelude.rnf macAddress
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf privateIpAddresses
+      `Prelude.seq` Prelude.rnf sourceDestCheck
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceAssociation.hs b/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceAssociation.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes association information for an Elastic IP address (IPv4).
+--
+-- /See:/ 'newInstanceNetworkInterfaceAssociation' smart constructor.
+data InstanceNetworkInterfaceAssociation = InstanceNetworkInterfaceAssociation'
+  { -- | The carrier IP address associated with the network interface.
+    carrierIp :: Prelude.Maybe Prelude.Text,
+    -- | The customer-owned IP address associated with the network interface.
+    customerOwnedIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the owner of the Elastic IP address.
+    ipOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The public DNS name.
+    publicDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The public IP address or Elastic IP address bound to the network
+    -- interface.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceNetworkInterfaceAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierIp', 'instanceNetworkInterfaceAssociation_carrierIp' - The carrier IP address associated with the network interface.
+--
+-- 'customerOwnedIp', 'instanceNetworkInterfaceAssociation_customerOwnedIp' - The customer-owned IP address associated with the network interface.
+--
+-- 'ipOwnerId', 'instanceNetworkInterfaceAssociation_ipOwnerId' - The ID of the owner of the Elastic IP address.
+--
+-- 'publicDnsName', 'instanceNetworkInterfaceAssociation_publicDnsName' - The public DNS name.
+--
+-- 'publicIp', 'instanceNetworkInterfaceAssociation_publicIp' - The public IP address or Elastic IP address bound to the network
+-- interface.
+newInstanceNetworkInterfaceAssociation ::
+  InstanceNetworkInterfaceAssociation
+newInstanceNetworkInterfaceAssociation =
+  InstanceNetworkInterfaceAssociation'
+    { carrierIp =
+        Prelude.Nothing,
+      customerOwnedIp = Prelude.Nothing,
+      ipOwnerId = Prelude.Nothing,
+      publicDnsName = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | The carrier IP address associated with the network interface.
+instanceNetworkInterfaceAssociation_carrierIp :: Lens.Lens' InstanceNetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceAssociation_carrierIp = Lens.lens (\InstanceNetworkInterfaceAssociation' {carrierIp} -> carrierIp) (\s@InstanceNetworkInterfaceAssociation' {} a -> s {carrierIp = a} :: InstanceNetworkInterfaceAssociation)
+
+-- | The customer-owned IP address associated with the network interface.
+instanceNetworkInterfaceAssociation_customerOwnedIp :: Lens.Lens' InstanceNetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceAssociation_customerOwnedIp = Lens.lens (\InstanceNetworkInterfaceAssociation' {customerOwnedIp} -> customerOwnedIp) (\s@InstanceNetworkInterfaceAssociation' {} a -> s {customerOwnedIp = a} :: InstanceNetworkInterfaceAssociation)
+
+-- | The ID of the owner of the Elastic IP address.
+instanceNetworkInterfaceAssociation_ipOwnerId :: Lens.Lens' InstanceNetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceAssociation_ipOwnerId = Lens.lens (\InstanceNetworkInterfaceAssociation' {ipOwnerId} -> ipOwnerId) (\s@InstanceNetworkInterfaceAssociation' {} a -> s {ipOwnerId = a} :: InstanceNetworkInterfaceAssociation)
+
+-- | The public DNS name.
+instanceNetworkInterfaceAssociation_publicDnsName :: Lens.Lens' InstanceNetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceAssociation_publicDnsName = Lens.lens (\InstanceNetworkInterfaceAssociation' {publicDnsName} -> publicDnsName) (\s@InstanceNetworkInterfaceAssociation' {} a -> s {publicDnsName = a} :: InstanceNetworkInterfaceAssociation)
+
+-- | The public IP address or Elastic IP address bound to the network
+-- interface.
+instanceNetworkInterfaceAssociation_publicIp :: Lens.Lens' InstanceNetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceAssociation_publicIp = Lens.lens (\InstanceNetworkInterfaceAssociation' {publicIp} -> publicIp) (\s@InstanceNetworkInterfaceAssociation' {} a -> s {publicIp = a} :: InstanceNetworkInterfaceAssociation)
+
+instance
+  Data.FromXML
+    InstanceNetworkInterfaceAssociation
+  where
+  parseXML x =
+    InstanceNetworkInterfaceAssociation'
+      Prelude.<$> (x Data..@? "carrierIp")
+      Prelude.<*> (x Data..@? "customerOwnedIp")
+      Prelude.<*> (x Data..@? "ipOwnerId")
+      Prelude.<*> (x Data..@? "publicDnsName")
+      Prelude.<*> (x Data..@? "publicIp")
+
+instance
+  Prelude.Hashable
+    InstanceNetworkInterfaceAssociation
+  where
+  hashWithSalt
+    _salt
+    InstanceNetworkInterfaceAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` carrierIp
+        `Prelude.hashWithSalt` customerOwnedIp
+        `Prelude.hashWithSalt` ipOwnerId
+        `Prelude.hashWithSalt` publicDnsName
+        `Prelude.hashWithSalt` publicIp
+
+instance
+  Prelude.NFData
+    InstanceNetworkInterfaceAssociation
+  where
+  rnf InstanceNetworkInterfaceAssociation' {..} =
+    Prelude.rnf carrierIp
+      `Prelude.seq` Prelude.rnf customerOwnedIp
+      `Prelude.seq` Prelude.rnf ipOwnerId
+      `Prelude.seq` Prelude.rnf publicDnsName
+      `Prelude.seq` Prelude.rnf publicIp
diff --git a/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceAttachment.hs b/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceAttachment.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceNetworkInterfaceAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceNetworkInterfaceAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttachmentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface attachment.
+--
+-- /See:/ 'newInstanceNetworkInterfaceAttachment' smart constructor.
+data InstanceNetworkInterfaceAttachment = InstanceNetworkInterfaceAttachment'
+  { -- | The time stamp when the attachment initiated.
+    attachTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the network interface attachment.
+    attachmentId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the network interface is deleted when the instance is
+    -- terminated.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The index of the device on the instance for the network interface
+    -- attachment.
+    deviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | The index of the network card.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The attachment state.
+    status :: Prelude.Maybe AttachmentStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceNetworkInterfaceAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachTime', 'instanceNetworkInterfaceAttachment_attachTime' - The time stamp when the attachment initiated.
+--
+-- 'attachmentId', 'instanceNetworkInterfaceAttachment_attachmentId' - The ID of the network interface attachment.
+--
+-- 'deleteOnTermination', 'instanceNetworkInterfaceAttachment_deleteOnTermination' - Indicates whether the network interface is deleted when the instance is
+-- terminated.
+--
+-- 'deviceIndex', 'instanceNetworkInterfaceAttachment_deviceIndex' - The index of the device on the instance for the network interface
+-- attachment.
+--
+-- 'networkCardIndex', 'instanceNetworkInterfaceAttachment_networkCardIndex' - The index of the network card.
+--
+-- 'status', 'instanceNetworkInterfaceAttachment_status' - The attachment state.
+newInstanceNetworkInterfaceAttachment ::
+  InstanceNetworkInterfaceAttachment
+newInstanceNetworkInterfaceAttachment =
+  InstanceNetworkInterfaceAttachment'
+    { attachTime =
+        Prelude.Nothing,
+      attachmentId = Prelude.Nothing,
+      deleteOnTermination = Prelude.Nothing,
+      deviceIndex = Prelude.Nothing,
+      networkCardIndex = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The time stamp when the attachment initiated.
+instanceNetworkInterfaceAttachment_attachTime :: Lens.Lens' InstanceNetworkInterfaceAttachment (Prelude.Maybe Prelude.UTCTime)
+instanceNetworkInterfaceAttachment_attachTime = Lens.lens (\InstanceNetworkInterfaceAttachment' {attachTime} -> attachTime) (\s@InstanceNetworkInterfaceAttachment' {} a -> s {attachTime = a} :: InstanceNetworkInterfaceAttachment) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the network interface attachment.
+instanceNetworkInterfaceAttachment_attachmentId :: Lens.Lens' InstanceNetworkInterfaceAttachment (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceAttachment_attachmentId = Lens.lens (\InstanceNetworkInterfaceAttachment' {attachmentId} -> attachmentId) (\s@InstanceNetworkInterfaceAttachment' {} a -> s {attachmentId = a} :: InstanceNetworkInterfaceAttachment)
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+instanceNetworkInterfaceAttachment_deleteOnTermination :: Lens.Lens' InstanceNetworkInterfaceAttachment (Prelude.Maybe Prelude.Bool)
+instanceNetworkInterfaceAttachment_deleteOnTermination = Lens.lens (\InstanceNetworkInterfaceAttachment' {deleteOnTermination} -> deleteOnTermination) (\s@InstanceNetworkInterfaceAttachment' {} a -> s {deleteOnTermination = a} :: InstanceNetworkInterfaceAttachment)
+
+-- | The index of the device on the instance for the network interface
+-- attachment.
+instanceNetworkInterfaceAttachment_deviceIndex :: Lens.Lens' InstanceNetworkInterfaceAttachment (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceAttachment_deviceIndex = Lens.lens (\InstanceNetworkInterfaceAttachment' {deviceIndex} -> deviceIndex) (\s@InstanceNetworkInterfaceAttachment' {} a -> s {deviceIndex = a} :: InstanceNetworkInterfaceAttachment)
+
+-- | The index of the network card.
+instanceNetworkInterfaceAttachment_networkCardIndex :: Lens.Lens' InstanceNetworkInterfaceAttachment (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceAttachment_networkCardIndex = Lens.lens (\InstanceNetworkInterfaceAttachment' {networkCardIndex} -> networkCardIndex) (\s@InstanceNetworkInterfaceAttachment' {} a -> s {networkCardIndex = a} :: InstanceNetworkInterfaceAttachment)
+
+-- | The attachment state.
+instanceNetworkInterfaceAttachment_status :: Lens.Lens' InstanceNetworkInterfaceAttachment (Prelude.Maybe AttachmentStatus)
+instanceNetworkInterfaceAttachment_status = Lens.lens (\InstanceNetworkInterfaceAttachment' {status} -> status) (\s@InstanceNetworkInterfaceAttachment' {} a -> s {status = a} :: InstanceNetworkInterfaceAttachment)
+
+instance
+  Data.FromXML
+    InstanceNetworkInterfaceAttachment
+  where
+  parseXML x =
+    InstanceNetworkInterfaceAttachment'
+      Prelude.<$> (x Data..@? "attachTime")
+      Prelude.<*> (x Data..@? "attachmentId")
+      Prelude.<*> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "deviceIndex")
+      Prelude.<*> (x Data..@? "networkCardIndex")
+      Prelude.<*> (x Data..@? "status")
+
+instance
+  Prelude.Hashable
+    InstanceNetworkInterfaceAttachment
+  where
+  hashWithSalt
+    _salt
+    InstanceNetworkInterfaceAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` attachTime
+        `Prelude.hashWithSalt` attachmentId
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` deviceIndex
+        `Prelude.hashWithSalt` networkCardIndex
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    InstanceNetworkInterfaceAttachment
+  where
+  rnf InstanceNetworkInterfaceAttachment' {..} =
+    Prelude.rnf attachTime
+      `Prelude.seq` Prelude.rnf attachmentId
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf deviceIndex
+      `Prelude.seq` Prelude.rnf networkCardIndex
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceSpecification.hs b/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceNetworkInterfaceSpecification.hs
@@ -0,0 +1,553 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceIpv6Address
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest
+import Amazonka.EC2.Types.PrivateIpAddressSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface.
+--
+-- /See:/ 'newInstanceNetworkInterfaceSpecification' smart constructor.
+data InstanceNetworkInterfaceSpecification = InstanceNetworkInterfaceSpecification'
+  { -- | Indicates whether to assign a carrier IP address to the network
+    -- interface.
+    --
+    -- You can only assign a carrier IP address to a network interface that is
+    -- in a subnet in a Wavelength Zone. For more information about carrier IP
+    -- addresses, see
+    -- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP address>
+    -- in the /Amazon Web Services Wavelength Developer Guide/.
+    associateCarrierIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to assign a public IPv4 address to an instance you
+    -- launch in a VPC. The public IP address can only be assigned to a network
+    -- interface for eth0, and can only be assigned to a new network interface,
+    -- not an existing one. You cannot specify more than one network interface
+    -- in the request. If launching into a default subnet, the default value is
+    -- @true@.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | If set to @true@, the interface is deleted when the instance is
+    -- terminated. You can specify @true@ only if creating a new network
+    -- interface when launching an instance.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The description of the network interface. Applies only if creating a
+    -- network interface when launching an instance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The position of the network interface in the attachment order. A primary
+    -- network interface has a device index of 0.
+    --
+    -- If you specify a network interface when launching an instance, you must
+    -- specify the device index.
+    deviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | The IDs of the security groups for the network interface. Applies only
+    -- if creating a network interface when launching an instance.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | The type of network interface.
+    --
+    -- Valid values: @interface@ | @efa@
+    interfaceType :: Prelude.Maybe Prelude.Text,
+    -- | The number of IPv4 delegated prefixes to be automatically assigned to
+    -- the network interface. You cannot use this option if you use the
+    -- @Ipv4Prefix@ option.
+    ipv4PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv4 delegated prefixes to be assigned to the network interface. You
+    -- cannot use this option if you use the @Ipv4PrefixCount@ option.
+    ipv4Prefixes :: Prelude.Maybe [Ipv4PrefixSpecificationRequest],
+    -- | A number of IPv6 addresses to assign to the network interface. Amazon
+    -- EC2 chooses the IPv6 addresses from the range of the subnet. You cannot
+    -- specify this option and the option to assign specific IPv6 addresses in
+    -- the same request. You can specify this option if you\'ve specified a
+    -- minimum number of instances to launch.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 addresses to assign to the network interface. You cannot
+    -- specify this option and the option to assign a number of IPv6 addresses
+    -- in the same request. You cannot specify this option if you\'ve specified
+    -- a minimum number of instances to launch.
+    ipv6Addresses :: Prelude.Maybe [InstanceIpv6Address],
+    -- | The number of IPv6 delegated prefixes to be automatically assigned to
+    -- the network interface. You cannot use this option if you use the
+    -- @Ipv6Prefix@ option.
+    ipv6PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 delegated prefixes to be assigned to the network interface. You
+    -- cannot use this option if you use the @Ipv6PrefixCount@ option.
+    ipv6Prefixes :: Prelude.Maybe [Ipv6PrefixSpecificationRequest],
+    -- | The index of the network card. Some instance types support multiple
+    -- network cards. The primary network interface must be assigned to network
+    -- card index 0. The default is network card index 0.
+    --
+    -- If you are using
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>
+    -- to create Spot Instances, omit this parameter because you can’t specify
+    -- the network card index when using this API. To specify the network card
+    -- index, use
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the network interface.
+    --
+    -- If you are creating a Spot Fleet, omit this parameter because you can’t
+    -- specify a network interface ID in a launch specification.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 address of the network interface. Applies only if
+    -- creating a network interface when launching an instance. You cannot
+    -- specify this option if you\'re launching more than one instance in a
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+    -- request.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 addresses to assign to the network interface. Only one
+    -- private IPv4 address can be designated as primary. You cannot specify
+    -- this option if you\'re launching more than one instance in a
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+    -- request.
+    privateIpAddresses :: Prelude.Maybe [PrivateIpAddressSpecification],
+    -- | The number of secondary private IPv4 addresses. You can\'t specify this
+    -- option and specify more than one private IP address using the private IP
+    -- addresses option. You cannot specify this option if you\'re launching
+    -- more than one instance in a
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+    -- request.
+    secondaryPrivateIpAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the subnet associated with the network interface. Applies only
+    -- if creating a network interface when launching an instance.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceNetworkInterfaceSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associateCarrierIpAddress', 'instanceNetworkInterfaceSpecification_associateCarrierIpAddress' - Indicates whether to assign a carrier IP address to the network
+-- interface.
+--
+-- You can only assign a carrier IP address to a network interface that is
+-- in a subnet in a Wavelength Zone. For more information about carrier IP
+-- addresses, see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP address>
+-- in the /Amazon Web Services Wavelength Developer Guide/.
+--
+-- 'associatePublicIpAddress', 'instanceNetworkInterfaceSpecification_associatePublicIpAddress' - Indicates whether to assign a public IPv4 address to an instance you
+-- launch in a VPC. The public IP address can only be assigned to a network
+-- interface for eth0, and can only be assigned to a new network interface,
+-- not an existing one. You cannot specify more than one network interface
+-- in the request. If launching into a default subnet, the default value is
+-- @true@.
+--
+-- 'deleteOnTermination', 'instanceNetworkInterfaceSpecification_deleteOnTermination' - If set to @true@, the interface is deleted when the instance is
+-- terminated. You can specify @true@ only if creating a new network
+-- interface when launching an instance.
+--
+-- 'description', 'instanceNetworkInterfaceSpecification_description' - The description of the network interface. Applies only if creating a
+-- network interface when launching an instance.
+--
+-- 'deviceIndex', 'instanceNetworkInterfaceSpecification_deviceIndex' - The position of the network interface in the attachment order. A primary
+-- network interface has a device index of 0.
+--
+-- If you specify a network interface when launching an instance, you must
+-- specify the device index.
+--
+-- 'groups', 'instanceNetworkInterfaceSpecification_groups' - The IDs of the security groups for the network interface. Applies only
+-- if creating a network interface when launching an instance.
+--
+-- 'interfaceType', 'instanceNetworkInterfaceSpecification_interfaceType' - The type of network interface.
+--
+-- Valid values: @interface@ | @efa@
+--
+-- 'ipv4PrefixCount', 'instanceNetworkInterfaceSpecification_ipv4PrefixCount' - The number of IPv4 delegated prefixes to be automatically assigned to
+-- the network interface. You cannot use this option if you use the
+-- @Ipv4Prefix@ option.
+--
+-- 'ipv4Prefixes', 'instanceNetworkInterfaceSpecification_ipv4Prefixes' - The IPv4 delegated prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv4PrefixCount@ option.
+--
+-- 'ipv6AddressCount', 'instanceNetworkInterfaceSpecification_ipv6AddressCount' - A number of IPv6 addresses to assign to the network interface. Amazon
+-- EC2 chooses the IPv6 addresses from the range of the subnet. You cannot
+-- specify this option and the option to assign specific IPv6 addresses in
+-- the same request. You can specify this option if you\'ve specified a
+-- minimum number of instances to launch.
+--
+-- 'ipv6Addresses', 'instanceNetworkInterfaceSpecification_ipv6Addresses' - The IPv6 addresses to assign to the network interface. You cannot
+-- specify this option and the option to assign a number of IPv6 addresses
+-- in the same request. You cannot specify this option if you\'ve specified
+-- a minimum number of instances to launch.
+--
+-- 'ipv6PrefixCount', 'instanceNetworkInterfaceSpecification_ipv6PrefixCount' - The number of IPv6 delegated prefixes to be automatically assigned to
+-- the network interface. You cannot use this option if you use the
+-- @Ipv6Prefix@ option.
+--
+-- 'ipv6Prefixes', 'instanceNetworkInterfaceSpecification_ipv6Prefixes' - The IPv6 delegated prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv6PrefixCount@ option.
+--
+-- 'networkCardIndex', 'instanceNetworkInterfaceSpecification_networkCardIndex' - The index of the network card. Some instance types support multiple
+-- network cards. The primary network interface must be assigned to network
+-- card index 0. The default is network card index 0.
+--
+-- If you are using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>
+-- to create Spot Instances, omit this parameter because you can’t specify
+-- the network card index when using this API. To specify the network card
+-- index, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>.
+--
+-- 'networkInterfaceId', 'instanceNetworkInterfaceSpecification_networkInterfaceId' - The ID of the network interface.
+--
+-- If you are creating a Spot Fleet, omit this parameter because you can’t
+-- specify a network interface ID in a launch specification.
+--
+-- 'privateIpAddress', 'instanceNetworkInterfaceSpecification_privateIpAddress' - The private IPv4 address of the network interface. Applies only if
+-- creating a network interface when launching an instance. You cannot
+-- specify this option if you\'re launching more than one instance in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+-- request.
+--
+-- 'privateIpAddresses', 'instanceNetworkInterfaceSpecification_privateIpAddresses' - The private IPv4 addresses to assign to the network interface. Only one
+-- private IPv4 address can be designated as primary. You cannot specify
+-- this option if you\'re launching more than one instance in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+-- request.
+--
+-- 'secondaryPrivateIpAddressCount', 'instanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount' - The number of secondary private IPv4 addresses. You can\'t specify this
+-- option and specify more than one private IP address using the private IP
+-- addresses option. You cannot specify this option if you\'re launching
+-- more than one instance in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+-- request.
+--
+-- 'subnetId', 'instanceNetworkInterfaceSpecification_subnetId' - The ID of the subnet associated with the network interface. Applies only
+-- if creating a network interface when launching an instance.
+newInstanceNetworkInterfaceSpecification ::
+  InstanceNetworkInterfaceSpecification
+newInstanceNetworkInterfaceSpecification =
+  InstanceNetworkInterfaceSpecification'
+    { associateCarrierIpAddress =
+        Prelude.Nothing,
+      associatePublicIpAddress =
+        Prelude.Nothing,
+      deleteOnTermination =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      deviceIndex = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      interfaceType = Prelude.Nothing,
+      ipv4PrefixCount = Prelude.Nothing,
+      ipv4Prefixes = Prelude.Nothing,
+      ipv6AddressCount = Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      ipv6PrefixCount = Prelude.Nothing,
+      ipv6Prefixes = Prelude.Nothing,
+      networkCardIndex = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      privateIpAddresses = Prelude.Nothing,
+      secondaryPrivateIpAddressCount =
+        Prelude.Nothing,
+      subnetId = Prelude.Nothing
+    }
+
+-- | Indicates whether to assign a carrier IP address to the network
+-- interface.
+--
+-- You can only assign a carrier IP address to a network interface that is
+-- in a subnet in a Wavelength Zone. For more information about carrier IP
+-- addresses, see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP address>
+-- in the /Amazon Web Services Wavelength Developer Guide/.
+instanceNetworkInterfaceSpecification_associateCarrierIpAddress :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Bool)
+instanceNetworkInterfaceSpecification_associateCarrierIpAddress = Lens.lens (\InstanceNetworkInterfaceSpecification' {associateCarrierIpAddress} -> associateCarrierIpAddress) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {associateCarrierIpAddress = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | Indicates whether to assign a public IPv4 address to an instance you
+-- launch in a VPC. The public IP address can only be assigned to a network
+-- interface for eth0, and can only be assigned to a new network interface,
+-- not an existing one. You cannot specify more than one network interface
+-- in the request. If launching into a default subnet, the default value is
+-- @true@.
+instanceNetworkInterfaceSpecification_associatePublicIpAddress :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Bool)
+instanceNetworkInterfaceSpecification_associatePublicIpAddress = Lens.lens (\InstanceNetworkInterfaceSpecification' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {associatePublicIpAddress = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | If set to @true@, the interface is deleted when the instance is
+-- terminated. You can specify @true@ only if creating a new network
+-- interface when launching an instance.
+instanceNetworkInterfaceSpecification_deleteOnTermination :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Bool)
+instanceNetworkInterfaceSpecification_deleteOnTermination = Lens.lens (\InstanceNetworkInterfaceSpecification' {deleteOnTermination} -> deleteOnTermination) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {deleteOnTermination = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The description of the network interface. Applies only if creating a
+-- network interface when launching an instance.
+instanceNetworkInterfaceSpecification_description :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceSpecification_description = Lens.lens (\InstanceNetworkInterfaceSpecification' {description} -> description) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {description = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The position of the network interface in the attachment order. A primary
+-- network interface has a device index of 0.
+--
+-- If you specify a network interface when launching an instance, you must
+-- specify the device index.
+instanceNetworkInterfaceSpecification_deviceIndex :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceSpecification_deviceIndex = Lens.lens (\InstanceNetworkInterfaceSpecification' {deviceIndex} -> deviceIndex) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {deviceIndex = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The IDs of the security groups for the network interface. Applies only
+-- if creating a network interface when launching an instance.
+instanceNetworkInterfaceSpecification_groups :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe [Prelude.Text])
+instanceNetworkInterfaceSpecification_groups = Lens.lens (\InstanceNetworkInterfaceSpecification' {groups} -> groups) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {groups = a} :: InstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of network interface.
+--
+-- Valid values: @interface@ | @efa@
+instanceNetworkInterfaceSpecification_interfaceType :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceSpecification_interfaceType = Lens.lens (\InstanceNetworkInterfaceSpecification' {interfaceType} -> interfaceType) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {interfaceType = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The number of IPv4 delegated prefixes to be automatically assigned to
+-- the network interface. You cannot use this option if you use the
+-- @Ipv4Prefix@ option.
+instanceNetworkInterfaceSpecification_ipv4PrefixCount :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceSpecification_ipv4PrefixCount = Lens.lens (\InstanceNetworkInterfaceSpecification' {ipv4PrefixCount} -> ipv4PrefixCount) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {ipv4PrefixCount = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The IPv4 delegated prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv4PrefixCount@ option.
+instanceNetworkInterfaceSpecification_ipv4Prefixes :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe [Ipv4PrefixSpecificationRequest])
+instanceNetworkInterfaceSpecification_ipv4Prefixes = Lens.lens (\InstanceNetworkInterfaceSpecification' {ipv4Prefixes} -> ipv4Prefixes) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {ipv4Prefixes = a} :: InstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | A number of IPv6 addresses to assign to the network interface. Amazon
+-- EC2 chooses the IPv6 addresses from the range of the subnet. You cannot
+-- specify this option and the option to assign specific IPv6 addresses in
+-- the same request. You can specify this option if you\'ve specified a
+-- minimum number of instances to launch.
+instanceNetworkInterfaceSpecification_ipv6AddressCount :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceSpecification_ipv6AddressCount = Lens.lens (\InstanceNetworkInterfaceSpecification' {ipv6AddressCount} -> ipv6AddressCount) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {ipv6AddressCount = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The IPv6 addresses to assign to the network interface. You cannot
+-- specify this option and the option to assign a number of IPv6 addresses
+-- in the same request. You cannot specify this option if you\'ve specified
+-- a minimum number of instances to launch.
+instanceNetworkInterfaceSpecification_ipv6Addresses :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe [InstanceIpv6Address])
+instanceNetworkInterfaceSpecification_ipv6Addresses = Lens.lens (\InstanceNetworkInterfaceSpecification' {ipv6Addresses} -> ipv6Addresses) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {ipv6Addresses = a} :: InstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 delegated prefixes to be automatically assigned to
+-- the network interface. You cannot use this option if you use the
+-- @Ipv6Prefix@ option.
+instanceNetworkInterfaceSpecification_ipv6PrefixCount :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceSpecification_ipv6PrefixCount = Lens.lens (\InstanceNetworkInterfaceSpecification' {ipv6PrefixCount} -> ipv6PrefixCount) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {ipv6PrefixCount = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The IPv6 delegated prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv6PrefixCount@ option.
+instanceNetworkInterfaceSpecification_ipv6Prefixes :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe [Ipv6PrefixSpecificationRequest])
+instanceNetworkInterfaceSpecification_ipv6Prefixes = Lens.lens (\InstanceNetworkInterfaceSpecification' {ipv6Prefixes} -> ipv6Prefixes) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {ipv6Prefixes = a} :: InstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The index of the network card. Some instance types support multiple
+-- network cards. The primary network interface must be assigned to network
+-- card index 0. The default is network card index 0.
+--
+-- If you are using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html RequestSpotInstances>
+-- to create Spot Instances, omit this parameter because you can’t specify
+-- the network card index when using this API. To specify the network card
+-- index, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>.
+instanceNetworkInterfaceSpecification_networkCardIndex :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceSpecification_networkCardIndex = Lens.lens (\InstanceNetworkInterfaceSpecification' {networkCardIndex} -> networkCardIndex) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {networkCardIndex = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The ID of the network interface.
+--
+-- If you are creating a Spot Fleet, omit this parameter because you can’t
+-- specify a network interface ID in a launch specification.
+instanceNetworkInterfaceSpecification_networkInterfaceId :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceSpecification_networkInterfaceId = Lens.lens (\InstanceNetworkInterfaceSpecification' {networkInterfaceId} -> networkInterfaceId) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {networkInterfaceId = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The private IPv4 address of the network interface. Applies only if
+-- creating a network interface when launching an instance. You cannot
+-- specify this option if you\'re launching more than one instance in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+-- request.
+instanceNetworkInterfaceSpecification_privateIpAddress :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceSpecification_privateIpAddress = Lens.lens (\InstanceNetworkInterfaceSpecification' {privateIpAddress} -> privateIpAddress) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {privateIpAddress = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The private IPv4 addresses to assign to the network interface. Only one
+-- private IPv4 address can be designated as primary. You cannot specify
+-- this option if you\'re launching more than one instance in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+-- request.
+instanceNetworkInterfaceSpecification_privateIpAddresses :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe [PrivateIpAddressSpecification])
+instanceNetworkInterfaceSpecification_privateIpAddresses = Lens.lens (\InstanceNetworkInterfaceSpecification' {privateIpAddresses} -> privateIpAddresses) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {privateIpAddresses = a} :: InstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of secondary private IPv4 addresses. You can\'t specify this
+-- option and specify more than one private IP address using the private IP
+-- addresses option. You cannot specify this option if you\'re launching
+-- more than one instance in a
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html RunInstances>
+-- request.
+instanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+instanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount = Lens.lens (\InstanceNetworkInterfaceSpecification' {secondaryPrivateIpAddressCount} -> secondaryPrivateIpAddressCount) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {secondaryPrivateIpAddressCount = a} :: InstanceNetworkInterfaceSpecification)
+
+-- | The ID of the subnet associated with the network interface. Applies only
+-- if creating a network interface when launching an instance.
+instanceNetworkInterfaceSpecification_subnetId :: Lens.Lens' InstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+instanceNetworkInterfaceSpecification_subnetId = Lens.lens (\InstanceNetworkInterfaceSpecification' {subnetId} -> subnetId) (\s@InstanceNetworkInterfaceSpecification' {} a -> s {subnetId = a} :: InstanceNetworkInterfaceSpecification)
+
+instance
+  Data.FromXML
+    InstanceNetworkInterfaceSpecification
+  where
+  parseXML x =
+    InstanceNetworkInterfaceSpecification'
+      Prelude.<$> (x Data..@? "AssociateCarrierIpAddress")
+      Prelude.<*> (x Data..@? "associatePublicIpAddress")
+      Prelude.<*> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "deviceIndex")
+      Prelude.<*> ( x
+                      Data..@? "SecurityGroupId"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "SecurityGroupId")
+                  )
+      Prelude.<*> (x Data..@? "InterfaceType")
+      Prelude.<*> (x Data..@? "Ipv4PrefixCount")
+      Prelude.<*> ( x
+                      Data..@? "Ipv4Prefix"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipv6AddressCount")
+      Prelude.<*> ( x
+                      Data..@? "ipv6AddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "Ipv6PrefixCount")
+      Prelude.<*> ( x
+                      Data..@? "Ipv6Prefix"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "NetworkCardIndex")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "privateIpAddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "secondaryPrivateIpAddressCount")
+      Prelude.<*> (x Data..@? "subnetId")
+
+instance
+  Prelude.Hashable
+    InstanceNetworkInterfaceSpecification
+  where
+  hashWithSalt
+    _salt
+    InstanceNetworkInterfaceSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` associateCarrierIpAddress
+        `Prelude.hashWithSalt` associatePublicIpAddress
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` deviceIndex
+        `Prelude.hashWithSalt` groups
+        `Prelude.hashWithSalt` interfaceType
+        `Prelude.hashWithSalt` ipv4PrefixCount
+        `Prelude.hashWithSalt` ipv4Prefixes
+        `Prelude.hashWithSalt` ipv6AddressCount
+        `Prelude.hashWithSalt` ipv6Addresses
+        `Prelude.hashWithSalt` ipv6PrefixCount
+        `Prelude.hashWithSalt` ipv6Prefixes
+        `Prelude.hashWithSalt` networkCardIndex
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` privateIpAddress
+        `Prelude.hashWithSalt` privateIpAddresses
+        `Prelude.hashWithSalt` secondaryPrivateIpAddressCount
+        `Prelude.hashWithSalt` subnetId
+
+instance
+  Prelude.NFData
+    InstanceNetworkInterfaceSpecification
+  where
+  rnf InstanceNetworkInterfaceSpecification' {..} =
+    Prelude.rnf associateCarrierIpAddress
+      `Prelude.seq` Prelude.rnf associatePublicIpAddress
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceIndex
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf interfaceType
+      `Prelude.seq` Prelude.rnf ipv4PrefixCount
+      `Prelude.seq` Prelude.rnf ipv4Prefixes
+      `Prelude.seq` Prelude.rnf ipv6AddressCount
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf ipv6PrefixCount
+      `Prelude.seq` Prelude.rnf ipv6Prefixes
+      `Prelude.seq` Prelude.rnf networkCardIndex
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf privateIpAddresses
+      `Prelude.seq` Prelude.rnf
+        secondaryPrivateIpAddressCount
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance
+  Data.ToQuery
+    InstanceNetworkInterfaceSpecification
+  where
+  toQuery InstanceNetworkInterfaceSpecification' {..} =
+    Prelude.mconcat
+      [ "AssociateCarrierIpAddress"
+          Data.=: associateCarrierIpAddress,
+        "AssociatePublicIpAddress"
+          Data.=: associatePublicIpAddress,
+        "DeleteOnTermination" Data.=: deleteOnTermination,
+        "Description" Data.=: description,
+        "DeviceIndex" Data.=: deviceIndex,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> groups
+          ),
+        "InterfaceType" Data.=: interfaceType,
+        "Ipv4PrefixCount" Data.=: ipv4PrefixCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv4Prefix"
+              Prelude.<$> ipv4Prefixes
+          ),
+        "Ipv6AddressCount" Data.=: ipv6AddressCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Addresses"
+              Prelude.<$> ipv6Addresses
+          ),
+        "Ipv6PrefixCount" Data.=: ipv6PrefixCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Prefix"
+              Prelude.<$> ipv6Prefixes
+          ),
+        "NetworkCardIndex" Data.=: networkCardIndex,
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        Data.toQuery
+          ( Data.toQueryList "PrivateIpAddresses"
+              Prelude.<$> privateIpAddresses
+          ),
+        "SecondaryPrivateIpAddressCount"
+          Data.=: secondaryPrivateIpAddressCount,
+        "SubnetId" Data.=: subnetId
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstancePrivateIpAddress.hs b/gen/Amazonka/EC2/Types/InstancePrivateIpAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstancePrivateIpAddress.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstancePrivateIpAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstancePrivateIpAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceNetworkInterfaceAssociation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a private IPv4 address.
+--
+-- /See:/ 'newInstancePrivateIpAddress' smart constructor.
+data InstancePrivateIpAddress = InstancePrivateIpAddress'
+  { -- | The association information for an Elastic IP address for the network
+    -- interface.
+    association :: Prelude.Maybe InstanceNetworkInterfaceAssociation,
+    -- | Indicates whether this IPv4 address is the primary private IP address of
+    -- the network interface.
+    primary :: Prelude.Maybe Prelude.Bool,
+    -- | The private IPv4 DNS name.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 address of the network interface.
+    privateIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstancePrivateIpAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'instancePrivateIpAddress_association' - The association information for an Elastic IP address for the network
+-- interface.
+--
+-- 'primary', 'instancePrivateIpAddress_primary' - Indicates whether this IPv4 address is the primary private IP address of
+-- the network interface.
+--
+-- 'privateDnsName', 'instancePrivateIpAddress_privateDnsName' - The private IPv4 DNS name.
+--
+-- 'privateIpAddress', 'instancePrivateIpAddress_privateIpAddress' - The private IPv4 address of the network interface.
+newInstancePrivateIpAddress ::
+  InstancePrivateIpAddress
+newInstancePrivateIpAddress =
+  InstancePrivateIpAddress'
+    { association =
+        Prelude.Nothing,
+      primary = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing
+    }
+
+-- | The association information for an Elastic IP address for the network
+-- interface.
+instancePrivateIpAddress_association :: Lens.Lens' InstancePrivateIpAddress (Prelude.Maybe InstanceNetworkInterfaceAssociation)
+instancePrivateIpAddress_association = Lens.lens (\InstancePrivateIpAddress' {association} -> association) (\s@InstancePrivateIpAddress' {} a -> s {association = a} :: InstancePrivateIpAddress)
+
+-- | Indicates whether this IPv4 address is the primary private IP address of
+-- the network interface.
+instancePrivateIpAddress_primary :: Lens.Lens' InstancePrivateIpAddress (Prelude.Maybe Prelude.Bool)
+instancePrivateIpAddress_primary = Lens.lens (\InstancePrivateIpAddress' {primary} -> primary) (\s@InstancePrivateIpAddress' {} a -> s {primary = a} :: InstancePrivateIpAddress)
+
+-- | The private IPv4 DNS name.
+instancePrivateIpAddress_privateDnsName :: Lens.Lens' InstancePrivateIpAddress (Prelude.Maybe Prelude.Text)
+instancePrivateIpAddress_privateDnsName = Lens.lens (\InstancePrivateIpAddress' {privateDnsName} -> privateDnsName) (\s@InstancePrivateIpAddress' {} a -> s {privateDnsName = a} :: InstancePrivateIpAddress)
+
+-- | The private IPv4 address of the network interface.
+instancePrivateIpAddress_privateIpAddress :: Lens.Lens' InstancePrivateIpAddress (Prelude.Maybe Prelude.Text)
+instancePrivateIpAddress_privateIpAddress = Lens.lens (\InstancePrivateIpAddress' {privateIpAddress} -> privateIpAddress) (\s@InstancePrivateIpAddress' {} a -> s {privateIpAddress = a} :: InstancePrivateIpAddress)
+
+instance Data.FromXML InstancePrivateIpAddress where
+  parseXML x =
+    InstancePrivateIpAddress'
+      Prelude.<$> (x Data..@? "association")
+      Prelude.<*> (x Data..@? "primary")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+
+instance Prelude.Hashable InstancePrivateIpAddress where
+  hashWithSalt _salt InstancePrivateIpAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` association
+      `Prelude.hashWithSalt` primary
+      `Prelude.hashWithSalt` privateDnsName
+      `Prelude.hashWithSalt` privateIpAddress
+
+instance Prelude.NFData InstancePrivateIpAddress where
+  rnf InstancePrivateIpAddress' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf primary
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf privateIpAddress
diff --git a/gen/Amazonka/EC2/Types/InstanceRequirements.hs b/gen/Amazonka/EC2/Types/InstanceRequirements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceRequirements.hs
@@ -0,0 +1,1096 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceRequirements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceRequirements where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AcceleratorCount
+import Amazonka.EC2.Types.AcceleratorManufacturer
+import Amazonka.EC2.Types.AcceleratorName
+import Amazonka.EC2.Types.AcceleratorTotalMemoryMiB
+import Amazonka.EC2.Types.AcceleratorType
+import Amazonka.EC2.Types.BareMetal
+import Amazonka.EC2.Types.BaselineEbsBandwidthMbps
+import Amazonka.EC2.Types.BurstablePerformance
+import Amazonka.EC2.Types.CpuManufacturer
+import Amazonka.EC2.Types.InstanceGeneration
+import Amazonka.EC2.Types.LocalStorage
+import Amazonka.EC2.Types.LocalStorageType
+import Amazonka.EC2.Types.MemoryGiBPerVCpu
+import Amazonka.EC2.Types.MemoryMiB
+import Amazonka.EC2.Types.NetworkBandwidthGbps
+import Amazonka.EC2.Types.NetworkInterfaceCount
+import Amazonka.EC2.Types.TotalLocalStorageGB
+import Amazonka.EC2.Types.VCpuCountRange
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with these
+-- attributes.
+--
+-- When you specify multiple attributes, you get instance types that
+-- satisfy all of the specified attributes. If you specify multiple values
+-- for an attribute, you get instance types that satisfy any of the
+-- specified values.
+--
+-- To limit the list of instance types from which Amazon EC2 can identify
+-- matching instance types, you can use one of the following parameters,
+-- but not both in the same request:
+--
+-- -   @AllowedInstanceTypes@ - The instance types to include in the list.
+--     All other instance types are ignored, even if they match your
+--     specified attributes.
+--
+-- -   @ExcludedInstanceTypes@ - The instance types to exclude from the
+--     list, even if they match your specified attributes.
+--
+-- You must specify @VCpuCount@ and @MemoryMiB@. All other attributes are
+-- optional. Any unspecified optional attribute is set to its default.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for EC2 Fleet>,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for Spot Fleet>,
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html Spot placement score>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newInstanceRequirements' smart constructor.
+data InstanceRequirements = InstanceRequirements'
+  { -- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+    -- Web Services Inferentia chips) on an instance.
+    --
+    -- To exclude accelerator-enabled instance types, set @Max@ to @0@.
+    --
+    -- Default: No minimum or maximum limits
+    acceleratorCount :: Prelude.Maybe AcceleratorCount,
+    -- | Indicates whether instance types must have accelerators by specific
+    -- manufacturers.
+    --
+    -- -   For instance types with NVIDIA devices, specify @nvidia@.
+    --
+    -- -   For instance types with AMD devices, specify @amd@.
+    --
+    -- -   For instance types with Amazon Web Services devices, specify
+    --     @amazon-web-services@.
+    --
+    -- -   For instance types with Xilinx devices, specify @xilinx@.
+    --
+    -- Default: Any manufacturer
+    acceleratorManufacturers :: Prelude.Maybe [AcceleratorManufacturer],
+    -- | The accelerators that must be on the instance type.
+    --
+    -- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
+    --
+    -- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
+    --
+    -- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
+    --
+    -- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
+    --
+    -- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
+    --
+    -- -   For instance types with AMD Radeon Pro V520 GPUs, specify
+    --     @radeon-pro-v520@.
+    --
+    -- -   For instance types with Xilinx VU9P FPGAs, specify @vu9p@.
+    --
+    -- -   For instance types with Amazon Web Services Inferentia chips,
+    --     specify @inferentia@.
+    --
+    -- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
+    --
+    -- Default: Any accelerator
+    acceleratorNames :: Prelude.Maybe [AcceleratorName],
+    -- | The minimum and maximum amount of total accelerator memory, in MiB.
+    --
+    -- Default: No minimum or maximum limits
+    acceleratorTotalMemoryMiB :: Prelude.Maybe AcceleratorTotalMemoryMiB,
+    -- | The accelerator types that must be on the instance type.
+    --
+    -- -   For instance types with GPU accelerators, specify @gpu@.
+    --
+    -- -   For instance types with FPGA accelerators, specify @fpga@.
+    --
+    -- -   For instance types with inference accelerators, specify @inference@.
+    --
+    -- Default: Any accelerator type
+    acceleratorTypes :: Prelude.Maybe [AcceleratorType],
+    -- | The instance types to apply your specified attributes against. All other
+    -- instance types are ignored, even if they match your specified
+    -- attributes.
+    --
+    -- You can use strings with one or more wild cards, represented by an
+    -- asterisk (@*@), to allow an instance type, size, or generation. The
+    -- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+    --
+    -- For example, if you specify @c5*@,Amazon EC2 will allow the entire C5
+    -- instance family, which includes all C5a and C5n instance types. If you
+    -- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
+    -- not the M5n instance types.
+    --
+    -- If you specify @AllowedInstanceTypes@, you can\'t specify
+    -- @ExcludedInstanceTypes@.
+    --
+    -- Default: All instance types
+    allowedInstanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether bare metal instance types must be included, excluded,
+    -- or required.
+    --
+    -- -   To include bare metal instance types, specify @included@.
+    --
+    -- -   To require only bare metal instance types, specify @required@.
+    --
+    -- -   To exclude bare metal instance types, specify @excluded@.
+    --
+    -- Default: @excluded@
+    bareMetal :: Prelude.Maybe BareMetal,
+    -- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: No minimum or maximum limits
+    baselineEbsBandwidthMbps :: Prelude.Maybe BaselineEbsBandwidthMbps,
+    -- | Indicates whether burstable performance T instance types are included,
+    -- excluded, or required. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
+    --
+    -- -   To include burstable performance instance types, specify @included@.
+    --
+    -- -   To require only burstable performance instance types, specify
+    --     @required@.
+    --
+    -- -   To exclude burstable performance instance types, specify @excluded@.
+    --
+    -- Default: @excluded@
+    burstablePerformance :: Prelude.Maybe BurstablePerformance,
+    -- | The CPU manufacturers to include.
+    --
+    -- -   For instance types with Intel CPUs, specify @intel@.
+    --
+    -- -   For instance types with AMD CPUs, specify @amd@.
+    --
+    -- -   For instance types with Amazon Web Services CPUs, specify
+    --     @amazon-web-services@.
+    --
+    -- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
+    -- will be launched with a compatible CPU architecture based on the Amazon
+    -- Machine Image (AMI) that you specify in your launch template.
+    --
+    -- Default: Any manufacturer
+    cpuManufacturers :: Prelude.Maybe [CpuManufacturer],
+    -- | The instance types to exclude.
+    --
+    -- You can use strings with one or more wild cards, represented by an
+    -- asterisk (@*@), to exclude an instance type, size, or generation. The
+    -- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+    --
+    -- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
+    -- instance family, which includes all C5a and C5n instance types. If you
+    -- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
+    -- not the M5n instance types.
+    --
+    -- If you specify @ExcludedInstanceTypes@, you can\'t specify
+    -- @AllowedInstanceTypes@.
+    --
+    -- Default: No excluded instance types
+    excludedInstanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether current or previous generation instance types are
+    -- included. The current generation instance types are recommended for use.
+    -- Current generation instance types are typically the latest two to three
+    -- generations in each instance family. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- For current generation instance types, specify @current@.
+    --
+    -- For previous generation instance types, specify @previous@.
+    --
+    -- Default: Current and previous generation instance types
+    instanceGenerations :: Prelude.Maybe [InstanceGeneration],
+    -- | Indicates whether instance types with instance store volumes are
+    -- included, excluded, or required. For more information,
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- -   To include instance types with instance store volumes, specify
+    --     @included@.
+    --
+    -- -   To require only instance types with instance store volumes, specify
+    --     @required@.
+    --
+    -- -   To exclude instance types with instance store volumes, specify
+    --     @excluded@.
+    --
+    -- Default: @included@
+    localStorage :: Prelude.Maybe LocalStorage,
+    -- | The type of local storage that is required.
+    --
+    -- -   For instance types with hard disk drive (HDD) storage, specify
+    --     @hdd@.
+    --
+    -- -   For instance types with solid state drive (SSD) storage, specify
+    --     @ssd@.
+    --
+    -- Default: @hdd@ and @ssd@
+    localStorageTypes :: Prelude.Maybe [LocalStorageType],
+    -- | The minimum and maximum amount of memory per vCPU, in GiB.
+    --
+    -- Default: No minimum or maximum limits
+    memoryGiBPerVCpu :: Prelude.Maybe MemoryGiBPerVCpu,
+    -- | The minimum and maximum amount of memory, in MiB.
+    memoryMiB :: Prelude.Maybe MemoryMiB,
+    -- | The minimum and maximum amount of network bandwidth, in gigabits per
+    -- second (Gbps).
+    --
+    -- Default: No minimum or maximum limits
+    networkBandwidthGbps :: Prelude.Maybe NetworkBandwidthGbps,
+    -- | The minimum and maximum number of network interfaces.
+    --
+    -- Default: No minimum or maximum limits
+    networkInterfaceCount :: Prelude.Maybe NetworkInterfaceCount,
+    -- | The price protection threshold for On-Demand Instances. This is the
+    -- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
+    -- above the least expensive current generation M, C, or R instance type
+    -- with your specified attributes. When Amazon EC2 selects instance types
+    -- with your attributes, it excludes instance types priced above your
+    -- threshold.
+    --
+    -- The parameter accepts an integer, which Amazon EC2 interprets as a
+    -- percentage.
+    --
+    -- To turn off price protection, specify a high value, such as @999999@.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+    -- and
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+    --
+    -- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+    -- protection threshold is applied based on the per-vCPU or per-memory
+    -- price instead of the per-instance price.
+    --
+    -- Default: @20@
+    onDemandMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether instance types must support hibernation for On-Demand
+    -- Instances.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
+    --
+    -- Default: @false@
+    requireHibernateSupport :: Prelude.Maybe Prelude.Bool,
+    -- | The price protection threshold for Spot Instances. This is the maximum
+    -- you’ll pay for a Spot Instance, expressed as a percentage above the
+    -- least expensive current generation M, C, or R instance type with your
+    -- specified attributes. When Amazon EC2 selects instance types with your
+    -- attributes, it excludes instance types priced above your threshold.
+    --
+    -- The parameter accepts an integer, which Amazon EC2 interprets as a
+    -- percentage.
+    --
+    -- To turn off price protection, specify a high value, such as @999999@.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+    -- and
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+    --
+    -- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+    -- protection threshold is applied based on the per-vCPU or per-memory
+    -- price instead of the per-instance price.
+    --
+    -- Default: @100@
+    spotMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Int,
+    -- | The minimum and maximum amount of total local storage, in GB.
+    --
+    -- Default: No minimum or maximum limits
+    totalLocalStorageGB :: Prelude.Maybe TotalLocalStorageGB,
+    -- | The minimum and maximum number of vCPUs.
+    vCpuCount :: Prelude.Maybe VCpuCountRange
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceRequirements' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorCount', 'instanceRequirements_acceleratorCount' - The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+-- Web Services Inferentia chips) on an instance.
+--
+-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'acceleratorManufacturers', 'instanceRequirements_acceleratorManufacturers' - Indicates whether instance types must have accelerators by specific
+-- manufacturers.
+--
+-- -   For instance types with NVIDIA devices, specify @nvidia@.
+--
+-- -   For instance types with AMD devices, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services devices, specify
+--     @amazon-web-services@.
+--
+-- -   For instance types with Xilinx devices, specify @xilinx@.
+--
+-- Default: Any manufacturer
+--
+-- 'acceleratorNames', 'instanceRequirements_acceleratorNames' - The accelerators that must be on the instance type.
+--
+-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
+--
+-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
+--
+-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
+--
+-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
+--
+-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
+--
+-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
+--     @radeon-pro-v520@.
+--
+-- -   For instance types with Xilinx VU9P FPGAs, specify @vu9p@.
+--
+-- -   For instance types with Amazon Web Services Inferentia chips,
+--     specify @inferentia@.
+--
+-- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
+--
+-- Default: Any accelerator
+--
+-- 'acceleratorTotalMemoryMiB', 'instanceRequirements_acceleratorTotalMemoryMiB' - The minimum and maximum amount of total accelerator memory, in MiB.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'acceleratorTypes', 'instanceRequirements_acceleratorTypes' - The accelerator types that must be on the instance type.
+--
+-- -   For instance types with GPU accelerators, specify @gpu@.
+--
+-- -   For instance types with FPGA accelerators, specify @fpga@.
+--
+-- -   For instance types with inference accelerators, specify @inference@.
+--
+-- Default: Any accelerator type
+--
+-- 'allowedInstanceTypes', 'instanceRequirements_allowedInstanceTypes' - The instance types to apply your specified attributes against. All other
+-- instance types are ignored, even if they match your specified
+-- attributes.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to allow an instance type, size, or generation. The
+-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will allow the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @AllowedInstanceTypes@, you can\'t specify
+-- @ExcludedInstanceTypes@.
+--
+-- Default: All instance types
+--
+-- 'bareMetal', 'instanceRequirements_bareMetal' - Indicates whether bare metal instance types must be included, excluded,
+-- or required.
+--
+-- -   To include bare metal instance types, specify @included@.
+--
+-- -   To require only bare metal instance types, specify @required@.
+--
+-- -   To exclude bare metal instance types, specify @excluded@.
+--
+-- Default: @excluded@
+--
+-- 'baselineEbsBandwidthMbps', 'instanceRequirements_baselineEbsBandwidthMbps' - The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'burstablePerformance', 'instanceRequirements_burstablePerformance' - Indicates whether burstable performance T instance types are included,
+-- excluded, or required. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
+--
+-- -   To include burstable performance instance types, specify @included@.
+--
+-- -   To require only burstable performance instance types, specify
+--     @required@.
+--
+-- -   To exclude burstable performance instance types, specify @excluded@.
+--
+-- Default: @excluded@
+--
+-- 'cpuManufacturers', 'instanceRequirements_cpuManufacturers' - The CPU manufacturers to include.
+--
+-- -   For instance types with Intel CPUs, specify @intel@.
+--
+-- -   For instance types with AMD CPUs, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services CPUs, specify
+--     @amazon-web-services@.
+--
+-- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
+-- will be launched with a compatible CPU architecture based on the Amazon
+-- Machine Image (AMI) that you specify in your launch template.
+--
+-- Default: Any manufacturer
+--
+-- 'excludedInstanceTypes', 'instanceRequirements_excludedInstanceTypes' - The instance types to exclude.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to exclude an instance type, size, or generation. The
+-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @ExcludedInstanceTypes@, you can\'t specify
+-- @AllowedInstanceTypes@.
+--
+-- Default: No excluded instance types
+--
+-- 'instanceGenerations', 'instanceRequirements_instanceGenerations' - Indicates whether current or previous generation instance types are
+-- included. The current generation instance types are recommended for use.
+-- Current generation instance types are typically the latest two to three
+-- generations in each instance family. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For current generation instance types, specify @current@.
+--
+-- For previous generation instance types, specify @previous@.
+--
+-- Default: Current and previous generation instance types
+--
+-- 'localStorage', 'instanceRequirements_localStorage' - Indicates whether instance types with instance store volumes are
+-- included, excluded, or required. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
+-- in the /Amazon EC2 User Guide/.
+--
+-- -   To include instance types with instance store volumes, specify
+--     @included@.
+--
+-- -   To require only instance types with instance store volumes, specify
+--     @required@.
+--
+-- -   To exclude instance types with instance store volumes, specify
+--     @excluded@.
+--
+-- Default: @included@
+--
+-- 'localStorageTypes', 'instanceRequirements_localStorageTypes' - The type of local storage that is required.
+--
+-- -   For instance types with hard disk drive (HDD) storage, specify
+--     @hdd@.
+--
+-- -   For instance types with solid state drive (SSD) storage, specify
+--     @ssd@.
+--
+-- Default: @hdd@ and @ssd@
+--
+-- 'memoryGiBPerVCpu', 'instanceRequirements_memoryGiBPerVCpu' - The minimum and maximum amount of memory per vCPU, in GiB.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'memoryMiB', 'instanceRequirements_memoryMiB' - The minimum and maximum amount of memory, in MiB.
+--
+-- 'networkBandwidthGbps', 'instanceRequirements_networkBandwidthGbps' - The minimum and maximum amount of network bandwidth, in gigabits per
+-- second (Gbps).
+--
+-- Default: No minimum or maximum limits
+--
+-- 'networkInterfaceCount', 'instanceRequirements_networkInterfaceCount' - The minimum and maximum number of network interfaces.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'onDemandMaxPricePercentageOverLowestPrice', 'instanceRequirements_onDemandMaxPricePercentageOverLowestPrice' - The price protection threshold for On-Demand Instances. This is the
+-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
+-- above the least expensive current generation M, C, or R instance type
+-- with your specified attributes. When Amazon EC2 selects instance types
+-- with your attributes, it excludes instance types priced above your
+-- threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @20@
+--
+-- 'requireHibernateSupport', 'instanceRequirements_requireHibernateSupport' - Indicates whether instance types must support hibernation for On-Demand
+-- Instances.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
+--
+-- Default: @false@
+--
+-- 'spotMaxPricePercentageOverLowestPrice', 'instanceRequirements_spotMaxPricePercentageOverLowestPrice' - The price protection threshold for Spot Instances. This is the maximum
+-- you’ll pay for a Spot Instance, expressed as a percentage above the
+-- least expensive current generation M, C, or R instance type with your
+-- specified attributes. When Amazon EC2 selects instance types with your
+-- attributes, it excludes instance types priced above your threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @100@
+--
+-- 'totalLocalStorageGB', 'instanceRequirements_totalLocalStorageGB' - The minimum and maximum amount of total local storage, in GB.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'vCpuCount', 'instanceRequirements_vCpuCount' - The minimum and maximum number of vCPUs.
+newInstanceRequirements ::
+  InstanceRequirements
+newInstanceRequirements =
+  InstanceRequirements'
+    { acceleratorCount =
+        Prelude.Nothing,
+      acceleratorManufacturers = Prelude.Nothing,
+      acceleratorNames = Prelude.Nothing,
+      acceleratorTotalMemoryMiB = Prelude.Nothing,
+      acceleratorTypes = Prelude.Nothing,
+      allowedInstanceTypes = Prelude.Nothing,
+      bareMetal = Prelude.Nothing,
+      baselineEbsBandwidthMbps = Prelude.Nothing,
+      burstablePerformance = Prelude.Nothing,
+      cpuManufacturers = Prelude.Nothing,
+      excludedInstanceTypes = Prelude.Nothing,
+      instanceGenerations = Prelude.Nothing,
+      localStorage = Prelude.Nothing,
+      localStorageTypes = Prelude.Nothing,
+      memoryGiBPerVCpu = Prelude.Nothing,
+      memoryMiB = Prelude.Nothing,
+      networkBandwidthGbps = Prelude.Nothing,
+      networkInterfaceCount = Prelude.Nothing,
+      onDemandMaxPricePercentageOverLowestPrice =
+        Prelude.Nothing,
+      requireHibernateSupport = Prelude.Nothing,
+      spotMaxPricePercentageOverLowestPrice =
+        Prelude.Nothing,
+      totalLocalStorageGB = Prelude.Nothing,
+      vCpuCount = Prelude.Nothing
+    }
+
+-- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+-- Web Services Inferentia chips) on an instance.
+--
+-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_acceleratorCount :: Lens.Lens' InstanceRequirements (Prelude.Maybe AcceleratorCount)
+instanceRequirements_acceleratorCount = Lens.lens (\InstanceRequirements' {acceleratorCount} -> acceleratorCount) (\s@InstanceRequirements' {} a -> s {acceleratorCount = a} :: InstanceRequirements)
+
+-- | Indicates whether instance types must have accelerators by specific
+-- manufacturers.
+--
+-- -   For instance types with NVIDIA devices, specify @nvidia@.
+--
+-- -   For instance types with AMD devices, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services devices, specify
+--     @amazon-web-services@.
+--
+-- -   For instance types with Xilinx devices, specify @xilinx@.
+--
+-- Default: Any manufacturer
+instanceRequirements_acceleratorManufacturers :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorManufacturer])
+instanceRequirements_acceleratorManufacturers = Lens.lens (\InstanceRequirements' {acceleratorManufacturers} -> acceleratorManufacturers) (\s@InstanceRequirements' {} a -> s {acceleratorManufacturers = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | The accelerators that must be on the instance type.
+--
+-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
+--
+-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
+--
+-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
+--
+-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
+--
+-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
+--
+-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
+--     @radeon-pro-v520@.
+--
+-- -   For instance types with Xilinx VU9P FPGAs, specify @vu9p@.
+--
+-- -   For instance types with Amazon Web Services Inferentia chips,
+--     specify @inferentia@.
+--
+-- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
+--
+-- Default: Any accelerator
+instanceRequirements_acceleratorNames :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorName])
+instanceRequirements_acceleratorNames = Lens.lens (\InstanceRequirements' {acceleratorNames} -> acceleratorNames) (\s@InstanceRequirements' {} a -> s {acceleratorNames = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum and maximum amount of total accelerator memory, in MiB.
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_acceleratorTotalMemoryMiB :: Lens.Lens' InstanceRequirements (Prelude.Maybe AcceleratorTotalMemoryMiB)
+instanceRequirements_acceleratorTotalMemoryMiB = Lens.lens (\InstanceRequirements' {acceleratorTotalMemoryMiB} -> acceleratorTotalMemoryMiB) (\s@InstanceRequirements' {} a -> s {acceleratorTotalMemoryMiB = a} :: InstanceRequirements)
+
+-- | The accelerator types that must be on the instance type.
+--
+-- -   For instance types with GPU accelerators, specify @gpu@.
+--
+-- -   For instance types with FPGA accelerators, specify @fpga@.
+--
+-- -   For instance types with inference accelerators, specify @inference@.
+--
+-- Default: Any accelerator type
+instanceRequirements_acceleratorTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [AcceleratorType])
+instanceRequirements_acceleratorTypes = Lens.lens (\InstanceRequirements' {acceleratorTypes} -> acceleratorTypes) (\s@InstanceRequirements' {} a -> s {acceleratorTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance types to apply your specified attributes against. All other
+-- instance types are ignored, even if they match your specified
+-- attributes.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to allow an instance type, size, or generation. The
+-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will allow the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @AllowedInstanceTypes@, you can\'t specify
+-- @ExcludedInstanceTypes@.
+--
+-- Default: All instance types
+instanceRequirements_allowedInstanceTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [Prelude.Text])
+instanceRequirements_allowedInstanceTypes = Lens.lens (\InstanceRequirements' {allowedInstanceTypes} -> allowedInstanceTypes) (\s@InstanceRequirements' {} a -> s {allowedInstanceTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether bare metal instance types must be included, excluded,
+-- or required.
+--
+-- -   To include bare metal instance types, specify @included@.
+--
+-- -   To require only bare metal instance types, specify @required@.
+--
+-- -   To exclude bare metal instance types, specify @excluded@.
+--
+-- Default: @excluded@
+instanceRequirements_bareMetal :: Lens.Lens' InstanceRequirements (Prelude.Maybe BareMetal)
+instanceRequirements_bareMetal = Lens.lens (\InstanceRequirements' {bareMetal} -> bareMetal) (\s@InstanceRequirements' {} a -> s {bareMetal = a} :: InstanceRequirements)
+
+-- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_baselineEbsBandwidthMbps :: Lens.Lens' InstanceRequirements (Prelude.Maybe BaselineEbsBandwidthMbps)
+instanceRequirements_baselineEbsBandwidthMbps = Lens.lens (\InstanceRequirements' {baselineEbsBandwidthMbps} -> baselineEbsBandwidthMbps) (\s@InstanceRequirements' {} a -> s {baselineEbsBandwidthMbps = a} :: InstanceRequirements)
+
+-- | Indicates whether burstable performance T instance types are included,
+-- excluded, or required. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
+--
+-- -   To include burstable performance instance types, specify @included@.
+--
+-- -   To require only burstable performance instance types, specify
+--     @required@.
+--
+-- -   To exclude burstable performance instance types, specify @excluded@.
+--
+-- Default: @excluded@
+instanceRequirements_burstablePerformance :: Lens.Lens' InstanceRequirements (Prelude.Maybe BurstablePerformance)
+instanceRequirements_burstablePerformance = Lens.lens (\InstanceRequirements' {burstablePerformance} -> burstablePerformance) (\s@InstanceRequirements' {} a -> s {burstablePerformance = a} :: InstanceRequirements)
+
+-- | The CPU manufacturers to include.
+--
+-- -   For instance types with Intel CPUs, specify @intel@.
+--
+-- -   For instance types with AMD CPUs, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services CPUs, specify
+--     @amazon-web-services@.
+--
+-- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
+-- will be launched with a compatible CPU architecture based on the Amazon
+-- Machine Image (AMI) that you specify in your launch template.
+--
+-- Default: Any manufacturer
+instanceRequirements_cpuManufacturers :: Lens.Lens' InstanceRequirements (Prelude.Maybe [CpuManufacturer])
+instanceRequirements_cpuManufacturers = Lens.lens (\InstanceRequirements' {cpuManufacturers} -> cpuManufacturers) (\s@InstanceRequirements' {} a -> s {cpuManufacturers = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance types to exclude.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to exclude an instance type, size, or generation. The
+-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @ExcludedInstanceTypes@, you can\'t specify
+-- @AllowedInstanceTypes@.
+--
+-- Default: No excluded instance types
+instanceRequirements_excludedInstanceTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [Prelude.Text])
+instanceRequirements_excludedInstanceTypes = Lens.lens (\InstanceRequirements' {excludedInstanceTypes} -> excludedInstanceTypes) (\s@InstanceRequirements' {} a -> s {excludedInstanceTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether current or previous generation instance types are
+-- included. The current generation instance types are recommended for use.
+-- Current generation instance types are typically the latest two to three
+-- generations in each instance family. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For current generation instance types, specify @current@.
+--
+-- For previous generation instance types, specify @previous@.
+--
+-- Default: Current and previous generation instance types
+instanceRequirements_instanceGenerations :: Lens.Lens' InstanceRequirements (Prelude.Maybe [InstanceGeneration])
+instanceRequirements_instanceGenerations = Lens.lens (\InstanceRequirements' {instanceGenerations} -> instanceGenerations) (\s@InstanceRequirements' {} a -> s {instanceGenerations = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether instance types with instance store volumes are
+-- included, excluded, or required. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
+-- in the /Amazon EC2 User Guide/.
+--
+-- -   To include instance types with instance store volumes, specify
+--     @included@.
+--
+-- -   To require only instance types with instance store volumes, specify
+--     @required@.
+--
+-- -   To exclude instance types with instance store volumes, specify
+--     @excluded@.
+--
+-- Default: @included@
+instanceRequirements_localStorage :: Lens.Lens' InstanceRequirements (Prelude.Maybe LocalStorage)
+instanceRequirements_localStorage = Lens.lens (\InstanceRequirements' {localStorage} -> localStorage) (\s@InstanceRequirements' {} a -> s {localStorage = a} :: InstanceRequirements)
+
+-- | The type of local storage that is required.
+--
+-- -   For instance types with hard disk drive (HDD) storage, specify
+--     @hdd@.
+--
+-- -   For instance types with solid state drive (SSD) storage, specify
+--     @ssd@.
+--
+-- Default: @hdd@ and @ssd@
+instanceRequirements_localStorageTypes :: Lens.Lens' InstanceRequirements (Prelude.Maybe [LocalStorageType])
+instanceRequirements_localStorageTypes = Lens.lens (\InstanceRequirements' {localStorageTypes} -> localStorageTypes) (\s@InstanceRequirements' {} a -> s {localStorageTypes = a} :: InstanceRequirements) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum and maximum amount of memory per vCPU, in GiB.
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_memoryGiBPerVCpu :: Lens.Lens' InstanceRequirements (Prelude.Maybe MemoryGiBPerVCpu)
+instanceRequirements_memoryGiBPerVCpu = Lens.lens (\InstanceRequirements' {memoryGiBPerVCpu} -> memoryGiBPerVCpu) (\s@InstanceRequirements' {} a -> s {memoryGiBPerVCpu = a} :: InstanceRequirements)
+
+-- | The minimum and maximum amount of memory, in MiB.
+instanceRequirements_memoryMiB :: Lens.Lens' InstanceRequirements (Prelude.Maybe MemoryMiB)
+instanceRequirements_memoryMiB = Lens.lens (\InstanceRequirements' {memoryMiB} -> memoryMiB) (\s@InstanceRequirements' {} a -> s {memoryMiB = a} :: InstanceRequirements)
+
+-- | The minimum and maximum amount of network bandwidth, in gigabits per
+-- second (Gbps).
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_networkBandwidthGbps :: Lens.Lens' InstanceRequirements (Prelude.Maybe NetworkBandwidthGbps)
+instanceRequirements_networkBandwidthGbps = Lens.lens (\InstanceRequirements' {networkBandwidthGbps} -> networkBandwidthGbps) (\s@InstanceRequirements' {} a -> s {networkBandwidthGbps = a} :: InstanceRequirements)
+
+-- | The minimum and maximum number of network interfaces.
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_networkInterfaceCount :: Lens.Lens' InstanceRequirements (Prelude.Maybe NetworkInterfaceCount)
+instanceRequirements_networkInterfaceCount = Lens.lens (\InstanceRequirements' {networkInterfaceCount} -> networkInterfaceCount) (\s@InstanceRequirements' {} a -> s {networkInterfaceCount = a} :: InstanceRequirements)
+
+-- | The price protection threshold for On-Demand Instances. This is the
+-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
+-- above the least expensive current generation M, C, or R instance type
+-- with your specified attributes. When Amazon EC2 selects instance types
+-- with your attributes, it excludes instance types priced above your
+-- threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @20@
+instanceRequirements_onDemandMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Int)
+instanceRequirements_onDemandMaxPricePercentageOverLowestPrice = Lens.lens (\InstanceRequirements' {onDemandMaxPricePercentageOverLowestPrice} -> onDemandMaxPricePercentageOverLowestPrice) (\s@InstanceRequirements' {} a -> s {onDemandMaxPricePercentageOverLowestPrice = a} :: InstanceRequirements)
+
+-- | Indicates whether instance types must support hibernation for On-Demand
+-- Instances.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
+--
+-- Default: @false@
+instanceRequirements_requireHibernateSupport :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Bool)
+instanceRequirements_requireHibernateSupport = Lens.lens (\InstanceRequirements' {requireHibernateSupport} -> requireHibernateSupport) (\s@InstanceRequirements' {} a -> s {requireHibernateSupport = a} :: InstanceRequirements)
+
+-- | The price protection threshold for Spot Instances. This is the maximum
+-- you’ll pay for a Spot Instance, expressed as a percentage above the
+-- least expensive current generation M, C, or R instance type with your
+-- specified attributes. When Amazon EC2 selects instance types with your
+-- attributes, it excludes instance types priced above your threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @100@
+instanceRequirements_spotMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirements (Prelude.Maybe Prelude.Int)
+instanceRequirements_spotMaxPricePercentageOverLowestPrice = Lens.lens (\InstanceRequirements' {spotMaxPricePercentageOverLowestPrice} -> spotMaxPricePercentageOverLowestPrice) (\s@InstanceRequirements' {} a -> s {spotMaxPricePercentageOverLowestPrice = a} :: InstanceRequirements)
+
+-- | The minimum and maximum amount of total local storage, in GB.
+--
+-- Default: No minimum or maximum limits
+instanceRequirements_totalLocalStorageGB :: Lens.Lens' InstanceRequirements (Prelude.Maybe TotalLocalStorageGB)
+instanceRequirements_totalLocalStorageGB = Lens.lens (\InstanceRequirements' {totalLocalStorageGB} -> totalLocalStorageGB) (\s@InstanceRequirements' {} a -> s {totalLocalStorageGB = a} :: InstanceRequirements)
+
+-- | The minimum and maximum number of vCPUs.
+instanceRequirements_vCpuCount :: Lens.Lens' InstanceRequirements (Prelude.Maybe VCpuCountRange)
+instanceRequirements_vCpuCount = Lens.lens (\InstanceRequirements' {vCpuCount} -> vCpuCount) (\s@InstanceRequirements' {} a -> s {vCpuCount = a} :: InstanceRequirements)
+
+instance Data.FromXML InstanceRequirements where
+  parseXML x =
+    InstanceRequirements'
+      Prelude.<$> (x Data..@? "acceleratorCount")
+      Prelude.<*> ( x
+                      Data..@? "acceleratorManufacturerSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "acceleratorNameSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "acceleratorTotalMemoryMiB")
+      Prelude.<*> ( x
+                      Data..@? "acceleratorTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "allowedInstanceTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "bareMetal")
+      Prelude.<*> (x Data..@? "baselineEbsBandwidthMbps")
+      Prelude.<*> (x Data..@? "burstablePerformance")
+      Prelude.<*> ( x
+                      Data..@? "cpuManufacturerSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "excludedInstanceTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "instanceGenerationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "localStorage")
+      Prelude.<*> ( x
+                      Data..@? "localStorageTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "memoryGiBPerVCpu")
+      Prelude.<*> (x Data..@? "memoryMiB")
+      Prelude.<*> (x Data..@? "networkBandwidthGbps")
+      Prelude.<*> (x Data..@? "networkInterfaceCount")
+      Prelude.<*> ( x
+                      Data..@? "onDemandMaxPricePercentageOverLowestPrice"
+                  )
+      Prelude.<*> (x Data..@? "requireHibernateSupport")
+      Prelude.<*> (x Data..@? "spotMaxPricePercentageOverLowestPrice")
+      Prelude.<*> (x Data..@? "totalLocalStorageGB")
+      Prelude.<*> (x Data..@? "vCpuCount")
+
+instance Prelude.Hashable InstanceRequirements where
+  hashWithSalt _salt InstanceRequirements' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorCount
+      `Prelude.hashWithSalt` acceleratorManufacturers
+      `Prelude.hashWithSalt` acceleratorNames
+      `Prelude.hashWithSalt` acceleratorTotalMemoryMiB
+      `Prelude.hashWithSalt` acceleratorTypes
+      `Prelude.hashWithSalt` allowedInstanceTypes
+      `Prelude.hashWithSalt` bareMetal
+      `Prelude.hashWithSalt` baselineEbsBandwidthMbps
+      `Prelude.hashWithSalt` burstablePerformance
+      `Prelude.hashWithSalt` cpuManufacturers
+      `Prelude.hashWithSalt` excludedInstanceTypes
+      `Prelude.hashWithSalt` instanceGenerations
+      `Prelude.hashWithSalt` localStorage
+      `Prelude.hashWithSalt` localStorageTypes
+      `Prelude.hashWithSalt` memoryGiBPerVCpu
+      `Prelude.hashWithSalt` memoryMiB
+      `Prelude.hashWithSalt` networkBandwidthGbps
+      `Prelude.hashWithSalt` networkInterfaceCount
+      `Prelude.hashWithSalt` onDemandMaxPricePercentageOverLowestPrice
+      `Prelude.hashWithSalt` requireHibernateSupport
+      `Prelude.hashWithSalt` spotMaxPricePercentageOverLowestPrice
+      `Prelude.hashWithSalt` totalLocalStorageGB
+      `Prelude.hashWithSalt` vCpuCount
+
+instance Prelude.NFData InstanceRequirements where
+  rnf InstanceRequirements' {..} =
+    Prelude.rnf acceleratorCount
+      `Prelude.seq` Prelude.rnf acceleratorManufacturers
+      `Prelude.seq` Prelude.rnf acceleratorNames
+      `Prelude.seq` Prelude.rnf acceleratorTotalMemoryMiB
+      `Prelude.seq` Prelude.rnf acceleratorTypes
+      `Prelude.seq` Prelude.rnf allowedInstanceTypes
+      `Prelude.seq` Prelude.rnf bareMetal
+      `Prelude.seq` Prelude.rnf baselineEbsBandwidthMbps
+      `Prelude.seq` Prelude.rnf burstablePerformance
+      `Prelude.seq` Prelude.rnf cpuManufacturers
+      `Prelude.seq` Prelude.rnf excludedInstanceTypes
+      `Prelude.seq` Prelude.rnf instanceGenerations
+      `Prelude.seq` Prelude.rnf localStorage
+      `Prelude.seq` Prelude.rnf localStorageTypes
+      `Prelude.seq` Prelude.rnf memoryGiBPerVCpu
+      `Prelude.seq` Prelude.rnf memoryMiB
+      `Prelude.seq` Prelude.rnf networkBandwidthGbps
+      `Prelude.seq` Prelude.rnf networkInterfaceCount
+      `Prelude.seq` Prelude.rnf
+        onDemandMaxPricePercentageOverLowestPrice
+      `Prelude.seq` Prelude.rnf
+        requireHibernateSupport
+      `Prelude.seq` Prelude.rnf
+        spotMaxPricePercentageOverLowestPrice
+      `Prelude.seq` Prelude.rnf
+        totalLocalStorageGB
+      `Prelude.seq` Prelude.rnf vCpuCount
+
+instance Data.ToQuery InstanceRequirements where
+  toQuery InstanceRequirements' {..} =
+    Prelude.mconcat
+      [ "AcceleratorCount" Data.=: acceleratorCount,
+        Data.toQuery
+          ( Data.toQueryList "AcceleratorManufacturerSet"
+              Prelude.<$> acceleratorManufacturers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AcceleratorNameSet"
+              Prelude.<$> acceleratorNames
+          ),
+        "AcceleratorTotalMemoryMiB"
+          Data.=: acceleratorTotalMemoryMiB,
+        Data.toQuery
+          ( Data.toQueryList "AcceleratorTypeSet"
+              Prelude.<$> acceleratorTypes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AllowedInstanceTypeSet"
+              Prelude.<$> allowedInstanceTypes
+          ),
+        "BareMetal" Data.=: bareMetal,
+        "BaselineEbsBandwidthMbps"
+          Data.=: baselineEbsBandwidthMbps,
+        "BurstablePerformance" Data.=: burstablePerformance,
+        Data.toQuery
+          ( Data.toQueryList "CpuManufacturerSet"
+              Prelude.<$> cpuManufacturers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "ExcludedInstanceTypeSet"
+              Prelude.<$> excludedInstanceTypes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "InstanceGenerationSet"
+              Prelude.<$> instanceGenerations
+          ),
+        "LocalStorage" Data.=: localStorage,
+        Data.toQuery
+          ( Data.toQueryList "LocalStorageTypeSet"
+              Prelude.<$> localStorageTypes
+          ),
+        "MemoryGiBPerVCpu" Data.=: memoryGiBPerVCpu,
+        "MemoryMiB" Data.=: memoryMiB,
+        "NetworkBandwidthGbps" Data.=: networkBandwidthGbps,
+        "NetworkInterfaceCount"
+          Data.=: networkInterfaceCount,
+        "OnDemandMaxPricePercentageOverLowestPrice"
+          Data.=: onDemandMaxPricePercentageOverLowestPrice,
+        "RequireHibernateSupport"
+          Data.=: requireHibernateSupport,
+        "SpotMaxPricePercentageOverLowestPrice"
+          Data.=: spotMaxPricePercentageOverLowestPrice,
+        "TotalLocalStorageGB" Data.=: totalLocalStorageGB,
+        "VCpuCount" Data.=: vCpuCount
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceRequirementsRequest.hs b/gen/Amazonka/EC2/Types/InstanceRequirementsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceRequirementsRequest.hs
@@ -0,0 +1,1047 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceRequirementsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceRequirementsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AcceleratorCountRequest
+import Amazonka.EC2.Types.AcceleratorManufacturer
+import Amazonka.EC2.Types.AcceleratorName
+import Amazonka.EC2.Types.AcceleratorTotalMemoryMiBRequest
+import Amazonka.EC2.Types.AcceleratorType
+import Amazonka.EC2.Types.BareMetal
+import Amazonka.EC2.Types.BaselineEbsBandwidthMbpsRequest
+import Amazonka.EC2.Types.BurstablePerformance
+import Amazonka.EC2.Types.CpuManufacturer
+import Amazonka.EC2.Types.InstanceGeneration
+import Amazonka.EC2.Types.LocalStorage
+import Amazonka.EC2.Types.LocalStorageType
+import Amazonka.EC2.Types.MemoryGiBPerVCpuRequest
+import Amazonka.EC2.Types.MemoryMiBRequest
+import Amazonka.EC2.Types.NetworkBandwidthGbpsRequest
+import Amazonka.EC2.Types.NetworkInterfaceCountRequest
+import Amazonka.EC2.Types.TotalLocalStorageGBRequest
+import Amazonka.EC2.Types.VCpuCountRangeRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with these
+-- attributes.
+--
+-- When you specify multiple attributes, you get instance types that
+-- satisfy all of the specified attributes. If you specify multiple values
+-- for an attribute, you get instance types that satisfy any of the
+-- specified values.
+--
+-- To limit the list of instance types from which Amazon EC2 can identify
+-- matching instance types, you can use one of the following parameters,
+-- but not both in the same request:
+--
+-- -   @AllowedInstanceTypes@ - The instance types to include in the list.
+--     All other instance types are ignored, even if they match your
+--     specified attributes.
+--
+-- -   @ExcludedInstanceTypes@ - The instance types to exclude from the
+--     list, even if they match your specified attributes.
+--
+-- You must specify @VCpuCount@ and @MemoryMiB@. All other attributes are
+-- optional. Any unspecified optional attribute is set to its default.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for EC2 Fleet>,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html Attribute-based instance type selection for Spot Fleet>,
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html Spot placement score>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newInstanceRequirementsRequest' smart constructor.
+data InstanceRequirementsRequest = InstanceRequirementsRequest'
+  { -- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+    -- Web Services Inferentia chips) on an instance.
+    --
+    -- To exclude accelerator-enabled instance types, set @Max@ to @0@.
+    --
+    -- Default: No minimum or maximum limits
+    acceleratorCount :: Prelude.Maybe AcceleratorCountRequest,
+    -- | Indicates whether instance types must have accelerators by specific
+    -- manufacturers.
+    --
+    -- -   For instance types with NVIDIA devices, specify @nvidia@.
+    --
+    -- -   For instance types with AMD devices, specify @amd@.
+    --
+    -- -   For instance types with Amazon Web Services devices, specify
+    --     @amazon-web-services@.
+    --
+    -- -   For instance types with Xilinx devices, specify @xilinx@.
+    --
+    -- Default: Any manufacturer
+    acceleratorManufacturers :: Prelude.Maybe [AcceleratorManufacturer],
+    -- | The accelerators that must be on the instance type.
+    --
+    -- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
+    --
+    -- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
+    --
+    -- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
+    --
+    -- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
+    --
+    -- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
+    --
+    -- -   For instance types with AMD Radeon Pro V520 GPUs, specify
+    --     @radeon-pro-v520@.
+    --
+    -- -   For instance types with Xilinx VU9P FPGAs, specify @ vu9p@.
+    --
+    -- -   For instance types with Amazon Web Services Inferentia chips,
+    --     specify @inferentia@.
+    --
+    -- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
+    --
+    -- Default: Any accelerator
+    acceleratorNames :: Prelude.Maybe [AcceleratorName],
+    -- | The minimum and maximum amount of total accelerator memory, in MiB.
+    --
+    -- Default: No minimum or maximum limits
+    acceleratorTotalMemoryMiB :: Prelude.Maybe AcceleratorTotalMemoryMiBRequest,
+    -- | The accelerator types that must be on the instance type.
+    --
+    -- -   To include instance types with GPU hardware, specify @gpu@.
+    --
+    -- -   To include instance types with FPGA hardware, specify @fpga@.
+    --
+    -- -   To include instance types with inference hardware, specify
+    --     @inference@.
+    --
+    -- Default: Any accelerator type
+    acceleratorTypes :: Prelude.Maybe [AcceleratorType],
+    -- | The instance types to apply your specified attributes against. All other
+    -- instance types are ignored, even if they match your specified
+    -- attributes.
+    --
+    -- You can use strings with one or more wild cards, represented by an
+    -- asterisk (@*@), to allow an instance type, size, or generation. The
+    -- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+    --
+    -- For example, if you specify @c5*@,Amazon EC2 will allow the entire C5
+    -- instance family, which includes all C5a and C5n instance types. If you
+    -- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
+    -- not the M5n instance types.
+    --
+    -- If you specify @AllowedInstanceTypes@, you can\'t specify
+    -- @ExcludedInstanceTypes@.
+    --
+    -- Default: All instance types
+    allowedInstanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether bare metal instance types must be included, excluded,
+    -- or required.
+    --
+    -- -   To include bare metal instance types, specify @included@.
+    --
+    -- -   To require only bare metal instance types, specify @required@.
+    --
+    -- -   To exclude bare metal instance types, specify @excluded@.
+    --
+    -- Default: @excluded@
+    bareMetal :: Prelude.Maybe BareMetal,
+    -- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- Default: No minimum or maximum limits
+    baselineEbsBandwidthMbps :: Prelude.Maybe BaselineEbsBandwidthMbpsRequest,
+    -- | Indicates whether burstable performance T instance types are included,
+    -- excluded, or required. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
+    --
+    -- -   To include burstable performance instance types, specify @included@.
+    --
+    -- -   To require only burstable performance instance types, specify
+    --     @required@.
+    --
+    -- -   To exclude burstable performance instance types, specify @excluded@.
+    --
+    -- Default: @excluded@
+    burstablePerformance :: Prelude.Maybe BurstablePerformance,
+    -- | The CPU manufacturers to include.
+    --
+    -- -   For instance types with Intel CPUs, specify @intel@.
+    --
+    -- -   For instance types with AMD CPUs, specify @amd@.
+    --
+    -- -   For instance types with Amazon Web Services CPUs, specify
+    --     @amazon-web-services@.
+    --
+    -- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
+    -- will be launched with a compatible CPU architecture based on the Amazon
+    -- Machine Image (AMI) that you specify in your launch template.
+    --
+    -- Default: Any manufacturer
+    cpuManufacturers :: Prelude.Maybe [CpuManufacturer],
+    -- | The instance types to exclude.
+    --
+    -- You can use strings with one or more wild cards, represented by an
+    -- asterisk (@*@), to exclude an instance family, type, size, or
+    -- generation. The following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@,
+    -- @r*@, @*3*@.
+    --
+    -- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
+    -- instance family, which includes all C5a and C5n instance types. If you
+    -- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
+    -- not the M5n instance types.
+    --
+    -- If you specify @ExcludedInstanceTypes@, you can\'t specify
+    -- @AllowedInstanceTypes@.
+    --
+    -- Default: No excluded instance types
+    excludedInstanceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether current or previous generation instance types are
+    -- included. The current generation instance types are recommended for use.
+    -- Current generation instance types are typically the latest two to three
+    -- generations in each instance family. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- For current generation instance types, specify @current@.
+    --
+    -- For previous generation instance types, specify @previous@.
+    --
+    -- Default: Current and previous generation instance types
+    instanceGenerations :: Prelude.Maybe [InstanceGeneration],
+    -- | Indicates whether instance types with instance store volumes are
+    -- included, excluded, or required. For more information,
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- -   To include instance types with instance store volumes, specify
+    --     @included@.
+    --
+    -- -   To require only instance types with instance store volumes, specify
+    --     @required@.
+    --
+    -- -   To exclude instance types with instance store volumes, specify
+    --     @excluded@.
+    --
+    -- Default: @included@
+    localStorage :: Prelude.Maybe LocalStorage,
+    -- | The type of local storage that is required.
+    --
+    -- -   For instance types with hard disk drive (HDD) storage, specify
+    --     @hdd@.
+    --
+    -- -   For instance types with solid state drive (SSD) storage, specify
+    --     @ssd@.
+    --
+    -- Default: @hdd@ and @ssd@
+    localStorageTypes :: Prelude.Maybe [LocalStorageType],
+    -- | The minimum and maximum amount of memory per vCPU, in GiB.
+    --
+    -- Default: No minimum or maximum limits
+    memoryGiBPerVCpu :: Prelude.Maybe MemoryGiBPerVCpuRequest,
+    -- | The minimum and maximum amount of network bandwidth, in gigabits per
+    -- second (Gbps).
+    --
+    -- Default: No minimum or maximum limits
+    networkBandwidthGbps :: Prelude.Maybe NetworkBandwidthGbpsRequest,
+    -- | The minimum and maximum number of network interfaces.
+    --
+    -- Default: No minimum or maximum limits
+    networkInterfaceCount :: Prelude.Maybe NetworkInterfaceCountRequest,
+    -- | The price protection threshold for On-Demand Instances. This is the
+    -- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
+    -- above the least expensive current generation M, C, or R instance type
+    -- with your specified attributes. When Amazon EC2 selects instance types
+    -- with your attributes, it excludes instance types priced above your
+    -- threshold.
+    --
+    -- The parameter accepts an integer, which Amazon EC2 interprets as a
+    -- percentage.
+    --
+    -- To turn off price protection, specify a high value, such as @999999@.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+    -- and
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+    --
+    -- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+    -- protection threshold is applied based on the per-vCPU or per-memory
+    -- price instead of the per-instance price.
+    --
+    -- Default: @20@
+    onDemandMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether instance types must support hibernation for On-Demand
+    -- Instances.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
+    --
+    -- Default: @false@
+    requireHibernateSupport :: Prelude.Maybe Prelude.Bool,
+    -- | The price protection threshold for Spot Instance. This is the maximum
+    -- you’ll pay for an Spot Instance, expressed as a percentage above the
+    -- least expensive current generation M, C, or R instance type with your
+    -- specified attributes. When Amazon EC2 selects instance types with your
+    -- attributes, it excludes instance types priced above your threshold.
+    --
+    -- The parameter accepts an integer, which Amazon EC2 interprets as a
+    -- percentage.
+    --
+    -- To turn off price protection, specify a high value, such as @999999@.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+    -- and
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+    --
+    -- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+    -- protection threshold is applied based on the per-vCPU or per-memory
+    -- price instead of the per-instance price.
+    --
+    -- Default: @100@
+    spotMaxPricePercentageOverLowestPrice :: Prelude.Maybe Prelude.Int,
+    -- | The minimum and maximum amount of total local storage, in GB.
+    --
+    -- Default: No minimum or maximum limits
+    totalLocalStorageGB :: Prelude.Maybe TotalLocalStorageGBRequest,
+    -- | The minimum and maximum number of vCPUs.
+    vCpuCount :: VCpuCountRangeRequest,
+    -- | The minimum and maximum amount of memory, in MiB.
+    memoryMiB :: MemoryMiBRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceRequirementsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceleratorCount', 'instanceRequirementsRequest_acceleratorCount' - The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+-- Web Services Inferentia chips) on an instance.
+--
+-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'acceleratorManufacturers', 'instanceRequirementsRequest_acceleratorManufacturers' - Indicates whether instance types must have accelerators by specific
+-- manufacturers.
+--
+-- -   For instance types with NVIDIA devices, specify @nvidia@.
+--
+-- -   For instance types with AMD devices, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services devices, specify
+--     @amazon-web-services@.
+--
+-- -   For instance types with Xilinx devices, specify @xilinx@.
+--
+-- Default: Any manufacturer
+--
+-- 'acceleratorNames', 'instanceRequirementsRequest_acceleratorNames' - The accelerators that must be on the instance type.
+--
+-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
+--
+-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
+--
+-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
+--
+-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
+--
+-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
+--
+-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
+--     @radeon-pro-v520@.
+--
+-- -   For instance types with Xilinx VU9P FPGAs, specify @ vu9p@.
+--
+-- -   For instance types with Amazon Web Services Inferentia chips,
+--     specify @inferentia@.
+--
+-- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
+--
+-- Default: Any accelerator
+--
+-- 'acceleratorTotalMemoryMiB', 'instanceRequirementsRequest_acceleratorTotalMemoryMiB' - The minimum and maximum amount of total accelerator memory, in MiB.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'acceleratorTypes', 'instanceRequirementsRequest_acceleratorTypes' - The accelerator types that must be on the instance type.
+--
+-- -   To include instance types with GPU hardware, specify @gpu@.
+--
+-- -   To include instance types with FPGA hardware, specify @fpga@.
+--
+-- -   To include instance types with inference hardware, specify
+--     @inference@.
+--
+-- Default: Any accelerator type
+--
+-- 'allowedInstanceTypes', 'instanceRequirementsRequest_allowedInstanceTypes' - The instance types to apply your specified attributes against. All other
+-- instance types are ignored, even if they match your specified
+-- attributes.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to allow an instance type, size, or generation. The
+-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will allow the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @AllowedInstanceTypes@, you can\'t specify
+-- @ExcludedInstanceTypes@.
+--
+-- Default: All instance types
+--
+-- 'bareMetal', 'instanceRequirementsRequest_bareMetal' - Indicates whether bare metal instance types must be included, excluded,
+-- or required.
+--
+-- -   To include bare metal instance types, specify @included@.
+--
+-- -   To require only bare metal instance types, specify @required@.
+--
+-- -   To exclude bare metal instance types, specify @excluded@.
+--
+-- Default: @excluded@
+--
+-- 'baselineEbsBandwidthMbps', 'instanceRequirementsRequest_baselineEbsBandwidthMbps' - The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'burstablePerformance', 'instanceRequirementsRequest_burstablePerformance' - Indicates whether burstable performance T instance types are included,
+-- excluded, or required. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
+--
+-- -   To include burstable performance instance types, specify @included@.
+--
+-- -   To require only burstable performance instance types, specify
+--     @required@.
+--
+-- -   To exclude burstable performance instance types, specify @excluded@.
+--
+-- Default: @excluded@
+--
+-- 'cpuManufacturers', 'instanceRequirementsRequest_cpuManufacturers' - The CPU manufacturers to include.
+--
+-- -   For instance types with Intel CPUs, specify @intel@.
+--
+-- -   For instance types with AMD CPUs, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services CPUs, specify
+--     @amazon-web-services@.
+--
+-- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
+-- will be launched with a compatible CPU architecture based on the Amazon
+-- Machine Image (AMI) that you specify in your launch template.
+--
+-- Default: Any manufacturer
+--
+-- 'excludedInstanceTypes', 'instanceRequirementsRequest_excludedInstanceTypes' - The instance types to exclude.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to exclude an instance family, type, size, or
+-- generation. The following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@,
+-- @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @ExcludedInstanceTypes@, you can\'t specify
+-- @AllowedInstanceTypes@.
+--
+-- Default: No excluded instance types
+--
+-- 'instanceGenerations', 'instanceRequirementsRequest_instanceGenerations' - Indicates whether current or previous generation instance types are
+-- included. The current generation instance types are recommended for use.
+-- Current generation instance types are typically the latest two to three
+-- generations in each instance family. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For current generation instance types, specify @current@.
+--
+-- For previous generation instance types, specify @previous@.
+--
+-- Default: Current and previous generation instance types
+--
+-- 'localStorage', 'instanceRequirementsRequest_localStorage' - Indicates whether instance types with instance store volumes are
+-- included, excluded, or required. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
+-- in the /Amazon EC2 User Guide/.
+--
+-- -   To include instance types with instance store volumes, specify
+--     @included@.
+--
+-- -   To require only instance types with instance store volumes, specify
+--     @required@.
+--
+-- -   To exclude instance types with instance store volumes, specify
+--     @excluded@.
+--
+-- Default: @included@
+--
+-- 'localStorageTypes', 'instanceRequirementsRequest_localStorageTypes' - The type of local storage that is required.
+--
+-- -   For instance types with hard disk drive (HDD) storage, specify
+--     @hdd@.
+--
+-- -   For instance types with solid state drive (SSD) storage, specify
+--     @ssd@.
+--
+-- Default: @hdd@ and @ssd@
+--
+-- 'memoryGiBPerVCpu', 'instanceRequirementsRequest_memoryGiBPerVCpu' - The minimum and maximum amount of memory per vCPU, in GiB.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'networkBandwidthGbps', 'instanceRequirementsRequest_networkBandwidthGbps' - The minimum and maximum amount of network bandwidth, in gigabits per
+-- second (Gbps).
+--
+-- Default: No minimum or maximum limits
+--
+-- 'networkInterfaceCount', 'instanceRequirementsRequest_networkInterfaceCount' - The minimum and maximum number of network interfaces.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'onDemandMaxPricePercentageOverLowestPrice', 'instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice' - The price protection threshold for On-Demand Instances. This is the
+-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
+-- above the least expensive current generation M, C, or R instance type
+-- with your specified attributes. When Amazon EC2 selects instance types
+-- with your attributes, it excludes instance types priced above your
+-- threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @20@
+--
+-- 'requireHibernateSupport', 'instanceRequirementsRequest_requireHibernateSupport' - Indicates whether instance types must support hibernation for On-Demand
+-- Instances.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
+--
+-- Default: @false@
+--
+-- 'spotMaxPricePercentageOverLowestPrice', 'instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice' - The price protection threshold for Spot Instance. This is the maximum
+-- you’ll pay for an Spot Instance, expressed as a percentage above the
+-- least expensive current generation M, C, or R instance type with your
+-- specified attributes. When Amazon EC2 selects instance types with your
+-- attributes, it excludes instance types priced above your threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @100@
+--
+-- 'totalLocalStorageGB', 'instanceRequirementsRequest_totalLocalStorageGB' - The minimum and maximum amount of total local storage, in GB.
+--
+-- Default: No minimum or maximum limits
+--
+-- 'vCpuCount', 'instanceRequirementsRequest_vCpuCount' - The minimum and maximum number of vCPUs.
+--
+-- 'memoryMiB', 'instanceRequirementsRequest_memoryMiB' - The minimum and maximum amount of memory, in MiB.
+newInstanceRequirementsRequest ::
+  -- | 'vCpuCount'
+  VCpuCountRangeRequest ->
+  -- | 'memoryMiB'
+  MemoryMiBRequest ->
+  InstanceRequirementsRequest
+newInstanceRequirementsRequest
+  pVCpuCount_
+  pMemoryMiB_ =
+    InstanceRequirementsRequest'
+      { acceleratorCount =
+          Prelude.Nothing,
+        acceleratorManufacturers = Prelude.Nothing,
+        acceleratorNames = Prelude.Nothing,
+        acceleratorTotalMemoryMiB = Prelude.Nothing,
+        acceleratorTypes = Prelude.Nothing,
+        allowedInstanceTypes = Prelude.Nothing,
+        bareMetal = Prelude.Nothing,
+        baselineEbsBandwidthMbps = Prelude.Nothing,
+        burstablePerformance = Prelude.Nothing,
+        cpuManufacturers = Prelude.Nothing,
+        excludedInstanceTypes = Prelude.Nothing,
+        instanceGenerations = Prelude.Nothing,
+        localStorage = Prelude.Nothing,
+        localStorageTypes = Prelude.Nothing,
+        memoryGiBPerVCpu = Prelude.Nothing,
+        networkBandwidthGbps = Prelude.Nothing,
+        networkInterfaceCount = Prelude.Nothing,
+        onDemandMaxPricePercentageOverLowestPrice =
+          Prelude.Nothing,
+        requireHibernateSupport = Prelude.Nothing,
+        spotMaxPricePercentageOverLowestPrice =
+          Prelude.Nothing,
+        totalLocalStorageGB = Prelude.Nothing,
+        vCpuCount = pVCpuCount_,
+        memoryMiB = pMemoryMiB_
+      }
+
+-- | The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon
+-- Web Services Inferentia chips) on an instance.
+--
+-- To exclude accelerator-enabled instance types, set @Max@ to @0@.
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_acceleratorCount :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe AcceleratorCountRequest)
+instanceRequirementsRequest_acceleratorCount = Lens.lens (\InstanceRequirementsRequest' {acceleratorCount} -> acceleratorCount) (\s@InstanceRequirementsRequest' {} a -> s {acceleratorCount = a} :: InstanceRequirementsRequest)
+
+-- | Indicates whether instance types must have accelerators by specific
+-- manufacturers.
+--
+-- -   For instance types with NVIDIA devices, specify @nvidia@.
+--
+-- -   For instance types with AMD devices, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services devices, specify
+--     @amazon-web-services@.
+--
+-- -   For instance types with Xilinx devices, specify @xilinx@.
+--
+-- Default: Any manufacturer
+instanceRequirementsRequest_acceleratorManufacturers :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [AcceleratorManufacturer])
+instanceRequirementsRequest_acceleratorManufacturers = Lens.lens (\InstanceRequirementsRequest' {acceleratorManufacturers} -> acceleratorManufacturers) (\s@InstanceRequirementsRequest' {} a -> s {acceleratorManufacturers = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The accelerators that must be on the instance type.
+--
+-- -   For instance types with NVIDIA A100 GPUs, specify @a100@.
+--
+-- -   For instance types with NVIDIA V100 GPUs, specify @v100@.
+--
+-- -   For instance types with NVIDIA K80 GPUs, specify @k80@.
+--
+-- -   For instance types with NVIDIA T4 GPUs, specify @t4@.
+--
+-- -   For instance types with NVIDIA M60 GPUs, specify @m60@.
+--
+-- -   For instance types with AMD Radeon Pro V520 GPUs, specify
+--     @radeon-pro-v520@.
+--
+-- -   For instance types with Xilinx VU9P FPGAs, specify @ vu9p@.
+--
+-- -   For instance types with Amazon Web Services Inferentia chips,
+--     specify @inferentia@.
+--
+-- -   For instance types with NVIDIA GRID K520 GPUs, specify @k520@.
+--
+-- Default: Any accelerator
+instanceRequirementsRequest_acceleratorNames :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [AcceleratorName])
+instanceRequirementsRequest_acceleratorNames = Lens.lens (\InstanceRequirementsRequest' {acceleratorNames} -> acceleratorNames) (\s@InstanceRequirementsRequest' {} a -> s {acceleratorNames = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum and maximum amount of total accelerator memory, in MiB.
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_acceleratorTotalMemoryMiB :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe AcceleratorTotalMemoryMiBRequest)
+instanceRequirementsRequest_acceleratorTotalMemoryMiB = Lens.lens (\InstanceRequirementsRequest' {acceleratorTotalMemoryMiB} -> acceleratorTotalMemoryMiB) (\s@InstanceRequirementsRequest' {} a -> s {acceleratorTotalMemoryMiB = a} :: InstanceRequirementsRequest)
+
+-- | The accelerator types that must be on the instance type.
+--
+-- -   To include instance types with GPU hardware, specify @gpu@.
+--
+-- -   To include instance types with FPGA hardware, specify @fpga@.
+--
+-- -   To include instance types with inference hardware, specify
+--     @inference@.
+--
+-- Default: Any accelerator type
+instanceRequirementsRequest_acceleratorTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [AcceleratorType])
+instanceRequirementsRequest_acceleratorTypes = Lens.lens (\InstanceRequirementsRequest' {acceleratorTypes} -> acceleratorTypes) (\s@InstanceRequirementsRequest' {} a -> s {acceleratorTypes = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance types to apply your specified attributes against. All other
+-- instance types are ignored, even if they match your specified
+-- attributes.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to allow an instance type, size, or generation. The
+-- following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@, @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will allow the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will allow all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @AllowedInstanceTypes@, you can\'t specify
+-- @ExcludedInstanceTypes@.
+--
+-- Default: All instance types
+instanceRequirementsRequest_allowedInstanceTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [Prelude.Text])
+instanceRequirementsRequest_allowedInstanceTypes = Lens.lens (\InstanceRequirementsRequest' {allowedInstanceTypes} -> allowedInstanceTypes) (\s@InstanceRequirementsRequest' {} a -> s {allowedInstanceTypes = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether bare metal instance types must be included, excluded,
+-- or required.
+--
+-- -   To include bare metal instance types, specify @included@.
+--
+-- -   To require only bare metal instance types, specify @required@.
+--
+-- -   To exclude bare metal instance types, specify @excluded@.
+--
+-- Default: @excluded@
+instanceRequirementsRequest_bareMetal :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe BareMetal)
+instanceRequirementsRequest_bareMetal = Lens.lens (\InstanceRequirementsRequest' {bareMetal} -> bareMetal) (\s@InstanceRequirementsRequest' {} a -> s {bareMetal = a} :: InstanceRequirementsRequest)
+
+-- | The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html Amazon EBS–optimized instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_baselineEbsBandwidthMbps :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe BaselineEbsBandwidthMbpsRequest)
+instanceRequirementsRequest_baselineEbsBandwidthMbps = Lens.lens (\InstanceRequirementsRequest' {baselineEbsBandwidthMbps} -> baselineEbsBandwidthMbps) (\s@InstanceRequirementsRequest' {} a -> s {baselineEbsBandwidthMbps = a} :: InstanceRequirementsRequest)
+
+-- | Indicates whether burstable performance T instance types are included,
+-- excluded, or required. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html Burstable performance instances>.
+--
+-- -   To include burstable performance instance types, specify @included@.
+--
+-- -   To require only burstable performance instance types, specify
+--     @required@.
+--
+-- -   To exclude burstable performance instance types, specify @excluded@.
+--
+-- Default: @excluded@
+instanceRequirementsRequest_burstablePerformance :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe BurstablePerformance)
+instanceRequirementsRequest_burstablePerformance = Lens.lens (\InstanceRequirementsRequest' {burstablePerformance} -> burstablePerformance) (\s@InstanceRequirementsRequest' {} a -> s {burstablePerformance = a} :: InstanceRequirementsRequest)
+
+-- | The CPU manufacturers to include.
+--
+-- -   For instance types with Intel CPUs, specify @intel@.
+--
+-- -   For instance types with AMD CPUs, specify @amd@.
+--
+-- -   For instance types with Amazon Web Services CPUs, specify
+--     @amazon-web-services@.
+--
+-- Don\'t confuse the CPU manufacturer with the CPU architecture. Instances
+-- will be launched with a compatible CPU architecture based on the Amazon
+-- Machine Image (AMI) that you specify in your launch template.
+--
+-- Default: Any manufacturer
+instanceRequirementsRequest_cpuManufacturers :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [CpuManufacturer])
+instanceRequirementsRequest_cpuManufacturers = Lens.lens (\InstanceRequirementsRequest' {cpuManufacturers} -> cpuManufacturers) (\s@InstanceRequirementsRequest' {} a -> s {cpuManufacturers = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance types to exclude.
+--
+-- You can use strings with one or more wild cards, represented by an
+-- asterisk (@*@), to exclude an instance family, type, size, or
+-- generation. The following are examples: @m5.8xlarge@, @c5*.*@, @m5a.*@,
+-- @r*@, @*3*@.
+--
+-- For example, if you specify @c5*@,Amazon EC2 will exclude the entire C5
+-- instance family, which includes all C5a and C5n instance types. If you
+-- specify @m5a.*@, Amazon EC2 will exclude all the M5a instance types, but
+-- not the M5n instance types.
+--
+-- If you specify @ExcludedInstanceTypes@, you can\'t specify
+-- @AllowedInstanceTypes@.
+--
+-- Default: No excluded instance types
+instanceRequirementsRequest_excludedInstanceTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [Prelude.Text])
+instanceRequirementsRequest_excludedInstanceTypes = Lens.lens (\InstanceRequirementsRequest' {excludedInstanceTypes} -> excludedInstanceTypes) (\s@InstanceRequirementsRequest' {} a -> s {excludedInstanceTypes = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether current or previous generation instance types are
+-- included. The current generation instance types are recommended for use.
+-- Current generation instance types are typically the latest two to three
+-- generations in each instance family. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- For current generation instance types, specify @current@.
+--
+-- For previous generation instance types, specify @previous@.
+--
+-- Default: Current and previous generation instance types
+instanceRequirementsRequest_instanceGenerations :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [InstanceGeneration])
+instanceRequirementsRequest_instanceGenerations = Lens.lens (\InstanceRequirementsRequest' {instanceGenerations} -> instanceGenerations) (\s@InstanceRequirementsRequest' {} a -> s {instanceGenerations = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether instance types with instance store volumes are
+-- included, excluded, or required. For more information,
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 instance store>
+-- in the /Amazon EC2 User Guide/.
+--
+-- -   To include instance types with instance store volumes, specify
+--     @included@.
+--
+-- -   To require only instance types with instance store volumes, specify
+--     @required@.
+--
+-- -   To exclude instance types with instance store volumes, specify
+--     @excluded@.
+--
+-- Default: @included@
+instanceRequirementsRequest_localStorage :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe LocalStorage)
+instanceRequirementsRequest_localStorage = Lens.lens (\InstanceRequirementsRequest' {localStorage} -> localStorage) (\s@InstanceRequirementsRequest' {} a -> s {localStorage = a} :: InstanceRequirementsRequest)
+
+-- | The type of local storage that is required.
+--
+-- -   For instance types with hard disk drive (HDD) storage, specify
+--     @hdd@.
+--
+-- -   For instance types with solid state drive (SSD) storage, specify
+--     @ssd@.
+--
+-- Default: @hdd@ and @ssd@
+instanceRequirementsRequest_localStorageTypes :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe [LocalStorageType])
+instanceRequirementsRequest_localStorageTypes = Lens.lens (\InstanceRequirementsRequest' {localStorageTypes} -> localStorageTypes) (\s@InstanceRequirementsRequest' {} a -> s {localStorageTypes = a} :: InstanceRequirementsRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The minimum and maximum amount of memory per vCPU, in GiB.
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_memoryGiBPerVCpu :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe MemoryGiBPerVCpuRequest)
+instanceRequirementsRequest_memoryGiBPerVCpu = Lens.lens (\InstanceRequirementsRequest' {memoryGiBPerVCpu} -> memoryGiBPerVCpu) (\s@InstanceRequirementsRequest' {} a -> s {memoryGiBPerVCpu = a} :: InstanceRequirementsRequest)
+
+-- | The minimum and maximum amount of network bandwidth, in gigabits per
+-- second (Gbps).
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_networkBandwidthGbps :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe NetworkBandwidthGbpsRequest)
+instanceRequirementsRequest_networkBandwidthGbps = Lens.lens (\InstanceRequirementsRequest' {networkBandwidthGbps} -> networkBandwidthGbps) (\s@InstanceRequirementsRequest' {} a -> s {networkBandwidthGbps = a} :: InstanceRequirementsRequest)
+
+-- | The minimum and maximum number of network interfaces.
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_networkInterfaceCount :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe NetworkInterfaceCountRequest)
+instanceRequirementsRequest_networkInterfaceCount = Lens.lens (\InstanceRequirementsRequest' {networkInterfaceCount} -> networkInterfaceCount) (\s@InstanceRequirementsRequest' {} a -> s {networkInterfaceCount = a} :: InstanceRequirementsRequest)
+
+-- | The price protection threshold for On-Demand Instances. This is the
+-- maximum you’ll pay for an On-Demand Instance, expressed as a percentage
+-- above the least expensive current generation M, C, or R instance type
+-- with your specified attributes. When Amazon EC2 selects instance types
+-- with your attributes, it excludes instance types priced above your
+-- threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @20@
+instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe Prelude.Int)
+instanceRequirementsRequest_onDemandMaxPricePercentageOverLowestPrice = Lens.lens (\InstanceRequirementsRequest' {onDemandMaxPricePercentageOverLowestPrice} -> onDemandMaxPricePercentageOverLowestPrice) (\s@InstanceRequirementsRequest' {} a -> s {onDemandMaxPricePercentageOverLowestPrice = a} :: InstanceRequirementsRequest)
+
+-- | Indicates whether instance types must support hibernation for On-Demand
+-- Instances.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>.
+--
+-- Default: @false@
+instanceRequirementsRequest_requireHibernateSupport :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe Prelude.Bool)
+instanceRequirementsRequest_requireHibernateSupport = Lens.lens (\InstanceRequirementsRequest' {requireHibernateSupport} -> requireHibernateSupport) (\s@InstanceRequirementsRequest' {} a -> s {requireHibernateSupport = a} :: InstanceRequirementsRequest)
+
+-- | The price protection threshold for Spot Instance. This is the maximum
+-- you’ll pay for an Spot Instance, expressed as a percentage above the
+-- least expensive current generation M, C, or R instance type with your
+-- specified attributes. When Amazon EC2 selects instance types with your
+-- attributes, it excludes instance types priced above your threshold.
+--
+-- The parameter accepts an integer, which Amazon EC2 interprets as a
+-- percentage.
+--
+-- To turn off price protection, specify a high value, such as @999999@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html GetSpotPlacementScores>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html GetInstanceTypesFromInstanceRequirements>.
+--
+-- If you set @TargetCapacityUnitType@ to @vcpu@ or @memory-mib@, the price
+-- protection threshold is applied based on the per-vCPU or per-memory
+-- price instead of the per-instance price.
+--
+-- Default: @100@
+instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe Prelude.Int)
+instanceRequirementsRequest_spotMaxPricePercentageOverLowestPrice = Lens.lens (\InstanceRequirementsRequest' {spotMaxPricePercentageOverLowestPrice} -> spotMaxPricePercentageOverLowestPrice) (\s@InstanceRequirementsRequest' {} a -> s {spotMaxPricePercentageOverLowestPrice = a} :: InstanceRequirementsRequest)
+
+-- | The minimum and maximum amount of total local storage, in GB.
+--
+-- Default: No minimum or maximum limits
+instanceRequirementsRequest_totalLocalStorageGB :: Lens.Lens' InstanceRequirementsRequest (Prelude.Maybe TotalLocalStorageGBRequest)
+instanceRequirementsRequest_totalLocalStorageGB = Lens.lens (\InstanceRequirementsRequest' {totalLocalStorageGB} -> totalLocalStorageGB) (\s@InstanceRequirementsRequest' {} a -> s {totalLocalStorageGB = a} :: InstanceRequirementsRequest)
+
+-- | The minimum and maximum number of vCPUs.
+instanceRequirementsRequest_vCpuCount :: Lens.Lens' InstanceRequirementsRequest VCpuCountRangeRequest
+instanceRequirementsRequest_vCpuCount = Lens.lens (\InstanceRequirementsRequest' {vCpuCount} -> vCpuCount) (\s@InstanceRequirementsRequest' {} a -> s {vCpuCount = a} :: InstanceRequirementsRequest)
+
+-- | The minimum and maximum amount of memory, in MiB.
+instanceRequirementsRequest_memoryMiB :: Lens.Lens' InstanceRequirementsRequest MemoryMiBRequest
+instanceRequirementsRequest_memoryMiB = Lens.lens (\InstanceRequirementsRequest' {memoryMiB} -> memoryMiB) (\s@InstanceRequirementsRequest' {} a -> s {memoryMiB = a} :: InstanceRequirementsRequest)
+
+instance Prelude.Hashable InstanceRequirementsRequest where
+  hashWithSalt _salt InstanceRequirementsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceleratorCount
+      `Prelude.hashWithSalt` acceleratorManufacturers
+      `Prelude.hashWithSalt` acceleratorNames
+      `Prelude.hashWithSalt` acceleratorTotalMemoryMiB
+      `Prelude.hashWithSalt` acceleratorTypes
+      `Prelude.hashWithSalt` allowedInstanceTypes
+      `Prelude.hashWithSalt` bareMetal
+      `Prelude.hashWithSalt` baselineEbsBandwidthMbps
+      `Prelude.hashWithSalt` burstablePerformance
+      `Prelude.hashWithSalt` cpuManufacturers
+      `Prelude.hashWithSalt` excludedInstanceTypes
+      `Prelude.hashWithSalt` instanceGenerations
+      `Prelude.hashWithSalt` localStorage
+      `Prelude.hashWithSalt` localStorageTypes
+      `Prelude.hashWithSalt` memoryGiBPerVCpu
+      `Prelude.hashWithSalt` networkBandwidthGbps
+      `Prelude.hashWithSalt` networkInterfaceCount
+      `Prelude.hashWithSalt` onDemandMaxPricePercentageOverLowestPrice
+      `Prelude.hashWithSalt` requireHibernateSupport
+      `Prelude.hashWithSalt` spotMaxPricePercentageOverLowestPrice
+      `Prelude.hashWithSalt` totalLocalStorageGB
+      `Prelude.hashWithSalt` vCpuCount
+      `Prelude.hashWithSalt` memoryMiB
+
+instance Prelude.NFData InstanceRequirementsRequest where
+  rnf InstanceRequirementsRequest' {..} =
+    Prelude.rnf acceleratorCount
+      `Prelude.seq` Prelude.rnf acceleratorManufacturers
+      `Prelude.seq` Prelude.rnf acceleratorNames
+      `Prelude.seq` Prelude.rnf acceleratorTotalMemoryMiB
+      `Prelude.seq` Prelude.rnf acceleratorTypes
+      `Prelude.seq` Prelude.rnf allowedInstanceTypes
+      `Prelude.seq` Prelude.rnf bareMetal
+      `Prelude.seq` Prelude.rnf baselineEbsBandwidthMbps
+      `Prelude.seq` Prelude.rnf burstablePerformance
+      `Prelude.seq` Prelude.rnf cpuManufacturers
+      `Prelude.seq` Prelude.rnf excludedInstanceTypes
+      `Prelude.seq` Prelude.rnf instanceGenerations
+      `Prelude.seq` Prelude.rnf localStorage
+      `Prelude.seq` Prelude.rnf localStorageTypes
+      `Prelude.seq` Prelude.rnf memoryGiBPerVCpu
+      `Prelude.seq` Prelude.rnf networkBandwidthGbps
+      `Prelude.seq` Prelude.rnf networkInterfaceCount
+      `Prelude.seq` Prelude.rnf
+        onDemandMaxPricePercentageOverLowestPrice
+      `Prelude.seq` Prelude.rnf
+        requireHibernateSupport
+      `Prelude.seq` Prelude.rnf
+        spotMaxPricePercentageOverLowestPrice
+      `Prelude.seq` Prelude.rnf
+        totalLocalStorageGB
+      `Prelude.seq` Prelude.rnf vCpuCount
+      `Prelude.seq` Prelude.rnf memoryMiB
+
+instance Data.ToQuery InstanceRequirementsRequest where
+  toQuery InstanceRequirementsRequest' {..} =
+    Prelude.mconcat
+      [ "AcceleratorCount" Data.=: acceleratorCount,
+        Data.toQuery
+          ( Data.toQueryList "AcceleratorManufacturer"
+              Prelude.<$> acceleratorManufacturers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AcceleratorName"
+              Prelude.<$> acceleratorNames
+          ),
+        "AcceleratorTotalMemoryMiB"
+          Data.=: acceleratorTotalMemoryMiB,
+        Data.toQuery
+          ( Data.toQueryList "AcceleratorType"
+              Prelude.<$> acceleratorTypes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "AllowedInstanceType"
+              Prelude.<$> allowedInstanceTypes
+          ),
+        "BareMetal" Data.=: bareMetal,
+        "BaselineEbsBandwidthMbps"
+          Data.=: baselineEbsBandwidthMbps,
+        "BurstablePerformance" Data.=: burstablePerformance,
+        Data.toQuery
+          ( Data.toQueryList "CpuManufacturer"
+              Prelude.<$> cpuManufacturers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "ExcludedInstanceType"
+              Prelude.<$> excludedInstanceTypes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "InstanceGeneration"
+              Prelude.<$> instanceGenerations
+          ),
+        "LocalStorage" Data.=: localStorage,
+        Data.toQuery
+          ( Data.toQueryList "LocalStorageType"
+              Prelude.<$> localStorageTypes
+          ),
+        "MemoryGiBPerVCpu" Data.=: memoryGiBPerVCpu,
+        "NetworkBandwidthGbps" Data.=: networkBandwidthGbps,
+        "NetworkInterfaceCount"
+          Data.=: networkInterfaceCount,
+        "OnDemandMaxPricePercentageOverLowestPrice"
+          Data.=: onDemandMaxPricePercentageOverLowestPrice,
+        "RequireHibernateSupport"
+          Data.=: requireHibernateSupport,
+        "SpotMaxPricePercentageOverLowestPrice"
+          Data.=: spotMaxPricePercentageOverLowestPrice,
+        "TotalLocalStorageGB" Data.=: totalLocalStorageGB,
+        "VCpuCount" Data.=: vCpuCount,
+        "MemoryMiB" Data.=: memoryMiB
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceRequirementsWithMetadataRequest.hs b/gen/Amazonka/EC2/Types/InstanceRequirementsWithMetadataRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceRequirementsWithMetadataRequest.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceRequirementsWithMetadataRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceRequirementsWithMetadataRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ArchitectureType
+import Amazonka.EC2.Types.InstanceRequirementsRequest
+import Amazonka.EC2.Types.VirtualizationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The architecture type, virtualization type, and other attributes for the
+-- instance types. When you specify instance attributes, Amazon EC2 will
+-- identify instance types with those attributes.
+--
+-- If you specify @InstanceRequirementsWithMetadataRequest@, you can\'t
+-- specify @InstanceTypes@.
+--
+-- /See:/ 'newInstanceRequirementsWithMetadataRequest' smart constructor.
+data InstanceRequirementsWithMetadataRequest = InstanceRequirementsWithMetadataRequest'
+  { -- | The architecture type.
+    architectureTypes :: Prelude.Maybe [ArchitectureType],
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with those
+    -- attributes.
+    instanceRequirements :: Prelude.Maybe InstanceRequirementsRequest,
+    -- | The virtualization type.
+    virtualizationTypes :: Prelude.Maybe [VirtualizationType]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceRequirementsWithMetadataRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'architectureTypes', 'instanceRequirementsWithMetadataRequest_architectureTypes' - The architecture type.
+--
+-- 'instanceRequirements', 'instanceRequirementsWithMetadataRequest_instanceRequirements' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- 'virtualizationTypes', 'instanceRequirementsWithMetadataRequest_virtualizationTypes' - The virtualization type.
+newInstanceRequirementsWithMetadataRequest ::
+  InstanceRequirementsWithMetadataRequest
+newInstanceRequirementsWithMetadataRequest =
+  InstanceRequirementsWithMetadataRequest'
+    { architectureTypes =
+        Prelude.Nothing,
+      instanceRequirements =
+        Prelude.Nothing,
+      virtualizationTypes =
+        Prelude.Nothing
+    }
+
+-- | The architecture type.
+instanceRequirementsWithMetadataRequest_architectureTypes :: Lens.Lens' InstanceRequirementsWithMetadataRequest (Prelude.Maybe [ArchitectureType])
+instanceRequirementsWithMetadataRequest_architectureTypes = Lens.lens (\InstanceRequirementsWithMetadataRequest' {architectureTypes} -> architectureTypes) (\s@InstanceRequirementsWithMetadataRequest' {} a -> s {architectureTypes = a} :: InstanceRequirementsWithMetadataRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+instanceRequirementsWithMetadataRequest_instanceRequirements :: Lens.Lens' InstanceRequirementsWithMetadataRequest (Prelude.Maybe InstanceRequirementsRequest)
+instanceRequirementsWithMetadataRequest_instanceRequirements = Lens.lens (\InstanceRequirementsWithMetadataRequest' {instanceRequirements} -> instanceRequirements) (\s@InstanceRequirementsWithMetadataRequest' {} a -> s {instanceRequirements = a} :: InstanceRequirementsWithMetadataRequest)
+
+-- | The virtualization type.
+instanceRequirementsWithMetadataRequest_virtualizationTypes :: Lens.Lens' InstanceRequirementsWithMetadataRequest (Prelude.Maybe [VirtualizationType])
+instanceRequirementsWithMetadataRequest_virtualizationTypes = Lens.lens (\InstanceRequirementsWithMetadataRequest' {virtualizationTypes} -> virtualizationTypes) (\s@InstanceRequirementsWithMetadataRequest' {} a -> s {virtualizationTypes = a} :: InstanceRequirementsWithMetadataRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    InstanceRequirementsWithMetadataRequest
+  where
+  hashWithSalt
+    _salt
+    InstanceRequirementsWithMetadataRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` architectureTypes
+        `Prelude.hashWithSalt` instanceRequirements
+        `Prelude.hashWithSalt` virtualizationTypes
+
+instance
+  Prelude.NFData
+    InstanceRequirementsWithMetadataRequest
+  where
+  rnf InstanceRequirementsWithMetadataRequest' {..} =
+    Prelude.rnf architectureTypes
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf virtualizationTypes
+
+instance
+  Data.ToQuery
+    InstanceRequirementsWithMetadataRequest
+  where
+  toQuery InstanceRequirementsWithMetadataRequest' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "ArchitectureType"
+              Prelude.<$> architectureTypes
+          ),
+        "InstanceRequirements" Data.=: instanceRequirements,
+        Data.toQuery
+          ( Data.toQueryList "VirtualizationType"
+              Prelude.<$> virtualizationTypes
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceSpecification.hs b/gen/Amazonka/EC2/Types/InstanceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceSpecification.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The instance details to specify which volumes should be snapshotted.
+--
+-- /See:/ 'newInstanceSpecification' smart constructor.
+data InstanceSpecification = InstanceSpecification'
+  { -- | Excludes the root volume from being snapshotted.
+    excludeBootVolume :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the data (non-root) volumes to exclude from the multi-volume
+    -- snapshot set. If you specify the ID of the root volume, the request
+    -- fails. To exclude the root volume, use __ExcludeBootVolume__.
+    --
+    -- You can specify up to 40 volume IDs per request.
+    excludeDataVolumeIds :: Prelude.Maybe [Prelude.Text],
+    -- | The instance to specify which volumes should be snapshotted.
+    instanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludeBootVolume', 'instanceSpecification_excludeBootVolume' - Excludes the root volume from being snapshotted.
+--
+-- 'excludeDataVolumeIds', 'instanceSpecification_excludeDataVolumeIds' - The IDs of the data (non-root) volumes to exclude from the multi-volume
+-- snapshot set. If you specify the ID of the root volume, the request
+-- fails. To exclude the root volume, use __ExcludeBootVolume__.
+--
+-- You can specify up to 40 volume IDs per request.
+--
+-- 'instanceId', 'instanceSpecification_instanceId' - The instance to specify which volumes should be snapshotted.
+newInstanceSpecification ::
+  InstanceSpecification
+newInstanceSpecification =
+  InstanceSpecification'
+    { excludeBootVolume =
+        Prelude.Nothing,
+      excludeDataVolumeIds = Prelude.Nothing,
+      instanceId = Prelude.Nothing
+    }
+
+-- | Excludes the root volume from being snapshotted.
+instanceSpecification_excludeBootVolume :: Lens.Lens' InstanceSpecification (Prelude.Maybe Prelude.Bool)
+instanceSpecification_excludeBootVolume = Lens.lens (\InstanceSpecification' {excludeBootVolume} -> excludeBootVolume) (\s@InstanceSpecification' {} a -> s {excludeBootVolume = a} :: InstanceSpecification)
+
+-- | The IDs of the data (non-root) volumes to exclude from the multi-volume
+-- snapshot set. If you specify the ID of the root volume, the request
+-- fails. To exclude the root volume, use __ExcludeBootVolume__.
+--
+-- You can specify up to 40 volume IDs per request.
+instanceSpecification_excludeDataVolumeIds :: Lens.Lens' InstanceSpecification (Prelude.Maybe [Prelude.Text])
+instanceSpecification_excludeDataVolumeIds = Lens.lens (\InstanceSpecification' {excludeDataVolumeIds} -> excludeDataVolumeIds) (\s@InstanceSpecification' {} a -> s {excludeDataVolumeIds = a} :: InstanceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance to specify which volumes should be snapshotted.
+instanceSpecification_instanceId :: Lens.Lens' InstanceSpecification (Prelude.Maybe Prelude.Text)
+instanceSpecification_instanceId = Lens.lens (\InstanceSpecification' {instanceId} -> instanceId) (\s@InstanceSpecification' {} a -> s {instanceId = a} :: InstanceSpecification)
+
+instance Prelude.Hashable InstanceSpecification where
+  hashWithSalt _salt InstanceSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` excludeBootVolume
+      `Prelude.hashWithSalt` excludeDataVolumeIds
+      `Prelude.hashWithSalt` instanceId
+
+instance Prelude.NFData InstanceSpecification where
+  rnf InstanceSpecification' {..} =
+    Prelude.rnf excludeBootVolume
+      `Prelude.seq` Prelude.rnf excludeDataVolumeIds
+      `Prelude.seq` Prelude.rnf instanceId
+
+instance Data.ToQuery InstanceSpecification where
+  toQuery InstanceSpecification' {..} =
+    Prelude.mconcat
+      [ "ExcludeBootVolume" Data.=: excludeBootVolume,
+        Data.toQuery
+          ( Data.toQueryList "ExcludeDataVolumeId"
+              Prelude.<$> excludeDataVolumeIds
+          ),
+        "InstanceId" Data.=: instanceId
+      ]
diff --git a/gen/Amazonka/EC2/Types/InstanceState.hs b/gen/Amazonka/EC2/Types/InstanceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceState.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceStateName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the current state of an instance.
+--
+-- /See:/ 'newInstanceState' smart constructor.
+data InstanceState = InstanceState'
+  { -- | The current state of the instance.
+    name :: InstanceStateName,
+    -- | The state of the instance as a 16-bit unsigned integer.
+    --
+    -- The high byte is all of the bits between 2^8 and (2^16)-1, which equals
+    -- decimal values between 256 and 65,535. These numerical values are used
+    -- for internal purposes and should be ignored.
+    --
+    -- The low byte is all of the bits between 2^0 and (2^8)-1, which equals
+    -- decimal values between 0 and 255.
+    --
+    -- The valid values for instance-state-code will all be in the range of the
+    -- low byte and they are:
+    --
+    -- -   @0@ : @pending@
+    --
+    -- -   @16@ : @running@
+    --
+    -- -   @32@ : @shutting-down@
+    --
+    -- -   @48@ : @terminated@
+    --
+    -- -   @64@ : @stopping@
+    --
+    -- -   @80@ : @stopped@
+    --
+    -- You can ignore the high byte value by zeroing out all of the bits above
+    -- 2^8 or 256 in decimal.
+    code :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'instanceState_name' - The current state of the instance.
+--
+-- 'code', 'instanceState_code' - The state of the instance as a 16-bit unsigned integer.
+--
+-- The high byte is all of the bits between 2^8 and (2^16)-1, which equals
+-- decimal values between 256 and 65,535. These numerical values are used
+-- for internal purposes and should be ignored.
+--
+-- The low byte is all of the bits between 2^0 and (2^8)-1, which equals
+-- decimal values between 0 and 255.
+--
+-- The valid values for instance-state-code will all be in the range of the
+-- low byte and they are:
+--
+-- -   @0@ : @pending@
+--
+-- -   @16@ : @running@
+--
+-- -   @32@ : @shutting-down@
+--
+-- -   @48@ : @terminated@
+--
+-- -   @64@ : @stopping@
+--
+-- -   @80@ : @stopped@
+--
+-- You can ignore the high byte value by zeroing out all of the bits above
+-- 2^8 or 256 in decimal.
+newInstanceState ::
+  -- | 'name'
+  InstanceStateName ->
+  -- | 'code'
+  Prelude.Int ->
+  InstanceState
+newInstanceState pName_ pCode_ =
+  InstanceState' {name = pName_, code = pCode_}
+
+-- | The current state of the instance.
+instanceState_name :: Lens.Lens' InstanceState InstanceStateName
+instanceState_name = Lens.lens (\InstanceState' {name} -> name) (\s@InstanceState' {} a -> s {name = a} :: InstanceState)
+
+-- | The state of the instance as a 16-bit unsigned integer.
+--
+-- The high byte is all of the bits between 2^8 and (2^16)-1, which equals
+-- decimal values between 256 and 65,535. These numerical values are used
+-- for internal purposes and should be ignored.
+--
+-- The low byte is all of the bits between 2^0 and (2^8)-1, which equals
+-- decimal values between 0 and 255.
+--
+-- The valid values for instance-state-code will all be in the range of the
+-- low byte and they are:
+--
+-- -   @0@ : @pending@
+--
+-- -   @16@ : @running@
+--
+-- -   @32@ : @shutting-down@
+--
+-- -   @48@ : @terminated@
+--
+-- -   @64@ : @stopping@
+--
+-- -   @80@ : @stopped@
+--
+-- You can ignore the high byte value by zeroing out all of the bits above
+-- 2^8 or 256 in decimal.
+instanceState_code :: Lens.Lens' InstanceState Prelude.Int
+instanceState_code = Lens.lens (\InstanceState' {code} -> code) (\s@InstanceState' {} a -> s {code = a} :: InstanceState)
+
+instance Data.FromXML InstanceState where
+  parseXML x =
+    InstanceState'
+      Prelude.<$> (x Data..@ "name")
+      Prelude.<*> (x Data..@ "code")
+
+instance Prelude.Hashable InstanceState where
+  hashWithSalt _salt InstanceState' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` code
+
+instance Prelude.NFData InstanceState where
+  rnf InstanceState' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf code
diff --git a/gen/Amazonka/EC2/Types/InstanceStateChange.hs b/gen/Amazonka/EC2/Types/InstanceStateChange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStateChange.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStateChange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStateChange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an instance state change.
+--
+-- /See:/ 'newInstanceStateChange' smart constructor.
+data InstanceStateChange = InstanceStateChange'
+  { -- | The current state of the instance.
+    currentState :: Prelude.Maybe InstanceState,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The previous state of the instance.
+    previousState :: Prelude.Maybe InstanceState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceStateChange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currentState', 'instanceStateChange_currentState' - The current state of the instance.
+--
+-- 'instanceId', 'instanceStateChange_instanceId' - The ID of the instance.
+--
+-- 'previousState', 'instanceStateChange_previousState' - The previous state of the instance.
+newInstanceStateChange ::
+  InstanceStateChange
+newInstanceStateChange =
+  InstanceStateChange'
+    { currentState =
+        Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      previousState = Prelude.Nothing
+    }
+
+-- | The current state of the instance.
+instanceStateChange_currentState :: Lens.Lens' InstanceStateChange (Prelude.Maybe InstanceState)
+instanceStateChange_currentState = Lens.lens (\InstanceStateChange' {currentState} -> currentState) (\s@InstanceStateChange' {} a -> s {currentState = a} :: InstanceStateChange)
+
+-- | The ID of the instance.
+instanceStateChange_instanceId :: Lens.Lens' InstanceStateChange (Prelude.Maybe Prelude.Text)
+instanceStateChange_instanceId = Lens.lens (\InstanceStateChange' {instanceId} -> instanceId) (\s@InstanceStateChange' {} a -> s {instanceId = a} :: InstanceStateChange)
+
+-- | The previous state of the instance.
+instanceStateChange_previousState :: Lens.Lens' InstanceStateChange (Prelude.Maybe InstanceState)
+instanceStateChange_previousState = Lens.lens (\InstanceStateChange' {previousState} -> previousState) (\s@InstanceStateChange' {} a -> s {previousState = a} :: InstanceStateChange)
+
+instance Data.FromXML InstanceStateChange where
+  parseXML x =
+    InstanceStateChange'
+      Prelude.<$> (x Data..@? "currentState")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "previousState")
+
+instance Prelude.Hashable InstanceStateChange where
+  hashWithSalt _salt InstanceStateChange' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentState
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` previousState
+
+instance Prelude.NFData InstanceStateChange where
+  rnf InstanceStateChange' {..} =
+    Prelude.rnf currentState
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf previousState
diff --git a/gen/Amazonka/EC2/Types/InstanceStateName.hs b/gen/Amazonka/EC2/Types/InstanceStateName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStateName.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStateName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStateName
+  ( InstanceStateName
+      ( ..,
+        InstanceStateName_Pending,
+        InstanceStateName_Running,
+        InstanceStateName_Shutting_down,
+        InstanceStateName_Stopped,
+        InstanceStateName_Stopping,
+        InstanceStateName_Terminated
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceStateName = InstanceStateName'
+  { fromInstanceStateName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceStateName_Pending :: InstanceStateName
+pattern InstanceStateName_Pending = InstanceStateName' "pending"
+
+pattern InstanceStateName_Running :: InstanceStateName
+pattern InstanceStateName_Running = InstanceStateName' "running"
+
+pattern InstanceStateName_Shutting_down :: InstanceStateName
+pattern InstanceStateName_Shutting_down = InstanceStateName' "shutting-down"
+
+pattern InstanceStateName_Stopped :: InstanceStateName
+pattern InstanceStateName_Stopped = InstanceStateName' "stopped"
+
+pattern InstanceStateName_Stopping :: InstanceStateName
+pattern InstanceStateName_Stopping = InstanceStateName' "stopping"
+
+pattern InstanceStateName_Terminated :: InstanceStateName
+pattern InstanceStateName_Terminated = InstanceStateName' "terminated"
+
+{-# COMPLETE
+  InstanceStateName_Pending,
+  InstanceStateName_Running,
+  InstanceStateName_Shutting_down,
+  InstanceStateName_Stopped,
+  InstanceStateName_Stopping,
+  InstanceStateName_Terminated,
+  InstanceStateName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceStatus.hs b/gen/Amazonka/EC2/Types/InstanceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStatus.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceState
+import Amazonka.EC2.Types.InstanceStatusEvent
+import Amazonka.EC2.Types.InstanceStatusSummary
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of an instance.
+--
+-- /See:/ 'newInstanceStatus' smart constructor.
+data InstanceStatus = InstanceStatus'
+  { -- | The Availability Zone of the instance.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Any scheduled events associated with the instance.
+    events :: Prelude.Maybe [InstanceStatusEvent],
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The intended state of the instance. DescribeInstanceStatus requires that
+    -- an instance be in the @running@ state.
+    instanceState :: Prelude.Maybe InstanceState,
+    -- | Reports impaired functionality that stems from issues internal to the
+    -- instance, such as impaired reachability.
+    instanceStatus :: Prelude.Maybe InstanceStatusSummary,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | Reports impaired functionality that stems from issues related to the
+    -- systems that support an instance, such as hardware failures and network
+    -- connectivity problems.
+    systemStatus :: Prelude.Maybe InstanceStatusSummary
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'instanceStatus_availabilityZone' - The Availability Zone of the instance.
+--
+-- 'events', 'instanceStatus_events' - Any scheduled events associated with the instance.
+--
+-- 'instanceId', 'instanceStatus_instanceId' - The ID of the instance.
+--
+-- 'instanceState', 'instanceStatus_instanceState' - The intended state of the instance. DescribeInstanceStatus requires that
+-- an instance be in the @running@ state.
+--
+-- 'instanceStatus', 'instanceStatus_instanceStatus' - Reports impaired functionality that stems from issues internal to the
+-- instance, such as impaired reachability.
+--
+-- 'outpostArn', 'instanceStatus_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'systemStatus', 'instanceStatus_systemStatus' - Reports impaired functionality that stems from issues related to the
+-- systems that support an instance, such as hardware failures and network
+-- connectivity problems.
+newInstanceStatus ::
+  InstanceStatus
+newInstanceStatus =
+  InstanceStatus'
+    { availabilityZone = Prelude.Nothing,
+      events = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      instanceState = Prelude.Nothing,
+      instanceStatus = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      systemStatus = Prelude.Nothing
+    }
+
+-- | The Availability Zone of the instance.
+instanceStatus_availabilityZone :: Lens.Lens' InstanceStatus (Prelude.Maybe Prelude.Text)
+instanceStatus_availabilityZone = Lens.lens (\InstanceStatus' {availabilityZone} -> availabilityZone) (\s@InstanceStatus' {} a -> s {availabilityZone = a} :: InstanceStatus)
+
+-- | Any scheduled events associated with the instance.
+instanceStatus_events :: Lens.Lens' InstanceStatus (Prelude.Maybe [InstanceStatusEvent])
+instanceStatus_events = Lens.lens (\InstanceStatus' {events} -> events) (\s@InstanceStatus' {} a -> s {events = a} :: InstanceStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the instance.
+instanceStatus_instanceId :: Lens.Lens' InstanceStatus (Prelude.Maybe Prelude.Text)
+instanceStatus_instanceId = Lens.lens (\InstanceStatus' {instanceId} -> instanceId) (\s@InstanceStatus' {} a -> s {instanceId = a} :: InstanceStatus)
+
+-- | The intended state of the instance. DescribeInstanceStatus requires that
+-- an instance be in the @running@ state.
+instanceStatus_instanceState :: Lens.Lens' InstanceStatus (Prelude.Maybe InstanceState)
+instanceStatus_instanceState = Lens.lens (\InstanceStatus' {instanceState} -> instanceState) (\s@InstanceStatus' {} a -> s {instanceState = a} :: InstanceStatus)
+
+-- | Reports impaired functionality that stems from issues internal to the
+-- instance, such as impaired reachability.
+instanceStatus_instanceStatus :: Lens.Lens' InstanceStatus (Prelude.Maybe InstanceStatusSummary)
+instanceStatus_instanceStatus = Lens.lens (\InstanceStatus' {instanceStatus} -> instanceStatus) (\s@InstanceStatus' {} a -> s {instanceStatus = a} :: InstanceStatus)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+instanceStatus_outpostArn :: Lens.Lens' InstanceStatus (Prelude.Maybe Prelude.Text)
+instanceStatus_outpostArn = Lens.lens (\InstanceStatus' {outpostArn} -> outpostArn) (\s@InstanceStatus' {} a -> s {outpostArn = a} :: InstanceStatus)
+
+-- | Reports impaired functionality that stems from issues related to the
+-- systems that support an instance, such as hardware failures and network
+-- connectivity problems.
+instanceStatus_systemStatus :: Lens.Lens' InstanceStatus (Prelude.Maybe InstanceStatusSummary)
+instanceStatus_systemStatus = Lens.lens (\InstanceStatus' {systemStatus} -> systemStatus) (\s@InstanceStatus' {} a -> s {systemStatus = a} :: InstanceStatus)
+
+instance Data.FromXML InstanceStatus where
+  parseXML x =
+    InstanceStatus'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> ( x
+                      Data..@? "eventsSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "instanceState")
+      Prelude.<*> (x Data..@? "instanceStatus")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "systemStatus")
+
+instance Prelude.Hashable InstanceStatus where
+  hashWithSalt _salt InstanceStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceState
+      `Prelude.hashWithSalt` instanceStatus
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` systemStatus
+
+instance Prelude.NFData InstanceStatus where
+  rnf InstanceStatus' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceState
+      `Prelude.seq` Prelude.rnf instanceStatus
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf systemStatus
diff --git a/gen/Amazonka/EC2/Types/InstanceStatusDetails.hs b/gen/Amazonka/EC2/Types/InstanceStatusDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStatusDetails.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStatusDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStatusDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.StatusName
+import Amazonka.EC2.Types.StatusType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instance status.
+--
+-- /See:/ 'newInstanceStatusDetails' smart constructor.
+data InstanceStatusDetails = InstanceStatusDetails'
+  { -- | The time when a status check failed. For an instance that was launched
+    -- and impaired, this is the time when the instance was launched.
+    impairedSince :: Prelude.Maybe Data.ISO8601,
+    -- | The type of instance status.
+    name :: Prelude.Maybe StatusName,
+    -- | The status.
+    status :: Prelude.Maybe StatusType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceStatusDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'impairedSince', 'instanceStatusDetails_impairedSince' - The time when a status check failed. For an instance that was launched
+-- and impaired, this is the time when the instance was launched.
+--
+-- 'name', 'instanceStatusDetails_name' - The type of instance status.
+--
+-- 'status', 'instanceStatusDetails_status' - The status.
+newInstanceStatusDetails ::
+  InstanceStatusDetails
+newInstanceStatusDetails =
+  InstanceStatusDetails'
+    { impairedSince =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The time when a status check failed. For an instance that was launched
+-- and impaired, this is the time when the instance was launched.
+instanceStatusDetails_impairedSince :: Lens.Lens' InstanceStatusDetails (Prelude.Maybe Prelude.UTCTime)
+instanceStatusDetails_impairedSince = Lens.lens (\InstanceStatusDetails' {impairedSince} -> impairedSince) (\s@InstanceStatusDetails' {} a -> s {impairedSince = a} :: InstanceStatusDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The type of instance status.
+instanceStatusDetails_name :: Lens.Lens' InstanceStatusDetails (Prelude.Maybe StatusName)
+instanceStatusDetails_name = Lens.lens (\InstanceStatusDetails' {name} -> name) (\s@InstanceStatusDetails' {} a -> s {name = a} :: InstanceStatusDetails)
+
+-- | The status.
+instanceStatusDetails_status :: Lens.Lens' InstanceStatusDetails (Prelude.Maybe StatusType)
+instanceStatusDetails_status = Lens.lens (\InstanceStatusDetails' {status} -> status) (\s@InstanceStatusDetails' {} a -> s {status = a} :: InstanceStatusDetails)
+
+instance Data.FromXML InstanceStatusDetails where
+  parseXML x =
+    InstanceStatusDetails'
+      Prelude.<$> (x Data..@? "impairedSince")
+      Prelude.<*> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "status")
+
+instance Prelude.Hashable InstanceStatusDetails where
+  hashWithSalt _salt InstanceStatusDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` impairedSince
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData InstanceStatusDetails where
+  rnf InstanceStatusDetails' {..} =
+    Prelude.rnf impairedSince
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/InstanceStatusEvent.hs b/gen/Amazonka/EC2/Types/InstanceStatusEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStatusEvent.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStatusEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStatusEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EventCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a scheduled event for an instance.
+--
+-- /See:/ 'newInstanceStatusEvent' smart constructor.
+data InstanceStatusEvent = InstanceStatusEvent'
+  { -- | The event code.
+    code :: Prelude.Maybe EventCode,
+    -- | A description of the event.
+    --
+    -- After a scheduled event is completed, it can still be described for up
+    -- to a week. If the event has been completed, this description starts with
+    -- the following text: [Completed].
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the event.
+    instanceEventId :: Prelude.Maybe Prelude.Text,
+    -- | The latest scheduled end time for the event.
+    notAfter :: Prelude.Maybe Data.ISO8601,
+    -- | The earliest scheduled start time for the event.
+    notBefore :: Prelude.Maybe Data.ISO8601,
+    -- | The deadline for starting the event.
+    notBeforeDeadline :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceStatusEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'instanceStatusEvent_code' - The event code.
+--
+-- 'description', 'instanceStatusEvent_description' - A description of the event.
+--
+-- After a scheduled event is completed, it can still be described for up
+-- to a week. If the event has been completed, this description starts with
+-- the following text: [Completed].
+--
+-- 'instanceEventId', 'instanceStatusEvent_instanceEventId' - The ID of the event.
+--
+-- 'notAfter', 'instanceStatusEvent_notAfter' - The latest scheduled end time for the event.
+--
+-- 'notBefore', 'instanceStatusEvent_notBefore' - The earliest scheduled start time for the event.
+--
+-- 'notBeforeDeadline', 'instanceStatusEvent_notBeforeDeadline' - The deadline for starting the event.
+newInstanceStatusEvent ::
+  InstanceStatusEvent
+newInstanceStatusEvent =
+  InstanceStatusEvent'
+    { code = Prelude.Nothing,
+      description = Prelude.Nothing,
+      instanceEventId = Prelude.Nothing,
+      notAfter = Prelude.Nothing,
+      notBefore = Prelude.Nothing,
+      notBeforeDeadline = Prelude.Nothing
+    }
+
+-- | The event code.
+instanceStatusEvent_code :: Lens.Lens' InstanceStatusEvent (Prelude.Maybe EventCode)
+instanceStatusEvent_code = Lens.lens (\InstanceStatusEvent' {code} -> code) (\s@InstanceStatusEvent' {} a -> s {code = a} :: InstanceStatusEvent)
+
+-- | A description of the event.
+--
+-- After a scheduled event is completed, it can still be described for up
+-- to a week. If the event has been completed, this description starts with
+-- the following text: [Completed].
+instanceStatusEvent_description :: Lens.Lens' InstanceStatusEvent (Prelude.Maybe Prelude.Text)
+instanceStatusEvent_description = Lens.lens (\InstanceStatusEvent' {description} -> description) (\s@InstanceStatusEvent' {} a -> s {description = a} :: InstanceStatusEvent)
+
+-- | The ID of the event.
+instanceStatusEvent_instanceEventId :: Lens.Lens' InstanceStatusEvent (Prelude.Maybe Prelude.Text)
+instanceStatusEvent_instanceEventId = Lens.lens (\InstanceStatusEvent' {instanceEventId} -> instanceEventId) (\s@InstanceStatusEvent' {} a -> s {instanceEventId = a} :: InstanceStatusEvent)
+
+-- | The latest scheduled end time for the event.
+instanceStatusEvent_notAfter :: Lens.Lens' InstanceStatusEvent (Prelude.Maybe Prelude.UTCTime)
+instanceStatusEvent_notAfter = Lens.lens (\InstanceStatusEvent' {notAfter} -> notAfter) (\s@InstanceStatusEvent' {} a -> s {notAfter = a} :: InstanceStatusEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The earliest scheduled start time for the event.
+instanceStatusEvent_notBefore :: Lens.Lens' InstanceStatusEvent (Prelude.Maybe Prelude.UTCTime)
+instanceStatusEvent_notBefore = Lens.lens (\InstanceStatusEvent' {notBefore} -> notBefore) (\s@InstanceStatusEvent' {} a -> s {notBefore = a} :: InstanceStatusEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The deadline for starting the event.
+instanceStatusEvent_notBeforeDeadline :: Lens.Lens' InstanceStatusEvent (Prelude.Maybe Prelude.UTCTime)
+instanceStatusEvent_notBeforeDeadline = Lens.lens (\InstanceStatusEvent' {notBeforeDeadline} -> notBeforeDeadline) (\s@InstanceStatusEvent' {} a -> s {notBeforeDeadline = a} :: InstanceStatusEvent) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML InstanceStatusEvent where
+  parseXML x =
+    InstanceStatusEvent'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "instanceEventId")
+      Prelude.<*> (x Data..@? "notAfter")
+      Prelude.<*> (x Data..@? "notBefore")
+      Prelude.<*> (x Data..@? "notBeforeDeadline")
+
+instance Prelude.Hashable InstanceStatusEvent where
+  hashWithSalt _salt InstanceStatusEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` instanceEventId
+      `Prelude.hashWithSalt` notAfter
+      `Prelude.hashWithSalt` notBefore
+      `Prelude.hashWithSalt` notBeforeDeadline
+
+instance Prelude.NFData InstanceStatusEvent where
+  rnf InstanceStatusEvent' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf instanceEventId
+      `Prelude.seq` Prelude.rnf notAfter
+      `Prelude.seq` Prelude.rnf notBefore
+      `Prelude.seq` Prelude.rnf notBeforeDeadline
diff --git a/gen/Amazonka/EC2/Types/InstanceStatusSummary.hs b/gen/Amazonka/EC2/Types/InstanceStatusSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStatusSummary.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStatusSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStatusSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceStatusDetails
+import Amazonka.EC2.Types.SummaryStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of an instance.
+--
+-- /See:/ 'newInstanceStatusSummary' smart constructor.
+data InstanceStatusSummary = InstanceStatusSummary'
+  { -- | The system instance health or application instance health.
+    details :: Prelude.Maybe [InstanceStatusDetails],
+    -- | The status.
+    status :: SummaryStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceStatusSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'instanceStatusSummary_details' - The system instance health or application instance health.
+--
+-- 'status', 'instanceStatusSummary_status' - The status.
+newInstanceStatusSummary ::
+  -- | 'status'
+  SummaryStatus ->
+  InstanceStatusSummary
+newInstanceStatusSummary pStatus_ =
+  InstanceStatusSummary'
+    { details = Prelude.Nothing,
+      status = pStatus_
+    }
+
+-- | The system instance health or application instance health.
+instanceStatusSummary_details :: Lens.Lens' InstanceStatusSummary (Prelude.Maybe [InstanceStatusDetails])
+instanceStatusSummary_details = Lens.lens (\InstanceStatusSummary' {details} -> details) (\s@InstanceStatusSummary' {} a -> s {details = a} :: InstanceStatusSummary) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status.
+instanceStatusSummary_status :: Lens.Lens' InstanceStatusSummary SummaryStatus
+instanceStatusSummary_status = Lens.lens (\InstanceStatusSummary' {status} -> status) (\s@InstanceStatusSummary' {} a -> s {status = a} :: InstanceStatusSummary)
+
+instance Data.FromXML InstanceStatusSummary where
+  parseXML x =
+    InstanceStatusSummary'
+      Prelude.<$> ( x
+                      Data..@? "details"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "status")
+
+instance Prelude.Hashable InstanceStatusSummary where
+  hashWithSalt _salt InstanceStatusSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` details
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData InstanceStatusSummary where
+  rnf InstanceStatusSummary' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/InstanceStorageEncryptionSupport.hs b/gen/Amazonka/EC2/Types/InstanceStorageEncryptionSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStorageEncryptionSupport.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStorageEncryptionSupport
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStorageEncryptionSupport
+  ( InstanceStorageEncryptionSupport
+      ( ..,
+        InstanceStorageEncryptionSupport_Required,
+        InstanceStorageEncryptionSupport_Unsupported
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceStorageEncryptionSupport = InstanceStorageEncryptionSupport'
+  { fromInstanceStorageEncryptionSupport ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceStorageEncryptionSupport_Required :: InstanceStorageEncryptionSupport
+pattern InstanceStorageEncryptionSupport_Required = InstanceStorageEncryptionSupport' "required"
+
+pattern InstanceStorageEncryptionSupport_Unsupported :: InstanceStorageEncryptionSupport
+pattern InstanceStorageEncryptionSupport_Unsupported = InstanceStorageEncryptionSupport' "unsupported"
+
+{-# COMPLETE
+  InstanceStorageEncryptionSupport_Required,
+  InstanceStorageEncryptionSupport_Unsupported,
+  InstanceStorageEncryptionSupport'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceStorageInfo.hs b/gen/Amazonka/EC2/Types/InstanceStorageInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceStorageInfo.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceStorageInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceStorageInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DiskInfo
+import Amazonka.EC2.Types.EphemeralNvmeSupport
+import Amazonka.EC2.Types.InstanceStorageEncryptionSupport
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instance store features that are supported by the instance
+-- type.
+--
+-- /See:/ 'newInstanceStorageInfo' smart constructor.
+data InstanceStorageInfo = InstanceStorageInfo'
+  { -- | Describes the disks that are available for the instance type.
+    disks :: Prelude.Maybe [DiskInfo],
+    -- | Indicates whether data is encrypted at rest.
+    encryptionSupport :: Prelude.Maybe InstanceStorageEncryptionSupport,
+    -- | Indicates whether non-volatile memory express (NVMe) is supported.
+    nvmeSupport :: Prelude.Maybe EphemeralNvmeSupport,
+    -- | The total size of the disks, in GB.
+    totalSizeInGB :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceStorageInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'disks', 'instanceStorageInfo_disks' - Describes the disks that are available for the instance type.
+--
+-- 'encryptionSupport', 'instanceStorageInfo_encryptionSupport' - Indicates whether data is encrypted at rest.
+--
+-- 'nvmeSupport', 'instanceStorageInfo_nvmeSupport' - Indicates whether non-volatile memory express (NVMe) is supported.
+--
+-- 'totalSizeInGB', 'instanceStorageInfo_totalSizeInGB' - The total size of the disks, in GB.
+newInstanceStorageInfo ::
+  InstanceStorageInfo
+newInstanceStorageInfo =
+  InstanceStorageInfo'
+    { disks = Prelude.Nothing,
+      encryptionSupport = Prelude.Nothing,
+      nvmeSupport = Prelude.Nothing,
+      totalSizeInGB = Prelude.Nothing
+    }
+
+-- | Describes the disks that are available for the instance type.
+instanceStorageInfo_disks :: Lens.Lens' InstanceStorageInfo (Prelude.Maybe [DiskInfo])
+instanceStorageInfo_disks = Lens.lens (\InstanceStorageInfo' {disks} -> disks) (\s@InstanceStorageInfo' {} a -> s {disks = a} :: InstanceStorageInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether data is encrypted at rest.
+instanceStorageInfo_encryptionSupport :: Lens.Lens' InstanceStorageInfo (Prelude.Maybe InstanceStorageEncryptionSupport)
+instanceStorageInfo_encryptionSupport = Lens.lens (\InstanceStorageInfo' {encryptionSupport} -> encryptionSupport) (\s@InstanceStorageInfo' {} a -> s {encryptionSupport = a} :: InstanceStorageInfo)
+
+-- | Indicates whether non-volatile memory express (NVMe) is supported.
+instanceStorageInfo_nvmeSupport :: Lens.Lens' InstanceStorageInfo (Prelude.Maybe EphemeralNvmeSupport)
+instanceStorageInfo_nvmeSupport = Lens.lens (\InstanceStorageInfo' {nvmeSupport} -> nvmeSupport) (\s@InstanceStorageInfo' {} a -> s {nvmeSupport = a} :: InstanceStorageInfo)
+
+-- | The total size of the disks, in GB.
+instanceStorageInfo_totalSizeInGB :: Lens.Lens' InstanceStorageInfo (Prelude.Maybe Prelude.Integer)
+instanceStorageInfo_totalSizeInGB = Lens.lens (\InstanceStorageInfo' {totalSizeInGB} -> totalSizeInGB) (\s@InstanceStorageInfo' {} a -> s {totalSizeInGB = a} :: InstanceStorageInfo)
+
+instance Data.FromXML InstanceStorageInfo where
+  parseXML x =
+    InstanceStorageInfo'
+      Prelude.<$> ( x
+                      Data..@? "disks"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "encryptionSupport")
+      Prelude.<*> (x Data..@? "nvmeSupport")
+      Prelude.<*> (x Data..@? "totalSizeInGB")
+
+instance Prelude.Hashable InstanceStorageInfo where
+  hashWithSalt _salt InstanceStorageInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` disks
+      `Prelude.hashWithSalt` encryptionSupport
+      `Prelude.hashWithSalt` nvmeSupport
+      `Prelude.hashWithSalt` totalSizeInGB
+
+instance Prelude.NFData InstanceStorageInfo where
+  rnf InstanceStorageInfo' {..} =
+    Prelude.rnf disks
+      `Prelude.seq` Prelude.rnf encryptionSupport
+      `Prelude.seq` Prelude.rnf nvmeSupport
+      `Prelude.seq` Prelude.rnf totalSizeInGB
diff --git a/gen/Amazonka/EC2/Types/InstanceTagNotificationAttribute.hs b/gen/Amazonka/EC2/Types/InstanceTagNotificationAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceTagNotificationAttribute.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceTagNotificationAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceTagNotificationAttribute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the registered tag keys for the current Region.
+--
+-- /See:/ 'newInstanceTagNotificationAttribute' smart constructor.
+data InstanceTagNotificationAttribute = InstanceTagNotificationAttribute'
+  { -- | Indicates wheter all tag keys in the current Region are registered to
+    -- appear in scheduled event notifications. @true@ indicates that all tag
+    -- keys in the current Region are registered.
+    includeAllTagsOfInstance :: Prelude.Maybe Prelude.Bool,
+    -- | The registered tag keys.
+    instanceTagKeys :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceTagNotificationAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeAllTagsOfInstance', 'instanceTagNotificationAttribute_includeAllTagsOfInstance' - Indicates wheter all tag keys in the current Region are registered to
+-- appear in scheduled event notifications. @true@ indicates that all tag
+-- keys in the current Region are registered.
+--
+-- 'instanceTagKeys', 'instanceTagNotificationAttribute_instanceTagKeys' - The registered tag keys.
+newInstanceTagNotificationAttribute ::
+  InstanceTagNotificationAttribute
+newInstanceTagNotificationAttribute =
+  InstanceTagNotificationAttribute'
+    { includeAllTagsOfInstance =
+        Prelude.Nothing,
+      instanceTagKeys = Prelude.Nothing
+    }
+
+-- | Indicates wheter all tag keys in the current Region are registered to
+-- appear in scheduled event notifications. @true@ indicates that all tag
+-- keys in the current Region are registered.
+instanceTagNotificationAttribute_includeAllTagsOfInstance :: Lens.Lens' InstanceTagNotificationAttribute (Prelude.Maybe Prelude.Bool)
+instanceTagNotificationAttribute_includeAllTagsOfInstance = Lens.lens (\InstanceTagNotificationAttribute' {includeAllTagsOfInstance} -> includeAllTagsOfInstance) (\s@InstanceTagNotificationAttribute' {} a -> s {includeAllTagsOfInstance = a} :: InstanceTagNotificationAttribute)
+
+-- | The registered tag keys.
+instanceTagNotificationAttribute_instanceTagKeys :: Lens.Lens' InstanceTagNotificationAttribute (Prelude.Maybe [Prelude.Text])
+instanceTagNotificationAttribute_instanceTagKeys = Lens.lens (\InstanceTagNotificationAttribute' {instanceTagKeys} -> instanceTagKeys) (\s@InstanceTagNotificationAttribute' {} a -> s {instanceTagKeys = a} :: InstanceTagNotificationAttribute) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromXML
+    InstanceTagNotificationAttribute
+  where
+  parseXML x =
+    InstanceTagNotificationAttribute'
+      Prelude.<$> (x Data..@? "includeAllTagsOfInstance")
+      Prelude.<*> ( x
+                      Data..@? "instanceTagKeySet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance
+  Prelude.Hashable
+    InstanceTagNotificationAttribute
+  where
+  hashWithSalt
+    _salt
+    InstanceTagNotificationAttribute' {..} =
+      _salt
+        `Prelude.hashWithSalt` includeAllTagsOfInstance
+        `Prelude.hashWithSalt` instanceTagKeys
+
+instance
+  Prelude.NFData
+    InstanceTagNotificationAttribute
+  where
+  rnf InstanceTagNotificationAttribute' {..} =
+    Prelude.rnf includeAllTagsOfInstance
+      `Prelude.seq` Prelude.rnf instanceTagKeys
diff --git a/gen/Amazonka/EC2/Types/InstanceType.hs b/gen/Amazonka/EC2/Types/InstanceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceType.hs
@@ -0,0 +1,2932 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceType
+  ( InstanceType
+      ( ..,
+        InstanceType_A1_2xlarge,
+        InstanceType_A1_4xlarge,
+        InstanceType_A1_large,
+        InstanceType_A1_medium,
+        InstanceType_A1_metal,
+        InstanceType_A1_xlarge,
+        InstanceType_C1_medium,
+        InstanceType_C1_xlarge,
+        InstanceType_C3_2xlarge,
+        InstanceType_C3_4xlarge,
+        InstanceType_C3_8xlarge,
+        InstanceType_C3_large,
+        InstanceType_C3_xlarge,
+        InstanceType_C4_2xlarge,
+        InstanceType_C4_4xlarge,
+        InstanceType_C4_8xlarge,
+        InstanceType_C4_large,
+        InstanceType_C4_xlarge,
+        InstanceType_C5_12xlarge,
+        InstanceType_C5_18xlarge,
+        InstanceType_C5_24xlarge,
+        InstanceType_C5_2xlarge,
+        InstanceType_C5_4xlarge,
+        InstanceType_C5_9xlarge,
+        InstanceType_C5_large,
+        InstanceType_C5_metal,
+        InstanceType_C5_xlarge,
+        InstanceType_C5a_12xlarge,
+        InstanceType_C5a_16xlarge,
+        InstanceType_C5a_24xlarge,
+        InstanceType_C5a_2xlarge,
+        InstanceType_C5a_4xlarge,
+        InstanceType_C5a_8xlarge,
+        InstanceType_C5a_large,
+        InstanceType_C5a_xlarge,
+        InstanceType_C5ad_12xlarge,
+        InstanceType_C5ad_16xlarge,
+        InstanceType_C5ad_24xlarge,
+        InstanceType_C5ad_2xlarge,
+        InstanceType_C5ad_4xlarge,
+        InstanceType_C5ad_8xlarge,
+        InstanceType_C5ad_large,
+        InstanceType_C5ad_xlarge,
+        InstanceType_C5d_12xlarge,
+        InstanceType_C5d_18xlarge,
+        InstanceType_C5d_24xlarge,
+        InstanceType_C5d_2xlarge,
+        InstanceType_C5d_4xlarge,
+        InstanceType_C5d_9xlarge,
+        InstanceType_C5d_large,
+        InstanceType_C5d_metal,
+        InstanceType_C5d_xlarge,
+        InstanceType_C5n_18xlarge,
+        InstanceType_C5n_2xlarge,
+        InstanceType_C5n_4xlarge,
+        InstanceType_C5n_9xlarge,
+        InstanceType_C5n_large,
+        InstanceType_C5n_metal,
+        InstanceType_C5n_xlarge,
+        InstanceType_C6a_12xlarge,
+        InstanceType_C6a_16xlarge,
+        InstanceType_C6a_24xlarge,
+        InstanceType_C6a_2xlarge,
+        InstanceType_C6a_32xlarge,
+        InstanceType_C6a_48xlarge,
+        InstanceType_C6a_4xlarge,
+        InstanceType_C6a_8xlarge,
+        InstanceType_C6a_large,
+        InstanceType_C6a_metal,
+        InstanceType_C6a_xlarge,
+        InstanceType_C6g_12xlarge,
+        InstanceType_C6g_16xlarge,
+        InstanceType_C6g_2xlarge,
+        InstanceType_C6g_4xlarge,
+        InstanceType_C6g_8xlarge,
+        InstanceType_C6g_large,
+        InstanceType_C6g_medium,
+        InstanceType_C6g_metal,
+        InstanceType_C6g_xlarge,
+        InstanceType_C6gd_12xlarge,
+        InstanceType_C6gd_16xlarge,
+        InstanceType_C6gd_2xlarge,
+        InstanceType_C6gd_4xlarge,
+        InstanceType_C6gd_8xlarge,
+        InstanceType_C6gd_large,
+        InstanceType_C6gd_medium,
+        InstanceType_C6gd_metal,
+        InstanceType_C6gd_xlarge,
+        InstanceType_C6gn_12xlarge,
+        InstanceType_C6gn_16xlarge,
+        InstanceType_C6gn_2xlarge,
+        InstanceType_C6gn_4xlarge,
+        InstanceType_C6gn_8xlarge,
+        InstanceType_C6gn_large,
+        InstanceType_C6gn_medium,
+        InstanceType_C6gn_xlarge,
+        InstanceType_C6i_12xlarge,
+        InstanceType_C6i_16xlarge,
+        InstanceType_C6i_24xlarge,
+        InstanceType_C6i_2xlarge,
+        InstanceType_C6i_32xlarge,
+        InstanceType_C6i_4xlarge,
+        InstanceType_C6i_8xlarge,
+        InstanceType_C6i_large,
+        InstanceType_C6i_metal,
+        InstanceType_C6i_xlarge,
+        InstanceType_C6id_12xlarge,
+        InstanceType_C6id_16xlarge,
+        InstanceType_C6id_24xlarge,
+        InstanceType_C6id_2xlarge,
+        InstanceType_C6id_32xlarge,
+        InstanceType_C6id_4xlarge,
+        InstanceType_C6id_8xlarge,
+        InstanceType_C6id_large,
+        InstanceType_C6id_metal,
+        InstanceType_C6id_xlarge,
+        InstanceType_C7g_12xlarge,
+        InstanceType_C7g_16xlarge,
+        InstanceType_C7g_2xlarge,
+        InstanceType_C7g_4xlarge,
+        InstanceType_C7g_8xlarge,
+        InstanceType_C7g_large,
+        InstanceType_C7g_medium,
+        InstanceType_C7g_xlarge,
+        InstanceType_Cc1_4xlarge,
+        InstanceType_Cc2_8xlarge,
+        InstanceType_Cg1_4xlarge,
+        InstanceType_Cr1_8xlarge,
+        InstanceType_D2_2xlarge,
+        InstanceType_D2_4xlarge,
+        InstanceType_D2_8xlarge,
+        InstanceType_D2_xlarge,
+        InstanceType_D3_2xlarge,
+        InstanceType_D3_4xlarge,
+        InstanceType_D3_8xlarge,
+        InstanceType_D3_xlarge,
+        InstanceType_D3en_12xlarge,
+        InstanceType_D3en_2xlarge,
+        InstanceType_D3en_4xlarge,
+        InstanceType_D3en_6xlarge,
+        InstanceType_D3en_8xlarge,
+        InstanceType_D3en_xlarge,
+        InstanceType_Dl1_24xlarge,
+        InstanceType_F1_16xlarge,
+        InstanceType_F1_2xlarge,
+        InstanceType_F1_4xlarge,
+        InstanceType_G2_2xlarge,
+        InstanceType_G2_8xlarge,
+        InstanceType_G3_16xlarge,
+        InstanceType_G3_4xlarge,
+        InstanceType_G3_8xlarge,
+        InstanceType_G3s_xlarge,
+        InstanceType_G4ad_16xlarge,
+        InstanceType_G4ad_2xlarge,
+        InstanceType_G4ad_4xlarge,
+        InstanceType_G4ad_8xlarge,
+        InstanceType_G4ad_xlarge,
+        InstanceType_G4dn_12xlarge,
+        InstanceType_G4dn_16xlarge,
+        InstanceType_G4dn_2xlarge,
+        InstanceType_G4dn_4xlarge,
+        InstanceType_G4dn_8xlarge,
+        InstanceType_G4dn_metal,
+        InstanceType_G4dn_xlarge,
+        InstanceType_G5_12xlarge,
+        InstanceType_G5_16xlarge,
+        InstanceType_G5_24xlarge,
+        InstanceType_G5_2xlarge,
+        InstanceType_G5_48xlarge,
+        InstanceType_G5_4xlarge,
+        InstanceType_G5_8xlarge,
+        InstanceType_G5_xlarge,
+        InstanceType_G5g_16xlarge,
+        InstanceType_G5g_2xlarge,
+        InstanceType_G5g_4xlarge,
+        InstanceType_G5g_8xlarge,
+        InstanceType_G5g_metal,
+        InstanceType_G5g_xlarge,
+        InstanceType_H1_16xlarge,
+        InstanceType_H1_2xlarge,
+        InstanceType_H1_4xlarge,
+        InstanceType_H1_8xlarge,
+        InstanceType_Hi1_4xlarge,
+        InstanceType_Hpc6a_48xlarge,
+        InstanceType_Hpc6id_32xlarge,
+        InstanceType_Hs1_8xlarge,
+        InstanceType_I2_2xlarge,
+        InstanceType_I2_4xlarge,
+        InstanceType_I2_8xlarge,
+        InstanceType_I2_xlarge,
+        InstanceType_I3_16xlarge,
+        InstanceType_I3_2xlarge,
+        InstanceType_I3_4xlarge,
+        InstanceType_I3_8xlarge,
+        InstanceType_I3_large,
+        InstanceType_I3_metal,
+        InstanceType_I3_xlarge,
+        InstanceType_I3en_12xlarge,
+        InstanceType_I3en_24xlarge,
+        InstanceType_I3en_2xlarge,
+        InstanceType_I3en_3xlarge,
+        InstanceType_I3en_6xlarge,
+        InstanceType_I3en_large,
+        InstanceType_I3en_metal,
+        InstanceType_I3en_xlarge,
+        InstanceType_I4i_16xlarge,
+        InstanceType_I4i_2xlarge,
+        InstanceType_I4i_32xlarge,
+        InstanceType_I4i_4xlarge,
+        InstanceType_I4i_8xlarge,
+        InstanceType_I4i_large,
+        InstanceType_I4i_metal,
+        InstanceType_I4i_xlarge,
+        InstanceType_Im4gn_16xlarge,
+        InstanceType_Im4gn_2xlarge,
+        InstanceType_Im4gn_4xlarge,
+        InstanceType_Im4gn_8xlarge,
+        InstanceType_Im4gn_large,
+        InstanceType_Im4gn_xlarge,
+        InstanceType_Inf1_24xlarge,
+        InstanceType_Inf1_2xlarge,
+        InstanceType_Inf1_6xlarge,
+        InstanceType_Inf1_xlarge,
+        InstanceType_Is4gen_2xlarge,
+        InstanceType_Is4gen_4xlarge,
+        InstanceType_Is4gen_8xlarge,
+        InstanceType_Is4gen_large,
+        InstanceType_Is4gen_medium,
+        InstanceType_Is4gen_xlarge,
+        InstanceType_M1_large,
+        InstanceType_M1_medium,
+        InstanceType_M1_small,
+        InstanceType_M1_xlarge,
+        InstanceType_M2_2xlarge,
+        InstanceType_M2_4xlarge,
+        InstanceType_M2_xlarge,
+        InstanceType_M3_2xlarge,
+        InstanceType_M3_large,
+        InstanceType_M3_medium,
+        InstanceType_M3_xlarge,
+        InstanceType_M4_10xlarge,
+        InstanceType_M4_16xlarge,
+        InstanceType_M4_2xlarge,
+        InstanceType_M4_4xlarge,
+        InstanceType_M4_large,
+        InstanceType_M4_xlarge,
+        InstanceType_M5_12xlarge,
+        InstanceType_M5_16xlarge,
+        InstanceType_M5_24xlarge,
+        InstanceType_M5_2xlarge,
+        InstanceType_M5_4xlarge,
+        InstanceType_M5_8xlarge,
+        InstanceType_M5_large,
+        InstanceType_M5_metal,
+        InstanceType_M5_xlarge,
+        InstanceType_M5a_12xlarge,
+        InstanceType_M5a_16xlarge,
+        InstanceType_M5a_24xlarge,
+        InstanceType_M5a_2xlarge,
+        InstanceType_M5a_4xlarge,
+        InstanceType_M5a_8xlarge,
+        InstanceType_M5a_large,
+        InstanceType_M5a_xlarge,
+        InstanceType_M5ad_12xlarge,
+        InstanceType_M5ad_16xlarge,
+        InstanceType_M5ad_24xlarge,
+        InstanceType_M5ad_2xlarge,
+        InstanceType_M5ad_4xlarge,
+        InstanceType_M5ad_8xlarge,
+        InstanceType_M5ad_large,
+        InstanceType_M5ad_xlarge,
+        InstanceType_M5d_12xlarge,
+        InstanceType_M5d_16xlarge,
+        InstanceType_M5d_24xlarge,
+        InstanceType_M5d_2xlarge,
+        InstanceType_M5d_4xlarge,
+        InstanceType_M5d_8xlarge,
+        InstanceType_M5d_large,
+        InstanceType_M5d_metal,
+        InstanceType_M5d_xlarge,
+        InstanceType_M5dn_12xlarge,
+        InstanceType_M5dn_16xlarge,
+        InstanceType_M5dn_24xlarge,
+        InstanceType_M5dn_2xlarge,
+        InstanceType_M5dn_4xlarge,
+        InstanceType_M5dn_8xlarge,
+        InstanceType_M5dn_large,
+        InstanceType_M5dn_metal,
+        InstanceType_M5dn_xlarge,
+        InstanceType_M5n_12xlarge,
+        InstanceType_M5n_16xlarge,
+        InstanceType_M5n_24xlarge,
+        InstanceType_M5n_2xlarge,
+        InstanceType_M5n_4xlarge,
+        InstanceType_M5n_8xlarge,
+        InstanceType_M5n_large,
+        InstanceType_M5n_metal,
+        InstanceType_M5n_xlarge,
+        InstanceType_M5zn_12xlarge,
+        InstanceType_M5zn_2xlarge,
+        InstanceType_M5zn_3xlarge,
+        InstanceType_M5zn_6xlarge,
+        InstanceType_M5zn_large,
+        InstanceType_M5zn_metal,
+        InstanceType_M5zn_xlarge,
+        InstanceType_M6a_12xlarge,
+        InstanceType_M6a_16xlarge,
+        InstanceType_M6a_24xlarge,
+        InstanceType_M6a_2xlarge,
+        InstanceType_M6a_32xlarge,
+        InstanceType_M6a_48xlarge,
+        InstanceType_M6a_4xlarge,
+        InstanceType_M6a_8xlarge,
+        InstanceType_M6a_large,
+        InstanceType_M6a_metal,
+        InstanceType_M6a_xlarge,
+        InstanceType_M6g_12xlarge,
+        InstanceType_M6g_16xlarge,
+        InstanceType_M6g_2xlarge,
+        InstanceType_M6g_4xlarge,
+        InstanceType_M6g_8xlarge,
+        InstanceType_M6g_large,
+        InstanceType_M6g_medium,
+        InstanceType_M6g_metal,
+        InstanceType_M6g_xlarge,
+        InstanceType_M6gd_12xlarge,
+        InstanceType_M6gd_16xlarge,
+        InstanceType_M6gd_2xlarge,
+        InstanceType_M6gd_4xlarge,
+        InstanceType_M6gd_8xlarge,
+        InstanceType_M6gd_large,
+        InstanceType_M6gd_medium,
+        InstanceType_M6gd_metal,
+        InstanceType_M6gd_xlarge,
+        InstanceType_M6i_12xlarge,
+        InstanceType_M6i_16xlarge,
+        InstanceType_M6i_24xlarge,
+        InstanceType_M6i_2xlarge,
+        InstanceType_M6i_32xlarge,
+        InstanceType_M6i_4xlarge,
+        InstanceType_M6i_8xlarge,
+        InstanceType_M6i_large,
+        InstanceType_M6i_metal,
+        InstanceType_M6i_xlarge,
+        InstanceType_M6id_12xlarge,
+        InstanceType_M6id_16xlarge,
+        InstanceType_M6id_24xlarge,
+        InstanceType_M6id_2xlarge,
+        InstanceType_M6id_32xlarge,
+        InstanceType_M6id_4xlarge,
+        InstanceType_M6id_8xlarge,
+        InstanceType_M6id_large,
+        InstanceType_M6id_metal,
+        InstanceType_M6id_xlarge,
+        InstanceType_Mac1_metal,
+        InstanceType_Mac2_metal,
+        InstanceType_P2_16xlarge,
+        InstanceType_P2_8xlarge,
+        InstanceType_P2_xlarge,
+        InstanceType_P3_16xlarge,
+        InstanceType_P3_2xlarge,
+        InstanceType_P3_8xlarge,
+        InstanceType_P3dn_24xlarge,
+        InstanceType_P4d_24xlarge,
+        InstanceType_P4de_24xlarge,
+        InstanceType_R3_2xlarge,
+        InstanceType_R3_4xlarge,
+        InstanceType_R3_8xlarge,
+        InstanceType_R3_large,
+        InstanceType_R3_xlarge,
+        InstanceType_R4_16xlarge,
+        InstanceType_R4_2xlarge,
+        InstanceType_R4_4xlarge,
+        InstanceType_R4_8xlarge,
+        InstanceType_R4_large,
+        InstanceType_R4_xlarge,
+        InstanceType_R5_12xlarge,
+        InstanceType_R5_16xlarge,
+        InstanceType_R5_24xlarge,
+        InstanceType_R5_2xlarge,
+        InstanceType_R5_4xlarge,
+        InstanceType_R5_8xlarge,
+        InstanceType_R5_large,
+        InstanceType_R5_metal,
+        InstanceType_R5_xlarge,
+        InstanceType_R5a_12xlarge,
+        InstanceType_R5a_16xlarge,
+        InstanceType_R5a_24xlarge,
+        InstanceType_R5a_2xlarge,
+        InstanceType_R5a_4xlarge,
+        InstanceType_R5a_8xlarge,
+        InstanceType_R5a_large,
+        InstanceType_R5a_xlarge,
+        InstanceType_R5ad_12xlarge,
+        InstanceType_R5ad_16xlarge,
+        InstanceType_R5ad_24xlarge,
+        InstanceType_R5ad_2xlarge,
+        InstanceType_R5ad_4xlarge,
+        InstanceType_R5ad_8xlarge,
+        InstanceType_R5ad_large,
+        InstanceType_R5ad_xlarge,
+        InstanceType_R5b_12xlarge,
+        InstanceType_R5b_16xlarge,
+        InstanceType_R5b_24xlarge,
+        InstanceType_R5b_2xlarge,
+        InstanceType_R5b_4xlarge,
+        InstanceType_R5b_8xlarge,
+        InstanceType_R5b_large,
+        InstanceType_R5b_metal,
+        InstanceType_R5b_xlarge,
+        InstanceType_R5d_12xlarge,
+        InstanceType_R5d_16xlarge,
+        InstanceType_R5d_24xlarge,
+        InstanceType_R5d_2xlarge,
+        InstanceType_R5d_4xlarge,
+        InstanceType_R5d_8xlarge,
+        InstanceType_R5d_large,
+        InstanceType_R5d_metal,
+        InstanceType_R5d_xlarge,
+        InstanceType_R5dn_12xlarge,
+        InstanceType_R5dn_16xlarge,
+        InstanceType_R5dn_24xlarge,
+        InstanceType_R5dn_2xlarge,
+        InstanceType_R5dn_4xlarge,
+        InstanceType_R5dn_8xlarge,
+        InstanceType_R5dn_large,
+        InstanceType_R5dn_metal,
+        InstanceType_R5dn_xlarge,
+        InstanceType_R5n_12xlarge,
+        InstanceType_R5n_16xlarge,
+        InstanceType_R5n_24xlarge,
+        InstanceType_R5n_2xlarge,
+        InstanceType_R5n_4xlarge,
+        InstanceType_R5n_8xlarge,
+        InstanceType_R5n_large,
+        InstanceType_R5n_metal,
+        InstanceType_R5n_xlarge,
+        InstanceType_R6a_12xlarge,
+        InstanceType_R6a_16xlarge,
+        InstanceType_R6a_24xlarge,
+        InstanceType_R6a_2xlarge,
+        InstanceType_R6a_32xlarge,
+        InstanceType_R6a_48xlarge,
+        InstanceType_R6a_4xlarge,
+        InstanceType_R6a_8xlarge,
+        InstanceType_R6a_large,
+        InstanceType_R6a_metal,
+        InstanceType_R6a_xlarge,
+        InstanceType_R6g_12xlarge,
+        InstanceType_R6g_16xlarge,
+        InstanceType_R6g_2xlarge,
+        InstanceType_R6g_4xlarge,
+        InstanceType_R6g_8xlarge,
+        InstanceType_R6g_large,
+        InstanceType_R6g_medium,
+        InstanceType_R6g_metal,
+        InstanceType_R6g_xlarge,
+        InstanceType_R6gd_12xlarge,
+        InstanceType_R6gd_16xlarge,
+        InstanceType_R6gd_2xlarge,
+        InstanceType_R6gd_4xlarge,
+        InstanceType_R6gd_8xlarge,
+        InstanceType_R6gd_large,
+        InstanceType_R6gd_medium,
+        InstanceType_R6gd_metal,
+        InstanceType_R6gd_xlarge,
+        InstanceType_R6i_12xlarge,
+        InstanceType_R6i_16xlarge,
+        InstanceType_R6i_24xlarge,
+        InstanceType_R6i_2xlarge,
+        InstanceType_R6i_32xlarge,
+        InstanceType_R6i_4xlarge,
+        InstanceType_R6i_8xlarge,
+        InstanceType_R6i_large,
+        InstanceType_R6i_metal,
+        InstanceType_R6i_xlarge,
+        InstanceType_R6id_12xlarge,
+        InstanceType_R6id_16xlarge,
+        InstanceType_R6id_24xlarge,
+        InstanceType_R6id_2xlarge,
+        InstanceType_R6id_32xlarge,
+        InstanceType_R6id_4xlarge,
+        InstanceType_R6id_8xlarge,
+        InstanceType_R6id_large,
+        InstanceType_R6id_metal,
+        InstanceType_R6id_xlarge,
+        InstanceType_T1_micro,
+        InstanceType_T2_2xlarge,
+        InstanceType_T2_large,
+        InstanceType_T2_medium,
+        InstanceType_T2_micro,
+        InstanceType_T2_nano,
+        InstanceType_T2_small,
+        InstanceType_T2_xlarge,
+        InstanceType_T3_2xlarge,
+        InstanceType_T3_large,
+        InstanceType_T3_medium,
+        InstanceType_T3_micro,
+        InstanceType_T3_nano,
+        InstanceType_T3_small,
+        InstanceType_T3_xlarge,
+        InstanceType_T3a_2xlarge,
+        InstanceType_T3a_large,
+        InstanceType_T3a_medium,
+        InstanceType_T3a_micro,
+        InstanceType_T3a_nano,
+        InstanceType_T3a_small,
+        InstanceType_T3a_xlarge,
+        InstanceType_T4g_2xlarge,
+        InstanceType_T4g_large,
+        InstanceType_T4g_medium,
+        InstanceType_T4g_micro,
+        InstanceType_T4g_nano,
+        InstanceType_T4g_small,
+        InstanceType_T4g_xlarge,
+        InstanceType_Trn1_2xlarge,
+        InstanceType_Trn1_32xlarge,
+        InstanceType_U_12tb1_112xlarge,
+        InstanceType_U_12tb1_metal,
+        InstanceType_U_18tb1_112xlarge,
+        InstanceType_U_18tb1_metal,
+        InstanceType_U_24tb1_112xlarge,
+        InstanceType_U_24tb1_metal,
+        InstanceType_U_3tb1_56xlarge,
+        InstanceType_U_6tb1_112xlarge,
+        InstanceType_U_6tb1_56xlarge,
+        InstanceType_U_6tb1_metal,
+        InstanceType_U_9tb1_112xlarge,
+        InstanceType_U_9tb1_metal,
+        InstanceType_Vt1_24xlarge,
+        InstanceType_Vt1_3xlarge,
+        InstanceType_Vt1_6xlarge,
+        InstanceType_X1_16xlarge,
+        InstanceType_X1_32xlarge,
+        InstanceType_X1e_16xlarge,
+        InstanceType_X1e_2xlarge,
+        InstanceType_X1e_32xlarge,
+        InstanceType_X1e_4xlarge,
+        InstanceType_X1e_8xlarge,
+        InstanceType_X1e_xlarge,
+        InstanceType_X2gd_12xlarge,
+        InstanceType_X2gd_16xlarge,
+        InstanceType_X2gd_2xlarge,
+        InstanceType_X2gd_4xlarge,
+        InstanceType_X2gd_8xlarge,
+        InstanceType_X2gd_large,
+        InstanceType_X2gd_medium,
+        InstanceType_X2gd_metal,
+        InstanceType_X2gd_xlarge,
+        InstanceType_X2idn_16xlarge,
+        InstanceType_X2idn_24xlarge,
+        InstanceType_X2idn_32xlarge,
+        InstanceType_X2idn_metal,
+        InstanceType_X2iedn_16xlarge,
+        InstanceType_X2iedn_24xlarge,
+        InstanceType_X2iedn_2xlarge,
+        InstanceType_X2iedn_32xlarge,
+        InstanceType_X2iedn_4xlarge,
+        InstanceType_X2iedn_8xlarge,
+        InstanceType_X2iedn_metal,
+        InstanceType_X2iedn_xlarge,
+        InstanceType_X2iezn_12xlarge,
+        InstanceType_X2iezn_2xlarge,
+        InstanceType_X2iezn_4xlarge,
+        InstanceType_X2iezn_6xlarge,
+        InstanceType_X2iezn_8xlarge,
+        InstanceType_X2iezn_metal,
+        InstanceType_Z1d_12xlarge,
+        InstanceType_Z1d_2xlarge,
+        InstanceType_Z1d_3xlarge,
+        InstanceType_Z1d_6xlarge,
+        InstanceType_Z1d_large,
+        InstanceType_Z1d_metal,
+        InstanceType_Z1d_xlarge
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceType = InstanceType'
+  { fromInstanceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceType_A1_2xlarge :: InstanceType
+pattern InstanceType_A1_2xlarge = InstanceType' "a1.2xlarge"
+
+pattern InstanceType_A1_4xlarge :: InstanceType
+pattern InstanceType_A1_4xlarge = InstanceType' "a1.4xlarge"
+
+pattern InstanceType_A1_large :: InstanceType
+pattern InstanceType_A1_large = InstanceType' "a1.large"
+
+pattern InstanceType_A1_medium :: InstanceType
+pattern InstanceType_A1_medium = InstanceType' "a1.medium"
+
+pattern InstanceType_A1_metal :: InstanceType
+pattern InstanceType_A1_metal = InstanceType' "a1.metal"
+
+pattern InstanceType_A1_xlarge :: InstanceType
+pattern InstanceType_A1_xlarge = InstanceType' "a1.xlarge"
+
+pattern InstanceType_C1_medium :: InstanceType
+pattern InstanceType_C1_medium = InstanceType' "c1.medium"
+
+pattern InstanceType_C1_xlarge :: InstanceType
+pattern InstanceType_C1_xlarge = InstanceType' "c1.xlarge"
+
+pattern InstanceType_C3_2xlarge :: InstanceType
+pattern InstanceType_C3_2xlarge = InstanceType' "c3.2xlarge"
+
+pattern InstanceType_C3_4xlarge :: InstanceType
+pattern InstanceType_C3_4xlarge = InstanceType' "c3.4xlarge"
+
+pattern InstanceType_C3_8xlarge :: InstanceType
+pattern InstanceType_C3_8xlarge = InstanceType' "c3.8xlarge"
+
+pattern InstanceType_C3_large :: InstanceType
+pattern InstanceType_C3_large = InstanceType' "c3.large"
+
+pattern InstanceType_C3_xlarge :: InstanceType
+pattern InstanceType_C3_xlarge = InstanceType' "c3.xlarge"
+
+pattern InstanceType_C4_2xlarge :: InstanceType
+pattern InstanceType_C4_2xlarge = InstanceType' "c4.2xlarge"
+
+pattern InstanceType_C4_4xlarge :: InstanceType
+pattern InstanceType_C4_4xlarge = InstanceType' "c4.4xlarge"
+
+pattern InstanceType_C4_8xlarge :: InstanceType
+pattern InstanceType_C4_8xlarge = InstanceType' "c4.8xlarge"
+
+pattern InstanceType_C4_large :: InstanceType
+pattern InstanceType_C4_large = InstanceType' "c4.large"
+
+pattern InstanceType_C4_xlarge :: InstanceType
+pattern InstanceType_C4_xlarge = InstanceType' "c4.xlarge"
+
+pattern InstanceType_C5_12xlarge :: InstanceType
+pattern InstanceType_C5_12xlarge = InstanceType' "c5.12xlarge"
+
+pattern InstanceType_C5_18xlarge :: InstanceType
+pattern InstanceType_C5_18xlarge = InstanceType' "c5.18xlarge"
+
+pattern InstanceType_C5_24xlarge :: InstanceType
+pattern InstanceType_C5_24xlarge = InstanceType' "c5.24xlarge"
+
+pattern InstanceType_C5_2xlarge :: InstanceType
+pattern InstanceType_C5_2xlarge = InstanceType' "c5.2xlarge"
+
+pattern InstanceType_C5_4xlarge :: InstanceType
+pattern InstanceType_C5_4xlarge = InstanceType' "c5.4xlarge"
+
+pattern InstanceType_C5_9xlarge :: InstanceType
+pattern InstanceType_C5_9xlarge = InstanceType' "c5.9xlarge"
+
+pattern InstanceType_C5_large :: InstanceType
+pattern InstanceType_C5_large = InstanceType' "c5.large"
+
+pattern InstanceType_C5_metal :: InstanceType
+pattern InstanceType_C5_metal = InstanceType' "c5.metal"
+
+pattern InstanceType_C5_xlarge :: InstanceType
+pattern InstanceType_C5_xlarge = InstanceType' "c5.xlarge"
+
+pattern InstanceType_C5a_12xlarge :: InstanceType
+pattern InstanceType_C5a_12xlarge = InstanceType' "c5a.12xlarge"
+
+pattern InstanceType_C5a_16xlarge :: InstanceType
+pattern InstanceType_C5a_16xlarge = InstanceType' "c5a.16xlarge"
+
+pattern InstanceType_C5a_24xlarge :: InstanceType
+pattern InstanceType_C5a_24xlarge = InstanceType' "c5a.24xlarge"
+
+pattern InstanceType_C5a_2xlarge :: InstanceType
+pattern InstanceType_C5a_2xlarge = InstanceType' "c5a.2xlarge"
+
+pattern InstanceType_C5a_4xlarge :: InstanceType
+pattern InstanceType_C5a_4xlarge = InstanceType' "c5a.4xlarge"
+
+pattern InstanceType_C5a_8xlarge :: InstanceType
+pattern InstanceType_C5a_8xlarge = InstanceType' "c5a.8xlarge"
+
+pattern InstanceType_C5a_large :: InstanceType
+pattern InstanceType_C5a_large = InstanceType' "c5a.large"
+
+pattern InstanceType_C5a_xlarge :: InstanceType
+pattern InstanceType_C5a_xlarge = InstanceType' "c5a.xlarge"
+
+pattern InstanceType_C5ad_12xlarge :: InstanceType
+pattern InstanceType_C5ad_12xlarge = InstanceType' "c5ad.12xlarge"
+
+pattern InstanceType_C5ad_16xlarge :: InstanceType
+pattern InstanceType_C5ad_16xlarge = InstanceType' "c5ad.16xlarge"
+
+pattern InstanceType_C5ad_24xlarge :: InstanceType
+pattern InstanceType_C5ad_24xlarge = InstanceType' "c5ad.24xlarge"
+
+pattern InstanceType_C5ad_2xlarge :: InstanceType
+pattern InstanceType_C5ad_2xlarge = InstanceType' "c5ad.2xlarge"
+
+pattern InstanceType_C5ad_4xlarge :: InstanceType
+pattern InstanceType_C5ad_4xlarge = InstanceType' "c5ad.4xlarge"
+
+pattern InstanceType_C5ad_8xlarge :: InstanceType
+pattern InstanceType_C5ad_8xlarge = InstanceType' "c5ad.8xlarge"
+
+pattern InstanceType_C5ad_large :: InstanceType
+pattern InstanceType_C5ad_large = InstanceType' "c5ad.large"
+
+pattern InstanceType_C5ad_xlarge :: InstanceType
+pattern InstanceType_C5ad_xlarge = InstanceType' "c5ad.xlarge"
+
+pattern InstanceType_C5d_12xlarge :: InstanceType
+pattern InstanceType_C5d_12xlarge = InstanceType' "c5d.12xlarge"
+
+pattern InstanceType_C5d_18xlarge :: InstanceType
+pattern InstanceType_C5d_18xlarge = InstanceType' "c5d.18xlarge"
+
+pattern InstanceType_C5d_24xlarge :: InstanceType
+pattern InstanceType_C5d_24xlarge = InstanceType' "c5d.24xlarge"
+
+pattern InstanceType_C5d_2xlarge :: InstanceType
+pattern InstanceType_C5d_2xlarge = InstanceType' "c5d.2xlarge"
+
+pattern InstanceType_C5d_4xlarge :: InstanceType
+pattern InstanceType_C5d_4xlarge = InstanceType' "c5d.4xlarge"
+
+pattern InstanceType_C5d_9xlarge :: InstanceType
+pattern InstanceType_C5d_9xlarge = InstanceType' "c5d.9xlarge"
+
+pattern InstanceType_C5d_large :: InstanceType
+pattern InstanceType_C5d_large = InstanceType' "c5d.large"
+
+pattern InstanceType_C5d_metal :: InstanceType
+pattern InstanceType_C5d_metal = InstanceType' "c5d.metal"
+
+pattern InstanceType_C5d_xlarge :: InstanceType
+pattern InstanceType_C5d_xlarge = InstanceType' "c5d.xlarge"
+
+pattern InstanceType_C5n_18xlarge :: InstanceType
+pattern InstanceType_C5n_18xlarge = InstanceType' "c5n.18xlarge"
+
+pattern InstanceType_C5n_2xlarge :: InstanceType
+pattern InstanceType_C5n_2xlarge = InstanceType' "c5n.2xlarge"
+
+pattern InstanceType_C5n_4xlarge :: InstanceType
+pattern InstanceType_C5n_4xlarge = InstanceType' "c5n.4xlarge"
+
+pattern InstanceType_C5n_9xlarge :: InstanceType
+pattern InstanceType_C5n_9xlarge = InstanceType' "c5n.9xlarge"
+
+pattern InstanceType_C5n_large :: InstanceType
+pattern InstanceType_C5n_large = InstanceType' "c5n.large"
+
+pattern InstanceType_C5n_metal :: InstanceType
+pattern InstanceType_C5n_metal = InstanceType' "c5n.metal"
+
+pattern InstanceType_C5n_xlarge :: InstanceType
+pattern InstanceType_C5n_xlarge = InstanceType' "c5n.xlarge"
+
+pattern InstanceType_C6a_12xlarge :: InstanceType
+pattern InstanceType_C6a_12xlarge = InstanceType' "c6a.12xlarge"
+
+pattern InstanceType_C6a_16xlarge :: InstanceType
+pattern InstanceType_C6a_16xlarge = InstanceType' "c6a.16xlarge"
+
+pattern InstanceType_C6a_24xlarge :: InstanceType
+pattern InstanceType_C6a_24xlarge = InstanceType' "c6a.24xlarge"
+
+pattern InstanceType_C6a_2xlarge :: InstanceType
+pattern InstanceType_C6a_2xlarge = InstanceType' "c6a.2xlarge"
+
+pattern InstanceType_C6a_32xlarge :: InstanceType
+pattern InstanceType_C6a_32xlarge = InstanceType' "c6a.32xlarge"
+
+pattern InstanceType_C6a_48xlarge :: InstanceType
+pattern InstanceType_C6a_48xlarge = InstanceType' "c6a.48xlarge"
+
+pattern InstanceType_C6a_4xlarge :: InstanceType
+pattern InstanceType_C6a_4xlarge = InstanceType' "c6a.4xlarge"
+
+pattern InstanceType_C6a_8xlarge :: InstanceType
+pattern InstanceType_C6a_8xlarge = InstanceType' "c6a.8xlarge"
+
+pattern InstanceType_C6a_large :: InstanceType
+pattern InstanceType_C6a_large = InstanceType' "c6a.large"
+
+pattern InstanceType_C6a_metal :: InstanceType
+pattern InstanceType_C6a_metal = InstanceType' "c6a.metal"
+
+pattern InstanceType_C6a_xlarge :: InstanceType
+pattern InstanceType_C6a_xlarge = InstanceType' "c6a.xlarge"
+
+pattern InstanceType_C6g_12xlarge :: InstanceType
+pattern InstanceType_C6g_12xlarge = InstanceType' "c6g.12xlarge"
+
+pattern InstanceType_C6g_16xlarge :: InstanceType
+pattern InstanceType_C6g_16xlarge = InstanceType' "c6g.16xlarge"
+
+pattern InstanceType_C6g_2xlarge :: InstanceType
+pattern InstanceType_C6g_2xlarge = InstanceType' "c6g.2xlarge"
+
+pattern InstanceType_C6g_4xlarge :: InstanceType
+pattern InstanceType_C6g_4xlarge = InstanceType' "c6g.4xlarge"
+
+pattern InstanceType_C6g_8xlarge :: InstanceType
+pattern InstanceType_C6g_8xlarge = InstanceType' "c6g.8xlarge"
+
+pattern InstanceType_C6g_large :: InstanceType
+pattern InstanceType_C6g_large = InstanceType' "c6g.large"
+
+pattern InstanceType_C6g_medium :: InstanceType
+pattern InstanceType_C6g_medium = InstanceType' "c6g.medium"
+
+pattern InstanceType_C6g_metal :: InstanceType
+pattern InstanceType_C6g_metal = InstanceType' "c6g.metal"
+
+pattern InstanceType_C6g_xlarge :: InstanceType
+pattern InstanceType_C6g_xlarge = InstanceType' "c6g.xlarge"
+
+pattern InstanceType_C6gd_12xlarge :: InstanceType
+pattern InstanceType_C6gd_12xlarge = InstanceType' "c6gd.12xlarge"
+
+pattern InstanceType_C6gd_16xlarge :: InstanceType
+pattern InstanceType_C6gd_16xlarge = InstanceType' "c6gd.16xlarge"
+
+pattern InstanceType_C6gd_2xlarge :: InstanceType
+pattern InstanceType_C6gd_2xlarge = InstanceType' "c6gd.2xlarge"
+
+pattern InstanceType_C6gd_4xlarge :: InstanceType
+pattern InstanceType_C6gd_4xlarge = InstanceType' "c6gd.4xlarge"
+
+pattern InstanceType_C6gd_8xlarge :: InstanceType
+pattern InstanceType_C6gd_8xlarge = InstanceType' "c6gd.8xlarge"
+
+pattern InstanceType_C6gd_large :: InstanceType
+pattern InstanceType_C6gd_large = InstanceType' "c6gd.large"
+
+pattern InstanceType_C6gd_medium :: InstanceType
+pattern InstanceType_C6gd_medium = InstanceType' "c6gd.medium"
+
+pattern InstanceType_C6gd_metal :: InstanceType
+pattern InstanceType_C6gd_metal = InstanceType' "c6gd.metal"
+
+pattern InstanceType_C6gd_xlarge :: InstanceType
+pattern InstanceType_C6gd_xlarge = InstanceType' "c6gd.xlarge"
+
+pattern InstanceType_C6gn_12xlarge :: InstanceType
+pattern InstanceType_C6gn_12xlarge = InstanceType' "c6gn.12xlarge"
+
+pattern InstanceType_C6gn_16xlarge :: InstanceType
+pattern InstanceType_C6gn_16xlarge = InstanceType' "c6gn.16xlarge"
+
+pattern InstanceType_C6gn_2xlarge :: InstanceType
+pattern InstanceType_C6gn_2xlarge = InstanceType' "c6gn.2xlarge"
+
+pattern InstanceType_C6gn_4xlarge :: InstanceType
+pattern InstanceType_C6gn_4xlarge = InstanceType' "c6gn.4xlarge"
+
+pattern InstanceType_C6gn_8xlarge :: InstanceType
+pattern InstanceType_C6gn_8xlarge = InstanceType' "c6gn.8xlarge"
+
+pattern InstanceType_C6gn_large :: InstanceType
+pattern InstanceType_C6gn_large = InstanceType' "c6gn.large"
+
+pattern InstanceType_C6gn_medium :: InstanceType
+pattern InstanceType_C6gn_medium = InstanceType' "c6gn.medium"
+
+pattern InstanceType_C6gn_xlarge :: InstanceType
+pattern InstanceType_C6gn_xlarge = InstanceType' "c6gn.xlarge"
+
+pattern InstanceType_C6i_12xlarge :: InstanceType
+pattern InstanceType_C6i_12xlarge = InstanceType' "c6i.12xlarge"
+
+pattern InstanceType_C6i_16xlarge :: InstanceType
+pattern InstanceType_C6i_16xlarge = InstanceType' "c6i.16xlarge"
+
+pattern InstanceType_C6i_24xlarge :: InstanceType
+pattern InstanceType_C6i_24xlarge = InstanceType' "c6i.24xlarge"
+
+pattern InstanceType_C6i_2xlarge :: InstanceType
+pattern InstanceType_C6i_2xlarge = InstanceType' "c6i.2xlarge"
+
+pattern InstanceType_C6i_32xlarge :: InstanceType
+pattern InstanceType_C6i_32xlarge = InstanceType' "c6i.32xlarge"
+
+pattern InstanceType_C6i_4xlarge :: InstanceType
+pattern InstanceType_C6i_4xlarge = InstanceType' "c6i.4xlarge"
+
+pattern InstanceType_C6i_8xlarge :: InstanceType
+pattern InstanceType_C6i_8xlarge = InstanceType' "c6i.8xlarge"
+
+pattern InstanceType_C6i_large :: InstanceType
+pattern InstanceType_C6i_large = InstanceType' "c6i.large"
+
+pattern InstanceType_C6i_metal :: InstanceType
+pattern InstanceType_C6i_metal = InstanceType' "c6i.metal"
+
+pattern InstanceType_C6i_xlarge :: InstanceType
+pattern InstanceType_C6i_xlarge = InstanceType' "c6i.xlarge"
+
+pattern InstanceType_C6id_12xlarge :: InstanceType
+pattern InstanceType_C6id_12xlarge = InstanceType' "c6id.12xlarge"
+
+pattern InstanceType_C6id_16xlarge :: InstanceType
+pattern InstanceType_C6id_16xlarge = InstanceType' "c6id.16xlarge"
+
+pattern InstanceType_C6id_24xlarge :: InstanceType
+pattern InstanceType_C6id_24xlarge = InstanceType' "c6id.24xlarge"
+
+pattern InstanceType_C6id_2xlarge :: InstanceType
+pattern InstanceType_C6id_2xlarge = InstanceType' "c6id.2xlarge"
+
+pattern InstanceType_C6id_32xlarge :: InstanceType
+pattern InstanceType_C6id_32xlarge = InstanceType' "c6id.32xlarge"
+
+pattern InstanceType_C6id_4xlarge :: InstanceType
+pattern InstanceType_C6id_4xlarge = InstanceType' "c6id.4xlarge"
+
+pattern InstanceType_C6id_8xlarge :: InstanceType
+pattern InstanceType_C6id_8xlarge = InstanceType' "c6id.8xlarge"
+
+pattern InstanceType_C6id_large :: InstanceType
+pattern InstanceType_C6id_large = InstanceType' "c6id.large"
+
+pattern InstanceType_C6id_metal :: InstanceType
+pattern InstanceType_C6id_metal = InstanceType' "c6id.metal"
+
+pattern InstanceType_C6id_xlarge :: InstanceType
+pattern InstanceType_C6id_xlarge = InstanceType' "c6id.xlarge"
+
+pattern InstanceType_C7g_12xlarge :: InstanceType
+pattern InstanceType_C7g_12xlarge = InstanceType' "c7g.12xlarge"
+
+pattern InstanceType_C7g_16xlarge :: InstanceType
+pattern InstanceType_C7g_16xlarge = InstanceType' "c7g.16xlarge"
+
+pattern InstanceType_C7g_2xlarge :: InstanceType
+pattern InstanceType_C7g_2xlarge = InstanceType' "c7g.2xlarge"
+
+pattern InstanceType_C7g_4xlarge :: InstanceType
+pattern InstanceType_C7g_4xlarge = InstanceType' "c7g.4xlarge"
+
+pattern InstanceType_C7g_8xlarge :: InstanceType
+pattern InstanceType_C7g_8xlarge = InstanceType' "c7g.8xlarge"
+
+pattern InstanceType_C7g_large :: InstanceType
+pattern InstanceType_C7g_large = InstanceType' "c7g.large"
+
+pattern InstanceType_C7g_medium :: InstanceType
+pattern InstanceType_C7g_medium = InstanceType' "c7g.medium"
+
+pattern InstanceType_C7g_xlarge :: InstanceType
+pattern InstanceType_C7g_xlarge = InstanceType' "c7g.xlarge"
+
+pattern InstanceType_Cc1_4xlarge :: InstanceType
+pattern InstanceType_Cc1_4xlarge = InstanceType' "cc1.4xlarge"
+
+pattern InstanceType_Cc2_8xlarge :: InstanceType
+pattern InstanceType_Cc2_8xlarge = InstanceType' "cc2.8xlarge"
+
+pattern InstanceType_Cg1_4xlarge :: InstanceType
+pattern InstanceType_Cg1_4xlarge = InstanceType' "cg1.4xlarge"
+
+pattern InstanceType_Cr1_8xlarge :: InstanceType
+pattern InstanceType_Cr1_8xlarge = InstanceType' "cr1.8xlarge"
+
+pattern InstanceType_D2_2xlarge :: InstanceType
+pattern InstanceType_D2_2xlarge = InstanceType' "d2.2xlarge"
+
+pattern InstanceType_D2_4xlarge :: InstanceType
+pattern InstanceType_D2_4xlarge = InstanceType' "d2.4xlarge"
+
+pattern InstanceType_D2_8xlarge :: InstanceType
+pattern InstanceType_D2_8xlarge = InstanceType' "d2.8xlarge"
+
+pattern InstanceType_D2_xlarge :: InstanceType
+pattern InstanceType_D2_xlarge = InstanceType' "d2.xlarge"
+
+pattern InstanceType_D3_2xlarge :: InstanceType
+pattern InstanceType_D3_2xlarge = InstanceType' "d3.2xlarge"
+
+pattern InstanceType_D3_4xlarge :: InstanceType
+pattern InstanceType_D3_4xlarge = InstanceType' "d3.4xlarge"
+
+pattern InstanceType_D3_8xlarge :: InstanceType
+pattern InstanceType_D3_8xlarge = InstanceType' "d3.8xlarge"
+
+pattern InstanceType_D3_xlarge :: InstanceType
+pattern InstanceType_D3_xlarge = InstanceType' "d3.xlarge"
+
+pattern InstanceType_D3en_12xlarge :: InstanceType
+pattern InstanceType_D3en_12xlarge = InstanceType' "d3en.12xlarge"
+
+pattern InstanceType_D3en_2xlarge :: InstanceType
+pattern InstanceType_D3en_2xlarge = InstanceType' "d3en.2xlarge"
+
+pattern InstanceType_D3en_4xlarge :: InstanceType
+pattern InstanceType_D3en_4xlarge = InstanceType' "d3en.4xlarge"
+
+pattern InstanceType_D3en_6xlarge :: InstanceType
+pattern InstanceType_D3en_6xlarge = InstanceType' "d3en.6xlarge"
+
+pattern InstanceType_D3en_8xlarge :: InstanceType
+pattern InstanceType_D3en_8xlarge = InstanceType' "d3en.8xlarge"
+
+pattern InstanceType_D3en_xlarge :: InstanceType
+pattern InstanceType_D3en_xlarge = InstanceType' "d3en.xlarge"
+
+pattern InstanceType_Dl1_24xlarge :: InstanceType
+pattern InstanceType_Dl1_24xlarge = InstanceType' "dl1.24xlarge"
+
+pattern InstanceType_F1_16xlarge :: InstanceType
+pattern InstanceType_F1_16xlarge = InstanceType' "f1.16xlarge"
+
+pattern InstanceType_F1_2xlarge :: InstanceType
+pattern InstanceType_F1_2xlarge = InstanceType' "f1.2xlarge"
+
+pattern InstanceType_F1_4xlarge :: InstanceType
+pattern InstanceType_F1_4xlarge = InstanceType' "f1.4xlarge"
+
+pattern InstanceType_G2_2xlarge :: InstanceType
+pattern InstanceType_G2_2xlarge = InstanceType' "g2.2xlarge"
+
+pattern InstanceType_G2_8xlarge :: InstanceType
+pattern InstanceType_G2_8xlarge = InstanceType' "g2.8xlarge"
+
+pattern InstanceType_G3_16xlarge :: InstanceType
+pattern InstanceType_G3_16xlarge = InstanceType' "g3.16xlarge"
+
+pattern InstanceType_G3_4xlarge :: InstanceType
+pattern InstanceType_G3_4xlarge = InstanceType' "g3.4xlarge"
+
+pattern InstanceType_G3_8xlarge :: InstanceType
+pattern InstanceType_G3_8xlarge = InstanceType' "g3.8xlarge"
+
+pattern InstanceType_G3s_xlarge :: InstanceType
+pattern InstanceType_G3s_xlarge = InstanceType' "g3s.xlarge"
+
+pattern InstanceType_G4ad_16xlarge :: InstanceType
+pattern InstanceType_G4ad_16xlarge = InstanceType' "g4ad.16xlarge"
+
+pattern InstanceType_G4ad_2xlarge :: InstanceType
+pattern InstanceType_G4ad_2xlarge = InstanceType' "g4ad.2xlarge"
+
+pattern InstanceType_G4ad_4xlarge :: InstanceType
+pattern InstanceType_G4ad_4xlarge = InstanceType' "g4ad.4xlarge"
+
+pattern InstanceType_G4ad_8xlarge :: InstanceType
+pattern InstanceType_G4ad_8xlarge = InstanceType' "g4ad.8xlarge"
+
+pattern InstanceType_G4ad_xlarge :: InstanceType
+pattern InstanceType_G4ad_xlarge = InstanceType' "g4ad.xlarge"
+
+pattern InstanceType_G4dn_12xlarge :: InstanceType
+pattern InstanceType_G4dn_12xlarge = InstanceType' "g4dn.12xlarge"
+
+pattern InstanceType_G4dn_16xlarge :: InstanceType
+pattern InstanceType_G4dn_16xlarge = InstanceType' "g4dn.16xlarge"
+
+pattern InstanceType_G4dn_2xlarge :: InstanceType
+pattern InstanceType_G4dn_2xlarge = InstanceType' "g4dn.2xlarge"
+
+pattern InstanceType_G4dn_4xlarge :: InstanceType
+pattern InstanceType_G4dn_4xlarge = InstanceType' "g4dn.4xlarge"
+
+pattern InstanceType_G4dn_8xlarge :: InstanceType
+pattern InstanceType_G4dn_8xlarge = InstanceType' "g4dn.8xlarge"
+
+pattern InstanceType_G4dn_metal :: InstanceType
+pattern InstanceType_G4dn_metal = InstanceType' "g4dn.metal"
+
+pattern InstanceType_G4dn_xlarge :: InstanceType
+pattern InstanceType_G4dn_xlarge = InstanceType' "g4dn.xlarge"
+
+pattern InstanceType_G5_12xlarge :: InstanceType
+pattern InstanceType_G5_12xlarge = InstanceType' "g5.12xlarge"
+
+pattern InstanceType_G5_16xlarge :: InstanceType
+pattern InstanceType_G5_16xlarge = InstanceType' "g5.16xlarge"
+
+pattern InstanceType_G5_24xlarge :: InstanceType
+pattern InstanceType_G5_24xlarge = InstanceType' "g5.24xlarge"
+
+pattern InstanceType_G5_2xlarge :: InstanceType
+pattern InstanceType_G5_2xlarge = InstanceType' "g5.2xlarge"
+
+pattern InstanceType_G5_48xlarge :: InstanceType
+pattern InstanceType_G5_48xlarge = InstanceType' "g5.48xlarge"
+
+pattern InstanceType_G5_4xlarge :: InstanceType
+pattern InstanceType_G5_4xlarge = InstanceType' "g5.4xlarge"
+
+pattern InstanceType_G5_8xlarge :: InstanceType
+pattern InstanceType_G5_8xlarge = InstanceType' "g5.8xlarge"
+
+pattern InstanceType_G5_xlarge :: InstanceType
+pattern InstanceType_G5_xlarge = InstanceType' "g5.xlarge"
+
+pattern InstanceType_G5g_16xlarge :: InstanceType
+pattern InstanceType_G5g_16xlarge = InstanceType' "g5g.16xlarge"
+
+pattern InstanceType_G5g_2xlarge :: InstanceType
+pattern InstanceType_G5g_2xlarge = InstanceType' "g5g.2xlarge"
+
+pattern InstanceType_G5g_4xlarge :: InstanceType
+pattern InstanceType_G5g_4xlarge = InstanceType' "g5g.4xlarge"
+
+pattern InstanceType_G5g_8xlarge :: InstanceType
+pattern InstanceType_G5g_8xlarge = InstanceType' "g5g.8xlarge"
+
+pattern InstanceType_G5g_metal :: InstanceType
+pattern InstanceType_G5g_metal = InstanceType' "g5g.metal"
+
+pattern InstanceType_G5g_xlarge :: InstanceType
+pattern InstanceType_G5g_xlarge = InstanceType' "g5g.xlarge"
+
+pattern InstanceType_H1_16xlarge :: InstanceType
+pattern InstanceType_H1_16xlarge = InstanceType' "h1.16xlarge"
+
+pattern InstanceType_H1_2xlarge :: InstanceType
+pattern InstanceType_H1_2xlarge = InstanceType' "h1.2xlarge"
+
+pattern InstanceType_H1_4xlarge :: InstanceType
+pattern InstanceType_H1_4xlarge = InstanceType' "h1.4xlarge"
+
+pattern InstanceType_H1_8xlarge :: InstanceType
+pattern InstanceType_H1_8xlarge = InstanceType' "h1.8xlarge"
+
+pattern InstanceType_Hi1_4xlarge :: InstanceType
+pattern InstanceType_Hi1_4xlarge = InstanceType' "hi1.4xlarge"
+
+pattern InstanceType_Hpc6a_48xlarge :: InstanceType
+pattern InstanceType_Hpc6a_48xlarge = InstanceType' "hpc6a.48xlarge"
+
+pattern InstanceType_Hpc6id_32xlarge :: InstanceType
+pattern InstanceType_Hpc6id_32xlarge = InstanceType' "hpc6id.32xlarge"
+
+pattern InstanceType_Hs1_8xlarge :: InstanceType
+pattern InstanceType_Hs1_8xlarge = InstanceType' "hs1.8xlarge"
+
+pattern InstanceType_I2_2xlarge :: InstanceType
+pattern InstanceType_I2_2xlarge = InstanceType' "i2.2xlarge"
+
+pattern InstanceType_I2_4xlarge :: InstanceType
+pattern InstanceType_I2_4xlarge = InstanceType' "i2.4xlarge"
+
+pattern InstanceType_I2_8xlarge :: InstanceType
+pattern InstanceType_I2_8xlarge = InstanceType' "i2.8xlarge"
+
+pattern InstanceType_I2_xlarge :: InstanceType
+pattern InstanceType_I2_xlarge = InstanceType' "i2.xlarge"
+
+pattern InstanceType_I3_16xlarge :: InstanceType
+pattern InstanceType_I3_16xlarge = InstanceType' "i3.16xlarge"
+
+pattern InstanceType_I3_2xlarge :: InstanceType
+pattern InstanceType_I3_2xlarge = InstanceType' "i3.2xlarge"
+
+pattern InstanceType_I3_4xlarge :: InstanceType
+pattern InstanceType_I3_4xlarge = InstanceType' "i3.4xlarge"
+
+pattern InstanceType_I3_8xlarge :: InstanceType
+pattern InstanceType_I3_8xlarge = InstanceType' "i3.8xlarge"
+
+pattern InstanceType_I3_large :: InstanceType
+pattern InstanceType_I3_large = InstanceType' "i3.large"
+
+pattern InstanceType_I3_metal :: InstanceType
+pattern InstanceType_I3_metal = InstanceType' "i3.metal"
+
+pattern InstanceType_I3_xlarge :: InstanceType
+pattern InstanceType_I3_xlarge = InstanceType' "i3.xlarge"
+
+pattern InstanceType_I3en_12xlarge :: InstanceType
+pattern InstanceType_I3en_12xlarge = InstanceType' "i3en.12xlarge"
+
+pattern InstanceType_I3en_24xlarge :: InstanceType
+pattern InstanceType_I3en_24xlarge = InstanceType' "i3en.24xlarge"
+
+pattern InstanceType_I3en_2xlarge :: InstanceType
+pattern InstanceType_I3en_2xlarge = InstanceType' "i3en.2xlarge"
+
+pattern InstanceType_I3en_3xlarge :: InstanceType
+pattern InstanceType_I3en_3xlarge = InstanceType' "i3en.3xlarge"
+
+pattern InstanceType_I3en_6xlarge :: InstanceType
+pattern InstanceType_I3en_6xlarge = InstanceType' "i3en.6xlarge"
+
+pattern InstanceType_I3en_large :: InstanceType
+pattern InstanceType_I3en_large = InstanceType' "i3en.large"
+
+pattern InstanceType_I3en_metal :: InstanceType
+pattern InstanceType_I3en_metal = InstanceType' "i3en.metal"
+
+pattern InstanceType_I3en_xlarge :: InstanceType
+pattern InstanceType_I3en_xlarge = InstanceType' "i3en.xlarge"
+
+pattern InstanceType_I4i_16xlarge :: InstanceType
+pattern InstanceType_I4i_16xlarge = InstanceType' "i4i.16xlarge"
+
+pattern InstanceType_I4i_2xlarge :: InstanceType
+pattern InstanceType_I4i_2xlarge = InstanceType' "i4i.2xlarge"
+
+pattern InstanceType_I4i_32xlarge :: InstanceType
+pattern InstanceType_I4i_32xlarge = InstanceType' "i4i.32xlarge"
+
+pattern InstanceType_I4i_4xlarge :: InstanceType
+pattern InstanceType_I4i_4xlarge = InstanceType' "i4i.4xlarge"
+
+pattern InstanceType_I4i_8xlarge :: InstanceType
+pattern InstanceType_I4i_8xlarge = InstanceType' "i4i.8xlarge"
+
+pattern InstanceType_I4i_large :: InstanceType
+pattern InstanceType_I4i_large = InstanceType' "i4i.large"
+
+pattern InstanceType_I4i_metal :: InstanceType
+pattern InstanceType_I4i_metal = InstanceType' "i4i.metal"
+
+pattern InstanceType_I4i_xlarge :: InstanceType
+pattern InstanceType_I4i_xlarge = InstanceType' "i4i.xlarge"
+
+pattern InstanceType_Im4gn_16xlarge :: InstanceType
+pattern InstanceType_Im4gn_16xlarge = InstanceType' "im4gn.16xlarge"
+
+pattern InstanceType_Im4gn_2xlarge :: InstanceType
+pattern InstanceType_Im4gn_2xlarge = InstanceType' "im4gn.2xlarge"
+
+pattern InstanceType_Im4gn_4xlarge :: InstanceType
+pattern InstanceType_Im4gn_4xlarge = InstanceType' "im4gn.4xlarge"
+
+pattern InstanceType_Im4gn_8xlarge :: InstanceType
+pattern InstanceType_Im4gn_8xlarge = InstanceType' "im4gn.8xlarge"
+
+pattern InstanceType_Im4gn_large :: InstanceType
+pattern InstanceType_Im4gn_large = InstanceType' "im4gn.large"
+
+pattern InstanceType_Im4gn_xlarge :: InstanceType
+pattern InstanceType_Im4gn_xlarge = InstanceType' "im4gn.xlarge"
+
+pattern InstanceType_Inf1_24xlarge :: InstanceType
+pattern InstanceType_Inf1_24xlarge = InstanceType' "inf1.24xlarge"
+
+pattern InstanceType_Inf1_2xlarge :: InstanceType
+pattern InstanceType_Inf1_2xlarge = InstanceType' "inf1.2xlarge"
+
+pattern InstanceType_Inf1_6xlarge :: InstanceType
+pattern InstanceType_Inf1_6xlarge = InstanceType' "inf1.6xlarge"
+
+pattern InstanceType_Inf1_xlarge :: InstanceType
+pattern InstanceType_Inf1_xlarge = InstanceType' "inf1.xlarge"
+
+pattern InstanceType_Is4gen_2xlarge :: InstanceType
+pattern InstanceType_Is4gen_2xlarge = InstanceType' "is4gen.2xlarge"
+
+pattern InstanceType_Is4gen_4xlarge :: InstanceType
+pattern InstanceType_Is4gen_4xlarge = InstanceType' "is4gen.4xlarge"
+
+pattern InstanceType_Is4gen_8xlarge :: InstanceType
+pattern InstanceType_Is4gen_8xlarge = InstanceType' "is4gen.8xlarge"
+
+pattern InstanceType_Is4gen_large :: InstanceType
+pattern InstanceType_Is4gen_large = InstanceType' "is4gen.large"
+
+pattern InstanceType_Is4gen_medium :: InstanceType
+pattern InstanceType_Is4gen_medium = InstanceType' "is4gen.medium"
+
+pattern InstanceType_Is4gen_xlarge :: InstanceType
+pattern InstanceType_Is4gen_xlarge = InstanceType' "is4gen.xlarge"
+
+pattern InstanceType_M1_large :: InstanceType
+pattern InstanceType_M1_large = InstanceType' "m1.large"
+
+pattern InstanceType_M1_medium :: InstanceType
+pattern InstanceType_M1_medium = InstanceType' "m1.medium"
+
+pattern InstanceType_M1_small :: InstanceType
+pattern InstanceType_M1_small = InstanceType' "m1.small"
+
+pattern InstanceType_M1_xlarge :: InstanceType
+pattern InstanceType_M1_xlarge = InstanceType' "m1.xlarge"
+
+pattern InstanceType_M2_2xlarge :: InstanceType
+pattern InstanceType_M2_2xlarge = InstanceType' "m2.2xlarge"
+
+pattern InstanceType_M2_4xlarge :: InstanceType
+pattern InstanceType_M2_4xlarge = InstanceType' "m2.4xlarge"
+
+pattern InstanceType_M2_xlarge :: InstanceType
+pattern InstanceType_M2_xlarge = InstanceType' "m2.xlarge"
+
+pattern InstanceType_M3_2xlarge :: InstanceType
+pattern InstanceType_M3_2xlarge = InstanceType' "m3.2xlarge"
+
+pattern InstanceType_M3_large :: InstanceType
+pattern InstanceType_M3_large = InstanceType' "m3.large"
+
+pattern InstanceType_M3_medium :: InstanceType
+pattern InstanceType_M3_medium = InstanceType' "m3.medium"
+
+pattern InstanceType_M3_xlarge :: InstanceType
+pattern InstanceType_M3_xlarge = InstanceType' "m3.xlarge"
+
+pattern InstanceType_M4_10xlarge :: InstanceType
+pattern InstanceType_M4_10xlarge = InstanceType' "m4.10xlarge"
+
+pattern InstanceType_M4_16xlarge :: InstanceType
+pattern InstanceType_M4_16xlarge = InstanceType' "m4.16xlarge"
+
+pattern InstanceType_M4_2xlarge :: InstanceType
+pattern InstanceType_M4_2xlarge = InstanceType' "m4.2xlarge"
+
+pattern InstanceType_M4_4xlarge :: InstanceType
+pattern InstanceType_M4_4xlarge = InstanceType' "m4.4xlarge"
+
+pattern InstanceType_M4_large :: InstanceType
+pattern InstanceType_M4_large = InstanceType' "m4.large"
+
+pattern InstanceType_M4_xlarge :: InstanceType
+pattern InstanceType_M4_xlarge = InstanceType' "m4.xlarge"
+
+pattern InstanceType_M5_12xlarge :: InstanceType
+pattern InstanceType_M5_12xlarge = InstanceType' "m5.12xlarge"
+
+pattern InstanceType_M5_16xlarge :: InstanceType
+pattern InstanceType_M5_16xlarge = InstanceType' "m5.16xlarge"
+
+pattern InstanceType_M5_24xlarge :: InstanceType
+pattern InstanceType_M5_24xlarge = InstanceType' "m5.24xlarge"
+
+pattern InstanceType_M5_2xlarge :: InstanceType
+pattern InstanceType_M5_2xlarge = InstanceType' "m5.2xlarge"
+
+pattern InstanceType_M5_4xlarge :: InstanceType
+pattern InstanceType_M5_4xlarge = InstanceType' "m5.4xlarge"
+
+pattern InstanceType_M5_8xlarge :: InstanceType
+pattern InstanceType_M5_8xlarge = InstanceType' "m5.8xlarge"
+
+pattern InstanceType_M5_large :: InstanceType
+pattern InstanceType_M5_large = InstanceType' "m5.large"
+
+pattern InstanceType_M5_metal :: InstanceType
+pattern InstanceType_M5_metal = InstanceType' "m5.metal"
+
+pattern InstanceType_M5_xlarge :: InstanceType
+pattern InstanceType_M5_xlarge = InstanceType' "m5.xlarge"
+
+pattern InstanceType_M5a_12xlarge :: InstanceType
+pattern InstanceType_M5a_12xlarge = InstanceType' "m5a.12xlarge"
+
+pattern InstanceType_M5a_16xlarge :: InstanceType
+pattern InstanceType_M5a_16xlarge = InstanceType' "m5a.16xlarge"
+
+pattern InstanceType_M5a_24xlarge :: InstanceType
+pattern InstanceType_M5a_24xlarge = InstanceType' "m5a.24xlarge"
+
+pattern InstanceType_M5a_2xlarge :: InstanceType
+pattern InstanceType_M5a_2xlarge = InstanceType' "m5a.2xlarge"
+
+pattern InstanceType_M5a_4xlarge :: InstanceType
+pattern InstanceType_M5a_4xlarge = InstanceType' "m5a.4xlarge"
+
+pattern InstanceType_M5a_8xlarge :: InstanceType
+pattern InstanceType_M5a_8xlarge = InstanceType' "m5a.8xlarge"
+
+pattern InstanceType_M5a_large :: InstanceType
+pattern InstanceType_M5a_large = InstanceType' "m5a.large"
+
+pattern InstanceType_M5a_xlarge :: InstanceType
+pattern InstanceType_M5a_xlarge = InstanceType' "m5a.xlarge"
+
+pattern InstanceType_M5ad_12xlarge :: InstanceType
+pattern InstanceType_M5ad_12xlarge = InstanceType' "m5ad.12xlarge"
+
+pattern InstanceType_M5ad_16xlarge :: InstanceType
+pattern InstanceType_M5ad_16xlarge = InstanceType' "m5ad.16xlarge"
+
+pattern InstanceType_M5ad_24xlarge :: InstanceType
+pattern InstanceType_M5ad_24xlarge = InstanceType' "m5ad.24xlarge"
+
+pattern InstanceType_M5ad_2xlarge :: InstanceType
+pattern InstanceType_M5ad_2xlarge = InstanceType' "m5ad.2xlarge"
+
+pattern InstanceType_M5ad_4xlarge :: InstanceType
+pattern InstanceType_M5ad_4xlarge = InstanceType' "m5ad.4xlarge"
+
+pattern InstanceType_M5ad_8xlarge :: InstanceType
+pattern InstanceType_M5ad_8xlarge = InstanceType' "m5ad.8xlarge"
+
+pattern InstanceType_M5ad_large :: InstanceType
+pattern InstanceType_M5ad_large = InstanceType' "m5ad.large"
+
+pattern InstanceType_M5ad_xlarge :: InstanceType
+pattern InstanceType_M5ad_xlarge = InstanceType' "m5ad.xlarge"
+
+pattern InstanceType_M5d_12xlarge :: InstanceType
+pattern InstanceType_M5d_12xlarge = InstanceType' "m5d.12xlarge"
+
+pattern InstanceType_M5d_16xlarge :: InstanceType
+pattern InstanceType_M5d_16xlarge = InstanceType' "m5d.16xlarge"
+
+pattern InstanceType_M5d_24xlarge :: InstanceType
+pattern InstanceType_M5d_24xlarge = InstanceType' "m5d.24xlarge"
+
+pattern InstanceType_M5d_2xlarge :: InstanceType
+pattern InstanceType_M5d_2xlarge = InstanceType' "m5d.2xlarge"
+
+pattern InstanceType_M5d_4xlarge :: InstanceType
+pattern InstanceType_M5d_4xlarge = InstanceType' "m5d.4xlarge"
+
+pattern InstanceType_M5d_8xlarge :: InstanceType
+pattern InstanceType_M5d_8xlarge = InstanceType' "m5d.8xlarge"
+
+pattern InstanceType_M5d_large :: InstanceType
+pattern InstanceType_M5d_large = InstanceType' "m5d.large"
+
+pattern InstanceType_M5d_metal :: InstanceType
+pattern InstanceType_M5d_metal = InstanceType' "m5d.metal"
+
+pattern InstanceType_M5d_xlarge :: InstanceType
+pattern InstanceType_M5d_xlarge = InstanceType' "m5d.xlarge"
+
+pattern InstanceType_M5dn_12xlarge :: InstanceType
+pattern InstanceType_M5dn_12xlarge = InstanceType' "m5dn.12xlarge"
+
+pattern InstanceType_M5dn_16xlarge :: InstanceType
+pattern InstanceType_M5dn_16xlarge = InstanceType' "m5dn.16xlarge"
+
+pattern InstanceType_M5dn_24xlarge :: InstanceType
+pattern InstanceType_M5dn_24xlarge = InstanceType' "m5dn.24xlarge"
+
+pattern InstanceType_M5dn_2xlarge :: InstanceType
+pattern InstanceType_M5dn_2xlarge = InstanceType' "m5dn.2xlarge"
+
+pattern InstanceType_M5dn_4xlarge :: InstanceType
+pattern InstanceType_M5dn_4xlarge = InstanceType' "m5dn.4xlarge"
+
+pattern InstanceType_M5dn_8xlarge :: InstanceType
+pattern InstanceType_M5dn_8xlarge = InstanceType' "m5dn.8xlarge"
+
+pattern InstanceType_M5dn_large :: InstanceType
+pattern InstanceType_M5dn_large = InstanceType' "m5dn.large"
+
+pattern InstanceType_M5dn_metal :: InstanceType
+pattern InstanceType_M5dn_metal = InstanceType' "m5dn.metal"
+
+pattern InstanceType_M5dn_xlarge :: InstanceType
+pattern InstanceType_M5dn_xlarge = InstanceType' "m5dn.xlarge"
+
+pattern InstanceType_M5n_12xlarge :: InstanceType
+pattern InstanceType_M5n_12xlarge = InstanceType' "m5n.12xlarge"
+
+pattern InstanceType_M5n_16xlarge :: InstanceType
+pattern InstanceType_M5n_16xlarge = InstanceType' "m5n.16xlarge"
+
+pattern InstanceType_M5n_24xlarge :: InstanceType
+pattern InstanceType_M5n_24xlarge = InstanceType' "m5n.24xlarge"
+
+pattern InstanceType_M5n_2xlarge :: InstanceType
+pattern InstanceType_M5n_2xlarge = InstanceType' "m5n.2xlarge"
+
+pattern InstanceType_M5n_4xlarge :: InstanceType
+pattern InstanceType_M5n_4xlarge = InstanceType' "m5n.4xlarge"
+
+pattern InstanceType_M5n_8xlarge :: InstanceType
+pattern InstanceType_M5n_8xlarge = InstanceType' "m5n.8xlarge"
+
+pattern InstanceType_M5n_large :: InstanceType
+pattern InstanceType_M5n_large = InstanceType' "m5n.large"
+
+pattern InstanceType_M5n_metal :: InstanceType
+pattern InstanceType_M5n_metal = InstanceType' "m5n.metal"
+
+pattern InstanceType_M5n_xlarge :: InstanceType
+pattern InstanceType_M5n_xlarge = InstanceType' "m5n.xlarge"
+
+pattern InstanceType_M5zn_12xlarge :: InstanceType
+pattern InstanceType_M5zn_12xlarge = InstanceType' "m5zn.12xlarge"
+
+pattern InstanceType_M5zn_2xlarge :: InstanceType
+pattern InstanceType_M5zn_2xlarge = InstanceType' "m5zn.2xlarge"
+
+pattern InstanceType_M5zn_3xlarge :: InstanceType
+pattern InstanceType_M5zn_3xlarge = InstanceType' "m5zn.3xlarge"
+
+pattern InstanceType_M5zn_6xlarge :: InstanceType
+pattern InstanceType_M5zn_6xlarge = InstanceType' "m5zn.6xlarge"
+
+pattern InstanceType_M5zn_large :: InstanceType
+pattern InstanceType_M5zn_large = InstanceType' "m5zn.large"
+
+pattern InstanceType_M5zn_metal :: InstanceType
+pattern InstanceType_M5zn_metal = InstanceType' "m5zn.metal"
+
+pattern InstanceType_M5zn_xlarge :: InstanceType
+pattern InstanceType_M5zn_xlarge = InstanceType' "m5zn.xlarge"
+
+pattern InstanceType_M6a_12xlarge :: InstanceType
+pattern InstanceType_M6a_12xlarge = InstanceType' "m6a.12xlarge"
+
+pattern InstanceType_M6a_16xlarge :: InstanceType
+pattern InstanceType_M6a_16xlarge = InstanceType' "m6a.16xlarge"
+
+pattern InstanceType_M6a_24xlarge :: InstanceType
+pattern InstanceType_M6a_24xlarge = InstanceType' "m6a.24xlarge"
+
+pattern InstanceType_M6a_2xlarge :: InstanceType
+pattern InstanceType_M6a_2xlarge = InstanceType' "m6a.2xlarge"
+
+pattern InstanceType_M6a_32xlarge :: InstanceType
+pattern InstanceType_M6a_32xlarge = InstanceType' "m6a.32xlarge"
+
+pattern InstanceType_M6a_48xlarge :: InstanceType
+pattern InstanceType_M6a_48xlarge = InstanceType' "m6a.48xlarge"
+
+pattern InstanceType_M6a_4xlarge :: InstanceType
+pattern InstanceType_M6a_4xlarge = InstanceType' "m6a.4xlarge"
+
+pattern InstanceType_M6a_8xlarge :: InstanceType
+pattern InstanceType_M6a_8xlarge = InstanceType' "m6a.8xlarge"
+
+pattern InstanceType_M6a_large :: InstanceType
+pattern InstanceType_M6a_large = InstanceType' "m6a.large"
+
+pattern InstanceType_M6a_metal :: InstanceType
+pattern InstanceType_M6a_metal = InstanceType' "m6a.metal"
+
+pattern InstanceType_M6a_xlarge :: InstanceType
+pattern InstanceType_M6a_xlarge = InstanceType' "m6a.xlarge"
+
+pattern InstanceType_M6g_12xlarge :: InstanceType
+pattern InstanceType_M6g_12xlarge = InstanceType' "m6g.12xlarge"
+
+pattern InstanceType_M6g_16xlarge :: InstanceType
+pattern InstanceType_M6g_16xlarge = InstanceType' "m6g.16xlarge"
+
+pattern InstanceType_M6g_2xlarge :: InstanceType
+pattern InstanceType_M6g_2xlarge = InstanceType' "m6g.2xlarge"
+
+pattern InstanceType_M6g_4xlarge :: InstanceType
+pattern InstanceType_M6g_4xlarge = InstanceType' "m6g.4xlarge"
+
+pattern InstanceType_M6g_8xlarge :: InstanceType
+pattern InstanceType_M6g_8xlarge = InstanceType' "m6g.8xlarge"
+
+pattern InstanceType_M6g_large :: InstanceType
+pattern InstanceType_M6g_large = InstanceType' "m6g.large"
+
+pattern InstanceType_M6g_medium :: InstanceType
+pattern InstanceType_M6g_medium = InstanceType' "m6g.medium"
+
+pattern InstanceType_M6g_metal :: InstanceType
+pattern InstanceType_M6g_metal = InstanceType' "m6g.metal"
+
+pattern InstanceType_M6g_xlarge :: InstanceType
+pattern InstanceType_M6g_xlarge = InstanceType' "m6g.xlarge"
+
+pattern InstanceType_M6gd_12xlarge :: InstanceType
+pattern InstanceType_M6gd_12xlarge = InstanceType' "m6gd.12xlarge"
+
+pattern InstanceType_M6gd_16xlarge :: InstanceType
+pattern InstanceType_M6gd_16xlarge = InstanceType' "m6gd.16xlarge"
+
+pattern InstanceType_M6gd_2xlarge :: InstanceType
+pattern InstanceType_M6gd_2xlarge = InstanceType' "m6gd.2xlarge"
+
+pattern InstanceType_M6gd_4xlarge :: InstanceType
+pattern InstanceType_M6gd_4xlarge = InstanceType' "m6gd.4xlarge"
+
+pattern InstanceType_M6gd_8xlarge :: InstanceType
+pattern InstanceType_M6gd_8xlarge = InstanceType' "m6gd.8xlarge"
+
+pattern InstanceType_M6gd_large :: InstanceType
+pattern InstanceType_M6gd_large = InstanceType' "m6gd.large"
+
+pattern InstanceType_M6gd_medium :: InstanceType
+pattern InstanceType_M6gd_medium = InstanceType' "m6gd.medium"
+
+pattern InstanceType_M6gd_metal :: InstanceType
+pattern InstanceType_M6gd_metal = InstanceType' "m6gd.metal"
+
+pattern InstanceType_M6gd_xlarge :: InstanceType
+pattern InstanceType_M6gd_xlarge = InstanceType' "m6gd.xlarge"
+
+pattern InstanceType_M6i_12xlarge :: InstanceType
+pattern InstanceType_M6i_12xlarge = InstanceType' "m6i.12xlarge"
+
+pattern InstanceType_M6i_16xlarge :: InstanceType
+pattern InstanceType_M6i_16xlarge = InstanceType' "m6i.16xlarge"
+
+pattern InstanceType_M6i_24xlarge :: InstanceType
+pattern InstanceType_M6i_24xlarge = InstanceType' "m6i.24xlarge"
+
+pattern InstanceType_M6i_2xlarge :: InstanceType
+pattern InstanceType_M6i_2xlarge = InstanceType' "m6i.2xlarge"
+
+pattern InstanceType_M6i_32xlarge :: InstanceType
+pattern InstanceType_M6i_32xlarge = InstanceType' "m6i.32xlarge"
+
+pattern InstanceType_M6i_4xlarge :: InstanceType
+pattern InstanceType_M6i_4xlarge = InstanceType' "m6i.4xlarge"
+
+pattern InstanceType_M6i_8xlarge :: InstanceType
+pattern InstanceType_M6i_8xlarge = InstanceType' "m6i.8xlarge"
+
+pattern InstanceType_M6i_large :: InstanceType
+pattern InstanceType_M6i_large = InstanceType' "m6i.large"
+
+pattern InstanceType_M6i_metal :: InstanceType
+pattern InstanceType_M6i_metal = InstanceType' "m6i.metal"
+
+pattern InstanceType_M6i_xlarge :: InstanceType
+pattern InstanceType_M6i_xlarge = InstanceType' "m6i.xlarge"
+
+pattern InstanceType_M6id_12xlarge :: InstanceType
+pattern InstanceType_M6id_12xlarge = InstanceType' "m6id.12xlarge"
+
+pattern InstanceType_M6id_16xlarge :: InstanceType
+pattern InstanceType_M6id_16xlarge = InstanceType' "m6id.16xlarge"
+
+pattern InstanceType_M6id_24xlarge :: InstanceType
+pattern InstanceType_M6id_24xlarge = InstanceType' "m6id.24xlarge"
+
+pattern InstanceType_M6id_2xlarge :: InstanceType
+pattern InstanceType_M6id_2xlarge = InstanceType' "m6id.2xlarge"
+
+pattern InstanceType_M6id_32xlarge :: InstanceType
+pattern InstanceType_M6id_32xlarge = InstanceType' "m6id.32xlarge"
+
+pattern InstanceType_M6id_4xlarge :: InstanceType
+pattern InstanceType_M6id_4xlarge = InstanceType' "m6id.4xlarge"
+
+pattern InstanceType_M6id_8xlarge :: InstanceType
+pattern InstanceType_M6id_8xlarge = InstanceType' "m6id.8xlarge"
+
+pattern InstanceType_M6id_large :: InstanceType
+pattern InstanceType_M6id_large = InstanceType' "m6id.large"
+
+pattern InstanceType_M6id_metal :: InstanceType
+pattern InstanceType_M6id_metal = InstanceType' "m6id.metal"
+
+pattern InstanceType_M6id_xlarge :: InstanceType
+pattern InstanceType_M6id_xlarge = InstanceType' "m6id.xlarge"
+
+pattern InstanceType_Mac1_metal :: InstanceType
+pattern InstanceType_Mac1_metal = InstanceType' "mac1.metal"
+
+pattern InstanceType_Mac2_metal :: InstanceType
+pattern InstanceType_Mac2_metal = InstanceType' "mac2.metal"
+
+pattern InstanceType_P2_16xlarge :: InstanceType
+pattern InstanceType_P2_16xlarge = InstanceType' "p2.16xlarge"
+
+pattern InstanceType_P2_8xlarge :: InstanceType
+pattern InstanceType_P2_8xlarge = InstanceType' "p2.8xlarge"
+
+pattern InstanceType_P2_xlarge :: InstanceType
+pattern InstanceType_P2_xlarge = InstanceType' "p2.xlarge"
+
+pattern InstanceType_P3_16xlarge :: InstanceType
+pattern InstanceType_P3_16xlarge = InstanceType' "p3.16xlarge"
+
+pattern InstanceType_P3_2xlarge :: InstanceType
+pattern InstanceType_P3_2xlarge = InstanceType' "p3.2xlarge"
+
+pattern InstanceType_P3_8xlarge :: InstanceType
+pattern InstanceType_P3_8xlarge = InstanceType' "p3.8xlarge"
+
+pattern InstanceType_P3dn_24xlarge :: InstanceType
+pattern InstanceType_P3dn_24xlarge = InstanceType' "p3dn.24xlarge"
+
+pattern InstanceType_P4d_24xlarge :: InstanceType
+pattern InstanceType_P4d_24xlarge = InstanceType' "p4d.24xlarge"
+
+pattern InstanceType_P4de_24xlarge :: InstanceType
+pattern InstanceType_P4de_24xlarge = InstanceType' "p4de.24xlarge"
+
+pattern InstanceType_R3_2xlarge :: InstanceType
+pattern InstanceType_R3_2xlarge = InstanceType' "r3.2xlarge"
+
+pattern InstanceType_R3_4xlarge :: InstanceType
+pattern InstanceType_R3_4xlarge = InstanceType' "r3.4xlarge"
+
+pattern InstanceType_R3_8xlarge :: InstanceType
+pattern InstanceType_R3_8xlarge = InstanceType' "r3.8xlarge"
+
+pattern InstanceType_R3_large :: InstanceType
+pattern InstanceType_R3_large = InstanceType' "r3.large"
+
+pattern InstanceType_R3_xlarge :: InstanceType
+pattern InstanceType_R3_xlarge = InstanceType' "r3.xlarge"
+
+pattern InstanceType_R4_16xlarge :: InstanceType
+pattern InstanceType_R4_16xlarge = InstanceType' "r4.16xlarge"
+
+pattern InstanceType_R4_2xlarge :: InstanceType
+pattern InstanceType_R4_2xlarge = InstanceType' "r4.2xlarge"
+
+pattern InstanceType_R4_4xlarge :: InstanceType
+pattern InstanceType_R4_4xlarge = InstanceType' "r4.4xlarge"
+
+pattern InstanceType_R4_8xlarge :: InstanceType
+pattern InstanceType_R4_8xlarge = InstanceType' "r4.8xlarge"
+
+pattern InstanceType_R4_large :: InstanceType
+pattern InstanceType_R4_large = InstanceType' "r4.large"
+
+pattern InstanceType_R4_xlarge :: InstanceType
+pattern InstanceType_R4_xlarge = InstanceType' "r4.xlarge"
+
+pattern InstanceType_R5_12xlarge :: InstanceType
+pattern InstanceType_R5_12xlarge = InstanceType' "r5.12xlarge"
+
+pattern InstanceType_R5_16xlarge :: InstanceType
+pattern InstanceType_R5_16xlarge = InstanceType' "r5.16xlarge"
+
+pattern InstanceType_R5_24xlarge :: InstanceType
+pattern InstanceType_R5_24xlarge = InstanceType' "r5.24xlarge"
+
+pattern InstanceType_R5_2xlarge :: InstanceType
+pattern InstanceType_R5_2xlarge = InstanceType' "r5.2xlarge"
+
+pattern InstanceType_R5_4xlarge :: InstanceType
+pattern InstanceType_R5_4xlarge = InstanceType' "r5.4xlarge"
+
+pattern InstanceType_R5_8xlarge :: InstanceType
+pattern InstanceType_R5_8xlarge = InstanceType' "r5.8xlarge"
+
+pattern InstanceType_R5_large :: InstanceType
+pattern InstanceType_R5_large = InstanceType' "r5.large"
+
+pattern InstanceType_R5_metal :: InstanceType
+pattern InstanceType_R5_metal = InstanceType' "r5.metal"
+
+pattern InstanceType_R5_xlarge :: InstanceType
+pattern InstanceType_R5_xlarge = InstanceType' "r5.xlarge"
+
+pattern InstanceType_R5a_12xlarge :: InstanceType
+pattern InstanceType_R5a_12xlarge = InstanceType' "r5a.12xlarge"
+
+pattern InstanceType_R5a_16xlarge :: InstanceType
+pattern InstanceType_R5a_16xlarge = InstanceType' "r5a.16xlarge"
+
+pattern InstanceType_R5a_24xlarge :: InstanceType
+pattern InstanceType_R5a_24xlarge = InstanceType' "r5a.24xlarge"
+
+pattern InstanceType_R5a_2xlarge :: InstanceType
+pattern InstanceType_R5a_2xlarge = InstanceType' "r5a.2xlarge"
+
+pattern InstanceType_R5a_4xlarge :: InstanceType
+pattern InstanceType_R5a_4xlarge = InstanceType' "r5a.4xlarge"
+
+pattern InstanceType_R5a_8xlarge :: InstanceType
+pattern InstanceType_R5a_8xlarge = InstanceType' "r5a.8xlarge"
+
+pattern InstanceType_R5a_large :: InstanceType
+pattern InstanceType_R5a_large = InstanceType' "r5a.large"
+
+pattern InstanceType_R5a_xlarge :: InstanceType
+pattern InstanceType_R5a_xlarge = InstanceType' "r5a.xlarge"
+
+pattern InstanceType_R5ad_12xlarge :: InstanceType
+pattern InstanceType_R5ad_12xlarge = InstanceType' "r5ad.12xlarge"
+
+pattern InstanceType_R5ad_16xlarge :: InstanceType
+pattern InstanceType_R5ad_16xlarge = InstanceType' "r5ad.16xlarge"
+
+pattern InstanceType_R5ad_24xlarge :: InstanceType
+pattern InstanceType_R5ad_24xlarge = InstanceType' "r5ad.24xlarge"
+
+pattern InstanceType_R5ad_2xlarge :: InstanceType
+pattern InstanceType_R5ad_2xlarge = InstanceType' "r5ad.2xlarge"
+
+pattern InstanceType_R5ad_4xlarge :: InstanceType
+pattern InstanceType_R5ad_4xlarge = InstanceType' "r5ad.4xlarge"
+
+pattern InstanceType_R5ad_8xlarge :: InstanceType
+pattern InstanceType_R5ad_8xlarge = InstanceType' "r5ad.8xlarge"
+
+pattern InstanceType_R5ad_large :: InstanceType
+pattern InstanceType_R5ad_large = InstanceType' "r5ad.large"
+
+pattern InstanceType_R5ad_xlarge :: InstanceType
+pattern InstanceType_R5ad_xlarge = InstanceType' "r5ad.xlarge"
+
+pattern InstanceType_R5b_12xlarge :: InstanceType
+pattern InstanceType_R5b_12xlarge = InstanceType' "r5b.12xlarge"
+
+pattern InstanceType_R5b_16xlarge :: InstanceType
+pattern InstanceType_R5b_16xlarge = InstanceType' "r5b.16xlarge"
+
+pattern InstanceType_R5b_24xlarge :: InstanceType
+pattern InstanceType_R5b_24xlarge = InstanceType' "r5b.24xlarge"
+
+pattern InstanceType_R5b_2xlarge :: InstanceType
+pattern InstanceType_R5b_2xlarge = InstanceType' "r5b.2xlarge"
+
+pattern InstanceType_R5b_4xlarge :: InstanceType
+pattern InstanceType_R5b_4xlarge = InstanceType' "r5b.4xlarge"
+
+pattern InstanceType_R5b_8xlarge :: InstanceType
+pattern InstanceType_R5b_8xlarge = InstanceType' "r5b.8xlarge"
+
+pattern InstanceType_R5b_large :: InstanceType
+pattern InstanceType_R5b_large = InstanceType' "r5b.large"
+
+pattern InstanceType_R5b_metal :: InstanceType
+pattern InstanceType_R5b_metal = InstanceType' "r5b.metal"
+
+pattern InstanceType_R5b_xlarge :: InstanceType
+pattern InstanceType_R5b_xlarge = InstanceType' "r5b.xlarge"
+
+pattern InstanceType_R5d_12xlarge :: InstanceType
+pattern InstanceType_R5d_12xlarge = InstanceType' "r5d.12xlarge"
+
+pattern InstanceType_R5d_16xlarge :: InstanceType
+pattern InstanceType_R5d_16xlarge = InstanceType' "r5d.16xlarge"
+
+pattern InstanceType_R5d_24xlarge :: InstanceType
+pattern InstanceType_R5d_24xlarge = InstanceType' "r5d.24xlarge"
+
+pattern InstanceType_R5d_2xlarge :: InstanceType
+pattern InstanceType_R5d_2xlarge = InstanceType' "r5d.2xlarge"
+
+pattern InstanceType_R5d_4xlarge :: InstanceType
+pattern InstanceType_R5d_4xlarge = InstanceType' "r5d.4xlarge"
+
+pattern InstanceType_R5d_8xlarge :: InstanceType
+pattern InstanceType_R5d_8xlarge = InstanceType' "r5d.8xlarge"
+
+pattern InstanceType_R5d_large :: InstanceType
+pattern InstanceType_R5d_large = InstanceType' "r5d.large"
+
+pattern InstanceType_R5d_metal :: InstanceType
+pattern InstanceType_R5d_metal = InstanceType' "r5d.metal"
+
+pattern InstanceType_R5d_xlarge :: InstanceType
+pattern InstanceType_R5d_xlarge = InstanceType' "r5d.xlarge"
+
+pattern InstanceType_R5dn_12xlarge :: InstanceType
+pattern InstanceType_R5dn_12xlarge = InstanceType' "r5dn.12xlarge"
+
+pattern InstanceType_R5dn_16xlarge :: InstanceType
+pattern InstanceType_R5dn_16xlarge = InstanceType' "r5dn.16xlarge"
+
+pattern InstanceType_R5dn_24xlarge :: InstanceType
+pattern InstanceType_R5dn_24xlarge = InstanceType' "r5dn.24xlarge"
+
+pattern InstanceType_R5dn_2xlarge :: InstanceType
+pattern InstanceType_R5dn_2xlarge = InstanceType' "r5dn.2xlarge"
+
+pattern InstanceType_R5dn_4xlarge :: InstanceType
+pattern InstanceType_R5dn_4xlarge = InstanceType' "r5dn.4xlarge"
+
+pattern InstanceType_R5dn_8xlarge :: InstanceType
+pattern InstanceType_R5dn_8xlarge = InstanceType' "r5dn.8xlarge"
+
+pattern InstanceType_R5dn_large :: InstanceType
+pattern InstanceType_R5dn_large = InstanceType' "r5dn.large"
+
+pattern InstanceType_R5dn_metal :: InstanceType
+pattern InstanceType_R5dn_metal = InstanceType' "r5dn.metal"
+
+pattern InstanceType_R5dn_xlarge :: InstanceType
+pattern InstanceType_R5dn_xlarge = InstanceType' "r5dn.xlarge"
+
+pattern InstanceType_R5n_12xlarge :: InstanceType
+pattern InstanceType_R5n_12xlarge = InstanceType' "r5n.12xlarge"
+
+pattern InstanceType_R5n_16xlarge :: InstanceType
+pattern InstanceType_R5n_16xlarge = InstanceType' "r5n.16xlarge"
+
+pattern InstanceType_R5n_24xlarge :: InstanceType
+pattern InstanceType_R5n_24xlarge = InstanceType' "r5n.24xlarge"
+
+pattern InstanceType_R5n_2xlarge :: InstanceType
+pattern InstanceType_R5n_2xlarge = InstanceType' "r5n.2xlarge"
+
+pattern InstanceType_R5n_4xlarge :: InstanceType
+pattern InstanceType_R5n_4xlarge = InstanceType' "r5n.4xlarge"
+
+pattern InstanceType_R5n_8xlarge :: InstanceType
+pattern InstanceType_R5n_8xlarge = InstanceType' "r5n.8xlarge"
+
+pattern InstanceType_R5n_large :: InstanceType
+pattern InstanceType_R5n_large = InstanceType' "r5n.large"
+
+pattern InstanceType_R5n_metal :: InstanceType
+pattern InstanceType_R5n_metal = InstanceType' "r5n.metal"
+
+pattern InstanceType_R5n_xlarge :: InstanceType
+pattern InstanceType_R5n_xlarge = InstanceType' "r5n.xlarge"
+
+pattern InstanceType_R6a_12xlarge :: InstanceType
+pattern InstanceType_R6a_12xlarge = InstanceType' "r6a.12xlarge"
+
+pattern InstanceType_R6a_16xlarge :: InstanceType
+pattern InstanceType_R6a_16xlarge = InstanceType' "r6a.16xlarge"
+
+pattern InstanceType_R6a_24xlarge :: InstanceType
+pattern InstanceType_R6a_24xlarge = InstanceType' "r6a.24xlarge"
+
+pattern InstanceType_R6a_2xlarge :: InstanceType
+pattern InstanceType_R6a_2xlarge = InstanceType' "r6a.2xlarge"
+
+pattern InstanceType_R6a_32xlarge :: InstanceType
+pattern InstanceType_R6a_32xlarge = InstanceType' "r6a.32xlarge"
+
+pattern InstanceType_R6a_48xlarge :: InstanceType
+pattern InstanceType_R6a_48xlarge = InstanceType' "r6a.48xlarge"
+
+pattern InstanceType_R6a_4xlarge :: InstanceType
+pattern InstanceType_R6a_4xlarge = InstanceType' "r6a.4xlarge"
+
+pattern InstanceType_R6a_8xlarge :: InstanceType
+pattern InstanceType_R6a_8xlarge = InstanceType' "r6a.8xlarge"
+
+pattern InstanceType_R6a_large :: InstanceType
+pattern InstanceType_R6a_large = InstanceType' "r6a.large"
+
+pattern InstanceType_R6a_metal :: InstanceType
+pattern InstanceType_R6a_metal = InstanceType' "r6a.metal"
+
+pattern InstanceType_R6a_xlarge :: InstanceType
+pattern InstanceType_R6a_xlarge = InstanceType' "r6a.xlarge"
+
+pattern InstanceType_R6g_12xlarge :: InstanceType
+pattern InstanceType_R6g_12xlarge = InstanceType' "r6g.12xlarge"
+
+pattern InstanceType_R6g_16xlarge :: InstanceType
+pattern InstanceType_R6g_16xlarge = InstanceType' "r6g.16xlarge"
+
+pattern InstanceType_R6g_2xlarge :: InstanceType
+pattern InstanceType_R6g_2xlarge = InstanceType' "r6g.2xlarge"
+
+pattern InstanceType_R6g_4xlarge :: InstanceType
+pattern InstanceType_R6g_4xlarge = InstanceType' "r6g.4xlarge"
+
+pattern InstanceType_R6g_8xlarge :: InstanceType
+pattern InstanceType_R6g_8xlarge = InstanceType' "r6g.8xlarge"
+
+pattern InstanceType_R6g_large :: InstanceType
+pattern InstanceType_R6g_large = InstanceType' "r6g.large"
+
+pattern InstanceType_R6g_medium :: InstanceType
+pattern InstanceType_R6g_medium = InstanceType' "r6g.medium"
+
+pattern InstanceType_R6g_metal :: InstanceType
+pattern InstanceType_R6g_metal = InstanceType' "r6g.metal"
+
+pattern InstanceType_R6g_xlarge :: InstanceType
+pattern InstanceType_R6g_xlarge = InstanceType' "r6g.xlarge"
+
+pattern InstanceType_R6gd_12xlarge :: InstanceType
+pattern InstanceType_R6gd_12xlarge = InstanceType' "r6gd.12xlarge"
+
+pattern InstanceType_R6gd_16xlarge :: InstanceType
+pattern InstanceType_R6gd_16xlarge = InstanceType' "r6gd.16xlarge"
+
+pattern InstanceType_R6gd_2xlarge :: InstanceType
+pattern InstanceType_R6gd_2xlarge = InstanceType' "r6gd.2xlarge"
+
+pattern InstanceType_R6gd_4xlarge :: InstanceType
+pattern InstanceType_R6gd_4xlarge = InstanceType' "r6gd.4xlarge"
+
+pattern InstanceType_R6gd_8xlarge :: InstanceType
+pattern InstanceType_R6gd_8xlarge = InstanceType' "r6gd.8xlarge"
+
+pattern InstanceType_R6gd_large :: InstanceType
+pattern InstanceType_R6gd_large = InstanceType' "r6gd.large"
+
+pattern InstanceType_R6gd_medium :: InstanceType
+pattern InstanceType_R6gd_medium = InstanceType' "r6gd.medium"
+
+pattern InstanceType_R6gd_metal :: InstanceType
+pattern InstanceType_R6gd_metal = InstanceType' "r6gd.metal"
+
+pattern InstanceType_R6gd_xlarge :: InstanceType
+pattern InstanceType_R6gd_xlarge = InstanceType' "r6gd.xlarge"
+
+pattern InstanceType_R6i_12xlarge :: InstanceType
+pattern InstanceType_R6i_12xlarge = InstanceType' "r6i.12xlarge"
+
+pattern InstanceType_R6i_16xlarge :: InstanceType
+pattern InstanceType_R6i_16xlarge = InstanceType' "r6i.16xlarge"
+
+pattern InstanceType_R6i_24xlarge :: InstanceType
+pattern InstanceType_R6i_24xlarge = InstanceType' "r6i.24xlarge"
+
+pattern InstanceType_R6i_2xlarge :: InstanceType
+pattern InstanceType_R6i_2xlarge = InstanceType' "r6i.2xlarge"
+
+pattern InstanceType_R6i_32xlarge :: InstanceType
+pattern InstanceType_R6i_32xlarge = InstanceType' "r6i.32xlarge"
+
+pattern InstanceType_R6i_4xlarge :: InstanceType
+pattern InstanceType_R6i_4xlarge = InstanceType' "r6i.4xlarge"
+
+pattern InstanceType_R6i_8xlarge :: InstanceType
+pattern InstanceType_R6i_8xlarge = InstanceType' "r6i.8xlarge"
+
+pattern InstanceType_R6i_large :: InstanceType
+pattern InstanceType_R6i_large = InstanceType' "r6i.large"
+
+pattern InstanceType_R6i_metal :: InstanceType
+pattern InstanceType_R6i_metal = InstanceType' "r6i.metal"
+
+pattern InstanceType_R6i_xlarge :: InstanceType
+pattern InstanceType_R6i_xlarge = InstanceType' "r6i.xlarge"
+
+pattern InstanceType_R6id_12xlarge :: InstanceType
+pattern InstanceType_R6id_12xlarge = InstanceType' "r6id.12xlarge"
+
+pattern InstanceType_R6id_16xlarge :: InstanceType
+pattern InstanceType_R6id_16xlarge = InstanceType' "r6id.16xlarge"
+
+pattern InstanceType_R6id_24xlarge :: InstanceType
+pattern InstanceType_R6id_24xlarge = InstanceType' "r6id.24xlarge"
+
+pattern InstanceType_R6id_2xlarge :: InstanceType
+pattern InstanceType_R6id_2xlarge = InstanceType' "r6id.2xlarge"
+
+pattern InstanceType_R6id_32xlarge :: InstanceType
+pattern InstanceType_R6id_32xlarge = InstanceType' "r6id.32xlarge"
+
+pattern InstanceType_R6id_4xlarge :: InstanceType
+pattern InstanceType_R6id_4xlarge = InstanceType' "r6id.4xlarge"
+
+pattern InstanceType_R6id_8xlarge :: InstanceType
+pattern InstanceType_R6id_8xlarge = InstanceType' "r6id.8xlarge"
+
+pattern InstanceType_R6id_large :: InstanceType
+pattern InstanceType_R6id_large = InstanceType' "r6id.large"
+
+pattern InstanceType_R6id_metal :: InstanceType
+pattern InstanceType_R6id_metal = InstanceType' "r6id.metal"
+
+pattern InstanceType_R6id_xlarge :: InstanceType
+pattern InstanceType_R6id_xlarge = InstanceType' "r6id.xlarge"
+
+pattern InstanceType_T1_micro :: InstanceType
+pattern InstanceType_T1_micro = InstanceType' "t1.micro"
+
+pattern InstanceType_T2_2xlarge :: InstanceType
+pattern InstanceType_T2_2xlarge = InstanceType' "t2.2xlarge"
+
+pattern InstanceType_T2_large :: InstanceType
+pattern InstanceType_T2_large = InstanceType' "t2.large"
+
+pattern InstanceType_T2_medium :: InstanceType
+pattern InstanceType_T2_medium = InstanceType' "t2.medium"
+
+pattern InstanceType_T2_micro :: InstanceType
+pattern InstanceType_T2_micro = InstanceType' "t2.micro"
+
+pattern InstanceType_T2_nano :: InstanceType
+pattern InstanceType_T2_nano = InstanceType' "t2.nano"
+
+pattern InstanceType_T2_small :: InstanceType
+pattern InstanceType_T2_small = InstanceType' "t2.small"
+
+pattern InstanceType_T2_xlarge :: InstanceType
+pattern InstanceType_T2_xlarge = InstanceType' "t2.xlarge"
+
+pattern InstanceType_T3_2xlarge :: InstanceType
+pattern InstanceType_T3_2xlarge = InstanceType' "t3.2xlarge"
+
+pattern InstanceType_T3_large :: InstanceType
+pattern InstanceType_T3_large = InstanceType' "t3.large"
+
+pattern InstanceType_T3_medium :: InstanceType
+pattern InstanceType_T3_medium = InstanceType' "t3.medium"
+
+pattern InstanceType_T3_micro :: InstanceType
+pattern InstanceType_T3_micro = InstanceType' "t3.micro"
+
+pattern InstanceType_T3_nano :: InstanceType
+pattern InstanceType_T3_nano = InstanceType' "t3.nano"
+
+pattern InstanceType_T3_small :: InstanceType
+pattern InstanceType_T3_small = InstanceType' "t3.small"
+
+pattern InstanceType_T3_xlarge :: InstanceType
+pattern InstanceType_T3_xlarge = InstanceType' "t3.xlarge"
+
+pattern InstanceType_T3a_2xlarge :: InstanceType
+pattern InstanceType_T3a_2xlarge = InstanceType' "t3a.2xlarge"
+
+pattern InstanceType_T3a_large :: InstanceType
+pattern InstanceType_T3a_large = InstanceType' "t3a.large"
+
+pattern InstanceType_T3a_medium :: InstanceType
+pattern InstanceType_T3a_medium = InstanceType' "t3a.medium"
+
+pattern InstanceType_T3a_micro :: InstanceType
+pattern InstanceType_T3a_micro = InstanceType' "t3a.micro"
+
+pattern InstanceType_T3a_nano :: InstanceType
+pattern InstanceType_T3a_nano = InstanceType' "t3a.nano"
+
+pattern InstanceType_T3a_small :: InstanceType
+pattern InstanceType_T3a_small = InstanceType' "t3a.small"
+
+pattern InstanceType_T3a_xlarge :: InstanceType
+pattern InstanceType_T3a_xlarge = InstanceType' "t3a.xlarge"
+
+pattern InstanceType_T4g_2xlarge :: InstanceType
+pattern InstanceType_T4g_2xlarge = InstanceType' "t4g.2xlarge"
+
+pattern InstanceType_T4g_large :: InstanceType
+pattern InstanceType_T4g_large = InstanceType' "t4g.large"
+
+pattern InstanceType_T4g_medium :: InstanceType
+pattern InstanceType_T4g_medium = InstanceType' "t4g.medium"
+
+pattern InstanceType_T4g_micro :: InstanceType
+pattern InstanceType_T4g_micro = InstanceType' "t4g.micro"
+
+pattern InstanceType_T4g_nano :: InstanceType
+pattern InstanceType_T4g_nano = InstanceType' "t4g.nano"
+
+pattern InstanceType_T4g_small :: InstanceType
+pattern InstanceType_T4g_small = InstanceType' "t4g.small"
+
+pattern InstanceType_T4g_xlarge :: InstanceType
+pattern InstanceType_T4g_xlarge = InstanceType' "t4g.xlarge"
+
+pattern InstanceType_Trn1_2xlarge :: InstanceType
+pattern InstanceType_Trn1_2xlarge = InstanceType' "trn1.2xlarge"
+
+pattern InstanceType_Trn1_32xlarge :: InstanceType
+pattern InstanceType_Trn1_32xlarge = InstanceType' "trn1.32xlarge"
+
+pattern InstanceType_U_12tb1_112xlarge :: InstanceType
+pattern InstanceType_U_12tb1_112xlarge = InstanceType' "u-12tb1.112xlarge"
+
+pattern InstanceType_U_12tb1_metal :: InstanceType
+pattern InstanceType_U_12tb1_metal = InstanceType' "u-12tb1.metal"
+
+pattern InstanceType_U_18tb1_112xlarge :: InstanceType
+pattern InstanceType_U_18tb1_112xlarge = InstanceType' "u-18tb1.112xlarge"
+
+pattern InstanceType_U_18tb1_metal :: InstanceType
+pattern InstanceType_U_18tb1_metal = InstanceType' "u-18tb1.metal"
+
+pattern InstanceType_U_24tb1_112xlarge :: InstanceType
+pattern InstanceType_U_24tb1_112xlarge = InstanceType' "u-24tb1.112xlarge"
+
+pattern InstanceType_U_24tb1_metal :: InstanceType
+pattern InstanceType_U_24tb1_metal = InstanceType' "u-24tb1.metal"
+
+pattern InstanceType_U_3tb1_56xlarge :: InstanceType
+pattern InstanceType_U_3tb1_56xlarge = InstanceType' "u-3tb1.56xlarge"
+
+pattern InstanceType_U_6tb1_112xlarge :: InstanceType
+pattern InstanceType_U_6tb1_112xlarge = InstanceType' "u-6tb1.112xlarge"
+
+pattern InstanceType_U_6tb1_56xlarge :: InstanceType
+pattern InstanceType_U_6tb1_56xlarge = InstanceType' "u-6tb1.56xlarge"
+
+pattern InstanceType_U_6tb1_metal :: InstanceType
+pattern InstanceType_U_6tb1_metal = InstanceType' "u-6tb1.metal"
+
+pattern InstanceType_U_9tb1_112xlarge :: InstanceType
+pattern InstanceType_U_9tb1_112xlarge = InstanceType' "u-9tb1.112xlarge"
+
+pattern InstanceType_U_9tb1_metal :: InstanceType
+pattern InstanceType_U_9tb1_metal = InstanceType' "u-9tb1.metal"
+
+pattern InstanceType_Vt1_24xlarge :: InstanceType
+pattern InstanceType_Vt1_24xlarge = InstanceType' "vt1.24xlarge"
+
+pattern InstanceType_Vt1_3xlarge :: InstanceType
+pattern InstanceType_Vt1_3xlarge = InstanceType' "vt1.3xlarge"
+
+pattern InstanceType_Vt1_6xlarge :: InstanceType
+pattern InstanceType_Vt1_6xlarge = InstanceType' "vt1.6xlarge"
+
+pattern InstanceType_X1_16xlarge :: InstanceType
+pattern InstanceType_X1_16xlarge = InstanceType' "x1.16xlarge"
+
+pattern InstanceType_X1_32xlarge :: InstanceType
+pattern InstanceType_X1_32xlarge = InstanceType' "x1.32xlarge"
+
+pattern InstanceType_X1e_16xlarge :: InstanceType
+pattern InstanceType_X1e_16xlarge = InstanceType' "x1e.16xlarge"
+
+pattern InstanceType_X1e_2xlarge :: InstanceType
+pattern InstanceType_X1e_2xlarge = InstanceType' "x1e.2xlarge"
+
+pattern InstanceType_X1e_32xlarge :: InstanceType
+pattern InstanceType_X1e_32xlarge = InstanceType' "x1e.32xlarge"
+
+pattern InstanceType_X1e_4xlarge :: InstanceType
+pattern InstanceType_X1e_4xlarge = InstanceType' "x1e.4xlarge"
+
+pattern InstanceType_X1e_8xlarge :: InstanceType
+pattern InstanceType_X1e_8xlarge = InstanceType' "x1e.8xlarge"
+
+pattern InstanceType_X1e_xlarge :: InstanceType
+pattern InstanceType_X1e_xlarge = InstanceType' "x1e.xlarge"
+
+pattern InstanceType_X2gd_12xlarge :: InstanceType
+pattern InstanceType_X2gd_12xlarge = InstanceType' "x2gd.12xlarge"
+
+pattern InstanceType_X2gd_16xlarge :: InstanceType
+pattern InstanceType_X2gd_16xlarge = InstanceType' "x2gd.16xlarge"
+
+pattern InstanceType_X2gd_2xlarge :: InstanceType
+pattern InstanceType_X2gd_2xlarge = InstanceType' "x2gd.2xlarge"
+
+pattern InstanceType_X2gd_4xlarge :: InstanceType
+pattern InstanceType_X2gd_4xlarge = InstanceType' "x2gd.4xlarge"
+
+pattern InstanceType_X2gd_8xlarge :: InstanceType
+pattern InstanceType_X2gd_8xlarge = InstanceType' "x2gd.8xlarge"
+
+pattern InstanceType_X2gd_large :: InstanceType
+pattern InstanceType_X2gd_large = InstanceType' "x2gd.large"
+
+pattern InstanceType_X2gd_medium :: InstanceType
+pattern InstanceType_X2gd_medium = InstanceType' "x2gd.medium"
+
+pattern InstanceType_X2gd_metal :: InstanceType
+pattern InstanceType_X2gd_metal = InstanceType' "x2gd.metal"
+
+pattern InstanceType_X2gd_xlarge :: InstanceType
+pattern InstanceType_X2gd_xlarge = InstanceType' "x2gd.xlarge"
+
+pattern InstanceType_X2idn_16xlarge :: InstanceType
+pattern InstanceType_X2idn_16xlarge = InstanceType' "x2idn.16xlarge"
+
+pattern InstanceType_X2idn_24xlarge :: InstanceType
+pattern InstanceType_X2idn_24xlarge = InstanceType' "x2idn.24xlarge"
+
+pattern InstanceType_X2idn_32xlarge :: InstanceType
+pattern InstanceType_X2idn_32xlarge = InstanceType' "x2idn.32xlarge"
+
+pattern InstanceType_X2idn_metal :: InstanceType
+pattern InstanceType_X2idn_metal = InstanceType' "x2idn.metal"
+
+pattern InstanceType_X2iedn_16xlarge :: InstanceType
+pattern InstanceType_X2iedn_16xlarge = InstanceType' "x2iedn.16xlarge"
+
+pattern InstanceType_X2iedn_24xlarge :: InstanceType
+pattern InstanceType_X2iedn_24xlarge = InstanceType' "x2iedn.24xlarge"
+
+pattern InstanceType_X2iedn_2xlarge :: InstanceType
+pattern InstanceType_X2iedn_2xlarge = InstanceType' "x2iedn.2xlarge"
+
+pattern InstanceType_X2iedn_32xlarge :: InstanceType
+pattern InstanceType_X2iedn_32xlarge = InstanceType' "x2iedn.32xlarge"
+
+pattern InstanceType_X2iedn_4xlarge :: InstanceType
+pattern InstanceType_X2iedn_4xlarge = InstanceType' "x2iedn.4xlarge"
+
+pattern InstanceType_X2iedn_8xlarge :: InstanceType
+pattern InstanceType_X2iedn_8xlarge = InstanceType' "x2iedn.8xlarge"
+
+pattern InstanceType_X2iedn_metal :: InstanceType
+pattern InstanceType_X2iedn_metal = InstanceType' "x2iedn.metal"
+
+pattern InstanceType_X2iedn_xlarge :: InstanceType
+pattern InstanceType_X2iedn_xlarge = InstanceType' "x2iedn.xlarge"
+
+pattern InstanceType_X2iezn_12xlarge :: InstanceType
+pattern InstanceType_X2iezn_12xlarge = InstanceType' "x2iezn.12xlarge"
+
+pattern InstanceType_X2iezn_2xlarge :: InstanceType
+pattern InstanceType_X2iezn_2xlarge = InstanceType' "x2iezn.2xlarge"
+
+pattern InstanceType_X2iezn_4xlarge :: InstanceType
+pattern InstanceType_X2iezn_4xlarge = InstanceType' "x2iezn.4xlarge"
+
+pattern InstanceType_X2iezn_6xlarge :: InstanceType
+pattern InstanceType_X2iezn_6xlarge = InstanceType' "x2iezn.6xlarge"
+
+pattern InstanceType_X2iezn_8xlarge :: InstanceType
+pattern InstanceType_X2iezn_8xlarge = InstanceType' "x2iezn.8xlarge"
+
+pattern InstanceType_X2iezn_metal :: InstanceType
+pattern InstanceType_X2iezn_metal = InstanceType' "x2iezn.metal"
+
+pattern InstanceType_Z1d_12xlarge :: InstanceType
+pattern InstanceType_Z1d_12xlarge = InstanceType' "z1d.12xlarge"
+
+pattern InstanceType_Z1d_2xlarge :: InstanceType
+pattern InstanceType_Z1d_2xlarge = InstanceType' "z1d.2xlarge"
+
+pattern InstanceType_Z1d_3xlarge :: InstanceType
+pattern InstanceType_Z1d_3xlarge = InstanceType' "z1d.3xlarge"
+
+pattern InstanceType_Z1d_6xlarge :: InstanceType
+pattern InstanceType_Z1d_6xlarge = InstanceType' "z1d.6xlarge"
+
+pattern InstanceType_Z1d_large :: InstanceType
+pattern InstanceType_Z1d_large = InstanceType' "z1d.large"
+
+pattern InstanceType_Z1d_metal :: InstanceType
+pattern InstanceType_Z1d_metal = InstanceType' "z1d.metal"
+
+pattern InstanceType_Z1d_xlarge :: InstanceType
+pattern InstanceType_Z1d_xlarge = InstanceType' "z1d.xlarge"
+
+{-# COMPLETE
+  InstanceType_A1_2xlarge,
+  InstanceType_A1_4xlarge,
+  InstanceType_A1_large,
+  InstanceType_A1_medium,
+  InstanceType_A1_metal,
+  InstanceType_A1_xlarge,
+  InstanceType_C1_medium,
+  InstanceType_C1_xlarge,
+  InstanceType_C3_2xlarge,
+  InstanceType_C3_4xlarge,
+  InstanceType_C3_8xlarge,
+  InstanceType_C3_large,
+  InstanceType_C3_xlarge,
+  InstanceType_C4_2xlarge,
+  InstanceType_C4_4xlarge,
+  InstanceType_C4_8xlarge,
+  InstanceType_C4_large,
+  InstanceType_C4_xlarge,
+  InstanceType_C5_12xlarge,
+  InstanceType_C5_18xlarge,
+  InstanceType_C5_24xlarge,
+  InstanceType_C5_2xlarge,
+  InstanceType_C5_4xlarge,
+  InstanceType_C5_9xlarge,
+  InstanceType_C5_large,
+  InstanceType_C5_metal,
+  InstanceType_C5_xlarge,
+  InstanceType_C5a_12xlarge,
+  InstanceType_C5a_16xlarge,
+  InstanceType_C5a_24xlarge,
+  InstanceType_C5a_2xlarge,
+  InstanceType_C5a_4xlarge,
+  InstanceType_C5a_8xlarge,
+  InstanceType_C5a_large,
+  InstanceType_C5a_xlarge,
+  InstanceType_C5ad_12xlarge,
+  InstanceType_C5ad_16xlarge,
+  InstanceType_C5ad_24xlarge,
+  InstanceType_C5ad_2xlarge,
+  InstanceType_C5ad_4xlarge,
+  InstanceType_C5ad_8xlarge,
+  InstanceType_C5ad_large,
+  InstanceType_C5ad_xlarge,
+  InstanceType_C5d_12xlarge,
+  InstanceType_C5d_18xlarge,
+  InstanceType_C5d_24xlarge,
+  InstanceType_C5d_2xlarge,
+  InstanceType_C5d_4xlarge,
+  InstanceType_C5d_9xlarge,
+  InstanceType_C5d_large,
+  InstanceType_C5d_metal,
+  InstanceType_C5d_xlarge,
+  InstanceType_C5n_18xlarge,
+  InstanceType_C5n_2xlarge,
+  InstanceType_C5n_4xlarge,
+  InstanceType_C5n_9xlarge,
+  InstanceType_C5n_large,
+  InstanceType_C5n_metal,
+  InstanceType_C5n_xlarge,
+  InstanceType_C6a_12xlarge,
+  InstanceType_C6a_16xlarge,
+  InstanceType_C6a_24xlarge,
+  InstanceType_C6a_2xlarge,
+  InstanceType_C6a_32xlarge,
+  InstanceType_C6a_48xlarge,
+  InstanceType_C6a_4xlarge,
+  InstanceType_C6a_8xlarge,
+  InstanceType_C6a_large,
+  InstanceType_C6a_metal,
+  InstanceType_C6a_xlarge,
+  InstanceType_C6g_12xlarge,
+  InstanceType_C6g_16xlarge,
+  InstanceType_C6g_2xlarge,
+  InstanceType_C6g_4xlarge,
+  InstanceType_C6g_8xlarge,
+  InstanceType_C6g_large,
+  InstanceType_C6g_medium,
+  InstanceType_C6g_metal,
+  InstanceType_C6g_xlarge,
+  InstanceType_C6gd_12xlarge,
+  InstanceType_C6gd_16xlarge,
+  InstanceType_C6gd_2xlarge,
+  InstanceType_C6gd_4xlarge,
+  InstanceType_C6gd_8xlarge,
+  InstanceType_C6gd_large,
+  InstanceType_C6gd_medium,
+  InstanceType_C6gd_metal,
+  InstanceType_C6gd_xlarge,
+  InstanceType_C6gn_12xlarge,
+  InstanceType_C6gn_16xlarge,
+  InstanceType_C6gn_2xlarge,
+  InstanceType_C6gn_4xlarge,
+  InstanceType_C6gn_8xlarge,
+  InstanceType_C6gn_large,
+  InstanceType_C6gn_medium,
+  InstanceType_C6gn_xlarge,
+  InstanceType_C6i_12xlarge,
+  InstanceType_C6i_16xlarge,
+  InstanceType_C6i_24xlarge,
+  InstanceType_C6i_2xlarge,
+  InstanceType_C6i_32xlarge,
+  InstanceType_C6i_4xlarge,
+  InstanceType_C6i_8xlarge,
+  InstanceType_C6i_large,
+  InstanceType_C6i_metal,
+  InstanceType_C6i_xlarge,
+  InstanceType_C6id_12xlarge,
+  InstanceType_C6id_16xlarge,
+  InstanceType_C6id_24xlarge,
+  InstanceType_C6id_2xlarge,
+  InstanceType_C6id_32xlarge,
+  InstanceType_C6id_4xlarge,
+  InstanceType_C6id_8xlarge,
+  InstanceType_C6id_large,
+  InstanceType_C6id_metal,
+  InstanceType_C6id_xlarge,
+  InstanceType_C7g_12xlarge,
+  InstanceType_C7g_16xlarge,
+  InstanceType_C7g_2xlarge,
+  InstanceType_C7g_4xlarge,
+  InstanceType_C7g_8xlarge,
+  InstanceType_C7g_large,
+  InstanceType_C7g_medium,
+  InstanceType_C7g_xlarge,
+  InstanceType_Cc1_4xlarge,
+  InstanceType_Cc2_8xlarge,
+  InstanceType_Cg1_4xlarge,
+  InstanceType_Cr1_8xlarge,
+  InstanceType_D2_2xlarge,
+  InstanceType_D2_4xlarge,
+  InstanceType_D2_8xlarge,
+  InstanceType_D2_xlarge,
+  InstanceType_D3_2xlarge,
+  InstanceType_D3_4xlarge,
+  InstanceType_D3_8xlarge,
+  InstanceType_D3_xlarge,
+  InstanceType_D3en_12xlarge,
+  InstanceType_D3en_2xlarge,
+  InstanceType_D3en_4xlarge,
+  InstanceType_D3en_6xlarge,
+  InstanceType_D3en_8xlarge,
+  InstanceType_D3en_xlarge,
+  InstanceType_Dl1_24xlarge,
+  InstanceType_F1_16xlarge,
+  InstanceType_F1_2xlarge,
+  InstanceType_F1_4xlarge,
+  InstanceType_G2_2xlarge,
+  InstanceType_G2_8xlarge,
+  InstanceType_G3_16xlarge,
+  InstanceType_G3_4xlarge,
+  InstanceType_G3_8xlarge,
+  InstanceType_G3s_xlarge,
+  InstanceType_G4ad_16xlarge,
+  InstanceType_G4ad_2xlarge,
+  InstanceType_G4ad_4xlarge,
+  InstanceType_G4ad_8xlarge,
+  InstanceType_G4ad_xlarge,
+  InstanceType_G4dn_12xlarge,
+  InstanceType_G4dn_16xlarge,
+  InstanceType_G4dn_2xlarge,
+  InstanceType_G4dn_4xlarge,
+  InstanceType_G4dn_8xlarge,
+  InstanceType_G4dn_metal,
+  InstanceType_G4dn_xlarge,
+  InstanceType_G5_12xlarge,
+  InstanceType_G5_16xlarge,
+  InstanceType_G5_24xlarge,
+  InstanceType_G5_2xlarge,
+  InstanceType_G5_48xlarge,
+  InstanceType_G5_4xlarge,
+  InstanceType_G5_8xlarge,
+  InstanceType_G5_xlarge,
+  InstanceType_G5g_16xlarge,
+  InstanceType_G5g_2xlarge,
+  InstanceType_G5g_4xlarge,
+  InstanceType_G5g_8xlarge,
+  InstanceType_G5g_metal,
+  InstanceType_G5g_xlarge,
+  InstanceType_H1_16xlarge,
+  InstanceType_H1_2xlarge,
+  InstanceType_H1_4xlarge,
+  InstanceType_H1_8xlarge,
+  InstanceType_Hi1_4xlarge,
+  InstanceType_Hpc6a_48xlarge,
+  InstanceType_Hpc6id_32xlarge,
+  InstanceType_Hs1_8xlarge,
+  InstanceType_I2_2xlarge,
+  InstanceType_I2_4xlarge,
+  InstanceType_I2_8xlarge,
+  InstanceType_I2_xlarge,
+  InstanceType_I3_16xlarge,
+  InstanceType_I3_2xlarge,
+  InstanceType_I3_4xlarge,
+  InstanceType_I3_8xlarge,
+  InstanceType_I3_large,
+  InstanceType_I3_metal,
+  InstanceType_I3_xlarge,
+  InstanceType_I3en_12xlarge,
+  InstanceType_I3en_24xlarge,
+  InstanceType_I3en_2xlarge,
+  InstanceType_I3en_3xlarge,
+  InstanceType_I3en_6xlarge,
+  InstanceType_I3en_large,
+  InstanceType_I3en_metal,
+  InstanceType_I3en_xlarge,
+  InstanceType_I4i_16xlarge,
+  InstanceType_I4i_2xlarge,
+  InstanceType_I4i_32xlarge,
+  InstanceType_I4i_4xlarge,
+  InstanceType_I4i_8xlarge,
+  InstanceType_I4i_large,
+  InstanceType_I4i_metal,
+  InstanceType_I4i_xlarge,
+  InstanceType_Im4gn_16xlarge,
+  InstanceType_Im4gn_2xlarge,
+  InstanceType_Im4gn_4xlarge,
+  InstanceType_Im4gn_8xlarge,
+  InstanceType_Im4gn_large,
+  InstanceType_Im4gn_xlarge,
+  InstanceType_Inf1_24xlarge,
+  InstanceType_Inf1_2xlarge,
+  InstanceType_Inf1_6xlarge,
+  InstanceType_Inf1_xlarge,
+  InstanceType_Is4gen_2xlarge,
+  InstanceType_Is4gen_4xlarge,
+  InstanceType_Is4gen_8xlarge,
+  InstanceType_Is4gen_large,
+  InstanceType_Is4gen_medium,
+  InstanceType_Is4gen_xlarge,
+  InstanceType_M1_large,
+  InstanceType_M1_medium,
+  InstanceType_M1_small,
+  InstanceType_M1_xlarge,
+  InstanceType_M2_2xlarge,
+  InstanceType_M2_4xlarge,
+  InstanceType_M2_xlarge,
+  InstanceType_M3_2xlarge,
+  InstanceType_M3_large,
+  InstanceType_M3_medium,
+  InstanceType_M3_xlarge,
+  InstanceType_M4_10xlarge,
+  InstanceType_M4_16xlarge,
+  InstanceType_M4_2xlarge,
+  InstanceType_M4_4xlarge,
+  InstanceType_M4_large,
+  InstanceType_M4_xlarge,
+  InstanceType_M5_12xlarge,
+  InstanceType_M5_16xlarge,
+  InstanceType_M5_24xlarge,
+  InstanceType_M5_2xlarge,
+  InstanceType_M5_4xlarge,
+  InstanceType_M5_8xlarge,
+  InstanceType_M5_large,
+  InstanceType_M5_metal,
+  InstanceType_M5_xlarge,
+  InstanceType_M5a_12xlarge,
+  InstanceType_M5a_16xlarge,
+  InstanceType_M5a_24xlarge,
+  InstanceType_M5a_2xlarge,
+  InstanceType_M5a_4xlarge,
+  InstanceType_M5a_8xlarge,
+  InstanceType_M5a_large,
+  InstanceType_M5a_xlarge,
+  InstanceType_M5ad_12xlarge,
+  InstanceType_M5ad_16xlarge,
+  InstanceType_M5ad_24xlarge,
+  InstanceType_M5ad_2xlarge,
+  InstanceType_M5ad_4xlarge,
+  InstanceType_M5ad_8xlarge,
+  InstanceType_M5ad_large,
+  InstanceType_M5ad_xlarge,
+  InstanceType_M5d_12xlarge,
+  InstanceType_M5d_16xlarge,
+  InstanceType_M5d_24xlarge,
+  InstanceType_M5d_2xlarge,
+  InstanceType_M5d_4xlarge,
+  InstanceType_M5d_8xlarge,
+  InstanceType_M5d_large,
+  InstanceType_M5d_metal,
+  InstanceType_M5d_xlarge,
+  InstanceType_M5dn_12xlarge,
+  InstanceType_M5dn_16xlarge,
+  InstanceType_M5dn_24xlarge,
+  InstanceType_M5dn_2xlarge,
+  InstanceType_M5dn_4xlarge,
+  InstanceType_M5dn_8xlarge,
+  InstanceType_M5dn_large,
+  InstanceType_M5dn_metal,
+  InstanceType_M5dn_xlarge,
+  InstanceType_M5n_12xlarge,
+  InstanceType_M5n_16xlarge,
+  InstanceType_M5n_24xlarge,
+  InstanceType_M5n_2xlarge,
+  InstanceType_M5n_4xlarge,
+  InstanceType_M5n_8xlarge,
+  InstanceType_M5n_large,
+  InstanceType_M5n_metal,
+  InstanceType_M5n_xlarge,
+  InstanceType_M5zn_12xlarge,
+  InstanceType_M5zn_2xlarge,
+  InstanceType_M5zn_3xlarge,
+  InstanceType_M5zn_6xlarge,
+  InstanceType_M5zn_large,
+  InstanceType_M5zn_metal,
+  InstanceType_M5zn_xlarge,
+  InstanceType_M6a_12xlarge,
+  InstanceType_M6a_16xlarge,
+  InstanceType_M6a_24xlarge,
+  InstanceType_M6a_2xlarge,
+  InstanceType_M6a_32xlarge,
+  InstanceType_M6a_48xlarge,
+  InstanceType_M6a_4xlarge,
+  InstanceType_M6a_8xlarge,
+  InstanceType_M6a_large,
+  InstanceType_M6a_metal,
+  InstanceType_M6a_xlarge,
+  InstanceType_M6g_12xlarge,
+  InstanceType_M6g_16xlarge,
+  InstanceType_M6g_2xlarge,
+  InstanceType_M6g_4xlarge,
+  InstanceType_M6g_8xlarge,
+  InstanceType_M6g_large,
+  InstanceType_M6g_medium,
+  InstanceType_M6g_metal,
+  InstanceType_M6g_xlarge,
+  InstanceType_M6gd_12xlarge,
+  InstanceType_M6gd_16xlarge,
+  InstanceType_M6gd_2xlarge,
+  InstanceType_M6gd_4xlarge,
+  InstanceType_M6gd_8xlarge,
+  InstanceType_M6gd_large,
+  InstanceType_M6gd_medium,
+  InstanceType_M6gd_metal,
+  InstanceType_M6gd_xlarge,
+  InstanceType_M6i_12xlarge,
+  InstanceType_M6i_16xlarge,
+  InstanceType_M6i_24xlarge,
+  InstanceType_M6i_2xlarge,
+  InstanceType_M6i_32xlarge,
+  InstanceType_M6i_4xlarge,
+  InstanceType_M6i_8xlarge,
+  InstanceType_M6i_large,
+  InstanceType_M6i_metal,
+  InstanceType_M6i_xlarge,
+  InstanceType_M6id_12xlarge,
+  InstanceType_M6id_16xlarge,
+  InstanceType_M6id_24xlarge,
+  InstanceType_M6id_2xlarge,
+  InstanceType_M6id_32xlarge,
+  InstanceType_M6id_4xlarge,
+  InstanceType_M6id_8xlarge,
+  InstanceType_M6id_large,
+  InstanceType_M6id_metal,
+  InstanceType_M6id_xlarge,
+  InstanceType_Mac1_metal,
+  InstanceType_Mac2_metal,
+  InstanceType_P2_16xlarge,
+  InstanceType_P2_8xlarge,
+  InstanceType_P2_xlarge,
+  InstanceType_P3_16xlarge,
+  InstanceType_P3_2xlarge,
+  InstanceType_P3_8xlarge,
+  InstanceType_P3dn_24xlarge,
+  InstanceType_P4d_24xlarge,
+  InstanceType_P4de_24xlarge,
+  InstanceType_R3_2xlarge,
+  InstanceType_R3_4xlarge,
+  InstanceType_R3_8xlarge,
+  InstanceType_R3_large,
+  InstanceType_R3_xlarge,
+  InstanceType_R4_16xlarge,
+  InstanceType_R4_2xlarge,
+  InstanceType_R4_4xlarge,
+  InstanceType_R4_8xlarge,
+  InstanceType_R4_large,
+  InstanceType_R4_xlarge,
+  InstanceType_R5_12xlarge,
+  InstanceType_R5_16xlarge,
+  InstanceType_R5_24xlarge,
+  InstanceType_R5_2xlarge,
+  InstanceType_R5_4xlarge,
+  InstanceType_R5_8xlarge,
+  InstanceType_R5_large,
+  InstanceType_R5_metal,
+  InstanceType_R5_xlarge,
+  InstanceType_R5a_12xlarge,
+  InstanceType_R5a_16xlarge,
+  InstanceType_R5a_24xlarge,
+  InstanceType_R5a_2xlarge,
+  InstanceType_R5a_4xlarge,
+  InstanceType_R5a_8xlarge,
+  InstanceType_R5a_large,
+  InstanceType_R5a_xlarge,
+  InstanceType_R5ad_12xlarge,
+  InstanceType_R5ad_16xlarge,
+  InstanceType_R5ad_24xlarge,
+  InstanceType_R5ad_2xlarge,
+  InstanceType_R5ad_4xlarge,
+  InstanceType_R5ad_8xlarge,
+  InstanceType_R5ad_large,
+  InstanceType_R5ad_xlarge,
+  InstanceType_R5b_12xlarge,
+  InstanceType_R5b_16xlarge,
+  InstanceType_R5b_24xlarge,
+  InstanceType_R5b_2xlarge,
+  InstanceType_R5b_4xlarge,
+  InstanceType_R5b_8xlarge,
+  InstanceType_R5b_large,
+  InstanceType_R5b_metal,
+  InstanceType_R5b_xlarge,
+  InstanceType_R5d_12xlarge,
+  InstanceType_R5d_16xlarge,
+  InstanceType_R5d_24xlarge,
+  InstanceType_R5d_2xlarge,
+  InstanceType_R5d_4xlarge,
+  InstanceType_R5d_8xlarge,
+  InstanceType_R5d_large,
+  InstanceType_R5d_metal,
+  InstanceType_R5d_xlarge,
+  InstanceType_R5dn_12xlarge,
+  InstanceType_R5dn_16xlarge,
+  InstanceType_R5dn_24xlarge,
+  InstanceType_R5dn_2xlarge,
+  InstanceType_R5dn_4xlarge,
+  InstanceType_R5dn_8xlarge,
+  InstanceType_R5dn_large,
+  InstanceType_R5dn_metal,
+  InstanceType_R5dn_xlarge,
+  InstanceType_R5n_12xlarge,
+  InstanceType_R5n_16xlarge,
+  InstanceType_R5n_24xlarge,
+  InstanceType_R5n_2xlarge,
+  InstanceType_R5n_4xlarge,
+  InstanceType_R5n_8xlarge,
+  InstanceType_R5n_large,
+  InstanceType_R5n_metal,
+  InstanceType_R5n_xlarge,
+  InstanceType_R6a_12xlarge,
+  InstanceType_R6a_16xlarge,
+  InstanceType_R6a_24xlarge,
+  InstanceType_R6a_2xlarge,
+  InstanceType_R6a_32xlarge,
+  InstanceType_R6a_48xlarge,
+  InstanceType_R6a_4xlarge,
+  InstanceType_R6a_8xlarge,
+  InstanceType_R6a_large,
+  InstanceType_R6a_metal,
+  InstanceType_R6a_xlarge,
+  InstanceType_R6g_12xlarge,
+  InstanceType_R6g_16xlarge,
+  InstanceType_R6g_2xlarge,
+  InstanceType_R6g_4xlarge,
+  InstanceType_R6g_8xlarge,
+  InstanceType_R6g_large,
+  InstanceType_R6g_medium,
+  InstanceType_R6g_metal,
+  InstanceType_R6g_xlarge,
+  InstanceType_R6gd_12xlarge,
+  InstanceType_R6gd_16xlarge,
+  InstanceType_R6gd_2xlarge,
+  InstanceType_R6gd_4xlarge,
+  InstanceType_R6gd_8xlarge,
+  InstanceType_R6gd_large,
+  InstanceType_R6gd_medium,
+  InstanceType_R6gd_metal,
+  InstanceType_R6gd_xlarge,
+  InstanceType_R6i_12xlarge,
+  InstanceType_R6i_16xlarge,
+  InstanceType_R6i_24xlarge,
+  InstanceType_R6i_2xlarge,
+  InstanceType_R6i_32xlarge,
+  InstanceType_R6i_4xlarge,
+  InstanceType_R6i_8xlarge,
+  InstanceType_R6i_large,
+  InstanceType_R6i_metal,
+  InstanceType_R6i_xlarge,
+  InstanceType_R6id_12xlarge,
+  InstanceType_R6id_16xlarge,
+  InstanceType_R6id_24xlarge,
+  InstanceType_R6id_2xlarge,
+  InstanceType_R6id_32xlarge,
+  InstanceType_R6id_4xlarge,
+  InstanceType_R6id_8xlarge,
+  InstanceType_R6id_large,
+  InstanceType_R6id_metal,
+  InstanceType_R6id_xlarge,
+  InstanceType_T1_micro,
+  InstanceType_T2_2xlarge,
+  InstanceType_T2_large,
+  InstanceType_T2_medium,
+  InstanceType_T2_micro,
+  InstanceType_T2_nano,
+  InstanceType_T2_small,
+  InstanceType_T2_xlarge,
+  InstanceType_T3_2xlarge,
+  InstanceType_T3_large,
+  InstanceType_T3_medium,
+  InstanceType_T3_micro,
+  InstanceType_T3_nano,
+  InstanceType_T3_small,
+  InstanceType_T3_xlarge,
+  InstanceType_T3a_2xlarge,
+  InstanceType_T3a_large,
+  InstanceType_T3a_medium,
+  InstanceType_T3a_micro,
+  InstanceType_T3a_nano,
+  InstanceType_T3a_small,
+  InstanceType_T3a_xlarge,
+  InstanceType_T4g_2xlarge,
+  InstanceType_T4g_large,
+  InstanceType_T4g_medium,
+  InstanceType_T4g_micro,
+  InstanceType_T4g_nano,
+  InstanceType_T4g_small,
+  InstanceType_T4g_xlarge,
+  InstanceType_Trn1_2xlarge,
+  InstanceType_Trn1_32xlarge,
+  InstanceType_U_12tb1_112xlarge,
+  InstanceType_U_12tb1_metal,
+  InstanceType_U_18tb1_112xlarge,
+  InstanceType_U_18tb1_metal,
+  InstanceType_U_24tb1_112xlarge,
+  InstanceType_U_24tb1_metal,
+  InstanceType_U_3tb1_56xlarge,
+  InstanceType_U_6tb1_112xlarge,
+  InstanceType_U_6tb1_56xlarge,
+  InstanceType_U_6tb1_metal,
+  InstanceType_U_9tb1_112xlarge,
+  InstanceType_U_9tb1_metal,
+  InstanceType_Vt1_24xlarge,
+  InstanceType_Vt1_3xlarge,
+  InstanceType_Vt1_6xlarge,
+  InstanceType_X1_16xlarge,
+  InstanceType_X1_32xlarge,
+  InstanceType_X1e_16xlarge,
+  InstanceType_X1e_2xlarge,
+  InstanceType_X1e_32xlarge,
+  InstanceType_X1e_4xlarge,
+  InstanceType_X1e_8xlarge,
+  InstanceType_X1e_xlarge,
+  InstanceType_X2gd_12xlarge,
+  InstanceType_X2gd_16xlarge,
+  InstanceType_X2gd_2xlarge,
+  InstanceType_X2gd_4xlarge,
+  InstanceType_X2gd_8xlarge,
+  InstanceType_X2gd_large,
+  InstanceType_X2gd_medium,
+  InstanceType_X2gd_metal,
+  InstanceType_X2gd_xlarge,
+  InstanceType_X2idn_16xlarge,
+  InstanceType_X2idn_24xlarge,
+  InstanceType_X2idn_32xlarge,
+  InstanceType_X2idn_metal,
+  InstanceType_X2iedn_16xlarge,
+  InstanceType_X2iedn_24xlarge,
+  InstanceType_X2iedn_2xlarge,
+  InstanceType_X2iedn_32xlarge,
+  InstanceType_X2iedn_4xlarge,
+  InstanceType_X2iedn_8xlarge,
+  InstanceType_X2iedn_metal,
+  InstanceType_X2iedn_xlarge,
+  InstanceType_X2iezn_12xlarge,
+  InstanceType_X2iezn_2xlarge,
+  InstanceType_X2iezn_4xlarge,
+  InstanceType_X2iezn_6xlarge,
+  InstanceType_X2iezn_8xlarge,
+  InstanceType_X2iezn_metal,
+  InstanceType_Z1d_12xlarge,
+  InstanceType_Z1d_2xlarge,
+  InstanceType_Z1d_3xlarge,
+  InstanceType_Z1d_6xlarge,
+  InstanceType_Z1d_large,
+  InstanceType_Z1d_metal,
+  InstanceType_Z1d_xlarge,
+  InstanceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceTypeHypervisor.hs b/gen/Amazonka/EC2/Types/InstanceTypeHypervisor.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceTypeHypervisor.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceTypeHypervisor
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceTypeHypervisor
+  ( InstanceTypeHypervisor
+      ( ..,
+        InstanceTypeHypervisor_Nitro,
+        InstanceTypeHypervisor_Xen
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InstanceTypeHypervisor = InstanceTypeHypervisor'
+  { fromInstanceTypeHypervisor ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InstanceTypeHypervisor_Nitro :: InstanceTypeHypervisor
+pattern InstanceTypeHypervisor_Nitro = InstanceTypeHypervisor' "nitro"
+
+pattern InstanceTypeHypervisor_Xen :: InstanceTypeHypervisor
+pattern InstanceTypeHypervisor_Xen = InstanceTypeHypervisor' "xen"
+
+{-# COMPLETE
+  InstanceTypeHypervisor_Nitro,
+  InstanceTypeHypervisor_Xen,
+  InstanceTypeHypervisor'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InstanceTypeInfo.hs b/gen/Amazonka/EC2/Types/InstanceTypeInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceTypeInfo.hs
@@ -0,0 +1,396 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceTypeInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceTypeInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BootModeType
+import Amazonka.EC2.Types.EbsInfo
+import Amazonka.EC2.Types.FpgaInfo
+import Amazonka.EC2.Types.GpuInfo
+import Amazonka.EC2.Types.InferenceAcceleratorInfo
+import Amazonka.EC2.Types.InstanceStorageInfo
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.InstanceTypeHypervisor
+import Amazonka.EC2.Types.MemoryInfo
+import Amazonka.EC2.Types.NetworkInfo
+import Amazonka.EC2.Types.PlacementGroupInfo
+import Amazonka.EC2.Types.ProcessorInfo
+import Amazonka.EC2.Types.RootDeviceType
+import Amazonka.EC2.Types.UsageClassType
+import Amazonka.EC2.Types.VCpuInfo
+import Amazonka.EC2.Types.VirtualizationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the instance type.
+--
+-- /See:/ 'newInstanceTypeInfo' smart constructor.
+data InstanceTypeInfo = InstanceTypeInfo'
+  { -- | Indicates whether auto recovery is supported.
+    autoRecoverySupported :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance is a bare metal instance type.
+    bareMetal :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance type is a burstable performance instance
+    -- type.
+    burstablePerformanceSupported :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance type is current generation.
+    currentGeneration :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether Dedicated Hosts are supported on the instance type.
+    dedicatedHostsSupported :: Prelude.Maybe Prelude.Bool,
+    -- | Describes the Amazon EBS settings for the instance type.
+    ebsInfo :: Prelude.Maybe EbsInfo,
+    -- | Describes the FPGA accelerator settings for the instance type.
+    fpgaInfo :: Prelude.Maybe FpgaInfo,
+    -- | Indicates whether the instance type is eligible for the free tier.
+    freeTierEligible :: Prelude.Maybe Prelude.Bool,
+    -- | Describes the GPU accelerator settings for the instance type.
+    gpuInfo :: Prelude.Maybe GpuInfo,
+    -- | Indicates whether On-Demand hibernation is supported.
+    hibernationSupported :: Prelude.Maybe Prelude.Bool,
+    -- | The hypervisor for the instance type.
+    hypervisor :: Prelude.Maybe InstanceTypeHypervisor,
+    -- | Describes the Inference accelerator settings for the instance type.
+    inferenceAcceleratorInfo :: Prelude.Maybe InferenceAcceleratorInfo,
+    -- | Describes the instance storage for the instance type.
+    instanceStorageInfo :: Prelude.Maybe InstanceStorageInfo,
+    -- | Indicates whether instance storage is supported.
+    instanceStorageSupported :: Prelude.Maybe Prelude.Bool,
+    -- | The instance type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | Describes the memory for the instance type.
+    memoryInfo :: Prelude.Maybe MemoryInfo,
+    -- | Describes the network settings for the instance type.
+    networkInfo :: Prelude.Maybe NetworkInfo,
+    -- | Describes the placement group settings for the instance type.
+    placementGroupInfo :: Prelude.Maybe PlacementGroupInfo,
+    -- | Describes the processor.
+    processorInfo :: Prelude.Maybe ProcessorInfo,
+    -- | The supported boot modes. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+    -- in the /Amazon EC2 User Guide/.
+    supportedBootModes :: Prelude.Maybe [BootModeType],
+    -- | The supported root device types.
+    supportedRootDeviceTypes :: Prelude.Maybe [RootDeviceType],
+    -- | Indicates whether the instance type is offered for spot or On-Demand.
+    supportedUsageClasses :: Prelude.Maybe [UsageClassType],
+    -- | The supported virtualization types.
+    supportedVirtualizationTypes :: Prelude.Maybe [VirtualizationType],
+    -- | Describes the vCPU configurations for the instance type.
+    vCpuInfo :: Prelude.Maybe VCpuInfo
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceTypeInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecoverySupported', 'instanceTypeInfo_autoRecoverySupported' - Indicates whether auto recovery is supported.
+--
+-- 'bareMetal', 'instanceTypeInfo_bareMetal' - Indicates whether the instance is a bare metal instance type.
+--
+-- 'burstablePerformanceSupported', 'instanceTypeInfo_burstablePerformanceSupported' - Indicates whether the instance type is a burstable performance instance
+-- type.
+--
+-- 'currentGeneration', 'instanceTypeInfo_currentGeneration' - Indicates whether the instance type is current generation.
+--
+-- 'dedicatedHostsSupported', 'instanceTypeInfo_dedicatedHostsSupported' - Indicates whether Dedicated Hosts are supported on the instance type.
+--
+-- 'ebsInfo', 'instanceTypeInfo_ebsInfo' - Describes the Amazon EBS settings for the instance type.
+--
+-- 'fpgaInfo', 'instanceTypeInfo_fpgaInfo' - Describes the FPGA accelerator settings for the instance type.
+--
+-- 'freeTierEligible', 'instanceTypeInfo_freeTierEligible' - Indicates whether the instance type is eligible for the free tier.
+--
+-- 'gpuInfo', 'instanceTypeInfo_gpuInfo' - Describes the GPU accelerator settings for the instance type.
+--
+-- 'hibernationSupported', 'instanceTypeInfo_hibernationSupported' - Indicates whether On-Demand hibernation is supported.
+--
+-- 'hypervisor', 'instanceTypeInfo_hypervisor' - The hypervisor for the instance type.
+--
+-- 'inferenceAcceleratorInfo', 'instanceTypeInfo_inferenceAcceleratorInfo' - Describes the Inference accelerator settings for the instance type.
+--
+-- 'instanceStorageInfo', 'instanceTypeInfo_instanceStorageInfo' - Describes the instance storage for the instance type.
+--
+-- 'instanceStorageSupported', 'instanceTypeInfo_instanceStorageSupported' - Indicates whether instance storage is supported.
+--
+-- 'instanceType', 'instanceTypeInfo_instanceType' - The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'memoryInfo', 'instanceTypeInfo_memoryInfo' - Describes the memory for the instance type.
+--
+-- 'networkInfo', 'instanceTypeInfo_networkInfo' - Describes the network settings for the instance type.
+--
+-- 'placementGroupInfo', 'instanceTypeInfo_placementGroupInfo' - Describes the placement group settings for the instance type.
+--
+-- 'processorInfo', 'instanceTypeInfo_processorInfo' - Describes the processor.
+--
+-- 'supportedBootModes', 'instanceTypeInfo_supportedBootModes' - The supported boot modes. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'supportedRootDeviceTypes', 'instanceTypeInfo_supportedRootDeviceTypes' - The supported root device types.
+--
+-- 'supportedUsageClasses', 'instanceTypeInfo_supportedUsageClasses' - Indicates whether the instance type is offered for spot or On-Demand.
+--
+-- 'supportedVirtualizationTypes', 'instanceTypeInfo_supportedVirtualizationTypes' - The supported virtualization types.
+--
+-- 'vCpuInfo', 'instanceTypeInfo_vCpuInfo' - Describes the vCPU configurations for the instance type.
+newInstanceTypeInfo ::
+  InstanceTypeInfo
+newInstanceTypeInfo =
+  InstanceTypeInfo'
+    { autoRecoverySupported =
+        Prelude.Nothing,
+      bareMetal = Prelude.Nothing,
+      burstablePerformanceSupported = Prelude.Nothing,
+      currentGeneration = Prelude.Nothing,
+      dedicatedHostsSupported = Prelude.Nothing,
+      ebsInfo = Prelude.Nothing,
+      fpgaInfo = Prelude.Nothing,
+      freeTierEligible = Prelude.Nothing,
+      gpuInfo = Prelude.Nothing,
+      hibernationSupported = Prelude.Nothing,
+      hypervisor = Prelude.Nothing,
+      inferenceAcceleratorInfo = Prelude.Nothing,
+      instanceStorageInfo = Prelude.Nothing,
+      instanceStorageSupported = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      memoryInfo = Prelude.Nothing,
+      networkInfo = Prelude.Nothing,
+      placementGroupInfo = Prelude.Nothing,
+      processorInfo = Prelude.Nothing,
+      supportedBootModes = Prelude.Nothing,
+      supportedRootDeviceTypes = Prelude.Nothing,
+      supportedUsageClasses = Prelude.Nothing,
+      supportedVirtualizationTypes = Prelude.Nothing,
+      vCpuInfo = Prelude.Nothing
+    }
+
+-- | Indicates whether auto recovery is supported.
+instanceTypeInfo_autoRecoverySupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_autoRecoverySupported = Lens.lens (\InstanceTypeInfo' {autoRecoverySupported} -> autoRecoverySupported) (\s@InstanceTypeInfo' {} a -> s {autoRecoverySupported = a} :: InstanceTypeInfo)
+
+-- | Indicates whether the instance is a bare metal instance type.
+instanceTypeInfo_bareMetal :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_bareMetal = Lens.lens (\InstanceTypeInfo' {bareMetal} -> bareMetal) (\s@InstanceTypeInfo' {} a -> s {bareMetal = a} :: InstanceTypeInfo)
+
+-- | Indicates whether the instance type is a burstable performance instance
+-- type.
+instanceTypeInfo_burstablePerformanceSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_burstablePerformanceSupported = Lens.lens (\InstanceTypeInfo' {burstablePerformanceSupported} -> burstablePerformanceSupported) (\s@InstanceTypeInfo' {} a -> s {burstablePerformanceSupported = a} :: InstanceTypeInfo)
+
+-- | Indicates whether the instance type is current generation.
+instanceTypeInfo_currentGeneration :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_currentGeneration = Lens.lens (\InstanceTypeInfo' {currentGeneration} -> currentGeneration) (\s@InstanceTypeInfo' {} a -> s {currentGeneration = a} :: InstanceTypeInfo)
+
+-- | Indicates whether Dedicated Hosts are supported on the instance type.
+instanceTypeInfo_dedicatedHostsSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_dedicatedHostsSupported = Lens.lens (\InstanceTypeInfo' {dedicatedHostsSupported} -> dedicatedHostsSupported) (\s@InstanceTypeInfo' {} a -> s {dedicatedHostsSupported = a} :: InstanceTypeInfo)
+
+-- | Describes the Amazon EBS settings for the instance type.
+instanceTypeInfo_ebsInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe EbsInfo)
+instanceTypeInfo_ebsInfo = Lens.lens (\InstanceTypeInfo' {ebsInfo} -> ebsInfo) (\s@InstanceTypeInfo' {} a -> s {ebsInfo = a} :: InstanceTypeInfo)
+
+-- | Describes the FPGA accelerator settings for the instance type.
+instanceTypeInfo_fpgaInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe FpgaInfo)
+instanceTypeInfo_fpgaInfo = Lens.lens (\InstanceTypeInfo' {fpgaInfo} -> fpgaInfo) (\s@InstanceTypeInfo' {} a -> s {fpgaInfo = a} :: InstanceTypeInfo)
+
+-- | Indicates whether the instance type is eligible for the free tier.
+instanceTypeInfo_freeTierEligible :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_freeTierEligible = Lens.lens (\InstanceTypeInfo' {freeTierEligible} -> freeTierEligible) (\s@InstanceTypeInfo' {} a -> s {freeTierEligible = a} :: InstanceTypeInfo)
+
+-- | Describes the GPU accelerator settings for the instance type.
+instanceTypeInfo_gpuInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe GpuInfo)
+instanceTypeInfo_gpuInfo = Lens.lens (\InstanceTypeInfo' {gpuInfo} -> gpuInfo) (\s@InstanceTypeInfo' {} a -> s {gpuInfo = a} :: InstanceTypeInfo)
+
+-- | Indicates whether On-Demand hibernation is supported.
+instanceTypeInfo_hibernationSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_hibernationSupported = Lens.lens (\InstanceTypeInfo' {hibernationSupported} -> hibernationSupported) (\s@InstanceTypeInfo' {} a -> s {hibernationSupported = a} :: InstanceTypeInfo)
+
+-- | The hypervisor for the instance type.
+instanceTypeInfo_hypervisor :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InstanceTypeHypervisor)
+instanceTypeInfo_hypervisor = Lens.lens (\InstanceTypeInfo' {hypervisor} -> hypervisor) (\s@InstanceTypeInfo' {} a -> s {hypervisor = a} :: InstanceTypeInfo)
+
+-- | Describes the Inference accelerator settings for the instance type.
+instanceTypeInfo_inferenceAcceleratorInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InferenceAcceleratorInfo)
+instanceTypeInfo_inferenceAcceleratorInfo = Lens.lens (\InstanceTypeInfo' {inferenceAcceleratorInfo} -> inferenceAcceleratorInfo) (\s@InstanceTypeInfo' {} a -> s {inferenceAcceleratorInfo = a} :: InstanceTypeInfo)
+
+-- | Describes the instance storage for the instance type.
+instanceTypeInfo_instanceStorageInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InstanceStorageInfo)
+instanceTypeInfo_instanceStorageInfo = Lens.lens (\InstanceTypeInfo' {instanceStorageInfo} -> instanceStorageInfo) (\s@InstanceTypeInfo' {} a -> s {instanceStorageInfo = a} :: InstanceTypeInfo)
+
+-- | Indicates whether instance storage is supported.
+instanceTypeInfo_instanceStorageSupported :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe Prelude.Bool)
+instanceTypeInfo_instanceStorageSupported = Lens.lens (\InstanceTypeInfo' {instanceStorageSupported} -> instanceStorageSupported) (\s@InstanceTypeInfo' {} a -> s {instanceStorageSupported = a} :: InstanceTypeInfo)
+
+-- | The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+instanceTypeInfo_instanceType :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe InstanceType)
+instanceTypeInfo_instanceType = Lens.lens (\InstanceTypeInfo' {instanceType} -> instanceType) (\s@InstanceTypeInfo' {} a -> s {instanceType = a} :: InstanceTypeInfo)
+
+-- | Describes the memory for the instance type.
+instanceTypeInfo_memoryInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe MemoryInfo)
+instanceTypeInfo_memoryInfo = Lens.lens (\InstanceTypeInfo' {memoryInfo} -> memoryInfo) (\s@InstanceTypeInfo' {} a -> s {memoryInfo = a} :: InstanceTypeInfo)
+
+-- | Describes the network settings for the instance type.
+instanceTypeInfo_networkInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe NetworkInfo)
+instanceTypeInfo_networkInfo = Lens.lens (\InstanceTypeInfo' {networkInfo} -> networkInfo) (\s@InstanceTypeInfo' {} a -> s {networkInfo = a} :: InstanceTypeInfo)
+
+-- | Describes the placement group settings for the instance type.
+instanceTypeInfo_placementGroupInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe PlacementGroupInfo)
+instanceTypeInfo_placementGroupInfo = Lens.lens (\InstanceTypeInfo' {placementGroupInfo} -> placementGroupInfo) (\s@InstanceTypeInfo' {} a -> s {placementGroupInfo = a} :: InstanceTypeInfo)
+
+-- | Describes the processor.
+instanceTypeInfo_processorInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe ProcessorInfo)
+instanceTypeInfo_processorInfo = Lens.lens (\InstanceTypeInfo' {processorInfo} -> processorInfo) (\s@InstanceTypeInfo' {} a -> s {processorInfo = a} :: InstanceTypeInfo)
+
+-- | The supported boot modes. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html Boot modes>
+-- in the /Amazon EC2 User Guide/.
+instanceTypeInfo_supportedBootModes :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [BootModeType])
+instanceTypeInfo_supportedBootModes = Lens.lens (\InstanceTypeInfo' {supportedBootModes} -> supportedBootModes) (\s@InstanceTypeInfo' {} a -> s {supportedBootModes = a} :: InstanceTypeInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The supported root device types.
+instanceTypeInfo_supportedRootDeviceTypes :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [RootDeviceType])
+instanceTypeInfo_supportedRootDeviceTypes = Lens.lens (\InstanceTypeInfo' {supportedRootDeviceTypes} -> supportedRootDeviceTypes) (\s@InstanceTypeInfo' {} a -> s {supportedRootDeviceTypes = a} :: InstanceTypeInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instance type is offered for spot or On-Demand.
+instanceTypeInfo_supportedUsageClasses :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [UsageClassType])
+instanceTypeInfo_supportedUsageClasses = Lens.lens (\InstanceTypeInfo' {supportedUsageClasses} -> supportedUsageClasses) (\s@InstanceTypeInfo' {} a -> s {supportedUsageClasses = a} :: InstanceTypeInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The supported virtualization types.
+instanceTypeInfo_supportedVirtualizationTypes :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe [VirtualizationType])
+instanceTypeInfo_supportedVirtualizationTypes = Lens.lens (\InstanceTypeInfo' {supportedVirtualizationTypes} -> supportedVirtualizationTypes) (\s@InstanceTypeInfo' {} a -> s {supportedVirtualizationTypes = a} :: InstanceTypeInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the vCPU configurations for the instance type.
+instanceTypeInfo_vCpuInfo :: Lens.Lens' InstanceTypeInfo (Prelude.Maybe VCpuInfo)
+instanceTypeInfo_vCpuInfo = Lens.lens (\InstanceTypeInfo' {vCpuInfo} -> vCpuInfo) (\s@InstanceTypeInfo' {} a -> s {vCpuInfo = a} :: InstanceTypeInfo)
+
+instance Data.FromXML InstanceTypeInfo where
+  parseXML x =
+    InstanceTypeInfo'
+      Prelude.<$> (x Data..@? "autoRecoverySupported")
+      Prelude.<*> (x Data..@? "bareMetal")
+      Prelude.<*> (x Data..@? "burstablePerformanceSupported")
+      Prelude.<*> (x Data..@? "currentGeneration")
+      Prelude.<*> (x Data..@? "dedicatedHostsSupported")
+      Prelude.<*> (x Data..@? "ebsInfo")
+      Prelude.<*> (x Data..@? "fpgaInfo")
+      Prelude.<*> (x Data..@? "freeTierEligible")
+      Prelude.<*> (x Data..@? "gpuInfo")
+      Prelude.<*> (x Data..@? "hibernationSupported")
+      Prelude.<*> (x Data..@? "hypervisor")
+      Prelude.<*> (x Data..@? "inferenceAcceleratorInfo")
+      Prelude.<*> (x Data..@? "instanceStorageInfo")
+      Prelude.<*> (x Data..@? "instanceStorageSupported")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "memoryInfo")
+      Prelude.<*> (x Data..@? "networkInfo")
+      Prelude.<*> (x Data..@? "placementGroupInfo")
+      Prelude.<*> (x Data..@? "processorInfo")
+      Prelude.<*> ( x
+                      Data..@? "supportedBootModes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "supportedRootDeviceTypes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "supportedUsageClasses"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "supportedVirtualizationTypes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vCpuInfo")
+
+instance Prelude.Hashable InstanceTypeInfo where
+  hashWithSalt _salt InstanceTypeInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` autoRecoverySupported
+      `Prelude.hashWithSalt` bareMetal
+      `Prelude.hashWithSalt` burstablePerformanceSupported
+      `Prelude.hashWithSalt` currentGeneration
+      `Prelude.hashWithSalt` dedicatedHostsSupported
+      `Prelude.hashWithSalt` ebsInfo
+      `Prelude.hashWithSalt` fpgaInfo
+      `Prelude.hashWithSalt` freeTierEligible
+      `Prelude.hashWithSalt` gpuInfo
+      `Prelude.hashWithSalt` hibernationSupported
+      `Prelude.hashWithSalt` hypervisor
+      `Prelude.hashWithSalt` inferenceAcceleratorInfo
+      `Prelude.hashWithSalt` instanceStorageInfo
+      `Prelude.hashWithSalt` instanceStorageSupported
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` memoryInfo
+      `Prelude.hashWithSalt` networkInfo
+      `Prelude.hashWithSalt` placementGroupInfo
+      `Prelude.hashWithSalt` processorInfo
+      `Prelude.hashWithSalt` supportedBootModes
+      `Prelude.hashWithSalt` supportedRootDeviceTypes
+      `Prelude.hashWithSalt` supportedUsageClasses
+      `Prelude.hashWithSalt` supportedVirtualizationTypes
+      `Prelude.hashWithSalt` vCpuInfo
+
+instance Prelude.NFData InstanceTypeInfo where
+  rnf InstanceTypeInfo' {..} =
+    Prelude.rnf autoRecoverySupported
+      `Prelude.seq` Prelude.rnf bareMetal
+      `Prelude.seq` Prelude.rnf burstablePerformanceSupported
+      `Prelude.seq` Prelude.rnf currentGeneration
+      `Prelude.seq` Prelude.rnf dedicatedHostsSupported
+      `Prelude.seq` Prelude.rnf ebsInfo
+      `Prelude.seq` Prelude.rnf fpgaInfo
+      `Prelude.seq` Prelude.rnf freeTierEligible
+      `Prelude.seq` Prelude.rnf gpuInfo
+      `Prelude.seq` Prelude.rnf hibernationSupported
+      `Prelude.seq` Prelude.rnf hypervisor
+      `Prelude.seq` Prelude.rnf inferenceAcceleratorInfo
+      `Prelude.seq` Prelude.rnf instanceStorageInfo
+      `Prelude.seq` Prelude.rnf instanceStorageSupported
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf memoryInfo
+      `Prelude.seq` Prelude.rnf networkInfo
+      `Prelude.seq` Prelude.rnf placementGroupInfo
+      `Prelude.seq` Prelude.rnf processorInfo
+      `Prelude.seq` Prelude.rnf supportedBootModes
+      `Prelude.seq` Prelude.rnf
+        supportedRootDeviceTypes
+      `Prelude.seq` Prelude.rnf
+        supportedUsageClasses
+      `Prelude.seq` Prelude.rnf
+        supportedVirtualizationTypes
+      `Prelude.seq` Prelude.rnf vCpuInfo
diff --git a/gen/Amazonka/EC2/Types/InstanceTypeInfoFromInstanceRequirements.hs b/gen/Amazonka/EC2/Types/InstanceTypeInfoFromInstanceRequirements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceTypeInfoFromInstanceRequirements.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceTypeInfoFromInstanceRequirements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceTypeInfoFromInstanceRequirements where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The list of instance types with the specified instance attributes.
+--
+-- /See:/ 'newInstanceTypeInfoFromInstanceRequirements' smart constructor.
+data InstanceTypeInfoFromInstanceRequirements = InstanceTypeInfoFromInstanceRequirements'
+  { -- | The matching instance type.
+    instanceType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceTypeInfoFromInstanceRequirements' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceType', 'instanceTypeInfoFromInstanceRequirements_instanceType' - The matching instance type.
+newInstanceTypeInfoFromInstanceRequirements ::
+  InstanceTypeInfoFromInstanceRequirements
+newInstanceTypeInfoFromInstanceRequirements =
+  InstanceTypeInfoFromInstanceRequirements'
+    { instanceType =
+        Prelude.Nothing
+    }
+
+-- | The matching instance type.
+instanceTypeInfoFromInstanceRequirements_instanceType :: Lens.Lens' InstanceTypeInfoFromInstanceRequirements (Prelude.Maybe Prelude.Text)
+instanceTypeInfoFromInstanceRequirements_instanceType = Lens.lens (\InstanceTypeInfoFromInstanceRequirements' {instanceType} -> instanceType) (\s@InstanceTypeInfoFromInstanceRequirements' {} a -> s {instanceType = a} :: InstanceTypeInfoFromInstanceRequirements)
+
+instance
+  Data.FromXML
+    InstanceTypeInfoFromInstanceRequirements
+  where
+  parseXML x =
+    InstanceTypeInfoFromInstanceRequirements'
+      Prelude.<$> (x Data..@? "instanceType")
+
+instance
+  Prelude.Hashable
+    InstanceTypeInfoFromInstanceRequirements
+  where
+  hashWithSalt
+    _salt
+    InstanceTypeInfoFromInstanceRequirements' {..} =
+      _salt `Prelude.hashWithSalt` instanceType
+
+instance
+  Prelude.NFData
+    InstanceTypeInfoFromInstanceRequirements
+  where
+  rnf InstanceTypeInfoFromInstanceRequirements' {..} =
+    Prelude.rnf instanceType
diff --git a/gen/Amazonka/EC2/Types/InstanceTypeOffering.hs b/gen/Amazonka/EC2/Types/InstanceTypeOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceTypeOffering.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceTypeOffering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceTypeOffering where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.LocationType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The instance types offered.
+--
+-- /See:/ 'newInstanceTypeOffering' smart constructor.
+data InstanceTypeOffering = InstanceTypeOffering'
+  { -- | The instance type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon EC2 User Guide/.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The identifier for the location. This depends on the location type. For
+    -- example, if the location type is @region@, the location is the Region
+    -- code (for example, @us-east-2@.)
+    location :: Prelude.Maybe Prelude.Text,
+    -- | The location type.
+    locationType :: Prelude.Maybe LocationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceTypeOffering' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceType', 'instanceTypeOffering_instanceType' - The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- 'location', 'instanceTypeOffering_location' - The identifier for the location. This depends on the location type. For
+-- example, if the location type is @region@, the location is the Region
+-- code (for example, @us-east-2@.)
+--
+-- 'locationType', 'instanceTypeOffering_locationType' - The location type.
+newInstanceTypeOffering ::
+  InstanceTypeOffering
+newInstanceTypeOffering =
+  InstanceTypeOffering'
+    { instanceType =
+        Prelude.Nothing,
+      location = Prelude.Nothing,
+      locationType = Prelude.Nothing
+    }
+
+-- | The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon EC2 User Guide/.
+instanceTypeOffering_instanceType :: Lens.Lens' InstanceTypeOffering (Prelude.Maybe InstanceType)
+instanceTypeOffering_instanceType = Lens.lens (\InstanceTypeOffering' {instanceType} -> instanceType) (\s@InstanceTypeOffering' {} a -> s {instanceType = a} :: InstanceTypeOffering)
+
+-- | The identifier for the location. This depends on the location type. For
+-- example, if the location type is @region@, the location is the Region
+-- code (for example, @us-east-2@.)
+instanceTypeOffering_location :: Lens.Lens' InstanceTypeOffering (Prelude.Maybe Prelude.Text)
+instanceTypeOffering_location = Lens.lens (\InstanceTypeOffering' {location} -> location) (\s@InstanceTypeOffering' {} a -> s {location = a} :: InstanceTypeOffering)
+
+-- | The location type.
+instanceTypeOffering_locationType :: Lens.Lens' InstanceTypeOffering (Prelude.Maybe LocationType)
+instanceTypeOffering_locationType = Lens.lens (\InstanceTypeOffering' {locationType} -> locationType) (\s@InstanceTypeOffering' {} a -> s {locationType = a} :: InstanceTypeOffering)
+
+instance Data.FromXML InstanceTypeOffering where
+  parseXML x =
+    InstanceTypeOffering'
+      Prelude.<$> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "location")
+      Prelude.<*> (x Data..@? "locationType")
+
+instance Prelude.Hashable InstanceTypeOffering where
+  hashWithSalt _salt InstanceTypeOffering' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` location
+      `Prelude.hashWithSalt` locationType
+
+instance Prelude.NFData InstanceTypeOffering where
+  rnf InstanceTypeOffering' {..} =
+    Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf location
+      `Prelude.seq` Prelude.rnf locationType
diff --git a/gen/Amazonka/EC2/Types/InstanceUsage.hs b/gen/Amazonka/EC2/Types/InstanceUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InstanceUsage.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InstanceUsage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InstanceUsage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the Capacity Reservation usage.
+--
+-- /See:/ 'newInstanceUsage' smart constructor.
+data InstanceUsage = InstanceUsage'
+  { -- | The ID of the Amazon Web Services account that is making use of the
+    -- Capacity Reservation.
+    accountId :: Prelude.Maybe Prelude.Text,
+    -- | The number of instances the Amazon Web Services account currently has in
+    -- the Capacity Reservation.
+    usedInstanceCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InstanceUsage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountId', 'instanceUsage_accountId' - The ID of the Amazon Web Services account that is making use of the
+-- Capacity Reservation.
+--
+-- 'usedInstanceCount', 'instanceUsage_usedInstanceCount' - The number of instances the Amazon Web Services account currently has in
+-- the Capacity Reservation.
+newInstanceUsage ::
+  InstanceUsage
+newInstanceUsage =
+  InstanceUsage'
+    { accountId = Prelude.Nothing,
+      usedInstanceCount = Prelude.Nothing
+    }
+
+-- | The ID of the Amazon Web Services account that is making use of the
+-- Capacity Reservation.
+instanceUsage_accountId :: Lens.Lens' InstanceUsage (Prelude.Maybe Prelude.Text)
+instanceUsage_accountId = Lens.lens (\InstanceUsage' {accountId} -> accountId) (\s@InstanceUsage' {} a -> s {accountId = a} :: InstanceUsage)
+
+-- | The number of instances the Amazon Web Services account currently has in
+-- the Capacity Reservation.
+instanceUsage_usedInstanceCount :: Lens.Lens' InstanceUsage (Prelude.Maybe Prelude.Int)
+instanceUsage_usedInstanceCount = Lens.lens (\InstanceUsage' {usedInstanceCount} -> usedInstanceCount) (\s@InstanceUsage' {} a -> s {usedInstanceCount = a} :: InstanceUsage)
+
+instance Data.FromXML InstanceUsage where
+  parseXML x =
+    InstanceUsage'
+      Prelude.<$> (x Data..@? "accountId")
+      Prelude.<*> (x Data..@? "usedInstanceCount")
+
+instance Prelude.Hashable InstanceUsage where
+  hashWithSalt _salt InstanceUsage' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountId
+      `Prelude.hashWithSalt` usedInstanceCount
+
+instance Prelude.NFData InstanceUsage where
+  rnf InstanceUsage' {..} =
+    Prelude.rnf accountId
+      `Prelude.seq` Prelude.rnf usedInstanceCount
diff --git a/gen/Amazonka/EC2/Types/IntegrateServices.hs b/gen/Amazonka/EC2/Types/IntegrateServices.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IntegrateServices.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IntegrateServices
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IntegrateServices where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AthenaIntegration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes service integrations with VPC Flow logs.
+--
+-- /See:/ 'newIntegrateServices' smart constructor.
+data IntegrateServices = IntegrateServices'
+  { -- | Information about the integration with Amazon Athena.
+    athenaIntegrations :: Prelude.Maybe (Prelude.NonEmpty AthenaIntegration)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IntegrateServices' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'athenaIntegrations', 'integrateServices_athenaIntegrations' - Information about the integration with Amazon Athena.
+newIntegrateServices ::
+  IntegrateServices
+newIntegrateServices =
+  IntegrateServices'
+    { athenaIntegrations =
+        Prelude.Nothing
+    }
+
+-- | Information about the integration with Amazon Athena.
+integrateServices_athenaIntegrations :: Lens.Lens' IntegrateServices (Prelude.Maybe (Prelude.NonEmpty AthenaIntegration))
+integrateServices_athenaIntegrations = Lens.lens (\IntegrateServices' {athenaIntegrations} -> athenaIntegrations) (\s@IntegrateServices' {} a -> s {athenaIntegrations = a} :: IntegrateServices) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable IntegrateServices where
+  hashWithSalt _salt IntegrateServices' {..} =
+    _salt `Prelude.hashWithSalt` athenaIntegrations
+
+instance Prelude.NFData IntegrateServices where
+  rnf IntegrateServices' {..} =
+    Prelude.rnf athenaIntegrations
+
+instance Data.ToQuery IntegrateServices where
+  toQuery IntegrateServices' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "AthenaIntegration"
+              Prelude.<$> athenaIntegrations
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/InterfacePermissionType.hs b/gen/Amazonka/EC2/Types/InterfacePermissionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InterfacePermissionType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InterfacePermissionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InterfacePermissionType
+  ( InterfacePermissionType
+      ( ..,
+        InterfacePermissionType_EIP_ASSOCIATE,
+        InterfacePermissionType_INSTANCE_ATTACH
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InterfacePermissionType = InterfacePermissionType'
+  { fromInterfacePermissionType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InterfacePermissionType_EIP_ASSOCIATE :: InterfacePermissionType
+pattern InterfacePermissionType_EIP_ASSOCIATE = InterfacePermissionType' "EIP-ASSOCIATE"
+
+pattern InterfacePermissionType_INSTANCE_ATTACH :: InterfacePermissionType
+pattern InterfacePermissionType_INSTANCE_ATTACH = InterfacePermissionType' "INSTANCE-ATTACH"
+
+{-# COMPLETE
+  InterfacePermissionType_EIP_ASSOCIATE,
+  InterfacePermissionType_INSTANCE_ATTACH,
+  InterfacePermissionType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InterfaceProtocolType.hs b/gen/Amazonka/EC2/Types/InterfaceProtocolType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InterfaceProtocolType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InterfaceProtocolType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InterfaceProtocolType
+  ( InterfaceProtocolType
+      ( ..,
+        InterfaceProtocolType_GRE,
+        InterfaceProtocolType_VLAN
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype InterfaceProtocolType = InterfaceProtocolType'
+  { fromInterfaceProtocolType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern InterfaceProtocolType_GRE :: InterfaceProtocolType
+pattern InterfaceProtocolType_GRE = InterfaceProtocolType' "GRE"
+
+pattern InterfaceProtocolType_VLAN :: InterfaceProtocolType
+pattern InterfaceProtocolType_VLAN = InterfaceProtocolType' "VLAN"
+
+{-# COMPLETE
+  InterfaceProtocolType_GRE,
+  InterfaceProtocolType_VLAN,
+  InterfaceProtocolType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/InternetGateway.hs b/gen/Amazonka/EC2/Types/InternetGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InternetGateway.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InternetGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InternetGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InternetGatewayAttachment
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an internet gateway.
+--
+-- /See:/ 'newInternetGateway' smart constructor.
+data InternetGateway = InternetGateway'
+  { -- | Any VPCs attached to the internet gateway.
+    attachments :: Prelude.Maybe [InternetGatewayAttachment],
+    -- | The ID of the Amazon Web Services account that owns the internet
+    -- gateway.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the internet gateway.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the internet gateway.
+    internetGatewayId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InternetGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachments', 'internetGateway_attachments' - Any VPCs attached to the internet gateway.
+--
+-- 'ownerId', 'internetGateway_ownerId' - The ID of the Amazon Web Services account that owns the internet
+-- gateway.
+--
+-- 'tags', 'internetGateway_tags' - Any tags assigned to the internet gateway.
+--
+-- 'internetGatewayId', 'internetGateway_internetGatewayId' - The ID of the internet gateway.
+newInternetGateway ::
+  -- | 'internetGatewayId'
+  Prelude.Text ->
+  InternetGateway
+newInternetGateway pInternetGatewayId_ =
+  InternetGateway'
+    { attachments = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      internetGatewayId = pInternetGatewayId_
+    }
+
+-- | Any VPCs attached to the internet gateway.
+internetGateway_attachments :: Lens.Lens' InternetGateway (Prelude.Maybe [InternetGatewayAttachment])
+internetGateway_attachments = Lens.lens (\InternetGateway' {attachments} -> attachments) (\s@InternetGateway' {} a -> s {attachments = a} :: InternetGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services account that owns the internet
+-- gateway.
+internetGateway_ownerId :: Lens.Lens' InternetGateway (Prelude.Maybe Prelude.Text)
+internetGateway_ownerId = Lens.lens (\InternetGateway' {ownerId} -> ownerId) (\s@InternetGateway' {} a -> s {ownerId = a} :: InternetGateway)
+
+-- | Any tags assigned to the internet gateway.
+internetGateway_tags :: Lens.Lens' InternetGateway (Prelude.Maybe [Tag])
+internetGateway_tags = Lens.lens (\InternetGateway' {tags} -> tags) (\s@InternetGateway' {} a -> s {tags = a} :: InternetGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the internet gateway.
+internetGateway_internetGatewayId :: Lens.Lens' InternetGateway Prelude.Text
+internetGateway_internetGatewayId = Lens.lens (\InternetGateway' {internetGatewayId} -> internetGatewayId) (\s@InternetGateway' {} a -> s {internetGatewayId = a} :: InternetGateway)
+
+instance Data.FromXML InternetGateway where
+  parseXML x =
+    InternetGateway'
+      Prelude.<$> ( x
+                      Data..@? "attachmentSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "internetGatewayId")
+
+instance Prelude.Hashable InternetGateway where
+  hashWithSalt _salt InternetGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachments
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` internetGatewayId
+
+instance Prelude.NFData InternetGateway where
+  rnf InternetGateway' {..} =
+    Prelude.rnf attachments
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf internetGatewayId
diff --git a/gen/Amazonka/EC2/Types/InternetGatewayAttachment.hs b/gen/Amazonka/EC2/Types/InternetGatewayAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/InternetGatewayAttachment.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.InternetGatewayAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.InternetGatewayAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttachmentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the attachment of a VPC to an internet gateway or an
+-- egress-only internet gateway.
+--
+-- /See:/ 'newInternetGatewayAttachment' smart constructor.
+data InternetGatewayAttachment = InternetGatewayAttachment'
+  { -- | The current state of the attachment. For an internet gateway, the state
+    -- is @available@ when attached to a VPC; otherwise, this value is not
+    -- returned.
+    state :: AttachmentStatus,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'InternetGatewayAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'internetGatewayAttachment_state' - The current state of the attachment. For an internet gateway, the state
+-- is @available@ when attached to a VPC; otherwise, this value is not
+-- returned.
+--
+-- 'vpcId', 'internetGatewayAttachment_vpcId' - The ID of the VPC.
+newInternetGatewayAttachment ::
+  -- | 'state'
+  AttachmentStatus ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  InternetGatewayAttachment
+newInternetGatewayAttachment pState_ pVpcId_ =
+  InternetGatewayAttachment'
+    { state = pState_,
+      vpcId = pVpcId_
+    }
+
+-- | The current state of the attachment. For an internet gateway, the state
+-- is @available@ when attached to a VPC; otherwise, this value is not
+-- returned.
+internetGatewayAttachment_state :: Lens.Lens' InternetGatewayAttachment AttachmentStatus
+internetGatewayAttachment_state = Lens.lens (\InternetGatewayAttachment' {state} -> state) (\s@InternetGatewayAttachment' {} a -> s {state = a} :: InternetGatewayAttachment)
+
+-- | The ID of the VPC.
+internetGatewayAttachment_vpcId :: Lens.Lens' InternetGatewayAttachment Prelude.Text
+internetGatewayAttachment_vpcId = Lens.lens (\InternetGatewayAttachment' {vpcId} -> vpcId) (\s@InternetGatewayAttachment' {} a -> s {vpcId = a} :: InternetGatewayAttachment)
+
+instance Data.FromXML InternetGatewayAttachment where
+  parseXML x =
+    InternetGatewayAttachment'
+      Prelude.<$> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "vpcId")
+
+instance Prelude.Hashable InternetGatewayAttachment where
+  hashWithSalt _salt InternetGatewayAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData InternetGatewayAttachment where
+  rnf InternetGatewayAttachment' {..} =
+    Prelude.rnf state `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/IpAddressType.hs b/gen/Amazonka/EC2/Types/IpAddressType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpAddressType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpAddressType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpAddressType
+  ( IpAddressType
+      ( ..,
+        IpAddressType_Dualstack,
+        IpAddressType_Ipv4,
+        IpAddressType_Ipv6
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpAddressType = IpAddressType'
+  { fromIpAddressType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpAddressType_Dualstack :: IpAddressType
+pattern IpAddressType_Dualstack = IpAddressType' "dualstack"
+
+pattern IpAddressType_Ipv4 :: IpAddressType
+pattern IpAddressType_Ipv4 = IpAddressType' "ipv4"
+
+pattern IpAddressType_Ipv6 :: IpAddressType
+pattern IpAddressType_Ipv6 = IpAddressType' "ipv6"
+
+{-# COMPLETE
+  IpAddressType_Dualstack,
+  IpAddressType_Ipv4,
+  IpAddressType_Ipv6,
+  IpAddressType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpPermission.hs b/gen/Amazonka/EC2/Types/IpPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpPermission.hs
@@ -0,0 +1,224 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpPermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpRange
+import Amazonka.EC2.Types.Ipv6Range
+import Amazonka.EC2.Types.PrefixListId
+import Amazonka.EC2.Types.UserIdGroupPair
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a set of permissions for a security group rule.
+--
+-- /See:/ 'newIpPermission' smart constructor.
+data IpPermission = IpPermission'
+  { -- | The start of port range for the TCP and UDP protocols, or an
+    -- ICMP\/ICMPv6 type number. A value of @-1@ indicates all ICMP\/ICMPv6
+    -- types. If you specify all ICMP\/ICMPv6 types, you must specify all
+    -- codes.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The IPv4 ranges.
+    ipRanges :: Prelude.Maybe [IpRange],
+    -- | [VPC only] The IPv6 ranges.
+    ipv6Ranges :: Prelude.Maybe [Ipv6Range],
+    -- | [VPC only] The prefix list IDs.
+    prefixListIds :: Prelude.Maybe [PrefixListId],
+    -- | The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+    -- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+    -- all ICMP\/ICMPv6 types, you must specify all codes.
+    toPort :: Prelude.Maybe Prelude.Int,
+    -- | The security group and Amazon Web Services account ID pairs.
+    userIdGroupPairs :: Prelude.Maybe [UserIdGroupPair],
+    -- | The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+    -- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+    --
+    -- [VPC only] Use @-1@ to specify all protocols. When authorizing security
+    -- group rules, specifying @-1@ or a protocol number other than @tcp@,
+    -- @udp@, @icmp@, or @icmpv6@ allows traffic on all ports, regardless of
+    -- any port range you specify. For @tcp@, @udp@, and @icmp@, you must
+    -- specify a port range. For @icmpv6@, the port range is optional; if you
+    -- omit the port range, traffic for all types and codes is allowed.
+    ipProtocol :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fromPort', 'ipPermission_fromPort' - The start of port range for the TCP and UDP protocols, or an
+-- ICMP\/ICMPv6 type number. A value of @-1@ indicates all ICMP\/ICMPv6
+-- types. If you specify all ICMP\/ICMPv6 types, you must specify all
+-- codes.
+--
+-- 'ipRanges', 'ipPermission_ipRanges' - The IPv4 ranges.
+--
+-- 'ipv6Ranges', 'ipPermission_ipv6Ranges' - [VPC only] The IPv6 ranges.
+--
+-- 'prefixListIds', 'ipPermission_prefixListIds' - [VPC only] The prefix list IDs.
+--
+-- 'toPort', 'ipPermission_toPort' - The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+-- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+-- all ICMP\/ICMPv6 types, you must specify all codes.
+--
+-- 'userIdGroupPairs', 'ipPermission_userIdGroupPairs' - The security group and Amazon Web Services account ID pairs.
+--
+-- 'ipProtocol', 'ipPermission_ipProtocol' - The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- [VPC only] Use @-1@ to specify all protocols. When authorizing security
+-- group rules, specifying @-1@ or a protocol number other than @tcp@,
+-- @udp@, @icmp@, or @icmpv6@ allows traffic on all ports, regardless of
+-- any port range you specify. For @tcp@, @udp@, and @icmp@, you must
+-- specify a port range. For @icmpv6@, the port range is optional; if you
+-- omit the port range, traffic for all types and codes is allowed.
+newIpPermission ::
+  -- | 'ipProtocol'
+  Prelude.Text ->
+  IpPermission
+newIpPermission pIpProtocol_ =
+  IpPermission'
+    { fromPort = Prelude.Nothing,
+      ipRanges = Prelude.Nothing,
+      ipv6Ranges = Prelude.Nothing,
+      prefixListIds = Prelude.Nothing,
+      toPort = Prelude.Nothing,
+      userIdGroupPairs = Prelude.Nothing,
+      ipProtocol = pIpProtocol_
+    }
+
+-- | The start of port range for the TCP and UDP protocols, or an
+-- ICMP\/ICMPv6 type number. A value of @-1@ indicates all ICMP\/ICMPv6
+-- types. If you specify all ICMP\/ICMPv6 types, you must specify all
+-- codes.
+ipPermission_fromPort :: Lens.Lens' IpPermission (Prelude.Maybe Prelude.Int)
+ipPermission_fromPort = Lens.lens (\IpPermission' {fromPort} -> fromPort) (\s@IpPermission' {} a -> s {fromPort = a} :: IpPermission)
+
+-- | The IPv4 ranges.
+ipPermission_ipRanges :: Lens.Lens' IpPermission (Prelude.Maybe [IpRange])
+ipPermission_ipRanges = Lens.lens (\IpPermission' {ipRanges} -> ipRanges) (\s@IpPermission' {} a -> s {ipRanges = a} :: IpPermission) Prelude.. Lens.mapping Lens.coerced
+
+-- | [VPC only] The IPv6 ranges.
+ipPermission_ipv6Ranges :: Lens.Lens' IpPermission (Prelude.Maybe [Ipv6Range])
+ipPermission_ipv6Ranges = Lens.lens (\IpPermission' {ipv6Ranges} -> ipv6Ranges) (\s@IpPermission' {} a -> s {ipv6Ranges = a} :: IpPermission) Prelude.. Lens.mapping Lens.coerced
+
+-- | [VPC only] The prefix list IDs.
+ipPermission_prefixListIds :: Lens.Lens' IpPermission (Prelude.Maybe [PrefixListId])
+ipPermission_prefixListIds = Lens.lens (\IpPermission' {prefixListIds} -> prefixListIds) (\s@IpPermission' {} a -> s {prefixListIds = a} :: IpPermission) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+-- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+-- all ICMP\/ICMPv6 types, you must specify all codes.
+ipPermission_toPort :: Lens.Lens' IpPermission (Prelude.Maybe Prelude.Int)
+ipPermission_toPort = Lens.lens (\IpPermission' {toPort} -> toPort) (\s@IpPermission' {} a -> s {toPort = a} :: IpPermission)
+
+-- | The security group and Amazon Web Services account ID pairs.
+ipPermission_userIdGroupPairs :: Lens.Lens' IpPermission (Prelude.Maybe [UserIdGroupPair])
+ipPermission_userIdGroupPairs = Lens.lens (\IpPermission' {userIdGroupPairs} -> userIdGroupPairs) (\s@IpPermission' {} a -> s {userIdGroupPairs = a} :: IpPermission) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- [VPC only] Use @-1@ to specify all protocols. When authorizing security
+-- group rules, specifying @-1@ or a protocol number other than @tcp@,
+-- @udp@, @icmp@, or @icmpv6@ allows traffic on all ports, regardless of
+-- any port range you specify. For @tcp@, @udp@, and @icmp@, you must
+-- specify a port range. For @icmpv6@, the port range is optional; if you
+-- omit the port range, traffic for all types and codes is allowed.
+ipPermission_ipProtocol :: Lens.Lens' IpPermission Prelude.Text
+ipPermission_ipProtocol = Lens.lens (\IpPermission' {ipProtocol} -> ipProtocol) (\s@IpPermission' {} a -> s {ipProtocol = a} :: IpPermission)
+
+instance Data.FromXML IpPermission where
+  parseXML x =
+    IpPermission'
+      Prelude.<$> (x Data..@? "fromPort")
+      Prelude.<*> ( x
+                      Data..@? "ipRanges"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ipv6Ranges"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "prefixListIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "toPort")
+      Prelude.<*> ( x
+                      Data..@? "groups"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "ipProtocol")
+
+instance Prelude.Hashable IpPermission where
+  hashWithSalt _salt IpPermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` ipRanges
+      `Prelude.hashWithSalt` ipv6Ranges
+      `Prelude.hashWithSalt` prefixListIds
+      `Prelude.hashWithSalt` toPort
+      `Prelude.hashWithSalt` userIdGroupPairs
+      `Prelude.hashWithSalt` ipProtocol
+
+instance Prelude.NFData IpPermission where
+  rnf IpPermission' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf ipRanges
+      `Prelude.seq` Prelude.rnf ipv6Ranges
+      `Prelude.seq` Prelude.rnf prefixListIds
+      `Prelude.seq` Prelude.rnf toPort
+      `Prelude.seq` Prelude.rnf userIdGroupPairs
+      `Prelude.seq` Prelude.rnf ipProtocol
+
+instance Data.ToQuery IpPermission where
+  toQuery IpPermission' {..} =
+    Prelude.mconcat
+      [ "FromPort" Data.=: fromPort,
+        Data.toQuery
+          (Data.toQueryList "IpRanges" Prelude.<$> ipRanges),
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Ranges"
+              Prelude.<$> ipv6Ranges
+          ),
+        Data.toQuery
+          ( Data.toQueryList "PrefixListIds"
+              Prelude.<$> prefixListIds
+          ),
+        "ToPort" Data.=: toPort,
+        Data.toQuery
+          ( Data.toQueryList "Groups"
+              Prelude.<$> userIdGroupPairs
+          ),
+        "IpProtocol" Data.=: ipProtocol
+      ]
diff --git a/gen/Amazonka/EC2/Types/IpRange.hs b/gen/Amazonka/EC2/Types/IpRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpRange.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv4 range.
+--
+-- /See:/ 'newIpRange' smart constructor.
+data IpRange = IpRange'
+  { -- | A description for the security group rule that references this IPv4
+    -- address range.
+    --
+    -- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+    -- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=&;{}!$*
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR range. You can either specify a CIDR range or a source
+    -- security group, not both. To specify a single IPv4 address, use the \/32
+    -- prefix length.
+    cidrIp :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'ipRange_description' - A description for the security group rule that references this IPv4
+-- address range.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=&;{}!$*
+--
+-- 'cidrIp', 'ipRange_cidrIp' - The IPv4 CIDR range. You can either specify a CIDR range or a source
+-- security group, not both. To specify a single IPv4 address, use the \/32
+-- prefix length.
+newIpRange ::
+  -- | 'cidrIp'
+  Prelude.Text ->
+  IpRange
+newIpRange pCidrIp_ =
+  IpRange'
+    { description = Prelude.Nothing,
+      cidrIp = pCidrIp_
+    }
+
+-- | A description for the security group rule that references this IPv4
+-- address range.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=&;{}!$*
+ipRange_description :: Lens.Lens' IpRange (Prelude.Maybe Prelude.Text)
+ipRange_description = Lens.lens (\IpRange' {description} -> description) (\s@IpRange' {} a -> s {description = a} :: IpRange)
+
+-- | The IPv4 CIDR range. You can either specify a CIDR range or a source
+-- security group, not both. To specify a single IPv4 address, use the \/32
+-- prefix length.
+ipRange_cidrIp :: Lens.Lens' IpRange Prelude.Text
+ipRange_cidrIp = Lens.lens (\IpRange' {cidrIp} -> cidrIp) (\s@IpRange' {} a -> s {cidrIp = a} :: IpRange)
+
+instance Data.FromXML IpRange where
+  parseXML x =
+    IpRange'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@ "cidrIp")
+
+instance Prelude.Hashable IpRange where
+  hashWithSalt _salt IpRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` cidrIp
+
+instance Prelude.NFData IpRange where
+  rnf IpRange' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf cidrIp
+
+instance Data.ToQuery IpRange where
+  toQuery IpRange' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "CidrIp" Data.=: cidrIp
+      ]
diff --git a/gen/Amazonka/EC2/Types/Ipam.hs b/gen/Amazonka/EC2/Types/Ipam.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipam.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipam
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipam where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamOperatingRegion
+import Amazonka.EC2.Types.IpamState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | IPAM is a VPC feature that you can use to automate your IP address
+-- management workflows including assigning, tracking, troubleshooting, and
+-- auditing IP addresses across Amazon Web Services Regions and accounts
+-- throughout your Amazon Web Services Organization. For more information,
+-- see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html What is IPAM?>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- /See:/ 'newIpam' smart constructor.
+data Ipam = Ipam'
+  { -- | The description for the IPAM.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IPAM.
+    ipamArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPAM.
+    ipamId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region of the IPAM.
+    ipamRegion :: Prelude.Maybe Prelude.Text,
+    -- | The operating Regions for an IPAM. Operating Regions are Amazon Web
+    -- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+    -- IPAM only discovers and monitors resources in the Amazon Web Services
+    -- Regions you select as operating Regions.
+    --
+    -- For more information about operating Regions, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+    -- in the /Amazon VPC IPAM User Guide/.
+    operatingRegions :: Prelude.Maybe [IpamOperatingRegion],
+    -- | The Amazon Web Services account ID of the owner of the IPAM.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPAM\'s default private scope.
+    privateDefaultScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPAM\'s default public scope.
+    publicDefaultScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The number of scopes in the IPAM. The scope quota is 5. For more
+    -- information on quotas, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html Quotas in IPAM>
+    -- in the /Amazon VPC IPAM User Guide/.
+    scopeCount :: Prelude.Maybe Prelude.Int,
+    -- | The state of the IPAM.
+    state :: Prelude.Maybe IpamState,
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipam' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'ipam_description' - The description for the IPAM.
+--
+-- 'ipamArn', 'ipam_ipamArn' - The ARN of the IPAM.
+--
+-- 'ipamId', 'ipam_ipamId' - The ID of the IPAM.
+--
+-- 'ipamRegion', 'ipam_ipamRegion' - The Amazon Web Services Region of the IPAM.
+--
+-- 'operatingRegions', 'ipam_operatingRegions' - The operating Regions for an IPAM. Operating Regions are Amazon Web
+-- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+-- IPAM only discovers and monitors resources in the Amazon Web Services
+-- Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ownerId', 'ipam_ownerId' - The Amazon Web Services account ID of the owner of the IPAM.
+--
+-- 'privateDefaultScopeId', 'ipam_privateDefaultScopeId' - The ID of the IPAM\'s default private scope.
+--
+-- 'publicDefaultScopeId', 'ipam_publicDefaultScopeId' - The ID of the IPAM\'s default public scope.
+--
+-- 'scopeCount', 'ipam_scopeCount' - The number of scopes in the IPAM. The scope quota is 5. For more
+-- information on quotas, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html Quotas in IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'state', 'ipam_state' - The state of the IPAM.
+--
+-- 'tags', 'ipam_tags' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+newIpam ::
+  Ipam
+newIpam =
+  Ipam'
+    { description = Prelude.Nothing,
+      ipamArn = Prelude.Nothing,
+      ipamId = Prelude.Nothing,
+      ipamRegion = Prelude.Nothing,
+      operatingRegions = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      privateDefaultScopeId = Prelude.Nothing,
+      publicDefaultScopeId = Prelude.Nothing,
+      scopeCount = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The description for the IPAM.
+ipam_description :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_description = Lens.lens (\Ipam' {description} -> description) (\s@Ipam' {} a -> s {description = a} :: Ipam)
+
+-- | The ARN of the IPAM.
+ipam_ipamArn :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_ipamArn = Lens.lens (\Ipam' {ipamArn} -> ipamArn) (\s@Ipam' {} a -> s {ipamArn = a} :: Ipam)
+
+-- | The ID of the IPAM.
+ipam_ipamId :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_ipamId = Lens.lens (\Ipam' {ipamId} -> ipamId) (\s@Ipam' {} a -> s {ipamId = a} :: Ipam)
+
+-- | The Amazon Web Services Region of the IPAM.
+ipam_ipamRegion :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_ipamRegion = Lens.lens (\Ipam' {ipamRegion} -> ipamRegion) (\s@Ipam' {} a -> s {ipamRegion = a} :: Ipam)
+
+-- | The operating Regions for an IPAM. Operating Regions are Amazon Web
+-- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+-- IPAM only discovers and monitors resources in the Amazon Web Services
+-- Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+ipam_operatingRegions :: Lens.Lens' Ipam (Prelude.Maybe [IpamOperatingRegion])
+ipam_operatingRegions = Lens.lens (\Ipam' {operatingRegions} -> operatingRegions) (\s@Ipam' {} a -> s {operatingRegions = a} :: Ipam) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services account ID of the owner of the IPAM.
+ipam_ownerId :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_ownerId = Lens.lens (\Ipam' {ownerId} -> ownerId) (\s@Ipam' {} a -> s {ownerId = a} :: Ipam)
+
+-- | The ID of the IPAM\'s default private scope.
+ipam_privateDefaultScopeId :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_privateDefaultScopeId = Lens.lens (\Ipam' {privateDefaultScopeId} -> privateDefaultScopeId) (\s@Ipam' {} a -> s {privateDefaultScopeId = a} :: Ipam)
+
+-- | The ID of the IPAM\'s default public scope.
+ipam_publicDefaultScopeId :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Text)
+ipam_publicDefaultScopeId = Lens.lens (\Ipam' {publicDefaultScopeId} -> publicDefaultScopeId) (\s@Ipam' {} a -> s {publicDefaultScopeId = a} :: Ipam)
+
+-- | The number of scopes in the IPAM. The scope quota is 5. For more
+-- information on quotas, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html Quotas in IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+ipam_scopeCount :: Lens.Lens' Ipam (Prelude.Maybe Prelude.Int)
+ipam_scopeCount = Lens.lens (\Ipam' {scopeCount} -> scopeCount) (\s@Ipam' {} a -> s {scopeCount = a} :: Ipam)
+
+-- | The state of the IPAM.
+ipam_state :: Lens.Lens' Ipam (Prelude.Maybe IpamState)
+ipam_state = Lens.lens (\Ipam' {state} -> state) (\s@Ipam' {} a -> s {state = a} :: Ipam)
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+ipam_tags :: Lens.Lens' Ipam (Prelude.Maybe [Tag])
+ipam_tags = Lens.lens (\Ipam' {tags} -> tags) (\s@Ipam' {} a -> s {tags = a} :: Ipam) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML Ipam where
+  parseXML x =
+    Ipam'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "ipamArn")
+      Prelude.<*> (x Data..@? "ipamId")
+      Prelude.<*> (x Data..@? "ipamRegion")
+      Prelude.<*> ( x
+                      Data..@? "operatingRegionSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "privateDefaultScopeId")
+      Prelude.<*> (x Data..@? "publicDefaultScopeId")
+      Prelude.<*> (x Data..@? "scopeCount")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable Ipam where
+  hashWithSalt _salt Ipam' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ipamArn
+      `Prelude.hashWithSalt` ipamId
+      `Prelude.hashWithSalt` ipamRegion
+      `Prelude.hashWithSalt` operatingRegions
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` privateDefaultScopeId
+      `Prelude.hashWithSalt` publicDefaultScopeId
+      `Prelude.hashWithSalt` scopeCount
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Ipam where
+  rnf Ipam' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ipamArn
+      `Prelude.seq` Prelude.rnf ipamId
+      `Prelude.seq` Prelude.rnf ipamRegion
+      `Prelude.seq` Prelude.rnf operatingRegions
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf privateDefaultScopeId
+      `Prelude.seq` Prelude.rnf publicDefaultScopeId
+      `Prelude.seq` Prelude.rnf scopeCount
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/IpamAddressHistoryRecord.hs b/gen/Amazonka/EC2/Types/IpamAddressHistoryRecord.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamAddressHistoryRecord.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamAddressHistoryRecord
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamAddressHistoryRecord where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamAddressHistoryResourceType
+import Amazonka.EC2.Types.IpamComplianceStatus
+import Amazonka.EC2.Types.IpamOverlapStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The historical record of a CIDR within an IPAM scope. For more
+-- information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/view-history-cidr-ipam.html View the history of IP addresses>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- /See:/ 'newIpamAddressHistoryRecord' smart constructor.
+data IpamAddressHistoryRecord = IpamAddressHistoryRecord'
+  { -- | The CIDR of the resource.
+    resourceCidr :: Prelude.Maybe Prelude.Text,
+    -- | The compliance status of a resource. For more information on compliance
+    -- statuses, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+    -- in the /Amazon VPC IPAM User Guide/.
+    resourceComplianceStatus :: Prelude.Maybe IpamComplianceStatus,
+    -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the resource.
+    resourceName :: Prelude.Maybe Prelude.Text,
+    -- | The overlap status of an IPAM resource. The overlap status tells you if
+    -- the CIDR for a resource overlaps with another CIDR in the scope. For
+    -- more information on overlap statuses, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+    -- in the /Amazon VPC IPAM User Guide/.
+    resourceOverlapStatus :: Prelude.Maybe IpamOverlapStatus,
+    -- | The ID of the resource owner.
+    resourceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region of the resource.
+    resourceRegion :: Prelude.Maybe Prelude.Text,
+    -- | The type of the resource.
+    resourceType :: Prelude.Maybe IpamAddressHistoryResourceType,
+    -- | Sampled end time of the resource-to-CIDR association within the IPAM
+    -- scope. Changes are picked up in periodic snapshots, so the end time may
+    -- have occurred before this specific time.
+    sampledEndTime :: Prelude.Maybe Data.ISO8601,
+    -- | Sampled start time of the resource-to-CIDR association within the IPAM
+    -- scope. Changes are picked up in periodic snapshots, so the start time
+    -- may have occurred before this specific time.
+    sampledStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | The VPC ID of the resource.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamAddressHistoryRecord' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceCidr', 'ipamAddressHistoryRecord_resourceCidr' - The CIDR of the resource.
+--
+-- 'resourceComplianceStatus', 'ipamAddressHistoryRecord_resourceComplianceStatus' - The compliance status of a resource. For more information on compliance
+-- statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'resourceId', 'ipamAddressHistoryRecord_resourceId' - The ID of the resource.
+--
+-- 'resourceName', 'ipamAddressHistoryRecord_resourceName' - The name of the resource.
+--
+-- 'resourceOverlapStatus', 'ipamAddressHistoryRecord_resourceOverlapStatus' - The overlap status of an IPAM resource. The overlap status tells you if
+-- the CIDR for a resource overlaps with another CIDR in the scope. For
+-- more information on overlap statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'resourceOwnerId', 'ipamAddressHistoryRecord_resourceOwnerId' - The ID of the resource owner.
+--
+-- 'resourceRegion', 'ipamAddressHistoryRecord_resourceRegion' - The Amazon Web Services Region of the resource.
+--
+-- 'resourceType', 'ipamAddressHistoryRecord_resourceType' - The type of the resource.
+--
+-- 'sampledEndTime', 'ipamAddressHistoryRecord_sampledEndTime' - Sampled end time of the resource-to-CIDR association within the IPAM
+-- scope. Changes are picked up in periodic snapshots, so the end time may
+-- have occurred before this specific time.
+--
+-- 'sampledStartTime', 'ipamAddressHistoryRecord_sampledStartTime' - Sampled start time of the resource-to-CIDR association within the IPAM
+-- scope. Changes are picked up in periodic snapshots, so the start time
+-- may have occurred before this specific time.
+--
+-- 'vpcId', 'ipamAddressHistoryRecord_vpcId' - The VPC ID of the resource.
+newIpamAddressHistoryRecord ::
+  IpamAddressHistoryRecord
+newIpamAddressHistoryRecord =
+  IpamAddressHistoryRecord'
+    { resourceCidr =
+        Prelude.Nothing,
+      resourceComplianceStatus = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceName = Prelude.Nothing,
+      resourceOverlapStatus = Prelude.Nothing,
+      resourceOwnerId = Prelude.Nothing,
+      resourceRegion = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      sampledEndTime = Prelude.Nothing,
+      sampledStartTime = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The CIDR of the resource.
+ipamAddressHistoryRecord_resourceCidr :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.Text)
+ipamAddressHistoryRecord_resourceCidr = Lens.lens (\IpamAddressHistoryRecord' {resourceCidr} -> resourceCidr) (\s@IpamAddressHistoryRecord' {} a -> s {resourceCidr = a} :: IpamAddressHistoryRecord)
+
+-- | The compliance status of a resource. For more information on compliance
+-- statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+ipamAddressHistoryRecord_resourceComplianceStatus :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe IpamComplianceStatus)
+ipamAddressHistoryRecord_resourceComplianceStatus = Lens.lens (\IpamAddressHistoryRecord' {resourceComplianceStatus} -> resourceComplianceStatus) (\s@IpamAddressHistoryRecord' {} a -> s {resourceComplianceStatus = a} :: IpamAddressHistoryRecord)
+
+-- | The ID of the resource.
+ipamAddressHistoryRecord_resourceId :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.Text)
+ipamAddressHistoryRecord_resourceId = Lens.lens (\IpamAddressHistoryRecord' {resourceId} -> resourceId) (\s@IpamAddressHistoryRecord' {} a -> s {resourceId = a} :: IpamAddressHistoryRecord)
+
+-- | The name of the resource.
+ipamAddressHistoryRecord_resourceName :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.Text)
+ipamAddressHistoryRecord_resourceName = Lens.lens (\IpamAddressHistoryRecord' {resourceName} -> resourceName) (\s@IpamAddressHistoryRecord' {} a -> s {resourceName = a} :: IpamAddressHistoryRecord)
+
+-- | The overlap status of an IPAM resource. The overlap status tells you if
+-- the CIDR for a resource overlaps with another CIDR in the scope. For
+-- more information on overlap statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+ipamAddressHistoryRecord_resourceOverlapStatus :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe IpamOverlapStatus)
+ipamAddressHistoryRecord_resourceOverlapStatus = Lens.lens (\IpamAddressHistoryRecord' {resourceOverlapStatus} -> resourceOverlapStatus) (\s@IpamAddressHistoryRecord' {} a -> s {resourceOverlapStatus = a} :: IpamAddressHistoryRecord)
+
+-- | The ID of the resource owner.
+ipamAddressHistoryRecord_resourceOwnerId :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.Text)
+ipamAddressHistoryRecord_resourceOwnerId = Lens.lens (\IpamAddressHistoryRecord' {resourceOwnerId} -> resourceOwnerId) (\s@IpamAddressHistoryRecord' {} a -> s {resourceOwnerId = a} :: IpamAddressHistoryRecord)
+
+-- | The Amazon Web Services Region of the resource.
+ipamAddressHistoryRecord_resourceRegion :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.Text)
+ipamAddressHistoryRecord_resourceRegion = Lens.lens (\IpamAddressHistoryRecord' {resourceRegion} -> resourceRegion) (\s@IpamAddressHistoryRecord' {} a -> s {resourceRegion = a} :: IpamAddressHistoryRecord)
+
+-- | The type of the resource.
+ipamAddressHistoryRecord_resourceType :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe IpamAddressHistoryResourceType)
+ipamAddressHistoryRecord_resourceType = Lens.lens (\IpamAddressHistoryRecord' {resourceType} -> resourceType) (\s@IpamAddressHistoryRecord' {} a -> s {resourceType = a} :: IpamAddressHistoryRecord)
+
+-- | Sampled end time of the resource-to-CIDR association within the IPAM
+-- scope. Changes are picked up in periodic snapshots, so the end time may
+-- have occurred before this specific time.
+ipamAddressHistoryRecord_sampledEndTime :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.UTCTime)
+ipamAddressHistoryRecord_sampledEndTime = Lens.lens (\IpamAddressHistoryRecord' {sampledEndTime} -> sampledEndTime) (\s@IpamAddressHistoryRecord' {} a -> s {sampledEndTime = a} :: IpamAddressHistoryRecord) Prelude.. Lens.mapping Data._Time
+
+-- | Sampled start time of the resource-to-CIDR association within the IPAM
+-- scope. Changes are picked up in periodic snapshots, so the start time
+-- may have occurred before this specific time.
+ipamAddressHistoryRecord_sampledStartTime :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.UTCTime)
+ipamAddressHistoryRecord_sampledStartTime = Lens.lens (\IpamAddressHistoryRecord' {sampledStartTime} -> sampledStartTime) (\s@IpamAddressHistoryRecord' {} a -> s {sampledStartTime = a} :: IpamAddressHistoryRecord) Prelude.. Lens.mapping Data._Time
+
+-- | The VPC ID of the resource.
+ipamAddressHistoryRecord_vpcId :: Lens.Lens' IpamAddressHistoryRecord (Prelude.Maybe Prelude.Text)
+ipamAddressHistoryRecord_vpcId = Lens.lens (\IpamAddressHistoryRecord' {vpcId} -> vpcId) (\s@IpamAddressHistoryRecord' {} a -> s {vpcId = a} :: IpamAddressHistoryRecord)
+
+instance Data.FromXML IpamAddressHistoryRecord where
+  parseXML x =
+    IpamAddressHistoryRecord'
+      Prelude.<$> (x Data..@? "resourceCidr")
+      Prelude.<*> (x Data..@? "resourceComplianceStatus")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceName")
+      Prelude.<*> (x Data..@? "resourceOverlapStatus")
+      Prelude.<*> (x Data..@? "resourceOwnerId")
+      Prelude.<*> (x Data..@? "resourceRegion")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "sampledEndTime")
+      Prelude.<*> (x Data..@? "sampledStartTime")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable IpamAddressHistoryRecord where
+  hashWithSalt _salt IpamAddressHistoryRecord' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceCidr
+      `Prelude.hashWithSalt` resourceComplianceStatus
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceName
+      `Prelude.hashWithSalt` resourceOverlapStatus
+      `Prelude.hashWithSalt` resourceOwnerId
+      `Prelude.hashWithSalt` resourceRegion
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` sampledEndTime
+      `Prelude.hashWithSalt` sampledStartTime
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData IpamAddressHistoryRecord where
+  rnf IpamAddressHistoryRecord' {..} =
+    Prelude.rnf resourceCidr
+      `Prelude.seq` Prelude.rnf resourceComplianceStatus
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceName
+      `Prelude.seq` Prelude.rnf resourceOverlapStatus
+      `Prelude.seq` Prelude.rnf resourceOwnerId
+      `Prelude.seq` Prelude.rnf resourceRegion
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf sampledEndTime
+      `Prelude.seq` Prelude.rnf sampledStartTime
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/IpamAddressHistoryResourceType.hs b/gen/Amazonka/EC2/Types/IpamAddressHistoryResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamAddressHistoryResourceType.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamAddressHistoryResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamAddressHistoryResourceType
+  ( IpamAddressHistoryResourceType
+      ( ..,
+        IpamAddressHistoryResourceType_Eip,
+        IpamAddressHistoryResourceType_Instance,
+        IpamAddressHistoryResourceType_Network_interface,
+        IpamAddressHistoryResourceType_Subnet,
+        IpamAddressHistoryResourceType_Vpc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamAddressHistoryResourceType = IpamAddressHistoryResourceType'
+  { fromIpamAddressHistoryResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamAddressHistoryResourceType_Eip :: IpamAddressHistoryResourceType
+pattern IpamAddressHistoryResourceType_Eip = IpamAddressHistoryResourceType' "eip"
+
+pattern IpamAddressHistoryResourceType_Instance :: IpamAddressHistoryResourceType
+pattern IpamAddressHistoryResourceType_Instance = IpamAddressHistoryResourceType' "instance"
+
+pattern IpamAddressHistoryResourceType_Network_interface :: IpamAddressHistoryResourceType
+pattern IpamAddressHistoryResourceType_Network_interface = IpamAddressHistoryResourceType' "network-interface"
+
+pattern IpamAddressHistoryResourceType_Subnet :: IpamAddressHistoryResourceType
+pattern IpamAddressHistoryResourceType_Subnet = IpamAddressHistoryResourceType' "subnet"
+
+pattern IpamAddressHistoryResourceType_Vpc :: IpamAddressHistoryResourceType
+pattern IpamAddressHistoryResourceType_Vpc = IpamAddressHistoryResourceType' "vpc"
+
+{-# COMPLETE
+  IpamAddressHistoryResourceType_Eip,
+  IpamAddressHistoryResourceType_Instance,
+  IpamAddressHistoryResourceType_Network_interface,
+  IpamAddressHistoryResourceType_Subnet,
+  IpamAddressHistoryResourceType_Vpc,
+  IpamAddressHistoryResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamCidrAuthorizationContext.hs b/gen/Amazonka/EC2/Types/IpamCidrAuthorizationContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamCidrAuthorizationContext.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamCidrAuthorizationContext
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamCidrAuthorizationContext where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | A signed document that proves that you are authorized to bring the
+-- specified IP address range to Amazon using BYOIP.
+--
+-- /See:/ 'newIpamCidrAuthorizationContext' smart constructor.
+data IpamCidrAuthorizationContext = IpamCidrAuthorizationContext'
+  { -- | The plain-text authorization message for the prefix and account.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The signed authorization message for the prefix and account.
+    signature :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamCidrAuthorizationContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'message', 'ipamCidrAuthorizationContext_message' - The plain-text authorization message for the prefix and account.
+--
+-- 'signature', 'ipamCidrAuthorizationContext_signature' - The signed authorization message for the prefix and account.
+newIpamCidrAuthorizationContext ::
+  IpamCidrAuthorizationContext
+newIpamCidrAuthorizationContext =
+  IpamCidrAuthorizationContext'
+    { message =
+        Prelude.Nothing,
+      signature = Prelude.Nothing
+    }
+
+-- | The plain-text authorization message for the prefix and account.
+ipamCidrAuthorizationContext_message :: Lens.Lens' IpamCidrAuthorizationContext (Prelude.Maybe Prelude.Text)
+ipamCidrAuthorizationContext_message = Lens.lens (\IpamCidrAuthorizationContext' {message} -> message) (\s@IpamCidrAuthorizationContext' {} a -> s {message = a} :: IpamCidrAuthorizationContext)
+
+-- | The signed authorization message for the prefix and account.
+ipamCidrAuthorizationContext_signature :: Lens.Lens' IpamCidrAuthorizationContext (Prelude.Maybe Prelude.Text)
+ipamCidrAuthorizationContext_signature = Lens.lens (\IpamCidrAuthorizationContext' {signature} -> signature) (\s@IpamCidrAuthorizationContext' {} a -> s {signature = a} :: IpamCidrAuthorizationContext)
+
+instance
+  Prelude.Hashable
+    IpamCidrAuthorizationContext
+  where
+  hashWithSalt _salt IpamCidrAuthorizationContext' {..} =
+    _salt
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` signature
+
+instance Prelude.NFData IpamCidrAuthorizationContext where
+  rnf IpamCidrAuthorizationContext' {..} =
+    Prelude.rnf message
+      `Prelude.seq` Prelude.rnf signature
+
+instance Data.ToQuery IpamCidrAuthorizationContext where
+  toQuery IpamCidrAuthorizationContext' {..} =
+    Prelude.mconcat
+      [ "Message" Data.=: message,
+        "Signature" Data.=: signature
+      ]
diff --git a/gen/Amazonka/EC2/Types/IpamComplianceStatus.hs b/gen/Amazonka/EC2/Types/IpamComplianceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamComplianceStatus.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamComplianceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamComplianceStatus
+  ( IpamComplianceStatus
+      ( ..,
+        IpamComplianceStatus_Compliant,
+        IpamComplianceStatus_Ignored,
+        IpamComplianceStatus_Noncompliant,
+        IpamComplianceStatus_Unmanaged
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamComplianceStatus = IpamComplianceStatus'
+  { fromIpamComplianceStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamComplianceStatus_Compliant :: IpamComplianceStatus
+pattern IpamComplianceStatus_Compliant = IpamComplianceStatus' "compliant"
+
+pattern IpamComplianceStatus_Ignored :: IpamComplianceStatus
+pattern IpamComplianceStatus_Ignored = IpamComplianceStatus' "ignored"
+
+pattern IpamComplianceStatus_Noncompliant :: IpamComplianceStatus
+pattern IpamComplianceStatus_Noncompliant = IpamComplianceStatus' "noncompliant"
+
+pattern IpamComplianceStatus_Unmanaged :: IpamComplianceStatus
+pattern IpamComplianceStatus_Unmanaged = IpamComplianceStatus' "unmanaged"
+
+{-# COMPLETE
+  IpamComplianceStatus_Compliant,
+  IpamComplianceStatus_Ignored,
+  IpamComplianceStatus_Noncompliant,
+  IpamComplianceStatus_Unmanaged,
+  IpamComplianceStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamManagementState.hs b/gen/Amazonka/EC2/Types/IpamManagementState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamManagementState.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamManagementState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamManagementState
+  ( IpamManagementState
+      ( ..,
+        IpamManagementState_Ignored,
+        IpamManagementState_Managed,
+        IpamManagementState_Unmanaged
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamManagementState = IpamManagementState'
+  { fromIpamManagementState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamManagementState_Ignored :: IpamManagementState
+pattern IpamManagementState_Ignored = IpamManagementState' "ignored"
+
+pattern IpamManagementState_Managed :: IpamManagementState
+pattern IpamManagementState_Managed = IpamManagementState' "managed"
+
+pattern IpamManagementState_Unmanaged :: IpamManagementState
+pattern IpamManagementState_Unmanaged = IpamManagementState' "unmanaged"
+
+{-# COMPLETE
+  IpamManagementState_Ignored,
+  IpamManagementState_Managed,
+  IpamManagementState_Unmanaged,
+  IpamManagementState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamOperatingRegion.hs b/gen/Amazonka/EC2/Types/IpamOperatingRegion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamOperatingRegion.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamOperatingRegion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamOperatingRegion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The operating Regions for an IPAM. Operating Regions are Amazon Web
+-- Services Regions where the IPAM is allowed to manage IP address CIDRs.
+-- IPAM only discovers and monitors resources in the Amazon Web Services
+-- Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- /See:/ 'newIpamOperatingRegion' smart constructor.
+data IpamOperatingRegion = IpamOperatingRegion'
+  { -- | The name of the operating Region.
+    regionName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamOperatingRegion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'regionName', 'ipamOperatingRegion_regionName' - The name of the operating Region.
+newIpamOperatingRegion ::
+  IpamOperatingRegion
+newIpamOperatingRegion =
+  IpamOperatingRegion' {regionName = Prelude.Nothing}
+
+-- | The name of the operating Region.
+ipamOperatingRegion_regionName :: Lens.Lens' IpamOperatingRegion (Prelude.Maybe Prelude.Text)
+ipamOperatingRegion_regionName = Lens.lens (\IpamOperatingRegion' {regionName} -> regionName) (\s@IpamOperatingRegion' {} a -> s {regionName = a} :: IpamOperatingRegion)
+
+instance Data.FromXML IpamOperatingRegion where
+  parseXML x =
+    IpamOperatingRegion'
+      Prelude.<$> (x Data..@? "regionName")
+
+instance Prelude.Hashable IpamOperatingRegion where
+  hashWithSalt _salt IpamOperatingRegion' {..} =
+    _salt `Prelude.hashWithSalt` regionName
+
+instance Prelude.NFData IpamOperatingRegion where
+  rnf IpamOperatingRegion' {..} = Prelude.rnf regionName
diff --git a/gen/Amazonka/EC2/Types/IpamOverlapStatus.hs b/gen/Amazonka/EC2/Types/IpamOverlapStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamOverlapStatus.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamOverlapStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamOverlapStatus
+  ( IpamOverlapStatus
+      ( ..,
+        IpamOverlapStatus_Ignored,
+        IpamOverlapStatus_Nonoverlapping,
+        IpamOverlapStatus_Overlapping
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamOverlapStatus = IpamOverlapStatus'
+  { fromIpamOverlapStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamOverlapStatus_Ignored :: IpamOverlapStatus
+pattern IpamOverlapStatus_Ignored = IpamOverlapStatus' "ignored"
+
+pattern IpamOverlapStatus_Nonoverlapping :: IpamOverlapStatus
+pattern IpamOverlapStatus_Nonoverlapping = IpamOverlapStatus' "nonoverlapping"
+
+pattern IpamOverlapStatus_Overlapping :: IpamOverlapStatus
+pattern IpamOverlapStatus_Overlapping = IpamOverlapStatus' "overlapping"
+
+{-# COMPLETE
+  IpamOverlapStatus_Ignored,
+  IpamOverlapStatus_Nonoverlapping,
+  IpamOverlapStatus_Overlapping,
+  IpamOverlapStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamPool.hs b/gen/Amazonka/EC2/Types/IpamPool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPool.hs
@@ -0,0 +1,480 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPool where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AddressFamily
+import Amazonka.EC2.Types.IpamPoolAwsService
+import Amazonka.EC2.Types.IpamPoolState
+import Amazonka.EC2.Types.IpamResourceTag
+import Amazonka.EC2.Types.IpamScopeType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | In IPAM, a pool is a collection of contiguous IP addresses CIDRs. Pools
+-- enable you to organize your IP addresses according to your routing and
+-- security needs. For example, if you have separate routing and security
+-- needs for development and production applications, you can create a pool
+-- for each.
+--
+-- /See:/ 'newIpamPool' smart constructor.
+data IpamPool = IpamPool'
+  { -- | The address family of the pool.
+    addressFamily :: Prelude.Maybe AddressFamily,
+    -- | The default netmask length for allocations added to this pool. If, for
+    -- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+    -- here, new allocations will default to 10.0.0.0\/16.
+    allocationDefaultNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The maximum netmask length possible for CIDR allocations in this IPAM
+    -- pool to be compliant. The maximum netmask length must be greater than
+    -- the minimum netmask length. Possible netmask lengths for IPv4 addresses
+    -- are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+    allocationMaxNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | The minimum netmask length required for CIDR allocations in this IPAM
+    -- pool to be compliant. The minimum netmask length must be less than the
+    -- maximum netmask length. Possible netmask lengths for IPv4 addresses are
+    -- 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+    allocationMinNetmaskLength :: Prelude.Maybe Prelude.Natural,
+    -- | Tags that are required for resources that use CIDRs from this IPAM pool.
+    -- Resources that do not have these tags will not be allowed to allocate
+    -- space from the pool. If the resources have their tags changed after they
+    -- have allocated space or if the allocation tagging requirements are
+    -- changed on the pool, the resource may be marked as noncompliant.
+    allocationResourceTags :: Prelude.Maybe [IpamResourceTag],
+    -- | If selected, IPAM will continuously look for resources within the CIDR
+    -- range of this pool and automatically import them as allocations into
+    -- your IPAM. The CIDRs that will be allocated for these resources must not
+    -- already be allocated to other resources in order for the import to
+    -- succeed. IPAM will import a CIDR regardless of its compliance with the
+    -- pool\'s allocation rules, so a resource might be imported and
+    -- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+    -- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+    -- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+    -- them only.
+    --
+    -- A locale must be set on the pool for this feature to work.
+    autoImport :: Prelude.Maybe Prelude.Bool,
+    -- | Limits which service in Amazon Web Services that the pool can be used
+    -- in. \"ec2\", for example, allows users to use space for Elastic IP
+    -- addresses and VPCs.
+    awsService :: Prelude.Maybe IpamPoolAwsService,
+    -- | The description of the IPAM pool.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IPAM.
+    ipamArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IPAM pool.
+    ipamPoolArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the IPAM pool.
+    ipamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region of the IPAM pool.
+    ipamRegion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the scope of the IPAM pool.
+    ipamScopeArn :: Prelude.Maybe Prelude.Text,
+    -- | In IPAM, a scope is the highest-level container within IPAM. An IPAM
+    -- contains two default scopes. Each scope represents the IP space for a
+    -- single network. The private scope is intended for all private IP address
+    -- space. The public scope is intended for all public IP address space.
+    -- Scopes enable you to reuse IP addresses across multiple unconnected
+    -- networks without causing IP address overlap or conflict.
+    ipamScopeType :: Prelude.Maybe IpamScopeType,
+    -- | The locale of the IPAM pool. In IPAM, the locale is the Amazon Web
+    -- Services Region where you want to make an IPAM pool available for
+    -- allocations. Only resources in the same Region as the locale of the pool
+    -- can get IP address allocations from the pool. You can only allocate a
+    -- CIDR for a VPC, for example, from an IPAM pool that shares a locale with
+    -- the VPC’s Region. Note that once you choose a Locale for a pool, you
+    -- cannot modify it. If you choose an Amazon Web Services Region for locale
+    -- that has not been configured as an operating Region for the IPAM,
+    -- you\'ll get an error.
+    locale :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID of the owner of the IPAM pool.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The depth of pools in your IPAM pool. The pool depth quota is 10. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html Quotas in IPAM>
+    -- in the /Amazon VPC IPAM User Guide/.
+    poolDepth :: Prelude.Maybe Prelude.Int,
+    -- | Determines if a pool is publicly advertisable. This option is not
+    -- available for pools with AddressFamily set to @ipv4@.
+    publiclyAdvertisable :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the source IPAM pool. You can use this option to create an
+    -- IPAM pool within an existing source pool.
+    sourceIpamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the IPAM pool.
+    state :: Prelude.Maybe IpamPoolState,
+    -- | A message related to the failed creation of an IPAM pool.
+    stateMessage :: Prelude.Maybe Prelude.Text,
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamPool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressFamily', 'ipamPool_addressFamily' - The address family of the pool.
+--
+-- 'allocationDefaultNetmaskLength', 'ipamPool_allocationDefaultNetmaskLength' - The default netmask length for allocations added to this pool. If, for
+-- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+-- here, new allocations will default to 10.0.0.0\/16.
+--
+-- 'allocationMaxNetmaskLength', 'ipamPool_allocationMaxNetmaskLength' - The maximum netmask length possible for CIDR allocations in this IPAM
+-- pool to be compliant. The maximum netmask length must be greater than
+-- the minimum netmask length. Possible netmask lengths for IPv4 addresses
+-- are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+--
+-- 'allocationMinNetmaskLength', 'ipamPool_allocationMinNetmaskLength' - The minimum netmask length required for CIDR allocations in this IPAM
+-- pool to be compliant. The minimum netmask length must be less than the
+-- maximum netmask length. Possible netmask lengths for IPv4 addresses are
+-- 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+--
+-- 'allocationResourceTags', 'ipamPool_allocationResourceTags' - Tags that are required for resources that use CIDRs from this IPAM pool.
+-- Resources that do not have these tags will not be allowed to allocate
+-- space from the pool. If the resources have their tags changed after they
+-- have allocated space or if the allocation tagging requirements are
+-- changed on the pool, the resource may be marked as noncompliant.
+--
+-- 'autoImport', 'ipamPool_autoImport' - If selected, IPAM will continuously look for resources within the CIDR
+-- range of this pool and automatically import them as allocations into
+-- your IPAM. The CIDRs that will be allocated for these resources must not
+-- already be allocated to other resources in order for the import to
+-- succeed. IPAM will import a CIDR regardless of its compliance with the
+-- pool\'s allocation rules, so a resource might be imported and
+-- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+-- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+-- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+-- them only.
+--
+-- A locale must be set on the pool for this feature to work.
+--
+-- 'awsService', 'ipamPool_awsService' - Limits which service in Amazon Web Services that the pool can be used
+-- in. \"ec2\", for example, allows users to use space for Elastic IP
+-- addresses and VPCs.
+--
+-- 'description', 'ipamPool_description' - The description of the IPAM pool.
+--
+-- 'ipamArn', 'ipamPool_ipamArn' - The ARN of the IPAM.
+--
+-- 'ipamPoolArn', 'ipamPool_ipamPoolArn' - The ARN of the IPAM pool.
+--
+-- 'ipamPoolId', 'ipamPool_ipamPoolId' - The ID of the IPAM pool.
+--
+-- 'ipamRegion', 'ipamPool_ipamRegion' - The Amazon Web Services Region of the IPAM pool.
+--
+-- 'ipamScopeArn', 'ipamPool_ipamScopeArn' - The ARN of the scope of the IPAM pool.
+--
+-- 'ipamScopeType', 'ipamPool_ipamScopeType' - In IPAM, a scope is the highest-level container within IPAM. An IPAM
+-- contains two default scopes. Each scope represents the IP space for a
+-- single network. The private scope is intended for all private IP address
+-- space. The public scope is intended for all public IP address space.
+-- Scopes enable you to reuse IP addresses across multiple unconnected
+-- networks without causing IP address overlap or conflict.
+--
+-- 'locale', 'ipamPool_locale' - The locale of the IPAM pool. In IPAM, the locale is the Amazon Web
+-- Services Region where you want to make an IPAM pool available for
+-- allocations. Only resources in the same Region as the locale of the pool
+-- can get IP address allocations from the pool. You can only allocate a
+-- CIDR for a VPC, for example, from an IPAM pool that shares a locale with
+-- the VPC’s Region. Note that once you choose a Locale for a pool, you
+-- cannot modify it. If you choose an Amazon Web Services Region for locale
+-- that has not been configured as an operating Region for the IPAM,
+-- you\'ll get an error.
+--
+-- 'ownerId', 'ipamPool_ownerId' - The Amazon Web Services account ID of the owner of the IPAM pool.
+--
+-- 'poolDepth', 'ipamPool_poolDepth' - The depth of pools in your IPAM pool. The pool depth quota is 10. For
+-- more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html Quotas in IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'publiclyAdvertisable', 'ipamPool_publiclyAdvertisable' - Determines if a pool is publicly advertisable. This option is not
+-- available for pools with AddressFamily set to @ipv4@.
+--
+-- 'sourceIpamPoolId', 'ipamPool_sourceIpamPoolId' - The ID of the source IPAM pool. You can use this option to create an
+-- IPAM pool within an existing source pool.
+--
+-- 'state', 'ipamPool_state' - The state of the IPAM pool.
+--
+-- 'stateMessage', 'ipamPool_stateMessage' - A message related to the failed creation of an IPAM pool.
+--
+-- 'tags', 'ipamPool_tags' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+newIpamPool ::
+  IpamPool
+newIpamPool =
+  IpamPool'
+    { addressFamily = Prelude.Nothing,
+      allocationDefaultNetmaskLength = Prelude.Nothing,
+      allocationMaxNetmaskLength = Prelude.Nothing,
+      allocationMinNetmaskLength = Prelude.Nothing,
+      allocationResourceTags = Prelude.Nothing,
+      autoImport = Prelude.Nothing,
+      awsService = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ipamArn = Prelude.Nothing,
+      ipamPoolArn = Prelude.Nothing,
+      ipamPoolId = Prelude.Nothing,
+      ipamRegion = Prelude.Nothing,
+      ipamScopeArn = Prelude.Nothing,
+      ipamScopeType = Prelude.Nothing,
+      locale = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      poolDepth = Prelude.Nothing,
+      publiclyAdvertisable = Prelude.Nothing,
+      sourceIpamPoolId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateMessage = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The address family of the pool.
+ipamPool_addressFamily :: Lens.Lens' IpamPool (Prelude.Maybe AddressFamily)
+ipamPool_addressFamily = Lens.lens (\IpamPool' {addressFamily} -> addressFamily) (\s@IpamPool' {} a -> s {addressFamily = a} :: IpamPool)
+
+-- | The default netmask length for allocations added to this pool. If, for
+-- example, the CIDR assigned to this pool is 10.0.0.0\/8 and you enter 16
+-- here, new allocations will default to 10.0.0.0\/16.
+ipamPool_allocationDefaultNetmaskLength :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Natural)
+ipamPool_allocationDefaultNetmaskLength = Lens.lens (\IpamPool' {allocationDefaultNetmaskLength} -> allocationDefaultNetmaskLength) (\s@IpamPool' {} a -> s {allocationDefaultNetmaskLength = a} :: IpamPool)
+
+-- | The maximum netmask length possible for CIDR allocations in this IPAM
+-- pool to be compliant. The maximum netmask length must be greater than
+-- the minimum netmask length. Possible netmask lengths for IPv4 addresses
+-- are 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+ipamPool_allocationMaxNetmaskLength :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Natural)
+ipamPool_allocationMaxNetmaskLength = Lens.lens (\IpamPool' {allocationMaxNetmaskLength} -> allocationMaxNetmaskLength) (\s@IpamPool' {} a -> s {allocationMaxNetmaskLength = a} :: IpamPool)
+
+-- | The minimum netmask length required for CIDR allocations in this IPAM
+-- pool to be compliant. The minimum netmask length must be less than the
+-- maximum netmask length. Possible netmask lengths for IPv4 addresses are
+-- 0 - 32. Possible netmask lengths for IPv6 addresses are 0 - 128.
+ipamPool_allocationMinNetmaskLength :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Natural)
+ipamPool_allocationMinNetmaskLength = Lens.lens (\IpamPool' {allocationMinNetmaskLength} -> allocationMinNetmaskLength) (\s@IpamPool' {} a -> s {allocationMinNetmaskLength = a} :: IpamPool)
+
+-- | Tags that are required for resources that use CIDRs from this IPAM pool.
+-- Resources that do not have these tags will not be allowed to allocate
+-- space from the pool. If the resources have their tags changed after they
+-- have allocated space or if the allocation tagging requirements are
+-- changed on the pool, the resource may be marked as noncompliant.
+ipamPool_allocationResourceTags :: Lens.Lens' IpamPool (Prelude.Maybe [IpamResourceTag])
+ipamPool_allocationResourceTags = Lens.lens (\IpamPool' {allocationResourceTags} -> allocationResourceTags) (\s@IpamPool' {} a -> s {allocationResourceTags = a} :: IpamPool) Prelude.. Lens.mapping Lens.coerced
+
+-- | If selected, IPAM will continuously look for resources within the CIDR
+-- range of this pool and automatically import them as allocations into
+-- your IPAM. The CIDRs that will be allocated for these resources must not
+-- already be allocated to other resources in order for the import to
+-- succeed. IPAM will import a CIDR regardless of its compliance with the
+-- pool\'s allocation rules, so a resource might be imported and
+-- subsequently marked as noncompliant. If IPAM discovers multiple CIDRs
+-- that overlap, IPAM will import the largest CIDR only. If IPAM discovers
+-- multiple CIDRs with matching CIDRs, IPAM will randomly import one of
+-- them only.
+--
+-- A locale must be set on the pool for this feature to work.
+ipamPool_autoImport :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Bool)
+ipamPool_autoImport = Lens.lens (\IpamPool' {autoImport} -> autoImport) (\s@IpamPool' {} a -> s {autoImport = a} :: IpamPool)
+
+-- | Limits which service in Amazon Web Services that the pool can be used
+-- in. \"ec2\", for example, allows users to use space for Elastic IP
+-- addresses and VPCs.
+ipamPool_awsService :: Lens.Lens' IpamPool (Prelude.Maybe IpamPoolAwsService)
+ipamPool_awsService = Lens.lens (\IpamPool' {awsService} -> awsService) (\s@IpamPool' {} a -> s {awsService = a} :: IpamPool)
+
+-- | The description of the IPAM pool.
+ipamPool_description :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_description = Lens.lens (\IpamPool' {description} -> description) (\s@IpamPool' {} a -> s {description = a} :: IpamPool)
+
+-- | The ARN of the IPAM.
+ipamPool_ipamArn :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_ipamArn = Lens.lens (\IpamPool' {ipamArn} -> ipamArn) (\s@IpamPool' {} a -> s {ipamArn = a} :: IpamPool)
+
+-- | The ARN of the IPAM pool.
+ipamPool_ipamPoolArn :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_ipamPoolArn = Lens.lens (\IpamPool' {ipamPoolArn} -> ipamPoolArn) (\s@IpamPool' {} a -> s {ipamPoolArn = a} :: IpamPool)
+
+-- | The ID of the IPAM pool.
+ipamPool_ipamPoolId :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_ipamPoolId = Lens.lens (\IpamPool' {ipamPoolId} -> ipamPoolId) (\s@IpamPool' {} a -> s {ipamPoolId = a} :: IpamPool)
+
+-- | The Amazon Web Services Region of the IPAM pool.
+ipamPool_ipamRegion :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_ipamRegion = Lens.lens (\IpamPool' {ipamRegion} -> ipamRegion) (\s@IpamPool' {} a -> s {ipamRegion = a} :: IpamPool)
+
+-- | The ARN of the scope of the IPAM pool.
+ipamPool_ipamScopeArn :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_ipamScopeArn = Lens.lens (\IpamPool' {ipamScopeArn} -> ipamScopeArn) (\s@IpamPool' {} a -> s {ipamScopeArn = a} :: IpamPool)
+
+-- | In IPAM, a scope is the highest-level container within IPAM. An IPAM
+-- contains two default scopes. Each scope represents the IP space for a
+-- single network. The private scope is intended for all private IP address
+-- space. The public scope is intended for all public IP address space.
+-- Scopes enable you to reuse IP addresses across multiple unconnected
+-- networks without causing IP address overlap or conflict.
+ipamPool_ipamScopeType :: Lens.Lens' IpamPool (Prelude.Maybe IpamScopeType)
+ipamPool_ipamScopeType = Lens.lens (\IpamPool' {ipamScopeType} -> ipamScopeType) (\s@IpamPool' {} a -> s {ipamScopeType = a} :: IpamPool)
+
+-- | The locale of the IPAM pool. In IPAM, the locale is the Amazon Web
+-- Services Region where you want to make an IPAM pool available for
+-- allocations. Only resources in the same Region as the locale of the pool
+-- can get IP address allocations from the pool. You can only allocate a
+-- CIDR for a VPC, for example, from an IPAM pool that shares a locale with
+-- the VPC’s Region. Note that once you choose a Locale for a pool, you
+-- cannot modify it. If you choose an Amazon Web Services Region for locale
+-- that has not been configured as an operating Region for the IPAM,
+-- you\'ll get an error.
+ipamPool_locale :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_locale = Lens.lens (\IpamPool' {locale} -> locale) (\s@IpamPool' {} a -> s {locale = a} :: IpamPool)
+
+-- | The Amazon Web Services account ID of the owner of the IPAM pool.
+ipamPool_ownerId :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_ownerId = Lens.lens (\IpamPool' {ownerId} -> ownerId) (\s@IpamPool' {} a -> s {ownerId = a} :: IpamPool)
+
+-- | The depth of pools in your IPAM pool. The pool depth quota is 10. For
+-- more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html Quotas in IPAM>
+-- in the /Amazon VPC IPAM User Guide/.
+ipamPool_poolDepth :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Int)
+ipamPool_poolDepth = Lens.lens (\IpamPool' {poolDepth} -> poolDepth) (\s@IpamPool' {} a -> s {poolDepth = a} :: IpamPool)
+
+-- | Determines if a pool is publicly advertisable. This option is not
+-- available for pools with AddressFamily set to @ipv4@.
+ipamPool_publiclyAdvertisable :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Bool)
+ipamPool_publiclyAdvertisable = Lens.lens (\IpamPool' {publiclyAdvertisable} -> publiclyAdvertisable) (\s@IpamPool' {} a -> s {publiclyAdvertisable = a} :: IpamPool)
+
+-- | The ID of the source IPAM pool. You can use this option to create an
+-- IPAM pool within an existing source pool.
+ipamPool_sourceIpamPoolId :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_sourceIpamPoolId = Lens.lens (\IpamPool' {sourceIpamPoolId} -> sourceIpamPoolId) (\s@IpamPool' {} a -> s {sourceIpamPoolId = a} :: IpamPool)
+
+-- | The state of the IPAM pool.
+ipamPool_state :: Lens.Lens' IpamPool (Prelude.Maybe IpamPoolState)
+ipamPool_state = Lens.lens (\IpamPool' {state} -> state) (\s@IpamPool' {} a -> s {state = a} :: IpamPool)
+
+-- | A message related to the failed creation of an IPAM pool.
+ipamPool_stateMessage :: Lens.Lens' IpamPool (Prelude.Maybe Prelude.Text)
+ipamPool_stateMessage = Lens.lens (\IpamPool' {stateMessage} -> stateMessage) (\s@IpamPool' {} a -> s {stateMessage = a} :: IpamPool)
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+ipamPool_tags :: Lens.Lens' IpamPool (Prelude.Maybe [Tag])
+ipamPool_tags = Lens.lens (\IpamPool' {tags} -> tags) (\s@IpamPool' {} a -> s {tags = a} :: IpamPool) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML IpamPool where
+  parseXML x =
+    IpamPool'
+      Prelude.<$> (x Data..@? "addressFamily")
+      Prelude.<*> (x Data..@? "allocationDefaultNetmaskLength")
+      Prelude.<*> (x Data..@? "allocationMaxNetmaskLength")
+      Prelude.<*> (x Data..@? "allocationMinNetmaskLength")
+      Prelude.<*> ( x
+                      Data..@? "allocationResourceTagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "autoImport")
+      Prelude.<*> (x Data..@? "awsService")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "ipamArn")
+      Prelude.<*> (x Data..@? "ipamPoolArn")
+      Prelude.<*> (x Data..@? "ipamPoolId")
+      Prelude.<*> (x Data..@? "ipamRegion")
+      Prelude.<*> (x Data..@? "ipamScopeArn")
+      Prelude.<*> (x Data..@? "ipamScopeType")
+      Prelude.<*> (x Data..@? "locale")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "poolDepth")
+      Prelude.<*> (x Data..@? "publiclyAdvertisable")
+      Prelude.<*> (x Data..@? "sourceIpamPoolId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable IpamPool where
+  hashWithSalt _salt IpamPool' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressFamily
+      `Prelude.hashWithSalt` allocationDefaultNetmaskLength
+      `Prelude.hashWithSalt` allocationMaxNetmaskLength
+      `Prelude.hashWithSalt` allocationMinNetmaskLength
+      `Prelude.hashWithSalt` allocationResourceTags
+      `Prelude.hashWithSalt` autoImport
+      `Prelude.hashWithSalt` awsService
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ipamArn
+      `Prelude.hashWithSalt` ipamPoolArn
+      `Prelude.hashWithSalt` ipamPoolId
+      `Prelude.hashWithSalt` ipamRegion
+      `Prelude.hashWithSalt` ipamScopeArn
+      `Prelude.hashWithSalt` ipamScopeType
+      `Prelude.hashWithSalt` locale
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` poolDepth
+      `Prelude.hashWithSalt` publiclyAdvertisable
+      `Prelude.hashWithSalt` sourceIpamPoolId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateMessage
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData IpamPool where
+  rnf IpamPool' {..} =
+    Prelude.rnf addressFamily
+      `Prelude.seq` Prelude.rnf allocationDefaultNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationMaxNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationMinNetmaskLength
+      `Prelude.seq` Prelude.rnf allocationResourceTags
+      `Prelude.seq` Prelude.rnf autoImport
+      `Prelude.seq` Prelude.rnf awsService
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ipamArn
+      `Prelude.seq` Prelude.rnf ipamPoolArn
+      `Prelude.seq` Prelude.rnf ipamPoolId
+      `Prelude.seq` Prelude.rnf ipamRegion
+      `Prelude.seq` Prelude.rnf ipamScopeArn
+      `Prelude.seq` Prelude.rnf ipamScopeType
+      `Prelude.seq` Prelude.rnf locale
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf poolDepth
+      `Prelude.seq` Prelude.rnf publiclyAdvertisable
+      `Prelude.seq` Prelude.rnf sourceIpamPoolId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateMessage
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/IpamPoolAllocation.hs b/gen/Amazonka/EC2/Types/IpamPoolAllocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolAllocation.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolAllocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolAllocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamPoolAllocationResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | In IPAM, an allocation is a CIDR assignment from an IPAM pool to another
+-- resource or IPAM pool.
+--
+-- /See:/ 'newIpamPoolAllocation' smart constructor.
+data IpamPoolAllocation = IpamPoolAllocation'
+  { -- | The CIDR for the allocation. A CIDR is a representation of an IP address
+    -- and its associated network mask (or netmask) and refers to a range of IP
+    -- addresses. An IPv4 CIDR example is @10.24.34.0\/23@. An IPv6 CIDR
+    -- example is @2001:DB8::\/32@.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | A description of the pool allocation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an allocation.
+    ipamPoolAllocationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the resource.
+    resourceOwner :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region of the resource.
+    resourceRegion :: Prelude.Maybe Prelude.Text,
+    -- | The type of the resource.
+    resourceType :: Prelude.Maybe IpamPoolAllocationResourceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamPoolAllocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'ipamPoolAllocation_cidr' - The CIDR for the allocation. A CIDR is a representation of an IP address
+-- and its associated network mask (or netmask) and refers to a range of IP
+-- addresses. An IPv4 CIDR example is @10.24.34.0\/23@. An IPv6 CIDR
+-- example is @2001:DB8::\/32@.
+--
+-- 'description', 'ipamPoolAllocation_description' - A description of the pool allocation.
+--
+-- 'ipamPoolAllocationId', 'ipamPoolAllocation_ipamPoolAllocationId' - The ID of an allocation.
+--
+-- 'resourceId', 'ipamPoolAllocation_resourceId' - The ID of the resource.
+--
+-- 'resourceOwner', 'ipamPoolAllocation_resourceOwner' - The owner of the resource.
+--
+-- 'resourceRegion', 'ipamPoolAllocation_resourceRegion' - The Amazon Web Services Region of the resource.
+--
+-- 'resourceType', 'ipamPoolAllocation_resourceType' - The type of the resource.
+newIpamPoolAllocation ::
+  IpamPoolAllocation
+newIpamPoolAllocation =
+  IpamPoolAllocation'
+    { cidr = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ipamPoolAllocationId = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceOwner = Prelude.Nothing,
+      resourceRegion = Prelude.Nothing,
+      resourceType = Prelude.Nothing
+    }
+
+-- | The CIDR for the allocation. A CIDR is a representation of an IP address
+-- and its associated network mask (or netmask) and refers to a range of IP
+-- addresses. An IPv4 CIDR example is @10.24.34.0\/23@. An IPv6 CIDR
+-- example is @2001:DB8::\/32@.
+ipamPoolAllocation_cidr :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe Prelude.Text)
+ipamPoolAllocation_cidr = Lens.lens (\IpamPoolAllocation' {cidr} -> cidr) (\s@IpamPoolAllocation' {} a -> s {cidr = a} :: IpamPoolAllocation)
+
+-- | A description of the pool allocation.
+ipamPoolAllocation_description :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe Prelude.Text)
+ipamPoolAllocation_description = Lens.lens (\IpamPoolAllocation' {description} -> description) (\s@IpamPoolAllocation' {} a -> s {description = a} :: IpamPoolAllocation)
+
+-- | The ID of an allocation.
+ipamPoolAllocation_ipamPoolAllocationId :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe Prelude.Text)
+ipamPoolAllocation_ipamPoolAllocationId = Lens.lens (\IpamPoolAllocation' {ipamPoolAllocationId} -> ipamPoolAllocationId) (\s@IpamPoolAllocation' {} a -> s {ipamPoolAllocationId = a} :: IpamPoolAllocation)
+
+-- | The ID of the resource.
+ipamPoolAllocation_resourceId :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe Prelude.Text)
+ipamPoolAllocation_resourceId = Lens.lens (\IpamPoolAllocation' {resourceId} -> resourceId) (\s@IpamPoolAllocation' {} a -> s {resourceId = a} :: IpamPoolAllocation)
+
+-- | The owner of the resource.
+ipamPoolAllocation_resourceOwner :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe Prelude.Text)
+ipamPoolAllocation_resourceOwner = Lens.lens (\IpamPoolAllocation' {resourceOwner} -> resourceOwner) (\s@IpamPoolAllocation' {} a -> s {resourceOwner = a} :: IpamPoolAllocation)
+
+-- | The Amazon Web Services Region of the resource.
+ipamPoolAllocation_resourceRegion :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe Prelude.Text)
+ipamPoolAllocation_resourceRegion = Lens.lens (\IpamPoolAllocation' {resourceRegion} -> resourceRegion) (\s@IpamPoolAllocation' {} a -> s {resourceRegion = a} :: IpamPoolAllocation)
+
+-- | The type of the resource.
+ipamPoolAllocation_resourceType :: Lens.Lens' IpamPoolAllocation (Prelude.Maybe IpamPoolAllocationResourceType)
+ipamPoolAllocation_resourceType = Lens.lens (\IpamPoolAllocation' {resourceType} -> resourceType) (\s@IpamPoolAllocation' {} a -> s {resourceType = a} :: IpamPoolAllocation)
+
+instance Data.FromXML IpamPoolAllocation where
+  parseXML x =
+    IpamPoolAllocation'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "ipamPoolAllocationId")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceOwner")
+      Prelude.<*> (x Data..@? "resourceRegion")
+      Prelude.<*> (x Data..@? "resourceType")
+
+instance Prelude.Hashable IpamPoolAllocation where
+  hashWithSalt _salt IpamPoolAllocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ipamPoolAllocationId
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceOwner
+      `Prelude.hashWithSalt` resourceRegion
+      `Prelude.hashWithSalt` resourceType
+
+instance Prelude.NFData IpamPoolAllocation where
+  rnf IpamPoolAllocation' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ipamPoolAllocationId
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwner
+      `Prelude.seq` Prelude.rnf resourceRegion
+      `Prelude.seq` Prelude.rnf resourceType
diff --git a/gen/Amazonka/EC2/Types/IpamPoolAllocationResourceType.hs b/gen/Amazonka/EC2/Types/IpamPoolAllocationResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolAllocationResourceType.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolAllocationResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolAllocationResourceType
+  ( IpamPoolAllocationResourceType
+      ( ..,
+        IpamPoolAllocationResourceType_Custom,
+        IpamPoolAllocationResourceType_Ec2_public_ipv4_pool,
+        IpamPoolAllocationResourceType_Ipam_pool,
+        IpamPoolAllocationResourceType_Vpc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamPoolAllocationResourceType = IpamPoolAllocationResourceType'
+  { fromIpamPoolAllocationResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamPoolAllocationResourceType_Custom :: IpamPoolAllocationResourceType
+pattern IpamPoolAllocationResourceType_Custom = IpamPoolAllocationResourceType' "custom"
+
+pattern IpamPoolAllocationResourceType_Ec2_public_ipv4_pool :: IpamPoolAllocationResourceType
+pattern IpamPoolAllocationResourceType_Ec2_public_ipv4_pool = IpamPoolAllocationResourceType' "ec2-public-ipv4-pool"
+
+pattern IpamPoolAllocationResourceType_Ipam_pool :: IpamPoolAllocationResourceType
+pattern IpamPoolAllocationResourceType_Ipam_pool = IpamPoolAllocationResourceType' "ipam-pool"
+
+pattern IpamPoolAllocationResourceType_Vpc :: IpamPoolAllocationResourceType
+pattern IpamPoolAllocationResourceType_Vpc = IpamPoolAllocationResourceType' "vpc"
+
+{-# COMPLETE
+  IpamPoolAllocationResourceType_Custom,
+  IpamPoolAllocationResourceType_Ec2_public_ipv4_pool,
+  IpamPoolAllocationResourceType_Ipam_pool,
+  IpamPoolAllocationResourceType_Vpc,
+  IpamPoolAllocationResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamPoolAwsService.hs b/gen/Amazonka/EC2/Types/IpamPoolAwsService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolAwsService.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolAwsService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolAwsService
+  ( IpamPoolAwsService
+      ( ..,
+        IpamPoolAwsService_Ec2
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamPoolAwsService = IpamPoolAwsService'
+  { fromIpamPoolAwsService ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamPoolAwsService_Ec2 :: IpamPoolAwsService
+pattern IpamPoolAwsService_Ec2 = IpamPoolAwsService' "ec2"
+
+{-# COMPLETE
+  IpamPoolAwsService_Ec2,
+  IpamPoolAwsService'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamPoolCidr.hs b/gen/Amazonka/EC2/Types/IpamPoolCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolCidr.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolCidr where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamPoolCidrFailureReason
+import Amazonka.EC2.Types.IpamPoolCidrState
+import qualified Amazonka.Prelude as Prelude
+
+-- | A CIDR provisioned to an IPAM pool.
+--
+-- /See:/ 'newIpamPoolCidr' smart constructor.
+data IpamPoolCidr = IpamPoolCidr'
+  { -- | The CIDR provisioned to the IPAM pool. A CIDR is a representation of an
+    -- IP address and its associated network mask (or netmask) and refers to a
+    -- range of IP addresses. An IPv4 CIDR example is @10.24.34.0\/23@. An IPv6
+    -- CIDR example is @2001:DB8::\/32@.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | Details related to why an IPAM pool CIDR failed to be provisioned.
+    failureReason :: Prelude.Maybe IpamPoolCidrFailureReason,
+    -- | The state of the CIDR.
+    state :: Prelude.Maybe IpamPoolCidrState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamPoolCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'ipamPoolCidr_cidr' - The CIDR provisioned to the IPAM pool. A CIDR is a representation of an
+-- IP address and its associated network mask (or netmask) and refers to a
+-- range of IP addresses. An IPv4 CIDR example is @10.24.34.0\/23@. An IPv6
+-- CIDR example is @2001:DB8::\/32@.
+--
+-- 'failureReason', 'ipamPoolCidr_failureReason' - Details related to why an IPAM pool CIDR failed to be provisioned.
+--
+-- 'state', 'ipamPoolCidr_state' - The state of the CIDR.
+newIpamPoolCidr ::
+  IpamPoolCidr
+newIpamPoolCidr =
+  IpamPoolCidr'
+    { cidr = Prelude.Nothing,
+      failureReason = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The CIDR provisioned to the IPAM pool. A CIDR is a representation of an
+-- IP address and its associated network mask (or netmask) and refers to a
+-- range of IP addresses. An IPv4 CIDR example is @10.24.34.0\/23@. An IPv6
+-- CIDR example is @2001:DB8::\/32@.
+ipamPoolCidr_cidr :: Lens.Lens' IpamPoolCidr (Prelude.Maybe Prelude.Text)
+ipamPoolCidr_cidr = Lens.lens (\IpamPoolCidr' {cidr} -> cidr) (\s@IpamPoolCidr' {} a -> s {cidr = a} :: IpamPoolCidr)
+
+-- | Details related to why an IPAM pool CIDR failed to be provisioned.
+ipamPoolCidr_failureReason :: Lens.Lens' IpamPoolCidr (Prelude.Maybe IpamPoolCidrFailureReason)
+ipamPoolCidr_failureReason = Lens.lens (\IpamPoolCidr' {failureReason} -> failureReason) (\s@IpamPoolCidr' {} a -> s {failureReason = a} :: IpamPoolCidr)
+
+-- | The state of the CIDR.
+ipamPoolCidr_state :: Lens.Lens' IpamPoolCidr (Prelude.Maybe IpamPoolCidrState)
+ipamPoolCidr_state = Lens.lens (\IpamPoolCidr' {state} -> state) (\s@IpamPoolCidr' {} a -> s {state = a} :: IpamPoolCidr)
+
+instance Data.FromXML IpamPoolCidr where
+  parseXML x =
+    IpamPoolCidr'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "failureReason")
+      Prelude.<*> (x Data..@? "state")
+
+instance Prelude.Hashable IpamPoolCidr where
+  hashWithSalt _salt IpamPoolCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` failureReason
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData IpamPoolCidr where
+  rnf IpamPoolCidr' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf failureReason
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/IpamPoolCidrFailureCode.hs b/gen/Amazonka/EC2/Types/IpamPoolCidrFailureCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolCidrFailureCode.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolCidrFailureCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolCidrFailureCode
+  ( IpamPoolCidrFailureCode
+      ( ..,
+        IpamPoolCidrFailureCode_Cidr_not_available
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamPoolCidrFailureCode = IpamPoolCidrFailureCode'
+  { fromIpamPoolCidrFailureCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamPoolCidrFailureCode_Cidr_not_available :: IpamPoolCidrFailureCode
+pattern IpamPoolCidrFailureCode_Cidr_not_available = IpamPoolCidrFailureCode' "cidr-not-available"
+
+{-# COMPLETE
+  IpamPoolCidrFailureCode_Cidr_not_available,
+  IpamPoolCidrFailureCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamPoolCidrFailureReason.hs b/gen/Amazonka/EC2/Types/IpamPoolCidrFailureReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolCidrFailureReason.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolCidrFailureReason
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolCidrFailureReason where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamPoolCidrFailureCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details related to why an IPAM pool CIDR failed to be provisioned.
+--
+-- /See:/ 'newIpamPoolCidrFailureReason' smart constructor.
+data IpamPoolCidrFailureReason = IpamPoolCidrFailureReason'
+  { -- | An error code related to why an IPAM pool CIDR failed to be provisioned.
+    code :: Prelude.Maybe IpamPoolCidrFailureCode,
+    -- | A message related to why an IPAM pool CIDR failed to be provisioned.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamPoolCidrFailureReason' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'ipamPoolCidrFailureReason_code' - An error code related to why an IPAM pool CIDR failed to be provisioned.
+--
+-- 'message', 'ipamPoolCidrFailureReason_message' - A message related to why an IPAM pool CIDR failed to be provisioned.
+newIpamPoolCidrFailureReason ::
+  IpamPoolCidrFailureReason
+newIpamPoolCidrFailureReason =
+  IpamPoolCidrFailureReason'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | An error code related to why an IPAM pool CIDR failed to be provisioned.
+ipamPoolCidrFailureReason_code :: Lens.Lens' IpamPoolCidrFailureReason (Prelude.Maybe IpamPoolCidrFailureCode)
+ipamPoolCidrFailureReason_code = Lens.lens (\IpamPoolCidrFailureReason' {code} -> code) (\s@IpamPoolCidrFailureReason' {} a -> s {code = a} :: IpamPoolCidrFailureReason)
+
+-- | A message related to why an IPAM pool CIDR failed to be provisioned.
+ipamPoolCidrFailureReason_message :: Lens.Lens' IpamPoolCidrFailureReason (Prelude.Maybe Prelude.Text)
+ipamPoolCidrFailureReason_message = Lens.lens (\IpamPoolCidrFailureReason' {message} -> message) (\s@IpamPoolCidrFailureReason' {} a -> s {message = a} :: IpamPoolCidrFailureReason)
+
+instance Data.FromXML IpamPoolCidrFailureReason where
+  parseXML x =
+    IpamPoolCidrFailureReason'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable IpamPoolCidrFailureReason where
+  hashWithSalt _salt IpamPoolCidrFailureReason' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData IpamPoolCidrFailureReason where
+  rnf IpamPoolCidrFailureReason' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/IpamPoolCidrState.hs b/gen/Amazonka/EC2/Types/IpamPoolCidrState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolCidrState.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolCidrState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolCidrState
+  ( IpamPoolCidrState
+      ( ..,
+        IpamPoolCidrState_Deprovisioned,
+        IpamPoolCidrState_Failed_deprovision,
+        IpamPoolCidrState_Failed_import,
+        IpamPoolCidrState_Failed_provision,
+        IpamPoolCidrState_Pending_deprovision,
+        IpamPoolCidrState_Pending_import,
+        IpamPoolCidrState_Pending_provision,
+        IpamPoolCidrState_Provisioned
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamPoolCidrState = IpamPoolCidrState'
+  { fromIpamPoolCidrState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamPoolCidrState_Deprovisioned :: IpamPoolCidrState
+pattern IpamPoolCidrState_Deprovisioned = IpamPoolCidrState' "deprovisioned"
+
+pattern IpamPoolCidrState_Failed_deprovision :: IpamPoolCidrState
+pattern IpamPoolCidrState_Failed_deprovision = IpamPoolCidrState' "failed-deprovision"
+
+pattern IpamPoolCidrState_Failed_import :: IpamPoolCidrState
+pattern IpamPoolCidrState_Failed_import = IpamPoolCidrState' "failed-import"
+
+pattern IpamPoolCidrState_Failed_provision :: IpamPoolCidrState
+pattern IpamPoolCidrState_Failed_provision = IpamPoolCidrState' "failed-provision"
+
+pattern IpamPoolCidrState_Pending_deprovision :: IpamPoolCidrState
+pattern IpamPoolCidrState_Pending_deprovision = IpamPoolCidrState' "pending-deprovision"
+
+pattern IpamPoolCidrState_Pending_import :: IpamPoolCidrState
+pattern IpamPoolCidrState_Pending_import = IpamPoolCidrState' "pending-import"
+
+pattern IpamPoolCidrState_Pending_provision :: IpamPoolCidrState
+pattern IpamPoolCidrState_Pending_provision = IpamPoolCidrState' "pending-provision"
+
+pattern IpamPoolCidrState_Provisioned :: IpamPoolCidrState
+pattern IpamPoolCidrState_Provisioned = IpamPoolCidrState' "provisioned"
+
+{-# COMPLETE
+  IpamPoolCidrState_Deprovisioned,
+  IpamPoolCidrState_Failed_deprovision,
+  IpamPoolCidrState_Failed_import,
+  IpamPoolCidrState_Failed_provision,
+  IpamPoolCidrState_Pending_deprovision,
+  IpamPoolCidrState_Pending_import,
+  IpamPoolCidrState_Pending_provision,
+  IpamPoolCidrState_Provisioned,
+  IpamPoolCidrState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamPoolState.hs b/gen/Amazonka/EC2/Types/IpamPoolState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamPoolState.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamPoolState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamPoolState
+  ( IpamPoolState
+      ( ..,
+        IpamPoolState_Create_complete,
+        IpamPoolState_Create_failed,
+        IpamPoolState_Create_in_progress,
+        IpamPoolState_Delete_complete,
+        IpamPoolState_Delete_failed,
+        IpamPoolState_Delete_in_progress,
+        IpamPoolState_Isolate_complete,
+        IpamPoolState_Isolate_in_progress,
+        IpamPoolState_Modify_complete,
+        IpamPoolState_Modify_failed,
+        IpamPoolState_Modify_in_progress,
+        IpamPoolState_Restore_in_progress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamPoolState = IpamPoolState'
+  { fromIpamPoolState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamPoolState_Create_complete :: IpamPoolState
+pattern IpamPoolState_Create_complete = IpamPoolState' "create-complete"
+
+pattern IpamPoolState_Create_failed :: IpamPoolState
+pattern IpamPoolState_Create_failed = IpamPoolState' "create-failed"
+
+pattern IpamPoolState_Create_in_progress :: IpamPoolState
+pattern IpamPoolState_Create_in_progress = IpamPoolState' "create-in-progress"
+
+pattern IpamPoolState_Delete_complete :: IpamPoolState
+pattern IpamPoolState_Delete_complete = IpamPoolState' "delete-complete"
+
+pattern IpamPoolState_Delete_failed :: IpamPoolState
+pattern IpamPoolState_Delete_failed = IpamPoolState' "delete-failed"
+
+pattern IpamPoolState_Delete_in_progress :: IpamPoolState
+pattern IpamPoolState_Delete_in_progress = IpamPoolState' "delete-in-progress"
+
+pattern IpamPoolState_Isolate_complete :: IpamPoolState
+pattern IpamPoolState_Isolate_complete = IpamPoolState' "isolate-complete"
+
+pattern IpamPoolState_Isolate_in_progress :: IpamPoolState
+pattern IpamPoolState_Isolate_in_progress = IpamPoolState' "isolate-in-progress"
+
+pattern IpamPoolState_Modify_complete :: IpamPoolState
+pattern IpamPoolState_Modify_complete = IpamPoolState' "modify-complete"
+
+pattern IpamPoolState_Modify_failed :: IpamPoolState
+pattern IpamPoolState_Modify_failed = IpamPoolState' "modify-failed"
+
+pattern IpamPoolState_Modify_in_progress :: IpamPoolState
+pattern IpamPoolState_Modify_in_progress = IpamPoolState' "modify-in-progress"
+
+pattern IpamPoolState_Restore_in_progress :: IpamPoolState
+pattern IpamPoolState_Restore_in_progress = IpamPoolState' "restore-in-progress"
+
+{-# COMPLETE
+  IpamPoolState_Create_complete,
+  IpamPoolState_Create_failed,
+  IpamPoolState_Create_in_progress,
+  IpamPoolState_Delete_complete,
+  IpamPoolState_Delete_failed,
+  IpamPoolState_Delete_in_progress,
+  IpamPoolState_Isolate_complete,
+  IpamPoolState_Isolate_in_progress,
+  IpamPoolState_Modify_complete,
+  IpamPoolState_Modify_failed,
+  IpamPoolState_Modify_in_progress,
+  IpamPoolState_Restore_in_progress,
+  IpamPoolState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamResourceCidr.hs b/gen/Amazonka/EC2/Types/IpamResourceCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamResourceCidr.hs
@@ -0,0 +1,322 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamResourceCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamResourceCidr where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamComplianceStatus
+import Amazonka.EC2.Types.IpamManagementState
+import Amazonka.EC2.Types.IpamOverlapStatus
+import Amazonka.EC2.Types.IpamResourceTag
+import Amazonka.EC2.Types.IpamResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The CIDR for an IPAM resource.
+--
+-- /See:/ 'newIpamResourceCidr' smart constructor.
+data IpamResourceCidr = IpamResourceCidr'
+  { -- | The compliance status of the IPAM resource. For more information on
+    -- compliance statuses, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+    -- in the /Amazon VPC IPAM User Guide/.
+    complianceStatus :: Prelude.Maybe IpamComplianceStatus,
+    -- | The percentage of IP address space in use. To convert the decimal to a
+    -- percentage, multiply the decimal by 100. Note the following:
+    --
+    -- -   For a resources that are VPCs, this is the percentage of IP address
+    --     space in the VPC that\'s taken up by subnet CIDRs.
+    --
+    -- -   For resources that are subnets, if the subnet has an IPv4 CIDR
+    --     provisioned to it, this is the percentage of IPv4 address space in
+    --     the subnet that\'s in use. If the subnet has an IPv6 CIDR
+    --     provisioned to it, the percentage of IPv6 address space in use is
+    --     not represented. The percentage of IPv6 address space in use cannot
+    --     currently be calculated.
+    --
+    -- -   For resources that are public IPv4 pools, this is the percentage of
+    --     IP address space in the pool that\'s been allocated to Elastic IP
+    --     addresses (EIPs).
+    ipUsage :: Prelude.Maybe Prelude.Double,
+    -- | The IPAM ID for an IPAM resource.
+    ipamId :: Prelude.Maybe Prelude.Text,
+    -- | The pool ID for an IPAM resource.
+    ipamPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The scope ID for an IPAM resource.
+    ipamScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The management state of the resource. For more information about
+    -- management states, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+    -- in the /Amazon VPC IPAM User Guide/.
+    managementState :: Prelude.Maybe IpamManagementState,
+    -- | The overlap status of an IPAM resource. The overlap status tells you if
+    -- the CIDR for a resource overlaps with another CIDR in the scope. For
+    -- more information on overlap statuses, see
+    -- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+    -- in the /Amazon VPC IPAM User Guide/.
+    overlapStatus :: Prelude.Maybe IpamOverlapStatus,
+    -- | The CIDR for an IPAM resource.
+    resourceCidr :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an IPAM resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of an IPAM resource.
+    resourceName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account number of the owner of an IPAM resource.
+    resourceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region for an IPAM resource.
+    resourceRegion :: Prelude.Maybe Prelude.Text,
+    -- | The tags for an IPAM resource.
+    resourceTags :: Prelude.Maybe [IpamResourceTag],
+    -- | The type of IPAM resource.
+    resourceType :: Prelude.Maybe IpamResourceType,
+    -- | The ID of a VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamResourceCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'complianceStatus', 'ipamResourceCidr_complianceStatus' - The compliance status of the IPAM resource. For more information on
+-- compliance statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'ipUsage', 'ipamResourceCidr_ipUsage' - The percentage of IP address space in use. To convert the decimal to a
+-- percentage, multiply the decimal by 100. Note the following:
+--
+-- -   For a resources that are VPCs, this is the percentage of IP address
+--     space in the VPC that\'s taken up by subnet CIDRs.
+--
+-- -   For resources that are subnets, if the subnet has an IPv4 CIDR
+--     provisioned to it, this is the percentage of IPv4 address space in
+--     the subnet that\'s in use. If the subnet has an IPv6 CIDR
+--     provisioned to it, the percentage of IPv6 address space in use is
+--     not represented. The percentage of IPv6 address space in use cannot
+--     currently be calculated.
+--
+-- -   For resources that are public IPv4 pools, this is the percentage of
+--     IP address space in the pool that\'s been allocated to Elastic IP
+--     addresses (EIPs).
+--
+-- 'ipamId', 'ipamResourceCidr_ipamId' - The IPAM ID for an IPAM resource.
+--
+-- 'ipamPoolId', 'ipamResourceCidr_ipamPoolId' - The pool ID for an IPAM resource.
+--
+-- 'ipamScopeId', 'ipamResourceCidr_ipamScopeId' - The scope ID for an IPAM resource.
+--
+-- 'managementState', 'ipamResourceCidr_managementState' - The management state of the resource. For more information about
+-- management states, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'overlapStatus', 'ipamResourceCidr_overlapStatus' - The overlap status of an IPAM resource. The overlap status tells you if
+-- the CIDR for a resource overlaps with another CIDR in the scope. For
+-- more information on overlap statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- 'resourceCidr', 'ipamResourceCidr_resourceCidr' - The CIDR for an IPAM resource.
+--
+-- 'resourceId', 'ipamResourceCidr_resourceId' - The ID of an IPAM resource.
+--
+-- 'resourceName', 'ipamResourceCidr_resourceName' - The name of an IPAM resource.
+--
+-- 'resourceOwnerId', 'ipamResourceCidr_resourceOwnerId' - The Amazon Web Services account number of the owner of an IPAM resource.
+--
+-- 'resourceRegion', 'ipamResourceCidr_resourceRegion' - The Amazon Web Services Region for an IPAM resource.
+--
+-- 'resourceTags', 'ipamResourceCidr_resourceTags' - The tags for an IPAM resource.
+--
+-- 'resourceType', 'ipamResourceCidr_resourceType' - The type of IPAM resource.
+--
+-- 'vpcId', 'ipamResourceCidr_vpcId' - The ID of a VPC.
+newIpamResourceCidr ::
+  IpamResourceCidr
+newIpamResourceCidr =
+  IpamResourceCidr'
+    { complianceStatus =
+        Prelude.Nothing,
+      ipUsage = Prelude.Nothing,
+      ipamId = Prelude.Nothing,
+      ipamPoolId = Prelude.Nothing,
+      ipamScopeId = Prelude.Nothing,
+      managementState = Prelude.Nothing,
+      overlapStatus = Prelude.Nothing,
+      resourceCidr = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceName = Prelude.Nothing,
+      resourceOwnerId = Prelude.Nothing,
+      resourceRegion = Prelude.Nothing,
+      resourceTags = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The compliance status of the IPAM resource. For more information on
+-- compliance statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+ipamResourceCidr_complianceStatus :: Lens.Lens' IpamResourceCidr (Prelude.Maybe IpamComplianceStatus)
+ipamResourceCidr_complianceStatus = Lens.lens (\IpamResourceCidr' {complianceStatus} -> complianceStatus) (\s@IpamResourceCidr' {} a -> s {complianceStatus = a} :: IpamResourceCidr)
+
+-- | The percentage of IP address space in use. To convert the decimal to a
+-- percentage, multiply the decimal by 100. Note the following:
+--
+-- -   For a resources that are VPCs, this is the percentage of IP address
+--     space in the VPC that\'s taken up by subnet CIDRs.
+--
+-- -   For resources that are subnets, if the subnet has an IPv4 CIDR
+--     provisioned to it, this is the percentage of IPv4 address space in
+--     the subnet that\'s in use. If the subnet has an IPv6 CIDR
+--     provisioned to it, the percentage of IPv6 address space in use is
+--     not represented. The percentage of IPv6 address space in use cannot
+--     currently be calculated.
+--
+-- -   For resources that are public IPv4 pools, this is the percentage of
+--     IP address space in the pool that\'s been allocated to Elastic IP
+--     addresses (EIPs).
+ipamResourceCidr_ipUsage :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Double)
+ipamResourceCidr_ipUsage = Lens.lens (\IpamResourceCidr' {ipUsage} -> ipUsage) (\s@IpamResourceCidr' {} a -> s {ipUsage = a} :: IpamResourceCidr)
+
+-- | The IPAM ID for an IPAM resource.
+ipamResourceCidr_ipamId :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_ipamId = Lens.lens (\IpamResourceCidr' {ipamId} -> ipamId) (\s@IpamResourceCidr' {} a -> s {ipamId = a} :: IpamResourceCidr)
+
+-- | The pool ID for an IPAM resource.
+ipamResourceCidr_ipamPoolId :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_ipamPoolId = Lens.lens (\IpamResourceCidr' {ipamPoolId} -> ipamPoolId) (\s@IpamResourceCidr' {} a -> s {ipamPoolId = a} :: IpamResourceCidr)
+
+-- | The scope ID for an IPAM resource.
+ipamResourceCidr_ipamScopeId :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_ipamScopeId = Lens.lens (\IpamResourceCidr' {ipamScopeId} -> ipamScopeId) (\s@IpamResourceCidr' {} a -> s {ipamScopeId = a} :: IpamResourceCidr)
+
+-- | The management state of the resource. For more information about
+-- management states, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+ipamResourceCidr_managementState :: Lens.Lens' IpamResourceCidr (Prelude.Maybe IpamManagementState)
+ipamResourceCidr_managementState = Lens.lens (\IpamResourceCidr' {managementState} -> managementState) (\s@IpamResourceCidr' {} a -> s {managementState = a} :: IpamResourceCidr)
+
+-- | The overlap status of an IPAM resource. The overlap status tells you if
+-- the CIDR for a resource overlaps with another CIDR in the scope. For
+-- more information on overlap statuses, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html Monitor CIDR usage by resource>
+-- in the /Amazon VPC IPAM User Guide/.
+ipamResourceCidr_overlapStatus :: Lens.Lens' IpamResourceCidr (Prelude.Maybe IpamOverlapStatus)
+ipamResourceCidr_overlapStatus = Lens.lens (\IpamResourceCidr' {overlapStatus} -> overlapStatus) (\s@IpamResourceCidr' {} a -> s {overlapStatus = a} :: IpamResourceCidr)
+
+-- | The CIDR for an IPAM resource.
+ipamResourceCidr_resourceCidr :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_resourceCidr = Lens.lens (\IpamResourceCidr' {resourceCidr} -> resourceCidr) (\s@IpamResourceCidr' {} a -> s {resourceCidr = a} :: IpamResourceCidr)
+
+-- | The ID of an IPAM resource.
+ipamResourceCidr_resourceId :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_resourceId = Lens.lens (\IpamResourceCidr' {resourceId} -> resourceId) (\s@IpamResourceCidr' {} a -> s {resourceId = a} :: IpamResourceCidr)
+
+-- | The name of an IPAM resource.
+ipamResourceCidr_resourceName :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_resourceName = Lens.lens (\IpamResourceCidr' {resourceName} -> resourceName) (\s@IpamResourceCidr' {} a -> s {resourceName = a} :: IpamResourceCidr)
+
+-- | The Amazon Web Services account number of the owner of an IPAM resource.
+ipamResourceCidr_resourceOwnerId :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_resourceOwnerId = Lens.lens (\IpamResourceCidr' {resourceOwnerId} -> resourceOwnerId) (\s@IpamResourceCidr' {} a -> s {resourceOwnerId = a} :: IpamResourceCidr)
+
+-- | The Amazon Web Services Region for an IPAM resource.
+ipamResourceCidr_resourceRegion :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_resourceRegion = Lens.lens (\IpamResourceCidr' {resourceRegion} -> resourceRegion) (\s@IpamResourceCidr' {} a -> s {resourceRegion = a} :: IpamResourceCidr)
+
+-- | The tags for an IPAM resource.
+ipamResourceCidr_resourceTags :: Lens.Lens' IpamResourceCidr (Prelude.Maybe [IpamResourceTag])
+ipamResourceCidr_resourceTags = Lens.lens (\IpamResourceCidr' {resourceTags} -> resourceTags) (\s@IpamResourceCidr' {} a -> s {resourceTags = a} :: IpamResourceCidr) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of IPAM resource.
+ipamResourceCidr_resourceType :: Lens.Lens' IpamResourceCidr (Prelude.Maybe IpamResourceType)
+ipamResourceCidr_resourceType = Lens.lens (\IpamResourceCidr' {resourceType} -> resourceType) (\s@IpamResourceCidr' {} a -> s {resourceType = a} :: IpamResourceCidr)
+
+-- | The ID of a VPC.
+ipamResourceCidr_vpcId :: Lens.Lens' IpamResourceCidr (Prelude.Maybe Prelude.Text)
+ipamResourceCidr_vpcId = Lens.lens (\IpamResourceCidr' {vpcId} -> vpcId) (\s@IpamResourceCidr' {} a -> s {vpcId = a} :: IpamResourceCidr)
+
+instance Data.FromXML IpamResourceCidr where
+  parseXML x =
+    IpamResourceCidr'
+      Prelude.<$> (x Data..@? "complianceStatus")
+      Prelude.<*> (x Data..@? "ipUsage")
+      Prelude.<*> (x Data..@? "ipamId")
+      Prelude.<*> (x Data..@? "ipamPoolId")
+      Prelude.<*> (x Data..@? "ipamScopeId")
+      Prelude.<*> (x Data..@? "managementState")
+      Prelude.<*> (x Data..@? "overlapStatus")
+      Prelude.<*> (x Data..@? "resourceCidr")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceName")
+      Prelude.<*> (x Data..@? "resourceOwnerId")
+      Prelude.<*> (x Data..@? "resourceRegion")
+      Prelude.<*> ( x
+                      Data..@? "resourceTagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable IpamResourceCidr where
+  hashWithSalt _salt IpamResourceCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` complianceStatus
+      `Prelude.hashWithSalt` ipUsage
+      `Prelude.hashWithSalt` ipamId
+      `Prelude.hashWithSalt` ipamPoolId
+      `Prelude.hashWithSalt` ipamScopeId
+      `Prelude.hashWithSalt` managementState
+      `Prelude.hashWithSalt` overlapStatus
+      `Prelude.hashWithSalt` resourceCidr
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceName
+      `Prelude.hashWithSalt` resourceOwnerId
+      `Prelude.hashWithSalt` resourceRegion
+      `Prelude.hashWithSalt` resourceTags
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData IpamResourceCidr where
+  rnf IpamResourceCidr' {..} =
+    Prelude.rnf complianceStatus
+      `Prelude.seq` Prelude.rnf ipUsage
+      `Prelude.seq` Prelude.rnf ipamId
+      `Prelude.seq` Prelude.rnf ipamPoolId
+      `Prelude.seq` Prelude.rnf ipamScopeId
+      `Prelude.seq` Prelude.rnf managementState
+      `Prelude.seq` Prelude.rnf overlapStatus
+      `Prelude.seq` Prelude.rnf resourceCidr
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceName
+      `Prelude.seq` Prelude.rnf resourceOwnerId
+      `Prelude.seq` Prelude.rnf resourceRegion
+      `Prelude.seq` Prelude.rnf resourceTags
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/IpamResourceTag.hs b/gen/Amazonka/EC2/Types/IpamResourceTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamResourceTag.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamResourceTag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamResourceTag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+--
+-- /See:/ 'newIpamResourceTag' smart constructor.
+data IpamResourceTag = IpamResourceTag'
+  { -- | 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.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The value of the tag.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamResourceTag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'ipamResourceTag_key' - 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.
+--
+-- 'value', 'ipamResourceTag_value' - The value of the tag.
+newIpamResourceTag ::
+  IpamResourceTag
+newIpamResourceTag =
+  IpamResourceTag'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | 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.
+ipamResourceTag_key :: Lens.Lens' IpamResourceTag (Prelude.Maybe Prelude.Text)
+ipamResourceTag_key = Lens.lens (\IpamResourceTag' {key} -> key) (\s@IpamResourceTag' {} a -> s {key = a} :: IpamResourceTag)
+
+-- | The value of the tag.
+ipamResourceTag_value :: Lens.Lens' IpamResourceTag (Prelude.Maybe Prelude.Text)
+ipamResourceTag_value = Lens.lens (\IpamResourceTag' {value} -> value) (\s@IpamResourceTag' {} a -> s {value = a} :: IpamResourceTag)
+
+instance Data.FromXML IpamResourceTag where
+  parseXML x =
+    IpamResourceTag'
+      Prelude.<$> (x Data..@? "key")
+      Prelude.<*> (x Data..@? "value")
+
+instance Prelude.Hashable IpamResourceTag where
+  hashWithSalt _salt IpamResourceTag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData IpamResourceTag where
+  rnf IpamResourceTag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/IpamResourceType.hs b/gen/Amazonka/EC2/Types/IpamResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamResourceType.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamResourceType
+  ( IpamResourceType
+      ( ..,
+        IpamResourceType_Eip,
+        IpamResourceType_Ipv6_pool,
+        IpamResourceType_Public_ipv4_pool,
+        IpamResourceType_Subnet,
+        IpamResourceType_Vpc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamResourceType = IpamResourceType'
+  { fromIpamResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamResourceType_Eip :: IpamResourceType
+pattern IpamResourceType_Eip = IpamResourceType' "eip"
+
+pattern IpamResourceType_Ipv6_pool :: IpamResourceType
+pattern IpamResourceType_Ipv6_pool = IpamResourceType' "ipv6-pool"
+
+pattern IpamResourceType_Public_ipv4_pool :: IpamResourceType
+pattern IpamResourceType_Public_ipv4_pool = IpamResourceType' "public-ipv4-pool"
+
+pattern IpamResourceType_Subnet :: IpamResourceType
+pattern IpamResourceType_Subnet = IpamResourceType' "subnet"
+
+pattern IpamResourceType_Vpc :: IpamResourceType
+pattern IpamResourceType_Vpc = IpamResourceType' "vpc"
+
+{-# COMPLETE
+  IpamResourceType_Eip,
+  IpamResourceType_Ipv6_pool,
+  IpamResourceType_Public_ipv4_pool,
+  IpamResourceType_Subnet,
+  IpamResourceType_Vpc,
+  IpamResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamScope.hs b/gen/Amazonka/EC2/Types/IpamScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamScope.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamScope where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpamScopeState
+import Amazonka.EC2.Types.IpamScopeType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | In IPAM, a scope is the highest-level container within IPAM. An IPAM
+-- contains two default scopes. Each scope represents the IP space for a
+-- single network. The private scope is intended for all private IP address
+-- space. The public scope is intended for all public IP address space.
+-- Scopes enable you to reuse IP addresses across multiple unconnected
+-- networks without causing IP address overlap or conflict.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/how-it-works-ipam.html How IPAM works>
+-- in the /Amazon VPC IPAM User Guide/.
+--
+-- /See:/ 'newIpamScope' smart constructor.
+data IpamScope = IpamScope'
+  { -- | The description of the scope.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the IPAM.
+    ipamArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services Region of the IPAM scope.
+    ipamRegion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the scope.
+    ipamScopeArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the scope.
+    ipamScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the scope.
+    ipamScopeType :: Prelude.Maybe IpamScopeType,
+    -- | Defines if the scope is the default scope or not.
+    isDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services account ID of the owner of the scope.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The number of pools in the scope.
+    poolCount :: Prelude.Maybe Prelude.Int,
+    -- | The state of the IPAM scope.
+    state :: Prelude.Maybe IpamScopeState,
+    -- | 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 @Owner@ and
+    -- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+    -- for the filter value.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'IpamScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'ipamScope_description' - The description of the scope.
+--
+-- 'ipamArn', 'ipamScope_ipamArn' - The ARN of the IPAM.
+--
+-- 'ipamRegion', 'ipamScope_ipamRegion' - The Amazon Web Services Region of the IPAM scope.
+--
+-- 'ipamScopeArn', 'ipamScope_ipamScopeArn' - The ARN of the scope.
+--
+-- 'ipamScopeId', 'ipamScope_ipamScopeId' - The ID of the scope.
+--
+-- 'ipamScopeType', 'ipamScope_ipamScopeType' - The type of the scope.
+--
+-- 'isDefault', 'ipamScope_isDefault' - Defines if the scope is the default scope or not.
+--
+-- 'ownerId', 'ipamScope_ownerId' - The Amazon Web Services account ID of the owner of the scope.
+--
+-- 'poolCount', 'ipamScope_poolCount' - The number of pools in the scope.
+--
+-- 'state', 'ipamScope_state' - The state of the IPAM scope.
+--
+-- 'tags', 'ipamScope_tags' - 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+newIpamScope ::
+  IpamScope
+newIpamScope =
+  IpamScope'
+    { description = Prelude.Nothing,
+      ipamArn = Prelude.Nothing,
+      ipamRegion = Prelude.Nothing,
+      ipamScopeArn = Prelude.Nothing,
+      ipamScopeId = Prelude.Nothing,
+      ipamScopeType = Prelude.Nothing,
+      isDefault = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      poolCount = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The description of the scope.
+ipamScope_description :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Text)
+ipamScope_description = Lens.lens (\IpamScope' {description} -> description) (\s@IpamScope' {} a -> s {description = a} :: IpamScope)
+
+-- | The ARN of the IPAM.
+ipamScope_ipamArn :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Text)
+ipamScope_ipamArn = Lens.lens (\IpamScope' {ipamArn} -> ipamArn) (\s@IpamScope' {} a -> s {ipamArn = a} :: IpamScope)
+
+-- | The Amazon Web Services Region of the IPAM scope.
+ipamScope_ipamRegion :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Text)
+ipamScope_ipamRegion = Lens.lens (\IpamScope' {ipamRegion} -> ipamRegion) (\s@IpamScope' {} a -> s {ipamRegion = a} :: IpamScope)
+
+-- | The ARN of the scope.
+ipamScope_ipamScopeArn :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Text)
+ipamScope_ipamScopeArn = Lens.lens (\IpamScope' {ipamScopeArn} -> ipamScopeArn) (\s@IpamScope' {} a -> s {ipamScopeArn = a} :: IpamScope)
+
+-- | The ID of the scope.
+ipamScope_ipamScopeId :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Text)
+ipamScope_ipamScopeId = Lens.lens (\IpamScope' {ipamScopeId} -> ipamScopeId) (\s@IpamScope' {} a -> s {ipamScopeId = a} :: IpamScope)
+
+-- | The type of the scope.
+ipamScope_ipamScopeType :: Lens.Lens' IpamScope (Prelude.Maybe IpamScopeType)
+ipamScope_ipamScopeType = Lens.lens (\IpamScope' {ipamScopeType} -> ipamScopeType) (\s@IpamScope' {} a -> s {ipamScopeType = a} :: IpamScope)
+
+-- | Defines if the scope is the default scope or not.
+ipamScope_isDefault :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Bool)
+ipamScope_isDefault = Lens.lens (\IpamScope' {isDefault} -> isDefault) (\s@IpamScope' {} a -> s {isDefault = a} :: IpamScope)
+
+-- | The Amazon Web Services account ID of the owner of the scope.
+ipamScope_ownerId :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Text)
+ipamScope_ownerId = Lens.lens (\IpamScope' {ownerId} -> ownerId) (\s@IpamScope' {} a -> s {ownerId = a} :: IpamScope)
+
+-- | The number of pools in the scope.
+ipamScope_poolCount :: Lens.Lens' IpamScope (Prelude.Maybe Prelude.Int)
+ipamScope_poolCount = Lens.lens (\IpamScope' {poolCount} -> poolCount) (\s@IpamScope' {} a -> s {poolCount = a} :: IpamScope)
+
+-- | The state of the IPAM scope.
+ipamScope_state :: Lens.Lens' IpamScope (Prelude.Maybe IpamScopeState)
+ipamScope_state = Lens.lens (\IpamScope' {state} -> state) (\s@IpamScope' {} a -> s {state = a} :: IpamScope)
+
+-- | 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 @Owner@ and
+-- the value @TeamA@, specify @tag:Owner@ for the filter name and @TeamA@
+-- for the filter value.
+ipamScope_tags :: Lens.Lens' IpamScope (Prelude.Maybe [Tag])
+ipamScope_tags = Lens.lens (\IpamScope' {tags} -> tags) (\s@IpamScope' {} a -> s {tags = a} :: IpamScope) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML IpamScope where
+  parseXML x =
+    IpamScope'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "ipamArn")
+      Prelude.<*> (x Data..@? "ipamRegion")
+      Prelude.<*> (x Data..@? "ipamScopeArn")
+      Prelude.<*> (x Data..@? "ipamScopeId")
+      Prelude.<*> (x Data..@? "ipamScopeType")
+      Prelude.<*> (x Data..@? "isDefault")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "poolCount")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable IpamScope where
+  hashWithSalt _salt IpamScope' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ipamArn
+      `Prelude.hashWithSalt` ipamRegion
+      `Prelude.hashWithSalt` ipamScopeArn
+      `Prelude.hashWithSalt` ipamScopeId
+      `Prelude.hashWithSalt` ipamScopeType
+      `Prelude.hashWithSalt` isDefault
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` poolCount
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData IpamScope where
+  rnf IpamScope' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ipamArn
+      `Prelude.seq` Prelude.rnf ipamRegion
+      `Prelude.seq` Prelude.rnf ipamScopeArn
+      `Prelude.seq` Prelude.rnf ipamScopeId
+      `Prelude.seq` Prelude.rnf ipamScopeType
+      `Prelude.seq` Prelude.rnf isDefault
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf poolCount
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/IpamScopeState.hs b/gen/Amazonka/EC2/Types/IpamScopeState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamScopeState.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamScopeState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamScopeState
+  ( IpamScopeState
+      ( ..,
+        IpamScopeState_Create_complete,
+        IpamScopeState_Create_failed,
+        IpamScopeState_Create_in_progress,
+        IpamScopeState_Delete_complete,
+        IpamScopeState_Delete_failed,
+        IpamScopeState_Delete_in_progress,
+        IpamScopeState_Isolate_complete,
+        IpamScopeState_Isolate_in_progress,
+        IpamScopeState_Modify_complete,
+        IpamScopeState_Modify_failed,
+        IpamScopeState_Modify_in_progress,
+        IpamScopeState_Restore_in_progress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamScopeState = IpamScopeState'
+  { fromIpamScopeState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamScopeState_Create_complete :: IpamScopeState
+pattern IpamScopeState_Create_complete = IpamScopeState' "create-complete"
+
+pattern IpamScopeState_Create_failed :: IpamScopeState
+pattern IpamScopeState_Create_failed = IpamScopeState' "create-failed"
+
+pattern IpamScopeState_Create_in_progress :: IpamScopeState
+pattern IpamScopeState_Create_in_progress = IpamScopeState' "create-in-progress"
+
+pattern IpamScopeState_Delete_complete :: IpamScopeState
+pattern IpamScopeState_Delete_complete = IpamScopeState' "delete-complete"
+
+pattern IpamScopeState_Delete_failed :: IpamScopeState
+pattern IpamScopeState_Delete_failed = IpamScopeState' "delete-failed"
+
+pattern IpamScopeState_Delete_in_progress :: IpamScopeState
+pattern IpamScopeState_Delete_in_progress = IpamScopeState' "delete-in-progress"
+
+pattern IpamScopeState_Isolate_complete :: IpamScopeState
+pattern IpamScopeState_Isolate_complete = IpamScopeState' "isolate-complete"
+
+pattern IpamScopeState_Isolate_in_progress :: IpamScopeState
+pattern IpamScopeState_Isolate_in_progress = IpamScopeState' "isolate-in-progress"
+
+pattern IpamScopeState_Modify_complete :: IpamScopeState
+pattern IpamScopeState_Modify_complete = IpamScopeState' "modify-complete"
+
+pattern IpamScopeState_Modify_failed :: IpamScopeState
+pattern IpamScopeState_Modify_failed = IpamScopeState' "modify-failed"
+
+pattern IpamScopeState_Modify_in_progress :: IpamScopeState
+pattern IpamScopeState_Modify_in_progress = IpamScopeState' "modify-in-progress"
+
+pattern IpamScopeState_Restore_in_progress :: IpamScopeState
+pattern IpamScopeState_Restore_in_progress = IpamScopeState' "restore-in-progress"
+
+{-# COMPLETE
+  IpamScopeState_Create_complete,
+  IpamScopeState_Create_failed,
+  IpamScopeState_Create_in_progress,
+  IpamScopeState_Delete_complete,
+  IpamScopeState_Delete_failed,
+  IpamScopeState_Delete_in_progress,
+  IpamScopeState_Isolate_complete,
+  IpamScopeState_Isolate_in_progress,
+  IpamScopeState_Modify_complete,
+  IpamScopeState_Modify_failed,
+  IpamScopeState_Modify_in_progress,
+  IpamScopeState_Restore_in_progress,
+  IpamScopeState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamScopeType.hs b/gen/Amazonka/EC2/Types/IpamScopeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamScopeType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamScopeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamScopeType
+  ( IpamScopeType
+      ( ..,
+        IpamScopeType_Private,
+        IpamScopeType_Public
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamScopeType = IpamScopeType'
+  { fromIpamScopeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamScopeType_Private :: IpamScopeType
+pattern IpamScopeType_Private = IpamScopeType' "private"
+
+pattern IpamScopeType_Public :: IpamScopeType
+pattern IpamScopeType_Public = IpamScopeType' "public"
+
+{-# COMPLETE
+  IpamScopeType_Private,
+  IpamScopeType_Public,
+  IpamScopeType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/IpamState.hs b/gen/Amazonka/EC2/Types/IpamState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/IpamState.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.IpamState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.IpamState
+  ( IpamState
+      ( ..,
+        IpamState_Create_complete,
+        IpamState_Create_failed,
+        IpamState_Create_in_progress,
+        IpamState_Delete_complete,
+        IpamState_Delete_failed,
+        IpamState_Delete_in_progress,
+        IpamState_Isolate_complete,
+        IpamState_Isolate_in_progress,
+        IpamState_Modify_complete,
+        IpamState_Modify_failed,
+        IpamState_Modify_in_progress,
+        IpamState_Restore_in_progress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype IpamState = IpamState'
+  { fromIpamState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern IpamState_Create_complete :: IpamState
+pattern IpamState_Create_complete = IpamState' "create-complete"
+
+pattern IpamState_Create_failed :: IpamState
+pattern IpamState_Create_failed = IpamState' "create-failed"
+
+pattern IpamState_Create_in_progress :: IpamState
+pattern IpamState_Create_in_progress = IpamState' "create-in-progress"
+
+pattern IpamState_Delete_complete :: IpamState
+pattern IpamState_Delete_complete = IpamState' "delete-complete"
+
+pattern IpamState_Delete_failed :: IpamState
+pattern IpamState_Delete_failed = IpamState' "delete-failed"
+
+pattern IpamState_Delete_in_progress :: IpamState
+pattern IpamState_Delete_in_progress = IpamState' "delete-in-progress"
+
+pattern IpamState_Isolate_complete :: IpamState
+pattern IpamState_Isolate_complete = IpamState' "isolate-complete"
+
+pattern IpamState_Isolate_in_progress :: IpamState
+pattern IpamState_Isolate_in_progress = IpamState' "isolate-in-progress"
+
+pattern IpamState_Modify_complete :: IpamState
+pattern IpamState_Modify_complete = IpamState' "modify-complete"
+
+pattern IpamState_Modify_failed :: IpamState
+pattern IpamState_Modify_failed = IpamState' "modify-failed"
+
+pattern IpamState_Modify_in_progress :: IpamState
+pattern IpamState_Modify_in_progress = IpamState' "modify-in-progress"
+
+pattern IpamState_Restore_in_progress :: IpamState
+pattern IpamState_Restore_in_progress = IpamState' "restore-in-progress"
+
+{-# COMPLETE
+  IpamState_Create_complete,
+  IpamState_Create_failed,
+  IpamState_Create_in_progress,
+  IpamState_Delete_complete,
+  IpamState_Delete_failed,
+  IpamState_Delete_in_progress,
+  IpamState_Isolate_complete,
+  IpamState_Isolate_in_progress,
+  IpamState_Modify_complete,
+  IpamState_Modify_failed,
+  IpamState_Modify_in_progress,
+  IpamState_Restore_in_progress,
+  IpamState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Ipv4PrefixSpecification.hs b/gen/Amazonka/EC2/Types/Ipv4PrefixSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv4PrefixSpecification.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv4PrefixSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv4PrefixSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv4 prefix.
+--
+-- /See:/ 'newIpv4PrefixSpecification' smart constructor.
+data Ipv4PrefixSpecification = Ipv4PrefixSpecification'
+  { -- | The IPv4 prefix. For information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    ipv4Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv4PrefixSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv4Prefix', 'ipv4PrefixSpecification_ipv4Prefix' - The IPv4 prefix. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+newIpv4PrefixSpecification ::
+  Ipv4PrefixSpecification
+newIpv4PrefixSpecification =
+  Ipv4PrefixSpecification'
+    { ipv4Prefix =
+        Prelude.Nothing
+    }
+
+-- | The IPv4 prefix. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+ipv4PrefixSpecification_ipv4Prefix :: Lens.Lens' Ipv4PrefixSpecification (Prelude.Maybe Prelude.Text)
+ipv4PrefixSpecification_ipv4Prefix = Lens.lens (\Ipv4PrefixSpecification' {ipv4Prefix} -> ipv4Prefix) (\s@Ipv4PrefixSpecification' {} a -> s {ipv4Prefix = a} :: Ipv4PrefixSpecification)
+
+instance Data.FromXML Ipv4PrefixSpecification where
+  parseXML x =
+    Ipv4PrefixSpecification'
+      Prelude.<$> (x Data..@? "ipv4Prefix")
+
+instance Prelude.Hashable Ipv4PrefixSpecification where
+  hashWithSalt _salt Ipv4PrefixSpecification' {..} =
+    _salt `Prelude.hashWithSalt` ipv4Prefix
+
+instance Prelude.NFData Ipv4PrefixSpecification where
+  rnf Ipv4PrefixSpecification' {..} =
+    Prelude.rnf ipv4Prefix
diff --git a/gen/Amazonka/EC2/Types/Ipv4PrefixSpecificationRequest.hs b/gen/Amazonka/EC2/Types/Ipv4PrefixSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv4PrefixSpecificationRequest.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the IPv4 prefix option for a network interface.
+--
+-- /See:/ 'newIpv4PrefixSpecificationRequest' smart constructor.
+data Ipv4PrefixSpecificationRequest = Ipv4PrefixSpecificationRequest'
+  { -- | The IPv4 prefix. For information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    ipv4Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv4PrefixSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv4Prefix', 'ipv4PrefixSpecificationRequest_ipv4Prefix' - The IPv4 prefix. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+newIpv4PrefixSpecificationRequest ::
+  Ipv4PrefixSpecificationRequest
+newIpv4PrefixSpecificationRequest =
+  Ipv4PrefixSpecificationRequest'
+    { ipv4Prefix =
+        Prelude.Nothing
+    }
+
+-- | The IPv4 prefix. For information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html Assigning prefixes to Amazon EC2 network interfaces>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+ipv4PrefixSpecificationRequest_ipv4Prefix :: Lens.Lens' Ipv4PrefixSpecificationRequest (Prelude.Maybe Prelude.Text)
+ipv4PrefixSpecificationRequest_ipv4Prefix = Lens.lens (\Ipv4PrefixSpecificationRequest' {ipv4Prefix} -> ipv4Prefix) (\s@Ipv4PrefixSpecificationRequest' {} a -> s {ipv4Prefix = a} :: Ipv4PrefixSpecificationRequest)
+
+instance Data.FromXML Ipv4PrefixSpecificationRequest where
+  parseXML x =
+    Ipv4PrefixSpecificationRequest'
+      Prelude.<$> (x Data..@? "Ipv4Prefix")
+
+instance
+  Prelude.Hashable
+    Ipv4PrefixSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    Ipv4PrefixSpecificationRequest' {..} =
+      _salt `Prelude.hashWithSalt` ipv4Prefix
+
+instance
+  Prelude.NFData
+    Ipv4PrefixSpecificationRequest
+  where
+  rnf Ipv4PrefixSpecificationRequest' {..} =
+    Prelude.rnf ipv4Prefix
+
+instance Data.ToQuery Ipv4PrefixSpecificationRequest where
+  toQuery Ipv4PrefixSpecificationRequest' {..} =
+    Prelude.mconcat ["Ipv4Prefix" Data.=: ipv4Prefix]
diff --git a/gen/Amazonka/EC2/Types/Ipv4PrefixSpecificationResponse.hs b/gen/Amazonka/EC2/Types/Ipv4PrefixSpecificationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv4PrefixSpecificationResponse.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv4PrefixSpecificationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv4PrefixSpecificationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the IPv4 delegated prefixes assigned to a network
+-- interface.
+--
+-- /See:/ 'newIpv4PrefixSpecificationResponse' smart constructor.
+data Ipv4PrefixSpecificationResponse = Ipv4PrefixSpecificationResponse'
+  { -- | The IPv4 delegated prefixes assigned to the network interface.
+    ipv4Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv4PrefixSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv4Prefix', 'ipv4PrefixSpecificationResponse_ipv4Prefix' - The IPv4 delegated prefixes assigned to the network interface.
+newIpv4PrefixSpecificationResponse ::
+  Ipv4PrefixSpecificationResponse
+newIpv4PrefixSpecificationResponse =
+  Ipv4PrefixSpecificationResponse'
+    { ipv4Prefix =
+        Prelude.Nothing
+    }
+
+-- | The IPv4 delegated prefixes assigned to the network interface.
+ipv4PrefixSpecificationResponse_ipv4Prefix :: Lens.Lens' Ipv4PrefixSpecificationResponse (Prelude.Maybe Prelude.Text)
+ipv4PrefixSpecificationResponse_ipv4Prefix = Lens.lens (\Ipv4PrefixSpecificationResponse' {ipv4Prefix} -> ipv4Prefix) (\s@Ipv4PrefixSpecificationResponse' {} a -> s {ipv4Prefix = a} :: Ipv4PrefixSpecificationResponse)
+
+instance Data.FromXML Ipv4PrefixSpecificationResponse where
+  parseXML x =
+    Ipv4PrefixSpecificationResponse'
+      Prelude.<$> (x Data..@? "ipv4Prefix")
+
+instance
+  Prelude.Hashable
+    Ipv4PrefixSpecificationResponse
+  where
+  hashWithSalt
+    _salt
+    Ipv4PrefixSpecificationResponse' {..} =
+      _salt `Prelude.hashWithSalt` ipv4Prefix
+
+instance
+  Prelude.NFData
+    Ipv4PrefixSpecificationResponse
+  where
+  rnf Ipv4PrefixSpecificationResponse' {..} =
+    Prelude.rnf ipv4Prefix
diff --git a/gen/Amazonka/EC2/Types/Ipv6CidrAssociation.hs b/gen/Amazonka/EC2/Types/Ipv6CidrAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6CidrAssociation.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6CidrAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6CidrAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 CIDR block association.
+--
+-- /See:/ 'newIpv6CidrAssociation' smart constructor.
+data Ipv6CidrAssociation = Ipv6CidrAssociation'
+  { -- | The resource that\'s associated with the IPv6 CIDR block.
+    associatedResource :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR block.
+    ipv6Cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6CidrAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedResource', 'ipv6CidrAssociation_associatedResource' - The resource that\'s associated with the IPv6 CIDR block.
+--
+-- 'ipv6Cidr', 'ipv6CidrAssociation_ipv6Cidr' - The IPv6 CIDR block.
+newIpv6CidrAssociation ::
+  Ipv6CidrAssociation
+newIpv6CidrAssociation =
+  Ipv6CidrAssociation'
+    { associatedResource =
+        Prelude.Nothing,
+      ipv6Cidr = Prelude.Nothing
+    }
+
+-- | The resource that\'s associated with the IPv6 CIDR block.
+ipv6CidrAssociation_associatedResource :: Lens.Lens' Ipv6CidrAssociation (Prelude.Maybe Prelude.Text)
+ipv6CidrAssociation_associatedResource = Lens.lens (\Ipv6CidrAssociation' {associatedResource} -> associatedResource) (\s@Ipv6CidrAssociation' {} a -> s {associatedResource = a} :: Ipv6CidrAssociation)
+
+-- | The IPv6 CIDR block.
+ipv6CidrAssociation_ipv6Cidr :: Lens.Lens' Ipv6CidrAssociation (Prelude.Maybe Prelude.Text)
+ipv6CidrAssociation_ipv6Cidr = Lens.lens (\Ipv6CidrAssociation' {ipv6Cidr} -> ipv6Cidr) (\s@Ipv6CidrAssociation' {} a -> s {ipv6Cidr = a} :: Ipv6CidrAssociation)
+
+instance Data.FromXML Ipv6CidrAssociation where
+  parseXML x =
+    Ipv6CidrAssociation'
+      Prelude.<$> (x Data..@? "associatedResource")
+      Prelude.<*> (x Data..@? "ipv6Cidr")
+
+instance Prelude.Hashable Ipv6CidrAssociation where
+  hashWithSalt _salt Ipv6CidrAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedResource
+      `Prelude.hashWithSalt` ipv6Cidr
+
+instance Prelude.NFData Ipv6CidrAssociation where
+  rnf Ipv6CidrAssociation' {..} =
+    Prelude.rnf associatedResource
+      `Prelude.seq` Prelude.rnf ipv6Cidr
diff --git a/gen/Amazonka/EC2/Types/Ipv6CidrBlock.hs b/gen/Amazonka/EC2/Types/Ipv6CidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6CidrBlock.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6CidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6CidrBlock where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 CIDR block.
+--
+-- /See:/ 'newIpv6CidrBlock' smart constructor.
+data Ipv6CidrBlock = Ipv6CidrBlock'
+  { -- | The IPv6 CIDR block.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6CidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6CidrBlock', 'ipv6CidrBlock_ipv6CidrBlock' - The IPv6 CIDR block.
+newIpv6CidrBlock ::
+  Ipv6CidrBlock
+newIpv6CidrBlock =
+  Ipv6CidrBlock' {ipv6CidrBlock = Prelude.Nothing}
+
+-- | The IPv6 CIDR block.
+ipv6CidrBlock_ipv6CidrBlock :: Lens.Lens' Ipv6CidrBlock (Prelude.Maybe Prelude.Text)
+ipv6CidrBlock_ipv6CidrBlock = Lens.lens (\Ipv6CidrBlock' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@Ipv6CidrBlock' {} a -> s {ipv6CidrBlock = a} :: Ipv6CidrBlock)
+
+instance Data.FromXML Ipv6CidrBlock where
+  parseXML x =
+    Ipv6CidrBlock'
+      Prelude.<$> (x Data..@? "ipv6CidrBlock")
+
+instance Prelude.Hashable Ipv6CidrBlock where
+  hashWithSalt _salt Ipv6CidrBlock' {..} =
+    _salt `Prelude.hashWithSalt` ipv6CidrBlock
+
+instance Prelude.NFData Ipv6CidrBlock where
+  rnf Ipv6CidrBlock' {..} = Prelude.rnf ipv6CidrBlock
diff --git a/gen/Amazonka/EC2/Types/Ipv6Pool.hs b/gen/Amazonka/EC2/Types/Ipv6Pool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6Pool.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6Pool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6Pool where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PoolCidrBlock
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 address pool.
+--
+-- /See:/ 'newIpv6Pool' smart constructor.
+data Ipv6Pool = Ipv6Pool'
+  { -- | The description for the address pool.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR blocks for the address pool.
+    poolCidrBlocks :: Prelude.Maybe [PoolCidrBlock],
+    -- | The ID of the address pool.
+    poolId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags for the address pool.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6Pool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'ipv6Pool_description' - The description for the address pool.
+--
+-- 'poolCidrBlocks', 'ipv6Pool_poolCidrBlocks' - The CIDR blocks for the address pool.
+--
+-- 'poolId', 'ipv6Pool_poolId' - The ID of the address pool.
+--
+-- 'tags', 'ipv6Pool_tags' - Any tags for the address pool.
+newIpv6Pool ::
+  Ipv6Pool
+newIpv6Pool =
+  Ipv6Pool'
+    { description = Prelude.Nothing,
+      poolCidrBlocks = Prelude.Nothing,
+      poolId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The description for the address pool.
+ipv6Pool_description :: Lens.Lens' Ipv6Pool (Prelude.Maybe Prelude.Text)
+ipv6Pool_description = Lens.lens (\Ipv6Pool' {description} -> description) (\s@Ipv6Pool' {} a -> s {description = a} :: Ipv6Pool)
+
+-- | The CIDR blocks for the address pool.
+ipv6Pool_poolCidrBlocks :: Lens.Lens' Ipv6Pool (Prelude.Maybe [PoolCidrBlock])
+ipv6Pool_poolCidrBlocks = Lens.lens (\Ipv6Pool' {poolCidrBlocks} -> poolCidrBlocks) (\s@Ipv6Pool' {} a -> s {poolCidrBlocks = a} :: Ipv6Pool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the address pool.
+ipv6Pool_poolId :: Lens.Lens' Ipv6Pool (Prelude.Maybe Prelude.Text)
+ipv6Pool_poolId = Lens.lens (\Ipv6Pool' {poolId} -> poolId) (\s@Ipv6Pool' {} a -> s {poolId = a} :: Ipv6Pool)
+
+-- | Any tags for the address pool.
+ipv6Pool_tags :: Lens.Lens' Ipv6Pool (Prelude.Maybe [Tag])
+ipv6Pool_tags = Lens.lens (\Ipv6Pool' {tags} -> tags) (\s@Ipv6Pool' {} a -> s {tags = a} :: Ipv6Pool) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML Ipv6Pool where
+  parseXML x =
+    Ipv6Pool'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> ( x
+                      Data..@? "poolCidrBlockSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "poolId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable Ipv6Pool where
+  hashWithSalt _salt Ipv6Pool' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` poolCidrBlocks
+      `Prelude.hashWithSalt` poolId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData Ipv6Pool where
+  rnf Ipv6Pool' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf poolCidrBlocks
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/Ipv6PrefixSpecification.hs b/gen/Amazonka/EC2/Types/Ipv6PrefixSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6PrefixSpecification.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6PrefixSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6PrefixSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the IPv6 prefix.
+--
+-- /See:/ 'newIpv6PrefixSpecification' smart constructor.
+data Ipv6PrefixSpecification = Ipv6PrefixSpecification'
+  { -- | The IPv6 prefix.
+    ipv6Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6PrefixSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Prefix', 'ipv6PrefixSpecification_ipv6Prefix' - The IPv6 prefix.
+newIpv6PrefixSpecification ::
+  Ipv6PrefixSpecification
+newIpv6PrefixSpecification =
+  Ipv6PrefixSpecification'
+    { ipv6Prefix =
+        Prelude.Nothing
+    }
+
+-- | The IPv6 prefix.
+ipv6PrefixSpecification_ipv6Prefix :: Lens.Lens' Ipv6PrefixSpecification (Prelude.Maybe Prelude.Text)
+ipv6PrefixSpecification_ipv6Prefix = Lens.lens (\Ipv6PrefixSpecification' {ipv6Prefix} -> ipv6Prefix) (\s@Ipv6PrefixSpecification' {} a -> s {ipv6Prefix = a} :: Ipv6PrefixSpecification)
+
+instance Data.FromXML Ipv6PrefixSpecification where
+  parseXML x =
+    Ipv6PrefixSpecification'
+      Prelude.<$> (x Data..@? "ipv6Prefix")
+
+instance Prelude.Hashable Ipv6PrefixSpecification where
+  hashWithSalt _salt Ipv6PrefixSpecification' {..} =
+    _salt `Prelude.hashWithSalt` ipv6Prefix
+
+instance Prelude.NFData Ipv6PrefixSpecification where
+  rnf Ipv6PrefixSpecification' {..} =
+    Prelude.rnf ipv6Prefix
diff --git a/gen/Amazonka/EC2/Types/Ipv6PrefixSpecificationRequest.hs b/gen/Amazonka/EC2/Types/Ipv6PrefixSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6PrefixSpecificationRequest.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the IPv4 prefix option for a network interface.
+--
+-- /See:/ 'newIpv6PrefixSpecificationRequest' smart constructor.
+data Ipv6PrefixSpecificationRequest = Ipv6PrefixSpecificationRequest'
+  { -- | The IPv6 prefix.
+    ipv6Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6PrefixSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Prefix', 'ipv6PrefixSpecificationRequest_ipv6Prefix' - The IPv6 prefix.
+newIpv6PrefixSpecificationRequest ::
+  Ipv6PrefixSpecificationRequest
+newIpv6PrefixSpecificationRequest =
+  Ipv6PrefixSpecificationRequest'
+    { ipv6Prefix =
+        Prelude.Nothing
+    }
+
+-- | The IPv6 prefix.
+ipv6PrefixSpecificationRequest_ipv6Prefix :: Lens.Lens' Ipv6PrefixSpecificationRequest (Prelude.Maybe Prelude.Text)
+ipv6PrefixSpecificationRequest_ipv6Prefix = Lens.lens (\Ipv6PrefixSpecificationRequest' {ipv6Prefix} -> ipv6Prefix) (\s@Ipv6PrefixSpecificationRequest' {} a -> s {ipv6Prefix = a} :: Ipv6PrefixSpecificationRequest)
+
+instance Data.FromXML Ipv6PrefixSpecificationRequest where
+  parseXML x =
+    Ipv6PrefixSpecificationRequest'
+      Prelude.<$> (x Data..@? "Ipv6Prefix")
+
+instance
+  Prelude.Hashable
+    Ipv6PrefixSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    Ipv6PrefixSpecificationRequest' {..} =
+      _salt `Prelude.hashWithSalt` ipv6Prefix
+
+instance
+  Prelude.NFData
+    Ipv6PrefixSpecificationRequest
+  where
+  rnf Ipv6PrefixSpecificationRequest' {..} =
+    Prelude.rnf ipv6Prefix
+
+instance Data.ToQuery Ipv6PrefixSpecificationRequest where
+  toQuery Ipv6PrefixSpecificationRequest' {..} =
+    Prelude.mconcat ["Ipv6Prefix" Data.=: ipv6Prefix]
diff --git a/gen/Amazonka/EC2/Types/Ipv6PrefixSpecificationResponse.hs b/gen/Amazonka/EC2/Types/Ipv6PrefixSpecificationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6PrefixSpecificationResponse.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6PrefixSpecificationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6PrefixSpecificationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the IPv6 delegated prefixes assigned to a network
+-- interface.
+--
+-- /See:/ 'newIpv6PrefixSpecificationResponse' smart constructor.
+data Ipv6PrefixSpecificationResponse = Ipv6PrefixSpecificationResponse'
+  { -- | The IPv6 delegated prefixes assigned to the network interface.
+    ipv6Prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6PrefixSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Prefix', 'ipv6PrefixSpecificationResponse_ipv6Prefix' - The IPv6 delegated prefixes assigned to the network interface.
+newIpv6PrefixSpecificationResponse ::
+  Ipv6PrefixSpecificationResponse
+newIpv6PrefixSpecificationResponse =
+  Ipv6PrefixSpecificationResponse'
+    { ipv6Prefix =
+        Prelude.Nothing
+    }
+
+-- | The IPv6 delegated prefixes assigned to the network interface.
+ipv6PrefixSpecificationResponse_ipv6Prefix :: Lens.Lens' Ipv6PrefixSpecificationResponse (Prelude.Maybe Prelude.Text)
+ipv6PrefixSpecificationResponse_ipv6Prefix = Lens.lens (\Ipv6PrefixSpecificationResponse' {ipv6Prefix} -> ipv6Prefix) (\s@Ipv6PrefixSpecificationResponse' {} a -> s {ipv6Prefix = a} :: Ipv6PrefixSpecificationResponse)
+
+instance Data.FromXML Ipv6PrefixSpecificationResponse where
+  parseXML x =
+    Ipv6PrefixSpecificationResponse'
+      Prelude.<$> (x Data..@? "ipv6Prefix")
+
+instance
+  Prelude.Hashable
+    Ipv6PrefixSpecificationResponse
+  where
+  hashWithSalt
+    _salt
+    Ipv6PrefixSpecificationResponse' {..} =
+      _salt `Prelude.hashWithSalt` ipv6Prefix
+
+instance
+  Prelude.NFData
+    Ipv6PrefixSpecificationResponse
+  where
+  rnf Ipv6PrefixSpecificationResponse' {..} =
+    Prelude.rnf ipv6Prefix
diff --git a/gen/Amazonka/EC2/Types/Ipv6Range.hs b/gen/Amazonka/EC2/Types/Ipv6Range.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6Range.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6Range
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6Range where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | [EC2-VPC only] Describes an IPv6 range.
+--
+-- /See:/ 'newIpv6Range' smart constructor.
+data Ipv6Range = Ipv6Range'
+  { -- | The IPv6 CIDR range. You can either specify a CIDR range or a source
+    -- security group, not both. To specify a single IPv6 address, use the
+    -- \/128 prefix length.
+    cidrIpv6 :: Prelude.Maybe Prelude.Text,
+    -- | A description for the security group rule that references this IPv6
+    -- address range.
+    --
+    -- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+    -- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=&;{}!$*
+    description :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ipv6Range' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIpv6', 'ipv6Range_cidrIpv6' - The IPv6 CIDR range. You can either specify a CIDR range or a source
+-- security group, not both. To specify a single IPv6 address, use the
+-- \/128 prefix length.
+--
+-- 'description', 'ipv6Range_description' - A description for the security group rule that references this IPv6
+-- address range.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=&;{}!$*
+newIpv6Range ::
+  Ipv6Range
+newIpv6Range =
+  Ipv6Range'
+    { cidrIpv6 = Prelude.Nothing,
+      description = Prelude.Nothing
+    }
+
+-- | The IPv6 CIDR range. You can either specify a CIDR range or a source
+-- security group, not both. To specify a single IPv6 address, use the
+-- \/128 prefix length.
+ipv6Range_cidrIpv6 :: Lens.Lens' Ipv6Range (Prelude.Maybe Prelude.Text)
+ipv6Range_cidrIpv6 = Lens.lens (\Ipv6Range' {cidrIpv6} -> cidrIpv6) (\s@Ipv6Range' {} a -> s {cidrIpv6 = a} :: Ipv6Range)
+
+-- | A description for the security group rule that references this IPv6
+-- address range.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=&;{}!$*
+ipv6Range_description :: Lens.Lens' Ipv6Range (Prelude.Maybe Prelude.Text)
+ipv6Range_description = Lens.lens (\Ipv6Range' {description} -> description) (\s@Ipv6Range' {} a -> s {description = a} :: Ipv6Range)
+
+instance Data.FromXML Ipv6Range where
+  parseXML x =
+    Ipv6Range'
+      Prelude.<$> (x Data..@? "cidrIpv6")
+      Prelude.<*> (x Data..@? "description")
+
+instance Prelude.Hashable Ipv6Range where
+  hashWithSalt _salt Ipv6Range' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIpv6
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData Ipv6Range where
+  rnf Ipv6Range' {..} =
+    Prelude.rnf cidrIpv6
+      `Prelude.seq` Prelude.rnf description
+
+instance Data.ToQuery Ipv6Range where
+  toQuery Ipv6Range' {..} =
+    Prelude.mconcat
+      [ "CidrIpv6" Data.=: cidrIpv6,
+        "Description" Data.=: description
+      ]
diff --git a/gen/Amazonka/EC2/Types/Ipv6SupportValue.hs b/gen/Amazonka/EC2/Types/Ipv6SupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Ipv6SupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Ipv6SupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Ipv6SupportValue
+  ( Ipv6SupportValue
+      ( ..,
+        Ipv6SupportValue_Disable,
+        Ipv6SupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype Ipv6SupportValue = Ipv6SupportValue'
+  { fromIpv6SupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Ipv6SupportValue_Disable :: Ipv6SupportValue
+pattern Ipv6SupportValue_Disable = Ipv6SupportValue' "disable"
+
+pattern Ipv6SupportValue_Enable :: Ipv6SupportValue
+pattern Ipv6SupportValue_Enable = Ipv6SupportValue' "enable"
+
+{-# COMPLETE
+  Ipv6SupportValue_Disable,
+  Ipv6SupportValue_Enable,
+  Ipv6SupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/KeyFormat.hs b/gen/Amazonka/EC2/Types/KeyFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/KeyFormat.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.KeyFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.KeyFormat
+  ( KeyFormat
+      ( ..,
+        KeyFormat_Pem,
+        KeyFormat_Ppk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype KeyFormat = KeyFormat'
+  { fromKeyFormat ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern KeyFormat_Pem :: KeyFormat
+pattern KeyFormat_Pem = KeyFormat' "pem"
+
+pattern KeyFormat_Ppk :: KeyFormat
+pattern KeyFormat_Ppk = KeyFormat' "ppk"
+
+{-# COMPLETE
+  KeyFormat_Pem,
+  KeyFormat_Ppk,
+  KeyFormat'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/KeyPairInfo.hs b/gen/Amazonka/EC2/Types/KeyPairInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/KeyPairInfo.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.KeyPairInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.KeyPairInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.KeyType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a key pair.
+--
+-- /See:/ 'newKeyPairInfo' smart constructor.
+data KeyPairInfo = KeyPairInfo'
+  { -- | If you used Amazon EC2 to create the key pair, this is the date and time
+    -- when the key was created, in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
+    -- in the UTC time zone.
+    --
+    -- If you imported an existing key pair to Amazon EC2, this is the date and
+    -- time the key was imported, in
+    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
+    -- in the UTC time zone.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | If you used CreateKeyPair to create the key pair:
+    --
+    -- -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
+    --     DER encoded private key.
+    --
+    -- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+    --     SHA-256 digest, which is the default for OpenSSH, starting with
+    --     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+    --
+    -- If you used ImportKeyPair to provide Amazon Web Services the public key:
+    --
+    -- -   For RSA key pairs, the key fingerprint is the MD5 public key
+    --     fingerprint as specified in section 4 of RFC4716.
+    --
+    -- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+    --     SHA-256 digest, which is the default for OpenSSH, starting with
+    --     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+    keyFingerprint :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the key pair.
+    keyPairId :: Prelude.Maybe Prelude.Text,
+    -- | The type of key pair.
+    keyType :: Prelude.Maybe KeyType,
+    -- | The public key material.
+    publicKey :: Prelude.Maybe Prelude.Text,
+    -- | Any tags applied to the key pair.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KeyPairInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'keyPairInfo_createTime' - If you used Amazon EC2 to create the key pair, this is the date and time
+-- when the key was created, in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
+-- in the UTC time zone.
+--
+-- If you imported an existing key pair to Amazon EC2, this is the date and
+-- time the key was imported, in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
+-- in the UTC time zone.
+--
+-- 'keyFingerprint', 'keyPairInfo_keyFingerprint' - If you used CreateKeyPair to create the key pair:
+--
+-- -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
+--     DER encoded private key.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+--
+-- If you used ImportKeyPair to provide Amazon Web Services the public key:
+--
+-- -   For RSA key pairs, the key fingerprint is the MD5 public key
+--     fingerprint as specified in section 4 of RFC4716.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+--
+-- 'keyName', 'keyPairInfo_keyName' - The name of the key pair.
+--
+-- 'keyPairId', 'keyPairInfo_keyPairId' - The ID of the key pair.
+--
+-- 'keyType', 'keyPairInfo_keyType' - The type of key pair.
+--
+-- 'publicKey', 'keyPairInfo_publicKey' - The public key material.
+--
+-- 'tags', 'keyPairInfo_tags' - Any tags applied to the key pair.
+newKeyPairInfo ::
+  KeyPairInfo
+newKeyPairInfo =
+  KeyPairInfo'
+    { createTime = Prelude.Nothing,
+      keyFingerprint = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      keyPairId = Prelude.Nothing,
+      keyType = Prelude.Nothing,
+      publicKey = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | If you used Amazon EC2 to create the key pair, this is the date and time
+-- when the key was created, in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
+-- in the UTC time zone.
+--
+-- If you imported an existing key pair to Amazon EC2, this is the date and
+-- time the key was imported, in
+-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
+-- in the UTC time zone.
+keyPairInfo_createTime :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.UTCTime)
+keyPairInfo_createTime = Lens.lens (\KeyPairInfo' {createTime} -> createTime) (\s@KeyPairInfo' {} a -> s {createTime = a} :: KeyPairInfo) Prelude.. Lens.mapping Data._Time
+
+-- | If you used CreateKeyPair to create the key pair:
+--
+-- -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
+--     DER encoded private key.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+--
+-- If you used ImportKeyPair to provide Amazon Web Services the public key:
+--
+-- -   For RSA key pairs, the key fingerprint is the MD5 public key
+--     fingerprint as specified in section 4 of RFC4716.
+--
+-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
+--     SHA-256 digest, which is the default for OpenSSH, starting with
+--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
+keyPairInfo_keyFingerprint :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
+keyPairInfo_keyFingerprint = Lens.lens (\KeyPairInfo' {keyFingerprint} -> keyFingerprint) (\s@KeyPairInfo' {} a -> s {keyFingerprint = a} :: KeyPairInfo)
+
+-- | The name of the key pair.
+keyPairInfo_keyName :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
+keyPairInfo_keyName = Lens.lens (\KeyPairInfo' {keyName} -> keyName) (\s@KeyPairInfo' {} a -> s {keyName = a} :: KeyPairInfo)
+
+-- | The ID of the key pair.
+keyPairInfo_keyPairId :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
+keyPairInfo_keyPairId = Lens.lens (\KeyPairInfo' {keyPairId} -> keyPairId) (\s@KeyPairInfo' {} a -> s {keyPairId = a} :: KeyPairInfo)
+
+-- | The type of key pair.
+keyPairInfo_keyType :: Lens.Lens' KeyPairInfo (Prelude.Maybe KeyType)
+keyPairInfo_keyType = Lens.lens (\KeyPairInfo' {keyType} -> keyType) (\s@KeyPairInfo' {} a -> s {keyType = a} :: KeyPairInfo)
+
+-- | The public key material.
+keyPairInfo_publicKey :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
+keyPairInfo_publicKey = Lens.lens (\KeyPairInfo' {publicKey} -> publicKey) (\s@KeyPairInfo' {} a -> s {publicKey = a} :: KeyPairInfo)
+
+-- | Any tags applied to the key pair.
+keyPairInfo_tags :: Lens.Lens' KeyPairInfo (Prelude.Maybe [Tag])
+keyPairInfo_tags = Lens.lens (\KeyPairInfo' {tags} -> tags) (\s@KeyPairInfo' {} a -> s {tags = a} :: KeyPairInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML KeyPairInfo where
+  parseXML x =
+    KeyPairInfo'
+      Prelude.<$> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "keyFingerprint")
+      Prelude.<*> (x Data..@? "keyName")
+      Prelude.<*> (x Data..@? "keyPairId")
+      Prelude.<*> (x Data..@? "keyType")
+      Prelude.<*> (x Data..@? "publicKey")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable KeyPairInfo where
+  hashWithSalt _salt KeyPairInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` keyFingerprint
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` keyPairId
+      `Prelude.hashWithSalt` keyType
+      `Prelude.hashWithSalt` publicKey
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData KeyPairInfo where
+  rnf KeyPairInfo' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf keyFingerprint
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf keyPairId
+      `Prelude.seq` Prelude.rnf keyType
+      `Prelude.seq` Prelude.rnf publicKey
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/KeyType.hs b/gen/Amazonka/EC2/Types/KeyType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/KeyType.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.KeyType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.KeyType
+  ( KeyType
+      ( ..,
+        KeyType_Ed25519,
+        KeyType_Rsa
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype KeyType = KeyType' {fromKeyType :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern KeyType_Ed25519 :: KeyType
+pattern KeyType_Ed25519 = KeyType' "ed25519"
+
+pattern KeyType_Rsa :: KeyType
+pattern KeyType_Rsa = KeyType' "rsa"
+
+{-# COMPLETE
+  KeyType_Ed25519,
+  KeyType_Rsa,
+  KeyType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LastError.hs b/gen/Amazonka/EC2/Types/LastError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LastError.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LastError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LastError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The last error that occurred for a VPC endpoint.
+--
+-- /See:/ 'newLastError' smart constructor.
+data LastError = LastError'
+  { -- | The error code for the VPC endpoint error.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message for the VPC endpoint error.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LastError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'lastError_code' - The error code for the VPC endpoint error.
+--
+-- 'message', 'lastError_message' - The error message for the VPC endpoint error.
+newLastError ::
+  LastError
+newLastError =
+  LastError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code for the VPC endpoint error.
+lastError_code :: Lens.Lens' LastError (Prelude.Maybe Prelude.Text)
+lastError_code = Lens.lens (\LastError' {code} -> code) (\s@LastError' {} a -> s {code = a} :: LastError)
+
+-- | The error message for the VPC endpoint error.
+lastError_message :: Lens.Lens' LastError (Prelude.Maybe Prelude.Text)
+lastError_message = Lens.lens (\LastError' {message} -> message) (\s@LastError' {} a -> s {message = a} :: LastError)
+
+instance Data.FromXML LastError where
+  parseXML x =
+    LastError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable LastError where
+  hashWithSalt _salt LastError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData LastError where
+  rnf LastError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/LaunchPermission.hs b/gen/Amazonka/EC2/Types/LaunchPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchPermission.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchPermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PermissionGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch permission.
+--
+-- /See:/ 'newLaunchPermission' smart constructor.
+data LaunchPermission = LaunchPermission'
+  { -- | The name of the group.
+    group' :: Prelude.Maybe PermissionGroup,
+    -- | The Amazon Resource Name (ARN) of an organization.
+    organizationArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of an organizational unit (OU).
+    organizationalUnitArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID.
+    --
+    -- Constraints: Up to 10 000 account IDs can be specified in a single
+    -- request.
+    userId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'group'', 'launchPermission_group' - The name of the group.
+--
+-- 'organizationArn', 'launchPermission_organizationArn' - The Amazon Resource Name (ARN) of an organization.
+--
+-- 'organizationalUnitArn', 'launchPermission_organizationalUnitArn' - The Amazon Resource Name (ARN) of an organizational unit (OU).
+--
+-- 'userId', 'launchPermission_userId' - The Amazon Web Services account ID.
+--
+-- Constraints: Up to 10 000 account IDs can be specified in a single
+-- request.
+newLaunchPermission ::
+  LaunchPermission
+newLaunchPermission =
+  LaunchPermission'
+    { group' = Prelude.Nothing,
+      organizationArn = Prelude.Nothing,
+      organizationalUnitArn = Prelude.Nothing,
+      userId = Prelude.Nothing
+    }
+
+-- | The name of the group.
+launchPermission_group :: Lens.Lens' LaunchPermission (Prelude.Maybe PermissionGroup)
+launchPermission_group = Lens.lens (\LaunchPermission' {group'} -> group') (\s@LaunchPermission' {} a -> s {group' = a} :: LaunchPermission)
+
+-- | The Amazon Resource Name (ARN) of an organization.
+launchPermission_organizationArn :: Lens.Lens' LaunchPermission (Prelude.Maybe Prelude.Text)
+launchPermission_organizationArn = Lens.lens (\LaunchPermission' {organizationArn} -> organizationArn) (\s@LaunchPermission' {} a -> s {organizationArn = a} :: LaunchPermission)
+
+-- | The Amazon Resource Name (ARN) of an organizational unit (OU).
+launchPermission_organizationalUnitArn :: Lens.Lens' LaunchPermission (Prelude.Maybe Prelude.Text)
+launchPermission_organizationalUnitArn = Lens.lens (\LaunchPermission' {organizationalUnitArn} -> organizationalUnitArn) (\s@LaunchPermission' {} a -> s {organizationalUnitArn = a} :: LaunchPermission)
+
+-- | The Amazon Web Services account ID.
+--
+-- Constraints: Up to 10 000 account IDs can be specified in a single
+-- request.
+launchPermission_userId :: Lens.Lens' LaunchPermission (Prelude.Maybe Prelude.Text)
+launchPermission_userId = Lens.lens (\LaunchPermission' {userId} -> userId) (\s@LaunchPermission' {} a -> s {userId = a} :: LaunchPermission)
+
+instance Data.FromXML LaunchPermission where
+  parseXML x =
+    LaunchPermission'
+      Prelude.<$> (x Data..@? "group")
+      Prelude.<*> (x Data..@? "organizationArn")
+      Prelude.<*> (x Data..@? "organizationalUnitArn")
+      Prelude.<*> (x Data..@? "userId")
+
+instance Prelude.Hashable LaunchPermission where
+  hashWithSalt _salt LaunchPermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` group'
+      `Prelude.hashWithSalt` organizationArn
+      `Prelude.hashWithSalt` organizationalUnitArn
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData LaunchPermission where
+  rnf LaunchPermission' {..} =
+    Prelude.rnf group'
+      `Prelude.seq` Prelude.rnf organizationArn
+      `Prelude.seq` Prelude.rnf organizationalUnitArn
+      `Prelude.seq` Prelude.rnf userId
+
+instance Data.ToQuery LaunchPermission where
+  toQuery LaunchPermission' {..} =
+    Prelude.mconcat
+      [ "Group" Data.=: group',
+        "OrganizationArn" Data.=: organizationArn,
+        "OrganizationalUnitArn"
+          Data.=: organizationalUnitArn,
+        "UserId" Data.=: userId
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchPermissionModifications.hs b/gen/Amazonka/EC2/Types/LaunchPermissionModifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchPermissionModifications.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchPermissionModifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchPermissionModifications where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchPermission
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch permission modification.
+--
+-- /See:/ 'newLaunchPermissionModifications' smart constructor.
+data LaunchPermissionModifications = LaunchPermissionModifications'
+  { -- | The Amazon Web Services account ID, organization ARN, or OU ARN to add
+    -- to the list of launch permissions for the AMI.
+    add :: Prelude.Maybe [LaunchPermission],
+    -- | The Amazon Web Services account ID, organization ARN, or OU ARN to
+    -- remove from the list of launch permissions for the AMI.
+    remove :: Prelude.Maybe [LaunchPermission]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchPermissionModifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'add', 'launchPermissionModifications_add' - The Amazon Web Services account ID, organization ARN, or OU ARN to add
+-- to the list of launch permissions for the AMI.
+--
+-- 'remove', 'launchPermissionModifications_remove' - The Amazon Web Services account ID, organization ARN, or OU ARN to
+-- remove from the list of launch permissions for the AMI.
+newLaunchPermissionModifications ::
+  LaunchPermissionModifications
+newLaunchPermissionModifications =
+  LaunchPermissionModifications'
+    { add =
+        Prelude.Nothing,
+      remove = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID, organization ARN, or OU ARN to add
+-- to the list of launch permissions for the AMI.
+launchPermissionModifications_add :: Lens.Lens' LaunchPermissionModifications (Prelude.Maybe [LaunchPermission])
+launchPermissionModifications_add = Lens.lens (\LaunchPermissionModifications' {add} -> add) (\s@LaunchPermissionModifications' {} a -> s {add = a} :: LaunchPermissionModifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Web Services account ID, organization ARN, or OU ARN to
+-- remove from the list of launch permissions for the AMI.
+launchPermissionModifications_remove :: Lens.Lens' LaunchPermissionModifications (Prelude.Maybe [LaunchPermission])
+launchPermissionModifications_remove = Lens.lens (\LaunchPermissionModifications' {remove} -> remove) (\s@LaunchPermissionModifications' {} a -> s {remove = a} :: LaunchPermissionModifications) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    LaunchPermissionModifications
+  where
+  hashWithSalt _salt LaunchPermissionModifications' {..} =
+    _salt
+      `Prelude.hashWithSalt` add
+      `Prelude.hashWithSalt` remove
+
+instance Prelude.NFData LaunchPermissionModifications where
+  rnf LaunchPermissionModifications' {..} =
+    Prelude.rnf add `Prelude.seq` Prelude.rnf remove
+
+instance Data.ToQuery LaunchPermissionModifications where
+  toQuery LaunchPermissionModifications' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          (Data.toQueryList "Add" Prelude.<$> add),
+        Data.toQuery
+          (Data.toQueryList "Remove" Prelude.<$> remove)
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchSpecification.hs b/gen/Amazonka/EC2/Types/LaunchSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchSpecification.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BlockDeviceMapping
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.IamInstanceProfileSpecification
+import Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.RunInstancesMonitoringEnabled
+import Amazonka.EC2.Types.SpotPlacement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the launch specification for an instance.
+--
+-- /See:/ 'newLaunchSpecification' smart constructor.
+data LaunchSpecification = LaunchSpecification'
+  { -- | Deprecated.
+    addressingType :: Prelude.Maybe Prelude.Text,
+    -- | One or more block device mapping entries.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | Indicates whether the instance is optimized for EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal EBS I\/O performance.
+    -- This optimization isn\'t available with all instance types. Additional
+    -- usage charges apply when using an EBS Optimized instance.
+    --
+    -- Default: @false@
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe IamInstanceProfileSpecification,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The instance type. Only one instance type can be specified.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The ID of the kernel.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    monitoring :: Prelude.Maybe RunInstancesMonitoringEnabled,
+    -- | One or more network interfaces. If you specify a network interface, you
+    -- must specify subnet IDs and security group IDs using the network
+    -- interface.
+    networkInterfaces :: Prelude.Maybe [InstanceNetworkInterfaceSpecification],
+    -- | The placement information for the instance.
+    placement :: Prelude.Maybe SpotPlacement,
+    -- | The ID of the RAM disk.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | One or more security groups. When requesting instances in a VPC, you
+    -- must specify the IDs of the security groups. When requesting instances
+    -- in EC2-Classic, you can specify the names or the IDs of the security
+    -- groups.
+    securityGroups :: Prelude.Maybe [GroupIdentifier],
+    -- | The ID of the subnet in which to launch the instance.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The Base64-encoded user data for the instance.
+    userData :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressingType', 'launchSpecification_addressingType' - Deprecated.
+--
+-- 'blockDeviceMappings', 'launchSpecification_blockDeviceMappings' - One or more block device mapping entries.
+--
+-- 'ebsOptimized', 'launchSpecification_ebsOptimized' - Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: @false@
+--
+-- 'iamInstanceProfile', 'launchSpecification_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'imageId', 'launchSpecification_imageId' - The ID of the AMI.
+--
+-- 'instanceType', 'launchSpecification_instanceType' - The instance type. Only one instance type can be specified.
+--
+-- 'kernelId', 'launchSpecification_kernelId' - The ID of the kernel.
+--
+-- 'keyName', 'launchSpecification_keyName' - The name of the key pair.
+--
+-- 'monitoring', 'launchSpecification_monitoring' - Undocumented member.
+--
+-- 'networkInterfaces', 'launchSpecification_networkInterfaces' - One or more network interfaces. If you specify a network interface, you
+-- must specify subnet IDs and security group IDs using the network
+-- interface.
+--
+-- 'placement', 'launchSpecification_placement' - The placement information for the instance.
+--
+-- 'ramdiskId', 'launchSpecification_ramdiskId' - The ID of the RAM disk.
+--
+-- 'securityGroups', 'launchSpecification_securityGroups' - One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+--
+-- 'subnetId', 'launchSpecification_subnetId' - The ID of the subnet in which to launch the instance.
+--
+-- 'userData', 'launchSpecification_userData' - The Base64-encoded user data for the instance.
+newLaunchSpecification ::
+  LaunchSpecification
+newLaunchSpecification =
+  LaunchSpecification'
+    { addressingType =
+        Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      userData = Prelude.Nothing
+    }
+
+-- | Deprecated.
+launchSpecification_addressingType :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_addressingType = Lens.lens (\LaunchSpecification' {addressingType} -> addressingType) (\s@LaunchSpecification' {} a -> s {addressingType = a} :: LaunchSpecification)
+
+-- | One or more block device mapping entries.
+launchSpecification_blockDeviceMappings :: Lens.Lens' LaunchSpecification (Prelude.Maybe [BlockDeviceMapping])
+launchSpecification_blockDeviceMappings = Lens.lens (\LaunchSpecification' {blockDeviceMappings} -> blockDeviceMappings) (\s@LaunchSpecification' {} a -> s {blockDeviceMappings = a} :: LaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: @false@
+launchSpecification_ebsOptimized :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Bool)
+launchSpecification_ebsOptimized = Lens.lens (\LaunchSpecification' {ebsOptimized} -> ebsOptimized) (\s@LaunchSpecification' {} a -> s {ebsOptimized = a} :: LaunchSpecification)
+
+-- | The IAM instance profile.
+launchSpecification_iamInstanceProfile :: Lens.Lens' LaunchSpecification (Prelude.Maybe IamInstanceProfileSpecification)
+launchSpecification_iamInstanceProfile = Lens.lens (\LaunchSpecification' {iamInstanceProfile} -> iamInstanceProfile) (\s@LaunchSpecification' {} a -> s {iamInstanceProfile = a} :: LaunchSpecification)
+
+-- | The ID of the AMI.
+launchSpecification_imageId :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_imageId = Lens.lens (\LaunchSpecification' {imageId} -> imageId) (\s@LaunchSpecification' {} a -> s {imageId = a} :: LaunchSpecification)
+
+-- | The instance type. Only one instance type can be specified.
+launchSpecification_instanceType :: Lens.Lens' LaunchSpecification (Prelude.Maybe InstanceType)
+launchSpecification_instanceType = Lens.lens (\LaunchSpecification' {instanceType} -> instanceType) (\s@LaunchSpecification' {} a -> s {instanceType = a} :: LaunchSpecification)
+
+-- | The ID of the kernel.
+launchSpecification_kernelId :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_kernelId = Lens.lens (\LaunchSpecification' {kernelId} -> kernelId) (\s@LaunchSpecification' {} a -> s {kernelId = a} :: LaunchSpecification)
+
+-- | The name of the key pair.
+launchSpecification_keyName :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_keyName = Lens.lens (\LaunchSpecification' {keyName} -> keyName) (\s@LaunchSpecification' {} a -> s {keyName = a} :: LaunchSpecification)
+
+-- | Undocumented member.
+launchSpecification_monitoring :: Lens.Lens' LaunchSpecification (Prelude.Maybe RunInstancesMonitoringEnabled)
+launchSpecification_monitoring = Lens.lens (\LaunchSpecification' {monitoring} -> monitoring) (\s@LaunchSpecification' {} a -> s {monitoring = a} :: LaunchSpecification)
+
+-- | One or more network interfaces. If you specify a network interface, you
+-- must specify subnet IDs and security group IDs using the network
+-- interface.
+launchSpecification_networkInterfaces :: Lens.Lens' LaunchSpecification (Prelude.Maybe [InstanceNetworkInterfaceSpecification])
+launchSpecification_networkInterfaces = Lens.lens (\LaunchSpecification' {networkInterfaces} -> networkInterfaces) (\s@LaunchSpecification' {} a -> s {networkInterfaces = a} :: LaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement information for the instance.
+launchSpecification_placement :: Lens.Lens' LaunchSpecification (Prelude.Maybe SpotPlacement)
+launchSpecification_placement = Lens.lens (\LaunchSpecification' {placement} -> placement) (\s@LaunchSpecification' {} a -> s {placement = a} :: LaunchSpecification)
+
+-- | The ID of the RAM disk.
+launchSpecification_ramdiskId :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_ramdiskId = Lens.lens (\LaunchSpecification' {ramdiskId} -> ramdiskId) (\s@LaunchSpecification' {} a -> s {ramdiskId = a} :: LaunchSpecification)
+
+-- | One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+launchSpecification_securityGroups :: Lens.Lens' LaunchSpecification (Prelude.Maybe [GroupIdentifier])
+launchSpecification_securityGroups = Lens.lens (\LaunchSpecification' {securityGroups} -> securityGroups) (\s@LaunchSpecification' {} a -> s {securityGroups = a} :: LaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the subnet in which to launch the instance.
+launchSpecification_subnetId :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_subnetId = Lens.lens (\LaunchSpecification' {subnetId} -> subnetId) (\s@LaunchSpecification' {} a -> s {subnetId = a} :: LaunchSpecification)
+
+-- | The Base64-encoded user data for the instance.
+launchSpecification_userData :: Lens.Lens' LaunchSpecification (Prelude.Maybe Prelude.Text)
+launchSpecification_userData = Lens.lens (\LaunchSpecification' {userData} -> userData) (\s@LaunchSpecification' {} a -> s {userData = a} :: LaunchSpecification)
+
+instance Data.FromXML LaunchSpecification where
+  parseXML x =
+    LaunchSpecification'
+      Prelude.<$> (x Data..@? "addressingType")
+      Prelude.<*> ( x
+                      Data..@? "blockDeviceMapping"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ebsOptimized")
+      Prelude.<*> (x Data..@? "iamInstanceProfile")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "kernelId")
+      Prelude.<*> (x Data..@? "keyName")
+      Prelude.<*> (x Data..@? "monitoring")
+      Prelude.<*> ( x
+                      Data..@? "networkInterfaceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "placement")
+      Prelude.<*> (x Data..@? "ramdiskId")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> (x Data..@? "userData")
+
+instance Prelude.Hashable LaunchSpecification where
+  hashWithSalt _salt LaunchSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressingType
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` monitoring
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` ramdiskId
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` userData
+
+instance Prelude.NFData LaunchSpecification where
+  rnf LaunchSpecification' {..} =
+    Prelude.rnf addressingType
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf userData
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplate.hs b/gen/Amazonka/EC2/Types/LaunchTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplate.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template.
+--
+-- /See:/ 'newLaunchTemplate' smart constructor.
+data LaunchTemplate = LaunchTemplate'
+  { -- | The time launch template was created.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The principal that created the launch template.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | The version number of the default version of the launch template.
+    defaultVersionNumber :: Prelude.Maybe Prelude.Integer,
+    -- | The version number of the latest version of the launch template.
+    latestVersionNumber :: Prelude.Maybe Prelude.Integer,
+    -- | The ID of the launch template.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the launch template.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'launchTemplate_createTime' - The time launch template was created.
+--
+-- 'createdBy', 'launchTemplate_createdBy' - The principal that created the launch template.
+--
+-- 'defaultVersionNumber', 'launchTemplate_defaultVersionNumber' - The version number of the default version of the launch template.
+--
+-- 'latestVersionNumber', 'launchTemplate_latestVersionNumber' - The version number of the latest version of the launch template.
+--
+-- 'launchTemplateId', 'launchTemplate_launchTemplateId' - The ID of the launch template.
+--
+-- 'launchTemplateName', 'launchTemplate_launchTemplateName' - The name of the launch template.
+--
+-- 'tags', 'launchTemplate_tags' - The tags for the launch template.
+newLaunchTemplate ::
+  LaunchTemplate
+newLaunchTemplate =
+  LaunchTemplate'
+    { createTime = Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      defaultVersionNumber = Prelude.Nothing,
+      latestVersionNumber = Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The time launch template was created.
+launchTemplate_createTime :: Lens.Lens' LaunchTemplate (Prelude.Maybe Prelude.UTCTime)
+launchTemplate_createTime = Lens.lens (\LaunchTemplate' {createTime} -> createTime) (\s@LaunchTemplate' {} a -> s {createTime = a} :: LaunchTemplate) Prelude.. Lens.mapping Data._Time
+
+-- | The principal that created the launch template.
+launchTemplate_createdBy :: Lens.Lens' LaunchTemplate (Prelude.Maybe Prelude.Text)
+launchTemplate_createdBy = Lens.lens (\LaunchTemplate' {createdBy} -> createdBy) (\s@LaunchTemplate' {} a -> s {createdBy = a} :: LaunchTemplate)
+
+-- | The version number of the default version of the launch template.
+launchTemplate_defaultVersionNumber :: Lens.Lens' LaunchTemplate (Prelude.Maybe Prelude.Integer)
+launchTemplate_defaultVersionNumber = Lens.lens (\LaunchTemplate' {defaultVersionNumber} -> defaultVersionNumber) (\s@LaunchTemplate' {} a -> s {defaultVersionNumber = a} :: LaunchTemplate)
+
+-- | The version number of the latest version of the launch template.
+launchTemplate_latestVersionNumber :: Lens.Lens' LaunchTemplate (Prelude.Maybe Prelude.Integer)
+launchTemplate_latestVersionNumber = Lens.lens (\LaunchTemplate' {latestVersionNumber} -> latestVersionNumber) (\s@LaunchTemplate' {} a -> s {latestVersionNumber = a} :: LaunchTemplate)
+
+-- | The ID of the launch template.
+launchTemplate_launchTemplateId :: Lens.Lens' LaunchTemplate (Prelude.Maybe Prelude.Text)
+launchTemplate_launchTemplateId = Lens.lens (\LaunchTemplate' {launchTemplateId} -> launchTemplateId) (\s@LaunchTemplate' {} a -> s {launchTemplateId = a} :: LaunchTemplate)
+
+-- | The name of the launch template.
+launchTemplate_launchTemplateName :: Lens.Lens' LaunchTemplate (Prelude.Maybe Prelude.Text)
+launchTemplate_launchTemplateName = Lens.lens (\LaunchTemplate' {launchTemplateName} -> launchTemplateName) (\s@LaunchTemplate' {} a -> s {launchTemplateName = a} :: LaunchTemplate)
+
+-- | The tags for the launch template.
+launchTemplate_tags :: Lens.Lens' LaunchTemplate (Prelude.Maybe [Tag])
+launchTemplate_tags = Lens.lens (\LaunchTemplate' {tags} -> tags) (\s@LaunchTemplate' {} a -> s {tags = a} :: LaunchTemplate) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML LaunchTemplate where
+  parseXML x =
+    LaunchTemplate'
+      Prelude.<$> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "createdBy")
+      Prelude.<*> (x Data..@? "defaultVersionNumber")
+      Prelude.<*> (x Data..@? "latestVersionNumber")
+      Prelude.<*> (x Data..@? "launchTemplateId")
+      Prelude.<*> (x Data..@? "launchTemplateName")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable LaunchTemplate where
+  hashWithSalt _salt LaunchTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` defaultVersionNumber
+      `Prelude.hashWithSalt` latestVersionNumber
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData LaunchTemplate where
+  rnf LaunchTemplate' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf defaultVersionNumber
+      `Prelude.seq` Prelude.rnf latestVersionNumber
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateAndOverridesResponse.hs b/gen/Amazonka/EC2/Types/LaunchTemplateAndOverridesResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateAndOverridesResponse.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateAndOverridesResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetLaunchTemplateOverrides
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template and overrides.
+--
+-- /See:/ 'newLaunchTemplateAndOverridesResponse' smart constructor.
+data LaunchTemplateAndOverridesResponse = LaunchTemplateAndOverridesResponse'
+  { -- | The launch template.
+    launchTemplateSpecification :: Prelude.Maybe FleetLaunchTemplateSpecification,
+    -- | Any parameters that you specify override the same parameters in the
+    -- launch template.
+    overrides :: Prelude.Maybe FleetLaunchTemplateOverrides
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateAndOverridesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateSpecification', 'launchTemplateAndOverridesResponse_launchTemplateSpecification' - The launch template.
+--
+-- 'overrides', 'launchTemplateAndOverridesResponse_overrides' - Any parameters that you specify override the same parameters in the
+-- launch template.
+newLaunchTemplateAndOverridesResponse ::
+  LaunchTemplateAndOverridesResponse
+newLaunchTemplateAndOverridesResponse =
+  LaunchTemplateAndOverridesResponse'
+    { launchTemplateSpecification =
+        Prelude.Nothing,
+      overrides = Prelude.Nothing
+    }
+
+-- | The launch template.
+launchTemplateAndOverridesResponse_launchTemplateSpecification :: Lens.Lens' LaunchTemplateAndOverridesResponse (Prelude.Maybe FleetLaunchTemplateSpecification)
+launchTemplateAndOverridesResponse_launchTemplateSpecification = Lens.lens (\LaunchTemplateAndOverridesResponse' {launchTemplateSpecification} -> launchTemplateSpecification) (\s@LaunchTemplateAndOverridesResponse' {} a -> s {launchTemplateSpecification = a} :: LaunchTemplateAndOverridesResponse)
+
+-- | Any parameters that you specify override the same parameters in the
+-- launch template.
+launchTemplateAndOverridesResponse_overrides :: Lens.Lens' LaunchTemplateAndOverridesResponse (Prelude.Maybe FleetLaunchTemplateOverrides)
+launchTemplateAndOverridesResponse_overrides = Lens.lens (\LaunchTemplateAndOverridesResponse' {overrides} -> overrides) (\s@LaunchTemplateAndOverridesResponse' {} a -> s {overrides = a} :: LaunchTemplateAndOverridesResponse)
+
+instance
+  Data.FromXML
+    LaunchTemplateAndOverridesResponse
+  where
+  parseXML x =
+    LaunchTemplateAndOverridesResponse'
+      Prelude.<$> (x Data..@? "launchTemplateSpecification")
+      Prelude.<*> (x Data..@? "overrides")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateAndOverridesResponse
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateAndOverridesResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchTemplateSpecification
+        `Prelude.hashWithSalt` overrides
+
+instance
+  Prelude.NFData
+    LaunchTemplateAndOverridesResponse
+  where
+  rnf LaunchTemplateAndOverridesResponse' {..} =
+    Prelude.rnf launchTemplateSpecification
+      `Prelude.seq` Prelude.rnf overrides
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateAutoRecoveryState.hs b/gen/Amazonka/EC2/Types/LaunchTemplateAutoRecoveryState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateAutoRecoveryState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateAutoRecoveryState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateAutoRecoveryState
+  ( LaunchTemplateAutoRecoveryState
+      ( ..,
+        LaunchTemplateAutoRecoveryState_Default,
+        LaunchTemplateAutoRecoveryState_Disabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateAutoRecoveryState = LaunchTemplateAutoRecoveryState'
+  { fromLaunchTemplateAutoRecoveryState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateAutoRecoveryState_Default :: LaunchTemplateAutoRecoveryState
+pattern LaunchTemplateAutoRecoveryState_Default = LaunchTemplateAutoRecoveryState' "default"
+
+pattern LaunchTemplateAutoRecoveryState_Disabled :: LaunchTemplateAutoRecoveryState
+pattern LaunchTemplateAutoRecoveryState_Disabled = LaunchTemplateAutoRecoveryState' "disabled"
+
+{-# COMPLETE
+  LaunchTemplateAutoRecoveryState_Default,
+  LaunchTemplateAutoRecoveryState_Disabled,
+  LaunchTemplateAutoRecoveryState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateBlockDeviceMapping.hs b/gen/Amazonka/EC2/Types/LaunchTemplateBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateBlockDeviceMapping.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateBlockDeviceMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateBlockDeviceMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateEbsBlockDevice
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device mapping.
+--
+-- /See:/ 'newLaunchTemplateBlockDeviceMapping' smart constructor.
+data LaunchTemplateBlockDeviceMapping = LaunchTemplateBlockDeviceMapping'
+  { -- | The device name.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the block device for an EBS volume.
+    ebs :: Prelude.Maybe LaunchTemplateEbsBlockDevice,
+    -- | To omit the device from the block device mapping, specify an empty
+    -- string.
+    noDevice :: Prelude.Maybe Prelude.Text,
+    -- | The virtual device name (ephemeralN).
+    virtualName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateBlockDeviceMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'launchTemplateBlockDeviceMapping_deviceName' - The device name.
+--
+-- 'ebs', 'launchTemplateBlockDeviceMapping_ebs' - Information about the block device for an EBS volume.
+--
+-- 'noDevice', 'launchTemplateBlockDeviceMapping_noDevice' - To omit the device from the block device mapping, specify an empty
+-- string.
+--
+-- 'virtualName', 'launchTemplateBlockDeviceMapping_virtualName' - The virtual device name (ephemeralN).
+newLaunchTemplateBlockDeviceMapping ::
+  LaunchTemplateBlockDeviceMapping
+newLaunchTemplateBlockDeviceMapping =
+  LaunchTemplateBlockDeviceMapping'
+    { deviceName =
+        Prelude.Nothing,
+      ebs = Prelude.Nothing,
+      noDevice = Prelude.Nothing,
+      virtualName = Prelude.Nothing
+    }
+
+-- | The device name.
+launchTemplateBlockDeviceMapping_deviceName :: Lens.Lens' LaunchTemplateBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+launchTemplateBlockDeviceMapping_deviceName = Lens.lens (\LaunchTemplateBlockDeviceMapping' {deviceName} -> deviceName) (\s@LaunchTemplateBlockDeviceMapping' {} a -> s {deviceName = a} :: LaunchTemplateBlockDeviceMapping)
+
+-- | Information about the block device for an EBS volume.
+launchTemplateBlockDeviceMapping_ebs :: Lens.Lens' LaunchTemplateBlockDeviceMapping (Prelude.Maybe LaunchTemplateEbsBlockDevice)
+launchTemplateBlockDeviceMapping_ebs = Lens.lens (\LaunchTemplateBlockDeviceMapping' {ebs} -> ebs) (\s@LaunchTemplateBlockDeviceMapping' {} a -> s {ebs = a} :: LaunchTemplateBlockDeviceMapping)
+
+-- | To omit the device from the block device mapping, specify an empty
+-- string.
+launchTemplateBlockDeviceMapping_noDevice :: Lens.Lens' LaunchTemplateBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+launchTemplateBlockDeviceMapping_noDevice = Lens.lens (\LaunchTemplateBlockDeviceMapping' {noDevice} -> noDevice) (\s@LaunchTemplateBlockDeviceMapping' {} a -> s {noDevice = a} :: LaunchTemplateBlockDeviceMapping)
+
+-- | The virtual device name (ephemeralN).
+launchTemplateBlockDeviceMapping_virtualName :: Lens.Lens' LaunchTemplateBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+launchTemplateBlockDeviceMapping_virtualName = Lens.lens (\LaunchTemplateBlockDeviceMapping' {virtualName} -> virtualName) (\s@LaunchTemplateBlockDeviceMapping' {} a -> s {virtualName = a} :: LaunchTemplateBlockDeviceMapping)
+
+instance
+  Data.FromXML
+    LaunchTemplateBlockDeviceMapping
+  where
+  parseXML x =
+    LaunchTemplateBlockDeviceMapping'
+      Prelude.<$> (x Data..@? "deviceName")
+      Prelude.<*> (x Data..@? "ebs")
+      Prelude.<*> (x Data..@? "noDevice")
+      Prelude.<*> (x Data..@? "virtualName")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateBlockDeviceMapping
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateBlockDeviceMapping' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` ebs
+        `Prelude.hashWithSalt` noDevice
+        `Prelude.hashWithSalt` virtualName
+
+instance
+  Prelude.NFData
+    LaunchTemplateBlockDeviceMapping
+  where
+  rnf LaunchTemplateBlockDeviceMapping' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf ebs
+      `Prelude.seq` Prelude.rnf noDevice
+      `Prelude.seq` Prelude.rnf virtualName
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateBlockDeviceMappingRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateBlockDeviceMappingRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateBlockDeviceMappingRequest.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateBlockDeviceMappingRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateBlockDeviceMappingRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateEbsBlockDeviceRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device mapping.
+--
+-- /See:/ 'newLaunchTemplateBlockDeviceMappingRequest' smart constructor.
+data LaunchTemplateBlockDeviceMappingRequest = LaunchTemplateBlockDeviceMappingRequest'
+  { -- | The device name (for example, \/dev\/sdh or xvdh).
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Parameters used to automatically set up EBS volumes when the instance is
+    -- launched.
+    ebs :: Prelude.Maybe LaunchTemplateEbsBlockDeviceRequest,
+    -- | To omit the device from the block device mapping, specify an empty
+    -- string.
+    noDevice :: Prelude.Maybe Prelude.Text,
+    -- | 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.
+    virtualName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateBlockDeviceMappingRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'launchTemplateBlockDeviceMappingRequest_deviceName' - The device name (for example, \/dev\/sdh or xvdh).
+--
+-- 'ebs', 'launchTemplateBlockDeviceMappingRequest_ebs' - Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+--
+-- 'noDevice', 'launchTemplateBlockDeviceMappingRequest_noDevice' - To omit the device from the block device mapping, specify an empty
+-- string.
+--
+-- 'virtualName', 'launchTemplateBlockDeviceMappingRequest_virtualName' - 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.
+newLaunchTemplateBlockDeviceMappingRequest ::
+  LaunchTemplateBlockDeviceMappingRequest
+newLaunchTemplateBlockDeviceMappingRequest =
+  LaunchTemplateBlockDeviceMappingRequest'
+    { deviceName =
+        Prelude.Nothing,
+      ebs = Prelude.Nothing,
+      noDevice = Prelude.Nothing,
+      virtualName = Prelude.Nothing
+    }
+
+-- | The device name (for example, \/dev\/sdh or xvdh).
+launchTemplateBlockDeviceMappingRequest_deviceName :: Lens.Lens' LaunchTemplateBlockDeviceMappingRequest (Prelude.Maybe Prelude.Text)
+launchTemplateBlockDeviceMappingRequest_deviceName = Lens.lens (\LaunchTemplateBlockDeviceMappingRequest' {deviceName} -> deviceName) (\s@LaunchTemplateBlockDeviceMappingRequest' {} a -> s {deviceName = a} :: LaunchTemplateBlockDeviceMappingRequest)
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+launchTemplateBlockDeviceMappingRequest_ebs :: Lens.Lens' LaunchTemplateBlockDeviceMappingRequest (Prelude.Maybe LaunchTemplateEbsBlockDeviceRequest)
+launchTemplateBlockDeviceMappingRequest_ebs = Lens.lens (\LaunchTemplateBlockDeviceMappingRequest' {ebs} -> ebs) (\s@LaunchTemplateBlockDeviceMappingRequest' {} a -> s {ebs = a} :: LaunchTemplateBlockDeviceMappingRequest)
+
+-- | To omit the device from the block device mapping, specify an empty
+-- string.
+launchTemplateBlockDeviceMappingRequest_noDevice :: Lens.Lens' LaunchTemplateBlockDeviceMappingRequest (Prelude.Maybe Prelude.Text)
+launchTemplateBlockDeviceMappingRequest_noDevice = Lens.lens (\LaunchTemplateBlockDeviceMappingRequest' {noDevice} -> noDevice) (\s@LaunchTemplateBlockDeviceMappingRequest' {} a -> s {noDevice = a} :: LaunchTemplateBlockDeviceMappingRequest)
+
+-- | 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.
+launchTemplateBlockDeviceMappingRequest_virtualName :: Lens.Lens' LaunchTemplateBlockDeviceMappingRequest (Prelude.Maybe Prelude.Text)
+launchTemplateBlockDeviceMappingRequest_virtualName = Lens.lens (\LaunchTemplateBlockDeviceMappingRequest' {virtualName} -> virtualName) (\s@LaunchTemplateBlockDeviceMappingRequest' {} a -> s {virtualName = a} :: LaunchTemplateBlockDeviceMappingRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateBlockDeviceMappingRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateBlockDeviceMappingRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` ebs
+        `Prelude.hashWithSalt` noDevice
+        `Prelude.hashWithSalt` virtualName
+
+instance
+  Prelude.NFData
+    LaunchTemplateBlockDeviceMappingRequest
+  where
+  rnf LaunchTemplateBlockDeviceMappingRequest' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf ebs
+      `Prelude.seq` Prelude.rnf noDevice
+      `Prelude.seq` Prelude.rnf virtualName
+
+instance
+  Data.ToQuery
+    LaunchTemplateBlockDeviceMappingRequest
+  where
+  toQuery LaunchTemplateBlockDeviceMappingRequest' {..} =
+    Prelude.mconcat
+      [ "DeviceName" Data.=: deviceName,
+        "Ebs" Data.=: ebs,
+        "NoDevice" Data.=: noDevice,
+        "VirtualName" Data.=: virtualName
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateCapacityReservationSpecificationRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateCapacityReservationSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateCapacityReservationSpecificationRequest.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationPreference
+import Amazonka.EC2.Types.CapacityReservationTarget
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an instance\'s Capacity Reservation targeting option. You can
+-- specify only one option at a time. Use the
+-- @CapacityReservationPreference@ parameter to configure the instance to
+-- run in On-Demand capacity or to run in any @open@ Capacity Reservation
+-- that has matching attributes (instance type, platform, Availability
+-- Zone). Use the @CapacityReservationTarget@ parameter to explicitly
+-- target a specific Capacity Reservation or a Capacity Reservation group.
+--
+-- /See:/ 'newLaunchTemplateCapacityReservationSpecificationRequest' smart constructor.
+data LaunchTemplateCapacityReservationSpecificationRequest = LaunchTemplateCapacityReservationSpecificationRequest'
+  { -- | Indicates the instance\'s Capacity Reservation preferences. Possible
+    -- preferences include:
+    --
+    -- -   @open@ - The instance can run in any @open@ Capacity Reservation
+    --     that has matching attributes (instance type, platform, Availability
+    --     Zone).
+    --
+    -- -   @none@ - The instance avoids running in a Capacity Reservation even
+    --     if one is available. The instance runs in On-Demand capacity.
+    capacityReservationPreference :: Prelude.Maybe CapacityReservationPreference,
+    -- | Information about the target Capacity Reservation or Capacity
+    -- Reservation group.
+    capacityReservationTarget :: Prelude.Maybe CapacityReservationTarget
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateCapacityReservationSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationPreference', 'launchTemplateCapacityReservationSpecificationRequest_capacityReservationPreference' - Indicates the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs in On-Demand capacity.
+--
+-- 'capacityReservationTarget', 'launchTemplateCapacityReservationSpecificationRequest_capacityReservationTarget' - Information about the target Capacity Reservation or Capacity
+-- Reservation group.
+newLaunchTemplateCapacityReservationSpecificationRequest ::
+  LaunchTemplateCapacityReservationSpecificationRequest
+newLaunchTemplateCapacityReservationSpecificationRequest =
+  LaunchTemplateCapacityReservationSpecificationRequest'
+    { capacityReservationPreference =
+        Prelude.Nothing,
+      capacityReservationTarget =
+        Prelude.Nothing
+    }
+
+-- | Indicates the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs in On-Demand capacity.
+launchTemplateCapacityReservationSpecificationRequest_capacityReservationPreference :: Lens.Lens' LaunchTemplateCapacityReservationSpecificationRequest (Prelude.Maybe CapacityReservationPreference)
+launchTemplateCapacityReservationSpecificationRequest_capacityReservationPreference = Lens.lens (\LaunchTemplateCapacityReservationSpecificationRequest' {capacityReservationPreference} -> capacityReservationPreference) (\s@LaunchTemplateCapacityReservationSpecificationRequest' {} a -> s {capacityReservationPreference = a} :: LaunchTemplateCapacityReservationSpecificationRequest)
+
+-- | Information about the target Capacity Reservation or Capacity
+-- Reservation group.
+launchTemplateCapacityReservationSpecificationRequest_capacityReservationTarget :: Lens.Lens' LaunchTemplateCapacityReservationSpecificationRequest (Prelude.Maybe CapacityReservationTarget)
+launchTemplateCapacityReservationSpecificationRequest_capacityReservationTarget = Lens.lens (\LaunchTemplateCapacityReservationSpecificationRequest' {capacityReservationTarget} -> capacityReservationTarget) (\s@LaunchTemplateCapacityReservationSpecificationRequest' {} a -> s {capacityReservationTarget = a} :: LaunchTemplateCapacityReservationSpecificationRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateCapacityReservationSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateCapacityReservationSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationPreference
+        `Prelude.hashWithSalt` capacityReservationTarget
+
+instance
+  Prelude.NFData
+    LaunchTemplateCapacityReservationSpecificationRequest
+  where
+  rnf
+    LaunchTemplateCapacityReservationSpecificationRequest' {..} =
+      Prelude.rnf capacityReservationPreference
+        `Prelude.seq` Prelude.rnf capacityReservationTarget
+
+instance
+  Data.ToQuery
+    LaunchTemplateCapacityReservationSpecificationRequest
+  where
+  toQuery
+    LaunchTemplateCapacityReservationSpecificationRequest' {..} =
+      Prelude.mconcat
+        [ "CapacityReservationPreference"
+            Data.=: capacityReservationPreference,
+          "CapacityReservationTarget"
+            Data.=: capacityReservationTarget
+        ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateCapacityReservationSpecificationResponse.hs b/gen/Amazonka/EC2/Types/LaunchTemplateCapacityReservationSpecificationResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateCapacityReservationSpecificationResponse.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationPreference
+import Amazonka.EC2.Types.CapacityReservationTargetResponse
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the Capacity Reservation targeting option.
+--
+-- /See:/ 'newLaunchTemplateCapacityReservationSpecificationResponse' smart constructor.
+data LaunchTemplateCapacityReservationSpecificationResponse = LaunchTemplateCapacityReservationSpecificationResponse'
+  { -- | Indicates the instance\'s Capacity Reservation preferences. Possible
+    -- preferences include:
+    --
+    -- -   @open@ - The instance can run in any @open@ Capacity Reservation
+    --     that has matching attributes (instance type, platform, Availability
+    --     Zone).
+    --
+    -- -   @none@ - The instance avoids running in a Capacity Reservation even
+    --     if one is available. The instance runs in On-Demand capacity.
+    capacityReservationPreference :: Prelude.Maybe CapacityReservationPreference,
+    -- | Information about the target Capacity Reservation or Capacity
+    -- Reservation group.
+    capacityReservationTarget :: Prelude.Maybe CapacityReservationTargetResponse
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateCapacityReservationSpecificationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityReservationPreference', 'launchTemplateCapacityReservationSpecificationResponse_capacityReservationPreference' - Indicates the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs in On-Demand capacity.
+--
+-- 'capacityReservationTarget', 'launchTemplateCapacityReservationSpecificationResponse_capacityReservationTarget' - Information about the target Capacity Reservation or Capacity
+-- Reservation group.
+newLaunchTemplateCapacityReservationSpecificationResponse ::
+  LaunchTemplateCapacityReservationSpecificationResponse
+newLaunchTemplateCapacityReservationSpecificationResponse =
+  LaunchTemplateCapacityReservationSpecificationResponse'
+    { capacityReservationPreference =
+        Prelude.Nothing,
+      capacityReservationTarget =
+        Prelude.Nothing
+    }
+
+-- | Indicates the instance\'s Capacity Reservation preferences. Possible
+-- preferences include:
+--
+-- -   @open@ - The instance can run in any @open@ Capacity Reservation
+--     that has matching attributes (instance type, platform, Availability
+--     Zone).
+--
+-- -   @none@ - The instance avoids running in a Capacity Reservation even
+--     if one is available. The instance runs in On-Demand capacity.
+launchTemplateCapacityReservationSpecificationResponse_capacityReservationPreference :: Lens.Lens' LaunchTemplateCapacityReservationSpecificationResponse (Prelude.Maybe CapacityReservationPreference)
+launchTemplateCapacityReservationSpecificationResponse_capacityReservationPreference = Lens.lens (\LaunchTemplateCapacityReservationSpecificationResponse' {capacityReservationPreference} -> capacityReservationPreference) (\s@LaunchTemplateCapacityReservationSpecificationResponse' {} a -> s {capacityReservationPreference = a} :: LaunchTemplateCapacityReservationSpecificationResponse)
+
+-- | Information about the target Capacity Reservation or Capacity
+-- Reservation group.
+launchTemplateCapacityReservationSpecificationResponse_capacityReservationTarget :: Lens.Lens' LaunchTemplateCapacityReservationSpecificationResponse (Prelude.Maybe CapacityReservationTargetResponse)
+launchTemplateCapacityReservationSpecificationResponse_capacityReservationTarget = Lens.lens (\LaunchTemplateCapacityReservationSpecificationResponse' {capacityReservationTarget} -> capacityReservationTarget) (\s@LaunchTemplateCapacityReservationSpecificationResponse' {} a -> s {capacityReservationTarget = a} :: LaunchTemplateCapacityReservationSpecificationResponse)
+
+instance
+  Data.FromXML
+    LaunchTemplateCapacityReservationSpecificationResponse
+  where
+  parseXML x =
+    LaunchTemplateCapacityReservationSpecificationResponse'
+      Prelude.<$> (x Data..@? "capacityReservationPreference")
+      Prelude.<*> (x Data..@? "capacityReservationTarget")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateCapacityReservationSpecificationResponse
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateCapacityReservationSpecificationResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` capacityReservationPreference
+        `Prelude.hashWithSalt` capacityReservationTarget
+
+instance
+  Prelude.NFData
+    LaunchTemplateCapacityReservationSpecificationResponse
+  where
+  rnf
+    LaunchTemplateCapacityReservationSpecificationResponse' {..} =
+      Prelude.rnf capacityReservationPreference
+        `Prelude.seq` Prelude.rnf capacityReservationTarget
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateConfig.hs b/gen/Amazonka/EC2/Types/LaunchTemplateConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateConfig.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetLaunchTemplateSpecification
+import Amazonka.EC2.Types.LaunchTemplateOverrides
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template and overrides.
+--
+-- /See:/ 'newLaunchTemplateConfig' smart constructor.
+data LaunchTemplateConfig = LaunchTemplateConfig'
+  { -- | The launch template.
+    launchTemplateSpecification :: Prelude.Maybe FleetLaunchTemplateSpecification,
+    -- | Any parameters that you specify override the same parameters in the
+    -- launch template.
+    overrides :: Prelude.Maybe [LaunchTemplateOverrides]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateSpecification', 'launchTemplateConfig_launchTemplateSpecification' - The launch template.
+--
+-- 'overrides', 'launchTemplateConfig_overrides' - Any parameters that you specify override the same parameters in the
+-- launch template.
+newLaunchTemplateConfig ::
+  LaunchTemplateConfig
+newLaunchTemplateConfig =
+  LaunchTemplateConfig'
+    { launchTemplateSpecification =
+        Prelude.Nothing,
+      overrides = Prelude.Nothing
+    }
+
+-- | The launch template.
+launchTemplateConfig_launchTemplateSpecification :: Lens.Lens' LaunchTemplateConfig (Prelude.Maybe FleetLaunchTemplateSpecification)
+launchTemplateConfig_launchTemplateSpecification = Lens.lens (\LaunchTemplateConfig' {launchTemplateSpecification} -> launchTemplateSpecification) (\s@LaunchTemplateConfig' {} a -> s {launchTemplateSpecification = a} :: LaunchTemplateConfig)
+
+-- | Any parameters that you specify override the same parameters in the
+-- launch template.
+launchTemplateConfig_overrides :: Lens.Lens' LaunchTemplateConfig (Prelude.Maybe [LaunchTemplateOverrides])
+launchTemplateConfig_overrides = Lens.lens (\LaunchTemplateConfig' {overrides} -> overrides) (\s@LaunchTemplateConfig' {} a -> s {overrides = a} :: LaunchTemplateConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML LaunchTemplateConfig where
+  parseXML x =
+    LaunchTemplateConfig'
+      Prelude.<$> (x Data..@? "launchTemplateSpecification")
+      Prelude.<*> ( x
+                      Data..@? "overrides"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable LaunchTemplateConfig where
+  hashWithSalt _salt LaunchTemplateConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchTemplateSpecification
+      `Prelude.hashWithSalt` overrides
+
+instance Prelude.NFData LaunchTemplateConfig where
+  rnf LaunchTemplateConfig' {..} =
+    Prelude.rnf launchTemplateSpecification
+      `Prelude.seq` Prelude.rnf overrides
+
+instance Data.ToQuery LaunchTemplateConfig where
+  toQuery LaunchTemplateConfig' {..} =
+    Prelude.mconcat
+      [ "LaunchTemplateSpecification"
+          Data.=: launchTemplateSpecification,
+        Data.toQuery
+          (Data.toQueryList "Overrides" Prelude.<$> overrides)
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateCpuOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateCpuOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateCpuOptions.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateCpuOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateCpuOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The CPU options for the instance.
+--
+-- /See:/ 'newLaunchTemplateCpuOptions' smart constructor.
+data LaunchTemplateCpuOptions = LaunchTemplateCpuOptions'
+  { -- | The number of CPU cores for the instance.
+    coreCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of threads per CPU core.
+    threadsPerCore :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateCpuOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coreCount', 'launchTemplateCpuOptions_coreCount' - The number of CPU cores for the instance.
+--
+-- 'threadsPerCore', 'launchTemplateCpuOptions_threadsPerCore' - The number of threads per CPU core.
+newLaunchTemplateCpuOptions ::
+  LaunchTemplateCpuOptions
+newLaunchTemplateCpuOptions =
+  LaunchTemplateCpuOptions'
+    { coreCount =
+        Prelude.Nothing,
+      threadsPerCore = Prelude.Nothing
+    }
+
+-- | The number of CPU cores for the instance.
+launchTemplateCpuOptions_coreCount :: Lens.Lens' LaunchTemplateCpuOptions (Prelude.Maybe Prelude.Int)
+launchTemplateCpuOptions_coreCount = Lens.lens (\LaunchTemplateCpuOptions' {coreCount} -> coreCount) (\s@LaunchTemplateCpuOptions' {} a -> s {coreCount = a} :: LaunchTemplateCpuOptions)
+
+-- | The number of threads per CPU core.
+launchTemplateCpuOptions_threadsPerCore :: Lens.Lens' LaunchTemplateCpuOptions (Prelude.Maybe Prelude.Int)
+launchTemplateCpuOptions_threadsPerCore = Lens.lens (\LaunchTemplateCpuOptions' {threadsPerCore} -> threadsPerCore) (\s@LaunchTemplateCpuOptions' {} a -> s {threadsPerCore = a} :: LaunchTemplateCpuOptions)
+
+instance Data.FromXML LaunchTemplateCpuOptions where
+  parseXML x =
+    LaunchTemplateCpuOptions'
+      Prelude.<$> (x Data..@? "coreCount")
+      Prelude.<*> (x Data..@? "threadsPerCore")
+
+instance Prelude.Hashable LaunchTemplateCpuOptions where
+  hashWithSalt _salt LaunchTemplateCpuOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` coreCount
+      `Prelude.hashWithSalt` threadsPerCore
+
+instance Prelude.NFData LaunchTemplateCpuOptions where
+  rnf LaunchTemplateCpuOptions' {..} =
+    Prelude.rnf coreCount
+      `Prelude.seq` Prelude.rnf threadsPerCore
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateCpuOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateCpuOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateCpuOptionsRequest.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateCpuOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateCpuOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The CPU options for the instance. Both the core count and threads per
+-- core must be specified in the request.
+--
+-- /See:/ 'newLaunchTemplateCpuOptionsRequest' smart constructor.
+data LaunchTemplateCpuOptionsRequest = LaunchTemplateCpuOptionsRequest'
+  { -- | The number of CPU cores for the instance.
+    coreCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of threads per CPU core. To disable multithreading for the
+    -- instance, specify a value of @1@. Otherwise, specify the default value
+    -- of @2@.
+    threadsPerCore :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateCpuOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coreCount', 'launchTemplateCpuOptionsRequest_coreCount' - The number of CPU cores for the instance.
+--
+-- 'threadsPerCore', 'launchTemplateCpuOptionsRequest_threadsPerCore' - The number of threads per CPU core. To disable multithreading for the
+-- instance, specify a value of @1@. Otherwise, specify the default value
+-- of @2@.
+newLaunchTemplateCpuOptionsRequest ::
+  LaunchTemplateCpuOptionsRequest
+newLaunchTemplateCpuOptionsRequest =
+  LaunchTemplateCpuOptionsRequest'
+    { coreCount =
+        Prelude.Nothing,
+      threadsPerCore = Prelude.Nothing
+    }
+
+-- | The number of CPU cores for the instance.
+launchTemplateCpuOptionsRequest_coreCount :: Lens.Lens' LaunchTemplateCpuOptionsRequest (Prelude.Maybe Prelude.Int)
+launchTemplateCpuOptionsRequest_coreCount = Lens.lens (\LaunchTemplateCpuOptionsRequest' {coreCount} -> coreCount) (\s@LaunchTemplateCpuOptionsRequest' {} a -> s {coreCount = a} :: LaunchTemplateCpuOptionsRequest)
+
+-- | The number of threads per CPU core. To disable multithreading for the
+-- instance, specify a value of @1@. Otherwise, specify the default value
+-- of @2@.
+launchTemplateCpuOptionsRequest_threadsPerCore :: Lens.Lens' LaunchTemplateCpuOptionsRequest (Prelude.Maybe Prelude.Int)
+launchTemplateCpuOptionsRequest_threadsPerCore = Lens.lens (\LaunchTemplateCpuOptionsRequest' {threadsPerCore} -> threadsPerCore) (\s@LaunchTemplateCpuOptionsRequest' {} a -> s {threadsPerCore = a} :: LaunchTemplateCpuOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateCpuOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateCpuOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` coreCount
+        `Prelude.hashWithSalt` threadsPerCore
+
+instance
+  Prelude.NFData
+    LaunchTemplateCpuOptionsRequest
+  where
+  rnf LaunchTemplateCpuOptionsRequest' {..} =
+    Prelude.rnf coreCount
+      `Prelude.seq` Prelude.rnf threadsPerCore
+
+instance Data.ToQuery LaunchTemplateCpuOptionsRequest where
+  toQuery LaunchTemplateCpuOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "CoreCount" Data.=: coreCount,
+        "ThreadsPerCore" Data.=: threadsPerCore
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateEbsBlockDevice.hs b/gen/Amazonka/EC2/Types/LaunchTemplateEbsBlockDevice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateEbsBlockDevice.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateEbsBlockDevice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateEbsBlockDevice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device for an EBS volume.
+--
+-- /See:/ 'newLaunchTemplateEbsBlockDevice' smart constructor.
+data LaunchTemplateEbsBlockDevice = LaunchTemplateEbsBlockDevice'
+  { -- | Indicates whether the EBS volume is deleted on instance termination.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the EBS volume is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The number of I\/O operations per second (IOPS) that the volume
+    -- supports.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the Key Management Service (KMS) CMK used for encryption.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The throughput that the volume supports, in MiB\/s.
+    throughput :: Prelude.Maybe Prelude.Int,
+    -- | The size of the volume, in GiB.
+    volumeSize :: Prelude.Maybe Prelude.Int,
+    -- | The volume type.
+    volumeType :: Prelude.Maybe VolumeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateEbsBlockDevice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteOnTermination', 'launchTemplateEbsBlockDevice_deleteOnTermination' - Indicates whether the EBS volume is deleted on instance termination.
+--
+-- 'encrypted', 'launchTemplateEbsBlockDevice_encrypted' - Indicates whether the EBS volume is encrypted.
+--
+-- 'iops', 'launchTemplateEbsBlockDevice_iops' - The number of I\/O operations per second (IOPS) that the volume
+-- supports.
+--
+-- 'kmsKeyId', 'launchTemplateEbsBlockDevice_kmsKeyId' - The ARN of the Key Management Service (KMS) CMK used for encryption.
+--
+-- 'snapshotId', 'launchTemplateEbsBlockDevice_snapshotId' - The ID of the snapshot.
+--
+-- 'throughput', 'launchTemplateEbsBlockDevice_throughput' - The throughput that the volume supports, in MiB\/s.
+--
+-- 'volumeSize', 'launchTemplateEbsBlockDevice_volumeSize' - The size of the volume, in GiB.
+--
+-- 'volumeType', 'launchTemplateEbsBlockDevice_volumeType' - The volume type.
+newLaunchTemplateEbsBlockDevice ::
+  LaunchTemplateEbsBlockDevice
+newLaunchTemplateEbsBlockDevice =
+  LaunchTemplateEbsBlockDevice'
+    { deleteOnTermination =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeSize = Prelude.Nothing,
+      volumeType = Prelude.Nothing
+    }
+
+-- | Indicates whether the EBS volume is deleted on instance termination.
+launchTemplateEbsBlockDevice_deleteOnTermination :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Bool)
+launchTemplateEbsBlockDevice_deleteOnTermination = Lens.lens (\LaunchTemplateEbsBlockDevice' {deleteOnTermination} -> deleteOnTermination) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {deleteOnTermination = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | Indicates whether the EBS volume is encrypted.
+launchTemplateEbsBlockDevice_encrypted :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Bool)
+launchTemplateEbsBlockDevice_encrypted = Lens.lens (\LaunchTemplateEbsBlockDevice' {encrypted} -> encrypted) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {encrypted = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | The number of I\/O operations per second (IOPS) that the volume
+-- supports.
+launchTemplateEbsBlockDevice_iops :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Int)
+launchTemplateEbsBlockDevice_iops = Lens.lens (\LaunchTemplateEbsBlockDevice' {iops} -> iops) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {iops = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | The ARN of the Key Management Service (KMS) CMK used for encryption.
+launchTemplateEbsBlockDevice_kmsKeyId :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Text)
+launchTemplateEbsBlockDevice_kmsKeyId = Lens.lens (\LaunchTemplateEbsBlockDevice' {kmsKeyId} -> kmsKeyId) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {kmsKeyId = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | The ID of the snapshot.
+launchTemplateEbsBlockDevice_snapshotId :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Text)
+launchTemplateEbsBlockDevice_snapshotId = Lens.lens (\LaunchTemplateEbsBlockDevice' {snapshotId} -> snapshotId) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {snapshotId = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | The throughput that the volume supports, in MiB\/s.
+launchTemplateEbsBlockDevice_throughput :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Int)
+launchTemplateEbsBlockDevice_throughput = Lens.lens (\LaunchTemplateEbsBlockDevice' {throughput} -> throughput) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {throughput = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | The size of the volume, in GiB.
+launchTemplateEbsBlockDevice_volumeSize :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe Prelude.Int)
+launchTemplateEbsBlockDevice_volumeSize = Lens.lens (\LaunchTemplateEbsBlockDevice' {volumeSize} -> volumeSize) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {volumeSize = a} :: LaunchTemplateEbsBlockDevice)
+
+-- | The volume type.
+launchTemplateEbsBlockDevice_volumeType :: Lens.Lens' LaunchTemplateEbsBlockDevice (Prelude.Maybe VolumeType)
+launchTemplateEbsBlockDevice_volumeType = Lens.lens (\LaunchTemplateEbsBlockDevice' {volumeType} -> volumeType) (\s@LaunchTemplateEbsBlockDevice' {} a -> s {volumeType = a} :: LaunchTemplateEbsBlockDevice)
+
+instance Data.FromXML LaunchTemplateEbsBlockDevice where
+  parseXML x =
+    LaunchTemplateEbsBlockDevice'
+      Prelude.<$> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "encrypted")
+      Prelude.<*> (x Data..@? "iops")
+      Prelude.<*> (x Data..@? "kmsKeyId")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "throughput")
+      Prelude.<*> (x Data..@? "volumeSize")
+      Prelude.<*> (x Data..@? "volumeType")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateEbsBlockDevice
+  where
+  hashWithSalt _salt LaunchTemplateEbsBlockDevice' {..} =
+    _salt
+      `Prelude.hashWithSalt` deleteOnTermination
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` throughput
+      `Prelude.hashWithSalt` volumeSize
+      `Prelude.hashWithSalt` volumeType
+
+instance Prelude.NFData LaunchTemplateEbsBlockDevice where
+  rnf LaunchTemplateEbsBlockDevice' {..} =
+    Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf volumeType
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateEbsBlockDeviceRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateEbsBlockDeviceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateEbsBlockDeviceRequest.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateEbsBlockDeviceRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateEbsBlockDeviceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The parameters for a block device for an EBS volume.
+--
+-- /See:/ 'newLaunchTemplateEbsBlockDeviceRequest' smart constructor.
+data LaunchTemplateEbsBlockDeviceRequest = LaunchTemplateEbsBlockDeviceRequest'
+  { -- | Indicates whether the EBS volume is deleted on instance termination.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the EBS volume is encrypted. Encrypted volumes can
+    -- only be attached to instances that support Amazon EBS encryption. If you
+    -- are creating a volume from a snapshot, you can\'t specify an encryption
+    -- value.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+    -- @io2@ volumes, this represents the number of IOPS that are provisioned
+    -- for the volume. For @gp2@ volumes, this represents the baseline
+    -- performance of the volume and the rate at which the volume accumulates
+    -- I\/O credits for bursting.
+    --
+    -- The following are the supported values for each volume type:
+    --
+    -- -   @gp3@: 3,000-16,000 IOPS
+    --
+    -- -   @io1@: 100-64,000 IOPS
+    --
+    -- -   @io2@: 100-64,000 IOPS
+    --
+    -- For @io1@ and @io2@ volumes, we guarantee 64,000 IOPS only for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+    -- Other instance families guarantee performance up to 32,000 IOPS.
+    --
+    -- This parameter is supported for @io1@, @io2@, and @gp3@ volumes only.
+    -- This parameter is not supported for @gp2@, @st1@, @sc1@, or @standard@
+    -- volumes.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the symmetric Key Management Service (KMS) CMK used for
+    -- encryption.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The throughput to provision for a @gp3@ volume, with a maximum of 1,000
+    -- MiB\/s.
+    --
+    -- Valid Range: Minimum value of 125. Maximum value of 1000.
+    throughput :: Prelude.Maybe Prelude.Int,
+    -- | The size of the volume, in GiBs. You must specify either a snapshot ID
+    -- or a volume size. The following are the supported volumes sizes for each
+    -- volume type:
+    --
+    -- -   @gp2@ and @gp3@: 1-16,384
+    --
+    -- -   @io1@ and @io2@: 4-16,384
+    --
+    -- -   @st1@ and @sc1@: 125-16,384
+    --
+    -- -   @standard@: 1-1,024
+    volumeSize :: Prelude.Maybe Prelude.Int,
+    -- | The volume type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    volumeType :: Prelude.Maybe VolumeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateEbsBlockDeviceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteOnTermination', 'launchTemplateEbsBlockDeviceRequest_deleteOnTermination' - Indicates whether the EBS volume is deleted on instance termination.
+--
+-- 'encrypted', 'launchTemplateEbsBlockDeviceRequest_encrypted' - Indicates whether the EBS volume is encrypted. Encrypted volumes can
+-- only be attached to instances that support Amazon EBS encryption. If you
+-- are creating a volume from a snapshot, you can\'t specify an encryption
+-- value.
+--
+-- 'iops', 'launchTemplateEbsBlockDeviceRequest_iops' - The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- For @io1@ and @io2@ volumes, we guarantee 64,000 IOPS only for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+-- Other instance families guarantee performance up to 32,000 IOPS.
+--
+-- This parameter is supported for @io1@, @io2@, and @gp3@ volumes only.
+-- This parameter is not supported for @gp2@, @st1@, @sc1@, or @standard@
+-- volumes.
+--
+-- 'kmsKeyId', 'launchTemplateEbsBlockDeviceRequest_kmsKeyId' - The ARN of the symmetric Key Management Service (KMS) CMK used for
+-- encryption.
+--
+-- 'snapshotId', 'launchTemplateEbsBlockDeviceRequest_snapshotId' - The ID of the snapshot.
+--
+-- 'throughput', 'launchTemplateEbsBlockDeviceRequest_throughput' - The throughput to provision for a @gp3@ volume, with a maximum of 1,000
+-- MiB\/s.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+--
+-- 'volumeSize', 'launchTemplateEbsBlockDeviceRequest_volumeSize' - The size of the volume, in GiBs. You must specify either a snapshot ID
+-- or a volume size. The following are the supported volumes sizes for each
+-- volume type:
+--
+-- -   @gp2@ and @gp3@: 1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+--
+-- 'volumeType', 'launchTemplateEbsBlockDeviceRequest_volumeType' - The volume type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+newLaunchTemplateEbsBlockDeviceRequest ::
+  LaunchTemplateEbsBlockDeviceRequest
+newLaunchTemplateEbsBlockDeviceRequest =
+  LaunchTemplateEbsBlockDeviceRequest'
+    { deleteOnTermination =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      throughput = Prelude.Nothing,
+      volumeSize = Prelude.Nothing,
+      volumeType = Prelude.Nothing
+    }
+
+-- | Indicates whether the EBS volume is deleted on instance termination.
+launchTemplateEbsBlockDeviceRequest_deleteOnTermination :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateEbsBlockDeviceRequest_deleteOnTermination = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {deleteOnTermination} -> deleteOnTermination) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {deleteOnTermination = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | Indicates whether the EBS volume is encrypted. Encrypted volumes can
+-- only be attached to instances that support Amazon EBS encryption. If you
+-- are creating a volume from a snapshot, you can\'t specify an encryption
+-- value.
+launchTemplateEbsBlockDeviceRequest_encrypted :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateEbsBlockDeviceRequest_encrypted = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {encrypted} -> encrypted) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {encrypted = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- The following are the supported values for each volume type:
+--
+-- -   @gp3@: 3,000-16,000 IOPS
+--
+-- -   @io1@: 100-64,000 IOPS
+--
+-- -   @io2@: 100-64,000 IOPS
+--
+-- For @io1@ and @io2@ volumes, we guarantee 64,000 IOPS only for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances Instances built on the Nitro System>.
+-- Other instance families guarantee performance up to 32,000 IOPS.
+--
+-- This parameter is supported for @io1@, @io2@, and @gp3@ volumes only.
+-- This parameter is not supported for @gp2@, @st1@, @sc1@, or @standard@
+-- volumes.
+launchTemplateEbsBlockDeviceRequest_iops :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Int)
+launchTemplateEbsBlockDeviceRequest_iops = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {iops} -> iops) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {iops = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | The ARN of the symmetric Key Management Service (KMS) CMK used for
+-- encryption.
+launchTemplateEbsBlockDeviceRequest_kmsKeyId :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Text)
+launchTemplateEbsBlockDeviceRequest_kmsKeyId = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {kmsKeyId} -> kmsKeyId) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {kmsKeyId = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | The ID of the snapshot.
+launchTemplateEbsBlockDeviceRequest_snapshotId :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Text)
+launchTemplateEbsBlockDeviceRequest_snapshotId = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {snapshotId} -> snapshotId) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {snapshotId = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | The throughput to provision for a @gp3@ volume, with a maximum of 1,000
+-- MiB\/s.
+--
+-- Valid Range: Minimum value of 125. Maximum value of 1000.
+launchTemplateEbsBlockDeviceRequest_throughput :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Int)
+launchTemplateEbsBlockDeviceRequest_throughput = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {throughput} -> throughput) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {throughput = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | The size of the volume, in GiBs. You must specify either a snapshot ID
+-- or a volume size. The following are the supported volumes sizes for each
+-- volume type:
+--
+-- -   @gp2@ and @gp3@: 1-16,384
+--
+-- -   @io1@ and @io2@: 4-16,384
+--
+-- -   @st1@ and @sc1@: 125-16,384
+--
+-- -   @standard@: 1-1,024
+launchTemplateEbsBlockDeviceRequest_volumeSize :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe Prelude.Int)
+launchTemplateEbsBlockDeviceRequest_volumeSize = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {volumeSize} -> volumeSize) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {volumeSize = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+-- | The volume type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+launchTemplateEbsBlockDeviceRequest_volumeType :: Lens.Lens' LaunchTemplateEbsBlockDeviceRequest (Prelude.Maybe VolumeType)
+launchTemplateEbsBlockDeviceRequest_volumeType = Lens.lens (\LaunchTemplateEbsBlockDeviceRequest' {volumeType} -> volumeType) (\s@LaunchTemplateEbsBlockDeviceRequest' {} a -> s {volumeType = a} :: LaunchTemplateEbsBlockDeviceRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateEbsBlockDeviceRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateEbsBlockDeviceRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` encrypted
+        `Prelude.hashWithSalt` iops
+        `Prelude.hashWithSalt` kmsKeyId
+        `Prelude.hashWithSalt` snapshotId
+        `Prelude.hashWithSalt` throughput
+        `Prelude.hashWithSalt` volumeSize
+        `Prelude.hashWithSalt` volumeType
+
+instance
+  Prelude.NFData
+    LaunchTemplateEbsBlockDeviceRequest
+  where
+  rnf LaunchTemplateEbsBlockDeviceRequest' {..} =
+    Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf volumeType
+
+instance
+  Data.ToQuery
+    LaunchTemplateEbsBlockDeviceRequest
+  where
+  toQuery LaunchTemplateEbsBlockDeviceRequest' {..} =
+    Prelude.mconcat
+      [ "DeleteOnTermination" Data.=: deleteOnTermination,
+        "Encrypted" Data.=: encrypted,
+        "Iops" Data.=: iops,
+        "KmsKeyId" Data.=: kmsKeyId,
+        "SnapshotId" Data.=: snapshotId,
+        "Throughput" Data.=: throughput,
+        "VolumeSize" Data.=: volumeSize,
+        "VolumeType" Data.=: volumeType
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateElasticInferenceAccelerator.hs b/gen/Amazonka/EC2/Types/LaunchTemplateElasticInferenceAccelerator.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateElasticInferenceAccelerator.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateElasticInferenceAccelerator
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateElasticInferenceAccelerator where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an elastic inference accelerator.
+--
+-- /See:/ 'newLaunchTemplateElasticInferenceAccelerator' smart constructor.
+data LaunchTemplateElasticInferenceAccelerator = LaunchTemplateElasticInferenceAccelerator'
+  { -- | The number of elastic inference accelerators to attach to the instance.
+    --
+    -- Default: 1
+    count :: Prelude.Maybe Prelude.Natural,
+    -- | The type of elastic inference accelerator. The possible values are
+    -- eia1.medium, eia1.large, and eia1.xlarge.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateElasticInferenceAccelerator' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'launchTemplateElasticInferenceAccelerator_count' - The number of elastic inference accelerators to attach to the instance.
+--
+-- Default: 1
+--
+-- 'type'', 'launchTemplateElasticInferenceAccelerator_type' - The type of elastic inference accelerator. The possible values are
+-- eia1.medium, eia1.large, and eia1.xlarge.
+newLaunchTemplateElasticInferenceAccelerator ::
+  -- | 'type''
+  Prelude.Text ->
+  LaunchTemplateElasticInferenceAccelerator
+newLaunchTemplateElasticInferenceAccelerator pType_ =
+  LaunchTemplateElasticInferenceAccelerator'
+    { count =
+        Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | The number of elastic inference accelerators to attach to the instance.
+--
+-- Default: 1
+launchTemplateElasticInferenceAccelerator_count :: Lens.Lens' LaunchTemplateElasticInferenceAccelerator (Prelude.Maybe Prelude.Natural)
+launchTemplateElasticInferenceAccelerator_count = Lens.lens (\LaunchTemplateElasticInferenceAccelerator' {count} -> count) (\s@LaunchTemplateElasticInferenceAccelerator' {} a -> s {count = a} :: LaunchTemplateElasticInferenceAccelerator)
+
+-- | The type of elastic inference accelerator. The possible values are
+-- eia1.medium, eia1.large, and eia1.xlarge.
+launchTemplateElasticInferenceAccelerator_type :: Lens.Lens' LaunchTemplateElasticInferenceAccelerator Prelude.Text
+launchTemplateElasticInferenceAccelerator_type = Lens.lens (\LaunchTemplateElasticInferenceAccelerator' {type'} -> type') (\s@LaunchTemplateElasticInferenceAccelerator' {} a -> s {type' = a} :: LaunchTemplateElasticInferenceAccelerator)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateElasticInferenceAccelerator
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateElasticInferenceAccelerator' {..} =
+      _salt
+        `Prelude.hashWithSalt` count
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    LaunchTemplateElasticInferenceAccelerator
+  where
+  rnf LaunchTemplateElasticInferenceAccelerator' {..} =
+    Prelude.rnf count `Prelude.seq` Prelude.rnf type'
+
+instance
+  Data.ToQuery
+    LaunchTemplateElasticInferenceAccelerator
+  where
+  toQuery
+    LaunchTemplateElasticInferenceAccelerator' {..} =
+      Prelude.mconcat
+        ["Count" Data.=: count, "Type" Data.=: type']
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateElasticInferenceAcceleratorResponse.hs b/gen/Amazonka/EC2/Types/LaunchTemplateElasticInferenceAcceleratorResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateElasticInferenceAcceleratorResponse.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateElasticInferenceAcceleratorResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateElasticInferenceAcceleratorResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an elastic inference accelerator.
+--
+-- /See:/ 'newLaunchTemplateElasticInferenceAcceleratorResponse' smart constructor.
+data LaunchTemplateElasticInferenceAcceleratorResponse = LaunchTemplateElasticInferenceAcceleratorResponse'
+  { -- | The number of elastic inference accelerators to attach to the instance.
+    --
+    -- Default: 1
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The type of elastic inference accelerator. The possible values are
+    -- eia1.medium, eia1.large, and eia1.xlarge.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateElasticInferenceAcceleratorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'launchTemplateElasticInferenceAcceleratorResponse_count' - The number of elastic inference accelerators to attach to the instance.
+--
+-- Default: 1
+--
+-- 'type'', 'launchTemplateElasticInferenceAcceleratorResponse_type' - The type of elastic inference accelerator. The possible values are
+-- eia1.medium, eia1.large, and eia1.xlarge.
+newLaunchTemplateElasticInferenceAcceleratorResponse ::
+  LaunchTemplateElasticInferenceAcceleratorResponse
+newLaunchTemplateElasticInferenceAcceleratorResponse =
+  LaunchTemplateElasticInferenceAcceleratorResponse'
+    { count =
+        Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The number of elastic inference accelerators to attach to the instance.
+--
+-- Default: 1
+launchTemplateElasticInferenceAcceleratorResponse_count :: Lens.Lens' LaunchTemplateElasticInferenceAcceleratorResponse (Prelude.Maybe Prelude.Int)
+launchTemplateElasticInferenceAcceleratorResponse_count = Lens.lens (\LaunchTemplateElasticInferenceAcceleratorResponse' {count} -> count) (\s@LaunchTemplateElasticInferenceAcceleratorResponse' {} a -> s {count = a} :: LaunchTemplateElasticInferenceAcceleratorResponse)
+
+-- | The type of elastic inference accelerator. The possible values are
+-- eia1.medium, eia1.large, and eia1.xlarge.
+launchTemplateElasticInferenceAcceleratorResponse_type :: Lens.Lens' LaunchTemplateElasticInferenceAcceleratorResponse (Prelude.Maybe Prelude.Text)
+launchTemplateElasticInferenceAcceleratorResponse_type = Lens.lens (\LaunchTemplateElasticInferenceAcceleratorResponse' {type'} -> type') (\s@LaunchTemplateElasticInferenceAcceleratorResponse' {} a -> s {type' = a} :: LaunchTemplateElasticInferenceAcceleratorResponse)
+
+instance
+  Data.FromXML
+    LaunchTemplateElasticInferenceAcceleratorResponse
+  where
+  parseXML x =
+    LaunchTemplateElasticInferenceAcceleratorResponse'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "type")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateElasticInferenceAcceleratorResponse
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateElasticInferenceAcceleratorResponse' {..} =
+      _salt
+        `Prelude.hashWithSalt` count
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    LaunchTemplateElasticInferenceAcceleratorResponse
+  where
+  rnf
+    LaunchTemplateElasticInferenceAcceleratorResponse' {..} =
+      Prelude.rnf count `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateEnclaveOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateEnclaveOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateEnclaveOptions.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateEnclaveOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateEnclaveOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves.
+--
+-- /See:/ 'newLaunchTemplateEnclaveOptions' smart constructor.
+data LaunchTemplateEnclaveOptions = LaunchTemplateEnclaveOptions'
+  { -- | If this parameter is set to @true@, the instance is enabled for Amazon
+    -- Web Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web
+    -- Services Nitro Enclaves.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateEnclaveOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'launchTemplateEnclaveOptions_enabled' - If this parameter is set to @true@, the instance is enabled for Amazon
+-- Web Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web
+-- Services Nitro Enclaves.
+newLaunchTemplateEnclaveOptions ::
+  LaunchTemplateEnclaveOptions
+newLaunchTemplateEnclaveOptions =
+  LaunchTemplateEnclaveOptions'
+    { enabled =
+        Prelude.Nothing
+    }
+
+-- | If this parameter is set to @true@, the instance is enabled for Amazon
+-- Web Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web
+-- Services Nitro Enclaves.
+launchTemplateEnclaveOptions_enabled :: Lens.Lens' LaunchTemplateEnclaveOptions (Prelude.Maybe Prelude.Bool)
+launchTemplateEnclaveOptions_enabled = Lens.lens (\LaunchTemplateEnclaveOptions' {enabled} -> enabled) (\s@LaunchTemplateEnclaveOptions' {} a -> s {enabled = a} :: LaunchTemplateEnclaveOptions)
+
+instance Data.FromXML LaunchTemplateEnclaveOptions where
+  parseXML x =
+    LaunchTemplateEnclaveOptions'
+      Prelude.<$> (x Data..@? "enabled")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateEnclaveOptions
+  where
+  hashWithSalt _salt LaunchTemplateEnclaveOptions' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData LaunchTemplateEnclaveOptions where
+  rnf LaunchTemplateEnclaveOptions' {..} =
+    Prelude.rnf enabled
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateEnclaveOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateEnclaveOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateEnclaveOptionsRequest.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateEnclaveOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateEnclaveOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- /See:/ 'newLaunchTemplateEnclaveOptionsRequest' smart constructor.
+data LaunchTemplateEnclaveOptionsRequest = LaunchTemplateEnclaveOptionsRequest'
+  { -- | To enable the instance for Amazon Web Services Nitro Enclaves, set this
+    -- parameter to @true@.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateEnclaveOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'launchTemplateEnclaveOptionsRequest_enabled' - To enable the instance for Amazon Web Services Nitro Enclaves, set this
+-- parameter to @true@.
+newLaunchTemplateEnclaveOptionsRequest ::
+  LaunchTemplateEnclaveOptionsRequest
+newLaunchTemplateEnclaveOptionsRequest =
+  LaunchTemplateEnclaveOptionsRequest'
+    { enabled =
+        Prelude.Nothing
+    }
+
+-- | To enable the instance for Amazon Web Services Nitro Enclaves, set this
+-- parameter to @true@.
+launchTemplateEnclaveOptionsRequest_enabled :: Lens.Lens' LaunchTemplateEnclaveOptionsRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateEnclaveOptionsRequest_enabled = Lens.lens (\LaunchTemplateEnclaveOptionsRequest' {enabled} -> enabled) (\s@LaunchTemplateEnclaveOptionsRequest' {} a -> s {enabled = a} :: LaunchTemplateEnclaveOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateEnclaveOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateEnclaveOptionsRequest' {..} =
+      _salt `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    LaunchTemplateEnclaveOptionsRequest
+  where
+  rnf LaunchTemplateEnclaveOptionsRequest' {..} =
+    Prelude.rnf enabled
+
+instance
+  Data.ToQuery
+    LaunchTemplateEnclaveOptionsRequest
+  where
+  toQuery LaunchTemplateEnclaveOptionsRequest' {..} =
+    Prelude.mconcat ["Enabled" Data.=: enabled]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateErrorCode.hs b/gen/Amazonka/EC2/Types/LaunchTemplateErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateErrorCode.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateErrorCode
+  ( LaunchTemplateErrorCode
+      ( ..,
+        LaunchTemplateErrorCode_LaunchTemplateIdDoesNotExist,
+        LaunchTemplateErrorCode_LaunchTemplateIdMalformed,
+        LaunchTemplateErrorCode_LaunchTemplateNameDoesNotExist,
+        LaunchTemplateErrorCode_LaunchTemplateNameMalformed,
+        LaunchTemplateErrorCode_LaunchTemplateVersionDoesNotExist,
+        LaunchTemplateErrorCode_UnexpectedError
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateErrorCode = LaunchTemplateErrorCode'
+  { fromLaunchTemplateErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateErrorCode_LaunchTemplateIdDoesNotExist :: LaunchTemplateErrorCode
+pattern LaunchTemplateErrorCode_LaunchTemplateIdDoesNotExist = LaunchTemplateErrorCode' "launchTemplateIdDoesNotExist"
+
+pattern LaunchTemplateErrorCode_LaunchTemplateIdMalformed :: LaunchTemplateErrorCode
+pattern LaunchTemplateErrorCode_LaunchTemplateIdMalformed = LaunchTemplateErrorCode' "launchTemplateIdMalformed"
+
+pattern LaunchTemplateErrorCode_LaunchTemplateNameDoesNotExist :: LaunchTemplateErrorCode
+pattern LaunchTemplateErrorCode_LaunchTemplateNameDoesNotExist = LaunchTemplateErrorCode' "launchTemplateNameDoesNotExist"
+
+pattern LaunchTemplateErrorCode_LaunchTemplateNameMalformed :: LaunchTemplateErrorCode
+pattern LaunchTemplateErrorCode_LaunchTemplateNameMalformed = LaunchTemplateErrorCode' "launchTemplateNameMalformed"
+
+pattern LaunchTemplateErrorCode_LaunchTemplateVersionDoesNotExist :: LaunchTemplateErrorCode
+pattern LaunchTemplateErrorCode_LaunchTemplateVersionDoesNotExist = LaunchTemplateErrorCode' "launchTemplateVersionDoesNotExist"
+
+pattern LaunchTemplateErrorCode_UnexpectedError :: LaunchTemplateErrorCode
+pattern LaunchTemplateErrorCode_UnexpectedError = LaunchTemplateErrorCode' "unexpectedError"
+
+{-# COMPLETE
+  LaunchTemplateErrorCode_LaunchTemplateIdDoesNotExist,
+  LaunchTemplateErrorCode_LaunchTemplateIdMalformed,
+  LaunchTemplateErrorCode_LaunchTemplateNameDoesNotExist,
+  LaunchTemplateErrorCode_LaunchTemplateNameMalformed,
+  LaunchTemplateErrorCode_LaunchTemplateVersionDoesNotExist,
+  LaunchTemplateErrorCode_UnexpectedError,
+  LaunchTemplateErrorCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateHibernationOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateHibernationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateHibernationOptions.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateHibernationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateHibernationOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether an instance is configured for hibernation.
+--
+-- /See:/ 'newLaunchTemplateHibernationOptions' smart constructor.
+data LaunchTemplateHibernationOptions = LaunchTemplateHibernationOptions'
+  { -- | If this parameter is set to @true@, the instance is enabled for
+    -- hibernation; otherwise, it is not enabled for hibernation.
+    configured :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateHibernationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configured', 'launchTemplateHibernationOptions_configured' - If this parameter is set to @true@, the instance is enabled for
+-- hibernation; otherwise, it is not enabled for hibernation.
+newLaunchTemplateHibernationOptions ::
+  LaunchTemplateHibernationOptions
+newLaunchTemplateHibernationOptions =
+  LaunchTemplateHibernationOptions'
+    { configured =
+        Prelude.Nothing
+    }
+
+-- | If this parameter is set to @true@, the instance is enabled for
+-- hibernation; otherwise, it is not enabled for hibernation.
+launchTemplateHibernationOptions_configured :: Lens.Lens' LaunchTemplateHibernationOptions (Prelude.Maybe Prelude.Bool)
+launchTemplateHibernationOptions_configured = Lens.lens (\LaunchTemplateHibernationOptions' {configured} -> configured) (\s@LaunchTemplateHibernationOptions' {} a -> s {configured = a} :: LaunchTemplateHibernationOptions)
+
+instance
+  Data.FromXML
+    LaunchTemplateHibernationOptions
+  where
+  parseXML x =
+    LaunchTemplateHibernationOptions'
+      Prelude.<$> (x Data..@? "configured")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateHibernationOptions
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateHibernationOptions' {..} =
+      _salt `Prelude.hashWithSalt` configured
+
+instance
+  Prelude.NFData
+    LaunchTemplateHibernationOptions
+  where
+  rnf LaunchTemplateHibernationOptions' {..} =
+    Prelude.rnf configured
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateHibernationOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateHibernationOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateHibernationOptionsRequest.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateHibernationOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateHibernationOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether the instance is configured for hibernation. This
+-- parameter is valid only if the instance meets the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html hibernation prerequisites>.
+--
+-- /See:/ 'newLaunchTemplateHibernationOptionsRequest' smart constructor.
+data LaunchTemplateHibernationOptionsRequest = LaunchTemplateHibernationOptionsRequest'
+  { -- | If you set this parameter to @true@, the instance is enabled for
+    -- hibernation.
+    --
+    -- Default: @false@
+    configured :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateHibernationOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'configured', 'launchTemplateHibernationOptionsRequest_configured' - If you set this parameter to @true@, the instance is enabled for
+-- hibernation.
+--
+-- Default: @false@
+newLaunchTemplateHibernationOptionsRequest ::
+  LaunchTemplateHibernationOptionsRequest
+newLaunchTemplateHibernationOptionsRequest =
+  LaunchTemplateHibernationOptionsRequest'
+    { configured =
+        Prelude.Nothing
+    }
+
+-- | If you set this parameter to @true@, the instance is enabled for
+-- hibernation.
+--
+-- Default: @false@
+launchTemplateHibernationOptionsRequest_configured :: Lens.Lens' LaunchTemplateHibernationOptionsRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateHibernationOptionsRequest_configured = Lens.lens (\LaunchTemplateHibernationOptionsRequest' {configured} -> configured) (\s@LaunchTemplateHibernationOptionsRequest' {} a -> s {configured = a} :: LaunchTemplateHibernationOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateHibernationOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateHibernationOptionsRequest' {..} =
+      _salt `Prelude.hashWithSalt` configured
+
+instance
+  Prelude.NFData
+    LaunchTemplateHibernationOptionsRequest
+  where
+  rnf LaunchTemplateHibernationOptionsRequest' {..} =
+    Prelude.rnf configured
+
+instance
+  Data.ToQuery
+    LaunchTemplateHibernationOptionsRequest
+  where
+  toQuery LaunchTemplateHibernationOptionsRequest' {..} =
+    Prelude.mconcat ["Configured" Data.=: configured]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateHttpTokensState.hs b/gen/Amazonka/EC2/Types/LaunchTemplateHttpTokensState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateHttpTokensState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateHttpTokensState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateHttpTokensState
+  ( LaunchTemplateHttpTokensState
+      ( ..,
+        LaunchTemplateHttpTokensState_Optional,
+        LaunchTemplateHttpTokensState_Required
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateHttpTokensState = LaunchTemplateHttpTokensState'
+  { fromLaunchTemplateHttpTokensState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateHttpTokensState_Optional :: LaunchTemplateHttpTokensState
+pattern LaunchTemplateHttpTokensState_Optional = LaunchTemplateHttpTokensState' "optional"
+
+pattern LaunchTemplateHttpTokensState_Required :: LaunchTemplateHttpTokensState
+pattern LaunchTemplateHttpTokensState_Required = LaunchTemplateHttpTokensState' "required"
+
+{-# COMPLETE
+  LaunchTemplateHttpTokensState_Optional,
+  LaunchTemplateHttpTokensState_Required,
+  LaunchTemplateHttpTokensState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateIamInstanceProfileSpecification.hs b/gen/Amazonka/EC2/Types/LaunchTemplateIamInstanceProfileSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateIamInstanceProfileSpecification.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IAM instance profile.
+--
+-- /See:/ 'newLaunchTemplateIamInstanceProfileSpecification' smart constructor.
+data LaunchTemplateIamInstanceProfileSpecification = LaunchTemplateIamInstanceProfileSpecification'
+  { -- | The Amazon Resource Name (ARN) of the instance profile.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the instance profile.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateIamInstanceProfileSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'launchTemplateIamInstanceProfileSpecification_arn' - The Amazon Resource Name (ARN) of the instance profile.
+--
+-- 'name', 'launchTemplateIamInstanceProfileSpecification_name' - The name of the instance profile.
+newLaunchTemplateIamInstanceProfileSpecification ::
+  LaunchTemplateIamInstanceProfileSpecification
+newLaunchTemplateIamInstanceProfileSpecification =
+  LaunchTemplateIamInstanceProfileSpecification'
+    { arn =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the instance profile.
+launchTemplateIamInstanceProfileSpecification_arn :: Lens.Lens' LaunchTemplateIamInstanceProfileSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateIamInstanceProfileSpecification_arn = Lens.lens (\LaunchTemplateIamInstanceProfileSpecification' {arn} -> arn) (\s@LaunchTemplateIamInstanceProfileSpecification' {} a -> s {arn = a} :: LaunchTemplateIamInstanceProfileSpecification)
+
+-- | The name of the instance profile.
+launchTemplateIamInstanceProfileSpecification_name :: Lens.Lens' LaunchTemplateIamInstanceProfileSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateIamInstanceProfileSpecification_name = Lens.lens (\LaunchTemplateIamInstanceProfileSpecification' {name} -> name) (\s@LaunchTemplateIamInstanceProfileSpecification' {} a -> s {name = a} :: LaunchTemplateIamInstanceProfileSpecification)
+
+instance
+  Data.FromXML
+    LaunchTemplateIamInstanceProfileSpecification
+  where
+  parseXML x =
+    LaunchTemplateIamInstanceProfileSpecification'
+      Prelude.<$> (x Data..@? "arn")
+      Prelude.<*> (x Data..@? "name")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateIamInstanceProfileSpecification
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateIamInstanceProfileSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    LaunchTemplateIamInstanceProfileSpecification
+  where
+  rnf
+    LaunchTemplateIamInstanceProfileSpecification' {..} =
+      Prelude.rnf arn `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateIamInstanceProfileSpecificationRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateIamInstanceProfileSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateIamInstanceProfileSpecificationRequest.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | An IAM instance profile.
+--
+-- /See:/ 'newLaunchTemplateIamInstanceProfileSpecificationRequest' smart constructor.
+data LaunchTemplateIamInstanceProfileSpecificationRequest = LaunchTemplateIamInstanceProfileSpecificationRequest'
+  { -- | The Amazon Resource Name (ARN) of the instance profile.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the instance profile.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateIamInstanceProfileSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'launchTemplateIamInstanceProfileSpecificationRequest_arn' - The Amazon Resource Name (ARN) of the instance profile.
+--
+-- 'name', 'launchTemplateIamInstanceProfileSpecificationRequest_name' - The name of the instance profile.
+newLaunchTemplateIamInstanceProfileSpecificationRequest ::
+  LaunchTemplateIamInstanceProfileSpecificationRequest
+newLaunchTemplateIamInstanceProfileSpecificationRequest =
+  LaunchTemplateIamInstanceProfileSpecificationRequest'
+    { arn =
+        Prelude.Nothing,
+      name =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the instance profile.
+launchTemplateIamInstanceProfileSpecificationRequest_arn :: Lens.Lens' LaunchTemplateIamInstanceProfileSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateIamInstanceProfileSpecificationRequest_arn = Lens.lens (\LaunchTemplateIamInstanceProfileSpecificationRequest' {arn} -> arn) (\s@LaunchTemplateIamInstanceProfileSpecificationRequest' {} a -> s {arn = a} :: LaunchTemplateIamInstanceProfileSpecificationRequest)
+
+-- | The name of the instance profile.
+launchTemplateIamInstanceProfileSpecificationRequest_name :: Lens.Lens' LaunchTemplateIamInstanceProfileSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateIamInstanceProfileSpecificationRequest_name = Lens.lens (\LaunchTemplateIamInstanceProfileSpecificationRequest' {name} -> name) (\s@LaunchTemplateIamInstanceProfileSpecificationRequest' {} a -> s {name = a} :: LaunchTemplateIamInstanceProfileSpecificationRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateIamInstanceProfileSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateIamInstanceProfileSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    LaunchTemplateIamInstanceProfileSpecificationRequest
+  where
+  rnf
+    LaunchTemplateIamInstanceProfileSpecificationRequest' {..} =
+      Prelude.rnf arn `Prelude.seq` Prelude.rnf name
+
+instance
+  Data.ToQuery
+    LaunchTemplateIamInstanceProfileSpecificationRequest
+  where
+  toQuery
+    LaunchTemplateIamInstanceProfileSpecificationRequest' {..} =
+      Prelude.mconcat
+        ["Arn" Data.=: arn, "Name" Data.=: name]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMaintenanceOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMaintenanceOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMaintenanceOptions.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateAutoRecoveryState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The maintenance options of your instance.
+--
+-- /See:/ 'newLaunchTemplateInstanceMaintenanceOptions' smart constructor.
+data LaunchTemplateInstanceMaintenanceOptions = LaunchTemplateInstanceMaintenanceOptions'
+  { -- | Disables the automatic recovery behavior of your instance or sets it to
+    -- default.
+    autoRecovery :: Prelude.Maybe LaunchTemplateAutoRecoveryState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceMaintenanceOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecovery', 'launchTemplateInstanceMaintenanceOptions_autoRecovery' - Disables the automatic recovery behavior of your instance or sets it to
+-- default.
+newLaunchTemplateInstanceMaintenanceOptions ::
+  LaunchTemplateInstanceMaintenanceOptions
+newLaunchTemplateInstanceMaintenanceOptions =
+  LaunchTemplateInstanceMaintenanceOptions'
+    { autoRecovery =
+        Prelude.Nothing
+    }
+
+-- | Disables the automatic recovery behavior of your instance or sets it to
+-- default.
+launchTemplateInstanceMaintenanceOptions_autoRecovery :: Lens.Lens' LaunchTemplateInstanceMaintenanceOptions (Prelude.Maybe LaunchTemplateAutoRecoveryState)
+launchTemplateInstanceMaintenanceOptions_autoRecovery = Lens.lens (\LaunchTemplateInstanceMaintenanceOptions' {autoRecovery} -> autoRecovery) (\s@LaunchTemplateInstanceMaintenanceOptions' {} a -> s {autoRecovery = a} :: LaunchTemplateInstanceMaintenanceOptions)
+
+instance
+  Data.FromXML
+    LaunchTemplateInstanceMaintenanceOptions
+  where
+  parseXML x =
+    LaunchTemplateInstanceMaintenanceOptions'
+      Prelude.<$> (x Data..@? "autoRecovery")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceMaintenanceOptions
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceMaintenanceOptions' {..} =
+      _salt `Prelude.hashWithSalt` autoRecovery
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceMaintenanceOptions
+  where
+  rnf LaunchTemplateInstanceMaintenanceOptions' {..} =
+    Prelude.rnf autoRecovery
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMaintenanceOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMaintenanceOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMaintenanceOptionsRequest.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateAutoRecoveryState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The maintenance options of your instance.
+--
+-- /See:/ 'newLaunchTemplateInstanceMaintenanceOptionsRequest' smart constructor.
+data LaunchTemplateInstanceMaintenanceOptionsRequest = LaunchTemplateInstanceMaintenanceOptionsRequest'
+  { -- | Disables the automatic recovery behavior of your instance or sets it to
+    -- default. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+    autoRecovery :: Prelude.Maybe LaunchTemplateAutoRecoveryState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceMaintenanceOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoRecovery', 'launchTemplateInstanceMaintenanceOptionsRequest_autoRecovery' - Disables the automatic recovery behavior of your instance or sets it to
+-- default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+newLaunchTemplateInstanceMaintenanceOptionsRequest ::
+  LaunchTemplateInstanceMaintenanceOptionsRequest
+newLaunchTemplateInstanceMaintenanceOptionsRequest =
+  LaunchTemplateInstanceMaintenanceOptionsRequest'
+    { autoRecovery =
+        Prelude.Nothing
+    }
+
+-- | Disables the automatic recovery behavior of your instance or sets it to
+-- default. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery Simplified automatic recovery>.
+launchTemplateInstanceMaintenanceOptionsRequest_autoRecovery :: Lens.Lens' LaunchTemplateInstanceMaintenanceOptionsRequest (Prelude.Maybe LaunchTemplateAutoRecoveryState)
+launchTemplateInstanceMaintenanceOptionsRequest_autoRecovery = Lens.lens (\LaunchTemplateInstanceMaintenanceOptionsRequest' {autoRecovery} -> autoRecovery) (\s@LaunchTemplateInstanceMaintenanceOptionsRequest' {} a -> s {autoRecovery = a} :: LaunchTemplateInstanceMaintenanceOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceMaintenanceOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceMaintenanceOptionsRequest' {..} =
+      _salt `Prelude.hashWithSalt` autoRecovery
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceMaintenanceOptionsRequest
+  where
+  rnf
+    LaunchTemplateInstanceMaintenanceOptionsRequest' {..} =
+      Prelude.rnf autoRecovery
+
+instance
+  Data.ToQuery
+    LaunchTemplateInstanceMaintenanceOptionsRequest
+  where
+  toQuery
+    LaunchTemplateInstanceMaintenanceOptionsRequest' {..} =
+      Prelude.mconcat
+        ["AutoRecovery" Data.=: autoRecovery]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMarketOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMarketOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMarketOptions.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateSpotMarketOptions
+import Amazonka.EC2.Types.MarketType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The market (purchasing) option for the instances.
+--
+-- /See:/ 'newLaunchTemplateInstanceMarketOptions' smart constructor.
+data LaunchTemplateInstanceMarketOptions = LaunchTemplateInstanceMarketOptions'
+  { -- | The market type.
+    marketType :: Prelude.Maybe MarketType,
+    -- | The options for Spot Instances.
+    spotOptions :: Prelude.Maybe LaunchTemplateSpotMarketOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceMarketOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'marketType', 'launchTemplateInstanceMarketOptions_marketType' - The market type.
+--
+-- 'spotOptions', 'launchTemplateInstanceMarketOptions_spotOptions' - The options for Spot Instances.
+newLaunchTemplateInstanceMarketOptions ::
+  LaunchTemplateInstanceMarketOptions
+newLaunchTemplateInstanceMarketOptions =
+  LaunchTemplateInstanceMarketOptions'
+    { marketType =
+        Prelude.Nothing,
+      spotOptions = Prelude.Nothing
+    }
+
+-- | The market type.
+launchTemplateInstanceMarketOptions_marketType :: Lens.Lens' LaunchTemplateInstanceMarketOptions (Prelude.Maybe MarketType)
+launchTemplateInstanceMarketOptions_marketType = Lens.lens (\LaunchTemplateInstanceMarketOptions' {marketType} -> marketType) (\s@LaunchTemplateInstanceMarketOptions' {} a -> s {marketType = a} :: LaunchTemplateInstanceMarketOptions)
+
+-- | The options for Spot Instances.
+launchTemplateInstanceMarketOptions_spotOptions :: Lens.Lens' LaunchTemplateInstanceMarketOptions (Prelude.Maybe LaunchTemplateSpotMarketOptions)
+launchTemplateInstanceMarketOptions_spotOptions = Lens.lens (\LaunchTemplateInstanceMarketOptions' {spotOptions} -> spotOptions) (\s@LaunchTemplateInstanceMarketOptions' {} a -> s {spotOptions = a} :: LaunchTemplateInstanceMarketOptions)
+
+instance
+  Data.FromXML
+    LaunchTemplateInstanceMarketOptions
+  where
+  parseXML x =
+    LaunchTemplateInstanceMarketOptions'
+      Prelude.<$> (x Data..@? "marketType")
+      Prelude.<*> (x Data..@? "spotOptions")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceMarketOptions
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceMarketOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` marketType
+        `Prelude.hashWithSalt` spotOptions
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceMarketOptions
+  where
+  rnf LaunchTemplateInstanceMarketOptions' {..} =
+    Prelude.rnf marketType
+      `Prelude.seq` Prelude.rnf spotOptions
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMarketOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMarketOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMarketOptionsRequest.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateSpotMarketOptionsRequest
+import Amazonka.EC2.Types.MarketType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The market (purchasing) option for the instances.
+--
+-- /See:/ 'newLaunchTemplateInstanceMarketOptionsRequest' smart constructor.
+data LaunchTemplateInstanceMarketOptionsRequest = LaunchTemplateInstanceMarketOptionsRequest'
+  { -- | The market type.
+    marketType :: Prelude.Maybe MarketType,
+    -- | The options for Spot Instances.
+    spotOptions :: Prelude.Maybe LaunchTemplateSpotMarketOptionsRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceMarketOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'marketType', 'launchTemplateInstanceMarketOptionsRequest_marketType' - The market type.
+--
+-- 'spotOptions', 'launchTemplateInstanceMarketOptionsRequest_spotOptions' - The options for Spot Instances.
+newLaunchTemplateInstanceMarketOptionsRequest ::
+  LaunchTemplateInstanceMarketOptionsRequest
+newLaunchTemplateInstanceMarketOptionsRequest =
+  LaunchTemplateInstanceMarketOptionsRequest'
+    { marketType =
+        Prelude.Nothing,
+      spotOptions = Prelude.Nothing
+    }
+
+-- | The market type.
+launchTemplateInstanceMarketOptionsRequest_marketType :: Lens.Lens' LaunchTemplateInstanceMarketOptionsRequest (Prelude.Maybe MarketType)
+launchTemplateInstanceMarketOptionsRequest_marketType = Lens.lens (\LaunchTemplateInstanceMarketOptionsRequest' {marketType} -> marketType) (\s@LaunchTemplateInstanceMarketOptionsRequest' {} a -> s {marketType = a} :: LaunchTemplateInstanceMarketOptionsRequest)
+
+-- | The options for Spot Instances.
+launchTemplateInstanceMarketOptionsRequest_spotOptions :: Lens.Lens' LaunchTemplateInstanceMarketOptionsRequest (Prelude.Maybe LaunchTemplateSpotMarketOptionsRequest)
+launchTemplateInstanceMarketOptionsRequest_spotOptions = Lens.lens (\LaunchTemplateInstanceMarketOptionsRequest' {spotOptions} -> spotOptions) (\s@LaunchTemplateInstanceMarketOptionsRequest' {} a -> s {spotOptions = a} :: LaunchTemplateInstanceMarketOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceMarketOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceMarketOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` marketType
+        `Prelude.hashWithSalt` spotOptions
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceMarketOptionsRequest
+  where
+  rnf LaunchTemplateInstanceMarketOptionsRequest' {..} =
+    Prelude.rnf marketType
+      `Prelude.seq` Prelude.rnf spotOptions
+
+instance
+  Data.ToQuery
+    LaunchTemplateInstanceMarketOptionsRequest
+  where
+  toQuery
+    LaunchTemplateInstanceMarketOptionsRequest' {..} =
+      Prelude.mconcat
+        [ "MarketType" Data.=: marketType,
+          "SpotOptions" Data.=: spotOptions
+        ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataEndpointState.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataEndpointState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataEndpointState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMetadataEndpointState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMetadataEndpointState
+  ( LaunchTemplateInstanceMetadataEndpointState
+      ( ..,
+        LaunchTemplateInstanceMetadataEndpointState_Disabled,
+        LaunchTemplateInstanceMetadataEndpointState_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateInstanceMetadataEndpointState = LaunchTemplateInstanceMetadataEndpointState'
+  { fromLaunchTemplateInstanceMetadataEndpointState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateInstanceMetadataEndpointState_Disabled :: LaunchTemplateInstanceMetadataEndpointState
+pattern LaunchTemplateInstanceMetadataEndpointState_Disabled = LaunchTemplateInstanceMetadataEndpointState' "disabled"
+
+pattern LaunchTemplateInstanceMetadataEndpointState_Enabled :: LaunchTemplateInstanceMetadataEndpointState
+pattern LaunchTemplateInstanceMetadataEndpointState_Enabled = LaunchTemplateInstanceMetadataEndpointState' "enabled"
+
+{-# COMPLETE
+  LaunchTemplateInstanceMetadataEndpointState_Disabled,
+  LaunchTemplateInstanceMetadataEndpointState_Enabled,
+  LaunchTemplateInstanceMetadataEndpointState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptions.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateHttpTokensState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataEndpointState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataProtocolIpv6
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataTagsState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- /See:/ 'newLaunchTemplateInstanceMetadataOptions' smart constructor.
+data LaunchTemplateInstanceMetadataOptions = LaunchTemplateInstanceMetadataOptions'
+  { -- | Enables or disables the HTTP metadata endpoint on your instances. If the
+    -- parameter is not specified, the default state is @enabled@.
+    --
+    -- If you specify a value of @disabled@, you will not be able to access
+    -- your instance metadata.
+    httpEndpoint :: Prelude.Maybe LaunchTemplateInstanceMetadataEndpointState,
+    -- | Enables or disables the IPv6 endpoint for the instance metadata service.
+    --
+    -- Default: @disabled@
+    httpProtocolIpv6 :: Prelude.Maybe LaunchTemplateInstanceMetadataProtocolIpv6,
+    -- | The desired HTTP PUT response hop limit for instance metadata requests.
+    -- The larger the number, the further instance metadata requests can
+    -- travel.
+    --
+    -- Default: 1
+    --
+    -- Possible values: Integers from 1 to 64
+    httpPutResponseHopLimit :: Prelude.Maybe Prelude.Int,
+    -- | The state of token usage for your instance metadata requests. If the
+    -- parameter is not specified in the request, the default state is
+    -- @optional@.
+    --
+    -- If the state is @optional@, you can choose to retrieve instance metadata
+    -- with or without a signed token header on your request. If you retrieve
+    -- the IAM role credentials without a token, the version 1.0 role
+    -- credentials are returned. If you retrieve the IAM role credentials using
+    -- a valid signed token, the version 2.0 role credentials are returned.
+    --
+    -- If the state is @required@, you must send a signed token header with any
+    -- instance metadata retrieval requests. In this state, retrieving the IAM
+    -- role credentials always returns the version 2.0 credentials; the version
+    -- 1.0 credentials are not available.
+    httpTokens :: Prelude.Maybe LaunchTemplateHttpTokensState,
+    -- | Set to @enabled@ to allow access to instance tags from the instance
+    -- metadata. Set to @disabled@ to turn off access to instance tags from the
+    -- instance metadata. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+    --
+    -- Default: @disabled@
+    instanceMetadataTags :: Prelude.Maybe LaunchTemplateInstanceMetadataTagsState,
+    -- | The state of the metadata option changes.
+    --
+    -- @pending@ - The metadata options are being updated and the instance is
+    -- not ready to process metadata traffic with the new selection.
+    --
+    -- @applied@ - The metadata options have been successfully applied on the
+    -- instance.
+    state :: Prelude.Maybe LaunchTemplateInstanceMetadataOptionsState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceMetadataOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpEndpoint', 'launchTemplateInstanceMetadataOptions_httpEndpoint' - Enables or disables the HTTP metadata endpoint on your instances. If the
+-- parameter is not specified, the default state is @enabled@.
+--
+-- If you specify a value of @disabled@, you will not be able to access
+-- your instance metadata.
+--
+-- 'httpProtocolIpv6', 'launchTemplateInstanceMetadataOptions_httpProtocolIpv6' - Enables or disables the IPv6 endpoint for the instance metadata service.
+--
+-- Default: @disabled@
+--
+-- 'httpPutResponseHopLimit', 'launchTemplateInstanceMetadataOptions_httpPutResponseHopLimit' - The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: 1
+--
+-- Possible values: Integers from 1 to 64
+--
+-- 'httpTokens', 'launchTemplateInstanceMetadataOptions_httpTokens' - The state of token usage for your instance metadata requests. If the
+-- parameter is not specified in the request, the default state is
+-- @optional@.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a signed token header on your request. If you retrieve
+-- the IAM role credentials without a token, the version 1.0 role
+-- credentials are returned. If you retrieve the IAM role credentials using
+-- a valid signed token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a signed token header with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- 'instanceMetadataTags', 'launchTemplateInstanceMetadataOptions_instanceMetadataTags' - Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+--
+-- 'state', 'launchTemplateInstanceMetadataOptions_state' - The state of the metadata option changes.
+--
+-- @pending@ - The metadata options are being updated and the instance is
+-- not ready to process metadata traffic with the new selection.
+--
+-- @applied@ - The metadata options have been successfully applied on the
+-- instance.
+newLaunchTemplateInstanceMetadataOptions ::
+  LaunchTemplateInstanceMetadataOptions
+newLaunchTemplateInstanceMetadataOptions =
+  LaunchTemplateInstanceMetadataOptions'
+    { httpEndpoint =
+        Prelude.Nothing,
+      httpProtocolIpv6 = Prelude.Nothing,
+      httpPutResponseHopLimit =
+        Prelude.Nothing,
+      httpTokens = Prelude.Nothing,
+      instanceMetadataTags =
+        Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | Enables or disables the HTTP metadata endpoint on your instances. If the
+-- parameter is not specified, the default state is @enabled@.
+--
+-- If you specify a value of @disabled@, you will not be able to access
+-- your instance metadata.
+launchTemplateInstanceMetadataOptions_httpEndpoint :: Lens.Lens' LaunchTemplateInstanceMetadataOptions (Prelude.Maybe LaunchTemplateInstanceMetadataEndpointState)
+launchTemplateInstanceMetadataOptions_httpEndpoint = Lens.lens (\LaunchTemplateInstanceMetadataOptions' {httpEndpoint} -> httpEndpoint) (\s@LaunchTemplateInstanceMetadataOptions' {} a -> s {httpEndpoint = a} :: LaunchTemplateInstanceMetadataOptions)
+
+-- | Enables or disables the IPv6 endpoint for the instance metadata service.
+--
+-- Default: @disabled@
+launchTemplateInstanceMetadataOptions_httpProtocolIpv6 :: Lens.Lens' LaunchTemplateInstanceMetadataOptions (Prelude.Maybe LaunchTemplateInstanceMetadataProtocolIpv6)
+launchTemplateInstanceMetadataOptions_httpProtocolIpv6 = Lens.lens (\LaunchTemplateInstanceMetadataOptions' {httpProtocolIpv6} -> httpProtocolIpv6) (\s@LaunchTemplateInstanceMetadataOptions' {} a -> s {httpProtocolIpv6 = a} :: LaunchTemplateInstanceMetadataOptions)
+
+-- | The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: 1
+--
+-- Possible values: Integers from 1 to 64
+launchTemplateInstanceMetadataOptions_httpPutResponseHopLimit :: Lens.Lens' LaunchTemplateInstanceMetadataOptions (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceMetadataOptions_httpPutResponseHopLimit = Lens.lens (\LaunchTemplateInstanceMetadataOptions' {httpPutResponseHopLimit} -> httpPutResponseHopLimit) (\s@LaunchTemplateInstanceMetadataOptions' {} a -> s {httpPutResponseHopLimit = a} :: LaunchTemplateInstanceMetadataOptions)
+
+-- | The state of token usage for your instance metadata requests. If the
+-- parameter is not specified in the request, the default state is
+-- @optional@.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a signed token header on your request. If you retrieve
+-- the IAM role credentials without a token, the version 1.0 role
+-- credentials are returned. If you retrieve the IAM role credentials using
+-- a valid signed token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a signed token header with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+launchTemplateInstanceMetadataOptions_httpTokens :: Lens.Lens' LaunchTemplateInstanceMetadataOptions (Prelude.Maybe LaunchTemplateHttpTokensState)
+launchTemplateInstanceMetadataOptions_httpTokens = Lens.lens (\LaunchTemplateInstanceMetadataOptions' {httpTokens} -> httpTokens) (\s@LaunchTemplateInstanceMetadataOptions' {} a -> s {httpTokens = a} :: LaunchTemplateInstanceMetadataOptions)
+
+-- | Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+launchTemplateInstanceMetadataOptions_instanceMetadataTags :: Lens.Lens' LaunchTemplateInstanceMetadataOptions (Prelude.Maybe LaunchTemplateInstanceMetadataTagsState)
+launchTemplateInstanceMetadataOptions_instanceMetadataTags = Lens.lens (\LaunchTemplateInstanceMetadataOptions' {instanceMetadataTags} -> instanceMetadataTags) (\s@LaunchTemplateInstanceMetadataOptions' {} a -> s {instanceMetadataTags = a} :: LaunchTemplateInstanceMetadataOptions)
+
+-- | The state of the metadata option changes.
+--
+-- @pending@ - The metadata options are being updated and the instance is
+-- not ready to process metadata traffic with the new selection.
+--
+-- @applied@ - The metadata options have been successfully applied on the
+-- instance.
+launchTemplateInstanceMetadataOptions_state :: Lens.Lens' LaunchTemplateInstanceMetadataOptions (Prelude.Maybe LaunchTemplateInstanceMetadataOptionsState)
+launchTemplateInstanceMetadataOptions_state = Lens.lens (\LaunchTemplateInstanceMetadataOptions' {state} -> state) (\s@LaunchTemplateInstanceMetadataOptions' {} a -> s {state = a} :: LaunchTemplateInstanceMetadataOptions)
+
+instance
+  Data.FromXML
+    LaunchTemplateInstanceMetadataOptions
+  where
+  parseXML x =
+    LaunchTemplateInstanceMetadataOptions'
+      Prelude.<$> (x Data..@? "httpEndpoint")
+      Prelude.<*> (x Data..@? "httpProtocolIpv6")
+      Prelude.<*> (x Data..@? "httpPutResponseHopLimit")
+      Prelude.<*> (x Data..@? "httpTokens")
+      Prelude.<*> (x Data..@? "instanceMetadataTags")
+      Prelude.<*> (x Data..@? "state")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceMetadataOptions
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceMetadataOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` httpEndpoint
+        `Prelude.hashWithSalt` httpProtocolIpv6
+        `Prelude.hashWithSalt` httpPutResponseHopLimit
+        `Prelude.hashWithSalt` httpTokens
+        `Prelude.hashWithSalt` instanceMetadataTags
+        `Prelude.hashWithSalt` state
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceMetadataOptions
+  where
+  rnf LaunchTemplateInstanceMetadataOptions' {..} =
+    Prelude.rnf httpEndpoint
+      `Prelude.seq` Prelude.rnf httpProtocolIpv6
+      `Prelude.seq` Prelude.rnf httpPutResponseHopLimit
+      `Prelude.seq` Prelude.rnf httpTokens
+      `Prelude.seq` Prelude.rnf instanceMetadataTags
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptionsRequest.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateHttpTokensState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataEndpointState
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataProtocolIpv6
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataTagsState
+import qualified Amazonka.Prelude as Prelude
+
+-- | The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- /See:/ 'newLaunchTemplateInstanceMetadataOptionsRequest' smart constructor.
+data LaunchTemplateInstanceMetadataOptionsRequest = LaunchTemplateInstanceMetadataOptionsRequest'
+  { -- | Enables or disables the HTTP metadata endpoint on your instances. If the
+    -- parameter is not specified, the default state is @enabled@.
+    --
+    -- If you specify a value of @disabled@, you will not be able to access
+    -- your instance metadata.
+    httpEndpoint :: Prelude.Maybe LaunchTemplateInstanceMetadataEndpointState,
+    -- | Enables or disables the IPv6 endpoint for the instance metadata service.
+    --
+    -- Default: @disabled@
+    httpProtocolIpv6 :: Prelude.Maybe LaunchTemplateInstanceMetadataProtocolIpv6,
+    -- | The desired HTTP PUT response hop limit for instance metadata requests.
+    -- The larger the number, the further instance metadata requests can
+    -- travel.
+    --
+    -- Default: @1@
+    --
+    -- Possible values: Integers from 1 to 64
+    httpPutResponseHopLimit :: Prelude.Maybe Prelude.Int,
+    -- | The state of token usage for your instance metadata requests. If the
+    -- parameter is not specified in the request, the default state is
+    -- @optional@.
+    --
+    -- If the state is @optional@, you can choose to retrieve instance metadata
+    -- with or without a signed token header on your request. If you retrieve
+    -- the IAM role credentials without a token, the version 1.0 role
+    -- credentials are returned. If you retrieve the IAM role credentials using
+    -- a valid signed token, the version 2.0 role credentials are returned.
+    --
+    -- If the state is @required@, you must send a signed token header with any
+    -- instance metadata retrieval requests. In this state, retrieving the IAM
+    -- role credentials always returns the version 2.0 credentials; the version
+    -- 1.0 credentials are not available.
+    httpTokens :: Prelude.Maybe LaunchTemplateHttpTokensState,
+    -- | Set to @enabled@ to allow access to instance tags from the instance
+    -- metadata. Set to @disabled@ to turn off access to instance tags from the
+    -- instance metadata. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+    --
+    -- Default: @disabled@
+    instanceMetadataTags :: Prelude.Maybe LaunchTemplateInstanceMetadataTagsState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceMetadataOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpEndpoint', 'launchTemplateInstanceMetadataOptionsRequest_httpEndpoint' - Enables or disables the HTTP metadata endpoint on your instances. If the
+-- parameter is not specified, the default state is @enabled@.
+--
+-- If you specify a value of @disabled@, you will not be able to access
+-- your instance metadata.
+--
+-- 'httpProtocolIpv6', 'launchTemplateInstanceMetadataOptionsRequest_httpProtocolIpv6' - Enables or disables the IPv6 endpoint for the instance metadata service.
+--
+-- Default: @disabled@
+--
+-- 'httpPutResponseHopLimit', 'launchTemplateInstanceMetadataOptionsRequest_httpPutResponseHopLimit' - The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: @1@
+--
+-- Possible values: Integers from 1 to 64
+--
+-- 'httpTokens', 'launchTemplateInstanceMetadataOptionsRequest_httpTokens' - The state of token usage for your instance metadata requests. If the
+-- parameter is not specified in the request, the default state is
+-- @optional@.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a signed token header on your request. If you retrieve
+-- the IAM role credentials without a token, the version 1.0 role
+-- credentials are returned. If you retrieve the IAM role credentials using
+-- a valid signed token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a signed token header with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+--
+-- 'instanceMetadataTags', 'launchTemplateInstanceMetadataOptionsRequest_instanceMetadataTags' - Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+newLaunchTemplateInstanceMetadataOptionsRequest ::
+  LaunchTemplateInstanceMetadataOptionsRequest
+newLaunchTemplateInstanceMetadataOptionsRequest =
+  LaunchTemplateInstanceMetadataOptionsRequest'
+    { httpEndpoint =
+        Prelude.Nothing,
+      httpProtocolIpv6 =
+        Prelude.Nothing,
+      httpPutResponseHopLimit =
+        Prelude.Nothing,
+      httpTokens = Prelude.Nothing,
+      instanceMetadataTags =
+        Prelude.Nothing
+    }
+
+-- | Enables or disables the HTTP metadata endpoint on your instances. If the
+-- parameter is not specified, the default state is @enabled@.
+--
+-- If you specify a value of @disabled@, you will not be able to access
+-- your instance metadata.
+launchTemplateInstanceMetadataOptionsRequest_httpEndpoint :: Lens.Lens' LaunchTemplateInstanceMetadataOptionsRequest (Prelude.Maybe LaunchTemplateInstanceMetadataEndpointState)
+launchTemplateInstanceMetadataOptionsRequest_httpEndpoint = Lens.lens (\LaunchTemplateInstanceMetadataOptionsRequest' {httpEndpoint} -> httpEndpoint) (\s@LaunchTemplateInstanceMetadataOptionsRequest' {} a -> s {httpEndpoint = a} :: LaunchTemplateInstanceMetadataOptionsRequest)
+
+-- | Enables or disables the IPv6 endpoint for the instance metadata service.
+--
+-- Default: @disabled@
+launchTemplateInstanceMetadataOptionsRequest_httpProtocolIpv6 :: Lens.Lens' LaunchTemplateInstanceMetadataOptionsRequest (Prelude.Maybe LaunchTemplateInstanceMetadataProtocolIpv6)
+launchTemplateInstanceMetadataOptionsRequest_httpProtocolIpv6 = Lens.lens (\LaunchTemplateInstanceMetadataOptionsRequest' {httpProtocolIpv6} -> httpProtocolIpv6) (\s@LaunchTemplateInstanceMetadataOptionsRequest' {} a -> s {httpProtocolIpv6 = a} :: LaunchTemplateInstanceMetadataOptionsRequest)
+
+-- | The desired HTTP PUT response hop limit for instance metadata requests.
+-- The larger the number, the further instance metadata requests can
+-- travel.
+--
+-- Default: @1@
+--
+-- Possible values: Integers from 1 to 64
+launchTemplateInstanceMetadataOptionsRequest_httpPutResponseHopLimit :: Lens.Lens' LaunchTemplateInstanceMetadataOptionsRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceMetadataOptionsRequest_httpPutResponseHopLimit = Lens.lens (\LaunchTemplateInstanceMetadataOptionsRequest' {httpPutResponseHopLimit} -> httpPutResponseHopLimit) (\s@LaunchTemplateInstanceMetadataOptionsRequest' {} a -> s {httpPutResponseHopLimit = a} :: LaunchTemplateInstanceMetadataOptionsRequest)
+
+-- | The state of token usage for your instance metadata requests. If the
+-- parameter is not specified in the request, the default state is
+-- @optional@.
+--
+-- If the state is @optional@, you can choose to retrieve instance metadata
+-- with or without a signed token header on your request. If you retrieve
+-- the IAM role credentials without a token, the version 1.0 role
+-- credentials are returned. If you retrieve the IAM role credentials using
+-- a valid signed token, the version 2.0 role credentials are returned.
+--
+-- If the state is @required@, you must send a signed token header with any
+-- instance metadata retrieval requests. In this state, retrieving the IAM
+-- role credentials always returns the version 2.0 credentials; the version
+-- 1.0 credentials are not available.
+launchTemplateInstanceMetadataOptionsRequest_httpTokens :: Lens.Lens' LaunchTemplateInstanceMetadataOptionsRequest (Prelude.Maybe LaunchTemplateHttpTokensState)
+launchTemplateInstanceMetadataOptionsRequest_httpTokens = Lens.lens (\LaunchTemplateInstanceMetadataOptionsRequest' {httpTokens} -> httpTokens) (\s@LaunchTemplateInstanceMetadataOptionsRequest' {} a -> s {httpTokens = a} :: LaunchTemplateInstanceMetadataOptionsRequest)
+
+-- | Set to @enabled@ to allow access to instance tags from the instance
+-- metadata. Set to @disabled@ to turn off access to instance tags from the
+-- instance metadata. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS Work with instance tags using the instance metadata>.
+--
+-- Default: @disabled@
+launchTemplateInstanceMetadataOptionsRequest_instanceMetadataTags :: Lens.Lens' LaunchTemplateInstanceMetadataOptionsRequest (Prelude.Maybe LaunchTemplateInstanceMetadataTagsState)
+launchTemplateInstanceMetadataOptionsRequest_instanceMetadataTags = Lens.lens (\LaunchTemplateInstanceMetadataOptionsRequest' {instanceMetadataTags} -> instanceMetadataTags) (\s@LaunchTemplateInstanceMetadataOptionsRequest' {} a -> s {instanceMetadataTags = a} :: LaunchTemplateInstanceMetadataOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceMetadataOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceMetadataOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` httpEndpoint
+        `Prelude.hashWithSalt` httpProtocolIpv6
+        `Prelude.hashWithSalt` httpPutResponseHopLimit
+        `Prelude.hashWithSalt` httpTokens
+        `Prelude.hashWithSalt` instanceMetadataTags
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceMetadataOptionsRequest
+  where
+  rnf LaunchTemplateInstanceMetadataOptionsRequest' {..} =
+    Prelude.rnf httpEndpoint
+      `Prelude.seq` Prelude.rnf httpProtocolIpv6
+      `Prelude.seq` Prelude.rnf httpPutResponseHopLimit
+      `Prelude.seq` Prelude.rnf httpTokens
+      `Prelude.seq` Prelude.rnf instanceMetadataTags
+
+instance
+  Data.ToQuery
+    LaunchTemplateInstanceMetadataOptionsRequest
+  where
+  toQuery
+    LaunchTemplateInstanceMetadataOptionsRequest' {..} =
+      Prelude.mconcat
+        [ "HttpEndpoint" Data.=: httpEndpoint,
+          "HttpProtocolIpv6" Data.=: httpProtocolIpv6,
+          "HttpPutResponseHopLimit"
+            Data.=: httpPutResponseHopLimit,
+          "HttpTokens" Data.=: httpTokens,
+          "InstanceMetadataTags" Data.=: instanceMetadataTags
+        ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptionsState.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptionsState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataOptionsState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsState
+  ( LaunchTemplateInstanceMetadataOptionsState
+      ( ..,
+        LaunchTemplateInstanceMetadataOptionsState_Applied,
+        LaunchTemplateInstanceMetadataOptionsState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateInstanceMetadataOptionsState = LaunchTemplateInstanceMetadataOptionsState'
+  { fromLaunchTemplateInstanceMetadataOptionsState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateInstanceMetadataOptionsState_Applied :: LaunchTemplateInstanceMetadataOptionsState
+pattern LaunchTemplateInstanceMetadataOptionsState_Applied = LaunchTemplateInstanceMetadataOptionsState' "applied"
+
+pattern LaunchTemplateInstanceMetadataOptionsState_Pending :: LaunchTemplateInstanceMetadataOptionsState
+pattern LaunchTemplateInstanceMetadataOptionsState_Pending = LaunchTemplateInstanceMetadataOptionsState' "pending"
+
+{-# COMPLETE
+  LaunchTemplateInstanceMetadataOptionsState_Applied,
+  LaunchTemplateInstanceMetadataOptionsState_Pending,
+  LaunchTemplateInstanceMetadataOptionsState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataProtocolIpv6.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataProtocolIpv6.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataProtocolIpv6.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMetadataProtocolIpv6
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMetadataProtocolIpv6
+  ( LaunchTemplateInstanceMetadataProtocolIpv6
+      ( ..,
+        LaunchTemplateInstanceMetadataProtocolIpv6_Disabled,
+        LaunchTemplateInstanceMetadataProtocolIpv6_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateInstanceMetadataProtocolIpv6 = LaunchTemplateInstanceMetadataProtocolIpv6'
+  { fromLaunchTemplateInstanceMetadataProtocolIpv6 ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateInstanceMetadataProtocolIpv6_Disabled :: LaunchTemplateInstanceMetadataProtocolIpv6
+pattern LaunchTemplateInstanceMetadataProtocolIpv6_Disabled = LaunchTemplateInstanceMetadataProtocolIpv6' "disabled"
+
+pattern LaunchTemplateInstanceMetadataProtocolIpv6_Enabled :: LaunchTemplateInstanceMetadataProtocolIpv6
+pattern LaunchTemplateInstanceMetadataProtocolIpv6_Enabled = LaunchTemplateInstanceMetadataProtocolIpv6' "enabled"
+
+{-# COMPLETE
+  LaunchTemplateInstanceMetadataProtocolIpv6_Disabled,
+  LaunchTemplateInstanceMetadataProtocolIpv6_Enabled,
+  LaunchTemplateInstanceMetadataProtocolIpv6'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataTagsState.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataTagsState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceMetadataTagsState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceMetadataTagsState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceMetadataTagsState
+  ( LaunchTemplateInstanceMetadataTagsState
+      ( ..,
+        LaunchTemplateInstanceMetadataTagsState_Disabled,
+        LaunchTemplateInstanceMetadataTagsState_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LaunchTemplateInstanceMetadataTagsState = LaunchTemplateInstanceMetadataTagsState'
+  { fromLaunchTemplateInstanceMetadataTagsState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LaunchTemplateInstanceMetadataTagsState_Disabled :: LaunchTemplateInstanceMetadataTagsState
+pattern LaunchTemplateInstanceMetadataTagsState_Disabled = LaunchTemplateInstanceMetadataTagsState' "disabled"
+
+pattern LaunchTemplateInstanceMetadataTagsState_Enabled :: LaunchTemplateInstanceMetadataTagsState
+pattern LaunchTemplateInstanceMetadataTagsState_Enabled = LaunchTemplateInstanceMetadataTagsState' "enabled"
+
+{-# COMPLETE
+  LaunchTemplateInstanceMetadataTagsState_Disabled,
+  LaunchTemplateInstanceMetadataTagsState_Enabled,
+  LaunchTemplateInstanceMetadataTagsState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceNetworkInterfaceSpecification.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceNetworkInterfaceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceNetworkInterfaceSpecification.hs
@@ -0,0 +1,377 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceIpv6Address
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationResponse
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationResponse
+import Amazonka.EC2.Types.PrivateIpAddressSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface.
+--
+-- /See:/ 'newLaunchTemplateInstanceNetworkInterfaceSpecification' smart constructor.
+data LaunchTemplateInstanceNetworkInterfaceSpecification = LaunchTemplateInstanceNetworkInterfaceSpecification'
+  { -- | Indicates whether to associate a Carrier IP address with eth0 for a new
+    -- network interface.
+    --
+    -- Use this option when you launch an instance in a Wavelength Zone and
+    -- want to associate a Carrier IP address with the network interface. For
+    -- more information about Carrier IP addresses, see
+    -- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP addresses>
+    -- in the /Wavelength Developer Guide/.
+    associateCarrierIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to associate a public IPv4 address with eth0 for a new
+    -- network interface.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the network interface is deleted when the instance is
+    -- terminated.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | A description for the network interface.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The device index for the network interface attachment.
+    deviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | The IDs of one or more security groups.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | The type of network interface.
+    interfaceType :: Prelude.Maybe Prelude.Text,
+    -- | The number of IPv4 prefixes that Amazon Web Services automatically
+    -- assigned to the network interface.
+    ipv4PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more IPv4 prefixes assigned to the network interface.
+    ipv4Prefixes :: Prelude.Maybe [Ipv4PrefixSpecificationResponse],
+    -- | The number of IPv6 addresses for the network interface.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The IPv6 addresses for the network interface.
+    ipv6Addresses :: Prelude.Maybe [InstanceIpv6Address],
+    -- | The number of IPv6 prefixes that Amazon Web Services automatically
+    -- assigned to the network interface.
+    ipv6PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more IPv6 prefixes assigned to the network interface.
+    ipv6Prefixes :: Prelude.Maybe [Ipv6PrefixSpecificationResponse],
+    -- | The index of the network card.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The primary private IPv4 address of the network interface.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | One or more private IPv4 addresses.
+    privateIpAddresses :: Prelude.Maybe [PrivateIpAddressSpecification],
+    -- | The number of secondary private IPv4 addresses for the network
+    -- interface.
+    secondaryPrivateIpAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the subnet for the network interface.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceNetworkInterfaceSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associateCarrierIpAddress', 'launchTemplateInstanceNetworkInterfaceSpecification_associateCarrierIpAddress' - Indicates whether to associate a Carrier IP address with eth0 for a new
+-- network interface.
+--
+-- Use this option when you launch an instance in a Wavelength Zone and
+-- want to associate a Carrier IP address with the network interface. For
+-- more information about Carrier IP addresses, see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP addresses>
+-- in the /Wavelength Developer Guide/.
+--
+-- 'associatePublicIpAddress', 'launchTemplateInstanceNetworkInterfaceSpecification_associatePublicIpAddress' - Indicates whether to associate a public IPv4 address with eth0 for a new
+-- network interface.
+--
+-- 'deleteOnTermination', 'launchTemplateInstanceNetworkInterfaceSpecification_deleteOnTermination' - Indicates whether the network interface is deleted when the instance is
+-- terminated.
+--
+-- 'description', 'launchTemplateInstanceNetworkInterfaceSpecification_description' - A description for the network interface.
+--
+-- 'deviceIndex', 'launchTemplateInstanceNetworkInterfaceSpecification_deviceIndex' - The device index for the network interface attachment.
+--
+-- 'groups', 'launchTemplateInstanceNetworkInterfaceSpecification_groups' - The IDs of one or more security groups.
+--
+-- 'interfaceType', 'launchTemplateInstanceNetworkInterfaceSpecification_interfaceType' - The type of network interface.
+--
+-- 'ipv4PrefixCount', 'launchTemplateInstanceNetworkInterfaceSpecification_ipv4PrefixCount' - The number of IPv4 prefixes that Amazon Web Services automatically
+-- assigned to the network interface.
+--
+-- 'ipv4Prefixes', 'launchTemplateInstanceNetworkInterfaceSpecification_ipv4Prefixes' - One or more IPv4 prefixes assigned to the network interface.
+--
+-- 'ipv6AddressCount', 'launchTemplateInstanceNetworkInterfaceSpecification_ipv6AddressCount' - The number of IPv6 addresses for the network interface.
+--
+-- 'ipv6Addresses', 'launchTemplateInstanceNetworkInterfaceSpecification_ipv6Addresses' - The IPv6 addresses for the network interface.
+--
+-- 'ipv6PrefixCount', 'launchTemplateInstanceNetworkInterfaceSpecification_ipv6PrefixCount' - The number of IPv6 prefixes that Amazon Web Services automatically
+-- assigned to the network interface.
+--
+-- 'ipv6Prefixes', 'launchTemplateInstanceNetworkInterfaceSpecification_ipv6Prefixes' - One or more IPv6 prefixes assigned to the network interface.
+--
+-- 'networkCardIndex', 'launchTemplateInstanceNetworkInterfaceSpecification_networkCardIndex' - The index of the network card.
+--
+-- 'networkInterfaceId', 'launchTemplateInstanceNetworkInterfaceSpecification_networkInterfaceId' - The ID of the network interface.
+--
+-- 'privateIpAddress', 'launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddress' - The primary private IPv4 address of the network interface.
+--
+-- 'privateIpAddresses', 'launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddresses' - One or more private IPv4 addresses.
+--
+-- 'secondaryPrivateIpAddressCount', 'launchTemplateInstanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount' - The number of secondary private IPv4 addresses for the network
+-- interface.
+--
+-- 'subnetId', 'launchTemplateInstanceNetworkInterfaceSpecification_subnetId' - The ID of the subnet for the network interface.
+newLaunchTemplateInstanceNetworkInterfaceSpecification ::
+  LaunchTemplateInstanceNetworkInterfaceSpecification
+newLaunchTemplateInstanceNetworkInterfaceSpecification =
+  LaunchTemplateInstanceNetworkInterfaceSpecification'
+    { associateCarrierIpAddress =
+        Prelude.Nothing,
+      associatePublicIpAddress =
+        Prelude.Nothing,
+      deleteOnTermination =
+        Prelude.Nothing,
+      description =
+        Prelude.Nothing,
+      deviceIndex =
+        Prelude.Nothing,
+      groups =
+        Prelude.Nothing,
+      interfaceType =
+        Prelude.Nothing,
+      ipv4PrefixCount =
+        Prelude.Nothing,
+      ipv4Prefixes =
+        Prelude.Nothing,
+      ipv6AddressCount =
+        Prelude.Nothing,
+      ipv6Addresses =
+        Prelude.Nothing,
+      ipv6PrefixCount =
+        Prelude.Nothing,
+      ipv6Prefixes =
+        Prelude.Nothing,
+      networkCardIndex =
+        Prelude.Nothing,
+      networkInterfaceId =
+        Prelude.Nothing,
+      privateIpAddress =
+        Prelude.Nothing,
+      privateIpAddresses =
+        Prelude.Nothing,
+      secondaryPrivateIpAddressCount =
+        Prelude.Nothing,
+      subnetId =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether to associate a Carrier IP address with eth0 for a new
+-- network interface.
+--
+-- Use this option when you launch an instance in a Wavelength Zone and
+-- want to associate a Carrier IP address with the network interface. For
+-- more information about Carrier IP addresses, see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP addresses>
+-- in the /Wavelength Developer Guide/.
+launchTemplateInstanceNetworkInterfaceSpecification_associateCarrierIpAddress :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Bool)
+launchTemplateInstanceNetworkInterfaceSpecification_associateCarrierIpAddress = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {associateCarrierIpAddress} -> associateCarrierIpAddress) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {associateCarrierIpAddress = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | Indicates whether to associate a public IPv4 address with eth0 for a new
+-- network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_associatePublicIpAddress :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Bool)
+launchTemplateInstanceNetworkInterfaceSpecification_associatePublicIpAddress = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {associatePublicIpAddress = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+launchTemplateInstanceNetworkInterfaceSpecification_deleteOnTermination :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Bool)
+launchTemplateInstanceNetworkInterfaceSpecification_deleteOnTermination = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {deleteOnTermination} -> deleteOnTermination) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {deleteOnTermination = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | A description for the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_description :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecification_description = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {description} -> description) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {description = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The device index for the network interface attachment.
+launchTemplateInstanceNetworkInterfaceSpecification_deviceIndex :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecification_deviceIndex = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {deviceIndex} -> deviceIndex) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {deviceIndex = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The IDs of one or more security groups.
+launchTemplateInstanceNetworkInterfaceSpecification_groups :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe [Prelude.Text])
+launchTemplateInstanceNetworkInterfaceSpecification_groups = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {groups} -> groups) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {groups = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_interfaceType :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecification_interfaceType = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {interfaceType} -> interfaceType) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {interfaceType = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The number of IPv4 prefixes that Amazon Web Services automatically
+-- assigned to the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_ipv4PrefixCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecification_ipv4PrefixCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {ipv4PrefixCount} -> ipv4PrefixCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {ipv4PrefixCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | One or more IPv4 prefixes assigned to the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_ipv4Prefixes :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe [Ipv4PrefixSpecificationResponse])
+launchTemplateInstanceNetworkInterfaceSpecification_ipv4Prefixes = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {ipv4Prefixes} -> ipv4Prefixes) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {ipv4Prefixes = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 addresses for the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6AddressCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6AddressCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {ipv6AddressCount} -> ipv6AddressCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {ipv6AddressCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The IPv6 addresses for the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6Addresses :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe [InstanceIpv6Address])
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6Addresses = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {ipv6Addresses} -> ipv6Addresses) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {ipv6Addresses = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 prefixes that Amazon Web Services automatically
+-- assigned to the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6PrefixCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6PrefixCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {ipv6PrefixCount} -> ipv6PrefixCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {ipv6PrefixCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | One or more IPv6 prefixes assigned to the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6Prefixes :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe [Ipv6PrefixSpecificationResponse])
+launchTemplateInstanceNetworkInterfaceSpecification_ipv6Prefixes = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {ipv6Prefixes} -> ipv6Prefixes) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {ipv6Prefixes = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The index of the network card.
+launchTemplateInstanceNetworkInterfaceSpecification_networkCardIndex :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecification_networkCardIndex = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {networkCardIndex} -> networkCardIndex) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {networkCardIndex = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The ID of the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_networkInterfaceId :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecification_networkInterfaceId = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {networkInterfaceId} -> networkInterfaceId) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {networkInterfaceId = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The primary private IPv4 address of the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddress :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddress = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {privateIpAddress} -> privateIpAddress) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {privateIpAddress = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | One or more private IPv4 addresses.
+launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddresses :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe [PrivateIpAddressSpecification])
+launchTemplateInstanceNetworkInterfaceSpecification_privateIpAddresses = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {privateIpAddresses} -> privateIpAddresses) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {privateIpAddresses = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of secondary private IPv4 addresses for the network
+-- interface.
+launchTemplateInstanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecification_secondaryPrivateIpAddressCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {secondaryPrivateIpAddressCount} -> secondaryPrivateIpAddressCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {secondaryPrivateIpAddressCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+-- | The ID of the subnet for the network interface.
+launchTemplateInstanceNetworkInterfaceSpecification_subnetId :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecification_subnetId = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecification' {subnetId} -> subnetId) (\s@LaunchTemplateInstanceNetworkInterfaceSpecification' {} a -> s {subnetId = a} :: LaunchTemplateInstanceNetworkInterfaceSpecification)
+
+instance
+  Data.FromXML
+    LaunchTemplateInstanceNetworkInterfaceSpecification
+  where
+  parseXML x =
+    LaunchTemplateInstanceNetworkInterfaceSpecification'
+      Prelude.<$> (x Data..@? "associateCarrierIpAddress")
+      Prelude.<*> (x Data..@? "associatePublicIpAddress")
+      Prelude.<*> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "deviceIndex")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "groupId")
+                  )
+      Prelude.<*> (x Data..@? "interfaceType")
+      Prelude.<*> (x Data..@? "ipv4PrefixCount")
+      Prelude.<*> ( x
+                      Data..@? "ipv4PrefixSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipv6AddressCount")
+      Prelude.<*> ( x
+                      Data..@? "ipv6AddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipv6PrefixCount")
+      Prelude.<*> ( x
+                      Data..@? "ipv6PrefixSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "networkCardIndex")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "privateIpAddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "secondaryPrivateIpAddressCount")
+      Prelude.<*> (x Data..@? "subnetId")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceNetworkInterfaceSpecification
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceNetworkInterfaceSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` associateCarrierIpAddress
+        `Prelude.hashWithSalt` associatePublicIpAddress
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` deviceIndex
+        `Prelude.hashWithSalt` groups
+        `Prelude.hashWithSalt` interfaceType
+        `Prelude.hashWithSalt` ipv4PrefixCount
+        `Prelude.hashWithSalt` ipv4Prefixes
+        `Prelude.hashWithSalt` ipv6AddressCount
+        `Prelude.hashWithSalt` ipv6Addresses
+        `Prelude.hashWithSalt` ipv6PrefixCount
+        `Prelude.hashWithSalt` ipv6Prefixes
+        `Prelude.hashWithSalt` networkCardIndex
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` privateIpAddress
+        `Prelude.hashWithSalt` privateIpAddresses
+        `Prelude.hashWithSalt` secondaryPrivateIpAddressCount
+        `Prelude.hashWithSalt` subnetId
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceNetworkInterfaceSpecification
+  where
+  rnf
+    LaunchTemplateInstanceNetworkInterfaceSpecification' {..} =
+      Prelude.rnf associateCarrierIpAddress
+        `Prelude.seq` Prelude.rnf associatePublicIpAddress
+        `Prelude.seq` Prelude.rnf deleteOnTermination
+        `Prelude.seq` Prelude.rnf description
+        `Prelude.seq` Prelude.rnf deviceIndex
+        `Prelude.seq` Prelude.rnf groups
+        `Prelude.seq` Prelude.rnf interfaceType
+        `Prelude.seq` Prelude.rnf ipv4PrefixCount
+        `Prelude.seq` Prelude.rnf ipv4Prefixes
+        `Prelude.seq` Prelude.rnf ipv6AddressCount
+        `Prelude.seq` Prelude.rnf ipv6Addresses
+        `Prelude.seq` Prelude.rnf ipv6PrefixCount
+        `Prelude.seq` Prelude.rnf ipv6Prefixes
+        `Prelude.seq` Prelude.rnf networkCardIndex
+        `Prelude.seq` Prelude.rnf networkInterfaceId
+        `Prelude.seq` Prelude.rnf privateIpAddress
+        `Prelude.seq` Prelude.rnf privateIpAddresses
+        `Prelude.seq` Prelude.rnf
+          secondaryPrivateIpAddressCount
+        `Prelude.seq` Prelude.rnf subnetId
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateInstanceNetworkInterfaceSpecificationRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceNetworkInterfaceSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateInstanceNetworkInterfaceSpecificationRequest.hs
@@ -0,0 +1,425 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceIpv6AddressRequest
+import Amazonka.EC2.Types.Ipv4PrefixSpecificationRequest
+import Amazonka.EC2.Types.Ipv6PrefixSpecificationRequest
+import Amazonka.EC2.Types.PrivateIpAddressSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | The parameters for a network interface.
+--
+-- /See:/ 'newLaunchTemplateInstanceNetworkInterfaceSpecificationRequest' smart constructor.
+data LaunchTemplateInstanceNetworkInterfaceSpecificationRequest = LaunchTemplateInstanceNetworkInterfaceSpecificationRequest'
+  { -- | Associates a Carrier IP address with eth0 for a new network interface.
+    --
+    -- Use this option when you launch an instance in a Wavelength Zone and
+    -- want to associate a Carrier IP address with the network interface. For
+    -- more information about Carrier IP addresses, see
+    -- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP addresses>
+    -- in the /Wavelength Developer Guide/.
+    associateCarrierIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Associates a public IPv4 address with eth0 for a new network interface.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the network interface is deleted when the instance is
+    -- terminated.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | A description for the network interface.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The device index for the network interface attachment.
+    deviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | The IDs of one or more security groups.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | The type of network interface. To create an Elastic Fabric Adapter
+    -- (EFA), specify @efa@. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html Elastic Fabric Adapter>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- If you are not creating an EFA, specify @interface@ or omit this
+    -- parameter.
+    --
+    -- Valid values: @interface@ | @efa@
+    interfaceType :: Prelude.Maybe Prelude.Text,
+    -- | The number of IPv4 prefixes to be automatically assigned to the network
+    -- interface. You cannot use this option if you use the @Ipv4Prefix@
+    -- option.
+    ipv4PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more IPv4 prefixes to be assigned to the network interface. You
+    -- cannot use this option if you use the @Ipv4PrefixCount@ option.
+    ipv4Prefixes :: Prelude.Maybe [Ipv4PrefixSpecificationRequest],
+    -- | The number of IPv6 addresses to assign to a network interface. Amazon
+    -- EC2 automatically selects the IPv6 addresses from the subnet range. You
+    -- can\'t use this option if specifying specific IPv6 addresses.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more specific IPv6 addresses from the IPv6 CIDR block range of
+    -- your subnet. You can\'t use this option if you\'re specifying a number
+    -- of IPv6 addresses.
+    ipv6Addresses :: Prelude.Maybe [InstanceIpv6AddressRequest],
+    -- | The number of IPv6 prefixes to be automatically assigned to the network
+    -- interface. You cannot use this option if you use the @Ipv6Prefix@
+    -- option.
+    ipv6PrefixCount :: Prelude.Maybe Prelude.Int,
+    -- | One or more IPv6 prefixes to be assigned to the network interface. You
+    -- cannot use this option if you use the @Ipv6PrefixCount@ option.
+    ipv6Prefixes :: Prelude.Maybe [Ipv6PrefixSpecificationRequest],
+    -- | The index of the network card. Some instance types support multiple
+    -- network cards. The primary network interface must be assigned to network
+    -- card index 0. The default is network card index 0.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The primary private IPv4 address of the network interface.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | One or more private IPv4 addresses.
+    privateIpAddresses :: Prelude.Maybe [PrivateIpAddressSpecification],
+    -- | The number of secondary private IPv4 addresses to assign to a network
+    -- interface.
+    secondaryPrivateIpAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the subnet for the network interface.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associateCarrierIpAddress', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_associateCarrierIpAddress' - Associates a Carrier IP address with eth0 for a new network interface.
+--
+-- Use this option when you launch an instance in a Wavelength Zone and
+-- want to associate a Carrier IP address with the network interface. For
+-- more information about Carrier IP addresses, see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP addresses>
+-- in the /Wavelength Developer Guide/.
+--
+-- 'associatePublicIpAddress', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_associatePublicIpAddress' - Associates a public IPv4 address with eth0 for a new network interface.
+--
+-- 'deleteOnTermination', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_deleteOnTermination' - Indicates whether the network interface is deleted when the instance is
+-- terminated.
+--
+-- 'description', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_description' - A description for the network interface.
+--
+-- 'deviceIndex', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_deviceIndex' - The device index for the network interface attachment.
+--
+-- 'groups', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_groups' - The IDs of one or more security groups.
+--
+-- 'interfaceType', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_interfaceType' - The type of network interface. To create an Elastic Fabric Adapter
+-- (EFA), specify @efa@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html Elastic Fabric Adapter>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you are not creating an EFA, specify @interface@ or omit this
+-- parameter.
+--
+-- Valid values: @interface@ | @efa@
+--
+-- 'ipv4PrefixCount', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4PrefixCount' - The number of IPv4 prefixes to be automatically assigned to the network
+-- interface. You cannot use this option if you use the @Ipv4Prefix@
+-- option.
+--
+-- 'ipv4Prefixes', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4Prefixes' - One or more IPv4 prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv4PrefixCount@ option.
+--
+-- 'ipv6AddressCount', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6AddressCount' - The number of IPv6 addresses to assign to a network interface. Amazon
+-- EC2 automatically selects the IPv6 addresses from the subnet range. You
+-- can\'t use this option if specifying specific IPv6 addresses.
+--
+-- 'ipv6Addresses', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Addresses' - One or more specific IPv6 addresses from the IPv6 CIDR block range of
+-- your subnet. You can\'t use this option if you\'re specifying a number
+-- of IPv6 addresses.
+--
+-- 'ipv6PrefixCount', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6PrefixCount' - The number of IPv6 prefixes to be automatically assigned to the network
+-- interface. You cannot use this option if you use the @Ipv6Prefix@
+-- option.
+--
+-- 'ipv6Prefixes', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Prefixes' - One or more IPv6 prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv6PrefixCount@ option.
+--
+-- 'networkCardIndex', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkCardIndex' - The index of the network card. Some instance types support multiple
+-- network cards. The primary network interface must be assigned to network
+-- card index 0. The default is network card index 0.
+--
+-- 'networkInterfaceId', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkInterfaceId' - The ID of the network interface.
+--
+-- 'privateIpAddress', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddress' - The primary private IPv4 address of the network interface.
+--
+-- 'privateIpAddresses', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddresses' - One or more private IPv4 addresses.
+--
+-- 'secondaryPrivateIpAddressCount', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_secondaryPrivateIpAddressCount' - The number of secondary private IPv4 addresses to assign to a network
+-- interface.
+--
+-- 'subnetId', 'launchTemplateInstanceNetworkInterfaceSpecificationRequest_subnetId' - The ID of the subnet for the network interface.
+newLaunchTemplateInstanceNetworkInterfaceSpecificationRequest ::
+  LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+newLaunchTemplateInstanceNetworkInterfaceSpecificationRequest =
+  LaunchTemplateInstanceNetworkInterfaceSpecificationRequest'
+    { associateCarrierIpAddress =
+        Prelude.Nothing,
+      associatePublicIpAddress =
+        Prelude.Nothing,
+      deleteOnTermination =
+        Prelude.Nothing,
+      description =
+        Prelude.Nothing,
+      deviceIndex =
+        Prelude.Nothing,
+      groups =
+        Prelude.Nothing,
+      interfaceType =
+        Prelude.Nothing,
+      ipv4PrefixCount =
+        Prelude.Nothing,
+      ipv4Prefixes =
+        Prelude.Nothing,
+      ipv6AddressCount =
+        Prelude.Nothing,
+      ipv6Addresses =
+        Prelude.Nothing,
+      ipv6PrefixCount =
+        Prelude.Nothing,
+      ipv6Prefixes =
+        Prelude.Nothing,
+      networkCardIndex =
+        Prelude.Nothing,
+      networkInterfaceId =
+        Prelude.Nothing,
+      privateIpAddress =
+        Prelude.Nothing,
+      privateIpAddresses =
+        Prelude.Nothing,
+      secondaryPrivateIpAddressCount =
+        Prelude.Nothing,
+      subnetId =
+        Prelude.Nothing
+    }
+
+-- | Associates a Carrier IP address with eth0 for a new network interface.
+--
+-- Use this option when you launch an instance in a Wavelength Zone and
+-- want to associate a Carrier IP address with the network interface. For
+-- more information about Carrier IP addresses, see
+-- <https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip Carrier IP addresses>
+-- in the /Wavelength Developer Guide/.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_associateCarrierIpAddress :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_associateCarrierIpAddress = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {associateCarrierIpAddress} -> associateCarrierIpAddress) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {associateCarrierIpAddress = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | Associates a public IPv4 address with eth0 for a new network interface.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_associatePublicIpAddress :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_associatePublicIpAddress = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {associatePublicIpAddress = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_deleteOnTermination :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Bool)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_deleteOnTermination = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {deleteOnTermination} -> deleteOnTermination) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {deleteOnTermination = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | A description for the network interface.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_description :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_description = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {description} -> description) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {description = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | The device index for the network interface attachment.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_deviceIndex :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_deviceIndex = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {deviceIndex} -> deviceIndex) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {deviceIndex = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | The IDs of one or more security groups.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_groups :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe [Prelude.Text])
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_groups = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {groups} -> groups) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {groups = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of network interface. To create an Elastic Fabric Adapter
+-- (EFA), specify @efa@. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html Elastic Fabric Adapter>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you are not creating an EFA, specify @interface@ or omit this
+-- parameter.
+--
+-- Valid values: @interface@ | @efa@
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_interfaceType :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_interfaceType = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {interfaceType} -> interfaceType) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {interfaceType = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | The number of IPv4 prefixes to be automatically assigned to the network
+-- interface. You cannot use this option if you use the @Ipv4Prefix@
+-- option.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4PrefixCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4PrefixCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {ipv4PrefixCount} -> ipv4PrefixCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {ipv4PrefixCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | One or more IPv4 prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv4PrefixCount@ option.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4Prefixes :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe [Ipv4PrefixSpecificationRequest])
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv4Prefixes = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {ipv4Prefixes} -> ipv4Prefixes) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {ipv4Prefixes = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 addresses to assign to a network interface. Amazon
+-- EC2 automatically selects the IPv6 addresses from the subnet range. You
+-- can\'t use this option if specifying specific IPv6 addresses.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6AddressCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6AddressCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {ipv6AddressCount} -> ipv6AddressCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {ipv6AddressCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | One or more specific IPv6 addresses from the IPv6 CIDR block range of
+-- your subnet. You can\'t use this option if you\'re specifying a number
+-- of IPv6 addresses.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Addresses :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe [InstanceIpv6AddressRequest])
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Addresses = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {ipv6Addresses} -> ipv6Addresses) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {ipv6Addresses = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 prefixes to be automatically assigned to the network
+-- interface. You cannot use this option if you use the @Ipv6Prefix@
+-- option.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6PrefixCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6PrefixCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {ipv6PrefixCount} -> ipv6PrefixCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {ipv6PrefixCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | One or more IPv6 prefixes to be assigned to the network interface. You
+-- cannot use this option if you use the @Ipv6PrefixCount@ option.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Prefixes :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe [Ipv6PrefixSpecificationRequest])
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_ipv6Prefixes = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {ipv6Prefixes} -> ipv6Prefixes) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {ipv6Prefixes = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The index of the network card. Some instance types support multiple
+-- network cards. The primary network interface must be assigned to network
+-- card index 0. The default is network card index 0.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkCardIndex :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkCardIndex = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {networkCardIndex} -> networkCardIndex) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {networkCardIndex = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | The ID of the network interface.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkInterfaceId :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_networkInterfaceId = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {networkInterfaceId} -> networkInterfaceId) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {networkInterfaceId = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | The primary private IPv4 address of the network interface.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddress :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddress = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {privateIpAddress} -> privateIpAddress) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {privateIpAddress = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | One or more private IPv4 addresses.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddresses :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe [PrivateIpAddressSpecification])
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_privateIpAddresses = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {privateIpAddresses} -> privateIpAddresses) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {privateIpAddresses = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of secondary private IPv4 addresses to assign to a network
+-- interface.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_secondaryPrivateIpAddressCount :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Int)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_secondaryPrivateIpAddressCount = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {secondaryPrivateIpAddressCount} -> secondaryPrivateIpAddressCount) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {secondaryPrivateIpAddressCount = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+-- | The ID of the subnet for the network interface.
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_subnetId :: Lens.Lens' LaunchTemplateInstanceNetworkInterfaceSpecificationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateInstanceNetworkInterfaceSpecificationRequest_subnetId = Lens.lens (\LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {subnetId} -> subnetId) (\s@LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {} a -> s {subnetId = a} :: LaunchTemplateInstanceNetworkInterfaceSpecificationRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` associateCarrierIpAddress
+        `Prelude.hashWithSalt` associatePublicIpAddress
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` deviceIndex
+        `Prelude.hashWithSalt` groups
+        `Prelude.hashWithSalt` interfaceType
+        `Prelude.hashWithSalt` ipv4PrefixCount
+        `Prelude.hashWithSalt` ipv4Prefixes
+        `Prelude.hashWithSalt` ipv6AddressCount
+        `Prelude.hashWithSalt` ipv6Addresses
+        `Prelude.hashWithSalt` ipv6PrefixCount
+        `Prelude.hashWithSalt` ipv6Prefixes
+        `Prelude.hashWithSalt` networkCardIndex
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` privateIpAddress
+        `Prelude.hashWithSalt` privateIpAddresses
+        `Prelude.hashWithSalt` secondaryPrivateIpAddressCount
+        `Prelude.hashWithSalt` subnetId
+
+instance
+  Prelude.NFData
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+  where
+  rnf
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {..} =
+      Prelude.rnf associateCarrierIpAddress
+        `Prelude.seq` Prelude.rnf associatePublicIpAddress
+        `Prelude.seq` Prelude.rnf deleteOnTermination
+        `Prelude.seq` Prelude.rnf description
+        `Prelude.seq` Prelude.rnf deviceIndex
+        `Prelude.seq` Prelude.rnf groups
+        `Prelude.seq` Prelude.rnf interfaceType
+        `Prelude.seq` Prelude.rnf ipv4PrefixCount
+        `Prelude.seq` Prelude.rnf ipv4Prefixes
+        `Prelude.seq` Prelude.rnf ipv6AddressCount
+        `Prelude.seq` Prelude.rnf ipv6Addresses
+        `Prelude.seq` Prelude.rnf ipv6PrefixCount
+        `Prelude.seq` Prelude.rnf ipv6Prefixes
+        `Prelude.seq` Prelude.rnf networkCardIndex
+        `Prelude.seq` Prelude.rnf networkInterfaceId
+        `Prelude.seq` Prelude.rnf privateIpAddress
+        `Prelude.seq` Prelude.rnf privateIpAddresses
+        `Prelude.seq` Prelude.rnf
+          secondaryPrivateIpAddressCount
+        `Prelude.seq` Prelude.rnf subnetId
+
+instance
+  Data.ToQuery
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+  where
+  toQuery
+    LaunchTemplateInstanceNetworkInterfaceSpecificationRequest' {..} =
+      Prelude.mconcat
+        [ "AssociateCarrierIpAddress"
+            Data.=: associateCarrierIpAddress,
+          "AssociatePublicIpAddress"
+            Data.=: associatePublicIpAddress,
+          "DeleteOnTermination" Data.=: deleteOnTermination,
+          "Description" Data.=: description,
+          "DeviceIndex" Data.=: deviceIndex,
+          Data.toQuery
+            ( Data.toQueryList "SecurityGroupId"
+                Prelude.<$> groups
+            ),
+          "InterfaceType" Data.=: interfaceType,
+          "Ipv4PrefixCount" Data.=: ipv4PrefixCount,
+          Data.toQuery
+            ( Data.toQueryList "Ipv4Prefix"
+                Prelude.<$> ipv4Prefixes
+            ),
+          "Ipv6AddressCount" Data.=: ipv6AddressCount,
+          Data.toQuery
+            ( Data.toQueryList "Ipv6Addresses"
+                Prelude.<$> ipv6Addresses
+            ),
+          "Ipv6PrefixCount" Data.=: ipv6PrefixCount,
+          Data.toQuery
+            ( Data.toQueryList "Ipv6Prefix"
+                Prelude.<$> ipv6Prefixes
+            ),
+          "NetworkCardIndex" Data.=: networkCardIndex,
+          "NetworkInterfaceId" Data.=: networkInterfaceId,
+          "PrivateIpAddress" Data.=: privateIpAddress,
+          Data.toQuery
+            ( Data.toQueryList "PrivateIpAddresses"
+                Prelude.<$> privateIpAddresses
+            ),
+          "SecondaryPrivateIpAddressCount"
+            Data.=: secondaryPrivateIpAddressCount,
+          "SubnetId" Data.=: subnetId
+        ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateLicenseConfiguration.hs b/gen/Amazonka/EC2/Types/LaunchTemplateLicenseConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateLicenseConfiguration.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateLicenseConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateLicenseConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a license configuration.
+--
+-- /See:/ 'newLaunchTemplateLicenseConfiguration' smart constructor.
+data LaunchTemplateLicenseConfiguration = LaunchTemplateLicenseConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the license configuration.
+    licenseConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateLicenseConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'licenseConfigurationArn', 'launchTemplateLicenseConfiguration_licenseConfigurationArn' - The Amazon Resource Name (ARN) of the license configuration.
+newLaunchTemplateLicenseConfiguration ::
+  LaunchTemplateLicenseConfiguration
+newLaunchTemplateLicenseConfiguration =
+  LaunchTemplateLicenseConfiguration'
+    { licenseConfigurationArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the license configuration.
+launchTemplateLicenseConfiguration_licenseConfigurationArn :: Lens.Lens' LaunchTemplateLicenseConfiguration (Prelude.Maybe Prelude.Text)
+launchTemplateLicenseConfiguration_licenseConfigurationArn = Lens.lens (\LaunchTemplateLicenseConfiguration' {licenseConfigurationArn} -> licenseConfigurationArn) (\s@LaunchTemplateLicenseConfiguration' {} a -> s {licenseConfigurationArn = a} :: LaunchTemplateLicenseConfiguration)
+
+instance
+  Data.FromXML
+    LaunchTemplateLicenseConfiguration
+  where
+  parseXML x =
+    LaunchTemplateLicenseConfiguration'
+      Prelude.<$> (x Data..@? "licenseConfigurationArn")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateLicenseConfiguration
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateLicenseConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` licenseConfigurationArn
+
+instance
+  Prelude.NFData
+    LaunchTemplateLicenseConfiguration
+  where
+  rnf LaunchTemplateLicenseConfiguration' {..} =
+    Prelude.rnf licenseConfigurationArn
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateLicenseConfigurationRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateLicenseConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateLicenseConfigurationRequest.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateLicenseConfigurationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateLicenseConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a license configuration.
+--
+-- /See:/ 'newLaunchTemplateLicenseConfigurationRequest' smart constructor.
+data LaunchTemplateLicenseConfigurationRequest = LaunchTemplateLicenseConfigurationRequest'
+  { -- | The Amazon Resource Name (ARN) of the license configuration.
+    licenseConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateLicenseConfigurationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'licenseConfigurationArn', 'launchTemplateLicenseConfigurationRequest_licenseConfigurationArn' - The Amazon Resource Name (ARN) of the license configuration.
+newLaunchTemplateLicenseConfigurationRequest ::
+  LaunchTemplateLicenseConfigurationRequest
+newLaunchTemplateLicenseConfigurationRequest =
+  LaunchTemplateLicenseConfigurationRequest'
+    { licenseConfigurationArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the license configuration.
+launchTemplateLicenseConfigurationRequest_licenseConfigurationArn :: Lens.Lens' LaunchTemplateLicenseConfigurationRequest (Prelude.Maybe Prelude.Text)
+launchTemplateLicenseConfigurationRequest_licenseConfigurationArn = Lens.lens (\LaunchTemplateLicenseConfigurationRequest' {licenseConfigurationArn} -> licenseConfigurationArn) (\s@LaunchTemplateLicenseConfigurationRequest' {} a -> s {licenseConfigurationArn = a} :: LaunchTemplateLicenseConfigurationRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplateLicenseConfigurationRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateLicenseConfigurationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` licenseConfigurationArn
+
+instance
+  Prelude.NFData
+    LaunchTemplateLicenseConfigurationRequest
+  where
+  rnf LaunchTemplateLicenseConfigurationRequest' {..} =
+    Prelude.rnf licenseConfigurationArn
+
+instance
+  Data.ToQuery
+    LaunchTemplateLicenseConfigurationRequest
+  where
+  toQuery
+    LaunchTemplateLicenseConfigurationRequest' {..} =
+      Prelude.mconcat
+        [ "LicenseConfigurationArn"
+            Data.=: licenseConfigurationArn
+        ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateOverrides.hs b/gen/Amazonka/EC2/Types/LaunchTemplateOverrides.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateOverrides.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateOverrides
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateOverrides where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceRequirements
+import Amazonka.EC2.Types.InstanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes overrides for a launch template.
+--
+-- /See:/ 'newLaunchTemplateOverrides' smart constructor.
+data LaunchTemplateOverrides = LaunchTemplateOverrides'
+  { -- | The Availability Zone in which to launch the instances.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The instance requirements. When you specify instance requirements,
+    -- Amazon EC2 will identify instance types with the provided requirements,
+    -- and then use your On-Demand and Spot allocation strategies to launch
+    -- instances from these instance types, in the same way as when you specify
+    -- a list of instance types.
+    --
+    -- If you specify @InstanceRequirements@, you can\'t specify
+    -- @InstanceType@.
+    instanceRequirements :: Prelude.Maybe InstanceRequirements,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The priority for the launch template override. The highest priority is
+    -- launched first.
+    --
+    -- If @OnDemandAllocationStrategy@ is set to @prioritized@, Spot Fleet uses
+    -- priority to determine which launch template override to use first in
+    -- fulfilling On-Demand capacity.
+    --
+    -- If the Spot @AllocationStrategy@ is set to
+    -- @capacityOptimizedPrioritized@, Spot Fleet uses priority on a
+    -- best-effort basis to determine which launch template override to use in
+    -- fulfilling Spot capacity, but optimizes for capacity first.
+    --
+    -- Valid values are whole numbers starting at @0@. The lower the number,
+    -- the higher the priority. If no number is set, the launch template
+    -- override has the lowest priority. You can set the same priority for
+    -- different launch template overrides.
+    priority :: Prelude.Maybe Prelude.Double,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    spotPrice :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet in which to launch the instances.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The number of units provided by the specified instance type.
+    weightedCapacity :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateOverrides' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'launchTemplateOverrides_availabilityZone' - The Availability Zone in which to launch the instances.
+--
+-- 'instanceRequirements', 'launchTemplateOverrides_instanceRequirements' - The instance requirements. When you specify instance requirements,
+-- Amazon EC2 will identify instance types with the provided requirements,
+-- and then use your On-Demand and Spot allocation strategies to launch
+-- instances from these instance types, in the same way as when you specify
+-- a list of instance types.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+--
+-- 'instanceType', 'launchTemplateOverrides_instanceType' - The instance type.
+--
+-- 'priority', 'launchTemplateOverrides_priority' - The priority for the launch template override. The highest priority is
+-- launched first.
+--
+-- If @OnDemandAllocationStrategy@ is set to @prioritized@, Spot Fleet uses
+-- priority to determine which launch template override to use first in
+-- fulfilling On-Demand capacity.
+--
+-- If the Spot @AllocationStrategy@ is set to
+-- @capacityOptimizedPrioritized@, Spot Fleet uses priority on a
+-- best-effort basis to determine which launch template override to use in
+-- fulfilling Spot capacity, but optimizes for capacity first.
+--
+-- Valid values are whole numbers starting at @0@. The lower the number,
+-- the higher the priority. If no number is set, the launch template
+-- override has the lowest priority. You can set the same priority for
+-- different launch template overrides.
+--
+-- 'spotPrice', 'launchTemplateOverrides_spotPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'subnetId', 'launchTemplateOverrides_subnetId' - The ID of the subnet in which to launch the instances.
+--
+-- 'weightedCapacity', 'launchTemplateOverrides_weightedCapacity' - The number of units provided by the specified instance type.
+newLaunchTemplateOverrides ::
+  LaunchTemplateOverrides
+newLaunchTemplateOverrides =
+  LaunchTemplateOverrides'
+    { availabilityZone =
+        Prelude.Nothing,
+      instanceRequirements = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      priority = Prelude.Nothing,
+      spotPrice = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      weightedCapacity = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which to launch the instances.
+launchTemplateOverrides_availabilityZone :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+launchTemplateOverrides_availabilityZone = Lens.lens (\LaunchTemplateOverrides' {availabilityZone} -> availabilityZone) (\s@LaunchTemplateOverrides' {} a -> s {availabilityZone = a} :: LaunchTemplateOverrides)
+
+-- | The instance requirements. When you specify instance requirements,
+-- Amazon EC2 will identify instance types with the provided requirements,
+-- and then use your On-Demand and Spot allocation strategies to launch
+-- instances from these instance types, in the same way as when you specify
+-- a list of instance types.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+launchTemplateOverrides_instanceRequirements :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe InstanceRequirements)
+launchTemplateOverrides_instanceRequirements = Lens.lens (\LaunchTemplateOverrides' {instanceRequirements} -> instanceRequirements) (\s@LaunchTemplateOverrides' {} a -> s {instanceRequirements = a} :: LaunchTemplateOverrides)
+
+-- | The instance type.
+launchTemplateOverrides_instanceType :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe InstanceType)
+launchTemplateOverrides_instanceType = Lens.lens (\LaunchTemplateOverrides' {instanceType} -> instanceType) (\s@LaunchTemplateOverrides' {} a -> s {instanceType = a} :: LaunchTemplateOverrides)
+
+-- | The priority for the launch template override. The highest priority is
+-- launched first.
+--
+-- If @OnDemandAllocationStrategy@ is set to @prioritized@, Spot Fleet uses
+-- priority to determine which launch template override to use first in
+-- fulfilling On-Demand capacity.
+--
+-- If the Spot @AllocationStrategy@ is set to
+-- @capacityOptimizedPrioritized@, Spot Fleet uses priority on a
+-- best-effort basis to determine which launch template override to use in
+-- fulfilling Spot capacity, but optimizes for capacity first.
+--
+-- Valid values are whole numbers starting at @0@. The lower the number,
+-- the higher the priority. If no number is set, the launch template
+-- override has the lowest priority. You can set the same priority for
+-- different launch template overrides.
+launchTemplateOverrides_priority :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe Prelude.Double)
+launchTemplateOverrides_priority = Lens.lens (\LaunchTemplateOverrides' {priority} -> priority) (\s@LaunchTemplateOverrides' {} a -> s {priority = a} :: LaunchTemplateOverrides)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+launchTemplateOverrides_spotPrice :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+launchTemplateOverrides_spotPrice = Lens.lens (\LaunchTemplateOverrides' {spotPrice} -> spotPrice) (\s@LaunchTemplateOverrides' {} a -> s {spotPrice = a} :: LaunchTemplateOverrides)
+
+-- | The ID of the subnet in which to launch the instances.
+launchTemplateOverrides_subnetId :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe Prelude.Text)
+launchTemplateOverrides_subnetId = Lens.lens (\LaunchTemplateOverrides' {subnetId} -> subnetId) (\s@LaunchTemplateOverrides' {} a -> s {subnetId = a} :: LaunchTemplateOverrides)
+
+-- | The number of units provided by the specified instance type.
+launchTemplateOverrides_weightedCapacity :: Lens.Lens' LaunchTemplateOverrides (Prelude.Maybe Prelude.Double)
+launchTemplateOverrides_weightedCapacity = Lens.lens (\LaunchTemplateOverrides' {weightedCapacity} -> weightedCapacity) (\s@LaunchTemplateOverrides' {} a -> s {weightedCapacity = a} :: LaunchTemplateOverrides)
+
+instance Data.FromXML LaunchTemplateOverrides where
+  parseXML x =
+    LaunchTemplateOverrides'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "instanceRequirements")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "priority")
+      Prelude.<*> (x Data..@? "spotPrice")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> (x Data..@? "weightedCapacity")
+
+instance Prelude.Hashable LaunchTemplateOverrides where
+  hashWithSalt _salt LaunchTemplateOverrides' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` instanceRequirements
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` priority
+      `Prelude.hashWithSalt` spotPrice
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` weightedCapacity
+
+instance Prelude.NFData LaunchTemplateOverrides where
+  rnf LaunchTemplateOverrides' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf spotPrice
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf weightedCapacity
+
+instance Data.ToQuery LaunchTemplateOverrides where
+  toQuery LaunchTemplateOverrides' {..} =
+    Prelude.mconcat
+      [ "AvailabilityZone" Data.=: availabilityZone,
+        "InstanceRequirements" Data.=: instanceRequirements,
+        "InstanceType" Data.=: instanceType,
+        "Priority" Data.=: priority,
+        "SpotPrice" Data.=: spotPrice,
+        "SubnetId" Data.=: subnetId,
+        "WeightedCapacity" Data.=: weightedCapacity
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplatePlacement.hs b/gen/Amazonka/EC2/Types/LaunchTemplatePlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplatePlacement.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplatePlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplatePlacement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tenancy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the placement of an instance.
+--
+-- /See:/ 'newLaunchTemplatePlacement' smart constructor.
+data LaunchTemplatePlacement = LaunchTemplatePlacement'
+  { -- | The affinity setting for the instance on the Dedicated Host.
+    affinity :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone of the instance.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The Group ID of the placement group. You must specify the Placement
+    -- Group __Group ID__ to launch an instance in a shared placement group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group for the instance.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Dedicated Host for the instance.
+    hostId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the host resource group in which to launch the instances.
+    hostResourceGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The number of the partition the instance should launch in. Valid only if
+    -- the placement group strategy is set to @partition@.
+    partitionNumber :: Prelude.Maybe Prelude.Int,
+    -- | Reserved for future use.
+    spreadDomain :: Prelude.Maybe Prelude.Text,
+    -- | The tenancy of the instance (if the instance is running in a VPC). An
+    -- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+    tenancy :: Prelude.Maybe Tenancy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplatePlacement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'affinity', 'launchTemplatePlacement_affinity' - The affinity setting for the instance on the Dedicated Host.
+--
+-- 'availabilityZone', 'launchTemplatePlacement_availabilityZone' - The Availability Zone of the instance.
+--
+-- 'groupId', 'launchTemplatePlacement_groupId' - The Group ID of the placement group. You must specify the Placement
+-- Group __Group ID__ to launch an instance in a shared placement group.
+--
+-- 'groupName', 'launchTemplatePlacement_groupName' - The name of the placement group for the instance.
+--
+-- 'hostId', 'launchTemplatePlacement_hostId' - The ID of the Dedicated Host for the instance.
+--
+-- 'hostResourceGroupArn', 'launchTemplatePlacement_hostResourceGroupArn' - The ARN of the host resource group in which to launch the instances.
+--
+-- 'partitionNumber', 'launchTemplatePlacement_partitionNumber' - The number of the partition the instance should launch in. Valid only if
+-- the placement group strategy is set to @partition@.
+--
+-- 'spreadDomain', 'launchTemplatePlacement_spreadDomain' - Reserved for future use.
+--
+-- 'tenancy', 'launchTemplatePlacement_tenancy' - The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+newLaunchTemplatePlacement ::
+  LaunchTemplatePlacement
+newLaunchTemplatePlacement =
+  LaunchTemplatePlacement'
+    { affinity =
+        Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      hostId = Prelude.Nothing,
+      hostResourceGroupArn = Prelude.Nothing,
+      partitionNumber = Prelude.Nothing,
+      spreadDomain = Prelude.Nothing,
+      tenancy = Prelude.Nothing
+    }
+
+-- | The affinity setting for the instance on the Dedicated Host.
+launchTemplatePlacement_affinity :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_affinity = Lens.lens (\LaunchTemplatePlacement' {affinity} -> affinity) (\s@LaunchTemplatePlacement' {} a -> s {affinity = a} :: LaunchTemplatePlacement)
+
+-- | The Availability Zone of the instance.
+launchTemplatePlacement_availabilityZone :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_availabilityZone = Lens.lens (\LaunchTemplatePlacement' {availabilityZone} -> availabilityZone) (\s@LaunchTemplatePlacement' {} a -> s {availabilityZone = a} :: LaunchTemplatePlacement)
+
+-- | The Group ID of the placement group. You must specify the Placement
+-- Group __Group ID__ to launch an instance in a shared placement group.
+launchTemplatePlacement_groupId :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_groupId = Lens.lens (\LaunchTemplatePlacement' {groupId} -> groupId) (\s@LaunchTemplatePlacement' {} a -> s {groupId = a} :: LaunchTemplatePlacement)
+
+-- | The name of the placement group for the instance.
+launchTemplatePlacement_groupName :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_groupName = Lens.lens (\LaunchTemplatePlacement' {groupName} -> groupName) (\s@LaunchTemplatePlacement' {} a -> s {groupName = a} :: LaunchTemplatePlacement)
+
+-- | The ID of the Dedicated Host for the instance.
+launchTemplatePlacement_hostId :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_hostId = Lens.lens (\LaunchTemplatePlacement' {hostId} -> hostId) (\s@LaunchTemplatePlacement' {} a -> s {hostId = a} :: LaunchTemplatePlacement)
+
+-- | The ARN of the host resource group in which to launch the instances.
+launchTemplatePlacement_hostResourceGroupArn :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_hostResourceGroupArn = Lens.lens (\LaunchTemplatePlacement' {hostResourceGroupArn} -> hostResourceGroupArn) (\s@LaunchTemplatePlacement' {} a -> s {hostResourceGroupArn = a} :: LaunchTemplatePlacement)
+
+-- | The number of the partition the instance should launch in. Valid only if
+-- the placement group strategy is set to @partition@.
+launchTemplatePlacement_partitionNumber :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Int)
+launchTemplatePlacement_partitionNumber = Lens.lens (\LaunchTemplatePlacement' {partitionNumber} -> partitionNumber) (\s@LaunchTemplatePlacement' {} a -> s {partitionNumber = a} :: LaunchTemplatePlacement)
+
+-- | Reserved for future use.
+launchTemplatePlacement_spreadDomain :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Prelude.Text)
+launchTemplatePlacement_spreadDomain = Lens.lens (\LaunchTemplatePlacement' {spreadDomain} -> spreadDomain) (\s@LaunchTemplatePlacement' {} a -> s {spreadDomain = a} :: LaunchTemplatePlacement)
+
+-- | The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+launchTemplatePlacement_tenancy :: Lens.Lens' LaunchTemplatePlacement (Prelude.Maybe Tenancy)
+launchTemplatePlacement_tenancy = Lens.lens (\LaunchTemplatePlacement' {tenancy} -> tenancy) (\s@LaunchTemplatePlacement' {} a -> s {tenancy = a} :: LaunchTemplatePlacement)
+
+instance Data.FromXML LaunchTemplatePlacement where
+  parseXML x =
+    LaunchTemplatePlacement'
+      Prelude.<$> (x Data..@? "affinity")
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+      Prelude.<*> (x Data..@? "hostId")
+      Prelude.<*> (x Data..@? "hostResourceGroupArn")
+      Prelude.<*> (x Data..@? "partitionNumber")
+      Prelude.<*> (x Data..@? "spreadDomain")
+      Prelude.<*> (x Data..@? "tenancy")
+
+instance Prelude.Hashable LaunchTemplatePlacement where
+  hashWithSalt _salt LaunchTemplatePlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` affinity
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` hostId
+      `Prelude.hashWithSalt` hostResourceGroupArn
+      `Prelude.hashWithSalt` partitionNumber
+      `Prelude.hashWithSalt` spreadDomain
+      `Prelude.hashWithSalt` tenancy
+
+instance Prelude.NFData LaunchTemplatePlacement where
+  rnf LaunchTemplatePlacement' {..} =
+    Prelude.rnf affinity
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf hostId
+      `Prelude.seq` Prelude.rnf hostResourceGroupArn
+      `Prelude.seq` Prelude.rnf partitionNumber
+      `Prelude.seq` Prelude.rnf spreadDomain
+      `Prelude.seq` Prelude.rnf tenancy
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplatePlacementRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplatePlacementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplatePlacementRequest.hs
@@ -0,0 +1,191 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplatePlacementRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplatePlacementRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tenancy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the placement of an instance.
+--
+-- /See:/ 'newLaunchTemplatePlacementRequest' smart constructor.
+data LaunchTemplatePlacementRequest = LaunchTemplatePlacementRequest'
+  { -- | The affinity setting for an instance on a Dedicated Host.
+    affinity :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone for the instance.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The Group Id of a placement group. You must specify the Placement Group
+    -- __Group Id__ to launch an instance in a shared placement group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group for the instance.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Dedicated Host for the instance.
+    hostId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the host resource group in which to launch the instances. If
+    -- you specify a host resource group ARN, omit the __Tenancy__ parameter or
+    -- set it to @host@.
+    hostResourceGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The number of the partition the instance should launch in. Valid only if
+    -- the placement group strategy is set to @partition@.
+    partitionNumber :: Prelude.Maybe Prelude.Int,
+    -- | Reserved for future use.
+    spreadDomain :: Prelude.Maybe Prelude.Text,
+    -- | The tenancy of the instance (if the instance is running in a VPC). An
+    -- instance with a tenancy of dedicated runs on single-tenant hardware.
+    tenancy :: Prelude.Maybe Tenancy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplatePlacementRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'affinity', 'launchTemplatePlacementRequest_affinity' - The affinity setting for an instance on a Dedicated Host.
+--
+-- 'availabilityZone', 'launchTemplatePlacementRequest_availabilityZone' - The Availability Zone for the instance.
+--
+-- 'groupId', 'launchTemplatePlacementRequest_groupId' - The Group Id of a placement group. You must specify the Placement Group
+-- __Group Id__ to launch an instance in a shared placement group.
+--
+-- 'groupName', 'launchTemplatePlacementRequest_groupName' - The name of the placement group for the instance.
+--
+-- 'hostId', 'launchTemplatePlacementRequest_hostId' - The ID of the Dedicated Host for the instance.
+--
+-- 'hostResourceGroupArn', 'launchTemplatePlacementRequest_hostResourceGroupArn' - The ARN of the host resource group in which to launch the instances. If
+-- you specify a host resource group ARN, omit the __Tenancy__ parameter or
+-- set it to @host@.
+--
+-- 'partitionNumber', 'launchTemplatePlacementRequest_partitionNumber' - The number of the partition the instance should launch in. Valid only if
+-- the placement group strategy is set to @partition@.
+--
+-- 'spreadDomain', 'launchTemplatePlacementRequest_spreadDomain' - Reserved for future use.
+--
+-- 'tenancy', 'launchTemplatePlacementRequest_tenancy' - The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of dedicated runs on single-tenant hardware.
+newLaunchTemplatePlacementRequest ::
+  LaunchTemplatePlacementRequest
+newLaunchTemplatePlacementRequest =
+  LaunchTemplatePlacementRequest'
+    { affinity =
+        Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      hostId = Prelude.Nothing,
+      hostResourceGroupArn = Prelude.Nothing,
+      partitionNumber = Prelude.Nothing,
+      spreadDomain = Prelude.Nothing,
+      tenancy = Prelude.Nothing
+    }
+
+-- | The affinity setting for an instance on a Dedicated Host.
+launchTemplatePlacementRequest_affinity :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_affinity = Lens.lens (\LaunchTemplatePlacementRequest' {affinity} -> affinity) (\s@LaunchTemplatePlacementRequest' {} a -> s {affinity = a} :: LaunchTemplatePlacementRequest)
+
+-- | The Availability Zone for the instance.
+launchTemplatePlacementRequest_availabilityZone :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_availabilityZone = Lens.lens (\LaunchTemplatePlacementRequest' {availabilityZone} -> availabilityZone) (\s@LaunchTemplatePlacementRequest' {} a -> s {availabilityZone = a} :: LaunchTemplatePlacementRequest)
+
+-- | The Group Id of a placement group. You must specify the Placement Group
+-- __Group Id__ to launch an instance in a shared placement group.
+launchTemplatePlacementRequest_groupId :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_groupId = Lens.lens (\LaunchTemplatePlacementRequest' {groupId} -> groupId) (\s@LaunchTemplatePlacementRequest' {} a -> s {groupId = a} :: LaunchTemplatePlacementRequest)
+
+-- | The name of the placement group for the instance.
+launchTemplatePlacementRequest_groupName :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_groupName = Lens.lens (\LaunchTemplatePlacementRequest' {groupName} -> groupName) (\s@LaunchTemplatePlacementRequest' {} a -> s {groupName = a} :: LaunchTemplatePlacementRequest)
+
+-- | The ID of the Dedicated Host for the instance.
+launchTemplatePlacementRequest_hostId :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_hostId = Lens.lens (\LaunchTemplatePlacementRequest' {hostId} -> hostId) (\s@LaunchTemplatePlacementRequest' {} a -> s {hostId = a} :: LaunchTemplatePlacementRequest)
+
+-- | The ARN of the host resource group in which to launch the instances. If
+-- you specify a host resource group ARN, omit the __Tenancy__ parameter or
+-- set it to @host@.
+launchTemplatePlacementRequest_hostResourceGroupArn :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_hostResourceGroupArn = Lens.lens (\LaunchTemplatePlacementRequest' {hostResourceGroupArn} -> hostResourceGroupArn) (\s@LaunchTemplatePlacementRequest' {} a -> s {hostResourceGroupArn = a} :: LaunchTemplatePlacementRequest)
+
+-- | The number of the partition the instance should launch in. Valid only if
+-- the placement group strategy is set to @partition@.
+launchTemplatePlacementRequest_partitionNumber :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Int)
+launchTemplatePlacementRequest_partitionNumber = Lens.lens (\LaunchTemplatePlacementRequest' {partitionNumber} -> partitionNumber) (\s@LaunchTemplatePlacementRequest' {} a -> s {partitionNumber = a} :: LaunchTemplatePlacementRequest)
+
+-- | Reserved for future use.
+launchTemplatePlacementRequest_spreadDomain :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Prelude.Text)
+launchTemplatePlacementRequest_spreadDomain = Lens.lens (\LaunchTemplatePlacementRequest' {spreadDomain} -> spreadDomain) (\s@LaunchTemplatePlacementRequest' {} a -> s {spreadDomain = a} :: LaunchTemplatePlacementRequest)
+
+-- | The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of dedicated runs on single-tenant hardware.
+launchTemplatePlacementRequest_tenancy :: Lens.Lens' LaunchTemplatePlacementRequest (Prelude.Maybe Tenancy)
+launchTemplatePlacementRequest_tenancy = Lens.lens (\LaunchTemplatePlacementRequest' {tenancy} -> tenancy) (\s@LaunchTemplatePlacementRequest' {} a -> s {tenancy = a} :: LaunchTemplatePlacementRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplatePlacementRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplatePlacementRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` affinity
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` groupId
+        `Prelude.hashWithSalt` groupName
+        `Prelude.hashWithSalt` hostId
+        `Prelude.hashWithSalt` hostResourceGroupArn
+        `Prelude.hashWithSalt` partitionNumber
+        `Prelude.hashWithSalt` spreadDomain
+        `Prelude.hashWithSalt` tenancy
+
+instance
+  Prelude.NFData
+    LaunchTemplatePlacementRequest
+  where
+  rnf LaunchTemplatePlacementRequest' {..} =
+    Prelude.rnf affinity
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf hostId
+      `Prelude.seq` Prelude.rnf hostResourceGroupArn
+      `Prelude.seq` Prelude.rnf partitionNumber
+      `Prelude.seq` Prelude.rnf spreadDomain
+      `Prelude.seq` Prelude.rnf tenancy
+
+instance Data.ToQuery LaunchTemplatePlacementRequest where
+  toQuery LaunchTemplatePlacementRequest' {..} =
+    Prelude.mconcat
+      [ "Affinity" Data.=: affinity,
+        "AvailabilityZone" Data.=: availabilityZone,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName,
+        "HostId" Data.=: hostId,
+        "HostResourceGroupArn" Data.=: hostResourceGroupArn,
+        "PartitionNumber" Data.=: partitionNumber,
+        "SpreadDomain" Data.=: spreadDomain,
+        "Tenancy" Data.=: tenancy
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplatePrivateDnsNameOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplatePrivateDnsNameOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplatePrivateDnsNameOptions.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HostnameType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for instance hostnames.
+--
+-- /See:/ 'newLaunchTemplatePrivateDnsNameOptions' smart constructor.
+data LaunchTemplatePrivateDnsNameOptions = LaunchTemplatePrivateDnsNameOptions'
+  { -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecord :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecord :: Prelude.Maybe Prelude.Bool,
+    -- | The type of hostname to assign to an instance.
+    hostnameType :: Prelude.Maybe HostnameType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplatePrivateDnsNameOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableResourceNameDnsAAAARecord', 'launchTemplatePrivateDnsNameOptions_enableResourceNameDnsAAAARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecord', 'launchTemplatePrivateDnsNameOptions_enableResourceNameDnsARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'hostnameType', 'launchTemplatePrivateDnsNameOptions_hostnameType' - The type of hostname to assign to an instance.
+newLaunchTemplatePrivateDnsNameOptions ::
+  LaunchTemplatePrivateDnsNameOptions
+newLaunchTemplatePrivateDnsNameOptions =
+  LaunchTemplatePrivateDnsNameOptions'
+    { enableResourceNameDnsAAAARecord =
+        Prelude.Nothing,
+      enableResourceNameDnsARecord =
+        Prelude.Nothing,
+      hostnameType = Prelude.Nothing
+    }
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+launchTemplatePrivateDnsNameOptions_enableResourceNameDnsAAAARecord :: Lens.Lens' LaunchTemplatePrivateDnsNameOptions (Prelude.Maybe Prelude.Bool)
+launchTemplatePrivateDnsNameOptions_enableResourceNameDnsAAAARecord = Lens.lens (\LaunchTemplatePrivateDnsNameOptions' {enableResourceNameDnsAAAARecord} -> enableResourceNameDnsAAAARecord) (\s@LaunchTemplatePrivateDnsNameOptions' {} a -> s {enableResourceNameDnsAAAARecord = a} :: LaunchTemplatePrivateDnsNameOptions)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+launchTemplatePrivateDnsNameOptions_enableResourceNameDnsARecord :: Lens.Lens' LaunchTemplatePrivateDnsNameOptions (Prelude.Maybe Prelude.Bool)
+launchTemplatePrivateDnsNameOptions_enableResourceNameDnsARecord = Lens.lens (\LaunchTemplatePrivateDnsNameOptions' {enableResourceNameDnsARecord} -> enableResourceNameDnsARecord) (\s@LaunchTemplatePrivateDnsNameOptions' {} a -> s {enableResourceNameDnsARecord = a} :: LaunchTemplatePrivateDnsNameOptions)
+
+-- | The type of hostname to assign to an instance.
+launchTemplatePrivateDnsNameOptions_hostnameType :: Lens.Lens' LaunchTemplatePrivateDnsNameOptions (Prelude.Maybe HostnameType)
+launchTemplatePrivateDnsNameOptions_hostnameType = Lens.lens (\LaunchTemplatePrivateDnsNameOptions' {hostnameType} -> hostnameType) (\s@LaunchTemplatePrivateDnsNameOptions' {} a -> s {hostnameType = a} :: LaunchTemplatePrivateDnsNameOptions)
+
+instance
+  Data.FromXML
+    LaunchTemplatePrivateDnsNameOptions
+  where
+  parseXML x =
+    LaunchTemplatePrivateDnsNameOptions'
+      Prelude.<$> (x Data..@? "enableResourceNameDnsAAAARecord")
+      Prelude.<*> (x Data..@? "enableResourceNameDnsARecord")
+      Prelude.<*> (x Data..@? "hostnameType")
+
+instance
+  Prelude.Hashable
+    LaunchTemplatePrivateDnsNameOptions
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplatePrivateDnsNameOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` enableResourceNameDnsAAAARecord
+        `Prelude.hashWithSalt` enableResourceNameDnsARecord
+        `Prelude.hashWithSalt` hostnameType
+
+instance
+  Prelude.NFData
+    LaunchTemplatePrivateDnsNameOptions
+  where
+  rnf LaunchTemplatePrivateDnsNameOptions' {..} =
+    Prelude.rnf enableResourceNameDnsAAAARecord
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecord
+      `Prelude.seq` Prelude.rnf hostnameType
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplatePrivateDnsNameOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplatePrivateDnsNameOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplatePrivateDnsNameOptionsRequest.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HostnameType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for instance hostnames.
+--
+-- /See:/ 'newLaunchTemplatePrivateDnsNameOptionsRequest' smart constructor.
+data LaunchTemplatePrivateDnsNameOptionsRequest = LaunchTemplatePrivateDnsNameOptionsRequest'
+  { -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecord :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecord :: Prelude.Maybe Prelude.Bool,
+    -- | The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an
+    -- instance DNS name must be based on the instance IPv4 address. For IPv6
+    -- native subnets, an instance DNS name must be based on the instance ID.
+    -- For dual-stack subnets, you can specify whether DNS names use the
+    -- instance IPv4 address or the instance ID.
+    hostnameType :: Prelude.Maybe HostnameType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplatePrivateDnsNameOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableResourceNameDnsAAAARecord', 'launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecord', 'launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'hostnameType', 'launchTemplatePrivateDnsNameOptionsRequest_hostnameType' - The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- native subnets, an instance DNS name must be based on the instance ID.
+-- For dual-stack subnets, you can specify whether DNS names use the
+-- instance IPv4 address or the instance ID.
+newLaunchTemplatePrivateDnsNameOptionsRequest ::
+  LaunchTemplatePrivateDnsNameOptionsRequest
+newLaunchTemplatePrivateDnsNameOptionsRequest =
+  LaunchTemplatePrivateDnsNameOptionsRequest'
+    { enableResourceNameDnsAAAARecord =
+        Prelude.Nothing,
+      enableResourceNameDnsARecord =
+        Prelude.Nothing,
+      hostnameType = Prelude.Nothing
+    }
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord :: Lens.Lens' LaunchTemplatePrivateDnsNameOptionsRequest (Prelude.Maybe Prelude.Bool)
+launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord = Lens.lens (\LaunchTemplatePrivateDnsNameOptionsRequest' {enableResourceNameDnsAAAARecord} -> enableResourceNameDnsAAAARecord) (\s@LaunchTemplatePrivateDnsNameOptionsRequest' {} a -> s {enableResourceNameDnsAAAARecord = a} :: LaunchTemplatePrivateDnsNameOptionsRequest)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsARecord :: Lens.Lens' LaunchTemplatePrivateDnsNameOptionsRequest (Prelude.Maybe Prelude.Bool)
+launchTemplatePrivateDnsNameOptionsRequest_enableResourceNameDnsARecord = Lens.lens (\LaunchTemplatePrivateDnsNameOptionsRequest' {enableResourceNameDnsARecord} -> enableResourceNameDnsARecord) (\s@LaunchTemplatePrivateDnsNameOptionsRequest' {} a -> s {enableResourceNameDnsARecord = a} :: LaunchTemplatePrivateDnsNameOptionsRequest)
+
+-- | The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- native subnets, an instance DNS name must be based on the instance ID.
+-- For dual-stack subnets, you can specify whether DNS names use the
+-- instance IPv4 address or the instance ID.
+launchTemplatePrivateDnsNameOptionsRequest_hostnameType :: Lens.Lens' LaunchTemplatePrivateDnsNameOptionsRequest (Prelude.Maybe HostnameType)
+launchTemplatePrivateDnsNameOptionsRequest_hostnameType = Lens.lens (\LaunchTemplatePrivateDnsNameOptionsRequest' {hostnameType} -> hostnameType) (\s@LaunchTemplatePrivateDnsNameOptionsRequest' {} a -> s {hostnameType = a} :: LaunchTemplatePrivateDnsNameOptionsRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplatePrivateDnsNameOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplatePrivateDnsNameOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` enableResourceNameDnsAAAARecord
+        `Prelude.hashWithSalt` enableResourceNameDnsARecord
+        `Prelude.hashWithSalt` hostnameType
+
+instance
+  Prelude.NFData
+    LaunchTemplatePrivateDnsNameOptionsRequest
+  where
+  rnf LaunchTemplatePrivateDnsNameOptionsRequest' {..} =
+    Prelude.rnf enableResourceNameDnsAAAARecord
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecord
+      `Prelude.seq` Prelude.rnf hostnameType
+
+instance
+  Data.ToQuery
+    LaunchTemplatePrivateDnsNameOptionsRequest
+  where
+  toQuery
+    LaunchTemplatePrivateDnsNameOptionsRequest' {..} =
+      Prelude.mconcat
+        [ "EnableResourceNameDnsAAAARecord"
+            Data.=: enableResourceNameDnsAAAARecord,
+          "EnableResourceNameDnsARecord"
+            Data.=: enableResourceNameDnsARecord,
+          "HostnameType" Data.=: hostnameType
+        ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateSpecification.hs b/gen/Amazonka/EC2/Types/LaunchTemplateSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateSpecification.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The launch template to use. You must specify either the launch template
+-- ID or launch template name in the request, but not both.
+--
+-- /See:/ 'newLaunchTemplateSpecification' smart constructor.
+data LaunchTemplateSpecification = LaunchTemplateSpecification'
+  { -- | The ID of the launch template.
+    --
+    -- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+    -- not both.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    --
+    -- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+    -- not both.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The launch template version number, @$Latest@, or @$Default@.
+    --
+    -- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+    -- launch template.
+    --
+    -- If the value is @$Default@, Amazon EC2 uses the default version of the
+    -- launch template.
+    --
+    -- Default: The default version of the launch template.
+    version :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchTemplateId', 'launchTemplateSpecification_launchTemplateId' - The ID of the launch template.
+--
+-- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+-- not both.
+--
+-- 'launchTemplateName', 'launchTemplateSpecification_launchTemplateName' - The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+--
+-- 'version', 'launchTemplateSpecification_version' - The launch template version number, @$Latest@, or @$Default@.
+--
+-- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+-- launch template.
+--
+-- If the value is @$Default@, Amazon EC2 uses the default version of the
+-- launch template.
+--
+-- Default: The default version of the launch template.
+newLaunchTemplateSpecification ::
+  LaunchTemplateSpecification
+newLaunchTemplateSpecification =
+  LaunchTemplateSpecification'
+    { launchTemplateId =
+        Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The ID of the launch template.
+--
+-- You must specify the @LaunchTemplateId@ or the @LaunchTemplateName@, but
+-- not both.
+launchTemplateSpecification_launchTemplateId :: Lens.Lens' LaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateSpecification_launchTemplateId = Lens.lens (\LaunchTemplateSpecification' {launchTemplateId} -> launchTemplateId) (\s@LaunchTemplateSpecification' {} a -> s {launchTemplateId = a} :: LaunchTemplateSpecification)
+
+-- | The name of the launch template.
+--
+-- You must specify the @LaunchTemplateName@ or the @LaunchTemplateId@, but
+-- not both.
+launchTemplateSpecification_launchTemplateName :: Lens.Lens' LaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateSpecification_launchTemplateName = Lens.lens (\LaunchTemplateSpecification' {launchTemplateName} -> launchTemplateName) (\s@LaunchTemplateSpecification' {} a -> s {launchTemplateName = a} :: LaunchTemplateSpecification)
+
+-- | The launch template version number, @$Latest@, or @$Default@.
+--
+-- If the value is @$Latest@, Amazon EC2 uses the latest version of the
+-- launch template.
+--
+-- If the value is @$Default@, Amazon EC2 uses the default version of the
+-- launch template.
+--
+-- Default: The default version of the launch template.
+launchTemplateSpecification_version :: Lens.Lens' LaunchTemplateSpecification (Prelude.Maybe Prelude.Text)
+launchTemplateSpecification_version = Lens.lens (\LaunchTemplateSpecification' {version} -> version) (\s@LaunchTemplateSpecification' {} a -> s {version = a} :: LaunchTemplateSpecification)
+
+instance Prelude.Hashable LaunchTemplateSpecification where
+  hashWithSalt _salt LaunchTemplateSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData LaunchTemplateSpecification where
+  rnf LaunchTemplateSpecification' {..} =
+    Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf version
+
+instance Data.ToQuery LaunchTemplateSpecification where
+  toQuery LaunchTemplateSpecification' {..} =
+    Prelude.mconcat
+      [ "LaunchTemplateId" Data.=: launchTemplateId,
+        "LaunchTemplateName" Data.=: launchTemplateName,
+        "Version" Data.=: version
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateSpotMarketOptions.hs b/gen/Amazonka/EC2/Types/LaunchTemplateSpotMarketOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateSpotMarketOptions.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateSpotMarketOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateSpotMarketOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceInterruptionBehavior
+import Amazonka.EC2.Types.SpotInstanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for Spot Instances.
+--
+-- /See:/ 'newLaunchTemplateSpotMarketOptions' smart constructor.
+data LaunchTemplateSpotMarketOptions = LaunchTemplateSpotMarketOptions'
+  { -- | The required duration for the Spot Instances (also known as Spot
+    -- blocks), in minutes. This value must be a multiple of 60 (60, 120, 180,
+    -- 240, 300, or 360).
+    blockDurationMinutes :: Prelude.Maybe Prelude.Int,
+    -- | The behavior when a Spot Instance is interrupted.
+    instanceInterruptionBehavior :: Prelude.Maybe InstanceInterruptionBehavior,
+    -- | The maximum hourly price you\'re willing to pay for the Spot Instances.
+    -- We do not recommend using this parameter because it can lead to
+    -- increased interruptions. If you do not specify this parameter, you will
+    -- pay the current Spot price.
+    --
+    -- If you specify a maximum price, your Spot Instances will be interrupted
+    -- more frequently than if you do not specify this parameter.
+    maxPrice :: Prelude.Maybe Prelude.Text,
+    -- | The Spot Instance request type.
+    spotInstanceType :: Prelude.Maybe SpotInstanceType,
+    -- | The end date of the request. For a one-time request, the request remains
+    -- active until all instances launch, the request is canceled, or this date
+    -- is reached. If the request is persistent, it remains active until it is
+    -- canceled or this date and time is reached.
+    validUntil :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateSpotMarketOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDurationMinutes', 'launchTemplateSpotMarketOptions_blockDurationMinutes' - The required duration for the Spot Instances (also known as Spot
+-- blocks), in minutes. This value must be a multiple of 60 (60, 120, 180,
+-- 240, 300, or 360).
+--
+-- 'instanceInterruptionBehavior', 'launchTemplateSpotMarketOptions_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted.
+--
+-- 'maxPrice', 'launchTemplateSpotMarketOptions_maxPrice' - The maximum hourly price you\'re willing to pay for the Spot Instances.
+-- We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+--
+-- 'spotInstanceType', 'launchTemplateSpotMarketOptions_spotInstanceType' - The Spot Instance request type.
+--
+-- 'validUntil', 'launchTemplateSpotMarketOptions_validUntil' - The end date of the request. For a one-time request, the request remains
+-- active until all instances launch, the request is canceled, or this date
+-- is reached. If the request is persistent, it remains active until it is
+-- canceled or this date and time is reached.
+newLaunchTemplateSpotMarketOptions ::
+  LaunchTemplateSpotMarketOptions
+newLaunchTemplateSpotMarketOptions =
+  LaunchTemplateSpotMarketOptions'
+    { blockDurationMinutes =
+        Prelude.Nothing,
+      instanceInterruptionBehavior =
+        Prelude.Nothing,
+      maxPrice = Prelude.Nothing,
+      spotInstanceType = Prelude.Nothing,
+      validUntil = Prelude.Nothing
+    }
+
+-- | The required duration for the Spot Instances (also known as Spot
+-- blocks), in minutes. This value must be a multiple of 60 (60, 120, 180,
+-- 240, 300, or 360).
+launchTemplateSpotMarketOptions_blockDurationMinutes :: Lens.Lens' LaunchTemplateSpotMarketOptions (Prelude.Maybe Prelude.Int)
+launchTemplateSpotMarketOptions_blockDurationMinutes = Lens.lens (\LaunchTemplateSpotMarketOptions' {blockDurationMinutes} -> blockDurationMinutes) (\s@LaunchTemplateSpotMarketOptions' {} a -> s {blockDurationMinutes = a} :: LaunchTemplateSpotMarketOptions)
+
+-- | The behavior when a Spot Instance is interrupted.
+launchTemplateSpotMarketOptions_instanceInterruptionBehavior :: Lens.Lens' LaunchTemplateSpotMarketOptions (Prelude.Maybe InstanceInterruptionBehavior)
+launchTemplateSpotMarketOptions_instanceInterruptionBehavior = Lens.lens (\LaunchTemplateSpotMarketOptions' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@LaunchTemplateSpotMarketOptions' {} a -> s {instanceInterruptionBehavior = a} :: LaunchTemplateSpotMarketOptions)
+
+-- | The maximum hourly price you\'re willing to pay for the Spot Instances.
+-- We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+launchTemplateSpotMarketOptions_maxPrice :: Lens.Lens' LaunchTemplateSpotMarketOptions (Prelude.Maybe Prelude.Text)
+launchTemplateSpotMarketOptions_maxPrice = Lens.lens (\LaunchTemplateSpotMarketOptions' {maxPrice} -> maxPrice) (\s@LaunchTemplateSpotMarketOptions' {} a -> s {maxPrice = a} :: LaunchTemplateSpotMarketOptions)
+
+-- | The Spot Instance request type.
+launchTemplateSpotMarketOptions_spotInstanceType :: Lens.Lens' LaunchTemplateSpotMarketOptions (Prelude.Maybe SpotInstanceType)
+launchTemplateSpotMarketOptions_spotInstanceType = Lens.lens (\LaunchTemplateSpotMarketOptions' {spotInstanceType} -> spotInstanceType) (\s@LaunchTemplateSpotMarketOptions' {} a -> s {spotInstanceType = a} :: LaunchTemplateSpotMarketOptions)
+
+-- | The end date of the request. For a one-time request, the request remains
+-- active until all instances launch, the request is canceled, or this date
+-- is reached. If the request is persistent, it remains active until it is
+-- canceled or this date and time is reached.
+launchTemplateSpotMarketOptions_validUntil :: Lens.Lens' LaunchTemplateSpotMarketOptions (Prelude.Maybe Prelude.UTCTime)
+launchTemplateSpotMarketOptions_validUntil = Lens.lens (\LaunchTemplateSpotMarketOptions' {validUntil} -> validUntil) (\s@LaunchTemplateSpotMarketOptions' {} a -> s {validUntil = a} :: LaunchTemplateSpotMarketOptions) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML LaunchTemplateSpotMarketOptions where
+  parseXML x =
+    LaunchTemplateSpotMarketOptions'
+      Prelude.<$> (x Data..@? "blockDurationMinutes")
+      Prelude.<*> (x Data..@? "instanceInterruptionBehavior")
+      Prelude.<*> (x Data..@? "maxPrice")
+      Prelude.<*> (x Data..@? "spotInstanceType")
+      Prelude.<*> (x Data..@? "validUntil")
+
+instance
+  Prelude.Hashable
+    LaunchTemplateSpotMarketOptions
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateSpotMarketOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` blockDurationMinutes
+        `Prelude.hashWithSalt` instanceInterruptionBehavior
+        `Prelude.hashWithSalt` maxPrice
+        `Prelude.hashWithSalt` spotInstanceType
+        `Prelude.hashWithSalt` validUntil
+
+instance
+  Prelude.NFData
+    LaunchTemplateSpotMarketOptions
+  where
+  rnf LaunchTemplateSpotMarketOptions' {..} =
+    Prelude.rnf blockDurationMinutes
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf maxPrice
+      `Prelude.seq` Prelude.rnf spotInstanceType
+      `Prelude.seq` Prelude.rnf validUntil
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateSpotMarketOptionsRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateSpotMarketOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateSpotMarketOptionsRequest.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateSpotMarketOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateSpotMarketOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceInterruptionBehavior
+import Amazonka.EC2.Types.SpotInstanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for Spot Instances.
+--
+-- /See:/ 'newLaunchTemplateSpotMarketOptionsRequest' smart constructor.
+data LaunchTemplateSpotMarketOptionsRequest = LaunchTemplateSpotMarketOptionsRequest'
+  { -- | Deprecated.
+    blockDurationMinutes :: Prelude.Maybe Prelude.Int,
+    -- | The behavior when a Spot Instance is interrupted. The default is
+    -- @terminate@.
+    instanceInterruptionBehavior :: Prelude.Maybe InstanceInterruptionBehavior,
+    -- | The maximum hourly price you\'re willing to pay for the Spot Instances.
+    -- We do not recommend using this parameter because it can lead to
+    -- increased interruptions. If you do not specify this parameter, you will
+    -- pay the current Spot price.
+    --
+    -- If you specify a maximum price, your Spot Instances will be interrupted
+    -- more frequently than if you do not specify this parameter.
+    maxPrice :: Prelude.Maybe Prelude.Text,
+    -- | The Spot Instance request type.
+    spotInstanceType :: Prelude.Maybe SpotInstanceType,
+    -- | The end date of the request, in UTC format (/YYYY-MM-DD/T/HH:MM:SS/Z).
+    -- Supported only for persistent requests.
+    --
+    -- -   For a persistent request, the request remains active until the
+    --     @ValidUntil@ date and time is reached. Otherwise, the request
+    --     remains active until you cancel it.
+    --
+    -- -   For a one-time request, @ValidUntil@ is not supported. The request
+    --     remains active until all instances launch or you cancel the request.
+    --
+    -- Default: 7 days from the current date
+    validUntil :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateSpotMarketOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDurationMinutes', 'launchTemplateSpotMarketOptionsRequest_blockDurationMinutes' - Deprecated.
+--
+-- 'instanceInterruptionBehavior', 'launchTemplateSpotMarketOptionsRequest_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+--
+-- 'maxPrice', 'launchTemplateSpotMarketOptionsRequest_maxPrice' - The maximum hourly price you\'re willing to pay for the Spot Instances.
+-- We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+--
+-- 'spotInstanceType', 'launchTemplateSpotMarketOptionsRequest_spotInstanceType' - The Spot Instance request type.
+--
+-- 'validUntil', 'launchTemplateSpotMarketOptionsRequest_validUntil' - The end date of the request, in UTC format (/YYYY-MM-DD/T/HH:MM:SS/Z).
+-- Supported only for persistent requests.
+--
+-- -   For a persistent request, the request remains active until the
+--     @ValidUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, @ValidUntil@ is not supported. The request
+--     remains active until all instances launch or you cancel the request.
+--
+-- Default: 7 days from the current date
+newLaunchTemplateSpotMarketOptionsRequest ::
+  LaunchTemplateSpotMarketOptionsRequest
+newLaunchTemplateSpotMarketOptionsRequest =
+  LaunchTemplateSpotMarketOptionsRequest'
+    { blockDurationMinutes =
+        Prelude.Nothing,
+      instanceInterruptionBehavior =
+        Prelude.Nothing,
+      maxPrice = Prelude.Nothing,
+      spotInstanceType = Prelude.Nothing,
+      validUntil = Prelude.Nothing
+    }
+
+-- | Deprecated.
+launchTemplateSpotMarketOptionsRequest_blockDurationMinutes :: Lens.Lens' LaunchTemplateSpotMarketOptionsRequest (Prelude.Maybe Prelude.Int)
+launchTemplateSpotMarketOptionsRequest_blockDurationMinutes = Lens.lens (\LaunchTemplateSpotMarketOptionsRequest' {blockDurationMinutes} -> blockDurationMinutes) (\s@LaunchTemplateSpotMarketOptionsRequest' {} a -> s {blockDurationMinutes = a} :: LaunchTemplateSpotMarketOptionsRequest)
+
+-- | The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+launchTemplateSpotMarketOptionsRequest_instanceInterruptionBehavior :: Lens.Lens' LaunchTemplateSpotMarketOptionsRequest (Prelude.Maybe InstanceInterruptionBehavior)
+launchTemplateSpotMarketOptionsRequest_instanceInterruptionBehavior = Lens.lens (\LaunchTemplateSpotMarketOptionsRequest' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@LaunchTemplateSpotMarketOptionsRequest' {} a -> s {instanceInterruptionBehavior = a} :: LaunchTemplateSpotMarketOptionsRequest)
+
+-- | The maximum hourly price you\'re willing to pay for the Spot Instances.
+-- We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+launchTemplateSpotMarketOptionsRequest_maxPrice :: Lens.Lens' LaunchTemplateSpotMarketOptionsRequest (Prelude.Maybe Prelude.Text)
+launchTemplateSpotMarketOptionsRequest_maxPrice = Lens.lens (\LaunchTemplateSpotMarketOptionsRequest' {maxPrice} -> maxPrice) (\s@LaunchTemplateSpotMarketOptionsRequest' {} a -> s {maxPrice = a} :: LaunchTemplateSpotMarketOptionsRequest)
+
+-- | The Spot Instance request type.
+launchTemplateSpotMarketOptionsRequest_spotInstanceType :: Lens.Lens' LaunchTemplateSpotMarketOptionsRequest (Prelude.Maybe SpotInstanceType)
+launchTemplateSpotMarketOptionsRequest_spotInstanceType = Lens.lens (\LaunchTemplateSpotMarketOptionsRequest' {spotInstanceType} -> spotInstanceType) (\s@LaunchTemplateSpotMarketOptionsRequest' {} a -> s {spotInstanceType = a} :: LaunchTemplateSpotMarketOptionsRequest)
+
+-- | The end date of the request, in UTC format (/YYYY-MM-DD/T/HH:MM:SS/Z).
+-- Supported only for persistent requests.
+--
+-- -   For a persistent request, the request remains active until the
+--     @ValidUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, @ValidUntil@ is not supported. The request
+--     remains active until all instances launch or you cancel the request.
+--
+-- Default: 7 days from the current date
+launchTemplateSpotMarketOptionsRequest_validUntil :: Lens.Lens' LaunchTemplateSpotMarketOptionsRequest (Prelude.Maybe Prelude.UTCTime)
+launchTemplateSpotMarketOptionsRequest_validUntil = Lens.lens (\LaunchTemplateSpotMarketOptionsRequest' {validUntil} -> validUntil) (\s@LaunchTemplateSpotMarketOptionsRequest' {} a -> s {validUntil = a} :: LaunchTemplateSpotMarketOptionsRequest) Prelude.. Lens.mapping Data._Time
+
+instance
+  Prelude.Hashable
+    LaunchTemplateSpotMarketOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateSpotMarketOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` blockDurationMinutes
+        `Prelude.hashWithSalt` instanceInterruptionBehavior
+        `Prelude.hashWithSalt` maxPrice
+        `Prelude.hashWithSalt` spotInstanceType
+        `Prelude.hashWithSalt` validUntil
+
+instance
+  Prelude.NFData
+    LaunchTemplateSpotMarketOptionsRequest
+  where
+  rnf LaunchTemplateSpotMarketOptionsRequest' {..} =
+    Prelude.rnf blockDurationMinutes
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf maxPrice
+      `Prelude.seq` Prelude.rnf spotInstanceType
+      `Prelude.seq` Prelude.rnf validUntil
+
+instance
+  Data.ToQuery
+    LaunchTemplateSpotMarketOptionsRequest
+  where
+  toQuery LaunchTemplateSpotMarketOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "BlockDurationMinutes" Data.=: blockDurationMinutes,
+        "InstanceInterruptionBehavior"
+          Data.=: instanceInterruptionBehavior,
+        "MaxPrice" Data.=: maxPrice,
+        "SpotInstanceType" Data.=: spotInstanceType,
+        "ValidUntil" Data.=: validUntil
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateTagSpecification.hs b/gen/Amazonka/EC2/Types/LaunchTemplateTagSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateTagSpecification.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateTagSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateTagSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tags specification for the launch template.
+--
+-- /See:/ 'newLaunchTemplateTagSpecification' smart constructor.
+data LaunchTemplateTagSpecification = LaunchTemplateTagSpecification'
+  { -- | The type of resource to tag.
+    resourceType :: Prelude.Maybe ResourceType,
+    -- | The tags for the resource.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateTagSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceType', 'launchTemplateTagSpecification_resourceType' - The type of resource to tag.
+--
+-- 'tags', 'launchTemplateTagSpecification_tags' - The tags for the resource.
+newLaunchTemplateTagSpecification ::
+  LaunchTemplateTagSpecification
+newLaunchTemplateTagSpecification =
+  LaunchTemplateTagSpecification'
+    { resourceType =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The type of resource to tag.
+launchTemplateTagSpecification_resourceType :: Lens.Lens' LaunchTemplateTagSpecification (Prelude.Maybe ResourceType)
+launchTemplateTagSpecification_resourceType = Lens.lens (\LaunchTemplateTagSpecification' {resourceType} -> resourceType) (\s@LaunchTemplateTagSpecification' {} a -> s {resourceType = a} :: LaunchTemplateTagSpecification)
+
+-- | The tags for the resource.
+launchTemplateTagSpecification_tags :: Lens.Lens' LaunchTemplateTagSpecification (Prelude.Maybe [Tag])
+launchTemplateTagSpecification_tags = Lens.lens (\LaunchTemplateTagSpecification' {tags} -> tags) (\s@LaunchTemplateTagSpecification' {} a -> s {tags = a} :: LaunchTemplateTagSpecification) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML LaunchTemplateTagSpecification where
+  parseXML x =
+    LaunchTemplateTagSpecification'
+      Prelude.<$> (x Data..@? "resourceType")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance
+  Prelude.Hashable
+    LaunchTemplateTagSpecification
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateTagSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    LaunchTemplateTagSpecification
+  where
+  rnf LaunchTemplateTagSpecification' {..} =
+    Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateTagSpecificationRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplateTagSpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateTagSpecificationRequest.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateTagSpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateTagSpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tags specification for the resources that are created during
+-- instance launch.
+--
+-- /See:/ 'newLaunchTemplateTagSpecificationRequest' smart constructor.
+data LaunchTemplateTagSpecificationRequest = LaunchTemplateTagSpecificationRequest'
+  { -- | The type of resource to tag.
+    --
+    -- The @Valid Values@ are all the resource types that can be tagged.
+    -- However, when creating a launch template, you can specify tags for the
+    -- following resource types only: @instance@ | @volume@ | @elastic-gpu@ |
+    -- @network-interface@ | @spot-instances-request@
+    --
+    -- To tag a resource after it has been created, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+    resourceType :: Prelude.Maybe ResourceType,
+    -- | The tags to apply to the resource.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateTagSpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceType', 'launchTemplateTagSpecificationRequest_resourceType' - The type of resource to tag.
+--
+-- The @Valid Values@ are all the resource types that can be tagged.
+-- However, when creating a launch template, you can specify tags for the
+-- following resource types only: @instance@ | @volume@ | @elastic-gpu@ |
+-- @network-interface@ | @spot-instances-request@
+--
+-- To tag a resource after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+--
+-- 'tags', 'launchTemplateTagSpecificationRequest_tags' - The tags to apply to the resource.
+newLaunchTemplateTagSpecificationRequest ::
+  LaunchTemplateTagSpecificationRequest
+newLaunchTemplateTagSpecificationRequest =
+  LaunchTemplateTagSpecificationRequest'
+    { resourceType =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The type of resource to tag.
+--
+-- The @Valid Values@ are all the resource types that can be tagged.
+-- However, when creating a launch template, you can specify tags for the
+-- following resource types only: @instance@ | @volume@ | @elastic-gpu@ |
+-- @network-interface@ | @spot-instances-request@
+--
+-- To tag a resource after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+launchTemplateTagSpecificationRequest_resourceType :: Lens.Lens' LaunchTemplateTagSpecificationRequest (Prelude.Maybe ResourceType)
+launchTemplateTagSpecificationRequest_resourceType = Lens.lens (\LaunchTemplateTagSpecificationRequest' {resourceType} -> resourceType) (\s@LaunchTemplateTagSpecificationRequest' {} a -> s {resourceType = a} :: LaunchTemplateTagSpecificationRequest)
+
+-- | The tags to apply to the resource.
+launchTemplateTagSpecificationRequest_tags :: Lens.Lens' LaunchTemplateTagSpecificationRequest (Prelude.Maybe [Tag])
+launchTemplateTagSpecificationRequest_tags = Lens.lens (\LaunchTemplateTagSpecificationRequest' {tags} -> tags) (\s@LaunchTemplateTagSpecificationRequest' {} a -> s {tags = a} :: LaunchTemplateTagSpecificationRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    LaunchTemplateTagSpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplateTagSpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    LaunchTemplateTagSpecificationRequest
+  where
+  rnf LaunchTemplateTagSpecificationRequest' {..} =
+    Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf tags
+
+instance
+  Data.ToQuery
+    LaunchTemplateTagSpecificationRequest
+  where
+  toQuery LaunchTemplateTagSpecificationRequest' {..} =
+    Prelude.mconcat
+      [ "ResourceType" Data.=: resourceType,
+        Data.toQuery
+          (Data.toQueryList "Tag" Prelude.<$> tags)
+      ]
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplateVersion.hs b/gen/Amazonka/EC2/Types/LaunchTemplateVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplateVersion.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplateVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplateVersion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResponseLaunchTemplateData
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch template version.
+--
+-- /See:/ 'newLaunchTemplateVersion' smart constructor.
+data LaunchTemplateVersion = LaunchTemplateVersion'
+  { -- | The time the version was created.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The principal that created the version.
+    createdBy :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the version is the default version.
+    defaultVersion :: Prelude.Maybe Prelude.Bool,
+    -- | Information about the launch template.
+    launchTemplateData :: Prelude.Maybe ResponseLaunchTemplateData,
+    -- | The ID of the launch template.
+    launchTemplateId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the launch template.
+    launchTemplateName :: Prelude.Maybe Prelude.Text,
+    -- | The description for the version.
+    versionDescription :: Prelude.Maybe Prelude.Text,
+    -- | The version number.
+    versionNumber :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplateVersion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createTime', 'launchTemplateVersion_createTime' - The time the version was created.
+--
+-- 'createdBy', 'launchTemplateVersion_createdBy' - The principal that created the version.
+--
+-- 'defaultVersion', 'launchTemplateVersion_defaultVersion' - Indicates whether the version is the default version.
+--
+-- 'launchTemplateData', 'launchTemplateVersion_launchTemplateData' - Information about the launch template.
+--
+-- 'launchTemplateId', 'launchTemplateVersion_launchTemplateId' - The ID of the launch template.
+--
+-- 'launchTemplateName', 'launchTemplateVersion_launchTemplateName' - The name of the launch template.
+--
+-- 'versionDescription', 'launchTemplateVersion_versionDescription' - The description for the version.
+--
+-- 'versionNumber', 'launchTemplateVersion_versionNumber' - The version number.
+newLaunchTemplateVersion ::
+  LaunchTemplateVersion
+newLaunchTemplateVersion =
+  LaunchTemplateVersion'
+    { createTime =
+        Prelude.Nothing,
+      createdBy = Prelude.Nothing,
+      defaultVersion = Prelude.Nothing,
+      launchTemplateData = Prelude.Nothing,
+      launchTemplateId = Prelude.Nothing,
+      launchTemplateName = Prelude.Nothing,
+      versionDescription = Prelude.Nothing,
+      versionNumber = Prelude.Nothing
+    }
+
+-- | The time the version was created.
+launchTemplateVersion_createTime :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.UTCTime)
+launchTemplateVersion_createTime = Lens.lens (\LaunchTemplateVersion' {createTime} -> createTime) (\s@LaunchTemplateVersion' {} a -> s {createTime = a} :: LaunchTemplateVersion) Prelude.. Lens.mapping Data._Time
+
+-- | The principal that created the version.
+launchTemplateVersion_createdBy :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+launchTemplateVersion_createdBy = Lens.lens (\LaunchTemplateVersion' {createdBy} -> createdBy) (\s@LaunchTemplateVersion' {} a -> s {createdBy = a} :: LaunchTemplateVersion)
+
+-- | Indicates whether the version is the default version.
+launchTemplateVersion_defaultVersion :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.Bool)
+launchTemplateVersion_defaultVersion = Lens.lens (\LaunchTemplateVersion' {defaultVersion} -> defaultVersion) (\s@LaunchTemplateVersion' {} a -> s {defaultVersion = a} :: LaunchTemplateVersion)
+
+-- | Information about the launch template.
+launchTemplateVersion_launchTemplateData :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe ResponseLaunchTemplateData)
+launchTemplateVersion_launchTemplateData = Lens.lens (\LaunchTemplateVersion' {launchTemplateData} -> launchTemplateData) (\s@LaunchTemplateVersion' {} a -> s {launchTemplateData = a} :: LaunchTemplateVersion)
+
+-- | The ID of the launch template.
+launchTemplateVersion_launchTemplateId :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+launchTemplateVersion_launchTemplateId = Lens.lens (\LaunchTemplateVersion' {launchTemplateId} -> launchTemplateId) (\s@LaunchTemplateVersion' {} a -> s {launchTemplateId = a} :: LaunchTemplateVersion)
+
+-- | The name of the launch template.
+launchTemplateVersion_launchTemplateName :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+launchTemplateVersion_launchTemplateName = Lens.lens (\LaunchTemplateVersion' {launchTemplateName} -> launchTemplateName) (\s@LaunchTemplateVersion' {} a -> s {launchTemplateName = a} :: LaunchTemplateVersion)
+
+-- | The description for the version.
+launchTemplateVersion_versionDescription :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.Text)
+launchTemplateVersion_versionDescription = Lens.lens (\LaunchTemplateVersion' {versionDescription} -> versionDescription) (\s@LaunchTemplateVersion' {} a -> s {versionDescription = a} :: LaunchTemplateVersion)
+
+-- | The version number.
+launchTemplateVersion_versionNumber :: Lens.Lens' LaunchTemplateVersion (Prelude.Maybe Prelude.Integer)
+launchTemplateVersion_versionNumber = Lens.lens (\LaunchTemplateVersion' {versionNumber} -> versionNumber) (\s@LaunchTemplateVersion' {} a -> s {versionNumber = a} :: LaunchTemplateVersion)
+
+instance Data.FromXML LaunchTemplateVersion where
+  parseXML x =
+    LaunchTemplateVersion'
+      Prelude.<$> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "createdBy")
+      Prelude.<*> (x Data..@? "defaultVersion")
+      Prelude.<*> (x Data..@? "launchTemplateData")
+      Prelude.<*> (x Data..@? "launchTemplateId")
+      Prelude.<*> (x Data..@? "launchTemplateName")
+      Prelude.<*> (x Data..@? "versionDescription")
+      Prelude.<*> (x Data..@? "versionNumber")
+
+instance Prelude.Hashable LaunchTemplateVersion where
+  hashWithSalt _salt LaunchTemplateVersion' {..} =
+    _salt
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` createdBy
+      `Prelude.hashWithSalt` defaultVersion
+      `Prelude.hashWithSalt` launchTemplateData
+      `Prelude.hashWithSalt` launchTemplateId
+      `Prelude.hashWithSalt` launchTemplateName
+      `Prelude.hashWithSalt` versionDescription
+      `Prelude.hashWithSalt` versionNumber
+
+instance Prelude.NFData LaunchTemplateVersion where
+  rnf LaunchTemplateVersion' {..} =
+    Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf createdBy
+      `Prelude.seq` Prelude.rnf defaultVersion
+      `Prelude.seq` Prelude.rnf launchTemplateData
+      `Prelude.seq` Prelude.rnf launchTemplateId
+      `Prelude.seq` Prelude.rnf launchTemplateName
+      `Prelude.seq` Prelude.rnf versionDescription
+      `Prelude.seq` Prelude.rnf versionNumber
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplatesMonitoring.hs b/gen/Amazonka/EC2/Types/LaunchTemplatesMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplatesMonitoring.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplatesMonitoring
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplatesMonitoring where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the monitoring for the instance.
+--
+-- /See:/ 'newLaunchTemplatesMonitoring' smart constructor.
+data LaunchTemplatesMonitoring = LaunchTemplatesMonitoring'
+  { -- | Indicates whether detailed monitoring is enabled. Otherwise, basic
+    -- monitoring is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplatesMonitoring' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'launchTemplatesMonitoring_enabled' - Indicates whether detailed monitoring is enabled. Otherwise, basic
+-- monitoring is enabled.
+newLaunchTemplatesMonitoring ::
+  LaunchTemplatesMonitoring
+newLaunchTemplatesMonitoring =
+  LaunchTemplatesMonitoring'
+    { enabled =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether detailed monitoring is enabled. Otherwise, basic
+-- monitoring is enabled.
+launchTemplatesMonitoring_enabled :: Lens.Lens' LaunchTemplatesMonitoring (Prelude.Maybe Prelude.Bool)
+launchTemplatesMonitoring_enabled = Lens.lens (\LaunchTemplatesMonitoring' {enabled} -> enabled) (\s@LaunchTemplatesMonitoring' {} a -> s {enabled = a} :: LaunchTemplatesMonitoring)
+
+instance Data.FromXML LaunchTemplatesMonitoring where
+  parseXML x =
+    LaunchTemplatesMonitoring'
+      Prelude.<$> (x Data..@? "enabled")
+
+instance Prelude.Hashable LaunchTemplatesMonitoring where
+  hashWithSalt _salt LaunchTemplatesMonitoring' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData LaunchTemplatesMonitoring where
+  rnf LaunchTemplatesMonitoring' {..} =
+    Prelude.rnf enabled
diff --git a/gen/Amazonka/EC2/Types/LaunchTemplatesMonitoringRequest.hs b/gen/Amazonka/EC2/Types/LaunchTemplatesMonitoringRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LaunchTemplatesMonitoringRequest.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LaunchTemplatesMonitoringRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LaunchTemplatesMonitoringRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the monitoring for the instance.
+--
+-- /See:/ 'newLaunchTemplatesMonitoringRequest' smart constructor.
+data LaunchTemplatesMonitoringRequest = LaunchTemplatesMonitoringRequest'
+  { -- | Specify @true@ to enable detailed monitoring. Otherwise, basic
+    -- monitoring is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchTemplatesMonitoringRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'launchTemplatesMonitoringRequest_enabled' - Specify @true@ to enable detailed monitoring. Otherwise, basic
+-- monitoring is enabled.
+newLaunchTemplatesMonitoringRequest ::
+  LaunchTemplatesMonitoringRequest
+newLaunchTemplatesMonitoringRequest =
+  LaunchTemplatesMonitoringRequest'
+    { enabled =
+        Prelude.Nothing
+    }
+
+-- | Specify @true@ to enable detailed monitoring. Otherwise, basic
+-- monitoring is enabled.
+launchTemplatesMonitoringRequest_enabled :: Lens.Lens' LaunchTemplatesMonitoringRequest (Prelude.Maybe Prelude.Bool)
+launchTemplatesMonitoringRequest_enabled = Lens.lens (\LaunchTemplatesMonitoringRequest' {enabled} -> enabled) (\s@LaunchTemplatesMonitoringRequest' {} a -> s {enabled = a} :: LaunchTemplatesMonitoringRequest)
+
+instance
+  Prelude.Hashable
+    LaunchTemplatesMonitoringRequest
+  where
+  hashWithSalt
+    _salt
+    LaunchTemplatesMonitoringRequest' {..} =
+      _salt `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    LaunchTemplatesMonitoringRequest
+  where
+  rnf LaunchTemplatesMonitoringRequest' {..} =
+    Prelude.rnf enabled
+
+instance
+  Data.ToQuery
+    LaunchTemplatesMonitoringRequest
+  where
+  toQuery LaunchTemplatesMonitoringRequest' {..} =
+    Prelude.mconcat ["Enabled" Data.=: enabled]
diff --git a/gen/Amazonka/EC2/Types/LicenseConfiguration.hs b/gen/Amazonka/EC2/Types/LicenseConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LicenseConfiguration.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LicenseConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LicenseConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a license configuration.
+--
+-- /See:/ 'newLicenseConfiguration' smart constructor.
+data LicenseConfiguration = LicenseConfiguration'
+  { -- | The Amazon Resource Name (ARN) of the license configuration.
+    licenseConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LicenseConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'licenseConfigurationArn', 'licenseConfiguration_licenseConfigurationArn' - The Amazon Resource Name (ARN) of the license configuration.
+newLicenseConfiguration ::
+  LicenseConfiguration
+newLicenseConfiguration =
+  LicenseConfiguration'
+    { licenseConfigurationArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the license configuration.
+licenseConfiguration_licenseConfigurationArn :: Lens.Lens' LicenseConfiguration (Prelude.Maybe Prelude.Text)
+licenseConfiguration_licenseConfigurationArn = Lens.lens (\LicenseConfiguration' {licenseConfigurationArn} -> licenseConfigurationArn) (\s@LicenseConfiguration' {} a -> s {licenseConfigurationArn = a} :: LicenseConfiguration)
+
+instance Data.FromXML LicenseConfiguration where
+  parseXML x =
+    LicenseConfiguration'
+      Prelude.<$> (x Data..@? "licenseConfigurationArn")
+
+instance Prelude.Hashable LicenseConfiguration where
+  hashWithSalt _salt LicenseConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` licenseConfigurationArn
+
+instance Prelude.NFData LicenseConfiguration where
+  rnf LicenseConfiguration' {..} =
+    Prelude.rnf licenseConfigurationArn
diff --git a/gen/Amazonka/EC2/Types/LicenseConfigurationRequest.hs b/gen/Amazonka/EC2/Types/LicenseConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LicenseConfigurationRequest.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LicenseConfigurationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LicenseConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a license configuration.
+--
+-- /See:/ 'newLicenseConfigurationRequest' smart constructor.
+data LicenseConfigurationRequest = LicenseConfigurationRequest'
+  { -- | The Amazon Resource Name (ARN) of the license configuration.
+    licenseConfigurationArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LicenseConfigurationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'licenseConfigurationArn', 'licenseConfigurationRequest_licenseConfigurationArn' - The Amazon Resource Name (ARN) of the license configuration.
+newLicenseConfigurationRequest ::
+  LicenseConfigurationRequest
+newLicenseConfigurationRequest =
+  LicenseConfigurationRequest'
+    { licenseConfigurationArn =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the license configuration.
+licenseConfigurationRequest_licenseConfigurationArn :: Lens.Lens' LicenseConfigurationRequest (Prelude.Maybe Prelude.Text)
+licenseConfigurationRequest_licenseConfigurationArn = Lens.lens (\LicenseConfigurationRequest' {licenseConfigurationArn} -> licenseConfigurationArn) (\s@LicenseConfigurationRequest' {} a -> s {licenseConfigurationArn = a} :: LicenseConfigurationRequest)
+
+instance Prelude.Hashable LicenseConfigurationRequest where
+  hashWithSalt _salt LicenseConfigurationRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` licenseConfigurationArn
+
+instance Prelude.NFData LicenseConfigurationRequest where
+  rnf LicenseConfigurationRequest' {..} =
+    Prelude.rnf licenseConfigurationArn
+
+instance Data.ToQuery LicenseConfigurationRequest where
+  toQuery LicenseConfigurationRequest' {..} =
+    Prelude.mconcat
+      [ "LicenseConfigurationArn"
+          Data.=: licenseConfigurationArn
+      ]
diff --git a/gen/Amazonka/EC2/Types/ListingState.hs b/gen/Amazonka/EC2/Types/ListingState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ListingState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ListingState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ListingState
+  ( ListingState
+      ( ..,
+        ListingState_Available,
+        ListingState_Cancelled,
+        ListingState_Pending,
+        ListingState_Sold
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ListingState = ListingState'
+  { fromListingState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ListingState_Available :: ListingState
+pattern ListingState_Available = ListingState' "available"
+
+pattern ListingState_Cancelled :: ListingState
+pattern ListingState_Cancelled = ListingState' "cancelled"
+
+pattern ListingState_Pending :: ListingState
+pattern ListingState_Pending = ListingState' "pending"
+
+pattern ListingState_Sold :: ListingState
+pattern ListingState_Sold = ListingState' "sold"
+
+{-# COMPLETE
+  ListingState_Available,
+  ListingState_Cancelled,
+  ListingState_Pending,
+  ListingState_Sold,
+  ListingState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ListingStatus.hs b/gen/Amazonka/EC2/Types/ListingStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ListingStatus.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ListingStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ListingStatus
+  ( ListingStatus
+      ( ..,
+        ListingStatus_Active,
+        ListingStatus_Cancelled,
+        ListingStatus_Closed,
+        ListingStatus_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ListingStatus = ListingStatus'
+  { fromListingStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ListingStatus_Active :: ListingStatus
+pattern ListingStatus_Active = ListingStatus' "active"
+
+pattern ListingStatus_Cancelled :: ListingStatus
+pattern ListingStatus_Cancelled = ListingStatus' "cancelled"
+
+pattern ListingStatus_Closed :: ListingStatus
+pattern ListingStatus_Closed = ListingStatus' "closed"
+
+pattern ListingStatus_Pending :: ListingStatus
+pattern ListingStatus_Pending = ListingStatus' "pending"
+
+{-# COMPLETE
+  ListingStatus_Active,
+  ListingStatus_Cancelled,
+  ListingStatus_Closed,
+  ListingStatus_Pending,
+  ListingStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LoadBalancersConfig.hs b/gen/Amazonka/EC2/Types/LoadBalancersConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LoadBalancersConfig.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LoadBalancersConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LoadBalancersConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClassicLoadBalancersConfig
+import Amazonka.EC2.Types.TargetGroupsConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Classic Load Balancers and target groups to attach to a
+-- Spot Fleet request.
+--
+-- /See:/ 'newLoadBalancersConfig' smart constructor.
+data LoadBalancersConfig = LoadBalancersConfig'
+  { -- | The Classic Load Balancers.
+    classicLoadBalancersConfig :: Prelude.Maybe ClassicLoadBalancersConfig,
+    -- | The target groups.
+    targetGroupsConfig :: Prelude.Maybe TargetGroupsConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoadBalancersConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classicLoadBalancersConfig', 'loadBalancersConfig_classicLoadBalancersConfig' - The Classic Load Balancers.
+--
+-- 'targetGroupsConfig', 'loadBalancersConfig_targetGroupsConfig' - The target groups.
+newLoadBalancersConfig ::
+  LoadBalancersConfig
+newLoadBalancersConfig =
+  LoadBalancersConfig'
+    { classicLoadBalancersConfig =
+        Prelude.Nothing,
+      targetGroupsConfig = Prelude.Nothing
+    }
+
+-- | The Classic Load Balancers.
+loadBalancersConfig_classicLoadBalancersConfig :: Lens.Lens' LoadBalancersConfig (Prelude.Maybe ClassicLoadBalancersConfig)
+loadBalancersConfig_classicLoadBalancersConfig = Lens.lens (\LoadBalancersConfig' {classicLoadBalancersConfig} -> classicLoadBalancersConfig) (\s@LoadBalancersConfig' {} a -> s {classicLoadBalancersConfig = a} :: LoadBalancersConfig)
+
+-- | The target groups.
+loadBalancersConfig_targetGroupsConfig :: Lens.Lens' LoadBalancersConfig (Prelude.Maybe TargetGroupsConfig)
+loadBalancersConfig_targetGroupsConfig = Lens.lens (\LoadBalancersConfig' {targetGroupsConfig} -> targetGroupsConfig) (\s@LoadBalancersConfig' {} a -> s {targetGroupsConfig = a} :: LoadBalancersConfig)
+
+instance Data.FromXML LoadBalancersConfig where
+  parseXML x =
+    LoadBalancersConfig'
+      Prelude.<$> (x Data..@? "classicLoadBalancersConfig")
+      Prelude.<*> (x Data..@? "targetGroupsConfig")
+
+instance Prelude.Hashable LoadBalancersConfig where
+  hashWithSalt _salt LoadBalancersConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` classicLoadBalancersConfig
+      `Prelude.hashWithSalt` targetGroupsConfig
+
+instance Prelude.NFData LoadBalancersConfig where
+  rnf LoadBalancersConfig' {..} =
+    Prelude.rnf classicLoadBalancersConfig
+      `Prelude.seq` Prelude.rnf targetGroupsConfig
+
+instance Data.ToQuery LoadBalancersConfig where
+  toQuery LoadBalancersConfig' {..} =
+    Prelude.mconcat
+      [ "ClassicLoadBalancersConfig"
+          Data.=: classicLoadBalancersConfig,
+        "TargetGroupsConfig" Data.=: targetGroupsConfig
+      ]
diff --git a/gen/Amazonka/EC2/Types/LoadPermission.hs b/gen/Amazonka/EC2/Types/LoadPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LoadPermission.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LoadPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LoadPermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PermissionGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load permission.
+--
+-- /See:/ 'newLoadPermission' smart constructor.
+data LoadPermission = LoadPermission'
+  { -- | The name of the group.
+    group' :: Prelude.Maybe PermissionGroup,
+    -- | The Amazon Web Services account ID.
+    userId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoadPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'group'', 'loadPermission_group' - The name of the group.
+--
+-- 'userId', 'loadPermission_userId' - The Amazon Web Services account ID.
+newLoadPermission ::
+  LoadPermission
+newLoadPermission =
+  LoadPermission'
+    { group' = Prelude.Nothing,
+      userId = Prelude.Nothing
+    }
+
+-- | The name of the group.
+loadPermission_group :: Lens.Lens' LoadPermission (Prelude.Maybe PermissionGroup)
+loadPermission_group = Lens.lens (\LoadPermission' {group'} -> group') (\s@LoadPermission' {} a -> s {group' = a} :: LoadPermission)
+
+-- | The Amazon Web Services account ID.
+loadPermission_userId :: Lens.Lens' LoadPermission (Prelude.Maybe Prelude.Text)
+loadPermission_userId = Lens.lens (\LoadPermission' {userId} -> userId) (\s@LoadPermission' {} a -> s {userId = a} :: LoadPermission)
+
+instance Data.FromXML LoadPermission where
+  parseXML x =
+    LoadPermission'
+      Prelude.<$> (x Data..@? "group")
+      Prelude.<*> (x Data..@? "userId")
+
+instance Prelude.Hashable LoadPermission where
+  hashWithSalt _salt LoadPermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` group'
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData LoadPermission where
+  rnf LoadPermission' {..} =
+    Prelude.rnf group' `Prelude.seq` Prelude.rnf userId
diff --git a/gen/Amazonka/EC2/Types/LoadPermissionModifications.hs b/gen/Amazonka/EC2/Types/LoadPermissionModifications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LoadPermissionModifications.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LoadPermissionModifications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LoadPermissionModifications where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LoadPermissionRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes modifications to the load permissions of an Amazon FPGA image
+-- (AFI).
+--
+-- /See:/ 'newLoadPermissionModifications' smart constructor.
+data LoadPermissionModifications = LoadPermissionModifications'
+  { -- | The load permissions to add.
+    add :: Prelude.Maybe [LoadPermissionRequest],
+    -- | The load permissions to remove.
+    remove :: Prelude.Maybe [LoadPermissionRequest]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoadPermissionModifications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'add', 'loadPermissionModifications_add' - The load permissions to add.
+--
+-- 'remove', 'loadPermissionModifications_remove' - The load permissions to remove.
+newLoadPermissionModifications ::
+  LoadPermissionModifications
+newLoadPermissionModifications =
+  LoadPermissionModifications'
+    { add = Prelude.Nothing,
+      remove = Prelude.Nothing
+    }
+
+-- | The load permissions to add.
+loadPermissionModifications_add :: Lens.Lens' LoadPermissionModifications (Prelude.Maybe [LoadPermissionRequest])
+loadPermissionModifications_add = Lens.lens (\LoadPermissionModifications' {add} -> add) (\s@LoadPermissionModifications' {} a -> s {add = a} :: LoadPermissionModifications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The load permissions to remove.
+loadPermissionModifications_remove :: Lens.Lens' LoadPermissionModifications (Prelude.Maybe [LoadPermissionRequest])
+loadPermissionModifications_remove = Lens.lens (\LoadPermissionModifications' {remove} -> remove) (\s@LoadPermissionModifications' {} a -> s {remove = a} :: LoadPermissionModifications) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable LoadPermissionModifications where
+  hashWithSalt _salt LoadPermissionModifications' {..} =
+    _salt
+      `Prelude.hashWithSalt` add
+      `Prelude.hashWithSalt` remove
+
+instance Prelude.NFData LoadPermissionModifications where
+  rnf LoadPermissionModifications' {..} =
+    Prelude.rnf add `Prelude.seq` Prelude.rnf remove
+
+instance Data.ToQuery LoadPermissionModifications where
+  toQuery LoadPermissionModifications' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          (Data.toQueryList "Add" Prelude.<$> add),
+        Data.toQuery
+          (Data.toQueryList "Remove" Prelude.<$> remove)
+      ]
diff --git a/gen/Amazonka/EC2/Types/LoadPermissionRequest.hs b/gen/Amazonka/EC2/Types/LoadPermissionRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LoadPermissionRequest.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LoadPermissionRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LoadPermissionRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PermissionGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load permission.
+--
+-- /See:/ 'newLoadPermissionRequest' smart constructor.
+data LoadPermissionRequest = LoadPermissionRequest'
+  { -- | The name of the group.
+    group' :: Prelude.Maybe PermissionGroup,
+    -- | The Amazon Web Services account ID.
+    userId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LoadPermissionRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'group'', 'loadPermissionRequest_group' - The name of the group.
+--
+-- 'userId', 'loadPermissionRequest_userId' - The Amazon Web Services account ID.
+newLoadPermissionRequest ::
+  LoadPermissionRequest
+newLoadPermissionRequest =
+  LoadPermissionRequest'
+    { group' = Prelude.Nothing,
+      userId = Prelude.Nothing
+    }
+
+-- | The name of the group.
+loadPermissionRequest_group :: Lens.Lens' LoadPermissionRequest (Prelude.Maybe PermissionGroup)
+loadPermissionRequest_group = Lens.lens (\LoadPermissionRequest' {group'} -> group') (\s@LoadPermissionRequest' {} a -> s {group' = a} :: LoadPermissionRequest)
+
+-- | The Amazon Web Services account ID.
+loadPermissionRequest_userId :: Lens.Lens' LoadPermissionRequest (Prelude.Maybe Prelude.Text)
+loadPermissionRequest_userId = Lens.lens (\LoadPermissionRequest' {userId} -> userId) (\s@LoadPermissionRequest' {} a -> s {userId = a} :: LoadPermissionRequest)
+
+instance Prelude.Hashable LoadPermissionRequest where
+  hashWithSalt _salt LoadPermissionRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` group'
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData LoadPermissionRequest where
+  rnf LoadPermissionRequest' {..} =
+    Prelude.rnf group' `Prelude.seq` Prelude.rnf userId
+
+instance Data.ToQuery LoadPermissionRequest where
+  toQuery LoadPermissionRequest' {..} =
+    Prelude.mconcat
+      ["Group" Data.=: group', "UserId" Data.=: userId]
diff --git a/gen/Amazonka/EC2/Types/LocalGateway.hs b/gen/Amazonka/EC2/Types/LocalGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGateway.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a local gateway.
+--
+-- /See:/ 'newLocalGateway' smart constructor.
+data LocalGateway = LocalGateway'
+  { -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the local gateway.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the local gateway.
+    state :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the local gateway.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayId', 'localGateway_localGatewayId' - The ID of the local gateway.
+--
+-- 'outpostArn', 'localGateway_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'ownerId', 'localGateway_ownerId' - The ID of the Amazon Web Services account that owns the local gateway.
+--
+-- 'state', 'localGateway_state' - The state of the local gateway.
+--
+-- 'tags', 'localGateway_tags' - The tags assigned to the local gateway.
+newLocalGateway ::
+  LocalGateway
+newLocalGateway =
+  LocalGateway'
+    { localGatewayId = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID of the local gateway.
+localGateway_localGatewayId :: Lens.Lens' LocalGateway (Prelude.Maybe Prelude.Text)
+localGateway_localGatewayId = Lens.lens (\LocalGateway' {localGatewayId} -> localGatewayId) (\s@LocalGateway' {} a -> s {localGatewayId = a} :: LocalGateway)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+localGateway_outpostArn :: Lens.Lens' LocalGateway (Prelude.Maybe Prelude.Text)
+localGateway_outpostArn = Lens.lens (\LocalGateway' {outpostArn} -> outpostArn) (\s@LocalGateway' {} a -> s {outpostArn = a} :: LocalGateway)
+
+-- | The ID of the Amazon Web Services account that owns the local gateway.
+localGateway_ownerId :: Lens.Lens' LocalGateway (Prelude.Maybe Prelude.Text)
+localGateway_ownerId = Lens.lens (\LocalGateway' {ownerId} -> ownerId) (\s@LocalGateway' {} a -> s {ownerId = a} :: LocalGateway)
+
+-- | The state of the local gateway.
+localGateway_state :: Lens.Lens' LocalGateway (Prelude.Maybe Prelude.Text)
+localGateway_state = Lens.lens (\LocalGateway' {state} -> state) (\s@LocalGateway' {} a -> s {state = a} :: LocalGateway)
+
+-- | The tags assigned to the local gateway.
+localGateway_tags :: Lens.Lens' LocalGateway (Prelude.Maybe [Tag])
+localGateway_tags = Lens.lens (\LocalGateway' {tags} -> tags) (\s@LocalGateway' {} a -> s {tags = a} :: LocalGateway) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML LocalGateway where
+  parseXML x =
+    LocalGateway'
+      Prelude.<$> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable LocalGateway where
+  hashWithSalt _salt LocalGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` localGatewayId
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData LocalGateway where
+  rnf LocalGateway' {..} =
+    Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRoute.hs b/gen/Amazonka/EC2/Types/LocalGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRoute.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRoute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LocalGatewayRouteState
+import Amazonka.EC2.Types.LocalGatewayRouteType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route for a local gateway route table.
+--
+-- /See:/ 'newLocalGatewayRoute' smart constructor.
+data LocalGatewayRoute = LocalGatewayRoute'
+  { -- | The ID of the customer-owned address pool.
+    coipPoolId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR block used for destination matches.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the local gateway route table.
+    localGatewayRouteTableArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the virtual interface group.
+    localGatewayVirtualInterfaceGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the local gateway
+    -- route.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the route.
+    state :: Prelude.Maybe LocalGatewayRouteState,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The route type.
+    type' :: Prelude.Maybe LocalGatewayRouteType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coipPoolId', 'localGatewayRoute_coipPoolId' - The ID of the customer-owned address pool.
+--
+-- 'destinationCidrBlock', 'localGatewayRoute_destinationCidrBlock' - The CIDR block used for destination matches.
+--
+-- 'localGatewayRouteTableArn', 'localGatewayRoute_localGatewayRouteTableArn' - The Amazon Resource Name (ARN) of the local gateway route table.
+--
+-- 'localGatewayRouteTableId', 'localGatewayRoute_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'localGatewayVirtualInterfaceGroupId', 'localGatewayRoute_localGatewayVirtualInterfaceGroupId' - The ID of the virtual interface group.
+--
+-- 'networkInterfaceId', 'localGatewayRoute_networkInterfaceId' - The ID of the network interface.
+--
+-- 'ownerId', 'localGatewayRoute_ownerId' - The ID of the Amazon Web Services account that owns the local gateway
+-- route.
+--
+-- 'state', 'localGatewayRoute_state' - The state of the route.
+--
+-- 'subnetId', 'localGatewayRoute_subnetId' - The ID of the subnet.
+--
+-- 'type'', 'localGatewayRoute_type' - The route type.
+newLocalGatewayRoute ::
+  LocalGatewayRoute
+newLocalGatewayRoute =
+  LocalGatewayRoute'
+    { coipPoolId = Prelude.Nothing,
+      destinationCidrBlock = Prelude.Nothing,
+      localGatewayRouteTableArn = Prelude.Nothing,
+      localGatewayRouteTableId = Prelude.Nothing,
+      localGatewayVirtualInterfaceGroupId =
+        Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The ID of the customer-owned address pool.
+localGatewayRoute_coipPoolId :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_coipPoolId = Lens.lens (\LocalGatewayRoute' {coipPoolId} -> coipPoolId) (\s@LocalGatewayRoute' {} a -> s {coipPoolId = a} :: LocalGatewayRoute)
+
+-- | The CIDR block used for destination matches.
+localGatewayRoute_destinationCidrBlock :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_destinationCidrBlock = Lens.lens (\LocalGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@LocalGatewayRoute' {} a -> s {destinationCidrBlock = a} :: LocalGatewayRoute)
+
+-- | The Amazon Resource Name (ARN) of the local gateway route table.
+localGatewayRoute_localGatewayRouteTableArn :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_localGatewayRouteTableArn = Lens.lens (\LocalGatewayRoute' {localGatewayRouteTableArn} -> localGatewayRouteTableArn) (\s@LocalGatewayRoute' {} a -> s {localGatewayRouteTableArn = a} :: LocalGatewayRoute)
+
+-- | The ID of the local gateway route table.
+localGatewayRoute_localGatewayRouteTableId :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_localGatewayRouteTableId = Lens.lens (\LocalGatewayRoute' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@LocalGatewayRoute' {} a -> s {localGatewayRouteTableId = a} :: LocalGatewayRoute)
+
+-- | The ID of the virtual interface group.
+localGatewayRoute_localGatewayVirtualInterfaceGroupId :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_localGatewayVirtualInterfaceGroupId = Lens.lens (\LocalGatewayRoute' {localGatewayVirtualInterfaceGroupId} -> localGatewayVirtualInterfaceGroupId) (\s@LocalGatewayRoute' {} a -> s {localGatewayVirtualInterfaceGroupId = a} :: LocalGatewayRoute)
+
+-- | The ID of the network interface.
+localGatewayRoute_networkInterfaceId :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_networkInterfaceId = Lens.lens (\LocalGatewayRoute' {networkInterfaceId} -> networkInterfaceId) (\s@LocalGatewayRoute' {} a -> s {networkInterfaceId = a} :: LocalGatewayRoute)
+
+-- | The ID of the Amazon Web Services account that owns the local gateway
+-- route.
+localGatewayRoute_ownerId :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_ownerId = Lens.lens (\LocalGatewayRoute' {ownerId} -> ownerId) (\s@LocalGatewayRoute' {} a -> s {ownerId = a} :: LocalGatewayRoute)
+
+-- | The state of the route.
+localGatewayRoute_state :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe LocalGatewayRouteState)
+localGatewayRoute_state = Lens.lens (\LocalGatewayRoute' {state} -> state) (\s@LocalGatewayRoute' {} a -> s {state = a} :: LocalGatewayRoute)
+
+-- | The ID of the subnet.
+localGatewayRoute_subnetId :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe Prelude.Text)
+localGatewayRoute_subnetId = Lens.lens (\LocalGatewayRoute' {subnetId} -> subnetId) (\s@LocalGatewayRoute' {} a -> s {subnetId = a} :: LocalGatewayRoute)
+
+-- | The route type.
+localGatewayRoute_type :: Lens.Lens' LocalGatewayRoute (Prelude.Maybe LocalGatewayRouteType)
+localGatewayRoute_type = Lens.lens (\LocalGatewayRoute' {type'} -> type') (\s@LocalGatewayRoute' {} a -> s {type' = a} :: LocalGatewayRoute)
+
+instance Data.FromXML LocalGatewayRoute where
+  parseXML x =
+    LocalGatewayRoute'
+      Prelude.<$> (x Data..@? "coipPoolId")
+      Prelude.<*> (x Data..@? "destinationCidrBlock")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableArn")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableId")
+      Prelude.<*> (x Data..@? "localGatewayVirtualInterfaceGroupId")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable LocalGatewayRoute where
+  hashWithSalt _salt LocalGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` coipPoolId
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` localGatewayRouteTableArn
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+      `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData LocalGatewayRoute where
+  rnf LocalGatewayRoute' {..} =
+    Prelude.rnf coipPoolId
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableArn
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRouteState.hs b/gen/Amazonka/EC2/Types/LocalGatewayRouteState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRouteState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRouteState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRouteState
+  ( LocalGatewayRouteState
+      ( ..,
+        LocalGatewayRouteState_Active,
+        LocalGatewayRouteState_Blackhole,
+        LocalGatewayRouteState_Deleted,
+        LocalGatewayRouteState_Deleting,
+        LocalGatewayRouteState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocalGatewayRouteState = LocalGatewayRouteState'
+  { fromLocalGatewayRouteState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LocalGatewayRouteState_Active :: LocalGatewayRouteState
+pattern LocalGatewayRouteState_Active = LocalGatewayRouteState' "active"
+
+pattern LocalGatewayRouteState_Blackhole :: LocalGatewayRouteState
+pattern LocalGatewayRouteState_Blackhole = LocalGatewayRouteState' "blackhole"
+
+pattern LocalGatewayRouteState_Deleted :: LocalGatewayRouteState
+pattern LocalGatewayRouteState_Deleted = LocalGatewayRouteState' "deleted"
+
+pattern LocalGatewayRouteState_Deleting :: LocalGatewayRouteState
+pattern LocalGatewayRouteState_Deleting = LocalGatewayRouteState' "deleting"
+
+pattern LocalGatewayRouteState_Pending :: LocalGatewayRouteState
+pattern LocalGatewayRouteState_Pending = LocalGatewayRouteState' "pending"
+
+{-# COMPLETE
+  LocalGatewayRouteState_Active,
+  LocalGatewayRouteState_Blackhole,
+  LocalGatewayRouteState_Deleted,
+  LocalGatewayRouteState_Deleting,
+  LocalGatewayRouteState_Pending,
+  LocalGatewayRouteState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRouteTable.hs b/gen/Amazonka/EC2/Types/LocalGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRouteTable.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRouteTable where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LocalGatewayRouteTableMode
+import Amazonka.EC2.Types.StateReason
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a local gateway route table.
+--
+-- /See:/ 'newLocalGatewayRouteTable' smart constructor.
+data LocalGatewayRouteTable = LocalGatewayRouteTable'
+  { -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the local gateway route table.
+    localGatewayRouteTableArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The mode of the local gateway route table.
+    mode :: Prelude.Maybe LocalGatewayRouteTableMode,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the local gateway
+    -- route table.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the local gateway route table.
+    state :: Prelude.Maybe Prelude.Text,
+    -- | Information about the state change.
+    stateReason :: Prelude.Maybe StateReason,
+    -- | The tags assigned to the local gateway route table.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayId', 'localGatewayRouteTable_localGatewayId' - The ID of the local gateway.
+--
+-- 'localGatewayRouteTableArn', 'localGatewayRouteTable_localGatewayRouteTableArn' - The Amazon Resource Name (ARN) of the local gateway route table.
+--
+-- 'localGatewayRouteTableId', 'localGatewayRouteTable_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'mode', 'localGatewayRouteTable_mode' - The mode of the local gateway route table.
+--
+-- 'outpostArn', 'localGatewayRouteTable_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'ownerId', 'localGatewayRouteTable_ownerId' - The ID of the Amazon Web Services account that owns the local gateway
+-- route table.
+--
+-- 'state', 'localGatewayRouteTable_state' - The state of the local gateway route table.
+--
+-- 'stateReason', 'localGatewayRouteTable_stateReason' - Information about the state change.
+--
+-- 'tags', 'localGatewayRouteTable_tags' - The tags assigned to the local gateway route table.
+newLocalGatewayRouteTable ::
+  LocalGatewayRouteTable
+newLocalGatewayRouteTable =
+  LocalGatewayRouteTable'
+    { localGatewayId =
+        Prelude.Nothing,
+      localGatewayRouteTableArn = Prelude.Nothing,
+      localGatewayRouteTableId = Prelude.Nothing,
+      mode = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateReason = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID of the local gateway.
+localGatewayRouteTable_localGatewayId :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe Prelude.Text)
+localGatewayRouteTable_localGatewayId = Lens.lens (\LocalGatewayRouteTable' {localGatewayId} -> localGatewayId) (\s@LocalGatewayRouteTable' {} a -> s {localGatewayId = a} :: LocalGatewayRouteTable)
+
+-- | The Amazon Resource Name (ARN) of the local gateway route table.
+localGatewayRouteTable_localGatewayRouteTableArn :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe Prelude.Text)
+localGatewayRouteTable_localGatewayRouteTableArn = Lens.lens (\LocalGatewayRouteTable' {localGatewayRouteTableArn} -> localGatewayRouteTableArn) (\s@LocalGatewayRouteTable' {} a -> s {localGatewayRouteTableArn = a} :: LocalGatewayRouteTable)
+
+-- | The ID of the local gateway route table.
+localGatewayRouteTable_localGatewayRouteTableId :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe Prelude.Text)
+localGatewayRouteTable_localGatewayRouteTableId = Lens.lens (\LocalGatewayRouteTable' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@LocalGatewayRouteTable' {} a -> s {localGatewayRouteTableId = a} :: LocalGatewayRouteTable)
+
+-- | The mode of the local gateway route table.
+localGatewayRouteTable_mode :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe LocalGatewayRouteTableMode)
+localGatewayRouteTable_mode = Lens.lens (\LocalGatewayRouteTable' {mode} -> mode) (\s@LocalGatewayRouteTable' {} a -> s {mode = a} :: LocalGatewayRouteTable)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+localGatewayRouteTable_outpostArn :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe Prelude.Text)
+localGatewayRouteTable_outpostArn = Lens.lens (\LocalGatewayRouteTable' {outpostArn} -> outpostArn) (\s@LocalGatewayRouteTable' {} a -> s {outpostArn = a} :: LocalGatewayRouteTable)
+
+-- | The ID of the Amazon Web Services account that owns the local gateway
+-- route table.
+localGatewayRouteTable_ownerId :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe Prelude.Text)
+localGatewayRouteTable_ownerId = Lens.lens (\LocalGatewayRouteTable' {ownerId} -> ownerId) (\s@LocalGatewayRouteTable' {} a -> s {ownerId = a} :: LocalGatewayRouteTable)
+
+-- | The state of the local gateway route table.
+localGatewayRouteTable_state :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe Prelude.Text)
+localGatewayRouteTable_state = Lens.lens (\LocalGatewayRouteTable' {state} -> state) (\s@LocalGatewayRouteTable' {} a -> s {state = a} :: LocalGatewayRouteTable)
+
+-- | Information about the state change.
+localGatewayRouteTable_stateReason :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe StateReason)
+localGatewayRouteTable_stateReason = Lens.lens (\LocalGatewayRouteTable' {stateReason} -> stateReason) (\s@LocalGatewayRouteTable' {} a -> s {stateReason = a} :: LocalGatewayRouteTable)
+
+-- | The tags assigned to the local gateway route table.
+localGatewayRouteTable_tags :: Lens.Lens' LocalGatewayRouteTable (Prelude.Maybe [Tag])
+localGatewayRouteTable_tags = Lens.lens (\LocalGatewayRouteTable' {tags} -> tags) (\s@LocalGatewayRouteTable' {} a -> s {tags = a} :: LocalGatewayRouteTable) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML LocalGatewayRouteTable where
+  parseXML x =
+    LocalGatewayRouteTable'
+      Prelude.<$> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableArn")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableId")
+      Prelude.<*> (x Data..@? "mode")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateReason")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable LocalGatewayRouteTable where
+  hashWithSalt _salt LocalGatewayRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` localGatewayId
+      `Prelude.hashWithSalt` localGatewayRouteTableArn
+      `Prelude.hashWithSalt` localGatewayRouteTableId
+      `Prelude.hashWithSalt` mode
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateReason
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData LocalGatewayRouteTable where
+  rnf LocalGatewayRouteTable' {..} =
+    Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableArn
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf mode
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateReason
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRouteTableMode.hs b/gen/Amazonka/EC2/Types/LocalGatewayRouteTableMode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRouteTableMode.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRouteTableMode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRouteTableMode
+  ( LocalGatewayRouteTableMode
+      ( ..,
+        LocalGatewayRouteTableMode_Coip,
+        LocalGatewayRouteTableMode_Direct_vpc_routing
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocalGatewayRouteTableMode = LocalGatewayRouteTableMode'
+  { fromLocalGatewayRouteTableMode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LocalGatewayRouteTableMode_Coip :: LocalGatewayRouteTableMode
+pattern LocalGatewayRouteTableMode_Coip = LocalGatewayRouteTableMode' "coip"
+
+pattern LocalGatewayRouteTableMode_Direct_vpc_routing :: LocalGatewayRouteTableMode
+pattern LocalGatewayRouteTableMode_Direct_vpc_routing = LocalGatewayRouteTableMode' "direct-vpc-routing"
+
+{-# COMPLETE
+  LocalGatewayRouteTableMode_Coip,
+  LocalGatewayRouteTableMode_Direct_vpc_routing,
+  LocalGatewayRouteTableMode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs b/gen/Amazonka/EC2/Types/LocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRouteTableVirtualInterfaceGroupAssociation.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRouteTableVirtualInterfaceGroupAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a local gateway route table and a
+-- virtual interface group.
+--
+-- /See:/ 'newLocalGatewayRouteTableVirtualInterfaceGroupAssociation' smart constructor.
+data LocalGatewayRouteTableVirtualInterfaceGroupAssociation = LocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+  { -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the local gateway route table for the
+    -- virtual interface group.
+    localGatewayRouteTableArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the association.
+    localGatewayRouteTableVirtualInterfaceGroupAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the virtual interface group.
+    localGatewayVirtualInterfaceGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the local gateway
+    -- virtual interface group association.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the association.
+    state :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the association.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGatewayRouteTableVirtualInterfaceGroupAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayId', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayId' - The ID of the local gateway.
+--
+-- 'localGatewayRouteTableArn', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableArn' - The Amazon Resource Name (ARN) of the local gateway route table for the
+-- virtual interface group.
+--
+-- 'localGatewayRouteTableId', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'localGatewayRouteTableVirtualInterfaceGroupAssociationId', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId' - The ID of the association.
+--
+-- 'localGatewayVirtualInterfaceGroupId', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId' - The ID of the virtual interface group.
+--
+-- 'ownerId', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_ownerId' - The ID of the Amazon Web Services account that owns the local gateway
+-- virtual interface group association.
+--
+-- 'state', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_state' - The state of the association.
+--
+-- 'tags', 'localGatewayRouteTableVirtualInterfaceGroupAssociation_tags' - The tags assigned to the association.
+newLocalGatewayRouteTableVirtualInterfaceGroupAssociation ::
+  LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+newLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+  LocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+    { localGatewayId =
+        Prelude.Nothing,
+      localGatewayRouteTableArn =
+        Prelude.Nothing,
+      localGatewayRouteTableId =
+        Prelude.Nothing,
+      localGatewayRouteTableVirtualInterfaceGroupAssociationId =
+        Prelude.Nothing,
+      localGatewayVirtualInterfaceGroupId =
+        Prelude.Nothing,
+      ownerId =
+        Prelude.Nothing,
+      state =
+        Prelude.Nothing,
+      tags =
+        Prelude.Nothing
+    }
+
+-- | The ID of the local gateway.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayId :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayId = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayId} -> localGatewayId) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayId = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The Amazon Resource Name (ARN) of the local gateway route table for the
+-- virtual interface group.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableArn :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableArn = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayRouteTableArn} -> localGatewayRouteTableArn) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayRouteTableArn = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The ID of the local gateway route table.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableId = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayRouteTableId = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The ID of the association.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayRouteTableVirtualInterfaceGroupAssociationId = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayRouteTableVirtualInterfaceGroupAssociationId} -> localGatewayRouteTableVirtualInterfaceGroupAssociationId) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayRouteTableVirtualInterfaceGroupAssociationId = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The ID of the virtual interface group.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_localGatewayVirtualInterfaceGroupId = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {localGatewayVirtualInterfaceGroupId} -> localGatewayVirtualInterfaceGroupId) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {localGatewayVirtualInterfaceGroupId = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The ID of the Amazon Web Services account that owns the local gateway
+-- virtual interface group association.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_ownerId :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_ownerId = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {ownerId} -> ownerId) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {ownerId = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The state of the association.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_state :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVirtualInterfaceGroupAssociation_state = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {state} -> state) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {state = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+-- | The tags assigned to the association.
+localGatewayRouteTableVirtualInterfaceGroupAssociation_tags :: Lens.Lens' LocalGatewayRouteTableVirtualInterfaceGroupAssociation (Prelude.Maybe [Tag])
+localGatewayRouteTableVirtualInterfaceGroupAssociation_tags = Lens.lens (\LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {tags} -> tags) (\s@LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {} a -> s {tags = a} :: LocalGatewayRouteTableVirtualInterfaceGroupAssociation) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromXML
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  parseXML x =
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation'
+      Prelude.<$> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableArn")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableId")
+      Prelude.<*> ( x
+                      Data..@? "localGatewayRouteTableVirtualInterfaceGroupAssociationId"
+                  )
+      Prelude.<*> (x Data..@? "localGatewayVirtualInterfaceGroupId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance
+  Prelude.Hashable
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  hashWithSalt
+    _salt
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` localGatewayId
+        `Prelude.hashWithSalt` localGatewayRouteTableArn
+        `Prelude.hashWithSalt` localGatewayRouteTableId
+        `Prelude.hashWithSalt` localGatewayRouteTableVirtualInterfaceGroupAssociationId
+        `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupId
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation
+  where
+  rnf
+    LocalGatewayRouteTableVirtualInterfaceGroupAssociation' {..} =
+      Prelude.rnf localGatewayId
+        `Prelude.seq` Prelude.rnf localGatewayRouteTableArn
+        `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+        `Prelude.seq` Prelude.rnf
+          localGatewayRouteTableVirtualInterfaceGroupAssociationId
+        `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupId
+        `Prelude.seq` Prelude.rnf ownerId
+        `Prelude.seq` Prelude.rnf state
+        `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRouteTableVpcAssociation.hs b/gen/Amazonka/EC2/Types/LocalGatewayRouteTableVpcAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRouteTableVpcAssociation.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRouteTableVpcAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRouteTableVpcAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a local gateway route table and a VPC.
+--
+-- /See:/ 'newLocalGatewayRouteTableVpcAssociation' smart constructor.
+data LocalGatewayRouteTableVpcAssociation = LocalGatewayRouteTableVpcAssociation'
+  { -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the local gateway route table for the
+    -- association.
+    localGatewayRouteTableArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway route table.
+    localGatewayRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the association.
+    localGatewayRouteTableVpcAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the local gateway
+    -- route table for the association.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the association.
+    state :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the association.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGatewayRouteTableVpcAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayId', 'localGatewayRouteTableVpcAssociation_localGatewayId' - The ID of the local gateway.
+--
+-- 'localGatewayRouteTableArn', 'localGatewayRouteTableVpcAssociation_localGatewayRouteTableArn' - The Amazon Resource Name (ARN) of the local gateway route table for the
+-- association.
+--
+-- 'localGatewayRouteTableId', 'localGatewayRouteTableVpcAssociation_localGatewayRouteTableId' - The ID of the local gateway route table.
+--
+-- 'localGatewayRouteTableVpcAssociationId', 'localGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId' - The ID of the association.
+--
+-- 'ownerId', 'localGatewayRouteTableVpcAssociation_ownerId' - The ID of the Amazon Web Services account that owns the local gateway
+-- route table for the association.
+--
+-- 'state', 'localGatewayRouteTableVpcAssociation_state' - The state of the association.
+--
+-- 'tags', 'localGatewayRouteTableVpcAssociation_tags' - The tags assigned to the association.
+--
+-- 'vpcId', 'localGatewayRouteTableVpcAssociation_vpcId' - The ID of the VPC.
+newLocalGatewayRouteTableVpcAssociation ::
+  LocalGatewayRouteTableVpcAssociation
+newLocalGatewayRouteTableVpcAssociation =
+  LocalGatewayRouteTableVpcAssociation'
+    { localGatewayId =
+        Prelude.Nothing,
+      localGatewayRouteTableArn =
+        Prelude.Nothing,
+      localGatewayRouteTableId =
+        Prelude.Nothing,
+      localGatewayRouteTableVpcAssociationId =
+        Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The ID of the local gateway.
+localGatewayRouteTableVpcAssociation_localGatewayId :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_localGatewayId = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {localGatewayId} -> localGatewayId) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {localGatewayId = a} :: LocalGatewayRouteTableVpcAssociation)
+
+-- | The Amazon Resource Name (ARN) of the local gateway route table for the
+-- association.
+localGatewayRouteTableVpcAssociation_localGatewayRouteTableArn :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_localGatewayRouteTableArn = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {localGatewayRouteTableArn} -> localGatewayRouteTableArn) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {localGatewayRouteTableArn = a} :: LocalGatewayRouteTableVpcAssociation)
+
+-- | The ID of the local gateway route table.
+localGatewayRouteTableVpcAssociation_localGatewayRouteTableId :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_localGatewayRouteTableId = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {localGatewayRouteTableId} -> localGatewayRouteTableId) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {localGatewayRouteTableId = a} :: LocalGatewayRouteTableVpcAssociation)
+
+-- | The ID of the association.
+localGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_localGatewayRouteTableVpcAssociationId = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {localGatewayRouteTableVpcAssociationId} -> localGatewayRouteTableVpcAssociationId) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {localGatewayRouteTableVpcAssociationId = a} :: LocalGatewayRouteTableVpcAssociation)
+
+-- | The ID of the Amazon Web Services account that owns the local gateway
+-- route table for the association.
+localGatewayRouteTableVpcAssociation_ownerId :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_ownerId = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {ownerId} -> ownerId) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {ownerId = a} :: LocalGatewayRouteTableVpcAssociation)
+
+-- | The state of the association.
+localGatewayRouteTableVpcAssociation_state :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_state = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {state} -> state) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {state = a} :: LocalGatewayRouteTableVpcAssociation)
+
+-- | The tags assigned to the association.
+localGatewayRouteTableVpcAssociation_tags :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe [Tag])
+localGatewayRouteTableVpcAssociation_tags = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {tags} -> tags) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {tags = a} :: LocalGatewayRouteTableVpcAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+localGatewayRouteTableVpcAssociation_vpcId :: Lens.Lens' LocalGatewayRouteTableVpcAssociation (Prelude.Maybe Prelude.Text)
+localGatewayRouteTableVpcAssociation_vpcId = Lens.lens (\LocalGatewayRouteTableVpcAssociation' {vpcId} -> vpcId) (\s@LocalGatewayRouteTableVpcAssociation' {} a -> s {vpcId = a} :: LocalGatewayRouteTableVpcAssociation)
+
+instance
+  Data.FromXML
+    LocalGatewayRouteTableVpcAssociation
+  where
+  parseXML x =
+    LocalGatewayRouteTableVpcAssociation'
+      Prelude.<$> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableArn")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableId")
+      Prelude.<*> (x Data..@? "localGatewayRouteTableVpcAssociationId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance
+  Prelude.Hashable
+    LocalGatewayRouteTableVpcAssociation
+  where
+  hashWithSalt
+    _salt
+    LocalGatewayRouteTableVpcAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` localGatewayId
+        `Prelude.hashWithSalt` localGatewayRouteTableArn
+        `Prelude.hashWithSalt` localGatewayRouteTableId
+        `Prelude.hashWithSalt` localGatewayRouteTableVpcAssociationId
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` vpcId
+
+instance
+  Prelude.NFData
+    LocalGatewayRouteTableVpcAssociation
+  where
+  rnf LocalGatewayRouteTableVpcAssociation' {..} =
+    Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableArn
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableId
+      `Prelude.seq` Prelude.rnf localGatewayRouteTableVpcAssociationId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayRouteType.hs b/gen/Amazonka/EC2/Types/LocalGatewayRouteType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayRouteType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayRouteType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayRouteType
+  ( LocalGatewayRouteType
+      ( ..,
+        LocalGatewayRouteType_Propagated,
+        LocalGatewayRouteType_Static
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocalGatewayRouteType = LocalGatewayRouteType'
+  { fromLocalGatewayRouteType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LocalGatewayRouteType_Propagated :: LocalGatewayRouteType
+pattern LocalGatewayRouteType_Propagated = LocalGatewayRouteType' "propagated"
+
+pattern LocalGatewayRouteType_Static :: LocalGatewayRouteType
+pattern LocalGatewayRouteType_Static = LocalGatewayRouteType' "static"
+
+{-# COMPLETE
+  LocalGatewayRouteType_Propagated,
+  LocalGatewayRouteType_Static,
+  LocalGatewayRouteType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayVirtualInterface.hs b/gen/Amazonka/EC2/Types/LocalGatewayVirtualInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayVirtualInterface.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayVirtualInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayVirtualInterface where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a local gateway virtual interface.
+--
+-- /See:/ 'newLocalGatewayVirtualInterface' smart constructor.
+data LocalGatewayVirtualInterface = LocalGatewayVirtualInterface'
+  { -- | The local address.
+    localAddress :: Prelude.Maybe Prelude.Text,
+    -- | The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the
+    -- local gateway.
+    localBgpAsn :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the virtual interface.
+    localGatewayVirtualInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the local gateway
+    -- virtual interface.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The peer address.
+    peerAddress :: Prelude.Maybe Prelude.Text,
+    -- | The peer BGP ASN.
+    peerBgpAsn :: Prelude.Maybe Prelude.Int,
+    -- | The tags assigned to the virtual interface.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VLAN.
+    vlan :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGatewayVirtualInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localAddress', 'localGatewayVirtualInterface_localAddress' - The local address.
+--
+-- 'localBgpAsn', 'localGatewayVirtualInterface_localBgpAsn' - The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the
+-- local gateway.
+--
+-- 'localGatewayId', 'localGatewayVirtualInterface_localGatewayId' - The ID of the local gateway.
+--
+-- 'localGatewayVirtualInterfaceId', 'localGatewayVirtualInterface_localGatewayVirtualInterfaceId' - The ID of the virtual interface.
+--
+-- 'ownerId', 'localGatewayVirtualInterface_ownerId' - The ID of the Amazon Web Services account that owns the local gateway
+-- virtual interface.
+--
+-- 'peerAddress', 'localGatewayVirtualInterface_peerAddress' - The peer address.
+--
+-- 'peerBgpAsn', 'localGatewayVirtualInterface_peerBgpAsn' - The peer BGP ASN.
+--
+-- 'tags', 'localGatewayVirtualInterface_tags' - The tags assigned to the virtual interface.
+--
+-- 'vlan', 'localGatewayVirtualInterface_vlan' - The ID of the VLAN.
+newLocalGatewayVirtualInterface ::
+  LocalGatewayVirtualInterface
+newLocalGatewayVirtualInterface =
+  LocalGatewayVirtualInterface'
+    { localAddress =
+        Prelude.Nothing,
+      localBgpAsn = Prelude.Nothing,
+      localGatewayId = Prelude.Nothing,
+      localGatewayVirtualInterfaceId =
+        Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      peerAddress = Prelude.Nothing,
+      peerBgpAsn = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vlan = Prelude.Nothing
+    }
+
+-- | The local address.
+localGatewayVirtualInterface_localAddress :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterface_localAddress = Lens.lens (\LocalGatewayVirtualInterface' {localAddress} -> localAddress) (\s@LocalGatewayVirtualInterface' {} a -> s {localAddress = a} :: LocalGatewayVirtualInterface)
+
+-- | The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the
+-- local gateway.
+localGatewayVirtualInterface_localBgpAsn :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Int)
+localGatewayVirtualInterface_localBgpAsn = Lens.lens (\LocalGatewayVirtualInterface' {localBgpAsn} -> localBgpAsn) (\s@LocalGatewayVirtualInterface' {} a -> s {localBgpAsn = a} :: LocalGatewayVirtualInterface)
+
+-- | The ID of the local gateway.
+localGatewayVirtualInterface_localGatewayId :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterface_localGatewayId = Lens.lens (\LocalGatewayVirtualInterface' {localGatewayId} -> localGatewayId) (\s@LocalGatewayVirtualInterface' {} a -> s {localGatewayId = a} :: LocalGatewayVirtualInterface)
+
+-- | The ID of the virtual interface.
+localGatewayVirtualInterface_localGatewayVirtualInterfaceId :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterface_localGatewayVirtualInterfaceId = Lens.lens (\LocalGatewayVirtualInterface' {localGatewayVirtualInterfaceId} -> localGatewayVirtualInterfaceId) (\s@LocalGatewayVirtualInterface' {} a -> s {localGatewayVirtualInterfaceId = a} :: LocalGatewayVirtualInterface)
+
+-- | The ID of the Amazon Web Services account that owns the local gateway
+-- virtual interface.
+localGatewayVirtualInterface_ownerId :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterface_ownerId = Lens.lens (\LocalGatewayVirtualInterface' {ownerId} -> ownerId) (\s@LocalGatewayVirtualInterface' {} a -> s {ownerId = a} :: LocalGatewayVirtualInterface)
+
+-- | The peer address.
+localGatewayVirtualInterface_peerAddress :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterface_peerAddress = Lens.lens (\LocalGatewayVirtualInterface' {peerAddress} -> peerAddress) (\s@LocalGatewayVirtualInterface' {} a -> s {peerAddress = a} :: LocalGatewayVirtualInterface)
+
+-- | The peer BGP ASN.
+localGatewayVirtualInterface_peerBgpAsn :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Int)
+localGatewayVirtualInterface_peerBgpAsn = Lens.lens (\LocalGatewayVirtualInterface' {peerBgpAsn} -> peerBgpAsn) (\s@LocalGatewayVirtualInterface' {} a -> s {peerBgpAsn = a} :: LocalGatewayVirtualInterface)
+
+-- | The tags assigned to the virtual interface.
+localGatewayVirtualInterface_tags :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe [Tag])
+localGatewayVirtualInterface_tags = Lens.lens (\LocalGatewayVirtualInterface' {tags} -> tags) (\s@LocalGatewayVirtualInterface' {} a -> s {tags = a} :: LocalGatewayVirtualInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VLAN.
+localGatewayVirtualInterface_vlan :: Lens.Lens' LocalGatewayVirtualInterface (Prelude.Maybe Prelude.Int)
+localGatewayVirtualInterface_vlan = Lens.lens (\LocalGatewayVirtualInterface' {vlan} -> vlan) (\s@LocalGatewayVirtualInterface' {} a -> s {vlan = a} :: LocalGatewayVirtualInterface)
+
+instance Data.FromXML LocalGatewayVirtualInterface where
+  parseXML x =
+    LocalGatewayVirtualInterface'
+      Prelude.<$> (x Data..@? "localAddress")
+      Prelude.<*> (x Data..@? "localBgpAsn")
+      Prelude.<*> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "localGatewayVirtualInterfaceId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "peerAddress")
+      Prelude.<*> (x Data..@? "peerBgpAsn")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vlan")
+
+instance
+  Prelude.Hashable
+    LocalGatewayVirtualInterface
+  where
+  hashWithSalt _salt LocalGatewayVirtualInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` localAddress
+      `Prelude.hashWithSalt` localBgpAsn
+      `Prelude.hashWithSalt` localGatewayId
+      `Prelude.hashWithSalt` localGatewayVirtualInterfaceId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` peerAddress
+      `Prelude.hashWithSalt` peerBgpAsn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vlan
+
+instance Prelude.NFData LocalGatewayVirtualInterface where
+  rnf LocalGatewayVirtualInterface' {..} =
+    Prelude.rnf localAddress
+      `Prelude.seq` Prelude.rnf localBgpAsn
+      `Prelude.seq` Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf peerAddress
+      `Prelude.seq` Prelude.rnf peerBgpAsn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vlan
diff --git a/gen/Amazonka/EC2/Types/LocalGatewayVirtualInterfaceGroup.hs b/gen/Amazonka/EC2/Types/LocalGatewayVirtualInterfaceGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalGatewayVirtualInterfaceGroup.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalGatewayVirtualInterfaceGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalGatewayVirtualInterfaceGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a local gateway virtual interface group.
+--
+-- /See:/ 'newLocalGatewayVirtualInterfaceGroup' smart constructor.
+data LocalGatewayVirtualInterfaceGroup = LocalGatewayVirtualInterfaceGroup'
+  { -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the virtual interface group.
+    localGatewayVirtualInterfaceGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the virtual interfaces.
+    localGatewayVirtualInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the Amazon Web Services account that owns the local gateway
+    -- virtual interface group.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the virtual interface group.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LocalGatewayVirtualInterfaceGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'localGatewayId', 'localGatewayVirtualInterfaceGroup_localGatewayId' - The ID of the local gateway.
+--
+-- 'localGatewayVirtualInterfaceGroupId', 'localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceGroupId' - The ID of the virtual interface group.
+--
+-- 'localGatewayVirtualInterfaceIds', 'localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceIds' - The IDs of the virtual interfaces.
+--
+-- 'ownerId', 'localGatewayVirtualInterfaceGroup_ownerId' - The ID of the Amazon Web Services account that owns the local gateway
+-- virtual interface group.
+--
+-- 'tags', 'localGatewayVirtualInterfaceGroup_tags' - The tags assigned to the virtual interface group.
+newLocalGatewayVirtualInterfaceGroup ::
+  LocalGatewayVirtualInterfaceGroup
+newLocalGatewayVirtualInterfaceGroup =
+  LocalGatewayVirtualInterfaceGroup'
+    { localGatewayId =
+        Prelude.Nothing,
+      localGatewayVirtualInterfaceGroupId =
+        Prelude.Nothing,
+      localGatewayVirtualInterfaceIds =
+        Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID of the local gateway.
+localGatewayVirtualInterfaceGroup_localGatewayId :: Lens.Lens' LocalGatewayVirtualInterfaceGroup (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterfaceGroup_localGatewayId = Lens.lens (\LocalGatewayVirtualInterfaceGroup' {localGatewayId} -> localGatewayId) (\s@LocalGatewayVirtualInterfaceGroup' {} a -> s {localGatewayId = a} :: LocalGatewayVirtualInterfaceGroup)
+
+-- | The ID of the virtual interface group.
+localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceGroupId :: Lens.Lens' LocalGatewayVirtualInterfaceGroup (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceGroupId = Lens.lens (\LocalGatewayVirtualInterfaceGroup' {localGatewayVirtualInterfaceGroupId} -> localGatewayVirtualInterfaceGroupId) (\s@LocalGatewayVirtualInterfaceGroup' {} a -> s {localGatewayVirtualInterfaceGroupId = a} :: LocalGatewayVirtualInterfaceGroup)
+
+-- | The IDs of the virtual interfaces.
+localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceIds :: Lens.Lens' LocalGatewayVirtualInterfaceGroup (Prelude.Maybe [Prelude.Text])
+localGatewayVirtualInterfaceGroup_localGatewayVirtualInterfaceIds = Lens.lens (\LocalGatewayVirtualInterfaceGroup' {localGatewayVirtualInterfaceIds} -> localGatewayVirtualInterfaceIds) (\s@LocalGatewayVirtualInterfaceGroup' {} a -> s {localGatewayVirtualInterfaceIds = a} :: LocalGatewayVirtualInterfaceGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services account that owns the local gateway
+-- virtual interface group.
+localGatewayVirtualInterfaceGroup_ownerId :: Lens.Lens' LocalGatewayVirtualInterfaceGroup (Prelude.Maybe Prelude.Text)
+localGatewayVirtualInterfaceGroup_ownerId = Lens.lens (\LocalGatewayVirtualInterfaceGroup' {ownerId} -> ownerId) (\s@LocalGatewayVirtualInterfaceGroup' {} a -> s {ownerId = a} :: LocalGatewayVirtualInterfaceGroup)
+
+-- | The tags assigned to the virtual interface group.
+localGatewayVirtualInterfaceGroup_tags :: Lens.Lens' LocalGatewayVirtualInterfaceGroup (Prelude.Maybe [Tag])
+localGatewayVirtualInterfaceGroup_tags = Lens.lens (\LocalGatewayVirtualInterfaceGroup' {tags} -> tags) (\s@LocalGatewayVirtualInterfaceGroup' {} a -> s {tags = a} :: LocalGatewayVirtualInterfaceGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromXML
+    LocalGatewayVirtualInterfaceGroup
+  where
+  parseXML x =
+    LocalGatewayVirtualInterfaceGroup'
+      Prelude.<$> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "localGatewayVirtualInterfaceGroupId")
+      Prelude.<*> ( x
+                      Data..@? "localGatewayVirtualInterfaceIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance
+  Prelude.Hashable
+    LocalGatewayVirtualInterfaceGroup
+  where
+  hashWithSalt
+    _salt
+    LocalGatewayVirtualInterfaceGroup' {..} =
+      _salt
+        `Prelude.hashWithSalt` localGatewayId
+        `Prelude.hashWithSalt` localGatewayVirtualInterfaceGroupId
+        `Prelude.hashWithSalt` localGatewayVirtualInterfaceIds
+        `Prelude.hashWithSalt` ownerId
+        `Prelude.hashWithSalt` tags
+
+instance
+  Prelude.NFData
+    LocalGatewayVirtualInterfaceGroup
+  where
+  rnf LocalGatewayVirtualInterfaceGroup' {..} =
+    Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceGroupId
+      `Prelude.seq` Prelude.rnf localGatewayVirtualInterfaceIds
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/LocalStorage.hs b/gen/Amazonka/EC2/Types/LocalStorage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalStorage.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalStorage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalStorage
+  ( LocalStorage
+      ( ..,
+        LocalStorage_Excluded,
+        LocalStorage_Included,
+        LocalStorage_Required
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocalStorage = LocalStorage'
+  { fromLocalStorage ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LocalStorage_Excluded :: LocalStorage
+pattern LocalStorage_Excluded = LocalStorage' "excluded"
+
+pattern LocalStorage_Included :: LocalStorage
+pattern LocalStorage_Included = LocalStorage' "included"
+
+pattern LocalStorage_Required :: LocalStorage
+pattern LocalStorage_Required = LocalStorage' "required"
+
+{-# COMPLETE
+  LocalStorage_Excluded,
+  LocalStorage_Included,
+  LocalStorage_Required,
+  LocalStorage'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LocalStorageType.hs b/gen/Amazonka/EC2/Types/LocalStorageType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocalStorageType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocalStorageType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocalStorageType
+  ( LocalStorageType
+      ( ..,
+        LocalStorageType_Hdd,
+        LocalStorageType_Ssd
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocalStorageType = LocalStorageType'
+  { fromLocalStorageType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LocalStorageType_Hdd :: LocalStorageType
+pattern LocalStorageType_Hdd = LocalStorageType' "hdd"
+
+pattern LocalStorageType_Ssd :: LocalStorageType
+pattern LocalStorageType_Ssd = LocalStorageType' "ssd"
+
+{-# COMPLETE
+  LocalStorageType_Hdd,
+  LocalStorageType_Ssd,
+  LocalStorageType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LocationType.hs b/gen/Amazonka/EC2/Types/LocationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LocationType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LocationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LocationType
+  ( LocationType
+      ( ..,
+        LocationType_Availability_zone,
+        LocationType_Availability_zone_id,
+        LocationType_Region
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LocationType = LocationType'
+  { fromLocationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LocationType_Availability_zone :: LocationType
+pattern LocationType_Availability_zone = LocationType' "availability-zone"
+
+pattern LocationType_Availability_zone_id :: LocationType
+pattern LocationType_Availability_zone_id = LocationType' "availability-zone-id"
+
+pattern LocationType_Region :: LocationType
+pattern LocationType_Region = LocationType' "region"
+
+{-# COMPLETE
+  LocationType_Availability_zone,
+  LocationType_Availability_zone_id,
+  LocationType_Region,
+  LocationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/LogDestinationType.hs b/gen/Amazonka/EC2/Types/LogDestinationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/LogDestinationType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.LogDestinationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.LogDestinationType
+  ( LogDestinationType
+      ( ..,
+        LogDestinationType_Cloud_watch_logs,
+        LogDestinationType_Kinesis_data_firehose,
+        LogDestinationType_S3
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype LogDestinationType = LogDestinationType'
+  { fromLogDestinationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LogDestinationType_Cloud_watch_logs :: LogDestinationType
+pattern LogDestinationType_Cloud_watch_logs = LogDestinationType' "cloud-watch-logs"
+
+pattern LogDestinationType_Kinesis_data_firehose :: LogDestinationType
+pattern LogDestinationType_Kinesis_data_firehose = LogDestinationType' "kinesis-data-firehose"
+
+pattern LogDestinationType_S3 :: LogDestinationType
+pattern LogDestinationType_S3 = LogDestinationType' "s3"
+
+{-# COMPLETE
+  LogDestinationType_Cloud_watch_logs,
+  LogDestinationType_Kinesis_data_firehose,
+  LogDestinationType_S3,
+  LogDestinationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ManagedPrefixList.hs b/gen/Amazonka/EC2/Types/ManagedPrefixList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ManagedPrefixList.hs
@@ -0,0 +1,183 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ManagedPrefixList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ManagedPrefixList where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PrefixListState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a managed prefix list.
+--
+-- /See:/ 'newManagedPrefixList' smart constructor.
+data ManagedPrefixList = ManagedPrefixList'
+  { -- | The IP address version.
+    addressFamily :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of entries for the prefix list.
+    maxEntries :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the owner of the prefix list.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) for the prefix list.
+    prefixListArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the prefix list.
+    prefixListName :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the prefix list.
+    state :: Prelude.Maybe PrefixListState,
+    -- | The state message.
+    stateMessage :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the prefix list.
+    tags :: Prelude.Maybe [Tag],
+    -- | The version of the prefix list.
+    version :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ManagedPrefixList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressFamily', 'managedPrefixList_addressFamily' - The IP address version.
+--
+-- 'maxEntries', 'managedPrefixList_maxEntries' - The maximum number of entries for the prefix list.
+--
+-- 'ownerId', 'managedPrefixList_ownerId' - The ID of the owner of the prefix list.
+--
+-- 'prefixListArn', 'managedPrefixList_prefixListArn' - The Amazon Resource Name (ARN) for the prefix list.
+--
+-- 'prefixListId', 'managedPrefixList_prefixListId' - The ID of the prefix list.
+--
+-- 'prefixListName', 'managedPrefixList_prefixListName' - The name of the prefix list.
+--
+-- 'state', 'managedPrefixList_state' - The current state of the prefix list.
+--
+-- 'stateMessage', 'managedPrefixList_stateMessage' - The state message.
+--
+-- 'tags', 'managedPrefixList_tags' - The tags for the prefix list.
+--
+-- 'version', 'managedPrefixList_version' - The version of the prefix list.
+newManagedPrefixList ::
+  ManagedPrefixList
+newManagedPrefixList =
+  ManagedPrefixList'
+    { addressFamily = Prelude.Nothing,
+      maxEntries = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      prefixListArn = Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      prefixListName = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      version = Prelude.Nothing
+    }
+
+-- | The IP address version.
+managedPrefixList_addressFamily :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Text)
+managedPrefixList_addressFamily = Lens.lens (\ManagedPrefixList' {addressFamily} -> addressFamily) (\s@ManagedPrefixList' {} a -> s {addressFamily = a} :: ManagedPrefixList)
+
+-- | The maximum number of entries for the prefix list.
+managedPrefixList_maxEntries :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Int)
+managedPrefixList_maxEntries = Lens.lens (\ManagedPrefixList' {maxEntries} -> maxEntries) (\s@ManagedPrefixList' {} a -> s {maxEntries = a} :: ManagedPrefixList)
+
+-- | The ID of the owner of the prefix list.
+managedPrefixList_ownerId :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Text)
+managedPrefixList_ownerId = Lens.lens (\ManagedPrefixList' {ownerId} -> ownerId) (\s@ManagedPrefixList' {} a -> s {ownerId = a} :: ManagedPrefixList)
+
+-- | The Amazon Resource Name (ARN) for the prefix list.
+managedPrefixList_prefixListArn :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Text)
+managedPrefixList_prefixListArn = Lens.lens (\ManagedPrefixList' {prefixListArn} -> prefixListArn) (\s@ManagedPrefixList' {} a -> s {prefixListArn = a} :: ManagedPrefixList)
+
+-- | The ID of the prefix list.
+managedPrefixList_prefixListId :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Text)
+managedPrefixList_prefixListId = Lens.lens (\ManagedPrefixList' {prefixListId} -> prefixListId) (\s@ManagedPrefixList' {} a -> s {prefixListId = a} :: ManagedPrefixList)
+
+-- | The name of the prefix list.
+managedPrefixList_prefixListName :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Text)
+managedPrefixList_prefixListName = Lens.lens (\ManagedPrefixList' {prefixListName} -> prefixListName) (\s@ManagedPrefixList' {} a -> s {prefixListName = a} :: ManagedPrefixList)
+
+-- | The current state of the prefix list.
+managedPrefixList_state :: Lens.Lens' ManagedPrefixList (Prelude.Maybe PrefixListState)
+managedPrefixList_state = Lens.lens (\ManagedPrefixList' {state} -> state) (\s@ManagedPrefixList' {} a -> s {state = a} :: ManagedPrefixList)
+
+-- | The state message.
+managedPrefixList_stateMessage :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Text)
+managedPrefixList_stateMessage = Lens.lens (\ManagedPrefixList' {stateMessage} -> stateMessage) (\s@ManagedPrefixList' {} a -> s {stateMessage = a} :: ManagedPrefixList)
+
+-- | The tags for the prefix list.
+managedPrefixList_tags :: Lens.Lens' ManagedPrefixList (Prelude.Maybe [Tag])
+managedPrefixList_tags = Lens.lens (\ManagedPrefixList' {tags} -> tags) (\s@ManagedPrefixList' {} a -> s {tags = a} :: ManagedPrefixList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the prefix list.
+managedPrefixList_version :: Lens.Lens' ManagedPrefixList (Prelude.Maybe Prelude.Integer)
+managedPrefixList_version = Lens.lens (\ManagedPrefixList' {version} -> version) (\s@ManagedPrefixList' {} a -> s {version = a} :: ManagedPrefixList)
+
+instance Data.FromXML ManagedPrefixList where
+  parseXML x =
+    ManagedPrefixList'
+      Prelude.<$> (x Data..@? "addressFamily")
+      Prelude.<*> (x Data..@? "maxEntries")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "prefixListArn")
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "prefixListName")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "stateMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "version")
+
+instance Prelude.Hashable ManagedPrefixList where
+  hashWithSalt _salt ManagedPrefixList' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressFamily
+      `Prelude.hashWithSalt` maxEntries
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` prefixListArn
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` prefixListName
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateMessage
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` version
+
+instance Prelude.NFData ManagedPrefixList where
+  rnf ManagedPrefixList' {..} =
+    Prelude.rnf addressFamily
+      `Prelude.seq` Prelude.rnf maxEntries
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf prefixListArn
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf prefixListName
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf version
diff --git a/gen/Amazonka/EC2/Types/MarketType.hs b/gen/Amazonka/EC2/Types/MarketType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MarketType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MarketType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MarketType
+  ( MarketType
+      ( ..,
+        MarketType_Spot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype MarketType = MarketType'
+  { fromMarketType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MarketType_Spot :: MarketType
+pattern MarketType_Spot = MarketType' "spot"
+
+{-# COMPLETE
+  MarketType_Spot,
+  MarketType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/MembershipType.hs b/gen/Amazonka/EC2/Types/MembershipType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MembershipType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MembershipType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MembershipType
+  ( MembershipType
+      ( ..,
+        MembershipType_Igmp,
+        MembershipType_Static
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype MembershipType = MembershipType'
+  { fromMembershipType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MembershipType_Igmp :: MembershipType
+pattern MembershipType_Igmp = MembershipType' "igmp"
+
+pattern MembershipType_Static :: MembershipType
+pattern MembershipType_Static = MembershipType' "static"
+
+{-# COMPLETE
+  MembershipType_Igmp,
+  MembershipType_Static,
+  MembershipType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/MemoryGiBPerVCpu.hs b/gen/Amazonka/EC2/Types/MemoryGiBPerVCpu.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MemoryGiBPerVCpu.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MemoryGiBPerVCpu
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MemoryGiBPerVCpu where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of memory per vCPU, in GiB.
+--
+-- /See:/ 'newMemoryGiBPerVCpu' smart constructor.
+data MemoryGiBPerVCpu = MemoryGiBPerVCpu'
+  { -- | The maximum amount of memory per vCPU, in GiB. If this parameter is not
+    -- specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The minimum amount of memory per vCPU, in GiB. If this parameter is not
+    -- specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemoryGiBPerVCpu' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'memoryGiBPerVCpu_max' - The maximum amount of memory per vCPU, in GiB. If this parameter is not
+-- specified, there is no maximum limit.
+--
+-- 'min', 'memoryGiBPerVCpu_min' - The minimum amount of memory per vCPU, in GiB. If this parameter is not
+-- specified, there is no minimum limit.
+newMemoryGiBPerVCpu ::
+  MemoryGiBPerVCpu
+newMemoryGiBPerVCpu =
+  MemoryGiBPerVCpu'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of memory per vCPU, in GiB. If this parameter is not
+-- specified, there is no maximum limit.
+memoryGiBPerVCpu_max :: Lens.Lens' MemoryGiBPerVCpu (Prelude.Maybe Prelude.Double)
+memoryGiBPerVCpu_max = Lens.lens (\MemoryGiBPerVCpu' {max} -> max) (\s@MemoryGiBPerVCpu' {} a -> s {max = a} :: MemoryGiBPerVCpu)
+
+-- | The minimum amount of memory per vCPU, in GiB. If this parameter is not
+-- specified, there is no minimum limit.
+memoryGiBPerVCpu_min :: Lens.Lens' MemoryGiBPerVCpu (Prelude.Maybe Prelude.Double)
+memoryGiBPerVCpu_min = Lens.lens (\MemoryGiBPerVCpu' {min} -> min) (\s@MemoryGiBPerVCpu' {} a -> s {min = a} :: MemoryGiBPerVCpu)
+
+instance Data.FromXML MemoryGiBPerVCpu where
+  parseXML x =
+    MemoryGiBPerVCpu'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable MemoryGiBPerVCpu where
+  hashWithSalt _salt MemoryGiBPerVCpu' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData MemoryGiBPerVCpu where
+  rnf MemoryGiBPerVCpu' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery MemoryGiBPerVCpu where
+  toQuery MemoryGiBPerVCpu' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/MemoryGiBPerVCpuRequest.hs b/gen/Amazonka/EC2/Types/MemoryGiBPerVCpuRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MemoryGiBPerVCpuRequest.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MemoryGiBPerVCpuRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MemoryGiBPerVCpuRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of memory per vCPU, in GiB.
+--
+-- /See:/ 'newMemoryGiBPerVCpuRequest' smart constructor.
+data MemoryGiBPerVCpuRequest = MemoryGiBPerVCpuRequest'
+  { -- | The maximum amount of memory per vCPU, in GiB. To specify no maximum
+    -- limit, omit this parameter.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The minimum amount of memory per vCPU, in GiB. To specify no minimum
+    -- limit, omit this parameter.
+    min :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemoryGiBPerVCpuRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'memoryGiBPerVCpuRequest_max' - The maximum amount of memory per vCPU, in GiB. To specify no maximum
+-- limit, omit this parameter.
+--
+-- 'min', 'memoryGiBPerVCpuRequest_min' - The minimum amount of memory per vCPU, in GiB. To specify no minimum
+-- limit, omit this parameter.
+newMemoryGiBPerVCpuRequest ::
+  MemoryGiBPerVCpuRequest
+newMemoryGiBPerVCpuRequest =
+  MemoryGiBPerVCpuRequest'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of memory per vCPU, in GiB. To specify no maximum
+-- limit, omit this parameter.
+memoryGiBPerVCpuRequest_max :: Lens.Lens' MemoryGiBPerVCpuRequest (Prelude.Maybe Prelude.Double)
+memoryGiBPerVCpuRequest_max = Lens.lens (\MemoryGiBPerVCpuRequest' {max} -> max) (\s@MemoryGiBPerVCpuRequest' {} a -> s {max = a} :: MemoryGiBPerVCpuRequest)
+
+-- | The minimum amount of memory per vCPU, in GiB. To specify no minimum
+-- limit, omit this parameter.
+memoryGiBPerVCpuRequest_min :: Lens.Lens' MemoryGiBPerVCpuRequest (Prelude.Maybe Prelude.Double)
+memoryGiBPerVCpuRequest_min = Lens.lens (\MemoryGiBPerVCpuRequest' {min} -> min) (\s@MemoryGiBPerVCpuRequest' {} a -> s {min = a} :: MemoryGiBPerVCpuRequest)
+
+instance Prelude.Hashable MemoryGiBPerVCpuRequest where
+  hashWithSalt _salt MemoryGiBPerVCpuRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData MemoryGiBPerVCpuRequest where
+  rnf MemoryGiBPerVCpuRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery MemoryGiBPerVCpuRequest where
+  toQuery MemoryGiBPerVCpuRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/MemoryInfo.hs b/gen/Amazonka/EC2/Types/MemoryInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MemoryInfo.hs
@@ -0,0 +1,64 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MemoryInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MemoryInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the memory for the instance type.
+--
+-- /See:/ 'newMemoryInfo' smart constructor.
+data MemoryInfo = MemoryInfo'
+  { -- | The size of the memory, in MiB.
+    sizeInMiB :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemoryInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sizeInMiB', 'memoryInfo_sizeInMiB' - The size of the memory, in MiB.
+newMemoryInfo ::
+  MemoryInfo
+newMemoryInfo =
+  MemoryInfo' {sizeInMiB = Prelude.Nothing}
+
+-- | The size of the memory, in MiB.
+memoryInfo_sizeInMiB :: Lens.Lens' MemoryInfo (Prelude.Maybe Prelude.Integer)
+memoryInfo_sizeInMiB = Lens.lens (\MemoryInfo' {sizeInMiB} -> sizeInMiB) (\s@MemoryInfo' {} a -> s {sizeInMiB = a} :: MemoryInfo)
+
+instance Data.FromXML MemoryInfo where
+  parseXML x =
+    MemoryInfo' Prelude.<$> (x Data..@? "sizeInMiB")
+
+instance Prelude.Hashable MemoryInfo where
+  hashWithSalt _salt MemoryInfo' {..} =
+    _salt `Prelude.hashWithSalt` sizeInMiB
+
+instance Prelude.NFData MemoryInfo where
+  rnf MemoryInfo' {..} = Prelude.rnf sizeInMiB
diff --git a/gen/Amazonka/EC2/Types/MemoryMiB.hs b/gen/Amazonka/EC2/Types/MemoryMiB.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MemoryMiB.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MemoryMiB
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MemoryMiB where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of memory, in MiB.
+--
+-- /See:/ 'newMemoryMiB' smart constructor.
+data MemoryMiB = MemoryMiB'
+  { -- | The maximum amount of memory, in MiB. If this parameter is not
+    -- specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum amount of memory, in MiB. If this parameter is not
+    -- specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemoryMiB' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'memoryMiB_max' - The maximum amount of memory, in MiB. If this parameter is not
+-- specified, there is no maximum limit.
+--
+-- 'min', 'memoryMiB_min' - The minimum amount of memory, in MiB. If this parameter is not
+-- specified, there is no minimum limit.
+newMemoryMiB ::
+  MemoryMiB
+newMemoryMiB =
+  MemoryMiB'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of memory, in MiB. If this parameter is not
+-- specified, there is no maximum limit.
+memoryMiB_max :: Lens.Lens' MemoryMiB (Prelude.Maybe Prelude.Int)
+memoryMiB_max = Lens.lens (\MemoryMiB' {max} -> max) (\s@MemoryMiB' {} a -> s {max = a} :: MemoryMiB)
+
+-- | The minimum amount of memory, in MiB. If this parameter is not
+-- specified, there is no minimum limit.
+memoryMiB_min :: Lens.Lens' MemoryMiB (Prelude.Maybe Prelude.Int)
+memoryMiB_min = Lens.lens (\MemoryMiB' {min} -> min) (\s@MemoryMiB' {} a -> s {min = a} :: MemoryMiB)
+
+instance Data.FromXML MemoryMiB where
+  parseXML x =
+    MemoryMiB'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable MemoryMiB where
+  hashWithSalt _salt MemoryMiB' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData MemoryMiB where
+  rnf MemoryMiB' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery MemoryMiB where
+  toQuery MemoryMiB' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/MemoryMiBRequest.hs b/gen/Amazonka/EC2/Types/MemoryMiBRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MemoryMiBRequest.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MemoryMiBRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MemoryMiBRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of memory, in MiB.
+--
+-- /See:/ 'newMemoryMiBRequest' smart constructor.
+data MemoryMiBRequest = MemoryMiBRequest'
+  { -- | The maximum amount of memory, in MiB. To specify no maximum limit, omit
+    -- this parameter.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum amount of memory, in MiB. To specify no minimum limit,
+    -- specify @0@.
+    min :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MemoryMiBRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'memoryMiBRequest_max' - The maximum amount of memory, in MiB. To specify no maximum limit, omit
+-- this parameter.
+--
+-- 'min', 'memoryMiBRequest_min' - The minimum amount of memory, in MiB. To specify no minimum limit,
+-- specify @0@.
+newMemoryMiBRequest ::
+  -- | 'min'
+  Prelude.Int ->
+  MemoryMiBRequest
+newMemoryMiBRequest pMin_ =
+  MemoryMiBRequest'
+    { max = Prelude.Nothing,
+      min = pMin_
+    }
+
+-- | The maximum amount of memory, in MiB. To specify no maximum limit, omit
+-- this parameter.
+memoryMiBRequest_max :: Lens.Lens' MemoryMiBRequest (Prelude.Maybe Prelude.Int)
+memoryMiBRequest_max = Lens.lens (\MemoryMiBRequest' {max} -> max) (\s@MemoryMiBRequest' {} a -> s {max = a} :: MemoryMiBRequest)
+
+-- | The minimum amount of memory, in MiB. To specify no minimum limit,
+-- specify @0@.
+memoryMiBRequest_min :: Lens.Lens' MemoryMiBRequest Prelude.Int
+memoryMiBRequest_min = Lens.lens (\MemoryMiBRequest' {min} -> min) (\s@MemoryMiBRequest' {} a -> s {min = a} :: MemoryMiBRequest)
+
+instance Prelude.Hashable MemoryMiBRequest where
+  hashWithSalt _salt MemoryMiBRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData MemoryMiBRequest where
+  rnf MemoryMiBRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery MemoryMiBRequest where
+  toQuery MemoryMiBRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/MetricPoint.hs b/gen/Amazonka/EC2/Types/MetricPoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MetricPoint.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MetricPoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MetricPoint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Indicates whether the network was healthy or unhealthy at a particular
+-- point. The value is aggregated from the @startDate@ to the @endDate@.
+-- Currently only @five_minutes@ is supported.
+--
+-- /See:/ 'newMetricPoint' smart constructor.
+data MetricPoint = MetricPoint'
+  { -- | The end date for the metric point. The ending time must be formatted as
+    -- @yyyy-mm-ddThh:mm:ss@. For example, @2022-06-12T12:00:00.000Z@.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | The start date for the metric point. The starting date for the metric
+    -- point. The starting time must be formatted as @yyyy-mm-ddThh:mm:ss@. For
+    -- example, @2022-06-10T12:00:00.000Z@.
+    startDate :: Prelude.Maybe Data.ISO8601,
+    -- | The status of the metric point.
+    status :: Prelude.Maybe Prelude.Text,
+    value :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MetricPoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endDate', 'metricPoint_endDate' - The end date for the metric point. The ending time must be formatted as
+-- @yyyy-mm-ddThh:mm:ss@. For example, @2022-06-12T12:00:00.000Z@.
+--
+-- 'startDate', 'metricPoint_startDate' - The start date for the metric point. The starting date for the metric
+-- point. The starting time must be formatted as @yyyy-mm-ddThh:mm:ss@. For
+-- example, @2022-06-10T12:00:00.000Z@.
+--
+-- 'status', 'metricPoint_status' - The status of the metric point.
+--
+-- 'value', 'metricPoint_value' - Undocumented member.
+newMetricPoint ::
+  MetricPoint
+newMetricPoint =
+  MetricPoint'
+    { endDate = Prelude.Nothing,
+      startDate = Prelude.Nothing,
+      status = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The end date for the metric point. The ending time must be formatted as
+-- @yyyy-mm-ddThh:mm:ss@. For example, @2022-06-12T12:00:00.000Z@.
+metricPoint_endDate :: Lens.Lens' MetricPoint (Prelude.Maybe Prelude.UTCTime)
+metricPoint_endDate = Lens.lens (\MetricPoint' {endDate} -> endDate) (\s@MetricPoint' {} a -> s {endDate = a} :: MetricPoint) Prelude.. Lens.mapping Data._Time
+
+-- | The start date for the metric point. The starting date for the metric
+-- point. The starting time must be formatted as @yyyy-mm-ddThh:mm:ss@. For
+-- example, @2022-06-10T12:00:00.000Z@.
+metricPoint_startDate :: Lens.Lens' MetricPoint (Prelude.Maybe Prelude.UTCTime)
+metricPoint_startDate = Lens.lens (\MetricPoint' {startDate} -> startDate) (\s@MetricPoint' {} a -> s {startDate = a} :: MetricPoint) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the metric point.
+metricPoint_status :: Lens.Lens' MetricPoint (Prelude.Maybe Prelude.Text)
+metricPoint_status = Lens.lens (\MetricPoint' {status} -> status) (\s@MetricPoint' {} a -> s {status = a} :: MetricPoint)
+
+-- | Undocumented member.
+metricPoint_value :: Lens.Lens' MetricPoint (Prelude.Maybe Prelude.Double)
+metricPoint_value = Lens.lens (\MetricPoint' {value} -> value) (\s@MetricPoint' {} a -> s {value = a} :: MetricPoint)
+
+instance Data.FromXML MetricPoint where
+  parseXML x =
+    MetricPoint'
+      Prelude.<$> (x Data..@? "endDate")
+      Prelude.<*> (x Data..@? "startDate")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "value")
+
+instance Prelude.Hashable MetricPoint where
+  hashWithSalt _salt MetricPoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` endDate
+      `Prelude.hashWithSalt` startDate
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData MetricPoint where
+  rnf MetricPoint' {..} =
+    Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/MetricType.hs b/gen/Amazonka/EC2/Types/MetricType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MetricType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MetricType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MetricType
+  ( MetricType
+      ( ..,
+        MetricType_Aggregate_latency
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype MetricType = MetricType'
+  { fromMetricType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MetricType_Aggregate_latency :: MetricType
+pattern MetricType_Aggregate_latency = MetricType' "aggregate-latency"
+
+{-# COMPLETE
+  MetricType_Aggregate_latency,
+  MetricType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ModifyAvailabilityZoneOptInStatus.hs b/gen/Amazonka/EC2/Types/ModifyAvailabilityZoneOptInStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyAvailabilityZoneOptInStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyAvailabilityZoneOptInStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyAvailabilityZoneOptInStatus
+  ( ModifyAvailabilityZoneOptInStatus
+      ( ..,
+        ModifyAvailabilityZoneOptInStatus_Not_opted_in,
+        ModifyAvailabilityZoneOptInStatus_Opted_in
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ModifyAvailabilityZoneOptInStatus = ModifyAvailabilityZoneOptInStatus'
+  { fromModifyAvailabilityZoneOptInStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ModifyAvailabilityZoneOptInStatus_Not_opted_in :: ModifyAvailabilityZoneOptInStatus
+pattern ModifyAvailabilityZoneOptInStatus_Not_opted_in = ModifyAvailabilityZoneOptInStatus' "not-opted-in"
+
+pattern ModifyAvailabilityZoneOptInStatus_Opted_in :: ModifyAvailabilityZoneOptInStatus
+pattern ModifyAvailabilityZoneOptInStatus_Opted_in = ModifyAvailabilityZoneOptInStatus' "opted-in"
+
+{-# COMPLETE
+  ModifyAvailabilityZoneOptInStatus_Not_opted_in,
+  ModifyAvailabilityZoneOptInStatus_Opted_in,
+  ModifyAvailabilityZoneOptInStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ModifyTransitGatewayOptions.hs b/gen/Amazonka/EC2/Types/ModifyTransitGatewayOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyTransitGatewayOptions.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyTransitGatewayOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyTransitGatewayOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+import Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+import Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.VpnEcmpSupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The transit gateway options.
+--
+-- /See:/ 'newModifyTransitGatewayOptions' smart constructor.
+data ModifyTransitGatewayOptions = ModifyTransitGatewayOptions'
+  { -- | Adds IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a size
+    -- \/24 CIDR block or larger for IPv4, or a size \/64 CIDR block or larger
+    -- for IPv6.
+    addTransitGatewayCidrBlocks :: Prelude.Maybe [Prelude.Text],
+    -- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+    -- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+    -- 4294967294 for 32-bit ASNs.
+    --
+    -- The modify ASN operation is not allowed on a transit gateway with active
+    -- BGP sessions. You must first delete all transit gateway attachments that
+    -- have BGP configured prior to modifying the ASN on the transit gateway.
+    amazonSideAsn :: Prelude.Maybe Prelude.Integer,
+    -- | The ID of the default association route table.
+    associationDefaultRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | Enable or disable automatic acceptance of attachment requests.
+    autoAcceptSharedAttachments :: Prelude.Maybe AutoAcceptSharedAttachmentsValue,
+    -- | Enable or disable automatic association with the default association
+    -- route table.
+    defaultRouteTableAssociation :: Prelude.Maybe DefaultRouteTableAssociationValue,
+    -- | Enable or disable automatic propagation of routes to the default
+    -- propagation route table.
+    defaultRouteTablePropagation :: Prelude.Maybe DefaultRouteTablePropagationValue,
+    -- | Enable or disable DNS support.
+    dnsSupport :: Prelude.Maybe DnsSupportValue,
+    -- | The ID of the default propagation route table.
+    propagationDefaultRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | Removes CIDR blocks for the transit gateway.
+    removeTransitGatewayCidrBlocks :: Prelude.Maybe [Prelude.Text],
+    -- | Enable or disable Equal Cost Multipath Protocol support.
+    vpnEcmpSupport :: Prelude.Maybe VpnEcmpSupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addTransitGatewayCidrBlocks', 'modifyTransitGatewayOptions_addTransitGatewayCidrBlocks' - Adds IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a size
+-- \/24 CIDR block or larger for IPv4, or a size \/64 CIDR block or larger
+-- for IPv6.
+--
+-- 'amazonSideAsn', 'modifyTransitGatewayOptions_amazonSideAsn' - A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+-- 4294967294 for 32-bit ASNs.
+--
+-- The modify ASN operation is not allowed on a transit gateway with active
+-- BGP sessions. You must first delete all transit gateway attachments that
+-- have BGP configured prior to modifying the ASN on the transit gateway.
+--
+-- 'associationDefaultRouteTableId', 'modifyTransitGatewayOptions_associationDefaultRouteTableId' - The ID of the default association route table.
+--
+-- 'autoAcceptSharedAttachments', 'modifyTransitGatewayOptions_autoAcceptSharedAttachments' - Enable or disable automatic acceptance of attachment requests.
+--
+-- 'defaultRouteTableAssociation', 'modifyTransitGatewayOptions_defaultRouteTableAssociation' - Enable or disable automatic association with the default association
+-- route table.
+--
+-- 'defaultRouteTablePropagation', 'modifyTransitGatewayOptions_defaultRouteTablePropagation' - Enable or disable automatic propagation of routes to the default
+-- propagation route table.
+--
+-- 'dnsSupport', 'modifyTransitGatewayOptions_dnsSupport' - Enable or disable DNS support.
+--
+-- 'propagationDefaultRouteTableId', 'modifyTransitGatewayOptions_propagationDefaultRouteTableId' - The ID of the default propagation route table.
+--
+-- 'removeTransitGatewayCidrBlocks', 'modifyTransitGatewayOptions_removeTransitGatewayCidrBlocks' - Removes CIDR blocks for the transit gateway.
+--
+-- 'vpnEcmpSupport', 'modifyTransitGatewayOptions_vpnEcmpSupport' - Enable or disable Equal Cost Multipath Protocol support.
+newModifyTransitGatewayOptions ::
+  ModifyTransitGatewayOptions
+newModifyTransitGatewayOptions =
+  ModifyTransitGatewayOptions'
+    { addTransitGatewayCidrBlocks =
+        Prelude.Nothing,
+      amazonSideAsn = Prelude.Nothing,
+      associationDefaultRouteTableId =
+        Prelude.Nothing,
+      autoAcceptSharedAttachments = Prelude.Nothing,
+      defaultRouteTableAssociation = Prelude.Nothing,
+      defaultRouteTablePropagation = Prelude.Nothing,
+      dnsSupport = Prelude.Nothing,
+      propagationDefaultRouteTableId =
+        Prelude.Nothing,
+      removeTransitGatewayCidrBlocks =
+        Prelude.Nothing,
+      vpnEcmpSupport = Prelude.Nothing
+    }
+
+-- | Adds IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a size
+-- \/24 CIDR block or larger for IPv4, or a size \/64 CIDR block or larger
+-- for IPv6.
+modifyTransitGatewayOptions_addTransitGatewayCidrBlocks :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe [Prelude.Text])
+modifyTransitGatewayOptions_addTransitGatewayCidrBlocks = Lens.lens (\ModifyTransitGatewayOptions' {addTransitGatewayCidrBlocks} -> addTransitGatewayCidrBlocks) (\s@ModifyTransitGatewayOptions' {} a -> s {addTransitGatewayCidrBlocks = a} :: ModifyTransitGatewayOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+-- 4294967294 for 32-bit ASNs.
+--
+-- The modify ASN operation is not allowed on a transit gateway with active
+-- BGP sessions. You must first delete all transit gateway attachments that
+-- have BGP configured prior to modifying the ASN on the transit gateway.
+modifyTransitGatewayOptions_amazonSideAsn :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe Prelude.Integer)
+modifyTransitGatewayOptions_amazonSideAsn = Lens.lens (\ModifyTransitGatewayOptions' {amazonSideAsn} -> amazonSideAsn) (\s@ModifyTransitGatewayOptions' {} a -> s {amazonSideAsn = a} :: ModifyTransitGatewayOptions)
+
+-- | The ID of the default association route table.
+modifyTransitGatewayOptions_associationDefaultRouteTableId :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe Prelude.Text)
+modifyTransitGatewayOptions_associationDefaultRouteTableId = Lens.lens (\ModifyTransitGatewayOptions' {associationDefaultRouteTableId} -> associationDefaultRouteTableId) (\s@ModifyTransitGatewayOptions' {} a -> s {associationDefaultRouteTableId = a} :: ModifyTransitGatewayOptions)
+
+-- | Enable or disable automatic acceptance of attachment requests.
+modifyTransitGatewayOptions_autoAcceptSharedAttachments :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe AutoAcceptSharedAttachmentsValue)
+modifyTransitGatewayOptions_autoAcceptSharedAttachments = Lens.lens (\ModifyTransitGatewayOptions' {autoAcceptSharedAttachments} -> autoAcceptSharedAttachments) (\s@ModifyTransitGatewayOptions' {} a -> s {autoAcceptSharedAttachments = a} :: ModifyTransitGatewayOptions)
+
+-- | Enable or disable automatic association with the default association
+-- route table.
+modifyTransitGatewayOptions_defaultRouteTableAssociation :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe DefaultRouteTableAssociationValue)
+modifyTransitGatewayOptions_defaultRouteTableAssociation = Lens.lens (\ModifyTransitGatewayOptions' {defaultRouteTableAssociation} -> defaultRouteTableAssociation) (\s@ModifyTransitGatewayOptions' {} a -> s {defaultRouteTableAssociation = a} :: ModifyTransitGatewayOptions)
+
+-- | Enable or disable automatic propagation of routes to the default
+-- propagation route table.
+modifyTransitGatewayOptions_defaultRouteTablePropagation :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe DefaultRouteTablePropagationValue)
+modifyTransitGatewayOptions_defaultRouteTablePropagation = Lens.lens (\ModifyTransitGatewayOptions' {defaultRouteTablePropagation} -> defaultRouteTablePropagation) (\s@ModifyTransitGatewayOptions' {} a -> s {defaultRouteTablePropagation = a} :: ModifyTransitGatewayOptions)
+
+-- | Enable or disable DNS support.
+modifyTransitGatewayOptions_dnsSupport :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe DnsSupportValue)
+modifyTransitGatewayOptions_dnsSupport = Lens.lens (\ModifyTransitGatewayOptions' {dnsSupport} -> dnsSupport) (\s@ModifyTransitGatewayOptions' {} a -> s {dnsSupport = a} :: ModifyTransitGatewayOptions)
+
+-- | The ID of the default propagation route table.
+modifyTransitGatewayOptions_propagationDefaultRouteTableId :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe Prelude.Text)
+modifyTransitGatewayOptions_propagationDefaultRouteTableId = Lens.lens (\ModifyTransitGatewayOptions' {propagationDefaultRouteTableId} -> propagationDefaultRouteTableId) (\s@ModifyTransitGatewayOptions' {} a -> s {propagationDefaultRouteTableId = a} :: ModifyTransitGatewayOptions)
+
+-- | Removes CIDR blocks for the transit gateway.
+modifyTransitGatewayOptions_removeTransitGatewayCidrBlocks :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe [Prelude.Text])
+modifyTransitGatewayOptions_removeTransitGatewayCidrBlocks = Lens.lens (\ModifyTransitGatewayOptions' {removeTransitGatewayCidrBlocks} -> removeTransitGatewayCidrBlocks) (\s@ModifyTransitGatewayOptions' {} a -> s {removeTransitGatewayCidrBlocks = a} :: ModifyTransitGatewayOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | Enable or disable Equal Cost Multipath Protocol support.
+modifyTransitGatewayOptions_vpnEcmpSupport :: Lens.Lens' ModifyTransitGatewayOptions (Prelude.Maybe VpnEcmpSupportValue)
+modifyTransitGatewayOptions_vpnEcmpSupport = Lens.lens (\ModifyTransitGatewayOptions' {vpnEcmpSupport} -> vpnEcmpSupport) (\s@ModifyTransitGatewayOptions' {} a -> s {vpnEcmpSupport = a} :: ModifyTransitGatewayOptions)
+
+instance Prelude.Hashable ModifyTransitGatewayOptions where
+  hashWithSalt _salt ModifyTransitGatewayOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` addTransitGatewayCidrBlocks
+      `Prelude.hashWithSalt` amazonSideAsn
+      `Prelude.hashWithSalt` associationDefaultRouteTableId
+      `Prelude.hashWithSalt` autoAcceptSharedAttachments
+      `Prelude.hashWithSalt` defaultRouteTableAssociation
+      `Prelude.hashWithSalt` defaultRouteTablePropagation
+      `Prelude.hashWithSalt` dnsSupport
+      `Prelude.hashWithSalt` propagationDefaultRouteTableId
+      `Prelude.hashWithSalt` removeTransitGatewayCidrBlocks
+      `Prelude.hashWithSalt` vpnEcmpSupport
+
+instance Prelude.NFData ModifyTransitGatewayOptions where
+  rnf ModifyTransitGatewayOptions' {..} =
+    Prelude.rnf addTransitGatewayCidrBlocks
+      `Prelude.seq` Prelude.rnf amazonSideAsn
+      `Prelude.seq` Prelude.rnf associationDefaultRouteTableId
+      `Prelude.seq` Prelude.rnf autoAcceptSharedAttachments
+      `Prelude.seq` Prelude.rnf defaultRouteTableAssociation
+      `Prelude.seq` Prelude.rnf defaultRouteTablePropagation
+      `Prelude.seq` Prelude.rnf dnsSupport
+      `Prelude.seq` Prelude.rnf propagationDefaultRouteTableId
+      `Prelude.seq` Prelude.rnf removeTransitGatewayCidrBlocks
+      `Prelude.seq` Prelude.rnf vpnEcmpSupport
+
+instance Data.ToQuery ModifyTransitGatewayOptions where
+  toQuery ModifyTransitGatewayOptions' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "AddTransitGatewayCidrBlocks"
+              Prelude.<$> addTransitGatewayCidrBlocks
+          ),
+        "AmazonSideAsn" Data.=: amazonSideAsn,
+        "AssociationDefaultRouteTableId"
+          Data.=: associationDefaultRouteTableId,
+        "AutoAcceptSharedAttachments"
+          Data.=: autoAcceptSharedAttachments,
+        "DefaultRouteTableAssociation"
+          Data.=: defaultRouteTableAssociation,
+        "DefaultRouteTablePropagation"
+          Data.=: defaultRouteTablePropagation,
+        "DnsSupport" Data.=: dnsSupport,
+        "PropagationDefaultRouteTableId"
+          Data.=: propagationDefaultRouteTableId,
+        Data.toQuery
+          ( Data.toQueryList "RemoveTransitGatewayCidrBlocks"
+              Prelude.<$> removeTransitGatewayCidrBlocks
+          ),
+        "VpnEcmpSupport" Data.=: vpnEcmpSupport
+      ]
diff --git a/gen/Amazonka/EC2/Types/ModifyTransitGatewayVpcAttachmentRequestOptions.hs b/gen/Amazonka/EC2/Types/ModifyTransitGatewayVpcAttachmentRequestOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyTransitGatewayVpcAttachmentRequestOptions.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyTransitGatewayVpcAttachmentRequestOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyTransitGatewayVpcAttachmentRequestOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ApplianceModeSupportValue
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.Ipv6SupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for a VPC attachment.
+--
+-- /See:/ 'newModifyTransitGatewayVpcAttachmentRequestOptions' smart constructor.
+data ModifyTransitGatewayVpcAttachmentRequestOptions = ModifyTransitGatewayVpcAttachmentRequestOptions'
+  { -- | Enable or disable support for appliance mode. If enabled, a traffic flow
+    -- between a source and destination uses the same Availability Zone for the
+    -- VPC attachment for the lifetime of that flow. The default is @disable@.
+    applianceModeSupport :: Prelude.Maybe ApplianceModeSupportValue,
+    -- | Enable or disable DNS support. The default is @enable@.
+    dnsSupport :: Prelude.Maybe DnsSupportValue,
+    -- | Enable or disable IPv6 support. The default is @enable@.
+    ipv6Support :: Prelude.Maybe Ipv6SupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyTransitGatewayVpcAttachmentRequestOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applianceModeSupport', 'modifyTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport' - Enable or disable support for appliance mode. If enabled, a traffic flow
+-- between a source and destination uses the same Availability Zone for the
+-- VPC attachment for the lifetime of that flow. The default is @disable@.
+--
+-- 'dnsSupport', 'modifyTransitGatewayVpcAttachmentRequestOptions_dnsSupport' - Enable or disable DNS support. The default is @enable@.
+--
+-- 'ipv6Support', 'modifyTransitGatewayVpcAttachmentRequestOptions_ipv6Support' - Enable or disable IPv6 support. The default is @enable@.
+newModifyTransitGatewayVpcAttachmentRequestOptions ::
+  ModifyTransitGatewayVpcAttachmentRequestOptions
+newModifyTransitGatewayVpcAttachmentRequestOptions =
+  ModifyTransitGatewayVpcAttachmentRequestOptions'
+    { applianceModeSupport =
+        Prelude.Nothing,
+      dnsSupport =
+        Prelude.Nothing,
+      ipv6Support =
+        Prelude.Nothing
+    }
+
+-- | Enable or disable support for appliance mode. If enabled, a traffic flow
+-- between a source and destination uses the same Availability Zone for the
+-- VPC attachment for the lifetime of that flow. The default is @disable@.
+modifyTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport :: Lens.Lens' ModifyTransitGatewayVpcAttachmentRequestOptions (Prelude.Maybe ApplianceModeSupportValue)
+modifyTransitGatewayVpcAttachmentRequestOptions_applianceModeSupport = Lens.lens (\ModifyTransitGatewayVpcAttachmentRequestOptions' {applianceModeSupport} -> applianceModeSupport) (\s@ModifyTransitGatewayVpcAttachmentRequestOptions' {} a -> s {applianceModeSupport = a} :: ModifyTransitGatewayVpcAttachmentRequestOptions)
+
+-- | Enable or disable DNS support. The default is @enable@.
+modifyTransitGatewayVpcAttachmentRequestOptions_dnsSupport :: Lens.Lens' ModifyTransitGatewayVpcAttachmentRequestOptions (Prelude.Maybe DnsSupportValue)
+modifyTransitGatewayVpcAttachmentRequestOptions_dnsSupport = Lens.lens (\ModifyTransitGatewayVpcAttachmentRequestOptions' {dnsSupport} -> dnsSupport) (\s@ModifyTransitGatewayVpcAttachmentRequestOptions' {} a -> s {dnsSupport = a} :: ModifyTransitGatewayVpcAttachmentRequestOptions)
+
+-- | Enable or disable IPv6 support. The default is @enable@.
+modifyTransitGatewayVpcAttachmentRequestOptions_ipv6Support :: Lens.Lens' ModifyTransitGatewayVpcAttachmentRequestOptions (Prelude.Maybe Ipv6SupportValue)
+modifyTransitGatewayVpcAttachmentRequestOptions_ipv6Support = Lens.lens (\ModifyTransitGatewayVpcAttachmentRequestOptions' {ipv6Support} -> ipv6Support) (\s@ModifyTransitGatewayVpcAttachmentRequestOptions' {} a -> s {ipv6Support = a} :: ModifyTransitGatewayVpcAttachmentRequestOptions)
+
+instance
+  Prelude.Hashable
+    ModifyTransitGatewayVpcAttachmentRequestOptions
+  where
+  hashWithSalt
+    _salt
+    ModifyTransitGatewayVpcAttachmentRequestOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` applianceModeSupport
+        `Prelude.hashWithSalt` dnsSupport
+        `Prelude.hashWithSalt` ipv6Support
+
+instance
+  Prelude.NFData
+    ModifyTransitGatewayVpcAttachmentRequestOptions
+  where
+  rnf
+    ModifyTransitGatewayVpcAttachmentRequestOptions' {..} =
+      Prelude.rnf applianceModeSupport
+        `Prelude.seq` Prelude.rnf dnsSupport
+        `Prelude.seq` Prelude.rnf ipv6Support
+
+instance
+  Data.ToQuery
+    ModifyTransitGatewayVpcAttachmentRequestOptions
+  where
+  toQuery
+    ModifyTransitGatewayVpcAttachmentRequestOptions' {..} =
+      Prelude.mconcat
+        [ "ApplianceModeSupport" Data.=: applianceModeSupport,
+          "DnsSupport" Data.=: dnsSupport,
+          "Ipv6Support" Data.=: ipv6Support
+        ]
diff --git a/gen/Amazonka/EC2/Types/ModifyVerifiedAccessEndpointEniOptions.hs b/gen/Amazonka/EC2/Types/ModifyVerifiedAccessEndpointEniOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyVerifiedAccessEndpointEniOptions.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyVerifiedAccessEndpointEniOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyVerifiedAccessEndpointEniOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for a network-interface type Verified Access endpoint.
+--
+-- /See:/ 'newModifyVerifiedAccessEndpointEniOptions' smart constructor.
+data ModifyVerifiedAccessEndpointEniOptions = ModifyVerifiedAccessEndpointEniOptions'
+  { -- | The IP port number.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The IP protocol.
+    protocol :: Prelude.Maybe VerifiedAccessEndpointProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessEndpointEniOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'port', 'modifyVerifiedAccessEndpointEniOptions_port' - The IP port number.
+--
+-- 'protocol', 'modifyVerifiedAccessEndpointEniOptions_protocol' - The IP protocol.
+newModifyVerifiedAccessEndpointEniOptions ::
+  ModifyVerifiedAccessEndpointEniOptions
+newModifyVerifiedAccessEndpointEniOptions =
+  ModifyVerifiedAccessEndpointEniOptions'
+    { port =
+        Prelude.Nothing,
+      protocol = Prelude.Nothing
+    }
+
+-- | The IP port number.
+modifyVerifiedAccessEndpointEniOptions_port :: Lens.Lens' ModifyVerifiedAccessEndpointEniOptions (Prelude.Maybe Prelude.Natural)
+modifyVerifiedAccessEndpointEniOptions_port = Lens.lens (\ModifyVerifiedAccessEndpointEniOptions' {port} -> port) (\s@ModifyVerifiedAccessEndpointEniOptions' {} a -> s {port = a} :: ModifyVerifiedAccessEndpointEniOptions)
+
+-- | The IP protocol.
+modifyVerifiedAccessEndpointEniOptions_protocol :: Lens.Lens' ModifyVerifiedAccessEndpointEniOptions (Prelude.Maybe VerifiedAccessEndpointProtocol)
+modifyVerifiedAccessEndpointEniOptions_protocol = Lens.lens (\ModifyVerifiedAccessEndpointEniOptions' {protocol} -> protocol) (\s@ModifyVerifiedAccessEndpointEniOptions' {} a -> s {protocol = a} :: ModifyVerifiedAccessEndpointEniOptions)
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessEndpointEniOptions
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessEndpointEniOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` protocol
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessEndpointEniOptions
+  where
+  rnf ModifyVerifiedAccessEndpointEniOptions' {..} =
+    Prelude.rnf port `Prelude.seq` Prelude.rnf protocol
+
+instance
+  Data.ToQuery
+    ModifyVerifiedAccessEndpointEniOptions
+  where
+  toQuery ModifyVerifiedAccessEndpointEniOptions' {..} =
+    Prelude.mconcat
+      ["Port" Data.=: port, "Protocol" Data.=: protocol]
diff --git a/gen/Amazonka/EC2/Types/ModifyVerifiedAccessEndpointLoadBalancerOptions.hs b/gen/Amazonka/EC2/Types/ModifyVerifiedAccessEndpointLoadBalancerOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyVerifiedAccessEndpointLoadBalancerOptions.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyVerifiedAccessEndpointLoadBalancerOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyVerifiedAccessEndpointLoadBalancerOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load balancer when creating an Amazon Web Services Verified
+-- Access endpoint using the @load-balancer@ type.
+--
+-- /See:/ 'newModifyVerifiedAccessEndpointLoadBalancerOptions' smart constructor.
+data ModifyVerifiedAccessEndpointLoadBalancerOptions = ModifyVerifiedAccessEndpointLoadBalancerOptions'
+  { -- | The IP port number.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The IP protocol.
+    protocol :: Prelude.Maybe VerifiedAccessEndpointProtocol,
+    -- | The IDs of the subnets.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessEndpointLoadBalancerOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'port', 'modifyVerifiedAccessEndpointLoadBalancerOptions_port' - The IP port number.
+--
+-- 'protocol', 'modifyVerifiedAccessEndpointLoadBalancerOptions_protocol' - The IP protocol.
+--
+-- 'subnetIds', 'modifyVerifiedAccessEndpointLoadBalancerOptions_subnetIds' - The IDs of the subnets.
+newModifyVerifiedAccessEndpointLoadBalancerOptions ::
+  ModifyVerifiedAccessEndpointLoadBalancerOptions
+newModifyVerifiedAccessEndpointLoadBalancerOptions =
+  ModifyVerifiedAccessEndpointLoadBalancerOptions'
+    { port =
+        Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      subnetIds =
+        Prelude.Nothing
+    }
+
+-- | The IP port number.
+modifyVerifiedAccessEndpointLoadBalancerOptions_port :: Lens.Lens' ModifyVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe Prelude.Natural)
+modifyVerifiedAccessEndpointLoadBalancerOptions_port = Lens.lens (\ModifyVerifiedAccessEndpointLoadBalancerOptions' {port} -> port) (\s@ModifyVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {port = a} :: ModifyVerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IP protocol.
+modifyVerifiedAccessEndpointLoadBalancerOptions_protocol :: Lens.Lens' ModifyVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe VerifiedAccessEndpointProtocol)
+modifyVerifiedAccessEndpointLoadBalancerOptions_protocol = Lens.lens (\ModifyVerifiedAccessEndpointLoadBalancerOptions' {protocol} -> protocol) (\s@ModifyVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {protocol = a} :: ModifyVerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IDs of the subnets.
+modifyVerifiedAccessEndpointLoadBalancerOptions_subnetIds :: Lens.Lens' ModifyVerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe [Prelude.Text])
+modifyVerifiedAccessEndpointLoadBalancerOptions_subnetIds = Lens.lens (\ModifyVerifiedAccessEndpointLoadBalancerOptions' {subnetIds} -> subnetIds) (\s@ModifyVerifiedAccessEndpointLoadBalancerOptions' {} a -> s {subnetIds = a} :: ModifyVerifiedAccessEndpointLoadBalancerOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessEndpointLoadBalancerOptions
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessEndpointLoadBalancerOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` protocol
+        `Prelude.hashWithSalt` subnetIds
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessEndpointLoadBalancerOptions
+  where
+  rnf
+    ModifyVerifiedAccessEndpointLoadBalancerOptions' {..} =
+      Prelude.rnf port
+        `Prelude.seq` Prelude.rnf protocol
+        `Prelude.seq` Prelude.rnf subnetIds
+
+instance
+  Data.ToQuery
+    ModifyVerifiedAccessEndpointLoadBalancerOptions
+  where
+  toQuery
+    ModifyVerifiedAccessEndpointLoadBalancerOptions' {..} =
+      Prelude.mconcat
+        [ "Port" Data.=: port,
+          "Protocol" Data.=: protocol,
+          Data.toQuery
+            (Data.toQueryList "SubnetId" Prelude.<$> subnetIds)
+        ]
diff --git a/gen/Amazonka/EC2/Types/ModifyVerifiedAccessTrustProviderOidcOptions.hs b/gen/Amazonka/EC2/Types/ModifyVerifiedAccessTrustProviderOidcOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyVerifiedAccessTrustProviderOidcOptions.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyVerifiedAccessTrustProviderOidcOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyVerifiedAccessTrustProviderOidcOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | OpenID Connect options for an @oidc@-type, user-identity based trust
+-- provider.
+--
+-- /See:/ 'newModifyVerifiedAccessTrustProviderOidcOptions' smart constructor.
+data ModifyVerifiedAccessTrustProviderOidcOptions = ModifyVerifiedAccessTrustProviderOidcOptions'
+  { -- | OpenID Connect (OIDC) scopes are used by an application during
+    -- authentication to authorize access to a user\'s details. Each scope
+    -- returns a specific set of user attributes.
+    scope :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVerifiedAccessTrustProviderOidcOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scope', 'modifyVerifiedAccessTrustProviderOidcOptions_scope' - OpenID Connect (OIDC) scopes are used by an application during
+-- authentication to authorize access to a user\'s details. Each scope
+-- returns a specific set of user attributes.
+newModifyVerifiedAccessTrustProviderOidcOptions ::
+  ModifyVerifiedAccessTrustProviderOidcOptions
+newModifyVerifiedAccessTrustProviderOidcOptions =
+  ModifyVerifiedAccessTrustProviderOidcOptions'
+    { scope =
+        Prelude.Nothing
+    }
+
+-- | OpenID Connect (OIDC) scopes are used by an application during
+-- authentication to authorize access to a user\'s details. Each scope
+-- returns a specific set of user attributes.
+modifyVerifiedAccessTrustProviderOidcOptions_scope :: Lens.Lens' ModifyVerifiedAccessTrustProviderOidcOptions (Prelude.Maybe Prelude.Text)
+modifyVerifiedAccessTrustProviderOidcOptions_scope = Lens.lens (\ModifyVerifiedAccessTrustProviderOidcOptions' {scope} -> scope) (\s@ModifyVerifiedAccessTrustProviderOidcOptions' {} a -> s {scope = a} :: ModifyVerifiedAccessTrustProviderOidcOptions)
+
+instance
+  Prelude.Hashable
+    ModifyVerifiedAccessTrustProviderOidcOptions
+  where
+  hashWithSalt
+    _salt
+    ModifyVerifiedAccessTrustProviderOidcOptions' {..} =
+      _salt `Prelude.hashWithSalt` scope
+
+instance
+  Prelude.NFData
+    ModifyVerifiedAccessTrustProviderOidcOptions
+  where
+  rnf ModifyVerifiedAccessTrustProviderOidcOptions' {..} =
+    Prelude.rnf scope
+
+instance
+  Data.ToQuery
+    ModifyVerifiedAccessTrustProviderOidcOptions
+  where
+  toQuery
+    ModifyVerifiedAccessTrustProviderOidcOptions' {..} =
+      Prelude.mconcat ["Scope" Data.=: scope]
diff --git a/gen/Amazonka/EC2/Types/ModifyVpnTunnelOptionsSpecification.hs b/gen/Amazonka/EC2/Types/ModifyVpnTunnelOptionsSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ModifyVpnTunnelOptionsSpecification.hs
@@ -0,0 +1,613 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ModifyVpnTunnelOptionsSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ModifyVpnTunnelOptionsSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IKEVersionsRequestListValue
+import Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Amazon Web Services Site-to-Site VPN tunnel options to modify.
+--
+-- /See:/ 'newModifyVpnTunnelOptionsSpecification' smart constructor.
+data ModifyVpnTunnelOptionsSpecification = ModifyVpnTunnelOptionsSpecification'
+  { -- | The action to take after DPD timeout occurs. Specify @restart@ to
+    -- restart the IKE initiation. Specify @clear@ to end the IKE session.
+    --
+    -- Valid Values: @clear@ | @none@ | @restart@
+    --
+    -- Default: @clear@
+    dPDTimeoutAction :: Prelude.Maybe Prelude.Text,
+    -- | The number of seconds after which a DPD timeout occurs.
+    --
+    -- Constraints: A value greater than or equal to 30.
+    --
+    -- Default: @30@
+    dPDTimeoutSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The IKE versions that are permitted for the VPN tunnel.
+    --
+    -- Valid values: @ikev1@ | @ikev2@
+    iKEVersions :: Prelude.Maybe [IKEVersionsRequestListValue],
+    -- | Options for logging VPN tunnel activity.
+    logOptions :: Prelude.Maybe VpnTunnelLogOptionsSpecification,
+    -- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+    -- tunnel for phase 1 IKE negotiations.
+    --
+    -- Valid values: @2@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@ |
+    -- @21@ | @22@ | @23@ | @24@
+    phase1DHGroupNumbers :: Prelude.Maybe [Phase1DHGroupNumbersRequestListValue],
+    -- | One or more encryption algorithms that are permitted for the VPN tunnel
+    -- for phase 1 IKE negotiations.
+    --
+    -- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+    phase1EncryptionAlgorithms :: Prelude.Maybe [Phase1EncryptionAlgorithmsRequestListValue],
+    -- | One or more integrity algorithms that are permitted for the VPN tunnel
+    -- for phase 1 IKE negotiations.
+    --
+    -- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+    phase1IntegrityAlgorithms :: Prelude.Maybe [Phase1IntegrityAlgorithmsRequestListValue],
+    -- | The lifetime for phase 1 of the IKE negotiation, in seconds.
+    --
+    -- Constraints: A value between 900 and 28,800.
+    --
+    -- Default: @28800@
+    phase1LifetimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+    -- tunnel for phase 2 IKE negotiations.
+    --
+    -- Valid values: @2@ | @5@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@
+    -- | @21@ | @22@ | @23@ | @24@
+    phase2DHGroupNumbers :: Prelude.Maybe [Phase2DHGroupNumbersRequestListValue],
+    -- | One or more encryption algorithms that are permitted for the VPN tunnel
+    -- for phase 2 IKE negotiations.
+    --
+    -- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+    phase2EncryptionAlgorithms :: Prelude.Maybe [Phase2EncryptionAlgorithmsRequestListValue],
+    -- | One or more integrity algorithms that are permitted for the VPN tunnel
+    -- for phase 2 IKE negotiations.
+    --
+    -- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+    phase2IntegrityAlgorithms :: Prelude.Maybe [Phase2IntegrityAlgorithmsRequestListValue],
+    -- | The lifetime for phase 2 of the IKE negotiation, in seconds.
+    --
+    -- Constraints: A value between 900 and 3,600. The value must be less than
+    -- the value for @Phase1LifetimeSeconds@.
+    --
+    -- Default: @3600@
+    phase2LifetimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The pre-shared key (PSK) to establish initial authentication between the
+    -- virtual private gateway and the customer gateway.
+    --
+    -- Constraints: Allowed characters are alphanumeric characters, periods
+    -- (.), and underscores (_). Must be between 8 and 64 characters in length
+    -- and cannot start with zero (0).
+    preSharedKey :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of the rekey window (determined by
+    -- @RekeyMarginTimeSeconds@) during which the rekey time is randomly
+    -- selected.
+    --
+    -- Constraints: A value between 0 and 100.
+    --
+    -- Default: @100@
+    rekeyFuzzPercentage :: Prelude.Maybe Prelude.Int,
+    -- | The margin time, in seconds, before the phase 2 lifetime expires, during
+    -- which the Amazon Web Services side of the VPN connection performs an IKE
+    -- rekey. The exact time of the rekey is randomly selected based on the
+    -- value for @RekeyFuzzPercentage@.
+    --
+    -- Constraints: A value between 60 and half of @Phase2LifetimeSeconds@.
+    --
+    -- Default: @540@
+    rekeyMarginTimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The number of packets in an IKE replay window.
+    --
+    -- Constraints: A value between 64 and 2048.
+    --
+    -- Default: @1024@
+    replayWindowSize :: Prelude.Maybe Prelude.Int,
+    -- | The action to take when the establishing the tunnel for the VPN
+    -- connection. By default, your customer gateway device must initiate the
+    -- IKE negotiation and bring up the tunnel. Specify @start@ for Amazon Web
+    -- Services to initiate the IKE negotiation.
+    --
+    -- Valid Values: @add@ | @start@
+    --
+    -- Default: @add@
+    startupAction :: Prelude.Maybe Prelude.Text,
+    -- | The range of inside IPv4 addresses for the tunnel. Any specified CIDR
+    -- blocks must be unique across all VPN connections that use the same
+    -- virtual private gateway.
+    --
+    -- Constraints: A size \/30 CIDR block from the @169.254.0.0\/16@ range.
+    -- The following CIDR blocks are reserved and cannot be used:
+    --
+    -- -   @169.254.0.0\/30@
+    --
+    -- -   @169.254.1.0\/30@
+    --
+    -- -   @169.254.2.0\/30@
+    --
+    -- -   @169.254.3.0\/30@
+    --
+    -- -   @169.254.4.0\/30@
+    --
+    -- -   @169.254.5.0\/30@
+    --
+    -- -   @169.254.169.252\/30@
+    tunnelInsideCidr :: Prelude.Maybe Prelude.Text,
+    -- | The range of inside IPv6 addresses for the tunnel. Any specified CIDR
+    -- blocks must be unique across all VPN connections that use the same
+    -- transit gateway.
+    --
+    -- Constraints: A size \/126 CIDR block from the local @fd00::\/8@ range.
+    tunnelInsideIpv6Cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ModifyVpnTunnelOptionsSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dPDTimeoutAction', 'modifyVpnTunnelOptionsSpecification_dPDTimeoutAction' - The action to take after DPD timeout occurs. Specify @restart@ to
+-- restart the IKE initiation. Specify @clear@ to end the IKE session.
+--
+-- Valid Values: @clear@ | @none@ | @restart@
+--
+-- Default: @clear@
+--
+-- 'dPDTimeoutSeconds', 'modifyVpnTunnelOptionsSpecification_dPDTimeoutSeconds' - The number of seconds after which a DPD timeout occurs.
+--
+-- Constraints: A value greater than or equal to 30.
+--
+-- Default: @30@
+--
+-- 'iKEVersions', 'modifyVpnTunnelOptionsSpecification_iKEVersions' - The IKE versions that are permitted for the VPN tunnel.
+--
+-- Valid values: @ikev1@ | @ikev2@
+--
+-- 'logOptions', 'modifyVpnTunnelOptionsSpecification_logOptions' - Options for logging VPN tunnel activity.
+--
+-- 'phase1DHGroupNumbers', 'modifyVpnTunnelOptionsSpecification_phase1DHGroupNumbers' - One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 1 IKE negotiations.
+--
+-- Valid values: @2@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@ |
+-- @21@ | @22@ | @23@ | @24@
+--
+-- 'phase1EncryptionAlgorithms', 'modifyVpnTunnelOptionsSpecification_phase1EncryptionAlgorithms' - One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+--
+-- 'phase1IntegrityAlgorithms', 'modifyVpnTunnelOptionsSpecification_phase1IntegrityAlgorithms' - One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+--
+-- 'phase1LifetimeSeconds', 'modifyVpnTunnelOptionsSpecification_phase1LifetimeSeconds' - The lifetime for phase 1 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 28,800.
+--
+-- Default: @28800@
+--
+-- 'phase2DHGroupNumbers', 'modifyVpnTunnelOptionsSpecification_phase2DHGroupNumbers' - One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 2 IKE negotiations.
+--
+-- Valid values: @2@ | @5@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@
+-- | @21@ | @22@ | @23@ | @24@
+--
+-- 'phase2EncryptionAlgorithms', 'modifyVpnTunnelOptionsSpecification_phase2EncryptionAlgorithms' - One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+--
+-- 'phase2IntegrityAlgorithms', 'modifyVpnTunnelOptionsSpecification_phase2IntegrityAlgorithms' - One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+--
+-- 'phase2LifetimeSeconds', 'modifyVpnTunnelOptionsSpecification_phase2LifetimeSeconds' - The lifetime for phase 2 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 3,600. The value must be less than
+-- the value for @Phase1LifetimeSeconds@.
+--
+-- Default: @3600@
+--
+-- 'preSharedKey', 'modifyVpnTunnelOptionsSpecification_preSharedKey' - The pre-shared key (PSK) to establish initial authentication between the
+-- virtual private gateway and the customer gateway.
+--
+-- Constraints: Allowed characters are alphanumeric characters, periods
+-- (.), and underscores (_). Must be between 8 and 64 characters in length
+-- and cannot start with zero (0).
+--
+-- 'rekeyFuzzPercentage', 'modifyVpnTunnelOptionsSpecification_rekeyFuzzPercentage' - The percentage of the rekey window (determined by
+-- @RekeyMarginTimeSeconds@) during which the rekey time is randomly
+-- selected.
+--
+-- Constraints: A value between 0 and 100.
+--
+-- Default: @100@
+--
+-- 'rekeyMarginTimeSeconds', 'modifyVpnTunnelOptionsSpecification_rekeyMarginTimeSeconds' - The margin time, in seconds, before the phase 2 lifetime expires, during
+-- which the Amazon Web Services side of the VPN connection performs an IKE
+-- rekey. The exact time of the rekey is randomly selected based on the
+-- value for @RekeyFuzzPercentage@.
+--
+-- Constraints: A value between 60 and half of @Phase2LifetimeSeconds@.
+--
+-- Default: @540@
+--
+-- 'replayWindowSize', 'modifyVpnTunnelOptionsSpecification_replayWindowSize' - The number of packets in an IKE replay window.
+--
+-- Constraints: A value between 64 and 2048.
+--
+-- Default: @1024@
+--
+-- 'startupAction', 'modifyVpnTunnelOptionsSpecification_startupAction' - The action to take when the establishing the tunnel for the VPN
+-- connection. By default, your customer gateway device must initiate the
+-- IKE negotiation and bring up the tunnel. Specify @start@ for Amazon Web
+-- Services to initiate the IKE negotiation.
+--
+-- Valid Values: @add@ | @start@
+--
+-- Default: @add@
+--
+-- 'tunnelInsideCidr', 'modifyVpnTunnelOptionsSpecification_tunnelInsideCidr' - The range of inside IPv4 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- virtual private gateway.
+--
+-- Constraints: A size \/30 CIDR block from the @169.254.0.0\/16@ range.
+-- The following CIDR blocks are reserved and cannot be used:
+--
+-- -   @169.254.0.0\/30@
+--
+-- -   @169.254.1.0\/30@
+--
+-- -   @169.254.2.0\/30@
+--
+-- -   @169.254.3.0\/30@
+--
+-- -   @169.254.4.0\/30@
+--
+-- -   @169.254.5.0\/30@
+--
+-- -   @169.254.169.252\/30@
+--
+-- 'tunnelInsideIpv6Cidr', 'modifyVpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr' - The range of inside IPv6 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- transit gateway.
+--
+-- Constraints: A size \/126 CIDR block from the local @fd00::\/8@ range.
+newModifyVpnTunnelOptionsSpecification ::
+  ModifyVpnTunnelOptionsSpecification
+newModifyVpnTunnelOptionsSpecification =
+  ModifyVpnTunnelOptionsSpecification'
+    { dPDTimeoutAction =
+        Prelude.Nothing,
+      dPDTimeoutSeconds = Prelude.Nothing,
+      iKEVersions = Prelude.Nothing,
+      logOptions = Prelude.Nothing,
+      phase1DHGroupNumbers = Prelude.Nothing,
+      phase1EncryptionAlgorithms =
+        Prelude.Nothing,
+      phase1IntegrityAlgorithms =
+        Prelude.Nothing,
+      phase1LifetimeSeconds =
+        Prelude.Nothing,
+      phase2DHGroupNumbers = Prelude.Nothing,
+      phase2EncryptionAlgorithms =
+        Prelude.Nothing,
+      phase2IntegrityAlgorithms =
+        Prelude.Nothing,
+      phase2LifetimeSeconds =
+        Prelude.Nothing,
+      preSharedKey = Prelude.Nothing,
+      rekeyFuzzPercentage = Prelude.Nothing,
+      rekeyMarginTimeSeconds =
+        Prelude.Nothing,
+      replayWindowSize = Prelude.Nothing,
+      startupAction = Prelude.Nothing,
+      tunnelInsideCidr = Prelude.Nothing,
+      tunnelInsideIpv6Cidr = Prelude.Nothing
+    }
+
+-- | The action to take after DPD timeout occurs. Specify @restart@ to
+-- restart the IKE initiation. Specify @clear@ to end the IKE session.
+--
+-- Valid Values: @clear@ | @none@ | @restart@
+--
+-- Default: @clear@
+modifyVpnTunnelOptionsSpecification_dPDTimeoutAction :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+modifyVpnTunnelOptionsSpecification_dPDTimeoutAction = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {dPDTimeoutAction} -> dPDTimeoutAction) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {dPDTimeoutAction = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The number of seconds after which a DPD timeout occurs.
+--
+-- Constraints: A value greater than or equal to 30.
+--
+-- Default: @30@
+modifyVpnTunnelOptionsSpecification_dPDTimeoutSeconds :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+modifyVpnTunnelOptionsSpecification_dPDTimeoutSeconds = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {dPDTimeoutSeconds} -> dPDTimeoutSeconds) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {dPDTimeoutSeconds = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The IKE versions that are permitted for the VPN tunnel.
+--
+-- Valid values: @ikev1@ | @ikev2@
+modifyVpnTunnelOptionsSpecification_iKEVersions :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [IKEVersionsRequestListValue])
+modifyVpnTunnelOptionsSpecification_iKEVersions = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {iKEVersions} -> iKEVersions) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {iKEVersions = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Options for logging VPN tunnel activity.
+modifyVpnTunnelOptionsSpecification_logOptions :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe VpnTunnelLogOptionsSpecification)
+modifyVpnTunnelOptionsSpecification_logOptions = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {logOptions} -> logOptions) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {logOptions = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 1 IKE negotiations.
+--
+-- Valid values: @2@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@ |
+-- @21@ | @22@ | @23@ | @24@
+modifyVpnTunnelOptionsSpecification_phase1DHGroupNumbers :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [Phase1DHGroupNumbersRequestListValue])
+modifyVpnTunnelOptionsSpecification_phase1DHGroupNumbers = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase1DHGroupNumbers} -> phase1DHGroupNumbers) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase1DHGroupNumbers = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+modifyVpnTunnelOptionsSpecification_phase1EncryptionAlgorithms :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [Phase1EncryptionAlgorithmsRequestListValue])
+modifyVpnTunnelOptionsSpecification_phase1EncryptionAlgorithms = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase1EncryptionAlgorithms} -> phase1EncryptionAlgorithms) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase1EncryptionAlgorithms = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+modifyVpnTunnelOptionsSpecification_phase1IntegrityAlgorithms :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [Phase1IntegrityAlgorithmsRequestListValue])
+modifyVpnTunnelOptionsSpecification_phase1IntegrityAlgorithms = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase1IntegrityAlgorithms} -> phase1IntegrityAlgorithms) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase1IntegrityAlgorithms = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The lifetime for phase 1 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 28,800.
+--
+-- Default: @28800@
+modifyVpnTunnelOptionsSpecification_phase1LifetimeSeconds :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+modifyVpnTunnelOptionsSpecification_phase1LifetimeSeconds = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase1LifetimeSeconds} -> phase1LifetimeSeconds) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase1LifetimeSeconds = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 2 IKE negotiations.
+--
+-- Valid values: @2@ | @5@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@
+-- | @21@ | @22@ | @23@ | @24@
+modifyVpnTunnelOptionsSpecification_phase2DHGroupNumbers :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [Phase2DHGroupNumbersRequestListValue])
+modifyVpnTunnelOptionsSpecification_phase2DHGroupNumbers = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase2DHGroupNumbers} -> phase2DHGroupNumbers) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase2DHGroupNumbers = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+modifyVpnTunnelOptionsSpecification_phase2EncryptionAlgorithms :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [Phase2EncryptionAlgorithmsRequestListValue])
+modifyVpnTunnelOptionsSpecification_phase2EncryptionAlgorithms = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase2EncryptionAlgorithms} -> phase2EncryptionAlgorithms) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase2EncryptionAlgorithms = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+modifyVpnTunnelOptionsSpecification_phase2IntegrityAlgorithms :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe [Phase2IntegrityAlgorithmsRequestListValue])
+modifyVpnTunnelOptionsSpecification_phase2IntegrityAlgorithms = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase2IntegrityAlgorithms} -> phase2IntegrityAlgorithms) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase2IntegrityAlgorithms = a} :: ModifyVpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The lifetime for phase 2 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 3,600. The value must be less than
+-- the value for @Phase1LifetimeSeconds@.
+--
+-- Default: @3600@
+modifyVpnTunnelOptionsSpecification_phase2LifetimeSeconds :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+modifyVpnTunnelOptionsSpecification_phase2LifetimeSeconds = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {phase2LifetimeSeconds} -> phase2LifetimeSeconds) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {phase2LifetimeSeconds = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The pre-shared key (PSK) to establish initial authentication between the
+-- virtual private gateway and the customer gateway.
+--
+-- Constraints: Allowed characters are alphanumeric characters, periods
+-- (.), and underscores (_). Must be between 8 and 64 characters in length
+-- and cannot start with zero (0).
+modifyVpnTunnelOptionsSpecification_preSharedKey :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+modifyVpnTunnelOptionsSpecification_preSharedKey = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {preSharedKey} -> preSharedKey) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {preSharedKey = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The percentage of the rekey window (determined by
+-- @RekeyMarginTimeSeconds@) during which the rekey time is randomly
+-- selected.
+--
+-- Constraints: A value between 0 and 100.
+--
+-- Default: @100@
+modifyVpnTunnelOptionsSpecification_rekeyFuzzPercentage :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+modifyVpnTunnelOptionsSpecification_rekeyFuzzPercentage = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {rekeyFuzzPercentage} -> rekeyFuzzPercentage) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {rekeyFuzzPercentage = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The margin time, in seconds, before the phase 2 lifetime expires, during
+-- which the Amazon Web Services side of the VPN connection performs an IKE
+-- rekey. The exact time of the rekey is randomly selected based on the
+-- value for @RekeyFuzzPercentage@.
+--
+-- Constraints: A value between 60 and half of @Phase2LifetimeSeconds@.
+--
+-- Default: @540@
+modifyVpnTunnelOptionsSpecification_rekeyMarginTimeSeconds :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+modifyVpnTunnelOptionsSpecification_rekeyMarginTimeSeconds = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {rekeyMarginTimeSeconds} -> rekeyMarginTimeSeconds) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {rekeyMarginTimeSeconds = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The number of packets in an IKE replay window.
+--
+-- Constraints: A value between 64 and 2048.
+--
+-- Default: @1024@
+modifyVpnTunnelOptionsSpecification_replayWindowSize :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+modifyVpnTunnelOptionsSpecification_replayWindowSize = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {replayWindowSize} -> replayWindowSize) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {replayWindowSize = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The action to take when the establishing the tunnel for the VPN
+-- connection. By default, your customer gateway device must initiate the
+-- IKE negotiation and bring up the tunnel. Specify @start@ for Amazon Web
+-- Services to initiate the IKE negotiation.
+--
+-- Valid Values: @add@ | @start@
+--
+-- Default: @add@
+modifyVpnTunnelOptionsSpecification_startupAction :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+modifyVpnTunnelOptionsSpecification_startupAction = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {startupAction} -> startupAction) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {startupAction = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The range of inside IPv4 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- virtual private gateway.
+--
+-- Constraints: A size \/30 CIDR block from the @169.254.0.0\/16@ range.
+-- The following CIDR blocks are reserved and cannot be used:
+--
+-- -   @169.254.0.0\/30@
+--
+-- -   @169.254.1.0\/30@
+--
+-- -   @169.254.2.0\/30@
+--
+-- -   @169.254.3.0\/30@
+--
+-- -   @169.254.4.0\/30@
+--
+-- -   @169.254.5.0\/30@
+--
+-- -   @169.254.169.252\/30@
+modifyVpnTunnelOptionsSpecification_tunnelInsideCidr :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+modifyVpnTunnelOptionsSpecification_tunnelInsideCidr = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {tunnelInsideCidr} -> tunnelInsideCidr) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {tunnelInsideCidr = a} :: ModifyVpnTunnelOptionsSpecification)
+
+-- | The range of inside IPv6 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- transit gateway.
+--
+-- Constraints: A size \/126 CIDR block from the local @fd00::\/8@ range.
+modifyVpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr :: Lens.Lens' ModifyVpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+modifyVpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr = Lens.lens (\ModifyVpnTunnelOptionsSpecification' {tunnelInsideIpv6Cidr} -> tunnelInsideIpv6Cidr) (\s@ModifyVpnTunnelOptionsSpecification' {} a -> s {tunnelInsideIpv6Cidr = a} :: ModifyVpnTunnelOptionsSpecification)
+
+instance
+  Prelude.Hashable
+    ModifyVpnTunnelOptionsSpecification
+  where
+  hashWithSalt
+    _salt
+    ModifyVpnTunnelOptionsSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` dPDTimeoutAction
+        `Prelude.hashWithSalt` dPDTimeoutSeconds
+        `Prelude.hashWithSalt` iKEVersions
+        `Prelude.hashWithSalt` logOptions
+        `Prelude.hashWithSalt` phase1DHGroupNumbers
+        `Prelude.hashWithSalt` phase1EncryptionAlgorithms
+        `Prelude.hashWithSalt` phase1IntegrityAlgorithms
+        `Prelude.hashWithSalt` phase1LifetimeSeconds
+        `Prelude.hashWithSalt` phase2DHGroupNumbers
+        `Prelude.hashWithSalt` phase2EncryptionAlgorithms
+        `Prelude.hashWithSalt` phase2IntegrityAlgorithms
+        `Prelude.hashWithSalt` phase2LifetimeSeconds
+        `Prelude.hashWithSalt` preSharedKey
+        `Prelude.hashWithSalt` rekeyFuzzPercentage
+        `Prelude.hashWithSalt` rekeyMarginTimeSeconds
+        `Prelude.hashWithSalt` replayWindowSize
+        `Prelude.hashWithSalt` startupAction
+        `Prelude.hashWithSalt` tunnelInsideCidr
+        `Prelude.hashWithSalt` tunnelInsideIpv6Cidr
+
+instance
+  Prelude.NFData
+    ModifyVpnTunnelOptionsSpecification
+  where
+  rnf ModifyVpnTunnelOptionsSpecification' {..} =
+    Prelude.rnf dPDTimeoutAction
+      `Prelude.seq` Prelude.rnf dPDTimeoutSeconds
+      `Prelude.seq` Prelude.rnf iKEVersions
+      `Prelude.seq` Prelude.rnf logOptions
+      `Prelude.seq` Prelude.rnf phase1DHGroupNumbers
+      `Prelude.seq` Prelude.rnf phase1EncryptionAlgorithms
+      `Prelude.seq` Prelude.rnf phase1IntegrityAlgorithms
+      `Prelude.seq` Prelude.rnf phase1LifetimeSeconds
+      `Prelude.seq` Prelude.rnf phase2DHGroupNumbers
+      `Prelude.seq` Prelude.rnf phase2EncryptionAlgorithms
+      `Prelude.seq` Prelude.rnf phase2IntegrityAlgorithms
+      `Prelude.seq` Prelude.rnf phase2LifetimeSeconds
+      `Prelude.seq` Prelude.rnf preSharedKey
+      `Prelude.seq` Prelude.rnf rekeyFuzzPercentage
+      `Prelude.seq` Prelude.rnf rekeyMarginTimeSeconds
+      `Prelude.seq` Prelude.rnf replayWindowSize
+      `Prelude.seq` Prelude.rnf startupAction
+      `Prelude.seq` Prelude.rnf tunnelInsideCidr
+      `Prelude.seq` Prelude.rnf tunnelInsideIpv6Cidr
+
+instance
+  Data.ToQuery
+    ModifyVpnTunnelOptionsSpecification
+  where
+  toQuery ModifyVpnTunnelOptionsSpecification' {..} =
+    Prelude.mconcat
+      [ "DPDTimeoutAction" Data.=: dPDTimeoutAction,
+        "DPDTimeoutSeconds" Data.=: dPDTimeoutSeconds,
+        Data.toQuery
+          ( Data.toQueryList "IKEVersion"
+              Prelude.<$> iKEVersions
+          ),
+        "LogOptions" Data.=: logOptions,
+        Data.toQuery
+          ( Data.toQueryList "Phase1DHGroupNumber"
+              Prelude.<$> phase1DHGroupNumbers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase1EncryptionAlgorithm"
+              Prelude.<$> phase1EncryptionAlgorithms
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase1IntegrityAlgorithm"
+              Prelude.<$> phase1IntegrityAlgorithms
+          ),
+        "Phase1LifetimeSeconds"
+          Data.=: phase1LifetimeSeconds,
+        Data.toQuery
+          ( Data.toQueryList "Phase2DHGroupNumber"
+              Prelude.<$> phase2DHGroupNumbers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase2EncryptionAlgorithm"
+              Prelude.<$> phase2EncryptionAlgorithms
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase2IntegrityAlgorithm"
+              Prelude.<$> phase2IntegrityAlgorithms
+          ),
+        "Phase2LifetimeSeconds"
+          Data.=: phase2LifetimeSeconds,
+        "PreSharedKey" Data.=: preSharedKey,
+        "RekeyFuzzPercentage" Data.=: rekeyFuzzPercentage,
+        "RekeyMarginTimeSeconds"
+          Data.=: rekeyMarginTimeSeconds,
+        "ReplayWindowSize" Data.=: replayWindowSize,
+        "StartupAction" Data.=: startupAction,
+        "TunnelInsideCidr" Data.=: tunnelInsideCidr,
+        "TunnelInsideIpv6Cidr" Data.=: tunnelInsideIpv6Cidr
+      ]
diff --git a/gen/Amazonka/EC2/Types/Monitoring.hs b/gen/Amazonka/EC2/Types/Monitoring.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Monitoring.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Monitoring
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Monitoring where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MonitoringState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the monitoring of an instance.
+--
+-- /See:/ 'newMonitoring' smart constructor.
+data Monitoring = Monitoring'
+  { -- | Indicates whether detailed monitoring is enabled. Otherwise, basic
+    -- monitoring is enabled.
+    state :: Prelude.Maybe MonitoringState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Monitoring' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'monitoring_state' - Indicates whether detailed monitoring is enabled. Otherwise, basic
+-- monitoring is enabled.
+newMonitoring ::
+  Monitoring
+newMonitoring = Monitoring' {state = Prelude.Nothing}
+
+-- | Indicates whether detailed monitoring is enabled. Otherwise, basic
+-- monitoring is enabled.
+monitoring_state :: Lens.Lens' Monitoring (Prelude.Maybe MonitoringState)
+monitoring_state = Lens.lens (\Monitoring' {state} -> state) (\s@Monitoring' {} a -> s {state = a} :: Monitoring)
+
+instance Data.FromXML Monitoring where
+  parseXML x =
+    Monitoring' Prelude.<$> (x Data..@? "state")
+
+instance Prelude.Hashable Monitoring where
+  hashWithSalt _salt Monitoring' {..} =
+    _salt `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Monitoring where
+  rnf Monitoring' {..} = Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/MonitoringState.hs b/gen/Amazonka/EC2/Types/MonitoringState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MonitoringState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MonitoringState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MonitoringState
+  ( MonitoringState
+      ( ..,
+        MonitoringState_Disabled,
+        MonitoringState_Disabling,
+        MonitoringState_Enabled,
+        MonitoringState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype MonitoringState = MonitoringState'
+  { fromMonitoringState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MonitoringState_Disabled :: MonitoringState
+pattern MonitoringState_Disabled = MonitoringState' "disabled"
+
+pattern MonitoringState_Disabling :: MonitoringState
+pattern MonitoringState_Disabling = MonitoringState' "disabling"
+
+pattern MonitoringState_Enabled :: MonitoringState
+pattern MonitoringState_Enabled = MonitoringState' "enabled"
+
+pattern MonitoringState_Pending :: MonitoringState
+pattern MonitoringState_Pending = MonitoringState' "pending"
+
+{-# COMPLETE
+  MonitoringState_Disabled,
+  MonitoringState_Disabling,
+  MonitoringState_Enabled,
+  MonitoringState_Pending,
+  MonitoringState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/MoveStatus.hs b/gen/Amazonka/EC2/Types/MoveStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MoveStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MoveStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MoveStatus
+  ( MoveStatus
+      ( ..,
+        MoveStatus_MovingToVpc,
+        MoveStatus_RestoringToClassic
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype MoveStatus = MoveStatus'
+  { fromMoveStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MoveStatus_MovingToVpc :: MoveStatus
+pattern MoveStatus_MovingToVpc = MoveStatus' "movingToVpc"
+
+pattern MoveStatus_RestoringToClassic :: MoveStatus
+pattern MoveStatus_RestoringToClassic = MoveStatus' "restoringToClassic"
+
+{-# COMPLETE
+  MoveStatus_MovingToVpc,
+  MoveStatus_RestoringToClassic,
+  MoveStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/MovingAddressStatus.hs b/gen/Amazonka/EC2/Types/MovingAddressStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MovingAddressStatus.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MovingAddressStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MovingAddressStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MoveStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of a moving Elastic IP address.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- /See:/ 'newMovingAddressStatus' smart constructor.
+data MovingAddressStatus = MovingAddressStatus'
+  { -- | The status of the Elastic IP address that\'s being moved to the EC2-VPC
+    -- platform, or restored to the EC2-Classic platform.
+    moveStatus :: Prelude.Maybe MoveStatus,
+    -- | The Elastic IP address.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MovingAddressStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'moveStatus', 'movingAddressStatus_moveStatus' - The status of the Elastic IP address that\'s being moved to the EC2-VPC
+-- platform, or restored to the EC2-Classic platform.
+--
+-- 'publicIp', 'movingAddressStatus_publicIp' - The Elastic IP address.
+newMovingAddressStatus ::
+  MovingAddressStatus
+newMovingAddressStatus =
+  MovingAddressStatus'
+    { moveStatus = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | The status of the Elastic IP address that\'s being moved to the EC2-VPC
+-- platform, or restored to the EC2-Classic platform.
+movingAddressStatus_moveStatus :: Lens.Lens' MovingAddressStatus (Prelude.Maybe MoveStatus)
+movingAddressStatus_moveStatus = Lens.lens (\MovingAddressStatus' {moveStatus} -> moveStatus) (\s@MovingAddressStatus' {} a -> s {moveStatus = a} :: MovingAddressStatus)
+
+-- | The Elastic IP address.
+movingAddressStatus_publicIp :: Lens.Lens' MovingAddressStatus (Prelude.Maybe Prelude.Text)
+movingAddressStatus_publicIp = Lens.lens (\MovingAddressStatus' {publicIp} -> publicIp) (\s@MovingAddressStatus' {} a -> s {publicIp = a} :: MovingAddressStatus)
+
+instance Data.FromXML MovingAddressStatus where
+  parseXML x =
+    MovingAddressStatus'
+      Prelude.<$> (x Data..@? "moveStatus")
+      Prelude.<*> (x Data..@? "publicIp")
+
+instance Prelude.Hashable MovingAddressStatus where
+  hashWithSalt _salt MovingAddressStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` moveStatus
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData MovingAddressStatus where
+  rnf MovingAddressStatus' {..} =
+    Prelude.rnf moveStatus
+      `Prelude.seq` Prelude.rnf publicIp
diff --git a/gen/Amazonka/EC2/Types/MulticastSupportValue.hs b/gen/Amazonka/EC2/Types/MulticastSupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/MulticastSupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.MulticastSupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.MulticastSupportValue
+  ( MulticastSupportValue
+      ( ..,
+        MulticastSupportValue_Disable,
+        MulticastSupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype MulticastSupportValue = MulticastSupportValue'
+  { fromMulticastSupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern MulticastSupportValue_Disable :: MulticastSupportValue
+pattern MulticastSupportValue_Disable = MulticastSupportValue' "disable"
+
+pattern MulticastSupportValue_Enable :: MulticastSupportValue
+pattern MulticastSupportValue_Enable = MulticastSupportValue' "enable"
+
+{-# COMPLETE
+  MulticastSupportValue_Disable,
+  MulticastSupportValue_Enable,
+  MulticastSupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NatGateway.hs b/gen/Amazonka/EC2/Types/NatGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NatGateway.hs
@@ -0,0 +1,349 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NatGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NatGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ConnectivityType
+import Amazonka.EC2.Types.NatGatewayAddress
+import Amazonka.EC2.Types.NatGatewayState
+import Amazonka.EC2.Types.ProvisionedBandwidth
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a NAT gateway.
+--
+-- /See:/ 'newNatGateway' smart constructor.
+data NatGateway = NatGateway'
+  { -- | Indicates whether the NAT gateway supports public or private
+    -- connectivity.
+    connectivityType :: Prelude.Maybe ConnectivityType,
+    -- | The date and time the NAT gateway was created.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time the NAT gateway was deleted, if applicable.
+    deleteTime :: Prelude.Maybe Data.ISO8601,
+    -- | If the NAT gateway could not be created, specifies the error code for
+    -- the failure. (@InsufficientFreeAddressesInSubnet@ |
+    -- @Gateway.NotAttached@ | @InvalidAllocationID.NotFound@ |
+    -- @Resource.AlreadyAssociated@ | @InternalError@ |
+    -- @InvalidSubnetID.NotFound@)
+    failureCode :: Prelude.Maybe Prelude.Text,
+    -- | If the NAT gateway could not be created, specifies the error message for
+    -- the failure, that corresponds to the error code.
+    --
+    -- -   For InsufficientFreeAddressesInSubnet: \"Subnet has insufficient
+    --     free addresses to create this NAT gateway\"
+    --
+    -- -   For Gateway.NotAttached: \"Network vpc-xxxxxxxx has no Internet
+    --     gateway attached\"
+    --
+    -- -   For InvalidAllocationID.NotFound: \"Elastic IP address
+    --     eipalloc-xxxxxxxx could not be associated with this NAT gateway\"
+    --
+    -- -   For Resource.AlreadyAssociated: \"Elastic IP address
+    --     eipalloc-xxxxxxxx is already associated\"
+    --
+    -- -   For InternalError: \"Network interface eni-xxxxxxxx, created and
+    --     used internally by this NAT gateway is in an invalid state. Please
+    --     try again.\"
+    --
+    -- -   For InvalidSubnetID.NotFound: \"The specified subnet subnet-xxxxxxxx
+    --     does not exist or could not be found.\"
+    failureMessage :: Prelude.Maybe Prelude.Text,
+    -- | Information about the IP addresses and network interface associated with
+    -- the NAT gateway.
+    natGatewayAddresses :: Prelude.Maybe [NatGatewayAddress],
+    -- | The ID of the NAT gateway.
+    natGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | Reserved. If you need to sustain traffic greater than the
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+    -- contact us through the
+    -- <https://console.aws.amazon.com/support/home? Support Center>.
+    provisionedBandwidth :: Prelude.Maybe ProvisionedBandwidth,
+    -- | The state of the NAT gateway.
+    --
+    -- -   @pending@: The NAT gateway is being created and is not ready to
+    --     process traffic.
+    --
+    -- -   @failed@: The NAT gateway could not be created. Check the
+    --     @failureCode@ and @failureMessage@ fields for the reason.
+    --
+    -- -   @available@: The NAT gateway is able to process traffic. This status
+    --     remains until you delete the NAT gateway, and does not indicate the
+    --     health of the NAT gateway.
+    --
+    -- -   @deleting@: The NAT gateway is in the process of being terminated
+    --     and may still be processing traffic.
+    --
+    -- -   @deleted@: The NAT gateway has been terminated and is no longer
+    --     processing traffic.
+    state :: Prelude.Maybe NatGatewayState,
+    -- | The ID of the subnet in which the NAT gateway is located.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The tags for the NAT gateway.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC in which the NAT gateway is located.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NatGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectivityType', 'natGateway_connectivityType' - Indicates whether the NAT gateway supports public or private
+-- connectivity.
+--
+-- 'createTime', 'natGateway_createTime' - The date and time the NAT gateway was created.
+--
+-- 'deleteTime', 'natGateway_deleteTime' - The date and time the NAT gateway was deleted, if applicable.
+--
+-- 'failureCode', 'natGateway_failureCode' - If the NAT gateway could not be created, specifies the error code for
+-- the failure. (@InsufficientFreeAddressesInSubnet@ |
+-- @Gateway.NotAttached@ | @InvalidAllocationID.NotFound@ |
+-- @Resource.AlreadyAssociated@ | @InternalError@ |
+-- @InvalidSubnetID.NotFound@)
+--
+-- 'failureMessage', 'natGateway_failureMessage' - If the NAT gateway could not be created, specifies the error message for
+-- the failure, that corresponds to the error code.
+--
+-- -   For InsufficientFreeAddressesInSubnet: \"Subnet has insufficient
+--     free addresses to create this NAT gateway\"
+--
+-- -   For Gateway.NotAttached: \"Network vpc-xxxxxxxx has no Internet
+--     gateway attached\"
+--
+-- -   For InvalidAllocationID.NotFound: \"Elastic IP address
+--     eipalloc-xxxxxxxx could not be associated with this NAT gateway\"
+--
+-- -   For Resource.AlreadyAssociated: \"Elastic IP address
+--     eipalloc-xxxxxxxx is already associated\"
+--
+-- -   For InternalError: \"Network interface eni-xxxxxxxx, created and
+--     used internally by this NAT gateway is in an invalid state. Please
+--     try again.\"
+--
+-- -   For InvalidSubnetID.NotFound: \"The specified subnet subnet-xxxxxxxx
+--     does not exist or could not be found.\"
+--
+-- 'natGatewayAddresses', 'natGateway_natGatewayAddresses' - Information about the IP addresses and network interface associated with
+-- the NAT gateway.
+--
+-- 'natGatewayId', 'natGateway_natGatewayId' - The ID of the NAT gateway.
+--
+-- 'provisionedBandwidth', 'natGateway_provisionedBandwidth' - Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+--
+-- 'state', 'natGateway_state' - The state of the NAT gateway.
+--
+-- -   @pending@: The NAT gateway is being created and is not ready to
+--     process traffic.
+--
+-- -   @failed@: The NAT gateway could not be created. Check the
+--     @failureCode@ and @failureMessage@ fields for the reason.
+--
+-- -   @available@: The NAT gateway is able to process traffic. This status
+--     remains until you delete the NAT gateway, and does not indicate the
+--     health of the NAT gateway.
+--
+-- -   @deleting@: The NAT gateway is in the process of being terminated
+--     and may still be processing traffic.
+--
+-- -   @deleted@: The NAT gateway has been terminated and is no longer
+--     processing traffic.
+--
+-- 'subnetId', 'natGateway_subnetId' - The ID of the subnet in which the NAT gateway is located.
+--
+-- 'tags', 'natGateway_tags' - The tags for the NAT gateway.
+--
+-- 'vpcId', 'natGateway_vpcId' - The ID of the VPC in which the NAT gateway is located.
+newNatGateway ::
+  NatGateway
+newNatGateway =
+  NatGateway'
+    { connectivityType = Prelude.Nothing,
+      createTime = Prelude.Nothing,
+      deleteTime = Prelude.Nothing,
+      failureCode = Prelude.Nothing,
+      failureMessage = Prelude.Nothing,
+      natGatewayAddresses = Prelude.Nothing,
+      natGatewayId = Prelude.Nothing,
+      provisionedBandwidth = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | Indicates whether the NAT gateway supports public or private
+-- connectivity.
+natGateway_connectivityType :: Lens.Lens' NatGateway (Prelude.Maybe ConnectivityType)
+natGateway_connectivityType = Lens.lens (\NatGateway' {connectivityType} -> connectivityType) (\s@NatGateway' {} a -> s {connectivityType = a} :: NatGateway)
+
+-- | The date and time the NAT gateway was created.
+natGateway_createTime :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.UTCTime)
+natGateway_createTime = Lens.lens (\NatGateway' {createTime} -> createTime) (\s@NatGateway' {} a -> s {createTime = a} :: NatGateway) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time the NAT gateway was deleted, if applicable.
+natGateway_deleteTime :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.UTCTime)
+natGateway_deleteTime = Lens.lens (\NatGateway' {deleteTime} -> deleteTime) (\s@NatGateway' {} a -> s {deleteTime = a} :: NatGateway) Prelude.. Lens.mapping Data._Time
+
+-- | If the NAT gateway could not be created, specifies the error code for
+-- the failure. (@InsufficientFreeAddressesInSubnet@ |
+-- @Gateway.NotAttached@ | @InvalidAllocationID.NotFound@ |
+-- @Resource.AlreadyAssociated@ | @InternalError@ |
+-- @InvalidSubnetID.NotFound@)
+natGateway_failureCode :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.Text)
+natGateway_failureCode = Lens.lens (\NatGateway' {failureCode} -> failureCode) (\s@NatGateway' {} a -> s {failureCode = a} :: NatGateway)
+
+-- | If the NAT gateway could not be created, specifies the error message for
+-- the failure, that corresponds to the error code.
+--
+-- -   For InsufficientFreeAddressesInSubnet: \"Subnet has insufficient
+--     free addresses to create this NAT gateway\"
+--
+-- -   For Gateway.NotAttached: \"Network vpc-xxxxxxxx has no Internet
+--     gateway attached\"
+--
+-- -   For InvalidAllocationID.NotFound: \"Elastic IP address
+--     eipalloc-xxxxxxxx could not be associated with this NAT gateway\"
+--
+-- -   For Resource.AlreadyAssociated: \"Elastic IP address
+--     eipalloc-xxxxxxxx is already associated\"
+--
+-- -   For InternalError: \"Network interface eni-xxxxxxxx, created and
+--     used internally by this NAT gateway is in an invalid state. Please
+--     try again.\"
+--
+-- -   For InvalidSubnetID.NotFound: \"The specified subnet subnet-xxxxxxxx
+--     does not exist or could not be found.\"
+natGateway_failureMessage :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.Text)
+natGateway_failureMessage = Lens.lens (\NatGateway' {failureMessage} -> failureMessage) (\s@NatGateway' {} a -> s {failureMessage = a} :: NatGateway)
+
+-- | Information about the IP addresses and network interface associated with
+-- the NAT gateway.
+natGateway_natGatewayAddresses :: Lens.Lens' NatGateway (Prelude.Maybe [NatGatewayAddress])
+natGateway_natGatewayAddresses = Lens.lens (\NatGateway' {natGatewayAddresses} -> natGatewayAddresses) (\s@NatGateway' {} a -> s {natGatewayAddresses = a} :: NatGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the NAT gateway.
+natGateway_natGatewayId :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.Text)
+natGateway_natGatewayId = Lens.lens (\NatGateway' {natGatewayId} -> natGatewayId) (\s@NatGateway' {} a -> s {natGatewayId = a} :: NatGateway)
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+natGateway_provisionedBandwidth :: Lens.Lens' NatGateway (Prelude.Maybe ProvisionedBandwidth)
+natGateway_provisionedBandwidth = Lens.lens (\NatGateway' {provisionedBandwidth} -> provisionedBandwidth) (\s@NatGateway' {} a -> s {provisionedBandwidth = a} :: NatGateway)
+
+-- | The state of the NAT gateway.
+--
+-- -   @pending@: The NAT gateway is being created and is not ready to
+--     process traffic.
+--
+-- -   @failed@: The NAT gateway could not be created. Check the
+--     @failureCode@ and @failureMessage@ fields for the reason.
+--
+-- -   @available@: The NAT gateway is able to process traffic. This status
+--     remains until you delete the NAT gateway, and does not indicate the
+--     health of the NAT gateway.
+--
+-- -   @deleting@: The NAT gateway is in the process of being terminated
+--     and may still be processing traffic.
+--
+-- -   @deleted@: The NAT gateway has been terminated and is no longer
+--     processing traffic.
+natGateway_state :: Lens.Lens' NatGateway (Prelude.Maybe NatGatewayState)
+natGateway_state = Lens.lens (\NatGateway' {state} -> state) (\s@NatGateway' {} a -> s {state = a} :: NatGateway)
+
+-- | The ID of the subnet in which the NAT gateway is located.
+natGateway_subnetId :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.Text)
+natGateway_subnetId = Lens.lens (\NatGateway' {subnetId} -> subnetId) (\s@NatGateway' {} a -> s {subnetId = a} :: NatGateway)
+
+-- | The tags for the NAT gateway.
+natGateway_tags :: Lens.Lens' NatGateway (Prelude.Maybe [Tag])
+natGateway_tags = Lens.lens (\NatGateway' {tags} -> tags) (\s@NatGateway' {} a -> s {tags = a} :: NatGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC in which the NAT gateway is located.
+natGateway_vpcId :: Lens.Lens' NatGateway (Prelude.Maybe Prelude.Text)
+natGateway_vpcId = Lens.lens (\NatGateway' {vpcId} -> vpcId) (\s@NatGateway' {} a -> s {vpcId = a} :: NatGateway)
+
+instance Data.FromXML NatGateway where
+  parseXML x =
+    NatGateway'
+      Prelude.<$> (x Data..@? "connectivityType")
+      Prelude.<*> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "deleteTime")
+      Prelude.<*> (x Data..@? "failureCode")
+      Prelude.<*> (x Data..@? "failureMessage")
+      Prelude.<*> ( x
+                      Data..@? "natGatewayAddressSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "natGatewayId")
+      Prelude.<*> (x Data..@? "provisionedBandwidth")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable NatGateway where
+  hashWithSalt _salt NatGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectivityType
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` deleteTime
+      `Prelude.hashWithSalt` failureCode
+      `Prelude.hashWithSalt` failureMessage
+      `Prelude.hashWithSalt` natGatewayAddresses
+      `Prelude.hashWithSalt` natGatewayId
+      `Prelude.hashWithSalt` provisionedBandwidth
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData NatGateway where
+  rnf NatGateway' {..} =
+    Prelude.rnf connectivityType
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf deleteTime
+      `Prelude.seq` Prelude.rnf failureCode
+      `Prelude.seq` Prelude.rnf failureMessage
+      `Prelude.seq` Prelude.rnf natGatewayAddresses
+      `Prelude.seq` Prelude.rnf natGatewayId
+      `Prelude.seq` Prelude.rnf provisionedBandwidth
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/NatGatewayAddress.hs b/gen/Amazonka/EC2/Types/NatGatewayAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NatGatewayAddress.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NatGatewayAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NatGatewayAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the IP addresses and network interface associated with a NAT
+-- gateway.
+--
+-- /See:/ 'newNatGatewayAddress' smart constructor.
+data NatGatewayAddress = NatGatewayAddress'
+  { -- | [Public NAT gateway only] The allocation ID of the Elastic IP address
+    -- that\'s associated with the NAT gateway.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface associated with the NAT gateway.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The private IP address associated with the NAT gateway.
+    privateIp :: Prelude.Maybe Prelude.Text,
+    -- | [Public NAT gateway only] The Elastic IP address associated with the NAT
+    -- gateway.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NatGatewayAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'natGatewayAddress_allocationId' - [Public NAT gateway only] The allocation ID of the Elastic IP address
+-- that\'s associated with the NAT gateway.
+--
+-- 'networkInterfaceId', 'natGatewayAddress_networkInterfaceId' - The ID of the network interface associated with the NAT gateway.
+--
+-- 'privateIp', 'natGatewayAddress_privateIp' - The private IP address associated with the NAT gateway.
+--
+-- 'publicIp', 'natGatewayAddress_publicIp' - [Public NAT gateway only] The Elastic IP address associated with the NAT
+-- gateway.
+newNatGatewayAddress ::
+  NatGatewayAddress
+newNatGatewayAddress =
+  NatGatewayAddress'
+    { allocationId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      privateIp = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | [Public NAT gateway only] The allocation ID of the Elastic IP address
+-- that\'s associated with the NAT gateway.
+natGatewayAddress_allocationId :: Lens.Lens' NatGatewayAddress (Prelude.Maybe Prelude.Text)
+natGatewayAddress_allocationId = Lens.lens (\NatGatewayAddress' {allocationId} -> allocationId) (\s@NatGatewayAddress' {} a -> s {allocationId = a} :: NatGatewayAddress)
+
+-- | The ID of the network interface associated with the NAT gateway.
+natGatewayAddress_networkInterfaceId :: Lens.Lens' NatGatewayAddress (Prelude.Maybe Prelude.Text)
+natGatewayAddress_networkInterfaceId = Lens.lens (\NatGatewayAddress' {networkInterfaceId} -> networkInterfaceId) (\s@NatGatewayAddress' {} a -> s {networkInterfaceId = a} :: NatGatewayAddress)
+
+-- | The private IP address associated with the NAT gateway.
+natGatewayAddress_privateIp :: Lens.Lens' NatGatewayAddress (Prelude.Maybe Prelude.Text)
+natGatewayAddress_privateIp = Lens.lens (\NatGatewayAddress' {privateIp} -> privateIp) (\s@NatGatewayAddress' {} a -> s {privateIp = a} :: NatGatewayAddress)
+
+-- | [Public NAT gateway only] The Elastic IP address associated with the NAT
+-- gateway.
+natGatewayAddress_publicIp :: Lens.Lens' NatGatewayAddress (Prelude.Maybe Prelude.Text)
+natGatewayAddress_publicIp = Lens.lens (\NatGatewayAddress' {publicIp} -> publicIp) (\s@NatGatewayAddress' {} a -> s {publicIp = a} :: NatGatewayAddress)
+
+instance Data.FromXML NatGatewayAddress where
+  parseXML x =
+    NatGatewayAddress'
+      Prelude.<$> (x Data..@? "allocationId")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "privateIp")
+      Prelude.<*> (x Data..@? "publicIp")
+
+instance Prelude.Hashable NatGatewayAddress where
+  hashWithSalt _salt NatGatewayAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` privateIp
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData NatGatewayAddress where
+  rnf NatGatewayAddress' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf privateIp
+      `Prelude.seq` Prelude.rnf publicIp
diff --git a/gen/Amazonka/EC2/Types/NatGatewayState.hs b/gen/Amazonka/EC2/Types/NatGatewayState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NatGatewayState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NatGatewayState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NatGatewayState
+  ( NatGatewayState
+      ( ..,
+        NatGatewayState_Available,
+        NatGatewayState_Deleted,
+        NatGatewayState_Deleting,
+        NatGatewayState_Failed,
+        NatGatewayState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype NatGatewayState = NatGatewayState'
+  { fromNatGatewayState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NatGatewayState_Available :: NatGatewayState
+pattern NatGatewayState_Available = NatGatewayState' "available"
+
+pattern NatGatewayState_Deleted :: NatGatewayState
+pattern NatGatewayState_Deleted = NatGatewayState' "deleted"
+
+pattern NatGatewayState_Deleting :: NatGatewayState
+pattern NatGatewayState_Deleting = NatGatewayState' "deleting"
+
+pattern NatGatewayState_Failed :: NatGatewayState
+pattern NatGatewayState_Failed = NatGatewayState' "failed"
+
+pattern NatGatewayState_Pending :: NatGatewayState
+pattern NatGatewayState_Pending = NatGatewayState' "pending"
+
+{-# COMPLETE
+  NatGatewayState_Available,
+  NatGatewayState_Deleted,
+  NatGatewayState_Deleting,
+  NatGatewayState_Failed,
+  NatGatewayState_Pending,
+  NatGatewayState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NetworkAcl.hs b/gen/Amazonka/EC2/Types/NetworkAcl.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkAcl.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkAcl
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkAcl where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.NetworkAclAssociation
+import Amazonka.EC2.Types.NetworkAclEntry
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network ACL.
+--
+-- /See:/ 'newNetworkAcl' smart constructor.
+data NetworkAcl = NetworkAcl'
+  { -- | Any associations between the network ACL and one or more subnets
+    associations :: Prelude.Maybe [NetworkAclAssociation],
+    -- | One or more entries (rules) in the network ACL.
+    entries :: Prelude.Maybe [NetworkAclEntry],
+    -- | Indicates whether this is the default network ACL for the VPC.
+    isDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the network ACL.
+    networkAclId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the network ACL.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the network ACL.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC for the network ACL.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkAcl' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'networkAcl_associations' - Any associations between the network ACL and one or more subnets
+--
+-- 'entries', 'networkAcl_entries' - One or more entries (rules) in the network ACL.
+--
+-- 'isDefault', 'networkAcl_isDefault' - Indicates whether this is the default network ACL for the VPC.
+--
+-- 'networkAclId', 'networkAcl_networkAclId' - The ID of the network ACL.
+--
+-- 'ownerId', 'networkAcl_ownerId' - The ID of the Amazon Web Services account that owns the network ACL.
+--
+-- 'tags', 'networkAcl_tags' - Any tags assigned to the network ACL.
+--
+-- 'vpcId', 'networkAcl_vpcId' - The ID of the VPC for the network ACL.
+newNetworkAcl ::
+  NetworkAcl
+newNetworkAcl =
+  NetworkAcl'
+    { associations = Prelude.Nothing,
+      entries = Prelude.Nothing,
+      isDefault = Prelude.Nothing,
+      networkAclId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | Any associations between the network ACL and one or more subnets
+networkAcl_associations :: Lens.Lens' NetworkAcl (Prelude.Maybe [NetworkAclAssociation])
+networkAcl_associations = Lens.lens (\NetworkAcl' {associations} -> associations) (\s@NetworkAcl' {} a -> s {associations = a} :: NetworkAcl) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more entries (rules) in the network ACL.
+networkAcl_entries :: Lens.Lens' NetworkAcl (Prelude.Maybe [NetworkAclEntry])
+networkAcl_entries = Lens.lens (\NetworkAcl' {entries} -> entries) (\s@NetworkAcl' {} a -> s {entries = a} :: NetworkAcl) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether this is the default network ACL for the VPC.
+networkAcl_isDefault :: Lens.Lens' NetworkAcl (Prelude.Maybe Prelude.Bool)
+networkAcl_isDefault = Lens.lens (\NetworkAcl' {isDefault} -> isDefault) (\s@NetworkAcl' {} a -> s {isDefault = a} :: NetworkAcl)
+
+-- | The ID of the network ACL.
+networkAcl_networkAclId :: Lens.Lens' NetworkAcl (Prelude.Maybe Prelude.Text)
+networkAcl_networkAclId = Lens.lens (\NetworkAcl' {networkAclId} -> networkAclId) (\s@NetworkAcl' {} a -> s {networkAclId = a} :: NetworkAcl)
+
+-- | The ID of the Amazon Web Services account that owns the network ACL.
+networkAcl_ownerId :: Lens.Lens' NetworkAcl (Prelude.Maybe Prelude.Text)
+networkAcl_ownerId = Lens.lens (\NetworkAcl' {ownerId} -> ownerId) (\s@NetworkAcl' {} a -> s {ownerId = a} :: NetworkAcl)
+
+-- | Any tags assigned to the network ACL.
+networkAcl_tags :: Lens.Lens' NetworkAcl (Prelude.Maybe [Tag])
+networkAcl_tags = Lens.lens (\NetworkAcl' {tags} -> tags) (\s@NetworkAcl' {} a -> s {tags = a} :: NetworkAcl) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC for the network ACL.
+networkAcl_vpcId :: Lens.Lens' NetworkAcl (Prelude.Maybe Prelude.Text)
+networkAcl_vpcId = Lens.lens (\NetworkAcl' {vpcId} -> vpcId) (\s@NetworkAcl' {} a -> s {vpcId = a} :: NetworkAcl)
+
+instance Data.FromXML NetworkAcl where
+  parseXML x =
+    NetworkAcl'
+      Prelude.<$> ( x
+                      Data..@? "associationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "entrySet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "default")
+      Prelude.<*> (x Data..@? "networkAclId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable NetworkAcl where
+  hashWithSalt _salt NetworkAcl' {..} =
+    _salt
+      `Prelude.hashWithSalt` associations
+      `Prelude.hashWithSalt` entries
+      `Prelude.hashWithSalt` isDefault
+      `Prelude.hashWithSalt` networkAclId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData NetworkAcl where
+  rnf NetworkAcl' {..} =
+    Prelude.rnf associations
+      `Prelude.seq` Prelude.rnf entries
+      `Prelude.seq` Prelude.rnf isDefault
+      `Prelude.seq` Prelude.rnf networkAclId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/NetworkAclAssociation.hs b/gen/Amazonka/EC2/Types/NetworkAclAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkAclAssociation.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkAclAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkAclAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a network ACL and a subnet.
+--
+-- /See:/ 'newNetworkAclAssociation' smart constructor.
+data NetworkAclAssociation = NetworkAclAssociation'
+  { -- | The ID of the association between a network ACL and a subnet.
+    networkAclAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network ACL.
+    networkAclId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkAclAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkAclAssociationId', 'networkAclAssociation_networkAclAssociationId' - The ID of the association between a network ACL and a subnet.
+--
+-- 'networkAclId', 'networkAclAssociation_networkAclId' - The ID of the network ACL.
+--
+-- 'subnetId', 'networkAclAssociation_subnetId' - The ID of the subnet.
+newNetworkAclAssociation ::
+  NetworkAclAssociation
+newNetworkAclAssociation =
+  NetworkAclAssociation'
+    { networkAclAssociationId =
+        Prelude.Nothing,
+      networkAclId = Prelude.Nothing,
+      subnetId = Prelude.Nothing
+    }
+
+-- | The ID of the association between a network ACL and a subnet.
+networkAclAssociation_networkAclAssociationId :: Lens.Lens' NetworkAclAssociation (Prelude.Maybe Prelude.Text)
+networkAclAssociation_networkAclAssociationId = Lens.lens (\NetworkAclAssociation' {networkAclAssociationId} -> networkAclAssociationId) (\s@NetworkAclAssociation' {} a -> s {networkAclAssociationId = a} :: NetworkAclAssociation)
+
+-- | The ID of the network ACL.
+networkAclAssociation_networkAclId :: Lens.Lens' NetworkAclAssociation (Prelude.Maybe Prelude.Text)
+networkAclAssociation_networkAclId = Lens.lens (\NetworkAclAssociation' {networkAclId} -> networkAclId) (\s@NetworkAclAssociation' {} a -> s {networkAclId = a} :: NetworkAclAssociation)
+
+-- | The ID of the subnet.
+networkAclAssociation_subnetId :: Lens.Lens' NetworkAclAssociation (Prelude.Maybe Prelude.Text)
+networkAclAssociation_subnetId = Lens.lens (\NetworkAclAssociation' {subnetId} -> subnetId) (\s@NetworkAclAssociation' {} a -> s {subnetId = a} :: NetworkAclAssociation)
+
+instance Data.FromXML NetworkAclAssociation where
+  parseXML x =
+    NetworkAclAssociation'
+      Prelude.<$> (x Data..@? "networkAclAssociationId")
+      Prelude.<*> (x Data..@? "networkAclId")
+      Prelude.<*> (x Data..@? "subnetId")
+
+instance Prelude.Hashable NetworkAclAssociation where
+  hashWithSalt _salt NetworkAclAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` networkAclAssociationId
+      `Prelude.hashWithSalt` networkAclId
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData NetworkAclAssociation where
+  rnf NetworkAclAssociation' {..} =
+    Prelude.rnf networkAclAssociationId
+      `Prelude.seq` Prelude.rnf networkAclId
+      `Prelude.seq` Prelude.rnf subnetId
diff --git a/gen/Amazonka/EC2/Types/NetworkAclEntry.hs b/gen/Amazonka/EC2/Types/NetworkAclEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkAclEntry.hs
@@ -0,0 +1,162 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkAclEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkAclEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IcmpTypeCode
+import Amazonka.EC2.Types.PortRange
+import Amazonka.EC2.Types.RuleAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an entry in a network ACL.
+--
+-- /See:/ 'newNetworkAclEntry' smart constructor.
+data NetworkAclEntry = NetworkAclEntry'
+  { -- | The IPv4 network range to allow or deny, in CIDR notation.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the rule is an egress rule (applied to traffic leaving
+    -- the subnet).
+    egress :: Prelude.Maybe Prelude.Bool,
+    -- | ICMP protocol: The ICMP type and code.
+    icmpTypeCode :: Prelude.Maybe IcmpTypeCode,
+    -- | The IPv6 network range to allow or deny, in CIDR notation.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | TCP or UDP protocols: The range of ports the rule applies to.
+    portRange :: Prelude.Maybe PortRange,
+    -- | The protocol number. A value of \"-1\" means all protocols.
+    protocol :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to allow or deny the traffic that matches the rule.
+    ruleAction :: Prelude.Maybe RuleAction,
+    -- | The rule number for the entry. ACL entries are processed in ascending
+    -- order by rule number.
+    ruleNumber :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkAclEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlock', 'networkAclEntry_cidrBlock' - The IPv4 network range to allow or deny, in CIDR notation.
+--
+-- 'egress', 'networkAclEntry_egress' - Indicates whether the rule is an egress rule (applied to traffic leaving
+-- the subnet).
+--
+-- 'icmpTypeCode', 'networkAclEntry_icmpTypeCode' - ICMP protocol: The ICMP type and code.
+--
+-- 'ipv6CidrBlock', 'networkAclEntry_ipv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation.
+--
+-- 'portRange', 'networkAclEntry_portRange' - TCP or UDP protocols: The range of ports the rule applies to.
+--
+-- 'protocol', 'networkAclEntry_protocol' - The protocol number. A value of \"-1\" means all protocols.
+--
+-- 'ruleAction', 'networkAclEntry_ruleAction' - Indicates whether to allow or deny the traffic that matches the rule.
+--
+-- 'ruleNumber', 'networkAclEntry_ruleNumber' - The rule number for the entry. ACL entries are processed in ascending
+-- order by rule number.
+newNetworkAclEntry ::
+  NetworkAclEntry
+newNetworkAclEntry =
+  NetworkAclEntry'
+    { cidrBlock = Prelude.Nothing,
+      egress = Prelude.Nothing,
+      icmpTypeCode = Prelude.Nothing,
+      ipv6CidrBlock = Prelude.Nothing,
+      portRange = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      ruleAction = Prelude.Nothing,
+      ruleNumber = Prelude.Nothing
+    }
+
+-- | The IPv4 network range to allow or deny, in CIDR notation.
+networkAclEntry_cidrBlock :: Lens.Lens' NetworkAclEntry (Prelude.Maybe Prelude.Text)
+networkAclEntry_cidrBlock = Lens.lens (\NetworkAclEntry' {cidrBlock} -> cidrBlock) (\s@NetworkAclEntry' {} a -> s {cidrBlock = a} :: NetworkAclEntry)
+
+-- | Indicates whether the rule is an egress rule (applied to traffic leaving
+-- the subnet).
+networkAclEntry_egress :: Lens.Lens' NetworkAclEntry (Prelude.Maybe Prelude.Bool)
+networkAclEntry_egress = Lens.lens (\NetworkAclEntry' {egress} -> egress) (\s@NetworkAclEntry' {} a -> s {egress = a} :: NetworkAclEntry)
+
+-- | ICMP protocol: The ICMP type and code.
+networkAclEntry_icmpTypeCode :: Lens.Lens' NetworkAclEntry (Prelude.Maybe IcmpTypeCode)
+networkAclEntry_icmpTypeCode = Lens.lens (\NetworkAclEntry' {icmpTypeCode} -> icmpTypeCode) (\s@NetworkAclEntry' {} a -> s {icmpTypeCode = a} :: NetworkAclEntry)
+
+-- | The IPv6 network range to allow or deny, in CIDR notation.
+networkAclEntry_ipv6CidrBlock :: Lens.Lens' NetworkAclEntry (Prelude.Maybe Prelude.Text)
+networkAclEntry_ipv6CidrBlock = Lens.lens (\NetworkAclEntry' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@NetworkAclEntry' {} a -> s {ipv6CidrBlock = a} :: NetworkAclEntry)
+
+-- | TCP or UDP protocols: The range of ports the rule applies to.
+networkAclEntry_portRange :: Lens.Lens' NetworkAclEntry (Prelude.Maybe PortRange)
+networkAclEntry_portRange = Lens.lens (\NetworkAclEntry' {portRange} -> portRange) (\s@NetworkAclEntry' {} a -> s {portRange = a} :: NetworkAclEntry)
+
+-- | The protocol number. A value of \"-1\" means all protocols.
+networkAclEntry_protocol :: Lens.Lens' NetworkAclEntry (Prelude.Maybe Prelude.Text)
+networkAclEntry_protocol = Lens.lens (\NetworkAclEntry' {protocol} -> protocol) (\s@NetworkAclEntry' {} a -> s {protocol = a} :: NetworkAclEntry)
+
+-- | Indicates whether to allow or deny the traffic that matches the rule.
+networkAclEntry_ruleAction :: Lens.Lens' NetworkAclEntry (Prelude.Maybe RuleAction)
+networkAclEntry_ruleAction = Lens.lens (\NetworkAclEntry' {ruleAction} -> ruleAction) (\s@NetworkAclEntry' {} a -> s {ruleAction = a} :: NetworkAclEntry)
+
+-- | The rule number for the entry. ACL entries are processed in ascending
+-- order by rule number.
+networkAclEntry_ruleNumber :: Lens.Lens' NetworkAclEntry (Prelude.Maybe Prelude.Int)
+networkAclEntry_ruleNumber = Lens.lens (\NetworkAclEntry' {ruleNumber} -> ruleNumber) (\s@NetworkAclEntry' {} a -> s {ruleNumber = a} :: NetworkAclEntry)
+
+instance Data.FromXML NetworkAclEntry where
+  parseXML x =
+    NetworkAclEntry'
+      Prelude.<$> (x Data..@? "cidrBlock")
+      Prelude.<*> (x Data..@? "egress")
+      Prelude.<*> (x Data..@? "icmpTypeCode")
+      Prelude.<*> (x Data..@? "ipv6CidrBlock")
+      Prelude.<*> (x Data..@? "portRange")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "ruleAction")
+      Prelude.<*> (x Data..@? "ruleNumber")
+
+instance Prelude.Hashable NetworkAclEntry where
+  hashWithSalt _salt NetworkAclEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` egress
+      `Prelude.hashWithSalt` icmpTypeCode
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` portRange
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` ruleNumber
+
+instance Prelude.NFData NetworkAclEntry where
+  rnf NetworkAclEntry' {..} =
+    Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf egress
+      `Prelude.seq` Prelude.rnf icmpTypeCode
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf portRange
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf ruleNumber
diff --git a/gen/Amazonka/EC2/Types/NetworkBandwidthGbps.hs b/gen/Amazonka/EC2/Types/NetworkBandwidthGbps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkBandwidthGbps.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkBandwidthGbps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkBandwidthGbps where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of network bandwidth, in gigabits per
+-- second (Gbps).
+--
+-- Setting the minimum bandwidth does not guarantee that your instance will
+-- achieve the minimum bandwidth. Amazon EC2 will identify instance types
+-- that support the specified minimum bandwidth, but the actual bandwidth
+-- of your instance might go below the specified minimum at times. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth Available instance bandwidth>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newNetworkBandwidthGbps' smart constructor.
+data NetworkBandwidthGbps = NetworkBandwidthGbps'
+  { -- | The maximum amount of network bandwidth, in Gbps. If this parameter is
+    -- not specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The minimum amount of network bandwidth, in Gbps. If this parameter is
+    -- not specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkBandwidthGbps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'networkBandwidthGbps_max' - The maximum amount of network bandwidth, in Gbps. If this parameter is
+-- not specified, there is no maximum limit.
+--
+-- 'min', 'networkBandwidthGbps_min' - The minimum amount of network bandwidth, in Gbps. If this parameter is
+-- not specified, there is no minimum limit.
+newNetworkBandwidthGbps ::
+  NetworkBandwidthGbps
+newNetworkBandwidthGbps =
+  NetworkBandwidthGbps'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of network bandwidth, in Gbps. If this parameter is
+-- not specified, there is no maximum limit.
+networkBandwidthGbps_max :: Lens.Lens' NetworkBandwidthGbps (Prelude.Maybe Prelude.Double)
+networkBandwidthGbps_max = Lens.lens (\NetworkBandwidthGbps' {max} -> max) (\s@NetworkBandwidthGbps' {} a -> s {max = a} :: NetworkBandwidthGbps)
+
+-- | The minimum amount of network bandwidth, in Gbps. If this parameter is
+-- not specified, there is no minimum limit.
+networkBandwidthGbps_min :: Lens.Lens' NetworkBandwidthGbps (Prelude.Maybe Prelude.Double)
+networkBandwidthGbps_min = Lens.lens (\NetworkBandwidthGbps' {min} -> min) (\s@NetworkBandwidthGbps' {} a -> s {min = a} :: NetworkBandwidthGbps)
+
+instance Data.FromXML NetworkBandwidthGbps where
+  parseXML x =
+    NetworkBandwidthGbps'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable NetworkBandwidthGbps where
+  hashWithSalt _salt NetworkBandwidthGbps' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData NetworkBandwidthGbps where
+  rnf NetworkBandwidthGbps' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery NetworkBandwidthGbps where
+  toQuery NetworkBandwidthGbps' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/NetworkBandwidthGbpsRequest.hs b/gen/Amazonka/EC2/Types/NetworkBandwidthGbpsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkBandwidthGbpsRequest.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkBandwidthGbpsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkBandwidthGbpsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of network bandwidth, in gigabits per
+-- second (Gbps).
+--
+-- Setting the minimum bandwidth does not guarantee that your instance will
+-- achieve the minimum bandwidth. Amazon EC2 will identify instance types
+-- that support the specified minimum bandwidth, but the actual bandwidth
+-- of your instance might go below the specified minimum at times. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth Available instance bandwidth>
+-- in the /Amazon EC2 User Guide/.
+--
+-- /See:/ 'newNetworkBandwidthGbpsRequest' smart constructor.
+data NetworkBandwidthGbpsRequest = NetworkBandwidthGbpsRequest'
+  { -- | The maximum amount of network bandwidth, in Gbps. To specify no maximum
+    -- limit, omit this parameter.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The minimum amount of network bandwidth, in Gbps. To specify no minimum
+    -- limit, omit this parameter.
+    min :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkBandwidthGbpsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'networkBandwidthGbpsRequest_max' - The maximum amount of network bandwidth, in Gbps. To specify no maximum
+-- limit, omit this parameter.
+--
+-- 'min', 'networkBandwidthGbpsRequest_min' - The minimum amount of network bandwidth, in Gbps. To specify no minimum
+-- limit, omit this parameter.
+newNetworkBandwidthGbpsRequest ::
+  NetworkBandwidthGbpsRequest
+newNetworkBandwidthGbpsRequest =
+  NetworkBandwidthGbpsRequest'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of network bandwidth, in Gbps. To specify no maximum
+-- limit, omit this parameter.
+networkBandwidthGbpsRequest_max :: Lens.Lens' NetworkBandwidthGbpsRequest (Prelude.Maybe Prelude.Double)
+networkBandwidthGbpsRequest_max = Lens.lens (\NetworkBandwidthGbpsRequest' {max} -> max) (\s@NetworkBandwidthGbpsRequest' {} a -> s {max = a} :: NetworkBandwidthGbpsRequest)
+
+-- | The minimum amount of network bandwidth, in Gbps. To specify no minimum
+-- limit, omit this parameter.
+networkBandwidthGbpsRequest_min :: Lens.Lens' NetworkBandwidthGbpsRequest (Prelude.Maybe Prelude.Double)
+networkBandwidthGbpsRequest_min = Lens.lens (\NetworkBandwidthGbpsRequest' {min} -> min) (\s@NetworkBandwidthGbpsRequest' {} a -> s {min = a} :: NetworkBandwidthGbpsRequest)
+
+instance Prelude.Hashable NetworkBandwidthGbpsRequest where
+  hashWithSalt _salt NetworkBandwidthGbpsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData NetworkBandwidthGbpsRequest where
+  rnf NetworkBandwidthGbpsRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery NetworkBandwidthGbpsRequest where
+  toQuery NetworkBandwidthGbpsRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/NetworkCardInfo.hs b/gen/Amazonka/EC2/Types/NetworkCardInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkCardInfo.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkCardInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkCardInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the network card support of the instance type.
+--
+-- /See:/ 'newNetworkCardInfo' smart constructor.
+data NetworkCardInfo = NetworkCardInfo'
+  { -- | The maximum number of network interfaces for the network card.
+    maximumNetworkInterfaces :: Prelude.Maybe Prelude.Int,
+    -- | The index of the network card.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The network performance of the network card.
+    networkPerformance :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkCardInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maximumNetworkInterfaces', 'networkCardInfo_maximumNetworkInterfaces' - The maximum number of network interfaces for the network card.
+--
+-- 'networkCardIndex', 'networkCardInfo_networkCardIndex' - The index of the network card.
+--
+-- 'networkPerformance', 'networkCardInfo_networkPerformance' - The network performance of the network card.
+newNetworkCardInfo ::
+  NetworkCardInfo
+newNetworkCardInfo =
+  NetworkCardInfo'
+    { maximumNetworkInterfaces =
+        Prelude.Nothing,
+      networkCardIndex = Prelude.Nothing,
+      networkPerformance = Prelude.Nothing
+    }
+
+-- | The maximum number of network interfaces for the network card.
+networkCardInfo_maximumNetworkInterfaces :: Lens.Lens' NetworkCardInfo (Prelude.Maybe Prelude.Int)
+networkCardInfo_maximumNetworkInterfaces = Lens.lens (\NetworkCardInfo' {maximumNetworkInterfaces} -> maximumNetworkInterfaces) (\s@NetworkCardInfo' {} a -> s {maximumNetworkInterfaces = a} :: NetworkCardInfo)
+
+-- | The index of the network card.
+networkCardInfo_networkCardIndex :: Lens.Lens' NetworkCardInfo (Prelude.Maybe Prelude.Int)
+networkCardInfo_networkCardIndex = Lens.lens (\NetworkCardInfo' {networkCardIndex} -> networkCardIndex) (\s@NetworkCardInfo' {} a -> s {networkCardIndex = a} :: NetworkCardInfo)
+
+-- | The network performance of the network card.
+networkCardInfo_networkPerformance :: Lens.Lens' NetworkCardInfo (Prelude.Maybe Prelude.Text)
+networkCardInfo_networkPerformance = Lens.lens (\NetworkCardInfo' {networkPerformance} -> networkPerformance) (\s@NetworkCardInfo' {} a -> s {networkPerformance = a} :: NetworkCardInfo)
+
+instance Data.FromXML NetworkCardInfo where
+  parseXML x =
+    NetworkCardInfo'
+      Prelude.<$> (x Data..@? "maximumNetworkInterfaces")
+      Prelude.<*> (x Data..@? "networkCardIndex")
+      Prelude.<*> (x Data..@? "networkPerformance")
+
+instance Prelude.Hashable NetworkCardInfo where
+  hashWithSalt _salt NetworkCardInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` maximumNetworkInterfaces
+      `Prelude.hashWithSalt` networkCardIndex
+      `Prelude.hashWithSalt` networkPerformance
+
+instance Prelude.NFData NetworkCardInfo where
+  rnf NetworkCardInfo' {..} =
+    Prelude.rnf maximumNetworkInterfaces
+      `Prelude.seq` Prelude.rnf networkCardIndex
+      `Prelude.seq` Prelude.rnf networkPerformance
diff --git a/gen/Amazonka/EC2/Types/NetworkInfo.hs b/gen/Amazonka/EC2/Types/NetworkInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInfo.hs
@@ -0,0 +1,236 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.EfaInfo
+import Amazonka.EC2.Types.EnaSupport
+import Amazonka.EC2.Types.NetworkCardInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the networking features of the instance type.
+--
+-- /See:/ 'newNetworkInfo' smart constructor.
+data NetworkInfo = NetworkInfo'
+  { -- | The index of the default network card, starting at 0.
+    defaultNetworkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | Describes the Elastic Fabric Adapters for the instance type.
+    efaInfo :: Prelude.Maybe EfaInfo,
+    -- | Indicates whether Elastic Fabric Adapter (EFA) is supported.
+    efaSupported :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance type supports ENA Express. ENA Express
+    -- uses Amazon Web Services Scalable Reliable Datagram (SRD) technology to
+    -- increase the maximum bandwidth used per stream and minimize tail latency
+    -- of network traffic between EC2 instances.
+    enaSrdSupported :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether Elastic Network Adapter (ENA) is supported.
+    enaSupport :: Prelude.Maybe EnaSupport,
+    -- | Indicates whether the instance type automatically encrypts in-transit
+    -- traffic between instances.
+    encryptionInTransitSupported :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of IPv4 addresses per network interface.
+    ipv4AddressesPerInterface :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of IPv6 addresses per network interface.
+    ipv6AddressesPerInterface :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether IPv6 is supported.
+    ipv6Supported :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum number of physical network cards that can be allocated to
+    -- the instance.
+    maximumNetworkCards :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of network interfaces for the instance type.
+    maximumNetworkInterfaces :: Prelude.Maybe Prelude.Int,
+    -- | Describes the network cards for the instance type.
+    networkCards :: Prelude.Maybe [NetworkCardInfo],
+    -- | The network performance.
+    networkPerformance :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultNetworkCardIndex', 'networkInfo_defaultNetworkCardIndex' - The index of the default network card, starting at 0.
+--
+-- 'efaInfo', 'networkInfo_efaInfo' - Describes the Elastic Fabric Adapters for the instance type.
+--
+-- 'efaSupported', 'networkInfo_efaSupported' - Indicates whether Elastic Fabric Adapter (EFA) is supported.
+--
+-- 'enaSrdSupported', 'networkInfo_enaSrdSupported' - Indicates whether the instance type supports ENA Express. ENA Express
+-- uses Amazon Web Services Scalable Reliable Datagram (SRD) technology to
+-- increase the maximum bandwidth used per stream and minimize tail latency
+-- of network traffic between EC2 instances.
+--
+-- 'enaSupport', 'networkInfo_enaSupport' - Indicates whether Elastic Network Adapter (ENA) is supported.
+--
+-- 'encryptionInTransitSupported', 'networkInfo_encryptionInTransitSupported' - Indicates whether the instance type automatically encrypts in-transit
+-- traffic between instances.
+--
+-- 'ipv4AddressesPerInterface', 'networkInfo_ipv4AddressesPerInterface' - The maximum number of IPv4 addresses per network interface.
+--
+-- 'ipv6AddressesPerInterface', 'networkInfo_ipv6AddressesPerInterface' - The maximum number of IPv6 addresses per network interface.
+--
+-- 'ipv6Supported', 'networkInfo_ipv6Supported' - Indicates whether IPv6 is supported.
+--
+-- 'maximumNetworkCards', 'networkInfo_maximumNetworkCards' - The maximum number of physical network cards that can be allocated to
+-- the instance.
+--
+-- 'maximumNetworkInterfaces', 'networkInfo_maximumNetworkInterfaces' - The maximum number of network interfaces for the instance type.
+--
+-- 'networkCards', 'networkInfo_networkCards' - Describes the network cards for the instance type.
+--
+-- 'networkPerformance', 'networkInfo_networkPerformance' - The network performance.
+newNetworkInfo ::
+  NetworkInfo
+newNetworkInfo =
+  NetworkInfo'
+    { defaultNetworkCardIndex =
+        Prelude.Nothing,
+      efaInfo = Prelude.Nothing,
+      efaSupported = Prelude.Nothing,
+      enaSrdSupported = Prelude.Nothing,
+      enaSupport = Prelude.Nothing,
+      encryptionInTransitSupported = Prelude.Nothing,
+      ipv4AddressesPerInterface = Prelude.Nothing,
+      ipv6AddressesPerInterface = Prelude.Nothing,
+      ipv6Supported = Prelude.Nothing,
+      maximumNetworkCards = Prelude.Nothing,
+      maximumNetworkInterfaces = Prelude.Nothing,
+      networkCards = Prelude.Nothing,
+      networkPerformance = Prelude.Nothing
+    }
+
+-- | The index of the default network card, starting at 0.
+networkInfo_defaultNetworkCardIndex :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Int)
+networkInfo_defaultNetworkCardIndex = Lens.lens (\NetworkInfo' {defaultNetworkCardIndex} -> defaultNetworkCardIndex) (\s@NetworkInfo' {} a -> s {defaultNetworkCardIndex = a} :: NetworkInfo)
+
+-- | Describes the Elastic Fabric Adapters for the instance type.
+networkInfo_efaInfo :: Lens.Lens' NetworkInfo (Prelude.Maybe EfaInfo)
+networkInfo_efaInfo = Lens.lens (\NetworkInfo' {efaInfo} -> efaInfo) (\s@NetworkInfo' {} a -> s {efaInfo = a} :: NetworkInfo)
+
+-- | Indicates whether Elastic Fabric Adapter (EFA) is supported.
+networkInfo_efaSupported :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Bool)
+networkInfo_efaSupported = Lens.lens (\NetworkInfo' {efaSupported} -> efaSupported) (\s@NetworkInfo' {} a -> s {efaSupported = a} :: NetworkInfo)
+
+-- | Indicates whether the instance type supports ENA Express. ENA Express
+-- uses Amazon Web Services Scalable Reliable Datagram (SRD) technology to
+-- increase the maximum bandwidth used per stream and minimize tail latency
+-- of network traffic between EC2 instances.
+networkInfo_enaSrdSupported :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Bool)
+networkInfo_enaSrdSupported = Lens.lens (\NetworkInfo' {enaSrdSupported} -> enaSrdSupported) (\s@NetworkInfo' {} a -> s {enaSrdSupported = a} :: NetworkInfo)
+
+-- | Indicates whether Elastic Network Adapter (ENA) is supported.
+networkInfo_enaSupport :: Lens.Lens' NetworkInfo (Prelude.Maybe EnaSupport)
+networkInfo_enaSupport = Lens.lens (\NetworkInfo' {enaSupport} -> enaSupport) (\s@NetworkInfo' {} a -> s {enaSupport = a} :: NetworkInfo)
+
+-- | Indicates whether the instance type automatically encrypts in-transit
+-- traffic between instances.
+networkInfo_encryptionInTransitSupported :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Bool)
+networkInfo_encryptionInTransitSupported = Lens.lens (\NetworkInfo' {encryptionInTransitSupported} -> encryptionInTransitSupported) (\s@NetworkInfo' {} a -> s {encryptionInTransitSupported = a} :: NetworkInfo)
+
+-- | The maximum number of IPv4 addresses per network interface.
+networkInfo_ipv4AddressesPerInterface :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Int)
+networkInfo_ipv4AddressesPerInterface = Lens.lens (\NetworkInfo' {ipv4AddressesPerInterface} -> ipv4AddressesPerInterface) (\s@NetworkInfo' {} a -> s {ipv4AddressesPerInterface = a} :: NetworkInfo)
+
+-- | The maximum number of IPv6 addresses per network interface.
+networkInfo_ipv6AddressesPerInterface :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Int)
+networkInfo_ipv6AddressesPerInterface = Lens.lens (\NetworkInfo' {ipv6AddressesPerInterface} -> ipv6AddressesPerInterface) (\s@NetworkInfo' {} a -> s {ipv6AddressesPerInterface = a} :: NetworkInfo)
+
+-- | Indicates whether IPv6 is supported.
+networkInfo_ipv6Supported :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Bool)
+networkInfo_ipv6Supported = Lens.lens (\NetworkInfo' {ipv6Supported} -> ipv6Supported) (\s@NetworkInfo' {} a -> s {ipv6Supported = a} :: NetworkInfo)
+
+-- | The maximum number of physical network cards that can be allocated to
+-- the instance.
+networkInfo_maximumNetworkCards :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Int)
+networkInfo_maximumNetworkCards = Lens.lens (\NetworkInfo' {maximumNetworkCards} -> maximumNetworkCards) (\s@NetworkInfo' {} a -> s {maximumNetworkCards = a} :: NetworkInfo)
+
+-- | The maximum number of network interfaces for the instance type.
+networkInfo_maximumNetworkInterfaces :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Int)
+networkInfo_maximumNetworkInterfaces = Lens.lens (\NetworkInfo' {maximumNetworkInterfaces} -> maximumNetworkInterfaces) (\s@NetworkInfo' {} a -> s {maximumNetworkInterfaces = a} :: NetworkInfo)
+
+-- | Describes the network cards for the instance type.
+networkInfo_networkCards :: Lens.Lens' NetworkInfo (Prelude.Maybe [NetworkCardInfo])
+networkInfo_networkCards = Lens.lens (\NetworkInfo' {networkCards} -> networkCards) (\s@NetworkInfo' {} a -> s {networkCards = a} :: NetworkInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The network performance.
+networkInfo_networkPerformance :: Lens.Lens' NetworkInfo (Prelude.Maybe Prelude.Text)
+networkInfo_networkPerformance = Lens.lens (\NetworkInfo' {networkPerformance} -> networkPerformance) (\s@NetworkInfo' {} a -> s {networkPerformance = a} :: NetworkInfo)
+
+instance Data.FromXML NetworkInfo where
+  parseXML x =
+    NetworkInfo'
+      Prelude.<$> (x Data..@? "defaultNetworkCardIndex")
+      Prelude.<*> (x Data..@? "efaInfo")
+      Prelude.<*> (x Data..@? "efaSupported")
+      Prelude.<*> (x Data..@? "enaSrdSupported")
+      Prelude.<*> (x Data..@? "enaSupport")
+      Prelude.<*> (x Data..@? "encryptionInTransitSupported")
+      Prelude.<*> (x Data..@? "ipv4AddressesPerInterface")
+      Prelude.<*> (x Data..@? "ipv6AddressesPerInterface")
+      Prelude.<*> (x Data..@? "ipv6Supported")
+      Prelude.<*> (x Data..@? "maximumNetworkCards")
+      Prelude.<*> (x Data..@? "maximumNetworkInterfaces")
+      Prelude.<*> ( x
+                      Data..@? "networkCards"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "networkPerformance")
+
+instance Prelude.Hashable NetworkInfo where
+  hashWithSalt _salt NetworkInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultNetworkCardIndex
+      `Prelude.hashWithSalt` efaInfo
+      `Prelude.hashWithSalt` efaSupported
+      `Prelude.hashWithSalt` enaSrdSupported
+      `Prelude.hashWithSalt` enaSupport
+      `Prelude.hashWithSalt` encryptionInTransitSupported
+      `Prelude.hashWithSalt` ipv4AddressesPerInterface
+      `Prelude.hashWithSalt` ipv6AddressesPerInterface
+      `Prelude.hashWithSalt` ipv6Supported
+      `Prelude.hashWithSalt` maximumNetworkCards
+      `Prelude.hashWithSalt` maximumNetworkInterfaces
+      `Prelude.hashWithSalt` networkCards
+      `Prelude.hashWithSalt` networkPerformance
+
+instance Prelude.NFData NetworkInfo where
+  rnf NetworkInfo' {..} =
+    Prelude.rnf defaultNetworkCardIndex
+      `Prelude.seq` Prelude.rnf efaInfo
+      `Prelude.seq` Prelude.rnf efaSupported
+      `Prelude.seq` Prelude.rnf enaSrdSupported
+      `Prelude.seq` Prelude.rnf enaSupport
+      `Prelude.seq` Prelude.rnf encryptionInTransitSupported
+      `Prelude.seq` Prelude.rnf ipv4AddressesPerInterface
+      `Prelude.seq` Prelude.rnf ipv6AddressesPerInterface
+      `Prelude.seq` Prelude.rnf ipv6Supported
+      `Prelude.seq` Prelude.rnf maximumNetworkCards
+      `Prelude.seq` Prelude.rnf maximumNetworkInterfaces
+      `Prelude.seq` Prelude.rnf networkCards
+      `Prelude.seq` Prelude.rnf networkPerformance
diff --git a/gen/Amazonka/EC2/Types/NetworkInsightsAccessScope.hs b/gen/Amazonka/EC2/Types/NetworkInsightsAccessScope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInsightsAccessScope.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInsightsAccessScope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInsightsAccessScope where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Network Access Scope.
+--
+-- /See:/ 'newNetworkInsightsAccessScope' smart constructor.
+data NetworkInsightsAccessScope = NetworkInsightsAccessScope'
+  { -- | The creation date.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) of the Network Access Scope.
+    networkInsightsAccessScopeArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The last updated date.
+    updatedDate :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInsightsAccessScope' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'networkInsightsAccessScope_createdDate' - The creation date.
+--
+-- 'networkInsightsAccessScopeArn', 'networkInsightsAccessScope_networkInsightsAccessScopeArn' - The Amazon Resource Name (ARN) of the Network Access Scope.
+--
+-- 'networkInsightsAccessScopeId', 'networkInsightsAccessScope_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+--
+-- 'tags', 'networkInsightsAccessScope_tags' - The tags.
+--
+-- 'updatedDate', 'networkInsightsAccessScope_updatedDate' - The last updated date.
+newNetworkInsightsAccessScope ::
+  NetworkInsightsAccessScope
+newNetworkInsightsAccessScope =
+  NetworkInsightsAccessScope'
+    { createdDate =
+        Prelude.Nothing,
+      networkInsightsAccessScopeArn = Prelude.Nothing,
+      networkInsightsAccessScopeId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updatedDate = Prelude.Nothing
+    }
+
+-- | The creation date.
+networkInsightsAccessScope_createdDate :: Lens.Lens' NetworkInsightsAccessScope (Prelude.Maybe Prelude.UTCTime)
+networkInsightsAccessScope_createdDate = Lens.lens (\NetworkInsightsAccessScope' {createdDate} -> createdDate) (\s@NetworkInsightsAccessScope' {} a -> s {createdDate = a} :: NetworkInsightsAccessScope) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of the Network Access Scope.
+networkInsightsAccessScope_networkInsightsAccessScopeArn :: Lens.Lens' NetworkInsightsAccessScope (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScope_networkInsightsAccessScopeArn = Lens.lens (\NetworkInsightsAccessScope' {networkInsightsAccessScopeArn} -> networkInsightsAccessScopeArn) (\s@NetworkInsightsAccessScope' {} a -> s {networkInsightsAccessScopeArn = a} :: NetworkInsightsAccessScope)
+
+-- | The ID of the Network Access Scope.
+networkInsightsAccessScope_networkInsightsAccessScopeId :: Lens.Lens' NetworkInsightsAccessScope (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScope_networkInsightsAccessScopeId = Lens.lens (\NetworkInsightsAccessScope' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@NetworkInsightsAccessScope' {} a -> s {networkInsightsAccessScopeId = a} :: NetworkInsightsAccessScope)
+
+-- | The tags.
+networkInsightsAccessScope_tags :: Lens.Lens' NetworkInsightsAccessScope (Prelude.Maybe [Tag])
+networkInsightsAccessScope_tags = Lens.lens (\NetworkInsightsAccessScope' {tags} -> tags) (\s@NetworkInsightsAccessScope' {} a -> s {tags = a} :: NetworkInsightsAccessScope) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last updated date.
+networkInsightsAccessScope_updatedDate :: Lens.Lens' NetworkInsightsAccessScope (Prelude.Maybe Prelude.UTCTime)
+networkInsightsAccessScope_updatedDate = Lens.lens (\NetworkInsightsAccessScope' {updatedDate} -> updatedDate) (\s@NetworkInsightsAccessScope' {} a -> s {updatedDate = a} :: NetworkInsightsAccessScope) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML NetworkInsightsAccessScope where
+  parseXML x =
+    NetworkInsightsAccessScope'
+      Prelude.<$> (x Data..@? "createdDate")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeArn")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "updatedDate")
+
+instance Prelude.Hashable NetworkInsightsAccessScope where
+  hashWithSalt _salt NetworkInsightsAccessScope' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` networkInsightsAccessScopeArn
+      `Prelude.hashWithSalt` networkInsightsAccessScopeId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` updatedDate
+
+instance Prelude.NFData NetworkInsightsAccessScope where
+  rnf NetworkInsightsAccessScope' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeArn
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updatedDate
diff --git a/gen/Amazonka/EC2/Types/NetworkInsightsAccessScopeAnalysis.hs b/gen/Amazonka/EC2/Types/NetworkInsightsAccessScopeAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInsightsAccessScopeAnalysis.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInsightsAccessScopeAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInsightsAccessScopeAnalysis where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AnalysisStatus
+import Amazonka.EC2.Types.FindingsFound
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Network Access Scope analysis.
+--
+-- /See:/ 'newNetworkInsightsAccessScopeAnalysis' smart constructor.
+data NetworkInsightsAccessScopeAnalysis = NetworkInsightsAccessScopeAnalysis'
+  { -- | The number of network interfaces analyzed.
+    analyzedEniCount :: Prelude.Maybe Prelude.Int,
+    -- | The analysis end date.
+    endDate :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether there are findings.
+    findingsFound :: Prelude.Maybe FindingsFound,
+    -- | The Amazon Resource Name (ARN) of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Network Access Scope analysis.
+    networkInsightsAccessScopeAnalysisId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Maybe Prelude.Text,
+    -- | The analysis start date.
+    startDate :: Prelude.Maybe Data.ISO8601,
+    -- | The status.
+    status :: Prelude.Maybe AnalysisStatus,
+    -- | The status message.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The warning message.
+    warningMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInsightsAccessScopeAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'analyzedEniCount', 'networkInsightsAccessScopeAnalysis_analyzedEniCount' - The number of network interfaces analyzed.
+--
+-- 'endDate', 'networkInsightsAccessScopeAnalysis_endDate' - The analysis end date.
+--
+-- 'findingsFound', 'networkInsightsAccessScopeAnalysis_findingsFound' - Indicates whether there are findings.
+--
+-- 'networkInsightsAccessScopeAnalysisArn', 'networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisArn' - The Amazon Resource Name (ARN) of the Network Access Scope analysis.
+--
+-- 'networkInsightsAccessScopeAnalysisId', 'networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId' - The ID of the Network Access Scope analysis.
+--
+-- 'networkInsightsAccessScopeId', 'networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+--
+-- 'startDate', 'networkInsightsAccessScopeAnalysis_startDate' - The analysis start date.
+--
+-- 'status', 'networkInsightsAccessScopeAnalysis_status' - The status.
+--
+-- 'statusMessage', 'networkInsightsAccessScopeAnalysis_statusMessage' - The status message.
+--
+-- 'tags', 'networkInsightsAccessScopeAnalysis_tags' - The tags.
+--
+-- 'warningMessage', 'networkInsightsAccessScopeAnalysis_warningMessage' - The warning message.
+newNetworkInsightsAccessScopeAnalysis ::
+  NetworkInsightsAccessScopeAnalysis
+newNetworkInsightsAccessScopeAnalysis =
+  NetworkInsightsAccessScopeAnalysis'
+    { analyzedEniCount =
+        Prelude.Nothing,
+      endDate = Prelude.Nothing,
+      findingsFound = Prelude.Nothing,
+      networkInsightsAccessScopeAnalysisArn =
+        Prelude.Nothing,
+      networkInsightsAccessScopeAnalysisId =
+        Prelude.Nothing,
+      networkInsightsAccessScopeId =
+        Prelude.Nothing,
+      startDate = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      warningMessage = Prelude.Nothing
+    }
+
+-- | The number of network interfaces analyzed.
+networkInsightsAccessScopeAnalysis_analyzedEniCount :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Int)
+networkInsightsAccessScopeAnalysis_analyzedEniCount = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {analyzedEniCount} -> analyzedEniCount) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {analyzedEniCount = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The analysis end date.
+networkInsightsAccessScopeAnalysis_endDate :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.UTCTime)
+networkInsightsAccessScopeAnalysis_endDate = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {endDate} -> endDate) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {endDate = a} :: NetworkInsightsAccessScopeAnalysis) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether there are findings.
+networkInsightsAccessScopeAnalysis_findingsFound :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe FindingsFound)
+networkInsightsAccessScopeAnalysis_findingsFound = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {findingsFound} -> findingsFound) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {findingsFound = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The Amazon Resource Name (ARN) of the Network Access Scope analysis.
+networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisArn :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisArn = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {networkInsightsAccessScopeAnalysisArn} -> networkInsightsAccessScopeAnalysisArn) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {networkInsightsAccessScopeAnalysisArn = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The ID of the Network Access Scope analysis.
+networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeAnalysisId = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {networkInsightsAccessScopeAnalysisId} -> networkInsightsAccessScopeAnalysisId) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {networkInsightsAccessScopeAnalysisId = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The ID of the Network Access Scope.
+networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScopeAnalysis_networkInsightsAccessScopeId = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {networkInsightsAccessScopeId = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The analysis start date.
+networkInsightsAccessScopeAnalysis_startDate :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.UTCTime)
+networkInsightsAccessScopeAnalysis_startDate = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {startDate} -> startDate) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {startDate = a} :: NetworkInsightsAccessScopeAnalysis) Prelude.. Lens.mapping Data._Time
+
+-- | The status.
+networkInsightsAccessScopeAnalysis_status :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe AnalysisStatus)
+networkInsightsAccessScopeAnalysis_status = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {status} -> status) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {status = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The status message.
+networkInsightsAccessScopeAnalysis_statusMessage :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScopeAnalysis_statusMessage = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {statusMessage} -> statusMessage) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {statusMessage = a} :: NetworkInsightsAccessScopeAnalysis)
+
+-- | The tags.
+networkInsightsAccessScopeAnalysis_tags :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe [Tag])
+networkInsightsAccessScopeAnalysis_tags = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {tags} -> tags) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {tags = a} :: NetworkInsightsAccessScopeAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The warning message.
+networkInsightsAccessScopeAnalysis_warningMessage :: Lens.Lens' NetworkInsightsAccessScopeAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScopeAnalysis_warningMessage = Lens.lens (\NetworkInsightsAccessScopeAnalysis' {warningMessage} -> warningMessage) (\s@NetworkInsightsAccessScopeAnalysis' {} a -> s {warningMessage = a} :: NetworkInsightsAccessScopeAnalysis)
+
+instance
+  Data.FromXML
+    NetworkInsightsAccessScopeAnalysis
+  where
+  parseXML x =
+    NetworkInsightsAccessScopeAnalysis'
+      Prelude.<$> (x Data..@? "analyzedEniCount")
+      Prelude.<*> (x Data..@? "endDate")
+      Prelude.<*> (x Data..@? "findingsFound")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeAnalysisArn")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeAnalysisId")
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeId")
+      Prelude.<*> (x Data..@? "startDate")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "warningMessage")
+
+instance
+  Prelude.Hashable
+    NetworkInsightsAccessScopeAnalysis
+  where
+  hashWithSalt
+    _salt
+    NetworkInsightsAccessScopeAnalysis' {..} =
+      _salt
+        `Prelude.hashWithSalt` analyzedEniCount
+        `Prelude.hashWithSalt` endDate
+        `Prelude.hashWithSalt` findingsFound
+        `Prelude.hashWithSalt` networkInsightsAccessScopeAnalysisArn
+        `Prelude.hashWithSalt` networkInsightsAccessScopeAnalysisId
+        `Prelude.hashWithSalt` networkInsightsAccessScopeId
+        `Prelude.hashWithSalt` startDate
+        `Prelude.hashWithSalt` status
+        `Prelude.hashWithSalt` statusMessage
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` warningMessage
+
+instance
+  Prelude.NFData
+    NetworkInsightsAccessScopeAnalysis
+  where
+  rnf NetworkInsightsAccessScopeAnalysis' {..} =
+    Prelude.rnf analyzedEniCount
+      `Prelude.seq` Prelude.rnf endDate
+      `Prelude.seq` Prelude.rnf findingsFound
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisArn
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeAnalysisId
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf warningMessage
diff --git a/gen/Amazonka/EC2/Types/NetworkInsightsAccessScopeContent.hs b/gen/Amazonka/EC2/Types/NetworkInsightsAccessScopeContent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInsightsAccessScopeContent.hs
@@ -0,0 +1,115 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInsightsAccessScopeContent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInsightsAccessScopeContent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AccessScopePath
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Network Access Scope content.
+--
+-- /See:/ 'newNetworkInsightsAccessScopeContent' smart constructor.
+data NetworkInsightsAccessScopeContent = NetworkInsightsAccessScopeContent'
+  { -- | The paths to exclude.
+    excludePaths :: Prelude.Maybe [AccessScopePath],
+    -- | The paths to match.
+    matchPaths :: Prelude.Maybe [AccessScopePath],
+    -- | The ID of the Network Access Scope.
+    networkInsightsAccessScopeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInsightsAccessScopeContent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excludePaths', 'networkInsightsAccessScopeContent_excludePaths' - The paths to exclude.
+--
+-- 'matchPaths', 'networkInsightsAccessScopeContent_matchPaths' - The paths to match.
+--
+-- 'networkInsightsAccessScopeId', 'networkInsightsAccessScopeContent_networkInsightsAccessScopeId' - The ID of the Network Access Scope.
+newNetworkInsightsAccessScopeContent ::
+  NetworkInsightsAccessScopeContent
+newNetworkInsightsAccessScopeContent =
+  NetworkInsightsAccessScopeContent'
+    { excludePaths =
+        Prelude.Nothing,
+      matchPaths = Prelude.Nothing,
+      networkInsightsAccessScopeId =
+        Prelude.Nothing
+    }
+
+-- | The paths to exclude.
+networkInsightsAccessScopeContent_excludePaths :: Lens.Lens' NetworkInsightsAccessScopeContent (Prelude.Maybe [AccessScopePath])
+networkInsightsAccessScopeContent_excludePaths = Lens.lens (\NetworkInsightsAccessScopeContent' {excludePaths} -> excludePaths) (\s@NetworkInsightsAccessScopeContent' {} a -> s {excludePaths = a} :: NetworkInsightsAccessScopeContent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The paths to match.
+networkInsightsAccessScopeContent_matchPaths :: Lens.Lens' NetworkInsightsAccessScopeContent (Prelude.Maybe [AccessScopePath])
+networkInsightsAccessScopeContent_matchPaths = Lens.lens (\NetworkInsightsAccessScopeContent' {matchPaths} -> matchPaths) (\s@NetworkInsightsAccessScopeContent' {} a -> s {matchPaths = a} :: NetworkInsightsAccessScopeContent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Network Access Scope.
+networkInsightsAccessScopeContent_networkInsightsAccessScopeId :: Lens.Lens' NetworkInsightsAccessScopeContent (Prelude.Maybe Prelude.Text)
+networkInsightsAccessScopeContent_networkInsightsAccessScopeId = Lens.lens (\NetworkInsightsAccessScopeContent' {networkInsightsAccessScopeId} -> networkInsightsAccessScopeId) (\s@NetworkInsightsAccessScopeContent' {} a -> s {networkInsightsAccessScopeId = a} :: NetworkInsightsAccessScopeContent)
+
+instance
+  Data.FromXML
+    NetworkInsightsAccessScopeContent
+  where
+  parseXML x =
+    NetworkInsightsAccessScopeContent'
+      Prelude.<$> ( x
+                      Data..@? "excludePathSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "matchPathSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "networkInsightsAccessScopeId")
+
+instance
+  Prelude.Hashable
+    NetworkInsightsAccessScopeContent
+  where
+  hashWithSalt
+    _salt
+    NetworkInsightsAccessScopeContent' {..} =
+      _salt
+        `Prelude.hashWithSalt` excludePaths
+        `Prelude.hashWithSalt` matchPaths
+        `Prelude.hashWithSalt` networkInsightsAccessScopeId
+
+instance
+  Prelude.NFData
+    NetworkInsightsAccessScopeContent
+  where
+  rnf NetworkInsightsAccessScopeContent' {..} =
+    Prelude.rnf excludePaths
+      `Prelude.seq` Prelude.rnf matchPaths
+      `Prelude.seq` Prelude.rnf networkInsightsAccessScopeId
diff --git a/gen/Amazonka/EC2/Types/NetworkInsightsAnalysis.hs b/gen/Amazonka/EC2/Types/NetworkInsightsAnalysis.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInsightsAnalysis.hs
@@ -0,0 +1,293 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInsightsAnalysis
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInsightsAnalysis where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AlternatePathHint
+import Amazonka.EC2.Types.AnalysisStatus
+import Amazonka.EC2.Types.Explanation
+import Amazonka.EC2.Types.PathComponent
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network insights analysis.
+--
+-- /See:/ 'newNetworkInsightsAnalysis' smart constructor.
+data NetworkInsightsAnalysis = NetworkInsightsAnalysis'
+  { -- | The member accounts that contain resources that the path can traverse.
+    additionalAccounts :: Prelude.Maybe [Prelude.Text],
+    -- | Potential intermediate components.
+    alternatePathHints :: Prelude.Maybe [AlternatePathHint],
+    -- | The explanations. For more information, see
+    -- <https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html Reachability Analyzer explanation codes>.
+    explanations :: Prelude.Maybe [Explanation],
+    -- | The Amazon Resource Names (ARN) of the Amazon Web Services resources
+    -- that the path must traverse.
+    filterInArns :: Prelude.Maybe [Prelude.Text],
+    -- | The components in the path from source to destination.
+    forwardPathComponents :: Prelude.Maybe [PathComponent],
+    -- | The Amazon Resource Name (ARN) of the network insights analysis.
+    networkInsightsAnalysisArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network insights analysis.
+    networkInsightsAnalysisId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the path.
+    networkInsightsPathId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the destination is reachable from the source.
+    networkPathFound :: Prelude.Maybe Prelude.Bool,
+    -- | The components in the path from destination to source.
+    returnPathComponents :: Prelude.Maybe [PathComponent],
+    -- | The time the analysis started.
+    startDate :: Prelude.Maybe Data.ISO8601,
+    -- | The status of the network insights analysis.
+    status :: Prelude.Maybe AnalysisStatus,
+    -- | The status message, if the status is @failed@.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Potential intermediate accounts.
+    suggestedAccounts :: Prelude.Maybe [Prelude.Text],
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The warning message.
+    warningMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInsightsAnalysis' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'additionalAccounts', 'networkInsightsAnalysis_additionalAccounts' - The member accounts that contain resources that the path can traverse.
+--
+-- 'alternatePathHints', 'networkInsightsAnalysis_alternatePathHints' - Potential intermediate components.
+--
+-- 'explanations', 'networkInsightsAnalysis_explanations' - The explanations. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html Reachability Analyzer explanation codes>.
+--
+-- 'filterInArns', 'networkInsightsAnalysis_filterInArns' - The Amazon Resource Names (ARN) of the Amazon Web Services resources
+-- that the path must traverse.
+--
+-- 'forwardPathComponents', 'networkInsightsAnalysis_forwardPathComponents' - The components in the path from source to destination.
+--
+-- 'networkInsightsAnalysisArn', 'networkInsightsAnalysis_networkInsightsAnalysisArn' - The Amazon Resource Name (ARN) of the network insights analysis.
+--
+-- 'networkInsightsAnalysisId', 'networkInsightsAnalysis_networkInsightsAnalysisId' - The ID of the network insights analysis.
+--
+-- 'networkInsightsPathId', 'networkInsightsAnalysis_networkInsightsPathId' - The ID of the path.
+--
+-- 'networkPathFound', 'networkInsightsAnalysis_networkPathFound' - Indicates whether the destination is reachable from the source.
+--
+-- 'returnPathComponents', 'networkInsightsAnalysis_returnPathComponents' - The components in the path from destination to source.
+--
+-- 'startDate', 'networkInsightsAnalysis_startDate' - The time the analysis started.
+--
+-- 'status', 'networkInsightsAnalysis_status' - The status of the network insights analysis.
+--
+-- 'statusMessage', 'networkInsightsAnalysis_statusMessage' - The status message, if the status is @failed@.
+--
+-- 'suggestedAccounts', 'networkInsightsAnalysis_suggestedAccounts' - Potential intermediate accounts.
+--
+-- 'tags', 'networkInsightsAnalysis_tags' - The tags.
+--
+-- 'warningMessage', 'networkInsightsAnalysis_warningMessage' - The warning message.
+newNetworkInsightsAnalysis ::
+  NetworkInsightsAnalysis
+newNetworkInsightsAnalysis =
+  NetworkInsightsAnalysis'
+    { additionalAccounts =
+        Prelude.Nothing,
+      alternatePathHints = Prelude.Nothing,
+      explanations = Prelude.Nothing,
+      filterInArns = Prelude.Nothing,
+      forwardPathComponents = Prelude.Nothing,
+      networkInsightsAnalysisArn = Prelude.Nothing,
+      networkInsightsAnalysisId = Prelude.Nothing,
+      networkInsightsPathId = Prelude.Nothing,
+      networkPathFound = Prelude.Nothing,
+      returnPathComponents = Prelude.Nothing,
+      startDate = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      suggestedAccounts = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      warningMessage = Prelude.Nothing
+    }
+
+-- | The member accounts that contain resources that the path can traverse.
+networkInsightsAnalysis_additionalAccounts :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [Prelude.Text])
+networkInsightsAnalysis_additionalAccounts = Lens.lens (\NetworkInsightsAnalysis' {additionalAccounts} -> additionalAccounts) (\s@NetworkInsightsAnalysis' {} a -> s {additionalAccounts = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | Potential intermediate components.
+networkInsightsAnalysis_alternatePathHints :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [AlternatePathHint])
+networkInsightsAnalysis_alternatePathHints = Lens.lens (\NetworkInsightsAnalysis' {alternatePathHints} -> alternatePathHints) (\s@NetworkInsightsAnalysis' {} a -> s {alternatePathHints = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The explanations. For more information, see
+-- <https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html Reachability Analyzer explanation codes>.
+networkInsightsAnalysis_explanations :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [Explanation])
+networkInsightsAnalysis_explanations = Lens.lens (\NetworkInsightsAnalysis' {explanations} -> explanations) (\s@NetworkInsightsAnalysis' {} a -> s {explanations = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARN) of the Amazon Web Services resources
+-- that the path must traverse.
+networkInsightsAnalysis_filterInArns :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [Prelude.Text])
+networkInsightsAnalysis_filterInArns = Lens.lens (\NetworkInsightsAnalysis' {filterInArns} -> filterInArns) (\s@NetworkInsightsAnalysis' {} a -> s {filterInArns = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The components in the path from source to destination.
+networkInsightsAnalysis_forwardPathComponents :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [PathComponent])
+networkInsightsAnalysis_forwardPathComponents = Lens.lens (\NetworkInsightsAnalysis' {forwardPathComponents} -> forwardPathComponents) (\s@NetworkInsightsAnalysis' {} a -> s {forwardPathComponents = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the network insights analysis.
+networkInsightsAnalysis_networkInsightsAnalysisArn :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAnalysis_networkInsightsAnalysisArn = Lens.lens (\NetworkInsightsAnalysis' {networkInsightsAnalysisArn} -> networkInsightsAnalysisArn) (\s@NetworkInsightsAnalysis' {} a -> s {networkInsightsAnalysisArn = a} :: NetworkInsightsAnalysis)
+
+-- | The ID of the network insights analysis.
+networkInsightsAnalysis_networkInsightsAnalysisId :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAnalysis_networkInsightsAnalysisId = Lens.lens (\NetworkInsightsAnalysis' {networkInsightsAnalysisId} -> networkInsightsAnalysisId) (\s@NetworkInsightsAnalysis' {} a -> s {networkInsightsAnalysisId = a} :: NetworkInsightsAnalysis)
+
+-- | The ID of the path.
+networkInsightsAnalysis_networkInsightsPathId :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAnalysis_networkInsightsPathId = Lens.lens (\NetworkInsightsAnalysis' {networkInsightsPathId} -> networkInsightsPathId) (\s@NetworkInsightsAnalysis' {} a -> s {networkInsightsPathId = a} :: NetworkInsightsAnalysis)
+
+-- | Indicates whether the destination is reachable from the source.
+networkInsightsAnalysis_networkPathFound :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.Bool)
+networkInsightsAnalysis_networkPathFound = Lens.lens (\NetworkInsightsAnalysis' {networkPathFound} -> networkPathFound) (\s@NetworkInsightsAnalysis' {} a -> s {networkPathFound = a} :: NetworkInsightsAnalysis)
+
+-- | The components in the path from destination to source.
+networkInsightsAnalysis_returnPathComponents :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [PathComponent])
+networkInsightsAnalysis_returnPathComponents = Lens.lens (\NetworkInsightsAnalysis' {returnPathComponents} -> returnPathComponents) (\s@NetworkInsightsAnalysis' {} a -> s {returnPathComponents = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time the analysis started.
+networkInsightsAnalysis_startDate :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.UTCTime)
+networkInsightsAnalysis_startDate = Lens.lens (\NetworkInsightsAnalysis' {startDate} -> startDate) (\s@NetworkInsightsAnalysis' {} a -> s {startDate = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the network insights analysis.
+networkInsightsAnalysis_status :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe AnalysisStatus)
+networkInsightsAnalysis_status = Lens.lens (\NetworkInsightsAnalysis' {status} -> status) (\s@NetworkInsightsAnalysis' {} a -> s {status = a} :: NetworkInsightsAnalysis)
+
+-- | The status message, if the status is @failed@.
+networkInsightsAnalysis_statusMessage :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAnalysis_statusMessage = Lens.lens (\NetworkInsightsAnalysis' {statusMessage} -> statusMessage) (\s@NetworkInsightsAnalysis' {} a -> s {statusMessage = a} :: NetworkInsightsAnalysis)
+
+-- | Potential intermediate accounts.
+networkInsightsAnalysis_suggestedAccounts :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [Prelude.Text])
+networkInsightsAnalysis_suggestedAccounts = Lens.lens (\NetworkInsightsAnalysis' {suggestedAccounts} -> suggestedAccounts) (\s@NetworkInsightsAnalysis' {} a -> s {suggestedAccounts = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags.
+networkInsightsAnalysis_tags :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe [Tag])
+networkInsightsAnalysis_tags = Lens.lens (\NetworkInsightsAnalysis' {tags} -> tags) (\s@NetworkInsightsAnalysis' {} a -> s {tags = a} :: NetworkInsightsAnalysis) Prelude.. Lens.mapping Lens.coerced
+
+-- | The warning message.
+networkInsightsAnalysis_warningMessage :: Lens.Lens' NetworkInsightsAnalysis (Prelude.Maybe Prelude.Text)
+networkInsightsAnalysis_warningMessage = Lens.lens (\NetworkInsightsAnalysis' {warningMessage} -> warningMessage) (\s@NetworkInsightsAnalysis' {} a -> s {warningMessage = a} :: NetworkInsightsAnalysis)
+
+instance Data.FromXML NetworkInsightsAnalysis where
+  parseXML x =
+    NetworkInsightsAnalysis'
+      Prelude.<$> ( x
+                      Data..@? "additionalAccountSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "alternatePathHintSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "explanationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "filterInArnSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "forwardPathComponentSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "networkInsightsAnalysisArn")
+      Prelude.<*> (x Data..@? "networkInsightsAnalysisId")
+      Prelude.<*> (x Data..@? "networkInsightsPathId")
+      Prelude.<*> (x Data..@? "networkPathFound")
+      Prelude.<*> ( x
+                      Data..@? "returnPathComponentSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "startDate")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> ( x
+                      Data..@? "suggestedAccountSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "warningMessage")
+
+instance Prelude.Hashable NetworkInsightsAnalysis where
+  hashWithSalt _salt NetworkInsightsAnalysis' {..} =
+    _salt
+      `Prelude.hashWithSalt` additionalAccounts
+      `Prelude.hashWithSalt` alternatePathHints
+      `Prelude.hashWithSalt` explanations
+      `Prelude.hashWithSalt` filterInArns
+      `Prelude.hashWithSalt` forwardPathComponents
+      `Prelude.hashWithSalt` networkInsightsAnalysisArn
+      `Prelude.hashWithSalt` networkInsightsAnalysisId
+      `Prelude.hashWithSalt` networkInsightsPathId
+      `Prelude.hashWithSalt` networkPathFound
+      `Prelude.hashWithSalt` returnPathComponents
+      `Prelude.hashWithSalt` startDate
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` suggestedAccounts
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` warningMessage
+
+instance Prelude.NFData NetworkInsightsAnalysis where
+  rnf NetworkInsightsAnalysis' {..} =
+    Prelude.rnf additionalAccounts
+      `Prelude.seq` Prelude.rnf alternatePathHints
+      `Prelude.seq` Prelude.rnf explanations
+      `Prelude.seq` Prelude.rnf filterInArns
+      `Prelude.seq` Prelude.rnf forwardPathComponents
+      `Prelude.seq` Prelude.rnf networkInsightsAnalysisArn
+      `Prelude.seq` Prelude.rnf networkInsightsAnalysisId
+      `Prelude.seq` Prelude.rnf networkInsightsPathId
+      `Prelude.seq` Prelude.rnf networkPathFound
+      `Prelude.seq` Prelude.rnf returnPathComponents
+      `Prelude.seq` Prelude.rnf startDate
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf suggestedAccounts
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf warningMessage
diff --git a/gen/Amazonka/EC2/Types/NetworkInsightsPath.hs b/gen/Amazonka/EC2/Types/NetworkInsightsPath.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInsightsPath.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInsightsPath
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInsightsPath where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Protocol
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path.
+--
+-- /See:/ 'newNetworkInsightsPath' smart constructor.
+data NetworkInsightsPath = NetworkInsightsPath'
+  { -- | The time stamp when the path was created.
+    createdDate :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Web Services resource that is the destination of the path.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the destination.
+    destinationArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP address of the Amazon Web Services resource that is the
+    -- destination of the path.
+    destinationIp :: Prelude.Maybe Prelude.Text,
+    -- | The destination port.
+    destinationPort :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the path.
+    networkInsightsPathArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the path.
+    networkInsightsPathId :: Prelude.Maybe Prelude.Text,
+    -- | The protocol.
+    protocol :: Prelude.Maybe Protocol,
+    -- | The Amazon Web Services resource that is the source of the path.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the source.
+    sourceArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP address of the Amazon Web Services resource that is the source of
+    -- the path.
+    sourceIp :: Prelude.Maybe Prelude.Text,
+    -- | The tags associated with the path.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInsightsPath' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdDate', 'networkInsightsPath_createdDate' - The time stamp when the path was created.
+--
+-- 'destination', 'networkInsightsPath_destination' - The Amazon Web Services resource that is the destination of the path.
+--
+-- 'destinationArn', 'networkInsightsPath_destinationArn' - The Amazon Resource Name (ARN) of the destination.
+--
+-- 'destinationIp', 'networkInsightsPath_destinationIp' - The IP address of the Amazon Web Services resource that is the
+-- destination of the path.
+--
+-- 'destinationPort', 'networkInsightsPath_destinationPort' - The destination port.
+--
+-- 'networkInsightsPathArn', 'networkInsightsPath_networkInsightsPathArn' - The Amazon Resource Name (ARN) of the path.
+--
+-- 'networkInsightsPathId', 'networkInsightsPath_networkInsightsPathId' - The ID of the path.
+--
+-- 'protocol', 'networkInsightsPath_protocol' - The protocol.
+--
+-- 'source', 'networkInsightsPath_source' - The Amazon Web Services resource that is the source of the path.
+--
+-- 'sourceArn', 'networkInsightsPath_sourceArn' - The Amazon Resource Name (ARN) of the source.
+--
+-- 'sourceIp', 'networkInsightsPath_sourceIp' - The IP address of the Amazon Web Services resource that is the source of
+-- the path.
+--
+-- 'tags', 'networkInsightsPath_tags' - The tags associated with the path.
+newNetworkInsightsPath ::
+  NetworkInsightsPath
+newNetworkInsightsPath =
+  NetworkInsightsPath'
+    { createdDate = Prelude.Nothing,
+      destination = Prelude.Nothing,
+      destinationArn = Prelude.Nothing,
+      destinationIp = Prelude.Nothing,
+      destinationPort = Prelude.Nothing,
+      networkInsightsPathArn = Prelude.Nothing,
+      networkInsightsPathId = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      source = Prelude.Nothing,
+      sourceArn = Prelude.Nothing,
+      sourceIp = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The time stamp when the path was created.
+networkInsightsPath_createdDate :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.UTCTime)
+networkInsightsPath_createdDate = Lens.lens (\NetworkInsightsPath' {createdDate} -> createdDate) (\s@NetworkInsightsPath' {} a -> s {createdDate = a} :: NetworkInsightsPath) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Web Services resource that is the destination of the path.
+networkInsightsPath_destination :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_destination = Lens.lens (\NetworkInsightsPath' {destination} -> destination) (\s@NetworkInsightsPath' {} a -> s {destination = a} :: NetworkInsightsPath)
+
+-- | The Amazon Resource Name (ARN) of the destination.
+networkInsightsPath_destinationArn :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_destinationArn = Lens.lens (\NetworkInsightsPath' {destinationArn} -> destinationArn) (\s@NetworkInsightsPath' {} a -> s {destinationArn = a} :: NetworkInsightsPath)
+
+-- | The IP address of the Amazon Web Services resource that is the
+-- destination of the path.
+networkInsightsPath_destinationIp :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_destinationIp = Lens.lens (\NetworkInsightsPath' {destinationIp} -> destinationIp) (\s@NetworkInsightsPath' {} a -> s {destinationIp = a} :: NetworkInsightsPath)
+
+-- | The destination port.
+networkInsightsPath_destinationPort :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Int)
+networkInsightsPath_destinationPort = Lens.lens (\NetworkInsightsPath' {destinationPort} -> destinationPort) (\s@NetworkInsightsPath' {} a -> s {destinationPort = a} :: NetworkInsightsPath)
+
+-- | The Amazon Resource Name (ARN) of the path.
+networkInsightsPath_networkInsightsPathArn :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_networkInsightsPathArn = Lens.lens (\NetworkInsightsPath' {networkInsightsPathArn} -> networkInsightsPathArn) (\s@NetworkInsightsPath' {} a -> s {networkInsightsPathArn = a} :: NetworkInsightsPath)
+
+-- | The ID of the path.
+networkInsightsPath_networkInsightsPathId :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_networkInsightsPathId = Lens.lens (\NetworkInsightsPath' {networkInsightsPathId} -> networkInsightsPathId) (\s@NetworkInsightsPath' {} a -> s {networkInsightsPathId = a} :: NetworkInsightsPath)
+
+-- | The protocol.
+networkInsightsPath_protocol :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Protocol)
+networkInsightsPath_protocol = Lens.lens (\NetworkInsightsPath' {protocol} -> protocol) (\s@NetworkInsightsPath' {} a -> s {protocol = a} :: NetworkInsightsPath)
+
+-- | The Amazon Web Services resource that is the source of the path.
+networkInsightsPath_source :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_source = Lens.lens (\NetworkInsightsPath' {source} -> source) (\s@NetworkInsightsPath' {} a -> s {source = a} :: NetworkInsightsPath)
+
+-- | The Amazon Resource Name (ARN) of the source.
+networkInsightsPath_sourceArn :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_sourceArn = Lens.lens (\NetworkInsightsPath' {sourceArn} -> sourceArn) (\s@NetworkInsightsPath' {} a -> s {sourceArn = a} :: NetworkInsightsPath)
+
+-- | The IP address of the Amazon Web Services resource that is the source of
+-- the path.
+networkInsightsPath_sourceIp :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe Prelude.Text)
+networkInsightsPath_sourceIp = Lens.lens (\NetworkInsightsPath' {sourceIp} -> sourceIp) (\s@NetworkInsightsPath' {} a -> s {sourceIp = a} :: NetworkInsightsPath)
+
+-- | The tags associated with the path.
+networkInsightsPath_tags :: Lens.Lens' NetworkInsightsPath (Prelude.Maybe [Tag])
+networkInsightsPath_tags = Lens.lens (\NetworkInsightsPath' {tags} -> tags) (\s@NetworkInsightsPath' {} a -> s {tags = a} :: NetworkInsightsPath) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML NetworkInsightsPath where
+  parseXML x =
+    NetworkInsightsPath'
+      Prelude.<$> (x Data..@? "createdDate")
+      Prelude.<*> (x Data..@? "destination")
+      Prelude.<*> (x Data..@? "destinationArn")
+      Prelude.<*> (x Data..@? "destinationIp")
+      Prelude.<*> (x Data..@? "destinationPort")
+      Prelude.<*> (x Data..@? "networkInsightsPathArn")
+      Prelude.<*> (x Data..@? "networkInsightsPathId")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "source")
+      Prelude.<*> (x Data..@? "sourceArn")
+      Prelude.<*> (x Data..@? "sourceIp")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable NetworkInsightsPath where
+  hashWithSalt _salt NetworkInsightsPath' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdDate
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` destinationArn
+      `Prelude.hashWithSalt` destinationIp
+      `Prelude.hashWithSalt` destinationPort
+      `Prelude.hashWithSalt` networkInsightsPathArn
+      `Prelude.hashWithSalt` networkInsightsPathId
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` sourceArn
+      `Prelude.hashWithSalt` sourceIp
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData NetworkInsightsPath where
+  rnf NetworkInsightsPath' {..} =
+    Prelude.rnf createdDate
+      `Prelude.seq` Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf destinationArn
+      `Prelude.seq` Prelude.rnf destinationIp
+      `Prelude.seq` Prelude.rnf destinationPort
+      `Prelude.seq` Prelude.rnf networkInsightsPathArn
+      `Prelude.seq` Prelude.rnf networkInsightsPathId
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf sourceArn
+      `Prelude.seq` Prelude.rnf sourceIp
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/NetworkInterface.hs b/gen/Amazonka/EC2/Types/NetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterface.hs
@@ -0,0 +1,431 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterface where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.Ipv4PrefixSpecification
+import Amazonka.EC2.Types.Ipv6PrefixSpecification
+import Amazonka.EC2.Types.NetworkInterfaceAssociation
+import Amazonka.EC2.Types.NetworkInterfaceAttachment
+import Amazonka.EC2.Types.NetworkInterfaceIpv6Address
+import Amazonka.EC2.Types.NetworkInterfacePrivateIpAddress
+import Amazonka.EC2.Types.NetworkInterfaceStatus
+import Amazonka.EC2.Types.NetworkInterfaceType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface.
+--
+-- /See:/ 'newNetworkInterface' smart constructor.
+data NetworkInterface = NetworkInterface'
+  { -- | The association information for an Elastic IP address (IPv4) associated
+    -- with the network interface.
+    association :: Prelude.Maybe NetworkInterfaceAssociation,
+    -- | The network interface attachment.
+    attachment :: Prelude.Maybe NetworkInterfaceAttachment,
+    -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether a network interface with an IPv6 address is
+    -- unreachable from the public internet. If the value is @true@, inbound
+    -- traffic from the internet is dropped and you cannot assign an elastic IP
+    -- address to the network interface. The network interface is reachable
+    -- from peered VPCs and resources connected through a transit gateway,
+    -- including on-premises networks.
+    denyAllIgwTraffic :: Prelude.Maybe Prelude.Bool,
+    -- | A description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Any security groups for the network interface.
+    groups :: Prelude.Maybe [GroupIdentifier],
+    -- | The type of network interface.
+    interfaceType :: Prelude.Maybe NetworkInterfaceType,
+    -- | The IPv4 prefixes that are assigned to the network interface.
+    ipv4Prefixes :: Prelude.Maybe [Ipv4PrefixSpecification],
+    -- | The IPv6 globally unique address associated with the network interface.
+    ipv6Address :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 addresses associated with the network interface.
+    ipv6Addresses :: Prelude.Maybe [NetworkInterfaceIpv6Address],
+    -- | Indicates whether this is an IPv6 only network interface.
+    ipv6Native :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv6 prefixes that are assigned to the network interface.
+    ipv6Prefixes :: Prelude.Maybe [Ipv6PrefixSpecification],
+    -- | The MAC address.
+    macAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID of the owner of the network
+    -- interface.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The private DNS name.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 address of the network interface within the subnet.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 addresses associated with the network interface.
+    privateIpAddresses :: Prelude.Maybe [NetworkInterfacePrivateIpAddress],
+    -- | The alias or Amazon Web Services account ID of the principal or service
+    -- that created the network interface.
+    requesterId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the network interface is being managed by Amazon Web
+    -- Services.
+    requesterManaged :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether source\/destination checking is enabled.
+    sourceDestCheck :: Prelude.Maybe Prelude.Bool,
+    -- | The status of the network interface.
+    status :: Prelude.Maybe NetworkInterfaceStatus,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the network interface.
+    tagSet :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'networkInterface_association' - The association information for an Elastic IP address (IPv4) associated
+-- with the network interface.
+--
+-- 'attachment', 'networkInterface_attachment' - The network interface attachment.
+--
+-- 'availabilityZone', 'networkInterface_availabilityZone' - The Availability Zone.
+--
+-- 'denyAllIgwTraffic', 'networkInterface_denyAllIgwTraffic' - Indicates whether a network interface with an IPv6 address is
+-- unreachable from the public internet. If the value is @true@, inbound
+-- traffic from the internet is dropped and you cannot assign an elastic IP
+-- address to the network interface. The network interface is reachable
+-- from peered VPCs and resources connected through a transit gateway,
+-- including on-premises networks.
+--
+-- 'description', 'networkInterface_description' - A description.
+--
+-- 'groups', 'networkInterface_groups' - Any security groups for the network interface.
+--
+-- 'interfaceType', 'networkInterface_interfaceType' - The type of network interface.
+--
+-- 'ipv4Prefixes', 'networkInterface_ipv4Prefixes' - The IPv4 prefixes that are assigned to the network interface.
+--
+-- 'ipv6Address', 'networkInterface_ipv6Address' - The IPv6 globally unique address associated with the network interface.
+--
+-- 'ipv6Addresses', 'networkInterface_ipv6Addresses' - The IPv6 addresses associated with the network interface.
+--
+-- 'ipv6Native', 'networkInterface_ipv6Native' - Indicates whether this is an IPv6 only network interface.
+--
+-- 'ipv6Prefixes', 'networkInterface_ipv6Prefixes' - The IPv6 prefixes that are assigned to the network interface.
+--
+-- 'macAddress', 'networkInterface_macAddress' - The MAC address.
+--
+-- 'networkInterfaceId', 'networkInterface_networkInterfaceId' - The ID of the network interface.
+--
+-- 'outpostArn', 'networkInterface_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'ownerId', 'networkInterface_ownerId' - The Amazon Web Services account ID of the owner of the network
+-- interface.
+--
+-- 'privateDnsName', 'networkInterface_privateDnsName' - The private DNS name.
+--
+-- 'privateIpAddress', 'networkInterface_privateIpAddress' - The IPv4 address of the network interface within the subnet.
+--
+-- 'privateIpAddresses', 'networkInterface_privateIpAddresses' - The private IPv4 addresses associated with the network interface.
+--
+-- 'requesterId', 'networkInterface_requesterId' - The alias or Amazon Web Services account ID of the principal or service
+-- that created the network interface.
+--
+-- 'requesterManaged', 'networkInterface_requesterManaged' - Indicates whether the network interface is being managed by Amazon Web
+-- Services.
+--
+-- 'sourceDestCheck', 'networkInterface_sourceDestCheck' - Indicates whether source\/destination checking is enabled.
+--
+-- 'status', 'networkInterface_status' - The status of the network interface.
+--
+-- 'subnetId', 'networkInterface_subnetId' - The ID of the subnet.
+--
+-- 'tagSet', 'networkInterface_tagSet' - Any tags assigned to the network interface.
+--
+-- 'vpcId', 'networkInterface_vpcId' - The ID of the VPC.
+newNetworkInterface ::
+  NetworkInterface
+newNetworkInterface =
+  NetworkInterface'
+    { association = Prelude.Nothing,
+      attachment = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      denyAllIgwTraffic = Prelude.Nothing,
+      description = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      interfaceType = Prelude.Nothing,
+      ipv4Prefixes = Prelude.Nothing,
+      ipv6Address = Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      ipv6Native = Prelude.Nothing,
+      ipv6Prefixes = Prelude.Nothing,
+      macAddress = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      privateIpAddresses = Prelude.Nothing,
+      requesterId = Prelude.Nothing,
+      requesterManaged = Prelude.Nothing,
+      sourceDestCheck = Prelude.Nothing,
+      status = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tagSet = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The association information for an Elastic IP address (IPv4) associated
+-- with the network interface.
+networkInterface_association :: Lens.Lens' NetworkInterface (Prelude.Maybe NetworkInterfaceAssociation)
+networkInterface_association = Lens.lens (\NetworkInterface' {association} -> association) (\s@NetworkInterface' {} a -> s {association = a} :: NetworkInterface)
+
+-- | The network interface attachment.
+networkInterface_attachment :: Lens.Lens' NetworkInterface (Prelude.Maybe NetworkInterfaceAttachment)
+networkInterface_attachment = Lens.lens (\NetworkInterface' {attachment} -> attachment) (\s@NetworkInterface' {} a -> s {attachment = a} :: NetworkInterface)
+
+-- | The Availability Zone.
+networkInterface_availabilityZone :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_availabilityZone = Lens.lens (\NetworkInterface' {availabilityZone} -> availabilityZone) (\s@NetworkInterface' {} a -> s {availabilityZone = a} :: NetworkInterface)
+
+-- | Indicates whether a network interface with an IPv6 address is
+-- unreachable from the public internet. If the value is @true@, inbound
+-- traffic from the internet is dropped and you cannot assign an elastic IP
+-- address to the network interface. The network interface is reachable
+-- from peered VPCs and resources connected through a transit gateway,
+-- including on-premises networks.
+networkInterface_denyAllIgwTraffic :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Bool)
+networkInterface_denyAllIgwTraffic = Lens.lens (\NetworkInterface' {denyAllIgwTraffic} -> denyAllIgwTraffic) (\s@NetworkInterface' {} a -> s {denyAllIgwTraffic = a} :: NetworkInterface)
+
+-- | A description.
+networkInterface_description :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_description = Lens.lens (\NetworkInterface' {description} -> description) (\s@NetworkInterface' {} a -> s {description = a} :: NetworkInterface)
+
+-- | Any security groups for the network interface.
+networkInterface_groups :: Lens.Lens' NetworkInterface (Prelude.Maybe [GroupIdentifier])
+networkInterface_groups = Lens.lens (\NetworkInterface' {groups} -> groups) (\s@NetworkInterface' {} a -> s {groups = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of network interface.
+networkInterface_interfaceType :: Lens.Lens' NetworkInterface (Prelude.Maybe NetworkInterfaceType)
+networkInterface_interfaceType = Lens.lens (\NetworkInterface' {interfaceType} -> interfaceType) (\s@NetworkInterface' {} a -> s {interfaceType = a} :: NetworkInterface)
+
+-- | The IPv4 prefixes that are assigned to the network interface.
+networkInterface_ipv4Prefixes :: Lens.Lens' NetworkInterface (Prelude.Maybe [Ipv4PrefixSpecification])
+networkInterface_ipv4Prefixes = Lens.lens (\NetworkInterface' {ipv4Prefixes} -> ipv4Prefixes) (\s@NetworkInterface' {} a -> s {ipv4Prefixes = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv6 globally unique address associated with the network interface.
+networkInterface_ipv6Address :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_ipv6Address = Lens.lens (\NetworkInterface' {ipv6Address} -> ipv6Address) (\s@NetworkInterface' {} a -> s {ipv6Address = a} :: NetworkInterface)
+
+-- | The IPv6 addresses associated with the network interface.
+networkInterface_ipv6Addresses :: Lens.Lens' NetworkInterface (Prelude.Maybe [NetworkInterfaceIpv6Address])
+networkInterface_ipv6Addresses = Lens.lens (\NetworkInterface' {ipv6Addresses} -> ipv6Addresses) (\s@NetworkInterface' {} a -> s {ipv6Addresses = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether this is an IPv6 only network interface.
+networkInterface_ipv6Native :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Bool)
+networkInterface_ipv6Native = Lens.lens (\NetworkInterface' {ipv6Native} -> ipv6Native) (\s@NetworkInterface' {} a -> s {ipv6Native = a} :: NetworkInterface)
+
+-- | The IPv6 prefixes that are assigned to the network interface.
+networkInterface_ipv6Prefixes :: Lens.Lens' NetworkInterface (Prelude.Maybe [Ipv6PrefixSpecification])
+networkInterface_ipv6Prefixes = Lens.lens (\NetworkInterface' {ipv6Prefixes} -> ipv6Prefixes) (\s@NetworkInterface' {} a -> s {ipv6Prefixes = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The MAC address.
+networkInterface_macAddress :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_macAddress = Lens.lens (\NetworkInterface' {macAddress} -> macAddress) (\s@NetworkInterface' {} a -> s {macAddress = a} :: NetworkInterface)
+
+-- | The ID of the network interface.
+networkInterface_networkInterfaceId :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_networkInterfaceId = Lens.lens (\NetworkInterface' {networkInterfaceId} -> networkInterfaceId) (\s@NetworkInterface' {} a -> s {networkInterfaceId = a} :: NetworkInterface)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+networkInterface_outpostArn :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_outpostArn = Lens.lens (\NetworkInterface' {outpostArn} -> outpostArn) (\s@NetworkInterface' {} a -> s {outpostArn = a} :: NetworkInterface)
+
+-- | The Amazon Web Services account ID of the owner of the network
+-- interface.
+networkInterface_ownerId :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_ownerId = Lens.lens (\NetworkInterface' {ownerId} -> ownerId) (\s@NetworkInterface' {} a -> s {ownerId = a} :: NetworkInterface)
+
+-- | The private DNS name.
+networkInterface_privateDnsName :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_privateDnsName = Lens.lens (\NetworkInterface' {privateDnsName} -> privateDnsName) (\s@NetworkInterface' {} a -> s {privateDnsName = a} :: NetworkInterface)
+
+-- | The IPv4 address of the network interface within the subnet.
+networkInterface_privateIpAddress :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_privateIpAddress = Lens.lens (\NetworkInterface' {privateIpAddress} -> privateIpAddress) (\s@NetworkInterface' {} a -> s {privateIpAddress = a} :: NetworkInterface)
+
+-- | The private IPv4 addresses associated with the network interface.
+networkInterface_privateIpAddresses :: Lens.Lens' NetworkInterface (Prelude.Maybe [NetworkInterfacePrivateIpAddress])
+networkInterface_privateIpAddresses = Lens.lens (\NetworkInterface' {privateIpAddresses} -> privateIpAddresses) (\s@NetworkInterface' {} a -> s {privateIpAddresses = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The alias or Amazon Web Services account ID of the principal or service
+-- that created the network interface.
+networkInterface_requesterId :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_requesterId = Lens.lens (\NetworkInterface' {requesterId} -> requesterId) (\s@NetworkInterface' {} a -> s {requesterId = a} :: NetworkInterface)
+
+-- | Indicates whether the network interface is being managed by Amazon Web
+-- Services.
+networkInterface_requesterManaged :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Bool)
+networkInterface_requesterManaged = Lens.lens (\NetworkInterface' {requesterManaged} -> requesterManaged) (\s@NetworkInterface' {} a -> s {requesterManaged = a} :: NetworkInterface)
+
+-- | Indicates whether source\/destination checking is enabled.
+networkInterface_sourceDestCheck :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Bool)
+networkInterface_sourceDestCheck = Lens.lens (\NetworkInterface' {sourceDestCheck} -> sourceDestCheck) (\s@NetworkInterface' {} a -> s {sourceDestCheck = a} :: NetworkInterface)
+
+-- | The status of the network interface.
+networkInterface_status :: Lens.Lens' NetworkInterface (Prelude.Maybe NetworkInterfaceStatus)
+networkInterface_status = Lens.lens (\NetworkInterface' {status} -> status) (\s@NetworkInterface' {} a -> s {status = a} :: NetworkInterface)
+
+-- | The ID of the subnet.
+networkInterface_subnetId :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_subnetId = Lens.lens (\NetworkInterface' {subnetId} -> subnetId) (\s@NetworkInterface' {} a -> s {subnetId = a} :: NetworkInterface)
+
+-- | Any tags assigned to the network interface.
+networkInterface_tagSet :: Lens.Lens' NetworkInterface (Prelude.Maybe [Tag])
+networkInterface_tagSet = Lens.lens (\NetworkInterface' {tagSet} -> tagSet) (\s@NetworkInterface' {} a -> s {tagSet = a} :: NetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+networkInterface_vpcId :: Lens.Lens' NetworkInterface (Prelude.Maybe Prelude.Text)
+networkInterface_vpcId = Lens.lens (\NetworkInterface' {vpcId} -> vpcId) (\s@NetworkInterface' {} a -> s {vpcId = a} :: NetworkInterface)
+
+instance Data.FromXML NetworkInterface where
+  parseXML x =
+    NetworkInterface'
+      Prelude.<$> (x Data..@? "association")
+      Prelude.<*> (x Data..@? "attachment")
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "denyAllIgwTraffic")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "interfaceType")
+      Prelude.<*> ( x
+                      Data..@? "ipv4PrefixSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipv6Address")
+      Prelude.<*> ( x
+                      Data..@? "ipv6AddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipv6Native")
+      Prelude.<*> ( x
+                      Data..@? "ipv6PrefixSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "macAddress")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "privateIpAddressesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "requesterId")
+      Prelude.<*> (x Data..@? "requesterManaged")
+      Prelude.<*> (x Data..@? "sourceDestCheck")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable NetworkInterface where
+  hashWithSalt _salt NetworkInterface' {..} =
+    _salt
+      `Prelude.hashWithSalt` association
+      `Prelude.hashWithSalt` attachment
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` denyAllIgwTraffic
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` interfaceType
+      `Prelude.hashWithSalt` ipv4Prefixes
+      `Prelude.hashWithSalt` ipv6Address
+      `Prelude.hashWithSalt` ipv6Addresses
+      `Prelude.hashWithSalt` ipv6Native
+      `Prelude.hashWithSalt` ipv6Prefixes
+      `Prelude.hashWithSalt` macAddress
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` privateDnsName
+      `Prelude.hashWithSalt` privateIpAddress
+      `Prelude.hashWithSalt` privateIpAddresses
+      `Prelude.hashWithSalt` requesterId
+      `Prelude.hashWithSalt` requesterManaged
+      `Prelude.hashWithSalt` sourceDestCheck
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tagSet
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData NetworkInterface where
+  rnf NetworkInterface' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf attachment
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf denyAllIgwTraffic
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf interfaceType
+      `Prelude.seq` Prelude.rnf ipv4Prefixes
+      `Prelude.seq` Prelude.rnf ipv6Address
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf ipv6Native
+      `Prelude.seq` Prelude.rnf ipv6Prefixes
+      `Prelude.seq` Prelude.rnf macAddress
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf privateIpAddresses
+      `Prelude.seq` Prelude.rnf requesterId
+      `Prelude.seq` Prelude.rnf requesterManaged
+      `Prelude.seq` Prelude.rnf
+        sourceDestCheck
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tagSet
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceAssociation.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceAssociation.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes association information for an Elastic IP address (IPv4 only),
+-- or a Carrier IP address (for a network interface which resides in a
+-- subnet in a Wavelength Zone).
+--
+-- /See:/ 'newNetworkInterfaceAssociation' smart constructor.
+data NetworkInterfaceAssociation = NetworkInterfaceAssociation'
+  { -- | The allocation ID.
+    allocationId :: Prelude.Maybe Prelude.Text,
+    -- | The association ID.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The carrier IP address associated with the network interface.
+    --
+    -- This option is only available when the network interface is in a subnet
+    -- which is associated with a Wavelength Zone.
+    carrierIp :: Prelude.Maybe Prelude.Text,
+    -- | The customer-owned IP address associated with the network interface.
+    customerOwnedIp :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Elastic IP address owner.
+    ipOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The public DNS name.
+    publicDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The address of the Elastic IP address bound to the network interface.
+    publicIp :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfaceAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationId', 'networkInterfaceAssociation_allocationId' - The allocation ID.
+--
+-- 'associationId', 'networkInterfaceAssociation_associationId' - The association ID.
+--
+-- 'carrierIp', 'networkInterfaceAssociation_carrierIp' - The carrier IP address associated with the network interface.
+--
+-- This option is only available when the network interface is in a subnet
+-- which is associated with a Wavelength Zone.
+--
+-- 'customerOwnedIp', 'networkInterfaceAssociation_customerOwnedIp' - The customer-owned IP address associated with the network interface.
+--
+-- 'ipOwnerId', 'networkInterfaceAssociation_ipOwnerId' - The ID of the Elastic IP address owner.
+--
+-- 'publicDnsName', 'networkInterfaceAssociation_publicDnsName' - The public DNS name.
+--
+-- 'publicIp', 'networkInterfaceAssociation_publicIp' - The address of the Elastic IP address bound to the network interface.
+newNetworkInterfaceAssociation ::
+  NetworkInterfaceAssociation
+newNetworkInterfaceAssociation =
+  NetworkInterfaceAssociation'
+    { allocationId =
+        Prelude.Nothing,
+      associationId = Prelude.Nothing,
+      carrierIp = Prelude.Nothing,
+      customerOwnedIp = Prelude.Nothing,
+      ipOwnerId = Prelude.Nothing,
+      publicDnsName = Prelude.Nothing,
+      publicIp = Prelude.Nothing
+    }
+
+-- | The allocation ID.
+networkInterfaceAssociation_allocationId :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_allocationId = Lens.lens (\NetworkInterfaceAssociation' {allocationId} -> allocationId) (\s@NetworkInterfaceAssociation' {} a -> s {allocationId = a} :: NetworkInterfaceAssociation)
+
+-- | The association ID.
+networkInterfaceAssociation_associationId :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_associationId = Lens.lens (\NetworkInterfaceAssociation' {associationId} -> associationId) (\s@NetworkInterfaceAssociation' {} a -> s {associationId = a} :: NetworkInterfaceAssociation)
+
+-- | The carrier IP address associated with the network interface.
+--
+-- This option is only available when the network interface is in a subnet
+-- which is associated with a Wavelength Zone.
+networkInterfaceAssociation_carrierIp :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_carrierIp = Lens.lens (\NetworkInterfaceAssociation' {carrierIp} -> carrierIp) (\s@NetworkInterfaceAssociation' {} a -> s {carrierIp = a} :: NetworkInterfaceAssociation)
+
+-- | The customer-owned IP address associated with the network interface.
+networkInterfaceAssociation_customerOwnedIp :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_customerOwnedIp = Lens.lens (\NetworkInterfaceAssociation' {customerOwnedIp} -> customerOwnedIp) (\s@NetworkInterfaceAssociation' {} a -> s {customerOwnedIp = a} :: NetworkInterfaceAssociation)
+
+-- | The ID of the Elastic IP address owner.
+networkInterfaceAssociation_ipOwnerId :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_ipOwnerId = Lens.lens (\NetworkInterfaceAssociation' {ipOwnerId} -> ipOwnerId) (\s@NetworkInterfaceAssociation' {} a -> s {ipOwnerId = a} :: NetworkInterfaceAssociation)
+
+-- | The public DNS name.
+networkInterfaceAssociation_publicDnsName :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_publicDnsName = Lens.lens (\NetworkInterfaceAssociation' {publicDnsName} -> publicDnsName) (\s@NetworkInterfaceAssociation' {} a -> s {publicDnsName = a} :: NetworkInterfaceAssociation)
+
+-- | The address of the Elastic IP address bound to the network interface.
+networkInterfaceAssociation_publicIp :: Lens.Lens' NetworkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+networkInterfaceAssociation_publicIp = Lens.lens (\NetworkInterfaceAssociation' {publicIp} -> publicIp) (\s@NetworkInterfaceAssociation' {} a -> s {publicIp = a} :: NetworkInterfaceAssociation)
+
+instance Data.FromXML NetworkInterfaceAssociation where
+  parseXML x =
+    NetworkInterfaceAssociation'
+      Prelude.<$> (x Data..@? "allocationId")
+      Prelude.<*> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "carrierIp")
+      Prelude.<*> (x Data..@? "customerOwnedIp")
+      Prelude.<*> (x Data..@? "ipOwnerId")
+      Prelude.<*> (x Data..@? "publicDnsName")
+      Prelude.<*> (x Data..@? "publicIp")
+
+instance Prelude.Hashable NetworkInterfaceAssociation where
+  hashWithSalt _salt NetworkInterfaceAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationId
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` carrierIp
+      `Prelude.hashWithSalt` customerOwnedIp
+      `Prelude.hashWithSalt` ipOwnerId
+      `Prelude.hashWithSalt` publicDnsName
+      `Prelude.hashWithSalt` publicIp
+
+instance Prelude.NFData NetworkInterfaceAssociation where
+  rnf NetworkInterfaceAssociation' {..} =
+    Prelude.rnf allocationId
+      `Prelude.seq` Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf carrierIp
+      `Prelude.seq` Prelude.rnf customerOwnedIp
+      `Prelude.seq` Prelude.rnf ipOwnerId
+      `Prelude.seq` Prelude.rnf publicDnsName
+      `Prelude.seq` Prelude.rnf publicIp
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceAttachment.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceAttachment.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttachmentEnaSrdSpecification
+import Amazonka.EC2.Types.AttachmentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface attachment.
+--
+-- /See:/ 'newNetworkInterfaceAttachment' smart constructor.
+data NetworkInterfaceAttachment = NetworkInterfaceAttachment'
+  { -- | The timestamp indicating when the attachment initiated.
+    attachTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the network interface attachment.
+    attachmentId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the network interface is deleted when the instance is
+    -- terminated.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The device index of the network interface attachment on the instance.
+    deviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | Configures ENA Express for the network interface that this action
+    -- attaches to the instance.
+    enaSrdSpecification :: Prelude.Maybe AttachmentEnaSrdSpecification,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID of the owner of the instance.
+    instanceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The index of the network card.
+    networkCardIndex :: Prelude.Maybe Prelude.Int,
+    -- | The attachment state.
+    status :: Prelude.Maybe AttachmentStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfaceAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachTime', 'networkInterfaceAttachment_attachTime' - The timestamp indicating when the attachment initiated.
+--
+-- 'attachmentId', 'networkInterfaceAttachment_attachmentId' - The ID of the network interface attachment.
+--
+-- 'deleteOnTermination', 'networkInterfaceAttachment_deleteOnTermination' - Indicates whether the network interface is deleted when the instance is
+-- terminated.
+--
+-- 'deviceIndex', 'networkInterfaceAttachment_deviceIndex' - The device index of the network interface attachment on the instance.
+--
+-- 'enaSrdSpecification', 'networkInterfaceAttachment_enaSrdSpecification' - Configures ENA Express for the network interface that this action
+-- attaches to the instance.
+--
+-- 'instanceId', 'networkInterfaceAttachment_instanceId' - The ID of the instance.
+--
+-- 'instanceOwnerId', 'networkInterfaceAttachment_instanceOwnerId' - The Amazon Web Services account ID of the owner of the instance.
+--
+-- 'networkCardIndex', 'networkInterfaceAttachment_networkCardIndex' - The index of the network card.
+--
+-- 'status', 'networkInterfaceAttachment_status' - The attachment state.
+newNetworkInterfaceAttachment ::
+  NetworkInterfaceAttachment
+newNetworkInterfaceAttachment =
+  NetworkInterfaceAttachment'
+    { attachTime =
+        Prelude.Nothing,
+      attachmentId = Prelude.Nothing,
+      deleteOnTermination = Prelude.Nothing,
+      deviceIndex = Prelude.Nothing,
+      enaSrdSpecification = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      instanceOwnerId = Prelude.Nothing,
+      networkCardIndex = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The timestamp indicating when the attachment initiated.
+networkInterfaceAttachment_attachTime :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.UTCTime)
+networkInterfaceAttachment_attachTime = Lens.lens (\NetworkInterfaceAttachment' {attachTime} -> attachTime) (\s@NetworkInterfaceAttachment' {} a -> s {attachTime = a} :: NetworkInterfaceAttachment) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the network interface attachment.
+networkInterfaceAttachment_attachmentId :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.Text)
+networkInterfaceAttachment_attachmentId = Lens.lens (\NetworkInterfaceAttachment' {attachmentId} -> attachmentId) (\s@NetworkInterfaceAttachment' {} a -> s {attachmentId = a} :: NetworkInterfaceAttachment)
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+networkInterfaceAttachment_deleteOnTermination :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.Bool)
+networkInterfaceAttachment_deleteOnTermination = Lens.lens (\NetworkInterfaceAttachment' {deleteOnTermination} -> deleteOnTermination) (\s@NetworkInterfaceAttachment' {} a -> s {deleteOnTermination = a} :: NetworkInterfaceAttachment)
+
+-- | The device index of the network interface attachment on the instance.
+networkInterfaceAttachment_deviceIndex :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.Int)
+networkInterfaceAttachment_deviceIndex = Lens.lens (\NetworkInterfaceAttachment' {deviceIndex} -> deviceIndex) (\s@NetworkInterfaceAttachment' {} a -> s {deviceIndex = a} :: NetworkInterfaceAttachment)
+
+-- | Configures ENA Express for the network interface that this action
+-- attaches to the instance.
+networkInterfaceAttachment_enaSrdSpecification :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe AttachmentEnaSrdSpecification)
+networkInterfaceAttachment_enaSrdSpecification = Lens.lens (\NetworkInterfaceAttachment' {enaSrdSpecification} -> enaSrdSpecification) (\s@NetworkInterfaceAttachment' {} a -> s {enaSrdSpecification = a} :: NetworkInterfaceAttachment)
+
+-- | The ID of the instance.
+networkInterfaceAttachment_instanceId :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.Text)
+networkInterfaceAttachment_instanceId = Lens.lens (\NetworkInterfaceAttachment' {instanceId} -> instanceId) (\s@NetworkInterfaceAttachment' {} a -> s {instanceId = a} :: NetworkInterfaceAttachment)
+
+-- | The Amazon Web Services account ID of the owner of the instance.
+networkInterfaceAttachment_instanceOwnerId :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.Text)
+networkInterfaceAttachment_instanceOwnerId = Lens.lens (\NetworkInterfaceAttachment' {instanceOwnerId} -> instanceOwnerId) (\s@NetworkInterfaceAttachment' {} a -> s {instanceOwnerId = a} :: NetworkInterfaceAttachment)
+
+-- | The index of the network card.
+networkInterfaceAttachment_networkCardIndex :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe Prelude.Int)
+networkInterfaceAttachment_networkCardIndex = Lens.lens (\NetworkInterfaceAttachment' {networkCardIndex} -> networkCardIndex) (\s@NetworkInterfaceAttachment' {} a -> s {networkCardIndex = a} :: NetworkInterfaceAttachment)
+
+-- | The attachment state.
+networkInterfaceAttachment_status :: Lens.Lens' NetworkInterfaceAttachment (Prelude.Maybe AttachmentStatus)
+networkInterfaceAttachment_status = Lens.lens (\NetworkInterfaceAttachment' {status} -> status) (\s@NetworkInterfaceAttachment' {} a -> s {status = a} :: NetworkInterfaceAttachment)
+
+instance Data.FromXML NetworkInterfaceAttachment where
+  parseXML x =
+    NetworkInterfaceAttachment'
+      Prelude.<$> (x Data..@? "attachTime")
+      Prelude.<*> (x Data..@? "attachmentId")
+      Prelude.<*> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "deviceIndex")
+      Prelude.<*> (x Data..@? "enaSrdSpecification")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "instanceOwnerId")
+      Prelude.<*> (x Data..@? "networkCardIndex")
+      Prelude.<*> (x Data..@? "status")
+
+instance Prelude.Hashable NetworkInterfaceAttachment where
+  hashWithSalt _salt NetworkInterfaceAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachTime
+      `Prelude.hashWithSalt` attachmentId
+      `Prelude.hashWithSalt` deleteOnTermination
+      `Prelude.hashWithSalt` deviceIndex
+      `Prelude.hashWithSalt` enaSrdSpecification
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceOwnerId
+      `Prelude.hashWithSalt` networkCardIndex
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData NetworkInterfaceAttachment where
+  rnf NetworkInterfaceAttachment' {..} =
+    Prelude.rnf attachTime
+      `Prelude.seq` Prelude.rnf attachmentId
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf deviceIndex
+      `Prelude.seq` Prelude.rnf enaSrdSpecification
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceOwnerId
+      `Prelude.seq` Prelude.rnf networkCardIndex
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceAttachmentChanges.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceAttachmentChanges.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceAttachmentChanges.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceAttachmentChanges
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceAttachmentChanges where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an attachment change.
+--
+-- /See:/ 'newNetworkInterfaceAttachmentChanges' smart constructor.
+data NetworkInterfaceAttachmentChanges = NetworkInterfaceAttachmentChanges'
+  { -- | The ID of the network interface attachment.
+    attachmentId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the network interface is deleted when the instance is
+    -- terminated.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfaceAttachmentChanges' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentId', 'networkInterfaceAttachmentChanges_attachmentId' - The ID of the network interface attachment.
+--
+-- 'deleteOnTermination', 'networkInterfaceAttachmentChanges_deleteOnTermination' - Indicates whether the network interface is deleted when the instance is
+-- terminated.
+newNetworkInterfaceAttachmentChanges ::
+  NetworkInterfaceAttachmentChanges
+newNetworkInterfaceAttachmentChanges =
+  NetworkInterfaceAttachmentChanges'
+    { attachmentId =
+        Prelude.Nothing,
+      deleteOnTermination = Prelude.Nothing
+    }
+
+-- | The ID of the network interface attachment.
+networkInterfaceAttachmentChanges_attachmentId :: Lens.Lens' NetworkInterfaceAttachmentChanges (Prelude.Maybe Prelude.Text)
+networkInterfaceAttachmentChanges_attachmentId = Lens.lens (\NetworkInterfaceAttachmentChanges' {attachmentId} -> attachmentId) (\s@NetworkInterfaceAttachmentChanges' {} a -> s {attachmentId = a} :: NetworkInterfaceAttachmentChanges)
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+networkInterfaceAttachmentChanges_deleteOnTermination :: Lens.Lens' NetworkInterfaceAttachmentChanges (Prelude.Maybe Prelude.Bool)
+networkInterfaceAttachmentChanges_deleteOnTermination = Lens.lens (\NetworkInterfaceAttachmentChanges' {deleteOnTermination} -> deleteOnTermination) (\s@NetworkInterfaceAttachmentChanges' {} a -> s {deleteOnTermination = a} :: NetworkInterfaceAttachmentChanges)
+
+instance
+  Prelude.Hashable
+    NetworkInterfaceAttachmentChanges
+  where
+  hashWithSalt
+    _salt
+    NetworkInterfaceAttachmentChanges' {..} =
+      _salt
+        `Prelude.hashWithSalt` attachmentId
+        `Prelude.hashWithSalt` deleteOnTermination
+
+instance
+  Prelude.NFData
+    NetworkInterfaceAttachmentChanges
+  where
+  rnf NetworkInterfaceAttachmentChanges' {..} =
+    Prelude.rnf attachmentId
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+
+instance
+  Data.ToQuery
+    NetworkInterfaceAttachmentChanges
+  where
+  toQuery NetworkInterfaceAttachmentChanges' {..} =
+    Prelude.mconcat
+      [ "AttachmentId" Data.=: attachmentId,
+        "DeleteOnTermination" Data.=: deleteOnTermination
+      ]
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceAttribute.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceAttribute.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceAttribute
+  ( NetworkInterfaceAttribute
+      ( ..,
+        NetworkInterfaceAttribute_Attachment,
+        NetworkInterfaceAttribute_Description,
+        NetworkInterfaceAttribute_GroupSet,
+        NetworkInterfaceAttribute_SourceDestCheck
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfaceAttribute = NetworkInterfaceAttribute'
+  { fromNetworkInterfaceAttribute ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkInterfaceAttribute_Attachment :: NetworkInterfaceAttribute
+pattern NetworkInterfaceAttribute_Attachment = NetworkInterfaceAttribute' "attachment"
+
+pattern NetworkInterfaceAttribute_Description :: NetworkInterfaceAttribute
+pattern NetworkInterfaceAttribute_Description = NetworkInterfaceAttribute' "description"
+
+pattern NetworkInterfaceAttribute_GroupSet :: NetworkInterfaceAttribute
+pattern NetworkInterfaceAttribute_GroupSet = NetworkInterfaceAttribute' "groupSet"
+
+pattern NetworkInterfaceAttribute_SourceDestCheck :: NetworkInterfaceAttribute
+pattern NetworkInterfaceAttribute_SourceDestCheck = NetworkInterfaceAttribute' "sourceDestCheck"
+
+{-# COMPLETE
+  NetworkInterfaceAttribute_Attachment,
+  NetworkInterfaceAttribute_Description,
+  NetworkInterfaceAttribute_GroupSet,
+  NetworkInterfaceAttribute_SourceDestCheck,
+  NetworkInterfaceAttribute'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceCount.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceCount.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceCount.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceCount
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceCount where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum number of network interfaces.
+--
+-- /See:/ 'newNetworkInterfaceCount' smart constructor.
+data NetworkInterfaceCount = NetworkInterfaceCount'
+  { -- | The maximum number of network interfaces. If this parameter is not
+    -- specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of network interfaces. If this parameter is not
+    -- specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfaceCount' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'networkInterfaceCount_max' - The maximum number of network interfaces. If this parameter is not
+-- specified, there is no maximum limit.
+--
+-- 'min', 'networkInterfaceCount_min' - The minimum number of network interfaces. If this parameter is not
+-- specified, there is no minimum limit.
+newNetworkInterfaceCount ::
+  NetworkInterfaceCount
+newNetworkInterfaceCount =
+  NetworkInterfaceCount'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum number of network interfaces. If this parameter is not
+-- specified, there is no maximum limit.
+networkInterfaceCount_max :: Lens.Lens' NetworkInterfaceCount (Prelude.Maybe Prelude.Int)
+networkInterfaceCount_max = Lens.lens (\NetworkInterfaceCount' {max} -> max) (\s@NetworkInterfaceCount' {} a -> s {max = a} :: NetworkInterfaceCount)
+
+-- | The minimum number of network interfaces. If this parameter is not
+-- specified, there is no minimum limit.
+networkInterfaceCount_min :: Lens.Lens' NetworkInterfaceCount (Prelude.Maybe Prelude.Int)
+networkInterfaceCount_min = Lens.lens (\NetworkInterfaceCount' {min} -> min) (\s@NetworkInterfaceCount' {} a -> s {min = a} :: NetworkInterfaceCount)
+
+instance Data.FromXML NetworkInterfaceCount where
+  parseXML x =
+    NetworkInterfaceCount'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable NetworkInterfaceCount where
+  hashWithSalt _salt NetworkInterfaceCount' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData NetworkInterfaceCount where
+  rnf NetworkInterfaceCount' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery NetworkInterfaceCount where
+  toQuery NetworkInterfaceCount' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceCountRequest.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceCountRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceCountRequest.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceCountRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceCountRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum number of network interfaces.
+--
+-- /See:/ 'newNetworkInterfaceCountRequest' smart constructor.
+data NetworkInterfaceCountRequest = NetworkInterfaceCountRequest'
+  { -- | The maximum number of network interfaces. To specify no maximum limit,
+    -- omit this parameter.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of network interfaces. To specify no minimum limit,
+    -- omit this parameter.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfaceCountRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'networkInterfaceCountRequest_max' - The maximum number of network interfaces. To specify no maximum limit,
+-- omit this parameter.
+--
+-- 'min', 'networkInterfaceCountRequest_min' - The minimum number of network interfaces. To specify no minimum limit,
+-- omit this parameter.
+newNetworkInterfaceCountRequest ::
+  NetworkInterfaceCountRequest
+newNetworkInterfaceCountRequest =
+  NetworkInterfaceCountRequest'
+    { max =
+        Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum number of network interfaces. To specify no maximum limit,
+-- omit this parameter.
+networkInterfaceCountRequest_max :: Lens.Lens' NetworkInterfaceCountRequest (Prelude.Maybe Prelude.Int)
+networkInterfaceCountRequest_max = Lens.lens (\NetworkInterfaceCountRequest' {max} -> max) (\s@NetworkInterfaceCountRequest' {} a -> s {max = a} :: NetworkInterfaceCountRequest)
+
+-- | The minimum number of network interfaces. To specify no minimum limit,
+-- omit this parameter.
+networkInterfaceCountRequest_min :: Lens.Lens' NetworkInterfaceCountRequest (Prelude.Maybe Prelude.Int)
+networkInterfaceCountRequest_min = Lens.lens (\NetworkInterfaceCountRequest' {min} -> min) (\s@NetworkInterfaceCountRequest' {} a -> s {min = a} :: NetworkInterfaceCountRequest)
+
+instance
+  Prelude.Hashable
+    NetworkInterfaceCountRequest
+  where
+  hashWithSalt _salt NetworkInterfaceCountRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData NetworkInterfaceCountRequest where
+  rnf NetworkInterfaceCountRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery NetworkInterfaceCountRequest where
+  toQuery NetworkInterfaceCountRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceCreationType.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceCreationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceCreationType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceCreationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceCreationType
+  ( NetworkInterfaceCreationType
+      ( ..,
+        NetworkInterfaceCreationType_Branch,
+        NetworkInterfaceCreationType_Efa,
+        NetworkInterfaceCreationType_Trunk
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfaceCreationType = NetworkInterfaceCreationType'
+  { fromNetworkInterfaceCreationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkInterfaceCreationType_Branch :: NetworkInterfaceCreationType
+pattern NetworkInterfaceCreationType_Branch = NetworkInterfaceCreationType' "branch"
+
+pattern NetworkInterfaceCreationType_Efa :: NetworkInterfaceCreationType
+pattern NetworkInterfaceCreationType_Efa = NetworkInterfaceCreationType' "efa"
+
+pattern NetworkInterfaceCreationType_Trunk :: NetworkInterfaceCreationType
+pattern NetworkInterfaceCreationType_Trunk = NetworkInterfaceCreationType' "trunk"
+
+{-# COMPLETE
+  NetworkInterfaceCreationType_Branch,
+  NetworkInterfaceCreationType_Efa,
+  NetworkInterfaceCreationType_Trunk,
+  NetworkInterfaceCreationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceIpv6Address.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceIpv6Address.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceIpv6Address.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceIpv6Address
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceIpv6Address where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 address associated with a network interface.
+--
+-- /See:/ 'newNetworkInterfaceIpv6Address' smart constructor.
+data NetworkInterfaceIpv6Address = NetworkInterfaceIpv6Address'
+  { -- | The IPv6 address.
+    ipv6Address :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfaceIpv6Address' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Address', 'networkInterfaceIpv6Address_ipv6Address' - The IPv6 address.
+newNetworkInterfaceIpv6Address ::
+  NetworkInterfaceIpv6Address
+newNetworkInterfaceIpv6Address =
+  NetworkInterfaceIpv6Address'
+    { ipv6Address =
+        Prelude.Nothing
+    }
+
+-- | The IPv6 address.
+networkInterfaceIpv6Address_ipv6Address :: Lens.Lens' NetworkInterfaceIpv6Address (Prelude.Maybe Prelude.Text)
+networkInterfaceIpv6Address_ipv6Address = Lens.lens (\NetworkInterfaceIpv6Address' {ipv6Address} -> ipv6Address) (\s@NetworkInterfaceIpv6Address' {} a -> s {ipv6Address = a} :: NetworkInterfaceIpv6Address)
+
+instance Data.FromXML NetworkInterfaceIpv6Address where
+  parseXML x =
+    NetworkInterfaceIpv6Address'
+      Prelude.<$> (x Data..@? "ipv6Address")
+
+instance Prelude.Hashable NetworkInterfaceIpv6Address where
+  hashWithSalt _salt NetworkInterfaceIpv6Address' {..} =
+    _salt `Prelude.hashWithSalt` ipv6Address
+
+instance Prelude.NFData NetworkInterfaceIpv6Address where
+  rnf NetworkInterfaceIpv6Address' {..} =
+    Prelude.rnf ipv6Address
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfacePermission.hs b/gen/Amazonka/EC2/Types/NetworkInterfacePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfacePermission.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfacePermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfacePermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InterfacePermissionType
+import Amazonka.EC2.Types.NetworkInterfacePermissionState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a permission for a network interface.
+--
+-- /See:/ 'newNetworkInterfacePermission' smart constructor.
+data NetworkInterfacePermission = NetworkInterfacePermission'
+  { -- | The Amazon Web Services account ID.
+    awsAccountId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Service.
+    awsService :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface permission.
+    networkInterfacePermissionId :: Prelude.Maybe Prelude.Text,
+    -- | The type of permission.
+    permission :: Prelude.Maybe InterfacePermissionType,
+    -- | Information about the state of the permission.
+    permissionState :: Prelude.Maybe NetworkInterfacePermissionState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfacePermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'awsAccountId', 'networkInterfacePermission_awsAccountId' - The Amazon Web Services account ID.
+--
+-- 'awsService', 'networkInterfacePermission_awsService' - The Amazon Web Service.
+--
+-- 'networkInterfaceId', 'networkInterfacePermission_networkInterfaceId' - The ID of the network interface.
+--
+-- 'networkInterfacePermissionId', 'networkInterfacePermission_networkInterfacePermissionId' - The ID of the network interface permission.
+--
+-- 'permission', 'networkInterfacePermission_permission' - The type of permission.
+--
+-- 'permissionState', 'networkInterfacePermission_permissionState' - Information about the state of the permission.
+newNetworkInterfacePermission ::
+  NetworkInterfacePermission
+newNetworkInterfacePermission =
+  NetworkInterfacePermission'
+    { awsAccountId =
+        Prelude.Nothing,
+      awsService = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      networkInterfacePermissionId = Prelude.Nothing,
+      permission = Prelude.Nothing,
+      permissionState = Prelude.Nothing
+    }
+
+-- | The Amazon Web Services account ID.
+networkInterfacePermission_awsAccountId :: Lens.Lens' NetworkInterfacePermission (Prelude.Maybe Prelude.Text)
+networkInterfacePermission_awsAccountId = Lens.lens (\NetworkInterfacePermission' {awsAccountId} -> awsAccountId) (\s@NetworkInterfacePermission' {} a -> s {awsAccountId = a} :: NetworkInterfacePermission)
+
+-- | The Amazon Web Service.
+networkInterfacePermission_awsService :: Lens.Lens' NetworkInterfacePermission (Prelude.Maybe Prelude.Text)
+networkInterfacePermission_awsService = Lens.lens (\NetworkInterfacePermission' {awsService} -> awsService) (\s@NetworkInterfacePermission' {} a -> s {awsService = a} :: NetworkInterfacePermission)
+
+-- | The ID of the network interface.
+networkInterfacePermission_networkInterfaceId :: Lens.Lens' NetworkInterfacePermission (Prelude.Maybe Prelude.Text)
+networkInterfacePermission_networkInterfaceId = Lens.lens (\NetworkInterfacePermission' {networkInterfaceId} -> networkInterfaceId) (\s@NetworkInterfacePermission' {} a -> s {networkInterfaceId = a} :: NetworkInterfacePermission)
+
+-- | The ID of the network interface permission.
+networkInterfacePermission_networkInterfacePermissionId :: Lens.Lens' NetworkInterfacePermission (Prelude.Maybe Prelude.Text)
+networkInterfacePermission_networkInterfacePermissionId = Lens.lens (\NetworkInterfacePermission' {networkInterfacePermissionId} -> networkInterfacePermissionId) (\s@NetworkInterfacePermission' {} a -> s {networkInterfacePermissionId = a} :: NetworkInterfacePermission)
+
+-- | The type of permission.
+networkInterfacePermission_permission :: Lens.Lens' NetworkInterfacePermission (Prelude.Maybe InterfacePermissionType)
+networkInterfacePermission_permission = Lens.lens (\NetworkInterfacePermission' {permission} -> permission) (\s@NetworkInterfacePermission' {} a -> s {permission = a} :: NetworkInterfacePermission)
+
+-- | Information about the state of the permission.
+networkInterfacePermission_permissionState :: Lens.Lens' NetworkInterfacePermission (Prelude.Maybe NetworkInterfacePermissionState)
+networkInterfacePermission_permissionState = Lens.lens (\NetworkInterfacePermission' {permissionState} -> permissionState) (\s@NetworkInterfacePermission' {} a -> s {permissionState = a} :: NetworkInterfacePermission)
+
+instance Data.FromXML NetworkInterfacePermission where
+  parseXML x =
+    NetworkInterfacePermission'
+      Prelude.<$> (x Data..@? "awsAccountId")
+      Prelude.<*> (x Data..@? "awsService")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "networkInterfacePermissionId")
+      Prelude.<*> (x Data..@? "permission")
+      Prelude.<*> (x Data..@? "permissionState")
+
+instance Prelude.Hashable NetworkInterfacePermission where
+  hashWithSalt _salt NetworkInterfacePermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` awsAccountId
+      `Prelude.hashWithSalt` awsService
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` networkInterfacePermissionId
+      `Prelude.hashWithSalt` permission
+      `Prelude.hashWithSalt` permissionState
+
+instance Prelude.NFData NetworkInterfacePermission where
+  rnf NetworkInterfacePermission' {..} =
+    Prelude.rnf awsAccountId
+      `Prelude.seq` Prelude.rnf awsService
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf networkInterfacePermissionId
+      `Prelude.seq` Prelude.rnf permission
+      `Prelude.seq` Prelude.rnf permissionState
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfacePermissionState.hs b/gen/Amazonka/EC2/Types/NetworkInterfacePermissionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfacePermissionState.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfacePermissionState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfacePermissionState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.NetworkInterfacePermissionStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a network interface permission.
+--
+-- /See:/ 'newNetworkInterfacePermissionState' smart constructor.
+data NetworkInterfacePermissionState = NetworkInterfacePermissionState'
+  { -- | The state of the permission.
+    state :: Prelude.Maybe NetworkInterfacePermissionStateCode,
+    -- | A status message, if applicable.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfacePermissionState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'networkInterfacePermissionState_state' - The state of the permission.
+--
+-- 'statusMessage', 'networkInterfacePermissionState_statusMessage' - A status message, if applicable.
+newNetworkInterfacePermissionState ::
+  NetworkInterfacePermissionState
+newNetworkInterfacePermissionState =
+  NetworkInterfacePermissionState'
+    { state =
+        Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The state of the permission.
+networkInterfacePermissionState_state :: Lens.Lens' NetworkInterfacePermissionState (Prelude.Maybe NetworkInterfacePermissionStateCode)
+networkInterfacePermissionState_state = Lens.lens (\NetworkInterfacePermissionState' {state} -> state) (\s@NetworkInterfacePermissionState' {} a -> s {state = a} :: NetworkInterfacePermissionState)
+
+-- | A status message, if applicable.
+networkInterfacePermissionState_statusMessage :: Lens.Lens' NetworkInterfacePermissionState (Prelude.Maybe Prelude.Text)
+networkInterfacePermissionState_statusMessage = Lens.lens (\NetworkInterfacePermissionState' {statusMessage} -> statusMessage) (\s@NetworkInterfacePermissionState' {} a -> s {statusMessage = a} :: NetworkInterfacePermissionState)
+
+instance Data.FromXML NetworkInterfacePermissionState where
+  parseXML x =
+    NetworkInterfacePermissionState'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "statusMessage")
+
+instance
+  Prelude.Hashable
+    NetworkInterfacePermissionState
+  where
+  hashWithSalt
+    _salt
+    NetworkInterfacePermissionState' {..} =
+      _salt
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` statusMessage
+
+instance
+  Prelude.NFData
+    NetworkInterfacePermissionState
+  where
+  rnf NetworkInterfacePermissionState' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfacePermissionStateCode.hs b/gen/Amazonka/EC2/Types/NetworkInterfacePermissionStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfacePermissionStateCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfacePermissionStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfacePermissionStateCode
+  ( NetworkInterfacePermissionStateCode
+      ( ..,
+        NetworkInterfacePermissionStateCode_Granted,
+        NetworkInterfacePermissionStateCode_Pending,
+        NetworkInterfacePermissionStateCode_Revoked,
+        NetworkInterfacePermissionStateCode_Revoking
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfacePermissionStateCode = NetworkInterfacePermissionStateCode'
+  { fromNetworkInterfacePermissionStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkInterfacePermissionStateCode_Granted :: NetworkInterfacePermissionStateCode
+pattern NetworkInterfacePermissionStateCode_Granted = NetworkInterfacePermissionStateCode' "granted"
+
+pattern NetworkInterfacePermissionStateCode_Pending :: NetworkInterfacePermissionStateCode
+pattern NetworkInterfacePermissionStateCode_Pending = NetworkInterfacePermissionStateCode' "pending"
+
+pattern NetworkInterfacePermissionStateCode_Revoked :: NetworkInterfacePermissionStateCode
+pattern NetworkInterfacePermissionStateCode_Revoked = NetworkInterfacePermissionStateCode' "revoked"
+
+pattern NetworkInterfacePermissionStateCode_Revoking :: NetworkInterfacePermissionStateCode
+pattern NetworkInterfacePermissionStateCode_Revoking = NetworkInterfacePermissionStateCode' "revoking"
+
+{-# COMPLETE
+  NetworkInterfacePermissionStateCode_Granted,
+  NetworkInterfacePermissionStateCode_Pending,
+  NetworkInterfacePermissionStateCode_Revoked,
+  NetworkInterfacePermissionStateCode_Revoking,
+  NetworkInterfacePermissionStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfacePrivateIpAddress.hs b/gen/Amazonka/EC2/Types/NetworkInterfacePrivateIpAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfacePrivateIpAddress.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfacePrivateIpAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfacePrivateIpAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.NetworkInterfaceAssociation
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the private IPv4 address of a network interface.
+--
+-- /See:/ 'newNetworkInterfacePrivateIpAddress' smart constructor.
+data NetworkInterfacePrivateIpAddress = NetworkInterfacePrivateIpAddress'
+  { -- | The association information for an Elastic IP address (IPv4) associated
+    -- with the network interface.
+    association :: Prelude.Maybe NetworkInterfaceAssociation,
+    -- | Indicates whether this IPv4 address is the primary private IPv4 address
+    -- of the network interface.
+    primary :: Prelude.Maybe Prelude.Bool,
+    -- | The private DNS name.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 address.
+    privateIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkInterfacePrivateIpAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'networkInterfacePrivateIpAddress_association' - The association information for an Elastic IP address (IPv4) associated
+-- with the network interface.
+--
+-- 'primary', 'networkInterfacePrivateIpAddress_primary' - Indicates whether this IPv4 address is the primary private IPv4 address
+-- of the network interface.
+--
+-- 'privateDnsName', 'networkInterfacePrivateIpAddress_privateDnsName' - The private DNS name.
+--
+-- 'privateIpAddress', 'networkInterfacePrivateIpAddress_privateIpAddress' - The private IPv4 address.
+newNetworkInterfacePrivateIpAddress ::
+  NetworkInterfacePrivateIpAddress
+newNetworkInterfacePrivateIpAddress =
+  NetworkInterfacePrivateIpAddress'
+    { association =
+        Prelude.Nothing,
+      primary = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing
+    }
+
+-- | The association information for an Elastic IP address (IPv4) associated
+-- with the network interface.
+networkInterfacePrivateIpAddress_association :: Lens.Lens' NetworkInterfacePrivateIpAddress (Prelude.Maybe NetworkInterfaceAssociation)
+networkInterfacePrivateIpAddress_association = Lens.lens (\NetworkInterfacePrivateIpAddress' {association} -> association) (\s@NetworkInterfacePrivateIpAddress' {} a -> s {association = a} :: NetworkInterfacePrivateIpAddress)
+
+-- | Indicates whether this IPv4 address is the primary private IPv4 address
+-- of the network interface.
+networkInterfacePrivateIpAddress_primary :: Lens.Lens' NetworkInterfacePrivateIpAddress (Prelude.Maybe Prelude.Bool)
+networkInterfacePrivateIpAddress_primary = Lens.lens (\NetworkInterfacePrivateIpAddress' {primary} -> primary) (\s@NetworkInterfacePrivateIpAddress' {} a -> s {primary = a} :: NetworkInterfacePrivateIpAddress)
+
+-- | The private DNS name.
+networkInterfacePrivateIpAddress_privateDnsName :: Lens.Lens' NetworkInterfacePrivateIpAddress (Prelude.Maybe Prelude.Text)
+networkInterfacePrivateIpAddress_privateDnsName = Lens.lens (\NetworkInterfacePrivateIpAddress' {privateDnsName} -> privateDnsName) (\s@NetworkInterfacePrivateIpAddress' {} a -> s {privateDnsName = a} :: NetworkInterfacePrivateIpAddress)
+
+-- | The private IPv4 address.
+networkInterfacePrivateIpAddress_privateIpAddress :: Lens.Lens' NetworkInterfacePrivateIpAddress (Prelude.Maybe Prelude.Text)
+networkInterfacePrivateIpAddress_privateIpAddress = Lens.lens (\NetworkInterfacePrivateIpAddress' {privateIpAddress} -> privateIpAddress) (\s@NetworkInterfacePrivateIpAddress' {} a -> s {privateIpAddress = a} :: NetworkInterfacePrivateIpAddress)
+
+instance
+  Data.FromXML
+    NetworkInterfacePrivateIpAddress
+  where
+  parseXML x =
+    NetworkInterfacePrivateIpAddress'
+      Prelude.<$> (x Data..@? "association")
+      Prelude.<*> (x Data..@? "primary")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+
+instance
+  Prelude.Hashable
+    NetworkInterfacePrivateIpAddress
+  where
+  hashWithSalt
+    _salt
+    NetworkInterfacePrivateIpAddress' {..} =
+      _salt
+        `Prelude.hashWithSalt` association
+        `Prelude.hashWithSalt` primary
+        `Prelude.hashWithSalt` privateDnsName
+        `Prelude.hashWithSalt` privateIpAddress
+
+instance
+  Prelude.NFData
+    NetworkInterfacePrivateIpAddress
+  where
+  rnf NetworkInterfacePrivateIpAddress' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf primary
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf privateIpAddress
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceStatus.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceStatus.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceStatus
+  ( NetworkInterfaceStatus
+      ( ..,
+        NetworkInterfaceStatus_Associated,
+        NetworkInterfaceStatus_Attaching,
+        NetworkInterfaceStatus_Available,
+        NetworkInterfaceStatus_Detaching,
+        NetworkInterfaceStatus_In_use
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfaceStatus = NetworkInterfaceStatus'
+  { fromNetworkInterfaceStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkInterfaceStatus_Associated :: NetworkInterfaceStatus
+pattern NetworkInterfaceStatus_Associated = NetworkInterfaceStatus' "associated"
+
+pattern NetworkInterfaceStatus_Attaching :: NetworkInterfaceStatus
+pattern NetworkInterfaceStatus_Attaching = NetworkInterfaceStatus' "attaching"
+
+pattern NetworkInterfaceStatus_Available :: NetworkInterfaceStatus
+pattern NetworkInterfaceStatus_Available = NetworkInterfaceStatus' "available"
+
+pattern NetworkInterfaceStatus_Detaching :: NetworkInterfaceStatus
+pattern NetworkInterfaceStatus_Detaching = NetworkInterfaceStatus' "detaching"
+
+pattern NetworkInterfaceStatus_In_use :: NetworkInterfaceStatus
+pattern NetworkInterfaceStatus_In_use = NetworkInterfaceStatus' "in-use"
+
+{-# COMPLETE
+  NetworkInterfaceStatus_Associated,
+  NetworkInterfaceStatus_Attaching,
+  NetworkInterfaceStatus_Available,
+  NetworkInterfaceStatus_Detaching,
+  NetworkInterfaceStatus_In_use,
+  NetworkInterfaceStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NetworkInterfaceType.hs b/gen/Amazonka/EC2/Types/NetworkInterfaceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NetworkInterfaceType.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NetworkInterfaceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NetworkInterfaceType
+  ( NetworkInterfaceType
+      ( ..,
+        NetworkInterfaceType_Api_gateway_managed,
+        NetworkInterfaceType_Aws_codestar_connections_managed,
+        NetworkInterfaceType_Branch,
+        NetworkInterfaceType_Efa,
+        NetworkInterfaceType_Gateway_load_balancer,
+        NetworkInterfaceType_Gateway_load_balancer_endpoint,
+        NetworkInterfaceType_Global_accelerator_managed,
+        NetworkInterfaceType_Interface,
+        NetworkInterfaceType_Iot_rules_managed,
+        NetworkInterfaceType_Lambda,
+        NetworkInterfaceType_Load_balancer,
+        NetworkInterfaceType_NatGateway,
+        NetworkInterfaceType_Network_load_balancer,
+        NetworkInterfaceType_Quicksight,
+        NetworkInterfaceType_Transit_gateway,
+        NetworkInterfaceType_Trunk,
+        NetworkInterfaceType_Vpc_endpoint
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype NetworkInterfaceType = NetworkInterfaceType'
+  { fromNetworkInterfaceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern NetworkInterfaceType_Api_gateway_managed :: NetworkInterfaceType
+pattern NetworkInterfaceType_Api_gateway_managed = NetworkInterfaceType' "api_gateway_managed"
+
+pattern NetworkInterfaceType_Aws_codestar_connections_managed :: NetworkInterfaceType
+pattern NetworkInterfaceType_Aws_codestar_connections_managed = NetworkInterfaceType' "aws_codestar_connections_managed"
+
+pattern NetworkInterfaceType_Branch :: NetworkInterfaceType
+pattern NetworkInterfaceType_Branch = NetworkInterfaceType' "branch"
+
+pattern NetworkInterfaceType_Efa :: NetworkInterfaceType
+pattern NetworkInterfaceType_Efa = NetworkInterfaceType' "efa"
+
+pattern NetworkInterfaceType_Gateway_load_balancer :: NetworkInterfaceType
+pattern NetworkInterfaceType_Gateway_load_balancer = NetworkInterfaceType' "gateway_load_balancer"
+
+pattern NetworkInterfaceType_Gateway_load_balancer_endpoint :: NetworkInterfaceType
+pattern NetworkInterfaceType_Gateway_load_balancer_endpoint = NetworkInterfaceType' "gateway_load_balancer_endpoint"
+
+pattern NetworkInterfaceType_Global_accelerator_managed :: NetworkInterfaceType
+pattern NetworkInterfaceType_Global_accelerator_managed = NetworkInterfaceType' "global_accelerator_managed"
+
+pattern NetworkInterfaceType_Interface :: NetworkInterfaceType
+pattern NetworkInterfaceType_Interface = NetworkInterfaceType' "interface"
+
+pattern NetworkInterfaceType_Iot_rules_managed :: NetworkInterfaceType
+pattern NetworkInterfaceType_Iot_rules_managed = NetworkInterfaceType' "iot_rules_managed"
+
+pattern NetworkInterfaceType_Lambda :: NetworkInterfaceType
+pattern NetworkInterfaceType_Lambda = NetworkInterfaceType' "lambda"
+
+pattern NetworkInterfaceType_Load_balancer :: NetworkInterfaceType
+pattern NetworkInterfaceType_Load_balancer = NetworkInterfaceType' "load_balancer"
+
+pattern NetworkInterfaceType_NatGateway :: NetworkInterfaceType
+pattern NetworkInterfaceType_NatGateway = NetworkInterfaceType' "natGateway"
+
+pattern NetworkInterfaceType_Network_load_balancer :: NetworkInterfaceType
+pattern NetworkInterfaceType_Network_load_balancer = NetworkInterfaceType' "network_load_balancer"
+
+pattern NetworkInterfaceType_Quicksight :: NetworkInterfaceType
+pattern NetworkInterfaceType_Quicksight = NetworkInterfaceType' "quicksight"
+
+pattern NetworkInterfaceType_Transit_gateway :: NetworkInterfaceType
+pattern NetworkInterfaceType_Transit_gateway = NetworkInterfaceType' "transit_gateway"
+
+pattern NetworkInterfaceType_Trunk :: NetworkInterfaceType
+pattern NetworkInterfaceType_Trunk = NetworkInterfaceType' "trunk"
+
+pattern NetworkInterfaceType_Vpc_endpoint :: NetworkInterfaceType
+pattern NetworkInterfaceType_Vpc_endpoint = NetworkInterfaceType' "vpc_endpoint"
+
+{-# COMPLETE
+  NetworkInterfaceType_Api_gateway_managed,
+  NetworkInterfaceType_Aws_codestar_connections_managed,
+  NetworkInterfaceType_Branch,
+  NetworkInterfaceType_Efa,
+  NetworkInterfaceType_Gateway_load_balancer,
+  NetworkInterfaceType_Gateway_load_balancer_endpoint,
+  NetworkInterfaceType_Global_accelerator_managed,
+  NetworkInterfaceType_Interface,
+  NetworkInterfaceType_Iot_rules_managed,
+  NetworkInterfaceType_Lambda,
+  NetworkInterfaceType_Load_balancer,
+  NetworkInterfaceType_NatGateway,
+  NetworkInterfaceType_Network_load_balancer,
+  NetworkInterfaceType_Quicksight,
+  NetworkInterfaceType_Transit_gateway,
+  NetworkInterfaceType_Trunk,
+  NetworkInterfaceType_Vpc_endpoint,
+  NetworkInterfaceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/NewDhcpConfiguration.hs b/gen/Amazonka/EC2/Types/NewDhcpConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/NewDhcpConfiguration.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.NewDhcpConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.NewDhcpConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | /See:/ 'newNewDhcpConfiguration' smart constructor.
+data NewDhcpConfiguration = NewDhcpConfiguration'
+  { key :: Prelude.Maybe Prelude.Text,
+    values :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NewDhcpConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'newDhcpConfiguration_key' - Undocumented member.
+--
+-- 'values', 'newDhcpConfiguration_values' - Undocumented member.
+newNewDhcpConfiguration ::
+  NewDhcpConfiguration
+newNewDhcpConfiguration =
+  NewDhcpConfiguration'
+    { key = Prelude.Nothing,
+      values = Prelude.Nothing
+    }
+
+-- | Undocumented member.
+newDhcpConfiguration_key :: Lens.Lens' NewDhcpConfiguration (Prelude.Maybe Prelude.Text)
+newDhcpConfiguration_key = Lens.lens (\NewDhcpConfiguration' {key} -> key) (\s@NewDhcpConfiguration' {} a -> s {key = a} :: NewDhcpConfiguration)
+
+-- | Undocumented member.
+newDhcpConfiguration_values :: Lens.Lens' NewDhcpConfiguration (Prelude.Maybe [Prelude.Text])
+newDhcpConfiguration_values = Lens.lens (\NewDhcpConfiguration' {values} -> values) (\s@NewDhcpConfiguration' {} a -> s {values = a} :: NewDhcpConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable NewDhcpConfiguration where
+  hashWithSalt _salt NewDhcpConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData NewDhcpConfiguration where
+  rnf NewDhcpConfiguration' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf values
+
+instance Data.ToQuery NewDhcpConfiguration where
+  toQuery NewDhcpConfiguration' {..} =
+    Prelude.mconcat
+      [ "Key" Data.=: key,
+        Data.toQuery
+          (Data.toQueryList "Value" Prelude.<$> values)
+      ]
diff --git a/gen/Amazonka/EC2/Types/OfferingClassType.hs b/gen/Amazonka/EC2/Types/OfferingClassType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OfferingClassType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OfferingClassType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OfferingClassType
+  ( OfferingClassType
+      ( ..,
+        OfferingClassType_Convertible,
+        OfferingClassType_Standard
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype OfferingClassType = OfferingClassType'
+  { fromOfferingClassType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OfferingClassType_Convertible :: OfferingClassType
+pattern OfferingClassType_Convertible = OfferingClassType' "convertible"
+
+pattern OfferingClassType_Standard :: OfferingClassType
+pattern OfferingClassType_Standard = OfferingClassType' "standard"
+
+{-# COMPLETE
+  OfferingClassType_Convertible,
+  OfferingClassType_Standard,
+  OfferingClassType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/OfferingTypeValues.hs b/gen/Amazonka/EC2/Types/OfferingTypeValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OfferingTypeValues.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OfferingTypeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OfferingTypeValues
+  ( OfferingTypeValues
+      ( ..,
+        OfferingTypeValues_All_Upfront,
+        OfferingTypeValues_Heavy_Utilization,
+        OfferingTypeValues_Light_Utilization,
+        OfferingTypeValues_Medium_Utilization,
+        OfferingTypeValues_No_Upfront,
+        OfferingTypeValues_Partial_Upfront
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype OfferingTypeValues = OfferingTypeValues'
+  { fromOfferingTypeValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OfferingTypeValues_All_Upfront :: OfferingTypeValues
+pattern OfferingTypeValues_All_Upfront = OfferingTypeValues' "All Upfront"
+
+pattern OfferingTypeValues_Heavy_Utilization :: OfferingTypeValues
+pattern OfferingTypeValues_Heavy_Utilization = OfferingTypeValues' "Heavy Utilization"
+
+pattern OfferingTypeValues_Light_Utilization :: OfferingTypeValues
+pattern OfferingTypeValues_Light_Utilization = OfferingTypeValues' "Light Utilization"
+
+pattern OfferingTypeValues_Medium_Utilization :: OfferingTypeValues
+pattern OfferingTypeValues_Medium_Utilization = OfferingTypeValues' "Medium Utilization"
+
+pattern OfferingTypeValues_No_Upfront :: OfferingTypeValues
+pattern OfferingTypeValues_No_Upfront = OfferingTypeValues' "No Upfront"
+
+pattern OfferingTypeValues_Partial_Upfront :: OfferingTypeValues
+pattern OfferingTypeValues_Partial_Upfront = OfferingTypeValues' "Partial Upfront"
+
+{-# COMPLETE
+  OfferingTypeValues_All_Upfront,
+  OfferingTypeValues_Heavy_Utilization,
+  OfferingTypeValues_Light_Utilization,
+  OfferingTypeValues_Medium_Utilization,
+  OfferingTypeValues_No_Upfront,
+  OfferingTypeValues_Partial_Upfront,
+  OfferingTypeValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/OidcOptions.hs b/gen/Amazonka/EC2/Types/OidcOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OidcOptions.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OidcOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OidcOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for OIDC-based, user-identity type trust provider.
+--
+-- /See:/ 'newOidcOptions' smart constructor.
+data OidcOptions = OidcOptions'
+  { -- | The OIDC authorization endpoint.
+    authorizationEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The client identifier.
+    clientId :: Prelude.Maybe Prelude.Text,
+    -- | The client secret.
+    clientSecret :: Prelude.Maybe Prelude.Text,
+    -- | The OIDC issuer.
+    issuer :: Prelude.Maybe Prelude.Text,
+    -- | The OpenID Connect (OIDC) scope specified.
+    scope :: Prelude.Maybe Prelude.Text,
+    -- | The OIDC token endpoint.
+    tokenEndpoint :: Prelude.Maybe Prelude.Text,
+    -- | The OIDC user info endpoint.
+    userInfoEndpoint :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OidcOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authorizationEndpoint', 'oidcOptions_authorizationEndpoint' - The OIDC authorization endpoint.
+--
+-- 'clientId', 'oidcOptions_clientId' - The client identifier.
+--
+-- 'clientSecret', 'oidcOptions_clientSecret' - The client secret.
+--
+-- 'issuer', 'oidcOptions_issuer' - The OIDC issuer.
+--
+-- 'scope', 'oidcOptions_scope' - The OpenID Connect (OIDC) scope specified.
+--
+-- 'tokenEndpoint', 'oidcOptions_tokenEndpoint' - The OIDC token endpoint.
+--
+-- 'userInfoEndpoint', 'oidcOptions_userInfoEndpoint' - The OIDC user info endpoint.
+newOidcOptions ::
+  OidcOptions
+newOidcOptions =
+  OidcOptions'
+    { authorizationEndpoint =
+        Prelude.Nothing,
+      clientId = Prelude.Nothing,
+      clientSecret = Prelude.Nothing,
+      issuer = Prelude.Nothing,
+      scope = Prelude.Nothing,
+      tokenEndpoint = Prelude.Nothing,
+      userInfoEndpoint = Prelude.Nothing
+    }
+
+-- | The OIDC authorization endpoint.
+oidcOptions_authorizationEndpoint :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_authorizationEndpoint = Lens.lens (\OidcOptions' {authorizationEndpoint} -> authorizationEndpoint) (\s@OidcOptions' {} a -> s {authorizationEndpoint = a} :: OidcOptions)
+
+-- | The client identifier.
+oidcOptions_clientId :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_clientId = Lens.lens (\OidcOptions' {clientId} -> clientId) (\s@OidcOptions' {} a -> s {clientId = a} :: OidcOptions)
+
+-- | The client secret.
+oidcOptions_clientSecret :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_clientSecret = Lens.lens (\OidcOptions' {clientSecret} -> clientSecret) (\s@OidcOptions' {} a -> s {clientSecret = a} :: OidcOptions)
+
+-- | The OIDC issuer.
+oidcOptions_issuer :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_issuer = Lens.lens (\OidcOptions' {issuer} -> issuer) (\s@OidcOptions' {} a -> s {issuer = a} :: OidcOptions)
+
+-- | The OpenID Connect (OIDC) scope specified.
+oidcOptions_scope :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_scope = Lens.lens (\OidcOptions' {scope} -> scope) (\s@OidcOptions' {} a -> s {scope = a} :: OidcOptions)
+
+-- | The OIDC token endpoint.
+oidcOptions_tokenEndpoint :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_tokenEndpoint = Lens.lens (\OidcOptions' {tokenEndpoint} -> tokenEndpoint) (\s@OidcOptions' {} a -> s {tokenEndpoint = a} :: OidcOptions)
+
+-- | The OIDC user info endpoint.
+oidcOptions_userInfoEndpoint :: Lens.Lens' OidcOptions (Prelude.Maybe Prelude.Text)
+oidcOptions_userInfoEndpoint = Lens.lens (\OidcOptions' {userInfoEndpoint} -> userInfoEndpoint) (\s@OidcOptions' {} a -> s {userInfoEndpoint = a} :: OidcOptions)
+
+instance Data.FromXML OidcOptions where
+  parseXML x =
+    OidcOptions'
+      Prelude.<$> (x Data..@? "authorizationEndpoint")
+      Prelude.<*> (x Data..@? "clientId")
+      Prelude.<*> (x Data..@? "clientSecret")
+      Prelude.<*> (x Data..@? "issuer")
+      Prelude.<*> (x Data..@? "scope")
+      Prelude.<*> (x Data..@? "tokenEndpoint")
+      Prelude.<*> (x Data..@? "userInfoEndpoint")
+
+instance Prelude.Hashable OidcOptions where
+  hashWithSalt _salt OidcOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` authorizationEndpoint
+      `Prelude.hashWithSalt` clientId
+      `Prelude.hashWithSalt` clientSecret
+      `Prelude.hashWithSalt` issuer
+      `Prelude.hashWithSalt` scope
+      `Prelude.hashWithSalt` tokenEndpoint
+      `Prelude.hashWithSalt` userInfoEndpoint
+
+instance Prelude.NFData OidcOptions where
+  rnf OidcOptions' {..} =
+    Prelude.rnf authorizationEndpoint
+      `Prelude.seq` Prelude.rnf clientId
+      `Prelude.seq` Prelude.rnf clientSecret
+      `Prelude.seq` Prelude.rnf issuer
+      `Prelude.seq` Prelude.rnf scope
+      `Prelude.seq` Prelude.rnf tokenEndpoint
+      `Prelude.seq` Prelude.rnf userInfoEndpoint
diff --git a/gen/Amazonka/EC2/Types/OnDemandAllocationStrategy.hs b/gen/Amazonka/EC2/Types/OnDemandAllocationStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OnDemandAllocationStrategy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OnDemandAllocationStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OnDemandAllocationStrategy
+  ( OnDemandAllocationStrategy
+      ( ..,
+        OnDemandAllocationStrategy_LowestPrice,
+        OnDemandAllocationStrategy_Prioritized
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype OnDemandAllocationStrategy = OnDemandAllocationStrategy'
+  { fromOnDemandAllocationStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OnDemandAllocationStrategy_LowestPrice :: OnDemandAllocationStrategy
+pattern OnDemandAllocationStrategy_LowestPrice = OnDemandAllocationStrategy' "lowestPrice"
+
+pattern OnDemandAllocationStrategy_Prioritized :: OnDemandAllocationStrategy
+pattern OnDemandAllocationStrategy_Prioritized = OnDemandAllocationStrategy' "prioritized"
+
+{-# COMPLETE
+  OnDemandAllocationStrategy_LowestPrice,
+  OnDemandAllocationStrategy_Prioritized,
+  OnDemandAllocationStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/OnDemandOptions.hs b/gen/Amazonka/EC2/Types/OnDemandOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OnDemandOptions.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OnDemandOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OnDemandOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationOptions
+import Amazonka.EC2.Types.FleetOnDemandAllocationStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of On-Demand Instances in an EC2 Fleet.
+--
+-- /See:/ 'newOnDemandOptions' smart constructor.
+data OnDemandOptions = OnDemandOptions'
+  { -- | The strategy that determines the order of the launch template overrides
+    -- to use in fulfilling On-Demand capacity.
+    --
+    -- @lowest-price@ - EC2 Fleet uses price to determine the order, launching
+    -- the lowest price first.
+    --
+    -- @prioritized@ - EC2 Fleet uses the priority that you assigned to each
+    -- launch template override, launching the highest priority first.
+    --
+    -- Default: @lowest-price@
+    allocationStrategy :: Prelude.Maybe FleetOnDemandAllocationStrategy,
+    -- | The strategy for using unused Capacity Reservations for fulfilling
+    -- On-Demand capacity.
+    --
+    -- Supported only for fleets of type @instant@.
+    capacityReservationOptions :: Prelude.Maybe CapacityReservationOptions,
+    -- | The maximum amount per hour for On-Demand Instances that you\'re willing
+    -- to pay.
+    maxTotalPrice :: Prelude.Maybe Prelude.Text,
+    -- | The minimum target capacity for On-Demand Instances in the fleet. If the
+    -- minimum target capacity is not reached, the fleet launches no instances.
+    --
+    -- Supported only for fleets of type @instant@.
+    --
+    -- At least one of the following must be specified:
+    -- @SingleAvailabilityZone@ | @SingleInstanceType@
+    minTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | Indicates that the fleet launches all On-Demand Instances into a single
+    -- Availability Zone.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleAvailabilityZone :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates that the fleet uses a single instance type to launch all
+    -- On-Demand Instances in the fleet.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleInstanceType :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnDemandOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'onDemandOptions_allocationStrategy' - The strategy that determines the order of the launch template overrides
+-- to use in fulfilling On-Demand capacity.
+--
+-- @lowest-price@ - EC2 Fleet uses price to determine the order, launching
+-- the lowest price first.
+--
+-- @prioritized@ - EC2 Fleet uses the priority that you assigned to each
+-- launch template override, launching the highest priority first.
+--
+-- Default: @lowest-price@
+--
+-- 'capacityReservationOptions', 'onDemandOptions_capacityReservationOptions' - The strategy for using unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- 'maxTotalPrice', 'onDemandOptions_maxTotalPrice' - The maximum amount per hour for On-Demand Instances that you\'re willing
+-- to pay.
+--
+-- 'minTargetCapacity', 'onDemandOptions_minTargetCapacity' - The minimum target capacity for On-Demand Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+--
+-- 'singleAvailabilityZone', 'onDemandOptions_singleAvailabilityZone' - Indicates that the fleet launches all On-Demand Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- 'singleInstanceType', 'onDemandOptions_singleInstanceType' - Indicates that the fleet uses a single instance type to launch all
+-- On-Demand Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+newOnDemandOptions ::
+  OnDemandOptions
+newOnDemandOptions =
+  OnDemandOptions'
+    { allocationStrategy =
+        Prelude.Nothing,
+      capacityReservationOptions = Prelude.Nothing,
+      maxTotalPrice = Prelude.Nothing,
+      minTargetCapacity = Prelude.Nothing,
+      singleAvailabilityZone = Prelude.Nothing,
+      singleInstanceType = Prelude.Nothing
+    }
+
+-- | The strategy that determines the order of the launch template overrides
+-- to use in fulfilling On-Demand capacity.
+--
+-- @lowest-price@ - EC2 Fleet uses price to determine the order, launching
+-- the lowest price first.
+--
+-- @prioritized@ - EC2 Fleet uses the priority that you assigned to each
+-- launch template override, launching the highest priority first.
+--
+-- Default: @lowest-price@
+onDemandOptions_allocationStrategy :: Lens.Lens' OnDemandOptions (Prelude.Maybe FleetOnDemandAllocationStrategy)
+onDemandOptions_allocationStrategy = Lens.lens (\OnDemandOptions' {allocationStrategy} -> allocationStrategy) (\s@OnDemandOptions' {} a -> s {allocationStrategy = a} :: OnDemandOptions)
+
+-- | The strategy for using unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- Supported only for fleets of type @instant@.
+onDemandOptions_capacityReservationOptions :: Lens.Lens' OnDemandOptions (Prelude.Maybe CapacityReservationOptions)
+onDemandOptions_capacityReservationOptions = Lens.lens (\OnDemandOptions' {capacityReservationOptions} -> capacityReservationOptions) (\s@OnDemandOptions' {} a -> s {capacityReservationOptions = a} :: OnDemandOptions)
+
+-- | The maximum amount per hour for On-Demand Instances that you\'re willing
+-- to pay.
+onDemandOptions_maxTotalPrice :: Lens.Lens' OnDemandOptions (Prelude.Maybe Prelude.Text)
+onDemandOptions_maxTotalPrice = Lens.lens (\OnDemandOptions' {maxTotalPrice} -> maxTotalPrice) (\s@OnDemandOptions' {} a -> s {maxTotalPrice = a} :: OnDemandOptions)
+
+-- | The minimum target capacity for On-Demand Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+onDemandOptions_minTargetCapacity :: Lens.Lens' OnDemandOptions (Prelude.Maybe Prelude.Int)
+onDemandOptions_minTargetCapacity = Lens.lens (\OnDemandOptions' {minTargetCapacity} -> minTargetCapacity) (\s@OnDemandOptions' {} a -> s {minTargetCapacity = a} :: OnDemandOptions)
+
+-- | Indicates that the fleet launches all On-Demand Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+onDemandOptions_singleAvailabilityZone :: Lens.Lens' OnDemandOptions (Prelude.Maybe Prelude.Bool)
+onDemandOptions_singleAvailabilityZone = Lens.lens (\OnDemandOptions' {singleAvailabilityZone} -> singleAvailabilityZone) (\s@OnDemandOptions' {} a -> s {singleAvailabilityZone = a} :: OnDemandOptions)
+
+-- | Indicates that the fleet uses a single instance type to launch all
+-- On-Demand Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+onDemandOptions_singleInstanceType :: Lens.Lens' OnDemandOptions (Prelude.Maybe Prelude.Bool)
+onDemandOptions_singleInstanceType = Lens.lens (\OnDemandOptions' {singleInstanceType} -> singleInstanceType) (\s@OnDemandOptions' {} a -> s {singleInstanceType = a} :: OnDemandOptions)
+
+instance Data.FromXML OnDemandOptions where
+  parseXML x =
+    OnDemandOptions'
+      Prelude.<$> (x Data..@? "allocationStrategy")
+      Prelude.<*> (x Data..@? "capacityReservationOptions")
+      Prelude.<*> (x Data..@? "maxTotalPrice")
+      Prelude.<*> (x Data..@? "minTargetCapacity")
+      Prelude.<*> (x Data..@? "singleAvailabilityZone")
+      Prelude.<*> (x Data..@? "singleInstanceType")
+
+instance Prelude.Hashable OnDemandOptions where
+  hashWithSalt _salt OnDemandOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationStrategy
+      `Prelude.hashWithSalt` capacityReservationOptions
+      `Prelude.hashWithSalt` maxTotalPrice
+      `Prelude.hashWithSalt` minTargetCapacity
+      `Prelude.hashWithSalt` singleAvailabilityZone
+      `Prelude.hashWithSalt` singleInstanceType
+
+instance Prelude.NFData OnDemandOptions where
+  rnf OnDemandOptions' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf capacityReservationOptions
+      `Prelude.seq` Prelude.rnf maxTotalPrice
+      `Prelude.seq` Prelude.rnf minTargetCapacity
+      `Prelude.seq` Prelude.rnf singleAvailabilityZone
+      `Prelude.seq` Prelude.rnf singleInstanceType
diff --git a/gen/Amazonka/EC2/Types/OnDemandOptionsRequest.hs b/gen/Amazonka/EC2/Types/OnDemandOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OnDemandOptionsRequest.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OnDemandOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OnDemandOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationOptionsRequest
+import Amazonka.EC2.Types.FleetOnDemandAllocationStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of On-Demand Instances in an EC2 Fleet.
+--
+-- /See:/ 'newOnDemandOptionsRequest' smart constructor.
+data OnDemandOptionsRequest = OnDemandOptionsRequest'
+  { -- | The strategy that determines the order of the launch template overrides
+    -- to use in fulfilling On-Demand capacity.
+    --
+    -- @lowest-price@ - EC2 Fleet uses price to determine the order, launching
+    -- the lowest price first.
+    --
+    -- @prioritized@ - EC2 Fleet uses the priority that you assigned to each
+    -- launch template override, launching the highest priority first.
+    --
+    -- Default: @lowest-price@
+    allocationStrategy :: Prelude.Maybe FleetOnDemandAllocationStrategy,
+    -- | The strategy for using unused Capacity Reservations for fulfilling
+    -- On-Demand capacity.
+    --
+    -- Supported only for fleets of type @instant@.
+    capacityReservationOptions :: Prelude.Maybe CapacityReservationOptionsRequest,
+    -- | The maximum amount per hour for On-Demand Instances that you\'re willing
+    -- to pay.
+    maxTotalPrice :: Prelude.Maybe Prelude.Text,
+    -- | The minimum target capacity for On-Demand Instances in the fleet. If the
+    -- minimum target capacity is not reached, the fleet launches no instances.
+    --
+    -- Supported only for fleets of type @instant@.
+    --
+    -- At least one of the following must be specified:
+    -- @SingleAvailabilityZone@ | @SingleInstanceType@
+    minTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | Indicates that the fleet launches all On-Demand Instances into a single
+    -- Availability Zone.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleAvailabilityZone :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates that the fleet uses a single instance type to launch all
+    -- On-Demand Instances in the fleet.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleInstanceType :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnDemandOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'onDemandOptionsRequest_allocationStrategy' - The strategy that determines the order of the launch template overrides
+-- to use in fulfilling On-Demand capacity.
+--
+-- @lowest-price@ - EC2 Fleet uses price to determine the order, launching
+-- the lowest price first.
+--
+-- @prioritized@ - EC2 Fleet uses the priority that you assigned to each
+-- launch template override, launching the highest priority first.
+--
+-- Default: @lowest-price@
+--
+-- 'capacityReservationOptions', 'onDemandOptionsRequest_capacityReservationOptions' - The strategy for using unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- 'maxTotalPrice', 'onDemandOptionsRequest_maxTotalPrice' - The maximum amount per hour for On-Demand Instances that you\'re willing
+-- to pay.
+--
+-- 'minTargetCapacity', 'onDemandOptionsRequest_minTargetCapacity' - The minimum target capacity for On-Demand Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+--
+-- 'singleAvailabilityZone', 'onDemandOptionsRequest_singleAvailabilityZone' - Indicates that the fleet launches all On-Demand Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- 'singleInstanceType', 'onDemandOptionsRequest_singleInstanceType' - Indicates that the fleet uses a single instance type to launch all
+-- On-Demand Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+newOnDemandOptionsRequest ::
+  OnDemandOptionsRequest
+newOnDemandOptionsRequest =
+  OnDemandOptionsRequest'
+    { allocationStrategy =
+        Prelude.Nothing,
+      capacityReservationOptions = Prelude.Nothing,
+      maxTotalPrice = Prelude.Nothing,
+      minTargetCapacity = Prelude.Nothing,
+      singleAvailabilityZone = Prelude.Nothing,
+      singleInstanceType = Prelude.Nothing
+    }
+
+-- | The strategy that determines the order of the launch template overrides
+-- to use in fulfilling On-Demand capacity.
+--
+-- @lowest-price@ - EC2 Fleet uses price to determine the order, launching
+-- the lowest price first.
+--
+-- @prioritized@ - EC2 Fleet uses the priority that you assigned to each
+-- launch template override, launching the highest priority first.
+--
+-- Default: @lowest-price@
+onDemandOptionsRequest_allocationStrategy :: Lens.Lens' OnDemandOptionsRequest (Prelude.Maybe FleetOnDemandAllocationStrategy)
+onDemandOptionsRequest_allocationStrategy = Lens.lens (\OnDemandOptionsRequest' {allocationStrategy} -> allocationStrategy) (\s@OnDemandOptionsRequest' {} a -> s {allocationStrategy = a} :: OnDemandOptionsRequest)
+
+-- | The strategy for using unused Capacity Reservations for fulfilling
+-- On-Demand capacity.
+--
+-- Supported only for fleets of type @instant@.
+onDemandOptionsRequest_capacityReservationOptions :: Lens.Lens' OnDemandOptionsRequest (Prelude.Maybe CapacityReservationOptionsRequest)
+onDemandOptionsRequest_capacityReservationOptions = Lens.lens (\OnDemandOptionsRequest' {capacityReservationOptions} -> capacityReservationOptions) (\s@OnDemandOptionsRequest' {} a -> s {capacityReservationOptions = a} :: OnDemandOptionsRequest)
+
+-- | The maximum amount per hour for On-Demand Instances that you\'re willing
+-- to pay.
+onDemandOptionsRequest_maxTotalPrice :: Lens.Lens' OnDemandOptionsRequest (Prelude.Maybe Prelude.Text)
+onDemandOptionsRequest_maxTotalPrice = Lens.lens (\OnDemandOptionsRequest' {maxTotalPrice} -> maxTotalPrice) (\s@OnDemandOptionsRequest' {} a -> s {maxTotalPrice = a} :: OnDemandOptionsRequest)
+
+-- | The minimum target capacity for On-Demand Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+onDemandOptionsRequest_minTargetCapacity :: Lens.Lens' OnDemandOptionsRequest (Prelude.Maybe Prelude.Int)
+onDemandOptionsRequest_minTargetCapacity = Lens.lens (\OnDemandOptionsRequest' {minTargetCapacity} -> minTargetCapacity) (\s@OnDemandOptionsRequest' {} a -> s {minTargetCapacity = a} :: OnDemandOptionsRequest)
+
+-- | Indicates that the fleet launches all On-Demand Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+onDemandOptionsRequest_singleAvailabilityZone :: Lens.Lens' OnDemandOptionsRequest (Prelude.Maybe Prelude.Bool)
+onDemandOptionsRequest_singleAvailabilityZone = Lens.lens (\OnDemandOptionsRequest' {singleAvailabilityZone} -> singleAvailabilityZone) (\s@OnDemandOptionsRequest' {} a -> s {singleAvailabilityZone = a} :: OnDemandOptionsRequest)
+
+-- | Indicates that the fleet uses a single instance type to launch all
+-- On-Demand Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+onDemandOptionsRequest_singleInstanceType :: Lens.Lens' OnDemandOptionsRequest (Prelude.Maybe Prelude.Bool)
+onDemandOptionsRequest_singleInstanceType = Lens.lens (\OnDemandOptionsRequest' {singleInstanceType} -> singleInstanceType) (\s@OnDemandOptionsRequest' {} a -> s {singleInstanceType = a} :: OnDemandOptionsRequest)
+
+instance Prelude.Hashable OnDemandOptionsRequest where
+  hashWithSalt _salt OnDemandOptionsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationStrategy
+      `Prelude.hashWithSalt` capacityReservationOptions
+      `Prelude.hashWithSalt` maxTotalPrice
+      `Prelude.hashWithSalt` minTargetCapacity
+      `Prelude.hashWithSalt` singleAvailabilityZone
+      `Prelude.hashWithSalt` singleInstanceType
+
+instance Prelude.NFData OnDemandOptionsRequest where
+  rnf OnDemandOptionsRequest' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf capacityReservationOptions
+      `Prelude.seq` Prelude.rnf maxTotalPrice
+      `Prelude.seq` Prelude.rnf minTargetCapacity
+      `Prelude.seq` Prelude.rnf singleAvailabilityZone
+      `Prelude.seq` Prelude.rnf singleInstanceType
+
+instance Data.ToQuery OnDemandOptionsRequest where
+  toQuery OnDemandOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "AllocationStrategy" Data.=: allocationStrategy,
+        "CapacityReservationOptions"
+          Data.=: capacityReservationOptions,
+        "MaxTotalPrice" Data.=: maxTotalPrice,
+        "MinTargetCapacity" Data.=: minTargetCapacity,
+        "SingleAvailabilityZone"
+          Data.=: singleAvailabilityZone,
+        "SingleInstanceType" Data.=: singleInstanceType
+      ]
diff --git a/gen/Amazonka/EC2/Types/OperationType.hs b/gen/Amazonka/EC2/Types/OperationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/OperationType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.OperationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.OperationType
+  ( OperationType
+      ( ..,
+        OperationType_Add,
+        OperationType_Remove
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype OperationType = OperationType'
+  { fromOperationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern OperationType_Add :: OperationType
+pattern OperationType_Add = OperationType' "add"
+
+pattern OperationType_Remove :: OperationType
+pattern OperationType_Remove = OperationType' "remove"
+
+{-# COMPLETE
+  OperationType_Add,
+  OperationType_Remove,
+  OperationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PacketHeaderStatement.hs b/gen/Amazonka/EC2/Types/PacketHeaderStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PacketHeaderStatement.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PacketHeaderStatement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PacketHeaderStatement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Protocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a packet header statement.
+--
+-- /See:/ 'newPacketHeaderStatement' smart constructor.
+data PacketHeaderStatement = PacketHeaderStatement'
+  { -- | The destination addresses.
+    destinationAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The destination ports.
+    destinationPorts :: Prelude.Maybe [Prelude.Text],
+    -- | The destination prefix lists.
+    destinationPrefixLists :: Prelude.Maybe [Prelude.Text],
+    -- | The protocols.
+    protocols :: Prelude.Maybe [Protocol],
+    -- | The source addresses.
+    sourceAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The source ports.
+    sourcePorts :: Prelude.Maybe [Prelude.Text],
+    -- | The source prefix lists.
+    sourcePrefixLists :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PacketHeaderStatement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationAddresses', 'packetHeaderStatement_destinationAddresses' - The destination addresses.
+--
+-- 'destinationPorts', 'packetHeaderStatement_destinationPorts' - The destination ports.
+--
+-- 'destinationPrefixLists', 'packetHeaderStatement_destinationPrefixLists' - The destination prefix lists.
+--
+-- 'protocols', 'packetHeaderStatement_protocols' - The protocols.
+--
+-- 'sourceAddresses', 'packetHeaderStatement_sourceAddresses' - The source addresses.
+--
+-- 'sourcePorts', 'packetHeaderStatement_sourcePorts' - The source ports.
+--
+-- 'sourcePrefixLists', 'packetHeaderStatement_sourcePrefixLists' - The source prefix lists.
+newPacketHeaderStatement ::
+  PacketHeaderStatement
+newPacketHeaderStatement =
+  PacketHeaderStatement'
+    { destinationAddresses =
+        Prelude.Nothing,
+      destinationPorts = Prelude.Nothing,
+      destinationPrefixLists = Prelude.Nothing,
+      protocols = Prelude.Nothing,
+      sourceAddresses = Prelude.Nothing,
+      sourcePorts = Prelude.Nothing,
+      sourcePrefixLists = Prelude.Nothing
+    }
+
+-- | The destination addresses.
+packetHeaderStatement_destinationAddresses :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Prelude.Text])
+packetHeaderStatement_destinationAddresses = Lens.lens (\PacketHeaderStatement' {destinationAddresses} -> destinationAddresses) (\s@PacketHeaderStatement' {} a -> s {destinationAddresses = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The destination ports.
+packetHeaderStatement_destinationPorts :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Prelude.Text])
+packetHeaderStatement_destinationPorts = Lens.lens (\PacketHeaderStatement' {destinationPorts} -> destinationPorts) (\s@PacketHeaderStatement' {} a -> s {destinationPorts = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The destination prefix lists.
+packetHeaderStatement_destinationPrefixLists :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Prelude.Text])
+packetHeaderStatement_destinationPrefixLists = Lens.lens (\PacketHeaderStatement' {destinationPrefixLists} -> destinationPrefixLists) (\s@PacketHeaderStatement' {} a -> s {destinationPrefixLists = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The protocols.
+packetHeaderStatement_protocols :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Protocol])
+packetHeaderStatement_protocols = Lens.lens (\PacketHeaderStatement' {protocols} -> protocols) (\s@PacketHeaderStatement' {} a -> s {protocols = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source addresses.
+packetHeaderStatement_sourceAddresses :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Prelude.Text])
+packetHeaderStatement_sourceAddresses = Lens.lens (\PacketHeaderStatement' {sourceAddresses} -> sourceAddresses) (\s@PacketHeaderStatement' {} a -> s {sourceAddresses = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source ports.
+packetHeaderStatement_sourcePorts :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Prelude.Text])
+packetHeaderStatement_sourcePorts = Lens.lens (\PacketHeaderStatement' {sourcePorts} -> sourcePorts) (\s@PacketHeaderStatement' {} a -> s {sourcePorts = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source prefix lists.
+packetHeaderStatement_sourcePrefixLists :: Lens.Lens' PacketHeaderStatement (Prelude.Maybe [Prelude.Text])
+packetHeaderStatement_sourcePrefixLists = Lens.lens (\PacketHeaderStatement' {sourcePrefixLists} -> sourcePrefixLists) (\s@PacketHeaderStatement' {} a -> s {sourcePrefixLists = a} :: PacketHeaderStatement) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML PacketHeaderStatement where
+  parseXML x =
+    PacketHeaderStatement'
+      Prelude.<$> ( x
+                      Data..@? "destinationAddressSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "destinationPortSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "destinationPrefixListSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "protocolSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "sourceAddressSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "sourcePortSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "sourcePrefixListSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable PacketHeaderStatement where
+  hashWithSalt _salt PacketHeaderStatement' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationAddresses
+      `Prelude.hashWithSalt` destinationPorts
+      `Prelude.hashWithSalt` destinationPrefixLists
+      `Prelude.hashWithSalt` protocols
+      `Prelude.hashWithSalt` sourceAddresses
+      `Prelude.hashWithSalt` sourcePorts
+      `Prelude.hashWithSalt` sourcePrefixLists
+
+instance Prelude.NFData PacketHeaderStatement where
+  rnf PacketHeaderStatement' {..} =
+    Prelude.rnf destinationAddresses
+      `Prelude.seq` Prelude.rnf destinationPorts
+      `Prelude.seq` Prelude.rnf destinationPrefixLists
+      `Prelude.seq` Prelude.rnf protocols
+      `Prelude.seq` Prelude.rnf sourceAddresses
+      `Prelude.seq` Prelude.rnf sourcePorts
+      `Prelude.seq` Prelude.rnf sourcePrefixLists
diff --git a/gen/Amazonka/EC2/Types/PacketHeaderStatementRequest.hs b/gen/Amazonka/EC2/Types/PacketHeaderStatementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PacketHeaderStatementRequest.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PacketHeaderStatementRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PacketHeaderStatementRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Protocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a packet header statement.
+--
+-- /See:/ 'newPacketHeaderStatementRequest' smart constructor.
+data PacketHeaderStatementRequest = PacketHeaderStatementRequest'
+  { -- | The destination addresses.
+    destinationAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The destination ports.
+    destinationPorts :: Prelude.Maybe [Prelude.Text],
+    -- | The destination prefix lists.
+    destinationPrefixLists :: Prelude.Maybe [Prelude.Text],
+    -- | The protocols.
+    protocols :: Prelude.Maybe [Protocol],
+    -- | The source addresses.
+    sourceAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The source ports.
+    sourcePorts :: Prelude.Maybe [Prelude.Text],
+    -- | The source prefix lists.
+    sourcePrefixLists :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PacketHeaderStatementRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationAddresses', 'packetHeaderStatementRequest_destinationAddresses' - The destination addresses.
+--
+-- 'destinationPorts', 'packetHeaderStatementRequest_destinationPorts' - The destination ports.
+--
+-- 'destinationPrefixLists', 'packetHeaderStatementRequest_destinationPrefixLists' - The destination prefix lists.
+--
+-- 'protocols', 'packetHeaderStatementRequest_protocols' - The protocols.
+--
+-- 'sourceAddresses', 'packetHeaderStatementRequest_sourceAddresses' - The source addresses.
+--
+-- 'sourcePorts', 'packetHeaderStatementRequest_sourcePorts' - The source ports.
+--
+-- 'sourcePrefixLists', 'packetHeaderStatementRequest_sourcePrefixLists' - The source prefix lists.
+newPacketHeaderStatementRequest ::
+  PacketHeaderStatementRequest
+newPacketHeaderStatementRequest =
+  PacketHeaderStatementRequest'
+    { destinationAddresses =
+        Prelude.Nothing,
+      destinationPorts = Prelude.Nothing,
+      destinationPrefixLists = Prelude.Nothing,
+      protocols = Prelude.Nothing,
+      sourceAddresses = Prelude.Nothing,
+      sourcePorts = Prelude.Nothing,
+      sourcePrefixLists = Prelude.Nothing
+    }
+
+-- | The destination addresses.
+packetHeaderStatementRequest_destinationAddresses :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Prelude.Text])
+packetHeaderStatementRequest_destinationAddresses = Lens.lens (\PacketHeaderStatementRequest' {destinationAddresses} -> destinationAddresses) (\s@PacketHeaderStatementRequest' {} a -> s {destinationAddresses = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The destination ports.
+packetHeaderStatementRequest_destinationPorts :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Prelude.Text])
+packetHeaderStatementRequest_destinationPorts = Lens.lens (\PacketHeaderStatementRequest' {destinationPorts} -> destinationPorts) (\s@PacketHeaderStatementRequest' {} a -> s {destinationPorts = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The destination prefix lists.
+packetHeaderStatementRequest_destinationPrefixLists :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Prelude.Text])
+packetHeaderStatementRequest_destinationPrefixLists = Lens.lens (\PacketHeaderStatementRequest' {destinationPrefixLists} -> destinationPrefixLists) (\s@PacketHeaderStatementRequest' {} a -> s {destinationPrefixLists = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The protocols.
+packetHeaderStatementRequest_protocols :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Protocol])
+packetHeaderStatementRequest_protocols = Lens.lens (\PacketHeaderStatementRequest' {protocols} -> protocols) (\s@PacketHeaderStatementRequest' {} a -> s {protocols = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source addresses.
+packetHeaderStatementRequest_sourceAddresses :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Prelude.Text])
+packetHeaderStatementRequest_sourceAddresses = Lens.lens (\PacketHeaderStatementRequest' {sourceAddresses} -> sourceAddresses) (\s@PacketHeaderStatementRequest' {} a -> s {sourceAddresses = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source ports.
+packetHeaderStatementRequest_sourcePorts :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Prelude.Text])
+packetHeaderStatementRequest_sourcePorts = Lens.lens (\PacketHeaderStatementRequest' {sourcePorts} -> sourcePorts) (\s@PacketHeaderStatementRequest' {} a -> s {sourcePorts = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The source prefix lists.
+packetHeaderStatementRequest_sourcePrefixLists :: Lens.Lens' PacketHeaderStatementRequest (Prelude.Maybe [Prelude.Text])
+packetHeaderStatementRequest_sourcePrefixLists = Lens.lens (\PacketHeaderStatementRequest' {sourcePrefixLists} -> sourcePrefixLists) (\s@PacketHeaderStatementRequest' {} a -> s {sourcePrefixLists = a} :: PacketHeaderStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    PacketHeaderStatementRequest
+  where
+  hashWithSalt _salt PacketHeaderStatementRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationAddresses
+      `Prelude.hashWithSalt` destinationPorts
+      `Prelude.hashWithSalt` destinationPrefixLists
+      `Prelude.hashWithSalt` protocols
+      `Prelude.hashWithSalt` sourceAddresses
+      `Prelude.hashWithSalt` sourcePorts
+      `Prelude.hashWithSalt` sourcePrefixLists
+
+instance Prelude.NFData PacketHeaderStatementRequest where
+  rnf PacketHeaderStatementRequest' {..} =
+    Prelude.rnf destinationAddresses
+      `Prelude.seq` Prelude.rnf destinationPorts
+      `Prelude.seq` Prelude.rnf destinationPrefixLists
+      `Prelude.seq` Prelude.rnf protocols
+      `Prelude.seq` Prelude.rnf sourceAddresses
+      `Prelude.seq` Prelude.rnf sourcePorts
+      `Prelude.seq` Prelude.rnf sourcePrefixLists
+
+instance Data.ToQuery PacketHeaderStatementRequest where
+  toQuery PacketHeaderStatementRequest' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "DestinationAddress"
+              Prelude.<$> destinationAddresses
+          ),
+        Data.toQuery
+          ( Data.toQueryList "DestinationPort"
+              Prelude.<$> destinationPorts
+          ),
+        Data.toQuery
+          ( Data.toQueryList "DestinationPrefixList"
+              Prelude.<$> destinationPrefixLists
+          ),
+        Data.toQuery
+          (Data.toQueryList "Protocol" Prelude.<$> protocols),
+        Data.toQuery
+          ( Data.toQueryList "SourceAddress"
+              Prelude.<$> sourceAddresses
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SourcePort"
+              Prelude.<$> sourcePorts
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SourcePrefixList"
+              Prelude.<$> sourcePrefixLists
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/PartitionLoadFrequency.hs b/gen/Amazonka/EC2/Types/PartitionLoadFrequency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PartitionLoadFrequency.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PartitionLoadFrequency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PartitionLoadFrequency
+  ( PartitionLoadFrequency
+      ( ..,
+        PartitionLoadFrequency_Daily,
+        PartitionLoadFrequency_Monthly,
+        PartitionLoadFrequency_None,
+        PartitionLoadFrequency_Weekly
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PartitionLoadFrequency = PartitionLoadFrequency'
+  { fromPartitionLoadFrequency ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PartitionLoadFrequency_Daily :: PartitionLoadFrequency
+pattern PartitionLoadFrequency_Daily = PartitionLoadFrequency' "daily"
+
+pattern PartitionLoadFrequency_Monthly :: PartitionLoadFrequency
+pattern PartitionLoadFrequency_Monthly = PartitionLoadFrequency' "monthly"
+
+pattern PartitionLoadFrequency_None :: PartitionLoadFrequency
+pattern PartitionLoadFrequency_None = PartitionLoadFrequency' "none"
+
+pattern PartitionLoadFrequency_Weekly :: PartitionLoadFrequency
+pattern PartitionLoadFrequency_Weekly = PartitionLoadFrequency' "weekly"
+
+{-# COMPLETE
+  PartitionLoadFrequency_Daily,
+  PartitionLoadFrequency_Monthly,
+  PartitionLoadFrequency_None,
+  PartitionLoadFrequency_Weekly,
+  PartitionLoadFrequency'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PathComponent.hs b/gen/Amazonka/EC2/Types/PathComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PathComponent.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PathComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PathComponent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AdditionalDetail
+import Amazonka.EC2.Types.AnalysisAclRule
+import Amazonka.EC2.Types.AnalysisComponent
+import Amazonka.EC2.Types.AnalysisPacketHeader
+import Amazonka.EC2.Types.AnalysisRouteTableRoute
+import Amazonka.EC2.Types.AnalysisSecurityGroupRule
+import Amazonka.EC2.Types.Explanation
+import Amazonka.EC2.Types.TransitGatewayRouteTableRoute
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path component.
+--
+-- /See:/ 'newPathComponent' smart constructor.
+data PathComponent = PathComponent'
+  { -- | The network ACL rule.
+    aclRule :: Prelude.Maybe AnalysisAclRule,
+    -- | The additional details.
+    additionalDetails :: Prelude.Maybe [AdditionalDetail],
+    -- | The resource to which the path component is attached.
+    attachedTo :: Prelude.Maybe AnalysisComponent,
+    -- | The component.
+    component :: Prelude.Maybe AnalysisComponent,
+    -- | The destination VPC.
+    destinationVpc :: Prelude.Maybe AnalysisComponent,
+    -- | The load balancer listener.
+    elasticLoadBalancerListener :: Prelude.Maybe AnalysisComponent,
+    -- | The explanation codes.
+    explanations :: Prelude.Maybe [Explanation],
+    -- | The inbound header.
+    inboundHeader :: Prelude.Maybe AnalysisPacketHeader,
+    -- | The outbound header.
+    outboundHeader :: Prelude.Maybe AnalysisPacketHeader,
+    -- | The route table route.
+    routeTableRoute :: Prelude.Maybe AnalysisRouteTableRoute,
+    -- | The security group rule.
+    securityGroupRule :: Prelude.Maybe AnalysisSecurityGroupRule,
+    -- | The sequence number.
+    sequenceNumber :: Prelude.Maybe Prelude.Int,
+    -- | The source VPC.
+    sourceVpc :: Prelude.Maybe AnalysisComponent,
+    -- | The subnet.
+    subnet :: Prelude.Maybe AnalysisComponent,
+    -- | The transit gateway.
+    transitGateway :: Prelude.Maybe AnalysisComponent,
+    -- | The route in a transit gateway route table.
+    transitGatewayRouteTableRoute :: Prelude.Maybe TransitGatewayRouteTableRoute,
+    -- | The component VPC.
+    vpc :: Prelude.Maybe AnalysisComponent
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PathComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aclRule', 'pathComponent_aclRule' - The network ACL rule.
+--
+-- 'additionalDetails', 'pathComponent_additionalDetails' - The additional details.
+--
+-- 'attachedTo', 'pathComponent_attachedTo' - The resource to which the path component is attached.
+--
+-- 'component', 'pathComponent_component' - The component.
+--
+-- 'destinationVpc', 'pathComponent_destinationVpc' - The destination VPC.
+--
+-- 'elasticLoadBalancerListener', 'pathComponent_elasticLoadBalancerListener' - The load balancer listener.
+--
+-- 'explanations', 'pathComponent_explanations' - The explanation codes.
+--
+-- 'inboundHeader', 'pathComponent_inboundHeader' - The inbound header.
+--
+-- 'outboundHeader', 'pathComponent_outboundHeader' - The outbound header.
+--
+-- 'routeTableRoute', 'pathComponent_routeTableRoute' - The route table route.
+--
+-- 'securityGroupRule', 'pathComponent_securityGroupRule' - The security group rule.
+--
+-- 'sequenceNumber', 'pathComponent_sequenceNumber' - The sequence number.
+--
+-- 'sourceVpc', 'pathComponent_sourceVpc' - The source VPC.
+--
+-- 'subnet', 'pathComponent_subnet' - The subnet.
+--
+-- 'transitGateway', 'pathComponent_transitGateway' - The transit gateway.
+--
+-- 'transitGatewayRouteTableRoute', 'pathComponent_transitGatewayRouteTableRoute' - The route in a transit gateway route table.
+--
+-- 'vpc', 'pathComponent_vpc' - The component VPC.
+newPathComponent ::
+  PathComponent
+newPathComponent =
+  PathComponent'
+    { aclRule = Prelude.Nothing,
+      additionalDetails = Prelude.Nothing,
+      attachedTo = Prelude.Nothing,
+      component = Prelude.Nothing,
+      destinationVpc = Prelude.Nothing,
+      elasticLoadBalancerListener = Prelude.Nothing,
+      explanations = Prelude.Nothing,
+      inboundHeader = Prelude.Nothing,
+      outboundHeader = Prelude.Nothing,
+      routeTableRoute = Prelude.Nothing,
+      securityGroupRule = Prelude.Nothing,
+      sequenceNumber = Prelude.Nothing,
+      sourceVpc = Prelude.Nothing,
+      subnet = Prelude.Nothing,
+      transitGateway = Prelude.Nothing,
+      transitGatewayRouteTableRoute = Prelude.Nothing,
+      vpc = Prelude.Nothing
+    }
+
+-- | The network ACL rule.
+pathComponent_aclRule :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisAclRule)
+pathComponent_aclRule = Lens.lens (\PathComponent' {aclRule} -> aclRule) (\s@PathComponent' {} a -> s {aclRule = a} :: PathComponent)
+
+-- | The additional details.
+pathComponent_additionalDetails :: Lens.Lens' PathComponent (Prelude.Maybe [AdditionalDetail])
+pathComponent_additionalDetails = Lens.lens (\PathComponent' {additionalDetails} -> additionalDetails) (\s@PathComponent' {} a -> s {additionalDetails = a} :: PathComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resource to which the path component is attached.
+pathComponent_attachedTo :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_attachedTo = Lens.lens (\PathComponent' {attachedTo} -> attachedTo) (\s@PathComponent' {} a -> s {attachedTo = a} :: PathComponent)
+
+-- | The component.
+pathComponent_component :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_component = Lens.lens (\PathComponent' {component} -> component) (\s@PathComponent' {} a -> s {component = a} :: PathComponent)
+
+-- | The destination VPC.
+pathComponent_destinationVpc :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_destinationVpc = Lens.lens (\PathComponent' {destinationVpc} -> destinationVpc) (\s@PathComponent' {} a -> s {destinationVpc = a} :: PathComponent)
+
+-- | The load balancer listener.
+pathComponent_elasticLoadBalancerListener :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_elasticLoadBalancerListener = Lens.lens (\PathComponent' {elasticLoadBalancerListener} -> elasticLoadBalancerListener) (\s@PathComponent' {} a -> s {elasticLoadBalancerListener = a} :: PathComponent)
+
+-- | The explanation codes.
+pathComponent_explanations :: Lens.Lens' PathComponent (Prelude.Maybe [Explanation])
+pathComponent_explanations = Lens.lens (\PathComponent' {explanations} -> explanations) (\s@PathComponent' {} a -> s {explanations = a} :: PathComponent) Prelude.. Lens.mapping Lens.coerced
+
+-- | The inbound header.
+pathComponent_inboundHeader :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisPacketHeader)
+pathComponent_inboundHeader = Lens.lens (\PathComponent' {inboundHeader} -> inboundHeader) (\s@PathComponent' {} a -> s {inboundHeader = a} :: PathComponent)
+
+-- | The outbound header.
+pathComponent_outboundHeader :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisPacketHeader)
+pathComponent_outboundHeader = Lens.lens (\PathComponent' {outboundHeader} -> outboundHeader) (\s@PathComponent' {} a -> s {outboundHeader = a} :: PathComponent)
+
+-- | The route table route.
+pathComponent_routeTableRoute :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisRouteTableRoute)
+pathComponent_routeTableRoute = Lens.lens (\PathComponent' {routeTableRoute} -> routeTableRoute) (\s@PathComponent' {} a -> s {routeTableRoute = a} :: PathComponent)
+
+-- | The security group rule.
+pathComponent_securityGroupRule :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisSecurityGroupRule)
+pathComponent_securityGroupRule = Lens.lens (\PathComponent' {securityGroupRule} -> securityGroupRule) (\s@PathComponent' {} a -> s {securityGroupRule = a} :: PathComponent)
+
+-- | The sequence number.
+pathComponent_sequenceNumber :: Lens.Lens' PathComponent (Prelude.Maybe Prelude.Int)
+pathComponent_sequenceNumber = Lens.lens (\PathComponent' {sequenceNumber} -> sequenceNumber) (\s@PathComponent' {} a -> s {sequenceNumber = a} :: PathComponent)
+
+-- | The source VPC.
+pathComponent_sourceVpc :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_sourceVpc = Lens.lens (\PathComponent' {sourceVpc} -> sourceVpc) (\s@PathComponent' {} a -> s {sourceVpc = a} :: PathComponent)
+
+-- | The subnet.
+pathComponent_subnet :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_subnet = Lens.lens (\PathComponent' {subnet} -> subnet) (\s@PathComponent' {} a -> s {subnet = a} :: PathComponent)
+
+-- | The transit gateway.
+pathComponent_transitGateway :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_transitGateway = Lens.lens (\PathComponent' {transitGateway} -> transitGateway) (\s@PathComponent' {} a -> s {transitGateway = a} :: PathComponent)
+
+-- | The route in a transit gateway route table.
+pathComponent_transitGatewayRouteTableRoute :: Lens.Lens' PathComponent (Prelude.Maybe TransitGatewayRouteTableRoute)
+pathComponent_transitGatewayRouteTableRoute = Lens.lens (\PathComponent' {transitGatewayRouteTableRoute} -> transitGatewayRouteTableRoute) (\s@PathComponent' {} a -> s {transitGatewayRouteTableRoute = a} :: PathComponent)
+
+-- | The component VPC.
+pathComponent_vpc :: Lens.Lens' PathComponent (Prelude.Maybe AnalysisComponent)
+pathComponent_vpc = Lens.lens (\PathComponent' {vpc} -> vpc) (\s@PathComponent' {} a -> s {vpc = a} :: PathComponent)
+
+instance Data.FromXML PathComponent where
+  parseXML x =
+    PathComponent'
+      Prelude.<$> (x Data..@? "aclRule")
+      Prelude.<*> ( x
+                      Data..@? "additionalDetailSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "attachedTo")
+      Prelude.<*> (x Data..@? "component")
+      Prelude.<*> (x Data..@? "destinationVpc")
+      Prelude.<*> (x Data..@? "elasticLoadBalancerListener")
+      Prelude.<*> ( x
+                      Data..@? "explanationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "inboundHeader")
+      Prelude.<*> (x Data..@? "outboundHeader")
+      Prelude.<*> (x Data..@? "routeTableRoute")
+      Prelude.<*> (x Data..@? "securityGroupRule")
+      Prelude.<*> (x Data..@? "sequenceNumber")
+      Prelude.<*> (x Data..@? "sourceVpc")
+      Prelude.<*> (x Data..@? "subnet")
+      Prelude.<*> (x Data..@? "transitGateway")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableRoute")
+      Prelude.<*> (x Data..@? "vpc")
+
+instance Prelude.Hashable PathComponent where
+  hashWithSalt _salt PathComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` aclRule
+      `Prelude.hashWithSalt` additionalDetails
+      `Prelude.hashWithSalt` attachedTo
+      `Prelude.hashWithSalt` component
+      `Prelude.hashWithSalt` destinationVpc
+      `Prelude.hashWithSalt` elasticLoadBalancerListener
+      `Prelude.hashWithSalt` explanations
+      `Prelude.hashWithSalt` inboundHeader
+      `Prelude.hashWithSalt` outboundHeader
+      `Prelude.hashWithSalt` routeTableRoute
+      `Prelude.hashWithSalt` securityGroupRule
+      `Prelude.hashWithSalt` sequenceNumber
+      `Prelude.hashWithSalt` sourceVpc
+      `Prelude.hashWithSalt` subnet
+      `Prelude.hashWithSalt` transitGateway
+      `Prelude.hashWithSalt` transitGatewayRouteTableRoute
+      `Prelude.hashWithSalt` vpc
+
+instance Prelude.NFData PathComponent where
+  rnf PathComponent' {..} =
+    Prelude.rnf aclRule
+      `Prelude.seq` Prelude.rnf additionalDetails
+      `Prelude.seq` Prelude.rnf attachedTo
+      `Prelude.seq` Prelude.rnf component
+      `Prelude.seq` Prelude.rnf destinationVpc
+      `Prelude.seq` Prelude.rnf elasticLoadBalancerListener
+      `Prelude.seq` Prelude.rnf explanations
+      `Prelude.seq` Prelude.rnf inboundHeader
+      `Prelude.seq` Prelude.rnf outboundHeader
+      `Prelude.seq` Prelude.rnf routeTableRoute
+      `Prelude.seq` Prelude.rnf securityGroupRule
+      `Prelude.seq` Prelude.rnf sequenceNumber
+      `Prelude.seq` Prelude.rnf sourceVpc
+      `Prelude.seq` Prelude.rnf subnet
+      `Prelude.seq` Prelude.rnf transitGateway
+      `Prelude.seq` Prelude.rnf
+        transitGatewayRouteTableRoute
+      `Prelude.seq` Prelude.rnf vpc
diff --git a/gen/Amazonka/EC2/Types/PathStatement.hs b/gen/Amazonka/EC2/Types/PathStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PathStatement.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PathStatement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PathStatement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PacketHeaderStatement
+import Amazonka.EC2.Types.ResourceStatement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path statement.
+--
+-- /See:/ 'newPathStatement' smart constructor.
+data PathStatement = PathStatement'
+  { -- | The packet header statement.
+    packetHeaderStatement :: Prelude.Maybe PacketHeaderStatement,
+    -- | The resource statement.
+    resourceStatement :: Prelude.Maybe ResourceStatement
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PathStatement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'packetHeaderStatement', 'pathStatement_packetHeaderStatement' - The packet header statement.
+--
+-- 'resourceStatement', 'pathStatement_resourceStatement' - The resource statement.
+newPathStatement ::
+  PathStatement
+newPathStatement =
+  PathStatement'
+    { packetHeaderStatement =
+        Prelude.Nothing,
+      resourceStatement = Prelude.Nothing
+    }
+
+-- | The packet header statement.
+pathStatement_packetHeaderStatement :: Lens.Lens' PathStatement (Prelude.Maybe PacketHeaderStatement)
+pathStatement_packetHeaderStatement = Lens.lens (\PathStatement' {packetHeaderStatement} -> packetHeaderStatement) (\s@PathStatement' {} a -> s {packetHeaderStatement = a} :: PathStatement)
+
+-- | The resource statement.
+pathStatement_resourceStatement :: Lens.Lens' PathStatement (Prelude.Maybe ResourceStatement)
+pathStatement_resourceStatement = Lens.lens (\PathStatement' {resourceStatement} -> resourceStatement) (\s@PathStatement' {} a -> s {resourceStatement = a} :: PathStatement)
+
+instance Data.FromXML PathStatement where
+  parseXML x =
+    PathStatement'
+      Prelude.<$> (x Data..@? "packetHeaderStatement")
+      Prelude.<*> (x Data..@? "resourceStatement")
+
+instance Prelude.Hashable PathStatement where
+  hashWithSalt _salt PathStatement' {..} =
+    _salt
+      `Prelude.hashWithSalt` packetHeaderStatement
+      `Prelude.hashWithSalt` resourceStatement
+
+instance Prelude.NFData PathStatement where
+  rnf PathStatement' {..} =
+    Prelude.rnf packetHeaderStatement
+      `Prelude.seq` Prelude.rnf resourceStatement
diff --git a/gen/Amazonka/EC2/Types/PathStatementRequest.hs b/gen/Amazonka/EC2/Types/PathStatementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PathStatementRequest.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PathStatementRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PathStatementRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PacketHeaderStatementRequest
+import Amazonka.EC2.Types.ResourceStatementRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a path statement.
+--
+-- /See:/ 'newPathStatementRequest' smart constructor.
+data PathStatementRequest = PathStatementRequest'
+  { -- | The packet header statement.
+    packetHeaderStatement :: Prelude.Maybe PacketHeaderStatementRequest,
+    -- | The resource statement.
+    resourceStatement :: Prelude.Maybe ResourceStatementRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PathStatementRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'packetHeaderStatement', 'pathStatementRequest_packetHeaderStatement' - The packet header statement.
+--
+-- 'resourceStatement', 'pathStatementRequest_resourceStatement' - The resource statement.
+newPathStatementRequest ::
+  PathStatementRequest
+newPathStatementRequest =
+  PathStatementRequest'
+    { packetHeaderStatement =
+        Prelude.Nothing,
+      resourceStatement = Prelude.Nothing
+    }
+
+-- | The packet header statement.
+pathStatementRequest_packetHeaderStatement :: Lens.Lens' PathStatementRequest (Prelude.Maybe PacketHeaderStatementRequest)
+pathStatementRequest_packetHeaderStatement = Lens.lens (\PathStatementRequest' {packetHeaderStatement} -> packetHeaderStatement) (\s@PathStatementRequest' {} a -> s {packetHeaderStatement = a} :: PathStatementRequest)
+
+-- | The resource statement.
+pathStatementRequest_resourceStatement :: Lens.Lens' PathStatementRequest (Prelude.Maybe ResourceStatementRequest)
+pathStatementRequest_resourceStatement = Lens.lens (\PathStatementRequest' {resourceStatement} -> resourceStatement) (\s@PathStatementRequest' {} a -> s {resourceStatement = a} :: PathStatementRequest)
+
+instance Prelude.Hashable PathStatementRequest where
+  hashWithSalt _salt PathStatementRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` packetHeaderStatement
+      `Prelude.hashWithSalt` resourceStatement
+
+instance Prelude.NFData PathStatementRequest where
+  rnf PathStatementRequest' {..} =
+    Prelude.rnf packetHeaderStatement
+      `Prelude.seq` Prelude.rnf resourceStatement
+
+instance Data.ToQuery PathStatementRequest where
+  toQuery PathStatementRequest' {..} =
+    Prelude.mconcat
+      [ "PacketHeaderStatement"
+          Data.=: packetHeaderStatement,
+        "ResourceStatement" Data.=: resourceStatement
+      ]
diff --git a/gen/Amazonka/EC2/Types/PayerResponsibility.hs b/gen/Amazonka/EC2/Types/PayerResponsibility.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PayerResponsibility.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PayerResponsibility
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PayerResponsibility
+  ( PayerResponsibility
+      ( ..,
+        PayerResponsibility_ServiceOwner
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PayerResponsibility = PayerResponsibility'
+  { fromPayerResponsibility ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PayerResponsibility_ServiceOwner :: PayerResponsibility
+pattern PayerResponsibility_ServiceOwner = PayerResponsibility' "ServiceOwner"
+
+{-# COMPLETE
+  PayerResponsibility_ServiceOwner,
+  PayerResponsibility'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PaymentOption.hs b/gen/Amazonka/EC2/Types/PaymentOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PaymentOption.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PaymentOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PaymentOption
+  ( PaymentOption
+      ( ..,
+        PaymentOption_AllUpfront,
+        PaymentOption_NoUpfront,
+        PaymentOption_PartialUpfront
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PaymentOption = PaymentOption'
+  { fromPaymentOption ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PaymentOption_AllUpfront :: PaymentOption
+pattern PaymentOption_AllUpfront = PaymentOption' "AllUpfront"
+
+pattern PaymentOption_NoUpfront :: PaymentOption
+pattern PaymentOption_NoUpfront = PaymentOption' "NoUpfront"
+
+pattern PaymentOption_PartialUpfront :: PaymentOption
+pattern PaymentOption_PartialUpfront = PaymentOption' "PartialUpfront"
+
+{-# COMPLETE
+  PaymentOption_AllUpfront,
+  PaymentOption_NoUpfront,
+  PaymentOption_PartialUpfront,
+  PaymentOption'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PciId.hs b/gen/Amazonka/EC2/Types/PciId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PciId.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PciId
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PciId where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the data that identifies an Amazon FPGA image (AFI) on the PCI
+-- bus.
+--
+-- /See:/ 'newPciId' smart constructor.
+data PciId = PciId'
+  { -- | The ID of the device.
+    deviceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subsystem.
+    subsystemId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vendor for the subsystem.
+    subsystemVendorId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the vendor.
+    vendorId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PciId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceId', 'pciId_deviceId' - The ID of the device.
+--
+-- 'subsystemId', 'pciId_subsystemId' - The ID of the subsystem.
+--
+-- 'subsystemVendorId', 'pciId_subsystemVendorId' - The ID of the vendor for the subsystem.
+--
+-- 'vendorId', 'pciId_vendorId' - The ID of the vendor.
+newPciId ::
+  PciId
+newPciId =
+  PciId'
+    { deviceId = Prelude.Nothing,
+      subsystemId = Prelude.Nothing,
+      subsystemVendorId = Prelude.Nothing,
+      vendorId = Prelude.Nothing
+    }
+
+-- | The ID of the device.
+pciId_deviceId :: Lens.Lens' PciId (Prelude.Maybe Prelude.Text)
+pciId_deviceId = Lens.lens (\PciId' {deviceId} -> deviceId) (\s@PciId' {} a -> s {deviceId = a} :: PciId)
+
+-- | The ID of the subsystem.
+pciId_subsystemId :: Lens.Lens' PciId (Prelude.Maybe Prelude.Text)
+pciId_subsystemId = Lens.lens (\PciId' {subsystemId} -> subsystemId) (\s@PciId' {} a -> s {subsystemId = a} :: PciId)
+
+-- | The ID of the vendor for the subsystem.
+pciId_subsystemVendorId :: Lens.Lens' PciId (Prelude.Maybe Prelude.Text)
+pciId_subsystemVendorId = Lens.lens (\PciId' {subsystemVendorId} -> subsystemVendorId) (\s@PciId' {} a -> s {subsystemVendorId = a} :: PciId)
+
+-- | The ID of the vendor.
+pciId_vendorId :: Lens.Lens' PciId (Prelude.Maybe Prelude.Text)
+pciId_vendorId = Lens.lens (\PciId' {vendorId} -> vendorId) (\s@PciId' {} a -> s {vendorId = a} :: PciId)
+
+instance Data.FromXML PciId where
+  parseXML x =
+    PciId'
+      Prelude.<$> (x Data..@? "DeviceId")
+      Prelude.<*> (x Data..@? "SubsystemId")
+      Prelude.<*> (x Data..@? "SubsystemVendorId")
+      Prelude.<*> (x Data..@? "VendorId")
+
+instance Prelude.Hashable PciId where
+  hashWithSalt _salt PciId' {..} =
+    _salt
+      `Prelude.hashWithSalt` deviceId
+      `Prelude.hashWithSalt` subsystemId
+      `Prelude.hashWithSalt` subsystemVendorId
+      `Prelude.hashWithSalt` vendorId
+
+instance Prelude.NFData PciId where
+  rnf PciId' {..} =
+    Prelude.rnf deviceId
+      `Prelude.seq` Prelude.rnf subsystemId
+      `Prelude.seq` Prelude.rnf subsystemVendorId
+      `Prelude.seq` Prelude.rnf vendorId
diff --git a/gen/Amazonka/EC2/Types/PeeringAttachmentStatus.hs b/gen/Amazonka/EC2/Types/PeeringAttachmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PeeringAttachmentStatus.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PeeringAttachmentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PeeringAttachmentStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of the transit gateway peering attachment.
+--
+-- /See:/ 'newPeeringAttachmentStatus' smart constructor.
+data PeeringAttachmentStatus = PeeringAttachmentStatus'
+  { -- | The status code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The status message, if applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PeeringAttachmentStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'peeringAttachmentStatus_code' - The status code.
+--
+-- 'message', 'peeringAttachmentStatus_message' - The status message, if applicable.
+newPeeringAttachmentStatus ::
+  PeeringAttachmentStatus
+newPeeringAttachmentStatus =
+  PeeringAttachmentStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The status code.
+peeringAttachmentStatus_code :: Lens.Lens' PeeringAttachmentStatus (Prelude.Maybe Prelude.Text)
+peeringAttachmentStatus_code = Lens.lens (\PeeringAttachmentStatus' {code} -> code) (\s@PeeringAttachmentStatus' {} a -> s {code = a} :: PeeringAttachmentStatus)
+
+-- | The status message, if applicable.
+peeringAttachmentStatus_message :: Lens.Lens' PeeringAttachmentStatus (Prelude.Maybe Prelude.Text)
+peeringAttachmentStatus_message = Lens.lens (\PeeringAttachmentStatus' {message} -> message) (\s@PeeringAttachmentStatus' {} a -> s {message = a} :: PeeringAttachmentStatus)
+
+instance Data.FromXML PeeringAttachmentStatus where
+  parseXML x =
+    PeeringAttachmentStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable PeeringAttachmentStatus where
+  hashWithSalt _salt PeeringAttachmentStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData PeeringAttachmentStatus where
+  rnf PeeringAttachmentStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/PeeringConnectionOptions.hs b/gen/Amazonka/EC2/Types/PeeringConnectionOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PeeringConnectionOptions.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PeeringConnectionOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PeeringConnectionOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Describes the VPC peering connection options.
+--
+-- /See:/ 'newPeeringConnectionOptions' smart constructor.
+data PeeringConnectionOptions = PeeringConnectionOptions'
+  { -- | If true, the public DNS hostnames of instances in the specified VPC
+    -- resolve to private IP addresses when queried from instances in the peer
+    -- VPC.
+    allowDnsResolutionFromRemoteVpc :: Prelude.Maybe Prelude.Bool,
+    -- | If true, enables outbound communication from an EC2-Classic instance
+    -- that\'s linked to a local VPC using ClassicLink to instances in a peer
+    -- VPC.
+    allowEgressFromLocalClassicLinkToRemoteVpc :: Prelude.Maybe Prelude.Bool,
+    -- | If true, enables outbound communication from instances in a local VPC to
+    -- an EC2-Classic instance that\'s linked to a peer VPC using ClassicLink.
+    allowEgressFromLocalVpcToRemoteClassicLink :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PeeringConnectionOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowDnsResolutionFromRemoteVpc', 'peeringConnectionOptions_allowDnsResolutionFromRemoteVpc' - If true, the public DNS hostnames of instances in the specified VPC
+-- resolve to private IP addresses when queried from instances in the peer
+-- VPC.
+--
+-- 'allowEgressFromLocalClassicLinkToRemoteVpc', 'peeringConnectionOptions_allowEgressFromLocalClassicLinkToRemoteVpc' - If true, enables outbound communication from an EC2-Classic instance
+-- that\'s linked to a local VPC using ClassicLink to instances in a peer
+-- VPC.
+--
+-- 'allowEgressFromLocalVpcToRemoteClassicLink', 'peeringConnectionOptions_allowEgressFromLocalVpcToRemoteClassicLink' - If true, enables outbound communication from instances in a local VPC to
+-- an EC2-Classic instance that\'s linked to a peer VPC using ClassicLink.
+newPeeringConnectionOptions ::
+  PeeringConnectionOptions
+newPeeringConnectionOptions =
+  PeeringConnectionOptions'
+    { allowDnsResolutionFromRemoteVpc =
+        Prelude.Nothing,
+      allowEgressFromLocalClassicLinkToRemoteVpc =
+        Prelude.Nothing,
+      allowEgressFromLocalVpcToRemoteClassicLink =
+        Prelude.Nothing
+    }
+
+-- | If true, the public DNS hostnames of instances in the specified VPC
+-- resolve to private IP addresses when queried from instances in the peer
+-- VPC.
+peeringConnectionOptions_allowDnsResolutionFromRemoteVpc :: Lens.Lens' PeeringConnectionOptions (Prelude.Maybe Prelude.Bool)
+peeringConnectionOptions_allowDnsResolutionFromRemoteVpc = Lens.lens (\PeeringConnectionOptions' {allowDnsResolutionFromRemoteVpc} -> allowDnsResolutionFromRemoteVpc) (\s@PeeringConnectionOptions' {} a -> s {allowDnsResolutionFromRemoteVpc = a} :: PeeringConnectionOptions)
+
+-- | If true, enables outbound communication from an EC2-Classic instance
+-- that\'s linked to a local VPC using ClassicLink to instances in a peer
+-- VPC.
+peeringConnectionOptions_allowEgressFromLocalClassicLinkToRemoteVpc :: Lens.Lens' PeeringConnectionOptions (Prelude.Maybe Prelude.Bool)
+peeringConnectionOptions_allowEgressFromLocalClassicLinkToRemoteVpc = Lens.lens (\PeeringConnectionOptions' {allowEgressFromLocalClassicLinkToRemoteVpc} -> allowEgressFromLocalClassicLinkToRemoteVpc) (\s@PeeringConnectionOptions' {} a -> s {allowEgressFromLocalClassicLinkToRemoteVpc = a} :: PeeringConnectionOptions)
+
+-- | If true, enables outbound communication from instances in a local VPC to
+-- an EC2-Classic instance that\'s linked to a peer VPC using ClassicLink.
+peeringConnectionOptions_allowEgressFromLocalVpcToRemoteClassicLink :: Lens.Lens' PeeringConnectionOptions (Prelude.Maybe Prelude.Bool)
+peeringConnectionOptions_allowEgressFromLocalVpcToRemoteClassicLink = Lens.lens (\PeeringConnectionOptions' {allowEgressFromLocalVpcToRemoteClassicLink} -> allowEgressFromLocalVpcToRemoteClassicLink) (\s@PeeringConnectionOptions' {} a -> s {allowEgressFromLocalVpcToRemoteClassicLink = a} :: PeeringConnectionOptions)
+
+instance Data.FromXML PeeringConnectionOptions where
+  parseXML x =
+    PeeringConnectionOptions'
+      Prelude.<$> (x Data..@? "allowDnsResolutionFromRemoteVpc")
+      Prelude.<*> ( x
+                      Data..@? "allowEgressFromLocalClassicLinkToRemoteVpc"
+                  )
+      Prelude.<*> ( x
+                      Data..@? "allowEgressFromLocalVpcToRemoteClassicLink"
+                  )
+
+instance Prelude.Hashable PeeringConnectionOptions where
+  hashWithSalt _salt PeeringConnectionOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowDnsResolutionFromRemoteVpc
+      `Prelude.hashWithSalt` allowEgressFromLocalClassicLinkToRemoteVpc
+      `Prelude.hashWithSalt` allowEgressFromLocalVpcToRemoteClassicLink
+
+instance Prelude.NFData PeeringConnectionOptions where
+  rnf PeeringConnectionOptions' {..} =
+    Prelude.rnf allowDnsResolutionFromRemoteVpc
+      `Prelude.seq` Prelude.rnf
+        allowEgressFromLocalClassicLinkToRemoteVpc
+      `Prelude.seq` Prelude.rnf
+        allowEgressFromLocalVpcToRemoteClassicLink
diff --git a/gen/Amazonka/EC2/Types/PeeringConnectionOptionsRequest.hs b/gen/Amazonka/EC2/Types/PeeringConnectionOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PeeringConnectionOptionsRequest.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PeeringConnectionOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PeeringConnectionOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- The VPC peering connection options.
+--
+-- /See:/ 'newPeeringConnectionOptionsRequest' smart constructor.
+data PeeringConnectionOptionsRequest = PeeringConnectionOptionsRequest'
+  { -- | If true, enables a local VPC to resolve public DNS hostnames to private
+    -- IP addresses when queried from instances in the peer VPC.
+    allowDnsResolutionFromRemoteVpc :: Prelude.Maybe Prelude.Bool,
+    -- | If true, enables outbound communication from an EC2-Classic instance
+    -- that\'s linked to a local VPC using ClassicLink to instances in a peer
+    -- VPC.
+    allowEgressFromLocalClassicLinkToRemoteVpc :: Prelude.Maybe Prelude.Bool,
+    -- | If true, enables outbound communication from instances in a local VPC to
+    -- an EC2-Classic instance that\'s linked to a peer VPC using ClassicLink.
+    allowEgressFromLocalVpcToRemoteClassicLink :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PeeringConnectionOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowDnsResolutionFromRemoteVpc', 'peeringConnectionOptionsRequest_allowDnsResolutionFromRemoteVpc' - If true, enables a local VPC to resolve public DNS hostnames to private
+-- IP addresses when queried from instances in the peer VPC.
+--
+-- 'allowEgressFromLocalClassicLinkToRemoteVpc', 'peeringConnectionOptionsRequest_allowEgressFromLocalClassicLinkToRemoteVpc' - If true, enables outbound communication from an EC2-Classic instance
+-- that\'s linked to a local VPC using ClassicLink to instances in a peer
+-- VPC.
+--
+-- 'allowEgressFromLocalVpcToRemoteClassicLink', 'peeringConnectionOptionsRequest_allowEgressFromLocalVpcToRemoteClassicLink' - If true, enables outbound communication from instances in a local VPC to
+-- an EC2-Classic instance that\'s linked to a peer VPC using ClassicLink.
+newPeeringConnectionOptionsRequest ::
+  PeeringConnectionOptionsRequest
+newPeeringConnectionOptionsRequest =
+  PeeringConnectionOptionsRequest'
+    { allowDnsResolutionFromRemoteVpc =
+        Prelude.Nothing,
+      allowEgressFromLocalClassicLinkToRemoteVpc =
+        Prelude.Nothing,
+      allowEgressFromLocalVpcToRemoteClassicLink =
+        Prelude.Nothing
+    }
+
+-- | If true, enables a local VPC to resolve public DNS hostnames to private
+-- IP addresses when queried from instances in the peer VPC.
+peeringConnectionOptionsRequest_allowDnsResolutionFromRemoteVpc :: Lens.Lens' PeeringConnectionOptionsRequest (Prelude.Maybe Prelude.Bool)
+peeringConnectionOptionsRequest_allowDnsResolutionFromRemoteVpc = Lens.lens (\PeeringConnectionOptionsRequest' {allowDnsResolutionFromRemoteVpc} -> allowDnsResolutionFromRemoteVpc) (\s@PeeringConnectionOptionsRequest' {} a -> s {allowDnsResolutionFromRemoteVpc = a} :: PeeringConnectionOptionsRequest)
+
+-- | If true, enables outbound communication from an EC2-Classic instance
+-- that\'s linked to a local VPC using ClassicLink to instances in a peer
+-- VPC.
+peeringConnectionOptionsRequest_allowEgressFromLocalClassicLinkToRemoteVpc :: Lens.Lens' PeeringConnectionOptionsRequest (Prelude.Maybe Prelude.Bool)
+peeringConnectionOptionsRequest_allowEgressFromLocalClassicLinkToRemoteVpc = Lens.lens (\PeeringConnectionOptionsRequest' {allowEgressFromLocalClassicLinkToRemoteVpc} -> allowEgressFromLocalClassicLinkToRemoteVpc) (\s@PeeringConnectionOptionsRequest' {} a -> s {allowEgressFromLocalClassicLinkToRemoteVpc = a} :: PeeringConnectionOptionsRequest)
+
+-- | If true, enables outbound communication from instances in a local VPC to
+-- an EC2-Classic instance that\'s linked to a peer VPC using ClassicLink.
+peeringConnectionOptionsRequest_allowEgressFromLocalVpcToRemoteClassicLink :: Lens.Lens' PeeringConnectionOptionsRequest (Prelude.Maybe Prelude.Bool)
+peeringConnectionOptionsRequest_allowEgressFromLocalVpcToRemoteClassicLink = Lens.lens (\PeeringConnectionOptionsRequest' {allowEgressFromLocalVpcToRemoteClassicLink} -> allowEgressFromLocalVpcToRemoteClassicLink) (\s@PeeringConnectionOptionsRequest' {} a -> s {allowEgressFromLocalVpcToRemoteClassicLink = a} :: PeeringConnectionOptionsRequest)
+
+instance
+  Prelude.Hashable
+    PeeringConnectionOptionsRequest
+  where
+  hashWithSalt
+    _salt
+    PeeringConnectionOptionsRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowDnsResolutionFromRemoteVpc
+        `Prelude.hashWithSalt` allowEgressFromLocalClassicLinkToRemoteVpc
+        `Prelude.hashWithSalt` allowEgressFromLocalVpcToRemoteClassicLink
+
+instance
+  Prelude.NFData
+    PeeringConnectionOptionsRequest
+  where
+  rnf PeeringConnectionOptionsRequest' {..} =
+    Prelude.rnf allowDnsResolutionFromRemoteVpc
+      `Prelude.seq` Prelude.rnf
+        allowEgressFromLocalClassicLinkToRemoteVpc
+      `Prelude.seq` Prelude.rnf
+        allowEgressFromLocalVpcToRemoteClassicLink
+
+instance Data.ToQuery PeeringConnectionOptionsRequest where
+  toQuery PeeringConnectionOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "AllowDnsResolutionFromRemoteVpc"
+          Data.=: allowDnsResolutionFromRemoteVpc,
+        "AllowEgressFromLocalClassicLinkToRemoteVpc"
+          Data.=: allowEgressFromLocalClassicLinkToRemoteVpc,
+        "AllowEgressFromLocalVpcToRemoteClassicLink"
+          Data.=: allowEgressFromLocalVpcToRemoteClassicLink
+      ]
diff --git a/gen/Amazonka/EC2/Types/PeeringTgwInfo.hs b/gen/Amazonka/EC2/Types/PeeringTgwInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PeeringTgwInfo.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PeeringTgwInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PeeringTgwInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the transit gateway in the peering attachment.
+--
+-- /See:/ 'newPeeringTgwInfo' smart constructor.
+data PeeringTgwInfo = PeeringTgwInfo'
+  { -- | The ID of the core network where the transit gateway peer is located.
+    coreNetworkId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the transit gateway.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The Region of the transit gateway.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PeeringTgwInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'coreNetworkId', 'peeringTgwInfo_coreNetworkId' - The ID of the core network where the transit gateway peer is located.
+--
+-- 'ownerId', 'peeringTgwInfo_ownerId' - The ID of the Amazon Web Services account that owns the transit gateway.
+--
+-- 'region', 'peeringTgwInfo_region' - The Region of the transit gateway.
+--
+-- 'transitGatewayId', 'peeringTgwInfo_transitGatewayId' - The ID of the transit gateway.
+newPeeringTgwInfo ::
+  PeeringTgwInfo
+newPeeringTgwInfo =
+  PeeringTgwInfo'
+    { coreNetworkId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      region = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing
+    }
+
+-- | The ID of the core network where the transit gateway peer is located.
+peeringTgwInfo_coreNetworkId :: Lens.Lens' PeeringTgwInfo (Prelude.Maybe Prelude.Text)
+peeringTgwInfo_coreNetworkId = Lens.lens (\PeeringTgwInfo' {coreNetworkId} -> coreNetworkId) (\s@PeeringTgwInfo' {} a -> s {coreNetworkId = a} :: PeeringTgwInfo)
+
+-- | The ID of the Amazon Web Services account that owns the transit gateway.
+peeringTgwInfo_ownerId :: Lens.Lens' PeeringTgwInfo (Prelude.Maybe Prelude.Text)
+peeringTgwInfo_ownerId = Lens.lens (\PeeringTgwInfo' {ownerId} -> ownerId) (\s@PeeringTgwInfo' {} a -> s {ownerId = a} :: PeeringTgwInfo)
+
+-- | The Region of the transit gateway.
+peeringTgwInfo_region :: Lens.Lens' PeeringTgwInfo (Prelude.Maybe Prelude.Text)
+peeringTgwInfo_region = Lens.lens (\PeeringTgwInfo' {region} -> region) (\s@PeeringTgwInfo' {} a -> s {region = a} :: PeeringTgwInfo)
+
+-- | The ID of the transit gateway.
+peeringTgwInfo_transitGatewayId :: Lens.Lens' PeeringTgwInfo (Prelude.Maybe Prelude.Text)
+peeringTgwInfo_transitGatewayId = Lens.lens (\PeeringTgwInfo' {transitGatewayId} -> transitGatewayId) (\s@PeeringTgwInfo' {} a -> s {transitGatewayId = a} :: PeeringTgwInfo)
+
+instance Data.FromXML PeeringTgwInfo where
+  parseXML x =
+    PeeringTgwInfo'
+      Prelude.<$> (x Data..@? "coreNetworkId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "region")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+
+instance Prelude.Hashable PeeringTgwInfo where
+  hashWithSalt _salt PeeringTgwInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` coreNetworkId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` transitGatewayId
+
+instance Prelude.NFData PeeringTgwInfo where
+  rnf PeeringTgwInfo' {..} =
+    Prelude.rnf coreNetworkId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf transitGatewayId
diff --git a/gen/Amazonka/EC2/Types/PeriodType.hs b/gen/Amazonka/EC2/Types/PeriodType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PeriodType.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PeriodType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PeriodType
+  ( PeriodType
+      ( ..,
+        PeriodType_Fifteen_minutes,
+        PeriodType_Five_minutes,
+        PeriodType_One_day,
+        PeriodType_One_hour,
+        PeriodType_One_week,
+        PeriodType_Three_hours
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PeriodType = PeriodType'
+  { fromPeriodType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PeriodType_Fifteen_minutes :: PeriodType
+pattern PeriodType_Fifteen_minutes = PeriodType' "fifteen-minutes"
+
+pattern PeriodType_Five_minutes :: PeriodType
+pattern PeriodType_Five_minutes = PeriodType' "five-minutes"
+
+pattern PeriodType_One_day :: PeriodType
+pattern PeriodType_One_day = PeriodType' "one-day"
+
+pattern PeriodType_One_hour :: PeriodType
+pattern PeriodType_One_hour = PeriodType' "one-hour"
+
+pattern PeriodType_One_week :: PeriodType
+pattern PeriodType_One_week = PeriodType' "one-week"
+
+pattern PeriodType_Three_hours :: PeriodType
+pattern PeriodType_Three_hours = PeriodType' "three-hours"
+
+{-# COMPLETE
+  PeriodType_Fifteen_minutes,
+  PeriodType_Five_minutes,
+  PeriodType_One_day,
+  PeriodType_One_hour,
+  PeriodType_One_week,
+  PeriodType_Three_hours,
+  PeriodType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PermissionGroup.hs b/gen/Amazonka/EC2/Types/PermissionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PermissionGroup.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PermissionGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PermissionGroup
+  ( PermissionGroup
+      ( ..,
+        PermissionGroup_All
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PermissionGroup = PermissionGroup'
+  { fromPermissionGroup ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PermissionGroup_All :: PermissionGroup
+pattern PermissionGroup_All = PermissionGroup' "all"
+
+{-# COMPLETE
+  PermissionGroup_All,
+  PermissionGroup'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Phase1DHGroupNumbersListValue.hs b/gen/Amazonka/EC2/Types/Phase1DHGroupNumbersListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase1DHGroupNumbersListValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase1DHGroupNumbersListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase1DHGroupNumbersListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Diffie-Hellmann group number for phase 1 IKE negotiations.
+--
+-- /See:/ 'newPhase1DHGroupNumbersListValue' smart constructor.
+data Phase1DHGroupNumbersListValue = Phase1DHGroupNumbersListValue'
+  { -- | The Diffie-Hellmann group number.
+    value :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase1DHGroupNumbersListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase1DHGroupNumbersListValue_value' - The Diffie-Hellmann group number.
+newPhase1DHGroupNumbersListValue ::
+  Phase1DHGroupNumbersListValue
+newPhase1DHGroupNumbersListValue =
+  Phase1DHGroupNumbersListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The Diffie-Hellmann group number.
+phase1DHGroupNumbersListValue_value :: Lens.Lens' Phase1DHGroupNumbersListValue (Prelude.Maybe Prelude.Int)
+phase1DHGroupNumbersListValue_value = Lens.lens (\Phase1DHGroupNumbersListValue' {value} -> value) (\s@Phase1DHGroupNumbersListValue' {} a -> s {value = a} :: Phase1DHGroupNumbersListValue)
+
+instance Data.FromXML Phase1DHGroupNumbersListValue where
+  parseXML x =
+    Phase1DHGroupNumbersListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance
+  Prelude.Hashable
+    Phase1DHGroupNumbersListValue
+  where
+  hashWithSalt _salt Phase1DHGroupNumbersListValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Phase1DHGroupNumbersListValue where
+  rnf Phase1DHGroupNumbersListValue' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/Phase1DHGroupNumbersRequestListValue.hs b/gen/Amazonka/EC2/Types/Phase1DHGroupNumbersRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase1DHGroupNumbersRequestListValue.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a Diffie-Hellman group number for the VPN tunnel for phase 1
+-- IKE negotiations.
+--
+-- /See:/ 'newPhase1DHGroupNumbersRequestListValue' smart constructor.
+data Phase1DHGroupNumbersRequestListValue = Phase1DHGroupNumbersRequestListValue'
+  { -- | The Diffie-Hellmann group number.
+    value :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase1DHGroupNumbersRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase1DHGroupNumbersRequestListValue_value' - The Diffie-Hellmann group number.
+newPhase1DHGroupNumbersRequestListValue ::
+  Phase1DHGroupNumbersRequestListValue
+newPhase1DHGroupNumbersRequestListValue =
+  Phase1DHGroupNumbersRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The Diffie-Hellmann group number.
+phase1DHGroupNumbersRequestListValue_value :: Lens.Lens' Phase1DHGroupNumbersRequestListValue (Prelude.Maybe Prelude.Int)
+phase1DHGroupNumbersRequestListValue_value = Lens.lens (\Phase1DHGroupNumbersRequestListValue' {value} -> value) (\s@Phase1DHGroupNumbersRequestListValue' {} a -> s {value = a} :: Phase1DHGroupNumbersRequestListValue)
+
+instance
+  Prelude.Hashable
+    Phase1DHGroupNumbersRequestListValue
+  where
+  hashWithSalt
+    _salt
+    Phase1DHGroupNumbersRequestListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase1DHGroupNumbersRequestListValue
+  where
+  rnf Phase1DHGroupNumbersRequestListValue' {..} =
+    Prelude.rnf value
+
+instance
+  Data.ToQuery
+    Phase1DHGroupNumbersRequestListValue
+  where
+  toQuery Phase1DHGroupNumbersRequestListValue' {..} =
+    Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/Phase1EncryptionAlgorithmsListValue.hs b/gen/Amazonka/EC2/Types/Phase1EncryptionAlgorithmsListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase1EncryptionAlgorithmsListValue.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase1EncryptionAlgorithmsListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase1EncryptionAlgorithmsListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The encryption algorithm for phase 1 IKE negotiations.
+--
+-- /See:/ 'newPhase1EncryptionAlgorithmsListValue' smart constructor.
+data Phase1EncryptionAlgorithmsListValue = Phase1EncryptionAlgorithmsListValue'
+  { -- | The value for the encryption algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase1EncryptionAlgorithmsListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase1EncryptionAlgorithmsListValue_value' - The value for the encryption algorithm.
+newPhase1EncryptionAlgorithmsListValue ::
+  Phase1EncryptionAlgorithmsListValue
+newPhase1EncryptionAlgorithmsListValue =
+  Phase1EncryptionAlgorithmsListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The value for the encryption algorithm.
+phase1EncryptionAlgorithmsListValue_value :: Lens.Lens' Phase1EncryptionAlgorithmsListValue (Prelude.Maybe Prelude.Text)
+phase1EncryptionAlgorithmsListValue_value = Lens.lens (\Phase1EncryptionAlgorithmsListValue' {value} -> value) (\s@Phase1EncryptionAlgorithmsListValue' {} a -> s {value = a} :: Phase1EncryptionAlgorithmsListValue)
+
+instance
+  Data.FromXML
+    Phase1EncryptionAlgorithmsListValue
+  where
+  parseXML x =
+    Phase1EncryptionAlgorithmsListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance
+  Prelude.Hashable
+    Phase1EncryptionAlgorithmsListValue
+  where
+  hashWithSalt
+    _salt
+    Phase1EncryptionAlgorithmsListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase1EncryptionAlgorithmsListValue
+  where
+  rnf Phase1EncryptionAlgorithmsListValue' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/Phase1EncryptionAlgorithmsRequestListValue.hs b/gen/Amazonka/EC2/Types/Phase1EncryptionAlgorithmsRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase1EncryptionAlgorithmsRequestListValue.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the encryption algorithm for the VPN tunnel for phase 1 IKE
+-- negotiations.
+--
+-- /See:/ 'newPhase1EncryptionAlgorithmsRequestListValue' smart constructor.
+data Phase1EncryptionAlgorithmsRequestListValue = Phase1EncryptionAlgorithmsRequestListValue'
+  { -- | The value for the encryption algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase1EncryptionAlgorithmsRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase1EncryptionAlgorithmsRequestListValue_value' - The value for the encryption algorithm.
+newPhase1EncryptionAlgorithmsRequestListValue ::
+  Phase1EncryptionAlgorithmsRequestListValue
+newPhase1EncryptionAlgorithmsRequestListValue =
+  Phase1EncryptionAlgorithmsRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The value for the encryption algorithm.
+phase1EncryptionAlgorithmsRequestListValue_value :: Lens.Lens' Phase1EncryptionAlgorithmsRequestListValue (Prelude.Maybe Prelude.Text)
+phase1EncryptionAlgorithmsRequestListValue_value = Lens.lens (\Phase1EncryptionAlgorithmsRequestListValue' {value} -> value) (\s@Phase1EncryptionAlgorithmsRequestListValue' {} a -> s {value = a} :: Phase1EncryptionAlgorithmsRequestListValue)
+
+instance
+  Prelude.Hashable
+    Phase1EncryptionAlgorithmsRequestListValue
+  where
+  hashWithSalt
+    _salt
+    Phase1EncryptionAlgorithmsRequestListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase1EncryptionAlgorithmsRequestListValue
+  where
+  rnf Phase1EncryptionAlgorithmsRequestListValue' {..} =
+    Prelude.rnf value
+
+instance
+  Data.ToQuery
+    Phase1EncryptionAlgorithmsRequestListValue
+  where
+  toQuery
+    Phase1EncryptionAlgorithmsRequestListValue' {..} =
+      Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/Phase1IntegrityAlgorithmsListValue.hs b/gen/Amazonka/EC2/Types/Phase1IntegrityAlgorithmsListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase1IntegrityAlgorithmsListValue.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase1IntegrityAlgorithmsListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase1IntegrityAlgorithmsListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The integrity algorithm for phase 1 IKE negotiations.
+--
+-- /See:/ 'newPhase1IntegrityAlgorithmsListValue' smart constructor.
+data Phase1IntegrityAlgorithmsListValue = Phase1IntegrityAlgorithmsListValue'
+  { -- | The value for the integrity algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase1IntegrityAlgorithmsListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase1IntegrityAlgorithmsListValue_value' - The value for the integrity algorithm.
+newPhase1IntegrityAlgorithmsListValue ::
+  Phase1IntegrityAlgorithmsListValue
+newPhase1IntegrityAlgorithmsListValue =
+  Phase1IntegrityAlgorithmsListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The value for the integrity algorithm.
+phase1IntegrityAlgorithmsListValue_value :: Lens.Lens' Phase1IntegrityAlgorithmsListValue (Prelude.Maybe Prelude.Text)
+phase1IntegrityAlgorithmsListValue_value = Lens.lens (\Phase1IntegrityAlgorithmsListValue' {value} -> value) (\s@Phase1IntegrityAlgorithmsListValue' {} a -> s {value = a} :: Phase1IntegrityAlgorithmsListValue)
+
+instance
+  Data.FromXML
+    Phase1IntegrityAlgorithmsListValue
+  where
+  parseXML x =
+    Phase1IntegrityAlgorithmsListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance
+  Prelude.Hashable
+    Phase1IntegrityAlgorithmsListValue
+  where
+  hashWithSalt
+    _salt
+    Phase1IntegrityAlgorithmsListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase1IntegrityAlgorithmsListValue
+  where
+  rnf Phase1IntegrityAlgorithmsListValue' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/Phase1IntegrityAlgorithmsRequestListValue.hs b/gen/Amazonka/EC2/Types/Phase1IntegrityAlgorithmsRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase1IntegrityAlgorithmsRequestListValue.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the integrity algorithm for the VPN tunnel for phase 1 IKE
+-- negotiations.
+--
+-- /See:/ 'newPhase1IntegrityAlgorithmsRequestListValue' smart constructor.
+data Phase1IntegrityAlgorithmsRequestListValue = Phase1IntegrityAlgorithmsRequestListValue'
+  { -- | The value for the integrity algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase1IntegrityAlgorithmsRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase1IntegrityAlgorithmsRequestListValue_value' - The value for the integrity algorithm.
+newPhase1IntegrityAlgorithmsRequestListValue ::
+  Phase1IntegrityAlgorithmsRequestListValue
+newPhase1IntegrityAlgorithmsRequestListValue =
+  Phase1IntegrityAlgorithmsRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The value for the integrity algorithm.
+phase1IntegrityAlgorithmsRequestListValue_value :: Lens.Lens' Phase1IntegrityAlgorithmsRequestListValue (Prelude.Maybe Prelude.Text)
+phase1IntegrityAlgorithmsRequestListValue_value = Lens.lens (\Phase1IntegrityAlgorithmsRequestListValue' {value} -> value) (\s@Phase1IntegrityAlgorithmsRequestListValue' {} a -> s {value = a} :: Phase1IntegrityAlgorithmsRequestListValue)
+
+instance
+  Prelude.Hashable
+    Phase1IntegrityAlgorithmsRequestListValue
+  where
+  hashWithSalt
+    _salt
+    Phase1IntegrityAlgorithmsRequestListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase1IntegrityAlgorithmsRequestListValue
+  where
+  rnf Phase1IntegrityAlgorithmsRequestListValue' {..} =
+    Prelude.rnf value
+
+instance
+  Data.ToQuery
+    Phase1IntegrityAlgorithmsRequestListValue
+  where
+  toQuery
+    Phase1IntegrityAlgorithmsRequestListValue' {..} =
+      Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/Phase2DHGroupNumbersListValue.hs b/gen/Amazonka/EC2/Types/Phase2DHGroupNumbersListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase2DHGroupNumbersListValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase2DHGroupNumbersListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase2DHGroupNumbersListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Diffie-Hellmann group number for phase 2 IKE negotiations.
+--
+-- /See:/ 'newPhase2DHGroupNumbersListValue' smart constructor.
+data Phase2DHGroupNumbersListValue = Phase2DHGroupNumbersListValue'
+  { -- | The Diffie-Hellmann group number.
+    value :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase2DHGroupNumbersListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase2DHGroupNumbersListValue_value' - The Diffie-Hellmann group number.
+newPhase2DHGroupNumbersListValue ::
+  Phase2DHGroupNumbersListValue
+newPhase2DHGroupNumbersListValue =
+  Phase2DHGroupNumbersListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The Diffie-Hellmann group number.
+phase2DHGroupNumbersListValue_value :: Lens.Lens' Phase2DHGroupNumbersListValue (Prelude.Maybe Prelude.Int)
+phase2DHGroupNumbersListValue_value = Lens.lens (\Phase2DHGroupNumbersListValue' {value} -> value) (\s@Phase2DHGroupNumbersListValue' {} a -> s {value = a} :: Phase2DHGroupNumbersListValue)
+
+instance Data.FromXML Phase2DHGroupNumbersListValue where
+  parseXML x =
+    Phase2DHGroupNumbersListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance
+  Prelude.Hashable
+    Phase2DHGroupNumbersListValue
+  where
+  hashWithSalt _salt Phase2DHGroupNumbersListValue' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Phase2DHGroupNumbersListValue where
+  rnf Phase2DHGroupNumbersListValue' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/Phase2DHGroupNumbersRequestListValue.hs b/gen/Amazonka/EC2/Types/Phase2DHGroupNumbersRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase2DHGroupNumbersRequestListValue.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies a Diffie-Hellman group number for the VPN tunnel for phase 2
+-- IKE negotiations.
+--
+-- /See:/ 'newPhase2DHGroupNumbersRequestListValue' smart constructor.
+data Phase2DHGroupNumbersRequestListValue = Phase2DHGroupNumbersRequestListValue'
+  { -- | The Diffie-Hellmann group number.
+    value :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase2DHGroupNumbersRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase2DHGroupNumbersRequestListValue_value' - The Diffie-Hellmann group number.
+newPhase2DHGroupNumbersRequestListValue ::
+  Phase2DHGroupNumbersRequestListValue
+newPhase2DHGroupNumbersRequestListValue =
+  Phase2DHGroupNumbersRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The Diffie-Hellmann group number.
+phase2DHGroupNumbersRequestListValue_value :: Lens.Lens' Phase2DHGroupNumbersRequestListValue (Prelude.Maybe Prelude.Int)
+phase2DHGroupNumbersRequestListValue_value = Lens.lens (\Phase2DHGroupNumbersRequestListValue' {value} -> value) (\s@Phase2DHGroupNumbersRequestListValue' {} a -> s {value = a} :: Phase2DHGroupNumbersRequestListValue)
+
+instance
+  Prelude.Hashable
+    Phase2DHGroupNumbersRequestListValue
+  where
+  hashWithSalt
+    _salt
+    Phase2DHGroupNumbersRequestListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase2DHGroupNumbersRequestListValue
+  where
+  rnf Phase2DHGroupNumbersRequestListValue' {..} =
+    Prelude.rnf value
+
+instance
+  Data.ToQuery
+    Phase2DHGroupNumbersRequestListValue
+  where
+  toQuery Phase2DHGroupNumbersRequestListValue' {..} =
+    Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/Phase2EncryptionAlgorithmsListValue.hs b/gen/Amazonka/EC2/Types/Phase2EncryptionAlgorithmsListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase2EncryptionAlgorithmsListValue.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase2EncryptionAlgorithmsListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase2EncryptionAlgorithmsListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The encryption algorithm for phase 2 IKE negotiations.
+--
+-- /See:/ 'newPhase2EncryptionAlgorithmsListValue' smart constructor.
+data Phase2EncryptionAlgorithmsListValue = Phase2EncryptionAlgorithmsListValue'
+  { -- | The encryption algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase2EncryptionAlgorithmsListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase2EncryptionAlgorithmsListValue_value' - The encryption algorithm.
+newPhase2EncryptionAlgorithmsListValue ::
+  Phase2EncryptionAlgorithmsListValue
+newPhase2EncryptionAlgorithmsListValue =
+  Phase2EncryptionAlgorithmsListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The encryption algorithm.
+phase2EncryptionAlgorithmsListValue_value :: Lens.Lens' Phase2EncryptionAlgorithmsListValue (Prelude.Maybe Prelude.Text)
+phase2EncryptionAlgorithmsListValue_value = Lens.lens (\Phase2EncryptionAlgorithmsListValue' {value} -> value) (\s@Phase2EncryptionAlgorithmsListValue' {} a -> s {value = a} :: Phase2EncryptionAlgorithmsListValue)
+
+instance
+  Data.FromXML
+    Phase2EncryptionAlgorithmsListValue
+  where
+  parseXML x =
+    Phase2EncryptionAlgorithmsListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance
+  Prelude.Hashable
+    Phase2EncryptionAlgorithmsListValue
+  where
+  hashWithSalt
+    _salt
+    Phase2EncryptionAlgorithmsListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase2EncryptionAlgorithmsListValue
+  where
+  rnf Phase2EncryptionAlgorithmsListValue' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/Phase2EncryptionAlgorithmsRequestListValue.hs b/gen/Amazonka/EC2/Types/Phase2EncryptionAlgorithmsRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase2EncryptionAlgorithmsRequestListValue.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the encryption algorithm for the VPN tunnel for phase 2 IKE
+-- negotiations.
+--
+-- /See:/ 'newPhase2EncryptionAlgorithmsRequestListValue' smart constructor.
+data Phase2EncryptionAlgorithmsRequestListValue = Phase2EncryptionAlgorithmsRequestListValue'
+  { -- | The encryption algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase2EncryptionAlgorithmsRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase2EncryptionAlgorithmsRequestListValue_value' - The encryption algorithm.
+newPhase2EncryptionAlgorithmsRequestListValue ::
+  Phase2EncryptionAlgorithmsRequestListValue
+newPhase2EncryptionAlgorithmsRequestListValue =
+  Phase2EncryptionAlgorithmsRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The encryption algorithm.
+phase2EncryptionAlgorithmsRequestListValue_value :: Lens.Lens' Phase2EncryptionAlgorithmsRequestListValue (Prelude.Maybe Prelude.Text)
+phase2EncryptionAlgorithmsRequestListValue_value = Lens.lens (\Phase2EncryptionAlgorithmsRequestListValue' {value} -> value) (\s@Phase2EncryptionAlgorithmsRequestListValue' {} a -> s {value = a} :: Phase2EncryptionAlgorithmsRequestListValue)
+
+instance
+  Prelude.Hashable
+    Phase2EncryptionAlgorithmsRequestListValue
+  where
+  hashWithSalt
+    _salt
+    Phase2EncryptionAlgorithmsRequestListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase2EncryptionAlgorithmsRequestListValue
+  where
+  rnf Phase2EncryptionAlgorithmsRequestListValue' {..} =
+    Prelude.rnf value
+
+instance
+  Data.ToQuery
+    Phase2EncryptionAlgorithmsRequestListValue
+  where
+  toQuery
+    Phase2EncryptionAlgorithmsRequestListValue' {..} =
+      Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/Phase2IntegrityAlgorithmsListValue.hs b/gen/Amazonka/EC2/Types/Phase2IntegrityAlgorithmsListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase2IntegrityAlgorithmsListValue.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase2IntegrityAlgorithmsListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase2IntegrityAlgorithmsListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The integrity algorithm for phase 2 IKE negotiations.
+--
+-- /See:/ 'newPhase2IntegrityAlgorithmsListValue' smart constructor.
+data Phase2IntegrityAlgorithmsListValue = Phase2IntegrityAlgorithmsListValue'
+  { -- | The integrity algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase2IntegrityAlgorithmsListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase2IntegrityAlgorithmsListValue_value' - The integrity algorithm.
+newPhase2IntegrityAlgorithmsListValue ::
+  Phase2IntegrityAlgorithmsListValue
+newPhase2IntegrityAlgorithmsListValue =
+  Phase2IntegrityAlgorithmsListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The integrity algorithm.
+phase2IntegrityAlgorithmsListValue_value :: Lens.Lens' Phase2IntegrityAlgorithmsListValue (Prelude.Maybe Prelude.Text)
+phase2IntegrityAlgorithmsListValue_value = Lens.lens (\Phase2IntegrityAlgorithmsListValue' {value} -> value) (\s@Phase2IntegrityAlgorithmsListValue' {} a -> s {value = a} :: Phase2IntegrityAlgorithmsListValue)
+
+instance
+  Data.FromXML
+    Phase2IntegrityAlgorithmsListValue
+  where
+  parseXML x =
+    Phase2IntegrityAlgorithmsListValue'
+      Prelude.<$> (x Data..@? "value")
+
+instance
+  Prelude.Hashable
+    Phase2IntegrityAlgorithmsListValue
+  where
+  hashWithSalt
+    _salt
+    Phase2IntegrityAlgorithmsListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase2IntegrityAlgorithmsListValue
+  where
+  rnf Phase2IntegrityAlgorithmsListValue' {..} =
+    Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/Phase2IntegrityAlgorithmsRequestListValue.hs b/gen/Amazonka/EC2/Types/Phase2IntegrityAlgorithmsRequestListValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Phase2IntegrityAlgorithmsRequestListValue.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Specifies the integrity algorithm for the VPN tunnel for phase 2 IKE
+-- negotiations.
+--
+-- /See:/ 'newPhase2IntegrityAlgorithmsRequestListValue' smart constructor.
+data Phase2IntegrityAlgorithmsRequestListValue = Phase2IntegrityAlgorithmsRequestListValue'
+  { -- | The integrity algorithm.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Phase2IntegrityAlgorithmsRequestListValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'phase2IntegrityAlgorithmsRequestListValue_value' - The integrity algorithm.
+newPhase2IntegrityAlgorithmsRequestListValue ::
+  Phase2IntegrityAlgorithmsRequestListValue
+newPhase2IntegrityAlgorithmsRequestListValue =
+  Phase2IntegrityAlgorithmsRequestListValue'
+    { value =
+        Prelude.Nothing
+    }
+
+-- | The integrity algorithm.
+phase2IntegrityAlgorithmsRequestListValue_value :: Lens.Lens' Phase2IntegrityAlgorithmsRequestListValue (Prelude.Maybe Prelude.Text)
+phase2IntegrityAlgorithmsRequestListValue_value = Lens.lens (\Phase2IntegrityAlgorithmsRequestListValue' {value} -> value) (\s@Phase2IntegrityAlgorithmsRequestListValue' {} a -> s {value = a} :: Phase2IntegrityAlgorithmsRequestListValue)
+
+instance
+  Prelude.Hashable
+    Phase2IntegrityAlgorithmsRequestListValue
+  where
+  hashWithSalt
+    _salt
+    Phase2IntegrityAlgorithmsRequestListValue' {..} =
+      _salt `Prelude.hashWithSalt` value
+
+instance
+  Prelude.NFData
+    Phase2IntegrityAlgorithmsRequestListValue
+  where
+  rnf Phase2IntegrityAlgorithmsRequestListValue' {..} =
+    Prelude.rnf value
+
+instance
+  Data.ToQuery
+    Phase2IntegrityAlgorithmsRequestListValue
+  where
+  toQuery
+    Phase2IntegrityAlgorithmsRequestListValue' {..} =
+      Prelude.mconcat ["Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/Placement.hs b/gen/Amazonka/EC2/Types/Placement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Placement.hs
@@ -0,0 +1,288 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Placement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Placement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tenancy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the placement of an instance.
+--
+-- /See:/ 'newPlacement' smart constructor.
+data Placement = Placement'
+  { -- | The affinity setting for the instance on the Dedicated Host.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>
+    -- or
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>.
+    affinity :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone of the instance.
+    --
+    -- If not specified, an Availability Zone will be automatically chosen for
+    -- you based on the load balancing criteria for the Region.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the placement group that the instance is in. If you specify
+    -- @GroupId@, you can\'t specify @GroupName@.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group that the instance is in. If you specify
+    -- @GroupName@, you can\'t specify @GroupId@.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Dedicated Host on which the instance resides.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>
+    -- or
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>.
+    hostId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the host resource group in which to launch the instances.
+    --
+    -- If you specify this parameter, either omit the __Tenancy__ parameter or
+    -- set it to @host@.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+    hostResourceGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The number of the partition that the instance is in. Valid only if the
+    -- placement group strategy is set to @partition@.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+    partitionNumber :: Prelude.Maybe Prelude.Int,
+    -- | Reserved for future use.
+    spreadDomain :: Prelude.Maybe Prelude.Text,
+    -- | The tenancy of the instance (if the instance is running in a VPC). An
+    -- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+    --
+    -- This parameter is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+    -- The @host@ tenancy is not supported for
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>
+    -- or for T3 instances that are configured for the @unlimited@ CPU credit
+    -- option.
+    tenancy :: Prelude.Maybe Tenancy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Placement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'affinity', 'placement_affinity' - The affinity setting for the instance on the Dedicated Host.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>.
+--
+-- 'availabilityZone', 'placement_availabilityZone' - The Availability Zone of the instance.
+--
+-- If not specified, an Availability Zone will be automatically chosen for
+-- you based on the load balancing criteria for the Region.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+--
+-- 'groupId', 'placement_groupId' - The ID of the placement group that the instance is in. If you specify
+-- @GroupId@, you can\'t specify @GroupName@.
+--
+-- 'groupName', 'placement_groupName' - The name of the placement group that the instance is in. If you specify
+-- @GroupName@, you can\'t specify @GroupId@.
+--
+-- 'hostId', 'placement_hostId' - The ID of the Dedicated Host on which the instance resides.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>.
+--
+-- 'hostResourceGroupArn', 'placement_hostResourceGroupArn' - The ARN of the host resource group in which to launch the instances.
+--
+-- If you specify this parameter, either omit the __Tenancy__ parameter or
+-- set it to @host@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+--
+-- 'partitionNumber', 'placement_partitionNumber' - The number of the partition that the instance is in. Valid only if the
+-- placement group strategy is set to @partition@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+--
+-- 'spreadDomain', 'placement_spreadDomain' - Reserved for future use.
+--
+-- 'tenancy', 'placement_tenancy' - The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+-- The @host@ tenancy is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>
+-- or for T3 instances that are configured for the @unlimited@ CPU credit
+-- option.
+newPlacement ::
+  Placement
+newPlacement =
+  Placement'
+    { affinity = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      hostId = Prelude.Nothing,
+      hostResourceGroupArn = Prelude.Nothing,
+      partitionNumber = Prelude.Nothing,
+      spreadDomain = Prelude.Nothing,
+      tenancy = Prelude.Nothing
+    }
+
+-- | The affinity setting for the instance on the Dedicated Host.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>.
+placement_affinity :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_affinity = Lens.lens (\Placement' {affinity} -> affinity) (\s@Placement' {} a -> s {affinity = a} :: Placement)
+
+-- | The Availability Zone of the instance.
+--
+-- If not specified, an Availability Zone will be automatically chosen for
+-- you based on the load balancing criteria for the Region.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+placement_availabilityZone :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_availabilityZone = Lens.lens (\Placement' {availabilityZone} -> availabilityZone) (\s@Placement' {} a -> s {availabilityZone = a} :: Placement)
+
+-- | The ID of the placement group that the instance is in. If you specify
+-- @GroupId@, you can\'t specify @GroupName@.
+placement_groupId :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_groupId = Lens.lens (\Placement' {groupId} -> groupId) (\s@Placement' {} a -> s {groupId = a} :: Placement)
+
+-- | The name of the placement group that the instance is in. If you specify
+-- @GroupName@, you can\'t specify @GroupId@.
+placement_groupName :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_groupName = Lens.lens (\Placement' {groupName} -> groupName) (\s@Placement' {} a -> s {groupName = a} :: Placement)
+
+-- | The ID of the Dedicated Host on which the instance resides.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>.
+placement_hostId :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_hostId = Lens.lens (\Placement' {hostId} -> hostId) (\s@Placement' {} a -> s {hostId = a} :: Placement)
+
+-- | The ARN of the host resource group in which to launch the instances.
+--
+-- If you specify this parameter, either omit the __Tenancy__ parameter or
+-- set it to @host@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+placement_hostResourceGroupArn :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_hostResourceGroupArn = Lens.lens (\Placement' {hostResourceGroupArn} -> hostResourceGroupArn) (\s@Placement' {} a -> s {hostResourceGroupArn = a} :: Placement)
+
+-- | The number of the partition that the instance is in. Valid only if the
+-- placement group strategy is set to @partition@.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+placement_partitionNumber :: Lens.Lens' Placement (Prelude.Maybe Prelude.Int)
+placement_partitionNumber = Lens.lens (\Placement' {partitionNumber} -> partitionNumber) (\s@Placement' {} a -> s {partitionNumber = a} :: Placement)
+
+-- | Reserved for future use.
+placement_spreadDomain :: Lens.Lens' Placement (Prelude.Maybe Prelude.Text)
+placement_spreadDomain = Lens.lens (\Placement' {spreadDomain} -> spreadDomain) (\s@Placement' {} a -> s {spreadDomain = a} :: Placement)
+
+-- | The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+--
+-- This parameter is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet CreateFleet>.
+-- The @host@ tenancy is not supported for
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html ImportInstance>
+-- or for T3 instances that are configured for the @unlimited@ CPU credit
+-- option.
+placement_tenancy :: Lens.Lens' Placement (Prelude.Maybe Tenancy)
+placement_tenancy = Lens.lens (\Placement' {tenancy} -> tenancy) (\s@Placement' {} a -> s {tenancy = a} :: Placement)
+
+instance Data.FromXML Placement where
+  parseXML x =
+    Placement'
+      Prelude.<$> (x Data..@? "affinity")
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+      Prelude.<*> (x Data..@? "hostId")
+      Prelude.<*> (x Data..@? "hostResourceGroupArn")
+      Prelude.<*> (x Data..@? "partitionNumber")
+      Prelude.<*> (x Data..@? "spreadDomain")
+      Prelude.<*> (x Data..@? "tenancy")
+
+instance Prelude.Hashable Placement where
+  hashWithSalt _salt Placement' {..} =
+    _salt
+      `Prelude.hashWithSalt` affinity
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` hostId
+      `Prelude.hashWithSalt` hostResourceGroupArn
+      `Prelude.hashWithSalt` partitionNumber
+      `Prelude.hashWithSalt` spreadDomain
+      `Prelude.hashWithSalt` tenancy
+
+instance Prelude.NFData Placement where
+  rnf Placement' {..} =
+    Prelude.rnf affinity
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf hostId
+      `Prelude.seq` Prelude.rnf hostResourceGroupArn
+      `Prelude.seq` Prelude.rnf partitionNumber
+      `Prelude.seq` Prelude.rnf spreadDomain
+      `Prelude.seq` Prelude.rnf tenancy
+
+instance Data.ToQuery Placement where
+  toQuery Placement' {..} =
+    Prelude.mconcat
+      [ "Affinity" Data.=: affinity,
+        "AvailabilityZone" Data.=: availabilityZone,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName,
+        "HostId" Data.=: hostId,
+        "HostResourceGroupArn" Data.=: hostResourceGroupArn,
+        "PartitionNumber" Data.=: partitionNumber,
+        "SpreadDomain" Data.=: spreadDomain,
+        "Tenancy" Data.=: tenancy
+      ]
diff --git a/gen/Amazonka/EC2/Types/PlacementGroup.hs b/gen/Amazonka/EC2/Types/PlacementGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlacementGroup.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlacementGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlacementGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PlacementGroupState
+import Amazonka.EC2.Types.PlacementStrategy
+import Amazonka.EC2.Types.SpreadLevel
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a placement group.
+--
+-- /See:/ 'newPlacementGroup' smart constructor.
+data PlacementGroup = PlacementGroup'
+  { -- | The Amazon Resource Name (ARN) of the placement group.
+    groupArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the placement group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The number of partitions. Valid only if __strategy__ is set to
+    -- @partition@.
+    partitionCount :: Prelude.Maybe Prelude.Int,
+    -- | The spread level for the placement group. /Only/ Outpost placement
+    -- groups can be spread across hosts.
+    spreadLevel :: Prelude.Maybe SpreadLevel,
+    -- | The state of the placement group.
+    state :: Prelude.Maybe PlacementGroupState,
+    -- | The placement strategy.
+    strategy :: Prelude.Maybe PlacementStrategy,
+    -- | Any tags applied to the placement group.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlacementGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupArn', 'placementGroup_groupArn' - The Amazon Resource Name (ARN) of the placement group.
+--
+-- 'groupId', 'placementGroup_groupId' - The ID of the placement group.
+--
+-- 'groupName', 'placementGroup_groupName' - The name of the placement group.
+--
+-- 'partitionCount', 'placementGroup_partitionCount' - The number of partitions. Valid only if __strategy__ is set to
+-- @partition@.
+--
+-- 'spreadLevel', 'placementGroup_spreadLevel' - The spread level for the placement group. /Only/ Outpost placement
+-- groups can be spread across hosts.
+--
+-- 'state', 'placementGroup_state' - The state of the placement group.
+--
+-- 'strategy', 'placementGroup_strategy' - The placement strategy.
+--
+-- 'tags', 'placementGroup_tags' - Any tags applied to the placement group.
+newPlacementGroup ::
+  PlacementGroup
+newPlacementGroup =
+  PlacementGroup'
+    { groupArn = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      partitionCount = Prelude.Nothing,
+      spreadLevel = Prelude.Nothing,
+      state = Prelude.Nothing,
+      strategy = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the placement group.
+placementGroup_groupArn :: Lens.Lens' PlacementGroup (Prelude.Maybe Prelude.Text)
+placementGroup_groupArn = Lens.lens (\PlacementGroup' {groupArn} -> groupArn) (\s@PlacementGroup' {} a -> s {groupArn = a} :: PlacementGroup)
+
+-- | The ID of the placement group.
+placementGroup_groupId :: Lens.Lens' PlacementGroup (Prelude.Maybe Prelude.Text)
+placementGroup_groupId = Lens.lens (\PlacementGroup' {groupId} -> groupId) (\s@PlacementGroup' {} a -> s {groupId = a} :: PlacementGroup)
+
+-- | The name of the placement group.
+placementGroup_groupName :: Lens.Lens' PlacementGroup (Prelude.Maybe Prelude.Text)
+placementGroup_groupName = Lens.lens (\PlacementGroup' {groupName} -> groupName) (\s@PlacementGroup' {} a -> s {groupName = a} :: PlacementGroup)
+
+-- | The number of partitions. Valid only if __strategy__ is set to
+-- @partition@.
+placementGroup_partitionCount :: Lens.Lens' PlacementGroup (Prelude.Maybe Prelude.Int)
+placementGroup_partitionCount = Lens.lens (\PlacementGroup' {partitionCount} -> partitionCount) (\s@PlacementGroup' {} a -> s {partitionCount = a} :: PlacementGroup)
+
+-- | The spread level for the placement group. /Only/ Outpost placement
+-- groups can be spread across hosts.
+placementGroup_spreadLevel :: Lens.Lens' PlacementGroup (Prelude.Maybe SpreadLevel)
+placementGroup_spreadLevel = Lens.lens (\PlacementGroup' {spreadLevel} -> spreadLevel) (\s@PlacementGroup' {} a -> s {spreadLevel = a} :: PlacementGroup)
+
+-- | The state of the placement group.
+placementGroup_state :: Lens.Lens' PlacementGroup (Prelude.Maybe PlacementGroupState)
+placementGroup_state = Lens.lens (\PlacementGroup' {state} -> state) (\s@PlacementGroup' {} a -> s {state = a} :: PlacementGroup)
+
+-- | The placement strategy.
+placementGroup_strategy :: Lens.Lens' PlacementGroup (Prelude.Maybe PlacementStrategy)
+placementGroup_strategy = Lens.lens (\PlacementGroup' {strategy} -> strategy) (\s@PlacementGroup' {} a -> s {strategy = a} :: PlacementGroup)
+
+-- | Any tags applied to the placement group.
+placementGroup_tags :: Lens.Lens' PlacementGroup (Prelude.Maybe [Tag])
+placementGroup_tags = Lens.lens (\PlacementGroup' {tags} -> tags) (\s@PlacementGroup' {} a -> s {tags = a} :: PlacementGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML PlacementGroup where
+  parseXML x =
+    PlacementGroup'
+      Prelude.<$> (x Data..@? "groupArn")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+      Prelude.<*> (x Data..@? "partitionCount")
+      Prelude.<*> (x Data..@? "spreadLevel")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "strategy")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable PlacementGroup where
+  hashWithSalt _salt PlacementGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupArn
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` partitionCount
+      `Prelude.hashWithSalt` spreadLevel
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` strategy
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData PlacementGroup where
+  rnf PlacementGroup' {..} =
+    Prelude.rnf groupArn
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf partitionCount
+      `Prelude.seq` Prelude.rnf spreadLevel
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf strategy
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/PlacementGroupInfo.hs b/gen/Amazonka/EC2/Types/PlacementGroupInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlacementGroupInfo.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlacementGroupInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlacementGroupInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PlacementGroupStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the placement group support of the instance type.
+--
+-- /See:/ 'newPlacementGroupInfo' smart constructor.
+data PlacementGroupInfo = PlacementGroupInfo'
+  { -- | The supported placement group types.
+    supportedStrategies :: Prelude.Maybe [PlacementGroupStrategy]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlacementGroupInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'supportedStrategies', 'placementGroupInfo_supportedStrategies' - The supported placement group types.
+newPlacementGroupInfo ::
+  PlacementGroupInfo
+newPlacementGroupInfo =
+  PlacementGroupInfo'
+    { supportedStrategies =
+        Prelude.Nothing
+    }
+
+-- | The supported placement group types.
+placementGroupInfo_supportedStrategies :: Lens.Lens' PlacementGroupInfo (Prelude.Maybe [PlacementGroupStrategy])
+placementGroupInfo_supportedStrategies = Lens.lens (\PlacementGroupInfo' {supportedStrategies} -> supportedStrategies) (\s@PlacementGroupInfo' {} a -> s {supportedStrategies = a} :: PlacementGroupInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML PlacementGroupInfo where
+  parseXML x =
+    PlacementGroupInfo'
+      Prelude.<$> ( x
+                      Data..@? "supportedStrategies"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable PlacementGroupInfo where
+  hashWithSalt _salt PlacementGroupInfo' {..} =
+    _salt `Prelude.hashWithSalt` supportedStrategies
+
+instance Prelude.NFData PlacementGroupInfo where
+  rnf PlacementGroupInfo' {..} =
+    Prelude.rnf supportedStrategies
diff --git a/gen/Amazonka/EC2/Types/PlacementGroupState.hs b/gen/Amazonka/EC2/Types/PlacementGroupState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlacementGroupState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlacementGroupState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlacementGroupState
+  ( PlacementGroupState
+      ( ..,
+        PlacementGroupState_Available,
+        PlacementGroupState_Deleted,
+        PlacementGroupState_Deleting,
+        PlacementGroupState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PlacementGroupState = PlacementGroupState'
+  { fromPlacementGroupState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PlacementGroupState_Available :: PlacementGroupState
+pattern PlacementGroupState_Available = PlacementGroupState' "available"
+
+pattern PlacementGroupState_Deleted :: PlacementGroupState
+pattern PlacementGroupState_Deleted = PlacementGroupState' "deleted"
+
+pattern PlacementGroupState_Deleting :: PlacementGroupState
+pattern PlacementGroupState_Deleting = PlacementGroupState' "deleting"
+
+pattern PlacementGroupState_Pending :: PlacementGroupState
+pattern PlacementGroupState_Pending = PlacementGroupState' "pending"
+
+{-# COMPLETE
+  PlacementGroupState_Available,
+  PlacementGroupState_Deleted,
+  PlacementGroupState_Deleting,
+  PlacementGroupState_Pending,
+  PlacementGroupState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PlacementGroupStrategy.hs b/gen/Amazonka/EC2/Types/PlacementGroupStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlacementGroupStrategy.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlacementGroupStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlacementGroupStrategy
+  ( PlacementGroupStrategy
+      ( ..,
+        PlacementGroupStrategy_Cluster,
+        PlacementGroupStrategy_Partition,
+        PlacementGroupStrategy_Spread
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PlacementGroupStrategy = PlacementGroupStrategy'
+  { fromPlacementGroupStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PlacementGroupStrategy_Cluster :: PlacementGroupStrategy
+pattern PlacementGroupStrategy_Cluster = PlacementGroupStrategy' "cluster"
+
+pattern PlacementGroupStrategy_Partition :: PlacementGroupStrategy
+pattern PlacementGroupStrategy_Partition = PlacementGroupStrategy' "partition"
+
+pattern PlacementGroupStrategy_Spread :: PlacementGroupStrategy
+pattern PlacementGroupStrategy_Spread = PlacementGroupStrategy' "spread"
+
+{-# COMPLETE
+  PlacementGroupStrategy_Cluster,
+  PlacementGroupStrategy_Partition,
+  PlacementGroupStrategy_Spread,
+  PlacementGroupStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PlacementResponse.hs b/gen/Amazonka/EC2/Types/PlacementResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlacementResponse.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlacementResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlacementResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the placement of an instance.
+--
+-- /See:/ 'newPlacementResponse' smart constructor.
+data PlacementResponse = PlacementResponse'
+  { -- | The name of the placement group that the instance is in.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PlacementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupName', 'placementResponse_groupName' - The name of the placement group that the instance is in.
+newPlacementResponse ::
+  PlacementResponse
+newPlacementResponse =
+  PlacementResponse' {groupName = Prelude.Nothing}
+
+-- | The name of the placement group that the instance is in.
+placementResponse_groupName :: Lens.Lens' PlacementResponse (Prelude.Maybe Prelude.Text)
+placementResponse_groupName = Lens.lens (\PlacementResponse' {groupName} -> groupName) (\s@PlacementResponse' {} a -> s {groupName = a} :: PlacementResponse)
+
+instance Data.FromXML PlacementResponse where
+  parseXML x =
+    PlacementResponse'
+      Prelude.<$> (x Data..@? "groupName")
+
+instance Prelude.Hashable PlacementResponse where
+  hashWithSalt _salt PlacementResponse' {..} =
+    _salt `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData PlacementResponse where
+  rnf PlacementResponse' {..} = Prelude.rnf groupName
diff --git a/gen/Amazonka/EC2/Types/PlacementStrategy.hs b/gen/Amazonka/EC2/Types/PlacementStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlacementStrategy.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlacementStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlacementStrategy
+  ( PlacementStrategy
+      ( ..,
+        PlacementStrategy_Cluster,
+        PlacementStrategy_Partition,
+        PlacementStrategy_Spread
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PlacementStrategy = PlacementStrategy'
+  { fromPlacementStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PlacementStrategy_Cluster :: PlacementStrategy
+pattern PlacementStrategy_Cluster = PlacementStrategy' "cluster"
+
+pattern PlacementStrategy_Partition :: PlacementStrategy
+pattern PlacementStrategy_Partition = PlacementStrategy' "partition"
+
+pattern PlacementStrategy_Spread :: PlacementStrategy
+pattern PlacementStrategy_Spread = PlacementStrategy' "spread"
+
+{-# COMPLETE
+  PlacementStrategy_Cluster,
+  PlacementStrategy_Partition,
+  PlacementStrategy_Spread,
+  PlacementStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PlatformValues.hs b/gen/Amazonka/EC2/Types/PlatformValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PlatformValues.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PlatformValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PlatformValues
+  ( PlatformValues
+      ( ..,
+        PlatformValues_Windows
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PlatformValues = PlatformValues'
+  { fromPlatformValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PlatformValues_Windows :: PlatformValues
+pattern PlatformValues_Windows = PlatformValues' "Windows"
+
+{-# COMPLETE
+  PlatformValues_Windows,
+  PlatformValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PoolCidrBlock.hs b/gen/Amazonka/EC2/Types/PoolCidrBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PoolCidrBlock.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PoolCidrBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PoolCidrBlock where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a CIDR block for an address pool.
+--
+-- /See:/ 'newPoolCidrBlock' smart constructor.
+data PoolCidrBlock = PoolCidrBlock'
+  { -- | The CIDR block.
+    cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PoolCidrBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'poolCidrBlock_cidr' - The CIDR block.
+newPoolCidrBlock ::
+  PoolCidrBlock
+newPoolCidrBlock =
+  PoolCidrBlock' {cidr = Prelude.Nothing}
+
+-- | The CIDR block.
+poolCidrBlock_cidr :: Lens.Lens' PoolCidrBlock (Prelude.Maybe Prelude.Text)
+poolCidrBlock_cidr = Lens.lens (\PoolCidrBlock' {cidr} -> cidr) (\s@PoolCidrBlock' {} a -> s {cidr = a} :: PoolCidrBlock)
+
+instance Data.FromXML PoolCidrBlock where
+  parseXML x =
+    PoolCidrBlock'
+      Prelude.<$> (x Data..@? "poolCidrBlock")
+
+instance Prelude.Hashable PoolCidrBlock where
+  hashWithSalt _salt PoolCidrBlock' {..} =
+    _salt `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData PoolCidrBlock where
+  rnf PoolCidrBlock' {..} = Prelude.rnf cidr
diff --git a/gen/Amazonka/EC2/Types/PortRange.hs b/gen/Amazonka/EC2/Types/PortRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PortRange.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PortRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PortRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a range of ports.
+--
+-- /See:/ 'newPortRange' smart constructor.
+data PortRange = PortRange'
+  { -- | The first port in the range.
+    from :: Prelude.Maybe Prelude.Int,
+    -- | The last port in the range.
+    to :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PortRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'from', 'portRange_from' - The first port in the range.
+--
+-- 'to', 'portRange_to' - The last port in the range.
+newPortRange ::
+  PortRange
+newPortRange =
+  PortRange'
+    { from = Prelude.Nothing,
+      to = Prelude.Nothing
+    }
+
+-- | The first port in the range.
+portRange_from :: Lens.Lens' PortRange (Prelude.Maybe Prelude.Int)
+portRange_from = Lens.lens (\PortRange' {from} -> from) (\s@PortRange' {} a -> s {from = a} :: PortRange)
+
+-- | The last port in the range.
+portRange_to :: Lens.Lens' PortRange (Prelude.Maybe Prelude.Int)
+portRange_to = Lens.lens (\PortRange' {to} -> to) (\s@PortRange' {} a -> s {to = a} :: PortRange)
+
+instance Data.FromXML PortRange where
+  parseXML x =
+    PortRange'
+      Prelude.<$> (x Data..@? "from")
+      Prelude.<*> (x Data..@? "to")
+
+instance Prelude.Hashable PortRange where
+  hashWithSalt _salt PortRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` from
+      `Prelude.hashWithSalt` to
+
+instance Prelude.NFData PortRange where
+  rnf PortRange' {..} =
+    Prelude.rnf from `Prelude.seq` Prelude.rnf to
+
+instance Data.ToQuery PortRange where
+  toQuery PortRange' {..} =
+    Prelude.mconcat
+      ["From" Data.=: from, "To" Data.=: to]
diff --git a/gen/Amazonka/EC2/Types/PrefixList.hs b/gen/Amazonka/EC2/Types/PrefixList.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrefixList.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrefixList
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrefixList where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes prefixes for Amazon Web Services services.
+--
+-- /See:/ 'newPrefixList' smart constructor.
+data PrefixList = PrefixList'
+  { -- | The IP address range of the Amazon Web Service.
+    cidrs :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the prefix.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the prefix.
+    prefixListName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefixList' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrs', 'prefixList_cidrs' - The IP address range of the Amazon Web Service.
+--
+-- 'prefixListId', 'prefixList_prefixListId' - The ID of the prefix.
+--
+-- 'prefixListName', 'prefixList_prefixListName' - The name of the prefix.
+newPrefixList ::
+  PrefixList
+newPrefixList =
+  PrefixList'
+    { cidrs = Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      prefixListName = Prelude.Nothing
+    }
+
+-- | The IP address range of the Amazon Web Service.
+prefixList_cidrs :: Lens.Lens' PrefixList (Prelude.Maybe [Prelude.Text])
+prefixList_cidrs = Lens.lens (\PrefixList' {cidrs} -> cidrs) (\s@PrefixList' {} a -> s {cidrs = a} :: PrefixList) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the prefix.
+prefixList_prefixListId :: Lens.Lens' PrefixList (Prelude.Maybe Prelude.Text)
+prefixList_prefixListId = Lens.lens (\PrefixList' {prefixListId} -> prefixListId) (\s@PrefixList' {} a -> s {prefixListId = a} :: PrefixList)
+
+-- | The name of the prefix.
+prefixList_prefixListName :: Lens.Lens' PrefixList (Prelude.Maybe Prelude.Text)
+prefixList_prefixListName = Lens.lens (\PrefixList' {prefixListName} -> prefixListName) (\s@PrefixList' {} a -> s {prefixListName = a} :: PrefixList)
+
+instance Data.FromXML PrefixList where
+  parseXML x =
+    PrefixList'
+      Prelude.<$> ( x
+                      Data..@? "cidrSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "prefixListName")
+
+instance Prelude.Hashable PrefixList where
+  hashWithSalt _salt PrefixList' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrs
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` prefixListName
+
+instance Prelude.NFData PrefixList where
+  rnf PrefixList' {..} =
+    Prelude.rnf cidrs
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf prefixListName
diff --git a/gen/Amazonka/EC2/Types/PrefixListAssociation.hs b/gen/Amazonka/EC2/Types/PrefixListAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrefixListAssociation.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrefixListAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrefixListAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the resource with which a prefix list is associated.
+--
+-- /See:/ 'newPrefixListAssociation' smart constructor.
+data PrefixListAssociation = PrefixListAssociation'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The owner of the resource.
+    resourceOwner :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefixListAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'prefixListAssociation_resourceId' - The ID of the resource.
+--
+-- 'resourceOwner', 'prefixListAssociation_resourceOwner' - The owner of the resource.
+newPrefixListAssociation ::
+  PrefixListAssociation
+newPrefixListAssociation =
+  PrefixListAssociation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceOwner = Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+prefixListAssociation_resourceId :: Lens.Lens' PrefixListAssociation (Prelude.Maybe Prelude.Text)
+prefixListAssociation_resourceId = Lens.lens (\PrefixListAssociation' {resourceId} -> resourceId) (\s@PrefixListAssociation' {} a -> s {resourceId = a} :: PrefixListAssociation)
+
+-- | The owner of the resource.
+prefixListAssociation_resourceOwner :: Lens.Lens' PrefixListAssociation (Prelude.Maybe Prelude.Text)
+prefixListAssociation_resourceOwner = Lens.lens (\PrefixListAssociation' {resourceOwner} -> resourceOwner) (\s@PrefixListAssociation' {} a -> s {resourceOwner = a} :: PrefixListAssociation)
+
+instance Data.FromXML PrefixListAssociation where
+  parseXML x =
+    PrefixListAssociation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceOwner")
+
+instance Prelude.Hashable PrefixListAssociation where
+  hashWithSalt _salt PrefixListAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceOwner
+
+instance Prelude.NFData PrefixListAssociation where
+  rnf PrefixListAssociation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwner
diff --git a/gen/Amazonka/EC2/Types/PrefixListEntry.hs b/gen/Amazonka/EC2/Types/PrefixListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrefixListEntry.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrefixListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrefixListEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a prefix list entry.
+--
+-- /See:/ 'newPrefixListEntry' smart constructor.
+data PrefixListEntry = PrefixListEntry'
+  { -- | The CIDR block.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | The description.
+    description :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefixListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'prefixListEntry_cidr' - The CIDR block.
+--
+-- 'description', 'prefixListEntry_description' - The description.
+newPrefixListEntry ::
+  PrefixListEntry
+newPrefixListEntry =
+  PrefixListEntry'
+    { cidr = Prelude.Nothing,
+      description = Prelude.Nothing
+    }
+
+-- | The CIDR block.
+prefixListEntry_cidr :: Lens.Lens' PrefixListEntry (Prelude.Maybe Prelude.Text)
+prefixListEntry_cidr = Lens.lens (\PrefixListEntry' {cidr} -> cidr) (\s@PrefixListEntry' {} a -> s {cidr = a} :: PrefixListEntry)
+
+-- | The description.
+prefixListEntry_description :: Lens.Lens' PrefixListEntry (Prelude.Maybe Prelude.Text)
+prefixListEntry_description = Lens.lens (\PrefixListEntry' {description} -> description) (\s@PrefixListEntry' {} a -> s {description = a} :: PrefixListEntry)
+
+instance Data.FromXML PrefixListEntry where
+  parseXML x =
+    PrefixListEntry'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "description")
+
+instance Prelude.Hashable PrefixListEntry where
+  hashWithSalt _salt PrefixListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData PrefixListEntry where
+  rnf PrefixListEntry' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/EC2/Types/PrefixListId.hs b/gen/Amazonka/EC2/Types/PrefixListId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrefixListId.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrefixListId
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrefixListId where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a prefix list ID.
+--
+-- /See:/ 'newPrefixListId' smart constructor.
+data PrefixListId = PrefixListId'
+  { -- | A description for the security group rule that references this prefix
+    -- list ID.
+    --
+    -- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+    -- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=;{}!$*
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix.
+    prefixListId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrefixListId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'prefixListId_description' - A description for the security group rule that references this prefix
+-- list ID.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=;{}!$*
+--
+-- 'prefixListId', 'prefixListId_prefixListId' - The ID of the prefix.
+newPrefixListId ::
+  PrefixListId
+newPrefixListId =
+  PrefixListId'
+    { description = Prelude.Nothing,
+      prefixListId = Prelude.Nothing
+    }
+
+-- | A description for the security group rule that references this prefix
+-- list ID.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=;{}!$*
+prefixListId_description :: Lens.Lens' PrefixListId (Prelude.Maybe Prelude.Text)
+prefixListId_description = Lens.lens (\PrefixListId' {description} -> description) (\s@PrefixListId' {} a -> s {description = a} :: PrefixListId)
+
+-- | The ID of the prefix.
+prefixListId_prefixListId :: Lens.Lens' PrefixListId (Prelude.Maybe Prelude.Text)
+prefixListId_prefixListId = Lens.lens (\PrefixListId' {prefixListId} -> prefixListId) (\s@PrefixListId' {} a -> s {prefixListId = a} :: PrefixListId)
+
+instance Data.FromXML PrefixListId where
+  parseXML x =
+    PrefixListId'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "prefixListId")
+
+instance Prelude.Hashable PrefixListId where
+  hashWithSalt _salt PrefixListId' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` prefixListId
+
+instance Prelude.NFData PrefixListId where
+  rnf PrefixListId' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf prefixListId
+
+instance Data.ToQuery PrefixListId where
+  toQuery PrefixListId' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "PrefixListId" Data.=: prefixListId
+      ]
diff --git a/gen/Amazonka/EC2/Types/PrefixListState.hs b/gen/Amazonka/EC2/Types/PrefixListState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrefixListState.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrefixListState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrefixListState
+  ( PrefixListState
+      ( ..,
+        PrefixListState_Create_complete,
+        PrefixListState_Create_failed,
+        PrefixListState_Create_in_progress,
+        PrefixListState_Delete_complete,
+        PrefixListState_Delete_failed,
+        PrefixListState_Delete_in_progress,
+        PrefixListState_Modify_complete,
+        PrefixListState_Modify_failed,
+        PrefixListState_Modify_in_progress,
+        PrefixListState_Restore_complete,
+        PrefixListState_Restore_failed,
+        PrefixListState_Restore_in_progress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PrefixListState = PrefixListState'
+  { fromPrefixListState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PrefixListState_Create_complete :: PrefixListState
+pattern PrefixListState_Create_complete = PrefixListState' "create-complete"
+
+pattern PrefixListState_Create_failed :: PrefixListState
+pattern PrefixListState_Create_failed = PrefixListState' "create-failed"
+
+pattern PrefixListState_Create_in_progress :: PrefixListState
+pattern PrefixListState_Create_in_progress = PrefixListState' "create-in-progress"
+
+pattern PrefixListState_Delete_complete :: PrefixListState
+pattern PrefixListState_Delete_complete = PrefixListState' "delete-complete"
+
+pattern PrefixListState_Delete_failed :: PrefixListState
+pattern PrefixListState_Delete_failed = PrefixListState' "delete-failed"
+
+pattern PrefixListState_Delete_in_progress :: PrefixListState
+pattern PrefixListState_Delete_in_progress = PrefixListState' "delete-in-progress"
+
+pattern PrefixListState_Modify_complete :: PrefixListState
+pattern PrefixListState_Modify_complete = PrefixListState' "modify-complete"
+
+pattern PrefixListState_Modify_failed :: PrefixListState
+pattern PrefixListState_Modify_failed = PrefixListState' "modify-failed"
+
+pattern PrefixListState_Modify_in_progress :: PrefixListState
+pattern PrefixListState_Modify_in_progress = PrefixListState' "modify-in-progress"
+
+pattern PrefixListState_Restore_complete :: PrefixListState
+pattern PrefixListState_Restore_complete = PrefixListState' "restore-complete"
+
+pattern PrefixListState_Restore_failed :: PrefixListState
+pattern PrefixListState_Restore_failed = PrefixListState' "restore-failed"
+
+pattern PrefixListState_Restore_in_progress :: PrefixListState
+pattern PrefixListState_Restore_in_progress = PrefixListState' "restore-in-progress"
+
+{-# COMPLETE
+  PrefixListState_Create_complete,
+  PrefixListState_Create_failed,
+  PrefixListState_Create_in_progress,
+  PrefixListState_Delete_complete,
+  PrefixListState_Delete_failed,
+  PrefixListState_Delete_in_progress,
+  PrefixListState_Modify_complete,
+  PrefixListState_Modify_failed,
+  PrefixListState_Modify_in_progress,
+  PrefixListState_Restore_complete,
+  PrefixListState_Restore_failed,
+  PrefixListState_Restore_in_progress,
+  PrefixListState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PriceSchedule.hs b/gen/Amazonka/EC2/Types/PriceSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PriceSchedule.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PriceSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PriceSchedule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the price for a Reserved Instance.
+--
+-- /See:/ 'newPriceSchedule' smart constructor.
+data PriceSchedule = PriceSchedule'
+  { -- | The current price schedule, as determined by the term remaining for the
+    -- Reserved Instance in the listing.
+    --
+    -- A specific price schedule is always in effect, but only one price
+    -- schedule can be active at any time. Take, for example, a Reserved
+    -- Instance listing that has five months remaining in its term. When you
+    -- specify price schedules for five months and two months, this means that
+    -- schedule 1, covering the first three months of the remaining term, will
+    -- be active during months 5, 4, and 3. Then schedule 2, covering the last
+    -- two months of the term, will be active for months 2 and 1.
+    active :: Prelude.Maybe Prelude.Bool,
+    -- | The currency for transacting the Reserved Instance resale. At this time,
+    -- the only supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The fixed price for the term.
+    price :: Prelude.Maybe Prelude.Double,
+    -- | The number of months remaining in the reservation. For example, 2 is the
+    -- second to the last month before the capacity reservation expires.
+    term :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PriceSchedule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'active', 'priceSchedule_active' - The current price schedule, as determined by the term remaining for the
+-- Reserved Instance in the listing.
+--
+-- A specific price schedule is always in effect, but only one price
+-- schedule can be active at any time. Take, for example, a Reserved
+-- Instance listing that has five months remaining in its term. When you
+-- specify price schedules for five months and two months, this means that
+-- schedule 1, covering the first three months of the remaining term, will
+-- be active during months 5, 4, and 3. Then schedule 2, covering the last
+-- two months of the term, will be active for months 2 and 1.
+--
+-- 'currencyCode', 'priceSchedule_currencyCode' - The currency for transacting the Reserved Instance resale. At this time,
+-- the only supported currency is @USD@.
+--
+-- 'price', 'priceSchedule_price' - The fixed price for the term.
+--
+-- 'term', 'priceSchedule_term' - The number of months remaining in the reservation. For example, 2 is the
+-- second to the last month before the capacity reservation expires.
+newPriceSchedule ::
+  PriceSchedule
+newPriceSchedule =
+  PriceSchedule'
+    { active = Prelude.Nothing,
+      currencyCode = Prelude.Nothing,
+      price = Prelude.Nothing,
+      term = Prelude.Nothing
+    }
+
+-- | The current price schedule, as determined by the term remaining for the
+-- Reserved Instance in the listing.
+--
+-- A specific price schedule is always in effect, but only one price
+-- schedule can be active at any time. Take, for example, a Reserved
+-- Instance listing that has five months remaining in its term. When you
+-- specify price schedules for five months and two months, this means that
+-- schedule 1, covering the first three months of the remaining term, will
+-- be active during months 5, 4, and 3. Then schedule 2, covering the last
+-- two months of the term, will be active for months 2 and 1.
+priceSchedule_active :: Lens.Lens' PriceSchedule (Prelude.Maybe Prelude.Bool)
+priceSchedule_active = Lens.lens (\PriceSchedule' {active} -> active) (\s@PriceSchedule' {} a -> s {active = a} :: PriceSchedule)
+
+-- | The currency for transacting the Reserved Instance resale. At this time,
+-- the only supported currency is @USD@.
+priceSchedule_currencyCode :: Lens.Lens' PriceSchedule (Prelude.Maybe CurrencyCodeValues)
+priceSchedule_currencyCode = Lens.lens (\PriceSchedule' {currencyCode} -> currencyCode) (\s@PriceSchedule' {} a -> s {currencyCode = a} :: PriceSchedule)
+
+-- | The fixed price for the term.
+priceSchedule_price :: Lens.Lens' PriceSchedule (Prelude.Maybe Prelude.Double)
+priceSchedule_price = Lens.lens (\PriceSchedule' {price} -> price) (\s@PriceSchedule' {} a -> s {price = a} :: PriceSchedule)
+
+-- | The number of months remaining in the reservation. For example, 2 is the
+-- second to the last month before the capacity reservation expires.
+priceSchedule_term :: Lens.Lens' PriceSchedule (Prelude.Maybe Prelude.Integer)
+priceSchedule_term = Lens.lens (\PriceSchedule' {term} -> term) (\s@PriceSchedule' {} a -> s {term = a} :: PriceSchedule)
+
+instance Data.FromXML PriceSchedule where
+  parseXML x =
+    PriceSchedule'
+      Prelude.<$> (x Data..@? "active")
+      Prelude.<*> (x Data..@? "currencyCode")
+      Prelude.<*> (x Data..@? "price")
+      Prelude.<*> (x Data..@? "term")
+
+instance Prelude.Hashable PriceSchedule where
+  hashWithSalt _salt PriceSchedule' {..} =
+    _salt
+      `Prelude.hashWithSalt` active
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` price
+      `Prelude.hashWithSalt` term
+
+instance Prelude.NFData PriceSchedule where
+  rnf PriceSchedule' {..} =
+    Prelude.rnf active
+      `Prelude.seq` Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf price
+      `Prelude.seq` Prelude.rnf term
diff --git a/gen/Amazonka/EC2/Types/PriceScheduleSpecification.hs b/gen/Amazonka/EC2/Types/PriceScheduleSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PriceScheduleSpecification.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PriceScheduleSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PriceScheduleSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the price for a Reserved Instance.
+--
+-- /See:/ 'newPriceScheduleSpecification' smart constructor.
+data PriceScheduleSpecification = PriceScheduleSpecification'
+  { -- | The currency for transacting the Reserved Instance resale. At this time,
+    -- the only supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The fixed price for the term.
+    price :: Prelude.Maybe Prelude.Double,
+    -- | The number of months remaining in the reservation. For example, 2 is the
+    -- second to the last month before the capacity reservation expires.
+    term :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PriceScheduleSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currencyCode', 'priceScheduleSpecification_currencyCode' - The currency for transacting the Reserved Instance resale. At this time,
+-- the only supported currency is @USD@.
+--
+-- 'price', 'priceScheduleSpecification_price' - The fixed price for the term.
+--
+-- 'term', 'priceScheduleSpecification_term' - The number of months remaining in the reservation. For example, 2 is the
+-- second to the last month before the capacity reservation expires.
+newPriceScheduleSpecification ::
+  PriceScheduleSpecification
+newPriceScheduleSpecification =
+  PriceScheduleSpecification'
+    { currencyCode =
+        Prelude.Nothing,
+      price = Prelude.Nothing,
+      term = Prelude.Nothing
+    }
+
+-- | The currency for transacting the Reserved Instance resale. At this time,
+-- the only supported currency is @USD@.
+priceScheduleSpecification_currencyCode :: Lens.Lens' PriceScheduleSpecification (Prelude.Maybe CurrencyCodeValues)
+priceScheduleSpecification_currencyCode = Lens.lens (\PriceScheduleSpecification' {currencyCode} -> currencyCode) (\s@PriceScheduleSpecification' {} a -> s {currencyCode = a} :: PriceScheduleSpecification)
+
+-- | The fixed price for the term.
+priceScheduleSpecification_price :: Lens.Lens' PriceScheduleSpecification (Prelude.Maybe Prelude.Double)
+priceScheduleSpecification_price = Lens.lens (\PriceScheduleSpecification' {price} -> price) (\s@PriceScheduleSpecification' {} a -> s {price = a} :: PriceScheduleSpecification)
+
+-- | The number of months remaining in the reservation. For example, 2 is the
+-- second to the last month before the capacity reservation expires.
+priceScheduleSpecification_term :: Lens.Lens' PriceScheduleSpecification (Prelude.Maybe Prelude.Integer)
+priceScheduleSpecification_term = Lens.lens (\PriceScheduleSpecification' {term} -> term) (\s@PriceScheduleSpecification' {} a -> s {term = a} :: PriceScheduleSpecification)
+
+instance Prelude.Hashable PriceScheduleSpecification where
+  hashWithSalt _salt PriceScheduleSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` price
+      `Prelude.hashWithSalt` term
+
+instance Prelude.NFData PriceScheduleSpecification where
+  rnf PriceScheduleSpecification' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf price
+      `Prelude.seq` Prelude.rnf term
+
+instance Data.ToQuery PriceScheduleSpecification where
+  toQuery PriceScheduleSpecification' {..} =
+    Prelude.mconcat
+      [ "CurrencyCode" Data.=: currencyCode,
+        "Price" Data.=: price,
+        "Term" Data.=: term
+      ]
diff --git a/gen/Amazonka/EC2/Types/PricingDetail.hs b/gen/Amazonka/EC2/Types/PricingDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PricingDetail.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PricingDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PricingDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance offering.
+--
+-- /See:/ 'newPricingDetail' smart constructor.
+data PricingDetail = PricingDetail'
+  { -- | The number of reservations available for the price.
+    count :: Prelude.Maybe Prelude.Int,
+    -- | The price per instance.
+    price :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PricingDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'count', 'pricingDetail_count' - The number of reservations available for the price.
+--
+-- 'price', 'pricingDetail_price' - The price per instance.
+newPricingDetail ::
+  PricingDetail
+newPricingDetail =
+  PricingDetail'
+    { count = Prelude.Nothing,
+      price = Prelude.Nothing
+    }
+
+-- | The number of reservations available for the price.
+pricingDetail_count :: Lens.Lens' PricingDetail (Prelude.Maybe Prelude.Int)
+pricingDetail_count = Lens.lens (\PricingDetail' {count} -> count) (\s@PricingDetail' {} a -> s {count = a} :: PricingDetail)
+
+-- | The price per instance.
+pricingDetail_price :: Lens.Lens' PricingDetail (Prelude.Maybe Prelude.Double)
+pricingDetail_price = Lens.lens (\PricingDetail' {price} -> price) (\s@PricingDetail' {} a -> s {price = a} :: PricingDetail)
+
+instance Data.FromXML PricingDetail where
+  parseXML x =
+    PricingDetail'
+      Prelude.<$> (x Data..@? "count")
+      Prelude.<*> (x Data..@? "price")
+
+instance Prelude.Hashable PricingDetail where
+  hashWithSalt _salt PricingDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` count
+      `Prelude.hashWithSalt` price
+
+instance Prelude.NFData PricingDetail where
+  rnf PricingDetail' {..} =
+    Prelude.rnf count `Prelude.seq` Prelude.rnf price
diff --git a/gen/Amazonka/EC2/Types/PrincipalIdFormat.hs b/gen/Amazonka/EC2/Types/PrincipalIdFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrincipalIdFormat.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrincipalIdFormat
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrincipalIdFormat where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IdFormat
+import qualified Amazonka.Prelude as Prelude
+
+-- | PrincipalIdFormat description
+--
+-- /See:/ 'newPrincipalIdFormat' smart constructor.
+data PrincipalIdFormat = PrincipalIdFormat'
+  { -- | PrincipalIdFormatARN description
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | PrincipalIdFormatStatuses description
+    statuses :: Prelude.Maybe [IdFormat]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrincipalIdFormat' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'principalIdFormat_arn' - PrincipalIdFormatARN description
+--
+-- 'statuses', 'principalIdFormat_statuses' - PrincipalIdFormatStatuses description
+newPrincipalIdFormat ::
+  PrincipalIdFormat
+newPrincipalIdFormat =
+  PrincipalIdFormat'
+    { arn = Prelude.Nothing,
+      statuses = Prelude.Nothing
+    }
+
+-- | PrincipalIdFormatARN description
+principalIdFormat_arn :: Lens.Lens' PrincipalIdFormat (Prelude.Maybe Prelude.Text)
+principalIdFormat_arn = Lens.lens (\PrincipalIdFormat' {arn} -> arn) (\s@PrincipalIdFormat' {} a -> s {arn = a} :: PrincipalIdFormat)
+
+-- | PrincipalIdFormatStatuses description
+principalIdFormat_statuses :: Lens.Lens' PrincipalIdFormat (Prelude.Maybe [IdFormat])
+principalIdFormat_statuses = Lens.lens (\PrincipalIdFormat' {statuses} -> statuses) (\s@PrincipalIdFormat' {} a -> s {statuses = a} :: PrincipalIdFormat) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML PrincipalIdFormat where
+  parseXML x =
+    PrincipalIdFormat'
+      Prelude.<$> (x Data..@? "arn")
+      Prelude.<*> ( x
+                      Data..@? "statusSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable PrincipalIdFormat where
+  hashWithSalt _salt PrincipalIdFormat' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` statuses
+
+instance Prelude.NFData PrincipalIdFormat where
+  rnf PrincipalIdFormat' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf statuses
diff --git a/gen/Amazonka/EC2/Types/PrincipalType.hs b/gen/Amazonka/EC2/Types/PrincipalType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrincipalType.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrincipalType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrincipalType
+  ( PrincipalType
+      ( ..,
+        PrincipalType_Account,
+        PrincipalType_All,
+        PrincipalType_OrganizationUnit,
+        PrincipalType_Role,
+        PrincipalType_Service,
+        PrincipalType_User
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype PrincipalType = PrincipalType'
+  { fromPrincipalType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern PrincipalType_Account :: PrincipalType
+pattern PrincipalType_Account = PrincipalType' "Account"
+
+pattern PrincipalType_All :: PrincipalType
+pattern PrincipalType_All = PrincipalType' "All"
+
+pattern PrincipalType_OrganizationUnit :: PrincipalType
+pattern PrincipalType_OrganizationUnit = PrincipalType' "OrganizationUnit"
+
+pattern PrincipalType_Role :: PrincipalType
+pattern PrincipalType_Role = PrincipalType' "Role"
+
+pattern PrincipalType_Service :: PrincipalType
+pattern PrincipalType_Service = PrincipalType' "Service"
+
+pattern PrincipalType_User :: PrincipalType
+pattern PrincipalType_User = PrincipalType' "User"
+
+{-# COMPLETE
+  PrincipalType_Account,
+  PrincipalType_All,
+  PrincipalType_OrganizationUnit,
+  PrincipalType_Role,
+  PrincipalType_Service,
+  PrincipalType_User,
+  PrincipalType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PrivateDnsDetails.hs b/gen/Amazonka/EC2/Types/PrivateDnsDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrivateDnsDetails.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrivateDnsDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrivateDnsDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the Private DNS name for interface endpoints.
+--
+-- /See:/ 'newPrivateDnsDetails' smart constructor.
+data PrivateDnsDetails = PrivateDnsDetails'
+  { -- | The private DNS name assigned to the VPC endpoint service.
+    privateDnsName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateDnsDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'privateDnsName', 'privateDnsDetails_privateDnsName' - The private DNS name assigned to the VPC endpoint service.
+newPrivateDnsDetails ::
+  PrivateDnsDetails
+newPrivateDnsDetails =
+  PrivateDnsDetails'
+    { privateDnsName =
+        Prelude.Nothing
+    }
+
+-- | The private DNS name assigned to the VPC endpoint service.
+privateDnsDetails_privateDnsName :: Lens.Lens' PrivateDnsDetails (Prelude.Maybe Prelude.Text)
+privateDnsDetails_privateDnsName = Lens.lens (\PrivateDnsDetails' {privateDnsName} -> privateDnsName) (\s@PrivateDnsDetails' {} a -> s {privateDnsName = a} :: PrivateDnsDetails)
+
+instance Data.FromXML PrivateDnsDetails where
+  parseXML x =
+    PrivateDnsDetails'
+      Prelude.<$> (x Data..@? "privateDnsName")
+
+instance Prelude.Hashable PrivateDnsDetails where
+  hashWithSalt _salt PrivateDnsDetails' {..} =
+    _salt `Prelude.hashWithSalt` privateDnsName
+
+instance Prelude.NFData PrivateDnsDetails where
+  rnf PrivateDnsDetails' {..} =
+    Prelude.rnf privateDnsName
diff --git a/gen/Amazonka/EC2/Types/PrivateDnsNameConfiguration.hs b/gen/Amazonka/EC2/Types/PrivateDnsNameConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrivateDnsNameConfiguration.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrivateDnsNameConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrivateDnsNameConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DnsNameState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the private DNS name for the service endpoint.
+--
+-- /See:/ 'newPrivateDnsNameConfiguration' smart constructor.
+data PrivateDnsNameConfiguration = PrivateDnsNameConfiguration'
+  { -- | The name of the record subdomain the service provider needs to create.
+    -- The service provider adds the @value@ text to the @name@.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The verification state of the VPC endpoint service.
+    --
+    -- >Consumers of the endpoint service can use the private name only when
+    -- the state is @verified@.
+    state :: Prelude.Maybe DnsNameState,
+    -- | The endpoint service verification type, for example TXT.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | The value the service provider adds to the private DNS name domain
+    -- record before verification.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateDnsNameConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'privateDnsNameConfiguration_name' - The name of the record subdomain the service provider needs to create.
+-- The service provider adds the @value@ text to the @name@.
+--
+-- 'state', 'privateDnsNameConfiguration_state' - The verification state of the VPC endpoint service.
+--
+-- >Consumers of the endpoint service can use the private name only when
+-- the state is @verified@.
+--
+-- 'type'', 'privateDnsNameConfiguration_type' - The endpoint service verification type, for example TXT.
+--
+-- 'value', 'privateDnsNameConfiguration_value' - The value the service provider adds to the private DNS name domain
+-- record before verification.
+newPrivateDnsNameConfiguration ::
+  PrivateDnsNameConfiguration
+newPrivateDnsNameConfiguration =
+  PrivateDnsNameConfiguration'
+    { name =
+        Prelude.Nothing,
+      state = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The name of the record subdomain the service provider needs to create.
+-- The service provider adds the @value@ text to the @name@.
+privateDnsNameConfiguration_name :: Lens.Lens' PrivateDnsNameConfiguration (Prelude.Maybe Prelude.Text)
+privateDnsNameConfiguration_name = Lens.lens (\PrivateDnsNameConfiguration' {name} -> name) (\s@PrivateDnsNameConfiguration' {} a -> s {name = a} :: PrivateDnsNameConfiguration)
+
+-- | The verification state of the VPC endpoint service.
+--
+-- >Consumers of the endpoint service can use the private name only when
+-- the state is @verified@.
+privateDnsNameConfiguration_state :: Lens.Lens' PrivateDnsNameConfiguration (Prelude.Maybe DnsNameState)
+privateDnsNameConfiguration_state = Lens.lens (\PrivateDnsNameConfiguration' {state} -> state) (\s@PrivateDnsNameConfiguration' {} a -> s {state = a} :: PrivateDnsNameConfiguration)
+
+-- | The endpoint service verification type, for example TXT.
+privateDnsNameConfiguration_type :: Lens.Lens' PrivateDnsNameConfiguration (Prelude.Maybe Prelude.Text)
+privateDnsNameConfiguration_type = Lens.lens (\PrivateDnsNameConfiguration' {type'} -> type') (\s@PrivateDnsNameConfiguration' {} a -> s {type' = a} :: PrivateDnsNameConfiguration)
+
+-- | The value the service provider adds to the private DNS name domain
+-- record before verification.
+privateDnsNameConfiguration_value :: Lens.Lens' PrivateDnsNameConfiguration (Prelude.Maybe Prelude.Text)
+privateDnsNameConfiguration_value = Lens.lens (\PrivateDnsNameConfiguration' {value} -> value) (\s@PrivateDnsNameConfiguration' {} a -> s {value = a} :: PrivateDnsNameConfiguration)
+
+instance Data.FromXML PrivateDnsNameConfiguration where
+  parseXML x =
+    PrivateDnsNameConfiguration'
+      Prelude.<$> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "type")
+      Prelude.<*> (x Data..@? "value")
+
+instance Prelude.Hashable PrivateDnsNameConfiguration where
+  hashWithSalt _salt PrivateDnsNameConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData PrivateDnsNameConfiguration where
+  rnf PrivateDnsNameConfiguration' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsOnLaunch.hs b/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsOnLaunch.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsOnLaunch.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrivateDnsNameOptionsOnLaunch
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrivateDnsNameOptionsOnLaunch where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HostnameType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for instance hostnames.
+--
+-- /See:/ 'newPrivateDnsNameOptionsOnLaunch' smart constructor.
+data PrivateDnsNameOptionsOnLaunch = PrivateDnsNameOptionsOnLaunch'
+  { -- | Indicates whether to respond to DNS queries for instance hostname with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecord :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecord :: Prelude.Maybe Prelude.Bool,
+    -- | The type of hostname for EC2 instances. For IPv4 only subnets, an
+    -- instance DNS name must be based on the instance IPv4 address. For IPv6
+    -- only subnets, an instance DNS name must be based on the instance ID. For
+    -- dual-stack subnets, you can specify whether DNS names use the instance
+    -- IPv4 address or the instance ID.
+    hostnameType :: Prelude.Maybe HostnameType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateDnsNameOptionsOnLaunch' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableResourceNameDnsAAAARecord', 'privateDnsNameOptionsOnLaunch_enableResourceNameDnsAAAARecord' - Indicates whether to respond to DNS queries for instance hostname with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecord', 'privateDnsNameOptionsOnLaunch_enableResourceNameDnsARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'hostnameType', 'privateDnsNameOptionsOnLaunch_hostnameType' - The type of hostname for EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- only subnets, an instance DNS name must be based on the instance ID. For
+-- dual-stack subnets, you can specify whether DNS names use the instance
+-- IPv4 address or the instance ID.
+newPrivateDnsNameOptionsOnLaunch ::
+  PrivateDnsNameOptionsOnLaunch
+newPrivateDnsNameOptionsOnLaunch =
+  PrivateDnsNameOptionsOnLaunch'
+    { enableResourceNameDnsAAAARecord =
+        Prelude.Nothing,
+      enableResourceNameDnsARecord =
+        Prelude.Nothing,
+      hostnameType = Prelude.Nothing
+    }
+
+-- | Indicates whether to respond to DNS queries for instance hostname with
+-- DNS AAAA records.
+privateDnsNameOptionsOnLaunch_enableResourceNameDnsAAAARecord :: Lens.Lens' PrivateDnsNameOptionsOnLaunch (Prelude.Maybe Prelude.Bool)
+privateDnsNameOptionsOnLaunch_enableResourceNameDnsAAAARecord = Lens.lens (\PrivateDnsNameOptionsOnLaunch' {enableResourceNameDnsAAAARecord} -> enableResourceNameDnsAAAARecord) (\s@PrivateDnsNameOptionsOnLaunch' {} a -> s {enableResourceNameDnsAAAARecord = a} :: PrivateDnsNameOptionsOnLaunch)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+privateDnsNameOptionsOnLaunch_enableResourceNameDnsARecord :: Lens.Lens' PrivateDnsNameOptionsOnLaunch (Prelude.Maybe Prelude.Bool)
+privateDnsNameOptionsOnLaunch_enableResourceNameDnsARecord = Lens.lens (\PrivateDnsNameOptionsOnLaunch' {enableResourceNameDnsARecord} -> enableResourceNameDnsARecord) (\s@PrivateDnsNameOptionsOnLaunch' {} a -> s {enableResourceNameDnsARecord = a} :: PrivateDnsNameOptionsOnLaunch)
+
+-- | The type of hostname for EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- only subnets, an instance DNS name must be based on the instance ID. For
+-- dual-stack subnets, you can specify whether DNS names use the instance
+-- IPv4 address or the instance ID.
+privateDnsNameOptionsOnLaunch_hostnameType :: Lens.Lens' PrivateDnsNameOptionsOnLaunch (Prelude.Maybe HostnameType)
+privateDnsNameOptionsOnLaunch_hostnameType = Lens.lens (\PrivateDnsNameOptionsOnLaunch' {hostnameType} -> hostnameType) (\s@PrivateDnsNameOptionsOnLaunch' {} a -> s {hostnameType = a} :: PrivateDnsNameOptionsOnLaunch)
+
+instance Data.FromXML PrivateDnsNameOptionsOnLaunch where
+  parseXML x =
+    PrivateDnsNameOptionsOnLaunch'
+      Prelude.<$> (x Data..@? "enableResourceNameDnsAAAARecord")
+      Prelude.<*> (x Data..@? "enableResourceNameDnsARecord")
+      Prelude.<*> (x Data..@? "hostnameType")
+
+instance
+  Prelude.Hashable
+    PrivateDnsNameOptionsOnLaunch
+  where
+  hashWithSalt _salt PrivateDnsNameOptionsOnLaunch' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableResourceNameDnsAAAARecord
+      `Prelude.hashWithSalt` enableResourceNameDnsARecord
+      `Prelude.hashWithSalt` hostnameType
+
+instance Prelude.NFData PrivateDnsNameOptionsOnLaunch where
+  rnf PrivateDnsNameOptionsOnLaunch' {..} =
+    Prelude.rnf enableResourceNameDnsAAAARecord
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecord
+      `Prelude.seq` Prelude.rnf hostnameType
diff --git a/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsRequest.hs b/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsRequest.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrivateDnsNameOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrivateDnsNameOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HostnameType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for instance hostnames.
+--
+-- /See:/ 'newPrivateDnsNameOptionsRequest' smart constructor.
+data PrivateDnsNameOptionsRequest = PrivateDnsNameOptionsRequest'
+  { -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecord :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecord :: Prelude.Maybe Prelude.Bool,
+    -- | The type of hostname for EC2 instances. For IPv4 only subnets, an
+    -- instance DNS name must be based on the instance IPv4 address. For IPv6
+    -- only subnets, an instance DNS name must be based on the instance ID. For
+    -- dual-stack subnets, you can specify whether DNS names use the instance
+    -- IPv4 address or the instance ID.
+    hostnameType :: Prelude.Maybe HostnameType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateDnsNameOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableResourceNameDnsAAAARecord', 'privateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecord', 'privateDnsNameOptionsRequest_enableResourceNameDnsARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'hostnameType', 'privateDnsNameOptionsRequest_hostnameType' - The type of hostname for EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- only subnets, an instance DNS name must be based on the instance ID. For
+-- dual-stack subnets, you can specify whether DNS names use the instance
+-- IPv4 address or the instance ID.
+newPrivateDnsNameOptionsRequest ::
+  PrivateDnsNameOptionsRequest
+newPrivateDnsNameOptionsRequest =
+  PrivateDnsNameOptionsRequest'
+    { enableResourceNameDnsAAAARecord =
+        Prelude.Nothing,
+      enableResourceNameDnsARecord =
+        Prelude.Nothing,
+      hostnameType = Prelude.Nothing
+    }
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+privateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord :: Lens.Lens' PrivateDnsNameOptionsRequest (Prelude.Maybe Prelude.Bool)
+privateDnsNameOptionsRequest_enableResourceNameDnsAAAARecord = Lens.lens (\PrivateDnsNameOptionsRequest' {enableResourceNameDnsAAAARecord} -> enableResourceNameDnsAAAARecord) (\s@PrivateDnsNameOptionsRequest' {} a -> s {enableResourceNameDnsAAAARecord = a} :: PrivateDnsNameOptionsRequest)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+privateDnsNameOptionsRequest_enableResourceNameDnsARecord :: Lens.Lens' PrivateDnsNameOptionsRequest (Prelude.Maybe Prelude.Bool)
+privateDnsNameOptionsRequest_enableResourceNameDnsARecord = Lens.lens (\PrivateDnsNameOptionsRequest' {enableResourceNameDnsARecord} -> enableResourceNameDnsARecord) (\s@PrivateDnsNameOptionsRequest' {} a -> s {enableResourceNameDnsARecord = a} :: PrivateDnsNameOptionsRequest)
+
+-- | The type of hostname for EC2 instances. For IPv4 only subnets, an
+-- instance DNS name must be based on the instance IPv4 address. For IPv6
+-- only subnets, an instance DNS name must be based on the instance ID. For
+-- dual-stack subnets, you can specify whether DNS names use the instance
+-- IPv4 address or the instance ID.
+privateDnsNameOptionsRequest_hostnameType :: Lens.Lens' PrivateDnsNameOptionsRequest (Prelude.Maybe HostnameType)
+privateDnsNameOptionsRequest_hostnameType = Lens.lens (\PrivateDnsNameOptionsRequest' {hostnameType} -> hostnameType) (\s@PrivateDnsNameOptionsRequest' {} a -> s {hostnameType = a} :: PrivateDnsNameOptionsRequest)
+
+instance
+  Prelude.Hashable
+    PrivateDnsNameOptionsRequest
+  where
+  hashWithSalt _salt PrivateDnsNameOptionsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableResourceNameDnsAAAARecord
+      `Prelude.hashWithSalt` enableResourceNameDnsARecord
+      `Prelude.hashWithSalt` hostnameType
+
+instance Prelude.NFData PrivateDnsNameOptionsRequest where
+  rnf PrivateDnsNameOptionsRequest' {..} =
+    Prelude.rnf enableResourceNameDnsAAAARecord
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecord
+      `Prelude.seq` Prelude.rnf hostnameType
+
+instance Data.ToQuery PrivateDnsNameOptionsRequest where
+  toQuery PrivateDnsNameOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "EnableResourceNameDnsAAAARecord"
+          Data.=: enableResourceNameDnsAAAARecord,
+        "EnableResourceNameDnsARecord"
+          Data.=: enableResourceNameDnsARecord,
+        "HostnameType" Data.=: hostnameType
+      ]
diff --git a/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsResponse.hs b/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrivateDnsNameOptionsResponse.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrivateDnsNameOptionsResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrivateDnsNameOptionsResponse where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.HostnameType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for instance hostnames.
+--
+-- /See:/ 'newPrivateDnsNameOptionsResponse' smart constructor.
+data PrivateDnsNameOptionsResponse = PrivateDnsNameOptionsResponse'
+  { -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS AAAA records.
+    enableResourceNameDnsAAAARecord :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to respond to DNS queries for instance hostnames with
+    -- DNS A records.
+    enableResourceNameDnsARecord :: Prelude.Maybe Prelude.Bool,
+    -- | The type of hostname to assign to an instance.
+    hostnameType :: Prelude.Maybe HostnameType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateDnsNameOptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableResourceNameDnsAAAARecord', 'privateDnsNameOptionsResponse_enableResourceNameDnsAAAARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+--
+-- 'enableResourceNameDnsARecord', 'privateDnsNameOptionsResponse_enableResourceNameDnsARecord' - Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+--
+-- 'hostnameType', 'privateDnsNameOptionsResponse_hostnameType' - The type of hostname to assign to an instance.
+newPrivateDnsNameOptionsResponse ::
+  PrivateDnsNameOptionsResponse
+newPrivateDnsNameOptionsResponse =
+  PrivateDnsNameOptionsResponse'
+    { enableResourceNameDnsAAAARecord =
+        Prelude.Nothing,
+      enableResourceNameDnsARecord =
+        Prelude.Nothing,
+      hostnameType = Prelude.Nothing
+    }
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS AAAA records.
+privateDnsNameOptionsResponse_enableResourceNameDnsAAAARecord :: Lens.Lens' PrivateDnsNameOptionsResponse (Prelude.Maybe Prelude.Bool)
+privateDnsNameOptionsResponse_enableResourceNameDnsAAAARecord = Lens.lens (\PrivateDnsNameOptionsResponse' {enableResourceNameDnsAAAARecord} -> enableResourceNameDnsAAAARecord) (\s@PrivateDnsNameOptionsResponse' {} a -> s {enableResourceNameDnsAAAARecord = a} :: PrivateDnsNameOptionsResponse)
+
+-- | Indicates whether to respond to DNS queries for instance hostnames with
+-- DNS A records.
+privateDnsNameOptionsResponse_enableResourceNameDnsARecord :: Lens.Lens' PrivateDnsNameOptionsResponse (Prelude.Maybe Prelude.Bool)
+privateDnsNameOptionsResponse_enableResourceNameDnsARecord = Lens.lens (\PrivateDnsNameOptionsResponse' {enableResourceNameDnsARecord} -> enableResourceNameDnsARecord) (\s@PrivateDnsNameOptionsResponse' {} a -> s {enableResourceNameDnsARecord = a} :: PrivateDnsNameOptionsResponse)
+
+-- | The type of hostname to assign to an instance.
+privateDnsNameOptionsResponse_hostnameType :: Lens.Lens' PrivateDnsNameOptionsResponse (Prelude.Maybe HostnameType)
+privateDnsNameOptionsResponse_hostnameType = Lens.lens (\PrivateDnsNameOptionsResponse' {hostnameType} -> hostnameType) (\s@PrivateDnsNameOptionsResponse' {} a -> s {hostnameType = a} :: PrivateDnsNameOptionsResponse)
+
+instance Data.FromXML PrivateDnsNameOptionsResponse where
+  parseXML x =
+    PrivateDnsNameOptionsResponse'
+      Prelude.<$> (x Data..@? "enableResourceNameDnsAAAARecord")
+      Prelude.<*> (x Data..@? "enableResourceNameDnsARecord")
+      Prelude.<*> (x Data..@? "hostnameType")
+
+instance
+  Prelude.Hashable
+    PrivateDnsNameOptionsResponse
+  where
+  hashWithSalt _salt PrivateDnsNameOptionsResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableResourceNameDnsAAAARecord
+      `Prelude.hashWithSalt` enableResourceNameDnsARecord
+      `Prelude.hashWithSalt` hostnameType
+
+instance Prelude.NFData PrivateDnsNameOptionsResponse where
+  rnf PrivateDnsNameOptionsResponse' {..} =
+    Prelude.rnf enableResourceNameDnsAAAARecord
+      `Prelude.seq` Prelude.rnf enableResourceNameDnsARecord
+      `Prelude.seq` Prelude.rnf hostnameType
diff --git a/gen/Amazonka/EC2/Types/PrivateIpAddressSpecification.hs b/gen/Amazonka/EC2/Types/PrivateIpAddressSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PrivateIpAddressSpecification.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PrivateIpAddressSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PrivateIpAddressSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a secondary private IPv4 address for a network interface.
+--
+-- /See:/ 'newPrivateIpAddressSpecification' smart constructor.
+data PrivateIpAddressSpecification = PrivateIpAddressSpecification'
+  { -- | Indicates whether the private IPv4 address is the primary private IPv4
+    -- address. Only one IPv4 address can be designated as primary.
+    primary :: Prelude.Maybe Prelude.Bool,
+    -- | The private IPv4 address.
+    privateIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PrivateIpAddressSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'primary', 'privateIpAddressSpecification_primary' - Indicates whether the private IPv4 address is the primary private IPv4
+-- address. Only one IPv4 address can be designated as primary.
+--
+-- 'privateIpAddress', 'privateIpAddressSpecification_privateIpAddress' - The private IPv4 address.
+newPrivateIpAddressSpecification ::
+  PrivateIpAddressSpecification
+newPrivateIpAddressSpecification =
+  PrivateIpAddressSpecification'
+    { primary =
+        Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing
+    }
+
+-- | Indicates whether the private IPv4 address is the primary private IPv4
+-- address. Only one IPv4 address can be designated as primary.
+privateIpAddressSpecification_primary :: Lens.Lens' PrivateIpAddressSpecification (Prelude.Maybe Prelude.Bool)
+privateIpAddressSpecification_primary = Lens.lens (\PrivateIpAddressSpecification' {primary} -> primary) (\s@PrivateIpAddressSpecification' {} a -> s {primary = a} :: PrivateIpAddressSpecification)
+
+-- | The private IPv4 address.
+privateIpAddressSpecification_privateIpAddress :: Lens.Lens' PrivateIpAddressSpecification (Prelude.Maybe Prelude.Text)
+privateIpAddressSpecification_privateIpAddress = Lens.lens (\PrivateIpAddressSpecification' {privateIpAddress} -> privateIpAddress) (\s@PrivateIpAddressSpecification' {} a -> s {privateIpAddress = a} :: PrivateIpAddressSpecification)
+
+instance Data.FromXML PrivateIpAddressSpecification where
+  parseXML x =
+    PrivateIpAddressSpecification'
+      Prelude.<$> (x Data..@? "primary")
+      Prelude.<*> (x Data..@? "privateIpAddress")
+
+instance
+  Prelude.Hashable
+    PrivateIpAddressSpecification
+  where
+  hashWithSalt _salt PrivateIpAddressSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` primary
+      `Prelude.hashWithSalt` privateIpAddress
+
+instance Prelude.NFData PrivateIpAddressSpecification where
+  rnf PrivateIpAddressSpecification' {..} =
+    Prelude.rnf primary
+      `Prelude.seq` Prelude.rnf privateIpAddress
+
+instance Data.ToQuery PrivateIpAddressSpecification where
+  toQuery PrivateIpAddressSpecification' {..} =
+    Prelude.mconcat
+      [ "Primary" Data.=: primary,
+        "PrivateIpAddress" Data.=: privateIpAddress
+      ]
diff --git a/gen/Amazonka/EC2/Types/ProcessorInfo.hs b/gen/Amazonka/EC2/Types/ProcessorInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ProcessorInfo.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ProcessorInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ProcessorInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ArchitectureType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the processor used by the instance type.
+--
+-- /See:/ 'newProcessorInfo' smart constructor.
+data ProcessorInfo = ProcessorInfo'
+  { -- | The architectures supported by the instance type.
+    supportedArchitectures :: Prelude.Maybe [ArchitectureType],
+    -- | The speed of the processor, in GHz.
+    sustainedClockSpeedInGhz :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProcessorInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'supportedArchitectures', 'processorInfo_supportedArchitectures' - The architectures supported by the instance type.
+--
+-- 'sustainedClockSpeedInGhz', 'processorInfo_sustainedClockSpeedInGhz' - The speed of the processor, in GHz.
+newProcessorInfo ::
+  ProcessorInfo
+newProcessorInfo =
+  ProcessorInfo'
+    { supportedArchitectures =
+        Prelude.Nothing,
+      sustainedClockSpeedInGhz = Prelude.Nothing
+    }
+
+-- | The architectures supported by the instance type.
+processorInfo_supportedArchitectures :: Lens.Lens' ProcessorInfo (Prelude.Maybe [ArchitectureType])
+processorInfo_supportedArchitectures = Lens.lens (\ProcessorInfo' {supportedArchitectures} -> supportedArchitectures) (\s@ProcessorInfo' {} a -> s {supportedArchitectures = a} :: ProcessorInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The speed of the processor, in GHz.
+processorInfo_sustainedClockSpeedInGhz :: Lens.Lens' ProcessorInfo (Prelude.Maybe Prelude.Double)
+processorInfo_sustainedClockSpeedInGhz = Lens.lens (\ProcessorInfo' {sustainedClockSpeedInGhz} -> sustainedClockSpeedInGhz) (\s@ProcessorInfo' {} a -> s {sustainedClockSpeedInGhz = a} :: ProcessorInfo)
+
+instance Data.FromXML ProcessorInfo where
+  parseXML x =
+    ProcessorInfo'
+      Prelude.<$> ( x
+                      Data..@? "supportedArchitectures"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "sustainedClockSpeedInGhz")
+
+instance Prelude.Hashable ProcessorInfo where
+  hashWithSalt _salt ProcessorInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` supportedArchitectures
+      `Prelude.hashWithSalt` sustainedClockSpeedInGhz
+
+instance Prelude.NFData ProcessorInfo where
+  rnf ProcessorInfo' {..} =
+    Prelude.rnf supportedArchitectures
+      `Prelude.seq` Prelude.rnf sustainedClockSpeedInGhz
diff --git a/gen/Amazonka/EC2/Types/ProductCode.hs b/gen/Amazonka/EC2/Types/ProductCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ProductCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ProductCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ProductCode where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ProductCodeValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a product code.
+--
+-- /See:/ 'newProductCode' smart constructor.
+data ProductCode = ProductCode'
+  { -- | The product code.
+    productCodeId :: Prelude.Maybe Prelude.Text,
+    -- | The type of product code.
+    productCodeType :: Prelude.Maybe ProductCodeValues
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProductCode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'productCodeId', 'productCode_productCodeId' - The product code.
+--
+-- 'productCodeType', 'productCode_productCodeType' - The type of product code.
+newProductCode ::
+  ProductCode
+newProductCode =
+  ProductCode'
+    { productCodeId = Prelude.Nothing,
+      productCodeType = Prelude.Nothing
+    }
+
+-- | The product code.
+productCode_productCodeId :: Lens.Lens' ProductCode (Prelude.Maybe Prelude.Text)
+productCode_productCodeId = Lens.lens (\ProductCode' {productCodeId} -> productCodeId) (\s@ProductCode' {} a -> s {productCodeId = a} :: ProductCode)
+
+-- | The type of product code.
+productCode_productCodeType :: Lens.Lens' ProductCode (Prelude.Maybe ProductCodeValues)
+productCode_productCodeType = Lens.lens (\ProductCode' {productCodeType} -> productCodeType) (\s@ProductCode' {} a -> s {productCodeType = a} :: ProductCode)
+
+instance Data.FromXML ProductCode where
+  parseXML x =
+    ProductCode'
+      Prelude.<$> (x Data..@? "productCode")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable ProductCode where
+  hashWithSalt _salt ProductCode' {..} =
+    _salt
+      `Prelude.hashWithSalt` productCodeId
+      `Prelude.hashWithSalt` productCodeType
+
+instance Prelude.NFData ProductCode where
+  rnf ProductCode' {..} =
+    Prelude.rnf productCodeId
+      `Prelude.seq` Prelude.rnf productCodeType
diff --git a/gen/Amazonka/EC2/Types/ProductCodeValues.hs b/gen/Amazonka/EC2/Types/ProductCodeValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ProductCodeValues.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ProductCodeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ProductCodeValues
+  ( ProductCodeValues
+      ( ..,
+        ProductCodeValues_Devpay,
+        ProductCodeValues_Marketplace
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ProductCodeValues = ProductCodeValues'
+  { fromProductCodeValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ProductCodeValues_Devpay :: ProductCodeValues
+pattern ProductCodeValues_Devpay = ProductCodeValues' "devpay"
+
+pattern ProductCodeValues_Marketplace :: ProductCodeValues
+pattern ProductCodeValues_Marketplace = ProductCodeValues' "marketplace"
+
+{-# COMPLETE
+  ProductCodeValues_Devpay,
+  ProductCodeValues_Marketplace,
+  ProductCodeValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/PropagatingVgw.hs b/gen/Amazonka/EC2/Types/PropagatingVgw.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PropagatingVgw.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PropagatingVgw
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PropagatingVgw where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a virtual private gateway propagating route.
+--
+-- /See:/ 'newPropagatingVgw' smart constructor.
+data PropagatingVgw = PropagatingVgw'
+  { -- | The ID of the virtual private gateway.
+    gatewayId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PropagatingVgw' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gatewayId', 'propagatingVgw_gatewayId' - The ID of the virtual private gateway.
+newPropagatingVgw ::
+  PropagatingVgw
+newPropagatingVgw =
+  PropagatingVgw' {gatewayId = Prelude.Nothing}
+
+-- | The ID of the virtual private gateway.
+propagatingVgw_gatewayId :: Lens.Lens' PropagatingVgw (Prelude.Maybe Prelude.Text)
+propagatingVgw_gatewayId = Lens.lens (\PropagatingVgw' {gatewayId} -> gatewayId) (\s@PropagatingVgw' {} a -> s {gatewayId = a} :: PropagatingVgw)
+
+instance Data.FromXML PropagatingVgw where
+  parseXML x =
+    PropagatingVgw'
+      Prelude.<$> (x Data..@? "gatewayId")
+
+instance Prelude.Hashable PropagatingVgw where
+  hashWithSalt _salt PropagatingVgw' {..} =
+    _salt `Prelude.hashWithSalt` gatewayId
+
+instance Prelude.NFData PropagatingVgw where
+  rnf PropagatingVgw' {..} = Prelude.rnf gatewayId
diff --git a/gen/Amazonka/EC2/Types/Protocol.hs b/gen/Amazonka/EC2/Types/Protocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Protocol.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Protocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Protocol
+  ( Protocol
+      ( ..,
+        Protocol_Tcp,
+        Protocol_Udp
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype Protocol = Protocol'
+  { fromProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Protocol_Tcp :: Protocol
+pattern Protocol_Tcp = Protocol' "tcp"
+
+pattern Protocol_Udp :: Protocol
+pattern Protocol_Udp = Protocol' "udp"
+
+{-# COMPLETE
+  Protocol_Tcp,
+  Protocol_Udp,
+  Protocol'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ProtocolValue.hs b/gen/Amazonka/EC2/Types/ProtocolValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ProtocolValue.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ProtocolValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ProtocolValue
+  ( ProtocolValue
+      ( ..,
+        ProtocolValue_Gre
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ProtocolValue = ProtocolValue'
+  { fromProtocolValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ProtocolValue_Gre :: ProtocolValue
+pattern ProtocolValue_Gre = ProtocolValue' "gre"
+
+{-# COMPLETE
+  ProtocolValue_Gre,
+  ProtocolValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ProvisionedBandwidth.hs b/gen/Amazonka/EC2/Types/ProvisionedBandwidth.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ProvisionedBandwidth.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ProvisionedBandwidth
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ProvisionedBandwidth where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+--
+-- /See:/ 'newProvisionedBandwidth' smart constructor.
+data ProvisionedBandwidth = ProvisionedBandwidth'
+  { -- | Reserved. If you need to sustain traffic greater than the
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+    -- contact us through the
+    -- <https://console.aws.amazon.com/support/home? Support Center>.
+    provisionTime :: Prelude.Maybe Data.ISO8601,
+    -- | Reserved. If you need to sustain traffic greater than the
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+    -- contact us through the
+    -- <https://console.aws.amazon.com/support/home? Support Center>.
+    provisioned :: Prelude.Maybe Prelude.Text,
+    -- | Reserved. If you need to sustain traffic greater than the
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+    -- contact us through the
+    -- <https://console.aws.amazon.com/support/home? Support Center>.
+    requestTime :: Prelude.Maybe Data.ISO8601,
+    -- | Reserved. If you need to sustain traffic greater than the
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+    -- contact us through the
+    -- <https://console.aws.amazon.com/support/home? Support Center>.
+    requested :: Prelude.Maybe Prelude.Text,
+    -- | Reserved. If you need to sustain traffic greater than the
+    -- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+    -- contact us through the
+    -- <https://console.aws.amazon.com/support/home? Support Center>.
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ProvisionedBandwidth' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'provisionTime', 'provisionedBandwidth_provisionTime' - Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+--
+-- 'provisioned', 'provisionedBandwidth_provisioned' - Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+--
+-- 'requestTime', 'provisionedBandwidth_requestTime' - Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+--
+-- 'requested', 'provisionedBandwidth_requested' - Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+--
+-- 'status', 'provisionedBandwidth_status' - Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+newProvisionedBandwidth ::
+  ProvisionedBandwidth
+newProvisionedBandwidth =
+  ProvisionedBandwidth'
+    { provisionTime =
+        Prelude.Nothing,
+      provisioned = Prelude.Nothing,
+      requestTime = Prelude.Nothing,
+      requested = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+provisionedBandwidth_provisionTime :: Lens.Lens' ProvisionedBandwidth (Prelude.Maybe Prelude.UTCTime)
+provisionedBandwidth_provisionTime = Lens.lens (\ProvisionedBandwidth' {provisionTime} -> provisionTime) (\s@ProvisionedBandwidth' {} a -> s {provisionTime = a} :: ProvisionedBandwidth) Prelude.. Lens.mapping Data._Time
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+provisionedBandwidth_provisioned :: Lens.Lens' ProvisionedBandwidth (Prelude.Maybe Prelude.Text)
+provisionedBandwidth_provisioned = Lens.lens (\ProvisionedBandwidth' {provisioned} -> provisioned) (\s@ProvisionedBandwidth' {} a -> s {provisioned = a} :: ProvisionedBandwidth)
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+provisionedBandwidth_requestTime :: Lens.Lens' ProvisionedBandwidth (Prelude.Maybe Prelude.UTCTime)
+provisionedBandwidth_requestTime = Lens.lens (\ProvisionedBandwidth' {requestTime} -> requestTime) (\s@ProvisionedBandwidth' {} a -> s {requestTime = a} :: ProvisionedBandwidth) Prelude.. Lens.mapping Data._Time
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+provisionedBandwidth_requested :: Lens.Lens' ProvisionedBandwidth (Prelude.Maybe Prelude.Text)
+provisionedBandwidth_requested = Lens.lens (\ProvisionedBandwidth' {requested} -> requested) (\s@ProvisionedBandwidth' {} a -> s {requested = a} :: ProvisionedBandwidth)
+
+-- | Reserved. If you need to sustain traffic greater than the
+-- <https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html documented limits>,
+-- contact us through the
+-- <https://console.aws.amazon.com/support/home? Support Center>.
+provisionedBandwidth_status :: Lens.Lens' ProvisionedBandwidth (Prelude.Maybe Prelude.Text)
+provisionedBandwidth_status = Lens.lens (\ProvisionedBandwidth' {status} -> status) (\s@ProvisionedBandwidth' {} a -> s {status = a} :: ProvisionedBandwidth)
+
+instance Data.FromXML ProvisionedBandwidth where
+  parseXML x =
+    ProvisionedBandwidth'
+      Prelude.<$> (x Data..@? "provisionTime")
+      Prelude.<*> (x Data..@? "provisioned")
+      Prelude.<*> (x Data..@? "requestTime")
+      Prelude.<*> (x Data..@? "requested")
+      Prelude.<*> (x Data..@? "status")
+
+instance Prelude.Hashable ProvisionedBandwidth where
+  hashWithSalt _salt ProvisionedBandwidth' {..} =
+    _salt
+      `Prelude.hashWithSalt` provisionTime
+      `Prelude.hashWithSalt` provisioned
+      `Prelude.hashWithSalt` requestTime
+      `Prelude.hashWithSalt` requested
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData ProvisionedBandwidth where
+  rnf ProvisionedBandwidth' {..} =
+    Prelude.rnf provisionTime
+      `Prelude.seq` Prelude.rnf provisioned
+      `Prelude.seq` Prelude.rnf requestTime
+      `Prelude.seq` Prelude.rnf requested
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/PtrUpdateStatus.hs b/gen/Amazonka/EC2/Types/PtrUpdateStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PtrUpdateStatus.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PtrUpdateStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PtrUpdateStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The status of an updated pointer (PTR) record for an Elastic IP address.
+--
+-- /See:/ 'newPtrUpdateStatus' smart constructor.
+data PtrUpdateStatus = PtrUpdateStatus'
+  { -- | The reason for the PTR record update.
+    reason :: Prelude.Maybe Prelude.Text,
+    -- | The status of the PTR record update.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The value for the PTR record update.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PtrUpdateStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reason', 'ptrUpdateStatus_reason' - The reason for the PTR record update.
+--
+-- 'status', 'ptrUpdateStatus_status' - The status of the PTR record update.
+--
+-- 'value', 'ptrUpdateStatus_value' - The value for the PTR record update.
+newPtrUpdateStatus ::
+  PtrUpdateStatus
+newPtrUpdateStatus =
+  PtrUpdateStatus'
+    { reason = Prelude.Nothing,
+      status = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The reason for the PTR record update.
+ptrUpdateStatus_reason :: Lens.Lens' PtrUpdateStatus (Prelude.Maybe Prelude.Text)
+ptrUpdateStatus_reason = Lens.lens (\PtrUpdateStatus' {reason} -> reason) (\s@PtrUpdateStatus' {} a -> s {reason = a} :: PtrUpdateStatus)
+
+-- | The status of the PTR record update.
+ptrUpdateStatus_status :: Lens.Lens' PtrUpdateStatus (Prelude.Maybe Prelude.Text)
+ptrUpdateStatus_status = Lens.lens (\PtrUpdateStatus' {status} -> status) (\s@PtrUpdateStatus' {} a -> s {status = a} :: PtrUpdateStatus)
+
+-- | The value for the PTR record update.
+ptrUpdateStatus_value :: Lens.Lens' PtrUpdateStatus (Prelude.Maybe Prelude.Text)
+ptrUpdateStatus_value = Lens.lens (\PtrUpdateStatus' {value} -> value) (\s@PtrUpdateStatus' {} a -> s {value = a} :: PtrUpdateStatus)
+
+instance Data.FromXML PtrUpdateStatus where
+  parseXML x =
+    PtrUpdateStatus'
+      Prelude.<$> (x Data..@? "reason")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "value")
+
+instance Prelude.Hashable PtrUpdateStatus where
+  hashWithSalt _salt PtrUpdateStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData PtrUpdateStatus where
+  rnf PtrUpdateStatus' {..} =
+    Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/PublicIpv4Pool.hs b/gen/Amazonka/EC2/Types/PublicIpv4Pool.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PublicIpv4Pool.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PublicIpv4Pool
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PublicIpv4Pool where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PublicIpv4PoolRange
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv4 address pool.
+--
+-- /See:/ 'newPublicIpv4Pool' smart constructor.
+data PublicIpv4Pool = PublicIpv4Pool'
+  { -- | A description of the address pool.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the location from which the address pool is advertised. A
+    -- network border group is a unique set of Availability Zones or Local
+    -- Zones from where Amazon Web Services advertises public IP addresses.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text,
+    -- | The address ranges.
+    poolAddressRanges :: Prelude.Maybe [PublicIpv4PoolRange],
+    -- | The ID of the address pool.
+    poolId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags for the address pool.
+    tags :: Prelude.Maybe [Tag],
+    -- | The total number of addresses.
+    totalAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The total number of available addresses.
+    totalAvailableAddressCount :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PublicIpv4Pool' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'publicIpv4Pool_description' - A description of the address pool.
+--
+-- 'networkBorderGroup', 'publicIpv4Pool_networkBorderGroup' - The name of the location from which the address pool is advertised. A
+-- network border group is a unique set of Availability Zones or Local
+-- Zones from where Amazon Web Services advertises public IP addresses.
+--
+-- 'poolAddressRanges', 'publicIpv4Pool_poolAddressRanges' - The address ranges.
+--
+-- 'poolId', 'publicIpv4Pool_poolId' - The ID of the address pool.
+--
+-- 'tags', 'publicIpv4Pool_tags' - Any tags for the address pool.
+--
+-- 'totalAddressCount', 'publicIpv4Pool_totalAddressCount' - The total number of addresses.
+--
+-- 'totalAvailableAddressCount', 'publicIpv4Pool_totalAvailableAddressCount' - The total number of available addresses.
+newPublicIpv4Pool ::
+  PublicIpv4Pool
+newPublicIpv4Pool =
+  PublicIpv4Pool'
+    { description = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing,
+      poolAddressRanges = Prelude.Nothing,
+      poolId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      totalAddressCount = Prelude.Nothing,
+      totalAvailableAddressCount = Prelude.Nothing
+    }
+
+-- | A description of the address pool.
+publicIpv4Pool_description :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe Prelude.Text)
+publicIpv4Pool_description = Lens.lens (\PublicIpv4Pool' {description} -> description) (\s@PublicIpv4Pool' {} a -> s {description = a} :: PublicIpv4Pool)
+
+-- | The name of the location from which the address pool is advertised. A
+-- network border group is a unique set of Availability Zones or Local
+-- Zones from where Amazon Web Services advertises public IP addresses.
+publicIpv4Pool_networkBorderGroup :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe Prelude.Text)
+publicIpv4Pool_networkBorderGroup = Lens.lens (\PublicIpv4Pool' {networkBorderGroup} -> networkBorderGroup) (\s@PublicIpv4Pool' {} a -> s {networkBorderGroup = a} :: PublicIpv4Pool)
+
+-- | The address ranges.
+publicIpv4Pool_poolAddressRanges :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe [PublicIpv4PoolRange])
+publicIpv4Pool_poolAddressRanges = Lens.lens (\PublicIpv4Pool' {poolAddressRanges} -> poolAddressRanges) (\s@PublicIpv4Pool' {} a -> s {poolAddressRanges = a} :: PublicIpv4Pool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the address pool.
+publicIpv4Pool_poolId :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe Prelude.Text)
+publicIpv4Pool_poolId = Lens.lens (\PublicIpv4Pool' {poolId} -> poolId) (\s@PublicIpv4Pool' {} a -> s {poolId = a} :: PublicIpv4Pool)
+
+-- | Any tags for the address pool.
+publicIpv4Pool_tags :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe [Tag])
+publicIpv4Pool_tags = Lens.lens (\PublicIpv4Pool' {tags} -> tags) (\s@PublicIpv4Pool' {} a -> s {tags = a} :: PublicIpv4Pool) Prelude.. Lens.mapping Lens.coerced
+
+-- | The total number of addresses.
+publicIpv4Pool_totalAddressCount :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe Prelude.Int)
+publicIpv4Pool_totalAddressCount = Lens.lens (\PublicIpv4Pool' {totalAddressCount} -> totalAddressCount) (\s@PublicIpv4Pool' {} a -> s {totalAddressCount = a} :: PublicIpv4Pool)
+
+-- | The total number of available addresses.
+publicIpv4Pool_totalAvailableAddressCount :: Lens.Lens' PublicIpv4Pool (Prelude.Maybe Prelude.Int)
+publicIpv4Pool_totalAvailableAddressCount = Lens.lens (\PublicIpv4Pool' {totalAvailableAddressCount} -> totalAvailableAddressCount) (\s@PublicIpv4Pool' {} a -> s {totalAvailableAddressCount = a} :: PublicIpv4Pool)
+
+instance Data.FromXML PublicIpv4Pool where
+  parseXML x =
+    PublicIpv4Pool'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "networkBorderGroup")
+      Prelude.<*> ( x
+                      Data..@? "poolAddressRangeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "poolId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "totalAddressCount")
+      Prelude.<*> (x Data..@? "totalAvailableAddressCount")
+
+instance Prelude.Hashable PublicIpv4Pool where
+  hashWithSalt _salt PublicIpv4Pool' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` networkBorderGroup
+      `Prelude.hashWithSalt` poolAddressRanges
+      `Prelude.hashWithSalt` poolId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` totalAddressCount
+      `Prelude.hashWithSalt` totalAvailableAddressCount
+
+instance Prelude.NFData PublicIpv4Pool where
+  rnf PublicIpv4Pool' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf networkBorderGroup
+      `Prelude.seq` Prelude.rnf poolAddressRanges
+      `Prelude.seq` Prelude.rnf poolId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf totalAddressCount
+      `Prelude.seq` Prelude.rnf totalAvailableAddressCount
diff --git a/gen/Amazonka/EC2/Types/PublicIpv4PoolRange.hs b/gen/Amazonka/EC2/Types/PublicIpv4PoolRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PublicIpv4PoolRange.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PublicIpv4PoolRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PublicIpv4PoolRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an address range of an IPv4 address pool.
+--
+-- /See:/ 'newPublicIpv4PoolRange' smart constructor.
+data PublicIpv4PoolRange = PublicIpv4PoolRange'
+  { -- | The number of addresses in the range.
+    addressCount :: Prelude.Maybe Prelude.Int,
+    -- | The number of available addresses in the range.
+    availableAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The first IP address in the range.
+    firstAddress :: Prelude.Maybe Prelude.Text,
+    -- | The last IP address in the range.
+    lastAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PublicIpv4PoolRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressCount', 'publicIpv4PoolRange_addressCount' - The number of addresses in the range.
+--
+-- 'availableAddressCount', 'publicIpv4PoolRange_availableAddressCount' - The number of available addresses in the range.
+--
+-- 'firstAddress', 'publicIpv4PoolRange_firstAddress' - The first IP address in the range.
+--
+-- 'lastAddress', 'publicIpv4PoolRange_lastAddress' - The last IP address in the range.
+newPublicIpv4PoolRange ::
+  PublicIpv4PoolRange
+newPublicIpv4PoolRange =
+  PublicIpv4PoolRange'
+    { addressCount =
+        Prelude.Nothing,
+      availableAddressCount = Prelude.Nothing,
+      firstAddress = Prelude.Nothing,
+      lastAddress = Prelude.Nothing
+    }
+
+-- | The number of addresses in the range.
+publicIpv4PoolRange_addressCount :: Lens.Lens' PublicIpv4PoolRange (Prelude.Maybe Prelude.Int)
+publicIpv4PoolRange_addressCount = Lens.lens (\PublicIpv4PoolRange' {addressCount} -> addressCount) (\s@PublicIpv4PoolRange' {} a -> s {addressCount = a} :: PublicIpv4PoolRange)
+
+-- | The number of available addresses in the range.
+publicIpv4PoolRange_availableAddressCount :: Lens.Lens' PublicIpv4PoolRange (Prelude.Maybe Prelude.Int)
+publicIpv4PoolRange_availableAddressCount = Lens.lens (\PublicIpv4PoolRange' {availableAddressCount} -> availableAddressCount) (\s@PublicIpv4PoolRange' {} a -> s {availableAddressCount = a} :: PublicIpv4PoolRange)
+
+-- | The first IP address in the range.
+publicIpv4PoolRange_firstAddress :: Lens.Lens' PublicIpv4PoolRange (Prelude.Maybe Prelude.Text)
+publicIpv4PoolRange_firstAddress = Lens.lens (\PublicIpv4PoolRange' {firstAddress} -> firstAddress) (\s@PublicIpv4PoolRange' {} a -> s {firstAddress = a} :: PublicIpv4PoolRange)
+
+-- | The last IP address in the range.
+publicIpv4PoolRange_lastAddress :: Lens.Lens' PublicIpv4PoolRange (Prelude.Maybe Prelude.Text)
+publicIpv4PoolRange_lastAddress = Lens.lens (\PublicIpv4PoolRange' {lastAddress} -> lastAddress) (\s@PublicIpv4PoolRange' {} a -> s {lastAddress = a} :: PublicIpv4PoolRange)
+
+instance Data.FromXML PublicIpv4PoolRange where
+  parseXML x =
+    PublicIpv4PoolRange'
+      Prelude.<$> (x Data..@? "addressCount")
+      Prelude.<*> (x Data..@? "availableAddressCount")
+      Prelude.<*> (x Data..@? "firstAddress")
+      Prelude.<*> (x Data..@? "lastAddress")
+
+instance Prelude.Hashable PublicIpv4PoolRange where
+  hashWithSalt _salt PublicIpv4PoolRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressCount
+      `Prelude.hashWithSalt` availableAddressCount
+      `Prelude.hashWithSalt` firstAddress
+      `Prelude.hashWithSalt` lastAddress
+
+instance Prelude.NFData PublicIpv4PoolRange where
+  rnf PublicIpv4PoolRange' {..} =
+    Prelude.rnf addressCount
+      `Prelude.seq` Prelude.rnf availableAddressCount
+      `Prelude.seq` Prelude.rnf firstAddress
+      `Prelude.seq` Prelude.rnf lastAddress
diff --git a/gen/Amazonka/EC2/Types/Purchase.hs b/gen/Amazonka/EC2/Types/Purchase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Purchase.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Purchase
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Purchase where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import Amazonka.EC2.Types.PaymentOption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the result of the purchase.
+--
+-- /See:/ 'newPurchase' smart constructor.
+data Purchase = Purchase'
+  { -- | The currency in which the @UpfrontPrice@ and @HourlyPrice@ amounts are
+    -- specified. At this time, the only supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The duration of the reservation\'s term in seconds.
+    duration :: Prelude.Maybe Prelude.Int,
+    -- | The IDs of the Dedicated Hosts associated with the reservation.
+    hostIdSet :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the reservation.
+    hostReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The hourly price of the reservation per hour.
+    hourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The instance family on the Dedicated Host that the reservation can be
+    -- associated with.
+    instanceFamily :: Prelude.Maybe Prelude.Text,
+    -- | The payment option for the reservation.
+    paymentOption :: Prelude.Maybe PaymentOption,
+    -- | The upfront price of the reservation.
+    upfrontPrice :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Purchase' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currencyCode', 'purchase_currencyCode' - The currency in which the @UpfrontPrice@ and @HourlyPrice@ amounts are
+-- specified. At this time, the only supported currency is @USD@.
+--
+-- 'duration', 'purchase_duration' - The duration of the reservation\'s term in seconds.
+--
+-- 'hostIdSet', 'purchase_hostIdSet' - The IDs of the Dedicated Hosts associated with the reservation.
+--
+-- 'hostReservationId', 'purchase_hostReservationId' - The ID of the reservation.
+--
+-- 'hourlyPrice', 'purchase_hourlyPrice' - The hourly price of the reservation per hour.
+--
+-- 'instanceFamily', 'purchase_instanceFamily' - The instance family on the Dedicated Host that the reservation can be
+-- associated with.
+--
+-- 'paymentOption', 'purchase_paymentOption' - The payment option for the reservation.
+--
+-- 'upfrontPrice', 'purchase_upfrontPrice' - The upfront price of the reservation.
+newPurchase ::
+  Purchase
+newPurchase =
+  Purchase'
+    { currencyCode = Prelude.Nothing,
+      duration = Prelude.Nothing,
+      hostIdSet = Prelude.Nothing,
+      hostReservationId = Prelude.Nothing,
+      hourlyPrice = Prelude.Nothing,
+      instanceFamily = Prelude.Nothing,
+      paymentOption = Prelude.Nothing,
+      upfrontPrice = Prelude.Nothing
+    }
+
+-- | The currency in which the @UpfrontPrice@ and @HourlyPrice@ amounts are
+-- specified. At this time, the only supported currency is @USD@.
+purchase_currencyCode :: Lens.Lens' Purchase (Prelude.Maybe CurrencyCodeValues)
+purchase_currencyCode = Lens.lens (\Purchase' {currencyCode} -> currencyCode) (\s@Purchase' {} a -> s {currencyCode = a} :: Purchase)
+
+-- | The duration of the reservation\'s term in seconds.
+purchase_duration :: Lens.Lens' Purchase (Prelude.Maybe Prelude.Int)
+purchase_duration = Lens.lens (\Purchase' {duration} -> duration) (\s@Purchase' {} a -> s {duration = a} :: Purchase)
+
+-- | The IDs of the Dedicated Hosts associated with the reservation.
+purchase_hostIdSet :: Lens.Lens' Purchase (Prelude.Maybe [Prelude.Text])
+purchase_hostIdSet = Lens.lens (\Purchase' {hostIdSet} -> hostIdSet) (\s@Purchase' {} a -> s {hostIdSet = a} :: Purchase) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the reservation.
+purchase_hostReservationId :: Lens.Lens' Purchase (Prelude.Maybe Prelude.Text)
+purchase_hostReservationId = Lens.lens (\Purchase' {hostReservationId} -> hostReservationId) (\s@Purchase' {} a -> s {hostReservationId = a} :: Purchase)
+
+-- | The hourly price of the reservation per hour.
+purchase_hourlyPrice :: Lens.Lens' Purchase (Prelude.Maybe Prelude.Text)
+purchase_hourlyPrice = Lens.lens (\Purchase' {hourlyPrice} -> hourlyPrice) (\s@Purchase' {} a -> s {hourlyPrice = a} :: Purchase)
+
+-- | The instance family on the Dedicated Host that the reservation can be
+-- associated with.
+purchase_instanceFamily :: Lens.Lens' Purchase (Prelude.Maybe Prelude.Text)
+purchase_instanceFamily = Lens.lens (\Purchase' {instanceFamily} -> instanceFamily) (\s@Purchase' {} a -> s {instanceFamily = a} :: Purchase)
+
+-- | The payment option for the reservation.
+purchase_paymentOption :: Lens.Lens' Purchase (Prelude.Maybe PaymentOption)
+purchase_paymentOption = Lens.lens (\Purchase' {paymentOption} -> paymentOption) (\s@Purchase' {} a -> s {paymentOption = a} :: Purchase)
+
+-- | The upfront price of the reservation.
+purchase_upfrontPrice :: Lens.Lens' Purchase (Prelude.Maybe Prelude.Text)
+purchase_upfrontPrice = Lens.lens (\Purchase' {upfrontPrice} -> upfrontPrice) (\s@Purchase' {} a -> s {upfrontPrice = a} :: Purchase)
+
+instance Data.FromXML Purchase where
+  parseXML x =
+    Purchase'
+      Prelude.<$> (x Data..@? "currencyCode")
+      Prelude.<*> (x Data..@? "duration")
+      Prelude.<*> ( x
+                      Data..@? "hostIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "hostReservationId")
+      Prelude.<*> (x Data..@? "hourlyPrice")
+      Prelude.<*> (x Data..@? "instanceFamily")
+      Prelude.<*> (x Data..@? "paymentOption")
+      Prelude.<*> (x Data..@? "upfrontPrice")
+
+instance Prelude.Hashable Purchase where
+  hashWithSalt _salt Purchase' {..} =
+    _salt
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` hostIdSet
+      `Prelude.hashWithSalt` hostReservationId
+      `Prelude.hashWithSalt` hourlyPrice
+      `Prelude.hashWithSalt` instanceFamily
+      `Prelude.hashWithSalt` paymentOption
+      `Prelude.hashWithSalt` upfrontPrice
+
+instance Prelude.NFData Purchase where
+  rnf Purchase' {..} =
+    Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf hostIdSet
+      `Prelude.seq` Prelude.rnf hostReservationId
+      `Prelude.seq` Prelude.rnf hourlyPrice
+      `Prelude.seq` Prelude.rnf instanceFamily
+      `Prelude.seq` Prelude.rnf paymentOption
+      `Prelude.seq` Prelude.rnf upfrontPrice
diff --git a/gen/Amazonka/EC2/Types/PurchaseRequest.hs b/gen/Amazonka/EC2/Types/PurchaseRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/PurchaseRequest.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.PurchaseRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.PurchaseRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a request to purchase Scheduled Instances.
+--
+-- /See:/ 'newPurchaseRequest' smart constructor.
+data PurchaseRequest = PurchaseRequest'
+  { -- | The number of instances.
+    instanceCount :: Prelude.Int,
+    -- | The purchase token.
+    purchaseToken :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PurchaseRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceCount', 'purchaseRequest_instanceCount' - The number of instances.
+--
+-- 'purchaseToken', 'purchaseRequest_purchaseToken' - The purchase token.
+newPurchaseRequest ::
+  -- | 'instanceCount'
+  Prelude.Int ->
+  -- | 'purchaseToken'
+  Prelude.Text ->
+  PurchaseRequest
+newPurchaseRequest pInstanceCount_ pPurchaseToken_ =
+  PurchaseRequest'
+    { instanceCount = pInstanceCount_,
+      purchaseToken = pPurchaseToken_
+    }
+
+-- | The number of instances.
+purchaseRequest_instanceCount :: Lens.Lens' PurchaseRequest Prelude.Int
+purchaseRequest_instanceCount = Lens.lens (\PurchaseRequest' {instanceCount} -> instanceCount) (\s@PurchaseRequest' {} a -> s {instanceCount = a} :: PurchaseRequest)
+
+-- | The purchase token.
+purchaseRequest_purchaseToken :: Lens.Lens' PurchaseRequest Prelude.Text
+purchaseRequest_purchaseToken = Lens.lens (\PurchaseRequest' {purchaseToken} -> purchaseToken) (\s@PurchaseRequest' {} a -> s {purchaseToken = a} :: PurchaseRequest)
+
+instance Prelude.Hashable PurchaseRequest where
+  hashWithSalt _salt PurchaseRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` purchaseToken
+
+instance Prelude.NFData PurchaseRequest where
+  rnf PurchaseRequest' {..} =
+    Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf purchaseToken
+
+instance Data.ToQuery PurchaseRequest where
+  toQuery PurchaseRequest' {..} =
+    Prelude.mconcat
+      [ "InstanceCount" Data.=: instanceCount,
+        "PurchaseToken" Data.=: purchaseToken
+      ]
diff --git a/gen/Amazonka/EC2/Types/RIProductDescription.hs b/gen/Amazonka/EC2/Types/RIProductDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RIProductDescription.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RIProductDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RIProductDescription
+  ( RIProductDescription
+      ( ..,
+        RIProductDescription_Linux_UNIX,
+        RIProductDescription_Linux_UNIX__Amazon_VPC_,
+        RIProductDescription_Windows,
+        RIProductDescription_Windows__Amazon_VPC_
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RIProductDescription = RIProductDescription'
+  { fromRIProductDescription ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RIProductDescription_Linux_UNIX :: RIProductDescription
+pattern RIProductDescription_Linux_UNIX = RIProductDescription' "Linux/UNIX"
+
+pattern RIProductDescription_Linux_UNIX__Amazon_VPC_ :: RIProductDescription
+pattern RIProductDescription_Linux_UNIX__Amazon_VPC_ = RIProductDescription' "Linux/UNIX (Amazon VPC)"
+
+pattern RIProductDescription_Windows :: RIProductDescription
+pattern RIProductDescription_Windows = RIProductDescription' "Windows"
+
+pattern RIProductDescription_Windows__Amazon_VPC_ :: RIProductDescription
+pattern RIProductDescription_Windows__Amazon_VPC_ = RIProductDescription' "Windows (Amazon VPC)"
+
+{-# COMPLETE
+  RIProductDescription_Linux_UNIX,
+  RIProductDescription_Linux_UNIX__Amazon_VPC_,
+  RIProductDescription_Windows,
+  RIProductDescription_Windows__Amazon_VPC_,
+  RIProductDescription'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/RecurringCharge.hs b/gen/Amazonka/EC2/Types/RecurringCharge.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RecurringCharge.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RecurringCharge
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RecurringCharge where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.RecurringChargeFrequency
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a recurring charge.
+--
+-- /See:/ 'newRecurringCharge' smart constructor.
+data RecurringCharge = RecurringCharge'
+  { -- | The amount of the recurring charge.
+    amount :: Prelude.Maybe Prelude.Double,
+    -- | The frequency of the recurring charge.
+    frequency :: Prelude.Maybe RecurringChargeFrequency
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RecurringCharge' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amount', 'recurringCharge_amount' - The amount of the recurring charge.
+--
+-- 'frequency', 'recurringCharge_frequency' - The frequency of the recurring charge.
+newRecurringCharge ::
+  RecurringCharge
+newRecurringCharge =
+  RecurringCharge'
+    { amount = Prelude.Nothing,
+      frequency = Prelude.Nothing
+    }
+
+-- | The amount of the recurring charge.
+recurringCharge_amount :: Lens.Lens' RecurringCharge (Prelude.Maybe Prelude.Double)
+recurringCharge_amount = Lens.lens (\RecurringCharge' {amount} -> amount) (\s@RecurringCharge' {} a -> s {amount = a} :: RecurringCharge)
+
+-- | The frequency of the recurring charge.
+recurringCharge_frequency :: Lens.Lens' RecurringCharge (Prelude.Maybe RecurringChargeFrequency)
+recurringCharge_frequency = Lens.lens (\RecurringCharge' {frequency} -> frequency) (\s@RecurringCharge' {} a -> s {frequency = a} :: RecurringCharge)
+
+instance Data.FromXML RecurringCharge where
+  parseXML x =
+    RecurringCharge'
+      Prelude.<$> (x Data..@? "amount")
+      Prelude.<*> (x Data..@? "frequency")
+
+instance Prelude.Hashable RecurringCharge where
+  hashWithSalt _salt RecurringCharge' {..} =
+    _salt
+      `Prelude.hashWithSalt` amount
+      `Prelude.hashWithSalt` frequency
+
+instance Prelude.NFData RecurringCharge where
+  rnf RecurringCharge' {..} =
+    Prelude.rnf amount
+      `Prelude.seq` Prelude.rnf frequency
diff --git a/gen/Amazonka/EC2/Types/RecurringChargeFrequency.hs b/gen/Amazonka/EC2/Types/RecurringChargeFrequency.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RecurringChargeFrequency.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RecurringChargeFrequency
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RecurringChargeFrequency
+  ( RecurringChargeFrequency
+      ( ..,
+        RecurringChargeFrequency_Hourly
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RecurringChargeFrequency = RecurringChargeFrequency'
+  { fromRecurringChargeFrequency ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RecurringChargeFrequency_Hourly :: RecurringChargeFrequency
+pattern RecurringChargeFrequency_Hourly = RecurringChargeFrequency' "Hourly"
+
+{-# COMPLETE
+  RecurringChargeFrequency_Hourly,
+  RecurringChargeFrequency'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ReferencedSecurityGroup.hs b/gen/Amazonka/EC2/Types/ReferencedSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReferencedSecurityGroup.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReferencedSecurityGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReferencedSecurityGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the security group that is referenced in the security group
+-- rule.
+--
+-- /See:/ 'newReferencedSecurityGroup' smart constructor.
+data ReferencedSecurityGroup = ReferencedSecurityGroup'
+  { -- | The ID of the security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The status of a VPC peering connection, if applicable.
+    peeringStatus :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID.
+    userId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReferencedSecurityGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'referencedSecurityGroup_groupId' - The ID of the security group.
+--
+-- 'peeringStatus', 'referencedSecurityGroup_peeringStatus' - The status of a VPC peering connection, if applicable.
+--
+-- 'userId', 'referencedSecurityGroup_userId' - The Amazon Web Services account ID.
+--
+-- 'vpcId', 'referencedSecurityGroup_vpcId' - The ID of the VPC.
+--
+-- 'vpcPeeringConnectionId', 'referencedSecurityGroup_vpcPeeringConnectionId' - The ID of the VPC peering connection.
+newReferencedSecurityGroup ::
+  ReferencedSecurityGroup
+newReferencedSecurityGroup =
+  ReferencedSecurityGroup'
+    { groupId = Prelude.Nothing,
+      peeringStatus = Prelude.Nothing,
+      userId = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | The ID of the security group.
+referencedSecurityGroup_groupId :: Lens.Lens' ReferencedSecurityGroup (Prelude.Maybe Prelude.Text)
+referencedSecurityGroup_groupId = Lens.lens (\ReferencedSecurityGroup' {groupId} -> groupId) (\s@ReferencedSecurityGroup' {} a -> s {groupId = a} :: ReferencedSecurityGroup)
+
+-- | The status of a VPC peering connection, if applicable.
+referencedSecurityGroup_peeringStatus :: Lens.Lens' ReferencedSecurityGroup (Prelude.Maybe Prelude.Text)
+referencedSecurityGroup_peeringStatus = Lens.lens (\ReferencedSecurityGroup' {peeringStatus} -> peeringStatus) (\s@ReferencedSecurityGroup' {} a -> s {peeringStatus = a} :: ReferencedSecurityGroup)
+
+-- | The Amazon Web Services account ID.
+referencedSecurityGroup_userId :: Lens.Lens' ReferencedSecurityGroup (Prelude.Maybe Prelude.Text)
+referencedSecurityGroup_userId = Lens.lens (\ReferencedSecurityGroup' {userId} -> userId) (\s@ReferencedSecurityGroup' {} a -> s {userId = a} :: ReferencedSecurityGroup)
+
+-- | The ID of the VPC.
+referencedSecurityGroup_vpcId :: Lens.Lens' ReferencedSecurityGroup (Prelude.Maybe Prelude.Text)
+referencedSecurityGroup_vpcId = Lens.lens (\ReferencedSecurityGroup' {vpcId} -> vpcId) (\s@ReferencedSecurityGroup' {} a -> s {vpcId = a} :: ReferencedSecurityGroup)
+
+-- | The ID of the VPC peering connection.
+referencedSecurityGroup_vpcPeeringConnectionId :: Lens.Lens' ReferencedSecurityGroup (Prelude.Maybe Prelude.Text)
+referencedSecurityGroup_vpcPeeringConnectionId = Lens.lens (\ReferencedSecurityGroup' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@ReferencedSecurityGroup' {} a -> s {vpcPeeringConnectionId = a} :: ReferencedSecurityGroup)
+
+instance Data.FromXML ReferencedSecurityGroup where
+  parseXML x =
+    ReferencedSecurityGroup'
+      Prelude.<$> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "peeringStatus")
+      Prelude.<*> (x Data..@? "userId")
+      Prelude.<*> (x Data..@? "vpcId")
+      Prelude.<*> (x Data..@? "vpcPeeringConnectionId")
+
+instance Prelude.Hashable ReferencedSecurityGroup where
+  hashWithSalt _salt ReferencedSecurityGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` peeringStatus
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData ReferencedSecurityGroup where
+  rnf ReferencedSecurityGroup' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf peeringStatus
+      `Prelude.seq` Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
diff --git a/gen/Amazonka/EC2/Types/RegionInfo.hs b/gen/Amazonka/EC2/Types/RegionInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RegionInfo.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RegionInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RegionInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Region.
+--
+-- /See:/ 'newRegionInfo' smart constructor.
+data RegionInfo = RegionInfo'
+  { -- | The Region service endpoint.
+    endpoint :: Prelude.Maybe Prelude.Text,
+    -- | The Region opt-in status. The possible values are @opt-in-not-required@,
+    -- @opted-in@, and @not-opted-in@.
+    optInStatus :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Region.
+    regionName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegionInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endpoint', 'regionInfo_endpoint' - The Region service endpoint.
+--
+-- 'optInStatus', 'regionInfo_optInStatus' - The Region opt-in status. The possible values are @opt-in-not-required@,
+-- @opted-in@, and @not-opted-in@.
+--
+-- 'regionName', 'regionInfo_regionName' - The name of the Region.
+newRegionInfo ::
+  RegionInfo
+newRegionInfo =
+  RegionInfo'
+    { endpoint = Prelude.Nothing,
+      optInStatus = Prelude.Nothing,
+      regionName = Prelude.Nothing
+    }
+
+-- | The Region service endpoint.
+regionInfo_endpoint :: Lens.Lens' RegionInfo (Prelude.Maybe Prelude.Text)
+regionInfo_endpoint = Lens.lens (\RegionInfo' {endpoint} -> endpoint) (\s@RegionInfo' {} a -> s {endpoint = a} :: RegionInfo)
+
+-- | The Region opt-in status. The possible values are @opt-in-not-required@,
+-- @opted-in@, and @not-opted-in@.
+regionInfo_optInStatus :: Lens.Lens' RegionInfo (Prelude.Maybe Prelude.Text)
+regionInfo_optInStatus = Lens.lens (\RegionInfo' {optInStatus} -> optInStatus) (\s@RegionInfo' {} a -> s {optInStatus = a} :: RegionInfo)
+
+-- | The name of the Region.
+regionInfo_regionName :: Lens.Lens' RegionInfo (Prelude.Maybe Prelude.Text)
+regionInfo_regionName = Lens.lens (\RegionInfo' {regionName} -> regionName) (\s@RegionInfo' {} a -> s {regionName = a} :: RegionInfo)
+
+instance Data.FromXML RegionInfo where
+  parseXML x =
+    RegionInfo'
+      Prelude.<$> (x Data..@? "regionEndpoint")
+      Prelude.<*> (x Data..@? "optInStatus")
+      Prelude.<*> (x Data..@? "regionName")
+
+instance Prelude.Hashable RegionInfo where
+  hashWithSalt _salt RegionInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` endpoint
+      `Prelude.hashWithSalt` optInStatus
+      `Prelude.hashWithSalt` regionName
+
+instance Prelude.NFData RegionInfo where
+  rnf RegionInfo' {..} =
+    Prelude.rnf endpoint
+      `Prelude.seq` Prelude.rnf optInStatus
+      `Prelude.seq` Prelude.rnf regionName
diff --git a/gen/Amazonka/EC2/Types/RegisterInstanceTagAttributeRequest.hs b/gen/Amazonka/EC2/Types/RegisterInstanceTagAttributeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RegisterInstanceTagAttributeRequest.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RegisterInstanceTagAttributeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RegisterInstanceTagAttributeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the tag keys to register for the current Region. You
+-- can either specify individual tag keys or register all tag keys in the
+-- current Region. You must specify either @IncludeAllTagsOfInstance@ or
+-- @InstanceTagKeys@ in the request
+--
+-- /See:/ 'newRegisterInstanceTagAttributeRequest' smart constructor.
+data RegisterInstanceTagAttributeRequest = RegisterInstanceTagAttributeRequest'
+  { -- | Indicates whether to register all tag keys in the current Region.
+    -- Specify @true@ to register all tag keys.
+    includeAllTagsOfInstance :: Prelude.Maybe Prelude.Bool,
+    -- | The tag keys to register.
+    instanceTagKeys :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RegisterInstanceTagAttributeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'includeAllTagsOfInstance', 'registerInstanceTagAttributeRequest_includeAllTagsOfInstance' - Indicates whether to register all tag keys in the current Region.
+-- Specify @true@ to register all tag keys.
+--
+-- 'instanceTagKeys', 'registerInstanceTagAttributeRequest_instanceTagKeys' - The tag keys to register.
+newRegisterInstanceTagAttributeRequest ::
+  RegisterInstanceTagAttributeRequest
+newRegisterInstanceTagAttributeRequest =
+  RegisterInstanceTagAttributeRequest'
+    { includeAllTagsOfInstance =
+        Prelude.Nothing,
+      instanceTagKeys = Prelude.Nothing
+    }
+
+-- | Indicates whether to register all tag keys in the current Region.
+-- Specify @true@ to register all tag keys.
+registerInstanceTagAttributeRequest_includeAllTagsOfInstance :: Lens.Lens' RegisterInstanceTagAttributeRequest (Prelude.Maybe Prelude.Bool)
+registerInstanceTagAttributeRequest_includeAllTagsOfInstance = Lens.lens (\RegisterInstanceTagAttributeRequest' {includeAllTagsOfInstance} -> includeAllTagsOfInstance) (\s@RegisterInstanceTagAttributeRequest' {} a -> s {includeAllTagsOfInstance = a} :: RegisterInstanceTagAttributeRequest)
+
+-- | The tag keys to register.
+registerInstanceTagAttributeRequest_instanceTagKeys :: Lens.Lens' RegisterInstanceTagAttributeRequest (Prelude.Maybe [Prelude.Text])
+registerInstanceTagAttributeRequest_instanceTagKeys = Lens.lens (\RegisterInstanceTagAttributeRequest' {instanceTagKeys} -> instanceTagKeys) (\s@RegisterInstanceTagAttributeRequest' {} a -> s {instanceTagKeys = a} :: RegisterInstanceTagAttributeRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    RegisterInstanceTagAttributeRequest
+  where
+  hashWithSalt
+    _salt
+    RegisterInstanceTagAttributeRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` includeAllTagsOfInstance
+        `Prelude.hashWithSalt` instanceTagKeys
+
+instance
+  Prelude.NFData
+    RegisterInstanceTagAttributeRequest
+  where
+  rnf RegisterInstanceTagAttributeRequest' {..} =
+    Prelude.rnf includeAllTagsOfInstance
+      `Prelude.seq` Prelude.rnf instanceTagKeys
+
+instance
+  Data.ToQuery
+    RegisterInstanceTagAttributeRequest
+  where
+  toQuery RegisterInstanceTagAttributeRequest' {..} =
+    Prelude.mconcat
+      [ "IncludeAllTagsOfInstance"
+          Data.=: includeAllTagsOfInstance,
+        Data.toQuery
+          ( Data.toQueryList "InstanceTagKey"
+              Prelude.<$> instanceTagKeys
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/RemoveIpamOperatingRegion.hs b/gen/Amazonka/EC2/Types/RemoveIpamOperatingRegion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RemoveIpamOperatingRegion.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RemoveIpamOperatingRegion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RemoveIpamOperatingRegion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Remove an operating Region from an IPAM. Operating Regions are Amazon
+-- Web Services Regions where the IPAM is allowed to manage IP address
+-- CIDRs. IPAM only discovers and monitors resources in the Amazon Web
+-- Services Regions you select as operating Regions.
+--
+-- For more information about operating Regions, see
+-- <https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html Create an IPAM>
+-- in the /Amazon VPC IPAM User Guide/
+--
+-- /See:/ 'newRemoveIpamOperatingRegion' smart constructor.
+data RemoveIpamOperatingRegion = RemoveIpamOperatingRegion'
+  { -- | The name of the operating Region you want to remove.
+    regionName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemoveIpamOperatingRegion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'regionName', 'removeIpamOperatingRegion_regionName' - The name of the operating Region you want to remove.
+newRemoveIpamOperatingRegion ::
+  RemoveIpamOperatingRegion
+newRemoveIpamOperatingRegion =
+  RemoveIpamOperatingRegion'
+    { regionName =
+        Prelude.Nothing
+    }
+
+-- | The name of the operating Region you want to remove.
+removeIpamOperatingRegion_regionName :: Lens.Lens' RemoveIpamOperatingRegion (Prelude.Maybe Prelude.Text)
+removeIpamOperatingRegion_regionName = Lens.lens (\RemoveIpamOperatingRegion' {regionName} -> regionName) (\s@RemoveIpamOperatingRegion' {} a -> s {regionName = a} :: RemoveIpamOperatingRegion)
+
+instance Prelude.Hashable RemoveIpamOperatingRegion where
+  hashWithSalt _salt RemoveIpamOperatingRegion' {..} =
+    _salt `Prelude.hashWithSalt` regionName
+
+instance Prelude.NFData RemoveIpamOperatingRegion where
+  rnf RemoveIpamOperatingRegion' {..} =
+    Prelude.rnf regionName
+
+instance Data.ToQuery RemoveIpamOperatingRegion where
+  toQuery RemoveIpamOperatingRegion' {..} =
+    Prelude.mconcat ["RegionName" Data.=: regionName]
diff --git a/gen/Amazonka/EC2/Types/RemovePrefixListEntry.hs b/gen/Amazonka/EC2/Types/RemovePrefixListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RemovePrefixListEntry.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RemovePrefixListEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RemovePrefixListEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | An entry for a prefix list.
+--
+-- /See:/ 'newRemovePrefixListEntry' smart constructor.
+data RemovePrefixListEntry = RemovePrefixListEntry'
+  { -- | The CIDR block.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RemovePrefixListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'removePrefixListEntry_cidr' - The CIDR block.
+newRemovePrefixListEntry ::
+  -- | 'cidr'
+  Prelude.Text ->
+  RemovePrefixListEntry
+newRemovePrefixListEntry pCidr_ =
+  RemovePrefixListEntry' {cidr = pCidr_}
+
+-- | The CIDR block.
+removePrefixListEntry_cidr :: Lens.Lens' RemovePrefixListEntry Prelude.Text
+removePrefixListEntry_cidr = Lens.lens (\RemovePrefixListEntry' {cidr} -> cidr) (\s@RemovePrefixListEntry' {} a -> s {cidr = a} :: RemovePrefixListEntry)
+
+instance Prelude.Hashable RemovePrefixListEntry where
+  hashWithSalt _salt RemovePrefixListEntry' {..} =
+    _salt `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData RemovePrefixListEntry where
+  rnf RemovePrefixListEntry' {..} = Prelude.rnf cidr
+
+instance Data.ToQuery RemovePrefixListEntry where
+  toQuery RemovePrefixListEntry' {..} =
+    Prelude.mconcat ["Cidr" Data.=: cidr]
diff --git a/gen/Amazonka/EC2/Types/ReplaceRootVolumeTask.hs b/gen/Amazonka/EC2/Types/ReplaceRootVolumeTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReplaceRootVolumeTask.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReplaceRootVolumeTask
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReplaceRootVolumeTask where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReplaceRootVolumeTaskState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a root volume replacement task.
+--
+-- /See:/ 'newReplaceRootVolumeTask' smart constructor.
+data ReplaceRootVolumeTask = ReplaceRootVolumeTask'
+  { -- | The time the task completed.
+    completeTime :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the original root volume is to be deleted after the
+    -- root volume replacement task completes.
+    deleteReplacedRootVolume :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the AMI used to create the replacement root volume.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance for which the root volume replacement task was
+    -- created.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the root volume replacement task.
+    replaceRootVolumeTaskId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the snapshot used to create the replacement root volume.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The time the task was started.
+    startTime :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the task.
+    tags :: Prelude.Maybe [Tag],
+    -- | The state of the task. The task can be in one of the following states:
+    --
+    -- -   @pending@ - the replacement volume is being created.
+    --
+    -- -   @in-progress@ - the original volume is being detached and the
+    --     replacement volume is being attached.
+    --
+    -- -   @succeeded@ - the replacement volume has been successfully attached
+    --     to the instance and the instance is available.
+    --
+    -- -   @failing@ - the replacement task is in the process of failing.
+    --
+    -- -   @failed@ - the replacement task has failed but the original root
+    --     volume is still attached.
+    --
+    -- -   @failing-detached@ - the replacement task is in the process of
+    --     failing. The instance might have no root volume attached.
+    --
+    -- -   @failed-detached@ - the replacement task has failed and the instance
+    --     has no root volume attached.
+    taskState :: Prelude.Maybe ReplaceRootVolumeTaskState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceRootVolumeTask' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'completeTime', 'replaceRootVolumeTask_completeTime' - The time the task completed.
+--
+-- 'deleteReplacedRootVolume', 'replaceRootVolumeTask_deleteReplacedRootVolume' - Indicates whether the original root volume is to be deleted after the
+-- root volume replacement task completes.
+--
+-- 'imageId', 'replaceRootVolumeTask_imageId' - The ID of the AMI used to create the replacement root volume.
+--
+-- 'instanceId', 'replaceRootVolumeTask_instanceId' - The ID of the instance for which the root volume replacement task was
+-- created.
+--
+-- 'replaceRootVolumeTaskId', 'replaceRootVolumeTask_replaceRootVolumeTaskId' - The ID of the root volume replacement task.
+--
+-- 'snapshotId', 'replaceRootVolumeTask_snapshotId' - The ID of the snapshot used to create the replacement root volume.
+--
+-- 'startTime', 'replaceRootVolumeTask_startTime' - The time the task was started.
+--
+-- 'tags', 'replaceRootVolumeTask_tags' - The tags assigned to the task.
+--
+-- 'taskState', 'replaceRootVolumeTask_taskState' - The state of the task. The task can be in one of the following states:
+--
+-- -   @pending@ - the replacement volume is being created.
+--
+-- -   @in-progress@ - the original volume is being detached and the
+--     replacement volume is being attached.
+--
+-- -   @succeeded@ - the replacement volume has been successfully attached
+--     to the instance and the instance is available.
+--
+-- -   @failing@ - the replacement task is in the process of failing.
+--
+-- -   @failed@ - the replacement task has failed but the original root
+--     volume is still attached.
+--
+-- -   @failing-detached@ - the replacement task is in the process of
+--     failing. The instance might have no root volume attached.
+--
+-- -   @failed-detached@ - the replacement task has failed and the instance
+--     has no root volume attached.
+newReplaceRootVolumeTask ::
+  ReplaceRootVolumeTask
+newReplaceRootVolumeTask =
+  ReplaceRootVolumeTask'
+    { completeTime =
+        Prelude.Nothing,
+      deleteReplacedRootVolume = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      replaceRootVolumeTaskId = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      taskState = Prelude.Nothing
+    }
+
+-- | The time the task completed.
+replaceRootVolumeTask_completeTime :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+replaceRootVolumeTask_completeTime = Lens.lens (\ReplaceRootVolumeTask' {completeTime} -> completeTime) (\s@ReplaceRootVolumeTask' {} a -> s {completeTime = a} :: ReplaceRootVolumeTask)
+
+-- | Indicates whether the original root volume is to be deleted after the
+-- root volume replacement task completes.
+replaceRootVolumeTask_deleteReplacedRootVolume :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Bool)
+replaceRootVolumeTask_deleteReplacedRootVolume = Lens.lens (\ReplaceRootVolumeTask' {deleteReplacedRootVolume} -> deleteReplacedRootVolume) (\s@ReplaceRootVolumeTask' {} a -> s {deleteReplacedRootVolume = a} :: ReplaceRootVolumeTask)
+
+-- | The ID of the AMI used to create the replacement root volume.
+replaceRootVolumeTask_imageId :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+replaceRootVolumeTask_imageId = Lens.lens (\ReplaceRootVolumeTask' {imageId} -> imageId) (\s@ReplaceRootVolumeTask' {} a -> s {imageId = a} :: ReplaceRootVolumeTask)
+
+-- | The ID of the instance for which the root volume replacement task was
+-- created.
+replaceRootVolumeTask_instanceId :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+replaceRootVolumeTask_instanceId = Lens.lens (\ReplaceRootVolumeTask' {instanceId} -> instanceId) (\s@ReplaceRootVolumeTask' {} a -> s {instanceId = a} :: ReplaceRootVolumeTask)
+
+-- | The ID of the root volume replacement task.
+replaceRootVolumeTask_replaceRootVolumeTaskId :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+replaceRootVolumeTask_replaceRootVolumeTaskId = Lens.lens (\ReplaceRootVolumeTask' {replaceRootVolumeTaskId} -> replaceRootVolumeTaskId) (\s@ReplaceRootVolumeTask' {} a -> s {replaceRootVolumeTaskId = a} :: ReplaceRootVolumeTask)
+
+-- | The ID of the snapshot used to create the replacement root volume.
+replaceRootVolumeTask_snapshotId :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+replaceRootVolumeTask_snapshotId = Lens.lens (\ReplaceRootVolumeTask' {snapshotId} -> snapshotId) (\s@ReplaceRootVolumeTask' {} a -> s {snapshotId = a} :: ReplaceRootVolumeTask)
+
+-- | The time the task was started.
+replaceRootVolumeTask_startTime :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe Prelude.Text)
+replaceRootVolumeTask_startTime = Lens.lens (\ReplaceRootVolumeTask' {startTime} -> startTime) (\s@ReplaceRootVolumeTask' {} a -> s {startTime = a} :: ReplaceRootVolumeTask)
+
+-- | The tags assigned to the task.
+replaceRootVolumeTask_tags :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe [Tag])
+replaceRootVolumeTask_tags = Lens.lens (\ReplaceRootVolumeTask' {tags} -> tags) (\s@ReplaceRootVolumeTask' {} a -> s {tags = a} :: ReplaceRootVolumeTask) Prelude.. Lens.mapping Lens.coerced
+
+-- | The state of the task. The task can be in one of the following states:
+--
+-- -   @pending@ - the replacement volume is being created.
+--
+-- -   @in-progress@ - the original volume is being detached and the
+--     replacement volume is being attached.
+--
+-- -   @succeeded@ - the replacement volume has been successfully attached
+--     to the instance and the instance is available.
+--
+-- -   @failing@ - the replacement task is in the process of failing.
+--
+-- -   @failed@ - the replacement task has failed but the original root
+--     volume is still attached.
+--
+-- -   @failing-detached@ - the replacement task is in the process of
+--     failing. The instance might have no root volume attached.
+--
+-- -   @failed-detached@ - the replacement task has failed and the instance
+--     has no root volume attached.
+replaceRootVolumeTask_taskState :: Lens.Lens' ReplaceRootVolumeTask (Prelude.Maybe ReplaceRootVolumeTaskState)
+replaceRootVolumeTask_taskState = Lens.lens (\ReplaceRootVolumeTask' {taskState} -> taskState) (\s@ReplaceRootVolumeTask' {} a -> s {taskState = a} :: ReplaceRootVolumeTask)
+
+instance Data.FromXML ReplaceRootVolumeTask where
+  parseXML x =
+    ReplaceRootVolumeTask'
+      Prelude.<$> (x Data..@? "completeTime")
+      Prelude.<*> (x Data..@? "deleteReplacedRootVolume")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "replaceRootVolumeTaskId")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "startTime")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "taskState")
+
+instance Prelude.Hashable ReplaceRootVolumeTask where
+  hashWithSalt _salt ReplaceRootVolumeTask' {..} =
+    _salt
+      `Prelude.hashWithSalt` completeTime
+      `Prelude.hashWithSalt` deleteReplacedRootVolume
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` replaceRootVolumeTaskId
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` taskState
+
+instance Prelude.NFData ReplaceRootVolumeTask where
+  rnf ReplaceRootVolumeTask' {..} =
+    Prelude.rnf completeTime
+      `Prelude.seq` Prelude.rnf deleteReplacedRootVolume
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf replaceRootVolumeTaskId
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf taskState
diff --git a/gen/Amazonka/EC2/Types/ReplaceRootVolumeTaskState.hs b/gen/Amazonka/EC2/Types/ReplaceRootVolumeTaskState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReplaceRootVolumeTaskState.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReplaceRootVolumeTaskState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReplaceRootVolumeTaskState
+  ( ReplaceRootVolumeTaskState
+      ( ..,
+        ReplaceRootVolumeTaskState_Failed,
+        ReplaceRootVolumeTaskState_Failed_detached,
+        ReplaceRootVolumeTaskState_Failing,
+        ReplaceRootVolumeTaskState_In_progress,
+        ReplaceRootVolumeTaskState_Pending,
+        ReplaceRootVolumeTaskState_Succeeded
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplaceRootVolumeTaskState = ReplaceRootVolumeTaskState'
+  { fromReplaceRootVolumeTaskState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReplaceRootVolumeTaskState_Failed :: ReplaceRootVolumeTaskState
+pattern ReplaceRootVolumeTaskState_Failed = ReplaceRootVolumeTaskState' "failed"
+
+pattern ReplaceRootVolumeTaskState_Failed_detached :: ReplaceRootVolumeTaskState
+pattern ReplaceRootVolumeTaskState_Failed_detached = ReplaceRootVolumeTaskState' "failed-detached"
+
+pattern ReplaceRootVolumeTaskState_Failing :: ReplaceRootVolumeTaskState
+pattern ReplaceRootVolumeTaskState_Failing = ReplaceRootVolumeTaskState' "failing"
+
+pattern ReplaceRootVolumeTaskState_In_progress :: ReplaceRootVolumeTaskState
+pattern ReplaceRootVolumeTaskState_In_progress = ReplaceRootVolumeTaskState' "in-progress"
+
+pattern ReplaceRootVolumeTaskState_Pending :: ReplaceRootVolumeTaskState
+pattern ReplaceRootVolumeTaskState_Pending = ReplaceRootVolumeTaskState' "pending"
+
+pattern ReplaceRootVolumeTaskState_Succeeded :: ReplaceRootVolumeTaskState
+pattern ReplaceRootVolumeTaskState_Succeeded = ReplaceRootVolumeTaskState' "succeeded"
+
+{-# COMPLETE
+  ReplaceRootVolumeTaskState_Failed,
+  ReplaceRootVolumeTaskState_Failed_detached,
+  ReplaceRootVolumeTaskState_Failing,
+  ReplaceRootVolumeTaskState_In_progress,
+  ReplaceRootVolumeTaskState_Pending,
+  ReplaceRootVolumeTaskState_Succeeded,
+  ReplaceRootVolumeTaskState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ReplacementStrategy.hs b/gen/Amazonka/EC2/Types/ReplacementStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReplacementStrategy.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReplacementStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReplacementStrategy
+  ( ReplacementStrategy
+      ( ..,
+        ReplacementStrategy_Launch,
+        ReplacementStrategy_Launch_before_terminate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplacementStrategy = ReplacementStrategy'
+  { fromReplacementStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReplacementStrategy_Launch :: ReplacementStrategy
+pattern ReplacementStrategy_Launch = ReplacementStrategy' "launch"
+
+pattern ReplacementStrategy_Launch_before_terminate :: ReplacementStrategy
+pattern ReplacementStrategy_Launch_before_terminate = ReplacementStrategy' "launch-before-terminate"
+
+{-# COMPLETE
+  ReplacementStrategy_Launch,
+  ReplacementStrategy_Launch_before_terminate,
+  ReplacementStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ReportInstanceReasonCodes.hs b/gen/Amazonka/EC2/Types/ReportInstanceReasonCodes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReportInstanceReasonCodes.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReportInstanceReasonCodes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReportInstanceReasonCodes
+  ( ReportInstanceReasonCodes
+      ( ..,
+        ReportInstanceReasonCodes_Instance_stuck_in_state,
+        ReportInstanceReasonCodes_Not_accepting_credentials,
+        ReportInstanceReasonCodes_Other,
+        ReportInstanceReasonCodes_Password_not_available,
+        ReportInstanceReasonCodes_Performance_ebs_volume,
+        ReportInstanceReasonCodes_Performance_instance_store,
+        ReportInstanceReasonCodes_Performance_network,
+        ReportInstanceReasonCodes_Performance_other,
+        ReportInstanceReasonCodes_Unresponsive
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReportInstanceReasonCodes = ReportInstanceReasonCodes'
+  { fromReportInstanceReasonCodes ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReportInstanceReasonCodes_Instance_stuck_in_state :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Instance_stuck_in_state = ReportInstanceReasonCodes' "instance-stuck-in-state"
+
+pattern ReportInstanceReasonCodes_Not_accepting_credentials :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Not_accepting_credentials = ReportInstanceReasonCodes' "not-accepting-credentials"
+
+pattern ReportInstanceReasonCodes_Other :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Other = ReportInstanceReasonCodes' "other"
+
+pattern ReportInstanceReasonCodes_Password_not_available :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Password_not_available = ReportInstanceReasonCodes' "password-not-available"
+
+pattern ReportInstanceReasonCodes_Performance_ebs_volume :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Performance_ebs_volume = ReportInstanceReasonCodes' "performance-ebs-volume"
+
+pattern ReportInstanceReasonCodes_Performance_instance_store :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Performance_instance_store = ReportInstanceReasonCodes' "performance-instance-store"
+
+pattern ReportInstanceReasonCodes_Performance_network :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Performance_network = ReportInstanceReasonCodes' "performance-network"
+
+pattern ReportInstanceReasonCodes_Performance_other :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Performance_other = ReportInstanceReasonCodes' "performance-other"
+
+pattern ReportInstanceReasonCodes_Unresponsive :: ReportInstanceReasonCodes
+pattern ReportInstanceReasonCodes_Unresponsive = ReportInstanceReasonCodes' "unresponsive"
+
+{-# COMPLETE
+  ReportInstanceReasonCodes_Instance_stuck_in_state,
+  ReportInstanceReasonCodes_Not_accepting_credentials,
+  ReportInstanceReasonCodes_Other,
+  ReportInstanceReasonCodes_Password_not_available,
+  ReportInstanceReasonCodes_Performance_ebs_volume,
+  ReportInstanceReasonCodes_Performance_instance_store,
+  ReportInstanceReasonCodes_Performance_network,
+  ReportInstanceReasonCodes_Performance_other,
+  ReportInstanceReasonCodes_Unresponsive,
+  ReportInstanceReasonCodes'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ReportStatusType.hs b/gen/Amazonka/EC2/Types/ReportStatusType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReportStatusType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReportStatusType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReportStatusType
+  ( ReportStatusType
+      ( ..,
+        ReportStatusType_Impaired,
+        ReportStatusType_Ok
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReportStatusType = ReportStatusType'
+  { fromReportStatusType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReportStatusType_Impaired :: ReportStatusType
+pattern ReportStatusType_Impaired = ReportStatusType' "impaired"
+
+pattern ReportStatusType_Ok :: ReportStatusType
+pattern ReportStatusType_Ok = ReportStatusType' "ok"
+
+{-# COMPLETE
+  ReportStatusType_Impaired,
+  ReportStatusType_Ok,
+  ReportStatusType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/RequestIpamResourceTag.hs b/gen/Amazonka/EC2/Types/RequestIpamResourceTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RequestIpamResourceTag.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RequestIpamResourceTag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RequestIpamResourceTag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | A tag on an IPAM resource.
+--
+-- /See:/ 'newRequestIpamResourceTag' smart constructor.
+data RequestIpamResourceTag = RequestIpamResourceTag'
+  { -- | 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.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The value for the tag.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestIpamResourceTag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'requestIpamResourceTag_key' - 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.
+--
+-- 'value', 'requestIpamResourceTag_value' - The value for the tag.
+newRequestIpamResourceTag ::
+  RequestIpamResourceTag
+newRequestIpamResourceTag =
+  RequestIpamResourceTag'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | 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.
+requestIpamResourceTag_key :: Lens.Lens' RequestIpamResourceTag (Prelude.Maybe Prelude.Text)
+requestIpamResourceTag_key = Lens.lens (\RequestIpamResourceTag' {key} -> key) (\s@RequestIpamResourceTag' {} a -> s {key = a} :: RequestIpamResourceTag)
+
+-- | The value for the tag.
+requestIpamResourceTag_value :: Lens.Lens' RequestIpamResourceTag (Prelude.Maybe Prelude.Text)
+requestIpamResourceTag_value = Lens.lens (\RequestIpamResourceTag' {value} -> value) (\s@RequestIpamResourceTag' {} a -> s {value = a} :: RequestIpamResourceTag)
+
+instance Prelude.Hashable RequestIpamResourceTag where
+  hashWithSalt _salt RequestIpamResourceTag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData RequestIpamResourceTag where
+  rnf RequestIpamResourceTag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToQuery RequestIpamResourceTag where
+  toQuery RequestIpamResourceTag' {..} =
+    Prelude.mconcat
+      ["Key" Data.=: key, "Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/RequestLaunchTemplateData.hs b/gen/Amazonka/EC2/Types/RequestLaunchTemplateData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RequestLaunchTemplateData.hs
@@ -0,0 +1,806 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RequestLaunchTemplateData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RequestLaunchTemplateData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CreditSpecificationRequest
+import Amazonka.EC2.Types.ElasticGpuSpecification
+import Amazonka.EC2.Types.InstanceRequirementsRequest
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.LaunchTemplateBlockDeviceMappingRequest
+import Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateCpuOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateElasticInferenceAccelerator
+import Amazonka.EC2.Types.LaunchTemplateEnclaveOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateHibernationOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplateLicenseConfigurationRequest
+import Amazonka.EC2.Types.LaunchTemplatePlacementRequest
+import Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptionsRequest
+import Amazonka.EC2.Types.LaunchTemplateTagSpecificationRequest
+import Amazonka.EC2.Types.LaunchTemplatesMonitoringRequest
+import Amazonka.EC2.Types.ShutdownBehavior
+import qualified Amazonka.Prelude as Prelude
+
+-- | The information to include in the launch template.
+--
+-- You must specify at least one parameter for the launch template data.
+--
+-- /See:/ 'newRequestLaunchTemplateData' smart constructor.
+data RequestLaunchTemplateData = RequestLaunchTemplateData'
+  { -- | The block device mapping.
+    blockDeviceMappings :: Prelude.Maybe [LaunchTemplateBlockDeviceMappingRequest],
+    -- | The Capacity Reservation targeting option. If you do not specify this
+    -- parameter, the instance\'s Capacity Reservation preference defaults to
+    -- @open@, which enables it to run in any open Capacity Reservation that
+    -- has matching attributes (instance type, platform, Availability Zone).
+    capacityReservationSpecification :: Prelude.Maybe LaunchTemplateCapacityReservationSpecificationRequest,
+    -- | The CPU options for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimizing CPU Options>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    cpuOptions :: Prelude.Maybe LaunchTemplateCpuOptionsRequest,
+    -- | The credit option for CPU usage of the instance. Valid only for T
+    -- instances.
+    creditSpecification :: Prelude.Maybe CreditSpecificationRequest,
+    -- | Indicates whether to enable the instance for stop protection. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+    disableApiStop :: Prelude.Maybe Prelude.Bool,
+    -- | If you set this parameter to @true@, you can\'t terminate the instance
+    -- using the Amazon EC2 console, CLI, or API; otherwise, you can. To change
+    -- this attribute after launch, use
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html ModifyInstanceAttribute>.
+    -- Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to
+    -- @terminate@, you can terminate the instance by running the shutdown
+    -- command from the instance.
+    disableApiTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance is optimized for Amazon EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal Amazon EBS I\/O
+    -- performance. This optimization isn\'t available with all instance types.
+    -- Additional usage charges apply when using an EBS-optimized instance.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | An elastic GPU to associate with the instance.
+    elasticGpuSpecifications :: Prelude.Maybe [ElasticGpuSpecification],
+    -- | The elastic inference accelerator for the instance.
+    elasticInferenceAccelerators :: Prelude.Maybe [LaunchTemplateElasticInferenceAccelerator],
+    -- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+    -- Enclaves. For more information, see
+    -- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+    -- in the /Amazon Web Services Nitro Enclaves User Guide/.
+    --
+    -- You can\'t enable Amazon Web Services Nitro Enclaves and hibernation on
+    -- the same instance.
+    enclaveOptions :: Prelude.Maybe LaunchTemplateEnclaveOptionsRequest,
+    -- | Indicates whether an instance is enabled for hibernation. This parameter
+    -- is valid only if the instance meets the
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html hibernation prerequisites>.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    hibernationOptions :: Prelude.Maybe LaunchTemplateHibernationOptionsRequest,
+    -- | The name or Amazon Resource Name (ARN) of an IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe LaunchTemplateIamInstanceProfileSpecificationRequest,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether an instance stops or terminates when you initiate
+    -- shutdown from the instance (using the operating system command for
+    -- system shutdown).
+    --
+    -- Default: @stop@
+    instanceInitiatedShutdownBehavior :: Prelude.Maybe ShutdownBehavior,
+    -- | The market (purchasing) option for the instances.
+    instanceMarketOptions :: Prelude.Maybe LaunchTemplateInstanceMarketOptionsRequest,
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with these
+    -- attributes.
+    --
+    -- If you specify @InstanceRequirements@, you can\'t specify
+    -- @InstanceType@.
+    instanceRequirements :: Prelude.Maybe InstanceRequirementsRequest,
+    -- | The instance type. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- If you specify @InstanceType@, you can\'t specify
+    -- @InstanceRequirements@.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The ID of the kernel.
+    --
+    -- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html User provided kernels>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair. You can create a key pair using
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html CreateKeyPair>
+    -- or
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html ImportKeyPair>.
+    --
+    -- If you do not specify a key pair, you can\'t connect to the instance
+    -- unless you choose an AMI that is configured to allow users another way
+    -- to log in.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The license configurations.
+    licenseSpecifications :: Prelude.Maybe [LaunchTemplateLicenseConfigurationRequest],
+    -- | The maintenance options for the instance.
+    maintenanceOptions :: Prelude.Maybe LaunchTemplateInstanceMaintenanceOptionsRequest,
+    -- | The metadata options for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    metadataOptions :: Prelude.Maybe LaunchTemplateInstanceMetadataOptionsRequest,
+    -- | The monitoring for the instance.
+    monitoring :: Prelude.Maybe LaunchTemplatesMonitoringRequest,
+    -- | One or more network interfaces. If you specify a network interface, you
+    -- must specify any security groups and subnets as part of the network
+    -- interface.
+    networkInterfaces :: Prelude.Maybe [LaunchTemplateInstanceNetworkInterfaceSpecificationRequest],
+    -- | The placement for the instance.
+    placement :: Prelude.Maybe LaunchTemplatePlacementRequest,
+    -- | The options for the instance hostname. The default values are inherited
+    -- from the subnet.
+    privateDnsNameOptions :: Prelude.Maybe LaunchTemplatePrivateDnsNameOptionsRequest,
+    -- | The ID of the RAM disk.
+    --
+    -- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html User provided kernels>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    ramDiskId :: Prelude.Maybe Prelude.Text,
+    -- | One or more security group IDs. You can create a security group using
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html CreateSecurityGroup>.
+    -- You cannot specify both a security group ID and security name in the
+    -- same request.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | One or more security group names. For a nondefault VPC, you must use
+    -- security group IDs instead. You cannot specify both a security group ID
+    -- and security name in the same request.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The tags to apply to the resources that are created during instance
+    -- launch.
+    --
+    -- You can specify tags for the following resources only:
+    --
+    -- -   Instances
+    --
+    -- -   Volumes
+    --
+    -- -   Elastic graphics
+    --
+    -- -   Spot Instance requests
+    --
+    -- -   Network interfaces
+    --
+    -- To tag a resource after it has been created, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+    --
+    -- To tag the launch template itself, you must use the
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html TagSpecification>
+    -- parameter.
+    tagSpecifications :: Prelude.Maybe [LaunchTemplateTagSpecificationRequest],
+    -- | The user data to make available to the instance. You must provide
+    -- base64-encoded text. User data is limited to 16 KB. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Run commands on your Linux instance at launch>
+    -- (Linux) or
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instancedata-add-user-data.html Work with instance user data>
+    -- (Windows) in the /Amazon Elastic Compute Cloud User Guide/.
+    --
+    -- If you are creating the launch template for use with Batch, the user
+    -- data must be provided in the
+    -- <https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive MIME multi-part archive format>.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html Amazon EC2 user data in launch templates>
+    -- in the /Batch User Guide/.
+    userData :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestLaunchTemplateData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'requestLaunchTemplateData_blockDeviceMappings' - The block device mapping.
+--
+-- 'capacityReservationSpecification', 'requestLaunchTemplateData_capacityReservationSpecification' - The Capacity Reservation targeting option. If you do not specify this
+-- parameter, the instance\'s Capacity Reservation preference defaults to
+-- @open@, which enables it to run in any open Capacity Reservation that
+-- has matching attributes (instance type, platform, Availability Zone).
+--
+-- 'cpuOptions', 'requestLaunchTemplateData_cpuOptions' - The CPU options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimizing CPU Options>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'creditSpecification', 'requestLaunchTemplateData_creditSpecification' - The credit option for CPU usage of the instance. Valid only for T
+-- instances.
+--
+-- 'disableApiStop', 'requestLaunchTemplateData_disableApiStop' - Indicates whether to enable the instance for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+--
+-- 'disableApiTermination', 'requestLaunchTemplateData_disableApiTermination' - If you set this parameter to @true@, you can\'t terminate the instance
+-- using the Amazon EC2 console, CLI, or API; otherwise, you can. To change
+-- this attribute after launch, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html ModifyInstanceAttribute>.
+-- Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to
+-- @terminate@, you can terminate the instance by running the shutdown
+-- command from the instance.
+--
+-- 'ebsOptimized', 'requestLaunchTemplateData_ebsOptimized' - Indicates whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal Amazon EBS I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS-optimized instance.
+--
+-- 'elasticGpuSpecifications', 'requestLaunchTemplateData_elasticGpuSpecifications' - An elastic GPU to associate with the instance.
+--
+-- 'elasticInferenceAccelerators', 'requestLaunchTemplateData_elasticInferenceAccelerators' - The elastic inference accelerator for the instance.
+--
+-- 'enclaveOptions', 'requestLaunchTemplateData_enclaveOptions' - Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- You can\'t enable Amazon Web Services Nitro Enclaves and hibernation on
+-- the same instance.
+--
+-- 'hibernationOptions', 'requestLaunchTemplateData_hibernationOptions' - Indicates whether an instance is enabled for hibernation. This parameter
+-- is valid only if the instance meets the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html hibernation prerequisites>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'iamInstanceProfile', 'requestLaunchTemplateData_iamInstanceProfile' - The name or Amazon Resource Name (ARN) of an IAM instance profile.
+--
+-- 'imageId', 'requestLaunchTemplateData_imageId' - The ID of the AMI.
+--
+-- 'instanceInitiatedShutdownBehavior', 'requestLaunchTemplateData_instanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- Default: @stop@
+--
+-- 'instanceMarketOptions', 'requestLaunchTemplateData_instanceMarketOptions' - The market (purchasing) option for the instances.
+--
+-- 'instanceRequirements', 'requestLaunchTemplateData_instanceRequirements' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with these
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+--
+-- 'instanceType', 'requestLaunchTemplateData_instanceType' - The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you specify @InstanceType@, you can\'t specify
+-- @InstanceRequirements@.
+--
+-- 'kernelId', 'requestLaunchTemplateData_kernelId' - The ID of the kernel.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html User provided kernels>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'keyName', 'requestLaunchTemplateData_keyName' - The name of the key pair. You can create a key pair using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html CreateKeyPair>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html ImportKeyPair>.
+--
+-- If you do not specify a key pair, you can\'t connect to the instance
+-- unless you choose an AMI that is configured to allow users another way
+-- to log in.
+--
+-- 'licenseSpecifications', 'requestLaunchTemplateData_licenseSpecifications' - The license configurations.
+--
+-- 'maintenanceOptions', 'requestLaunchTemplateData_maintenanceOptions' - The maintenance options for the instance.
+--
+-- 'metadataOptions', 'requestLaunchTemplateData_metadataOptions' - The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'monitoring', 'requestLaunchTemplateData_monitoring' - The monitoring for the instance.
+--
+-- 'networkInterfaces', 'requestLaunchTemplateData_networkInterfaces' - One or more network interfaces. If you specify a network interface, you
+-- must specify any security groups and subnets as part of the network
+-- interface.
+--
+-- 'placement', 'requestLaunchTemplateData_placement' - The placement for the instance.
+--
+-- 'privateDnsNameOptions', 'requestLaunchTemplateData_privateDnsNameOptions' - The options for the instance hostname. The default values are inherited
+-- from the subnet.
+--
+-- 'ramDiskId', 'requestLaunchTemplateData_ramDiskId' - The ID of the RAM disk.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html User provided kernels>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'securityGroupIds', 'requestLaunchTemplateData_securityGroupIds' - One or more security group IDs. You can create a security group using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html CreateSecurityGroup>.
+-- You cannot specify both a security group ID and security name in the
+-- same request.
+--
+-- 'securityGroups', 'requestLaunchTemplateData_securityGroups' - One or more security group names. For a nondefault VPC, you must use
+-- security group IDs instead. You cannot specify both a security group ID
+-- and security name in the same request.
+--
+-- 'tagSpecifications', 'requestLaunchTemplateData_tagSpecifications' - The tags to apply to the resources that are created during instance
+-- launch.
+--
+-- You can specify tags for the following resources only:
+--
+-- -   Instances
+--
+-- -   Volumes
+--
+-- -   Elastic graphics
+--
+-- -   Spot Instance requests
+--
+-- -   Network interfaces
+--
+-- To tag a resource after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+--
+-- To tag the launch template itself, you must use the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html TagSpecification>
+-- parameter.
+--
+-- 'userData', 'requestLaunchTemplateData_userData' - The user data to make available to the instance. You must provide
+-- base64-encoded text. User data is limited to 16 KB. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Run commands on your Linux instance at launch>
+-- (Linux) or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instancedata-add-user-data.html Work with instance user data>
+-- (Windows) in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you are creating the launch template for use with Batch, the user
+-- data must be provided in the
+-- <https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive MIME multi-part archive format>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html Amazon EC2 user data in launch templates>
+-- in the /Batch User Guide/.
+newRequestLaunchTemplateData ::
+  RequestLaunchTemplateData
+newRequestLaunchTemplateData =
+  RequestLaunchTemplateData'
+    { blockDeviceMappings =
+        Prelude.Nothing,
+      capacityReservationSpecification =
+        Prelude.Nothing,
+      cpuOptions = Prelude.Nothing,
+      creditSpecification = Prelude.Nothing,
+      disableApiStop = Prelude.Nothing,
+      disableApiTermination = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      elasticGpuSpecifications = Prelude.Nothing,
+      elasticInferenceAccelerators = Prelude.Nothing,
+      enclaveOptions = Prelude.Nothing,
+      hibernationOptions = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceInitiatedShutdownBehavior =
+        Prelude.Nothing,
+      instanceMarketOptions = Prelude.Nothing,
+      instanceRequirements = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      licenseSpecifications = Prelude.Nothing,
+      maintenanceOptions = Prelude.Nothing,
+      metadataOptions = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      privateDnsNameOptions = Prelude.Nothing,
+      ramDiskId = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      userData = Prelude.Nothing
+    }
+
+-- | The block device mapping.
+requestLaunchTemplateData_blockDeviceMappings :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [LaunchTemplateBlockDeviceMappingRequest])
+requestLaunchTemplateData_blockDeviceMappings = Lens.lens (\RequestLaunchTemplateData' {blockDeviceMappings} -> blockDeviceMappings) (\s@RequestLaunchTemplateData' {} a -> s {blockDeviceMappings = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Capacity Reservation targeting option. If you do not specify this
+-- parameter, the instance\'s Capacity Reservation preference defaults to
+-- @open@, which enables it to run in any open Capacity Reservation that
+-- has matching attributes (instance type, platform, Availability Zone).
+requestLaunchTemplateData_capacityReservationSpecification :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateCapacityReservationSpecificationRequest)
+requestLaunchTemplateData_capacityReservationSpecification = Lens.lens (\RequestLaunchTemplateData' {capacityReservationSpecification} -> capacityReservationSpecification) (\s@RequestLaunchTemplateData' {} a -> s {capacityReservationSpecification = a} :: RequestLaunchTemplateData)
+
+-- | The CPU options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimizing CPU Options>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+requestLaunchTemplateData_cpuOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateCpuOptionsRequest)
+requestLaunchTemplateData_cpuOptions = Lens.lens (\RequestLaunchTemplateData' {cpuOptions} -> cpuOptions) (\s@RequestLaunchTemplateData' {} a -> s {cpuOptions = a} :: RequestLaunchTemplateData)
+
+-- | The credit option for CPU usage of the instance. Valid only for T
+-- instances.
+requestLaunchTemplateData_creditSpecification :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe CreditSpecificationRequest)
+requestLaunchTemplateData_creditSpecification = Lens.lens (\RequestLaunchTemplateData' {creditSpecification} -> creditSpecification) (\s@RequestLaunchTemplateData' {} a -> s {creditSpecification = a} :: RequestLaunchTemplateData)
+
+-- | Indicates whether to enable the instance for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+requestLaunchTemplateData_disableApiStop :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+requestLaunchTemplateData_disableApiStop = Lens.lens (\RequestLaunchTemplateData' {disableApiStop} -> disableApiStop) (\s@RequestLaunchTemplateData' {} a -> s {disableApiStop = a} :: RequestLaunchTemplateData)
+
+-- | If you set this parameter to @true@, you can\'t terminate the instance
+-- using the Amazon EC2 console, CLI, or API; otherwise, you can. To change
+-- this attribute after launch, use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html ModifyInstanceAttribute>.
+-- Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to
+-- @terminate@, you can terminate the instance by running the shutdown
+-- command from the instance.
+requestLaunchTemplateData_disableApiTermination :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+requestLaunchTemplateData_disableApiTermination = Lens.lens (\RequestLaunchTemplateData' {disableApiTermination} -> disableApiTermination) (\s@RequestLaunchTemplateData' {} a -> s {disableApiTermination = a} :: RequestLaunchTemplateData)
+
+-- | Indicates whether the instance is optimized for Amazon EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal Amazon EBS I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using an EBS-optimized instance.
+requestLaunchTemplateData_ebsOptimized :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+requestLaunchTemplateData_ebsOptimized = Lens.lens (\RequestLaunchTemplateData' {ebsOptimized} -> ebsOptimized) (\s@RequestLaunchTemplateData' {} a -> s {ebsOptimized = a} :: RequestLaunchTemplateData)
+
+-- | An elastic GPU to associate with the instance.
+requestLaunchTemplateData_elasticGpuSpecifications :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [ElasticGpuSpecification])
+requestLaunchTemplateData_elasticGpuSpecifications = Lens.lens (\RequestLaunchTemplateData' {elasticGpuSpecifications} -> elasticGpuSpecifications) (\s@RequestLaunchTemplateData' {} a -> s {elasticGpuSpecifications = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The elastic inference accelerator for the instance.
+requestLaunchTemplateData_elasticInferenceAccelerators :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [LaunchTemplateElasticInferenceAccelerator])
+requestLaunchTemplateData_elasticInferenceAccelerators = Lens.lens (\RequestLaunchTemplateData' {elasticInferenceAccelerators} -> elasticInferenceAccelerators) (\s@RequestLaunchTemplateData' {} a -> s {elasticInferenceAccelerators = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves. For more information, see
+-- <https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html What is Amazon Web Services Nitro Enclaves?>
+-- in the /Amazon Web Services Nitro Enclaves User Guide/.
+--
+-- You can\'t enable Amazon Web Services Nitro Enclaves and hibernation on
+-- the same instance.
+requestLaunchTemplateData_enclaveOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateEnclaveOptionsRequest)
+requestLaunchTemplateData_enclaveOptions = Lens.lens (\RequestLaunchTemplateData' {enclaveOptions} -> enclaveOptions) (\s@RequestLaunchTemplateData' {} a -> s {enclaveOptions = a} :: RequestLaunchTemplateData)
+
+-- | Indicates whether an instance is enabled for hibernation. This parameter
+-- is valid only if the instance meets the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html hibernation prerequisites>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+requestLaunchTemplateData_hibernationOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateHibernationOptionsRequest)
+requestLaunchTemplateData_hibernationOptions = Lens.lens (\RequestLaunchTemplateData' {hibernationOptions} -> hibernationOptions) (\s@RequestLaunchTemplateData' {} a -> s {hibernationOptions = a} :: RequestLaunchTemplateData)
+
+-- | The name or Amazon Resource Name (ARN) of an IAM instance profile.
+requestLaunchTemplateData_iamInstanceProfile :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateIamInstanceProfileSpecificationRequest)
+requestLaunchTemplateData_iamInstanceProfile = Lens.lens (\RequestLaunchTemplateData' {iamInstanceProfile} -> iamInstanceProfile) (\s@RequestLaunchTemplateData' {} a -> s {iamInstanceProfile = a} :: RequestLaunchTemplateData)
+
+-- | The ID of the AMI.
+requestLaunchTemplateData_imageId :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Text)
+requestLaunchTemplateData_imageId = Lens.lens (\RequestLaunchTemplateData' {imageId} -> imageId) (\s@RequestLaunchTemplateData' {} a -> s {imageId = a} :: RequestLaunchTemplateData)
+
+-- | Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- Default: @stop@
+requestLaunchTemplateData_instanceInitiatedShutdownBehavior :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe ShutdownBehavior)
+requestLaunchTemplateData_instanceInitiatedShutdownBehavior = Lens.lens (\RequestLaunchTemplateData' {instanceInitiatedShutdownBehavior} -> instanceInitiatedShutdownBehavior) (\s@RequestLaunchTemplateData' {} a -> s {instanceInitiatedShutdownBehavior = a} :: RequestLaunchTemplateData)
+
+-- | The market (purchasing) option for the instances.
+requestLaunchTemplateData_instanceMarketOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateInstanceMarketOptionsRequest)
+requestLaunchTemplateData_instanceMarketOptions = Lens.lens (\RequestLaunchTemplateData' {instanceMarketOptions} -> instanceMarketOptions) (\s@RequestLaunchTemplateData' {} a -> s {instanceMarketOptions = a} :: RequestLaunchTemplateData)
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with these
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+requestLaunchTemplateData_instanceRequirements :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe InstanceRequirementsRequest)
+requestLaunchTemplateData_instanceRequirements = Lens.lens (\RequestLaunchTemplateData' {instanceRequirements} -> instanceRequirements) (\s@RequestLaunchTemplateData' {} a -> s {instanceRequirements = a} :: RequestLaunchTemplateData)
+
+-- | The instance type. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you specify @InstanceType@, you can\'t specify
+-- @InstanceRequirements@.
+requestLaunchTemplateData_instanceType :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe InstanceType)
+requestLaunchTemplateData_instanceType = Lens.lens (\RequestLaunchTemplateData' {instanceType} -> instanceType) (\s@RequestLaunchTemplateData' {} a -> s {instanceType = a} :: RequestLaunchTemplateData)
+
+-- | The ID of the kernel.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html User provided kernels>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+requestLaunchTemplateData_kernelId :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Text)
+requestLaunchTemplateData_kernelId = Lens.lens (\RequestLaunchTemplateData' {kernelId} -> kernelId) (\s@RequestLaunchTemplateData' {} a -> s {kernelId = a} :: RequestLaunchTemplateData)
+
+-- | The name of the key pair. You can create a key pair using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html CreateKeyPair>
+-- or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html ImportKeyPair>.
+--
+-- If you do not specify a key pair, you can\'t connect to the instance
+-- unless you choose an AMI that is configured to allow users another way
+-- to log in.
+requestLaunchTemplateData_keyName :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Text)
+requestLaunchTemplateData_keyName = Lens.lens (\RequestLaunchTemplateData' {keyName} -> keyName) (\s@RequestLaunchTemplateData' {} a -> s {keyName = a} :: RequestLaunchTemplateData)
+
+-- | The license configurations.
+requestLaunchTemplateData_licenseSpecifications :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [LaunchTemplateLicenseConfigurationRequest])
+requestLaunchTemplateData_licenseSpecifications = Lens.lens (\RequestLaunchTemplateData' {licenseSpecifications} -> licenseSpecifications) (\s@RequestLaunchTemplateData' {} a -> s {licenseSpecifications = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maintenance options for the instance.
+requestLaunchTemplateData_maintenanceOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateInstanceMaintenanceOptionsRequest)
+requestLaunchTemplateData_maintenanceOptions = Lens.lens (\RequestLaunchTemplateData' {maintenanceOptions} -> maintenanceOptions) (\s@RequestLaunchTemplateData' {} a -> s {maintenanceOptions = a} :: RequestLaunchTemplateData)
+
+-- | The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+requestLaunchTemplateData_metadataOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplateInstanceMetadataOptionsRequest)
+requestLaunchTemplateData_metadataOptions = Lens.lens (\RequestLaunchTemplateData' {metadataOptions} -> metadataOptions) (\s@RequestLaunchTemplateData' {} a -> s {metadataOptions = a} :: RequestLaunchTemplateData)
+
+-- | The monitoring for the instance.
+requestLaunchTemplateData_monitoring :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplatesMonitoringRequest)
+requestLaunchTemplateData_monitoring = Lens.lens (\RequestLaunchTemplateData' {monitoring} -> monitoring) (\s@RequestLaunchTemplateData' {} a -> s {monitoring = a} :: RequestLaunchTemplateData)
+
+-- | One or more network interfaces. If you specify a network interface, you
+-- must specify any security groups and subnets as part of the network
+-- interface.
+requestLaunchTemplateData_networkInterfaces :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [LaunchTemplateInstanceNetworkInterfaceSpecificationRequest])
+requestLaunchTemplateData_networkInterfaces = Lens.lens (\RequestLaunchTemplateData' {networkInterfaces} -> networkInterfaces) (\s@RequestLaunchTemplateData' {} a -> s {networkInterfaces = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement for the instance.
+requestLaunchTemplateData_placement :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplatePlacementRequest)
+requestLaunchTemplateData_placement = Lens.lens (\RequestLaunchTemplateData' {placement} -> placement) (\s@RequestLaunchTemplateData' {} a -> s {placement = a} :: RequestLaunchTemplateData)
+
+-- | The options for the instance hostname. The default values are inherited
+-- from the subnet.
+requestLaunchTemplateData_privateDnsNameOptions :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe LaunchTemplatePrivateDnsNameOptionsRequest)
+requestLaunchTemplateData_privateDnsNameOptions = Lens.lens (\RequestLaunchTemplateData' {privateDnsNameOptions} -> privateDnsNameOptions) (\s@RequestLaunchTemplateData' {} a -> s {privateDnsNameOptions = a} :: RequestLaunchTemplateData)
+
+-- | The ID of the RAM disk.
+--
+-- We recommend that you use PV-GRUB instead of kernels and RAM disks. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html User provided kernels>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+requestLaunchTemplateData_ramDiskId :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Text)
+requestLaunchTemplateData_ramDiskId = Lens.lens (\RequestLaunchTemplateData' {ramDiskId} -> ramDiskId) (\s@RequestLaunchTemplateData' {} a -> s {ramDiskId = a} :: RequestLaunchTemplateData)
+
+-- | One or more security group IDs. You can create a security group using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html CreateSecurityGroup>.
+-- You cannot specify both a security group ID and security name in the
+-- same request.
+requestLaunchTemplateData_securityGroupIds :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [Prelude.Text])
+requestLaunchTemplateData_securityGroupIds = Lens.lens (\RequestLaunchTemplateData' {securityGroupIds} -> securityGroupIds) (\s@RequestLaunchTemplateData' {} a -> s {securityGroupIds = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more security group names. For a nondefault VPC, you must use
+-- security group IDs instead. You cannot specify both a security group ID
+-- and security name in the same request.
+requestLaunchTemplateData_securityGroups :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [Prelude.Text])
+requestLaunchTemplateData_securityGroups = Lens.lens (\RequestLaunchTemplateData' {securityGroups} -> securityGroups) (\s@RequestLaunchTemplateData' {} a -> s {securityGroups = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to apply to the resources that are created during instance
+-- launch.
+--
+-- You can specify tags for the following resources only:
+--
+-- -   Instances
+--
+-- -   Volumes
+--
+-- -   Elastic graphics
+--
+-- -   Spot Instance requests
+--
+-- -   Network interfaces
+--
+-- To tag a resource after it has been created, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html CreateTags>.
+--
+-- To tag the launch template itself, you must use the
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html TagSpecification>
+-- parameter.
+requestLaunchTemplateData_tagSpecifications :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe [LaunchTemplateTagSpecificationRequest])
+requestLaunchTemplateData_tagSpecifications = Lens.lens (\RequestLaunchTemplateData' {tagSpecifications} -> tagSpecifications) (\s@RequestLaunchTemplateData' {} a -> s {tagSpecifications = a} :: RequestLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user data to make available to the instance. You must provide
+-- base64-encoded text. User data is limited to 16 KB. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Run commands on your Linux instance at launch>
+-- (Linux) or
+-- <https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instancedata-add-user-data.html Work with instance user data>
+-- (Windows) in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- If you are creating the launch template for use with Batch, the user
+-- data must be provided in the
+-- <https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive MIME multi-part archive format>.
+-- For more information, see
+-- <https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html Amazon EC2 user data in launch templates>
+-- in the /Batch User Guide/.
+requestLaunchTemplateData_userData :: Lens.Lens' RequestLaunchTemplateData (Prelude.Maybe Prelude.Text)
+requestLaunchTemplateData_userData = Lens.lens (\RequestLaunchTemplateData' {userData} -> userData) (\s@RequestLaunchTemplateData' {} a -> s {userData = a} :: RequestLaunchTemplateData)
+
+instance Prelude.Hashable RequestLaunchTemplateData where
+  hashWithSalt _salt RequestLaunchTemplateData' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` capacityReservationSpecification
+      `Prelude.hashWithSalt` cpuOptions
+      `Prelude.hashWithSalt` creditSpecification
+      `Prelude.hashWithSalt` disableApiStop
+      `Prelude.hashWithSalt` disableApiTermination
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` elasticGpuSpecifications
+      `Prelude.hashWithSalt` elasticInferenceAccelerators
+      `Prelude.hashWithSalt` enclaveOptions
+      `Prelude.hashWithSalt` hibernationOptions
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceInitiatedShutdownBehavior
+      `Prelude.hashWithSalt` instanceMarketOptions
+      `Prelude.hashWithSalt` instanceRequirements
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` licenseSpecifications
+      `Prelude.hashWithSalt` maintenanceOptions
+      `Prelude.hashWithSalt` metadataOptions
+      `Prelude.hashWithSalt` monitoring
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` privateDnsNameOptions
+      `Prelude.hashWithSalt` ramDiskId
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` userData
+
+instance Prelude.NFData RequestLaunchTemplateData where
+  rnf RequestLaunchTemplateData' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf capacityReservationSpecification
+      `Prelude.seq` Prelude.rnf cpuOptions
+      `Prelude.seq` Prelude.rnf creditSpecification
+      `Prelude.seq` Prelude.rnf disableApiStop
+      `Prelude.seq` Prelude.rnf disableApiTermination
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf elasticGpuSpecifications
+      `Prelude.seq` Prelude.rnf elasticInferenceAccelerators
+      `Prelude.seq` Prelude.rnf enclaveOptions
+      `Prelude.seq` Prelude.rnf hibernationOptions
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf
+        instanceInitiatedShutdownBehavior
+      `Prelude.seq` Prelude.rnf instanceMarketOptions
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf
+        licenseSpecifications
+      `Prelude.seq` Prelude.rnf
+        maintenanceOptions
+      `Prelude.seq` Prelude.rnf
+        metadataOptions
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf
+        networkInterfaces
+      `Prelude.seq` Prelude.rnf
+        placement
+      `Prelude.seq` Prelude.rnf
+        privateDnsNameOptions
+      `Prelude.seq` Prelude.rnf
+        ramDiskId
+      `Prelude.seq` Prelude.rnf
+        securityGroupIds
+      `Prelude.seq` Prelude.rnf
+        securityGroups
+      `Prelude.seq` Prelude.rnf
+        tagSpecifications
+      `Prelude.seq` Prelude.rnf
+        userData
+
+instance Data.ToQuery RequestLaunchTemplateData where
+  toQuery RequestLaunchTemplateData' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "CapacityReservationSpecification"
+          Data.=: capacityReservationSpecification,
+        "CpuOptions" Data.=: cpuOptions,
+        "CreditSpecification" Data.=: creditSpecification,
+        "DisableApiStop" Data.=: disableApiStop,
+        "DisableApiTermination"
+          Data.=: disableApiTermination,
+        "EbsOptimized" Data.=: ebsOptimized,
+        Data.toQuery
+          ( Data.toQueryList "ElasticGpuSpecification"
+              Prelude.<$> elasticGpuSpecifications
+          ),
+        Data.toQuery
+          ( Data.toQueryList "ElasticInferenceAccelerator"
+              Prelude.<$> elasticInferenceAccelerators
+          ),
+        "EnclaveOptions" Data.=: enclaveOptions,
+        "HibernationOptions" Data.=: hibernationOptions,
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "ImageId" Data.=: imageId,
+        "InstanceInitiatedShutdownBehavior"
+          Data.=: instanceInitiatedShutdownBehavior,
+        "InstanceMarketOptions"
+          Data.=: instanceMarketOptions,
+        "InstanceRequirements" Data.=: instanceRequirements,
+        "InstanceType" Data.=: instanceType,
+        "KernelId" Data.=: kernelId,
+        "KeyName" Data.=: keyName,
+        Data.toQuery
+          ( Data.toQueryList "LicenseSpecification"
+              Prelude.<$> licenseSpecifications
+          ),
+        "MaintenanceOptions" Data.=: maintenanceOptions,
+        "MetadataOptions" Data.=: metadataOptions,
+        "Monitoring" Data.=: monitoring,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterface"
+              Prelude.<$> networkInterfaces
+          ),
+        "Placement" Data.=: placement,
+        "PrivateDnsNameOptions"
+          Data.=: privateDnsNameOptions,
+        "RamDiskId" Data.=: ramDiskId,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroup"
+              Prelude.<$> securityGroups
+          ),
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "UserData" Data.=: userData
+      ]
diff --git a/gen/Amazonka/EC2/Types/RequestSpotLaunchSpecification.hs b/gen/Amazonka/EC2/Types/RequestSpotLaunchSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RequestSpotLaunchSpecification.hs
@@ -0,0 +1,334 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RequestSpotLaunchSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RequestSpotLaunchSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BlockDeviceMapping
+import Amazonka.EC2.Types.IamInstanceProfileSpecification
+import Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.RunInstancesMonitoringEnabled
+import Amazonka.EC2.Types.SpotPlacement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the launch specification for an instance.
+--
+-- /See:/ 'newRequestSpotLaunchSpecification' smart constructor.
+data RequestSpotLaunchSpecification = RequestSpotLaunchSpecification'
+  { -- | Deprecated.
+    addressingType :: Prelude.Maybe Prelude.Text,
+    -- | One or more block device mapping entries. You can\'t specify both a
+    -- snapshot ID and an encryption value. This is because only blank volumes
+    -- can be encrypted on creation. If a snapshot is the basis for a volume,
+    -- it is not blank and its encryption status is used for the volume
+    -- encryption status.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | Indicates whether the instance is optimized for EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal EBS I\/O performance.
+    -- This optimization isn\'t available with all instance types. Additional
+    -- usage charges apply when using an EBS Optimized instance.
+    --
+    -- Default: @false@
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe IamInstanceProfileSpecification,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The instance type. Only one instance type can be specified.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The ID of the kernel.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether basic or detailed monitoring is enabled for the
+    -- instance.
+    --
+    -- Default: Disabled
+    monitoring :: Prelude.Maybe RunInstancesMonitoringEnabled,
+    -- | One or more network interfaces. If you specify a network interface, you
+    -- must specify subnet IDs and security group IDs using the network
+    -- interface.
+    networkInterfaces :: Prelude.Maybe [InstanceNetworkInterfaceSpecification],
+    -- | The placement information for the instance.
+    placement :: Prelude.Maybe SpotPlacement,
+    -- | The ID of the RAM disk.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | One or more security group IDs.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | One or more security groups. When requesting instances in a VPC, you
+    -- must specify the IDs of the security groups. When requesting instances
+    -- in EC2-Classic, you can specify the names or the IDs of the security
+    -- groups.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the subnet in which to launch the instance.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The Base64-encoded user data for the instance. User data is limited to
+    -- 16 KB.
+    userData :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RequestSpotLaunchSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressingType', 'requestSpotLaunchSpecification_addressingType' - Deprecated.
+--
+-- 'blockDeviceMappings', 'requestSpotLaunchSpecification_blockDeviceMappings' - One or more block device mapping entries. You can\'t specify both a
+-- snapshot ID and an encryption value. This is because only blank volumes
+-- can be encrypted on creation. If a snapshot is the basis for a volume,
+-- it is not blank and its encryption status is used for the volume
+-- encryption status.
+--
+-- 'ebsOptimized', 'requestSpotLaunchSpecification_ebsOptimized' - Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: @false@
+--
+-- 'iamInstanceProfile', 'requestSpotLaunchSpecification_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'imageId', 'requestSpotLaunchSpecification_imageId' - The ID of the AMI.
+--
+-- 'instanceType', 'requestSpotLaunchSpecification_instanceType' - The instance type. Only one instance type can be specified.
+--
+-- 'kernelId', 'requestSpotLaunchSpecification_kernelId' - The ID of the kernel.
+--
+-- 'keyName', 'requestSpotLaunchSpecification_keyName' - The name of the key pair.
+--
+-- 'monitoring', 'requestSpotLaunchSpecification_monitoring' - Indicates whether basic or detailed monitoring is enabled for the
+-- instance.
+--
+-- Default: Disabled
+--
+-- 'networkInterfaces', 'requestSpotLaunchSpecification_networkInterfaces' - One or more network interfaces. If you specify a network interface, you
+-- must specify subnet IDs and security group IDs using the network
+-- interface.
+--
+-- 'placement', 'requestSpotLaunchSpecification_placement' - The placement information for the instance.
+--
+-- 'ramdiskId', 'requestSpotLaunchSpecification_ramdiskId' - The ID of the RAM disk.
+--
+-- 'securityGroupIds', 'requestSpotLaunchSpecification_securityGroupIds' - One or more security group IDs.
+--
+-- 'securityGroups', 'requestSpotLaunchSpecification_securityGroups' - One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+--
+-- 'subnetId', 'requestSpotLaunchSpecification_subnetId' - The ID of the subnet in which to launch the instance.
+--
+-- 'userData', 'requestSpotLaunchSpecification_userData' - The Base64-encoded user data for the instance. User data is limited to
+-- 16 KB.
+newRequestSpotLaunchSpecification ::
+  RequestSpotLaunchSpecification
+newRequestSpotLaunchSpecification =
+  RequestSpotLaunchSpecification'
+    { addressingType =
+        Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      userData = Prelude.Nothing
+    }
+
+-- | Deprecated.
+requestSpotLaunchSpecification_addressingType :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_addressingType = Lens.lens (\RequestSpotLaunchSpecification' {addressingType} -> addressingType) (\s@RequestSpotLaunchSpecification' {} a -> s {addressingType = a} :: RequestSpotLaunchSpecification)
+
+-- | One or more block device mapping entries. You can\'t specify both a
+-- snapshot ID and an encryption value. This is because only blank volumes
+-- can be encrypted on creation. If a snapshot is the basis for a volume,
+-- it is not blank and its encryption status is used for the volume
+-- encryption status.
+requestSpotLaunchSpecification_blockDeviceMappings :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe [BlockDeviceMapping])
+requestSpotLaunchSpecification_blockDeviceMappings = Lens.lens (\RequestSpotLaunchSpecification' {blockDeviceMappings} -> blockDeviceMappings) (\s@RequestSpotLaunchSpecification' {} a -> s {blockDeviceMappings = a} :: RequestSpotLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: @false@
+requestSpotLaunchSpecification_ebsOptimized :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Bool)
+requestSpotLaunchSpecification_ebsOptimized = Lens.lens (\RequestSpotLaunchSpecification' {ebsOptimized} -> ebsOptimized) (\s@RequestSpotLaunchSpecification' {} a -> s {ebsOptimized = a} :: RequestSpotLaunchSpecification)
+
+-- | The IAM instance profile.
+requestSpotLaunchSpecification_iamInstanceProfile :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe IamInstanceProfileSpecification)
+requestSpotLaunchSpecification_iamInstanceProfile = Lens.lens (\RequestSpotLaunchSpecification' {iamInstanceProfile} -> iamInstanceProfile) (\s@RequestSpotLaunchSpecification' {} a -> s {iamInstanceProfile = a} :: RequestSpotLaunchSpecification)
+
+-- | The ID of the AMI.
+requestSpotLaunchSpecification_imageId :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_imageId = Lens.lens (\RequestSpotLaunchSpecification' {imageId} -> imageId) (\s@RequestSpotLaunchSpecification' {} a -> s {imageId = a} :: RequestSpotLaunchSpecification)
+
+-- | The instance type. Only one instance type can be specified.
+requestSpotLaunchSpecification_instanceType :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe InstanceType)
+requestSpotLaunchSpecification_instanceType = Lens.lens (\RequestSpotLaunchSpecification' {instanceType} -> instanceType) (\s@RequestSpotLaunchSpecification' {} a -> s {instanceType = a} :: RequestSpotLaunchSpecification)
+
+-- | The ID of the kernel.
+requestSpotLaunchSpecification_kernelId :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_kernelId = Lens.lens (\RequestSpotLaunchSpecification' {kernelId} -> kernelId) (\s@RequestSpotLaunchSpecification' {} a -> s {kernelId = a} :: RequestSpotLaunchSpecification)
+
+-- | The name of the key pair.
+requestSpotLaunchSpecification_keyName :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_keyName = Lens.lens (\RequestSpotLaunchSpecification' {keyName} -> keyName) (\s@RequestSpotLaunchSpecification' {} a -> s {keyName = a} :: RequestSpotLaunchSpecification)
+
+-- | Indicates whether basic or detailed monitoring is enabled for the
+-- instance.
+--
+-- Default: Disabled
+requestSpotLaunchSpecification_monitoring :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe RunInstancesMonitoringEnabled)
+requestSpotLaunchSpecification_monitoring = Lens.lens (\RequestSpotLaunchSpecification' {monitoring} -> monitoring) (\s@RequestSpotLaunchSpecification' {} a -> s {monitoring = a} :: RequestSpotLaunchSpecification)
+
+-- | One or more network interfaces. If you specify a network interface, you
+-- must specify subnet IDs and security group IDs using the network
+-- interface.
+requestSpotLaunchSpecification_networkInterfaces :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe [InstanceNetworkInterfaceSpecification])
+requestSpotLaunchSpecification_networkInterfaces = Lens.lens (\RequestSpotLaunchSpecification' {networkInterfaces} -> networkInterfaces) (\s@RequestSpotLaunchSpecification' {} a -> s {networkInterfaces = a} :: RequestSpotLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement information for the instance.
+requestSpotLaunchSpecification_placement :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe SpotPlacement)
+requestSpotLaunchSpecification_placement = Lens.lens (\RequestSpotLaunchSpecification' {placement} -> placement) (\s@RequestSpotLaunchSpecification' {} a -> s {placement = a} :: RequestSpotLaunchSpecification)
+
+-- | The ID of the RAM disk.
+requestSpotLaunchSpecification_ramdiskId :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_ramdiskId = Lens.lens (\RequestSpotLaunchSpecification' {ramdiskId} -> ramdiskId) (\s@RequestSpotLaunchSpecification' {} a -> s {ramdiskId = a} :: RequestSpotLaunchSpecification)
+
+-- | One or more security group IDs.
+requestSpotLaunchSpecification_securityGroupIds :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe [Prelude.Text])
+requestSpotLaunchSpecification_securityGroupIds = Lens.lens (\RequestSpotLaunchSpecification' {securityGroupIds} -> securityGroupIds) (\s@RequestSpotLaunchSpecification' {} a -> s {securityGroupIds = a} :: RequestSpotLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+requestSpotLaunchSpecification_securityGroups :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe [Prelude.Text])
+requestSpotLaunchSpecification_securityGroups = Lens.lens (\RequestSpotLaunchSpecification' {securityGroups} -> securityGroups) (\s@RequestSpotLaunchSpecification' {} a -> s {securityGroups = a} :: RequestSpotLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the subnet in which to launch the instance.
+requestSpotLaunchSpecification_subnetId :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_subnetId = Lens.lens (\RequestSpotLaunchSpecification' {subnetId} -> subnetId) (\s@RequestSpotLaunchSpecification' {} a -> s {subnetId = a} :: RequestSpotLaunchSpecification)
+
+-- | The Base64-encoded user data for the instance. User data is limited to
+-- 16 KB.
+requestSpotLaunchSpecification_userData :: Lens.Lens' RequestSpotLaunchSpecification (Prelude.Maybe Prelude.Text)
+requestSpotLaunchSpecification_userData = Lens.lens (\RequestSpotLaunchSpecification' {userData} -> userData) (\s@RequestSpotLaunchSpecification' {} a -> s {userData = a} :: RequestSpotLaunchSpecification)
+
+instance
+  Prelude.Hashable
+    RequestSpotLaunchSpecification
+  where
+  hashWithSalt
+    _salt
+    RequestSpotLaunchSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` addressingType
+        `Prelude.hashWithSalt` blockDeviceMappings
+        `Prelude.hashWithSalt` ebsOptimized
+        `Prelude.hashWithSalt` iamInstanceProfile
+        `Prelude.hashWithSalt` imageId
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` kernelId
+        `Prelude.hashWithSalt` keyName
+        `Prelude.hashWithSalt` monitoring
+        `Prelude.hashWithSalt` networkInterfaces
+        `Prelude.hashWithSalt` placement
+        `Prelude.hashWithSalt` ramdiskId
+        `Prelude.hashWithSalt` securityGroupIds
+        `Prelude.hashWithSalt` securityGroups
+        `Prelude.hashWithSalt` subnetId
+        `Prelude.hashWithSalt` userData
+
+instance
+  Prelude.NFData
+    RequestSpotLaunchSpecification
+  where
+  rnf RequestSpotLaunchSpecification' {..} =
+    Prelude.rnf addressingType
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf userData
+
+instance Data.ToQuery RequestSpotLaunchSpecification where
+  toQuery RequestSpotLaunchSpecification' {..} =
+    Prelude.mconcat
+      [ "AddressingType" Data.=: addressingType,
+        Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "EbsOptimized" Data.=: ebsOptimized,
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "ImageId" Data.=: imageId,
+        "InstanceType" Data.=: instanceType,
+        "KernelId" Data.=: kernelId,
+        "KeyName" Data.=: keyName,
+        "Monitoring" Data.=: monitoring,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterface"
+              Prelude.<$> networkInterfaces
+          ),
+        "Placement" Data.=: placement,
+        "RamdiskId" Data.=: ramdiskId,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroup"
+              Prelude.<$> securityGroups
+          ),
+        "SubnetId" Data.=: subnetId,
+        "UserData" Data.=: userData
+      ]
diff --git a/gen/Amazonka/EC2/Types/Reservation.hs b/gen/Amazonka/EC2/Types/Reservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Reservation.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Reservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Reservation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.Instance
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a launch request for one or more instances, and includes
+-- owner, requester, and security group information that applies to all
+-- instances in the launch request.
+--
+-- /See:/ 'newReservation' smart constructor.
+data Reservation = Reservation'
+  { -- | [EC2-Classic only] The security groups.
+    groups :: Prelude.Maybe [GroupIdentifier],
+    -- | The instances.
+    instances :: Prelude.Maybe [Instance],
+    -- | The ID of the requester that launched the instances on your behalf (for
+    -- example, Amazon Web Services Management Console or Auto Scaling).
+    requesterId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the reservation.
+    reservationId :: Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the reservation.
+    ownerId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Reservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groups', 'reservation_groups' - [EC2-Classic only] The security groups.
+--
+-- 'instances', 'reservation_instances' - The instances.
+--
+-- 'requesterId', 'reservation_requesterId' - The ID of the requester that launched the instances on your behalf (for
+-- example, Amazon Web Services Management Console or Auto Scaling).
+--
+-- 'reservationId', 'reservation_reservationId' - The ID of the reservation.
+--
+-- 'ownerId', 'reservation_ownerId' - The ID of the Amazon Web Services account that owns the reservation.
+newReservation ::
+  -- | 'reservationId'
+  Prelude.Text ->
+  -- | 'ownerId'
+  Prelude.Text ->
+  Reservation
+newReservation pReservationId_ pOwnerId_ =
+  Reservation'
+    { groups = Prelude.Nothing,
+      instances = Prelude.Nothing,
+      requesterId = Prelude.Nothing,
+      reservationId = pReservationId_,
+      ownerId = pOwnerId_
+    }
+
+-- | [EC2-Classic only] The security groups.
+reservation_groups :: Lens.Lens' Reservation (Prelude.Maybe [GroupIdentifier])
+reservation_groups = Lens.lens (\Reservation' {groups} -> groups) (\s@Reservation' {} a -> s {groups = a} :: Reservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instances.
+reservation_instances :: Lens.Lens' Reservation (Prelude.Maybe [Instance])
+reservation_instances = Lens.lens (\Reservation' {instances} -> instances) (\s@Reservation' {} a -> s {instances = a} :: Reservation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the requester that launched the instances on your behalf (for
+-- example, Amazon Web Services Management Console or Auto Scaling).
+reservation_requesterId :: Lens.Lens' Reservation (Prelude.Maybe Prelude.Text)
+reservation_requesterId = Lens.lens (\Reservation' {requesterId} -> requesterId) (\s@Reservation' {} a -> s {requesterId = a} :: Reservation)
+
+-- | The ID of the reservation.
+reservation_reservationId :: Lens.Lens' Reservation Prelude.Text
+reservation_reservationId = Lens.lens (\Reservation' {reservationId} -> reservationId) (\s@Reservation' {} a -> s {reservationId = a} :: Reservation)
+
+-- | The ID of the Amazon Web Services account that owns the reservation.
+reservation_ownerId :: Lens.Lens' Reservation Prelude.Text
+reservation_ownerId = Lens.lens (\Reservation' {ownerId} -> ownerId) (\s@Reservation' {} a -> s {ownerId = a} :: Reservation)
+
+instance Data.FromXML Reservation where
+  parseXML x =
+    Reservation'
+      Prelude.<$> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "instancesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "requesterId")
+      Prelude.<*> (x Data..@ "reservationId")
+      Prelude.<*> (x Data..@ "ownerId")
+
+instance Prelude.Hashable Reservation where
+  hashWithSalt _salt Reservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` instances
+      `Prelude.hashWithSalt` requesterId
+      `Prelude.hashWithSalt` reservationId
+      `Prelude.hashWithSalt` ownerId
+
+instance Prelude.NFData Reservation where
+  rnf Reservation' {..} =
+    Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf instances
+      `Prelude.seq` Prelude.rnf requesterId
+      `Prelude.seq` Prelude.rnf reservationId
+      `Prelude.seq` Prelude.rnf ownerId
diff --git a/gen/Amazonka/EC2/Types/ReservationFleetInstanceSpecification.hs b/gen/Amazonka/EC2/Types/ReservationFleetInstanceSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservationFleetInstanceSpecification.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservationFleetInstanceSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservationFleetInstanceSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CapacityReservationInstancePlatform
+import Amazonka.EC2.Types.InstanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about an instance type to use in a Capacity Reservation
+-- Fleet.
+--
+-- /See:/ 'newReservationFleetInstanceSpecification' smart constructor.
+data ReservationFleetInstanceSpecification = ReservationFleetInstanceSpecification'
+  { -- | The Availability Zone in which the Capacity Reservation Fleet reserves
+    -- the capacity. A Capacity Reservation Fleet can\'t span Availability
+    -- Zones. All instance type specifications that you specify for the Fleet
+    -- must use the same Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Availability Zone in which the Capacity Reservation Fleet
+    -- reserves the capacity. A Capacity Reservation Fleet can\'t span
+    -- Availability Zones. All instance type specifications that you specify
+    -- for the Fleet must use the same Availability Zone.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the Capacity Reservation Fleet supports EBS-optimized
+    -- instances types. This optimization provides dedicated throughput to
+    -- Amazon EBS and an optimized configuration stack to provide optimal I\/O
+    -- performance. This optimization isn\'t available with all instance types.
+    -- Additional usage charges apply when using EBS-optimized instance types.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The type of operating system for which the Capacity Reservation Fleet
+    -- reserves capacity.
+    instancePlatform :: Prelude.Maybe CapacityReservationInstancePlatform,
+    -- | The instance type for which the Capacity Reservation Fleet reserves
+    -- capacity.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The priority to assign to the instance type. This value is used to
+    -- determine which of the instance types specified for the Fleet should be
+    -- prioritized for use. A lower value indicates a high priority. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority Instance type priority>
+    -- in the Amazon EC2 User Guide.
+    priority :: Prelude.Maybe Prelude.Natural,
+    -- | The number of capacity units provided by the specified instance type.
+    -- This value, together with the total target capacity that you specify for
+    -- the Fleet determine the number of instances for which the Fleet reserves
+    -- capacity. Both values are based on units that make sense for your
+    -- workload. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+    -- in the Amazon EC2 User Guide.
+    weight :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservationFleetInstanceSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'reservationFleetInstanceSpecification_availabilityZone' - The Availability Zone in which the Capacity Reservation Fleet reserves
+-- the capacity. A Capacity Reservation Fleet can\'t span Availability
+-- Zones. All instance type specifications that you specify for the Fleet
+-- must use the same Availability Zone.
+--
+-- 'availabilityZoneId', 'reservationFleetInstanceSpecification_availabilityZoneId' - The ID of the Availability Zone in which the Capacity Reservation Fleet
+-- reserves the capacity. A Capacity Reservation Fleet can\'t span
+-- Availability Zones. All instance type specifications that you specify
+-- for the Fleet must use the same Availability Zone.
+--
+-- 'ebsOptimized', 'reservationFleetInstanceSpecification_ebsOptimized' - Indicates whether the Capacity Reservation Fleet supports EBS-optimized
+-- instances types. This optimization provides dedicated throughput to
+-- Amazon EBS and an optimized configuration stack to provide optimal I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using EBS-optimized instance types.
+--
+-- 'instancePlatform', 'reservationFleetInstanceSpecification_instancePlatform' - The type of operating system for which the Capacity Reservation Fleet
+-- reserves capacity.
+--
+-- 'instanceType', 'reservationFleetInstanceSpecification_instanceType' - The instance type for which the Capacity Reservation Fleet reserves
+-- capacity.
+--
+-- 'priority', 'reservationFleetInstanceSpecification_priority' - The priority to assign to the instance type. This value is used to
+-- determine which of the instance types specified for the Fleet should be
+-- prioritized for use. A lower value indicates a high priority. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority Instance type priority>
+-- in the Amazon EC2 User Guide.
+--
+-- 'weight', 'reservationFleetInstanceSpecification_weight' - The number of capacity units provided by the specified instance type.
+-- This value, together with the total target capacity that you specify for
+-- the Fleet determine the number of instances for which the Fleet reserves
+-- capacity. Both values are based on units that make sense for your
+-- workload. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+newReservationFleetInstanceSpecification ::
+  ReservationFleetInstanceSpecification
+newReservationFleetInstanceSpecification =
+  ReservationFleetInstanceSpecification'
+    { availabilityZone =
+        Prelude.Nothing,
+      availabilityZoneId = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      instancePlatform = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      priority = Prelude.Nothing,
+      weight = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which the Capacity Reservation Fleet reserves
+-- the capacity. A Capacity Reservation Fleet can\'t span Availability
+-- Zones. All instance type specifications that you specify for the Fleet
+-- must use the same Availability Zone.
+reservationFleetInstanceSpecification_availabilityZone :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe Prelude.Text)
+reservationFleetInstanceSpecification_availabilityZone = Lens.lens (\ReservationFleetInstanceSpecification' {availabilityZone} -> availabilityZone) (\s@ReservationFleetInstanceSpecification' {} a -> s {availabilityZone = a} :: ReservationFleetInstanceSpecification)
+
+-- | The ID of the Availability Zone in which the Capacity Reservation Fleet
+-- reserves the capacity. A Capacity Reservation Fleet can\'t span
+-- Availability Zones. All instance type specifications that you specify
+-- for the Fleet must use the same Availability Zone.
+reservationFleetInstanceSpecification_availabilityZoneId :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe Prelude.Text)
+reservationFleetInstanceSpecification_availabilityZoneId = Lens.lens (\ReservationFleetInstanceSpecification' {availabilityZoneId} -> availabilityZoneId) (\s@ReservationFleetInstanceSpecification' {} a -> s {availabilityZoneId = a} :: ReservationFleetInstanceSpecification)
+
+-- | Indicates whether the Capacity Reservation Fleet supports EBS-optimized
+-- instances types. This optimization provides dedicated throughput to
+-- Amazon EBS and an optimized configuration stack to provide optimal I\/O
+-- performance. This optimization isn\'t available with all instance types.
+-- Additional usage charges apply when using EBS-optimized instance types.
+reservationFleetInstanceSpecification_ebsOptimized :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe Prelude.Bool)
+reservationFleetInstanceSpecification_ebsOptimized = Lens.lens (\ReservationFleetInstanceSpecification' {ebsOptimized} -> ebsOptimized) (\s@ReservationFleetInstanceSpecification' {} a -> s {ebsOptimized = a} :: ReservationFleetInstanceSpecification)
+
+-- | The type of operating system for which the Capacity Reservation Fleet
+-- reserves capacity.
+reservationFleetInstanceSpecification_instancePlatform :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe CapacityReservationInstancePlatform)
+reservationFleetInstanceSpecification_instancePlatform = Lens.lens (\ReservationFleetInstanceSpecification' {instancePlatform} -> instancePlatform) (\s@ReservationFleetInstanceSpecification' {} a -> s {instancePlatform = a} :: ReservationFleetInstanceSpecification)
+
+-- | The instance type for which the Capacity Reservation Fleet reserves
+-- capacity.
+reservationFleetInstanceSpecification_instanceType :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe InstanceType)
+reservationFleetInstanceSpecification_instanceType = Lens.lens (\ReservationFleetInstanceSpecification' {instanceType} -> instanceType) (\s@ReservationFleetInstanceSpecification' {} a -> s {instanceType = a} :: ReservationFleetInstanceSpecification)
+
+-- | The priority to assign to the instance type. This value is used to
+-- determine which of the instance types specified for the Fleet should be
+-- prioritized for use. A lower value indicates a high priority. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority Instance type priority>
+-- in the Amazon EC2 User Guide.
+reservationFleetInstanceSpecification_priority :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe Prelude.Natural)
+reservationFleetInstanceSpecification_priority = Lens.lens (\ReservationFleetInstanceSpecification' {priority} -> priority) (\s@ReservationFleetInstanceSpecification' {} a -> s {priority = a} :: ReservationFleetInstanceSpecification)
+
+-- | The number of capacity units provided by the specified instance type.
+-- This value, together with the total target capacity that you specify for
+-- the Fleet determine the number of instances for which the Fleet reserves
+-- capacity. Both values are based on units that make sense for your
+-- workload. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity Total target capacity>
+-- in the Amazon EC2 User Guide.
+reservationFleetInstanceSpecification_weight :: Lens.Lens' ReservationFleetInstanceSpecification (Prelude.Maybe Prelude.Double)
+reservationFleetInstanceSpecification_weight = Lens.lens (\ReservationFleetInstanceSpecification' {weight} -> weight) (\s@ReservationFleetInstanceSpecification' {} a -> s {weight = a} :: ReservationFleetInstanceSpecification)
+
+instance
+  Prelude.Hashable
+    ReservationFleetInstanceSpecification
+  where
+  hashWithSalt
+    _salt
+    ReservationFleetInstanceSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` availabilityZoneId
+        `Prelude.hashWithSalt` ebsOptimized
+        `Prelude.hashWithSalt` instancePlatform
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` priority
+        `Prelude.hashWithSalt` weight
+
+instance
+  Prelude.NFData
+    ReservationFleetInstanceSpecification
+  where
+  rnf ReservationFleetInstanceSpecification' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf instancePlatform
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf priority
+      `Prelude.seq` Prelude.rnf weight
+
+instance
+  Data.ToQuery
+    ReservationFleetInstanceSpecification
+  where
+  toQuery ReservationFleetInstanceSpecification' {..} =
+    Prelude.mconcat
+      [ "AvailabilityZone" Data.=: availabilityZone,
+        "AvailabilityZoneId" Data.=: availabilityZoneId,
+        "EbsOptimized" Data.=: ebsOptimized,
+        "InstancePlatform" Data.=: instancePlatform,
+        "InstanceType" Data.=: instanceType,
+        "Priority" Data.=: priority,
+        "Weight" Data.=: weight
+      ]
diff --git a/gen/Amazonka/EC2/Types/ReservationState.hs b/gen/Amazonka/EC2/Types/ReservationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservationState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservationState
+  ( ReservationState
+      ( ..,
+        ReservationState_Active,
+        ReservationState_Payment_failed,
+        ReservationState_Payment_pending,
+        ReservationState_Retired
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReservationState = ReservationState'
+  { fromReservationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReservationState_Active :: ReservationState
+pattern ReservationState_Active = ReservationState' "active"
+
+pattern ReservationState_Payment_failed :: ReservationState
+pattern ReservationState_Payment_failed = ReservationState' "payment-failed"
+
+pattern ReservationState_Payment_pending :: ReservationState
+pattern ReservationState_Payment_pending = ReservationState' "payment-pending"
+
+pattern ReservationState_Retired :: ReservationState
+pattern ReservationState_Retired = ReservationState' "retired"
+
+{-# COMPLETE
+  ReservationState_Active,
+  ReservationState_Payment_failed,
+  ReservationState_Payment_pending,
+  ReservationState_Retired,
+  ReservationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ReservationValue.hs b/gen/Amazonka/EC2/Types/ReservationValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservationValue.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservationValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservationValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The cost associated with the Reserved Instance.
+--
+-- /See:/ 'newReservationValue' smart constructor.
+data ReservationValue = ReservationValue'
+  { -- | The hourly rate of the reservation.
+    hourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The balance of the total value (the sum of remainingUpfrontValue +
+    -- hourlyPrice * number of hours remaining).
+    remainingTotalValue :: Prelude.Maybe Prelude.Text,
+    -- | The remaining upfront cost of the reservation.
+    remainingUpfrontValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservationValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'hourlyPrice', 'reservationValue_hourlyPrice' - The hourly rate of the reservation.
+--
+-- 'remainingTotalValue', 'reservationValue_remainingTotalValue' - The balance of the total value (the sum of remainingUpfrontValue +
+-- hourlyPrice * number of hours remaining).
+--
+-- 'remainingUpfrontValue', 'reservationValue_remainingUpfrontValue' - The remaining upfront cost of the reservation.
+newReservationValue ::
+  ReservationValue
+newReservationValue =
+  ReservationValue'
+    { hourlyPrice = Prelude.Nothing,
+      remainingTotalValue = Prelude.Nothing,
+      remainingUpfrontValue = Prelude.Nothing
+    }
+
+-- | The hourly rate of the reservation.
+reservationValue_hourlyPrice :: Lens.Lens' ReservationValue (Prelude.Maybe Prelude.Text)
+reservationValue_hourlyPrice = Lens.lens (\ReservationValue' {hourlyPrice} -> hourlyPrice) (\s@ReservationValue' {} a -> s {hourlyPrice = a} :: ReservationValue)
+
+-- | The balance of the total value (the sum of remainingUpfrontValue +
+-- hourlyPrice * number of hours remaining).
+reservationValue_remainingTotalValue :: Lens.Lens' ReservationValue (Prelude.Maybe Prelude.Text)
+reservationValue_remainingTotalValue = Lens.lens (\ReservationValue' {remainingTotalValue} -> remainingTotalValue) (\s@ReservationValue' {} a -> s {remainingTotalValue = a} :: ReservationValue)
+
+-- | The remaining upfront cost of the reservation.
+reservationValue_remainingUpfrontValue :: Lens.Lens' ReservationValue (Prelude.Maybe Prelude.Text)
+reservationValue_remainingUpfrontValue = Lens.lens (\ReservationValue' {remainingUpfrontValue} -> remainingUpfrontValue) (\s@ReservationValue' {} a -> s {remainingUpfrontValue = a} :: ReservationValue)
+
+instance Data.FromXML ReservationValue where
+  parseXML x =
+    ReservationValue'
+      Prelude.<$> (x Data..@? "hourlyPrice")
+      Prelude.<*> (x Data..@? "remainingTotalValue")
+      Prelude.<*> (x Data..@? "remainingUpfrontValue")
+
+instance Prelude.Hashable ReservationValue where
+  hashWithSalt _salt ReservationValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` hourlyPrice
+      `Prelude.hashWithSalt` remainingTotalValue
+      `Prelude.hashWithSalt` remainingUpfrontValue
+
+instance Prelude.NFData ReservationValue where
+  rnf ReservationValue' {..} =
+    Prelude.rnf hourlyPrice
+      `Prelude.seq` Prelude.rnf remainingTotalValue
+      `Prelude.seq` Prelude.rnf remainingUpfrontValue
diff --git a/gen/Amazonka/EC2/Types/ReservedInstanceLimitPrice.hs b/gen/Amazonka/EC2/Types/ReservedInstanceLimitPrice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstanceLimitPrice.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstanceLimitPrice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstanceLimitPrice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the limit price of a Reserved Instance offering.
+--
+-- /See:/ 'newReservedInstanceLimitPrice' smart constructor.
+data ReservedInstanceLimitPrice = ReservedInstanceLimitPrice'
+  { -- | Used for Reserved Instance Marketplace offerings. Specifies the limit
+    -- price on the total order (instanceCount * price).
+    amount :: Prelude.Maybe Prelude.Double,
+    -- | The currency in which the @limitPrice@ amount is specified. At this
+    -- time, the only supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstanceLimitPrice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amount', 'reservedInstanceLimitPrice_amount' - Used for Reserved Instance Marketplace offerings. Specifies the limit
+-- price on the total order (instanceCount * price).
+--
+-- 'currencyCode', 'reservedInstanceLimitPrice_currencyCode' - The currency in which the @limitPrice@ amount is specified. At this
+-- time, the only supported currency is @USD@.
+newReservedInstanceLimitPrice ::
+  ReservedInstanceLimitPrice
+newReservedInstanceLimitPrice =
+  ReservedInstanceLimitPrice'
+    { amount =
+        Prelude.Nothing,
+      currencyCode = Prelude.Nothing
+    }
+
+-- | Used for Reserved Instance Marketplace offerings. Specifies the limit
+-- price on the total order (instanceCount * price).
+reservedInstanceLimitPrice_amount :: Lens.Lens' ReservedInstanceLimitPrice (Prelude.Maybe Prelude.Double)
+reservedInstanceLimitPrice_amount = Lens.lens (\ReservedInstanceLimitPrice' {amount} -> amount) (\s@ReservedInstanceLimitPrice' {} a -> s {amount = a} :: ReservedInstanceLimitPrice)
+
+-- | The currency in which the @limitPrice@ amount is specified. At this
+-- time, the only supported currency is @USD@.
+reservedInstanceLimitPrice_currencyCode :: Lens.Lens' ReservedInstanceLimitPrice (Prelude.Maybe CurrencyCodeValues)
+reservedInstanceLimitPrice_currencyCode = Lens.lens (\ReservedInstanceLimitPrice' {currencyCode} -> currencyCode) (\s@ReservedInstanceLimitPrice' {} a -> s {currencyCode = a} :: ReservedInstanceLimitPrice)
+
+instance Prelude.Hashable ReservedInstanceLimitPrice where
+  hashWithSalt _salt ReservedInstanceLimitPrice' {..} =
+    _salt
+      `Prelude.hashWithSalt` amount
+      `Prelude.hashWithSalt` currencyCode
+
+instance Prelude.NFData ReservedInstanceLimitPrice where
+  rnf ReservedInstanceLimitPrice' {..} =
+    Prelude.rnf amount
+      `Prelude.seq` Prelude.rnf currencyCode
+
+instance Data.ToQuery ReservedInstanceLimitPrice where
+  toQuery ReservedInstanceLimitPrice' {..} =
+    Prelude.mconcat
+      [ "Amount" Data.=: amount,
+        "CurrencyCode" Data.=: currencyCode
+      ]
diff --git a/gen/Amazonka/EC2/Types/ReservedInstanceReservationValue.hs b/gen/Amazonka/EC2/Types/ReservedInstanceReservationValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstanceReservationValue.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstanceReservationValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstanceReservationValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReservationValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | The total value of the Convertible Reserved Instance.
+--
+-- /See:/ 'newReservedInstanceReservationValue' smart constructor.
+data ReservedInstanceReservationValue = ReservedInstanceReservationValue'
+  { -- | The total value of the Convertible Reserved Instance that you are
+    -- exchanging.
+    reservationValue :: Prelude.Maybe ReservationValue,
+    -- | The ID of the Convertible Reserved Instance that you are exchanging.
+    reservedInstanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstanceReservationValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservationValue', 'reservedInstanceReservationValue_reservationValue' - The total value of the Convertible Reserved Instance that you are
+-- exchanging.
+--
+-- 'reservedInstanceId', 'reservedInstanceReservationValue_reservedInstanceId' - The ID of the Convertible Reserved Instance that you are exchanging.
+newReservedInstanceReservationValue ::
+  ReservedInstanceReservationValue
+newReservedInstanceReservationValue =
+  ReservedInstanceReservationValue'
+    { reservationValue =
+        Prelude.Nothing,
+      reservedInstanceId = Prelude.Nothing
+    }
+
+-- | The total value of the Convertible Reserved Instance that you are
+-- exchanging.
+reservedInstanceReservationValue_reservationValue :: Lens.Lens' ReservedInstanceReservationValue (Prelude.Maybe ReservationValue)
+reservedInstanceReservationValue_reservationValue = Lens.lens (\ReservedInstanceReservationValue' {reservationValue} -> reservationValue) (\s@ReservedInstanceReservationValue' {} a -> s {reservationValue = a} :: ReservedInstanceReservationValue)
+
+-- | The ID of the Convertible Reserved Instance that you are exchanging.
+reservedInstanceReservationValue_reservedInstanceId :: Lens.Lens' ReservedInstanceReservationValue (Prelude.Maybe Prelude.Text)
+reservedInstanceReservationValue_reservedInstanceId = Lens.lens (\ReservedInstanceReservationValue' {reservedInstanceId} -> reservedInstanceId) (\s@ReservedInstanceReservationValue' {} a -> s {reservedInstanceId = a} :: ReservedInstanceReservationValue)
+
+instance
+  Data.FromXML
+    ReservedInstanceReservationValue
+  where
+  parseXML x =
+    ReservedInstanceReservationValue'
+      Prelude.<$> (x Data..@? "reservationValue")
+      Prelude.<*> (x Data..@? "reservedInstanceId")
+
+instance
+  Prelude.Hashable
+    ReservedInstanceReservationValue
+  where
+  hashWithSalt
+    _salt
+    ReservedInstanceReservationValue' {..} =
+      _salt
+        `Prelude.hashWithSalt` reservationValue
+        `Prelude.hashWithSalt` reservedInstanceId
+
+instance
+  Prelude.NFData
+    ReservedInstanceReservationValue
+  where
+  rnf ReservedInstanceReservationValue' {..} =
+    Prelude.rnf reservationValue
+      `Prelude.seq` Prelude.rnf reservedInstanceId
diff --git a/gen/Amazonka/EC2/Types/ReservedInstanceState.hs b/gen/Amazonka/EC2/Types/ReservedInstanceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstanceState.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstanceState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstanceState
+  ( ReservedInstanceState
+      ( ..,
+        ReservedInstanceState_Active,
+        ReservedInstanceState_Payment_failed,
+        ReservedInstanceState_Payment_pending,
+        ReservedInstanceState_Queued,
+        ReservedInstanceState_Queued_deleted,
+        ReservedInstanceState_Retired
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReservedInstanceState = ReservedInstanceState'
+  { fromReservedInstanceState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ReservedInstanceState_Active :: ReservedInstanceState
+pattern ReservedInstanceState_Active = ReservedInstanceState' "active"
+
+pattern ReservedInstanceState_Payment_failed :: ReservedInstanceState
+pattern ReservedInstanceState_Payment_failed = ReservedInstanceState' "payment-failed"
+
+pattern ReservedInstanceState_Payment_pending :: ReservedInstanceState
+pattern ReservedInstanceState_Payment_pending = ReservedInstanceState' "payment-pending"
+
+pattern ReservedInstanceState_Queued :: ReservedInstanceState
+pattern ReservedInstanceState_Queued = ReservedInstanceState' "queued"
+
+pattern ReservedInstanceState_Queued_deleted :: ReservedInstanceState
+pattern ReservedInstanceState_Queued_deleted = ReservedInstanceState' "queued-deleted"
+
+pattern ReservedInstanceState_Retired :: ReservedInstanceState
+pattern ReservedInstanceState_Retired = ReservedInstanceState' "retired"
+
+{-# COMPLETE
+  ReservedInstanceState_Active,
+  ReservedInstanceState_Payment_failed,
+  ReservedInstanceState_Payment_pending,
+  ReservedInstanceState_Queued,
+  ReservedInstanceState_Queued_deleted,
+  ReservedInstanceState_Retired,
+  ReservedInstanceState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ReservedInstances.hs b/gen/Amazonka/EC2/Types/ReservedInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstances.hs
@@ -0,0 +1,298 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstances where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.OfferingClassType
+import Amazonka.EC2.Types.OfferingTypeValues
+import Amazonka.EC2.Types.RIProductDescription
+import Amazonka.EC2.Types.RecurringCharge
+import Amazonka.EC2.Types.ReservedInstanceState
+import Amazonka.EC2.Types.Scope
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.Tenancy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance.
+--
+-- /See:/ 'newReservedInstances' smart constructor.
+data ReservedInstances = ReservedInstances'
+  { -- | The Availability Zone in which the Reserved Instance can be used.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The currency of the Reserved Instance. It\'s specified using ISO 4217
+    -- standard currency codes. At this time, the only supported currency is
+    -- @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The duration of the Reserved Instance, in seconds.
+    duration :: Prelude.Maybe Prelude.Integer,
+    -- | The time when the Reserved Instance expires.
+    end :: Prelude.Maybe Data.ISO8601,
+    -- | The purchase price of the Reserved Instance.
+    fixedPrice :: Prelude.Maybe Prelude.Double,
+    -- | The number of reservations purchased.
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The tenancy of the instance.
+    instanceTenancy :: Prelude.Maybe Tenancy,
+    -- | The instance type on which the Reserved Instance can be used.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The offering class of the Reserved Instance.
+    offeringClass :: Prelude.Maybe OfferingClassType,
+    -- | The Reserved Instance offering type.
+    offeringType :: Prelude.Maybe OfferingTypeValues,
+    -- | The Reserved Instance product platform description.
+    productDescription :: Prelude.Maybe RIProductDescription,
+    -- | The recurring charge tag assigned to the resource.
+    recurringCharges :: Prelude.Maybe [RecurringCharge],
+    -- | The ID of the Reserved Instance.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text,
+    -- | The scope of the Reserved Instance.
+    scope :: Prelude.Maybe Scope,
+    -- | The date and time the Reserved Instance started.
+    start :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the Reserved Instance purchase.
+    state :: Prelude.Maybe ReservedInstanceState,
+    -- | Any tags assigned to the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The usage price of the Reserved Instance, per hour.
+    usagePrice :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'reservedInstances_availabilityZone' - The Availability Zone in which the Reserved Instance can be used.
+--
+-- 'currencyCode', 'reservedInstances_currencyCode' - The currency of the Reserved Instance. It\'s specified using ISO 4217
+-- standard currency codes. At this time, the only supported currency is
+-- @USD@.
+--
+-- 'duration', 'reservedInstances_duration' - The duration of the Reserved Instance, in seconds.
+--
+-- 'end', 'reservedInstances_end' - The time when the Reserved Instance expires.
+--
+-- 'fixedPrice', 'reservedInstances_fixedPrice' - The purchase price of the Reserved Instance.
+--
+-- 'instanceCount', 'reservedInstances_instanceCount' - The number of reservations purchased.
+--
+-- 'instanceTenancy', 'reservedInstances_instanceTenancy' - The tenancy of the instance.
+--
+-- 'instanceType', 'reservedInstances_instanceType' - The instance type on which the Reserved Instance can be used.
+--
+-- 'offeringClass', 'reservedInstances_offeringClass' - The offering class of the Reserved Instance.
+--
+-- 'offeringType', 'reservedInstances_offeringType' - The Reserved Instance offering type.
+--
+-- 'productDescription', 'reservedInstances_productDescription' - The Reserved Instance product platform description.
+--
+-- 'recurringCharges', 'reservedInstances_recurringCharges' - The recurring charge tag assigned to the resource.
+--
+-- 'reservedInstancesId', 'reservedInstances_reservedInstancesId' - The ID of the Reserved Instance.
+--
+-- 'scope', 'reservedInstances_scope' - The scope of the Reserved Instance.
+--
+-- 'start', 'reservedInstances_start' - The date and time the Reserved Instance started.
+--
+-- 'state', 'reservedInstances_state' - The state of the Reserved Instance purchase.
+--
+-- 'tags', 'reservedInstances_tags' - Any tags assigned to the resource.
+--
+-- 'usagePrice', 'reservedInstances_usagePrice' - The usage price of the Reserved Instance, per hour.
+newReservedInstances ::
+  ReservedInstances
+newReservedInstances =
+  ReservedInstances'
+    { availabilityZone =
+        Prelude.Nothing,
+      currencyCode = Prelude.Nothing,
+      duration = Prelude.Nothing,
+      end = Prelude.Nothing,
+      fixedPrice = Prelude.Nothing,
+      instanceCount = Prelude.Nothing,
+      instanceTenancy = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      offeringClass = Prelude.Nothing,
+      offeringType = Prelude.Nothing,
+      productDescription = Prelude.Nothing,
+      recurringCharges = Prelude.Nothing,
+      reservedInstancesId = Prelude.Nothing,
+      scope = Prelude.Nothing,
+      start = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      usagePrice = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which the Reserved Instance can be used.
+reservedInstances_availabilityZone :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.Text)
+reservedInstances_availabilityZone = Lens.lens (\ReservedInstances' {availabilityZone} -> availabilityZone) (\s@ReservedInstances' {} a -> s {availabilityZone = a} :: ReservedInstances)
+
+-- | The currency of the Reserved Instance. It\'s specified using ISO 4217
+-- standard currency codes. At this time, the only supported currency is
+-- @USD@.
+reservedInstances_currencyCode :: Lens.Lens' ReservedInstances (Prelude.Maybe CurrencyCodeValues)
+reservedInstances_currencyCode = Lens.lens (\ReservedInstances' {currencyCode} -> currencyCode) (\s@ReservedInstances' {} a -> s {currencyCode = a} :: ReservedInstances)
+
+-- | The duration of the Reserved Instance, in seconds.
+reservedInstances_duration :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.Integer)
+reservedInstances_duration = Lens.lens (\ReservedInstances' {duration} -> duration) (\s@ReservedInstances' {} a -> s {duration = a} :: ReservedInstances)
+
+-- | The time when the Reserved Instance expires.
+reservedInstances_end :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.UTCTime)
+reservedInstances_end = Lens.lens (\ReservedInstances' {end} -> end) (\s@ReservedInstances' {} a -> s {end = a} :: ReservedInstances) Prelude.. Lens.mapping Data._Time
+
+-- | The purchase price of the Reserved Instance.
+reservedInstances_fixedPrice :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.Double)
+reservedInstances_fixedPrice = Lens.lens (\ReservedInstances' {fixedPrice} -> fixedPrice) (\s@ReservedInstances' {} a -> s {fixedPrice = a} :: ReservedInstances)
+
+-- | The number of reservations purchased.
+reservedInstances_instanceCount :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.Int)
+reservedInstances_instanceCount = Lens.lens (\ReservedInstances' {instanceCount} -> instanceCount) (\s@ReservedInstances' {} a -> s {instanceCount = a} :: ReservedInstances)
+
+-- | The tenancy of the instance.
+reservedInstances_instanceTenancy :: Lens.Lens' ReservedInstances (Prelude.Maybe Tenancy)
+reservedInstances_instanceTenancy = Lens.lens (\ReservedInstances' {instanceTenancy} -> instanceTenancy) (\s@ReservedInstances' {} a -> s {instanceTenancy = a} :: ReservedInstances)
+
+-- | The instance type on which the Reserved Instance can be used.
+reservedInstances_instanceType :: Lens.Lens' ReservedInstances (Prelude.Maybe InstanceType)
+reservedInstances_instanceType = Lens.lens (\ReservedInstances' {instanceType} -> instanceType) (\s@ReservedInstances' {} a -> s {instanceType = a} :: ReservedInstances)
+
+-- | The offering class of the Reserved Instance.
+reservedInstances_offeringClass :: Lens.Lens' ReservedInstances (Prelude.Maybe OfferingClassType)
+reservedInstances_offeringClass = Lens.lens (\ReservedInstances' {offeringClass} -> offeringClass) (\s@ReservedInstances' {} a -> s {offeringClass = a} :: ReservedInstances)
+
+-- | The Reserved Instance offering type.
+reservedInstances_offeringType :: Lens.Lens' ReservedInstances (Prelude.Maybe OfferingTypeValues)
+reservedInstances_offeringType = Lens.lens (\ReservedInstances' {offeringType} -> offeringType) (\s@ReservedInstances' {} a -> s {offeringType = a} :: ReservedInstances)
+
+-- | The Reserved Instance product platform description.
+reservedInstances_productDescription :: Lens.Lens' ReservedInstances (Prelude.Maybe RIProductDescription)
+reservedInstances_productDescription = Lens.lens (\ReservedInstances' {productDescription} -> productDescription) (\s@ReservedInstances' {} a -> s {productDescription = a} :: ReservedInstances)
+
+-- | The recurring charge tag assigned to the resource.
+reservedInstances_recurringCharges :: Lens.Lens' ReservedInstances (Prelude.Maybe [RecurringCharge])
+reservedInstances_recurringCharges = Lens.lens (\ReservedInstances' {recurringCharges} -> recurringCharges) (\s@ReservedInstances' {} a -> s {recurringCharges = a} :: ReservedInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Reserved Instance.
+reservedInstances_reservedInstancesId :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.Text)
+reservedInstances_reservedInstancesId = Lens.lens (\ReservedInstances' {reservedInstancesId} -> reservedInstancesId) (\s@ReservedInstances' {} a -> s {reservedInstancesId = a} :: ReservedInstances)
+
+-- | The scope of the Reserved Instance.
+reservedInstances_scope :: Lens.Lens' ReservedInstances (Prelude.Maybe Scope)
+reservedInstances_scope = Lens.lens (\ReservedInstances' {scope} -> scope) (\s@ReservedInstances' {} a -> s {scope = a} :: ReservedInstances)
+
+-- | The date and time the Reserved Instance started.
+reservedInstances_start :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.UTCTime)
+reservedInstances_start = Lens.lens (\ReservedInstances' {start} -> start) (\s@ReservedInstances' {} a -> s {start = a} :: ReservedInstances) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the Reserved Instance purchase.
+reservedInstances_state :: Lens.Lens' ReservedInstances (Prelude.Maybe ReservedInstanceState)
+reservedInstances_state = Lens.lens (\ReservedInstances' {state} -> state) (\s@ReservedInstances' {} a -> s {state = a} :: ReservedInstances)
+
+-- | Any tags assigned to the resource.
+reservedInstances_tags :: Lens.Lens' ReservedInstances (Prelude.Maybe [Tag])
+reservedInstances_tags = Lens.lens (\ReservedInstances' {tags} -> tags) (\s@ReservedInstances' {} a -> s {tags = a} :: ReservedInstances) Prelude.. Lens.mapping Lens.coerced
+
+-- | The usage price of the Reserved Instance, per hour.
+reservedInstances_usagePrice :: Lens.Lens' ReservedInstances (Prelude.Maybe Prelude.Double)
+reservedInstances_usagePrice = Lens.lens (\ReservedInstances' {usagePrice} -> usagePrice) (\s@ReservedInstances' {} a -> s {usagePrice = a} :: ReservedInstances)
+
+instance Data.FromXML ReservedInstances where
+  parseXML x =
+    ReservedInstances'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "currencyCode")
+      Prelude.<*> (x Data..@? "duration")
+      Prelude.<*> (x Data..@? "end")
+      Prelude.<*> (x Data..@? "fixedPrice")
+      Prelude.<*> (x Data..@? "instanceCount")
+      Prelude.<*> (x Data..@? "instanceTenancy")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "offeringClass")
+      Prelude.<*> (x Data..@? "offeringType")
+      Prelude.<*> (x Data..@? "productDescription")
+      Prelude.<*> ( x
+                      Data..@? "recurringCharges"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "reservedInstancesId")
+      Prelude.<*> (x Data..@? "scope")
+      Prelude.<*> (x Data..@? "start")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "usagePrice")
+
+instance Prelude.Hashable ReservedInstances where
+  hashWithSalt _salt ReservedInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` end
+      `Prelude.hashWithSalt` fixedPrice
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` instanceTenancy
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` offeringClass
+      `Prelude.hashWithSalt` offeringType
+      `Prelude.hashWithSalt` productDescription
+      `Prelude.hashWithSalt` recurringCharges
+      `Prelude.hashWithSalt` reservedInstancesId
+      `Prelude.hashWithSalt` scope
+      `Prelude.hashWithSalt` start
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` usagePrice
+
+instance Prelude.NFData ReservedInstances where
+  rnf ReservedInstances' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf end
+      `Prelude.seq` Prelude.rnf fixedPrice
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf instanceTenancy
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf offeringClass
+      `Prelude.seq` Prelude.rnf offeringType
+      `Prelude.seq` Prelude.rnf productDescription
+      `Prelude.seq` Prelude.rnf recurringCharges
+      `Prelude.seq` Prelude.rnf reservedInstancesId
+      `Prelude.seq` Prelude.rnf scope
+      `Prelude.seq` Prelude.rnf start
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf usagePrice
diff --git a/gen/Amazonka/EC2/Types/ReservedInstancesConfiguration.hs b/gen/Amazonka/EC2/Types/ReservedInstancesConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstancesConfiguration.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstancesConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstancesConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.Scope
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration settings for the modified Reserved
+-- Instances.
+--
+-- /See:/ 'newReservedInstancesConfiguration' smart constructor.
+data ReservedInstancesConfiguration = ReservedInstancesConfiguration'
+  { -- | The Availability Zone for the modified Reserved Instances.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The number of modified Reserved Instances.
+    --
+    -- This is a required field for a request.
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The instance type for the modified Reserved Instances.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The network platform of the modified Reserved Instances, which is either
+    -- EC2-Classic or EC2-VPC.
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | Whether the Reserved Instance is applied to instances in a Region or
+    -- instances in a specific Availability Zone.
+    scope :: Prelude.Maybe Scope
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstancesConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'reservedInstancesConfiguration_availabilityZone' - The Availability Zone for the modified Reserved Instances.
+--
+-- 'instanceCount', 'reservedInstancesConfiguration_instanceCount' - The number of modified Reserved Instances.
+--
+-- This is a required field for a request.
+--
+-- 'instanceType', 'reservedInstancesConfiguration_instanceType' - The instance type for the modified Reserved Instances.
+--
+-- 'platform', 'reservedInstancesConfiguration_platform' - The network platform of the modified Reserved Instances, which is either
+-- EC2-Classic or EC2-VPC.
+--
+-- 'scope', 'reservedInstancesConfiguration_scope' - Whether the Reserved Instance is applied to instances in a Region or
+-- instances in a specific Availability Zone.
+newReservedInstancesConfiguration ::
+  ReservedInstancesConfiguration
+newReservedInstancesConfiguration =
+  ReservedInstancesConfiguration'
+    { availabilityZone =
+        Prelude.Nothing,
+      instanceCount = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      scope = Prelude.Nothing
+    }
+
+-- | The Availability Zone for the modified Reserved Instances.
+reservedInstancesConfiguration_availabilityZone :: Lens.Lens' ReservedInstancesConfiguration (Prelude.Maybe Prelude.Text)
+reservedInstancesConfiguration_availabilityZone = Lens.lens (\ReservedInstancesConfiguration' {availabilityZone} -> availabilityZone) (\s@ReservedInstancesConfiguration' {} a -> s {availabilityZone = a} :: ReservedInstancesConfiguration)
+
+-- | The number of modified Reserved Instances.
+--
+-- This is a required field for a request.
+reservedInstancesConfiguration_instanceCount :: Lens.Lens' ReservedInstancesConfiguration (Prelude.Maybe Prelude.Int)
+reservedInstancesConfiguration_instanceCount = Lens.lens (\ReservedInstancesConfiguration' {instanceCount} -> instanceCount) (\s@ReservedInstancesConfiguration' {} a -> s {instanceCount = a} :: ReservedInstancesConfiguration)
+
+-- | The instance type for the modified Reserved Instances.
+reservedInstancesConfiguration_instanceType :: Lens.Lens' ReservedInstancesConfiguration (Prelude.Maybe InstanceType)
+reservedInstancesConfiguration_instanceType = Lens.lens (\ReservedInstancesConfiguration' {instanceType} -> instanceType) (\s@ReservedInstancesConfiguration' {} a -> s {instanceType = a} :: ReservedInstancesConfiguration)
+
+-- | The network platform of the modified Reserved Instances, which is either
+-- EC2-Classic or EC2-VPC.
+reservedInstancesConfiguration_platform :: Lens.Lens' ReservedInstancesConfiguration (Prelude.Maybe Prelude.Text)
+reservedInstancesConfiguration_platform = Lens.lens (\ReservedInstancesConfiguration' {platform} -> platform) (\s@ReservedInstancesConfiguration' {} a -> s {platform = a} :: ReservedInstancesConfiguration)
+
+-- | Whether the Reserved Instance is applied to instances in a Region or
+-- instances in a specific Availability Zone.
+reservedInstancesConfiguration_scope :: Lens.Lens' ReservedInstancesConfiguration (Prelude.Maybe Scope)
+reservedInstancesConfiguration_scope = Lens.lens (\ReservedInstancesConfiguration' {scope} -> scope) (\s@ReservedInstancesConfiguration' {} a -> s {scope = a} :: ReservedInstancesConfiguration)
+
+instance Data.FromXML ReservedInstancesConfiguration where
+  parseXML x =
+    ReservedInstancesConfiguration'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "instanceCount")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "scope")
+
+instance
+  Prelude.Hashable
+    ReservedInstancesConfiguration
+  where
+  hashWithSalt
+    _salt
+    ReservedInstancesConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` availabilityZone
+        `Prelude.hashWithSalt` instanceCount
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` platform
+        `Prelude.hashWithSalt` scope
+
+instance
+  Prelude.NFData
+    ReservedInstancesConfiguration
+  where
+  rnf ReservedInstancesConfiguration' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf scope
+
+instance Data.ToQuery ReservedInstancesConfiguration where
+  toQuery ReservedInstancesConfiguration' {..} =
+    Prelude.mconcat
+      [ "AvailabilityZone" Data.=: availabilityZone,
+        "InstanceCount" Data.=: instanceCount,
+        "InstanceType" Data.=: instanceType,
+        "Platform" Data.=: platform,
+        "Scope" Data.=: scope
+      ]
diff --git a/gen/Amazonka/EC2/Types/ReservedInstancesId.hs b/gen/Amazonka/EC2/Types/ReservedInstancesId.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstancesId.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstancesId
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstancesId where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the ID of a Reserved Instance.
+--
+-- /See:/ 'newReservedInstancesId' smart constructor.
+data ReservedInstancesId = ReservedInstancesId'
+  { -- | The ID of the Reserved Instance.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstancesId' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesId', 'reservedInstancesId_reservedInstancesId' - The ID of the Reserved Instance.
+newReservedInstancesId ::
+  ReservedInstancesId
+newReservedInstancesId =
+  ReservedInstancesId'
+    { reservedInstancesId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the Reserved Instance.
+reservedInstancesId_reservedInstancesId :: Lens.Lens' ReservedInstancesId (Prelude.Maybe Prelude.Text)
+reservedInstancesId_reservedInstancesId = Lens.lens (\ReservedInstancesId' {reservedInstancesId} -> reservedInstancesId) (\s@ReservedInstancesId' {} a -> s {reservedInstancesId = a} :: ReservedInstancesId)
+
+instance Data.FromXML ReservedInstancesId where
+  parseXML x =
+    ReservedInstancesId'
+      Prelude.<$> (x Data..@? "reservedInstancesId")
+
+instance Prelude.Hashable ReservedInstancesId where
+  hashWithSalt _salt ReservedInstancesId' {..} =
+    _salt `Prelude.hashWithSalt` reservedInstancesId
+
+instance Prelude.NFData ReservedInstancesId where
+  rnf ReservedInstancesId' {..} =
+    Prelude.rnf reservedInstancesId
diff --git a/gen/Amazonka/EC2/Types/ReservedInstancesListing.hs b/gen/Amazonka/EC2/Types/ReservedInstancesListing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstancesListing.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstancesListing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstancesListing where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceCount
+import Amazonka.EC2.Types.ListingStatus
+import Amazonka.EC2.Types.PriceSchedule
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance listing.
+--
+-- /See:/ 'newReservedInstancesListing' smart constructor.
+data ReservedInstancesListing = ReservedInstancesListing'
+  { -- | A unique, case-sensitive key supplied by the client to ensure that the
+    -- request is idempotent. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The time the listing was created.
+    createDate :: Prelude.Maybe Data.ISO8601,
+    -- | The number of instances in this state.
+    instanceCounts :: Prelude.Maybe [InstanceCount],
+    -- | The price of the Reserved Instance listing.
+    priceSchedules :: Prelude.Maybe [PriceSchedule],
+    -- | The ID of the Reserved Instance.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Reserved Instance listing.
+    reservedInstancesListingId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Reserved Instance listing.
+    status :: Prelude.Maybe ListingStatus,
+    -- | The reason for the current status of the Reserved Instance listing. The
+    -- response can be blank.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The last modified timestamp of the listing.
+    updateDate :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstancesListing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'reservedInstancesListing_clientToken' - A unique, case-sensitive key supplied by the client to ensure that the
+-- request is idempotent. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'createDate', 'reservedInstancesListing_createDate' - The time the listing was created.
+--
+-- 'instanceCounts', 'reservedInstancesListing_instanceCounts' - The number of instances in this state.
+--
+-- 'priceSchedules', 'reservedInstancesListing_priceSchedules' - The price of the Reserved Instance listing.
+--
+-- 'reservedInstancesId', 'reservedInstancesListing_reservedInstancesId' - The ID of the Reserved Instance.
+--
+-- 'reservedInstancesListingId', 'reservedInstancesListing_reservedInstancesListingId' - The ID of the Reserved Instance listing.
+--
+-- 'status', 'reservedInstancesListing_status' - The status of the Reserved Instance listing.
+--
+-- 'statusMessage', 'reservedInstancesListing_statusMessage' - The reason for the current status of the Reserved Instance listing. The
+-- response can be blank.
+--
+-- 'tags', 'reservedInstancesListing_tags' - Any tags assigned to the resource.
+--
+-- 'updateDate', 'reservedInstancesListing_updateDate' - The last modified timestamp of the listing.
+newReservedInstancesListing ::
+  ReservedInstancesListing
+newReservedInstancesListing =
+  ReservedInstancesListing'
+    { clientToken =
+        Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      instanceCounts = Prelude.Nothing,
+      priceSchedules = Prelude.Nothing,
+      reservedInstancesId = Prelude.Nothing,
+      reservedInstancesListingId = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      updateDate = Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive key supplied by the client to ensure that the
+-- request is idempotent. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+reservedInstancesListing_clientToken :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe Prelude.Text)
+reservedInstancesListing_clientToken = Lens.lens (\ReservedInstancesListing' {clientToken} -> clientToken) (\s@ReservedInstancesListing' {} a -> s {clientToken = a} :: ReservedInstancesListing)
+
+-- | The time the listing was created.
+reservedInstancesListing_createDate :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe Prelude.UTCTime)
+reservedInstancesListing_createDate = Lens.lens (\ReservedInstancesListing' {createDate} -> createDate) (\s@ReservedInstancesListing' {} a -> s {createDate = a} :: ReservedInstancesListing) Prelude.. Lens.mapping Data._Time
+
+-- | The number of instances in this state.
+reservedInstancesListing_instanceCounts :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe [InstanceCount])
+reservedInstancesListing_instanceCounts = Lens.lens (\ReservedInstancesListing' {instanceCounts} -> instanceCounts) (\s@ReservedInstancesListing' {} a -> s {instanceCounts = a} :: ReservedInstancesListing) Prelude.. Lens.mapping Lens.coerced
+
+-- | The price of the Reserved Instance listing.
+reservedInstancesListing_priceSchedules :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe [PriceSchedule])
+reservedInstancesListing_priceSchedules = Lens.lens (\ReservedInstancesListing' {priceSchedules} -> priceSchedules) (\s@ReservedInstancesListing' {} a -> s {priceSchedules = a} :: ReservedInstancesListing) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Reserved Instance.
+reservedInstancesListing_reservedInstancesId :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe Prelude.Text)
+reservedInstancesListing_reservedInstancesId = Lens.lens (\ReservedInstancesListing' {reservedInstancesId} -> reservedInstancesId) (\s@ReservedInstancesListing' {} a -> s {reservedInstancesId = a} :: ReservedInstancesListing)
+
+-- | The ID of the Reserved Instance listing.
+reservedInstancesListing_reservedInstancesListingId :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe Prelude.Text)
+reservedInstancesListing_reservedInstancesListingId = Lens.lens (\ReservedInstancesListing' {reservedInstancesListingId} -> reservedInstancesListingId) (\s@ReservedInstancesListing' {} a -> s {reservedInstancesListingId = a} :: ReservedInstancesListing)
+
+-- | The status of the Reserved Instance listing.
+reservedInstancesListing_status :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe ListingStatus)
+reservedInstancesListing_status = Lens.lens (\ReservedInstancesListing' {status} -> status) (\s@ReservedInstancesListing' {} a -> s {status = a} :: ReservedInstancesListing)
+
+-- | The reason for the current status of the Reserved Instance listing. The
+-- response can be blank.
+reservedInstancesListing_statusMessage :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe Prelude.Text)
+reservedInstancesListing_statusMessage = Lens.lens (\ReservedInstancesListing' {statusMessage} -> statusMessage) (\s@ReservedInstancesListing' {} a -> s {statusMessage = a} :: ReservedInstancesListing)
+
+-- | Any tags assigned to the resource.
+reservedInstancesListing_tags :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe [Tag])
+reservedInstancesListing_tags = Lens.lens (\ReservedInstancesListing' {tags} -> tags) (\s@ReservedInstancesListing' {} a -> s {tags = a} :: ReservedInstancesListing) Prelude.. Lens.mapping Lens.coerced
+
+-- | The last modified timestamp of the listing.
+reservedInstancesListing_updateDate :: Lens.Lens' ReservedInstancesListing (Prelude.Maybe Prelude.UTCTime)
+reservedInstancesListing_updateDate = Lens.lens (\ReservedInstancesListing' {updateDate} -> updateDate) (\s@ReservedInstancesListing' {} a -> s {updateDate = a} :: ReservedInstancesListing) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML ReservedInstancesListing where
+  parseXML x =
+    ReservedInstancesListing'
+      Prelude.<$> (x Data..@? "clientToken")
+      Prelude.<*> (x Data..@? "createDate")
+      Prelude.<*> ( x
+                      Data..@? "instanceCounts"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "priceSchedules"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "reservedInstancesId")
+      Prelude.<*> (x Data..@? "reservedInstancesListingId")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "updateDate")
+
+instance Prelude.Hashable ReservedInstancesListing where
+  hashWithSalt _salt ReservedInstancesListing' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` instanceCounts
+      `Prelude.hashWithSalt` priceSchedules
+      `Prelude.hashWithSalt` reservedInstancesId
+      `Prelude.hashWithSalt` reservedInstancesListingId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` updateDate
+
+instance Prelude.NFData ReservedInstancesListing where
+  rnf ReservedInstancesListing' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf instanceCounts
+      `Prelude.seq` Prelude.rnf priceSchedules
+      `Prelude.seq` Prelude.rnf reservedInstancesId
+      `Prelude.seq` Prelude.rnf reservedInstancesListingId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf updateDate
diff --git a/gen/Amazonka/EC2/Types/ReservedInstancesModification.hs b/gen/Amazonka/EC2/Types/ReservedInstancesModification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstancesModification.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstancesModification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstancesModification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReservedInstancesId
+import Amazonka.EC2.Types.ReservedInstancesModificationResult
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance modification.
+--
+-- /See:/ 'newReservedInstancesModification' smart constructor.
+data ReservedInstancesModification = ReservedInstancesModification'
+  { -- | A unique, case-sensitive key supplied by the client to ensure that the
+    -- request is idempotent. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The time when the modification request was created.
+    createDate :: Prelude.Maybe Data.ISO8601,
+    -- | The time for the modification to become effective.
+    effectiveDate :: Prelude.Maybe Data.ISO8601,
+    -- | Contains target configurations along with their corresponding new
+    -- Reserved Instance IDs.
+    modificationResults :: Prelude.Maybe [ReservedInstancesModificationResult],
+    -- | The IDs of one or more Reserved Instances.
+    reservedInstancesIds :: Prelude.Maybe [ReservedInstancesId],
+    -- | A unique ID for the Reserved Instance modification.
+    reservedInstancesModificationId :: Prelude.Maybe Prelude.Text,
+    -- | The status of the Reserved Instances modification request.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The reason for the status.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The time when the modification request was last updated.
+    updateDate :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstancesModification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'reservedInstancesModification_clientToken' - A unique, case-sensitive key supplied by the client to ensure that the
+-- request is idempotent. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'createDate', 'reservedInstancesModification_createDate' - The time when the modification request was created.
+--
+-- 'effectiveDate', 'reservedInstancesModification_effectiveDate' - The time for the modification to become effective.
+--
+-- 'modificationResults', 'reservedInstancesModification_modificationResults' - Contains target configurations along with their corresponding new
+-- Reserved Instance IDs.
+--
+-- 'reservedInstancesIds', 'reservedInstancesModification_reservedInstancesIds' - The IDs of one or more Reserved Instances.
+--
+-- 'reservedInstancesModificationId', 'reservedInstancesModification_reservedInstancesModificationId' - A unique ID for the Reserved Instance modification.
+--
+-- 'status', 'reservedInstancesModification_status' - The status of the Reserved Instances modification request.
+--
+-- 'statusMessage', 'reservedInstancesModification_statusMessage' - The reason for the status.
+--
+-- 'updateDate', 'reservedInstancesModification_updateDate' - The time when the modification request was last updated.
+newReservedInstancesModification ::
+  ReservedInstancesModification
+newReservedInstancesModification =
+  ReservedInstancesModification'
+    { clientToken =
+        Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      effectiveDate = Prelude.Nothing,
+      modificationResults = Prelude.Nothing,
+      reservedInstancesIds = Prelude.Nothing,
+      reservedInstancesModificationId =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      updateDate = Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive key supplied by the client to ensure that the
+-- request is idempotent. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+reservedInstancesModification_clientToken :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.Text)
+reservedInstancesModification_clientToken = Lens.lens (\ReservedInstancesModification' {clientToken} -> clientToken) (\s@ReservedInstancesModification' {} a -> s {clientToken = a} :: ReservedInstancesModification)
+
+-- | The time when the modification request was created.
+reservedInstancesModification_createDate :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.UTCTime)
+reservedInstancesModification_createDate = Lens.lens (\ReservedInstancesModification' {createDate} -> createDate) (\s@ReservedInstancesModification' {} a -> s {createDate = a} :: ReservedInstancesModification) Prelude.. Lens.mapping Data._Time
+
+-- | The time for the modification to become effective.
+reservedInstancesModification_effectiveDate :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.UTCTime)
+reservedInstancesModification_effectiveDate = Lens.lens (\ReservedInstancesModification' {effectiveDate} -> effectiveDate) (\s@ReservedInstancesModification' {} a -> s {effectiveDate = a} :: ReservedInstancesModification) Prelude.. Lens.mapping Data._Time
+
+-- | Contains target configurations along with their corresponding new
+-- Reserved Instance IDs.
+reservedInstancesModification_modificationResults :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe [ReservedInstancesModificationResult])
+reservedInstancesModification_modificationResults = Lens.lens (\ReservedInstancesModification' {modificationResults} -> modificationResults) (\s@ReservedInstancesModification' {} a -> s {modificationResults = a} :: ReservedInstancesModification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IDs of one or more Reserved Instances.
+reservedInstancesModification_reservedInstancesIds :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe [ReservedInstancesId])
+reservedInstancesModification_reservedInstancesIds = Lens.lens (\ReservedInstancesModification' {reservedInstancesIds} -> reservedInstancesIds) (\s@ReservedInstancesModification' {} a -> s {reservedInstancesIds = a} :: ReservedInstancesModification) Prelude.. Lens.mapping Lens.coerced
+
+-- | A unique ID for the Reserved Instance modification.
+reservedInstancesModification_reservedInstancesModificationId :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.Text)
+reservedInstancesModification_reservedInstancesModificationId = Lens.lens (\ReservedInstancesModification' {reservedInstancesModificationId} -> reservedInstancesModificationId) (\s@ReservedInstancesModification' {} a -> s {reservedInstancesModificationId = a} :: ReservedInstancesModification)
+
+-- | The status of the Reserved Instances modification request.
+reservedInstancesModification_status :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.Text)
+reservedInstancesModification_status = Lens.lens (\ReservedInstancesModification' {status} -> status) (\s@ReservedInstancesModification' {} a -> s {status = a} :: ReservedInstancesModification)
+
+-- | The reason for the status.
+reservedInstancesModification_statusMessage :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.Text)
+reservedInstancesModification_statusMessage = Lens.lens (\ReservedInstancesModification' {statusMessage} -> statusMessage) (\s@ReservedInstancesModification' {} a -> s {statusMessage = a} :: ReservedInstancesModification)
+
+-- | The time when the modification request was last updated.
+reservedInstancesModification_updateDate :: Lens.Lens' ReservedInstancesModification (Prelude.Maybe Prelude.UTCTime)
+reservedInstancesModification_updateDate = Lens.lens (\ReservedInstancesModification' {updateDate} -> updateDate) (\s@ReservedInstancesModification' {} a -> s {updateDate = a} :: ReservedInstancesModification) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML ReservedInstancesModification where
+  parseXML x =
+    ReservedInstancesModification'
+      Prelude.<$> (x Data..@? "clientToken")
+      Prelude.<*> (x Data..@? "createDate")
+      Prelude.<*> (x Data..@? "effectiveDate")
+      Prelude.<*> ( x
+                      Data..@? "modificationResultSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "reservedInstancesSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "reservedInstancesModificationId")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> (x Data..@? "updateDate")
+
+instance
+  Prelude.Hashable
+    ReservedInstancesModification
+  where
+  hashWithSalt _salt ReservedInstancesModification' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` effectiveDate
+      `Prelude.hashWithSalt` modificationResults
+      `Prelude.hashWithSalt` reservedInstancesIds
+      `Prelude.hashWithSalt` reservedInstancesModificationId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` updateDate
+
+instance Prelude.NFData ReservedInstancesModification where
+  rnf ReservedInstancesModification' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf effectiveDate
+      `Prelude.seq` Prelude.rnf modificationResults
+      `Prelude.seq` Prelude.rnf reservedInstancesIds
+      `Prelude.seq` Prelude.rnf reservedInstancesModificationId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf updateDate
diff --git a/gen/Amazonka/EC2/Types/ReservedInstancesModificationResult.hs b/gen/Amazonka/EC2/Types/ReservedInstancesModificationResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstancesModificationResult.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstancesModificationResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstancesModificationResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReservedInstancesConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the modification request\/s.
+--
+-- /See:/ 'newReservedInstancesModificationResult' smart constructor.
+data ReservedInstancesModificationResult = ReservedInstancesModificationResult'
+  { -- | The ID for the Reserved Instances that were created as part of the
+    -- modification request. This field is only available when the modification
+    -- is fulfilled.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text,
+    -- | The target Reserved Instances configurations supplied as part of the
+    -- modification request.
+    targetConfiguration :: Prelude.Maybe ReservedInstancesConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstancesModificationResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesId', 'reservedInstancesModificationResult_reservedInstancesId' - The ID for the Reserved Instances that were created as part of the
+-- modification request. This field is only available when the modification
+-- is fulfilled.
+--
+-- 'targetConfiguration', 'reservedInstancesModificationResult_targetConfiguration' - The target Reserved Instances configurations supplied as part of the
+-- modification request.
+newReservedInstancesModificationResult ::
+  ReservedInstancesModificationResult
+newReservedInstancesModificationResult =
+  ReservedInstancesModificationResult'
+    { reservedInstancesId =
+        Prelude.Nothing,
+      targetConfiguration = Prelude.Nothing
+    }
+
+-- | The ID for the Reserved Instances that were created as part of the
+-- modification request. This field is only available when the modification
+-- is fulfilled.
+reservedInstancesModificationResult_reservedInstancesId :: Lens.Lens' ReservedInstancesModificationResult (Prelude.Maybe Prelude.Text)
+reservedInstancesModificationResult_reservedInstancesId = Lens.lens (\ReservedInstancesModificationResult' {reservedInstancesId} -> reservedInstancesId) (\s@ReservedInstancesModificationResult' {} a -> s {reservedInstancesId = a} :: ReservedInstancesModificationResult)
+
+-- | The target Reserved Instances configurations supplied as part of the
+-- modification request.
+reservedInstancesModificationResult_targetConfiguration :: Lens.Lens' ReservedInstancesModificationResult (Prelude.Maybe ReservedInstancesConfiguration)
+reservedInstancesModificationResult_targetConfiguration = Lens.lens (\ReservedInstancesModificationResult' {targetConfiguration} -> targetConfiguration) (\s@ReservedInstancesModificationResult' {} a -> s {targetConfiguration = a} :: ReservedInstancesModificationResult)
+
+instance
+  Data.FromXML
+    ReservedInstancesModificationResult
+  where
+  parseXML x =
+    ReservedInstancesModificationResult'
+      Prelude.<$> (x Data..@? "reservedInstancesId")
+      Prelude.<*> (x Data..@? "targetConfiguration")
+
+instance
+  Prelude.Hashable
+    ReservedInstancesModificationResult
+  where
+  hashWithSalt
+    _salt
+    ReservedInstancesModificationResult' {..} =
+      _salt
+        `Prelude.hashWithSalt` reservedInstancesId
+        `Prelude.hashWithSalt` targetConfiguration
+
+instance
+  Prelude.NFData
+    ReservedInstancesModificationResult
+  where
+  rnf ReservedInstancesModificationResult' {..} =
+    Prelude.rnf reservedInstancesId
+      `Prelude.seq` Prelude.rnf targetConfiguration
diff --git a/gen/Amazonka/EC2/Types/ReservedInstancesOffering.hs b/gen/Amazonka/EC2/Types/ReservedInstancesOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ReservedInstancesOffering.hs
@@ -0,0 +1,282 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ReservedInstancesOffering
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ReservedInstancesOffering where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CurrencyCodeValues
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.OfferingClassType
+import Amazonka.EC2.Types.OfferingTypeValues
+import Amazonka.EC2.Types.PricingDetail
+import Amazonka.EC2.Types.RIProductDescription
+import Amazonka.EC2.Types.RecurringCharge
+import Amazonka.EC2.Types.Scope
+import Amazonka.EC2.Types.Tenancy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance offering.
+--
+-- /See:/ 'newReservedInstancesOffering' smart constructor.
+data ReservedInstancesOffering = ReservedInstancesOffering'
+  { -- | The Availability Zone in which the Reserved Instance can be used.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The currency of the Reserved Instance offering you are purchasing. It\'s
+    -- specified using ISO 4217 standard currency codes. At this time, the only
+    -- supported currency is @USD@.
+    currencyCode :: Prelude.Maybe CurrencyCodeValues,
+    -- | The duration of the Reserved Instance, in seconds.
+    duration :: Prelude.Maybe Prelude.Integer,
+    -- | The purchase price of the Reserved Instance.
+    fixedPrice :: Prelude.Maybe Prelude.Double,
+    -- | The tenancy of the instance.
+    instanceTenancy :: Prelude.Maybe Tenancy,
+    -- | The instance type on which the Reserved Instance can be used.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | Indicates whether the offering is available through the Reserved
+    -- Instance Marketplace (resale) or Amazon Web Services. If it\'s a
+    -- Reserved Instance Marketplace offering, this is @true@.
+    marketplace :: Prelude.Maybe Prelude.Bool,
+    -- | If @convertible@ it can be exchanged for Reserved Instances of the same
+    -- or higher monetary value, with different configurations. If @standard@,
+    -- it is not possible to perform an exchange.
+    offeringClass :: Prelude.Maybe OfferingClassType,
+    -- | The Reserved Instance offering type.
+    offeringType :: Prelude.Maybe OfferingTypeValues,
+    -- | The pricing details of the Reserved Instance offering.
+    pricingDetails :: Prelude.Maybe [PricingDetail],
+    -- | The Reserved Instance product platform description.
+    productDescription :: Prelude.Maybe RIProductDescription,
+    -- | The recurring charge tag assigned to the resource.
+    recurringCharges :: Prelude.Maybe [RecurringCharge],
+    -- | The ID of the Reserved Instance offering. This is the offering ID used
+    -- in GetReservedInstancesExchangeQuote to confirm that an exchange can be
+    -- made.
+    reservedInstancesOfferingId :: Prelude.Maybe Prelude.Text,
+    -- | Whether the Reserved Instance is applied to instances in a Region or an
+    -- Availability Zone.
+    scope :: Prelude.Maybe Scope,
+    -- | The usage price of the Reserved Instance, per hour.
+    usagePrice :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReservedInstancesOffering' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'reservedInstancesOffering_availabilityZone' - The Availability Zone in which the Reserved Instance can be used.
+--
+-- 'currencyCode', 'reservedInstancesOffering_currencyCode' - The currency of the Reserved Instance offering you are purchasing. It\'s
+-- specified using ISO 4217 standard currency codes. At this time, the only
+-- supported currency is @USD@.
+--
+-- 'duration', 'reservedInstancesOffering_duration' - The duration of the Reserved Instance, in seconds.
+--
+-- 'fixedPrice', 'reservedInstancesOffering_fixedPrice' - The purchase price of the Reserved Instance.
+--
+-- 'instanceTenancy', 'reservedInstancesOffering_instanceTenancy' - The tenancy of the instance.
+--
+-- 'instanceType', 'reservedInstancesOffering_instanceType' - The instance type on which the Reserved Instance can be used.
+--
+-- 'marketplace', 'reservedInstancesOffering_marketplace' - Indicates whether the offering is available through the Reserved
+-- Instance Marketplace (resale) or Amazon Web Services. If it\'s a
+-- Reserved Instance Marketplace offering, this is @true@.
+--
+-- 'offeringClass', 'reservedInstancesOffering_offeringClass' - If @convertible@ it can be exchanged for Reserved Instances of the same
+-- or higher monetary value, with different configurations. If @standard@,
+-- it is not possible to perform an exchange.
+--
+-- 'offeringType', 'reservedInstancesOffering_offeringType' - The Reserved Instance offering type.
+--
+-- 'pricingDetails', 'reservedInstancesOffering_pricingDetails' - The pricing details of the Reserved Instance offering.
+--
+-- 'productDescription', 'reservedInstancesOffering_productDescription' - The Reserved Instance product platform description.
+--
+-- 'recurringCharges', 'reservedInstancesOffering_recurringCharges' - The recurring charge tag assigned to the resource.
+--
+-- 'reservedInstancesOfferingId', 'reservedInstancesOffering_reservedInstancesOfferingId' - The ID of the Reserved Instance offering. This is the offering ID used
+-- in GetReservedInstancesExchangeQuote to confirm that an exchange can be
+-- made.
+--
+-- 'scope', 'reservedInstancesOffering_scope' - Whether the Reserved Instance is applied to instances in a Region or an
+-- Availability Zone.
+--
+-- 'usagePrice', 'reservedInstancesOffering_usagePrice' - The usage price of the Reserved Instance, per hour.
+newReservedInstancesOffering ::
+  ReservedInstancesOffering
+newReservedInstancesOffering =
+  ReservedInstancesOffering'
+    { availabilityZone =
+        Prelude.Nothing,
+      currencyCode = Prelude.Nothing,
+      duration = Prelude.Nothing,
+      fixedPrice = Prelude.Nothing,
+      instanceTenancy = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      marketplace = Prelude.Nothing,
+      offeringClass = Prelude.Nothing,
+      offeringType = Prelude.Nothing,
+      pricingDetails = Prelude.Nothing,
+      productDescription = Prelude.Nothing,
+      recurringCharges = Prelude.Nothing,
+      reservedInstancesOfferingId = Prelude.Nothing,
+      scope = Prelude.Nothing,
+      usagePrice = Prelude.Nothing
+    }
+
+-- | The Availability Zone in which the Reserved Instance can be used.
+reservedInstancesOffering_availabilityZone :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Text)
+reservedInstancesOffering_availabilityZone = Lens.lens (\ReservedInstancesOffering' {availabilityZone} -> availabilityZone) (\s@ReservedInstancesOffering' {} a -> s {availabilityZone = a} :: ReservedInstancesOffering)
+
+-- | The currency of the Reserved Instance offering you are purchasing. It\'s
+-- specified using ISO 4217 standard currency codes. At this time, the only
+-- supported currency is @USD@.
+reservedInstancesOffering_currencyCode :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe CurrencyCodeValues)
+reservedInstancesOffering_currencyCode = Lens.lens (\ReservedInstancesOffering' {currencyCode} -> currencyCode) (\s@ReservedInstancesOffering' {} a -> s {currencyCode = a} :: ReservedInstancesOffering)
+
+-- | The duration of the Reserved Instance, in seconds.
+reservedInstancesOffering_duration :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Integer)
+reservedInstancesOffering_duration = Lens.lens (\ReservedInstancesOffering' {duration} -> duration) (\s@ReservedInstancesOffering' {} a -> s {duration = a} :: ReservedInstancesOffering)
+
+-- | The purchase price of the Reserved Instance.
+reservedInstancesOffering_fixedPrice :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Double)
+reservedInstancesOffering_fixedPrice = Lens.lens (\ReservedInstancesOffering' {fixedPrice} -> fixedPrice) (\s@ReservedInstancesOffering' {} a -> s {fixedPrice = a} :: ReservedInstancesOffering)
+
+-- | The tenancy of the instance.
+reservedInstancesOffering_instanceTenancy :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Tenancy)
+reservedInstancesOffering_instanceTenancy = Lens.lens (\ReservedInstancesOffering' {instanceTenancy} -> instanceTenancy) (\s@ReservedInstancesOffering' {} a -> s {instanceTenancy = a} :: ReservedInstancesOffering)
+
+-- | The instance type on which the Reserved Instance can be used.
+reservedInstancesOffering_instanceType :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe InstanceType)
+reservedInstancesOffering_instanceType = Lens.lens (\ReservedInstancesOffering' {instanceType} -> instanceType) (\s@ReservedInstancesOffering' {} a -> s {instanceType = a} :: ReservedInstancesOffering)
+
+-- | Indicates whether the offering is available through the Reserved
+-- Instance Marketplace (resale) or Amazon Web Services. If it\'s a
+-- Reserved Instance Marketplace offering, this is @true@.
+reservedInstancesOffering_marketplace :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Bool)
+reservedInstancesOffering_marketplace = Lens.lens (\ReservedInstancesOffering' {marketplace} -> marketplace) (\s@ReservedInstancesOffering' {} a -> s {marketplace = a} :: ReservedInstancesOffering)
+
+-- | If @convertible@ it can be exchanged for Reserved Instances of the same
+-- or higher monetary value, with different configurations. If @standard@,
+-- it is not possible to perform an exchange.
+reservedInstancesOffering_offeringClass :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe OfferingClassType)
+reservedInstancesOffering_offeringClass = Lens.lens (\ReservedInstancesOffering' {offeringClass} -> offeringClass) (\s@ReservedInstancesOffering' {} a -> s {offeringClass = a} :: ReservedInstancesOffering)
+
+-- | The Reserved Instance offering type.
+reservedInstancesOffering_offeringType :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe OfferingTypeValues)
+reservedInstancesOffering_offeringType = Lens.lens (\ReservedInstancesOffering' {offeringType} -> offeringType) (\s@ReservedInstancesOffering' {} a -> s {offeringType = a} :: ReservedInstancesOffering)
+
+-- | The pricing details of the Reserved Instance offering.
+reservedInstancesOffering_pricingDetails :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe [PricingDetail])
+reservedInstancesOffering_pricingDetails = Lens.lens (\ReservedInstancesOffering' {pricingDetails} -> pricingDetails) (\s@ReservedInstancesOffering' {} a -> s {pricingDetails = a} :: ReservedInstancesOffering) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Reserved Instance product platform description.
+reservedInstancesOffering_productDescription :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe RIProductDescription)
+reservedInstancesOffering_productDescription = Lens.lens (\ReservedInstancesOffering' {productDescription} -> productDescription) (\s@ReservedInstancesOffering' {} a -> s {productDescription = a} :: ReservedInstancesOffering)
+
+-- | The recurring charge tag assigned to the resource.
+reservedInstancesOffering_recurringCharges :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe [RecurringCharge])
+reservedInstancesOffering_recurringCharges = Lens.lens (\ReservedInstancesOffering' {recurringCharges} -> recurringCharges) (\s@ReservedInstancesOffering' {} a -> s {recurringCharges = a} :: ReservedInstancesOffering) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Reserved Instance offering. This is the offering ID used
+-- in GetReservedInstancesExchangeQuote to confirm that an exchange can be
+-- made.
+reservedInstancesOffering_reservedInstancesOfferingId :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Text)
+reservedInstancesOffering_reservedInstancesOfferingId = Lens.lens (\ReservedInstancesOffering' {reservedInstancesOfferingId} -> reservedInstancesOfferingId) (\s@ReservedInstancesOffering' {} a -> s {reservedInstancesOfferingId = a} :: ReservedInstancesOffering)
+
+-- | Whether the Reserved Instance is applied to instances in a Region or an
+-- Availability Zone.
+reservedInstancesOffering_scope :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Scope)
+reservedInstancesOffering_scope = Lens.lens (\ReservedInstancesOffering' {scope} -> scope) (\s@ReservedInstancesOffering' {} a -> s {scope = a} :: ReservedInstancesOffering)
+
+-- | The usage price of the Reserved Instance, per hour.
+reservedInstancesOffering_usagePrice :: Lens.Lens' ReservedInstancesOffering (Prelude.Maybe Prelude.Double)
+reservedInstancesOffering_usagePrice = Lens.lens (\ReservedInstancesOffering' {usagePrice} -> usagePrice) (\s@ReservedInstancesOffering' {} a -> s {usagePrice = a} :: ReservedInstancesOffering)
+
+instance Data.FromXML ReservedInstancesOffering where
+  parseXML x =
+    ReservedInstancesOffering'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "currencyCode")
+      Prelude.<*> (x Data..@? "duration")
+      Prelude.<*> (x Data..@? "fixedPrice")
+      Prelude.<*> (x Data..@? "instanceTenancy")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "marketplace")
+      Prelude.<*> (x Data..@? "offeringClass")
+      Prelude.<*> (x Data..@? "offeringType")
+      Prelude.<*> ( x
+                      Data..@? "pricingDetailsSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "productDescription")
+      Prelude.<*> ( x
+                      Data..@? "recurringCharges"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "reservedInstancesOfferingId")
+      Prelude.<*> (x Data..@? "scope")
+      Prelude.<*> (x Data..@? "usagePrice")
+
+instance Prelude.Hashable ReservedInstancesOffering where
+  hashWithSalt _salt ReservedInstancesOffering' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` currencyCode
+      `Prelude.hashWithSalt` duration
+      `Prelude.hashWithSalt` fixedPrice
+      `Prelude.hashWithSalt` instanceTenancy
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` marketplace
+      `Prelude.hashWithSalt` offeringClass
+      `Prelude.hashWithSalt` offeringType
+      `Prelude.hashWithSalt` pricingDetails
+      `Prelude.hashWithSalt` productDescription
+      `Prelude.hashWithSalt` recurringCharges
+      `Prelude.hashWithSalt` reservedInstancesOfferingId
+      `Prelude.hashWithSalt` scope
+      `Prelude.hashWithSalt` usagePrice
+
+instance Prelude.NFData ReservedInstancesOffering where
+  rnf ReservedInstancesOffering' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf currencyCode
+      `Prelude.seq` Prelude.rnf duration
+      `Prelude.seq` Prelude.rnf fixedPrice
+      `Prelude.seq` Prelude.rnf instanceTenancy
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf marketplace
+      `Prelude.seq` Prelude.rnf offeringClass
+      `Prelude.seq` Prelude.rnf offeringType
+      `Prelude.seq` Prelude.rnf pricingDetails
+      `Prelude.seq` Prelude.rnf productDescription
+      `Prelude.seq` Prelude.rnf recurringCharges
+      `Prelude.seq` Prelude.rnf reservedInstancesOfferingId
+      `Prelude.seq` Prelude.rnf scope
+      `Prelude.seq` Prelude.rnf usagePrice
diff --git a/gen/Amazonka/EC2/Types/ResetFpgaImageAttributeName.hs b/gen/Amazonka/EC2/Types/ResetFpgaImageAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResetFpgaImageAttributeName.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResetFpgaImageAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResetFpgaImageAttributeName
+  ( ResetFpgaImageAttributeName
+      ( ..,
+        ResetFpgaImageAttributeName_LoadPermission
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResetFpgaImageAttributeName = ResetFpgaImageAttributeName'
+  { fromResetFpgaImageAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ResetFpgaImageAttributeName_LoadPermission :: ResetFpgaImageAttributeName
+pattern ResetFpgaImageAttributeName_LoadPermission = ResetFpgaImageAttributeName' "loadPermission"
+
+{-# COMPLETE
+  ResetFpgaImageAttributeName_LoadPermission,
+  ResetFpgaImageAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ResetImageAttributeName.hs b/gen/Amazonka/EC2/Types/ResetImageAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResetImageAttributeName.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResetImageAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResetImageAttributeName
+  ( ResetImageAttributeName
+      ( ..,
+        ResetImageAttributeName_LaunchPermission
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResetImageAttributeName = ResetImageAttributeName'
+  { fromResetImageAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ResetImageAttributeName_LaunchPermission :: ResetImageAttributeName
+pattern ResetImageAttributeName_LaunchPermission = ResetImageAttributeName' "launchPermission"
+
+{-# COMPLETE
+  ResetImageAttributeName_LaunchPermission,
+  ResetImageAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ResourceStatement.hs b/gen/Amazonka/EC2/Types/ResourceStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResourceStatement.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResourceStatement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResourceStatement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a resource statement.
+--
+-- /See:/ 'newResourceStatement' smart constructor.
+data ResourceStatement = ResourceStatement'
+  { -- | The resource types.
+    resourceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The resources.
+    resources :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceStatement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceTypes', 'resourceStatement_resourceTypes' - The resource types.
+--
+-- 'resources', 'resourceStatement_resources' - The resources.
+newResourceStatement ::
+  ResourceStatement
+newResourceStatement =
+  ResourceStatement'
+    { resourceTypes = Prelude.Nothing,
+      resources = Prelude.Nothing
+    }
+
+-- | The resource types.
+resourceStatement_resourceTypes :: Lens.Lens' ResourceStatement (Prelude.Maybe [Prelude.Text])
+resourceStatement_resourceTypes = Lens.lens (\ResourceStatement' {resourceTypes} -> resourceTypes) (\s@ResourceStatement' {} a -> s {resourceTypes = a} :: ResourceStatement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resources.
+resourceStatement_resources :: Lens.Lens' ResourceStatement (Prelude.Maybe [Prelude.Text])
+resourceStatement_resources = Lens.lens (\ResourceStatement' {resources} -> resources) (\s@ResourceStatement' {} a -> s {resources = a} :: ResourceStatement) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ResourceStatement where
+  parseXML x =
+    ResourceStatement'
+      Prelude.<$> ( x
+                      Data..@? "resourceTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "resourceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ResourceStatement where
+  hashWithSalt _salt ResourceStatement' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceTypes
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData ResourceStatement where
+  rnf ResourceStatement' {..} =
+    Prelude.rnf resourceTypes
+      `Prelude.seq` Prelude.rnf resources
diff --git a/gen/Amazonka/EC2/Types/ResourceStatementRequest.hs b/gen/Amazonka/EC2/Types/ResourceStatementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResourceStatementRequest.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResourceStatementRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResourceStatementRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a resource statement.
+--
+-- /See:/ 'newResourceStatementRequest' smart constructor.
+data ResourceStatementRequest = ResourceStatementRequest'
+  { -- | The resource types.
+    resourceTypes :: Prelude.Maybe [Prelude.Text],
+    -- | The resources.
+    resources :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceStatementRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceTypes', 'resourceStatementRequest_resourceTypes' - The resource types.
+--
+-- 'resources', 'resourceStatementRequest_resources' - The resources.
+newResourceStatementRequest ::
+  ResourceStatementRequest
+newResourceStatementRequest =
+  ResourceStatementRequest'
+    { resourceTypes =
+        Prelude.Nothing,
+      resources = Prelude.Nothing
+    }
+
+-- | The resource types.
+resourceStatementRequest_resourceTypes :: Lens.Lens' ResourceStatementRequest (Prelude.Maybe [Prelude.Text])
+resourceStatementRequest_resourceTypes = Lens.lens (\ResourceStatementRequest' {resourceTypes} -> resourceTypes) (\s@ResourceStatementRequest' {} a -> s {resourceTypes = a} :: ResourceStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The resources.
+resourceStatementRequest_resources :: Lens.Lens' ResourceStatementRequest (Prelude.Maybe [Prelude.Text])
+resourceStatementRequest_resources = Lens.lens (\ResourceStatementRequest' {resources} -> resources) (\s@ResourceStatementRequest' {} a -> s {resources = a} :: ResourceStatementRequest) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable ResourceStatementRequest where
+  hashWithSalt _salt ResourceStatementRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceTypes
+      `Prelude.hashWithSalt` resources
+
+instance Prelude.NFData ResourceStatementRequest where
+  rnf ResourceStatementRequest' {..} =
+    Prelude.rnf resourceTypes
+      `Prelude.seq` Prelude.rnf resources
+
+instance Data.ToQuery ResourceStatementRequest where
+  toQuery ResourceStatementRequest' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "ResourceType"
+              Prelude.<$> resourceTypes
+          ),
+        Data.toQuery
+          (Data.toQueryList "Resource" Prelude.<$> resources)
+      ]
diff --git a/gen/Amazonka/EC2/Types/ResourceType.hs b/gen/Amazonka/EC2/Types/ResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResourceType.hs
@@ -0,0 +1,477 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResourceType
+  ( ResourceType
+      ( ..,
+        ResourceType_Capacity_reservation,
+        ResourceType_Capacity_reservation_fleet,
+        ResourceType_Carrier_gateway,
+        ResourceType_Client_vpn_endpoint,
+        ResourceType_Coip_pool,
+        ResourceType_Customer_gateway,
+        ResourceType_Dedicated_host,
+        ResourceType_Dhcp_options,
+        ResourceType_Egress_only_internet_gateway,
+        ResourceType_Elastic_gpu,
+        ResourceType_Elastic_ip,
+        ResourceType_Export_image_task,
+        ResourceType_Export_instance_task,
+        ResourceType_Fleet,
+        ResourceType_Fpga_image,
+        ResourceType_Host_reservation,
+        ResourceType_Image,
+        ResourceType_Import_image_task,
+        ResourceType_Import_snapshot_task,
+        ResourceType_Instance,
+        ResourceType_Instance_event_window,
+        ResourceType_Internet_gateway,
+        ResourceType_Ipam,
+        ResourceType_Ipam_pool,
+        ResourceType_Ipam_scope,
+        ResourceType_Ipv4pool_ec2,
+        ResourceType_Ipv6pool_ec2,
+        ResourceType_Key_pair,
+        ResourceType_Launch_template,
+        ResourceType_Local_gateway,
+        ResourceType_Local_gateway_route_table,
+        ResourceType_Local_gateway_route_table_virtual_interface_group_association,
+        ResourceType_Local_gateway_route_table_vpc_association,
+        ResourceType_Local_gateway_virtual_interface,
+        ResourceType_Local_gateway_virtual_interface_group,
+        ResourceType_Natgateway,
+        ResourceType_Network_acl,
+        ResourceType_Network_insights_access_scope,
+        ResourceType_Network_insights_access_scope_analysis,
+        ResourceType_Network_insights_analysis,
+        ResourceType_Network_insights_path,
+        ResourceType_Network_interface,
+        ResourceType_Placement_group,
+        ResourceType_Prefix_list,
+        ResourceType_Replace_root_volume_task,
+        ResourceType_Reserved_instances,
+        ResourceType_Route_table,
+        ResourceType_Security_group,
+        ResourceType_Security_group_rule,
+        ResourceType_Snapshot,
+        ResourceType_Spot_fleet_request,
+        ResourceType_Spot_instances_request,
+        ResourceType_Subnet,
+        ResourceType_Subnet_cidr_reservation,
+        ResourceType_Traffic_mirror_filter,
+        ResourceType_Traffic_mirror_filter_rule,
+        ResourceType_Traffic_mirror_session,
+        ResourceType_Traffic_mirror_target,
+        ResourceType_Transit_gateway,
+        ResourceType_Transit_gateway_attachment,
+        ResourceType_Transit_gateway_connect_peer,
+        ResourceType_Transit_gateway_multicast_domain,
+        ResourceType_Transit_gateway_policy_table,
+        ResourceType_Transit_gateway_route_table,
+        ResourceType_Transit_gateway_route_table_announcement,
+        ResourceType_Verified_access_endpoint,
+        ResourceType_Verified_access_group,
+        ResourceType_Verified_access_instance,
+        ResourceType_Verified_access_policy,
+        ResourceType_Verified_access_trust_provider,
+        ResourceType_Volume,
+        ResourceType_Vpc,
+        ResourceType_Vpc_block_public_access_exclusion,
+        ResourceType_Vpc_endpoint,
+        ResourceType_Vpc_endpoint_connection,
+        ResourceType_Vpc_endpoint_connection_device_type,
+        ResourceType_Vpc_endpoint_service,
+        ResourceType_Vpc_endpoint_service_permission,
+        ResourceType_Vpc_flow_log,
+        ResourceType_Vpc_peering_connection,
+        ResourceType_Vpn_connection,
+        ResourceType_Vpn_connection_device_type,
+        ResourceType_Vpn_gateway
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ResourceType = ResourceType'
+  { fromResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ResourceType_Capacity_reservation :: ResourceType
+pattern ResourceType_Capacity_reservation = ResourceType' "capacity-reservation"
+
+pattern ResourceType_Capacity_reservation_fleet :: ResourceType
+pattern ResourceType_Capacity_reservation_fleet = ResourceType' "capacity-reservation-fleet"
+
+pattern ResourceType_Carrier_gateway :: ResourceType
+pattern ResourceType_Carrier_gateway = ResourceType' "carrier-gateway"
+
+pattern ResourceType_Client_vpn_endpoint :: ResourceType
+pattern ResourceType_Client_vpn_endpoint = ResourceType' "client-vpn-endpoint"
+
+pattern ResourceType_Coip_pool :: ResourceType
+pattern ResourceType_Coip_pool = ResourceType' "coip-pool"
+
+pattern ResourceType_Customer_gateway :: ResourceType
+pattern ResourceType_Customer_gateway = ResourceType' "customer-gateway"
+
+pattern ResourceType_Dedicated_host :: ResourceType
+pattern ResourceType_Dedicated_host = ResourceType' "dedicated-host"
+
+pattern ResourceType_Dhcp_options :: ResourceType
+pattern ResourceType_Dhcp_options = ResourceType' "dhcp-options"
+
+pattern ResourceType_Egress_only_internet_gateway :: ResourceType
+pattern ResourceType_Egress_only_internet_gateway = ResourceType' "egress-only-internet-gateway"
+
+pattern ResourceType_Elastic_gpu :: ResourceType
+pattern ResourceType_Elastic_gpu = ResourceType' "elastic-gpu"
+
+pattern ResourceType_Elastic_ip :: ResourceType
+pattern ResourceType_Elastic_ip = ResourceType' "elastic-ip"
+
+pattern ResourceType_Export_image_task :: ResourceType
+pattern ResourceType_Export_image_task = ResourceType' "export-image-task"
+
+pattern ResourceType_Export_instance_task :: ResourceType
+pattern ResourceType_Export_instance_task = ResourceType' "export-instance-task"
+
+pattern ResourceType_Fleet :: ResourceType
+pattern ResourceType_Fleet = ResourceType' "fleet"
+
+pattern ResourceType_Fpga_image :: ResourceType
+pattern ResourceType_Fpga_image = ResourceType' "fpga-image"
+
+pattern ResourceType_Host_reservation :: ResourceType
+pattern ResourceType_Host_reservation = ResourceType' "host-reservation"
+
+pattern ResourceType_Image :: ResourceType
+pattern ResourceType_Image = ResourceType' "image"
+
+pattern ResourceType_Import_image_task :: ResourceType
+pattern ResourceType_Import_image_task = ResourceType' "import-image-task"
+
+pattern ResourceType_Import_snapshot_task :: ResourceType
+pattern ResourceType_Import_snapshot_task = ResourceType' "import-snapshot-task"
+
+pattern ResourceType_Instance :: ResourceType
+pattern ResourceType_Instance = ResourceType' "instance"
+
+pattern ResourceType_Instance_event_window :: ResourceType
+pattern ResourceType_Instance_event_window = ResourceType' "instance-event-window"
+
+pattern ResourceType_Internet_gateway :: ResourceType
+pattern ResourceType_Internet_gateway = ResourceType' "internet-gateway"
+
+pattern ResourceType_Ipam :: ResourceType
+pattern ResourceType_Ipam = ResourceType' "ipam"
+
+pattern ResourceType_Ipam_pool :: ResourceType
+pattern ResourceType_Ipam_pool = ResourceType' "ipam-pool"
+
+pattern ResourceType_Ipam_scope :: ResourceType
+pattern ResourceType_Ipam_scope = ResourceType' "ipam-scope"
+
+pattern ResourceType_Ipv4pool_ec2 :: ResourceType
+pattern ResourceType_Ipv4pool_ec2 = ResourceType' "ipv4pool-ec2"
+
+pattern ResourceType_Ipv6pool_ec2 :: ResourceType
+pattern ResourceType_Ipv6pool_ec2 = ResourceType' "ipv6pool-ec2"
+
+pattern ResourceType_Key_pair :: ResourceType
+pattern ResourceType_Key_pair = ResourceType' "key-pair"
+
+pattern ResourceType_Launch_template :: ResourceType
+pattern ResourceType_Launch_template = ResourceType' "launch-template"
+
+pattern ResourceType_Local_gateway :: ResourceType
+pattern ResourceType_Local_gateway = ResourceType' "local-gateway"
+
+pattern ResourceType_Local_gateway_route_table :: ResourceType
+pattern ResourceType_Local_gateway_route_table = ResourceType' "local-gateway-route-table"
+
+pattern ResourceType_Local_gateway_route_table_virtual_interface_group_association :: ResourceType
+pattern ResourceType_Local_gateway_route_table_virtual_interface_group_association = ResourceType' "local-gateway-route-table-virtual-interface-group-association"
+
+pattern ResourceType_Local_gateway_route_table_vpc_association :: ResourceType
+pattern ResourceType_Local_gateway_route_table_vpc_association = ResourceType' "local-gateway-route-table-vpc-association"
+
+pattern ResourceType_Local_gateway_virtual_interface :: ResourceType
+pattern ResourceType_Local_gateway_virtual_interface = ResourceType' "local-gateway-virtual-interface"
+
+pattern ResourceType_Local_gateway_virtual_interface_group :: ResourceType
+pattern ResourceType_Local_gateway_virtual_interface_group = ResourceType' "local-gateway-virtual-interface-group"
+
+pattern ResourceType_Natgateway :: ResourceType
+pattern ResourceType_Natgateway = ResourceType' "natgateway"
+
+pattern ResourceType_Network_acl :: ResourceType
+pattern ResourceType_Network_acl = ResourceType' "network-acl"
+
+pattern ResourceType_Network_insights_access_scope :: ResourceType
+pattern ResourceType_Network_insights_access_scope = ResourceType' "network-insights-access-scope"
+
+pattern ResourceType_Network_insights_access_scope_analysis :: ResourceType
+pattern ResourceType_Network_insights_access_scope_analysis = ResourceType' "network-insights-access-scope-analysis"
+
+pattern ResourceType_Network_insights_analysis :: ResourceType
+pattern ResourceType_Network_insights_analysis = ResourceType' "network-insights-analysis"
+
+pattern ResourceType_Network_insights_path :: ResourceType
+pattern ResourceType_Network_insights_path = ResourceType' "network-insights-path"
+
+pattern ResourceType_Network_interface :: ResourceType
+pattern ResourceType_Network_interface = ResourceType' "network-interface"
+
+pattern ResourceType_Placement_group :: ResourceType
+pattern ResourceType_Placement_group = ResourceType' "placement-group"
+
+pattern ResourceType_Prefix_list :: ResourceType
+pattern ResourceType_Prefix_list = ResourceType' "prefix-list"
+
+pattern ResourceType_Replace_root_volume_task :: ResourceType
+pattern ResourceType_Replace_root_volume_task = ResourceType' "replace-root-volume-task"
+
+pattern ResourceType_Reserved_instances :: ResourceType
+pattern ResourceType_Reserved_instances = ResourceType' "reserved-instances"
+
+pattern ResourceType_Route_table :: ResourceType
+pattern ResourceType_Route_table = ResourceType' "route-table"
+
+pattern ResourceType_Security_group :: ResourceType
+pattern ResourceType_Security_group = ResourceType' "security-group"
+
+pattern ResourceType_Security_group_rule :: ResourceType
+pattern ResourceType_Security_group_rule = ResourceType' "security-group-rule"
+
+pattern ResourceType_Snapshot :: ResourceType
+pattern ResourceType_Snapshot = ResourceType' "snapshot"
+
+pattern ResourceType_Spot_fleet_request :: ResourceType
+pattern ResourceType_Spot_fleet_request = ResourceType' "spot-fleet-request"
+
+pattern ResourceType_Spot_instances_request :: ResourceType
+pattern ResourceType_Spot_instances_request = ResourceType' "spot-instances-request"
+
+pattern ResourceType_Subnet :: ResourceType
+pattern ResourceType_Subnet = ResourceType' "subnet"
+
+pattern ResourceType_Subnet_cidr_reservation :: ResourceType
+pattern ResourceType_Subnet_cidr_reservation = ResourceType' "subnet-cidr-reservation"
+
+pattern ResourceType_Traffic_mirror_filter :: ResourceType
+pattern ResourceType_Traffic_mirror_filter = ResourceType' "traffic-mirror-filter"
+
+pattern ResourceType_Traffic_mirror_filter_rule :: ResourceType
+pattern ResourceType_Traffic_mirror_filter_rule = ResourceType' "traffic-mirror-filter-rule"
+
+pattern ResourceType_Traffic_mirror_session :: ResourceType
+pattern ResourceType_Traffic_mirror_session = ResourceType' "traffic-mirror-session"
+
+pattern ResourceType_Traffic_mirror_target :: ResourceType
+pattern ResourceType_Traffic_mirror_target = ResourceType' "traffic-mirror-target"
+
+pattern ResourceType_Transit_gateway :: ResourceType
+pattern ResourceType_Transit_gateway = ResourceType' "transit-gateway"
+
+pattern ResourceType_Transit_gateway_attachment :: ResourceType
+pattern ResourceType_Transit_gateway_attachment = ResourceType' "transit-gateway-attachment"
+
+pattern ResourceType_Transit_gateway_connect_peer :: ResourceType
+pattern ResourceType_Transit_gateway_connect_peer = ResourceType' "transit-gateway-connect-peer"
+
+pattern ResourceType_Transit_gateway_multicast_domain :: ResourceType
+pattern ResourceType_Transit_gateway_multicast_domain = ResourceType' "transit-gateway-multicast-domain"
+
+pattern ResourceType_Transit_gateway_policy_table :: ResourceType
+pattern ResourceType_Transit_gateway_policy_table = ResourceType' "transit-gateway-policy-table"
+
+pattern ResourceType_Transit_gateway_route_table :: ResourceType
+pattern ResourceType_Transit_gateway_route_table = ResourceType' "transit-gateway-route-table"
+
+pattern ResourceType_Transit_gateway_route_table_announcement :: ResourceType
+pattern ResourceType_Transit_gateway_route_table_announcement = ResourceType' "transit-gateway-route-table-announcement"
+
+pattern ResourceType_Verified_access_endpoint :: ResourceType
+pattern ResourceType_Verified_access_endpoint = ResourceType' "verified-access-endpoint"
+
+pattern ResourceType_Verified_access_group :: ResourceType
+pattern ResourceType_Verified_access_group = ResourceType' "verified-access-group"
+
+pattern ResourceType_Verified_access_instance :: ResourceType
+pattern ResourceType_Verified_access_instance = ResourceType' "verified-access-instance"
+
+pattern ResourceType_Verified_access_policy :: ResourceType
+pattern ResourceType_Verified_access_policy = ResourceType' "verified-access-policy"
+
+pattern ResourceType_Verified_access_trust_provider :: ResourceType
+pattern ResourceType_Verified_access_trust_provider = ResourceType' "verified-access-trust-provider"
+
+pattern ResourceType_Volume :: ResourceType
+pattern ResourceType_Volume = ResourceType' "volume"
+
+pattern ResourceType_Vpc :: ResourceType
+pattern ResourceType_Vpc = ResourceType' "vpc"
+
+pattern ResourceType_Vpc_block_public_access_exclusion :: ResourceType
+pattern ResourceType_Vpc_block_public_access_exclusion = ResourceType' "vpc-block-public-access-exclusion"
+
+pattern ResourceType_Vpc_endpoint :: ResourceType
+pattern ResourceType_Vpc_endpoint = ResourceType' "vpc-endpoint"
+
+pattern ResourceType_Vpc_endpoint_connection :: ResourceType
+pattern ResourceType_Vpc_endpoint_connection = ResourceType' "vpc-endpoint-connection"
+
+pattern ResourceType_Vpc_endpoint_connection_device_type :: ResourceType
+pattern ResourceType_Vpc_endpoint_connection_device_type = ResourceType' "vpc-endpoint-connection-device-type"
+
+pattern ResourceType_Vpc_endpoint_service :: ResourceType
+pattern ResourceType_Vpc_endpoint_service = ResourceType' "vpc-endpoint-service"
+
+pattern ResourceType_Vpc_endpoint_service_permission :: ResourceType
+pattern ResourceType_Vpc_endpoint_service_permission = ResourceType' "vpc-endpoint-service-permission"
+
+pattern ResourceType_Vpc_flow_log :: ResourceType
+pattern ResourceType_Vpc_flow_log = ResourceType' "vpc-flow-log"
+
+pattern ResourceType_Vpc_peering_connection :: ResourceType
+pattern ResourceType_Vpc_peering_connection = ResourceType' "vpc-peering-connection"
+
+pattern ResourceType_Vpn_connection :: ResourceType
+pattern ResourceType_Vpn_connection = ResourceType' "vpn-connection"
+
+pattern ResourceType_Vpn_connection_device_type :: ResourceType
+pattern ResourceType_Vpn_connection_device_type = ResourceType' "vpn-connection-device-type"
+
+pattern ResourceType_Vpn_gateway :: ResourceType
+pattern ResourceType_Vpn_gateway = ResourceType' "vpn-gateway"
+
+{-# COMPLETE
+  ResourceType_Capacity_reservation,
+  ResourceType_Capacity_reservation_fleet,
+  ResourceType_Carrier_gateway,
+  ResourceType_Client_vpn_endpoint,
+  ResourceType_Coip_pool,
+  ResourceType_Customer_gateway,
+  ResourceType_Dedicated_host,
+  ResourceType_Dhcp_options,
+  ResourceType_Egress_only_internet_gateway,
+  ResourceType_Elastic_gpu,
+  ResourceType_Elastic_ip,
+  ResourceType_Export_image_task,
+  ResourceType_Export_instance_task,
+  ResourceType_Fleet,
+  ResourceType_Fpga_image,
+  ResourceType_Host_reservation,
+  ResourceType_Image,
+  ResourceType_Import_image_task,
+  ResourceType_Import_snapshot_task,
+  ResourceType_Instance,
+  ResourceType_Instance_event_window,
+  ResourceType_Internet_gateway,
+  ResourceType_Ipam,
+  ResourceType_Ipam_pool,
+  ResourceType_Ipam_scope,
+  ResourceType_Ipv4pool_ec2,
+  ResourceType_Ipv6pool_ec2,
+  ResourceType_Key_pair,
+  ResourceType_Launch_template,
+  ResourceType_Local_gateway,
+  ResourceType_Local_gateway_route_table,
+  ResourceType_Local_gateway_route_table_virtual_interface_group_association,
+  ResourceType_Local_gateway_route_table_vpc_association,
+  ResourceType_Local_gateway_virtual_interface,
+  ResourceType_Local_gateway_virtual_interface_group,
+  ResourceType_Natgateway,
+  ResourceType_Network_acl,
+  ResourceType_Network_insights_access_scope,
+  ResourceType_Network_insights_access_scope_analysis,
+  ResourceType_Network_insights_analysis,
+  ResourceType_Network_insights_path,
+  ResourceType_Network_interface,
+  ResourceType_Placement_group,
+  ResourceType_Prefix_list,
+  ResourceType_Replace_root_volume_task,
+  ResourceType_Reserved_instances,
+  ResourceType_Route_table,
+  ResourceType_Security_group,
+  ResourceType_Security_group_rule,
+  ResourceType_Snapshot,
+  ResourceType_Spot_fleet_request,
+  ResourceType_Spot_instances_request,
+  ResourceType_Subnet,
+  ResourceType_Subnet_cidr_reservation,
+  ResourceType_Traffic_mirror_filter,
+  ResourceType_Traffic_mirror_filter_rule,
+  ResourceType_Traffic_mirror_session,
+  ResourceType_Traffic_mirror_target,
+  ResourceType_Transit_gateway,
+  ResourceType_Transit_gateway_attachment,
+  ResourceType_Transit_gateway_connect_peer,
+  ResourceType_Transit_gateway_multicast_domain,
+  ResourceType_Transit_gateway_policy_table,
+  ResourceType_Transit_gateway_route_table,
+  ResourceType_Transit_gateway_route_table_announcement,
+  ResourceType_Verified_access_endpoint,
+  ResourceType_Verified_access_group,
+  ResourceType_Verified_access_instance,
+  ResourceType_Verified_access_policy,
+  ResourceType_Verified_access_trust_provider,
+  ResourceType_Volume,
+  ResourceType_Vpc,
+  ResourceType_Vpc_block_public_access_exclusion,
+  ResourceType_Vpc_endpoint,
+  ResourceType_Vpc_endpoint_connection,
+  ResourceType_Vpc_endpoint_connection_device_type,
+  ResourceType_Vpc_endpoint_service,
+  ResourceType_Vpc_endpoint_service_permission,
+  ResourceType_Vpc_flow_log,
+  ResourceType_Vpc_peering_connection,
+  ResourceType_Vpn_connection,
+  ResourceType_Vpn_connection_device_type,
+  ResourceType_Vpn_gateway,
+  ResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ResponseError.hs b/gen/Amazonka/EC2/Types/ResponseError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResponseError.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResponseError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResponseError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.LaunchTemplateErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the error that\'s returned when you cannot delete a launch
+-- template version.
+--
+-- /See:/ 'newResponseError' smart constructor.
+data ResponseError = ResponseError'
+  { -- | The error code.
+    code :: Prelude.Maybe LaunchTemplateErrorCode,
+    -- | The error message, if applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResponseError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'responseError_code' - The error code.
+--
+-- 'message', 'responseError_message' - The error message, if applicable.
+newResponseError ::
+  ResponseError
+newResponseError =
+  ResponseError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+responseError_code :: Lens.Lens' ResponseError (Prelude.Maybe LaunchTemplateErrorCode)
+responseError_code = Lens.lens (\ResponseError' {code} -> code) (\s@ResponseError' {} a -> s {code = a} :: ResponseError)
+
+-- | The error message, if applicable.
+responseError_message :: Lens.Lens' ResponseError (Prelude.Maybe Prelude.Text)
+responseError_message = Lens.lens (\ResponseError' {message} -> message) (\s@ResponseError' {} a -> s {message = a} :: ResponseError)
+
+instance Data.FromXML ResponseError where
+  parseXML x =
+    ResponseError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable ResponseError where
+  hashWithSalt _salt ResponseError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ResponseError where
+  rnf ResponseError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ResponseLaunchTemplateData.hs b/gen/Amazonka/EC2/Types/ResponseLaunchTemplateData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ResponseLaunchTemplateData.hs
@@ -0,0 +1,554 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ResponseLaunchTemplateData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ResponseLaunchTemplateData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CreditSpecification
+import Amazonka.EC2.Types.ElasticGpuSpecificationResponse
+import Amazonka.EC2.Types.InstanceRequirements
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.LaunchTemplateBlockDeviceMapping
+import Amazonka.EC2.Types.LaunchTemplateCapacityReservationSpecificationResponse
+import Amazonka.EC2.Types.LaunchTemplateCpuOptions
+import Amazonka.EC2.Types.LaunchTemplateElasticInferenceAcceleratorResponse
+import Amazonka.EC2.Types.LaunchTemplateEnclaveOptions
+import Amazonka.EC2.Types.LaunchTemplateHibernationOptions
+import Amazonka.EC2.Types.LaunchTemplateIamInstanceProfileSpecification
+import Amazonka.EC2.Types.LaunchTemplateInstanceMaintenanceOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMarketOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceMetadataOptions
+import Amazonka.EC2.Types.LaunchTemplateInstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.LaunchTemplateLicenseConfiguration
+import Amazonka.EC2.Types.LaunchTemplatePlacement
+import Amazonka.EC2.Types.LaunchTemplatePrivateDnsNameOptions
+import Amazonka.EC2.Types.LaunchTemplateTagSpecification
+import Amazonka.EC2.Types.LaunchTemplatesMonitoring
+import Amazonka.EC2.Types.ShutdownBehavior
+import qualified Amazonka.Prelude as Prelude
+
+-- | The information for a launch template.
+--
+-- /See:/ 'newResponseLaunchTemplateData' smart constructor.
+data ResponseLaunchTemplateData = ResponseLaunchTemplateData'
+  { -- | The block device mappings.
+    blockDeviceMappings :: Prelude.Maybe [LaunchTemplateBlockDeviceMapping],
+    -- | Information about the Capacity Reservation targeting option.
+    capacityReservationSpecification :: Prelude.Maybe LaunchTemplateCapacityReservationSpecificationResponse,
+    -- | The CPU options for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimizing CPU options>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    cpuOptions :: Prelude.Maybe LaunchTemplateCpuOptions,
+    -- | The credit option for CPU usage of the instance.
+    creditSpecification :: Prelude.Maybe CreditSpecification,
+    -- | Indicates whether the instance is enabled for stop protection. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+    disableApiStop :: Prelude.Maybe Prelude.Bool,
+    -- | If set to @true@, indicates that the instance cannot be terminated using
+    -- the Amazon EC2 console, command line tool, or API.
+    disableApiTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the instance is optimized for Amazon EBS I\/O.
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The elastic GPU specification.
+    elasticGpuSpecifications :: Prelude.Maybe [ElasticGpuSpecificationResponse],
+    -- | The elastic inference accelerator for the instance.
+    elasticInferenceAccelerators :: Prelude.Maybe [LaunchTemplateElasticInferenceAcceleratorResponse],
+    -- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+    -- Enclaves.
+    enclaveOptions :: Prelude.Maybe LaunchTemplateEnclaveOptions,
+    -- | Indicates whether an instance is configured for hibernation. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    hibernationOptions :: Prelude.Maybe LaunchTemplateHibernationOptions,
+    -- | The IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe LaunchTemplateIamInstanceProfileSpecification,
+    -- | The ID of the AMI that was used to launch the instance.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether an instance stops or terminates when you initiate
+    -- shutdown from the instance (using the operating system command for
+    -- system shutdown).
+    instanceInitiatedShutdownBehavior :: Prelude.Maybe ShutdownBehavior,
+    -- | The market (purchasing) option for the instances.
+    instanceMarketOptions :: Prelude.Maybe LaunchTemplateInstanceMarketOptions,
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with these
+    -- attributes.
+    --
+    -- If you specify @InstanceRequirements@, you can\'t specify
+    -- @InstanceTypes@.
+    instanceRequirements :: Prelude.Maybe InstanceRequirements,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The ID of the kernel, if applicable.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | The license configurations.
+    licenseSpecifications :: Prelude.Maybe [LaunchTemplateLicenseConfiguration],
+    -- | The maintenance options for your instance.
+    maintenanceOptions :: Prelude.Maybe LaunchTemplateInstanceMaintenanceOptions,
+    -- | The metadata options for the instance. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    metadataOptions :: Prelude.Maybe LaunchTemplateInstanceMetadataOptions,
+    -- | The monitoring for the instance.
+    monitoring :: Prelude.Maybe LaunchTemplatesMonitoring,
+    -- | The network interfaces.
+    networkInterfaces :: Prelude.Maybe [LaunchTemplateInstanceNetworkInterfaceSpecification],
+    -- | The placement of the instance.
+    placement :: Prelude.Maybe LaunchTemplatePlacement,
+    -- | The options for the instance hostname.
+    privateDnsNameOptions :: Prelude.Maybe LaunchTemplatePrivateDnsNameOptions,
+    -- | The ID of the RAM disk, if applicable.
+    ramDiskId :: Prelude.Maybe Prelude.Text,
+    -- | The security group IDs.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The security group names.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The tags that are applied to the resources that are created during
+    -- instance launch.
+    tagSpecifications :: Prelude.Maybe [LaunchTemplateTagSpecification],
+    -- | The user data for the instance.
+    userData :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResponseLaunchTemplateData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'responseLaunchTemplateData_blockDeviceMappings' - The block device mappings.
+--
+-- 'capacityReservationSpecification', 'responseLaunchTemplateData_capacityReservationSpecification' - Information about the Capacity Reservation targeting option.
+--
+-- 'cpuOptions', 'responseLaunchTemplateData_cpuOptions' - The CPU options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimizing CPU options>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'creditSpecification', 'responseLaunchTemplateData_creditSpecification' - The credit option for CPU usage of the instance.
+--
+-- 'disableApiStop', 'responseLaunchTemplateData_disableApiStop' - Indicates whether the instance is enabled for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+--
+-- 'disableApiTermination', 'responseLaunchTemplateData_disableApiTermination' - If set to @true@, indicates that the instance cannot be terminated using
+-- the Amazon EC2 console, command line tool, or API.
+--
+-- 'ebsOptimized', 'responseLaunchTemplateData_ebsOptimized' - Indicates whether the instance is optimized for Amazon EBS I\/O.
+--
+-- 'elasticGpuSpecifications', 'responseLaunchTemplateData_elasticGpuSpecifications' - The elastic GPU specification.
+--
+-- 'elasticInferenceAccelerators', 'responseLaunchTemplateData_elasticInferenceAccelerators' - The elastic inference accelerator for the instance.
+--
+-- 'enclaveOptions', 'responseLaunchTemplateData_enclaveOptions' - Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves.
+--
+-- 'hibernationOptions', 'responseLaunchTemplateData_hibernationOptions' - Indicates whether an instance is configured for hibernation. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'iamInstanceProfile', 'responseLaunchTemplateData_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'imageId', 'responseLaunchTemplateData_imageId' - The ID of the AMI that was used to launch the instance.
+--
+-- 'instanceInitiatedShutdownBehavior', 'responseLaunchTemplateData_instanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+--
+-- 'instanceMarketOptions', 'responseLaunchTemplateData_instanceMarketOptions' - The market (purchasing) option for the instances.
+--
+-- 'instanceRequirements', 'responseLaunchTemplateData_instanceRequirements' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with these
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceTypes@.
+--
+-- 'instanceType', 'responseLaunchTemplateData_instanceType' - The instance type.
+--
+-- 'kernelId', 'responseLaunchTemplateData_kernelId' - The ID of the kernel, if applicable.
+--
+-- 'keyName', 'responseLaunchTemplateData_keyName' - The name of the key pair.
+--
+-- 'licenseSpecifications', 'responseLaunchTemplateData_licenseSpecifications' - The license configurations.
+--
+-- 'maintenanceOptions', 'responseLaunchTemplateData_maintenanceOptions' - The maintenance options for your instance.
+--
+-- 'metadataOptions', 'responseLaunchTemplateData_metadataOptions' - The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'monitoring', 'responseLaunchTemplateData_monitoring' - The monitoring for the instance.
+--
+-- 'networkInterfaces', 'responseLaunchTemplateData_networkInterfaces' - The network interfaces.
+--
+-- 'placement', 'responseLaunchTemplateData_placement' - The placement of the instance.
+--
+-- 'privateDnsNameOptions', 'responseLaunchTemplateData_privateDnsNameOptions' - The options for the instance hostname.
+--
+-- 'ramDiskId', 'responseLaunchTemplateData_ramDiskId' - The ID of the RAM disk, if applicable.
+--
+-- 'securityGroupIds', 'responseLaunchTemplateData_securityGroupIds' - The security group IDs.
+--
+-- 'securityGroups', 'responseLaunchTemplateData_securityGroups' - The security group names.
+--
+-- 'tagSpecifications', 'responseLaunchTemplateData_tagSpecifications' - The tags that are applied to the resources that are created during
+-- instance launch.
+--
+-- 'userData', 'responseLaunchTemplateData_userData' - The user data for the instance.
+newResponseLaunchTemplateData ::
+  ResponseLaunchTemplateData
+newResponseLaunchTemplateData =
+  ResponseLaunchTemplateData'
+    { blockDeviceMappings =
+        Prelude.Nothing,
+      capacityReservationSpecification =
+        Prelude.Nothing,
+      cpuOptions = Prelude.Nothing,
+      creditSpecification = Prelude.Nothing,
+      disableApiStop = Prelude.Nothing,
+      disableApiTermination = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      elasticGpuSpecifications = Prelude.Nothing,
+      elasticInferenceAccelerators = Prelude.Nothing,
+      enclaveOptions = Prelude.Nothing,
+      hibernationOptions = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceInitiatedShutdownBehavior =
+        Prelude.Nothing,
+      instanceMarketOptions = Prelude.Nothing,
+      instanceRequirements = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      licenseSpecifications = Prelude.Nothing,
+      maintenanceOptions = Prelude.Nothing,
+      metadataOptions = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      privateDnsNameOptions = Prelude.Nothing,
+      ramDiskId = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      userData = Prelude.Nothing
+    }
+
+-- | The block device mappings.
+responseLaunchTemplateData_blockDeviceMappings :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [LaunchTemplateBlockDeviceMapping])
+responseLaunchTemplateData_blockDeviceMappings = Lens.lens (\ResponseLaunchTemplateData' {blockDeviceMappings} -> blockDeviceMappings) (\s@ResponseLaunchTemplateData' {} a -> s {blockDeviceMappings = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the Capacity Reservation targeting option.
+responseLaunchTemplateData_capacityReservationSpecification :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateCapacityReservationSpecificationResponse)
+responseLaunchTemplateData_capacityReservationSpecification = Lens.lens (\ResponseLaunchTemplateData' {capacityReservationSpecification} -> capacityReservationSpecification) (\s@ResponseLaunchTemplateData' {} a -> s {capacityReservationSpecification = a} :: ResponseLaunchTemplateData)
+
+-- | The CPU options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html Optimizing CPU options>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+responseLaunchTemplateData_cpuOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateCpuOptions)
+responseLaunchTemplateData_cpuOptions = Lens.lens (\ResponseLaunchTemplateData' {cpuOptions} -> cpuOptions) (\s@ResponseLaunchTemplateData' {} a -> s {cpuOptions = a} :: ResponseLaunchTemplateData)
+
+-- | The credit option for CPU usage of the instance.
+responseLaunchTemplateData_creditSpecification :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe CreditSpecification)
+responseLaunchTemplateData_creditSpecification = Lens.lens (\ResponseLaunchTemplateData' {creditSpecification} -> creditSpecification) (\s@ResponseLaunchTemplateData' {} a -> s {creditSpecification = a} :: ResponseLaunchTemplateData)
+
+-- | Indicates whether the instance is enabled for stop protection. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection Stop Protection>.
+responseLaunchTemplateData_disableApiStop :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+responseLaunchTemplateData_disableApiStop = Lens.lens (\ResponseLaunchTemplateData' {disableApiStop} -> disableApiStop) (\s@ResponseLaunchTemplateData' {} a -> s {disableApiStop = a} :: ResponseLaunchTemplateData)
+
+-- | If set to @true@, indicates that the instance cannot be terminated using
+-- the Amazon EC2 console, command line tool, or API.
+responseLaunchTemplateData_disableApiTermination :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+responseLaunchTemplateData_disableApiTermination = Lens.lens (\ResponseLaunchTemplateData' {disableApiTermination} -> disableApiTermination) (\s@ResponseLaunchTemplateData' {} a -> s {disableApiTermination = a} :: ResponseLaunchTemplateData)
+
+-- | Indicates whether the instance is optimized for Amazon EBS I\/O.
+responseLaunchTemplateData_ebsOptimized :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Bool)
+responseLaunchTemplateData_ebsOptimized = Lens.lens (\ResponseLaunchTemplateData' {ebsOptimized} -> ebsOptimized) (\s@ResponseLaunchTemplateData' {} a -> s {ebsOptimized = a} :: ResponseLaunchTemplateData)
+
+-- | The elastic GPU specification.
+responseLaunchTemplateData_elasticGpuSpecifications :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [ElasticGpuSpecificationResponse])
+responseLaunchTemplateData_elasticGpuSpecifications = Lens.lens (\ResponseLaunchTemplateData' {elasticGpuSpecifications} -> elasticGpuSpecifications) (\s@ResponseLaunchTemplateData' {} a -> s {elasticGpuSpecifications = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The elastic inference accelerator for the instance.
+responseLaunchTemplateData_elasticInferenceAccelerators :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [LaunchTemplateElasticInferenceAcceleratorResponse])
+responseLaunchTemplateData_elasticInferenceAccelerators = Lens.lens (\ResponseLaunchTemplateData' {elasticInferenceAccelerators} -> elasticInferenceAccelerators) (\s@ResponseLaunchTemplateData' {} a -> s {elasticInferenceAccelerators = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instance is enabled for Amazon Web Services Nitro
+-- Enclaves.
+responseLaunchTemplateData_enclaveOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateEnclaveOptions)
+responseLaunchTemplateData_enclaveOptions = Lens.lens (\ResponseLaunchTemplateData' {enclaveOptions} -> enclaveOptions) (\s@ResponseLaunchTemplateData' {} a -> s {enclaveOptions = a} :: ResponseLaunchTemplateData)
+
+-- | Indicates whether an instance is configured for hibernation. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html Hibernate your instance>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+responseLaunchTemplateData_hibernationOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateHibernationOptions)
+responseLaunchTemplateData_hibernationOptions = Lens.lens (\ResponseLaunchTemplateData' {hibernationOptions} -> hibernationOptions) (\s@ResponseLaunchTemplateData' {} a -> s {hibernationOptions = a} :: ResponseLaunchTemplateData)
+
+-- | The IAM instance profile.
+responseLaunchTemplateData_iamInstanceProfile :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateIamInstanceProfileSpecification)
+responseLaunchTemplateData_iamInstanceProfile = Lens.lens (\ResponseLaunchTemplateData' {iamInstanceProfile} -> iamInstanceProfile) (\s@ResponseLaunchTemplateData' {} a -> s {iamInstanceProfile = a} :: ResponseLaunchTemplateData)
+
+-- | The ID of the AMI that was used to launch the instance.
+responseLaunchTemplateData_imageId :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Text)
+responseLaunchTemplateData_imageId = Lens.lens (\ResponseLaunchTemplateData' {imageId} -> imageId) (\s@ResponseLaunchTemplateData' {} a -> s {imageId = a} :: ResponseLaunchTemplateData)
+
+-- | Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+responseLaunchTemplateData_instanceInitiatedShutdownBehavior :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe ShutdownBehavior)
+responseLaunchTemplateData_instanceInitiatedShutdownBehavior = Lens.lens (\ResponseLaunchTemplateData' {instanceInitiatedShutdownBehavior} -> instanceInitiatedShutdownBehavior) (\s@ResponseLaunchTemplateData' {} a -> s {instanceInitiatedShutdownBehavior = a} :: ResponseLaunchTemplateData)
+
+-- | The market (purchasing) option for the instances.
+responseLaunchTemplateData_instanceMarketOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateInstanceMarketOptions)
+responseLaunchTemplateData_instanceMarketOptions = Lens.lens (\ResponseLaunchTemplateData' {instanceMarketOptions} -> instanceMarketOptions) (\s@ResponseLaunchTemplateData' {} a -> s {instanceMarketOptions = a} :: ResponseLaunchTemplateData)
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with these
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceTypes@.
+responseLaunchTemplateData_instanceRequirements :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe InstanceRequirements)
+responseLaunchTemplateData_instanceRequirements = Lens.lens (\ResponseLaunchTemplateData' {instanceRequirements} -> instanceRequirements) (\s@ResponseLaunchTemplateData' {} a -> s {instanceRequirements = a} :: ResponseLaunchTemplateData)
+
+-- | The instance type.
+responseLaunchTemplateData_instanceType :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe InstanceType)
+responseLaunchTemplateData_instanceType = Lens.lens (\ResponseLaunchTemplateData' {instanceType} -> instanceType) (\s@ResponseLaunchTemplateData' {} a -> s {instanceType = a} :: ResponseLaunchTemplateData)
+
+-- | The ID of the kernel, if applicable.
+responseLaunchTemplateData_kernelId :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Text)
+responseLaunchTemplateData_kernelId = Lens.lens (\ResponseLaunchTemplateData' {kernelId} -> kernelId) (\s@ResponseLaunchTemplateData' {} a -> s {kernelId = a} :: ResponseLaunchTemplateData)
+
+-- | The name of the key pair.
+responseLaunchTemplateData_keyName :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Text)
+responseLaunchTemplateData_keyName = Lens.lens (\ResponseLaunchTemplateData' {keyName} -> keyName) (\s@ResponseLaunchTemplateData' {} a -> s {keyName = a} :: ResponseLaunchTemplateData)
+
+-- | The license configurations.
+responseLaunchTemplateData_licenseSpecifications :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [LaunchTemplateLicenseConfiguration])
+responseLaunchTemplateData_licenseSpecifications = Lens.lens (\ResponseLaunchTemplateData' {licenseSpecifications} -> licenseSpecifications) (\s@ResponseLaunchTemplateData' {} a -> s {licenseSpecifications = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maintenance options for your instance.
+responseLaunchTemplateData_maintenanceOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateInstanceMaintenanceOptions)
+responseLaunchTemplateData_maintenanceOptions = Lens.lens (\ResponseLaunchTemplateData' {maintenanceOptions} -> maintenanceOptions) (\s@ResponseLaunchTemplateData' {} a -> s {maintenanceOptions = a} :: ResponseLaunchTemplateData)
+
+-- | The metadata options for the instance. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html Instance metadata and user data>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+responseLaunchTemplateData_metadataOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplateInstanceMetadataOptions)
+responseLaunchTemplateData_metadataOptions = Lens.lens (\ResponseLaunchTemplateData' {metadataOptions} -> metadataOptions) (\s@ResponseLaunchTemplateData' {} a -> s {metadataOptions = a} :: ResponseLaunchTemplateData)
+
+-- | The monitoring for the instance.
+responseLaunchTemplateData_monitoring :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplatesMonitoring)
+responseLaunchTemplateData_monitoring = Lens.lens (\ResponseLaunchTemplateData' {monitoring} -> monitoring) (\s@ResponseLaunchTemplateData' {} a -> s {monitoring = a} :: ResponseLaunchTemplateData)
+
+-- | The network interfaces.
+responseLaunchTemplateData_networkInterfaces :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [LaunchTemplateInstanceNetworkInterfaceSpecification])
+responseLaunchTemplateData_networkInterfaces = Lens.lens (\ResponseLaunchTemplateData' {networkInterfaces} -> networkInterfaces) (\s@ResponseLaunchTemplateData' {} a -> s {networkInterfaces = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement of the instance.
+responseLaunchTemplateData_placement :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplatePlacement)
+responseLaunchTemplateData_placement = Lens.lens (\ResponseLaunchTemplateData' {placement} -> placement) (\s@ResponseLaunchTemplateData' {} a -> s {placement = a} :: ResponseLaunchTemplateData)
+
+-- | The options for the instance hostname.
+responseLaunchTemplateData_privateDnsNameOptions :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe LaunchTemplatePrivateDnsNameOptions)
+responseLaunchTemplateData_privateDnsNameOptions = Lens.lens (\ResponseLaunchTemplateData' {privateDnsNameOptions} -> privateDnsNameOptions) (\s@ResponseLaunchTemplateData' {} a -> s {privateDnsNameOptions = a} :: ResponseLaunchTemplateData)
+
+-- | The ID of the RAM disk, if applicable.
+responseLaunchTemplateData_ramDiskId :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Text)
+responseLaunchTemplateData_ramDiskId = Lens.lens (\ResponseLaunchTemplateData' {ramDiskId} -> ramDiskId) (\s@ResponseLaunchTemplateData' {} a -> s {ramDiskId = a} :: ResponseLaunchTemplateData)
+
+-- | The security group IDs.
+responseLaunchTemplateData_securityGroupIds :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [Prelude.Text])
+responseLaunchTemplateData_securityGroupIds = Lens.lens (\ResponseLaunchTemplateData' {securityGroupIds} -> securityGroupIds) (\s@ResponseLaunchTemplateData' {} a -> s {securityGroupIds = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The security group names.
+responseLaunchTemplateData_securityGroups :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [Prelude.Text])
+responseLaunchTemplateData_securityGroups = Lens.lens (\ResponseLaunchTemplateData' {securityGroups} -> securityGroups) (\s@ResponseLaunchTemplateData' {} a -> s {securityGroups = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags that are applied to the resources that are created during
+-- instance launch.
+responseLaunchTemplateData_tagSpecifications :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe [LaunchTemplateTagSpecification])
+responseLaunchTemplateData_tagSpecifications = Lens.lens (\ResponseLaunchTemplateData' {tagSpecifications} -> tagSpecifications) (\s@ResponseLaunchTemplateData' {} a -> s {tagSpecifications = a} :: ResponseLaunchTemplateData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The user data for the instance.
+responseLaunchTemplateData_userData :: Lens.Lens' ResponseLaunchTemplateData (Prelude.Maybe Prelude.Text)
+responseLaunchTemplateData_userData = Lens.lens (\ResponseLaunchTemplateData' {userData} -> userData) (\s@ResponseLaunchTemplateData' {} a -> s {userData = a} :: ResponseLaunchTemplateData)
+
+instance Data.FromXML ResponseLaunchTemplateData where
+  parseXML x =
+    ResponseLaunchTemplateData'
+      Prelude.<$> ( x
+                      Data..@? "blockDeviceMappingSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "capacityReservationSpecification")
+      Prelude.<*> (x Data..@? "cpuOptions")
+      Prelude.<*> (x Data..@? "creditSpecification")
+      Prelude.<*> (x Data..@? "disableApiStop")
+      Prelude.<*> (x Data..@? "disableApiTermination")
+      Prelude.<*> (x Data..@? "ebsOptimized")
+      Prelude.<*> ( x
+                      Data..@? "elasticGpuSpecificationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "elasticInferenceAcceleratorSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "enclaveOptions")
+      Prelude.<*> (x Data..@? "hibernationOptions")
+      Prelude.<*> (x Data..@? "iamInstanceProfile")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "instanceInitiatedShutdownBehavior")
+      Prelude.<*> (x Data..@? "instanceMarketOptions")
+      Prelude.<*> (x Data..@? "instanceRequirements")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "kernelId")
+      Prelude.<*> (x Data..@? "keyName")
+      Prelude.<*> ( x
+                      Data..@? "licenseSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "maintenanceOptions")
+      Prelude.<*> (x Data..@? "metadataOptions")
+      Prelude.<*> (x Data..@? "monitoring")
+      Prelude.<*> ( x
+                      Data..@? "networkInterfaceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "placement")
+      Prelude.<*> (x Data..@? "privateDnsNameOptions")
+      Prelude.<*> (x Data..@? "ramDiskId")
+      Prelude.<*> ( x
+                      Data..@? "securityGroupIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "securityGroupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSpecificationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "userData")
+
+instance Prelude.Hashable ResponseLaunchTemplateData where
+  hashWithSalt _salt ResponseLaunchTemplateData' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` capacityReservationSpecification
+      `Prelude.hashWithSalt` cpuOptions
+      `Prelude.hashWithSalt` creditSpecification
+      `Prelude.hashWithSalt` disableApiStop
+      `Prelude.hashWithSalt` disableApiTermination
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` elasticGpuSpecifications
+      `Prelude.hashWithSalt` elasticInferenceAccelerators
+      `Prelude.hashWithSalt` enclaveOptions
+      `Prelude.hashWithSalt` hibernationOptions
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceInitiatedShutdownBehavior
+      `Prelude.hashWithSalt` instanceMarketOptions
+      `Prelude.hashWithSalt` instanceRequirements
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` licenseSpecifications
+      `Prelude.hashWithSalt` maintenanceOptions
+      `Prelude.hashWithSalt` metadataOptions
+      `Prelude.hashWithSalt` monitoring
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` privateDnsNameOptions
+      `Prelude.hashWithSalt` ramDiskId
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` userData
+
+instance Prelude.NFData ResponseLaunchTemplateData where
+  rnf ResponseLaunchTemplateData' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf capacityReservationSpecification
+      `Prelude.seq` Prelude.rnf cpuOptions
+      `Prelude.seq` Prelude.rnf creditSpecification
+      `Prelude.seq` Prelude.rnf disableApiStop
+      `Prelude.seq` Prelude.rnf disableApiTermination
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf elasticGpuSpecifications
+      `Prelude.seq` Prelude.rnf elasticInferenceAccelerators
+      `Prelude.seq` Prelude.rnf enclaveOptions
+      `Prelude.seq` Prelude.rnf hibernationOptions
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf
+        instanceInitiatedShutdownBehavior
+      `Prelude.seq` Prelude.rnf instanceMarketOptions
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf
+        licenseSpecifications
+      `Prelude.seq` Prelude.rnf
+        maintenanceOptions
+      `Prelude.seq` Prelude.rnf
+        metadataOptions
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf
+        networkInterfaces
+      `Prelude.seq` Prelude.rnf
+        placement
+      `Prelude.seq` Prelude.rnf
+        privateDnsNameOptions
+      `Prelude.seq` Prelude.rnf
+        ramDiskId
+      `Prelude.seq` Prelude.rnf
+        securityGroupIds
+      `Prelude.seq` Prelude.rnf
+        securityGroups
+      `Prelude.seq` Prelude.rnf
+        tagSpecifications
+      `Prelude.seq` Prelude.rnf
+        userData
diff --git a/gen/Amazonka/EC2/Types/RootDeviceType.hs b/gen/Amazonka/EC2/Types/RootDeviceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RootDeviceType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RootDeviceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RootDeviceType
+  ( RootDeviceType
+      ( ..,
+        RootDeviceType_Ebs,
+        RootDeviceType_Instance_store
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RootDeviceType = RootDeviceType'
+  { fromRootDeviceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RootDeviceType_Ebs :: RootDeviceType
+pattern RootDeviceType_Ebs = RootDeviceType' "ebs"
+
+pattern RootDeviceType_Instance_store :: RootDeviceType
+pattern RootDeviceType_Instance_store = RootDeviceType' "instance-store"
+
+{-# COMPLETE
+  RootDeviceType_Ebs,
+  RootDeviceType_Instance_store,
+  RootDeviceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Route.hs b/gen/Amazonka/EC2/Types/Route.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Route.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Route
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Route where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.RouteOrigin
+import Amazonka.EC2.Types.RouteState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route in a route table.
+--
+-- /See:/ 'newRoute' smart constructor.
+data Route = Route'
+  { -- | The ID of the carrier gateway.
+    carrierGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the core network.
+    coreNetworkArn :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR block used for the destination match.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR block used for the destination match.
+    destinationIpv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The prefix of the Amazon Web Service.
+    destinationPrefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the egress-only internet gateway.
+    egressOnlyInternetGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a gateway attached to your VPC.
+    gatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a NAT instance in your VPC.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of Amazon Web Services account that owns the instance.
+    instanceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the local gateway.
+    localGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a NAT gateway.
+    natGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | Describes how the route was created.
+    --
+    -- -   @CreateRouteTable@ - The route was automatically created when the
+    --     route table was created.
+    --
+    -- -   @CreateRoute@ - The route was manually added to the route table.
+    --
+    -- -   @EnableVgwRoutePropagation@ - The route was propagated by route
+    --     propagation.
+    origin :: Prelude.Maybe RouteOrigin,
+    -- | The state of the route. The @blackhole@ state indicates that the
+    -- route\'s target isn\'t available (for example, the specified gateway
+    -- isn\'t attached to the VPC, or the specified NAT instance has been
+    -- terminated).
+    state :: Prelude.Maybe RouteState,
+    -- | The ID of a transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Route' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'carrierGatewayId', 'route_carrierGatewayId' - The ID of the carrier gateway.
+--
+-- 'coreNetworkArn', 'route_coreNetworkArn' - The Amazon Resource Name (ARN) of the core network.
+--
+-- 'destinationCidrBlock', 'route_destinationCidrBlock' - The IPv4 CIDR block used for the destination match.
+--
+-- 'destinationIpv6CidrBlock', 'route_destinationIpv6CidrBlock' - The IPv6 CIDR block used for the destination match.
+--
+-- 'destinationPrefixListId', 'route_destinationPrefixListId' - The prefix of the Amazon Web Service.
+--
+-- 'egressOnlyInternetGatewayId', 'route_egressOnlyInternetGatewayId' - The ID of the egress-only internet gateway.
+--
+-- 'gatewayId', 'route_gatewayId' - The ID of a gateway attached to your VPC.
+--
+-- 'instanceId', 'route_instanceId' - The ID of a NAT instance in your VPC.
+--
+-- 'instanceOwnerId', 'route_instanceOwnerId' - The ID of Amazon Web Services account that owns the instance.
+--
+-- 'localGatewayId', 'route_localGatewayId' - The ID of the local gateway.
+--
+-- 'natGatewayId', 'route_natGatewayId' - The ID of a NAT gateway.
+--
+-- 'networkInterfaceId', 'route_networkInterfaceId' - The ID of the network interface.
+--
+-- 'origin', 'route_origin' - Describes how the route was created.
+--
+-- -   @CreateRouteTable@ - The route was automatically created when the
+--     route table was created.
+--
+-- -   @CreateRoute@ - The route was manually added to the route table.
+--
+-- -   @EnableVgwRoutePropagation@ - The route was propagated by route
+--     propagation.
+--
+-- 'state', 'route_state' - The state of the route. The @blackhole@ state indicates that the
+-- route\'s target isn\'t available (for example, the specified gateway
+-- isn\'t attached to the VPC, or the specified NAT instance has been
+-- terminated).
+--
+-- 'transitGatewayId', 'route_transitGatewayId' - The ID of a transit gateway.
+--
+-- 'vpcPeeringConnectionId', 'route_vpcPeeringConnectionId' - The ID of a VPC peering connection.
+newRoute ::
+  Route
+newRoute =
+  Route'
+    { carrierGatewayId = Prelude.Nothing,
+      coreNetworkArn = Prelude.Nothing,
+      destinationCidrBlock = Prelude.Nothing,
+      destinationIpv6CidrBlock = Prelude.Nothing,
+      destinationPrefixListId = Prelude.Nothing,
+      egressOnlyInternetGatewayId = Prelude.Nothing,
+      gatewayId = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      instanceOwnerId = Prelude.Nothing,
+      localGatewayId = Prelude.Nothing,
+      natGatewayId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      origin = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | The ID of the carrier gateway.
+route_carrierGatewayId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_carrierGatewayId = Lens.lens (\Route' {carrierGatewayId} -> carrierGatewayId) (\s@Route' {} a -> s {carrierGatewayId = a} :: Route)
+
+-- | The Amazon Resource Name (ARN) of the core network.
+route_coreNetworkArn :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_coreNetworkArn = Lens.lens (\Route' {coreNetworkArn} -> coreNetworkArn) (\s@Route' {} a -> s {coreNetworkArn = a} :: Route)
+
+-- | The IPv4 CIDR block used for the destination match.
+route_destinationCidrBlock :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_destinationCidrBlock = Lens.lens (\Route' {destinationCidrBlock} -> destinationCidrBlock) (\s@Route' {} a -> s {destinationCidrBlock = a} :: Route)
+
+-- | The IPv6 CIDR block used for the destination match.
+route_destinationIpv6CidrBlock :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_destinationIpv6CidrBlock = Lens.lens (\Route' {destinationIpv6CidrBlock} -> destinationIpv6CidrBlock) (\s@Route' {} a -> s {destinationIpv6CidrBlock = a} :: Route)
+
+-- | The prefix of the Amazon Web Service.
+route_destinationPrefixListId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_destinationPrefixListId = Lens.lens (\Route' {destinationPrefixListId} -> destinationPrefixListId) (\s@Route' {} a -> s {destinationPrefixListId = a} :: Route)
+
+-- | The ID of the egress-only internet gateway.
+route_egressOnlyInternetGatewayId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_egressOnlyInternetGatewayId = Lens.lens (\Route' {egressOnlyInternetGatewayId} -> egressOnlyInternetGatewayId) (\s@Route' {} a -> s {egressOnlyInternetGatewayId = a} :: Route)
+
+-- | The ID of a gateway attached to your VPC.
+route_gatewayId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_gatewayId = Lens.lens (\Route' {gatewayId} -> gatewayId) (\s@Route' {} a -> s {gatewayId = a} :: Route)
+
+-- | The ID of a NAT instance in your VPC.
+route_instanceId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_instanceId = Lens.lens (\Route' {instanceId} -> instanceId) (\s@Route' {} a -> s {instanceId = a} :: Route)
+
+-- | The ID of Amazon Web Services account that owns the instance.
+route_instanceOwnerId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_instanceOwnerId = Lens.lens (\Route' {instanceOwnerId} -> instanceOwnerId) (\s@Route' {} a -> s {instanceOwnerId = a} :: Route)
+
+-- | The ID of the local gateway.
+route_localGatewayId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_localGatewayId = Lens.lens (\Route' {localGatewayId} -> localGatewayId) (\s@Route' {} a -> s {localGatewayId = a} :: Route)
+
+-- | The ID of a NAT gateway.
+route_natGatewayId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_natGatewayId = Lens.lens (\Route' {natGatewayId} -> natGatewayId) (\s@Route' {} a -> s {natGatewayId = a} :: Route)
+
+-- | The ID of the network interface.
+route_networkInterfaceId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_networkInterfaceId = Lens.lens (\Route' {networkInterfaceId} -> networkInterfaceId) (\s@Route' {} a -> s {networkInterfaceId = a} :: Route)
+
+-- | Describes how the route was created.
+--
+-- -   @CreateRouteTable@ - The route was automatically created when the
+--     route table was created.
+--
+-- -   @CreateRoute@ - The route was manually added to the route table.
+--
+-- -   @EnableVgwRoutePropagation@ - The route was propagated by route
+--     propagation.
+route_origin :: Lens.Lens' Route (Prelude.Maybe RouteOrigin)
+route_origin = Lens.lens (\Route' {origin} -> origin) (\s@Route' {} a -> s {origin = a} :: Route)
+
+-- | The state of the route. The @blackhole@ state indicates that the
+-- route\'s target isn\'t available (for example, the specified gateway
+-- isn\'t attached to the VPC, or the specified NAT instance has been
+-- terminated).
+route_state :: Lens.Lens' Route (Prelude.Maybe RouteState)
+route_state = Lens.lens (\Route' {state} -> state) (\s@Route' {} a -> s {state = a} :: Route)
+
+-- | The ID of a transit gateway.
+route_transitGatewayId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_transitGatewayId = Lens.lens (\Route' {transitGatewayId} -> transitGatewayId) (\s@Route' {} a -> s {transitGatewayId = a} :: Route)
+
+-- | The ID of a VPC peering connection.
+route_vpcPeeringConnectionId :: Lens.Lens' Route (Prelude.Maybe Prelude.Text)
+route_vpcPeeringConnectionId = Lens.lens (\Route' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@Route' {} a -> s {vpcPeeringConnectionId = a} :: Route)
+
+instance Data.FromXML Route where
+  parseXML x =
+    Route'
+      Prelude.<$> (x Data..@? "carrierGatewayId")
+      Prelude.<*> (x Data..@? "coreNetworkArn")
+      Prelude.<*> (x Data..@? "destinationCidrBlock")
+      Prelude.<*> (x Data..@? "destinationIpv6CidrBlock")
+      Prelude.<*> (x Data..@? "destinationPrefixListId")
+      Prelude.<*> (x Data..@? "egressOnlyInternetGatewayId")
+      Prelude.<*> (x Data..@? "gatewayId")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "instanceOwnerId")
+      Prelude.<*> (x Data..@? "localGatewayId")
+      Prelude.<*> (x Data..@? "natGatewayId")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "origin")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "vpcPeeringConnectionId")
+
+instance Prelude.Hashable Route where
+  hashWithSalt _salt Route' {..} =
+    _salt
+      `Prelude.hashWithSalt` carrierGatewayId
+      `Prelude.hashWithSalt` coreNetworkArn
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationIpv6CidrBlock
+      `Prelude.hashWithSalt` destinationPrefixListId
+      `Prelude.hashWithSalt` egressOnlyInternetGatewayId
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceOwnerId
+      `Prelude.hashWithSalt` localGatewayId
+      `Prelude.hashWithSalt` natGatewayId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` origin
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData Route where
+  rnf Route' {..} =
+    Prelude.rnf carrierGatewayId
+      `Prelude.seq` Prelude.rnf coreNetworkArn
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationIpv6CidrBlock
+      `Prelude.seq` Prelude.rnf destinationPrefixListId
+      `Prelude.seq` Prelude.rnf egressOnlyInternetGatewayId
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceOwnerId
+      `Prelude.seq` Prelude.rnf localGatewayId
+      `Prelude.seq` Prelude.rnf natGatewayId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf origin
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
diff --git a/gen/Amazonka/EC2/Types/RouteOrigin.hs b/gen/Amazonka/EC2/Types/RouteOrigin.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RouteOrigin.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RouteOrigin
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RouteOrigin
+  ( RouteOrigin
+      ( ..,
+        RouteOrigin_CreateRoute,
+        RouteOrigin_CreateRouteTable,
+        RouteOrigin_EnableVgwRoutePropagation
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RouteOrigin = RouteOrigin'
+  { fromRouteOrigin ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RouteOrigin_CreateRoute :: RouteOrigin
+pattern RouteOrigin_CreateRoute = RouteOrigin' "CreateRoute"
+
+pattern RouteOrigin_CreateRouteTable :: RouteOrigin
+pattern RouteOrigin_CreateRouteTable = RouteOrigin' "CreateRouteTable"
+
+pattern RouteOrigin_EnableVgwRoutePropagation :: RouteOrigin
+pattern RouteOrigin_EnableVgwRoutePropagation = RouteOrigin' "EnableVgwRoutePropagation"
+
+{-# COMPLETE
+  RouteOrigin_CreateRoute,
+  RouteOrigin_CreateRouteTable,
+  RouteOrigin_EnableVgwRoutePropagation,
+  RouteOrigin'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/RouteState.hs b/gen/Amazonka/EC2/Types/RouteState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RouteState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RouteState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RouteState
+  ( RouteState
+      ( ..,
+        RouteState_Active,
+        RouteState_Blackhole
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RouteState = RouteState'
+  { fromRouteState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RouteState_Active :: RouteState
+pattern RouteState_Active = RouteState' "active"
+
+pattern RouteState_Blackhole :: RouteState
+pattern RouteState_Blackhole = RouteState' "blackhole"
+
+{-# COMPLETE
+  RouteState_Active,
+  RouteState_Blackhole,
+  RouteState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/RouteTable.hs b/gen/Amazonka/EC2/Types/RouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RouteTable.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RouteTable where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PropagatingVgw
+import Amazonka.EC2.Types.Route
+import Amazonka.EC2.Types.RouteTableAssociation
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route table.
+--
+-- /See:/ 'newRouteTable' smart constructor.
+data RouteTable = RouteTable'
+  { -- | The associations between the route table and one or more subnets or a
+    -- gateway.
+    associations :: Prelude.Maybe [RouteTableAssociation],
+    -- | The ID of the Amazon Web Services account that owns the route table.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Any virtual private gateway (VGW) propagating routes.
+    propagatingVgws :: Prelude.Maybe [PropagatingVgw],
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Maybe Prelude.Text,
+    -- | The routes in the route table.
+    routes :: Prelude.Maybe [Route],
+    -- | Any tags assigned to the route table.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associations', 'routeTable_associations' - The associations between the route table and one or more subnets or a
+-- gateway.
+--
+-- 'ownerId', 'routeTable_ownerId' - The ID of the Amazon Web Services account that owns the route table.
+--
+-- 'propagatingVgws', 'routeTable_propagatingVgws' - Any virtual private gateway (VGW) propagating routes.
+--
+-- 'routeTableId', 'routeTable_routeTableId' - The ID of the route table.
+--
+-- 'routes', 'routeTable_routes' - The routes in the route table.
+--
+-- 'tags', 'routeTable_tags' - Any tags assigned to the route table.
+--
+-- 'vpcId', 'routeTable_vpcId' - The ID of the VPC.
+newRouteTable ::
+  RouteTable
+newRouteTable =
+  RouteTable'
+    { associations = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      propagatingVgws = Prelude.Nothing,
+      routeTableId = Prelude.Nothing,
+      routes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The associations between the route table and one or more subnets or a
+-- gateway.
+routeTable_associations :: Lens.Lens' RouteTable (Prelude.Maybe [RouteTableAssociation])
+routeTable_associations = Lens.lens (\RouteTable' {associations} -> associations) (\s@RouteTable' {} a -> s {associations = a} :: RouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services account that owns the route table.
+routeTable_ownerId :: Lens.Lens' RouteTable (Prelude.Maybe Prelude.Text)
+routeTable_ownerId = Lens.lens (\RouteTable' {ownerId} -> ownerId) (\s@RouteTable' {} a -> s {ownerId = a} :: RouteTable)
+
+-- | Any virtual private gateway (VGW) propagating routes.
+routeTable_propagatingVgws :: Lens.Lens' RouteTable (Prelude.Maybe [PropagatingVgw])
+routeTable_propagatingVgws = Lens.lens (\RouteTable' {propagatingVgws} -> propagatingVgws) (\s@RouteTable' {} a -> s {propagatingVgws = a} :: RouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the route table.
+routeTable_routeTableId :: Lens.Lens' RouteTable (Prelude.Maybe Prelude.Text)
+routeTable_routeTableId = Lens.lens (\RouteTable' {routeTableId} -> routeTableId) (\s@RouteTable' {} a -> s {routeTableId = a} :: RouteTable)
+
+-- | The routes in the route table.
+routeTable_routes :: Lens.Lens' RouteTable (Prelude.Maybe [Route])
+routeTable_routes = Lens.lens (\RouteTable' {routes} -> routes) (\s@RouteTable' {} a -> s {routes = a} :: RouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any tags assigned to the route table.
+routeTable_tags :: Lens.Lens' RouteTable (Prelude.Maybe [Tag])
+routeTable_tags = Lens.lens (\RouteTable' {tags} -> tags) (\s@RouteTable' {} a -> s {tags = a} :: RouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+routeTable_vpcId :: Lens.Lens' RouteTable (Prelude.Maybe Prelude.Text)
+routeTable_vpcId = Lens.lens (\RouteTable' {vpcId} -> vpcId) (\s@RouteTable' {} a -> s {vpcId = a} :: RouteTable)
+
+instance Data.FromXML RouteTable where
+  parseXML x =
+    RouteTable'
+      Prelude.<$> ( x
+                      Data..@? "associationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "propagatingVgwSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "routeTableId")
+      Prelude.<*> ( x
+                      Data..@? "routeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable RouteTable where
+  hashWithSalt _salt RouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` associations
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` propagatingVgws
+      `Prelude.hashWithSalt` routeTableId
+      `Prelude.hashWithSalt` routes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData RouteTable where
+  rnf RouteTable' {..} =
+    Prelude.rnf associations
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf propagatingVgws
+      `Prelude.seq` Prelude.rnf routeTableId
+      `Prelude.seq` Prelude.rnf routes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/RouteTableAssociation.hs b/gen/Amazonka/EC2/Types/RouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RouteTableAssociation.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RouteTableAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RouteTableAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.RouteTableAssociationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a route table and a subnet or gateway.
+--
+-- /See:/ 'newRouteTableAssociation' smart constructor.
+data RouteTableAssociation = RouteTableAssociation'
+  { -- | The state of the association.
+    associationState :: Prelude.Maybe RouteTableAssociationState,
+    -- | The ID of the internet gateway or virtual private gateway.
+    gatewayId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether this is the main route table.
+    main :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the association.
+    routeTableAssociationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the route table.
+    routeTableId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet. A subnet ID is not returned for an implicit
+    -- association.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteTableAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationState', 'routeTableAssociation_associationState' - The state of the association.
+--
+-- 'gatewayId', 'routeTableAssociation_gatewayId' - The ID of the internet gateway or virtual private gateway.
+--
+-- 'main', 'routeTableAssociation_main' - Indicates whether this is the main route table.
+--
+-- 'routeTableAssociationId', 'routeTableAssociation_routeTableAssociationId' - The ID of the association.
+--
+-- 'routeTableId', 'routeTableAssociation_routeTableId' - The ID of the route table.
+--
+-- 'subnetId', 'routeTableAssociation_subnetId' - The ID of the subnet. A subnet ID is not returned for an implicit
+-- association.
+newRouteTableAssociation ::
+  RouteTableAssociation
+newRouteTableAssociation =
+  RouteTableAssociation'
+    { associationState =
+        Prelude.Nothing,
+      gatewayId = Prelude.Nothing,
+      main = Prelude.Nothing,
+      routeTableAssociationId = Prelude.Nothing,
+      routeTableId = Prelude.Nothing,
+      subnetId = Prelude.Nothing
+    }
+
+-- | The state of the association.
+routeTableAssociation_associationState :: Lens.Lens' RouteTableAssociation (Prelude.Maybe RouteTableAssociationState)
+routeTableAssociation_associationState = Lens.lens (\RouteTableAssociation' {associationState} -> associationState) (\s@RouteTableAssociation' {} a -> s {associationState = a} :: RouteTableAssociation)
+
+-- | The ID of the internet gateway or virtual private gateway.
+routeTableAssociation_gatewayId :: Lens.Lens' RouteTableAssociation (Prelude.Maybe Prelude.Text)
+routeTableAssociation_gatewayId = Lens.lens (\RouteTableAssociation' {gatewayId} -> gatewayId) (\s@RouteTableAssociation' {} a -> s {gatewayId = a} :: RouteTableAssociation)
+
+-- | Indicates whether this is the main route table.
+routeTableAssociation_main :: Lens.Lens' RouteTableAssociation (Prelude.Maybe Prelude.Bool)
+routeTableAssociation_main = Lens.lens (\RouteTableAssociation' {main} -> main) (\s@RouteTableAssociation' {} a -> s {main = a} :: RouteTableAssociation)
+
+-- | The ID of the association.
+routeTableAssociation_routeTableAssociationId :: Lens.Lens' RouteTableAssociation (Prelude.Maybe Prelude.Text)
+routeTableAssociation_routeTableAssociationId = Lens.lens (\RouteTableAssociation' {routeTableAssociationId} -> routeTableAssociationId) (\s@RouteTableAssociation' {} a -> s {routeTableAssociationId = a} :: RouteTableAssociation)
+
+-- | The ID of the route table.
+routeTableAssociation_routeTableId :: Lens.Lens' RouteTableAssociation (Prelude.Maybe Prelude.Text)
+routeTableAssociation_routeTableId = Lens.lens (\RouteTableAssociation' {routeTableId} -> routeTableId) (\s@RouteTableAssociation' {} a -> s {routeTableId = a} :: RouteTableAssociation)
+
+-- | The ID of the subnet. A subnet ID is not returned for an implicit
+-- association.
+routeTableAssociation_subnetId :: Lens.Lens' RouteTableAssociation (Prelude.Maybe Prelude.Text)
+routeTableAssociation_subnetId = Lens.lens (\RouteTableAssociation' {subnetId} -> subnetId) (\s@RouteTableAssociation' {} a -> s {subnetId = a} :: RouteTableAssociation)
+
+instance Data.FromXML RouteTableAssociation where
+  parseXML x =
+    RouteTableAssociation'
+      Prelude.<$> (x Data..@? "associationState")
+      Prelude.<*> (x Data..@? "gatewayId")
+      Prelude.<*> (x Data..@? "main")
+      Prelude.<*> (x Data..@? "routeTableAssociationId")
+      Prelude.<*> (x Data..@? "routeTableId")
+      Prelude.<*> (x Data..@? "subnetId")
+
+instance Prelude.Hashable RouteTableAssociation where
+  hashWithSalt _salt RouteTableAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationState
+      `Prelude.hashWithSalt` gatewayId
+      `Prelude.hashWithSalt` main
+      `Prelude.hashWithSalt` routeTableAssociationId
+      `Prelude.hashWithSalt` routeTableId
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData RouteTableAssociation where
+  rnf RouteTableAssociation' {..} =
+    Prelude.rnf associationState
+      `Prelude.seq` Prelude.rnf gatewayId
+      `Prelude.seq` Prelude.rnf main
+      `Prelude.seq` Prelude.rnf routeTableAssociationId
+      `Prelude.seq` Prelude.rnf routeTableId
+      `Prelude.seq` Prelude.rnf subnetId
diff --git a/gen/Amazonka/EC2/Types/RouteTableAssociationState.hs b/gen/Amazonka/EC2/Types/RouteTableAssociationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RouteTableAssociationState.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RouteTableAssociationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RouteTableAssociationState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.RouteTableAssociationStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of an association between a route table and a subnet
+-- or gateway.
+--
+-- /See:/ 'newRouteTableAssociationState' smart constructor.
+data RouteTableAssociationState = RouteTableAssociationState'
+  { -- | The state of the association.
+    state :: Prelude.Maybe RouteTableAssociationStateCode,
+    -- | The status message, if applicable.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RouteTableAssociationState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'routeTableAssociationState_state' - The state of the association.
+--
+-- 'statusMessage', 'routeTableAssociationState_statusMessage' - The status message, if applicable.
+newRouteTableAssociationState ::
+  RouteTableAssociationState
+newRouteTableAssociationState =
+  RouteTableAssociationState'
+    { state =
+        Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The state of the association.
+routeTableAssociationState_state :: Lens.Lens' RouteTableAssociationState (Prelude.Maybe RouteTableAssociationStateCode)
+routeTableAssociationState_state = Lens.lens (\RouteTableAssociationState' {state} -> state) (\s@RouteTableAssociationState' {} a -> s {state = a} :: RouteTableAssociationState)
+
+-- | The status message, if applicable.
+routeTableAssociationState_statusMessage :: Lens.Lens' RouteTableAssociationState (Prelude.Maybe Prelude.Text)
+routeTableAssociationState_statusMessage = Lens.lens (\RouteTableAssociationState' {statusMessage} -> statusMessage) (\s@RouteTableAssociationState' {} a -> s {statusMessage = a} :: RouteTableAssociationState)
+
+instance Data.FromXML RouteTableAssociationState where
+  parseXML x =
+    RouteTableAssociationState'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "statusMessage")
+
+instance Prelude.Hashable RouteTableAssociationState where
+  hashWithSalt _salt RouteTableAssociationState' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData RouteTableAssociationState where
+  rnf RouteTableAssociationState' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/RouteTableAssociationStateCode.hs b/gen/Amazonka/EC2/Types/RouteTableAssociationStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RouteTableAssociationStateCode.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RouteTableAssociationStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RouteTableAssociationStateCode
+  ( RouteTableAssociationStateCode
+      ( ..,
+        RouteTableAssociationStateCode_Associated,
+        RouteTableAssociationStateCode_Associating,
+        RouteTableAssociationStateCode_Disassociated,
+        RouteTableAssociationStateCode_Disassociating,
+        RouteTableAssociationStateCode_Failed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RouteTableAssociationStateCode = RouteTableAssociationStateCode'
+  { fromRouteTableAssociationStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RouteTableAssociationStateCode_Associated :: RouteTableAssociationStateCode
+pattern RouteTableAssociationStateCode_Associated = RouteTableAssociationStateCode' "associated"
+
+pattern RouteTableAssociationStateCode_Associating :: RouteTableAssociationStateCode
+pattern RouteTableAssociationStateCode_Associating = RouteTableAssociationStateCode' "associating"
+
+pattern RouteTableAssociationStateCode_Disassociated :: RouteTableAssociationStateCode
+pattern RouteTableAssociationStateCode_Disassociated = RouteTableAssociationStateCode' "disassociated"
+
+pattern RouteTableAssociationStateCode_Disassociating :: RouteTableAssociationStateCode
+pattern RouteTableAssociationStateCode_Disassociating = RouteTableAssociationStateCode' "disassociating"
+
+pattern RouteTableAssociationStateCode_Failed :: RouteTableAssociationStateCode
+pattern RouteTableAssociationStateCode_Failed = RouteTableAssociationStateCode' "failed"
+
+{-# COMPLETE
+  RouteTableAssociationStateCode_Associated,
+  RouteTableAssociationStateCode_Associating,
+  RouteTableAssociationStateCode_Disassociated,
+  RouteTableAssociationStateCode_Disassociating,
+  RouteTableAssociationStateCode_Failed,
+  RouteTableAssociationStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/RuleAction.hs b/gen/Amazonka/EC2/Types/RuleAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RuleAction.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RuleAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RuleAction
+  ( RuleAction
+      ( ..,
+        RuleAction_Allow,
+        RuleAction_Deny
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype RuleAction = RuleAction'
+  { fromRuleAction ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RuleAction_Allow :: RuleAction
+pattern RuleAction_Allow = RuleAction' "allow"
+
+pattern RuleAction_Deny :: RuleAction
+pattern RuleAction_Deny = RuleAction' "deny"
+
+{-# COMPLETE
+  RuleAction_Allow,
+  RuleAction_Deny,
+  RuleAction'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/RunInstancesMonitoringEnabled.hs b/gen/Amazonka/EC2/Types/RunInstancesMonitoringEnabled.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/RunInstancesMonitoringEnabled.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.RunInstancesMonitoringEnabled
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.RunInstancesMonitoringEnabled where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the monitoring of an instance.
+--
+-- /See:/ 'newRunInstancesMonitoringEnabled' smart constructor.
+data RunInstancesMonitoringEnabled = RunInstancesMonitoringEnabled'
+  { -- | Indicates whether detailed monitoring is enabled. Otherwise, basic
+    -- monitoring is enabled.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RunInstancesMonitoringEnabled' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'runInstancesMonitoringEnabled_enabled' - Indicates whether detailed monitoring is enabled. Otherwise, basic
+-- monitoring is enabled.
+newRunInstancesMonitoringEnabled ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  RunInstancesMonitoringEnabled
+newRunInstancesMonitoringEnabled pEnabled_ =
+  RunInstancesMonitoringEnabled' {enabled = pEnabled_}
+
+-- | Indicates whether detailed monitoring is enabled. Otherwise, basic
+-- monitoring is enabled.
+runInstancesMonitoringEnabled_enabled :: Lens.Lens' RunInstancesMonitoringEnabled Prelude.Bool
+runInstancesMonitoringEnabled_enabled = Lens.lens (\RunInstancesMonitoringEnabled' {enabled} -> enabled) (\s@RunInstancesMonitoringEnabled' {} a -> s {enabled = a} :: RunInstancesMonitoringEnabled)
+
+instance Data.FromXML RunInstancesMonitoringEnabled where
+  parseXML x =
+    RunInstancesMonitoringEnabled'
+      Prelude.<$> (x Data..@ "enabled")
+
+instance
+  Prelude.Hashable
+    RunInstancesMonitoringEnabled
+  where
+  hashWithSalt _salt RunInstancesMonitoringEnabled' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData RunInstancesMonitoringEnabled where
+  rnf RunInstancesMonitoringEnabled' {..} =
+    Prelude.rnf enabled
+
+instance Data.ToQuery RunInstancesMonitoringEnabled where
+  toQuery RunInstancesMonitoringEnabled' {..} =
+    Prelude.mconcat ["Enabled" Data.=: enabled]
diff --git a/gen/Amazonka/EC2/Types/S3ObjectTag.hs b/gen/Amazonka/EC2/Types/S3ObjectTag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/S3ObjectTag.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.S3ObjectTag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.S3ObjectTag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tags to apply to the AMI object that will be stored in the Amazon S3
+-- bucket. For more information, see
+-- <https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html Categorizing your storage using tags>
+-- in the /Amazon Simple Storage Service User Guide/.
+--
+-- /See:/ 'newS3ObjectTag' smart constructor.
+data S3ObjectTag = S3ObjectTag'
+  { -- | The key of the tag.
+    --
+    -- Constraints: Tag keys are case-sensitive and can be up to 128 Unicode
+    -- characters in length. May not begin with @aws@:.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The value of the tag.
+    --
+    -- Constraints: Tag values are case-sensitive and can be up to 256 Unicode
+    -- characters in length.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3ObjectTag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 's3ObjectTag_key' - The key of the tag.
+--
+-- Constraints: Tag keys are case-sensitive and can be up to 128 Unicode
+-- characters in length. May not begin with @aws@:.
+--
+-- 'value', 's3ObjectTag_value' - The value of the tag.
+--
+-- Constraints: Tag values are case-sensitive and can be up to 256 Unicode
+-- characters in length.
+newS3ObjectTag ::
+  S3ObjectTag
+newS3ObjectTag =
+  S3ObjectTag'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The key of the tag.
+--
+-- Constraints: Tag keys are case-sensitive and can be up to 128 Unicode
+-- characters in length. May not begin with @aws@:.
+s3ObjectTag_key :: Lens.Lens' S3ObjectTag (Prelude.Maybe Prelude.Text)
+s3ObjectTag_key = Lens.lens (\S3ObjectTag' {key} -> key) (\s@S3ObjectTag' {} a -> s {key = a} :: S3ObjectTag)
+
+-- | The value of the tag.
+--
+-- Constraints: Tag values are case-sensitive and can be up to 256 Unicode
+-- characters in length.
+s3ObjectTag_value :: Lens.Lens' S3ObjectTag (Prelude.Maybe Prelude.Text)
+s3ObjectTag_value = Lens.lens (\S3ObjectTag' {value} -> value) (\s@S3ObjectTag' {} a -> s {value = a} :: S3ObjectTag)
+
+instance Prelude.Hashable S3ObjectTag where
+  hashWithSalt _salt S3ObjectTag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData S3ObjectTag where
+  rnf S3ObjectTag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToQuery S3ObjectTag where
+  toQuery S3ObjectTag' {..} =
+    Prelude.mconcat
+      ["Key" Data.=: key, "Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/S3Storage.hs b/gen/Amazonka/EC2/Types/S3Storage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/S3Storage.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.S3Storage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.S3Storage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the storage parameters for Amazon S3 and Amazon S3 buckets for
+-- an instance store-backed AMI.
+--
+-- /See:/ 'newS3Storage' smart constructor.
+data S3Storage = S3Storage'
+  { -- | 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
+    -- <https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best practices for managing Amazon Web Services access keys>.
+    aWSAccessKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The bucket in which to store the AMI. You can specify a bucket that you
+    -- already own or a new bucket that Amazon EC2 creates on your behalf. If
+    -- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+    -- error.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The beginning of the file name of the AMI.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | An Amazon S3 upload policy that gives Amazon EC2 permission to upload
+    -- items into Amazon S3 on your behalf.
+    uploadPolicy :: Prelude.Maybe Data.Base64,
+    -- | The signature of the JSON document.
+    uploadPolicySignature :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Storage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'aWSAccessKeyId', 's3Storage_aWSAccessKeyId' - 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
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best practices for managing Amazon Web Services access keys>.
+--
+-- 'bucket', 's3Storage_bucket' - The bucket in which to store the AMI. You can specify a bucket that you
+-- already own or a new bucket that Amazon EC2 creates on your behalf. If
+-- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+-- error.
+--
+-- 'prefix', 's3Storage_prefix' - The beginning of the file name of the AMI.
+--
+-- 'uploadPolicy', 's3Storage_uploadPolicy' - An Amazon S3 upload policy that gives Amazon EC2 permission to upload
+-- items into Amazon S3 on your behalf.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+--
+-- 'uploadPolicySignature', 's3Storage_uploadPolicySignature' - The signature of the JSON document.
+newS3Storage ::
+  S3Storage
+newS3Storage =
+  S3Storage'
+    { aWSAccessKeyId = Prelude.Nothing,
+      bucket = Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      uploadPolicy = Prelude.Nothing,
+      uploadPolicySignature = Prelude.Nothing
+    }
+
+-- | 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
+-- <https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best practices for managing Amazon Web Services access keys>.
+s3Storage_aWSAccessKeyId :: Lens.Lens' S3Storage (Prelude.Maybe Prelude.Text)
+s3Storage_aWSAccessKeyId = Lens.lens (\S3Storage' {aWSAccessKeyId} -> aWSAccessKeyId) (\s@S3Storage' {} a -> s {aWSAccessKeyId = a} :: S3Storage)
+
+-- | The bucket in which to store the AMI. You can specify a bucket that you
+-- already own or a new bucket that Amazon EC2 creates on your behalf. If
+-- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+-- error.
+s3Storage_bucket :: Lens.Lens' S3Storage (Prelude.Maybe Prelude.Text)
+s3Storage_bucket = Lens.lens (\S3Storage' {bucket} -> bucket) (\s@S3Storage' {} a -> s {bucket = a} :: S3Storage)
+
+-- | The beginning of the file name of the AMI.
+s3Storage_prefix :: Lens.Lens' S3Storage (Prelude.Maybe Prelude.Text)
+s3Storage_prefix = Lens.lens (\S3Storage' {prefix} -> prefix) (\s@S3Storage' {} a -> s {prefix = a} :: S3Storage)
+
+-- | An Amazon S3 upload policy that gives Amazon EC2 permission to upload
+-- items into Amazon S3 on your behalf.--
+-- -- /Note:/ This 'Lens' automatically encodes and decodes Base64 data.
+-- -- The underlying isomorphism will encode to Base64 representation during
+-- -- serialisation, and decode from Base64 representation during deserialisation.
+-- -- This 'Lens' accepts and returns only raw unencoded data.
+s3Storage_uploadPolicy :: Lens.Lens' S3Storage (Prelude.Maybe Prelude.ByteString)
+s3Storage_uploadPolicy = Lens.lens (\S3Storage' {uploadPolicy} -> uploadPolicy) (\s@S3Storage' {} a -> s {uploadPolicy = a} :: S3Storage) Prelude.. Lens.mapping Data._Base64
+
+-- | The signature of the JSON document.
+s3Storage_uploadPolicySignature :: Lens.Lens' S3Storage (Prelude.Maybe Prelude.Text)
+s3Storage_uploadPolicySignature = Lens.lens (\S3Storage' {uploadPolicySignature} -> uploadPolicySignature) (\s@S3Storage' {} a -> s {uploadPolicySignature = a} :: S3Storage)
+
+instance Data.FromXML S3Storage where
+  parseXML x =
+    S3Storage'
+      Prelude.<$> (x Data..@? "AWSAccessKeyId")
+      Prelude.<*> (x Data..@? "bucket")
+      Prelude.<*> (x Data..@? "prefix")
+      Prelude.<*> (x Data..@? "uploadPolicy")
+      Prelude.<*> (x Data..@? "uploadPolicySignature")
+
+instance Prelude.Hashable S3Storage where
+  hashWithSalt _salt S3Storage' {..} =
+    _salt
+      `Prelude.hashWithSalt` aWSAccessKeyId
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` prefix
+      `Prelude.hashWithSalt` uploadPolicy
+      `Prelude.hashWithSalt` uploadPolicySignature
+
+instance Prelude.NFData S3Storage where
+  rnf S3Storage' {..} =
+    Prelude.rnf aWSAccessKeyId
+      `Prelude.seq` Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf uploadPolicy
+      `Prelude.seq` Prelude.rnf uploadPolicySignature
+
+instance Data.ToQuery S3Storage where
+  toQuery S3Storage' {..} =
+    Prelude.mconcat
+      [ "AWSAccessKeyId" Data.=: aWSAccessKeyId,
+        "Bucket" Data.=: bucket,
+        "Prefix" Data.=: prefix,
+        "UploadPolicy" Data.=: uploadPolicy,
+        "UploadPolicySignature"
+          Data.=: uploadPolicySignature
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstance.hs b/gen/Amazonka/EC2/Types/ScheduledInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstance.hs
@@ -0,0 +1,239 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ScheduledInstanceRecurrence
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstance' smart constructor.
+data ScheduledInstance = ScheduledInstance'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The date when the Scheduled Instance was purchased.
+    createDate :: Prelude.Maybe Data.ISO8601,
+    -- | The hourly price for a single instance.
+    hourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The number of instances.
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The network platform (@EC2-Classic@ or @EC2-VPC@).
+    networkPlatform :: Prelude.Maybe Prelude.Text,
+    -- | The time for the next schedule to start.
+    nextSlotStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | The platform (@Linux\/UNIX@ or @Windows@).
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | The time that the previous schedule ended or will end.
+    previousSlotEndTime :: Prelude.Maybe Data.ISO8601,
+    -- | The schedule recurrence.
+    recurrence :: Prelude.Maybe ScheduledInstanceRecurrence,
+    -- | The Scheduled Instance ID.
+    scheduledInstanceId :: Prelude.Maybe Prelude.Text,
+    -- | The number of hours in the schedule.
+    slotDurationInHours :: Prelude.Maybe Prelude.Int,
+    -- | The end date for the Scheduled Instance.
+    termEndDate :: Prelude.Maybe Data.ISO8601,
+    -- | The start date for the Scheduled Instance.
+    termStartDate :: Prelude.Maybe Data.ISO8601,
+    -- | The total number of hours for a single instance for the entire term.
+    totalScheduledInstanceHours :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'scheduledInstance_availabilityZone' - The Availability Zone.
+--
+-- 'createDate', 'scheduledInstance_createDate' - The date when the Scheduled Instance was purchased.
+--
+-- 'hourlyPrice', 'scheduledInstance_hourlyPrice' - The hourly price for a single instance.
+--
+-- 'instanceCount', 'scheduledInstance_instanceCount' - The number of instances.
+--
+-- 'instanceType', 'scheduledInstance_instanceType' - The instance type.
+--
+-- 'networkPlatform', 'scheduledInstance_networkPlatform' - The network platform (@EC2-Classic@ or @EC2-VPC@).
+--
+-- 'nextSlotStartTime', 'scheduledInstance_nextSlotStartTime' - The time for the next schedule to start.
+--
+-- 'platform', 'scheduledInstance_platform' - The platform (@Linux\/UNIX@ or @Windows@).
+--
+-- 'previousSlotEndTime', 'scheduledInstance_previousSlotEndTime' - The time that the previous schedule ended or will end.
+--
+-- 'recurrence', 'scheduledInstance_recurrence' - The schedule recurrence.
+--
+-- 'scheduledInstanceId', 'scheduledInstance_scheduledInstanceId' - The Scheduled Instance ID.
+--
+-- 'slotDurationInHours', 'scheduledInstance_slotDurationInHours' - The number of hours in the schedule.
+--
+-- 'termEndDate', 'scheduledInstance_termEndDate' - The end date for the Scheduled Instance.
+--
+-- 'termStartDate', 'scheduledInstance_termStartDate' - The start date for the Scheduled Instance.
+--
+-- 'totalScheduledInstanceHours', 'scheduledInstance_totalScheduledInstanceHours' - The total number of hours for a single instance for the entire term.
+newScheduledInstance ::
+  ScheduledInstance
+newScheduledInstance =
+  ScheduledInstance'
+    { availabilityZone =
+        Prelude.Nothing,
+      createDate = Prelude.Nothing,
+      hourlyPrice = Prelude.Nothing,
+      instanceCount = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      networkPlatform = Prelude.Nothing,
+      nextSlotStartTime = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      previousSlotEndTime = Prelude.Nothing,
+      recurrence = Prelude.Nothing,
+      scheduledInstanceId = Prelude.Nothing,
+      slotDurationInHours = Prelude.Nothing,
+      termEndDate = Prelude.Nothing,
+      termStartDate = Prelude.Nothing,
+      totalScheduledInstanceHours = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+scheduledInstance_availabilityZone :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Text)
+scheduledInstance_availabilityZone = Lens.lens (\ScheduledInstance' {availabilityZone} -> availabilityZone) (\s@ScheduledInstance' {} a -> s {availabilityZone = a} :: ScheduledInstance)
+
+-- | The date when the Scheduled Instance was purchased.
+scheduledInstance_createDate :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.UTCTime)
+scheduledInstance_createDate = Lens.lens (\ScheduledInstance' {createDate} -> createDate) (\s@ScheduledInstance' {} a -> s {createDate = a} :: ScheduledInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The hourly price for a single instance.
+scheduledInstance_hourlyPrice :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Text)
+scheduledInstance_hourlyPrice = Lens.lens (\ScheduledInstance' {hourlyPrice} -> hourlyPrice) (\s@ScheduledInstance' {} a -> s {hourlyPrice = a} :: ScheduledInstance)
+
+-- | The number of instances.
+scheduledInstance_instanceCount :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Int)
+scheduledInstance_instanceCount = Lens.lens (\ScheduledInstance' {instanceCount} -> instanceCount) (\s@ScheduledInstance' {} a -> s {instanceCount = a} :: ScheduledInstance)
+
+-- | The instance type.
+scheduledInstance_instanceType :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Text)
+scheduledInstance_instanceType = Lens.lens (\ScheduledInstance' {instanceType} -> instanceType) (\s@ScheduledInstance' {} a -> s {instanceType = a} :: ScheduledInstance)
+
+-- | The network platform (@EC2-Classic@ or @EC2-VPC@).
+scheduledInstance_networkPlatform :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Text)
+scheduledInstance_networkPlatform = Lens.lens (\ScheduledInstance' {networkPlatform} -> networkPlatform) (\s@ScheduledInstance' {} a -> s {networkPlatform = a} :: ScheduledInstance)
+
+-- | The time for the next schedule to start.
+scheduledInstance_nextSlotStartTime :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.UTCTime)
+scheduledInstance_nextSlotStartTime = Lens.lens (\ScheduledInstance' {nextSlotStartTime} -> nextSlotStartTime) (\s@ScheduledInstance' {} a -> s {nextSlotStartTime = a} :: ScheduledInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The platform (@Linux\/UNIX@ or @Windows@).
+scheduledInstance_platform :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Text)
+scheduledInstance_platform = Lens.lens (\ScheduledInstance' {platform} -> platform) (\s@ScheduledInstance' {} a -> s {platform = a} :: ScheduledInstance)
+
+-- | The time that the previous schedule ended or will end.
+scheduledInstance_previousSlotEndTime :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.UTCTime)
+scheduledInstance_previousSlotEndTime = Lens.lens (\ScheduledInstance' {previousSlotEndTime} -> previousSlotEndTime) (\s@ScheduledInstance' {} a -> s {previousSlotEndTime = a} :: ScheduledInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The schedule recurrence.
+scheduledInstance_recurrence :: Lens.Lens' ScheduledInstance (Prelude.Maybe ScheduledInstanceRecurrence)
+scheduledInstance_recurrence = Lens.lens (\ScheduledInstance' {recurrence} -> recurrence) (\s@ScheduledInstance' {} a -> s {recurrence = a} :: ScheduledInstance)
+
+-- | The Scheduled Instance ID.
+scheduledInstance_scheduledInstanceId :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Text)
+scheduledInstance_scheduledInstanceId = Lens.lens (\ScheduledInstance' {scheduledInstanceId} -> scheduledInstanceId) (\s@ScheduledInstance' {} a -> s {scheduledInstanceId = a} :: ScheduledInstance)
+
+-- | The number of hours in the schedule.
+scheduledInstance_slotDurationInHours :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Int)
+scheduledInstance_slotDurationInHours = Lens.lens (\ScheduledInstance' {slotDurationInHours} -> slotDurationInHours) (\s@ScheduledInstance' {} a -> s {slotDurationInHours = a} :: ScheduledInstance)
+
+-- | The end date for the Scheduled Instance.
+scheduledInstance_termEndDate :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.UTCTime)
+scheduledInstance_termEndDate = Lens.lens (\ScheduledInstance' {termEndDate} -> termEndDate) (\s@ScheduledInstance' {} a -> s {termEndDate = a} :: ScheduledInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The start date for the Scheduled Instance.
+scheduledInstance_termStartDate :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.UTCTime)
+scheduledInstance_termStartDate = Lens.lens (\ScheduledInstance' {termStartDate} -> termStartDate) (\s@ScheduledInstance' {} a -> s {termStartDate = a} :: ScheduledInstance) Prelude.. Lens.mapping Data._Time
+
+-- | The total number of hours for a single instance for the entire term.
+scheduledInstance_totalScheduledInstanceHours :: Lens.Lens' ScheduledInstance (Prelude.Maybe Prelude.Int)
+scheduledInstance_totalScheduledInstanceHours = Lens.lens (\ScheduledInstance' {totalScheduledInstanceHours} -> totalScheduledInstanceHours) (\s@ScheduledInstance' {} a -> s {totalScheduledInstanceHours = a} :: ScheduledInstance)
+
+instance Data.FromXML ScheduledInstance where
+  parseXML x =
+    ScheduledInstance'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "createDate")
+      Prelude.<*> (x Data..@? "hourlyPrice")
+      Prelude.<*> (x Data..@? "instanceCount")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "networkPlatform")
+      Prelude.<*> (x Data..@? "nextSlotStartTime")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "previousSlotEndTime")
+      Prelude.<*> (x Data..@? "recurrence")
+      Prelude.<*> (x Data..@? "scheduledInstanceId")
+      Prelude.<*> (x Data..@? "slotDurationInHours")
+      Prelude.<*> (x Data..@? "termEndDate")
+      Prelude.<*> (x Data..@? "termStartDate")
+      Prelude.<*> (x Data..@? "totalScheduledInstanceHours")
+
+instance Prelude.Hashable ScheduledInstance where
+  hashWithSalt _salt ScheduledInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` createDate
+      `Prelude.hashWithSalt` hourlyPrice
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` networkPlatform
+      `Prelude.hashWithSalt` nextSlotStartTime
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` previousSlotEndTime
+      `Prelude.hashWithSalt` recurrence
+      `Prelude.hashWithSalt` scheduledInstanceId
+      `Prelude.hashWithSalt` slotDurationInHours
+      `Prelude.hashWithSalt` termEndDate
+      `Prelude.hashWithSalt` termStartDate
+      `Prelude.hashWithSalt` totalScheduledInstanceHours
+
+instance Prelude.NFData ScheduledInstance where
+  rnf ScheduledInstance' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf createDate
+      `Prelude.seq` Prelude.rnf hourlyPrice
+      `Prelude.seq` Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf networkPlatform
+      `Prelude.seq` Prelude.rnf nextSlotStartTime
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf previousSlotEndTime
+      `Prelude.seq` Prelude.rnf recurrence
+      `Prelude.seq` Prelude.rnf scheduledInstanceId
+      `Prelude.seq` Prelude.rnf slotDurationInHours
+      `Prelude.seq` Prelude.rnf termEndDate
+      `Prelude.seq` Prelude.rnf termStartDate
+      `Prelude.seq` Prelude.rnf totalScheduledInstanceHours
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstanceAvailability.hs b/gen/Amazonka/EC2/Types/ScheduledInstanceAvailability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstanceAvailability.hs
@@ -0,0 +1,222 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstanceAvailability
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstanceAvailability where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ScheduledInstanceRecurrence
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a schedule that is available for your Scheduled Instances.
+--
+-- /See:/ 'newScheduledInstanceAvailability' smart constructor.
+data ScheduledInstanceAvailability = ScheduledInstanceAvailability'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The number of available instances.
+    availableInstanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The time period for the first schedule to start.
+    firstSlotStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | The hourly price for a single instance.
+    hourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The instance type. You can specify one of the C3, C4, M4, or R3 instance
+    -- types.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The maximum term. The only possible value is 365 days.
+    maxTermDurationInDays :: Prelude.Maybe Prelude.Int,
+    -- | The minimum term. The only possible value is 365 days.
+    minTermDurationInDays :: Prelude.Maybe Prelude.Int,
+    -- | The network platform (@EC2-Classic@ or @EC2-VPC@).
+    networkPlatform :: Prelude.Maybe Prelude.Text,
+    -- | The platform (@Linux\/UNIX@ or @Windows@).
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | The purchase token. This token expires in two hours.
+    purchaseToken :: Prelude.Maybe Prelude.Text,
+    -- | The schedule recurrence.
+    recurrence :: Prelude.Maybe ScheduledInstanceRecurrence,
+    -- | The number of hours in the schedule.
+    slotDurationInHours :: Prelude.Maybe Prelude.Int,
+    -- | The total number of hours for a single instance for the entire term.
+    totalScheduledInstanceHours :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstanceAvailability' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'scheduledInstanceAvailability_availabilityZone' - The Availability Zone.
+--
+-- 'availableInstanceCount', 'scheduledInstanceAvailability_availableInstanceCount' - The number of available instances.
+--
+-- 'firstSlotStartTime', 'scheduledInstanceAvailability_firstSlotStartTime' - The time period for the first schedule to start.
+--
+-- 'hourlyPrice', 'scheduledInstanceAvailability_hourlyPrice' - The hourly price for a single instance.
+--
+-- 'instanceType', 'scheduledInstanceAvailability_instanceType' - The instance type. You can specify one of the C3, C4, M4, or R3 instance
+-- types.
+--
+-- 'maxTermDurationInDays', 'scheduledInstanceAvailability_maxTermDurationInDays' - The maximum term. The only possible value is 365 days.
+--
+-- 'minTermDurationInDays', 'scheduledInstanceAvailability_minTermDurationInDays' - The minimum term. The only possible value is 365 days.
+--
+-- 'networkPlatform', 'scheduledInstanceAvailability_networkPlatform' - The network platform (@EC2-Classic@ or @EC2-VPC@).
+--
+-- 'platform', 'scheduledInstanceAvailability_platform' - The platform (@Linux\/UNIX@ or @Windows@).
+--
+-- 'purchaseToken', 'scheduledInstanceAvailability_purchaseToken' - The purchase token. This token expires in two hours.
+--
+-- 'recurrence', 'scheduledInstanceAvailability_recurrence' - The schedule recurrence.
+--
+-- 'slotDurationInHours', 'scheduledInstanceAvailability_slotDurationInHours' - The number of hours in the schedule.
+--
+-- 'totalScheduledInstanceHours', 'scheduledInstanceAvailability_totalScheduledInstanceHours' - The total number of hours for a single instance for the entire term.
+newScheduledInstanceAvailability ::
+  ScheduledInstanceAvailability
+newScheduledInstanceAvailability =
+  ScheduledInstanceAvailability'
+    { availabilityZone =
+        Prelude.Nothing,
+      availableInstanceCount = Prelude.Nothing,
+      firstSlotStartTime = Prelude.Nothing,
+      hourlyPrice = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      maxTermDurationInDays = Prelude.Nothing,
+      minTermDurationInDays = Prelude.Nothing,
+      networkPlatform = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      purchaseToken = Prelude.Nothing,
+      recurrence = Prelude.Nothing,
+      slotDurationInHours = Prelude.Nothing,
+      totalScheduledInstanceHours =
+        Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+scheduledInstanceAvailability_availabilityZone :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+scheduledInstanceAvailability_availabilityZone = Lens.lens (\ScheduledInstanceAvailability' {availabilityZone} -> availabilityZone) (\s@ScheduledInstanceAvailability' {} a -> s {availabilityZone = a} :: ScheduledInstanceAvailability)
+
+-- | The number of available instances.
+scheduledInstanceAvailability_availableInstanceCount :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+scheduledInstanceAvailability_availableInstanceCount = Lens.lens (\ScheduledInstanceAvailability' {availableInstanceCount} -> availableInstanceCount) (\s@ScheduledInstanceAvailability' {} a -> s {availableInstanceCount = a} :: ScheduledInstanceAvailability)
+
+-- | The time period for the first schedule to start.
+scheduledInstanceAvailability_firstSlotStartTime :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.UTCTime)
+scheduledInstanceAvailability_firstSlotStartTime = Lens.lens (\ScheduledInstanceAvailability' {firstSlotStartTime} -> firstSlotStartTime) (\s@ScheduledInstanceAvailability' {} a -> s {firstSlotStartTime = a} :: ScheduledInstanceAvailability) Prelude.. Lens.mapping Data._Time
+
+-- | The hourly price for a single instance.
+scheduledInstanceAvailability_hourlyPrice :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+scheduledInstanceAvailability_hourlyPrice = Lens.lens (\ScheduledInstanceAvailability' {hourlyPrice} -> hourlyPrice) (\s@ScheduledInstanceAvailability' {} a -> s {hourlyPrice = a} :: ScheduledInstanceAvailability)
+
+-- | The instance type. You can specify one of the C3, C4, M4, or R3 instance
+-- types.
+scheduledInstanceAvailability_instanceType :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+scheduledInstanceAvailability_instanceType = Lens.lens (\ScheduledInstanceAvailability' {instanceType} -> instanceType) (\s@ScheduledInstanceAvailability' {} a -> s {instanceType = a} :: ScheduledInstanceAvailability)
+
+-- | The maximum term. The only possible value is 365 days.
+scheduledInstanceAvailability_maxTermDurationInDays :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+scheduledInstanceAvailability_maxTermDurationInDays = Lens.lens (\ScheduledInstanceAvailability' {maxTermDurationInDays} -> maxTermDurationInDays) (\s@ScheduledInstanceAvailability' {} a -> s {maxTermDurationInDays = a} :: ScheduledInstanceAvailability)
+
+-- | The minimum term. The only possible value is 365 days.
+scheduledInstanceAvailability_minTermDurationInDays :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+scheduledInstanceAvailability_minTermDurationInDays = Lens.lens (\ScheduledInstanceAvailability' {minTermDurationInDays} -> minTermDurationInDays) (\s@ScheduledInstanceAvailability' {} a -> s {minTermDurationInDays = a} :: ScheduledInstanceAvailability)
+
+-- | The network platform (@EC2-Classic@ or @EC2-VPC@).
+scheduledInstanceAvailability_networkPlatform :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+scheduledInstanceAvailability_networkPlatform = Lens.lens (\ScheduledInstanceAvailability' {networkPlatform} -> networkPlatform) (\s@ScheduledInstanceAvailability' {} a -> s {networkPlatform = a} :: ScheduledInstanceAvailability)
+
+-- | The platform (@Linux\/UNIX@ or @Windows@).
+scheduledInstanceAvailability_platform :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+scheduledInstanceAvailability_platform = Lens.lens (\ScheduledInstanceAvailability' {platform} -> platform) (\s@ScheduledInstanceAvailability' {} a -> s {platform = a} :: ScheduledInstanceAvailability)
+
+-- | The purchase token. This token expires in two hours.
+scheduledInstanceAvailability_purchaseToken :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Text)
+scheduledInstanceAvailability_purchaseToken = Lens.lens (\ScheduledInstanceAvailability' {purchaseToken} -> purchaseToken) (\s@ScheduledInstanceAvailability' {} a -> s {purchaseToken = a} :: ScheduledInstanceAvailability)
+
+-- | The schedule recurrence.
+scheduledInstanceAvailability_recurrence :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe ScheduledInstanceRecurrence)
+scheduledInstanceAvailability_recurrence = Lens.lens (\ScheduledInstanceAvailability' {recurrence} -> recurrence) (\s@ScheduledInstanceAvailability' {} a -> s {recurrence = a} :: ScheduledInstanceAvailability)
+
+-- | The number of hours in the schedule.
+scheduledInstanceAvailability_slotDurationInHours :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+scheduledInstanceAvailability_slotDurationInHours = Lens.lens (\ScheduledInstanceAvailability' {slotDurationInHours} -> slotDurationInHours) (\s@ScheduledInstanceAvailability' {} a -> s {slotDurationInHours = a} :: ScheduledInstanceAvailability)
+
+-- | The total number of hours for a single instance for the entire term.
+scheduledInstanceAvailability_totalScheduledInstanceHours :: Lens.Lens' ScheduledInstanceAvailability (Prelude.Maybe Prelude.Int)
+scheduledInstanceAvailability_totalScheduledInstanceHours = Lens.lens (\ScheduledInstanceAvailability' {totalScheduledInstanceHours} -> totalScheduledInstanceHours) (\s@ScheduledInstanceAvailability' {} a -> s {totalScheduledInstanceHours = a} :: ScheduledInstanceAvailability)
+
+instance Data.FromXML ScheduledInstanceAvailability where
+  parseXML x =
+    ScheduledInstanceAvailability'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "availableInstanceCount")
+      Prelude.<*> (x Data..@? "firstSlotStartTime")
+      Prelude.<*> (x Data..@? "hourlyPrice")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "maxTermDurationInDays")
+      Prelude.<*> (x Data..@? "minTermDurationInDays")
+      Prelude.<*> (x Data..@? "networkPlatform")
+      Prelude.<*> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "purchaseToken")
+      Prelude.<*> (x Data..@? "recurrence")
+      Prelude.<*> (x Data..@? "slotDurationInHours")
+      Prelude.<*> (x Data..@? "totalScheduledInstanceHours")
+
+instance
+  Prelude.Hashable
+    ScheduledInstanceAvailability
+  where
+  hashWithSalt _salt ScheduledInstanceAvailability' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availableInstanceCount
+      `Prelude.hashWithSalt` firstSlotStartTime
+      `Prelude.hashWithSalt` hourlyPrice
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` maxTermDurationInDays
+      `Prelude.hashWithSalt` minTermDurationInDays
+      `Prelude.hashWithSalt` networkPlatform
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` purchaseToken
+      `Prelude.hashWithSalt` recurrence
+      `Prelude.hashWithSalt` slotDurationInHours
+      `Prelude.hashWithSalt` totalScheduledInstanceHours
+
+instance Prelude.NFData ScheduledInstanceAvailability where
+  rnf ScheduledInstanceAvailability' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availableInstanceCount
+      `Prelude.seq` Prelude.rnf firstSlotStartTime
+      `Prelude.seq` Prelude.rnf hourlyPrice
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf maxTermDurationInDays
+      `Prelude.seq` Prelude.rnf minTermDurationInDays
+      `Prelude.seq` Prelude.rnf networkPlatform
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf purchaseToken
+      `Prelude.seq` Prelude.rnf recurrence
+      `Prelude.seq` Prelude.rnf slotDurationInHours
+      `Prelude.seq` Prelude.rnf totalScheduledInstanceHours
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstanceRecurrence.hs b/gen/Amazonka/EC2/Types/ScheduledInstanceRecurrence.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstanceRecurrence.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstanceRecurrence
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstanceRecurrence where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the recurring schedule for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstanceRecurrence' smart constructor.
+data ScheduledInstanceRecurrence = ScheduledInstanceRecurrence'
+  { -- | The frequency (@Daily@, @Weekly@, or @Monthly@).
+    frequency :: Prelude.Maybe Prelude.Text,
+    -- | The interval quantity. The interval unit depends on the value of
+    -- @frequency@. For example, every 2 weeks or every 2 months.
+    interval :: Prelude.Maybe Prelude.Int,
+    -- | The days. For a monthly schedule, this is one or more days of the month
+    -- (1-31). For a weekly schedule, this is one or more days of the week
+    -- (1-7, where 1 is Sunday).
+    occurrenceDaySet :: Prelude.Maybe [Prelude.Int],
+    -- | Indicates whether the occurrence is relative to the end of the specified
+    -- week or month.
+    occurrenceRelativeToEnd :: Prelude.Maybe Prelude.Bool,
+    -- | The unit for @occurrenceDaySet@ (@DayOfWeek@ or @DayOfMonth@).
+    occurrenceUnit :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstanceRecurrence' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'frequency', 'scheduledInstanceRecurrence_frequency' - The frequency (@Daily@, @Weekly@, or @Monthly@).
+--
+-- 'interval', 'scheduledInstanceRecurrence_interval' - The interval quantity. The interval unit depends on the value of
+-- @frequency@. For example, every 2 weeks or every 2 months.
+--
+-- 'occurrenceDaySet', 'scheduledInstanceRecurrence_occurrenceDaySet' - The days. For a monthly schedule, this is one or more days of the month
+-- (1-31). For a weekly schedule, this is one or more days of the week
+-- (1-7, where 1 is Sunday).
+--
+-- 'occurrenceRelativeToEnd', 'scheduledInstanceRecurrence_occurrenceRelativeToEnd' - Indicates whether the occurrence is relative to the end of the specified
+-- week or month.
+--
+-- 'occurrenceUnit', 'scheduledInstanceRecurrence_occurrenceUnit' - The unit for @occurrenceDaySet@ (@DayOfWeek@ or @DayOfMonth@).
+newScheduledInstanceRecurrence ::
+  ScheduledInstanceRecurrence
+newScheduledInstanceRecurrence =
+  ScheduledInstanceRecurrence'
+    { frequency =
+        Prelude.Nothing,
+      interval = Prelude.Nothing,
+      occurrenceDaySet = Prelude.Nothing,
+      occurrenceRelativeToEnd = Prelude.Nothing,
+      occurrenceUnit = Prelude.Nothing
+    }
+
+-- | The frequency (@Daily@, @Weekly@, or @Monthly@).
+scheduledInstanceRecurrence_frequency :: Lens.Lens' ScheduledInstanceRecurrence (Prelude.Maybe Prelude.Text)
+scheduledInstanceRecurrence_frequency = Lens.lens (\ScheduledInstanceRecurrence' {frequency} -> frequency) (\s@ScheduledInstanceRecurrence' {} a -> s {frequency = a} :: ScheduledInstanceRecurrence)
+
+-- | The interval quantity. The interval unit depends on the value of
+-- @frequency@. For example, every 2 weeks or every 2 months.
+scheduledInstanceRecurrence_interval :: Lens.Lens' ScheduledInstanceRecurrence (Prelude.Maybe Prelude.Int)
+scheduledInstanceRecurrence_interval = Lens.lens (\ScheduledInstanceRecurrence' {interval} -> interval) (\s@ScheduledInstanceRecurrence' {} a -> s {interval = a} :: ScheduledInstanceRecurrence)
+
+-- | The days. For a monthly schedule, this is one or more days of the month
+-- (1-31). For a weekly schedule, this is one or more days of the week
+-- (1-7, where 1 is Sunday).
+scheduledInstanceRecurrence_occurrenceDaySet :: Lens.Lens' ScheduledInstanceRecurrence (Prelude.Maybe [Prelude.Int])
+scheduledInstanceRecurrence_occurrenceDaySet = Lens.lens (\ScheduledInstanceRecurrence' {occurrenceDaySet} -> occurrenceDaySet) (\s@ScheduledInstanceRecurrence' {} a -> s {occurrenceDaySet = a} :: ScheduledInstanceRecurrence) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the occurrence is relative to the end of the specified
+-- week or month.
+scheduledInstanceRecurrence_occurrenceRelativeToEnd :: Lens.Lens' ScheduledInstanceRecurrence (Prelude.Maybe Prelude.Bool)
+scheduledInstanceRecurrence_occurrenceRelativeToEnd = Lens.lens (\ScheduledInstanceRecurrence' {occurrenceRelativeToEnd} -> occurrenceRelativeToEnd) (\s@ScheduledInstanceRecurrence' {} a -> s {occurrenceRelativeToEnd = a} :: ScheduledInstanceRecurrence)
+
+-- | The unit for @occurrenceDaySet@ (@DayOfWeek@ or @DayOfMonth@).
+scheduledInstanceRecurrence_occurrenceUnit :: Lens.Lens' ScheduledInstanceRecurrence (Prelude.Maybe Prelude.Text)
+scheduledInstanceRecurrence_occurrenceUnit = Lens.lens (\ScheduledInstanceRecurrence' {occurrenceUnit} -> occurrenceUnit) (\s@ScheduledInstanceRecurrence' {} a -> s {occurrenceUnit = a} :: ScheduledInstanceRecurrence)
+
+instance Data.FromXML ScheduledInstanceRecurrence where
+  parseXML x =
+    ScheduledInstanceRecurrence'
+      Prelude.<$> (x Data..@? "frequency")
+      Prelude.<*> (x Data..@? "interval")
+      Prelude.<*> ( x
+                      Data..@? "occurrenceDaySet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "occurrenceRelativeToEnd")
+      Prelude.<*> (x Data..@? "occurrenceUnit")
+
+instance Prelude.Hashable ScheduledInstanceRecurrence where
+  hashWithSalt _salt ScheduledInstanceRecurrence' {..} =
+    _salt
+      `Prelude.hashWithSalt` frequency
+      `Prelude.hashWithSalt` interval
+      `Prelude.hashWithSalt` occurrenceDaySet
+      `Prelude.hashWithSalt` occurrenceRelativeToEnd
+      `Prelude.hashWithSalt` occurrenceUnit
+
+instance Prelude.NFData ScheduledInstanceRecurrence where
+  rnf ScheduledInstanceRecurrence' {..} =
+    Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf interval
+      `Prelude.seq` Prelude.rnf occurrenceDaySet
+      `Prelude.seq` Prelude.rnf occurrenceRelativeToEnd
+      `Prelude.seq` Prelude.rnf occurrenceUnit
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstanceRecurrenceRequest.hs b/gen/Amazonka/EC2/Types/ScheduledInstanceRecurrenceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstanceRecurrenceRequest.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstanceRecurrenceRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstanceRecurrenceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the recurring schedule for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstanceRecurrenceRequest' smart constructor.
+data ScheduledInstanceRecurrenceRequest = ScheduledInstanceRecurrenceRequest'
+  { -- | The frequency (@Daily@, @Weekly@, or @Monthly@).
+    frequency :: Prelude.Maybe Prelude.Text,
+    -- | The interval quantity. The interval unit depends on the value of
+    -- @Frequency@. For example, every 2 weeks or every 2 months.
+    interval :: Prelude.Maybe Prelude.Int,
+    -- | The days. For a monthly schedule, this is one or more days of the month
+    -- (1-31). For a weekly schedule, this is one or more days of the week
+    -- (1-7, where 1 is Sunday). You can\'t specify this value with a daily
+    -- schedule. If the occurrence is relative to the end of the month, you can
+    -- specify only a single day.
+    occurrenceDays :: Prelude.Maybe [Prelude.Int],
+    -- | Indicates whether the occurrence is relative to the end of the specified
+    -- week or month. You can\'t specify this value with a daily schedule.
+    occurrenceRelativeToEnd :: Prelude.Maybe Prelude.Bool,
+    -- | The unit for @OccurrenceDays@ (@DayOfWeek@ or @DayOfMonth@). This value
+    -- is required for a monthly schedule. You can\'t specify @DayOfWeek@ with
+    -- a weekly schedule. You can\'t specify this value with a daily schedule.
+    occurrenceUnit :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstanceRecurrenceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'frequency', 'scheduledInstanceRecurrenceRequest_frequency' - The frequency (@Daily@, @Weekly@, or @Monthly@).
+--
+-- 'interval', 'scheduledInstanceRecurrenceRequest_interval' - The interval quantity. The interval unit depends on the value of
+-- @Frequency@. For example, every 2 weeks or every 2 months.
+--
+-- 'occurrenceDays', 'scheduledInstanceRecurrenceRequest_occurrenceDays' - The days. For a monthly schedule, this is one or more days of the month
+-- (1-31). For a weekly schedule, this is one or more days of the week
+-- (1-7, where 1 is Sunday). You can\'t specify this value with a daily
+-- schedule. If the occurrence is relative to the end of the month, you can
+-- specify only a single day.
+--
+-- 'occurrenceRelativeToEnd', 'scheduledInstanceRecurrenceRequest_occurrenceRelativeToEnd' - Indicates whether the occurrence is relative to the end of the specified
+-- week or month. You can\'t specify this value with a daily schedule.
+--
+-- 'occurrenceUnit', 'scheduledInstanceRecurrenceRequest_occurrenceUnit' - The unit for @OccurrenceDays@ (@DayOfWeek@ or @DayOfMonth@). This value
+-- is required for a monthly schedule. You can\'t specify @DayOfWeek@ with
+-- a weekly schedule. You can\'t specify this value with a daily schedule.
+newScheduledInstanceRecurrenceRequest ::
+  ScheduledInstanceRecurrenceRequest
+newScheduledInstanceRecurrenceRequest =
+  ScheduledInstanceRecurrenceRequest'
+    { frequency =
+        Prelude.Nothing,
+      interval = Prelude.Nothing,
+      occurrenceDays = Prelude.Nothing,
+      occurrenceRelativeToEnd =
+        Prelude.Nothing,
+      occurrenceUnit = Prelude.Nothing
+    }
+
+-- | The frequency (@Daily@, @Weekly@, or @Monthly@).
+scheduledInstanceRecurrenceRequest_frequency :: Lens.Lens' ScheduledInstanceRecurrenceRequest (Prelude.Maybe Prelude.Text)
+scheduledInstanceRecurrenceRequest_frequency = Lens.lens (\ScheduledInstanceRecurrenceRequest' {frequency} -> frequency) (\s@ScheduledInstanceRecurrenceRequest' {} a -> s {frequency = a} :: ScheduledInstanceRecurrenceRequest)
+
+-- | The interval quantity. The interval unit depends on the value of
+-- @Frequency@. For example, every 2 weeks or every 2 months.
+scheduledInstanceRecurrenceRequest_interval :: Lens.Lens' ScheduledInstanceRecurrenceRequest (Prelude.Maybe Prelude.Int)
+scheduledInstanceRecurrenceRequest_interval = Lens.lens (\ScheduledInstanceRecurrenceRequest' {interval} -> interval) (\s@ScheduledInstanceRecurrenceRequest' {} a -> s {interval = a} :: ScheduledInstanceRecurrenceRequest)
+
+-- | The days. For a monthly schedule, this is one or more days of the month
+-- (1-31). For a weekly schedule, this is one or more days of the week
+-- (1-7, where 1 is Sunday). You can\'t specify this value with a daily
+-- schedule. If the occurrence is relative to the end of the month, you can
+-- specify only a single day.
+scheduledInstanceRecurrenceRequest_occurrenceDays :: Lens.Lens' ScheduledInstanceRecurrenceRequest (Prelude.Maybe [Prelude.Int])
+scheduledInstanceRecurrenceRequest_occurrenceDays = Lens.lens (\ScheduledInstanceRecurrenceRequest' {occurrenceDays} -> occurrenceDays) (\s@ScheduledInstanceRecurrenceRequest' {} a -> s {occurrenceDays = a} :: ScheduledInstanceRecurrenceRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the occurrence is relative to the end of the specified
+-- week or month. You can\'t specify this value with a daily schedule.
+scheduledInstanceRecurrenceRequest_occurrenceRelativeToEnd :: Lens.Lens' ScheduledInstanceRecurrenceRequest (Prelude.Maybe Prelude.Bool)
+scheduledInstanceRecurrenceRequest_occurrenceRelativeToEnd = Lens.lens (\ScheduledInstanceRecurrenceRequest' {occurrenceRelativeToEnd} -> occurrenceRelativeToEnd) (\s@ScheduledInstanceRecurrenceRequest' {} a -> s {occurrenceRelativeToEnd = a} :: ScheduledInstanceRecurrenceRequest)
+
+-- | The unit for @OccurrenceDays@ (@DayOfWeek@ or @DayOfMonth@). This value
+-- is required for a monthly schedule. You can\'t specify @DayOfWeek@ with
+-- a weekly schedule. You can\'t specify this value with a daily schedule.
+scheduledInstanceRecurrenceRequest_occurrenceUnit :: Lens.Lens' ScheduledInstanceRecurrenceRequest (Prelude.Maybe Prelude.Text)
+scheduledInstanceRecurrenceRequest_occurrenceUnit = Lens.lens (\ScheduledInstanceRecurrenceRequest' {occurrenceUnit} -> occurrenceUnit) (\s@ScheduledInstanceRecurrenceRequest' {} a -> s {occurrenceUnit = a} :: ScheduledInstanceRecurrenceRequest)
+
+instance
+  Prelude.Hashable
+    ScheduledInstanceRecurrenceRequest
+  where
+  hashWithSalt
+    _salt
+    ScheduledInstanceRecurrenceRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` frequency
+        `Prelude.hashWithSalt` interval
+        `Prelude.hashWithSalt` occurrenceDays
+        `Prelude.hashWithSalt` occurrenceRelativeToEnd
+        `Prelude.hashWithSalt` occurrenceUnit
+
+instance
+  Prelude.NFData
+    ScheduledInstanceRecurrenceRequest
+  where
+  rnf ScheduledInstanceRecurrenceRequest' {..} =
+    Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf interval
+      `Prelude.seq` Prelude.rnf occurrenceDays
+      `Prelude.seq` Prelude.rnf occurrenceRelativeToEnd
+      `Prelude.seq` Prelude.rnf occurrenceUnit
+
+instance
+  Data.ToQuery
+    ScheduledInstanceRecurrenceRequest
+  where
+  toQuery ScheduledInstanceRecurrenceRequest' {..} =
+    Prelude.mconcat
+      [ "Frequency" Data.=: frequency,
+        "Interval" Data.=: interval,
+        Data.toQuery
+          ( Data.toQueryList "OccurrenceDay"
+              Prelude.<$> occurrenceDays
+          ),
+        "OccurrenceRelativeToEnd"
+          Data.=: occurrenceRelativeToEnd,
+        "OccurrenceUnit" Data.=: occurrenceUnit
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesBlockDeviceMapping.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesBlockDeviceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesBlockDeviceMapping.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesBlockDeviceMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesBlockDeviceMapping where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ScheduledInstancesEbs
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a block device mapping for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesBlockDeviceMapping' smart constructor.
+data ScheduledInstancesBlockDeviceMapping = ScheduledInstancesBlockDeviceMapping'
+  { -- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | Parameters used to set up EBS volumes automatically when the instance is
+    -- launched.
+    ebs :: Prelude.Maybe ScheduledInstancesEbs,
+    -- | To omit the device from the block device mapping, specify an empty
+    -- string.
+    noDevice :: Prelude.Maybe Prelude.Text,
+    -- | The virtual device name (@ephemeral@N). Instance store volumes are
+    -- numbered starting from 0. An instance type with two 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.
+    --
+    -- Constraints: For M3 instances, you must specify instance store volumes
+    -- in the block device mapping for the instance. When you launch an M3
+    -- instance, we ignore any instance store volumes specified in the block
+    -- device mapping for the AMI.
+    virtualName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesBlockDeviceMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deviceName', 'scheduledInstancesBlockDeviceMapping_deviceName' - The device name (for example, @\/dev\/sdh@ or @xvdh@).
+--
+-- 'ebs', 'scheduledInstancesBlockDeviceMapping_ebs' - Parameters used to set up EBS volumes automatically when the instance is
+-- launched.
+--
+-- 'noDevice', 'scheduledInstancesBlockDeviceMapping_noDevice' - To omit the device from the block device mapping, specify an empty
+-- string.
+--
+-- 'virtualName', 'scheduledInstancesBlockDeviceMapping_virtualName' - The virtual device name (@ephemeral@N). Instance store volumes are
+-- numbered starting from 0. An instance type with two 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.
+--
+-- Constraints: For M3 instances, you must specify instance store volumes
+-- in the block device mapping for the instance. When you launch an M3
+-- instance, we ignore any instance store volumes specified in the block
+-- device mapping for the AMI.
+newScheduledInstancesBlockDeviceMapping ::
+  ScheduledInstancesBlockDeviceMapping
+newScheduledInstancesBlockDeviceMapping =
+  ScheduledInstancesBlockDeviceMapping'
+    { deviceName =
+        Prelude.Nothing,
+      ebs = Prelude.Nothing,
+      noDevice = Prelude.Nothing,
+      virtualName = Prelude.Nothing
+    }
+
+-- | The device name (for example, @\/dev\/sdh@ or @xvdh@).
+scheduledInstancesBlockDeviceMapping_deviceName :: Lens.Lens' ScheduledInstancesBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+scheduledInstancesBlockDeviceMapping_deviceName = Lens.lens (\ScheduledInstancesBlockDeviceMapping' {deviceName} -> deviceName) (\s@ScheduledInstancesBlockDeviceMapping' {} a -> s {deviceName = a} :: ScheduledInstancesBlockDeviceMapping)
+
+-- | Parameters used to set up EBS volumes automatically when the instance is
+-- launched.
+scheduledInstancesBlockDeviceMapping_ebs :: Lens.Lens' ScheduledInstancesBlockDeviceMapping (Prelude.Maybe ScheduledInstancesEbs)
+scheduledInstancesBlockDeviceMapping_ebs = Lens.lens (\ScheduledInstancesBlockDeviceMapping' {ebs} -> ebs) (\s@ScheduledInstancesBlockDeviceMapping' {} a -> s {ebs = a} :: ScheduledInstancesBlockDeviceMapping)
+
+-- | To omit the device from the block device mapping, specify an empty
+-- string.
+scheduledInstancesBlockDeviceMapping_noDevice :: Lens.Lens' ScheduledInstancesBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+scheduledInstancesBlockDeviceMapping_noDevice = Lens.lens (\ScheduledInstancesBlockDeviceMapping' {noDevice} -> noDevice) (\s@ScheduledInstancesBlockDeviceMapping' {} a -> s {noDevice = a} :: ScheduledInstancesBlockDeviceMapping)
+
+-- | The virtual device name (@ephemeral@N). Instance store volumes are
+-- numbered starting from 0. An instance type with two 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.
+--
+-- Constraints: For M3 instances, you must specify instance store volumes
+-- in the block device mapping for the instance. When you launch an M3
+-- instance, we ignore any instance store volumes specified in the block
+-- device mapping for the AMI.
+scheduledInstancesBlockDeviceMapping_virtualName :: Lens.Lens' ScheduledInstancesBlockDeviceMapping (Prelude.Maybe Prelude.Text)
+scheduledInstancesBlockDeviceMapping_virtualName = Lens.lens (\ScheduledInstancesBlockDeviceMapping' {virtualName} -> virtualName) (\s@ScheduledInstancesBlockDeviceMapping' {} a -> s {virtualName = a} :: ScheduledInstancesBlockDeviceMapping)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesBlockDeviceMapping
+  where
+  hashWithSalt
+    _salt
+    ScheduledInstancesBlockDeviceMapping' {..} =
+      _salt
+        `Prelude.hashWithSalt` deviceName
+        `Prelude.hashWithSalt` ebs
+        `Prelude.hashWithSalt` noDevice
+        `Prelude.hashWithSalt` virtualName
+
+instance
+  Prelude.NFData
+    ScheduledInstancesBlockDeviceMapping
+  where
+  rnf ScheduledInstancesBlockDeviceMapping' {..} =
+    Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf ebs
+      `Prelude.seq` Prelude.rnf noDevice
+      `Prelude.seq` Prelude.rnf virtualName
+
+instance
+  Data.ToQuery
+    ScheduledInstancesBlockDeviceMapping
+  where
+  toQuery ScheduledInstancesBlockDeviceMapping' {..} =
+    Prelude.mconcat
+      [ "DeviceName" Data.=: deviceName,
+        "Ebs" Data.=: ebs,
+        "NoDevice" Data.=: noDevice,
+        "VirtualName" Data.=: virtualName
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesEbs.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesEbs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesEbs.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesEbs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesEbs where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EBS volume for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesEbs' smart constructor.
+data ScheduledInstancesEbs = ScheduledInstancesEbs'
+  { -- | Indicates whether the volume is deleted on instance termination.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the volume is encrypted. You can attached encrypted
+    -- volumes only to instances that support them.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The number of I\/O operations per second (IOPS) to provision for an
+    -- @io1@ or @io2@ volume, with a maximum ratio of 50 IOPS\/GiB for @io1@,
+    -- and 500 IOPS\/GiB for @io2@. Range is 100 to 64,000 IOPS for volumes in
+    -- most Regions. Maximum IOPS of 64,000 is guaranteed only on
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances instances built on the Nitro System>.
+    -- Other instance families guarantee performance up to 32,000 IOPS. For
+    -- more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- This parameter is valid only for Provisioned IOPS SSD (@io1@ and @io2@)
+    -- volumes.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The size of the volume, in GiB.
+    --
+    -- Default: If you\'re creating the volume from a snapshot and don\'t
+    -- specify a volume size, the default is the snapshot size.
+    volumeSize :: Prelude.Maybe Prelude.Int,
+    -- | The volume type. @gp2@ for General Purpose SSD, @io1@ or @ io2@ for
+    -- Provisioned IOPS SSD, Throughput Optimized HDD for @st1@, Cold HDD for
+    -- @sc1@, or @standard@ for Magnetic.
+    --
+    -- Default: @gp2@
+    volumeType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesEbs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deleteOnTermination', 'scheduledInstancesEbs_deleteOnTermination' - Indicates whether the volume is deleted on instance termination.
+--
+-- 'encrypted', 'scheduledInstancesEbs_encrypted' - Indicates whether the volume is encrypted. You can attached encrypted
+-- volumes only to instances that support them.
+--
+-- 'iops', 'scheduledInstancesEbs_iops' - The number of I\/O operations per second (IOPS) to provision for an
+-- @io1@ or @io2@ volume, with a maximum ratio of 50 IOPS\/GiB for @io1@,
+-- and 500 IOPS\/GiB for @io2@. Range is 100 to 64,000 IOPS for volumes in
+-- most Regions. Maximum IOPS of 64,000 is guaranteed only on
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances instances built on the Nitro System>.
+-- Other instance families guarantee performance up to 32,000 IOPS. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This parameter is valid only for Provisioned IOPS SSD (@io1@ and @io2@)
+-- volumes.
+--
+-- 'snapshotId', 'scheduledInstancesEbs_snapshotId' - The ID of the snapshot.
+--
+-- 'volumeSize', 'scheduledInstancesEbs_volumeSize' - The size of the volume, in GiB.
+--
+-- Default: If you\'re creating the volume from a snapshot and don\'t
+-- specify a volume size, the default is the snapshot size.
+--
+-- 'volumeType', 'scheduledInstancesEbs_volumeType' - The volume type. @gp2@ for General Purpose SSD, @io1@ or @ io2@ for
+-- Provisioned IOPS SSD, Throughput Optimized HDD for @st1@, Cold HDD for
+-- @sc1@, or @standard@ for Magnetic.
+--
+-- Default: @gp2@
+newScheduledInstancesEbs ::
+  ScheduledInstancesEbs
+newScheduledInstancesEbs =
+  ScheduledInstancesEbs'
+    { deleteOnTermination =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      iops = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      volumeSize = Prelude.Nothing,
+      volumeType = Prelude.Nothing
+    }
+
+-- | Indicates whether the volume is deleted on instance termination.
+scheduledInstancesEbs_deleteOnTermination :: Lens.Lens' ScheduledInstancesEbs (Prelude.Maybe Prelude.Bool)
+scheduledInstancesEbs_deleteOnTermination = Lens.lens (\ScheduledInstancesEbs' {deleteOnTermination} -> deleteOnTermination) (\s@ScheduledInstancesEbs' {} a -> s {deleteOnTermination = a} :: ScheduledInstancesEbs)
+
+-- | Indicates whether the volume is encrypted. You can attached encrypted
+-- volumes only to instances that support them.
+scheduledInstancesEbs_encrypted :: Lens.Lens' ScheduledInstancesEbs (Prelude.Maybe Prelude.Bool)
+scheduledInstancesEbs_encrypted = Lens.lens (\ScheduledInstancesEbs' {encrypted} -> encrypted) (\s@ScheduledInstancesEbs' {} a -> s {encrypted = a} :: ScheduledInstancesEbs)
+
+-- | The number of I\/O operations per second (IOPS) to provision for an
+-- @io1@ or @io2@ volume, with a maximum ratio of 50 IOPS\/GiB for @io1@,
+-- and 500 IOPS\/GiB for @io2@. Range is 100 to 64,000 IOPS for volumes in
+-- most Regions. Maximum IOPS of 64,000 is guaranteed only on
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances instances built on the Nitro System>.
+-- Other instance families guarantee performance up to 32,000 IOPS. For
+-- more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS volume types>
+-- in the /Amazon EC2 User Guide/.
+--
+-- This parameter is valid only for Provisioned IOPS SSD (@io1@ and @io2@)
+-- volumes.
+scheduledInstancesEbs_iops :: Lens.Lens' ScheduledInstancesEbs (Prelude.Maybe Prelude.Int)
+scheduledInstancesEbs_iops = Lens.lens (\ScheduledInstancesEbs' {iops} -> iops) (\s@ScheduledInstancesEbs' {} a -> s {iops = a} :: ScheduledInstancesEbs)
+
+-- | The ID of the snapshot.
+scheduledInstancesEbs_snapshotId :: Lens.Lens' ScheduledInstancesEbs (Prelude.Maybe Prelude.Text)
+scheduledInstancesEbs_snapshotId = Lens.lens (\ScheduledInstancesEbs' {snapshotId} -> snapshotId) (\s@ScheduledInstancesEbs' {} a -> s {snapshotId = a} :: ScheduledInstancesEbs)
+
+-- | The size of the volume, in GiB.
+--
+-- Default: If you\'re creating the volume from a snapshot and don\'t
+-- specify a volume size, the default is the snapshot size.
+scheduledInstancesEbs_volumeSize :: Lens.Lens' ScheduledInstancesEbs (Prelude.Maybe Prelude.Int)
+scheduledInstancesEbs_volumeSize = Lens.lens (\ScheduledInstancesEbs' {volumeSize} -> volumeSize) (\s@ScheduledInstancesEbs' {} a -> s {volumeSize = a} :: ScheduledInstancesEbs)
+
+-- | The volume type. @gp2@ for General Purpose SSD, @io1@ or @ io2@ for
+-- Provisioned IOPS SSD, Throughput Optimized HDD for @st1@, Cold HDD for
+-- @sc1@, or @standard@ for Magnetic.
+--
+-- Default: @gp2@
+scheduledInstancesEbs_volumeType :: Lens.Lens' ScheduledInstancesEbs (Prelude.Maybe Prelude.Text)
+scheduledInstancesEbs_volumeType = Lens.lens (\ScheduledInstancesEbs' {volumeType} -> volumeType) (\s@ScheduledInstancesEbs' {} a -> s {volumeType = a} :: ScheduledInstancesEbs)
+
+instance Prelude.Hashable ScheduledInstancesEbs where
+  hashWithSalt _salt ScheduledInstancesEbs' {..} =
+    _salt
+      `Prelude.hashWithSalt` deleteOnTermination
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` volumeSize
+      `Prelude.hashWithSalt` volumeType
+
+instance Prelude.NFData ScheduledInstancesEbs where
+  rnf ScheduledInstancesEbs' {..} =
+    Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf volumeType
+
+instance Data.ToQuery ScheduledInstancesEbs where
+  toQuery ScheduledInstancesEbs' {..} =
+    Prelude.mconcat
+      [ "DeleteOnTermination" Data.=: deleteOnTermination,
+        "Encrypted" Data.=: encrypted,
+        "Iops" Data.=: iops,
+        "SnapshotId" Data.=: snapshotId,
+        "VolumeSize" Data.=: volumeSize,
+        "VolumeType" Data.=: volumeType
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesIamInstanceProfile.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesIamInstanceProfile.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesIamInstanceProfile.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesIamInstanceProfile
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesIamInstanceProfile where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IAM instance profile for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesIamInstanceProfile' smart constructor.
+data ScheduledInstancesIamInstanceProfile = ScheduledInstancesIamInstanceProfile'
+  { -- | The Amazon Resource Name (ARN).
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The name.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesIamInstanceProfile' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'scheduledInstancesIamInstanceProfile_arn' - The Amazon Resource Name (ARN).
+--
+-- 'name', 'scheduledInstancesIamInstanceProfile_name' - The name.
+newScheduledInstancesIamInstanceProfile ::
+  ScheduledInstancesIamInstanceProfile
+newScheduledInstancesIamInstanceProfile =
+  ScheduledInstancesIamInstanceProfile'
+    { arn =
+        Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN).
+scheduledInstancesIamInstanceProfile_arn :: Lens.Lens' ScheduledInstancesIamInstanceProfile (Prelude.Maybe Prelude.Text)
+scheduledInstancesIamInstanceProfile_arn = Lens.lens (\ScheduledInstancesIamInstanceProfile' {arn} -> arn) (\s@ScheduledInstancesIamInstanceProfile' {} a -> s {arn = a} :: ScheduledInstancesIamInstanceProfile)
+
+-- | The name.
+scheduledInstancesIamInstanceProfile_name :: Lens.Lens' ScheduledInstancesIamInstanceProfile (Prelude.Maybe Prelude.Text)
+scheduledInstancesIamInstanceProfile_name = Lens.lens (\ScheduledInstancesIamInstanceProfile' {name} -> name) (\s@ScheduledInstancesIamInstanceProfile' {} a -> s {name = a} :: ScheduledInstancesIamInstanceProfile)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesIamInstanceProfile
+  where
+  hashWithSalt
+    _salt
+    ScheduledInstancesIamInstanceProfile' {..} =
+      _salt
+        `Prelude.hashWithSalt` arn
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    ScheduledInstancesIamInstanceProfile
+  where
+  rnf ScheduledInstancesIamInstanceProfile' {..} =
+    Prelude.rnf arn `Prelude.seq` Prelude.rnf name
+
+instance
+  Data.ToQuery
+    ScheduledInstancesIamInstanceProfile
+  where
+  toQuery ScheduledInstancesIamInstanceProfile' {..} =
+    Prelude.mconcat
+      ["Arn" Data.=: arn, "Name" Data.=: name]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesIpv6Address.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesIpv6Address.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesIpv6Address.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesIpv6Address
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesIpv6Address where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 address.
+--
+-- /See:/ 'newScheduledInstancesIpv6Address' smart constructor.
+data ScheduledInstancesIpv6Address = ScheduledInstancesIpv6Address'
+  { -- | The IPv6 address.
+    ipv6Address :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesIpv6Address' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Address', 'scheduledInstancesIpv6Address_ipv6Address' - The IPv6 address.
+newScheduledInstancesIpv6Address ::
+  ScheduledInstancesIpv6Address
+newScheduledInstancesIpv6Address =
+  ScheduledInstancesIpv6Address'
+    { ipv6Address =
+        Prelude.Nothing
+    }
+
+-- | The IPv6 address.
+scheduledInstancesIpv6Address_ipv6Address :: Lens.Lens' ScheduledInstancesIpv6Address (Prelude.Maybe Prelude.Text)
+scheduledInstancesIpv6Address_ipv6Address = Lens.lens (\ScheduledInstancesIpv6Address' {ipv6Address} -> ipv6Address) (\s@ScheduledInstancesIpv6Address' {} a -> s {ipv6Address = a} :: ScheduledInstancesIpv6Address)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesIpv6Address
+  where
+  hashWithSalt _salt ScheduledInstancesIpv6Address' {..} =
+    _salt `Prelude.hashWithSalt` ipv6Address
+
+instance Prelude.NFData ScheduledInstancesIpv6Address where
+  rnf ScheduledInstancesIpv6Address' {..} =
+    Prelude.rnf ipv6Address
+
+instance Data.ToQuery ScheduledInstancesIpv6Address where
+  toQuery ScheduledInstancesIpv6Address' {..} =
+    Prelude.mconcat ["Ipv6Address" Data.=: ipv6Address]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesLaunchSpecification.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesLaunchSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesLaunchSpecification.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesLaunchSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesLaunchSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ScheduledInstancesBlockDeviceMapping
+import Amazonka.EC2.Types.ScheduledInstancesIamInstanceProfile
+import Amazonka.EC2.Types.ScheduledInstancesMonitoring
+import Amazonka.EC2.Types.ScheduledInstancesNetworkInterface
+import Amazonka.EC2.Types.ScheduledInstancesPlacement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the launch specification for a Scheduled Instance.
+--
+-- If you are launching the Scheduled Instance in EC2-VPC, you must specify
+-- the ID of the subnet. You can specify the subnet using either @SubnetId@
+-- or @NetworkInterface@.
+--
+-- /See:/ 'newScheduledInstancesLaunchSpecification' smart constructor.
+data ScheduledInstancesLaunchSpecification = ScheduledInstancesLaunchSpecification'
+  { -- | The block device mapping entries.
+    blockDeviceMappings :: Prelude.Maybe [ScheduledInstancesBlockDeviceMapping],
+    -- | Indicates whether the instances are optimized for EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal EBS I\/O performance.
+    -- This optimization isn\'t available with all instance types. Additional
+    -- usage charges apply when using an EBS-optimized instance.
+    --
+    -- Default: @false@
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe ScheduledInstancesIamInstanceProfile,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the kernel.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | Enable or disable monitoring for the instances.
+    monitoring :: Prelude.Maybe ScheduledInstancesMonitoring,
+    -- | The network interfaces.
+    networkInterfaces :: Prelude.Maybe [ScheduledInstancesNetworkInterface],
+    -- | The placement information.
+    placement :: Prelude.Maybe ScheduledInstancesPlacement,
+    -- | The ID of the RAM disk.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the security groups.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the subnet in which to launch the instances.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The base64-encoded MIME user data.
+    userData :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Machine Image (AMI).
+    imageId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesLaunchSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDeviceMappings', 'scheduledInstancesLaunchSpecification_blockDeviceMappings' - The block device mapping entries.
+--
+-- 'ebsOptimized', 'scheduledInstancesLaunchSpecification_ebsOptimized' - Indicates whether the instances are optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS-optimized instance.
+--
+-- Default: @false@
+--
+-- 'iamInstanceProfile', 'scheduledInstancesLaunchSpecification_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'instanceType', 'scheduledInstancesLaunchSpecification_instanceType' - The instance type.
+--
+-- 'kernelId', 'scheduledInstancesLaunchSpecification_kernelId' - The ID of the kernel.
+--
+-- 'keyName', 'scheduledInstancesLaunchSpecification_keyName' - The name of the key pair.
+--
+-- 'monitoring', 'scheduledInstancesLaunchSpecification_monitoring' - Enable or disable monitoring for the instances.
+--
+-- 'networkInterfaces', 'scheduledInstancesLaunchSpecification_networkInterfaces' - The network interfaces.
+--
+-- 'placement', 'scheduledInstancesLaunchSpecification_placement' - The placement information.
+--
+-- 'ramdiskId', 'scheduledInstancesLaunchSpecification_ramdiskId' - The ID of the RAM disk.
+--
+-- 'securityGroupIds', 'scheduledInstancesLaunchSpecification_securityGroupIds' - The IDs of the security groups.
+--
+-- 'subnetId', 'scheduledInstancesLaunchSpecification_subnetId' - The ID of the subnet in which to launch the instances.
+--
+-- 'userData', 'scheduledInstancesLaunchSpecification_userData' - The base64-encoded MIME user data.
+--
+-- 'imageId', 'scheduledInstancesLaunchSpecification_imageId' - The ID of the Amazon Machine Image (AMI).
+newScheduledInstancesLaunchSpecification ::
+  -- | 'imageId'
+  Prelude.Text ->
+  ScheduledInstancesLaunchSpecification
+newScheduledInstancesLaunchSpecification pImageId_ =
+  ScheduledInstancesLaunchSpecification'
+    { blockDeviceMappings =
+        Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      userData = Prelude.Nothing,
+      imageId = pImageId_
+    }
+
+-- | The block device mapping entries.
+scheduledInstancesLaunchSpecification_blockDeviceMappings :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe [ScheduledInstancesBlockDeviceMapping])
+scheduledInstancesLaunchSpecification_blockDeviceMappings = Lens.lens (\ScheduledInstancesLaunchSpecification' {blockDeviceMappings} -> blockDeviceMappings) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {blockDeviceMappings = a} :: ScheduledInstancesLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instances are optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS-optimized instance.
+--
+-- Default: @false@
+scheduledInstancesLaunchSpecification_ebsOptimized :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Bool)
+scheduledInstancesLaunchSpecification_ebsOptimized = Lens.lens (\ScheduledInstancesLaunchSpecification' {ebsOptimized} -> ebsOptimized) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {ebsOptimized = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The IAM instance profile.
+scheduledInstancesLaunchSpecification_iamInstanceProfile :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe ScheduledInstancesIamInstanceProfile)
+scheduledInstancesLaunchSpecification_iamInstanceProfile = Lens.lens (\ScheduledInstancesLaunchSpecification' {iamInstanceProfile} -> iamInstanceProfile) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {iamInstanceProfile = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The instance type.
+scheduledInstancesLaunchSpecification_instanceType :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Text)
+scheduledInstancesLaunchSpecification_instanceType = Lens.lens (\ScheduledInstancesLaunchSpecification' {instanceType} -> instanceType) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {instanceType = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The ID of the kernel.
+scheduledInstancesLaunchSpecification_kernelId :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Text)
+scheduledInstancesLaunchSpecification_kernelId = Lens.lens (\ScheduledInstancesLaunchSpecification' {kernelId} -> kernelId) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {kernelId = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The name of the key pair.
+scheduledInstancesLaunchSpecification_keyName :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Text)
+scheduledInstancesLaunchSpecification_keyName = Lens.lens (\ScheduledInstancesLaunchSpecification' {keyName} -> keyName) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {keyName = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | Enable or disable monitoring for the instances.
+scheduledInstancesLaunchSpecification_monitoring :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe ScheduledInstancesMonitoring)
+scheduledInstancesLaunchSpecification_monitoring = Lens.lens (\ScheduledInstancesLaunchSpecification' {monitoring} -> monitoring) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {monitoring = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The network interfaces.
+scheduledInstancesLaunchSpecification_networkInterfaces :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe [ScheduledInstancesNetworkInterface])
+scheduledInstancesLaunchSpecification_networkInterfaces = Lens.lens (\ScheduledInstancesLaunchSpecification' {networkInterfaces} -> networkInterfaces) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {networkInterfaces = a} :: ScheduledInstancesLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement information.
+scheduledInstancesLaunchSpecification_placement :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe ScheduledInstancesPlacement)
+scheduledInstancesLaunchSpecification_placement = Lens.lens (\ScheduledInstancesLaunchSpecification' {placement} -> placement) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {placement = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The ID of the RAM disk.
+scheduledInstancesLaunchSpecification_ramdiskId :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Text)
+scheduledInstancesLaunchSpecification_ramdiskId = Lens.lens (\ScheduledInstancesLaunchSpecification' {ramdiskId} -> ramdiskId) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {ramdiskId = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The IDs of the security groups.
+scheduledInstancesLaunchSpecification_securityGroupIds :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe [Prelude.Text])
+scheduledInstancesLaunchSpecification_securityGroupIds = Lens.lens (\ScheduledInstancesLaunchSpecification' {securityGroupIds} -> securityGroupIds) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {securityGroupIds = a} :: ScheduledInstancesLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the subnet in which to launch the instances.
+scheduledInstancesLaunchSpecification_subnetId :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Text)
+scheduledInstancesLaunchSpecification_subnetId = Lens.lens (\ScheduledInstancesLaunchSpecification' {subnetId} -> subnetId) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {subnetId = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The base64-encoded MIME user data.
+scheduledInstancesLaunchSpecification_userData :: Lens.Lens' ScheduledInstancesLaunchSpecification (Prelude.Maybe Prelude.Text)
+scheduledInstancesLaunchSpecification_userData = Lens.lens (\ScheduledInstancesLaunchSpecification' {userData} -> userData) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {userData = a} :: ScheduledInstancesLaunchSpecification)
+
+-- | The ID of the Amazon Machine Image (AMI).
+scheduledInstancesLaunchSpecification_imageId :: Lens.Lens' ScheduledInstancesLaunchSpecification Prelude.Text
+scheduledInstancesLaunchSpecification_imageId = Lens.lens (\ScheduledInstancesLaunchSpecification' {imageId} -> imageId) (\s@ScheduledInstancesLaunchSpecification' {} a -> s {imageId = a} :: ScheduledInstancesLaunchSpecification)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesLaunchSpecification
+  where
+  hashWithSalt
+    _salt
+    ScheduledInstancesLaunchSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` blockDeviceMappings
+        `Prelude.hashWithSalt` ebsOptimized
+        `Prelude.hashWithSalt` iamInstanceProfile
+        `Prelude.hashWithSalt` instanceType
+        `Prelude.hashWithSalt` kernelId
+        `Prelude.hashWithSalt` keyName
+        `Prelude.hashWithSalt` monitoring
+        `Prelude.hashWithSalt` networkInterfaces
+        `Prelude.hashWithSalt` placement
+        `Prelude.hashWithSalt` ramdiskId
+        `Prelude.hashWithSalt` securityGroupIds
+        `Prelude.hashWithSalt` subnetId
+        `Prelude.hashWithSalt` userData
+        `Prelude.hashWithSalt` imageId
+
+instance
+  Prelude.NFData
+    ScheduledInstancesLaunchSpecification
+  where
+  rnf ScheduledInstancesLaunchSpecification' {..} =
+    Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf userData
+      `Prelude.seq` Prelude.rnf imageId
+
+instance
+  Data.ToQuery
+    ScheduledInstancesLaunchSpecification
+  where
+  toQuery ScheduledInstancesLaunchSpecification' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "EbsOptimized" Data.=: ebsOptimized,
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "InstanceType" Data.=: instanceType,
+        "KernelId" Data.=: kernelId,
+        "KeyName" Data.=: keyName,
+        "Monitoring" Data.=: monitoring,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterface"
+              Prelude.<$> networkInterfaces
+          ),
+        "Placement" Data.=: placement,
+        "RamdiskId" Data.=: ramdiskId,
+        Data.toQuery
+          ( Data.toQueryList "SecurityGroupId"
+              Prelude.<$> securityGroupIds
+          ),
+        "SubnetId" Data.=: subnetId,
+        "UserData" Data.=: userData,
+        "ImageId" Data.=: imageId
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesMonitoring.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesMonitoring.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesMonitoring
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesMonitoring where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes whether monitoring is enabled for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesMonitoring' smart constructor.
+data ScheduledInstancesMonitoring = ScheduledInstancesMonitoring'
+  { -- | Indicates whether monitoring is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesMonitoring' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'scheduledInstancesMonitoring_enabled' - Indicates whether monitoring is enabled.
+newScheduledInstancesMonitoring ::
+  ScheduledInstancesMonitoring
+newScheduledInstancesMonitoring =
+  ScheduledInstancesMonitoring'
+    { enabled =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether monitoring is enabled.
+scheduledInstancesMonitoring_enabled :: Lens.Lens' ScheduledInstancesMonitoring (Prelude.Maybe Prelude.Bool)
+scheduledInstancesMonitoring_enabled = Lens.lens (\ScheduledInstancesMonitoring' {enabled} -> enabled) (\s@ScheduledInstancesMonitoring' {} a -> s {enabled = a} :: ScheduledInstancesMonitoring)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesMonitoring
+  where
+  hashWithSalt _salt ScheduledInstancesMonitoring' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData ScheduledInstancesMonitoring where
+  rnf ScheduledInstancesMonitoring' {..} =
+    Prelude.rnf enabled
+
+instance Data.ToQuery ScheduledInstancesMonitoring where
+  toQuery ScheduledInstancesMonitoring' {..} =
+    Prelude.mconcat ["Enabled" Data.=: enabled]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesNetworkInterface.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesNetworkInterface.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesNetworkInterface.hs
@@ -0,0 +1,248 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesNetworkInterface
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesNetworkInterface where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ScheduledInstancesIpv6Address
+import Amazonka.EC2.Types.ScheduledInstancesPrivateIpAddressConfig
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a network interface for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesNetworkInterface' smart constructor.
+data ScheduledInstancesNetworkInterface = ScheduledInstancesNetworkInterface'
+  { -- | Indicates whether to assign a public IPv4 address to instances launched
+    -- in a VPC. The public IPv4 address can only be assigned to a network
+    -- interface for eth0, and can only be assigned to a new network interface,
+    -- not an existing one. You cannot specify more than one network interface
+    -- in the request. If launching into a default subnet, the default value is
+    -- @true@.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to delete the interface when the instance is
+    -- terminated.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The index of the device for the network interface attachment.
+    deviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | The IDs of the security groups.
+    groups :: Prelude.Maybe [Prelude.Text],
+    -- | The number of IPv6 addresses to assign to the network interface. The
+    -- IPv6 addresses are automatically selected from the subnet range.
+    ipv6AddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The specific IPv6 addresses from the subnet range.
+    ipv6Addresses :: Prelude.Maybe [ScheduledInstancesIpv6Address],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 address of the network interface within the subnet.
+    privateIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The private IPv4 addresses.
+    privateIpAddressConfigs :: Prelude.Maybe [ScheduledInstancesPrivateIpAddressConfig],
+    -- | The number of secondary private IPv4 addresses.
+    secondaryPrivateIpAddressCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesNetworkInterface' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatePublicIpAddress', 'scheduledInstancesNetworkInterface_associatePublicIpAddress' - Indicates whether to assign a public IPv4 address to instances launched
+-- in a VPC. The public IPv4 address can only be assigned to a network
+-- interface for eth0, and can only be assigned to a new network interface,
+-- not an existing one. You cannot specify more than one network interface
+-- in the request. If launching into a default subnet, the default value is
+-- @true@.
+--
+-- 'deleteOnTermination', 'scheduledInstancesNetworkInterface_deleteOnTermination' - Indicates whether to delete the interface when the instance is
+-- terminated.
+--
+-- 'description', 'scheduledInstancesNetworkInterface_description' - The description.
+--
+-- 'deviceIndex', 'scheduledInstancesNetworkInterface_deviceIndex' - The index of the device for the network interface attachment.
+--
+-- 'groups', 'scheduledInstancesNetworkInterface_groups' - The IDs of the security groups.
+--
+-- 'ipv6AddressCount', 'scheduledInstancesNetworkInterface_ipv6AddressCount' - The number of IPv6 addresses to assign to the network interface. The
+-- IPv6 addresses are automatically selected from the subnet range.
+--
+-- 'ipv6Addresses', 'scheduledInstancesNetworkInterface_ipv6Addresses' - The specific IPv6 addresses from the subnet range.
+--
+-- 'networkInterfaceId', 'scheduledInstancesNetworkInterface_networkInterfaceId' - The ID of the network interface.
+--
+-- 'privateIpAddress', 'scheduledInstancesNetworkInterface_privateIpAddress' - The IPv4 address of the network interface within the subnet.
+--
+-- 'privateIpAddressConfigs', 'scheduledInstancesNetworkInterface_privateIpAddressConfigs' - The private IPv4 addresses.
+--
+-- 'secondaryPrivateIpAddressCount', 'scheduledInstancesNetworkInterface_secondaryPrivateIpAddressCount' - The number of secondary private IPv4 addresses.
+--
+-- 'subnetId', 'scheduledInstancesNetworkInterface_subnetId' - The ID of the subnet.
+newScheduledInstancesNetworkInterface ::
+  ScheduledInstancesNetworkInterface
+newScheduledInstancesNetworkInterface =
+  ScheduledInstancesNetworkInterface'
+    { associatePublicIpAddress =
+        Prelude.Nothing,
+      deleteOnTermination = Prelude.Nothing,
+      description = Prelude.Nothing,
+      deviceIndex = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      ipv6AddressCount = Prelude.Nothing,
+      ipv6Addresses = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      privateIpAddress = Prelude.Nothing,
+      privateIpAddressConfigs =
+        Prelude.Nothing,
+      secondaryPrivateIpAddressCount =
+        Prelude.Nothing,
+      subnetId = Prelude.Nothing
+    }
+
+-- | Indicates whether to assign a public IPv4 address to instances launched
+-- in a VPC. The public IPv4 address can only be assigned to a network
+-- interface for eth0, and can only be assigned to a new network interface,
+-- not an existing one. You cannot specify more than one network interface
+-- in the request. If launching into a default subnet, the default value is
+-- @true@.
+scheduledInstancesNetworkInterface_associatePublicIpAddress :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Bool)
+scheduledInstancesNetworkInterface_associatePublicIpAddress = Lens.lens (\ScheduledInstancesNetworkInterface' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@ScheduledInstancesNetworkInterface' {} a -> s {associatePublicIpAddress = a} :: ScheduledInstancesNetworkInterface)
+
+-- | Indicates whether to delete the interface when the instance is
+-- terminated.
+scheduledInstancesNetworkInterface_deleteOnTermination :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Bool)
+scheduledInstancesNetworkInterface_deleteOnTermination = Lens.lens (\ScheduledInstancesNetworkInterface' {deleteOnTermination} -> deleteOnTermination) (\s@ScheduledInstancesNetworkInterface' {} a -> s {deleteOnTermination = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The description.
+scheduledInstancesNetworkInterface_description :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Text)
+scheduledInstancesNetworkInterface_description = Lens.lens (\ScheduledInstancesNetworkInterface' {description} -> description) (\s@ScheduledInstancesNetworkInterface' {} a -> s {description = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The index of the device for the network interface attachment.
+scheduledInstancesNetworkInterface_deviceIndex :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Int)
+scheduledInstancesNetworkInterface_deviceIndex = Lens.lens (\ScheduledInstancesNetworkInterface' {deviceIndex} -> deviceIndex) (\s@ScheduledInstancesNetworkInterface' {} a -> s {deviceIndex = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The IDs of the security groups.
+scheduledInstancesNetworkInterface_groups :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe [Prelude.Text])
+scheduledInstancesNetworkInterface_groups = Lens.lens (\ScheduledInstancesNetworkInterface' {groups} -> groups) (\s@ScheduledInstancesNetworkInterface' {} a -> s {groups = a} :: ScheduledInstancesNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of IPv6 addresses to assign to the network interface. The
+-- IPv6 addresses are automatically selected from the subnet range.
+scheduledInstancesNetworkInterface_ipv6AddressCount :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Int)
+scheduledInstancesNetworkInterface_ipv6AddressCount = Lens.lens (\ScheduledInstancesNetworkInterface' {ipv6AddressCount} -> ipv6AddressCount) (\s@ScheduledInstancesNetworkInterface' {} a -> s {ipv6AddressCount = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The specific IPv6 addresses from the subnet range.
+scheduledInstancesNetworkInterface_ipv6Addresses :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe [ScheduledInstancesIpv6Address])
+scheduledInstancesNetworkInterface_ipv6Addresses = Lens.lens (\ScheduledInstancesNetworkInterface' {ipv6Addresses} -> ipv6Addresses) (\s@ScheduledInstancesNetworkInterface' {} a -> s {ipv6Addresses = a} :: ScheduledInstancesNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+scheduledInstancesNetworkInterface_networkInterfaceId :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Text)
+scheduledInstancesNetworkInterface_networkInterfaceId = Lens.lens (\ScheduledInstancesNetworkInterface' {networkInterfaceId} -> networkInterfaceId) (\s@ScheduledInstancesNetworkInterface' {} a -> s {networkInterfaceId = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The IPv4 address of the network interface within the subnet.
+scheduledInstancesNetworkInterface_privateIpAddress :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Text)
+scheduledInstancesNetworkInterface_privateIpAddress = Lens.lens (\ScheduledInstancesNetworkInterface' {privateIpAddress} -> privateIpAddress) (\s@ScheduledInstancesNetworkInterface' {} a -> s {privateIpAddress = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The private IPv4 addresses.
+scheduledInstancesNetworkInterface_privateIpAddressConfigs :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe [ScheduledInstancesPrivateIpAddressConfig])
+scheduledInstancesNetworkInterface_privateIpAddressConfigs = Lens.lens (\ScheduledInstancesNetworkInterface' {privateIpAddressConfigs} -> privateIpAddressConfigs) (\s@ScheduledInstancesNetworkInterface' {} a -> s {privateIpAddressConfigs = a} :: ScheduledInstancesNetworkInterface) Prelude.. Lens.mapping Lens.coerced
+
+-- | The number of secondary private IPv4 addresses.
+scheduledInstancesNetworkInterface_secondaryPrivateIpAddressCount :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Int)
+scheduledInstancesNetworkInterface_secondaryPrivateIpAddressCount = Lens.lens (\ScheduledInstancesNetworkInterface' {secondaryPrivateIpAddressCount} -> secondaryPrivateIpAddressCount) (\s@ScheduledInstancesNetworkInterface' {} a -> s {secondaryPrivateIpAddressCount = a} :: ScheduledInstancesNetworkInterface)
+
+-- | The ID of the subnet.
+scheduledInstancesNetworkInterface_subnetId :: Lens.Lens' ScheduledInstancesNetworkInterface (Prelude.Maybe Prelude.Text)
+scheduledInstancesNetworkInterface_subnetId = Lens.lens (\ScheduledInstancesNetworkInterface' {subnetId} -> subnetId) (\s@ScheduledInstancesNetworkInterface' {} a -> s {subnetId = a} :: ScheduledInstancesNetworkInterface)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesNetworkInterface
+  where
+  hashWithSalt
+    _salt
+    ScheduledInstancesNetworkInterface' {..} =
+      _salt
+        `Prelude.hashWithSalt` associatePublicIpAddress
+        `Prelude.hashWithSalt` deleteOnTermination
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` deviceIndex
+        `Prelude.hashWithSalt` groups
+        `Prelude.hashWithSalt` ipv6AddressCount
+        `Prelude.hashWithSalt` ipv6Addresses
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` privateIpAddress
+        `Prelude.hashWithSalt` privateIpAddressConfigs
+        `Prelude.hashWithSalt` secondaryPrivateIpAddressCount
+        `Prelude.hashWithSalt` subnetId
+
+instance
+  Prelude.NFData
+    ScheduledInstancesNetworkInterface
+  where
+  rnf ScheduledInstancesNetworkInterface' {..} =
+    Prelude.rnf associatePublicIpAddress
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceIndex
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf ipv6AddressCount
+      `Prelude.seq` Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf privateIpAddress
+      `Prelude.seq` Prelude.rnf privateIpAddressConfigs
+      `Prelude.seq` Prelude.rnf secondaryPrivateIpAddressCount
+      `Prelude.seq` Prelude.rnf subnetId
+
+instance
+  Data.ToQuery
+    ScheduledInstancesNetworkInterface
+  where
+  toQuery ScheduledInstancesNetworkInterface' {..} =
+    Prelude.mconcat
+      [ "AssociatePublicIpAddress"
+          Data.=: associatePublicIpAddress,
+        "DeleteOnTermination" Data.=: deleteOnTermination,
+        "Description" Data.=: description,
+        "DeviceIndex" Data.=: deviceIndex,
+        Data.toQuery
+          (Data.toQueryList "Group" Prelude.<$> groups),
+        "Ipv6AddressCount" Data.=: ipv6AddressCount,
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Address"
+              Prelude.<$> ipv6Addresses
+          ),
+        "NetworkInterfaceId" Data.=: networkInterfaceId,
+        "PrivateIpAddress" Data.=: privateIpAddress,
+        Data.toQuery
+          ( Data.toQueryList "PrivateIpAddressConfig"
+              Prelude.<$> privateIpAddressConfigs
+          ),
+        "SecondaryPrivateIpAddressCount"
+          Data.=: secondaryPrivateIpAddressCount,
+        "SubnetId" Data.=: subnetId
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesPlacement.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesPlacement.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesPlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesPlacement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the placement for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesPlacement' smart constructor.
+data ScheduledInstancesPlacement = ScheduledInstancesPlacement'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesPlacement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'scheduledInstancesPlacement_availabilityZone' - The Availability Zone.
+--
+-- 'groupName', 'scheduledInstancesPlacement_groupName' - The name of the placement group.
+newScheduledInstancesPlacement ::
+  ScheduledInstancesPlacement
+newScheduledInstancesPlacement =
+  ScheduledInstancesPlacement'
+    { availabilityZone =
+        Prelude.Nothing,
+      groupName = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+scheduledInstancesPlacement_availabilityZone :: Lens.Lens' ScheduledInstancesPlacement (Prelude.Maybe Prelude.Text)
+scheduledInstancesPlacement_availabilityZone = Lens.lens (\ScheduledInstancesPlacement' {availabilityZone} -> availabilityZone) (\s@ScheduledInstancesPlacement' {} a -> s {availabilityZone = a} :: ScheduledInstancesPlacement)
+
+-- | The name of the placement group.
+scheduledInstancesPlacement_groupName :: Lens.Lens' ScheduledInstancesPlacement (Prelude.Maybe Prelude.Text)
+scheduledInstancesPlacement_groupName = Lens.lens (\ScheduledInstancesPlacement' {groupName} -> groupName) (\s@ScheduledInstancesPlacement' {} a -> s {groupName = a} :: ScheduledInstancesPlacement)
+
+instance Prelude.Hashable ScheduledInstancesPlacement where
+  hashWithSalt _salt ScheduledInstancesPlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData ScheduledInstancesPlacement where
+  rnf ScheduledInstancesPlacement' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf groupName
+
+instance Data.ToQuery ScheduledInstancesPlacement where
+  toQuery ScheduledInstancesPlacement' {..} =
+    Prelude.mconcat
+      [ "AvailabilityZone" Data.=: availabilityZone,
+        "GroupName" Data.=: groupName
+      ]
diff --git a/gen/Amazonka/EC2/Types/ScheduledInstancesPrivateIpAddressConfig.hs b/gen/Amazonka/EC2/Types/ScheduledInstancesPrivateIpAddressConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ScheduledInstancesPrivateIpAddressConfig.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ScheduledInstancesPrivateIpAddressConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ScheduledInstancesPrivateIpAddressConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a private IPv4 address for a Scheduled Instance.
+--
+-- /See:/ 'newScheduledInstancesPrivateIpAddressConfig' smart constructor.
+data ScheduledInstancesPrivateIpAddressConfig = ScheduledInstancesPrivateIpAddressConfig'
+  { -- | Indicates whether this is a primary IPv4 address. Otherwise, this is a
+    -- secondary IPv4 address.
+    primary :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv4 address.
+    privateIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScheduledInstancesPrivateIpAddressConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'primary', 'scheduledInstancesPrivateIpAddressConfig_primary' - Indicates whether this is a primary IPv4 address. Otherwise, this is a
+-- secondary IPv4 address.
+--
+-- 'privateIpAddress', 'scheduledInstancesPrivateIpAddressConfig_privateIpAddress' - The IPv4 address.
+newScheduledInstancesPrivateIpAddressConfig ::
+  ScheduledInstancesPrivateIpAddressConfig
+newScheduledInstancesPrivateIpAddressConfig =
+  ScheduledInstancesPrivateIpAddressConfig'
+    { primary =
+        Prelude.Nothing,
+      privateIpAddress =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether this is a primary IPv4 address. Otherwise, this is a
+-- secondary IPv4 address.
+scheduledInstancesPrivateIpAddressConfig_primary :: Lens.Lens' ScheduledInstancesPrivateIpAddressConfig (Prelude.Maybe Prelude.Bool)
+scheduledInstancesPrivateIpAddressConfig_primary = Lens.lens (\ScheduledInstancesPrivateIpAddressConfig' {primary} -> primary) (\s@ScheduledInstancesPrivateIpAddressConfig' {} a -> s {primary = a} :: ScheduledInstancesPrivateIpAddressConfig)
+
+-- | The IPv4 address.
+scheduledInstancesPrivateIpAddressConfig_privateIpAddress :: Lens.Lens' ScheduledInstancesPrivateIpAddressConfig (Prelude.Maybe Prelude.Text)
+scheduledInstancesPrivateIpAddressConfig_privateIpAddress = Lens.lens (\ScheduledInstancesPrivateIpAddressConfig' {privateIpAddress} -> privateIpAddress) (\s@ScheduledInstancesPrivateIpAddressConfig' {} a -> s {privateIpAddress = a} :: ScheduledInstancesPrivateIpAddressConfig)
+
+instance
+  Prelude.Hashable
+    ScheduledInstancesPrivateIpAddressConfig
+  where
+  hashWithSalt
+    _salt
+    ScheduledInstancesPrivateIpAddressConfig' {..} =
+      _salt
+        `Prelude.hashWithSalt` primary
+        `Prelude.hashWithSalt` privateIpAddress
+
+instance
+  Prelude.NFData
+    ScheduledInstancesPrivateIpAddressConfig
+  where
+  rnf ScheduledInstancesPrivateIpAddressConfig' {..} =
+    Prelude.rnf primary
+      `Prelude.seq` Prelude.rnf privateIpAddress
+
+instance
+  Data.ToQuery
+    ScheduledInstancesPrivateIpAddressConfig
+  where
+  toQuery ScheduledInstancesPrivateIpAddressConfig' {..} =
+    Prelude.mconcat
+      [ "Primary" Data.=: primary,
+        "PrivateIpAddress" Data.=: privateIpAddress
+      ]
diff --git a/gen/Amazonka/EC2/Types/Scope.hs b/gen/Amazonka/EC2/Types/Scope.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Scope.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Scope
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Scope
+  ( Scope
+      ( ..,
+        Scope_Availability_Zone,
+        Scope_Region
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype Scope = Scope' {fromScope :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Scope_Availability_Zone :: Scope
+pattern Scope_Availability_Zone = Scope' "Availability Zone"
+
+pattern Scope_Region :: Scope
+pattern Scope_Region = Scope' "Region"
+
+{-# COMPLETE
+  Scope_Availability_Zone,
+  Scope_Region,
+  Scope'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SecurityGroup.hs b/gen/Amazonka/EC2/Types/SecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroup.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IpPermission
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group.
+--
+-- /See:/ 'newSecurityGroup' smart constructor.
+data SecurityGroup = SecurityGroup'
+  { -- | The inbound rules associated with the security group.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | [VPC only] The outbound rules associated with the security group.
+    ipPermissionsEgress :: Prelude.Maybe [IpPermission],
+    -- | Any tags assigned to the security group.
+    tags :: Prelude.Maybe [Tag],
+    -- | [VPC only] The ID of the VPC for the security group.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account ID of the owner of the security group.
+    ownerId :: Prelude.Text,
+    -- | The ID of the security group.
+    groupId :: Prelude.Text,
+    -- | The name of the security group.
+    groupName :: Prelude.Text,
+    -- | A description of the security group.
+    description :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipPermissions', 'securityGroup_ipPermissions' - The inbound rules associated with the security group.
+--
+-- 'ipPermissionsEgress', 'securityGroup_ipPermissionsEgress' - [VPC only] The outbound rules associated with the security group.
+--
+-- 'tags', 'securityGroup_tags' - Any tags assigned to the security group.
+--
+-- 'vpcId', 'securityGroup_vpcId' - [VPC only] The ID of the VPC for the security group.
+--
+-- 'ownerId', 'securityGroup_ownerId' - The Amazon Web Services account ID of the owner of the security group.
+--
+-- 'groupId', 'securityGroup_groupId' - The ID of the security group.
+--
+-- 'groupName', 'securityGroup_groupName' - The name of the security group.
+--
+-- 'description', 'securityGroup_description' - A description of the security group.
+newSecurityGroup ::
+  -- | 'ownerId'
+  Prelude.Text ->
+  -- | 'groupId'
+  Prelude.Text ->
+  -- | 'groupName'
+  Prelude.Text ->
+  -- | 'description'
+  Prelude.Text ->
+  SecurityGroup
+newSecurityGroup
+  pOwnerId_
+  pGroupId_
+  pGroupName_
+  pDescription_ =
+    SecurityGroup'
+      { ipPermissions = Prelude.Nothing,
+        ipPermissionsEgress = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        vpcId = Prelude.Nothing,
+        ownerId = pOwnerId_,
+        groupId = pGroupId_,
+        groupName = pGroupName_,
+        description = pDescription_
+      }
+
+-- | The inbound rules associated with the security group.
+securityGroup_ipPermissions :: Lens.Lens' SecurityGroup (Prelude.Maybe [IpPermission])
+securityGroup_ipPermissions = Lens.lens (\SecurityGroup' {ipPermissions} -> ipPermissions) (\s@SecurityGroup' {} a -> s {ipPermissions = a} :: SecurityGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | [VPC only] The outbound rules associated with the security group.
+securityGroup_ipPermissionsEgress :: Lens.Lens' SecurityGroup (Prelude.Maybe [IpPermission])
+securityGroup_ipPermissionsEgress = Lens.lens (\SecurityGroup' {ipPermissionsEgress} -> ipPermissionsEgress) (\s@SecurityGroup' {} a -> s {ipPermissionsEgress = a} :: SecurityGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any tags assigned to the security group.
+securityGroup_tags :: Lens.Lens' SecurityGroup (Prelude.Maybe [Tag])
+securityGroup_tags = Lens.lens (\SecurityGroup' {tags} -> tags) (\s@SecurityGroup' {} a -> s {tags = a} :: SecurityGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | [VPC only] The ID of the VPC for the security group.
+securityGroup_vpcId :: Lens.Lens' SecurityGroup (Prelude.Maybe Prelude.Text)
+securityGroup_vpcId = Lens.lens (\SecurityGroup' {vpcId} -> vpcId) (\s@SecurityGroup' {} a -> s {vpcId = a} :: SecurityGroup)
+
+-- | The Amazon Web Services account ID of the owner of the security group.
+securityGroup_ownerId :: Lens.Lens' SecurityGroup Prelude.Text
+securityGroup_ownerId = Lens.lens (\SecurityGroup' {ownerId} -> ownerId) (\s@SecurityGroup' {} a -> s {ownerId = a} :: SecurityGroup)
+
+-- | The ID of the security group.
+securityGroup_groupId :: Lens.Lens' SecurityGroup Prelude.Text
+securityGroup_groupId = Lens.lens (\SecurityGroup' {groupId} -> groupId) (\s@SecurityGroup' {} a -> s {groupId = a} :: SecurityGroup)
+
+-- | The name of the security group.
+securityGroup_groupName :: Lens.Lens' SecurityGroup Prelude.Text
+securityGroup_groupName = Lens.lens (\SecurityGroup' {groupName} -> groupName) (\s@SecurityGroup' {} a -> s {groupName = a} :: SecurityGroup)
+
+-- | A description of the security group.
+securityGroup_description :: Lens.Lens' SecurityGroup Prelude.Text
+securityGroup_description = Lens.lens (\SecurityGroup' {description} -> description) (\s@SecurityGroup' {} a -> s {description = a} :: SecurityGroup)
+
+instance Data.FromXML SecurityGroup where
+  parseXML x =
+    SecurityGroup'
+      Prelude.<$> ( x
+                      Data..@? "ipPermissions"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ipPermissionsEgress"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+      Prelude.<*> (x Data..@ "ownerId")
+      Prelude.<*> (x Data..@ "groupId")
+      Prelude.<*> (x Data..@ "groupName")
+      Prelude.<*> (x Data..@ "groupDescription")
+
+instance Prelude.Hashable SecurityGroup where
+  hashWithSalt _salt SecurityGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipPermissions
+      `Prelude.hashWithSalt` ipPermissionsEgress
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData SecurityGroup where
+  rnf SecurityGroup' {..} =
+    Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf ipPermissionsEgress
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/EC2/Types/SecurityGroupIdentifier.hs b/gen/Amazonka/EC2/Types/SecurityGroupIdentifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroupIdentifier.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroupIdentifier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroupIdentifier where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group.
+--
+-- /See:/ 'newSecurityGroupIdentifier' smart constructor.
+data SecurityGroupIdentifier = SecurityGroupIdentifier'
+  { -- | The ID of the security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the security group.
+    groupName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroupIdentifier' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'securityGroupIdentifier_groupId' - The ID of the security group.
+--
+-- 'groupName', 'securityGroupIdentifier_groupName' - The name of the security group.
+newSecurityGroupIdentifier ::
+  SecurityGroupIdentifier
+newSecurityGroupIdentifier =
+  SecurityGroupIdentifier'
+    { groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing
+    }
+
+-- | The ID of the security group.
+securityGroupIdentifier_groupId :: Lens.Lens' SecurityGroupIdentifier (Prelude.Maybe Prelude.Text)
+securityGroupIdentifier_groupId = Lens.lens (\SecurityGroupIdentifier' {groupId} -> groupId) (\s@SecurityGroupIdentifier' {} a -> s {groupId = a} :: SecurityGroupIdentifier)
+
+-- | The name of the security group.
+securityGroupIdentifier_groupName :: Lens.Lens' SecurityGroupIdentifier (Prelude.Maybe Prelude.Text)
+securityGroupIdentifier_groupName = Lens.lens (\SecurityGroupIdentifier' {groupName} -> groupName) (\s@SecurityGroupIdentifier' {} a -> s {groupName = a} :: SecurityGroupIdentifier)
+
+instance Data.FromXML SecurityGroupIdentifier where
+  parseXML x =
+    SecurityGroupIdentifier'
+      Prelude.<$> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+
+instance Prelude.Hashable SecurityGroupIdentifier where
+  hashWithSalt _salt SecurityGroupIdentifier' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+
+instance Prelude.NFData SecurityGroupIdentifier where
+  rnf SecurityGroupIdentifier' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
diff --git a/gen/Amazonka/EC2/Types/SecurityGroupReference.hs b/gen/Amazonka/EC2/Types/SecurityGroupReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroupReference.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroupReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroupReference where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC with a security group that references your security
+-- group.
+--
+-- /See:/ 'newSecurityGroupReference' smart constructor.
+data SecurityGroupReference = SecurityGroupReference'
+  { -- | The ID of your security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC with the referencing security group.
+    referencingVpcId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroupReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupId', 'securityGroupReference_groupId' - The ID of your security group.
+--
+-- 'referencingVpcId', 'securityGroupReference_referencingVpcId' - The ID of the VPC with the referencing security group.
+--
+-- 'vpcPeeringConnectionId', 'securityGroupReference_vpcPeeringConnectionId' - The ID of the VPC peering connection.
+newSecurityGroupReference ::
+  SecurityGroupReference
+newSecurityGroupReference =
+  SecurityGroupReference'
+    { groupId = Prelude.Nothing,
+      referencingVpcId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | The ID of your security group.
+securityGroupReference_groupId :: Lens.Lens' SecurityGroupReference (Prelude.Maybe Prelude.Text)
+securityGroupReference_groupId = Lens.lens (\SecurityGroupReference' {groupId} -> groupId) (\s@SecurityGroupReference' {} a -> s {groupId = a} :: SecurityGroupReference)
+
+-- | The ID of the VPC with the referencing security group.
+securityGroupReference_referencingVpcId :: Lens.Lens' SecurityGroupReference (Prelude.Maybe Prelude.Text)
+securityGroupReference_referencingVpcId = Lens.lens (\SecurityGroupReference' {referencingVpcId} -> referencingVpcId) (\s@SecurityGroupReference' {} a -> s {referencingVpcId = a} :: SecurityGroupReference)
+
+-- | The ID of the VPC peering connection.
+securityGroupReference_vpcPeeringConnectionId :: Lens.Lens' SecurityGroupReference (Prelude.Maybe Prelude.Text)
+securityGroupReference_vpcPeeringConnectionId = Lens.lens (\SecurityGroupReference' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@SecurityGroupReference' {} a -> s {vpcPeeringConnectionId = a} :: SecurityGroupReference)
+
+instance Data.FromXML SecurityGroupReference where
+  parseXML x =
+    SecurityGroupReference'
+      Prelude.<$> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "referencingVpcId")
+      Prelude.<*> (x Data..@? "vpcPeeringConnectionId")
+
+instance Prelude.Hashable SecurityGroupReference where
+  hashWithSalt _salt SecurityGroupReference' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` referencingVpcId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData SecurityGroupReference where
+  rnf SecurityGroupReference' {..} =
+    Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf referencingVpcId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
diff --git a/gen/Amazonka/EC2/Types/SecurityGroupRule.hs b/gen/Amazonka/EC2/Types/SecurityGroupRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroupRule.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroupRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroupRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReferencedSecurityGroup
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group rule.
+--
+-- /See:/ 'newSecurityGroupRule' smart constructor.
+data SecurityGroupRule = SecurityGroupRule'
+  { -- | The IPv4 CIDR range.
+    cidrIpv4 :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR range.
+    cidrIpv6 :: Prelude.Maybe Prelude.Text,
+    -- | The security group rule description.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The start of port range for the TCP and UDP protocols, or an
+    -- ICMP\/ICMPv6 type. A value of -1 indicates all ICMP\/ICMPv6 types. If
+    -- you specify all ICMP\/ICMPv6 types, you must specify all codes.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the security group.
+    groupOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+    -- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+    --
+    -- Use @-1@ to specify all protocols.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the security group rule is an outbound rule.
+    isEgress :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | Describes the security group that is referenced in the rule.
+    referencedGroupInfo :: Prelude.Maybe ReferencedSecurityGroup,
+    -- | The ID of the security group rule.
+    securityGroupRuleId :: Prelude.Maybe Prelude.Text,
+    -- | The tags applied to the security group rule.
+    tags :: Prelude.Maybe [Tag],
+    -- | The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+    -- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+    -- all ICMP\/ICMPv6 types, you must specify all codes.
+    toPort :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroupRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIpv4', 'securityGroupRule_cidrIpv4' - The IPv4 CIDR range.
+--
+-- 'cidrIpv6', 'securityGroupRule_cidrIpv6' - The IPv6 CIDR range.
+--
+-- 'description', 'securityGroupRule_description' - The security group rule description.
+--
+-- 'fromPort', 'securityGroupRule_fromPort' - The start of port range for the TCP and UDP protocols, or an
+-- ICMP\/ICMPv6 type. A value of -1 indicates all ICMP\/ICMPv6 types. If
+-- you specify all ICMP\/ICMPv6 types, you must specify all codes.
+--
+-- 'groupId', 'securityGroupRule_groupId' - The ID of the security group.
+--
+-- 'groupOwnerId', 'securityGroupRule_groupOwnerId' - The ID of the Amazon Web Services account that owns the security group.
+--
+-- 'ipProtocol', 'securityGroupRule_ipProtocol' - The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- Use @-1@ to specify all protocols.
+--
+-- 'isEgress', 'securityGroupRule_isEgress' - Indicates whether the security group rule is an outbound rule.
+--
+-- 'prefixListId', 'securityGroupRule_prefixListId' - The ID of the prefix list.
+--
+-- 'referencedGroupInfo', 'securityGroupRule_referencedGroupInfo' - Describes the security group that is referenced in the rule.
+--
+-- 'securityGroupRuleId', 'securityGroupRule_securityGroupRuleId' - The ID of the security group rule.
+--
+-- 'tags', 'securityGroupRule_tags' - The tags applied to the security group rule.
+--
+-- 'toPort', 'securityGroupRule_toPort' - The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+-- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+-- all ICMP\/ICMPv6 types, you must specify all codes.
+newSecurityGroupRule ::
+  SecurityGroupRule
+newSecurityGroupRule =
+  SecurityGroupRule'
+    { cidrIpv4 = Prelude.Nothing,
+      cidrIpv6 = Prelude.Nothing,
+      description = Prelude.Nothing,
+      fromPort = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupOwnerId = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      isEgress = Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      referencedGroupInfo = Prelude.Nothing,
+      securityGroupRuleId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The IPv4 CIDR range.
+securityGroupRule_cidrIpv4 :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_cidrIpv4 = Lens.lens (\SecurityGroupRule' {cidrIpv4} -> cidrIpv4) (\s@SecurityGroupRule' {} a -> s {cidrIpv4 = a} :: SecurityGroupRule)
+
+-- | The IPv6 CIDR range.
+securityGroupRule_cidrIpv6 :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_cidrIpv6 = Lens.lens (\SecurityGroupRule' {cidrIpv6} -> cidrIpv6) (\s@SecurityGroupRule' {} a -> s {cidrIpv6 = a} :: SecurityGroupRule)
+
+-- | The security group rule description.
+securityGroupRule_description :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_description = Lens.lens (\SecurityGroupRule' {description} -> description) (\s@SecurityGroupRule' {} a -> s {description = a} :: SecurityGroupRule)
+
+-- | The start of port range for the TCP and UDP protocols, or an
+-- ICMP\/ICMPv6 type. A value of -1 indicates all ICMP\/ICMPv6 types. If
+-- you specify all ICMP\/ICMPv6 types, you must specify all codes.
+securityGroupRule_fromPort :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Int)
+securityGroupRule_fromPort = Lens.lens (\SecurityGroupRule' {fromPort} -> fromPort) (\s@SecurityGroupRule' {} a -> s {fromPort = a} :: SecurityGroupRule)
+
+-- | The ID of the security group.
+securityGroupRule_groupId :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_groupId = Lens.lens (\SecurityGroupRule' {groupId} -> groupId) (\s@SecurityGroupRule' {} a -> s {groupId = a} :: SecurityGroupRule)
+
+-- | The ID of the Amazon Web Services account that owns the security group.
+securityGroupRule_groupOwnerId :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_groupOwnerId = Lens.lens (\SecurityGroupRule' {groupOwnerId} -> groupOwnerId) (\s@SecurityGroupRule' {} a -> s {groupOwnerId = a} :: SecurityGroupRule)
+
+-- | The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- Use @-1@ to specify all protocols.
+securityGroupRule_ipProtocol :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_ipProtocol = Lens.lens (\SecurityGroupRule' {ipProtocol} -> ipProtocol) (\s@SecurityGroupRule' {} a -> s {ipProtocol = a} :: SecurityGroupRule)
+
+-- | Indicates whether the security group rule is an outbound rule.
+securityGroupRule_isEgress :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Bool)
+securityGroupRule_isEgress = Lens.lens (\SecurityGroupRule' {isEgress} -> isEgress) (\s@SecurityGroupRule' {} a -> s {isEgress = a} :: SecurityGroupRule)
+
+-- | The ID of the prefix list.
+securityGroupRule_prefixListId :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_prefixListId = Lens.lens (\SecurityGroupRule' {prefixListId} -> prefixListId) (\s@SecurityGroupRule' {} a -> s {prefixListId = a} :: SecurityGroupRule)
+
+-- | Describes the security group that is referenced in the rule.
+securityGroupRule_referencedGroupInfo :: Lens.Lens' SecurityGroupRule (Prelude.Maybe ReferencedSecurityGroup)
+securityGroupRule_referencedGroupInfo = Lens.lens (\SecurityGroupRule' {referencedGroupInfo} -> referencedGroupInfo) (\s@SecurityGroupRule' {} a -> s {referencedGroupInfo = a} :: SecurityGroupRule)
+
+-- | The ID of the security group rule.
+securityGroupRule_securityGroupRuleId :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Text)
+securityGroupRule_securityGroupRuleId = Lens.lens (\SecurityGroupRule' {securityGroupRuleId} -> securityGroupRuleId) (\s@SecurityGroupRule' {} a -> s {securityGroupRuleId = a} :: SecurityGroupRule)
+
+-- | The tags applied to the security group rule.
+securityGroupRule_tags :: Lens.Lens' SecurityGroupRule (Prelude.Maybe [Tag])
+securityGroupRule_tags = Lens.lens (\SecurityGroupRule' {tags} -> tags) (\s@SecurityGroupRule' {} a -> s {tags = a} :: SecurityGroupRule) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+-- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+-- all ICMP\/ICMPv6 types, you must specify all codes.
+securityGroupRule_toPort :: Lens.Lens' SecurityGroupRule (Prelude.Maybe Prelude.Int)
+securityGroupRule_toPort = Lens.lens (\SecurityGroupRule' {toPort} -> toPort) (\s@SecurityGroupRule' {} a -> s {toPort = a} :: SecurityGroupRule)
+
+instance Data.FromXML SecurityGroupRule where
+  parseXML x =
+    SecurityGroupRule'
+      Prelude.<$> (x Data..@? "cidrIpv4")
+      Prelude.<*> (x Data..@? "cidrIpv6")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "fromPort")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupOwnerId")
+      Prelude.<*> (x Data..@? "ipProtocol")
+      Prelude.<*> (x Data..@? "isEgress")
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "referencedGroupInfo")
+      Prelude.<*> (x Data..@? "securityGroupRuleId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "toPort")
+
+instance Prelude.Hashable SecurityGroupRule where
+  hashWithSalt _salt SecurityGroupRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIpv4
+      `Prelude.hashWithSalt` cidrIpv6
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupOwnerId
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` isEgress
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` referencedGroupInfo
+      `Prelude.hashWithSalt` securityGroupRuleId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData SecurityGroupRule where
+  rnf SecurityGroupRule' {..} =
+    Prelude.rnf cidrIpv4
+      `Prelude.seq` Prelude.rnf cidrIpv6
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupOwnerId
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf isEgress
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf referencedGroupInfo
+      `Prelude.seq` Prelude.rnf securityGroupRuleId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf toPort
diff --git a/gen/Amazonka/EC2/Types/SecurityGroupRuleDescription.hs b/gen/Amazonka/EC2/Types/SecurityGroupRuleDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroupRuleDescription.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroupRuleDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroupRuleDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the description of a security group rule.
+--
+-- You can use this when you want to update the security group rule
+-- description for either an inbound or outbound rule.
+--
+-- /See:/ 'newSecurityGroupRuleDescription' smart constructor.
+data SecurityGroupRuleDescription = SecurityGroupRuleDescription'
+  { -- | The description of the security group rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the security group rule.
+    securityGroupRuleId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroupRuleDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'securityGroupRuleDescription_description' - The description of the security group rule.
+--
+-- 'securityGroupRuleId', 'securityGroupRuleDescription_securityGroupRuleId' - The ID of the security group rule.
+newSecurityGroupRuleDescription ::
+  SecurityGroupRuleDescription
+newSecurityGroupRuleDescription =
+  SecurityGroupRuleDescription'
+    { description =
+        Prelude.Nothing,
+      securityGroupRuleId = Prelude.Nothing
+    }
+
+-- | The description of the security group rule.
+securityGroupRuleDescription_description :: Lens.Lens' SecurityGroupRuleDescription (Prelude.Maybe Prelude.Text)
+securityGroupRuleDescription_description = Lens.lens (\SecurityGroupRuleDescription' {description} -> description) (\s@SecurityGroupRuleDescription' {} a -> s {description = a} :: SecurityGroupRuleDescription)
+
+-- | The ID of the security group rule.
+securityGroupRuleDescription_securityGroupRuleId :: Lens.Lens' SecurityGroupRuleDescription (Prelude.Maybe Prelude.Text)
+securityGroupRuleDescription_securityGroupRuleId = Lens.lens (\SecurityGroupRuleDescription' {securityGroupRuleId} -> securityGroupRuleId) (\s@SecurityGroupRuleDescription' {} a -> s {securityGroupRuleId = a} :: SecurityGroupRuleDescription)
+
+instance
+  Prelude.Hashable
+    SecurityGroupRuleDescription
+  where
+  hashWithSalt _salt SecurityGroupRuleDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` securityGroupRuleId
+
+instance Prelude.NFData SecurityGroupRuleDescription where
+  rnf SecurityGroupRuleDescription' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf securityGroupRuleId
+
+instance Data.ToQuery SecurityGroupRuleDescription where
+  toQuery SecurityGroupRuleDescription' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "SecurityGroupRuleId" Data.=: securityGroupRuleId
+      ]
diff --git a/gen/Amazonka/EC2/Types/SecurityGroupRuleRequest.hs b/gen/Amazonka/EC2/Types/SecurityGroupRuleRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroupRuleRequest.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroupRuleRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroupRuleRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group rule.
+--
+-- You must specify exactly one of the following parameters, based on the
+-- rule type:
+--
+-- -   CidrIpv4
+--
+-- -   CidrIpv6
+--
+-- -   PrefixListId
+--
+-- -   ReferencedGroupId
+--
+-- When you modify a rule, you cannot change the rule type. For example, if
+-- the rule uses an IPv4 address range, you must use @CidrIpv4@ to specify
+-- a new IPv4 address range.
+--
+-- /See:/ 'newSecurityGroupRuleRequest' smart constructor.
+data SecurityGroupRuleRequest = SecurityGroupRuleRequest'
+  { -- | The IPv4 CIDR range. To specify a single IPv4 address, use the \/32
+    -- prefix length.
+    cidrIpv4 :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR range. To specify a single IPv6 address, use the \/128
+    -- prefix length.
+    cidrIpv6 :: Prelude.Maybe Prelude.Text,
+    -- | The description of the security group rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The start of port range for the TCP and UDP protocols, or an
+    -- ICMP\/ICMPv6 type. A value of -1 indicates all ICMP\/ICMPv6 types. If
+    -- you specify all ICMP\/ICMPv6 types, you must specify all codes.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+    -- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+    --
+    -- Use @-1@ to specify all protocols.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the security group that is referenced in the security group
+    -- rule.
+    referencedGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+    -- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+    -- all ICMP\/ICMPv6 types, you must specify all codes.
+    toPort :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroupRuleRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrIpv4', 'securityGroupRuleRequest_cidrIpv4' - The IPv4 CIDR range. To specify a single IPv4 address, use the \/32
+-- prefix length.
+--
+-- 'cidrIpv6', 'securityGroupRuleRequest_cidrIpv6' - The IPv6 CIDR range. To specify a single IPv6 address, use the \/128
+-- prefix length.
+--
+-- 'description', 'securityGroupRuleRequest_description' - The description of the security group rule.
+--
+-- 'fromPort', 'securityGroupRuleRequest_fromPort' - The start of port range for the TCP and UDP protocols, or an
+-- ICMP\/ICMPv6 type. A value of -1 indicates all ICMP\/ICMPv6 types. If
+-- you specify all ICMP\/ICMPv6 types, you must specify all codes.
+--
+-- 'ipProtocol', 'securityGroupRuleRequest_ipProtocol' - The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- Use @-1@ to specify all protocols.
+--
+-- 'prefixListId', 'securityGroupRuleRequest_prefixListId' - The ID of the prefix list.
+--
+-- 'referencedGroupId', 'securityGroupRuleRequest_referencedGroupId' - The ID of the security group that is referenced in the security group
+-- rule.
+--
+-- 'toPort', 'securityGroupRuleRequest_toPort' - The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+-- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+-- all ICMP\/ICMPv6 types, you must specify all codes.
+newSecurityGroupRuleRequest ::
+  SecurityGroupRuleRequest
+newSecurityGroupRuleRequest =
+  SecurityGroupRuleRequest'
+    { cidrIpv4 =
+        Prelude.Nothing,
+      cidrIpv6 = Prelude.Nothing,
+      description = Prelude.Nothing,
+      fromPort = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      referencedGroupId = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The IPv4 CIDR range. To specify a single IPv4 address, use the \/32
+-- prefix length.
+securityGroupRuleRequest_cidrIpv4 :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Text)
+securityGroupRuleRequest_cidrIpv4 = Lens.lens (\SecurityGroupRuleRequest' {cidrIpv4} -> cidrIpv4) (\s@SecurityGroupRuleRequest' {} a -> s {cidrIpv4 = a} :: SecurityGroupRuleRequest)
+
+-- | The IPv6 CIDR range. To specify a single IPv6 address, use the \/128
+-- prefix length.
+securityGroupRuleRequest_cidrIpv6 :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Text)
+securityGroupRuleRequest_cidrIpv6 = Lens.lens (\SecurityGroupRuleRequest' {cidrIpv6} -> cidrIpv6) (\s@SecurityGroupRuleRequest' {} a -> s {cidrIpv6 = a} :: SecurityGroupRuleRequest)
+
+-- | The description of the security group rule.
+securityGroupRuleRequest_description :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Text)
+securityGroupRuleRequest_description = Lens.lens (\SecurityGroupRuleRequest' {description} -> description) (\s@SecurityGroupRuleRequest' {} a -> s {description = a} :: SecurityGroupRuleRequest)
+
+-- | The start of port range for the TCP and UDP protocols, or an
+-- ICMP\/ICMPv6 type. A value of -1 indicates all ICMP\/ICMPv6 types. If
+-- you specify all ICMP\/ICMPv6 types, you must specify all codes.
+securityGroupRuleRequest_fromPort :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Int)
+securityGroupRuleRequest_fromPort = Lens.lens (\SecurityGroupRuleRequest' {fromPort} -> fromPort) (\s@SecurityGroupRuleRequest' {} a -> s {fromPort = a} :: SecurityGroupRuleRequest)
+
+-- | The IP protocol name (@tcp@, @udp@, @icmp@, @icmpv6@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- Use @-1@ to specify all protocols.
+securityGroupRuleRequest_ipProtocol :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Text)
+securityGroupRuleRequest_ipProtocol = Lens.lens (\SecurityGroupRuleRequest' {ipProtocol} -> ipProtocol) (\s@SecurityGroupRuleRequest' {} a -> s {ipProtocol = a} :: SecurityGroupRuleRequest)
+
+-- | The ID of the prefix list.
+securityGroupRuleRequest_prefixListId :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Text)
+securityGroupRuleRequest_prefixListId = Lens.lens (\SecurityGroupRuleRequest' {prefixListId} -> prefixListId) (\s@SecurityGroupRuleRequest' {} a -> s {prefixListId = a} :: SecurityGroupRuleRequest)
+
+-- | The ID of the security group that is referenced in the security group
+-- rule.
+securityGroupRuleRequest_referencedGroupId :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Text)
+securityGroupRuleRequest_referencedGroupId = Lens.lens (\SecurityGroupRuleRequest' {referencedGroupId} -> referencedGroupId) (\s@SecurityGroupRuleRequest' {} a -> s {referencedGroupId = a} :: SecurityGroupRuleRequest)
+
+-- | The end of port range for the TCP and UDP protocols, or an ICMP\/ICMPv6
+-- code. A value of @-1@ indicates all ICMP\/ICMPv6 codes. If you specify
+-- all ICMP\/ICMPv6 types, you must specify all codes.
+securityGroupRuleRequest_toPort :: Lens.Lens' SecurityGroupRuleRequest (Prelude.Maybe Prelude.Int)
+securityGroupRuleRequest_toPort = Lens.lens (\SecurityGroupRuleRequest' {toPort} -> toPort) (\s@SecurityGroupRuleRequest' {} a -> s {toPort = a} :: SecurityGroupRuleRequest)
+
+instance Prelude.Hashable SecurityGroupRuleRequest where
+  hashWithSalt _salt SecurityGroupRuleRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrIpv4
+      `Prelude.hashWithSalt` cidrIpv6
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` referencedGroupId
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData SecurityGroupRuleRequest where
+  rnf SecurityGroupRuleRequest' {..} =
+    Prelude.rnf cidrIpv4
+      `Prelude.seq` Prelude.rnf cidrIpv6
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf referencedGroupId
+      `Prelude.seq` Prelude.rnf toPort
+
+instance Data.ToQuery SecurityGroupRuleRequest where
+  toQuery SecurityGroupRuleRequest' {..} =
+    Prelude.mconcat
+      [ "CidrIpv4" Data.=: cidrIpv4,
+        "CidrIpv6" Data.=: cidrIpv6,
+        "Description" Data.=: description,
+        "FromPort" Data.=: fromPort,
+        "IpProtocol" Data.=: ipProtocol,
+        "PrefixListId" Data.=: prefixListId,
+        "ReferencedGroupId" Data.=: referencedGroupId,
+        "ToPort" Data.=: toPort
+      ]
diff --git a/gen/Amazonka/EC2/Types/SecurityGroupRuleUpdate.hs b/gen/Amazonka/EC2/Types/SecurityGroupRuleUpdate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SecurityGroupRuleUpdate.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SecurityGroupRuleUpdate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SecurityGroupRuleUpdate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SecurityGroupRuleRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an update to a security group rule.
+--
+-- /See:/ 'newSecurityGroupRuleUpdate' smart constructor.
+data SecurityGroupRuleUpdate = SecurityGroupRuleUpdate'
+  { -- | Information about the security group rule.
+    securityGroupRule :: Prelude.Maybe SecurityGroupRuleRequest,
+    -- | The ID of the security group rule.
+    securityGroupRuleId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SecurityGroupRuleUpdate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroupRule', 'securityGroupRuleUpdate_securityGroupRule' - Information about the security group rule.
+--
+-- 'securityGroupRuleId', 'securityGroupRuleUpdate_securityGroupRuleId' - The ID of the security group rule.
+newSecurityGroupRuleUpdate ::
+  SecurityGroupRuleUpdate
+newSecurityGroupRuleUpdate =
+  SecurityGroupRuleUpdate'
+    { securityGroupRule =
+        Prelude.Nothing,
+      securityGroupRuleId = Prelude.Nothing
+    }
+
+-- | Information about the security group rule.
+securityGroupRuleUpdate_securityGroupRule :: Lens.Lens' SecurityGroupRuleUpdate (Prelude.Maybe SecurityGroupRuleRequest)
+securityGroupRuleUpdate_securityGroupRule = Lens.lens (\SecurityGroupRuleUpdate' {securityGroupRule} -> securityGroupRule) (\s@SecurityGroupRuleUpdate' {} a -> s {securityGroupRule = a} :: SecurityGroupRuleUpdate)
+
+-- | The ID of the security group rule.
+securityGroupRuleUpdate_securityGroupRuleId :: Lens.Lens' SecurityGroupRuleUpdate (Prelude.Maybe Prelude.Text)
+securityGroupRuleUpdate_securityGroupRuleId = Lens.lens (\SecurityGroupRuleUpdate' {securityGroupRuleId} -> securityGroupRuleId) (\s@SecurityGroupRuleUpdate' {} a -> s {securityGroupRuleId = a} :: SecurityGroupRuleUpdate)
+
+instance Prelude.Hashable SecurityGroupRuleUpdate where
+  hashWithSalt _salt SecurityGroupRuleUpdate' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroupRule
+      `Prelude.hashWithSalt` securityGroupRuleId
+
+instance Prelude.NFData SecurityGroupRuleUpdate where
+  rnf SecurityGroupRuleUpdate' {..} =
+    Prelude.rnf securityGroupRule
+      `Prelude.seq` Prelude.rnf securityGroupRuleId
+
+instance Data.ToQuery SecurityGroupRuleUpdate where
+  toQuery SecurityGroupRuleUpdate' {..} =
+    Prelude.mconcat
+      [ "SecurityGroupRule" Data.=: securityGroupRule,
+        "SecurityGroupRuleId" Data.=: securityGroupRuleId
+      ]
diff --git a/gen/Amazonka/EC2/Types/SelfServicePortal.hs b/gen/Amazonka/EC2/Types/SelfServicePortal.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SelfServicePortal.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SelfServicePortal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SelfServicePortal
+  ( SelfServicePortal
+      ( ..,
+        SelfServicePortal_Disabled,
+        SelfServicePortal_Enabled
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SelfServicePortal = SelfServicePortal'
+  { fromSelfServicePortal ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SelfServicePortal_Disabled :: SelfServicePortal
+pattern SelfServicePortal_Disabled = SelfServicePortal' "disabled"
+
+pattern SelfServicePortal_Enabled :: SelfServicePortal
+pattern SelfServicePortal_Enabled = SelfServicePortal' "enabled"
+
+{-# COMPLETE
+  SelfServicePortal_Disabled,
+  SelfServicePortal_Enabled,
+  SelfServicePortal'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ServiceConfiguration.hs b/gen/Amazonka/EC2/Types/ServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ServiceConfiguration.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ServiceConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ServiceConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PayerResponsibility
+import Amazonka.EC2.Types.PrivateDnsNameConfiguration
+import Amazonka.EC2.Types.ServiceConnectivityType
+import Amazonka.EC2.Types.ServiceState
+import Amazonka.EC2.Types.ServiceTypeDetail
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a service configuration for a VPC endpoint service.
+--
+-- /See:/ 'newServiceConfiguration' smart constructor.
+data ServiceConfiguration = ServiceConfiguration'
+  { -- | Indicates whether requests from other Amazon Web Services accounts to
+    -- create an endpoint to the service must first be accepted.
+    acceptanceRequired :: Prelude.Maybe Prelude.Bool,
+    -- | The Availability Zones in which the service is available.
+    availabilityZones :: Prelude.Maybe [Prelude.Text],
+    -- | The DNS names for the service.
+    baseEndpointDnsNames :: Prelude.Maybe [Prelude.Text],
+    -- | The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the
+    -- service.
+    gatewayLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether the service manages its VPC endpoints. Management of
+    -- the service VPC endpoints using the VPC endpoint API is restricted.
+    managesVpcEndpoints :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Names (ARNs) of the Network Load Balancers for the
+    -- service.
+    networkLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The payer responsibility.
+    payerResponsibility :: Prelude.Maybe PayerResponsibility,
+    -- | The private DNS name for the service.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the endpoint service private DNS name configuration.
+    privateDnsNameConfiguration :: Prelude.Maybe PrivateDnsNameConfiguration,
+    -- | The ID of the service.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the service.
+    serviceName :: Prelude.Maybe Prelude.Text,
+    -- | The service state.
+    serviceState :: Prelude.Maybe ServiceState,
+    -- | The type of service.
+    serviceType :: Prelude.Maybe [ServiceTypeDetail],
+    -- | The supported IP address types.
+    supportedIpAddressTypes :: Prelude.Maybe [ServiceConnectivityType],
+    -- | Any tags assigned to the service.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceptanceRequired', 'serviceConfiguration_acceptanceRequired' - Indicates whether requests from other Amazon Web Services accounts to
+-- create an endpoint to the service must first be accepted.
+--
+-- 'availabilityZones', 'serviceConfiguration_availabilityZones' - The Availability Zones in which the service is available.
+--
+-- 'baseEndpointDnsNames', 'serviceConfiguration_baseEndpointDnsNames' - The DNS names for the service.
+--
+-- 'gatewayLoadBalancerArns', 'serviceConfiguration_gatewayLoadBalancerArns' - The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the
+-- service.
+--
+-- 'managesVpcEndpoints', 'serviceConfiguration_managesVpcEndpoints' - Indicates whether the service manages its VPC endpoints. Management of
+-- the service VPC endpoints using the VPC endpoint API is restricted.
+--
+-- 'networkLoadBalancerArns', 'serviceConfiguration_networkLoadBalancerArns' - The Amazon Resource Names (ARNs) of the Network Load Balancers for the
+-- service.
+--
+-- 'payerResponsibility', 'serviceConfiguration_payerResponsibility' - The payer responsibility.
+--
+-- 'privateDnsName', 'serviceConfiguration_privateDnsName' - The private DNS name for the service.
+--
+-- 'privateDnsNameConfiguration', 'serviceConfiguration_privateDnsNameConfiguration' - Information about the endpoint service private DNS name configuration.
+--
+-- 'serviceId', 'serviceConfiguration_serviceId' - The ID of the service.
+--
+-- 'serviceName', 'serviceConfiguration_serviceName' - The name of the service.
+--
+-- 'serviceState', 'serviceConfiguration_serviceState' - The service state.
+--
+-- 'serviceType', 'serviceConfiguration_serviceType' - The type of service.
+--
+-- 'supportedIpAddressTypes', 'serviceConfiguration_supportedIpAddressTypes' - The supported IP address types.
+--
+-- 'tags', 'serviceConfiguration_tags' - Any tags assigned to the service.
+newServiceConfiguration ::
+  ServiceConfiguration
+newServiceConfiguration =
+  ServiceConfiguration'
+    { acceptanceRequired =
+        Prelude.Nothing,
+      availabilityZones = Prelude.Nothing,
+      baseEndpointDnsNames = Prelude.Nothing,
+      gatewayLoadBalancerArns = Prelude.Nothing,
+      managesVpcEndpoints = Prelude.Nothing,
+      networkLoadBalancerArns = Prelude.Nothing,
+      payerResponsibility = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      privateDnsNameConfiguration = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      serviceName = Prelude.Nothing,
+      serviceState = Prelude.Nothing,
+      serviceType = Prelude.Nothing,
+      supportedIpAddressTypes = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | Indicates whether requests from other Amazon Web Services accounts to
+-- create an endpoint to the service must first be accepted.
+serviceConfiguration_acceptanceRequired :: Lens.Lens' ServiceConfiguration (Prelude.Maybe Prelude.Bool)
+serviceConfiguration_acceptanceRequired = Lens.lens (\ServiceConfiguration' {acceptanceRequired} -> acceptanceRequired) (\s@ServiceConfiguration' {} a -> s {acceptanceRequired = a} :: ServiceConfiguration)
+
+-- | The Availability Zones in which the service is available.
+serviceConfiguration_availabilityZones :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [Prelude.Text])
+serviceConfiguration_availabilityZones = Lens.lens (\ServiceConfiguration' {availabilityZones} -> availabilityZones) (\s@ServiceConfiguration' {} a -> s {availabilityZones = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The DNS names for the service.
+serviceConfiguration_baseEndpointDnsNames :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [Prelude.Text])
+serviceConfiguration_baseEndpointDnsNames = Lens.lens (\ServiceConfiguration' {baseEndpointDnsNames} -> baseEndpointDnsNames) (\s@ServiceConfiguration' {} a -> s {baseEndpointDnsNames = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the
+-- service.
+serviceConfiguration_gatewayLoadBalancerArns :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [Prelude.Text])
+serviceConfiguration_gatewayLoadBalancerArns = Lens.lens (\ServiceConfiguration' {gatewayLoadBalancerArns} -> gatewayLoadBalancerArns) (\s@ServiceConfiguration' {} a -> s {gatewayLoadBalancerArns = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the service manages its VPC endpoints. Management of
+-- the service VPC endpoints using the VPC endpoint API is restricted.
+serviceConfiguration_managesVpcEndpoints :: Lens.Lens' ServiceConfiguration (Prelude.Maybe Prelude.Bool)
+serviceConfiguration_managesVpcEndpoints = Lens.lens (\ServiceConfiguration' {managesVpcEndpoints} -> managesVpcEndpoints) (\s@ServiceConfiguration' {} a -> s {managesVpcEndpoints = a} :: ServiceConfiguration)
+
+-- | The Amazon Resource Names (ARNs) of the Network Load Balancers for the
+-- service.
+serviceConfiguration_networkLoadBalancerArns :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [Prelude.Text])
+serviceConfiguration_networkLoadBalancerArns = Lens.lens (\ServiceConfiguration' {networkLoadBalancerArns} -> networkLoadBalancerArns) (\s@ServiceConfiguration' {} a -> s {networkLoadBalancerArns = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The payer responsibility.
+serviceConfiguration_payerResponsibility :: Lens.Lens' ServiceConfiguration (Prelude.Maybe PayerResponsibility)
+serviceConfiguration_payerResponsibility = Lens.lens (\ServiceConfiguration' {payerResponsibility} -> payerResponsibility) (\s@ServiceConfiguration' {} a -> s {payerResponsibility = a} :: ServiceConfiguration)
+
+-- | The private DNS name for the service.
+serviceConfiguration_privateDnsName :: Lens.Lens' ServiceConfiguration (Prelude.Maybe Prelude.Text)
+serviceConfiguration_privateDnsName = Lens.lens (\ServiceConfiguration' {privateDnsName} -> privateDnsName) (\s@ServiceConfiguration' {} a -> s {privateDnsName = a} :: ServiceConfiguration)
+
+-- | Information about the endpoint service private DNS name configuration.
+serviceConfiguration_privateDnsNameConfiguration :: Lens.Lens' ServiceConfiguration (Prelude.Maybe PrivateDnsNameConfiguration)
+serviceConfiguration_privateDnsNameConfiguration = Lens.lens (\ServiceConfiguration' {privateDnsNameConfiguration} -> privateDnsNameConfiguration) (\s@ServiceConfiguration' {} a -> s {privateDnsNameConfiguration = a} :: ServiceConfiguration)
+
+-- | The ID of the service.
+serviceConfiguration_serviceId :: Lens.Lens' ServiceConfiguration (Prelude.Maybe Prelude.Text)
+serviceConfiguration_serviceId = Lens.lens (\ServiceConfiguration' {serviceId} -> serviceId) (\s@ServiceConfiguration' {} a -> s {serviceId = a} :: ServiceConfiguration)
+
+-- | The name of the service.
+serviceConfiguration_serviceName :: Lens.Lens' ServiceConfiguration (Prelude.Maybe Prelude.Text)
+serviceConfiguration_serviceName = Lens.lens (\ServiceConfiguration' {serviceName} -> serviceName) (\s@ServiceConfiguration' {} a -> s {serviceName = a} :: ServiceConfiguration)
+
+-- | The service state.
+serviceConfiguration_serviceState :: Lens.Lens' ServiceConfiguration (Prelude.Maybe ServiceState)
+serviceConfiguration_serviceState = Lens.lens (\ServiceConfiguration' {serviceState} -> serviceState) (\s@ServiceConfiguration' {} a -> s {serviceState = a} :: ServiceConfiguration)
+
+-- | The type of service.
+serviceConfiguration_serviceType :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [ServiceTypeDetail])
+serviceConfiguration_serviceType = Lens.lens (\ServiceConfiguration' {serviceType} -> serviceType) (\s@ServiceConfiguration' {} a -> s {serviceType = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The supported IP address types.
+serviceConfiguration_supportedIpAddressTypes :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [ServiceConnectivityType])
+serviceConfiguration_supportedIpAddressTypes = Lens.lens (\ServiceConfiguration' {supportedIpAddressTypes} -> supportedIpAddressTypes) (\s@ServiceConfiguration' {} a -> s {supportedIpAddressTypes = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any tags assigned to the service.
+serviceConfiguration_tags :: Lens.Lens' ServiceConfiguration (Prelude.Maybe [Tag])
+serviceConfiguration_tags = Lens.lens (\ServiceConfiguration' {tags} -> tags) (\s@ServiceConfiguration' {} a -> s {tags = a} :: ServiceConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ServiceConfiguration where
+  parseXML x =
+    ServiceConfiguration'
+      Prelude.<$> (x Data..@? "acceptanceRequired")
+      Prelude.<*> ( x
+                      Data..@? "availabilityZoneSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "baseEndpointDnsNameSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "gatewayLoadBalancerArnSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "managesVpcEndpoints")
+      Prelude.<*> ( x
+                      Data..@? "networkLoadBalancerArnSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "payerResponsibility")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateDnsNameConfiguration")
+      Prelude.<*> (x Data..@? "serviceId")
+      Prelude.<*> (x Data..@? "serviceName")
+      Prelude.<*> (x Data..@? "serviceState")
+      Prelude.<*> ( x
+                      Data..@? "serviceType"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "supportedIpAddressTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ServiceConfiguration where
+  hashWithSalt _salt ServiceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceptanceRequired
+      `Prelude.hashWithSalt` availabilityZones
+      `Prelude.hashWithSalt` baseEndpointDnsNames
+      `Prelude.hashWithSalt` gatewayLoadBalancerArns
+      `Prelude.hashWithSalt` managesVpcEndpoints
+      `Prelude.hashWithSalt` networkLoadBalancerArns
+      `Prelude.hashWithSalt` payerResponsibility
+      `Prelude.hashWithSalt` privateDnsName
+      `Prelude.hashWithSalt` privateDnsNameConfiguration
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` serviceState
+      `Prelude.hashWithSalt` serviceType
+      `Prelude.hashWithSalt` supportedIpAddressTypes
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData ServiceConfiguration where
+  rnf ServiceConfiguration' {..} =
+    Prelude.rnf acceptanceRequired
+      `Prelude.seq` Prelude.rnf availabilityZones
+      `Prelude.seq` Prelude.rnf baseEndpointDnsNames
+      `Prelude.seq` Prelude.rnf gatewayLoadBalancerArns
+      `Prelude.seq` Prelude.rnf managesVpcEndpoints
+      `Prelude.seq` Prelude.rnf networkLoadBalancerArns
+      `Prelude.seq` Prelude.rnf payerResponsibility
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf privateDnsNameConfiguration
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf serviceState
+      `Prelude.seq` Prelude.rnf serviceType
+      `Prelude.seq` Prelude.rnf supportedIpAddressTypes
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/ServiceConnectivityType.hs b/gen/Amazonka/EC2/Types/ServiceConnectivityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ServiceConnectivityType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ServiceConnectivityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ServiceConnectivityType
+  ( ServiceConnectivityType
+      ( ..,
+        ServiceConnectivityType_Ipv4,
+        ServiceConnectivityType_Ipv6
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceConnectivityType = ServiceConnectivityType'
+  { fromServiceConnectivityType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ServiceConnectivityType_Ipv4 :: ServiceConnectivityType
+pattern ServiceConnectivityType_Ipv4 = ServiceConnectivityType' "ipv4"
+
+pattern ServiceConnectivityType_Ipv6 :: ServiceConnectivityType
+pattern ServiceConnectivityType_Ipv6 = ServiceConnectivityType' "ipv6"
+
+{-# COMPLETE
+  ServiceConnectivityType_Ipv4,
+  ServiceConnectivityType_Ipv6,
+  ServiceConnectivityType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ServiceDetail.hs b/gen/Amazonka/EC2/Types/ServiceDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ServiceDetail.hs
@@ -0,0 +1,283 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ServiceDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ServiceDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DnsNameState
+import Amazonka.EC2.Types.PayerResponsibility
+import Amazonka.EC2.Types.PrivateDnsDetails
+import Amazonka.EC2.Types.ServiceConnectivityType
+import Amazonka.EC2.Types.ServiceTypeDetail
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC endpoint service.
+--
+-- /See:/ 'newServiceDetail' smart constructor.
+data ServiceDetail = ServiceDetail'
+  { -- | Indicates whether VPC endpoint connection requests to the service must
+    -- be accepted by the service owner.
+    acceptanceRequired :: Prelude.Maybe Prelude.Bool,
+    -- | The Availability Zones in which the service is available.
+    availabilityZones :: Prelude.Maybe [Prelude.Text],
+    -- | The DNS names for the service.
+    baseEndpointDnsNames :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether the service manages its VPC endpoints. Management of
+    -- the service VPC endpoints using the VPC endpoint API is restricted.
+    managesVpcEndpoints :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Web Services account ID of the service owner.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The payer responsibility.
+    payerResponsibility :: Prelude.Maybe PayerResponsibility,
+    -- | The private DNS name for the service.
+    privateDnsName :: Prelude.Maybe Prelude.Text,
+    -- | The verification state of the VPC endpoint service.
+    --
+    -- Consumers of the endpoint service cannot use the private name when the
+    -- state is not @verified@.
+    privateDnsNameVerificationState :: Prelude.Maybe DnsNameState,
+    -- | The private DNS names assigned to the VPC endpoint service.
+    privateDnsNames :: Prelude.Maybe [PrivateDnsDetails],
+    -- | The ID of the endpoint service.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the service.
+    serviceName :: Prelude.Maybe Prelude.Text,
+    -- | The type of service.
+    serviceType :: Prelude.Maybe [ServiceTypeDetail],
+    -- | The supported IP address types.
+    supportedIpAddressTypes :: Prelude.Maybe [ServiceConnectivityType],
+    -- | Any tags assigned to the service.
+    tags :: Prelude.Maybe [Tag],
+    -- | Indicates whether the service supports endpoint policies.
+    vpcEndpointPolicySupported :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceptanceRequired', 'serviceDetail_acceptanceRequired' - Indicates whether VPC endpoint connection requests to the service must
+-- be accepted by the service owner.
+--
+-- 'availabilityZones', 'serviceDetail_availabilityZones' - The Availability Zones in which the service is available.
+--
+-- 'baseEndpointDnsNames', 'serviceDetail_baseEndpointDnsNames' - The DNS names for the service.
+--
+-- 'managesVpcEndpoints', 'serviceDetail_managesVpcEndpoints' - Indicates whether the service manages its VPC endpoints. Management of
+-- the service VPC endpoints using the VPC endpoint API is restricted.
+--
+-- 'owner', 'serviceDetail_owner' - The Amazon Web Services account ID of the service owner.
+--
+-- 'payerResponsibility', 'serviceDetail_payerResponsibility' - The payer responsibility.
+--
+-- 'privateDnsName', 'serviceDetail_privateDnsName' - The private DNS name for the service.
+--
+-- 'privateDnsNameVerificationState', 'serviceDetail_privateDnsNameVerificationState' - The verification state of the VPC endpoint service.
+--
+-- Consumers of the endpoint service cannot use the private name when the
+-- state is not @verified@.
+--
+-- 'privateDnsNames', 'serviceDetail_privateDnsNames' - The private DNS names assigned to the VPC endpoint service.
+--
+-- 'serviceId', 'serviceDetail_serviceId' - The ID of the endpoint service.
+--
+-- 'serviceName', 'serviceDetail_serviceName' - The name of the service.
+--
+-- 'serviceType', 'serviceDetail_serviceType' - The type of service.
+--
+-- 'supportedIpAddressTypes', 'serviceDetail_supportedIpAddressTypes' - The supported IP address types.
+--
+-- 'tags', 'serviceDetail_tags' - Any tags assigned to the service.
+--
+-- 'vpcEndpointPolicySupported', 'serviceDetail_vpcEndpointPolicySupported' - Indicates whether the service supports endpoint policies.
+newServiceDetail ::
+  ServiceDetail
+newServiceDetail =
+  ServiceDetail'
+    { acceptanceRequired =
+        Prelude.Nothing,
+      availabilityZones = Prelude.Nothing,
+      baseEndpointDnsNames = Prelude.Nothing,
+      managesVpcEndpoints = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      payerResponsibility = Prelude.Nothing,
+      privateDnsName = Prelude.Nothing,
+      privateDnsNameVerificationState = Prelude.Nothing,
+      privateDnsNames = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      serviceName = Prelude.Nothing,
+      serviceType = Prelude.Nothing,
+      supportedIpAddressTypes = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcEndpointPolicySupported = Prelude.Nothing
+    }
+
+-- | Indicates whether VPC endpoint connection requests to the service must
+-- be accepted by the service owner.
+serviceDetail_acceptanceRequired :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Bool)
+serviceDetail_acceptanceRequired = Lens.lens (\ServiceDetail' {acceptanceRequired} -> acceptanceRequired) (\s@ServiceDetail' {} a -> s {acceptanceRequired = a} :: ServiceDetail)
+
+-- | The Availability Zones in which the service is available.
+serviceDetail_availabilityZones :: Lens.Lens' ServiceDetail (Prelude.Maybe [Prelude.Text])
+serviceDetail_availabilityZones = Lens.lens (\ServiceDetail' {availabilityZones} -> availabilityZones) (\s@ServiceDetail' {} a -> s {availabilityZones = a} :: ServiceDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The DNS names for the service.
+serviceDetail_baseEndpointDnsNames :: Lens.Lens' ServiceDetail (Prelude.Maybe [Prelude.Text])
+serviceDetail_baseEndpointDnsNames = Lens.lens (\ServiceDetail' {baseEndpointDnsNames} -> baseEndpointDnsNames) (\s@ServiceDetail' {} a -> s {baseEndpointDnsNames = a} :: ServiceDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the service manages its VPC endpoints. Management of
+-- the service VPC endpoints using the VPC endpoint API is restricted.
+serviceDetail_managesVpcEndpoints :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Bool)
+serviceDetail_managesVpcEndpoints = Lens.lens (\ServiceDetail' {managesVpcEndpoints} -> managesVpcEndpoints) (\s@ServiceDetail' {} a -> s {managesVpcEndpoints = a} :: ServiceDetail)
+
+-- | The Amazon Web Services account ID of the service owner.
+serviceDetail_owner :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Text)
+serviceDetail_owner = Lens.lens (\ServiceDetail' {owner} -> owner) (\s@ServiceDetail' {} a -> s {owner = a} :: ServiceDetail)
+
+-- | The payer responsibility.
+serviceDetail_payerResponsibility :: Lens.Lens' ServiceDetail (Prelude.Maybe PayerResponsibility)
+serviceDetail_payerResponsibility = Lens.lens (\ServiceDetail' {payerResponsibility} -> payerResponsibility) (\s@ServiceDetail' {} a -> s {payerResponsibility = a} :: ServiceDetail)
+
+-- | The private DNS name for the service.
+serviceDetail_privateDnsName :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Text)
+serviceDetail_privateDnsName = Lens.lens (\ServiceDetail' {privateDnsName} -> privateDnsName) (\s@ServiceDetail' {} a -> s {privateDnsName = a} :: ServiceDetail)
+
+-- | The verification state of the VPC endpoint service.
+--
+-- Consumers of the endpoint service cannot use the private name when the
+-- state is not @verified@.
+serviceDetail_privateDnsNameVerificationState :: Lens.Lens' ServiceDetail (Prelude.Maybe DnsNameState)
+serviceDetail_privateDnsNameVerificationState = Lens.lens (\ServiceDetail' {privateDnsNameVerificationState} -> privateDnsNameVerificationState) (\s@ServiceDetail' {} a -> s {privateDnsNameVerificationState = a} :: ServiceDetail)
+
+-- | The private DNS names assigned to the VPC endpoint service.
+serviceDetail_privateDnsNames :: Lens.Lens' ServiceDetail (Prelude.Maybe [PrivateDnsDetails])
+serviceDetail_privateDnsNames = Lens.lens (\ServiceDetail' {privateDnsNames} -> privateDnsNames) (\s@ServiceDetail' {} a -> s {privateDnsNames = a} :: ServiceDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the endpoint service.
+serviceDetail_serviceId :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Text)
+serviceDetail_serviceId = Lens.lens (\ServiceDetail' {serviceId} -> serviceId) (\s@ServiceDetail' {} a -> s {serviceId = a} :: ServiceDetail)
+
+-- | The name of the service.
+serviceDetail_serviceName :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Text)
+serviceDetail_serviceName = Lens.lens (\ServiceDetail' {serviceName} -> serviceName) (\s@ServiceDetail' {} a -> s {serviceName = a} :: ServiceDetail)
+
+-- | The type of service.
+serviceDetail_serviceType :: Lens.Lens' ServiceDetail (Prelude.Maybe [ServiceTypeDetail])
+serviceDetail_serviceType = Lens.lens (\ServiceDetail' {serviceType} -> serviceType) (\s@ServiceDetail' {} a -> s {serviceType = a} :: ServiceDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | The supported IP address types.
+serviceDetail_supportedIpAddressTypes :: Lens.Lens' ServiceDetail (Prelude.Maybe [ServiceConnectivityType])
+serviceDetail_supportedIpAddressTypes = Lens.lens (\ServiceDetail' {supportedIpAddressTypes} -> supportedIpAddressTypes) (\s@ServiceDetail' {} a -> s {supportedIpAddressTypes = a} :: ServiceDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any tags assigned to the service.
+serviceDetail_tags :: Lens.Lens' ServiceDetail (Prelude.Maybe [Tag])
+serviceDetail_tags = Lens.lens (\ServiceDetail' {tags} -> tags) (\s@ServiceDetail' {} a -> s {tags = a} :: ServiceDetail) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the service supports endpoint policies.
+serviceDetail_vpcEndpointPolicySupported :: Lens.Lens' ServiceDetail (Prelude.Maybe Prelude.Bool)
+serviceDetail_vpcEndpointPolicySupported = Lens.lens (\ServiceDetail' {vpcEndpointPolicySupported} -> vpcEndpointPolicySupported) (\s@ServiceDetail' {} a -> s {vpcEndpointPolicySupported = a} :: ServiceDetail)
+
+instance Data.FromXML ServiceDetail where
+  parseXML x =
+    ServiceDetail'
+      Prelude.<$> (x Data..@? "acceptanceRequired")
+      Prelude.<*> ( x
+                      Data..@? "availabilityZoneSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "baseEndpointDnsNameSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "managesVpcEndpoints")
+      Prelude.<*> (x Data..@? "owner")
+      Prelude.<*> (x Data..@? "payerResponsibility")
+      Prelude.<*> (x Data..@? "privateDnsName")
+      Prelude.<*> (x Data..@? "privateDnsNameVerificationState")
+      Prelude.<*> ( x
+                      Data..@? "privateDnsNameSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "serviceId")
+      Prelude.<*> (x Data..@? "serviceName")
+      Prelude.<*> ( x
+                      Data..@? "serviceType"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "supportedIpAddressTypeSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcEndpointPolicySupported")
+
+instance Prelude.Hashable ServiceDetail where
+  hashWithSalt _salt ServiceDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceptanceRequired
+      `Prelude.hashWithSalt` availabilityZones
+      `Prelude.hashWithSalt` baseEndpointDnsNames
+      `Prelude.hashWithSalt` managesVpcEndpoints
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` payerResponsibility
+      `Prelude.hashWithSalt` privateDnsName
+      `Prelude.hashWithSalt` privateDnsNameVerificationState
+      `Prelude.hashWithSalt` privateDnsNames
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` serviceType
+      `Prelude.hashWithSalt` supportedIpAddressTypes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcEndpointPolicySupported
+
+instance Prelude.NFData ServiceDetail where
+  rnf ServiceDetail' {..} =
+    Prelude.rnf acceptanceRequired
+      `Prelude.seq` Prelude.rnf availabilityZones
+      `Prelude.seq` Prelude.rnf baseEndpointDnsNames
+      `Prelude.seq` Prelude.rnf managesVpcEndpoints
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf payerResponsibility
+      `Prelude.seq` Prelude.rnf privateDnsName
+      `Prelude.seq` Prelude.rnf privateDnsNameVerificationState
+      `Prelude.seq` Prelude.rnf privateDnsNames
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf serviceType
+      `Prelude.seq` Prelude.rnf supportedIpAddressTypes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcEndpointPolicySupported
diff --git a/gen/Amazonka/EC2/Types/ServiceState.hs b/gen/Amazonka/EC2/Types/ServiceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ServiceState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ServiceState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ServiceState
+  ( ServiceState
+      ( ..,
+        ServiceState_Available,
+        ServiceState_Deleted,
+        ServiceState_Deleting,
+        ServiceState_Failed,
+        ServiceState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceState = ServiceState'
+  { fromServiceState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ServiceState_Available :: ServiceState
+pattern ServiceState_Available = ServiceState' "Available"
+
+pattern ServiceState_Deleted :: ServiceState
+pattern ServiceState_Deleted = ServiceState' "Deleted"
+
+pattern ServiceState_Deleting :: ServiceState
+pattern ServiceState_Deleting = ServiceState' "Deleting"
+
+pattern ServiceState_Failed :: ServiceState
+pattern ServiceState_Failed = ServiceState' "Failed"
+
+pattern ServiceState_Pending :: ServiceState
+pattern ServiceState_Pending = ServiceState' "Pending"
+
+{-# COMPLETE
+  ServiceState_Available,
+  ServiceState_Deleted,
+  ServiceState_Deleting,
+  ServiceState_Failed,
+  ServiceState_Pending,
+  ServiceState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ServiceType.hs b/gen/Amazonka/EC2/Types/ServiceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ServiceType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ServiceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ServiceType
+  ( ServiceType
+      ( ..,
+        ServiceType_Gateway,
+        ServiceType_GatewayLoadBalancer,
+        ServiceType_Interface
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServiceType = ServiceType'
+  { fromServiceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ServiceType_Gateway :: ServiceType
+pattern ServiceType_Gateway = ServiceType' "Gateway"
+
+pattern ServiceType_GatewayLoadBalancer :: ServiceType
+pattern ServiceType_GatewayLoadBalancer = ServiceType' "GatewayLoadBalancer"
+
+pattern ServiceType_Interface :: ServiceType
+pattern ServiceType_Interface = ServiceType' "Interface"
+
+{-# COMPLETE
+  ServiceType_Gateway,
+  ServiceType_GatewayLoadBalancer,
+  ServiceType_Interface,
+  ServiceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/ServiceTypeDetail.hs b/gen/Amazonka/EC2/Types/ServiceTypeDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ServiceTypeDetail.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ServiceTypeDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ServiceTypeDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ServiceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the type of service for a VPC endpoint.
+--
+-- /See:/ 'newServiceTypeDetail' smart constructor.
+data ServiceTypeDetail = ServiceTypeDetail'
+  { -- | The type of service.
+    serviceType :: Prelude.Maybe ServiceType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceTypeDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceType', 'serviceTypeDetail_serviceType' - The type of service.
+newServiceTypeDetail ::
+  ServiceTypeDetail
+newServiceTypeDetail =
+  ServiceTypeDetail' {serviceType = Prelude.Nothing}
+
+-- | The type of service.
+serviceTypeDetail_serviceType :: Lens.Lens' ServiceTypeDetail (Prelude.Maybe ServiceType)
+serviceTypeDetail_serviceType = Lens.lens (\ServiceTypeDetail' {serviceType} -> serviceType) (\s@ServiceTypeDetail' {} a -> s {serviceType = a} :: ServiceTypeDetail)
+
+instance Data.FromXML ServiceTypeDetail where
+  parseXML x =
+    ServiceTypeDetail'
+      Prelude.<$> (x Data..@? "serviceType")
+
+instance Prelude.Hashable ServiceTypeDetail where
+  hashWithSalt _salt ServiceTypeDetail' {..} =
+    _salt `Prelude.hashWithSalt` serviceType
+
+instance Prelude.NFData ServiceTypeDetail where
+  rnf ServiceTypeDetail' {..} = Prelude.rnf serviceType
diff --git a/gen/Amazonka/EC2/Types/ShutdownBehavior.hs b/gen/Amazonka/EC2/Types/ShutdownBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ShutdownBehavior.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ShutdownBehavior
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ShutdownBehavior
+  ( ShutdownBehavior
+      ( ..,
+        ShutdownBehavior_Stop,
+        ShutdownBehavior_Terminate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype ShutdownBehavior = ShutdownBehavior'
+  { fromShutdownBehavior ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ShutdownBehavior_Stop :: ShutdownBehavior
+pattern ShutdownBehavior_Stop = ShutdownBehavior' "stop"
+
+pattern ShutdownBehavior_Terminate :: ShutdownBehavior
+pattern ShutdownBehavior_Terminate = ShutdownBehavior' "terminate"
+
+{-# COMPLETE
+  ShutdownBehavior_Stop,
+  ShutdownBehavior_Terminate,
+  ShutdownBehavior'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SlotDateTimeRangeRequest.hs b/gen/Amazonka/EC2/Types/SlotDateTimeRangeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SlotDateTimeRangeRequest.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SlotDateTimeRangeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SlotDateTimeRangeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the time period for a Scheduled Instance to start its first
+-- schedule. The time period must span less than one day.
+--
+-- /See:/ 'newSlotDateTimeRangeRequest' smart constructor.
+data SlotDateTimeRangeRequest = SlotDateTimeRangeRequest'
+  { -- | The earliest date and time, in UTC, for the Scheduled Instance to start.
+    earliestTime :: Data.ISO8601,
+    -- | The latest date and time, in UTC, for the Scheduled Instance to start.
+    -- This value must be later than or equal to the earliest date and at most
+    -- three months in the future.
+    latestTime :: Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotDateTimeRangeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'earliestTime', 'slotDateTimeRangeRequest_earliestTime' - The earliest date and time, in UTC, for the Scheduled Instance to start.
+--
+-- 'latestTime', 'slotDateTimeRangeRequest_latestTime' - The latest date and time, in UTC, for the Scheduled Instance to start.
+-- This value must be later than or equal to the earliest date and at most
+-- three months in the future.
+newSlotDateTimeRangeRequest ::
+  -- | 'earliestTime'
+  Prelude.UTCTime ->
+  -- | 'latestTime'
+  Prelude.UTCTime ->
+  SlotDateTimeRangeRequest
+newSlotDateTimeRangeRequest
+  pEarliestTime_
+  pLatestTime_ =
+    SlotDateTimeRangeRequest'
+      { earliestTime =
+          Data._Time Lens.# pEarliestTime_,
+        latestTime = Data._Time Lens.# pLatestTime_
+      }
+
+-- | The earliest date and time, in UTC, for the Scheduled Instance to start.
+slotDateTimeRangeRequest_earliestTime :: Lens.Lens' SlotDateTimeRangeRequest Prelude.UTCTime
+slotDateTimeRangeRequest_earliestTime = Lens.lens (\SlotDateTimeRangeRequest' {earliestTime} -> earliestTime) (\s@SlotDateTimeRangeRequest' {} a -> s {earliestTime = a} :: SlotDateTimeRangeRequest) Prelude.. Data._Time
+
+-- | The latest date and time, in UTC, for the Scheduled Instance to start.
+-- This value must be later than or equal to the earliest date and at most
+-- three months in the future.
+slotDateTimeRangeRequest_latestTime :: Lens.Lens' SlotDateTimeRangeRequest Prelude.UTCTime
+slotDateTimeRangeRequest_latestTime = Lens.lens (\SlotDateTimeRangeRequest' {latestTime} -> latestTime) (\s@SlotDateTimeRangeRequest' {} a -> s {latestTime = a} :: SlotDateTimeRangeRequest) Prelude.. Data._Time
+
+instance Prelude.Hashable SlotDateTimeRangeRequest where
+  hashWithSalt _salt SlotDateTimeRangeRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` earliestTime
+      `Prelude.hashWithSalt` latestTime
+
+instance Prelude.NFData SlotDateTimeRangeRequest where
+  rnf SlotDateTimeRangeRequest' {..} =
+    Prelude.rnf earliestTime
+      `Prelude.seq` Prelude.rnf latestTime
+
+instance Data.ToQuery SlotDateTimeRangeRequest where
+  toQuery SlotDateTimeRangeRequest' {..} =
+    Prelude.mconcat
+      [ "EarliestTime" Data.=: earliestTime,
+        "LatestTime" Data.=: latestTime
+      ]
diff --git a/gen/Amazonka/EC2/Types/SlotStartTimeRangeRequest.hs b/gen/Amazonka/EC2/Types/SlotStartTimeRangeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SlotStartTimeRangeRequest.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SlotStartTimeRangeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SlotStartTimeRangeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the time period for a Scheduled Instance to start its first
+-- schedule.
+--
+-- /See:/ 'newSlotStartTimeRangeRequest' smart constructor.
+data SlotStartTimeRangeRequest = SlotStartTimeRangeRequest'
+  { -- | The earliest date and time, in UTC, for the Scheduled Instance to start.
+    earliestTime :: Prelude.Maybe Data.ISO8601,
+    -- | The latest date and time, in UTC, for the Scheduled Instance to start.
+    latestTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SlotStartTimeRangeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'earliestTime', 'slotStartTimeRangeRequest_earliestTime' - The earliest date and time, in UTC, for the Scheduled Instance to start.
+--
+-- 'latestTime', 'slotStartTimeRangeRequest_latestTime' - The latest date and time, in UTC, for the Scheduled Instance to start.
+newSlotStartTimeRangeRequest ::
+  SlotStartTimeRangeRequest
+newSlotStartTimeRangeRequest =
+  SlotStartTimeRangeRequest'
+    { earliestTime =
+        Prelude.Nothing,
+      latestTime = Prelude.Nothing
+    }
+
+-- | The earliest date and time, in UTC, for the Scheduled Instance to start.
+slotStartTimeRangeRequest_earliestTime :: Lens.Lens' SlotStartTimeRangeRequest (Prelude.Maybe Prelude.UTCTime)
+slotStartTimeRangeRequest_earliestTime = Lens.lens (\SlotStartTimeRangeRequest' {earliestTime} -> earliestTime) (\s@SlotStartTimeRangeRequest' {} a -> s {earliestTime = a} :: SlotStartTimeRangeRequest) Prelude.. Lens.mapping Data._Time
+
+-- | The latest date and time, in UTC, for the Scheduled Instance to start.
+slotStartTimeRangeRequest_latestTime :: Lens.Lens' SlotStartTimeRangeRequest (Prelude.Maybe Prelude.UTCTime)
+slotStartTimeRangeRequest_latestTime = Lens.lens (\SlotStartTimeRangeRequest' {latestTime} -> latestTime) (\s@SlotStartTimeRangeRequest' {} a -> s {latestTime = a} :: SlotStartTimeRangeRequest) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable SlotStartTimeRangeRequest where
+  hashWithSalt _salt SlotStartTimeRangeRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` earliestTime
+      `Prelude.hashWithSalt` latestTime
+
+instance Prelude.NFData SlotStartTimeRangeRequest where
+  rnf SlotStartTimeRangeRequest' {..} =
+    Prelude.rnf earliestTime
+      `Prelude.seq` Prelude.rnf latestTime
+
+instance Data.ToQuery SlotStartTimeRangeRequest where
+  toQuery SlotStartTimeRangeRequest' {..} =
+    Prelude.mconcat
+      [ "EarliestTime" Data.=: earliestTime,
+        "LatestTime" Data.=: latestTime
+      ]
diff --git a/gen/Amazonka/EC2/Types/Snapshot.hs b/gen/Amazonka/EC2/Types/Snapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Snapshot.hs
@@ -0,0 +1,370 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Snapshot
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Snapshot where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SnapshotState
+import Amazonka.EC2.Types.StorageTier
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a snapshot.
+--
+-- /See:/ 'newSnapshot' smart constructor.
+data Snapshot = Snapshot'
+  { -- | The data encryption key identifier for the snapshot. This value is a
+    -- unique identifier that corresponds to the data encryption key that was
+    -- used to encrypt the original volume or snapshot copy. Because data
+    -- encryption keys are inherited by volumes created from snapshots, and
+    -- vice versa, if snapshots share the same data encryption key identifier,
+    -- then they belong to the same volume\/snapshot lineage. This parameter is
+    -- only returned by DescribeSnapshots.
+    dataEncryptionKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS
+    -- key that was used to protect the volume encryption key for the parent
+    -- volume.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the Outpost on which the snapshot is stored. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services owner alias, from an Amazon-maintained list
+    -- (@amazon@). This is not the user-configured Amazon Web Services account
+    -- alias set using the IAM console.
+    ownerAlias :: Prelude.Maybe Prelude.Text,
+    -- | Only for archived snapshots that are temporarily restored. Indicates the
+    -- date and time when a temporarily restored snapshot will be automatically
+    -- re-archived.
+    restoreExpiryTime :: Prelude.Maybe Data.ISO8601,
+    -- | Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot
+    -- copy operation fails (for example, if the proper Key Management Service
+    -- (KMS) permissions are not obtained) this field displays error state
+    -- details to help you diagnose why the error occurred. This parameter is
+    -- only returned by DescribeSnapshots.
+    stateMessage :: Prelude.Maybe Prelude.Text,
+    -- | The storage tier in which the snapshot is stored. @standard@ indicates
+    -- that the snapshot is stored in the standard snapshot storage tier and
+    -- that it is ready for use. @archive@ indicates that the snapshot is
+    -- currently archived and that it must be restored before it can be used.
+    storageTier :: Prelude.Maybe StorageTier,
+    -- | Any tags assigned to the snapshot.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the snapshot. Each snapshot receives a unique identifier when
+    -- it is created.
+    snapshotId :: Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the EBS snapshot.
+    ownerId :: Prelude.Text,
+    -- | The ID of the volume that was used to create the snapshot. Snapshots
+    -- created by the CopySnapshot action have an arbitrary volume ID that
+    -- should not be used for any purpose.
+    volumeId :: Prelude.Text,
+    -- | The size of the volume, in GiB.
+    volumeSize :: Prelude.Int,
+    -- | The description for the snapshot.
+    description :: Prelude.Text,
+    -- | The time stamp when the snapshot was initiated.
+    startTime :: Data.ISO8601,
+    -- | The progress of the snapshot, as a percentage.
+    progress :: Prelude.Text,
+    -- | The snapshot state.
+    state :: SnapshotState,
+    -- | Indicates whether the snapshot is encrypted.
+    encrypted :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Snapshot' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataEncryptionKeyId', 'snapshot_dataEncryptionKeyId' - The data encryption key identifier for the snapshot. This value is a
+-- unique identifier that corresponds to the data encryption key that was
+-- used to encrypt the original volume or snapshot copy. Because data
+-- encryption keys are inherited by volumes created from snapshots, and
+-- vice versa, if snapshots share the same data encryption key identifier,
+-- then they belong to the same volume\/snapshot lineage. This parameter is
+-- only returned by DescribeSnapshots.
+--
+-- 'kmsKeyId', 'snapshot_kmsKeyId' - The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS
+-- key that was used to protect the volume encryption key for the parent
+-- volume.
+--
+-- 'outpostArn', 'snapshot_outpostArn' - The ARN of the Outpost on which the snapshot is stored. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'ownerAlias', 'snapshot_ownerAlias' - The Amazon Web Services owner alias, from an Amazon-maintained list
+-- (@amazon@). This is not the user-configured Amazon Web Services account
+-- alias set using the IAM console.
+--
+-- 'restoreExpiryTime', 'snapshot_restoreExpiryTime' - Only for archived snapshots that are temporarily restored. Indicates the
+-- date and time when a temporarily restored snapshot will be automatically
+-- re-archived.
+--
+-- 'stateMessage', 'snapshot_stateMessage' - Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot
+-- copy operation fails (for example, if the proper Key Management Service
+-- (KMS) permissions are not obtained) this field displays error state
+-- details to help you diagnose why the error occurred. This parameter is
+-- only returned by DescribeSnapshots.
+--
+-- 'storageTier', 'snapshot_storageTier' - The storage tier in which the snapshot is stored. @standard@ indicates
+-- that the snapshot is stored in the standard snapshot storage tier and
+-- that it is ready for use. @archive@ indicates that the snapshot is
+-- currently archived and that it must be restored before it can be used.
+--
+-- 'tags', 'snapshot_tags' - Any tags assigned to the snapshot.
+--
+-- 'snapshotId', 'snapshot_snapshotId' - The ID of the snapshot. Each snapshot receives a unique identifier when
+-- it is created.
+--
+-- 'ownerId', 'snapshot_ownerId' - The ID of the Amazon Web Services account that owns the EBS snapshot.
+--
+-- 'volumeId', 'snapshot_volumeId' - The ID of the volume that was used to create the snapshot. Snapshots
+-- created by the CopySnapshot action have an arbitrary volume ID that
+-- should not be used for any purpose.
+--
+-- 'volumeSize', 'snapshot_volumeSize' - The size of the volume, in GiB.
+--
+-- 'description', 'snapshot_description' - The description for the snapshot.
+--
+-- 'startTime', 'snapshot_startTime' - The time stamp when the snapshot was initiated.
+--
+-- 'progress', 'snapshot_progress' - The progress of the snapshot, as a percentage.
+--
+-- 'state', 'snapshot_state' - The snapshot state.
+--
+-- 'encrypted', 'snapshot_encrypted' - Indicates whether the snapshot is encrypted.
+newSnapshot ::
+  -- | 'snapshotId'
+  Prelude.Text ->
+  -- | 'ownerId'
+  Prelude.Text ->
+  -- | 'volumeId'
+  Prelude.Text ->
+  -- | 'volumeSize'
+  Prelude.Int ->
+  -- | 'description'
+  Prelude.Text ->
+  -- | 'startTime'
+  Prelude.UTCTime ->
+  -- | 'progress'
+  Prelude.Text ->
+  -- | 'state'
+  SnapshotState ->
+  -- | 'encrypted'
+  Prelude.Bool ->
+  Snapshot
+newSnapshot
+  pSnapshotId_
+  pOwnerId_
+  pVolumeId_
+  pVolumeSize_
+  pDescription_
+  pStartTime_
+  pProgress_
+  pState_
+  pEncrypted_ =
+    Snapshot'
+      { dataEncryptionKeyId = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        outpostArn = Prelude.Nothing,
+        ownerAlias = Prelude.Nothing,
+        restoreExpiryTime = Prelude.Nothing,
+        stateMessage = Prelude.Nothing,
+        storageTier = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        snapshotId = pSnapshotId_,
+        ownerId = pOwnerId_,
+        volumeId = pVolumeId_,
+        volumeSize = pVolumeSize_,
+        description = pDescription_,
+        startTime = Data._Time Lens.# pStartTime_,
+        progress = pProgress_,
+        state = pState_,
+        encrypted = pEncrypted_
+      }
+
+-- | The data encryption key identifier for the snapshot. This value is a
+-- unique identifier that corresponds to the data encryption key that was
+-- used to encrypt the original volume or snapshot copy. Because data
+-- encryption keys are inherited by volumes created from snapshots, and
+-- vice versa, if snapshots share the same data encryption key identifier,
+-- then they belong to the same volume\/snapshot lineage. This parameter is
+-- only returned by DescribeSnapshots.
+snapshot_dataEncryptionKeyId :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.Text)
+snapshot_dataEncryptionKeyId = Lens.lens (\Snapshot' {dataEncryptionKeyId} -> dataEncryptionKeyId) (\s@Snapshot' {} a -> s {dataEncryptionKeyId = a} :: Snapshot)
+
+-- | The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS
+-- key that was used to protect the volume encryption key for the parent
+-- volume.
+snapshot_kmsKeyId :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.Text)
+snapshot_kmsKeyId = Lens.lens (\Snapshot' {kmsKeyId} -> kmsKeyId) (\s@Snapshot' {} a -> s {kmsKeyId = a} :: Snapshot)
+
+-- | The ARN of the Outpost on which the snapshot is stored. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+snapshot_outpostArn :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.Text)
+snapshot_outpostArn = Lens.lens (\Snapshot' {outpostArn} -> outpostArn) (\s@Snapshot' {} a -> s {outpostArn = a} :: Snapshot)
+
+-- | The Amazon Web Services owner alias, from an Amazon-maintained list
+-- (@amazon@). This is not the user-configured Amazon Web Services account
+-- alias set using the IAM console.
+snapshot_ownerAlias :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.Text)
+snapshot_ownerAlias = Lens.lens (\Snapshot' {ownerAlias} -> ownerAlias) (\s@Snapshot' {} a -> s {ownerAlias = a} :: Snapshot)
+
+-- | Only for archived snapshots that are temporarily restored. Indicates the
+-- date and time when a temporarily restored snapshot will be automatically
+-- re-archived.
+snapshot_restoreExpiryTime :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.UTCTime)
+snapshot_restoreExpiryTime = Lens.lens (\Snapshot' {restoreExpiryTime} -> restoreExpiryTime) (\s@Snapshot' {} a -> s {restoreExpiryTime = a} :: Snapshot) Prelude.. Lens.mapping Data._Time
+
+-- | Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot
+-- copy operation fails (for example, if the proper Key Management Service
+-- (KMS) permissions are not obtained) this field displays error state
+-- details to help you diagnose why the error occurred. This parameter is
+-- only returned by DescribeSnapshots.
+snapshot_stateMessage :: Lens.Lens' Snapshot (Prelude.Maybe Prelude.Text)
+snapshot_stateMessage = Lens.lens (\Snapshot' {stateMessage} -> stateMessage) (\s@Snapshot' {} a -> s {stateMessage = a} :: Snapshot)
+
+-- | The storage tier in which the snapshot is stored. @standard@ indicates
+-- that the snapshot is stored in the standard snapshot storage tier and
+-- that it is ready for use. @archive@ indicates that the snapshot is
+-- currently archived and that it must be restored before it can be used.
+snapshot_storageTier :: Lens.Lens' Snapshot (Prelude.Maybe StorageTier)
+snapshot_storageTier = Lens.lens (\Snapshot' {storageTier} -> storageTier) (\s@Snapshot' {} a -> s {storageTier = a} :: Snapshot)
+
+-- | Any tags assigned to the snapshot.
+snapshot_tags :: Lens.Lens' Snapshot (Prelude.Maybe [Tag])
+snapshot_tags = Lens.lens (\Snapshot' {tags} -> tags) (\s@Snapshot' {} a -> s {tags = a} :: Snapshot) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the snapshot. Each snapshot receives a unique identifier when
+-- it is created.
+snapshot_snapshotId :: Lens.Lens' Snapshot Prelude.Text
+snapshot_snapshotId = Lens.lens (\Snapshot' {snapshotId} -> snapshotId) (\s@Snapshot' {} a -> s {snapshotId = a} :: Snapshot)
+
+-- | The ID of the Amazon Web Services account that owns the EBS snapshot.
+snapshot_ownerId :: Lens.Lens' Snapshot Prelude.Text
+snapshot_ownerId = Lens.lens (\Snapshot' {ownerId} -> ownerId) (\s@Snapshot' {} a -> s {ownerId = a} :: Snapshot)
+
+-- | The ID of the volume that was used to create the snapshot. Snapshots
+-- created by the CopySnapshot action have an arbitrary volume ID that
+-- should not be used for any purpose.
+snapshot_volumeId :: Lens.Lens' Snapshot Prelude.Text
+snapshot_volumeId = Lens.lens (\Snapshot' {volumeId} -> volumeId) (\s@Snapshot' {} a -> s {volumeId = a} :: Snapshot)
+
+-- | The size of the volume, in GiB.
+snapshot_volumeSize :: Lens.Lens' Snapshot Prelude.Int
+snapshot_volumeSize = Lens.lens (\Snapshot' {volumeSize} -> volumeSize) (\s@Snapshot' {} a -> s {volumeSize = a} :: Snapshot)
+
+-- | The description for the snapshot.
+snapshot_description :: Lens.Lens' Snapshot Prelude.Text
+snapshot_description = Lens.lens (\Snapshot' {description} -> description) (\s@Snapshot' {} a -> s {description = a} :: Snapshot)
+
+-- | The time stamp when the snapshot was initiated.
+snapshot_startTime :: Lens.Lens' Snapshot Prelude.UTCTime
+snapshot_startTime = Lens.lens (\Snapshot' {startTime} -> startTime) (\s@Snapshot' {} a -> s {startTime = a} :: Snapshot) Prelude.. Data._Time
+
+-- | The progress of the snapshot, as a percentage.
+snapshot_progress :: Lens.Lens' Snapshot Prelude.Text
+snapshot_progress = Lens.lens (\Snapshot' {progress} -> progress) (\s@Snapshot' {} a -> s {progress = a} :: Snapshot)
+
+-- | The snapshot state.
+snapshot_state :: Lens.Lens' Snapshot SnapshotState
+snapshot_state = Lens.lens (\Snapshot' {state} -> state) (\s@Snapshot' {} a -> s {state = a} :: Snapshot)
+
+-- | Indicates whether the snapshot is encrypted.
+snapshot_encrypted :: Lens.Lens' Snapshot Prelude.Bool
+snapshot_encrypted = Lens.lens (\Snapshot' {encrypted} -> encrypted) (\s@Snapshot' {} a -> s {encrypted = a} :: Snapshot)
+
+instance Data.FromXML Snapshot where
+  parseXML x =
+    Snapshot'
+      Prelude.<$> (x Data..@? "dataEncryptionKeyId")
+      Prelude.<*> (x Data..@? "kmsKeyId")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerAlias")
+      Prelude.<*> (x Data..@? "restoreExpiryTime")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> (x Data..@? "storageTier")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "snapshotId")
+      Prelude.<*> (x Data..@ "ownerId")
+      Prelude.<*> (x Data..@ "volumeId")
+      Prelude.<*> (x Data..@ "volumeSize")
+      Prelude.<*> (x Data..@ "description")
+      Prelude.<*> (x Data..@ "startTime")
+      Prelude.<*> (x Data..@ "progress")
+      Prelude.<*> (x Data..@ "status")
+      Prelude.<*> (x Data..@ "encrypted")
+
+instance Prelude.Hashable Snapshot where
+  hashWithSalt _salt Snapshot' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataEncryptionKeyId
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerAlias
+      `Prelude.hashWithSalt` restoreExpiryTime
+      `Prelude.hashWithSalt` stateMessage
+      `Prelude.hashWithSalt` storageTier
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` volumeId
+      `Prelude.hashWithSalt` volumeSize
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` encrypted
+
+instance Prelude.NFData Snapshot where
+  rnf Snapshot' {..} =
+    Prelude.rnf dataEncryptionKeyId
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerAlias
+      `Prelude.seq` Prelude.rnf restoreExpiryTime
+      `Prelude.seq` Prelude.rnf stateMessage
+      `Prelude.seq` Prelude.rnf storageTier
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf volumeId
+      `Prelude.seq` Prelude.rnf volumeSize
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf encrypted
diff --git a/gen/Amazonka/EC2/Types/SnapshotAttributeName.hs b/gen/Amazonka/EC2/Types/SnapshotAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotAttributeName.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotAttributeName
+  ( SnapshotAttributeName
+      ( ..,
+        SnapshotAttributeName_CreateVolumePermission,
+        SnapshotAttributeName_ProductCodes
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SnapshotAttributeName = SnapshotAttributeName'
+  { fromSnapshotAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SnapshotAttributeName_CreateVolumePermission :: SnapshotAttributeName
+pattern SnapshotAttributeName_CreateVolumePermission = SnapshotAttributeName' "createVolumePermission"
+
+pattern SnapshotAttributeName_ProductCodes :: SnapshotAttributeName
+pattern SnapshotAttributeName_ProductCodes = SnapshotAttributeName' "productCodes"
+
+{-# COMPLETE
+  SnapshotAttributeName_CreateVolumePermission,
+  SnapshotAttributeName_ProductCodes,
+  SnapshotAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SnapshotDetail.hs b/gen/Amazonka/EC2/Types/SnapshotDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotDetail.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UserBucketDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the snapshot created from the imported disk.
+--
+-- /See:/ 'newSnapshotDetail' smart constructor.
+data SnapshotDetail = SnapshotDetail'
+  { -- | A description for the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The block device mapping for the snapshot.
+    deviceName :: Prelude.Maybe Prelude.Text,
+    -- | The size of the disk in the snapshot, in GiB.
+    diskImageSize :: Prelude.Maybe Prelude.Double,
+    -- | The format of the disk image from which the snapshot is created.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of progress for the task.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | The snapshot ID of the disk being imported.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | A brief status of the snapshot creation.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | A detailed status message for the snapshot creation.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The URL used to access the disk image.
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket for the disk image.
+    userBucket :: Prelude.Maybe UserBucketDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'snapshotDetail_description' - A description for the snapshot.
+--
+-- 'deviceName', 'snapshotDetail_deviceName' - The block device mapping for the snapshot.
+--
+-- 'diskImageSize', 'snapshotDetail_diskImageSize' - The size of the disk in the snapshot, in GiB.
+--
+-- 'format', 'snapshotDetail_format' - The format of the disk image from which the snapshot is created.
+--
+-- 'progress', 'snapshotDetail_progress' - The percentage of progress for the task.
+--
+-- 'snapshotId', 'snapshotDetail_snapshotId' - The snapshot ID of the disk being imported.
+--
+-- 'status', 'snapshotDetail_status' - A brief status of the snapshot creation.
+--
+-- 'statusMessage', 'snapshotDetail_statusMessage' - A detailed status message for the snapshot creation.
+--
+-- 'url', 'snapshotDetail_url' - The URL used to access the disk image.
+--
+-- 'userBucket', 'snapshotDetail_userBucket' - The Amazon S3 bucket for the disk image.
+newSnapshotDetail ::
+  SnapshotDetail
+newSnapshotDetail =
+  SnapshotDetail'
+    { description = Prelude.Nothing,
+      deviceName = Prelude.Nothing,
+      diskImageSize = Prelude.Nothing,
+      format = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      url = Prelude.Nothing,
+      userBucket = Prelude.Nothing
+    }
+
+-- | A description for the snapshot.
+snapshotDetail_description :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_description = Lens.lens (\SnapshotDetail' {description} -> description) (\s@SnapshotDetail' {} a -> s {description = a} :: SnapshotDetail)
+
+-- | The block device mapping for the snapshot.
+snapshotDetail_deviceName :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_deviceName = Lens.lens (\SnapshotDetail' {deviceName} -> deviceName) (\s@SnapshotDetail' {} a -> s {deviceName = a} :: SnapshotDetail)
+
+-- | The size of the disk in the snapshot, in GiB.
+snapshotDetail_diskImageSize :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Double)
+snapshotDetail_diskImageSize = Lens.lens (\SnapshotDetail' {diskImageSize} -> diskImageSize) (\s@SnapshotDetail' {} a -> s {diskImageSize = a} :: SnapshotDetail)
+
+-- | The format of the disk image from which the snapshot is created.
+snapshotDetail_format :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_format = Lens.lens (\SnapshotDetail' {format} -> format) (\s@SnapshotDetail' {} a -> s {format = a} :: SnapshotDetail)
+
+-- | The percentage of progress for the task.
+snapshotDetail_progress :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_progress = Lens.lens (\SnapshotDetail' {progress} -> progress) (\s@SnapshotDetail' {} a -> s {progress = a} :: SnapshotDetail)
+
+-- | The snapshot ID of the disk being imported.
+snapshotDetail_snapshotId :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_snapshotId = Lens.lens (\SnapshotDetail' {snapshotId} -> snapshotId) (\s@SnapshotDetail' {} a -> s {snapshotId = a} :: SnapshotDetail)
+
+-- | A brief status of the snapshot creation.
+snapshotDetail_status :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_status = Lens.lens (\SnapshotDetail' {status} -> status) (\s@SnapshotDetail' {} a -> s {status = a} :: SnapshotDetail)
+
+-- | A detailed status message for the snapshot creation.
+snapshotDetail_statusMessage :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_statusMessage = Lens.lens (\SnapshotDetail' {statusMessage} -> statusMessage) (\s@SnapshotDetail' {} a -> s {statusMessage = a} :: SnapshotDetail)
+
+-- | The URL used to access the disk image.
+snapshotDetail_url :: Lens.Lens' SnapshotDetail (Prelude.Maybe Prelude.Text)
+snapshotDetail_url = Lens.lens (\SnapshotDetail' {url} -> url) (\s@SnapshotDetail' {} a -> s {url = a} :: SnapshotDetail)
+
+-- | The Amazon S3 bucket for the disk image.
+snapshotDetail_userBucket :: Lens.Lens' SnapshotDetail (Prelude.Maybe UserBucketDetails)
+snapshotDetail_userBucket = Lens.lens (\SnapshotDetail' {userBucket} -> userBucket) (\s@SnapshotDetail' {} a -> s {userBucket = a} :: SnapshotDetail)
+
+instance Data.FromXML SnapshotDetail where
+  parseXML x =
+    SnapshotDetail'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "deviceName")
+      Prelude.<*> (x Data..@? "diskImageSize")
+      Prelude.<*> (x Data..@? "format")
+      Prelude.<*> (x Data..@? "progress")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> (x Data..@? "url")
+      Prelude.<*> (x Data..@? "userBucket")
+
+instance Prelude.Hashable SnapshotDetail where
+  hashWithSalt _salt SnapshotDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` deviceName
+      `Prelude.hashWithSalt` diskImageSize
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` userBucket
+
+instance Prelude.NFData SnapshotDetail where
+  rnf SnapshotDetail' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceName
+      `Prelude.seq` Prelude.rnf diskImageSize
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf userBucket
diff --git a/gen/Amazonka/EC2/Types/SnapshotDiskContainer.hs b/gen/Amazonka/EC2/Types/SnapshotDiskContainer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotDiskContainer.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotDiskContainer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotDiskContainer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UserBucket
+import qualified Amazonka.Prelude as Prelude
+
+-- | The disk container object for the import snapshot request.
+--
+-- /See:/ 'newSnapshotDiskContainer' smart constructor.
+data SnapshotDiskContainer = SnapshotDiskContainer'
+  { -- | The description of the disk image being imported.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The format of the disk image being imported.
+    --
+    -- Valid values: @VHD@ | @VMDK@ | @RAW@
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The URL to the Amazon S3-based disk image being imported. It can either
+    -- be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..).
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket for the disk image.
+    userBucket :: Prelude.Maybe UserBucket
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotDiskContainer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'snapshotDiskContainer_description' - The description of the disk image being imported.
+--
+-- 'format', 'snapshotDiskContainer_format' - The format of the disk image being imported.
+--
+-- Valid values: @VHD@ | @VMDK@ | @RAW@
+--
+-- 'url', 'snapshotDiskContainer_url' - The URL to the Amazon S3-based disk image being imported. It can either
+-- be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..).
+--
+-- 'userBucket', 'snapshotDiskContainer_userBucket' - The Amazon S3 bucket for the disk image.
+newSnapshotDiskContainer ::
+  SnapshotDiskContainer
+newSnapshotDiskContainer =
+  SnapshotDiskContainer'
+    { description =
+        Prelude.Nothing,
+      format = Prelude.Nothing,
+      url = Prelude.Nothing,
+      userBucket = Prelude.Nothing
+    }
+
+-- | The description of the disk image being imported.
+snapshotDiskContainer_description :: Lens.Lens' SnapshotDiskContainer (Prelude.Maybe Prelude.Text)
+snapshotDiskContainer_description = Lens.lens (\SnapshotDiskContainer' {description} -> description) (\s@SnapshotDiskContainer' {} a -> s {description = a} :: SnapshotDiskContainer)
+
+-- | The format of the disk image being imported.
+--
+-- Valid values: @VHD@ | @VMDK@ | @RAW@
+snapshotDiskContainer_format :: Lens.Lens' SnapshotDiskContainer (Prelude.Maybe Prelude.Text)
+snapshotDiskContainer_format = Lens.lens (\SnapshotDiskContainer' {format} -> format) (\s@SnapshotDiskContainer' {} a -> s {format = a} :: SnapshotDiskContainer)
+
+-- | The URL to the Amazon S3-based disk image being imported. It can either
+-- be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..).
+snapshotDiskContainer_url :: Lens.Lens' SnapshotDiskContainer (Prelude.Maybe Prelude.Text)
+snapshotDiskContainer_url = Lens.lens (\SnapshotDiskContainer' {url} -> url) (\s@SnapshotDiskContainer' {} a -> s {url = a} :: SnapshotDiskContainer)
+
+-- | The Amazon S3 bucket for the disk image.
+snapshotDiskContainer_userBucket :: Lens.Lens' SnapshotDiskContainer (Prelude.Maybe UserBucket)
+snapshotDiskContainer_userBucket = Lens.lens (\SnapshotDiskContainer' {userBucket} -> userBucket) (\s@SnapshotDiskContainer' {} a -> s {userBucket = a} :: SnapshotDiskContainer)
+
+instance Prelude.Hashable SnapshotDiskContainer where
+  hashWithSalt _salt SnapshotDiskContainer' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` userBucket
+
+instance Prelude.NFData SnapshotDiskContainer where
+  rnf SnapshotDiskContainer' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf userBucket
+
+instance Data.ToQuery SnapshotDiskContainer where
+  toQuery SnapshotDiskContainer' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "Format" Data.=: format,
+        "Url" Data.=: url,
+        "UserBucket" Data.=: userBucket
+      ]
diff --git a/gen/Amazonka/EC2/Types/SnapshotInfo.hs b/gen/Amazonka/EC2/Types/SnapshotInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotInfo.hs
@@ -0,0 +1,210 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SnapshotState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a snapshot.
+--
+-- /See:/ 'newSnapshotInfo' smart constructor.
+data SnapshotInfo = SnapshotInfo'
+  { -- | Description specified by the CreateSnapshotRequest that has been applied
+    -- to all snapshots.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the snapshot is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the Outpost on which the snapshot is stored. For more
+    -- information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+    -- in the /Amazon Elastic Compute Cloud User Guide/.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | Account id used when creating this snapshot.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Progress this snapshot has made towards completing.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | Snapshot id that can be used to describe this snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | Time this snapshot was started. This is the same for all snapshots
+    -- initiated by the same request.
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | Current state of the snapshot.
+    state :: Prelude.Maybe SnapshotState,
+    -- | Tags associated with this snapshot.
+    tags :: Prelude.Maybe [Tag],
+    -- | Source volume from which this snapshot was created.
+    volumeId :: Prelude.Maybe Prelude.Text,
+    -- | Size of the volume from which this snapshot was created.
+    volumeSize :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'snapshotInfo_description' - Description specified by the CreateSnapshotRequest that has been applied
+-- to all snapshots.
+--
+-- 'encrypted', 'snapshotInfo_encrypted' - Indicates whether the snapshot is encrypted.
+--
+-- 'outpostArn', 'snapshotInfo_outpostArn' - The ARN of the Outpost on which the snapshot is stored. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- 'ownerId', 'snapshotInfo_ownerId' - Account id used when creating this snapshot.
+--
+-- 'progress', 'snapshotInfo_progress' - Progress this snapshot has made towards completing.
+--
+-- 'snapshotId', 'snapshotInfo_snapshotId' - Snapshot id that can be used to describe this snapshot.
+--
+-- 'startTime', 'snapshotInfo_startTime' - Time this snapshot was started. This is the same for all snapshots
+-- initiated by the same request.
+--
+-- 'state', 'snapshotInfo_state' - Current state of the snapshot.
+--
+-- 'tags', 'snapshotInfo_tags' - Tags associated with this snapshot.
+--
+-- 'volumeId', 'snapshotInfo_volumeId' - Source volume from which this snapshot was created.
+--
+-- 'volumeSize', 'snapshotInfo_volumeSize' - Size of the volume from which this snapshot was created.
+newSnapshotInfo ::
+  SnapshotInfo
+newSnapshotInfo =
+  SnapshotInfo'
+    { description = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      volumeId = Prelude.Nothing,
+      volumeSize = Prelude.Nothing
+    }
+
+-- | Description specified by the CreateSnapshotRequest that has been applied
+-- to all snapshots.
+snapshotInfo_description :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Text)
+snapshotInfo_description = Lens.lens (\SnapshotInfo' {description} -> description) (\s@SnapshotInfo' {} a -> s {description = a} :: SnapshotInfo)
+
+-- | Indicates whether the snapshot is encrypted.
+snapshotInfo_encrypted :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Bool)
+snapshotInfo_encrypted = Lens.lens (\SnapshotInfo' {encrypted} -> encrypted) (\s@SnapshotInfo' {} a -> s {encrypted = a} :: SnapshotInfo)
+
+-- | The ARN of the Outpost on which the snapshot is stored. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html Amazon EBS local snapshots on Outposts>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+snapshotInfo_outpostArn :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Text)
+snapshotInfo_outpostArn = Lens.lens (\SnapshotInfo' {outpostArn} -> outpostArn) (\s@SnapshotInfo' {} a -> s {outpostArn = a} :: SnapshotInfo)
+
+-- | Account id used when creating this snapshot.
+snapshotInfo_ownerId :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Text)
+snapshotInfo_ownerId = Lens.lens (\SnapshotInfo' {ownerId} -> ownerId) (\s@SnapshotInfo' {} a -> s {ownerId = a} :: SnapshotInfo)
+
+-- | Progress this snapshot has made towards completing.
+snapshotInfo_progress :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Text)
+snapshotInfo_progress = Lens.lens (\SnapshotInfo' {progress} -> progress) (\s@SnapshotInfo' {} a -> s {progress = a} :: SnapshotInfo)
+
+-- | Snapshot id that can be used to describe this snapshot.
+snapshotInfo_snapshotId :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Text)
+snapshotInfo_snapshotId = Lens.lens (\SnapshotInfo' {snapshotId} -> snapshotId) (\s@SnapshotInfo' {} a -> s {snapshotId = a} :: SnapshotInfo)
+
+-- | Time this snapshot was started. This is the same for all snapshots
+-- initiated by the same request.
+snapshotInfo_startTime :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.UTCTime)
+snapshotInfo_startTime = Lens.lens (\SnapshotInfo' {startTime} -> startTime) (\s@SnapshotInfo' {} a -> s {startTime = a} :: SnapshotInfo) Prelude.. Lens.mapping Data._Time
+
+-- | Current state of the snapshot.
+snapshotInfo_state :: Lens.Lens' SnapshotInfo (Prelude.Maybe SnapshotState)
+snapshotInfo_state = Lens.lens (\SnapshotInfo' {state} -> state) (\s@SnapshotInfo' {} a -> s {state = a} :: SnapshotInfo)
+
+-- | Tags associated with this snapshot.
+snapshotInfo_tags :: Lens.Lens' SnapshotInfo (Prelude.Maybe [Tag])
+snapshotInfo_tags = Lens.lens (\SnapshotInfo' {tags} -> tags) (\s@SnapshotInfo' {} a -> s {tags = a} :: SnapshotInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | Source volume from which this snapshot was created.
+snapshotInfo_volumeId :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Text)
+snapshotInfo_volumeId = Lens.lens (\SnapshotInfo' {volumeId} -> volumeId) (\s@SnapshotInfo' {} a -> s {volumeId = a} :: SnapshotInfo)
+
+-- | Size of the volume from which this snapshot was created.
+snapshotInfo_volumeSize :: Lens.Lens' SnapshotInfo (Prelude.Maybe Prelude.Int)
+snapshotInfo_volumeSize = Lens.lens (\SnapshotInfo' {volumeSize} -> volumeSize) (\s@SnapshotInfo' {} a -> s {volumeSize = a} :: SnapshotInfo)
+
+instance Data.FromXML SnapshotInfo where
+  parseXML x =
+    SnapshotInfo'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "encrypted")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "progress")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "startTime")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "volumeId")
+      Prelude.<*> (x Data..@? "volumeSize")
+
+instance Prelude.Hashable SnapshotInfo where
+  hashWithSalt _salt SnapshotInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` volumeId
+      `Prelude.hashWithSalt` volumeSize
+
+instance Prelude.NFData SnapshotInfo where
+  rnf SnapshotInfo' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf volumeId
+      `Prelude.seq` Prelude.rnf volumeSize
diff --git a/gen/Amazonka/EC2/Types/SnapshotRecycleBinInfo.hs b/gen/Amazonka/EC2/Types/SnapshotRecycleBinInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotRecycleBinInfo.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotRecycleBinInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotRecycleBinInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a snapshot that is currently in the Recycle Bin.
+--
+-- /See:/ 'newSnapshotRecycleBinInfo' smart constructor.
+data SnapshotRecycleBinInfo = SnapshotRecycleBinInfo'
+  { -- | The description for the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The date and time when the snaphsot entered the Recycle Bin.
+    recycleBinEnterTime :: Prelude.Maybe Data.ISO8601,
+    -- | The date and time when the snapshot is to be permanently deleted from
+    -- the Recycle Bin.
+    recycleBinExitTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the volume from which the snapshot was created.
+    volumeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotRecycleBinInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'snapshotRecycleBinInfo_description' - The description for the snapshot.
+--
+-- 'recycleBinEnterTime', 'snapshotRecycleBinInfo_recycleBinEnterTime' - The date and time when the snaphsot entered the Recycle Bin.
+--
+-- 'recycleBinExitTime', 'snapshotRecycleBinInfo_recycleBinExitTime' - The date and time when the snapshot is to be permanently deleted from
+-- the Recycle Bin.
+--
+-- 'snapshotId', 'snapshotRecycleBinInfo_snapshotId' - The ID of the snapshot.
+--
+-- 'volumeId', 'snapshotRecycleBinInfo_volumeId' - The ID of the volume from which the snapshot was created.
+newSnapshotRecycleBinInfo ::
+  SnapshotRecycleBinInfo
+newSnapshotRecycleBinInfo =
+  SnapshotRecycleBinInfo'
+    { description =
+        Prelude.Nothing,
+      recycleBinEnterTime = Prelude.Nothing,
+      recycleBinExitTime = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      volumeId = Prelude.Nothing
+    }
+
+-- | The description for the snapshot.
+snapshotRecycleBinInfo_description :: Lens.Lens' SnapshotRecycleBinInfo (Prelude.Maybe Prelude.Text)
+snapshotRecycleBinInfo_description = Lens.lens (\SnapshotRecycleBinInfo' {description} -> description) (\s@SnapshotRecycleBinInfo' {} a -> s {description = a} :: SnapshotRecycleBinInfo)
+
+-- | The date and time when the snaphsot entered the Recycle Bin.
+snapshotRecycleBinInfo_recycleBinEnterTime :: Lens.Lens' SnapshotRecycleBinInfo (Prelude.Maybe Prelude.UTCTime)
+snapshotRecycleBinInfo_recycleBinEnterTime = Lens.lens (\SnapshotRecycleBinInfo' {recycleBinEnterTime} -> recycleBinEnterTime) (\s@SnapshotRecycleBinInfo' {} a -> s {recycleBinEnterTime = a} :: SnapshotRecycleBinInfo) Prelude.. Lens.mapping Data._Time
+
+-- | The date and time when the snapshot is to be permanently deleted from
+-- the Recycle Bin.
+snapshotRecycleBinInfo_recycleBinExitTime :: Lens.Lens' SnapshotRecycleBinInfo (Prelude.Maybe Prelude.UTCTime)
+snapshotRecycleBinInfo_recycleBinExitTime = Lens.lens (\SnapshotRecycleBinInfo' {recycleBinExitTime} -> recycleBinExitTime) (\s@SnapshotRecycleBinInfo' {} a -> s {recycleBinExitTime = a} :: SnapshotRecycleBinInfo) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the snapshot.
+snapshotRecycleBinInfo_snapshotId :: Lens.Lens' SnapshotRecycleBinInfo (Prelude.Maybe Prelude.Text)
+snapshotRecycleBinInfo_snapshotId = Lens.lens (\SnapshotRecycleBinInfo' {snapshotId} -> snapshotId) (\s@SnapshotRecycleBinInfo' {} a -> s {snapshotId = a} :: SnapshotRecycleBinInfo)
+
+-- | The ID of the volume from which the snapshot was created.
+snapshotRecycleBinInfo_volumeId :: Lens.Lens' SnapshotRecycleBinInfo (Prelude.Maybe Prelude.Text)
+snapshotRecycleBinInfo_volumeId = Lens.lens (\SnapshotRecycleBinInfo' {volumeId} -> volumeId) (\s@SnapshotRecycleBinInfo' {} a -> s {volumeId = a} :: SnapshotRecycleBinInfo)
+
+instance Data.FromXML SnapshotRecycleBinInfo where
+  parseXML x =
+    SnapshotRecycleBinInfo'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "recycleBinEnterTime")
+      Prelude.<*> (x Data..@? "recycleBinExitTime")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "volumeId")
+
+instance Prelude.Hashable SnapshotRecycleBinInfo where
+  hashWithSalt _salt SnapshotRecycleBinInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` recycleBinEnterTime
+      `Prelude.hashWithSalt` recycleBinExitTime
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData SnapshotRecycleBinInfo where
+  rnf SnapshotRecycleBinInfo' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf recycleBinEnterTime
+      `Prelude.seq` Prelude.rnf recycleBinExitTime
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf volumeId
diff --git a/gen/Amazonka/EC2/Types/SnapshotState.hs b/gen/Amazonka/EC2/Types/SnapshotState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotState
+  ( SnapshotState
+      ( ..,
+        SnapshotState_Completed,
+        SnapshotState_Error,
+        SnapshotState_Pending,
+        SnapshotState_Recoverable,
+        SnapshotState_Recovering
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SnapshotState = SnapshotState'
+  { fromSnapshotState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SnapshotState_Completed :: SnapshotState
+pattern SnapshotState_Completed = SnapshotState' "completed"
+
+pattern SnapshotState_Error :: SnapshotState
+pattern SnapshotState_Error = SnapshotState' "error"
+
+pattern SnapshotState_Pending :: SnapshotState
+pattern SnapshotState_Pending = SnapshotState' "pending"
+
+pattern SnapshotState_Recoverable :: SnapshotState
+pattern SnapshotState_Recoverable = SnapshotState' "recoverable"
+
+pattern SnapshotState_Recovering :: SnapshotState
+pattern SnapshotState_Recovering = SnapshotState' "recovering"
+
+{-# COMPLETE
+  SnapshotState_Completed,
+  SnapshotState_Error,
+  SnapshotState_Pending,
+  SnapshotState_Recoverable,
+  SnapshotState_Recovering,
+  SnapshotState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SnapshotTaskDetail.hs b/gen/Amazonka/EC2/Types/SnapshotTaskDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotTaskDetail.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotTaskDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotTaskDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UserBucketDetails
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the import snapshot task.
+--
+-- /See:/ 'newSnapshotTaskDetail' smart constructor.
+data SnapshotTaskDetail = SnapshotTaskDetail'
+  { -- | The description of the snapshot.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The size of the disk in the snapshot, in GiB.
+    diskImageSize :: Prelude.Maybe Prelude.Double,
+    -- | Indicates whether the snapshot is encrypted.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The format of the disk image from which the snapshot is created.
+    format :: Prelude.Maybe Prelude.Text,
+    -- | The identifier for the KMS key that was used to create the encrypted
+    -- snapshot.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of completion for the import snapshot task.
+    progress :: Prelude.Maybe Prelude.Text,
+    -- | The snapshot ID of the disk being imported.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | A brief status for the import snapshot task.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | A detailed status message for the import snapshot task.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The URL of the disk image from which the snapshot is created.
+    url :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket for the disk image.
+    userBucket :: Prelude.Maybe UserBucketDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotTaskDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'snapshotTaskDetail_description' - The description of the snapshot.
+--
+-- 'diskImageSize', 'snapshotTaskDetail_diskImageSize' - The size of the disk in the snapshot, in GiB.
+--
+-- 'encrypted', 'snapshotTaskDetail_encrypted' - Indicates whether the snapshot is encrypted.
+--
+-- 'format', 'snapshotTaskDetail_format' - The format of the disk image from which the snapshot is created.
+--
+-- 'kmsKeyId', 'snapshotTaskDetail_kmsKeyId' - The identifier for the KMS key that was used to create the encrypted
+-- snapshot.
+--
+-- 'progress', 'snapshotTaskDetail_progress' - The percentage of completion for the import snapshot task.
+--
+-- 'snapshotId', 'snapshotTaskDetail_snapshotId' - The snapshot ID of the disk being imported.
+--
+-- 'status', 'snapshotTaskDetail_status' - A brief status for the import snapshot task.
+--
+-- 'statusMessage', 'snapshotTaskDetail_statusMessage' - A detailed status message for the import snapshot task.
+--
+-- 'url', 'snapshotTaskDetail_url' - The URL of the disk image from which the snapshot is created.
+--
+-- 'userBucket', 'snapshotTaskDetail_userBucket' - The Amazon S3 bucket for the disk image.
+newSnapshotTaskDetail ::
+  SnapshotTaskDetail
+newSnapshotTaskDetail =
+  SnapshotTaskDetail'
+    { description = Prelude.Nothing,
+      diskImageSize = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      format = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      url = Prelude.Nothing,
+      userBucket = Prelude.Nothing
+    }
+
+-- | The description of the snapshot.
+snapshotTaskDetail_description :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_description = Lens.lens (\SnapshotTaskDetail' {description} -> description) (\s@SnapshotTaskDetail' {} a -> s {description = a} :: SnapshotTaskDetail)
+
+-- | The size of the disk in the snapshot, in GiB.
+snapshotTaskDetail_diskImageSize :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Double)
+snapshotTaskDetail_diskImageSize = Lens.lens (\SnapshotTaskDetail' {diskImageSize} -> diskImageSize) (\s@SnapshotTaskDetail' {} a -> s {diskImageSize = a} :: SnapshotTaskDetail)
+
+-- | Indicates whether the snapshot is encrypted.
+snapshotTaskDetail_encrypted :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Bool)
+snapshotTaskDetail_encrypted = Lens.lens (\SnapshotTaskDetail' {encrypted} -> encrypted) (\s@SnapshotTaskDetail' {} a -> s {encrypted = a} :: SnapshotTaskDetail)
+
+-- | The format of the disk image from which the snapshot is created.
+snapshotTaskDetail_format :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_format = Lens.lens (\SnapshotTaskDetail' {format} -> format) (\s@SnapshotTaskDetail' {} a -> s {format = a} :: SnapshotTaskDetail)
+
+-- | The identifier for the KMS key that was used to create the encrypted
+-- snapshot.
+snapshotTaskDetail_kmsKeyId :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_kmsKeyId = Lens.lens (\SnapshotTaskDetail' {kmsKeyId} -> kmsKeyId) (\s@SnapshotTaskDetail' {} a -> s {kmsKeyId = a} :: SnapshotTaskDetail)
+
+-- | The percentage of completion for the import snapshot task.
+snapshotTaskDetail_progress :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_progress = Lens.lens (\SnapshotTaskDetail' {progress} -> progress) (\s@SnapshotTaskDetail' {} a -> s {progress = a} :: SnapshotTaskDetail)
+
+-- | The snapshot ID of the disk being imported.
+snapshotTaskDetail_snapshotId :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_snapshotId = Lens.lens (\SnapshotTaskDetail' {snapshotId} -> snapshotId) (\s@SnapshotTaskDetail' {} a -> s {snapshotId = a} :: SnapshotTaskDetail)
+
+-- | A brief status for the import snapshot task.
+snapshotTaskDetail_status :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_status = Lens.lens (\SnapshotTaskDetail' {status} -> status) (\s@SnapshotTaskDetail' {} a -> s {status = a} :: SnapshotTaskDetail)
+
+-- | A detailed status message for the import snapshot task.
+snapshotTaskDetail_statusMessage :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_statusMessage = Lens.lens (\SnapshotTaskDetail' {statusMessage} -> statusMessage) (\s@SnapshotTaskDetail' {} a -> s {statusMessage = a} :: SnapshotTaskDetail)
+
+-- | The URL of the disk image from which the snapshot is created.
+snapshotTaskDetail_url :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe Prelude.Text)
+snapshotTaskDetail_url = Lens.lens (\SnapshotTaskDetail' {url} -> url) (\s@SnapshotTaskDetail' {} a -> s {url = a} :: SnapshotTaskDetail)
+
+-- | The Amazon S3 bucket for the disk image.
+snapshotTaskDetail_userBucket :: Lens.Lens' SnapshotTaskDetail (Prelude.Maybe UserBucketDetails)
+snapshotTaskDetail_userBucket = Lens.lens (\SnapshotTaskDetail' {userBucket} -> userBucket) (\s@SnapshotTaskDetail' {} a -> s {userBucket = a} :: SnapshotTaskDetail)
+
+instance Data.FromXML SnapshotTaskDetail where
+  parseXML x =
+    SnapshotTaskDetail'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "diskImageSize")
+      Prelude.<*> (x Data..@? "encrypted")
+      Prelude.<*> (x Data..@? "format")
+      Prelude.<*> (x Data..@? "kmsKeyId")
+      Prelude.<*> (x Data..@? "progress")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> (x Data..@? "url")
+      Prelude.<*> (x Data..@? "userBucket")
+
+instance Prelude.Hashable SnapshotTaskDetail where
+  hashWithSalt _salt SnapshotTaskDetail' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` diskImageSize
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` format
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` url
+      `Prelude.hashWithSalt` userBucket
+
+instance Prelude.NFData SnapshotTaskDetail where
+  rnf SnapshotTaskDetail' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf diskImageSize
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf format
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf url
+      `Prelude.seq` Prelude.rnf userBucket
diff --git a/gen/Amazonka/EC2/Types/SnapshotTierStatus.hs b/gen/Amazonka/EC2/Types/SnapshotTierStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SnapshotTierStatus.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SnapshotTierStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SnapshotTierStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SnapshotState
+import Amazonka.EC2.Types.StorageTier
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TieringOperationStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Provides information about a snapshot\'s storage tier.
+--
+-- /See:/ 'newSnapshotTierStatus' smart constructor.
+data SnapshotTierStatus = SnapshotTierStatus'
+  { -- | The date and time when the last archive process was completed.
+    archivalCompleteTime :: Prelude.Maybe Data.ISO8601,
+    -- | The status of the last archive or restore process.
+    lastTieringOperationStatus :: Prelude.Maybe TieringOperationStatus,
+    -- | A message describing the status of the last archive or restore process.
+    lastTieringOperationStatusDetail :: Prelude.Maybe Prelude.Text,
+    -- | The progress of the last archive or restore process, as a percentage.
+    lastTieringProgress :: Prelude.Maybe Prelude.Int,
+    -- | The date and time when the last archive or restore process was started.
+    lastTieringStartTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the Amazon Web Services account that owns the snapshot.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Only for archived snapshots that are temporarily restored. Indicates the
+    -- date and time when a temporarily restored snapshot will be automatically
+    -- re-archived.
+    restoreExpiryTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the snapshot.
+    snapshotId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the snapshot.
+    status :: Prelude.Maybe SnapshotState,
+    -- | The storage tier in which the snapshot is stored. @standard@ indicates
+    -- that the snapshot is stored in the standard snapshot storage tier and
+    -- that it is ready for use. @archive@ indicates that the snapshot is
+    -- currently archived and that it must be restored before it can be used.
+    storageTier :: Prelude.Maybe StorageTier,
+    -- | The tags that are assigned to the snapshot.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the volume from which the snapshot was created.
+    volumeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnapshotTierStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'archivalCompleteTime', 'snapshotTierStatus_archivalCompleteTime' - The date and time when the last archive process was completed.
+--
+-- 'lastTieringOperationStatus', 'snapshotTierStatus_lastTieringOperationStatus' - The status of the last archive or restore process.
+--
+-- 'lastTieringOperationStatusDetail', 'snapshotTierStatus_lastTieringOperationStatusDetail' - A message describing the status of the last archive or restore process.
+--
+-- 'lastTieringProgress', 'snapshotTierStatus_lastTieringProgress' - The progress of the last archive or restore process, as a percentage.
+--
+-- 'lastTieringStartTime', 'snapshotTierStatus_lastTieringStartTime' - The date and time when the last archive or restore process was started.
+--
+-- 'ownerId', 'snapshotTierStatus_ownerId' - The ID of the Amazon Web Services account that owns the snapshot.
+--
+-- 'restoreExpiryTime', 'snapshotTierStatus_restoreExpiryTime' - Only for archived snapshots that are temporarily restored. Indicates the
+-- date and time when a temporarily restored snapshot will be automatically
+-- re-archived.
+--
+-- 'snapshotId', 'snapshotTierStatus_snapshotId' - The ID of the snapshot.
+--
+-- 'status', 'snapshotTierStatus_status' - The state of the snapshot.
+--
+-- 'storageTier', 'snapshotTierStatus_storageTier' - The storage tier in which the snapshot is stored. @standard@ indicates
+-- that the snapshot is stored in the standard snapshot storage tier and
+-- that it is ready for use. @archive@ indicates that the snapshot is
+-- currently archived and that it must be restored before it can be used.
+--
+-- 'tags', 'snapshotTierStatus_tags' - The tags that are assigned to the snapshot.
+--
+-- 'volumeId', 'snapshotTierStatus_volumeId' - The ID of the volume from which the snapshot was created.
+newSnapshotTierStatus ::
+  SnapshotTierStatus
+newSnapshotTierStatus =
+  SnapshotTierStatus'
+    { archivalCompleteTime =
+        Prelude.Nothing,
+      lastTieringOperationStatus = Prelude.Nothing,
+      lastTieringOperationStatusDetail = Prelude.Nothing,
+      lastTieringProgress = Prelude.Nothing,
+      lastTieringStartTime = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      restoreExpiryTime = Prelude.Nothing,
+      snapshotId = Prelude.Nothing,
+      status = Prelude.Nothing,
+      storageTier = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      volumeId = Prelude.Nothing
+    }
+
+-- | The date and time when the last archive process was completed.
+snapshotTierStatus_archivalCompleteTime :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.UTCTime)
+snapshotTierStatus_archivalCompleteTime = Lens.lens (\SnapshotTierStatus' {archivalCompleteTime} -> archivalCompleteTime) (\s@SnapshotTierStatus' {} a -> s {archivalCompleteTime = a} :: SnapshotTierStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the last archive or restore process.
+snapshotTierStatus_lastTieringOperationStatus :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe TieringOperationStatus)
+snapshotTierStatus_lastTieringOperationStatus = Lens.lens (\SnapshotTierStatus' {lastTieringOperationStatus} -> lastTieringOperationStatus) (\s@SnapshotTierStatus' {} a -> s {lastTieringOperationStatus = a} :: SnapshotTierStatus)
+
+-- | A message describing the status of the last archive or restore process.
+snapshotTierStatus_lastTieringOperationStatusDetail :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.Text)
+snapshotTierStatus_lastTieringOperationStatusDetail = Lens.lens (\SnapshotTierStatus' {lastTieringOperationStatusDetail} -> lastTieringOperationStatusDetail) (\s@SnapshotTierStatus' {} a -> s {lastTieringOperationStatusDetail = a} :: SnapshotTierStatus)
+
+-- | The progress of the last archive or restore process, as a percentage.
+snapshotTierStatus_lastTieringProgress :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.Int)
+snapshotTierStatus_lastTieringProgress = Lens.lens (\SnapshotTierStatus' {lastTieringProgress} -> lastTieringProgress) (\s@SnapshotTierStatus' {} a -> s {lastTieringProgress = a} :: SnapshotTierStatus)
+
+-- | The date and time when the last archive or restore process was started.
+snapshotTierStatus_lastTieringStartTime :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.UTCTime)
+snapshotTierStatus_lastTieringStartTime = Lens.lens (\SnapshotTierStatus' {lastTieringStartTime} -> lastTieringStartTime) (\s@SnapshotTierStatus' {} a -> s {lastTieringStartTime = a} :: SnapshotTierStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the Amazon Web Services account that owns the snapshot.
+snapshotTierStatus_ownerId :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.Text)
+snapshotTierStatus_ownerId = Lens.lens (\SnapshotTierStatus' {ownerId} -> ownerId) (\s@SnapshotTierStatus' {} a -> s {ownerId = a} :: SnapshotTierStatus)
+
+-- | Only for archived snapshots that are temporarily restored. Indicates the
+-- date and time when a temporarily restored snapshot will be automatically
+-- re-archived.
+snapshotTierStatus_restoreExpiryTime :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.UTCTime)
+snapshotTierStatus_restoreExpiryTime = Lens.lens (\SnapshotTierStatus' {restoreExpiryTime} -> restoreExpiryTime) (\s@SnapshotTierStatus' {} a -> s {restoreExpiryTime = a} :: SnapshotTierStatus) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the snapshot.
+snapshotTierStatus_snapshotId :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.Text)
+snapshotTierStatus_snapshotId = Lens.lens (\SnapshotTierStatus' {snapshotId} -> snapshotId) (\s@SnapshotTierStatus' {} a -> s {snapshotId = a} :: SnapshotTierStatus)
+
+-- | The state of the snapshot.
+snapshotTierStatus_status :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe SnapshotState)
+snapshotTierStatus_status = Lens.lens (\SnapshotTierStatus' {status} -> status) (\s@SnapshotTierStatus' {} a -> s {status = a} :: SnapshotTierStatus)
+
+-- | The storage tier in which the snapshot is stored. @standard@ indicates
+-- that the snapshot is stored in the standard snapshot storage tier and
+-- that it is ready for use. @archive@ indicates that the snapshot is
+-- currently archived and that it must be restored before it can be used.
+snapshotTierStatus_storageTier :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe StorageTier)
+snapshotTierStatus_storageTier = Lens.lens (\SnapshotTierStatus' {storageTier} -> storageTier) (\s@SnapshotTierStatus' {} a -> s {storageTier = a} :: SnapshotTierStatus)
+
+-- | The tags that are assigned to the snapshot.
+snapshotTierStatus_tags :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe [Tag])
+snapshotTierStatus_tags = Lens.lens (\SnapshotTierStatus' {tags} -> tags) (\s@SnapshotTierStatus' {} a -> s {tags = a} :: SnapshotTierStatus) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the volume from which the snapshot was created.
+snapshotTierStatus_volumeId :: Lens.Lens' SnapshotTierStatus (Prelude.Maybe Prelude.Text)
+snapshotTierStatus_volumeId = Lens.lens (\SnapshotTierStatus' {volumeId} -> volumeId) (\s@SnapshotTierStatus' {} a -> s {volumeId = a} :: SnapshotTierStatus)
+
+instance Data.FromXML SnapshotTierStatus where
+  parseXML x =
+    SnapshotTierStatus'
+      Prelude.<$> (x Data..@? "archivalCompleteTime")
+      Prelude.<*> (x Data..@? "lastTieringOperationStatus")
+      Prelude.<*> (x Data..@? "lastTieringOperationStatusDetail")
+      Prelude.<*> (x Data..@? "lastTieringProgress")
+      Prelude.<*> (x Data..@? "lastTieringStartTime")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "restoreExpiryTime")
+      Prelude.<*> (x Data..@? "snapshotId")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "storageTier")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "volumeId")
+
+instance Prelude.Hashable SnapshotTierStatus where
+  hashWithSalt _salt SnapshotTierStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` archivalCompleteTime
+      `Prelude.hashWithSalt` lastTieringOperationStatus
+      `Prelude.hashWithSalt` lastTieringOperationStatusDetail
+      `Prelude.hashWithSalt` lastTieringProgress
+      `Prelude.hashWithSalt` lastTieringStartTime
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` restoreExpiryTime
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` storageTier
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData SnapshotTierStatus where
+  rnf SnapshotTierStatus' {..} =
+    Prelude.rnf archivalCompleteTime
+      `Prelude.seq` Prelude.rnf lastTieringOperationStatus
+      `Prelude.seq` Prelude.rnf lastTieringOperationStatusDetail
+      `Prelude.seq` Prelude.rnf lastTieringProgress
+      `Prelude.seq` Prelude.rnf lastTieringStartTime
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf restoreExpiryTime
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf storageTier
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf volumeId
diff --git a/gen/Amazonka/EC2/Types/SpotAllocationStrategy.hs b/gen/Amazonka/EC2/Types/SpotAllocationStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotAllocationStrategy.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotAllocationStrategy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotAllocationStrategy
+  ( SpotAllocationStrategy
+      ( ..,
+        SpotAllocationStrategy_Capacity_optimized,
+        SpotAllocationStrategy_Capacity_optimized_prioritized,
+        SpotAllocationStrategy_Diversified,
+        SpotAllocationStrategy_Lowest_price,
+        SpotAllocationStrategy_Price_capacity_optimized
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SpotAllocationStrategy = SpotAllocationStrategy'
+  { fromSpotAllocationStrategy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SpotAllocationStrategy_Capacity_optimized :: SpotAllocationStrategy
+pattern SpotAllocationStrategy_Capacity_optimized = SpotAllocationStrategy' "capacity-optimized"
+
+pattern SpotAllocationStrategy_Capacity_optimized_prioritized :: SpotAllocationStrategy
+pattern SpotAllocationStrategy_Capacity_optimized_prioritized = SpotAllocationStrategy' "capacity-optimized-prioritized"
+
+pattern SpotAllocationStrategy_Diversified :: SpotAllocationStrategy
+pattern SpotAllocationStrategy_Diversified = SpotAllocationStrategy' "diversified"
+
+pattern SpotAllocationStrategy_Lowest_price :: SpotAllocationStrategy
+pattern SpotAllocationStrategy_Lowest_price = SpotAllocationStrategy' "lowest-price"
+
+pattern SpotAllocationStrategy_Price_capacity_optimized :: SpotAllocationStrategy
+pattern SpotAllocationStrategy_Price_capacity_optimized = SpotAllocationStrategy' "price-capacity-optimized"
+
+{-# COMPLETE
+  SpotAllocationStrategy_Capacity_optimized,
+  SpotAllocationStrategy_Capacity_optimized_prioritized,
+  SpotAllocationStrategy_Diversified,
+  SpotAllocationStrategy_Lowest_price,
+  SpotAllocationStrategy_Price_capacity_optimized,
+  SpotAllocationStrategy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SpotCapacityRebalance.hs b/gen/Amazonka/EC2/Types/SpotCapacityRebalance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotCapacityRebalance.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotCapacityRebalance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotCapacityRebalance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReplacementStrategy
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Spot Instance replacement strategy to use when Amazon EC2 emits a
+-- signal that your Spot Instance is at an elevated risk of being
+-- interrupted. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html Capacity rebalancing>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- /See:/ 'newSpotCapacityRebalance' smart constructor.
+data SpotCapacityRebalance = SpotCapacityRebalance'
+  { -- | The replacement strategy to use. Only available for fleets of type
+    -- @maintain@.
+    --
+    -- @launch@ - Spot Fleet launches a new replacement Spot Instance when a
+    -- rebalance notification is emitted for an existing Spot Instance in the
+    -- fleet. Spot Fleet does not terminate the instances that receive a
+    -- rebalance notification. You can terminate the old instances, or you can
+    -- leave them running. You are charged for all instances while they are
+    -- running.
+    --
+    -- @launch-before-terminate@ - Spot Fleet launches a new replacement Spot
+    -- Instance when a rebalance notification is emitted for an existing Spot
+    -- Instance in the fleet, and then, after a delay that you specify (in
+    -- @TerminationDelay@), terminates the instances that received a rebalance
+    -- notification.
+    replacementStrategy :: Prelude.Maybe ReplacementStrategy,
+    -- | The amount of time (in seconds) that Amazon EC2 waits before terminating
+    -- the old Spot Instance after launching a new replacement Spot Instance.
+    --
+    -- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+    --
+    -- Not valid when @ReplacementStrategy@ is set to @launch@.
+    --
+    -- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+    -- seconds.
+    terminationDelay :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotCapacityRebalance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replacementStrategy', 'spotCapacityRebalance_replacementStrategy' - The replacement strategy to use. Only available for fleets of type
+-- @maintain@.
+--
+-- @launch@ - Spot Fleet launches a new replacement Spot Instance when a
+-- rebalance notification is emitted for an existing Spot Instance in the
+-- fleet. Spot Fleet does not terminate the instances that receive a
+-- rebalance notification. You can terminate the old instances, or you can
+-- leave them running. You are charged for all instances while they are
+-- running.
+--
+-- @launch-before-terminate@ - Spot Fleet launches a new replacement Spot
+-- Instance when a rebalance notification is emitted for an existing Spot
+-- Instance in the fleet, and then, after a delay that you specify (in
+-- @TerminationDelay@), terminates the instances that received a rebalance
+-- notification.
+--
+-- 'terminationDelay', 'spotCapacityRebalance_terminationDelay' - The amount of time (in seconds) that Amazon EC2 waits before terminating
+-- the old Spot Instance after launching a new replacement Spot Instance.
+--
+-- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+--
+-- Not valid when @ReplacementStrategy@ is set to @launch@.
+--
+-- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+-- seconds.
+newSpotCapacityRebalance ::
+  SpotCapacityRebalance
+newSpotCapacityRebalance =
+  SpotCapacityRebalance'
+    { replacementStrategy =
+        Prelude.Nothing,
+      terminationDelay = Prelude.Nothing
+    }
+
+-- | The replacement strategy to use. Only available for fleets of type
+-- @maintain@.
+--
+-- @launch@ - Spot Fleet launches a new replacement Spot Instance when a
+-- rebalance notification is emitted for an existing Spot Instance in the
+-- fleet. Spot Fleet does not terminate the instances that receive a
+-- rebalance notification. You can terminate the old instances, or you can
+-- leave them running. You are charged for all instances while they are
+-- running.
+--
+-- @launch-before-terminate@ - Spot Fleet launches a new replacement Spot
+-- Instance when a rebalance notification is emitted for an existing Spot
+-- Instance in the fleet, and then, after a delay that you specify (in
+-- @TerminationDelay@), terminates the instances that received a rebalance
+-- notification.
+spotCapacityRebalance_replacementStrategy :: Lens.Lens' SpotCapacityRebalance (Prelude.Maybe ReplacementStrategy)
+spotCapacityRebalance_replacementStrategy = Lens.lens (\SpotCapacityRebalance' {replacementStrategy} -> replacementStrategy) (\s@SpotCapacityRebalance' {} a -> s {replacementStrategy = a} :: SpotCapacityRebalance)
+
+-- | The amount of time (in seconds) that Amazon EC2 waits before terminating
+-- the old Spot Instance after launching a new replacement Spot Instance.
+--
+-- Required when @ReplacementStrategy@ is set to @launch-before-terminate@.
+--
+-- Not valid when @ReplacementStrategy@ is set to @launch@.
+--
+-- Valid values: Minimum value of @120@ seconds. Maximum value of @7200@
+-- seconds.
+spotCapacityRebalance_terminationDelay :: Lens.Lens' SpotCapacityRebalance (Prelude.Maybe Prelude.Int)
+spotCapacityRebalance_terminationDelay = Lens.lens (\SpotCapacityRebalance' {terminationDelay} -> terminationDelay) (\s@SpotCapacityRebalance' {} a -> s {terminationDelay = a} :: SpotCapacityRebalance)
+
+instance Data.FromXML SpotCapacityRebalance where
+  parseXML x =
+    SpotCapacityRebalance'
+      Prelude.<$> (x Data..@? "replacementStrategy")
+      Prelude.<*> (x Data..@? "terminationDelay")
+
+instance Prelude.Hashable SpotCapacityRebalance where
+  hashWithSalt _salt SpotCapacityRebalance' {..} =
+    _salt
+      `Prelude.hashWithSalt` replacementStrategy
+      `Prelude.hashWithSalt` terminationDelay
+
+instance Prelude.NFData SpotCapacityRebalance where
+  rnf SpotCapacityRebalance' {..} =
+    Prelude.rnf replacementStrategy
+      `Prelude.seq` Prelude.rnf terminationDelay
+
+instance Data.ToQuery SpotCapacityRebalance where
+  toQuery SpotCapacityRebalance' {..} =
+    Prelude.mconcat
+      [ "ReplacementStrategy" Data.=: replacementStrategy,
+        "TerminationDelay" Data.=: terminationDelay
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotDatafeedSubscription.hs b/gen/Amazonka/EC2/Types/SpotDatafeedSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotDatafeedSubscription.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotDatafeedSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotDatafeedSubscription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DatafeedSubscriptionState
+import Amazonka.EC2.Types.SpotInstanceStateFault
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the data feed for a Spot Instance.
+--
+-- /See:/ 'newSpotDatafeedSubscription' smart constructor.
+data SpotDatafeedSubscription = SpotDatafeedSubscription'
+  { -- | The name of the Amazon S3 bucket where the Spot Instance data feed is
+    -- located.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The fault codes for the Spot Instance request, if any.
+    fault :: Prelude.Maybe SpotInstanceStateFault,
+    -- | The Amazon Web Services account ID of the account.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The prefix for the data feed files.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Spot Instance data feed subscription.
+    state :: Prelude.Maybe DatafeedSubscriptionState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotDatafeedSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucket', 'spotDatafeedSubscription_bucket' - The name of the Amazon S3 bucket where the Spot Instance data feed is
+-- located.
+--
+-- 'fault', 'spotDatafeedSubscription_fault' - The fault codes for the Spot Instance request, if any.
+--
+-- 'ownerId', 'spotDatafeedSubscription_ownerId' - The Amazon Web Services account ID of the account.
+--
+-- 'prefix', 'spotDatafeedSubscription_prefix' - The prefix for the data feed files.
+--
+-- 'state', 'spotDatafeedSubscription_state' - The state of the Spot Instance data feed subscription.
+newSpotDatafeedSubscription ::
+  SpotDatafeedSubscription
+newSpotDatafeedSubscription =
+  SpotDatafeedSubscription'
+    { bucket = Prelude.Nothing,
+      fault = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The name of the Amazon S3 bucket where the Spot Instance data feed is
+-- located.
+spotDatafeedSubscription_bucket :: Lens.Lens' SpotDatafeedSubscription (Prelude.Maybe Prelude.Text)
+spotDatafeedSubscription_bucket = Lens.lens (\SpotDatafeedSubscription' {bucket} -> bucket) (\s@SpotDatafeedSubscription' {} a -> s {bucket = a} :: SpotDatafeedSubscription)
+
+-- | The fault codes for the Spot Instance request, if any.
+spotDatafeedSubscription_fault :: Lens.Lens' SpotDatafeedSubscription (Prelude.Maybe SpotInstanceStateFault)
+spotDatafeedSubscription_fault = Lens.lens (\SpotDatafeedSubscription' {fault} -> fault) (\s@SpotDatafeedSubscription' {} a -> s {fault = a} :: SpotDatafeedSubscription)
+
+-- | The Amazon Web Services account ID of the account.
+spotDatafeedSubscription_ownerId :: Lens.Lens' SpotDatafeedSubscription (Prelude.Maybe Prelude.Text)
+spotDatafeedSubscription_ownerId = Lens.lens (\SpotDatafeedSubscription' {ownerId} -> ownerId) (\s@SpotDatafeedSubscription' {} a -> s {ownerId = a} :: SpotDatafeedSubscription)
+
+-- | The prefix for the data feed files.
+spotDatafeedSubscription_prefix :: Lens.Lens' SpotDatafeedSubscription (Prelude.Maybe Prelude.Text)
+spotDatafeedSubscription_prefix = Lens.lens (\SpotDatafeedSubscription' {prefix} -> prefix) (\s@SpotDatafeedSubscription' {} a -> s {prefix = a} :: SpotDatafeedSubscription)
+
+-- | The state of the Spot Instance data feed subscription.
+spotDatafeedSubscription_state :: Lens.Lens' SpotDatafeedSubscription (Prelude.Maybe DatafeedSubscriptionState)
+spotDatafeedSubscription_state = Lens.lens (\SpotDatafeedSubscription' {state} -> state) (\s@SpotDatafeedSubscription' {} a -> s {state = a} :: SpotDatafeedSubscription)
+
+instance Data.FromXML SpotDatafeedSubscription where
+  parseXML x =
+    SpotDatafeedSubscription'
+      Prelude.<$> (x Data..@? "bucket")
+      Prelude.<*> (x Data..@? "fault")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "prefix")
+      Prelude.<*> (x Data..@? "state")
+
+instance Prelude.Hashable SpotDatafeedSubscription where
+  hashWithSalt _salt SpotDatafeedSubscription' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` fault
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` prefix
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData SpotDatafeedSubscription where
+  rnf SpotDatafeedSubscription' {..} =
+    Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf fault
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/SpotFleetLaunchSpecification.hs b/gen/Amazonka/EC2/Types/SpotFleetLaunchSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotFleetLaunchSpecification.hs
@@ -0,0 +1,480 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotFleetLaunchSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotFleetLaunchSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BlockDeviceMapping
+import Amazonka.EC2.Types.GroupIdentifier
+import Amazonka.EC2.Types.IamInstanceProfileSpecification
+import Amazonka.EC2.Types.InstanceNetworkInterfaceSpecification
+import Amazonka.EC2.Types.InstanceRequirements
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.SpotFleetMonitoring
+import Amazonka.EC2.Types.SpotFleetTagSpecification
+import Amazonka.EC2.Types.SpotPlacement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the launch specification for one or more Spot Instances. If
+-- you include On-Demand capacity in your fleet request or want to specify
+-- an EFA network device, you can\'t use @SpotFleetLaunchSpecification@;
+-- you must use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html LaunchTemplateConfig>.
+--
+-- /See:/ 'newSpotFleetLaunchSpecification' smart constructor.
+data SpotFleetLaunchSpecification = SpotFleetLaunchSpecification'
+  { -- | Deprecated.
+    addressingType :: Prelude.Maybe Prelude.Text,
+    -- | One or more block devices that are mapped to the Spot Instances. You
+    -- can\'t specify both a snapshot ID and an encryption value. This is
+    -- because only blank volumes can be encrypted on creation. If a snapshot
+    -- is the basis for a volume, it is not blank and its encryption status is
+    -- used for the volume encryption status.
+    blockDeviceMappings :: Prelude.Maybe [BlockDeviceMapping],
+    -- | Indicates whether the instances are optimized for EBS I\/O. This
+    -- optimization provides dedicated throughput to Amazon EBS and an
+    -- optimized configuration stack to provide optimal EBS I\/O performance.
+    -- This optimization isn\'t available with all instance types. Additional
+    -- usage charges apply when using an EBS Optimized instance.
+    --
+    -- Default: @false@
+    ebsOptimized :: Prelude.Maybe Prelude.Bool,
+    -- | The IAM instance profile.
+    iamInstanceProfile :: Prelude.Maybe IamInstanceProfileSpecification,
+    -- | The ID of the AMI.
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The attributes for the instance types. When you specify instance
+    -- attributes, Amazon EC2 will identify instance types with those
+    -- attributes.
+    --
+    -- If you specify @InstanceRequirements@, you can\'t specify
+    -- @InstanceType@.
+    instanceRequirements :: Prelude.Maybe InstanceRequirements,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | The ID of the kernel.
+    kernelId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the key pair.
+    keyName :: Prelude.Maybe Prelude.Text,
+    -- | Enable or disable monitoring for the instances.
+    monitoring :: Prelude.Maybe SpotFleetMonitoring,
+    -- | One or more network interfaces. If you specify a network interface, you
+    -- must specify subnet IDs and security group IDs using the network
+    -- interface.
+    --
+    -- @SpotFleetLaunchSpecification@ currently does not support Elastic Fabric
+    -- Adapter (EFA). To specify an EFA, you must use
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html LaunchTemplateConfig>.
+    networkInterfaces :: Prelude.Maybe [InstanceNetworkInterfaceSpecification],
+    -- | The placement information.
+    placement :: Prelude.Maybe SpotPlacement,
+    -- | The ID of the RAM disk. 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, refer to the
+    -- Amazon Web Services Resource Center and search for the kernel ID.
+    ramdiskId :: Prelude.Maybe Prelude.Text,
+    -- | One or more security groups. When requesting instances in a VPC, you
+    -- must specify the IDs of the security groups. When requesting instances
+    -- in EC2-Classic, you can specify the names or the IDs of the security
+    -- groups.
+    securityGroups :: Prelude.Maybe [GroupIdentifier],
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    spotPrice :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the subnets in which to launch the instances. To specify
+    -- multiple subnets, separate them using commas; for example,
+    -- \"subnet-1234abcdeexample1, subnet-0987cdef6example2\".
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The tags to apply during creation.
+    tagSpecifications :: Prelude.Maybe [SpotFleetTagSpecification],
+    -- | The Base64-encoded user data that instances use when starting up.
+    userData :: Prelude.Maybe Prelude.Text,
+    -- | The number of units provided by the specified instance type. These are
+    -- the same units that you chose to set the target capacity in terms of
+    -- instances, or a performance characteristic such as vCPUs, memory, or
+    -- I\/O.
+    --
+    -- If the target capacity divided by this value is not a whole number,
+    -- Amazon EC2 rounds the number of instances to the next whole number. If
+    -- this value is not specified, the default is 1.
+    weightedCapacity :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotFleetLaunchSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressingType', 'spotFleetLaunchSpecification_addressingType' - Deprecated.
+--
+-- 'blockDeviceMappings', 'spotFleetLaunchSpecification_blockDeviceMappings' - One or more block devices that are mapped to the Spot Instances. You
+-- can\'t specify both a snapshot ID and an encryption value. This is
+-- because only blank volumes can be encrypted on creation. If a snapshot
+-- is the basis for a volume, it is not blank and its encryption status is
+-- used for the volume encryption status.
+--
+-- 'ebsOptimized', 'spotFleetLaunchSpecification_ebsOptimized' - Indicates whether the instances are optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: @false@
+--
+-- 'iamInstanceProfile', 'spotFleetLaunchSpecification_iamInstanceProfile' - The IAM instance profile.
+--
+-- 'imageId', 'spotFleetLaunchSpecification_imageId' - The ID of the AMI.
+--
+-- 'instanceRequirements', 'spotFleetLaunchSpecification_instanceRequirements' - The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+--
+-- 'instanceType', 'spotFleetLaunchSpecification_instanceType' - The instance type.
+--
+-- 'kernelId', 'spotFleetLaunchSpecification_kernelId' - The ID of the kernel.
+--
+-- 'keyName', 'spotFleetLaunchSpecification_keyName' - The name of the key pair.
+--
+-- 'monitoring', 'spotFleetLaunchSpecification_monitoring' - Enable or disable monitoring for the instances.
+--
+-- 'networkInterfaces', 'spotFleetLaunchSpecification_networkInterfaces' - One or more network interfaces. If you specify a network interface, you
+-- must specify subnet IDs and security group IDs using the network
+-- interface.
+--
+-- @SpotFleetLaunchSpecification@ currently does not support Elastic Fabric
+-- Adapter (EFA). To specify an EFA, you must use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html LaunchTemplateConfig>.
+--
+-- 'placement', 'spotFleetLaunchSpecification_placement' - The placement information.
+--
+-- 'ramdiskId', 'spotFleetLaunchSpecification_ramdiskId' - The ID of the RAM disk. 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, refer to the
+-- Amazon Web Services Resource Center and search for the kernel ID.
+--
+-- 'securityGroups', 'spotFleetLaunchSpecification_securityGroups' - One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+--
+-- 'spotPrice', 'spotFleetLaunchSpecification_spotPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'subnetId', 'spotFleetLaunchSpecification_subnetId' - The IDs of the subnets in which to launch the instances. To specify
+-- multiple subnets, separate them using commas; for example,
+-- \"subnet-1234abcdeexample1, subnet-0987cdef6example2\".
+--
+-- 'tagSpecifications', 'spotFleetLaunchSpecification_tagSpecifications' - The tags to apply during creation.
+--
+-- 'userData', 'spotFleetLaunchSpecification_userData' - The Base64-encoded user data that instances use when starting up.
+--
+-- 'weightedCapacity', 'spotFleetLaunchSpecification_weightedCapacity' - The number of units provided by the specified instance type. These are
+-- the same units that you chose to set the target capacity in terms of
+-- instances, or a performance characteristic such as vCPUs, memory, or
+-- I\/O.
+--
+-- If the target capacity divided by this value is not a whole number,
+-- Amazon EC2 rounds the number of instances to the next whole number. If
+-- this value is not specified, the default is 1.
+newSpotFleetLaunchSpecification ::
+  SpotFleetLaunchSpecification
+newSpotFleetLaunchSpecification =
+  SpotFleetLaunchSpecification'
+    { addressingType =
+        Prelude.Nothing,
+      blockDeviceMappings = Prelude.Nothing,
+      ebsOptimized = Prelude.Nothing,
+      iamInstanceProfile = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      instanceRequirements = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      kernelId = Prelude.Nothing,
+      keyName = Prelude.Nothing,
+      monitoring = Prelude.Nothing,
+      networkInterfaces = Prelude.Nothing,
+      placement = Prelude.Nothing,
+      ramdiskId = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      spotPrice = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tagSpecifications = Prelude.Nothing,
+      userData = Prelude.Nothing,
+      weightedCapacity = Prelude.Nothing
+    }
+
+-- | Deprecated.
+spotFleetLaunchSpecification_addressingType :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_addressingType = Lens.lens (\SpotFleetLaunchSpecification' {addressingType} -> addressingType) (\s@SpotFleetLaunchSpecification' {} a -> s {addressingType = a} :: SpotFleetLaunchSpecification)
+
+-- | One or more block devices that are mapped to the Spot Instances. You
+-- can\'t specify both a snapshot ID and an encryption value. This is
+-- because only blank volumes can be encrypted on creation. If a snapshot
+-- is the basis for a volume, it is not blank and its encryption status is
+-- used for the volume encryption status.
+spotFleetLaunchSpecification_blockDeviceMappings :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe [BlockDeviceMapping])
+spotFleetLaunchSpecification_blockDeviceMappings = Lens.lens (\SpotFleetLaunchSpecification' {blockDeviceMappings} -> blockDeviceMappings) (\s@SpotFleetLaunchSpecification' {} a -> s {blockDeviceMappings = a} :: SpotFleetLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the instances are optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: @false@
+spotFleetLaunchSpecification_ebsOptimized :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Bool)
+spotFleetLaunchSpecification_ebsOptimized = Lens.lens (\SpotFleetLaunchSpecification' {ebsOptimized} -> ebsOptimized) (\s@SpotFleetLaunchSpecification' {} a -> s {ebsOptimized = a} :: SpotFleetLaunchSpecification)
+
+-- | The IAM instance profile.
+spotFleetLaunchSpecification_iamInstanceProfile :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe IamInstanceProfileSpecification)
+spotFleetLaunchSpecification_iamInstanceProfile = Lens.lens (\SpotFleetLaunchSpecification' {iamInstanceProfile} -> iamInstanceProfile) (\s@SpotFleetLaunchSpecification' {} a -> s {iamInstanceProfile = a} :: SpotFleetLaunchSpecification)
+
+-- | The ID of the AMI.
+spotFleetLaunchSpecification_imageId :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_imageId = Lens.lens (\SpotFleetLaunchSpecification' {imageId} -> imageId) (\s@SpotFleetLaunchSpecification' {} a -> s {imageId = a} :: SpotFleetLaunchSpecification)
+
+-- | The attributes for the instance types. When you specify instance
+-- attributes, Amazon EC2 will identify instance types with those
+-- attributes.
+--
+-- If you specify @InstanceRequirements@, you can\'t specify
+-- @InstanceType@.
+spotFleetLaunchSpecification_instanceRequirements :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe InstanceRequirements)
+spotFleetLaunchSpecification_instanceRequirements = Lens.lens (\SpotFleetLaunchSpecification' {instanceRequirements} -> instanceRequirements) (\s@SpotFleetLaunchSpecification' {} a -> s {instanceRequirements = a} :: SpotFleetLaunchSpecification)
+
+-- | The instance type.
+spotFleetLaunchSpecification_instanceType :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe InstanceType)
+spotFleetLaunchSpecification_instanceType = Lens.lens (\SpotFleetLaunchSpecification' {instanceType} -> instanceType) (\s@SpotFleetLaunchSpecification' {} a -> s {instanceType = a} :: SpotFleetLaunchSpecification)
+
+-- | The ID of the kernel.
+spotFleetLaunchSpecification_kernelId :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_kernelId = Lens.lens (\SpotFleetLaunchSpecification' {kernelId} -> kernelId) (\s@SpotFleetLaunchSpecification' {} a -> s {kernelId = a} :: SpotFleetLaunchSpecification)
+
+-- | The name of the key pair.
+spotFleetLaunchSpecification_keyName :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_keyName = Lens.lens (\SpotFleetLaunchSpecification' {keyName} -> keyName) (\s@SpotFleetLaunchSpecification' {} a -> s {keyName = a} :: SpotFleetLaunchSpecification)
+
+-- | Enable or disable monitoring for the instances.
+spotFleetLaunchSpecification_monitoring :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe SpotFleetMonitoring)
+spotFleetLaunchSpecification_monitoring = Lens.lens (\SpotFleetLaunchSpecification' {monitoring} -> monitoring) (\s@SpotFleetLaunchSpecification' {} a -> s {monitoring = a} :: SpotFleetLaunchSpecification)
+
+-- | One or more network interfaces. If you specify a network interface, you
+-- must specify subnet IDs and security group IDs using the network
+-- interface.
+--
+-- @SpotFleetLaunchSpecification@ currently does not support Elastic Fabric
+-- Adapter (EFA). To specify an EFA, you must use
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html LaunchTemplateConfig>.
+spotFleetLaunchSpecification_networkInterfaces :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe [InstanceNetworkInterfaceSpecification])
+spotFleetLaunchSpecification_networkInterfaces = Lens.lens (\SpotFleetLaunchSpecification' {networkInterfaces} -> networkInterfaces) (\s@SpotFleetLaunchSpecification' {} a -> s {networkInterfaces = a} :: SpotFleetLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The placement information.
+spotFleetLaunchSpecification_placement :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe SpotPlacement)
+spotFleetLaunchSpecification_placement = Lens.lens (\SpotFleetLaunchSpecification' {placement} -> placement) (\s@SpotFleetLaunchSpecification' {} a -> s {placement = a} :: SpotFleetLaunchSpecification)
+
+-- | The ID of the RAM disk. 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, refer to the
+-- Amazon Web Services Resource Center and search for the kernel ID.
+spotFleetLaunchSpecification_ramdiskId :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_ramdiskId = Lens.lens (\SpotFleetLaunchSpecification' {ramdiskId} -> ramdiskId) (\s@SpotFleetLaunchSpecification' {} a -> s {ramdiskId = a} :: SpotFleetLaunchSpecification)
+
+-- | One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+spotFleetLaunchSpecification_securityGroups :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe [GroupIdentifier])
+spotFleetLaunchSpecification_securityGroups = Lens.lens (\SpotFleetLaunchSpecification' {securityGroups} -> securityGroups) (\s@SpotFleetLaunchSpecification' {} a -> s {securityGroups = a} :: SpotFleetLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+spotFleetLaunchSpecification_spotPrice :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_spotPrice = Lens.lens (\SpotFleetLaunchSpecification' {spotPrice} -> spotPrice) (\s@SpotFleetLaunchSpecification' {} a -> s {spotPrice = a} :: SpotFleetLaunchSpecification)
+
+-- | The IDs of the subnets in which to launch the instances. To specify
+-- multiple subnets, separate them using commas; for example,
+-- \"subnet-1234abcdeexample1, subnet-0987cdef6example2\".
+spotFleetLaunchSpecification_subnetId :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_subnetId = Lens.lens (\SpotFleetLaunchSpecification' {subnetId} -> subnetId) (\s@SpotFleetLaunchSpecification' {} a -> s {subnetId = a} :: SpotFleetLaunchSpecification)
+
+-- | The tags to apply during creation.
+spotFleetLaunchSpecification_tagSpecifications :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe [SpotFleetTagSpecification])
+spotFleetLaunchSpecification_tagSpecifications = Lens.lens (\SpotFleetLaunchSpecification' {tagSpecifications} -> tagSpecifications) (\s@SpotFleetLaunchSpecification' {} a -> s {tagSpecifications = a} :: SpotFleetLaunchSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Base64-encoded user data that instances use when starting up.
+spotFleetLaunchSpecification_userData :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Text)
+spotFleetLaunchSpecification_userData = Lens.lens (\SpotFleetLaunchSpecification' {userData} -> userData) (\s@SpotFleetLaunchSpecification' {} a -> s {userData = a} :: SpotFleetLaunchSpecification)
+
+-- | The number of units provided by the specified instance type. These are
+-- the same units that you chose to set the target capacity in terms of
+-- instances, or a performance characteristic such as vCPUs, memory, or
+-- I\/O.
+--
+-- If the target capacity divided by this value is not a whole number,
+-- Amazon EC2 rounds the number of instances to the next whole number. If
+-- this value is not specified, the default is 1.
+spotFleetLaunchSpecification_weightedCapacity :: Lens.Lens' SpotFleetLaunchSpecification (Prelude.Maybe Prelude.Double)
+spotFleetLaunchSpecification_weightedCapacity = Lens.lens (\SpotFleetLaunchSpecification' {weightedCapacity} -> weightedCapacity) (\s@SpotFleetLaunchSpecification' {} a -> s {weightedCapacity = a} :: SpotFleetLaunchSpecification)
+
+instance Data.FromXML SpotFleetLaunchSpecification where
+  parseXML x =
+    SpotFleetLaunchSpecification'
+      Prelude.<$> (x Data..@? "addressingType")
+      Prelude.<*> ( x
+                      Data..@? "blockDeviceMapping"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ebsOptimized")
+      Prelude.<*> (x Data..@? "iamInstanceProfile")
+      Prelude.<*> (x Data..@? "imageId")
+      Prelude.<*> (x Data..@? "instanceRequirements")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "kernelId")
+      Prelude.<*> (x Data..@? "keyName")
+      Prelude.<*> (x Data..@? "monitoring")
+      Prelude.<*> ( x
+                      Data..@? "networkInterfaceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "placement")
+      Prelude.<*> (x Data..@? "ramdiskId")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "spotPrice")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> ( x
+                      Data..@? "tagSpecificationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "userData")
+      Prelude.<*> (x Data..@? "weightedCapacity")
+
+instance
+  Prelude.Hashable
+    SpotFleetLaunchSpecification
+  where
+  hashWithSalt _salt SpotFleetLaunchSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressingType
+      `Prelude.hashWithSalt` blockDeviceMappings
+      `Prelude.hashWithSalt` ebsOptimized
+      `Prelude.hashWithSalt` iamInstanceProfile
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` instanceRequirements
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` kernelId
+      `Prelude.hashWithSalt` keyName
+      `Prelude.hashWithSalt` monitoring
+      `Prelude.hashWithSalt` networkInterfaces
+      `Prelude.hashWithSalt` placement
+      `Prelude.hashWithSalt` ramdiskId
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` spotPrice
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` userData
+      `Prelude.hashWithSalt` weightedCapacity
+
+instance Prelude.NFData SpotFleetLaunchSpecification where
+  rnf SpotFleetLaunchSpecification' {..} =
+    Prelude.rnf addressingType
+      `Prelude.seq` Prelude.rnf blockDeviceMappings
+      `Prelude.seq` Prelude.rnf ebsOptimized
+      `Prelude.seq` Prelude.rnf iamInstanceProfile
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf instanceRequirements
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf kernelId
+      `Prelude.seq` Prelude.rnf keyName
+      `Prelude.seq` Prelude.rnf monitoring
+      `Prelude.seq` Prelude.rnf networkInterfaces
+      `Prelude.seq` Prelude.rnf placement
+      `Prelude.seq` Prelude.rnf ramdiskId
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf spotPrice
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf userData
+      `Prelude.seq` Prelude.rnf weightedCapacity
+
+instance Data.ToQuery SpotFleetLaunchSpecification where
+  toQuery SpotFleetLaunchSpecification' {..} =
+    Prelude.mconcat
+      [ "AddressingType" Data.=: addressingType,
+        Data.toQuery
+          ( Data.toQueryList "BlockDeviceMapping"
+              Prelude.<$> blockDeviceMappings
+          ),
+        "EbsOptimized" Data.=: ebsOptimized,
+        "IamInstanceProfile" Data.=: iamInstanceProfile,
+        "ImageId" Data.=: imageId,
+        "InstanceRequirements" Data.=: instanceRequirements,
+        "InstanceType" Data.=: instanceType,
+        "KernelId" Data.=: kernelId,
+        "KeyName" Data.=: keyName,
+        "Monitoring" Data.=: monitoring,
+        Data.toQuery
+          ( Data.toQueryList "NetworkInterfaceSet"
+              Prelude.<$> networkInterfaces
+          ),
+        "Placement" Data.=: placement,
+        "RamdiskId" Data.=: ramdiskId,
+        Data.toQuery
+          ( Data.toQueryList "GroupSet"
+              Prelude.<$> securityGroups
+          ),
+        "SpotPrice" Data.=: spotPrice,
+        "SubnetId" Data.=: subnetId,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecificationSet"
+              Prelude.<$> tagSpecifications
+          ),
+        "UserData" Data.=: userData,
+        "WeightedCapacity" Data.=: weightedCapacity
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotFleetMonitoring.hs b/gen/Amazonka/EC2/Types/SpotFleetMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotFleetMonitoring.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotFleetMonitoring
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotFleetMonitoring where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes whether monitoring is enabled.
+--
+-- /See:/ 'newSpotFleetMonitoring' smart constructor.
+data SpotFleetMonitoring = SpotFleetMonitoring'
+  { -- | Enables monitoring for the instance.
+    --
+    -- Default: @false@
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotFleetMonitoring' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'spotFleetMonitoring_enabled' - Enables monitoring for the instance.
+--
+-- Default: @false@
+newSpotFleetMonitoring ::
+  SpotFleetMonitoring
+newSpotFleetMonitoring =
+  SpotFleetMonitoring' {enabled = Prelude.Nothing}
+
+-- | Enables monitoring for the instance.
+--
+-- Default: @false@
+spotFleetMonitoring_enabled :: Lens.Lens' SpotFleetMonitoring (Prelude.Maybe Prelude.Bool)
+spotFleetMonitoring_enabled = Lens.lens (\SpotFleetMonitoring' {enabled} -> enabled) (\s@SpotFleetMonitoring' {} a -> s {enabled = a} :: SpotFleetMonitoring)
+
+instance Data.FromXML SpotFleetMonitoring where
+  parseXML x =
+    SpotFleetMonitoring'
+      Prelude.<$> (x Data..@? "enabled")
+
+instance Prelude.Hashable SpotFleetMonitoring where
+  hashWithSalt _salt SpotFleetMonitoring' {..} =
+    _salt `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData SpotFleetMonitoring where
+  rnf SpotFleetMonitoring' {..} = Prelude.rnf enabled
+
+instance Data.ToQuery SpotFleetMonitoring where
+  toQuery SpotFleetMonitoring' {..} =
+    Prelude.mconcat ["Enabled" Data.=: enabled]
diff --git a/gen/Amazonka/EC2/Types/SpotFleetRequestConfig.hs b/gen/Amazonka/EC2/Types/SpotFleetRequestConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotFleetRequestConfig.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotFleetRequestConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotFleetRequestConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ActivityStatus
+import Amazonka.EC2.Types.BatchState
+import Amazonka.EC2.Types.SpotFleetRequestConfigData
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Spot Fleet request.
+--
+-- /See:/ 'newSpotFleetRequestConfig' smart constructor.
+data SpotFleetRequestConfig = SpotFleetRequestConfig'
+  { -- | The progress of the Spot Fleet request. If there is an error, the status
+    -- is @error@. After all requests are placed, the status is
+    -- @pending_fulfillment@. If the size of the fleet is equal to or greater
+    -- than its target capacity, the status is @fulfilled@. If the size of the
+    -- fleet is decreased, the status is @pending_termination@ while Spot
+    -- Instances are terminating.
+    activityStatus :: Prelude.Maybe ActivityStatus,
+    -- | The creation date and time of the request.
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The configuration of the Spot Fleet request.
+    spotFleetRequestConfig :: Prelude.Maybe SpotFleetRequestConfigData,
+    -- | The ID of the Spot Fleet request.
+    spotFleetRequestId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Spot Fleet request.
+    spotFleetRequestState :: Prelude.Maybe BatchState,
+    -- | The tags for a Spot Fleet resource.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotFleetRequestConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'activityStatus', 'spotFleetRequestConfig_activityStatus' - The progress of the Spot Fleet request. If there is an error, the status
+-- is @error@. After all requests are placed, the status is
+-- @pending_fulfillment@. If the size of the fleet is equal to or greater
+-- than its target capacity, the status is @fulfilled@. If the size of the
+-- fleet is decreased, the status is @pending_termination@ while Spot
+-- Instances are terminating.
+--
+-- 'createTime', 'spotFleetRequestConfig_createTime' - The creation date and time of the request.
+--
+-- 'spotFleetRequestConfig', 'spotFleetRequestConfig_spotFleetRequestConfig' - The configuration of the Spot Fleet request.
+--
+-- 'spotFleetRequestId', 'spotFleetRequestConfig_spotFleetRequestId' - The ID of the Spot Fleet request.
+--
+-- 'spotFleetRequestState', 'spotFleetRequestConfig_spotFleetRequestState' - The state of the Spot Fleet request.
+--
+-- 'tags', 'spotFleetRequestConfig_tags' - The tags for a Spot Fleet resource.
+newSpotFleetRequestConfig ::
+  SpotFleetRequestConfig
+newSpotFleetRequestConfig =
+  SpotFleetRequestConfig'
+    { activityStatus =
+        Prelude.Nothing,
+      createTime = Prelude.Nothing,
+      spotFleetRequestConfig = Prelude.Nothing,
+      spotFleetRequestId = Prelude.Nothing,
+      spotFleetRequestState = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The progress of the Spot Fleet request. If there is an error, the status
+-- is @error@. After all requests are placed, the status is
+-- @pending_fulfillment@. If the size of the fleet is equal to or greater
+-- than its target capacity, the status is @fulfilled@. If the size of the
+-- fleet is decreased, the status is @pending_termination@ while Spot
+-- Instances are terminating.
+spotFleetRequestConfig_activityStatus :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe ActivityStatus)
+spotFleetRequestConfig_activityStatus = Lens.lens (\SpotFleetRequestConfig' {activityStatus} -> activityStatus) (\s@SpotFleetRequestConfig' {} a -> s {activityStatus = a} :: SpotFleetRequestConfig)
+
+-- | The creation date and time of the request.
+spotFleetRequestConfig_createTime :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe Prelude.UTCTime)
+spotFleetRequestConfig_createTime = Lens.lens (\SpotFleetRequestConfig' {createTime} -> createTime) (\s@SpotFleetRequestConfig' {} a -> s {createTime = a} :: SpotFleetRequestConfig) Prelude.. Lens.mapping Data._Time
+
+-- | The configuration of the Spot Fleet request.
+spotFleetRequestConfig_spotFleetRequestConfig :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe SpotFleetRequestConfigData)
+spotFleetRequestConfig_spotFleetRequestConfig = Lens.lens (\SpotFleetRequestConfig' {spotFleetRequestConfig} -> spotFleetRequestConfig) (\s@SpotFleetRequestConfig' {} a -> s {spotFleetRequestConfig = a} :: SpotFleetRequestConfig)
+
+-- | The ID of the Spot Fleet request.
+spotFleetRequestConfig_spotFleetRequestId :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe Prelude.Text)
+spotFleetRequestConfig_spotFleetRequestId = Lens.lens (\SpotFleetRequestConfig' {spotFleetRequestId} -> spotFleetRequestId) (\s@SpotFleetRequestConfig' {} a -> s {spotFleetRequestId = a} :: SpotFleetRequestConfig)
+
+-- | The state of the Spot Fleet request.
+spotFleetRequestConfig_spotFleetRequestState :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe BatchState)
+spotFleetRequestConfig_spotFleetRequestState = Lens.lens (\SpotFleetRequestConfig' {spotFleetRequestState} -> spotFleetRequestState) (\s@SpotFleetRequestConfig' {} a -> s {spotFleetRequestState = a} :: SpotFleetRequestConfig)
+
+-- | The tags for a Spot Fleet resource.
+spotFleetRequestConfig_tags :: Lens.Lens' SpotFleetRequestConfig (Prelude.Maybe [Tag])
+spotFleetRequestConfig_tags = Lens.lens (\SpotFleetRequestConfig' {tags} -> tags) (\s@SpotFleetRequestConfig' {} a -> s {tags = a} :: SpotFleetRequestConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML SpotFleetRequestConfig where
+  parseXML x =
+    SpotFleetRequestConfig'
+      Prelude.<$> (x Data..@? "activityStatus")
+      Prelude.<*> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "spotFleetRequestConfig")
+      Prelude.<*> (x Data..@? "spotFleetRequestId")
+      Prelude.<*> (x Data..@? "spotFleetRequestState")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable SpotFleetRequestConfig where
+  hashWithSalt _salt SpotFleetRequestConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` activityStatus
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` spotFleetRequestConfig
+      `Prelude.hashWithSalt` spotFleetRequestId
+      `Prelude.hashWithSalt` spotFleetRequestState
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData SpotFleetRequestConfig where
+  rnf SpotFleetRequestConfig' {..} =
+    Prelude.rnf activityStatus
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf spotFleetRequestConfig
+      `Prelude.seq` Prelude.rnf spotFleetRequestId
+      `Prelude.seq` Prelude.rnf spotFleetRequestState
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/SpotFleetRequestConfigData.hs b/gen/Amazonka/EC2/Types/SpotFleetRequestConfigData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotFleetRequestConfigData.hs
@@ -0,0 +1,903 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotFleetRequestConfigData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotFleetRequestConfigData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AllocationStrategy
+import Amazonka.EC2.Types.ExcessCapacityTerminationPolicy
+import Amazonka.EC2.Types.FleetType
+import Amazonka.EC2.Types.InstanceInterruptionBehavior
+import Amazonka.EC2.Types.LaunchTemplateConfig
+import Amazonka.EC2.Types.LoadBalancersConfig
+import Amazonka.EC2.Types.OnDemandAllocationStrategy
+import Amazonka.EC2.Types.SpotFleetLaunchSpecification
+import Amazonka.EC2.Types.SpotMaintenanceStrategies
+import Amazonka.EC2.Types.TagSpecification
+import Amazonka.EC2.Types.TargetCapacityUnitType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of a Spot Fleet request.
+--
+-- /See:/ 'newSpotFleetRequestConfigData' smart constructor.
+data SpotFleetRequestConfigData = SpotFleetRequestConfigData'
+  { -- | The strategy that determines how to allocate the target Spot Instance
+    -- capacity across the Spot Instance pools specified by the Spot Fleet
+    -- launch configuration. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- [priceCapacityOptimized (recommended)]
+    --     Spot Fleet identifies the pools with the highest capacity
+    --     availability for the number of instances that are launching. This
+    --     means that we will request Spot Instances from the pools that we
+    --     believe have the lowest chance of interruption in the near term.
+    --     Spot Fleet then requests Spot Instances from the lowest priced of
+    --     these pools.
+    --
+    -- [capacityOptimized]
+    --     Spot Fleet identifies the pools with the highest capacity
+    --     availability for the number of instances that are launching. This
+    --     means that we will request Spot Instances from the pools that we
+    --     believe have the lowest chance of interruption in the near term. To
+    --     give certain instance types a higher chance of launching first, use
+    --     @capacityOptimizedPrioritized@. Set a priority for each instance
+    --     type by using the @Priority@ parameter for
+    --     @LaunchTemplateOverrides@. You can assign the same priority to
+    --     different @LaunchTemplateOverrides@. EC2 implements the priorities
+    --     on a best-effort basis, but optimizes for capacity first.
+    --     @capacityOptimizedPrioritized@ is supported only if your Spot Fleet
+    --     uses a launch template. Note that if the
+    --     @OnDemandAllocationStrategy@ is set to @prioritized@, the same
+    --     priority is applied when fulfilling On-Demand capacity.
+    --
+    -- [diversified]
+    --     Spot Fleet requests instances from all of the Spot Instance pools
+    --     that you specify.
+    --
+    -- [lowestPrice]
+    --     Spot Fleet requests instances from the lowest priced Spot Instance
+    --     pool that has available capacity. If the lowest priced pool doesn\'t
+    --     have available capacity, the Spot Instances come from the next
+    --     lowest priced pool that has available capacity. If a pool runs out
+    --     of capacity before fulfilling your desired capacity, Spot Fleet will
+    --     continue to fulfill your request by drawing from the next lowest
+    --     priced pool. To ensure that your desired capacity is met, you might
+    --     receive Spot Instances from several pools. Because this strategy
+    --     only considers instance price and not capacity availability, it
+    --     might lead to high interruption rates.
+    --
+    -- Default: @lowestPrice@
+    allocationStrategy :: Prelude.Maybe AllocationStrategy,
+    -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of your listings. This helps to avoid duplicate listings.
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | Reserved.
+    context :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether running Spot Instances should be terminated if you
+    -- decrease the target capacity of the Spot Fleet request below the current
+    -- size of the Spot Fleet.
+    excessCapacityTerminationPolicy :: Prelude.Maybe ExcessCapacityTerminationPolicy,
+    -- | The number of units fulfilled by this request compared to the set target
+    -- capacity. You cannot set this value.
+    fulfilledCapacity :: Prelude.Maybe Prelude.Double,
+    -- | The behavior when a Spot Instance is interrupted. The default is
+    -- @terminate@.
+    instanceInterruptionBehavior :: Prelude.Maybe InstanceInterruptionBehavior,
+    -- | The number of Spot pools across which to allocate your target Spot
+    -- capacity. Valid only when Spot __AllocationStrategy__ is set to
+    -- @lowest-price@. Spot Fleet selects the cheapest Spot pools and evenly
+    -- allocates your target Spot capacity across the number of Spot pools that
+    -- you specify.
+    --
+    -- Note that Spot Fleet attempts to draw Spot Instances from the number of
+    -- pools that you specify on a best effort basis. If a pool runs out of
+    -- Spot capacity before fulfilling your target capacity, Spot Fleet will
+    -- continue to fulfill your request by drawing from the next cheapest pool.
+    -- To ensure that your target capacity is met, you might receive Spot
+    -- Instances from more than the number of pools that you specified.
+    -- Similarly, if most of the pools have no Spot capacity, you might receive
+    -- your full target capacity from fewer than the number of pools that you
+    -- specified.
+    instancePoolsToUseCount :: Prelude.Maybe Prelude.Int,
+    -- | The launch specifications for the Spot Fleet request. If you specify
+    -- @LaunchSpecifications@, you can\'t specify @LaunchTemplateConfigs@. If
+    -- you include On-Demand capacity in your request, you must use
+    -- @LaunchTemplateConfigs@.
+    launchSpecifications :: Prelude.Maybe [SpotFleetLaunchSpecification],
+    -- | The launch template and overrides. If you specify
+    -- @LaunchTemplateConfigs@, you can\'t specify @LaunchSpecifications@. If
+    -- you include On-Demand capacity in your request, you must use
+    -- @LaunchTemplateConfigs@.
+    launchTemplateConfigs :: Prelude.Maybe [LaunchTemplateConfig],
+    -- | One or more Classic Load Balancers and target groups to attach to the
+    -- Spot Fleet request. Spot Fleet registers the running Spot Instances with
+    -- the specified Classic Load Balancers and target groups.
+    --
+    -- With Network Load Balancers, Spot Fleet cannot register instances that
+    -- have the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1,
+    -- G2, HI1, HS1, M1, M2, M3, and T1.
+    loadBalancersConfig :: Prelude.Maybe LoadBalancersConfig,
+    -- | The order of the launch template overrides to use in fulfilling
+    -- On-Demand capacity. If you specify @lowestPrice@, Spot Fleet uses price
+    -- to determine the order, launching the lowest price first. If you specify
+    -- @prioritized@, Spot Fleet uses the priority that you assign to each Spot
+    -- Fleet launch template override, launching the highest priority first. If
+    -- you do not specify a value, Spot Fleet defaults to @lowestPrice@.
+    onDemandAllocationStrategy :: Prelude.Maybe OnDemandAllocationStrategy,
+    -- | The number of On-Demand units fulfilled by this request compared to the
+    -- set target On-Demand capacity.
+    onDemandFulfilledCapacity :: Prelude.Maybe Prelude.Double,
+    -- | The maximum amount per hour for On-Demand Instances that you\'re willing
+    -- to pay. You can use the @onDemandMaxTotalPrice@ parameter, the
+    -- @spotMaxTotalPrice@ parameter, or both parameters to ensure that your
+    -- fleet cost does not exceed your budget. If you set a maximum price per
+    -- hour for the On-Demand Instances and Spot Instances in your request,
+    -- Spot Fleet will launch instances until it reaches the maximum amount
+    -- you\'re willing to pay. When the maximum amount you\'re willing to pay
+    -- is reached, the fleet stops launching instances even if it hasn’t met
+    -- the target capacity.
+    onDemandMaxTotalPrice :: Prelude.Maybe Prelude.Text,
+    -- | The number of On-Demand units to request. You can choose to set the
+    -- target capacity in terms of instances or a performance characteristic
+    -- that is important to your application workload, such as vCPUs, memory,
+    -- or I\/O. If the request type is @maintain@, you can specify a target
+    -- capacity of 0 and add capacity later.
+    onDemandTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether Spot Fleet should replace unhealthy instances.
+    replaceUnhealthyInstances :: Prelude.Maybe Prelude.Bool,
+    -- | The strategies for managing your Spot Instances that are at an elevated
+    -- risk of being interrupted.
+    spotMaintenanceStrategies :: Prelude.Maybe SpotMaintenanceStrategies,
+    -- | The maximum amount per hour for Spot Instances that you\'re willing to
+    -- pay. You can use the @spotdMaxTotalPrice@ parameter, the
+    -- @onDemandMaxTotalPrice@ parameter, or both parameters to ensure that
+    -- your fleet cost does not exceed your budget. If you set a maximum price
+    -- per hour for the On-Demand Instances and Spot Instances in your request,
+    -- Spot Fleet will launch instances until it reaches the maximum amount
+    -- you\'re willing to pay. When the maximum amount you\'re willing to pay
+    -- is reached, the fleet stops launching instances even if it hasn’t met
+    -- the target capacity.
+    spotMaxTotalPrice :: Prelude.Maybe Prelude.Text,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    spotPrice :: Prelude.Maybe Prelude.Text,
+    -- | 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
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template launch template>
+    -- (valid only if you use @LaunchTemplateConfigs@) or in the
+    -- @ @<https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetTagSpecification.html SpotFleetTagSpecification>@ @
+    -- (valid only if you use @LaunchSpecifications@). For information about
+    -- tagging after launch, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources Tagging Your Resources>.
+    tagSpecifications :: Prelude.Maybe [TagSpecification],
+    -- | The unit for the target capacity.
+    --
+    -- Default: @units@ (translates to number of instances)
+    targetCapacityUnitType :: Prelude.Maybe TargetCapacityUnitType,
+    -- | Indicates whether running Spot Instances are terminated when the Spot
+    -- Fleet request expires.
+    terminateInstancesWithExpiration :: Prelude.Maybe Prelude.Bool,
+    -- | The type of request. Indicates whether the Spot Fleet only requests the
+    -- target capacity or also attempts to maintain it. When this value is
+    -- @request@, the Spot Fleet only places the required requests. It does not
+    -- attempt to replenish Spot Instances if capacity is diminished, nor does
+    -- it submit requests in alternative Spot pools if capacity is not
+    -- available. When this value is @maintain@, the Spot Fleet maintains the
+    -- target capacity. The Spot Fleet places the required requests to meet
+    -- capacity and automatically replenishes any interrupted instances.
+    -- Default: @maintain@. @instant@ is listed but is not used by Spot Fleet.
+    type' :: Prelude.Maybe FleetType,
+    -- | The start date and time of the request, in UTC format
+    -- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). By default, Amazon EC2 starts
+    -- fulfilling the request immediately.
+    validFrom :: Prelude.Maybe Data.ISO8601,
+    -- | The end date and time of the request, in UTC format
+    -- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). After the end date and time, no new
+    -- Spot Instance requests are placed or able to fulfill the request. If no
+    -- value is specified, the Spot Fleet request remains until you cancel it.
+    validUntil :: Prelude.Maybe Data.ISO8601,
+    -- | The Amazon Resource Name (ARN) of an Identity and Access Management
+    -- (IAM) role that grants the Spot Fleet the permission to request, launch,
+    -- terminate, and tag instances on your behalf. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites Spot Fleet prerequisites>
+    -- in the /Amazon EC2 User Guide/. Spot Fleet can terminate Spot Instances
+    -- on your behalf when you cancel its Spot Fleet request using
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CancelSpotFleetRequests CancelSpotFleetRequests>
+    -- or when the Spot Fleet request expires, if you set
+    -- @TerminateInstancesWithExpiration@.
+    iamFleetRole :: Prelude.Text,
+    -- | The number of units to request for the Spot Fleet. You can choose to set
+    -- the target capacity in terms of instances or a performance
+    -- characteristic that is important to your application workload, such as
+    -- vCPUs, memory, or I\/O. If the request type is @maintain@, you can
+    -- specify a target capacity of 0 and add capacity later.
+    targetCapacity :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotFleetRequestConfigData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'spotFleetRequestConfigData_allocationStrategy' - The strategy that determines how to allocate the target Spot Instance
+-- capacity across the Spot Instance pools specified by the Spot Fleet
+-- launch configuration. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- [priceCapacityOptimized (recommended)]
+--     Spot Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term.
+--     Spot Fleet then requests Spot Instances from the lowest priced of
+--     these pools.
+--
+-- [capacityOptimized]
+--     Spot Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. To
+--     give certain instance types a higher chance of launching first, use
+--     @capacityOptimizedPrioritized@. Set a priority for each instance
+--     type by using the @Priority@ parameter for
+--     @LaunchTemplateOverrides@. You can assign the same priority to
+--     different @LaunchTemplateOverrides@. EC2 implements the priorities
+--     on a best-effort basis, but optimizes for capacity first.
+--     @capacityOptimizedPrioritized@ is supported only if your Spot Fleet
+--     uses a launch template. Note that if the
+--     @OnDemandAllocationStrategy@ is set to @prioritized@, the same
+--     priority is applied when fulfilling On-Demand capacity.
+--
+-- [diversified]
+--     Spot Fleet requests instances from all of the Spot Instance pools
+--     that you specify.
+--
+-- [lowestPrice]
+--     Spot Fleet requests instances from the lowest priced Spot Instance
+--     pool that has available capacity. If the lowest priced pool doesn\'t
+--     have available capacity, the Spot Instances come from the next
+--     lowest priced pool that has available capacity. If a pool runs out
+--     of capacity before fulfilling your desired capacity, Spot Fleet will
+--     continue to fulfill your request by drawing from the next lowest
+--     priced pool. To ensure that your desired capacity is met, you might
+--     receive Spot Instances from several pools. Because this strategy
+--     only considers instance price and not capacity availability, it
+--     might lead to high interruption rates.
+--
+-- Default: @lowestPrice@
+--
+-- 'clientToken', 'spotFleetRequestConfigData_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of your listings. This helps to avoid duplicate listings.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+--
+-- 'context', 'spotFleetRequestConfigData_context' - Reserved.
+--
+-- 'excessCapacityTerminationPolicy', 'spotFleetRequestConfigData_excessCapacityTerminationPolicy' - Indicates whether running Spot Instances should be terminated if you
+-- decrease the target capacity of the Spot Fleet request below the current
+-- size of the Spot Fleet.
+--
+-- 'fulfilledCapacity', 'spotFleetRequestConfigData_fulfilledCapacity' - The number of units fulfilled by this request compared to the set target
+-- capacity. You cannot set this value.
+--
+-- 'instanceInterruptionBehavior', 'spotFleetRequestConfigData_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+--
+-- 'instancePoolsToUseCount', 'spotFleetRequestConfigData_instancePoolsToUseCount' - The number of Spot pools across which to allocate your target Spot
+-- capacity. Valid only when Spot __AllocationStrategy__ is set to
+-- @lowest-price@. Spot Fleet selects the cheapest Spot pools and evenly
+-- allocates your target Spot capacity across the number of Spot pools that
+-- you specify.
+--
+-- Note that Spot Fleet attempts to draw Spot Instances from the number of
+-- pools that you specify on a best effort basis. If a pool runs out of
+-- Spot capacity before fulfilling your target capacity, Spot Fleet will
+-- continue to fulfill your request by drawing from the next cheapest pool.
+-- To ensure that your target capacity is met, you might receive Spot
+-- Instances from more than the number of pools that you specified.
+-- Similarly, if most of the pools have no Spot capacity, you might receive
+-- your full target capacity from fewer than the number of pools that you
+-- specified.
+--
+-- 'launchSpecifications', 'spotFleetRequestConfigData_launchSpecifications' - The launch specifications for the Spot Fleet request. If you specify
+-- @LaunchSpecifications@, you can\'t specify @LaunchTemplateConfigs@. If
+-- you include On-Demand capacity in your request, you must use
+-- @LaunchTemplateConfigs@.
+--
+-- 'launchTemplateConfigs', 'spotFleetRequestConfigData_launchTemplateConfigs' - The launch template and overrides. If you specify
+-- @LaunchTemplateConfigs@, you can\'t specify @LaunchSpecifications@. If
+-- you include On-Demand capacity in your request, you must use
+-- @LaunchTemplateConfigs@.
+--
+-- 'loadBalancersConfig', 'spotFleetRequestConfigData_loadBalancersConfig' - One or more Classic Load Balancers and target groups to attach to the
+-- Spot Fleet request. Spot Fleet registers the running Spot Instances with
+-- the specified Classic Load Balancers and target groups.
+--
+-- With Network Load Balancers, Spot Fleet cannot register instances that
+-- have the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1,
+-- G2, HI1, HS1, M1, M2, M3, and T1.
+--
+-- 'onDemandAllocationStrategy', 'spotFleetRequestConfigData_onDemandAllocationStrategy' - The order of the launch template overrides to use in fulfilling
+-- On-Demand capacity. If you specify @lowestPrice@, Spot Fleet uses price
+-- to determine the order, launching the lowest price first. If you specify
+-- @prioritized@, Spot Fleet uses the priority that you assign to each Spot
+-- Fleet launch template override, launching the highest priority first. If
+-- you do not specify a value, Spot Fleet defaults to @lowestPrice@.
+--
+-- 'onDemandFulfilledCapacity', 'spotFleetRequestConfigData_onDemandFulfilledCapacity' - The number of On-Demand units fulfilled by this request compared to the
+-- set target On-Demand capacity.
+--
+-- 'onDemandMaxTotalPrice', 'spotFleetRequestConfigData_onDemandMaxTotalPrice' - The maximum amount per hour for On-Demand Instances that you\'re willing
+-- to pay. You can use the @onDemandMaxTotalPrice@ parameter, the
+-- @spotMaxTotalPrice@ parameter, or both parameters to ensure that your
+-- fleet cost does not exceed your budget. If you set a maximum price per
+-- hour for the On-Demand Instances and Spot Instances in your request,
+-- Spot Fleet will launch instances until it reaches the maximum amount
+-- you\'re willing to pay. When the maximum amount you\'re willing to pay
+-- is reached, the fleet stops launching instances even if it hasn’t met
+-- the target capacity.
+--
+-- 'onDemandTargetCapacity', 'spotFleetRequestConfigData_onDemandTargetCapacity' - The number of On-Demand units to request. You can choose to set the
+-- target capacity in terms of instances or a performance characteristic
+-- that is important to your application workload, such as vCPUs, memory,
+-- or I\/O. If the request type is @maintain@, you can specify a target
+-- capacity of 0 and add capacity later.
+--
+-- 'replaceUnhealthyInstances', 'spotFleetRequestConfigData_replaceUnhealthyInstances' - Indicates whether Spot Fleet should replace unhealthy instances.
+--
+-- 'spotMaintenanceStrategies', 'spotFleetRequestConfigData_spotMaintenanceStrategies' - The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+--
+-- 'spotMaxTotalPrice', 'spotFleetRequestConfigData_spotMaxTotalPrice' - The maximum amount per hour for Spot Instances that you\'re willing to
+-- pay. You can use the @spotdMaxTotalPrice@ parameter, the
+-- @onDemandMaxTotalPrice@ parameter, or both parameters to ensure that
+-- your fleet cost does not exceed your budget. If you set a maximum price
+-- per hour for the On-Demand Instances and Spot Instances in your request,
+-- Spot Fleet will launch instances until it reaches the maximum amount
+-- you\'re willing to pay. When the maximum amount you\'re willing to pay
+-- is reached, the fleet stops launching instances even if it hasn’t met
+-- the target capacity.
+--
+-- 'spotPrice', 'spotFleetRequestConfigData_spotPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'tagSpecifications', 'spotFleetRequestConfigData_tagSpecifications' - 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
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template launch template>
+-- (valid only if you use @LaunchTemplateConfigs@) or in the
+-- @ @<https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetTagSpecification.html SpotFleetTagSpecification>@ @
+-- (valid only if you use @LaunchSpecifications@). For information about
+-- tagging after launch, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources Tagging Your Resources>.
+--
+-- 'targetCapacityUnitType', 'spotFleetRequestConfigData_targetCapacityUnitType' - The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+--
+-- 'terminateInstancesWithExpiration', 'spotFleetRequestConfigData_terminateInstancesWithExpiration' - Indicates whether running Spot Instances are terminated when the Spot
+-- Fleet request expires.
+--
+-- 'type'', 'spotFleetRequestConfigData_type' - The type of request. Indicates whether the Spot Fleet only requests the
+-- target capacity or also attempts to maintain it. When this value is
+-- @request@, the Spot Fleet only places the required requests. It does not
+-- attempt to replenish Spot Instances if capacity is diminished, nor does
+-- it submit requests in alternative Spot pools if capacity is not
+-- available. When this value is @maintain@, the Spot Fleet maintains the
+-- target capacity. The Spot Fleet places the required requests to meet
+-- capacity and automatically replenishes any interrupted instances.
+-- Default: @maintain@. @instant@ is listed but is not used by Spot Fleet.
+--
+-- 'validFrom', 'spotFleetRequestConfigData_validFrom' - The start date and time of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). By default, Amazon EC2 starts
+-- fulfilling the request immediately.
+--
+-- 'validUntil', 'spotFleetRequestConfigData_validUntil' - The end date and time of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). After the end date and time, no new
+-- Spot Instance requests are placed or able to fulfill the request. If no
+-- value is specified, the Spot Fleet request remains until you cancel it.
+--
+-- 'iamFleetRole', 'spotFleetRequestConfigData_iamFleetRole' - The Amazon Resource Name (ARN) of an Identity and Access Management
+-- (IAM) role that grants the Spot Fleet the permission to request, launch,
+-- terminate, and tag instances on your behalf. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites Spot Fleet prerequisites>
+-- in the /Amazon EC2 User Guide/. Spot Fleet can terminate Spot Instances
+-- on your behalf when you cancel its Spot Fleet request using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CancelSpotFleetRequests CancelSpotFleetRequests>
+-- or when the Spot Fleet request expires, if you set
+-- @TerminateInstancesWithExpiration@.
+--
+-- 'targetCapacity', 'spotFleetRequestConfigData_targetCapacity' - The number of units to request for the Spot Fleet. You can choose to set
+-- the target capacity in terms of instances or a performance
+-- characteristic that is important to your application workload, such as
+-- vCPUs, memory, or I\/O. If the request type is @maintain@, you can
+-- specify a target capacity of 0 and add capacity later.
+newSpotFleetRequestConfigData ::
+  -- | 'iamFleetRole'
+  Prelude.Text ->
+  -- | 'targetCapacity'
+  Prelude.Int ->
+  SpotFleetRequestConfigData
+newSpotFleetRequestConfigData
+  pIamFleetRole_
+  pTargetCapacity_ =
+    SpotFleetRequestConfigData'
+      { allocationStrategy =
+          Prelude.Nothing,
+        clientToken = Prelude.Nothing,
+        context = Prelude.Nothing,
+        excessCapacityTerminationPolicy =
+          Prelude.Nothing,
+        fulfilledCapacity = Prelude.Nothing,
+        instanceInterruptionBehavior = Prelude.Nothing,
+        instancePoolsToUseCount = Prelude.Nothing,
+        launchSpecifications = Prelude.Nothing,
+        launchTemplateConfigs = Prelude.Nothing,
+        loadBalancersConfig = Prelude.Nothing,
+        onDemandAllocationStrategy = Prelude.Nothing,
+        onDemandFulfilledCapacity = Prelude.Nothing,
+        onDemandMaxTotalPrice = Prelude.Nothing,
+        onDemandTargetCapacity = Prelude.Nothing,
+        replaceUnhealthyInstances = Prelude.Nothing,
+        spotMaintenanceStrategies = Prelude.Nothing,
+        spotMaxTotalPrice = Prelude.Nothing,
+        spotPrice = Prelude.Nothing,
+        tagSpecifications = Prelude.Nothing,
+        targetCapacityUnitType = Prelude.Nothing,
+        terminateInstancesWithExpiration =
+          Prelude.Nothing,
+        type' = Prelude.Nothing,
+        validFrom = Prelude.Nothing,
+        validUntil = Prelude.Nothing,
+        iamFleetRole = pIamFleetRole_,
+        targetCapacity = pTargetCapacity_
+      }
+
+-- | The strategy that determines how to allocate the target Spot Instance
+-- capacity across the Spot Instance pools specified by the Spot Fleet
+-- launch configuration. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- [priceCapacityOptimized (recommended)]
+--     Spot Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term.
+--     Spot Fleet then requests Spot Instances from the lowest priced of
+--     these pools.
+--
+-- [capacityOptimized]
+--     Spot Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. To
+--     give certain instance types a higher chance of launching first, use
+--     @capacityOptimizedPrioritized@. Set a priority for each instance
+--     type by using the @Priority@ parameter for
+--     @LaunchTemplateOverrides@. You can assign the same priority to
+--     different @LaunchTemplateOverrides@. EC2 implements the priorities
+--     on a best-effort basis, but optimizes for capacity first.
+--     @capacityOptimizedPrioritized@ is supported only if your Spot Fleet
+--     uses a launch template. Note that if the
+--     @OnDemandAllocationStrategy@ is set to @prioritized@, the same
+--     priority is applied when fulfilling On-Demand capacity.
+--
+-- [diversified]
+--     Spot Fleet requests instances from all of the Spot Instance pools
+--     that you specify.
+--
+-- [lowestPrice]
+--     Spot Fleet requests instances from the lowest priced Spot Instance
+--     pool that has available capacity. If the lowest priced pool doesn\'t
+--     have available capacity, the Spot Instances come from the next
+--     lowest priced pool that has available capacity. If a pool runs out
+--     of capacity before fulfilling your desired capacity, Spot Fleet will
+--     continue to fulfill your request by drawing from the next lowest
+--     priced pool. To ensure that your desired capacity is met, you might
+--     receive Spot Instances from several pools. Because this strategy
+--     only considers instance price and not capacity availability, it
+--     might lead to high interruption rates.
+--
+-- Default: @lowestPrice@
+spotFleetRequestConfigData_allocationStrategy :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe AllocationStrategy)
+spotFleetRequestConfigData_allocationStrategy = Lens.lens (\SpotFleetRequestConfigData' {allocationStrategy} -> allocationStrategy) (\s@SpotFleetRequestConfigData' {} a -> s {allocationStrategy = a} :: SpotFleetRequestConfigData)
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of your listings. This helps to avoid duplicate listings.
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+spotFleetRequestConfigData_clientToken :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Text)
+spotFleetRequestConfigData_clientToken = Lens.lens (\SpotFleetRequestConfigData' {clientToken} -> clientToken) (\s@SpotFleetRequestConfigData' {} a -> s {clientToken = a} :: SpotFleetRequestConfigData)
+
+-- | Reserved.
+spotFleetRequestConfigData_context :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Text)
+spotFleetRequestConfigData_context = Lens.lens (\SpotFleetRequestConfigData' {context} -> context) (\s@SpotFleetRequestConfigData' {} a -> s {context = a} :: SpotFleetRequestConfigData)
+
+-- | Indicates whether running Spot Instances should be terminated if you
+-- decrease the target capacity of the Spot Fleet request below the current
+-- size of the Spot Fleet.
+spotFleetRequestConfigData_excessCapacityTerminationPolicy :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe ExcessCapacityTerminationPolicy)
+spotFleetRequestConfigData_excessCapacityTerminationPolicy = Lens.lens (\SpotFleetRequestConfigData' {excessCapacityTerminationPolicy} -> excessCapacityTerminationPolicy) (\s@SpotFleetRequestConfigData' {} a -> s {excessCapacityTerminationPolicy = a} :: SpotFleetRequestConfigData)
+
+-- | The number of units fulfilled by this request compared to the set target
+-- capacity. You cannot set this value.
+spotFleetRequestConfigData_fulfilledCapacity :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Double)
+spotFleetRequestConfigData_fulfilledCapacity = Lens.lens (\SpotFleetRequestConfigData' {fulfilledCapacity} -> fulfilledCapacity) (\s@SpotFleetRequestConfigData' {} a -> s {fulfilledCapacity = a} :: SpotFleetRequestConfigData)
+
+-- | The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+spotFleetRequestConfigData_instanceInterruptionBehavior :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe InstanceInterruptionBehavior)
+spotFleetRequestConfigData_instanceInterruptionBehavior = Lens.lens (\SpotFleetRequestConfigData' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@SpotFleetRequestConfigData' {} a -> s {instanceInterruptionBehavior = a} :: SpotFleetRequestConfigData)
+
+-- | The number of Spot pools across which to allocate your target Spot
+-- capacity. Valid only when Spot __AllocationStrategy__ is set to
+-- @lowest-price@. Spot Fleet selects the cheapest Spot pools and evenly
+-- allocates your target Spot capacity across the number of Spot pools that
+-- you specify.
+--
+-- Note that Spot Fleet attempts to draw Spot Instances from the number of
+-- pools that you specify on a best effort basis. If a pool runs out of
+-- Spot capacity before fulfilling your target capacity, Spot Fleet will
+-- continue to fulfill your request by drawing from the next cheapest pool.
+-- To ensure that your target capacity is met, you might receive Spot
+-- Instances from more than the number of pools that you specified.
+-- Similarly, if most of the pools have no Spot capacity, you might receive
+-- your full target capacity from fewer than the number of pools that you
+-- specified.
+spotFleetRequestConfigData_instancePoolsToUseCount :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Int)
+spotFleetRequestConfigData_instancePoolsToUseCount = Lens.lens (\SpotFleetRequestConfigData' {instancePoolsToUseCount} -> instancePoolsToUseCount) (\s@SpotFleetRequestConfigData' {} a -> s {instancePoolsToUseCount = a} :: SpotFleetRequestConfigData)
+
+-- | The launch specifications for the Spot Fleet request. If you specify
+-- @LaunchSpecifications@, you can\'t specify @LaunchTemplateConfigs@. If
+-- you include On-Demand capacity in your request, you must use
+-- @LaunchTemplateConfigs@.
+spotFleetRequestConfigData_launchSpecifications :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe [SpotFleetLaunchSpecification])
+spotFleetRequestConfigData_launchSpecifications = Lens.lens (\SpotFleetRequestConfigData' {launchSpecifications} -> launchSpecifications) (\s@SpotFleetRequestConfigData' {} a -> s {launchSpecifications = a} :: SpotFleetRequestConfigData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The launch template and overrides. If you specify
+-- @LaunchTemplateConfigs@, you can\'t specify @LaunchSpecifications@. If
+-- you include On-Demand capacity in your request, you must use
+-- @LaunchTemplateConfigs@.
+spotFleetRequestConfigData_launchTemplateConfigs :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe [LaunchTemplateConfig])
+spotFleetRequestConfigData_launchTemplateConfigs = Lens.lens (\SpotFleetRequestConfigData' {launchTemplateConfigs} -> launchTemplateConfigs) (\s@SpotFleetRequestConfigData' {} a -> s {launchTemplateConfigs = a} :: SpotFleetRequestConfigData) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more Classic Load Balancers and target groups to attach to the
+-- Spot Fleet request. Spot Fleet registers the running Spot Instances with
+-- the specified Classic Load Balancers and target groups.
+--
+-- With Network Load Balancers, Spot Fleet cannot register instances that
+-- have the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, G1,
+-- G2, HI1, HS1, M1, M2, M3, and T1.
+spotFleetRequestConfigData_loadBalancersConfig :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe LoadBalancersConfig)
+spotFleetRequestConfigData_loadBalancersConfig = Lens.lens (\SpotFleetRequestConfigData' {loadBalancersConfig} -> loadBalancersConfig) (\s@SpotFleetRequestConfigData' {} a -> s {loadBalancersConfig = a} :: SpotFleetRequestConfigData)
+
+-- | The order of the launch template overrides to use in fulfilling
+-- On-Demand capacity. If you specify @lowestPrice@, Spot Fleet uses price
+-- to determine the order, launching the lowest price first. If you specify
+-- @prioritized@, Spot Fleet uses the priority that you assign to each Spot
+-- Fleet launch template override, launching the highest priority first. If
+-- you do not specify a value, Spot Fleet defaults to @lowestPrice@.
+spotFleetRequestConfigData_onDemandAllocationStrategy :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe OnDemandAllocationStrategy)
+spotFleetRequestConfigData_onDemandAllocationStrategy = Lens.lens (\SpotFleetRequestConfigData' {onDemandAllocationStrategy} -> onDemandAllocationStrategy) (\s@SpotFleetRequestConfigData' {} a -> s {onDemandAllocationStrategy = a} :: SpotFleetRequestConfigData)
+
+-- | The number of On-Demand units fulfilled by this request compared to the
+-- set target On-Demand capacity.
+spotFleetRequestConfigData_onDemandFulfilledCapacity :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Double)
+spotFleetRequestConfigData_onDemandFulfilledCapacity = Lens.lens (\SpotFleetRequestConfigData' {onDemandFulfilledCapacity} -> onDemandFulfilledCapacity) (\s@SpotFleetRequestConfigData' {} a -> s {onDemandFulfilledCapacity = a} :: SpotFleetRequestConfigData)
+
+-- | The maximum amount per hour for On-Demand Instances that you\'re willing
+-- to pay. You can use the @onDemandMaxTotalPrice@ parameter, the
+-- @spotMaxTotalPrice@ parameter, or both parameters to ensure that your
+-- fleet cost does not exceed your budget. If you set a maximum price per
+-- hour for the On-Demand Instances and Spot Instances in your request,
+-- Spot Fleet will launch instances until it reaches the maximum amount
+-- you\'re willing to pay. When the maximum amount you\'re willing to pay
+-- is reached, the fleet stops launching instances even if it hasn’t met
+-- the target capacity.
+spotFleetRequestConfigData_onDemandMaxTotalPrice :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Text)
+spotFleetRequestConfigData_onDemandMaxTotalPrice = Lens.lens (\SpotFleetRequestConfigData' {onDemandMaxTotalPrice} -> onDemandMaxTotalPrice) (\s@SpotFleetRequestConfigData' {} a -> s {onDemandMaxTotalPrice = a} :: SpotFleetRequestConfigData)
+
+-- | The number of On-Demand units to request. You can choose to set the
+-- target capacity in terms of instances or a performance characteristic
+-- that is important to your application workload, such as vCPUs, memory,
+-- or I\/O. If the request type is @maintain@, you can specify a target
+-- capacity of 0 and add capacity later.
+spotFleetRequestConfigData_onDemandTargetCapacity :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Int)
+spotFleetRequestConfigData_onDemandTargetCapacity = Lens.lens (\SpotFleetRequestConfigData' {onDemandTargetCapacity} -> onDemandTargetCapacity) (\s@SpotFleetRequestConfigData' {} a -> s {onDemandTargetCapacity = a} :: SpotFleetRequestConfigData)
+
+-- | Indicates whether Spot Fleet should replace unhealthy instances.
+spotFleetRequestConfigData_replaceUnhealthyInstances :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Bool)
+spotFleetRequestConfigData_replaceUnhealthyInstances = Lens.lens (\SpotFleetRequestConfigData' {replaceUnhealthyInstances} -> replaceUnhealthyInstances) (\s@SpotFleetRequestConfigData' {} a -> s {replaceUnhealthyInstances = a} :: SpotFleetRequestConfigData)
+
+-- | The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+spotFleetRequestConfigData_spotMaintenanceStrategies :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe SpotMaintenanceStrategies)
+spotFleetRequestConfigData_spotMaintenanceStrategies = Lens.lens (\SpotFleetRequestConfigData' {spotMaintenanceStrategies} -> spotMaintenanceStrategies) (\s@SpotFleetRequestConfigData' {} a -> s {spotMaintenanceStrategies = a} :: SpotFleetRequestConfigData)
+
+-- | The maximum amount per hour for Spot Instances that you\'re willing to
+-- pay. You can use the @spotdMaxTotalPrice@ parameter, the
+-- @onDemandMaxTotalPrice@ parameter, or both parameters to ensure that
+-- your fleet cost does not exceed your budget. If you set a maximum price
+-- per hour for the On-Demand Instances and Spot Instances in your request,
+-- Spot Fleet will launch instances until it reaches the maximum amount
+-- you\'re willing to pay. When the maximum amount you\'re willing to pay
+-- is reached, the fleet stops launching instances even if it hasn’t met
+-- the target capacity.
+spotFleetRequestConfigData_spotMaxTotalPrice :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Text)
+spotFleetRequestConfigData_spotMaxTotalPrice = Lens.lens (\SpotFleetRequestConfigData' {spotMaxTotalPrice} -> spotMaxTotalPrice) (\s@SpotFleetRequestConfigData' {} a -> s {spotMaxTotalPrice = a} :: SpotFleetRequestConfigData)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+spotFleetRequestConfigData_spotPrice :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Text)
+spotFleetRequestConfigData_spotPrice = Lens.lens (\SpotFleetRequestConfigData' {spotPrice} -> spotPrice) (\s@SpotFleetRequestConfigData' {} a -> s {spotPrice = a} :: SpotFleetRequestConfigData)
+
+-- | 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
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template launch template>
+-- (valid only if you use @LaunchTemplateConfigs@) or in the
+-- @ @<https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetTagSpecification.html SpotFleetTagSpecification>@ @
+-- (valid only if you use @LaunchSpecifications@). For information about
+-- tagging after launch, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources Tagging Your Resources>.
+spotFleetRequestConfigData_tagSpecifications :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe [TagSpecification])
+spotFleetRequestConfigData_tagSpecifications = Lens.lens (\SpotFleetRequestConfigData' {tagSpecifications} -> tagSpecifications) (\s@SpotFleetRequestConfigData' {} a -> s {tagSpecifications = a} :: SpotFleetRequestConfigData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+spotFleetRequestConfigData_targetCapacityUnitType :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe TargetCapacityUnitType)
+spotFleetRequestConfigData_targetCapacityUnitType = Lens.lens (\SpotFleetRequestConfigData' {targetCapacityUnitType} -> targetCapacityUnitType) (\s@SpotFleetRequestConfigData' {} a -> s {targetCapacityUnitType = a} :: SpotFleetRequestConfigData)
+
+-- | Indicates whether running Spot Instances are terminated when the Spot
+-- Fleet request expires.
+spotFleetRequestConfigData_terminateInstancesWithExpiration :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.Bool)
+spotFleetRequestConfigData_terminateInstancesWithExpiration = Lens.lens (\SpotFleetRequestConfigData' {terminateInstancesWithExpiration} -> terminateInstancesWithExpiration) (\s@SpotFleetRequestConfigData' {} a -> s {terminateInstancesWithExpiration = a} :: SpotFleetRequestConfigData)
+
+-- | The type of request. Indicates whether the Spot Fleet only requests the
+-- target capacity or also attempts to maintain it. When this value is
+-- @request@, the Spot Fleet only places the required requests. It does not
+-- attempt to replenish Spot Instances if capacity is diminished, nor does
+-- it submit requests in alternative Spot pools if capacity is not
+-- available. When this value is @maintain@, the Spot Fleet maintains the
+-- target capacity. The Spot Fleet places the required requests to meet
+-- capacity and automatically replenishes any interrupted instances.
+-- Default: @maintain@. @instant@ is listed but is not used by Spot Fleet.
+spotFleetRequestConfigData_type :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe FleetType)
+spotFleetRequestConfigData_type = Lens.lens (\SpotFleetRequestConfigData' {type'} -> type') (\s@SpotFleetRequestConfigData' {} a -> s {type' = a} :: SpotFleetRequestConfigData)
+
+-- | The start date and time of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). By default, Amazon EC2 starts
+-- fulfilling the request immediately.
+spotFleetRequestConfigData_validFrom :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.UTCTime)
+spotFleetRequestConfigData_validFrom = Lens.lens (\SpotFleetRequestConfigData' {validFrom} -> validFrom) (\s@SpotFleetRequestConfigData' {} a -> s {validFrom = a} :: SpotFleetRequestConfigData) Prelude.. Lens.mapping Data._Time
+
+-- | The end date and time of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). After the end date and time, no new
+-- Spot Instance requests are placed or able to fulfill the request. If no
+-- value is specified, the Spot Fleet request remains until you cancel it.
+spotFleetRequestConfigData_validUntil :: Lens.Lens' SpotFleetRequestConfigData (Prelude.Maybe Prelude.UTCTime)
+spotFleetRequestConfigData_validUntil = Lens.lens (\SpotFleetRequestConfigData' {validUntil} -> validUntil) (\s@SpotFleetRequestConfigData' {} a -> s {validUntil = a} :: SpotFleetRequestConfigData) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon Resource Name (ARN) of an Identity and Access Management
+-- (IAM) role that grants the Spot Fleet the permission to request, launch,
+-- terminate, and tag instances on your behalf. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites Spot Fleet prerequisites>
+-- in the /Amazon EC2 User Guide/. Spot Fleet can terminate Spot Instances
+-- on your behalf when you cancel its Spot Fleet request using
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CancelSpotFleetRequests CancelSpotFleetRequests>
+-- or when the Spot Fleet request expires, if you set
+-- @TerminateInstancesWithExpiration@.
+spotFleetRequestConfigData_iamFleetRole :: Lens.Lens' SpotFleetRequestConfigData Prelude.Text
+spotFleetRequestConfigData_iamFleetRole = Lens.lens (\SpotFleetRequestConfigData' {iamFleetRole} -> iamFleetRole) (\s@SpotFleetRequestConfigData' {} a -> s {iamFleetRole = a} :: SpotFleetRequestConfigData)
+
+-- | The number of units to request for the Spot Fleet. You can choose to set
+-- the target capacity in terms of instances or a performance
+-- characteristic that is important to your application workload, such as
+-- vCPUs, memory, or I\/O. If the request type is @maintain@, you can
+-- specify a target capacity of 0 and add capacity later.
+spotFleetRequestConfigData_targetCapacity :: Lens.Lens' SpotFleetRequestConfigData Prelude.Int
+spotFleetRequestConfigData_targetCapacity = Lens.lens (\SpotFleetRequestConfigData' {targetCapacity} -> targetCapacity) (\s@SpotFleetRequestConfigData' {} a -> s {targetCapacity = a} :: SpotFleetRequestConfigData)
+
+instance Data.FromXML SpotFleetRequestConfigData where
+  parseXML x =
+    SpotFleetRequestConfigData'
+      Prelude.<$> (x Data..@? "allocationStrategy")
+      Prelude.<*> (x Data..@? "clientToken")
+      Prelude.<*> (x Data..@? "context")
+      Prelude.<*> (x Data..@? "excessCapacityTerminationPolicy")
+      Prelude.<*> (x Data..@? "fulfilledCapacity")
+      Prelude.<*> (x Data..@? "instanceInterruptionBehavior")
+      Prelude.<*> (x Data..@? "instancePoolsToUseCount")
+      Prelude.<*> ( x
+                      Data..@? "launchSpecifications"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "launchTemplateConfigs"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "loadBalancersConfig")
+      Prelude.<*> (x Data..@? "onDemandAllocationStrategy")
+      Prelude.<*> (x Data..@? "onDemandFulfilledCapacity")
+      Prelude.<*> (x Data..@? "onDemandMaxTotalPrice")
+      Prelude.<*> (x Data..@? "onDemandTargetCapacity")
+      Prelude.<*> (x Data..@? "replaceUnhealthyInstances")
+      Prelude.<*> (x Data..@? "spotMaintenanceStrategies")
+      Prelude.<*> (x Data..@? "spotMaxTotalPrice")
+      Prelude.<*> (x Data..@? "spotPrice")
+      Prelude.<*> ( x
+                      Data..@? "TagSpecification"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "targetCapacityUnitType")
+      Prelude.<*> (x Data..@? "terminateInstancesWithExpiration")
+      Prelude.<*> (x Data..@? "type")
+      Prelude.<*> (x Data..@? "validFrom")
+      Prelude.<*> (x Data..@? "validUntil")
+      Prelude.<*> (x Data..@ "iamFleetRole")
+      Prelude.<*> (x Data..@ "targetCapacity")
+
+instance Prelude.Hashable SpotFleetRequestConfigData where
+  hashWithSalt _salt SpotFleetRequestConfigData' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationStrategy
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` context
+      `Prelude.hashWithSalt` excessCapacityTerminationPolicy
+      `Prelude.hashWithSalt` fulfilledCapacity
+      `Prelude.hashWithSalt` instanceInterruptionBehavior
+      `Prelude.hashWithSalt` instancePoolsToUseCount
+      `Prelude.hashWithSalt` launchSpecifications
+      `Prelude.hashWithSalt` launchTemplateConfigs
+      `Prelude.hashWithSalt` loadBalancersConfig
+      `Prelude.hashWithSalt` onDemandAllocationStrategy
+      `Prelude.hashWithSalt` onDemandFulfilledCapacity
+      `Prelude.hashWithSalt` onDemandMaxTotalPrice
+      `Prelude.hashWithSalt` onDemandTargetCapacity
+      `Prelude.hashWithSalt` replaceUnhealthyInstances
+      `Prelude.hashWithSalt` spotMaintenanceStrategies
+      `Prelude.hashWithSalt` spotMaxTotalPrice
+      `Prelude.hashWithSalt` spotPrice
+      `Prelude.hashWithSalt` tagSpecifications
+      `Prelude.hashWithSalt` targetCapacityUnitType
+      `Prelude.hashWithSalt` terminateInstancesWithExpiration
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validFrom
+      `Prelude.hashWithSalt` validUntil
+      `Prelude.hashWithSalt` iamFleetRole
+      `Prelude.hashWithSalt` targetCapacity
+
+instance Prelude.NFData SpotFleetRequestConfigData where
+  rnf SpotFleetRequestConfigData' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf context
+      `Prelude.seq` Prelude.rnf excessCapacityTerminationPolicy
+      `Prelude.seq` Prelude.rnf fulfilledCapacity
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf instancePoolsToUseCount
+      `Prelude.seq` Prelude.rnf launchSpecifications
+      `Prelude.seq` Prelude.rnf launchTemplateConfigs
+      `Prelude.seq` Prelude.rnf loadBalancersConfig
+      `Prelude.seq` Prelude.rnf onDemandAllocationStrategy
+      `Prelude.seq` Prelude.rnf onDemandFulfilledCapacity
+      `Prelude.seq` Prelude.rnf onDemandMaxTotalPrice
+      `Prelude.seq` Prelude.rnf onDemandTargetCapacity
+      `Prelude.seq` Prelude.rnf replaceUnhealthyInstances
+      `Prelude.seq` Prelude.rnf spotMaintenanceStrategies
+      `Prelude.seq` Prelude.rnf spotMaxTotalPrice
+      `Prelude.seq` Prelude.rnf spotPrice
+      `Prelude.seq` Prelude.rnf tagSpecifications
+      `Prelude.seq` Prelude.rnf
+        targetCapacityUnitType
+      `Prelude.seq` Prelude.rnf
+        terminateInstancesWithExpiration
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validFrom
+      `Prelude.seq` Prelude.rnf validUntil
+      `Prelude.seq` Prelude.rnf
+        iamFleetRole
+      `Prelude.seq` Prelude.rnf
+        targetCapacity
+
+instance Data.ToQuery SpotFleetRequestConfigData where
+  toQuery SpotFleetRequestConfigData' {..} =
+    Prelude.mconcat
+      [ "AllocationStrategy" Data.=: allocationStrategy,
+        "ClientToken" Data.=: clientToken,
+        "Context" Data.=: context,
+        "ExcessCapacityTerminationPolicy"
+          Data.=: excessCapacityTerminationPolicy,
+        "FulfilledCapacity" Data.=: fulfilledCapacity,
+        "InstanceInterruptionBehavior"
+          Data.=: instanceInterruptionBehavior,
+        "InstancePoolsToUseCount"
+          Data.=: instancePoolsToUseCount,
+        Data.toQuery
+          ( Data.toQueryList "LaunchSpecifications"
+              Prelude.<$> launchSpecifications
+          ),
+        Data.toQuery
+          ( Data.toQueryList "LaunchTemplateConfigs"
+              Prelude.<$> launchTemplateConfigs
+          ),
+        "LoadBalancersConfig" Data.=: loadBalancersConfig,
+        "OnDemandAllocationStrategy"
+          Data.=: onDemandAllocationStrategy,
+        "OnDemandFulfilledCapacity"
+          Data.=: onDemandFulfilledCapacity,
+        "OnDemandMaxTotalPrice"
+          Data.=: onDemandMaxTotalPrice,
+        "OnDemandTargetCapacity"
+          Data.=: onDemandTargetCapacity,
+        "ReplaceUnhealthyInstances"
+          Data.=: replaceUnhealthyInstances,
+        "SpotMaintenanceStrategies"
+          Data.=: spotMaintenanceStrategies,
+        "SpotMaxTotalPrice" Data.=: spotMaxTotalPrice,
+        "SpotPrice" Data.=: spotPrice,
+        Data.toQuery
+          ( Data.toQueryList "TagSpecification"
+              Prelude.<$> tagSpecifications
+          ),
+        "TargetCapacityUnitType"
+          Data.=: targetCapacityUnitType,
+        "TerminateInstancesWithExpiration"
+          Data.=: terminateInstancesWithExpiration,
+        "Type" Data.=: type',
+        "ValidFrom" Data.=: validFrom,
+        "ValidUntil" Data.=: validUntil,
+        "IamFleetRole" Data.=: iamFleetRole,
+        "TargetCapacity" Data.=: targetCapacity
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotFleetTagSpecification.hs b/gen/Amazonka/EC2/Types/SpotFleetTagSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotFleetTagSpecification.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotFleetTagSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotFleetTagSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tags for a Spot Fleet resource.
+--
+-- /See:/ 'newSpotFleetTagSpecification' smart constructor.
+data SpotFleetTagSpecification = SpotFleetTagSpecification'
+  { -- | 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
+    -- @ @<https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetRequestConfigData.html SpotFleetRequestConfigData>@ @.
+    resourceType :: Prelude.Maybe ResourceType,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotFleetTagSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceType', 'spotFleetTagSpecification_resourceType' - 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
+-- @ @<https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetRequestConfigData.html SpotFleetRequestConfigData>@ @.
+--
+-- 'tags', 'spotFleetTagSpecification_tags' - The tags.
+newSpotFleetTagSpecification ::
+  SpotFleetTagSpecification
+newSpotFleetTagSpecification =
+  SpotFleetTagSpecification'
+    { resourceType =
+        Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | 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
+-- @ @<https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetRequestConfigData.html SpotFleetRequestConfigData>@ @.
+spotFleetTagSpecification_resourceType :: Lens.Lens' SpotFleetTagSpecification (Prelude.Maybe ResourceType)
+spotFleetTagSpecification_resourceType = Lens.lens (\SpotFleetTagSpecification' {resourceType} -> resourceType) (\s@SpotFleetTagSpecification' {} a -> s {resourceType = a} :: SpotFleetTagSpecification)
+
+-- | The tags.
+spotFleetTagSpecification_tags :: Lens.Lens' SpotFleetTagSpecification (Prelude.Maybe [Tag])
+spotFleetTagSpecification_tags = Lens.lens (\SpotFleetTagSpecification' {tags} -> tags) (\s@SpotFleetTagSpecification' {} a -> s {tags = a} :: SpotFleetTagSpecification) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML SpotFleetTagSpecification where
+  parseXML x =
+    SpotFleetTagSpecification'
+      Prelude.<$> (x Data..@? "resourceType")
+      Prelude.<*> ( x
+                      Data..@? "tag"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable SpotFleetTagSpecification where
+  hashWithSalt _salt SpotFleetTagSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData SpotFleetTagSpecification where
+  rnf SpotFleetTagSpecification' {..} =
+    Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToQuery SpotFleetTagSpecification where
+  toQuery SpotFleetTagSpecification' {..} =
+    Prelude.mconcat
+      [ "ResourceType" Data.=: resourceType,
+        Data.toQuery
+          (Data.toQueryList "Tag" Prelude.<$> tags)
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotInstanceInterruptionBehavior.hs b/gen/Amazonka/EC2/Types/SpotInstanceInterruptionBehavior.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotInstanceInterruptionBehavior.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotInstanceInterruptionBehavior
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotInstanceInterruptionBehavior
+  ( SpotInstanceInterruptionBehavior
+      ( ..,
+        SpotInstanceInterruptionBehavior_Hibernate,
+        SpotInstanceInterruptionBehavior_Stop,
+        SpotInstanceInterruptionBehavior_Terminate
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SpotInstanceInterruptionBehavior = SpotInstanceInterruptionBehavior'
+  { fromSpotInstanceInterruptionBehavior ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SpotInstanceInterruptionBehavior_Hibernate :: SpotInstanceInterruptionBehavior
+pattern SpotInstanceInterruptionBehavior_Hibernate = SpotInstanceInterruptionBehavior' "hibernate"
+
+pattern SpotInstanceInterruptionBehavior_Stop :: SpotInstanceInterruptionBehavior
+pattern SpotInstanceInterruptionBehavior_Stop = SpotInstanceInterruptionBehavior' "stop"
+
+pattern SpotInstanceInterruptionBehavior_Terminate :: SpotInstanceInterruptionBehavior
+pattern SpotInstanceInterruptionBehavior_Terminate = SpotInstanceInterruptionBehavior' "terminate"
+
+{-# COMPLETE
+  SpotInstanceInterruptionBehavior_Hibernate,
+  SpotInstanceInterruptionBehavior_Stop,
+  SpotInstanceInterruptionBehavior_Terminate,
+  SpotInstanceInterruptionBehavior'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SpotInstanceRequest.hs b/gen/Amazonka/EC2/Types/SpotInstanceRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotInstanceRequest.hs
@@ -0,0 +1,376 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotInstanceRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotInstanceRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceInterruptionBehavior
+import Amazonka.EC2.Types.LaunchSpecification
+import Amazonka.EC2.Types.RIProductDescription
+import Amazonka.EC2.Types.SpotInstanceState
+import Amazonka.EC2.Types.SpotInstanceStateFault
+import Amazonka.EC2.Types.SpotInstanceStatus
+import Amazonka.EC2.Types.SpotInstanceType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Spot Instance request.
+--
+-- /See:/ 'newSpotInstanceRequest' smart constructor.
+data SpotInstanceRequest = SpotInstanceRequest'
+  { -- | Deprecated.
+    actualBlockHourlyPrice :: Prelude.Maybe Prelude.Text,
+    -- | The Availability Zone group. If you specify the same Availability Zone
+    -- group for all Spot Instance requests, all Spot Instances are launched in
+    -- the same Availability Zone.
+    availabilityZoneGroup :: Prelude.Maybe Prelude.Text,
+    -- | Deprecated.
+    blockDurationMinutes :: Prelude.Maybe Prelude.Int,
+    -- | The date and time when the Spot Instance request was created, in UTC
+    -- format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    createTime :: Prelude.Maybe Data.ISO8601,
+    -- | The fault codes for the Spot Instance request, if any.
+    fault :: Prelude.Maybe SpotInstanceStateFault,
+    -- | The instance ID, if an instance has been launched to fulfill the Spot
+    -- Instance request.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The behavior when a Spot Instance is interrupted.
+    instanceInterruptionBehavior :: Prelude.Maybe InstanceInterruptionBehavior,
+    -- | The instance launch group. Launch groups are Spot Instances that launch
+    -- together and terminate together.
+    launchGroup :: Prelude.Maybe Prelude.Text,
+    -- | Additional information for launching instances.
+    launchSpecification :: Prelude.Maybe LaunchSpecification,
+    -- | The Availability Zone in which the request is launched.
+    launchedAvailabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The product description associated with the Spot Instance.
+    productDescription :: Prelude.Maybe RIProductDescription,
+    -- | The ID of the Spot Instance request.
+    spotInstanceRequestId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    spotPrice :: Prelude.Maybe Prelude.Text,
+    -- | The state of the Spot Instance request. Spot request status information
+    -- helps track your Spot Instance requests. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html Spot request status>
+    -- in the /Amazon EC2 User Guide for Linux Instances/.
+    state :: Prelude.Maybe SpotInstanceState,
+    -- | The status code and status message describing the Spot Instance request.
+    status :: Prelude.Maybe SpotInstanceStatus,
+    -- | Any tags assigned to the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The Spot Instance request type.
+    type' :: Prelude.Maybe SpotInstanceType,
+    -- | The start date of the request, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The request becomes active at this
+    -- date and time.
+    validFrom :: Prelude.Maybe Data.ISO8601,
+    -- | The end date of the request, in UTC format
+    -- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    --
+    -- -   For a persistent request, the request remains active until the
+    --     @validUntil@ date and time is reached. Otherwise, the request
+    --     remains active until you cancel it.
+    --
+    -- -   For a one-time request, the request remains active until all
+    --     instances launch, the request is canceled, or the @validUntil@ date
+    --     and time is reached. By default, the request is valid for 7 days
+    --     from the date the request was created.
+    validUntil :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotInstanceRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actualBlockHourlyPrice', 'spotInstanceRequest_actualBlockHourlyPrice' - Deprecated.
+--
+-- 'availabilityZoneGroup', 'spotInstanceRequest_availabilityZoneGroup' - The Availability Zone group. If you specify the same Availability Zone
+-- group for all Spot Instance requests, all Spot Instances are launched in
+-- the same Availability Zone.
+--
+-- 'blockDurationMinutes', 'spotInstanceRequest_blockDurationMinutes' - Deprecated.
+--
+-- 'createTime', 'spotInstanceRequest_createTime' - The date and time when the Spot Instance request was created, in UTC
+-- format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- 'fault', 'spotInstanceRequest_fault' - The fault codes for the Spot Instance request, if any.
+--
+-- 'instanceId', 'spotInstanceRequest_instanceId' - The instance ID, if an instance has been launched to fulfill the Spot
+-- Instance request.
+--
+-- 'instanceInterruptionBehavior', 'spotInstanceRequest_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted.
+--
+-- 'launchGroup', 'spotInstanceRequest_launchGroup' - The instance launch group. Launch groups are Spot Instances that launch
+-- together and terminate together.
+--
+-- 'launchSpecification', 'spotInstanceRequest_launchSpecification' - Additional information for launching instances.
+--
+-- 'launchedAvailabilityZone', 'spotInstanceRequest_launchedAvailabilityZone' - The Availability Zone in which the request is launched.
+--
+-- 'productDescription', 'spotInstanceRequest_productDescription' - The product description associated with the Spot Instance.
+--
+-- 'spotInstanceRequestId', 'spotInstanceRequest_spotInstanceRequestId' - The ID of the Spot Instance request.
+--
+-- 'spotPrice', 'spotInstanceRequest_spotPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'state', 'spotInstanceRequest_state' - The state of the Spot Instance request. Spot request status information
+-- helps track your Spot Instance requests. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html Spot request status>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- 'status', 'spotInstanceRequest_status' - The status code and status message describing the Spot Instance request.
+--
+-- 'tags', 'spotInstanceRequest_tags' - Any tags assigned to the resource.
+--
+-- 'type'', 'spotInstanceRequest_type' - The Spot Instance request type.
+--
+-- 'validFrom', 'spotInstanceRequest_validFrom' - The start date of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The request becomes active at this
+-- date and time.
+--
+-- 'validUntil', 'spotInstanceRequest_validUntil' - The end date of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- -   For a persistent request, the request remains active until the
+--     @validUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, the request remains active until all
+--     instances launch, the request is canceled, or the @validUntil@ date
+--     and time is reached. By default, the request is valid for 7 days
+--     from the date the request was created.
+newSpotInstanceRequest ::
+  SpotInstanceRequest
+newSpotInstanceRequest =
+  SpotInstanceRequest'
+    { actualBlockHourlyPrice =
+        Prelude.Nothing,
+      availabilityZoneGroup = Prelude.Nothing,
+      blockDurationMinutes = Prelude.Nothing,
+      createTime = Prelude.Nothing,
+      fault = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      instanceInterruptionBehavior = Prelude.Nothing,
+      launchGroup = Prelude.Nothing,
+      launchSpecification = Prelude.Nothing,
+      launchedAvailabilityZone = Prelude.Nothing,
+      productDescription = Prelude.Nothing,
+      spotInstanceRequestId = Prelude.Nothing,
+      spotPrice = Prelude.Nothing,
+      state = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      validFrom = Prelude.Nothing,
+      validUntil = Prelude.Nothing
+    }
+
+-- | Deprecated.
+spotInstanceRequest_actualBlockHourlyPrice :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_actualBlockHourlyPrice = Lens.lens (\SpotInstanceRequest' {actualBlockHourlyPrice} -> actualBlockHourlyPrice) (\s@SpotInstanceRequest' {} a -> s {actualBlockHourlyPrice = a} :: SpotInstanceRequest)
+
+-- | The Availability Zone group. If you specify the same Availability Zone
+-- group for all Spot Instance requests, all Spot Instances are launched in
+-- the same Availability Zone.
+spotInstanceRequest_availabilityZoneGroup :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_availabilityZoneGroup = Lens.lens (\SpotInstanceRequest' {availabilityZoneGroup} -> availabilityZoneGroup) (\s@SpotInstanceRequest' {} a -> s {availabilityZoneGroup = a} :: SpotInstanceRequest)
+
+-- | Deprecated.
+spotInstanceRequest_blockDurationMinutes :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Int)
+spotInstanceRequest_blockDurationMinutes = Lens.lens (\SpotInstanceRequest' {blockDurationMinutes} -> blockDurationMinutes) (\s@SpotInstanceRequest' {} a -> s {blockDurationMinutes = a} :: SpotInstanceRequest)
+
+-- | The date and time when the Spot Instance request was created, in UTC
+-- format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+spotInstanceRequest_createTime :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.UTCTime)
+spotInstanceRequest_createTime = Lens.lens (\SpotInstanceRequest' {createTime} -> createTime) (\s@SpotInstanceRequest' {} a -> s {createTime = a} :: SpotInstanceRequest) Prelude.. Lens.mapping Data._Time
+
+-- | The fault codes for the Spot Instance request, if any.
+spotInstanceRequest_fault :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe SpotInstanceStateFault)
+spotInstanceRequest_fault = Lens.lens (\SpotInstanceRequest' {fault} -> fault) (\s@SpotInstanceRequest' {} a -> s {fault = a} :: SpotInstanceRequest)
+
+-- | The instance ID, if an instance has been launched to fulfill the Spot
+-- Instance request.
+spotInstanceRequest_instanceId :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_instanceId = Lens.lens (\SpotInstanceRequest' {instanceId} -> instanceId) (\s@SpotInstanceRequest' {} a -> s {instanceId = a} :: SpotInstanceRequest)
+
+-- | The behavior when a Spot Instance is interrupted.
+spotInstanceRequest_instanceInterruptionBehavior :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe InstanceInterruptionBehavior)
+spotInstanceRequest_instanceInterruptionBehavior = Lens.lens (\SpotInstanceRequest' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@SpotInstanceRequest' {} a -> s {instanceInterruptionBehavior = a} :: SpotInstanceRequest)
+
+-- | The instance launch group. Launch groups are Spot Instances that launch
+-- together and terminate together.
+spotInstanceRequest_launchGroup :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_launchGroup = Lens.lens (\SpotInstanceRequest' {launchGroup} -> launchGroup) (\s@SpotInstanceRequest' {} a -> s {launchGroup = a} :: SpotInstanceRequest)
+
+-- | Additional information for launching instances.
+spotInstanceRequest_launchSpecification :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe LaunchSpecification)
+spotInstanceRequest_launchSpecification = Lens.lens (\SpotInstanceRequest' {launchSpecification} -> launchSpecification) (\s@SpotInstanceRequest' {} a -> s {launchSpecification = a} :: SpotInstanceRequest)
+
+-- | The Availability Zone in which the request is launched.
+spotInstanceRequest_launchedAvailabilityZone :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_launchedAvailabilityZone = Lens.lens (\SpotInstanceRequest' {launchedAvailabilityZone} -> launchedAvailabilityZone) (\s@SpotInstanceRequest' {} a -> s {launchedAvailabilityZone = a} :: SpotInstanceRequest)
+
+-- | The product description associated with the Spot Instance.
+spotInstanceRequest_productDescription :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe RIProductDescription)
+spotInstanceRequest_productDescription = Lens.lens (\SpotInstanceRequest' {productDescription} -> productDescription) (\s@SpotInstanceRequest' {} a -> s {productDescription = a} :: SpotInstanceRequest)
+
+-- | The ID of the Spot Instance request.
+spotInstanceRequest_spotInstanceRequestId :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_spotInstanceRequestId = Lens.lens (\SpotInstanceRequest' {spotInstanceRequestId} -> spotInstanceRequestId) (\s@SpotInstanceRequest' {} a -> s {spotInstanceRequestId = a} :: SpotInstanceRequest)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+spotInstanceRequest_spotPrice :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.Text)
+spotInstanceRequest_spotPrice = Lens.lens (\SpotInstanceRequest' {spotPrice} -> spotPrice) (\s@SpotInstanceRequest' {} a -> s {spotPrice = a} :: SpotInstanceRequest)
+
+-- | The state of the Spot Instance request. Spot request status information
+-- helps track your Spot Instance requests. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html Spot request status>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+spotInstanceRequest_state :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe SpotInstanceState)
+spotInstanceRequest_state = Lens.lens (\SpotInstanceRequest' {state} -> state) (\s@SpotInstanceRequest' {} a -> s {state = a} :: SpotInstanceRequest)
+
+-- | The status code and status message describing the Spot Instance request.
+spotInstanceRequest_status :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe SpotInstanceStatus)
+spotInstanceRequest_status = Lens.lens (\SpotInstanceRequest' {status} -> status) (\s@SpotInstanceRequest' {} a -> s {status = a} :: SpotInstanceRequest)
+
+-- | Any tags assigned to the resource.
+spotInstanceRequest_tags :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe [Tag])
+spotInstanceRequest_tags = Lens.lens (\SpotInstanceRequest' {tags} -> tags) (\s@SpotInstanceRequest' {} a -> s {tags = a} :: SpotInstanceRequest) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Spot Instance request type.
+spotInstanceRequest_type :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe SpotInstanceType)
+spotInstanceRequest_type = Lens.lens (\SpotInstanceRequest' {type'} -> type') (\s@SpotInstanceRequest' {} a -> s {type' = a} :: SpotInstanceRequest)
+
+-- | The start date of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The request becomes active at this
+-- date and time.
+spotInstanceRequest_validFrom :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.UTCTime)
+spotInstanceRequest_validFrom = Lens.lens (\SpotInstanceRequest' {validFrom} -> validFrom) (\s@SpotInstanceRequest' {} a -> s {validFrom = a} :: SpotInstanceRequest) Prelude.. Lens.mapping Data._Time
+
+-- | The end date of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+--
+-- -   For a persistent request, the request remains active until the
+--     @validUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, the request remains active until all
+--     instances launch, the request is canceled, or the @validUntil@ date
+--     and time is reached. By default, the request is valid for 7 days
+--     from the date the request was created.
+spotInstanceRequest_validUntil :: Lens.Lens' SpotInstanceRequest (Prelude.Maybe Prelude.UTCTime)
+spotInstanceRequest_validUntil = Lens.lens (\SpotInstanceRequest' {validUntil} -> validUntil) (\s@SpotInstanceRequest' {} a -> s {validUntil = a} :: SpotInstanceRequest) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML SpotInstanceRequest where
+  parseXML x =
+    SpotInstanceRequest'
+      Prelude.<$> (x Data..@? "actualBlockHourlyPrice")
+      Prelude.<*> (x Data..@? "availabilityZoneGroup")
+      Prelude.<*> (x Data..@? "blockDurationMinutes")
+      Prelude.<*> (x Data..@? "createTime")
+      Prelude.<*> (x Data..@? "fault")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "instanceInterruptionBehavior")
+      Prelude.<*> (x Data..@? "launchGroup")
+      Prelude.<*> (x Data..@? "launchSpecification")
+      Prelude.<*> (x Data..@? "launchedAvailabilityZone")
+      Prelude.<*> (x Data..@? "productDescription")
+      Prelude.<*> (x Data..@? "spotInstanceRequestId")
+      Prelude.<*> (x Data..@? "spotPrice")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "type")
+      Prelude.<*> (x Data..@? "validFrom")
+      Prelude.<*> (x Data..@? "validUntil")
+
+instance Prelude.Hashable SpotInstanceRequest where
+  hashWithSalt _salt SpotInstanceRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` actualBlockHourlyPrice
+      `Prelude.hashWithSalt` availabilityZoneGroup
+      `Prelude.hashWithSalt` blockDurationMinutes
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` fault
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` instanceInterruptionBehavior
+      `Prelude.hashWithSalt` launchGroup
+      `Prelude.hashWithSalt` launchSpecification
+      `Prelude.hashWithSalt` launchedAvailabilityZone
+      `Prelude.hashWithSalt` productDescription
+      `Prelude.hashWithSalt` spotInstanceRequestId
+      `Prelude.hashWithSalt` spotPrice
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` validFrom
+      `Prelude.hashWithSalt` validUntil
+
+instance Prelude.NFData SpotInstanceRequest where
+  rnf SpotInstanceRequest' {..} =
+    Prelude.rnf actualBlockHourlyPrice
+      `Prelude.seq` Prelude.rnf availabilityZoneGroup
+      `Prelude.seq` Prelude.rnf blockDurationMinutes
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf fault
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf launchGroup
+      `Prelude.seq` Prelude.rnf launchSpecification
+      `Prelude.seq` Prelude.rnf launchedAvailabilityZone
+      `Prelude.seq` Prelude.rnf productDescription
+      `Prelude.seq` Prelude.rnf spotInstanceRequestId
+      `Prelude.seq` Prelude.rnf spotPrice
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf validFrom
+      `Prelude.seq` Prelude.rnf validUntil
diff --git a/gen/Amazonka/EC2/Types/SpotInstanceState.hs b/gen/Amazonka/EC2/Types/SpotInstanceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotInstanceState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotInstanceState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotInstanceState
+  ( SpotInstanceState
+      ( ..,
+        SpotInstanceState_Active,
+        SpotInstanceState_Cancelled,
+        SpotInstanceState_Closed,
+        SpotInstanceState_Failed,
+        SpotInstanceState_Open
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SpotInstanceState = SpotInstanceState'
+  { fromSpotInstanceState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SpotInstanceState_Active :: SpotInstanceState
+pattern SpotInstanceState_Active = SpotInstanceState' "active"
+
+pattern SpotInstanceState_Cancelled :: SpotInstanceState
+pattern SpotInstanceState_Cancelled = SpotInstanceState' "cancelled"
+
+pattern SpotInstanceState_Closed :: SpotInstanceState
+pattern SpotInstanceState_Closed = SpotInstanceState' "closed"
+
+pattern SpotInstanceState_Failed :: SpotInstanceState
+pattern SpotInstanceState_Failed = SpotInstanceState' "failed"
+
+pattern SpotInstanceState_Open :: SpotInstanceState
+pattern SpotInstanceState_Open = SpotInstanceState' "open"
+
+{-# COMPLETE
+  SpotInstanceState_Active,
+  SpotInstanceState_Cancelled,
+  SpotInstanceState_Closed,
+  SpotInstanceState_Failed,
+  SpotInstanceState_Open,
+  SpotInstanceState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SpotInstanceStateFault.hs b/gen/Amazonka/EC2/Types/SpotInstanceStateFault.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotInstanceStateFault.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotInstanceStateFault
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotInstanceStateFault where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Spot Instance state change.
+--
+-- /See:/ 'newSpotInstanceStateFault' smart constructor.
+data SpotInstanceStateFault = SpotInstanceStateFault'
+  { -- | The reason code for the Spot Instance state change.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The message for the Spot Instance state change.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotInstanceStateFault' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'spotInstanceStateFault_code' - The reason code for the Spot Instance state change.
+--
+-- 'message', 'spotInstanceStateFault_message' - The message for the Spot Instance state change.
+newSpotInstanceStateFault ::
+  SpotInstanceStateFault
+newSpotInstanceStateFault =
+  SpotInstanceStateFault'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The reason code for the Spot Instance state change.
+spotInstanceStateFault_code :: Lens.Lens' SpotInstanceStateFault (Prelude.Maybe Prelude.Text)
+spotInstanceStateFault_code = Lens.lens (\SpotInstanceStateFault' {code} -> code) (\s@SpotInstanceStateFault' {} a -> s {code = a} :: SpotInstanceStateFault)
+
+-- | The message for the Spot Instance state change.
+spotInstanceStateFault_message :: Lens.Lens' SpotInstanceStateFault (Prelude.Maybe Prelude.Text)
+spotInstanceStateFault_message = Lens.lens (\SpotInstanceStateFault' {message} -> message) (\s@SpotInstanceStateFault' {} a -> s {message = a} :: SpotInstanceStateFault)
+
+instance Data.FromXML SpotInstanceStateFault where
+  parseXML x =
+    SpotInstanceStateFault'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable SpotInstanceStateFault where
+  hashWithSalt _salt SpotInstanceStateFault' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData SpotInstanceStateFault where
+  rnf SpotInstanceStateFault' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/SpotInstanceStatus.hs b/gen/Amazonka/EC2/Types/SpotInstanceStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotInstanceStatus.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotInstanceStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotInstanceStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of a Spot Instance request.
+--
+-- /See:/ 'newSpotInstanceStatus' smart constructor.
+data SpotInstanceStatus = SpotInstanceStatus'
+  { -- | The status code. For a list of status codes, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand Spot request status codes>
+    -- in the /Amazon EC2 User Guide for Linux Instances/.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The description for the status code.
+    message :: Prelude.Maybe Prelude.Text,
+    -- | The date and time of the most recent status update, in UTC format (for
+    -- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    updateTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotInstanceStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'spotInstanceStatus_code' - The status code. For a list of status codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand Spot request status codes>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+--
+-- 'message', 'spotInstanceStatus_message' - The description for the status code.
+--
+-- 'updateTime', 'spotInstanceStatus_updateTime' - The date and time of the most recent status update, in UTC format (for
+-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newSpotInstanceStatus ::
+  SpotInstanceStatus
+newSpotInstanceStatus =
+  SpotInstanceStatus'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing,
+      updateTime = Prelude.Nothing
+    }
+
+-- | The status code. For a list of status codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand Spot request status codes>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+spotInstanceStatus_code :: Lens.Lens' SpotInstanceStatus (Prelude.Maybe Prelude.Text)
+spotInstanceStatus_code = Lens.lens (\SpotInstanceStatus' {code} -> code) (\s@SpotInstanceStatus' {} a -> s {code = a} :: SpotInstanceStatus)
+
+-- | The description for the status code.
+spotInstanceStatus_message :: Lens.Lens' SpotInstanceStatus (Prelude.Maybe Prelude.Text)
+spotInstanceStatus_message = Lens.lens (\SpotInstanceStatus' {message} -> message) (\s@SpotInstanceStatus' {} a -> s {message = a} :: SpotInstanceStatus)
+
+-- | The date and time of the most recent status update, in UTC format (for
+-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+spotInstanceStatus_updateTime :: Lens.Lens' SpotInstanceStatus (Prelude.Maybe Prelude.UTCTime)
+spotInstanceStatus_updateTime = Lens.lens (\SpotInstanceStatus' {updateTime} -> updateTime) (\s@SpotInstanceStatus' {} a -> s {updateTime = a} :: SpotInstanceStatus) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML SpotInstanceStatus where
+  parseXML x =
+    SpotInstanceStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+      Prelude.<*> (x Data..@? "updateTime")
+
+instance Prelude.Hashable SpotInstanceStatus where
+  hashWithSalt _salt SpotInstanceStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+      `Prelude.hashWithSalt` updateTime
+
+instance Prelude.NFData SpotInstanceStatus where
+  rnf SpotInstanceStatus' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf message
+      `Prelude.seq` Prelude.rnf updateTime
diff --git a/gen/Amazonka/EC2/Types/SpotInstanceType.hs b/gen/Amazonka/EC2/Types/SpotInstanceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotInstanceType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotInstanceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotInstanceType
+  ( SpotInstanceType
+      ( ..,
+        SpotInstanceType_One_time,
+        SpotInstanceType_Persistent
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SpotInstanceType = SpotInstanceType'
+  { fromSpotInstanceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SpotInstanceType_One_time :: SpotInstanceType
+pattern SpotInstanceType_One_time = SpotInstanceType' "one-time"
+
+pattern SpotInstanceType_Persistent :: SpotInstanceType
+pattern SpotInstanceType_Persistent = SpotInstanceType' "persistent"
+
+{-# COMPLETE
+  SpotInstanceType_One_time,
+  SpotInstanceType_Persistent,
+  SpotInstanceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SpotMaintenanceStrategies.hs b/gen/Amazonka/EC2/Types/SpotMaintenanceStrategies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotMaintenanceStrategies.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotMaintenanceStrategies
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotMaintenanceStrategies where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SpotCapacityRebalance
+import qualified Amazonka.Prelude as Prelude
+
+-- | The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+--
+-- /See:/ 'newSpotMaintenanceStrategies' smart constructor.
+data SpotMaintenanceStrategies = SpotMaintenanceStrategies'
+  { -- | The Spot Instance replacement strategy to use when Amazon EC2 emits a
+    -- signal that your Spot Instance is at an elevated risk of being
+    -- interrupted. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html Capacity rebalancing>
+    -- in the /Amazon EC2 User Guide for Linux Instances/.
+    capacityRebalance :: Prelude.Maybe SpotCapacityRebalance
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotMaintenanceStrategies' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'capacityRebalance', 'spotMaintenanceStrategies_capacityRebalance' - The Spot Instance replacement strategy to use when Amazon EC2 emits a
+-- signal that your Spot Instance is at an elevated risk of being
+-- interrupted. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html Capacity rebalancing>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+newSpotMaintenanceStrategies ::
+  SpotMaintenanceStrategies
+newSpotMaintenanceStrategies =
+  SpotMaintenanceStrategies'
+    { capacityRebalance =
+        Prelude.Nothing
+    }
+
+-- | The Spot Instance replacement strategy to use when Amazon EC2 emits a
+-- signal that your Spot Instance is at an elevated risk of being
+-- interrupted. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html Capacity rebalancing>
+-- in the /Amazon EC2 User Guide for Linux Instances/.
+spotMaintenanceStrategies_capacityRebalance :: Lens.Lens' SpotMaintenanceStrategies (Prelude.Maybe SpotCapacityRebalance)
+spotMaintenanceStrategies_capacityRebalance = Lens.lens (\SpotMaintenanceStrategies' {capacityRebalance} -> capacityRebalance) (\s@SpotMaintenanceStrategies' {} a -> s {capacityRebalance = a} :: SpotMaintenanceStrategies)
+
+instance Data.FromXML SpotMaintenanceStrategies where
+  parseXML x =
+    SpotMaintenanceStrategies'
+      Prelude.<$> (x Data..@? "capacityRebalance")
+
+instance Prelude.Hashable SpotMaintenanceStrategies where
+  hashWithSalt _salt SpotMaintenanceStrategies' {..} =
+    _salt `Prelude.hashWithSalt` capacityRebalance
+
+instance Prelude.NFData SpotMaintenanceStrategies where
+  rnf SpotMaintenanceStrategies' {..} =
+    Prelude.rnf capacityRebalance
+
+instance Data.ToQuery SpotMaintenanceStrategies where
+  toQuery SpotMaintenanceStrategies' {..} =
+    Prelude.mconcat
+      ["CapacityRebalance" Data.=: capacityRebalance]
diff --git a/gen/Amazonka/EC2/Types/SpotMarketOptions.hs b/gen/Amazonka/EC2/Types/SpotMarketOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotMarketOptions.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotMarketOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotMarketOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceInterruptionBehavior
+import Amazonka.EC2.Types.SpotInstanceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The options for Spot Instances.
+--
+-- /See:/ 'newSpotMarketOptions' smart constructor.
+data SpotMarketOptions = SpotMarketOptions'
+  { -- | Deprecated.
+    blockDurationMinutes :: Prelude.Maybe Prelude.Int,
+    -- | The behavior when a Spot Instance is interrupted. The default is
+    -- @terminate@.
+    instanceInterruptionBehavior :: Prelude.Maybe InstanceInterruptionBehavior,
+    -- | The maximum hourly price that you\'re willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your Spot Instances will be interrupted
+    -- more frequently than if you do not specify this parameter.
+    maxPrice :: Prelude.Maybe Prelude.Text,
+    -- | The Spot Instance request type. For
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances RunInstances>,
+    -- persistent Spot Instance requests are only supported when the instance
+    -- interruption behavior is either @hibernate@ or @stop@.
+    spotInstanceType :: Prelude.Maybe SpotInstanceType,
+    -- | The end date of the request, in UTC format
+    -- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). Supported only for persistent
+    -- requests.
+    --
+    -- -   For a persistent request, the request remains active until the
+    --     @ValidUntil@ date and time is reached. Otherwise, the request
+    --     remains active until you cancel it.
+    --
+    -- -   For a one-time request, @ValidUntil@ is not supported. The request
+    --     remains active until all instances launch or you cancel the request.
+    validUntil :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotMarketOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blockDurationMinutes', 'spotMarketOptions_blockDurationMinutes' - Deprecated.
+--
+-- 'instanceInterruptionBehavior', 'spotMarketOptions_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+--
+-- 'maxPrice', 'spotMarketOptions_maxPrice' - The maximum hourly price that you\'re willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+--
+-- 'spotInstanceType', 'spotMarketOptions_spotInstanceType' - The Spot Instance request type. For
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances RunInstances>,
+-- persistent Spot Instance requests are only supported when the instance
+-- interruption behavior is either @hibernate@ or @stop@.
+--
+-- 'validUntil', 'spotMarketOptions_validUntil' - The end date of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). Supported only for persistent
+-- requests.
+--
+-- -   For a persistent request, the request remains active until the
+--     @ValidUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, @ValidUntil@ is not supported. The request
+--     remains active until all instances launch or you cancel the request.
+newSpotMarketOptions ::
+  SpotMarketOptions
+newSpotMarketOptions =
+  SpotMarketOptions'
+    { blockDurationMinutes =
+        Prelude.Nothing,
+      instanceInterruptionBehavior = Prelude.Nothing,
+      maxPrice = Prelude.Nothing,
+      spotInstanceType = Prelude.Nothing,
+      validUntil = Prelude.Nothing
+    }
+
+-- | Deprecated.
+spotMarketOptions_blockDurationMinutes :: Lens.Lens' SpotMarketOptions (Prelude.Maybe Prelude.Int)
+spotMarketOptions_blockDurationMinutes = Lens.lens (\SpotMarketOptions' {blockDurationMinutes} -> blockDurationMinutes) (\s@SpotMarketOptions' {} a -> s {blockDurationMinutes = a} :: SpotMarketOptions)
+
+-- | The behavior when a Spot Instance is interrupted. The default is
+-- @terminate@.
+spotMarketOptions_instanceInterruptionBehavior :: Lens.Lens' SpotMarketOptions (Prelude.Maybe InstanceInterruptionBehavior)
+spotMarketOptions_instanceInterruptionBehavior = Lens.lens (\SpotMarketOptions' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@SpotMarketOptions' {} a -> s {instanceInterruptionBehavior = a} :: SpotMarketOptions)
+
+-- | The maximum hourly price that you\'re willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+spotMarketOptions_maxPrice :: Lens.Lens' SpotMarketOptions (Prelude.Maybe Prelude.Text)
+spotMarketOptions_maxPrice = Lens.lens (\SpotMarketOptions' {maxPrice} -> maxPrice) (\s@SpotMarketOptions' {} a -> s {maxPrice = a} :: SpotMarketOptions)
+
+-- | The Spot Instance request type. For
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances RunInstances>,
+-- persistent Spot Instance requests are only supported when the instance
+-- interruption behavior is either @hibernate@ or @stop@.
+spotMarketOptions_spotInstanceType :: Lens.Lens' SpotMarketOptions (Prelude.Maybe SpotInstanceType)
+spotMarketOptions_spotInstanceType = Lens.lens (\SpotMarketOptions' {spotInstanceType} -> spotInstanceType) (\s@SpotMarketOptions' {} a -> s {spotInstanceType = a} :: SpotMarketOptions)
+
+-- | The end date of the request, in UTC format
+-- (/YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). Supported only for persistent
+-- requests.
+--
+-- -   For a persistent request, the request remains active until the
+--     @ValidUntil@ date and time is reached. Otherwise, the request
+--     remains active until you cancel it.
+--
+-- -   For a one-time request, @ValidUntil@ is not supported. The request
+--     remains active until all instances launch or you cancel the request.
+spotMarketOptions_validUntil :: Lens.Lens' SpotMarketOptions (Prelude.Maybe Prelude.UTCTime)
+spotMarketOptions_validUntil = Lens.lens (\SpotMarketOptions' {validUntil} -> validUntil) (\s@SpotMarketOptions' {} a -> s {validUntil = a} :: SpotMarketOptions) Prelude.. Lens.mapping Data._Time
+
+instance Prelude.Hashable SpotMarketOptions where
+  hashWithSalt _salt SpotMarketOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` blockDurationMinutes
+      `Prelude.hashWithSalt` instanceInterruptionBehavior
+      `Prelude.hashWithSalt` maxPrice
+      `Prelude.hashWithSalt` spotInstanceType
+      `Prelude.hashWithSalt` validUntil
+
+instance Prelude.NFData SpotMarketOptions where
+  rnf SpotMarketOptions' {..} =
+    Prelude.rnf blockDurationMinutes
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf maxPrice
+      `Prelude.seq` Prelude.rnf spotInstanceType
+      `Prelude.seq` Prelude.rnf validUntil
+
+instance Data.ToQuery SpotMarketOptions where
+  toQuery SpotMarketOptions' {..} =
+    Prelude.mconcat
+      [ "BlockDurationMinutes" Data.=: blockDurationMinutes,
+        "InstanceInterruptionBehavior"
+          Data.=: instanceInterruptionBehavior,
+        "MaxPrice" Data.=: maxPrice,
+        "SpotInstanceType" Data.=: spotInstanceType,
+        "ValidUntil" Data.=: validUntil
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotOptions.hs b/gen/Amazonka/EC2/Types/SpotOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotOptions.hs
@@ -0,0 +1,402 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetSpotMaintenanceStrategies
+import Amazonka.EC2.Types.SpotAllocationStrategy
+import Amazonka.EC2.Types.SpotInstanceInterruptionBehavior
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of Spot Instances in an EC2 Fleet.
+--
+-- /See:/ 'newSpotOptions' smart constructor.
+data SpotOptions = SpotOptions'
+  { -- | The strategy that determines how to allocate the target Spot Instance
+    -- capacity across the Spot Instance pools specified by the EC2 Fleet
+    -- launch configuration. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- [price-capacity-optimized (recommended)]
+    --     EC2 Fleet identifies the pools with the highest capacity
+    --     availability for the number of instances that are launching. This
+    --     means that we will request Spot Instances from the pools that we
+    --     believe have the lowest chance of interruption in the near term. EC2
+    --     Fleet then requests Spot Instances from the lowest priced of these
+    --     pools.
+    --
+    -- [capacity-optimized]
+    --     EC2 Fleet identifies the pools with the highest capacity
+    --     availability for the number of instances that are launching. This
+    --     means that we will request Spot Instances from the pools that we
+    --     believe have the lowest chance of interruption in the near term. To
+    --     give certain instance types a higher chance of launching first, use
+    --     @capacity-optimized-prioritized@. Set a priority for each instance
+    --     type by using the @Priority@ parameter for
+    --     @LaunchTemplateOverrides@. You can assign the same priority to
+    --     different @LaunchTemplateOverrides@. EC2 implements the priorities
+    --     on a best-effort basis, but optimizes for capacity first.
+    --     @capacity-optimized-prioritized@ is supported only if your EC2 Fleet
+    --     uses a launch template. Note that if the On-Demand
+    --     @AllocationStrategy@ is set to @prioritized@, the same priority is
+    --     applied when fulfilling On-Demand capacity.
+    --
+    -- [diversified]
+    --     EC2 Fleet requests instances from all of the Spot Instance pools
+    --     that you specify.
+    --
+    -- [lowest-price]
+    --     EC2 Fleet requests instances from the lowest priced Spot Instance
+    --     pool that has available capacity. If the lowest priced pool doesn\'t
+    --     have available capacity, the Spot Instances come from the next
+    --     lowest priced pool that has available capacity. If a pool runs out
+    --     of capacity before fulfilling your desired capacity, EC2 Fleet will
+    --     continue to fulfill your request by drawing from the next lowest
+    --     priced pool. To ensure that your desired capacity is met, you might
+    --     receive Spot Instances from several pools. Because this strategy
+    --     only considers instance price and not capacity availability, it
+    --     might lead to high interruption rates.
+    --
+    -- Default: @lowest-price@
+    allocationStrategy :: Prelude.Maybe SpotAllocationStrategy,
+    -- | The behavior when a Spot Instance is interrupted.
+    --
+    -- Default: @terminate@
+    instanceInterruptionBehavior :: Prelude.Maybe SpotInstanceInterruptionBehavior,
+    -- | The number of Spot pools across which to allocate your target Spot
+    -- capacity. Supported only when @AllocationStrategy@ is set to
+    -- @lowest-price@. EC2 Fleet selects the cheapest Spot pools and evenly
+    -- allocates your target Spot capacity across the number of Spot pools that
+    -- you specify.
+    --
+    -- Note that EC2 Fleet attempts to draw Spot Instances from the number of
+    -- pools that you specify on a best effort basis. If a pool runs out of
+    -- Spot capacity before fulfilling your target capacity, EC2 Fleet will
+    -- continue to fulfill your request by drawing from the next cheapest pool.
+    -- To ensure that your target capacity is met, you might receive Spot
+    -- Instances from more than the number of pools that you specified.
+    -- Similarly, if most of the pools have no Spot capacity, you might receive
+    -- your full target capacity from fewer than the number of pools that you
+    -- specified.
+    instancePoolsToUseCount :: Prelude.Maybe Prelude.Int,
+    -- | The strategies for managing your workloads on your Spot Instances that
+    -- will be interrupted. Currently only the capacity rebalance strategy is
+    -- available.
+    maintenanceStrategies :: Prelude.Maybe FleetSpotMaintenanceStrategies,
+    -- | The maximum amount per hour for Spot Instances that you\'re willing to
+    -- pay. We do not recommend using this parameter because it can lead to
+    -- increased interruptions. If you do not specify this parameter, you will
+    -- pay the current Spot price.
+    --
+    -- If you specify a maximum price, your Spot Instances will be interrupted
+    -- more frequently than if you do not specify this parameter.
+    maxTotalPrice :: Prelude.Maybe Prelude.Text,
+    -- | The minimum target capacity for Spot Instances in the fleet. If the
+    -- minimum target capacity is not reached, the fleet launches no instances.
+    --
+    -- Supported only for fleets of type @instant@.
+    --
+    -- At least one of the following must be specified:
+    -- @SingleAvailabilityZone@ | @SingleInstanceType@
+    minTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | Indicates that the fleet launches all Spot Instances into a single
+    -- Availability Zone.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleAvailabilityZone :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates that the fleet uses a single instance type to launch all Spot
+    -- Instances in the fleet.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleInstanceType :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'spotOptions_allocationStrategy' - The strategy that determines how to allocate the target Spot Instance
+-- capacity across the Spot Instance pools specified by the EC2 Fleet
+-- launch configuration. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- [price-capacity-optimized (recommended)]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. EC2
+--     Fleet then requests Spot Instances from the lowest priced of these
+--     pools.
+--
+-- [capacity-optimized]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. To
+--     give certain instance types a higher chance of launching first, use
+--     @capacity-optimized-prioritized@. Set a priority for each instance
+--     type by using the @Priority@ parameter for
+--     @LaunchTemplateOverrides@. You can assign the same priority to
+--     different @LaunchTemplateOverrides@. EC2 implements the priorities
+--     on a best-effort basis, but optimizes for capacity first.
+--     @capacity-optimized-prioritized@ is supported only if your EC2 Fleet
+--     uses a launch template. Note that if the On-Demand
+--     @AllocationStrategy@ is set to @prioritized@, the same priority is
+--     applied when fulfilling On-Demand capacity.
+--
+-- [diversified]
+--     EC2 Fleet requests instances from all of the Spot Instance pools
+--     that you specify.
+--
+-- [lowest-price]
+--     EC2 Fleet requests instances from the lowest priced Spot Instance
+--     pool that has available capacity. If the lowest priced pool doesn\'t
+--     have available capacity, the Spot Instances come from the next
+--     lowest priced pool that has available capacity. If a pool runs out
+--     of capacity before fulfilling your desired capacity, EC2 Fleet will
+--     continue to fulfill your request by drawing from the next lowest
+--     priced pool. To ensure that your desired capacity is met, you might
+--     receive Spot Instances from several pools. Because this strategy
+--     only considers instance price and not capacity availability, it
+--     might lead to high interruption rates.
+--
+-- Default: @lowest-price@
+--
+-- 'instanceInterruptionBehavior', 'spotOptions_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted.
+--
+-- Default: @terminate@
+--
+-- 'instancePoolsToUseCount', 'spotOptions_instancePoolsToUseCount' - The number of Spot pools across which to allocate your target Spot
+-- capacity. Supported only when @AllocationStrategy@ is set to
+-- @lowest-price@. EC2 Fleet selects the cheapest Spot pools and evenly
+-- allocates your target Spot capacity across the number of Spot pools that
+-- you specify.
+--
+-- Note that EC2 Fleet attempts to draw Spot Instances from the number of
+-- pools that you specify on a best effort basis. If a pool runs out of
+-- Spot capacity before fulfilling your target capacity, EC2 Fleet will
+-- continue to fulfill your request by drawing from the next cheapest pool.
+-- To ensure that your target capacity is met, you might receive Spot
+-- Instances from more than the number of pools that you specified.
+-- Similarly, if most of the pools have no Spot capacity, you might receive
+-- your full target capacity from fewer than the number of pools that you
+-- specified.
+--
+-- 'maintenanceStrategies', 'spotOptions_maintenanceStrategies' - The strategies for managing your workloads on your Spot Instances that
+-- will be interrupted. Currently only the capacity rebalance strategy is
+-- available.
+--
+-- 'maxTotalPrice', 'spotOptions_maxTotalPrice' - The maximum amount per hour for Spot Instances that you\'re willing to
+-- pay. We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+--
+-- 'minTargetCapacity', 'spotOptions_minTargetCapacity' - The minimum target capacity for Spot Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+--
+-- 'singleAvailabilityZone', 'spotOptions_singleAvailabilityZone' - Indicates that the fleet launches all Spot Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- 'singleInstanceType', 'spotOptions_singleInstanceType' - Indicates that the fleet uses a single instance type to launch all Spot
+-- Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+newSpotOptions ::
+  SpotOptions
+newSpotOptions =
+  SpotOptions'
+    { allocationStrategy = Prelude.Nothing,
+      instanceInterruptionBehavior = Prelude.Nothing,
+      instancePoolsToUseCount = Prelude.Nothing,
+      maintenanceStrategies = Prelude.Nothing,
+      maxTotalPrice = Prelude.Nothing,
+      minTargetCapacity = Prelude.Nothing,
+      singleAvailabilityZone = Prelude.Nothing,
+      singleInstanceType = Prelude.Nothing
+    }
+
+-- | The strategy that determines how to allocate the target Spot Instance
+-- capacity across the Spot Instance pools specified by the EC2 Fleet
+-- launch configuration. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- [price-capacity-optimized (recommended)]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. EC2
+--     Fleet then requests Spot Instances from the lowest priced of these
+--     pools.
+--
+-- [capacity-optimized]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. To
+--     give certain instance types a higher chance of launching first, use
+--     @capacity-optimized-prioritized@. Set a priority for each instance
+--     type by using the @Priority@ parameter for
+--     @LaunchTemplateOverrides@. You can assign the same priority to
+--     different @LaunchTemplateOverrides@. EC2 implements the priorities
+--     on a best-effort basis, but optimizes for capacity first.
+--     @capacity-optimized-prioritized@ is supported only if your EC2 Fleet
+--     uses a launch template. Note that if the On-Demand
+--     @AllocationStrategy@ is set to @prioritized@, the same priority is
+--     applied when fulfilling On-Demand capacity.
+--
+-- [diversified]
+--     EC2 Fleet requests instances from all of the Spot Instance pools
+--     that you specify.
+--
+-- [lowest-price]
+--     EC2 Fleet requests instances from the lowest priced Spot Instance
+--     pool that has available capacity. If the lowest priced pool doesn\'t
+--     have available capacity, the Spot Instances come from the next
+--     lowest priced pool that has available capacity. If a pool runs out
+--     of capacity before fulfilling your desired capacity, EC2 Fleet will
+--     continue to fulfill your request by drawing from the next lowest
+--     priced pool. To ensure that your desired capacity is met, you might
+--     receive Spot Instances from several pools. Because this strategy
+--     only considers instance price and not capacity availability, it
+--     might lead to high interruption rates.
+--
+-- Default: @lowest-price@
+spotOptions_allocationStrategy :: Lens.Lens' SpotOptions (Prelude.Maybe SpotAllocationStrategy)
+spotOptions_allocationStrategy = Lens.lens (\SpotOptions' {allocationStrategy} -> allocationStrategy) (\s@SpotOptions' {} a -> s {allocationStrategy = a} :: SpotOptions)
+
+-- | The behavior when a Spot Instance is interrupted.
+--
+-- Default: @terminate@
+spotOptions_instanceInterruptionBehavior :: Lens.Lens' SpotOptions (Prelude.Maybe SpotInstanceInterruptionBehavior)
+spotOptions_instanceInterruptionBehavior = Lens.lens (\SpotOptions' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@SpotOptions' {} a -> s {instanceInterruptionBehavior = a} :: SpotOptions)
+
+-- | The number of Spot pools across which to allocate your target Spot
+-- capacity. Supported only when @AllocationStrategy@ is set to
+-- @lowest-price@. EC2 Fleet selects the cheapest Spot pools and evenly
+-- allocates your target Spot capacity across the number of Spot pools that
+-- you specify.
+--
+-- Note that EC2 Fleet attempts to draw Spot Instances from the number of
+-- pools that you specify on a best effort basis. If a pool runs out of
+-- Spot capacity before fulfilling your target capacity, EC2 Fleet will
+-- continue to fulfill your request by drawing from the next cheapest pool.
+-- To ensure that your target capacity is met, you might receive Spot
+-- Instances from more than the number of pools that you specified.
+-- Similarly, if most of the pools have no Spot capacity, you might receive
+-- your full target capacity from fewer than the number of pools that you
+-- specified.
+spotOptions_instancePoolsToUseCount :: Lens.Lens' SpotOptions (Prelude.Maybe Prelude.Int)
+spotOptions_instancePoolsToUseCount = Lens.lens (\SpotOptions' {instancePoolsToUseCount} -> instancePoolsToUseCount) (\s@SpotOptions' {} a -> s {instancePoolsToUseCount = a} :: SpotOptions)
+
+-- | The strategies for managing your workloads on your Spot Instances that
+-- will be interrupted. Currently only the capacity rebalance strategy is
+-- available.
+spotOptions_maintenanceStrategies :: Lens.Lens' SpotOptions (Prelude.Maybe FleetSpotMaintenanceStrategies)
+spotOptions_maintenanceStrategies = Lens.lens (\SpotOptions' {maintenanceStrategies} -> maintenanceStrategies) (\s@SpotOptions' {} a -> s {maintenanceStrategies = a} :: SpotOptions)
+
+-- | The maximum amount per hour for Spot Instances that you\'re willing to
+-- pay. We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+spotOptions_maxTotalPrice :: Lens.Lens' SpotOptions (Prelude.Maybe Prelude.Text)
+spotOptions_maxTotalPrice = Lens.lens (\SpotOptions' {maxTotalPrice} -> maxTotalPrice) (\s@SpotOptions' {} a -> s {maxTotalPrice = a} :: SpotOptions)
+
+-- | The minimum target capacity for Spot Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+spotOptions_minTargetCapacity :: Lens.Lens' SpotOptions (Prelude.Maybe Prelude.Int)
+spotOptions_minTargetCapacity = Lens.lens (\SpotOptions' {minTargetCapacity} -> minTargetCapacity) (\s@SpotOptions' {} a -> s {minTargetCapacity = a} :: SpotOptions)
+
+-- | Indicates that the fleet launches all Spot Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+spotOptions_singleAvailabilityZone :: Lens.Lens' SpotOptions (Prelude.Maybe Prelude.Bool)
+spotOptions_singleAvailabilityZone = Lens.lens (\SpotOptions' {singleAvailabilityZone} -> singleAvailabilityZone) (\s@SpotOptions' {} a -> s {singleAvailabilityZone = a} :: SpotOptions)
+
+-- | Indicates that the fleet uses a single instance type to launch all Spot
+-- Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+spotOptions_singleInstanceType :: Lens.Lens' SpotOptions (Prelude.Maybe Prelude.Bool)
+spotOptions_singleInstanceType = Lens.lens (\SpotOptions' {singleInstanceType} -> singleInstanceType) (\s@SpotOptions' {} a -> s {singleInstanceType = a} :: SpotOptions)
+
+instance Data.FromXML SpotOptions where
+  parseXML x =
+    SpotOptions'
+      Prelude.<$> (x Data..@? "allocationStrategy")
+      Prelude.<*> (x Data..@? "instanceInterruptionBehavior")
+      Prelude.<*> (x Data..@? "instancePoolsToUseCount")
+      Prelude.<*> (x Data..@? "maintenanceStrategies")
+      Prelude.<*> (x Data..@? "maxTotalPrice")
+      Prelude.<*> (x Data..@? "minTargetCapacity")
+      Prelude.<*> (x Data..@? "singleAvailabilityZone")
+      Prelude.<*> (x Data..@? "singleInstanceType")
+
+instance Prelude.Hashable SpotOptions where
+  hashWithSalt _salt SpotOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationStrategy
+      `Prelude.hashWithSalt` instanceInterruptionBehavior
+      `Prelude.hashWithSalt` instancePoolsToUseCount
+      `Prelude.hashWithSalt` maintenanceStrategies
+      `Prelude.hashWithSalt` maxTotalPrice
+      `Prelude.hashWithSalt` minTargetCapacity
+      `Prelude.hashWithSalt` singleAvailabilityZone
+      `Prelude.hashWithSalt` singleInstanceType
+
+instance Prelude.NFData SpotOptions where
+  rnf SpotOptions' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf instancePoolsToUseCount
+      `Prelude.seq` Prelude.rnf maintenanceStrategies
+      `Prelude.seq` Prelude.rnf maxTotalPrice
+      `Prelude.seq` Prelude.rnf minTargetCapacity
+      `Prelude.seq` Prelude.rnf singleAvailabilityZone
+      `Prelude.seq` Prelude.rnf singleInstanceType
diff --git a/gen/Amazonka/EC2/Types/SpotOptionsRequest.hs b/gen/Amazonka/EC2/Types/SpotOptionsRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotOptionsRequest.hs
@@ -0,0 +1,405 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotOptionsRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotOptionsRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.FleetSpotMaintenanceStrategiesRequest
+import Amazonka.EC2.Types.SpotAllocationStrategy
+import Amazonka.EC2.Types.SpotInstanceInterruptionBehavior
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of Spot Instances in an EC2 Fleet request.
+--
+-- /See:/ 'newSpotOptionsRequest' smart constructor.
+data SpotOptionsRequest = SpotOptionsRequest'
+  { -- | The strategy that determines how to allocate the target Spot Instance
+    -- capacity across the Spot Instance pools specified by the EC2 Fleet
+    -- launch configuration. For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+    -- in the /Amazon EC2 User Guide/.
+    --
+    -- [price-capacity-optimized (recommended)]
+    --     EC2 Fleet identifies the pools with the highest capacity
+    --     availability for the number of instances that are launching. This
+    --     means that we will request Spot Instances from the pools that we
+    --     believe have the lowest chance of interruption in the near term. EC2
+    --     Fleet then requests Spot Instances from the lowest priced of these
+    --     pools.
+    --
+    -- [capacity-optimized]
+    --     EC2 Fleet identifies the pools with the highest capacity
+    --     availability for the number of instances that are launching. This
+    --     means that we will request Spot Instances from the pools that we
+    --     believe have the lowest chance of interruption in the near term. To
+    --     give certain instance types a higher chance of launching first, use
+    --     @capacity-optimized-prioritized@. Set a priority for each instance
+    --     type by using the @Priority@ parameter for
+    --     @LaunchTemplateOverrides@. You can assign the same priority to
+    --     different @LaunchTemplateOverrides@. EC2 implements the priorities
+    --     on a best-effort basis, but optimizes for capacity first.
+    --     @capacity-optimized-prioritized@ is supported only if your EC2 Fleet
+    --     uses a launch template. Note that if the On-Demand
+    --     @AllocationStrategy@ is set to @prioritized@, the same priority is
+    --     applied when fulfilling On-Demand capacity.
+    --
+    -- [diversified]
+    --     EC2 Fleet requests instances from all of the Spot Instance pools
+    --     that you specify.
+    --
+    -- [lowest-price]
+    --     EC2 Fleet requests instances from the lowest priced Spot Instance
+    --     pool that has available capacity. If the lowest priced pool doesn\'t
+    --     have available capacity, the Spot Instances come from the next
+    --     lowest priced pool that has available capacity. If a pool runs out
+    --     of capacity before fulfilling your desired capacity, EC2 Fleet will
+    --     continue to fulfill your request by drawing from the next lowest
+    --     priced pool. To ensure that your desired capacity is met, you might
+    --     receive Spot Instances from several pools. Because this strategy
+    --     only considers instance price and not capacity availability, it
+    --     might lead to high interruption rates.
+    --
+    -- Default: @lowest-price@
+    allocationStrategy :: Prelude.Maybe SpotAllocationStrategy,
+    -- | The behavior when a Spot Instance is interrupted.
+    --
+    -- Default: @terminate@
+    instanceInterruptionBehavior :: Prelude.Maybe SpotInstanceInterruptionBehavior,
+    -- | The number of Spot pools across which to allocate your target Spot
+    -- capacity. Supported only when Spot @AllocationStrategy@ is set to
+    -- @lowest-price@. EC2 Fleet selects the cheapest Spot pools and evenly
+    -- allocates your target Spot capacity across the number of Spot pools that
+    -- you specify.
+    --
+    -- Note that EC2 Fleet attempts to draw Spot Instances from the number of
+    -- pools that you specify on a best effort basis. If a pool runs out of
+    -- Spot capacity before fulfilling your target capacity, EC2 Fleet will
+    -- continue to fulfill your request by drawing from the next cheapest pool.
+    -- To ensure that your target capacity is met, you might receive Spot
+    -- Instances from more than the number of pools that you specified.
+    -- Similarly, if most of the pools have no Spot capacity, you might receive
+    -- your full target capacity from fewer than the number of pools that you
+    -- specified.
+    instancePoolsToUseCount :: Prelude.Maybe Prelude.Int,
+    -- | The strategies for managing your Spot Instances that are at an elevated
+    -- risk of being interrupted.
+    maintenanceStrategies :: Prelude.Maybe FleetSpotMaintenanceStrategiesRequest,
+    -- | The maximum amount per hour for Spot Instances that you\'re willing to
+    -- pay. We do not recommend using this parameter because it can lead to
+    -- increased interruptions. If you do not specify this parameter, you will
+    -- pay the current Spot price.
+    --
+    -- If you specify a maximum price, your Spot Instances will be interrupted
+    -- more frequently than if you do not specify this parameter.
+    maxTotalPrice :: Prelude.Maybe Prelude.Text,
+    -- | The minimum target capacity for Spot Instances in the fleet. If the
+    -- minimum target capacity is not reached, the fleet launches no instances.
+    --
+    -- Supported only for fleets of type @instant@.
+    --
+    -- At least one of the following must be specified:
+    -- @SingleAvailabilityZone@ | @SingleInstanceType@
+    minTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | Indicates that the fleet launches all Spot Instances into a single
+    -- Availability Zone.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleAvailabilityZone :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates that the fleet uses a single instance type to launch all Spot
+    -- Instances in the fleet.
+    --
+    -- Supported only for fleets of type @instant@.
+    singleInstanceType :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotOptionsRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allocationStrategy', 'spotOptionsRequest_allocationStrategy' - The strategy that determines how to allocate the target Spot Instance
+-- capacity across the Spot Instance pools specified by the EC2 Fleet
+-- launch configuration. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- [price-capacity-optimized (recommended)]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. EC2
+--     Fleet then requests Spot Instances from the lowest priced of these
+--     pools.
+--
+-- [capacity-optimized]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. To
+--     give certain instance types a higher chance of launching first, use
+--     @capacity-optimized-prioritized@. Set a priority for each instance
+--     type by using the @Priority@ parameter for
+--     @LaunchTemplateOverrides@. You can assign the same priority to
+--     different @LaunchTemplateOverrides@. EC2 implements the priorities
+--     on a best-effort basis, but optimizes for capacity first.
+--     @capacity-optimized-prioritized@ is supported only if your EC2 Fleet
+--     uses a launch template. Note that if the On-Demand
+--     @AllocationStrategy@ is set to @prioritized@, the same priority is
+--     applied when fulfilling On-Demand capacity.
+--
+-- [diversified]
+--     EC2 Fleet requests instances from all of the Spot Instance pools
+--     that you specify.
+--
+-- [lowest-price]
+--     EC2 Fleet requests instances from the lowest priced Spot Instance
+--     pool that has available capacity. If the lowest priced pool doesn\'t
+--     have available capacity, the Spot Instances come from the next
+--     lowest priced pool that has available capacity. If a pool runs out
+--     of capacity before fulfilling your desired capacity, EC2 Fleet will
+--     continue to fulfill your request by drawing from the next lowest
+--     priced pool. To ensure that your desired capacity is met, you might
+--     receive Spot Instances from several pools. Because this strategy
+--     only considers instance price and not capacity availability, it
+--     might lead to high interruption rates.
+--
+-- Default: @lowest-price@
+--
+-- 'instanceInterruptionBehavior', 'spotOptionsRequest_instanceInterruptionBehavior' - The behavior when a Spot Instance is interrupted.
+--
+-- Default: @terminate@
+--
+-- 'instancePoolsToUseCount', 'spotOptionsRequest_instancePoolsToUseCount' - The number of Spot pools across which to allocate your target Spot
+-- capacity. Supported only when Spot @AllocationStrategy@ is set to
+-- @lowest-price@. EC2 Fleet selects the cheapest Spot pools and evenly
+-- allocates your target Spot capacity across the number of Spot pools that
+-- you specify.
+--
+-- Note that EC2 Fleet attempts to draw Spot Instances from the number of
+-- pools that you specify on a best effort basis. If a pool runs out of
+-- Spot capacity before fulfilling your target capacity, EC2 Fleet will
+-- continue to fulfill your request by drawing from the next cheapest pool.
+-- To ensure that your target capacity is met, you might receive Spot
+-- Instances from more than the number of pools that you specified.
+-- Similarly, if most of the pools have no Spot capacity, you might receive
+-- your full target capacity from fewer than the number of pools that you
+-- specified.
+--
+-- 'maintenanceStrategies', 'spotOptionsRequest_maintenanceStrategies' - The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+--
+-- 'maxTotalPrice', 'spotOptionsRequest_maxTotalPrice' - The maximum amount per hour for Spot Instances that you\'re willing to
+-- pay. We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+--
+-- 'minTargetCapacity', 'spotOptionsRequest_minTargetCapacity' - The minimum target capacity for Spot Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+--
+-- 'singleAvailabilityZone', 'spotOptionsRequest_singleAvailabilityZone' - Indicates that the fleet launches all Spot Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- 'singleInstanceType', 'spotOptionsRequest_singleInstanceType' - Indicates that the fleet uses a single instance type to launch all Spot
+-- Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+newSpotOptionsRequest ::
+  SpotOptionsRequest
+newSpotOptionsRequest =
+  SpotOptionsRequest'
+    { allocationStrategy =
+        Prelude.Nothing,
+      instanceInterruptionBehavior = Prelude.Nothing,
+      instancePoolsToUseCount = Prelude.Nothing,
+      maintenanceStrategies = Prelude.Nothing,
+      maxTotalPrice = Prelude.Nothing,
+      minTargetCapacity = Prelude.Nothing,
+      singleAvailabilityZone = Prelude.Nothing,
+      singleInstanceType = Prelude.Nothing
+    }
+
+-- | The strategy that determines how to allocate the target Spot Instance
+-- capacity across the Spot Instance pools specified by the EC2 Fleet
+-- launch configuration. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html Allocation strategies for Spot Instances>
+-- in the /Amazon EC2 User Guide/.
+--
+-- [price-capacity-optimized (recommended)]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. EC2
+--     Fleet then requests Spot Instances from the lowest priced of these
+--     pools.
+--
+-- [capacity-optimized]
+--     EC2 Fleet identifies the pools with the highest capacity
+--     availability for the number of instances that are launching. This
+--     means that we will request Spot Instances from the pools that we
+--     believe have the lowest chance of interruption in the near term. To
+--     give certain instance types a higher chance of launching first, use
+--     @capacity-optimized-prioritized@. Set a priority for each instance
+--     type by using the @Priority@ parameter for
+--     @LaunchTemplateOverrides@. You can assign the same priority to
+--     different @LaunchTemplateOverrides@. EC2 implements the priorities
+--     on a best-effort basis, but optimizes for capacity first.
+--     @capacity-optimized-prioritized@ is supported only if your EC2 Fleet
+--     uses a launch template. Note that if the On-Demand
+--     @AllocationStrategy@ is set to @prioritized@, the same priority is
+--     applied when fulfilling On-Demand capacity.
+--
+-- [diversified]
+--     EC2 Fleet requests instances from all of the Spot Instance pools
+--     that you specify.
+--
+-- [lowest-price]
+--     EC2 Fleet requests instances from the lowest priced Spot Instance
+--     pool that has available capacity. If the lowest priced pool doesn\'t
+--     have available capacity, the Spot Instances come from the next
+--     lowest priced pool that has available capacity. If a pool runs out
+--     of capacity before fulfilling your desired capacity, EC2 Fleet will
+--     continue to fulfill your request by drawing from the next lowest
+--     priced pool. To ensure that your desired capacity is met, you might
+--     receive Spot Instances from several pools. Because this strategy
+--     only considers instance price and not capacity availability, it
+--     might lead to high interruption rates.
+--
+-- Default: @lowest-price@
+spotOptionsRequest_allocationStrategy :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe SpotAllocationStrategy)
+spotOptionsRequest_allocationStrategy = Lens.lens (\SpotOptionsRequest' {allocationStrategy} -> allocationStrategy) (\s@SpotOptionsRequest' {} a -> s {allocationStrategy = a} :: SpotOptionsRequest)
+
+-- | The behavior when a Spot Instance is interrupted.
+--
+-- Default: @terminate@
+spotOptionsRequest_instanceInterruptionBehavior :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe SpotInstanceInterruptionBehavior)
+spotOptionsRequest_instanceInterruptionBehavior = Lens.lens (\SpotOptionsRequest' {instanceInterruptionBehavior} -> instanceInterruptionBehavior) (\s@SpotOptionsRequest' {} a -> s {instanceInterruptionBehavior = a} :: SpotOptionsRequest)
+
+-- | The number of Spot pools across which to allocate your target Spot
+-- capacity. Supported only when Spot @AllocationStrategy@ is set to
+-- @lowest-price@. EC2 Fleet selects the cheapest Spot pools and evenly
+-- allocates your target Spot capacity across the number of Spot pools that
+-- you specify.
+--
+-- Note that EC2 Fleet attempts to draw Spot Instances from the number of
+-- pools that you specify on a best effort basis. If a pool runs out of
+-- Spot capacity before fulfilling your target capacity, EC2 Fleet will
+-- continue to fulfill your request by drawing from the next cheapest pool.
+-- To ensure that your target capacity is met, you might receive Spot
+-- Instances from more than the number of pools that you specified.
+-- Similarly, if most of the pools have no Spot capacity, you might receive
+-- your full target capacity from fewer than the number of pools that you
+-- specified.
+spotOptionsRequest_instancePoolsToUseCount :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe Prelude.Int)
+spotOptionsRequest_instancePoolsToUseCount = Lens.lens (\SpotOptionsRequest' {instancePoolsToUseCount} -> instancePoolsToUseCount) (\s@SpotOptionsRequest' {} a -> s {instancePoolsToUseCount = a} :: SpotOptionsRequest)
+
+-- | The strategies for managing your Spot Instances that are at an elevated
+-- risk of being interrupted.
+spotOptionsRequest_maintenanceStrategies :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe FleetSpotMaintenanceStrategiesRequest)
+spotOptionsRequest_maintenanceStrategies = Lens.lens (\SpotOptionsRequest' {maintenanceStrategies} -> maintenanceStrategies) (\s@SpotOptionsRequest' {} a -> s {maintenanceStrategies = a} :: SpotOptionsRequest)
+
+-- | The maximum amount per hour for Spot Instances that you\'re willing to
+-- pay. We do not recommend using this parameter because it can lead to
+-- increased interruptions. If you do not specify this parameter, you will
+-- pay the current Spot price.
+--
+-- If you specify a maximum price, your Spot Instances will be interrupted
+-- more frequently than if you do not specify this parameter.
+spotOptionsRequest_maxTotalPrice :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe Prelude.Text)
+spotOptionsRequest_maxTotalPrice = Lens.lens (\SpotOptionsRequest' {maxTotalPrice} -> maxTotalPrice) (\s@SpotOptionsRequest' {} a -> s {maxTotalPrice = a} :: SpotOptionsRequest)
+
+-- | The minimum target capacity for Spot Instances in the fleet. If the
+-- minimum target capacity is not reached, the fleet launches no instances.
+--
+-- Supported only for fleets of type @instant@.
+--
+-- At least one of the following must be specified:
+-- @SingleAvailabilityZone@ | @SingleInstanceType@
+spotOptionsRequest_minTargetCapacity :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe Prelude.Int)
+spotOptionsRequest_minTargetCapacity = Lens.lens (\SpotOptionsRequest' {minTargetCapacity} -> minTargetCapacity) (\s@SpotOptionsRequest' {} a -> s {minTargetCapacity = a} :: SpotOptionsRequest)
+
+-- | Indicates that the fleet launches all Spot Instances into a single
+-- Availability Zone.
+--
+-- Supported only for fleets of type @instant@.
+spotOptionsRequest_singleAvailabilityZone :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe Prelude.Bool)
+spotOptionsRequest_singleAvailabilityZone = Lens.lens (\SpotOptionsRequest' {singleAvailabilityZone} -> singleAvailabilityZone) (\s@SpotOptionsRequest' {} a -> s {singleAvailabilityZone = a} :: SpotOptionsRequest)
+
+-- | Indicates that the fleet uses a single instance type to launch all Spot
+-- Instances in the fleet.
+--
+-- Supported only for fleets of type @instant@.
+spotOptionsRequest_singleInstanceType :: Lens.Lens' SpotOptionsRequest (Prelude.Maybe Prelude.Bool)
+spotOptionsRequest_singleInstanceType = Lens.lens (\SpotOptionsRequest' {singleInstanceType} -> singleInstanceType) (\s@SpotOptionsRequest' {} a -> s {singleInstanceType = a} :: SpotOptionsRequest)
+
+instance Prelude.Hashable SpotOptionsRequest where
+  hashWithSalt _salt SpotOptionsRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` allocationStrategy
+      `Prelude.hashWithSalt` instanceInterruptionBehavior
+      `Prelude.hashWithSalt` instancePoolsToUseCount
+      `Prelude.hashWithSalt` maintenanceStrategies
+      `Prelude.hashWithSalt` maxTotalPrice
+      `Prelude.hashWithSalt` minTargetCapacity
+      `Prelude.hashWithSalt` singleAvailabilityZone
+      `Prelude.hashWithSalt` singleInstanceType
+
+instance Prelude.NFData SpotOptionsRequest where
+  rnf SpotOptionsRequest' {..} =
+    Prelude.rnf allocationStrategy
+      `Prelude.seq` Prelude.rnf instanceInterruptionBehavior
+      `Prelude.seq` Prelude.rnf instancePoolsToUseCount
+      `Prelude.seq` Prelude.rnf maintenanceStrategies
+      `Prelude.seq` Prelude.rnf maxTotalPrice
+      `Prelude.seq` Prelude.rnf minTargetCapacity
+      `Prelude.seq` Prelude.rnf singleAvailabilityZone
+      `Prelude.seq` Prelude.rnf singleInstanceType
+
+instance Data.ToQuery SpotOptionsRequest where
+  toQuery SpotOptionsRequest' {..} =
+    Prelude.mconcat
+      [ "AllocationStrategy" Data.=: allocationStrategy,
+        "InstanceInterruptionBehavior"
+          Data.=: instanceInterruptionBehavior,
+        "InstancePoolsToUseCount"
+          Data.=: instancePoolsToUseCount,
+        "MaintenanceStrategies"
+          Data.=: maintenanceStrategies,
+        "MaxTotalPrice" Data.=: maxTotalPrice,
+        "MinTargetCapacity" Data.=: minTargetCapacity,
+        "SingleAvailabilityZone"
+          Data.=: singleAvailabilityZone,
+        "SingleInstanceType" Data.=: singleInstanceType
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotPlacement.hs b/gen/Amazonka/EC2/Types/SpotPlacement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotPlacement.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotPlacement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotPlacement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tenancy
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes Spot Instance placement.
+--
+-- /See:/ 'newSpotPlacement' smart constructor.
+data SpotPlacement = SpotPlacement'
+  { -- | The Availability Zone.
+    --
+    -- [Spot Fleet only] To specify multiple Availability Zones, separate them
+    -- using commas; for example, \"us-west-2a, us-west-2b\".
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The name of the placement group.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The tenancy of the instance (if the instance is running in a VPC). An
+    -- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+    -- The @host@ tenancy is not supported for Spot Instances.
+    tenancy :: Prelude.Maybe Tenancy
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotPlacement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'spotPlacement_availabilityZone' - The Availability Zone.
+--
+-- [Spot Fleet only] To specify multiple Availability Zones, separate them
+-- using commas; for example, \"us-west-2a, us-west-2b\".
+--
+-- 'groupName', 'spotPlacement_groupName' - The name of the placement group.
+--
+-- 'tenancy', 'spotPlacement_tenancy' - The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+-- The @host@ tenancy is not supported for Spot Instances.
+newSpotPlacement ::
+  SpotPlacement
+newSpotPlacement =
+  SpotPlacement'
+    { availabilityZone = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      tenancy = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+--
+-- [Spot Fleet only] To specify multiple Availability Zones, separate them
+-- using commas; for example, \"us-west-2a, us-west-2b\".
+spotPlacement_availabilityZone :: Lens.Lens' SpotPlacement (Prelude.Maybe Prelude.Text)
+spotPlacement_availabilityZone = Lens.lens (\SpotPlacement' {availabilityZone} -> availabilityZone) (\s@SpotPlacement' {} a -> s {availabilityZone = a} :: SpotPlacement)
+
+-- | The name of the placement group.
+spotPlacement_groupName :: Lens.Lens' SpotPlacement (Prelude.Maybe Prelude.Text)
+spotPlacement_groupName = Lens.lens (\SpotPlacement' {groupName} -> groupName) (\s@SpotPlacement' {} a -> s {groupName = a} :: SpotPlacement)
+
+-- | The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of @dedicated@ runs on single-tenant hardware.
+-- The @host@ tenancy is not supported for Spot Instances.
+spotPlacement_tenancy :: Lens.Lens' SpotPlacement (Prelude.Maybe Tenancy)
+spotPlacement_tenancy = Lens.lens (\SpotPlacement' {tenancy} -> tenancy) (\s@SpotPlacement' {} a -> s {tenancy = a} :: SpotPlacement)
+
+instance Data.FromXML SpotPlacement where
+  parseXML x =
+    SpotPlacement'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "groupName")
+      Prelude.<*> (x Data..@? "tenancy")
+
+instance Prelude.Hashable SpotPlacement where
+  hashWithSalt _salt SpotPlacement' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` tenancy
+
+instance Prelude.NFData SpotPlacement where
+  rnf SpotPlacement' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf tenancy
+
+instance Data.ToQuery SpotPlacement where
+  toQuery SpotPlacement' {..} =
+    Prelude.mconcat
+      [ "AvailabilityZone" Data.=: availabilityZone,
+        "GroupName" Data.=: groupName,
+        "Tenancy" Data.=: tenancy
+      ]
diff --git a/gen/Amazonka/EC2/Types/SpotPlacementScore.hs b/gen/Amazonka/EC2/Types/SpotPlacementScore.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotPlacementScore.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotPlacementScore
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotPlacementScore where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The Spot placement score for this Region or Availability Zone. The score
+-- is calculated based on the assumption that the @capacity-optimized@
+-- allocation strategy is used and that all of the Availability Zones in
+-- the Region can be used.
+--
+-- /See:/ 'newSpotPlacementScore' smart constructor.
+data SpotPlacementScore = SpotPlacementScore'
+  { -- | The Availability Zone.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The Region.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | The placement score, on a scale from @1@ to @10@. A score of @10@
+    -- indicates that your Spot request is highly likely to succeed in this
+    -- Region or Availability Zone. A score of @1@ indicates that your Spot
+    -- request is not likely to succeed.
+    score :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotPlacementScore' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZoneId', 'spotPlacementScore_availabilityZoneId' - The Availability Zone.
+--
+-- 'region', 'spotPlacementScore_region' - The Region.
+--
+-- 'score', 'spotPlacementScore_score' - The placement score, on a scale from @1@ to @10@. A score of @10@
+-- indicates that your Spot request is highly likely to succeed in this
+-- Region or Availability Zone. A score of @1@ indicates that your Spot
+-- request is not likely to succeed.
+newSpotPlacementScore ::
+  SpotPlacementScore
+newSpotPlacementScore =
+  SpotPlacementScore'
+    { availabilityZoneId =
+        Prelude.Nothing,
+      region = Prelude.Nothing,
+      score = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+spotPlacementScore_availabilityZoneId :: Lens.Lens' SpotPlacementScore (Prelude.Maybe Prelude.Text)
+spotPlacementScore_availabilityZoneId = Lens.lens (\SpotPlacementScore' {availabilityZoneId} -> availabilityZoneId) (\s@SpotPlacementScore' {} a -> s {availabilityZoneId = a} :: SpotPlacementScore)
+
+-- | The Region.
+spotPlacementScore_region :: Lens.Lens' SpotPlacementScore (Prelude.Maybe Prelude.Text)
+spotPlacementScore_region = Lens.lens (\SpotPlacementScore' {region} -> region) (\s@SpotPlacementScore' {} a -> s {region = a} :: SpotPlacementScore)
+
+-- | The placement score, on a scale from @1@ to @10@. A score of @10@
+-- indicates that your Spot request is highly likely to succeed in this
+-- Region or Availability Zone. A score of @1@ indicates that your Spot
+-- request is not likely to succeed.
+spotPlacementScore_score :: Lens.Lens' SpotPlacementScore (Prelude.Maybe Prelude.Int)
+spotPlacementScore_score = Lens.lens (\SpotPlacementScore' {score} -> score) (\s@SpotPlacementScore' {} a -> s {score = a} :: SpotPlacementScore)
+
+instance Data.FromXML SpotPlacementScore where
+  parseXML x =
+    SpotPlacementScore'
+      Prelude.<$> (x Data..@? "availabilityZoneId")
+      Prelude.<*> (x Data..@? "region")
+      Prelude.<*> (x Data..@? "score")
+
+instance Prelude.Hashable SpotPlacementScore where
+  hashWithSalt _salt SpotPlacementScore' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` score
+
+instance Prelude.NFData SpotPlacementScore where
+  rnf SpotPlacementScore' {..} =
+    Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf score
diff --git a/gen/Amazonka/EC2/Types/SpotPrice.hs b/gen/Amazonka/EC2/Types/SpotPrice.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpotPrice.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpotPrice
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpotPrice where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InstanceType
+import Amazonka.EC2.Types.RIProductDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- /See:/ 'newSpotPrice' smart constructor.
+data SpotPrice = SpotPrice'
+  { -- | The Availability Zone.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The instance type.
+    instanceType :: Prelude.Maybe InstanceType,
+    -- | A general description of the AMI.
+    productDescription :: Prelude.Maybe RIProductDescription,
+    -- | The maximum price per unit hour that you are willing to pay for a Spot
+    -- Instance. We do not recommend using this parameter because it can lead
+    -- to increased interruptions. If you do not specify this parameter, you
+    -- will pay the current Spot price.
+    --
+    -- If you specify a maximum price, your instances will be interrupted more
+    -- frequently than if you do not specify this parameter.
+    spotPrice :: Prelude.Maybe Prelude.Text,
+    -- | The date and time the request was created, in UTC format (for example,
+    -- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+    timestamp :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SpotPrice' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'availabilityZone', 'spotPrice_availabilityZone' - The Availability Zone.
+--
+-- 'instanceType', 'spotPrice_instanceType' - The instance type.
+--
+-- 'productDescription', 'spotPrice_productDescription' - A general description of the AMI.
+--
+-- 'spotPrice', 'spotPrice_spotPrice' - The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+--
+-- 'timestamp', 'spotPrice_timestamp' - The date and time the request was created, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+newSpotPrice ::
+  SpotPrice
+newSpotPrice =
+  SpotPrice'
+    { availabilityZone = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      productDescription = Prelude.Nothing,
+      spotPrice = Prelude.Nothing,
+      timestamp = Prelude.Nothing
+    }
+
+-- | The Availability Zone.
+spotPrice_availabilityZone :: Lens.Lens' SpotPrice (Prelude.Maybe Prelude.Text)
+spotPrice_availabilityZone = Lens.lens (\SpotPrice' {availabilityZone} -> availabilityZone) (\s@SpotPrice' {} a -> s {availabilityZone = a} :: SpotPrice)
+
+-- | The instance type.
+spotPrice_instanceType :: Lens.Lens' SpotPrice (Prelude.Maybe InstanceType)
+spotPrice_instanceType = Lens.lens (\SpotPrice' {instanceType} -> instanceType) (\s@SpotPrice' {} a -> s {instanceType = a} :: SpotPrice)
+
+-- | A general description of the AMI.
+spotPrice_productDescription :: Lens.Lens' SpotPrice (Prelude.Maybe RIProductDescription)
+spotPrice_productDescription = Lens.lens (\SpotPrice' {productDescription} -> productDescription) (\s@SpotPrice' {} a -> s {productDescription = a} :: SpotPrice)
+
+-- | The maximum price per unit hour that you are willing to pay for a Spot
+-- Instance. We do not recommend using this parameter because it can lead
+-- to increased interruptions. If you do not specify this parameter, you
+-- will pay the current Spot price.
+--
+-- If you specify a maximum price, your instances will be interrupted more
+-- frequently than if you do not specify this parameter.
+spotPrice_spotPrice :: Lens.Lens' SpotPrice (Prelude.Maybe Prelude.Text)
+spotPrice_spotPrice = Lens.lens (\SpotPrice' {spotPrice} -> spotPrice) (\s@SpotPrice' {} a -> s {spotPrice = a} :: SpotPrice)
+
+-- | The date and time the request was created, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+spotPrice_timestamp :: Lens.Lens' SpotPrice (Prelude.Maybe Prelude.UTCTime)
+spotPrice_timestamp = Lens.lens (\SpotPrice' {timestamp} -> timestamp) (\s@SpotPrice' {} a -> s {timestamp = a} :: SpotPrice) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML SpotPrice where
+  parseXML x =
+    SpotPrice'
+      Prelude.<$> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "instanceType")
+      Prelude.<*> (x Data..@? "productDescription")
+      Prelude.<*> (x Data..@? "spotPrice")
+      Prelude.<*> (x Data..@? "timestamp")
+
+instance Prelude.Hashable SpotPrice where
+  hashWithSalt _salt SpotPrice' {..} =
+    _salt
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` productDescription
+      `Prelude.hashWithSalt` spotPrice
+      `Prelude.hashWithSalt` timestamp
+
+instance Prelude.NFData SpotPrice where
+  rnf SpotPrice' {..} =
+    Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf productDescription
+      `Prelude.seq` Prelude.rnf spotPrice
+      `Prelude.seq` Prelude.rnf timestamp
diff --git a/gen/Amazonka/EC2/Types/SpreadLevel.hs b/gen/Amazonka/EC2/Types/SpreadLevel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SpreadLevel.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SpreadLevel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SpreadLevel
+  ( SpreadLevel
+      ( ..,
+        SpreadLevel_Host,
+        SpreadLevel_Rack
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SpreadLevel = SpreadLevel'
+  { fromSpreadLevel ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SpreadLevel_Host :: SpreadLevel
+pattern SpreadLevel_Host = SpreadLevel' "host"
+
+pattern SpreadLevel_Rack :: SpreadLevel
+pattern SpreadLevel_Rack = SpreadLevel' "rack"
+
+{-# COMPLETE
+  SpreadLevel_Host,
+  SpreadLevel_Rack,
+  SpreadLevel'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/StaleIpPermission.hs b/gen/Amazonka/EC2/Types/StaleIpPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StaleIpPermission.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StaleIpPermission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StaleIpPermission where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UserIdGroupPair
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a stale rule in a security group.
+--
+-- /See:/ 'newStaleIpPermission' smart constructor.
+data StaleIpPermission = StaleIpPermission'
+  { -- | The start of the port range for the TCP and UDP protocols, or an ICMP
+    -- type number. A value of @-1@ indicates all ICMP types.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The IP protocol name (for @tcp@, @udp@, and @icmp@) or number (see
+    -- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers)>.
+    ipProtocol :: Prelude.Maybe Prelude.Text,
+    -- | The IP ranges. Not applicable for stale security group rules.
+    ipRanges :: Prelude.Maybe [Prelude.Text],
+    -- | The prefix list IDs. Not applicable for stale security group rules.
+    prefixListIds :: Prelude.Maybe [Prelude.Text],
+    -- | The end of the port range for the TCP and UDP protocols, or an ICMP type
+    -- number. A value of @-1@ indicates all ICMP types.
+    toPort :: Prelude.Maybe Prelude.Int,
+    -- | The security group pairs. Returns the ID of the referenced security
+    -- group and VPC, and the ID and status of the VPC peering connection.
+    userIdGroupPairs :: Prelude.Maybe [UserIdGroupPair]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StaleIpPermission' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fromPort', 'staleIpPermission_fromPort' - The start of the port range for the TCP and UDP protocols, or an ICMP
+-- type number. A value of @-1@ indicates all ICMP types.
+--
+-- 'ipProtocol', 'staleIpPermission_ipProtocol' - The IP protocol name (for @tcp@, @udp@, and @icmp@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers)>.
+--
+-- 'ipRanges', 'staleIpPermission_ipRanges' - The IP ranges. Not applicable for stale security group rules.
+--
+-- 'prefixListIds', 'staleIpPermission_prefixListIds' - The prefix list IDs. Not applicable for stale security group rules.
+--
+-- 'toPort', 'staleIpPermission_toPort' - The end of the port range for the TCP and UDP protocols, or an ICMP type
+-- number. A value of @-1@ indicates all ICMP types.
+--
+-- 'userIdGroupPairs', 'staleIpPermission_userIdGroupPairs' - The security group pairs. Returns the ID of the referenced security
+-- group and VPC, and the ID and status of the VPC peering connection.
+newStaleIpPermission ::
+  StaleIpPermission
+newStaleIpPermission =
+  StaleIpPermission'
+    { fromPort = Prelude.Nothing,
+      ipProtocol = Prelude.Nothing,
+      ipRanges = Prelude.Nothing,
+      prefixListIds = Prelude.Nothing,
+      toPort = Prelude.Nothing,
+      userIdGroupPairs = Prelude.Nothing
+    }
+
+-- | The start of the port range for the TCP and UDP protocols, or an ICMP
+-- type number. A value of @-1@ indicates all ICMP types.
+staleIpPermission_fromPort :: Lens.Lens' StaleIpPermission (Prelude.Maybe Prelude.Int)
+staleIpPermission_fromPort = Lens.lens (\StaleIpPermission' {fromPort} -> fromPort) (\s@StaleIpPermission' {} a -> s {fromPort = a} :: StaleIpPermission)
+
+-- | The IP protocol name (for @tcp@, @udp@, and @icmp@) or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers)>.
+staleIpPermission_ipProtocol :: Lens.Lens' StaleIpPermission (Prelude.Maybe Prelude.Text)
+staleIpPermission_ipProtocol = Lens.lens (\StaleIpPermission' {ipProtocol} -> ipProtocol) (\s@StaleIpPermission' {} a -> s {ipProtocol = a} :: StaleIpPermission)
+
+-- | The IP ranges. Not applicable for stale security group rules.
+staleIpPermission_ipRanges :: Lens.Lens' StaleIpPermission (Prelude.Maybe [Prelude.Text])
+staleIpPermission_ipRanges = Lens.lens (\StaleIpPermission' {ipRanges} -> ipRanges) (\s@StaleIpPermission' {} a -> s {ipRanges = a} :: StaleIpPermission) Prelude.. Lens.mapping Lens.coerced
+
+-- | The prefix list IDs. Not applicable for stale security group rules.
+staleIpPermission_prefixListIds :: Lens.Lens' StaleIpPermission (Prelude.Maybe [Prelude.Text])
+staleIpPermission_prefixListIds = Lens.lens (\StaleIpPermission' {prefixListIds} -> prefixListIds) (\s@StaleIpPermission' {} a -> s {prefixListIds = a} :: StaleIpPermission) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end of the port range for the TCP and UDP protocols, or an ICMP type
+-- number. A value of @-1@ indicates all ICMP types.
+staleIpPermission_toPort :: Lens.Lens' StaleIpPermission (Prelude.Maybe Prelude.Int)
+staleIpPermission_toPort = Lens.lens (\StaleIpPermission' {toPort} -> toPort) (\s@StaleIpPermission' {} a -> s {toPort = a} :: StaleIpPermission)
+
+-- | The security group pairs. Returns the ID of the referenced security
+-- group and VPC, and the ID and status of the VPC peering connection.
+staleIpPermission_userIdGroupPairs :: Lens.Lens' StaleIpPermission (Prelude.Maybe [UserIdGroupPair])
+staleIpPermission_userIdGroupPairs = Lens.lens (\StaleIpPermission' {userIdGroupPairs} -> userIdGroupPairs) (\s@StaleIpPermission' {} a -> s {userIdGroupPairs = a} :: StaleIpPermission) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML StaleIpPermission where
+  parseXML x =
+    StaleIpPermission'
+      Prelude.<$> (x Data..@? "fromPort")
+      Prelude.<*> (x Data..@? "ipProtocol")
+      Prelude.<*> ( x
+                      Data..@? "ipRanges"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "prefixListIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "toPort")
+      Prelude.<*> ( x
+                      Data..@? "groups"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable StaleIpPermission where
+  hashWithSalt _salt StaleIpPermission' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` ipProtocol
+      `Prelude.hashWithSalt` ipRanges
+      `Prelude.hashWithSalt` prefixListIds
+      `Prelude.hashWithSalt` toPort
+      `Prelude.hashWithSalt` userIdGroupPairs
+
+instance Prelude.NFData StaleIpPermission where
+  rnf StaleIpPermission' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf ipProtocol
+      `Prelude.seq` Prelude.rnf ipRanges
+      `Prelude.seq` Prelude.rnf prefixListIds
+      `Prelude.seq` Prelude.rnf toPort
+      `Prelude.seq` Prelude.rnf userIdGroupPairs
diff --git a/gen/Amazonka/EC2/Types/StaleSecurityGroup.hs b/gen/Amazonka/EC2/Types/StaleSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StaleSecurityGroup.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StaleSecurityGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StaleSecurityGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.StaleIpPermission
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a stale security group (a security group that contains stale
+-- rules).
+--
+-- /See:/ 'newStaleSecurityGroup' smart constructor.
+data StaleSecurityGroup = StaleSecurityGroup'
+  { -- | The description of the security group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the security group.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the stale inbound rules in the security group.
+    staleIpPermissions :: Prelude.Maybe [StaleIpPermission],
+    -- | Information about the stale outbound rules in the security group.
+    staleIpPermissionsEgress :: Prelude.Maybe [StaleIpPermission],
+    -- | The ID of the VPC for the security group.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StaleSecurityGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'staleSecurityGroup_description' - The description of the security group.
+--
+-- 'groupId', 'staleSecurityGroup_groupId' - The ID of the security group.
+--
+-- 'groupName', 'staleSecurityGroup_groupName' - The name of the security group.
+--
+-- 'staleIpPermissions', 'staleSecurityGroup_staleIpPermissions' - Information about the stale inbound rules in the security group.
+--
+-- 'staleIpPermissionsEgress', 'staleSecurityGroup_staleIpPermissionsEgress' - Information about the stale outbound rules in the security group.
+--
+-- 'vpcId', 'staleSecurityGroup_vpcId' - The ID of the VPC for the security group.
+newStaleSecurityGroup ::
+  StaleSecurityGroup
+newStaleSecurityGroup =
+  StaleSecurityGroup'
+    { description = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      staleIpPermissions = Prelude.Nothing,
+      staleIpPermissionsEgress = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The description of the security group.
+staleSecurityGroup_description :: Lens.Lens' StaleSecurityGroup (Prelude.Maybe Prelude.Text)
+staleSecurityGroup_description = Lens.lens (\StaleSecurityGroup' {description} -> description) (\s@StaleSecurityGroup' {} a -> s {description = a} :: StaleSecurityGroup)
+
+-- | The ID of the security group.
+staleSecurityGroup_groupId :: Lens.Lens' StaleSecurityGroup (Prelude.Maybe Prelude.Text)
+staleSecurityGroup_groupId = Lens.lens (\StaleSecurityGroup' {groupId} -> groupId) (\s@StaleSecurityGroup' {} a -> s {groupId = a} :: StaleSecurityGroup)
+
+-- | The name of the security group.
+staleSecurityGroup_groupName :: Lens.Lens' StaleSecurityGroup (Prelude.Maybe Prelude.Text)
+staleSecurityGroup_groupName = Lens.lens (\StaleSecurityGroup' {groupName} -> groupName) (\s@StaleSecurityGroup' {} a -> s {groupName = a} :: StaleSecurityGroup)
+
+-- | Information about the stale inbound rules in the security group.
+staleSecurityGroup_staleIpPermissions :: Lens.Lens' StaleSecurityGroup (Prelude.Maybe [StaleIpPermission])
+staleSecurityGroup_staleIpPermissions = Lens.lens (\StaleSecurityGroup' {staleIpPermissions} -> staleIpPermissions) (\s@StaleSecurityGroup' {} a -> s {staleIpPermissions = a} :: StaleSecurityGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the stale outbound rules in the security group.
+staleSecurityGroup_staleIpPermissionsEgress :: Lens.Lens' StaleSecurityGroup (Prelude.Maybe [StaleIpPermission])
+staleSecurityGroup_staleIpPermissionsEgress = Lens.lens (\StaleSecurityGroup' {staleIpPermissionsEgress} -> staleIpPermissionsEgress) (\s@StaleSecurityGroup' {} a -> s {staleIpPermissionsEgress = a} :: StaleSecurityGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC for the security group.
+staleSecurityGroup_vpcId :: Lens.Lens' StaleSecurityGroup (Prelude.Maybe Prelude.Text)
+staleSecurityGroup_vpcId = Lens.lens (\StaleSecurityGroup' {vpcId} -> vpcId) (\s@StaleSecurityGroup' {} a -> s {vpcId = a} :: StaleSecurityGroup)
+
+instance Data.FromXML StaleSecurityGroup where
+  parseXML x =
+    StaleSecurityGroup'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+      Prelude.<*> ( x
+                      Data..@? "staleIpPermissions"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "staleIpPermissionsEgress"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable StaleSecurityGroup where
+  hashWithSalt _salt StaleSecurityGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` staleIpPermissions
+      `Prelude.hashWithSalt` staleIpPermissionsEgress
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData StaleSecurityGroup where
+  rnf StaleSecurityGroup' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf staleIpPermissions
+      `Prelude.seq` Prelude.rnf staleIpPermissionsEgress
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/State.hs b/gen/Amazonka/EC2/Types/State.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/State.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.State
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.State
+  ( State
+      ( ..,
+        State_Available,
+        State_Deleted,
+        State_Deleting,
+        State_Expired,
+        State_Failed,
+        State_Pending,
+        State_PendingAcceptance,
+        State_Rejected
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype State = State' {fromState :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern State_Available :: State
+pattern State_Available = State' "Available"
+
+pattern State_Deleted :: State
+pattern State_Deleted = State' "Deleted"
+
+pattern State_Deleting :: State
+pattern State_Deleting = State' "Deleting"
+
+pattern State_Expired :: State
+pattern State_Expired = State' "Expired"
+
+pattern State_Failed :: State
+pattern State_Failed = State' "Failed"
+
+pattern State_Pending :: State
+pattern State_Pending = State' "Pending"
+
+pattern State_PendingAcceptance :: State
+pattern State_PendingAcceptance = State' "PendingAcceptance"
+
+pattern State_Rejected :: State
+pattern State_Rejected = State' "Rejected"
+
+{-# COMPLETE
+  State_Available,
+  State_Deleted,
+  State_Deleting,
+  State_Expired,
+  State_Failed,
+  State_Pending,
+  State_PendingAcceptance,
+  State_Rejected,
+  State'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/StateReason.hs b/gen/Amazonka/EC2/Types/StateReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StateReason.hs
@@ -0,0 +1,203 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StateReason
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StateReason where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a state change.
+--
+-- /See:/ 'newStateReason' smart constructor.
+data StateReason = StateReason'
+  { -- | The reason code for the state change.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The message for the state change.
+    --
+    -- -   @Server.InsufficientInstanceCapacity@: There was insufficient
+    --     capacity available to satisfy the launch request.
+    --
+    -- -   @Server.InternalError@: An internal error caused the instance to
+    --     terminate during launch.
+    --
+    -- -   @Server.ScheduledStop@: The instance was stopped due to a scheduled
+    --     retirement.
+    --
+    -- -   @Server.SpotInstanceShutdown@: The instance was stopped because the
+    --     number of Spot requests with a maximum price equal to or higher than
+    --     the Spot price exceeded available capacity or because of an increase
+    --     in the Spot price.
+    --
+    -- -   @Server.SpotInstanceTermination@: The instance was terminated
+    --     because the number of Spot requests with a maximum price equal to or
+    --     higher than the Spot price exceeded available capacity or because of
+    --     an increase in the Spot price.
+    --
+    -- -   @Client.InstanceInitiatedShutdown@: The instance was shut down using
+    --     the @shutdown -h@ command from the instance.
+    --
+    -- -   @Client.InstanceTerminated@: The instance was terminated or rebooted
+    --     during AMI creation.
+    --
+    -- -   @Client.InternalError@: A client error caused the instance to
+    --     terminate during launch.
+    --
+    -- -   @Client.InvalidSnapshot.NotFound@: The specified snapshot was not
+    --     found.
+    --
+    -- -   @Client.UserInitiatedHibernate@: Hibernation was initiated on the
+    --     instance.
+    --
+    -- -   @Client.UserInitiatedShutdown@: The instance was shut down using the
+    --     Amazon EC2 API.
+    --
+    -- -   @Client.VolumeLimitExceeded@: The limit on the number of EBS volumes
+    --     or total storage was exceeded. Decrease usage or request an increase
+    --     in your account limits.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StateReason' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'stateReason_code' - The reason code for the state change.
+--
+-- 'message', 'stateReason_message' - The message for the state change.
+--
+-- -   @Server.InsufficientInstanceCapacity@: There was insufficient
+--     capacity available to satisfy the launch request.
+--
+-- -   @Server.InternalError@: An internal error caused the instance to
+--     terminate during launch.
+--
+-- -   @Server.ScheduledStop@: The instance was stopped due to a scheduled
+--     retirement.
+--
+-- -   @Server.SpotInstanceShutdown@: The instance was stopped because the
+--     number of Spot requests with a maximum price equal to or higher than
+--     the Spot price exceeded available capacity or because of an increase
+--     in the Spot price.
+--
+-- -   @Server.SpotInstanceTermination@: The instance was terminated
+--     because the number of Spot requests with a maximum price equal to or
+--     higher than the Spot price exceeded available capacity or because of
+--     an increase in the Spot price.
+--
+-- -   @Client.InstanceInitiatedShutdown@: The instance was shut down using
+--     the @shutdown -h@ command from the instance.
+--
+-- -   @Client.InstanceTerminated@: The instance was terminated or rebooted
+--     during AMI creation.
+--
+-- -   @Client.InternalError@: A client error caused the instance to
+--     terminate during launch.
+--
+-- -   @Client.InvalidSnapshot.NotFound@: The specified snapshot was not
+--     found.
+--
+-- -   @Client.UserInitiatedHibernate@: Hibernation was initiated on the
+--     instance.
+--
+-- -   @Client.UserInitiatedShutdown@: The instance was shut down using the
+--     Amazon EC2 API.
+--
+-- -   @Client.VolumeLimitExceeded@: The limit on the number of EBS volumes
+--     or total storage was exceeded. Decrease usage or request an increase
+--     in your account limits.
+newStateReason ::
+  StateReason
+newStateReason =
+  StateReason'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The reason code for the state change.
+stateReason_code :: Lens.Lens' StateReason (Prelude.Maybe Prelude.Text)
+stateReason_code = Lens.lens (\StateReason' {code} -> code) (\s@StateReason' {} a -> s {code = a} :: StateReason)
+
+-- | The message for the state change.
+--
+-- -   @Server.InsufficientInstanceCapacity@: There was insufficient
+--     capacity available to satisfy the launch request.
+--
+-- -   @Server.InternalError@: An internal error caused the instance to
+--     terminate during launch.
+--
+-- -   @Server.ScheduledStop@: The instance was stopped due to a scheduled
+--     retirement.
+--
+-- -   @Server.SpotInstanceShutdown@: The instance was stopped because the
+--     number of Spot requests with a maximum price equal to or higher than
+--     the Spot price exceeded available capacity or because of an increase
+--     in the Spot price.
+--
+-- -   @Server.SpotInstanceTermination@: The instance was terminated
+--     because the number of Spot requests with a maximum price equal to or
+--     higher than the Spot price exceeded available capacity or because of
+--     an increase in the Spot price.
+--
+-- -   @Client.InstanceInitiatedShutdown@: The instance was shut down using
+--     the @shutdown -h@ command from the instance.
+--
+-- -   @Client.InstanceTerminated@: The instance was terminated or rebooted
+--     during AMI creation.
+--
+-- -   @Client.InternalError@: A client error caused the instance to
+--     terminate during launch.
+--
+-- -   @Client.InvalidSnapshot.NotFound@: The specified snapshot was not
+--     found.
+--
+-- -   @Client.UserInitiatedHibernate@: Hibernation was initiated on the
+--     instance.
+--
+-- -   @Client.UserInitiatedShutdown@: The instance was shut down using the
+--     Amazon EC2 API.
+--
+-- -   @Client.VolumeLimitExceeded@: The limit on the number of EBS volumes
+--     or total storage was exceeded. Decrease usage or request an increase
+--     in your account limits.
+stateReason_message :: Lens.Lens' StateReason (Prelude.Maybe Prelude.Text)
+stateReason_message = Lens.lens (\StateReason' {message} -> message) (\s@StateReason' {} a -> s {message = a} :: StateReason)
+
+instance Data.FromXML StateReason where
+  parseXML x =
+    StateReason'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable StateReason where
+  hashWithSalt _salt StateReason' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData StateReason where
+  rnf StateReason' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/StaticSourcesSupportValue.hs b/gen/Amazonka/EC2/Types/StaticSourcesSupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StaticSourcesSupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StaticSourcesSupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StaticSourcesSupportValue
+  ( StaticSourcesSupportValue
+      ( ..,
+        StaticSourcesSupportValue_Disable,
+        StaticSourcesSupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype StaticSourcesSupportValue = StaticSourcesSupportValue'
+  { fromStaticSourcesSupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StaticSourcesSupportValue_Disable :: StaticSourcesSupportValue
+pattern StaticSourcesSupportValue_Disable = StaticSourcesSupportValue' "disable"
+
+pattern StaticSourcesSupportValue_Enable :: StaticSourcesSupportValue
+pattern StaticSourcesSupportValue_Enable = StaticSourcesSupportValue' "enable"
+
+{-# COMPLETE
+  StaticSourcesSupportValue_Disable,
+  StaticSourcesSupportValue_Enable,
+  StaticSourcesSupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/StatisticType.hs b/gen/Amazonka/EC2/Types/StatisticType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StatisticType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StatisticType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StatisticType
+  ( StatisticType
+      ( ..,
+        StatisticType_P50
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype StatisticType = StatisticType'
+  { fromStatisticType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StatisticType_P50 :: StatisticType
+pattern StatisticType_P50 = StatisticType' "p50"
+
+{-# COMPLETE
+  StatisticType_P50,
+  StatisticType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/StatusName.hs b/gen/Amazonka/EC2/Types/StatusName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StatusName.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StatusName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StatusName
+  ( StatusName
+      ( ..,
+        StatusName_Reachability
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype StatusName = StatusName'
+  { fromStatusName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StatusName_Reachability :: StatusName
+pattern StatusName_Reachability = StatusName' "reachability"
+
+{-# COMPLETE
+  StatusName_Reachability,
+  StatusName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/StatusType.hs b/gen/Amazonka/EC2/Types/StatusType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StatusType.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StatusType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StatusType
+  ( StatusType
+      ( ..,
+        StatusType_Failed,
+        StatusType_Initializing,
+        StatusType_Insufficient_data,
+        StatusType_Passed
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype StatusType = StatusType'
+  { fromStatusType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StatusType_Failed :: StatusType
+pattern StatusType_Failed = StatusType' "failed"
+
+pattern StatusType_Initializing :: StatusType
+pattern StatusType_Initializing = StatusType' "initializing"
+
+pattern StatusType_Insufficient_data :: StatusType
+pattern StatusType_Insufficient_data = StatusType' "insufficient-data"
+
+pattern StatusType_Passed :: StatusType
+pattern StatusType_Passed = StatusType' "passed"
+
+{-# COMPLETE
+  StatusType_Failed,
+  StatusType_Initializing,
+  StatusType_Insufficient_data,
+  StatusType_Passed,
+  StatusType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Storage.hs b/gen/Amazonka/EC2/Types/Storage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Storage.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Storage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Storage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.S3Storage
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the storage location for an instance store-backed AMI.
+--
+-- /See:/ 'newStorage' smart constructor.
+data Storage = Storage'
+  { -- | An Amazon S3 storage location.
+    s3 :: Prelude.Maybe S3Storage
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Storage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3', 'storage_s3' - An Amazon S3 storage location.
+newStorage ::
+  Storage
+newStorage = Storage' {s3 = Prelude.Nothing}
+
+-- | An Amazon S3 storage location.
+storage_s3 :: Lens.Lens' Storage (Prelude.Maybe S3Storage)
+storage_s3 = Lens.lens (\Storage' {s3} -> s3) (\s@Storage' {} a -> s {s3 = a} :: Storage)
+
+instance Data.FromXML Storage where
+  parseXML x = Storage' Prelude.<$> (x Data..@? "S3")
+
+instance Prelude.Hashable Storage where
+  hashWithSalt _salt Storage' {..} =
+    _salt `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData Storage where
+  rnf Storage' {..} = Prelude.rnf s3
+
+instance Data.ToQuery Storage where
+  toQuery Storage' {..} =
+    Prelude.mconcat ["S3" Data.=: s3]
diff --git a/gen/Amazonka/EC2/Types/StorageLocation.hs b/gen/Amazonka/EC2/Types/StorageLocation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StorageLocation.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StorageLocation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StorageLocation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a storage location in Amazon S3.
+--
+-- /See:/ 'newStorageLocation' smart constructor.
+data StorageLocation = StorageLocation'
+  { -- | The name of the S3 bucket.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The key.
+    key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StorageLocation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucket', 'storageLocation_bucket' - The name of the S3 bucket.
+--
+-- 'key', 'storageLocation_key' - The key.
+newStorageLocation ::
+  StorageLocation
+newStorageLocation =
+  StorageLocation'
+    { bucket = Prelude.Nothing,
+      key = Prelude.Nothing
+    }
+
+-- | The name of the S3 bucket.
+storageLocation_bucket :: Lens.Lens' StorageLocation (Prelude.Maybe Prelude.Text)
+storageLocation_bucket = Lens.lens (\StorageLocation' {bucket} -> bucket) (\s@StorageLocation' {} a -> s {bucket = a} :: StorageLocation)
+
+-- | The key.
+storageLocation_key :: Lens.Lens' StorageLocation (Prelude.Maybe Prelude.Text)
+storageLocation_key = Lens.lens (\StorageLocation' {key} -> key) (\s@StorageLocation' {} a -> s {key = a} :: StorageLocation)
+
+instance Prelude.Hashable StorageLocation where
+  hashWithSalt _salt StorageLocation' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData StorageLocation where
+  rnf StorageLocation' {..} =
+    Prelude.rnf bucket `Prelude.seq` Prelude.rnf key
+
+instance Data.ToQuery StorageLocation where
+  toQuery StorageLocation' {..} =
+    Prelude.mconcat
+      ["Bucket" Data.=: bucket, "Key" Data.=: key]
diff --git a/gen/Amazonka/EC2/Types/StorageTier.hs b/gen/Amazonka/EC2/Types/StorageTier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StorageTier.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StorageTier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StorageTier
+  ( StorageTier
+      ( ..,
+        StorageTier_Archive,
+        StorageTier_Standard
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype StorageTier = StorageTier'
+  { fromStorageTier ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StorageTier_Archive :: StorageTier
+pattern StorageTier_Archive = StorageTier' "archive"
+
+pattern StorageTier_Standard :: StorageTier
+pattern StorageTier_Standard = StorageTier' "standard"
+
+{-# COMPLETE
+  StorageTier_Archive,
+  StorageTier_Standard,
+  StorageTier'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/StoreImageTaskResult.hs b/gen/Amazonka/EC2/Types/StoreImageTaskResult.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/StoreImageTaskResult.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.StoreImageTaskResult
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.StoreImageTaskResult where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The information about the AMI store task, including the progress of the
+-- task.
+--
+-- /See:/ 'newStoreImageTaskResult' smart constructor.
+data StoreImageTaskResult = StoreImageTaskResult'
+  { -- | The ID of the AMI that is being stored.
+    amiId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the Amazon S3 bucket that contains the stored AMI object.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The progress of the task as a percentage.
+    progressPercentage :: Prelude.Maybe Prelude.Int,
+    -- | The name of the stored AMI object in the bucket.
+    s3objectKey :: Prelude.Maybe Prelude.Text,
+    -- | If the tasks fails, the reason for the failure is returned. If the task
+    -- succeeds, @null@ is returned.
+    storeTaskFailureReason :: Prelude.Maybe Prelude.Text,
+    -- | The state of the store task (@InProgress@, @Completed@, or @Failed@).
+    storeTaskState :: Prelude.Maybe Prelude.Text,
+    -- | The time the task started.
+    taskStartTime :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StoreImageTaskResult' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amiId', 'storeImageTaskResult_amiId' - The ID of the AMI that is being stored.
+--
+-- 'bucket', 'storeImageTaskResult_bucket' - The name of the Amazon S3 bucket that contains the stored AMI object.
+--
+-- 'progressPercentage', 'storeImageTaskResult_progressPercentage' - The progress of the task as a percentage.
+--
+-- 's3objectKey', 'storeImageTaskResult_s3objectKey' - The name of the stored AMI object in the bucket.
+--
+-- 'storeTaskFailureReason', 'storeImageTaskResult_storeTaskFailureReason' - If the tasks fails, the reason for the failure is returned. If the task
+-- succeeds, @null@ is returned.
+--
+-- 'storeTaskState', 'storeImageTaskResult_storeTaskState' - The state of the store task (@InProgress@, @Completed@, or @Failed@).
+--
+-- 'taskStartTime', 'storeImageTaskResult_taskStartTime' - The time the task started.
+newStoreImageTaskResult ::
+  StoreImageTaskResult
+newStoreImageTaskResult =
+  StoreImageTaskResult'
+    { amiId = Prelude.Nothing,
+      bucket = Prelude.Nothing,
+      progressPercentage = Prelude.Nothing,
+      s3objectKey = Prelude.Nothing,
+      storeTaskFailureReason = Prelude.Nothing,
+      storeTaskState = Prelude.Nothing,
+      taskStartTime = Prelude.Nothing
+    }
+
+-- | The ID of the AMI that is being stored.
+storeImageTaskResult_amiId :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.Text)
+storeImageTaskResult_amiId = Lens.lens (\StoreImageTaskResult' {amiId} -> amiId) (\s@StoreImageTaskResult' {} a -> s {amiId = a} :: StoreImageTaskResult)
+
+-- | The name of the Amazon S3 bucket that contains the stored AMI object.
+storeImageTaskResult_bucket :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.Text)
+storeImageTaskResult_bucket = Lens.lens (\StoreImageTaskResult' {bucket} -> bucket) (\s@StoreImageTaskResult' {} a -> s {bucket = a} :: StoreImageTaskResult)
+
+-- | The progress of the task as a percentage.
+storeImageTaskResult_progressPercentage :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.Int)
+storeImageTaskResult_progressPercentage = Lens.lens (\StoreImageTaskResult' {progressPercentage} -> progressPercentage) (\s@StoreImageTaskResult' {} a -> s {progressPercentage = a} :: StoreImageTaskResult)
+
+-- | The name of the stored AMI object in the bucket.
+storeImageTaskResult_s3objectKey :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.Text)
+storeImageTaskResult_s3objectKey = Lens.lens (\StoreImageTaskResult' {s3objectKey} -> s3objectKey) (\s@StoreImageTaskResult' {} a -> s {s3objectKey = a} :: StoreImageTaskResult)
+
+-- | If the tasks fails, the reason for the failure is returned. If the task
+-- succeeds, @null@ is returned.
+storeImageTaskResult_storeTaskFailureReason :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.Text)
+storeImageTaskResult_storeTaskFailureReason = Lens.lens (\StoreImageTaskResult' {storeTaskFailureReason} -> storeTaskFailureReason) (\s@StoreImageTaskResult' {} a -> s {storeTaskFailureReason = a} :: StoreImageTaskResult)
+
+-- | The state of the store task (@InProgress@, @Completed@, or @Failed@).
+storeImageTaskResult_storeTaskState :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.Text)
+storeImageTaskResult_storeTaskState = Lens.lens (\StoreImageTaskResult' {storeTaskState} -> storeTaskState) (\s@StoreImageTaskResult' {} a -> s {storeTaskState = a} :: StoreImageTaskResult)
+
+-- | The time the task started.
+storeImageTaskResult_taskStartTime :: Lens.Lens' StoreImageTaskResult (Prelude.Maybe Prelude.UTCTime)
+storeImageTaskResult_taskStartTime = Lens.lens (\StoreImageTaskResult' {taskStartTime} -> taskStartTime) (\s@StoreImageTaskResult' {} a -> s {taskStartTime = a} :: StoreImageTaskResult) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML StoreImageTaskResult where
+  parseXML x =
+    StoreImageTaskResult'
+      Prelude.<$> (x Data..@? "amiId")
+      Prelude.<*> (x Data..@? "bucket")
+      Prelude.<*> (x Data..@? "progressPercentage")
+      Prelude.<*> (x Data..@? "s3objectKey")
+      Prelude.<*> (x Data..@? "storeTaskFailureReason")
+      Prelude.<*> (x Data..@? "storeTaskState")
+      Prelude.<*> (x Data..@? "taskStartTime")
+
+instance Prelude.Hashable StoreImageTaskResult where
+  hashWithSalt _salt StoreImageTaskResult' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiId
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` progressPercentage
+      `Prelude.hashWithSalt` s3objectKey
+      `Prelude.hashWithSalt` storeTaskFailureReason
+      `Prelude.hashWithSalt` storeTaskState
+      `Prelude.hashWithSalt` taskStartTime
+
+instance Prelude.NFData StoreImageTaskResult where
+  rnf StoreImageTaskResult' {..} =
+    Prelude.rnf amiId
+      `Prelude.seq` Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf progressPercentage
+      `Prelude.seq` Prelude.rnf s3objectKey
+      `Prelude.seq` Prelude.rnf storeTaskFailureReason
+      `Prelude.seq` Prelude.rnf storeTaskState
+      `Prelude.seq` Prelude.rnf taskStartTime
diff --git a/gen/Amazonka/EC2/Types/Subnet.hs b/gen/Amazonka/EC2/Types/Subnet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Subnet.hs
@@ -0,0 +1,370 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Subnet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Subnet where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PrivateDnsNameOptionsOnLaunch
+import Amazonka.EC2.Types.SubnetIpv6CidrBlockAssociation
+import Amazonka.EC2.Types.SubnetState
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a subnet.
+--
+-- /See:/ 'newSubnet' smart constructor.
+data Subnet = Subnet'
+  { -- | Indicates whether a network interface created in this subnet (including
+    -- a network interface created by RunInstances) receives an IPv6 address.
+    assignIpv6AddressOnCreation :: Prelude.Maybe Prelude.Bool,
+    -- | The AZ ID of the subnet.
+    availabilityZoneId :: Prelude.Maybe Prelude.Text,
+    -- | The customer-owned IPv4 address pool associated with the subnet.
+    customerOwnedIpv4Pool :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether this is the default subnet for the Availability Zone.
+    defaultForAz :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether DNS queries made to the Amazon-provided DNS Resolver
+    -- in this subnet should return synthetic IPv6 addresses for IPv4-only
+    -- destinations.
+    enableDns64 :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates the device position for local network interfaces in this
+    -- subnet. For example, @1@ indicates local network interfaces in this
+    -- subnet are the secondary network interface (eth1).
+    enableLniAtDeviceIndex :: Prelude.Maybe Prelude.Int,
+    -- | Information about the IPv6 CIDR blocks associated with the subnet.
+    ipv6CidrBlockAssociationSet :: Prelude.Maybe [SubnetIpv6CidrBlockAssociation],
+    -- | Indicates whether this is an IPv6 only subnet.
+    ipv6Native :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether a network interface created in this subnet (including
+    -- a network interface created by RunInstances) receives a customer-owned
+    -- IPv4 address.
+    mapCustomerOwnedIpOnLaunch :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether instances launched in this subnet receive a public
+    -- IPv4 address.
+    mapPublicIpOnLaunch :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the subnet.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The type of hostnames to assign to instances in the subnet at launch. An
+    -- instance hostname is based on the IPv4 address or ID of the instance.
+    privateDnsNameOptionsOnLaunch :: Prelude.Maybe PrivateDnsNameOptionsOnLaunch,
+    -- | The Amazon Resource Name (ARN) of the subnet.
+    subnetArn :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the subnet.
+    tags :: Prelude.Maybe [Tag],
+    -- | The Availability Zone of the subnet.
+    availabilityZone :: Prelude.Text,
+    -- | The number of unused private IPv4 addresses in the subnet. The IPv4
+    -- addresses for any stopped instances are considered unavailable.
+    availableIpAddressCount :: Prelude.Int,
+    -- | The IPv4 CIDR block assigned to the subnet.
+    cidrBlock :: Prelude.Text,
+    -- | The current state of the subnet.
+    state :: SubnetState,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Text,
+    -- | The ID of the VPC the subnet is in.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Subnet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'assignIpv6AddressOnCreation', 'subnet_assignIpv6AddressOnCreation' - Indicates whether a network interface created in this subnet (including
+-- a network interface created by RunInstances) receives an IPv6 address.
+--
+-- 'availabilityZoneId', 'subnet_availabilityZoneId' - The AZ ID of the subnet.
+--
+-- 'customerOwnedIpv4Pool', 'subnet_customerOwnedIpv4Pool' - The customer-owned IPv4 address pool associated with the subnet.
+--
+-- 'defaultForAz', 'subnet_defaultForAz' - Indicates whether this is the default subnet for the Availability Zone.
+--
+-- 'enableDns64', 'subnet_enableDns64' - Indicates whether DNS queries made to the Amazon-provided DNS Resolver
+-- in this subnet should return synthetic IPv6 addresses for IPv4-only
+-- destinations.
+--
+-- 'enableLniAtDeviceIndex', 'subnet_enableLniAtDeviceIndex' - Indicates the device position for local network interfaces in this
+-- subnet. For example, @1@ indicates local network interfaces in this
+-- subnet are the secondary network interface (eth1).
+--
+-- 'ipv6CidrBlockAssociationSet', 'subnet_ipv6CidrBlockAssociationSet' - Information about the IPv6 CIDR blocks associated with the subnet.
+--
+-- 'ipv6Native', 'subnet_ipv6Native' - Indicates whether this is an IPv6 only subnet.
+--
+-- 'mapCustomerOwnedIpOnLaunch', 'subnet_mapCustomerOwnedIpOnLaunch' - Indicates whether a network interface created in this subnet (including
+-- a network interface created by RunInstances) receives a customer-owned
+-- IPv4 address.
+--
+-- 'mapPublicIpOnLaunch', 'subnet_mapPublicIpOnLaunch' - Indicates whether instances launched in this subnet receive a public
+-- IPv4 address.
+--
+-- 'outpostArn', 'subnet_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'ownerId', 'subnet_ownerId' - The ID of the Amazon Web Services account that owns the subnet.
+--
+-- 'privateDnsNameOptionsOnLaunch', 'subnet_privateDnsNameOptionsOnLaunch' - The type of hostnames to assign to instances in the subnet at launch. An
+-- instance hostname is based on the IPv4 address or ID of the instance.
+--
+-- 'subnetArn', 'subnet_subnetArn' - The Amazon Resource Name (ARN) of the subnet.
+--
+-- 'tags', 'subnet_tags' - Any tags assigned to the subnet.
+--
+-- 'availabilityZone', 'subnet_availabilityZone' - The Availability Zone of the subnet.
+--
+-- 'availableIpAddressCount', 'subnet_availableIpAddressCount' - The number of unused private IPv4 addresses in the subnet. The IPv4
+-- addresses for any stopped instances are considered unavailable.
+--
+-- 'cidrBlock', 'subnet_cidrBlock' - The IPv4 CIDR block assigned to the subnet.
+--
+-- 'state', 'subnet_state' - The current state of the subnet.
+--
+-- 'subnetId', 'subnet_subnetId' - The ID of the subnet.
+--
+-- 'vpcId', 'subnet_vpcId' - The ID of the VPC the subnet is in.
+newSubnet ::
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  -- | 'availableIpAddressCount'
+  Prelude.Int ->
+  -- | 'cidrBlock'
+  Prelude.Text ->
+  -- | 'state'
+  SubnetState ->
+  -- | 'subnetId'
+  Prelude.Text ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  Subnet
+newSubnet
+  pAvailabilityZone_
+  pAvailableIpAddressCount_
+  pCidrBlock_
+  pState_
+  pSubnetId_
+  pVpcId_ =
+    Subnet'
+      { assignIpv6AddressOnCreation =
+          Prelude.Nothing,
+        availabilityZoneId = Prelude.Nothing,
+        customerOwnedIpv4Pool = Prelude.Nothing,
+        defaultForAz = Prelude.Nothing,
+        enableDns64 = Prelude.Nothing,
+        enableLniAtDeviceIndex = Prelude.Nothing,
+        ipv6CidrBlockAssociationSet = Prelude.Nothing,
+        ipv6Native = Prelude.Nothing,
+        mapCustomerOwnedIpOnLaunch = Prelude.Nothing,
+        mapPublicIpOnLaunch = Prelude.Nothing,
+        outpostArn = Prelude.Nothing,
+        ownerId = Prelude.Nothing,
+        privateDnsNameOptionsOnLaunch = Prelude.Nothing,
+        subnetArn = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        availabilityZone = pAvailabilityZone_,
+        availableIpAddressCount = pAvailableIpAddressCount_,
+        cidrBlock = pCidrBlock_,
+        state = pState_,
+        subnetId = pSubnetId_,
+        vpcId = pVpcId_
+      }
+
+-- | Indicates whether a network interface created in this subnet (including
+-- a network interface created by RunInstances) receives an IPv6 address.
+subnet_assignIpv6AddressOnCreation :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Bool)
+subnet_assignIpv6AddressOnCreation = Lens.lens (\Subnet' {assignIpv6AddressOnCreation} -> assignIpv6AddressOnCreation) (\s@Subnet' {} a -> s {assignIpv6AddressOnCreation = a} :: Subnet)
+
+-- | The AZ ID of the subnet.
+subnet_availabilityZoneId :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Text)
+subnet_availabilityZoneId = Lens.lens (\Subnet' {availabilityZoneId} -> availabilityZoneId) (\s@Subnet' {} a -> s {availabilityZoneId = a} :: Subnet)
+
+-- | The customer-owned IPv4 address pool associated with the subnet.
+subnet_customerOwnedIpv4Pool :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Text)
+subnet_customerOwnedIpv4Pool = Lens.lens (\Subnet' {customerOwnedIpv4Pool} -> customerOwnedIpv4Pool) (\s@Subnet' {} a -> s {customerOwnedIpv4Pool = a} :: Subnet)
+
+-- | Indicates whether this is the default subnet for the Availability Zone.
+subnet_defaultForAz :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Bool)
+subnet_defaultForAz = Lens.lens (\Subnet' {defaultForAz} -> defaultForAz) (\s@Subnet' {} a -> s {defaultForAz = a} :: Subnet)
+
+-- | Indicates whether DNS queries made to the Amazon-provided DNS Resolver
+-- in this subnet should return synthetic IPv6 addresses for IPv4-only
+-- destinations.
+subnet_enableDns64 :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Bool)
+subnet_enableDns64 = Lens.lens (\Subnet' {enableDns64} -> enableDns64) (\s@Subnet' {} a -> s {enableDns64 = a} :: Subnet)
+
+-- | Indicates the device position for local network interfaces in this
+-- subnet. For example, @1@ indicates local network interfaces in this
+-- subnet are the secondary network interface (eth1).
+subnet_enableLniAtDeviceIndex :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Int)
+subnet_enableLniAtDeviceIndex = Lens.lens (\Subnet' {enableLniAtDeviceIndex} -> enableLniAtDeviceIndex) (\s@Subnet' {} a -> s {enableLniAtDeviceIndex = a} :: Subnet)
+
+-- | Information about the IPv6 CIDR blocks associated with the subnet.
+subnet_ipv6CidrBlockAssociationSet :: Lens.Lens' Subnet (Prelude.Maybe [SubnetIpv6CidrBlockAssociation])
+subnet_ipv6CidrBlockAssociationSet = Lens.lens (\Subnet' {ipv6CidrBlockAssociationSet} -> ipv6CidrBlockAssociationSet) (\s@Subnet' {} a -> s {ipv6CidrBlockAssociationSet = a} :: Subnet) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether this is an IPv6 only subnet.
+subnet_ipv6Native :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Bool)
+subnet_ipv6Native = Lens.lens (\Subnet' {ipv6Native} -> ipv6Native) (\s@Subnet' {} a -> s {ipv6Native = a} :: Subnet)
+
+-- | Indicates whether a network interface created in this subnet (including
+-- a network interface created by RunInstances) receives a customer-owned
+-- IPv4 address.
+subnet_mapCustomerOwnedIpOnLaunch :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Bool)
+subnet_mapCustomerOwnedIpOnLaunch = Lens.lens (\Subnet' {mapCustomerOwnedIpOnLaunch} -> mapCustomerOwnedIpOnLaunch) (\s@Subnet' {} a -> s {mapCustomerOwnedIpOnLaunch = a} :: Subnet)
+
+-- | Indicates whether instances launched in this subnet receive a public
+-- IPv4 address.
+subnet_mapPublicIpOnLaunch :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Bool)
+subnet_mapPublicIpOnLaunch = Lens.lens (\Subnet' {mapPublicIpOnLaunch} -> mapPublicIpOnLaunch) (\s@Subnet' {} a -> s {mapPublicIpOnLaunch = a} :: Subnet)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+subnet_outpostArn :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Text)
+subnet_outpostArn = Lens.lens (\Subnet' {outpostArn} -> outpostArn) (\s@Subnet' {} a -> s {outpostArn = a} :: Subnet)
+
+-- | The ID of the Amazon Web Services account that owns the subnet.
+subnet_ownerId :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Text)
+subnet_ownerId = Lens.lens (\Subnet' {ownerId} -> ownerId) (\s@Subnet' {} a -> s {ownerId = a} :: Subnet)
+
+-- | The type of hostnames to assign to instances in the subnet at launch. An
+-- instance hostname is based on the IPv4 address or ID of the instance.
+subnet_privateDnsNameOptionsOnLaunch :: Lens.Lens' Subnet (Prelude.Maybe PrivateDnsNameOptionsOnLaunch)
+subnet_privateDnsNameOptionsOnLaunch = Lens.lens (\Subnet' {privateDnsNameOptionsOnLaunch} -> privateDnsNameOptionsOnLaunch) (\s@Subnet' {} a -> s {privateDnsNameOptionsOnLaunch = a} :: Subnet)
+
+-- | The Amazon Resource Name (ARN) of the subnet.
+subnet_subnetArn :: Lens.Lens' Subnet (Prelude.Maybe Prelude.Text)
+subnet_subnetArn = Lens.lens (\Subnet' {subnetArn} -> subnetArn) (\s@Subnet' {} a -> s {subnetArn = a} :: Subnet)
+
+-- | Any tags assigned to the subnet.
+subnet_tags :: Lens.Lens' Subnet (Prelude.Maybe [Tag])
+subnet_tags = Lens.lens (\Subnet' {tags} -> tags) (\s@Subnet' {} a -> s {tags = a} :: Subnet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Availability Zone of the subnet.
+subnet_availabilityZone :: Lens.Lens' Subnet Prelude.Text
+subnet_availabilityZone = Lens.lens (\Subnet' {availabilityZone} -> availabilityZone) (\s@Subnet' {} a -> s {availabilityZone = a} :: Subnet)
+
+-- | The number of unused private IPv4 addresses in the subnet. The IPv4
+-- addresses for any stopped instances are considered unavailable.
+subnet_availableIpAddressCount :: Lens.Lens' Subnet Prelude.Int
+subnet_availableIpAddressCount = Lens.lens (\Subnet' {availableIpAddressCount} -> availableIpAddressCount) (\s@Subnet' {} a -> s {availableIpAddressCount = a} :: Subnet)
+
+-- | The IPv4 CIDR block assigned to the subnet.
+subnet_cidrBlock :: Lens.Lens' Subnet Prelude.Text
+subnet_cidrBlock = Lens.lens (\Subnet' {cidrBlock} -> cidrBlock) (\s@Subnet' {} a -> s {cidrBlock = a} :: Subnet)
+
+-- | The current state of the subnet.
+subnet_state :: Lens.Lens' Subnet SubnetState
+subnet_state = Lens.lens (\Subnet' {state} -> state) (\s@Subnet' {} a -> s {state = a} :: Subnet)
+
+-- | The ID of the subnet.
+subnet_subnetId :: Lens.Lens' Subnet Prelude.Text
+subnet_subnetId = Lens.lens (\Subnet' {subnetId} -> subnetId) (\s@Subnet' {} a -> s {subnetId = a} :: Subnet)
+
+-- | The ID of the VPC the subnet is in.
+subnet_vpcId :: Lens.Lens' Subnet Prelude.Text
+subnet_vpcId = Lens.lens (\Subnet' {vpcId} -> vpcId) (\s@Subnet' {} a -> s {vpcId = a} :: Subnet)
+
+instance Data.FromXML Subnet where
+  parseXML x =
+    Subnet'
+      Prelude.<$> (x Data..@? "assignIpv6AddressOnCreation")
+      Prelude.<*> (x Data..@? "availabilityZoneId")
+      Prelude.<*> (x Data..@? "customerOwnedIpv4Pool")
+      Prelude.<*> (x Data..@? "defaultForAz")
+      Prelude.<*> (x Data..@? "enableDns64")
+      Prelude.<*> (x Data..@? "enableLniAtDeviceIndex")
+      Prelude.<*> ( x
+                      Data..@? "ipv6CidrBlockAssociationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipv6Native")
+      Prelude.<*> (x Data..@? "mapCustomerOwnedIpOnLaunch")
+      Prelude.<*> (x Data..@? "mapPublicIpOnLaunch")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "privateDnsNameOptionsOnLaunch")
+      Prelude.<*> (x Data..@? "subnetArn")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "availabilityZone")
+      Prelude.<*> (x Data..@ "availableIpAddressCount")
+      Prelude.<*> (x Data..@ "cidrBlock")
+      Prelude.<*> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "subnetId")
+      Prelude.<*> (x Data..@ "vpcId")
+
+instance Prelude.Hashable Subnet where
+  hashWithSalt _salt Subnet' {..} =
+    _salt
+      `Prelude.hashWithSalt` assignIpv6AddressOnCreation
+      `Prelude.hashWithSalt` availabilityZoneId
+      `Prelude.hashWithSalt` customerOwnedIpv4Pool
+      `Prelude.hashWithSalt` defaultForAz
+      `Prelude.hashWithSalt` enableDns64
+      `Prelude.hashWithSalt` enableLniAtDeviceIndex
+      `Prelude.hashWithSalt` ipv6CidrBlockAssociationSet
+      `Prelude.hashWithSalt` ipv6Native
+      `Prelude.hashWithSalt` mapCustomerOwnedIpOnLaunch
+      `Prelude.hashWithSalt` mapPublicIpOnLaunch
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` privateDnsNameOptionsOnLaunch
+      `Prelude.hashWithSalt` subnetArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` availableIpAddressCount
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData Subnet where
+  rnf Subnet' {..} =
+    Prelude.rnf assignIpv6AddressOnCreation
+      `Prelude.seq` Prelude.rnf availabilityZoneId
+      `Prelude.seq` Prelude.rnf customerOwnedIpv4Pool
+      `Prelude.seq` Prelude.rnf defaultForAz
+      `Prelude.seq` Prelude.rnf enableDns64
+      `Prelude.seq` Prelude.rnf enableLniAtDeviceIndex
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockAssociationSet
+      `Prelude.seq` Prelude.rnf ipv6Native
+      `Prelude.seq` Prelude.rnf mapCustomerOwnedIpOnLaunch
+      `Prelude.seq` Prelude.rnf mapPublicIpOnLaunch
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf privateDnsNameOptionsOnLaunch
+      `Prelude.seq` Prelude.rnf subnetArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf availableIpAddressCount
+      `Prelude.seq` Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/SubnetAssociation.hs b/gen/Amazonka/EC2/Types/SubnetAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetAssociation.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayMulitcastDomainAssociationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the subnet association with the transit gateway multicast
+-- domain.
+--
+-- /See:/ 'newSubnetAssociation' smart constructor.
+data SubnetAssociation = SubnetAssociation'
+  { -- | The state of the subnet association.
+    state :: Prelude.Maybe TransitGatewayMulitcastDomainAssociationState,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubnetAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'subnetAssociation_state' - The state of the subnet association.
+--
+-- 'subnetId', 'subnetAssociation_subnetId' - The ID of the subnet.
+newSubnetAssociation ::
+  SubnetAssociation
+newSubnetAssociation =
+  SubnetAssociation'
+    { state = Prelude.Nothing,
+      subnetId = Prelude.Nothing
+    }
+
+-- | The state of the subnet association.
+subnetAssociation_state :: Lens.Lens' SubnetAssociation (Prelude.Maybe TransitGatewayMulitcastDomainAssociationState)
+subnetAssociation_state = Lens.lens (\SubnetAssociation' {state} -> state) (\s@SubnetAssociation' {} a -> s {state = a} :: SubnetAssociation)
+
+-- | The ID of the subnet.
+subnetAssociation_subnetId :: Lens.Lens' SubnetAssociation (Prelude.Maybe Prelude.Text)
+subnetAssociation_subnetId = Lens.lens (\SubnetAssociation' {subnetId} -> subnetId) (\s@SubnetAssociation' {} a -> s {subnetId = a} :: SubnetAssociation)
+
+instance Data.FromXML SubnetAssociation where
+  parseXML x =
+    SubnetAssociation'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "subnetId")
+
+instance Prelude.Hashable SubnetAssociation where
+  hashWithSalt _salt SubnetAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetId
+
+instance Prelude.NFData SubnetAssociation where
+  rnf SubnetAssociation' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetId
diff --git a/gen/Amazonka/EC2/Types/SubnetCidrBlockState.hs b/gen/Amazonka/EC2/Types/SubnetCidrBlockState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetCidrBlockState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetCidrBlockState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetCidrBlockState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SubnetCidrBlockStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a CIDR block.
+--
+-- /See:/ 'newSubnetCidrBlockState' smart constructor.
+data SubnetCidrBlockState = SubnetCidrBlockState'
+  { -- | The state of a CIDR block.
+    state :: Prelude.Maybe SubnetCidrBlockStateCode,
+    -- | A message about the status of the CIDR block, if applicable.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubnetCidrBlockState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'subnetCidrBlockState_state' - The state of a CIDR block.
+--
+-- 'statusMessage', 'subnetCidrBlockState_statusMessage' - A message about the status of the CIDR block, if applicable.
+newSubnetCidrBlockState ::
+  SubnetCidrBlockState
+newSubnetCidrBlockState =
+  SubnetCidrBlockState'
+    { state = Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The state of a CIDR block.
+subnetCidrBlockState_state :: Lens.Lens' SubnetCidrBlockState (Prelude.Maybe SubnetCidrBlockStateCode)
+subnetCidrBlockState_state = Lens.lens (\SubnetCidrBlockState' {state} -> state) (\s@SubnetCidrBlockState' {} a -> s {state = a} :: SubnetCidrBlockState)
+
+-- | A message about the status of the CIDR block, if applicable.
+subnetCidrBlockState_statusMessage :: Lens.Lens' SubnetCidrBlockState (Prelude.Maybe Prelude.Text)
+subnetCidrBlockState_statusMessage = Lens.lens (\SubnetCidrBlockState' {statusMessage} -> statusMessage) (\s@SubnetCidrBlockState' {} a -> s {statusMessage = a} :: SubnetCidrBlockState)
+
+instance Data.FromXML SubnetCidrBlockState where
+  parseXML x =
+    SubnetCidrBlockState'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "statusMessage")
+
+instance Prelude.Hashable SubnetCidrBlockState where
+  hashWithSalt _salt SubnetCidrBlockState' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData SubnetCidrBlockState where
+  rnf SubnetCidrBlockState' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/SubnetCidrBlockStateCode.hs b/gen/Amazonka/EC2/Types/SubnetCidrBlockStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetCidrBlockStateCode.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetCidrBlockStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetCidrBlockStateCode
+  ( SubnetCidrBlockStateCode
+      ( ..,
+        SubnetCidrBlockStateCode_Associated,
+        SubnetCidrBlockStateCode_Associating,
+        SubnetCidrBlockStateCode_Disassociated,
+        SubnetCidrBlockStateCode_Disassociating,
+        SubnetCidrBlockStateCode_Failed,
+        SubnetCidrBlockStateCode_Failing
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SubnetCidrBlockStateCode = SubnetCidrBlockStateCode'
+  { fromSubnetCidrBlockStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SubnetCidrBlockStateCode_Associated :: SubnetCidrBlockStateCode
+pattern SubnetCidrBlockStateCode_Associated = SubnetCidrBlockStateCode' "associated"
+
+pattern SubnetCidrBlockStateCode_Associating :: SubnetCidrBlockStateCode
+pattern SubnetCidrBlockStateCode_Associating = SubnetCidrBlockStateCode' "associating"
+
+pattern SubnetCidrBlockStateCode_Disassociated :: SubnetCidrBlockStateCode
+pattern SubnetCidrBlockStateCode_Disassociated = SubnetCidrBlockStateCode' "disassociated"
+
+pattern SubnetCidrBlockStateCode_Disassociating :: SubnetCidrBlockStateCode
+pattern SubnetCidrBlockStateCode_Disassociating = SubnetCidrBlockStateCode' "disassociating"
+
+pattern SubnetCidrBlockStateCode_Failed :: SubnetCidrBlockStateCode
+pattern SubnetCidrBlockStateCode_Failed = SubnetCidrBlockStateCode' "failed"
+
+pattern SubnetCidrBlockStateCode_Failing :: SubnetCidrBlockStateCode
+pattern SubnetCidrBlockStateCode_Failing = SubnetCidrBlockStateCode' "failing"
+
+{-# COMPLETE
+  SubnetCidrBlockStateCode_Associated,
+  SubnetCidrBlockStateCode_Associating,
+  SubnetCidrBlockStateCode_Disassociated,
+  SubnetCidrBlockStateCode_Disassociating,
+  SubnetCidrBlockStateCode_Failed,
+  SubnetCidrBlockStateCode_Failing,
+  SubnetCidrBlockStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SubnetCidrReservation.hs b/gen/Amazonka/EC2/Types/SubnetCidrReservation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetCidrReservation.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetCidrReservation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetCidrReservation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SubnetCidrReservationType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a subnet CIDR reservation.
+--
+-- /See:/ 'newSubnetCidrReservation' smart constructor.
+data SubnetCidrReservation = SubnetCidrReservation'
+  { -- | The CIDR that has been reserved.
+    cidr :: Prelude.Maybe Prelude.Text,
+    -- | The description assigned to the subnet CIDR reservation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the account that owns the subnet CIDR reservation.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The type of reservation.
+    reservationType :: Prelude.Maybe SubnetCidrReservationType,
+    -- | The ID of the subnet CIDR reservation.
+    subnetCidrReservationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the subnet CIDR reservation.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubnetCidrReservation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidr', 'subnetCidrReservation_cidr' - The CIDR that has been reserved.
+--
+-- 'description', 'subnetCidrReservation_description' - The description assigned to the subnet CIDR reservation.
+--
+-- 'ownerId', 'subnetCidrReservation_ownerId' - The ID of the account that owns the subnet CIDR reservation.
+--
+-- 'reservationType', 'subnetCidrReservation_reservationType' - The type of reservation.
+--
+-- 'subnetCidrReservationId', 'subnetCidrReservation_subnetCidrReservationId' - The ID of the subnet CIDR reservation.
+--
+-- 'subnetId', 'subnetCidrReservation_subnetId' - The ID of the subnet.
+--
+-- 'tags', 'subnetCidrReservation_tags' - The tags assigned to the subnet CIDR reservation.
+newSubnetCidrReservation ::
+  SubnetCidrReservation
+newSubnetCidrReservation =
+  SubnetCidrReservation'
+    { cidr = Prelude.Nothing,
+      description = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      reservationType = Prelude.Nothing,
+      subnetCidrReservationId = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The CIDR that has been reserved.
+subnetCidrReservation_cidr :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
+subnetCidrReservation_cidr = Lens.lens (\SubnetCidrReservation' {cidr} -> cidr) (\s@SubnetCidrReservation' {} a -> s {cidr = a} :: SubnetCidrReservation)
+
+-- | The description assigned to the subnet CIDR reservation.
+subnetCidrReservation_description :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
+subnetCidrReservation_description = Lens.lens (\SubnetCidrReservation' {description} -> description) (\s@SubnetCidrReservation' {} a -> s {description = a} :: SubnetCidrReservation)
+
+-- | The ID of the account that owns the subnet CIDR reservation.
+subnetCidrReservation_ownerId :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
+subnetCidrReservation_ownerId = Lens.lens (\SubnetCidrReservation' {ownerId} -> ownerId) (\s@SubnetCidrReservation' {} a -> s {ownerId = a} :: SubnetCidrReservation)
+
+-- | The type of reservation.
+subnetCidrReservation_reservationType :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe SubnetCidrReservationType)
+subnetCidrReservation_reservationType = Lens.lens (\SubnetCidrReservation' {reservationType} -> reservationType) (\s@SubnetCidrReservation' {} a -> s {reservationType = a} :: SubnetCidrReservation)
+
+-- | The ID of the subnet CIDR reservation.
+subnetCidrReservation_subnetCidrReservationId :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
+subnetCidrReservation_subnetCidrReservationId = Lens.lens (\SubnetCidrReservation' {subnetCidrReservationId} -> subnetCidrReservationId) (\s@SubnetCidrReservation' {} a -> s {subnetCidrReservationId = a} :: SubnetCidrReservation)
+
+-- | The ID of the subnet.
+subnetCidrReservation_subnetId :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe Prelude.Text)
+subnetCidrReservation_subnetId = Lens.lens (\SubnetCidrReservation' {subnetId} -> subnetId) (\s@SubnetCidrReservation' {} a -> s {subnetId = a} :: SubnetCidrReservation)
+
+-- | The tags assigned to the subnet CIDR reservation.
+subnetCidrReservation_tags :: Lens.Lens' SubnetCidrReservation (Prelude.Maybe [Tag])
+subnetCidrReservation_tags = Lens.lens (\SubnetCidrReservation' {tags} -> tags) (\s@SubnetCidrReservation' {} a -> s {tags = a} :: SubnetCidrReservation) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML SubnetCidrReservation where
+  parseXML x =
+    SubnetCidrReservation'
+      Prelude.<$> (x Data..@? "cidr")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "reservationType")
+      Prelude.<*> (x Data..@? "subnetCidrReservationId")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable SubnetCidrReservation where
+  hashWithSalt _salt SubnetCidrReservation' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidr
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` reservationType
+      `Prelude.hashWithSalt` subnetCidrReservationId
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData SubnetCidrReservation where
+  rnf SubnetCidrReservation' {..} =
+    Prelude.rnf cidr
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf reservationType
+      `Prelude.seq` Prelude.rnf subnetCidrReservationId
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tags
diff --git a/gen/Amazonka/EC2/Types/SubnetCidrReservationType.hs b/gen/Amazonka/EC2/Types/SubnetCidrReservationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetCidrReservationType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetCidrReservationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetCidrReservationType
+  ( SubnetCidrReservationType
+      ( ..,
+        SubnetCidrReservationType_Explicit,
+        SubnetCidrReservationType_Prefix
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SubnetCidrReservationType = SubnetCidrReservationType'
+  { fromSubnetCidrReservationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SubnetCidrReservationType_Explicit :: SubnetCidrReservationType
+pattern SubnetCidrReservationType_Explicit = SubnetCidrReservationType' "explicit"
+
+pattern SubnetCidrReservationType_Prefix :: SubnetCidrReservationType
+pattern SubnetCidrReservationType_Prefix = SubnetCidrReservationType' "prefix"
+
+{-# COMPLETE
+  SubnetCidrReservationType_Explicit,
+  SubnetCidrReservationType_Prefix,
+  SubnetCidrReservationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/SubnetIpv6CidrBlockAssociation.hs b/gen/Amazonka/EC2/Types/SubnetIpv6CidrBlockAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetIpv6CidrBlockAssociation.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetIpv6CidrBlockAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetIpv6CidrBlockAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SubnetCidrBlockState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a subnet and an IPv6 CIDR block.
+--
+-- /See:/ 'newSubnetIpv6CidrBlockAssociation' smart constructor.
+data SubnetIpv6CidrBlockAssociation = SubnetIpv6CidrBlockAssociation'
+  { -- | The ID of the association.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR block.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The state of the CIDR block.
+    ipv6CidrBlockState :: Prelude.Maybe SubnetCidrBlockState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SubnetIpv6CidrBlockAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'subnetIpv6CidrBlockAssociation_associationId' - The ID of the association.
+--
+-- 'ipv6CidrBlock', 'subnetIpv6CidrBlockAssociation_ipv6CidrBlock' - The IPv6 CIDR block.
+--
+-- 'ipv6CidrBlockState', 'subnetIpv6CidrBlockAssociation_ipv6CidrBlockState' - The state of the CIDR block.
+newSubnetIpv6CidrBlockAssociation ::
+  SubnetIpv6CidrBlockAssociation
+newSubnetIpv6CidrBlockAssociation =
+  SubnetIpv6CidrBlockAssociation'
+    { associationId =
+        Prelude.Nothing,
+      ipv6CidrBlock = Prelude.Nothing,
+      ipv6CidrBlockState = Prelude.Nothing
+    }
+
+-- | The ID of the association.
+subnetIpv6CidrBlockAssociation_associationId :: Lens.Lens' SubnetIpv6CidrBlockAssociation (Prelude.Maybe Prelude.Text)
+subnetIpv6CidrBlockAssociation_associationId = Lens.lens (\SubnetIpv6CidrBlockAssociation' {associationId} -> associationId) (\s@SubnetIpv6CidrBlockAssociation' {} a -> s {associationId = a} :: SubnetIpv6CidrBlockAssociation)
+
+-- | The IPv6 CIDR block.
+subnetIpv6CidrBlockAssociation_ipv6CidrBlock :: Lens.Lens' SubnetIpv6CidrBlockAssociation (Prelude.Maybe Prelude.Text)
+subnetIpv6CidrBlockAssociation_ipv6CidrBlock = Lens.lens (\SubnetIpv6CidrBlockAssociation' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@SubnetIpv6CidrBlockAssociation' {} a -> s {ipv6CidrBlock = a} :: SubnetIpv6CidrBlockAssociation)
+
+-- | The state of the CIDR block.
+subnetIpv6CidrBlockAssociation_ipv6CidrBlockState :: Lens.Lens' SubnetIpv6CidrBlockAssociation (Prelude.Maybe SubnetCidrBlockState)
+subnetIpv6CidrBlockAssociation_ipv6CidrBlockState = Lens.lens (\SubnetIpv6CidrBlockAssociation' {ipv6CidrBlockState} -> ipv6CidrBlockState) (\s@SubnetIpv6CidrBlockAssociation' {} a -> s {ipv6CidrBlockState = a} :: SubnetIpv6CidrBlockAssociation)
+
+instance Data.FromXML SubnetIpv6CidrBlockAssociation where
+  parseXML x =
+    SubnetIpv6CidrBlockAssociation'
+      Prelude.<$> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "ipv6CidrBlock")
+      Prelude.<*> (x Data..@? "ipv6CidrBlockState")
+
+instance
+  Prelude.Hashable
+    SubnetIpv6CidrBlockAssociation
+  where
+  hashWithSalt
+    _salt
+    SubnetIpv6CidrBlockAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` associationId
+        `Prelude.hashWithSalt` ipv6CidrBlock
+        `Prelude.hashWithSalt` ipv6CidrBlockState
+
+instance
+  Prelude.NFData
+    SubnetIpv6CidrBlockAssociation
+  where
+  rnf SubnetIpv6CidrBlockAssociation' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockState
diff --git a/gen/Amazonka/EC2/Types/SubnetState.hs b/gen/Amazonka/EC2/Types/SubnetState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SubnetState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SubnetState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SubnetState
+  ( SubnetState
+      ( ..,
+        SubnetState_Available,
+        SubnetState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SubnetState = SubnetState'
+  { fromSubnetState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SubnetState_Available :: SubnetState
+pattern SubnetState_Available = SubnetState' "available"
+
+pattern SubnetState_Pending :: SubnetState
+pattern SubnetState_Pending = SubnetState' "pending"
+
+{-# COMPLETE
+  SubnetState_Available,
+  SubnetState_Pending,
+  SubnetState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Subscription.hs b/gen/Amazonka/EC2/Types/Subscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Subscription.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Subscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Subscription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MetricType
+import Amazonka.EC2.Types.PeriodType
+import Amazonka.EC2.Types.StatisticType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an Infrastructure Performance subscription.
+--
+-- /See:/ 'newSubscription' smart constructor.
+data Subscription = Subscription'
+  { -- | The Region or Availability Zone that\'s the target for the subscription.
+    -- For example, @eu-west-1@.
+    destination :: Prelude.Maybe Prelude.Text,
+    -- | The metric used for the subscription.
+    metric :: Prelude.Maybe MetricType,
+    -- | The data aggregation time for the subscription.
+    period :: Prelude.Maybe PeriodType,
+    -- | The Region or Availability Zone that\'s the source for the subscription.
+    -- For example, @us-east-1@.
+    source :: Prelude.Maybe Prelude.Text,
+    -- | The statistic used for the subscription.
+    statistic :: Prelude.Maybe StatisticType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Subscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destination', 'subscription_destination' - The Region or Availability Zone that\'s the target for the subscription.
+-- For example, @eu-west-1@.
+--
+-- 'metric', 'subscription_metric' - The metric used for the subscription.
+--
+-- 'period', 'subscription_period' - The data aggregation time for the subscription.
+--
+-- 'source', 'subscription_source' - The Region or Availability Zone that\'s the source for the subscription.
+-- For example, @us-east-1@.
+--
+-- 'statistic', 'subscription_statistic' - The statistic used for the subscription.
+newSubscription ::
+  Subscription
+newSubscription =
+  Subscription'
+    { destination = Prelude.Nothing,
+      metric = Prelude.Nothing,
+      period = Prelude.Nothing,
+      source = Prelude.Nothing,
+      statistic = Prelude.Nothing
+    }
+
+-- | The Region or Availability Zone that\'s the target for the subscription.
+-- For example, @eu-west-1@.
+subscription_destination :: Lens.Lens' Subscription (Prelude.Maybe Prelude.Text)
+subscription_destination = Lens.lens (\Subscription' {destination} -> destination) (\s@Subscription' {} a -> s {destination = a} :: Subscription)
+
+-- | The metric used for the subscription.
+subscription_metric :: Lens.Lens' Subscription (Prelude.Maybe MetricType)
+subscription_metric = Lens.lens (\Subscription' {metric} -> metric) (\s@Subscription' {} a -> s {metric = a} :: Subscription)
+
+-- | The data aggregation time for the subscription.
+subscription_period :: Lens.Lens' Subscription (Prelude.Maybe PeriodType)
+subscription_period = Lens.lens (\Subscription' {period} -> period) (\s@Subscription' {} a -> s {period = a} :: Subscription)
+
+-- | The Region or Availability Zone that\'s the source for the subscription.
+-- For example, @us-east-1@.
+subscription_source :: Lens.Lens' Subscription (Prelude.Maybe Prelude.Text)
+subscription_source = Lens.lens (\Subscription' {source} -> source) (\s@Subscription' {} a -> s {source = a} :: Subscription)
+
+-- | The statistic used for the subscription.
+subscription_statistic :: Lens.Lens' Subscription (Prelude.Maybe StatisticType)
+subscription_statistic = Lens.lens (\Subscription' {statistic} -> statistic) (\s@Subscription' {} a -> s {statistic = a} :: Subscription)
+
+instance Data.FromXML Subscription where
+  parseXML x =
+    Subscription'
+      Prelude.<$> (x Data..@? "destination")
+      Prelude.<*> (x Data..@? "metric")
+      Prelude.<*> (x Data..@? "period")
+      Prelude.<*> (x Data..@? "source")
+      Prelude.<*> (x Data..@? "statistic")
+
+instance Prelude.Hashable Subscription where
+  hashWithSalt _salt Subscription' {..} =
+    _salt
+      `Prelude.hashWithSalt` destination
+      `Prelude.hashWithSalt` metric
+      `Prelude.hashWithSalt` period
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` statistic
+
+instance Prelude.NFData Subscription where
+  rnf Subscription' {..} =
+    Prelude.rnf destination
+      `Prelude.seq` Prelude.rnf metric
+      `Prelude.seq` Prelude.rnf period
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf statistic
diff --git a/gen/Amazonka/EC2/Types/SuccessfulInstanceCreditSpecificationItem.hs b/gen/Amazonka/EC2/Types/SuccessfulInstanceCreditSpecificationItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SuccessfulInstanceCreditSpecificationItem.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SuccessfulInstanceCreditSpecificationItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SuccessfulInstanceCreditSpecificationItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the burstable performance instance whose credit option for CPU
+-- usage was successfully modified.
+--
+-- /See:/ 'newSuccessfulInstanceCreditSpecificationItem' smart constructor.
+data SuccessfulInstanceCreditSpecificationItem = SuccessfulInstanceCreditSpecificationItem'
+  { -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuccessfulInstanceCreditSpecificationItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'successfulInstanceCreditSpecificationItem_instanceId' - The ID of the instance.
+newSuccessfulInstanceCreditSpecificationItem ::
+  SuccessfulInstanceCreditSpecificationItem
+newSuccessfulInstanceCreditSpecificationItem =
+  SuccessfulInstanceCreditSpecificationItem'
+    { instanceId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the instance.
+successfulInstanceCreditSpecificationItem_instanceId :: Lens.Lens' SuccessfulInstanceCreditSpecificationItem (Prelude.Maybe Prelude.Text)
+successfulInstanceCreditSpecificationItem_instanceId = Lens.lens (\SuccessfulInstanceCreditSpecificationItem' {instanceId} -> instanceId) (\s@SuccessfulInstanceCreditSpecificationItem' {} a -> s {instanceId = a} :: SuccessfulInstanceCreditSpecificationItem)
+
+instance
+  Data.FromXML
+    SuccessfulInstanceCreditSpecificationItem
+  where
+  parseXML x =
+    SuccessfulInstanceCreditSpecificationItem'
+      Prelude.<$> (x Data..@? "instanceId")
+
+instance
+  Prelude.Hashable
+    SuccessfulInstanceCreditSpecificationItem
+  where
+  hashWithSalt
+    _salt
+    SuccessfulInstanceCreditSpecificationItem' {..} =
+      _salt `Prelude.hashWithSalt` instanceId
+
+instance
+  Prelude.NFData
+    SuccessfulInstanceCreditSpecificationItem
+  where
+  rnf SuccessfulInstanceCreditSpecificationItem' {..} =
+    Prelude.rnf instanceId
diff --git a/gen/Amazonka/EC2/Types/SuccessfulQueuedPurchaseDeletion.hs b/gen/Amazonka/EC2/Types/SuccessfulQueuedPurchaseDeletion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SuccessfulQueuedPurchaseDeletion.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SuccessfulQueuedPurchaseDeletion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SuccessfulQueuedPurchaseDeletion where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Reserved Instance whose queued purchase was successfully
+-- deleted.
+--
+-- /See:/ 'newSuccessfulQueuedPurchaseDeletion' smart constructor.
+data SuccessfulQueuedPurchaseDeletion = SuccessfulQueuedPurchaseDeletion'
+  { -- | The ID of the Reserved Instance.
+    reservedInstancesId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SuccessfulQueuedPurchaseDeletion' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservedInstancesId', 'successfulQueuedPurchaseDeletion_reservedInstancesId' - The ID of the Reserved Instance.
+newSuccessfulQueuedPurchaseDeletion ::
+  SuccessfulQueuedPurchaseDeletion
+newSuccessfulQueuedPurchaseDeletion =
+  SuccessfulQueuedPurchaseDeletion'
+    { reservedInstancesId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the Reserved Instance.
+successfulQueuedPurchaseDeletion_reservedInstancesId :: Lens.Lens' SuccessfulQueuedPurchaseDeletion (Prelude.Maybe Prelude.Text)
+successfulQueuedPurchaseDeletion_reservedInstancesId = Lens.lens (\SuccessfulQueuedPurchaseDeletion' {reservedInstancesId} -> reservedInstancesId) (\s@SuccessfulQueuedPurchaseDeletion' {} a -> s {reservedInstancesId = a} :: SuccessfulQueuedPurchaseDeletion)
+
+instance
+  Data.FromXML
+    SuccessfulQueuedPurchaseDeletion
+  where
+  parseXML x =
+    SuccessfulQueuedPurchaseDeletion'
+      Prelude.<$> (x Data..@? "reservedInstancesId")
+
+instance
+  Prelude.Hashable
+    SuccessfulQueuedPurchaseDeletion
+  where
+  hashWithSalt
+    _salt
+    SuccessfulQueuedPurchaseDeletion' {..} =
+      _salt `Prelude.hashWithSalt` reservedInstancesId
+
+instance
+  Prelude.NFData
+    SuccessfulQueuedPurchaseDeletion
+  where
+  rnf SuccessfulQueuedPurchaseDeletion' {..} =
+    Prelude.rnf reservedInstancesId
diff --git a/gen/Amazonka/EC2/Types/SummaryStatus.hs b/gen/Amazonka/EC2/Types/SummaryStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/SummaryStatus.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.SummaryStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.SummaryStatus
+  ( SummaryStatus
+      ( ..,
+        SummaryStatus_Impaired,
+        SummaryStatus_Initializing,
+        SummaryStatus_Insufficient_data,
+        SummaryStatus_Not_applicable,
+        SummaryStatus_Ok
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype SummaryStatus = SummaryStatus'
+  { fromSummaryStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SummaryStatus_Impaired :: SummaryStatus
+pattern SummaryStatus_Impaired = SummaryStatus' "impaired"
+
+pattern SummaryStatus_Initializing :: SummaryStatus
+pattern SummaryStatus_Initializing = SummaryStatus' "initializing"
+
+pattern SummaryStatus_Insufficient_data :: SummaryStatus
+pattern SummaryStatus_Insufficient_data = SummaryStatus' "insufficient-data"
+
+pattern SummaryStatus_Not_applicable :: SummaryStatus
+pattern SummaryStatus_Not_applicable = SummaryStatus' "not-applicable"
+
+pattern SummaryStatus_Ok :: SummaryStatus
+pattern SummaryStatus_Ok = SummaryStatus' "ok"
+
+{-# COMPLETE
+  SummaryStatus_Impaired,
+  SummaryStatus_Initializing,
+  SummaryStatus_Insufficient_data,
+  SummaryStatus_Not_applicable,
+  SummaryStatus_Ok,
+  SummaryStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Tag.hs b/gen/Amazonka/EC2/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Tag.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a tag.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The key of the tag.
+    --
+    -- Constraints: Tag keys are case-sensitive and accept a maximum of 127
+    -- Unicode characters. May not begin with @aws:@.
+    key :: Prelude.Text,
+    -- | The value of the tag.
+    --
+    -- Constraints: Tag values are case-sensitive and accept a maximum of 256
+    -- Unicode characters.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The key of the tag.
+--
+-- Constraints: Tag keys are case-sensitive and accept a maximum of 127
+-- Unicode characters. May not begin with @aws:@.
+--
+-- 'value', 'tag_value' - The value of the tag.
+--
+-- Constraints: Tag values are case-sensitive and accept a maximum of 256
+-- Unicode characters.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag' {key = pKey_, value = pValue_}
+
+-- | The key of the tag.
+--
+-- Constraints: Tag keys are case-sensitive and accept a maximum of 127
+-- Unicode characters. May not begin with @aws:@.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The value of the tag.
+--
+-- Constraints: Tag values are case-sensitive and accept a maximum of 256
+-- Unicode characters.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromXML Tag where
+  parseXML x =
+    Tag'
+      Prelude.<$> (x Data..@ "key")
+      Prelude.<*> (x Data..@ "value")
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToQuery Tag where
+  toQuery Tag' {..} =
+    Prelude.mconcat
+      ["Key" Data.=: key, "Value" Data.=: value]
diff --git a/gen/Amazonka/EC2/Types/TagDescription.hs b/gen/Amazonka/EC2/Types/TagDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TagDescription.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TagDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TagDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a tag.
+--
+-- /See:/ 'newTagDescription' smart constructor.
+data TagDescription = TagDescription'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Text,
+    -- | The resource type.
+    resourceType :: ResourceType,
+    -- | The tag key.
+    key :: Prelude.Text,
+    -- | The tag value.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'tagDescription_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'tagDescription_resourceType' - The resource type.
+--
+-- 'key', 'tagDescription_key' - The tag key.
+--
+-- 'value', 'tagDescription_value' - The tag value.
+newTagDescription ::
+  -- | 'resourceId'
+  Prelude.Text ->
+  -- | 'resourceType'
+  ResourceType ->
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  TagDescription
+newTagDescription
+  pResourceId_
+  pResourceType_
+  pKey_
+  pValue_ =
+    TagDescription'
+      { resourceId = pResourceId_,
+        resourceType = pResourceType_,
+        key = pKey_,
+        value = pValue_
+      }
+
+-- | The ID of the resource.
+tagDescription_resourceId :: Lens.Lens' TagDescription Prelude.Text
+tagDescription_resourceId = Lens.lens (\TagDescription' {resourceId} -> resourceId) (\s@TagDescription' {} a -> s {resourceId = a} :: TagDescription)
+
+-- | The resource type.
+tagDescription_resourceType :: Lens.Lens' TagDescription ResourceType
+tagDescription_resourceType = Lens.lens (\TagDescription' {resourceType} -> resourceType) (\s@TagDescription' {} a -> s {resourceType = a} :: TagDescription)
+
+-- | The tag key.
+tagDescription_key :: Lens.Lens' TagDescription Prelude.Text
+tagDescription_key = Lens.lens (\TagDescription' {key} -> key) (\s@TagDescription' {} a -> s {key = a} :: TagDescription)
+
+-- | The tag value.
+tagDescription_value :: Lens.Lens' TagDescription Prelude.Text
+tagDescription_value = Lens.lens (\TagDescription' {value} -> value) (\s@TagDescription' {} a -> s {value = a} :: TagDescription)
+
+instance Data.FromXML TagDescription where
+  parseXML x =
+    TagDescription'
+      Prelude.<$> (x Data..@ "resourceId")
+      Prelude.<*> (x Data..@ "resourceType")
+      Prelude.<*> (x Data..@ "key")
+      Prelude.<*> (x Data..@ "value")
+
+instance Prelude.Hashable TagDescription where
+  hashWithSalt _salt TagDescription' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData TagDescription where
+  rnf TagDescription' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf value
diff --git a/gen/Amazonka/EC2/Types/TagSpecification.hs b/gen/Amazonka/EC2/Types/TagSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TagSpecification.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TagSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TagSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tags to apply to a resource when the resource is being created.
+--
+-- The @Valid Values@ lists all the resource types that can be tagged.
+-- However, the action you\'re using might not support tagging all of these
+-- resource types. If you try to tag a resource type that is unsupported
+-- for the action you\'re using, you\'ll get an error.
+--
+-- /See:/ 'newTagSpecification' smart constructor.
+data TagSpecification = TagSpecification'
+  { -- | The type of resource to tag on creation.
+    resourceType :: Prelude.Maybe ResourceType,
+    -- | The tags to apply to the resource.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceType', 'tagSpecification_resourceType' - The type of resource to tag on creation.
+--
+-- 'tags', 'tagSpecification_tags' - The tags to apply to the resource.
+newTagSpecification ::
+  TagSpecification
+newTagSpecification =
+  TagSpecification'
+    { resourceType = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The type of resource to tag on creation.
+tagSpecification_resourceType :: Lens.Lens' TagSpecification (Prelude.Maybe ResourceType)
+tagSpecification_resourceType = Lens.lens (\TagSpecification' {resourceType} -> resourceType) (\s@TagSpecification' {} a -> s {resourceType = a} :: TagSpecification)
+
+-- | The tags to apply to the resource.
+tagSpecification_tags :: Lens.Lens' TagSpecification (Prelude.Maybe [Tag])
+tagSpecification_tags = Lens.lens (\TagSpecification' {tags} -> tags) (\s@TagSpecification' {} a -> s {tags = a} :: TagSpecification) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML TagSpecification where
+  parseXML x =
+    TagSpecification'
+      Prelude.<$> (x Data..@? "resourceType")
+      Prelude.<*> ( x
+                      Data..@? "Tag"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable TagSpecification where
+  hashWithSalt _salt TagSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagSpecification where
+  rnf TagSpecification' {..} =
+    Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToQuery TagSpecification where
+  toQuery TagSpecification' {..} =
+    Prelude.mconcat
+      [ "ResourceType" Data.=: resourceType,
+        Data.toQuery
+          (Data.toQueryList "Tag" Prelude.<$> tags)
+      ]
diff --git a/gen/Amazonka/EC2/Types/TargetCapacitySpecification.hs b/gen/Amazonka/EC2/Types/TargetCapacitySpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetCapacitySpecification.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetCapacitySpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetCapacitySpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DefaultTargetCapacityType
+import Amazonka.EC2.Types.TargetCapacityUnitType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The number of units to request. You can choose to set the target
+-- capacity in terms of instances or a performance characteristic that is
+-- important to your application workload, such as vCPUs, memory, or I\/O.
+-- If the request type is @maintain@, you can specify a target capacity of
+-- 0 and add capacity later.
+--
+-- You can use the On-Demand Instance @MaxTotalPrice@ parameter, the Spot
+-- Instance @MaxTotalPrice@, or both to ensure that your fleet cost does
+-- not exceed your budget. If you set a maximum price per hour for the
+-- On-Demand Instances and Spot Instances in your request, EC2 Fleet will
+-- launch instances until it reaches the maximum amount that you\'re
+-- willing to pay. When the maximum amount you\'re willing to pay is
+-- reached, the fleet stops launching instances even if it hasn’t met the
+-- target capacity. The @MaxTotalPrice@ parameters are located in
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_OnDemandOptions.html OnDemandOptions>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotOptions SpotOptions>.
+--
+-- /See:/ 'newTargetCapacitySpecification' smart constructor.
+data TargetCapacitySpecification = TargetCapacitySpecification'
+  { -- | The default @TotalTargetCapacity@, which is either @Spot@ or
+    -- @On-Demand@.
+    defaultTargetCapacityType :: Prelude.Maybe DefaultTargetCapacityType,
+    -- | The number of On-Demand units to request. If you specify a target
+    -- capacity for Spot units, you cannot specify a target capacity for
+    -- On-Demand units.
+    onDemandTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The maximum number of Spot units to launch. If you specify a target
+    -- capacity for On-Demand units, you cannot specify a target capacity for
+    -- Spot units.
+    spotTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The unit for the target capacity.
+    --
+    -- Default: @units@ (translates to number of instances)
+    targetCapacityUnitType :: Prelude.Maybe TargetCapacityUnitType,
+    -- | The number of units to request, filled using
+    -- @DefaultTargetCapacityType@.
+    totalTargetCapacity :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetCapacitySpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultTargetCapacityType', 'targetCapacitySpecification_defaultTargetCapacityType' - The default @TotalTargetCapacity@, which is either @Spot@ or
+-- @On-Demand@.
+--
+-- 'onDemandTargetCapacity', 'targetCapacitySpecification_onDemandTargetCapacity' - The number of On-Demand units to request. If you specify a target
+-- capacity for Spot units, you cannot specify a target capacity for
+-- On-Demand units.
+--
+-- 'spotTargetCapacity', 'targetCapacitySpecification_spotTargetCapacity' - The maximum number of Spot units to launch. If you specify a target
+-- capacity for On-Demand units, you cannot specify a target capacity for
+-- Spot units.
+--
+-- 'targetCapacityUnitType', 'targetCapacitySpecification_targetCapacityUnitType' - The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+--
+-- 'totalTargetCapacity', 'targetCapacitySpecification_totalTargetCapacity' - The number of units to request, filled using
+-- @DefaultTargetCapacityType@.
+newTargetCapacitySpecification ::
+  TargetCapacitySpecification
+newTargetCapacitySpecification =
+  TargetCapacitySpecification'
+    { defaultTargetCapacityType =
+        Prelude.Nothing,
+      onDemandTargetCapacity = Prelude.Nothing,
+      spotTargetCapacity = Prelude.Nothing,
+      targetCapacityUnitType = Prelude.Nothing,
+      totalTargetCapacity = Prelude.Nothing
+    }
+
+-- | The default @TotalTargetCapacity@, which is either @Spot@ or
+-- @On-Demand@.
+targetCapacitySpecification_defaultTargetCapacityType :: Lens.Lens' TargetCapacitySpecification (Prelude.Maybe DefaultTargetCapacityType)
+targetCapacitySpecification_defaultTargetCapacityType = Lens.lens (\TargetCapacitySpecification' {defaultTargetCapacityType} -> defaultTargetCapacityType) (\s@TargetCapacitySpecification' {} a -> s {defaultTargetCapacityType = a} :: TargetCapacitySpecification)
+
+-- | The number of On-Demand units to request. If you specify a target
+-- capacity for Spot units, you cannot specify a target capacity for
+-- On-Demand units.
+targetCapacitySpecification_onDemandTargetCapacity :: Lens.Lens' TargetCapacitySpecification (Prelude.Maybe Prelude.Int)
+targetCapacitySpecification_onDemandTargetCapacity = Lens.lens (\TargetCapacitySpecification' {onDemandTargetCapacity} -> onDemandTargetCapacity) (\s@TargetCapacitySpecification' {} a -> s {onDemandTargetCapacity = a} :: TargetCapacitySpecification)
+
+-- | The maximum number of Spot units to launch. If you specify a target
+-- capacity for On-Demand units, you cannot specify a target capacity for
+-- Spot units.
+targetCapacitySpecification_spotTargetCapacity :: Lens.Lens' TargetCapacitySpecification (Prelude.Maybe Prelude.Int)
+targetCapacitySpecification_spotTargetCapacity = Lens.lens (\TargetCapacitySpecification' {spotTargetCapacity} -> spotTargetCapacity) (\s@TargetCapacitySpecification' {} a -> s {spotTargetCapacity = a} :: TargetCapacitySpecification)
+
+-- | The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+targetCapacitySpecification_targetCapacityUnitType :: Lens.Lens' TargetCapacitySpecification (Prelude.Maybe TargetCapacityUnitType)
+targetCapacitySpecification_targetCapacityUnitType = Lens.lens (\TargetCapacitySpecification' {targetCapacityUnitType} -> targetCapacityUnitType) (\s@TargetCapacitySpecification' {} a -> s {targetCapacityUnitType = a} :: TargetCapacitySpecification)
+
+-- | The number of units to request, filled using
+-- @DefaultTargetCapacityType@.
+targetCapacitySpecification_totalTargetCapacity :: Lens.Lens' TargetCapacitySpecification (Prelude.Maybe Prelude.Int)
+targetCapacitySpecification_totalTargetCapacity = Lens.lens (\TargetCapacitySpecification' {totalTargetCapacity} -> totalTargetCapacity) (\s@TargetCapacitySpecification' {} a -> s {totalTargetCapacity = a} :: TargetCapacitySpecification)
+
+instance Data.FromXML TargetCapacitySpecification where
+  parseXML x =
+    TargetCapacitySpecification'
+      Prelude.<$> (x Data..@? "defaultTargetCapacityType")
+      Prelude.<*> (x Data..@? "onDemandTargetCapacity")
+      Prelude.<*> (x Data..@? "spotTargetCapacity")
+      Prelude.<*> (x Data..@? "targetCapacityUnitType")
+      Prelude.<*> (x Data..@? "totalTargetCapacity")
+
+instance Prelude.Hashable TargetCapacitySpecification where
+  hashWithSalt _salt TargetCapacitySpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultTargetCapacityType
+      `Prelude.hashWithSalt` onDemandTargetCapacity
+      `Prelude.hashWithSalt` spotTargetCapacity
+      `Prelude.hashWithSalt` targetCapacityUnitType
+      `Prelude.hashWithSalt` totalTargetCapacity
+
+instance Prelude.NFData TargetCapacitySpecification where
+  rnf TargetCapacitySpecification' {..} =
+    Prelude.rnf defaultTargetCapacityType
+      `Prelude.seq` Prelude.rnf onDemandTargetCapacity
+      `Prelude.seq` Prelude.rnf spotTargetCapacity
+      `Prelude.seq` Prelude.rnf targetCapacityUnitType
+      `Prelude.seq` Prelude.rnf totalTargetCapacity
diff --git a/gen/Amazonka/EC2/Types/TargetCapacitySpecificationRequest.hs b/gen/Amazonka/EC2/Types/TargetCapacitySpecificationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetCapacitySpecificationRequest.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetCapacitySpecificationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetCapacitySpecificationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DefaultTargetCapacityType
+import Amazonka.EC2.Types.TargetCapacityUnitType
+import qualified Amazonka.Prelude as Prelude
+
+-- | The number of units to request. You can choose to set the target
+-- capacity as the number of instances. Or you can set the target capacity
+-- to a performance characteristic that is important to your application
+-- workload, such as vCPUs, memory, or I\/O. If the request type is
+-- @maintain@, you can specify a target capacity of 0 and add capacity
+-- later.
+--
+-- You can use the On-Demand Instance @MaxTotalPrice@ parameter, the Spot
+-- Instance @MaxTotalPrice@ parameter, or both parameters to ensure that
+-- your fleet cost does not exceed your budget. If you set a maximum price
+-- per hour for the On-Demand Instances and Spot Instances in your request,
+-- EC2 Fleet will launch instances until it reaches the maximum amount that
+-- you\'re willing to pay. When the maximum amount you\'re willing to pay
+-- is reached, the fleet stops launching instances even if it hasn’t met
+-- the target capacity. The @MaxTotalPrice@ parameters are located in
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_OnDemandOptionsRequest OnDemandOptionsRequest>
+-- and
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotOptionsRequest SpotOptionsRequest>.
+--
+-- /See:/ 'newTargetCapacitySpecificationRequest' smart constructor.
+data TargetCapacitySpecificationRequest = TargetCapacitySpecificationRequest'
+  { -- | The default @TotalTargetCapacity@, which is either @Spot@ or
+    -- @On-Demand@.
+    defaultTargetCapacityType :: Prelude.Maybe DefaultTargetCapacityType,
+    -- | The number of On-Demand units to request.
+    onDemandTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The number of Spot units to request.
+    spotTargetCapacity :: Prelude.Maybe Prelude.Int,
+    -- | The unit for the target capacity.
+    --
+    -- Default: @units@ (translates to number of instances)
+    targetCapacityUnitType :: Prelude.Maybe TargetCapacityUnitType,
+    -- | The number of units to request, filled using
+    -- @DefaultTargetCapacityType@.
+    totalTargetCapacity :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetCapacitySpecificationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultTargetCapacityType', 'targetCapacitySpecificationRequest_defaultTargetCapacityType' - The default @TotalTargetCapacity@, which is either @Spot@ or
+-- @On-Demand@.
+--
+-- 'onDemandTargetCapacity', 'targetCapacitySpecificationRequest_onDemandTargetCapacity' - The number of On-Demand units to request.
+--
+-- 'spotTargetCapacity', 'targetCapacitySpecificationRequest_spotTargetCapacity' - The number of Spot units to request.
+--
+-- 'targetCapacityUnitType', 'targetCapacitySpecificationRequest_targetCapacityUnitType' - The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+--
+-- 'totalTargetCapacity', 'targetCapacitySpecificationRequest_totalTargetCapacity' - The number of units to request, filled using
+-- @DefaultTargetCapacityType@.
+newTargetCapacitySpecificationRequest ::
+  -- | 'totalTargetCapacity'
+  Prelude.Int ->
+  TargetCapacitySpecificationRequest
+newTargetCapacitySpecificationRequest
+  pTotalTargetCapacity_ =
+    TargetCapacitySpecificationRequest'
+      { defaultTargetCapacityType =
+          Prelude.Nothing,
+        onDemandTargetCapacity =
+          Prelude.Nothing,
+        spotTargetCapacity = Prelude.Nothing,
+        targetCapacityUnitType =
+          Prelude.Nothing,
+        totalTargetCapacity =
+          pTotalTargetCapacity_
+      }
+
+-- | The default @TotalTargetCapacity@, which is either @Spot@ or
+-- @On-Demand@.
+targetCapacitySpecificationRequest_defaultTargetCapacityType :: Lens.Lens' TargetCapacitySpecificationRequest (Prelude.Maybe DefaultTargetCapacityType)
+targetCapacitySpecificationRequest_defaultTargetCapacityType = Lens.lens (\TargetCapacitySpecificationRequest' {defaultTargetCapacityType} -> defaultTargetCapacityType) (\s@TargetCapacitySpecificationRequest' {} a -> s {defaultTargetCapacityType = a} :: TargetCapacitySpecificationRequest)
+
+-- | The number of On-Demand units to request.
+targetCapacitySpecificationRequest_onDemandTargetCapacity :: Lens.Lens' TargetCapacitySpecificationRequest (Prelude.Maybe Prelude.Int)
+targetCapacitySpecificationRequest_onDemandTargetCapacity = Lens.lens (\TargetCapacitySpecificationRequest' {onDemandTargetCapacity} -> onDemandTargetCapacity) (\s@TargetCapacitySpecificationRequest' {} a -> s {onDemandTargetCapacity = a} :: TargetCapacitySpecificationRequest)
+
+-- | The number of Spot units to request.
+targetCapacitySpecificationRequest_spotTargetCapacity :: Lens.Lens' TargetCapacitySpecificationRequest (Prelude.Maybe Prelude.Int)
+targetCapacitySpecificationRequest_spotTargetCapacity = Lens.lens (\TargetCapacitySpecificationRequest' {spotTargetCapacity} -> spotTargetCapacity) (\s@TargetCapacitySpecificationRequest' {} a -> s {spotTargetCapacity = a} :: TargetCapacitySpecificationRequest)
+
+-- | The unit for the target capacity.
+--
+-- Default: @units@ (translates to number of instances)
+targetCapacitySpecificationRequest_targetCapacityUnitType :: Lens.Lens' TargetCapacitySpecificationRequest (Prelude.Maybe TargetCapacityUnitType)
+targetCapacitySpecificationRequest_targetCapacityUnitType = Lens.lens (\TargetCapacitySpecificationRequest' {targetCapacityUnitType} -> targetCapacityUnitType) (\s@TargetCapacitySpecificationRequest' {} a -> s {targetCapacityUnitType = a} :: TargetCapacitySpecificationRequest)
+
+-- | The number of units to request, filled using
+-- @DefaultTargetCapacityType@.
+targetCapacitySpecificationRequest_totalTargetCapacity :: Lens.Lens' TargetCapacitySpecificationRequest Prelude.Int
+targetCapacitySpecificationRequest_totalTargetCapacity = Lens.lens (\TargetCapacitySpecificationRequest' {totalTargetCapacity} -> totalTargetCapacity) (\s@TargetCapacitySpecificationRequest' {} a -> s {totalTargetCapacity = a} :: TargetCapacitySpecificationRequest)
+
+instance
+  Prelude.Hashable
+    TargetCapacitySpecificationRequest
+  where
+  hashWithSalt
+    _salt
+    TargetCapacitySpecificationRequest' {..} =
+      _salt
+        `Prelude.hashWithSalt` defaultTargetCapacityType
+        `Prelude.hashWithSalt` onDemandTargetCapacity
+        `Prelude.hashWithSalt` spotTargetCapacity
+        `Prelude.hashWithSalt` targetCapacityUnitType
+        `Prelude.hashWithSalt` totalTargetCapacity
+
+instance
+  Prelude.NFData
+    TargetCapacitySpecificationRequest
+  where
+  rnf TargetCapacitySpecificationRequest' {..} =
+    Prelude.rnf defaultTargetCapacityType
+      `Prelude.seq` Prelude.rnf onDemandTargetCapacity
+      `Prelude.seq` Prelude.rnf spotTargetCapacity
+      `Prelude.seq` Prelude.rnf targetCapacityUnitType
+      `Prelude.seq` Prelude.rnf totalTargetCapacity
+
+instance
+  Data.ToQuery
+    TargetCapacitySpecificationRequest
+  where
+  toQuery TargetCapacitySpecificationRequest' {..} =
+    Prelude.mconcat
+      [ "DefaultTargetCapacityType"
+          Data.=: defaultTargetCapacityType,
+        "OnDemandTargetCapacity"
+          Data.=: onDemandTargetCapacity,
+        "SpotTargetCapacity" Data.=: spotTargetCapacity,
+        "TargetCapacityUnitType"
+          Data.=: targetCapacityUnitType,
+        "TotalTargetCapacity" Data.=: totalTargetCapacity
+      ]
diff --git a/gen/Amazonka/EC2/Types/TargetCapacityUnitType.hs b/gen/Amazonka/EC2/Types/TargetCapacityUnitType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetCapacityUnitType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetCapacityUnitType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetCapacityUnitType
+  ( TargetCapacityUnitType
+      ( ..,
+        TargetCapacityUnitType_Memory_mib,
+        TargetCapacityUnitType_Units,
+        TargetCapacityUnitType_Vcpu
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TargetCapacityUnitType = TargetCapacityUnitType'
+  { fromTargetCapacityUnitType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TargetCapacityUnitType_Memory_mib :: TargetCapacityUnitType
+pattern TargetCapacityUnitType_Memory_mib = TargetCapacityUnitType' "memory-mib"
+
+pattern TargetCapacityUnitType_Units :: TargetCapacityUnitType
+pattern TargetCapacityUnitType_Units = TargetCapacityUnitType' "units"
+
+pattern TargetCapacityUnitType_Vcpu :: TargetCapacityUnitType
+pattern TargetCapacityUnitType_Vcpu = TargetCapacityUnitType' "vcpu"
+
+{-# COMPLETE
+  TargetCapacityUnitType_Memory_mib,
+  TargetCapacityUnitType_Units,
+  TargetCapacityUnitType_Vcpu,
+  TargetCapacityUnitType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TargetConfiguration.hs b/gen/Amazonka/EC2/Types/TargetConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetConfiguration.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the Convertible Reserved Instance offering.
+--
+-- /See:/ 'newTargetConfiguration' smart constructor.
+data TargetConfiguration = TargetConfiguration'
+  { -- | The number of instances the Convertible Reserved Instance offering can
+    -- be applied to. This parameter is reserved and cannot be specified in a
+    -- request
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the Convertible Reserved Instance offering.
+    offeringId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceCount', 'targetConfiguration_instanceCount' - The number of instances the Convertible Reserved Instance offering can
+-- be applied to. This parameter is reserved and cannot be specified in a
+-- request
+--
+-- 'offeringId', 'targetConfiguration_offeringId' - The ID of the Convertible Reserved Instance offering.
+newTargetConfiguration ::
+  TargetConfiguration
+newTargetConfiguration =
+  TargetConfiguration'
+    { instanceCount =
+        Prelude.Nothing,
+      offeringId = Prelude.Nothing
+    }
+
+-- | The number of instances the Convertible Reserved Instance offering can
+-- be applied to. This parameter is reserved and cannot be specified in a
+-- request
+targetConfiguration_instanceCount :: Lens.Lens' TargetConfiguration (Prelude.Maybe Prelude.Int)
+targetConfiguration_instanceCount = Lens.lens (\TargetConfiguration' {instanceCount} -> instanceCount) (\s@TargetConfiguration' {} a -> s {instanceCount = a} :: TargetConfiguration)
+
+-- | The ID of the Convertible Reserved Instance offering.
+targetConfiguration_offeringId :: Lens.Lens' TargetConfiguration (Prelude.Maybe Prelude.Text)
+targetConfiguration_offeringId = Lens.lens (\TargetConfiguration' {offeringId} -> offeringId) (\s@TargetConfiguration' {} a -> s {offeringId = a} :: TargetConfiguration)
+
+instance Data.FromXML TargetConfiguration where
+  parseXML x =
+    TargetConfiguration'
+      Prelude.<$> (x Data..@? "instanceCount")
+      Prelude.<*> (x Data..@? "offeringId")
+
+instance Prelude.Hashable TargetConfiguration where
+  hashWithSalt _salt TargetConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` offeringId
+
+instance Prelude.NFData TargetConfiguration where
+  rnf TargetConfiguration' {..} =
+    Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf offeringId
diff --git a/gen/Amazonka/EC2/Types/TargetConfigurationRequest.hs b/gen/Amazonka/EC2/Types/TargetConfigurationRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetConfigurationRequest.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetConfigurationRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetConfigurationRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Details about the target configuration.
+--
+-- /See:/ 'newTargetConfigurationRequest' smart constructor.
+data TargetConfigurationRequest = TargetConfigurationRequest'
+  { -- | The number of instances the Convertible Reserved Instance offering can
+    -- be applied to. This parameter is reserved and cannot be specified in a
+    -- request
+    instanceCount :: Prelude.Maybe Prelude.Int,
+    -- | The Convertible Reserved Instance offering ID.
+    offeringId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetConfigurationRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceCount', 'targetConfigurationRequest_instanceCount' - The number of instances the Convertible Reserved Instance offering can
+-- be applied to. This parameter is reserved and cannot be specified in a
+-- request
+--
+-- 'offeringId', 'targetConfigurationRequest_offeringId' - The Convertible Reserved Instance offering ID.
+newTargetConfigurationRequest ::
+  -- | 'offeringId'
+  Prelude.Text ->
+  TargetConfigurationRequest
+newTargetConfigurationRequest pOfferingId_ =
+  TargetConfigurationRequest'
+    { instanceCount =
+        Prelude.Nothing,
+      offeringId = pOfferingId_
+    }
+
+-- | The number of instances the Convertible Reserved Instance offering can
+-- be applied to. This parameter is reserved and cannot be specified in a
+-- request
+targetConfigurationRequest_instanceCount :: Lens.Lens' TargetConfigurationRequest (Prelude.Maybe Prelude.Int)
+targetConfigurationRequest_instanceCount = Lens.lens (\TargetConfigurationRequest' {instanceCount} -> instanceCount) (\s@TargetConfigurationRequest' {} a -> s {instanceCount = a} :: TargetConfigurationRequest)
+
+-- | The Convertible Reserved Instance offering ID.
+targetConfigurationRequest_offeringId :: Lens.Lens' TargetConfigurationRequest Prelude.Text
+targetConfigurationRequest_offeringId = Lens.lens (\TargetConfigurationRequest' {offeringId} -> offeringId) (\s@TargetConfigurationRequest' {} a -> s {offeringId = a} :: TargetConfigurationRequest)
+
+instance Prelude.Hashable TargetConfigurationRequest where
+  hashWithSalt _salt TargetConfigurationRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceCount
+      `Prelude.hashWithSalt` offeringId
+
+instance Prelude.NFData TargetConfigurationRequest where
+  rnf TargetConfigurationRequest' {..} =
+    Prelude.rnf instanceCount
+      `Prelude.seq` Prelude.rnf offeringId
+
+instance Data.ToQuery TargetConfigurationRequest where
+  toQuery TargetConfigurationRequest' {..} =
+    Prelude.mconcat
+      [ "InstanceCount" Data.=: instanceCount,
+        "OfferingId" Data.=: offeringId
+      ]
diff --git a/gen/Amazonka/EC2/Types/TargetGroup.hs b/gen/Amazonka/EC2/Types/TargetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetGroup.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load balancer target group.
+--
+-- /See:/ 'newTargetGroup' smart constructor.
+data TargetGroup = TargetGroup'
+  { -- | The Amazon Resource Name (ARN) of the target group.
+    arn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arn', 'targetGroup_arn' - The Amazon Resource Name (ARN) of the target group.
+newTargetGroup ::
+  TargetGroup
+newTargetGroup = TargetGroup' {arn = Prelude.Nothing}
+
+-- | The Amazon Resource Name (ARN) of the target group.
+targetGroup_arn :: Lens.Lens' TargetGroup (Prelude.Maybe Prelude.Text)
+targetGroup_arn = Lens.lens (\TargetGroup' {arn} -> arn) (\s@TargetGroup' {} a -> s {arn = a} :: TargetGroup)
+
+instance Data.FromXML TargetGroup where
+  parseXML x =
+    TargetGroup' Prelude.<$> (x Data..@? "arn")
+
+instance Prelude.Hashable TargetGroup where
+  hashWithSalt _salt TargetGroup' {..} =
+    _salt `Prelude.hashWithSalt` arn
+
+instance Prelude.NFData TargetGroup where
+  rnf TargetGroup' {..} = Prelude.rnf arn
+
+instance Data.ToQuery TargetGroup where
+  toQuery TargetGroup' {..} =
+    Prelude.mconcat ["Arn" Data.=: arn]
diff --git a/gen/Amazonka/EC2/Types/TargetGroupsConfig.hs b/gen/Amazonka/EC2/Types/TargetGroupsConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetGroupsConfig.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetGroupsConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetGroupsConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TargetGroup
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the target groups to attach to a Spot Fleet. Spot Fleet
+-- registers the running Spot Instances with these target groups.
+--
+-- /See:/ 'newTargetGroupsConfig' smart constructor.
+data TargetGroupsConfig = TargetGroupsConfig'
+  { -- | One or more target groups.
+    targetGroups :: Prelude.Maybe (Prelude.NonEmpty TargetGroup)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetGroupsConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'targetGroups', 'targetGroupsConfig_targetGroups' - One or more target groups.
+newTargetGroupsConfig ::
+  TargetGroupsConfig
+newTargetGroupsConfig =
+  TargetGroupsConfig' {targetGroups = Prelude.Nothing}
+
+-- | One or more target groups.
+targetGroupsConfig_targetGroups :: Lens.Lens' TargetGroupsConfig (Prelude.Maybe (Prelude.NonEmpty TargetGroup))
+targetGroupsConfig_targetGroups = Lens.lens (\TargetGroupsConfig' {targetGroups} -> targetGroups) (\s@TargetGroupsConfig' {} a -> s {targetGroups = a} :: TargetGroupsConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML TargetGroupsConfig where
+  parseXML x =
+    TargetGroupsConfig'
+      Prelude.<$> ( x
+                      Data..@? "targetGroups"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList1 "item")
+                  )
+
+instance Prelude.Hashable TargetGroupsConfig where
+  hashWithSalt _salt TargetGroupsConfig' {..} =
+    _salt `Prelude.hashWithSalt` targetGroups
+
+instance Prelude.NFData TargetGroupsConfig where
+  rnf TargetGroupsConfig' {..} =
+    Prelude.rnf targetGroups
+
+instance Data.ToQuery TargetGroupsConfig where
+  toQuery TargetGroupsConfig' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "TargetGroups"
+              Prelude.<$> targetGroups
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/TargetNetwork.hs b/gen/Amazonka/EC2/Types/TargetNetwork.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetNetwork.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetNetwork
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetNetwork where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AssociationStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a target network associated with a Client VPN endpoint.
+--
+-- /See:/ 'newTargetNetwork' smart constructor.
+data TargetNetwork = TargetNetwork'
+  { -- | The ID of the association.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Client VPN endpoint with which the target network is
+    -- associated.
+    clientVpnEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the security groups applied to the target network
+    -- association.
+    securityGroups :: Prelude.Maybe [Prelude.Text],
+    -- | The current state of the target network association.
+    status :: Prelude.Maybe AssociationStatus,
+    -- | The ID of the subnet specified as the target network.
+    targetNetworkId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC in which the target network (subnet) is located.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetNetwork' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'targetNetwork_associationId' - The ID of the association.
+--
+-- 'clientVpnEndpointId', 'targetNetwork_clientVpnEndpointId' - The ID of the Client VPN endpoint with which the target network is
+-- associated.
+--
+-- 'securityGroups', 'targetNetwork_securityGroups' - The IDs of the security groups applied to the target network
+-- association.
+--
+-- 'status', 'targetNetwork_status' - The current state of the target network association.
+--
+-- 'targetNetworkId', 'targetNetwork_targetNetworkId' - The ID of the subnet specified as the target network.
+--
+-- 'vpcId', 'targetNetwork_vpcId' - The ID of the VPC in which the target network (subnet) is located.
+newTargetNetwork ::
+  TargetNetwork
+newTargetNetwork =
+  TargetNetwork'
+    { associationId = Prelude.Nothing,
+      clientVpnEndpointId = Prelude.Nothing,
+      securityGroups = Prelude.Nothing,
+      status = Prelude.Nothing,
+      targetNetworkId = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The ID of the association.
+targetNetwork_associationId :: Lens.Lens' TargetNetwork (Prelude.Maybe Prelude.Text)
+targetNetwork_associationId = Lens.lens (\TargetNetwork' {associationId} -> associationId) (\s@TargetNetwork' {} a -> s {associationId = a} :: TargetNetwork)
+
+-- | The ID of the Client VPN endpoint with which the target network is
+-- associated.
+targetNetwork_clientVpnEndpointId :: Lens.Lens' TargetNetwork (Prelude.Maybe Prelude.Text)
+targetNetwork_clientVpnEndpointId = Lens.lens (\TargetNetwork' {clientVpnEndpointId} -> clientVpnEndpointId) (\s@TargetNetwork' {} a -> s {clientVpnEndpointId = a} :: TargetNetwork)
+
+-- | The IDs of the security groups applied to the target network
+-- association.
+targetNetwork_securityGroups :: Lens.Lens' TargetNetwork (Prelude.Maybe [Prelude.Text])
+targetNetwork_securityGroups = Lens.lens (\TargetNetwork' {securityGroups} -> securityGroups) (\s@TargetNetwork' {} a -> s {securityGroups = a} :: TargetNetwork) Prelude.. Lens.mapping Lens.coerced
+
+-- | The current state of the target network association.
+targetNetwork_status :: Lens.Lens' TargetNetwork (Prelude.Maybe AssociationStatus)
+targetNetwork_status = Lens.lens (\TargetNetwork' {status} -> status) (\s@TargetNetwork' {} a -> s {status = a} :: TargetNetwork)
+
+-- | The ID of the subnet specified as the target network.
+targetNetwork_targetNetworkId :: Lens.Lens' TargetNetwork (Prelude.Maybe Prelude.Text)
+targetNetwork_targetNetworkId = Lens.lens (\TargetNetwork' {targetNetworkId} -> targetNetworkId) (\s@TargetNetwork' {} a -> s {targetNetworkId = a} :: TargetNetwork)
+
+-- | The ID of the VPC in which the target network (subnet) is located.
+targetNetwork_vpcId :: Lens.Lens' TargetNetwork (Prelude.Maybe Prelude.Text)
+targetNetwork_vpcId = Lens.lens (\TargetNetwork' {vpcId} -> vpcId) (\s@TargetNetwork' {} a -> s {vpcId = a} :: TargetNetwork)
+
+instance Data.FromXML TargetNetwork where
+  parseXML x =
+    TargetNetwork'
+      Prelude.<$> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "clientVpnEndpointId")
+      Prelude.<*> ( x
+                      Data..@? "securityGroups"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "targetNetworkId")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable TargetNetwork where
+  hashWithSalt _salt TargetNetwork' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` clientVpnEndpointId
+      `Prelude.hashWithSalt` securityGroups
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` targetNetworkId
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData TargetNetwork where
+  rnf TargetNetwork' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf clientVpnEndpointId
+      `Prelude.seq` Prelude.rnf securityGroups
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf targetNetworkId
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/TargetReservationValue.hs b/gen/Amazonka/EC2/Types/TargetReservationValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetReservationValue.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetReservationValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetReservationValue where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ReservationValue
+import Amazonka.EC2.Types.TargetConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | The total value of the new Convertible Reserved Instances.
+--
+-- /See:/ 'newTargetReservationValue' smart constructor.
+data TargetReservationValue = TargetReservationValue'
+  { -- | The total value of the Convertible Reserved Instances that make up the
+    -- exchange. This is the sum of the list value, remaining upfront price,
+    -- and additional upfront cost of the exchange.
+    reservationValue :: Prelude.Maybe ReservationValue,
+    -- | The configuration of the Convertible Reserved Instances that make up the
+    -- exchange.
+    targetConfiguration :: Prelude.Maybe TargetConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetReservationValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'reservationValue', 'targetReservationValue_reservationValue' - The total value of the Convertible Reserved Instances that make up the
+-- exchange. This is the sum of the list value, remaining upfront price,
+-- and additional upfront cost of the exchange.
+--
+-- 'targetConfiguration', 'targetReservationValue_targetConfiguration' - The configuration of the Convertible Reserved Instances that make up the
+-- exchange.
+newTargetReservationValue ::
+  TargetReservationValue
+newTargetReservationValue =
+  TargetReservationValue'
+    { reservationValue =
+        Prelude.Nothing,
+      targetConfiguration = Prelude.Nothing
+    }
+
+-- | The total value of the Convertible Reserved Instances that make up the
+-- exchange. This is the sum of the list value, remaining upfront price,
+-- and additional upfront cost of the exchange.
+targetReservationValue_reservationValue :: Lens.Lens' TargetReservationValue (Prelude.Maybe ReservationValue)
+targetReservationValue_reservationValue = Lens.lens (\TargetReservationValue' {reservationValue} -> reservationValue) (\s@TargetReservationValue' {} a -> s {reservationValue = a} :: TargetReservationValue)
+
+-- | The configuration of the Convertible Reserved Instances that make up the
+-- exchange.
+targetReservationValue_targetConfiguration :: Lens.Lens' TargetReservationValue (Prelude.Maybe TargetConfiguration)
+targetReservationValue_targetConfiguration = Lens.lens (\TargetReservationValue' {targetConfiguration} -> targetConfiguration) (\s@TargetReservationValue' {} a -> s {targetConfiguration = a} :: TargetReservationValue)
+
+instance Data.FromXML TargetReservationValue where
+  parseXML x =
+    TargetReservationValue'
+      Prelude.<$> (x Data..@? "reservationValue")
+      Prelude.<*> (x Data..@? "targetConfiguration")
+
+instance Prelude.Hashable TargetReservationValue where
+  hashWithSalt _salt TargetReservationValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` reservationValue
+      `Prelude.hashWithSalt` targetConfiguration
+
+instance Prelude.NFData TargetReservationValue where
+  rnf TargetReservationValue' {..} =
+    Prelude.rnf reservationValue
+      `Prelude.seq` Prelude.rnf targetConfiguration
diff --git a/gen/Amazonka/EC2/Types/TargetStorageTier.hs b/gen/Amazonka/EC2/Types/TargetStorageTier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TargetStorageTier.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TargetStorageTier
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TargetStorageTier
+  ( TargetStorageTier
+      ( ..,
+        TargetStorageTier_Archive
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TargetStorageTier = TargetStorageTier'
+  { fromTargetStorageTier ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TargetStorageTier_Archive :: TargetStorageTier
+pattern TargetStorageTier_Archive = TargetStorageTier' "archive"
+
+{-# COMPLETE
+  TargetStorageTier_Archive,
+  TargetStorageTier'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TelemetryStatus.hs b/gen/Amazonka/EC2/Types/TelemetryStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TelemetryStatus.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TelemetryStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TelemetryStatus
+  ( TelemetryStatus
+      ( ..,
+        TelemetryStatus_DOWN,
+        TelemetryStatus_UP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TelemetryStatus = TelemetryStatus'
+  { fromTelemetryStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TelemetryStatus_DOWN :: TelemetryStatus
+pattern TelemetryStatus_DOWN = TelemetryStatus' "DOWN"
+
+pattern TelemetryStatus_UP :: TelemetryStatus
+pattern TelemetryStatus_UP = TelemetryStatus' "UP"
+
+{-# COMPLETE
+  TelemetryStatus_DOWN,
+  TelemetryStatus_UP,
+  TelemetryStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Tenancy.hs b/gen/Amazonka/EC2/Types/Tenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Tenancy.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Tenancy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Tenancy
+  ( Tenancy
+      ( ..,
+        Tenancy_Dedicated,
+        Tenancy_Default,
+        Tenancy_Host
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype Tenancy = Tenancy' {fromTenancy :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern Tenancy_Dedicated :: Tenancy
+pattern Tenancy_Dedicated = Tenancy' "dedicated"
+
+pattern Tenancy_Default :: Tenancy
+pattern Tenancy_Default = Tenancy' "default"
+
+pattern Tenancy_Host :: Tenancy
+pattern Tenancy_Host = Tenancy' "host"
+
+{-# COMPLETE
+  Tenancy_Dedicated,
+  Tenancy_Default,
+  Tenancy_Host,
+  Tenancy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TerminateConnectionStatus.hs b/gen/Amazonka/EC2/Types/TerminateConnectionStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TerminateConnectionStatus.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TerminateConnectionStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TerminateConnectionStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ClientVpnConnectionStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about a terminated Client VPN endpoint client connection.
+--
+-- /See:/ 'newTerminateConnectionStatus' smart constructor.
+data TerminateConnectionStatus = TerminateConnectionStatus'
+  { -- | The ID of the client connection.
+    connectionId :: Prelude.Maybe Prelude.Text,
+    -- | A message about the status of the client connection, if applicable.
+    currentStatus :: Prelude.Maybe ClientVpnConnectionStatus,
+    -- | The state of the client connection.
+    previousStatus :: Prelude.Maybe ClientVpnConnectionStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateConnectionStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionId', 'terminateConnectionStatus_connectionId' - The ID of the client connection.
+--
+-- 'currentStatus', 'terminateConnectionStatus_currentStatus' - A message about the status of the client connection, if applicable.
+--
+-- 'previousStatus', 'terminateConnectionStatus_previousStatus' - The state of the client connection.
+newTerminateConnectionStatus ::
+  TerminateConnectionStatus
+newTerminateConnectionStatus =
+  TerminateConnectionStatus'
+    { connectionId =
+        Prelude.Nothing,
+      currentStatus = Prelude.Nothing,
+      previousStatus = Prelude.Nothing
+    }
+
+-- | The ID of the client connection.
+terminateConnectionStatus_connectionId :: Lens.Lens' TerminateConnectionStatus (Prelude.Maybe Prelude.Text)
+terminateConnectionStatus_connectionId = Lens.lens (\TerminateConnectionStatus' {connectionId} -> connectionId) (\s@TerminateConnectionStatus' {} a -> s {connectionId = a} :: TerminateConnectionStatus)
+
+-- | A message about the status of the client connection, if applicable.
+terminateConnectionStatus_currentStatus :: Lens.Lens' TerminateConnectionStatus (Prelude.Maybe ClientVpnConnectionStatus)
+terminateConnectionStatus_currentStatus = Lens.lens (\TerminateConnectionStatus' {currentStatus} -> currentStatus) (\s@TerminateConnectionStatus' {} a -> s {currentStatus = a} :: TerminateConnectionStatus)
+
+-- | The state of the client connection.
+terminateConnectionStatus_previousStatus :: Lens.Lens' TerminateConnectionStatus (Prelude.Maybe ClientVpnConnectionStatus)
+terminateConnectionStatus_previousStatus = Lens.lens (\TerminateConnectionStatus' {previousStatus} -> previousStatus) (\s@TerminateConnectionStatus' {} a -> s {previousStatus = a} :: TerminateConnectionStatus)
+
+instance Data.FromXML TerminateConnectionStatus where
+  parseXML x =
+    TerminateConnectionStatus'
+      Prelude.<$> (x Data..@? "connectionId")
+      Prelude.<*> (x Data..@? "currentStatus")
+      Prelude.<*> (x Data..@? "previousStatus")
+
+instance Prelude.Hashable TerminateConnectionStatus where
+  hashWithSalt _salt TerminateConnectionStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionId
+      `Prelude.hashWithSalt` currentStatus
+      `Prelude.hashWithSalt` previousStatus
+
+instance Prelude.NFData TerminateConnectionStatus where
+  rnf TerminateConnectionStatus' {..} =
+    Prelude.rnf connectionId
+      `Prelude.seq` Prelude.rnf currentStatus
+      `Prelude.seq` Prelude.rnf previousStatus
diff --git a/gen/Amazonka/EC2/Types/ThroughResourcesStatement.hs b/gen/Amazonka/EC2/Types/ThroughResourcesStatement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ThroughResourcesStatement.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ThroughResourcesStatement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ThroughResourcesStatement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceStatement
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a through resource statement.
+--
+-- /See:/ 'newThroughResourcesStatement' smart constructor.
+data ThroughResourcesStatement = ThroughResourcesStatement'
+  { -- | The resource statement.
+    resourceStatement :: Prelude.Maybe ResourceStatement
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ThroughResourcesStatement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceStatement', 'throughResourcesStatement_resourceStatement' - The resource statement.
+newThroughResourcesStatement ::
+  ThroughResourcesStatement
+newThroughResourcesStatement =
+  ThroughResourcesStatement'
+    { resourceStatement =
+        Prelude.Nothing
+    }
+
+-- | The resource statement.
+throughResourcesStatement_resourceStatement :: Lens.Lens' ThroughResourcesStatement (Prelude.Maybe ResourceStatement)
+throughResourcesStatement_resourceStatement = Lens.lens (\ThroughResourcesStatement' {resourceStatement} -> resourceStatement) (\s@ThroughResourcesStatement' {} a -> s {resourceStatement = a} :: ThroughResourcesStatement)
+
+instance Data.FromXML ThroughResourcesStatement where
+  parseXML x =
+    ThroughResourcesStatement'
+      Prelude.<$> (x Data..@? "resourceStatement")
+
+instance Prelude.Hashable ThroughResourcesStatement where
+  hashWithSalt _salt ThroughResourcesStatement' {..} =
+    _salt `Prelude.hashWithSalt` resourceStatement
+
+instance Prelude.NFData ThroughResourcesStatement where
+  rnf ThroughResourcesStatement' {..} =
+    Prelude.rnf resourceStatement
diff --git a/gen/Amazonka/EC2/Types/ThroughResourcesStatementRequest.hs b/gen/Amazonka/EC2/Types/ThroughResourcesStatementRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ThroughResourcesStatementRequest.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ThroughResourcesStatementRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ThroughResourcesStatementRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ResourceStatementRequest
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a through resource statement.
+--
+-- /See:/ 'newThroughResourcesStatementRequest' smart constructor.
+data ThroughResourcesStatementRequest = ThroughResourcesStatementRequest'
+  { -- | The resource statement.
+    resourceStatement :: Prelude.Maybe ResourceStatementRequest
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ThroughResourcesStatementRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceStatement', 'throughResourcesStatementRequest_resourceStatement' - The resource statement.
+newThroughResourcesStatementRequest ::
+  ThroughResourcesStatementRequest
+newThroughResourcesStatementRequest =
+  ThroughResourcesStatementRequest'
+    { resourceStatement =
+        Prelude.Nothing
+    }
+
+-- | The resource statement.
+throughResourcesStatementRequest_resourceStatement :: Lens.Lens' ThroughResourcesStatementRequest (Prelude.Maybe ResourceStatementRequest)
+throughResourcesStatementRequest_resourceStatement = Lens.lens (\ThroughResourcesStatementRequest' {resourceStatement} -> resourceStatement) (\s@ThroughResourcesStatementRequest' {} a -> s {resourceStatement = a} :: ThroughResourcesStatementRequest)
+
+instance
+  Prelude.Hashable
+    ThroughResourcesStatementRequest
+  where
+  hashWithSalt
+    _salt
+    ThroughResourcesStatementRequest' {..} =
+      _salt `Prelude.hashWithSalt` resourceStatement
+
+instance
+  Prelude.NFData
+    ThroughResourcesStatementRequest
+  where
+  rnf ThroughResourcesStatementRequest' {..} =
+    Prelude.rnf resourceStatement
+
+instance
+  Data.ToQuery
+    ThroughResourcesStatementRequest
+  where
+  toQuery ThroughResourcesStatementRequest' {..} =
+    Prelude.mconcat
+      ["ResourceStatement" Data.=: resourceStatement]
diff --git a/gen/Amazonka/EC2/Types/TieringOperationStatus.hs b/gen/Amazonka/EC2/Types/TieringOperationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TieringOperationStatus.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TieringOperationStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TieringOperationStatus
+  ( TieringOperationStatus
+      ( ..,
+        TieringOperationStatus_Archival_completed,
+        TieringOperationStatus_Archival_failed,
+        TieringOperationStatus_Archival_in_progress,
+        TieringOperationStatus_Permanent_restore_completed,
+        TieringOperationStatus_Permanent_restore_failed,
+        TieringOperationStatus_Permanent_restore_in_progress,
+        TieringOperationStatus_Temporary_restore_completed,
+        TieringOperationStatus_Temporary_restore_failed,
+        TieringOperationStatus_Temporary_restore_in_progress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TieringOperationStatus = TieringOperationStatus'
+  { fromTieringOperationStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TieringOperationStatus_Archival_completed :: TieringOperationStatus
+pattern TieringOperationStatus_Archival_completed = TieringOperationStatus' "archival-completed"
+
+pattern TieringOperationStatus_Archival_failed :: TieringOperationStatus
+pattern TieringOperationStatus_Archival_failed = TieringOperationStatus' "archival-failed"
+
+pattern TieringOperationStatus_Archival_in_progress :: TieringOperationStatus
+pattern TieringOperationStatus_Archival_in_progress = TieringOperationStatus' "archival-in-progress"
+
+pattern TieringOperationStatus_Permanent_restore_completed :: TieringOperationStatus
+pattern TieringOperationStatus_Permanent_restore_completed = TieringOperationStatus' "permanent-restore-completed"
+
+pattern TieringOperationStatus_Permanent_restore_failed :: TieringOperationStatus
+pattern TieringOperationStatus_Permanent_restore_failed = TieringOperationStatus' "permanent-restore-failed"
+
+pattern TieringOperationStatus_Permanent_restore_in_progress :: TieringOperationStatus
+pattern TieringOperationStatus_Permanent_restore_in_progress = TieringOperationStatus' "permanent-restore-in-progress"
+
+pattern TieringOperationStatus_Temporary_restore_completed :: TieringOperationStatus
+pattern TieringOperationStatus_Temporary_restore_completed = TieringOperationStatus' "temporary-restore-completed"
+
+pattern TieringOperationStatus_Temporary_restore_failed :: TieringOperationStatus
+pattern TieringOperationStatus_Temporary_restore_failed = TieringOperationStatus' "temporary-restore-failed"
+
+pattern TieringOperationStatus_Temporary_restore_in_progress :: TieringOperationStatus
+pattern TieringOperationStatus_Temporary_restore_in_progress = TieringOperationStatus' "temporary-restore-in-progress"
+
+{-# COMPLETE
+  TieringOperationStatus_Archival_completed,
+  TieringOperationStatus_Archival_failed,
+  TieringOperationStatus_Archival_in_progress,
+  TieringOperationStatus_Permanent_restore_completed,
+  TieringOperationStatus_Permanent_restore_failed,
+  TieringOperationStatus_Permanent_restore_in_progress,
+  TieringOperationStatus_Temporary_restore_completed,
+  TieringOperationStatus_Temporary_restore_failed,
+  TieringOperationStatus_Temporary_restore_in_progress,
+  TieringOperationStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TotalLocalStorageGB.hs b/gen/Amazonka/EC2/Types/TotalLocalStorageGB.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TotalLocalStorageGB.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TotalLocalStorageGB
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TotalLocalStorageGB where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of total local storage, in GB.
+--
+-- /See:/ 'newTotalLocalStorageGB' smart constructor.
+data TotalLocalStorageGB = TotalLocalStorageGB'
+  { -- | The maximum amount of total local storage, in GB. If this parameter is
+    -- not specified, there is no maximum limit.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The minimum amount of total local storage, in GB. If this parameter is
+    -- not specified, there is no minimum limit.
+    min :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TotalLocalStorageGB' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'totalLocalStorageGB_max' - The maximum amount of total local storage, in GB. If this parameter is
+-- not specified, there is no maximum limit.
+--
+-- 'min', 'totalLocalStorageGB_min' - The minimum amount of total local storage, in GB. If this parameter is
+-- not specified, there is no minimum limit.
+newTotalLocalStorageGB ::
+  TotalLocalStorageGB
+newTotalLocalStorageGB =
+  TotalLocalStorageGB'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of total local storage, in GB. If this parameter is
+-- not specified, there is no maximum limit.
+totalLocalStorageGB_max :: Lens.Lens' TotalLocalStorageGB (Prelude.Maybe Prelude.Double)
+totalLocalStorageGB_max = Lens.lens (\TotalLocalStorageGB' {max} -> max) (\s@TotalLocalStorageGB' {} a -> s {max = a} :: TotalLocalStorageGB)
+
+-- | The minimum amount of total local storage, in GB. If this parameter is
+-- not specified, there is no minimum limit.
+totalLocalStorageGB_min :: Lens.Lens' TotalLocalStorageGB (Prelude.Maybe Prelude.Double)
+totalLocalStorageGB_min = Lens.lens (\TotalLocalStorageGB' {min} -> min) (\s@TotalLocalStorageGB' {} a -> s {min = a} :: TotalLocalStorageGB)
+
+instance Data.FromXML TotalLocalStorageGB where
+  parseXML x =
+    TotalLocalStorageGB'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable TotalLocalStorageGB where
+  hashWithSalt _salt TotalLocalStorageGB' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData TotalLocalStorageGB where
+  rnf TotalLocalStorageGB' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery TotalLocalStorageGB where
+  toQuery TotalLocalStorageGB' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/TotalLocalStorageGBRequest.hs b/gen/Amazonka/EC2/Types/TotalLocalStorageGBRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TotalLocalStorageGBRequest.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TotalLocalStorageGBRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TotalLocalStorageGBRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum amount of total local storage, in GB.
+--
+-- /See:/ 'newTotalLocalStorageGBRequest' smart constructor.
+data TotalLocalStorageGBRequest = TotalLocalStorageGBRequest'
+  { -- | The maximum amount of total local storage, in GB. To specify no maximum
+    -- limit, omit this parameter.
+    max :: Prelude.Maybe Prelude.Double,
+    -- | The minimum amount of total local storage, in GB. To specify no minimum
+    -- limit, omit this parameter.
+    min :: Prelude.Maybe Prelude.Double
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TotalLocalStorageGBRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'totalLocalStorageGBRequest_max' - The maximum amount of total local storage, in GB. To specify no maximum
+-- limit, omit this parameter.
+--
+-- 'min', 'totalLocalStorageGBRequest_min' - The minimum amount of total local storage, in GB. To specify no minimum
+-- limit, omit this parameter.
+newTotalLocalStorageGBRequest ::
+  TotalLocalStorageGBRequest
+newTotalLocalStorageGBRequest =
+  TotalLocalStorageGBRequest'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum amount of total local storage, in GB. To specify no maximum
+-- limit, omit this parameter.
+totalLocalStorageGBRequest_max :: Lens.Lens' TotalLocalStorageGBRequest (Prelude.Maybe Prelude.Double)
+totalLocalStorageGBRequest_max = Lens.lens (\TotalLocalStorageGBRequest' {max} -> max) (\s@TotalLocalStorageGBRequest' {} a -> s {max = a} :: TotalLocalStorageGBRequest)
+
+-- | The minimum amount of total local storage, in GB. To specify no minimum
+-- limit, omit this parameter.
+totalLocalStorageGBRequest_min :: Lens.Lens' TotalLocalStorageGBRequest (Prelude.Maybe Prelude.Double)
+totalLocalStorageGBRequest_min = Lens.lens (\TotalLocalStorageGBRequest' {min} -> min) (\s@TotalLocalStorageGBRequest' {} a -> s {min = a} :: TotalLocalStorageGBRequest)
+
+instance Prelude.Hashable TotalLocalStorageGBRequest where
+  hashWithSalt _salt TotalLocalStorageGBRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData TotalLocalStorageGBRequest where
+  rnf TotalLocalStorageGBRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery TotalLocalStorageGBRequest where
+  toQuery TotalLocalStorageGBRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/TpmSupportValues.hs b/gen/Amazonka/EC2/Types/TpmSupportValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TpmSupportValues.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TpmSupportValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TpmSupportValues
+  ( TpmSupportValues
+      ( ..,
+        TpmSupportValues_V2_0
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TpmSupportValues = TpmSupportValues'
+  { fromTpmSupportValues ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TpmSupportValues_V2_0 :: TpmSupportValues
+pattern TpmSupportValues_V2_0 = TpmSupportValues' "v2.0"
+
+{-# COMPLETE
+  TpmSupportValues_V2_0,
+  TpmSupportValues'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficDirection.hs b/gen/Amazonka/EC2/Types/TrafficDirection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficDirection.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficDirection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficDirection
+  ( TrafficDirection
+      ( ..,
+        TrafficDirection_Egress,
+        TrafficDirection_Ingress
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficDirection = TrafficDirection'
+  { fromTrafficDirection ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficDirection_Egress :: TrafficDirection
+pattern TrafficDirection_Egress = TrafficDirection' "egress"
+
+pattern TrafficDirection_Ingress :: TrafficDirection
+pattern TrafficDirection_Ingress = TrafficDirection' "ingress"
+
+{-# COMPLETE
+  TrafficDirection_Egress,
+  TrafficDirection_Ingress,
+  TrafficDirection'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorFilter.hs b/gen/Amazonka/EC2/Types/TrafficMirrorFilter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorFilter.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorFilter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorFilter where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TrafficMirrorFilterRule
+import Amazonka.EC2.Types.TrafficMirrorNetworkService
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Traffic Mirror filter.
+--
+-- /See:/ 'newTrafficMirrorFilter' smart constructor.
+data TrafficMirrorFilter = TrafficMirrorFilter'
+  { -- | The description of the Traffic Mirror filter.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Information about the egress rules that are associated with the Traffic
+    -- Mirror filter.
+    egressFilterRules :: Prelude.Maybe [TrafficMirrorFilterRule],
+    -- | Information about the ingress rules that are associated with the Traffic
+    -- Mirror filter.
+    ingressFilterRules :: Prelude.Maybe [TrafficMirrorFilterRule],
+    -- | The network service traffic that is associated with the Traffic Mirror
+    -- filter.
+    networkServices :: Prelude.Maybe [TrafficMirrorNetworkService],
+    -- | The tags assigned to the Traffic Mirror filter.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrafficMirrorFilter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'trafficMirrorFilter_description' - The description of the Traffic Mirror filter.
+--
+-- 'egressFilterRules', 'trafficMirrorFilter_egressFilterRules' - Information about the egress rules that are associated with the Traffic
+-- Mirror filter.
+--
+-- 'ingressFilterRules', 'trafficMirrorFilter_ingressFilterRules' - Information about the ingress rules that are associated with the Traffic
+-- Mirror filter.
+--
+-- 'networkServices', 'trafficMirrorFilter_networkServices' - The network service traffic that is associated with the Traffic Mirror
+-- filter.
+--
+-- 'tags', 'trafficMirrorFilter_tags' - The tags assigned to the Traffic Mirror filter.
+--
+-- 'trafficMirrorFilterId', 'trafficMirrorFilter_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+newTrafficMirrorFilter ::
+  TrafficMirrorFilter
+newTrafficMirrorFilter =
+  TrafficMirrorFilter'
+    { description = Prelude.Nothing,
+      egressFilterRules = Prelude.Nothing,
+      ingressFilterRules = Prelude.Nothing,
+      networkServices = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trafficMirrorFilterId = Prelude.Nothing
+    }
+
+-- | The description of the Traffic Mirror filter.
+trafficMirrorFilter_description :: Lens.Lens' TrafficMirrorFilter (Prelude.Maybe Prelude.Text)
+trafficMirrorFilter_description = Lens.lens (\TrafficMirrorFilter' {description} -> description) (\s@TrafficMirrorFilter' {} a -> s {description = a} :: TrafficMirrorFilter)
+
+-- | Information about the egress rules that are associated with the Traffic
+-- Mirror filter.
+trafficMirrorFilter_egressFilterRules :: Lens.Lens' TrafficMirrorFilter (Prelude.Maybe [TrafficMirrorFilterRule])
+trafficMirrorFilter_egressFilterRules = Lens.lens (\TrafficMirrorFilter' {egressFilterRules} -> egressFilterRules) (\s@TrafficMirrorFilter' {} a -> s {egressFilterRules = a} :: TrafficMirrorFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the ingress rules that are associated with the Traffic
+-- Mirror filter.
+trafficMirrorFilter_ingressFilterRules :: Lens.Lens' TrafficMirrorFilter (Prelude.Maybe [TrafficMirrorFilterRule])
+trafficMirrorFilter_ingressFilterRules = Lens.lens (\TrafficMirrorFilter' {ingressFilterRules} -> ingressFilterRules) (\s@TrafficMirrorFilter' {} a -> s {ingressFilterRules = a} :: TrafficMirrorFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | The network service traffic that is associated with the Traffic Mirror
+-- filter.
+trafficMirrorFilter_networkServices :: Lens.Lens' TrafficMirrorFilter (Prelude.Maybe [TrafficMirrorNetworkService])
+trafficMirrorFilter_networkServices = Lens.lens (\TrafficMirrorFilter' {networkServices} -> networkServices) (\s@TrafficMirrorFilter' {} a -> s {networkServices = a} :: TrafficMirrorFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags assigned to the Traffic Mirror filter.
+trafficMirrorFilter_tags :: Lens.Lens' TrafficMirrorFilter (Prelude.Maybe [Tag])
+trafficMirrorFilter_tags = Lens.lens (\TrafficMirrorFilter' {tags} -> tags) (\s@TrafficMirrorFilter' {} a -> s {tags = a} :: TrafficMirrorFilter) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Traffic Mirror filter.
+trafficMirrorFilter_trafficMirrorFilterId :: Lens.Lens' TrafficMirrorFilter (Prelude.Maybe Prelude.Text)
+trafficMirrorFilter_trafficMirrorFilterId = Lens.lens (\TrafficMirrorFilter' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@TrafficMirrorFilter' {} a -> s {trafficMirrorFilterId = a} :: TrafficMirrorFilter)
+
+instance Data.FromXML TrafficMirrorFilter where
+  parseXML x =
+    TrafficMirrorFilter'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> ( x
+                      Data..@? "egressFilterRuleSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ingressFilterRuleSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "networkServiceSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "trafficMirrorFilterId")
+
+instance Prelude.Hashable TrafficMirrorFilter where
+  hashWithSalt _salt TrafficMirrorFilter' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` egressFilterRules
+      `Prelude.hashWithSalt` ingressFilterRules
+      `Prelude.hashWithSalt` networkServices
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+
+instance Prelude.NFData TrafficMirrorFilter where
+  rnf TrafficMirrorFilter' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf egressFilterRules
+      `Prelude.seq` Prelude.rnf ingressFilterRules
+      `Prelude.seq` Prelude.rnf networkServices
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorFilterRule.hs b/gen/Amazonka/EC2/Types/TrafficMirrorFilterRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorFilterRule.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorFilterRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorFilterRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TrafficDirection
+import Amazonka.EC2.Types.TrafficMirrorPortRange
+import Amazonka.EC2.Types.TrafficMirrorRuleAction
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Traffic Mirror rule.
+--
+-- /See:/ 'newTrafficMirrorFilterRule' smart constructor.
+data TrafficMirrorFilterRule = TrafficMirrorFilterRule'
+  { -- | The description of the Traffic Mirror rule.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The destination CIDR block assigned to the Traffic Mirror rule.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The destination port range assigned to the Traffic Mirror rule.
+    destinationPortRange :: Prelude.Maybe TrafficMirrorPortRange,
+    -- | The protocol assigned to the Traffic Mirror rule.
+    protocol :: Prelude.Maybe Prelude.Int,
+    -- | The action assigned to the Traffic Mirror rule.
+    ruleAction :: Prelude.Maybe TrafficMirrorRuleAction,
+    -- | The rule number of the Traffic Mirror rule.
+    ruleNumber :: Prelude.Maybe Prelude.Int,
+    -- | The source CIDR block assigned to the Traffic Mirror rule.
+    sourceCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The source port range assigned to the Traffic Mirror rule.
+    sourcePortRange :: Prelude.Maybe TrafficMirrorPortRange,
+    -- | The traffic direction assigned to the Traffic Mirror rule.
+    trafficDirection :: Prelude.Maybe TrafficDirection,
+    -- | The ID of the Traffic Mirror filter that the rule is associated with.
+    trafficMirrorFilterId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Traffic Mirror rule.
+    trafficMirrorFilterRuleId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrafficMirrorFilterRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'trafficMirrorFilterRule_description' - The description of the Traffic Mirror rule.
+--
+-- 'destinationCidrBlock', 'trafficMirrorFilterRule_destinationCidrBlock' - The destination CIDR block assigned to the Traffic Mirror rule.
+--
+-- 'destinationPortRange', 'trafficMirrorFilterRule_destinationPortRange' - The destination port range assigned to the Traffic Mirror rule.
+--
+-- 'protocol', 'trafficMirrorFilterRule_protocol' - The protocol assigned to the Traffic Mirror rule.
+--
+-- 'ruleAction', 'trafficMirrorFilterRule_ruleAction' - The action assigned to the Traffic Mirror rule.
+--
+-- 'ruleNumber', 'trafficMirrorFilterRule_ruleNumber' - The rule number of the Traffic Mirror rule.
+--
+-- 'sourceCidrBlock', 'trafficMirrorFilterRule_sourceCidrBlock' - The source CIDR block assigned to the Traffic Mirror rule.
+--
+-- 'sourcePortRange', 'trafficMirrorFilterRule_sourcePortRange' - The source port range assigned to the Traffic Mirror rule.
+--
+-- 'trafficDirection', 'trafficMirrorFilterRule_trafficDirection' - The traffic direction assigned to the Traffic Mirror rule.
+--
+-- 'trafficMirrorFilterId', 'trafficMirrorFilterRule_trafficMirrorFilterId' - The ID of the Traffic Mirror filter that the rule is associated with.
+--
+-- 'trafficMirrorFilterRuleId', 'trafficMirrorFilterRule_trafficMirrorFilterRuleId' - The ID of the Traffic Mirror rule.
+newTrafficMirrorFilterRule ::
+  TrafficMirrorFilterRule
+newTrafficMirrorFilterRule =
+  TrafficMirrorFilterRule'
+    { description =
+        Prelude.Nothing,
+      destinationCidrBlock = Prelude.Nothing,
+      destinationPortRange = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      ruleAction = Prelude.Nothing,
+      ruleNumber = Prelude.Nothing,
+      sourceCidrBlock = Prelude.Nothing,
+      sourcePortRange = Prelude.Nothing,
+      trafficDirection = Prelude.Nothing,
+      trafficMirrorFilterId = Prelude.Nothing,
+      trafficMirrorFilterRuleId = Prelude.Nothing
+    }
+
+-- | The description of the Traffic Mirror rule.
+trafficMirrorFilterRule_description :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+trafficMirrorFilterRule_description = Lens.lens (\TrafficMirrorFilterRule' {description} -> description) (\s@TrafficMirrorFilterRule' {} a -> s {description = a} :: TrafficMirrorFilterRule)
+
+-- | The destination CIDR block assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_destinationCidrBlock :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+trafficMirrorFilterRule_destinationCidrBlock = Lens.lens (\TrafficMirrorFilterRule' {destinationCidrBlock} -> destinationCidrBlock) (\s@TrafficMirrorFilterRule' {} a -> s {destinationCidrBlock = a} :: TrafficMirrorFilterRule)
+
+-- | The destination port range assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_destinationPortRange :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorPortRange)
+trafficMirrorFilterRule_destinationPortRange = Lens.lens (\TrafficMirrorFilterRule' {destinationPortRange} -> destinationPortRange) (\s@TrafficMirrorFilterRule' {} a -> s {destinationPortRange = a} :: TrafficMirrorFilterRule)
+
+-- | The protocol assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_protocol :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Int)
+trafficMirrorFilterRule_protocol = Lens.lens (\TrafficMirrorFilterRule' {protocol} -> protocol) (\s@TrafficMirrorFilterRule' {} a -> s {protocol = a} :: TrafficMirrorFilterRule)
+
+-- | The action assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_ruleAction :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorRuleAction)
+trafficMirrorFilterRule_ruleAction = Lens.lens (\TrafficMirrorFilterRule' {ruleAction} -> ruleAction) (\s@TrafficMirrorFilterRule' {} a -> s {ruleAction = a} :: TrafficMirrorFilterRule)
+
+-- | The rule number of the Traffic Mirror rule.
+trafficMirrorFilterRule_ruleNumber :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Int)
+trafficMirrorFilterRule_ruleNumber = Lens.lens (\TrafficMirrorFilterRule' {ruleNumber} -> ruleNumber) (\s@TrafficMirrorFilterRule' {} a -> s {ruleNumber = a} :: TrafficMirrorFilterRule)
+
+-- | The source CIDR block assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_sourceCidrBlock :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+trafficMirrorFilterRule_sourceCidrBlock = Lens.lens (\TrafficMirrorFilterRule' {sourceCidrBlock} -> sourceCidrBlock) (\s@TrafficMirrorFilterRule' {} a -> s {sourceCidrBlock = a} :: TrafficMirrorFilterRule)
+
+-- | The source port range assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_sourcePortRange :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe TrafficMirrorPortRange)
+trafficMirrorFilterRule_sourcePortRange = Lens.lens (\TrafficMirrorFilterRule' {sourcePortRange} -> sourcePortRange) (\s@TrafficMirrorFilterRule' {} a -> s {sourcePortRange = a} :: TrafficMirrorFilterRule)
+
+-- | The traffic direction assigned to the Traffic Mirror rule.
+trafficMirrorFilterRule_trafficDirection :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe TrafficDirection)
+trafficMirrorFilterRule_trafficDirection = Lens.lens (\TrafficMirrorFilterRule' {trafficDirection} -> trafficDirection) (\s@TrafficMirrorFilterRule' {} a -> s {trafficDirection = a} :: TrafficMirrorFilterRule)
+
+-- | The ID of the Traffic Mirror filter that the rule is associated with.
+trafficMirrorFilterRule_trafficMirrorFilterId :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+trafficMirrorFilterRule_trafficMirrorFilterId = Lens.lens (\TrafficMirrorFilterRule' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@TrafficMirrorFilterRule' {} a -> s {trafficMirrorFilterId = a} :: TrafficMirrorFilterRule)
+
+-- | The ID of the Traffic Mirror rule.
+trafficMirrorFilterRule_trafficMirrorFilterRuleId :: Lens.Lens' TrafficMirrorFilterRule (Prelude.Maybe Prelude.Text)
+trafficMirrorFilterRule_trafficMirrorFilterRuleId = Lens.lens (\TrafficMirrorFilterRule' {trafficMirrorFilterRuleId} -> trafficMirrorFilterRuleId) (\s@TrafficMirrorFilterRule' {} a -> s {trafficMirrorFilterRuleId = a} :: TrafficMirrorFilterRule)
+
+instance Data.FromXML TrafficMirrorFilterRule where
+  parseXML x =
+    TrafficMirrorFilterRule'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "destinationCidrBlock")
+      Prelude.<*> (x Data..@? "destinationPortRange")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "ruleAction")
+      Prelude.<*> (x Data..@? "ruleNumber")
+      Prelude.<*> (x Data..@? "sourceCidrBlock")
+      Prelude.<*> (x Data..@? "sourcePortRange")
+      Prelude.<*> (x Data..@? "trafficDirection")
+      Prelude.<*> (x Data..@? "trafficMirrorFilterId")
+      Prelude.<*> (x Data..@? "trafficMirrorFilterRuleId")
+
+instance Prelude.Hashable TrafficMirrorFilterRule where
+  hashWithSalt _salt TrafficMirrorFilterRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationPortRange
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` ruleAction
+      `Prelude.hashWithSalt` ruleNumber
+      `Prelude.hashWithSalt` sourceCidrBlock
+      `Prelude.hashWithSalt` sourcePortRange
+      `Prelude.hashWithSalt` trafficDirection
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+      `Prelude.hashWithSalt` trafficMirrorFilterRuleId
+
+instance Prelude.NFData TrafficMirrorFilterRule where
+  rnf TrafficMirrorFilterRule' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationPortRange
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf ruleAction
+      `Prelude.seq` Prelude.rnf ruleNumber
+      `Prelude.seq` Prelude.rnf sourceCidrBlock
+      `Prelude.seq` Prelude.rnf sourcePortRange
+      `Prelude.seq` Prelude.rnf trafficDirection
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterRuleId
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorFilterRuleField.hs b/gen/Amazonka/EC2/Types/TrafficMirrorFilterRuleField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorFilterRuleField.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorFilterRuleField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorFilterRuleField
+  ( TrafficMirrorFilterRuleField
+      ( ..,
+        TrafficMirrorFilterRuleField_Description,
+        TrafficMirrorFilterRuleField_Destination_port_range,
+        TrafficMirrorFilterRuleField_Protocol,
+        TrafficMirrorFilterRuleField_Source_port_range
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficMirrorFilterRuleField = TrafficMirrorFilterRuleField'
+  { fromTrafficMirrorFilterRuleField ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficMirrorFilterRuleField_Description :: TrafficMirrorFilterRuleField
+pattern TrafficMirrorFilterRuleField_Description = TrafficMirrorFilterRuleField' "description"
+
+pattern TrafficMirrorFilterRuleField_Destination_port_range :: TrafficMirrorFilterRuleField
+pattern TrafficMirrorFilterRuleField_Destination_port_range = TrafficMirrorFilterRuleField' "destination-port-range"
+
+pattern TrafficMirrorFilterRuleField_Protocol :: TrafficMirrorFilterRuleField
+pattern TrafficMirrorFilterRuleField_Protocol = TrafficMirrorFilterRuleField' "protocol"
+
+pattern TrafficMirrorFilterRuleField_Source_port_range :: TrafficMirrorFilterRuleField
+pattern TrafficMirrorFilterRuleField_Source_port_range = TrafficMirrorFilterRuleField' "source-port-range"
+
+{-# COMPLETE
+  TrafficMirrorFilterRuleField_Description,
+  TrafficMirrorFilterRuleField_Destination_port_range,
+  TrafficMirrorFilterRuleField_Protocol,
+  TrafficMirrorFilterRuleField_Source_port_range,
+  TrafficMirrorFilterRuleField'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorNetworkService.hs b/gen/Amazonka/EC2/Types/TrafficMirrorNetworkService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorNetworkService.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorNetworkService
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorNetworkService
+  ( TrafficMirrorNetworkService
+      ( ..,
+        TrafficMirrorNetworkService_Amazon_dns
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficMirrorNetworkService = TrafficMirrorNetworkService'
+  { fromTrafficMirrorNetworkService ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficMirrorNetworkService_Amazon_dns :: TrafficMirrorNetworkService
+pattern TrafficMirrorNetworkService_Amazon_dns = TrafficMirrorNetworkService' "amazon-dns"
+
+{-# COMPLETE
+  TrafficMirrorNetworkService_Amazon_dns,
+  TrafficMirrorNetworkService'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorPortRange.hs b/gen/Amazonka/EC2/Types/TrafficMirrorPortRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorPortRange.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorPortRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorPortRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Traffic Mirror port range.
+--
+-- /See:/ 'newTrafficMirrorPortRange' smart constructor.
+data TrafficMirrorPortRange = TrafficMirrorPortRange'
+  { -- | The start of the Traffic Mirror port range. This applies to the TCP and
+    -- UDP protocols.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The end of the Traffic Mirror port range. This applies to the TCP and
+    -- UDP protocols.
+    toPort :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrafficMirrorPortRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fromPort', 'trafficMirrorPortRange_fromPort' - The start of the Traffic Mirror port range. This applies to the TCP and
+-- UDP protocols.
+--
+-- 'toPort', 'trafficMirrorPortRange_toPort' - The end of the Traffic Mirror port range. This applies to the TCP and
+-- UDP protocols.
+newTrafficMirrorPortRange ::
+  TrafficMirrorPortRange
+newTrafficMirrorPortRange =
+  TrafficMirrorPortRange'
+    { fromPort = Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The start of the Traffic Mirror port range. This applies to the TCP and
+-- UDP protocols.
+trafficMirrorPortRange_fromPort :: Lens.Lens' TrafficMirrorPortRange (Prelude.Maybe Prelude.Int)
+trafficMirrorPortRange_fromPort = Lens.lens (\TrafficMirrorPortRange' {fromPort} -> fromPort) (\s@TrafficMirrorPortRange' {} a -> s {fromPort = a} :: TrafficMirrorPortRange)
+
+-- | The end of the Traffic Mirror port range. This applies to the TCP and
+-- UDP protocols.
+trafficMirrorPortRange_toPort :: Lens.Lens' TrafficMirrorPortRange (Prelude.Maybe Prelude.Int)
+trafficMirrorPortRange_toPort = Lens.lens (\TrafficMirrorPortRange' {toPort} -> toPort) (\s@TrafficMirrorPortRange' {} a -> s {toPort = a} :: TrafficMirrorPortRange)
+
+instance Data.FromXML TrafficMirrorPortRange where
+  parseXML x =
+    TrafficMirrorPortRange'
+      Prelude.<$> (x Data..@? "fromPort")
+      Prelude.<*> (x Data..@? "toPort")
+
+instance Prelude.Hashable TrafficMirrorPortRange where
+  hashWithSalt _salt TrafficMirrorPortRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData TrafficMirrorPortRange where
+  rnf TrafficMirrorPortRange' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf toPort
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorPortRangeRequest.hs b/gen/Amazonka/EC2/Types/TrafficMirrorPortRangeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorPortRangeRequest.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorPortRangeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorPortRangeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the Traffic Mirror filter rule port range.
+--
+-- /See:/ 'newTrafficMirrorPortRangeRequest' smart constructor.
+data TrafficMirrorPortRangeRequest = TrafficMirrorPortRangeRequest'
+  { -- | The first port in the Traffic Mirror port range. This applies to the TCP
+    -- and UDP protocols.
+    fromPort :: Prelude.Maybe Prelude.Int,
+    -- | The last port in the Traffic Mirror port range. This applies to the TCP
+    -- and UDP protocols.
+    toPort :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrafficMirrorPortRangeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fromPort', 'trafficMirrorPortRangeRequest_fromPort' - The first port in the Traffic Mirror port range. This applies to the TCP
+-- and UDP protocols.
+--
+-- 'toPort', 'trafficMirrorPortRangeRequest_toPort' - The last port in the Traffic Mirror port range. This applies to the TCP
+-- and UDP protocols.
+newTrafficMirrorPortRangeRequest ::
+  TrafficMirrorPortRangeRequest
+newTrafficMirrorPortRangeRequest =
+  TrafficMirrorPortRangeRequest'
+    { fromPort =
+        Prelude.Nothing,
+      toPort = Prelude.Nothing
+    }
+
+-- | The first port in the Traffic Mirror port range. This applies to the TCP
+-- and UDP protocols.
+trafficMirrorPortRangeRequest_fromPort :: Lens.Lens' TrafficMirrorPortRangeRequest (Prelude.Maybe Prelude.Int)
+trafficMirrorPortRangeRequest_fromPort = Lens.lens (\TrafficMirrorPortRangeRequest' {fromPort} -> fromPort) (\s@TrafficMirrorPortRangeRequest' {} a -> s {fromPort = a} :: TrafficMirrorPortRangeRequest)
+
+-- | The last port in the Traffic Mirror port range. This applies to the TCP
+-- and UDP protocols.
+trafficMirrorPortRangeRequest_toPort :: Lens.Lens' TrafficMirrorPortRangeRequest (Prelude.Maybe Prelude.Int)
+trafficMirrorPortRangeRequest_toPort = Lens.lens (\TrafficMirrorPortRangeRequest' {toPort} -> toPort) (\s@TrafficMirrorPortRangeRequest' {} a -> s {toPort = a} :: TrafficMirrorPortRangeRequest)
+
+instance
+  Prelude.Hashable
+    TrafficMirrorPortRangeRequest
+  where
+  hashWithSalt _salt TrafficMirrorPortRangeRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` fromPort
+      `Prelude.hashWithSalt` toPort
+
+instance Prelude.NFData TrafficMirrorPortRangeRequest where
+  rnf TrafficMirrorPortRangeRequest' {..} =
+    Prelude.rnf fromPort
+      `Prelude.seq` Prelude.rnf toPort
+
+instance Data.ToQuery TrafficMirrorPortRangeRequest where
+  toQuery TrafficMirrorPortRangeRequest' {..} =
+    Prelude.mconcat
+      [ "FromPort" Data.=: fromPort,
+        "ToPort" Data.=: toPort
+      ]
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorRuleAction.hs b/gen/Amazonka/EC2/Types/TrafficMirrorRuleAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorRuleAction.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorRuleAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorRuleAction
+  ( TrafficMirrorRuleAction
+      ( ..,
+        TrafficMirrorRuleAction_Accept,
+        TrafficMirrorRuleAction_Reject
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficMirrorRuleAction = TrafficMirrorRuleAction'
+  { fromTrafficMirrorRuleAction ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficMirrorRuleAction_Accept :: TrafficMirrorRuleAction
+pattern TrafficMirrorRuleAction_Accept = TrafficMirrorRuleAction' "accept"
+
+pattern TrafficMirrorRuleAction_Reject :: TrafficMirrorRuleAction
+pattern TrafficMirrorRuleAction_Reject = TrafficMirrorRuleAction' "reject"
+
+{-# COMPLETE
+  TrafficMirrorRuleAction_Accept,
+  TrafficMirrorRuleAction_Reject,
+  TrafficMirrorRuleAction'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorSession.hs b/gen/Amazonka/EC2/Types/TrafficMirrorSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorSession.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorSession where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Traffic Mirror session.
+--
+-- /See:/ 'newTrafficMirrorSession' smart constructor.
+data TrafficMirrorSession = TrafficMirrorSession'
+  { -- | The description of the Traffic Mirror session.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Traffic Mirror session\'s network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the account that owns the Traffic Mirror session.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The number of bytes in each packet to mirror. These are the bytes after
+    -- the VXLAN header. To mirror a subset, set this to the length (in bytes)
+    -- to mirror. For example, if you set this value to 100, then the first 100
+    -- bytes that meet the filter criteria are copied to the target. Do not
+    -- specify this parameter when you want to mirror the entire packet
+    packetLength :: Prelude.Maybe Prelude.Int,
+    -- | The session number determines the order in which sessions are evaluated
+    -- when an interface is used by multiple sessions. The first session with a
+    -- matching filter is the one that mirrors the packets.
+    --
+    -- Valid values are 1-32766.
+    sessionNumber :: Prelude.Maybe Prelude.Int,
+    -- | The tags assigned to the Traffic Mirror session.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Traffic Mirror filter.
+    trafficMirrorFilterId :: Prelude.Maybe Prelude.Text,
+    -- | The ID for the Traffic Mirror session.
+    trafficMirrorSessionId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Traffic Mirror target.
+    trafficMirrorTargetId :: Prelude.Maybe Prelude.Text,
+    -- | The virtual network ID associated with the Traffic Mirror session.
+    virtualNetworkId :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrafficMirrorSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'trafficMirrorSession_description' - The description of the Traffic Mirror session.
+--
+-- 'networkInterfaceId', 'trafficMirrorSession_networkInterfaceId' - The ID of the Traffic Mirror session\'s network interface.
+--
+-- 'ownerId', 'trafficMirrorSession_ownerId' - The ID of the account that owns the Traffic Mirror session.
+--
+-- 'packetLength', 'trafficMirrorSession_packetLength' - The number of bytes in each packet to mirror. These are the bytes after
+-- the VXLAN header. To mirror a subset, set this to the length (in bytes)
+-- to mirror. For example, if you set this value to 100, then the first 100
+-- bytes that meet the filter criteria are copied to the target. Do not
+-- specify this parameter when you want to mirror the entire packet
+--
+-- 'sessionNumber', 'trafficMirrorSession_sessionNumber' - The session number determines the order in which sessions are evaluated
+-- when an interface is used by multiple sessions. The first session with a
+-- matching filter is the one that mirrors the packets.
+--
+-- Valid values are 1-32766.
+--
+-- 'tags', 'trafficMirrorSession_tags' - The tags assigned to the Traffic Mirror session.
+--
+-- 'trafficMirrorFilterId', 'trafficMirrorSession_trafficMirrorFilterId' - The ID of the Traffic Mirror filter.
+--
+-- 'trafficMirrorSessionId', 'trafficMirrorSession_trafficMirrorSessionId' - The ID for the Traffic Mirror session.
+--
+-- 'trafficMirrorTargetId', 'trafficMirrorSession_trafficMirrorTargetId' - The ID of the Traffic Mirror target.
+--
+-- 'virtualNetworkId', 'trafficMirrorSession_virtualNetworkId' - The virtual network ID associated with the Traffic Mirror session.
+newTrafficMirrorSession ::
+  TrafficMirrorSession
+newTrafficMirrorSession =
+  TrafficMirrorSession'
+    { description =
+        Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      packetLength = Prelude.Nothing,
+      sessionNumber = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trafficMirrorFilterId = Prelude.Nothing,
+      trafficMirrorSessionId = Prelude.Nothing,
+      trafficMirrorTargetId = Prelude.Nothing,
+      virtualNetworkId = Prelude.Nothing
+    }
+
+-- | The description of the Traffic Mirror session.
+trafficMirrorSession_description :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Text)
+trafficMirrorSession_description = Lens.lens (\TrafficMirrorSession' {description} -> description) (\s@TrafficMirrorSession' {} a -> s {description = a} :: TrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror session\'s network interface.
+trafficMirrorSession_networkInterfaceId :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Text)
+trafficMirrorSession_networkInterfaceId = Lens.lens (\TrafficMirrorSession' {networkInterfaceId} -> networkInterfaceId) (\s@TrafficMirrorSession' {} a -> s {networkInterfaceId = a} :: TrafficMirrorSession)
+
+-- | The ID of the account that owns the Traffic Mirror session.
+trafficMirrorSession_ownerId :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Text)
+trafficMirrorSession_ownerId = Lens.lens (\TrafficMirrorSession' {ownerId} -> ownerId) (\s@TrafficMirrorSession' {} a -> s {ownerId = a} :: TrafficMirrorSession)
+
+-- | The number of bytes in each packet to mirror. These are the bytes after
+-- the VXLAN header. To mirror a subset, set this to the length (in bytes)
+-- to mirror. For example, if you set this value to 100, then the first 100
+-- bytes that meet the filter criteria are copied to the target. Do not
+-- specify this parameter when you want to mirror the entire packet
+trafficMirrorSession_packetLength :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Int)
+trafficMirrorSession_packetLength = Lens.lens (\TrafficMirrorSession' {packetLength} -> packetLength) (\s@TrafficMirrorSession' {} a -> s {packetLength = a} :: TrafficMirrorSession)
+
+-- | The session number determines the order in which sessions are evaluated
+-- when an interface is used by multiple sessions. The first session with a
+-- matching filter is the one that mirrors the packets.
+--
+-- Valid values are 1-32766.
+trafficMirrorSession_sessionNumber :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Int)
+trafficMirrorSession_sessionNumber = Lens.lens (\TrafficMirrorSession' {sessionNumber} -> sessionNumber) (\s@TrafficMirrorSession' {} a -> s {sessionNumber = a} :: TrafficMirrorSession)
+
+-- | The tags assigned to the Traffic Mirror session.
+trafficMirrorSession_tags :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe [Tag])
+trafficMirrorSession_tags = Lens.lens (\TrafficMirrorSession' {tags} -> tags) (\s@TrafficMirrorSession' {} a -> s {tags = a} :: TrafficMirrorSession) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Traffic Mirror filter.
+trafficMirrorSession_trafficMirrorFilterId :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Text)
+trafficMirrorSession_trafficMirrorFilterId = Lens.lens (\TrafficMirrorSession' {trafficMirrorFilterId} -> trafficMirrorFilterId) (\s@TrafficMirrorSession' {} a -> s {trafficMirrorFilterId = a} :: TrafficMirrorSession)
+
+-- | The ID for the Traffic Mirror session.
+trafficMirrorSession_trafficMirrorSessionId :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Text)
+trafficMirrorSession_trafficMirrorSessionId = Lens.lens (\TrafficMirrorSession' {trafficMirrorSessionId} -> trafficMirrorSessionId) (\s@TrafficMirrorSession' {} a -> s {trafficMirrorSessionId = a} :: TrafficMirrorSession)
+
+-- | The ID of the Traffic Mirror target.
+trafficMirrorSession_trafficMirrorTargetId :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Text)
+trafficMirrorSession_trafficMirrorTargetId = Lens.lens (\TrafficMirrorSession' {trafficMirrorTargetId} -> trafficMirrorTargetId) (\s@TrafficMirrorSession' {} a -> s {trafficMirrorTargetId = a} :: TrafficMirrorSession)
+
+-- | The virtual network ID associated with the Traffic Mirror session.
+trafficMirrorSession_virtualNetworkId :: Lens.Lens' TrafficMirrorSession (Prelude.Maybe Prelude.Int)
+trafficMirrorSession_virtualNetworkId = Lens.lens (\TrafficMirrorSession' {virtualNetworkId} -> virtualNetworkId) (\s@TrafficMirrorSession' {} a -> s {virtualNetworkId = a} :: TrafficMirrorSession)
+
+instance Data.FromXML TrafficMirrorSession where
+  parseXML x =
+    TrafficMirrorSession'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "packetLength")
+      Prelude.<*> (x Data..@? "sessionNumber")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "trafficMirrorFilterId")
+      Prelude.<*> (x Data..@? "trafficMirrorSessionId")
+      Prelude.<*> (x Data..@? "trafficMirrorTargetId")
+      Prelude.<*> (x Data..@? "virtualNetworkId")
+
+instance Prelude.Hashable TrafficMirrorSession where
+  hashWithSalt _salt TrafficMirrorSession' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` packetLength
+      `Prelude.hashWithSalt` sessionNumber
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trafficMirrorFilterId
+      `Prelude.hashWithSalt` trafficMirrorSessionId
+      `Prelude.hashWithSalt` trafficMirrorTargetId
+      `Prelude.hashWithSalt` virtualNetworkId
+
+instance Prelude.NFData TrafficMirrorSession where
+  rnf TrafficMirrorSession' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf packetLength
+      `Prelude.seq` Prelude.rnf sessionNumber
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trafficMirrorFilterId
+      `Prelude.seq` Prelude.rnf trafficMirrorSessionId
+      `Prelude.seq` Prelude.rnf trafficMirrorTargetId
+      `Prelude.seq` Prelude.rnf virtualNetworkId
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorSessionField.hs b/gen/Amazonka/EC2/Types/TrafficMirrorSessionField.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorSessionField.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorSessionField
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorSessionField
+  ( TrafficMirrorSessionField
+      ( ..,
+        TrafficMirrorSessionField_Description,
+        TrafficMirrorSessionField_Packet_length,
+        TrafficMirrorSessionField_Virtual_network_id
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficMirrorSessionField = TrafficMirrorSessionField'
+  { fromTrafficMirrorSessionField ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficMirrorSessionField_Description :: TrafficMirrorSessionField
+pattern TrafficMirrorSessionField_Description = TrafficMirrorSessionField' "description"
+
+pattern TrafficMirrorSessionField_Packet_length :: TrafficMirrorSessionField
+pattern TrafficMirrorSessionField_Packet_length = TrafficMirrorSessionField' "packet-length"
+
+pattern TrafficMirrorSessionField_Virtual_network_id :: TrafficMirrorSessionField
+pattern TrafficMirrorSessionField_Virtual_network_id = TrafficMirrorSessionField' "virtual-network-id"
+
+{-# COMPLETE
+  TrafficMirrorSessionField_Description,
+  TrafficMirrorSessionField_Packet_length,
+  TrafficMirrorSessionField_Virtual_network_id,
+  TrafficMirrorSessionField'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorTarget.hs b/gen/Amazonka/EC2/Types/TrafficMirrorTarget.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorTarget.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorTarget
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorTarget where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TrafficMirrorTargetType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Traffic Mirror target.
+--
+-- /See:/ 'newTrafficMirrorTarget' smart constructor.
+data TrafficMirrorTarget = TrafficMirrorTarget'
+  { -- | Information about the Traffic Mirror target.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Gateway Load Balancer endpoint.
+    gatewayLoadBalancerEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The network interface ID that is attached to the target.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the Network Load Balancer.
+    networkLoadBalancerArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the account that owns the Traffic Mirror target.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the Traffic Mirror target.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Traffic Mirror target.
+    trafficMirrorTargetId :: Prelude.Maybe Prelude.Text,
+    -- | The type of Traffic Mirror target.
+    type' :: Prelude.Maybe TrafficMirrorTargetType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrafficMirrorTarget' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'trafficMirrorTarget_description' - Information about the Traffic Mirror target.
+--
+-- 'gatewayLoadBalancerEndpointId', 'trafficMirrorTarget_gatewayLoadBalancerEndpointId' - The ID of the Gateway Load Balancer endpoint.
+--
+-- 'networkInterfaceId', 'trafficMirrorTarget_networkInterfaceId' - The network interface ID that is attached to the target.
+--
+-- 'networkLoadBalancerArn', 'trafficMirrorTarget_networkLoadBalancerArn' - The Amazon Resource Name (ARN) of the Network Load Balancer.
+--
+-- 'ownerId', 'trafficMirrorTarget_ownerId' - The ID of the account that owns the Traffic Mirror target.
+--
+-- 'tags', 'trafficMirrorTarget_tags' - The tags assigned to the Traffic Mirror target.
+--
+-- 'trafficMirrorTargetId', 'trafficMirrorTarget_trafficMirrorTargetId' - The ID of the Traffic Mirror target.
+--
+-- 'type'', 'trafficMirrorTarget_type' - The type of Traffic Mirror target.
+newTrafficMirrorTarget ::
+  TrafficMirrorTarget
+newTrafficMirrorTarget =
+  TrafficMirrorTarget'
+    { description = Prelude.Nothing,
+      gatewayLoadBalancerEndpointId = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      networkLoadBalancerArn = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trafficMirrorTargetId = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | Information about the Traffic Mirror target.
+trafficMirrorTarget_description :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+trafficMirrorTarget_description = Lens.lens (\TrafficMirrorTarget' {description} -> description) (\s@TrafficMirrorTarget' {} a -> s {description = a} :: TrafficMirrorTarget)
+
+-- | The ID of the Gateway Load Balancer endpoint.
+trafficMirrorTarget_gatewayLoadBalancerEndpointId :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+trafficMirrorTarget_gatewayLoadBalancerEndpointId = Lens.lens (\TrafficMirrorTarget' {gatewayLoadBalancerEndpointId} -> gatewayLoadBalancerEndpointId) (\s@TrafficMirrorTarget' {} a -> s {gatewayLoadBalancerEndpointId = a} :: TrafficMirrorTarget)
+
+-- | The network interface ID that is attached to the target.
+trafficMirrorTarget_networkInterfaceId :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+trafficMirrorTarget_networkInterfaceId = Lens.lens (\TrafficMirrorTarget' {networkInterfaceId} -> networkInterfaceId) (\s@TrafficMirrorTarget' {} a -> s {networkInterfaceId = a} :: TrafficMirrorTarget)
+
+-- | The Amazon Resource Name (ARN) of the Network Load Balancer.
+trafficMirrorTarget_networkLoadBalancerArn :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+trafficMirrorTarget_networkLoadBalancerArn = Lens.lens (\TrafficMirrorTarget' {networkLoadBalancerArn} -> networkLoadBalancerArn) (\s@TrafficMirrorTarget' {} a -> s {networkLoadBalancerArn = a} :: TrafficMirrorTarget)
+
+-- | The ID of the account that owns the Traffic Mirror target.
+trafficMirrorTarget_ownerId :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+trafficMirrorTarget_ownerId = Lens.lens (\TrafficMirrorTarget' {ownerId} -> ownerId) (\s@TrafficMirrorTarget' {} a -> s {ownerId = a} :: TrafficMirrorTarget)
+
+-- | The tags assigned to the Traffic Mirror target.
+trafficMirrorTarget_tags :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe [Tag])
+trafficMirrorTarget_tags = Lens.lens (\TrafficMirrorTarget' {tags} -> tags) (\s@TrafficMirrorTarget' {} a -> s {tags = a} :: TrafficMirrorTarget) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Traffic Mirror target.
+trafficMirrorTarget_trafficMirrorTargetId :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe Prelude.Text)
+trafficMirrorTarget_trafficMirrorTargetId = Lens.lens (\TrafficMirrorTarget' {trafficMirrorTargetId} -> trafficMirrorTargetId) (\s@TrafficMirrorTarget' {} a -> s {trafficMirrorTargetId = a} :: TrafficMirrorTarget)
+
+-- | The type of Traffic Mirror target.
+trafficMirrorTarget_type :: Lens.Lens' TrafficMirrorTarget (Prelude.Maybe TrafficMirrorTargetType)
+trafficMirrorTarget_type = Lens.lens (\TrafficMirrorTarget' {type'} -> type') (\s@TrafficMirrorTarget' {} a -> s {type' = a} :: TrafficMirrorTarget)
+
+instance Data.FromXML TrafficMirrorTarget where
+  parseXML x =
+    TrafficMirrorTarget'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "gatewayLoadBalancerEndpointId")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "networkLoadBalancerArn")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "trafficMirrorTargetId")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable TrafficMirrorTarget where
+  hashWithSalt _salt TrafficMirrorTarget' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` gatewayLoadBalancerEndpointId
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` networkLoadBalancerArn
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trafficMirrorTargetId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData TrafficMirrorTarget where
+  rnf TrafficMirrorTarget' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf gatewayLoadBalancerEndpointId
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf networkLoadBalancerArn
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trafficMirrorTargetId
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/TrafficMirrorTargetType.hs b/gen/Amazonka/EC2/Types/TrafficMirrorTargetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficMirrorTargetType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficMirrorTargetType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficMirrorTargetType
+  ( TrafficMirrorTargetType
+      ( ..,
+        TrafficMirrorTargetType_Gateway_load_balancer_endpoint,
+        TrafficMirrorTargetType_Network_interface,
+        TrafficMirrorTargetType_Network_load_balancer
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficMirrorTargetType = TrafficMirrorTargetType'
+  { fromTrafficMirrorTargetType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficMirrorTargetType_Gateway_load_balancer_endpoint :: TrafficMirrorTargetType
+pattern TrafficMirrorTargetType_Gateway_load_balancer_endpoint = TrafficMirrorTargetType' "gateway-load-balancer-endpoint"
+
+pattern TrafficMirrorTargetType_Network_interface :: TrafficMirrorTargetType
+pattern TrafficMirrorTargetType_Network_interface = TrafficMirrorTargetType' "network-interface"
+
+pattern TrafficMirrorTargetType_Network_load_balancer :: TrafficMirrorTargetType
+pattern TrafficMirrorTargetType_Network_load_balancer = TrafficMirrorTargetType' "network-load-balancer"
+
+{-# COMPLETE
+  TrafficMirrorTargetType_Gateway_load_balancer_endpoint,
+  TrafficMirrorTargetType_Network_interface,
+  TrafficMirrorTargetType_Network_load_balancer,
+  TrafficMirrorTargetType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrafficType.hs b/gen/Amazonka/EC2/Types/TrafficType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrafficType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrafficType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrafficType
+  ( TrafficType
+      ( ..,
+        TrafficType_ACCEPT,
+        TrafficType_ALL,
+        TrafficType_REJECT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrafficType = TrafficType'
+  { fromTrafficType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrafficType_ACCEPT :: TrafficType
+pattern TrafficType_ACCEPT = TrafficType' "ACCEPT"
+
+pattern TrafficType_ALL :: TrafficType
+pattern TrafficType_ALL = TrafficType' "ALL"
+
+pattern TrafficType_REJECT :: TrafficType
+pattern TrafficType_REJECT = TrafficType' "REJECT"
+
+{-# COMPLETE
+  TrafficType_ACCEPT,
+  TrafficType_ALL,
+  TrafficType_REJECT,
+  TrafficType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGateway.hs b/gen/Amazonka/EC2/Types/TransitGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGateway.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayOptions
+import Amazonka.EC2.Types.TransitGatewayState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway.
+--
+-- /See:/ 'newTransitGateway' smart constructor.
+data TransitGateway = TransitGateway'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The description of the transit gateway.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The transit gateway options.
+    options :: Prelude.Maybe TransitGatewayOptions,
+    -- | The ID of the Amazon Web Services account that owns the transit gateway.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the transit gateway.
+    state :: Prelude.Maybe TransitGatewayState,
+    -- | The tags for the transit gateway.
+    tags :: Prelude.Maybe [Tag],
+    -- | The Amazon Resource Name (ARN) of the transit gateway.
+    transitGatewayArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'transitGateway_creationTime' - The creation time.
+--
+-- 'description', 'transitGateway_description' - The description of the transit gateway.
+--
+-- 'options', 'transitGateway_options' - The transit gateway options.
+--
+-- 'ownerId', 'transitGateway_ownerId' - The ID of the Amazon Web Services account that owns the transit gateway.
+--
+-- 'state', 'transitGateway_state' - The state of the transit gateway.
+--
+-- 'tags', 'transitGateway_tags' - The tags for the transit gateway.
+--
+-- 'transitGatewayArn', 'transitGateway_transitGatewayArn' - The Amazon Resource Name (ARN) of the transit gateway.
+--
+-- 'transitGatewayId', 'transitGateway_transitGatewayId' - The ID of the transit gateway.
+newTransitGateway ::
+  TransitGateway
+newTransitGateway =
+  TransitGateway'
+    { creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      options = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayArn = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing
+    }
+
+-- | The creation time.
+transitGateway_creationTime :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.UTCTime)
+transitGateway_creationTime = Lens.lens (\TransitGateway' {creationTime} -> creationTime) (\s@TransitGateway' {} a -> s {creationTime = a} :: TransitGateway) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the transit gateway.
+transitGateway_description :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
+transitGateway_description = Lens.lens (\TransitGateway' {description} -> description) (\s@TransitGateway' {} a -> s {description = a} :: TransitGateway)
+
+-- | The transit gateway options.
+transitGateway_options :: Lens.Lens' TransitGateway (Prelude.Maybe TransitGatewayOptions)
+transitGateway_options = Lens.lens (\TransitGateway' {options} -> options) (\s@TransitGateway' {} a -> s {options = a} :: TransitGateway)
+
+-- | The ID of the Amazon Web Services account that owns the transit gateway.
+transitGateway_ownerId :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
+transitGateway_ownerId = Lens.lens (\TransitGateway' {ownerId} -> ownerId) (\s@TransitGateway' {} a -> s {ownerId = a} :: TransitGateway)
+
+-- | The state of the transit gateway.
+transitGateway_state :: Lens.Lens' TransitGateway (Prelude.Maybe TransitGatewayState)
+transitGateway_state = Lens.lens (\TransitGateway' {state} -> state) (\s@TransitGateway' {} a -> s {state = a} :: TransitGateway)
+
+-- | The tags for the transit gateway.
+transitGateway_tags :: Lens.Lens' TransitGateway (Prelude.Maybe [Tag])
+transitGateway_tags = Lens.lens (\TransitGateway' {tags} -> tags) (\s@TransitGateway' {} a -> s {tags = a} :: TransitGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the transit gateway.
+transitGateway_transitGatewayArn :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
+transitGateway_transitGatewayArn = Lens.lens (\TransitGateway' {transitGatewayArn} -> transitGatewayArn) (\s@TransitGateway' {} a -> s {transitGatewayArn = a} :: TransitGateway)
+
+-- | The ID of the transit gateway.
+transitGateway_transitGatewayId :: Lens.Lens' TransitGateway (Prelude.Maybe Prelude.Text)
+transitGateway_transitGatewayId = Lens.lens (\TransitGateway' {transitGatewayId} -> transitGatewayId) (\s@TransitGateway' {} a -> s {transitGatewayId = a} :: TransitGateway)
+
+instance Data.FromXML TransitGateway where
+  parseXML x =
+    TransitGateway'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "options")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayArn")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+
+instance Prelude.Hashable TransitGateway where
+  hashWithSalt _salt TransitGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayArn
+      `Prelude.hashWithSalt` transitGatewayId
+
+instance Prelude.NFData TransitGateway where
+  rnf TransitGateway' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayArn
+      `Prelude.seq` Prelude.rnf transitGatewayId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAssociation.hs b/gen/Amazonka/EC2/Types/TransitGatewayAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAssociation.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAssociationState
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a resource attachment and a transit
+-- gateway route table.
+--
+-- /See:/ 'newTransitGatewayAssociation' smart constructor.
+data TransitGatewayAssociation = TransitGatewayAssociation'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The state of the association.
+    state :: Prelude.Maybe TransitGatewayAssociationState,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayAssociation_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'transitGatewayAssociation_resourceType' - The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'state', 'transitGatewayAssociation_state' - The state of the association.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayAssociation_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayAssociation_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newTransitGatewayAssociation ::
+  TransitGatewayAssociation
+newTransitGatewayAssociation =
+  TransitGatewayAssociation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing,
+      transitGatewayRouteTableId = Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayAssociation_resourceId :: Lens.Lens' TransitGatewayAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayAssociation_resourceId = Lens.lens (\TransitGatewayAssociation' {resourceId} -> resourceId) (\s@TransitGatewayAssociation' {} a -> s {resourceId = a} :: TransitGatewayAssociation)
+
+-- | The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayAssociation_resourceType :: Lens.Lens' TransitGatewayAssociation (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayAssociation_resourceType = Lens.lens (\TransitGatewayAssociation' {resourceType} -> resourceType) (\s@TransitGatewayAssociation' {} a -> s {resourceType = a} :: TransitGatewayAssociation)
+
+-- | The state of the association.
+transitGatewayAssociation_state :: Lens.Lens' TransitGatewayAssociation (Prelude.Maybe TransitGatewayAssociationState)
+transitGatewayAssociation_state = Lens.lens (\TransitGatewayAssociation' {state} -> state) (\s@TransitGatewayAssociation' {} a -> s {state = a} :: TransitGatewayAssociation)
+
+-- | The ID of the attachment.
+transitGatewayAssociation_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayAssociation_transitGatewayAttachmentId = Lens.lens (\TransitGatewayAssociation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayAssociation' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayAssociation)
+
+-- | The ID of the transit gateway route table.
+transitGatewayAssociation_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayAssociation_transitGatewayRouteTableId = Lens.lens (\TransitGatewayAssociation' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayAssociation' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayAssociation)
+
+instance Data.FromXML TransitGatewayAssociation where
+  parseXML x =
+    TransitGatewayAssociation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance Prelude.Hashable TransitGatewayAssociation where
+  hashWithSalt _salt TransitGatewayAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance Prelude.NFData TransitGatewayAssociation where
+  rnf TransitGatewayAssociation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAssociationState.hs b/gen/Amazonka/EC2/Types/TransitGatewayAssociationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAssociationState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAssociationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAssociationState
+  ( TransitGatewayAssociationState
+      ( ..,
+        TransitGatewayAssociationState_Associated,
+        TransitGatewayAssociationState_Associating,
+        TransitGatewayAssociationState_Disassociated,
+        TransitGatewayAssociationState_Disassociating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayAssociationState = TransitGatewayAssociationState'
+  { fromTransitGatewayAssociationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayAssociationState_Associated :: TransitGatewayAssociationState
+pattern TransitGatewayAssociationState_Associated = TransitGatewayAssociationState' "associated"
+
+pattern TransitGatewayAssociationState_Associating :: TransitGatewayAssociationState
+pattern TransitGatewayAssociationState_Associating = TransitGatewayAssociationState' "associating"
+
+pattern TransitGatewayAssociationState_Disassociated :: TransitGatewayAssociationState
+pattern TransitGatewayAssociationState_Disassociated = TransitGatewayAssociationState' "disassociated"
+
+pattern TransitGatewayAssociationState_Disassociating :: TransitGatewayAssociationState
+pattern TransitGatewayAssociationState_Disassociating = TransitGatewayAssociationState' "disassociating"
+
+{-# COMPLETE
+  TransitGatewayAssociationState_Associated,
+  TransitGatewayAssociationState_Associating,
+  TransitGatewayAssociationState_Disassociated,
+  TransitGatewayAssociationState_Disassociating,
+  TransitGatewayAssociationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAttachment.hs b/gen/Amazonka/EC2/Types/TransitGatewayAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAttachment.hs
@@ -0,0 +1,192 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayAttachmentAssociation
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import Amazonka.EC2.Types.TransitGatewayAttachmentState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an attachment between a resource and a transit gateway.
+--
+-- /See:/ 'newTransitGatewayAttachment' smart constructor.
+data TransitGatewayAttachment = TransitGatewayAttachment'
+  { -- | The association.
+    association :: Prelude.Maybe TransitGatewayAttachmentAssociation,
+    -- | The creation time.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the resource.
+    resourceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The attachment state. Note that the @initiating@ state has been
+    -- deprecated.
+    state :: Prelude.Maybe TransitGatewayAttachmentState,
+    -- | The tags for the attachment.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the transit gateway.
+    transitGatewayOwnerId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'association', 'transitGatewayAttachment_association' - The association.
+--
+-- 'creationTime', 'transitGatewayAttachment_creationTime' - The creation time.
+--
+-- 'resourceId', 'transitGatewayAttachment_resourceId' - The ID of the resource.
+--
+-- 'resourceOwnerId', 'transitGatewayAttachment_resourceOwnerId' - The ID of the Amazon Web Services account that owns the resource.
+--
+-- 'resourceType', 'transitGatewayAttachment_resourceType' - The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'state', 'transitGatewayAttachment_state' - The attachment state. Note that the @initiating@ state has been
+-- deprecated.
+--
+-- 'tags', 'transitGatewayAttachment_tags' - The tags for the attachment.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayId', 'transitGatewayAttachment_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'transitGatewayOwnerId', 'transitGatewayAttachment_transitGatewayOwnerId' - The ID of the Amazon Web Services account that owns the transit gateway.
+newTransitGatewayAttachment ::
+  TransitGatewayAttachment
+newTransitGatewayAttachment =
+  TransitGatewayAttachment'
+    { association =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceOwnerId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      transitGatewayOwnerId = Prelude.Nothing
+    }
+
+-- | The association.
+transitGatewayAttachment_association :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe TransitGatewayAttachmentAssociation)
+transitGatewayAttachment_association = Lens.lens (\TransitGatewayAttachment' {association} -> association) (\s@TransitGatewayAttachment' {} a -> s {association = a} :: TransitGatewayAttachment)
+
+-- | The creation time.
+transitGatewayAttachment_creationTime :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe Prelude.UTCTime)
+transitGatewayAttachment_creationTime = Lens.lens (\TransitGatewayAttachment' {creationTime} -> creationTime) (\s@TransitGatewayAttachment' {} a -> s {creationTime = a} :: TransitGatewayAttachment) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the resource.
+transitGatewayAttachment_resourceId :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayAttachment_resourceId = Lens.lens (\TransitGatewayAttachment' {resourceId} -> resourceId) (\s@TransitGatewayAttachment' {} a -> s {resourceId = a} :: TransitGatewayAttachment)
+
+-- | The ID of the Amazon Web Services account that owns the resource.
+transitGatewayAttachment_resourceOwnerId :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayAttachment_resourceOwnerId = Lens.lens (\TransitGatewayAttachment' {resourceOwnerId} -> resourceOwnerId) (\s@TransitGatewayAttachment' {} a -> s {resourceOwnerId = a} :: TransitGatewayAttachment)
+
+-- | The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayAttachment_resourceType :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayAttachment_resourceType = Lens.lens (\TransitGatewayAttachment' {resourceType} -> resourceType) (\s@TransitGatewayAttachment' {} a -> s {resourceType = a} :: TransitGatewayAttachment)
+
+-- | The attachment state. Note that the @initiating@ state has been
+-- deprecated.
+transitGatewayAttachment_state :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe TransitGatewayAttachmentState)
+transitGatewayAttachment_state = Lens.lens (\TransitGatewayAttachment' {state} -> state) (\s@TransitGatewayAttachment' {} a -> s {state = a} :: TransitGatewayAttachment)
+
+-- | The tags for the attachment.
+transitGatewayAttachment_tags :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe [Tag])
+transitGatewayAttachment_tags = Lens.lens (\TransitGatewayAttachment' {tags} -> tags) (\s@TransitGatewayAttachment' {} a -> s {tags = a} :: TransitGatewayAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the attachment.
+transitGatewayAttachment_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayAttachment_transitGatewayAttachmentId = Lens.lens (\TransitGatewayAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayAttachment' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayAttachment)
+
+-- | The ID of the transit gateway.
+transitGatewayAttachment_transitGatewayId :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayAttachment_transitGatewayId = Lens.lens (\TransitGatewayAttachment' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayAttachment' {} a -> s {transitGatewayId = a} :: TransitGatewayAttachment)
+
+-- | The ID of the Amazon Web Services account that owns the transit gateway.
+transitGatewayAttachment_transitGatewayOwnerId :: Lens.Lens' TransitGatewayAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayAttachment_transitGatewayOwnerId = Lens.lens (\TransitGatewayAttachment' {transitGatewayOwnerId} -> transitGatewayOwnerId) (\s@TransitGatewayAttachment' {} a -> s {transitGatewayOwnerId = a} :: TransitGatewayAttachment)
+
+instance Data.FromXML TransitGatewayAttachment where
+  parseXML x =
+    TransitGatewayAttachment'
+      Prelude.<$> (x Data..@? "association")
+      Prelude.<*> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceOwnerId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "transitGatewayOwnerId")
+
+instance Prelude.Hashable TransitGatewayAttachment where
+  hashWithSalt _salt TransitGatewayAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` association
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceOwnerId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` transitGatewayOwnerId
+
+instance Prelude.NFData TransitGatewayAttachment where
+  rnf TransitGatewayAttachment' {..} =
+    Prelude.rnf association
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwnerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf transitGatewayOwnerId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAttachmentAssociation.hs b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentAssociation.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAttachmentAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAttachmentAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAssociationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association.
+--
+-- /See:/ 'newTransitGatewayAttachmentAssociation' smart constructor.
+data TransitGatewayAttachmentAssociation = TransitGatewayAttachmentAssociation'
+  { -- | The state of the association.
+    state :: Prelude.Maybe TransitGatewayAssociationState,
+    -- | The ID of the route table for the transit gateway.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayAttachmentAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'transitGatewayAttachmentAssociation_state' - The state of the association.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayAttachmentAssociation_transitGatewayRouteTableId' - The ID of the route table for the transit gateway.
+newTransitGatewayAttachmentAssociation ::
+  TransitGatewayAttachmentAssociation
+newTransitGatewayAttachmentAssociation =
+  TransitGatewayAttachmentAssociation'
+    { state =
+        Prelude.Nothing,
+      transitGatewayRouteTableId =
+        Prelude.Nothing
+    }
+
+-- | The state of the association.
+transitGatewayAttachmentAssociation_state :: Lens.Lens' TransitGatewayAttachmentAssociation (Prelude.Maybe TransitGatewayAssociationState)
+transitGatewayAttachmentAssociation_state = Lens.lens (\TransitGatewayAttachmentAssociation' {state} -> state) (\s@TransitGatewayAttachmentAssociation' {} a -> s {state = a} :: TransitGatewayAttachmentAssociation)
+
+-- | The ID of the route table for the transit gateway.
+transitGatewayAttachmentAssociation_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayAttachmentAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayAttachmentAssociation_transitGatewayRouteTableId = Lens.lens (\TransitGatewayAttachmentAssociation' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayAttachmentAssociation' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayAttachmentAssociation)
+
+instance
+  Data.FromXML
+    TransitGatewayAttachmentAssociation
+  where
+  parseXML x =
+    TransitGatewayAttachmentAssociation'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayAttachmentAssociation
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayAttachmentAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    TransitGatewayAttachmentAssociation
+  where
+  rnf TransitGatewayAttachmentAssociation' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAttachmentBgpConfiguration.hs b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentBgpConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentBgpConfiguration.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAttachmentBgpConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAttachmentBgpConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.BgpStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | The BGP configuration information.
+--
+-- /See:/ 'newTransitGatewayAttachmentBgpConfiguration' smart constructor.
+data TransitGatewayAttachmentBgpConfiguration = TransitGatewayAttachmentBgpConfiguration'
+  { -- | The BGP status.
+    bgpStatus :: Prelude.Maybe BgpStatus,
+    -- | The interior BGP peer IP address for the appliance.
+    peerAddress :: Prelude.Maybe Prelude.Text,
+    -- | The peer Autonomous System Number (ASN).
+    peerAsn :: Prelude.Maybe Prelude.Integer,
+    -- | The interior BGP peer IP address for the transit gateway.
+    transitGatewayAddress :: Prelude.Maybe Prelude.Text,
+    -- | The transit gateway Autonomous System Number (ASN).
+    transitGatewayAsn :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayAttachmentBgpConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bgpStatus', 'transitGatewayAttachmentBgpConfiguration_bgpStatus' - The BGP status.
+--
+-- 'peerAddress', 'transitGatewayAttachmentBgpConfiguration_peerAddress' - The interior BGP peer IP address for the appliance.
+--
+-- 'peerAsn', 'transitGatewayAttachmentBgpConfiguration_peerAsn' - The peer Autonomous System Number (ASN).
+--
+-- 'transitGatewayAddress', 'transitGatewayAttachmentBgpConfiguration_transitGatewayAddress' - The interior BGP peer IP address for the transit gateway.
+--
+-- 'transitGatewayAsn', 'transitGatewayAttachmentBgpConfiguration_transitGatewayAsn' - The transit gateway Autonomous System Number (ASN).
+newTransitGatewayAttachmentBgpConfiguration ::
+  TransitGatewayAttachmentBgpConfiguration
+newTransitGatewayAttachmentBgpConfiguration =
+  TransitGatewayAttachmentBgpConfiguration'
+    { bgpStatus =
+        Prelude.Nothing,
+      peerAddress = Prelude.Nothing,
+      peerAsn = Prelude.Nothing,
+      transitGatewayAddress =
+        Prelude.Nothing,
+      transitGatewayAsn =
+        Prelude.Nothing
+    }
+
+-- | The BGP status.
+transitGatewayAttachmentBgpConfiguration_bgpStatus :: Lens.Lens' TransitGatewayAttachmentBgpConfiguration (Prelude.Maybe BgpStatus)
+transitGatewayAttachmentBgpConfiguration_bgpStatus = Lens.lens (\TransitGatewayAttachmentBgpConfiguration' {bgpStatus} -> bgpStatus) (\s@TransitGatewayAttachmentBgpConfiguration' {} a -> s {bgpStatus = a} :: TransitGatewayAttachmentBgpConfiguration)
+
+-- | The interior BGP peer IP address for the appliance.
+transitGatewayAttachmentBgpConfiguration_peerAddress :: Lens.Lens' TransitGatewayAttachmentBgpConfiguration (Prelude.Maybe Prelude.Text)
+transitGatewayAttachmentBgpConfiguration_peerAddress = Lens.lens (\TransitGatewayAttachmentBgpConfiguration' {peerAddress} -> peerAddress) (\s@TransitGatewayAttachmentBgpConfiguration' {} a -> s {peerAddress = a} :: TransitGatewayAttachmentBgpConfiguration)
+
+-- | The peer Autonomous System Number (ASN).
+transitGatewayAttachmentBgpConfiguration_peerAsn :: Lens.Lens' TransitGatewayAttachmentBgpConfiguration (Prelude.Maybe Prelude.Integer)
+transitGatewayAttachmentBgpConfiguration_peerAsn = Lens.lens (\TransitGatewayAttachmentBgpConfiguration' {peerAsn} -> peerAsn) (\s@TransitGatewayAttachmentBgpConfiguration' {} a -> s {peerAsn = a} :: TransitGatewayAttachmentBgpConfiguration)
+
+-- | The interior BGP peer IP address for the transit gateway.
+transitGatewayAttachmentBgpConfiguration_transitGatewayAddress :: Lens.Lens' TransitGatewayAttachmentBgpConfiguration (Prelude.Maybe Prelude.Text)
+transitGatewayAttachmentBgpConfiguration_transitGatewayAddress = Lens.lens (\TransitGatewayAttachmentBgpConfiguration' {transitGatewayAddress} -> transitGatewayAddress) (\s@TransitGatewayAttachmentBgpConfiguration' {} a -> s {transitGatewayAddress = a} :: TransitGatewayAttachmentBgpConfiguration)
+
+-- | The transit gateway Autonomous System Number (ASN).
+transitGatewayAttachmentBgpConfiguration_transitGatewayAsn :: Lens.Lens' TransitGatewayAttachmentBgpConfiguration (Prelude.Maybe Prelude.Integer)
+transitGatewayAttachmentBgpConfiguration_transitGatewayAsn = Lens.lens (\TransitGatewayAttachmentBgpConfiguration' {transitGatewayAsn} -> transitGatewayAsn) (\s@TransitGatewayAttachmentBgpConfiguration' {} a -> s {transitGatewayAsn = a} :: TransitGatewayAttachmentBgpConfiguration)
+
+instance
+  Data.FromXML
+    TransitGatewayAttachmentBgpConfiguration
+  where
+  parseXML x =
+    TransitGatewayAttachmentBgpConfiguration'
+      Prelude.<$> (x Data..@? "bgpStatus")
+      Prelude.<*> (x Data..@? "peerAddress")
+      Prelude.<*> (x Data..@? "peerAsn")
+      Prelude.<*> (x Data..@? "transitGatewayAddress")
+      Prelude.<*> (x Data..@? "transitGatewayAsn")
+
+instance
+  Prelude.Hashable
+    TransitGatewayAttachmentBgpConfiguration
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayAttachmentBgpConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` bgpStatus
+        `Prelude.hashWithSalt` peerAddress
+        `Prelude.hashWithSalt` peerAsn
+        `Prelude.hashWithSalt` transitGatewayAddress
+        `Prelude.hashWithSalt` transitGatewayAsn
+
+instance
+  Prelude.NFData
+    TransitGatewayAttachmentBgpConfiguration
+  where
+  rnf TransitGatewayAttachmentBgpConfiguration' {..} =
+    Prelude.rnf bgpStatus
+      `Prelude.seq` Prelude.rnf peerAddress
+      `Prelude.seq` Prelude.rnf peerAsn
+      `Prelude.seq` Prelude.rnf transitGatewayAddress
+      `Prelude.seq` Prelude.rnf transitGatewayAsn
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAttachmentPropagation.hs b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentPropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentPropagation.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAttachmentPropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAttachmentPropagation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayPropagationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a propagation route table.
+--
+-- /See:/ 'newTransitGatewayAttachmentPropagation' smart constructor.
+data TransitGatewayAttachmentPropagation = TransitGatewayAttachmentPropagation'
+  { -- | The state of the propagation route table.
+    state :: Prelude.Maybe TransitGatewayPropagationState,
+    -- | The ID of the propagation route table.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayAttachmentPropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'transitGatewayAttachmentPropagation_state' - The state of the propagation route table.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayAttachmentPropagation_transitGatewayRouteTableId' - The ID of the propagation route table.
+newTransitGatewayAttachmentPropagation ::
+  TransitGatewayAttachmentPropagation
+newTransitGatewayAttachmentPropagation =
+  TransitGatewayAttachmentPropagation'
+    { state =
+        Prelude.Nothing,
+      transitGatewayRouteTableId =
+        Prelude.Nothing
+    }
+
+-- | The state of the propagation route table.
+transitGatewayAttachmentPropagation_state :: Lens.Lens' TransitGatewayAttachmentPropagation (Prelude.Maybe TransitGatewayPropagationState)
+transitGatewayAttachmentPropagation_state = Lens.lens (\TransitGatewayAttachmentPropagation' {state} -> state) (\s@TransitGatewayAttachmentPropagation' {} a -> s {state = a} :: TransitGatewayAttachmentPropagation)
+
+-- | The ID of the propagation route table.
+transitGatewayAttachmentPropagation_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayAttachmentPropagation (Prelude.Maybe Prelude.Text)
+transitGatewayAttachmentPropagation_transitGatewayRouteTableId = Lens.lens (\TransitGatewayAttachmentPropagation' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayAttachmentPropagation' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayAttachmentPropagation)
+
+instance
+  Data.FromXML
+    TransitGatewayAttachmentPropagation
+  where
+  parseXML x =
+    TransitGatewayAttachmentPropagation'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayAttachmentPropagation
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayAttachmentPropagation' {..} =
+      _salt
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    TransitGatewayAttachmentPropagation
+  where
+  rnf TransitGatewayAttachmentPropagation' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAttachmentResourceType.hs b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentResourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentResourceType.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+  ( TransitGatewayAttachmentResourceType
+      ( ..,
+        TransitGatewayAttachmentResourceType_Connect,
+        TransitGatewayAttachmentResourceType_Direct_connect_gateway,
+        TransitGatewayAttachmentResourceType_Peering,
+        TransitGatewayAttachmentResourceType_Tgw_peering,
+        TransitGatewayAttachmentResourceType_Vpc,
+        TransitGatewayAttachmentResourceType_Vpn
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayAttachmentResourceType = TransitGatewayAttachmentResourceType'
+  { fromTransitGatewayAttachmentResourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayAttachmentResourceType_Connect :: TransitGatewayAttachmentResourceType
+pattern TransitGatewayAttachmentResourceType_Connect = TransitGatewayAttachmentResourceType' "connect"
+
+pattern TransitGatewayAttachmentResourceType_Direct_connect_gateway :: TransitGatewayAttachmentResourceType
+pattern TransitGatewayAttachmentResourceType_Direct_connect_gateway = TransitGatewayAttachmentResourceType' "direct-connect-gateway"
+
+pattern TransitGatewayAttachmentResourceType_Peering :: TransitGatewayAttachmentResourceType
+pattern TransitGatewayAttachmentResourceType_Peering = TransitGatewayAttachmentResourceType' "peering"
+
+pattern TransitGatewayAttachmentResourceType_Tgw_peering :: TransitGatewayAttachmentResourceType
+pattern TransitGatewayAttachmentResourceType_Tgw_peering = TransitGatewayAttachmentResourceType' "tgw-peering"
+
+pattern TransitGatewayAttachmentResourceType_Vpc :: TransitGatewayAttachmentResourceType
+pattern TransitGatewayAttachmentResourceType_Vpc = TransitGatewayAttachmentResourceType' "vpc"
+
+pattern TransitGatewayAttachmentResourceType_Vpn :: TransitGatewayAttachmentResourceType
+pattern TransitGatewayAttachmentResourceType_Vpn = TransitGatewayAttachmentResourceType' "vpn"
+
+{-# COMPLETE
+  TransitGatewayAttachmentResourceType_Connect,
+  TransitGatewayAttachmentResourceType_Direct_connect_gateway,
+  TransitGatewayAttachmentResourceType_Peering,
+  TransitGatewayAttachmentResourceType_Tgw_peering,
+  TransitGatewayAttachmentResourceType_Vpc,
+  TransitGatewayAttachmentResourceType_Vpn,
+  TransitGatewayAttachmentResourceType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayAttachmentState.hs b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayAttachmentState.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayAttachmentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayAttachmentState
+  ( TransitGatewayAttachmentState
+      ( ..,
+        TransitGatewayAttachmentState_Available,
+        TransitGatewayAttachmentState_Deleted,
+        TransitGatewayAttachmentState_Deleting,
+        TransitGatewayAttachmentState_Failed,
+        TransitGatewayAttachmentState_Failing,
+        TransitGatewayAttachmentState_Initiating,
+        TransitGatewayAttachmentState_InitiatingRequest,
+        TransitGatewayAttachmentState_Modifying,
+        TransitGatewayAttachmentState_Pending,
+        TransitGatewayAttachmentState_PendingAcceptance,
+        TransitGatewayAttachmentState_Rejected,
+        TransitGatewayAttachmentState_Rejecting,
+        TransitGatewayAttachmentState_RollingBack
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayAttachmentState = TransitGatewayAttachmentState'
+  { fromTransitGatewayAttachmentState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayAttachmentState_Available :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Available = TransitGatewayAttachmentState' "available"
+
+pattern TransitGatewayAttachmentState_Deleted :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Deleted = TransitGatewayAttachmentState' "deleted"
+
+pattern TransitGatewayAttachmentState_Deleting :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Deleting = TransitGatewayAttachmentState' "deleting"
+
+pattern TransitGatewayAttachmentState_Failed :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Failed = TransitGatewayAttachmentState' "failed"
+
+pattern TransitGatewayAttachmentState_Failing :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Failing = TransitGatewayAttachmentState' "failing"
+
+pattern TransitGatewayAttachmentState_Initiating :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Initiating = TransitGatewayAttachmentState' "initiating"
+
+pattern TransitGatewayAttachmentState_InitiatingRequest :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_InitiatingRequest = TransitGatewayAttachmentState' "initiatingRequest"
+
+pattern TransitGatewayAttachmentState_Modifying :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Modifying = TransitGatewayAttachmentState' "modifying"
+
+pattern TransitGatewayAttachmentState_Pending :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Pending = TransitGatewayAttachmentState' "pending"
+
+pattern TransitGatewayAttachmentState_PendingAcceptance :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_PendingAcceptance = TransitGatewayAttachmentState' "pendingAcceptance"
+
+pattern TransitGatewayAttachmentState_Rejected :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Rejected = TransitGatewayAttachmentState' "rejected"
+
+pattern TransitGatewayAttachmentState_Rejecting :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_Rejecting = TransitGatewayAttachmentState' "rejecting"
+
+pattern TransitGatewayAttachmentState_RollingBack :: TransitGatewayAttachmentState
+pattern TransitGatewayAttachmentState_RollingBack = TransitGatewayAttachmentState' "rollingBack"
+
+{-# COMPLETE
+  TransitGatewayAttachmentState_Available,
+  TransitGatewayAttachmentState_Deleted,
+  TransitGatewayAttachmentState_Deleting,
+  TransitGatewayAttachmentState_Failed,
+  TransitGatewayAttachmentState_Failing,
+  TransitGatewayAttachmentState_Initiating,
+  TransitGatewayAttachmentState_InitiatingRequest,
+  TransitGatewayAttachmentState_Modifying,
+  TransitGatewayAttachmentState_Pending,
+  TransitGatewayAttachmentState_PendingAcceptance,
+  TransitGatewayAttachmentState_Rejected,
+  TransitGatewayAttachmentState_Rejecting,
+  TransitGatewayAttachmentState_RollingBack,
+  TransitGatewayAttachmentState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayConnect.hs b/gen/Amazonka/EC2/Types/TransitGatewayConnect.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayConnect.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayConnect
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayConnect where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayAttachmentState
+import Amazonka.EC2.Types.TransitGatewayConnectOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway Connect attachment.
+--
+-- /See:/ 'newTransitGatewayConnect' smart constructor.
+data TransitGatewayConnect = TransitGatewayConnect'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The Connect attachment options.
+    options :: Prelude.Maybe TransitGatewayConnectOptions,
+    -- | The state of the attachment.
+    state :: Prelude.Maybe TransitGatewayAttachmentState,
+    -- | The tags for the attachment.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Connect attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the attachment from which the Connect attachment was created.
+    transportTransitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayConnect' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'transitGatewayConnect_creationTime' - The creation time.
+--
+-- 'options', 'transitGatewayConnect_options' - The Connect attachment options.
+--
+-- 'state', 'transitGatewayConnect_state' - The state of the attachment.
+--
+-- 'tags', 'transitGatewayConnect_tags' - The tags for the attachment.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayConnect_transitGatewayAttachmentId' - The ID of the Connect attachment.
+--
+-- 'transitGatewayId', 'transitGatewayConnect_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'transportTransitGatewayAttachmentId', 'transitGatewayConnect_transportTransitGatewayAttachmentId' - The ID of the attachment from which the Connect attachment was created.
+newTransitGatewayConnect ::
+  TransitGatewayConnect
+newTransitGatewayConnect =
+  TransitGatewayConnect'
+    { creationTime =
+        Prelude.Nothing,
+      options = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      transportTransitGatewayAttachmentId =
+        Prelude.Nothing
+    }
+
+-- | The creation time.
+transitGatewayConnect_creationTime :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.UTCTime)
+transitGatewayConnect_creationTime = Lens.lens (\TransitGatewayConnect' {creationTime} -> creationTime) (\s@TransitGatewayConnect' {} a -> s {creationTime = a} :: TransitGatewayConnect) Prelude.. Lens.mapping Data._Time
+
+-- | The Connect attachment options.
+transitGatewayConnect_options :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe TransitGatewayConnectOptions)
+transitGatewayConnect_options = Lens.lens (\TransitGatewayConnect' {options} -> options) (\s@TransitGatewayConnect' {} a -> s {options = a} :: TransitGatewayConnect)
+
+-- | The state of the attachment.
+transitGatewayConnect_state :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe TransitGatewayAttachmentState)
+transitGatewayConnect_state = Lens.lens (\TransitGatewayConnect' {state} -> state) (\s@TransitGatewayConnect' {} a -> s {state = a} :: TransitGatewayConnect)
+
+-- | The tags for the attachment.
+transitGatewayConnect_tags :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe [Tag])
+transitGatewayConnect_tags = Lens.lens (\TransitGatewayConnect' {tags} -> tags) (\s@TransitGatewayConnect' {} a -> s {tags = a} :: TransitGatewayConnect) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Connect attachment.
+transitGatewayConnect_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.Text)
+transitGatewayConnect_transitGatewayAttachmentId = Lens.lens (\TransitGatewayConnect' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayConnect' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayConnect)
+
+-- | The ID of the transit gateway.
+transitGatewayConnect_transitGatewayId :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.Text)
+transitGatewayConnect_transitGatewayId = Lens.lens (\TransitGatewayConnect' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayConnect' {} a -> s {transitGatewayId = a} :: TransitGatewayConnect)
+
+-- | The ID of the attachment from which the Connect attachment was created.
+transitGatewayConnect_transportTransitGatewayAttachmentId :: Lens.Lens' TransitGatewayConnect (Prelude.Maybe Prelude.Text)
+transitGatewayConnect_transportTransitGatewayAttachmentId = Lens.lens (\TransitGatewayConnect' {transportTransitGatewayAttachmentId} -> transportTransitGatewayAttachmentId) (\s@TransitGatewayConnect' {} a -> s {transportTransitGatewayAttachmentId = a} :: TransitGatewayConnect)
+
+instance Data.FromXML TransitGatewayConnect where
+  parseXML x =
+    TransitGatewayConnect'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "options")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "transportTransitGatewayAttachmentId")
+
+instance Prelude.Hashable TransitGatewayConnect where
+  hashWithSalt _salt TransitGatewayConnect' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` transportTransitGatewayAttachmentId
+
+instance Prelude.NFData TransitGatewayConnect where
+  rnf TransitGatewayConnect' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf transportTransitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayConnectOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayConnectOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayConnectOptions.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayConnectOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayConnectOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ProtocolValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Connect attachment options.
+--
+-- /See:/ 'newTransitGatewayConnectOptions' smart constructor.
+data TransitGatewayConnectOptions = TransitGatewayConnectOptions'
+  { -- | The tunnel protocol.
+    protocol :: Prelude.Maybe ProtocolValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayConnectOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'protocol', 'transitGatewayConnectOptions_protocol' - The tunnel protocol.
+newTransitGatewayConnectOptions ::
+  TransitGatewayConnectOptions
+newTransitGatewayConnectOptions =
+  TransitGatewayConnectOptions'
+    { protocol =
+        Prelude.Nothing
+    }
+
+-- | The tunnel protocol.
+transitGatewayConnectOptions_protocol :: Lens.Lens' TransitGatewayConnectOptions (Prelude.Maybe ProtocolValue)
+transitGatewayConnectOptions_protocol = Lens.lens (\TransitGatewayConnectOptions' {protocol} -> protocol) (\s@TransitGatewayConnectOptions' {} a -> s {protocol = a} :: TransitGatewayConnectOptions)
+
+instance Data.FromXML TransitGatewayConnectOptions where
+  parseXML x =
+    TransitGatewayConnectOptions'
+      Prelude.<$> (x Data..@? "protocol")
+
+instance
+  Prelude.Hashable
+    TransitGatewayConnectOptions
+  where
+  hashWithSalt _salt TransitGatewayConnectOptions' {..} =
+    _salt `Prelude.hashWithSalt` protocol
+
+instance Prelude.NFData TransitGatewayConnectOptions where
+  rnf TransitGatewayConnectOptions' {..} =
+    Prelude.rnf protocol
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayConnectPeer.hs b/gen/Amazonka/EC2/Types/TransitGatewayConnectPeer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayConnectPeer.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayConnectPeer
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayConnectPeer where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayConnectPeerConfiguration
+import Amazonka.EC2.Types.TransitGatewayConnectPeerState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway Connect peer.
+--
+-- /See:/ 'newTransitGatewayConnectPeer' smart constructor.
+data TransitGatewayConnectPeer = TransitGatewayConnectPeer'
+  { -- | The Connect peer details.
+    connectPeerConfiguration :: Prelude.Maybe TransitGatewayConnectPeerConfiguration,
+    -- | The creation time.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the Connect peer.
+    state :: Prelude.Maybe TransitGatewayConnectPeerState,
+    -- | The tags for the Connect peer.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Connect attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Connect peer.
+    transitGatewayConnectPeerId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayConnectPeer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectPeerConfiguration', 'transitGatewayConnectPeer_connectPeerConfiguration' - The Connect peer details.
+--
+-- 'creationTime', 'transitGatewayConnectPeer_creationTime' - The creation time.
+--
+-- 'state', 'transitGatewayConnectPeer_state' - The state of the Connect peer.
+--
+-- 'tags', 'transitGatewayConnectPeer_tags' - The tags for the Connect peer.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayConnectPeer_transitGatewayAttachmentId' - The ID of the Connect attachment.
+--
+-- 'transitGatewayConnectPeerId', 'transitGatewayConnectPeer_transitGatewayConnectPeerId' - The ID of the Connect peer.
+newTransitGatewayConnectPeer ::
+  TransitGatewayConnectPeer
+newTransitGatewayConnectPeer =
+  TransitGatewayConnectPeer'
+    { connectPeerConfiguration =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing,
+      transitGatewayConnectPeerId = Prelude.Nothing
+    }
+
+-- | The Connect peer details.
+transitGatewayConnectPeer_connectPeerConfiguration :: Lens.Lens' TransitGatewayConnectPeer (Prelude.Maybe TransitGatewayConnectPeerConfiguration)
+transitGatewayConnectPeer_connectPeerConfiguration = Lens.lens (\TransitGatewayConnectPeer' {connectPeerConfiguration} -> connectPeerConfiguration) (\s@TransitGatewayConnectPeer' {} a -> s {connectPeerConfiguration = a} :: TransitGatewayConnectPeer)
+
+-- | The creation time.
+transitGatewayConnectPeer_creationTime :: Lens.Lens' TransitGatewayConnectPeer (Prelude.Maybe Prelude.UTCTime)
+transitGatewayConnectPeer_creationTime = Lens.lens (\TransitGatewayConnectPeer' {creationTime} -> creationTime) (\s@TransitGatewayConnectPeer' {} a -> s {creationTime = a} :: TransitGatewayConnectPeer) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the Connect peer.
+transitGatewayConnectPeer_state :: Lens.Lens' TransitGatewayConnectPeer (Prelude.Maybe TransitGatewayConnectPeerState)
+transitGatewayConnectPeer_state = Lens.lens (\TransitGatewayConnectPeer' {state} -> state) (\s@TransitGatewayConnectPeer' {} a -> s {state = a} :: TransitGatewayConnectPeer)
+
+-- | The tags for the Connect peer.
+transitGatewayConnectPeer_tags :: Lens.Lens' TransitGatewayConnectPeer (Prelude.Maybe [Tag])
+transitGatewayConnectPeer_tags = Lens.lens (\TransitGatewayConnectPeer' {tags} -> tags) (\s@TransitGatewayConnectPeer' {} a -> s {tags = a} :: TransitGatewayConnectPeer) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Connect attachment.
+transitGatewayConnectPeer_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayConnectPeer (Prelude.Maybe Prelude.Text)
+transitGatewayConnectPeer_transitGatewayAttachmentId = Lens.lens (\TransitGatewayConnectPeer' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayConnectPeer' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayConnectPeer)
+
+-- | The ID of the Connect peer.
+transitGatewayConnectPeer_transitGatewayConnectPeerId :: Lens.Lens' TransitGatewayConnectPeer (Prelude.Maybe Prelude.Text)
+transitGatewayConnectPeer_transitGatewayConnectPeerId = Lens.lens (\TransitGatewayConnectPeer' {transitGatewayConnectPeerId} -> transitGatewayConnectPeerId) (\s@TransitGatewayConnectPeer' {} a -> s {transitGatewayConnectPeerId = a} :: TransitGatewayConnectPeer)
+
+instance Data.FromXML TransitGatewayConnectPeer where
+  parseXML x =
+    TransitGatewayConnectPeer'
+      Prelude.<$> (x Data..@? "connectPeerConfiguration")
+      Prelude.<*> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayConnectPeerId")
+
+instance Prelude.Hashable TransitGatewayConnectPeer where
+  hashWithSalt _salt TransitGatewayConnectPeer' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectPeerConfiguration
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` transitGatewayConnectPeerId
+
+instance Prelude.NFData TransitGatewayConnectPeer where
+  rnf TransitGatewayConnectPeer' {..} =
+    Prelude.rnf connectPeerConfiguration
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayConnectPeerId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayConnectPeerConfiguration.hs b/gen/Amazonka/EC2/Types/TransitGatewayConnectPeerConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayConnectPeerConfiguration.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayConnectPeerConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayConnectPeerConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ProtocolValue
+import Amazonka.EC2.Types.TransitGatewayAttachmentBgpConfiguration
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Connect peer details.
+--
+-- /See:/ 'newTransitGatewayConnectPeerConfiguration' smart constructor.
+data TransitGatewayConnectPeerConfiguration = TransitGatewayConnectPeerConfiguration'
+  { -- | The BGP configuration details.
+    bgpConfigurations :: Prelude.Maybe [TransitGatewayAttachmentBgpConfiguration],
+    -- | The range of interior BGP peer IP addresses.
+    insideCidrBlocks :: Prelude.Maybe [Prelude.Text],
+    -- | The Connect peer IP address on the appliance side of the tunnel.
+    peerAddress :: Prelude.Maybe Prelude.Text,
+    -- | The tunnel protocol.
+    protocol :: Prelude.Maybe ProtocolValue,
+    -- | The Connect peer IP address on the transit gateway side of the tunnel.
+    transitGatewayAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayConnectPeerConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bgpConfigurations', 'transitGatewayConnectPeerConfiguration_bgpConfigurations' - The BGP configuration details.
+--
+-- 'insideCidrBlocks', 'transitGatewayConnectPeerConfiguration_insideCidrBlocks' - The range of interior BGP peer IP addresses.
+--
+-- 'peerAddress', 'transitGatewayConnectPeerConfiguration_peerAddress' - The Connect peer IP address on the appliance side of the tunnel.
+--
+-- 'protocol', 'transitGatewayConnectPeerConfiguration_protocol' - The tunnel protocol.
+--
+-- 'transitGatewayAddress', 'transitGatewayConnectPeerConfiguration_transitGatewayAddress' - The Connect peer IP address on the transit gateway side of the tunnel.
+newTransitGatewayConnectPeerConfiguration ::
+  TransitGatewayConnectPeerConfiguration
+newTransitGatewayConnectPeerConfiguration =
+  TransitGatewayConnectPeerConfiguration'
+    { bgpConfigurations =
+        Prelude.Nothing,
+      insideCidrBlocks = Prelude.Nothing,
+      peerAddress = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      transitGatewayAddress =
+        Prelude.Nothing
+    }
+
+-- | The BGP configuration details.
+transitGatewayConnectPeerConfiguration_bgpConfigurations :: Lens.Lens' TransitGatewayConnectPeerConfiguration (Prelude.Maybe [TransitGatewayAttachmentBgpConfiguration])
+transitGatewayConnectPeerConfiguration_bgpConfigurations = Lens.lens (\TransitGatewayConnectPeerConfiguration' {bgpConfigurations} -> bgpConfigurations) (\s@TransitGatewayConnectPeerConfiguration' {} a -> s {bgpConfigurations = a} :: TransitGatewayConnectPeerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The range of interior BGP peer IP addresses.
+transitGatewayConnectPeerConfiguration_insideCidrBlocks :: Lens.Lens' TransitGatewayConnectPeerConfiguration (Prelude.Maybe [Prelude.Text])
+transitGatewayConnectPeerConfiguration_insideCidrBlocks = Lens.lens (\TransitGatewayConnectPeerConfiguration' {insideCidrBlocks} -> insideCidrBlocks) (\s@TransitGatewayConnectPeerConfiguration' {} a -> s {insideCidrBlocks = a} :: TransitGatewayConnectPeerConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Connect peer IP address on the appliance side of the tunnel.
+transitGatewayConnectPeerConfiguration_peerAddress :: Lens.Lens' TransitGatewayConnectPeerConfiguration (Prelude.Maybe Prelude.Text)
+transitGatewayConnectPeerConfiguration_peerAddress = Lens.lens (\TransitGatewayConnectPeerConfiguration' {peerAddress} -> peerAddress) (\s@TransitGatewayConnectPeerConfiguration' {} a -> s {peerAddress = a} :: TransitGatewayConnectPeerConfiguration)
+
+-- | The tunnel protocol.
+transitGatewayConnectPeerConfiguration_protocol :: Lens.Lens' TransitGatewayConnectPeerConfiguration (Prelude.Maybe ProtocolValue)
+transitGatewayConnectPeerConfiguration_protocol = Lens.lens (\TransitGatewayConnectPeerConfiguration' {protocol} -> protocol) (\s@TransitGatewayConnectPeerConfiguration' {} a -> s {protocol = a} :: TransitGatewayConnectPeerConfiguration)
+
+-- | The Connect peer IP address on the transit gateway side of the tunnel.
+transitGatewayConnectPeerConfiguration_transitGatewayAddress :: Lens.Lens' TransitGatewayConnectPeerConfiguration (Prelude.Maybe Prelude.Text)
+transitGatewayConnectPeerConfiguration_transitGatewayAddress = Lens.lens (\TransitGatewayConnectPeerConfiguration' {transitGatewayAddress} -> transitGatewayAddress) (\s@TransitGatewayConnectPeerConfiguration' {} a -> s {transitGatewayAddress = a} :: TransitGatewayConnectPeerConfiguration)
+
+instance
+  Data.FromXML
+    TransitGatewayConnectPeerConfiguration
+  where
+  parseXML x =
+    TransitGatewayConnectPeerConfiguration'
+      Prelude.<$> ( x
+                      Data..@? "bgpConfigurations"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "insideCidrBlocks"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "peerAddress")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "transitGatewayAddress")
+
+instance
+  Prelude.Hashable
+    TransitGatewayConnectPeerConfiguration
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayConnectPeerConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` bgpConfigurations
+        `Prelude.hashWithSalt` insideCidrBlocks
+        `Prelude.hashWithSalt` peerAddress
+        `Prelude.hashWithSalt` protocol
+        `Prelude.hashWithSalt` transitGatewayAddress
+
+instance
+  Prelude.NFData
+    TransitGatewayConnectPeerConfiguration
+  where
+  rnf TransitGatewayConnectPeerConfiguration' {..} =
+    Prelude.rnf bgpConfigurations
+      `Prelude.seq` Prelude.rnf insideCidrBlocks
+      `Prelude.seq` Prelude.rnf peerAddress
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf transitGatewayAddress
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayConnectPeerState.hs b/gen/Amazonka/EC2/Types/TransitGatewayConnectPeerState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayConnectPeerState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayConnectPeerState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayConnectPeerState
+  ( TransitGatewayConnectPeerState
+      ( ..,
+        TransitGatewayConnectPeerState_Available,
+        TransitGatewayConnectPeerState_Deleted,
+        TransitGatewayConnectPeerState_Deleting,
+        TransitGatewayConnectPeerState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayConnectPeerState = TransitGatewayConnectPeerState'
+  { fromTransitGatewayConnectPeerState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayConnectPeerState_Available :: TransitGatewayConnectPeerState
+pattern TransitGatewayConnectPeerState_Available = TransitGatewayConnectPeerState' "available"
+
+pattern TransitGatewayConnectPeerState_Deleted :: TransitGatewayConnectPeerState
+pattern TransitGatewayConnectPeerState_Deleted = TransitGatewayConnectPeerState' "deleted"
+
+pattern TransitGatewayConnectPeerState_Deleting :: TransitGatewayConnectPeerState
+pattern TransitGatewayConnectPeerState_Deleting = TransitGatewayConnectPeerState' "deleting"
+
+pattern TransitGatewayConnectPeerState_Pending :: TransitGatewayConnectPeerState
+pattern TransitGatewayConnectPeerState_Pending = TransitGatewayConnectPeerState' "pending"
+
+{-# COMPLETE
+  TransitGatewayConnectPeerState_Available,
+  TransitGatewayConnectPeerState_Deleted,
+  TransitGatewayConnectPeerState_Deleting,
+  TransitGatewayConnectPeerState_Pending,
+  TransitGatewayConnectPeerState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayConnectRequestBgpOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayConnectRequestBgpOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayConnectRequestBgpOptions.hs
@@ -0,0 +1,79 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayConnectRequestBgpOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayConnectRequestBgpOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The BGP options for the Connect attachment.
+--
+-- /See:/ 'newTransitGatewayConnectRequestBgpOptions' smart constructor.
+data TransitGatewayConnectRequestBgpOptions = TransitGatewayConnectRequestBgpOptions'
+  { -- | The peer Autonomous System Number (ASN).
+    peerAsn :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayConnectRequestBgpOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'peerAsn', 'transitGatewayConnectRequestBgpOptions_peerAsn' - The peer Autonomous System Number (ASN).
+newTransitGatewayConnectRequestBgpOptions ::
+  TransitGatewayConnectRequestBgpOptions
+newTransitGatewayConnectRequestBgpOptions =
+  TransitGatewayConnectRequestBgpOptions'
+    { peerAsn =
+        Prelude.Nothing
+    }
+
+-- | The peer Autonomous System Number (ASN).
+transitGatewayConnectRequestBgpOptions_peerAsn :: Lens.Lens' TransitGatewayConnectRequestBgpOptions (Prelude.Maybe Prelude.Integer)
+transitGatewayConnectRequestBgpOptions_peerAsn = Lens.lens (\TransitGatewayConnectRequestBgpOptions' {peerAsn} -> peerAsn) (\s@TransitGatewayConnectRequestBgpOptions' {} a -> s {peerAsn = a} :: TransitGatewayConnectRequestBgpOptions)
+
+instance
+  Prelude.Hashable
+    TransitGatewayConnectRequestBgpOptions
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayConnectRequestBgpOptions' {..} =
+      _salt `Prelude.hashWithSalt` peerAsn
+
+instance
+  Prelude.NFData
+    TransitGatewayConnectRequestBgpOptions
+  where
+  rnf TransitGatewayConnectRequestBgpOptions' {..} =
+    Prelude.rnf peerAsn
+
+instance
+  Data.ToQuery
+    TransitGatewayConnectRequestBgpOptions
+  where
+  toQuery TransitGatewayConnectRequestBgpOptions' {..} =
+    Prelude.mconcat ["PeerAsn" Data.=: peerAsn]
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulitcastDomainAssociationState.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulitcastDomainAssociationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulitcastDomainAssociationState.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulitcastDomainAssociationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulitcastDomainAssociationState
+  ( TransitGatewayMulitcastDomainAssociationState
+      ( ..,
+        TransitGatewayMulitcastDomainAssociationState_Associated,
+        TransitGatewayMulitcastDomainAssociationState_Associating,
+        TransitGatewayMulitcastDomainAssociationState_Disassociated,
+        TransitGatewayMulitcastDomainAssociationState_Disassociating,
+        TransitGatewayMulitcastDomainAssociationState_Failed,
+        TransitGatewayMulitcastDomainAssociationState_PendingAcceptance,
+        TransitGatewayMulitcastDomainAssociationState_Rejected
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayMulitcastDomainAssociationState = TransitGatewayMulitcastDomainAssociationState'
+  { fromTransitGatewayMulitcastDomainAssociationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayMulitcastDomainAssociationState_Associated :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_Associated = TransitGatewayMulitcastDomainAssociationState' "associated"
+
+pattern TransitGatewayMulitcastDomainAssociationState_Associating :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_Associating = TransitGatewayMulitcastDomainAssociationState' "associating"
+
+pattern TransitGatewayMulitcastDomainAssociationState_Disassociated :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_Disassociated = TransitGatewayMulitcastDomainAssociationState' "disassociated"
+
+pattern TransitGatewayMulitcastDomainAssociationState_Disassociating :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_Disassociating = TransitGatewayMulitcastDomainAssociationState' "disassociating"
+
+pattern TransitGatewayMulitcastDomainAssociationState_Failed :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_Failed = TransitGatewayMulitcastDomainAssociationState' "failed"
+
+pattern TransitGatewayMulitcastDomainAssociationState_PendingAcceptance :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_PendingAcceptance = TransitGatewayMulitcastDomainAssociationState' "pendingAcceptance"
+
+pattern TransitGatewayMulitcastDomainAssociationState_Rejected :: TransitGatewayMulitcastDomainAssociationState
+pattern TransitGatewayMulitcastDomainAssociationState_Rejected = TransitGatewayMulitcastDomainAssociationState' "rejected"
+
+{-# COMPLETE
+  TransitGatewayMulitcastDomainAssociationState_Associated,
+  TransitGatewayMulitcastDomainAssociationState_Associating,
+  TransitGatewayMulitcastDomainAssociationState_Disassociated,
+  TransitGatewayMulitcastDomainAssociationState_Disassociating,
+  TransitGatewayMulitcastDomainAssociationState_Failed,
+  TransitGatewayMulitcastDomainAssociationState_PendingAcceptance,
+  TransitGatewayMulitcastDomainAssociationState_Rejected,
+  TransitGatewayMulitcastDomainAssociationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDeregisteredGroupMembers.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDeregisteredGroupMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDeregisteredGroupMembers.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupMembers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the deregistered transit gateway multicast group members.
+--
+-- /See:/ 'newTransitGatewayMulticastDeregisteredGroupMembers' smart constructor.
+data TransitGatewayMulticastDeregisteredGroupMembers = TransitGatewayMulticastDeregisteredGroupMembers'
+  { -- | The network interface IDs of the deregistered members.
+    deregisteredNetworkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastDeregisteredGroupMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deregisteredNetworkInterfaceIds', 'transitGatewayMulticastDeregisteredGroupMembers_deregisteredNetworkInterfaceIds' - The network interface IDs of the deregistered members.
+--
+-- 'groupIpAddress', 'transitGatewayMulticastDeregisteredGroupMembers_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'transitGatewayMulticastDomainId', 'transitGatewayMulticastDeregisteredGroupMembers_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newTransitGatewayMulticastDeregisteredGroupMembers ::
+  TransitGatewayMulticastDeregisteredGroupMembers
+newTransitGatewayMulticastDeregisteredGroupMembers =
+  TransitGatewayMulticastDeregisteredGroupMembers'
+    { deregisteredNetworkInterfaceIds =
+        Prelude.Nothing,
+      groupIpAddress =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | The network interface IDs of the deregistered members.
+transitGatewayMulticastDeregisteredGroupMembers_deregisteredNetworkInterfaceIds :: Lens.Lens' TransitGatewayMulticastDeregisteredGroupMembers (Prelude.Maybe [Prelude.Text])
+transitGatewayMulticastDeregisteredGroupMembers_deregisteredNetworkInterfaceIds = Lens.lens (\TransitGatewayMulticastDeregisteredGroupMembers' {deregisteredNetworkInterfaceIds} -> deregisteredNetworkInterfaceIds) (\s@TransitGatewayMulticastDeregisteredGroupMembers' {} a -> s {deregisteredNetworkInterfaceIds = a} :: TransitGatewayMulticastDeregisteredGroupMembers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP address assigned to the transit gateway multicast group.
+transitGatewayMulticastDeregisteredGroupMembers_groupIpAddress :: Lens.Lens' TransitGatewayMulticastDeregisteredGroupMembers (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDeregisteredGroupMembers_groupIpAddress = Lens.lens (\TransitGatewayMulticastDeregisteredGroupMembers' {groupIpAddress} -> groupIpAddress) (\s@TransitGatewayMulticastDeregisteredGroupMembers' {} a -> s {groupIpAddress = a} :: TransitGatewayMulticastDeregisteredGroupMembers)
+
+-- | The ID of the transit gateway multicast domain.
+transitGatewayMulticastDeregisteredGroupMembers_transitGatewayMulticastDomainId :: Lens.Lens' TransitGatewayMulticastDeregisteredGroupMembers (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDeregisteredGroupMembers_transitGatewayMulticastDomainId = Lens.lens (\TransitGatewayMulticastDeregisteredGroupMembers' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@TransitGatewayMulticastDeregisteredGroupMembers' {} a -> s {transitGatewayMulticastDomainId = a} :: TransitGatewayMulticastDeregisteredGroupMembers)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastDeregisteredGroupMembers
+  where
+  parseXML x =
+    TransitGatewayMulticastDeregisteredGroupMembers'
+      Prelude.<$> ( x
+                      Data..@? "deregisteredNetworkInterfaceIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "groupIpAddress")
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastDeregisteredGroupMembers
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastDeregisteredGroupMembers' {..} =
+      _salt
+        `Prelude.hashWithSalt` deregisteredNetworkInterfaceIds
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastDeregisteredGroupMembers
+  where
+  rnf
+    TransitGatewayMulticastDeregisteredGroupMembers' {..} =
+      Prelude.rnf deregisteredNetworkInterfaceIds
+        `Prelude.seq` Prelude.rnf groupIpAddress
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDeregisteredGroupSources.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDeregisteredGroupSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDeregisteredGroupSources.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupSources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDeregisteredGroupSources where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the deregistered transit gateway multicast group sources.
+--
+-- /See:/ 'newTransitGatewayMulticastDeregisteredGroupSources' smart constructor.
+data TransitGatewayMulticastDeregisteredGroupSources = TransitGatewayMulticastDeregisteredGroupSources'
+  { -- | The network interface IDs of the non-registered members.
+    deregisteredNetworkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastDeregisteredGroupSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deregisteredNetworkInterfaceIds', 'transitGatewayMulticastDeregisteredGroupSources_deregisteredNetworkInterfaceIds' - The network interface IDs of the non-registered members.
+--
+-- 'groupIpAddress', 'transitGatewayMulticastDeregisteredGroupSources_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'transitGatewayMulticastDomainId', 'transitGatewayMulticastDeregisteredGroupSources_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newTransitGatewayMulticastDeregisteredGroupSources ::
+  TransitGatewayMulticastDeregisteredGroupSources
+newTransitGatewayMulticastDeregisteredGroupSources =
+  TransitGatewayMulticastDeregisteredGroupSources'
+    { deregisteredNetworkInterfaceIds =
+        Prelude.Nothing,
+      groupIpAddress =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | The network interface IDs of the non-registered members.
+transitGatewayMulticastDeregisteredGroupSources_deregisteredNetworkInterfaceIds :: Lens.Lens' TransitGatewayMulticastDeregisteredGroupSources (Prelude.Maybe [Prelude.Text])
+transitGatewayMulticastDeregisteredGroupSources_deregisteredNetworkInterfaceIds = Lens.lens (\TransitGatewayMulticastDeregisteredGroupSources' {deregisteredNetworkInterfaceIds} -> deregisteredNetworkInterfaceIds) (\s@TransitGatewayMulticastDeregisteredGroupSources' {} a -> s {deregisteredNetworkInterfaceIds = a} :: TransitGatewayMulticastDeregisteredGroupSources) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP address assigned to the transit gateway multicast group.
+transitGatewayMulticastDeregisteredGroupSources_groupIpAddress :: Lens.Lens' TransitGatewayMulticastDeregisteredGroupSources (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDeregisteredGroupSources_groupIpAddress = Lens.lens (\TransitGatewayMulticastDeregisteredGroupSources' {groupIpAddress} -> groupIpAddress) (\s@TransitGatewayMulticastDeregisteredGroupSources' {} a -> s {groupIpAddress = a} :: TransitGatewayMulticastDeregisteredGroupSources)
+
+-- | The ID of the transit gateway multicast domain.
+transitGatewayMulticastDeregisteredGroupSources_transitGatewayMulticastDomainId :: Lens.Lens' TransitGatewayMulticastDeregisteredGroupSources (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDeregisteredGroupSources_transitGatewayMulticastDomainId = Lens.lens (\TransitGatewayMulticastDeregisteredGroupSources' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@TransitGatewayMulticastDeregisteredGroupSources' {} a -> s {transitGatewayMulticastDomainId = a} :: TransitGatewayMulticastDeregisteredGroupSources)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastDeregisteredGroupSources
+  where
+  parseXML x =
+    TransitGatewayMulticastDeregisteredGroupSources'
+      Prelude.<$> ( x
+                      Data..@? "deregisteredNetworkInterfaceIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "groupIpAddress")
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastDeregisteredGroupSources
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastDeregisteredGroupSources' {..} =
+      _salt
+        `Prelude.hashWithSalt` deregisteredNetworkInterfaceIds
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastDeregisteredGroupSources
+  where
+  rnf
+    TransitGatewayMulticastDeregisteredGroupSources' {..} =
+      Prelude.rnf deregisteredNetworkInterfaceIds
+        `Prelude.seq` Prelude.rnf groupIpAddress
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomain.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomain.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDomain where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainOptions
+import Amazonka.EC2.Types.TransitGatewayMulticastDomainState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the transit gateway multicast domain.
+--
+-- /See:/ 'newTransitGatewayMulticastDomain' smart constructor.
+data TransitGatewayMulticastDomain = TransitGatewayMulticastDomain'
+  { -- | The time the transit gateway multicast domain was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The options for the transit gateway multicast domain.
+    options :: Prelude.Maybe TransitGatewayMulticastDomainOptions,
+    -- | The ID of the Amazon Web Services account that owns the transit gateway
+    -- multicast domain.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the transit gateway multicast domain.
+    state :: Prelude.Maybe TransitGatewayMulticastDomainState,
+    -- | The tags for the transit gateway multicast domain.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the transit gateway multicast domain.
+    transitGatewayMulticastDomainArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'transitGatewayMulticastDomain_creationTime' - The time the transit gateway multicast domain was created.
+--
+-- 'options', 'transitGatewayMulticastDomain_options' - The options for the transit gateway multicast domain.
+--
+-- 'ownerId', 'transitGatewayMulticastDomain_ownerId' - The ID of the Amazon Web Services account that owns the transit gateway
+-- multicast domain.
+--
+-- 'state', 'transitGatewayMulticastDomain_state' - The state of the transit gateway multicast domain.
+--
+-- 'tags', 'transitGatewayMulticastDomain_tags' - The tags for the transit gateway multicast domain.
+--
+-- 'transitGatewayId', 'transitGatewayMulticastDomain_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'transitGatewayMulticastDomainArn', 'transitGatewayMulticastDomain_transitGatewayMulticastDomainArn' - The Amazon Resource Name (ARN) of the transit gateway multicast domain.
+--
+-- 'transitGatewayMulticastDomainId', 'transitGatewayMulticastDomain_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newTransitGatewayMulticastDomain ::
+  TransitGatewayMulticastDomain
+newTransitGatewayMulticastDomain =
+  TransitGatewayMulticastDomain'
+    { creationTime =
+        Prelude.Nothing,
+      options = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      transitGatewayMulticastDomainArn =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | The time the transit gateway multicast domain was created.
+transitGatewayMulticastDomain_creationTime :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe Prelude.UTCTime)
+transitGatewayMulticastDomain_creationTime = Lens.lens (\TransitGatewayMulticastDomain' {creationTime} -> creationTime) (\s@TransitGatewayMulticastDomain' {} a -> s {creationTime = a} :: TransitGatewayMulticastDomain) Prelude.. Lens.mapping Data._Time
+
+-- | The options for the transit gateway multicast domain.
+transitGatewayMulticastDomain_options :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe TransitGatewayMulticastDomainOptions)
+transitGatewayMulticastDomain_options = Lens.lens (\TransitGatewayMulticastDomain' {options} -> options) (\s@TransitGatewayMulticastDomain' {} a -> s {options = a} :: TransitGatewayMulticastDomain)
+
+-- | The ID of the Amazon Web Services account that owns the transit gateway
+-- multicast domain.
+transitGatewayMulticastDomain_ownerId :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomain_ownerId = Lens.lens (\TransitGatewayMulticastDomain' {ownerId} -> ownerId) (\s@TransitGatewayMulticastDomain' {} a -> s {ownerId = a} :: TransitGatewayMulticastDomain)
+
+-- | The state of the transit gateway multicast domain.
+transitGatewayMulticastDomain_state :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe TransitGatewayMulticastDomainState)
+transitGatewayMulticastDomain_state = Lens.lens (\TransitGatewayMulticastDomain' {state} -> state) (\s@TransitGatewayMulticastDomain' {} a -> s {state = a} :: TransitGatewayMulticastDomain)
+
+-- | The tags for the transit gateway multicast domain.
+transitGatewayMulticastDomain_tags :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe [Tag])
+transitGatewayMulticastDomain_tags = Lens.lens (\TransitGatewayMulticastDomain' {tags} -> tags) (\s@TransitGatewayMulticastDomain' {} a -> s {tags = a} :: TransitGatewayMulticastDomain) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+transitGatewayMulticastDomain_transitGatewayId :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomain_transitGatewayId = Lens.lens (\TransitGatewayMulticastDomain' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayMulticastDomain' {} a -> s {transitGatewayId = a} :: TransitGatewayMulticastDomain)
+
+-- | The Amazon Resource Name (ARN) of the transit gateway multicast domain.
+transitGatewayMulticastDomain_transitGatewayMulticastDomainArn :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomain_transitGatewayMulticastDomainArn = Lens.lens (\TransitGatewayMulticastDomain' {transitGatewayMulticastDomainArn} -> transitGatewayMulticastDomainArn) (\s@TransitGatewayMulticastDomain' {} a -> s {transitGatewayMulticastDomainArn = a} :: TransitGatewayMulticastDomain)
+
+-- | The ID of the transit gateway multicast domain.
+transitGatewayMulticastDomain_transitGatewayMulticastDomainId :: Lens.Lens' TransitGatewayMulticastDomain (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomain_transitGatewayMulticastDomainId = Lens.lens (\TransitGatewayMulticastDomain' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@TransitGatewayMulticastDomain' {} a -> s {transitGatewayMulticastDomainId = a} :: TransitGatewayMulticastDomain)
+
+instance Data.FromXML TransitGatewayMulticastDomain where
+  parseXML x =
+    TransitGatewayMulticastDomain'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "options")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainArn")
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastDomain
+  where
+  hashWithSalt _salt TransitGatewayMulticastDomain' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` transitGatewayMulticastDomainArn
+      `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance Prelude.NFData TransitGatewayMulticastDomain where
+  rnf TransitGatewayMulticastDomain' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainArn
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainAssociation.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainAssociation.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SubnetAssociation
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the resources associated with the transit gateway multicast
+-- domain.
+--
+-- /See:/ 'newTransitGatewayMulticastDomainAssociation' smart constructor.
+data TransitGatewayMulticastDomainAssociation = TransitGatewayMulticastDomainAssociation'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the transit gateway
+    -- multicast domain association resource.
+    resourceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource, for example a VPC attachment.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The subnet associated with the transit gateway multicast domain.
+    subnet :: Prelude.Maybe SubnetAssociation,
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastDomainAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayMulticastDomainAssociation_resourceId' - The ID of the resource.
+--
+-- 'resourceOwnerId', 'transitGatewayMulticastDomainAssociation_resourceOwnerId' - The ID of the Amazon Web Services account that owns the transit gateway
+-- multicast domain association resource.
+--
+-- 'resourceType', 'transitGatewayMulticastDomainAssociation_resourceType' - The type of resource, for example a VPC attachment.
+--
+-- 'subnet', 'transitGatewayMulticastDomainAssociation_subnet' - The subnet associated with the transit gateway multicast domain.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayMulticastDomainAssociation_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+newTransitGatewayMulticastDomainAssociation ::
+  TransitGatewayMulticastDomainAssociation
+newTransitGatewayMulticastDomainAssociation =
+  TransitGatewayMulticastDomainAssociation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceOwnerId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      subnet = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayMulticastDomainAssociation_resourceId :: Lens.Lens' TransitGatewayMulticastDomainAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociation_resourceId = Lens.lens (\TransitGatewayMulticastDomainAssociation' {resourceId} -> resourceId) (\s@TransitGatewayMulticastDomainAssociation' {} a -> s {resourceId = a} :: TransitGatewayMulticastDomainAssociation)
+
+-- | The ID of the Amazon Web Services account that owns the transit gateway
+-- multicast domain association resource.
+transitGatewayMulticastDomainAssociation_resourceOwnerId :: Lens.Lens' TransitGatewayMulticastDomainAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociation_resourceOwnerId = Lens.lens (\TransitGatewayMulticastDomainAssociation' {resourceOwnerId} -> resourceOwnerId) (\s@TransitGatewayMulticastDomainAssociation' {} a -> s {resourceOwnerId = a} :: TransitGatewayMulticastDomainAssociation)
+
+-- | The type of resource, for example a VPC attachment.
+transitGatewayMulticastDomainAssociation_resourceType :: Lens.Lens' TransitGatewayMulticastDomainAssociation (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayMulticastDomainAssociation_resourceType = Lens.lens (\TransitGatewayMulticastDomainAssociation' {resourceType} -> resourceType) (\s@TransitGatewayMulticastDomainAssociation' {} a -> s {resourceType = a} :: TransitGatewayMulticastDomainAssociation)
+
+-- | The subnet associated with the transit gateway multicast domain.
+transitGatewayMulticastDomainAssociation_subnet :: Lens.Lens' TransitGatewayMulticastDomainAssociation (Prelude.Maybe SubnetAssociation)
+transitGatewayMulticastDomainAssociation_subnet = Lens.lens (\TransitGatewayMulticastDomainAssociation' {subnet} -> subnet) (\s@TransitGatewayMulticastDomainAssociation' {} a -> s {subnet = a} :: TransitGatewayMulticastDomainAssociation)
+
+-- | The ID of the transit gateway attachment.
+transitGatewayMulticastDomainAssociation_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayMulticastDomainAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociation_transitGatewayAttachmentId = Lens.lens (\TransitGatewayMulticastDomainAssociation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayMulticastDomainAssociation' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayMulticastDomainAssociation)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastDomainAssociation
+  where
+  parseXML x =
+    TransitGatewayMulticastDomainAssociation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceOwnerId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "subnet")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastDomainAssociation
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastDomainAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` resourceOwnerId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` subnet
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastDomainAssociation
+  where
+  rnf TransitGatewayMulticastDomainAssociation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwnerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf subnet
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainAssociations.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainAssociations.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDomainAssociations where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.SubnetAssociation
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the multicast domain associations.
+--
+-- /See:/ 'newTransitGatewayMulticastDomainAssociations' smart constructor.
+data TransitGatewayMulticastDomainAssociations = TransitGatewayMulticastDomainAssociations'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the resource.
+    resourceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource, for example a VPC attachment.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The subnets associated with the multicast domain.
+    subnets :: Prelude.Maybe [SubnetAssociation],
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastDomainAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayMulticastDomainAssociations_resourceId' - The ID of the resource.
+--
+-- 'resourceOwnerId', 'transitGatewayMulticastDomainAssociations_resourceOwnerId' - The ID of the Amazon Web Services account that owns the resource.
+--
+-- 'resourceType', 'transitGatewayMulticastDomainAssociations_resourceType' - The type of resource, for example a VPC attachment.
+--
+-- 'subnets', 'transitGatewayMulticastDomainAssociations_subnets' - The subnets associated with the multicast domain.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayMulticastDomainAssociations_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+--
+-- 'transitGatewayMulticastDomainId', 'transitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newTransitGatewayMulticastDomainAssociations ::
+  TransitGatewayMulticastDomainAssociations
+newTransitGatewayMulticastDomainAssociations =
+  TransitGatewayMulticastDomainAssociations'
+    { resourceId =
+        Prelude.Nothing,
+      resourceOwnerId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      subnets = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayMulticastDomainAssociations_resourceId :: Lens.Lens' TransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociations_resourceId = Lens.lens (\TransitGatewayMulticastDomainAssociations' {resourceId} -> resourceId) (\s@TransitGatewayMulticastDomainAssociations' {} a -> s {resourceId = a} :: TransitGatewayMulticastDomainAssociations)
+
+-- | The ID of the Amazon Web Services account that owns the resource.
+transitGatewayMulticastDomainAssociations_resourceOwnerId :: Lens.Lens' TransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociations_resourceOwnerId = Lens.lens (\TransitGatewayMulticastDomainAssociations' {resourceOwnerId} -> resourceOwnerId) (\s@TransitGatewayMulticastDomainAssociations' {} a -> s {resourceOwnerId = a} :: TransitGatewayMulticastDomainAssociations)
+
+-- | The type of resource, for example a VPC attachment.
+transitGatewayMulticastDomainAssociations_resourceType :: Lens.Lens' TransitGatewayMulticastDomainAssociations (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayMulticastDomainAssociations_resourceType = Lens.lens (\TransitGatewayMulticastDomainAssociations' {resourceType} -> resourceType) (\s@TransitGatewayMulticastDomainAssociations' {} a -> s {resourceType = a} :: TransitGatewayMulticastDomainAssociations)
+
+-- | The subnets associated with the multicast domain.
+transitGatewayMulticastDomainAssociations_subnets :: Lens.Lens' TransitGatewayMulticastDomainAssociations (Prelude.Maybe [SubnetAssociation])
+transitGatewayMulticastDomainAssociations_subnets = Lens.lens (\TransitGatewayMulticastDomainAssociations' {subnets} -> subnets) (\s@TransitGatewayMulticastDomainAssociations' {} a -> s {subnets = a} :: TransitGatewayMulticastDomainAssociations) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway attachment.
+transitGatewayMulticastDomainAssociations_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociations_transitGatewayAttachmentId = Lens.lens (\TransitGatewayMulticastDomainAssociations' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayMulticastDomainAssociations)
+
+-- | The ID of the transit gateway multicast domain.
+transitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId :: Lens.Lens' TransitGatewayMulticastDomainAssociations (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastDomainAssociations_transitGatewayMulticastDomainId = Lens.lens (\TransitGatewayMulticastDomainAssociations' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@TransitGatewayMulticastDomainAssociations' {} a -> s {transitGatewayMulticastDomainId = a} :: TransitGatewayMulticastDomainAssociations)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastDomainAssociations
+  where
+  parseXML x =
+    TransitGatewayMulticastDomainAssociations'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceOwnerId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> ( x
+                      Data..@? "subnets"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastDomainAssociations
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastDomainAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` resourceOwnerId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` subnets
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastDomainAssociations
+  where
+  rnf TransitGatewayMulticastDomainAssociations' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwnerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf subnets
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainOptions.hs
@@ -0,0 +1,118 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDomainOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDomainOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AutoAcceptSharedAssociationsValue
+import Amazonka.EC2.Types.Igmpv2SupportValue
+import Amazonka.EC2.Types.StaticSourcesSupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for a transit gateway multicast domain.
+--
+-- /See:/ 'newTransitGatewayMulticastDomainOptions' smart constructor.
+data TransitGatewayMulticastDomainOptions = TransitGatewayMulticastDomainOptions'
+  { -- | Indicates whether to automatically cross-account subnet associations
+    -- that are associated with the transit gateway multicast domain.
+    autoAcceptSharedAssociations :: Prelude.Maybe AutoAcceptSharedAssociationsValue,
+    -- | Indicates whether Internet Group Management Protocol (IGMP) version 2 is
+    -- turned on for the transit gateway multicast domain.
+    igmpv2Support :: Prelude.Maybe Igmpv2SupportValue,
+    -- | Indicates whether support for statically configuring transit gateway
+    -- multicast group sources is turned on.
+    staticSourcesSupport :: Prelude.Maybe StaticSourcesSupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastDomainOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'autoAcceptSharedAssociations', 'transitGatewayMulticastDomainOptions_autoAcceptSharedAssociations' - Indicates whether to automatically cross-account subnet associations
+-- that are associated with the transit gateway multicast domain.
+--
+-- 'igmpv2Support', 'transitGatewayMulticastDomainOptions_igmpv2Support' - Indicates whether Internet Group Management Protocol (IGMP) version 2 is
+-- turned on for the transit gateway multicast domain.
+--
+-- 'staticSourcesSupport', 'transitGatewayMulticastDomainOptions_staticSourcesSupport' - Indicates whether support for statically configuring transit gateway
+-- multicast group sources is turned on.
+newTransitGatewayMulticastDomainOptions ::
+  TransitGatewayMulticastDomainOptions
+newTransitGatewayMulticastDomainOptions =
+  TransitGatewayMulticastDomainOptions'
+    { autoAcceptSharedAssociations =
+        Prelude.Nothing,
+      igmpv2Support = Prelude.Nothing,
+      staticSourcesSupport =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether to automatically cross-account subnet associations
+-- that are associated with the transit gateway multicast domain.
+transitGatewayMulticastDomainOptions_autoAcceptSharedAssociations :: Lens.Lens' TransitGatewayMulticastDomainOptions (Prelude.Maybe AutoAcceptSharedAssociationsValue)
+transitGatewayMulticastDomainOptions_autoAcceptSharedAssociations = Lens.lens (\TransitGatewayMulticastDomainOptions' {autoAcceptSharedAssociations} -> autoAcceptSharedAssociations) (\s@TransitGatewayMulticastDomainOptions' {} a -> s {autoAcceptSharedAssociations = a} :: TransitGatewayMulticastDomainOptions)
+
+-- | Indicates whether Internet Group Management Protocol (IGMP) version 2 is
+-- turned on for the transit gateway multicast domain.
+transitGatewayMulticastDomainOptions_igmpv2Support :: Lens.Lens' TransitGatewayMulticastDomainOptions (Prelude.Maybe Igmpv2SupportValue)
+transitGatewayMulticastDomainOptions_igmpv2Support = Lens.lens (\TransitGatewayMulticastDomainOptions' {igmpv2Support} -> igmpv2Support) (\s@TransitGatewayMulticastDomainOptions' {} a -> s {igmpv2Support = a} :: TransitGatewayMulticastDomainOptions)
+
+-- | Indicates whether support for statically configuring transit gateway
+-- multicast group sources is turned on.
+transitGatewayMulticastDomainOptions_staticSourcesSupport :: Lens.Lens' TransitGatewayMulticastDomainOptions (Prelude.Maybe StaticSourcesSupportValue)
+transitGatewayMulticastDomainOptions_staticSourcesSupport = Lens.lens (\TransitGatewayMulticastDomainOptions' {staticSourcesSupport} -> staticSourcesSupport) (\s@TransitGatewayMulticastDomainOptions' {} a -> s {staticSourcesSupport = a} :: TransitGatewayMulticastDomainOptions)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastDomainOptions
+  where
+  parseXML x =
+    TransitGatewayMulticastDomainOptions'
+      Prelude.<$> (x Data..@? "autoAcceptSharedAssociations")
+      Prelude.<*> (x Data..@? "igmpv2Support")
+      Prelude.<*> (x Data..@? "staticSourcesSupport")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastDomainOptions
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastDomainOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` autoAcceptSharedAssociations
+        `Prelude.hashWithSalt` igmpv2Support
+        `Prelude.hashWithSalt` staticSourcesSupport
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastDomainOptions
+  where
+  rnf TransitGatewayMulticastDomainOptions' {..} =
+    Prelude.rnf autoAcceptSharedAssociations
+      `Prelude.seq` Prelude.rnf igmpv2Support
+      `Prelude.seq` Prelude.rnf staticSourcesSupport
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainState.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastDomainState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastDomainState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastDomainState
+  ( TransitGatewayMulticastDomainState
+      ( ..,
+        TransitGatewayMulticastDomainState_Available,
+        TransitGatewayMulticastDomainState_Deleted,
+        TransitGatewayMulticastDomainState_Deleting,
+        TransitGatewayMulticastDomainState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayMulticastDomainState = TransitGatewayMulticastDomainState'
+  { fromTransitGatewayMulticastDomainState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayMulticastDomainState_Available :: TransitGatewayMulticastDomainState
+pattern TransitGatewayMulticastDomainState_Available = TransitGatewayMulticastDomainState' "available"
+
+pattern TransitGatewayMulticastDomainState_Deleted :: TransitGatewayMulticastDomainState
+pattern TransitGatewayMulticastDomainState_Deleted = TransitGatewayMulticastDomainState' "deleted"
+
+pattern TransitGatewayMulticastDomainState_Deleting :: TransitGatewayMulticastDomainState
+pattern TransitGatewayMulticastDomainState_Deleting = TransitGatewayMulticastDomainState' "deleting"
+
+pattern TransitGatewayMulticastDomainState_Pending :: TransitGatewayMulticastDomainState
+pattern TransitGatewayMulticastDomainState_Pending = TransitGatewayMulticastDomainState' "pending"
+
+{-# COMPLETE
+  TransitGatewayMulticastDomainState_Available,
+  TransitGatewayMulticastDomainState_Deleted,
+  TransitGatewayMulticastDomainState_Deleting,
+  TransitGatewayMulticastDomainState_Pending,
+  TransitGatewayMulticastDomainState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastGroup.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastGroup.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.MembershipType
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the transit gateway multicast group resources.
+--
+-- /See:/ 'newTransitGatewayMulticastGroup' smart constructor.
+data TransitGatewayMulticastGroup = TransitGatewayMulticastGroup'
+  { -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | Indicates that the resource is a transit gateway multicast group member.
+    groupMember :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates that the resource is a transit gateway multicast group member.
+    groupSource :: Prelude.Maybe Prelude.Bool,
+    -- | The member type (for example, @static@).
+    memberType :: Prelude.Maybe MembershipType,
+    -- | The ID of the transit gateway attachment.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the transit gateway
+    -- multicast domain group resource.
+    resourceOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource, for example a VPC attachment.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The source type.
+    sourceType :: Prelude.Maybe MembershipType,
+    -- | The ID of the subnet.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupIpAddress', 'transitGatewayMulticastGroup_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'groupMember', 'transitGatewayMulticastGroup_groupMember' - Indicates that the resource is a transit gateway multicast group member.
+--
+-- 'groupSource', 'transitGatewayMulticastGroup_groupSource' - Indicates that the resource is a transit gateway multicast group member.
+--
+-- 'memberType', 'transitGatewayMulticastGroup_memberType' - The member type (for example, @static@).
+--
+-- 'networkInterfaceId', 'transitGatewayMulticastGroup_networkInterfaceId' - The ID of the transit gateway attachment.
+--
+-- 'resourceId', 'transitGatewayMulticastGroup_resourceId' - The ID of the resource.
+--
+-- 'resourceOwnerId', 'transitGatewayMulticastGroup_resourceOwnerId' - The ID of the Amazon Web Services account that owns the transit gateway
+-- multicast domain group resource.
+--
+-- 'resourceType', 'transitGatewayMulticastGroup_resourceType' - The type of resource, for example a VPC attachment.
+--
+-- 'sourceType', 'transitGatewayMulticastGroup_sourceType' - The source type.
+--
+-- 'subnetId', 'transitGatewayMulticastGroup_subnetId' - The ID of the subnet.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayMulticastGroup_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+newTransitGatewayMulticastGroup ::
+  TransitGatewayMulticastGroup
+newTransitGatewayMulticastGroup =
+  TransitGatewayMulticastGroup'
+    { groupIpAddress =
+        Prelude.Nothing,
+      groupMember = Prelude.Nothing,
+      groupSource = Prelude.Nothing,
+      memberType = Prelude.Nothing,
+      networkInterfaceId = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceOwnerId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      sourceType = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing
+    }
+
+-- | The IP address assigned to the transit gateway multicast group.
+transitGatewayMulticastGroup_groupIpAddress :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastGroup_groupIpAddress = Lens.lens (\TransitGatewayMulticastGroup' {groupIpAddress} -> groupIpAddress) (\s@TransitGatewayMulticastGroup' {} a -> s {groupIpAddress = a} :: TransitGatewayMulticastGroup)
+
+-- | Indicates that the resource is a transit gateway multicast group member.
+transitGatewayMulticastGroup_groupMember :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Bool)
+transitGatewayMulticastGroup_groupMember = Lens.lens (\TransitGatewayMulticastGroup' {groupMember} -> groupMember) (\s@TransitGatewayMulticastGroup' {} a -> s {groupMember = a} :: TransitGatewayMulticastGroup)
+
+-- | Indicates that the resource is a transit gateway multicast group member.
+transitGatewayMulticastGroup_groupSource :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Bool)
+transitGatewayMulticastGroup_groupSource = Lens.lens (\TransitGatewayMulticastGroup' {groupSource} -> groupSource) (\s@TransitGatewayMulticastGroup' {} a -> s {groupSource = a} :: TransitGatewayMulticastGroup)
+
+-- | The member type (for example, @static@).
+transitGatewayMulticastGroup_memberType :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe MembershipType)
+transitGatewayMulticastGroup_memberType = Lens.lens (\TransitGatewayMulticastGroup' {memberType} -> memberType) (\s@TransitGatewayMulticastGroup' {} a -> s {memberType = a} :: TransitGatewayMulticastGroup)
+
+-- | The ID of the transit gateway attachment.
+transitGatewayMulticastGroup_networkInterfaceId :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastGroup_networkInterfaceId = Lens.lens (\TransitGatewayMulticastGroup' {networkInterfaceId} -> networkInterfaceId) (\s@TransitGatewayMulticastGroup' {} a -> s {networkInterfaceId = a} :: TransitGatewayMulticastGroup)
+
+-- | The ID of the resource.
+transitGatewayMulticastGroup_resourceId :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastGroup_resourceId = Lens.lens (\TransitGatewayMulticastGroup' {resourceId} -> resourceId) (\s@TransitGatewayMulticastGroup' {} a -> s {resourceId = a} :: TransitGatewayMulticastGroup)
+
+-- | The ID of the Amazon Web Services account that owns the transit gateway
+-- multicast domain group resource.
+transitGatewayMulticastGroup_resourceOwnerId :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastGroup_resourceOwnerId = Lens.lens (\TransitGatewayMulticastGroup' {resourceOwnerId} -> resourceOwnerId) (\s@TransitGatewayMulticastGroup' {} a -> s {resourceOwnerId = a} :: TransitGatewayMulticastGroup)
+
+-- | The type of resource, for example a VPC attachment.
+transitGatewayMulticastGroup_resourceType :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayMulticastGroup_resourceType = Lens.lens (\TransitGatewayMulticastGroup' {resourceType} -> resourceType) (\s@TransitGatewayMulticastGroup' {} a -> s {resourceType = a} :: TransitGatewayMulticastGroup)
+
+-- | The source type.
+transitGatewayMulticastGroup_sourceType :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe MembershipType)
+transitGatewayMulticastGroup_sourceType = Lens.lens (\TransitGatewayMulticastGroup' {sourceType} -> sourceType) (\s@TransitGatewayMulticastGroup' {} a -> s {sourceType = a} :: TransitGatewayMulticastGroup)
+
+-- | The ID of the subnet.
+transitGatewayMulticastGroup_subnetId :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastGroup_subnetId = Lens.lens (\TransitGatewayMulticastGroup' {subnetId} -> subnetId) (\s@TransitGatewayMulticastGroup' {} a -> s {subnetId = a} :: TransitGatewayMulticastGroup)
+
+-- | The ID of the transit gateway attachment.
+transitGatewayMulticastGroup_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayMulticastGroup (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastGroup_transitGatewayAttachmentId = Lens.lens (\TransitGatewayMulticastGroup' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayMulticastGroup' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayMulticastGroup)
+
+instance Data.FromXML TransitGatewayMulticastGroup where
+  parseXML x =
+    TransitGatewayMulticastGroup'
+      Prelude.<$> (x Data..@? "groupIpAddress")
+      Prelude.<*> (x Data..@? "groupMember")
+      Prelude.<*> (x Data..@? "groupSource")
+      Prelude.<*> (x Data..@? "memberType")
+      Prelude.<*> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceOwnerId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "sourceType")
+      Prelude.<*> (x Data..@? "subnetId")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastGroup
+  where
+  hashWithSalt _salt TransitGatewayMulticastGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` groupIpAddress
+      `Prelude.hashWithSalt` groupMember
+      `Prelude.hashWithSalt` groupSource
+      `Prelude.hashWithSalt` memberType
+      `Prelude.hashWithSalt` networkInterfaceId
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceOwnerId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` sourceType
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance Prelude.NFData TransitGatewayMulticastGroup where
+  rnf TransitGatewayMulticastGroup' {..} =
+    Prelude.rnf groupIpAddress
+      `Prelude.seq` Prelude.rnf groupMember
+      `Prelude.seq` Prelude.rnf groupSource
+      `Prelude.seq` Prelude.rnf memberType
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceOwnerId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf sourceType
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastRegisteredGroupMembers.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastRegisteredGroupMembers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastRegisteredGroupMembers.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupMembers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupMembers where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the registered transit gateway multicast group members.
+--
+-- /See:/ 'newTransitGatewayMulticastRegisteredGroupMembers' smart constructor.
+data TransitGatewayMulticastRegisteredGroupMembers = TransitGatewayMulticastRegisteredGroupMembers'
+  { -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the registered network interfaces.
+    registeredNetworkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastRegisteredGroupMembers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupIpAddress', 'transitGatewayMulticastRegisteredGroupMembers_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'registeredNetworkInterfaceIds', 'transitGatewayMulticastRegisteredGroupMembers_registeredNetworkInterfaceIds' - The ID of the registered network interfaces.
+--
+-- 'transitGatewayMulticastDomainId', 'transitGatewayMulticastRegisteredGroupMembers_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newTransitGatewayMulticastRegisteredGroupMembers ::
+  TransitGatewayMulticastRegisteredGroupMembers
+newTransitGatewayMulticastRegisteredGroupMembers =
+  TransitGatewayMulticastRegisteredGroupMembers'
+    { groupIpAddress =
+        Prelude.Nothing,
+      registeredNetworkInterfaceIds =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | The IP address assigned to the transit gateway multicast group.
+transitGatewayMulticastRegisteredGroupMembers_groupIpAddress :: Lens.Lens' TransitGatewayMulticastRegisteredGroupMembers (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastRegisteredGroupMembers_groupIpAddress = Lens.lens (\TransitGatewayMulticastRegisteredGroupMembers' {groupIpAddress} -> groupIpAddress) (\s@TransitGatewayMulticastRegisteredGroupMembers' {} a -> s {groupIpAddress = a} :: TransitGatewayMulticastRegisteredGroupMembers)
+
+-- | The ID of the registered network interfaces.
+transitGatewayMulticastRegisteredGroupMembers_registeredNetworkInterfaceIds :: Lens.Lens' TransitGatewayMulticastRegisteredGroupMembers (Prelude.Maybe [Prelude.Text])
+transitGatewayMulticastRegisteredGroupMembers_registeredNetworkInterfaceIds = Lens.lens (\TransitGatewayMulticastRegisteredGroupMembers' {registeredNetworkInterfaceIds} -> registeredNetworkInterfaceIds) (\s@TransitGatewayMulticastRegisteredGroupMembers' {} a -> s {registeredNetworkInterfaceIds = a} :: TransitGatewayMulticastRegisteredGroupMembers) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway multicast domain.
+transitGatewayMulticastRegisteredGroupMembers_transitGatewayMulticastDomainId :: Lens.Lens' TransitGatewayMulticastRegisteredGroupMembers (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastRegisteredGroupMembers_transitGatewayMulticastDomainId = Lens.lens (\TransitGatewayMulticastRegisteredGroupMembers' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@TransitGatewayMulticastRegisteredGroupMembers' {} a -> s {transitGatewayMulticastDomainId = a} :: TransitGatewayMulticastRegisteredGroupMembers)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastRegisteredGroupMembers
+  where
+  parseXML x =
+    TransitGatewayMulticastRegisteredGroupMembers'
+      Prelude.<$> (x Data..@? "groupIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "registeredNetworkInterfaceIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastRegisteredGroupMembers
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastRegisteredGroupMembers' {..} =
+      _salt
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` registeredNetworkInterfaceIds
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastRegisteredGroupMembers
+  where
+  rnf
+    TransitGatewayMulticastRegisteredGroupMembers' {..} =
+      Prelude.rnf groupIpAddress
+        `Prelude.seq` Prelude.rnf registeredNetworkInterfaceIds
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayMulticastRegisteredGroupSources.hs b/gen/Amazonka/EC2/Types/TransitGatewayMulticastRegisteredGroupSources.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayMulticastRegisteredGroupSources.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupSources
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayMulticastRegisteredGroupSources where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the members registered with the transit gateway multicast
+-- group.
+--
+-- /See:/ 'newTransitGatewayMulticastRegisteredGroupSources' smart constructor.
+data TransitGatewayMulticastRegisteredGroupSources = TransitGatewayMulticastRegisteredGroupSources'
+  { -- | The IP address assigned to the transit gateway multicast group.
+    groupIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the network interfaces members registered with the transit
+    -- gateway multicast group.
+    registeredNetworkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the transit gateway multicast domain.
+    transitGatewayMulticastDomainId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayMulticastRegisteredGroupSources' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'groupIpAddress', 'transitGatewayMulticastRegisteredGroupSources_groupIpAddress' - The IP address assigned to the transit gateway multicast group.
+--
+-- 'registeredNetworkInterfaceIds', 'transitGatewayMulticastRegisteredGroupSources_registeredNetworkInterfaceIds' - The IDs of the network interfaces members registered with the transit
+-- gateway multicast group.
+--
+-- 'transitGatewayMulticastDomainId', 'transitGatewayMulticastRegisteredGroupSources_transitGatewayMulticastDomainId' - The ID of the transit gateway multicast domain.
+newTransitGatewayMulticastRegisteredGroupSources ::
+  TransitGatewayMulticastRegisteredGroupSources
+newTransitGatewayMulticastRegisteredGroupSources =
+  TransitGatewayMulticastRegisteredGroupSources'
+    { groupIpAddress =
+        Prelude.Nothing,
+      registeredNetworkInterfaceIds =
+        Prelude.Nothing,
+      transitGatewayMulticastDomainId =
+        Prelude.Nothing
+    }
+
+-- | The IP address assigned to the transit gateway multicast group.
+transitGatewayMulticastRegisteredGroupSources_groupIpAddress :: Lens.Lens' TransitGatewayMulticastRegisteredGroupSources (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastRegisteredGroupSources_groupIpAddress = Lens.lens (\TransitGatewayMulticastRegisteredGroupSources' {groupIpAddress} -> groupIpAddress) (\s@TransitGatewayMulticastRegisteredGroupSources' {} a -> s {groupIpAddress = a} :: TransitGatewayMulticastRegisteredGroupSources)
+
+-- | The IDs of the network interfaces members registered with the transit
+-- gateway multicast group.
+transitGatewayMulticastRegisteredGroupSources_registeredNetworkInterfaceIds :: Lens.Lens' TransitGatewayMulticastRegisteredGroupSources (Prelude.Maybe [Prelude.Text])
+transitGatewayMulticastRegisteredGroupSources_registeredNetworkInterfaceIds = Lens.lens (\TransitGatewayMulticastRegisteredGroupSources' {registeredNetworkInterfaceIds} -> registeredNetworkInterfaceIds) (\s@TransitGatewayMulticastRegisteredGroupSources' {} a -> s {registeredNetworkInterfaceIds = a} :: TransitGatewayMulticastRegisteredGroupSources) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway multicast domain.
+transitGatewayMulticastRegisteredGroupSources_transitGatewayMulticastDomainId :: Lens.Lens' TransitGatewayMulticastRegisteredGroupSources (Prelude.Maybe Prelude.Text)
+transitGatewayMulticastRegisteredGroupSources_transitGatewayMulticastDomainId = Lens.lens (\TransitGatewayMulticastRegisteredGroupSources' {transitGatewayMulticastDomainId} -> transitGatewayMulticastDomainId) (\s@TransitGatewayMulticastRegisteredGroupSources' {} a -> s {transitGatewayMulticastDomainId = a} :: TransitGatewayMulticastRegisteredGroupSources)
+
+instance
+  Data.FromXML
+    TransitGatewayMulticastRegisteredGroupSources
+  where
+  parseXML x =
+    TransitGatewayMulticastRegisteredGroupSources'
+      Prelude.<$> (x Data..@? "groupIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "registeredNetworkInterfaceIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayMulticastDomainId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayMulticastRegisteredGroupSources
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayMulticastRegisteredGroupSources' {..} =
+      _salt
+        `Prelude.hashWithSalt` groupIpAddress
+        `Prelude.hashWithSalt` registeredNetworkInterfaceIds
+        `Prelude.hashWithSalt` transitGatewayMulticastDomainId
+
+instance
+  Prelude.NFData
+    TransitGatewayMulticastRegisteredGroupSources
+  where
+  rnf
+    TransitGatewayMulticastRegisteredGroupSources' {..} =
+      Prelude.rnf groupIpAddress
+        `Prelude.seq` Prelude.rnf registeredNetworkInterfaceIds
+        `Prelude.seq` Prelude.rnf transitGatewayMulticastDomainId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayOptions.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+import Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+import Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.MulticastSupportValue
+import Amazonka.EC2.Types.VpnEcmpSupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for a transit gateway.
+--
+-- /See:/ 'newTransitGatewayOptions' smart constructor.
+data TransitGatewayOptions = TransitGatewayOptions'
+  { -- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+    -- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+    -- 4294967294 for 32-bit ASNs.
+    amazonSideAsn :: Prelude.Maybe Prelude.Integer,
+    -- | The ID of the default association route table.
+    associationDefaultRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether attachment requests are automatically accepted.
+    autoAcceptSharedAttachments :: Prelude.Maybe AutoAcceptSharedAttachmentsValue,
+    -- | Indicates whether resource attachments are automatically associated with
+    -- the default association route table.
+    defaultRouteTableAssociation :: Prelude.Maybe DefaultRouteTableAssociationValue,
+    -- | Indicates whether resource attachments automatically propagate routes to
+    -- the default propagation route table.
+    defaultRouteTablePropagation :: Prelude.Maybe DefaultRouteTablePropagationValue,
+    -- | Indicates whether DNS support is enabled.
+    dnsSupport :: Prelude.Maybe DnsSupportValue,
+    -- | Indicates whether multicast is enabled on the transit gateway
+    multicastSupport :: Prelude.Maybe MulticastSupportValue,
+    -- | The ID of the default propagation route table.
+    propagationDefaultRouteTableId :: Prelude.Maybe Prelude.Text,
+    -- | The transit gateway CIDR blocks.
+    transitGatewayCidrBlocks :: Prelude.Maybe [Prelude.Text],
+    -- | Indicates whether Equal Cost Multipath Protocol support is enabled.
+    vpnEcmpSupport :: Prelude.Maybe VpnEcmpSupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amazonSideAsn', 'transitGatewayOptions_amazonSideAsn' - A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+-- 4294967294 for 32-bit ASNs.
+--
+-- 'associationDefaultRouteTableId', 'transitGatewayOptions_associationDefaultRouteTableId' - The ID of the default association route table.
+--
+-- 'autoAcceptSharedAttachments', 'transitGatewayOptions_autoAcceptSharedAttachments' - Indicates whether attachment requests are automatically accepted.
+--
+-- 'defaultRouteTableAssociation', 'transitGatewayOptions_defaultRouteTableAssociation' - Indicates whether resource attachments are automatically associated with
+-- the default association route table.
+--
+-- 'defaultRouteTablePropagation', 'transitGatewayOptions_defaultRouteTablePropagation' - Indicates whether resource attachments automatically propagate routes to
+-- the default propagation route table.
+--
+-- 'dnsSupport', 'transitGatewayOptions_dnsSupport' - Indicates whether DNS support is enabled.
+--
+-- 'multicastSupport', 'transitGatewayOptions_multicastSupport' - Indicates whether multicast is enabled on the transit gateway
+--
+-- 'propagationDefaultRouteTableId', 'transitGatewayOptions_propagationDefaultRouteTableId' - The ID of the default propagation route table.
+--
+-- 'transitGatewayCidrBlocks', 'transitGatewayOptions_transitGatewayCidrBlocks' - The transit gateway CIDR blocks.
+--
+-- 'vpnEcmpSupport', 'transitGatewayOptions_vpnEcmpSupport' - Indicates whether Equal Cost Multipath Protocol support is enabled.
+newTransitGatewayOptions ::
+  TransitGatewayOptions
+newTransitGatewayOptions =
+  TransitGatewayOptions'
+    { amazonSideAsn =
+        Prelude.Nothing,
+      associationDefaultRouteTableId = Prelude.Nothing,
+      autoAcceptSharedAttachments = Prelude.Nothing,
+      defaultRouteTableAssociation = Prelude.Nothing,
+      defaultRouteTablePropagation = Prelude.Nothing,
+      dnsSupport = Prelude.Nothing,
+      multicastSupport = Prelude.Nothing,
+      propagationDefaultRouteTableId = Prelude.Nothing,
+      transitGatewayCidrBlocks = Prelude.Nothing,
+      vpnEcmpSupport = Prelude.Nothing
+    }
+
+-- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+-- 4294967294 for 32-bit ASNs.
+transitGatewayOptions_amazonSideAsn :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe Prelude.Integer)
+transitGatewayOptions_amazonSideAsn = Lens.lens (\TransitGatewayOptions' {amazonSideAsn} -> amazonSideAsn) (\s@TransitGatewayOptions' {} a -> s {amazonSideAsn = a} :: TransitGatewayOptions)
+
+-- | The ID of the default association route table.
+transitGatewayOptions_associationDefaultRouteTableId :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe Prelude.Text)
+transitGatewayOptions_associationDefaultRouteTableId = Lens.lens (\TransitGatewayOptions' {associationDefaultRouteTableId} -> associationDefaultRouteTableId) (\s@TransitGatewayOptions' {} a -> s {associationDefaultRouteTableId = a} :: TransitGatewayOptions)
+
+-- | Indicates whether attachment requests are automatically accepted.
+transitGatewayOptions_autoAcceptSharedAttachments :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe AutoAcceptSharedAttachmentsValue)
+transitGatewayOptions_autoAcceptSharedAttachments = Lens.lens (\TransitGatewayOptions' {autoAcceptSharedAttachments} -> autoAcceptSharedAttachments) (\s@TransitGatewayOptions' {} a -> s {autoAcceptSharedAttachments = a} :: TransitGatewayOptions)
+
+-- | Indicates whether resource attachments are automatically associated with
+-- the default association route table.
+transitGatewayOptions_defaultRouteTableAssociation :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe DefaultRouteTableAssociationValue)
+transitGatewayOptions_defaultRouteTableAssociation = Lens.lens (\TransitGatewayOptions' {defaultRouteTableAssociation} -> defaultRouteTableAssociation) (\s@TransitGatewayOptions' {} a -> s {defaultRouteTableAssociation = a} :: TransitGatewayOptions)
+
+-- | Indicates whether resource attachments automatically propagate routes to
+-- the default propagation route table.
+transitGatewayOptions_defaultRouteTablePropagation :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe DefaultRouteTablePropagationValue)
+transitGatewayOptions_defaultRouteTablePropagation = Lens.lens (\TransitGatewayOptions' {defaultRouteTablePropagation} -> defaultRouteTablePropagation) (\s@TransitGatewayOptions' {} a -> s {defaultRouteTablePropagation = a} :: TransitGatewayOptions)
+
+-- | Indicates whether DNS support is enabled.
+transitGatewayOptions_dnsSupport :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe DnsSupportValue)
+transitGatewayOptions_dnsSupport = Lens.lens (\TransitGatewayOptions' {dnsSupport} -> dnsSupport) (\s@TransitGatewayOptions' {} a -> s {dnsSupport = a} :: TransitGatewayOptions)
+
+-- | Indicates whether multicast is enabled on the transit gateway
+transitGatewayOptions_multicastSupport :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe MulticastSupportValue)
+transitGatewayOptions_multicastSupport = Lens.lens (\TransitGatewayOptions' {multicastSupport} -> multicastSupport) (\s@TransitGatewayOptions' {} a -> s {multicastSupport = a} :: TransitGatewayOptions)
+
+-- | The ID of the default propagation route table.
+transitGatewayOptions_propagationDefaultRouteTableId :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe Prelude.Text)
+transitGatewayOptions_propagationDefaultRouteTableId = Lens.lens (\TransitGatewayOptions' {propagationDefaultRouteTableId} -> propagationDefaultRouteTableId) (\s@TransitGatewayOptions' {} a -> s {propagationDefaultRouteTableId = a} :: TransitGatewayOptions)
+
+-- | The transit gateway CIDR blocks.
+transitGatewayOptions_transitGatewayCidrBlocks :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe [Prelude.Text])
+transitGatewayOptions_transitGatewayCidrBlocks = Lens.lens (\TransitGatewayOptions' {transitGatewayCidrBlocks} -> transitGatewayCidrBlocks) (\s@TransitGatewayOptions' {} a -> s {transitGatewayCidrBlocks = a} :: TransitGatewayOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether Equal Cost Multipath Protocol support is enabled.
+transitGatewayOptions_vpnEcmpSupport :: Lens.Lens' TransitGatewayOptions (Prelude.Maybe VpnEcmpSupportValue)
+transitGatewayOptions_vpnEcmpSupport = Lens.lens (\TransitGatewayOptions' {vpnEcmpSupport} -> vpnEcmpSupport) (\s@TransitGatewayOptions' {} a -> s {vpnEcmpSupport = a} :: TransitGatewayOptions)
+
+instance Data.FromXML TransitGatewayOptions where
+  parseXML x =
+    TransitGatewayOptions'
+      Prelude.<$> (x Data..@? "amazonSideAsn")
+      Prelude.<*> (x Data..@? "associationDefaultRouteTableId")
+      Prelude.<*> (x Data..@? "autoAcceptSharedAttachments")
+      Prelude.<*> (x Data..@? "defaultRouteTableAssociation")
+      Prelude.<*> (x Data..@? "defaultRouteTablePropagation")
+      Prelude.<*> (x Data..@? "dnsSupport")
+      Prelude.<*> (x Data..@? "multicastSupport")
+      Prelude.<*> (x Data..@? "propagationDefaultRouteTableId")
+      Prelude.<*> ( x
+                      Data..@? "transitGatewayCidrBlocks"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpnEcmpSupport")
+
+instance Prelude.Hashable TransitGatewayOptions where
+  hashWithSalt _salt TransitGatewayOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonSideAsn
+      `Prelude.hashWithSalt` associationDefaultRouteTableId
+      `Prelude.hashWithSalt` autoAcceptSharedAttachments
+      `Prelude.hashWithSalt` defaultRouteTableAssociation
+      `Prelude.hashWithSalt` defaultRouteTablePropagation
+      `Prelude.hashWithSalt` dnsSupport
+      `Prelude.hashWithSalt` multicastSupport
+      `Prelude.hashWithSalt` propagationDefaultRouteTableId
+      `Prelude.hashWithSalt` transitGatewayCidrBlocks
+      `Prelude.hashWithSalt` vpnEcmpSupport
+
+instance Prelude.NFData TransitGatewayOptions where
+  rnf TransitGatewayOptions' {..} =
+    Prelude.rnf amazonSideAsn
+      `Prelude.seq` Prelude.rnf associationDefaultRouteTableId
+      `Prelude.seq` Prelude.rnf autoAcceptSharedAttachments
+      `Prelude.seq` Prelude.rnf defaultRouteTableAssociation
+      `Prelude.seq` Prelude.rnf defaultRouteTablePropagation
+      `Prelude.seq` Prelude.rnf dnsSupport
+      `Prelude.seq` Prelude.rnf multicastSupport
+      `Prelude.seq` Prelude.rnf propagationDefaultRouteTableId
+      `Prelude.seq` Prelude.rnf transitGatewayCidrBlocks
+      `Prelude.seq` Prelude.rnf vpnEcmpSupport
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPeeringAttachment.hs b/gen/Amazonka/EC2/Types/TransitGatewayPeeringAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPeeringAttachment.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPeeringAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPeeringAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.PeeringAttachmentStatus
+import Amazonka.EC2.Types.PeeringTgwInfo
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayAttachmentState
+import Amazonka.EC2.Types.TransitGatewayPeeringAttachmentOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the transit gateway peering attachment.
+--
+-- /See:/ 'newTransitGatewayPeeringAttachment' smart constructor.
+data TransitGatewayPeeringAttachment = TransitGatewayPeeringAttachment'
+  { -- | Information about the accepter transit gateway.
+    accepterTgwInfo :: Prelude.Maybe PeeringTgwInfo,
+    -- | The ID of the accepter transit gateway attachment.
+    accepterTransitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The time the transit gateway peering attachment was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | Details about the transit gateway peering attachment.
+    options :: Prelude.Maybe TransitGatewayPeeringAttachmentOptions,
+    -- | Information about the requester transit gateway.
+    requesterTgwInfo :: Prelude.Maybe PeeringTgwInfo,
+    -- | The state of the transit gateway peering attachment. Note that the
+    -- @initiating@ state has been deprecated.
+    state :: Prelude.Maybe TransitGatewayAttachmentState,
+    -- | The status of the transit gateway peering attachment.
+    status :: Prelude.Maybe PeeringAttachmentStatus,
+    -- | The tags for the transit gateway peering attachment.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the transit gateway peering attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPeeringAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accepterTgwInfo', 'transitGatewayPeeringAttachment_accepterTgwInfo' - Information about the accepter transit gateway.
+--
+-- 'accepterTransitGatewayAttachmentId', 'transitGatewayPeeringAttachment_accepterTransitGatewayAttachmentId' - The ID of the accepter transit gateway attachment.
+--
+-- 'creationTime', 'transitGatewayPeeringAttachment_creationTime' - The time the transit gateway peering attachment was created.
+--
+-- 'options', 'transitGatewayPeeringAttachment_options' - Details about the transit gateway peering attachment.
+--
+-- 'requesterTgwInfo', 'transitGatewayPeeringAttachment_requesterTgwInfo' - Information about the requester transit gateway.
+--
+-- 'state', 'transitGatewayPeeringAttachment_state' - The state of the transit gateway peering attachment. Note that the
+-- @initiating@ state has been deprecated.
+--
+-- 'status', 'transitGatewayPeeringAttachment_status' - The status of the transit gateway peering attachment.
+--
+-- 'tags', 'transitGatewayPeeringAttachment_tags' - The tags for the transit gateway peering attachment.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayPeeringAttachment_transitGatewayAttachmentId' - The ID of the transit gateway peering attachment.
+newTransitGatewayPeeringAttachment ::
+  TransitGatewayPeeringAttachment
+newTransitGatewayPeeringAttachment =
+  TransitGatewayPeeringAttachment'
+    { accepterTgwInfo =
+        Prelude.Nothing,
+      accepterTransitGatewayAttachmentId =
+        Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      options = Prelude.Nothing,
+      requesterTgwInfo = Prelude.Nothing,
+      state = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing
+    }
+
+-- | Information about the accepter transit gateway.
+transitGatewayPeeringAttachment_accepterTgwInfo :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe PeeringTgwInfo)
+transitGatewayPeeringAttachment_accepterTgwInfo = Lens.lens (\TransitGatewayPeeringAttachment' {accepterTgwInfo} -> accepterTgwInfo) (\s@TransitGatewayPeeringAttachment' {} a -> s {accepterTgwInfo = a} :: TransitGatewayPeeringAttachment)
+
+-- | The ID of the accepter transit gateway attachment.
+transitGatewayPeeringAttachment_accepterTransitGatewayAttachmentId :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayPeeringAttachment_accepterTransitGatewayAttachmentId = Lens.lens (\TransitGatewayPeeringAttachment' {accepterTransitGatewayAttachmentId} -> accepterTransitGatewayAttachmentId) (\s@TransitGatewayPeeringAttachment' {} a -> s {accepterTransitGatewayAttachmentId = a} :: TransitGatewayPeeringAttachment)
+
+-- | The time the transit gateway peering attachment was created.
+transitGatewayPeeringAttachment_creationTime :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe Prelude.UTCTime)
+transitGatewayPeeringAttachment_creationTime = Lens.lens (\TransitGatewayPeeringAttachment' {creationTime} -> creationTime) (\s@TransitGatewayPeeringAttachment' {} a -> s {creationTime = a} :: TransitGatewayPeeringAttachment) Prelude.. Lens.mapping Data._Time
+
+-- | Details about the transit gateway peering attachment.
+transitGatewayPeeringAttachment_options :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe TransitGatewayPeeringAttachmentOptions)
+transitGatewayPeeringAttachment_options = Lens.lens (\TransitGatewayPeeringAttachment' {options} -> options) (\s@TransitGatewayPeeringAttachment' {} a -> s {options = a} :: TransitGatewayPeeringAttachment)
+
+-- | Information about the requester transit gateway.
+transitGatewayPeeringAttachment_requesterTgwInfo :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe PeeringTgwInfo)
+transitGatewayPeeringAttachment_requesterTgwInfo = Lens.lens (\TransitGatewayPeeringAttachment' {requesterTgwInfo} -> requesterTgwInfo) (\s@TransitGatewayPeeringAttachment' {} a -> s {requesterTgwInfo = a} :: TransitGatewayPeeringAttachment)
+
+-- | The state of the transit gateway peering attachment. Note that the
+-- @initiating@ state has been deprecated.
+transitGatewayPeeringAttachment_state :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe TransitGatewayAttachmentState)
+transitGatewayPeeringAttachment_state = Lens.lens (\TransitGatewayPeeringAttachment' {state} -> state) (\s@TransitGatewayPeeringAttachment' {} a -> s {state = a} :: TransitGatewayPeeringAttachment)
+
+-- | The status of the transit gateway peering attachment.
+transitGatewayPeeringAttachment_status :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe PeeringAttachmentStatus)
+transitGatewayPeeringAttachment_status = Lens.lens (\TransitGatewayPeeringAttachment' {status} -> status) (\s@TransitGatewayPeeringAttachment' {} a -> s {status = a} :: TransitGatewayPeeringAttachment)
+
+-- | The tags for the transit gateway peering attachment.
+transitGatewayPeeringAttachment_tags :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe [Tag])
+transitGatewayPeeringAttachment_tags = Lens.lens (\TransitGatewayPeeringAttachment' {tags} -> tags) (\s@TransitGatewayPeeringAttachment' {} a -> s {tags = a} :: TransitGatewayPeeringAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway peering attachment.
+transitGatewayPeeringAttachment_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayPeeringAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayPeeringAttachment_transitGatewayAttachmentId = Lens.lens (\TransitGatewayPeeringAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayPeeringAttachment' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayPeeringAttachment)
+
+instance Data.FromXML TransitGatewayPeeringAttachment where
+  parseXML x =
+    TransitGatewayPeeringAttachment'
+      Prelude.<$> (x Data..@? "accepterTgwInfo")
+      Prelude.<*> (x Data..@? "accepterTransitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "options")
+      Prelude.<*> (x Data..@? "requesterTgwInfo")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPeeringAttachment
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPeeringAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` accepterTgwInfo
+        `Prelude.hashWithSalt` accepterTransitGatewayAttachmentId
+        `Prelude.hashWithSalt` creationTime
+        `Prelude.hashWithSalt` options
+        `Prelude.hashWithSalt` requesterTgwInfo
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` status
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    TransitGatewayPeeringAttachment
+  where
+  rnf TransitGatewayPeeringAttachment' {..} =
+    Prelude.rnf accepterTgwInfo
+      `Prelude.seq` Prelude.rnf accepterTransitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf requesterTgwInfo
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPeeringAttachmentOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayPeeringAttachmentOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPeeringAttachmentOptions.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPeeringAttachmentOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPeeringAttachmentOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DynamicRoutingValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes dynamic routing for the transit gateway peering attachment.
+--
+-- /See:/ 'newTransitGatewayPeeringAttachmentOptions' smart constructor.
+data TransitGatewayPeeringAttachmentOptions = TransitGatewayPeeringAttachmentOptions'
+  { -- | Describes whether dynamic routing is enabled or disabled for the transit
+    -- gateway peering attachment.
+    dynamicRouting :: Prelude.Maybe DynamicRoutingValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPeeringAttachmentOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dynamicRouting', 'transitGatewayPeeringAttachmentOptions_dynamicRouting' - Describes whether dynamic routing is enabled or disabled for the transit
+-- gateway peering attachment.
+newTransitGatewayPeeringAttachmentOptions ::
+  TransitGatewayPeeringAttachmentOptions
+newTransitGatewayPeeringAttachmentOptions =
+  TransitGatewayPeeringAttachmentOptions'
+    { dynamicRouting =
+        Prelude.Nothing
+    }
+
+-- | Describes whether dynamic routing is enabled or disabled for the transit
+-- gateway peering attachment.
+transitGatewayPeeringAttachmentOptions_dynamicRouting :: Lens.Lens' TransitGatewayPeeringAttachmentOptions (Prelude.Maybe DynamicRoutingValue)
+transitGatewayPeeringAttachmentOptions_dynamicRouting = Lens.lens (\TransitGatewayPeeringAttachmentOptions' {dynamicRouting} -> dynamicRouting) (\s@TransitGatewayPeeringAttachmentOptions' {} a -> s {dynamicRouting = a} :: TransitGatewayPeeringAttachmentOptions)
+
+instance
+  Data.FromXML
+    TransitGatewayPeeringAttachmentOptions
+  where
+  parseXML x =
+    TransitGatewayPeeringAttachmentOptions'
+      Prelude.<$> (x Data..@? "dynamicRouting")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPeeringAttachmentOptions
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPeeringAttachmentOptions' {..} =
+      _salt `Prelude.hashWithSalt` dynamicRouting
+
+instance
+  Prelude.NFData
+    TransitGatewayPeeringAttachmentOptions
+  where
+  rnf TransitGatewayPeeringAttachmentOptions' {..} =
+    Prelude.rnf dynamicRouting
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPolicyRule.hs b/gen/Amazonka/EC2/Types/TransitGatewayPolicyRule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPolicyRule.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPolicyRule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPolicyRule where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayPolicyRuleMetaData
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a rule associated with a transit gateway policy.
+--
+-- /See:/ 'newTransitGatewayPolicyRule' smart constructor.
+data TransitGatewayPolicyRule = TransitGatewayPolicyRule'
+  { -- | The destination CIDR block for the transit gateway policy rule.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The port range for the transit gateway policy rule. Currently this is
+    -- set to * (all).
+    destinationPortRange :: Prelude.Maybe Prelude.Text,
+    -- | The meta data tags used for the transit gateway policy rule.
+    metaData :: Prelude.Maybe TransitGatewayPolicyRuleMetaData,
+    -- | The protocol used by the transit gateway policy rule.
+    protocol :: Prelude.Maybe Prelude.Text,
+    -- | The source CIDR block for the transit gateway policy rule.
+    sourceCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The port range for the transit gateway policy rule. Currently this is
+    -- set to * (all).
+    sourcePortRange :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPolicyRule' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidrBlock', 'transitGatewayPolicyRule_destinationCidrBlock' - The destination CIDR block for the transit gateway policy rule.
+--
+-- 'destinationPortRange', 'transitGatewayPolicyRule_destinationPortRange' - The port range for the transit gateway policy rule. Currently this is
+-- set to * (all).
+--
+-- 'metaData', 'transitGatewayPolicyRule_metaData' - The meta data tags used for the transit gateway policy rule.
+--
+-- 'protocol', 'transitGatewayPolicyRule_protocol' - The protocol used by the transit gateway policy rule.
+--
+-- 'sourceCidrBlock', 'transitGatewayPolicyRule_sourceCidrBlock' - The source CIDR block for the transit gateway policy rule.
+--
+-- 'sourcePortRange', 'transitGatewayPolicyRule_sourcePortRange' - The port range for the transit gateway policy rule. Currently this is
+-- set to * (all).
+newTransitGatewayPolicyRule ::
+  TransitGatewayPolicyRule
+newTransitGatewayPolicyRule =
+  TransitGatewayPolicyRule'
+    { destinationCidrBlock =
+        Prelude.Nothing,
+      destinationPortRange = Prelude.Nothing,
+      metaData = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      sourceCidrBlock = Prelude.Nothing,
+      sourcePortRange = Prelude.Nothing
+    }
+
+-- | The destination CIDR block for the transit gateway policy rule.
+transitGatewayPolicyRule_destinationCidrBlock :: Lens.Lens' TransitGatewayPolicyRule (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRule_destinationCidrBlock = Lens.lens (\TransitGatewayPolicyRule' {destinationCidrBlock} -> destinationCidrBlock) (\s@TransitGatewayPolicyRule' {} a -> s {destinationCidrBlock = a} :: TransitGatewayPolicyRule)
+
+-- | The port range for the transit gateway policy rule. Currently this is
+-- set to * (all).
+transitGatewayPolicyRule_destinationPortRange :: Lens.Lens' TransitGatewayPolicyRule (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRule_destinationPortRange = Lens.lens (\TransitGatewayPolicyRule' {destinationPortRange} -> destinationPortRange) (\s@TransitGatewayPolicyRule' {} a -> s {destinationPortRange = a} :: TransitGatewayPolicyRule)
+
+-- | The meta data tags used for the transit gateway policy rule.
+transitGatewayPolicyRule_metaData :: Lens.Lens' TransitGatewayPolicyRule (Prelude.Maybe TransitGatewayPolicyRuleMetaData)
+transitGatewayPolicyRule_metaData = Lens.lens (\TransitGatewayPolicyRule' {metaData} -> metaData) (\s@TransitGatewayPolicyRule' {} a -> s {metaData = a} :: TransitGatewayPolicyRule)
+
+-- | The protocol used by the transit gateway policy rule.
+transitGatewayPolicyRule_protocol :: Lens.Lens' TransitGatewayPolicyRule (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRule_protocol = Lens.lens (\TransitGatewayPolicyRule' {protocol} -> protocol) (\s@TransitGatewayPolicyRule' {} a -> s {protocol = a} :: TransitGatewayPolicyRule)
+
+-- | The source CIDR block for the transit gateway policy rule.
+transitGatewayPolicyRule_sourceCidrBlock :: Lens.Lens' TransitGatewayPolicyRule (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRule_sourceCidrBlock = Lens.lens (\TransitGatewayPolicyRule' {sourceCidrBlock} -> sourceCidrBlock) (\s@TransitGatewayPolicyRule' {} a -> s {sourceCidrBlock = a} :: TransitGatewayPolicyRule)
+
+-- | The port range for the transit gateway policy rule. Currently this is
+-- set to * (all).
+transitGatewayPolicyRule_sourcePortRange :: Lens.Lens' TransitGatewayPolicyRule (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRule_sourcePortRange = Lens.lens (\TransitGatewayPolicyRule' {sourcePortRange} -> sourcePortRange) (\s@TransitGatewayPolicyRule' {} a -> s {sourcePortRange = a} :: TransitGatewayPolicyRule)
+
+instance Data.FromXML TransitGatewayPolicyRule where
+  parseXML x =
+    TransitGatewayPolicyRule'
+      Prelude.<$> (x Data..@? "destinationCidrBlock")
+      Prelude.<*> (x Data..@? "destinationPortRange")
+      Prelude.<*> (x Data..@? "metaData")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> (x Data..@? "sourceCidrBlock")
+      Prelude.<*> (x Data..@? "sourcePortRange")
+
+instance Prelude.Hashable TransitGatewayPolicyRule where
+  hashWithSalt _salt TransitGatewayPolicyRule' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` destinationPortRange
+      `Prelude.hashWithSalt` metaData
+      `Prelude.hashWithSalt` protocol
+      `Prelude.hashWithSalt` sourceCidrBlock
+      `Prelude.hashWithSalt` sourcePortRange
+
+instance Prelude.NFData TransitGatewayPolicyRule where
+  rnf TransitGatewayPolicyRule' {..} =
+    Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf destinationPortRange
+      `Prelude.seq` Prelude.rnf metaData
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf sourceCidrBlock
+      `Prelude.seq` Prelude.rnf sourcePortRange
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPolicyRuleMetaData.hs b/gen/Amazonka/EC2/Types/TransitGatewayPolicyRuleMetaData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPolicyRuleMetaData.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPolicyRuleMetaData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPolicyRuleMetaData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the meta data tags associated with a transit gateway policy
+-- rule.
+--
+-- /See:/ 'newTransitGatewayPolicyRuleMetaData' smart constructor.
+data TransitGatewayPolicyRuleMetaData = TransitGatewayPolicyRuleMetaData'
+  { -- | The key name for the transit gateway policy rule meta data tag.
+    metaDataKey :: Prelude.Maybe Prelude.Text,
+    -- | The value of the key for the transit gateway policy rule meta data tag.
+    metaDataValue :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPolicyRuleMetaData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'metaDataKey', 'transitGatewayPolicyRuleMetaData_metaDataKey' - The key name for the transit gateway policy rule meta data tag.
+--
+-- 'metaDataValue', 'transitGatewayPolicyRuleMetaData_metaDataValue' - The value of the key for the transit gateway policy rule meta data tag.
+newTransitGatewayPolicyRuleMetaData ::
+  TransitGatewayPolicyRuleMetaData
+newTransitGatewayPolicyRuleMetaData =
+  TransitGatewayPolicyRuleMetaData'
+    { metaDataKey =
+        Prelude.Nothing,
+      metaDataValue = Prelude.Nothing
+    }
+
+-- | The key name for the transit gateway policy rule meta data tag.
+transitGatewayPolicyRuleMetaData_metaDataKey :: Lens.Lens' TransitGatewayPolicyRuleMetaData (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRuleMetaData_metaDataKey = Lens.lens (\TransitGatewayPolicyRuleMetaData' {metaDataKey} -> metaDataKey) (\s@TransitGatewayPolicyRuleMetaData' {} a -> s {metaDataKey = a} :: TransitGatewayPolicyRuleMetaData)
+
+-- | The value of the key for the transit gateway policy rule meta data tag.
+transitGatewayPolicyRuleMetaData_metaDataValue :: Lens.Lens' TransitGatewayPolicyRuleMetaData (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyRuleMetaData_metaDataValue = Lens.lens (\TransitGatewayPolicyRuleMetaData' {metaDataValue} -> metaDataValue) (\s@TransitGatewayPolicyRuleMetaData' {} a -> s {metaDataValue = a} :: TransitGatewayPolicyRuleMetaData)
+
+instance
+  Data.FromXML
+    TransitGatewayPolicyRuleMetaData
+  where
+  parseXML x =
+    TransitGatewayPolicyRuleMetaData'
+      Prelude.<$> (x Data..@? "metaDataKey")
+      Prelude.<*> (x Data..@? "metaDataValue")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPolicyRuleMetaData
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPolicyRuleMetaData' {..} =
+      _salt
+        `Prelude.hashWithSalt` metaDataKey
+        `Prelude.hashWithSalt` metaDataValue
+
+instance
+  Prelude.NFData
+    TransitGatewayPolicyRuleMetaData
+  where
+  rnf TransitGatewayPolicyRuleMetaData' {..} =
+    Prelude.rnf metaDataKey
+      `Prelude.seq` Prelude.rnf metaDataValue
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPolicyTable.hs b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTable.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPolicyTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPolicyTable where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayPolicyTableState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway policy table.
+--
+-- /See:/ 'newTransitGatewayPolicyTable' smart constructor.
+data TransitGatewayPolicyTable = TransitGatewayPolicyTable'
+  { -- | The timestamp when the transit gateway policy table was created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The state of the transit gateway policy table
+    state :: Prelude.Maybe TransitGatewayPolicyTableState,
+    -- | he key-value pairs associated with the transit gateway policy table.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway policy table.
+    transitGatewayPolicyTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPolicyTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'transitGatewayPolicyTable_creationTime' - The timestamp when the transit gateway policy table was created.
+--
+-- 'state', 'transitGatewayPolicyTable_state' - The state of the transit gateway policy table
+--
+-- 'tags', 'transitGatewayPolicyTable_tags' - he key-value pairs associated with the transit gateway policy table.
+--
+-- 'transitGatewayId', 'transitGatewayPolicyTable_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'transitGatewayPolicyTableId', 'transitGatewayPolicyTable_transitGatewayPolicyTableId' - The ID of the transit gateway policy table.
+newTransitGatewayPolicyTable ::
+  TransitGatewayPolicyTable
+newTransitGatewayPolicyTable =
+  TransitGatewayPolicyTable'
+    { creationTime =
+        Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      transitGatewayPolicyTableId = Prelude.Nothing
+    }
+
+-- | The timestamp when the transit gateway policy table was created.
+transitGatewayPolicyTable_creationTime :: Lens.Lens' TransitGatewayPolicyTable (Prelude.Maybe Prelude.UTCTime)
+transitGatewayPolicyTable_creationTime = Lens.lens (\TransitGatewayPolicyTable' {creationTime} -> creationTime) (\s@TransitGatewayPolicyTable' {} a -> s {creationTime = a} :: TransitGatewayPolicyTable) Prelude.. Lens.mapping Data._Time
+
+-- | The state of the transit gateway policy table
+transitGatewayPolicyTable_state :: Lens.Lens' TransitGatewayPolicyTable (Prelude.Maybe TransitGatewayPolicyTableState)
+transitGatewayPolicyTable_state = Lens.lens (\TransitGatewayPolicyTable' {state} -> state) (\s@TransitGatewayPolicyTable' {} a -> s {state = a} :: TransitGatewayPolicyTable)
+
+-- | he key-value pairs associated with the transit gateway policy table.
+transitGatewayPolicyTable_tags :: Lens.Lens' TransitGatewayPolicyTable (Prelude.Maybe [Tag])
+transitGatewayPolicyTable_tags = Lens.lens (\TransitGatewayPolicyTable' {tags} -> tags) (\s@TransitGatewayPolicyTable' {} a -> s {tags = a} :: TransitGatewayPolicyTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+transitGatewayPolicyTable_transitGatewayId :: Lens.Lens' TransitGatewayPolicyTable (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTable_transitGatewayId = Lens.lens (\TransitGatewayPolicyTable' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayPolicyTable' {} a -> s {transitGatewayId = a} :: TransitGatewayPolicyTable)
+
+-- | The ID of the transit gateway policy table.
+transitGatewayPolicyTable_transitGatewayPolicyTableId :: Lens.Lens' TransitGatewayPolicyTable (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTable_transitGatewayPolicyTableId = Lens.lens (\TransitGatewayPolicyTable' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@TransitGatewayPolicyTable' {} a -> s {transitGatewayPolicyTableId = a} :: TransitGatewayPolicyTable)
+
+instance Data.FromXML TransitGatewayPolicyTable where
+  parseXML x =
+    TransitGatewayPolicyTable'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "transitGatewayPolicyTableId")
+
+instance Prelude.Hashable TransitGatewayPolicyTable where
+  hashWithSalt _salt TransitGatewayPolicyTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` transitGatewayPolicyTableId
+
+instance Prelude.NFData TransitGatewayPolicyTable where
+  rnf TransitGatewayPolicyTable' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableAssociation.hs b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableAssociation.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPolicyTableAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPolicyTableAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAssociationState
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway policy table association.
+--
+-- /See:/ 'newTransitGatewayPolicyTableAssociation' smart constructor.
+data TransitGatewayPolicyTableAssociation = TransitGatewayPolicyTableAssociation'
+  { -- | The resource ID of the transit gateway attachment.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type for the transit gateway policy table association.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The state of the transit gateway policy table association.
+    state :: Prelude.Maybe TransitGatewayAssociationState,
+    -- | The ID of the transit gateway attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway policy table.
+    transitGatewayPolicyTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPolicyTableAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayPolicyTableAssociation_resourceId' - The resource ID of the transit gateway attachment.
+--
+-- 'resourceType', 'transitGatewayPolicyTableAssociation_resourceType' - The resource type for the transit gateway policy table association.
+--
+-- 'state', 'transitGatewayPolicyTableAssociation_state' - The state of the transit gateway policy table association.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayPolicyTableAssociation_transitGatewayAttachmentId' - The ID of the transit gateway attachment.
+--
+-- 'transitGatewayPolicyTableId', 'transitGatewayPolicyTableAssociation_transitGatewayPolicyTableId' - The ID of the transit gateway policy table.
+newTransitGatewayPolicyTableAssociation ::
+  TransitGatewayPolicyTableAssociation
+newTransitGatewayPolicyTableAssociation =
+  TransitGatewayPolicyTableAssociation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayPolicyTableId =
+        Prelude.Nothing
+    }
+
+-- | The resource ID of the transit gateway attachment.
+transitGatewayPolicyTableAssociation_resourceId :: Lens.Lens' TransitGatewayPolicyTableAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTableAssociation_resourceId = Lens.lens (\TransitGatewayPolicyTableAssociation' {resourceId} -> resourceId) (\s@TransitGatewayPolicyTableAssociation' {} a -> s {resourceId = a} :: TransitGatewayPolicyTableAssociation)
+
+-- | The resource type for the transit gateway policy table association.
+transitGatewayPolicyTableAssociation_resourceType :: Lens.Lens' TransitGatewayPolicyTableAssociation (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayPolicyTableAssociation_resourceType = Lens.lens (\TransitGatewayPolicyTableAssociation' {resourceType} -> resourceType) (\s@TransitGatewayPolicyTableAssociation' {} a -> s {resourceType = a} :: TransitGatewayPolicyTableAssociation)
+
+-- | The state of the transit gateway policy table association.
+transitGatewayPolicyTableAssociation_state :: Lens.Lens' TransitGatewayPolicyTableAssociation (Prelude.Maybe TransitGatewayAssociationState)
+transitGatewayPolicyTableAssociation_state = Lens.lens (\TransitGatewayPolicyTableAssociation' {state} -> state) (\s@TransitGatewayPolicyTableAssociation' {} a -> s {state = a} :: TransitGatewayPolicyTableAssociation)
+
+-- | The ID of the transit gateway attachment.
+transitGatewayPolicyTableAssociation_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayPolicyTableAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTableAssociation_transitGatewayAttachmentId = Lens.lens (\TransitGatewayPolicyTableAssociation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayPolicyTableAssociation' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayPolicyTableAssociation)
+
+-- | The ID of the transit gateway policy table.
+transitGatewayPolicyTableAssociation_transitGatewayPolicyTableId :: Lens.Lens' TransitGatewayPolicyTableAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTableAssociation_transitGatewayPolicyTableId = Lens.lens (\TransitGatewayPolicyTableAssociation' {transitGatewayPolicyTableId} -> transitGatewayPolicyTableId) (\s@TransitGatewayPolicyTableAssociation' {} a -> s {transitGatewayPolicyTableId = a} :: TransitGatewayPolicyTableAssociation)
+
+instance
+  Data.FromXML
+    TransitGatewayPolicyTableAssociation
+  where
+  parseXML x =
+    TransitGatewayPolicyTableAssociation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayPolicyTableId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPolicyTableAssociation
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPolicyTableAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayPolicyTableId
+
+instance
+  Prelude.NFData
+    TransitGatewayPolicyTableAssociation
+  where
+  rnf TransitGatewayPolicyTableAssociation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayPolicyTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableEntry.hs b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableEntry.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPolicyTableEntry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPolicyTableEntry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayPolicyRule
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway policy table entry
+--
+-- /See:/ 'newTransitGatewayPolicyTableEntry' smart constructor.
+data TransitGatewayPolicyTableEntry = TransitGatewayPolicyTableEntry'
+  { -- | The policy rule associated with the transit gateway policy table.
+    policyRule :: Prelude.Maybe TransitGatewayPolicyRule,
+    -- | The rule number for the transit gateway policy table entry.
+    policyRuleNumber :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the target route table.
+    targetRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPolicyTableEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'policyRule', 'transitGatewayPolicyTableEntry_policyRule' - The policy rule associated with the transit gateway policy table.
+--
+-- 'policyRuleNumber', 'transitGatewayPolicyTableEntry_policyRuleNumber' - The rule number for the transit gateway policy table entry.
+--
+-- 'targetRouteTableId', 'transitGatewayPolicyTableEntry_targetRouteTableId' - The ID of the target route table.
+newTransitGatewayPolicyTableEntry ::
+  TransitGatewayPolicyTableEntry
+newTransitGatewayPolicyTableEntry =
+  TransitGatewayPolicyTableEntry'
+    { policyRule =
+        Prelude.Nothing,
+      policyRuleNumber = Prelude.Nothing,
+      targetRouteTableId = Prelude.Nothing
+    }
+
+-- | The policy rule associated with the transit gateway policy table.
+transitGatewayPolicyTableEntry_policyRule :: Lens.Lens' TransitGatewayPolicyTableEntry (Prelude.Maybe TransitGatewayPolicyRule)
+transitGatewayPolicyTableEntry_policyRule = Lens.lens (\TransitGatewayPolicyTableEntry' {policyRule} -> policyRule) (\s@TransitGatewayPolicyTableEntry' {} a -> s {policyRule = a} :: TransitGatewayPolicyTableEntry)
+
+-- | The rule number for the transit gateway policy table entry.
+transitGatewayPolicyTableEntry_policyRuleNumber :: Lens.Lens' TransitGatewayPolicyTableEntry (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTableEntry_policyRuleNumber = Lens.lens (\TransitGatewayPolicyTableEntry' {policyRuleNumber} -> policyRuleNumber) (\s@TransitGatewayPolicyTableEntry' {} a -> s {policyRuleNumber = a} :: TransitGatewayPolicyTableEntry)
+
+-- | The ID of the target route table.
+transitGatewayPolicyTableEntry_targetRouteTableId :: Lens.Lens' TransitGatewayPolicyTableEntry (Prelude.Maybe Prelude.Text)
+transitGatewayPolicyTableEntry_targetRouteTableId = Lens.lens (\TransitGatewayPolicyTableEntry' {targetRouteTableId} -> targetRouteTableId) (\s@TransitGatewayPolicyTableEntry' {} a -> s {targetRouteTableId = a} :: TransitGatewayPolicyTableEntry)
+
+instance Data.FromXML TransitGatewayPolicyTableEntry where
+  parseXML x =
+    TransitGatewayPolicyTableEntry'
+      Prelude.<$> (x Data..@? "policyRule")
+      Prelude.<*> (x Data..@? "policyRuleNumber")
+      Prelude.<*> (x Data..@? "targetRouteTableId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPolicyTableEntry
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPolicyTableEntry' {..} =
+      _salt
+        `Prelude.hashWithSalt` policyRule
+        `Prelude.hashWithSalt` policyRuleNumber
+        `Prelude.hashWithSalt` targetRouteTableId
+
+instance
+  Prelude.NFData
+    TransitGatewayPolicyTableEntry
+  where
+  rnf TransitGatewayPolicyTableEntry' {..} =
+    Prelude.rnf policyRule
+      `Prelude.seq` Prelude.rnf policyRuleNumber
+      `Prelude.seq` Prelude.rnf targetRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableState.hs b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPolicyTableState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPolicyTableState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPolicyTableState
+  ( TransitGatewayPolicyTableState
+      ( ..,
+        TransitGatewayPolicyTableState_Available,
+        TransitGatewayPolicyTableState_Deleted,
+        TransitGatewayPolicyTableState_Deleting,
+        TransitGatewayPolicyTableState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayPolicyTableState = TransitGatewayPolicyTableState'
+  { fromTransitGatewayPolicyTableState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayPolicyTableState_Available :: TransitGatewayPolicyTableState
+pattern TransitGatewayPolicyTableState_Available = TransitGatewayPolicyTableState' "available"
+
+pattern TransitGatewayPolicyTableState_Deleted :: TransitGatewayPolicyTableState
+pattern TransitGatewayPolicyTableState_Deleted = TransitGatewayPolicyTableState' "deleted"
+
+pattern TransitGatewayPolicyTableState_Deleting :: TransitGatewayPolicyTableState
+pattern TransitGatewayPolicyTableState_Deleting = TransitGatewayPolicyTableState' "deleting"
+
+pattern TransitGatewayPolicyTableState_Pending :: TransitGatewayPolicyTableState
+pattern TransitGatewayPolicyTableState_Pending = TransitGatewayPolicyTableState' "pending"
+
+{-# COMPLETE
+  TransitGatewayPolicyTableState_Available,
+  TransitGatewayPolicyTableState_Deleted,
+  TransitGatewayPolicyTableState_Deleting,
+  TransitGatewayPolicyTableState_Pending,
+  TransitGatewayPolicyTableState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPrefixListAttachment.hs b/gen/Amazonka/EC2/Types/TransitGatewayPrefixListAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPrefixListAttachment.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPrefixListAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPrefixListAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway prefix list attachment.
+--
+-- /See:/ 'newTransitGatewayPrefixListAttachment' smart constructor.
+data TransitGatewayPrefixListAttachment = TransitGatewayPrefixListAttachment'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPrefixListAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayPrefixListAttachment_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'transitGatewayPrefixListAttachment_resourceType' - The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayPrefixListAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+newTransitGatewayPrefixListAttachment ::
+  TransitGatewayPrefixListAttachment
+newTransitGatewayPrefixListAttachment =
+  TransitGatewayPrefixListAttachment'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayPrefixListAttachment_resourceId :: Lens.Lens' TransitGatewayPrefixListAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayPrefixListAttachment_resourceId = Lens.lens (\TransitGatewayPrefixListAttachment' {resourceId} -> resourceId) (\s@TransitGatewayPrefixListAttachment' {} a -> s {resourceId = a} :: TransitGatewayPrefixListAttachment)
+
+-- | The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayPrefixListAttachment_resourceType :: Lens.Lens' TransitGatewayPrefixListAttachment (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayPrefixListAttachment_resourceType = Lens.lens (\TransitGatewayPrefixListAttachment' {resourceType} -> resourceType) (\s@TransitGatewayPrefixListAttachment' {} a -> s {resourceType = a} :: TransitGatewayPrefixListAttachment)
+
+-- | The ID of the attachment.
+transitGatewayPrefixListAttachment_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayPrefixListAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayPrefixListAttachment_transitGatewayAttachmentId = Lens.lens (\TransitGatewayPrefixListAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayPrefixListAttachment' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayPrefixListAttachment)
+
+instance
+  Data.FromXML
+    TransitGatewayPrefixListAttachment
+  where
+  parseXML x =
+    TransitGatewayPrefixListAttachment'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPrefixListAttachment
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPrefixListAttachment' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    TransitGatewayPrefixListAttachment
+  where
+  rnf TransitGatewayPrefixListAttachment' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPrefixListReference.hs b/gen/Amazonka/EC2/Types/TransitGatewayPrefixListReference.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPrefixListReference.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPrefixListReference
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPrefixListReference where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayPrefixListAttachment
+import Amazonka.EC2.Types.TransitGatewayPrefixListReferenceState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a prefix list reference.
+--
+-- /See:/ 'newTransitGatewayPrefixListReference' smart constructor.
+data TransitGatewayPrefixListReference = TransitGatewayPrefixListReference'
+  { -- | Indicates whether traffic that matches this route is dropped.
+    blackhole :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list owner.
+    prefixListOwnerId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the prefix list reference.
+    state :: Prelude.Maybe TransitGatewayPrefixListReferenceState,
+    -- | Information about the transit gateway attachment.
+    transitGatewayAttachment :: Prelude.Maybe TransitGatewayPrefixListAttachment,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPrefixListReference' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'blackhole', 'transitGatewayPrefixListReference_blackhole' - Indicates whether traffic that matches this route is dropped.
+--
+-- 'prefixListId', 'transitGatewayPrefixListReference_prefixListId' - The ID of the prefix list.
+--
+-- 'prefixListOwnerId', 'transitGatewayPrefixListReference_prefixListOwnerId' - The ID of the prefix list owner.
+--
+-- 'state', 'transitGatewayPrefixListReference_state' - The state of the prefix list reference.
+--
+-- 'transitGatewayAttachment', 'transitGatewayPrefixListReference_transitGatewayAttachment' - Information about the transit gateway attachment.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayPrefixListReference_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newTransitGatewayPrefixListReference ::
+  TransitGatewayPrefixListReference
+newTransitGatewayPrefixListReference =
+  TransitGatewayPrefixListReference'
+    { blackhole =
+        Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      prefixListOwnerId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachment =
+        Prelude.Nothing,
+      transitGatewayRouteTableId =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether traffic that matches this route is dropped.
+transitGatewayPrefixListReference_blackhole :: Lens.Lens' TransitGatewayPrefixListReference (Prelude.Maybe Prelude.Bool)
+transitGatewayPrefixListReference_blackhole = Lens.lens (\TransitGatewayPrefixListReference' {blackhole} -> blackhole) (\s@TransitGatewayPrefixListReference' {} a -> s {blackhole = a} :: TransitGatewayPrefixListReference)
+
+-- | The ID of the prefix list.
+transitGatewayPrefixListReference_prefixListId :: Lens.Lens' TransitGatewayPrefixListReference (Prelude.Maybe Prelude.Text)
+transitGatewayPrefixListReference_prefixListId = Lens.lens (\TransitGatewayPrefixListReference' {prefixListId} -> prefixListId) (\s@TransitGatewayPrefixListReference' {} a -> s {prefixListId = a} :: TransitGatewayPrefixListReference)
+
+-- | The ID of the prefix list owner.
+transitGatewayPrefixListReference_prefixListOwnerId :: Lens.Lens' TransitGatewayPrefixListReference (Prelude.Maybe Prelude.Text)
+transitGatewayPrefixListReference_prefixListOwnerId = Lens.lens (\TransitGatewayPrefixListReference' {prefixListOwnerId} -> prefixListOwnerId) (\s@TransitGatewayPrefixListReference' {} a -> s {prefixListOwnerId = a} :: TransitGatewayPrefixListReference)
+
+-- | The state of the prefix list reference.
+transitGatewayPrefixListReference_state :: Lens.Lens' TransitGatewayPrefixListReference (Prelude.Maybe TransitGatewayPrefixListReferenceState)
+transitGatewayPrefixListReference_state = Lens.lens (\TransitGatewayPrefixListReference' {state} -> state) (\s@TransitGatewayPrefixListReference' {} a -> s {state = a} :: TransitGatewayPrefixListReference)
+
+-- | Information about the transit gateway attachment.
+transitGatewayPrefixListReference_transitGatewayAttachment :: Lens.Lens' TransitGatewayPrefixListReference (Prelude.Maybe TransitGatewayPrefixListAttachment)
+transitGatewayPrefixListReference_transitGatewayAttachment = Lens.lens (\TransitGatewayPrefixListReference' {transitGatewayAttachment} -> transitGatewayAttachment) (\s@TransitGatewayPrefixListReference' {} a -> s {transitGatewayAttachment = a} :: TransitGatewayPrefixListReference)
+
+-- | The ID of the transit gateway route table.
+transitGatewayPrefixListReference_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayPrefixListReference (Prelude.Maybe Prelude.Text)
+transitGatewayPrefixListReference_transitGatewayRouteTableId = Lens.lens (\TransitGatewayPrefixListReference' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayPrefixListReference' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayPrefixListReference)
+
+instance
+  Data.FromXML
+    TransitGatewayPrefixListReference
+  where
+  parseXML x =
+    TransitGatewayPrefixListReference'
+      Prelude.<$> (x Data..@? "blackhole")
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "prefixListOwnerId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayAttachment")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayPrefixListReference
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayPrefixListReference' {..} =
+      _salt
+        `Prelude.hashWithSalt` blackhole
+        `Prelude.hashWithSalt` prefixListId
+        `Prelude.hashWithSalt` prefixListOwnerId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` transitGatewayAttachment
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    TransitGatewayPrefixListReference
+  where
+  rnf TransitGatewayPrefixListReference' {..} =
+    Prelude.rnf blackhole
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf prefixListOwnerId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachment
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPrefixListReferenceState.hs b/gen/Amazonka/EC2/Types/TransitGatewayPrefixListReferenceState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPrefixListReferenceState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPrefixListReferenceState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPrefixListReferenceState
+  ( TransitGatewayPrefixListReferenceState
+      ( ..,
+        TransitGatewayPrefixListReferenceState_Available,
+        TransitGatewayPrefixListReferenceState_Deleting,
+        TransitGatewayPrefixListReferenceState_Modifying,
+        TransitGatewayPrefixListReferenceState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayPrefixListReferenceState = TransitGatewayPrefixListReferenceState'
+  { fromTransitGatewayPrefixListReferenceState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayPrefixListReferenceState_Available :: TransitGatewayPrefixListReferenceState
+pattern TransitGatewayPrefixListReferenceState_Available = TransitGatewayPrefixListReferenceState' "available"
+
+pattern TransitGatewayPrefixListReferenceState_Deleting :: TransitGatewayPrefixListReferenceState
+pattern TransitGatewayPrefixListReferenceState_Deleting = TransitGatewayPrefixListReferenceState' "deleting"
+
+pattern TransitGatewayPrefixListReferenceState_Modifying :: TransitGatewayPrefixListReferenceState
+pattern TransitGatewayPrefixListReferenceState_Modifying = TransitGatewayPrefixListReferenceState' "modifying"
+
+pattern TransitGatewayPrefixListReferenceState_Pending :: TransitGatewayPrefixListReferenceState
+pattern TransitGatewayPrefixListReferenceState_Pending = TransitGatewayPrefixListReferenceState' "pending"
+
+{-# COMPLETE
+  TransitGatewayPrefixListReferenceState_Available,
+  TransitGatewayPrefixListReferenceState_Deleting,
+  TransitGatewayPrefixListReferenceState_Modifying,
+  TransitGatewayPrefixListReferenceState_Pending,
+  TransitGatewayPrefixListReferenceState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPropagation.hs b/gen/Amazonka/EC2/Types/TransitGatewayPropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPropagation.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPropagation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import Amazonka.EC2.Types.TransitGatewayPropagationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes route propagation.
+--
+-- /See:/ 'newTransitGatewayPropagation' smart constructor.
+data TransitGatewayPropagation = TransitGatewayPropagation'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The state.
+    state :: Prelude.Maybe TransitGatewayPropagationState,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayPropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayPropagation_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'transitGatewayPropagation_resourceType' - The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'state', 'transitGatewayPropagation_state' - The state.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayPropagation_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'transitGatewayPropagation_transitGatewayRouteTableAnnouncementId' - The ID of the transit gateway route table announcement.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayPropagation_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newTransitGatewayPropagation ::
+  TransitGatewayPropagation
+newTransitGatewayPropagation =
+  TransitGatewayPropagation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing,
+      transitGatewayRouteTableAnnouncementId =
+        Prelude.Nothing,
+      transitGatewayRouteTableId = Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayPropagation_resourceId :: Lens.Lens' TransitGatewayPropagation (Prelude.Maybe Prelude.Text)
+transitGatewayPropagation_resourceId = Lens.lens (\TransitGatewayPropagation' {resourceId} -> resourceId) (\s@TransitGatewayPropagation' {} a -> s {resourceId = a} :: TransitGatewayPropagation)
+
+-- | The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayPropagation_resourceType :: Lens.Lens' TransitGatewayPropagation (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayPropagation_resourceType = Lens.lens (\TransitGatewayPropagation' {resourceType} -> resourceType) (\s@TransitGatewayPropagation' {} a -> s {resourceType = a} :: TransitGatewayPropagation)
+
+-- | The state.
+transitGatewayPropagation_state :: Lens.Lens' TransitGatewayPropagation (Prelude.Maybe TransitGatewayPropagationState)
+transitGatewayPropagation_state = Lens.lens (\TransitGatewayPropagation' {state} -> state) (\s@TransitGatewayPropagation' {} a -> s {state = a} :: TransitGatewayPropagation)
+
+-- | The ID of the attachment.
+transitGatewayPropagation_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayPropagation (Prelude.Maybe Prelude.Text)
+transitGatewayPropagation_transitGatewayAttachmentId = Lens.lens (\TransitGatewayPropagation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayPropagation' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayPropagation)
+
+-- | The ID of the transit gateway route table announcement.
+transitGatewayPropagation_transitGatewayRouteTableAnnouncementId :: Lens.Lens' TransitGatewayPropagation (Prelude.Maybe Prelude.Text)
+transitGatewayPropagation_transitGatewayRouteTableAnnouncementId = Lens.lens (\TransitGatewayPropagation' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@TransitGatewayPropagation' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: TransitGatewayPropagation)
+
+-- | The ID of the transit gateway route table.
+transitGatewayPropagation_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayPropagation (Prelude.Maybe Prelude.Text)
+transitGatewayPropagation_transitGatewayRouteTableId = Lens.lens (\TransitGatewayPropagation' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayPropagation' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayPropagation)
+
+instance Data.FromXML TransitGatewayPropagation where
+  parseXML x =
+    TransitGatewayPropagation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableAnnouncementId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance Prelude.Hashable TransitGatewayPropagation where
+  hashWithSalt _salt TransitGatewayPropagation' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance Prelude.NFData TransitGatewayPropagation where
+  rnf TransitGatewayPropagation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayPropagationState.hs b/gen/Amazonka/EC2/Types/TransitGatewayPropagationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayPropagationState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayPropagationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayPropagationState
+  ( TransitGatewayPropagationState
+      ( ..,
+        TransitGatewayPropagationState_Disabled,
+        TransitGatewayPropagationState_Disabling,
+        TransitGatewayPropagationState_Enabled,
+        TransitGatewayPropagationState_Enabling
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayPropagationState = TransitGatewayPropagationState'
+  { fromTransitGatewayPropagationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayPropagationState_Disabled :: TransitGatewayPropagationState
+pattern TransitGatewayPropagationState_Disabled = TransitGatewayPropagationState' "disabled"
+
+pattern TransitGatewayPropagationState_Disabling :: TransitGatewayPropagationState
+pattern TransitGatewayPropagationState_Disabling = TransitGatewayPropagationState' "disabling"
+
+pattern TransitGatewayPropagationState_Enabled :: TransitGatewayPropagationState
+pattern TransitGatewayPropagationState_Enabled = TransitGatewayPropagationState' "enabled"
+
+pattern TransitGatewayPropagationState_Enabling :: TransitGatewayPropagationState
+pattern TransitGatewayPropagationState_Enabling = TransitGatewayPropagationState' "enabling"
+
+{-# COMPLETE
+  TransitGatewayPropagationState_Disabled,
+  TransitGatewayPropagationState_Disabling,
+  TransitGatewayPropagationState_Enabled,
+  TransitGatewayPropagationState_Enabling,
+  TransitGatewayPropagationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRequestOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayRequestOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRequestOptions.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRequestOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRequestOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AutoAcceptSharedAttachmentsValue
+import Amazonka.EC2.Types.DefaultRouteTableAssociationValue
+import Amazonka.EC2.Types.DefaultRouteTablePropagationValue
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.MulticastSupportValue
+import Amazonka.EC2.Types.VpnEcmpSupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the options for a transit gateway.
+--
+-- /See:/ 'newTransitGatewayRequestOptions' smart constructor.
+data TransitGatewayRequestOptions = TransitGatewayRequestOptions'
+  { -- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+    -- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+    -- 4294967294 for 32-bit ASNs. The default is @64512@.
+    amazonSideAsn :: Prelude.Maybe Prelude.Integer,
+    -- | Enable or disable automatic acceptance of attachment requests. Disabled
+    -- by default.
+    autoAcceptSharedAttachments :: Prelude.Maybe AutoAcceptSharedAttachmentsValue,
+    -- | Enable or disable automatic association with the default association
+    -- route table. Enabled by default.
+    defaultRouteTableAssociation :: Prelude.Maybe DefaultRouteTableAssociationValue,
+    -- | Enable or disable automatic propagation of routes to the default
+    -- propagation route table. Enabled by default.
+    defaultRouteTablePropagation :: Prelude.Maybe DefaultRouteTablePropagationValue,
+    -- | Enable or disable DNS support. Enabled by default.
+    dnsSupport :: Prelude.Maybe DnsSupportValue,
+    -- | Indicates whether multicast is enabled on the transit gateway
+    multicastSupport :: Prelude.Maybe MulticastSupportValue,
+    -- | One or more IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a
+    -- size \/24 CIDR block or larger for IPv4, or a size \/64 CIDR block or
+    -- larger for IPv6.
+    transitGatewayCidrBlocks :: Prelude.Maybe [Prelude.Text],
+    -- | Enable or disable Equal Cost Multipath Protocol support. Enabled by
+    -- default.
+    vpnEcmpSupport :: Prelude.Maybe VpnEcmpSupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRequestOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amazonSideAsn', 'transitGatewayRequestOptions_amazonSideAsn' - A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+-- 4294967294 for 32-bit ASNs. The default is @64512@.
+--
+-- 'autoAcceptSharedAttachments', 'transitGatewayRequestOptions_autoAcceptSharedAttachments' - Enable or disable automatic acceptance of attachment requests. Disabled
+-- by default.
+--
+-- 'defaultRouteTableAssociation', 'transitGatewayRequestOptions_defaultRouteTableAssociation' - Enable or disable automatic association with the default association
+-- route table. Enabled by default.
+--
+-- 'defaultRouteTablePropagation', 'transitGatewayRequestOptions_defaultRouteTablePropagation' - Enable or disable automatic propagation of routes to the default
+-- propagation route table. Enabled by default.
+--
+-- 'dnsSupport', 'transitGatewayRequestOptions_dnsSupport' - Enable or disable DNS support. Enabled by default.
+--
+-- 'multicastSupport', 'transitGatewayRequestOptions_multicastSupport' - Indicates whether multicast is enabled on the transit gateway
+--
+-- 'transitGatewayCidrBlocks', 'transitGatewayRequestOptions_transitGatewayCidrBlocks' - One or more IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a
+-- size \/24 CIDR block or larger for IPv4, or a size \/64 CIDR block or
+-- larger for IPv6.
+--
+-- 'vpnEcmpSupport', 'transitGatewayRequestOptions_vpnEcmpSupport' - Enable or disable Equal Cost Multipath Protocol support. Enabled by
+-- default.
+newTransitGatewayRequestOptions ::
+  TransitGatewayRequestOptions
+newTransitGatewayRequestOptions =
+  TransitGatewayRequestOptions'
+    { amazonSideAsn =
+        Prelude.Nothing,
+      autoAcceptSharedAttachments = Prelude.Nothing,
+      defaultRouteTableAssociation =
+        Prelude.Nothing,
+      defaultRouteTablePropagation =
+        Prelude.Nothing,
+      dnsSupport = Prelude.Nothing,
+      multicastSupport = Prelude.Nothing,
+      transitGatewayCidrBlocks = Prelude.Nothing,
+      vpnEcmpSupport = Prelude.Nothing
+    }
+
+-- | A private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to
+-- 4294967294 for 32-bit ASNs. The default is @64512@.
+transitGatewayRequestOptions_amazonSideAsn :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe Prelude.Integer)
+transitGatewayRequestOptions_amazonSideAsn = Lens.lens (\TransitGatewayRequestOptions' {amazonSideAsn} -> amazonSideAsn) (\s@TransitGatewayRequestOptions' {} a -> s {amazonSideAsn = a} :: TransitGatewayRequestOptions)
+
+-- | Enable or disable automatic acceptance of attachment requests. Disabled
+-- by default.
+transitGatewayRequestOptions_autoAcceptSharedAttachments :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe AutoAcceptSharedAttachmentsValue)
+transitGatewayRequestOptions_autoAcceptSharedAttachments = Lens.lens (\TransitGatewayRequestOptions' {autoAcceptSharedAttachments} -> autoAcceptSharedAttachments) (\s@TransitGatewayRequestOptions' {} a -> s {autoAcceptSharedAttachments = a} :: TransitGatewayRequestOptions)
+
+-- | Enable or disable automatic association with the default association
+-- route table. Enabled by default.
+transitGatewayRequestOptions_defaultRouteTableAssociation :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe DefaultRouteTableAssociationValue)
+transitGatewayRequestOptions_defaultRouteTableAssociation = Lens.lens (\TransitGatewayRequestOptions' {defaultRouteTableAssociation} -> defaultRouteTableAssociation) (\s@TransitGatewayRequestOptions' {} a -> s {defaultRouteTableAssociation = a} :: TransitGatewayRequestOptions)
+
+-- | Enable or disable automatic propagation of routes to the default
+-- propagation route table. Enabled by default.
+transitGatewayRequestOptions_defaultRouteTablePropagation :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe DefaultRouteTablePropagationValue)
+transitGatewayRequestOptions_defaultRouteTablePropagation = Lens.lens (\TransitGatewayRequestOptions' {defaultRouteTablePropagation} -> defaultRouteTablePropagation) (\s@TransitGatewayRequestOptions' {} a -> s {defaultRouteTablePropagation = a} :: TransitGatewayRequestOptions)
+
+-- | Enable or disable DNS support. Enabled by default.
+transitGatewayRequestOptions_dnsSupport :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe DnsSupportValue)
+transitGatewayRequestOptions_dnsSupport = Lens.lens (\TransitGatewayRequestOptions' {dnsSupport} -> dnsSupport) (\s@TransitGatewayRequestOptions' {} a -> s {dnsSupport = a} :: TransitGatewayRequestOptions)
+
+-- | Indicates whether multicast is enabled on the transit gateway
+transitGatewayRequestOptions_multicastSupport :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe MulticastSupportValue)
+transitGatewayRequestOptions_multicastSupport = Lens.lens (\TransitGatewayRequestOptions' {multicastSupport} -> multicastSupport) (\s@TransitGatewayRequestOptions' {} a -> s {multicastSupport = a} :: TransitGatewayRequestOptions)
+
+-- | One or more IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a
+-- size \/24 CIDR block or larger for IPv4, or a size \/64 CIDR block or
+-- larger for IPv6.
+transitGatewayRequestOptions_transitGatewayCidrBlocks :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe [Prelude.Text])
+transitGatewayRequestOptions_transitGatewayCidrBlocks = Lens.lens (\TransitGatewayRequestOptions' {transitGatewayCidrBlocks} -> transitGatewayCidrBlocks) (\s@TransitGatewayRequestOptions' {} a -> s {transitGatewayCidrBlocks = a} :: TransitGatewayRequestOptions) Prelude.. Lens.mapping Lens.coerced
+
+-- | Enable or disable Equal Cost Multipath Protocol support. Enabled by
+-- default.
+transitGatewayRequestOptions_vpnEcmpSupport :: Lens.Lens' TransitGatewayRequestOptions (Prelude.Maybe VpnEcmpSupportValue)
+transitGatewayRequestOptions_vpnEcmpSupport = Lens.lens (\TransitGatewayRequestOptions' {vpnEcmpSupport} -> vpnEcmpSupport) (\s@TransitGatewayRequestOptions' {} a -> s {vpnEcmpSupport = a} :: TransitGatewayRequestOptions)
+
+instance
+  Prelude.Hashable
+    TransitGatewayRequestOptions
+  where
+  hashWithSalt _salt TransitGatewayRequestOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonSideAsn
+      `Prelude.hashWithSalt` autoAcceptSharedAttachments
+      `Prelude.hashWithSalt` defaultRouteTableAssociation
+      `Prelude.hashWithSalt` defaultRouteTablePropagation
+      `Prelude.hashWithSalt` dnsSupport
+      `Prelude.hashWithSalt` multicastSupport
+      `Prelude.hashWithSalt` transitGatewayCidrBlocks
+      `Prelude.hashWithSalt` vpnEcmpSupport
+
+instance Prelude.NFData TransitGatewayRequestOptions where
+  rnf TransitGatewayRequestOptions' {..} =
+    Prelude.rnf amazonSideAsn
+      `Prelude.seq` Prelude.rnf autoAcceptSharedAttachments
+      `Prelude.seq` Prelude.rnf defaultRouteTableAssociation
+      `Prelude.seq` Prelude.rnf defaultRouteTablePropagation
+      `Prelude.seq` Prelude.rnf dnsSupport
+      `Prelude.seq` Prelude.rnf multicastSupport
+      `Prelude.seq` Prelude.rnf transitGatewayCidrBlocks
+      `Prelude.seq` Prelude.rnf vpnEcmpSupport
+
+instance Data.ToQuery TransitGatewayRequestOptions where
+  toQuery TransitGatewayRequestOptions' {..} =
+    Prelude.mconcat
+      [ "AmazonSideAsn" Data.=: amazonSideAsn,
+        "AutoAcceptSharedAttachments"
+          Data.=: autoAcceptSharedAttachments,
+        "DefaultRouteTableAssociation"
+          Data.=: defaultRouteTableAssociation,
+        "DefaultRouteTablePropagation"
+          Data.=: defaultRouteTablePropagation,
+        "DnsSupport" Data.=: dnsSupport,
+        "MulticastSupport" Data.=: multicastSupport,
+        Data.toQuery
+          ( Data.toQueryList "TransitGatewayCidrBlocks"
+              Prelude.<$> transitGatewayCidrBlocks
+          ),
+        "VpnEcmpSupport" Data.=: vpnEcmpSupport
+      ]
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRoute.hs b/gen/Amazonka/EC2/Types/TransitGatewayRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRoute.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRoute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayRouteAttachment
+import Amazonka.EC2.Types.TransitGatewayRouteState
+import Amazonka.EC2.Types.TransitGatewayRouteType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route for a transit gateway route table.
+--
+-- /See:/ 'newTransitGatewayRoute' smart constructor.
+data TransitGatewayRoute = TransitGatewayRoute'
+  { -- | The CIDR block used for destination matches.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list used for destination matches.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the route.
+    state :: Prelude.Maybe TransitGatewayRouteState,
+    -- | The attachments.
+    transitGatewayAttachments :: Prelude.Maybe [TransitGatewayRouteAttachment],
+    -- | The ID of the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text,
+    -- | The route type.
+    type' :: Prelude.Maybe TransitGatewayRouteType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidrBlock', 'transitGatewayRoute_destinationCidrBlock' - The CIDR block used for destination matches.
+--
+-- 'prefixListId', 'transitGatewayRoute_prefixListId' - The ID of the prefix list used for destination matches.
+--
+-- 'state', 'transitGatewayRoute_state' - The state of the route.
+--
+-- 'transitGatewayAttachments', 'transitGatewayRoute_transitGatewayAttachments' - The attachments.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'transitGatewayRoute_transitGatewayRouteTableAnnouncementId' - The ID of the transit gateway route table announcement.
+--
+-- 'type'', 'transitGatewayRoute_type' - The route type.
+newTransitGatewayRoute ::
+  TransitGatewayRoute
+newTransitGatewayRoute =
+  TransitGatewayRoute'
+    { destinationCidrBlock =
+        Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachments = Prelude.Nothing,
+      transitGatewayRouteTableAnnouncementId =
+        Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The CIDR block used for destination matches.
+transitGatewayRoute_destinationCidrBlock :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRoute_destinationCidrBlock = Lens.lens (\TransitGatewayRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@TransitGatewayRoute' {} a -> s {destinationCidrBlock = a} :: TransitGatewayRoute)
+
+-- | The ID of the prefix list used for destination matches.
+transitGatewayRoute_prefixListId :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRoute_prefixListId = Lens.lens (\TransitGatewayRoute' {prefixListId} -> prefixListId) (\s@TransitGatewayRoute' {} a -> s {prefixListId = a} :: TransitGatewayRoute)
+
+-- | The state of the route.
+transitGatewayRoute_state :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe TransitGatewayRouteState)
+transitGatewayRoute_state = Lens.lens (\TransitGatewayRoute' {state} -> state) (\s@TransitGatewayRoute' {} a -> s {state = a} :: TransitGatewayRoute)
+
+-- | The attachments.
+transitGatewayRoute_transitGatewayAttachments :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe [TransitGatewayRouteAttachment])
+transitGatewayRoute_transitGatewayAttachments = Lens.lens (\TransitGatewayRoute' {transitGatewayAttachments} -> transitGatewayAttachments) (\s@TransitGatewayRoute' {} a -> s {transitGatewayAttachments = a} :: TransitGatewayRoute) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway route table announcement.
+transitGatewayRoute_transitGatewayRouteTableAnnouncementId :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRoute_transitGatewayRouteTableAnnouncementId = Lens.lens (\TransitGatewayRoute' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@TransitGatewayRoute' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: TransitGatewayRoute)
+
+-- | The route type.
+transitGatewayRoute_type :: Lens.Lens' TransitGatewayRoute (Prelude.Maybe TransitGatewayRouteType)
+transitGatewayRoute_type = Lens.lens (\TransitGatewayRoute' {type'} -> type') (\s@TransitGatewayRoute' {} a -> s {type' = a} :: TransitGatewayRoute)
+
+instance Data.FromXML TransitGatewayRoute where
+  parseXML x =
+    TransitGatewayRoute'
+      Prelude.<$> (x Data..@? "destinationCidrBlock")
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "transitGatewayAttachments"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableAnnouncementId")
+      Prelude.<*> (x Data..@? "type")
+
+instance Prelude.Hashable TransitGatewayRoute where
+  hashWithSalt _salt TransitGatewayRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` transitGatewayAttachments
+      `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData TransitGatewayRoute where
+  rnf TransitGatewayRoute' {..} =
+    Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachments
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteAttachment.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteAttachment.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route attachment.
+--
+-- /See:/ 'newTransitGatewayRouteAttachment' smart constructor.
+data TransitGatewayRouteAttachment = TransitGatewayRouteAttachment'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRouteAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayRouteAttachment_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'transitGatewayRouteAttachment_resourceType' - The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayRouteAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+newTransitGatewayRouteAttachment ::
+  TransitGatewayRouteAttachment
+newTransitGatewayRouteAttachment =
+  TransitGatewayRouteAttachment'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayRouteAttachment_resourceId :: Lens.Lens' TransitGatewayRouteAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayRouteAttachment_resourceId = Lens.lens (\TransitGatewayRouteAttachment' {resourceId} -> resourceId) (\s@TransitGatewayRouteAttachment' {} a -> s {resourceId = a} :: TransitGatewayRouteAttachment)
+
+-- | The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayRouteAttachment_resourceType :: Lens.Lens' TransitGatewayRouteAttachment (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayRouteAttachment_resourceType = Lens.lens (\TransitGatewayRouteAttachment' {resourceType} -> resourceType) (\s@TransitGatewayRouteAttachment' {} a -> s {resourceType = a} :: TransitGatewayRouteAttachment)
+
+-- | The ID of the attachment.
+transitGatewayRouteAttachment_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayRouteAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayRouteAttachment_transitGatewayAttachmentId = Lens.lens (\TransitGatewayRouteAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayRouteAttachment' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayRouteAttachment)
+
+instance Data.FromXML TransitGatewayRouteAttachment where
+  parseXML x =
+    TransitGatewayRouteAttachment'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayRouteAttachment
+  where
+  hashWithSalt _salt TransitGatewayRouteAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance Prelude.NFData TransitGatewayRouteAttachment where
+  rnf TransitGatewayRouteAttachment' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteState.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteState
+  ( TransitGatewayRouteState
+      ( ..,
+        TransitGatewayRouteState_Active,
+        TransitGatewayRouteState_Blackhole,
+        TransitGatewayRouteState_Deleted,
+        TransitGatewayRouteState_Deleting,
+        TransitGatewayRouteState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayRouteState = TransitGatewayRouteState'
+  { fromTransitGatewayRouteState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayRouteState_Active :: TransitGatewayRouteState
+pattern TransitGatewayRouteState_Active = TransitGatewayRouteState' "active"
+
+pattern TransitGatewayRouteState_Blackhole :: TransitGatewayRouteState
+pattern TransitGatewayRouteState_Blackhole = TransitGatewayRouteState' "blackhole"
+
+pattern TransitGatewayRouteState_Deleted :: TransitGatewayRouteState
+pattern TransitGatewayRouteState_Deleted = TransitGatewayRouteState' "deleted"
+
+pattern TransitGatewayRouteState_Deleting :: TransitGatewayRouteState
+pattern TransitGatewayRouteState_Deleting = TransitGatewayRouteState' "deleting"
+
+pattern TransitGatewayRouteState_Pending :: TransitGatewayRouteState
+pattern TransitGatewayRouteState_Pending = TransitGatewayRouteState' "pending"
+
+{-# COMPLETE
+  TransitGatewayRouteState_Active,
+  TransitGatewayRouteState_Blackhole,
+  TransitGatewayRouteState_Deleted,
+  TransitGatewayRouteState_Deleting,
+  TransitGatewayRouteState_Pending,
+  TransitGatewayRouteState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTable.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTable.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTable
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTable where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayRouteTableState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway route table.
+--
+-- /See:/ 'newTransitGatewayRouteTable' smart constructor.
+data TransitGatewayRouteTable = TransitGatewayRouteTable'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether this is the default association route table for the
+    -- transit gateway.
+    defaultAssociationRouteTable :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether this is the default propagation route table for the
+    -- transit gateway.
+    defaultPropagationRouteTable :: Prelude.Maybe Prelude.Bool,
+    -- | The state of the transit gateway route table.
+    state :: Prelude.Maybe TransitGatewayRouteTableState,
+    -- | Any tags assigned to the route table.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRouteTable' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'transitGatewayRouteTable_creationTime' - The creation time.
+--
+-- 'defaultAssociationRouteTable', 'transitGatewayRouteTable_defaultAssociationRouteTable' - Indicates whether this is the default association route table for the
+-- transit gateway.
+--
+-- 'defaultPropagationRouteTable', 'transitGatewayRouteTable_defaultPropagationRouteTable' - Indicates whether this is the default propagation route table for the
+-- transit gateway.
+--
+-- 'state', 'transitGatewayRouteTable_state' - The state of the transit gateway route table.
+--
+-- 'tags', 'transitGatewayRouteTable_tags' - Any tags assigned to the route table.
+--
+-- 'transitGatewayId', 'transitGatewayRouteTable_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayRouteTable_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newTransitGatewayRouteTable ::
+  TransitGatewayRouteTable
+newTransitGatewayRouteTable =
+  TransitGatewayRouteTable'
+    { creationTime =
+        Prelude.Nothing,
+      defaultAssociationRouteTable = Prelude.Nothing,
+      defaultPropagationRouteTable = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      transitGatewayRouteTableId = Prelude.Nothing
+    }
+
+-- | The creation time.
+transitGatewayRouteTable_creationTime :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.UTCTime)
+transitGatewayRouteTable_creationTime = Lens.lens (\TransitGatewayRouteTable' {creationTime} -> creationTime) (\s@TransitGatewayRouteTable' {} a -> s {creationTime = a} :: TransitGatewayRouteTable) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether this is the default association route table for the
+-- transit gateway.
+transitGatewayRouteTable_defaultAssociationRouteTable :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+transitGatewayRouteTable_defaultAssociationRouteTable = Lens.lens (\TransitGatewayRouteTable' {defaultAssociationRouteTable} -> defaultAssociationRouteTable) (\s@TransitGatewayRouteTable' {} a -> s {defaultAssociationRouteTable = a} :: TransitGatewayRouteTable)
+
+-- | Indicates whether this is the default propagation route table for the
+-- transit gateway.
+transitGatewayRouteTable_defaultPropagationRouteTable :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Bool)
+transitGatewayRouteTable_defaultPropagationRouteTable = Lens.lens (\TransitGatewayRouteTable' {defaultPropagationRouteTable} -> defaultPropagationRouteTable) (\s@TransitGatewayRouteTable' {} a -> s {defaultPropagationRouteTable = a} :: TransitGatewayRouteTable)
+
+-- | The state of the transit gateway route table.
+transitGatewayRouteTable_state :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe TransitGatewayRouteTableState)
+transitGatewayRouteTable_state = Lens.lens (\TransitGatewayRouteTable' {state} -> state) (\s@TransitGatewayRouteTable' {} a -> s {state = a} :: TransitGatewayRouteTable)
+
+-- | Any tags assigned to the route table.
+transitGatewayRouteTable_tags :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe [Tag])
+transitGatewayRouteTable_tags = Lens.lens (\TransitGatewayRouteTable' {tags} -> tags) (\s@TransitGatewayRouteTable' {} a -> s {tags = a} :: TransitGatewayRouteTable) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+transitGatewayRouteTable_transitGatewayId :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTable_transitGatewayId = Lens.lens (\TransitGatewayRouteTable' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayRouteTable' {} a -> s {transitGatewayId = a} :: TransitGatewayRouteTable)
+
+-- | The ID of the transit gateway route table.
+transitGatewayRouteTable_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayRouteTable (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTable_transitGatewayRouteTableId = Lens.lens (\TransitGatewayRouteTable' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayRouteTable' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayRouteTable)
+
+instance Data.FromXML TransitGatewayRouteTable where
+  parseXML x =
+    TransitGatewayRouteTable'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "defaultAssociationRouteTable")
+      Prelude.<*> (x Data..@? "defaultPropagationRouteTable")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance Prelude.Hashable TransitGatewayRouteTable where
+  hashWithSalt _salt TransitGatewayRouteTable' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` defaultAssociationRouteTable
+      `Prelude.hashWithSalt` defaultPropagationRouteTable
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance Prelude.NFData TransitGatewayRouteTable where
+  rnf TransitGatewayRouteTable' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf defaultAssociationRouteTable
+      `Prelude.seq` Prelude.rnf defaultPropagationRouteTable
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncement.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncement.hs
@@ -0,0 +1,217 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementDirection
+import Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a transit gateway route table announcement.
+--
+-- /See:/ 'newTransitGatewayRouteTableAnnouncement' smart constructor.
+data TransitGatewayRouteTableAnnouncement = TransitGatewayRouteTableAnnouncement'
+  { -- | The direction for the route table announcement.
+    announcementDirection :: Prelude.Maybe TransitGatewayRouteTableAnnouncementDirection,
+    -- | The ID of the core network for the transit gateway route table
+    -- announcement.
+    coreNetworkId :: Prelude.Maybe Prelude.Text,
+    -- | The timestamp when the transit gateway route table announcement was
+    -- created.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The ID of the core network ID for the peer.
+    peerCoreNetworkId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the peer transit gateway.
+    peerTransitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the peering attachment.
+    peeringAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The state of the transit gateway announcement.
+    state :: Prelude.Maybe TransitGatewayRouteTableAnnouncementState,
+    -- | The key-value pairs associated with the route table announcement.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table.
+    transitGatewayRouteTableId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRouteTableAnnouncement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'announcementDirection', 'transitGatewayRouteTableAnnouncement_announcementDirection' - The direction for the route table announcement.
+--
+-- 'coreNetworkId', 'transitGatewayRouteTableAnnouncement_coreNetworkId' - The ID of the core network for the transit gateway route table
+-- announcement.
+--
+-- 'creationTime', 'transitGatewayRouteTableAnnouncement_creationTime' - The timestamp when the transit gateway route table announcement was
+-- created.
+--
+-- 'peerCoreNetworkId', 'transitGatewayRouteTableAnnouncement_peerCoreNetworkId' - The ID of the core network ID for the peer.
+--
+-- 'peerTransitGatewayId', 'transitGatewayRouteTableAnnouncement_peerTransitGatewayId' - The ID of the peer transit gateway.
+--
+-- 'peeringAttachmentId', 'transitGatewayRouteTableAnnouncement_peeringAttachmentId' - The ID of the peering attachment.
+--
+-- 'state', 'transitGatewayRouteTableAnnouncement_state' - The state of the transit gateway announcement.
+--
+-- 'tags', 'transitGatewayRouteTableAnnouncement_tags' - The key-value pairs associated with the route table announcement.
+--
+-- 'transitGatewayId', 'transitGatewayRouteTableAnnouncement_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'transitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId' - The ID of the transit gateway route table announcement.
+--
+-- 'transitGatewayRouteTableId', 'transitGatewayRouteTableAnnouncement_transitGatewayRouteTableId' - The ID of the transit gateway route table.
+newTransitGatewayRouteTableAnnouncement ::
+  TransitGatewayRouteTableAnnouncement
+newTransitGatewayRouteTableAnnouncement =
+  TransitGatewayRouteTableAnnouncement'
+    { announcementDirection =
+        Prelude.Nothing,
+      coreNetworkId = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      peerCoreNetworkId = Prelude.Nothing,
+      peerTransitGatewayId =
+        Prelude.Nothing,
+      peeringAttachmentId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      transitGatewayRouteTableAnnouncementId =
+        Prelude.Nothing,
+      transitGatewayRouteTableId =
+        Prelude.Nothing
+    }
+
+-- | The direction for the route table announcement.
+transitGatewayRouteTableAnnouncement_announcementDirection :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe TransitGatewayRouteTableAnnouncementDirection)
+transitGatewayRouteTableAnnouncement_announcementDirection = Lens.lens (\TransitGatewayRouteTableAnnouncement' {announcementDirection} -> announcementDirection) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {announcementDirection = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The ID of the core network for the transit gateway route table
+-- announcement.
+transitGatewayRouteTableAnnouncement_coreNetworkId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_coreNetworkId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {coreNetworkId} -> coreNetworkId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {coreNetworkId = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The timestamp when the transit gateway route table announcement was
+-- created.
+transitGatewayRouteTableAnnouncement_creationTime :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.UTCTime)
+transitGatewayRouteTableAnnouncement_creationTime = Lens.lens (\TransitGatewayRouteTableAnnouncement' {creationTime} -> creationTime) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {creationTime = a} :: TransitGatewayRouteTableAnnouncement) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the core network ID for the peer.
+transitGatewayRouteTableAnnouncement_peerCoreNetworkId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_peerCoreNetworkId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {peerCoreNetworkId} -> peerCoreNetworkId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {peerCoreNetworkId = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The ID of the peer transit gateway.
+transitGatewayRouteTableAnnouncement_peerTransitGatewayId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_peerTransitGatewayId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {peerTransitGatewayId} -> peerTransitGatewayId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {peerTransitGatewayId = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The ID of the peering attachment.
+transitGatewayRouteTableAnnouncement_peeringAttachmentId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_peeringAttachmentId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {peeringAttachmentId} -> peeringAttachmentId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {peeringAttachmentId = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The state of the transit gateway announcement.
+transitGatewayRouteTableAnnouncement_state :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe TransitGatewayRouteTableAnnouncementState)
+transitGatewayRouteTableAnnouncement_state = Lens.lens (\TransitGatewayRouteTableAnnouncement' {state} -> state) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {state = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The key-value pairs associated with the route table announcement.
+transitGatewayRouteTableAnnouncement_tags :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe [Tag])
+transitGatewayRouteTableAnnouncement_tags = Lens.lens (\TransitGatewayRouteTableAnnouncement' {tags} -> tags) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {tags = a} :: TransitGatewayRouteTableAnnouncement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway.
+transitGatewayRouteTableAnnouncement_transitGatewayId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_transitGatewayId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {transitGatewayId = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The ID of the transit gateway route table announcement.
+transitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_transitGatewayRouteTableAnnouncementId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: TransitGatewayRouteTableAnnouncement)
+
+-- | The ID of the transit gateway route table.
+transitGatewayRouteTableAnnouncement_transitGatewayRouteTableId :: Lens.Lens' TransitGatewayRouteTableAnnouncement (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAnnouncement_transitGatewayRouteTableId = Lens.lens (\TransitGatewayRouteTableAnnouncement' {transitGatewayRouteTableId} -> transitGatewayRouteTableId) (\s@TransitGatewayRouteTableAnnouncement' {} a -> s {transitGatewayRouteTableId = a} :: TransitGatewayRouteTableAnnouncement)
+
+instance
+  Data.FromXML
+    TransitGatewayRouteTableAnnouncement
+  where
+  parseXML x =
+    TransitGatewayRouteTableAnnouncement'
+      Prelude.<$> (x Data..@? "announcementDirection")
+      Prelude.<*> (x Data..@? "coreNetworkId")
+      Prelude.<*> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "peerCoreNetworkId")
+      Prelude.<*> (x Data..@? "peerTransitGatewayId")
+      Prelude.<*> (x Data..@? "peeringAttachmentId")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableAnnouncementId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayRouteTableAnnouncement
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayRouteTableAnnouncement' {..} =
+      _salt
+        `Prelude.hashWithSalt` announcementDirection
+        `Prelude.hashWithSalt` coreNetworkId
+        `Prelude.hashWithSalt` creationTime
+        `Prelude.hashWithSalt` peerCoreNetworkId
+        `Prelude.hashWithSalt` peerTransitGatewayId
+        `Prelude.hashWithSalt` peeringAttachmentId
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` tags
+        `Prelude.hashWithSalt` transitGatewayId
+        `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+        `Prelude.hashWithSalt` transitGatewayRouteTableId
+
+instance
+  Prelude.NFData
+    TransitGatewayRouteTableAnnouncement
+  where
+  rnf TransitGatewayRouteTableAnnouncement' {..} =
+    Prelude.rnf announcementDirection
+      `Prelude.seq` Prelude.rnf coreNetworkId
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf peerCoreNetworkId
+      `Prelude.seq` Prelude.rnf peerTransitGatewayId
+      `Prelude.seq` Prelude.rnf peeringAttachmentId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncementDirection.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncementDirection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncementDirection.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementDirection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementDirection
+  ( TransitGatewayRouteTableAnnouncementDirection
+      ( ..,
+        TransitGatewayRouteTableAnnouncementDirection_Incoming,
+        TransitGatewayRouteTableAnnouncementDirection_Outgoing
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayRouteTableAnnouncementDirection = TransitGatewayRouteTableAnnouncementDirection'
+  { fromTransitGatewayRouteTableAnnouncementDirection ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayRouteTableAnnouncementDirection_Incoming :: TransitGatewayRouteTableAnnouncementDirection
+pattern TransitGatewayRouteTableAnnouncementDirection_Incoming = TransitGatewayRouteTableAnnouncementDirection' "incoming"
+
+pattern TransitGatewayRouteTableAnnouncementDirection_Outgoing :: TransitGatewayRouteTableAnnouncementDirection
+pattern TransitGatewayRouteTableAnnouncementDirection_Outgoing = TransitGatewayRouteTableAnnouncementDirection' "outgoing"
+
+{-# COMPLETE
+  TransitGatewayRouteTableAnnouncementDirection_Incoming,
+  TransitGatewayRouteTableAnnouncementDirection_Outgoing,
+  TransitGatewayRouteTableAnnouncementDirection'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncementState.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncementState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAnnouncementState.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTableAnnouncementState
+  ( TransitGatewayRouteTableAnnouncementState
+      ( ..,
+        TransitGatewayRouteTableAnnouncementState_Available,
+        TransitGatewayRouteTableAnnouncementState_Deleted,
+        TransitGatewayRouteTableAnnouncementState_Deleting,
+        TransitGatewayRouteTableAnnouncementState_Failed,
+        TransitGatewayRouteTableAnnouncementState_Failing,
+        TransitGatewayRouteTableAnnouncementState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayRouteTableAnnouncementState = TransitGatewayRouteTableAnnouncementState'
+  { fromTransitGatewayRouteTableAnnouncementState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayRouteTableAnnouncementState_Available :: TransitGatewayRouteTableAnnouncementState
+pattern TransitGatewayRouteTableAnnouncementState_Available = TransitGatewayRouteTableAnnouncementState' "available"
+
+pattern TransitGatewayRouteTableAnnouncementState_Deleted :: TransitGatewayRouteTableAnnouncementState
+pattern TransitGatewayRouteTableAnnouncementState_Deleted = TransitGatewayRouteTableAnnouncementState' "deleted"
+
+pattern TransitGatewayRouteTableAnnouncementState_Deleting :: TransitGatewayRouteTableAnnouncementState
+pattern TransitGatewayRouteTableAnnouncementState_Deleting = TransitGatewayRouteTableAnnouncementState' "deleting"
+
+pattern TransitGatewayRouteTableAnnouncementState_Failed :: TransitGatewayRouteTableAnnouncementState
+pattern TransitGatewayRouteTableAnnouncementState_Failed = TransitGatewayRouteTableAnnouncementState' "failed"
+
+pattern TransitGatewayRouteTableAnnouncementState_Failing :: TransitGatewayRouteTableAnnouncementState
+pattern TransitGatewayRouteTableAnnouncementState_Failing = TransitGatewayRouteTableAnnouncementState' "failing"
+
+pattern TransitGatewayRouteTableAnnouncementState_Pending :: TransitGatewayRouteTableAnnouncementState
+pattern TransitGatewayRouteTableAnnouncementState_Pending = TransitGatewayRouteTableAnnouncementState' "pending"
+
+{-# COMPLETE
+  TransitGatewayRouteTableAnnouncementState_Available,
+  TransitGatewayRouteTableAnnouncementState_Deleted,
+  TransitGatewayRouteTableAnnouncementState_Deleting,
+  TransitGatewayRouteTableAnnouncementState_Failed,
+  TransitGatewayRouteTableAnnouncementState_Failing,
+  TransitGatewayRouteTableAnnouncementState_Pending,
+  TransitGatewayRouteTableAnnouncementState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAssociation.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableAssociation.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTableAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTableAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAssociationState
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an association between a route table and a resource
+-- attachment.
+--
+-- /See:/ 'newTransitGatewayRouteTableAssociation' smart constructor.
+data TransitGatewayRouteTableAssociation = TransitGatewayRouteTableAssociation'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The state of the association.
+    state :: Prelude.Maybe TransitGatewayAssociationState,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRouteTableAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayRouteTableAssociation_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'transitGatewayRouteTableAssociation_resourceType' - The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'state', 'transitGatewayRouteTableAssociation_state' - The state of the association.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayRouteTableAssociation_transitGatewayAttachmentId' - The ID of the attachment.
+newTransitGatewayRouteTableAssociation ::
+  TransitGatewayRouteTableAssociation
+newTransitGatewayRouteTableAssociation =
+  TransitGatewayRouteTableAssociation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayRouteTableAssociation_resourceId :: Lens.Lens' TransitGatewayRouteTableAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAssociation_resourceId = Lens.lens (\TransitGatewayRouteTableAssociation' {resourceId} -> resourceId) (\s@TransitGatewayRouteTableAssociation' {} a -> s {resourceId = a} :: TransitGatewayRouteTableAssociation)
+
+-- | The resource type. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayRouteTableAssociation_resourceType :: Lens.Lens' TransitGatewayRouteTableAssociation (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayRouteTableAssociation_resourceType = Lens.lens (\TransitGatewayRouteTableAssociation' {resourceType} -> resourceType) (\s@TransitGatewayRouteTableAssociation' {} a -> s {resourceType = a} :: TransitGatewayRouteTableAssociation)
+
+-- | The state of the association.
+transitGatewayRouteTableAssociation_state :: Lens.Lens' TransitGatewayRouteTableAssociation (Prelude.Maybe TransitGatewayAssociationState)
+transitGatewayRouteTableAssociation_state = Lens.lens (\TransitGatewayRouteTableAssociation' {state} -> state) (\s@TransitGatewayRouteTableAssociation' {} a -> s {state = a} :: TransitGatewayRouteTableAssociation)
+
+-- | The ID of the attachment.
+transitGatewayRouteTableAssociation_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayRouteTableAssociation (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableAssociation_transitGatewayAttachmentId = Lens.lens (\TransitGatewayRouteTableAssociation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayRouteTableAssociation' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayRouteTableAssociation)
+
+instance
+  Data.FromXML
+    TransitGatewayRouteTableAssociation
+  where
+  parseXML x =
+    TransitGatewayRouteTableAssociation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayRouteTableAssociation
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayRouteTableAssociation' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+
+instance
+  Prelude.NFData
+    TransitGatewayRouteTableAssociation
+  where
+  rnf TransitGatewayRouteTableAssociation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTablePropagation.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTablePropagation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTablePropagation.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTablePropagation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTablePropagation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TransitGatewayAttachmentResourceType
+import Amazonka.EC2.Types.TransitGatewayPropagationState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route table propagation.
+--
+-- /See:/ 'newTransitGatewayRouteTablePropagation' smart constructor.
+data TransitGatewayRouteTablePropagation = TransitGatewayRouteTablePropagation'
+  { -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of resource. Note that the @tgw-peering@ resource type has been
+    -- deprecated.
+    resourceType :: Prelude.Maybe TransitGatewayAttachmentResourceType,
+    -- | The state of the resource.
+    state :: Prelude.Maybe TransitGatewayPropagationState,
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway route table announcement.
+    transitGatewayRouteTableAnnouncementId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRouteTablePropagation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceId', 'transitGatewayRouteTablePropagation_resourceId' - The ID of the resource.
+--
+-- 'resourceType', 'transitGatewayRouteTablePropagation_resourceType' - The type of resource. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+--
+-- 'state', 'transitGatewayRouteTablePropagation_state' - The state of the resource.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayRouteTablePropagation_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayRouteTableAnnouncementId', 'transitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId' - The ID of the transit gateway route table announcement.
+newTransitGatewayRouteTablePropagation ::
+  TransitGatewayRouteTablePropagation
+newTransitGatewayRouteTablePropagation =
+  TransitGatewayRouteTablePropagation'
+    { resourceId =
+        Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      transitGatewayAttachmentId =
+        Prelude.Nothing,
+      transitGatewayRouteTableAnnouncementId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the resource.
+transitGatewayRouteTablePropagation_resourceId :: Lens.Lens' TransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTablePropagation_resourceId = Lens.lens (\TransitGatewayRouteTablePropagation' {resourceId} -> resourceId) (\s@TransitGatewayRouteTablePropagation' {} a -> s {resourceId = a} :: TransitGatewayRouteTablePropagation)
+
+-- | The type of resource. Note that the @tgw-peering@ resource type has been
+-- deprecated.
+transitGatewayRouteTablePropagation_resourceType :: Lens.Lens' TransitGatewayRouteTablePropagation (Prelude.Maybe TransitGatewayAttachmentResourceType)
+transitGatewayRouteTablePropagation_resourceType = Lens.lens (\TransitGatewayRouteTablePropagation' {resourceType} -> resourceType) (\s@TransitGatewayRouteTablePropagation' {} a -> s {resourceType = a} :: TransitGatewayRouteTablePropagation)
+
+-- | The state of the resource.
+transitGatewayRouteTablePropagation_state :: Lens.Lens' TransitGatewayRouteTablePropagation (Prelude.Maybe TransitGatewayPropagationState)
+transitGatewayRouteTablePropagation_state = Lens.lens (\TransitGatewayRouteTablePropagation' {state} -> state) (\s@TransitGatewayRouteTablePropagation' {} a -> s {state = a} :: TransitGatewayRouteTablePropagation)
+
+-- | The ID of the attachment.
+transitGatewayRouteTablePropagation_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTablePropagation_transitGatewayAttachmentId = Lens.lens (\TransitGatewayRouteTablePropagation' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayRouteTablePropagation' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayRouteTablePropagation)
+
+-- | The ID of the transit gateway route table announcement.
+transitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId :: Lens.Lens' TransitGatewayRouteTablePropagation (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTablePropagation_transitGatewayRouteTableAnnouncementId = Lens.lens (\TransitGatewayRouteTablePropagation' {transitGatewayRouteTableAnnouncementId} -> transitGatewayRouteTableAnnouncementId) (\s@TransitGatewayRouteTablePropagation' {} a -> s {transitGatewayRouteTableAnnouncementId = a} :: TransitGatewayRouteTablePropagation)
+
+instance
+  Data.FromXML
+    TransitGatewayRouteTablePropagation
+  where
+  parseXML x =
+    TransitGatewayRouteTablePropagation'
+      Prelude.<$> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayRouteTableAnnouncementId")
+
+instance
+  Prelude.Hashable
+    TransitGatewayRouteTablePropagation
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayRouteTablePropagation' {..} =
+      _salt
+        `Prelude.hashWithSalt` resourceId
+        `Prelude.hashWithSalt` resourceType
+        `Prelude.hashWithSalt` state
+        `Prelude.hashWithSalt` transitGatewayAttachmentId
+        `Prelude.hashWithSalt` transitGatewayRouteTableAnnouncementId
+
+instance
+  Prelude.NFData
+    TransitGatewayRouteTablePropagation
+  where
+  rnf TransitGatewayRouteTablePropagation' {..} =
+    Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayRouteTableAnnouncementId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTableRoute.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableRoute.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTableRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTableRoute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a route in a transit gateway route table.
+--
+-- /See:/ 'newTransitGatewayRouteTableRoute' smart constructor.
+data TransitGatewayRouteTableRoute = TransitGatewayRouteTableRoute'
+  { -- | The ID of the route attachment.
+    attachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The CIDR block used for destination matches.
+    destinationCidr :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the prefix list.
+    prefixListId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the resource for the route attachment.
+    resourceId :: Prelude.Maybe Prelude.Text,
+    -- | The resource type for the route attachment.
+    resourceType :: Prelude.Maybe Prelude.Text,
+    -- | The route origin. The following are the possible values:
+    --
+    -- -   static
+    --
+    -- -   propagated
+    routeOrigin :: Prelude.Maybe Prelude.Text,
+    -- | The state of the route.
+    state :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayRouteTableRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachmentId', 'transitGatewayRouteTableRoute_attachmentId' - The ID of the route attachment.
+--
+-- 'destinationCidr', 'transitGatewayRouteTableRoute_destinationCidr' - The CIDR block used for destination matches.
+--
+-- 'prefixListId', 'transitGatewayRouteTableRoute_prefixListId' - The ID of the prefix list.
+--
+-- 'resourceId', 'transitGatewayRouteTableRoute_resourceId' - The ID of the resource for the route attachment.
+--
+-- 'resourceType', 'transitGatewayRouteTableRoute_resourceType' - The resource type for the route attachment.
+--
+-- 'routeOrigin', 'transitGatewayRouteTableRoute_routeOrigin' - The route origin. The following are the possible values:
+--
+-- -   static
+--
+-- -   propagated
+--
+-- 'state', 'transitGatewayRouteTableRoute_state' - The state of the route.
+newTransitGatewayRouteTableRoute ::
+  TransitGatewayRouteTableRoute
+newTransitGatewayRouteTableRoute =
+  TransitGatewayRouteTableRoute'
+    { attachmentId =
+        Prelude.Nothing,
+      destinationCidr = Prelude.Nothing,
+      prefixListId = Prelude.Nothing,
+      resourceId = Prelude.Nothing,
+      resourceType = Prelude.Nothing,
+      routeOrigin = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The ID of the route attachment.
+transitGatewayRouteTableRoute_attachmentId :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_attachmentId = Lens.lens (\TransitGatewayRouteTableRoute' {attachmentId} -> attachmentId) (\s@TransitGatewayRouteTableRoute' {} a -> s {attachmentId = a} :: TransitGatewayRouteTableRoute)
+
+-- | The CIDR block used for destination matches.
+transitGatewayRouteTableRoute_destinationCidr :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_destinationCidr = Lens.lens (\TransitGatewayRouteTableRoute' {destinationCidr} -> destinationCidr) (\s@TransitGatewayRouteTableRoute' {} a -> s {destinationCidr = a} :: TransitGatewayRouteTableRoute)
+
+-- | The ID of the prefix list.
+transitGatewayRouteTableRoute_prefixListId :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_prefixListId = Lens.lens (\TransitGatewayRouteTableRoute' {prefixListId} -> prefixListId) (\s@TransitGatewayRouteTableRoute' {} a -> s {prefixListId = a} :: TransitGatewayRouteTableRoute)
+
+-- | The ID of the resource for the route attachment.
+transitGatewayRouteTableRoute_resourceId :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_resourceId = Lens.lens (\TransitGatewayRouteTableRoute' {resourceId} -> resourceId) (\s@TransitGatewayRouteTableRoute' {} a -> s {resourceId = a} :: TransitGatewayRouteTableRoute)
+
+-- | The resource type for the route attachment.
+transitGatewayRouteTableRoute_resourceType :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_resourceType = Lens.lens (\TransitGatewayRouteTableRoute' {resourceType} -> resourceType) (\s@TransitGatewayRouteTableRoute' {} a -> s {resourceType = a} :: TransitGatewayRouteTableRoute)
+
+-- | The route origin. The following are the possible values:
+--
+-- -   static
+--
+-- -   propagated
+transitGatewayRouteTableRoute_routeOrigin :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_routeOrigin = Lens.lens (\TransitGatewayRouteTableRoute' {routeOrigin} -> routeOrigin) (\s@TransitGatewayRouteTableRoute' {} a -> s {routeOrigin = a} :: TransitGatewayRouteTableRoute)
+
+-- | The state of the route.
+transitGatewayRouteTableRoute_state :: Lens.Lens' TransitGatewayRouteTableRoute (Prelude.Maybe Prelude.Text)
+transitGatewayRouteTableRoute_state = Lens.lens (\TransitGatewayRouteTableRoute' {state} -> state) (\s@TransitGatewayRouteTableRoute' {} a -> s {state = a} :: TransitGatewayRouteTableRoute)
+
+instance Data.FromXML TransitGatewayRouteTableRoute where
+  parseXML x =
+    TransitGatewayRouteTableRoute'
+      Prelude.<$> (x Data..@? "attachmentId")
+      Prelude.<*> (x Data..@? "destinationCidr")
+      Prelude.<*> (x Data..@? "prefixListId")
+      Prelude.<*> (x Data..@? "resourceId")
+      Prelude.<*> (x Data..@? "resourceType")
+      Prelude.<*> (x Data..@? "routeOrigin")
+      Prelude.<*> (x Data..@? "state")
+
+instance
+  Prelude.Hashable
+    TransitGatewayRouteTableRoute
+  where
+  hashWithSalt _salt TransitGatewayRouteTableRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachmentId
+      `Prelude.hashWithSalt` destinationCidr
+      `Prelude.hashWithSalt` prefixListId
+      `Prelude.hashWithSalt` resourceId
+      `Prelude.hashWithSalt` resourceType
+      `Prelude.hashWithSalt` routeOrigin
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData TransitGatewayRouteTableRoute where
+  rnf TransitGatewayRouteTableRoute' {..} =
+    Prelude.rnf attachmentId
+      `Prelude.seq` Prelude.rnf destinationCidr
+      `Prelude.seq` Prelude.rnf prefixListId
+      `Prelude.seq` Prelude.rnf resourceId
+      `Prelude.seq` Prelude.rnf resourceType
+      `Prelude.seq` Prelude.rnf routeOrigin
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteTableState.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteTableState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteTableState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteTableState
+  ( TransitGatewayRouteTableState
+      ( ..,
+        TransitGatewayRouteTableState_Available,
+        TransitGatewayRouteTableState_Deleted,
+        TransitGatewayRouteTableState_Deleting,
+        TransitGatewayRouteTableState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayRouteTableState = TransitGatewayRouteTableState'
+  { fromTransitGatewayRouteTableState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayRouteTableState_Available :: TransitGatewayRouteTableState
+pattern TransitGatewayRouteTableState_Available = TransitGatewayRouteTableState' "available"
+
+pattern TransitGatewayRouteTableState_Deleted :: TransitGatewayRouteTableState
+pattern TransitGatewayRouteTableState_Deleted = TransitGatewayRouteTableState' "deleted"
+
+pattern TransitGatewayRouteTableState_Deleting :: TransitGatewayRouteTableState
+pattern TransitGatewayRouteTableState_Deleting = TransitGatewayRouteTableState' "deleting"
+
+pattern TransitGatewayRouteTableState_Pending :: TransitGatewayRouteTableState
+pattern TransitGatewayRouteTableState_Pending = TransitGatewayRouteTableState' "pending"
+
+{-# COMPLETE
+  TransitGatewayRouteTableState_Available,
+  TransitGatewayRouteTableState_Deleted,
+  TransitGatewayRouteTableState_Deleting,
+  TransitGatewayRouteTableState_Pending,
+  TransitGatewayRouteTableState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayRouteType.hs b/gen/Amazonka/EC2/Types/TransitGatewayRouteType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayRouteType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayRouteType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayRouteType
+  ( TransitGatewayRouteType
+      ( ..,
+        TransitGatewayRouteType_Propagated,
+        TransitGatewayRouteType_Static
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayRouteType = TransitGatewayRouteType'
+  { fromTransitGatewayRouteType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayRouteType_Propagated :: TransitGatewayRouteType
+pattern TransitGatewayRouteType_Propagated = TransitGatewayRouteType' "propagated"
+
+pattern TransitGatewayRouteType_Static :: TransitGatewayRouteType
+pattern TransitGatewayRouteType_Static = TransitGatewayRouteType' "static"
+
+{-# COMPLETE
+  TransitGatewayRouteType_Propagated,
+  TransitGatewayRouteType_Static,
+  TransitGatewayRouteType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayState.hs b/gen/Amazonka/EC2/Types/TransitGatewayState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayState
+  ( TransitGatewayState
+      ( ..,
+        TransitGatewayState_Available,
+        TransitGatewayState_Deleted,
+        TransitGatewayState_Deleting,
+        TransitGatewayState_Modifying,
+        TransitGatewayState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransitGatewayState = TransitGatewayState'
+  { fromTransitGatewayState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransitGatewayState_Available :: TransitGatewayState
+pattern TransitGatewayState_Available = TransitGatewayState' "available"
+
+pattern TransitGatewayState_Deleted :: TransitGatewayState
+pattern TransitGatewayState_Deleted = TransitGatewayState' "deleted"
+
+pattern TransitGatewayState_Deleting :: TransitGatewayState
+pattern TransitGatewayState_Deleting = TransitGatewayState' "deleting"
+
+pattern TransitGatewayState_Modifying :: TransitGatewayState
+pattern TransitGatewayState_Modifying = TransitGatewayState' "modifying"
+
+pattern TransitGatewayState_Pending :: TransitGatewayState
+pattern TransitGatewayState_Pending = TransitGatewayState' "pending"
+
+{-# COMPLETE
+  TransitGatewayState_Available,
+  TransitGatewayState_Deleted,
+  TransitGatewayState_Deleting,
+  TransitGatewayState_Modifying,
+  TransitGatewayState_Pending,
+  TransitGatewayState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayVpcAttachment.hs b/gen/Amazonka/EC2/Types/TransitGatewayVpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayVpcAttachment.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayVpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayVpcAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TransitGatewayAttachmentState
+import Amazonka.EC2.Types.TransitGatewayVpcAttachmentOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC attachment.
+--
+-- /See:/ 'newTransitGatewayVpcAttachment' smart constructor.
+data TransitGatewayVpcAttachment = TransitGatewayVpcAttachment'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Data.ISO8601,
+    -- | The VPC attachment options.
+    options :: Prelude.Maybe TransitGatewayVpcAttachmentOptions,
+    -- | The state of the VPC attachment. Note that the @initiating@ state has
+    -- been deprecated.
+    state :: Prelude.Maybe TransitGatewayAttachmentState,
+    -- | The IDs of the subnets.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | The tags for the VPC attachment.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the attachment.
+    transitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the transit gateway.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the VPC.
+    vpcOwnerId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayVpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'transitGatewayVpcAttachment_creationTime' - The creation time.
+--
+-- 'options', 'transitGatewayVpcAttachment_options' - The VPC attachment options.
+--
+-- 'state', 'transitGatewayVpcAttachment_state' - The state of the VPC attachment. Note that the @initiating@ state has
+-- been deprecated.
+--
+-- 'subnetIds', 'transitGatewayVpcAttachment_subnetIds' - The IDs of the subnets.
+--
+-- 'tags', 'transitGatewayVpcAttachment_tags' - The tags for the VPC attachment.
+--
+-- 'transitGatewayAttachmentId', 'transitGatewayVpcAttachment_transitGatewayAttachmentId' - The ID of the attachment.
+--
+-- 'transitGatewayId', 'transitGatewayVpcAttachment_transitGatewayId' - The ID of the transit gateway.
+--
+-- 'vpcId', 'transitGatewayVpcAttachment_vpcId' - The ID of the VPC.
+--
+-- 'vpcOwnerId', 'transitGatewayVpcAttachment_vpcOwnerId' - The ID of the Amazon Web Services account that owns the VPC.
+newTransitGatewayVpcAttachment ::
+  TransitGatewayVpcAttachment
+newTransitGatewayVpcAttachment =
+  TransitGatewayVpcAttachment'
+    { creationTime =
+        Prelude.Nothing,
+      options = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      transitGatewayAttachmentId = Prelude.Nothing,
+      transitGatewayId = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      vpcOwnerId = Prelude.Nothing
+    }
+
+-- | The creation time.
+transitGatewayVpcAttachment_creationTime :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe Prelude.UTCTime)
+transitGatewayVpcAttachment_creationTime = Lens.lens (\TransitGatewayVpcAttachment' {creationTime} -> creationTime) (\s@TransitGatewayVpcAttachment' {} a -> s {creationTime = a} :: TransitGatewayVpcAttachment) Prelude.. Lens.mapping Data._Time
+
+-- | The VPC attachment options.
+transitGatewayVpcAttachment_options :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe TransitGatewayVpcAttachmentOptions)
+transitGatewayVpcAttachment_options = Lens.lens (\TransitGatewayVpcAttachment' {options} -> options) (\s@TransitGatewayVpcAttachment' {} a -> s {options = a} :: TransitGatewayVpcAttachment)
+
+-- | The state of the VPC attachment. Note that the @initiating@ state has
+-- been deprecated.
+transitGatewayVpcAttachment_state :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe TransitGatewayAttachmentState)
+transitGatewayVpcAttachment_state = Lens.lens (\TransitGatewayVpcAttachment' {state} -> state) (\s@TransitGatewayVpcAttachment' {} a -> s {state = a} :: TransitGatewayVpcAttachment)
+
+-- | The IDs of the subnets.
+transitGatewayVpcAttachment_subnetIds :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe [Prelude.Text])
+transitGatewayVpcAttachment_subnetIds = Lens.lens (\TransitGatewayVpcAttachment' {subnetIds} -> subnetIds) (\s@TransitGatewayVpcAttachment' {} a -> s {subnetIds = a} :: TransitGatewayVpcAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags for the VPC attachment.
+transitGatewayVpcAttachment_tags :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe [Tag])
+transitGatewayVpcAttachment_tags = Lens.lens (\TransitGatewayVpcAttachment' {tags} -> tags) (\s@TransitGatewayVpcAttachment' {} a -> s {tags = a} :: TransitGatewayVpcAttachment) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the attachment.
+transitGatewayVpcAttachment_transitGatewayAttachmentId :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayVpcAttachment_transitGatewayAttachmentId = Lens.lens (\TransitGatewayVpcAttachment' {transitGatewayAttachmentId} -> transitGatewayAttachmentId) (\s@TransitGatewayVpcAttachment' {} a -> s {transitGatewayAttachmentId = a} :: TransitGatewayVpcAttachment)
+
+-- | The ID of the transit gateway.
+transitGatewayVpcAttachment_transitGatewayId :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayVpcAttachment_transitGatewayId = Lens.lens (\TransitGatewayVpcAttachment' {transitGatewayId} -> transitGatewayId) (\s@TransitGatewayVpcAttachment' {} a -> s {transitGatewayId = a} :: TransitGatewayVpcAttachment)
+
+-- | The ID of the VPC.
+transitGatewayVpcAttachment_vpcId :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayVpcAttachment_vpcId = Lens.lens (\TransitGatewayVpcAttachment' {vpcId} -> vpcId) (\s@TransitGatewayVpcAttachment' {} a -> s {vpcId = a} :: TransitGatewayVpcAttachment)
+
+-- | The ID of the Amazon Web Services account that owns the VPC.
+transitGatewayVpcAttachment_vpcOwnerId :: Lens.Lens' TransitGatewayVpcAttachment (Prelude.Maybe Prelude.Text)
+transitGatewayVpcAttachment_vpcOwnerId = Lens.lens (\TransitGatewayVpcAttachment' {vpcOwnerId} -> vpcOwnerId) (\s@TransitGatewayVpcAttachment' {} a -> s {vpcOwnerId = a} :: TransitGatewayVpcAttachment)
+
+instance Data.FromXML TransitGatewayVpcAttachment where
+  parseXML x =
+    TransitGatewayVpcAttachment'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "options")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "subnetIds"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> (x Data..@? "vpcId")
+      Prelude.<*> (x Data..@? "vpcOwnerId")
+
+instance Prelude.Hashable TransitGatewayVpcAttachment where
+  hashWithSalt _salt TransitGatewayVpcAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayAttachmentId
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpcOwnerId
+
+instance Prelude.NFData TransitGatewayVpcAttachment where
+  rnf TransitGatewayVpcAttachment' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpcOwnerId
diff --git a/gen/Amazonka/EC2/Types/TransitGatewayVpcAttachmentOptions.hs b/gen/Amazonka/EC2/Types/TransitGatewayVpcAttachmentOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransitGatewayVpcAttachmentOptions.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransitGatewayVpcAttachmentOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransitGatewayVpcAttachmentOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ApplianceModeSupportValue
+import Amazonka.EC2.Types.DnsSupportValue
+import Amazonka.EC2.Types.Ipv6SupportValue
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the VPC attachment options.
+--
+-- /See:/ 'newTransitGatewayVpcAttachmentOptions' smart constructor.
+data TransitGatewayVpcAttachmentOptions = TransitGatewayVpcAttachmentOptions'
+  { -- | Indicates whether appliance mode support is enabled.
+    applianceModeSupport :: Prelude.Maybe ApplianceModeSupportValue,
+    -- | Indicates whether DNS support is enabled.
+    dnsSupport :: Prelude.Maybe DnsSupportValue,
+    -- | Indicates whether IPv6 support is disabled.
+    ipv6Support :: Prelude.Maybe Ipv6SupportValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TransitGatewayVpcAttachmentOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applianceModeSupport', 'transitGatewayVpcAttachmentOptions_applianceModeSupport' - Indicates whether appliance mode support is enabled.
+--
+-- 'dnsSupport', 'transitGatewayVpcAttachmentOptions_dnsSupport' - Indicates whether DNS support is enabled.
+--
+-- 'ipv6Support', 'transitGatewayVpcAttachmentOptions_ipv6Support' - Indicates whether IPv6 support is disabled.
+newTransitGatewayVpcAttachmentOptions ::
+  TransitGatewayVpcAttachmentOptions
+newTransitGatewayVpcAttachmentOptions =
+  TransitGatewayVpcAttachmentOptions'
+    { applianceModeSupport =
+        Prelude.Nothing,
+      dnsSupport = Prelude.Nothing,
+      ipv6Support = Prelude.Nothing
+    }
+
+-- | Indicates whether appliance mode support is enabled.
+transitGatewayVpcAttachmentOptions_applianceModeSupport :: Lens.Lens' TransitGatewayVpcAttachmentOptions (Prelude.Maybe ApplianceModeSupportValue)
+transitGatewayVpcAttachmentOptions_applianceModeSupport = Lens.lens (\TransitGatewayVpcAttachmentOptions' {applianceModeSupport} -> applianceModeSupport) (\s@TransitGatewayVpcAttachmentOptions' {} a -> s {applianceModeSupport = a} :: TransitGatewayVpcAttachmentOptions)
+
+-- | Indicates whether DNS support is enabled.
+transitGatewayVpcAttachmentOptions_dnsSupport :: Lens.Lens' TransitGatewayVpcAttachmentOptions (Prelude.Maybe DnsSupportValue)
+transitGatewayVpcAttachmentOptions_dnsSupport = Lens.lens (\TransitGatewayVpcAttachmentOptions' {dnsSupport} -> dnsSupport) (\s@TransitGatewayVpcAttachmentOptions' {} a -> s {dnsSupport = a} :: TransitGatewayVpcAttachmentOptions)
+
+-- | Indicates whether IPv6 support is disabled.
+transitGatewayVpcAttachmentOptions_ipv6Support :: Lens.Lens' TransitGatewayVpcAttachmentOptions (Prelude.Maybe Ipv6SupportValue)
+transitGatewayVpcAttachmentOptions_ipv6Support = Lens.lens (\TransitGatewayVpcAttachmentOptions' {ipv6Support} -> ipv6Support) (\s@TransitGatewayVpcAttachmentOptions' {} a -> s {ipv6Support = a} :: TransitGatewayVpcAttachmentOptions)
+
+instance
+  Data.FromXML
+    TransitGatewayVpcAttachmentOptions
+  where
+  parseXML x =
+    TransitGatewayVpcAttachmentOptions'
+      Prelude.<$> (x Data..@? "applianceModeSupport")
+      Prelude.<*> (x Data..@? "dnsSupport")
+      Prelude.<*> (x Data..@? "ipv6Support")
+
+instance
+  Prelude.Hashable
+    TransitGatewayVpcAttachmentOptions
+  where
+  hashWithSalt
+    _salt
+    TransitGatewayVpcAttachmentOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` applianceModeSupport
+        `Prelude.hashWithSalt` dnsSupport
+        `Prelude.hashWithSalt` ipv6Support
+
+instance
+  Prelude.NFData
+    TransitGatewayVpcAttachmentOptions
+  where
+  rnf TransitGatewayVpcAttachmentOptions' {..} =
+    Prelude.rnf applianceModeSupport
+      `Prelude.seq` Prelude.rnf dnsSupport
+      `Prelude.seq` Prelude.rnf ipv6Support
diff --git a/gen/Amazonka/EC2/Types/TransportProtocol.hs b/gen/Amazonka/EC2/Types/TransportProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TransportProtocol.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TransportProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TransportProtocol
+  ( TransportProtocol
+      ( ..,
+        TransportProtocol_Tcp,
+        TransportProtocol_Udp
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransportProtocol = TransportProtocol'
+  { fromTransportProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransportProtocol_Tcp :: TransportProtocol
+pattern TransportProtocol_Tcp = TransportProtocol' "tcp"
+
+pattern TransportProtocol_Udp :: TransportProtocol
+pattern TransportProtocol_Udp = TransportProtocol' "udp"
+
+{-# COMPLETE
+  TransportProtocol_Tcp,
+  TransportProtocol_Udp,
+  TransportProtocol'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TrunkInterfaceAssociation.hs b/gen/Amazonka/EC2/Types/TrunkInterfaceAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrunkInterfaceAssociation.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrunkInterfaceAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrunkInterfaceAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.InterfaceProtocolType
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Currently available in __limited preview only__. If you are interested
+-- in using this feature, contact your account manager.
+--
+-- Information about an association between a branch network interface with
+-- a trunk network interface.
+--
+-- /See:/ 'newTrunkInterfaceAssociation' smart constructor.
+data TrunkInterfaceAssociation = TrunkInterfaceAssociation'
+  { -- | The ID of the association.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the branch network interface.
+    branchInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The application key when you use the GRE protocol.
+    greKey :: Prelude.Maybe Prelude.Int,
+    -- | The interface protocol. Valid values are @VLAN@ and @GRE@.
+    interfaceProtocol :: Prelude.Maybe InterfaceProtocolType,
+    -- | The tags for the trunk interface association.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the trunk network interface.
+    trunkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VLAN when you use the VLAN protocol.
+    vlanId :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TrunkInterfaceAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'trunkInterfaceAssociation_associationId' - The ID of the association.
+--
+-- 'branchInterfaceId', 'trunkInterfaceAssociation_branchInterfaceId' - The ID of the branch network interface.
+--
+-- 'greKey', 'trunkInterfaceAssociation_greKey' - The application key when you use the GRE protocol.
+--
+-- 'interfaceProtocol', 'trunkInterfaceAssociation_interfaceProtocol' - The interface protocol. Valid values are @VLAN@ and @GRE@.
+--
+-- 'tags', 'trunkInterfaceAssociation_tags' - The tags for the trunk interface association.
+--
+-- 'trunkInterfaceId', 'trunkInterfaceAssociation_trunkInterfaceId' - The ID of the trunk network interface.
+--
+-- 'vlanId', 'trunkInterfaceAssociation_vlanId' - The ID of the VLAN when you use the VLAN protocol.
+newTrunkInterfaceAssociation ::
+  TrunkInterfaceAssociation
+newTrunkInterfaceAssociation =
+  TrunkInterfaceAssociation'
+    { associationId =
+        Prelude.Nothing,
+      branchInterfaceId = Prelude.Nothing,
+      greKey = Prelude.Nothing,
+      interfaceProtocol = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trunkInterfaceId = Prelude.Nothing,
+      vlanId = Prelude.Nothing
+    }
+
+-- | The ID of the association.
+trunkInterfaceAssociation_associationId :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+trunkInterfaceAssociation_associationId = Lens.lens (\TrunkInterfaceAssociation' {associationId} -> associationId) (\s@TrunkInterfaceAssociation' {} a -> s {associationId = a} :: TrunkInterfaceAssociation)
+
+-- | The ID of the branch network interface.
+trunkInterfaceAssociation_branchInterfaceId :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+trunkInterfaceAssociation_branchInterfaceId = Lens.lens (\TrunkInterfaceAssociation' {branchInterfaceId} -> branchInterfaceId) (\s@TrunkInterfaceAssociation' {} a -> s {branchInterfaceId = a} :: TrunkInterfaceAssociation)
+
+-- | The application key when you use the GRE protocol.
+trunkInterfaceAssociation_greKey :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe Prelude.Int)
+trunkInterfaceAssociation_greKey = Lens.lens (\TrunkInterfaceAssociation' {greKey} -> greKey) (\s@TrunkInterfaceAssociation' {} a -> s {greKey = a} :: TrunkInterfaceAssociation)
+
+-- | The interface protocol. Valid values are @VLAN@ and @GRE@.
+trunkInterfaceAssociation_interfaceProtocol :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe InterfaceProtocolType)
+trunkInterfaceAssociation_interfaceProtocol = Lens.lens (\TrunkInterfaceAssociation' {interfaceProtocol} -> interfaceProtocol) (\s@TrunkInterfaceAssociation' {} a -> s {interfaceProtocol = a} :: TrunkInterfaceAssociation)
+
+-- | The tags for the trunk interface association.
+trunkInterfaceAssociation_tags :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe [Tag])
+trunkInterfaceAssociation_tags = Lens.lens (\TrunkInterfaceAssociation' {tags} -> tags) (\s@TrunkInterfaceAssociation' {} a -> s {tags = a} :: TrunkInterfaceAssociation) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the trunk network interface.
+trunkInterfaceAssociation_trunkInterfaceId :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe Prelude.Text)
+trunkInterfaceAssociation_trunkInterfaceId = Lens.lens (\TrunkInterfaceAssociation' {trunkInterfaceId} -> trunkInterfaceId) (\s@TrunkInterfaceAssociation' {} a -> s {trunkInterfaceId = a} :: TrunkInterfaceAssociation)
+
+-- | The ID of the VLAN when you use the VLAN protocol.
+trunkInterfaceAssociation_vlanId :: Lens.Lens' TrunkInterfaceAssociation (Prelude.Maybe Prelude.Int)
+trunkInterfaceAssociation_vlanId = Lens.lens (\TrunkInterfaceAssociation' {vlanId} -> vlanId) (\s@TrunkInterfaceAssociation' {} a -> s {vlanId = a} :: TrunkInterfaceAssociation)
+
+instance Data.FromXML TrunkInterfaceAssociation where
+  parseXML x =
+    TrunkInterfaceAssociation'
+      Prelude.<$> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "branchInterfaceId")
+      Prelude.<*> (x Data..@? "greKey")
+      Prelude.<*> (x Data..@? "interfaceProtocol")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "trunkInterfaceId")
+      Prelude.<*> (x Data..@? "vlanId")
+
+instance Prelude.Hashable TrunkInterfaceAssociation where
+  hashWithSalt _salt TrunkInterfaceAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` branchInterfaceId
+      `Prelude.hashWithSalt` greKey
+      `Prelude.hashWithSalt` interfaceProtocol
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trunkInterfaceId
+      `Prelude.hashWithSalt` vlanId
+
+instance Prelude.NFData TrunkInterfaceAssociation where
+  rnf TrunkInterfaceAssociation' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf branchInterfaceId
+      `Prelude.seq` Prelude.rnf greKey
+      `Prelude.seq` Prelude.rnf interfaceProtocol
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trunkInterfaceId
+      `Prelude.seq` Prelude.rnf vlanId
diff --git a/gen/Amazonka/EC2/Types/TrustProviderType.hs b/gen/Amazonka/EC2/Types/TrustProviderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TrustProviderType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TrustProviderType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TrustProviderType
+  ( TrustProviderType
+      ( ..,
+        TrustProviderType_Device,
+        TrustProviderType_User
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TrustProviderType = TrustProviderType'
+  { fromTrustProviderType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TrustProviderType_Device :: TrustProviderType
+pattern TrustProviderType_Device = TrustProviderType' "device"
+
+pattern TrustProviderType_User :: TrustProviderType
+pattern TrustProviderType_User = TrustProviderType' "user"
+
+{-# COMPLETE
+  TrustProviderType_Device,
+  TrustProviderType_User,
+  TrustProviderType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TunnelInsideIpVersion.hs b/gen/Amazonka/EC2/Types/TunnelInsideIpVersion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TunnelInsideIpVersion.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TunnelInsideIpVersion
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TunnelInsideIpVersion
+  ( TunnelInsideIpVersion
+      ( ..,
+        TunnelInsideIpVersion_Ipv4,
+        TunnelInsideIpVersion_Ipv6
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype TunnelInsideIpVersion = TunnelInsideIpVersion'
+  { fromTunnelInsideIpVersion ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TunnelInsideIpVersion_Ipv4 :: TunnelInsideIpVersion
+pattern TunnelInsideIpVersion_Ipv4 = TunnelInsideIpVersion' "ipv4"
+
+pattern TunnelInsideIpVersion_Ipv6 :: TunnelInsideIpVersion
+pattern TunnelInsideIpVersion_Ipv6 = TunnelInsideIpVersion' "ipv6"
+
+{-# COMPLETE
+  TunnelInsideIpVersion_Ipv4,
+  TunnelInsideIpVersion_Ipv6,
+  TunnelInsideIpVersion'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/TunnelOption.hs b/gen/Amazonka/EC2/Types/TunnelOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/TunnelOption.hs
@@ -0,0 +1,370 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.TunnelOption
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.TunnelOption where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IKEVersionsListValue
+import Amazonka.EC2.Types.Phase1DHGroupNumbersListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsListValue
+import Amazonka.EC2.Types.VpnTunnelLogOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | The VPN tunnel options.
+--
+-- /See:/ 'newTunnelOption' smart constructor.
+data TunnelOption = TunnelOption'
+  { -- | The action to take after a DPD timeout occurs.
+    dpdTimeoutAction :: Prelude.Maybe Prelude.Text,
+    -- | The number of seconds after which a DPD timeout occurs.
+    dpdTimeoutSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The IKE versions that are permitted for the VPN tunnel.
+    ikeVersions :: Prelude.Maybe [IKEVersionsListValue],
+    -- | Options for logging VPN tunnel activity.
+    logOptions :: Prelude.Maybe VpnTunnelLogOptions,
+    -- | The external IP address of the VPN tunnel.
+    outsideIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The permitted Diffie-Hellman group numbers for the VPN tunnel for phase
+    -- 1 IKE negotiations.
+    phase1DHGroupNumbers :: Prelude.Maybe [Phase1DHGroupNumbersListValue],
+    -- | The permitted encryption algorithms for the VPN tunnel for phase 1 IKE
+    -- negotiations.
+    phase1EncryptionAlgorithms :: Prelude.Maybe [Phase1EncryptionAlgorithmsListValue],
+    -- | The permitted integrity algorithms for the VPN tunnel for phase 1 IKE
+    -- negotiations.
+    phase1IntegrityAlgorithms :: Prelude.Maybe [Phase1IntegrityAlgorithmsListValue],
+    -- | The lifetime for phase 1 of the IKE negotiation, in seconds.
+    phase1LifetimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The permitted Diffie-Hellman group numbers for the VPN tunnel for phase
+    -- 2 IKE negotiations.
+    phase2DHGroupNumbers :: Prelude.Maybe [Phase2DHGroupNumbersListValue],
+    -- | The permitted encryption algorithms for the VPN tunnel for phase 2 IKE
+    -- negotiations.
+    phase2EncryptionAlgorithms :: Prelude.Maybe [Phase2EncryptionAlgorithmsListValue],
+    -- | The permitted integrity algorithms for the VPN tunnel for phase 2 IKE
+    -- negotiations.
+    phase2IntegrityAlgorithms :: Prelude.Maybe [Phase2IntegrityAlgorithmsListValue],
+    -- | The lifetime for phase 2 of the IKE negotiation, in seconds.
+    phase2LifetimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The pre-shared key (PSK) to establish initial authentication between the
+    -- virtual private gateway and the customer gateway.
+    preSharedKey :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of the rekey window determined by
+    -- @RekeyMarginTimeSeconds@ during which the rekey time is randomly
+    -- selected.
+    rekeyFuzzPercentage :: Prelude.Maybe Prelude.Int,
+    -- | The margin time, in seconds, before the phase 2 lifetime expires, during
+    -- which the Amazon Web Services side of the VPN connection performs an IKE
+    -- rekey.
+    rekeyMarginTimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The number of packets in an IKE replay window.
+    replayWindowSize :: Prelude.Maybe Prelude.Int,
+    -- | The action to take when the establishing the VPN tunnels for a VPN
+    -- connection.
+    startupAction :: Prelude.Maybe Prelude.Text,
+    -- | The range of inside IPv4 addresses for the tunnel.
+    tunnelInsideCidr :: Prelude.Maybe Prelude.Text,
+    -- | The range of inside IPv6 addresses for the tunnel.
+    tunnelInsideIpv6Cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TunnelOption' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dpdTimeoutAction', 'tunnelOption_dpdTimeoutAction' - The action to take after a DPD timeout occurs.
+--
+-- 'dpdTimeoutSeconds', 'tunnelOption_dpdTimeoutSeconds' - The number of seconds after which a DPD timeout occurs.
+--
+-- 'ikeVersions', 'tunnelOption_ikeVersions' - The IKE versions that are permitted for the VPN tunnel.
+--
+-- 'logOptions', 'tunnelOption_logOptions' - Options for logging VPN tunnel activity.
+--
+-- 'outsideIpAddress', 'tunnelOption_outsideIpAddress' - The external IP address of the VPN tunnel.
+--
+-- 'phase1DHGroupNumbers', 'tunnelOption_phase1DHGroupNumbers' - The permitted Diffie-Hellman group numbers for the VPN tunnel for phase
+-- 1 IKE negotiations.
+--
+-- 'phase1EncryptionAlgorithms', 'tunnelOption_phase1EncryptionAlgorithms' - The permitted encryption algorithms for the VPN tunnel for phase 1 IKE
+-- negotiations.
+--
+-- 'phase1IntegrityAlgorithms', 'tunnelOption_phase1IntegrityAlgorithms' - The permitted integrity algorithms for the VPN tunnel for phase 1 IKE
+-- negotiations.
+--
+-- 'phase1LifetimeSeconds', 'tunnelOption_phase1LifetimeSeconds' - The lifetime for phase 1 of the IKE negotiation, in seconds.
+--
+-- 'phase2DHGroupNumbers', 'tunnelOption_phase2DHGroupNumbers' - The permitted Diffie-Hellman group numbers for the VPN tunnel for phase
+-- 2 IKE negotiations.
+--
+-- 'phase2EncryptionAlgorithms', 'tunnelOption_phase2EncryptionAlgorithms' - The permitted encryption algorithms for the VPN tunnel for phase 2 IKE
+-- negotiations.
+--
+-- 'phase2IntegrityAlgorithms', 'tunnelOption_phase2IntegrityAlgorithms' - The permitted integrity algorithms for the VPN tunnel for phase 2 IKE
+-- negotiations.
+--
+-- 'phase2LifetimeSeconds', 'tunnelOption_phase2LifetimeSeconds' - The lifetime for phase 2 of the IKE negotiation, in seconds.
+--
+-- 'preSharedKey', 'tunnelOption_preSharedKey' - The pre-shared key (PSK) to establish initial authentication between the
+-- virtual private gateway and the customer gateway.
+--
+-- 'rekeyFuzzPercentage', 'tunnelOption_rekeyFuzzPercentage' - The percentage of the rekey window determined by
+-- @RekeyMarginTimeSeconds@ during which the rekey time is randomly
+-- selected.
+--
+-- 'rekeyMarginTimeSeconds', 'tunnelOption_rekeyMarginTimeSeconds' - The margin time, in seconds, before the phase 2 lifetime expires, during
+-- which the Amazon Web Services side of the VPN connection performs an IKE
+-- rekey.
+--
+-- 'replayWindowSize', 'tunnelOption_replayWindowSize' - The number of packets in an IKE replay window.
+--
+-- 'startupAction', 'tunnelOption_startupAction' - The action to take when the establishing the VPN tunnels for a VPN
+-- connection.
+--
+-- 'tunnelInsideCidr', 'tunnelOption_tunnelInsideCidr' - The range of inside IPv4 addresses for the tunnel.
+--
+-- 'tunnelInsideIpv6Cidr', 'tunnelOption_tunnelInsideIpv6Cidr' - The range of inside IPv6 addresses for the tunnel.
+newTunnelOption ::
+  TunnelOption
+newTunnelOption =
+  TunnelOption'
+    { dpdTimeoutAction = Prelude.Nothing,
+      dpdTimeoutSeconds = Prelude.Nothing,
+      ikeVersions = Prelude.Nothing,
+      logOptions = Prelude.Nothing,
+      outsideIpAddress = Prelude.Nothing,
+      phase1DHGroupNumbers = Prelude.Nothing,
+      phase1EncryptionAlgorithms = Prelude.Nothing,
+      phase1IntegrityAlgorithms = Prelude.Nothing,
+      phase1LifetimeSeconds = Prelude.Nothing,
+      phase2DHGroupNumbers = Prelude.Nothing,
+      phase2EncryptionAlgorithms = Prelude.Nothing,
+      phase2IntegrityAlgorithms = Prelude.Nothing,
+      phase2LifetimeSeconds = Prelude.Nothing,
+      preSharedKey = Prelude.Nothing,
+      rekeyFuzzPercentage = Prelude.Nothing,
+      rekeyMarginTimeSeconds = Prelude.Nothing,
+      replayWindowSize = Prelude.Nothing,
+      startupAction = Prelude.Nothing,
+      tunnelInsideCidr = Prelude.Nothing,
+      tunnelInsideIpv6Cidr = Prelude.Nothing
+    }
+
+-- | The action to take after a DPD timeout occurs.
+tunnelOption_dpdTimeoutAction :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Text)
+tunnelOption_dpdTimeoutAction = Lens.lens (\TunnelOption' {dpdTimeoutAction} -> dpdTimeoutAction) (\s@TunnelOption' {} a -> s {dpdTimeoutAction = a} :: TunnelOption)
+
+-- | The number of seconds after which a DPD timeout occurs.
+tunnelOption_dpdTimeoutSeconds :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Int)
+tunnelOption_dpdTimeoutSeconds = Lens.lens (\TunnelOption' {dpdTimeoutSeconds} -> dpdTimeoutSeconds) (\s@TunnelOption' {} a -> s {dpdTimeoutSeconds = a} :: TunnelOption)
+
+-- | The IKE versions that are permitted for the VPN tunnel.
+tunnelOption_ikeVersions :: Lens.Lens' TunnelOption (Prelude.Maybe [IKEVersionsListValue])
+tunnelOption_ikeVersions = Lens.lens (\TunnelOption' {ikeVersions} -> ikeVersions) (\s@TunnelOption' {} a -> s {ikeVersions = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | Options for logging VPN tunnel activity.
+tunnelOption_logOptions :: Lens.Lens' TunnelOption (Prelude.Maybe VpnTunnelLogOptions)
+tunnelOption_logOptions = Lens.lens (\TunnelOption' {logOptions} -> logOptions) (\s@TunnelOption' {} a -> s {logOptions = a} :: TunnelOption)
+
+-- | The external IP address of the VPN tunnel.
+tunnelOption_outsideIpAddress :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Text)
+tunnelOption_outsideIpAddress = Lens.lens (\TunnelOption' {outsideIpAddress} -> outsideIpAddress) (\s@TunnelOption' {} a -> s {outsideIpAddress = a} :: TunnelOption)
+
+-- | The permitted Diffie-Hellman group numbers for the VPN tunnel for phase
+-- 1 IKE negotiations.
+tunnelOption_phase1DHGroupNumbers :: Lens.Lens' TunnelOption (Prelude.Maybe [Phase1DHGroupNumbersListValue])
+tunnelOption_phase1DHGroupNumbers = Lens.lens (\TunnelOption' {phase1DHGroupNumbers} -> phase1DHGroupNumbers) (\s@TunnelOption' {} a -> s {phase1DHGroupNumbers = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The permitted encryption algorithms for the VPN tunnel for phase 1 IKE
+-- negotiations.
+tunnelOption_phase1EncryptionAlgorithms :: Lens.Lens' TunnelOption (Prelude.Maybe [Phase1EncryptionAlgorithmsListValue])
+tunnelOption_phase1EncryptionAlgorithms = Lens.lens (\TunnelOption' {phase1EncryptionAlgorithms} -> phase1EncryptionAlgorithms) (\s@TunnelOption' {} a -> s {phase1EncryptionAlgorithms = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The permitted integrity algorithms for the VPN tunnel for phase 1 IKE
+-- negotiations.
+tunnelOption_phase1IntegrityAlgorithms :: Lens.Lens' TunnelOption (Prelude.Maybe [Phase1IntegrityAlgorithmsListValue])
+tunnelOption_phase1IntegrityAlgorithms = Lens.lens (\TunnelOption' {phase1IntegrityAlgorithms} -> phase1IntegrityAlgorithms) (\s@TunnelOption' {} a -> s {phase1IntegrityAlgorithms = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The lifetime for phase 1 of the IKE negotiation, in seconds.
+tunnelOption_phase1LifetimeSeconds :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Int)
+tunnelOption_phase1LifetimeSeconds = Lens.lens (\TunnelOption' {phase1LifetimeSeconds} -> phase1LifetimeSeconds) (\s@TunnelOption' {} a -> s {phase1LifetimeSeconds = a} :: TunnelOption)
+
+-- | The permitted Diffie-Hellman group numbers for the VPN tunnel for phase
+-- 2 IKE negotiations.
+tunnelOption_phase2DHGroupNumbers :: Lens.Lens' TunnelOption (Prelude.Maybe [Phase2DHGroupNumbersListValue])
+tunnelOption_phase2DHGroupNumbers = Lens.lens (\TunnelOption' {phase2DHGroupNumbers} -> phase2DHGroupNumbers) (\s@TunnelOption' {} a -> s {phase2DHGroupNumbers = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The permitted encryption algorithms for the VPN tunnel for phase 2 IKE
+-- negotiations.
+tunnelOption_phase2EncryptionAlgorithms :: Lens.Lens' TunnelOption (Prelude.Maybe [Phase2EncryptionAlgorithmsListValue])
+tunnelOption_phase2EncryptionAlgorithms = Lens.lens (\TunnelOption' {phase2EncryptionAlgorithms} -> phase2EncryptionAlgorithms) (\s@TunnelOption' {} a -> s {phase2EncryptionAlgorithms = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The permitted integrity algorithms for the VPN tunnel for phase 2 IKE
+-- negotiations.
+tunnelOption_phase2IntegrityAlgorithms :: Lens.Lens' TunnelOption (Prelude.Maybe [Phase2IntegrityAlgorithmsListValue])
+tunnelOption_phase2IntegrityAlgorithms = Lens.lens (\TunnelOption' {phase2IntegrityAlgorithms} -> phase2IntegrityAlgorithms) (\s@TunnelOption' {} a -> s {phase2IntegrityAlgorithms = a} :: TunnelOption) Prelude.. Lens.mapping Lens.coerced
+
+-- | The lifetime for phase 2 of the IKE negotiation, in seconds.
+tunnelOption_phase2LifetimeSeconds :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Int)
+tunnelOption_phase2LifetimeSeconds = Lens.lens (\TunnelOption' {phase2LifetimeSeconds} -> phase2LifetimeSeconds) (\s@TunnelOption' {} a -> s {phase2LifetimeSeconds = a} :: TunnelOption)
+
+-- | The pre-shared key (PSK) to establish initial authentication between the
+-- virtual private gateway and the customer gateway.
+tunnelOption_preSharedKey :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Text)
+tunnelOption_preSharedKey = Lens.lens (\TunnelOption' {preSharedKey} -> preSharedKey) (\s@TunnelOption' {} a -> s {preSharedKey = a} :: TunnelOption)
+
+-- | The percentage of the rekey window determined by
+-- @RekeyMarginTimeSeconds@ during which the rekey time is randomly
+-- selected.
+tunnelOption_rekeyFuzzPercentage :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Int)
+tunnelOption_rekeyFuzzPercentage = Lens.lens (\TunnelOption' {rekeyFuzzPercentage} -> rekeyFuzzPercentage) (\s@TunnelOption' {} a -> s {rekeyFuzzPercentage = a} :: TunnelOption)
+
+-- | The margin time, in seconds, before the phase 2 lifetime expires, during
+-- which the Amazon Web Services side of the VPN connection performs an IKE
+-- rekey.
+tunnelOption_rekeyMarginTimeSeconds :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Int)
+tunnelOption_rekeyMarginTimeSeconds = Lens.lens (\TunnelOption' {rekeyMarginTimeSeconds} -> rekeyMarginTimeSeconds) (\s@TunnelOption' {} a -> s {rekeyMarginTimeSeconds = a} :: TunnelOption)
+
+-- | The number of packets in an IKE replay window.
+tunnelOption_replayWindowSize :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Int)
+tunnelOption_replayWindowSize = Lens.lens (\TunnelOption' {replayWindowSize} -> replayWindowSize) (\s@TunnelOption' {} a -> s {replayWindowSize = a} :: TunnelOption)
+
+-- | The action to take when the establishing the VPN tunnels for a VPN
+-- connection.
+tunnelOption_startupAction :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Text)
+tunnelOption_startupAction = Lens.lens (\TunnelOption' {startupAction} -> startupAction) (\s@TunnelOption' {} a -> s {startupAction = a} :: TunnelOption)
+
+-- | The range of inside IPv4 addresses for the tunnel.
+tunnelOption_tunnelInsideCidr :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Text)
+tunnelOption_tunnelInsideCidr = Lens.lens (\TunnelOption' {tunnelInsideCidr} -> tunnelInsideCidr) (\s@TunnelOption' {} a -> s {tunnelInsideCidr = a} :: TunnelOption)
+
+-- | The range of inside IPv6 addresses for the tunnel.
+tunnelOption_tunnelInsideIpv6Cidr :: Lens.Lens' TunnelOption (Prelude.Maybe Prelude.Text)
+tunnelOption_tunnelInsideIpv6Cidr = Lens.lens (\TunnelOption' {tunnelInsideIpv6Cidr} -> tunnelInsideIpv6Cidr) (\s@TunnelOption' {} a -> s {tunnelInsideIpv6Cidr = a} :: TunnelOption)
+
+instance Data.FromXML TunnelOption where
+  parseXML x =
+    TunnelOption'
+      Prelude.<$> (x Data..@? "dpdTimeoutAction")
+      Prelude.<*> (x Data..@? "dpdTimeoutSeconds")
+      Prelude.<*> ( x
+                      Data..@? "ikeVersionSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "logOptions")
+      Prelude.<*> (x Data..@? "outsideIpAddress")
+      Prelude.<*> ( x
+                      Data..@? "phase1DHGroupNumberSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "phase1EncryptionAlgorithmSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "phase1IntegrityAlgorithmSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "phase1LifetimeSeconds")
+      Prelude.<*> ( x
+                      Data..@? "phase2DHGroupNumberSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "phase2EncryptionAlgorithmSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "phase2IntegrityAlgorithmSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "phase2LifetimeSeconds")
+      Prelude.<*> (x Data..@? "preSharedKey")
+      Prelude.<*> (x Data..@? "rekeyFuzzPercentage")
+      Prelude.<*> (x Data..@? "rekeyMarginTimeSeconds")
+      Prelude.<*> (x Data..@? "replayWindowSize")
+      Prelude.<*> (x Data..@? "startupAction")
+      Prelude.<*> (x Data..@? "tunnelInsideCidr")
+      Prelude.<*> (x Data..@? "tunnelInsideIpv6Cidr")
+
+instance Prelude.Hashable TunnelOption where
+  hashWithSalt _salt TunnelOption' {..} =
+    _salt
+      `Prelude.hashWithSalt` dpdTimeoutAction
+      `Prelude.hashWithSalt` dpdTimeoutSeconds
+      `Prelude.hashWithSalt` ikeVersions
+      `Prelude.hashWithSalt` logOptions
+      `Prelude.hashWithSalt` outsideIpAddress
+      `Prelude.hashWithSalt` phase1DHGroupNumbers
+      `Prelude.hashWithSalt` phase1EncryptionAlgorithms
+      `Prelude.hashWithSalt` phase1IntegrityAlgorithms
+      `Prelude.hashWithSalt` phase1LifetimeSeconds
+      `Prelude.hashWithSalt` phase2DHGroupNumbers
+      `Prelude.hashWithSalt` phase2EncryptionAlgorithms
+      `Prelude.hashWithSalt` phase2IntegrityAlgorithms
+      `Prelude.hashWithSalt` phase2LifetimeSeconds
+      `Prelude.hashWithSalt` preSharedKey
+      `Prelude.hashWithSalt` rekeyFuzzPercentage
+      `Prelude.hashWithSalt` rekeyMarginTimeSeconds
+      `Prelude.hashWithSalt` replayWindowSize
+      `Prelude.hashWithSalt` startupAction
+      `Prelude.hashWithSalt` tunnelInsideCidr
+      `Prelude.hashWithSalt` tunnelInsideIpv6Cidr
+
+instance Prelude.NFData TunnelOption where
+  rnf TunnelOption' {..} =
+    Prelude.rnf dpdTimeoutAction
+      `Prelude.seq` Prelude.rnf dpdTimeoutSeconds
+      `Prelude.seq` Prelude.rnf ikeVersions
+      `Prelude.seq` Prelude.rnf logOptions
+      `Prelude.seq` Prelude.rnf outsideIpAddress
+      `Prelude.seq` Prelude.rnf phase1DHGroupNumbers
+      `Prelude.seq` Prelude.rnf phase1EncryptionAlgorithms
+      `Prelude.seq` Prelude.rnf phase1IntegrityAlgorithms
+      `Prelude.seq` Prelude.rnf phase1LifetimeSeconds
+      `Prelude.seq` Prelude.rnf phase2DHGroupNumbers
+      `Prelude.seq` Prelude.rnf phase2EncryptionAlgorithms
+      `Prelude.seq` Prelude.rnf phase2IntegrityAlgorithms
+      `Prelude.seq` Prelude.rnf phase2LifetimeSeconds
+      `Prelude.seq` Prelude.rnf preSharedKey
+      `Prelude.seq` Prelude.rnf rekeyFuzzPercentage
+      `Prelude.seq` Prelude.rnf rekeyMarginTimeSeconds
+      `Prelude.seq` Prelude.rnf replayWindowSize
+      `Prelude.seq` Prelude.rnf startupAction
+      `Prelude.seq` Prelude.rnf tunnelInsideCidr
+      `Prelude.seq` Prelude.rnf
+        tunnelInsideIpv6Cidr
diff --git a/gen/Amazonka/EC2/Types/UnlimitedSupportedInstanceFamily.hs b/gen/Amazonka/EC2/Types/UnlimitedSupportedInstanceFamily.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UnlimitedSupportedInstanceFamily.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UnlimitedSupportedInstanceFamily
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UnlimitedSupportedInstanceFamily
+  ( UnlimitedSupportedInstanceFamily
+      ( ..,
+        UnlimitedSupportedInstanceFamily_T2,
+        UnlimitedSupportedInstanceFamily_T3,
+        UnlimitedSupportedInstanceFamily_T3a,
+        UnlimitedSupportedInstanceFamily_T4g
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype UnlimitedSupportedInstanceFamily = UnlimitedSupportedInstanceFamily'
+  { fromUnlimitedSupportedInstanceFamily ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UnlimitedSupportedInstanceFamily_T2 :: UnlimitedSupportedInstanceFamily
+pattern UnlimitedSupportedInstanceFamily_T2 = UnlimitedSupportedInstanceFamily' "t2"
+
+pattern UnlimitedSupportedInstanceFamily_T3 :: UnlimitedSupportedInstanceFamily
+pattern UnlimitedSupportedInstanceFamily_T3 = UnlimitedSupportedInstanceFamily' "t3"
+
+pattern UnlimitedSupportedInstanceFamily_T3a :: UnlimitedSupportedInstanceFamily
+pattern UnlimitedSupportedInstanceFamily_T3a = UnlimitedSupportedInstanceFamily' "t3a"
+
+pattern UnlimitedSupportedInstanceFamily_T4g :: UnlimitedSupportedInstanceFamily
+pattern UnlimitedSupportedInstanceFamily_T4g = UnlimitedSupportedInstanceFamily' "t4g"
+
+{-# COMPLETE
+  UnlimitedSupportedInstanceFamily_T2,
+  UnlimitedSupportedInstanceFamily_T3,
+  UnlimitedSupportedInstanceFamily_T3a,
+  UnlimitedSupportedInstanceFamily_T4g,
+  UnlimitedSupportedInstanceFamily'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationErrorCode.hs b/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationErrorCode.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationErrorCode
+  ( UnsuccessfulInstanceCreditSpecificationErrorCode
+      ( ..,
+        UnsuccessfulInstanceCreditSpecificationErrorCode_IncorrectInstanceState,
+        UnsuccessfulInstanceCreditSpecificationErrorCode_InstanceCreditSpecification_NotSupported,
+        UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_Malformed,
+        UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_NotFound
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype UnsuccessfulInstanceCreditSpecificationErrorCode = UnsuccessfulInstanceCreditSpecificationErrorCode'
+  { fromUnsuccessfulInstanceCreditSpecificationErrorCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_IncorrectInstanceState :: UnsuccessfulInstanceCreditSpecificationErrorCode
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_IncorrectInstanceState = UnsuccessfulInstanceCreditSpecificationErrorCode' "IncorrectInstanceState"
+
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_InstanceCreditSpecification_NotSupported :: UnsuccessfulInstanceCreditSpecificationErrorCode
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_InstanceCreditSpecification_NotSupported = UnsuccessfulInstanceCreditSpecificationErrorCode' "InstanceCreditSpecification.NotSupported"
+
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_Malformed :: UnsuccessfulInstanceCreditSpecificationErrorCode
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_Malformed = UnsuccessfulInstanceCreditSpecificationErrorCode' "InvalidInstanceID.Malformed"
+
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_NotFound :: UnsuccessfulInstanceCreditSpecificationErrorCode
+pattern UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_NotFound = UnsuccessfulInstanceCreditSpecificationErrorCode' "InvalidInstanceID.NotFound"
+
+{-# COMPLETE
+  UnsuccessfulInstanceCreditSpecificationErrorCode_IncorrectInstanceState,
+  UnsuccessfulInstanceCreditSpecificationErrorCode_InstanceCreditSpecification_NotSupported,
+  UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_Malformed,
+  UnsuccessfulInstanceCreditSpecificationErrorCode_InvalidInstanceID_NotFound,
+  UnsuccessfulInstanceCreditSpecificationErrorCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationItem.hs b/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationItem.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the burstable performance instance whose credit option for CPU
+-- usage was not modified.
+--
+-- /See:/ 'newUnsuccessfulInstanceCreditSpecificationItem' smart constructor.
+data UnsuccessfulInstanceCreditSpecificationItem = UnsuccessfulInstanceCreditSpecificationItem'
+  { -- | The applicable error for the burstable performance instance whose credit
+    -- option for CPU usage was not modified.
+    error :: Prelude.Maybe UnsuccessfulInstanceCreditSpecificationItemError,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnsuccessfulInstanceCreditSpecificationItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'unsuccessfulInstanceCreditSpecificationItem_error' - The applicable error for the burstable performance instance whose credit
+-- option for CPU usage was not modified.
+--
+-- 'instanceId', 'unsuccessfulInstanceCreditSpecificationItem_instanceId' - The ID of the instance.
+newUnsuccessfulInstanceCreditSpecificationItem ::
+  UnsuccessfulInstanceCreditSpecificationItem
+newUnsuccessfulInstanceCreditSpecificationItem =
+  UnsuccessfulInstanceCreditSpecificationItem'
+    { error =
+        Prelude.Nothing,
+      instanceId = Prelude.Nothing
+    }
+
+-- | The applicable error for the burstable performance instance whose credit
+-- option for CPU usage was not modified.
+unsuccessfulInstanceCreditSpecificationItem_error :: Lens.Lens' UnsuccessfulInstanceCreditSpecificationItem (Prelude.Maybe UnsuccessfulInstanceCreditSpecificationItemError)
+unsuccessfulInstanceCreditSpecificationItem_error = Lens.lens (\UnsuccessfulInstanceCreditSpecificationItem' {error} -> error) (\s@UnsuccessfulInstanceCreditSpecificationItem' {} a -> s {error = a} :: UnsuccessfulInstanceCreditSpecificationItem)
+
+-- | The ID of the instance.
+unsuccessfulInstanceCreditSpecificationItem_instanceId :: Lens.Lens' UnsuccessfulInstanceCreditSpecificationItem (Prelude.Maybe Prelude.Text)
+unsuccessfulInstanceCreditSpecificationItem_instanceId = Lens.lens (\UnsuccessfulInstanceCreditSpecificationItem' {instanceId} -> instanceId) (\s@UnsuccessfulInstanceCreditSpecificationItem' {} a -> s {instanceId = a} :: UnsuccessfulInstanceCreditSpecificationItem)
+
+instance
+  Data.FromXML
+    UnsuccessfulInstanceCreditSpecificationItem
+  where
+  parseXML x =
+    UnsuccessfulInstanceCreditSpecificationItem'
+      Prelude.<$> (x Data..@? "error")
+      Prelude.<*> (x Data..@? "instanceId")
+
+instance
+  Prelude.Hashable
+    UnsuccessfulInstanceCreditSpecificationItem
+  where
+  hashWithSalt
+    _salt
+    UnsuccessfulInstanceCreditSpecificationItem' {..} =
+      _salt
+        `Prelude.hashWithSalt` error
+        `Prelude.hashWithSalt` instanceId
+
+instance
+  Prelude.NFData
+    UnsuccessfulInstanceCreditSpecificationItem
+  where
+  rnf UnsuccessfulInstanceCreditSpecificationItem' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf instanceId
diff --git a/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationItemError.hs b/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationItemError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UnsuccessfulInstanceCreditSpecificationItemError.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItemError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationItemError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UnsuccessfulInstanceCreditSpecificationErrorCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the error for the burstable performance instance whose
+-- credit option for CPU usage was not modified.
+--
+-- /See:/ 'newUnsuccessfulInstanceCreditSpecificationItemError' smart constructor.
+data UnsuccessfulInstanceCreditSpecificationItemError = UnsuccessfulInstanceCreditSpecificationItemError'
+  { -- | The error code.
+    code :: Prelude.Maybe UnsuccessfulInstanceCreditSpecificationErrorCode,
+    -- | The applicable error message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnsuccessfulInstanceCreditSpecificationItemError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'unsuccessfulInstanceCreditSpecificationItemError_code' - The error code.
+--
+-- 'message', 'unsuccessfulInstanceCreditSpecificationItemError_message' - The applicable error message.
+newUnsuccessfulInstanceCreditSpecificationItemError ::
+  UnsuccessfulInstanceCreditSpecificationItemError
+newUnsuccessfulInstanceCreditSpecificationItemError =
+  UnsuccessfulInstanceCreditSpecificationItemError'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+unsuccessfulInstanceCreditSpecificationItemError_code :: Lens.Lens' UnsuccessfulInstanceCreditSpecificationItemError (Prelude.Maybe UnsuccessfulInstanceCreditSpecificationErrorCode)
+unsuccessfulInstanceCreditSpecificationItemError_code = Lens.lens (\UnsuccessfulInstanceCreditSpecificationItemError' {code} -> code) (\s@UnsuccessfulInstanceCreditSpecificationItemError' {} a -> s {code = a} :: UnsuccessfulInstanceCreditSpecificationItemError)
+
+-- | The applicable error message.
+unsuccessfulInstanceCreditSpecificationItemError_message :: Lens.Lens' UnsuccessfulInstanceCreditSpecificationItemError (Prelude.Maybe Prelude.Text)
+unsuccessfulInstanceCreditSpecificationItemError_message = Lens.lens (\UnsuccessfulInstanceCreditSpecificationItemError' {message} -> message) (\s@UnsuccessfulInstanceCreditSpecificationItemError' {} a -> s {message = a} :: UnsuccessfulInstanceCreditSpecificationItemError)
+
+instance
+  Data.FromXML
+    UnsuccessfulInstanceCreditSpecificationItemError
+  where
+  parseXML x =
+    UnsuccessfulInstanceCreditSpecificationItemError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    UnsuccessfulInstanceCreditSpecificationItemError
+  where
+  hashWithSalt
+    _salt
+    UnsuccessfulInstanceCreditSpecificationItemError' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    UnsuccessfulInstanceCreditSpecificationItemError
+  where
+  rnf
+    UnsuccessfulInstanceCreditSpecificationItemError' {..} =
+      Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/UnsuccessfulItem.hs b/gen/Amazonka/EC2/Types/UnsuccessfulItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UnsuccessfulItem.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UnsuccessfulItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UnsuccessfulItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.UnsuccessfulItemError
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about items that were not successfully processed in a batch
+-- call.
+--
+-- /See:/ 'newUnsuccessfulItem' smart constructor.
+data UnsuccessfulItem = UnsuccessfulItem'
+  { -- | Information about the error.
+    error :: Prelude.Maybe UnsuccessfulItemError,
+    -- | The ID of the resource.
+    resourceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnsuccessfulItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'error', 'unsuccessfulItem_error' - Information about the error.
+--
+-- 'resourceId', 'unsuccessfulItem_resourceId' - The ID of the resource.
+newUnsuccessfulItem ::
+  UnsuccessfulItem
+newUnsuccessfulItem =
+  UnsuccessfulItem'
+    { error = Prelude.Nothing,
+      resourceId = Prelude.Nothing
+    }
+
+-- | Information about the error.
+unsuccessfulItem_error :: Lens.Lens' UnsuccessfulItem (Prelude.Maybe UnsuccessfulItemError)
+unsuccessfulItem_error = Lens.lens (\UnsuccessfulItem' {error} -> error) (\s@UnsuccessfulItem' {} a -> s {error = a} :: UnsuccessfulItem)
+
+-- | The ID of the resource.
+unsuccessfulItem_resourceId :: Lens.Lens' UnsuccessfulItem (Prelude.Maybe Prelude.Text)
+unsuccessfulItem_resourceId = Lens.lens (\UnsuccessfulItem' {resourceId} -> resourceId) (\s@UnsuccessfulItem' {} a -> s {resourceId = a} :: UnsuccessfulItem)
+
+instance Data.FromXML UnsuccessfulItem where
+  parseXML x =
+    UnsuccessfulItem'
+      Prelude.<$> (x Data..@? "error")
+      Prelude.<*> (x Data..@? "resourceId")
+
+instance Prelude.Hashable UnsuccessfulItem where
+  hashWithSalt _salt UnsuccessfulItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` error
+      `Prelude.hashWithSalt` resourceId
+
+instance Prelude.NFData UnsuccessfulItem where
+  rnf UnsuccessfulItem' {..} =
+    Prelude.rnf error
+      `Prelude.seq` Prelude.rnf resourceId
diff --git a/gen/Amazonka/EC2/Types/UnsuccessfulItemError.hs b/gen/Amazonka/EC2/Types/UnsuccessfulItemError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UnsuccessfulItemError.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UnsuccessfulItemError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UnsuccessfulItemError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the error that occurred. For more information about
+-- errors, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+--
+-- /See:/ 'newUnsuccessfulItemError' smart constructor.
+data UnsuccessfulItemError = UnsuccessfulItemError'
+  { -- | The error code.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message accompanying the error code.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnsuccessfulItemError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'unsuccessfulItemError_code' - The error code.
+--
+-- 'message', 'unsuccessfulItemError_message' - The error message accompanying the error code.
+newUnsuccessfulItemError ::
+  UnsuccessfulItemError
+newUnsuccessfulItemError =
+  UnsuccessfulItemError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code.
+unsuccessfulItemError_code :: Lens.Lens' UnsuccessfulItemError (Prelude.Maybe Prelude.Text)
+unsuccessfulItemError_code = Lens.lens (\UnsuccessfulItemError' {code} -> code) (\s@UnsuccessfulItemError' {} a -> s {code = a} :: UnsuccessfulItemError)
+
+-- | The error message accompanying the error code.
+unsuccessfulItemError_message :: Lens.Lens' UnsuccessfulItemError (Prelude.Maybe Prelude.Text)
+unsuccessfulItemError_message = Lens.lens (\UnsuccessfulItemError' {message} -> message) (\s@UnsuccessfulItemError' {} a -> s {message = a} :: UnsuccessfulItemError)
+
+instance Data.FromXML UnsuccessfulItemError where
+  parseXML x =
+    UnsuccessfulItemError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable UnsuccessfulItemError where
+  hashWithSalt _salt UnsuccessfulItemError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData UnsuccessfulItemError where
+  rnf UnsuccessfulItemError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/UsageClassType.hs b/gen/Amazonka/EC2/Types/UsageClassType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UsageClassType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UsageClassType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UsageClassType
+  ( UsageClassType
+      ( ..,
+        UsageClassType_On_demand,
+        UsageClassType_Spot
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype UsageClassType = UsageClassType'
+  { fromUsageClassType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UsageClassType_On_demand :: UsageClassType
+pattern UsageClassType_On_demand = UsageClassType' "on-demand"
+
+pattern UsageClassType_Spot :: UsageClassType
+pattern UsageClassType_Spot = UsageClassType' "spot"
+
+{-# COMPLETE
+  UsageClassType_On_demand,
+  UsageClassType_Spot,
+  UsageClassType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/UserBucket.hs b/gen/Amazonka/EC2/Types/UserBucket.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UserBucket.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UserBucket
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UserBucket where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Amazon S3 bucket for the disk image.
+--
+-- /See:/ 'newUserBucket' smart constructor.
+data UserBucket = UserBucket'
+  { -- | The name of the Amazon S3 bucket where the disk image is located.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The file name of the disk image.
+    s3Key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserBucket' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Bucket', 'userBucket_s3Bucket' - The name of the Amazon S3 bucket where the disk image is located.
+--
+-- 's3Key', 'userBucket_s3Key' - The file name of the disk image.
+newUserBucket ::
+  UserBucket
+newUserBucket =
+  UserBucket'
+    { s3Bucket = Prelude.Nothing,
+      s3Key = Prelude.Nothing
+    }
+
+-- | The name of the Amazon S3 bucket where the disk image is located.
+userBucket_s3Bucket :: Lens.Lens' UserBucket (Prelude.Maybe Prelude.Text)
+userBucket_s3Bucket = Lens.lens (\UserBucket' {s3Bucket} -> s3Bucket) (\s@UserBucket' {} a -> s {s3Bucket = a} :: UserBucket)
+
+-- | The file name of the disk image.
+userBucket_s3Key :: Lens.Lens' UserBucket (Prelude.Maybe Prelude.Text)
+userBucket_s3Key = Lens.lens (\UserBucket' {s3Key} -> s3Key) (\s@UserBucket' {} a -> s {s3Key = a} :: UserBucket)
+
+instance Prelude.Hashable UserBucket where
+  hashWithSalt _salt UserBucket' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData UserBucket where
+  rnf UserBucket' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
+
+instance Data.ToQuery UserBucket where
+  toQuery UserBucket' {..} =
+    Prelude.mconcat
+      ["S3Bucket" Data.=: s3Bucket, "S3Key" Data.=: s3Key]
diff --git a/gen/Amazonka/EC2/Types/UserBucketDetails.hs b/gen/Amazonka/EC2/Types/UserBucketDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UserBucketDetails.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UserBucketDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UserBucketDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the Amazon S3 bucket for the disk image.
+--
+-- /See:/ 'newUserBucketDetails' smart constructor.
+data UserBucketDetails = UserBucketDetails'
+  { -- | The Amazon S3 bucket from which the disk image was created.
+    s3Bucket :: Prelude.Maybe Prelude.Text,
+    -- | The file name of the disk image.
+    s3Key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserBucketDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Bucket', 'userBucketDetails_s3Bucket' - The Amazon S3 bucket from which the disk image was created.
+--
+-- 's3Key', 'userBucketDetails_s3Key' - The file name of the disk image.
+newUserBucketDetails ::
+  UserBucketDetails
+newUserBucketDetails =
+  UserBucketDetails'
+    { s3Bucket = Prelude.Nothing,
+      s3Key = Prelude.Nothing
+    }
+
+-- | The Amazon S3 bucket from which the disk image was created.
+userBucketDetails_s3Bucket :: Lens.Lens' UserBucketDetails (Prelude.Maybe Prelude.Text)
+userBucketDetails_s3Bucket = Lens.lens (\UserBucketDetails' {s3Bucket} -> s3Bucket) (\s@UserBucketDetails' {} a -> s {s3Bucket = a} :: UserBucketDetails)
+
+-- | The file name of the disk image.
+userBucketDetails_s3Key :: Lens.Lens' UserBucketDetails (Prelude.Maybe Prelude.Text)
+userBucketDetails_s3Key = Lens.lens (\UserBucketDetails' {s3Key} -> s3Key) (\s@UserBucketDetails' {} a -> s {s3Key = a} :: UserBucketDetails)
+
+instance Data.FromXML UserBucketDetails where
+  parseXML x =
+    UserBucketDetails'
+      Prelude.<$> (x Data..@? "s3Bucket")
+      Prelude.<*> (x Data..@? "s3Key")
+
+instance Prelude.Hashable UserBucketDetails where
+  hashWithSalt _salt UserBucketDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData UserBucketDetails where
+  rnf UserBucketDetails' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
diff --git a/gen/Amazonka/EC2/Types/UserData.hs b/gen/Amazonka/EC2/Types/UserData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UserData.hs
@@ -0,0 +1,69 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UserData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UserData where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the user data for an instance.
+--
+-- /See:/ 'newUserData' smart constructor.
+data UserData = UserData'
+  { -- | The user data. If you are using an Amazon Web Services SDK or 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.
+    data' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'data'', 'userData_data' - The user data. If you are using an Amazon Web Services SDK or 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.
+newUserData ::
+  UserData
+newUserData = UserData' {data' = Prelude.Nothing}
+
+-- | The user data. If you are using an Amazon Web Services SDK or 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.
+userData_data :: Lens.Lens' UserData (Prelude.Maybe Prelude.Text)
+userData_data = Lens.lens (\UserData' {data'} -> data') (\s@UserData' {} a -> s {data' = a} :: UserData)
+
+instance Prelude.Hashable UserData where
+  hashWithSalt _salt UserData' {..} =
+    _salt `Prelude.hashWithSalt` data'
+
+instance Prelude.NFData UserData where
+  rnf UserData' {..} = Prelude.rnf data'
+
+instance Data.ToQuery UserData where
+  toQuery UserData' {..} =
+    Prelude.mconcat ["Data" Data.=: data']
diff --git a/gen/Amazonka/EC2/Types/UserIdGroupPair.hs b/gen/Amazonka/EC2/Types/UserIdGroupPair.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UserIdGroupPair.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UserIdGroupPair
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UserIdGroupPair where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a security group and Amazon Web Services account ID pair.
+--
+-- We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- /See:/ 'newUserIdGroupPair' smart constructor.
+data UserIdGroupPair = UserIdGroupPair'
+  { -- | A description for the security group rule that references this user ID
+    -- group pair.
+    --
+    -- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+    -- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=;{}!$*
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the security group.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the security group. In a request, use this parameter for a
+    -- security group in EC2-Classic or a default VPC only. For a security
+    -- group in a nondefault VPC, use the security group ID.
+    --
+    -- For a referenced security group in another VPC, this value is not
+    -- returned if the referenced security group is deleted.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The status of a VPC peering connection, if applicable.
+    peeringStatus :: Prelude.Maybe Prelude.Text,
+    -- | The ID of an Amazon Web Services account.
+    --
+    -- For a referenced security group in another VPC, the account ID of the
+    -- referenced security group is returned in the response. If the referenced
+    -- security group is deleted, this value is not returned.
+    --
+    -- [EC2-Classic] Required when adding or removing rules that reference a
+    -- security group in another Amazon Web Services account.
+    userId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC for the referenced security group, if applicable.
+    vpcId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC peering connection, if applicable.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserIdGroupPair' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'userIdGroupPair_description' - A description for the security group rule that references this user ID
+-- group pair.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=;{}!$*
+--
+-- 'groupId', 'userIdGroupPair_groupId' - The ID of the security group.
+--
+-- 'groupName', 'userIdGroupPair_groupName' - The name of the security group. In a request, use this parameter for a
+-- security group in EC2-Classic or a default VPC only. For a security
+-- group in a nondefault VPC, use the security group ID.
+--
+-- For a referenced security group in another VPC, this value is not
+-- returned if the referenced security group is deleted.
+--
+-- 'peeringStatus', 'userIdGroupPair_peeringStatus' - The status of a VPC peering connection, if applicable.
+--
+-- 'userId', 'userIdGroupPair_userId' - The ID of an Amazon Web Services account.
+--
+-- For a referenced security group in another VPC, the account ID of the
+-- referenced security group is returned in the response. If the referenced
+-- security group is deleted, this value is not returned.
+--
+-- [EC2-Classic] Required when adding or removing rules that reference a
+-- security group in another Amazon Web Services account.
+--
+-- 'vpcId', 'userIdGroupPair_vpcId' - The ID of the VPC for the referenced security group, if applicable.
+--
+-- 'vpcPeeringConnectionId', 'userIdGroupPair_vpcPeeringConnectionId' - The ID of the VPC peering connection, if applicable.
+newUserIdGroupPair ::
+  UserIdGroupPair
+newUserIdGroupPair =
+  UserIdGroupPair'
+    { description = Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      peeringStatus = Prelude.Nothing,
+      userId = Prelude.Nothing,
+      vpcId = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | A description for the security group rule that references this user ID
+-- group pair.
+--
+-- Constraints: Up to 255 characters in length. Allowed characters are a-z,
+-- A-Z, 0-9, spaces, and ._-:\/()#,\@[]+=;{}!$*
+userIdGroupPair_description :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_description = Lens.lens (\UserIdGroupPair' {description} -> description) (\s@UserIdGroupPair' {} a -> s {description = a} :: UserIdGroupPair)
+
+-- | The ID of the security group.
+userIdGroupPair_groupId :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_groupId = Lens.lens (\UserIdGroupPair' {groupId} -> groupId) (\s@UserIdGroupPair' {} a -> s {groupId = a} :: UserIdGroupPair)
+
+-- | The name of the security group. In a request, use this parameter for a
+-- security group in EC2-Classic or a default VPC only. For a security
+-- group in a nondefault VPC, use the security group ID.
+--
+-- For a referenced security group in another VPC, this value is not
+-- returned if the referenced security group is deleted.
+userIdGroupPair_groupName :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_groupName = Lens.lens (\UserIdGroupPair' {groupName} -> groupName) (\s@UserIdGroupPair' {} a -> s {groupName = a} :: UserIdGroupPair)
+
+-- | The status of a VPC peering connection, if applicable.
+userIdGroupPair_peeringStatus :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_peeringStatus = Lens.lens (\UserIdGroupPair' {peeringStatus} -> peeringStatus) (\s@UserIdGroupPair' {} a -> s {peeringStatus = a} :: UserIdGroupPair)
+
+-- | The ID of an Amazon Web Services account.
+--
+-- For a referenced security group in another VPC, the account ID of the
+-- referenced security group is returned in the response. If the referenced
+-- security group is deleted, this value is not returned.
+--
+-- [EC2-Classic] Required when adding or removing rules that reference a
+-- security group in another Amazon Web Services account.
+userIdGroupPair_userId :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_userId = Lens.lens (\UserIdGroupPair' {userId} -> userId) (\s@UserIdGroupPair' {} a -> s {userId = a} :: UserIdGroupPair)
+
+-- | The ID of the VPC for the referenced security group, if applicable.
+userIdGroupPair_vpcId :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_vpcId = Lens.lens (\UserIdGroupPair' {vpcId} -> vpcId) (\s@UserIdGroupPair' {} a -> s {vpcId = a} :: UserIdGroupPair)
+
+-- | The ID of the VPC peering connection, if applicable.
+userIdGroupPair_vpcPeeringConnectionId :: Lens.Lens' UserIdGroupPair (Prelude.Maybe Prelude.Text)
+userIdGroupPair_vpcPeeringConnectionId = Lens.lens (\UserIdGroupPair' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@UserIdGroupPair' {} a -> s {vpcPeeringConnectionId = a} :: UserIdGroupPair)
+
+instance Data.FromXML UserIdGroupPair where
+  parseXML x =
+    UserIdGroupPair'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "groupId")
+      Prelude.<*> (x Data..@? "groupName")
+      Prelude.<*> (x Data..@? "peeringStatus")
+      Prelude.<*> (x Data..@? "userId")
+      Prelude.<*> (x Data..@? "vpcId")
+      Prelude.<*> (x Data..@? "vpcPeeringConnectionId")
+
+instance Prelude.Hashable UserIdGroupPair where
+  hashWithSalt _salt UserIdGroupPair' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` groupId
+      `Prelude.hashWithSalt` groupName
+      `Prelude.hashWithSalt` peeringStatus
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` vpcId
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData UserIdGroupPair where
+  rnf UserIdGroupPair' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf peeringStatus
+      `Prelude.seq` Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf vpcId
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
+
+instance Data.ToQuery UserIdGroupPair where
+  toQuery UserIdGroupPair' {..} =
+    Prelude.mconcat
+      [ "Description" Data.=: description,
+        "GroupId" Data.=: groupId,
+        "GroupName" Data.=: groupName,
+        "PeeringStatus" Data.=: peeringStatus,
+        "UserId" Data.=: userId,
+        "VpcId" Data.=: vpcId,
+        "VpcPeeringConnectionId"
+          Data.=: vpcPeeringConnectionId
+      ]
diff --git a/gen/Amazonka/EC2/Types/UserTrustProviderType.hs b/gen/Amazonka/EC2/Types/UserTrustProviderType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/UserTrustProviderType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.UserTrustProviderType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.UserTrustProviderType
+  ( UserTrustProviderType
+      ( ..,
+        UserTrustProviderType_Iam_identity_center,
+        UserTrustProviderType_Oidc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype UserTrustProviderType = UserTrustProviderType'
+  { fromUserTrustProviderType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern UserTrustProviderType_Iam_identity_center :: UserTrustProviderType
+pattern UserTrustProviderType_Iam_identity_center = UserTrustProviderType' "iam-identity-center"
+
+pattern UserTrustProviderType_Oidc :: UserTrustProviderType
+pattern UserTrustProviderType_Oidc = UserTrustProviderType' "oidc"
+
+{-# COMPLETE
+  UserTrustProviderType_Iam_identity_center,
+  UserTrustProviderType_Oidc,
+  UserTrustProviderType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VCpuCountRange.hs b/gen/Amazonka/EC2/Types/VCpuCountRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VCpuCountRange.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VCpuCountRange
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VCpuCountRange where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum number of vCPUs.
+--
+-- /See:/ 'newVCpuCountRange' smart constructor.
+data VCpuCountRange = VCpuCountRange'
+  { -- | The maximum number of vCPUs. If this parameter is not specified, there
+    -- is no maximum limit.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of vCPUs. If the value is @0@, there is no minimum
+    -- limit.
+    min :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VCpuCountRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'vCpuCountRange_max' - The maximum number of vCPUs. If this parameter is not specified, there
+-- is no maximum limit.
+--
+-- 'min', 'vCpuCountRange_min' - The minimum number of vCPUs. If the value is @0@, there is no minimum
+-- limit.
+newVCpuCountRange ::
+  VCpuCountRange
+newVCpuCountRange =
+  VCpuCountRange'
+    { max = Prelude.Nothing,
+      min = Prelude.Nothing
+    }
+
+-- | The maximum number of vCPUs. If this parameter is not specified, there
+-- is no maximum limit.
+vCpuCountRange_max :: Lens.Lens' VCpuCountRange (Prelude.Maybe Prelude.Int)
+vCpuCountRange_max = Lens.lens (\VCpuCountRange' {max} -> max) (\s@VCpuCountRange' {} a -> s {max = a} :: VCpuCountRange)
+
+-- | The minimum number of vCPUs. If the value is @0@, there is no minimum
+-- limit.
+vCpuCountRange_min :: Lens.Lens' VCpuCountRange (Prelude.Maybe Prelude.Int)
+vCpuCountRange_min = Lens.lens (\VCpuCountRange' {min} -> min) (\s@VCpuCountRange' {} a -> s {min = a} :: VCpuCountRange)
+
+instance Data.FromXML VCpuCountRange where
+  parseXML x =
+    VCpuCountRange'
+      Prelude.<$> (x Data..@? "max")
+      Prelude.<*> (x Data..@? "min")
+
+instance Prelude.Hashable VCpuCountRange where
+  hashWithSalt _salt VCpuCountRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData VCpuCountRange where
+  rnf VCpuCountRange' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery VCpuCountRange where
+  toQuery VCpuCountRange' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/VCpuCountRangeRequest.hs b/gen/Amazonka/EC2/Types/VCpuCountRangeRequest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VCpuCountRangeRequest.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VCpuCountRangeRequest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VCpuCountRangeRequest where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The minimum and maximum number of vCPUs.
+--
+-- /See:/ 'newVCpuCountRangeRequest' smart constructor.
+data VCpuCountRangeRequest = VCpuCountRangeRequest'
+  { -- | The maximum number of vCPUs. To specify no maximum limit, omit this
+    -- parameter.
+    max :: Prelude.Maybe Prelude.Int,
+    -- | The minimum number of vCPUs. To specify no minimum limit, specify @0@.
+    min :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VCpuCountRangeRequest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'max', 'vCpuCountRangeRequest_max' - The maximum number of vCPUs. To specify no maximum limit, omit this
+-- parameter.
+--
+-- 'min', 'vCpuCountRangeRequest_min' - The minimum number of vCPUs. To specify no minimum limit, specify @0@.
+newVCpuCountRangeRequest ::
+  -- | 'min'
+  Prelude.Int ->
+  VCpuCountRangeRequest
+newVCpuCountRangeRequest pMin_ =
+  VCpuCountRangeRequest'
+    { max = Prelude.Nothing,
+      min = pMin_
+    }
+
+-- | The maximum number of vCPUs. To specify no maximum limit, omit this
+-- parameter.
+vCpuCountRangeRequest_max :: Lens.Lens' VCpuCountRangeRequest (Prelude.Maybe Prelude.Int)
+vCpuCountRangeRequest_max = Lens.lens (\VCpuCountRangeRequest' {max} -> max) (\s@VCpuCountRangeRequest' {} a -> s {max = a} :: VCpuCountRangeRequest)
+
+-- | The minimum number of vCPUs. To specify no minimum limit, specify @0@.
+vCpuCountRangeRequest_min :: Lens.Lens' VCpuCountRangeRequest Prelude.Int
+vCpuCountRangeRequest_min = Lens.lens (\VCpuCountRangeRequest' {min} -> min) (\s@VCpuCountRangeRequest' {} a -> s {min = a} :: VCpuCountRangeRequest)
+
+instance Prelude.Hashable VCpuCountRangeRequest where
+  hashWithSalt _salt VCpuCountRangeRequest' {..} =
+    _salt
+      `Prelude.hashWithSalt` max
+      `Prelude.hashWithSalt` min
+
+instance Prelude.NFData VCpuCountRangeRequest where
+  rnf VCpuCountRangeRequest' {..} =
+    Prelude.rnf max `Prelude.seq` Prelude.rnf min
+
+instance Data.ToQuery VCpuCountRangeRequest where
+  toQuery VCpuCountRangeRequest' {..} =
+    Prelude.mconcat
+      ["Max" Data.=: max, "Min" Data.=: min]
diff --git a/gen/Amazonka/EC2/Types/VCpuInfo.hs b/gen/Amazonka/EC2/Types/VCpuInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VCpuInfo.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VCpuInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VCpuInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the vCPU configurations for the instance type.
+--
+-- /See:/ 'newVCpuInfo' smart constructor.
+data VCpuInfo = VCpuInfo'
+  { -- | The default number of cores for the instance type.
+    defaultCores :: Prelude.Maybe Prelude.Int,
+    -- | The default number of threads per core for the instance type.
+    defaultThreadsPerCore :: Prelude.Maybe Prelude.Int,
+    -- | The default number of vCPUs for the instance type.
+    defaultVCpus :: Prelude.Maybe Prelude.Int,
+    -- | The valid number of cores that can be configured for the instance type.
+    validCores :: Prelude.Maybe [Prelude.Int],
+    -- | The valid number of threads per core that can be configured for the
+    -- instance type.
+    validThreadsPerCore :: Prelude.Maybe [Prelude.Int]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VCpuInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultCores', 'vCpuInfo_defaultCores' - The default number of cores for the instance type.
+--
+-- 'defaultThreadsPerCore', 'vCpuInfo_defaultThreadsPerCore' - The default number of threads per core for the instance type.
+--
+-- 'defaultVCpus', 'vCpuInfo_defaultVCpus' - The default number of vCPUs for the instance type.
+--
+-- 'validCores', 'vCpuInfo_validCores' - The valid number of cores that can be configured for the instance type.
+--
+-- 'validThreadsPerCore', 'vCpuInfo_validThreadsPerCore' - The valid number of threads per core that can be configured for the
+-- instance type.
+newVCpuInfo ::
+  VCpuInfo
+newVCpuInfo =
+  VCpuInfo'
+    { defaultCores = Prelude.Nothing,
+      defaultThreadsPerCore = Prelude.Nothing,
+      defaultVCpus = Prelude.Nothing,
+      validCores = Prelude.Nothing,
+      validThreadsPerCore = Prelude.Nothing
+    }
+
+-- | The default number of cores for the instance type.
+vCpuInfo_defaultCores :: Lens.Lens' VCpuInfo (Prelude.Maybe Prelude.Int)
+vCpuInfo_defaultCores = Lens.lens (\VCpuInfo' {defaultCores} -> defaultCores) (\s@VCpuInfo' {} a -> s {defaultCores = a} :: VCpuInfo)
+
+-- | The default number of threads per core for the instance type.
+vCpuInfo_defaultThreadsPerCore :: Lens.Lens' VCpuInfo (Prelude.Maybe Prelude.Int)
+vCpuInfo_defaultThreadsPerCore = Lens.lens (\VCpuInfo' {defaultThreadsPerCore} -> defaultThreadsPerCore) (\s@VCpuInfo' {} a -> s {defaultThreadsPerCore = a} :: VCpuInfo)
+
+-- | The default number of vCPUs for the instance type.
+vCpuInfo_defaultVCpus :: Lens.Lens' VCpuInfo (Prelude.Maybe Prelude.Int)
+vCpuInfo_defaultVCpus = Lens.lens (\VCpuInfo' {defaultVCpus} -> defaultVCpus) (\s@VCpuInfo' {} a -> s {defaultVCpus = a} :: VCpuInfo)
+
+-- | The valid number of cores that can be configured for the instance type.
+vCpuInfo_validCores :: Lens.Lens' VCpuInfo (Prelude.Maybe [Prelude.Int])
+vCpuInfo_validCores = Lens.lens (\VCpuInfo' {validCores} -> validCores) (\s@VCpuInfo' {} a -> s {validCores = a} :: VCpuInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The valid number of threads per core that can be configured for the
+-- instance type.
+vCpuInfo_validThreadsPerCore :: Lens.Lens' VCpuInfo (Prelude.Maybe [Prelude.Int])
+vCpuInfo_validThreadsPerCore = Lens.lens (\VCpuInfo' {validThreadsPerCore} -> validThreadsPerCore) (\s@VCpuInfo' {} a -> s {validThreadsPerCore = a} :: VCpuInfo) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML VCpuInfo where
+  parseXML x =
+    VCpuInfo'
+      Prelude.<$> (x Data..@? "defaultCores")
+      Prelude.<*> (x Data..@? "defaultThreadsPerCore")
+      Prelude.<*> (x Data..@? "defaultVCpus")
+      Prelude.<*> ( x
+                      Data..@? "validCores"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "validThreadsPerCore"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable VCpuInfo where
+  hashWithSalt _salt VCpuInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultCores
+      `Prelude.hashWithSalt` defaultThreadsPerCore
+      `Prelude.hashWithSalt` defaultVCpus
+      `Prelude.hashWithSalt` validCores
+      `Prelude.hashWithSalt` validThreadsPerCore
+
+instance Prelude.NFData VCpuInfo where
+  rnf VCpuInfo' {..} =
+    Prelude.rnf defaultCores
+      `Prelude.seq` Prelude.rnf defaultThreadsPerCore
+      `Prelude.seq` Prelude.rnf defaultVCpus
+      `Prelude.seq` Prelude.rnf validCores
+      `Prelude.seq` Prelude.rnf validThreadsPerCore
diff --git a/gen/Amazonka/EC2/Types/ValidationError.hs b/gen/Amazonka/EC2/Types/ValidationError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ValidationError.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ValidationError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ValidationError where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | The error code and error message that is returned for a parameter or
+-- parameter combination that is not valid when a new launch template or
+-- new version of a launch template is created.
+--
+-- /See:/ 'newValidationError' smart constructor.
+data ValidationError = ValidationError'
+  { -- | The error code that indicates why the parameter or parameter combination
+    -- is not valid. For more information about error codes, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | The error message that describes why the parameter or parameter
+    -- combination is not valid. For more information about error messages, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidationError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'validationError_code' - The error code that indicates why the parameter or parameter combination
+-- is not valid. For more information about error codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+--
+-- 'message', 'validationError_message' - The error message that describes why the parameter or parameter
+-- combination is not valid. For more information about error messages, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+newValidationError ::
+  ValidationError
+newValidationError =
+  ValidationError'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The error code that indicates why the parameter or parameter combination
+-- is not valid. For more information about error codes, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+validationError_code :: Lens.Lens' ValidationError (Prelude.Maybe Prelude.Text)
+validationError_code = Lens.lens (\ValidationError' {code} -> code) (\s@ValidationError' {} a -> s {code = a} :: ValidationError)
+
+-- | The error message that describes why the parameter or parameter
+-- combination is not valid. For more information about error messages, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error codes>.
+validationError_message :: Lens.Lens' ValidationError (Prelude.Maybe Prelude.Text)
+validationError_message = Lens.lens (\ValidationError' {message} -> message) (\s@ValidationError' {} a -> s {message = a} :: ValidationError)
+
+instance Data.FromXML ValidationError where
+  parseXML x =
+    ValidationError'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance Prelude.Hashable ValidationError where
+  hashWithSalt _salt ValidationError' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ValidationError where
+  rnf ValidationError' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/ValidationWarning.hs b/gen/Amazonka/EC2/Types/ValidationWarning.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/ValidationWarning.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.ValidationWarning
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.ValidationWarning where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.ValidationError
+import qualified Amazonka.Prelude as Prelude
+
+-- | The error codes and error messages that are returned for the parameters
+-- or parameter combinations that are not valid when a new launch template
+-- or new version of a launch template is created.
+--
+-- /See:/ 'newValidationWarning' smart constructor.
+data ValidationWarning = ValidationWarning'
+  { -- | The error codes and error messages.
+    errors :: Prelude.Maybe [ValidationError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidationWarning' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'validationWarning_errors' - The error codes and error messages.
+newValidationWarning ::
+  ValidationWarning
+newValidationWarning =
+  ValidationWarning' {errors = Prelude.Nothing}
+
+-- | The error codes and error messages.
+validationWarning_errors :: Lens.Lens' ValidationWarning (Prelude.Maybe [ValidationError])
+validationWarning_errors = Lens.lens (\ValidationWarning' {errors} -> errors) (\s@ValidationWarning' {} a -> s {errors = a} :: ValidationWarning) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML ValidationWarning where
+  parseXML x =
+    ValidationWarning'
+      Prelude.<$> ( x
+                      Data..@? "errorSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable ValidationWarning where
+  hashWithSalt _salt ValidationWarning' {..} =
+    _salt `Prelude.hashWithSalt` errors
+
+instance Prelude.NFData ValidationWarning where
+  rnf ValidationWarning' {..} = Prelude.rnf errors
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpoint.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpoint.hs
@@ -0,0 +1,308 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpoint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VerifiedAccessEndpointAttachmentType
+import Amazonka.EC2.Types.VerifiedAccessEndpointEniOptions
+import Amazonka.EC2.Types.VerifiedAccessEndpointLoadBalancerOptions
+import Amazonka.EC2.Types.VerifiedAccessEndpointStatus
+import Amazonka.EC2.Types.VerifiedAccessEndpointType
+import qualified Amazonka.Prelude as Prelude
+
+-- | An Amazon Web Services Verified Access endpoint specifies the
+-- application that Amazon Web Services Verified Access provides access to.
+-- It must be attached to an Amazon Web Services Verified Access group. An
+-- Amazon Web Services Verified Access endpoint must also have an attached
+-- access policy before you attached it to a group.
+--
+-- /See:/ 'newVerifiedAccessEndpoint' smart constructor.
+data VerifiedAccessEndpoint = VerifiedAccessEndpoint'
+  { -- | The DNS name for users to reach your application.
+    applicationDomain :: Prelude.Maybe Prelude.Text,
+    -- | The type of attachment used to provide connectivity between the Amazon
+    -- Web Services Verified Access endpoint and the application.
+    attachmentType :: Prelude.Maybe VerifiedAccessEndpointAttachmentType,
+    -- | The creation time.
+    creationTime :: Prelude.Maybe Prelude.Text,
+    -- | The deletion time.
+    deletionTime :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access endpoint.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Returned if endpoint has a device trust provider attached.
+    deviceValidationDomain :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of a public TLS\/SSL certificate imported into or created with
+    -- ACM.
+    domainCertificateArn :: Prelude.Maybe Prelude.Text,
+    -- | A DNS name that is generated for the endpoint.
+    endpointDomain :: Prelude.Maybe Prelude.Text,
+    -- | The type of Amazon Web Services Verified Access endpoint. Incoming
+    -- application requests will be sent to an IP address, load balancer or a
+    -- network interface depending on the endpoint type specified.
+    endpointType :: Prelude.Maybe VerifiedAccessEndpointType,
+    -- | The last updated time.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The load balancer details if creating the Amazon Web Services Verified
+    -- Access endpoint as @load-balancer@type.
+    loadBalancerOptions :: Prelude.Maybe VerifiedAccessEndpointLoadBalancerOptions,
+    -- | The options for network-interface type endpoint.
+    networkInterfaceOptions :: Prelude.Maybe VerifiedAccessEndpointEniOptions,
+    -- | The IDs of the security groups for the endpoint.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The endpoint status.
+    status :: Prelude.Maybe VerifiedAccessEndpointStatus,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Amazon Web Services Verified Access endpoint.
+    verifiedAccessEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access group.
+    verifiedAccessGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationDomain', 'verifiedAccessEndpoint_applicationDomain' - The DNS name for users to reach your application.
+--
+-- 'attachmentType', 'verifiedAccessEndpoint_attachmentType' - The type of attachment used to provide connectivity between the Amazon
+-- Web Services Verified Access endpoint and the application.
+--
+-- 'creationTime', 'verifiedAccessEndpoint_creationTime' - The creation time.
+--
+-- 'deletionTime', 'verifiedAccessEndpoint_deletionTime' - The deletion time.
+--
+-- 'description', 'verifiedAccessEndpoint_description' - A description for the Amazon Web Services Verified Access endpoint.
+--
+-- 'deviceValidationDomain', 'verifiedAccessEndpoint_deviceValidationDomain' - Returned if endpoint has a device trust provider attached.
+--
+-- 'domainCertificateArn', 'verifiedAccessEndpoint_domainCertificateArn' - The ARN of a public TLS\/SSL certificate imported into or created with
+-- ACM.
+--
+-- 'endpointDomain', 'verifiedAccessEndpoint_endpointDomain' - A DNS name that is generated for the endpoint.
+--
+-- 'endpointType', 'verifiedAccessEndpoint_endpointType' - The type of Amazon Web Services Verified Access endpoint. Incoming
+-- application requests will be sent to an IP address, load balancer or a
+-- network interface depending on the endpoint type specified.
+--
+-- 'lastUpdatedTime', 'verifiedAccessEndpoint_lastUpdatedTime' - The last updated time.
+--
+-- 'loadBalancerOptions', 'verifiedAccessEndpoint_loadBalancerOptions' - The load balancer details if creating the Amazon Web Services Verified
+-- Access endpoint as @load-balancer@type.
+--
+-- 'networkInterfaceOptions', 'verifiedAccessEndpoint_networkInterfaceOptions' - The options for network-interface type endpoint.
+--
+-- 'securityGroupIds', 'verifiedAccessEndpoint_securityGroupIds' - The IDs of the security groups for the endpoint.
+--
+-- 'status', 'verifiedAccessEndpoint_status' - The endpoint status.
+--
+-- 'tags', 'verifiedAccessEndpoint_tags' - The tags.
+--
+-- 'verifiedAccessEndpointId', 'verifiedAccessEndpoint_verifiedAccessEndpointId' - The ID of the Amazon Web Services Verified Access endpoint.
+--
+-- 'verifiedAccessGroupId', 'verifiedAccessEndpoint_verifiedAccessGroupId' - The ID of the Amazon Web Services Verified Access group.
+--
+-- 'verifiedAccessInstanceId', 'verifiedAccessEndpoint_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newVerifiedAccessEndpoint ::
+  VerifiedAccessEndpoint
+newVerifiedAccessEndpoint =
+  VerifiedAccessEndpoint'
+    { applicationDomain =
+        Prelude.Nothing,
+      attachmentType = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      deletionTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      deviceValidationDomain = Prelude.Nothing,
+      domainCertificateArn = Prelude.Nothing,
+      endpointDomain = Prelude.Nothing,
+      endpointType = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      loadBalancerOptions = Prelude.Nothing,
+      networkInterfaceOptions = Prelude.Nothing,
+      securityGroupIds = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      verifiedAccessEndpointId = Prelude.Nothing,
+      verifiedAccessGroupId = Prelude.Nothing,
+      verifiedAccessInstanceId = Prelude.Nothing
+    }
+
+-- | The DNS name for users to reach your application.
+verifiedAccessEndpoint_applicationDomain :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_applicationDomain = Lens.lens (\VerifiedAccessEndpoint' {applicationDomain} -> applicationDomain) (\s@VerifiedAccessEndpoint' {} a -> s {applicationDomain = a} :: VerifiedAccessEndpoint)
+
+-- | The type of attachment used to provide connectivity between the Amazon
+-- Web Services Verified Access endpoint and the application.
+verifiedAccessEndpoint_attachmentType :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe VerifiedAccessEndpointAttachmentType)
+verifiedAccessEndpoint_attachmentType = Lens.lens (\VerifiedAccessEndpoint' {attachmentType} -> attachmentType) (\s@VerifiedAccessEndpoint' {} a -> s {attachmentType = a} :: VerifiedAccessEndpoint)
+
+-- | The creation time.
+verifiedAccessEndpoint_creationTime :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_creationTime = Lens.lens (\VerifiedAccessEndpoint' {creationTime} -> creationTime) (\s@VerifiedAccessEndpoint' {} a -> s {creationTime = a} :: VerifiedAccessEndpoint)
+
+-- | The deletion time.
+verifiedAccessEndpoint_deletionTime :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_deletionTime = Lens.lens (\VerifiedAccessEndpoint' {deletionTime} -> deletionTime) (\s@VerifiedAccessEndpoint' {} a -> s {deletionTime = a} :: VerifiedAccessEndpoint)
+
+-- | A description for the Amazon Web Services Verified Access endpoint.
+verifiedAccessEndpoint_description :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_description = Lens.lens (\VerifiedAccessEndpoint' {description} -> description) (\s@VerifiedAccessEndpoint' {} a -> s {description = a} :: VerifiedAccessEndpoint)
+
+-- | Returned if endpoint has a device trust provider attached.
+verifiedAccessEndpoint_deviceValidationDomain :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_deviceValidationDomain = Lens.lens (\VerifiedAccessEndpoint' {deviceValidationDomain} -> deviceValidationDomain) (\s@VerifiedAccessEndpoint' {} a -> s {deviceValidationDomain = a} :: VerifiedAccessEndpoint)
+
+-- | The ARN of a public TLS\/SSL certificate imported into or created with
+-- ACM.
+verifiedAccessEndpoint_domainCertificateArn :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_domainCertificateArn = Lens.lens (\VerifiedAccessEndpoint' {domainCertificateArn} -> domainCertificateArn) (\s@VerifiedAccessEndpoint' {} a -> s {domainCertificateArn = a} :: VerifiedAccessEndpoint)
+
+-- | A DNS name that is generated for the endpoint.
+verifiedAccessEndpoint_endpointDomain :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_endpointDomain = Lens.lens (\VerifiedAccessEndpoint' {endpointDomain} -> endpointDomain) (\s@VerifiedAccessEndpoint' {} a -> s {endpointDomain = a} :: VerifiedAccessEndpoint)
+
+-- | The type of Amazon Web Services Verified Access endpoint. Incoming
+-- application requests will be sent to an IP address, load balancer or a
+-- network interface depending on the endpoint type specified.
+verifiedAccessEndpoint_endpointType :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe VerifiedAccessEndpointType)
+verifiedAccessEndpoint_endpointType = Lens.lens (\VerifiedAccessEndpoint' {endpointType} -> endpointType) (\s@VerifiedAccessEndpoint' {} a -> s {endpointType = a} :: VerifiedAccessEndpoint)
+
+-- | The last updated time.
+verifiedAccessEndpoint_lastUpdatedTime :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_lastUpdatedTime = Lens.lens (\VerifiedAccessEndpoint' {lastUpdatedTime} -> lastUpdatedTime) (\s@VerifiedAccessEndpoint' {} a -> s {lastUpdatedTime = a} :: VerifiedAccessEndpoint)
+
+-- | The load balancer details if creating the Amazon Web Services Verified
+-- Access endpoint as @load-balancer@type.
+verifiedAccessEndpoint_loadBalancerOptions :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe VerifiedAccessEndpointLoadBalancerOptions)
+verifiedAccessEndpoint_loadBalancerOptions = Lens.lens (\VerifiedAccessEndpoint' {loadBalancerOptions} -> loadBalancerOptions) (\s@VerifiedAccessEndpoint' {} a -> s {loadBalancerOptions = a} :: VerifiedAccessEndpoint)
+
+-- | The options for network-interface type endpoint.
+verifiedAccessEndpoint_networkInterfaceOptions :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe VerifiedAccessEndpointEniOptions)
+verifiedAccessEndpoint_networkInterfaceOptions = Lens.lens (\VerifiedAccessEndpoint' {networkInterfaceOptions} -> networkInterfaceOptions) (\s@VerifiedAccessEndpoint' {} a -> s {networkInterfaceOptions = a} :: VerifiedAccessEndpoint)
+
+-- | The IDs of the security groups for the endpoint.
+verifiedAccessEndpoint_securityGroupIds :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe [Prelude.Text])
+verifiedAccessEndpoint_securityGroupIds = Lens.lens (\VerifiedAccessEndpoint' {securityGroupIds} -> securityGroupIds) (\s@VerifiedAccessEndpoint' {} a -> s {securityGroupIds = a} :: VerifiedAccessEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The endpoint status.
+verifiedAccessEndpoint_status :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe VerifiedAccessEndpointStatus)
+verifiedAccessEndpoint_status = Lens.lens (\VerifiedAccessEndpoint' {status} -> status) (\s@VerifiedAccessEndpoint' {} a -> s {status = a} :: VerifiedAccessEndpoint)
+
+-- | The tags.
+verifiedAccessEndpoint_tags :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe [Tag])
+verifiedAccessEndpoint_tags = Lens.lens (\VerifiedAccessEndpoint' {tags} -> tags) (\s@VerifiedAccessEndpoint' {} a -> s {tags = a} :: VerifiedAccessEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services Verified Access endpoint.
+verifiedAccessEndpoint_verifiedAccessEndpointId :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_verifiedAccessEndpointId = Lens.lens (\VerifiedAccessEndpoint' {verifiedAccessEndpointId} -> verifiedAccessEndpointId) (\s@VerifiedAccessEndpoint' {} a -> s {verifiedAccessEndpointId = a} :: VerifiedAccessEndpoint)
+
+-- | The ID of the Amazon Web Services Verified Access group.
+verifiedAccessEndpoint_verifiedAccessGroupId :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_verifiedAccessGroupId = Lens.lens (\VerifiedAccessEndpoint' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@VerifiedAccessEndpoint' {} a -> s {verifiedAccessGroupId = a} :: VerifiedAccessEndpoint)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+verifiedAccessEndpoint_verifiedAccessInstanceId :: Lens.Lens' VerifiedAccessEndpoint (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpoint_verifiedAccessInstanceId = Lens.lens (\VerifiedAccessEndpoint' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@VerifiedAccessEndpoint' {} a -> s {verifiedAccessInstanceId = a} :: VerifiedAccessEndpoint)
+
+instance Data.FromXML VerifiedAccessEndpoint where
+  parseXML x =
+    VerifiedAccessEndpoint'
+      Prelude.<$> (x Data..@? "applicationDomain")
+      Prelude.<*> (x Data..@? "attachmentType")
+      Prelude.<*> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "deletionTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "deviceValidationDomain")
+      Prelude.<*> (x Data..@? "domainCertificateArn")
+      Prelude.<*> (x Data..@? "endpointDomain")
+      Prelude.<*> (x Data..@? "endpointType")
+      Prelude.<*> (x Data..@? "lastUpdatedTime")
+      Prelude.<*> (x Data..@? "loadBalancerOptions")
+      Prelude.<*> (x Data..@? "networkInterfaceOptions")
+      Prelude.<*> ( x
+                      Data..@? "securityGroupIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "verifiedAccessEndpointId")
+      Prelude.<*> (x Data..@? "verifiedAccessGroupId")
+      Prelude.<*> (x Data..@? "verifiedAccessInstanceId")
+
+instance Prelude.Hashable VerifiedAccessEndpoint where
+  hashWithSalt _salt VerifiedAccessEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationDomain
+      `Prelude.hashWithSalt` attachmentType
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` deletionTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` deviceValidationDomain
+      `Prelude.hashWithSalt` domainCertificateArn
+      `Prelude.hashWithSalt` endpointDomain
+      `Prelude.hashWithSalt` endpointType
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` loadBalancerOptions
+      `Prelude.hashWithSalt` networkInterfaceOptions
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` verifiedAccessEndpointId
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance Prelude.NFData VerifiedAccessEndpoint where
+  rnf VerifiedAccessEndpoint' {..} =
+    Prelude.rnf applicationDomain
+      `Prelude.seq` Prelude.rnf attachmentType
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf deletionTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceValidationDomain
+      `Prelude.seq` Prelude.rnf domainCertificateArn
+      `Prelude.seq` Prelude.rnf endpointDomain
+      `Prelude.seq` Prelude.rnf endpointType
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf loadBalancerOptions
+      `Prelude.seq` Prelude.rnf networkInterfaceOptions
+      `Prelude.seq` Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf verifiedAccessEndpointId
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+      `Prelude.seq` Prelude.rnf
+        verifiedAccessInstanceId
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointAttachmentType.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointAttachmentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointAttachmentType.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointAttachmentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointAttachmentType
+  ( VerifiedAccessEndpointAttachmentType
+      ( ..,
+        VerifiedAccessEndpointAttachmentType_Vpc
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerifiedAccessEndpointAttachmentType = VerifiedAccessEndpointAttachmentType'
+  { fromVerifiedAccessEndpointAttachmentType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VerifiedAccessEndpointAttachmentType_Vpc :: VerifiedAccessEndpointAttachmentType
+pattern VerifiedAccessEndpointAttachmentType_Vpc = VerifiedAccessEndpointAttachmentType' "vpc"
+
+{-# COMPLETE
+  VerifiedAccessEndpointAttachmentType_Vpc,
+  VerifiedAccessEndpointAttachmentType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointEniOptions.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointEniOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointEniOptions.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointEniOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointEniOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for a network-interface type endpoint.
+--
+-- /See:/ 'newVerifiedAccessEndpointEniOptions' smart constructor.
+data VerifiedAccessEndpointEniOptions = VerifiedAccessEndpointEniOptions'
+  { -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The IP port number.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The IP protocol.
+    protocol :: Prelude.Maybe VerifiedAccessEndpointProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessEndpointEniOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInterfaceId', 'verifiedAccessEndpointEniOptions_networkInterfaceId' - The ID of the network interface.
+--
+-- 'port', 'verifiedAccessEndpointEniOptions_port' - The IP port number.
+--
+-- 'protocol', 'verifiedAccessEndpointEniOptions_protocol' - The IP protocol.
+newVerifiedAccessEndpointEniOptions ::
+  VerifiedAccessEndpointEniOptions
+newVerifiedAccessEndpointEniOptions =
+  VerifiedAccessEndpointEniOptions'
+    { networkInterfaceId =
+        Prelude.Nothing,
+      port = Prelude.Nothing,
+      protocol = Prelude.Nothing
+    }
+
+-- | The ID of the network interface.
+verifiedAccessEndpointEniOptions_networkInterfaceId :: Lens.Lens' VerifiedAccessEndpointEniOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpointEniOptions_networkInterfaceId = Lens.lens (\VerifiedAccessEndpointEniOptions' {networkInterfaceId} -> networkInterfaceId) (\s@VerifiedAccessEndpointEniOptions' {} a -> s {networkInterfaceId = a} :: VerifiedAccessEndpointEniOptions)
+
+-- | The IP port number.
+verifiedAccessEndpointEniOptions_port :: Lens.Lens' VerifiedAccessEndpointEniOptions (Prelude.Maybe Prelude.Natural)
+verifiedAccessEndpointEniOptions_port = Lens.lens (\VerifiedAccessEndpointEniOptions' {port} -> port) (\s@VerifiedAccessEndpointEniOptions' {} a -> s {port = a} :: VerifiedAccessEndpointEniOptions)
+
+-- | The IP protocol.
+verifiedAccessEndpointEniOptions_protocol :: Lens.Lens' VerifiedAccessEndpointEniOptions (Prelude.Maybe VerifiedAccessEndpointProtocol)
+verifiedAccessEndpointEniOptions_protocol = Lens.lens (\VerifiedAccessEndpointEniOptions' {protocol} -> protocol) (\s@VerifiedAccessEndpointEniOptions' {} a -> s {protocol = a} :: VerifiedAccessEndpointEniOptions)
+
+instance
+  Data.FromXML
+    VerifiedAccessEndpointEniOptions
+  where
+  parseXML x =
+    VerifiedAccessEndpointEniOptions'
+      Prelude.<$> (x Data..@? "networkInterfaceId")
+      Prelude.<*> (x Data..@? "port")
+      Prelude.<*> (x Data..@? "protocol")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessEndpointEniOptions
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessEndpointEniOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` networkInterfaceId
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` protocol
+
+instance
+  Prelude.NFData
+    VerifiedAccessEndpointEniOptions
+  where
+  rnf VerifiedAccessEndpointEniOptions' {..} =
+    Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf protocol
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointLoadBalancerOptions.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointLoadBalancerOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointLoadBalancerOptions.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointLoadBalancerOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointLoadBalancerOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a load balancer when creating an Amazon Web Services Verified
+-- Access endpoint using the @load-balancer@ type.
+--
+-- /See:/ 'newVerifiedAccessEndpointLoadBalancerOptions' smart constructor.
+data VerifiedAccessEndpointLoadBalancerOptions = VerifiedAccessEndpointLoadBalancerOptions'
+  { -- | The ARN of the load balancer.
+    loadBalancerArn :: Prelude.Maybe Prelude.Text,
+    -- | The IP port number.
+    port :: Prelude.Maybe Prelude.Natural,
+    -- | The IP protocol.
+    protocol :: Prelude.Maybe VerifiedAccessEndpointProtocol,
+    -- | The IDs of the subnets.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessEndpointLoadBalancerOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'loadBalancerArn', 'verifiedAccessEndpointLoadBalancerOptions_loadBalancerArn' - The ARN of the load balancer.
+--
+-- 'port', 'verifiedAccessEndpointLoadBalancerOptions_port' - The IP port number.
+--
+-- 'protocol', 'verifiedAccessEndpointLoadBalancerOptions_protocol' - The IP protocol.
+--
+-- 'subnetIds', 'verifiedAccessEndpointLoadBalancerOptions_subnetIds' - The IDs of the subnets.
+newVerifiedAccessEndpointLoadBalancerOptions ::
+  VerifiedAccessEndpointLoadBalancerOptions
+newVerifiedAccessEndpointLoadBalancerOptions =
+  VerifiedAccessEndpointLoadBalancerOptions'
+    { loadBalancerArn =
+        Prelude.Nothing,
+      port = Prelude.Nothing,
+      protocol = Prelude.Nothing,
+      subnetIds = Prelude.Nothing
+    }
+
+-- | The ARN of the load balancer.
+verifiedAccessEndpointLoadBalancerOptions_loadBalancerArn :: Lens.Lens' VerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpointLoadBalancerOptions_loadBalancerArn = Lens.lens (\VerifiedAccessEndpointLoadBalancerOptions' {loadBalancerArn} -> loadBalancerArn) (\s@VerifiedAccessEndpointLoadBalancerOptions' {} a -> s {loadBalancerArn = a} :: VerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IP port number.
+verifiedAccessEndpointLoadBalancerOptions_port :: Lens.Lens' VerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe Prelude.Natural)
+verifiedAccessEndpointLoadBalancerOptions_port = Lens.lens (\VerifiedAccessEndpointLoadBalancerOptions' {port} -> port) (\s@VerifiedAccessEndpointLoadBalancerOptions' {} a -> s {port = a} :: VerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IP protocol.
+verifiedAccessEndpointLoadBalancerOptions_protocol :: Lens.Lens' VerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe VerifiedAccessEndpointProtocol)
+verifiedAccessEndpointLoadBalancerOptions_protocol = Lens.lens (\VerifiedAccessEndpointLoadBalancerOptions' {protocol} -> protocol) (\s@VerifiedAccessEndpointLoadBalancerOptions' {} a -> s {protocol = a} :: VerifiedAccessEndpointLoadBalancerOptions)
+
+-- | The IDs of the subnets.
+verifiedAccessEndpointLoadBalancerOptions_subnetIds :: Lens.Lens' VerifiedAccessEndpointLoadBalancerOptions (Prelude.Maybe [Prelude.Text])
+verifiedAccessEndpointLoadBalancerOptions_subnetIds = Lens.lens (\VerifiedAccessEndpointLoadBalancerOptions' {subnetIds} -> subnetIds) (\s@VerifiedAccessEndpointLoadBalancerOptions' {} a -> s {subnetIds = a} :: VerifiedAccessEndpointLoadBalancerOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromXML
+    VerifiedAccessEndpointLoadBalancerOptions
+  where
+  parseXML x =
+    VerifiedAccessEndpointLoadBalancerOptions'
+      Prelude.<$> (x Data..@? "loadBalancerArn")
+      Prelude.<*> (x Data..@? "port")
+      Prelude.<*> (x Data..@? "protocol")
+      Prelude.<*> ( x
+                      Data..@? "subnetIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance
+  Prelude.Hashable
+    VerifiedAccessEndpointLoadBalancerOptions
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessEndpointLoadBalancerOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` loadBalancerArn
+        `Prelude.hashWithSalt` port
+        `Prelude.hashWithSalt` protocol
+        `Prelude.hashWithSalt` subnetIds
+
+instance
+  Prelude.NFData
+    VerifiedAccessEndpointLoadBalancerOptions
+  where
+  rnf VerifiedAccessEndpointLoadBalancerOptions' {..} =
+    Prelude.rnf loadBalancerArn
+      `Prelude.seq` Prelude.rnf port
+      `Prelude.seq` Prelude.rnf protocol
+      `Prelude.seq` Prelude.rnf subnetIds
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointProtocol.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointProtocol.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointProtocol
+  ( VerifiedAccessEndpointProtocol
+      ( ..,
+        VerifiedAccessEndpointProtocol_Http,
+        VerifiedAccessEndpointProtocol_Https
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerifiedAccessEndpointProtocol = VerifiedAccessEndpointProtocol'
+  { fromVerifiedAccessEndpointProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VerifiedAccessEndpointProtocol_Http :: VerifiedAccessEndpointProtocol
+pattern VerifiedAccessEndpointProtocol_Http = VerifiedAccessEndpointProtocol' "http"
+
+pattern VerifiedAccessEndpointProtocol_Https :: VerifiedAccessEndpointProtocol
+pattern VerifiedAccessEndpointProtocol_Https = VerifiedAccessEndpointProtocol' "https"
+
+{-# COMPLETE
+  VerifiedAccessEndpointProtocol_Http,
+  VerifiedAccessEndpointProtocol_Https,
+  VerifiedAccessEndpointProtocol'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointStatus.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointStatus.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessEndpointStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of a Verified Access endpoint.
+--
+-- /See:/ 'newVerifiedAccessEndpointStatus' smart constructor.
+data VerifiedAccessEndpointStatus = VerifiedAccessEndpointStatus'
+  { -- | The status code of the Verified Access endpoint.
+    code :: Prelude.Maybe VerifiedAccessEndpointStatusCode,
+    -- | The status message of the Verified Access endpoint.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessEndpointStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'verifiedAccessEndpointStatus_code' - The status code of the Verified Access endpoint.
+--
+-- 'message', 'verifiedAccessEndpointStatus_message' - The status message of the Verified Access endpoint.
+newVerifiedAccessEndpointStatus ::
+  VerifiedAccessEndpointStatus
+newVerifiedAccessEndpointStatus =
+  VerifiedAccessEndpointStatus'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The status code of the Verified Access endpoint.
+verifiedAccessEndpointStatus_code :: Lens.Lens' VerifiedAccessEndpointStatus (Prelude.Maybe VerifiedAccessEndpointStatusCode)
+verifiedAccessEndpointStatus_code = Lens.lens (\VerifiedAccessEndpointStatus' {code} -> code) (\s@VerifiedAccessEndpointStatus' {} a -> s {code = a} :: VerifiedAccessEndpointStatus)
+
+-- | The status message of the Verified Access endpoint.
+verifiedAccessEndpointStatus_message :: Lens.Lens' VerifiedAccessEndpointStatus (Prelude.Maybe Prelude.Text)
+verifiedAccessEndpointStatus_message = Lens.lens (\VerifiedAccessEndpointStatus' {message} -> message) (\s@VerifiedAccessEndpointStatus' {} a -> s {message = a} :: VerifiedAccessEndpointStatus)
+
+instance Data.FromXML VerifiedAccessEndpointStatus where
+  parseXML x =
+    VerifiedAccessEndpointStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessEndpointStatus
+  where
+  hashWithSalt _salt VerifiedAccessEndpointStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData VerifiedAccessEndpointStatus where
+  rnf VerifiedAccessEndpointStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointStatusCode.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointStatusCode.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointStatusCode
+  ( VerifiedAccessEndpointStatusCode
+      ( ..,
+        VerifiedAccessEndpointStatusCode_Active,
+        VerifiedAccessEndpointStatusCode_Deleted,
+        VerifiedAccessEndpointStatusCode_Deleting,
+        VerifiedAccessEndpointStatusCode_Pending,
+        VerifiedAccessEndpointStatusCode_Updating
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerifiedAccessEndpointStatusCode = VerifiedAccessEndpointStatusCode'
+  { fromVerifiedAccessEndpointStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VerifiedAccessEndpointStatusCode_Active :: VerifiedAccessEndpointStatusCode
+pattern VerifiedAccessEndpointStatusCode_Active = VerifiedAccessEndpointStatusCode' "active"
+
+pattern VerifiedAccessEndpointStatusCode_Deleted :: VerifiedAccessEndpointStatusCode
+pattern VerifiedAccessEndpointStatusCode_Deleted = VerifiedAccessEndpointStatusCode' "deleted"
+
+pattern VerifiedAccessEndpointStatusCode_Deleting :: VerifiedAccessEndpointStatusCode
+pattern VerifiedAccessEndpointStatusCode_Deleting = VerifiedAccessEndpointStatusCode' "deleting"
+
+pattern VerifiedAccessEndpointStatusCode_Pending :: VerifiedAccessEndpointStatusCode
+pattern VerifiedAccessEndpointStatusCode_Pending = VerifiedAccessEndpointStatusCode' "pending"
+
+pattern VerifiedAccessEndpointStatusCode_Updating :: VerifiedAccessEndpointStatusCode
+pattern VerifiedAccessEndpointStatusCode_Updating = VerifiedAccessEndpointStatusCode' "updating"
+
+{-# COMPLETE
+  VerifiedAccessEndpointStatusCode_Active,
+  VerifiedAccessEndpointStatusCode_Deleted,
+  VerifiedAccessEndpointStatusCode_Deleting,
+  VerifiedAccessEndpointStatusCode_Pending,
+  VerifiedAccessEndpointStatusCode_Updating,
+  VerifiedAccessEndpointStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessEndpointType.hs b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessEndpointType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessEndpointType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessEndpointType
+  ( VerifiedAccessEndpointType
+      ( ..,
+        VerifiedAccessEndpointType_Load_balancer,
+        VerifiedAccessEndpointType_Network_interface
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerifiedAccessEndpointType = VerifiedAccessEndpointType'
+  { fromVerifiedAccessEndpointType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VerifiedAccessEndpointType_Load_balancer :: VerifiedAccessEndpointType
+pattern VerifiedAccessEndpointType_Load_balancer = VerifiedAccessEndpointType' "load-balancer"
+
+pattern VerifiedAccessEndpointType_Network_interface :: VerifiedAccessEndpointType
+pattern VerifiedAccessEndpointType_Network_interface = VerifiedAccessEndpointType' "network-interface"
+
+{-# COMPLETE
+  VerifiedAccessEndpointType_Load_balancer,
+  VerifiedAccessEndpointType_Network_interface,
+  VerifiedAccessEndpointType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessGroup.hs b/gen/Amazonka/EC2/Types/VerifiedAccessGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessGroup.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessGroup
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessGroup where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Verified Access group.
+--
+-- /See:/ 'newVerifiedAccessGroup' smart constructor.
+data VerifiedAccessGroup = VerifiedAccessGroup'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Prelude.Text,
+    -- | The deletion time.
+    deletionTime :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access group.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The last updated time.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account number that owns the group.
+    owner :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ARN of the Verified Access group.
+    verifiedAccessGroupArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Verified Access group.
+    verifiedAccessGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'verifiedAccessGroup_creationTime' - The creation time.
+--
+-- 'deletionTime', 'verifiedAccessGroup_deletionTime' - The deletion time.
+--
+-- 'description', 'verifiedAccessGroup_description' - A description for the Amazon Web Services Verified Access group.
+--
+-- 'lastUpdatedTime', 'verifiedAccessGroup_lastUpdatedTime' - The last updated time.
+--
+-- 'owner', 'verifiedAccessGroup_owner' - The Amazon Web Services account number that owns the group.
+--
+-- 'tags', 'verifiedAccessGroup_tags' - The tags.
+--
+-- 'verifiedAccessGroupArn', 'verifiedAccessGroup_verifiedAccessGroupArn' - The ARN of the Verified Access group.
+--
+-- 'verifiedAccessGroupId', 'verifiedAccessGroup_verifiedAccessGroupId' - The ID of the Verified Access group.
+--
+-- 'verifiedAccessInstanceId', 'verifiedAccessGroup_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newVerifiedAccessGroup ::
+  VerifiedAccessGroup
+newVerifiedAccessGroup =
+  VerifiedAccessGroup'
+    { creationTime =
+        Prelude.Nothing,
+      deletionTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      owner = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      verifiedAccessGroupArn = Prelude.Nothing,
+      verifiedAccessGroupId = Prelude.Nothing,
+      verifiedAccessInstanceId = Prelude.Nothing
+    }
+
+-- | The creation time.
+verifiedAccessGroup_creationTime :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_creationTime = Lens.lens (\VerifiedAccessGroup' {creationTime} -> creationTime) (\s@VerifiedAccessGroup' {} a -> s {creationTime = a} :: VerifiedAccessGroup)
+
+-- | The deletion time.
+verifiedAccessGroup_deletionTime :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_deletionTime = Lens.lens (\VerifiedAccessGroup' {deletionTime} -> deletionTime) (\s@VerifiedAccessGroup' {} a -> s {deletionTime = a} :: VerifiedAccessGroup)
+
+-- | A description for the Amazon Web Services Verified Access group.
+verifiedAccessGroup_description :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_description = Lens.lens (\VerifiedAccessGroup' {description} -> description) (\s@VerifiedAccessGroup' {} a -> s {description = a} :: VerifiedAccessGroup)
+
+-- | The last updated time.
+verifiedAccessGroup_lastUpdatedTime :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_lastUpdatedTime = Lens.lens (\VerifiedAccessGroup' {lastUpdatedTime} -> lastUpdatedTime) (\s@VerifiedAccessGroup' {} a -> s {lastUpdatedTime = a} :: VerifiedAccessGroup)
+
+-- | The Amazon Web Services account number that owns the group.
+verifiedAccessGroup_owner :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_owner = Lens.lens (\VerifiedAccessGroup' {owner} -> owner) (\s@VerifiedAccessGroup' {} a -> s {owner = a} :: VerifiedAccessGroup)
+
+-- | The tags.
+verifiedAccessGroup_tags :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe [Tag])
+verifiedAccessGroup_tags = Lens.lens (\VerifiedAccessGroup' {tags} -> tags) (\s@VerifiedAccessGroup' {} a -> s {tags = a} :: VerifiedAccessGroup) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the Verified Access group.
+verifiedAccessGroup_verifiedAccessGroupArn :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_verifiedAccessGroupArn = Lens.lens (\VerifiedAccessGroup' {verifiedAccessGroupArn} -> verifiedAccessGroupArn) (\s@VerifiedAccessGroup' {} a -> s {verifiedAccessGroupArn = a} :: VerifiedAccessGroup)
+
+-- | The ID of the Verified Access group.
+verifiedAccessGroup_verifiedAccessGroupId :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_verifiedAccessGroupId = Lens.lens (\VerifiedAccessGroup' {verifiedAccessGroupId} -> verifiedAccessGroupId) (\s@VerifiedAccessGroup' {} a -> s {verifiedAccessGroupId = a} :: VerifiedAccessGroup)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+verifiedAccessGroup_verifiedAccessInstanceId :: Lens.Lens' VerifiedAccessGroup (Prelude.Maybe Prelude.Text)
+verifiedAccessGroup_verifiedAccessInstanceId = Lens.lens (\VerifiedAccessGroup' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@VerifiedAccessGroup' {} a -> s {verifiedAccessInstanceId = a} :: VerifiedAccessGroup)
+
+instance Data.FromXML VerifiedAccessGroup where
+  parseXML x =
+    VerifiedAccessGroup'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "deletionTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "lastUpdatedTime")
+      Prelude.<*> (x Data..@? "owner")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "verifiedAccessGroupArn")
+      Prelude.<*> (x Data..@? "verifiedAccessGroupId")
+      Prelude.<*> (x Data..@? "verifiedAccessInstanceId")
+
+instance Prelude.Hashable VerifiedAccessGroup where
+  hashWithSalt _salt VerifiedAccessGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` deletionTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` owner
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` verifiedAccessGroupArn
+      `Prelude.hashWithSalt` verifiedAccessGroupId
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance Prelude.NFData VerifiedAccessGroup where
+  rnf VerifiedAccessGroup' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf deletionTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf owner
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupArn
+      `Prelude.seq` Prelude.rnf verifiedAccessGroupId
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessInstance.hs b/gen/Amazonka/EC2/Types/VerifiedAccessInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessInstance.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessInstance
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessInstance where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VerifiedAccessTrustProviderCondensed
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Verified Access instance.
+--
+-- /See:/ 'newVerifiedAccessInstance' smart constructor.
+data VerifiedAccessInstance = VerifiedAccessInstance'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access instance.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The last updated time.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text,
+    -- | The IDs of the Amazon Web Services Verified Access trust providers.
+    verifiedAccessTrustProviders :: Prelude.Maybe [VerifiedAccessTrustProviderCondensed]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessInstance' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'verifiedAccessInstance_creationTime' - The creation time.
+--
+-- 'description', 'verifiedAccessInstance_description' - A description for the Amazon Web Services Verified Access instance.
+--
+-- 'lastUpdatedTime', 'verifiedAccessInstance_lastUpdatedTime' - The last updated time.
+--
+-- 'tags', 'verifiedAccessInstance_tags' - The tags.
+--
+-- 'verifiedAccessInstanceId', 'verifiedAccessInstance_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+--
+-- 'verifiedAccessTrustProviders', 'verifiedAccessInstance_verifiedAccessTrustProviders' - The IDs of the Amazon Web Services Verified Access trust providers.
+newVerifiedAccessInstance ::
+  VerifiedAccessInstance
+newVerifiedAccessInstance =
+  VerifiedAccessInstance'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      verifiedAccessInstanceId = Prelude.Nothing,
+      verifiedAccessTrustProviders = Prelude.Nothing
+    }
+
+-- | The creation time.
+verifiedAccessInstance_creationTime :: Lens.Lens' VerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+verifiedAccessInstance_creationTime = Lens.lens (\VerifiedAccessInstance' {creationTime} -> creationTime) (\s@VerifiedAccessInstance' {} a -> s {creationTime = a} :: VerifiedAccessInstance)
+
+-- | A description for the Amazon Web Services Verified Access instance.
+verifiedAccessInstance_description :: Lens.Lens' VerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+verifiedAccessInstance_description = Lens.lens (\VerifiedAccessInstance' {description} -> description) (\s@VerifiedAccessInstance' {} a -> s {description = a} :: VerifiedAccessInstance)
+
+-- | The last updated time.
+verifiedAccessInstance_lastUpdatedTime :: Lens.Lens' VerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+verifiedAccessInstance_lastUpdatedTime = Lens.lens (\VerifiedAccessInstance' {lastUpdatedTime} -> lastUpdatedTime) (\s@VerifiedAccessInstance' {} a -> s {lastUpdatedTime = a} :: VerifiedAccessInstance)
+
+-- | The tags.
+verifiedAccessInstance_tags :: Lens.Lens' VerifiedAccessInstance (Prelude.Maybe [Tag])
+verifiedAccessInstance_tags = Lens.lens (\VerifiedAccessInstance' {tags} -> tags) (\s@VerifiedAccessInstance' {} a -> s {tags = a} :: VerifiedAccessInstance) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+verifiedAccessInstance_verifiedAccessInstanceId :: Lens.Lens' VerifiedAccessInstance (Prelude.Maybe Prelude.Text)
+verifiedAccessInstance_verifiedAccessInstanceId = Lens.lens (\VerifiedAccessInstance' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@VerifiedAccessInstance' {} a -> s {verifiedAccessInstanceId = a} :: VerifiedAccessInstance)
+
+-- | The IDs of the Amazon Web Services Verified Access trust providers.
+verifiedAccessInstance_verifiedAccessTrustProviders :: Lens.Lens' VerifiedAccessInstance (Prelude.Maybe [VerifiedAccessTrustProviderCondensed])
+verifiedAccessInstance_verifiedAccessTrustProviders = Lens.lens (\VerifiedAccessInstance' {verifiedAccessTrustProviders} -> verifiedAccessTrustProviders) (\s@VerifiedAccessInstance' {} a -> s {verifiedAccessTrustProviders = a} :: VerifiedAccessInstance) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML VerifiedAccessInstance where
+  parseXML x =
+    VerifiedAccessInstance'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "lastUpdatedTime")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "verifiedAccessInstanceId")
+      Prelude.<*> ( x
+                      Data..@? "verifiedAccessTrustProviderSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable VerifiedAccessInstance where
+  hashWithSalt _salt VerifiedAccessInstance' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` verifiedAccessInstanceId
+      `Prelude.hashWithSalt` verifiedAccessTrustProviders
+
+instance Prelude.NFData VerifiedAccessInstance where
+  rnf VerifiedAccessInstance' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviders
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessInstanceLoggingConfiguration.hs b/gen/Amazonka/EC2/Types/VerifiedAccessInstanceLoggingConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessInstanceLoggingConfiguration.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessInstanceLoggingConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessInstanceLoggingConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogs
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes logging options for an Amazon Web Services Verified Access
+-- instance.
+--
+-- /See:/ 'newVerifiedAccessInstanceLoggingConfiguration' smart constructor.
+data VerifiedAccessInstanceLoggingConfiguration = VerifiedAccessInstanceLoggingConfiguration'
+  { -- | Details about the logging options.
+    accessLogs :: Prelude.Maybe VerifiedAccessLogs,
+    -- | The ID of the Amazon Web Services Verified Access instance.
+    verifiedAccessInstanceId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessInstanceLoggingConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessLogs', 'verifiedAccessInstanceLoggingConfiguration_accessLogs' - Details about the logging options.
+--
+-- 'verifiedAccessInstanceId', 'verifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId' - The ID of the Amazon Web Services Verified Access instance.
+newVerifiedAccessInstanceLoggingConfiguration ::
+  VerifiedAccessInstanceLoggingConfiguration
+newVerifiedAccessInstanceLoggingConfiguration =
+  VerifiedAccessInstanceLoggingConfiguration'
+    { accessLogs =
+        Prelude.Nothing,
+      verifiedAccessInstanceId =
+        Prelude.Nothing
+    }
+
+-- | Details about the logging options.
+verifiedAccessInstanceLoggingConfiguration_accessLogs :: Lens.Lens' VerifiedAccessInstanceLoggingConfiguration (Prelude.Maybe VerifiedAccessLogs)
+verifiedAccessInstanceLoggingConfiguration_accessLogs = Lens.lens (\VerifiedAccessInstanceLoggingConfiguration' {accessLogs} -> accessLogs) (\s@VerifiedAccessInstanceLoggingConfiguration' {} a -> s {accessLogs = a} :: VerifiedAccessInstanceLoggingConfiguration)
+
+-- | The ID of the Amazon Web Services Verified Access instance.
+verifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId :: Lens.Lens' VerifiedAccessInstanceLoggingConfiguration (Prelude.Maybe Prelude.Text)
+verifiedAccessInstanceLoggingConfiguration_verifiedAccessInstanceId = Lens.lens (\VerifiedAccessInstanceLoggingConfiguration' {verifiedAccessInstanceId} -> verifiedAccessInstanceId) (\s@VerifiedAccessInstanceLoggingConfiguration' {} a -> s {verifiedAccessInstanceId = a} :: VerifiedAccessInstanceLoggingConfiguration)
+
+instance
+  Data.FromXML
+    VerifiedAccessInstanceLoggingConfiguration
+  where
+  parseXML x =
+    VerifiedAccessInstanceLoggingConfiguration'
+      Prelude.<$> (x Data..@? "accessLogs")
+      Prelude.<*> (x Data..@? "verifiedAccessInstanceId")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessInstanceLoggingConfiguration
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessInstanceLoggingConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` accessLogs
+        `Prelude.hashWithSalt` verifiedAccessInstanceId
+
+instance
+  Prelude.NFData
+    VerifiedAccessInstanceLoggingConfiguration
+  where
+  rnf VerifiedAccessInstanceLoggingConfiguration' {..} =
+    Prelude.rnf accessLogs
+      `Prelude.seq` Prelude.rnf verifiedAccessInstanceId
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogCloudWatchLogsDestination.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogCloudWatchLogsDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogCloudWatchLogsDestination.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for CloudWatch Logs as a logging destination.
+--
+-- /See:/ 'newVerifiedAccessLogCloudWatchLogsDestination' smart constructor.
+data VerifiedAccessLogCloudWatchLogsDestination = VerifiedAccessLogCloudWatchLogsDestination'
+  { -- | The delivery status for access logs.
+    deliveryStatus :: Prelude.Maybe VerifiedAccessLogDeliveryStatus,
+    -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the CloudWatch Logs log group.
+    logGroup :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogCloudWatchLogsDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deliveryStatus', 'verifiedAccessLogCloudWatchLogsDestination_deliveryStatus' - The delivery status for access logs.
+--
+-- 'enabled', 'verifiedAccessLogCloudWatchLogsDestination_enabled' - Indicates whether logging is enabled.
+--
+-- 'logGroup', 'verifiedAccessLogCloudWatchLogsDestination_logGroup' - The ID of the CloudWatch Logs log group.
+newVerifiedAccessLogCloudWatchLogsDestination ::
+  VerifiedAccessLogCloudWatchLogsDestination
+newVerifiedAccessLogCloudWatchLogsDestination =
+  VerifiedAccessLogCloudWatchLogsDestination'
+    { deliveryStatus =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      logGroup = Prelude.Nothing
+    }
+
+-- | The delivery status for access logs.
+verifiedAccessLogCloudWatchLogsDestination_deliveryStatus :: Lens.Lens' VerifiedAccessLogCloudWatchLogsDestination (Prelude.Maybe VerifiedAccessLogDeliveryStatus)
+verifiedAccessLogCloudWatchLogsDestination_deliveryStatus = Lens.lens (\VerifiedAccessLogCloudWatchLogsDestination' {deliveryStatus} -> deliveryStatus) (\s@VerifiedAccessLogCloudWatchLogsDestination' {} a -> s {deliveryStatus = a} :: VerifiedAccessLogCloudWatchLogsDestination)
+
+-- | Indicates whether logging is enabled.
+verifiedAccessLogCloudWatchLogsDestination_enabled :: Lens.Lens' VerifiedAccessLogCloudWatchLogsDestination (Prelude.Maybe Prelude.Bool)
+verifiedAccessLogCloudWatchLogsDestination_enabled = Lens.lens (\VerifiedAccessLogCloudWatchLogsDestination' {enabled} -> enabled) (\s@VerifiedAccessLogCloudWatchLogsDestination' {} a -> s {enabled = a} :: VerifiedAccessLogCloudWatchLogsDestination)
+
+-- | The ID of the CloudWatch Logs log group.
+verifiedAccessLogCloudWatchLogsDestination_logGroup :: Lens.Lens' VerifiedAccessLogCloudWatchLogsDestination (Prelude.Maybe Prelude.Text)
+verifiedAccessLogCloudWatchLogsDestination_logGroup = Lens.lens (\VerifiedAccessLogCloudWatchLogsDestination' {logGroup} -> logGroup) (\s@VerifiedAccessLogCloudWatchLogsDestination' {} a -> s {logGroup = a} :: VerifiedAccessLogCloudWatchLogsDestination)
+
+instance
+  Data.FromXML
+    VerifiedAccessLogCloudWatchLogsDestination
+  where
+  parseXML x =
+    VerifiedAccessLogCloudWatchLogsDestination'
+      Prelude.<$> (x Data..@? "deliveryStatus")
+      Prelude.<*> (x Data..@? "enabled")
+      Prelude.<*> (x Data..@? "logGroup")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogCloudWatchLogsDestination
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogCloudWatchLogsDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` deliveryStatus
+        `Prelude.hashWithSalt` enabled
+        `Prelude.hashWithSalt` logGroup
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogCloudWatchLogsDestination
+  where
+  rnf VerifiedAccessLogCloudWatchLogsDestination' {..} =
+    Prelude.rnf deliveryStatus
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf logGroup
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogCloudWatchLogsDestinationOptions.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogCloudWatchLogsDestinationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogCloudWatchLogsDestinationOptions.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestinationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestinationOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for CloudWatch Logs as a logging destination.
+--
+-- /See:/ 'newVerifiedAccessLogCloudWatchLogsDestinationOptions' smart constructor.
+data VerifiedAccessLogCloudWatchLogsDestinationOptions = VerifiedAccessLogCloudWatchLogsDestinationOptions'
+  { -- | The ID of the CloudWatch Logs log group.
+    logGroup :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogCloudWatchLogsDestinationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'logGroup', 'verifiedAccessLogCloudWatchLogsDestinationOptions_logGroup' - The ID of the CloudWatch Logs log group.
+--
+-- 'enabled', 'verifiedAccessLogCloudWatchLogsDestinationOptions_enabled' - Indicates whether logging is enabled.
+newVerifiedAccessLogCloudWatchLogsDestinationOptions ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  VerifiedAccessLogCloudWatchLogsDestinationOptions
+newVerifiedAccessLogCloudWatchLogsDestinationOptions
+  pEnabled_ =
+    VerifiedAccessLogCloudWatchLogsDestinationOptions'
+      { logGroup =
+          Prelude.Nothing,
+        enabled = pEnabled_
+      }
+
+-- | The ID of the CloudWatch Logs log group.
+verifiedAccessLogCloudWatchLogsDestinationOptions_logGroup :: Lens.Lens' VerifiedAccessLogCloudWatchLogsDestinationOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessLogCloudWatchLogsDestinationOptions_logGroup = Lens.lens (\VerifiedAccessLogCloudWatchLogsDestinationOptions' {logGroup} -> logGroup) (\s@VerifiedAccessLogCloudWatchLogsDestinationOptions' {} a -> s {logGroup = a} :: VerifiedAccessLogCloudWatchLogsDestinationOptions)
+
+-- | Indicates whether logging is enabled.
+verifiedAccessLogCloudWatchLogsDestinationOptions_enabled :: Lens.Lens' VerifiedAccessLogCloudWatchLogsDestinationOptions Prelude.Bool
+verifiedAccessLogCloudWatchLogsDestinationOptions_enabled = Lens.lens (\VerifiedAccessLogCloudWatchLogsDestinationOptions' {enabled} -> enabled) (\s@VerifiedAccessLogCloudWatchLogsDestinationOptions' {} a -> s {enabled = a} :: VerifiedAccessLogCloudWatchLogsDestinationOptions)
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogCloudWatchLogsDestinationOptions
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogCloudWatchLogsDestinationOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` logGroup
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogCloudWatchLogsDestinationOptions
+  where
+  rnf
+    VerifiedAccessLogCloudWatchLogsDestinationOptions' {..} =
+      Prelude.rnf logGroup
+        `Prelude.seq` Prelude.rnf enabled
+
+instance
+  Data.ToQuery
+    VerifiedAccessLogCloudWatchLogsDestinationOptions
+  where
+  toQuery
+    VerifiedAccessLogCloudWatchLogsDestinationOptions' {..} =
+      Prelude.mconcat
+        [ "LogGroup" Data.=: logGroup,
+          "Enabled" Data.=: enabled
+        ]
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogDeliveryStatus.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogDeliveryStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogDeliveryStatus.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatusCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a log delivery status.
+--
+-- /See:/ 'newVerifiedAccessLogDeliveryStatus' smart constructor.
+data VerifiedAccessLogDeliveryStatus = VerifiedAccessLogDeliveryStatus'
+  { -- | The status code.
+    code :: Prelude.Maybe VerifiedAccessLogDeliveryStatusCode,
+    -- | The status message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogDeliveryStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'verifiedAccessLogDeliveryStatus_code' - The status code.
+--
+-- 'message', 'verifiedAccessLogDeliveryStatus_message' - The status message.
+newVerifiedAccessLogDeliveryStatus ::
+  VerifiedAccessLogDeliveryStatus
+newVerifiedAccessLogDeliveryStatus =
+  VerifiedAccessLogDeliveryStatus'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The status code.
+verifiedAccessLogDeliveryStatus_code :: Lens.Lens' VerifiedAccessLogDeliveryStatus (Prelude.Maybe VerifiedAccessLogDeliveryStatusCode)
+verifiedAccessLogDeliveryStatus_code = Lens.lens (\VerifiedAccessLogDeliveryStatus' {code} -> code) (\s@VerifiedAccessLogDeliveryStatus' {} a -> s {code = a} :: VerifiedAccessLogDeliveryStatus)
+
+-- | The status message.
+verifiedAccessLogDeliveryStatus_message :: Lens.Lens' VerifiedAccessLogDeliveryStatus (Prelude.Maybe Prelude.Text)
+verifiedAccessLogDeliveryStatus_message = Lens.lens (\VerifiedAccessLogDeliveryStatus' {message} -> message) (\s@VerifiedAccessLogDeliveryStatus' {} a -> s {message = a} :: VerifiedAccessLogDeliveryStatus)
+
+instance Data.FromXML VerifiedAccessLogDeliveryStatus where
+  parseXML x =
+    VerifiedAccessLogDeliveryStatus'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogDeliveryStatus
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogDeliveryStatus' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogDeliveryStatus
+  where
+  rnf VerifiedAccessLogDeliveryStatus' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogDeliveryStatusCode.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogDeliveryStatusCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogDeliveryStatusCode.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatusCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatusCode
+  ( VerifiedAccessLogDeliveryStatusCode
+      ( ..,
+        VerifiedAccessLogDeliveryStatusCode_Failed,
+        VerifiedAccessLogDeliveryStatusCode_Success
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VerifiedAccessLogDeliveryStatusCode = VerifiedAccessLogDeliveryStatusCode'
+  { fromVerifiedAccessLogDeliveryStatusCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VerifiedAccessLogDeliveryStatusCode_Failed :: VerifiedAccessLogDeliveryStatusCode
+pattern VerifiedAccessLogDeliveryStatusCode_Failed = VerifiedAccessLogDeliveryStatusCode' "failed"
+
+pattern VerifiedAccessLogDeliveryStatusCode_Success :: VerifiedAccessLogDeliveryStatusCode
+pattern VerifiedAccessLogDeliveryStatusCode_Success = VerifiedAccessLogDeliveryStatusCode' "success"
+
+{-# COMPLETE
+  VerifiedAccessLogDeliveryStatusCode_Failed,
+  VerifiedAccessLogDeliveryStatusCode_Success,
+  VerifiedAccessLogDeliveryStatusCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogKinesisDataFirehoseDestination.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogKinesisDataFirehoseDestination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogKinesisDataFirehoseDestination.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for Kinesis as a logging destination.
+--
+-- /See:/ 'newVerifiedAccessLogKinesisDataFirehoseDestination' smart constructor.
+data VerifiedAccessLogKinesisDataFirehoseDestination = VerifiedAccessLogKinesisDataFirehoseDestination'
+  { -- | The delivery status.
+    deliveryStatus :: Prelude.Maybe VerifiedAccessLogDeliveryStatus,
+    -- | The ID of the delivery stream.
+    deliveryStream :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogKinesisDataFirehoseDestination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deliveryStatus', 'verifiedAccessLogKinesisDataFirehoseDestination_deliveryStatus' - The delivery status.
+--
+-- 'deliveryStream', 'verifiedAccessLogKinesisDataFirehoseDestination_deliveryStream' - The ID of the delivery stream.
+--
+-- 'enabled', 'verifiedAccessLogKinesisDataFirehoseDestination_enabled' - Indicates whether logging is enabled.
+newVerifiedAccessLogKinesisDataFirehoseDestination ::
+  VerifiedAccessLogKinesisDataFirehoseDestination
+newVerifiedAccessLogKinesisDataFirehoseDestination =
+  VerifiedAccessLogKinesisDataFirehoseDestination'
+    { deliveryStatus =
+        Prelude.Nothing,
+      deliveryStream =
+        Prelude.Nothing,
+      enabled = Prelude.Nothing
+    }
+
+-- | The delivery status.
+verifiedAccessLogKinesisDataFirehoseDestination_deliveryStatus :: Lens.Lens' VerifiedAccessLogKinesisDataFirehoseDestination (Prelude.Maybe VerifiedAccessLogDeliveryStatus)
+verifiedAccessLogKinesisDataFirehoseDestination_deliveryStatus = Lens.lens (\VerifiedAccessLogKinesisDataFirehoseDestination' {deliveryStatus} -> deliveryStatus) (\s@VerifiedAccessLogKinesisDataFirehoseDestination' {} a -> s {deliveryStatus = a} :: VerifiedAccessLogKinesisDataFirehoseDestination)
+
+-- | The ID of the delivery stream.
+verifiedAccessLogKinesisDataFirehoseDestination_deliveryStream :: Lens.Lens' VerifiedAccessLogKinesisDataFirehoseDestination (Prelude.Maybe Prelude.Text)
+verifiedAccessLogKinesisDataFirehoseDestination_deliveryStream = Lens.lens (\VerifiedAccessLogKinesisDataFirehoseDestination' {deliveryStream} -> deliveryStream) (\s@VerifiedAccessLogKinesisDataFirehoseDestination' {} a -> s {deliveryStream = a} :: VerifiedAccessLogKinesisDataFirehoseDestination)
+
+-- | Indicates whether logging is enabled.
+verifiedAccessLogKinesisDataFirehoseDestination_enabled :: Lens.Lens' VerifiedAccessLogKinesisDataFirehoseDestination (Prelude.Maybe Prelude.Bool)
+verifiedAccessLogKinesisDataFirehoseDestination_enabled = Lens.lens (\VerifiedAccessLogKinesisDataFirehoseDestination' {enabled} -> enabled) (\s@VerifiedAccessLogKinesisDataFirehoseDestination' {} a -> s {enabled = a} :: VerifiedAccessLogKinesisDataFirehoseDestination)
+
+instance
+  Data.FromXML
+    VerifiedAccessLogKinesisDataFirehoseDestination
+  where
+  parseXML x =
+    VerifiedAccessLogKinesisDataFirehoseDestination'
+      Prelude.<$> (x Data..@? "deliveryStatus")
+      Prelude.<*> (x Data..@? "deliveryStream")
+      Prelude.<*> (x Data..@? "enabled")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogKinesisDataFirehoseDestination
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogKinesisDataFirehoseDestination' {..} =
+      _salt
+        `Prelude.hashWithSalt` deliveryStatus
+        `Prelude.hashWithSalt` deliveryStream
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogKinesisDataFirehoseDestination
+  where
+  rnf
+    VerifiedAccessLogKinesisDataFirehoseDestination' {..} =
+      Prelude.rnf deliveryStatus
+        `Prelude.seq` Prelude.rnf deliveryStream
+        `Prelude.seq` Prelude.rnf enabled
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogKinesisDataFirehoseDestinationOptions.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogKinesisDataFirehoseDestinationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogKinesisDataFirehoseDestinationOptions.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestinationOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes Amazon Kinesis Data Firehose logging options.
+--
+-- /See:/ 'newVerifiedAccessLogKinesisDataFirehoseDestinationOptions' smart constructor.
+data VerifiedAccessLogKinesisDataFirehoseDestinationOptions = VerifiedAccessLogKinesisDataFirehoseDestinationOptions'
+  { -- | The ID of the delivery stream.
+    deliveryStream :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogKinesisDataFirehoseDestinationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'deliveryStream', 'verifiedAccessLogKinesisDataFirehoseDestinationOptions_deliveryStream' - The ID of the delivery stream.
+--
+-- 'enabled', 'verifiedAccessLogKinesisDataFirehoseDestinationOptions_enabled' - Indicates whether logging is enabled.
+newVerifiedAccessLogKinesisDataFirehoseDestinationOptions ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+newVerifiedAccessLogKinesisDataFirehoseDestinationOptions
+  pEnabled_ =
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions'
+      { deliveryStream =
+          Prelude.Nothing,
+        enabled = pEnabled_
+      }
+
+-- | The ID of the delivery stream.
+verifiedAccessLogKinesisDataFirehoseDestinationOptions_deliveryStream :: Lens.Lens' VerifiedAccessLogKinesisDataFirehoseDestinationOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessLogKinesisDataFirehoseDestinationOptions_deliveryStream = Lens.lens (\VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {deliveryStream} -> deliveryStream) (\s@VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {} a -> s {deliveryStream = a} :: VerifiedAccessLogKinesisDataFirehoseDestinationOptions)
+
+-- | Indicates whether logging is enabled.
+verifiedAccessLogKinesisDataFirehoseDestinationOptions_enabled :: Lens.Lens' VerifiedAccessLogKinesisDataFirehoseDestinationOptions Prelude.Bool
+verifiedAccessLogKinesisDataFirehoseDestinationOptions_enabled = Lens.lens (\VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {enabled} -> enabled) (\s@VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {} a -> s {enabled = a} :: VerifiedAccessLogKinesisDataFirehoseDestinationOptions)
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` deliveryStream
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+  where
+  rnf
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {..} =
+      Prelude.rnf deliveryStream
+        `Prelude.seq` Prelude.rnf enabled
+
+instance
+  Data.ToQuery
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+  where
+  toQuery
+    VerifiedAccessLogKinesisDataFirehoseDestinationOptions' {..} =
+      Prelude.mconcat
+        [ "DeliveryStream" Data.=: deliveryStream,
+          "Enabled" Data.=: enabled
+        ]
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogOptions.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogOptions.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestinationOptions
+import Amazonka.EC2.Types.VerifiedAccessLogS3DestinationOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the destinations for Verified Access logs.
+--
+-- /See:/ 'newVerifiedAccessLogOptions' smart constructor.
+data VerifiedAccessLogOptions = VerifiedAccessLogOptions'
+  { -- | Sends Verified Access logs to CloudWatch Logs.
+    cloudWatchLogs :: Prelude.Maybe VerifiedAccessLogCloudWatchLogsDestinationOptions,
+    -- | Sends Verified Access logs to Kinesis.
+    kinesisDataFirehose :: Prelude.Maybe VerifiedAccessLogKinesisDataFirehoseDestinationOptions,
+    -- | Sends Verified Access logs to Amazon S3.
+    s3 :: Prelude.Maybe VerifiedAccessLogS3DestinationOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogs', 'verifiedAccessLogOptions_cloudWatchLogs' - Sends Verified Access logs to CloudWatch Logs.
+--
+-- 'kinesisDataFirehose', 'verifiedAccessLogOptions_kinesisDataFirehose' - Sends Verified Access logs to Kinesis.
+--
+-- 's3', 'verifiedAccessLogOptions_s3' - Sends Verified Access logs to Amazon S3.
+newVerifiedAccessLogOptions ::
+  VerifiedAccessLogOptions
+newVerifiedAccessLogOptions =
+  VerifiedAccessLogOptions'
+    { cloudWatchLogs =
+        Prelude.Nothing,
+      kinesisDataFirehose = Prelude.Nothing,
+      s3 = Prelude.Nothing
+    }
+
+-- | Sends Verified Access logs to CloudWatch Logs.
+verifiedAccessLogOptions_cloudWatchLogs :: Lens.Lens' VerifiedAccessLogOptions (Prelude.Maybe VerifiedAccessLogCloudWatchLogsDestinationOptions)
+verifiedAccessLogOptions_cloudWatchLogs = Lens.lens (\VerifiedAccessLogOptions' {cloudWatchLogs} -> cloudWatchLogs) (\s@VerifiedAccessLogOptions' {} a -> s {cloudWatchLogs = a} :: VerifiedAccessLogOptions)
+
+-- | Sends Verified Access logs to Kinesis.
+verifiedAccessLogOptions_kinesisDataFirehose :: Lens.Lens' VerifiedAccessLogOptions (Prelude.Maybe VerifiedAccessLogKinesisDataFirehoseDestinationOptions)
+verifiedAccessLogOptions_kinesisDataFirehose = Lens.lens (\VerifiedAccessLogOptions' {kinesisDataFirehose} -> kinesisDataFirehose) (\s@VerifiedAccessLogOptions' {} a -> s {kinesisDataFirehose = a} :: VerifiedAccessLogOptions)
+
+-- | Sends Verified Access logs to Amazon S3.
+verifiedAccessLogOptions_s3 :: Lens.Lens' VerifiedAccessLogOptions (Prelude.Maybe VerifiedAccessLogS3DestinationOptions)
+verifiedAccessLogOptions_s3 = Lens.lens (\VerifiedAccessLogOptions' {s3} -> s3) (\s@VerifiedAccessLogOptions' {} a -> s {s3 = a} :: VerifiedAccessLogOptions)
+
+instance Prelude.Hashable VerifiedAccessLogOptions where
+  hashWithSalt _salt VerifiedAccessLogOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogs
+      `Prelude.hashWithSalt` kinesisDataFirehose
+      `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData VerifiedAccessLogOptions where
+  rnf VerifiedAccessLogOptions' {..} =
+    Prelude.rnf cloudWatchLogs
+      `Prelude.seq` Prelude.rnf kinesisDataFirehose
+      `Prelude.seq` Prelude.rnf s3
+
+instance Data.ToQuery VerifiedAccessLogOptions where
+  toQuery VerifiedAccessLogOptions' {..} =
+    Prelude.mconcat
+      [ "CloudWatchLogs" Data.=: cloudWatchLogs,
+        "KinesisDataFirehose" Data.=: kinesisDataFirehose,
+        "S3" Data.=: s3
+      ]
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogS3Destination.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogS3Destination.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogS3Destination.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogS3Destination
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogS3Destination where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogDeliveryStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for Amazon S3 as a logging destination.
+--
+-- /See:/ 'newVerifiedAccessLogS3Destination' smart constructor.
+data VerifiedAccessLogS3Destination = VerifiedAccessLogS3Destination'
+  { -- | The bucket name.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Web Services account number that owns the bucket.
+    bucketOwner :: Prelude.Maybe Prelude.Text,
+    -- | The delivery status.
+    deliveryStatus :: Prelude.Maybe VerifiedAccessLogDeliveryStatus,
+    -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The bucket prefix.
+    prefix :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogS3Destination' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketName', 'verifiedAccessLogS3Destination_bucketName' - The bucket name.
+--
+-- 'bucketOwner', 'verifiedAccessLogS3Destination_bucketOwner' - The Amazon Web Services account number that owns the bucket.
+--
+-- 'deliveryStatus', 'verifiedAccessLogS3Destination_deliveryStatus' - The delivery status.
+--
+-- 'enabled', 'verifiedAccessLogS3Destination_enabled' - Indicates whether logging is enabled.
+--
+-- 'prefix', 'verifiedAccessLogS3Destination_prefix' - The bucket prefix.
+newVerifiedAccessLogS3Destination ::
+  VerifiedAccessLogS3Destination
+newVerifiedAccessLogS3Destination =
+  VerifiedAccessLogS3Destination'
+    { bucketName =
+        Prelude.Nothing,
+      bucketOwner = Prelude.Nothing,
+      deliveryStatus = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      prefix = Prelude.Nothing
+    }
+
+-- | The bucket name.
+verifiedAccessLogS3Destination_bucketName :: Lens.Lens' VerifiedAccessLogS3Destination (Prelude.Maybe Prelude.Text)
+verifiedAccessLogS3Destination_bucketName = Lens.lens (\VerifiedAccessLogS3Destination' {bucketName} -> bucketName) (\s@VerifiedAccessLogS3Destination' {} a -> s {bucketName = a} :: VerifiedAccessLogS3Destination)
+
+-- | The Amazon Web Services account number that owns the bucket.
+verifiedAccessLogS3Destination_bucketOwner :: Lens.Lens' VerifiedAccessLogS3Destination (Prelude.Maybe Prelude.Text)
+verifiedAccessLogS3Destination_bucketOwner = Lens.lens (\VerifiedAccessLogS3Destination' {bucketOwner} -> bucketOwner) (\s@VerifiedAccessLogS3Destination' {} a -> s {bucketOwner = a} :: VerifiedAccessLogS3Destination)
+
+-- | The delivery status.
+verifiedAccessLogS3Destination_deliveryStatus :: Lens.Lens' VerifiedAccessLogS3Destination (Prelude.Maybe VerifiedAccessLogDeliveryStatus)
+verifiedAccessLogS3Destination_deliveryStatus = Lens.lens (\VerifiedAccessLogS3Destination' {deliveryStatus} -> deliveryStatus) (\s@VerifiedAccessLogS3Destination' {} a -> s {deliveryStatus = a} :: VerifiedAccessLogS3Destination)
+
+-- | Indicates whether logging is enabled.
+verifiedAccessLogS3Destination_enabled :: Lens.Lens' VerifiedAccessLogS3Destination (Prelude.Maybe Prelude.Bool)
+verifiedAccessLogS3Destination_enabled = Lens.lens (\VerifiedAccessLogS3Destination' {enabled} -> enabled) (\s@VerifiedAccessLogS3Destination' {} a -> s {enabled = a} :: VerifiedAccessLogS3Destination)
+
+-- | The bucket prefix.
+verifiedAccessLogS3Destination_prefix :: Lens.Lens' VerifiedAccessLogS3Destination (Prelude.Maybe Prelude.Text)
+verifiedAccessLogS3Destination_prefix = Lens.lens (\VerifiedAccessLogS3Destination' {prefix} -> prefix) (\s@VerifiedAccessLogS3Destination' {} a -> s {prefix = a} :: VerifiedAccessLogS3Destination)
+
+instance Data.FromXML VerifiedAccessLogS3Destination where
+  parseXML x =
+    VerifiedAccessLogS3Destination'
+      Prelude.<$> (x Data..@? "bucketName")
+      Prelude.<*> (x Data..@? "bucketOwner")
+      Prelude.<*> (x Data..@? "deliveryStatus")
+      Prelude.<*> (x Data..@? "enabled")
+      Prelude.<*> (x Data..@? "prefix")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogS3Destination
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogS3Destination' {..} =
+      _salt
+        `Prelude.hashWithSalt` bucketName
+        `Prelude.hashWithSalt` bucketOwner
+        `Prelude.hashWithSalt` deliveryStatus
+        `Prelude.hashWithSalt` enabled
+        `Prelude.hashWithSalt` prefix
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogS3Destination
+  where
+  rnf VerifiedAccessLogS3Destination' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf bucketOwner
+      `Prelude.seq` Prelude.rnf deliveryStatus
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf prefix
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogS3DestinationOptions.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogS3DestinationOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogS3DestinationOptions.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogS3DestinationOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogS3DestinationOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for Amazon S3 as a logging destination.
+--
+-- /See:/ 'newVerifiedAccessLogS3DestinationOptions' smart constructor.
+data VerifiedAccessLogS3DestinationOptions = VerifiedAccessLogS3DestinationOptions'
+  { -- | The bucket name.
+    bucketName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the Amazon S3
+    -- bucket.
+    bucketOwner :: Prelude.Maybe Prelude.Text,
+    -- | The bucket prefix.
+    prefix :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether logging is enabled.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogS3DestinationOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketName', 'verifiedAccessLogS3DestinationOptions_bucketName' - The bucket name.
+--
+-- 'bucketOwner', 'verifiedAccessLogS3DestinationOptions_bucketOwner' - The ID of the Amazon Web Services account that owns the Amazon S3
+-- bucket.
+--
+-- 'prefix', 'verifiedAccessLogS3DestinationOptions_prefix' - The bucket prefix.
+--
+-- 'enabled', 'verifiedAccessLogS3DestinationOptions_enabled' - Indicates whether logging is enabled.
+newVerifiedAccessLogS3DestinationOptions ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  VerifiedAccessLogS3DestinationOptions
+newVerifiedAccessLogS3DestinationOptions pEnabled_ =
+  VerifiedAccessLogS3DestinationOptions'
+    { bucketName =
+        Prelude.Nothing,
+      bucketOwner = Prelude.Nothing,
+      prefix = Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | The bucket name.
+verifiedAccessLogS3DestinationOptions_bucketName :: Lens.Lens' VerifiedAccessLogS3DestinationOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessLogS3DestinationOptions_bucketName = Lens.lens (\VerifiedAccessLogS3DestinationOptions' {bucketName} -> bucketName) (\s@VerifiedAccessLogS3DestinationOptions' {} a -> s {bucketName = a} :: VerifiedAccessLogS3DestinationOptions)
+
+-- | The ID of the Amazon Web Services account that owns the Amazon S3
+-- bucket.
+verifiedAccessLogS3DestinationOptions_bucketOwner :: Lens.Lens' VerifiedAccessLogS3DestinationOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessLogS3DestinationOptions_bucketOwner = Lens.lens (\VerifiedAccessLogS3DestinationOptions' {bucketOwner} -> bucketOwner) (\s@VerifiedAccessLogS3DestinationOptions' {} a -> s {bucketOwner = a} :: VerifiedAccessLogS3DestinationOptions)
+
+-- | The bucket prefix.
+verifiedAccessLogS3DestinationOptions_prefix :: Lens.Lens' VerifiedAccessLogS3DestinationOptions (Prelude.Maybe Prelude.Text)
+verifiedAccessLogS3DestinationOptions_prefix = Lens.lens (\VerifiedAccessLogS3DestinationOptions' {prefix} -> prefix) (\s@VerifiedAccessLogS3DestinationOptions' {} a -> s {prefix = a} :: VerifiedAccessLogS3DestinationOptions)
+
+-- | Indicates whether logging is enabled.
+verifiedAccessLogS3DestinationOptions_enabled :: Lens.Lens' VerifiedAccessLogS3DestinationOptions Prelude.Bool
+verifiedAccessLogS3DestinationOptions_enabled = Lens.lens (\VerifiedAccessLogS3DestinationOptions' {enabled} -> enabled) (\s@VerifiedAccessLogS3DestinationOptions' {} a -> s {enabled = a} :: VerifiedAccessLogS3DestinationOptions)
+
+instance
+  Prelude.Hashable
+    VerifiedAccessLogS3DestinationOptions
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessLogS3DestinationOptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` bucketName
+        `Prelude.hashWithSalt` bucketOwner
+        `Prelude.hashWithSalt` prefix
+        `Prelude.hashWithSalt` enabled
+
+instance
+  Prelude.NFData
+    VerifiedAccessLogS3DestinationOptions
+  where
+  rnf VerifiedAccessLogS3DestinationOptions' {..} =
+    Prelude.rnf bucketName
+      `Prelude.seq` Prelude.rnf bucketOwner
+      `Prelude.seq` Prelude.rnf prefix
+      `Prelude.seq` Prelude.rnf enabled
+
+instance
+  Data.ToQuery
+    VerifiedAccessLogS3DestinationOptions
+  where
+  toQuery VerifiedAccessLogS3DestinationOptions' {..} =
+    Prelude.mconcat
+      [ "BucketName" Data.=: bucketName,
+        "BucketOwner" Data.=: bucketOwner,
+        "Prefix" Data.=: prefix,
+        "Enabled" Data.=: enabled
+      ]
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessLogs.hs b/gen/Amazonka/EC2/Types/VerifiedAccessLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessLogs.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessLogs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessLogs where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VerifiedAccessLogCloudWatchLogsDestination
+import Amazonka.EC2.Types.VerifiedAccessLogKinesisDataFirehoseDestination
+import Amazonka.EC2.Types.VerifiedAccessLogS3Destination
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the destinations for Verified Access logs.
+--
+-- /See:/ 'newVerifiedAccessLogs' smart constructor.
+data VerifiedAccessLogs = VerifiedAccessLogs'
+  { -- | CloudWatch Logs logging destination.
+    cloudWatchLogs :: Prelude.Maybe VerifiedAccessLogCloudWatchLogsDestination,
+    -- | Kinesis logging destination.
+    kinesisDataFirehose :: Prelude.Maybe VerifiedAccessLogKinesisDataFirehoseDestination,
+    -- | Amazon S3 logging options.
+    s3 :: Prelude.Maybe VerifiedAccessLogS3Destination
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessLogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogs', 'verifiedAccessLogs_cloudWatchLogs' - CloudWatch Logs logging destination.
+--
+-- 'kinesisDataFirehose', 'verifiedAccessLogs_kinesisDataFirehose' - Kinesis logging destination.
+--
+-- 's3', 'verifiedAccessLogs_s3' - Amazon S3 logging options.
+newVerifiedAccessLogs ::
+  VerifiedAccessLogs
+newVerifiedAccessLogs =
+  VerifiedAccessLogs'
+    { cloudWatchLogs =
+        Prelude.Nothing,
+      kinesisDataFirehose = Prelude.Nothing,
+      s3 = Prelude.Nothing
+    }
+
+-- | CloudWatch Logs logging destination.
+verifiedAccessLogs_cloudWatchLogs :: Lens.Lens' VerifiedAccessLogs (Prelude.Maybe VerifiedAccessLogCloudWatchLogsDestination)
+verifiedAccessLogs_cloudWatchLogs = Lens.lens (\VerifiedAccessLogs' {cloudWatchLogs} -> cloudWatchLogs) (\s@VerifiedAccessLogs' {} a -> s {cloudWatchLogs = a} :: VerifiedAccessLogs)
+
+-- | Kinesis logging destination.
+verifiedAccessLogs_kinesisDataFirehose :: Lens.Lens' VerifiedAccessLogs (Prelude.Maybe VerifiedAccessLogKinesisDataFirehoseDestination)
+verifiedAccessLogs_kinesisDataFirehose = Lens.lens (\VerifiedAccessLogs' {kinesisDataFirehose} -> kinesisDataFirehose) (\s@VerifiedAccessLogs' {} a -> s {kinesisDataFirehose = a} :: VerifiedAccessLogs)
+
+-- | Amazon S3 logging options.
+verifiedAccessLogs_s3 :: Lens.Lens' VerifiedAccessLogs (Prelude.Maybe VerifiedAccessLogS3Destination)
+verifiedAccessLogs_s3 = Lens.lens (\VerifiedAccessLogs' {s3} -> s3) (\s@VerifiedAccessLogs' {} a -> s {s3 = a} :: VerifiedAccessLogs)
+
+instance Data.FromXML VerifiedAccessLogs where
+  parseXML x =
+    VerifiedAccessLogs'
+      Prelude.<$> (x Data..@? "cloudWatchLogs")
+      Prelude.<*> (x Data..@? "kinesisDataFirehose")
+      Prelude.<*> (x Data..@? "s3")
+
+instance Prelude.Hashable VerifiedAccessLogs where
+  hashWithSalt _salt VerifiedAccessLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` cloudWatchLogs
+      `Prelude.hashWithSalt` kinesisDataFirehose
+      `Prelude.hashWithSalt` s3
+
+instance Prelude.NFData VerifiedAccessLogs where
+  rnf VerifiedAccessLogs' {..} =
+    Prelude.rnf cloudWatchLogs
+      `Prelude.seq` Prelude.rnf kinesisDataFirehose
+      `Prelude.seq` Prelude.rnf s3
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessTrustProvider.hs b/gen/Amazonka/EC2/Types/VerifiedAccessTrustProvider.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessTrustProvider.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessTrustProvider
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessTrustProvider where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DeviceOptions
+import Amazonka.EC2.Types.DeviceTrustProviderType
+import Amazonka.EC2.Types.OidcOptions
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.TrustProviderType
+import Amazonka.EC2.Types.UserTrustProviderType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a Verified Access trust provider.
+--
+-- /See:/ 'newVerifiedAccessTrustProvider' smart constructor.
+data VerifiedAccessTrustProvider = VerifiedAccessTrustProvider'
+  { -- | The creation time.
+    creationTime :: Prelude.Maybe Prelude.Text,
+    -- | A description for the Amazon Web Services Verified Access trust
+    -- provider.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The options for device-identity type trust provider.
+    deviceOptions :: Prelude.Maybe DeviceOptions,
+    -- | The type of device-based trust provider.
+    deviceTrustProviderType :: Prelude.Maybe DeviceTrustProviderType,
+    -- | The last updated time.
+    lastUpdatedTime :: Prelude.Maybe Prelude.Text,
+    -- | The OpenID Connect details for an @oidc@-type, user-identity based trust
+    -- provider.
+    oidcOptions :: Prelude.Maybe OidcOptions,
+    -- | The identifier to be used when working with policy rules.
+    policyReferenceName :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The type of Verified Access trust provider.
+    trustProviderType :: Prelude.Maybe TrustProviderType,
+    -- | The type of user-based trust provider.
+    userTrustProviderType :: Prelude.Maybe UserTrustProviderType,
+    -- | The ID of the Amazon Web Services Verified Access trust provider.
+    verifiedAccessTrustProviderId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessTrustProvider' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTime', 'verifiedAccessTrustProvider_creationTime' - The creation time.
+--
+-- 'description', 'verifiedAccessTrustProvider_description' - A description for the Amazon Web Services Verified Access trust
+-- provider.
+--
+-- 'deviceOptions', 'verifiedAccessTrustProvider_deviceOptions' - The options for device-identity type trust provider.
+--
+-- 'deviceTrustProviderType', 'verifiedAccessTrustProvider_deviceTrustProviderType' - The type of device-based trust provider.
+--
+-- 'lastUpdatedTime', 'verifiedAccessTrustProvider_lastUpdatedTime' - The last updated time.
+--
+-- 'oidcOptions', 'verifiedAccessTrustProvider_oidcOptions' - The OpenID Connect details for an @oidc@-type, user-identity based trust
+-- provider.
+--
+-- 'policyReferenceName', 'verifiedAccessTrustProvider_policyReferenceName' - The identifier to be used when working with policy rules.
+--
+-- 'tags', 'verifiedAccessTrustProvider_tags' - The tags.
+--
+-- 'trustProviderType', 'verifiedAccessTrustProvider_trustProviderType' - The type of Verified Access trust provider.
+--
+-- 'userTrustProviderType', 'verifiedAccessTrustProvider_userTrustProviderType' - The type of user-based trust provider.
+--
+-- 'verifiedAccessTrustProviderId', 'verifiedAccessTrustProvider_verifiedAccessTrustProviderId' - The ID of the Amazon Web Services Verified Access trust provider.
+newVerifiedAccessTrustProvider ::
+  VerifiedAccessTrustProvider
+newVerifiedAccessTrustProvider =
+  VerifiedAccessTrustProvider'
+    { creationTime =
+        Prelude.Nothing,
+      description = Prelude.Nothing,
+      deviceOptions = Prelude.Nothing,
+      deviceTrustProviderType = Prelude.Nothing,
+      lastUpdatedTime = Prelude.Nothing,
+      oidcOptions = Prelude.Nothing,
+      policyReferenceName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      trustProviderType = Prelude.Nothing,
+      userTrustProviderType = Prelude.Nothing,
+      verifiedAccessTrustProviderId =
+        Prelude.Nothing
+    }
+
+-- | The creation time.
+verifiedAccessTrustProvider_creationTime :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProvider_creationTime = Lens.lens (\VerifiedAccessTrustProvider' {creationTime} -> creationTime) (\s@VerifiedAccessTrustProvider' {} a -> s {creationTime = a} :: VerifiedAccessTrustProvider)
+
+-- | A description for the Amazon Web Services Verified Access trust
+-- provider.
+verifiedAccessTrustProvider_description :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProvider_description = Lens.lens (\VerifiedAccessTrustProvider' {description} -> description) (\s@VerifiedAccessTrustProvider' {} a -> s {description = a} :: VerifiedAccessTrustProvider)
+
+-- | The options for device-identity type trust provider.
+verifiedAccessTrustProvider_deviceOptions :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe DeviceOptions)
+verifiedAccessTrustProvider_deviceOptions = Lens.lens (\VerifiedAccessTrustProvider' {deviceOptions} -> deviceOptions) (\s@VerifiedAccessTrustProvider' {} a -> s {deviceOptions = a} :: VerifiedAccessTrustProvider)
+
+-- | The type of device-based trust provider.
+verifiedAccessTrustProvider_deviceTrustProviderType :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe DeviceTrustProviderType)
+verifiedAccessTrustProvider_deviceTrustProviderType = Lens.lens (\VerifiedAccessTrustProvider' {deviceTrustProviderType} -> deviceTrustProviderType) (\s@VerifiedAccessTrustProvider' {} a -> s {deviceTrustProviderType = a} :: VerifiedAccessTrustProvider)
+
+-- | The last updated time.
+verifiedAccessTrustProvider_lastUpdatedTime :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProvider_lastUpdatedTime = Lens.lens (\VerifiedAccessTrustProvider' {lastUpdatedTime} -> lastUpdatedTime) (\s@VerifiedAccessTrustProvider' {} a -> s {lastUpdatedTime = a} :: VerifiedAccessTrustProvider)
+
+-- | The OpenID Connect details for an @oidc@-type, user-identity based trust
+-- provider.
+verifiedAccessTrustProvider_oidcOptions :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe OidcOptions)
+verifiedAccessTrustProvider_oidcOptions = Lens.lens (\VerifiedAccessTrustProvider' {oidcOptions} -> oidcOptions) (\s@VerifiedAccessTrustProvider' {} a -> s {oidcOptions = a} :: VerifiedAccessTrustProvider)
+
+-- | The identifier to be used when working with policy rules.
+verifiedAccessTrustProvider_policyReferenceName :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProvider_policyReferenceName = Lens.lens (\VerifiedAccessTrustProvider' {policyReferenceName} -> policyReferenceName) (\s@VerifiedAccessTrustProvider' {} a -> s {policyReferenceName = a} :: VerifiedAccessTrustProvider)
+
+-- | The tags.
+verifiedAccessTrustProvider_tags :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe [Tag])
+verifiedAccessTrustProvider_tags = Lens.lens (\VerifiedAccessTrustProvider' {tags} -> tags) (\s@VerifiedAccessTrustProvider' {} a -> s {tags = a} :: VerifiedAccessTrustProvider) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of Verified Access trust provider.
+verifiedAccessTrustProvider_trustProviderType :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe TrustProviderType)
+verifiedAccessTrustProvider_trustProviderType = Lens.lens (\VerifiedAccessTrustProvider' {trustProviderType} -> trustProviderType) (\s@VerifiedAccessTrustProvider' {} a -> s {trustProviderType = a} :: VerifiedAccessTrustProvider)
+
+-- | The type of user-based trust provider.
+verifiedAccessTrustProvider_userTrustProviderType :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe UserTrustProviderType)
+verifiedAccessTrustProvider_userTrustProviderType = Lens.lens (\VerifiedAccessTrustProvider' {userTrustProviderType} -> userTrustProviderType) (\s@VerifiedAccessTrustProvider' {} a -> s {userTrustProviderType = a} :: VerifiedAccessTrustProvider)
+
+-- | The ID of the Amazon Web Services Verified Access trust provider.
+verifiedAccessTrustProvider_verifiedAccessTrustProviderId :: Lens.Lens' VerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProvider_verifiedAccessTrustProviderId = Lens.lens (\VerifiedAccessTrustProvider' {verifiedAccessTrustProviderId} -> verifiedAccessTrustProviderId) (\s@VerifiedAccessTrustProvider' {} a -> s {verifiedAccessTrustProviderId = a} :: VerifiedAccessTrustProvider)
+
+instance Data.FromXML VerifiedAccessTrustProvider where
+  parseXML x =
+    VerifiedAccessTrustProvider'
+      Prelude.<$> (x Data..@? "creationTime")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "deviceOptions")
+      Prelude.<*> (x Data..@? "deviceTrustProviderType")
+      Prelude.<*> (x Data..@? "lastUpdatedTime")
+      Prelude.<*> (x Data..@? "oidcOptions")
+      Prelude.<*> (x Data..@? "policyReferenceName")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "trustProviderType")
+      Prelude.<*> (x Data..@? "userTrustProviderType")
+      Prelude.<*> (x Data..@? "verifiedAccessTrustProviderId")
+
+instance Prelude.Hashable VerifiedAccessTrustProvider where
+  hashWithSalt _salt VerifiedAccessTrustProvider' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` deviceOptions
+      `Prelude.hashWithSalt` deviceTrustProviderType
+      `Prelude.hashWithSalt` lastUpdatedTime
+      `Prelude.hashWithSalt` oidcOptions
+      `Prelude.hashWithSalt` policyReferenceName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` trustProviderType
+      `Prelude.hashWithSalt` userTrustProviderType
+      `Prelude.hashWithSalt` verifiedAccessTrustProviderId
+
+instance Prelude.NFData VerifiedAccessTrustProvider where
+  rnf VerifiedAccessTrustProvider' {..} =
+    Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceOptions
+      `Prelude.seq` Prelude.rnf deviceTrustProviderType
+      `Prelude.seq` Prelude.rnf lastUpdatedTime
+      `Prelude.seq` Prelude.rnf oidcOptions
+      `Prelude.seq` Prelude.rnf policyReferenceName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf trustProviderType
+      `Prelude.seq` Prelude.rnf userTrustProviderType
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderId
diff --git a/gen/Amazonka/EC2/Types/VerifiedAccessTrustProviderCondensed.hs b/gen/Amazonka/EC2/Types/VerifiedAccessTrustProviderCondensed.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VerifiedAccessTrustProviderCondensed.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VerifiedAccessTrustProviderCondensed
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VerifiedAccessTrustProviderCondensed where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DeviceTrustProviderType
+import Amazonka.EC2.Types.TrustProviderType
+import Amazonka.EC2.Types.UserTrustProviderType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Condensed information about a trust provider.
+--
+-- /See:/ 'newVerifiedAccessTrustProviderCondensed' smart constructor.
+data VerifiedAccessTrustProviderCondensed = VerifiedAccessTrustProviderCondensed'
+  { -- | The description of trust provider.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The type of device-based trust provider.
+    deviceTrustProviderType :: Prelude.Maybe DeviceTrustProviderType,
+    -- | The type of trust provider (user- or device-based).
+    trustProviderType :: Prelude.Maybe TrustProviderType,
+    -- | The type of user-based trust provider.
+    userTrustProviderType :: Prelude.Maybe UserTrustProviderType,
+    -- | The ID of the trust provider.
+    verifiedAccessTrustProviderId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VerifiedAccessTrustProviderCondensed' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'verifiedAccessTrustProviderCondensed_description' - The description of trust provider.
+--
+-- 'deviceTrustProviderType', 'verifiedAccessTrustProviderCondensed_deviceTrustProviderType' - The type of device-based trust provider.
+--
+-- 'trustProviderType', 'verifiedAccessTrustProviderCondensed_trustProviderType' - The type of trust provider (user- or device-based).
+--
+-- 'userTrustProviderType', 'verifiedAccessTrustProviderCondensed_userTrustProviderType' - The type of user-based trust provider.
+--
+-- 'verifiedAccessTrustProviderId', 'verifiedAccessTrustProviderCondensed_verifiedAccessTrustProviderId' - The ID of the trust provider.
+newVerifiedAccessTrustProviderCondensed ::
+  VerifiedAccessTrustProviderCondensed
+newVerifiedAccessTrustProviderCondensed =
+  VerifiedAccessTrustProviderCondensed'
+    { description =
+        Prelude.Nothing,
+      deviceTrustProviderType =
+        Prelude.Nothing,
+      trustProviderType = Prelude.Nothing,
+      userTrustProviderType =
+        Prelude.Nothing,
+      verifiedAccessTrustProviderId =
+        Prelude.Nothing
+    }
+
+-- | The description of trust provider.
+verifiedAccessTrustProviderCondensed_description :: Lens.Lens' VerifiedAccessTrustProviderCondensed (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProviderCondensed_description = Lens.lens (\VerifiedAccessTrustProviderCondensed' {description} -> description) (\s@VerifiedAccessTrustProviderCondensed' {} a -> s {description = a} :: VerifiedAccessTrustProviderCondensed)
+
+-- | The type of device-based trust provider.
+verifiedAccessTrustProviderCondensed_deviceTrustProviderType :: Lens.Lens' VerifiedAccessTrustProviderCondensed (Prelude.Maybe DeviceTrustProviderType)
+verifiedAccessTrustProviderCondensed_deviceTrustProviderType = Lens.lens (\VerifiedAccessTrustProviderCondensed' {deviceTrustProviderType} -> deviceTrustProviderType) (\s@VerifiedAccessTrustProviderCondensed' {} a -> s {deviceTrustProviderType = a} :: VerifiedAccessTrustProviderCondensed)
+
+-- | The type of trust provider (user- or device-based).
+verifiedAccessTrustProviderCondensed_trustProviderType :: Lens.Lens' VerifiedAccessTrustProviderCondensed (Prelude.Maybe TrustProviderType)
+verifiedAccessTrustProviderCondensed_trustProviderType = Lens.lens (\VerifiedAccessTrustProviderCondensed' {trustProviderType} -> trustProviderType) (\s@VerifiedAccessTrustProviderCondensed' {} a -> s {trustProviderType = a} :: VerifiedAccessTrustProviderCondensed)
+
+-- | The type of user-based trust provider.
+verifiedAccessTrustProviderCondensed_userTrustProviderType :: Lens.Lens' VerifiedAccessTrustProviderCondensed (Prelude.Maybe UserTrustProviderType)
+verifiedAccessTrustProviderCondensed_userTrustProviderType = Lens.lens (\VerifiedAccessTrustProviderCondensed' {userTrustProviderType} -> userTrustProviderType) (\s@VerifiedAccessTrustProviderCondensed' {} a -> s {userTrustProviderType = a} :: VerifiedAccessTrustProviderCondensed)
+
+-- | The ID of the trust provider.
+verifiedAccessTrustProviderCondensed_verifiedAccessTrustProviderId :: Lens.Lens' VerifiedAccessTrustProviderCondensed (Prelude.Maybe Prelude.Text)
+verifiedAccessTrustProviderCondensed_verifiedAccessTrustProviderId = Lens.lens (\VerifiedAccessTrustProviderCondensed' {verifiedAccessTrustProviderId} -> verifiedAccessTrustProviderId) (\s@VerifiedAccessTrustProviderCondensed' {} a -> s {verifiedAccessTrustProviderId = a} :: VerifiedAccessTrustProviderCondensed)
+
+instance
+  Data.FromXML
+    VerifiedAccessTrustProviderCondensed
+  where
+  parseXML x =
+    VerifiedAccessTrustProviderCondensed'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "deviceTrustProviderType")
+      Prelude.<*> (x Data..@? "trustProviderType")
+      Prelude.<*> (x Data..@? "userTrustProviderType")
+      Prelude.<*> (x Data..@? "verifiedAccessTrustProviderId")
+
+instance
+  Prelude.Hashable
+    VerifiedAccessTrustProviderCondensed
+  where
+  hashWithSalt
+    _salt
+    VerifiedAccessTrustProviderCondensed' {..} =
+      _salt
+        `Prelude.hashWithSalt` description
+        `Prelude.hashWithSalt` deviceTrustProviderType
+        `Prelude.hashWithSalt` trustProviderType
+        `Prelude.hashWithSalt` userTrustProviderType
+        `Prelude.hashWithSalt` verifiedAccessTrustProviderId
+
+instance
+  Prelude.NFData
+    VerifiedAccessTrustProviderCondensed
+  where
+  rnf VerifiedAccessTrustProviderCondensed' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceTrustProviderType
+      `Prelude.seq` Prelude.rnf trustProviderType
+      `Prelude.seq` Prelude.rnf userTrustProviderType
+      `Prelude.seq` Prelude.rnf verifiedAccessTrustProviderId
diff --git a/gen/Amazonka/EC2/Types/VgwTelemetry.hs b/gen/Amazonka/EC2/Types/VgwTelemetry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VgwTelemetry.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VgwTelemetry
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VgwTelemetry where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TelemetryStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes telemetry for a VPN tunnel.
+--
+-- /See:/ 'newVgwTelemetry' smart constructor.
+data VgwTelemetry = VgwTelemetry'
+  { -- | The number of accepted routes.
+    acceptedRouteCount :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the VPN tunnel endpoint certificate.
+    certificateArn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time of the last change in status.
+    lastStatusChange :: Prelude.Maybe Data.ISO8601,
+    -- | The Internet-routable IP address of the virtual private gateway\'s
+    -- outside interface.
+    outsideIpAddress :: Prelude.Maybe Prelude.Text,
+    -- | The status of the VPN tunnel.
+    status :: Prelude.Maybe TelemetryStatus,
+    -- | If an error occurs, a description of the error.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VgwTelemetry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'acceptedRouteCount', 'vgwTelemetry_acceptedRouteCount' - The number of accepted routes.
+--
+-- 'certificateArn', 'vgwTelemetry_certificateArn' - The Amazon Resource Name (ARN) of the VPN tunnel endpoint certificate.
+--
+-- 'lastStatusChange', 'vgwTelemetry_lastStatusChange' - The date and time of the last change in status.
+--
+-- 'outsideIpAddress', 'vgwTelemetry_outsideIpAddress' - The Internet-routable IP address of the virtual private gateway\'s
+-- outside interface.
+--
+-- 'status', 'vgwTelemetry_status' - The status of the VPN tunnel.
+--
+-- 'statusMessage', 'vgwTelemetry_statusMessage' - If an error occurs, a description of the error.
+newVgwTelemetry ::
+  VgwTelemetry
+newVgwTelemetry =
+  VgwTelemetry'
+    { acceptedRouteCount = Prelude.Nothing,
+      certificateArn = Prelude.Nothing,
+      lastStatusChange = Prelude.Nothing,
+      outsideIpAddress = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The number of accepted routes.
+vgwTelemetry_acceptedRouteCount :: Lens.Lens' VgwTelemetry (Prelude.Maybe Prelude.Int)
+vgwTelemetry_acceptedRouteCount = Lens.lens (\VgwTelemetry' {acceptedRouteCount} -> acceptedRouteCount) (\s@VgwTelemetry' {} a -> s {acceptedRouteCount = a} :: VgwTelemetry)
+
+-- | The Amazon Resource Name (ARN) of the VPN tunnel endpoint certificate.
+vgwTelemetry_certificateArn :: Lens.Lens' VgwTelemetry (Prelude.Maybe Prelude.Text)
+vgwTelemetry_certificateArn = Lens.lens (\VgwTelemetry' {certificateArn} -> certificateArn) (\s@VgwTelemetry' {} a -> s {certificateArn = a} :: VgwTelemetry)
+
+-- | The date and time of the last change in status.
+vgwTelemetry_lastStatusChange :: Lens.Lens' VgwTelemetry (Prelude.Maybe Prelude.UTCTime)
+vgwTelemetry_lastStatusChange = Lens.lens (\VgwTelemetry' {lastStatusChange} -> lastStatusChange) (\s@VgwTelemetry' {} a -> s {lastStatusChange = a} :: VgwTelemetry) Prelude.. Lens.mapping Data._Time
+
+-- | The Internet-routable IP address of the virtual private gateway\'s
+-- outside interface.
+vgwTelemetry_outsideIpAddress :: Lens.Lens' VgwTelemetry (Prelude.Maybe Prelude.Text)
+vgwTelemetry_outsideIpAddress = Lens.lens (\VgwTelemetry' {outsideIpAddress} -> outsideIpAddress) (\s@VgwTelemetry' {} a -> s {outsideIpAddress = a} :: VgwTelemetry)
+
+-- | The status of the VPN tunnel.
+vgwTelemetry_status :: Lens.Lens' VgwTelemetry (Prelude.Maybe TelemetryStatus)
+vgwTelemetry_status = Lens.lens (\VgwTelemetry' {status} -> status) (\s@VgwTelemetry' {} a -> s {status = a} :: VgwTelemetry)
+
+-- | If an error occurs, a description of the error.
+vgwTelemetry_statusMessage :: Lens.Lens' VgwTelemetry (Prelude.Maybe Prelude.Text)
+vgwTelemetry_statusMessage = Lens.lens (\VgwTelemetry' {statusMessage} -> statusMessage) (\s@VgwTelemetry' {} a -> s {statusMessage = a} :: VgwTelemetry)
+
+instance Data.FromXML VgwTelemetry where
+  parseXML x =
+    VgwTelemetry'
+      Prelude.<$> (x Data..@? "acceptedRouteCount")
+      Prelude.<*> (x Data..@? "certificateArn")
+      Prelude.<*> (x Data..@? "lastStatusChange")
+      Prelude.<*> (x Data..@? "outsideIpAddress")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "statusMessage")
+
+instance Prelude.Hashable VgwTelemetry where
+  hashWithSalt _salt VgwTelemetry' {..} =
+    _salt
+      `Prelude.hashWithSalt` acceptedRouteCount
+      `Prelude.hashWithSalt` certificateArn
+      `Prelude.hashWithSalt` lastStatusChange
+      `Prelude.hashWithSalt` outsideIpAddress
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData VgwTelemetry where
+  rnf VgwTelemetry' {..} =
+    Prelude.rnf acceptedRouteCount
+      `Prelude.seq` Prelude.rnf certificateArn
+      `Prelude.seq` Prelude.rnf lastStatusChange
+      `Prelude.seq` Prelude.rnf outsideIpAddress
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/VirtualizationType.hs b/gen/Amazonka/EC2/Types/VirtualizationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VirtualizationType.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VirtualizationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VirtualizationType
+  ( VirtualizationType
+      ( ..,
+        VirtualizationType_Hvm,
+        VirtualizationType_Paravirtual
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VirtualizationType = VirtualizationType'
+  { fromVirtualizationType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VirtualizationType_Hvm :: VirtualizationType
+pattern VirtualizationType_Hvm = VirtualizationType' "hvm"
+
+pattern VirtualizationType_Paravirtual :: VirtualizationType
+pattern VirtualizationType_Paravirtual = VirtualizationType' "paravirtual"
+
+{-# COMPLETE
+  VirtualizationType_Hvm,
+  VirtualizationType_Paravirtual,
+  VirtualizationType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Volume.hs b/gen/Amazonka/EC2/Types/Volume.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Volume.hs
@@ -0,0 +1,300 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Volume
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Volume where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VolumeAttachment
+import Amazonka.EC2.Types.VolumeState
+import Amazonka.EC2.Types.VolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a volume.
+--
+-- /See:/ 'newVolume' smart constructor.
+data Volume = Volume'
+  { -- | Information about the volume attachments.
+    attachments :: Prelude.Maybe [VolumeAttachment],
+    -- | Indicates whether the volume was created using fast snapshot restore.
+    fastRestored :: Prelude.Maybe Prelude.Bool,
+    -- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+    -- @io2@ volumes, this represents the number of IOPS that are provisioned
+    -- for the volume. For @gp2@ volumes, this represents the baseline
+    -- performance of the volume and the rate at which the volume accumulates
+    -- I\/O credits for bursting.
+    iops :: Prelude.Maybe Prelude.Int,
+    -- | The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS
+    -- key that was used to protect the volume encryption key for the volume.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether Amazon EBS Multi-Attach is enabled.
+    multiAttachEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the volume.
+    tags :: Prelude.Maybe [Tag],
+    -- | The throughput that the volume supports, in MiB\/s.
+    throughput :: Prelude.Maybe Prelude.Int,
+    -- | The Availability Zone for the volume.
+    availabilityZone :: Prelude.Text,
+    -- | The time stamp when volume creation was initiated.
+    createTime :: Data.ISO8601,
+    -- | Indicates whether the volume is encrypted.
+    encrypted :: Prelude.Bool,
+    -- | The size of the volume, in GiBs.
+    size :: Prelude.Int,
+    -- | The snapshot from which the volume was created, if applicable.
+    snapshotId :: Prelude.Text,
+    -- | The volume state.
+    state :: VolumeState,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Text,
+    -- | The volume type.
+    volumeType :: VolumeType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Volume' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachments', 'volume_attachments' - Information about the volume attachments.
+--
+-- 'fastRestored', 'volume_fastRestored' - Indicates whether the volume was created using fast snapshot restore.
+--
+-- 'iops', 'volume_iops' - The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+--
+-- 'kmsKeyId', 'volume_kmsKeyId' - The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS
+-- key that was used to protect the volume encryption key for the volume.
+--
+-- 'multiAttachEnabled', 'volume_multiAttachEnabled' - Indicates whether Amazon EBS Multi-Attach is enabled.
+--
+-- 'outpostArn', 'volume_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'tags', 'volume_tags' - Any tags assigned to the volume.
+--
+-- 'throughput', 'volume_throughput' - The throughput that the volume supports, in MiB\/s.
+--
+-- 'availabilityZone', 'volume_availabilityZone' - The Availability Zone for the volume.
+--
+-- 'createTime', 'volume_createTime' - The time stamp when volume creation was initiated.
+--
+-- 'encrypted', 'volume_encrypted' - Indicates whether the volume is encrypted.
+--
+-- 'size', 'volume_size' - The size of the volume, in GiBs.
+--
+-- 'snapshotId', 'volume_snapshotId' - The snapshot from which the volume was created, if applicable.
+--
+-- 'state', 'volume_state' - The volume state.
+--
+-- 'volumeId', 'volume_volumeId' - The ID of the volume.
+--
+-- 'volumeType', 'volume_volumeType' - The volume type.
+newVolume ::
+  -- | 'availabilityZone'
+  Prelude.Text ->
+  -- | 'createTime'
+  Prelude.UTCTime ->
+  -- | 'encrypted'
+  Prelude.Bool ->
+  -- | 'size'
+  Prelude.Int ->
+  -- | 'snapshotId'
+  Prelude.Text ->
+  -- | 'state'
+  VolumeState ->
+  -- | 'volumeId'
+  Prelude.Text ->
+  -- | 'volumeType'
+  VolumeType ->
+  Volume
+newVolume
+  pAvailabilityZone_
+  pCreateTime_
+  pEncrypted_
+  pSize_
+  pSnapshotId_
+  pState_
+  pVolumeId_
+  pVolumeType_ =
+    Volume'
+      { attachments = Prelude.Nothing,
+        fastRestored = Prelude.Nothing,
+        iops = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        multiAttachEnabled = Prelude.Nothing,
+        outpostArn = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        throughput = Prelude.Nothing,
+        availabilityZone = pAvailabilityZone_,
+        createTime = Data._Time Lens.# pCreateTime_,
+        encrypted = pEncrypted_,
+        size = pSize_,
+        snapshotId = pSnapshotId_,
+        state = pState_,
+        volumeId = pVolumeId_,
+        volumeType = pVolumeType_
+      }
+
+-- | Information about the volume attachments.
+volume_attachments :: Lens.Lens' Volume (Prelude.Maybe [VolumeAttachment])
+volume_attachments = Lens.lens (\Volume' {attachments} -> attachments) (\s@Volume' {} a -> s {attachments = a} :: Volume) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the volume was created using fast snapshot restore.
+volume_fastRestored :: Lens.Lens' Volume (Prelude.Maybe Prelude.Bool)
+volume_fastRestored = Lens.lens (\Volume' {fastRestored} -> fastRestored) (\s@Volume' {} a -> s {fastRestored = a} :: Volume)
+
+-- | The number of I\/O operations per second (IOPS). For @gp3@, @io1@, and
+-- @io2@ volumes, this represents the number of IOPS that are provisioned
+-- for the volume. For @gp2@ volumes, this represents the baseline
+-- performance of the volume and the rate at which the volume accumulates
+-- I\/O credits for bursting.
+volume_iops :: Lens.Lens' Volume (Prelude.Maybe Prelude.Int)
+volume_iops = Lens.lens (\Volume' {iops} -> iops) (\s@Volume' {} a -> s {iops = a} :: Volume)
+
+-- | The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS
+-- key that was used to protect the volume encryption key for the volume.
+volume_kmsKeyId :: Lens.Lens' Volume (Prelude.Maybe Prelude.Text)
+volume_kmsKeyId = Lens.lens (\Volume' {kmsKeyId} -> kmsKeyId) (\s@Volume' {} a -> s {kmsKeyId = a} :: Volume)
+
+-- | Indicates whether Amazon EBS Multi-Attach is enabled.
+volume_multiAttachEnabled :: Lens.Lens' Volume (Prelude.Maybe Prelude.Bool)
+volume_multiAttachEnabled = Lens.lens (\Volume' {multiAttachEnabled} -> multiAttachEnabled) (\s@Volume' {} a -> s {multiAttachEnabled = a} :: Volume)
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+volume_outpostArn :: Lens.Lens' Volume (Prelude.Maybe Prelude.Text)
+volume_outpostArn = Lens.lens (\Volume' {outpostArn} -> outpostArn) (\s@Volume' {} a -> s {outpostArn = a} :: Volume)
+
+-- | Any tags assigned to the volume.
+volume_tags :: Lens.Lens' Volume (Prelude.Maybe [Tag])
+volume_tags = Lens.lens (\Volume' {tags} -> tags) (\s@Volume' {} a -> s {tags = a} :: Volume) Prelude.. Lens.mapping Lens.coerced
+
+-- | The throughput that the volume supports, in MiB\/s.
+volume_throughput :: Lens.Lens' Volume (Prelude.Maybe Prelude.Int)
+volume_throughput = Lens.lens (\Volume' {throughput} -> throughput) (\s@Volume' {} a -> s {throughput = a} :: Volume)
+
+-- | The Availability Zone for the volume.
+volume_availabilityZone :: Lens.Lens' Volume Prelude.Text
+volume_availabilityZone = Lens.lens (\Volume' {availabilityZone} -> availabilityZone) (\s@Volume' {} a -> s {availabilityZone = a} :: Volume)
+
+-- | The time stamp when volume creation was initiated.
+volume_createTime :: Lens.Lens' Volume Prelude.UTCTime
+volume_createTime = Lens.lens (\Volume' {createTime} -> createTime) (\s@Volume' {} a -> s {createTime = a} :: Volume) Prelude.. Data._Time
+
+-- | Indicates whether the volume is encrypted.
+volume_encrypted :: Lens.Lens' Volume Prelude.Bool
+volume_encrypted = Lens.lens (\Volume' {encrypted} -> encrypted) (\s@Volume' {} a -> s {encrypted = a} :: Volume)
+
+-- | The size of the volume, in GiBs.
+volume_size :: Lens.Lens' Volume Prelude.Int
+volume_size = Lens.lens (\Volume' {size} -> size) (\s@Volume' {} a -> s {size = a} :: Volume)
+
+-- | The snapshot from which the volume was created, if applicable.
+volume_snapshotId :: Lens.Lens' Volume Prelude.Text
+volume_snapshotId = Lens.lens (\Volume' {snapshotId} -> snapshotId) (\s@Volume' {} a -> s {snapshotId = a} :: Volume)
+
+-- | The volume state.
+volume_state :: Lens.Lens' Volume VolumeState
+volume_state = Lens.lens (\Volume' {state} -> state) (\s@Volume' {} a -> s {state = a} :: Volume)
+
+-- | The ID of the volume.
+volume_volumeId :: Lens.Lens' Volume Prelude.Text
+volume_volumeId = Lens.lens (\Volume' {volumeId} -> volumeId) (\s@Volume' {} a -> s {volumeId = a} :: Volume)
+
+-- | The volume type.
+volume_volumeType :: Lens.Lens' Volume VolumeType
+volume_volumeType = Lens.lens (\Volume' {volumeType} -> volumeType) (\s@Volume' {} a -> s {volumeType = a} :: Volume)
+
+instance Data.FromXML Volume where
+  parseXML x =
+    Volume'
+      Prelude.<$> ( x
+                      Data..@? "attachmentSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "fastRestored")
+      Prelude.<*> (x Data..@? "iops")
+      Prelude.<*> (x Data..@? "kmsKeyId")
+      Prelude.<*> (x Data..@? "multiAttachEnabled")
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "throughput")
+      Prelude.<*> (x Data..@ "availabilityZone")
+      Prelude.<*> (x Data..@ "createTime")
+      Prelude.<*> (x Data..@ "encrypted")
+      Prelude.<*> (x Data..@ "size")
+      Prelude.<*> (x Data..@ "snapshotId")
+      Prelude.<*> (x Data..@ "status")
+      Prelude.<*> (x Data..@ "volumeId")
+      Prelude.<*> (x Data..@ "volumeType")
+
+instance Prelude.Hashable Volume where
+  hashWithSalt _salt Volume' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachments
+      `Prelude.hashWithSalt` fastRestored
+      `Prelude.hashWithSalt` iops
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` multiAttachEnabled
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` throughput
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` createTime
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` size
+      `Prelude.hashWithSalt` snapshotId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` volumeId
+      `Prelude.hashWithSalt` volumeType
+
+instance Prelude.NFData Volume where
+  rnf Volume' {..} =
+    Prelude.rnf attachments
+      `Prelude.seq` Prelude.rnf fastRestored
+      `Prelude.seq` Prelude.rnf iops
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf multiAttachEnabled
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf throughput
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf createTime
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf size
+      `Prelude.seq` Prelude.rnf snapshotId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf volumeId
+      `Prelude.seq` Prelude.rnf volumeType
diff --git a/gen/Amazonka/EC2/Types/VolumeAttachment.hs b/gen/Amazonka/EC2/Types/VolumeAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeAttachment.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeAttachmentState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes volume attachment details.
+--
+-- /See:/ 'newVolumeAttachment' smart constructor.
+data VolumeAttachment = VolumeAttachment'
+  { -- | The time stamp when the attachment initiated.
+    attachTime :: Prelude.Maybe Data.ISO8601,
+    -- | Indicates whether the EBS volume is deleted on instance termination.
+    deleteOnTermination :: Prelude.Maybe Prelude.Bool,
+    -- | The device name.
+    device :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The attachment state of the volume.
+    state :: Prelude.Maybe VolumeAttachmentState,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attachTime', 'volumeAttachment_attachTime' - The time stamp when the attachment initiated.
+--
+-- 'deleteOnTermination', 'volumeAttachment_deleteOnTermination' - Indicates whether the EBS volume is deleted on instance termination.
+--
+-- 'device', 'volumeAttachment_device' - The device name.
+--
+-- 'instanceId', 'volumeAttachment_instanceId' - The ID of the instance.
+--
+-- 'state', 'volumeAttachment_state' - The attachment state of the volume.
+--
+-- 'volumeId', 'volumeAttachment_volumeId' - The ID of the volume.
+newVolumeAttachment ::
+  VolumeAttachment
+newVolumeAttachment =
+  VolumeAttachment'
+    { attachTime = Prelude.Nothing,
+      deleteOnTermination = Prelude.Nothing,
+      device = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      state = Prelude.Nothing,
+      volumeId = Prelude.Nothing
+    }
+
+-- | The time stamp when the attachment initiated.
+volumeAttachment_attachTime :: Lens.Lens' VolumeAttachment (Prelude.Maybe Prelude.UTCTime)
+volumeAttachment_attachTime = Lens.lens (\VolumeAttachment' {attachTime} -> attachTime) (\s@VolumeAttachment' {} a -> s {attachTime = a} :: VolumeAttachment) Prelude.. Lens.mapping Data._Time
+
+-- | Indicates whether the EBS volume is deleted on instance termination.
+volumeAttachment_deleteOnTermination :: Lens.Lens' VolumeAttachment (Prelude.Maybe Prelude.Bool)
+volumeAttachment_deleteOnTermination = Lens.lens (\VolumeAttachment' {deleteOnTermination} -> deleteOnTermination) (\s@VolumeAttachment' {} a -> s {deleteOnTermination = a} :: VolumeAttachment)
+
+-- | The device name.
+volumeAttachment_device :: Lens.Lens' VolumeAttachment (Prelude.Maybe Prelude.Text)
+volumeAttachment_device = Lens.lens (\VolumeAttachment' {device} -> device) (\s@VolumeAttachment' {} a -> s {device = a} :: VolumeAttachment)
+
+-- | The ID of the instance.
+volumeAttachment_instanceId :: Lens.Lens' VolumeAttachment (Prelude.Maybe Prelude.Text)
+volumeAttachment_instanceId = Lens.lens (\VolumeAttachment' {instanceId} -> instanceId) (\s@VolumeAttachment' {} a -> s {instanceId = a} :: VolumeAttachment)
+
+-- | The attachment state of the volume.
+volumeAttachment_state :: Lens.Lens' VolumeAttachment (Prelude.Maybe VolumeAttachmentState)
+volumeAttachment_state = Lens.lens (\VolumeAttachment' {state} -> state) (\s@VolumeAttachment' {} a -> s {state = a} :: VolumeAttachment)
+
+-- | The ID of the volume.
+volumeAttachment_volumeId :: Lens.Lens' VolumeAttachment (Prelude.Maybe Prelude.Text)
+volumeAttachment_volumeId = Lens.lens (\VolumeAttachment' {volumeId} -> volumeId) (\s@VolumeAttachment' {} a -> s {volumeId = a} :: VolumeAttachment)
+
+instance Data.FromXML VolumeAttachment where
+  parseXML x =
+    VolumeAttachment'
+      Prelude.<$> (x Data..@? "attachTime")
+      Prelude.<*> (x Data..@? "deleteOnTermination")
+      Prelude.<*> (x Data..@? "device")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> (x Data..@? "volumeId")
+
+instance Prelude.Hashable VolumeAttachment where
+  hashWithSalt _salt VolumeAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` attachTime
+      `Prelude.hashWithSalt` deleteOnTermination
+      `Prelude.hashWithSalt` device
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData VolumeAttachment where
+  rnf VolumeAttachment' {..} =
+    Prelude.rnf attachTime
+      `Prelude.seq` Prelude.rnf deleteOnTermination
+      `Prelude.seq` Prelude.rnf device
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf volumeId
diff --git a/gen/Amazonka/EC2/Types/VolumeAttachmentState.hs b/gen/Amazonka/EC2/Types/VolumeAttachmentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeAttachmentState.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeAttachmentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeAttachmentState
+  ( VolumeAttachmentState
+      ( ..,
+        VolumeAttachmentState_Attached,
+        VolumeAttachmentState_Attaching,
+        VolumeAttachmentState_Busy,
+        VolumeAttachmentState_Detached,
+        VolumeAttachmentState_Detaching
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeAttachmentState = VolumeAttachmentState'
+  { fromVolumeAttachmentState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeAttachmentState_Attached :: VolumeAttachmentState
+pattern VolumeAttachmentState_Attached = VolumeAttachmentState' "attached"
+
+pattern VolumeAttachmentState_Attaching :: VolumeAttachmentState
+pattern VolumeAttachmentState_Attaching = VolumeAttachmentState' "attaching"
+
+pattern VolumeAttachmentState_Busy :: VolumeAttachmentState
+pattern VolumeAttachmentState_Busy = VolumeAttachmentState' "busy"
+
+pattern VolumeAttachmentState_Detached :: VolumeAttachmentState
+pattern VolumeAttachmentState_Detached = VolumeAttachmentState' "detached"
+
+pattern VolumeAttachmentState_Detaching :: VolumeAttachmentState
+pattern VolumeAttachmentState_Detaching = VolumeAttachmentState' "detaching"
+
+{-# COMPLETE
+  VolumeAttachmentState_Attached,
+  VolumeAttachmentState_Attaching,
+  VolumeAttachmentState_Busy,
+  VolumeAttachmentState_Detached,
+  VolumeAttachmentState_Detaching,
+  VolumeAttachmentState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VolumeAttributeName.hs b/gen/Amazonka/EC2/Types/VolumeAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeAttributeName.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeAttributeName
+  ( VolumeAttributeName
+      ( ..,
+        VolumeAttributeName_AutoEnableIO,
+        VolumeAttributeName_ProductCodes
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeAttributeName = VolumeAttributeName'
+  { fromVolumeAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeAttributeName_AutoEnableIO :: VolumeAttributeName
+pattern VolumeAttributeName_AutoEnableIO = VolumeAttributeName' "autoEnableIO"
+
+pattern VolumeAttributeName_ProductCodes :: VolumeAttributeName
+pattern VolumeAttributeName_ProductCodes = VolumeAttributeName' "productCodes"
+
+{-# COMPLETE
+  VolumeAttributeName_AutoEnableIO,
+  VolumeAttributeName_ProductCodes,
+  VolumeAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VolumeDetail.hs b/gen/Amazonka/EC2/Types/VolumeDetail.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeDetail.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeDetail
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeDetail where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an EBS volume.
+--
+-- /See:/ 'newVolumeDetail' smart constructor.
+data VolumeDetail = VolumeDetail'
+  { -- | The size of the volume, in GiB.
+    size :: Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeDetail' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'size', 'volumeDetail_size' - The size of the volume, in GiB.
+newVolumeDetail ::
+  -- | 'size'
+  Prelude.Integer ->
+  VolumeDetail
+newVolumeDetail pSize_ = VolumeDetail' {size = pSize_}
+
+-- | The size of the volume, in GiB.
+volumeDetail_size :: Lens.Lens' VolumeDetail Prelude.Integer
+volumeDetail_size = Lens.lens (\VolumeDetail' {size} -> size) (\s@VolumeDetail' {} a -> s {size = a} :: VolumeDetail)
+
+instance Prelude.Hashable VolumeDetail where
+  hashWithSalt _salt VolumeDetail' {..} =
+    _salt `Prelude.hashWithSalt` size
+
+instance Prelude.NFData VolumeDetail where
+  rnf VolumeDetail' {..} = Prelude.rnf size
+
+instance Data.ToQuery VolumeDetail where
+  toQuery VolumeDetail' {..} =
+    Prelude.mconcat ["Size" Data.=: size]
diff --git a/gen/Amazonka/EC2/Types/VolumeModification.hs b/gen/Amazonka/EC2/Types/VolumeModification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeModification.hs
@@ -0,0 +1,256 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeModification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeModification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeModificationState
+import Amazonka.EC2.Types.VolumeType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the modification status of an EBS volume.
+--
+-- If the volume has never been modified, some element values will be null.
+--
+-- /See:/ 'newVolumeModification' smart constructor.
+data VolumeModification = VolumeModification'
+  { -- | The modification completion or failure time.
+    endTime :: Prelude.Maybe Data.ISO8601,
+    -- | The current modification state. The modification state is null for
+    -- unmodified volumes.
+    modificationState :: Prelude.Maybe VolumeModificationState,
+    -- | The original IOPS rate of the volume.
+    originalIops :: Prelude.Maybe Prelude.Int,
+    -- | The original setting for Amazon EBS Multi-Attach.
+    originalMultiAttachEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The original size of the volume, in GiB.
+    originalSize :: Prelude.Maybe Prelude.Int,
+    -- | The original throughput of the volume, in MiB\/s.
+    originalThroughput :: Prelude.Maybe Prelude.Int,
+    -- | The original EBS volume type of the volume.
+    originalVolumeType :: Prelude.Maybe VolumeType,
+    -- | The modification progress, from 0 to 100 percent complete.
+    progress :: Prelude.Maybe Prelude.Integer,
+    -- | The modification start time.
+    startTime :: Prelude.Maybe Data.ISO8601,
+    -- | A status message about the modification progress or failure.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The target IOPS rate of the volume.
+    targetIops :: Prelude.Maybe Prelude.Int,
+    -- | The target setting for Amazon EBS Multi-Attach.
+    targetMultiAttachEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | The target size of the volume, in GiB.
+    targetSize :: Prelude.Maybe Prelude.Int,
+    -- | The target throughput of the volume, in MiB\/s.
+    targetThroughput :: Prelude.Maybe Prelude.Int,
+    -- | The target EBS volume type of the volume.
+    targetVolumeType :: Prelude.Maybe VolumeType,
+    -- | The ID of the volume.
+    volumeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeModification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'endTime', 'volumeModification_endTime' - The modification completion or failure time.
+--
+-- 'modificationState', 'volumeModification_modificationState' - The current modification state. The modification state is null for
+-- unmodified volumes.
+--
+-- 'originalIops', 'volumeModification_originalIops' - The original IOPS rate of the volume.
+--
+-- 'originalMultiAttachEnabled', 'volumeModification_originalMultiAttachEnabled' - The original setting for Amazon EBS Multi-Attach.
+--
+-- 'originalSize', 'volumeModification_originalSize' - The original size of the volume, in GiB.
+--
+-- 'originalThroughput', 'volumeModification_originalThroughput' - The original throughput of the volume, in MiB\/s.
+--
+-- 'originalVolumeType', 'volumeModification_originalVolumeType' - The original EBS volume type of the volume.
+--
+-- 'progress', 'volumeModification_progress' - The modification progress, from 0 to 100 percent complete.
+--
+-- 'startTime', 'volumeModification_startTime' - The modification start time.
+--
+-- 'statusMessage', 'volumeModification_statusMessage' - A status message about the modification progress or failure.
+--
+-- 'targetIops', 'volumeModification_targetIops' - The target IOPS rate of the volume.
+--
+-- 'targetMultiAttachEnabled', 'volumeModification_targetMultiAttachEnabled' - The target setting for Amazon EBS Multi-Attach.
+--
+-- 'targetSize', 'volumeModification_targetSize' - The target size of the volume, in GiB.
+--
+-- 'targetThroughput', 'volumeModification_targetThroughput' - The target throughput of the volume, in MiB\/s.
+--
+-- 'targetVolumeType', 'volumeModification_targetVolumeType' - The target EBS volume type of the volume.
+--
+-- 'volumeId', 'volumeModification_volumeId' - The ID of the volume.
+newVolumeModification ::
+  VolumeModification
+newVolumeModification =
+  VolumeModification'
+    { endTime = Prelude.Nothing,
+      modificationState = Prelude.Nothing,
+      originalIops = Prelude.Nothing,
+      originalMultiAttachEnabled = Prelude.Nothing,
+      originalSize = Prelude.Nothing,
+      originalThroughput = Prelude.Nothing,
+      originalVolumeType = Prelude.Nothing,
+      progress = Prelude.Nothing,
+      startTime = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      targetIops = Prelude.Nothing,
+      targetMultiAttachEnabled = Prelude.Nothing,
+      targetSize = Prelude.Nothing,
+      targetThroughput = Prelude.Nothing,
+      targetVolumeType = Prelude.Nothing,
+      volumeId = Prelude.Nothing
+    }
+
+-- | The modification completion or failure time.
+volumeModification_endTime :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.UTCTime)
+volumeModification_endTime = Lens.lens (\VolumeModification' {endTime} -> endTime) (\s@VolumeModification' {} a -> s {endTime = a} :: VolumeModification) Prelude.. Lens.mapping Data._Time
+
+-- | The current modification state. The modification state is null for
+-- unmodified volumes.
+volumeModification_modificationState :: Lens.Lens' VolumeModification (Prelude.Maybe VolumeModificationState)
+volumeModification_modificationState = Lens.lens (\VolumeModification' {modificationState} -> modificationState) (\s@VolumeModification' {} a -> s {modificationState = a} :: VolumeModification)
+
+-- | The original IOPS rate of the volume.
+volumeModification_originalIops :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Int)
+volumeModification_originalIops = Lens.lens (\VolumeModification' {originalIops} -> originalIops) (\s@VolumeModification' {} a -> s {originalIops = a} :: VolumeModification)
+
+-- | The original setting for Amazon EBS Multi-Attach.
+volumeModification_originalMultiAttachEnabled :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Bool)
+volumeModification_originalMultiAttachEnabled = Lens.lens (\VolumeModification' {originalMultiAttachEnabled} -> originalMultiAttachEnabled) (\s@VolumeModification' {} a -> s {originalMultiAttachEnabled = a} :: VolumeModification)
+
+-- | The original size of the volume, in GiB.
+volumeModification_originalSize :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Int)
+volumeModification_originalSize = Lens.lens (\VolumeModification' {originalSize} -> originalSize) (\s@VolumeModification' {} a -> s {originalSize = a} :: VolumeModification)
+
+-- | The original throughput of the volume, in MiB\/s.
+volumeModification_originalThroughput :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Int)
+volumeModification_originalThroughput = Lens.lens (\VolumeModification' {originalThroughput} -> originalThroughput) (\s@VolumeModification' {} a -> s {originalThroughput = a} :: VolumeModification)
+
+-- | The original EBS volume type of the volume.
+volumeModification_originalVolumeType :: Lens.Lens' VolumeModification (Prelude.Maybe VolumeType)
+volumeModification_originalVolumeType = Lens.lens (\VolumeModification' {originalVolumeType} -> originalVolumeType) (\s@VolumeModification' {} a -> s {originalVolumeType = a} :: VolumeModification)
+
+-- | The modification progress, from 0 to 100 percent complete.
+volumeModification_progress :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Integer)
+volumeModification_progress = Lens.lens (\VolumeModification' {progress} -> progress) (\s@VolumeModification' {} a -> s {progress = a} :: VolumeModification)
+
+-- | The modification start time.
+volumeModification_startTime :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.UTCTime)
+volumeModification_startTime = Lens.lens (\VolumeModification' {startTime} -> startTime) (\s@VolumeModification' {} a -> s {startTime = a} :: VolumeModification) Prelude.. Lens.mapping Data._Time
+
+-- | A status message about the modification progress or failure.
+volumeModification_statusMessage :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Text)
+volumeModification_statusMessage = Lens.lens (\VolumeModification' {statusMessage} -> statusMessage) (\s@VolumeModification' {} a -> s {statusMessage = a} :: VolumeModification)
+
+-- | The target IOPS rate of the volume.
+volumeModification_targetIops :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Int)
+volumeModification_targetIops = Lens.lens (\VolumeModification' {targetIops} -> targetIops) (\s@VolumeModification' {} a -> s {targetIops = a} :: VolumeModification)
+
+-- | The target setting for Amazon EBS Multi-Attach.
+volumeModification_targetMultiAttachEnabled :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Bool)
+volumeModification_targetMultiAttachEnabled = Lens.lens (\VolumeModification' {targetMultiAttachEnabled} -> targetMultiAttachEnabled) (\s@VolumeModification' {} a -> s {targetMultiAttachEnabled = a} :: VolumeModification)
+
+-- | The target size of the volume, in GiB.
+volumeModification_targetSize :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Int)
+volumeModification_targetSize = Lens.lens (\VolumeModification' {targetSize} -> targetSize) (\s@VolumeModification' {} a -> s {targetSize = a} :: VolumeModification)
+
+-- | The target throughput of the volume, in MiB\/s.
+volumeModification_targetThroughput :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Int)
+volumeModification_targetThroughput = Lens.lens (\VolumeModification' {targetThroughput} -> targetThroughput) (\s@VolumeModification' {} a -> s {targetThroughput = a} :: VolumeModification)
+
+-- | The target EBS volume type of the volume.
+volumeModification_targetVolumeType :: Lens.Lens' VolumeModification (Prelude.Maybe VolumeType)
+volumeModification_targetVolumeType = Lens.lens (\VolumeModification' {targetVolumeType} -> targetVolumeType) (\s@VolumeModification' {} a -> s {targetVolumeType = a} :: VolumeModification)
+
+-- | The ID of the volume.
+volumeModification_volumeId :: Lens.Lens' VolumeModification (Prelude.Maybe Prelude.Text)
+volumeModification_volumeId = Lens.lens (\VolumeModification' {volumeId} -> volumeId) (\s@VolumeModification' {} a -> s {volumeId = a} :: VolumeModification)
+
+instance Data.FromXML VolumeModification where
+  parseXML x =
+    VolumeModification'
+      Prelude.<$> (x Data..@? "endTime")
+      Prelude.<*> (x Data..@? "modificationState")
+      Prelude.<*> (x Data..@? "originalIops")
+      Prelude.<*> (x Data..@? "originalMultiAttachEnabled")
+      Prelude.<*> (x Data..@? "originalSize")
+      Prelude.<*> (x Data..@? "originalThroughput")
+      Prelude.<*> (x Data..@? "originalVolumeType")
+      Prelude.<*> (x Data..@? "progress")
+      Prelude.<*> (x Data..@? "startTime")
+      Prelude.<*> (x Data..@? "statusMessage")
+      Prelude.<*> (x Data..@? "targetIops")
+      Prelude.<*> (x Data..@? "targetMultiAttachEnabled")
+      Prelude.<*> (x Data..@? "targetSize")
+      Prelude.<*> (x Data..@? "targetThroughput")
+      Prelude.<*> (x Data..@? "targetVolumeType")
+      Prelude.<*> (x Data..@? "volumeId")
+
+instance Prelude.Hashable VolumeModification where
+  hashWithSalt _salt VolumeModification' {..} =
+    _salt
+      `Prelude.hashWithSalt` endTime
+      `Prelude.hashWithSalt` modificationState
+      `Prelude.hashWithSalt` originalIops
+      `Prelude.hashWithSalt` originalMultiAttachEnabled
+      `Prelude.hashWithSalt` originalSize
+      `Prelude.hashWithSalt` originalThroughput
+      `Prelude.hashWithSalt` originalVolumeType
+      `Prelude.hashWithSalt` progress
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` targetIops
+      `Prelude.hashWithSalt` targetMultiAttachEnabled
+      `Prelude.hashWithSalt` targetSize
+      `Prelude.hashWithSalt` targetThroughput
+      `Prelude.hashWithSalt` targetVolumeType
+      `Prelude.hashWithSalt` volumeId
+
+instance Prelude.NFData VolumeModification where
+  rnf VolumeModification' {..} =
+    Prelude.rnf endTime
+      `Prelude.seq` Prelude.rnf modificationState
+      `Prelude.seq` Prelude.rnf originalIops
+      `Prelude.seq` Prelude.rnf originalMultiAttachEnabled
+      `Prelude.seq` Prelude.rnf originalSize
+      `Prelude.seq` Prelude.rnf originalThroughput
+      `Prelude.seq` Prelude.rnf originalVolumeType
+      `Prelude.seq` Prelude.rnf progress
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf targetIops
+      `Prelude.seq` Prelude.rnf targetMultiAttachEnabled
+      `Prelude.seq` Prelude.rnf targetSize
+      `Prelude.seq` Prelude.rnf targetThroughput
+      `Prelude.seq` Prelude.rnf targetVolumeType
+      `Prelude.seq` Prelude.rnf volumeId
diff --git a/gen/Amazonka/EC2/Types/VolumeModificationState.hs b/gen/Amazonka/EC2/Types/VolumeModificationState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeModificationState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeModificationState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeModificationState
+  ( VolumeModificationState
+      ( ..,
+        VolumeModificationState_Completed,
+        VolumeModificationState_Failed,
+        VolumeModificationState_Modifying,
+        VolumeModificationState_Optimizing
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeModificationState = VolumeModificationState'
+  { fromVolumeModificationState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeModificationState_Completed :: VolumeModificationState
+pattern VolumeModificationState_Completed = VolumeModificationState' "completed"
+
+pattern VolumeModificationState_Failed :: VolumeModificationState
+pattern VolumeModificationState_Failed = VolumeModificationState' "failed"
+
+pattern VolumeModificationState_Modifying :: VolumeModificationState
+pattern VolumeModificationState_Modifying = VolumeModificationState' "modifying"
+
+pattern VolumeModificationState_Optimizing :: VolumeModificationState
+pattern VolumeModificationState_Optimizing = VolumeModificationState' "optimizing"
+
+{-# COMPLETE
+  VolumeModificationState_Completed,
+  VolumeModificationState_Failed,
+  VolumeModificationState_Modifying,
+  VolumeModificationState_Optimizing,
+  VolumeModificationState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VolumeState.hs b/gen/Amazonka/EC2/Types/VolumeState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeState.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeState
+  ( VolumeState
+      ( ..,
+        VolumeState_Available,
+        VolumeState_Creating,
+        VolumeState_Deleted,
+        VolumeState_Deleting,
+        VolumeState_Error,
+        VolumeState_In_use
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeState = VolumeState'
+  { fromVolumeState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeState_Available :: VolumeState
+pattern VolumeState_Available = VolumeState' "available"
+
+pattern VolumeState_Creating :: VolumeState
+pattern VolumeState_Creating = VolumeState' "creating"
+
+pattern VolumeState_Deleted :: VolumeState
+pattern VolumeState_Deleted = VolumeState' "deleted"
+
+pattern VolumeState_Deleting :: VolumeState
+pattern VolumeState_Deleting = VolumeState' "deleting"
+
+pattern VolumeState_Error :: VolumeState
+pattern VolumeState_Error = VolumeState' "error"
+
+pattern VolumeState_In_use :: VolumeState
+pattern VolumeState_In_use = VolumeState' "in-use"
+
+{-# COMPLETE
+  VolumeState_Available,
+  VolumeState_Creating,
+  VolumeState_Deleted,
+  VolumeState_Deleting,
+  VolumeState_Error,
+  VolumeState_In_use,
+  VolumeState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusAction.hs b/gen/Amazonka/EC2/Types/VolumeStatusAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusAction.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusAction where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a volume status operation code.
+--
+-- /See:/ 'newVolumeStatusAction' smart constructor.
+data VolumeStatusAction = VolumeStatusAction'
+  { -- | The code identifying the operation, for example, @enable-volume-io@.
+    code :: Prelude.Maybe Prelude.Text,
+    -- | A description of the operation.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the event associated with this operation.
+    eventId :: Prelude.Maybe Prelude.Text,
+    -- | The event type associated with this operation.
+    eventType :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatusAction' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'volumeStatusAction_code' - The code identifying the operation, for example, @enable-volume-io@.
+--
+-- 'description', 'volumeStatusAction_description' - A description of the operation.
+--
+-- 'eventId', 'volumeStatusAction_eventId' - The ID of the event associated with this operation.
+--
+-- 'eventType', 'volumeStatusAction_eventType' - The event type associated with this operation.
+newVolumeStatusAction ::
+  VolumeStatusAction
+newVolumeStatusAction =
+  VolumeStatusAction'
+    { code = Prelude.Nothing,
+      description = Prelude.Nothing,
+      eventId = Prelude.Nothing,
+      eventType = Prelude.Nothing
+    }
+
+-- | The code identifying the operation, for example, @enable-volume-io@.
+volumeStatusAction_code :: Lens.Lens' VolumeStatusAction (Prelude.Maybe Prelude.Text)
+volumeStatusAction_code = Lens.lens (\VolumeStatusAction' {code} -> code) (\s@VolumeStatusAction' {} a -> s {code = a} :: VolumeStatusAction)
+
+-- | A description of the operation.
+volumeStatusAction_description :: Lens.Lens' VolumeStatusAction (Prelude.Maybe Prelude.Text)
+volumeStatusAction_description = Lens.lens (\VolumeStatusAction' {description} -> description) (\s@VolumeStatusAction' {} a -> s {description = a} :: VolumeStatusAction)
+
+-- | The ID of the event associated with this operation.
+volumeStatusAction_eventId :: Lens.Lens' VolumeStatusAction (Prelude.Maybe Prelude.Text)
+volumeStatusAction_eventId = Lens.lens (\VolumeStatusAction' {eventId} -> eventId) (\s@VolumeStatusAction' {} a -> s {eventId = a} :: VolumeStatusAction)
+
+-- | The event type associated with this operation.
+volumeStatusAction_eventType :: Lens.Lens' VolumeStatusAction (Prelude.Maybe Prelude.Text)
+volumeStatusAction_eventType = Lens.lens (\VolumeStatusAction' {eventType} -> eventType) (\s@VolumeStatusAction' {} a -> s {eventType = a} :: VolumeStatusAction)
+
+instance Data.FromXML VolumeStatusAction where
+  parseXML x =
+    VolumeStatusAction'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "eventId")
+      Prelude.<*> (x Data..@? "eventType")
+
+instance Prelude.Hashable VolumeStatusAction where
+  hashWithSalt _salt VolumeStatusAction' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventType
+
+instance Prelude.NFData VolumeStatusAction where
+  rnf VolumeStatusAction' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventType
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusAttachmentStatus.hs b/gen/Amazonka/EC2/Types/VolumeStatusAttachmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusAttachmentStatus.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusAttachmentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusAttachmentStatus where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Information about the instances to which the volume is attached.
+--
+-- /See:/ 'newVolumeStatusAttachmentStatus' smart constructor.
+data VolumeStatusAttachmentStatus = VolumeStatusAttachmentStatus'
+  { -- | The ID of the attached instance.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum IOPS supported by the attached instance.
+    ioPerformance :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatusAttachmentStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceId', 'volumeStatusAttachmentStatus_instanceId' - The ID of the attached instance.
+--
+-- 'ioPerformance', 'volumeStatusAttachmentStatus_ioPerformance' - The maximum IOPS supported by the attached instance.
+newVolumeStatusAttachmentStatus ::
+  VolumeStatusAttachmentStatus
+newVolumeStatusAttachmentStatus =
+  VolumeStatusAttachmentStatus'
+    { instanceId =
+        Prelude.Nothing,
+      ioPerformance = Prelude.Nothing
+    }
+
+-- | The ID of the attached instance.
+volumeStatusAttachmentStatus_instanceId :: Lens.Lens' VolumeStatusAttachmentStatus (Prelude.Maybe Prelude.Text)
+volumeStatusAttachmentStatus_instanceId = Lens.lens (\VolumeStatusAttachmentStatus' {instanceId} -> instanceId) (\s@VolumeStatusAttachmentStatus' {} a -> s {instanceId = a} :: VolumeStatusAttachmentStatus)
+
+-- | The maximum IOPS supported by the attached instance.
+volumeStatusAttachmentStatus_ioPerformance :: Lens.Lens' VolumeStatusAttachmentStatus (Prelude.Maybe Prelude.Text)
+volumeStatusAttachmentStatus_ioPerformance = Lens.lens (\VolumeStatusAttachmentStatus' {ioPerformance} -> ioPerformance) (\s@VolumeStatusAttachmentStatus' {} a -> s {ioPerformance = a} :: VolumeStatusAttachmentStatus)
+
+instance Data.FromXML VolumeStatusAttachmentStatus where
+  parseXML x =
+    VolumeStatusAttachmentStatus'
+      Prelude.<$> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "ioPerformance")
+
+instance
+  Prelude.Hashable
+    VolumeStatusAttachmentStatus
+  where
+  hashWithSalt _salt VolumeStatusAttachmentStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` ioPerformance
+
+instance Prelude.NFData VolumeStatusAttachmentStatus where
+  rnf VolumeStatusAttachmentStatus' {..} =
+    Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf ioPerformance
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusDetails.hs b/gen/Amazonka/EC2/Types/VolumeStatusDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusDetails.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusDetails where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeStatusName
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a volume status.
+--
+-- /See:/ 'newVolumeStatusDetails' smart constructor.
+data VolumeStatusDetails = VolumeStatusDetails'
+  { -- | The name of the volume status.
+    name :: Prelude.Maybe VolumeStatusName,
+    -- | The intended status of the volume status.
+    status :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatusDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'volumeStatusDetails_name' - The name of the volume status.
+--
+-- 'status', 'volumeStatusDetails_status' - The intended status of the volume status.
+newVolumeStatusDetails ::
+  VolumeStatusDetails
+newVolumeStatusDetails =
+  VolumeStatusDetails'
+    { name = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The name of the volume status.
+volumeStatusDetails_name :: Lens.Lens' VolumeStatusDetails (Prelude.Maybe VolumeStatusName)
+volumeStatusDetails_name = Lens.lens (\VolumeStatusDetails' {name} -> name) (\s@VolumeStatusDetails' {} a -> s {name = a} :: VolumeStatusDetails)
+
+-- | The intended status of the volume status.
+volumeStatusDetails_status :: Lens.Lens' VolumeStatusDetails (Prelude.Maybe Prelude.Text)
+volumeStatusDetails_status = Lens.lens (\VolumeStatusDetails' {status} -> status) (\s@VolumeStatusDetails' {} a -> s {status = a} :: VolumeStatusDetails)
+
+instance Data.FromXML VolumeStatusDetails where
+  parseXML x =
+    VolumeStatusDetails'
+      Prelude.<$> (x Data..@? "name")
+      Prelude.<*> (x Data..@? "status")
+
+instance Prelude.Hashable VolumeStatusDetails where
+  hashWithSalt _salt VolumeStatusDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData VolumeStatusDetails where
+  rnf VolumeStatusDetails' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusEvent.hs b/gen/Amazonka/EC2/Types/VolumeStatusEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusEvent.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusEvent where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a volume status event.
+--
+-- /See:/ 'newVolumeStatusEvent' smart constructor.
+data VolumeStatusEvent = VolumeStatusEvent'
+  { -- | A description of the event.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of this event.
+    eventId :: Prelude.Maybe Prelude.Text,
+    -- | The type of this event.
+    eventType :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the instance associated with the event.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The latest end time of the event.
+    notAfter :: Prelude.Maybe Data.ISO8601,
+    -- | The earliest start time of the event.
+    notBefore :: Prelude.Maybe Data.ISO8601
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatusEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'volumeStatusEvent_description' - A description of the event.
+--
+-- 'eventId', 'volumeStatusEvent_eventId' - The ID of this event.
+--
+-- 'eventType', 'volumeStatusEvent_eventType' - The type of this event.
+--
+-- 'instanceId', 'volumeStatusEvent_instanceId' - The ID of the instance associated with the event.
+--
+-- 'notAfter', 'volumeStatusEvent_notAfter' - The latest end time of the event.
+--
+-- 'notBefore', 'volumeStatusEvent_notBefore' - The earliest start time of the event.
+newVolumeStatusEvent ::
+  VolumeStatusEvent
+newVolumeStatusEvent =
+  VolumeStatusEvent'
+    { description = Prelude.Nothing,
+      eventId = Prelude.Nothing,
+      eventType = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      notAfter = Prelude.Nothing,
+      notBefore = Prelude.Nothing
+    }
+
+-- | A description of the event.
+volumeStatusEvent_description :: Lens.Lens' VolumeStatusEvent (Prelude.Maybe Prelude.Text)
+volumeStatusEvent_description = Lens.lens (\VolumeStatusEvent' {description} -> description) (\s@VolumeStatusEvent' {} a -> s {description = a} :: VolumeStatusEvent)
+
+-- | The ID of this event.
+volumeStatusEvent_eventId :: Lens.Lens' VolumeStatusEvent (Prelude.Maybe Prelude.Text)
+volumeStatusEvent_eventId = Lens.lens (\VolumeStatusEvent' {eventId} -> eventId) (\s@VolumeStatusEvent' {} a -> s {eventId = a} :: VolumeStatusEvent)
+
+-- | The type of this event.
+volumeStatusEvent_eventType :: Lens.Lens' VolumeStatusEvent (Prelude.Maybe Prelude.Text)
+volumeStatusEvent_eventType = Lens.lens (\VolumeStatusEvent' {eventType} -> eventType) (\s@VolumeStatusEvent' {} a -> s {eventType = a} :: VolumeStatusEvent)
+
+-- | The ID of the instance associated with the event.
+volumeStatusEvent_instanceId :: Lens.Lens' VolumeStatusEvent (Prelude.Maybe Prelude.Text)
+volumeStatusEvent_instanceId = Lens.lens (\VolumeStatusEvent' {instanceId} -> instanceId) (\s@VolumeStatusEvent' {} a -> s {instanceId = a} :: VolumeStatusEvent)
+
+-- | The latest end time of the event.
+volumeStatusEvent_notAfter :: Lens.Lens' VolumeStatusEvent (Prelude.Maybe Prelude.UTCTime)
+volumeStatusEvent_notAfter = Lens.lens (\VolumeStatusEvent' {notAfter} -> notAfter) (\s@VolumeStatusEvent' {} a -> s {notAfter = a} :: VolumeStatusEvent) Prelude.. Lens.mapping Data._Time
+
+-- | The earliest start time of the event.
+volumeStatusEvent_notBefore :: Lens.Lens' VolumeStatusEvent (Prelude.Maybe Prelude.UTCTime)
+volumeStatusEvent_notBefore = Lens.lens (\VolumeStatusEvent' {notBefore} -> notBefore) (\s@VolumeStatusEvent' {} a -> s {notBefore = a} :: VolumeStatusEvent) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromXML VolumeStatusEvent where
+  parseXML x =
+    VolumeStatusEvent'
+      Prelude.<$> (x Data..@? "description")
+      Prelude.<*> (x Data..@? "eventId")
+      Prelude.<*> (x Data..@? "eventType")
+      Prelude.<*> (x Data..@? "instanceId")
+      Prelude.<*> (x Data..@? "notAfter")
+      Prelude.<*> (x Data..@? "notBefore")
+
+instance Prelude.Hashable VolumeStatusEvent where
+  hashWithSalt _salt VolumeStatusEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` eventId
+      `Prelude.hashWithSalt` eventType
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` notAfter
+      `Prelude.hashWithSalt` notBefore
+
+instance Prelude.NFData VolumeStatusEvent where
+  rnf VolumeStatusEvent' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf eventId
+      `Prelude.seq` Prelude.rnf eventType
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf notAfter
+      `Prelude.seq` Prelude.rnf notBefore
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusInfo.hs b/gen/Amazonka/EC2/Types/VolumeStatusInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusInfo.hs
@@ -0,0 +1,87 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeStatusDetails
+import Amazonka.EC2.Types.VolumeStatusInfoStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of a volume.
+--
+-- /See:/ 'newVolumeStatusInfo' smart constructor.
+data VolumeStatusInfo = VolumeStatusInfo'
+  { -- | The details of the volume status.
+    details :: Prelude.Maybe [VolumeStatusDetails],
+    -- | The status of the volume.
+    status :: Prelude.Maybe VolumeStatusInfoStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatusInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'details', 'volumeStatusInfo_details' - The details of the volume status.
+--
+-- 'status', 'volumeStatusInfo_status' - The status of the volume.
+newVolumeStatusInfo ::
+  VolumeStatusInfo
+newVolumeStatusInfo =
+  VolumeStatusInfo'
+    { details = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The details of the volume status.
+volumeStatusInfo_details :: Lens.Lens' VolumeStatusInfo (Prelude.Maybe [VolumeStatusDetails])
+volumeStatusInfo_details = Lens.lens (\VolumeStatusInfo' {details} -> details) (\s@VolumeStatusInfo' {} a -> s {details = a} :: VolumeStatusInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The status of the volume.
+volumeStatusInfo_status :: Lens.Lens' VolumeStatusInfo (Prelude.Maybe VolumeStatusInfoStatus)
+volumeStatusInfo_status = Lens.lens (\VolumeStatusInfo' {status} -> status) (\s@VolumeStatusInfo' {} a -> s {status = a} :: VolumeStatusInfo)
+
+instance Data.FromXML VolumeStatusInfo where
+  parseXML x =
+    VolumeStatusInfo'
+      Prelude.<$> ( x
+                      Data..@? "details"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "status")
+
+instance Prelude.Hashable VolumeStatusInfo where
+  hashWithSalt _salt VolumeStatusInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` details
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData VolumeStatusInfo where
+  rnf VolumeStatusInfo' {..} =
+    Prelude.rnf details
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusInfoStatus.hs b/gen/Amazonka/EC2/Types/VolumeStatusInfoStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusInfoStatus.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusInfoStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusInfoStatus
+  ( VolumeStatusInfoStatus
+      ( ..,
+        VolumeStatusInfoStatus_Impaired,
+        VolumeStatusInfoStatus_Insufficient_data,
+        VolumeStatusInfoStatus_Ok
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeStatusInfoStatus = VolumeStatusInfoStatus'
+  { fromVolumeStatusInfoStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeStatusInfoStatus_Impaired :: VolumeStatusInfoStatus
+pattern VolumeStatusInfoStatus_Impaired = VolumeStatusInfoStatus' "impaired"
+
+pattern VolumeStatusInfoStatus_Insufficient_data :: VolumeStatusInfoStatus
+pattern VolumeStatusInfoStatus_Insufficient_data = VolumeStatusInfoStatus' "insufficient-data"
+
+pattern VolumeStatusInfoStatus_Ok :: VolumeStatusInfoStatus
+pattern VolumeStatusInfoStatus_Ok = VolumeStatusInfoStatus' "ok"
+
+{-# COMPLETE
+  VolumeStatusInfoStatus_Impaired,
+  VolumeStatusInfoStatus_Insufficient_data,
+  VolumeStatusInfoStatus_Ok,
+  VolumeStatusInfoStatus'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusItem.hs b/gen/Amazonka/EC2/Types/VolumeStatusItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusItem.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusItem
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusItem where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VolumeStatusAction
+import Amazonka.EC2.Types.VolumeStatusAttachmentStatus
+import Amazonka.EC2.Types.VolumeStatusEvent
+import Amazonka.EC2.Types.VolumeStatusInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the volume status.
+--
+-- /See:/ 'newVolumeStatusItem' smart constructor.
+data VolumeStatusItem = VolumeStatusItem'
+  { -- | The details of the operation.
+    actions :: Prelude.Maybe [VolumeStatusAction],
+    -- | Information about the instances to which the volume is attached.
+    attachmentStatuses :: Prelude.Maybe [VolumeStatusAttachmentStatus],
+    -- | The Availability Zone of the volume.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | A list of events associated with the volume.
+    events :: Prelude.Maybe [VolumeStatusEvent],
+    -- | The Amazon Resource Name (ARN) of the Outpost.
+    outpostArn :: Prelude.Maybe Prelude.Text,
+    -- | The volume ID.
+    volumeId :: Prelude.Maybe Prelude.Text,
+    -- | The volume status.
+    volumeStatus :: Prelude.Maybe VolumeStatusInfo
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VolumeStatusItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'actions', 'volumeStatusItem_actions' - The details of the operation.
+--
+-- 'attachmentStatuses', 'volumeStatusItem_attachmentStatuses' - Information about the instances to which the volume is attached.
+--
+-- 'availabilityZone', 'volumeStatusItem_availabilityZone' - The Availability Zone of the volume.
+--
+-- 'events', 'volumeStatusItem_events' - A list of events associated with the volume.
+--
+-- 'outpostArn', 'volumeStatusItem_outpostArn' - The Amazon Resource Name (ARN) of the Outpost.
+--
+-- 'volumeId', 'volumeStatusItem_volumeId' - The volume ID.
+--
+-- 'volumeStatus', 'volumeStatusItem_volumeStatus' - The volume status.
+newVolumeStatusItem ::
+  VolumeStatusItem
+newVolumeStatusItem =
+  VolumeStatusItem'
+    { actions = Prelude.Nothing,
+      attachmentStatuses = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      events = Prelude.Nothing,
+      outpostArn = Prelude.Nothing,
+      volumeId = Prelude.Nothing,
+      volumeStatus = Prelude.Nothing
+    }
+
+-- | The details of the operation.
+volumeStatusItem_actions :: Lens.Lens' VolumeStatusItem (Prelude.Maybe [VolumeStatusAction])
+volumeStatusItem_actions = Lens.lens (\VolumeStatusItem' {actions} -> actions) (\s@VolumeStatusItem' {} a -> s {actions = a} :: VolumeStatusItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the instances to which the volume is attached.
+volumeStatusItem_attachmentStatuses :: Lens.Lens' VolumeStatusItem (Prelude.Maybe [VolumeStatusAttachmentStatus])
+volumeStatusItem_attachmentStatuses = Lens.lens (\VolumeStatusItem' {attachmentStatuses} -> attachmentStatuses) (\s@VolumeStatusItem' {} a -> s {attachmentStatuses = a} :: VolumeStatusItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Availability Zone of the volume.
+volumeStatusItem_availabilityZone :: Lens.Lens' VolumeStatusItem (Prelude.Maybe Prelude.Text)
+volumeStatusItem_availabilityZone = Lens.lens (\VolumeStatusItem' {availabilityZone} -> availabilityZone) (\s@VolumeStatusItem' {} a -> s {availabilityZone = a} :: VolumeStatusItem)
+
+-- | A list of events associated with the volume.
+volumeStatusItem_events :: Lens.Lens' VolumeStatusItem (Prelude.Maybe [VolumeStatusEvent])
+volumeStatusItem_events = Lens.lens (\VolumeStatusItem' {events} -> events) (\s@VolumeStatusItem' {} a -> s {events = a} :: VolumeStatusItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of the Outpost.
+volumeStatusItem_outpostArn :: Lens.Lens' VolumeStatusItem (Prelude.Maybe Prelude.Text)
+volumeStatusItem_outpostArn = Lens.lens (\VolumeStatusItem' {outpostArn} -> outpostArn) (\s@VolumeStatusItem' {} a -> s {outpostArn = a} :: VolumeStatusItem)
+
+-- | The volume ID.
+volumeStatusItem_volumeId :: Lens.Lens' VolumeStatusItem (Prelude.Maybe Prelude.Text)
+volumeStatusItem_volumeId = Lens.lens (\VolumeStatusItem' {volumeId} -> volumeId) (\s@VolumeStatusItem' {} a -> s {volumeId = a} :: VolumeStatusItem)
+
+-- | The volume status.
+volumeStatusItem_volumeStatus :: Lens.Lens' VolumeStatusItem (Prelude.Maybe VolumeStatusInfo)
+volumeStatusItem_volumeStatus = Lens.lens (\VolumeStatusItem' {volumeStatus} -> volumeStatus) (\s@VolumeStatusItem' {} a -> s {volumeStatus = a} :: VolumeStatusItem)
+
+instance Data.FromXML VolumeStatusItem where
+  parseXML x =
+    VolumeStatusItem'
+      Prelude.<$> ( x
+                      Data..@? "actionsSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "attachmentStatuses"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> ( x
+                      Data..@? "eventsSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "outpostArn")
+      Prelude.<*> (x Data..@? "volumeId")
+      Prelude.<*> (x Data..@? "volumeStatus")
+
+instance Prelude.Hashable VolumeStatusItem where
+  hashWithSalt _salt VolumeStatusItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` actions
+      `Prelude.hashWithSalt` attachmentStatuses
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` outpostArn
+      `Prelude.hashWithSalt` volumeId
+      `Prelude.hashWithSalt` volumeStatus
+
+instance Prelude.NFData VolumeStatusItem where
+  rnf VolumeStatusItem' {..} =
+    Prelude.rnf actions
+      `Prelude.seq` Prelude.rnf attachmentStatuses
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf outpostArn
+      `Prelude.seq` Prelude.rnf volumeId
+      `Prelude.seq` Prelude.rnf volumeStatus
diff --git a/gen/Amazonka/EC2/Types/VolumeStatusName.hs b/gen/Amazonka/EC2/Types/VolumeStatusName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeStatusName.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeStatusName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeStatusName
+  ( VolumeStatusName
+      ( ..,
+        VolumeStatusName_Io_enabled,
+        VolumeStatusName_Io_performance
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeStatusName = VolumeStatusName'
+  { fromVolumeStatusName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeStatusName_Io_enabled :: VolumeStatusName
+pattern VolumeStatusName_Io_enabled = VolumeStatusName' "io-enabled"
+
+pattern VolumeStatusName_Io_performance :: VolumeStatusName
+pattern VolumeStatusName_Io_performance = VolumeStatusName' "io-performance"
+
+{-# COMPLETE
+  VolumeStatusName_Io_enabled,
+  VolumeStatusName_Io_performance,
+  VolumeStatusName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VolumeType.hs b/gen/Amazonka/EC2/Types/VolumeType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VolumeType.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VolumeType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VolumeType
+  ( VolumeType
+      ( ..,
+        VolumeType_Gp2,
+        VolumeType_Gp3,
+        VolumeType_Io1,
+        VolumeType_Io2,
+        VolumeType_Sc1,
+        VolumeType_St1,
+        VolumeType_Standard
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VolumeType = VolumeType'
+  { fromVolumeType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VolumeType_Gp2 :: VolumeType
+pattern VolumeType_Gp2 = VolumeType' "gp2"
+
+pattern VolumeType_Gp3 :: VolumeType
+pattern VolumeType_Gp3 = VolumeType' "gp3"
+
+pattern VolumeType_Io1 :: VolumeType
+pattern VolumeType_Io1 = VolumeType' "io1"
+
+pattern VolumeType_Io2 :: VolumeType
+pattern VolumeType_Io2 = VolumeType' "io2"
+
+pattern VolumeType_Sc1 :: VolumeType
+pattern VolumeType_Sc1 = VolumeType' "sc1"
+
+pattern VolumeType_St1 :: VolumeType
+pattern VolumeType_St1 = VolumeType' "st1"
+
+pattern VolumeType_Standard :: VolumeType
+pattern VolumeType_Standard = VolumeType' "standard"
+
+{-# COMPLETE
+  VolumeType_Gp2,
+  VolumeType_Gp3,
+  VolumeType_Io1,
+  VolumeType_Io2,
+  VolumeType_Sc1,
+  VolumeType_St1,
+  VolumeType_Standard,
+  VolumeType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/Vpc.hs b/gen/Amazonka/EC2/Types/Vpc.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/Vpc.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.Vpc
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.Vpc where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.Tenancy
+import Amazonka.EC2.Types.VpcCidrBlockAssociation
+import Amazonka.EC2.Types.VpcIpv6CidrBlockAssociation
+import Amazonka.EC2.Types.VpcState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC.
+--
+-- /See:/ 'newVpc' smart constructor.
+data Vpc = Vpc'
+  { -- | Information about the IPv4 CIDR blocks associated with the VPC.
+    cidrBlockAssociationSet :: Prelude.Maybe [VpcCidrBlockAssociation],
+    -- | Information about the IPv6 CIDR blocks associated with the VPC.
+    ipv6CidrBlockAssociationSet :: Prelude.Maybe [VpcIpv6CidrBlockAssociation],
+    -- | Indicates whether the VPC is the default VPC.
+    isDefault :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the Amazon Web Services account that owns the VPC.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Any tags assigned to the VPC.
+    tags :: Prelude.Maybe [Tag],
+    -- | The primary IPv4 CIDR block for the VPC.
+    cidrBlock :: Prelude.Text,
+    -- | The ID of the set of DHCP options you\'ve associated with the VPC.
+    dhcpOptionsId :: Prelude.Text,
+    -- | The allowed tenancy of instances launched into the VPC.
+    instanceTenancy :: Tenancy,
+    -- | The current state of the VPC.
+    state :: VpcState,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Vpc' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlockAssociationSet', 'vpc_cidrBlockAssociationSet' - Information about the IPv4 CIDR blocks associated with the VPC.
+--
+-- 'ipv6CidrBlockAssociationSet', 'vpc_ipv6CidrBlockAssociationSet' - Information about the IPv6 CIDR blocks associated with the VPC.
+--
+-- 'isDefault', 'vpc_isDefault' - Indicates whether the VPC is the default VPC.
+--
+-- 'ownerId', 'vpc_ownerId' - The ID of the Amazon Web Services account that owns the VPC.
+--
+-- 'tags', 'vpc_tags' - Any tags assigned to the VPC.
+--
+-- 'cidrBlock', 'vpc_cidrBlock' - The primary IPv4 CIDR block for the VPC.
+--
+-- 'dhcpOptionsId', 'vpc_dhcpOptionsId' - The ID of the set of DHCP options you\'ve associated with the VPC.
+--
+-- 'instanceTenancy', 'vpc_instanceTenancy' - The allowed tenancy of instances launched into the VPC.
+--
+-- 'state', 'vpc_state' - The current state of the VPC.
+--
+-- 'vpcId', 'vpc_vpcId' - The ID of the VPC.
+newVpc ::
+  -- | 'cidrBlock'
+  Prelude.Text ->
+  -- | 'dhcpOptionsId'
+  Prelude.Text ->
+  -- | 'instanceTenancy'
+  Tenancy ->
+  -- | 'state'
+  VpcState ->
+  -- | 'vpcId'
+  Prelude.Text ->
+  Vpc
+newVpc
+  pCidrBlock_
+  pDhcpOptionsId_
+  pInstanceTenancy_
+  pState_
+  pVpcId_ =
+    Vpc'
+      { cidrBlockAssociationSet = Prelude.Nothing,
+        ipv6CidrBlockAssociationSet = Prelude.Nothing,
+        isDefault = Prelude.Nothing,
+        ownerId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        cidrBlock = pCidrBlock_,
+        dhcpOptionsId = pDhcpOptionsId_,
+        instanceTenancy = pInstanceTenancy_,
+        state = pState_,
+        vpcId = pVpcId_
+      }
+
+-- | Information about the IPv4 CIDR blocks associated with the VPC.
+vpc_cidrBlockAssociationSet :: Lens.Lens' Vpc (Prelude.Maybe [VpcCidrBlockAssociation])
+vpc_cidrBlockAssociationSet = Lens.lens (\Vpc' {cidrBlockAssociationSet} -> cidrBlockAssociationSet) (\s@Vpc' {} a -> s {cidrBlockAssociationSet = a} :: Vpc) Prelude.. Lens.mapping Lens.coerced
+
+-- | Information about the IPv6 CIDR blocks associated with the VPC.
+vpc_ipv6CidrBlockAssociationSet :: Lens.Lens' Vpc (Prelude.Maybe [VpcIpv6CidrBlockAssociation])
+vpc_ipv6CidrBlockAssociationSet = Lens.lens (\Vpc' {ipv6CidrBlockAssociationSet} -> ipv6CidrBlockAssociationSet) (\s@Vpc' {} a -> s {ipv6CidrBlockAssociationSet = a} :: Vpc) Prelude.. Lens.mapping Lens.coerced
+
+-- | Indicates whether the VPC is the default VPC.
+vpc_isDefault :: Lens.Lens' Vpc (Prelude.Maybe Prelude.Bool)
+vpc_isDefault = Lens.lens (\Vpc' {isDefault} -> isDefault) (\s@Vpc' {} a -> s {isDefault = a} :: Vpc)
+
+-- | The ID of the Amazon Web Services account that owns the VPC.
+vpc_ownerId :: Lens.Lens' Vpc (Prelude.Maybe Prelude.Text)
+vpc_ownerId = Lens.lens (\Vpc' {ownerId} -> ownerId) (\s@Vpc' {} a -> s {ownerId = a} :: Vpc)
+
+-- | Any tags assigned to the VPC.
+vpc_tags :: Lens.Lens' Vpc (Prelude.Maybe [Tag])
+vpc_tags = Lens.lens (\Vpc' {tags} -> tags) (\s@Vpc' {} a -> s {tags = a} :: Vpc) Prelude.. Lens.mapping Lens.coerced
+
+-- | The primary IPv4 CIDR block for the VPC.
+vpc_cidrBlock :: Lens.Lens' Vpc Prelude.Text
+vpc_cidrBlock = Lens.lens (\Vpc' {cidrBlock} -> cidrBlock) (\s@Vpc' {} a -> s {cidrBlock = a} :: Vpc)
+
+-- | The ID of the set of DHCP options you\'ve associated with the VPC.
+vpc_dhcpOptionsId :: Lens.Lens' Vpc Prelude.Text
+vpc_dhcpOptionsId = Lens.lens (\Vpc' {dhcpOptionsId} -> dhcpOptionsId) (\s@Vpc' {} a -> s {dhcpOptionsId = a} :: Vpc)
+
+-- | The allowed tenancy of instances launched into the VPC.
+vpc_instanceTenancy :: Lens.Lens' Vpc Tenancy
+vpc_instanceTenancy = Lens.lens (\Vpc' {instanceTenancy} -> instanceTenancy) (\s@Vpc' {} a -> s {instanceTenancy = a} :: Vpc)
+
+-- | The current state of the VPC.
+vpc_state :: Lens.Lens' Vpc VpcState
+vpc_state = Lens.lens (\Vpc' {state} -> state) (\s@Vpc' {} a -> s {state = a} :: Vpc)
+
+-- | The ID of the VPC.
+vpc_vpcId :: Lens.Lens' Vpc Prelude.Text
+vpc_vpcId = Lens.lens (\Vpc' {vpcId} -> vpcId) (\s@Vpc' {} a -> s {vpcId = a} :: Vpc)
+
+instance Data.FromXML Vpc where
+  parseXML x =
+    Vpc'
+      Prelude.<$> ( x
+                      Data..@? "cidrBlockAssociationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ipv6CidrBlockAssociationSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "isDefault")
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@ "cidrBlock")
+      Prelude.<*> (x Data..@ "dhcpOptionsId")
+      Prelude.<*> (x Data..@ "instanceTenancy")
+      Prelude.<*> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "vpcId")
+
+instance Prelude.Hashable Vpc where
+  hashWithSalt _salt Vpc' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrBlockAssociationSet
+      `Prelude.hashWithSalt` ipv6CidrBlockAssociationSet
+      `Prelude.hashWithSalt` isDefault
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` dhcpOptionsId
+      `Prelude.hashWithSalt` instanceTenancy
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData Vpc where
+  rnf Vpc' {..} =
+    Prelude.rnf cidrBlockAssociationSet
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockAssociationSet
+      `Prelude.seq` Prelude.rnf isDefault
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf dhcpOptionsId
+      `Prelude.seq` Prelude.rnf instanceTenancy
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/VpcAttachment.hs b/gen/Amazonka/EC2/Types/VpcAttachment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcAttachment.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcAttachment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcAttachment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.AttachmentStatus
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an attachment between a virtual private gateway and a VPC.
+--
+-- /See:/ 'newVpcAttachment' smart constructor.
+data VpcAttachment = VpcAttachment'
+  { -- | The current state of the attachment.
+    state :: Prelude.Maybe AttachmentStatus,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcAttachment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'vpcAttachment_state' - The current state of the attachment.
+--
+-- 'vpcId', 'vpcAttachment_vpcId' - The ID of the VPC.
+newVpcAttachment ::
+  VpcAttachment
+newVpcAttachment =
+  VpcAttachment'
+    { state = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The current state of the attachment.
+vpcAttachment_state :: Lens.Lens' VpcAttachment (Prelude.Maybe AttachmentStatus)
+vpcAttachment_state = Lens.lens (\VpcAttachment' {state} -> state) (\s@VpcAttachment' {} a -> s {state = a} :: VpcAttachment)
+
+-- | The ID of the VPC.
+vpcAttachment_vpcId :: Lens.Lens' VpcAttachment (Prelude.Maybe Prelude.Text)
+vpcAttachment_vpcId = Lens.lens (\VpcAttachment' {vpcId} -> vpcId) (\s@VpcAttachment' {} a -> s {vpcId = a} :: VpcAttachment)
+
+instance Data.FromXML VpcAttachment where
+  parseXML x =
+    VpcAttachment'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable VpcAttachment where
+  hashWithSalt _salt VpcAttachment' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VpcAttachment where
+  rnf VpcAttachment' {..} =
+    Prelude.rnf state `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/VpcAttributeName.hs b/gen/Amazonka/EC2/Types/VpcAttributeName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcAttributeName.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcAttributeName
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcAttributeName
+  ( VpcAttributeName
+      ( ..,
+        VpcAttributeName_EnableDnsHostnames,
+        VpcAttributeName_EnableDnsSupport,
+        VpcAttributeName_EnableNetworkAddressUsageMetrics
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcAttributeName = VpcAttributeName'
+  { fromVpcAttributeName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcAttributeName_EnableDnsHostnames :: VpcAttributeName
+pattern VpcAttributeName_EnableDnsHostnames = VpcAttributeName' "enableDnsHostnames"
+
+pattern VpcAttributeName_EnableDnsSupport :: VpcAttributeName
+pattern VpcAttributeName_EnableDnsSupport = VpcAttributeName' "enableDnsSupport"
+
+pattern VpcAttributeName_EnableNetworkAddressUsageMetrics :: VpcAttributeName
+pattern VpcAttributeName_EnableNetworkAddressUsageMetrics = VpcAttributeName' "enableNetworkAddressUsageMetrics"
+
+{-# COMPLETE
+  VpcAttributeName_EnableDnsHostnames,
+  VpcAttributeName_EnableDnsSupport,
+  VpcAttributeName_EnableNetworkAddressUsageMetrics,
+  VpcAttributeName'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpcCidrBlockAssociation.hs b/gen/Amazonka/EC2/Types/VpcCidrBlockAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcCidrBlockAssociation.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcCidrBlockAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcCidrBlockAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VpcCidrBlockState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv4 CIDR block associated with a VPC.
+--
+-- /See:/ 'newVpcCidrBlockAssociation' smart constructor.
+data VpcCidrBlockAssociation = VpcCidrBlockAssociation'
+  { -- | The association ID for the IPv4 CIDR block.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR block.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Information about the state of the CIDR block.
+    cidrBlockState :: Prelude.Maybe VpcCidrBlockState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcCidrBlockAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'vpcCidrBlockAssociation_associationId' - The association ID for the IPv4 CIDR block.
+--
+-- 'cidrBlock', 'vpcCidrBlockAssociation_cidrBlock' - The IPv4 CIDR block.
+--
+-- 'cidrBlockState', 'vpcCidrBlockAssociation_cidrBlockState' - Information about the state of the CIDR block.
+newVpcCidrBlockAssociation ::
+  VpcCidrBlockAssociation
+newVpcCidrBlockAssociation =
+  VpcCidrBlockAssociation'
+    { associationId =
+        Prelude.Nothing,
+      cidrBlock = Prelude.Nothing,
+      cidrBlockState = Prelude.Nothing
+    }
+
+-- | The association ID for the IPv4 CIDR block.
+vpcCidrBlockAssociation_associationId :: Lens.Lens' VpcCidrBlockAssociation (Prelude.Maybe Prelude.Text)
+vpcCidrBlockAssociation_associationId = Lens.lens (\VpcCidrBlockAssociation' {associationId} -> associationId) (\s@VpcCidrBlockAssociation' {} a -> s {associationId = a} :: VpcCidrBlockAssociation)
+
+-- | The IPv4 CIDR block.
+vpcCidrBlockAssociation_cidrBlock :: Lens.Lens' VpcCidrBlockAssociation (Prelude.Maybe Prelude.Text)
+vpcCidrBlockAssociation_cidrBlock = Lens.lens (\VpcCidrBlockAssociation' {cidrBlock} -> cidrBlock) (\s@VpcCidrBlockAssociation' {} a -> s {cidrBlock = a} :: VpcCidrBlockAssociation)
+
+-- | Information about the state of the CIDR block.
+vpcCidrBlockAssociation_cidrBlockState :: Lens.Lens' VpcCidrBlockAssociation (Prelude.Maybe VpcCidrBlockState)
+vpcCidrBlockAssociation_cidrBlockState = Lens.lens (\VpcCidrBlockAssociation' {cidrBlockState} -> cidrBlockState) (\s@VpcCidrBlockAssociation' {} a -> s {cidrBlockState = a} :: VpcCidrBlockAssociation)
+
+instance Data.FromXML VpcCidrBlockAssociation where
+  parseXML x =
+    VpcCidrBlockAssociation'
+      Prelude.<$> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "cidrBlock")
+      Prelude.<*> (x Data..@? "cidrBlockState")
+
+instance Prelude.Hashable VpcCidrBlockAssociation where
+  hashWithSalt _salt VpcCidrBlockAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` cidrBlockState
+
+instance Prelude.NFData VpcCidrBlockAssociation where
+  rnf VpcCidrBlockAssociation' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf cidrBlockState
diff --git a/gen/Amazonka/EC2/Types/VpcCidrBlockState.hs b/gen/Amazonka/EC2/Types/VpcCidrBlockState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcCidrBlockState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcCidrBlockState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcCidrBlockState where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VpcCidrBlockStateCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the state of a CIDR block.
+--
+-- /See:/ 'newVpcCidrBlockState' smart constructor.
+data VpcCidrBlockState = VpcCidrBlockState'
+  { -- | The state of the CIDR block.
+    state :: Prelude.Maybe VpcCidrBlockStateCode,
+    -- | A message about the status of the CIDR block, if applicable.
+    statusMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcCidrBlockState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'state', 'vpcCidrBlockState_state' - The state of the CIDR block.
+--
+-- 'statusMessage', 'vpcCidrBlockState_statusMessage' - A message about the status of the CIDR block, if applicable.
+newVpcCidrBlockState ::
+  VpcCidrBlockState
+newVpcCidrBlockState =
+  VpcCidrBlockState'
+    { state = Prelude.Nothing,
+      statusMessage = Prelude.Nothing
+    }
+
+-- | The state of the CIDR block.
+vpcCidrBlockState_state :: Lens.Lens' VpcCidrBlockState (Prelude.Maybe VpcCidrBlockStateCode)
+vpcCidrBlockState_state = Lens.lens (\VpcCidrBlockState' {state} -> state) (\s@VpcCidrBlockState' {} a -> s {state = a} :: VpcCidrBlockState)
+
+-- | A message about the status of the CIDR block, if applicable.
+vpcCidrBlockState_statusMessage :: Lens.Lens' VpcCidrBlockState (Prelude.Maybe Prelude.Text)
+vpcCidrBlockState_statusMessage = Lens.lens (\VpcCidrBlockState' {statusMessage} -> statusMessage) (\s@VpcCidrBlockState' {} a -> s {statusMessage = a} :: VpcCidrBlockState)
+
+instance Data.FromXML VpcCidrBlockState where
+  parseXML x =
+    VpcCidrBlockState'
+      Prelude.<$> (x Data..@? "state")
+      Prelude.<*> (x Data..@? "statusMessage")
+
+instance Prelude.Hashable VpcCidrBlockState where
+  hashWithSalt _salt VpcCidrBlockState' {..} =
+    _salt
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+
+instance Prelude.NFData VpcCidrBlockState where
+  rnf VpcCidrBlockState' {..} =
+    Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
diff --git a/gen/Amazonka/EC2/Types/VpcCidrBlockStateCode.hs b/gen/Amazonka/EC2/Types/VpcCidrBlockStateCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcCidrBlockStateCode.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcCidrBlockStateCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcCidrBlockStateCode
+  ( VpcCidrBlockStateCode
+      ( ..,
+        VpcCidrBlockStateCode_Associated,
+        VpcCidrBlockStateCode_Associating,
+        VpcCidrBlockStateCode_Disassociated,
+        VpcCidrBlockStateCode_Disassociating,
+        VpcCidrBlockStateCode_Failed,
+        VpcCidrBlockStateCode_Failing
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcCidrBlockStateCode = VpcCidrBlockStateCode'
+  { fromVpcCidrBlockStateCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcCidrBlockStateCode_Associated :: VpcCidrBlockStateCode
+pattern VpcCidrBlockStateCode_Associated = VpcCidrBlockStateCode' "associated"
+
+pattern VpcCidrBlockStateCode_Associating :: VpcCidrBlockStateCode
+pattern VpcCidrBlockStateCode_Associating = VpcCidrBlockStateCode' "associating"
+
+pattern VpcCidrBlockStateCode_Disassociated :: VpcCidrBlockStateCode
+pattern VpcCidrBlockStateCode_Disassociated = VpcCidrBlockStateCode' "disassociated"
+
+pattern VpcCidrBlockStateCode_Disassociating :: VpcCidrBlockStateCode
+pattern VpcCidrBlockStateCode_Disassociating = VpcCidrBlockStateCode' "disassociating"
+
+pattern VpcCidrBlockStateCode_Failed :: VpcCidrBlockStateCode
+pattern VpcCidrBlockStateCode_Failed = VpcCidrBlockStateCode' "failed"
+
+pattern VpcCidrBlockStateCode_Failing :: VpcCidrBlockStateCode
+pattern VpcCidrBlockStateCode_Failing = VpcCidrBlockStateCode' "failing"
+
+{-# COMPLETE
+  VpcCidrBlockStateCode_Associated,
+  VpcCidrBlockStateCode_Associating,
+  VpcCidrBlockStateCode_Disassociated,
+  VpcCidrBlockStateCode_Disassociating,
+  VpcCidrBlockStateCode_Failed,
+  VpcCidrBlockStateCode_Failing,
+  VpcCidrBlockStateCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpcClassicLink.hs b/gen/Amazonka/EC2/Types/VpcClassicLink.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcClassicLink.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcClassicLink
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcClassicLink where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Describes whether a VPC is enabled for ClassicLink.
+--
+-- /See:/ 'newVpcClassicLink' smart constructor.
+data VpcClassicLink = VpcClassicLink'
+  { -- | Indicates whether the VPC is enabled for ClassicLink.
+    classicLinkEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Any tags assigned to the VPC.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcClassicLink' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'classicLinkEnabled', 'vpcClassicLink_classicLinkEnabled' - Indicates whether the VPC is enabled for ClassicLink.
+--
+-- 'tags', 'vpcClassicLink_tags' - Any tags assigned to the VPC.
+--
+-- 'vpcId', 'vpcClassicLink_vpcId' - The ID of the VPC.
+newVpcClassicLink ::
+  VpcClassicLink
+newVpcClassicLink =
+  VpcClassicLink'
+    { classicLinkEnabled =
+        Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | Indicates whether the VPC is enabled for ClassicLink.
+vpcClassicLink_classicLinkEnabled :: Lens.Lens' VpcClassicLink (Prelude.Maybe Prelude.Bool)
+vpcClassicLink_classicLinkEnabled = Lens.lens (\VpcClassicLink' {classicLinkEnabled} -> classicLinkEnabled) (\s@VpcClassicLink' {} a -> s {classicLinkEnabled = a} :: VpcClassicLink)
+
+-- | Any tags assigned to the VPC.
+vpcClassicLink_tags :: Lens.Lens' VpcClassicLink (Prelude.Maybe [Tag])
+vpcClassicLink_tags = Lens.lens (\VpcClassicLink' {tags} -> tags) (\s@VpcClassicLink' {} a -> s {tags = a} :: VpcClassicLink) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC.
+vpcClassicLink_vpcId :: Lens.Lens' VpcClassicLink (Prelude.Maybe Prelude.Text)
+vpcClassicLink_vpcId = Lens.lens (\VpcClassicLink' {vpcId} -> vpcId) (\s@VpcClassicLink' {} a -> s {vpcId = a} :: VpcClassicLink)
+
+instance Data.FromXML VpcClassicLink where
+  parseXML x =
+    VpcClassicLink'
+      Prelude.<$> (x Data..@? "classicLinkEnabled")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable VpcClassicLink where
+  hashWithSalt _salt VpcClassicLink' {..} =
+    _salt
+      `Prelude.hashWithSalt` classicLinkEnabled
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VpcClassicLink where
+  rnf VpcClassicLink' {..} =
+    Prelude.rnf classicLinkEnabled
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/VpcEndpoint.hs b/gen/Amazonka/EC2/Types/VpcEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcEndpoint.hs
@@ -0,0 +1,326 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcEndpoint where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DnsEntry
+import Amazonka.EC2.Types.DnsOptions
+import Amazonka.EC2.Types.IpAddressType
+import Amazonka.EC2.Types.LastError
+import Amazonka.EC2.Types.SecurityGroupIdentifier
+import Amazonka.EC2.Types.State
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VpcEndpointType
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC endpoint.
+--
+-- /See:/ 'newVpcEndpoint' smart constructor.
+data VpcEndpoint = VpcEndpoint'
+  { -- | The date and time that the endpoint was created.
+    creationTimestamp :: Prelude.Maybe Data.ISO8601,
+    -- | (Interface endpoint) The DNS entries for the endpoint.
+    dnsEntries :: Prelude.Maybe [DnsEntry],
+    -- | The DNS options for the endpoint.
+    dnsOptions :: Prelude.Maybe DnsOptions,
+    -- | (Interface endpoint) Information about the security groups that are
+    -- associated with the network interface.
+    groups :: Prelude.Maybe [SecurityGroupIdentifier],
+    -- | The IP address type for the endpoint.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | The last error that occurred for endpoint.
+    lastError :: Prelude.Maybe LastError,
+    -- | (Interface endpoint) One or more network interfaces for the endpoint.
+    networkInterfaceIds :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the Amazon Web Services account that owns the endpoint.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | The policy document associated with the endpoint, if applicable.
+    policyDocument :: Prelude.Maybe Prelude.Text,
+    -- | (Interface endpoint) Indicates whether the VPC is associated with a
+    -- private hosted zone.
+    privateDnsEnabled :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the endpoint is being managed by its service.
+    requesterManaged :: Prelude.Maybe Prelude.Bool,
+    -- | (Gateway endpoint) One or more route tables associated with the
+    -- endpoint.
+    routeTableIds :: Prelude.Maybe [Prelude.Text],
+    -- | The name of the service to which the endpoint is associated.
+    serviceName :: Prelude.Maybe Prelude.Text,
+    -- | The state of the endpoint.
+    state :: Prelude.Maybe State,
+    -- | (Interface endpoint) The subnets for the endpoint.
+    subnetIds :: Prelude.Maybe [Prelude.Text],
+    -- | Any tags assigned to the endpoint.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the endpoint.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The type of endpoint.
+    vpcEndpointType :: Prelude.Maybe VpcEndpointType,
+    -- | The ID of the VPC to which the endpoint is associated.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTimestamp', 'vpcEndpoint_creationTimestamp' - The date and time that the endpoint was created.
+--
+-- 'dnsEntries', 'vpcEndpoint_dnsEntries' - (Interface endpoint) The DNS entries for the endpoint.
+--
+-- 'dnsOptions', 'vpcEndpoint_dnsOptions' - The DNS options for the endpoint.
+--
+-- 'groups', 'vpcEndpoint_groups' - (Interface endpoint) Information about the security groups that are
+-- associated with the network interface.
+--
+-- 'ipAddressType', 'vpcEndpoint_ipAddressType' - The IP address type for the endpoint.
+--
+-- 'lastError', 'vpcEndpoint_lastError' - The last error that occurred for endpoint.
+--
+-- 'networkInterfaceIds', 'vpcEndpoint_networkInterfaceIds' - (Interface endpoint) One or more network interfaces for the endpoint.
+--
+-- 'ownerId', 'vpcEndpoint_ownerId' - The ID of the Amazon Web Services account that owns the endpoint.
+--
+-- 'policyDocument', 'vpcEndpoint_policyDocument' - The policy document associated with the endpoint, if applicable.
+--
+-- 'privateDnsEnabled', 'vpcEndpoint_privateDnsEnabled' - (Interface endpoint) Indicates whether the VPC is associated with a
+-- private hosted zone.
+--
+-- 'requesterManaged', 'vpcEndpoint_requesterManaged' - Indicates whether the endpoint is being managed by its service.
+--
+-- 'routeTableIds', 'vpcEndpoint_routeTableIds' - (Gateway endpoint) One or more route tables associated with the
+-- endpoint.
+--
+-- 'serviceName', 'vpcEndpoint_serviceName' - The name of the service to which the endpoint is associated.
+--
+-- 'state', 'vpcEndpoint_state' - The state of the endpoint.
+--
+-- 'subnetIds', 'vpcEndpoint_subnetIds' - (Interface endpoint) The subnets for the endpoint.
+--
+-- 'tags', 'vpcEndpoint_tags' - Any tags assigned to the endpoint.
+--
+-- 'vpcEndpointId', 'vpcEndpoint_vpcEndpointId' - The ID of the endpoint.
+--
+-- 'vpcEndpointType', 'vpcEndpoint_vpcEndpointType' - The type of endpoint.
+--
+-- 'vpcId', 'vpcEndpoint_vpcId' - The ID of the VPC to which the endpoint is associated.
+newVpcEndpoint ::
+  VpcEndpoint
+newVpcEndpoint =
+  VpcEndpoint'
+    { creationTimestamp = Prelude.Nothing,
+      dnsEntries = Prelude.Nothing,
+      dnsOptions = Prelude.Nothing,
+      groups = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      lastError = Prelude.Nothing,
+      networkInterfaceIds = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      policyDocument = Prelude.Nothing,
+      privateDnsEnabled = Prelude.Nothing,
+      requesterManaged = Prelude.Nothing,
+      routeTableIds = Prelude.Nothing,
+      serviceName = Prelude.Nothing,
+      state = Prelude.Nothing,
+      subnetIds = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing,
+      vpcEndpointType = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The date and time that the endpoint was created.
+vpcEndpoint_creationTimestamp :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.UTCTime)
+vpcEndpoint_creationTimestamp = Lens.lens (\VpcEndpoint' {creationTimestamp} -> creationTimestamp) (\s@VpcEndpoint' {} a -> s {creationTimestamp = a} :: VpcEndpoint) Prelude.. Lens.mapping Data._Time
+
+-- | (Interface endpoint) The DNS entries for the endpoint.
+vpcEndpoint_dnsEntries :: Lens.Lens' VpcEndpoint (Prelude.Maybe [DnsEntry])
+vpcEndpoint_dnsEntries = Lens.lens (\VpcEndpoint' {dnsEntries} -> dnsEntries) (\s@VpcEndpoint' {} a -> s {dnsEntries = a} :: VpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The DNS options for the endpoint.
+vpcEndpoint_dnsOptions :: Lens.Lens' VpcEndpoint (Prelude.Maybe DnsOptions)
+vpcEndpoint_dnsOptions = Lens.lens (\VpcEndpoint' {dnsOptions} -> dnsOptions) (\s@VpcEndpoint' {} a -> s {dnsOptions = a} :: VpcEndpoint)
+
+-- | (Interface endpoint) Information about the security groups that are
+-- associated with the network interface.
+vpcEndpoint_groups :: Lens.Lens' VpcEndpoint (Prelude.Maybe [SecurityGroupIdentifier])
+vpcEndpoint_groups = Lens.lens (\VpcEndpoint' {groups} -> groups) (\s@VpcEndpoint' {} a -> s {groups = a} :: VpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP address type for the endpoint.
+vpcEndpoint_ipAddressType :: Lens.Lens' VpcEndpoint (Prelude.Maybe IpAddressType)
+vpcEndpoint_ipAddressType = Lens.lens (\VpcEndpoint' {ipAddressType} -> ipAddressType) (\s@VpcEndpoint' {} a -> s {ipAddressType = a} :: VpcEndpoint)
+
+-- | The last error that occurred for endpoint.
+vpcEndpoint_lastError :: Lens.Lens' VpcEndpoint (Prelude.Maybe LastError)
+vpcEndpoint_lastError = Lens.lens (\VpcEndpoint' {lastError} -> lastError) (\s@VpcEndpoint' {} a -> s {lastError = a} :: VpcEndpoint)
+
+-- | (Interface endpoint) One or more network interfaces for the endpoint.
+vpcEndpoint_networkInterfaceIds :: Lens.Lens' VpcEndpoint (Prelude.Maybe [Prelude.Text])
+vpcEndpoint_networkInterfaceIds = Lens.lens (\VpcEndpoint' {networkInterfaceIds} -> networkInterfaceIds) (\s@VpcEndpoint' {} a -> s {networkInterfaceIds = a} :: VpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services account that owns the endpoint.
+vpcEndpoint_ownerId :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Text)
+vpcEndpoint_ownerId = Lens.lens (\VpcEndpoint' {ownerId} -> ownerId) (\s@VpcEndpoint' {} a -> s {ownerId = a} :: VpcEndpoint)
+
+-- | The policy document associated with the endpoint, if applicable.
+vpcEndpoint_policyDocument :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Text)
+vpcEndpoint_policyDocument = Lens.lens (\VpcEndpoint' {policyDocument} -> policyDocument) (\s@VpcEndpoint' {} a -> s {policyDocument = a} :: VpcEndpoint)
+
+-- | (Interface endpoint) Indicates whether the VPC is associated with a
+-- private hosted zone.
+vpcEndpoint_privateDnsEnabled :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Bool)
+vpcEndpoint_privateDnsEnabled = Lens.lens (\VpcEndpoint' {privateDnsEnabled} -> privateDnsEnabled) (\s@VpcEndpoint' {} a -> s {privateDnsEnabled = a} :: VpcEndpoint)
+
+-- | Indicates whether the endpoint is being managed by its service.
+vpcEndpoint_requesterManaged :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Bool)
+vpcEndpoint_requesterManaged = Lens.lens (\VpcEndpoint' {requesterManaged} -> requesterManaged) (\s@VpcEndpoint' {} a -> s {requesterManaged = a} :: VpcEndpoint)
+
+-- | (Gateway endpoint) One or more route tables associated with the
+-- endpoint.
+vpcEndpoint_routeTableIds :: Lens.Lens' VpcEndpoint (Prelude.Maybe [Prelude.Text])
+vpcEndpoint_routeTableIds = Lens.lens (\VpcEndpoint' {routeTableIds} -> routeTableIds) (\s@VpcEndpoint' {} a -> s {routeTableIds = a} :: VpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the service to which the endpoint is associated.
+vpcEndpoint_serviceName :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Text)
+vpcEndpoint_serviceName = Lens.lens (\VpcEndpoint' {serviceName} -> serviceName) (\s@VpcEndpoint' {} a -> s {serviceName = a} :: VpcEndpoint)
+
+-- | The state of the endpoint.
+vpcEndpoint_state :: Lens.Lens' VpcEndpoint (Prelude.Maybe State)
+vpcEndpoint_state = Lens.lens (\VpcEndpoint' {state} -> state) (\s@VpcEndpoint' {} a -> s {state = a} :: VpcEndpoint)
+
+-- | (Interface endpoint) The subnets for the endpoint.
+vpcEndpoint_subnetIds :: Lens.Lens' VpcEndpoint (Prelude.Maybe [Prelude.Text])
+vpcEndpoint_subnetIds = Lens.lens (\VpcEndpoint' {subnetIds} -> subnetIds) (\s@VpcEndpoint' {} a -> s {subnetIds = a} :: VpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any tags assigned to the endpoint.
+vpcEndpoint_tags :: Lens.Lens' VpcEndpoint (Prelude.Maybe [Tag])
+vpcEndpoint_tags = Lens.lens (\VpcEndpoint' {tags} -> tags) (\s@VpcEndpoint' {} a -> s {tags = a} :: VpcEndpoint) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the endpoint.
+vpcEndpoint_vpcEndpointId :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Text)
+vpcEndpoint_vpcEndpointId = Lens.lens (\VpcEndpoint' {vpcEndpointId} -> vpcEndpointId) (\s@VpcEndpoint' {} a -> s {vpcEndpointId = a} :: VpcEndpoint)
+
+-- | The type of endpoint.
+vpcEndpoint_vpcEndpointType :: Lens.Lens' VpcEndpoint (Prelude.Maybe VpcEndpointType)
+vpcEndpoint_vpcEndpointType = Lens.lens (\VpcEndpoint' {vpcEndpointType} -> vpcEndpointType) (\s@VpcEndpoint' {} a -> s {vpcEndpointType = a} :: VpcEndpoint)
+
+-- | The ID of the VPC to which the endpoint is associated.
+vpcEndpoint_vpcId :: Lens.Lens' VpcEndpoint (Prelude.Maybe Prelude.Text)
+vpcEndpoint_vpcId = Lens.lens (\VpcEndpoint' {vpcId} -> vpcId) (\s@VpcEndpoint' {} a -> s {vpcId = a} :: VpcEndpoint)
+
+instance Data.FromXML VpcEndpoint where
+  parseXML x =
+    VpcEndpoint'
+      Prelude.<$> (x Data..@? "creationTimestamp")
+      Prelude.<*> ( x
+                      Data..@? "dnsEntrySet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "dnsOptions")
+      Prelude.<*> ( x
+                      Data..@? "groupSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipAddressType")
+      Prelude.<*> (x Data..@? "lastError")
+      Prelude.<*> ( x
+                      Data..@? "networkInterfaceIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "policyDocument")
+      Prelude.<*> (x Data..@? "privateDnsEnabled")
+      Prelude.<*> (x Data..@? "requesterManaged")
+      Prelude.<*> ( x
+                      Data..@? "routeTableIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "serviceName")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "subnetIdSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcEndpointId")
+      Prelude.<*> (x Data..@? "vpcEndpointType")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable VpcEndpoint where
+  hashWithSalt _salt VpcEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTimestamp
+      `Prelude.hashWithSalt` dnsEntries
+      `Prelude.hashWithSalt` dnsOptions
+      `Prelude.hashWithSalt` groups
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` lastError
+      `Prelude.hashWithSalt` networkInterfaceIds
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` policyDocument
+      `Prelude.hashWithSalt` privateDnsEnabled
+      `Prelude.hashWithSalt` requesterManaged
+      `Prelude.hashWithSalt` routeTableIds
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` subnetIds
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcEndpointId
+      `Prelude.hashWithSalt` vpcEndpointType
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VpcEndpoint where
+  rnf VpcEndpoint' {..} =
+    Prelude.rnf creationTimestamp
+      `Prelude.seq` Prelude.rnf dnsEntries
+      `Prelude.seq` Prelude.rnf dnsOptions
+      `Prelude.seq` Prelude.rnf groups
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf lastError
+      `Prelude.seq` Prelude.rnf networkInterfaceIds
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf policyDocument
+      `Prelude.seq` Prelude.rnf privateDnsEnabled
+      `Prelude.seq` Prelude.rnf requesterManaged
+      `Prelude.seq` Prelude.rnf routeTableIds
+      `Prelude.seq` Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf subnetIds
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf vpcEndpointType
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/VpcEndpointConnection.hs b/gen/Amazonka/EC2/Types/VpcEndpointConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcEndpointConnection.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcEndpointConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcEndpointConnection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.DnsEntry
+import Amazonka.EC2.Types.IpAddressType
+import Amazonka.EC2.Types.State
+import Amazonka.EC2.Types.Tag
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC endpoint connection to a service.
+--
+-- /See:/ 'newVpcEndpointConnection' smart constructor.
+data VpcEndpointConnection = VpcEndpointConnection'
+  { -- | The date and time that the VPC endpoint was created.
+    creationTimestamp :: Prelude.Maybe Data.ISO8601,
+    -- | The DNS entries for the VPC endpoint.
+    dnsEntries :: Prelude.Maybe [DnsEntry],
+    -- | The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the
+    -- service.
+    gatewayLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The IP address type for the endpoint.
+    ipAddressType :: Prelude.Maybe IpAddressType,
+    -- | The Amazon Resource Names (ARNs) of the network load balancers for the
+    -- service.
+    networkLoadBalancerArns :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the service to which the endpoint is connected.
+    serviceId :: Prelude.Maybe Prelude.Text,
+    -- | The tags.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC endpoint connection.
+    vpcEndpointConnectionId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC endpoint.
+    vpcEndpointId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the Amazon Web Services account that owns the VPC endpoint.
+    vpcEndpointOwner :: Prelude.Maybe Prelude.Text,
+    -- | The state of the VPC endpoint.
+    vpcEndpointState :: Prelude.Maybe State
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcEndpointConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationTimestamp', 'vpcEndpointConnection_creationTimestamp' - The date and time that the VPC endpoint was created.
+--
+-- 'dnsEntries', 'vpcEndpointConnection_dnsEntries' - The DNS entries for the VPC endpoint.
+--
+-- 'gatewayLoadBalancerArns', 'vpcEndpointConnection_gatewayLoadBalancerArns' - The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the
+-- service.
+--
+-- 'ipAddressType', 'vpcEndpointConnection_ipAddressType' - The IP address type for the endpoint.
+--
+-- 'networkLoadBalancerArns', 'vpcEndpointConnection_networkLoadBalancerArns' - The Amazon Resource Names (ARNs) of the network load balancers for the
+-- service.
+--
+-- 'serviceId', 'vpcEndpointConnection_serviceId' - The ID of the service to which the endpoint is connected.
+--
+-- 'tags', 'vpcEndpointConnection_tags' - The tags.
+--
+-- 'vpcEndpointConnectionId', 'vpcEndpointConnection_vpcEndpointConnectionId' - The ID of the VPC endpoint connection.
+--
+-- 'vpcEndpointId', 'vpcEndpointConnection_vpcEndpointId' - The ID of the VPC endpoint.
+--
+-- 'vpcEndpointOwner', 'vpcEndpointConnection_vpcEndpointOwner' - The ID of the Amazon Web Services account that owns the VPC endpoint.
+--
+-- 'vpcEndpointState', 'vpcEndpointConnection_vpcEndpointState' - The state of the VPC endpoint.
+newVpcEndpointConnection ::
+  VpcEndpointConnection
+newVpcEndpointConnection =
+  VpcEndpointConnection'
+    { creationTimestamp =
+        Prelude.Nothing,
+      dnsEntries = Prelude.Nothing,
+      gatewayLoadBalancerArns = Prelude.Nothing,
+      ipAddressType = Prelude.Nothing,
+      networkLoadBalancerArns = Prelude.Nothing,
+      serviceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcEndpointConnectionId = Prelude.Nothing,
+      vpcEndpointId = Prelude.Nothing,
+      vpcEndpointOwner = Prelude.Nothing,
+      vpcEndpointState = Prelude.Nothing
+    }
+
+-- | The date and time that the VPC endpoint was created.
+vpcEndpointConnection_creationTimestamp :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe Prelude.UTCTime)
+vpcEndpointConnection_creationTimestamp = Lens.lens (\VpcEndpointConnection' {creationTimestamp} -> creationTimestamp) (\s@VpcEndpointConnection' {} a -> s {creationTimestamp = a} :: VpcEndpointConnection) Prelude.. Lens.mapping Data._Time
+
+-- | The DNS entries for the VPC endpoint.
+vpcEndpointConnection_dnsEntries :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe [DnsEntry])
+vpcEndpointConnection_dnsEntries = Lens.lens (\VpcEndpointConnection' {dnsEntries} -> dnsEntries) (\s@VpcEndpointConnection' {} a -> s {dnsEntries = a} :: VpcEndpointConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the
+-- service.
+vpcEndpointConnection_gatewayLoadBalancerArns :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe [Prelude.Text])
+vpcEndpointConnection_gatewayLoadBalancerArns = Lens.lens (\VpcEndpointConnection' {gatewayLoadBalancerArns} -> gatewayLoadBalancerArns) (\s@VpcEndpointConnection' {} a -> s {gatewayLoadBalancerArns = a} :: VpcEndpointConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IP address type for the endpoint.
+vpcEndpointConnection_ipAddressType :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe IpAddressType)
+vpcEndpointConnection_ipAddressType = Lens.lens (\VpcEndpointConnection' {ipAddressType} -> ipAddressType) (\s@VpcEndpointConnection' {} a -> s {ipAddressType = a} :: VpcEndpointConnection)
+
+-- | The Amazon Resource Names (ARNs) of the network load balancers for the
+-- service.
+vpcEndpointConnection_networkLoadBalancerArns :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe [Prelude.Text])
+vpcEndpointConnection_networkLoadBalancerArns = Lens.lens (\VpcEndpointConnection' {networkLoadBalancerArns} -> networkLoadBalancerArns) (\s@VpcEndpointConnection' {} a -> s {networkLoadBalancerArns = a} :: VpcEndpointConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the service to which the endpoint is connected.
+vpcEndpointConnection_serviceId :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe Prelude.Text)
+vpcEndpointConnection_serviceId = Lens.lens (\VpcEndpointConnection' {serviceId} -> serviceId) (\s@VpcEndpointConnection' {} a -> s {serviceId = a} :: VpcEndpointConnection)
+
+-- | The tags.
+vpcEndpointConnection_tags :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe [Tag])
+vpcEndpointConnection_tags = Lens.lens (\VpcEndpointConnection' {tags} -> tags) (\s@VpcEndpointConnection' {} a -> s {tags = a} :: VpcEndpointConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC endpoint connection.
+vpcEndpointConnection_vpcEndpointConnectionId :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe Prelude.Text)
+vpcEndpointConnection_vpcEndpointConnectionId = Lens.lens (\VpcEndpointConnection' {vpcEndpointConnectionId} -> vpcEndpointConnectionId) (\s@VpcEndpointConnection' {} a -> s {vpcEndpointConnectionId = a} :: VpcEndpointConnection)
+
+-- | The ID of the VPC endpoint.
+vpcEndpointConnection_vpcEndpointId :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe Prelude.Text)
+vpcEndpointConnection_vpcEndpointId = Lens.lens (\VpcEndpointConnection' {vpcEndpointId} -> vpcEndpointId) (\s@VpcEndpointConnection' {} a -> s {vpcEndpointId = a} :: VpcEndpointConnection)
+
+-- | The ID of the Amazon Web Services account that owns the VPC endpoint.
+vpcEndpointConnection_vpcEndpointOwner :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe Prelude.Text)
+vpcEndpointConnection_vpcEndpointOwner = Lens.lens (\VpcEndpointConnection' {vpcEndpointOwner} -> vpcEndpointOwner) (\s@VpcEndpointConnection' {} a -> s {vpcEndpointOwner = a} :: VpcEndpointConnection)
+
+-- | The state of the VPC endpoint.
+vpcEndpointConnection_vpcEndpointState :: Lens.Lens' VpcEndpointConnection (Prelude.Maybe State)
+vpcEndpointConnection_vpcEndpointState = Lens.lens (\VpcEndpointConnection' {vpcEndpointState} -> vpcEndpointState) (\s@VpcEndpointConnection' {} a -> s {vpcEndpointState = a} :: VpcEndpointConnection)
+
+instance Data.FromXML VpcEndpointConnection where
+  parseXML x =
+    VpcEndpointConnection'
+      Prelude.<$> (x Data..@? "creationTimestamp")
+      Prelude.<*> ( x
+                      Data..@? "dnsEntrySet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "gatewayLoadBalancerArnSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ipAddressType")
+      Prelude.<*> ( x
+                      Data..@? "networkLoadBalancerArnSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "serviceId")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcEndpointConnectionId")
+      Prelude.<*> (x Data..@? "vpcEndpointId")
+      Prelude.<*> (x Data..@? "vpcEndpointOwner")
+      Prelude.<*> (x Data..@? "vpcEndpointState")
+
+instance Prelude.Hashable VpcEndpointConnection where
+  hashWithSalt _salt VpcEndpointConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationTimestamp
+      `Prelude.hashWithSalt` dnsEntries
+      `Prelude.hashWithSalt` gatewayLoadBalancerArns
+      `Prelude.hashWithSalt` ipAddressType
+      `Prelude.hashWithSalt` networkLoadBalancerArns
+      `Prelude.hashWithSalt` serviceId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcEndpointConnectionId
+      `Prelude.hashWithSalt` vpcEndpointId
+      `Prelude.hashWithSalt` vpcEndpointOwner
+      `Prelude.hashWithSalt` vpcEndpointState
+
+instance Prelude.NFData VpcEndpointConnection where
+  rnf VpcEndpointConnection' {..} =
+    Prelude.rnf creationTimestamp
+      `Prelude.seq` Prelude.rnf dnsEntries
+      `Prelude.seq` Prelude.rnf gatewayLoadBalancerArns
+      `Prelude.seq` Prelude.rnf ipAddressType
+      `Prelude.seq` Prelude.rnf networkLoadBalancerArns
+      `Prelude.seq` Prelude.rnf serviceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcEndpointConnectionId
+      `Prelude.seq` Prelude.rnf vpcEndpointId
+      `Prelude.seq` Prelude.rnf vpcEndpointOwner
+      `Prelude.seq` Prelude.rnf vpcEndpointState
diff --git a/gen/Amazonka/EC2/Types/VpcEndpointType.hs b/gen/Amazonka/EC2/Types/VpcEndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcEndpointType.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcEndpointType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcEndpointType
+  ( VpcEndpointType
+      ( ..,
+        VpcEndpointType_Gateway,
+        VpcEndpointType_GatewayLoadBalancer,
+        VpcEndpointType_Interface
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcEndpointType = VpcEndpointType'
+  { fromVpcEndpointType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcEndpointType_Gateway :: VpcEndpointType
+pattern VpcEndpointType_Gateway = VpcEndpointType' "Gateway"
+
+pattern VpcEndpointType_GatewayLoadBalancer :: VpcEndpointType
+pattern VpcEndpointType_GatewayLoadBalancer = VpcEndpointType' "GatewayLoadBalancer"
+
+pattern VpcEndpointType_Interface :: VpcEndpointType
+pattern VpcEndpointType_Interface = VpcEndpointType' "Interface"
+
+{-# COMPLETE
+  VpcEndpointType_Gateway,
+  VpcEndpointType_GatewayLoadBalancer,
+  VpcEndpointType_Interface,
+  VpcEndpointType'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpcIpv6CidrBlockAssociation.hs b/gen/Amazonka/EC2/Types/VpcIpv6CidrBlockAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcIpv6CidrBlockAssociation.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcIpv6CidrBlockAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcIpv6CidrBlockAssociation where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VpcCidrBlockState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes an IPv6 CIDR block associated with a VPC.
+--
+-- /See:/ 'newVpcIpv6CidrBlockAssociation' smart constructor.
+data VpcIpv6CidrBlockAssociation = VpcIpv6CidrBlockAssociation'
+  { -- | The association ID for the IPv6 CIDR block.
+    associationId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR block.
+    ipv6CidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Information about the state of the CIDR block.
+    ipv6CidrBlockState :: Prelude.Maybe VpcCidrBlockState,
+    -- | The ID of the IPv6 address pool from which the IPv6 CIDR block is
+    -- allocated.
+    ipv6Pool :: Prelude.Maybe Prelude.Text,
+    -- | The name of the unique set of Availability Zones, Local Zones, or
+    -- Wavelength Zones from which Amazon Web Services advertises IP addresses,
+    -- for example, @us-east-1-wl1-bos-wlz-1@.
+    networkBorderGroup :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcIpv6CidrBlockAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associationId', 'vpcIpv6CidrBlockAssociation_associationId' - The association ID for the IPv6 CIDR block.
+--
+-- 'ipv6CidrBlock', 'vpcIpv6CidrBlockAssociation_ipv6CidrBlock' - The IPv6 CIDR block.
+--
+-- 'ipv6CidrBlockState', 'vpcIpv6CidrBlockAssociation_ipv6CidrBlockState' - Information about the state of the CIDR block.
+--
+-- 'ipv6Pool', 'vpcIpv6CidrBlockAssociation_ipv6Pool' - The ID of the IPv6 address pool from which the IPv6 CIDR block is
+-- allocated.
+--
+-- 'networkBorderGroup', 'vpcIpv6CidrBlockAssociation_networkBorderGroup' - The name of the unique set of Availability Zones, Local Zones, or
+-- Wavelength Zones from which Amazon Web Services advertises IP addresses,
+-- for example, @us-east-1-wl1-bos-wlz-1@.
+newVpcIpv6CidrBlockAssociation ::
+  VpcIpv6CidrBlockAssociation
+newVpcIpv6CidrBlockAssociation =
+  VpcIpv6CidrBlockAssociation'
+    { associationId =
+        Prelude.Nothing,
+      ipv6CidrBlock = Prelude.Nothing,
+      ipv6CidrBlockState = Prelude.Nothing,
+      ipv6Pool = Prelude.Nothing,
+      networkBorderGroup = Prelude.Nothing
+    }
+
+-- | The association ID for the IPv6 CIDR block.
+vpcIpv6CidrBlockAssociation_associationId :: Lens.Lens' VpcIpv6CidrBlockAssociation (Prelude.Maybe Prelude.Text)
+vpcIpv6CidrBlockAssociation_associationId = Lens.lens (\VpcIpv6CidrBlockAssociation' {associationId} -> associationId) (\s@VpcIpv6CidrBlockAssociation' {} a -> s {associationId = a} :: VpcIpv6CidrBlockAssociation)
+
+-- | The IPv6 CIDR block.
+vpcIpv6CidrBlockAssociation_ipv6CidrBlock :: Lens.Lens' VpcIpv6CidrBlockAssociation (Prelude.Maybe Prelude.Text)
+vpcIpv6CidrBlockAssociation_ipv6CidrBlock = Lens.lens (\VpcIpv6CidrBlockAssociation' {ipv6CidrBlock} -> ipv6CidrBlock) (\s@VpcIpv6CidrBlockAssociation' {} a -> s {ipv6CidrBlock = a} :: VpcIpv6CidrBlockAssociation)
+
+-- | Information about the state of the CIDR block.
+vpcIpv6CidrBlockAssociation_ipv6CidrBlockState :: Lens.Lens' VpcIpv6CidrBlockAssociation (Prelude.Maybe VpcCidrBlockState)
+vpcIpv6CidrBlockAssociation_ipv6CidrBlockState = Lens.lens (\VpcIpv6CidrBlockAssociation' {ipv6CidrBlockState} -> ipv6CidrBlockState) (\s@VpcIpv6CidrBlockAssociation' {} a -> s {ipv6CidrBlockState = a} :: VpcIpv6CidrBlockAssociation)
+
+-- | The ID of the IPv6 address pool from which the IPv6 CIDR block is
+-- allocated.
+vpcIpv6CidrBlockAssociation_ipv6Pool :: Lens.Lens' VpcIpv6CidrBlockAssociation (Prelude.Maybe Prelude.Text)
+vpcIpv6CidrBlockAssociation_ipv6Pool = Lens.lens (\VpcIpv6CidrBlockAssociation' {ipv6Pool} -> ipv6Pool) (\s@VpcIpv6CidrBlockAssociation' {} a -> s {ipv6Pool = a} :: VpcIpv6CidrBlockAssociation)
+
+-- | The name of the unique set of Availability Zones, Local Zones, or
+-- Wavelength Zones from which Amazon Web Services advertises IP addresses,
+-- for example, @us-east-1-wl1-bos-wlz-1@.
+vpcIpv6CidrBlockAssociation_networkBorderGroup :: Lens.Lens' VpcIpv6CidrBlockAssociation (Prelude.Maybe Prelude.Text)
+vpcIpv6CidrBlockAssociation_networkBorderGroup = Lens.lens (\VpcIpv6CidrBlockAssociation' {networkBorderGroup} -> networkBorderGroup) (\s@VpcIpv6CidrBlockAssociation' {} a -> s {networkBorderGroup = a} :: VpcIpv6CidrBlockAssociation)
+
+instance Data.FromXML VpcIpv6CidrBlockAssociation where
+  parseXML x =
+    VpcIpv6CidrBlockAssociation'
+      Prelude.<$> (x Data..@? "associationId")
+      Prelude.<*> (x Data..@? "ipv6CidrBlock")
+      Prelude.<*> (x Data..@? "ipv6CidrBlockState")
+      Prelude.<*> (x Data..@? "ipv6Pool")
+      Prelude.<*> (x Data..@? "networkBorderGroup")
+
+instance Prelude.Hashable VpcIpv6CidrBlockAssociation where
+  hashWithSalt _salt VpcIpv6CidrBlockAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` associationId
+      `Prelude.hashWithSalt` ipv6CidrBlock
+      `Prelude.hashWithSalt` ipv6CidrBlockState
+      `Prelude.hashWithSalt` ipv6Pool
+      `Prelude.hashWithSalt` networkBorderGroup
+
+instance Prelude.NFData VpcIpv6CidrBlockAssociation where
+  rnf VpcIpv6CidrBlockAssociation' {..} =
+    Prelude.rnf associationId
+      `Prelude.seq` Prelude.rnf ipv6CidrBlock
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockState
+      `Prelude.seq` Prelude.rnf ipv6Pool
+      `Prelude.seq` Prelude.rnf networkBorderGroup
diff --git a/gen/Amazonka/EC2/Types/VpcPeeringConnection.hs b/gen/Amazonka/EC2/Types/VpcPeeringConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcPeeringConnection.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcPeeringConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcPeeringConnection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VpcPeeringConnectionStateReason
+import Amazonka.EC2.Types.VpcPeeringConnectionVpcInfo
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC peering connection.
+--
+-- /See:/ 'newVpcPeeringConnection' smart constructor.
+data VpcPeeringConnection = VpcPeeringConnection'
+  { -- | Information about the accepter VPC. CIDR block information is only
+    -- returned when describing an active VPC peering connection.
+    accepterVpcInfo :: Prelude.Maybe VpcPeeringConnectionVpcInfo,
+    -- | The time that an unaccepted VPC peering connection will expire.
+    expirationTime :: Prelude.Maybe Data.ISO8601,
+    -- | Information about the requester VPC. CIDR block information is only
+    -- returned when describing an active VPC peering connection.
+    requesterVpcInfo :: Prelude.Maybe VpcPeeringConnectionVpcInfo,
+    -- | The status of the VPC peering connection.
+    status :: Prelude.Maybe VpcPeeringConnectionStateReason,
+    -- | Any tags assigned to the resource.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the VPC peering connection.
+    vpcPeeringConnectionId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcPeeringConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accepterVpcInfo', 'vpcPeeringConnection_accepterVpcInfo' - Information about the accepter VPC. CIDR block information is only
+-- returned when describing an active VPC peering connection.
+--
+-- 'expirationTime', 'vpcPeeringConnection_expirationTime' - The time that an unaccepted VPC peering connection will expire.
+--
+-- 'requesterVpcInfo', 'vpcPeeringConnection_requesterVpcInfo' - Information about the requester VPC. CIDR block information is only
+-- returned when describing an active VPC peering connection.
+--
+-- 'status', 'vpcPeeringConnection_status' - The status of the VPC peering connection.
+--
+-- 'tags', 'vpcPeeringConnection_tags' - Any tags assigned to the resource.
+--
+-- 'vpcPeeringConnectionId', 'vpcPeeringConnection_vpcPeeringConnectionId' - The ID of the VPC peering connection.
+newVpcPeeringConnection ::
+  VpcPeeringConnection
+newVpcPeeringConnection =
+  VpcPeeringConnection'
+    { accepterVpcInfo =
+        Prelude.Nothing,
+      expirationTime = Prelude.Nothing,
+      requesterVpcInfo = Prelude.Nothing,
+      status = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcPeeringConnectionId = Prelude.Nothing
+    }
+
+-- | Information about the accepter VPC. CIDR block information is only
+-- returned when describing an active VPC peering connection.
+vpcPeeringConnection_accepterVpcInfo :: Lens.Lens' VpcPeeringConnection (Prelude.Maybe VpcPeeringConnectionVpcInfo)
+vpcPeeringConnection_accepterVpcInfo = Lens.lens (\VpcPeeringConnection' {accepterVpcInfo} -> accepterVpcInfo) (\s@VpcPeeringConnection' {} a -> s {accepterVpcInfo = a} :: VpcPeeringConnection)
+
+-- | The time that an unaccepted VPC peering connection will expire.
+vpcPeeringConnection_expirationTime :: Lens.Lens' VpcPeeringConnection (Prelude.Maybe Prelude.UTCTime)
+vpcPeeringConnection_expirationTime = Lens.lens (\VpcPeeringConnection' {expirationTime} -> expirationTime) (\s@VpcPeeringConnection' {} a -> s {expirationTime = a} :: VpcPeeringConnection) Prelude.. Lens.mapping Data._Time
+
+-- | Information about the requester VPC. CIDR block information is only
+-- returned when describing an active VPC peering connection.
+vpcPeeringConnection_requesterVpcInfo :: Lens.Lens' VpcPeeringConnection (Prelude.Maybe VpcPeeringConnectionVpcInfo)
+vpcPeeringConnection_requesterVpcInfo = Lens.lens (\VpcPeeringConnection' {requesterVpcInfo} -> requesterVpcInfo) (\s@VpcPeeringConnection' {} a -> s {requesterVpcInfo = a} :: VpcPeeringConnection)
+
+-- | The status of the VPC peering connection.
+vpcPeeringConnection_status :: Lens.Lens' VpcPeeringConnection (Prelude.Maybe VpcPeeringConnectionStateReason)
+vpcPeeringConnection_status = Lens.lens (\VpcPeeringConnection' {status} -> status) (\s@VpcPeeringConnection' {} a -> s {status = a} :: VpcPeeringConnection)
+
+-- | Any tags assigned to the resource.
+vpcPeeringConnection_tags :: Lens.Lens' VpcPeeringConnection (Prelude.Maybe [Tag])
+vpcPeeringConnection_tags = Lens.lens (\VpcPeeringConnection' {tags} -> tags) (\s@VpcPeeringConnection' {} a -> s {tags = a} :: VpcPeeringConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the VPC peering connection.
+vpcPeeringConnection_vpcPeeringConnectionId :: Lens.Lens' VpcPeeringConnection (Prelude.Maybe Prelude.Text)
+vpcPeeringConnection_vpcPeeringConnectionId = Lens.lens (\VpcPeeringConnection' {vpcPeeringConnectionId} -> vpcPeeringConnectionId) (\s@VpcPeeringConnection' {} a -> s {vpcPeeringConnectionId = a} :: VpcPeeringConnection)
+
+instance Data.FromXML VpcPeeringConnection where
+  parseXML x =
+    VpcPeeringConnection'
+      Prelude.<$> (x Data..@? "accepterVpcInfo")
+      Prelude.<*> (x Data..@? "expirationTime")
+      Prelude.<*> (x Data..@? "requesterVpcInfo")
+      Prelude.<*> (x Data..@? "status")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpcPeeringConnectionId")
+
+instance Prelude.Hashable VpcPeeringConnection where
+  hashWithSalt _salt VpcPeeringConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` accepterVpcInfo
+      `Prelude.hashWithSalt` expirationTime
+      `Prelude.hashWithSalt` requesterVpcInfo
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcPeeringConnectionId
+
+instance Prelude.NFData VpcPeeringConnection where
+  rnf VpcPeeringConnection' {..} =
+    Prelude.rnf accepterVpcInfo
+      `Prelude.seq` Prelude.rnf expirationTime
+      `Prelude.seq` Prelude.rnf requesterVpcInfo
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcPeeringConnectionId
diff --git a/gen/Amazonka/EC2/Types/VpcPeeringConnectionOptionsDescription.hs b/gen/Amazonka/EC2/Types/VpcPeeringConnectionOptionsDescription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcPeeringConnectionOptionsDescription.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcPeeringConnectionOptionsDescription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcPeeringConnectionOptionsDescription where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | We are retiring EC2-Classic. We recommend that you migrate from
+-- EC2-Classic to a VPC. For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-migrate.html Migrate from EC2-Classic to a VPC>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Describes the VPC peering connection options.
+--
+-- /See:/ 'newVpcPeeringConnectionOptionsDescription' smart constructor.
+data VpcPeeringConnectionOptionsDescription = VpcPeeringConnectionOptionsDescription'
+  { -- | Indicates whether a local VPC can resolve public DNS hostnames to
+    -- private IP addresses when queried from instances in a peer VPC.
+    allowDnsResolutionFromRemoteVpc :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether a local ClassicLink connection can communicate with
+    -- the peer VPC over the VPC peering connection.
+    allowEgressFromLocalClassicLinkToRemoteVpc :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether a local VPC can communicate with a ClassicLink
+    -- connection in the peer VPC over the VPC peering connection.
+    allowEgressFromLocalVpcToRemoteClassicLink :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcPeeringConnectionOptionsDescription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowDnsResolutionFromRemoteVpc', 'vpcPeeringConnectionOptionsDescription_allowDnsResolutionFromRemoteVpc' - Indicates whether a local VPC can resolve public DNS hostnames to
+-- private IP addresses when queried from instances in a peer VPC.
+--
+-- 'allowEgressFromLocalClassicLinkToRemoteVpc', 'vpcPeeringConnectionOptionsDescription_allowEgressFromLocalClassicLinkToRemoteVpc' - Indicates whether a local ClassicLink connection can communicate with
+-- the peer VPC over the VPC peering connection.
+--
+-- 'allowEgressFromLocalVpcToRemoteClassicLink', 'vpcPeeringConnectionOptionsDescription_allowEgressFromLocalVpcToRemoteClassicLink' - Indicates whether a local VPC can communicate with a ClassicLink
+-- connection in the peer VPC over the VPC peering connection.
+newVpcPeeringConnectionOptionsDescription ::
+  VpcPeeringConnectionOptionsDescription
+newVpcPeeringConnectionOptionsDescription =
+  VpcPeeringConnectionOptionsDescription'
+    { allowDnsResolutionFromRemoteVpc =
+        Prelude.Nothing,
+      allowEgressFromLocalClassicLinkToRemoteVpc =
+        Prelude.Nothing,
+      allowEgressFromLocalVpcToRemoteClassicLink =
+        Prelude.Nothing
+    }
+
+-- | Indicates whether a local VPC can resolve public DNS hostnames to
+-- private IP addresses when queried from instances in a peer VPC.
+vpcPeeringConnectionOptionsDescription_allowDnsResolutionFromRemoteVpc :: Lens.Lens' VpcPeeringConnectionOptionsDescription (Prelude.Maybe Prelude.Bool)
+vpcPeeringConnectionOptionsDescription_allowDnsResolutionFromRemoteVpc = Lens.lens (\VpcPeeringConnectionOptionsDescription' {allowDnsResolutionFromRemoteVpc} -> allowDnsResolutionFromRemoteVpc) (\s@VpcPeeringConnectionOptionsDescription' {} a -> s {allowDnsResolutionFromRemoteVpc = a} :: VpcPeeringConnectionOptionsDescription)
+
+-- | Indicates whether a local ClassicLink connection can communicate with
+-- the peer VPC over the VPC peering connection.
+vpcPeeringConnectionOptionsDescription_allowEgressFromLocalClassicLinkToRemoteVpc :: Lens.Lens' VpcPeeringConnectionOptionsDescription (Prelude.Maybe Prelude.Bool)
+vpcPeeringConnectionOptionsDescription_allowEgressFromLocalClassicLinkToRemoteVpc = Lens.lens (\VpcPeeringConnectionOptionsDescription' {allowEgressFromLocalClassicLinkToRemoteVpc} -> allowEgressFromLocalClassicLinkToRemoteVpc) (\s@VpcPeeringConnectionOptionsDescription' {} a -> s {allowEgressFromLocalClassicLinkToRemoteVpc = a} :: VpcPeeringConnectionOptionsDescription)
+
+-- | Indicates whether a local VPC can communicate with a ClassicLink
+-- connection in the peer VPC over the VPC peering connection.
+vpcPeeringConnectionOptionsDescription_allowEgressFromLocalVpcToRemoteClassicLink :: Lens.Lens' VpcPeeringConnectionOptionsDescription (Prelude.Maybe Prelude.Bool)
+vpcPeeringConnectionOptionsDescription_allowEgressFromLocalVpcToRemoteClassicLink = Lens.lens (\VpcPeeringConnectionOptionsDescription' {allowEgressFromLocalVpcToRemoteClassicLink} -> allowEgressFromLocalVpcToRemoteClassicLink) (\s@VpcPeeringConnectionOptionsDescription' {} a -> s {allowEgressFromLocalVpcToRemoteClassicLink = a} :: VpcPeeringConnectionOptionsDescription)
+
+instance
+  Data.FromXML
+    VpcPeeringConnectionOptionsDescription
+  where
+  parseXML x =
+    VpcPeeringConnectionOptionsDescription'
+      Prelude.<$> (x Data..@? "allowDnsResolutionFromRemoteVpc")
+      Prelude.<*> ( x
+                      Data..@? "allowEgressFromLocalClassicLinkToRemoteVpc"
+                  )
+      Prelude.<*> ( x
+                      Data..@? "allowEgressFromLocalVpcToRemoteClassicLink"
+                  )
+
+instance
+  Prelude.Hashable
+    VpcPeeringConnectionOptionsDescription
+  where
+  hashWithSalt
+    _salt
+    VpcPeeringConnectionOptionsDescription' {..} =
+      _salt
+        `Prelude.hashWithSalt` allowDnsResolutionFromRemoteVpc
+        `Prelude.hashWithSalt` allowEgressFromLocalClassicLinkToRemoteVpc
+        `Prelude.hashWithSalt` allowEgressFromLocalVpcToRemoteClassicLink
+
+instance
+  Prelude.NFData
+    VpcPeeringConnectionOptionsDescription
+  where
+  rnf VpcPeeringConnectionOptionsDescription' {..} =
+    Prelude.rnf allowDnsResolutionFromRemoteVpc
+      `Prelude.seq` Prelude.rnf
+        allowEgressFromLocalClassicLinkToRemoteVpc
+      `Prelude.seq` Prelude.rnf
+        allowEgressFromLocalVpcToRemoteClassicLink
diff --git a/gen/Amazonka/EC2/Types/VpcPeeringConnectionStateReason.hs b/gen/Amazonka/EC2/Types/VpcPeeringConnectionStateReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcPeeringConnectionStateReason.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcPeeringConnectionStateReason
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcPeeringConnectionStateReason where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VpcPeeringConnectionStateReasonCode
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the status of a VPC peering connection.
+--
+-- /See:/ 'newVpcPeeringConnectionStateReason' smart constructor.
+data VpcPeeringConnectionStateReason = VpcPeeringConnectionStateReason'
+  { -- | The status of the VPC peering connection.
+    code :: Prelude.Maybe VpcPeeringConnectionStateReasonCode,
+    -- | A message that provides more information about the status, if
+    -- applicable.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcPeeringConnectionStateReason' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'vpcPeeringConnectionStateReason_code' - The status of the VPC peering connection.
+--
+-- 'message', 'vpcPeeringConnectionStateReason_message' - A message that provides more information about the status, if
+-- applicable.
+newVpcPeeringConnectionStateReason ::
+  VpcPeeringConnectionStateReason
+newVpcPeeringConnectionStateReason =
+  VpcPeeringConnectionStateReason'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The status of the VPC peering connection.
+vpcPeeringConnectionStateReason_code :: Lens.Lens' VpcPeeringConnectionStateReason (Prelude.Maybe VpcPeeringConnectionStateReasonCode)
+vpcPeeringConnectionStateReason_code = Lens.lens (\VpcPeeringConnectionStateReason' {code} -> code) (\s@VpcPeeringConnectionStateReason' {} a -> s {code = a} :: VpcPeeringConnectionStateReason)
+
+-- | A message that provides more information about the status, if
+-- applicable.
+vpcPeeringConnectionStateReason_message :: Lens.Lens' VpcPeeringConnectionStateReason (Prelude.Maybe Prelude.Text)
+vpcPeeringConnectionStateReason_message = Lens.lens (\VpcPeeringConnectionStateReason' {message} -> message) (\s@VpcPeeringConnectionStateReason' {} a -> s {message = a} :: VpcPeeringConnectionStateReason)
+
+instance Data.FromXML VpcPeeringConnectionStateReason where
+  parseXML x =
+    VpcPeeringConnectionStateReason'
+      Prelude.<$> (x Data..@? "code")
+      Prelude.<*> (x Data..@? "message")
+
+instance
+  Prelude.Hashable
+    VpcPeeringConnectionStateReason
+  where
+  hashWithSalt
+    _salt
+    VpcPeeringConnectionStateReason' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` message
+
+instance
+  Prelude.NFData
+    VpcPeeringConnectionStateReason
+  where
+  rnf VpcPeeringConnectionStateReason' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/EC2/Types/VpcPeeringConnectionStateReasonCode.hs b/gen/Amazonka/EC2/Types/VpcPeeringConnectionStateReasonCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcPeeringConnectionStateReasonCode.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcPeeringConnectionStateReasonCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcPeeringConnectionStateReasonCode
+  ( VpcPeeringConnectionStateReasonCode
+      ( ..,
+        VpcPeeringConnectionStateReasonCode_Active,
+        VpcPeeringConnectionStateReasonCode_Deleted,
+        VpcPeeringConnectionStateReasonCode_Deleting,
+        VpcPeeringConnectionStateReasonCode_Expired,
+        VpcPeeringConnectionStateReasonCode_Failed,
+        VpcPeeringConnectionStateReasonCode_Initiating_request,
+        VpcPeeringConnectionStateReasonCode_Pending_acceptance,
+        VpcPeeringConnectionStateReasonCode_Provisioning,
+        VpcPeeringConnectionStateReasonCode_Rejected
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcPeeringConnectionStateReasonCode = VpcPeeringConnectionStateReasonCode'
+  { fromVpcPeeringConnectionStateReasonCode ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcPeeringConnectionStateReasonCode_Active :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Active = VpcPeeringConnectionStateReasonCode' "active"
+
+pattern VpcPeeringConnectionStateReasonCode_Deleted :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Deleted = VpcPeeringConnectionStateReasonCode' "deleted"
+
+pattern VpcPeeringConnectionStateReasonCode_Deleting :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Deleting = VpcPeeringConnectionStateReasonCode' "deleting"
+
+pattern VpcPeeringConnectionStateReasonCode_Expired :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Expired = VpcPeeringConnectionStateReasonCode' "expired"
+
+pattern VpcPeeringConnectionStateReasonCode_Failed :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Failed = VpcPeeringConnectionStateReasonCode' "failed"
+
+pattern VpcPeeringConnectionStateReasonCode_Initiating_request :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Initiating_request = VpcPeeringConnectionStateReasonCode' "initiating-request"
+
+pattern VpcPeeringConnectionStateReasonCode_Pending_acceptance :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Pending_acceptance = VpcPeeringConnectionStateReasonCode' "pending-acceptance"
+
+pattern VpcPeeringConnectionStateReasonCode_Provisioning :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Provisioning = VpcPeeringConnectionStateReasonCode' "provisioning"
+
+pattern VpcPeeringConnectionStateReasonCode_Rejected :: VpcPeeringConnectionStateReasonCode
+pattern VpcPeeringConnectionStateReasonCode_Rejected = VpcPeeringConnectionStateReasonCode' "rejected"
+
+{-# COMPLETE
+  VpcPeeringConnectionStateReasonCode_Active,
+  VpcPeeringConnectionStateReasonCode_Deleted,
+  VpcPeeringConnectionStateReasonCode_Deleting,
+  VpcPeeringConnectionStateReasonCode_Expired,
+  VpcPeeringConnectionStateReasonCode_Failed,
+  VpcPeeringConnectionStateReasonCode_Initiating_request,
+  VpcPeeringConnectionStateReasonCode_Pending_acceptance,
+  VpcPeeringConnectionStateReasonCode_Provisioning,
+  VpcPeeringConnectionStateReasonCode_Rejected,
+  VpcPeeringConnectionStateReasonCode'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpcPeeringConnectionVpcInfo.hs b/gen/Amazonka/EC2/Types/VpcPeeringConnectionVpcInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcPeeringConnectionVpcInfo.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcPeeringConnectionVpcInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcPeeringConnectionVpcInfo where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CidrBlock
+import Amazonka.EC2.Types.Ipv6CidrBlock
+import Amazonka.EC2.Types.VpcPeeringConnectionOptionsDescription
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPC in a VPC peering connection.
+--
+-- /See:/ 'newVpcPeeringConnectionVpcInfo' smart constructor.
+data VpcPeeringConnectionVpcInfo = VpcPeeringConnectionVpcInfo'
+  { -- | The IPv4 CIDR block for the VPC.
+    cidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Information about the IPv4 CIDR blocks for the VPC.
+    cidrBlockSet :: Prelude.Maybe [CidrBlock],
+    -- | The IPv6 CIDR block for the VPC.
+    ipv6CidrBlockSet :: Prelude.Maybe [Ipv6CidrBlock],
+    -- | The ID of the Amazon Web Services account that owns the VPC.
+    ownerId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the VPC peering connection options for the accepter or
+    -- requester VPC.
+    peeringOptions :: Prelude.Maybe VpcPeeringConnectionOptionsDescription,
+    -- | The Region in which the VPC is located.
+    region :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPC.
+    vpcId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcPeeringConnectionVpcInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cidrBlock', 'vpcPeeringConnectionVpcInfo_cidrBlock' - The IPv4 CIDR block for the VPC.
+--
+-- 'cidrBlockSet', 'vpcPeeringConnectionVpcInfo_cidrBlockSet' - Information about the IPv4 CIDR blocks for the VPC.
+--
+-- 'ipv6CidrBlockSet', 'vpcPeeringConnectionVpcInfo_ipv6CidrBlockSet' - The IPv6 CIDR block for the VPC.
+--
+-- 'ownerId', 'vpcPeeringConnectionVpcInfo_ownerId' - The ID of the Amazon Web Services account that owns the VPC.
+--
+-- 'peeringOptions', 'vpcPeeringConnectionVpcInfo_peeringOptions' - Information about the VPC peering connection options for the accepter or
+-- requester VPC.
+--
+-- 'region', 'vpcPeeringConnectionVpcInfo_region' - The Region in which the VPC is located.
+--
+-- 'vpcId', 'vpcPeeringConnectionVpcInfo_vpcId' - The ID of the VPC.
+newVpcPeeringConnectionVpcInfo ::
+  VpcPeeringConnectionVpcInfo
+newVpcPeeringConnectionVpcInfo =
+  VpcPeeringConnectionVpcInfo'
+    { cidrBlock =
+        Prelude.Nothing,
+      cidrBlockSet = Prelude.Nothing,
+      ipv6CidrBlockSet = Prelude.Nothing,
+      ownerId = Prelude.Nothing,
+      peeringOptions = Prelude.Nothing,
+      region = Prelude.Nothing,
+      vpcId = Prelude.Nothing
+    }
+
+-- | The IPv4 CIDR block for the VPC.
+vpcPeeringConnectionVpcInfo_cidrBlock :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe Prelude.Text)
+vpcPeeringConnectionVpcInfo_cidrBlock = Lens.lens (\VpcPeeringConnectionVpcInfo' {cidrBlock} -> cidrBlock) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {cidrBlock = a} :: VpcPeeringConnectionVpcInfo)
+
+-- | Information about the IPv4 CIDR blocks for the VPC.
+vpcPeeringConnectionVpcInfo_cidrBlockSet :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe [CidrBlock])
+vpcPeeringConnectionVpcInfo_cidrBlockSet = Lens.lens (\VpcPeeringConnectionVpcInfo' {cidrBlockSet} -> cidrBlockSet) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {cidrBlockSet = a} :: VpcPeeringConnectionVpcInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv6 CIDR block for the VPC.
+vpcPeeringConnectionVpcInfo_ipv6CidrBlockSet :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe [Ipv6CidrBlock])
+vpcPeeringConnectionVpcInfo_ipv6CidrBlockSet = Lens.lens (\VpcPeeringConnectionVpcInfo' {ipv6CidrBlockSet} -> ipv6CidrBlockSet) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {ipv6CidrBlockSet = a} :: VpcPeeringConnectionVpcInfo) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the Amazon Web Services account that owns the VPC.
+vpcPeeringConnectionVpcInfo_ownerId :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe Prelude.Text)
+vpcPeeringConnectionVpcInfo_ownerId = Lens.lens (\VpcPeeringConnectionVpcInfo' {ownerId} -> ownerId) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {ownerId = a} :: VpcPeeringConnectionVpcInfo)
+
+-- | Information about the VPC peering connection options for the accepter or
+-- requester VPC.
+vpcPeeringConnectionVpcInfo_peeringOptions :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe VpcPeeringConnectionOptionsDescription)
+vpcPeeringConnectionVpcInfo_peeringOptions = Lens.lens (\VpcPeeringConnectionVpcInfo' {peeringOptions} -> peeringOptions) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {peeringOptions = a} :: VpcPeeringConnectionVpcInfo)
+
+-- | The Region in which the VPC is located.
+vpcPeeringConnectionVpcInfo_region :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe Prelude.Text)
+vpcPeeringConnectionVpcInfo_region = Lens.lens (\VpcPeeringConnectionVpcInfo' {region} -> region) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {region = a} :: VpcPeeringConnectionVpcInfo)
+
+-- | The ID of the VPC.
+vpcPeeringConnectionVpcInfo_vpcId :: Lens.Lens' VpcPeeringConnectionVpcInfo (Prelude.Maybe Prelude.Text)
+vpcPeeringConnectionVpcInfo_vpcId = Lens.lens (\VpcPeeringConnectionVpcInfo' {vpcId} -> vpcId) (\s@VpcPeeringConnectionVpcInfo' {} a -> s {vpcId = a} :: VpcPeeringConnectionVpcInfo)
+
+instance Data.FromXML VpcPeeringConnectionVpcInfo where
+  parseXML x =
+    VpcPeeringConnectionVpcInfo'
+      Prelude.<$> (x Data..@? "cidrBlock")
+      Prelude.<*> ( x
+                      Data..@? "cidrBlockSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "ipv6CidrBlockSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "ownerId")
+      Prelude.<*> (x Data..@? "peeringOptions")
+      Prelude.<*> (x Data..@? "region")
+      Prelude.<*> (x Data..@? "vpcId")
+
+instance Prelude.Hashable VpcPeeringConnectionVpcInfo where
+  hashWithSalt _salt VpcPeeringConnectionVpcInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` cidrBlock
+      `Prelude.hashWithSalt` cidrBlockSet
+      `Prelude.hashWithSalt` ipv6CidrBlockSet
+      `Prelude.hashWithSalt` ownerId
+      `Prelude.hashWithSalt` peeringOptions
+      `Prelude.hashWithSalt` region
+      `Prelude.hashWithSalt` vpcId
+
+instance Prelude.NFData VpcPeeringConnectionVpcInfo where
+  rnf VpcPeeringConnectionVpcInfo' {..} =
+    Prelude.rnf cidrBlock
+      `Prelude.seq` Prelude.rnf cidrBlockSet
+      `Prelude.seq` Prelude.rnf ipv6CidrBlockSet
+      `Prelude.seq` Prelude.rnf ownerId
+      `Prelude.seq` Prelude.rnf peeringOptions
+      `Prelude.seq` Prelude.rnf region
+      `Prelude.seq` Prelude.rnf vpcId
diff --git a/gen/Amazonka/EC2/Types/VpcState.hs b/gen/Amazonka/EC2/Types/VpcState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcState.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcState
+  ( VpcState
+      ( ..,
+        VpcState_Available,
+        VpcState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcState = VpcState'
+  { fromVpcState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcState_Available :: VpcState
+pattern VpcState_Available = VpcState' "available"
+
+pattern VpcState_Pending :: VpcState
+pattern VpcState_Pending = VpcState' "pending"
+
+{-# COMPLETE
+  VpcState_Available,
+  VpcState_Pending,
+  VpcState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpcTenancy.hs b/gen/Amazonka/EC2/Types/VpcTenancy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpcTenancy.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpcTenancy
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpcTenancy
+  ( VpcTenancy
+      ( ..,
+        VpcTenancy_Default
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpcTenancy = VpcTenancy'
+  { fromVpcTenancy ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpcTenancy_Default :: VpcTenancy
+pattern VpcTenancy_Default = VpcTenancy' "default"
+
+{-# COMPLETE
+  VpcTenancy_Default,
+  VpcTenancy'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpnConnection.hs b/gen/Amazonka/EC2/Types/VpnConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnConnection.hs
@@ -0,0 +1,289 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnConnection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnConnection where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GatewayAssociationState
+import Amazonka.EC2.Types.GatewayType
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VgwTelemetry
+import Amazonka.EC2.Types.VpnConnectionOptions
+import Amazonka.EC2.Types.VpnState
+import Amazonka.EC2.Types.VpnStaticRoute
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a VPN connection.
+--
+-- /See:/ 'newVpnConnection' smart constructor.
+data VpnConnection = VpnConnection'
+  { -- | The category of the VPN connection. A value of @VPN@ indicates an Amazon
+    -- Web Services VPN connection. A value of @VPN-Classic@ indicates an
+    -- Amazon Web Services Classic VPN connection.
+    category :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the core network.
+    coreNetworkArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the core network attachment.
+    coreNetworkAttachmentArn :: Prelude.Maybe Prelude.Text,
+    -- | The configuration information for the VPN connection\'s customer gateway
+    -- (in the native XML format). This element is always present in the
+    -- CreateVpnConnection response; however, it\'s present in the
+    -- DescribeVpnConnections response only if the VPN connection is in the
+    -- @pending@ or @available@ state.
+    customerGatewayConfiguration :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the gateway association.
+    gatewayAssociationState :: Prelude.Maybe GatewayAssociationState,
+    -- | The VPN connection options.
+    options :: Prelude.Maybe VpnConnectionOptions,
+    -- | The static routes associated with the VPN connection.
+    routes :: Prelude.Maybe [VpnStaticRoute],
+    -- | Any tags assigned to the VPN connection.
+    tags :: Prelude.Maybe [Tag],
+    -- | The ID of the transit gateway associated with the VPN connection.
+    transitGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the VPN tunnel.
+    vgwTelemetry :: Prelude.Maybe [VgwTelemetry],
+    -- | The ID of the virtual private gateway at the Amazon Web Services side of
+    -- the VPN connection.
+    vpnGatewayId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VPN connection.
+    vpnConnectionId :: Prelude.Text,
+    -- | The ID of the customer gateway at your end of the VPN connection.
+    customerGatewayId :: Prelude.Text,
+    -- | The current state of the VPN connection.
+    state :: VpnState,
+    -- | The type of VPN connection.
+    type' :: GatewayType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'category', 'vpnConnection_category' - The category of the VPN connection. A value of @VPN@ indicates an Amazon
+-- Web Services VPN connection. A value of @VPN-Classic@ indicates an
+-- Amazon Web Services Classic VPN connection.
+--
+-- 'coreNetworkArn', 'vpnConnection_coreNetworkArn' - The ARN of the core network.
+--
+-- 'coreNetworkAttachmentArn', 'vpnConnection_coreNetworkAttachmentArn' - The ARN of the core network attachment.
+--
+-- 'customerGatewayConfiguration', 'vpnConnection_customerGatewayConfiguration' - The configuration information for the VPN connection\'s customer gateway
+-- (in the native XML format). This element is always present in the
+-- CreateVpnConnection response; however, it\'s present in the
+-- DescribeVpnConnections response only if the VPN connection is in the
+-- @pending@ or @available@ state.
+--
+-- 'gatewayAssociationState', 'vpnConnection_gatewayAssociationState' - The current state of the gateway association.
+--
+-- 'options', 'vpnConnection_options' - The VPN connection options.
+--
+-- 'routes', 'vpnConnection_routes' - The static routes associated with the VPN connection.
+--
+-- 'tags', 'vpnConnection_tags' - Any tags assigned to the VPN connection.
+--
+-- 'transitGatewayId', 'vpnConnection_transitGatewayId' - The ID of the transit gateway associated with the VPN connection.
+--
+-- 'vgwTelemetry', 'vpnConnection_vgwTelemetry' - Information about the VPN tunnel.
+--
+-- 'vpnGatewayId', 'vpnConnection_vpnGatewayId' - The ID of the virtual private gateway at the Amazon Web Services side of
+-- the VPN connection.
+--
+-- 'vpnConnectionId', 'vpnConnection_vpnConnectionId' - The ID of the VPN connection.
+--
+-- 'customerGatewayId', 'vpnConnection_customerGatewayId' - The ID of the customer gateway at your end of the VPN connection.
+--
+-- 'state', 'vpnConnection_state' - The current state of the VPN connection.
+--
+-- 'type'', 'vpnConnection_type' - The type of VPN connection.
+newVpnConnection ::
+  -- | 'vpnConnectionId'
+  Prelude.Text ->
+  -- | 'customerGatewayId'
+  Prelude.Text ->
+  -- | 'state'
+  VpnState ->
+  -- | 'type''
+  GatewayType ->
+  VpnConnection
+newVpnConnection
+  pVpnConnectionId_
+  pCustomerGatewayId_
+  pState_
+  pType_ =
+    VpnConnection'
+      { category = Prelude.Nothing,
+        coreNetworkArn = Prelude.Nothing,
+        coreNetworkAttachmentArn = Prelude.Nothing,
+        customerGatewayConfiguration = Prelude.Nothing,
+        gatewayAssociationState = Prelude.Nothing,
+        options = Prelude.Nothing,
+        routes = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        transitGatewayId = Prelude.Nothing,
+        vgwTelemetry = Prelude.Nothing,
+        vpnGatewayId = Prelude.Nothing,
+        vpnConnectionId = pVpnConnectionId_,
+        customerGatewayId = pCustomerGatewayId_,
+        state = pState_,
+        type' = pType_
+      }
+
+-- | The category of the VPN connection. A value of @VPN@ indicates an Amazon
+-- Web Services VPN connection. A value of @VPN-Classic@ indicates an
+-- Amazon Web Services Classic VPN connection.
+vpnConnection_category :: Lens.Lens' VpnConnection (Prelude.Maybe Prelude.Text)
+vpnConnection_category = Lens.lens (\VpnConnection' {category} -> category) (\s@VpnConnection' {} a -> s {category = a} :: VpnConnection)
+
+-- | The ARN of the core network.
+vpnConnection_coreNetworkArn :: Lens.Lens' VpnConnection (Prelude.Maybe Prelude.Text)
+vpnConnection_coreNetworkArn = Lens.lens (\VpnConnection' {coreNetworkArn} -> coreNetworkArn) (\s@VpnConnection' {} a -> s {coreNetworkArn = a} :: VpnConnection)
+
+-- | The ARN of the core network attachment.
+vpnConnection_coreNetworkAttachmentArn :: Lens.Lens' VpnConnection (Prelude.Maybe Prelude.Text)
+vpnConnection_coreNetworkAttachmentArn = Lens.lens (\VpnConnection' {coreNetworkAttachmentArn} -> coreNetworkAttachmentArn) (\s@VpnConnection' {} a -> s {coreNetworkAttachmentArn = a} :: VpnConnection)
+
+-- | The configuration information for the VPN connection\'s customer gateway
+-- (in the native XML format). This element is always present in the
+-- CreateVpnConnection response; however, it\'s present in the
+-- DescribeVpnConnections response only if the VPN connection is in the
+-- @pending@ or @available@ state.
+vpnConnection_customerGatewayConfiguration :: Lens.Lens' VpnConnection (Prelude.Maybe Prelude.Text)
+vpnConnection_customerGatewayConfiguration = Lens.lens (\VpnConnection' {customerGatewayConfiguration} -> customerGatewayConfiguration) (\s@VpnConnection' {} a -> s {customerGatewayConfiguration = a} :: VpnConnection)
+
+-- | The current state of the gateway association.
+vpnConnection_gatewayAssociationState :: Lens.Lens' VpnConnection (Prelude.Maybe GatewayAssociationState)
+vpnConnection_gatewayAssociationState = Lens.lens (\VpnConnection' {gatewayAssociationState} -> gatewayAssociationState) (\s@VpnConnection' {} a -> s {gatewayAssociationState = a} :: VpnConnection)
+
+-- | The VPN connection options.
+vpnConnection_options :: Lens.Lens' VpnConnection (Prelude.Maybe VpnConnectionOptions)
+vpnConnection_options = Lens.lens (\VpnConnection' {options} -> options) (\s@VpnConnection' {} a -> s {options = a} :: VpnConnection)
+
+-- | The static routes associated with the VPN connection.
+vpnConnection_routes :: Lens.Lens' VpnConnection (Prelude.Maybe [VpnStaticRoute])
+vpnConnection_routes = Lens.lens (\VpnConnection' {routes} -> routes) (\s@VpnConnection' {} a -> s {routes = a} :: VpnConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any tags assigned to the VPN connection.
+vpnConnection_tags :: Lens.Lens' VpnConnection (Prelude.Maybe [Tag])
+vpnConnection_tags = Lens.lens (\VpnConnection' {tags} -> tags) (\s@VpnConnection' {} a -> s {tags = a} :: VpnConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the transit gateway associated with the VPN connection.
+vpnConnection_transitGatewayId :: Lens.Lens' VpnConnection (Prelude.Maybe Prelude.Text)
+vpnConnection_transitGatewayId = Lens.lens (\VpnConnection' {transitGatewayId} -> transitGatewayId) (\s@VpnConnection' {} a -> s {transitGatewayId = a} :: VpnConnection)
+
+-- | Information about the VPN tunnel.
+vpnConnection_vgwTelemetry :: Lens.Lens' VpnConnection (Prelude.Maybe [VgwTelemetry])
+vpnConnection_vgwTelemetry = Lens.lens (\VpnConnection' {vgwTelemetry} -> vgwTelemetry) (\s@VpnConnection' {} a -> s {vgwTelemetry = a} :: VpnConnection) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the virtual private gateway at the Amazon Web Services side of
+-- the VPN connection.
+vpnConnection_vpnGatewayId :: Lens.Lens' VpnConnection (Prelude.Maybe Prelude.Text)
+vpnConnection_vpnGatewayId = Lens.lens (\VpnConnection' {vpnGatewayId} -> vpnGatewayId) (\s@VpnConnection' {} a -> s {vpnGatewayId = a} :: VpnConnection)
+
+-- | The ID of the VPN connection.
+vpnConnection_vpnConnectionId :: Lens.Lens' VpnConnection Prelude.Text
+vpnConnection_vpnConnectionId = Lens.lens (\VpnConnection' {vpnConnectionId} -> vpnConnectionId) (\s@VpnConnection' {} a -> s {vpnConnectionId = a} :: VpnConnection)
+
+-- | The ID of the customer gateway at your end of the VPN connection.
+vpnConnection_customerGatewayId :: Lens.Lens' VpnConnection Prelude.Text
+vpnConnection_customerGatewayId = Lens.lens (\VpnConnection' {customerGatewayId} -> customerGatewayId) (\s@VpnConnection' {} a -> s {customerGatewayId = a} :: VpnConnection)
+
+-- | The current state of the VPN connection.
+vpnConnection_state :: Lens.Lens' VpnConnection VpnState
+vpnConnection_state = Lens.lens (\VpnConnection' {state} -> state) (\s@VpnConnection' {} a -> s {state = a} :: VpnConnection)
+
+-- | The type of VPN connection.
+vpnConnection_type :: Lens.Lens' VpnConnection GatewayType
+vpnConnection_type = Lens.lens (\VpnConnection' {type'} -> type') (\s@VpnConnection' {} a -> s {type' = a} :: VpnConnection)
+
+instance Data.FromXML VpnConnection where
+  parseXML x =
+    VpnConnection'
+      Prelude.<$> (x Data..@? "category")
+      Prelude.<*> (x Data..@? "coreNetworkArn")
+      Prelude.<*> (x Data..@? "coreNetworkAttachmentArn")
+      Prelude.<*> (x Data..@? "customerGatewayConfiguration")
+      Prelude.<*> (x Data..@? "gatewayAssociationState")
+      Prelude.<*> (x Data..@? "options")
+      Prelude.<*> ( x
+                      Data..@? "routes"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "transitGatewayId")
+      Prelude.<*> ( x
+                      Data..@? "vgwTelemetry"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpnGatewayId")
+      Prelude.<*> (x Data..@ "vpnConnectionId")
+      Prelude.<*> (x Data..@ "customerGatewayId")
+      Prelude.<*> (x Data..@ "state")
+      Prelude.<*> (x Data..@ "type")
+
+instance Prelude.Hashable VpnConnection where
+  hashWithSalt _salt VpnConnection' {..} =
+    _salt
+      `Prelude.hashWithSalt` category
+      `Prelude.hashWithSalt` coreNetworkArn
+      `Prelude.hashWithSalt` coreNetworkAttachmentArn
+      `Prelude.hashWithSalt` customerGatewayConfiguration
+      `Prelude.hashWithSalt` gatewayAssociationState
+      `Prelude.hashWithSalt` options
+      `Prelude.hashWithSalt` routes
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` transitGatewayId
+      `Prelude.hashWithSalt` vgwTelemetry
+      `Prelude.hashWithSalt` vpnGatewayId
+      `Prelude.hashWithSalt` vpnConnectionId
+      `Prelude.hashWithSalt` customerGatewayId
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData VpnConnection where
+  rnf VpnConnection' {..} =
+    Prelude.rnf category
+      `Prelude.seq` Prelude.rnf coreNetworkArn
+      `Prelude.seq` Prelude.rnf coreNetworkAttachmentArn
+      `Prelude.seq` Prelude.rnf customerGatewayConfiguration
+      `Prelude.seq` Prelude.rnf gatewayAssociationState
+      `Prelude.seq` Prelude.rnf options
+      `Prelude.seq` Prelude.rnf routes
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf transitGatewayId
+      `Prelude.seq` Prelude.rnf vgwTelemetry
+      `Prelude.seq` Prelude.rnf vpnGatewayId
+      `Prelude.seq` Prelude.rnf vpnConnectionId
+      `Prelude.seq` Prelude.rnf customerGatewayId
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/EC2/Types/VpnConnectionDeviceType.hs b/gen/Amazonka/EC2/Types/VpnConnectionDeviceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnConnectionDeviceType.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnConnectionDeviceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnConnectionDeviceType where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+-- | List of customer gateway devices that have a sample configuration file
+-- available for use. You can also see the list of device types with sample
+-- configuration files available under
+-- <https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html Your customer gateway device>
+-- in the /Amazon Web Services Site-to-Site VPN User Guide/.
+--
+-- /See:/ 'newVpnConnectionDeviceType' smart constructor.
+data VpnConnectionDeviceType = VpnConnectionDeviceType'
+  { -- | Customer gateway device platform.
+    platform :: Prelude.Maybe Prelude.Text,
+    -- | Customer gateway device software version.
+    software :: Prelude.Maybe Prelude.Text,
+    -- | Customer gateway device vendor.
+    vendor :: Prelude.Maybe Prelude.Text,
+    -- | Customer gateway device identifier.
+    vpnConnectionDeviceTypeId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnConnectionDeviceType' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'platform', 'vpnConnectionDeviceType_platform' - Customer gateway device platform.
+--
+-- 'software', 'vpnConnectionDeviceType_software' - Customer gateway device software version.
+--
+-- 'vendor', 'vpnConnectionDeviceType_vendor' - Customer gateway device vendor.
+--
+-- 'vpnConnectionDeviceTypeId', 'vpnConnectionDeviceType_vpnConnectionDeviceTypeId' - Customer gateway device identifier.
+newVpnConnectionDeviceType ::
+  VpnConnectionDeviceType
+newVpnConnectionDeviceType =
+  VpnConnectionDeviceType'
+    { platform =
+        Prelude.Nothing,
+      software = Prelude.Nothing,
+      vendor = Prelude.Nothing,
+      vpnConnectionDeviceTypeId = Prelude.Nothing
+    }
+
+-- | Customer gateway device platform.
+vpnConnectionDeviceType_platform :: Lens.Lens' VpnConnectionDeviceType (Prelude.Maybe Prelude.Text)
+vpnConnectionDeviceType_platform = Lens.lens (\VpnConnectionDeviceType' {platform} -> platform) (\s@VpnConnectionDeviceType' {} a -> s {platform = a} :: VpnConnectionDeviceType)
+
+-- | Customer gateway device software version.
+vpnConnectionDeviceType_software :: Lens.Lens' VpnConnectionDeviceType (Prelude.Maybe Prelude.Text)
+vpnConnectionDeviceType_software = Lens.lens (\VpnConnectionDeviceType' {software} -> software) (\s@VpnConnectionDeviceType' {} a -> s {software = a} :: VpnConnectionDeviceType)
+
+-- | Customer gateway device vendor.
+vpnConnectionDeviceType_vendor :: Lens.Lens' VpnConnectionDeviceType (Prelude.Maybe Prelude.Text)
+vpnConnectionDeviceType_vendor = Lens.lens (\VpnConnectionDeviceType' {vendor} -> vendor) (\s@VpnConnectionDeviceType' {} a -> s {vendor = a} :: VpnConnectionDeviceType)
+
+-- | Customer gateway device identifier.
+vpnConnectionDeviceType_vpnConnectionDeviceTypeId :: Lens.Lens' VpnConnectionDeviceType (Prelude.Maybe Prelude.Text)
+vpnConnectionDeviceType_vpnConnectionDeviceTypeId = Lens.lens (\VpnConnectionDeviceType' {vpnConnectionDeviceTypeId} -> vpnConnectionDeviceTypeId) (\s@VpnConnectionDeviceType' {} a -> s {vpnConnectionDeviceTypeId = a} :: VpnConnectionDeviceType)
+
+instance Data.FromXML VpnConnectionDeviceType where
+  parseXML x =
+    VpnConnectionDeviceType'
+      Prelude.<$> (x Data..@? "platform")
+      Prelude.<*> (x Data..@? "software")
+      Prelude.<*> (x Data..@? "vendor")
+      Prelude.<*> (x Data..@? "vpnConnectionDeviceTypeId")
+
+instance Prelude.Hashable VpnConnectionDeviceType where
+  hashWithSalt _salt VpnConnectionDeviceType' {..} =
+    _salt
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` software
+      `Prelude.hashWithSalt` vendor
+      `Prelude.hashWithSalt` vpnConnectionDeviceTypeId
+
+instance Prelude.NFData VpnConnectionDeviceType where
+  rnf VpnConnectionDeviceType' {..} =
+    Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf software
+      `Prelude.seq` Prelude.rnf vendor
+      `Prelude.seq` Prelude.rnf vpnConnectionDeviceTypeId
diff --git a/gen/Amazonka/EC2/Types/VpnConnectionOptions.hs b/gen/Amazonka/EC2/Types/VpnConnectionOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnConnectionOptions.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnConnectionOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnConnectionOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TunnelInsideIpVersion
+import Amazonka.EC2.Types.TunnelOption
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes VPN connection options.
+--
+-- /See:/ 'newVpnConnectionOptions' smart constructor.
+data VpnConnectionOptions = VpnConnectionOptions'
+  { -- | Indicates whether acceleration is enabled for the VPN connection.
+    enableAcceleration :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+    -- connection.
+    localIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+    -- connection.
+    localIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The type of IPv4 address assigned to the outside interface of the
+    -- customer gateway.
+    --
+    -- Valid values: @PrivateIpv4@ | @PublicIpv4@
+    --
+    -- Default: @PublicIpv4@
+    outsideIpAddressType :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+    remoteIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+    remoteIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the VPN connection uses static routes only. Static
+    -- routes must be used for devices that don\'t support BGP.
+    staticRoutesOnly :: Prelude.Maybe Prelude.Bool,
+    -- | The transit gateway attachment ID in use for the VPN tunnel.
+    transportTransitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the VPN tunnels process IPv4 or IPv6 traffic.
+    tunnelInsideIpVersion :: Prelude.Maybe TunnelInsideIpVersion,
+    -- | Indicates the VPN tunnel options.
+    tunnelOptions :: Prelude.Maybe [TunnelOption]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnConnectionOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableAcceleration', 'vpnConnectionOptions_enableAcceleration' - Indicates whether acceleration is enabled for the VPN connection.
+--
+-- 'localIpv4NetworkCidr', 'vpnConnectionOptions_localIpv4NetworkCidr' - The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- 'localIpv6NetworkCidr', 'vpnConnectionOptions_localIpv6NetworkCidr' - The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- 'outsideIpAddressType', 'vpnConnectionOptions_outsideIpAddressType' - The type of IPv4 address assigned to the outside interface of the
+-- customer gateway.
+--
+-- Valid values: @PrivateIpv4@ | @PublicIpv4@
+--
+-- Default: @PublicIpv4@
+--
+-- 'remoteIpv4NetworkCidr', 'vpnConnectionOptions_remoteIpv4NetworkCidr' - The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- 'remoteIpv6NetworkCidr', 'vpnConnectionOptions_remoteIpv6NetworkCidr' - The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- 'staticRoutesOnly', 'vpnConnectionOptions_staticRoutesOnly' - Indicates whether the VPN connection uses static routes only. Static
+-- routes must be used for devices that don\'t support BGP.
+--
+-- 'transportTransitGatewayAttachmentId', 'vpnConnectionOptions_transportTransitGatewayAttachmentId' - The transit gateway attachment ID in use for the VPN tunnel.
+--
+-- 'tunnelInsideIpVersion', 'vpnConnectionOptions_tunnelInsideIpVersion' - Indicates whether the VPN tunnels process IPv4 or IPv6 traffic.
+--
+-- 'tunnelOptions', 'vpnConnectionOptions_tunnelOptions' - Indicates the VPN tunnel options.
+newVpnConnectionOptions ::
+  VpnConnectionOptions
+newVpnConnectionOptions =
+  VpnConnectionOptions'
+    { enableAcceleration =
+        Prelude.Nothing,
+      localIpv4NetworkCidr = Prelude.Nothing,
+      localIpv6NetworkCidr = Prelude.Nothing,
+      outsideIpAddressType = Prelude.Nothing,
+      remoteIpv4NetworkCidr = Prelude.Nothing,
+      remoteIpv6NetworkCidr = Prelude.Nothing,
+      staticRoutesOnly = Prelude.Nothing,
+      transportTransitGatewayAttachmentId =
+        Prelude.Nothing,
+      tunnelInsideIpVersion = Prelude.Nothing,
+      tunnelOptions = Prelude.Nothing
+    }
+
+-- | Indicates whether acceleration is enabled for the VPN connection.
+vpnConnectionOptions_enableAcceleration :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Bool)
+vpnConnectionOptions_enableAcceleration = Lens.lens (\VpnConnectionOptions' {enableAcceleration} -> enableAcceleration) (\s@VpnConnectionOptions' {} a -> s {enableAcceleration = a} :: VpnConnectionOptions)
+
+-- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+vpnConnectionOptions_localIpv4NetworkCidr :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Text)
+vpnConnectionOptions_localIpv4NetworkCidr = Lens.lens (\VpnConnectionOptions' {localIpv4NetworkCidr} -> localIpv4NetworkCidr) (\s@VpnConnectionOptions' {} a -> s {localIpv4NetworkCidr = a} :: VpnConnectionOptions)
+
+-- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+vpnConnectionOptions_localIpv6NetworkCidr :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Text)
+vpnConnectionOptions_localIpv6NetworkCidr = Lens.lens (\VpnConnectionOptions' {localIpv6NetworkCidr} -> localIpv6NetworkCidr) (\s@VpnConnectionOptions' {} a -> s {localIpv6NetworkCidr = a} :: VpnConnectionOptions)
+
+-- | The type of IPv4 address assigned to the outside interface of the
+-- customer gateway.
+--
+-- Valid values: @PrivateIpv4@ | @PublicIpv4@
+--
+-- Default: @PublicIpv4@
+vpnConnectionOptions_outsideIpAddressType :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Text)
+vpnConnectionOptions_outsideIpAddressType = Lens.lens (\VpnConnectionOptions' {outsideIpAddressType} -> outsideIpAddressType) (\s@VpnConnectionOptions' {} a -> s {outsideIpAddressType = a} :: VpnConnectionOptions)
+
+-- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+vpnConnectionOptions_remoteIpv4NetworkCidr :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Text)
+vpnConnectionOptions_remoteIpv4NetworkCidr = Lens.lens (\VpnConnectionOptions' {remoteIpv4NetworkCidr} -> remoteIpv4NetworkCidr) (\s@VpnConnectionOptions' {} a -> s {remoteIpv4NetworkCidr = a} :: VpnConnectionOptions)
+
+-- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+vpnConnectionOptions_remoteIpv6NetworkCidr :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Text)
+vpnConnectionOptions_remoteIpv6NetworkCidr = Lens.lens (\VpnConnectionOptions' {remoteIpv6NetworkCidr} -> remoteIpv6NetworkCidr) (\s@VpnConnectionOptions' {} a -> s {remoteIpv6NetworkCidr = a} :: VpnConnectionOptions)
+
+-- | Indicates whether the VPN connection uses static routes only. Static
+-- routes must be used for devices that don\'t support BGP.
+vpnConnectionOptions_staticRoutesOnly :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Bool)
+vpnConnectionOptions_staticRoutesOnly = Lens.lens (\VpnConnectionOptions' {staticRoutesOnly} -> staticRoutesOnly) (\s@VpnConnectionOptions' {} a -> s {staticRoutesOnly = a} :: VpnConnectionOptions)
+
+-- | The transit gateway attachment ID in use for the VPN tunnel.
+vpnConnectionOptions_transportTransitGatewayAttachmentId :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe Prelude.Text)
+vpnConnectionOptions_transportTransitGatewayAttachmentId = Lens.lens (\VpnConnectionOptions' {transportTransitGatewayAttachmentId} -> transportTransitGatewayAttachmentId) (\s@VpnConnectionOptions' {} a -> s {transportTransitGatewayAttachmentId = a} :: VpnConnectionOptions)
+
+-- | Indicates whether the VPN tunnels process IPv4 or IPv6 traffic.
+vpnConnectionOptions_tunnelInsideIpVersion :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe TunnelInsideIpVersion)
+vpnConnectionOptions_tunnelInsideIpVersion = Lens.lens (\VpnConnectionOptions' {tunnelInsideIpVersion} -> tunnelInsideIpVersion) (\s@VpnConnectionOptions' {} a -> s {tunnelInsideIpVersion = a} :: VpnConnectionOptions)
+
+-- | Indicates the VPN tunnel options.
+vpnConnectionOptions_tunnelOptions :: Lens.Lens' VpnConnectionOptions (Prelude.Maybe [TunnelOption])
+vpnConnectionOptions_tunnelOptions = Lens.lens (\VpnConnectionOptions' {tunnelOptions} -> tunnelOptions) (\s@VpnConnectionOptions' {} a -> s {tunnelOptions = a} :: VpnConnectionOptions) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromXML VpnConnectionOptions where
+  parseXML x =
+    VpnConnectionOptions'
+      Prelude.<$> (x Data..@? "enableAcceleration")
+      Prelude.<*> (x Data..@? "localIpv4NetworkCidr")
+      Prelude.<*> (x Data..@? "localIpv6NetworkCidr")
+      Prelude.<*> (x Data..@? "outsideIpAddressType")
+      Prelude.<*> (x Data..@? "remoteIpv4NetworkCidr")
+      Prelude.<*> (x Data..@? "remoteIpv6NetworkCidr")
+      Prelude.<*> (x Data..@? "staticRoutesOnly")
+      Prelude.<*> (x Data..@? "transportTransitGatewayAttachmentId")
+      Prelude.<*> (x Data..@? "tunnelInsideIpVersion")
+      Prelude.<*> ( x
+                      Data..@? "tunnelOptionSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+
+instance Prelude.Hashable VpnConnectionOptions where
+  hashWithSalt _salt VpnConnectionOptions' {..} =
+    _salt
+      `Prelude.hashWithSalt` enableAcceleration
+      `Prelude.hashWithSalt` localIpv4NetworkCidr
+      `Prelude.hashWithSalt` localIpv6NetworkCidr
+      `Prelude.hashWithSalt` outsideIpAddressType
+      `Prelude.hashWithSalt` remoteIpv4NetworkCidr
+      `Prelude.hashWithSalt` remoteIpv6NetworkCidr
+      `Prelude.hashWithSalt` staticRoutesOnly
+      `Prelude.hashWithSalt` transportTransitGatewayAttachmentId
+      `Prelude.hashWithSalt` tunnelInsideIpVersion
+      `Prelude.hashWithSalt` tunnelOptions
+
+instance Prelude.NFData VpnConnectionOptions where
+  rnf VpnConnectionOptions' {..} =
+    Prelude.rnf enableAcceleration
+      `Prelude.seq` Prelude.rnf localIpv4NetworkCidr
+      `Prelude.seq` Prelude.rnf localIpv6NetworkCidr
+      `Prelude.seq` Prelude.rnf outsideIpAddressType
+      `Prelude.seq` Prelude.rnf remoteIpv4NetworkCidr
+      `Prelude.seq` Prelude.rnf remoteIpv6NetworkCidr
+      `Prelude.seq` Prelude.rnf staticRoutesOnly
+      `Prelude.seq` Prelude.rnf transportTransitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf tunnelInsideIpVersion
+      `Prelude.seq` Prelude.rnf tunnelOptions
diff --git a/gen/Amazonka/EC2/Types/VpnConnectionOptionsSpecification.hs b/gen/Amazonka/EC2/Types/VpnConnectionOptionsSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnConnectionOptionsSpecification.hs
@@ -0,0 +1,278 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnConnectionOptionsSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnConnectionOptionsSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.TunnelInsideIpVersion
+import Amazonka.EC2.Types.VpnTunnelOptionsSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes VPN connection options.
+--
+-- /See:/ 'newVpnConnectionOptionsSpecification' smart constructor.
+data VpnConnectionOptionsSpecification = VpnConnectionOptionsSpecification'
+  { -- | Indicate whether to enable acceleration for the VPN connection.
+    --
+    -- Default: @false@
+    enableAcceleration :: Prelude.Maybe Prelude.Bool,
+    -- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+    -- connection.
+    --
+    -- Default: @0.0.0.0\/0@
+    localIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+    -- connection.
+    --
+    -- Default: @::\/0@
+    localIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The type of IPv4 address assigned to the outside interface of the
+    -- customer gateway device.
+    --
+    -- Valid values: @PrivateIpv4@ | @PublicIpv4@
+    --
+    -- Default: @PublicIpv4@
+    outsideIpAddressType :: Prelude.Maybe Prelude.Text,
+    -- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+    --
+    -- Default: @0.0.0.0\/0@
+    remoteIpv4NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+    --
+    -- Default: @::\/0@
+    remoteIpv6NetworkCidr :: Prelude.Maybe Prelude.Text,
+    -- | Indicate whether the VPN connection uses static routes only. If you are
+    -- creating a VPN connection for a device that does not support BGP, you
+    -- must specify @true@. Use CreateVpnConnectionRoute to create a static
+    -- route.
+    --
+    -- Default: @false@
+    staticRoutesOnly :: Prelude.Maybe Prelude.Bool,
+    -- | The transit gateway attachment ID to use for the VPN tunnel.
+    --
+    -- Required if @OutsideIpAddressType@ is set to @PrivateIpv4@.
+    transportTransitGatewayAttachmentId :: Prelude.Maybe Prelude.Text,
+    -- | Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
+    --
+    -- Default: @ipv4@
+    tunnelInsideIpVersion :: Prelude.Maybe TunnelInsideIpVersion,
+    -- | The tunnel options for the VPN connection.
+    tunnelOptions :: Prelude.Maybe [VpnTunnelOptionsSpecification]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnConnectionOptionsSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enableAcceleration', 'vpnConnectionOptionsSpecification_enableAcceleration' - Indicate whether to enable acceleration for the VPN connection.
+--
+-- Default: @false@
+--
+-- 'localIpv4NetworkCidr', 'vpnConnectionOptionsSpecification_localIpv4NetworkCidr' - The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @0.0.0.0\/0@
+--
+-- 'localIpv6NetworkCidr', 'vpnConnectionOptionsSpecification_localIpv6NetworkCidr' - The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @::\/0@
+--
+-- 'outsideIpAddressType', 'vpnConnectionOptionsSpecification_outsideIpAddressType' - The type of IPv4 address assigned to the outside interface of the
+-- customer gateway device.
+--
+-- Valid values: @PrivateIpv4@ | @PublicIpv4@
+--
+-- Default: @PublicIpv4@
+--
+-- 'remoteIpv4NetworkCidr', 'vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr' - The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @0.0.0.0\/0@
+--
+-- 'remoteIpv6NetworkCidr', 'vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr' - The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @::\/0@
+--
+-- 'staticRoutesOnly', 'vpnConnectionOptionsSpecification_staticRoutesOnly' - Indicate whether the VPN connection uses static routes only. If you are
+-- creating a VPN connection for a device that does not support BGP, you
+-- must specify @true@. Use CreateVpnConnectionRoute to create a static
+-- route.
+--
+-- Default: @false@
+--
+-- 'transportTransitGatewayAttachmentId', 'vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId' - The transit gateway attachment ID to use for the VPN tunnel.
+--
+-- Required if @OutsideIpAddressType@ is set to @PrivateIpv4@.
+--
+-- 'tunnelInsideIpVersion', 'vpnConnectionOptionsSpecification_tunnelInsideIpVersion' - Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
+--
+-- Default: @ipv4@
+--
+-- 'tunnelOptions', 'vpnConnectionOptionsSpecification_tunnelOptions' - The tunnel options for the VPN connection.
+newVpnConnectionOptionsSpecification ::
+  VpnConnectionOptionsSpecification
+newVpnConnectionOptionsSpecification =
+  VpnConnectionOptionsSpecification'
+    { enableAcceleration =
+        Prelude.Nothing,
+      localIpv4NetworkCidr = Prelude.Nothing,
+      localIpv6NetworkCidr = Prelude.Nothing,
+      outsideIpAddressType = Prelude.Nothing,
+      remoteIpv4NetworkCidr = Prelude.Nothing,
+      remoteIpv6NetworkCidr = Prelude.Nothing,
+      staticRoutesOnly = Prelude.Nothing,
+      transportTransitGatewayAttachmentId =
+        Prelude.Nothing,
+      tunnelInsideIpVersion = Prelude.Nothing,
+      tunnelOptions = Prelude.Nothing
+    }
+
+-- | Indicate whether to enable acceleration for the VPN connection.
+--
+-- Default: @false@
+vpnConnectionOptionsSpecification_enableAcceleration :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Bool)
+vpnConnectionOptionsSpecification_enableAcceleration = Lens.lens (\VpnConnectionOptionsSpecification' {enableAcceleration} -> enableAcceleration) (\s@VpnConnectionOptionsSpecification' {} a -> s {enableAcceleration = a} :: VpnConnectionOptionsSpecification)
+
+-- | The IPv4 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @0.0.0.0\/0@
+vpnConnectionOptionsSpecification_localIpv4NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnConnectionOptionsSpecification_localIpv4NetworkCidr = Lens.lens (\VpnConnectionOptionsSpecification' {localIpv4NetworkCidr} -> localIpv4NetworkCidr) (\s@VpnConnectionOptionsSpecification' {} a -> s {localIpv4NetworkCidr = a} :: VpnConnectionOptionsSpecification)
+
+-- | The IPv6 CIDR on the customer gateway (on-premises) side of the VPN
+-- connection.
+--
+-- Default: @::\/0@
+vpnConnectionOptionsSpecification_localIpv6NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnConnectionOptionsSpecification_localIpv6NetworkCidr = Lens.lens (\VpnConnectionOptionsSpecification' {localIpv6NetworkCidr} -> localIpv6NetworkCidr) (\s@VpnConnectionOptionsSpecification' {} a -> s {localIpv6NetworkCidr = a} :: VpnConnectionOptionsSpecification)
+
+-- | The type of IPv4 address assigned to the outside interface of the
+-- customer gateway device.
+--
+-- Valid values: @PrivateIpv4@ | @PublicIpv4@
+--
+-- Default: @PublicIpv4@
+vpnConnectionOptionsSpecification_outsideIpAddressType :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnConnectionOptionsSpecification_outsideIpAddressType = Lens.lens (\VpnConnectionOptionsSpecification' {outsideIpAddressType} -> outsideIpAddressType) (\s@VpnConnectionOptionsSpecification' {} a -> s {outsideIpAddressType = a} :: VpnConnectionOptionsSpecification)
+
+-- | The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @0.0.0.0\/0@
+vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnConnectionOptionsSpecification_remoteIpv4NetworkCidr = Lens.lens (\VpnConnectionOptionsSpecification' {remoteIpv4NetworkCidr} -> remoteIpv4NetworkCidr) (\s@VpnConnectionOptionsSpecification' {} a -> s {remoteIpv4NetworkCidr = a} :: VpnConnectionOptionsSpecification)
+
+-- | The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
+--
+-- Default: @::\/0@
+vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnConnectionOptionsSpecification_remoteIpv6NetworkCidr = Lens.lens (\VpnConnectionOptionsSpecification' {remoteIpv6NetworkCidr} -> remoteIpv6NetworkCidr) (\s@VpnConnectionOptionsSpecification' {} a -> s {remoteIpv6NetworkCidr = a} :: VpnConnectionOptionsSpecification)
+
+-- | Indicate whether the VPN connection uses static routes only. If you are
+-- creating a VPN connection for a device that does not support BGP, you
+-- must specify @true@. Use CreateVpnConnectionRoute to create a static
+-- route.
+--
+-- Default: @false@
+vpnConnectionOptionsSpecification_staticRoutesOnly :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Bool)
+vpnConnectionOptionsSpecification_staticRoutesOnly = Lens.lens (\VpnConnectionOptionsSpecification' {staticRoutesOnly} -> staticRoutesOnly) (\s@VpnConnectionOptionsSpecification' {} a -> s {staticRoutesOnly = a} :: VpnConnectionOptionsSpecification)
+
+-- | The transit gateway attachment ID to use for the VPN tunnel.
+--
+-- Required if @OutsideIpAddressType@ is set to @PrivateIpv4@.
+vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnConnectionOptionsSpecification_transportTransitGatewayAttachmentId = Lens.lens (\VpnConnectionOptionsSpecification' {transportTransitGatewayAttachmentId} -> transportTransitGatewayAttachmentId) (\s@VpnConnectionOptionsSpecification' {} a -> s {transportTransitGatewayAttachmentId = a} :: VpnConnectionOptionsSpecification)
+
+-- | Indicate whether the VPN tunnels process IPv4 or IPv6 traffic.
+--
+-- Default: @ipv4@
+vpnConnectionOptionsSpecification_tunnelInsideIpVersion :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe TunnelInsideIpVersion)
+vpnConnectionOptionsSpecification_tunnelInsideIpVersion = Lens.lens (\VpnConnectionOptionsSpecification' {tunnelInsideIpVersion} -> tunnelInsideIpVersion) (\s@VpnConnectionOptionsSpecification' {} a -> s {tunnelInsideIpVersion = a} :: VpnConnectionOptionsSpecification)
+
+-- | The tunnel options for the VPN connection.
+vpnConnectionOptionsSpecification_tunnelOptions :: Lens.Lens' VpnConnectionOptionsSpecification (Prelude.Maybe [VpnTunnelOptionsSpecification])
+vpnConnectionOptionsSpecification_tunnelOptions = Lens.lens (\VpnConnectionOptionsSpecification' {tunnelOptions} -> tunnelOptions) (\s@VpnConnectionOptionsSpecification' {} a -> s {tunnelOptions = a} :: VpnConnectionOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Prelude.Hashable
+    VpnConnectionOptionsSpecification
+  where
+  hashWithSalt
+    _salt
+    VpnConnectionOptionsSpecification' {..} =
+      _salt
+        `Prelude.hashWithSalt` enableAcceleration
+        `Prelude.hashWithSalt` localIpv4NetworkCidr
+        `Prelude.hashWithSalt` localIpv6NetworkCidr
+        `Prelude.hashWithSalt` outsideIpAddressType
+        `Prelude.hashWithSalt` remoteIpv4NetworkCidr
+        `Prelude.hashWithSalt` remoteIpv6NetworkCidr
+        `Prelude.hashWithSalt` staticRoutesOnly
+        `Prelude.hashWithSalt` transportTransitGatewayAttachmentId
+        `Prelude.hashWithSalt` tunnelInsideIpVersion
+        `Prelude.hashWithSalt` tunnelOptions
+
+instance
+  Prelude.NFData
+    VpnConnectionOptionsSpecification
+  where
+  rnf VpnConnectionOptionsSpecification' {..} =
+    Prelude.rnf enableAcceleration
+      `Prelude.seq` Prelude.rnf localIpv4NetworkCidr
+      `Prelude.seq` Prelude.rnf localIpv6NetworkCidr
+      `Prelude.seq` Prelude.rnf outsideIpAddressType
+      `Prelude.seq` Prelude.rnf remoteIpv4NetworkCidr
+      `Prelude.seq` Prelude.rnf remoteIpv6NetworkCidr
+      `Prelude.seq` Prelude.rnf staticRoutesOnly
+      `Prelude.seq` Prelude.rnf transportTransitGatewayAttachmentId
+      `Prelude.seq` Prelude.rnf tunnelInsideIpVersion
+      `Prelude.seq` Prelude.rnf tunnelOptions
+
+instance
+  Data.ToQuery
+    VpnConnectionOptionsSpecification
+  where
+  toQuery VpnConnectionOptionsSpecification' {..} =
+    Prelude.mconcat
+      [ "EnableAcceleration" Data.=: enableAcceleration,
+        "LocalIpv4NetworkCidr" Data.=: localIpv4NetworkCidr,
+        "LocalIpv6NetworkCidr" Data.=: localIpv6NetworkCidr,
+        "OutsideIpAddressType" Data.=: outsideIpAddressType,
+        "RemoteIpv4NetworkCidr"
+          Data.=: remoteIpv4NetworkCidr,
+        "RemoteIpv6NetworkCidr"
+          Data.=: remoteIpv6NetworkCidr,
+        "StaticRoutesOnly" Data.=: staticRoutesOnly,
+        "TransportTransitGatewayAttachmentId"
+          Data.=: transportTransitGatewayAttachmentId,
+        "TunnelInsideIpVersion"
+          Data.=: tunnelInsideIpVersion,
+        Data.toQuery
+          ( Data.toQueryList "TunnelOptions"
+              Prelude.<$> tunnelOptions
+          )
+      ]
diff --git a/gen/Amazonka/EC2/Types/VpnEcmpSupportValue.hs b/gen/Amazonka/EC2/Types/VpnEcmpSupportValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnEcmpSupportValue.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnEcmpSupportValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnEcmpSupportValue
+  ( VpnEcmpSupportValue
+      ( ..,
+        VpnEcmpSupportValue_Disable,
+        VpnEcmpSupportValue_Enable
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpnEcmpSupportValue = VpnEcmpSupportValue'
+  { fromVpnEcmpSupportValue ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpnEcmpSupportValue_Disable :: VpnEcmpSupportValue
+pattern VpnEcmpSupportValue_Disable = VpnEcmpSupportValue' "disable"
+
+pattern VpnEcmpSupportValue_Enable :: VpnEcmpSupportValue
+pattern VpnEcmpSupportValue_Enable = VpnEcmpSupportValue' "enable"
+
+{-# COMPLETE
+  VpnEcmpSupportValue_Disable,
+  VpnEcmpSupportValue_Enable,
+  VpnEcmpSupportValue'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpnGateway.hs b/gen/Amazonka/EC2/Types/VpnGateway.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnGateway.hs
@@ -0,0 +1,159 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnGateway
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnGateway where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.GatewayType
+import Amazonka.EC2.Types.Tag
+import Amazonka.EC2.Types.VpcAttachment
+import Amazonka.EC2.Types.VpnState
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a virtual private gateway.
+--
+-- /See:/ 'newVpnGateway' smart constructor.
+data VpnGateway = VpnGateway'
+  { -- | The private Autonomous System Number (ASN) for the Amazon side of a BGP
+    -- session.
+    amazonSideAsn :: Prelude.Maybe Prelude.Integer,
+    -- | The Availability Zone where the virtual private gateway was created, if
+    -- applicable. This field may be empty or not returned.
+    availabilityZone :: Prelude.Maybe Prelude.Text,
+    -- | The current state of the virtual private gateway.
+    state :: Prelude.Maybe VpnState,
+    -- | Any tags assigned to the virtual private gateway.
+    tags :: Prelude.Maybe [Tag],
+    -- | The type of VPN connection the virtual private gateway supports.
+    type' :: Prelude.Maybe GatewayType,
+    -- | Any VPCs attached to the virtual private gateway.
+    vpcAttachments :: Prelude.Maybe [VpcAttachment],
+    -- | The ID of the virtual private gateway.
+    vpnGatewayId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnGateway' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amazonSideAsn', 'vpnGateway_amazonSideAsn' - The private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session.
+--
+-- 'availabilityZone', 'vpnGateway_availabilityZone' - The Availability Zone where the virtual private gateway was created, if
+-- applicable. This field may be empty or not returned.
+--
+-- 'state', 'vpnGateway_state' - The current state of the virtual private gateway.
+--
+-- 'tags', 'vpnGateway_tags' - Any tags assigned to the virtual private gateway.
+--
+-- 'type'', 'vpnGateway_type' - The type of VPN connection the virtual private gateway supports.
+--
+-- 'vpcAttachments', 'vpnGateway_vpcAttachments' - Any VPCs attached to the virtual private gateway.
+--
+-- 'vpnGatewayId', 'vpnGateway_vpnGatewayId' - The ID of the virtual private gateway.
+newVpnGateway ::
+  VpnGateway
+newVpnGateway =
+  VpnGateway'
+    { amazonSideAsn = Prelude.Nothing,
+      availabilityZone = Prelude.Nothing,
+      state = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      vpcAttachments = Prelude.Nothing,
+      vpnGatewayId = Prelude.Nothing
+    }
+
+-- | The private Autonomous System Number (ASN) for the Amazon side of a BGP
+-- session.
+vpnGateway_amazonSideAsn :: Lens.Lens' VpnGateway (Prelude.Maybe Prelude.Integer)
+vpnGateway_amazonSideAsn = Lens.lens (\VpnGateway' {amazonSideAsn} -> amazonSideAsn) (\s@VpnGateway' {} a -> s {amazonSideAsn = a} :: VpnGateway)
+
+-- | The Availability Zone where the virtual private gateway was created, if
+-- applicable. This field may be empty or not returned.
+vpnGateway_availabilityZone :: Lens.Lens' VpnGateway (Prelude.Maybe Prelude.Text)
+vpnGateway_availabilityZone = Lens.lens (\VpnGateway' {availabilityZone} -> availabilityZone) (\s@VpnGateway' {} a -> s {availabilityZone = a} :: VpnGateway)
+
+-- | The current state of the virtual private gateway.
+vpnGateway_state :: Lens.Lens' VpnGateway (Prelude.Maybe VpnState)
+vpnGateway_state = Lens.lens (\VpnGateway' {state} -> state) (\s@VpnGateway' {} a -> s {state = a} :: VpnGateway)
+
+-- | Any tags assigned to the virtual private gateway.
+vpnGateway_tags :: Lens.Lens' VpnGateway (Prelude.Maybe [Tag])
+vpnGateway_tags = Lens.lens (\VpnGateway' {tags} -> tags) (\s@VpnGateway' {} a -> s {tags = a} :: VpnGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of VPN connection the virtual private gateway supports.
+vpnGateway_type :: Lens.Lens' VpnGateway (Prelude.Maybe GatewayType)
+vpnGateway_type = Lens.lens (\VpnGateway' {type'} -> type') (\s@VpnGateway' {} a -> s {type' = a} :: VpnGateway)
+
+-- | Any VPCs attached to the virtual private gateway.
+vpnGateway_vpcAttachments :: Lens.Lens' VpnGateway (Prelude.Maybe [VpcAttachment])
+vpnGateway_vpcAttachments = Lens.lens (\VpnGateway' {vpcAttachments} -> vpcAttachments) (\s@VpnGateway' {} a -> s {vpcAttachments = a} :: VpnGateway) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the virtual private gateway.
+vpnGateway_vpnGatewayId :: Lens.Lens' VpnGateway (Prelude.Maybe Prelude.Text)
+vpnGateway_vpnGatewayId = Lens.lens (\VpnGateway' {vpnGatewayId} -> vpnGatewayId) (\s@VpnGateway' {} a -> s {vpnGatewayId = a} :: VpnGateway)
+
+instance Data.FromXML VpnGateway where
+  parseXML x =
+    VpnGateway'
+      Prelude.<$> (x Data..@? "amazonSideAsn")
+      Prelude.<*> (x Data..@? "availabilityZone")
+      Prelude.<*> (x Data..@? "state")
+      Prelude.<*> ( x
+                      Data..@? "tagSet"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "type")
+      Prelude.<*> ( x
+                      Data..@? "attachments"
+                      Core..!@ Prelude.mempty
+                      Prelude.>>= Core.may (Data.parseXMLList "item")
+                  )
+      Prelude.<*> (x Data..@? "vpnGatewayId")
+
+instance Prelude.Hashable VpnGateway where
+  hashWithSalt _salt VpnGateway' {..} =
+    _salt
+      `Prelude.hashWithSalt` amazonSideAsn
+      `Prelude.hashWithSalt` availabilityZone
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` vpcAttachments
+      `Prelude.hashWithSalt` vpnGatewayId
+
+instance Prelude.NFData VpnGateway where
+  rnf VpnGateway' {..} =
+    Prelude.rnf amazonSideAsn
+      `Prelude.seq` Prelude.rnf availabilityZone
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf vpcAttachments
+      `Prelude.seq` Prelude.rnf vpnGatewayId
diff --git a/gen/Amazonka/EC2/Types/VpnProtocol.hs b/gen/Amazonka/EC2/Types/VpnProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnProtocol.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnProtocol
+  ( VpnProtocol
+      ( ..,
+        VpnProtocol_Openvpn
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpnProtocol = VpnProtocol'
+  { fromVpnProtocol ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpnProtocol_Openvpn :: VpnProtocol
+pattern VpnProtocol_Openvpn = VpnProtocol' "openvpn"
+
+{-# COMPLETE
+  VpnProtocol_Openvpn,
+  VpnProtocol'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpnState.hs b/gen/Amazonka/EC2/Types/VpnState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnState.hs
@@ -0,0 +1,82 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnState
+  ( VpnState
+      ( ..,
+        VpnState_Available,
+        VpnState_Deleted,
+        VpnState_Deleting,
+        VpnState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpnState = VpnState'
+  { fromVpnState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpnState_Available :: VpnState
+pattern VpnState_Available = VpnState' "available"
+
+pattern VpnState_Deleted :: VpnState
+pattern VpnState_Deleted = VpnState' "deleted"
+
+pattern VpnState_Deleting :: VpnState
+pattern VpnState_Deleting = VpnState' "deleting"
+
+pattern VpnState_Pending :: VpnState
+pattern VpnState_Pending = VpnState' "pending"
+
+{-# COMPLETE
+  VpnState_Available,
+  VpnState_Deleted,
+  VpnState_Deleting,
+  VpnState_Pending,
+  VpnState'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpnStaticRoute.hs b/gen/Amazonka/EC2/Types/VpnStaticRoute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnStaticRoute.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnStaticRoute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnStaticRoute where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.VpnState
+import Amazonka.EC2.Types.VpnStaticRouteSource
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a static route for a VPN connection.
+--
+-- /See:/ 'newVpnStaticRoute' smart constructor.
+data VpnStaticRoute = VpnStaticRoute'
+  { -- | The CIDR block associated with the local subnet of the customer data
+    -- center.
+    destinationCidrBlock :: Prelude.Maybe Prelude.Text,
+    -- | Indicates how the routes were provided.
+    source :: Prelude.Maybe VpnStaticRouteSource,
+    -- | The current state of the static route.
+    state :: Prelude.Maybe VpnState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnStaticRoute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationCidrBlock', 'vpnStaticRoute_destinationCidrBlock' - The CIDR block associated with the local subnet of the customer data
+-- center.
+--
+-- 'source', 'vpnStaticRoute_source' - Indicates how the routes were provided.
+--
+-- 'state', 'vpnStaticRoute_state' - The current state of the static route.
+newVpnStaticRoute ::
+  VpnStaticRoute
+newVpnStaticRoute =
+  VpnStaticRoute'
+    { destinationCidrBlock =
+        Prelude.Nothing,
+      source = Prelude.Nothing,
+      state = Prelude.Nothing
+    }
+
+-- | The CIDR block associated with the local subnet of the customer data
+-- center.
+vpnStaticRoute_destinationCidrBlock :: Lens.Lens' VpnStaticRoute (Prelude.Maybe Prelude.Text)
+vpnStaticRoute_destinationCidrBlock = Lens.lens (\VpnStaticRoute' {destinationCidrBlock} -> destinationCidrBlock) (\s@VpnStaticRoute' {} a -> s {destinationCidrBlock = a} :: VpnStaticRoute)
+
+-- | Indicates how the routes were provided.
+vpnStaticRoute_source :: Lens.Lens' VpnStaticRoute (Prelude.Maybe VpnStaticRouteSource)
+vpnStaticRoute_source = Lens.lens (\VpnStaticRoute' {source} -> source) (\s@VpnStaticRoute' {} a -> s {source = a} :: VpnStaticRoute)
+
+-- | The current state of the static route.
+vpnStaticRoute_state :: Lens.Lens' VpnStaticRoute (Prelude.Maybe VpnState)
+vpnStaticRoute_state = Lens.lens (\VpnStaticRoute' {state} -> state) (\s@VpnStaticRoute' {} a -> s {state = a} :: VpnStaticRoute)
+
+instance Data.FromXML VpnStaticRoute where
+  parseXML x =
+    VpnStaticRoute'
+      Prelude.<$> (x Data..@? "destinationCidrBlock")
+      Prelude.<*> (x Data..@? "source")
+      Prelude.<*> (x Data..@? "state")
+
+instance Prelude.Hashable VpnStaticRoute where
+  hashWithSalt _salt VpnStaticRoute' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationCidrBlock
+      `Prelude.hashWithSalt` source
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData VpnStaticRoute where
+  rnf VpnStaticRoute' {..} =
+    Prelude.rnf destinationCidrBlock
+      `Prelude.seq` Prelude.rnf source
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/EC2/Types/VpnStaticRouteSource.hs b/gen/Amazonka/EC2/Types/VpnStaticRouteSource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnStaticRouteSource.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnStaticRouteSource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnStaticRouteSource
+  ( VpnStaticRouteSource
+      ( ..,
+        VpnStaticRouteSource_Static
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype VpnStaticRouteSource = VpnStaticRouteSource'
+  { fromVpnStaticRouteSource ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern VpnStaticRouteSource_Static :: VpnStaticRouteSource
+pattern VpnStaticRouteSource_Static = VpnStaticRouteSource' "Static"
+
+{-# COMPLETE
+  VpnStaticRouteSource_Static,
+  VpnStaticRouteSource'
+  #-}
diff --git a/gen/Amazonka/EC2/Types/VpnTunnelLogOptions.hs b/gen/Amazonka/EC2/Types/VpnTunnelLogOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnTunnelLogOptions.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnTunnelLogOptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnTunnelLogOptions where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CloudWatchLogOptions
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for logging VPN tunnel activity.
+--
+-- /See:/ 'newVpnTunnelLogOptions' smart constructor.
+data VpnTunnelLogOptions = VpnTunnelLogOptions'
+  { -- | Options for sending VPN tunnel logs to CloudWatch.
+    cloudWatchLogOptions :: Prelude.Maybe CloudWatchLogOptions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnTunnelLogOptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogOptions', 'vpnTunnelLogOptions_cloudWatchLogOptions' - Options for sending VPN tunnel logs to CloudWatch.
+newVpnTunnelLogOptions ::
+  VpnTunnelLogOptions
+newVpnTunnelLogOptions =
+  VpnTunnelLogOptions'
+    { cloudWatchLogOptions =
+        Prelude.Nothing
+    }
+
+-- | Options for sending VPN tunnel logs to CloudWatch.
+vpnTunnelLogOptions_cloudWatchLogOptions :: Lens.Lens' VpnTunnelLogOptions (Prelude.Maybe CloudWatchLogOptions)
+vpnTunnelLogOptions_cloudWatchLogOptions = Lens.lens (\VpnTunnelLogOptions' {cloudWatchLogOptions} -> cloudWatchLogOptions) (\s@VpnTunnelLogOptions' {} a -> s {cloudWatchLogOptions = a} :: VpnTunnelLogOptions)
+
+instance Data.FromXML VpnTunnelLogOptions where
+  parseXML x =
+    VpnTunnelLogOptions'
+      Prelude.<$> (x Data..@? "cloudWatchLogOptions")
+
+instance Prelude.Hashable VpnTunnelLogOptions where
+  hashWithSalt _salt VpnTunnelLogOptions' {..} =
+    _salt `Prelude.hashWithSalt` cloudWatchLogOptions
+
+instance Prelude.NFData VpnTunnelLogOptions where
+  rnf VpnTunnelLogOptions' {..} =
+    Prelude.rnf cloudWatchLogOptions
diff --git a/gen/Amazonka/EC2/Types/VpnTunnelLogOptionsSpecification.hs b/gen/Amazonka/EC2/Types/VpnTunnelLogOptionsSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnTunnelLogOptionsSpecification.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.CloudWatchLogOptionsSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | Options for logging VPN tunnel activity.
+--
+-- /See:/ 'newVpnTunnelLogOptionsSpecification' smart constructor.
+data VpnTunnelLogOptionsSpecification = VpnTunnelLogOptionsSpecification'
+  { -- | Options for sending VPN tunnel logs to CloudWatch.
+    cloudWatchLogOptions :: Prelude.Maybe CloudWatchLogOptionsSpecification
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnTunnelLogOptionsSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cloudWatchLogOptions', 'vpnTunnelLogOptionsSpecification_cloudWatchLogOptions' - Options for sending VPN tunnel logs to CloudWatch.
+newVpnTunnelLogOptionsSpecification ::
+  VpnTunnelLogOptionsSpecification
+newVpnTunnelLogOptionsSpecification =
+  VpnTunnelLogOptionsSpecification'
+    { cloudWatchLogOptions =
+        Prelude.Nothing
+    }
+
+-- | Options for sending VPN tunnel logs to CloudWatch.
+vpnTunnelLogOptionsSpecification_cloudWatchLogOptions :: Lens.Lens' VpnTunnelLogOptionsSpecification (Prelude.Maybe CloudWatchLogOptionsSpecification)
+vpnTunnelLogOptionsSpecification_cloudWatchLogOptions = Lens.lens (\VpnTunnelLogOptionsSpecification' {cloudWatchLogOptions} -> cloudWatchLogOptions) (\s@VpnTunnelLogOptionsSpecification' {} a -> s {cloudWatchLogOptions = a} :: VpnTunnelLogOptionsSpecification)
+
+instance
+  Prelude.Hashable
+    VpnTunnelLogOptionsSpecification
+  where
+  hashWithSalt
+    _salt
+    VpnTunnelLogOptionsSpecification' {..} =
+      _salt `Prelude.hashWithSalt` cloudWatchLogOptions
+
+instance
+  Prelude.NFData
+    VpnTunnelLogOptionsSpecification
+  where
+  rnf VpnTunnelLogOptionsSpecification' {..} =
+    Prelude.rnf cloudWatchLogOptions
+
+instance
+  Data.ToQuery
+    VpnTunnelLogOptionsSpecification
+  where
+  toQuery VpnTunnelLogOptionsSpecification' {..} =
+    Prelude.mconcat
+      ["CloudWatchLogOptions" Data.=: cloudWatchLogOptions]
diff --git a/gen/Amazonka/EC2/Types/VpnTunnelOptionsSpecification.hs b/gen/Amazonka/EC2/Types/VpnTunnelOptionsSpecification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/VpnTunnelOptionsSpecification.hs
@@ -0,0 +1,598 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.VpnTunnelOptionsSpecification
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.VpnTunnelOptionsSpecification where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import Amazonka.EC2.Types.IKEVersionsRequestListValue
+import Amazonka.EC2.Types.Phase1DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase1EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase1IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2DHGroupNumbersRequestListValue
+import Amazonka.EC2.Types.Phase2EncryptionAlgorithmsRequestListValue
+import Amazonka.EC2.Types.Phase2IntegrityAlgorithmsRequestListValue
+import Amazonka.EC2.Types.VpnTunnelLogOptionsSpecification
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tunnel options for a single VPN tunnel.
+--
+-- /See:/ 'newVpnTunnelOptionsSpecification' smart constructor.
+data VpnTunnelOptionsSpecification = VpnTunnelOptionsSpecification'
+  { -- | The action to take after DPD timeout occurs. Specify @restart@ to
+    -- restart the IKE initiation. Specify @clear@ to end the IKE session.
+    --
+    -- Valid Values: @clear@ | @none@ | @restart@
+    --
+    -- Default: @clear@
+    dPDTimeoutAction :: Prelude.Maybe Prelude.Text,
+    -- | The number of seconds after which a DPD timeout occurs.
+    --
+    -- Constraints: A value greater than or equal to 30.
+    --
+    -- Default: @30@
+    dPDTimeoutSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The IKE versions that are permitted for the VPN tunnel.
+    --
+    -- Valid values: @ikev1@ | @ikev2@
+    iKEVersions :: Prelude.Maybe [IKEVersionsRequestListValue],
+    -- | Options for logging VPN tunnel activity.
+    logOptions :: Prelude.Maybe VpnTunnelLogOptionsSpecification,
+    -- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+    -- tunnel for phase 1 IKE negotiations.
+    --
+    -- Valid values: @2@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@ |
+    -- @21@ | @22@ | @23@ | @24@
+    phase1DHGroupNumbers :: Prelude.Maybe [Phase1DHGroupNumbersRequestListValue],
+    -- | One or more encryption algorithms that are permitted for the VPN tunnel
+    -- for phase 1 IKE negotiations.
+    --
+    -- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+    phase1EncryptionAlgorithms :: Prelude.Maybe [Phase1EncryptionAlgorithmsRequestListValue],
+    -- | One or more integrity algorithms that are permitted for the VPN tunnel
+    -- for phase 1 IKE negotiations.
+    --
+    -- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+    phase1IntegrityAlgorithms :: Prelude.Maybe [Phase1IntegrityAlgorithmsRequestListValue],
+    -- | The lifetime for phase 1 of the IKE negotiation, in seconds.
+    --
+    -- Constraints: A value between 900 and 28,800.
+    --
+    -- Default: @28800@
+    phase1LifetimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+    -- tunnel for phase 2 IKE negotiations.
+    --
+    -- Valid values: @2@ | @5@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@
+    -- | @21@ | @22@ | @23@ | @24@
+    phase2DHGroupNumbers :: Prelude.Maybe [Phase2DHGroupNumbersRequestListValue],
+    -- | One or more encryption algorithms that are permitted for the VPN tunnel
+    -- for phase 2 IKE negotiations.
+    --
+    -- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+    phase2EncryptionAlgorithms :: Prelude.Maybe [Phase2EncryptionAlgorithmsRequestListValue],
+    -- | One or more integrity algorithms that are permitted for the VPN tunnel
+    -- for phase 2 IKE negotiations.
+    --
+    -- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+    phase2IntegrityAlgorithms :: Prelude.Maybe [Phase2IntegrityAlgorithmsRequestListValue],
+    -- | The lifetime for phase 2 of the IKE negotiation, in seconds.
+    --
+    -- Constraints: A value between 900 and 3,600. The value must be less than
+    -- the value for @Phase1LifetimeSeconds@.
+    --
+    -- Default: @3600@
+    phase2LifetimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The pre-shared key (PSK) to establish initial authentication between the
+    -- virtual private gateway and customer gateway.
+    --
+    -- Constraints: Allowed characters are alphanumeric characters, periods
+    -- (.), and underscores (_). Must be between 8 and 64 characters in length
+    -- and cannot start with zero (0).
+    preSharedKey :: Prelude.Maybe Prelude.Text,
+    -- | The percentage of the rekey window (determined by
+    -- @RekeyMarginTimeSeconds@) during which the rekey time is randomly
+    -- selected.
+    --
+    -- Constraints: A value between 0 and 100.
+    --
+    -- Default: @100@
+    rekeyFuzzPercentage :: Prelude.Maybe Prelude.Int,
+    -- | The margin time, in seconds, before the phase 2 lifetime expires, during
+    -- which the Amazon Web Services side of the VPN connection performs an IKE
+    -- rekey. The exact time of the rekey is randomly selected based on the
+    -- value for @RekeyFuzzPercentage@.
+    --
+    -- Constraints: A value between 60 and half of @Phase2LifetimeSeconds@.
+    --
+    -- Default: @540@
+    rekeyMarginTimeSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The number of packets in an IKE replay window.
+    --
+    -- Constraints: A value between 64 and 2048.
+    --
+    -- Default: @1024@
+    replayWindowSize :: Prelude.Maybe Prelude.Int,
+    -- | The action to take when the establishing the tunnel for the VPN
+    -- connection. By default, your customer gateway device must initiate the
+    -- IKE negotiation and bring up the tunnel. Specify @start@ for Amazon Web
+    -- Services to initiate the IKE negotiation.
+    --
+    -- Valid Values: @add@ | @start@
+    --
+    -- Default: @add@
+    startupAction :: Prelude.Maybe Prelude.Text,
+    -- | The range of inside IPv4 addresses for the tunnel. Any specified CIDR
+    -- blocks must be unique across all VPN connections that use the same
+    -- virtual private gateway.
+    --
+    -- Constraints: A size \/30 CIDR block from the @169.254.0.0\/16@ range.
+    -- The following CIDR blocks are reserved and cannot be used:
+    --
+    -- -   @169.254.0.0\/30@
+    --
+    -- -   @169.254.1.0\/30@
+    --
+    -- -   @169.254.2.0\/30@
+    --
+    -- -   @169.254.3.0\/30@
+    --
+    -- -   @169.254.4.0\/30@
+    --
+    -- -   @169.254.5.0\/30@
+    --
+    -- -   @169.254.169.252\/30@
+    tunnelInsideCidr :: Prelude.Maybe Prelude.Text,
+    -- | The range of inside IPv6 addresses for the tunnel. Any specified CIDR
+    -- blocks must be unique across all VPN connections that use the same
+    -- transit gateway.
+    --
+    -- Constraints: A size \/126 CIDR block from the local @fd00::\/8@ range.
+    tunnelInsideIpv6Cidr :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpnTunnelOptionsSpecification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dPDTimeoutAction', 'vpnTunnelOptionsSpecification_dPDTimeoutAction' - The action to take after DPD timeout occurs. Specify @restart@ to
+-- restart the IKE initiation. Specify @clear@ to end the IKE session.
+--
+-- Valid Values: @clear@ | @none@ | @restart@
+--
+-- Default: @clear@
+--
+-- 'dPDTimeoutSeconds', 'vpnTunnelOptionsSpecification_dPDTimeoutSeconds' - The number of seconds after which a DPD timeout occurs.
+--
+-- Constraints: A value greater than or equal to 30.
+--
+-- Default: @30@
+--
+-- 'iKEVersions', 'vpnTunnelOptionsSpecification_iKEVersions' - The IKE versions that are permitted for the VPN tunnel.
+--
+-- Valid values: @ikev1@ | @ikev2@
+--
+-- 'logOptions', 'vpnTunnelOptionsSpecification_logOptions' - Options for logging VPN tunnel activity.
+--
+-- 'phase1DHGroupNumbers', 'vpnTunnelOptionsSpecification_phase1DHGroupNumbers' - One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 1 IKE negotiations.
+--
+-- Valid values: @2@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@ |
+-- @21@ | @22@ | @23@ | @24@
+--
+-- 'phase1EncryptionAlgorithms', 'vpnTunnelOptionsSpecification_phase1EncryptionAlgorithms' - One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+--
+-- 'phase1IntegrityAlgorithms', 'vpnTunnelOptionsSpecification_phase1IntegrityAlgorithms' - One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+--
+-- 'phase1LifetimeSeconds', 'vpnTunnelOptionsSpecification_phase1LifetimeSeconds' - The lifetime for phase 1 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 28,800.
+--
+-- Default: @28800@
+--
+-- 'phase2DHGroupNumbers', 'vpnTunnelOptionsSpecification_phase2DHGroupNumbers' - One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 2 IKE negotiations.
+--
+-- Valid values: @2@ | @5@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@
+-- | @21@ | @22@ | @23@ | @24@
+--
+-- 'phase2EncryptionAlgorithms', 'vpnTunnelOptionsSpecification_phase2EncryptionAlgorithms' - One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+--
+-- 'phase2IntegrityAlgorithms', 'vpnTunnelOptionsSpecification_phase2IntegrityAlgorithms' - One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+--
+-- 'phase2LifetimeSeconds', 'vpnTunnelOptionsSpecification_phase2LifetimeSeconds' - The lifetime for phase 2 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 3,600. The value must be less than
+-- the value for @Phase1LifetimeSeconds@.
+--
+-- Default: @3600@
+--
+-- 'preSharedKey', 'vpnTunnelOptionsSpecification_preSharedKey' - The pre-shared key (PSK) to establish initial authentication between the
+-- virtual private gateway and customer gateway.
+--
+-- Constraints: Allowed characters are alphanumeric characters, periods
+-- (.), and underscores (_). Must be between 8 and 64 characters in length
+-- and cannot start with zero (0).
+--
+-- 'rekeyFuzzPercentage', 'vpnTunnelOptionsSpecification_rekeyFuzzPercentage' - The percentage of the rekey window (determined by
+-- @RekeyMarginTimeSeconds@) during which the rekey time is randomly
+-- selected.
+--
+-- Constraints: A value between 0 and 100.
+--
+-- Default: @100@
+--
+-- 'rekeyMarginTimeSeconds', 'vpnTunnelOptionsSpecification_rekeyMarginTimeSeconds' - The margin time, in seconds, before the phase 2 lifetime expires, during
+-- which the Amazon Web Services side of the VPN connection performs an IKE
+-- rekey. The exact time of the rekey is randomly selected based on the
+-- value for @RekeyFuzzPercentage@.
+--
+-- Constraints: A value between 60 and half of @Phase2LifetimeSeconds@.
+--
+-- Default: @540@
+--
+-- 'replayWindowSize', 'vpnTunnelOptionsSpecification_replayWindowSize' - The number of packets in an IKE replay window.
+--
+-- Constraints: A value between 64 and 2048.
+--
+-- Default: @1024@
+--
+-- 'startupAction', 'vpnTunnelOptionsSpecification_startupAction' - The action to take when the establishing the tunnel for the VPN
+-- connection. By default, your customer gateway device must initiate the
+-- IKE negotiation and bring up the tunnel. Specify @start@ for Amazon Web
+-- Services to initiate the IKE negotiation.
+--
+-- Valid Values: @add@ | @start@
+--
+-- Default: @add@
+--
+-- 'tunnelInsideCidr', 'vpnTunnelOptionsSpecification_tunnelInsideCidr' - The range of inside IPv4 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- virtual private gateway.
+--
+-- Constraints: A size \/30 CIDR block from the @169.254.0.0\/16@ range.
+-- The following CIDR blocks are reserved and cannot be used:
+--
+-- -   @169.254.0.0\/30@
+--
+-- -   @169.254.1.0\/30@
+--
+-- -   @169.254.2.0\/30@
+--
+-- -   @169.254.3.0\/30@
+--
+-- -   @169.254.4.0\/30@
+--
+-- -   @169.254.5.0\/30@
+--
+-- -   @169.254.169.252\/30@
+--
+-- 'tunnelInsideIpv6Cidr', 'vpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr' - The range of inside IPv6 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- transit gateway.
+--
+-- Constraints: A size \/126 CIDR block from the local @fd00::\/8@ range.
+newVpnTunnelOptionsSpecification ::
+  VpnTunnelOptionsSpecification
+newVpnTunnelOptionsSpecification =
+  VpnTunnelOptionsSpecification'
+    { dPDTimeoutAction =
+        Prelude.Nothing,
+      dPDTimeoutSeconds = Prelude.Nothing,
+      iKEVersions = Prelude.Nothing,
+      logOptions = Prelude.Nothing,
+      phase1DHGroupNumbers = Prelude.Nothing,
+      phase1EncryptionAlgorithms = Prelude.Nothing,
+      phase1IntegrityAlgorithms = Prelude.Nothing,
+      phase1LifetimeSeconds = Prelude.Nothing,
+      phase2DHGroupNumbers = Prelude.Nothing,
+      phase2EncryptionAlgorithms = Prelude.Nothing,
+      phase2IntegrityAlgorithms = Prelude.Nothing,
+      phase2LifetimeSeconds = Prelude.Nothing,
+      preSharedKey = Prelude.Nothing,
+      rekeyFuzzPercentage = Prelude.Nothing,
+      rekeyMarginTimeSeconds = Prelude.Nothing,
+      replayWindowSize = Prelude.Nothing,
+      startupAction = Prelude.Nothing,
+      tunnelInsideCidr = Prelude.Nothing,
+      tunnelInsideIpv6Cidr = Prelude.Nothing
+    }
+
+-- | The action to take after DPD timeout occurs. Specify @restart@ to
+-- restart the IKE initiation. Specify @clear@ to end the IKE session.
+--
+-- Valid Values: @clear@ | @none@ | @restart@
+--
+-- Default: @clear@
+vpnTunnelOptionsSpecification_dPDTimeoutAction :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnTunnelOptionsSpecification_dPDTimeoutAction = Lens.lens (\VpnTunnelOptionsSpecification' {dPDTimeoutAction} -> dPDTimeoutAction) (\s@VpnTunnelOptionsSpecification' {} a -> s {dPDTimeoutAction = a} :: VpnTunnelOptionsSpecification)
+
+-- | The number of seconds after which a DPD timeout occurs.
+--
+-- Constraints: A value greater than or equal to 30.
+--
+-- Default: @30@
+vpnTunnelOptionsSpecification_dPDTimeoutSeconds :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+vpnTunnelOptionsSpecification_dPDTimeoutSeconds = Lens.lens (\VpnTunnelOptionsSpecification' {dPDTimeoutSeconds} -> dPDTimeoutSeconds) (\s@VpnTunnelOptionsSpecification' {} a -> s {dPDTimeoutSeconds = a} :: VpnTunnelOptionsSpecification)
+
+-- | The IKE versions that are permitted for the VPN tunnel.
+--
+-- Valid values: @ikev1@ | @ikev2@
+vpnTunnelOptionsSpecification_iKEVersions :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [IKEVersionsRequestListValue])
+vpnTunnelOptionsSpecification_iKEVersions = Lens.lens (\VpnTunnelOptionsSpecification' {iKEVersions} -> iKEVersions) (\s@VpnTunnelOptionsSpecification' {} a -> s {iKEVersions = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Options for logging VPN tunnel activity.
+vpnTunnelOptionsSpecification_logOptions :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe VpnTunnelLogOptionsSpecification)
+vpnTunnelOptionsSpecification_logOptions = Lens.lens (\VpnTunnelOptionsSpecification' {logOptions} -> logOptions) (\s@VpnTunnelOptionsSpecification' {} a -> s {logOptions = a} :: VpnTunnelOptionsSpecification)
+
+-- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 1 IKE negotiations.
+--
+-- Valid values: @2@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@ |
+-- @21@ | @22@ | @23@ | @24@
+vpnTunnelOptionsSpecification_phase1DHGroupNumbers :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [Phase1DHGroupNumbersRequestListValue])
+vpnTunnelOptionsSpecification_phase1DHGroupNumbers = Lens.lens (\VpnTunnelOptionsSpecification' {phase1DHGroupNumbers} -> phase1DHGroupNumbers) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase1DHGroupNumbers = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+vpnTunnelOptionsSpecification_phase1EncryptionAlgorithms :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [Phase1EncryptionAlgorithmsRequestListValue])
+vpnTunnelOptionsSpecification_phase1EncryptionAlgorithms = Lens.lens (\VpnTunnelOptionsSpecification' {phase1EncryptionAlgorithms} -> phase1EncryptionAlgorithms) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase1EncryptionAlgorithms = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 1 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+vpnTunnelOptionsSpecification_phase1IntegrityAlgorithms :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [Phase1IntegrityAlgorithmsRequestListValue])
+vpnTunnelOptionsSpecification_phase1IntegrityAlgorithms = Lens.lens (\VpnTunnelOptionsSpecification' {phase1IntegrityAlgorithms} -> phase1IntegrityAlgorithms) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase1IntegrityAlgorithms = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The lifetime for phase 1 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 28,800.
+--
+-- Default: @28800@
+vpnTunnelOptionsSpecification_phase1LifetimeSeconds :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+vpnTunnelOptionsSpecification_phase1LifetimeSeconds = Lens.lens (\VpnTunnelOptionsSpecification' {phase1LifetimeSeconds} -> phase1LifetimeSeconds) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase1LifetimeSeconds = a} :: VpnTunnelOptionsSpecification)
+
+-- | One or more Diffie-Hellman group numbers that are permitted for the VPN
+-- tunnel for phase 2 IKE negotiations.
+--
+-- Valid values: @2@ | @5@ | @14@ | @15@ | @16@ | @17@ | @18@ | @19@ | @20@
+-- | @21@ | @22@ | @23@ | @24@
+vpnTunnelOptionsSpecification_phase2DHGroupNumbers :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [Phase2DHGroupNumbersRequestListValue])
+vpnTunnelOptionsSpecification_phase2DHGroupNumbers = Lens.lens (\VpnTunnelOptionsSpecification' {phase2DHGroupNumbers} -> phase2DHGroupNumbers) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase2DHGroupNumbers = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more encryption algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @AES128@ | @AES256@ | @AES128-GCM-16@ | @AES256-GCM-16@
+vpnTunnelOptionsSpecification_phase2EncryptionAlgorithms :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [Phase2EncryptionAlgorithmsRequestListValue])
+vpnTunnelOptionsSpecification_phase2EncryptionAlgorithms = Lens.lens (\VpnTunnelOptionsSpecification' {phase2EncryptionAlgorithms} -> phase2EncryptionAlgorithms) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase2EncryptionAlgorithms = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more integrity algorithms that are permitted for the VPN tunnel
+-- for phase 2 IKE negotiations.
+--
+-- Valid values: @SHA1@ | @SHA2-256@ | @SHA2-384@ | @SHA2-512@
+vpnTunnelOptionsSpecification_phase2IntegrityAlgorithms :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe [Phase2IntegrityAlgorithmsRequestListValue])
+vpnTunnelOptionsSpecification_phase2IntegrityAlgorithms = Lens.lens (\VpnTunnelOptionsSpecification' {phase2IntegrityAlgorithms} -> phase2IntegrityAlgorithms) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase2IntegrityAlgorithms = a} :: VpnTunnelOptionsSpecification) Prelude.. Lens.mapping Lens.coerced
+
+-- | The lifetime for phase 2 of the IKE negotiation, in seconds.
+--
+-- Constraints: A value between 900 and 3,600. The value must be less than
+-- the value for @Phase1LifetimeSeconds@.
+--
+-- Default: @3600@
+vpnTunnelOptionsSpecification_phase2LifetimeSeconds :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+vpnTunnelOptionsSpecification_phase2LifetimeSeconds = Lens.lens (\VpnTunnelOptionsSpecification' {phase2LifetimeSeconds} -> phase2LifetimeSeconds) (\s@VpnTunnelOptionsSpecification' {} a -> s {phase2LifetimeSeconds = a} :: VpnTunnelOptionsSpecification)
+
+-- | The pre-shared key (PSK) to establish initial authentication between the
+-- virtual private gateway and customer gateway.
+--
+-- Constraints: Allowed characters are alphanumeric characters, periods
+-- (.), and underscores (_). Must be between 8 and 64 characters in length
+-- and cannot start with zero (0).
+vpnTunnelOptionsSpecification_preSharedKey :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnTunnelOptionsSpecification_preSharedKey = Lens.lens (\VpnTunnelOptionsSpecification' {preSharedKey} -> preSharedKey) (\s@VpnTunnelOptionsSpecification' {} a -> s {preSharedKey = a} :: VpnTunnelOptionsSpecification)
+
+-- | The percentage of the rekey window (determined by
+-- @RekeyMarginTimeSeconds@) during which the rekey time is randomly
+-- selected.
+--
+-- Constraints: A value between 0 and 100.
+--
+-- Default: @100@
+vpnTunnelOptionsSpecification_rekeyFuzzPercentage :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+vpnTunnelOptionsSpecification_rekeyFuzzPercentage = Lens.lens (\VpnTunnelOptionsSpecification' {rekeyFuzzPercentage} -> rekeyFuzzPercentage) (\s@VpnTunnelOptionsSpecification' {} a -> s {rekeyFuzzPercentage = a} :: VpnTunnelOptionsSpecification)
+
+-- | The margin time, in seconds, before the phase 2 lifetime expires, during
+-- which the Amazon Web Services side of the VPN connection performs an IKE
+-- rekey. The exact time of the rekey is randomly selected based on the
+-- value for @RekeyFuzzPercentage@.
+--
+-- Constraints: A value between 60 and half of @Phase2LifetimeSeconds@.
+--
+-- Default: @540@
+vpnTunnelOptionsSpecification_rekeyMarginTimeSeconds :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+vpnTunnelOptionsSpecification_rekeyMarginTimeSeconds = Lens.lens (\VpnTunnelOptionsSpecification' {rekeyMarginTimeSeconds} -> rekeyMarginTimeSeconds) (\s@VpnTunnelOptionsSpecification' {} a -> s {rekeyMarginTimeSeconds = a} :: VpnTunnelOptionsSpecification)
+
+-- | The number of packets in an IKE replay window.
+--
+-- Constraints: A value between 64 and 2048.
+--
+-- Default: @1024@
+vpnTunnelOptionsSpecification_replayWindowSize :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Int)
+vpnTunnelOptionsSpecification_replayWindowSize = Lens.lens (\VpnTunnelOptionsSpecification' {replayWindowSize} -> replayWindowSize) (\s@VpnTunnelOptionsSpecification' {} a -> s {replayWindowSize = a} :: VpnTunnelOptionsSpecification)
+
+-- | The action to take when the establishing the tunnel for the VPN
+-- connection. By default, your customer gateway device must initiate the
+-- IKE negotiation and bring up the tunnel. Specify @start@ for Amazon Web
+-- Services to initiate the IKE negotiation.
+--
+-- Valid Values: @add@ | @start@
+--
+-- Default: @add@
+vpnTunnelOptionsSpecification_startupAction :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnTunnelOptionsSpecification_startupAction = Lens.lens (\VpnTunnelOptionsSpecification' {startupAction} -> startupAction) (\s@VpnTunnelOptionsSpecification' {} a -> s {startupAction = a} :: VpnTunnelOptionsSpecification)
+
+-- | The range of inside IPv4 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- virtual private gateway.
+--
+-- Constraints: A size \/30 CIDR block from the @169.254.0.0\/16@ range.
+-- The following CIDR blocks are reserved and cannot be used:
+--
+-- -   @169.254.0.0\/30@
+--
+-- -   @169.254.1.0\/30@
+--
+-- -   @169.254.2.0\/30@
+--
+-- -   @169.254.3.0\/30@
+--
+-- -   @169.254.4.0\/30@
+--
+-- -   @169.254.5.0\/30@
+--
+-- -   @169.254.169.252\/30@
+vpnTunnelOptionsSpecification_tunnelInsideCidr :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnTunnelOptionsSpecification_tunnelInsideCidr = Lens.lens (\VpnTunnelOptionsSpecification' {tunnelInsideCidr} -> tunnelInsideCidr) (\s@VpnTunnelOptionsSpecification' {} a -> s {tunnelInsideCidr = a} :: VpnTunnelOptionsSpecification)
+
+-- | The range of inside IPv6 addresses for the tunnel. Any specified CIDR
+-- blocks must be unique across all VPN connections that use the same
+-- transit gateway.
+--
+-- Constraints: A size \/126 CIDR block from the local @fd00::\/8@ range.
+vpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr :: Lens.Lens' VpnTunnelOptionsSpecification (Prelude.Maybe Prelude.Text)
+vpnTunnelOptionsSpecification_tunnelInsideIpv6Cidr = Lens.lens (\VpnTunnelOptionsSpecification' {tunnelInsideIpv6Cidr} -> tunnelInsideIpv6Cidr) (\s@VpnTunnelOptionsSpecification' {} a -> s {tunnelInsideIpv6Cidr = a} :: VpnTunnelOptionsSpecification)
+
+instance
+  Prelude.Hashable
+    VpnTunnelOptionsSpecification
+  where
+  hashWithSalt _salt VpnTunnelOptionsSpecification' {..} =
+    _salt
+      `Prelude.hashWithSalt` dPDTimeoutAction
+      `Prelude.hashWithSalt` dPDTimeoutSeconds
+      `Prelude.hashWithSalt` iKEVersions
+      `Prelude.hashWithSalt` logOptions
+      `Prelude.hashWithSalt` phase1DHGroupNumbers
+      `Prelude.hashWithSalt` phase1EncryptionAlgorithms
+      `Prelude.hashWithSalt` phase1IntegrityAlgorithms
+      `Prelude.hashWithSalt` phase1LifetimeSeconds
+      `Prelude.hashWithSalt` phase2DHGroupNumbers
+      `Prelude.hashWithSalt` phase2EncryptionAlgorithms
+      `Prelude.hashWithSalt` phase2IntegrityAlgorithms
+      `Prelude.hashWithSalt` phase2LifetimeSeconds
+      `Prelude.hashWithSalt` preSharedKey
+      `Prelude.hashWithSalt` rekeyFuzzPercentage
+      `Prelude.hashWithSalt` rekeyMarginTimeSeconds
+      `Prelude.hashWithSalt` replayWindowSize
+      `Prelude.hashWithSalt` startupAction
+      `Prelude.hashWithSalt` tunnelInsideCidr
+      `Prelude.hashWithSalt` tunnelInsideIpv6Cidr
+
+instance Prelude.NFData VpnTunnelOptionsSpecification where
+  rnf VpnTunnelOptionsSpecification' {..} =
+    Prelude.rnf dPDTimeoutAction
+      `Prelude.seq` Prelude.rnf dPDTimeoutSeconds
+      `Prelude.seq` Prelude.rnf iKEVersions
+      `Prelude.seq` Prelude.rnf logOptions
+      `Prelude.seq` Prelude.rnf phase1DHGroupNumbers
+      `Prelude.seq` Prelude.rnf phase1EncryptionAlgorithms
+      `Prelude.seq` Prelude.rnf phase1IntegrityAlgorithms
+      `Prelude.seq` Prelude.rnf phase1LifetimeSeconds
+      `Prelude.seq` Prelude.rnf phase2DHGroupNumbers
+      `Prelude.seq` Prelude.rnf phase2EncryptionAlgorithms
+      `Prelude.seq` Prelude.rnf phase2IntegrityAlgorithms
+      `Prelude.seq` Prelude.rnf phase2LifetimeSeconds
+      `Prelude.seq` Prelude.rnf preSharedKey
+      `Prelude.seq` Prelude.rnf rekeyFuzzPercentage
+      `Prelude.seq` Prelude.rnf rekeyMarginTimeSeconds
+      `Prelude.seq` Prelude.rnf replayWindowSize
+      `Prelude.seq` Prelude.rnf startupAction
+      `Prelude.seq` Prelude.rnf tunnelInsideCidr
+      `Prelude.seq` Prelude.rnf tunnelInsideIpv6Cidr
+
+instance Data.ToQuery VpnTunnelOptionsSpecification where
+  toQuery VpnTunnelOptionsSpecification' {..} =
+    Prelude.mconcat
+      [ "DPDTimeoutAction" Data.=: dPDTimeoutAction,
+        "DPDTimeoutSeconds" Data.=: dPDTimeoutSeconds,
+        Data.toQuery
+          ( Data.toQueryList "IKEVersion"
+              Prelude.<$> iKEVersions
+          ),
+        "LogOptions" Data.=: logOptions,
+        Data.toQuery
+          ( Data.toQueryList "Phase1DHGroupNumber"
+              Prelude.<$> phase1DHGroupNumbers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase1EncryptionAlgorithm"
+              Prelude.<$> phase1EncryptionAlgorithms
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase1IntegrityAlgorithm"
+              Prelude.<$> phase1IntegrityAlgorithms
+          ),
+        "Phase1LifetimeSeconds"
+          Data.=: phase1LifetimeSeconds,
+        Data.toQuery
+          ( Data.toQueryList "Phase2DHGroupNumber"
+              Prelude.<$> phase2DHGroupNumbers
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase2EncryptionAlgorithm"
+              Prelude.<$> phase2EncryptionAlgorithms
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Phase2IntegrityAlgorithm"
+              Prelude.<$> phase2IntegrityAlgorithms
+          ),
+        "Phase2LifetimeSeconds"
+          Data.=: phase2LifetimeSeconds,
+        "PreSharedKey" Data.=: preSharedKey,
+        "RekeyFuzzPercentage" Data.=: rekeyFuzzPercentage,
+        "RekeyMarginTimeSeconds"
+          Data.=: rekeyMarginTimeSeconds,
+        "ReplayWindowSize" Data.=: replayWindowSize,
+        "StartupAction" Data.=: startupAction,
+        "TunnelInsideCidr" Data.=: tunnelInsideCidr,
+        "TunnelInsideIpv6Cidr" Data.=: tunnelInsideIpv6Cidr
+      ]
diff --git a/gen/Amazonka/EC2/Types/WeekDay.hs b/gen/Amazonka/EC2/Types/WeekDay.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Types/WeekDay.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Types.WeekDay
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Types.WeekDay
+  ( WeekDay
+      ( ..,
+        WeekDay_Friday,
+        WeekDay_Monday,
+        WeekDay_Saturday,
+        WeekDay_Sunday,
+        WeekDay_Thursday,
+        WeekDay_Tuesday,
+        WeekDay_Wednesday
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Internal
+import qualified Amazonka.Prelude as Prelude
+
+newtype WeekDay = WeekDay' {fromWeekDay :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern WeekDay_Friday :: WeekDay
+pattern WeekDay_Friday = WeekDay' "friday"
+
+pattern WeekDay_Monday :: WeekDay
+pattern WeekDay_Monday = WeekDay' "monday"
+
+pattern WeekDay_Saturday :: WeekDay
+pattern WeekDay_Saturday = WeekDay' "saturday"
+
+pattern WeekDay_Sunday :: WeekDay
+pattern WeekDay_Sunday = WeekDay' "sunday"
+
+pattern WeekDay_Thursday :: WeekDay
+pattern WeekDay_Thursday = WeekDay' "thursday"
+
+pattern WeekDay_Tuesday :: WeekDay
+pattern WeekDay_Tuesday = WeekDay' "tuesday"
+
+pattern WeekDay_Wednesday :: WeekDay
+pattern WeekDay_Wednesday = WeekDay' "wednesday"
+
+{-# COMPLETE
+  WeekDay_Friday,
+  WeekDay_Monday,
+  WeekDay_Saturday,
+  WeekDay_Sunday,
+  WeekDay_Thursday,
+  WeekDay_Tuesday,
+  WeekDay_Wednesday,
+  WeekDay'
+  #-}
diff --git a/gen/Amazonka/EC2/UnassignIpv6Addresses.hs b/gen/Amazonka/EC2/UnassignIpv6Addresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/UnassignIpv6Addresses.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.UnassignIpv6Addresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Unassigns one or more IPv6 addresses IPv4 Prefix Delegation prefixes
+-- from a network interface.
+module Amazonka.EC2.UnassignIpv6Addresses
+  ( -- * Creating a Request
+    UnassignIpv6Addresses (..),
+    newUnassignIpv6Addresses,
+
+    -- * Request Lenses
+    unassignIpv6Addresses_ipv6Addresses,
+    unassignIpv6Addresses_ipv6Prefixes,
+    unassignIpv6Addresses_networkInterfaceId,
+
+    -- * Destructuring the Response
+    UnassignIpv6AddressesResponse (..),
+    newUnassignIpv6AddressesResponse,
+
+    -- * Response Lenses
+    unassignIpv6AddressesResponse_networkInterfaceId,
+    unassignIpv6AddressesResponse_unassignedIpv6Addresses,
+    unassignIpv6AddressesResponse_unassignedIpv6Prefixes,
+    unassignIpv6AddressesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUnassignIpv6Addresses' smart constructor.
+data UnassignIpv6Addresses = UnassignIpv6Addresses'
+  { -- | The IPv6 addresses to unassign from the network interface.
+    ipv6Addresses :: Prelude.Maybe [Prelude.Text],
+    -- | The IPv6 prefixes to unassign from the network interface.
+    ipv6Prefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnassignIpv6Addresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv6Addresses', 'unassignIpv6Addresses_ipv6Addresses' - The IPv6 addresses to unassign from the network interface.
+--
+-- 'ipv6Prefixes', 'unassignIpv6Addresses_ipv6Prefixes' - The IPv6 prefixes to unassign from the network interface.
+--
+-- 'networkInterfaceId', 'unassignIpv6Addresses_networkInterfaceId' - The ID of the network interface.
+newUnassignIpv6Addresses ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  UnassignIpv6Addresses
+newUnassignIpv6Addresses pNetworkInterfaceId_ =
+  UnassignIpv6Addresses'
+    { ipv6Addresses =
+        Prelude.Nothing,
+      ipv6Prefixes = Prelude.Nothing,
+      networkInterfaceId = pNetworkInterfaceId_
+    }
+
+-- | The IPv6 addresses to unassign from the network interface.
+unassignIpv6Addresses_ipv6Addresses :: Lens.Lens' UnassignIpv6Addresses (Prelude.Maybe [Prelude.Text])
+unassignIpv6Addresses_ipv6Addresses = Lens.lens (\UnassignIpv6Addresses' {ipv6Addresses} -> ipv6Addresses) (\s@UnassignIpv6Addresses' {} a -> s {ipv6Addresses = a} :: UnassignIpv6Addresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv6 prefixes to unassign from the network interface.
+unassignIpv6Addresses_ipv6Prefixes :: Lens.Lens' UnassignIpv6Addresses (Prelude.Maybe [Prelude.Text])
+unassignIpv6Addresses_ipv6Prefixes = Lens.lens (\UnassignIpv6Addresses' {ipv6Prefixes} -> ipv6Prefixes) (\s@UnassignIpv6Addresses' {} a -> s {ipv6Prefixes = a} :: UnassignIpv6Addresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+unassignIpv6Addresses_networkInterfaceId :: Lens.Lens' UnassignIpv6Addresses Prelude.Text
+unassignIpv6Addresses_networkInterfaceId = Lens.lens (\UnassignIpv6Addresses' {networkInterfaceId} -> networkInterfaceId) (\s@UnassignIpv6Addresses' {} a -> s {networkInterfaceId = a} :: UnassignIpv6Addresses)
+
+instance Core.AWSRequest UnassignIpv6Addresses where
+  type
+    AWSResponse UnassignIpv6Addresses =
+      UnassignIpv6AddressesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          UnassignIpv6AddressesResponse'
+            Prelude.<$> (x Data..@? "networkInterfaceId")
+            Prelude.<*> ( x
+                            Data..@? "unassignedIpv6Addresses"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> ( x
+                            Data..@? "unassignedIpv6PrefixSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UnassignIpv6Addresses where
+  hashWithSalt _salt UnassignIpv6Addresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipv6Addresses
+      `Prelude.hashWithSalt` ipv6Prefixes
+      `Prelude.hashWithSalt` networkInterfaceId
+
+instance Prelude.NFData UnassignIpv6Addresses where
+  rnf UnassignIpv6Addresses' {..} =
+    Prelude.rnf ipv6Addresses
+      `Prelude.seq` Prelude.rnf ipv6Prefixes
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance Data.ToHeaders UnassignIpv6Addresses where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath UnassignIpv6Addresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UnassignIpv6Addresses where
+  toQuery UnassignIpv6Addresses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("UnassignIpv6Addresses" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Addresses"
+              Prelude.<$> ipv6Addresses
+          ),
+        Data.toQuery
+          ( Data.toQueryList "Ipv6Prefix"
+              Prelude.<$> ipv6Prefixes
+          ),
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newUnassignIpv6AddressesResponse' smart constructor.
+data UnassignIpv6AddressesResponse = UnassignIpv6AddressesResponse'
+  { -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Maybe Prelude.Text,
+    -- | The IPv6 addresses that have been unassigned from the network interface.
+    unassignedIpv6Addresses :: Prelude.Maybe [Prelude.Text],
+    -- | The IPv4 prefixes that have been unassigned from the network interface.
+    unassignedIpv6Prefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnassignIpv6AddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'networkInterfaceId', 'unassignIpv6AddressesResponse_networkInterfaceId' - The ID of the network interface.
+--
+-- 'unassignedIpv6Addresses', 'unassignIpv6AddressesResponse_unassignedIpv6Addresses' - The IPv6 addresses that have been unassigned from the network interface.
+--
+-- 'unassignedIpv6Prefixes', 'unassignIpv6AddressesResponse_unassignedIpv6Prefixes' - The IPv4 prefixes that have been unassigned from the network interface.
+--
+-- 'httpStatus', 'unassignIpv6AddressesResponse_httpStatus' - The response's http status code.
+newUnassignIpv6AddressesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UnassignIpv6AddressesResponse
+newUnassignIpv6AddressesResponse pHttpStatus_ =
+  UnassignIpv6AddressesResponse'
+    { networkInterfaceId =
+        Prelude.Nothing,
+      unassignedIpv6Addresses = Prelude.Nothing,
+      unassignedIpv6Prefixes = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the network interface.
+unassignIpv6AddressesResponse_networkInterfaceId :: Lens.Lens' UnassignIpv6AddressesResponse (Prelude.Maybe Prelude.Text)
+unassignIpv6AddressesResponse_networkInterfaceId = Lens.lens (\UnassignIpv6AddressesResponse' {networkInterfaceId} -> networkInterfaceId) (\s@UnassignIpv6AddressesResponse' {} a -> s {networkInterfaceId = a} :: UnassignIpv6AddressesResponse)
+
+-- | The IPv6 addresses that have been unassigned from the network interface.
+unassignIpv6AddressesResponse_unassignedIpv6Addresses :: Lens.Lens' UnassignIpv6AddressesResponse (Prelude.Maybe [Prelude.Text])
+unassignIpv6AddressesResponse_unassignedIpv6Addresses = Lens.lens (\UnassignIpv6AddressesResponse' {unassignedIpv6Addresses} -> unassignedIpv6Addresses) (\s@UnassignIpv6AddressesResponse' {} a -> s {unassignedIpv6Addresses = a} :: UnassignIpv6AddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The IPv4 prefixes that have been unassigned from the network interface.
+unassignIpv6AddressesResponse_unassignedIpv6Prefixes :: Lens.Lens' UnassignIpv6AddressesResponse (Prelude.Maybe [Prelude.Text])
+unassignIpv6AddressesResponse_unassignedIpv6Prefixes = Lens.lens (\UnassignIpv6AddressesResponse' {unassignedIpv6Prefixes} -> unassignedIpv6Prefixes) (\s@UnassignIpv6AddressesResponse' {} a -> s {unassignedIpv6Prefixes = a} :: UnassignIpv6AddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+unassignIpv6AddressesResponse_httpStatus :: Lens.Lens' UnassignIpv6AddressesResponse Prelude.Int
+unassignIpv6AddressesResponse_httpStatus = Lens.lens (\UnassignIpv6AddressesResponse' {httpStatus} -> httpStatus) (\s@UnassignIpv6AddressesResponse' {} a -> s {httpStatus = a} :: UnassignIpv6AddressesResponse)
+
+instance Prelude.NFData UnassignIpv6AddressesResponse where
+  rnf UnassignIpv6AddressesResponse' {..} =
+    Prelude.rnf networkInterfaceId
+      `Prelude.seq` Prelude.rnf unassignedIpv6Addresses
+      `Prelude.seq` Prelude.rnf unassignedIpv6Prefixes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/UnassignPrivateIpAddresses.hs b/gen/Amazonka/EC2/UnassignPrivateIpAddresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/UnassignPrivateIpAddresses.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.UnassignPrivateIpAddresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Unassigns one or more secondary private IP addresses, or IPv4 Prefix
+-- Delegation prefixes from a network interface.
+module Amazonka.EC2.UnassignPrivateIpAddresses
+  ( -- * Creating a Request
+    UnassignPrivateIpAddresses (..),
+    newUnassignPrivateIpAddresses,
+
+    -- * Request Lenses
+    unassignPrivateIpAddresses_ipv4Prefixes,
+    unassignPrivateIpAddresses_privateIpAddresses,
+    unassignPrivateIpAddresses_networkInterfaceId,
+
+    -- * Destructuring the Response
+    UnassignPrivateIpAddressesResponse (..),
+    newUnassignPrivateIpAddressesResponse,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | Contains the parameters for UnassignPrivateIpAddresses.
+--
+-- /See:/ 'newUnassignPrivateIpAddresses' smart constructor.
+data UnassignPrivateIpAddresses = UnassignPrivateIpAddresses'
+  { -- | The IPv4 prefixes to unassign from the network interface.
+    ipv4Prefixes :: Prelude.Maybe [Prelude.Text],
+    -- | The secondary private IP addresses to unassign from the network
+    -- interface. You can specify this option multiple times to unassign more
+    -- than one IP address.
+    privateIpAddresses :: Prelude.Maybe [Prelude.Text],
+    -- | The ID of the network interface.
+    networkInterfaceId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnassignPrivateIpAddresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ipv4Prefixes', 'unassignPrivateIpAddresses_ipv4Prefixes' - The IPv4 prefixes to unassign from the network interface.
+--
+-- 'privateIpAddresses', 'unassignPrivateIpAddresses_privateIpAddresses' - The secondary private IP addresses to unassign from the network
+-- interface. You can specify this option multiple times to unassign more
+-- than one IP address.
+--
+-- 'networkInterfaceId', 'unassignPrivateIpAddresses_networkInterfaceId' - The ID of the network interface.
+newUnassignPrivateIpAddresses ::
+  -- | 'networkInterfaceId'
+  Prelude.Text ->
+  UnassignPrivateIpAddresses
+newUnassignPrivateIpAddresses pNetworkInterfaceId_ =
+  UnassignPrivateIpAddresses'
+    { ipv4Prefixes =
+        Prelude.Nothing,
+      privateIpAddresses = Prelude.Nothing,
+      networkInterfaceId = pNetworkInterfaceId_
+    }
+
+-- | The IPv4 prefixes to unassign from the network interface.
+unassignPrivateIpAddresses_ipv4Prefixes :: Lens.Lens' UnassignPrivateIpAddresses (Prelude.Maybe [Prelude.Text])
+unassignPrivateIpAddresses_ipv4Prefixes = Lens.lens (\UnassignPrivateIpAddresses' {ipv4Prefixes} -> ipv4Prefixes) (\s@UnassignPrivateIpAddresses' {} a -> s {ipv4Prefixes = a} :: UnassignPrivateIpAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The secondary private IP addresses to unassign from the network
+-- interface. You can specify this option multiple times to unassign more
+-- than one IP address.
+unassignPrivateIpAddresses_privateIpAddresses :: Lens.Lens' UnassignPrivateIpAddresses (Prelude.Maybe [Prelude.Text])
+unassignPrivateIpAddresses_privateIpAddresses = Lens.lens (\UnassignPrivateIpAddresses' {privateIpAddresses} -> privateIpAddresses) (\s@UnassignPrivateIpAddresses' {} a -> s {privateIpAddresses = a} :: UnassignPrivateIpAddresses) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the network interface.
+unassignPrivateIpAddresses_networkInterfaceId :: Lens.Lens' UnassignPrivateIpAddresses Prelude.Text
+unassignPrivateIpAddresses_networkInterfaceId = Lens.lens (\UnassignPrivateIpAddresses' {networkInterfaceId} -> networkInterfaceId) (\s@UnassignPrivateIpAddresses' {} a -> s {networkInterfaceId = a} :: UnassignPrivateIpAddresses)
+
+instance Core.AWSRequest UnassignPrivateIpAddresses where
+  type
+    AWSResponse UnassignPrivateIpAddresses =
+      UnassignPrivateIpAddressesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull
+      UnassignPrivateIpAddressesResponse'
+
+instance Prelude.Hashable UnassignPrivateIpAddresses where
+  hashWithSalt _salt UnassignPrivateIpAddresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` ipv4Prefixes
+      `Prelude.hashWithSalt` privateIpAddresses
+      `Prelude.hashWithSalt` networkInterfaceId
+
+instance Prelude.NFData UnassignPrivateIpAddresses where
+  rnf UnassignPrivateIpAddresses' {..} =
+    Prelude.rnf ipv4Prefixes
+      `Prelude.seq` Prelude.rnf privateIpAddresses
+      `Prelude.seq` Prelude.rnf networkInterfaceId
+
+instance Data.ToHeaders UnassignPrivateIpAddresses where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath UnassignPrivateIpAddresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UnassignPrivateIpAddresses where
+  toQuery UnassignPrivateIpAddresses' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("UnassignPrivateIpAddresses" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "Ipv4Prefix"
+              Prelude.<$> ipv4Prefixes
+          ),
+        Data.toQuery
+          ( Data.toQueryList "PrivateIpAddress"
+              Prelude.<$> privateIpAddresses
+          ),
+        "NetworkInterfaceId" Data.=: networkInterfaceId
+      ]
+
+-- | /See:/ 'newUnassignPrivateIpAddressesResponse' smart constructor.
+data UnassignPrivateIpAddressesResponse = UnassignPrivateIpAddressesResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnassignPrivateIpAddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newUnassignPrivateIpAddressesResponse ::
+  UnassignPrivateIpAddressesResponse
+newUnassignPrivateIpAddressesResponse =
+  UnassignPrivateIpAddressesResponse'
+
+instance
+  Prelude.NFData
+    UnassignPrivateIpAddressesResponse
+  where
+  rnf _ = ()
diff --git a/gen/Amazonka/EC2/UnmonitorInstances.hs b/gen/Amazonka/EC2/UnmonitorInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/UnmonitorInstances.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.UnmonitorInstances
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables detailed monitoring for a running instance. For more
+-- information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html Monitoring your instances and volumes>
+-- in the /Amazon EC2 User Guide/.
+module Amazonka.EC2.UnmonitorInstances
+  ( -- * Creating a Request
+    UnmonitorInstances (..),
+    newUnmonitorInstances,
+
+    -- * Request Lenses
+    unmonitorInstances_dryRun,
+    unmonitorInstances_instanceIds,
+
+    -- * Destructuring the Response
+    UnmonitorInstancesResponse (..),
+    newUnmonitorInstancesResponse,
+
+    -- * Response Lenses
+    unmonitorInstancesResponse_instanceMonitorings,
+    unmonitorInstancesResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUnmonitorInstances' smart constructor.
+data UnmonitorInstances = UnmonitorInstances'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the instances.
+    instanceIds :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnmonitorInstances' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'unmonitorInstances_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'instanceIds', 'unmonitorInstances_instanceIds' - The IDs of the instances.
+newUnmonitorInstances ::
+  UnmonitorInstances
+newUnmonitorInstances =
+  UnmonitorInstances'
+    { dryRun = Prelude.Nothing,
+      instanceIds = Prelude.mempty
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+unmonitorInstances_dryRun :: Lens.Lens' UnmonitorInstances (Prelude.Maybe Prelude.Bool)
+unmonitorInstances_dryRun = Lens.lens (\UnmonitorInstances' {dryRun} -> dryRun) (\s@UnmonitorInstances' {} a -> s {dryRun = a} :: UnmonitorInstances)
+
+-- | The IDs of the instances.
+unmonitorInstances_instanceIds :: Lens.Lens' UnmonitorInstances [Prelude.Text]
+unmonitorInstances_instanceIds = Lens.lens (\UnmonitorInstances' {instanceIds} -> instanceIds) (\s@UnmonitorInstances' {} a -> s {instanceIds = a} :: UnmonitorInstances) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UnmonitorInstances where
+  type
+    AWSResponse UnmonitorInstances =
+      UnmonitorInstancesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          UnmonitorInstancesResponse'
+            Prelude.<$> ( x
+                            Data..@? "instancesSet"
+                            Core..!@ Prelude.mempty
+                            Prelude.>>= Core.may (Data.parseXMLList "item")
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UnmonitorInstances where
+  hashWithSalt _salt UnmonitorInstances' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` instanceIds
+
+instance Prelude.NFData UnmonitorInstances where
+  rnf UnmonitorInstances' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf instanceIds
+
+instance Data.ToHeaders UnmonitorInstances where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath UnmonitorInstances where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UnmonitorInstances where
+  toQuery UnmonitorInstances' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("UnmonitorInstances" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        Data.toQueryList "InstanceId" instanceIds
+      ]
+
+-- | /See:/ 'newUnmonitorInstancesResponse' smart constructor.
+data UnmonitorInstancesResponse = UnmonitorInstancesResponse'
+  { -- | The monitoring information.
+    instanceMonitorings :: Prelude.Maybe [InstanceMonitoring],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UnmonitorInstancesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'instanceMonitorings', 'unmonitorInstancesResponse_instanceMonitorings' - The monitoring information.
+--
+-- 'httpStatus', 'unmonitorInstancesResponse_httpStatus' - The response's http status code.
+newUnmonitorInstancesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UnmonitorInstancesResponse
+newUnmonitorInstancesResponse pHttpStatus_ =
+  UnmonitorInstancesResponse'
+    { instanceMonitorings =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The monitoring information.
+unmonitorInstancesResponse_instanceMonitorings :: Lens.Lens' UnmonitorInstancesResponse (Prelude.Maybe [InstanceMonitoring])
+unmonitorInstancesResponse_instanceMonitorings = Lens.lens (\UnmonitorInstancesResponse' {instanceMonitorings} -> instanceMonitorings) (\s@UnmonitorInstancesResponse' {} a -> s {instanceMonitorings = a} :: UnmonitorInstancesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+unmonitorInstancesResponse_httpStatus :: Lens.Lens' UnmonitorInstancesResponse Prelude.Int
+unmonitorInstancesResponse_httpStatus = Lens.lens (\UnmonitorInstancesResponse' {httpStatus} -> httpStatus) (\s@UnmonitorInstancesResponse' {} a -> s {httpStatus = a} :: UnmonitorInstancesResponse)
+
+instance Prelude.NFData UnmonitorInstancesResponse where
+  rnf UnmonitorInstancesResponse' {..} =
+    Prelude.rnf instanceMonitorings
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/UpdateSecurityGroupRuleDescriptionsEgress.hs b/gen/Amazonka/EC2/UpdateSecurityGroupRuleDescriptionsEgress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/UpdateSecurityGroupRuleDescriptionsEgress.hs
@@ -0,0 +1,276 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsEgress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- [VPC only] Updates the description of an egress (outbound) security
+-- group rule. You can replace an existing description, or add a
+-- description to a rule that did not have one previously. You can remove a
+-- description for a security group rule by omitting the description
+-- parameter in the request.
+module Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsEgress
+  ( -- * Creating a Request
+    UpdateSecurityGroupRuleDescriptionsEgress (..),
+    newUpdateSecurityGroupRuleDescriptionsEgress,
+
+    -- * Request Lenses
+    updateSecurityGroupRuleDescriptionsEgress_dryRun,
+    updateSecurityGroupRuleDescriptionsEgress_groupId,
+    updateSecurityGroupRuleDescriptionsEgress_groupName,
+    updateSecurityGroupRuleDescriptionsEgress_ipPermissions,
+    updateSecurityGroupRuleDescriptionsEgress_securityGroupRuleDescriptions,
+
+    -- * Destructuring the Response
+    UpdateSecurityGroupRuleDescriptionsEgressResponse (..),
+    newUpdateSecurityGroupRuleDescriptionsEgressResponse,
+
+    -- * Response Lenses
+    updateSecurityGroupRuleDescriptionsEgressResponse_return,
+    updateSecurityGroupRuleDescriptionsEgressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSecurityGroupRuleDescriptionsEgress' smart constructor.
+data UpdateSecurityGroupRuleDescriptionsEgress = UpdateSecurityGroupRuleDescriptionsEgress'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | [Default VPC] The name of the security group. You must specify either
+    -- the security group ID or the security group name in the request.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The IP permissions for the security group rule. You must specify either
+    -- the IP permissions or the description.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | The description for the egress security group rules. You must specify
+    -- either the description or the IP permissions.
+    securityGroupRuleDescriptions :: Prelude.Maybe [SecurityGroupRuleDescription]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityGroupRuleDescriptionsEgress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'updateSecurityGroupRuleDescriptionsEgress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupId', 'updateSecurityGroupRuleDescriptionsEgress_groupId' - 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.
+--
+-- 'groupName', 'updateSecurityGroupRuleDescriptionsEgress_groupName' - [Default VPC] The name of the security group. You must specify either
+-- the security group ID or the security group name in the request.
+--
+-- 'ipPermissions', 'updateSecurityGroupRuleDescriptionsEgress_ipPermissions' - The IP permissions for the security group rule. You must specify either
+-- the IP permissions or the description.
+--
+-- 'securityGroupRuleDescriptions', 'updateSecurityGroupRuleDescriptionsEgress_securityGroupRuleDescriptions' - The description for the egress security group rules. You must specify
+-- either the description or the IP permissions.
+newUpdateSecurityGroupRuleDescriptionsEgress ::
+  UpdateSecurityGroupRuleDescriptionsEgress
+newUpdateSecurityGroupRuleDescriptionsEgress =
+  UpdateSecurityGroupRuleDescriptionsEgress'
+    { dryRun =
+        Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      ipPermissions = Prelude.Nothing,
+      securityGroupRuleDescriptions =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+updateSecurityGroupRuleDescriptionsEgress_dryRun :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgress (Prelude.Maybe Prelude.Bool)
+updateSecurityGroupRuleDescriptionsEgress_dryRun = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgress' {dryRun} -> dryRun) (\s@UpdateSecurityGroupRuleDescriptionsEgress' {} a -> s {dryRun = a} :: UpdateSecurityGroupRuleDescriptionsEgress)
+
+-- | 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.
+updateSecurityGroupRuleDescriptionsEgress_groupId :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgress (Prelude.Maybe Prelude.Text)
+updateSecurityGroupRuleDescriptionsEgress_groupId = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgress' {groupId} -> groupId) (\s@UpdateSecurityGroupRuleDescriptionsEgress' {} a -> s {groupId = a} :: UpdateSecurityGroupRuleDescriptionsEgress)
+
+-- | [Default VPC] The name of the security group. You must specify either
+-- the security group ID or the security group name in the request.
+updateSecurityGroupRuleDescriptionsEgress_groupName :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgress (Prelude.Maybe Prelude.Text)
+updateSecurityGroupRuleDescriptionsEgress_groupName = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgress' {groupName} -> groupName) (\s@UpdateSecurityGroupRuleDescriptionsEgress' {} a -> s {groupName = a} :: UpdateSecurityGroupRuleDescriptionsEgress)
+
+-- | The IP permissions for the security group rule. You must specify either
+-- the IP permissions or the description.
+updateSecurityGroupRuleDescriptionsEgress_ipPermissions :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgress (Prelude.Maybe [IpPermission])
+updateSecurityGroupRuleDescriptionsEgress_ipPermissions = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgress' {ipPermissions} -> ipPermissions) (\s@UpdateSecurityGroupRuleDescriptionsEgress' {} a -> s {ipPermissions = a} :: UpdateSecurityGroupRuleDescriptionsEgress) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description for the egress security group rules. You must specify
+-- either the description or the IP permissions.
+updateSecurityGroupRuleDescriptionsEgress_securityGroupRuleDescriptions :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgress (Prelude.Maybe [SecurityGroupRuleDescription])
+updateSecurityGroupRuleDescriptionsEgress_securityGroupRuleDescriptions = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgress' {securityGroupRuleDescriptions} -> securityGroupRuleDescriptions) (\s@UpdateSecurityGroupRuleDescriptionsEgress' {} a -> s {securityGroupRuleDescriptions = a} :: UpdateSecurityGroupRuleDescriptionsEgress) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    UpdateSecurityGroupRuleDescriptionsEgress
+  where
+  type
+    AWSResponse
+      UpdateSecurityGroupRuleDescriptionsEgress =
+      UpdateSecurityGroupRuleDescriptionsEgressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          UpdateSecurityGroupRuleDescriptionsEgressResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateSecurityGroupRuleDescriptionsEgress
+  where
+  hashWithSalt
+    _salt
+    UpdateSecurityGroupRuleDescriptionsEgress' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupId
+        `Prelude.hashWithSalt` groupName
+        `Prelude.hashWithSalt` ipPermissions
+        `Prelude.hashWithSalt` securityGroupRuleDescriptions
+
+instance
+  Prelude.NFData
+    UpdateSecurityGroupRuleDescriptionsEgress
+  where
+  rnf UpdateSecurityGroupRuleDescriptionsEgress' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf securityGroupRuleDescriptions
+
+instance
+  Data.ToHeaders
+    UpdateSecurityGroupRuleDescriptionsEgress
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    UpdateSecurityGroupRuleDescriptionsEgress
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    UpdateSecurityGroupRuleDescriptionsEgress
+  where
+  toQuery
+    UpdateSecurityGroupRuleDescriptionsEgress' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "UpdateSecurityGroupRuleDescriptionsEgress" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "GroupId" Data.=: groupId,
+          "GroupName" Data.=: groupName,
+          Data.toQuery
+            ( Data.toQueryList "IpPermissions"
+                Prelude.<$> ipPermissions
+            ),
+          Data.toQuery
+            ( Data.toQueryList "SecurityGroupRuleDescription"
+                Prelude.<$> securityGroupRuleDescriptions
+            )
+        ]
+
+-- | /See:/ 'newUpdateSecurityGroupRuleDescriptionsEgressResponse' smart constructor.
+data UpdateSecurityGroupRuleDescriptionsEgressResponse = UpdateSecurityGroupRuleDescriptionsEgressResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityGroupRuleDescriptionsEgressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'updateSecurityGroupRuleDescriptionsEgressResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'httpStatus', 'updateSecurityGroupRuleDescriptionsEgressResponse_httpStatus' - The response's http status code.
+newUpdateSecurityGroupRuleDescriptionsEgressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSecurityGroupRuleDescriptionsEgressResponse
+newUpdateSecurityGroupRuleDescriptionsEgressResponse
+  pHttpStatus_ =
+    UpdateSecurityGroupRuleDescriptionsEgressResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+updateSecurityGroupRuleDescriptionsEgressResponse_return :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgressResponse (Prelude.Maybe Prelude.Bool)
+updateSecurityGroupRuleDescriptionsEgressResponse_return = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgressResponse' {return'} -> return') (\s@UpdateSecurityGroupRuleDescriptionsEgressResponse' {} a -> s {return' = a} :: UpdateSecurityGroupRuleDescriptionsEgressResponse)
+
+-- | The response's http status code.
+updateSecurityGroupRuleDescriptionsEgressResponse_httpStatus :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsEgressResponse Prelude.Int
+updateSecurityGroupRuleDescriptionsEgressResponse_httpStatus = Lens.lens (\UpdateSecurityGroupRuleDescriptionsEgressResponse' {httpStatus} -> httpStatus) (\s@UpdateSecurityGroupRuleDescriptionsEgressResponse' {} a -> s {httpStatus = a} :: UpdateSecurityGroupRuleDescriptionsEgressResponse)
+
+instance
+  Prelude.NFData
+    UpdateSecurityGroupRuleDescriptionsEgressResponse
+  where
+  rnf
+    UpdateSecurityGroupRuleDescriptionsEgressResponse' {..} =
+      Prelude.rnf return'
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/UpdateSecurityGroupRuleDescriptionsIngress.hs b/gen/Amazonka/EC2/UpdateSecurityGroupRuleDescriptionsIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/UpdateSecurityGroupRuleDescriptionsIngress.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsIngress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the description of an ingress (inbound) security group rule. You
+-- can replace an existing description, or add a description to a rule that
+-- did not have one previously. You can remove a description for a security
+-- group rule by omitting the description parameter in the request.
+module Amazonka.EC2.UpdateSecurityGroupRuleDescriptionsIngress
+  ( -- * Creating a Request
+    UpdateSecurityGroupRuleDescriptionsIngress (..),
+    newUpdateSecurityGroupRuleDescriptionsIngress,
+
+    -- * Request Lenses
+    updateSecurityGroupRuleDescriptionsIngress_dryRun,
+    updateSecurityGroupRuleDescriptionsIngress_groupId,
+    updateSecurityGroupRuleDescriptionsIngress_groupName,
+    updateSecurityGroupRuleDescriptionsIngress_ipPermissions,
+    updateSecurityGroupRuleDescriptionsIngress_securityGroupRuleDescriptions,
+
+    -- * Destructuring the Response
+    UpdateSecurityGroupRuleDescriptionsIngressResponse (..),
+    newUpdateSecurityGroupRuleDescriptionsIngressResponse,
+
+    -- * Response Lenses
+    updateSecurityGroupRuleDescriptionsIngressResponse_return,
+    updateSecurityGroupRuleDescriptionsIngressResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateSecurityGroupRuleDescriptionsIngress' smart constructor.
+data UpdateSecurityGroupRuleDescriptionsIngress = UpdateSecurityGroupRuleDescriptionsIngress'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | 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.
+    groupId :: Prelude.Maybe Prelude.Text,
+    -- | [EC2-Classic, default VPC] The name 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.
+    groupName :: Prelude.Maybe Prelude.Text,
+    -- | The IP permissions for the security group rule. You must specify either
+    -- IP permissions or a description.
+    ipPermissions :: Prelude.Maybe [IpPermission],
+    -- | [VPC only] The description for the ingress security group rules. You
+    -- must specify either a description or IP permissions.
+    securityGroupRuleDescriptions :: Prelude.Maybe [SecurityGroupRuleDescription]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityGroupRuleDescriptionsIngress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'updateSecurityGroupRuleDescriptionsIngress_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'groupId', 'updateSecurityGroupRuleDescriptionsIngress_groupId' - 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.
+--
+-- 'groupName', 'updateSecurityGroupRuleDescriptionsIngress_groupName' - [EC2-Classic, default VPC] The name 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.
+--
+-- 'ipPermissions', 'updateSecurityGroupRuleDescriptionsIngress_ipPermissions' - The IP permissions for the security group rule. You must specify either
+-- IP permissions or a description.
+--
+-- 'securityGroupRuleDescriptions', 'updateSecurityGroupRuleDescriptionsIngress_securityGroupRuleDescriptions' - [VPC only] The description for the ingress security group rules. You
+-- must specify either a description or IP permissions.
+newUpdateSecurityGroupRuleDescriptionsIngress ::
+  UpdateSecurityGroupRuleDescriptionsIngress
+newUpdateSecurityGroupRuleDescriptionsIngress =
+  UpdateSecurityGroupRuleDescriptionsIngress'
+    { dryRun =
+        Prelude.Nothing,
+      groupId = Prelude.Nothing,
+      groupName = Prelude.Nothing,
+      ipPermissions = Prelude.Nothing,
+      securityGroupRuleDescriptions =
+        Prelude.Nothing
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+updateSecurityGroupRuleDescriptionsIngress_dryRun :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngress (Prelude.Maybe Prelude.Bool)
+updateSecurityGroupRuleDescriptionsIngress_dryRun = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngress' {dryRun} -> dryRun) (\s@UpdateSecurityGroupRuleDescriptionsIngress' {} a -> s {dryRun = a} :: UpdateSecurityGroupRuleDescriptionsIngress)
+
+-- | 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.
+updateSecurityGroupRuleDescriptionsIngress_groupId :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngress (Prelude.Maybe Prelude.Text)
+updateSecurityGroupRuleDescriptionsIngress_groupId = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngress' {groupId} -> groupId) (\s@UpdateSecurityGroupRuleDescriptionsIngress' {} a -> s {groupId = a} :: UpdateSecurityGroupRuleDescriptionsIngress)
+
+-- | [EC2-Classic, default VPC] The name 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.
+updateSecurityGroupRuleDescriptionsIngress_groupName :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngress (Prelude.Maybe Prelude.Text)
+updateSecurityGroupRuleDescriptionsIngress_groupName = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngress' {groupName} -> groupName) (\s@UpdateSecurityGroupRuleDescriptionsIngress' {} a -> s {groupName = a} :: UpdateSecurityGroupRuleDescriptionsIngress)
+
+-- | The IP permissions for the security group rule. You must specify either
+-- IP permissions or a description.
+updateSecurityGroupRuleDescriptionsIngress_ipPermissions :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngress (Prelude.Maybe [IpPermission])
+updateSecurityGroupRuleDescriptionsIngress_ipPermissions = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngress' {ipPermissions} -> ipPermissions) (\s@UpdateSecurityGroupRuleDescriptionsIngress' {} a -> s {ipPermissions = a} :: UpdateSecurityGroupRuleDescriptionsIngress) Prelude.. Lens.mapping Lens.coerced
+
+-- | [VPC only] The description for the ingress security group rules. You
+-- must specify either a description or IP permissions.
+updateSecurityGroupRuleDescriptionsIngress_securityGroupRuleDescriptions :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngress (Prelude.Maybe [SecurityGroupRuleDescription])
+updateSecurityGroupRuleDescriptionsIngress_securityGroupRuleDescriptions = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngress' {securityGroupRuleDescriptions} -> securityGroupRuleDescriptions) (\s@UpdateSecurityGroupRuleDescriptionsIngress' {} a -> s {securityGroupRuleDescriptions = a} :: UpdateSecurityGroupRuleDescriptionsIngress) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    UpdateSecurityGroupRuleDescriptionsIngress
+  where
+  type
+    AWSResponse
+      UpdateSecurityGroupRuleDescriptionsIngress =
+      UpdateSecurityGroupRuleDescriptionsIngressResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          UpdateSecurityGroupRuleDescriptionsIngressResponse'
+            Prelude.<$> (x Data..@? "return")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    UpdateSecurityGroupRuleDescriptionsIngress
+  where
+  hashWithSalt
+    _salt
+    UpdateSecurityGroupRuleDescriptionsIngress' {..} =
+      _salt
+        `Prelude.hashWithSalt` dryRun
+        `Prelude.hashWithSalt` groupId
+        `Prelude.hashWithSalt` groupName
+        `Prelude.hashWithSalt` ipPermissions
+        `Prelude.hashWithSalt` securityGroupRuleDescriptions
+
+instance
+  Prelude.NFData
+    UpdateSecurityGroupRuleDescriptionsIngress
+  where
+  rnf UpdateSecurityGroupRuleDescriptionsIngress' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf groupId
+      `Prelude.seq` Prelude.rnf groupName
+      `Prelude.seq` Prelude.rnf ipPermissions
+      `Prelude.seq` Prelude.rnf securityGroupRuleDescriptions
+
+instance
+  Data.ToHeaders
+    UpdateSecurityGroupRuleDescriptionsIngress
+  where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance
+  Data.ToPath
+    UpdateSecurityGroupRuleDescriptionsIngress
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    UpdateSecurityGroupRuleDescriptionsIngress
+  where
+  toQuery
+    UpdateSecurityGroupRuleDescriptionsIngress' {..} =
+      Prelude.mconcat
+        [ "Action"
+            Data.=: ( "UpdateSecurityGroupRuleDescriptionsIngress" ::
+                        Prelude.ByteString
+                    ),
+          "Version"
+            Data.=: ("2016-11-15" :: Prelude.ByteString),
+          "DryRun" Data.=: dryRun,
+          "GroupId" Data.=: groupId,
+          "GroupName" Data.=: groupName,
+          Data.toQuery
+            ( Data.toQueryList "IpPermissions"
+                Prelude.<$> ipPermissions
+            ),
+          Data.toQuery
+            ( Data.toQueryList "SecurityGroupRuleDescription"
+                Prelude.<$> securityGroupRuleDescriptions
+            )
+        ]
+
+-- | /See:/ 'newUpdateSecurityGroupRuleDescriptionsIngressResponse' smart constructor.
+data UpdateSecurityGroupRuleDescriptionsIngressResponse = UpdateSecurityGroupRuleDescriptionsIngressResponse'
+  { -- | Returns @true@ if the request succeeds; otherwise, returns an error.
+    return' :: Prelude.Maybe Prelude.Bool,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateSecurityGroupRuleDescriptionsIngressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'return'', 'updateSecurityGroupRuleDescriptionsIngressResponse_return' - Returns @true@ if the request succeeds; otherwise, returns an error.
+--
+-- 'httpStatus', 'updateSecurityGroupRuleDescriptionsIngressResponse_httpStatus' - The response's http status code.
+newUpdateSecurityGroupRuleDescriptionsIngressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateSecurityGroupRuleDescriptionsIngressResponse
+newUpdateSecurityGroupRuleDescriptionsIngressResponse
+  pHttpStatus_ =
+    UpdateSecurityGroupRuleDescriptionsIngressResponse'
+      { return' =
+          Prelude.Nothing,
+        httpStatus =
+          pHttpStatus_
+      }
+
+-- | Returns @true@ if the request succeeds; otherwise, returns an error.
+updateSecurityGroupRuleDescriptionsIngressResponse_return :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngressResponse (Prelude.Maybe Prelude.Bool)
+updateSecurityGroupRuleDescriptionsIngressResponse_return = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngressResponse' {return'} -> return') (\s@UpdateSecurityGroupRuleDescriptionsIngressResponse' {} a -> s {return' = a} :: UpdateSecurityGroupRuleDescriptionsIngressResponse)
+
+-- | The response's http status code.
+updateSecurityGroupRuleDescriptionsIngressResponse_httpStatus :: Lens.Lens' UpdateSecurityGroupRuleDescriptionsIngressResponse Prelude.Int
+updateSecurityGroupRuleDescriptionsIngressResponse_httpStatus = Lens.lens (\UpdateSecurityGroupRuleDescriptionsIngressResponse' {httpStatus} -> httpStatus) (\s@UpdateSecurityGroupRuleDescriptionsIngressResponse' {} a -> s {httpStatus = a} :: UpdateSecurityGroupRuleDescriptionsIngressResponse)
+
+instance
+  Prelude.NFData
+    UpdateSecurityGroupRuleDescriptionsIngressResponse
+  where
+  rnf
+    UpdateSecurityGroupRuleDescriptionsIngressResponse' {..} =
+      Prelude.rnf return'
+        `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/EC2/Waiters.hs b/gen/Amazonka/EC2/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/Waiters.hs
@@ -0,0 +1,1234 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Waiters where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.DescribeBundleTasks
+import Amazonka.EC2.DescribeConversionTasks
+import Amazonka.EC2.DescribeCustomerGateways
+import Amazonka.EC2.DescribeExportTasks
+import Amazonka.EC2.DescribeImages
+import Amazonka.EC2.DescribeInstanceStatus
+import Amazonka.EC2.DescribeInstances
+import Amazonka.EC2.DescribeInternetGateways
+import Amazonka.EC2.DescribeKeyPairs
+import Amazonka.EC2.DescribeNatGateways
+import Amazonka.EC2.DescribeNetworkInterfaces
+import Amazonka.EC2.DescribeSecurityGroups
+import Amazonka.EC2.DescribeSnapshots
+import Amazonka.EC2.DescribeSpotInstanceRequests
+import Amazonka.EC2.DescribeSubnets
+import Amazonka.EC2.DescribeVolumes
+import Amazonka.EC2.DescribeVpcPeeringConnections
+import Amazonka.EC2.DescribeVpcs
+import Amazonka.EC2.DescribeVpnConnections
+import Amazonka.EC2.GetPasswordData
+import Amazonka.EC2.Lens
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+
+-- | Polls 'Amazonka.EC2.DescribeBundleTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newBundleTaskComplete :: Core.Wait DescribeBundleTasks
+newBundleTaskComplete =
+  Core.Wait
+    { Core.name = "BundleTaskComplete",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "complete"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeBundleTasksResponse_bundleTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. bundleTask_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "failed"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeBundleTasksResponse_bundleTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. bundleTask_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeConversionTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newConversionTaskCancelled :: Core.Wait DescribeConversionTasks
+newConversionTaskCancelled =
+  Core.Wait
+    { Core.name = "ConversionTaskCancelled",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "cancelled"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeConversionTasksResponse_conversionTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. conversionTask_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeConversionTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newConversionTaskCompleted :: Core.Wait DescribeConversionTasks
+newConversionTaskCompleted =
+  Core.Wait
+    { Core.name = "ConversionTaskCompleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "completed"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeConversionTasksResponse_conversionTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. conversionTask_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "cancelled"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeConversionTasksResponse_conversionTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. conversionTask_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "cancelling"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeConversionTasksResponse_conversionTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. conversionTask_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeConversionTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newConversionTaskDeleted :: Core.Wait DescribeConversionTasks
+newConversionTaskDeleted =
+  Core.Wait
+    { Core.name = "ConversionTaskDeleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "deleted"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeConversionTasksResponse_conversionTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. conversionTask_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeCustomerGateways' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newCustomerGatewayAvailable :: Core.Wait DescribeCustomerGateways
+newCustomerGatewayAvailable =
+  Core.Wait
+    { Core.name = "CustomerGatewayAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeCustomerGatewaysResponse_customerGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. customerGateway_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleted"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeCustomerGatewaysResponse_customerGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. customerGateway_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleting"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeCustomerGatewaysResponse_customerGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. customerGateway_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeExportTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newExportTaskCancelled :: Core.Wait DescribeExportTasks
+newExportTaskCancelled =
+  Core.Wait
+    { Core.name = "ExportTaskCancelled",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "cancelled"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeExportTasksResponse_exportTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. exportTask_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeExportTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newExportTaskCompleted :: Core.Wait DescribeExportTasks
+newExportTaskCompleted =
+  Core.Wait
+    { Core.name = "ExportTaskCompleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "completed"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeExportTasksResponse_exportTasks
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. exportTask_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeImages' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newImageAvailable :: Core.Wait DescribeImages
+newImageAvailable =
+  Core.Wait
+    { Core.name = "ImageAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeImagesResponse_images Prelude.. Lens._Just)
+                )
+                Prelude.. image_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deregistered"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeImagesResponse_images Prelude.. Lens._Just)
+                )
+                Prelude.. image_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeImages' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newImageExists :: Core.Wait DescribeImages
+newImageExists =
+  Core.Wait
+    { Core.name = "ImageExists",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchNonEmpty
+            Prelude.True
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeImagesResponse_images
+                        Prelude.. Lens._Just
+                    )
+                )
+            ),
+          Core.matchError
+            "InvalidAMIID.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInstances' every 5 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newInstanceExists :: Core.Wait DescribeInstances
+newInstanceExists =
+  Core.Wait
+    { Core.name = "InstanceExists",
+      Core.attempts = 40,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchStatus 200 Core.AcceptSuccess,
+          Core.matchError
+            "InvalidInstanceIDNotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInstances' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newInstanceRunning :: Core.Wait DescribeInstances
+newInstanceRunning =
+  Core.Wait
+    { Core.name = "InstanceRunning",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "running"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "shutting-down"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "terminated"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "stopping"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "InvalidInstanceID.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInstanceStatus' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newInstanceStatusOk :: Core.Wait DescribeInstanceStatus
+newInstanceStatusOk =
+  Core.Wait
+    { Core.name = "InstanceStatusOk",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "ok"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstanceStatusResponse_instanceStatuses
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. instanceStatus_instanceStatus
+                Prelude.. Lens._Just
+                Prelude.. instanceStatusSummary_status
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "InvalidInstanceID.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInstances' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newInstanceStopped :: Core.Wait DescribeInstances
+newInstanceStopped =
+  Core.Wait
+    { Core.name = "InstanceStopped",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "stopped"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "pending"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "terminated"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInstances' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newInstanceTerminated :: Core.Wait DescribeInstances
+newInstanceTerminated =
+  Core.Wait
+    { Core.name = "InstanceTerminated",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "terminated"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "pending"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "stopping"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstancesResponse_reservations
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. Lens.folding
+                  ( Lens.concatOf
+                      (reservation_instances Prelude.. Lens._Just)
+                  )
+                Prelude.. instance_state
+                Prelude.. instanceState_name
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInternetGateways' every 5 seconds until a successful state is reached. An error is returned after 6 failed checks.
+newInternetGatewayExists :: Core.Wait DescribeInternetGateways
+newInternetGatewayExists =
+  Core.Wait
+    { Core.name = "InternetGatewayExists",
+      Core.attempts = 6,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchNonEmpty
+            Prelude.True
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInternetGatewaysResponse_internetGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. internetGateway_internetGatewayId
+            ),
+          Core.matchError
+            "InvalidInternetGateway.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeKeyPairs' every 5 seconds until a successful state is reached. An error is returned after 6 failed checks.
+newKeyPairExists :: Core.Wait DescribeKeyPairs
+newKeyPairExists =
+  Core.Wait
+    { Core.name = "KeyPairExists",
+      Core.attempts = 6,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchNonEmpty
+            Prelude.True
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeKeyPairsResponse_keyPairs
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. keyPairInfo_keyName
+                Prelude.. Lens._Just
+            ),
+          Core.matchError
+            "InvalidKeyPair.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeNatGateways' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newNatGatewayAvailable :: Core.Wait DescribeNatGateways
+newNatGatewayAvailable =
+  Core.Wait
+    { Core.name = "NatGatewayAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeNatGatewaysResponse_natGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. natGateway_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "failed"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeNatGatewaysResponse_natGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. natGateway_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleting"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeNatGatewaysResponse_natGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. natGateway_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleted"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeNatGatewaysResponse_natGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. natGateway_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "NatGatewayNotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeNatGateways' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newNatGatewayDeleted :: Core.Wait DescribeNatGateways
+newNatGatewayDeleted =
+  Core.Wait
+    { Core.name = "NatGatewayDeleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "deleted"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeNatGatewaysResponse_natGateways
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. natGateway_state
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "NatGatewayNotFound"
+            Core.AcceptSuccess
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeNetworkInterfaces' every 20 seconds until a successful state is reached. An error is returned after 10 failed checks.
+newNetworkInterfaceAvailable :: Core.Wait DescribeNetworkInterfaces
+newNetworkInterfaceAvailable =
+  Core.Wait
+    { Core.name = "NetworkInterfaceAvailable",
+      Core.attempts = 10,
+      Core.delay = 20,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeNetworkInterfacesResponse_networkInterfaces
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. networkInterface_status
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "InvalidNetworkInterfaceID.NotFound"
+            Core.AcceptFailure
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.GetPasswordData' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newPasswordDataAvailable :: Core.Wait GetPasswordData
+newPasswordDataAvailable =
+  Core.Wait
+    { Core.name = "PasswordDataAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            Prelude.True
+            Core.AcceptSuccess
+            ( Core.nonEmptyText
+                getPasswordDataResponse_passwordData
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeSecurityGroups' every 5 seconds until a successful state is reached. An error is returned after 6 failed checks.
+newSecurityGroupExists :: Core.Wait DescribeSecurityGroups
+newSecurityGroupExists =
+  Core.Wait
+    { Core.name = "SecurityGroupExists",
+      Core.attempts = 6,
+      Core.delay = 5,
+      Core.acceptors =
+        [ Core.matchNonEmpty
+            Prelude.True
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSecurityGroupsResponse_securityGroups
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. securityGroup_groupId
+            ),
+          Core.matchError
+            "InvalidGroup.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeSnapshots' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newSnapshotCompleted :: Core.Wait DescribeSnapshots
+newSnapshotCompleted =
+  Core.Wait
+    { Core.name = "SnapshotCompleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "completed"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSnapshotsResponse_snapshots
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. snapshot_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "error"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSnapshotsResponse_snapshots
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. snapshot_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeSpotInstanceRequests' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newSpotInstanceRequestFulfilled :: Core.Wait DescribeSpotInstanceRequests
+newSpotInstanceRequestFulfilled =
+  Core.Wait
+    { Core.name =
+        "SpotInstanceRequestFulfilled",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "fulfilled"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSpotInstanceRequestsResponse_spotInstanceRequests
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. spotInstanceRequest_status
+                Prelude.. Lens._Just
+                Prelude.. spotInstanceStatus_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAll
+            "request-canceled-and-instance-running"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSpotInstanceRequestsResponse_spotInstanceRequests
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. spotInstanceRequest_status
+                Prelude.. Lens._Just
+                Prelude.. spotInstanceStatus_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "schedule-expired"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSpotInstanceRequestsResponse_spotInstanceRequests
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. spotInstanceRequest_status
+                Prelude.. Lens._Just
+                Prelude.. spotInstanceStatus_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "canceled-before-fulfillment"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSpotInstanceRequestsResponse_spotInstanceRequests
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. spotInstanceRequest_status
+                Prelude.. Lens._Just
+                Prelude.. spotInstanceStatus_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "bad-parameters"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSpotInstanceRequestsResponse_spotInstanceRequests
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. spotInstanceRequest_status
+                Prelude.. Lens._Just
+                Prelude.. spotInstanceStatus_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "system-error"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSpotInstanceRequestsResponse_spotInstanceRequests
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. spotInstanceRequest_status
+                Prelude.. Lens._Just
+                Prelude.. spotInstanceStatus_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "InvalidSpotInstanceRequestID.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeSubnets' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newSubnetAvailable :: Core.Wait DescribeSubnets
+newSubnetAvailable =
+  Core.Wait
+    { Core.name = "SubnetAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeSubnetsResponse_subnets
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. subnet_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeInstanceStatus' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newSystemStatusOk :: Core.Wait DescribeInstanceStatus
+newSystemStatusOk =
+  Core.Wait
+    { Core.name = "SystemStatusOk",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "ok"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeInstanceStatusResponse_instanceStatuses
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. instanceStatus_systemStatus
+                Prelude.. Lens._Just
+                Prelude.. instanceStatusSummary_status
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVolumes' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVolumeAvailable :: Core.Wait DescribeVolumes
+newVolumeAvailable =
+  Core.Wait
+    { Core.name = "VolumeAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVolumesResponse_volumes
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. volume_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleted"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVolumesResponse_volumes
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. volume_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVolumes' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVolumeDeleted :: Core.Wait DescribeVolumes
+newVolumeDeleted =
+  Core.Wait
+    { Core.name = "VolumeDeleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "deleted"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVolumesResponse_volumes
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. volume_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "InvalidVolume.NotFound"
+            Core.AcceptSuccess
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVolumes' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVolumeInUse :: Core.Wait DescribeVolumes
+newVolumeInUse =
+  Core.Wait
+    { Core.name = "VolumeInUse",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "in-use"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVolumesResponse_volumes
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. volume_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleted"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVolumesResponse_volumes
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. volume_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVpcs' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVpcAvailable :: Core.Wait DescribeVpcs
+newVpcAvailable =
+  Core.Wait
+    { Core.name = "VpcAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeVpcsResponse_vpcs Prelude.. Lens._Just)
+                )
+                Prelude.. vpc_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVpcs' every 1 seconds until a successful state is reached. An error is returned after 5 failed checks.
+newVpcExists :: Core.Wait DescribeVpcs
+newVpcExists =
+  Core.Wait
+    { Core.name = "VpcExists",
+      Core.attempts = 5,
+      Core.delay = 1,
+      Core.acceptors =
+        [ Core.matchStatus 200 Core.AcceptSuccess,
+          Core.matchError
+            "InvalidVpcID.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVpcPeeringConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVpcPeeringConnectionDeleted :: Core.Wait DescribeVpcPeeringConnections
+newVpcPeeringConnectionDeleted =
+  Core.Wait
+    { Core.name =
+        "VpcPeeringConnectionDeleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "deleted"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVpcPeeringConnectionsResponse_vpcPeeringConnections
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. vpcPeeringConnection_status
+                Prelude.. Lens._Just
+                Prelude.. vpcPeeringConnectionStateReason_code
+                Prelude.. Lens._Just
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchError
+            "InvalidVpcPeeringConnectionID.NotFound"
+            Core.AcceptSuccess
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVpcPeeringConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVpcPeeringConnectionExists :: Core.Wait DescribeVpcPeeringConnections
+newVpcPeeringConnectionExists =
+  Core.Wait
+    { Core.name = "VpcPeeringConnectionExists",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchStatus 200 Core.AcceptSuccess,
+          Core.matchError
+            "InvalidVpcPeeringConnectionID.NotFound"
+            Core.AcceptRetry
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVpnConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVpnConnectionAvailable :: Core.Wait DescribeVpnConnections
+newVpnConnectionAvailable =
+  Core.Wait
+    { Core.name = "VpnConnectionAvailable",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "available"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVpnConnectionsResponse_vpnConnections
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. vpnConnection_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleting"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVpnConnectionsResponse_vpnConnections
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. vpnConnection_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "deleted"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVpnConnectionsResponse_vpnConnections
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. vpnConnection_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.EC2.DescribeVpnConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newVpnConnectionDeleted :: Core.Wait DescribeVpnConnections
+newVpnConnectionDeleted =
+  Core.Wait
+    { Core.name = "VpnConnectionDeleted",
+      Core.attempts = 40,
+      Core.delay = 15,
+      Core.acceptors =
+        [ Core.matchAll
+            "deleted"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVpnConnectionsResponse_vpnConnections
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. vpnConnection_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "pending"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    ( describeVpnConnectionsResponse_vpnConnections
+                        Prelude.. Lens._Just
+                    )
+                )
+                Prelude.. vpnConnection_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
diff --git a/gen/Amazonka/EC2/WithdrawByoipCidr.hs b/gen/Amazonka/EC2/WithdrawByoipCidr.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/EC2/WithdrawByoipCidr.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.EC2.WithdrawByoipCidr
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops advertising an address range that is provisioned as an address
+-- pool.
+--
+-- You can perform this operation at most once every 10 seconds, even if
+-- you specify different address ranges each time.
+--
+-- It can take a few minutes before traffic to the specified addresses
+-- stops routing to Amazon Web Services because of BGP propagation delays.
+module Amazonka.EC2.WithdrawByoipCidr
+  ( -- * Creating a Request
+    WithdrawByoipCidr (..),
+    newWithdrawByoipCidr,
+
+    -- * Request Lenses
+    withdrawByoipCidr_dryRun,
+    withdrawByoipCidr_cidr,
+
+    -- * Destructuring the Response
+    WithdrawByoipCidrResponse (..),
+    newWithdrawByoipCidrResponse,
+
+    -- * Response Lenses
+    withdrawByoipCidrResponse_byoipCidr,
+    withdrawByoipCidrResponse_httpStatus,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import Amazonka.EC2.Types
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newWithdrawByoipCidr' smart constructor.
+data WithdrawByoipCidr = WithdrawByoipCidr'
+  { -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The address range, in CIDR notation.
+    cidr :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WithdrawByoipCidr' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'withdrawByoipCidr_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'cidr', 'withdrawByoipCidr_cidr' - The address range, in CIDR notation.
+newWithdrawByoipCidr ::
+  -- | 'cidr'
+  Prelude.Text ->
+  WithdrawByoipCidr
+newWithdrawByoipCidr pCidr_ =
+  WithdrawByoipCidr'
+    { dryRun = Prelude.Nothing,
+      cidr = pCidr_
+    }
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+withdrawByoipCidr_dryRun :: Lens.Lens' WithdrawByoipCidr (Prelude.Maybe Prelude.Bool)
+withdrawByoipCidr_dryRun = Lens.lens (\WithdrawByoipCidr' {dryRun} -> dryRun) (\s@WithdrawByoipCidr' {} a -> s {dryRun = a} :: WithdrawByoipCidr)
+
+-- | The address range, in CIDR notation.
+withdrawByoipCidr_cidr :: Lens.Lens' WithdrawByoipCidr Prelude.Text
+withdrawByoipCidr_cidr = Lens.lens (\WithdrawByoipCidr' {cidr} -> cidr) (\s@WithdrawByoipCidr' {} a -> s {cidr = a} :: WithdrawByoipCidr)
+
+instance Core.AWSRequest WithdrawByoipCidr where
+  type
+    AWSResponse WithdrawByoipCidr =
+      WithdrawByoipCidrResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXML
+      ( \s h x ->
+          WithdrawByoipCidrResponse'
+            Prelude.<$> (x Data..@? "byoipCidr")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable WithdrawByoipCidr where
+  hashWithSalt _salt WithdrawByoipCidr' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` cidr
+
+instance Prelude.NFData WithdrawByoipCidr where
+  rnf WithdrawByoipCidr' {..} =
+    Prelude.rnf dryRun `Prelude.seq` Prelude.rnf cidr
+
+instance Data.ToHeaders WithdrawByoipCidr where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath WithdrawByoipCidr where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery WithdrawByoipCidr where
+  toQuery WithdrawByoipCidr' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("WithdrawByoipCidr" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2016-11-15" :: Prelude.ByteString),
+        "DryRun" Data.=: dryRun,
+        "Cidr" Data.=: cidr
+      ]
+
+-- | /See:/ 'newWithdrawByoipCidrResponse' smart constructor.
+data WithdrawByoipCidrResponse = WithdrawByoipCidrResponse'
+  { -- | Information about the address pool.
+    byoipCidr :: Prelude.Maybe ByoipCidr,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WithdrawByoipCidrResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'byoipCidr', 'withdrawByoipCidrResponse_byoipCidr' - Information about the address pool.
+--
+-- 'httpStatus', 'withdrawByoipCidrResponse_httpStatus' - The response's http status code.
+newWithdrawByoipCidrResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  WithdrawByoipCidrResponse
+newWithdrawByoipCidrResponse pHttpStatus_ =
+  WithdrawByoipCidrResponse'
+    { byoipCidr =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the address pool.
+withdrawByoipCidrResponse_byoipCidr :: Lens.Lens' WithdrawByoipCidrResponse (Prelude.Maybe ByoipCidr)
+withdrawByoipCidrResponse_byoipCidr = Lens.lens (\WithdrawByoipCidrResponse' {byoipCidr} -> byoipCidr) (\s@WithdrawByoipCidrResponse' {} a -> s {byoipCidr = a} :: WithdrawByoipCidrResponse)
+
+-- | The response's http status code.
+withdrawByoipCidrResponse_httpStatus :: Lens.Lens' WithdrawByoipCidrResponse Prelude.Int
+withdrawByoipCidrResponse_httpStatus = Lens.lens (\WithdrawByoipCidrResponse' {httpStatus} -> httpStatus) (\s@WithdrawByoipCidrResponse' {} a -> s {httpStatus = a} :: WithdrawByoipCidrResponse)
+
+instance Prelude.NFData WithdrawByoipCidrResponse where
+  rnf WithdrawByoipCidrResponse' {..} =
+    Prelude.rnf byoipCidr
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Network/AWS/EC2.hs b/gen/Network/AWS/EC2.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2.hs
+++ /dev/null
@@ -1,3172 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- __Amazon Elastic Compute Cloud__
---
--- Amazon Elastic Compute Cloud (Amazon EC2) provides resizable computing capacity in the Amazon Web Services (AWS) cloud. Using Amazon EC2 eliminates your need to invest in hardware up front, so you can develop and deploy applications faster.
---
-module Network.AWS.EC2
-    (
-    -- * Service Configuration
-      ec2
-
-    -- * Errors
-    -- $errors
-
-    -- * Waiters
-    -- $waiters
-
-    -- ** InstanceTerminated
-    , instanceTerminated
-
-    -- ** VolumeInUse
-    , volumeInUse
-
-    -- ** NatGatewayAvailable
-    , natGatewayAvailable
-
-    -- ** SubnetAvailable
-    , subnetAvailable
-
-    -- ** NetworkInterfaceAvailable
-    , networkInterfaceAvailable
-
-    -- ** SystemStatusOK
-    , systemStatusOK
-
-    -- ** CustomerGatewayAvailable
-    , customerGatewayAvailable
-
-    -- ** ConversionTaskCompleted
-    , conversionTaskCompleted
-
-    -- ** InstanceStopped
-    , instanceStopped
-
-    -- ** ConversionTaskDeleted
-    , conversionTaskDeleted
-
-    -- ** PasswordDataAvailable
-    , passwordDataAvailable
-
-    -- ** InstanceRunning
-    , instanceRunning
-
-    -- ** SpotInstanceRequestFulfilled
-    , spotInstanceRequestFulfilled
-
-    -- ** VPCAvailable
-    , vpcAvailable
-
-    -- ** ExportTaskCompleted
-    , exportTaskCompleted
-
-    -- ** VPNConnectionAvailable
-    , vpnConnectionAvailable
-
-    -- ** ExportTaskCancelled
-    , exportTaskCancelled
-
-    -- ** VolumeDeleted
-    , volumeDeleted
-
-    -- ** VPCExists
-    , vpcExists
-
-    -- ** BundleTaskComplete
-    , bundleTaskComplete
-
-    -- ** VPNConnectionDeleted
-    , vpnConnectionDeleted
-
-    -- ** ConversionTaskCancelled
-    , conversionTaskCancelled
-
-    -- ** ImageAvailable
-    , imageAvailable
-
-    -- ** VPCPeeringConnectionExists
-    , vpcPeeringConnectionExists
-
-    -- ** SnapshotCompleted
-    , snapshotCompleted
-
-    -- ** InstanceExists
-    , instanceExists
-
-    -- ** InstanceStatusOK
-    , instanceStatusOK
-
-    -- ** VolumeAvailable
-    , volumeAvailable
-
-    -- * Operations
-    -- $operations
-
-    -- ** ImportInstance
-    , module Network.AWS.EC2.ImportInstance
-
-    -- ** RevokeSecurityGroupEgress
-    , module Network.AWS.EC2.RevokeSecurityGroupEgress
-
-    -- ** CreateVPNGateway
-    , module Network.AWS.EC2.CreateVPNGateway
-
-    -- ** CreateNetworkACL
-    , module Network.AWS.EC2.CreateNetworkACL
-
-    -- ** DeleteKeyPair
-    , module Network.AWS.EC2.DeleteKeyPair
-
-    -- ** DescribeSecurityGroupReferences
-    , module Network.AWS.EC2.DescribeSecurityGroupReferences
-
-    -- ** DescribeTags (Paginated)
-    , module Network.AWS.EC2.DescribeTags
-
-    -- ** DisassociateSubnetCidrBlock
-    , module Network.AWS.EC2.DisassociateSubnetCidrBlock
-
-    -- ** DetachNetworkInterface
-    , module Network.AWS.EC2.DetachNetworkInterface
-
-    -- ** DetachInternetGateway
-    , module Network.AWS.EC2.DetachInternetGateway
-
-    -- ** DeleteVPCEndpoints
-    , module Network.AWS.EC2.DeleteVPCEndpoints
-
-    -- ** DeleteFlowLogs
-    , module Network.AWS.EC2.DeleteFlowLogs
-
-    -- ** DescribeVPCClassicLink
-    , module Network.AWS.EC2.DescribeVPCClassicLink
-
-    -- ** ModifySubnetAttribute
-    , module Network.AWS.EC2.ModifySubnetAttribute
-
-    -- ** DetachVolume
-    , module Network.AWS.EC2.DetachVolume
-
-    -- ** CancelBundleTask
-    , module Network.AWS.EC2.CancelBundleTask
-
-    -- ** AcceptReservedInstancesExchangeQuote
-    , module Network.AWS.EC2.AcceptReservedInstancesExchangeQuote
-
-    -- ** ReleaseAddress
-    , module Network.AWS.EC2.ReleaseAddress
-
-    -- ** CreateInternetGateway
-    , module Network.AWS.EC2.CreateInternetGateway
-
-    -- ** DeleteVPNConnection
-    , module Network.AWS.EC2.DeleteVPNConnection
-
-    -- ** DescribeBundleTasks
-    , module Network.AWS.EC2.DescribeBundleTasks
-
-    -- ** AuthorizeSecurityGroupEgress
-    , module Network.AWS.EC2.AuthorizeSecurityGroupEgress
-
-    -- ** DeregisterImage
-    , module Network.AWS.EC2.DeregisterImage
-
-    -- ** ModifyNetworkInterfaceAttribute
-    , module Network.AWS.EC2.ModifyNetworkInterfaceAttribute
-
-    -- ** CancelReservedInstancesListing
-    , module Network.AWS.EC2.CancelReservedInstancesListing
-
-    -- ** AttachClassicLinkVPC
-    , module Network.AWS.EC2.AttachClassicLinkVPC
-
-    -- ** DescribeVPCClassicLinkDNSSupport
-    , module Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
-
-    -- ** AssociateSubnetCidrBlock
-    , module Network.AWS.EC2.AssociateSubnetCidrBlock
-
-    -- ** RunScheduledInstances
-    , module Network.AWS.EC2.RunScheduledInstances
-
-    -- ** CancelSpotFleetRequests
-    , module Network.AWS.EC2.CancelSpotFleetRequests
-
-    -- ** DescribeSpotPriceHistory (Paginated)
-    , module Network.AWS.EC2.DescribeSpotPriceHistory
-
-    -- ** DescribeDHCPOptions
-    , module Network.AWS.EC2.DescribeDHCPOptions
-
-    -- ** ImportImage
-    , module Network.AWS.EC2.ImportImage
-
-    -- ** StopInstances
-    , module Network.AWS.EC2.StopInstances
-
-    -- ** DescribeInternetGateways
-    , module Network.AWS.EC2.DescribeInternetGateways
-
-    -- ** DisableVPCClassicLink
-    , module Network.AWS.EC2.DisableVPCClassicLink
-
-    -- ** BundleInstance
-    , module Network.AWS.EC2.BundleInstance
-
-    -- ** DescribeNetworkInterfaces
-    , module Network.AWS.EC2.DescribeNetworkInterfaces
-
-    -- ** ReplaceNetworkACLAssociation
-    , module Network.AWS.EC2.ReplaceNetworkACLAssociation
-
-    -- ** DescribeNatGateways
-    , module Network.AWS.EC2.DescribeNatGateways
-
-    -- ** DescribeAddresses
-    , module Network.AWS.EC2.DescribeAddresses
-
-    -- ** DescribeSnapshotAttribute
-    , module Network.AWS.EC2.DescribeSnapshotAttribute
-
-    -- ** DescribeIdentityIdFormat
-    , module Network.AWS.EC2.DescribeIdentityIdFormat
-
-    -- ** ReplaceRoute
-    , module Network.AWS.EC2.ReplaceRoute
-
-    -- ** DescribeVPCEndpointServices
-    , module Network.AWS.EC2.DescribeVPCEndpointServices
-
-    -- ** AuthorizeSecurityGroupIngress
-    , module Network.AWS.EC2.AuthorizeSecurityGroupIngress
-
-    -- ** CreateVPCPeeringConnection
-    , module Network.AWS.EC2.CreateVPCPeeringConnection
-
-    -- ** DescribeSubnets
-    , module Network.AWS.EC2.DescribeSubnets
-
-    -- ** CreateTags
-    , module Network.AWS.EC2.CreateTags
-
-    -- ** PurchaseReservedInstancesOffering
-    , module Network.AWS.EC2.PurchaseReservedInstancesOffering
-
-    -- ** DeleteNetworkACLEntry
-    , module Network.AWS.EC2.DeleteNetworkACLEntry
-
-    -- ** ResetSnapshotAttribute
-    , module Network.AWS.EC2.ResetSnapshotAttribute
-
-    -- ** DescribeVPNConnections
-    , module Network.AWS.EC2.DescribeVPNConnections
-
-    -- ** DeleteRoute
-    , module Network.AWS.EC2.DeleteRoute
-
-    -- ** ReplaceNetworkACLEntry
-    , module Network.AWS.EC2.ReplaceNetworkACLEntry
-
-    -- ** DescribeVPCEndpoints
-    , module Network.AWS.EC2.DescribeVPCEndpoints
-
-    -- ** ResetInstanceAttribute
-    , module Network.AWS.EC2.ResetInstanceAttribute
-
-    -- ** ModifyIdentityIdFormat
-    , module Network.AWS.EC2.ModifyIdentityIdFormat
-
-    -- ** AttachNetworkInterface
-    , module Network.AWS.EC2.AttachNetworkInterface
-
-    -- ** DescribeInstanceStatus (Paginated)
-    , module Network.AWS.EC2.DescribeInstanceStatus
-
-    -- ** ImportKeyPair
-    , module Network.AWS.EC2.ImportKeyPair
-
-    -- ** DeleteTags
-    , module Network.AWS.EC2.DeleteTags
-
-    -- ** ConfirmProductInstance
-    , module Network.AWS.EC2.ConfirmProductInstance
-
-    -- ** DescribeInstanceAttribute
-    , module Network.AWS.EC2.DescribeInstanceAttribute
-
-    -- ** DescribeReservedInstancesOfferings (Paginated)
-    , module Network.AWS.EC2.DescribeReservedInstancesOfferings
-
-    -- ** CreateCustomerGateway
-    , module Network.AWS.EC2.CreateCustomerGateway
-
-    -- ** DeleteSecurityGroup
-    , module Network.AWS.EC2.DeleteSecurityGroup
-
-    -- ** DeleteVPCPeeringConnection
-    , module Network.AWS.EC2.DeleteVPCPeeringConnection
-
-    -- ** AttachInternetGateway
-    , module Network.AWS.EC2.AttachInternetGateway
-
-    -- ** ModifyInstancePlacement
-    , module Network.AWS.EC2.ModifyInstancePlacement
-
-    -- ** DescribeFlowLogs
-    , module Network.AWS.EC2.DescribeFlowLogs
-
-    -- ** RunInstances
-    , module Network.AWS.EC2.RunInstances
-
-    -- ** AssociateDHCPOptions
-    , module Network.AWS.EC2.AssociateDHCPOptions
-
-    -- ** DescribeReservedInstances
-    , module Network.AWS.EC2.DescribeReservedInstances
-
-    -- ** DescribeIdFormat
-    , module Network.AWS.EC2.DescribeIdFormat
-
-    -- ** DescribeVPCs
-    , module Network.AWS.EC2.DescribeVPCs
-
-    -- ** DescribeConversionTasks
-    , module Network.AWS.EC2.DescribeConversionTasks
-
-    -- ** DisableVPCClassicLinkDNSSupport
-    , module Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
-
-    -- ** AllocateAddress
-    , module Network.AWS.EC2.AllocateAddress
-
-    -- ** CancelConversionTask
-    , module Network.AWS.EC2.CancelConversionTask
-
-    -- ** ModifyImageAttribute
-    , module Network.AWS.EC2.ModifyImageAttribute
-
-    -- ** CreateRouteTable
-    , module Network.AWS.EC2.CreateRouteTable
-
-    -- ** ReportInstanceStatus
-    , module Network.AWS.EC2.ReportInstanceStatus
-
-    -- ** AttachVolume
-    , module Network.AWS.EC2.AttachVolume
-
-    -- ** RequestSpotInstances
-    , module Network.AWS.EC2.RequestSpotInstances
-
-    -- ** DescribeHostReservationOfferings
-    , module Network.AWS.EC2.DescribeHostReservationOfferings
-
-    -- ** DescribeVolumes (Paginated)
-    , module Network.AWS.EC2.DescribeVolumes
-
-    -- ** RejectVPCPeeringConnection
-    , module Network.AWS.EC2.RejectVPCPeeringConnection
-
-    -- ** DeleteVPNConnectionRoute
-    , module Network.AWS.EC2.DeleteVPNConnectionRoute
-
-    -- ** ModifyVPCEndpoint
-    , module Network.AWS.EC2.ModifyVPCEndpoint
-
-    -- ** AllocateHosts
-    , module Network.AWS.EC2.AllocateHosts
-
-    -- ** RegisterImage
-    , module Network.AWS.EC2.RegisterImage
-
-    -- ** RevokeSecurityGroupIngress
-    , module Network.AWS.EC2.RevokeSecurityGroupIngress
-
-    -- ** DescribeHostReservations
-    , module Network.AWS.EC2.DescribeHostReservations
-
-    -- ** EnableVPCClassicLinkDNSSupport
-    , module Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
-
-    -- ** ModifyReservedInstances
-    , module Network.AWS.EC2.ModifyReservedInstances
-
-    -- ** DescribeScheduledInstances
-    , module Network.AWS.EC2.DescribeScheduledInstances
-
-    -- ** CreateFlowLogs
-    , module Network.AWS.EC2.CreateFlowLogs
-
-    -- ** DescribeSpotFleetRequests (Paginated)
-    , module Network.AWS.EC2.DescribeSpotFleetRequests
-
-    -- ** MoveAddressToVPC
-    , module Network.AWS.EC2.MoveAddressToVPC
-
-    -- ** DeleteNetworkACL
-    , module Network.AWS.EC2.DeleteNetworkACL
-
-    -- ** DeleteVPNGateway
-    , module Network.AWS.EC2.DeleteVPNGateway
-
-    -- ** DescribeImportImageTasks
-    , module Network.AWS.EC2.DescribeImportImageTasks
-
-    -- ** DescribeVolumeAttribute
-    , module Network.AWS.EC2.DescribeVolumeAttribute
-
-    -- ** DescribeMovingAddresses
-    , module Network.AWS.EC2.DescribeMovingAddresses
-
-    -- ** GetPasswordData
-    , module Network.AWS.EC2.GetPasswordData
-
-    -- ** CreateVPC
-    , module Network.AWS.EC2.CreateVPC
-
-    -- ** ModifyVPCPeeringConnectionOptions
-    , module Network.AWS.EC2.ModifyVPCPeeringConnectionOptions
-
-    -- ** CopySnapshot
-    , module Network.AWS.EC2.CopySnapshot
-
-    -- ** DisassociateAddress
-    , module Network.AWS.EC2.DisassociateAddress
-
-    -- ** DescribeEgressOnlyInternetGateways
-    , module Network.AWS.EC2.DescribeEgressOnlyInternetGateways
-
-    -- ** DeleteVPC
-    , module Network.AWS.EC2.DeleteVPC
-
-    -- ** CreateInstanceExportTask
-    , module Network.AWS.EC2.CreateInstanceExportTask
-
-    -- ** AssociateVPCCidrBlock
-    , module Network.AWS.EC2.AssociateVPCCidrBlock
-
-    -- ** DescribeVPCAttribute
-    , module Network.AWS.EC2.DescribeVPCAttribute
-
-    -- ** CreateVolume
-    , module Network.AWS.EC2.CreateVolume
-
-    -- ** DescribeScheduledInstanceAvailability
-    , module Network.AWS.EC2.DescribeScheduledInstanceAvailability
-
-    -- ** ModifyVolumeAttribute
-    , module Network.AWS.EC2.ModifyVolumeAttribute
-
-    -- ** DescribeSpotDatafeedSubscription
-    , module Network.AWS.EC2.DescribeSpotDatafeedSubscription
-
-    -- ** DescribePrefixLists
-    , module Network.AWS.EC2.DescribePrefixLists
-
-    -- ** DeletePlacementGroup
-    , module Network.AWS.EC2.DeletePlacementGroup
-
-    -- ** RequestSpotFleet
-    , module Network.AWS.EC2.RequestSpotFleet
-
-    -- ** CreateSubnet
-    , module Network.AWS.EC2.CreateSubnet
-
-    -- ** CreateNetworkInterface
-    , module Network.AWS.EC2.CreateNetworkInterface
-
-    -- ** DescribeSecurityGroups
-    , module Network.AWS.EC2.DescribeSecurityGroups
-
-    -- ** DescribeExportTasks
-    , module Network.AWS.EC2.DescribeExportTasks
-
-    -- ** ModifySpotFleetRequest
-    , module Network.AWS.EC2.ModifySpotFleetRequest
-
-    -- ** DetachVPNGateway
-    , module Network.AWS.EC2.DetachVPNGateway
-
-    -- ** GetHostReservationPurchasePreview
-    , module Network.AWS.EC2.GetHostReservationPurchasePreview
-
-    -- ** EnableVolumeIO
-    , module Network.AWS.EC2.EnableVolumeIO
-
-    -- ** DescribeInstances (Paginated)
-    , module Network.AWS.EC2.DescribeInstances
-
-    -- ** CreateNatGateway
-    , module Network.AWS.EC2.CreateNatGateway
-
-    -- ** DescribeVPCPeeringConnections
-    , module Network.AWS.EC2.DescribeVPCPeeringConnections
-
-    -- ** CancelExportTask
-    , module Network.AWS.EC2.CancelExportTask
-
-    -- ** DisassociateVPCCidrBlock
-    , module Network.AWS.EC2.DisassociateVPCCidrBlock
-
-    -- ** DeleteNetworkInterface
-    , module Network.AWS.EC2.DeleteNetworkInterface
-
-    -- ** ReplaceRouteTableAssociation
-    , module Network.AWS.EC2.ReplaceRouteTableAssociation
-
-    -- ** StartInstances
-    , module Network.AWS.EC2.StartInstances
-
-    -- ** CreatePlacementGroup
-    , module Network.AWS.EC2.CreatePlacementGroup
-
-    -- ** DescribeSnapshots (Paginated)
-    , module Network.AWS.EC2.DescribeSnapshots
-
-    -- ** AssociateAddress
-    , module Network.AWS.EC2.AssociateAddress
-
-    -- ** DescribeNetworkInterfaceAttribute
-    , module Network.AWS.EC2.DescribeNetworkInterfaceAttribute
-
-    -- ** ReleaseHosts
-    , module Network.AWS.EC2.ReleaseHosts
-
-    -- ** ResetNetworkInterfaceAttribute
-    , module Network.AWS.EC2.ResetNetworkInterfaceAttribute
-
-    -- ** DeleteInternetGateway
-    , module Network.AWS.EC2.DeleteInternetGateway
-
-    -- ** DescribeReservedInstancesListings
-    , module Network.AWS.EC2.DescribeReservedInstancesListings
-
-    -- ** CreateVPNConnection
-    , module Network.AWS.EC2.CreateVPNConnection
-
-    -- ** DeleteNatGateway
-    , module Network.AWS.EC2.DeleteNatGateway
-
-    -- ** DescribeImportSnapshotTasks
-    , module Network.AWS.EC2.DescribeImportSnapshotTasks
-
-    -- ** DescribeCustomerGateways
-    , module Network.AWS.EC2.DescribeCustomerGateways
-
-    -- ** DeleteSubnet
-    , module Network.AWS.EC2.DeleteSubnet
-
-    -- ** CopyImage
-    , module Network.AWS.EC2.CopyImage
-
-    -- ** CreateVPCEndpoint
-    , module Network.AWS.EC2.CreateVPCEndpoint
-
-    -- ** UnmonitorInstances
-    , module Network.AWS.EC2.UnmonitorInstances
-
-    -- ** CreateSecurityGroup
-    , module Network.AWS.EC2.CreateSecurityGroup
-
-    -- ** ImportVolume
-    , module Network.AWS.EC2.ImportVolume
-
-    -- ** DisableVGWRoutePropagation
-    , module Network.AWS.EC2.DisableVGWRoutePropagation
-
-    -- ** CreateSpotDatafeedSubscription
-    , module Network.AWS.EC2.CreateSpotDatafeedSubscription
-
-    -- ** CancelSpotInstanceRequests
-    , module Network.AWS.EC2.CancelSpotInstanceRequests
-
-    -- ** CreateRoute
-    , module Network.AWS.EC2.CreateRoute
-
-    -- ** DeleteSnapshot
-    , module Network.AWS.EC2.DeleteSnapshot
-
-    -- ** AssignPrivateIPAddresses
-    , module Network.AWS.EC2.AssignPrivateIPAddresses
-
-    -- ** ModifyInstanceAttribute
-    , module Network.AWS.EC2.ModifyInstanceAttribute
-
-    -- ** DeleteCustomerGateway
-    , module Network.AWS.EC2.DeleteCustomerGateway
-
-    -- ** DisassociateRouteTable
-    , module Network.AWS.EC2.DisassociateRouteTable
-
-    -- ** GetConsoleScreenshot
-    , module Network.AWS.EC2.GetConsoleScreenshot
-
-    -- ** AssignIPv6Addresses
-    , module Network.AWS.EC2.AssignIPv6Addresses
-
-    -- ** DeleteSpotDatafeedSubscription
-    , module Network.AWS.EC2.DeleteSpotDatafeedSubscription
-
-    -- ** EnableVPCClassicLink
-    , module Network.AWS.EC2.EnableVPCClassicLink
-
-    -- ** DescribePlacementGroups
-    , module Network.AWS.EC2.DescribePlacementGroups
-
-    -- ** DescribeStaleSecurityGroups
-    , module Network.AWS.EC2.DescribeStaleSecurityGroups
-
-    -- ** PurchaseScheduledInstances
-    , module Network.AWS.EC2.PurchaseScheduledInstances
-
-    -- ** EnableVGWRoutePropagation
-    , module Network.AWS.EC2.EnableVGWRoutePropagation
-
-    -- ** DescribeSpotFleetRequestHistory
-    , module Network.AWS.EC2.DescribeSpotFleetRequestHistory
-
-    -- ** ModifySnapshotAttribute
-    , module Network.AWS.EC2.ModifySnapshotAttribute
-
-    -- ** CreateSnapshot
-    , module Network.AWS.EC2.CreateSnapshot
-
-    -- ** CreateNetworkACLEntry
-    , module Network.AWS.EC2.CreateNetworkACLEntry
-
-    -- ** CreateReservedInstancesListing
-    , module Network.AWS.EC2.CreateReservedInstancesListing
-
-    -- ** AttachVPNGateway
-    , module Network.AWS.EC2.AttachVPNGateway
-
-    -- ** CreateDHCPOptions
-    , module Network.AWS.EC2.CreateDHCPOptions
-
-    -- ** DescribeAccountAttributes
-    , module Network.AWS.EC2.DescribeAccountAttributes
-
-    -- ** ModifyHosts
-    , module Network.AWS.EC2.ModifyHosts
-
-    -- ** RebootInstances
-    , module Network.AWS.EC2.RebootInstances
-
-    -- ** UnassignIPv6Addresses
-    , module Network.AWS.EC2.UnassignIPv6Addresses
-
-    -- ** DeleteEgressOnlyInternetGateway
-    , module Network.AWS.EC2.DeleteEgressOnlyInternetGateway
-
-    -- ** PurchaseHostReservation
-    , module Network.AWS.EC2.PurchaseHostReservation
-
-    -- ** CreateImage
-    , module Network.AWS.EC2.CreateImage
-
-    -- ** DescribeClassicLinkInstances
-    , module Network.AWS.EC2.DescribeClassicLinkInstances
-
-    -- ** TerminateInstances
-    , module Network.AWS.EC2.TerminateInstances
-
-    -- ** DescribeKeyPairs
-    , module Network.AWS.EC2.DescribeKeyPairs
-
-    -- ** CreateVPNConnectionRoute
-    , module Network.AWS.EC2.CreateVPNConnectionRoute
-
-    -- ** AssociateRouteTable
-    , module Network.AWS.EC2.AssociateRouteTable
-
-    -- ** DescribeVPNGateways
-    , module Network.AWS.EC2.DescribeVPNGateways
-
-    -- ** GetConsoleOutput
-    , module Network.AWS.EC2.GetConsoleOutput
-
-    -- ** DescribeHosts
-    , module Network.AWS.EC2.DescribeHosts
-
-    -- ** DescribeImageAttribute
-    , module Network.AWS.EC2.DescribeImageAttribute
-
-    -- ** ModifyIdFormat
-    , module Network.AWS.EC2.ModifyIdFormat
-
-    -- ** DeleteRouteTable
-    , module Network.AWS.EC2.DeleteRouteTable
-
-    -- ** ResetImageAttribute
-    , module Network.AWS.EC2.ResetImageAttribute
-
-    -- ** CreateEgressOnlyInternetGateway
-    , module Network.AWS.EC2.CreateEgressOnlyInternetGateway
-
-    -- ** DescribeReservedInstancesModifications (Paginated)
-    , module Network.AWS.EC2.DescribeReservedInstancesModifications
-
-    -- ** DescribeSpotInstanceRequests
-    , module Network.AWS.EC2.DescribeSpotInstanceRequests
-
-    -- ** UnassignPrivateIPAddresses
-    , module Network.AWS.EC2.UnassignPrivateIPAddresses
-
-    -- ** DeleteDHCPOptions
-    , module Network.AWS.EC2.DeleteDHCPOptions
-
-    -- ** DescribeNetworkACLs
-    , module Network.AWS.EC2.DescribeNetworkACLs
-
-    -- ** CancelImportTask
-    , module Network.AWS.EC2.CancelImportTask
-
-    -- ** DetachClassicLinkVPC
-    , module Network.AWS.EC2.DetachClassicLinkVPC
-
-    -- ** DescribeRegions
-    , module Network.AWS.EC2.DescribeRegions
-
-    -- ** MonitorInstances
-    , module Network.AWS.EC2.MonitorInstances
-
-    -- ** AcceptVPCPeeringConnection
-    , module Network.AWS.EC2.AcceptVPCPeeringConnection
-
-    -- ** ImportSnapshot
-    , module Network.AWS.EC2.ImportSnapshot
-
-    -- ** DescribeVolumeStatus (Paginated)
-    , module Network.AWS.EC2.DescribeVolumeStatus
-
-    -- ** DescribeRouteTables
-    , module Network.AWS.EC2.DescribeRouteTables
-
-    -- ** DescribeAvailabilityZones
-    , module Network.AWS.EC2.DescribeAvailabilityZones
-
-    -- ** ModifyVPCAttribute
-    , module Network.AWS.EC2.ModifyVPCAttribute
-
-    -- ** DescribeImages
-    , module Network.AWS.EC2.DescribeImages
-
-    -- ** RestoreAddressToClassic
-    , module Network.AWS.EC2.RestoreAddressToClassic
-
-    -- ** CreateKeyPair
-    , module Network.AWS.EC2.CreateKeyPair
-
-    -- ** GetReservedInstancesExchangeQuote
-    , module Network.AWS.EC2.GetReservedInstancesExchangeQuote
-
-    -- ** DeleteVolume
-    , module Network.AWS.EC2.DeleteVolume
-
-    -- ** DescribeSpotFleetInstances
-    , module Network.AWS.EC2.DescribeSpotFleetInstances
-
-    -- * Types
-
-    -- ** Common
-    , module Network.AWS.EC2.Internal
-
-    -- ** AccountAttributeName
-    , AccountAttributeName (..)
-
-    -- ** ActivityStatus
-    , ActivityStatus (..)
-
-    -- ** AddressStatus
-    , AddressStatus (..)
-
-    -- ** Affinity
-    , Affinity (..)
-
-    -- ** AllocationState
-    , AllocationState (..)
-
-    -- ** AllocationStrategy
-    , AllocationStrategy (..)
-
-    -- ** ArchitectureValues
-    , ArchitectureValues (..)
-
-    -- ** AttachmentStatus
-    , AttachmentStatus (..)
-
-    -- ** AutoPlacement
-    , AutoPlacement (..)
-
-    -- ** AvailabilityZoneState
-    , AvailabilityZoneState (..)
-
-    -- ** BatchState
-    , BatchState (..)
-
-    -- ** BundleTaskState
-    , BundleTaskState (..)
-
-    -- ** CancelBatchErrorCode
-    , CancelBatchErrorCode (..)
-
-    -- ** CancelSpotInstanceRequestState
-    , CancelSpotInstanceRequestState (..)
-
-    -- ** ContainerFormat
-    , ContainerFormat (..)
-
-    -- ** ConversionTaskState
-    , ConversionTaskState (..)
-
-    -- ** CurrencyCodeValues
-    , CurrencyCodeValues (..)
-
-    -- ** DatafeedSubscriptionState
-    , DatafeedSubscriptionState (..)
-
-    -- ** DeviceType
-    , DeviceType (..)
-
-    -- ** DiskImageFormat
-    , DiskImageFormat (..)
-
-    -- ** DomainType
-    , DomainType (..)
-
-    -- ** EventCode
-    , EventCode (..)
-
-    -- ** EventType
-    , EventType (..)
-
-    -- ** ExcessCapacityTerminationPolicy
-    , ExcessCapacityTerminationPolicy (..)
-
-    -- ** ExportEnvironment
-    , ExportEnvironment (..)
-
-    -- ** ExportTaskState
-    , ExportTaskState (..)
-
-    -- ** FleetType
-    , FleetType (..)
-
-    -- ** FlowLogsResourceType
-    , FlowLogsResourceType (..)
-
-    -- ** GatewayType
-    , GatewayType (..)
-
-    -- ** HostTenancy
-    , HostTenancy (..)
-
-    -- ** HypervisorType
-    , HypervisorType (..)
-
-    -- ** ImageAttributeName
-    , ImageAttributeName (..)
-
-    -- ** ImageState
-    , ImageState (..)
-
-    -- ** ImageTypeValues
-    , ImageTypeValues (..)
-
-    -- ** InstanceAttributeName
-    , InstanceAttributeName (..)
-
-    -- ** InstanceLifecycleType
-    , InstanceLifecycleType (..)
-
-    -- ** InstanceStateName
-    , InstanceStateName (..)
-
-    -- ** InstanceType
-    , InstanceType (..)
-
-    -- ** ListingState
-    , ListingState (..)
-
-    -- ** ListingStatus
-    , ListingStatus (..)
-
-    -- ** MonitoringState
-    , MonitoringState (..)
-
-    -- ** MoveStatus
-    , MoveStatus (..)
-
-    -- ** NatGatewayState
-    , NatGatewayState (..)
-
-    -- ** NetworkInterfaceAttribute
-    , NetworkInterfaceAttribute (..)
-
-    -- ** NetworkInterfaceStatus
-    , NetworkInterfaceStatus (..)
-
-    -- ** NetworkInterfaceType
-    , NetworkInterfaceType (..)
-
-    -- ** OfferingClassType
-    , OfferingClassType (..)
-
-    -- ** OfferingTypeValues
-    , OfferingTypeValues (..)
-
-    -- ** OperationType
-    , OperationType (..)
-
-    -- ** PaymentOption
-    , PaymentOption (..)
-
-    -- ** PermissionGroup
-    , PermissionGroup (..)
-
-    -- ** PlacementGroupState
-    , PlacementGroupState (..)
-
-    -- ** PlacementStrategy
-    , PlacementStrategy (..)
-
-    -- ** PlatformValues
-    , PlatformValues (..)
-
-    -- ** ProductCodeValues
-    , ProductCodeValues (..)
-
-    -- ** RIProductDescription
-    , RIProductDescription (..)
-
-    -- ** RecurringChargeFrequency
-    , RecurringChargeFrequency (..)
-
-    -- ** ReportInstanceReasonCodes
-    , ReportInstanceReasonCodes (..)
-
-    -- ** ReportStatusType
-    , ReportStatusType (..)
-
-    -- ** ReservationState
-    , ReservationState (..)
-
-    -- ** ReservedInstanceState
-    , ReservedInstanceState (..)
-
-    -- ** ResetImageAttributeName
-    , ResetImageAttributeName (..)
-
-    -- ** ResourceType
-    , ResourceType (..)
-
-    -- ** RouteOrigin
-    , RouteOrigin (..)
-
-    -- ** RouteState
-    , RouteState (..)
-
-    -- ** RuleAction
-    , RuleAction (..)
-
-    -- ** Scope
-    , Scope (..)
-
-    -- ** ShutdownBehavior
-    , ShutdownBehavior (..)
-
-    -- ** SnapshotAttributeName
-    , SnapshotAttributeName (..)
-
-    -- ** SnapshotState
-    , SnapshotState (..)
-
-    -- ** SpotInstanceState
-    , SpotInstanceState (..)
-
-    -- ** SpotInstanceType
-    , SpotInstanceType (..)
-
-    -- ** State
-    , State (..)
-
-    -- ** StatusName
-    , StatusName (..)
-
-    -- ** StatusType
-    , StatusType (..)
-
-    -- ** SubnetCidrBlockStateCode
-    , SubnetCidrBlockStateCode (..)
-
-    -- ** SubnetState
-    , SubnetState (..)
-
-    -- ** SummaryStatus
-    , SummaryStatus (..)
-
-    -- ** TelemetryStatus
-    , TelemetryStatus (..)
-
-    -- ** Tenancy
-    , Tenancy (..)
-
-    -- ** TrafficType
-    , TrafficType (..)
-
-    -- ** VPCAttributeName
-    , VPCAttributeName (..)
-
-    -- ** VPCCidrBlockStateCode
-    , VPCCidrBlockStateCode (..)
-
-    -- ** VPCPeeringConnectionStateReasonCode
-    , VPCPeeringConnectionStateReasonCode (..)
-
-    -- ** VPCState
-    , VPCState (..)
-
-    -- ** VPNState
-    , VPNState (..)
-
-    -- ** VPNStaticRouteSource
-    , VPNStaticRouteSource (..)
-
-    -- ** VirtualizationType
-    , VirtualizationType (..)
-
-    -- ** VolumeAttachmentState
-    , VolumeAttachmentState (..)
-
-    -- ** VolumeAttributeName
-    , VolumeAttributeName (..)
-
-    -- ** VolumeState
-    , VolumeState (..)
-
-    -- ** VolumeStatusInfoStatus
-    , VolumeStatusInfoStatus (..)
-
-    -- ** VolumeStatusName
-    , VolumeStatusName (..)
-
-    -- ** VolumeType
-    , VolumeType (..)
-
-    -- ** AccountAttribute
-    , AccountAttribute
-    , accountAttribute
-    , aaAttributeValues
-    , aaAttributeName
-
-    -- ** AccountAttributeValue
-    , AccountAttributeValue
-    , accountAttributeValue
-    , aavAttributeValue
-
-    -- ** ActiveInstance
-    , ActiveInstance
-    , activeInstance
-    , aiInstanceId
-    , aiInstanceType
-    , aiSpotInstanceRequestId
-
-    -- ** Address
-    , Address
-    , address
-    , aAssociationId
-    , aInstanceId
-    , aNetworkInterfaceOwnerId
-    , aAllocationId
-    , aDomain
-    , aNetworkInterfaceId
-    , aPrivateIPAddress
-    , aPublicIP
-
-    -- ** AttributeBooleanValue
-    , AttributeBooleanValue
-    , attributeBooleanValue
-    , abvValue
-
-    -- ** AttributeValue
-    , AttributeValue
-    , attributeValue
-    , avValue
-
-    -- ** AvailabilityZone
-    , AvailabilityZone
-    , availabilityZone
-    , azState
-    , azRegionName
-    , azZoneName
-    , azMessages
-
-    -- ** AvailabilityZoneMessage
-    , AvailabilityZoneMessage
-    , availabilityZoneMessage
-    , azmMessage
-
-    -- ** AvailableCapacity
-    , AvailableCapacity
-    , availableCapacity
-    , acAvailableInstanceCapacity
-    , acAvailableVCPUs
-
-    -- ** BlobAttributeValue
-    , BlobAttributeValue
-    , blobAttributeValue
-    , bavValue
-
-    -- ** BlockDeviceMapping
-    , BlockDeviceMapping
-    , blockDeviceMapping
-    , bdmVirtualName
-    , bdmNoDevice
-    , bdmEBS
-    , bdmDeviceName
-
-    -- ** BundleTask
-    , BundleTask
-    , bundleTask
-    , btBundleTaskError
-    , btBundleId
-    , btInstanceId
-    , btProgress
-    , btStartTime
-    , btState
-    , btStorage
-    , btUpdateTime
-
-    -- ** BundleTaskError
-    , BundleTaskError
-    , bundleTaskError
-    , bteCode
-    , bteMessage
-
-    -- ** CancelSpotFleetRequestsError
-    , CancelSpotFleetRequestsError
-    , cancelSpotFleetRequestsError
-    , csfreCode
-    , csfreMessage
-
-    -- ** CancelSpotFleetRequestsErrorItem
-    , CancelSpotFleetRequestsErrorItem
-    , cancelSpotFleetRequestsErrorItem
-    , csfreiSpotFleetRequestId
-    , csfreiError
-
-    -- ** CancelSpotFleetRequestsSuccessItem
-    , CancelSpotFleetRequestsSuccessItem
-    , cancelSpotFleetRequestsSuccessItem
-    , csfrsiSpotFleetRequestId
-    , csfrsiCurrentSpotFleetRequestState
-    , csfrsiPreviousSpotFleetRequestState
-
-    -- ** CancelledSpotInstanceRequest
-    , CancelledSpotInstanceRequest
-    , cancelledSpotInstanceRequest
-    , csirState
-    , csirSpotInstanceRequestId
-
-    -- ** ClassicLinkDNSSupport
-    , ClassicLinkDNSSupport
-    , classicLinkDNSSupport
-    , cldsVPCId
-    , cldsClassicLinkDNSSupported
-
-    -- ** ClassicLinkInstance
-    , ClassicLinkInstance
-    , classicLinkInstance
-    , cliInstanceId
-    , cliGroups
-    , cliVPCId
-    , cliTags
-
-    -- ** ClientData
-    , ClientData
-    , clientData
-    , cdUploadStart
-    , cdUploadSize
-    , cdUploadEnd
-    , cdComment
-
-    -- ** ConversionTask
-    , ConversionTask
-    , conversionTask
-    , ctImportInstance
-    , ctStatusMessage
-    , ctImportVolume
-    , ctExpirationTime
-    , ctTags
-    , ctConversionTaskId
-    , ctState
-
-    -- ** CreateVolumePermission
-    , CreateVolumePermission
-    , createVolumePermission
-    , cvpGroup
-    , cvpUserId
-
-    -- ** CreateVolumePermissionModifications
-    , CreateVolumePermissionModifications
-    , createVolumePermissionModifications
-    , cvpmRemove
-    , cvpmAdd
-
-    -- ** CustomerGateway
-    , CustomerGateway
-    , customerGateway
-    , cgTags
-    , cgBGPASN
-    , cgCustomerGatewayId
-    , cgIPAddress
-    , cgState
-    , cgType
-
-    -- ** DHCPConfiguration
-    , DHCPConfiguration
-    , dhcpConfiguration
-    , dcValues
-    , dcKey
-
-    -- ** DHCPOptions
-    , DHCPOptions
-    , dhcpOptions
-    , doDHCPConfigurations
-    , doDHCPOptionsId
-    , doTags
-
-    -- ** DiskImage
-    , DiskImage
-    , diskImage
-    , diImage
-    , diVolume
-    , diDescription
-
-    -- ** DiskImageDescription
-    , DiskImageDescription
-    , diskImageDescription
-    , dChecksum
-    , dFormat
-    , dSize
-    , dImportManifestURL
-
-    -- ** DiskImageDetail
-    , DiskImageDetail
-    , diskImageDetail
-    , didFormat
-    , didBytes
-    , didImportManifestURL
-
-    -- ** DiskImageVolumeDescription
-    , DiskImageVolumeDescription
-    , diskImageVolumeDescription
-    , divdSize
-    , divdId
-
-    -- ** EBSBlockDevice
-    , EBSBlockDevice
-    , ebsBlockDevice
-    , ebdDeleteOnTermination
-    , ebdVolumeSize
-    , ebdIOPS
-    , ebdEncrypted
-    , ebdVolumeType
-    , ebdSnapshotId
-
-    -- ** EBSInstanceBlockDevice
-    , EBSInstanceBlockDevice
-    , ebsInstanceBlockDevice
-    , eibdStatus
-    , eibdDeleteOnTermination
-    , eibdVolumeId
-    , eibdAttachTime
-
-    -- ** EBSInstanceBlockDeviceSpecification
-    , EBSInstanceBlockDeviceSpecification
-    , ebsInstanceBlockDeviceSpecification
-    , eibdsDeleteOnTermination
-    , eibdsVolumeId
-
-    -- ** EgressOnlyInternetGateway
-    , EgressOnlyInternetGateway
-    , egressOnlyInternetGateway
-    , eoigEgressOnlyInternetGatewayId
-    , eoigAttachments
-
-    -- ** EventInformation
-    , EventInformation
-    , eventInformation
-    , eiInstanceId
-    , eiEventDescription
-    , eiEventSubType
-
-    -- ** ExportTask
-    , ExportTask
-    , exportTask
-    , etDescription
-    , etExportTaskId
-    , etExportToS3Task
-    , etInstanceExportDetails
-    , etState
-    , etStatusMessage
-
-    -- ** ExportToS3Task
-    , ExportToS3Task
-    , exportToS3Task
-    , etstS3Key
-    , etstContainerFormat
-    , etstS3Bucket
-    , etstDiskImageFormat
-
-    -- ** ExportToS3TaskSpecification
-    , ExportToS3TaskSpecification
-    , exportToS3TaskSpecification
-    , etstsContainerFormat
-    , etstsS3Prefix
-    , etstsS3Bucket
-    , etstsDiskImageFormat
-
-    -- ** Filter
-    , Filter
-    , filter'
-    , fValues
-    , fName
-
-    -- ** FlowLog
-    , FlowLog
-    , flowLog
-    , flCreationTime
-    , flResourceId
-    , flFlowLogStatus
-    , flTrafficType
-    , flDeliverLogsStatus
-    , flDeliverLogsErrorMessage
-    , flLogGroupName
-    , flDeliverLogsPermissionARN
-    , flFlowLogId
-
-    -- ** GroupIdentifier
-    , GroupIdentifier
-    , groupIdentifier
-    , giGroupId
-    , giGroupName
-
-    -- ** HistoryRecord
-    , HistoryRecord
-    , historyRecord
-    , hrTimestamp
-    , hrEventType
-    , hrEventInformation
-
-    -- ** Host
-    , Host
-    , host
-    , hState
-    , hClientToken
-    , hHostId
-    , hAvailableCapacity
-    , hHostReservationId
-    , hHostProperties
-    , hAvailabilityZone
-    , hInstances
-    , hAutoPlacement
-
-    -- ** HostInstance
-    , HostInstance
-    , hostInstance
-    , hiInstanceId
-    , hiInstanceType
-
-    -- ** HostOffering
-    , HostOffering
-    , hostOffering
-    , hoInstanceFamily
-    , hoCurrencyCode
-    , hoHourlyPrice
-    , hoUpfrontPrice
-    , hoOfferingId
-    , hoDuration
-    , hoPaymentOption
-
-    -- ** HostProperties
-    , HostProperties
-    , hostProperties
-    , hpInstanceType
-    , hpTotalVCPUs
-    , hpCores
-    , hpSockets
-
-    -- ** HostReservation
-    , HostReservation
-    , hostReservation
-    , hrState
-    , hrInstanceFamily
-    , hrCurrencyCode
-    , hrHostReservationId
-    , hrStart
-    , hrHourlyPrice
-    , hrCount
-    , hrUpfrontPrice
-    , hrEnd
-    , hrHostIdSet
-    , hrOfferingId
-    , hrDuration
-    , hrPaymentOption
-
-    -- ** IAMInstanceProfile
-    , IAMInstanceProfile
-    , iamInstanceProfile
-    , iapARN
-    , iapId
-
-    -- ** IAMInstanceProfileSpecification
-    , IAMInstanceProfileSpecification
-    , iamInstanceProfileSpecification
-    , iapsARN
-    , iapsName
-
-    -- ** ICMPTypeCode
-    , ICMPTypeCode
-    , icmpTypeCode
-    , itcCode
-    , itcType
-
-    -- ** IPPermission
-    , IPPermission
-    , ipPermission
-    , ipFromPort
-    , ipUserIdGroupPairs
-    , ipPrefixListIds
-    , ipToPort
-    , ipIPv6Ranges
-    , ipIPRanges
-    , ipIPProtocol
-
-    -- ** IPRange
-    , IPRange
-    , ipRange
-    , irCidrIP
-
-    -- ** IPv6CidrBlock
-    , IPv6CidrBlock
-    , ipv6CidrBlock
-    , icbIPv6CidrBlock
-
-    -- ** IPv6Range
-    , IPv6Range
-    , ipv6Range
-    , irCidrIPv6
-
-    -- ** IdFormat
-    , IdFormat
-    , idFormat
-    , ifUseLongIds
-    , ifDeadline
-    , ifResource
-
-    -- ** Image
-    , Image
-    , image
-    , iPlatform
-    , iEnaSupport
-    , iImageOwnerAlias
-    , iRAMDiskId
-    , iKernelId
-    , iRootDeviceName
-    , iSRIOVNetSupport
-    , iName
-    , iCreationDate
-    , iProductCodes
-    , iStateReason
-    , iDescription
-    , iBlockDeviceMappings
-    , iTags
-    , iImageId
-    , iImageLocation
-    , iState
-    , iOwnerId
-    , iPublic
-    , iArchitecture
-    , iImageType
-    , iRootDeviceType
-    , iVirtualizationType
-    , iHypervisor
-
-    -- ** ImageDiskContainer
-    , ImageDiskContainer
-    , imageDiskContainer
-    , idcFormat
-    , idcURL
-    , idcDeviceName
-    , idcUserBucket
-    , idcDescription
-    , idcSnapshotId
-
-    -- ** ImportImageTask
-    , ImportImageTask
-    , importImageTask
-    , iitStatus
-    , iitHypervisor
-    , iitPlatform
-    , iitProgress
-    , iitLicenseType
-    , iitSnapshotDetails
-    , iitStatusMessage
-    , iitImageId
-    , iitImportTaskId
-    , iitArchitecture
-    , iitDescription
-
-    -- ** ImportInstanceLaunchSpecification
-    , ImportInstanceLaunchSpecification
-    , importInstanceLaunchSpecification
-    , iilsAdditionalInfo
-    , iilsGroupNames
-    , iilsSubnetId
-    , iilsInstanceType
-    , iilsGroupIds
-    , iilsUserData
-    , iilsMonitoring
-    , iilsPrivateIPAddress
-    , iilsInstanceInitiatedShutdownBehavior
-    , iilsArchitecture
-    , iilsPlacement
-
-    -- ** ImportInstanceTaskDetails
-    , ImportInstanceTaskDetails
-    , importInstanceTaskDetails
-    , iitdInstanceId
-    , iitdPlatform
-    , iitdDescription
-    , iitdVolumes
-
-    -- ** ImportInstanceVolumeDetailItem
-    , ImportInstanceVolumeDetailItem
-    , importInstanceVolumeDetailItem
-    , iivdiStatusMessage
-    , iivdiDescription
-    , iivdiBytesConverted
-    , iivdiAvailabilityZone
-    , iivdiImage
-    , iivdiVolume
-    , iivdiStatus
-
-    -- ** ImportSnapshotTask
-    , ImportSnapshotTask
-    , importSnapshotTask
-    , istSnapshotTaskDetail
-    , istImportTaskId
-    , istDescription
-
-    -- ** ImportVolumeTaskDetails
-    , ImportVolumeTaskDetails
-    , importVolumeTaskDetails
-    , ivtdDescription
-    , ivtdBytesConverted
-    , ivtdAvailabilityZone
-    , ivtdImage
-    , ivtdVolume
-
-    -- ** Instance
-    , Instance
-    , instance'
-    , insPublicDNSName
-    , insPlatform
-    , insSecurityGroups
-    , insClientToken
-    , insEnaSupport
-    , insSourceDestCheck
-    , insVPCId
-    , insKeyName
-    , insNetworkInterfaces
-    , insRAMDiskId
-    , insSubnetId
-    , insKernelId
-    , insRootDeviceName
-    , insSRIOVNetSupport
-    , insEBSOptimized
-    , insStateTransitionReason
-    , insInstanceLifecycle
-    , insIAMInstanceProfile
-    , insPrivateIPAddress
-    , insProductCodes
-    , insSpotInstanceRequestId
-    , insPrivateDNSName
-    , insStateReason
-    , insBlockDeviceMappings
-    , insPublicIPAddress
-    , insTags
-    , insInstanceId
-    , insImageId
-    , insAMILaunchIndex
-    , insInstanceType
-    , insLaunchTime
-    , insPlacement
-    , insMonitoring
-    , insArchitecture
-    , insRootDeviceType
-    , insVirtualizationType
-    , insHypervisor
-    , insState
-
-    -- ** InstanceBlockDeviceMapping
-    , InstanceBlockDeviceMapping
-    , instanceBlockDeviceMapping
-    , ibdmEBS
-    , ibdmDeviceName
-
-    -- ** InstanceBlockDeviceMappingSpecification
-    , InstanceBlockDeviceMappingSpecification
-    , instanceBlockDeviceMappingSpecification
-    , ibdmsVirtualName
-    , ibdmsNoDevice
-    , ibdmsEBS
-    , ibdmsDeviceName
-
-    -- ** InstanceCapacity
-    , InstanceCapacity
-    , instanceCapacity
-    , icAvailableCapacity
-    , icInstanceType
-    , icTotalCapacity
-
-    -- ** InstanceCount
-    , InstanceCount
-    , instanceCount
-    , icState
-    , icInstanceCount
-
-    -- ** InstanceExportDetails
-    , InstanceExportDetails
-    , instanceExportDetails
-    , iedTargetEnvironment
-    , iedInstanceId
-
-    -- ** InstanceIPv6Address
-    , InstanceIPv6Address
-    , instanceIPv6Address
-    , iiaIPv6Address
-
-    -- ** InstanceMonitoring
-    , InstanceMonitoring
-    , instanceMonitoring
-    , imInstanceId
-    , imMonitoring
-
-    -- ** InstanceNetworkInterface
-    , InstanceNetworkInterface
-    , instanceNetworkInterface
-    , iniGroups
-    , iniStatus
-    , iniPrivateIPAddresses
-    , iniSourceDestCheck
-    , iniVPCId
-    , iniNetworkInterfaceId
-    , iniSubnetId
-    , iniMACAddress
-    , iniAttachment
-    , iniOwnerId
-    , iniPrivateIPAddress
-    , iniPrivateDNSName
-    , iniDescription
-    , iniAssociation
-    , iniIPv6Addresses
-
-    -- ** InstanceNetworkInterfaceAssociation
-    , InstanceNetworkInterfaceAssociation
-    , instanceNetworkInterfaceAssociation
-    , iniaPublicDNSName
-    , iniaIPOwnerId
-    , iniaPublicIP
-
-    -- ** InstanceNetworkInterfaceAttachment
-    , InstanceNetworkInterfaceAttachment
-    , instanceNetworkInterfaceAttachment
-    , iniaStatus
-    , iniaDeleteOnTermination
-    , iniaAttachmentId
-    , iniaAttachTime
-    , iniaDeviceIndex
-
-    -- ** InstanceNetworkInterfaceSpecification
-    , InstanceNetworkInterfaceSpecification
-    , instanceNetworkInterfaceSpecification
-    , inisGroups
-    , inisPrivateIPAddresses
-    , inisDeleteOnTermination
-    , inisAssociatePublicIPAddress
-    , inisNetworkInterfaceId
-    , inisSubnetId
-    , inisIPv6AddressCount
-    , inisPrivateIPAddress
-    , inisSecondaryPrivateIPAddressCount
-    , inisDescription
-    , inisDeviceIndex
-    , inisIPv6Addresses
-
-    -- ** InstancePrivateIPAddress
-    , InstancePrivateIPAddress
-    , instancePrivateIPAddress
-    , ipiaPrimary
-    , ipiaPrivateIPAddress
-    , ipiaPrivateDNSName
-    , ipiaAssociation
-
-    -- ** InstanceState
-    , InstanceState
-    , instanceState
-    , isName
-    , isCode
-
-    -- ** InstanceStateChange
-    , InstanceStateChange
-    , instanceStateChange
-    , iscInstanceId
-    , iscCurrentState
-    , iscPreviousState
-
-    -- ** InstanceStatus
-    , InstanceStatus
-    , instanceStatus
-    , isInstanceId
-    , isSystemStatus
-    , isEvents
-    , isAvailabilityZone
-    , isInstanceStatus
-    , isInstanceState
-
-    -- ** InstanceStatusDetails
-    , InstanceStatusDetails
-    , instanceStatusDetails
-    , isdStatus
-    , isdImpairedSince
-    , isdName
-
-    -- ** InstanceStatusEvent
-    , InstanceStatusEvent
-    , instanceStatusEvent
-    , iseNotBefore
-    , iseCode
-    , iseDescription
-    , iseNotAfter
-
-    -- ** InstanceStatusSummary
-    , InstanceStatusSummary
-    , instanceStatusSummary
-    , issDetails
-    , issStatus
-
-    -- ** InternetGateway
-    , InternetGateway
-    , internetGateway
-    , igAttachments
-    , igTags
-    , igInternetGatewayId
-
-    -- ** InternetGatewayAttachment
-    , InternetGatewayAttachment
-    , internetGatewayAttachment
-    , igaState
-    , igaVPCId
-
-    -- ** KeyPairInfo
-    , KeyPairInfo
-    , keyPairInfo
-    , kpiKeyFingerprint
-    , kpiKeyName
-
-    -- ** LaunchPermission
-    , LaunchPermission
-    , launchPermission
-    , lpGroup
-    , lpUserId
-
-    -- ** LaunchPermissionModifications
-    , LaunchPermissionModifications
-    , launchPermissionModifications
-    , lpmRemove
-    , lpmAdd
-
-    -- ** LaunchSpecification
-    , LaunchSpecification
-    , launchSpecification
-    , lsSecurityGroups
-    , lsKeyName
-    , lsNetworkInterfaces
-    , lsRAMDiskId
-    , lsSubnetId
-    , lsKernelId
-    , lsInstanceType
-    , lsEBSOptimized
-    , lsUserData
-    , lsMonitoring
-    , lsIAMInstanceProfile
-    , lsImageId
-    , lsAddressingType
-    , lsBlockDeviceMappings
-    , lsPlacement
-
-    -- ** Monitoring
-    , Monitoring
-    , monitoring
-    , mState
-
-    -- ** MovingAddressStatus
-    , MovingAddressStatus
-    , movingAddressStatus
-    , masMoveStatus
-    , masPublicIP
-
-    -- ** NatGateway
-    , NatGateway
-    , natGateway
-    , ngState
-    , ngFailureCode
-    , ngVPCId
-    , ngFailureMessage
-    , ngNatGatewayId
-    , ngSubnetId
-    , ngDeleteTime
-    , ngProvisionedBandwidth
-    , ngNatGatewayAddresses
-    , ngCreateTime
-
-    -- ** NatGatewayAddress
-    , NatGatewayAddress
-    , natGatewayAddress
-    , ngaPrivateIP
-    , ngaAllocationId
-    , ngaNetworkInterfaceId
-    , ngaPublicIP
-
-    -- ** NetworkACL
-    , NetworkACL
-    , networkACL
-    , naEntries
-    , naNetworkACLId
-    , naVPCId
-    , naAssociations
-    , naTags
-    , naIsDefault
-
-    -- ** NetworkACLAssociation
-    , NetworkACLAssociation
-    , networkACLAssociation
-    , naaNetworkACLId
-    , naaSubnetId
-    , naaNetworkACLAssociationId
-
-    -- ** NetworkACLEntry
-    , NetworkACLEntry
-    , networkACLEntry
-    , naeIPv6CidrBlock
-    , naeICMPTypeCode
-    , naeRuleNumber
-    , naeRuleAction
-    , naeProtocol
-    , naePortRange
-    , naeCidrBlock
-    , naeEgress
-
-    -- ** NetworkInterface
-    , NetworkInterface
-    , networkInterface
-    , niGroups
-    , niStatus
-    , niPrivateIPAddresses
-    , niSourceDestCheck
-    , niInterfaceType
-    , niVPCId
-    , niTagSet
-    , niRequesterManaged
-    , niNetworkInterfaceId
-    , niSubnetId
-    , niMACAddress
-    , niAttachment
-    , niOwnerId
-    , niAvailabilityZone
-    , niPrivateIPAddress
-    , niPrivateDNSName
-    , niRequesterId
-    , niDescription
-    , niAssociation
-    , niIPv6Addresses
-
-    -- ** NetworkInterfaceAssociation
-    , NetworkInterfaceAssociation
-    , networkInterfaceAssociation
-    , niaAssociationId
-    , niaPublicDNSName
-    , niaAllocationId
-    , niaIPOwnerId
-    , niaPublicIP
-
-    -- ** NetworkInterfaceAttachment
-    , NetworkInterfaceAttachment
-    , networkInterfaceAttachment
-    , niaInstanceId
-    , niaStatus
-    , niaDeleteOnTermination
-    , niaAttachmentId
-    , niaInstanceOwnerId
-    , niaAttachTime
-    , niaDeviceIndex
-
-    -- ** NetworkInterfaceAttachmentChanges
-    , NetworkInterfaceAttachmentChanges
-    , networkInterfaceAttachmentChanges
-    , niacDeleteOnTermination
-    , niacAttachmentId
-
-    -- ** NetworkInterfaceIPv6Address
-    , NetworkInterfaceIPv6Address
-    , networkInterfaceIPv6Address
-    , niiaIPv6Address
-
-    -- ** NetworkInterfacePrivateIPAddress
-    , NetworkInterfacePrivateIPAddress
-    , networkInterfacePrivateIPAddress
-    , nipiaPrimary
-    , nipiaPrivateIPAddress
-    , nipiaPrivateDNSName
-    , nipiaAssociation
-
-    -- ** NewDHCPConfiguration
-    , NewDHCPConfiguration
-    , newDHCPConfiguration
-    , ndcValues
-    , ndcKey
-
-    -- ** PeeringConnectionOptions
-    , PeeringConnectionOptions
-    , peeringConnectionOptions
-    , pcoAllowEgressFromLocalVPCToRemoteClassicLink
-    , pcoAllowEgressFromLocalClassicLinkToRemoteVPC
-    , pcoAllowDNSResolutionFromRemoteVPC
-
-    -- ** PeeringConnectionOptionsRequest
-    , PeeringConnectionOptionsRequest
-    , peeringConnectionOptionsRequest
-    , pcorAllowEgressFromLocalVPCToRemoteClassicLink
-    , pcorAllowEgressFromLocalClassicLinkToRemoteVPC
-    , pcorAllowDNSResolutionFromRemoteVPC
-
-    -- ** Placement
-    , Placement
-    , placement
-    , pAffinity
-    , pHostId
-    , pAvailabilityZone
-    , pTenancy
-    , pGroupName
-
-    -- ** PlacementGroup
-    , PlacementGroup
-    , placementGroup
-    , pgState
-    , pgStrategy
-    , pgGroupName
-
-    -- ** PortRange
-    , PortRange
-    , portRange
-    , prTo
-    , prFrom
-
-    -- ** PrefixList
-    , PrefixList
-    , prefixList
-    , plCidrs
-    , plPrefixListId
-    , plPrefixListName
-
-    -- ** PrefixListId
-    , PrefixListId
-    , prefixListId
-    , pliPrefixListId
-
-    -- ** PriceSchedule
-    , PriceSchedule
-    , priceSchedule
-    , psCurrencyCode
-    , psTerm
-    , psActive
-    , psPrice
-
-    -- ** PriceScheduleSpecification
-    , PriceScheduleSpecification
-    , priceScheduleSpecification
-    , pssCurrencyCode
-    , pssTerm
-    , pssPrice
-
-    -- ** PricingDetail
-    , PricingDetail
-    , pricingDetail
-    , pdCount
-    , pdPrice
-
-    -- ** PrivateIPAddressSpecification
-    , PrivateIPAddressSpecification
-    , privateIPAddressSpecification
-    , piasPrimary
-    , piasPrivateIPAddress
-
-    -- ** ProductCode
-    , ProductCode
-    , productCode
-    , pcProductCodeType
-    , pcProductCodeId
-
-    -- ** PropagatingVGW
-    , PropagatingVGW
-    , propagatingVGW
-    , pvGatewayId
-
-    -- ** ProvisionedBandwidth
-    , ProvisionedBandwidth
-    , provisionedBandwidth
-    , pbStatus
-    , pbRequested
-    , pbProvisioned
-    , pbRequestTime
-    , pbProvisionTime
-
-    -- ** Purchase
-    , Purchase
-    , purchase
-    , pInstanceFamily
-    , pCurrencyCode
-    , pHostReservationId
-    , pHourlyPrice
-    , pUpfrontPrice
-    , pHostIdSet
-    , pDuration
-    , pPaymentOption
-
-    -- ** PurchaseRequest
-    , PurchaseRequest
-    , purchaseRequest
-    , prPurchaseToken
-    , prInstanceCount
-
-    -- ** RecurringCharge
-    , RecurringCharge
-    , recurringCharge
-    , rcAmount
-    , rcFrequency
-
-    -- ** RegionInfo
-    , RegionInfo
-    , regionInfo
-    , riRegionName
-    , riEndpoint
-
-    -- ** RequestSpotLaunchSpecification
-    , RequestSpotLaunchSpecification
-    , requestSpotLaunchSpecification
-    , rslsSecurityGroupIds
-    , rslsSecurityGroups
-    , rslsKeyName
-    , rslsNetworkInterfaces
-    , rslsRAMDiskId
-    , rslsSubnetId
-    , rslsKernelId
-    , rslsInstanceType
-    , rslsEBSOptimized
-    , rslsUserData
-    , rslsMonitoring
-    , rslsIAMInstanceProfile
-    , rslsImageId
-    , rslsAddressingType
-    , rslsBlockDeviceMappings
-    , rslsPlacement
-
-    -- ** Reservation
-    , Reservation
-    , reservation
-    , rGroups
-    , rInstances
-    , rRequesterId
-    , rReservationId
-    , rOwnerId
-
-    -- ** ReservationValue
-    , ReservationValue
-    , reservationValue
-    , rvHourlyPrice
-    , rvRemainingTotalValue
-    , rvRemainingUpfrontValue
-
-    -- ** ReservedInstanceLimitPrice
-    , ReservedInstanceLimitPrice
-    , reservedInstanceLimitPrice
-    , rilpAmount
-    , rilpCurrencyCode
-
-    -- ** ReservedInstanceReservationValue
-    , ReservedInstanceReservationValue
-    , reservedInstanceReservationValue
-    , rirvReservationValue
-    , rirvReservedInstanceId
-
-    -- ** ReservedInstances
-    , ReservedInstances
-    , reservedInstances
-    , riState
-    , riCurrencyCode
-    , riInstanceCount
-    , riProductDescription
-    , riStart
-    , riInstanceType
-    , riEnd
-    , riAvailabilityZone
-    , riScope
-    , riRecurringCharges
-    , riOfferingType
-    , riUsagePrice
-    , riFixedPrice
-    , riReservedInstancesId
-    , riInstanceTenancy
-    , riOfferingClass
-    , riDuration
-    , riTags
-
-    -- ** ReservedInstancesConfiguration
-    , ReservedInstancesConfiguration
-    , reservedInstancesConfiguration
-    , ricPlatform
-    , ricInstanceCount
-    , ricInstanceType
-    , ricAvailabilityZone
-    , ricScope
-
-    -- ** ReservedInstancesId
-    , ReservedInstancesId
-    , reservedInstancesId
-    , riiReservedInstancesId
-
-    -- ** ReservedInstancesListing
-    , ReservedInstancesListing
-    , reservedInstancesListing
-    , rilStatus
-    , rilClientToken
-    , rilUpdateDate
-    , rilCreateDate
-    , rilPriceSchedules
-    , rilStatusMessage
-    , rilReservedInstancesId
-    , rilTags
-    , rilInstanceCounts
-    , rilReservedInstancesListingId
-
-    -- ** ReservedInstancesModification
-    , ReservedInstancesModification
-    , reservedInstancesModification
-    , rimModificationResults
-    , rimStatus
-    , rimClientToken
-    , rimUpdateDate
-    , rimCreateDate
-    , rimEffectiveDate
-    , rimStatusMessage
-    , rimReservedInstancesModificationId
-    , rimReservedInstancesIds
-
-    -- ** ReservedInstancesModificationResult
-    , ReservedInstancesModificationResult
-    , reservedInstancesModificationResult
-    , rimrReservedInstancesId
-    , rimrTargetConfiguration
-
-    -- ** ReservedInstancesOffering
-    , ReservedInstancesOffering
-    , reservedInstancesOffering
-    , rioMarketplace
-    , rioCurrencyCode
-    , rioProductDescription
-    , rioInstanceType
-    , rioAvailabilityZone
-    , rioPricingDetails
-    , rioScope
-    , rioRecurringCharges
-    , rioOfferingType
-    , rioUsagePrice
-    , rioFixedPrice
-    , rioInstanceTenancy
-    , rioReservedInstancesOfferingId
-    , rioOfferingClass
-    , rioDuration
-
-    -- ** Route
-    , Route
-    , route
-    , rVPCPeeringConnectionId
-    , rInstanceId
-    , rOrigin
-    , rState
-    , rEgressOnlyInternetGatewayId
-    , rDestinationIPv6CidrBlock
-    , rNatGatewayId
-    , rNetworkInterfaceId
-    , rGatewayId
-    , rInstanceOwnerId
-    , rDestinationPrefixListId
-    , rDestinationCidrBlock
-
-    -- ** RouteTable
-    , RouteTable
-    , routeTable
-    , rtRouteTableId
-    , rtRoutes
-    , rtVPCId
-    , rtPropagatingVGWs
-    , rtAssociations
-    , rtTags
-
-    -- ** RouteTableAssociation
-    , RouteTableAssociation
-    , routeTableAssociation
-    , rtaRouteTableId
-    , rtaRouteTableAssociationId
-    , rtaMain
-    , rtaSubnetId
-
-    -- ** RunInstancesMonitoringEnabled
-    , RunInstancesMonitoringEnabled
-    , runInstancesMonitoringEnabled
-    , rimeEnabled
-
-    -- ** S3Storage
-    , S3Storage
-    , s3Storage
-    , ssPrefix
-    , ssUploadPolicy
-    , ssBucket
-    , ssUploadPolicySignature
-    , ssAWSAccessKeyId
-
-    -- ** ScheduledInstance
-    , ScheduledInstance
-    , scheduledInstance
-    , siPreviousSlotEndTime
-    , siPlatform
-    , siTermStartDate
-    , siInstanceCount
-    , siScheduledInstanceId
-    , siHourlyPrice
-    , siCreateDate
-    , siSlotDurationInHours
-    , siTotalScheduledInstanceHours
-    , siInstanceType
-    , siRecurrence
-    , siAvailabilityZone
-    , siTermEndDate
-    , siNextSlotStartTime
-    , siNetworkPlatform
-
-    -- ** ScheduledInstanceAvailability
-    , ScheduledInstanceAvailability
-    , scheduledInstanceAvailability
-    , siaMaxTermDurationInDays
-    , siaPlatform
-    , siaPurchaseToken
-    , siaHourlyPrice
-    , siaAvailableInstanceCount
-    , siaSlotDurationInHours
-    , siaTotalScheduledInstanceHours
-    , siaInstanceType
-    , siaRecurrence
-    , siaAvailabilityZone
-    , siaMinTermDurationInDays
-    , siaFirstSlotStartTime
-    , siaNetworkPlatform
-
-    -- ** ScheduledInstanceRecurrence
-    , ScheduledInstanceRecurrence
-    , scheduledInstanceRecurrence
-    , sirFrequency
-    , sirOccurrenceRelativeToEnd
-    , sirOccurrenceUnit
-    , sirInterval
-    , sirOccurrenceDaySet
-
-    -- ** ScheduledInstanceRecurrenceRequest
-    , ScheduledInstanceRecurrenceRequest
-    , scheduledInstanceRecurrenceRequest
-    , sirrFrequency
-    , sirrOccurrenceRelativeToEnd
-    , sirrOccurrenceDays
-    , sirrOccurrenceUnit
-    , sirrInterval
-
-    -- ** ScheduledInstancesBlockDeviceMapping
-    , ScheduledInstancesBlockDeviceMapping
-    , scheduledInstancesBlockDeviceMapping
-    , sibdmVirtualName
-    , sibdmNoDevice
-    , sibdmEBS
-    , sibdmDeviceName
-
-    -- ** ScheduledInstancesEBS
-    , ScheduledInstancesEBS
-    , scheduledInstancesEBS
-    , sieDeleteOnTermination
-    , sieVolumeSize
-    , sieIOPS
-    , sieEncrypted
-    , sieVolumeType
-    , sieSnapshotId
-
-    -- ** ScheduledInstancesIAMInstanceProfile
-    , ScheduledInstancesIAMInstanceProfile
-    , scheduledInstancesIAMInstanceProfile
-    , siiapARN
-    , siiapName
-
-    -- ** ScheduledInstancesIPv6Address
-    , ScheduledInstancesIPv6Address
-    , scheduledInstancesIPv6Address
-    , siiaIPv6Address
-
-    -- ** ScheduledInstancesLaunchSpecification
-    , ScheduledInstancesLaunchSpecification
-    , scheduledInstancesLaunchSpecification
-    , silsSecurityGroupIds
-    , silsKeyName
-    , silsNetworkInterfaces
-    , silsRAMDiskId
-    , silsSubnetId
-    , silsKernelId
-    , silsInstanceType
-    , silsEBSOptimized
-    , silsUserData
-    , silsMonitoring
-    , silsIAMInstanceProfile
-    , silsBlockDeviceMappings
-    , silsPlacement
-    , silsImageId
-
-    -- ** ScheduledInstancesMonitoring
-    , ScheduledInstancesMonitoring
-    , scheduledInstancesMonitoring
-    , simEnabled
-
-    -- ** ScheduledInstancesNetworkInterface
-    , ScheduledInstancesNetworkInterface
-    , scheduledInstancesNetworkInterface
-    , siniGroups
-    , siniDeleteOnTermination
-    , siniAssociatePublicIPAddress
-    , siniPrivateIPAddressConfigs
-    , siniNetworkInterfaceId
-    , siniSubnetId
-    , siniIPv6AddressCount
-    , siniPrivateIPAddress
-    , siniSecondaryPrivateIPAddressCount
-    , siniDescription
-    , siniDeviceIndex
-    , siniIPv6Addresses
-
-    -- ** ScheduledInstancesPlacement
-    , ScheduledInstancesPlacement
-    , scheduledInstancesPlacement
-    , sipAvailabilityZone
-    , sipGroupName
-
-    -- ** ScheduledInstancesPrivateIPAddressConfig
-    , ScheduledInstancesPrivateIPAddressConfig
-    , scheduledInstancesPrivateIPAddressConfig
-    , sipiacPrimary
-    , sipiacPrivateIPAddress
-
-    -- ** SecurityGroup
-    , SecurityGroup
-    , securityGroup
-    , sgVPCId
-    , sgIPPermissions
-    , sgIPPermissionsEgress
-    , sgTags
-    , sgOwnerId
-    , sgGroupId
-    , sgGroupName
-    , sgDescription
-
-    -- ** SecurityGroupReference
-    , SecurityGroupReference
-    , securityGroupReference
-    , sgrVPCPeeringConnectionId
-    , sgrGroupId
-    , sgrReferencingVPCId
-
-    -- ** SlotDateTimeRangeRequest
-    , SlotDateTimeRangeRequest
-    , slotDateTimeRangeRequest
-    , sdtrrEarliestTime
-    , sdtrrLatestTime
-
-    -- ** SlotStartTimeRangeRequest
-    , SlotStartTimeRangeRequest
-    , slotStartTimeRangeRequest
-    , sstrrLatestTime
-    , sstrrEarliestTime
-
-    -- ** Snapshot
-    , Snapshot
-    , snapshot
-    , sStateMessage
-    , sOwnerAlias
-    , sDataEncryptionKeyId
-    , sKMSKeyId
-    , sTags
-    , sSnapshotId
-    , sOwnerId
-    , sVolumeId
-    , sVolumeSize
-    , sDescription
-    , sStartTime
-    , sProgress
-    , sState
-    , sEncrypted
-
-    -- ** SnapshotDetail
-    , SnapshotDetail
-    , snapshotDetail
-    , sdStatus
-    , sdProgress
-    , sdFormat
-    , sdURL
-    , sdDeviceName
-    , sdStatusMessage
-    , sdUserBucket
-    , sdDiskImageSize
-    , sdDescription
-    , sdSnapshotId
-
-    -- ** SnapshotDiskContainer
-    , SnapshotDiskContainer
-    , snapshotDiskContainer
-    , sdcFormat
-    , sdcURL
-    , sdcUserBucket
-    , sdcDescription
-
-    -- ** SnapshotTaskDetail
-    , SnapshotTaskDetail
-    , snapshotTaskDetail
-    , stdStatus
-    , stdProgress
-    , stdFormat
-    , stdURL
-    , stdStatusMessage
-    , stdUserBucket
-    , stdDiskImageSize
-    , stdDescription
-    , stdSnapshotId
-
-    -- ** SpotDatafeedSubscription
-    , SpotDatafeedSubscription
-    , spotDatafeedSubscription
-    , sdsState
-    , sdsPrefix
-    , sdsBucket
-    , sdsOwnerId
-    , sdsFault
-
-    -- ** SpotFleetLaunchSpecification
-    , SpotFleetLaunchSpecification
-    , spotFleetLaunchSpecification
-    , sflsSecurityGroups
-    , sflsSpotPrice
-    , sflsWeightedCapacity
-    , sflsKeyName
-    , sflsNetworkInterfaces
-    , sflsRAMDiskId
-    , sflsSubnetId
-    , sflsKernelId
-    , sflsInstanceType
-    , sflsEBSOptimized
-    , sflsUserData
-    , sflsMonitoring
-    , sflsIAMInstanceProfile
-    , sflsImageId
-    , sflsAddressingType
-    , sflsBlockDeviceMappings
-    , sflsPlacement
-
-    -- ** SpotFleetMonitoring
-    , SpotFleetMonitoring
-    , spotFleetMonitoring
-    , sfmEnabled
-
-    -- ** SpotFleetRequestConfig
-    , SpotFleetRequestConfig
-    , spotFleetRequestConfig
-    , sfrcActivityStatus
-    , sfrcSpotFleetRequestId
-    , sfrcSpotFleetRequestState
-    , sfrcSpotFleetRequestConfig
-    , sfrcCreateTime
-
-    -- ** SpotFleetRequestConfigData
-    , SpotFleetRequestConfigData
-    , spotFleetRequestConfigData
-    , sfrcdClientToken
-    , sfrcdExcessCapacityTerminationPolicy
-    , sfrcdValidUntil
-    , sfrcdTerminateInstancesWithExpiration
-    , sfrcdFulfilledCapacity
-    , sfrcdType
-    , sfrcdValidFrom
-    , sfrcdAllocationStrategy
-    , sfrcdSpotPrice
-    , sfrcdTargetCapacity
-    , sfrcdIAMFleetRole
-    , sfrcdLaunchSpecifications
-
-    -- ** SpotInstanceRequest
-    , SpotInstanceRequest
-    , spotInstanceRequest
-    , sirInstanceId
-    , sirStatus
-    , sirState
-    , sirActualBlockHourlyPrice
-    , sirBlockDurationMinutes
-    , sirProductDescription
-    , sirSpotPrice
-    , sirLaunchSpecification
-    , sirAvailabilityZoneGroup
-    , sirLaunchedAvailabilityZone
-    , sirValidUntil
-    , sirLaunchGroup
-    , sirFault
-    , sirSpotInstanceRequestId
-    , sirType
-    , sirValidFrom
-    , sirCreateTime
-    , sirTags
-
-    -- ** SpotInstanceStateFault
-    , SpotInstanceStateFault
-    , spotInstanceStateFault
-    , sisfCode
-    , sisfMessage
-
-    -- ** SpotInstanceStatus
-    , SpotInstanceStatus
-    , spotInstanceStatus
-    , sisUpdateTime
-    , sisCode
-    , sisMessage
-
-    -- ** SpotPlacement
-    , SpotPlacement
-    , spotPlacement
-    , spAvailabilityZone
-    , spGroupName
-
-    -- ** SpotPrice
-    , SpotPrice
-    , spotPrice
-    , sProductDescription
-    , sSpotPrice
-    , sInstanceType
-    , sAvailabilityZone
-    , sTimestamp
-
-    -- ** StaleIPPermission
-    , StaleIPPermission
-    , staleIPPermission
-    , sipFromPort
-    , sipUserIdGroupPairs
-    , sipPrefixListIds
-    , sipIPProtocol
-    , sipToPort
-    , sipIPRanges
-
-    -- ** StaleSecurityGroup
-    , StaleSecurityGroup
-    , staleSecurityGroup
-    , ssgVPCId
-    , ssgGroupName
-    , ssgStaleIPPermissionsEgress
-    , ssgStaleIPPermissions
-    , ssgDescription
-    , ssgGroupId
-
-    -- ** StateReason
-    , StateReason
-    , stateReason
-    , srCode
-    , srMessage
-
-    -- ** Storage
-    , Storage
-    , storage
-    , sS3
-
-    -- ** Subnet
-    , Subnet
-    , subnet
-    , subIPv6CidrBlockAssociationSet
-    , subAssignIPv6AddressOnCreation
-    , subMapPublicIPOnLaunch
-    , subDefaultForAz
-    , subTags
-    , subAvailabilityZone
-    , subAvailableIPAddressCount
-    , subCidrBlock
-    , subState
-    , subSubnetId
-    , subVPCId
-
-    -- ** SubnetCidrBlockState
-    , SubnetCidrBlockState
-    , subnetCidrBlockState
-    , scbsState
-    , scbsStatusMessage
-
-    -- ** SubnetIPv6CidrBlockAssociation
-    , SubnetIPv6CidrBlockAssociation
-    , subnetIPv6CidrBlockAssociation
-    , sicbaAssociationId
-    , sicbaIPv6CidrBlock
-    , sicbaIPv6CidrBlockState
-
-    -- ** Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- ** TagDescription
-    , TagDescription
-    , tagDescription
-    , tdResourceId
-    , tdResourceType
-    , tdKey
-    , tdValue
-
-    -- ** TargetConfiguration
-    , TargetConfiguration
-    , targetConfiguration
-    , tcInstanceCount
-    , tcOfferingId
-
-    -- ** TargetConfigurationRequest
-    , TargetConfigurationRequest
-    , targetConfigurationRequest
-    , tcrInstanceCount
-    , tcrOfferingId
-
-    -- ** TargetReservationValue
-    , TargetReservationValue
-    , targetReservationValue
-    , trvReservationValue
-    , trvTargetConfiguration
-
-    -- ** UnsuccessfulItem
-    , UnsuccessfulItem
-    , unsuccessfulItem
-    , uiResourceId
-    , uiError
-
-    -- ** UnsuccessfulItemError
-    , UnsuccessfulItemError
-    , unsuccessfulItemError
-    , uieCode
-    , uieMessage
-
-    -- ** UserBucket
-    , UserBucket
-    , userBucket
-    , ubS3Key
-    , ubS3Bucket
-
-    -- ** UserBucketDetails
-    , UserBucketDetails
-    , userBucketDetails
-    , ubdS3Key
-    , ubdS3Bucket
-
-    -- ** UserData
-    , UserData
-    , userData
-    , udData
-
-    -- ** UserIdGroupPair
-    , UserIdGroupPair
-    , userIdGroupPair
-    , uigpVPCPeeringConnectionId
-    , uigpVPCId
-    , uigpUserId
-    , uigpGroupId
-    , uigpGroupName
-    , uigpPeeringStatus
-
-    -- ** VGWTelemetry
-    , VGWTelemetry
-    , vgwTelemetry
-    , vtStatus
-    , vtOutsideIPAddress
-    , vtLastStatusChange
-    , vtAcceptedRouteCount
-    , vtStatusMessage
-
-    -- ** VPC
-    , VPC
-    , vpc
-    , vpcIPv6CidrBlockAssociationSet
-    , vpcTags
-    , vpcIsDefault
-    , vpcCidrBlock
-    , vpcDHCPOptionsId
-    , vpcInstanceTenancy
-    , vpcState
-    , vpcVPCId
-
-    -- ** VPCAttachment
-    , VPCAttachment
-    , vpcAttachment
-    , vaState
-    , vaVPCId
-
-    -- ** VPCCidrBlockState
-    , VPCCidrBlockState
-    , vpcCidrBlockState
-    , vcbsState
-    , vcbsStatusMessage
-
-    -- ** VPCClassicLink
-    , VPCClassicLink
-    , vpcClassicLink
-    , vclVPCId
-    , vclTags
-    , vclClassicLinkEnabled
-
-    -- ** VPCEndpoint
-    , VPCEndpoint
-    , vpcEndpoint
-    , veState
-    , vePolicyDocument
-    , veVPCId
-    , veCreationTimestamp
-    , veServiceName
-    , veVPCEndpointId
-    , veRouteTableIds
-
-    -- ** VPCIPv6CidrBlockAssociation
-    , VPCIPv6CidrBlockAssociation
-    , vpcIPv6CidrBlockAssociation
-    , vicbaAssociationId
-    , vicbaIPv6CidrBlock
-    , vicbaIPv6CidrBlockState
-
-    -- ** VPCPeeringConnection
-    , VPCPeeringConnection
-    , vpcPeeringConnection
-    , vpcpcVPCPeeringConnectionId
-    , vpcpcStatus
-    , vpcpcAccepterVPCInfo
-    , vpcpcRequesterVPCInfo
-    , vpcpcExpirationTime
-    , vpcpcTags
-
-    -- ** VPCPeeringConnectionOptionsDescription
-    , VPCPeeringConnectionOptionsDescription
-    , vpcPeeringConnectionOptionsDescription
-    , vpcodAllowEgressFromLocalVPCToRemoteClassicLink
-    , vpcodAllowEgressFromLocalClassicLinkToRemoteVPC
-    , vpcodAllowDNSResolutionFromRemoteVPC
-
-    -- ** VPCPeeringConnectionStateReason
-    , VPCPeeringConnectionStateReason
-    , vpcPeeringConnectionStateReason
-    , vpcsrCode
-    , vpcsrMessage
-
-    -- ** VPCPeeringConnectionVPCInfo
-    , VPCPeeringConnectionVPCInfo
-    , vpcPeeringConnectionVPCInfo
-    , vpcviVPCId
-    , vpcviOwnerId
-    , vpcviPeeringOptions
-    , vpcviCidrBlock
-    , vpcviIPv6CidrBlockSet
-
-    -- ** VPNConnection
-    , VPNConnection
-    , vpnConnection
-    , vcCustomerGatewayConfiguration
-    , vcRoutes
-    , vcVPNGatewayId
-    , vcOptions
-    , vcTags
-    , vcVGWTelemetry
-    , vcVPNConnectionId
-    , vcCustomerGatewayId
-    , vcState
-    , vcType
-
-    -- ** VPNConnectionOptions
-    , VPNConnectionOptions
-    , vpnConnectionOptions
-    , vcoStaticRoutesOnly
-
-    -- ** VPNConnectionOptionsSpecification
-    , VPNConnectionOptionsSpecification
-    , vpnConnectionOptionsSpecification
-    , vcosStaticRoutesOnly
-
-    -- ** VPNGateway
-    , VPNGateway
-    , vpnGateway
-    , vgState
-    , vgVPCAttachments
-    , vgVPNGatewayId
-    , vgAvailabilityZone
-    , vgType
-    , vgTags
-
-    -- ** VPNStaticRoute
-    , VPNStaticRoute
-    , vpnStaticRoute
-    , vsrState
-    , vsrSource
-    , vsrDestinationCidrBlock
-
-    -- ** Volume
-    , Volume
-    , volume
-    , vAttachments
-    , vIOPS
-    , vKMSKeyId
-    , vTags
-    , vAvailabilityZone
-    , vCreateTime
-    , vEncrypted
-    , vSize
-    , vSnapshotId
-    , vState
-    , vVolumeId
-    , vVolumeType
-
-    -- ** VolumeAttachment
-    , VolumeAttachment
-    , volumeAttachment
-    , volInstanceId
-    , volDeleteOnTermination
-    , volState
-    , volDevice
-    , volVolumeId
-    , volAttachTime
-
-    -- ** VolumeDetail
-    , VolumeDetail
-    , volumeDetail
-    , vdSize
-
-    -- ** VolumeStatusAction
-    , VolumeStatusAction
-    , volumeStatusAction
-    , vsaEventType
-    , vsaCode
-    , vsaDescription
-    , vsaEventId
-
-    -- ** VolumeStatusDetails
-    , VolumeStatusDetails
-    , volumeStatusDetails
-    , vsdStatus
-    , vsdName
-
-    -- ** VolumeStatusEvent
-    , VolumeStatusEvent
-    , volumeStatusEvent
-    , vseNotBefore
-    , vseEventType
-    , vseDescription
-    , vseNotAfter
-    , vseEventId
-
-    -- ** VolumeStatusInfo
-    , VolumeStatusInfo
-    , volumeStatusInfo
-    , vsiStatus
-    , vsiDetails
-
-    -- ** VolumeStatusItem
-    , VolumeStatusItem
-    , volumeStatusItem
-    , vsiVolumeStatus
-    , vsiActions
-    , vsiEvents
-    , vsiAvailabilityZone
-    , vsiVolumeId
-    ) where
-
-import           Network.AWS.EC2.AcceptReservedInstancesExchangeQuote
-import           Network.AWS.EC2.AcceptVPCPeeringConnection
-import           Network.AWS.EC2.AllocateAddress
-import           Network.AWS.EC2.AllocateHosts
-import           Network.AWS.EC2.AssignIPv6Addresses
-import           Network.AWS.EC2.AssignPrivateIPAddresses
-import           Network.AWS.EC2.AssociateAddress
-import           Network.AWS.EC2.AssociateDHCPOptions
-import           Network.AWS.EC2.AssociateRouteTable
-import           Network.AWS.EC2.AssociateSubnetCidrBlock
-import           Network.AWS.EC2.AssociateVPCCidrBlock
-import           Network.AWS.EC2.AttachClassicLinkVPC
-import           Network.AWS.EC2.AttachInternetGateway
-import           Network.AWS.EC2.AttachNetworkInterface
-import           Network.AWS.EC2.AttachVolume
-import           Network.AWS.EC2.AttachVPNGateway
-import           Network.AWS.EC2.AuthorizeSecurityGroupEgress
-import           Network.AWS.EC2.AuthorizeSecurityGroupIngress
-import           Network.AWS.EC2.BundleInstance
-import           Network.AWS.EC2.CancelBundleTask
-import           Network.AWS.EC2.CancelConversionTask
-import           Network.AWS.EC2.CancelExportTask
-import           Network.AWS.EC2.CancelImportTask
-import           Network.AWS.EC2.CancelReservedInstancesListing
-import           Network.AWS.EC2.CancelSpotFleetRequests
-import           Network.AWS.EC2.CancelSpotInstanceRequests
-import           Network.AWS.EC2.ConfirmProductInstance
-import           Network.AWS.EC2.CopyImage
-import           Network.AWS.EC2.CopySnapshot
-import           Network.AWS.EC2.CreateCustomerGateway
-import           Network.AWS.EC2.CreateDHCPOptions
-import           Network.AWS.EC2.CreateEgressOnlyInternetGateway
-import           Network.AWS.EC2.CreateFlowLogs
-import           Network.AWS.EC2.CreateImage
-import           Network.AWS.EC2.CreateInstanceExportTask
-import           Network.AWS.EC2.CreateInternetGateway
-import           Network.AWS.EC2.CreateKeyPair
-import           Network.AWS.EC2.CreateNatGateway
-import           Network.AWS.EC2.CreateNetworkACL
-import           Network.AWS.EC2.CreateNetworkACLEntry
-import           Network.AWS.EC2.CreateNetworkInterface
-import           Network.AWS.EC2.CreatePlacementGroup
-import           Network.AWS.EC2.CreateReservedInstancesListing
-import           Network.AWS.EC2.CreateRoute
-import           Network.AWS.EC2.CreateRouteTable
-import           Network.AWS.EC2.CreateSecurityGroup
-import           Network.AWS.EC2.CreateSnapshot
-import           Network.AWS.EC2.CreateSpotDatafeedSubscription
-import           Network.AWS.EC2.CreateSubnet
-import           Network.AWS.EC2.CreateTags
-import           Network.AWS.EC2.CreateVolume
-import           Network.AWS.EC2.CreateVPC
-import           Network.AWS.EC2.CreateVPCEndpoint
-import           Network.AWS.EC2.CreateVPCPeeringConnection
-import           Network.AWS.EC2.CreateVPNConnection
-import           Network.AWS.EC2.CreateVPNConnectionRoute
-import           Network.AWS.EC2.CreateVPNGateway
-import           Network.AWS.EC2.DeleteCustomerGateway
-import           Network.AWS.EC2.DeleteDHCPOptions
-import           Network.AWS.EC2.DeleteEgressOnlyInternetGateway
-import           Network.AWS.EC2.DeleteFlowLogs
-import           Network.AWS.EC2.DeleteInternetGateway
-import           Network.AWS.EC2.DeleteKeyPair
-import           Network.AWS.EC2.DeleteNatGateway
-import           Network.AWS.EC2.DeleteNetworkACL
-import           Network.AWS.EC2.DeleteNetworkACLEntry
-import           Network.AWS.EC2.DeleteNetworkInterface
-import           Network.AWS.EC2.DeletePlacementGroup
-import           Network.AWS.EC2.DeleteRoute
-import           Network.AWS.EC2.DeleteRouteTable
-import           Network.AWS.EC2.DeleteSecurityGroup
-import           Network.AWS.EC2.DeleteSnapshot
-import           Network.AWS.EC2.DeleteSpotDatafeedSubscription
-import           Network.AWS.EC2.DeleteSubnet
-import           Network.AWS.EC2.DeleteTags
-import           Network.AWS.EC2.DeleteVolume
-import           Network.AWS.EC2.DeleteVPC
-import           Network.AWS.EC2.DeleteVPCEndpoints
-import           Network.AWS.EC2.DeleteVPCPeeringConnection
-import           Network.AWS.EC2.DeleteVPNConnection
-import           Network.AWS.EC2.DeleteVPNConnectionRoute
-import           Network.AWS.EC2.DeleteVPNGateway
-import           Network.AWS.EC2.DeregisterImage
-import           Network.AWS.EC2.DescribeAccountAttributes
-import           Network.AWS.EC2.DescribeAddresses
-import           Network.AWS.EC2.DescribeAvailabilityZones
-import           Network.AWS.EC2.DescribeBundleTasks
-import           Network.AWS.EC2.DescribeClassicLinkInstances
-import           Network.AWS.EC2.DescribeConversionTasks
-import           Network.AWS.EC2.DescribeCustomerGateways
-import           Network.AWS.EC2.DescribeDHCPOptions
-import           Network.AWS.EC2.DescribeEgressOnlyInternetGateways
-import           Network.AWS.EC2.DescribeExportTasks
-import           Network.AWS.EC2.DescribeFlowLogs
-import           Network.AWS.EC2.DescribeHostReservationOfferings
-import           Network.AWS.EC2.DescribeHostReservations
-import           Network.AWS.EC2.DescribeHosts
-import           Network.AWS.EC2.DescribeIdentityIdFormat
-import           Network.AWS.EC2.DescribeIdFormat
-import           Network.AWS.EC2.DescribeImageAttribute
-import           Network.AWS.EC2.DescribeImages
-import           Network.AWS.EC2.DescribeImportImageTasks
-import           Network.AWS.EC2.DescribeImportSnapshotTasks
-import           Network.AWS.EC2.DescribeInstanceAttribute
-import           Network.AWS.EC2.DescribeInstances
-import           Network.AWS.EC2.DescribeInstanceStatus
-import           Network.AWS.EC2.DescribeInternetGateways
-import           Network.AWS.EC2.DescribeKeyPairs
-import           Network.AWS.EC2.DescribeMovingAddresses
-import           Network.AWS.EC2.DescribeNatGateways
-import           Network.AWS.EC2.DescribeNetworkACLs
-import           Network.AWS.EC2.DescribeNetworkInterfaceAttribute
-import           Network.AWS.EC2.DescribeNetworkInterfaces
-import           Network.AWS.EC2.DescribePlacementGroups
-import           Network.AWS.EC2.DescribePrefixLists
-import           Network.AWS.EC2.DescribeRegions
-import           Network.AWS.EC2.DescribeReservedInstances
-import           Network.AWS.EC2.DescribeReservedInstancesListings
-import           Network.AWS.EC2.DescribeReservedInstancesModifications
-import           Network.AWS.EC2.DescribeReservedInstancesOfferings
-import           Network.AWS.EC2.DescribeRouteTables
-import           Network.AWS.EC2.DescribeScheduledInstanceAvailability
-import           Network.AWS.EC2.DescribeScheduledInstances
-import           Network.AWS.EC2.DescribeSecurityGroupReferences
-import           Network.AWS.EC2.DescribeSecurityGroups
-import           Network.AWS.EC2.DescribeSnapshotAttribute
-import           Network.AWS.EC2.DescribeSnapshots
-import           Network.AWS.EC2.DescribeSpotDatafeedSubscription
-import           Network.AWS.EC2.DescribeSpotFleetInstances
-import           Network.AWS.EC2.DescribeSpotFleetRequestHistory
-import           Network.AWS.EC2.DescribeSpotFleetRequests
-import           Network.AWS.EC2.DescribeSpotInstanceRequests
-import           Network.AWS.EC2.DescribeSpotPriceHistory
-import           Network.AWS.EC2.DescribeStaleSecurityGroups
-import           Network.AWS.EC2.DescribeSubnets
-import           Network.AWS.EC2.DescribeTags
-import           Network.AWS.EC2.DescribeVolumeAttribute
-import           Network.AWS.EC2.DescribeVolumes
-import           Network.AWS.EC2.DescribeVolumeStatus
-import           Network.AWS.EC2.DescribeVPCAttribute
-import           Network.AWS.EC2.DescribeVPCClassicLink
-import           Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
-import           Network.AWS.EC2.DescribeVPCEndpoints
-import           Network.AWS.EC2.DescribeVPCEndpointServices
-import           Network.AWS.EC2.DescribeVPCPeeringConnections
-import           Network.AWS.EC2.DescribeVPCs
-import           Network.AWS.EC2.DescribeVPNConnections
-import           Network.AWS.EC2.DescribeVPNGateways
-import           Network.AWS.EC2.DetachClassicLinkVPC
-import           Network.AWS.EC2.DetachInternetGateway
-import           Network.AWS.EC2.DetachNetworkInterface
-import           Network.AWS.EC2.DetachVolume
-import           Network.AWS.EC2.DetachVPNGateway
-import           Network.AWS.EC2.DisableVGWRoutePropagation
-import           Network.AWS.EC2.DisableVPCClassicLink
-import           Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
-import           Network.AWS.EC2.DisassociateAddress
-import           Network.AWS.EC2.DisassociateRouteTable
-import           Network.AWS.EC2.DisassociateSubnetCidrBlock
-import           Network.AWS.EC2.DisassociateVPCCidrBlock
-import           Network.AWS.EC2.EnableVGWRoutePropagation
-import           Network.AWS.EC2.EnableVolumeIO
-import           Network.AWS.EC2.EnableVPCClassicLink
-import           Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
-import           Network.AWS.EC2.GetConsoleOutput
-import           Network.AWS.EC2.GetConsoleScreenshot
-import           Network.AWS.EC2.GetHostReservationPurchasePreview
-import           Network.AWS.EC2.GetPasswordData
-import           Network.AWS.EC2.GetReservedInstancesExchangeQuote
-import           Network.AWS.EC2.ImportImage
-import           Network.AWS.EC2.ImportInstance
-import           Network.AWS.EC2.ImportKeyPair
-import           Network.AWS.EC2.ImportSnapshot
-import           Network.AWS.EC2.ImportVolume
-import           Network.AWS.EC2.Internal
-import           Network.AWS.EC2.ModifyHosts
-import           Network.AWS.EC2.ModifyIdentityIdFormat
-import           Network.AWS.EC2.ModifyIdFormat
-import           Network.AWS.EC2.ModifyImageAttribute
-import           Network.AWS.EC2.ModifyInstanceAttribute
-import           Network.AWS.EC2.ModifyInstancePlacement
-import           Network.AWS.EC2.ModifyNetworkInterfaceAttribute
-import           Network.AWS.EC2.ModifyReservedInstances
-import           Network.AWS.EC2.ModifySnapshotAttribute
-import           Network.AWS.EC2.ModifySpotFleetRequest
-import           Network.AWS.EC2.ModifySubnetAttribute
-import           Network.AWS.EC2.ModifyVolumeAttribute
-import           Network.AWS.EC2.ModifyVPCAttribute
-import           Network.AWS.EC2.ModifyVPCEndpoint
-import           Network.AWS.EC2.ModifyVPCPeeringConnectionOptions
-import           Network.AWS.EC2.MonitorInstances
-import           Network.AWS.EC2.MoveAddressToVPC
-import           Network.AWS.EC2.PurchaseHostReservation
-import           Network.AWS.EC2.PurchaseReservedInstancesOffering
-import           Network.AWS.EC2.PurchaseScheduledInstances
-import           Network.AWS.EC2.RebootInstances
-import           Network.AWS.EC2.RegisterImage
-import           Network.AWS.EC2.RejectVPCPeeringConnection
-import           Network.AWS.EC2.ReleaseAddress
-import           Network.AWS.EC2.ReleaseHosts
-import           Network.AWS.EC2.ReplaceNetworkACLAssociation
-import           Network.AWS.EC2.ReplaceNetworkACLEntry
-import           Network.AWS.EC2.ReplaceRoute
-import           Network.AWS.EC2.ReplaceRouteTableAssociation
-import           Network.AWS.EC2.ReportInstanceStatus
-import           Network.AWS.EC2.RequestSpotFleet
-import           Network.AWS.EC2.RequestSpotInstances
-import           Network.AWS.EC2.ResetImageAttribute
-import           Network.AWS.EC2.ResetInstanceAttribute
-import           Network.AWS.EC2.ResetNetworkInterfaceAttribute
-import           Network.AWS.EC2.ResetSnapshotAttribute
-import           Network.AWS.EC2.RestoreAddressToClassic
-import           Network.AWS.EC2.RevokeSecurityGroupEgress
-import           Network.AWS.EC2.RevokeSecurityGroupIngress
-import           Network.AWS.EC2.RunInstances
-import           Network.AWS.EC2.RunScheduledInstances
-import           Network.AWS.EC2.StartInstances
-import           Network.AWS.EC2.StopInstances
-import           Network.AWS.EC2.TerminateInstances
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.UnassignIPv6Addresses
-import           Network.AWS.EC2.UnassignPrivateIPAddresses
-import           Network.AWS.EC2.UnmonitorInstances
-import           Network.AWS.EC2.Waiters
-
-{- $errors
-Error matchers are designed for use with the functions provided by
-<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
-This allows catching (and rethrowing) service specific errors returned
-by 'EC2'.
--}
-
-{- $operations
-Some AWS operations return results that are incomplete and require subsequent
-requests in order to obtain the entire result set. The process of sending
-subsequent requests to continue where a previous request left off is called
-pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
-1000 objects at a time, and you must send subsequent requests with the
-appropriate Marker in order to retrieve the next page of results.
-
-Operations that have an 'AWSPager' instance can transparently perform subsequent
-requests, correctly setting Markers and other request facets to iterate through
-the entire result set of a truncated API operation. Operations which support
-this have an additional note in the documentation.
-
-Many operations have the ability to filter results on the server side. See the
-individual operation parameters for details.
--}
-
-{- $waiters
-Waiters poll by repeatedly sending a request until some remote success condition
-configured by the 'Wait' specification is fulfilled. The 'Wait' specification
-determines how many attempts should be made, in addition to delay and retry strategies.
--}
diff --git a/gen/Network/AWS/EC2/AcceptReservedInstancesExchangeQuote.hs b/gen/Network/AWS/EC2/AcceptReservedInstancesExchangeQuote.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AcceptReservedInstancesExchangeQuote.hs
+++ /dev/null
@@ -1,164 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AcceptReservedInstancesExchangeQuote
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Accepts the Convertible Reserved Instance exchange quote described in the 'GetReservedInstancesExchangeQuote' call.
---
---
-module Network.AWS.EC2.AcceptReservedInstancesExchangeQuote
-    (
-    -- * Creating a Request
-      acceptReservedInstancesExchangeQuote
-    , AcceptReservedInstancesExchangeQuote
-    -- * Request Lenses
-    , arieqTargetConfigurations
-    , arieqDryRun
-    , arieqReservedInstanceIds
-
-    -- * Destructuring the Response
-    , acceptReservedInstancesExchangeQuoteResponse
-    , AcceptReservedInstancesExchangeQuoteResponse
-    -- * Response Lenses
-    , arieqrsExchangeId
-    , arieqrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for accepting the quote.
---
---
---
--- /See:/ 'acceptReservedInstancesExchangeQuote' smart constructor.
-data AcceptReservedInstancesExchangeQuote = AcceptReservedInstancesExchangeQuote'
-    { _arieqTargetConfigurations :: !(Maybe [TargetConfigurationRequest])
-    , _arieqDryRun               :: !(Maybe Bool)
-    , _arieqReservedInstanceIds  :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AcceptReservedInstancesExchangeQuote' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'arieqTargetConfigurations' - The configurations of the Convertible Reserved Instance offerings that you are purchasing in this exchange.
---
--- * 'arieqDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'arieqReservedInstanceIds' - The IDs of the Convertible Reserved Instances to exchange for other Convertible Reserved Instances of the same or higher value.
-acceptReservedInstancesExchangeQuote
-    :: AcceptReservedInstancesExchangeQuote
-acceptReservedInstancesExchangeQuote =
-    AcceptReservedInstancesExchangeQuote'
-    { _arieqTargetConfigurations = Nothing
-    , _arieqDryRun = Nothing
-    , _arieqReservedInstanceIds = mempty
-    }
-
--- | The configurations of the Convertible Reserved Instance offerings that you are purchasing in this exchange.
-arieqTargetConfigurations :: Lens' AcceptReservedInstancesExchangeQuote [TargetConfigurationRequest]
-arieqTargetConfigurations = lens _arieqTargetConfigurations (\ s a -> s{_arieqTargetConfigurations = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-arieqDryRun :: Lens' AcceptReservedInstancesExchangeQuote (Maybe Bool)
-arieqDryRun = lens _arieqDryRun (\ s a -> s{_arieqDryRun = a});
-
--- | The IDs of the Convertible Reserved Instances to exchange for other Convertible Reserved Instances of the same or higher value.
-arieqReservedInstanceIds :: Lens' AcceptReservedInstancesExchangeQuote [Text]
-arieqReservedInstanceIds = lens _arieqReservedInstanceIds (\ s a -> s{_arieqReservedInstanceIds = a}) . _Coerce;
-
-instance AWSRequest
-         AcceptReservedInstancesExchangeQuote where
-        type Rs AcceptReservedInstancesExchangeQuote =
-             AcceptReservedInstancesExchangeQuoteResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AcceptReservedInstancesExchangeQuoteResponse' <$>
-                   (x .@? "exchangeId") <*> (pure (fromEnum s)))
-
-instance Hashable
-         AcceptReservedInstancesExchangeQuote
-
-instance NFData AcceptReservedInstancesExchangeQuote
-
-instance ToHeaders
-         AcceptReservedInstancesExchangeQuote where
-        toHeaders = const mempty
-
-instance ToPath AcceptReservedInstancesExchangeQuote
-         where
-        toPath = const "/"
-
-instance ToQuery AcceptReservedInstancesExchangeQuote
-         where
-        toQuery AcceptReservedInstancesExchangeQuote'{..}
-          = mconcat
-              ["Action" =:
-                 ("AcceptReservedInstancesExchangeQuote" ::
-                    ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "TargetConfiguration" <$>
-                    _arieqTargetConfigurations),
-               "DryRun" =: _arieqDryRun,
-               toQueryList "ReservedInstanceId"
-                 _arieqReservedInstanceIds]
-
--- | The result of the exchange and whether it was @successful@ .
---
---
---
--- /See:/ 'acceptReservedInstancesExchangeQuoteResponse' smart constructor.
-data AcceptReservedInstancesExchangeQuoteResponse = AcceptReservedInstancesExchangeQuoteResponse'
-    { _arieqrsExchangeId     :: !(Maybe Text)
-    , _arieqrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AcceptReservedInstancesExchangeQuoteResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'arieqrsExchangeId' - The ID of the successful exchange.
---
--- * 'arieqrsResponseStatus' - -- | The response status code.
-acceptReservedInstancesExchangeQuoteResponse
-    :: Int -- ^ 'arieqrsResponseStatus'
-    -> AcceptReservedInstancesExchangeQuoteResponse
-acceptReservedInstancesExchangeQuoteResponse pResponseStatus_ =
-    AcceptReservedInstancesExchangeQuoteResponse'
-    { _arieqrsExchangeId = Nothing
-    , _arieqrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the successful exchange.
-arieqrsExchangeId :: Lens' AcceptReservedInstancesExchangeQuoteResponse (Maybe Text)
-arieqrsExchangeId = lens _arieqrsExchangeId (\ s a -> s{_arieqrsExchangeId = a});
-
--- | -- | The response status code.
-arieqrsResponseStatus :: Lens' AcceptReservedInstancesExchangeQuoteResponse Int
-arieqrsResponseStatus = lens _arieqrsResponseStatus (\ s a -> s{_arieqrsResponseStatus = a});
-
-instance NFData
-         AcceptReservedInstancesExchangeQuoteResponse
diff --git a/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs b/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AcceptVPCPeeringConnection
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Accept a VPC peering connection request. To accept a request, the VPC peering connection must be in the @pending-acceptance@ state, and you must be the owner of the peer VPC. Use the @DescribeVpcPeeringConnections@ request to view your outstanding VPC peering connection requests.
---
---
-module Network.AWS.EC2.AcceptVPCPeeringConnection
-    (
-    -- * Creating a Request
-      acceptVPCPeeringConnection
-    , AcceptVPCPeeringConnection
-    -- * Request Lenses
-    , avpcVPCPeeringConnectionId
-    , avpcDryRun
-
-    -- * Destructuring the Response
-    , acceptVPCPeeringConnectionResponse
-    , AcceptVPCPeeringConnectionResponse
-    -- * Response Lenses
-    , avpcrsVPCPeeringConnection
-    , avpcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AcceptVpcPeeringConnection.
---
---
---
--- /See:/ 'acceptVPCPeeringConnection' smart constructor.
-data AcceptVPCPeeringConnection = AcceptVPCPeeringConnection'
-    { _avpcVPCPeeringConnectionId :: !(Maybe Text)
-    , _avpcDryRun                 :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AcceptVPCPeeringConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avpcVPCPeeringConnectionId' - The ID of the VPC peering connection.
---
--- * 'avpcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-acceptVPCPeeringConnection
-    :: AcceptVPCPeeringConnection
-acceptVPCPeeringConnection =
-    AcceptVPCPeeringConnection'
-    { _avpcVPCPeeringConnectionId = Nothing
-    , _avpcDryRun = Nothing
-    }
-
--- | The ID of the VPC peering connection.
-avpcVPCPeeringConnectionId :: Lens' AcceptVPCPeeringConnection (Maybe Text)
-avpcVPCPeeringConnectionId = lens _avpcVPCPeeringConnectionId (\ s a -> s{_avpcVPCPeeringConnectionId = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-avpcDryRun :: Lens' AcceptVPCPeeringConnection (Maybe Bool)
-avpcDryRun = lens _avpcDryRun (\ s a -> s{_avpcDryRun = a});
-
-instance AWSRequest AcceptVPCPeeringConnection where
-        type Rs AcceptVPCPeeringConnection =
-             AcceptVPCPeeringConnectionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AcceptVPCPeeringConnectionResponse' <$>
-                   (x .@? "vpcPeeringConnection") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable AcceptVPCPeeringConnection
-
-instance NFData AcceptVPCPeeringConnection
-
-instance ToHeaders AcceptVPCPeeringConnection where
-        toHeaders = const mempty
-
-instance ToPath AcceptVPCPeeringConnection where
-        toPath = const "/"
-
-instance ToQuery AcceptVPCPeeringConnection where
-        toQuery AcceptVPCPeeringConnection'{..}
-          = mconcat
-              ["Action" =:
-                 ("AcceptVpcPeeringConnection" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpcPeeringConnectionId" =:
-                 _avpcVPCPeeringConnectionId,
-               "DryRun" =: _avpcDryRun]
-
--- | Contains the output of AcceptVpcPeeringConnection.
---
---
---
--- /See:/ 'acceptVPCPeeringConnectionResponse' smart constructor.
-data AcceptVPCPeeringConnectionResponse = AcceptVPCPeeringConnectionResponse'
-    { _avpcrsVPCPeeringConnection :: !(Maybe VPCPeeringConnection)
-    , _avpcrsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AcceptVPCPeeringConnectionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avpcrsVPCPeeringConnection' - Information about the VPC peering connection.
---
--- * 'avpcrsResponseStatus' - -- | The response status code.
-acceptVPCPeeringConnectionResponse
-    :: Int -- ^ 'avpcrsResponseStatus'
-    -> AcceptVPCPeeringConnectionResponse
-acceptVPCPeeringConnectionResponse pResponseStatus_ =
-    AcceptVPCPeeringConnectionResponse'
-    { _avpcrsVPCPeeringConnection = Nothing
-    , _avpcrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPC peering connection.
-avpcrsVPCPeeringConnection :: Lens' AcceptVPCPeeringConnectionResponse (Maybe VPCPeeringConnection)
-avpcrsVPCPeeringConnection = lens _avpcrsVPCPeeringConnection (\ s a -> s{_avpcrsVPCPeeringConnection = a});
-
--- | -- | The response status code.
-avpcrsResponseStatus :: Lens' AcceptVPCPeeringConnectionResponse Int
-avpcrsResponseStatus = lens _avpcrsResponseStatus (\ s a -> s{_avpcrsResponseStatus = a});
-
-instance NFData AcceptVPCPeeringConnectionResponse
diff --git a/gen/Network/AWS/EC2/AllocateAddress.hs b/gen/Network/AWS/EC2/AllocateAddress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AllocateAddress.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AllocateAddress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Acquires an Elastic IP address.
---
---
--- An Elastic IP address is for use either in the EC2-Classic platform or in a VPC. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.AllocateAddress
-    (
-    -- * Creating a Request
-      allocateAddress
-    , AllocateAddress
-    -- * Request Lenses
-    , aaDomain
-    , aaDryRun
-
-    -- * Destructuring the Response
-    , allocateAddressResponse
-    , AllocateAddressResponse
-    -- * Response Lenses
-    , aarsAllocationId
-    , aarsDomain
-    , aarsPublicIP
-    , aarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AllocateAddress.
---
---
---
--- /See:/ 'allocateAddress' smart constructor.
-data AllocateAddress = AllocateAddress'
-    { _aaDomain :: !(Maybe DomainType)
-    , _aaDryRun :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AllocateAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaDomain' - Set to @vpc@ to allocate the address for use with instances in a VPC. Default: The address is for use with instances in EC2-Classic.
---
--- * 'aaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-allocateAddress
-    :: AllocateAddress
-allocateAddress =
-    AllocateAddress'
-    { _aaDomain = Nothing
-    , _aaDryRun = Nothing
-    }
-
--- | Set to @vpc@ to allocate the address for use with instances in a VPC. Default: The address is for use with instances in EC2-Classic.
-aaDomain :: Lens' AllocateAddress (Maybe DomainType)
-aaDomain = lens _aaDomain (\ s a -> s{_aaDomain = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-aaDryRun :: Lens' AllocateAddress (Maybe Bool)
-aaDryRun = lens _aaDryRun (\ s a -> s{_aaDryRun = a});
-
-instance AWSRequest AllocateAddress where
-        type Rs AllocateAddress = AllocateAddressResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AllocateAddressResponse' <$>
-                   (x .@? "allocationId") <*> (x .@? "domain") <*>
-                     (x .@? "publicIp")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable AllocateAddress
-
-instance NFData AllocateAddress
-
-instance ToHeaders AllocateAddress where
-        toHeaders = const mempty
-
-instance ToPath AllocateAddress where
-        toPath = const "/"
-
-instance ToQuery AllocateAddress where
-        toQuery AllocateAddress'{..}
-          = mconcat
-              ["Action" =: ("AllocateAddress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Domain" =: _aaDomain, "DryRun" =: _aaDryRun]
-
--- | Contains the output of AllocateAddress.
---
---
---
--- /See:/ 'allocateAddressResponse' smart constructor.
-data AllocateAddressResponse = AllocateAddressResponse'
-    { _aarsAllocationId   :: !(Maybe Text)
-    , _aarsDomain         :: !(Maybe DomainType)
-    , _aarsPublicIP       :: !(Maybe Text)
-    , _aarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AllocateAddressResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aarsAllocationId' - [EC2-VPC] The ID that AWS assigns to represent the allocation of the Elastic IP address for use with instances in a VPC.
---
--- * 'aarsDomain' - Indicates whether this Elastic IP address is for use with instances in EC2-Classic (@standard@ ) or instances in a VPC (@vpc@ ).
---
--- * 'aarsPublicIP' - The Elastic IP address.
---
--- * 'aarsResponseStatus' - -- | The response status code.
-allocateAddressResponse
-    :: Int -- ^ 'aarsResponseStatus'
-    -> AllocateAddressResponse
-allocateAddressResponse pResponseStatus_ =
-    AllocateAddressResponse'
-    { _aarsAllocationId = Nothing
-    , _aarsDomain = Nothing
-    , _aarsPublicIP = Nothing
-    , _aarsResponseStatus = pResponseStatus_
-    }
-
--- | [EC2-VPC] The ID that AWS assigns to represent the allocation of the Elastic IP address for use with instances in a VPC.
-aarsAllocationId :: Lens' AllocateAddressResponse (Maybe Text)
-aarsAllocationId = lens _aarsAllocationId (\ s a -> s{_aarsAllocationId = a});
-
--- | Indicates whether this Elastic IP address is for use with instances in EC2-Classic (@standard@ ) or instances in a VPC (@vpc@ ).
-aarsDomain :: Lens' AllocateAddressResponse (Maybe DomainType)
-aarsDomain = lens _aarsDomain (\ s a -> s{_aarsDomain = a});
-
--- | The Elastic IP address.
-aarsPublicIP :: Lens' AllocateAddressResponse (Maybe Text)
-aarsPublicIP = lens _aarsPublicIP (\ s a -> s{_aarsPublicIP = a});
-
--- | -- | The response status code.
-aarsResponseStatus :: Lens' AllocateAddressResponse Int
-aarsResponseStatus = lens _aarsResponseStatus (\ s a -> s{_aarsResponseStatus = a});
-
-instance NFData AllocateAddressResponse
diff --git a/gen/Network/AWS/EC2/AllocateHosts.hs b/gen/Network/AWS/EC2/AllocateHosts.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AllocateHosts.hs
+++ /dev/null
@@ -1,177 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AllocateHosts
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Allocates a Dedicated Host to your account. At minimum you need to specify the instance size type, Availability Zone, and quantity of hosts you want to allocate.
---
---
-module Network.AWS.EC2.AllocateHosts
-    (
-    -- * Creating a Request
-      allocateHosts
-    , AllocateHosts
-    -- * Request Lenses
-    , ahClientToken
-    , ahAutoPlacement
-    , ahInstanceType
-    , ahQuantity
-    , ahAvailabilityZone
-
-    -- * Destructuring the Response
-    , allocateHostsResponse
-    , AllocateHostsResponse
-    -- * Response Lenses
-    , ahrsHostIds
-    , ahrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AllocateHosts.
---
---
---
--- /See:/ 'allocateHosts' smart constructor.
-data AllocateHosts = AllocateHosts'
-    { _ahClientToken      :: !(Maybe Text)
-    , _ahAutoPlacement    :: !(Maybe AutoPlacement)
-    , _ahInstanceType     :: !Text
-    , _ahQuantity         :: !Int
-    , _ahAvailabilityZone :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AllocateHosts' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ahClientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'ahAutoPlacement' - This is enabled by default. This property allows instances to be automatically placed onto available Dedicated Hosts, when you are launching instances without specifying a host ID. Default: Enabled
---
--- * 'ahInstanceType' - Specify the instance type that you want your Dedicated Hosts to be configured for. When you specify the instance type, that is the only instance type that you can launch onto that host.
---
--- * 'ahQuantity' - The number of Dedicated Hosts you want to allocate to your account with these parameters.
---
--- * 'ahAvailabilityZone' - The Availability Zone for the Dedicated Hosts.
-allocateHosts
-    :: Text -- ^ 'ahInstanceType'
-    -> Int -- ^ 'ahQuantity'
-    -> Text -- ^ 'ahAvailabilityZone'
-    -> AllocateHosts
-allocateHosts pInstanceType_ pQuantity_ pAvailabilityZone_ =
-    AllocateHosts'
-    { _ahClientToken = Nothing
-    , _ahAutoPlacement = Nothing
-    , _ahInstanceType = pInstanceType_
-    , _ahQuantity = pQuantity_
-    , _ahAvailabilityZone = pAvailabilityZone_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
-ahClientToken :: Lens' AllocateHosts (Maybe Text)
-ahClientToken = lens _ahClientToken (\ s a -> s{_ahClientToken = a});
-
--- | This is enabled by default. This property allows instances to be automatically placed onto available Dedicated Hosts, when you are launching instances without specifying a host ID. Default: Enabled
-ahAutoPlacement :: Lens' AllocateHosts (Maybe AutoPlacement)
-ahAutoPlacement = lens _ahAutoPlacement (\ s a -> s{_ahAutoPlacement = a});
-
--- | Specify the instance type that you want your Dedicated Hosts to be configured for. When you specify the instance type, that is the only instance type that you can launch onto that host.
-ahInstanceType :: Lens' AllocateHosts Text
-ahInstanceType = lens _ahInstanceType (\ s a -> s{_ahInstanceType = a});
-
--- | The number of Dedicated Hosts you want to allocate to your account with these parameters.
-ahQuantity :: Lens' AllocateHosts Int
-ahQuantity = lens _ahQuantity (\ s a -> s{_ahQuantity = a});
-
--- | The Availability Zone for the Dedicated Hosts.
-ahAvailabilityZone :: Lens' AllocateHosts Text
-ahAvailabilityZone = lens _ahAvailabilityZone (\ s a -> s{_ahAvailabilityZone = a});
-
-instance AWSRequest AllocateHosts where
-        type Rs AllocateHosts = AllocateHostsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AllocateHostsResponse' <$>
-                   (x .@? "hostIdSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable AllocateHosts
-
-instance NFData AllocateHosts
-
-instance ToHeaders AllocateHosts where
-        toHeaders = const mempty
-
-instance ToPath AllocateHosts where
-        toPath = const "/"
-
-instance ToQuery AllocateHosts where
-        toQuery AllocateHosts'{..}
-          = mconcat
-              ["Action" =: ("AllocateHosts" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _ahClientToken,
-               "AutoPlacement" =: _ahAutoPlacement,
-               "InstanceType" =: _ahInstanceType,
-               "Quantity" =: _ahQuantity,
-               "AvailabilityZone" =: _ahAvailabilityZone]
-
--- | Contains the output of AllocateHosts.
---
---
---
--- /See:/ 'allocateHostsResponse' smart constructor.
-data AllocateHostsResponse = AllocateHostsResponse'
-    { _ahrsHostIds        :: !(Maybe [Text])
-    , _ahrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AllocateHostsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ahrsHostIds' - The ID of the allocated Dedicated Host. This is used when you want to launch an instance onto a specific host.
---
--- * 'ahrsResponseStatus' - -- | The response status code.
-allocateHostsResponse
-    :: Int -- ^ 'ahrsResponseStatus'
-    -> AllocateHostsResponse
-allocateHostsResponse pResponseStatus_ =
-    AllocateHostsResponse'
-    { _ahrsHostIds = Nothing
-    , _ahrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the allocated Dedicated Host. This is used when you want to launch an instance onto a specific host.
-ahrsHostIds :: Lens' AllocateHostsResponse [Text]
-ahrsHostIds = lens _ahrsHostIds (\ s a -> s{_ahrsHostIds = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-ahrsResponseStatus :: Lens' AllocateHostsResponse Int
-ahrsResponseStatus = lens _ahrsResponseStatus (\ s a -> s{_ahrsResponseStatus = a});
-
-instance NFData AllocateHostsResponse
diff --git a/gen/Network/AWS/EC2/AssignIPv6Addresses.hs b/gen/Network/AWS/EC2/AssignIPv6Addresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssignIPv6Addresses.hs
+++ /dev/null
@@ -1,159 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssignIPv6Addresses
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Assigns one or more IPv6 addresses to the specified network interface. You can specify one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from within the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies per instance type. For information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI IP Addresses Per Network Interface Per Instance Type> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.AssignIPv6Addresses
-    (
-    -- * Creating a Request
-      assignIPv6Addresses
-    , AssignIPv6Addresses
-    -- * Request Lenses
-    , aiaIPv6AddressCount
-    , aiaIPv6Addresses
-    , aiaNetworkInterfaceId
-
-    -- * Destructuring the Response
-    , assignIPv6AddressesResponse
-    , AssignIPv6AddressesResponse
-    -- * Response Lenses
-    , aiarsNetworkInterfaceId
-    , aiarsAssignedIPv6Addresses
-    , aiarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'assignIPv6Addresses' smart constructor.
-data AssignIPv6Addresses = AssignIPv6Addresses'
-    { _aiaIPv6AddressCount   :: !(Maybe Int)
-    , _aiaIPv6Addresses      :: !(Maybe [Text])
-    , _aiaNetworkInterfaceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssignIPv6Addresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aiaIPv6AddressCount' - The number of IPv6 addresses to assign to the network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses.
---
--- * 'aiaIPv6Addresses' - One or more specific IPv6 addresses to be assigned to the network interface. You can't use this option if you're specifying a number of IPv6 addresses.
---
--- * 'aiaNetworkInterfaceId' - The ID of the network interface.
-assignIPv6Addresses
-    :: Text -- ^ 'aiaNetworkInterfaceId'
-    -> AssignIPv6Addresses
-assignIPv6Addresses pNetworkInterfaceId_ =
-    AssignIPv6Addresses'
-    { _aiaIPv6AddressCount = Nothing
-    , _aiaIPv6Addresses = Nothing
-    , _aiaNetworkInterfaceId = pNetworkInterfaceId_
-    }
-
--- | The number of IPv6 addresses to assign to the network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses.
-aiaIPv6AddressCount :: Lens' AssignIPv6Addresses (Maybe Int)
-aiaIPv6AddressCount = lens _aiaIPv6AddressCount (\ s a -> s{_aiaIPv6AddressCount = a});
-
--- | One or more specific IPv6 addresses to be assigned to the network interface. You can't use this option if you're specifying a number of IPv6 addresses.
-aiaIPv6Addresses :: Lens' AssignIPv6Addresses [Text]
-aiaIPv6Addresses = lens _aiaIPv6Addresses (\ s a -> s{_aiaIPv6Addresses = a}) . _Default . _Coerce;
-
--- | The ID of the network interface.
-aiaNetworkInterfaceId :: Lens' AssignIPv6Addresses Text
-aiaNetworkInterfaceId = lens _aiaNetworkInterfaceId (\ s a -> s{_aiaNetworkInterfaceId = a});
-
-instance AWSRequest AssignIPv6Addresses where
-        type Rs AssignIPv6Addresses =
-             AssignIPv6AddressesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AssignIPv6AddressesResponse' <$>
-                   (x .@? "networkInterfaceId") <*>
-                     (x .@? "assignedIpv6Addresses" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable AssignIPv6Addresses
-
-instance NFData AssignIPv6Addresses
-
-instance ToHeaders AssignIPv6Addresses where
-        toHeaders = const mempty
-
-instance ToPath AssignIPv6Addresses where
-        toPath = const "/"
-
-instance ToQuery AssignIPv6Addresses where
-        toQuery AssignIPv6Addresses'{..}
-          = mconcat
-              ["Action" =: ("AssignIpv6Addresses" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Ipv6AddressCount" =: _aiaIPv6AddressCount,
-               toQuery
-                 (toQueryList "Ipv6Addresses" <$> _aiaIPv6Addresses),
-               "NetworkInterfaceId" =: _aiaNetworkInterfaceId]
-
--- | /See:/ 'assignIPv6AddressesResponse' smart constructor.
-data AssignIPv6AddressesResponse = AssignIPv6AddressesResponse'
-    { _aiarsNetworkInterfaceId    :: !(Maybe Text)
-    , _aiarsAssignedIPv6Addresses :: !(Maybe [Text])
-    , _aiarsResponseStatus        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssignIPv6AddressesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aiarsNetworkInterfaceId' - The ID of the network interface.
---
--- * 'aiarsAssignedIPv6Addresses' - The IPv6 addresses assigned to the network interface.
---
--- * 'aiarsResponseStatus' - -- | The response status code.
-assignIPv6AddressesResponse
-    :: Int -- ^ 'aiarsResponseStatus'
-    -> AssignIPv6AddressesResponse
-assignIPv6AddressesResponse pResponseStatus_ =
-    AssignIPv6AddressesResponse'
-    { _aiarsNetworkInterfaceId = Nothing
-    , _aiarsAssignedIPv6Addresses = Nothing
-    , _aiarsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the network interface.
-aiarsNetworkInterfaceId :: Lens' AssignIPv6AddressesResponse (Maybe Text)
-aiarsNetworkInterfaceId = lens _aiarsNetworkInterfaceId (\ s a -> s{_aiarsNetworkInterfaceId = a});
-
--- | The IPv6 addresses assigned to the network interface.
-aiarsAssignedIPv6Addresses :: Lens' AssignIPv6AddressesResponse [Text]
-aiarsAssignedIPv6Addresses = lens _aiarsAssignedIPv6Addresses (\ s a -> s{_aiarsAssignedIPv6Addresses = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-aiarsResponseStatus :: Lens' AssignIPv6AddressesResponse Int
-aiarsResponseStatus = lens _aiarsResponseStatus (\ s a -> s{_aiarsResponseStatus = a});
-
-instance NFData AssignIPv6AddressesResponse
diff --git a/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs b/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs
+++ /dev/null
@@ -1,141 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssignPrivateIPAddresses
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Assigns one or more secondary private IP addresses to the specified network interface. You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For information about instance types, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> in the /Amazon Elastic Compute Cloud User Guide/ . For more information about Elastic IP addresses, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- AssignPrivateIpAddresses is available only in EC2-VPC.
---
-module Network.AWS.EC2.AssignPrivateIPAddresses
-    (
-    -- * Creating a Request
-      assignPrivateIPAddresses
-    , AssignPrivateIPAddresses
-    -- * Request Lenses
-    , apiaPrivateIPAddresses
-    , apiaAllowReassignment
-    , apiaSecondaryPrivateIPAddressCount
-    , apiaNetworkInterfaceId
-
-    -- * Destructuring the Response
-    , assignPrivateIPAddressesResponse
-    , AssignPrivateIPAddressesResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AssignPrivateIpAddresses.
---
---
---
--- /See:/ 'assignPrivateIPAddresses' smart constructor.
-data AssignPrivateIPAddresses = AssignPrivateIPAddresses'
-    { _apiaPrivateIPAddresses             :: !(Maybe [Text])
-    , _apiaAllowReassignment              :: !(Maybe Bool)
-    , _apiaSecondaryPrivateIPAddressCount :: !(Maybe Int)
-    , _apiaNetworkInterfaceId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssignPrivateIPAddresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'apiaPrivateIPAddresses' - One or more IP addresses to be assigned as a secondary private IP address to the network interface. You can't specify this parameter when also specifying a number of secondary IP addresses. If you don't specify an IP address, Amazon EC2 automatically selects an IP address within the subnet range.
---
--- * 'apiaAllowReassignment' - Indicates whether to allow an IP address that is already assigned to another network interface or instance to be reassigned to the specified network interface.
---
--- * 'apiaSecondaryPrivateIPAddressCount' - The number of secondary IP addresses to assign to the network interface. You can't specify this parameter when also specifying private IP addresses.
---
--- * 'apiaNetworkInterfaceId' - The ID of the network interface.
-assignPrivateIPAddresses
-    :: Text -- ^ 'apiaNetworkInterfaceId'
-    -> AssignPrivateIPAddresses
-assignPrivateIPAddresses pNetworkInterfaceId_ =
-    AssignPrivateIPAddresses'
-    { _apiaPrivateIPAddresses = Nothing
-    , _apiaAllowReassignment = Nothing
-    , _apiaSecondaryPrivateIPAddressCount = Nothing
-    , _apiaNetworkInterfaceId = pNetworkInterfaceId_
-    }
-
--- | One or more IP addresses to be assigned as a secondary private IP address to the network interface. You can't specify this parameter when also specifying a number of secondary IP addresses. If you don't specify an IP address, Amazon EC2 automatically selects an IP address within the subnet range.
-apiaPrivateIPAddresses :: Lens' AssignPrivateIPAddresses [Text]
-apiaPrivateIPAddresses = lens _apiaPrivateIPAddresses (\ s a -> s{_apiaPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | Indicates whether to allow an IP address that is already assigned to another network interface or instance to be reassigned to the specified network interface.
-apiaAllowReassignment :: Lens' AssignPrivateIPAddresses (Maybe Bool)
-apiaAllowReassignment = lens _apiaAllowReassignment (\ s a -> s{_apiaAllowReassignment = a});
-
--- | The number of secondary IP addresses to assign to the network interface. You can't specify this parameter when also specifying private IP addresses.
-apiaSecondaryPrivateIPAddressCount :: Lens' AssignPrivateIPAddresses (Maybe Int)
-apiaSecondaryPrivateIPAddressCount = lens _apiaSecondaryPrivateIPAddressCount (\ s a -> s{_apiaSecondaryPrivateIPAddressCount = a});
-
--- | The ID of the network interface.
-apiaNetworkInterfaceId :: Lens' AssignPrivateIPAddresses Text
-apiaNetworkInterfaceId = lens _apiaNetworkInterfaceId (\ s a -> s{_apiaNetworkInterfaceId = a});
-
-instance AWSRequest AssignPrivateIPAddresses where
-        type Rs AssignPrivateIPAddresses =
-             AssignPrivateIPAddressesResponse
-        request = postQuery ec2
-        response
-          = receiveNull AssignPrivateIPAddressesResponse'
-
-instance Hashable AssignPrivateIPAddresses
-
-instance NFData AssignPrivateIPAddresses
-
-instance ToHeaders AssignPrivateIPAddresses where
-        toHeaders = const mempty
-
-instance ToPath AssignPrivateIPAddresses where
-        toPath = const "/"
-
-instance ToQuery AssignPrivateIPAddresses where
-        toQuery AssignPrivateIPAddresses'{..}
-          = mconcat
-              ["Action" =:
-                 ("AssignPrivateIpAddresses" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "PrivateIpAddress" <$>
-                    _apiaPrivateIPAddresses),
-               "AllowReassignment" =: _apiaAllowReassignment,
-               "SecondaryPrivateIpAddressCount" =:
-                 _apiaSecondaryPrivateIPAddressCount,
-               "NetworkInterfaceId" =: _apiaNetworkInterfaceId]
-
--- | /See:/ 'assignPrivateIPAddressesResponse' smart constructor.
-data AssignPrivateIPAddressesResponse =
-    AssignPrivateIPAddressesResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssignPrivateIPAddressesResponse' with the minimum fields required to make a request.
---
-assignPrivateIPAddressesResponse
-    :: AssignPrivateIPAddressesResponse
-assignPrivateIPAddressesResponse = AssignPrivateIPAddressesResponse'
-
-instance NFData AssignPrivateIPAddressesResponse
diff --git a/gen/Network/AWS/EC2/AssociateAddress.hs b/gen/Network/AWS/EC2/AssociateAddress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssociateAddress.hs
+++ /dev/null
@@ -1,199 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssociateAddress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates an Elastic IP address with an instance or a network interface.
---
---
--- An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- [EC2-Classic, VPC in an EC2-VPC-only account] If the Elastic IP address is already associated with a different instance, it is disassociated from that instance and associated with the specified instance.
---
--- [VPC in an EC2-Classic account] If you don't specify a private IP address, the Elastic IP address is associated with the primary IP address. If the Elastic IP address is already associated with a different instance or a network interface, you get an error unless you allow reassociation.
---
--- /Important:/ This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error, and you may be charged for each time the Elastic IP address is remapped to the same instance. For more information, see the /Elastic IP Addresses/ section of <http://aws.amazon.com/ec2/pricing/ Amazon EC2 Pricing> .
---
-module Network.AWS.EC2.AssociateAddress
-    (
-    -- * Creating a Request
-      associateAddress
-    , AssociateAddress
-    -- * Request Lenses
-    , aasInstanceId
-    , aasAllocationId
-    , aasNetworkInterfaceId
-    , aasAllowReassociation
-    , aasPrivateIPAddress
-    , aasPublicIP
-    , aasDryRun
-
-    -- * Destructuring the Response
-    , associateAddressResponse
-    , AssociateAddressResponse
-    -- * Response Lenses
-    , arsAssociationId
-    , arsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AssociateAddress.
---
---
---
--- /See:/ 'associateAddress' smart constructor.
-data AssociateAddress = AssociateAddress'
-    { _aasInstanceId         :: !(Maybe Text)
-    , _aasAllocationId       :: !(Maybe Text)
-    , _aasNetworkInterfaceId :: !(Maybe Text)
-    , _aasAllowReassociation :: !(Maybe Bool)
-    , _aasPrivateIPAddress   :: !(Maybe Text)
-    , _aasPublicIP           :: !(Maybe Text)
-    , _aasDryRun             :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aasInstanceId' - The ID of the instance. This is required for EC2-Classic. For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. The operation fails if you specify an instance ID unless exactly one network interface is attached.
---
--- * 'aasAllocationId' - [EC2-VPC] The allocation ID. This is required for EC2-VPC.
---
--- * 'aasNetworkInterfaceId' - [EC2-VPC] The ID of the network interface. If the instance has more than one network interface, you must specify a network interface ID.
---
--- * 'aasAllowReassociation' - [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic IP address that is already associated with an instance or network interface to be reassociated with the specified instance or network interface. Otherwise, the operation fails. In a VPC in an EC2-VPC-only account, reassociation is automatic, therefore you can specify false to ensure the operation fails if the Elastic IP address is already associated with another resource.
---
--- * 'aasPrivateIPAddress' - [EC2-VPC] The primary or secondary private IP address to associate with the Elastic IP address. If no private IP address is specified, the Elastic IP address is associated with the primary private IP address.
---
--- * 'aasPublicIP' - The Elastic IP address. This is required for EC2-Classic.
---
--- * 'aasDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-associateAddress
-    :: AssociateAddress
-associateAddress =
-    AssociateAddress'
-    { _aasInstanceId = Nothing
-    , _aasAllocationId = Nothing
-    , _aasNetworkInterfaceId = Nothing
-    , _aasAllowReassociation = Nothing
-    , _aasPrivateIPAddress = Nothing
-    , _aasPublicIP = Nothing
-    , _aasDryRun = Nothing
-    }
-
--- | The ID of the instance. This is required for EC2-Classic. For EC2-VPC, you can specify either the instance ID or the network interface ID, but not both. The operation fails if you specify an instance ID unless exactly one network interface is attached.
-aasInstanceId :: Lens' AssociateAddress (Maybe Text)
-aasInstanceId = lens _aasInstanceId (\ s a -> s{_aasInstanceId = a});
-
--- | [EC2-VPC] The allocation ID. This is required for EC2-VPC.
-aasAllocationId :: Lens' AssociateAddress (Maybe Text)
-aasAllocationId = lens _aasAllocationId (\ s a -> s{_aasAllocationId = a});
-
--- | [EC2-VPC] The ID of the network interface. If the instance has more than one network interface, you must specify a network interface ID.
-aasNetworkInterfaceId :: Lens' AssociateAddress (Maybe Text)
-aasNetworkInterfaceId = lens _aasNetworkInterfaceId (\ s a -> s{_aasNetworkInterfaceId = a});
-
--- | [EC2-VPC] For a VPC in an EC2-Classic account, specify true to allow an Elastic IP address that is already associated with an instance or network interface to be reassociated with the specified instance or network interface. Otherwise, the operation fails. In a VPC in an EC2-VPC-only account, reassociation is automatic, therefore you can specify false to ensure the operation fails if the Elastic IP address is already associated with another resource.
-aasAllowReassociation :: Lens' AssociateAddress (Maybe Bool)
-aasAllowReassociation = lens _aasAllowReassociation (\ s a -> s{_aasAllowReassociation = a});
-
--- | [EC2-VPC] The primary or secondary private IP address to associate with the Elastic IP address. If no private IP address is specified, the Elastic IP address is associated with the primary private IP address.
-aasPrivateIPAddress :: Lens' AssociateAddress (Maybe Text)
-aasPrivateIPAddress = lens _aasPrivateIPAddress (\ s a -> s{_aasPrivateIPAddress = a});
-
--- | The Elastic IP address. This is required for EC2-Classic.
-aasPublicIP :: Lens' AssociateAddress (Maybe Text)
-aasPublicIP = lens _aasPublicIP (\ s a -> s{_aasPublicIP = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-aasDryRun :: Lens' AssociateAddress (Maybe Bool)
-aasDryRun = lens _aasDryRun (\ s a -> s{_aasDryRun = a});
-
-instance AWSRequest AssociateAddress where
-        type Rs AssociateAddress = AssociateAddressResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AssociateAddressResponse' <$>
-                   (x .@? "associationId") <*> (pure (fromEnum s)))
-
-instance Hashable AssociateAddress
-
-instance NFData AssociateAddress
-
-instance ToHeaders AssociateAddress where
-        toHeaders = const mempty
-
-instance ToPath AssociateAddress where
-        toPath = const "/"
-
-instance ToQuery AssociateAddress where
-        toQuery AssociateAddress'{..}
-          = mconcat
-              ["Action" =: ("AssociateAddress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "InstanceId" =: _aasInstanceId,
-               "AllocationId" =: _aasAllocationId,
-               "NetworkInterfaceId" =: _aasNetworkInterfaceId,
-               "AllowReassociation" =: _aasAllowReassociation,
-               "PrivateIpAddress" =: _aasPrivateIPAddress,
-               "PublicIp" =: _aasPublicIP, "DryRun" =: _aasDryRun]
-
--- | Contains the output of AssociateAddress.
---
---
---
--- /See:/ 'associateAddressResponse' smart constructor.
-data AssociateAddressResponse = AssociateAddressResponse'
-    { _arsAssociationId  :: !(Maybe Text)
-    , _arsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateAddressResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'arsAssociationId' - [EC2-VPC] The ID that represents the association of the Elastic IP address with an instance.
---
--- * 'arsResponseStatus' - -- | The response status code.
-associateAddressResponse
-    :: Int -- ^ 'arsResponseStatus'
-    -> AssociateAddressResponse
-associateAddressResponse pResponseStatus_ =
-    AssociateAddressResponse'
-    { _arsAssociationId = Nothing
-    , _arsResponseStatus = pResponseStatus_
-    }
-
--- | [EC2-VPC] The ID that represents the association of the Elastic IP address with an instance.
-arsAssociationId :: Lens' AssociateAddressResponse (Maybe Text)
-arsAssociationId = lens _arsAssociationId (\ s a -> s{_arsAssociationId = a});
-
--- | -- | The response status code.
-arsResponseStatus :: Lens' AssociateAddressResponse Int
-arsResponseStatus = lens _arsResponseStatus (\ s a -> s{_arsResponseStatus = a});
-
-instance NFData AssociateAddressResponse
diff --git a/gen/Network/AWS/EC2/AssociateDHCPOptions.hs b/gen/Network/AWS/EC2/AssociateDHCPOptions.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssociateDHCPOptions.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssociateDHCPOptions
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC.
---
---
--- After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance.
---
--- For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.AssociateDHCPOptions
-    (
-    -- * Creating a Request
-      associateDHCPOptions
-    , AssociateDHCPOptions
-    -- * Request Lenses
-    , adoDryRun
-    , adoDHCPOptionsId
-    , adoVPCId
-
-    -- * Destructuring the Response
-    , associateDHCPOptionsResponse
-    , AssociateDHCPOptionsResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AssociateDhcpOptions.
---
---
---
--- /See:/ 'associateDHCPOptions' smart constructor.
-data AssociateDHCPOptions = AssociateDHCPOptions'
-    { _adoDryRun        :: !(Maybe Bool)
-    , _adoDHCPOptionsId :: !Text
-    , _adoVPCId         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateDHCPOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'adoDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'adoDHCPOptionsId' - The ID of the DHCP options set, or @default@ to associate no DHCP options with the VPC.
---
--- * 'adoVPCId' - The ID of the VPC.
-associateDHCPOptions
-    :: Text -- ^ 'adoDHCPOptionsId'
-    -> Text -- ^ 'adoVPCId'
-    -> AssociateDHCPOptions
-associateDHCPOptions pDHCPOptionsId_ pVPCId_ =
-    AssociateDHCPOptions'
-    { _adoDryRun = Nothing
-    , _adoDHCPOptionsId = pDHCPOptionsId_
-    , _adoVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-adoDryRun :: Lens' AssociateDHCPOptions (Maybe Bool)
-adoDryRun = lens _adoDryRun (\ s a -> s{_adoDryRun = a});
-
--- | The ID of the DHCP options set, or @default@ to associate no DHCP options with the VPC.
-adoDHCPOptionsId :: Lens' AssociateDHCPOptions Text
-adoDHCPOptionsId = lens _adoDHCPOptionsId (\ s a -> s{_adoDHCPOptionsId = a});
-
--- | The ID of the VPC.
-adoVPCId :: Lens' AssociateDHCPOptions Text
-adoVPCId = lens _adoVPCId (\ s a -> s{_adoVPCId = a});
-
-instance AWSRequest AssociateDHCPOptions where
-        type Rs AssociateDHCPOptions =
-             AssociateDHCPOptionsResponse
-        request = postQuery ec2
-        response = receiveNull AssociateDHCPOptionsResponse'
-
-instance Hashable AssociateDHCPOptions
-
-instance NFData AssociateDHCPOptions
-
-instance ToHeaders AssociateDHCPOptions where
-        toHeaders = const mempty
-
-instance ToPath AssociateDHCPOptions where
-        toPath = const "/"
-
-instance ToQuery AssociateDHCPOptions where
-        toQuery AssociateDHCPOptions'{..}
-          = mconcat
-              ["Action" =: ("AssociateDhcpOptions" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _adoDryRun,
-               "DhcpOptionsId" =: _adoDHCPOptionsId,
-               "VpcId" =: _adoVPCId]
-
--- | /See:/ 'associateDHCPOptionsResponse' smart constructor.
-data AssociateDHCPOptionsResponse =
-    AssociateDHCPOptionsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateDHCPOptionsResponse' with the minimum fields required to make a request.
---
-associateDHCPOptionsResponse
-    :: AssociateDHCPOptionsResponse
-associateDHCPOptionsResponse = AssociateDHCPOptionsResponse'
-
-instance NFData AssociateDHCPOptionsResponse
diff --git a/gen/Network/AWS/EC2/AssociateRouteTable.hs b/gen/Network/AWS/EC2/AssociateRouteTable.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssociateRouteTable.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssociateRouteTable
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a subnet with a route table. The subnet and route table must be in the same VPC. This association causes traffic originating from the subnet to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table from the subnet later. A route table can be associated with multiple subnets.
---
---
--- For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.AssociateRouteTable
-    (
-    -- * Creating a Request
-      associateRouteTable
-    , AssociateRouteTable
-    -- * Request Lenses
-    , artDryRun
-    , artSubnetId
-    , artRouteTableId
-
-    -- * Destructuring the Response
-    , associateRouteTableResponse
-    , AssociateRouteTableResponse
-    -- * Response Lenses
-    , artrsAssociationId
-    , artrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AssociateRouteTable.
---
---
---
--- /See:/ 'associateRouteTable' smart constructor.
-data AssociateRouteTable = AssociateRouteTable'
-    { _artDryRun       :: !(Maybe Bool)
-    , _artSubnetId     :: !Text
-    , _artRouteTableId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateRouteTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'artDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'artSubnetId' - The ID of the subnet.
---
--- * 'artRouteTableId' - The ID of the route table.
-associateRouteTable
-    :: Text -- ^ 'artSubnetId'
-    -> Text -- ^ 'artRouteTableId'
-    -> AssociateRouteTable
-associateRouteTable pSubnetId_ pRouteTableId_ =
-    AssociateRouteTable'
-    { _artDryRun = Nothing
-    , _artSubnetId = pSubnetId_
-    , _artRouteTableId = pRouteTableId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-artDryRun :: Lens' AssociateRouteTable (Maybe Bool)
-artDryRun = lens _artDryRun (\ s a -> s{_artDryRun = a});
-
--- | The ID of the subnet.
-artSubnetId :: Lens' AssociateRouteTable Text
-artSubnetId = lens _artSubnetId (\ s a -> s{_artSubnetId = a});
-
--- | The ID of the route table.
-artRouteTableId :: Lens' AssociateRouteTable Text
-artRouteTableId = lens _artRouteTableId (\ s a -> s{_artRouteTableId = a});
-
-instance AWSRequest AssociateRouteTable where
-        type Rs AssociateRouteTable =
-             AssociateRouteTableResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AssociateRouteTableResponse' <$>
-                   (x .@? "associationId") <*> (pure (fromEnum s)))
-
-instance Hashable AssociateRouteTable
-
-instance NFData AssociateRouteTable
-
-instance ToHeaders AssociateRouteTable where
-        toHeaders = const mempty
-
-instance ToPath AssociateRouteTable where
-        toPath = const "/"
-
-instance ToQuery AssociateRouteTable where
-        toQuery AssociateRouteTable'{..}
-          = mconcat
-              ["Action" =: ("AssociateRouteTable" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _artDryRun, "SubnetId" =: _artSubnetId,
-               "RouteTableId" =: _artRouteTableId]
-
--- | Contains the output of AssociateRouteTable.
---
---
---
--- /See:/ 'associateRouteTableResponse' smart constructor.
-data AssociateRouteTableResponse = AssociateRouteTableResponse'
-    { _artrsAssociationId  :: !(Maybe Text)
-    , _artrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateRouteTableResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'artrsAssociationId' - The route table association ID (needed to disassociate the route table).
---
--- * 'artrsResponseStatus' - -- | The response status code.
-associateRouteTableResponse
-    :: Int -- ^ 'artrsResponseStatus'
-    -> AssociateRouteTableResponse
-associateRouteTableResponse pResponseStatus_ =
-    AssociateRouteTableResponse'
-    { _artrsAssociationId = Nothing
-    , _artrsResponseStatus = pResponseStatus_
-    }
-
--- | The route table association ID (needed to disassociate the route table).
-artrsAssociationId :: Lens' AssociateRouteTableResponse (Maybe Text)
-artrsAssociationId = lens _artrsAssociationId (\ s a -> s{_artrsAssociationId = a});
-
--- | -- | The response status code.
-artrsResponseStatus :: Lens' AssociateRouteTableResponse Int
-artrsResponseStatus = lens _artrsResponseStatus (\ s a -> s{_artrsResponseStatus = a});
-
-instance NFData AssociateRouteTableResponse
diff --git a/gen/Network/AWS/EC2/AssociateSubnetCidrBlock.hs b/gen/Network/AWS/EC2/AssociateSubnetCidrBlock.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssociateSubnetCidrBlock.hs
+++ /dev/null
@@ -1,149 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssociateSubnetCidrBlock
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a CIDR block with your subnet. You can only associate a single IPv6 CIDR block with your subnet. An IPv6 CIDR block must have a prefix length of /64.
---
---
-module Network.AWS.EC2.AssociateSubnetCidrBlock
-    (
-    -- * Creating a Request
-      associateSubnetCidrBlock
-    , AssociateSubnetCidrBlock
-    -- * Request Lenses
-    , ascbSubnetId
-    , ascbIPv6CidrBlock
-
-    -- * Destructuring the Response
-    , associateSubnetCidrBlockResponse
-    , AssociateSubnetCidrBlockResponse
-    -- * Response Lenses
-    , ascbrsSubnetId
-    , ascbrsIPv6CidrBlockAssociation
-    , ascbrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'associateSubnetCidrBlock' smart constructor.
-data AssociateSubnetCidrBlock = AssociateSubnetCidrBlock'
-    { _ascbSubnetId      :: !Text
-    , _ascbIPv6CidrBlock :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateSubnetCidrBlock' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ascbSubnetId' - The ID of your subnet.
---
--- * 'ascbIPv6CidrBlock' - The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length.
-associateSubnetCidrBlock
-    :: Text -- ^ 'ascbSubnetId'
-    -> Text -- ^ 'ascbIPv6CidrBlock'
-    -> AssociateSubnetCidrBlock
-associateSubnetCidrBlock pSubnetId_ pIPv6CidrBlock_ =
-    AssociateSubnetCidrBlock'
-    { _ascbSubnetId = pSubnetId_
-    , _ascbIPv6CidrBlock = pIPv6CidrBlock_
-    }
-
--- | The ID of your subnet.
-ascbSubnetId :: Lens' AssociateSubnetCidrBlock Text
-ascbSubnetId = lens _ascbSubnetId (\ s a -> s{_ascbSubnetId = a});
-
--- | The IPv6 CIDR block for your subnet. The subnet must have a /64 prefix length.
-ascbIPv6CidrBlock :: Lens' AssociateSubnetCidrBlock Text
-ascbIPv6CidrBlock = lens _ascbIPv6CidrBlock (\ s a -> s{_ascbIPv6CidrBlock = a});
-
-instance AWSRequest AssociateSubnetCidrBlock where
-        type Rs AssociateSubnetCidrBlock =
-             AssociateSubnetCidrBlockResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AssociateSubnetCidrBlockResponse' <$>
-                   (x .@? "subnetId") <*>
-                     (x .@? "ipv6CidrBlockAssociation")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable AssociateSubnetCidrBlock
-
-instance NFData AssociateSubnetCidrBlock
-
-instance ToHeaders AssociateSubnetCidrBlock where
-        toHeaders = const mempty
-
-instance ToPath AssociateSubnetCidrBlock where
-        toPath = const "/"
-
-instance ToQuery AssociateSubnetCidrBlock where
-        toQuery AssociateSubnetCidrBlock'{..}
-          = mconcat
-              ["Action" =:
-                 ("AssociateSubnetCidrBlock" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "SubnetId" =: _ascbSubnetId,
-               "Ipv6CidrBlock" =: _ascbIPv6CidrBlock]
-
--- | /See:/ 'associateSubnetCidrBlockResponse' smart constructor.
-data AssociateSubnetCidrBlockResponse = AssociateSubnetCidrBlockResponse'
-    { _ascbrsSubnetId                 :: !(Maybe Text)
-    , _ascbrsIPv6CidrBlockAssociation :: !(Maybe SubnetIPv6CidrBlockAssociation)
-    , _ascbrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateSubnetCidrBlockResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ascbrsSubnetId' - The ID of the subnet.
---
--- * 'ascbrsIPv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
---
--- * 'ascbrsResponseStatus' - -- | The response status code.
-associateSubnetCidrBlockResponse
-    :: Int -- ^ 'ascbrsResponseStatus'
-    -> AssociateSubnetCidrBlockResponse
-associateSubnetCidrBlockResponse pResponseStatus_ =
-    AssociateSubnetCidrBlockResponse'
-    { _ascbrsSubnetId = Nothing
-    , _ascbrsIPv6CidrBlockAssociation = Nothing
-    , _ascbrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the subnet.
-ascbrsSubnetId :: Lens' AssociateSubnetCidrBlockResponse (Maybe Text)
-ascbrsSubnetId = lens _ascbrsSubnetId (\ s a -> s{_ascbrsSubnetId = a});
-
--- | Information about the IPv6 CIDR block association.
-ascbrsIPv6CidrBlockAssociation :: Lens' AssociateSubnetCidrBlockResponse (Maybe SubnetIPv6CidrBlockAssociation)
-ascbrsIPv6CidrBlockAssociation = lens _ascbrsIPv6CidrBlockAssociation (\ s a -> s{_ascbrsIPv6CidrBlockAssociation = a});
-
--- | -- | The response status code.
-ascbrsResponseStatus :: Lens' AssociateSubnetCidrBlockResponse Int
-ascbrsResponseStatus = lens _ascbrsResponseStatus (\ s a -> s{_ascbrsResponseStatus = a});
-
-instance NFData AssociateSubnetCidrBlockResponse
diff --git a/gen/Network/AWS/EC2/AssociateVPCCidrBlock.hs b/gen/Network/AWS/EC2/AssociateVPCCidrBlock.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AssociateVPCCidrBlock.hs
+++ /dev/null
@@ -1,148 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AssociateVPCCidrBlock
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates a CIDR block with your VPC. You can only associate a single Amazon-provided IPv6 CIDR block with your VPC. The IPv6 CIDR block size is fixed at /56.
---
---
-module Network.AWS.EC2.AssociateVPCCidrBlock
-    (
-    -- * Creating a Request
-      associateVPCCidrBlock
-    , AssociateVPCCidrBlock
-    -- * Request Lenses
-    , avcbAmazonProvidedIPv6CidrBlock
-    , avcbVPCId
-
-    -- * Destructuring the Response
-    , associateVPCCidrBlockResponse
-    , AssociateVPCCidrBlockResponse
-    -- * Response Lenses
-    , avcbrsVPCId
-    , avcbrsIPv6CidrBlockAssociation
-    , avcbrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'associateVPCCidrBlock' smart constructor.
-data AssociateVPCCidrBlock = AssociateVPCCidrBlock'
-    { _avcbAmazonProvidedIPv6CidrBlock :: !(Maybe Bool)
-    , _avcbVPCId                       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateVPCCidrBlock' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avcbAmazonProvidedIPv6CidrBlock' - Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IPv6 addresses, or the size of the CIDR block.
---
--- * 'avcbVPCId' - The ID of the VPC.
-associateVPCCidrBlock
-    :: Text -- ^ 'avcbVPCId'
-    -> AssociateVPCCidrBlock
-associateVPCCidrBlock pVPCId_ =
-    AssociateVPCCidrBlock'
-    { _avcbAmazonProvidedIPv6CidrBlock = Nothing
-    , _avcbVPCId = pVPCId_
-    }
-
--- | Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IPv6 addresses, or the size of the CIDR block.
-avcbAmazonProvidedIPv6CidrBlock :: Lens' AssociateVPCCidrBlock (Maybe Bool)
-avcbAmazonProvidedIPv6CidrBlock = lens _avcbAmazonProvidedIPv6CidrBlock (\ s a -> s{_avcbAmazonProvidedIPv6CidrBlock = a});
-
--- | The ID of the VPC.
-avcbVPCId :: Lens' AssociateVPCCidrBlock Text
-avcbVPCId = lens _avcbVPCId (\ s a -> s{_avcbVPCId = a});
-
-instance AWSRequest AssociateVPCCidrBlock where
-        type Rs AssociateVPCCidrBlock =
-             AssociateVPCCidrBlockResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AssociateVPCCidrBlockResponse' <$>
-                   (x .@? "vpcId") <*>
-                     (x .@? "ipv6CidrBlockAssociation")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable AssociateVPCCidrBlock
-
-instance NFData AssociateVPCCidrBlock
-
-instance ToHeaders AssociateVPCCidrBlock where
-        toHeaders = const mempty
-
-instance ToPath AssociateVPCCidrBlock where
-        toPath = const "/"
-
-instance ToQuery AssociateVPCCidrBlock where
-        toQuery AssociateVPCCidrBlock'{..}
-          = mconcat
-              ["Action" =: ("AssociateVpcCidrBlock" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AmazonProvidedIpv6CidrBlock" =:
-                 _avcbAmazonProvidedIPv6CidrBlock,
-               "VpcId" =: _avcbVPCId]
-
--- | /See:/ 'associateVPCCidrBlockResponse' smart constructor.
-data AssociateVPCCidrBlockResponse = AssociateVPCCidrBlockResponse'
-    { _avcbrsVPCId                    :: !(Maybe Text)
-    , _avcbrsIPv6CidrBlockAssociation :: !(Maybe VPCIPv6CidrBlockAssociation)
-    , _avcbrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AssociateVPCCidrBlockResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avcbrsVPCId' - The ID of the VPC.
---
--- * 'avcbrsIPv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
---
--- * 'avcbrsResponseStatus' - -- | The response status code.
-associateVPCCidrBlockResponse
-    :: Int -- ^ 'avcbrsResponseStatus'
-    -> AssociateVPCCidrBlockResponse
-associateVPCCidrBlockResponse pResponseStatus_ =
-    AssociateVPCCidrBlockResponse'
-    { _avcbrsVPCId = Nothing
-    , _avcbrsIPv6CidrBlockAssociation = Nothing
-    , _avcbrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the VPC.
-avcbrsVPCId :: Lens' AssociateVPCCidrBlockResponse (Maybe Text)
-avcbrsVPCId = lens _avcbrsVPCId (\ s a -> s{_avcbrsVPCId = a});
-
--- | Information about the IPv6 CIDR block association.
-avcbrsIPv6CidrBlockAssociation :: Lens' AssociateVPCCidrBlockResponse (Maybe VPCIPv6CidrBlockAssociation)
-avcbrsIPv6CidrBlockAssociation = lens _avcbrsIPv6CidrBlockAssociation (\ s a -> s{_avcbrsIPv6CidrBlockAssociation = a});
-
--- | -- | The response status code.
-avcbrsResponseStatus :: Lens' AssociateVPCCidrBlockResponse Int
-avcbrsResponseStatus = lens _avcbrsResponseStatus (\ s a -> s{_avcbrsResponseStatus = a});
-
-instance NFData AssociateVPCCidrBlockResponse
diff --git a/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs b/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs
+++ /dev/null
@@ -1,169 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AttachClassicLinkVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the @running@ state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it.
---
---
--- After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again.
---
--- Linking your instance to a VPC is sometimes referred to as /attaching/ your instance.
---
-module Network.AWS.EC2.AttachClassicLinkVPC
-    (
-    -- * Creating a Request
-      attachClassicLinkVPC
-    , AttachClassicLinkVPC
-    -- * Request Lenses
-    , aclvDryRun
-    , aclvInstanceId
-    , aclvVPCId
-    , aclvGroups
-
-    -- * Destructuring the Response
-    , attachClassicLinkVPCResponse
-    , AttachClassicLinkVPCResponse
-    -- * Response Lenses
-    , aclvrsReturn
-    , aclvrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AttachClassicLinkVpc.
---
---
---
--- /See:/ 'attachClassicLinkVPC' smart constructor.
-data AttachClassicLinkVPC = AttachClassicLinkVPC'
-    { _aclvDryRun     :: !(Maybe Bool)
-    , _aclvInstanceId :: !Text
-    , _aclvVPCId      :: !Text
-    , _aclvGroups     :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachClassicLinkVPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aclvDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'aclvInstanceId' - The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC.
---
--- * 'aclvVPCId' - The ID of a ClassicLink-enabled VPC.
---
--- * 'aclvGroups' - The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.
-attachClassicLinkVPC
-    :: Text -- ^ 'aclvInstanceId'
-    -> Text -- ^ 'aclvVPCId'
-    -> AttachClassicLinkVPC
-attachClassicLinkVPC pInstanceId_ pVPCId_ =
-    AttachClassicLinkVPC'
-    { _aclvDryRun = Nothing
-    , _aclvInstanceId = pInstanceId_
-    , _aclvVPCId = pVPCId_
-    , _aclvGroups = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-aclvDryRun :: Lens' AttachClassicLinkVPC (Maybe Bool)
-aclvDryRun = lens _aclvDryRun (\ s a -> s{_aclvDryRun = a});
-
--- | The ID of an EC2-Classic instance to link to the ClassicLink-enabled VPC.
-aclvInstanceId :: Lens' AttachClassicLinkVPC Text
-aclvInstanceId = lens _aclvInstanceId (\ s a -> s{_aclvInstanceId = a});
-
--- | The ID of a ClassicLink-enabled VPC.
-aclvVPCId :: Lens' AttachClassicLinkVPC Text
-aclvVPCId = lens _aclvVPCId (\ s a -> s{_aclvVPCId = a});
-
--- | The ID of one or more of the VPC's security groups. You cannot specify security groups from a different VPC.
-aclvGroups :: Lens' AttachClassicLinkVPC [Text]
-aclvGroups = lens _aclvGroups (\ s a -> s{_aclvGroups = a}) . _Coerce;
-
-instance AWSRequest AttachClassicLinkVPC where
-        type Rs AttachClassicLinkVPC =
-             AttachClassicLinkVPCResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AttachClassicLinkVPCResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable AttachClassicLinkVPC
-
-instance NFData AttachClassicLinkVPC
-
-instance ToHeaders AttachClassicLinkVPC where
-        toHeaders = const mempty
-
-instance ToPath AttachClassicLinkVPC where
-        toPath = const "/"
-
-instance ToQuery AttachClassicLinkVPC where
-        toQuery AttachClassicLinkVPC'{..}
-          = mconcat
-              ["Action" =: ("AttachClassicLinkVpc" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _aclvDryRun,
-               "InstanceId" =: _aclvInstanceId,
-               "VpcId" =: _aclvVPCId,
-               toQueryList "SecurityGroupId" _aclvGroups]
-
--- | Contains the output of AttachClassicLinkVpc.
---
---
---
--- /See:/ 'attachClassicLinkVPCResponse' smart constructor.
-data AttachClassicLinkVPCResponse = AttachClassicLinkVPCResponse'
-    { _aclvrsReturn         :: !(Maybe Bool)
-    , _aclvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachClassicLinkVPCResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aclvrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'aclvrsResponseStatus' - -- | The response status code.
-attachClassicLinkVPCResponse
-    :: Int -- ^ 'aclvrsResponseStatus'
-    -> AttachClassicLinkVPCResponse
-attachClassicLinkVPCResponse pResponseStatus_ =
-    AttachClassicLinkVPCResponse'
-    { _aclvrsReturn = Nothing
-    , _aclvrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-aclvrsReturn :: Lens' AttachClassicLinkVPCResponse (Maybe Bool)
-aclvrsReturn = lens _aclvrsReturn (\ s a -> s{_aclvrsReturn = a});
-
--- | -- | The response status code.
-aclvrsResponseStatus :: Lens' AttachClassicLinkVPCResponse Int
-aclvrsResponseStatus = lens _aclvrsResponseStatus (\ s a -> s{_aclvrsResponseStatus = a});
-
-instance NFData AttachClassicLinkVPCResponse
diff --git a/gen/Network/AWS/EC2/AttachInternetGateway.hs b/gen/Network/AWS/EC2/AttachInternetGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AttachInternetGateway.hs
+++ /dev/null
@@ -1,125 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AttachInternetGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Attaches an Internet gateway to a VPC, enabling connectivity between the Internet and the VPC. For more information about your VPC and Internet gateway, see the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/ Amazon Virtual Private Cloud User Guide> .
---
---
-module Network.AWS.EC2.AttachInternetGateway
-    (
-    -- * Creating a Request
-      attachInternetGateway
-    , AttachInternetGateway
-    -- * Request Lenses
-    , aigDryRun
-    , aigInternetGatewayId
-    , aigVPCId
-
-    -- * Destructuring the Response
-    , attachInternetGatewayResponse
-    , AttachInternetGatewayResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AttachInternetGateway.
---
---
---
--- /See:/ 'attachInternetGateway' smart constructor.
-data AttachInternetGateway = AttachInternetGateway'
-    { _aigDryRun            :: !(Maybe Bool)
-    , _aigInternetGatewayId :: !Text
-    , _aigVPCId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aigDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'aigInternetGatewayId' - The ID of the Internet gateway.
---
--- * 'aigVPCId' - The ID of the VPC.
-attachInternetGateway
-    :: Text -- ^ 'aigInternetGatewayId'
-    -> Text -- ^ 'aigVPCId'
-    -> AttachInternetGateway
-attachInternetGateway pInternetGatewayId_ pVPCId_ =
-    AttachInternetGateway'
-    { _aigDryRun = Nothing
-    , _aigInternetGatewayId = pInternetGatewayId_
-    , _aigVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-aigDryRun :: Lens' AttachInternetGateway (Maybe Bool)
-aigDryRun = lens _aigDryRun (\ s a -> s{_aigDryRun = a});
-
--- | The ID of the Internet gateway.
-aigInternetGatewayId :: Lens' AttachInternetGateway Text
-aigInternetGatewayId = lens _aigInternetGatewayId (\ s a -> s{_aigInternetGatewayId = a});
-
--- | The ID of the VPC.
-aigVPCId :: Lens' AttachInternetGateway Text
-aigVPCId = lens _aigVPCId (\ s a -> s{_aigVPCId = a});
-
-instance AWSRequest AttachInternetGateway where
-        type Rs AttachInternetGateway =
-             AttachInternetGatewayResponse
-        request = postQuery ec2
-        response = receiveNull AttachInternetGatewayResponse'
-
-instance Hashable AttachInternetGateway
-
-instance NFData AttachInternetGateway
-
-instance ToHeaders AttachInternetGateway where
-        toHeaders = const mempty
-
-instance ToPath AttachInternetGateway where
-        toPath = const "/"
-
-instance ToQuery AttachInternetGateway where
-        toQuery AttachInternetGateway'{..}
-          = mconcat
-              ["Action" =: ("AttachInternetGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _aigDryRun,
-               "InternetGatewayId" =: _aigInternetGatewayId,
-               "VpcId" =: _aigVPCId]
-
--- | /See:/ 'attachInternetGatewayResponse' smart constructor.
-data AttachInternetGatewayResponse =
-    AttachInternetGatewayResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachInternetGatewayResponse' with the minimum fields required to make a request.
---
-attachInternetGatewayResponse
-    :: AttachInternetGatewayResponse
-attachInternetGatewayResponse = AttachInternetGatewayResponse'
-
-instance NFData AttachInternetGatewayResponse
diff --git a/gen/Network/AWS/EC2/AttachNetworkInterface.hs b/gen/Network/AWS/EC2/AttachNetworkInterface.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AttachNetworkInterface.hs
+++ /dev/null
@@ -1,167 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AttachNetworkInterface
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Attaches a network interface to an instance.
---
---
-module Network.AWS.EC2.AttachNetworkInterface
-    (
-    -- * Creating a Request
-      attachNetworkInterface
-    , AttachNetworkInterface
-    -- * Request Lenses
-    , aniDryRun
-    , aniNetworkInterfaceId
-    , aniInstanceId
-    , aniDeviceIndex
-
-    -- * Destructuring the Response
-    , attachNetworkInterfaceResponse
-    , AttachNetworkInterfaceResponse
-    -- * Response Lenses
-    , anirsAttachmentId
-    , anirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AttachNetworkInterface.
---
---
---
--- /See:/ 'attachNetworkInterface' smart constructor.
-data AttachNetworkInterface = AttachNetworkInterface'
-    { _aniDryRun             :: !(Maybe Bool)
-    , _aniNetworkInterfaceId :: !Text
-    , _aniInstanceId         :: !Text
-    , _aniDeviceIndex        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aniDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'aniNetworkInterfaceId' - The ID of the network interface.
---
--- * 'aniInstanceId' - The ID of the instance.
---
--- * 'aniDeviceIndex' - The index of the device for the network interface attachment.
-attachNetworkInterface
-    :: Text -- ^ 'aniNetworkInterfaceId'
-    -> Text -- ^ 'aniInstanceId'
-    -> Int -- ^ 'aniDeviceIndex'
-    -> AttachNetworkInterface
-attachNetworkInterface pNetworkInterfaceId_ pInstanceId_ pDeviceIndex_ =
-    AttachNetworkInterface'
-    { _aniDryRun = Nothing
-    , _aniNetworkInterfaceId = pNetworkInterfaceId_
-    , _aniInstanceId = pInstanceId_
-    , _aniDeviceIndex = pDeviceIndex_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-aniDryRun :: Lens' AttachNetworkInterface (Maybe Bool)
-aniDryRun = lens _aniDryRun (\ s a -> s{_aniDryRun = a});
-
--- | The ID of the network interface.
-aniNetworkInterfaceId :: Lens' AttachNetworkInterface Text
-aniNetworkInterfaceId = lens _aniNetworkInterfaceId (\ s a -> s{_aniNetworkInterfaceId = a});
-
--- | The ID of the instance.
-aniInstanceId :: Lens' AttachNetworkInterface Text
-aniInstanceId = lens _aniInstanceId (\ s a -> s{_aniInstanceId = a});
-
--- | The index of the device for the network interface attachment.
-aniDeviceIndex :: Lens' AttachNetworkInterface Int
-aniDeviceIndex = lens _aniDeviceIndex (\ s a -> s{_aniDeviceIndex = a});
-
-instance AWSRequest AttachNetworkInterface where
-        type Rs AttachNetworkInterface =
-             AttachNetworkInterfaceResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AttachNetworkInterfaceResponse' <$>
-                   (x .@? "attachmentId") <*> (pure (fromEnum s)))
-
-instance Hashable AttachNetworkInterface
-
-instance NFData AttachNetworkInterface
-
-instance ToHeaders AttachNetworkInterface where
-        toHeaders = const mempty
-
-instance ToPath AttachNetworkInterface where
-        toPath = const "/"
-
-instance ToQuery AttachNetworkInterface where
-        toQuery AttachNetworkInterface'{..}
-          = mconcat
-              ["Action" =:
-                 ("AttachNetworkInterface" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _aniDryRun,
-               "NetworkInterfaceId" =: _aniNetworkInterfaceId,
-               "InstanceId" =: _aniInstanceId,
-               "DeviceIndex" =: _aniDeviceIndex]
-
--- | Contains the output of AttachNetworkInterface.
---
---
---
--- /See:/ 'attachNetworkInterfaceResponse' smart constructor.
-data AttachNetworkInterfaceResponse = AttachNetworkInterfaceResponse'
-    { _anirsAttachmentId   :: !(Maybe Text)
-    , _anirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachNetworkInterfaceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'anirsAttachmentId' - The ID of the network interface attachment.
---
--- * 'anirsResponseStatus' - -- | The response status code.
-attachNetworkInterfaceResponse
-    :: Int -- ^ 'anirsResponseStatus'
-    -> AttachNetworkInterfaceResponse
-attachNetworkInterfaceResponse pResponseStatus_ =
-    AttachNetworkInterfaceResponse'
-    { _anirsAttachmentId = Nothing
-    , _anirsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the network interface attachment.
-anirsAttachmentId :: Lens' AttachNetworkInterfaceResponse (Maybe Text)
-anirsAttachmentId = lens _anirsAttachmentId (\ s a -> s{_anirsAttachmentId = a});
-
--- | -- | The response status code.
-anirsResponseStatus :: Lens' AttachNetworkInterfaceResponse Int
-anirsResponseStatus = lens _anirsResponseStatus (\ s a -> s{_anirsResponseStatus = a});
-
-instance NFData AttachNetworkInterfaceResponse
diff --git a/gen/Network/AWS/EC2/AttachVPNGateway.hs b/gen/Network/AWS/EC2/AttachVPNGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AttachVPNGateway.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AttachVPNGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Attaches a virtual private gateway to a VPC. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
---
-module Network.AWS.EC2.AttachVPNGateway
-    (
-    -- * Creating a Request
-      attachVPNGateway
-    , AttachVPNGateway
-    -- * Request Lenses
-    , avgDryRun
-    , avgVPNGatewayId
-    , avgVPCId
-
-    -- * Destructuring the Response
-    , attachVPNGatewayResponse
-    , AttachVPNGatewayResponse
-    -- * Response Lenses
-    , avgrsVPCAttachment
-    , avgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AttachVpnGateway.
---
---
---
--- /See:/ 'attachVPNGateway' smart constructor.
-data AttachVPNGateway = AttachVPNGateway'
-    { _avgDryRun       :: !(Maybe Bool)
-    , _avgVPNGatewayId :: !Text
-    , _avgVPCId        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachVPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'avgVPNGatewayId' - The ID of the virtual private gateway.
---
--- * 'avgVPCId' - The ID of the VPC.
-attachVPNGateway
-    :: Text -- ^ 'avgVPNGatewayId'
-    -> Text -- ^ 'avgVPCId'
-    -> AttachVPNGateway
-attachVPNGateway pVPNGatewayId_ pVPCId_ =
-    AttachVPNGateway'
-    { _avgDryRun = Nothing
-    , _avgVPNGatewayId = pVPNGatewayId_
-    , _avgVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-avgDryRun :: Lens' AttachVPNGateway (Maybe Bool)
-avgDryRun = lens _avgDryRun (\ s a -> s{_avgDryRun = a});
-
--- | The ID of the virtual private gateway.
-avgVPNGatewayId :: Lens' AttachVPNGateway Text
-avgVPNGatewayId = lens _avgVPNGatewayId (\ s a -> s{_avgVPNGatewayId = a});
-
--- | The ID of the VPC.
-avgVPCId :: Lens' AttachVPNGateway Text
-avgVPCId = lens _avgVPCId (\ s a -> s{_avgVPCId = a});
-
-instance AWSRequest AttachVPNGateway where
-        type Rs AttachVPNGateway = AttachVPNGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 AttachVPNGatewayResponse' <$>
-                   (x .@? "attachment") <*> (pure (fromEnum s)))
-
-instance Hashable AttachVPNGateway
-
-instance NFData AttachVPNGateway
-
-instance ToHeaders AttachVPNGateway where
-        toHeaders = const mempty
-
-instance ToPath AttachVPNGateway where
-        toPath = const "/"
-
-instance ToQuery AttachVPNGateway where
-        toQuery AttachVPNGateway'{..}
-          = mconcat
-              ["Action" =: ("AttachVpnGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _avgDryRun,
-               "VpnGatewayId" =: _avgVPNGatewayId,
-               "VpcId" =: _avgVPCId]
-
--- | Contains the output of AttachVpnGateway.
---
---
---
--- /See:/ 'attachVPNGatewayResponse' smart constructor.
-data AttachVPNGatewayResponse = AttachVPNGatewayResponse'
-    { _avgrsVPCAttachment  :: !(Maybe VPCAttachment)
-    , _avgrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachVPNGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avgrsVPCAttachment' - Information about the attachment.
---
--- * 'avgrsResponseStatus' - -- | The response status code.
-attachVPNGatewayResponse
-    :: Int -- ^ 'avgrsResponseStatus'
-    -> AttachVPNGatewayResponse
-attachVPNGatewayResponse pResponseStatus_ =
-    AttachVPNGatewayResponse'
-    { _avgrsVPCAttachment = Nothing
-    , _avgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the attachment.
-avgrsVPCAttachment :: Lens' AttachVPNGatewayResponse (Maybe VPCAttachment)
-avgrsVPCAttachment = lens _avgrsVPCAttachment (\ s a -> s{_avgrsVPCAttachment = a});
-
--- | -- | The response status code.
-avgrsResponseStatus :: Lens' AttachVPNGatewayResponse Int
-avgrsResponseStatus = lens _avgrsResponseStatus (\ s a -> s{_avgrsResponseStatus = a});
-
-instance NFData AttachVPNGatewayResponse
diff --git a/gen/Network/AWS/EC2/AttachVolume.hs b/gen/Network/AWS/EC2/AttachVolume.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AttachVolume.hs
+++ /dev/null
@@ -1,147 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AttachVolume
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Attaches an EBS volume to a running or stopped instance and exposes it to the instance with the specified device name.
---
---
--- Encrypted EBS volumes may only be attached to instances that support Amazon EBS encryption. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- For a list of supported device names, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html Attaching an EBS Volume to an Instance> . Any device names that aren't reserved for instance store volumes can be used for EBS volumes. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html Amazon EC2 Instance Store> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- If a volume has an AWS Marketplace product code:
---
---     * The volume can be attached only to a stopped instance.
---
---     * AWS Marketplace product codes are copied from the volume to the instance.
---
---     * You must be subscribed to the product.
---
---     * The instance type and operating system of the instance must support the product. For example, you can't detach a volume from a Windows instance and attach it to a Linux instance.
---
---
---
--- For an overview of the AWS Marketplace, see <https://aws.amazon.com/marketplace/help/200900000 Introducing AWS Marketplace> .
---
--- For more information about EBS volumes, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html Attaching Amazon EBS Volumes> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.AttachVolume
-    (
-    -- * Creating a Request
-      attachVolume
-    , AttachVolume
-    -- * Request Lenses
-    , avDryRun
-    , avVolumeId
-    , avInstanceId
-    , avDevice
-
-    -- * Destructuring the Response
-    , volumeAttachment
-    , VolumeAttachment
-    -- * Response Lenses
-    , volInstanceId
-    , volDeleteOnTermination
-    , volState
-    , volDevice
-    , volVolumeId
-    , volAttachTime
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AttachVolume.
---
---
---
--- /See:/ 'attachVolume' smart constructor.
-data AttachVolume = AttachVolume'
-    { _avDryRun     :: !(Maybe Bool)
-    , _avVolumeId   :: !Text
-    , _avInstanceId :: !Text
-    , _avDevice     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttachVolume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'avVolumeId' - The ID of the EBS volume. The volume and instance must be within the same Availability Zone.
---
--- * 'avInstanceId' - The ID of the instance.
---
--- * 'avDevice' - The device name to expose to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-attachVolume
-    :: Text -- ^ 'avVolumeId'
-    -> Text -- ^ 'avInstanceId'
-    -> Text -- ^ 'avDevice'
-    -> AttachVolume
-attachVolume pVolumeId_ pInstanceId_ pDevice_ =
-    AttachVolume'
-    { _avDryRun = Nothing
-    , _avVolumeId = pVolumeId_
-    , _avInstanceId = pInstanceId_
-    , _avDevice = pDevice_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-avDryRun :: Lens' AttachVolume (Maybe Bool)
-avDryRun = lens _avDryRun (\ s a -> s{_avDryRun = a});
-
--- | The ID of the EBS volume. The volume and instance must be within the same Availability Zone.
-avVolumeId :: Lens' AttachVolume Text
-avVolumeId = lens _avVolumeId (\ s a -> s{_avVolumeId = a});
-
--- | The ID of the instance.
-avInstanceId :: Lens' AttachVolume Text
-avInstanceId = lens _avInstanceId (\ s a -> s{_avInstanceId = a});
-
--- | The device name to expose to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-avDevice :: Lens' AttachVolume Text
-avDevice = lens _avDevice (\ s a -> s{_avDevice = a});
-
-instance AWSRequest AttachVolume where
-        type Rs AttachVolume = VolumeAttachment
-        request = postQuery ec2
-        response = receiveXML (\ s h x -> parseXML x)
-
-instance Hashable AttachVolume
-
-instance NFData AttachVolume
-
-instance ToHeaders AttachVolume where
-        toHeaders = const mempty
-
-instance ToPath AttachVolume where
-        toPath = const "/"
-
-instance ToQuery AttachVolume where
-        toQuery AttachVolume'{..}
-          = mconcat
-              ["Action" =: ("AttachVolume" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _avDryRun, "VolumeId" =: _avVolumeId,
-               "InstanceId" =: _avInstanceId, "Device" =: _avDevice]
diff --git a/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs b/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs
+++ /dev/null
@@ -1,192 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AuthorizeSecurityGroupEgress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- [EC2-VPC only] Adds one or more egress rules to a security group for use with a VPC. Specifically, this action permits instances to send traffic to one or more destination IPv4 or IPv6 CIDR address ranges, or to one or more destination security groups for the same VPC. This action doesn't apply to security groups for use in EC2-Classic. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security Groups for Your VPC> in the /Amazon Virtual Private Cloud User Guide/ . For more information about security group limits, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_Limits.html Amazon VPC Limits> .
---
---
--- Each rule consists of the protocol (for example, TCP), plus either a CIDR range or a source group. For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes.
---
--- Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur.
---
-module Network.AWS.EC2.AuthorizeSecurityGroupEgress
-    (
-    -- * Creating a Request
-      authorizeSecurityGroupEgress
-    , AuthorizeSecurityGroupEgress
-    -- * Request Lenses
-    , asgeFromPort
-    , asgeIPPermissions
-    , asgeIPProtocol
-    , asgeToPort
-    , asgeCidrIP
-    , asgeSourceSecurityGroupOwnerId
-    , asgeSourceSecurityGroupName
-    , asgeDryRun
-    , asgeGroupId
-
-    -- * Destructuring the Response
-    , authorizeSecurityGroupEgressResponse
-    , AuthorizeSecurityGroupEgressResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AuthorizeSecurityGroupEgress.
---
---
---
--- /See:/ 'authorizeSecurityGroupEgress' smart constructor.
-data AuthorizeSecurityGroupEgress = AuthorizeSecurityGroupEgress'
-    { _asgeFromPort                   :: !(Maybe Int)
-    , _asgeIPPermissions              :: !(Maybe [IPPermission])
-    , _asgeIPProtocol                 :: !(Maybe Text)
-    , _asgeToPort                     :: !(Maybe Int)
-    , _asgeCidrIP                     :: !(Maybe Text)
-    , _asgeSourceSecurityGroupOwnerId :: !(Maybe Text)
-    , _asgeSourceSecurityGroupName    :: !(Maybe Text)
-    , _asgeDryRun                     :: !(Maybe Bool)
-    , _asgeGroupId                    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AuthorizeSecurityGroupEgress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asgeFromPort' - The start of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
---
--- * 'asgeIPPermissions' - A set of IP permissions. You can't specify a destination security group and a CIDR IP address range.
---
--- * 'asgeIPProtocol' - The IP protocol name or number. We recommend that you specify the protocol in a set of IP permissions instead.
---
--- * 'asgeToPort' - The end of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
---
--- * 'asgeCidrIP' - The CIDR IPv4 address range. We recommend that you specify the CIDR range in a set of IP permissions instead.
---
--- * 'asgeSourceSecurityGroupOwnerId' - The AWS account number for a destination security group. To authorize outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
---
--- * 'asgeSourceSecurityGroupName' - The name of a destination security group. To authorize outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
---
--- * 'asgeDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'asgeGroupId' - The ID of the security group.
-authorizeSecurityGroupEgress
-    :: Text -- ^ 'asgeGroupId'
-    -> AuthorizeSecurityGroupEgress
-authorizeSecurityGroupEgress pGroupId_ =
-    AuthorizeSecurityGroupEgress'
-    { _asgeFromPort = Nothing
-    , _asgeIPPermissions = Nothing
-    , _asgeIPProtocol = Nothing
-    , _asgeToPort = Nothing
-    , _asgeCidrIP = Nothing
-    , _asgeSourceSecurityGroupOwnerId = Nothing
-    , _asgeSourceSecurityGroupName = Nothing
-    , _asgeDryRun = Nothing
-    , _asgeGroupId = pGroupId_
-    }
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
-asgeFromPort :: Lens' AuthorizeSecurityGroupEgress (Maybe Int)
-asgeFromPort = lens _asgeFromPort (\ s a -> s{_asgeFromPort = a});
-
--- | A set of IP permissions. You can't specify a destination security group and a CIDR IP address range.
-asgeIPPermissions :: Lens' AuthorizeSecurityGroupEgress [IPPermission]
-asgeIPPermissions = lens _asgeIPPermissions (\ s a -> s{_asgeIPPermissions = a}) . _Default . _Coerce;
-
--- | The IP protocol name or number. We recommend that you specify the protocol in a set of IP permissions instead.
-asgeIPProtocol :: Lens' AuthorizeSecurityGroupEgress (Maybe Text)
-asgeIPProtocol = lens _asgeIPProtocol (\ s a -> s{_asgeIPProtocol = a});
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
-asgeToPort :: Lens' AuthorizeSecurityGroupEgress (Maybe Int)
-asgeToPort = lens _asgeToPort (\ s a -> s{_asgeToPort = a});
-
--- | The CIDR IPv4 address range. We recommend that you specify the CIDR range in a set of IP permissions instead.
-asgeCidrIP :: Lens' AuthorizeSecurityGroupEgress (Maybe Text)
-asgeCidrIP = lens _asgeCidrIP (\ s a -> s{_asgeCidrIP = a});
-
--- | The AWS account number for a destination security group. To authorize outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
-asgeSourceSecurityGroupOwnerId :: Lens' AuthorizeSecurityGroupEgress (Maybe Text)
-asgeSourceSecurityGroupOwnerId = lens _asgeSourceSecurityGroupOwnerId (\ s a -> s{_asgeSourceSecurityGroupOwnerId = a});
-
--- | The name of a destination security group. To authorize outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
-asgeSourceSecurityGroupName :: Lens' AuthorizeSecurityGroupEgress (Maybe Text)
-asgeSourceSecurityGroupName = lens _asgeSourceSecurityGroupName (\ s a -> s{_asgeSourceSecurityGroupName = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-asgeDryRun :: Lens' AuthorizeSecurityGroupEgress (Maybe Bool)
-asgeDryRun = lens _asgeDryRun (\ s a -> s{_asgeDryRun = a});
-
--- | The ID of the security group.
-asgeGroupId :: Lens' AuthorizeSecurityGroupEgress Text
-asgeGroupId = lens _asgeGroupId (\ s a -> s{_asgeGroupId = a});
-
-instance AWSRequest AuthorizeSecurityGroupEgress
-         where
-        type Rs AuthorizeSecurityGroupEgress =
-             AuthorizeSecurityGroupEgressResponse
-        request = postQuery ec2
-        response
-          = receiveNull AuthorizeSecurityGroupEgressResponse'
-
-instance Hashable AuthorizeSecurityGroupEgress
-
-instance NFData AuthorizeSecurityGroupEgress
-
-instance ToHeaders AuthorizeSecurityGroupEgress where
-        toHeaders = const mempty
-
-instance ToPath AuthorizeSecurityGroupEgress where
-        toPath = const "/"
-
-instance ToQuery AuthorizeSecurityGroupEgress where
-        toQuery AuthorizeSecurityGroupEgress'{..}
-          = mconcat
-              ["Action" =:
-                 ("AuthorizeSecurityGroupEgress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "FromPort" =: _asgeFromPort,
-               toQuery
-                 (toQueryList "IpPermissions" <$> _asgeIPPermissions),
-               "IpProtocol" =: _asgeIPProtocol,
-               "ToPort" =: _asgeToPort, "CidrIp" =: _asgeCidrIP,
-               "SourceSecurityGroupOwnerId" =:
-                 _asgeSourceSecurityGroupOwnerId,
-               "SourceSecurityGroupName" =:
-                 _asgeSourceSecurityGroupName,
-               "DryRun" =: _asgeDryRun, "GroupId" =: _asgeGroupId]
-
--- | /See:/ 'authorizeSecurityGroupEgressResponse' smart constructor.
-data AuthorizeSecurityGroupEgressResponse =
-    AuthorizeSecurityGroupEgressResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AuthorizeSecurityGroupEgressResponse' with the minimum fields required to make a request.
---
-authorizeSecurityGroupEgressResponse
-    :: AuthorizeSecurityGroupEgressResponse
-authorizeSecurityGroupEgressResponse = AuthorizeSecurityGroupEgressResponse'
-
-instance NFData AuthorizeSecurityGroupEgressResponse
diff --git a/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs b/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs
+++ /dev/null
@@ -1,205 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.AuthorizeSecurityGroupIngress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Adds one or more ingress rules to a security group.
---
---
--- Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.
---
--- [EC2-Classic] This action gives one or more IPv4 CIDR address ranges permission to access a security group in your account, or gives one or more security groups (called the /source groups/ ) permission to access a security group for your account. A source group can be for your own AWS account, or another. You can have up to 100 rules per group.
---
--- [EC2-VPC] This action gives one or more IPv4 or IPv6 CIDR address ranges permission to access a security group in your VPC, or gives one or more other security groups (called the /source groups/ ) permission to access a security group for your VPC. The security groups must all be for the same VPC or a peer VPC in a VPC peering connection. For more information about VPC security group limits, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Appendix_Limits.html Amazon VPC Limits> .
---
-module Network.AWS.EC2.AuthorizeSecurityGroupIngress
-    (
-    -- * Creating a Request
-      authorizeSecurityGroupIngress
-    , AuthorizeSecurityGroupIngress
-    -- * Request Lenses
-    , asgiFromPort
-    , asgiIPPermissions
-    , asgiIPProtocol
-    , asgiGroupId
-    , asgiToPort
-    , asgiCidrIP
-    , asgiSourceSecurityGroupOwnerId
-    , asgiGroupName
-    , asgiSourceSecurityGroupName
-    , asgiDryRun
-
-    -- * Destructuring the Response
-    , authorizeSecurityGroupIngressResponse
-    , AuthorizeSecurityGroupIngressResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for AuthorizeSecurityGroupIngress.
---
---
---
--- /See:/ 'authorizeSecurityGroupIngress' smart constructor.
-data AuthorizeSecurityGroupIngress = AuthorizeSecurityGroupIngress'
-    { _asgiFromPort                   :: !(Maybe Int)
-    , _asgiIPPermissions              :: !(Maybe [IPPermission])
-    , _asgiIPProtocol                 :: !(Maybe Text)
-    , _asgiGroupId                    :: !(Maybe Text)
-    , _asgiToPort                     :: !(Maybe Int)
-    , _asgiCidrIP                     :: !(Maybe Text)
-    , _asgiSourceSecurityGroupOwnerId :: !(Maybe Text)
-    , _asgiGroupName                  :: !(Maybe Text)
-    , _asgiSourceSecurityGroupName    :: !(Maybe Text)
-    , _asgiDryRun                     :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AuthorizeSecurityGroupIngress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'asgiFromPort' - The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. For the ICMP/ICMPv6 type number, use @-1@ to specify all types.
---
--- * 'asgiIPPermissions' - A set of IP permissions. Can be used to specify multiple rules in a single command.
---
--- * 'asgiIPProtocol' - The IP protocol name (@tcp@ , @udp@ , @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers> ). (VPC only) Use @-1@ to specify all protocols. If you specify @-1@ , or a protocol number other than @tcp@ , @udp@ , @icmp@ , or @58@ (ICMPv6), traffic on all ports is allowed, regardless of any ports you specify. For @tcp@ , @udp@ , and @icmp@ , you must specify a port range. For protocol @58@ (ICMPv6), you can optionally specify a port range; if you don't, traffic for all types and codes is allowed.
---
--- * 'asgiGroupId' - The ID of the security group. Required for a nondefault VPC.
---
--- * 'asgiToPort' - The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code number. For the ICMP/ICMPv6 code number, use @-1@ to specify all codes.
---
--- * 'asgiCidrIP' - The CIDR IPv4 address range. You can't specify this parameter when specifying a source security group.
---
--- * 'asgiSourceSecurityGroupOwnerId' - [EC2-Classic] The AWS account number for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead.
---
--- * 'asgiGroupName' - [EC2-Classic, default VPC] The name of the security group.
---
--- * 'asgiSourceSecurityGroupName' - [EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. For EC2-VPC, the source security group must be in the same VPC.
---
--- * 'asgiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-authorizeSecurityGroupIngress
-    :: AuthorizeSecurityGroupIngress
-authorizeSecurityGroupIngress =
-    AuthorizeSecurityGroupIngress'
-    { _asgiFromPort = Nothing
-    , _asgiIPPermissions = Nothing
-    , _asgiIPProtocol = Nothing
-    , _asgiGroupId = Nothing
-    , _asgiToPort = Nothing
-    , _asgiCidrIP = Nothing
-    , _asgiSourceSecurityGroupOwnerId = Nothing
-    , _asgiGroupName = Nothing
-    , _asgiSourceSecurityGroupName = Nothing
-    , _asgiDryRun = Nothing
-    }
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. For the ICMP/ICMPv6 type number, use @-1@ to specify all types.
-asgiFromPort :: Lens' AuthorizeSecurityGroupIngress (Maybe Int)
-asgiFromPort = lens _asgiFromPort (\ s a -> s{_asgiFromPort = a});
-
--- | A set of IP permissions. Can be used to specify multiple rules in a single command.
-asgiIPPermissions :: Lens' AuthorizeSecurityGroupIngress [IPPermission]
-asgiIPPermissions = lens _asgiIPPermissions (\ s a -> s{_asgiIPPermissions = a}) . _Default . _Coerce;
-
--- | The IP protocol name (@tcp@ , @udp@ , @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers> ). (VPC only) Use @-1@ to specify all protocols. If you specify @-1@ , or a protocol number other than @tcp@ , @udp@ , @icmp@ , or @58@ (ICMPv6), traffic on all ports is allowed, regardless of any ports you specify. For @tcp@ , @udp@ , and @icmp@ , you must specify a port range. For protocol @58@ (ICMPv6), you can optionally specify a port range; if you don't, traffic for all types and codes is allowed.
-asgiIPProtocol :: Lens' AuthorizeSecurityGroupIngress (Maybe Text)
-asgiIPProtocol = lens _asgiIPProtocol (\ s a -> s{_asgiIPProtocol = a});
-
--- | The ID of the security group. Required for a nondefault VPC.
-asgiGroupId :: Lens' AuthorizeSecurityGroupIngress (Maybe Text)
-asgiGroupId = lens _asgiGroupId (\ s a -> s{_asgiGroupId = a});
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code number. For the ICMP/ICMPv6 code number, use @-1@ to specify all codes.
-asgiToPort :: Lens' AuthorizeSecurityGroupIngress (Maybe Int)
-asgiToPort = lens _asgiToPort (\ s a -> s{_asgiToPort = a});
-
--- | The CIDR IPv4 address range. You can't specify this parameter when specifying a source security group.
-asgiCidrIP :: Lens' AuthorizeSecurityGroupIngress (Maybe Text)
-asgiCidrIP = lens _asgiCidrIP (\ s a -> s{_asgiCidrIP = a});
-
--- | [EC2-Classic] The AWS account number for the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead.
-asgiSourceSecurityGroupOwnerId :: Lens' AuthorizeSecurityGroupIngress (Maybe Text)
-asgiSourceSecurityGroupOwnerId = lens _asgiSourceSecurityGroupOwnerId (\ s a -> s{_asgiSourceSecurityGroupOwnerId = a});
-
--- | [EC2-Classic, default VPC] The name of the security group.
-asgiGroupName :: Lens' AuthorizeSecurityGroupIngress (Maybe Text)
-asgiGroupName = lens _asgiGroupName (\ s a -> s{_asgiGroupName = a});
-
--- | [EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. Creates rules that grant full ICMP, UDP, and TCP access. To create a rule with a specific IP protocol and port range, use a set of IP permissions instead. For EC2-VPC, the source security group must be in the same VPC.
-asgiSourceSecurityGroupName :: Lens' AuthorizeSecurityGroupIngress (Maybe Text)
-asgiSourceSecurityGroupName = lens _asgiSourceSecurityGroupName (\ s a -> s{_asgiSourceSecurityGroupName = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-asgiDryRun :: Lens' AuthorizeSecurityGroupIngress (Maybe Bool)
-asgiDryRun = lens _asgiDryRun (\ s a -> s{_asgiDryRun = a});
-
-instance AWSRequest AuthorizeSecurityGroupIngress
-         where
-        type Rs AuthorizeSecurityGroupIngress =
-             AuthorizeSecurityGroupIngressResponse
-        request = postQuery ec2
-        response
-          = receiveNull AuthorizeSecurityGroupIngressResponse'
-
-instance Hashable AuthorizeSecurityGroupIngress
-
-instance NFData AuthorizeSecurityGroupIngress
-
-instance ToHeaders AuthorizeSecurityGroupIngress
-         where
-        toHeaders = const mempty
-
-instance ToPath AuthorizeSecurityGroupIngress where
-        toPath = const "/"
-
-instance ToQuery AuthorizeSecurityGroupIngress where
-        toQuery AuthorizeSecurityGroupIngress'{..}
-          = mconcat
-              ["Action" =:
-                 ("AuthorizeSecurityGroupIngress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "FromPort" =: _asgiFromPort,
-               toQuery
-                 (toQueryList "IpPermissions" <$> _asgiIPPermissions),
-               "IpProtocol" =: _asgiIPProtocol,
-               "GroupId" =: _asgiGroupId, "ToPort" =: _asgiToPort,
-               "CidrIp" =: _asgiCidrIP,
-               "SourceSecurityGroupOwnerId" =:
-                 _asgiSourceSecurityGroupOwnerId,
-               "GroupName" =: _asgiGroupName,
-               "SourceSecurityGroupName" =:
-                 _asgiSourceSecurityGroupName,
-               "DryRun" =: _asgiDryRun]
-
--- | /See:/ 'authorizeSecurityGroupIngressResponse' smart constructor.
-data AuthorizeSecurityGroupIngressResponse =
-    AuthorizeSecurityGroupIngressResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AuthorizeSecurityGroupIngressResponse' with the minimum fields required to make a request.
---
-authorizeSecurityGroupIngressResponse
-    :: AuthorizeSecurityGroupIngressResponse
-authorizeSecurityGroupIngressResponse = AuthorizeSecurityGroupIngressResponse'
-
-instance NFData AuthorizeSecurityGroupIngressResponse
diff --git a/gen/Network/AWS/EC2/BundleInstance.hs b/gen/Network/AWS/EC2/BundleInstance.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/BundleInstance.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.BundleInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Bundles an Amazon instance store-backed Windows instance.
---
---
--- During bundling, only the root device volume (C:\) is bundled. Data on other instance store volumes is not preserved.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_InstanceStoreBacked_WinAMI.html Creating an Instance Store-Backed Windows AMI> .
---
-module Network.AWS.EC2.BundleInstance
-    (
-    -- * Creating a Request
-      bundleInstance
-    , BundleInstance
-    -- * Request Lenses
-    , biDryRun
-    , biInstanceId
-    , biStorage
-
-    -- * Destructuring the Response
-    , bundleInstanceResponse
-    , BundleInstanceResponse
-    -- * Response Lenses
-    , birsBundleTask
-    , birsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for BundleInstance.
---
---
---
--- /See:/ 'bundleInstance' smart constructor.
-data BundleInstance = BundleInstance'
-    { _biDryRun     :: !(Maybe Bool)
-    , _biInstanceId :: !Text
-    , _biStorage    :: !Storage
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BundleInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'biDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'biInstanceId' - The ID of the instance to bundle. Type: String Default: None Required: Yes
---
--- * 'biStorage' - The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.
-bundleInstance
-    :: Text -- ^ 'biInstanceId'
-    -> Storage -- ^ 'biStorage'
-    -> BundleInstance
-bundleInstance pInstanceId_ pStorage_ =
-    BundleInstance'
-    { _biDryRun = Nothing
-    , _biInstanceId = pInstanceId_
-    , _biStorage = pStorage_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-biDryRun :: Lens' BundleInstance (Maybe Bool)
-biDryRun = lens _biDryRun (\ s a -> s{_biDryRun = a});
-
--- | The ID of the instance to bundle. Type: String Default: None Required: Yes
-biInstanceId :: Lens' BundleInstance Text
-biInstanceId = lens _biInstanceId (\ s a -> s{_biInstanceId = a});
-
--- | The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.
-biStorage :: Lens' BundleInstance Storage
-biStorage = lens _biStorage (\ s a -> s{_biStorage = a});
-
-instance AWSRequest BundleInstance where
-        type Rs BundleInstance = BundleInstanceResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 BundleInstanceResponse' <$>
-                   (x .@? "bundleInstanceTask") <*> (pure (fromEnum s)))
-
-instance Hashable BundleInstance
-
-instance NFData BundleInstance
-
-instance ToHeaders BundleInstance where
-        toHeaders = const mempty
-
-instance ToPath BundleInstance where
-        toPath = const "/"
-
-instance ToQuery BundleInstance where
-        toQuery BundleInstance'{..}
-          = mconcat
-              ["Action" =: ("BundleInstance" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _biDryRun, "InstanceId" =: _biInstanceId,
-               "Storage" =: _biStorage]
-
--- | Contains the output of BundleInstance.
---
---
---
--- /See:/ 'bundleInstanceResponse' smart constructor.
-data BundleInstanceResponse = BundleInstanceResponse'
-    { _birsBundleTask     :: !(Maybe BundleTask)
-    , _birsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BundleInstanceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'birsBundleTask' - Information about the bundle task.
---
--- * 'birsResponseStatus' - -- | The response status code.
-bundleInstanceResponse
-    :: Int -- ^ 'birsResponseStatus'
-    -> BundleInstanceResponse
-bundleInstanceResponse pResponseStatus_ =
-    BundleInstanceResponse'
-    { _birsBundleTask = Nothing
-    , _birsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the bundle task.
-birsBundleTask :: Lens' BundleInstanceResponse (Maybe BundleTask)
-birsBundleTask = lens _birsBundleTask (\ s a -> s{_birsBundleTask = a});
-
--- | -- | The response status code.
-birsResponseStatus :: Lens' BundleInstanceResponse Int
-birsResponseStatus = lens _birsResponseStatus (\ s a -> s{_birsResponseStatus = a});
-
-instance NFData BundleInstanceResponse
diff --git a/gen/Network/AWS/EC2/CancelBundleTask.hs b/gen/Network/AWS/EC2/CancelBundleTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelBundleTask.hs
+++ /dev/null
@@ -1,142 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelBundleTask
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels a bundling operation for an instance store-backed Windows instance.
---
---
-module Network.AWS.EC2.CancelBundleTask
-    (
-    -- * Creating a Request
-      cancelBundleTask
-    , CancelBundleTask
-    -- * Request Lenses
-    , cbtDryRun
-    , cbtBundleId
-
-    -- * Destructuring the Response
-    , cancelBundleTaskResponse
-    , CancelBundleTaskResponse
-    -- * Response Lenses
-    , cbtrsBundleTask
-    , cbtrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelBundleTask.
---
---
---
--- /See:/ 'cancelBundleTask' smart constructor.
-data CancelBundleTask = CancelBundleTask'
-    { _cbtDryRun   :: !(Maybe Bool)
-    , _cbtBundleId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelBundleTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cbtDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cbtBundleId' - The ID of the bundle task.
-cancelBundleTask
-    :: Text -- ^ 'cbtBundleId'
-    -> CancelBundleTask
-cancelBundleTask pBundleId_ =
-    CancelBundleTask'
-    { _cbtDryRun = Nothing
-    , _cbtBundleId = pBundleId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cbtDryRun :: Lens' CancelBundleTask (Maybe Bool)
-cbtDryRun = lens _cbtDryRun (\ s a -> s{_cbtDryRun = a});
-
--- | The ID of the bundle task.
-cbtBundleId :: Lens' CancelBundleTask Text
-cbtBundleId = lens _cbtBundleId (\ s a -> s{_cbtBundleId = a});
-
-instance AWSRequest CancelBundleTask where
-        type Rs CancelBundleTask = CancelBundleTaskResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CancelBundleTaskResponse' <$>
-                   (x .@? "bundleInstanceTask") <*> (pure (fromEnum s)))
-
-instance Hashable CancelBundleTask
-
-instance NFData CancelBundleTask
-
-instance ToHeaders CancelBundleTask where
-        toHeaders = const mempty
-
-instance ToPath CancelBundleTask where
-        toPath = const "/"
-
-instance ToQuery CancelBundleTask where
-        toQuery CancelBundleTask'{..}
-          = mconcat
-              ["Action" =: ("CancelBundleTask" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cbtDryRun, "BundleId" =: _cbtBundleId]
-
--- | Contains the output of CancelBundleTask.
---
---
---
--- /See:/ 'cancelBundleTaskResponse' smart constructor.
-data CancelBundleTaskResponse = CancelBundleTaskResponse'
-    { _cbtrsBundleTask     :: !(Maybe BundleTask)
-    , _cbtrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelBundleTaskResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cbtrsBundleTask' - Information about the bundle task.
---
--- * 'cbtrsResponseStatus' - -- | The response status code.
-cancelBundleTaskResponse
-    :: Int -- ^ 'cbtrsResponseStatus'
-    -> CancelBundleTaskResponse
-cancelBundleTaskResponse pResponseStatus_ =
-    CancelBundleTaskResponse'
-    { _cbtrsBundleTask = Nothing
-    , _cbtrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the bundle task.
-cbtrsBundleTask :: Lens' CancelBundleTaskResponse (Maybe BundleTask)
-cbtrsBundleTask = lens _cbtrsBundleTask (\ s a -> s{_cbtrsBundleTask = a});
-
--- | -- | The response status code.
-cbtrsResponseStatus :: Lens' CancelBundleTaskResponse Int
-cbtrsResponseStatus = lens _cbtrsResponseStatus (\ s a -> s{_cbtrsResponseStatus = a});
-
-instance NFData CancelBundleTaskResponse
diff --git a/gen/Network/AWS/EC2/CancelConversionTask.hs b/gen/Network/AWS/EC2/CancelConversionTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelConversionTask.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelConversionTask
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels an active conversion task. The task can be the import of an instance or volume. The action removes all artifacts of the conversion, including a partially uploaded volume or instance. If the conversion is complete or is in the process of transferring the final disk image, the command fails and returns an exception.
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html Importing a Virtual Machine Using the Amazon EC2 CLI> .
---
-module Network.AWS.EC2.CancelConversionTask
-    (
-    -- * Creating a Request
-      cancelConversionTask
-    , CancelConversionTask
-    -- * Request Lenses
-    , cctReasonMessage
-    , cctDryRun
-    , cctConversionTaskId
-
-    -- * Destructuring the Response
-    , cancelConversionTaskResponse
-    , CancelConversionTaskResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelConversionTask.
---
---
---
--- /See:/ 'cancelConversionTask' smart constructor.
-data CancelConversionTask = CancelConversionTask'
-    { _cctReasonMessage    :: !(Maybe Text)
-    , _cctDryRun           :: !(Maybe Bool)
-    , _cctConversionTaskId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelConversionTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cctReasonMessage' - The reason for canceling the conversion task.
---
--- * 'cctDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cctConversionTaskId' - The ID of the conversion task.
-cancelConversionTask
-    :: Text -- ^ 'cctConversionTaskId'
-    -> CancelConversionTask
-cancelConversionTask pConversionTaskId_ =
-    CancelConversionTask'
-    { _cctReasonMessage = Nothing
-    , _cctDryRun = Nothing
-    , _cctConversionTaskId = pConversionTaskId_
-    }
-
--- | The reason for canceling the conversion task.
-cctReasonMessage :: Lens' CancelConversionTask (Maybe Text)
-cctReasonMessage = lens _cctReasonMessage (\ s a -> s{_cctReasonMessage = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cctDryRun :: Lens' CancelConversionTask (Maybe Bool)
-cctDryRun = lens _cctDryRun (\ s a -> s{_cctDryRun = a});
-
--- | The ID of the conversion task.
-cctConversionTaskId :: Lens' CancelConversionTask Text
-cctConversionTaskId = lens _cctConversionTaskId (\ s a -> s{_cctConversionTaskId = a});
-
-instance AWSRequest CancelConversionTask where
-        type Rs CancelConversionTask =
-             CancelConversionTaskResponse
-        request = postQuery ec2
-        response = receiveNull CancelConversionTaskResponse'
-
-instance Hashable CancelConversionTask
-
-instance NFData CancelConversionTask
-
-instance ToHeaders CancelConversionTask where
-        toHeaders = const mempty
-
-instance ToPath CancelConversionTask where
-        toPath = const "/"
-
-instance ToQuery CancelConversionTask where
-        toQuery CancelConversionTask'{..}
-          = mconcat
-              ["Action" =: ("CancelConversionTask" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ReasonMessage" =: _cctReasonMessage,
-               "DryRun" =: _cctDryRun,
-               "ConversionTaskId" =: _cctConversionTaskId]
-
--- | /See:/ 'cancelConversionTaskResponse' smart constructor.
-data CancelConversionTaskResponse =
-    CancelConversionTaskResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelConversionTaskResponse' with the minimum fields required to make a request.
---
-cancelConversionTaskResponse
-    :: CancelConversionTaskResponse
-cancelConversionTaskResponse = CancelConversionTaskResponse'
-
-instance NFData CancelConversionTaskResponse
diff --git a/gen/Network/AWS/EC2/CancelExportTask.hs b/gen/Network/AWS/EC2/CancelExportTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelExportTask.hs
+++ /dev/null
@@ -1,103 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelExportTask
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels an active export task. The request removes all artifacts of the export, including any partially-created Amazon S3 objects. If the export task is complete or is in the process of transferring the final disk image, the command fails and returns an error.
---
---
-module Network.AWS.EC2.CancelExportTask
-    (
-    -- * Creating a Request
-      cancelExportTask
-    , CancelExportTask
-    -- * Request Lenses
-    , cetExportTaskId
-
-    -- * Destructuring the Response
-    , cancelExportTaskResponse
-    , CancelExportTaskResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelExportTask.
---
---
---
--- /See:/ 'cancelExportTask' smart constructor.
-newtype CancelExportTask = CancelExportTask'
-    { _cetExportTaskId :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cetExportTaskId' - The ID of the export task. This is the ID returned by @CreateInstanceExportTask@ .
-cancelExportTask
-    :: Text -- ^ 'cetExportTaskId'
-    -> CancelExportTask
-cancelExportTask pExportTaskId_ =
-    CancelExportTask'
-    { _cetExportTaskId = pExportTaskId_
-    }
-
--- | The ID of the export task. This is the ID returned by @CreateInstanceExportTask@ .
-cetExportTaskId :: Lens' CancelExportTask Text
-cetExportTaskId = lens _cetExportTaskId (\ s a -> s{_cetExportTaskId = a});
-
-instance AWSRequest CancelExportTask where
-        type Rs CancelExportTask = CancelExportTaskResponse
-        request = postQuery ec2
-        response = receiveNull CancelExportTaskResponse'
-
-instance Hashable CancelExportTask
-
-instance NFData CancelExportTask
-
-instance ToHeaders CancelExportTask where
-        toHeaders = const mempty
-
-instance ToPath CancelExportTask where
-        toPath = const "/"
-
-instance ToQuery CancelExportTask where
-        toQuery CancelExportTask'{..}
-          = mconcat
-              ["Action" =: ("CancelExportTask" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ExportTaskId" =: _cetExportTaskId]
-
--- | /See:/ 'cancelExportTaskResponse' smart constructor.
-data CancelExportTaskResponse =
-    CancelExportTaskResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelExportTaskResponse' with the minimum fields required to make a request.
---
-cancelExportTaskResponse
-    :: CancelExportTaskResponse
-cancelExportTaskResponse = CancelExportTaskResponse'
-
-instance NFData CancelExportTaskResponse
diff --git a/gen/Network/AWS/EC2/CancelImportTask.hs b/gen/Network/AWS/EC2/CancelImportTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelImportTask.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelImportTask
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels an in-process import virtual machine or import snapshot task.
---
---
-module Network.AWS.EC2.CancelImportTask
-    (
-    -- * Creating a Request
-      cancelImportTask
-    , CancelImportTask
-    -- * Request Lenses
-    , citCancelReason
-    , citImportTaskId
-    , citDryRun
-
-    -- * Destructuring the Response
-    , cancelImportTaskResponse
-    , CancelImportTaskResponse
-    -- * Response Lenses
-    , citrsState
-    , citrsImportTaskId
-    , citrsPreviousState
-    , citrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelImportTask.
---
---
---
--- /See:/ 'cancelImportTask' smart constructor.
-data CancelImportTask = CancelImportTask'
-    { _citCancelReason :: !(Maybe Text)
-    , _citImportTaskId :: !(Maybe Text)
-    , _citDryRun       :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelImportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'citCancelReason' - The reason for canceling the task.
---
--- * 'citImportTaskId' - The ID of the import image or import snapshot task to be canceled.
---
--- * 'citDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cancelImportTask
-    :: CancelImportTask
-cancelImportTask =
-    CancelImportTask'
-    { _citCancelReason = Nothing
-    , _citImportTaskId = Nothing
-    , _citDryRun = Nothing
-    }
-
--- | The reason for canceling the task.
-citCancelReason :: Lens' CancelImportTask (Maybe Text)
-citCancelReason = lens _citCancelReason (\ s a -> s{_citCancelReason = a});
-
--- | The ID of the import image or import snapshot task to be canceled.
-citImportTaskId :: Lens' CancelImportTask (Maybe Text)
-citImportTaskId = lens _citImportTaskId (\ s a -> s{_citImportTaskId = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-citDryRun :: Lens' CancelImportTask (Maybe Bool)
-citDryRun = lens _citDryRun (\ s a -> s{_citDryRun = a});
-
-instance AWSRequest CancelImportTask where
-        type Rs CancelImportTask = CancelImportTaskResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CancelImportTaskResponse' <$>
-                   (x .@? "state") <*> (x .@? "importTaskId") <*>
-                     (x .@? "previousState")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CancelImportTask
-
-instance NFData CancelImportTask
-
-instance ToHeaders CancelImportTask where
-        toHeaders = const mempty
-
-instance ToPath CancelImportTask where
-        toPath = const "/"
-
-instance ToQuery CancelImportTask where
-        toQuery CancelImportTask'{..}
-          = mconcat
-              ["Action" =: ("CancelImportTask" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "CancelReason" =: _citCancelReason,
-               "ImportTaskId" =: _citImportTaskId,
-               "DryRun" =: _citDryRun]
-
--- | Contains the output for CancelImportTask.
---
---
---
--- /See:/ 'cancelImportTaskResponse' smart constructor.
-data CancelImportTaskResponse = CancelImportTaskResponse'
-    { _citrsState          :: !(Maybe Text)
-    , _citrsImportTaskId   :: !(Maybe Text)
-    , _citrsPreviousState  :: !(Maybe Text)
-    , _citrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelImportTaskResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'citrsState' - The current state of the task being canceled.
---
--- * 'citrsImportTaskId' - The ID of the task being canceled.
---
--- * 'citrsPreviousState' - The current state of the task being canceled.
---
--- * 'citrsResponseStatus' - -- | The response status code.
-cancelImportTaskResponse
-    :: Int -- ^ 'citrsResponseStatus'
-    -> CancelImportTaskResponse
-cancelImportTaskResponse pResponseStatus_ =
-    CancelImportTaskResponse'
-    { _citrsState = Nothing
-    , _citrsImportTaskId = Nothing
-    , _citrsPreviousState = Nothing
-    , _citrsResponseStatus = pResponseStatus_
-    }
-
--- | The current state of the task being canceled.
-citrsState :: Lens' CancelImportTaskResponse (Maybe Text)
-citrsState = lens _citrsState (\ s a -> s{_citrsState = a});
-
--- | The ID of the task being canceled.
-citrsImportTaskId :: Lens' CancelImportTaskResponse (Maybe Text)
-citrsImportTaskId = lens _citrsImportTaskId (\ s a -> s{_citrsImportTaskId = a});
-
--- | The current state of the task being canceled.
-citrsPreviousState :: Lens' CancelImportTaskResponse (Maybe Text)
-citrsPreviousState = lens _citrsPreviousState (\ s a -> s{_citrsPreviousState = a});
-
--- | -- | The response status code.
-citrsResponseStatus :: Lens' CancelImportTaskResponse Int
-citrsResponseStatus = lens _citrsResponseStatus (\ s a -> s{_citrsResponseStatus = a});
-
-instance NFData CancelImportTaskResponse
diff --git a/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs b/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs
+++ /dev/null
@@ -1,143 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelReservedInstancesListing
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels the specified Reserved Instance listing in the Reserved Instance Marketplace.
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CancelReservedInstancesListing
-    (
-    -- * Creating a Request
-      cancelReservedInstancesListing
-    , CancelReservedInstancesListing
-    -- * Request Lenses
-    , crilReservedInstancesListingId
-
-    -- * Destructuring the Response
-    , cancelReservedInstancesListingResponse
-    , CancelReservedInstancesListingResponse
-    -- * Response Lenses
-    , crilrsReservedInstancesListings
-    , crilrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelReservedInstancesListing.
---
---
---
--- /See:/ 'cancelReservedInstancesListing' smart constructor.
-newtype CancelReservedInstancesListing = CancelReservedInstancesListing'
-    { _crilReservedInstancesListingId :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelReservedInstancesListing' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crilReservedInstancesListingId' - The ID of the Reserved Instance listing.
-cancelReservedInstancesListing
-    :: Text -- ^ 'crilReservedInstancesListingId'
-    -> CancelReservedInstancesListing
-cancelReservedInstancesListing pReservedInstancesListingId_ =
-    CancelReservedInstancesListing'
-    { _crilReservedInstancesListingId = pReservedInstancesListingId_
-    }
-
--- | The ID of the Reserved Instance listing.
-crilReservedInstancesListingId :: Lens' CancelReservedInstancesListing Text
-crilReservedInstancesListingId = lens _crilReservedInstancesListingId (\ s a -> s{_crilReservedInstancesListingId = a});
-
-instance AWSRequest CancelReservedInstancesListing
-         where
-        type Rs CancelReservedInstancesListing =
-             CancelReservedInstancesListingResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CancelReservedInstancesListingResponse' <$>
-                   (x .@? "reservedInstancesListingsSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CancelReservedInstancesListing
-
-instance NFData CancelReservedInstancesListing
-
-instance ToHeaders CancelReservedInstancesListing
-         where
-        toHeaders = const mempty
-
-instance ToPath CancelReservedInstancesListing where
-        toPath = const "/"
-
-instance ToQuery CancelReservedInstancesListing where
-        toQuery CancelReservedInstancesListing'{..}
-          = mconcat
-              ["Action" =:
-                 ("CancelReservedInstancesListing" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ReservedInstancesListingId" =:
-                 _crilReservedInstancesListingId]
-
--- | Contains the output of CancelReservedInstancesListing.
---
---
---
--- /See:/ 'cancelReservedInstancesListingResponse' smart constructor.
-data CancelReservedInstancesListingResponse = CancelReservedInstancesListingResponse'
-    { _crilrsReservedInstancesListings :: !(Maybe [ReservedInstancesListing])
-    , _crilrsResponseStatus            :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelReservedInstancesListingResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crilrsReservedInstancesListings' - The Reserved Instance listing.
---
--- * 'crilrsResponseStatus' - -- | The response status code.
-cancelReservedInstancesListingResponse
-    :: Int -- ^ 'crilrsResponseStatus'
-    -> CancelReservedInstancesListingResponse
-cancelReservedInstancesListingResponse pResponseStatus_ =
-    CancelReservedInstancesListingResponse'
-    { _crilrsReservedInstancesListings = Nothing
-    , _crilrsResponseStatus = pResponseStatus_
-    }
-
--- | The Reserved Instance listing.
-crilrsReservedInstancesListings :: Lens' CancelReservedInstancesListingResponse [ReservedInstancesListing]
-crilrsReservedInstancesListings = lens _crilrsReservedInstancesListings (\ s a -> s{_crilrsReservedInstancesListings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-crilrsResponseStatus :: Lens' CancelReservedInstancesListingResponse Int
-crilrsResponseStatus = lens _crilrsResponseStatus (\ s a -> s{_crilrsResponseStatus = a});
-
-instance NFData
-         CancelReservedInstancesListingResponse
diff --git a/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs b/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelSpotFleetRequests
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels the specified Spot fleet requests.
---
---
--- After you cancel a Spot fleet request, the Spot fleet launches no new Spot instances. You must specify whether the Spot fleet should also terminate its Spot instances. If you terminate the instances, the Spot fleet request enters the @cancelled_terminating@ state. Otherwise, the Spot fleet request enters the @cancelled_running@ state and the instances continue to run until they are interrupted or you terminate them manually.
---
-module Network.AWS.EC2.CancelSpotFleetRequests
-    (
-    -- * Creating a Request
-      cancelSpotFleetRequests
-    , CancelSpotFleetRequests
-    -- * Request Lenses
-    , csfrDryRun
-    , csfrSpotFleetRequestIds
-    , csfrTerminateInstances
-
-    -- * Destructuring the Response
-    , cancelSpotFleetRequestsResponse
-    , CancelSpotFleetRequestsResponse
-    -- * Response Lenses
-    , csfrrsSuccessfulFleetRequests
-    , csfrrsUnsuccessfulFleetRequests
-    , csfrrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelSpotFleetRequests.
---
---
---
--- /See:/ 'cancelSpotFleetRequests' smart constructor.
-data CancelSpotFleetRequests = CancelSpotFleetRequests'
-    { _csfrDryRun              :: !(Maybe Bool)
-    , _csfrSpotFleetRequestIds :: ![Text]
-    , _csfrTerminateInstances  :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequests' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfrDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'csfrSpotFleetRequestIds' - The IDs of the Spot fleet requests.
---
--- * 'csfrTerminateInstances' - Indicates whether to terminate instances for a Spot fleet request if it is canceled successfully.
-cancelSpotFleetRequests
-    :: Bool -- ^ 'csfrTerminateInstances'
-    -> CancelSpotFleetRequests
-cancelSpotFleetRequests pTerminateInstances_ =
-    CancelSpotFleetRequests'
-    { _csfrDryRun = Nothing
-    , _csfrSpotFleetRequestIds = mempty
-    , _csfrTerminateInstances = pTerminateInstances_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-csfrDryRun :: Lens' CancelSpotFleetRequests (Maybe Bool)
-csfrDryRun = lens _csfrDryRun (\ s a -> s{_csfrDryRun = a});
-
--- | The IDs of the Spot fleet requests.
-csfrSpotFleetRequestIds :: Lens' CancelSpotFleetRequests [Text]
-csfrSpotFleetRequestIds = lens _csfrSpotFleetRequestIds (\ s a -> s{_csfrSpotFleetRequestIds = a}) . _Coerce;
-
--- | Indicates whether to terminate instances for a Spot fleet request if it is canceled successfully.
-csfrTerminateInstances :: Lens' CancelSpotFleetRequests Bool
-csfrTerminateInstances = lens _csfrTerminateInstances (\ s a -> s{_csfrTerminateInstances = a});
-
-instance AWSRequest CancelSpotFleetRequests where
-        type Rs CancelSpotFleetRequests =
-             CancelSpotFleetRequestsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CancelSpotFleetRequestsResponse' <$>
-                   (x .@? "successfulFleetRequestSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*>
-                     (x .@? "unsuccessfulFleetRequestSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CancelSpotFleetRequests
-
-instance NFData CancelSpotFleetRequests
-
-instance ToHeaders CancelSpotFleetRequests where
-        toHeaders = const mempty
-
-instance ToPath CancelSpotFleetRequests where
-        toPath = const "/"
-
-instance ToQuery CancelSpotFleetRequests where
-        toQuery CancelSpotFleetRequests'{..}
-          = mconcat
-              ["Action" =:
-                 ("CancelSpotFleetRequests" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _csfrDryRun,
-               toQueryList "SpotFleetRequestId"
-                 _csfrSpotFleetRequestIds,
-               "TerminateInstances" =: _csfrTerminateInstances]
-
--- | Contains the output of CancelSpotFleetRequests.
---
---
---
--- /See:/ 'cancelSpotFleetRequestsResponse' smart constructor.
-data CancelSpotFleetRequestsResponse = CancelSpotFleetRequestsResponse'
-    { _csfrrsSuccessfulFleetRequests   :: !(Maybe [CancelSpotFleetRequestsSuccessItem])
-    , _csfrrsUnsuccessfulFleetRequests :: !(Maybe [CancelSpotFleetRequestsErrorItem])
-    , _csfrrsResponseStatus            :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfrrsSuccessfulFleetRequests' - Information about the Spot fleet requests that are successfully canceled.
---
--- * 'csfrrsUnsuccessfulFleetRequests' - Information about the Spot fleet requests that are not successfully canceled.
---
--- * 'csfrrsResponseStatus' - -- | The response status code.
-cancelSpotFleetRequestsResponse
-    :: Int -- ^ 'csfrrsResponseStatus'
-    -> CancelSpotFleetRequestsResponse
-cancelSpotFleetRequestsResponse pResponseStatus_ =
-    CancelSpotFleetRequestsResponse'
-    { _csfrrsSuccessfulFleetRequests = Nothing
-    , _csfrrsUnsuccessfulFleetRequests = Nothing
-    , _csfrrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the Spot fleet requests that are successfully canceled.
-csfrrsSuccessfulFleetRequests :: Lens' CancelSpotFleetRequestsResponse [CancelSpotFleetRequestsSuccessItem]
-csfrrsSuccessfulFleetRequests = lens _csfrrsSuccessfulFleetRequests (\ s a -> s{_csfrrsSuccessfulFleetRequests = a}) . _Default . _Coerce;
-
--- | Information about the Spot fleet requests that are not successfully canceled.
-csfrrsUnsuccessfulFleetRequests :: Lens' CancelSpotFleetRequestsResponse [CancelSpotFleetRequestsErrorItem]
-csfrrsUnsuccessfulFleetRequests = lens _csfrrsUnsuccessfulFleetRequests (\ s a -> s{_csfrrsUnsuccessfulFleetRequests = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-csfrrsResponseStatus :: Lens' CancelSpotFleetRequestsResponse Int
-csfrrsResponseStatus = lens _csfrrsResponseStatus (\ s a -> s{_csfrrsResponseStatus = a});
-
-instance NFData CancelSpotFleetRequestsResponse
diff --git a/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs b/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs
+++ /dev/null
@@ -1,149 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CancelSpotInstanceRequests
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Cancels one or more Spot instance requests. Spot instances are instances that Amazon EC2 starts on your behalf when the bid price that you specify exceeds the current Spot price. Amazon EC2 periodically sets the Spot price based on available Spot instance capacity and current Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html Spot Instance Requests> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- /Important:/ Canceling a Spot instance request does not terminate running Spot instances associated with the request.
---
-module Network.AWS.EC2.CancelSpotInstanceRequests
-    (
-    -- * Creating a Request
-      cancelSpotInstanceRequests
-    , CancelSpotInstanceRequests
-    -- * Request Lenses
-    , csirDryRun
-    , csirSpotInstanceRequestIds
-
-    -- * Destructuring the Response
-    , cancelSpotInstanceRequestsResponse
-    , CancelSpotInstanceRequestsResponse
-    -- * Response Lenses
-    , csirrsCancelledSpotInstanceRequests
-    , csirrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CancelSpotInstanceRequests.
---
---
---
--- /See:/ 'cancelSpotInstanceRequests' smart constructor.
-data CancelSpotInstanceRequests = CancelSpotInstanceRequests'
-    { _csirDryRun                 :: !(Maybe Bool)
-    , _csirSpotInstanceRequestIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotInstanceRequests' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csirDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'csirSpotInstanceRequestIds' - One or more Spot instance request IDs.
-cancelSpotInstanceRequests
-    :: CancelSpotInstanceRequests
-cancelSpotInstanceRequests =
-    CancelSpotInstanceRequests'
-    { _csirDryRun = Nothing
-    , _csirSpotInstanceRequestIds = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-csirDryRun :: Lens' CancelSpotInstanceRequests (Maybe Bool)
-csirDryRun = lens _csirDryRun (\ s a -> s{_csirDryRun = a});
-
--- | One or more Spot instance request IDs.
-csirSpotInstanceRequestIds :: Lens' CancelSpotInstanceRequests [Text]
-csirSpotInstanceRequestIds = lens _csirSpotInstanceRequestIds (\ s a -> s{_csirSpotInstanceRequestIds = a}) . _Coerce;
-
-instance AWSRequest CancelSpotInstanceRequests where
-        type Rs CancelSpotInstanceRequests =
-             CancelSpotInstanceRequestsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CancelSpotInstanceRequestsResponse' <$>
-                   (x .@? "spotInstanceRequestSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CancelSpotInstanceRequests
-
-instance NFData CancelSpotInstanceRequests
-
-instance ToHeaders CancelSpotInstanceRequests where
-        toHeaders = const mempty
-
-instance ToPath CancelSpotInstanceRequests where
-        toPath = const "/"
-
-instance ToQuery CancelSpotInstanceRequests where
-        toQuery CancelSpotInstanceRequests'{..}
-          = mconcat
-              ["Action" =:
-                 ("CancelSpotInstanceRequests" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _csirDryRun,
-               toQueryList "SpotInstanceRequestId"
-                 _csirSpotInstanceRequestIds]
-
--- | Contains the output of CancelSpotInstanceRequests.
---
---
---
--- /See:/ 'cancelSpotInstanceRequestsResponse' smart constructor.
-data CancelSpotInstanceRequestsResponse = CancelSpotInstanceRequestsResponse'
-    { _csirrsCancelledSpotInstanceRequests :: !(Maybe [CancelledSpotInstanceRequest])
-    , _csirrsResponseStatus                :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotInstanceRequestsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csirrsCancelledSpotInstanceRequests' - One or more Spot instance requests.
---
--- * 'csirrsResponseStatus' - -- | The response status code.
-cancelSpotInstanceRequestsResponse
-    :: Int -- ^ 'csirrsResponseStatus'
-    -> CancelSpotInstanceRequestsResponse
-cancelSpotInstanceRequestsResponse pResponseStatus_ =
-    CancelSpotInstanceRequestsResponse'
-    { _csirrsCancelledSpotInstanceRequests = Nothing
-    , _csirrsResponseStatus = pResponseStatus_
-    }
-
--- | One or more Spot instance requests.
-csirrsCancelledSpotInstanceRequests :: Lens' CancelSpotInstanceRequestsResponse [CancelledSpotInstanceRequest]
-csirrsCancelledSpotInstanceRequests = lens _csirrsCancelledSpotInstanceRequests (\ s a -> s{_csirrsCancelledSpotInstanceRequests = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-csirrsResponseStatus :: Lens' CancelSpotInstanceRequestsResponse Int
-csirrsResponseStatus = lens _csirrsResponseStatus (\ s a -> s{_csirrsResponseStatus = a});
-
-instance NFData CancelSpotInstanceRequestsResponse
diff --git a/gen/Network/AWS/EC2/ConfirmProductInstance.hs b/gen/Network/AWS/EC2/ConfirmProductInstance.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ConfirmProductInstance.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ConfirmProductInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Determines whether a product code is associated with an instance. This action can only be used by the owner of the product code. It is useful when a product code owner needs to verify whether another user's instance is eligible for support.
---
---
-module Network.AWS.EC2.ConfirmProductInstance
-    (
-    -- * Creating a Request
-      confirmProductInstance
-    , ConfirmProductInstance
-    -- * Request Lenses
-    , cpiDryRun
-    , cpiProductCode
-    , cpiInstanceId
-
-    -- * Destructuring the Response
-    , confirmProductInstanceResponse
-    , ConfirmProductInstanceResponse
-    -- * Response Lenses
-    , cpirsReturn
-    , cpirsOwnerId
-    , cpirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ConfirmProductInstance.
---
---
---
--- /See:/ 'confirmProductInstance' smart constructor.
-data ConfirmProductInstance = ConfirmProductInstance'
-    { _cpiDryRun      :: !(Maybe Bool)
-    , _cpiProductCode :: !Text
-    , _cpiInstanceId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfirmProductInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cpiProductCode' - The product code. This must be a product code that you own.
---
--- * 'cpiInstanceId' - The ID of the instance.
-confirmProductInstance
-    :: Text -- ^ 'cpiProductCode'
-    -> Text -- ^ 'cpiInstanceId'
-    -> ConfirmProductInstance
-confirmProductInstance pProductCode_ pInstanceId_ =
-    ConfirmProductInstance'
-    { _cpiDryRun = Nothing
-    , _cpiProductCode = pProductCode_
-    , _cpiInstanceId = pInstanceId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cpiDryRun :: Lens' ConfirmProductInstance (Maybe Bool)
-cpiDryRun = lens _cpiDryRun (\ s a -> s{_cpiDryRun = a});
-
--- | The product code. This must be a product code that you own.
-cpiProductCode :: Lens' ConfirmProductInstance Text
-cpiProductCode = lens _cpiProductCode (\ s a -> s{_cpiProductCode = a});
-
--- | The ID of the instance.
-cpiInstanceId :: Lens' ConfirmProductInstance Text
-cpiInstanceId = lens _cpiInstanceId (\ s a -> s{_cpiInstanceId = a});
-
-instance AWSRequest ConfirmProductInstance where
-        type Rs ConfirmProductInstance =
-             ConfirmProductInstanceResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ConfirmProductInstanceResponse' <$>
-                   (x .@? "return") <*> (x .@? "ownerId") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable ConfirmProductInstance
-
-instance NFData ConfirmProductInstance
-
-instance ToHeaders ConfirmProductInstance where
-        toHeaders = const mempty
-
-instance ToPath ConfirmProductInstance where
-        toPath = const "/"
-
-instance ToQuery ConfirmProductInstance where
-        toQuery ConfirmProductInstance'{..}
-          = mconcat
-              ["Action" =:
-                 ("ConfirmProductInstance" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cpiDryRun,
-               "ProductCode" =: _cpiProductCode,
-               "InstanceId" =: _cpiInstanceId]
-
--- | Contains the output of ConfirmProductInstance.
---
---
---
--- /See:/ 'confirmProductInstanceResponse' smart constructor.
-data ConfirmProductInstanceResponse = ConfirmProductInstanceResponse'
-    { _cpirsReturn         :: !(Maybe Bool)
-    , _cpirsOwnerId        :: !(Maybe Text)
-    , _cpirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConfirmProductInstanceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpirsReturn' - The return value of the request. Returns @true@ if the specified product code is owned by the requester and associated with the specified instance.
---
--- * 'cpirsOwnerId' - The AWS account ID of the instance owner. This is only present if the product code is attached to the instance.
---
--- * 'cpirsResponseStatus' - -- | The response status code.
-confirmProductInstanceResponse
-    :: Int -- ^ 'cpirsResponseStatus'
-    -> ConfirmProductInstanceResponse
-confirmProductInstanceResponse pResponseStatus_ =
-    ConfirmProductInstanceResponse'
-    { _cpirsReturn = Nothing
-    , _cpirsOwnerId = Nothing
-    , _cpirsResponseStatus = pResponseStatus_
-    }
-
--- | The return value of the request. Returns @true@ if the specified product code is owned by the requester and associated with the specified instance.
-cpirsReturn :: Lens' ConfirmProductInstanceResponse (Maybe Bool)
-cpirsReturn = lens _cpirsReturn (\ s a -> s{_cpirsReturn = a});
-
--- | The AWS account ID of the instance owner. This is only present if the product code is attached to the instance.
-cpirsOwnerId :: Lens' ConfirmProductInstanceResponse (Maybe Text)
-cpirsOwnerId = lens _cpirsOwnerId (\ s a -> s{_cpirsOwnerId = a});
-
--- | -- | The response status code.
-cpirsResponseStatus :: Lens' ConfirmProductInstanceResponse Int
-cpirsResponseStatus = lens _cpirsResponseStatus (\ s a -> s{_cpirsResponseStatus = a});
-
-instance NFData ConfirmProductInstanceResponse
diff --git a/gen/Network/AWS/EC2/CopyImage.hs b/gen/Network/AWS/EC2/CopyImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CopyImage.hs
+++ /dev/null
@@ -1,207 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CopyImage
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Initiates the copy of an AMI from the specified source region to the current region. You specify the destination region by using its endpoint when making the request.
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html Copying AMIs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CopyImage
-    (
-    -- * Creating a Request
-      copyImage
-    , CopyImage
-    -- * Request Lenses
-    , ciClientToken
-    , ciEncrypted
-    , ciKMSKeyId
-    , ciDescription
-    , ciDryRun
-    , ciSourceRegion
-    , ciSourceImageId
-    , ciName
-
-    -- * Destructuring the Response
-    , copyImageResponse
-    , CopyImageResponse
-    -- * Response Lenses
-    , coprsImageId
-    , coprsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CopyImage.
---
---
---
--- /See:/ 'copyImage' smart constructor.
-data CopyImage = CopyImage'
-    { _ciClientToken   :: !(Maybe Text)
-    , _ciEncrypted     :: !(Maybe Bool)
-    , _ciKMSKeyId      :: !(Maybe Text)
-    , _ciDescription   :: !(Maybe Text)
-    , _ciDryRun        :: !(Maybe Bool)
-    , _ciSourceRegion  :: !Text
-    , _ciSourceImageId :: !Text
-    , _ciName          :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopyImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ciClientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'ciEncrypted' - Specifies whether the destination snapshots of the copied image should be encrypted. The default CMK for EBS is used unless a non-default AWS Key Management Service (AWS KMS) CMK is specified with @KmsKeyId@ . For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'ciKMSKeyId' - The full ARN of the AWS Key Management Service (AWS KMS) CMK to use when encrypting the snapshots of an image during a copy operation. 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. The ARN contains the @arn:aws:kms@ namespace, followed by the region of the CMK, the AWS account ID of the CMK owner, the @key@ namespace, and then the CMK ID. For example, arn:aws:kms:/us-east-1/ :/012345678910/ :key//abcd1234-a123-456a-a12b-a123b4cd56ef/ . The specified CMK must exist in the region that the snapshot is being copied to. If a @KmsKeyId@ is specified, the @Encrypted@ flag must also be set.
---
--- * 'ciDescription' - A description for the new AMI in the destination region.
---
--- * 'ciDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ciSourceRegion' - The name of the region that contains the AMI to copy.
---
--- * 'ciSourceImageId' - The ID of the AMI to copy.
---
--- * 'ciName' - The name of the new AMI in the destination region.
-copyImage
-    :: Text -- ^ 'ciSourceRegion'
-    -> Text -- ^ 'ciSourceImageId'
-    -> Text -- ^ 'ciName'
-    -> CopyImage
-copyImage pSourceRegion_ pSourceImageId_ pName_ =
-    CopyImage'
-    { _ciClientToken = Nothing
-    , _ciEncrypted = Nothing
-    , _ciKMSKeyId = Nothing
-    , _ciDescription = Nothing
-    , _ciDryRun = Nothing
-    , _ciSourceRegion = pSourceRegion_
-    , _ciSourceImageId = pSourceImageId_
-    , _ciName = pName_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
-ciClientToken :: Lens' CopyImage (Maybe Text)
-ciClientToken = lens _ciClientToken (\ s a -> s{_ciClientToken = a});
-
--- | Specifies whether the destination snapshots of the copied image should be encrypted. The default CMK for EBS is used unless a non-default AWS Key Management Service (AWS KMS) CMK is specified with @KmsKeyId@ . For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
-ciEncrypted :: Lens' CopyImage (Maybe Bool)
-ciEncrypted = lens _ciEncrypted (\ s a -> s{_ciEncrypted = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) CMK to use when encrypting the snapshots of an image during a copy operation. 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. The ARN contains the @arn:aws:kms@ namespace, followed by the region of the CMK, the AWS account ID of the CMK owner, the @key@ namespace, and then the CMK ID. For example, arn:aws:kms:/us-east-1/ :/012345678910/ :key//abcd1234-a123-456a-a12b-a123b4cd56ef/ . The specified CMK must exist in the region that the snapshot is being copied to. If a @KmsKeyId@ is specified, the @Encrypted@ flag must also be set.
-ciKMSKeyId :: Lens' CopyImage (Maybe Text)
-ciKMSKeyId = lens _ciKMSKeyId (\ s a -> s{_ciKMSKeyId = a});
-
--- | A description for the new AMI in the destination region.
-ciDescription :: Lens' CopyImage (Maybe Text)
-ciDescription = lens _ciDescription (\ s a -> s{_ciDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ciDryRun :: Lens' CopyImage (Maybe Bool)
-ciDryRun = lens _ciDryRun (\ s a -> s{_ciDryRun = a});
-
--- | The name of the region that contains the AMI to copy.
-ciSourceRegion :: Lens' CopyImage Text
-ciSourceRegion = lens _ciSourceRegion (\ s a -> s{_ciSourceRegion = a});
-
--- | The ID of the AMI to copy.
-ciSourceImageId :: Lens' CopyImage Text
-ciSourceImageId = lens _ciSourceImageId (\ s a -> s{_ciSourceImageId = a});
-
--- | The name of the new AMI in the destination region.
-ciName :: Lens' CopyImage Text
-ciName = lens _ciName (\ s a -> s{_ciName = a});
-
-instance AWSRequest CopyImage where
-        type Rs CopyImage = CopyImageResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CopyImageResponse' <$>
-                   (x .@? "imageId") <*> (pure (fromEnum s)))
-
-instance Hashable CopyImage
-
-instance NFData CopyImage
-
-instance ToHeaders CopyImage where
-        toHeaders = const mempty
-
-instance ToPath CopyImage where
-        toPath = const "/"
-
-instance ToQuery CopyImage where
-        toQuery CopyImage'{..}
-          = mconcat
-              ["Action" =: ("CopyImage" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _ciClientToken,
-               "Encrypted" =: _ciEncrypted,
-               "KmsKeyId" =: _ciKMSKeyId,
-               "Description" =: _ciDescription,
-               "DryRun" =: _ciDryRun,
-               "SourceRegion" =: _ciSourceRegion,
-               "SourceImageId" =: _ciSourceImageId,
-               "Name" =: _ciName]
-
--- | Contains the output of CopyImage.
---
---
---
--- /See:/ 'copyImageResponse' smart constructor.
-data CopyImageResponse = CopyImageResponse'
-    { _coprsImageId        :: !(Maybe Text)
-    , _coprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopyImageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'coprsImageId' - The ID of the new AMI.
---
--- * 'coprsResponseStatus' - -- | The response status code.
-copyImageResponse
-    :: Int -- ^ 'coprsResponseStatus'
-    -> CopyImageResponse
-copyImageResponse pResponseStatus_ =
-    CopyImageResponse'
-    { _coprsImageId = Nothing
-    , _coprsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the new AMI.
-coprsImageId :: Lens' CopyImageResponse (Maybe Text)
-coprsImageId = lens _coprsImageId (\ s a -> s{_coprsImageId = a});
-
--- | -- | The response status code.
-coprsResponseStatus :: Lens' CopyImageResponse Int
-coprsResponseStatus = lens _coprsResponseStatus (\ s a -> s{_coprsResponseStatus = a});
-
-instance NFData CopyImageResponse
diff --git a/gen/Network/AWS/EC2/CopySnapshot.hs b/gen/Network/AWS/EC2/CopySnapshot.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CopySnapshot.hs
+++ /dev/null
@@ -1,208 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CopySnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can copy the snapshot within the same region or from one region to another. You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs). The snapshot is copied to the regional endpoint that you send the HTTP request to.
---
---
--- Copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted snapshots remain unencrypted, unless the @Encrypted@ flag is specified during the snapshot copy operation. By default, encrypted snapshot copies use the default AWS Key Management Service (AWS KMS) customer master key (CMK); however, you can specify a non-default CMK with the @KmsKeyId@ parameter.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html Copying an Amazon EBS Snapshot> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CopySnapshot
-    (
-    -- * Creating a Request
-      copySnapshot
-    , CopySnapshot
-    -- * Request Lenses
-    , csPresignedURL
-    , csEncrypted
-    , csDestinationRegion
-    , csKMSKeyId
-    , csDescription
-    , csDryRun
-    , csSourceRegion
-    , csSourceSnapshotId
-
-    -- * Destructuring the Response
-    , copySnapshotResponse
-    , CopySnapshotResponse
-    -- * Response Lenses
-    , csrsSnapshotId
-    , csrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CopySnapshot.
---
---
---
--- /See:/ 'copySnapshot' smart constructor.
-data CopySnapshot = CopySnapshot'
-    { _csPresignedURL      :: !(Maybe Text)
-    , _csEncrypted         :: !(Maybe Bool)
-    , _csDestinationRegion :: !(Maybe Text)
-    , _csKMSKeyId          :: !(Maybe Text)
-    , _csDescription       :: !(Maybe Text)
-    , _csDryRun            :: !(Maybe Bool)
-    , _csSourceRegion      :: !Text
-    , _csSourceSnapshotId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopySnapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csPresignedURL' - The pre-signed URL that facilitates copying an encrypted snapshot. This parameter is only required when copying an encrypted snapshot with the Amazon EC2 Query API; it is available as an optional parameter in all other cases. The @PresignedUrl@ should use the snapshot source endpoint, the @CopySnapshot@ action, and include the @SourceRegion@ , @SourceSnapshotId@ , and @DestinationRegion@ parameters. The @PresignedUrl@ must be signed using AWS Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in <http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html Authenticating Requests by Using Query Parameters (AWS Signature Version 4)> in the /Amazon Simple Storage Service API Reference/ . An invalid or improperly signed @PresignedUrl@ will cause the copy operation to fail asynchronously, and the snapshot will move to an @error@ state.
---
--- * 'csEncrypted' - Specifies whether the destination snapshot should be encrypted. You can encrypt a copy of an unencrypted snapshot using this flag, but you cannot use it to create an unencrypted copy from an encrypted snapshot. Your default CMK for EBS is used unless a non-default AWS Key Management Service (AWS KMS) CMK is specified with @KmsKeyId@ . For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'csDestinationRegion' - The destination region to use in the @PresignedUrl@ parameter of a snapshot copy operation. This parameter is only valid for specifying the destination region in a @PresignedUrl@ parameter, where it is required.
---
--- * 'csKMSKeyId' - The full ARN of the AWS Key Management Service (AWS KMS) CMK to use when creating the snapshot copy. 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. The ARN contains the @arn:aws:kms@ namespace, followed by the region of the CMK, the AWS account ID of the CMK owner, the @key@ namespace, and then the CMK ID. For example, arn:aws:kms:/us-east-1/ :/012345678910/ :key//abcd1234-a123-456a-a12b-a123b4cd56ef/ . The specified CMK must exist in the region that the snapshot is being copied to. If a @KmsKeyId@ is specified, the @Encrypted@ flag must also be set.
---
--- * 'csDescription' - A description for the EBS snapshot.
---
--- * 'csDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'csSourceRegion' - The ID of the region that contains the snapshot to be copied.
---
--- * 'csSourceSnapshotId' - The ID of the EBS snapshot to copy.
-copySnapshot
-    :: Text -- ^ 'csSourceRegion'
-    -> Text -- ^ 'csSourceSnapshotId'
-    -> CopySnapshot
-copySnapshot pSourceRegion_ pSourceSnapshotId_ =
-    CopySnapshot'
-    { _csPresignedURL = Nothing
-    , _csEncrypted = Nothing
-    , _csDestinationRegion = Nothing
-    , _csKMSKeyId = Nothing
-    , _csDescription = Nothing
-    , _csDryRun = Nothing
-    , _csSourceRegion = pSourceRegion_
-    , _csSourceSnapshotId = pSourceSnapshotId_
-    }
-
--- | The pre-signed URL that facilitates copying an encrypted snapshot. This parameter is only required when copying an encrypted snapshot with the Amazon EC2 Query API; it is available as an optional parameter in all other cases. The @PresignedUrl@ should use the snapshot source endpoint, the @CopySnapshot@ action, and include the @SourceRegion@ , @SourceSnapshotId@ , and @DestinationRegion@ parameters. The @PresignedUrl@ must be signed using AWS Signature Version 4. Because EBS snapshots are stored in Amazon S3, the signing algorithm for this parameter uses the same logic that is described in <http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html Authenticating Requests by Using Query Parameters (AWS Signature Version 4)> in the /Amazon Simple Storage Service API Reference/ . An invalid or improperly signed @PresignedUrl@ will cause the copy operation to fail asynchronously, and the snapshot will move to an @error@ state.
-csPresignedURL :: Lens' CopySnapshot (Maybe Text)
-csPresignedURL = lens _csPresignedURL (\ s a -> s{_csPresignedURL = a});
-
--- | Specifies whether the destination snapshot should be encrypted. You can encrypt a copy of an unencrypted snapshot using this flag, but you cannot use it to create an unencrypted copy from an encrypted snapshot. Your default CMK for EBS is used unless a non-default AWS Key Management Service (AWS KMS) CMK is specified with @KmsKeyId@ . For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
-csEncrypted :: Lens' CopySnapshot (Maybe Bool)
-csEncrypted = lens _csEncrypted (\ s a -> s{_csEncrypted = a});
-
--- | The destination region to use in the @PresignedUrl@ parameter of a snapshot copy operation. This parameter is only valid for specifying the destination region in a @PresignedUrl@ parameter, where it is required.
-csDestinationRegion :: Lens' CopySnapshot (Maybe Text)
-csDestinationRegion = lens _csDestinationRegion (\ s a -> s{_csDestinationRegion = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) CMK to use when creating the snapshot copy. 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. The ARN contains the @arn:aws:kms@ namespace, followed by the region of the CMK, the AWS account ID of the CMK owner, the @key@ namespace, and then the CMK ID. For example, arn:aws:kms:/us-east-1/ :/012345678910/ :key//abcd1234-a123-456a-a12b-a123b4cd56ef/ . The specified CMK must exist in the region that the snapshot is being copied to. If a @KmsKeyId@ is specified, the @Encrypted@ flag must also be set.
-csKMSKeyId :: Lens' CopySnapshot (Maybe Text)
-csKMSKeyId = lens _csKMSKeyId (\ s a -> s{_csKMSKeyId = a});
-
--- | A description for the EBS snapshot.
-csDescription :: Lens' CopySnapshot (Maybe Text)
-csDescription = lens _csDescription (\ s a -> s{_csDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-csDryRun :: Lens' CopySnapshot (Maybe Bool)
-csDryRun = lens _csDryRun (\ s a -> s{_csDryRun = a});
-
--- | The ID of the region that contains the snapshot to be copied.
-csSourceRegion :: Lens' CopySnapshot Text
-csSourceRegion = lens _csSourceRegion (\ s a -> s{_csSourceRegion = a});
-
--- | The ID of the EBS snapshot to copy.
-csSourceSnapshotId :: Lens' CopySnapshot Text
-csSourceSnapshotId = lens _csSourceSnapshotId (\ s a -> s{_csSourceSnapshotId = a});
-
-instance AWSRequest CopySnapshot where
-        type Rs CopySnapshot = CopySnapshotResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CopySnapshotResponse' <$>
-                   (x .@? "snapshotId") <*> (pure (fromEnum s)))
-
-instance Hashable CopySnapshot
-
-instance NFData CopySnapshot
-
-instance ToHeaders CopySnapshot where
-        toHeaders = const mempty
-
-instance ToPath CopySnapshot where
-        toPath = const "/"
-
-instance ToQuery CopySnapshot where
-        toQuery CopySnapshot'{..}
-          = mconcat
-              ["Action" =: ("CopySnapshot" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "PresignedUrl" =: _csPresignedURL,
-               "Encrypted" =: _csEncrypted,
-               "DestinationRegion" =: _csDestinationRegion,
-               "KmsKeyId" =: _csKMSKeyId,
-               "Description" =: _csDescription,
-               "DryRun" =: _csDryRun,
-               "SourceRegion" =: _csSourceRegion,
-               "SourceSnapshotId" =: _csSourceSnapshotId]
-
--- | Contains the output of CopySnapshot.
---
---
---
--- /See:/ 'copySnapshotResponse' smart constructor.
-data CopySnapshotResponse = CopySnapshotResponse'
-    { _csrsSnapshotId     :: !(Maybe Text)
-    , _csrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CopySnapshotResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csrsSnapshotId' - The ID of the new snapshot.
---
--- * 'csrsResponseStatus' - -- | The response status code.
-copySnapshotResponse
-    :: Int -- ^ 'csrsResponseStatus'
-    -> CopySnapshotResponse
-copySnapshotResponse pResponseStatus_ =
-    CopySnapshotResponse'
-    { _csrsSnapshotId = Nothing
-    , _csrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the new snapshot.
-csrsSnapshotId :: Lens' CopySnapshotResponse (Maybe Text)
-csrsSnapshotId = lens _csrsSnapshotId (\ s a -> s{_csrsSnapshotId = a});
-
--- | -- | The response status code.
-csrsResponseStatus :: Lens' CopySnapshotResponse Int
-csrsResponseStatus = lens _csrsResponseStatus (\ s a -> s{_csrsResponseStatus = a});
-
-instance NFData CopySnapshotResponse
diff --git a/gen/Network/AWS/EC2/CreateCustomerGateway.hs b/gen/Network/AWS/EC2/CreateCustomerGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateCustomerGateway.hs
+++ /dev/null
@@ -1,170 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateCustomerGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Provides information to AWS about your VPN customer gateway device. The customer gateway is the appliance at your end of the VPN connection. (The device on the AWS side of the VPN connection is the virtual private gateway.) You must provide the Internet-routable IP address of the customer gateway's external interface. The IP address must be static and may be behind a device performing network address translation (NAT).
---
---
--- For devices that use Border Gateway Protocol (BGP), you can also provide the device's BGP Autonomous System Number (ASN). You can use an existing ASN assigned to your network. If you don't have an ASN already, you can use a private ASN (in the 64512 - 65534 range).
---
--- For more information about VPN customer gateways, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
--- /Important:/ You cannot create more than one customer gateway with the same VPN type, IP address, and BGP ASN parameter values. If you run an identical request more than one time, the first request creates the customer gateway, and subsequent requests return information about the existing customer gateway. The subsequent requests do not create new customer gateway resources.
---
-module Network.AWS.EC2.CreateCustomerGateway
-    (
-    -- * Creating a Request
-      createCustomerGateway
-    , CreateCustomerGateway
-    -- * Request Lenses
-    , ccgDryRun
-    , ccgType
-    , ccgPublicIP
-    , ccgBGPASN
-
-    -- * Destructuring the Response
-    , createCustomerGatewayResponse
-    , CreateCustomerGatewayResponse
-    -- * Response Lenses
-    , ccgrsCustomerGateway
-    , ccgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateCustomerGateway.
---
---
---
--- /See:/ 'createCustomerGateway' smart constructor.
-data CreateCustomerGateway = CreateCustomerGateway'
-    { _ccgDryRun   :: !(Maybe Bool)
-    , _ccgType     :: !GatewayType
-    , _ccgPublicIP :: !Text
-    , _ccgBGPASN   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateCustomerGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ccgType' - The type of VPN connection that this customer gateway supports (@ipsec.1@ ).
---
--- * 'ccgPublicIP' - The Internet-routable IP address for the customer gateway's outside interface. The address must be static.
---
--- * 'ccgBGPASN' - For devices that support BGP, the customer gateway's BGP ASN. Default: 65000
-createCustomerGateway
-    :: GatewayType -- ^ 'ccgType'
-    -> Text -- ^ 'ccgPublicIP'
-    -> Int -- ^ 'ccgBGPASN'
-    -> CreateCustomerGateway
-createCustomerGateway pType_ pPublicIP_ pBGPASN_ =
-    CreateCustomerGateway'
-    { _ccgDryRun = Nothing
-    , _ccgType = pType_
-    , _ccgPublicIP = pPublicIP_
-    , _ccgBGPASN = pBGPASN_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ccgDryRun :: Lens' CreateCustomerGateway (Maybe Bool)
-ccgDryRun = lens _ccgDryRun (\ s a -> s{_ccgDryRun = a});
-
--- | The type of VPN connection that this customer gateway supports (@ipsec.1@ ).
-ccgType :: Lens' CreateCustomerGateway GatewayType
-ccgType = lens _ccgType (\ s a -> s{_ccgType = a});
-
--- | The Internet-routable IP address for the customer gateway's outside interface. The address must be static.
-ccgPublicIP :: Lens' CreateCustomerGateway Text
-ccgPublicIP = lens _ccgPublicIP (\ s a -> s{_ccgPublicIP = a});
-
--- | For devices that support BGP, the customer gateway's BGP ASN. Default: 65000
-ccgBGPASN :: Lens' CreateCustomerGateway Int
-ccgBGPASN = lens _ccgBGPASN (\ s a -> s{_ccgBGPASN = a});
-
-instance AWSRequest CreateCustomerGateway where
-        type Rs CreateCustomerGateway =
-             CreateCustomerGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateCustomerGatewayResponse' <$>
-                   (x .@? "customerGateway") <*> (pure (fromEnum s)))
-
-instance Hashable CreateCustomerGateway
-
-instance NFData CreateCustomerGateway
-
-instance ToHeaders CreateCustomerGateway where
-        toHeaders = const mempty
-
-instance ToPath CreateCustomerGateway where
-        toPath = const "/"
-
-instance ToQuery CreateCustomerGateway where
-        toQuery CreateCustomerGateway'{..}
-          = mconcat
-              ["Action" =: ("CreateCustomerGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _ccgDryRun, "Type" =: _ccgType,
-               "IpAddress" =: _ccgPublicIP, "BgpAsn" =: _ccgBGPASN]
-
--- | Contains the output of CreateCustomerGateway.
---
---
---
--- /See:/ 'createCustomerGatewayResponse' smart constructor.
-data CreateCustomerGatewayResponse = CreateCustomerGatewayResponse'
-    { _ccgrsCustomerGateway :: !(Maybe CustomerGateway)
-    , _ccgrsResponseStatus  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateCustomerGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccgrsCustomerGateway' - Information about the customer gateway.
---
--- * 'ccgrsResponseStatus' - -- | The response status code.
-createCustomerGatewayResponse
-    :: Int -- ^ 'ccgrsResponseStatus'
-    -> CreateCustomerGatewayResponse
-createCustomerGatewayResponse pResponseStatus_ =
-    CreateCustomerGatewayResponse'
-    { _ccgrsCustomerGateway = Nothing
-    , _ccgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the customer gateway.
-ccgrsCustomerGateway :: Lens' CreateCustomerGatewayResponse (Maybe CustomerGateway)
-ccgrsCustomerGateway = lens _ccgrsCustomerGateway (\ s a -> s{_ccgrsCustomerGateway = a});
-
--- | -- | The response status code.
-ccgrsResponseStatus :: Lens' CreateCustomerGatewayResponse Int
-ccgrsResponseStatus = lens _ccgrsResponseStatus (\ s a -> s{_ccgrsResponseStatus = a});
-
-instance NFData CreateCustomerGatewayResponse
diff --git a/gen/Network/AWS/EC2/CreateDHCPOptions.hs b/gen/Network/AWS/EC2/CreateDHCPOptions.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateDHCPOptions.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateDHCPOptions
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a set of DHCP options for your VPC. After creating the set, you must associate it with the VPC, causing all existing and new instances that you launch in the VPC to use this set of DHCP options. The following are the individual DHCP options you can specify. For more information about the options, see <http://www.ietf.org/rfc/rfc2132.txt RFC 2132> .
---
---
---     * @domain-name-servers@ - The IP addresses of up to four domain name servers, or AmazonProvidedDNS. The default DHCP option set specifies AmazonProvidedDNS. If specifying more than one domain name server, specify the IP addresses in a single parameter, separated by commas. If you want your instance to receive a custom DNS hostname as specified in @domain-name@ , you must set @domain-name-servers@ to a custom DNS server.
---
---     * @domain-name@ - If you're using AmazonProvidedDNS in "us-east-1", specify "ec2.internal". If you're using AmazonProvidedDNS in another region, specify "region.compute.internal" (for example, "ap-northeast-1.compute.internal"). Otherwise, specify a domain name (for example, "MyCompany.com"). This value is used to complete unqualified DNS hostnames. __Important__ : Some Linux operating systems accept multiple domain names separated by spaces. However, Windows and other Linux operating systems treat the value as a single domain, which results in unexpected behavior. If your DHCP options set is associated with a VPC that has instances with multiple operating systems, specify only one domain name.
---
---     * @ntp-servers@ - The IP addresses of up to four Network Time Protocol (NTP) servers.
---
---     * @netbios-name-servers@ - The IP addresses of up to four NetBIOS name servers.
---
---     * @netbios-node-type@ - The NetBIOS node type (1, 2, 4, or 8). We recommend that you specify 2 (broadcast and multicast are not currently supported). For more information about these node types, see <http://www.ietf.org/rfc/rfc2132.txt RFC 2132> .
---
---
---
--- Your VPC automatically starts out with a set of DHCP options that includes only a DNS server that we provide (AmazonProvidedDNS). If you create a set of options, and if your VPC has an Internet gateway, make sure to set the @domain-name-servers@ option either to @AmazonProvidedDNS@ or to a domain name server of your choice. For more information about DHCP options, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateDHCPOptions
-    (
-    -- * Creating a Request
-      createDHCPOptions
-    , CreateDHCPOptions
-    -- * Request Lenses
-    , cdoDryRun
-    , cdoDHCPConfigurations
-
-    -- * Destructuring the Response
-    , createDHCPOptionsResponse
-    , CreateDHCPOptionsResponse
-    -- * Response Lenses
-    , cdorsDHCPOptions
-    , cdorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateDhcpOptions.
---
---
---
--- /See:/ 'createDHCPOptions' smart constructor.
-data CreateDHCPOptions = CreateDHCPOptions'
-    { _cdoDryRun             :: !(Maybe Bool)
-    , _cdoDHCPConfigurations :: ![NewDHCPConfiguration]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateDHCPOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdoDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cdoDHCPConfigurations' - A DHCP configuration option.
-createDHCPOptions
-    :: CreateDHCPOptions
-createDHCPOptions =
-    CreateDHCPOptions'
-    { _cdoDryRun = Nothing
-    , _cdoDHCPConfigurations = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cdoDryRun :: Lens' CreateDHCPOptions (Maybe Bool)
-cdoDryRun = lens _cdoDryRun (\ s a -> s{_cdoDryRun = a});
-
--- | A DHCP configuration option.
-cdoDHCPConfigurations :: Lens' CreateDHCPOptions [NewDHCPConfiguration]
-cdoDHCPConfigurations = lens _cdoDHCPConfigurations (\ s a -> s{_cdoDHCPConfigurations = a}) . _Coerce;
-
-instance AWSRequest CreateDHCPOptions where
-        type Rs CreateDHCPOptions = CreateDHCPOptionsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateDHCPOptionsResponse' <$>
-                   (x .@? "dhcpOptions") <*> (pure (fromEnum s)))
-
-instance Hashable CreateDHCPOptions
-
-instance NFData CreateDHCPOptions
-
-instance ToHeaders CreateDHCPOptions where
-        toHeaders = const mempty
-
-instance ToPath CreateDHCPOptions where
-        toPath = const "/"
-
-instance ToQuery CreateDHCPOptions where
-        toQuery CreateDHCPOptions'{..}
-          = mconcat
-              ["Action" =: ("CreateDhcpOptions" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cdoDryRun,
-               toQueryList "DhcpConfiguration"
-                 _cdoDHCPConfigurations]
-
--- | Contains the output of CreateDhcpOptions.
---
---
---
--- /See:/ 'createDHCPOptionsResponse' smart constructor.
-data CreateDHCPOptionsResponse = CreateDHCPOptionsResponse'
-    { _cdorsDHCPOptions    :: !(Maybe DHCPOptions)
-    , _cdorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateDHCPOptionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdorsDHCPOptions' - A set of DHCP options.
---
--- * 'cdorsResponseStatus' - -- | The response status code.
-createDHCPOptionsResponse
-    :: Int -- ^ 'cdorsResponseStatus'
-    -> CreateDHCPOptionsResponse
-createDHCPOptionsResponse pResponseStatus_ =
-    CreateDHCPOptionsResponse'
-    { _cdorsDHCPOptions = Nothing
-    , _cdorsResponseStatus = pResponseStatus_
-    }
-
--- | A set of DHCP options.
-cdorsDHCPOptions :: Lens' CreateDHCPOptionsResponse (Maybe DHCPOptions)
-cdorsDHCPOptions = lens _cdorsDHCPOptions (\ s a -> s{_cdorsDHCPOptions = a});
-
--- | -- | The response status code.
-cdorsResponseStatus :: Lens' CreateDHCPOptionsResponse Int
-cdorsResponseStatus = lens _cdorsResponseStatus (\ s a -> s{_cdorsResponseStatus = a});
-
-instance NFData CreateDHCPOptionsResponse
diff --git a/gen/Network/AWS/EC2/CreateEgressOnlyInternetGateway.hs b/gen/Network/AWS/EC2/CreateEgressOnlyInternetGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateEgressOnlyInternetGateway.hs
+++ /dev/null
@@ -1,161 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateEgressOnlyInternetGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- [IPv6 only] Creates an egress-only Internet gateway for your VPC. An egress-only Internet gateway is used to enable outbound communication over IPv6 from instances in your VPC to the Internet, and prevents hosts outside of your VPC from initiating an IPv6 connection with your instance.
---
---
-module Network.AWS.EC2.CreateEgressOnlyInternetGateway
-    (
-    -- * Creating a Request
-      createEgressOnlyInternetGateway
-    , CreateEgressOnlyInternetGateway
-    -- * Request Lenses
-    , ceoigClientToken
-    , ceoigDryRun
-    , ceoigVPCId
-
-    -- * Destructuring the Response
-    , createEgressOnlyInternetGatewayResponse
-    , CreateEgressOnlyInternetGatewayResponse
-    -- * Response Lenses
-    , ceoigrsClientToken
-    , ceoigrsEgressOnlyInternetGateway
-    , ceoigrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'createEgressOnlyInternetGateway' smart constructor.
-data CreateEgressOnlyInternetGateway = CreateEgressOnlyInternetGateway'
-    { _ceoigClientToken :: !(Maybe Text)
-    , _ceoigDryRun      :: !(Maybe Bool)
-    , _ceoigVPCId       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateEgressOnlyInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ceoigClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> .
---
--- * 'ceoigDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ceoigVPCId' - The ID of the VPC for which to create the egress-only Internet gateway.
-createEgressOnlyInternetGateway
-    :: Text -- ^ 'ceoigVPCId'
-    -> CreateEgressOnlyInternetGateway
-createEgressOnlyInternetGateway pVPCId_ =
-    CreateEgressOnlyInternetGateway'
-    { _ceoigClientToken = Nothing
-    , _ceoigDryRun = Nothing
-    , _ceoigVPCId = pVPCId_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> .
-ceoigClientToken :: Lens' CreateEgressOnlyInternetGateway (Maybe Text)
-ceoigClientToken = lens _ceoigClientToken (\ s a -> s{_ceoigClientToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ceoigDryRun :: Lens' CreateEgressOnlyInternetGateway (Maybe Bool)
-ceoigDryRun = lens _ceoigDryRun (\ s a -> s{_ceoigDryRun = a});
-
--- | The ID of the VPC for which to create the egress-only Internet gateway.
-ceoigVPCId :: Lens' CreateEgressOnlyInternetGateway Text
-ceoigVPCId = lens _ceoigVPCId (\ s a -> s{_ceoigVPCId = a});
-
-instance AWSRequest CreateEgressOnlyInternetGateway
-         where
-        type Rs CreateEgressOnlyInternetGateway =
-             CreateEgressOnlyInternetGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateEgressOnlyInternetGatewayResponse' <$>
-                   (x .@? "clientToken") <*>
-                     (x .@? "egressOnlyInternetGateway")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CreateEgressOnlyInternetGateway
-
-instance NFData CreateEgressOnlyInternetGateway
-
-instance ToHeaders CreateEgressOnlyInternetGateway
-         where
-        toHeaders = const mempty
-
-instance ToPath CreateEgressOnlyInternetGateway where
-        toPath = const "/"
-
-instance ToQuery CreateEgressOnlyInternetGateway
-         where
-        toQuery CreateEgressOnlyInternetGateway'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateEgressOnlyInternetGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _ceoigClientToken,
-               "DryRun" =: _ceoigDryRun, "VpcId" =: _ceoigVPCId]
-
--- | /See:/ 'createEgressOnlyInternetGatewayResponse' smart constructor.
-data CreateEgressOnlyInternetGatewayResponse = CreateEgressOnlyInternetGatewayResponse'
-    { _ceoigrsClientToken               :: !(Maybe Text)
-    , _ceoigrsEgressOnlyInternetGateway :: !(Maybe EgressOnlyInternetGateway)
-    , _ceoigrsResponseStatus            :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateEgressOnlyInternetGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ceoigrsClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
---
--- * 'ceoigrsEgressOnlyInternetGateway' - Information about the egress-only Internet gateway.
---
--- * 'ceoigrsResponseStatus' - -- | The response status code.
-createEgressOnlyInternetGatewayResponse
-    :: Int -- ^ 'ceoigrsResponseStatus'
-    -> CreateEgressOnlyInternetGatewayResponse
-createEgressOnlyInternetGatewayResponse pResponseStatus_ =
-    CreateEgressOnlyInternetGatewayResponse'
-    { _ceoigrsClientToken = Nothing
-    , _ceoigrsEgressOnlyInternetGateway = Nothing
-    , _ceoigrsResponseStatus = pResponseStatus_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
-ceoigrsClientToken :: Lens' CreateEgressOnlyInternetGatewayResponse (Maybe Text)
-ceoigrsClientToken = lens _ceoigrsClientToken (\ s a -> s{_ceoigrsClientToken = a});
-
--- | Information about the egress-only Internet gateway.
-ceoigrsEgressOnlyInternetGateway :: Lens' CreateEgressOnlyInternetGatewayResponse (Maybe EgressOnlyInternetGateway)
-ceoigrsEgressOnlyInternetGateway = lens _ceoigrsEgressOnlyInternetGateway (\ s a -> s{_ceoigrsEgressOnlyInternetGateway = a});
-
--- | -- | The response status code.
-ceoigrsResponseStatus :: Lens' CreateEgressOnlyInternetGatewayResponse Int
-ceoigrsResponseStatus = lens _ceoigrsResponseStatus (\ s a -> s{_ceoigrsResponseStatus = a});
-
-instance NFData
-         CreateEgressOnlyInternetGatewayResponse
diff --git a/gen/Network/AWS/EC2/CreateFlowLogs.hs b/gen/Network/AWS/EC2/CreateFlowLogs.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateFlowLogs.hs
+++ /dev/null
@@ -1,213 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateFlowLogs
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates one or more flow logs to capture IP traffic for a specific network interface, subnet, or VPC. Flow logs are delivered to a specified log group in Amazon CloudWatch Logs. If you specify a VPC or subnet in the request, a log stream is created in CloudWatch Logs for each network interface in the subnet or VPC. Log streams can include information about accepted and rejected traffic to a network interface. You can view the data in your log streams using Amazon CloudWatch Logs.
---
---
--- In your request, you must also specify an IAM role that has permission to publish logs to CloudWatch Logs.
---
-module Network.AWS.EC2.CreateFlowLogs
-    (
-    -- * Creating a Request
-      createFlowLogs
-    , CreateFlowLogs
-    -- * Request Lenses
-    , cflClientToken
-    , cflResourceIds
-    , cflResourceType
-    , cflTrafficType
-    , cflLogGroupName
-    , cflDeliverLogsPermissionARN
-
-    -- * Destructuring the Response
-    , createFlowLogsResponse
-    , CreateFlowLogsResponse
-    -- * Response Lenses
-    , cflrsUnsuccessful
-    , cflrsClientToken
-    , cflrsFlowLogIds
-    , cflrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateFlowLogs.
---
---
---
--- /See:/ 'createFlowLogs' smart constructor.
-data CreateFlowLogs = CreateFlowLogs'
-    { _cflClientToken              :: !(Maybe Text)
-    , _cflResourceIds              :: ![Text]
-    , _cflResourceType             :: !FlowLogsResourceType
-    , _cflTrafficType              :: !TrafficType
-    , _cflLogGroupName             :: !Text
-    , _cflDeliverLogsPermissionARN :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateFlowLogs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cflClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> .
---
--- * 'cflResourceIds' - One or more subnet, network interface, or VPC IDs. Constraints: Maximum of 1000 resources
---
--- * 'cflResourceType' - The type of resource on which to create the flow log.
---
--- * 'cflTrafficType' - The type of traffic to log.
---
--- * 'cflLogGroupName' - The name of the CloudWatch log group.
---
--- * 'cflDeliverLogsPermissionARN' - The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs log group.
-createFlowLogs
-    :: FlowLogsResourceType -- ^ 'cflResourceType'
-    -> TrafficType -- ^ 'cflTrafficType'
-    -> Text -- ^ 'cflLogGroupName'
-    -> Text -- ^ 'cflDeliverLogsPermissionARN'
-    -> CreateFlowLogs
-createFlowLogs pResourceType_ pTrafficType_ pLogGroupName_ pDeliverLogsPermissionARN_ =
-    CreateFlowLogs'
-    { _cflClientToken = Nothing
-    , _cflResourceIds = mempty
-    , _cflResourceType = pResourceType_
-    , _cflTrafficType = pTrafficType_
-    , _cflLogGroupName = pLogGroupName_
-    , _cflDeliverLogsPermissionARN = pDeliverLogsPermissionARN_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> .
-cflClientToken :: Lens' CreateFlowLogs (Maybe Text)
-cflClientToken = lens _cflClientToken (\ s a -> s{_cflClientToken = a});
-
--- | One or more subnet, network interface, or VPC IDs. Constraints: Maximum of 1000 resources
-cflResourceIds :: Lens' CreateFlowLogs [Text]
-cflResourceIds = lens _cflResourceIds (\ s a -> s{_cflResourceIds = a}) . _Coerce;
-
--- | The type of resource on which to create the flow log.
-cflResourceType :: Lens' CreateFlowLogs FlowLogsResourceType
-cflResourceType = lens _cflResourceType (\ s a -> s{_cflResourceType = a});
-
--- | The type of traffic to log.
-cflTrafficType :: Lens' CreateFlowLogs TrafficType
-cflTrafficType = lens _cflTrafficType (\ s a -> s{_cflTrafficType = a});
-
--- | The name of the CloudWatch log group.
-cflLogGroupName :: Lens' CreateFlowLogs Text
-cflLogGroupName = lens _cflLogGroupName (\ s a -> s{_cflLogGroupName = a});
-
--- | The ARN for the IAM role that's used to post flow logs to a CloudWatch Logs log group.
-cflDeliverLogsPermissionARN :: Lens' CreateFlowLogs Text
-cflDeliverLogsPermissionARN = lens _cflDeliverLogsPermissionARN (\ s a -> s{_cflDeliverLogsPermissionARN = a});
-
-instance AWSRequest CreateFlowLogs where
-        type Rs CreateFlowLogs = CreateFlowLogsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateFlowLogsResponse' <$>
-                   (x .@? "unsuccessful" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "clientToken")
-                     <*>
-                     (x .@? "flowLogIdSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CreateFlowLogs
-
-instance NFData CreateFlowLogs
-
-instance ToHeaders CreateFlowLogs where
-        toHeaders = const mempty
-
-instance ToPath CreateFlowLogs where
-        toPath = const "/"
-
-instance ToQuery CreateFlowLogs where
-        toQuery CreateFlowLogs'{..}
-          = mconcat
-              ["Action" =: ("CreateFlowLogs" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _cflClientToken,
-               toQueryList "ResourceId" _cflResourceIds,
-               "ResourceType" =: _cflResourceType,
-               "TrafficType" =: _cflTrafficType,
-               "LogGroupName" =: _cflLogGroupName,
-               "DeliverLogsPermissionArn" =:
-                 _cflDeliverLogsPermissionARN]
-
--- | Contains the output of CreateFlowLogs.
---
---
---
--- /See:/ 'createFlowLogsResponse' smart constructor.
-data CreateFlowLogsResponse = CreateFlowLogsResponse'
-    { _cflrsUnsuccessful   :: !(Maybe [UnsuccessfulItem])
-    , _cflrsClientToken    :: !(Maybe Text)
-    , _cflrsFlowLogIds     :: !(Maybe [Text])
-    , _cflrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateFlowLogsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cflrsUnsuccessful' - Information about the flow logs that could not be created successfully.
---
--- * 'cflrsClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
---
--- * 'cflrsFlowLogIds' - The IDs of the flow logs.
---
--- * 'cflrsResponseStatus' - -- | The response status code.
-createFlowLogsResponse
-    :: Int -- ^ 'cflrsResponseStatus'
-    -> CreateFlowLogsResponse
-createFlowLogsResponse pResponseStatus_ =
-    CreateFlowLogsResponse'
-    { _cflrsUnsuccessful = Nothing
-    , _cflrsClientToken = Nothing
-    , _cflrsFlowLogIds = Nothing
-    , _cflrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the flow logs that could not be created successfully.
-cflrsUnsuccessful :: Lens' CreateFlowLogsResponse [UnsuccessfulItem]
-cflrsUnsuccessful = lens _cflrsUnsuccessful (\ s a -> s{_cflrsUnsuccessful = a}) . _Default . _Coerce;
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
-cflrsClientToken :: Lens' CreateFlowLogsResponse (Maybe Text)
-cflrsClientToken = lens _cflrsClientToken (\ s a -> s{_cflrsClientToken = a});
-
--- | The IDs of the flow logs.
-cflrsFlowLogIds :: Lens' CreateFlowLogsResponse [Text]
-cflrsFlowLogIds = lens _cflrsFlowLogIds (\ s a -> s{_cflrsFlowLogIds = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-cflrsResponseStatus :: Lens' CreateFlowLogsResponse Int
-cflrsResponseStatus = lens _cflrsResponseStatus (\ s a -> s{_cflrsResponseStatus = a});
-
-instance NFData CreateFlowLogsResponse
diff --git a/gen/Network/AWS/EC2/CreateImage.hs b/gen/Network/AWS/EC2/CreateImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateImage.hs
+++ /dev/null
@@ -1,189 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateImage
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an Amazon EBS-backed AMI from an Amazon EBS-backed instance that is either running or stopped.
---
---
--- If you customized your instance with instance store volumes or EBS volumes in addition to the root device volume, the new AMI contains block device mapping information for those volumes. When you launch an instance from this new AMI, the instance automatically launches with those additional volumes.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html Creating Amazon EBS-Backed Linux AMIs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateImage
-    (
-    -- * Creating a Request
-      createImage
-    , CreateImage
-    -- * Request Lenses
-    , ciiNoReboot
-    , ciiDescription
-    , ciiBlockDeviceMappings
-    , ciiDryRun
-    , ciiInstanceId
-    , ciiName
-
-    -- * Destructuring the Response
-    , createImageResponse
-    , CreateImageResponse
-    -- * Response Lenses
-    , cirsImageId
-    , cirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateImage.
---
---
---
--- /See:/ 'createImage' smart constructor.
-data CreateImage = CreateImage'
-    { _ciiNoReboot            :: !(Maybe Bool)
-    , _ciiDescription         :: !(Maybe Text)
-    , _ciiBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _ciiDryRun              :: !(Maybe Bool)
-    , _ciiInstanceId          :: !Text
-    , _ciiName                :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ciiNoReboot' - By default, Amazon EC2 attempts to shut down and reboot the instance before creating the image. If the 'No Reboot' option is set, Amazon EC2 doesn't shut down the instance before creating the image. When this option is used, file system integrity on the created image can't be guaranteed.
---
--- * 'ciiDescription' - A description for the new image.
---
--- * 'ciiBlockDeviceMappings' - Information about one or more block device mappings.
---
--- * 'ciiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ciiInstanceId' - The ID of the instance.
---
--- * 'ciiName' - A name for the new image. Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)
-createImage
-    :: Text -- ^ 'ciiInstanceId'
-    -> Text -- ^ 'ciiName'
-    -> CreateImage
-createImage pInstanceId_ pName_ =
-    CreateImage'
-    { _ciiNoReboot = Nothing
-    , _ciiDescription = Nothing
-    , _ciiBlockDeviceMappings = Nothing
-    , _ciiDryRun = Nothing
-    , _ciiInstanceId = pInstanceId_
-    , _ciiName = pName_
-    }
-
--- | By default, Amazon EC2 attempts to shut down and reboot the instance before creating the image. If the 'No Reboot' option is set, Amazon EC2 doesn't shut down the instance before creating the image. When this option is used, file system integrity on the created image can't be guaranteed.
-ciiNoReboot :: Lens' CreateImage (Maybe Bool)
-ciiNoReboot = lens _ciiNoReboot (\ s a -> s{_ciiNoReboot = a});
-
--- | A description for the new image.
-ciiDescription :: Lens' CreateImage (Maybe Text)
-ciiDescription = lens _ciiDescription (\ s a -> s{_ciiDescription = a});
-
--- | Information about one or more block device mappings.
-ciiBlockDeviceMappings :: Lens' CreateImage [BlockDeviceMapping]
-ciiBlockDeviceMappings = lens _ciiBlockDeviceMappings (\ s a -> s{_ciiBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ciiDryRun :: Lens' CreateImage (Maybe Bool)
-ciiDryRun = lens _ciiDryRun (\ s a -> s{_ciiDryRun = a});
-
--- | The ID of the instance.
-ciiInstanceId :: Lens' CreateImage Text
-ciiInstanceId = lens _ciiInstanceId (\ s a -> s{_ciiInstanceId = a});
-
--- | A name for the new image. Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)
-ciiName :: Lens' CreateImage Text
-ciiName = lens _ciiName (\ s a -> s{_ciiName = a});
-
-instance AWSRequest CreateImage where
-        type Rs CreateImage = CreateImageResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateImageResponse' <$>
-                   (x .@? "imageId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateImage
-
-instance NFData CreateImage
-
-instance ToHeaders CreateImage where
-        toHeaders = const mempty
-
-instance ToPath CreateImage where
-        toPath = const "/"
-
-instance ToQuery CreateImage where
-        toQuery CreateImage'{..}
-          = mconcat
-              ["Action" =: ("CreateImage" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NoReboot" =: _ciiNoReboot,
-               "Description" =: _ciiDescription,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _ciiBlockDeviceMappings),
-               "DryRun" =: _ciiDryRun,
-               "InstanceId" =: _ciiInstanceId, "Name" =: _ciiName]
-
--- | Contains the output of CreateImage.
---
---
---
--- /See:/ 'createImageResponse' smart constructor.
-data CreateImageResponse = CreateImageResponse'
-    { _cirsImageId        :: !(Maybe Text)
-    , _cirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateImageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cirsImageId' - The ID of the new AMI.
---
--- * 'cirsResponseStatus' - -- | The response status code.
-createImageResponse
-    :: Int -- ^ 'cirsResponseStatus'
-    -> CreateImageResponse
-createImageResponse pResponseStatus_ =
-    CreateImageResponse'
-    { _cirsImageId = Nothing
-    , _cirsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the new AMI.
-cirsImageId :: Lens' CreateImageResponse (Maybe Text)
-cirsImageId = lens _cirsImageId (\ s a -> s{_cirsImageId = a});
-
--- | -- | The response status code.
-cirsResponseStatus :: Lens' CreateImageResponse Int
-cirsResponseStatus = lens _cirsResponseStatus (\ s a -> s{_cirsResponseStatus = a});
-
-instance NFData CreateImageResponse
diff --git a/gen/Network/AWS/EC2/CreateInstanceExportTask.hs b/gen/Network/AWS/EC2/CreateInstanceExportTask.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateInstanceExportTask.hs
+++ /dev/null
@@ -1,167 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateInstanceExportTask
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Exports a running or stopped instance to an S3 bucket.
---
---
--- For information about the supported operating systems, image formats, and known limitations for the types of instances you can export, see <http://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html Exporting an Instance as a VM Using VM Import/Export> in the /VM Import\/Export User Guide/ .
---
-module Network.AWS.EC2.CreateInstanceExportTask
-    (
-    -- * Creating a Request
-      createInstanceExportTask
-    , CreateInstanceExportTask
-    -- * Request Lenses
-    , cietTargetEnvironment
-    , cietExportToS3Task
-    , cietDescription
-    , cietInstanceId
-
-    -- * Destructuring the Response
-    , createInstanceExportTaskResponse
-    , CreateInstanceExportTaskResponse
-    -- * Response Lenses
-    , cietrsExportTask
-    , cietrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateInstanceExportTask.
---
---
---
--- /See:/ 'createInstanceExportTask' smart constructor.
-data CreateInstanceExportTask = CreateInstanceExportTask'
-    { _cietTargetEnvironment :: !(Maybe ExportEnvironment)
-    , _cietExportToS3Task    :: !(Maybe ExportToS3TaskSpecification)
-    , _cietDescription       :: !(Maybe Text)
-    , _cietInstanceId        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateInstanceExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cietTargetEnvironment' - The target virtualization environment.
---
--- * 'cietExportToS3Task' - The format and location for an instance export task.
---
--- * 'cietDescription' - A description for the conversion task or the resource being exported. The maximum length is 255 bytes.
---
--- * 'cietInstanceId' - The ID of the instance.
-createInstanceExportTask
-    :: Text -- ^ 'cietInstanceId'
-    -> CreateInstanceExportTask
-createInstanceExportTask pInstanceId_ =
-    CreateInstanceExportTask'
-    { _cietTargetEnvironment = Nothing
-    , _cietExportToS3Task = Nothing
-    , _cietDescription = Nothing
-    , _cietInstanceId = pInstanceId_
-    }
-
--- | The target virtualization environment.
-cietTargetEnvironment :: Lens' CreateInstanceExportTask (Maybe ExportEnvironment)
-cietTargetEnvironment = lens _cietTargetEnvironment (\ s a -> s{_cietTargetEnvironment = a});
-
--- | The format and location for an instance export task.
-cietExportToS3Task :: Lens' CreateInstanceExportTask (Maybe ExportToS3TaskSpecification)
-cietExportToS3Task = lens _cietExportToS3Task (\ s a -> s{_cietExportToS3Task = a});
-
--- | A description for the conversion task or the resource being exported. The maximum length is 255 bytes.
-cietDescription :: Lens' CreateInstanceExportTask (Maybe Text)
-cietDescription = lens _cietDescription (\ s a -> s{_cietDescription = a});
-
--- | The ID of the instance.
-cietInstanceId :: Lens' CreateInstanceExportTask Text
-cietInstanceId = lens _cietInstanceId (\ s a -> s{_cietInstanceId = a});
-
-instance AWSRequest CreateInstanceExportTask where
-        type Rs CreateInstanceExportTask =
-             CreateInstanceExportTaskResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateInstanceExportTaskResponse' <$>
-                   (x .@? "exportTask") <*> (pure (fromEnum s)))
-
-instance Hashable CreateInstanceExportTask
-
-instance NFData CreateInstanceExportTask
-
-instance ToHeaders CreateInstanceExportTask where
-        toHeaders = const mempty
-
-instance ToPath CreateInstanceExportTask where
-        toPath = const "/"
-
-instance ToQuery CreateInstanceExportTask where
-        toQuery CreateInstanceExportTask'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateInstanceExportTask" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "TargetEnvironment" =: _cietTargetEnvironment,
-               "ExportToS3" =: _cietExportToS3Task,
-               "Description" =: _cietDescription,
-               "InstanceId" =: _cietInstanceId]
-
--- | Contains the output for CreateInstanceExportTask.
---
---
---
--- /See:/ 'createInstanceExportTaskResponse' smart constructor.
-data CreateInstanceExportTaskResponse = CreateInstanceExportTaskResponse'
-    { _cietrsExportTask     :: !(Maybe ExportTask)
-    , _cietrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateInstanceExportTaskResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cietrsExportTask' - Information about the instance export task.
---
--- * 'cietrsResponseStatus' - -- | The response status code.
-createInstanceExportTaskResponse
-    :: Int -- ^ 'cietrsResponseStatus'
-    -> CreateInstanceExportTaskResponse
-createInstanceExportTaskResponse pResponseStatus_ =
-    CreateInstanceExportTaskResponse'
-    { _cietrsExportTask = Nothing
-    , _cietrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the instance export task.
-cietrsExportTask :: Lens' CreateInstanceExportTaskResponse (Maybe ExportTask)
-cietrsExportTask = lens _cietrsExportTask (\ s a -> s{_cietrsExportTask = a});
-
--- | -- | The response status code.
-cietrsResponseStatus :: Lens' CreateInstanceExportTaskResponse Int
-cietrsResponseStatus = lens _cietrsResponseStatus (\ s a -> s{_cietrsResponseStatus = a});
-
-instance NFData CreateInstanceExportTaskResponse
diff --git a/gen/Network/AWS/EC2/CreateInternetGateway.hs b/gen/Network/AWS/EC2/CreateInternetGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateInternetGateway.hs
+++ /dev/null
@@ -1,135 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateInternetGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an Internet gateway for use with a VPC. After creating the Internet gateway, you attach it to a VPC using 'AttachInternetGateway' .
---
---
--- For more information about your VPC and Internet gateway, see the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/ Amazon Virtual Private Cloud User Guide> .
---
-module Network.AWS.EC2.CreateInternetGateway
-    (
-    -- * Creating a Request
-      createInternetGateway
-    , CreateInternetGateway
-    -- * Request Lenses
-    , cigDryRun
-
-    -- * Destructuring the Response
-    , createInternetGatewayResponse
-    , CreateInternetGatewayResponse
-    -- * Response Lenses
-    , cigrsInternetGateway
-    , cigrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateInternetGateway.
---
---
---
--- /See:/ 'createInternetGateway' smart constructor.
-newtype CreateInternetGateway = CreateInternetGateway'
-    { _cigDryRun :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cigDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-createInternetGateway
-    :: CreateInternetGateway
-createInternetGateway =
-    CreateInternetGateway'
-    { _cigDryRun = Nothing
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cigDryRun :: Lens' CreateInternetGateway (Maybe Bool)
-cigDryRun = lens _cigDryRun (\ s a -> s{_cigDryRun = a});
-
-instance AWSRequest CreateInternetGateway where
-        type Rs CreateInternetGateway =
-             CreateInternetGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateInternetGatewayResponse' <$>
-                   (x .@? "internetGateway") <*> (pure (fromEnum s)))
-
-instance Hashable CreateInternetGateway
-
-instance NFData CreateInternetGateway
-
-instance ToHeaders CreateInternetGateway where
-        toHeaders = const mempty
-
-instance ToPath CreateInternetGateway where
-        toPath = const "/"
-
-instance ToQuery CreateInternetGateway where
-        toQuery CreateInternetGateway'{..}
-          = mconcat
-              ["Action" =: ("CreateInternetGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cigDryRun]
-
--- | Contains the output of CreateInternetGateway.
---
---
---
--- /See:/ 'createInternetGatewayResponse' smart constructor.
-data CreateInternetGatewayResponse = CreateInternetGatewayResponse'
-    { _cigrsInternetGateway :: !(Maybe InternetGateway)
-    , _cigrsResponseStatus  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateInternetGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cigrsInternetGateway' - Information about the Internet gateway.
---
--- * 'cigrsResponseStatus' - -- | The response status code.
-createInternetGatewayResponse
-    :: Int -- ^ 'cigrsResponseStatus'
-    -> CreateInternetGatewayResponse
-createInternetGatewayResponse pResponseStatus_ =
-    CreateInternetGatewayResponse'
-    { _cigrsInternetGateway = Nothing
-    , _cigrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the Internet gateway.
-cigrsInternetGateway :: Lens' CreateInternetGatewayResponse (Maybe InternetGateway)
-cigrsInternetGateway = lens _cigrsInternetGateway (\ s a -> s{_cigrsInternetGateway = a});
-
--- | -- | The response status code.
-cigrsResponseStatus :: Lens' CreateInternetGatewayResponse Int
-cigrsResponseStatus = lens _cigrsResponseStatus (\ s a -> s{_cigrsResponseStatus = a});
-
-instance NFData CreateInternetGatewayResponse
diff --git a/gen/Network/AWS/EC2/CreateKeyPair.hs b/gen/Network/AWS/EC2/CreateKeyPair.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateKeyPair.hs
+++ /dev/null
@@ -1,171 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a 2048-bit RSA key pair with the specified name. Amazon EC2 stores the public key and displays the private key for you to save to a file. The private key is returned as an unencrypted PEM encoded PKCS#8 private key. If a key with the specified name already exists, Amazon EC2 returns an error.
---
---
--- You can have up to five thousand key pairs per region.
---
--- The key pair returned to you is available only in the region in which you create it. To create a key pair that is available in all regions, use 'ImportKeyPair' .
---
--- For more information about key pairs, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateKeyPair
-    (
-    -- * Creating a Request
-      createKeyPair
-    , CreateKeyPair
-    -- * Request Lenses
-    , ckpDryRun
-    , ckpKeyName
-
-    -- * Destructuring the Response
-    , createKeyPairResponse
-    , CreateKeyPairResponse
-    -- * Response Lenses
-    , ckprsResponseStatus
-    , ckprsKeyName
-    , ckprsKeyFingerprint
-    , ckprsKeyMaterial
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateKeyPair.
---
---
---
--- /See:/ 'createKeyPair' smart constructor.
-data CreateKeyPair = CreateKeyPair'
-    { _ckpDryRun  :: !(Maybe Bool)
-    , _ckpKeyName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateKeyPair' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ckpDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ckpKeyName' - A unique name for the key pair. Constraints: Up to 255 ASCII characters
-createKeyPair
-    :: Text -- ^ 'ckpKeyName'
-    -> CreateKeyPair
-createKeyPair pKeyName_ =
-    CreateKeyPair'
-    { _ckpDryRun = Nothing
-    , _ckpKeyName = pKeyName_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ckpDryRun :: Lens' CreateKeyPair (Maybe Bool)
-ckpDryRun = lens _ckpDryRun (\ s a -> s{_ckpDryRun = a});
-
--- | A unique name for the key pair. Constraints: Up to 255 ASCII characters
-ckpKeyName :: Lens' CreateKeyPair Text
-ckpKeyName = lens _ckpKeyName (\ s a -> s{_ckpKeyName = a});
-
-instance AWSRequest CreateKeyPair where
-        type Rs CreateKeyPair = CreateKeyPairResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateKeyPairResponse' <$>
-                   (pure (fromEnum s)) <*> (x .@ "keyName") <*>
-                     (x .@ "keyFingerprint")
-                     <*> (x .@ "keyMaterial"))
-
-instance Hashable CreateKeyPair
-
-instance NFData CreateKeyPair
-
-instance ToHeaders CreateKeyPair where
-        toHeaders = const mempty
-
-instance ToPath CreateKeyPair where
-        toPath = const "/"
-
-instance ToQuery CreateKeyPair where
-        toQuery CreateKeyPair'{..}
-          = mconcat
-              ["Action" =: ("CreateKeyPair" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _ckpDryRun, "KeyName" =: _ckpKeyName]
-
--- | Describes a key pair.
---
---
---
--- /See:/ 'createKeyPairResponse' smart constructor.
-data CreateKeyPairResponse = CreateKeyPairResponse'
-    { _ckprsResponseStatus :: !Int
-    , _ckprsKeyName        :: !Text
-    , _ckprsKeyFingerprint :: !Text
-    , _ckprsKeyMaterial    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateKeyPairResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ckprsResponseStatus' - -- | The response status code.
---
--- * 'ckprsKeyName' - The name of the key pair.
---
--- * 'ckprsKeyFingerprint' - The SHA-1 digest of the DER encoded private key.
---
--- * 'ckprsKeyMaterial' - An unencrypted PEM encoded RSA private key.
-createKeyPairResponse
-    :: Int -- ^ 'ckprsResponseStatus'
-    -> Text -- ^ 'ckprsKeyName'
-    -> Text -- ^ 'ckprsKeyFingerprint'
-    -> Text -- ^ 'ckprsKeyMaterial'
-    -> CreateKeyPairResponse
-createKeyPairResponse pResponseStatus_ pKeyName_ pKeyFingerprint_ pKeyMaterial_ =
-    CreateKeyPairResponse'
-    { _ckprsResponseStatus = pResponseStatus_
-    , _ckprsKeyName = pKeyName_
-    , _ckprsKeyFingerprint = pKeyFingerprint_
-    , _ckprsKeyMaterial = pKeyMaterial_
-    }
-
--- | -- | The response status code.
-ckprsResponseStatus :: Lens' CreateKeyPairResponse Int
-ckprsResponseStatus = lens _ckprsResponseStatus (\ s a -> s{_ckprsResponseStatus = a});
-
--- | The name of the key pair.
-ckprsKeyName :: Lens' CreateKeyPairResponse Text
-ckprsKeyName = lens _ckprsKeyName (\ s a -> s{_ckprsKeyName = a});
-
--- | The SHA-1 digest of the DER encoded private key.
-ckprsKeyFingerprint :: Lens' CreateKeyPairResponse Text
-ckprsKeyFingerprint = lens _ckprsKeyFingerprint (\ s a -> s{_ckprsKeyFingerprint = a});
-
--- | An unencrypted PEM encoded RSA private key.
-ckprsKeyMaterial :: Lens' CreateKeyPairResponse Text
-ckprsKeyMaterial = lens _ckprsKeyMaterial (\ s a -> s{_ckprsKeyMaterial = a});
-
-instance NFData CreateKeyPairResponse
diff --git a/gen/Network/AWS/EC2/CreateNatGateway.hs b/gen/Network/AWS/EC2/CreateNatGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateNatGateway.hs
+++ /dev/null
@@ -1,164 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateNatGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a NAT gateway in the specified subnet. A NAT gateway can be used to enable instances in a private subnet to connect to the Internet. This action creates a network interface in the specified subnet with a private IP address from the IP address range of the subnet. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html NAT Gateways> in the /Amazon Virtual Private Cloud User Guide/ .
---
---
-module Network.AWS.EC2.CreateNatGateway
-    (
-    -- * Creating a Request
-      createNatGateway
-    , CreateNatGateway
-    -- * Request Lenses
-    , cngClientToken
-    , cngSubnetId
-    , cngAllocationId
-
-    -- * Destructuring the Response
-    , createNatGatewayResponse
-    , CreateNatGatewayResponse
-    -- * Response Lenses
-    , cngrsClientToken
-    , cngrsNatGateway
-    , cngrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateNatGateway.
---
---
---
--- /See:/ 'createNatGateway' smart constructor.
-data CreateNatGateway = CreateNatGateway'
-    { _cngClientToken  :: !(Maybe Text)
-    , _cngSubnetId     :: !Text
-    , _cngAllocationId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNatGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cngClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to Ensure Idempotency> . Constraint: Maximum 64 ASCII characters.
---
--- * 'cngSubnetId' - The subnet in which to create the NAT gateway.
---
--- * 'cngAllocationId' - 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.
-createNatGateway
-    :: Text -- ^ 'cngSubnetId'
-    -> Text -- ^ 'cngAllocationId'
-    -> CreateNatGateway
-createNatGateway pSubnetId_ pAllocationId_ =
-    CreateNatGateway'
-    { _cngClientToken = Nothing
-    , _cngSubnetId = pSubnetId_
-    , _cngAllocationId = pAllocationId_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to Ensure Idempotency> . Constraint: Maximum 64 ASCII characters.
-cngClientToken :: Lens' CreateNatGateway (Maybe Text)
-cngClientToken = lens _cngClientToken (\ s a -> s{_cngClientToken = a});
-
--- | The subnet in which to create the NAT gateway.
-cngSubnetId :: Lens' CreateNatGateway Text
-cngSubnetId = lens _cngSubnetId (\ s a -> s{_cngSubnetId = a});
-
--- | 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.
-cngAllocationId :: Lens' CreateNatGateway Text
-cngAllocationId = lens _cngAllocationId (\ s a -> s{_cngAllocationId = a});
-
-instance AWSRequest CreateNatGateway where
-        type Rs CreateNatGateway = CreateNatGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateNatGatewayResponse' <$>
-                   (x .@? "clientToken") <*> (x .@? "natGateway") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CreateNatGateway
-
-instance NFData CreateNatGateway
-
-instance ToHeaders CreateNatGateway where
-        toHeaders = const mempty
-
-instance ToPath CreateNatGateway where
-        toPath = const "/"
-
-instance ToQuery CreateNatGateway where
-        toQuery CreateNatGateway'{..}
-          = mconcat
-              ["Action" =: ("CreateNatGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _cngClientToken,
-               "SubnetId" =: _cngSubnetId,
-               "AllocationId" =: _cngAllocationId]
-
--- | Contains the output of CreateNatGateway.
---
---
---
--- /See:/ 'createNatGatewayResponse' smart constructor.
-data CreateNatGatewayResponse = CreateNatGatewayResponse'
-    { _cngrsClientToken    :: !(Maybe Text)
-    , _cngrsNatGateway     :: !(Maybe NatGateway)
-    , _cngrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNatGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cngrsClientToken' - Unique, case-sensitive identifier to ensure the idempotency of the request. Only returned if a client token was provided in the request.
---
--- * 'cngrsNatGateway' - Information about the NAT gateway.
---
--- * 'cngrsResponseStatus' - -- | The response status code.
-createNatGatewayResponse
-    :: Int -- ^ 'cngrsResponseStatus'
-    -> CreateNatGatewayResponse
-createNatGatewayResponse pResponseStatus_ =
-    CreateNatGatewayResponse'
-    { _cngrsClientToken = Nothing
-    , _cngrsNatGateway = Nothing
-    , _cngrsResponseStatus = pResponseStatus_
-    }
-
--- | Unique, case-sensitive identifier to ensure the idempotency of the request. Only returned if a client token was provided in the request.
-cngrsClientToken :: Lens' CreateNatGatewayResponse (Maybe Text)
-cngrsClientToken = lens _cngrsClientToken (\ s a -> s{_cngrsClientToken = a});
-
--- | Information about the NAT gateway.
-cngrsNatGateway :: Lens' CreateNatGatewayResponse (Maybe NatGateway)
-cngrsNatGateway = lens _cngrsNatGateway (\ s a -> s{_cngrsNatGateway = a});
-
--- | -- | The response status code.
-cngrsResponseStatus :: Lens' CreateNatGatewayResponse Int
-cngrsResponseStatus = lens _cngrsResponseStatus (\ s a -> s{_cngrsResponseStatus = a});
-
-instance NFData CreateNatGatewayResponse
diff --git a/gen/Network/AWS/EC2/CreateNetworkACL.hs b/gen/Network/AWS/EC2/CreateNetworkACL.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateNetworkACL.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateNetworkACL
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a network ACL in a VPC. Network ACLs provide an optional layer of security (in addition to security groups) for the instances in your VPC.
---
---
--- For more information about network ACLs, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateNetworkACL
-    (
-    -- * Creating a Request
-      createNetworkACL
-    , CreateNetworkACL
-    -- * Request Lenses
-    , cnaDryRun
-    , cnaVPCId
-
-    -- * Destructuring the Response
-    , createNetworkACLResponse
-    , CreateNetworkACLResponse
-    -- * Response Lenses
-    , cnarsNetworkACL
-    , cnarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateNetworkAcl.
---
---
---
--- /See:/ 'createNetworkACL' smart constructor.
-data CreateNetworkACL = CreateNetworkACL'
-    { _cnaDryRun :: !(Maybe Bool)
-    , _cnaVPCId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNetworkACL' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cnaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cnaVPCId' - The ID of the VPC.
-createNetworkACL
-    :: Text -- ^ 'cnaVPCId'
-    -> CreateNetworkACL
-createNetworkACL pVPCId_ =
-    CreateNetworkACL'
-    { _cnaDryRun = Nothing
-    , _cnaVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cnaDryRun :: Lens' CreateNetworkACL (Maybe Bool)
-cnaDryRun = lens _cnaDryRun (\ s a -> s{_cnaDryRun = a});
-
--- | The ID of the VPC.
-cnaVPCId :: Lens' CreateNetworkACL Text
-cnaVPCId = lens _cnaVPCId (\ s a -> s{_cnaVPCId = a});
-
-instance AWSRequest CreateNetworkACL where
-        type Rs CreateNetworkACL = CreateNetworkACLResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateNetworkACLResponse' <$>
-                   (x .@? "networkAcl") <*> (pure (fromEnum s)))
-
-instance Hashable CreateNetworkACL
-
-instance NFData CreateNetworkACL
-
-instance ToHeaders CreateNetworkACL where
-        toHeaders = const mempty
-
-instance ToPath CreateNetworkACL where
-        toPath = const "/"
-
-instance ToQuery CreateNetworkACL where
-        toQuery CreateNetworkACL'{..}
-          = mconcat
-              ["Action" =: ("CreateNetworkAcl" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cnaDryRun, "VpcId" =: _cnaVPCId]
-
--- | Contains the output of CreateNetworkAcl.
---
---
---
--- /See:/ 'createNetworkACLResponse' smart constructor.
-data CreateNetworkACLResponse = CreateNetworkACLResponse'
-    { _cnarsNetworkACL     :: !(Maybe NetworkACL)
-    , _cnarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNetworkACLResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cnarsNetworkACL' - Information about the network ACL.
---
--- * 'cnarsResponseStatus' - -- | The response status code.
-createNetworkACLResponse
-    :: Int -- ^ 'cnarsResponseStatus'
-    -> CreateNetworkACLResponse
-createNetworkACLResponse pResponseStatus_ =
-    CreateNetworkACLResponse'
-    { _cnarsNetworkACL = Nothing
-    , _cnarsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the network ACL.
-cnarsNetworkACL :: Lens' CreateNetworkACLResponse (Maybe NetworkACL)
-cnarsNetworkACL = lens _cnarsNetworkACL (\ s a -> s{_cnarsNetworkACL = a});
-
--- | -- | The response status code.
-cnarsResponseStatus :: Lens' CreateNetworkACLResponse Int
-cnarsResponseStatus = lens _cnarsResponseStatus (\ s a -> s{_cnarsResponseStatus = a});
-
-instance NFData CreateNetworkACLResponse
diff --git a/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs b/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs
+++ /dev/null
@@ -1,204 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateNetworkACLEntry
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an entry (a rule) in a network ACL with the specified rule number. Each network ACL has a set of numbered ingress rules and a separate set of numbered egress rules. When determining whether a packet should be allowed in or out of a subnet associated with the ACL, we process the entries in the ACL according to the rule numbers, in ascending order. Each network ACL has a set of ingress rules and a separate set of egress rules.
---
---
--- We recommend that you leave room between the rule numbers (for example, 100, 110, 120, ...), and not number them one right after the other (for example, 101, 102, 103, ...). This makes it easier to add a rule between existing ones without having to renumber the rules.
---
--- After you add an entry, you can't modify it; you must either replace it, or create an entry and delete the old one.
---
--- For more information about network ACLs, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateNetworkACLEntry
-    (
-    -- * Creating a Request
-      createNetworkACLEntry
-    , CreateNetworkACLEntry
-    -- * Request Lenses
-    , cnaeIPv6CidrBlock
-    , cnaeICMPTypeCode
-    , cnaePortRange
-    , cnaeCidrBlock
-    , cnaeDryRun
-    , cnaeNetworkACLId
-    , cnaeRuleNumber
-    , cnaeProtocol
-    , cnaeRuleAction
-    , cnaeEgress
-
-    -- * Destructuring the Response
-    , createNetworkACLEntryResponse
-    , CreateNetworkACLEntryResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateNetworkAclEntry.
---
---
---
--- /See:/ 'createNetworkACLEntry' smart constructor.
-data CreateNetworkACLEntry = CreateNetworkACLEntry'
-    { _cnaeIPv6CidrBlock :: !(Maybe Text)
-    , _cnaeICMPTypeCode  :: !(Maybe ICMPTypeCode)
-    , _cnaePortRange     :: !(Maybe PortRange)
-    , _cnaeCidrBlock     :: !(Maybe Text)
-    , _cnaeDryRun        :: !(Maybe Bool)
-    , _cnaeNetworkACLId  :: !Text
-    , _cnaeRuleNumber    :: !Int
-    , _cnaeProtocol      :: !Text
-    , _cnaeRuleAction    :: !RuleAction
-    , _cnaeEgress        :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNetworkACLEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cnaeIPv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation (for example @2001:db8:1234:1a00::/64@ ).
---
--- * 'cnaeICMPTypeCode' - ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying the ICMP protocol, or protocol 58 (ICMPv6) with an IPv6 CIDR block.
---
--- * 'cnaePortRange' - TCP or UDP protocols: The range of ports the rule applies to.
---
--- * 'cnaeCidrBlock' - The IPv4 network range to allow or deny, in CIDR notation (for example @172.16.0.0/24@ ).
---
--- * 'cnaeDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cnaeNetworkACLId' - The ID of the network ACL.
---
--- * 'cnaeRuleNumber' - The rule number for the entry (for example, 100). ACL entries are processed in ascending order by rule number. Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is reserved for internal use.
---
--- * 'cnaeProtocol' - The protocol. A value of @-1@ or @all@ means all protocols. If you specify @all@ , @-1@ , or a protocol number other than @tcp@ , @udp@ , or @icmp@ , traffic on all ports is allowed, regardless of any ports or ICMP types or codes you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.
---
--- * 'cnaeRuleAction' - Indicates whether to allow or deny the traffic that matches the rule.
---
--- * 'cnaeEgress' - Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet).
-createNetworkACLEntry
-    :: Text -- ^ 'cnaeNetworkACLId'
-    -> Int -- ^ 'cnaeRuleNumber'
-    -> Text -- ^ 'cnaeProtocol'
-    -> RuleAction -- ^ 'cnaeRuleAction'
-    -> Bool -- ^ 'cnaeEgress'
-    -> CreateNetworkACLEntry
-createNetworkACLEntry pNetworkACLId_ pRuleNumber_ pProtocol_ pRuleAction_ pEgress_ =
-    CreateNetworkACLEntry'
-    { _cnaeIPv6CidrBlock = Nothing
-    , _cnaeICMPTypeCode = Nothing
-    , _cnaePortRange = Nothing
-    , _cnaeCidrBlock = Nothing
-    , _cnaeDryRun = Nothing
-    , _cnaeNetworkACLId = pNetworkACLId_
-    , _cnaeRuleNumber = pRuleNumber_
-    , _cnaeProtocol = pProtocol_
-    , _cnaeRuleAction = pRuleAction_
-    , _cnaeEgress = pEgress_
-    }
-
--- | The IPv6 network range to allow or deny, in CIDR notation (for example @2001:db8:1234:1a00::/64@ ).
-cnaeIPv6CidrBlock :: Lens' CreateNetworkACLEntry (Maybe Text)
-cnaeIPv6CidrBlock = lens _cnaeIPv6CidrBlock (\ s a -> s{_cnaeIPv6CidrBlock = a});
-
--- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying the ICMP protocol, or protocol 58 (ICMPv6) with an IPv6 CIDR block.
-cnaeICMPTypeCode :: Lens' CreateNetworkACLEntry (Maybe ICMPTypeCode)
-cnaeICMPTypeCode = lens _cnaeICMPTypeCode (\ s a -> s{_cnaeICMPTypeCode = a});
-
--- | TCP or UDP protocols: The range of ports the rule applies to.
-cnaePortRange :: Lens' CreateNetworkACLEntry (Maybe PortRange)
-cnaePortRange = lens _cnaePortRange (\ s a -> s{_cnaePortRange = a});
-
--- | The IPv4 network range to allow or deny, in CIDR notation (for example @172.16.0.0/24@ ).
-cnaeCidrBlock :: Lens' CreateNetworkACLEntry (Maybe Text)
-cnaeCidrBlock = lens _cnaeCidrBlock (\ s a -> s{_cnaeCidrBlock = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cnaeDryRun :: Lens' CreateNetworkACLEntry (Maybe Bool)
-cnaeDryRun = lens _cnaeDryRun (\ s a -> s{_cnaeDryRun = a});
-
--- | The ID of the network ACL.
-cnaeNetworkACLId :: Lens' CreateNetworkACLEntry Text
-cnaeNetworkACLId = lens _cnaeNetworkACLId (\ s a -> s{_cnaeNetworkACLId = a});
-
--- | The rule number for the entry (for example, 100). ACL entries are processed in ascending order by rule number. Constraints: Positive integer from 1 to 32766. The range 32767 to 65535 is reserved for internal use.
-cnaeRuleNumber :: Lens' CreateNetworkACLEntry Int
-cnaeRuleNumber = lens _cnaeRuleNumber (\ s a -> s{_cnaeRuleNumber = a});
-
--- | The protocol. A value of @-1@ or @all@ means all protocols. If you specify @all@ , @-1@ , or a protocol number other than @tcp@ , @udp@ , or @icmp@ , traffic on all ports is allowed, regardless of any ports or ICMP types or codes you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.
-cnaeProtocol :: Lens' CreateNetworkACLEntry Text
-cnaeProtocol = lens _cnaeProtocol (\ s a -> s{_cnaeProtocol = a});
-
--- | Indicates whether to allow or deny the traffic that matches the rule.
-cnaeRuleAction :: Lens' CreateNetworkACLEntry RuleAction
-cnaeRuleAction = lens _cnaeRuleAction (\ s a -> s{_cnaeRuleAction = a});
-
--- | Indicates whether this is an egress rule (rule is applied to traffic leaving the subnet).
-cnaeEgress :: Lens' CreateNetworkACLEntry Bool
-cnaeEgress = lens _cnaeEgress (\ s a -> s{_cnaeEgress = a});
-
-instance AWSRequest CreateNetworkACLEntry where
-        type Rs CreateNetworkACLEntry =
-             CreateNetworkACLEntryResponse
-        request = postQuery ec2
-        response = receiveNull CreateNetworkACLEntryResponse'
-
-instance Hashable CreateNetworkACLEntry
-
-instance NFData CreateNetworkACLEntry
-
-instance ToHeaders CreateNetworkACLEntry where
-        toHeaders = const mempty
-
-instance ToPath CreateNetworkACLEntry where
-        toPath = const "/"
-
-instance ToQuery CreateNetworkACLEntry where
-        toQuery CreateNetworkACLEntry'{..}
-          = mconcat
-              ["Action" =: ("CreateNetworkAclEntry" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Ipv6CidrBlock" =: _cnaeIPv6CidrBlock,
-               "Icmp" =: _cnaeICMPTypeCode,
-               "PortRange" =: _cnaePortRange,
-               "CidrBlock" =: _cnaeCidrBlock,
-               "DryRun" =: _cnaeDryRun,
-               "NetworkAclId" =: _cnaeNetworkACLId,
-               "RuleNumber" =: _cnaeRuleNumber,
-               "Protocol" =: _cnaeProtocol,
-               "RuleAction" =: _cnaeRuleAction,
-               "Egress" =: _cnaeEgress]
-
--- | /See:/ 'createNetworkACLEntryResponse' smart constructor.
-data CreateNetworkACLEntryResponse =
-    CreateNetworkACLEntryResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNetworkACLEntryResponse' with the minimum fields required to make a request.
---
-createNetworkACLEntryResponse
-    :: CreateNetworkACLEntryResponse
-createNetworkACLEntryResponse = CreateNetworkACLEntryResponse'
-
-instance NFData CreateNetworkACLEntryResponse
diff --git a/gen/Network/AWS/EC2/CreateNetworkInterface.hs b/gen/Network/AWS/EC2/CreateNetworkInterface.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateNetworkInterface.hs
+++ /dev/null
@@ -1,222 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateNetworkInterface
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a network interface in the specified subnet.
---
---
--- For more information about network interfaces, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html Elastic Network Interfaces> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateNetworkInterface
-    (
-    -- * Creating a Request
-      createNetworkInterface
-    , CreateNetworkInterface
-    -- * Request Lenses
-    , cniGroups
-    , cniPrivateIPAddresses
-    , cniIPv6AddressCount
-    , cniPrivateIPAddress
-    , cniSecondaryPrivateIPAddressCount
-    , cniDescription
-    , cniDryRun
-    , cniIPv6Addresses
-    , cniSubnetId
-
-    -- * Destructuring the Response
-    , createNetworkInterfaceResponse
-    , CreateNetworkInterfaceResponse
-    -- * Response Lenses
-    , cnirsNetworkInterface
-    , cnirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateNetworkInterface.
---
---
---
--- /See:/ 'createNetworkInterface' smart constructor.
-data CreateNetworkInterface = CreateNetworkInterface'
-    { _cniGroups                         :: !(Maybe [Text])
-    , _cniPrivateIPAddresses             :: !(Maybe [PrivateIPAddressSpecification])
-    , _cniIPv6AddressCount               :: !(Maybe Int)
-    , _cniPrivateIPAddress               :: !(Maybe Text)
-    , _cniSecondaryPrivateIPAddressCount :: !(Maybe Int)
-    , _cniDescription                    :: !(Maybe Text)
-    , _cniDryRun                         :: !(Maybe Bool)
-    , _cniIPv6Addresses                  :: !(Maybe [InstanceIPv6Address])
-    , _cniSubnetId                       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cniGroups' - The IDs of one or more security groups.
---
--- * 'cniPrivateIPAddresses' - One or more private IPv4 addresses.
---
--- * 'cniIPv6AddressCount' - The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses. If your subnet has the @AssignIpv6AddressOnCreation@ attribute set to @true@ , you can specify @0@ to override this setting.
---
--- * 'cniPrivateIPAddress' - The primary private IPv4 address of the network interface. If you don't specify an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR range. If you specify an IP address, you cannot indicate any IP addresses specified in @privateIpAddresses@ as primary (only one IP address can be designated as primary).
---
--- * 'cniSecondaryPrivateIPAddressCount' - The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using @privateIpAddresses@ . The number of IP addresses you can assign to a network interface varies by instance type. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI IP Addresses Per ENI Per Instance Type> in the /Amazon Virtual Private Cloud User Guide/ .
---
--- * 'cniDescription' - A description for the network interface.
---
--- * 'cniDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cniIPv6Addresses' - One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. You can't use this option if you're specifying a number of IPv6 addresses.
---
--- * 'cniSubnetId' - The ID of the subnet to associate with the network interface.
-createNetworkInterface
-    :: Text -- ^ 'cniSubnetId'
-    -> CreateNetworkInterface
-createNetworkInterface pSubnetId_ =
-    CreateNetworkInterface'
-    { _cniGroups = Nothing
-    , _cniPrivateIPAddresses = Nothing
-    , _cniIPv6AddressCount = Nothing
-    , _cniPrivateIPAddress = Nothing
-    , _cniSecondaryPrivateIPAddressCount = Nothing
-    , _cniDescription = Nothing
-    , _cniDryRun = Nothing
-    , _cniIPv6Addresses = Nothing
-    , _cniSubnetId = pSubnetId_
-    }
-
--- | The IDs of one or more security groups.
-cniGroups :: Lens' CreateNetworkInterface [Text]
-cniGroups = lens _cniGroups (\ s a -> s{_cniGroups = a}) . _Default . _Coerce;
-
--- | One or more private IPv4 addresses.
-cniPrivateIPAddresses :: Lens' CreateNetworkInterface [PrivateIPAddressSpecification]
-cniPrivateIPAddresses = lens _cniPrivateIPAddresses (\ s a -> s{_cniPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | The number of IPv6 addresses to assign to a network interface. Amazon EC2 automatically selects the IPv6 addresses from the subnet range. You can't use this option if specifying specific IPv6 addresses. If your subnet has the @AssignIpv6AddressOnCreation@ attribute set to @true@ , you can specify @0@ to override this setting.
-cniIPv6AddressCount :: Lens' CreateNetworkInterface (Maybe Int)
-cniIPv6AddressCount = lens _cniIPv6AddressCount (\ s a -> s{_cniIPv6AddressCount = a});
-
--- | The primary private IPv4 address of the network interface. If you don't specify an IPv4 address, Amazon EC2 selects one for you from the subnet's IPv4 CIDR range. If you specify an IP address, you cannot indicate any IP addresses specified in @privateIpAddresses@ as primary (only one IP address can be designated as primary).
-cniPrivateIPAddress :: Lens' CreateNetworkInterface (Maybe Text)
-cniPrivateIPAddress = lens _cniPrivateIPAddress (\ s a -> s{_cniPrivateIPAddress = a});
-
--- | The number of secondary private IPv4 addresses to assign to a network interface. When you specify a number of secondary IPv4 addresses, Amazon EC2 selects these IP addresses within the subnet's IPv4 CIDR range. You can't specify this option and specify more than one private IP address using @privateIpAddresses@ . The number of IP addresses you can assign to a network interface varies by instance type. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI IP Addresses Per ENI Per Instance Type> in the /Amazon Virtual Private Cloud User Guide/ .
-cniSecondaryPrivateIPAddressCount :: Lens' CreateNetworkInterface (Maybe Int)
-cniSecondaryPrivateIPAddressCount = lens _cniSecondaryPrivateIPAddressCount (\ s a -> s{_cniSecondaryPrivateIPAddressCount = a});
-
--- | A description for the network interface.
-cniDescription :: Lens' CreateNetworkInterface (Maybe Text)
-cniDescription = lens _cniDescription (\ s a -> s{_cniDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cniDryRun :: Lens' CreateNetworkInterface (Maybe Bool)
-cniDryRun = lens _cniDryRun (\ s a -> s{_cniDryRun = a});
-
--- | One or more specific IPv6 addresses from the IPv6 CIDR block range of your subnet. You can't use this option if you're specifying a number of IPv6 addresses.
-cniIPv6Addresses :: Lens' CreateNetworkInterface [InstanceIPv6Address]
-cniIPv6Addresses = lens _cniIPv6Addresses (\ s a -> s{_cniIPv6Addresses = a}) . _Default . _Coerce;
-
--- | The ID of the subnet to associate with the network interface.
-cniSubnetId :: Lens' CreateNetworkInterface Text
-cniSubnetId = lens _cniSubnetId (\ s a -> s{_cniSubnetId = a});
-
-instance AWSRequest CreateNetworkInterface where
-        type Rs CreateNetworkInterface =
-             CreateNetworkInterfaceResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateNetworkInterfaceResponse' <$>
-                   (x .@? "networkInterface") <*> (pure (fromEnum s)))
-
-instance Hashable CreateNetworkInterface
-
-instance NFData CreateNetworkInterface
-
-instance ToHeaders CreateNetworkInterface where
-        toHeaders = const mempty
-
-instance ToPath CreateNetworkInterface where
-        toPath = const "/"
-
-instance ToQuery CreateNetworkInterface where
-        toQuery CreateNetworkInterface'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateNetworkInterface" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "SecurityGroupId" <$> _cniGroups),
-               toQuery
-                 (toQueryList "PrivateIpAddresses" <$>
-                    _cniPrivateIPAddresses),
-               "Ipv6AddressCount" =: _cniIPv6AddressCount,
-               "PrivateIpAddress" =: _cniPrivateIPAddress,
-               "SecondaryPrivateIpAddressCount" =:
-                 _cniSecondaryPrivateIPAddressCount,
-               "Description" =: _cniDescription,
-               "DryRun" =: _cniDryRun,
-               toQuery
-                 (toQueryList "Ipv6Addresses" <$> _cniIPv6Addresses),
-               "SubnetId" =: _cniSubnetId]
-
--- | Contains the output of CreateNetworkInterface.
---
---
---
--- /See:/ 'createNetworkInterfaceResponse' smart constructor.
-data CreateNetworkInterfaceResponse = CreateNetworkInterfaceResponse'
-    { _cnirsNetworkInterface :: !(Maybe NetworkInterface)
-    , _cnirsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateNetworkInterfaceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cnirsNetworkInterface' - Information about the network interface.
---
--- * 'cnirsResponseStatus' - -- | The response status code.
-createNetworkInterfaceResponse
-    :: Int -- ^ 'cnirsResponseStatus'
-    -> CreateNetworkInterfaceResponse
-createNetworkInterfaceResponse pResponseStatus_ =
-    CreateNetworkInterfaceResponse'
-    { _cnirsNetworkInterface = Nothing
-    , _cnirsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the network interface.
-cnirsNetworkInterface :: Lens' CreateNetworkInterfaceResponse (Maybe NetworkInterface)
-cnirsNetworkInterface = lens _cnirsNetworkInterface (\ s a -> s{_cnirsNetworkInterface = a});
-
--- | -- | The response status code.
-cnirsResponseStatus :: Lens' CreateNetworkInterfaceResponse Int
-cnirsResponseStatus = lens _cnirsResponseStatus (\ s a -> s{_cnirsResponseStatus = a});
-
-instance NFData CreateNetworkInterfaceResponse
diff --git a/gen/Network/AWS/EC2/CreatePlacementGroup.hs b/gen/Network/AWS/EC2/CreatePlacementGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreatePlacementGroup.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreatePlacementGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a placement group that you launch cluster instances into. You must give the group a name that's unique within the scope of your account.
---
---
--- For more information about placement groups and cluster instances, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html Cluster Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreatePlacementGroup
-    (
-    -- * Creating a Request
-      createPlacementGroup
-    , CreatePlacementGroup
-    -- * Request Lenses
-    , cpgDryRun
-    , cpgGroupName
-    , cpgStrategy
-
-    -- * Destructuring the Response
-    , createPlacementGroupResponse
-    , CreatePlacementGroupResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreatePlacementGroup.
---
---
---
--- /See:/ 'createPlacementGroup' smart constructor.
-data CreatePlacementGroup = CreatePlacementGroup'
-    { _cpgDryRun    :: !(Maybe Bool)
-    , _cpgGroupName :: !Text
-    , _cpgStrategy  :: !PlacementStrategy
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreatePlacementGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cpgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cpgGroupName' - A name for the placement group. Constraints: Up to 255 ASCII characters
---
--- * 'cpgStrategy' - The placement strategy.
-createPlacementGroup
-    :: Text -- ^ 'cpgGroupName'
-    -> PlacementStrategy -- ^ 'cpgStrategy'
-    -> CreatePlacementGroup
-createPlacementGroup pGroupName_ pStrategy_ =
-    CreatePlacementGroup'
-    { _cpgDryRun = Nothing
-    , _cpgGroupName = pGroupName_
-    , _cpgStrategy = pStrategy_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cpgDryRun :: Lens' CreatePlacementGroup (Maybe Bool)
-cpgDryRun = lens _cpgDryRun (\ s a -> s{_cpgDryRun = a});
-
--- | A name for the placement group. Constraints: Up to 255 ASCII characters
-cpgGroupName :: Lens' CreatePlacementGroup Text
-cpgGroupName = lens _cpgGroupName (\ s a -> s{_cpgGroupName = a});
-
--- | The placement strategy.
-cpgStrategy :: Lens' CreatePlacementGroup PlacementStrategy
-cpgStrategy = lens _cpgStrategy (\ s a -> s{_cpgStrategy = a});
-
-instance AWSRequest CreatePlacementGroup where
-        type Rs CreatePlacementGroup =
-             CreatePlacementGroupResponse
-        request = postQuery ec2
-        response = receiveNull CreatePlacementGroupResponse'
-
-instance Hashable CreatePlacementGroup
-
-instance NFData CreatePlacementGroup
-
-instance ToHeaders CreatePlacementGroup where
-        toHeaders = const mempty
-
-instance ToPath CreatePlacementGroup where
-        toPath = const "/"
-
-instance ToQuery CreatePlacementGroup where
-        toQuery CreatePlacementGroup'{..}
-          = mconcat
-              ["Action" =: ("CreatePlacementGroup" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cpgDryRun, "GroupName" =: _cpgGroupName,
-               "Strategy" =: _cpgStrategy]
-
--- | /See:/ 'createPlacementGroupResponse' smart constructor.
-data CreatePlacementGroupResponse =
-    CreatePlacementGroupResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreatePlacementGroupResponse' with the minimum fields required to make a request.
---
-createPlacementGroupResponse
-    :: CreatePlacementGroupResponse
-createPlacementGroupResponse = CreatePlacementGroupResponse'
-
-instance NFData CreatePlacementGroupResponse
diff --git a/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs b/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateReservedInstancesListing
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a listing for Amazon EC2 Standard Reserved Instances to be sold in the Reserved Instance Marketplace. You can submit one Standard Reserved Instance listing at a time. To get a list of your Standard Reserved Instances, you can use the 'DescribeReservedInstances' operation.
---
---
--- The Reserved Instance Marketplace matches sellers who want to resell Standard Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances.
---
--- To sell your Standard Reserved Instances, you must first register as a seller in the Reserved Instance Marketplace. After completing the registration process, you can create a Reserved Instance Marketplace listing of some or all of your Standard Reserved Instances, and specify the upfront price to receive for them. Your Standard Reserved Instance listings then become available for purchase. To view the details of your Standard Reserved Instance listing, you can use the 'DescribeReservedInstancesListings' operation.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateReservedInstancesListing
-    (
-    -- * Creating a Request
-      createReservedInstancesListing
-    , CreateReservedInstancesListing
-    -- * Request Lenses
-    , crilReservedInstancesId
-    , crilInstanceCount
-    , crilPriceSchedules
-    , crilClientToken
-
-    -- * Destructuring the Response
-    , createReservedInstancesListingResponse
-    , CreateReservedInstancesListingResponse
-    -- * Response Lenses
-    , crersReservedInstancesListings
-    , crersResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateReservedInstancesListing.
---
---
---
--- /See:/ 'createReservedInstancesListing' smart constructor.
-data CreateReservedInstancesListing = CreateReservedInstancesListing'
-    { _crilReservedInstancesId :: !Text
-    , _crilInstanceCount       :: !Int
-    , _crilPriceSchedules      :: ![PriceScheduleSpecification]
-    , _crilClientToken         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateReservedInstancesListing' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crilReservedInstancesId' - The ID of the active Standard Reserved Instance.
---
--- * 'crilInstanceCount' - The number of instances that are a part of a Reserved Instance account to be listed in the Reserved Instance Marketplace. This number should be less than or equal to the instance count associated with the Reserved Instance ID specified in this call.
---
--- * 'crilPriceSchedules' - A list specifying the price of the Standard Reserved Instance for each month remaining in the Reserved Instance term.
---
--- * 'crilClientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-createReservedInstancesListing
-    :: Text -- ^ 'crilReservedInstancesId'
-    -> Int -- ^ 'crilInstanceCount'
-    -> Text -- ^ 'crilClientToken'
-    -> CreateReservedInstancesListing
-createReservedInstancesListing pReservedInstancesId_ pInstanceCount_ pClientToken_ =
-    CreateReservedInstancesListing'
-    { _crilReservedInstancesId = pReservedInstancesId_
-    , _crilInstanceCount = pInstanceCount_
-    , _crilPriceSchedules = mempty
-    , _crilClientToken = pClientToken_
-    }
-
--- | The ID of the active Standard Reserved Instance.
-crilReservedInstancesId :: Lens' CreateReservedInstancesListing Text
-crilReservedInstancesId = lens _crilReservedInstancesId (\ s a -> s{_crilReservedInstancesId = a});
-
--- | The number of instances that are a part of a Reserved Instance account to be listed in the Reserved Instance Marketplace. This number should be less than or equal to the instance count associated with the Reserved Instance ID specified in this call.
-crilInstanceCount :: Lens' CreateReservedInstancesListing Int
-crilInstanceCount = lens _crilInstanceCount (\ s a -> s{_crilInstanceCount = a});
-
--- | A list specifying the price of the Standard Reserved Instance for each month remaining in the Reserved Instance term.
-crilPriceSchedules :: Lens' CreateReservedInstancesListing [PriceScheduleSpecification]
-crilPriceSchedules = lens _crilPriceSchedules (\ s a -> s{_crilPriceSchedules = a}) . _Coerce;
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-crilClientToken :: Lens' CreateReservedInstancesListing Text
-crilClientToken = lens _crilClientToken (\ s a -> s{_crilClientToken = a});
-
-instance AWSRequest CreateReservedInstancesListing
-         where
-        type Rs CreateReservedInstancesListing =
-             CreateReservedInstancesListingResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateReservedInstancesListingResponse' <$>
-                   (x .@? "reservedInstancesListingsSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable CreateReservedInstancesListing
-
-instance NFData CreateReservedInstancesListing
-
-instance ToHeaders CreateReservedInstancesListing
-         where
-        toHeaders = const mempty
-
-instance ToPath CreateReservedInstancesListing where
-        toPath = const "/"
-
-instance ToQuery CreateReservedInstancesListing where
-        toQuery CreateReservedInstancesListing'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateReservedInstancesListing" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ReservedInstancesId" =: _crilReservedInstancesId,
-               "InstanceCount" =: _crilInstanceCount,
-               toQueryList "PriceSchedules" _crilPriceSchedules,
-               "ClientToken" =: _crilClientToken]
-
--- | Contains the output of CreateReservedInstancesListing.
---
---
---
--- /See:/ 'createReservedInstancesListingResponse' smart constructor.
-data CreateReservedInstancesListingResponse = CreateReservedInstancesListingResponse'
-    { _crersReservedInstancesListings :: !(Maybe [ReservedInstancesListing])
-    , _crersResponseStatus            :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateReservedInstancesListingResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crersReservedInstancesListings' - Information about the Standard Reserved Instance listing.
---
--- * 'crersResponseStatus' - -- | The response status code.
-createReservedInstancesListingResponse
-    :: Int -- ^ 'crersResponseStatus'
-    -> CreateReservedInstancesListingResponse
-createReservedInstancesListingResponse pResponseStatus_ =
-    CreateReservedInstancesListingResponse'
-    { _crersReservedInstancesListings = Nothing
-    , _crersResponseStatus = pResponseStatus_
-    }
-
--- | Information about the Standard Reserved Instance listing.
-crersReservedInstancesListings :: Lens' CreateReservedInstancesListingResponse [ReservedInstancesListing]
-crersReservedInstancesListings = lens _crersReservedInstancesListings (\ s a -> s{_crersReservedInstancesListings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-crersResponseStatus :: Lens' CreateReservedInstancesListingResponse Int
-crersResponseStatus = lens _crersResponseStatus (\ s a -> s{_crersResponseStatus = a});
-
-instance NFData
-         CreateReservedInstancesListingResponse
diff --git a/gen/Network/AWS/EC2/CreateRoute.hs b/gen/Network/AWS/EC2/CreateRoute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateRoute.hs
+++ /dev/null
@@ -1,239 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateRoute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a route in a route table within a VPC.
---
---
--- You must specify one of the following targets: Internet gateway or virtual private gateway, NAT instance, NAT gateway, VPC peering connection, network interface, or egress-only Internet gateway.
---
--- When determining how to route traffic, we use the route with the most specific match. For example, traffic is destined for the IPv4 address @192.0.2.3@ , and the route table includes the following two IPv4 routes:
---
---     * @192.0.2.0/24@ (goes to some target A)
---
---     * @192.0.2.0/28@ (goes to some target B)
---
---
---
--- Both routes apply to the traffic destined for @192.0.2.3@ . However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic.
---
--- For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateRoute
-    (
-    -- * Creating a Request
-      createRoute
-    , CreateRoute
-    -- * Request Lenses
-    , crVPCPeeringConnectionId
-    , crInstanceId
-    , crEgressOnlyInternetGatewayId
-    , crDestinationIPv6CidrBlock
-    , crNatGatewayId
-    , crNetworkInterfaceId
-    , crGatewayId
-    , crDryRun
-    , crDestinationCidrBlock
-    , crRouteTableId
-
-    -- * Destructuring the Response
-    , createRouteResponse
-    , CreateRouteResponse
-    -- * Response Lenses
-    , crrsReturn
-    , crrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateRoute.
---
---
---
--- /See:/ 'createRoute' smart constructor.
-data CreateRoute = CreateRoute'
-    { _crVPCPeeringConnectionId      :: !(Maybe Text)
-    , _crInstanceId                  :: !(Maybe Text)
-    , _crEgressOnlyInternetGatewayId :: !(Maybe Text)
-    , _crDestinationIPv6CidrBlock    :: !(Maybe Text)
-    , _crNatGatewayId                :: !(Maybe Text)
-    , _crNetworkInterfaceId          :: !(Maybe Text)
-    , _crGatewayId                   :: !(Maybe Text)
-    , _crDryRun                      :: !(Maybe Bool)
-    , _crDestinationCidrBlock        :: !(Maybe Text)
-    , _crRouteTableId                :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crVPCPeeringConnectionId' - The ID of a VPC peering connection.
---
--- * 'crInstanceId' - The ID of a NAT instance in your VPC. The operation fails if you specify an instance ID unless exactly one network interface is attached.
---
--- * 'crEgressOnlyInternetGatewayId' - [IPv6 traffic only] The ID of an egress-only Internet gateway.
---
--- * 'crDestinationIPv6CidrBlock' - The IPv6 CIDR block used for the destination match. Routing decisions are based on the most specific match.
---
--- * 'crNatGatewayId' - [IPv4 traffic only] The ID of a NAT gateway.
---
--- * 'crNetworkInterfaceId' - The ID of a network interface.
---
--- * 'crGatewayId' - The ID of an Internet gateway or virtual private gateway attached to your VPC.
---
--- * 'crDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'crDestinationCidrBlock' - The IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match.
---
--- * 'crRouteTableId' - The ID of the route table for the route.
-createRoute
-    :: Text -- ^ 'crRouteTableId'
-    -> CreateRoute
-createRoute pRouteTableId_ =
-    CreateRoute'
-    { _crVPCPeeringConnectionId = Nothing
-    , _crInstanceId = Nothing
-    , _crEgressOnlyInternetGatewayId = Nothing
-    , _crDestinationIPv6CidrBlock = Nothing
-    , _crNatGatewayId = Nothing
-    , _crNetworkInterfaceId = Nothing
-    , _crGatewayId = Nothing
-    , _crDryRun = Nothing
-    , _crDestinationCidrBlock = Nothing
-    , _crRouteTableId = pRouteTableId_
-    }
-
--- | The ID of a VPC peering connection.
-crVPCPeeringConnectionId :: Lens' CreateRoute (Maybe Text)
-crVPCPeeringConnectionId = lens _crVPCPeeringConnectionId (\ s a -> s{_crVPCPeeringConnectionId = a});
-
--- | The ID of a NAT instance in your VPC. The operation fails if you specify an instance ID unless exactly one network interface is attached.
-crInstanceId :: Lens' CreateRoute (Maybe Text)
-crInstanceId = lens _crInstanceId (\ s a -> s{_crInstanceId = a});
-
--- | [IPv6 traffic only] The ID of an egress-only Internet gateway.
-crEgressOnlyInternetGatewayId :: Lens' CreateRoute (Maybe Text)
-crEgressOnlyInternetGatewayId = lens _crEgressOnlyInternetGatewayId (\ s a -> s{_crEgressOnlyInternetGatewayId = a});
-
--- | The IPv6 CIDR block used for the destination match. Routing decisions are based on the most specific match.
-crDestinationIPv6CidrBlock :: Lens' CreateRoute (Maybe Text)
-crDestinationIPv6CidrBlock = lens _crDestinationIPv6CidrBlock (\ s a -> s{_crDestinationIPv6CidrBlock = a});
-
--- | [IPv4 traffic only] The ID of a NAT gateway.
-crNatGatewayId :: Lens' CreateRoute (Maybe Text)
-crNatGatewayId = lens _crNatGatewayId (\ s a -> s{_crNatGatewayId = a});
-
--- | The ID of a network interface.
-crNetworkInterfaceId :: Lens' CreateRoute (Maybe Text)
-crNetworkInterfaceId = lens _crNetworkInterfaceId (\ s a -> s{_crNetworkInterfaceId = a});
-
--- | The ID of an Internet gateway or virtual private gateway attached to your VPC.
-crGatewayId :: Lens' CreateRoute (Maybe Text)
-crGatewayId = lens _crGatewayId (\ s a -> s{_crGatewayId = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-crDryRun :: Lens' CreateRoute (Maybe Bool)
-crDryRun = lens _crDryRun (\ s a -> s{_crDryRun = a});
-
--- | The IPv4 CIDR address block used for the destination match. Routing decisions are based on the most specific match.
-crDestinationCidrBlock :: Lens' CreateRoute (Maybe Text)
-crDestinationCidrBlock = lens _crDestinationCidrBlock (\ s a -> s{_crDestinationCidrBlock = a});
-
--- | The ID of the route table for the route.
-crRouteTableId :: Lens' CreateRoute Text
-crRouteTableId = lens _crRouteTableId (\ s a -> s{_crRouteTableId = a});
-
-instance AWSRequest CreateRoute where
-        type Rs CreateRoute = CreateRouteResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateRouteResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable CreateRoute
-
-instance NFData CreateRoute
-
-instance ToHeaders CreateRoute where
-        toHeaders = const mempty
-
-instance ToPath CreateRoute where
-        toPath = const "/"
-
-instance ToQuery CreateRoute where
-        toQuery CreateRoute'{..}
-          = mconcat
-              ["Action" =: ("CreateRoute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpcPeeringConnectionId" =:
-                 _crVPCPeeringConnectionId,
-               "InstanceId" =: _crInstanceId,
-               "EgressOnlyInternetGatewayId" =:
-                 _crEgressOnlyInternetGatewayId,
-               "DestinationIpv6CidrBlock" =:
-                 _crDestinationIPv6CidrBlock,
-               "NatGatewayId" =: _crNatGatewayId,
-               "NetworkInterfaceId" =: _crNetworkInterfaceId,
-               "GatewayId" =: _crGatewayId, "DryRun" =: _crDryRun,
-               "DestinationCidrBlock" =: _crDestinationCidrBlock,
-               "RouteTableId" =: _crRouteTableId]
-
--- | Contains the output of CreateRoute.
---
---
---
--- /See:/ 'createRouteResponse' smart constructor.
-data CreateRouteResponse = CreateRouteResponse'
-    { _crrsReturn         :: !(Maybe Bool)
-    , _crrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateRouteResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'crrsResponseStatus' - -- | The response status code.
-createRouteResponse
-    :: Int -- ^ 'crrsResponseStatus'
-    -> CreateRouteResponse
-createRouteResponse pResponseStatus_ =
-    CreateRouteResponse'
-    { _crrsReturn = Nothing
-    , _crrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-crrsReturn :: Lens' CreateRouteResponse (Maybe Bool)
-crrsReturn = lens _crrsReturn (\ s a -> s{_crrsReturn = a});
-
--- | -- | The response status code.
-crrsResponseStatus :: Lens' CreateRouteResponse Int
-crrsResponseStatus = lens _crrsResponseStatus (\ s a -> s{_crrsResponseStatus = a});
-
-instance NFData CreateRouteResponse
diff --git a/gen/Network/AWS/EC2/CreateRouteTable.hs b/gen/Network/AWS/EC2/CreateRouteTable.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateRouteTable.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateRouteTable
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a route table for the specified VPC. After you create a route table, you can add routes and associate the table with a subnet.
---
---
--- For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateRouteTable
-    (
-    -- * Creating a Request
-      createRouteTable
-    , CreateRouteTable
-    -- * Request Lenses
-    , crtDryRun
-    , crtVPCId
-
-    -- * Destructuring the Response
-    , createRouteTableResponse
-    , CreateRouteTableResponse
-    -- * Response Lenses
-    , crtrsRouteTable
-    , crtrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateRouteTable.
---
---
---
--- /See:/ 'createRouteTable' smart constructor.
-data CreateRouteTable = CreateRouteTable'
-    { _crtDryRun :: !(Maybe Bool)
-    , _crtVPCId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateRouteTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crtDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'crtVPCId' - The ID of the VPC.
-createRouteTable
-    :: Text -- ^ 'crtVPCId'
-    -> CreateRouteTable
-createRouteTable pVPCId_ =
-    CreateRouteTable'
-    { _crtDryRun = Nothing
-    , _crtVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-crtDryRun :: Lens' CreateRouteTable (Maybe Bool)
-crtDryRun = lens _crtDryRun (\ s a -> s{_crtDryRun = a});
-
--- | The ID of the VPC.
-crtVPCId :: Lens' CreateRouteTable Text
-crtVPCId = lens _crtVPCId (\ s a -> s{_crtVPCId = a});
-
-instance AWSRequest CreateRouteTable where
-        type Rs CreateRouteTable = CreateRouteTableResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateRouteTableResponse' <$>
-                   (x .@? "routeTable") <*> (pure (fromEnum s)))
-
-instance Hashable CreateRouteTable
-
-instance NFData CreateRouteTable
-
-instance ToHeaders CreateRouteTable where
-        toHeaders = const mempty
-
-instance ToPath CreateRouteTable where
-        toPath = const "/"
-
-instance ToQuery CreateRouteTable where
-        toQuery CreateRouteTable'{..}
-          = mconcat
-              ["Action" =: ("CreateRouteTable" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _crtDryRun, "VpcId" =: _crtVPCId]
-
--- | Contains the output of CreateRouteTable.
---
---
---
--- /See:/ 'createRouteTableResponse' smart constructor.
-data CreateRouteTableResponse = CreateRouteTableResponse'
-    { _crtrsRouteTable     :: !(Maybe RouteTable)
-    , _crtrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateRouteTableResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crtrsRouteTable' - Information about the route table.
---
--- * 'crtrsResponseStatus' - -- | The response status code.
-createRouteTableResponse
-    :: Int -- ^ 'crtrsResponseStatus'
-    -> CreateRouteTableResponse
-createRouteTableResponse pResponseStatus_ =
-    CreateRouteTableResponse'
-    { _crtrsRouteTable = Nothing
-    , _crtrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the route table.
-crtrsRouteTable :: Lens' CreateRouteTableResponse (Maybe RouteTable)
-crtrsRouteTable = lens _crtrsRouteTable (\ s a -> s{_crtrsRouteTable = a});
-
--- | -- | The response status code.
-crtrsResponseStatus :: Lens' CreateRouteTableResponse Int
-crtrsResponseStatus = lens _crtrsResponseStatus (\ s a -> s{_crtrsResponseStatus = a});
-
-instance NFData CreateRouteTableResponse
diff --git a/gen/Network/AWS/EC2/CreateSecurityGroup.hs b/gen/Network/AWS/EC2/CreateSecurityGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateSecurityGroup.hs
+++ /dev/null
@@ -1,177 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateSecurityGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a security group.
---
---
--- A security group is for use with instances either in the EC2-Classic platform or in a specific VPC. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Amazon EC2 Security Groups> in the /Amazon Elastic Compute Cloud User Guide/ and <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security Groups for Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
--- /Important:/ EC2-Classic: You can have up to 500 security groups.
---
--- EC2-VPC: You can create up to 500 security groups per VPC.
---
--- When you create a security group, you specify a friendly name of your choice. You can have a security group for use in EC2-Classic with the same name as a security group for use in a VPC. However, you can't have two security groups for use in EC2-Classic with the same name or two security groups for use in a VPC with the same name.
---
--- You have a default security group for use in EC2-Classic and a default security group for use in your VPC. If you don't specify a security group when you launch an instance, the instance is launched into the appropriate default security group. A default security group includes a default rule that grants instances unrestricted network access to each other.
---
--- You can add or remove rules from your security groups using 'AuthorizeSecurityGroupIngress' , 'AuthorizeSecurityGroupEgress' , 'RevokeSecurityGroupIngress' , and 'RevokeSecurityGroupEgress' .
---
-module Network.AWS.EC2.CreateSecurityGroup
-    (
-    -- * Creating a Request
-      createSecurityGroup
-    , CreateSecurityGroup
-    -- * Request Lenses
-    , csgVPCId
-    , csgDryRun
-    , csgGroupName
-    , csgDescription
-
-    -- * Destructuring the Response
-    , createSecurityGroupResponse
-    , CreateSecurityGroupResponse
-    -- * Response Lenses
-    , csgrsResponseStatus
-    , csgrsGroupId
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateSecurityGroup.
---
---
---
--- /See:/ 'createSecurityGroup' smart constructor.
-data CreateSecurityGroup = CreateSecurityGroup'
-    { _csgVPCId       :: !(Maybe Text)
-    , _csgDryRun      :: !(Maybe Bool)
-    , _csgGroupName   :: !Text
-    , _csgDescription :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSecurityGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csgVPCId' - [EC2-VPC] The ID of the VPC. Required for EC2-VPC.
---
--- * 'csgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'csgGroupName' - The name of the security group. Constraints: Up to 255 characters in length Constraints for EC2-Classic: ASCII characters Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
---
--- * 'csgDescription' - A description for the security group. This is informational only. Constraints: Up to 255 characters in length Constraints for EC2-Classic: ASCII characters Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
-createSecurityGroup
-    :: Text -- ^ 'csgGroupName'
-    -> Text -- ^ 'csgDescription'
-    -> CreateSecurityGroup
-createSecurityGroup pGroupName_ pDescription_ =
-    CreateSecurityGroup'
-    { _csgVPCId = Nothing
-    , _csgDryRun = Nothing
-    , _csgGroupName = pGroupName_
-    , _csgDescription = pDescription_
-    }
-
--- | [EC2-VPC] The ID of the VPC. Required for EC2-VPC.
-csgVPCId :: Lens' CreateSecurityGroup (Maybe Text)
-csgVPCId = lens _csgVPCId (\ s a -> s{_csgVPCId = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-csgDryRun :: Lens' CreateSecurityGroup (Maybe Bool)
-csgDryRun = lens _csgDryRun (\ s a -> s{_csgDryRun = a});
-
--- | The name of the security group. Constraints: Up to 255 characters in length Constraints for EC2-Classic: ASCII characters Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
-csgGroupName :: Lens' CreateSecurityGroup Text
-csgGroupName = lens _csgGroupName (\ s a -> s{_csgGroupName = a});
-
--- | A description for the security group. This is informational only. Constraints: Up to 255 characters in length Constraints for EC2-Classic: ASCII characters Constraints for EC2-VPC: a-z, A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
-csgDescription :: Lens' CreateSecurityGroup Text
-csgDescription = lens _csgDescription (\ s a -> s{_csgDescription = a});
-
-instance AWSRequest CreateSecurityGroup where
-        type Rs CreateSecurityGroup =
-             CreateSecurityGroupResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateSecurityGroupResponse' <$>
-                   (pure (fromEnum s)) <*> (x .@ "groupId"))
-
-instance Hashable CreateSecurityGroup
-
-instance NFData CreateSecurityGroup
-
-instance ToHeaders CreateSecurityGroup where
-        toHeaders = const mempty
-
-instance ToPath CreateSecurityGroup where
-        toPath = const "/"
-
-instance ToQuery CreateSecurityGroup where
-        toQuery CreateSecurityGroup'{..}
-          = mconcat
-              ["Action" =: ("CreateSecurityGroup" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpcId" =: _csgVPCId, "DryRun" =: _csgDryRun,
-               "GroupName" =: _csgGroupName,
-               "GroupDescription" =: _csgDescription]
-
--- | Contains the output of CreateSecurityGroup.
---
---
---
--- /See:/ 'createSecurityGroupResponse' smart constructor.
-data CreateSecurityGroupResponse = CreateSecurityGroupResponse'
-    { _csgrsResponseStatus :: !Int
-    , _csgrsGroupId        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSecurityGroupResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csgrsResponseStatus' - -- | The response status code.
---
--- * 'csgrsGroupId' - The ID of the security group.
-createSecurityGroupResponse
-    :: Int -- ^ 'csgrsResponseStatus'
-    -> Text -- ^ 'csgrsGroupId'
-    -> CreateSecurityGroupResponse
-createSecurityGroupResponse pResponseStatus_ pGroupId_ =
-    CreateSecurityGroupResponse'
-    { _csgrsResponseStatus = pResponseStatus_
-    , _csgrsGroupId = pGroupId_
-    }
-
--- | -- | The response status code.
-csgrsResponseStatus :: Lens' CreateSecurityGroupResponse Int
-csgrsResponseStatus = lens _csgrsResponseStatus (\ s a -> s{_csgrsResponseStatus = a});
-
--- | The ID of the security group.
-csgrsGroupId :: Lens' CreateSecurityGroupResponse Text
-csgrsGroupId = lens _csgrsGroupId (\ s a -> s{_csgrsGroupId = a});
-
-instance NFData CreateSecurityGroupResponse
diff --git a/gen/Network/AWS/EC2/CreateSnapshot.hs b/gen/Network/AWS/EC2/CreateSnapshot.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateSnapshot.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a snapshot of an EBS volume and stores it in Amazon S3. You can use snapshots for backups, to make copies of EBS volumes, and to save data before shutting down an instance.
---
---
--- When a snapshot is created, any AWS Marketplace product codes that are associated with the source volume are propagated to the snapshot.
---
--- You can take a snapshot of an attached volume that is in use. However, snapshots only capture data that has been written to your EBS volume at the time the snapshot command is issued; this may exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the volume long enough to take a snapshot, your snapshot should be complete. However, if you cannot pause all file writes to the volume, you should unmount the volume from within the instance, issue the snapshot command, and then remount the volume to ensure a consistent and complete snapshot. You may remount and use your volume while the snapshot status is @pending@ .
---
--- To create a snapshot for EBS volumes that serve as root devices, you should stop the instance before taking the snapshot.
---
--- Snapshots that are taken from encrypted volumes are automatically encrypted. Volumes that are created from encrypted snapshots are also automatically encrypted. Your encrypted volumes and any associated snapshots always remain protected.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html Amazon Elastic Block Store> and <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateSnapshot
-    (
-    -- * Creating a Request
-      createSnapshot
-    , CreateSnapshot
-    -- * Request Lenses
-    , ccDescription
-    , ccDryRun
-    , ccVolumeId
-
-    -- * Destructuring the Response
-    , snapshot
-    , Snapshot
-    -- * Response Lenses
-    , sStateMessage
-    , sOwnerAlias
-    , sDataEncryptionKeyId
-    , sKMSKeyId
-    , sTags
-    , sSnapshotId
-    , sOwnerId
-    , sVolumeId
-    , sVolumeSize
-    , sDescription
-    , sStartTime
-    , sProgress
-    , sState
-    , sEncrypted
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateSnapshot.
---
---
---
--- /See:/ 'createSnapshot' smart constructor.
-data CreateSnapshot = CreateSnapshot'
-    { _ccDescription :: !(Maybe Text)
-    , _ccDryRun      :: !(Maybe Bool)
-    , _ccVolumeId    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSnapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccDescription' - A description for the snapshot.
---
--- * 'ccDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ccVolumeId' - The ID of the EBS volume.
-createSnapshot
-    :: Text -- ^ 'ccVolumeId'
-    -> CreateSnapshot
-createSnapshot pVolumeId_ =
-    CreateSnapshot'
-    { _ccDescription = Nothing
-    , _ccDryRun = Nothing
-    , _ccVolumeId = pVolumeId_
-    }
-
--- | A description for the snapshot.
-ccDescription :: Lens' CreateSnapshot (Maybe Text)
-ccDescription = lens _ccDescription (\ s a -> s{_ccDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ccDryRun :: Lens' CreateSnapshot (Maybe Bool)
-ccDryRun = lens _ccDryRun (\ s a -> s{_ccDryRun = a});
-
--- | The ID of the EBS volume.
-ccVolumeId :: Lens' CreateSnapshot Text
-ccVolumeId = lens _ccVolumeId (\ s a -> s{_ccVolumeId = a});
-
-instance AWSRequest CreateSnapshot where
-        type Rs CreateSnapshot = Snapshot
-        request = postQuery ec2
-        response = receiveXML (\ s h x -> parseXML x)
-
-instance Hashable CreateSnapshot
-
-instance NFData CreateSnapshot
-
-instance ToHeaders CreateSnapshot where
-        toHeaders = const mempty
-
-instance ToPath CreateSnapshot where
-        toPath = const "/"
-
-instance ToQuery CreateSnapshot where
-        toQuery CreateSnapshot'{..}
-          = mconcat
-              ["Action" =: ("CreateSnapshot" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Description" =: _ccDescription,
-               "DryRun" =: _ccDryRun, "VolumeId" =: _ccVolumeId]
diff --git a/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs b/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateSpotDatafeedSubscription
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a data feed for Spot instances, enabling you to view Spot instance usage logs. You can create one data feed per AWS account. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html Spot Instance Data Feed> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.CreateSpotDatafeedSubscription
-    (
-    -- * Creating a Request
-      createSpotDatafeedSubscription
-    , CreateSpotDatafeedSubscription
-    -- * Request Lenses
-    , csdsPrefix
-    , csdsDryRun
-    , csdsBucket
-
-    -- * Destructuring the Response
-    , createSpotDatafeedSubscriptionResponse
-    , CreateSpotDatafeedSubscriptionResponse
-    -- * Response Lenses
-    , csdsrsSpotDatafeedSubscription
-    , csdsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateSpotDatafeedSubscription.
---
---
---
--- /See:/ 'createSpotDatafeedSubscription' smart constructor.
-data CreateSpotDatafeedSubscription = CreateSpotDatafeedSubscription'
-    { _csdsPrefix :: !(Maybe Text)
-    , _csdsDryRun :: !(Maybe Bool)
-    , _csdsBucket :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSpotDatafeedSubscription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csdsPrefix' - A prefix for the data feed file names.
---
--- * 'csdsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'csdsBucket' - The Amazon S3 bucket in which to store the Spot instance data feed.
-createSpotDatafeedSubscription
-    :: Text -- ^ 'csdsBucket'
-    -> CreateSpotDatafeedSubscription
-createSpotDatafeedSubscription pBucket_ =
-    CreateSpotDatafeedSubscription'
-    { _csdsPrefix = Nothing
-    , _csdsDryRun = Nothing
-    , _csdsBucket = pBucket_
-    }
-
--- | A prefix for the data feed file names.
-csdsPrefix :: Lens' CreateSpotDatafeedSubscription (Maybe Text)
-csdsPrefix = lens _csdsPrefix (\ s a -> s{_csdsPrefix = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-csdsDryRun :: Lens' CreateSpotDatafeedSubscription (Maybe Bool)
-csdsDryRun = lens _csdsDryRun (\ s a -> s{_csdsDryRun = a});
-
--- | The Amazon S3 bucket in which to store the Spot instance data feed.
-csdsBucket :: Lens' CreateSpotDatafeedSubscription Text
-csdsBucket = lens _csdsBucket (\ s a -> s{_csdsBucket = a});
-
-instance AWSRequest CreateSpotDatafeedSubscription
-         where
-        type Rs CreateSpotDatafeedSubscription =
-             CreateSpotDatafeedSubscriptionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateSpotDatafeedSubscriptionResponse' <$>
-                   (x .@? "spotDatafeedSubscription") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CreateSpotDatafeedSubscription
-
-instance NFData CreateSpotDatafeedSubscription
-
-instance ToHeaders CreateSpotDatafeedSubscription
-         where
-        toHeaders = const mempty
-
-instance ToPath CreateSpotDatafeedSubscription where
-        toPath = const "/"
-
-instance ToQuery CreateSpotDatafeedSubscription where
-        toQuery CreateSpotDatafeedSubscription'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateSpotDatafeedSubscription" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Prefix" =: _csdsPrefix, "DryRun" =: _csdsDryRun,
-               "Bucket" =: _csdsBucket]
-
--- | Contains the output of CreateSpotDatafeedSubscription.
---
---
---
--- /See:/ 'createSpotDatafeedSubscriptionResponse' smart constructor.
-data CreateSpotDatafeedSubscriptionResponse = CreateSpotDatafeedSubscriptionResponse'
-    { _csdsrsSpotDatafeedSubscription :: !(Maybe SpotDatafeedSubscription)
-    , _csdsrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSpotDatafeedSubscriptionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csdsrsSpotDatafeedSubscription' - The Spot instance data feed subscription.
---
--- * 'csdsrsResponseStatus' - -- | The response status code.
-createSpotDatafeedSubscriptionResponse
-    :: Int -- ^ 'csdsrsResponseStatus'
-    -> CreateSpotDatafeedSubscriptionResponse
-createSpotDatafeedSubscriptionResponse pResponseStatus_ =
-    CreateSpotDatafeedSubscriptionResponse'
-    { _csdsrsSpotDatafeedSubscription = Nothing
-    , _csdsrsResponseStatus = pResponseStatus_
-    }
-
--- | The Spot instance data feed subscription.
-csdsrsSpotDatafeedSubscription :: Lens' CreateSpotDatafeedSubscriptionResponse (Maybe SpotDatafeedSubscription)
-csdsrsSpotDatafeedSubscription = lens _csdsrsSpotDatafeedSubscription (\ s a -> s{_csdsrsSpotDatafeedSubscription = a});
-
--- | -- | The response status code.
-csdsrsResponseStatus :: Lens' CreateSpotDatafeedSubscriptionResponse Int
-csdsrsResponseStatus = lens _csdsrsResponseStatus (\ s a -> s{_csdsrsResponseStatus = a});
-
-instance NFData
-         CreateSpotDatafeedSubscriptionResponse
diff --git a/gen/Network/AWS/EC2/CreateSubnet.hs b/gen/Network/AWS/EC2/CreateSubnet.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateSubnet.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateSubnet
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a subnet in an existing VPC.
---
---
--- When you create each subnet, you provide the VPC ID and the CIDR block you want for the subnet. After you create a subnet, you can't change its CIDR block. The subnet's IPv4 CIDR block can be the same as the VPC's IPv4 CIDR block (assuming you want only a single subnet in the VPC), or a subset of the VPC's IPv4 CIDR block. If you create more than one subnet in a VPC, the subnets' CIDR blocks must not overlap. The smallest IPv4 subnet (and VPC) you can create uses a /28 netmask (16 IPv4 addresses), and the largest uses a /16 netmask (65,536 IPv4 addresses).
---
--- If you've associated an IPv6 CIDR block with your VPC, you can create a subnet with an IPv6 CIDR block that uses a /64 prefix length.
---
--- /Important:/ AWS reserves both the first four and the last IP address in each subnet's CIDR block. They're not available for use.
---
--- If you add more than one subnet to a VPC, they're set up in a star topology with a logical router in the middle.
---
--- If you launch an instance in a VPC using an Amazon EBS-backed AMI, the IP address doesn't change if you stop and restart the instance (unlike a similar instance launched outside a VPC, which gets a new IP address when restarted). It's therefore possible to have a subnet with no running instances (they're all stopped), but no remaining IP addresses available.
---
--- For more information about subnets, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html Your VPC and Subnets> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateSubnet
-    (
-    -- * Creating a Request
-      createSubnet
-    , CreateSubnet
-    -- * Request Lenses
-    , cssIPv6CidrBlock
-    , cssAvailabilityZone
-    , cssDryRun
-    , cssVPCId
-    , cssCidrBlock
-
-    -- * Destructuring the Response
-    , createSubnetResponse
-    , CreateSubnetResponse
-    -- * Response Lenses
-    , crsSubnet
-    , crsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateSubnet.
---
---
---
--- /See:/ 'createSubnet' smart constructor.
-data CreateSubnet = CreateSubnet'
-    { _cssIPv6CidrBlock    :: !(Maybe Text)
-    , _cssAvailabilityZone :: !(Maybe Text)
-    , _cssDryRun           :: !(Maybe Bool)
-    , _cssVPCId            :: !Text
-    , _cssCidrBlock        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSubnet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cssIPv6CidrBlock' - The IPv6 network range for the subnet, in CIDR notation. The subnet size must use a /64 prefix length.
---
--- * 'cssAvailabilityZone' - The Availability Zone for the subnet. Default: AWS selects one for you. If you create more than one subnet in your VPC, we may not necessarily select a different zone for each subnet.
---
--- * 'cssDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cssVPCId' - The ID of the VPC.
---
--- * 'cssCidrBlock' - The IPv4 network range for the subnet, in CIDR notation. For example, @10.0.0.0/24@ .
-createSubnet
-    :: Text -- ^ 'cssVPCId'
-    -> Text -- ^ 'cssCidrBlock'
-    -> CreateSubnet
-createSubnet pVPCId_ pCidrBlock_ =
-    CreateSubnet'
-    { _cssIPv6CidrBlock = Nothing
-    , _cssAvailabilityZone = Nothing
-    , _cssDryRun = Nothing
-    , _cssVPCId = pVPCId_
-    , _cssCidrBlock = pCidrBlock_
-    }
-
--- | The IPv6 network range for the subnet, in CIDR notation. The subnet size must use a /64 prefix length.
-cssIPv6CidrBlock :: Lens' CreateSubnet (Maybe Text)
-cssIPv6CidrBlock = lens _cssIPv6CidrBlock (\ s a -> s{_cssIPv6CidrBlock = a});
-
--- | The Availability Zone for the subnet. Default: AWS selects one for you. If you create more than one subnet in your VPC, we may not necessarily select a different zone for each subnet.
-cssAvailabilityZone :: Lens' CreateSubnet (Maybe Text)
-cssAvailabilityZone = lens _cssAvailabilityZone (\ s a -> s{_cssAvailabilityZone = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cssDryRun :: Lens' CreateSubnet (Maybe Bool)
-cssDryRun = lens _cssDryRun (\ s a -> s{_cssDryRun = a});
-
--- | The ID of the VPC.
-cssVPCId :: Lens' CreateSubnet Text
-cssVPCId = lens _cssVPCId (\ s a -> s{_cssVPCId = a});
-
--- | The IPv4 network range for the subnet, in CIDR notation. For example, @10.0.0.0/24@ .
-cssCidrBlock :: Lens' CreateSubnet Text
-cssCidrBlock = lens _cssCidrBlock (\ s a -> s{_cssCidrBlock = a});
-
-instance AWSRequest CreateSubnet where
-        type Rs CreateSubnet = CreateSubnetResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateSubnetResponse' <$>
-                   (x .@? "subnet") <*> (pure (fromEnum s)))
-
-instance Hashable CreateSubnet
-
-instance NFData CreateSubnet
-
-instance ToHeaders CreateSubnet where
-        toHeaders = const mempty
-
-instance ToPath CreateSubnet where
-        toPath = const "/"
-
-instance ToQuery CreateSubnet where
-        toQuery CreateSubnet'{..}
-          = mconcat
-              ["Action" =: ("CreateSubnet" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Ipv6CidrBlock" =: _cssIPv6CidrBlock,
-               "AvailabilityZone" =: _cssAvailabilityZone,
-               "DryRun" =: _cssDryRun, "VpcId" =: _cssVPCId,
-               "CidrBlock" =: _cssCidrBlock]
-
--- | Contains the output of CreateSubnet.
---
---
---
--- /See:/ 'createSubnetResponse' smart constructor.
-data CreateSubnetResponse = CreateSubnetResponse'
-    { _crsSubnet         :: !(Maybe Subnet)
-    , _crsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateSubnetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crsSubnet' - Information about the subnet.
---
--- * 'crsResponseStatus' - -- | The response status code.
-createSubnetResponse
-    :: Int -- ^ 'crsResponseStatus'
-    -> CreateSubnetResponse
-createSubnetResponse pResponseStatus_ =
-    CreateSubnetResponse'
-    { _crsSubnet = Nothing
-    , _crsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the subnet.
-crsSubnet :: Lens' CreateSubnetResponse (Maybe Subnet)
-crsSubnet = lens _crsSubnet (\ s a -> s{_crsSubnet = a});
-
--- | -- | The response status code.
-crsResponseStatus :: Lens' CreateSubnetResponse Int
-crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});
-
-instance NFData CreateSubnetResponse
diff --git a/gen/Network/AWS/EC2/CreateTags.hs b/gen/Network/AWS/EC2/CreateTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateTags.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateTags
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Adds or overwrites one or more tags for the specified Amazon EC2 resource or resources. Each resource can have a maximum of 50 tags. Each tag consists of a key and optional value. Tag keys must be unique per resource.
---
---
--- For more information about tags, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging Your Resources> in the /Amazon Elastic Compute Cloud User Guide/ . For more information about creating IAM policies that control users' access to resources based on tags, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html Supported Resource-Level Permissions for Amazon EC2 API Actions> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateTags
-    (
-    -- * Creating a Request
-      createTags
-    , CreateTags
-    -- * Request Lenses
-    , cDryRun
-    , cResources
-    , cTags
-
-    -- * Destructuring the Response
-    , createTagsResponse
-    , CreateTagsResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateTags.
---
---
---
--- /See:/ 'createTags' smart constructor.
-data CreateTags = CreateTags'
-    { _cDryRun    :: !(Maybe Bool)
-    , _cResources :: ![Text]
-    , _cTags      :: ![Tag]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cResources' - The IDs of one or more resources to tag. For example, ami-1a2b3c4d.
---
--- * 'cTags' - One or more tags. The @value@ parameter is required, but if you don't want the tag to have a value, specify the parameter with no value, and we set the value to an empty string.
-createTags
-    :: CreateTags
-createTags =
-    CreateTags'
-    { _cDryRun = Nothing
-    , _cResources = mempty
-    , _cTags = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cDryRun :: Lens' CreateTags (Maybe Bool)
-cDryRun = lens _cDryRun (\ s a -> s{_cDryRun = a});
-
--- | The IDs of one or more resources to tag. For example, ami-1a2b3c4d.
-cResources :: Lens' CreateTags [Text]
-cResources = lens _cResources (\ s a -> s{_cResources = a}) . _Coerce;
-
--- | One or more tags. The @value@ parameter is required, but if you don't want the tag to have a value, specify the parameter with no value, and we set the value to an empty string.
-cTags :: Lens' CreateTags [Tag]
-cTags = lens _cTags (\ s a -> s{_cTags = a}) . _Coerce;
-
-instance AWSRequest CreateTags where
-        type Rs CreateTags = CreateTagsResponse
-        request = postQuery ec2
-        response = receiveNull CreateTagsResponse'
-
-instance Hashable CreateTags
-
-instance NFData CreateTags
-
-instance ToHeaders CreateTags where
-        toHeaders = const mempty
-
-instance ToPath CreateTags where
-        toPath = const "/"
-
-instance ToQuery CreateTags where
-        toQuery CreateTags'{..}
-          = mconcat
-              ["Action" =: ("CreateTags" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _cDryRun,
-               toQueryList "ResourceId" _cResources,
-               toQueryList "Tag" _cTags]
-
--- | /See:/ 'createTagsResponse' smart constructor.
-data CreateTagsResponse =
-    CreateTagsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateTagsResponse' with the minimum fields required to make a request.
---
-createTagsResponse
-    :: CreateTagsResponse
-createTagsResponse = CreateTagsResponse'
-
-instance NFData CreateTagsResponse
diff --git a/gen/Network/AWS/EC2/CreateVPC.hs b/gen/Network/AWS/EC2/CreateVPC.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVPC.hs
+++ /dev/null
@@ -1,169 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a VPC with the specified IPv4 CIDR block. The smallest VPC you can create uses a /28 netmask (16 IPv4 addresses), and the largest uses a /16 netmask (65,536 IPv4 addresses). To help you decide how big to make your VPC, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html Your VPC and Subnets> in the /Amazon Virtual Private Cloud User Guide/ .
---
---
--- You can optionally request an Amazon-provided IPv6 CIDR block for the VPC. The IPv6 CIDR block uses a /56 prefix length, and is allocated from Amazon's pool of IPv6 addresses. You cannot choose the IPv6 range for your VPC.
---
--- By default, each instance you launch in the VPC has the default DHCP options, which includes only a default DNS server that we provide (AmazonProvidedDNS). For more information about DHCP options, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets> in the /Amazon Virtual Private Cloud User Guide/ .
---
--- You can specify the instance tenancy value for the VPC when you create it. You can't change this value for the VPC after you create it. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/dedicated-instance.html.html Dedicated Instances> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateVPC
-    (
-    -- * Creating a Request
-      createVPC
-    , CreateVPC
-    -- * Request Lenses
-    , cvAmazonProvidedIPv6CidrBlock
-    , cvInstanceTenancy
-    , cvDryRun
-    , cvCidrBlock
-
-    -- * Destructuring the Response
-    , createVPCResponse
-    , CreateVPCResponse
-    -- * Response Lenses
-    , cvrsVPC
-    , cvrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVpc.
---
---
---
--- /See:/ 'createVPC' smart constructor.
-data CreateVPC = CreateVPC'
-    { _cvAmazonProvidedIPv6CidrBlock :: !(Maybe Bool)
-    , _cvInstanceTenancy             :: !(Maybe Tenancy)
-    , _cvDryRun                      :: !(Maybe Bool)
-    , _cvCidrBlock                   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvAmazonProvidedIPv6CidrBlock' - Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.
---
--- * 'cvInstanceTenancy' - The tenancy options for instances launched into the VPC. For @default@ , instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For @dedicated@ , instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of @dedicated@ or @host@ into a dedicated tenancy VPC.  __Important:__ The @host@ value cannot be used with this parameter. Use the @default@ or @dedicated@ values only. Default: @default@
---
--- * 'cvDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cvCidrBlock' - The IPv4 network range for the VPC, in CIDR notation. For example, @10.0.0.0/16@ .
-createVPC
-    :: Text -- ^ 'cvCidrBlock'
-    -> CreateVPC
-createVPC pCidrBlock_ =
-    CreateVPC'
-    { _cvAmazonProvidedIPv6CidrBlock = Nothing
-    , _cvInstanceTenancy = Nothing
-    , _cvDryRun = Nothing
-    , _cvCidrBlock = pCidrBlock_
-    }
-
--- | Requests an Amazon-provided IPv6 CIDR block with a /56 prefix length for the VPC. You cannot specify the range of IP addresses, or the size of the CIDR block.
-cvAmazonProvidedIPv6CidrBlock :: Lens' CreateVPC (Maybe Bool)
-cvAmazonProvidedIPv6CidrBlock = lens _cvAmazonProvidedIPv6CidrBlock (\ s a -> s{_cvAmazonProvidedIPv6CidrBlock = a});
-
--- | The tenancy options for instances launched into the VPC. For @default@ , instances are launched with shared tenancy by default. You can launch instances with any tenancy into a shared tenancy VPC. For @dedicated@ , instances are launched as dedicated tenancy instances by default. You can only launch instances with a tenancy of @dedicated@ or @host@ into a dedicated tenancy VPC.  __Important:__ The @host@ value cannot be used with this parameter. Use the @default@ or @dedicated@ values only. Default: @default@
-cvInstanceTenancy :: Lens' CreateVPC (Maybe Tenancy)
-cvInstanceTenancy = lens _cvInstanceTenancy (\ s a -> s{_cvInstanceTenancy = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cvDryRun :: Lens' CreateVPC (Maybe Bool)
-cvDryRun = lens _cvDryRun (\ s a -> s{_cvDryRun = a});
-
--- | The IPv4 network range for the VPC, in CIDR notation. For example, @10.0.0.0/16@ .
-cvCidrBlock :: Lens' CreateVPC Text
-cvCidrBlock = lens _cvCidrBlock (\ s a -> s{_cvCidrBlock = a});
-
-instance AWSRequest CreateVPC where
-        type Rs CreateVPC = CreateVPCResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateVPCResponse' <$>
-                   (x .@? "vpc") <*> (pure (fromEnum s)))
-
-instance Hashable CreateVPC
-
-instance NFData CreateVPC
-
-instance ToHeaders CreateVPC where
-        toHeaders = const mempty
-
-instance ToPath CreateVPC where
-        toPath = const "/"
-
-instance ToQuery CreateVPC where
-        toQuery CreateVPC'{..}
-          = mconcat
-              ["Action" =: ("CreateVpc" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AmazonProvidedIpv6CidrBlock" =:
-                 _cvAmazonProvidedIPv6CidrBlock,
-               "InstanceTenancy" =: _cvInstanceTenancy,
-               "DryRun" =: _cvDryRun, "CidrBlock" =: _cvCidrBlock]
-
--- | Contains the output of CreateVpc.
---
---
---
--- /See:/ 'createVPCResponse' smart constructor.
-data CreateVPCResponse = CreateVPCResponse'
-    { _cvrsVPC            :: !(Maybe VPC)
-    , _cvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPCResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvrsVPC' - Information about the VPC.
---
--- * 'cvrsResponseStatus' - -- | The response status code.
-createVPCResponse
-    :: Int -- ^ 'cvrsResponseStatus'
-    -> CreateVPCResponse
-createVPCResponse pResponseStatus_ =
-    CreateVPCResponse'
-    { _cvrsVPC = Nothing
-    , _cvrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPC.
-cvrsVPC :: Lens' CreateVPCResponse (Maybe VPC)
-cvrsVPC = lens _cvrsVPC (\ s a -> s{_cvrsVPC = a});
-
--- | -- | The response status code.
-cvrsResponseStatus :: Lens' CreateVPCResponse Int
-cvrsResponseStatus = lens _cvrsResponseStatus (\ s a -> s{_cvrsResponseStatus = a});
-
-instance NFData CreateVPCResponse
diff --git a/gen/Network/AWS/EC2/CreateVPCEndpoint.hs b/gen/Network/AWS/EC2/CreateVPCEndpoint.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVPCEndpoint.hs
+++ /dev/null
@@ -1,197 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVPCEndpoint
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a VPC endpoint for a specified AWS service. An endpoint enables you to create a private connection between your VPC and another AWS service in your account. You can specify an endpoint policy to attach to the endpoint that will control access to the service from your VPC. You can also specify the VPC route tables that use the endpoint.
---
---
--- Currently, only endpoints to Amazon S3 are supported.
---
-module Network.AWS.EC2.CreateVPCEndpoint
-    (
-    -- * Creating a Request
-      createVPCEndpoint
-    , CreateVPCEndpoint
-    -- * Request Lenses
-    , cvePolicyDocument
-    , cveClientToken
-    , cveDryRun
-    , cveRouteTableIds
-    , cveVPCId
-    , cveServiceName
-
-    -- * Destructuring the Response
-    , createVPCEndpointResponse
-    , CreateVPCEndpointResponse
-    -- * Response Lenses
-    , cversClientToken
-    , cversVPCEndpoint
-    , cversResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVpcEndpoint.
---
---
---
--- /See:/ 'createVPCEndpoint' smart constructor.
-data CreateVPCEndpoint = CreateVPCEndpoint'
-    { _cvePolicyDocument :: !(Maybe Text)
-    , _cveClientToken    :: !(Maybe Text)
-    , _cveDryRun         :: !(Maybe Bool)
-    , _cveRouteTableIds  :: !(Maybe [Text])
-    , _cveVPCId          :: !Text
-    , _cveServiceName    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPCEndpoint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvePolicyDocument' - A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format. If this parameter is not specified, we attach a default policy that allows full access to the service.
---
--- * 'cveClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to Ensure Idempotency> .
---
--- * 'cveDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cveRouteTableIds' - One or more route table IDs.
---
--- * 'cveVPCId' - The ID of the VPC in which the endpoint will be used.
---
--- * 'cveServiceName' - The AWS service name, in the form @com.amazonaws./region/ ./service/ @ . To get a list of available services, use the 'DescribeVpcEndpointServices' request.
-createVPCEndpoint
-    :: Text -- ^ 'cveVPCId'
-    -> Text -- ^ 'cveServiceName'
-    -> CreateVPCEndpoint
-createVPCEndpoint pVPCId_ pServiceName_ =
-    CreateVPCEndpoint'
-    { _cvePolicyDocument = Nothing
-    , _cveClientToken = Nothing
-    , _cveDryRun = Nothing
-    , _cveRouteTableIds = Nothing
-    , _cveVPCId = pVPCId_
-    , _cveServiceName = pServiceName_
-    }
-
--- | A policy to attach to the endpoint that controls access to the service. The policy must be in valid JSON format. If this parameter is not specified, we attach a default policy that allows full access to the service.
-cvePolicyDocument :: Lens' CreateVPCEndpoint (Maybe Text)
-cvePolicyDocument = lens _cvePolicyDocument (\ s a -> s{_cvePolicyDocument = a});
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html How to Ensure Idempotency> .
-cveClientToken :: Lens' CreateVPCEndpoint (Maybe Text)
-cveClientToken = lens _cveClientToken (\ s a -> s{_cveClientToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cveDryRun :: Lens' CreateVPCEndpoint (Maybe Bool)
-cveDryRun = lens _cveDryRun (\ s a -> s{_cveDryRun = a});
-
--- | One or more route table IDs.
-cveRouteTableIds :: Lens' CreateVPCEndpoint [Text]
-cveRouteTableIds = lens _cveRouteTableIds (\ s a -> s{_cveRouteTableIds = a}) . _Default . _Coerce;
-
--- | The ID of the VPC in which the endpoint will be used.
-cveVPCId :: Lens' CreateVPCEndpoint Text
-cveVPCId = lens _cveVPCId (\ s a -> s{_cveVPCId = a});
-
--- | The AWS service name, in the form @com.amazonaws./region/ ./service/ @ . To get a list of available services, use the 'DescribeVpcEndpointServices' request.
-cveServiceName :: Lens' CreateVPCEndpoint Text
-cveServiceName = lens _cveServiceName (\ s a -> s{_cveServiceName = a});
-
-instance AWSRequest CreateVPCEndpoint where
-        type Rs CreateVPCEndpoint = CreateVPCEndpointResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateVPCEndpointResponse' <$>
-                   (x .@? "clientToken") <*> (x .@? "vpcEndpoint") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CreateVPCEndpoint
-
-instance NFData CreateVPCEndpoint
-
-instance ToHeaders CreateVPCEndpoint where
-        toHeaders = const mempty
-
-instance ToPath CreateVPCEndpoint where
-        toPath = const "/"
-
-instance ToQuery CreateVPCEndpoint where
-        toQuery CreateVPCEndpoint'{..}
-          = mconcat
-              ["Action" =: ("CreateVpcEndpoint" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "PolicyDocument" =: _cvePolicyDocument,
-               "ClientToken" =: _cveClientToken,
-               "DryRun" =: _cveDryRun,
-               toQuery
-                 (toQueryList "RouteTableId" <$> _cveRouteTableIds),
-               "VpcId" =: _cveVPCId,
-               "ServiceName" =: _cveServiceName]
-
--- | Contains the output of CreateVpcEndpoint.
---
---
---
--- /See:/ 'createVPCEndpointResponse' smart constructor.
-data CreateVPCEndpointResponse = CreateVPCEndpointResponse'
-    { _cversClientToken    :: !(Maybe Text)
-    , _cversVPCEndpoint    :: !(Maybe VPCEndpoint)
-    , _cversResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPCEndpointResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cversClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
---
--- * 'cversVPCEndpoint' - Information about the endpoint.
---
--- * 'cversResponseStatus' - -- | The response status code.
-createVPCEndpointResponse
-    :: Int -- ^ 'cversResponseStatus'
-    -> CreateVPCEndpointResponse
-createVPCEndpointResponse pResponseStatus_ =
-    CreateVPCEndpointResponse'
-    { _cversClientToken = Nothing
-    , _cversVPCEndpoint = Nothing
-    , _cversResponseStatus = pResponseStatus_
-    }
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request.
-cversClientToken :: Lens' CreateVPCEndpointResponse (Maybe Text)
-cversClientToken = lens _cversClientToken (\ s a -> s{_cversClientToken = a});
-
--- | Information about the endpoint.
-cversVPCEndpoint :: Lens' CreateVPCEndpointResponse (Maybe VPCEndpoint)
-cversVPCEndpoint = lens _cversVPCEndpoint (\ s a -> s{_cversVPCEndpoint = a});
-
--- | -- | The response status code.
-cversResponseStatus :: Lens' CreateVPCEndpointResponse Int
-cversResponseStatus = lens _cversResponseStatus (\ s a -> s{_cversResponseStatus = a});
-
-instance NFData CreateVPCEndpointResponse
diff --git a/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs b/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs
+++ /dev/null
@@ -1,168 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVPCPeeringConnection
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Requests a VPC peering connection between two VPCs: a requester VPC that you own and a peer VPC with which to create the connection. The peer VPC can belong to another AWS account. The requester VPC and peer VPC cannot have overlapping CIDR blocks.
---
---
--- The owner of the peer VPC must accept the peering request to activate the peering connection. The VPC peering connection request expires after 7 days, after which it cannot be accepted or rejected.
---
--- A @CreateVpcPeeringConnection@ request between VPCs with overlapping CIDR blocks results in the VPC peering connection having a status of @failed@ .
---
-module Network.AWS.EC2.CreateVPCPeeringConnection
-    (
-    -- * Creating a Request
-      createVPCPeeringConnection
-    , CreateVPCPeeringConnection
-    -- * Request Lenses
-    , cvpcPeerVPCId
-    , cvpcVPCId
-    , cvpcPeerOwnerId
-    , cvpcDryRun
-
-    -- * Destructuring the Response
-    , createVPCPeeringConnectionResponse
-    , CreateVPCPeeringConnectionResponse
-    -- * Response Lenses
-    , cvpcrsVPCPeeringConnection
-    , cvpcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVpcPeeringConnection.
---
---
---
--- /See:/ 'createVPCPeeringConnection' smart constructor.
-data CreateVPCPeeringConnection = CreateVPCPeeringConnection'
-    { _cvpcPeerVPCId   :: !(Maybe Text)
-    , _cvpcVPCId       :: !(Maybe Text)
-    , _cvpcPeerOwnerId :: !(Maybe Text)
-    , _cvpcDryRun      :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPCPeeringConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvpcPeerVPCId' - The ID of the VPC with which you are creating the VPC peering connection.
---
--- * 'cvpcVPCId' - The ID of the requester VPC.
---
--- * 'cvpcPeerOwnerId' - The AWS account ID of the owner of the peer VPC. Default: Your AWS account ID
---
--- * 'cvpcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-createVPCPeeringConnection
-    :: CreateVPCPeeringConnection
-createVPCPeeringConnection =
-    CreateVPCPeeringConnection'
-    { _cvpcPeerVPCId = Nothing
-    , _cvpcVPCId = Nothing
-    , _cvpcPeerOwnerId = Nothing
-    , _cvpcDryRun = Nothing
-    }
-
--- | The ID of the VPC with which you are creating the VPC peering connection.
-cvpcPeerVPCId :: Lens' CreateVPCPeeringConnection (Maybe Text)
-cvpcPeerVPCId = lens _cvpcPeerVPCId (\ s a -> s{_cvpcPeerVPCId = a});
-
--- | The ID of the requester VPC.
-cvpcVPCId :: Lens' CreateVPCPeeringConnection (Maybe Text)
-cvpcVPCId = lens _cvpcVPCId (\ s a -> s{_cvpcVPCId = a});
-
--- | The AWS account ID of the owner of the peer VPC. Default: Your AWS account ID
-cvpcPeerOwnerId :: Lens' CreateVPCPeeringConnection (Maybe Text)
-cvpcPeerOwnerId = lens _cvpcPeerOwnerId (\ s a -> s{_cvpcPeerOwnerId = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cvpcDryRun :: Lens' CreateVPCPeeringConnection (Maybe Bool)
-cvpcDryRun = lens _cvpcDryRun (\ s a -> s{_cvpcDryRun = a});
-
-instance AWSRequest CreateVPCPeeringConnection where
-        type Rs CreateVPCPeeringConnection =
-             CreateVPCPeeringConnectionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateVPCPeeringConnectionResponse' <$>
-                   (x .@? "vpcPeeringConnection") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CreateVPCPeeringConnection
-
-instance NFData CreateVPCPeeringConnection
-
-instance ToHeaders CreateVPCPeeringConnection where
-        toHeaders = const mempty
-
-instance ToPath CreateVPCPeeringConnection where
-        toPath = const "/"
-
-instance ToQuery CreateVPCPeeringConnection where
-        toQuery CreateVPCPeeringConnection'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateVpcPeeringConnection" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "PeerVpcId" =: _cvpcPeerVPCId, "VpcId" =: _cvpcVPCId,
-               "PeerOwnerId" =: _cvpcPeerOwnerId,
-               "DryRun" =: _cvpcDryRun]
-
--- | Contains the output of CreateVpcPeeringConnection.
---
---
---
--- /See:/ 'createVPCPeeringConnectionResponse' smart constructor.
-data CreateVPCPeeringConnectionResponse = CreateVPCPeeringConnectionResponse'
-    { _cvpcrsVPCPeeringConnection :: !(Maybe VPCPeeringConnection)
-    , _cvpcrsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPCPeeringConnectionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvpcrsVPCPeeringConnection' - Information about the VPC peering connection.
---
--- * 'cvpcrsResponseStatus' - -- | The response status code.
-createVPCPeeringConnectionResponse
-    :: Int -- ^ 'cvpcrsResponseStatus'
-    -> CreateVPCPeeringConnectionResponse
-createVPCPeeringConnectionResponse pResponseStatus_ =
-    CreateVPCPeeringConnectionResponse'
-    { _cvpcrsVPCPeeringConnection = Nothing
-    , _cvpcrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPC peering connection.
-cvpcrsVPCPeeringConnection :: Lens' CreateVPCPeeringConnectionResponse (Maybe VPCPeeringConnection)
-cvpcrsVPCPeeringConnection = lens _cvpcrsVPCPeeringConnection (\ s a -> s{_cvpcrsVPCPeeringConnection = a});
-
--- | -- | The response status code.
-cvpcrsResponseStatus :: Lens' CreateVPCPeeringConnectionResponse Int
-cvpcrsResponseStatus = lens _cvpcrsResponseStatus (\ s a -> s{_cvpcrsResponseStatus = a});
-
-instance NFData CreateVPCPeeringConnectionResponse
diff --git a/gen/Network/AWS/EC2/CreateVPNConnection.hs b/gen/Network/AWS/EC2/CreateVPNConnection.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVPNConnection.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVPNConnection
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a VPN connection between an existing virtual private gateway and a VPN customer gateway. The only supported connection type is @ipsec.1@ .
---
---
--- The response includes information that you need to give to your network administrator to configure your customer gateway.
---
--- /Important:/ We strongly recommend that you use HTTPS when calling this operation because the response contains sensitive cryptographic information for configuring your customer gateway.
---
--- If you decide to shut down your VPN connection for any reason and later create a new VPN connection, you must reconfigure your customer gateway with the new information returned from this call.
---
--- This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error.
---
--- For more information about VPN connections, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateVPNConnection
-    (
-    -- * Creating a Request
-      createVPNConnection
-    , CreateVPNConnection
-    -- * Request Lenses
-    , cvcOptions
-    , cvcDryRun
-    , cvcType
-    , cvcCustomerGatewayId
-    , cvcVPNGatewayId
-
-    -- * Destructuring the Response
-    , createVPNConnectionResponse
-    , CreateVPNConnectionResponse
-    -- * Response Lenses
-    , cvcrsVPNConnection
-    , cvcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVpnConnection.
---
---
---
--- /See:/ 'createVPNConnection' smart constructor.
-data CreateVPNConnection = CreateVPNConnection'
-    { _cvcOptions           :: !(Maybe VPNConnectionOptionsSpecification)
-    , _cvcDryRun            :: !(Maybe Bool)
-    , _cvcType              :: !Text
-    , _cvcCustomerGatewayId :: !Text
-    , _cvcVPNGatewayId      :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPNConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvcOptions' - Indicates whether the VPN connection requires static routes. If you are creating a VPN connection for a device that does not support BGP, you must specify @true@ . Default: @false@
---
--- * 'cvcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cvcType' - The type of VPN connection (@ipsec.1@ ).
---
--- * 'cvcCustomerGatewayId' - The ID of the customer gateway.
---
--- * 'cvcVPNGatewayId' - The ID of the virtual private gateway.
-createVPNConnection
-    :: Text -- ^ 'cvcType'
-    -> Text -- ^ 'cvcCustomerGatewayId'
-    -> Text -- ^ 'cvcVPNGatewayId'
-    -> CreateVPNConnection
-createVPNConnection pType_ pCustomerGatewayId_ pVPNGatewayId_ =
-    CreateVPNConnection'
-    { _cvcOptions = Nothing
-    , _cvcDryRun = Nothing
-    , _cvcType = pType_
-    , _cvcCustomerGatewayId = pCustomerGatewayId_
-    , _cvcVPNGatewayId = pVPNGatewayId_
-    }
-
--- | Indicates whether the VPN connection requires static routes. If you are creating a VPN connection for a device that does not support BGP, you must specify @true@ . Default: @false@
-cvcOptions :: Lens' CreateVPNConnection (Maybe VPNConnectionOptionsSpecification)
-cvcOptions = lens _cvcOptions (\ s a -> s{_cvcOptions = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cvcDryRun :: Lens' CreateVPNConnection (Maybe Bool)
-cvcDryRun = lens _cvcDryRun (\ s a -> s{_cvcDryRun = a});
-
--- | The type of VPN connection (@ipsec.1@ ).
-cvcType :: Lens' CreateVPNConnection Text
-cvcType = lens _cvcType (\ s a -> s{_cvcType = a});
-
--- | The ID of the customer gateway.
-cvcCustomerGatewayId :: Lens' CreateVPNConnection Text
-cvcCustomerGatewayId = lens _cvcCustomerGatewayId (\ s a -> s{_cvcCustomerGatewayId = a});
-
--- | The ID of the virtual private gateway.
-cvcVPNGatewayId :: Lens' CreateVPNConnection Text
-cvcVPNGatewayId = lens _cvcVPNGatewayId (\ s a -> s{_cvcVPNGatewayId = a});
-
-instance AWSRequest CreateVPNConnection where
-        type Rs CreateVPNConnection =
-             CreateVPNConnectionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateVPNConnectionResponse' <$>
-                   (x .@? "vpnConnection") <*> (pure (fromEnum s)))
-
-instance Hashable CreateVPNConnection
-
-instance NFData CreateVPNConnection
-
-instance ToHeaders CreateVPNConnection where
-        toHeaders = const mempty
-
-instance ToPath CreateVPNConnection where
-        toPath = const "/"
-
-instance ToQuery CreateVPNConnection where
-        toQuery CreateVPNConnection'{..}
-          = mconcat
-              ["Action" =: ("CreateVpnConnection" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Options" =: _cvcOptions, "DryRun" =: _cvcDryRun,
-               "Type" =: _cvcType,
-               "CustomerGatewayId" =: _cvcCustomerGatewayId,
-               "VpnGatewayId" =: _cvcVPNGatewayId]
-
--- | Contains the output of CreateVpnConnection.
---
---
---
--- /See:/ 'createVPNConnectionResponse' smart constructor.
-data CreateVPNConnectionResponse = CreateVPNConnectionResponse'
-    { _cvcrsVPNConnection  :: !(Maybe VPNConnection)
-    , _cvcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPNConnectionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvcrsVPNConnection' - Information about the VPN connection.
---
--- * 'cvcrsResponseStatus' - -- | The response status code.
-createVPNConnectionResponse
-    :: Int -- ^ 'cvcrsResponseStatus'
-    -> CreateVPNConnectionResponse
-createVPNConnectionResponse pResponseStatus_ =
-    CreateVPNConnectionResponse'
-    { _cvcrsVPNConnection = Nothing
-    , _cvcrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPN connection.
-cvcrsVPNConnection :: Lens' CreateVPNConnectionResponse (Maybe VPNConnection)
-cvcrsVPNConnection = lens _cvcrsVPNConnection (\ s a -> s{_cvcrsVPNConnection = a});
-
--- | -- | The response status code.
-cvcrsResponseStatus :: Lens' CreateVPNConnectionResponse Int
-cvcrsResponseStatus = lens _cvcrsResponseStatus (\ s a -> s{_cvcrsResponseStatus = a});
-
-instance NFData CreateVPNConnectionResponse
diff --git a/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs b/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs
+++ /dev/null
@@ -1,119 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVPNConnectionRoute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a static route associated with a VPN connection between an existing virtual private gateway and a VPN customer gateway. The static route allows traffic to be routed from the virtual private gateway to the VPN customer gateway.
---
---
--- For more information about VPN connections, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateVPNConnectionRoute
-    (
-    -- * Creating a Request
-      createVPNConnectionRoute
-    , CreateVPNConnectionRoute
-    -- * Request Lenses
-    , cvcrVPNConnectionId
-    , cvcrDestinationCidrBlock
-
-    -- * Destructuring the Response
-    , createVPNConnectionRouteResponse
-    , CreateVPNConnectionRouteResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVpnConnectionRoute.
---
---
---
--- /See:/ 'createVPNConnectionRoute' smart constructor.
-data CreateVPNConnectionRoute = CreateVPNConnectionRoute'
-    { _cvcrVPNConnectionId      :: !Text
-    , _cvcrDestinationCidrBlock :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPNConnectionRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvcrVPNConnectionId' - The ID of the VPN connection.
---
--- * 'cvcrDestinationCidrBlock' - The CIDR block associated with the local subnet of the customer network.
-createVPNConnectionRoute
-    :: Text -- ^ 'cvcrVPNConnectionId'
-    -> Text -- ^ 'cvcrDestinationCidrBlock'
-    -> CreateVPNConnectionRoute
-createVPNConnectionRoute pVPNConnectionId_ pDestinationCidrBlock_ =
-    CreateVPNConnectionRoute'
-    { _cvcrVPNConnectionId = pVPNConnectionId_
-    , _cvcrDestinationCidrBlock = pDestinationCidrBlock_
-    }
-
--- | The ID of the VPN connection.
-cvcrVPNConnectionId :: Lens' CreateVPNConnectionRoute Text
-cvcrVPNConnectionId = lens _cvcrVPNConnectionId (\ s a -> s{_cvcrVPNConnectionId = a});
-
--- | The CIDR block associated with the local subnet of the customer network.
-cvcrDestinationCidrBlock :: Lens' CreateVPNConnectionRoute Text
-cvcrDestinationCidrBlock = lens _cvcrDestinationCidrBlock (\ s a -> s{_cvcrDestinationCidrBlock = a});
-
-instance AWSRequest CreateVPNConnectionRoute where
-        type Rs CreateVPNConnectionRoute =
-             CreateVPNConnectionRouteResponse
-        request = postQuery ec2
-        response
-          = receiveNull CreateVPNConnectionRouteResponse'
-
-instance Hashable CreateVPNConnectionRoute
-
-instance NFData CreateVPNConnectionRoute
-
-instance ToHeaders CreateVPNConnectionRoute where
-        toHeaders = const mempty
-
-instance ToPath CreateVPNConnectionRoute where
-        toPath = const "/"
-
-instance ToQuery CreateVPNConnectionRoute where
-        toQuery CreateVPNConnectionRoute'{..}
-          = mconcat
-              ["Action" =:
-                 ("CreateVpnConnectionRoute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpnConnectionId" =: _cvcrVPNConnectionId,
-               "DestinationCidrBlock" =: _cvcrDestinationCidrBlock]
-
--- | /See:/ 'createVPNConnectionRouteResponse' smart constructor.
-data CreateVPNConnectionRouteResponse =
-    CreateVPNConnectionRouteResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPNConnectionRouteResponse' with the minimum fields required to make a request.
---
-createVPNConnectionRouteResponse
-    :: CreateVPNConnectionRouteResponse
-createVPNConnectionRouteResponse = CreateVPNConnectionRouteResponse'
-
-instance NFData CreateVPNConnectionRouteResponse
diff --git a/gen/Network/AWS/EC2/CreateVPNGateway.hs b/gen/Network/AWS/EC2/CreateVPNGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVPNGateway.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVPNGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a virtual private gateway. A virtual private gateway is the endpoint on the VPC side of your VPN connection. You can create a virtual private gateway before creating the VPC itself.
---
---
--- For more information about virtual private gateways, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateVPNGateway
-    (
-    -- * Creating a Request
-      createVPNGateway
-    , CreateVPNGateway
-    -- * Request Lenses
-    , cvgAvailabilityZone
-    , cvgDryRun
-    , cvgType
-
-    -- * Destructuring the Response
-    , createVPNGatewayResponse
-    , CreateVPNGatewayResponse
-    -- * Response Lenses
-    , cvgrsVPNGateway
-    , cvgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVpnGateway.
---
---
---
--- /See:/ 'createVPNGateway' smart constructor.
-data CreateVPNGateway = CreateVPNGateway'
-    { _cvgAvailabilityZone :: !(Maybe Text)
-    , _cvgDryRun           :: !(Maybe Bool)
-    , _cvgType             :: !GatewayType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvgAvailabilityZone' - The Availability Zone for the virtual private gateway.
---
--- * 'cvgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'cvgType' - The type of VPN connection this virtual private gateway supports.
-createVPNGateway
-    :: GatewayType -- ^ 'cvgType'
-    -> CreateVPNGateway
-createVPNGateway pType_ =
-    CreateVPNGateway'
-    { _cvgAvailabilityZone = Nothing
-    , _cvgDryRun = Nothing
-    , _cvgType = pType_
-    }
-
--- | The Availability Zone for the virtual private gateway.
-cvgAvailabilityZone :: Lens' CreateVPNGateway (Maybe Text)
-cvgAvailabilityZone = lens _cvgAvailabilityZone (\ s a -> s{_cvgAvailabilityZone = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-cvgDryRun :: Lens' CreateVPNGateway (Maybe Bool)
-cvgDryRun = lens _cvgDryRun (\ s a -> s{_cvgDryRun = a});
-
--- | The type of VPN connection this virtual private gateway supports.
-cvgType :: Lens' CreateVPNGateway GatewayType
-cvgType = lens _cvgType (\ s a -> s{_cvgType = a});
-
-instance AWSRequest CreateVPNGateway where
-        type Rs CreateVPNGateway = CreateVPNGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 CreateVPNGatewayResponse' <$>
-                   (x .@? "vpnGateway") <*> (pure (fromEnum s)))
-
-instance Hashable CreateVPNGateway
-
-instance NFData CreateVPNGateway
-
-instance ToHeaders CreateVPNGateway where
-        toHeaders = const mempty
-
-instance ToPath CreateVPNGateway where
-        toPath = const "/"
-
-instance ToQuery CreateVPNGateway where
-        toQuery CreateVPNGateway'{..}
-          = mconcat
-              ["Action" =: ("CreateVpnGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AvailabilityZone" =: _cvgAvailabilityZone,
-               "DryRun" =: _cvgDryRun, "Type" =: _cvgType]
-
--- | Contains the output of CreateVpnGateway.
---
---
---
--- /See:/ 'createVPNGatewayResponse' smart constructor.
-data CreateVPNGatewayResponse = CreateVPNGatewayResponse'
-    { _cvgrsVPNGateway     :: !(Maybe VPNGateway)
-    , _cvgrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVPNGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvgrsVPNGateway' - Information about the virtual private gateway.
---
--- * 'cvgrsResponseStatus' - -- | The response status code.
-createVPNGatewayResponse
-    :: Int -- ^ 'cvgrsResponseStatus'
-    -> CreateVPNGatewayResponse
-createVPNGatewayResponse pResponseStatus_ =
-    CreateVPNGatewayResponse'
-    { _cvgrsVPNGateway = Nothing
-    , _cvgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the virtual private gateway.
-cvgrsVPNGateway :: Lens' CreateVPNGatewayResponse (Maybe VPNGateway)
-cvgrsVPNGateway = lens _cvgrsVPNGateway (\ s a -> s{_cvgrsVPNGateway = a});
-
--- | -- | The response status code.
-cvgrsResponseStatus :: Lens' CreateVPNGatewayResponse Int
-cvgrsResponseStatus = lens _cvgrsResponseStatus (\ s a -> s{_cvgrsResponseStatus = a});
-
-instance NFData CreateVPNGatewayResponse
diff --git a/gen/Network/AWS/EC2/CreateVolume.hs b/gen/Network/AWS/EC2/CreateVolume.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/CreateVolume.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.CreateVolume
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an EBS volume that can be attached to an instance in the same Availability Zone. The volume is created in the regional endpoint that you send the HTTP request to. For more information see <http://docs.aws.amazon.com/general/latest/gr/rande.html Regions and Endpoints> .
---
---
--- You can create a new empty volume or restore a volume from an EBS snapshot. Any AWS Marketplace product codes from the snapshot are propagated to the volume.
---
--- You can create encrypted volumes with the @Encrypted@ parameter. Encrypted volumes may only be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are also automatically encrypted. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html Creating or Restoring an Amazon EBS Volume> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.CreateVolume
-    (
-    -- * Creating a Request
-      createVolume
-    , CreateVolume
-    -- * Request Lenses
-    , creSize
-    , creIOPS
-    , creEncrypted
-    , creKMSKeyId
-    , creVolumeType
-    , creDryRun
-    , creSnapshotId
-    , creAvailabilityZone
-
-    -- * Destructuring the Response
-    , volume
-    , Volume
-    -- * Response Lenses
-    , vAttachments
-    , vIOPS
-    , vKMSKeyId
-    , vTags
-    , vAvailabilityZone
-    , vCreateTime
-    , vEncrypted
-    , vSize
-    , vSnapshotId
-    , vState
-    , vVolumeId
-    , vVolumeType
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for CreateVolume.
---
---
---
--- /See:/ 'createVolume' smart constructor.
-data CreateVolume = CreateVolume'
-    { _creSize             :: !(Maybe Int)
-    , _creIOPS             :: !(Maybe Int)
-    , _creEncrypted        :: !(Maybe Bool)
-    , _creKMSKeyId         :: !(Maybe Text)
-    , _creVolumeType       :: !(Maybe VolumeType)
-    , _creDryRun           :: !(Maybe Bool)
-    , _creSnapshotId       :: !(Maybe Text)
-    , _creAvailabilityZone :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVolume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'creSize' - The size of the volume, in GiBs. Constraints: 1-16384 for @gp2@ , 4-16384 for @io1@ , 500-16384 for @st1@ , 500-16384 for @sc1@ , and 1-1024 for @standard@ . If you specify a snapshot, the volume size must be equal to or larger than the snapshot size. Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.
---
--- * 'creIOPS' - Only valid for Provisioned IOPS SSD volumes. The number of I/O operations per second (IOPS) to provision for the volume, with a maximum ratio of 50 IOPS/GiB. Constraint: Range is 100 to 20000 for Provisioned IOPS SSD volumes
---
--- * 'creEncrypted' - Specifies whether the volume should be encrypted. Encrypted Amazon EBS volumes may only be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are automatically encrypted. There is no way to create an encrypted volume from an unencrypted snapshot or vice versa. If your AMI uses encrypted volumes, you can only launch it on supported instance types. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'creKMSKeyId' - The full ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted volume. 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. The ARN contains the @arn:aws:kms@ namespace, followed by the region of the CMK, the AWS account ID of the CMK owner, the @key@ namespace, and then the CMK ID. For example, arn:aws:kms:/us-east-1/ :/012345678910/ :key//abcd1234-a123-456a-a12b-a123b4cd56ef/ . If a @KmsKeyId@ is specified, the @Encrypted@ flag must also be set.
---
--- * 'creVolumeType' - The volume type. This can be @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic volumes. Default: @standard@
---
--- * 'creDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'creSnapshotId' - The snapshot from which to create the volume.
---
--- * 'creAvailabilityZone' - The Availability Zone in which to create the volume. Use 'DescribeAvailabilityZones' to list the Availability Zones that are currently available to you.
-createVolume
-    :: Text -- ^ 'creAvailabilityZone'
-    -> CreateVolume
-createVolume pAvailabilityZone_ =
-    CreateVolume'
-    { _creSize = Nothing
-    , _creIOPS = Nothing
-    , _creEncrypted = Nothing
-    , _creKMSKeyId = Nothing
-    , _creVolumeType = Nothing
-    , _creDryRun = Nothing
-    , _creSnapshotId = Nothing
-    , _creAvailabilityZone = pAvailabilityZone_
-    }
-
--- | The size of the volume, in GiBs. Constraints: 1-16384 for @gp2@ , 4-16384 for @io1@ , 500-16384 for @st1@ , 500-16384 for @sc1@ , and 1-1024 for @standard@ . If you specify a snapshot, the volume size must be equal to or larger than the snapshot size. Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.
-creSize :: Lens' CreateVolume (Maybe Int)
-creSize = lens _creSize (\ s a -> s{_creSize = a});
-
--- | Only valid for Provisioned IOPS SSD volumes. The number of I/O operations per second (IOPS) to provision for the volume, with a maximum ratio of 50 IOPS/GiB. Constraint: Range is 100 to 20000 for Provisioned IOPS SSD volumes
-creIOPS :: Lens' CreateVolume (Maybe Int)
-creIOPS = lens _creIOPS (\ s a -> s{_creIOPS = a});
-
--- | Specifies whether the volume should be encrypted. Encrypted Amazon EBS volumes may only be attached to instances that support Amazon EBS encryption. Volumes that are created from encrypted snapshots are automatically encrypted. There is no way to create an encrypted volume from an unencrypted snapshot or vice versa. If your AMI uses encrypted volumes, you can only launch it on supported instance types. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption> in the /Amazon Elastic Compute Cloud User Guide/ .
-creEncrypted :: Lens' CreateVolume (Maybe Bool)
-creEncrypted = lens _creEncrypted (\ s a -> s{_creEncrypted = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) to use when creating the encrypted volume. 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. The ARN contains the @arn:aws:kms@ namespace, followed by the region of the CMK, the AWS account ID of the CMK owner, the @key@ namespace, and then the CMK ID. For example, arn:aws:kms:/us-east-1/ :/012345678910/ :key//abcd1234-a123-456a-a12b-a123b4cd56ef/ . If a @KmsKeyId@ is specified, the @Encrypted@ flag must also be set.
-creKMSKeyId :: Lens' CreateVolume (Maybe Text)
-creKMSKeyId = lens _creKMSKeyId (\ s a -> s{_creKMSKeyId = a});
-
--- | The volume type. This can be @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic volumes. Default: @standard@
-creVolumeType :: Lens' CreateVolume (Maybe VolumeType)
-creVolumeType = lens _creVolumeType (\ s a -> s{_creVolumeType = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-creDryRun :: Lens' CreateVolume (Maybe Bool)
-creDryRun = lens _creDryRun (\ s a -> s{_creDryRun = a});
-
--- | The snapshot from which to create the volume.
-creSnapshotId :: Lens' CreateVolume (Maybe Text)
-creSnapshotId = lens _creSnapshotId (\ s a -> s{_creSnapshotId = a});
-
--- | The Availability Zone in which to create the volume. Use 'DescribeAvailabilityZones' to list the Availability Zones that are currently available to you.
-creAvailabilityZone :: Lens' CreateVolume Text
-creAvailabilityZone = lens _creAvailabilityZone (\ s a -> s{_creAvailabilityZone = a});
-
-instance AWSRequest CreateVolume where
-        type Rs CreateVolume = Volume
-        request = postQuery ec2
-        response = receiveXML (\ s h x -> parseXML x)
-
-instance Hashable CreateVolume
-
-instance NFData CreateVolume
-
-instance ToHeaders CreateVolume where
-        toHeaders = const mempty
-
-instance ToPath CreateVolume where
-        toPath = const "/"
-
-instance ToQuery CreateVolume where
-        toQuery CreateVolume'{..}
-          = mconcat
-              ["Action" =: ("CreateVolume" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Size" =: _creSize, "Iops" =: _creIOPS,
-               "Encrypted" =: _creEncrypted,
-               "KmsKeyId" =: _creKMSKeyId,
-               "VolumeType" =: _creVolumeType,
-               "DryRun" =: _creDryRun,
-               "SnapshotId" =: _creSnapshotId,
-               "AvailabilityZone" =: _creAvailabilityZone]
diff --git a/gen/Network/AWS/EC2/DeleteCustomerGateway.hs b/gen/Network/AWS/EC2/DeleteCustomerGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteCustomerGateway.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteCustomerGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified customer gateway. You must delete the VPN connection before you can delete the customer gateway.
---
---
-module Network.AWS.EC2.DeleteCustomerGateway
-    (
-    -- * Creating a Request
-      deleteCustomerGateway
-    , DeleteCustomerGateway
-    -- * Request Lenses
-    , dcgcDryRun
-    , dcgcCustomerGatewayId
-
-    -- * Destructuring the Response
-    , deleteCustomerGatewayResponse
-    , DeleteCustomerGatewayResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteCustomerGateway.
---
---
---
--- /See:/ 'deleteCustomerGateway' smart constructor.
-data DeleteCustomerGateway = DeleteCustomerGateway'
-    { _dcgcDryRun            :: !(Maybe Bool)
-    , _dcgcCustomerGatewayId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteCustomerGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcgcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dcgcCustomerGatewayId' - The ID of the customer gateway.
-deleteCustomerGateway
-    :: Text -- ^ 'dcgcCustomerGatewayId'
-    -> DeleteCustomerGateway
-deleteCustomerGateway pCustomerGatewayId_ =
-    DeleteCustomerGateway'
-    { _dcgcDryRun = Nothing
-    , _dcgcCustomerGatewayId = pCustomerGatewayId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dcgcDryRun :: Lens' DeleteCustomerGateway (Maybe Bool)
-dcgcDryRun = lens _dcgcDryRun (\ s a -> s{_dcgcDryRun = a});
-
--- | The ID of the customer gateway.
-dcgcCustomerGatewayId :: Lens' DeleteCustomerGateway Text
-dcgcCustomerGatewayId = lens _dcgcCustomerGatewayId (\ s a -> s{_dcgcCustomerGatewayId = a});
-
-instance AWSRequest DeleteCustomerGateway where
-        type Rs DeleteCustomerGateway =
-             DeleteCustomerGatewayResponse
-        request = postQuery ec2
-        response = receiveNull DeleteCustomerGatewayResponse'
-
-instance Hashable DeleteCustomerGateway
-
-instance NFData DeleteCustomerGateway
-
-instance ToHeaders DeleteCustomerGateway where
-        toHeaders = const mempty
-
-instance ToPath DeleteCustomerGateway where
-        toPath = const "/"
-
-instance ToQuery DeleteCustomerGateway where
-        toQuery DeleteCustomerGateway'{..}
-          = mconcat
-              ["Action" =: ("DeleteCustomerGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dcgcDryRun,
-               "CustomerGatewayId" =: _dcgcCustomerGatewayId]
-
--- | /See:/ 'deleteCustomerGatewayResponse' smart constructor.
-data DeleteCustomerGatewayResponse =
-    DeleteCustomerGatewayResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteCustomerGatewayResponse' with the minimum fields required to make a request.
---
-deleteCustomerGatewayResponse
-    :: DeleteCustomerGatewayResponse
-deleteCustomerGatewayResponse = DeleteCustomerGatewayResponse'
-
-instance NFData DeleteCustomerGatewayResponse
diff --git a/gen/Network/AWS/EC2/DeleteDHCPOptions.hs b/gen/Network/AWS/EC2/DeleteDHCPOptions.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteDHCPOptions.hs
+++ /dev/null
@@ -1,113 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteDHCPOptions
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified set of DHCP options. You must disassociate the set of DHCP options before you can delete it. You can disassociate the set of DHCP options by associating either a new set of options or the default set of options with the VPC.
---
---
-module Network.AWS.EC2.DeleteDHCPOptions
-    (
-    -- * Creating a Request
-      deleteDHCPOptions
-    , DeleteDHCPOptions
-    -- * Request Lenses
-    , ddhcpoDryRun
-    , ddhcpoDHCPOptionsId
-
-    -- * Destructuring the Response
-    , deleteDHCPOptionsResponse
-    , DeleteDHCPOptionsResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteDhcpOptions.
---
---
---
--- /See:/ 'deleteDHCPOptions' smart constructor.
-data DeleteDHCPOptions = DeleteDHCPOptions'
-    { _ddhcpoDryRun        :: !(Maybe Bool)
-    , _ddhcpoDHCPOptionsId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteDHCPOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddhcpoDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ddhcpoDHCPOptionsId' - The ID of the DHCP options set.
-deleteDHCPOptions
-    :: Text -- ^ 'ddhcpoDHCPOptionsId'
-    -> DeleteDHCPOptions
-deleteDHCPOptions pDHCPOptionsId_ =
-    DeleteDHCPOptions'
-    { _ddhcpoDryRun = Nothing
-    , _ddhcpoDHCPOptionsId = pDHCPOptionsId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ddhcpoDryRun :: Lens' DeleteDHCPOptions (Maybe Bool)
-ddhcpoDryRun = lens _ddhcpoDryRun (\ s a -> s{_ddhcpoDryRun = a});
-
--- | The ID of the DHCP options set.
-ddhcpoDHCPOptionsId :: Lens' DeleteDHCPOptions Text
-ddhcpoDHCPOptionsId = lens _ddhcpoDHCPOptionsId (\ s a -> s{_ddhcpoDHCPOptionsId = a});
-
-instance AWSRequest DeleteDHCPOptions where
-        type Rs DeleteDHCPOptions = DeleteDHCPOptionsResponse
-        request = postQuery ec2
-        response = receiveNull DeleteDHCPOptionsResponse'
-
-instance Hashable DeleteDHCPOptions
-
-instance NFData DeleteDHCPOptions
-
-instance ToHeaders DeleteDHCPOptions where
-        toHeaders = const mempty
-
-instance ToPath DeleteDHCPOptions where
-        toPath = const "/"
-
-instance ToQuery DeleteDHCPOptions where
-        toQuery DeleteDHCPOptions'{..}
-          = mconcat
-              ["Action" =: ("DeleteDhcpOptions" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _ddhcpoDryRun,
-               "DhcpOptionsId" =: _ddhcpoDHCPOptionsId]
-
--- | /See:/ 'deleteDHCPOptionsResponse' smart constructor.
-data DeleteDHCPOptionsResponse =
-    DeleteDHCPOptionsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteDHCPOptionsResponse' with the minimum fields required to make a request.
---
-deleteDHCPOptionsResponse
-    :: DeleteDHCPOptionsResponse
-deleteDHCPOptionsResponse = DeleteDHCPOptionsResponse'
-
-instance NFData DeleteDHCPOptionsResponse
diff --git a/gen/Network/AWS/EC2/DeleteEgressOnlyInternetGateway.hs b/gen/Network/AWS/EC2/DeleteEgressOnlyInternetGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteEgressOnlyInternetGateway.hs
+++ /dev/null
@@ -1,142 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteEgressOnlyInternetGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes an egress-only Internet gateway.
---
---
-module Network.AWS.EC2.DeleteEgressOnlyInternetGateway
-    (
-    -- * Creating a Request
-      deleteEgressOnlyInternetGateway
-    , DeleteEgressOnlyInternetGateway
-    -- * Request Lenses
-    , deoigeDryRun
-    , deoigeEgressOnlyInternetGatewayId
-
-    -- * Destructuring the Response
-    , deleteEgressOnlyInternetGatewayResponse
-    , DeleteEgressOnlyInternetGatewayResponse
-    -- * Response Lenses
-    , delrsReturnCode
-    , delrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'deleteEgressOnlyInternetGateway' smart constructor.
-data DeleteEgressOnlyInternetGateway = DeleteEgressOnlyInternetGateway'
-    { _deoigeDryRun                      :: !(Maybe Bool)
-    , _deoigeEgressOnlyInternetGatewayId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteEgressOnlyInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deoigeDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'deoigeEgressOnlyInternetGatewayId' - The ID of the egress-only Internet gateway.
-deleteEgressOnlyInternetGateway
-    :: Text -- ^ 'deoigeEgressOnlyInternetGatewayId'
-    -> DeleteEgressOnlyInternetGateway
-deleteEgressOnlyInternetGateway pEgressOnlyInternetGatewayId_ =
-    DeleteEgressOnlyInternetGateway'
-    { _deoigeDryRun = Nothing
-    , _deoigeEgressOnlyInternetGatewayId = pEgressOnlyInternetGatewayId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-deoigeDryRun :: Lens' DeleteEgressOnlyInternetGateway (Maybe Bool)
-deoigeDryRun = lens _deoigeDryRun (\ s a -> s{_deoigeDryRun = a});
-
--- | The ID of the egress-only Internet gateway.
-deoigeEgressOnlyInternetGatewayId :: Lens' DeleteEgressOnlyInternetGateway Text
-deoigeEgressOnlyInternetGatewayId = lens _deoigeEgressOnlyInternetGatewayId (\ s a -> s{_deoigeEgressOnlyInternetGatewayId = a});
-
-instance AWSRequest DeleteEgressOnlyInternetGateway
-         where
-        type Rs DeleteEgressOnlyInternetGateway =
-             DeleteEgressOnlyInternetGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DeleteEgressOnlyInternetGatewayResponse' <$>
-                   (x .@? "returnCode") <*> (pure (fromEnum s)))
-
-instance Hashable DeleteEgressOnlyInternetGateway
-
-instance NFData DeleteEgressOnlyInternetGateway
-
-instance ToHeaders DeleteEgressOnlyInternetGateway
-         where
-        toHeaders = const mempty
-
-instance ToPath DeleteEgressOnlyInternetGateway where
-        toPath = const "/"
-
-instance ToQuery DeleteEgressOnlyInternetGateway
-         where
-        toQuery DeleteEgressOnlyInternetGateway'{..}
-          = mconcat
-              ["Action" =:
-                 ("DeleteEgressOnlyInternetGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _deoigeDryRun,
-               "EgressOnlyInternetGatewayId" =:
-                 _deoigeEgressOnlyInternetGatewayId]
-
--- | /See:/ 'deleteEgressOnlyInternetGatewayResponse' smart constructor.
-data DeleteEgressOnlyInternetGatewayResponse = DeleteEgressOnlyInternetGatewayResponse'
-    { _delrsReturnCode     :: !(Maybe Bool)
-    , _delrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteEgressOnlyInternetGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'delrsReturnCode' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'delrsResponseStatus' - -- | The response status code.
-deleteEgressOnlyInternetGatewayResponse
-    :: Int -- ^ 'delrsResponseStatus'
-    -> DeleteEgressOnlyInternetGatewayResponse
-deleteEgressOnlyInternetGatewayResponse pResponseStatus_ =
-    DeleteEgressOnlyInternetGatewayResponse'
-    { _delrsReturnCode = Nothing
-    , _delrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-delrsReturnCode :: Lens' DeleteEgressOnlyInternetGatewayResponse (Maybe Bool)
-delrsReturnCode = lens _delrsReturnCode (\ s a -> s{_delrsReturnCode = a});
-
--- | -- | The response status code.
-delrsResponseStatus :: Lens' DeleteEgressOnlyInternetGatewayResponse Int
-delrsResponseStatus = lens _delrsResponseStatus (\ s a -> s{_delrsResponseStatus = a});
-
-instance NFData
-         DeleteEgressOnlyInternetGatewayResponse
diff --git a/gen/Network/AWS/EC2/DeleteFlowLogs.hs b/gen/Network/AWS/EC2/DeleteFlowLogs.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteFlowLogs.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteFlowLogs
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes one or more flow logs.
---
---
-module Network.AWS.EC2.DeleteFlowLogs
-    (
-    -- * Creating a Request
-      deleteFlowLogs
-    , DeleteFlowLogs
-    -- * Request Lenses
-    , dflFlowLogIds
-
-    -- * Destructuring the Response
-    , deleteFlowLogsResponse
-    , DeleteFlowLogsResponse
-    -- * Response Lenses
-    , dflrsUnsuccessful
-    , dflrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteFlowLogs.
---
---
---
--- /See:/ 'deleteFlowLogs' smart constructor.
-newtype DeleteFlowLogs = DeleteFlowLogs'
-    { _dflFlowLogIds :: [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteFlowLogs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dflFlowLogIds' - One or more flow log IDs.
-deleteFlowLogs
-    :: DeleteFlowLogs
-deleteFlowLogs =
-    DeleteFlowLogs'
-    { _dflFlowLogIds = mempty
-    }
-
--- | One or more flow log IDs.
-dflFlowLogIds :: Lens' DeleteFlowLogs [Text]
-dflFlowLogIds = lens _dflFlowLogIds (\ s a -> s{_dflFlowLogIds = a}) . _Coerce;
-
-instance AWSRequest DeleteFlowLogs where
-        type Rs DeleteFlowLogs = DeleteFlowLogsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DeleteFlowLogsResponse' <$>
-                   (x .@? "unsuccessful" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DeleteFlowLogs
-
-instance NFData DeleteFlowLogs
-
-instance ToHeaders DeleteFlowLogs where
-        toHeaders = const mempty
-
-instance ToPath DeleteFlowLogs where
-        toPath = const "/"
-
-instance ToQuery DeleteFlowLogs where
-        toQuery DeleteFlowLogs'{..}
-          = mconcat
-              ["Action" =: ("DeleteFlowLogs" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQueryList "FlowLogId" _dflFlowLogIds]
-
--- | Contains the output of DeleteFlowLogs.
---
---
---
--- /See:/ 'deleteFlowLogsResponse' smart constructor.
-data DeleteFlowLogsResponse = DeleteFlowLogsResponse'
-    { _dflrsUnsuccessful   :: !(Maybe [UnsuccessfulItem])
-    , _dflrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteFlowLogsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dflrsUnsuccessful' - Information about the flow logs that could not be deleted successfully.
---
--- * 'dflrsResponseStatus' - -- | The response status code.
-deleteFlowLogsResponse
-    :: Int -- ^ 'dflrsResponseStatus'
-    -> DeleteFlowLogsResponse
-deleteFlowLogsResponse pResponseStatus_ =
-    DeleteFlowLogsResponse'
-    { _dflrsUnsuccessful = Nothing
-    , _dflrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the flow logs that could not be deleted successfully.
-dflrsUnsuccessful :: Lens' DeleteFlowLogsResponse [UnsuccessfulItem]
-dflrsUnsuccessful = lens _dflrsUnsuccessful (\ s a -> s{_dflrsUnsuccessful = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dflrsResponseStatus :: Lens' DeleteFlowLogsResponse Int
-dflrsResponseStatus = lens _dflrsResponseStatus (\ s a -> s{_dflrsResponseStatus = a});
-
-instance NFData DeleteFlowLogsResponse
diff --git a/gen/Network/AWS/EC2/DeleteInternetGateway.hs b/gen/Network/AWS/EC2/DeleteInternetGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteInternetGateway.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteInternetGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified Internet gateway. You must detach the Internet gateway from the VPC before you can delete it.
---
---
-module Network.AWS.EC2.DeleteInternetGateway
-    (
-    -- * Creating a Request
-      deleteInternetGateway
-    , DeleteInternetGateway
-    -- * Request Lenses
-    , digiDryRun
-    , digiInternetGatewayId
-
-    -- * Destructuring the Response
-    , deleteInternetGatewayResponse
-    , DeleteInternetGatewayResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteInternetGateway.
---
---
---
--- /See:/ 'deleteInternetGateway' smart constructor.
-data DeleteInternetGateway = DeleteInternetGateway'
-    { _digiDryRun            :: !(Maybe Bool)
-    , _digiInternetGatewayId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'digiInternetGatewayId' - The ID of the Internet gateway.
-deleteInternetGateway
-    :: Text -- ^ 'digiInternetGatewayId'
-    -> DeleteInternetGateway
-deleteInternetGateway pInternetGatewayId_ =
-    DeleteInternetGateway'
-    { _digiDryRun = Nothing
-    , _digiInternetGatewayId = pInternetGatewayId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-digiDryRun :: Lens' DeleteInternetGateway (Maybe Bool)
-digiDryRun = lens _digiDryRun (\ s a -> s{_digiDryRun = a});
-
--- | The ID of the Internet gateway.
-digiInternetGatewayId :: Lens' DeleteInternetGateway Text
-digiInternetGatewayId = lens _digiInternetGatewayId (\ s a -> s{_digiInternetGatewayId = a});
-
-instance AWSRequest DeleteInternetGateway where
-        type Rs DeleteInternetGateway =
-             DeleteInternetGatewayResponse
-        request = postQuery ec2
-        response = receiveNull DeleteInternetGatewayResponse'
-
-instance Hashable DeleteInternetGateway
-
-instance NFData DeleteInternetGateway
-
-instance ToHeaders DeleteInternetGateway where
-        toHeaders = const mempty
-
-instance ToPath DeleteInternetGateway where
-        toPath = const "/"
-
-instance ToQuery DeleteInternetGateway where
-        toQuery DeleteInternetGateway'{..}
-          = mconcat
-              ["Action" =: ("DeleteInternetGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _digiDryRun,
-               "InternetGatewayId" =: _digiInternetGatewayId]
-
--- | /See:/ 'deleteInternetGatewayResponse' smart constructor.
-data DeleteInternetGatewayResponse =
-    DeleteInternetGatewayResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteInternetGatewayResponse' with the minimum fields required to make a request.
---
-deleteInternetGatewayResponse
-    :: DeleteInternetGatewayResponse
-deleteInternetGatewayResponse = DeleteInternetGatewayResponse'
-
-instance NFData DeleteInternetGatewayResponse
diff --git a/gen/Network/AWS/EC2/DeleteKeyPair.hs b/gen/Network/AWS/EC2/DeleteKeyPair.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteKeyPair.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified key pair, by removing the public key from Amazon EC2.
---
---
-module Network.AWS.EC2.DeleteKeyPair
-    (
-    -- * Creating a Request
-      deleteKeyPair
-    , DeleteKeyPair
-    -- * Request Lenses
-    , dkpDryRun
-    , dkpKeyName
-
-    -- * Destructuring the Response
-    , deleteKeyPairResponse
-    , DeleteKeyPairResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteKeyPair.
---
---
---
--- /See:/ 'deleteKeyPair' smart constructor.
-data DeleteKeyPair = DeleteKeyPair'
-    { _dkpDryRun  :: !(Maybe Bool)
-    , _dkpKeyName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteKeyPair' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dkpDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dkpKeyName' - The name of the key pair.
-deleteKeyPair
-    :: Text -- ^ 'dkpKeyName'
-    -> DeleteKeyPair
-deleteKeyPair pKeyName_ =
-    DeleteKeyPair'
-    { _dkpDryRun = Nothing
-    , _dkpKeyName = pKeyName_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dkpDryRun :: Lens' DeleteKeyPair (Maybe Bool)
-dkpDryRun = lens _dkpDryRun (\ s a -> s{_dkpDryRun = a});
-
--- | The name of the key pair.
-dkpKeyName :: Lens' DeleteKeyPair Text
-dkpKeyName = lens _dkpKeyName (\ s a -> s{_dkpKeyName = a});
-
-instance AWSRequest DeleteKeyPair where
-        type Rs DeleteKeyPair = DeleteKeyPairResponse
-        request = postQuery ec2
-        response = receiveNull DeleteKeyPairResponse'
-
-instance Hashable DeleteKeyPair
-
-instance NFData DeleteKeyPair
-
-instance ToHeaders DeleteKeyPair where
-        toHeaders = const mempty
-
-instance ToPath DeleteKeyPair where
-        toPath = const "/"
-
-instance ToQuery DeleteKeyPair where
-        toQuery DeleteKeyPair'{..}
-          = mconcat
-              ["Action" =: ("DeleteKeyPair" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dkpDryRun, "KeyName" =: _dkpKeyName]
-
--- | /See:/ 'deleteKeyPairResponse' smart constructor.
-data DeleteKeyPairResponse =
-    DeleteKeyPairResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteKeyPairResponse' with the minimum fields required to make a request.
---
-deleteKeyPairResponse
-    :: DeleteKeyPairResponse
-deleteKeyPairResponse = DeleteKeyPairResponse'
-
-instance NFData DeleteKeyPairResponse
diff --git a/gen/Network/AWS/EC2/DeleteNatGateway.hs b/gen/Network/AWS/EC2/DeleteNatGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteNatGateway.hs
+++ /dev/null
@@ -1,133 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteNatGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified NAT gateway. Deleting a NAT gateway disassociates its Elastic IP address, but does not release the address from your account. Deleting a NAT gateway does not delete any NAT gateway routes in your route tables.
---
---
-module Network.AWS.EC2.DeleteNatGateway
-    (
-    -- * Creating a Request
-      deleteNatGateway
-    , DeleteNatGateway
-    -- * Request Lenses
-    , dngNatGatewayId
-
-    -- * Destructuring the Response
-    , deleteNatGatewayResponse
-    , DeleteNatGatewayResponse
-    -- * Response Lenses
-    , dngnrsNatGatewayId
-    , dngnrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteNatGateway.
---
---
---
--- /See:/ 'deleteNatGateway' smart constructor.
-newtype DeleteNatGateway = DeleteNatGateway'
-    { _dngNatGatewayId :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNatGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dngNatGatewayId' - The ID of the NAT gateway.
-deleteNatGateway
-    :: Text -- ^ 'dngNatGatewayId'
-    -> DeleteNatGateway
-deleteNatGateway pNatGatewayId_ =
-    DeleteNatGateway'
-    { _dngNatGatewayId = pNatGatewayId_
-    }
-
--- | The ID of the NAT gateway.
-dngNatGatewayId :: Lens' DeleteNatGateway Text
-dngNatGatewayId = lens _dngNatGatewayId (\ s a -> s{_dngNatGatewayId = a});
-
-instance AWSRequest DeleteNatGateway where
-        type Rs DeleteNatGateway = DeleteNatGatewayResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DeleteNatGatewayResponse' <$>
-                   (x .@? "natGatewayId") <*> (pure (fromEnum s)))
-
-instance Hashable DeleteNatGateway
-
-instance NFData DeleteNatGateway
-
-instance ToHeaders DeleteNatGateway where
-        toHeaders = const mempty
-
-instance ToPath DeleteNatGateway where
-        toPath = const "/"
-
-instance ToQuery DeleteNatGateway where
-        toQuery DeleteNatGateway'{..}
-          = mconcat
-              ["Action" =: ("DeleteNatGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NatGatewayId" =: _dngNatGatewayId]
-
--- | Contains the output of DeleteNatGateway.
---
---
---
--- /See:/ 'deleteNatGatewayResponse' smart constructor.
-data DeleteNatGatewayResponse = DeleteNatGatewayResponse'
-    { _dngnrsNatGatewayId   :: !(Maybe Text)
-    , _dngnrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNatGatewayResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dngnrsNatGatewayId' - The ID of the NAT gateway.
---
--- * 'dngnrsResponseStatus' - -- | The response status code.
-deleteNatGatewayResponse
-    :: Int -- ^ 'dngnrsResponseStatus'
-    -> DeleteNatGatewayResponse
-deleteNatGatewayResponse pResponseStatus_ =
-    DeleteNatGatewayResponse'
-    { _dngnrsNatGatewayId = Nothing
-    , _dngnrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the NAT gateway.
-dngnrsNatGatewayId :: Lens' DeleteNatGatewayResponse (Maybe Text)
-dngnrsNatGatewayId = lens _dngnrsNatGatewayId (\ s a -> s{_dngnrsNatGatewayId = a});
-
--- | -- | The response status code.
-dngnrsResponseStatus :: Lens' DeleteNatGatewayResponse Int
-dngnrsResponseStatus = lens _dngnrsResponseStatus (\ s a -> s{_dngnrsResponseStatus = a});
-
-instance NFData DeleteNatGatewayResponse
diff --git a/gen/Network/AWS/EC2/DeleteNetworkACL.hs b/gen/Network/AWS/EC2/DeleteNetworkACL.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteNetworkACL.hs
+++ /dev/null
@@ -1,113 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteNetworkACL
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified network ACL. You can't delete the ACL if it's associated with any subnets. You can't delete the default network ACL.
---
---
-module Network.AWS.EC2.DeleteNetworkACL
-    (
-    -- * Creating a Request
-      deleteNetworkACL
-    , DeleteNetworkACL
-    -- * Request Lenses
-    , dnaDryRun
-    , dnaNetworkACLId
-
-    -- * Destructuring the Response
-    , deleteNetworkACLResponse
-    , DeleteNetworkACLResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteNetworkAcl.
---
---
---
--- /See:/ 'deleteNetworkACL' smart constructor.
-data DeleteNetworkACL = DeleteNetworkACL'
-    { _dnaDryRun       :: !(Maybe Bool)
-    , _dnaNetworkACLId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNetworkACL' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dnaNetworkACLId' - The ID of the network ACL.
-deleteNetworkACL
-    :: Text -- ^ 'dnaNetworkACLId'
-    -> DeleteNetworkACL
-deleteNetworkACL pNetworkACLId_ =
-    DeleteNetworkACL'
-    { _dnaDryRun = Nothing
-    , _dnaNetworkACLId = pNetworkACLId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dnaDryRun :: Lens' DeleteNetworkACL (Maybe Bool)
-dnaDryRun = lens _dnaDryRun (\ s a -> s{_dnaDryRun = a});
-
--- | The ID of the network ACL.
-dnaNetworkACLId :: Lens' DeleteNetworkACL Text
-dnaNetworkACLId = lens _dnaNetworkACLId (\ s a -> s{_dnaNetworkACLId = a});
-
-instance AWSRequest DeleteNetworkACL where
-        type Rs DeleteNetworkACL = DeleteNetworkACLResponse
-        request = postQuery ec2
-        response = receiveNull DeleteNetworkACLResponse'
-
-instance Hashable DeleteNetworkACL
-
-instance NFData DeleteNetworkACL
-
-instance ToHeaders DeleteNetworkACL where
-        toHeaders = const mempty
-
-instance ToPath DeleteNetworkACL where
-        toPath = const "/"
-
-instance ToQuery DeleteNetworkACL where
-        toQuery DeleteNetworkACL'{..}
-          = mconcat
-              ["Action" =: ("DeleteNetworkAcl" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dnaDryRun,
-               "NetworkAclId" =: _dnaNetworkACLId]
-
--- | /See:/ 'deleteNetworkACLResponse' smart constructor.
-data DeleteNetworkACLResponse =
-    DeleteNetworkACLResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNetworkACLResponse' with the minimum fields required to make a request.
---
-deleteNetworkACLResponse
-    :: DeleteNetworkACLResponse
-deleteNetworkACLResponse = DeleteNetworkACLResponse'
-
-instance NFData DeleteNetworkACLResponse
diff --git a/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs b/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs
+++ /dev/null
@@ -1,136 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteNetworkACLEntry
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified ingress or egress entry (rule) from the specified network ACL.
---
---
-module Network.AWS.EC2.DeleteNetworkACLEntry
-    (
-    -- * Creating a Request
-      deleteNetworkACLEntry
-    , DeleteNetworkACLEntry
-    -- * Request Lenses
-    , dnaeDryRun
-    , dnaeNetworkACLId
-    , dnaeRuleNumber
-    , dnaeEgress
-
-    -- * Destructuring the Response
-    , deleteNetworkACLEntryResponse
-    , DeleteNetworkACLEntryResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteNetworkAclEntry.
---
---
---
--- /See:/ 'deleteNetworkACLEntry' smart constructor.
-data DeleteNetworkACLEntry = DeleteNetworkACLEntry'
-    { _dnaeDryRun       :: !(Maybe Bool)
-    , _dnaeNetworkACLId :: !Text
-    , _dnaeRuleNumber   :: !Int
-    , _dnaeEgress       :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNetworkACLEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnaeDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dnaeNetworkACLId' - The ID of the network ACL.
---
--- * 'dnaeRuleNumber' - The rule number of the entry to delete.
---
--- * 'dnaeEgress' - Indicates whether the rule is an egress rule.
-deleteNetworkACLEntry
-    :: Text -- ^ 'dnaeNetworkACLId'
-    -> Int -- ^ 'dnaeRuleNumber'
-    -> Bool -- ^ 'dnaeEgress'
-    -> DeleteNetworkACLEntry
-deleteNetworkACLEntry pNetworkACLId_ pRuleNumber_ pEgress_ =
-    DeleteNetworkACLEntry'
-    { _dnaeDryRun = Nothing
-    , _dnaeNetworkACLId = pNetworkACLId_
-    , _dnaeRuleNumber = pRuleNumber_
-    , _dnaeEgress = pEgress_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dnaeDryRun :: Lens' DeleteNetworkACLEntry (Maybe Bool)
-dnaeDryRun = lens _dnaeDryRun (\ s a -> s{_dnaeDryRun = a});
-
--- | The ID of the network ACL.
-dnaeNetworkACLId :: Lens' DeleteNetworkACLEntry Text
-dnaeNetworkACLId = lens _dnaeNetworkACLId (\ s a -> s{_dnaeNetworkACLId = a});
-
--- | The rule number of the entry to delete.
-dnaeRuleNumber :: Lens' DeleteNetworkACLEntry Int
-dnaeRuleNumber = lens _dnaeRuleNumber (\ s a -> s{_dnaeRuleNumber = a});
-
--- | Indicates whether the rule is an egress rule.
-dnaeEgress :: Lens' DeleteNetworkACLEntry Bool
-dnaeEgress = lens _dnaeEgress (\ s a -> s{_dnaeEgress = a});
-
-instance AWSRequest DeleteNetworkACLEntry where
-        type Rs DeleteNetworkACLEntry =
-             DeleteNetworkACLEntryResponse
-        request = postQuery ec2
-        response = receiveNull DeleteNetworkACLEntryResponse'
-
-instance Hashable DeleteNetworkACLEntry
-
-instance NFData DeleteNetworkACLEntry
-
-instance ToHeaders DeleteNetworkACLEntry where
-        toHeaders = const mempty
-
-instance ToPath DeleteNetworkACLEntry where
-        toPath = const "/"
-
-instance ToQuery DeleteNetworkACLEntry where
-        toQuery DeleteNetworkACLEntry'{..}
-          = mconcat
-              ["Action" =: ("DeleteNetworkAclEntry" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dnaeDryRun,
-               "NetworkAclId" =: _dnaeNetworkACLId,
-               "RuleNumber" =: _dnaeRuleNumber,
-               "Egress" =: _dnaeEgress]
-
--- | /See:/ 'deleteNetworkACLEntryResponse' smart constructor.
-data DeleteNetworkACLEntryResponse =
-    DeleteNetworkACLEntryResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNetworkACLEntryResponse' with the minimum fields required to make a request.
---
-deleteNetworkACLEntryResponse
-    :: DeleteNetworkACLEntryResponse
-deleteNetworkACLEntryResponse = DeleteNetworkACLEntryResponse'
-
-instance NFData DeleteNetworkACLEntryResponse
diff --git a/gen/Network/AWS/EC2/DeleteNetworkInterface.hs b/gen/Network/AWS/EC2/DeleteNetworkInterface.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteNetworkInterface.hs
+++ /dev/null
@@ -1,116 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteNetworkInterface
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified network interface. You must detach the network interface before you can delete it.
---
---
-module Network.AWS.EC2.DeleteNetworkInterface
-    (
-    -- * Creating a Request
-      deleteNetworkInterface
-    , DeleteNetworkInterface
-    -- * Request Lenses
-    , dninDryRun
-    , dninNetworkInterfaceId
-
-    -- * Destructuring the Response
-    , deleteNetworkInterfaceResponse
-    , DeleteNetworkInterfaceResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteNetworkInterface.
---
---
---
--- /See:/ 'deleteNetworkInterface' smart constructor.
-data DeleteNetworkInterface = DeleteNetworkInterface'
-    { _dninDryRun             :: !(Maybe Bool)
-    , _dninNetworkInterfaceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dninDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dninNetworkInterfaceId' - The ID of the network interface.
-deleteNetworkInterface
-    :: Text -- ^ 'dninNetworkInterfaceId'
-    -> DeleteNetworkInterface
-deleteNetworkInterface pNetworkInterfaceId_ =
-    DeleteNetworkInterface'
-    { _dninDryRun = Nothing
-    , _dninNetworkInterfaceId = pNetworkInterfaceId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dninDryRun :: Lens' DeleteNetworkInterface (Maybe Bool)
-dninDryRun = lens _dninDryRun (\ s a -> s{_dninDryRun = a});
-
--- | The ID of the network interface.
-dninNetworkInterfaceId :: Lens' DeleteNetworkInterface Text
-dninNetworkInterfaceId = lens _dninNetworkInterfaceId (\ s a -> s{_dninNetworkInterfaceId = a});
-
-instance AWSRequest DeleteNetworkInterface where
-        type Rs DeleteNetworkInterface =
-             DeleteNetworkInterfaceResponse
-        request = postQuery ec2
-        response
-          = receiveNull DeleteNetworkInterfaceResponse'
-
-instance Hashable DeleteNetworkInterface
-
-instance NFData DeleteNetworkInterface
-
-instance ToHeaders DeleteNetworkInterface where
-        toHeaders = const mempty
-
-instance ToPath DeleteNetworkInterface where
-        toPath = const "/"
-
-instance ToQuery DeleteNetworkInterface where
-        toQuery DeleteNetworkInterface'{..}
-          = mconcat
-              ["Action" =:
-                 ("DeleteNetworkInterface" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dninDryRun,
-               "NetworkInterfaceId" =: _dninNetworkInterfaceId]
-
--- | /See:/ 'deleteNetworkInterfaceResponse' smart constructor.
-data DeleteNetworkInterfaceResponse =
-    DeleteNetworkInterfaceResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteNetworkInterfaceResponse' with the minimum fields required to make a request.
---
-deleteNetworkInterfaceResponse
-    :: DeleteNetworkInterfaceResponse
-deleteNetworkInterfaceResponse = DeleteNetworkInterfaceResponse'
-
-instance NFData DeleteNetworkInterfaceResponse
diff --git a/gen/Network/AWS/EC2/DeletePlacementGroup.hs b/gen/Network/AWS/EC2/DeletePlacementGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeletePlacementGroup.hs
+++ /dev/null
@@ -1,113 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeletePlacementGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified placement group. You must terminate all instances in the placement group before you can delete the placement group. For more information about placement groups and cluster instances, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html Cluster Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.DeletePlacementGroup
-    (
-    -- * Creating a Request
-      deletePlacementGroup
-    , DeletePlacementGroup
-    -- * Request Lenses
-    , dpgDryRun
-    , dpgGroupName
-
-    -- * Destructuring the Response
-    , deletePlacementGroupResponse
-    , DeletePlacementGroupResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeletePlacementGroup.
---
---
---
--- /See:/ 'deletePlacementGroup' smart constructor.
-data DeletePlacementGroup = DeletePlacementGroup'
-    { _dpgDryRun    :: !(Maybe Bool)
-    , _dpgGroupName :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeletePlacementGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dpgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dpgGroupName' - The name of the placement group.
-deletePlacementGroup
-    :: Text -- ^ 'dpgGroupName'
-    -> DeletePlacementGroup
-deletePlacementGroup pGroupName_ =
-    DeletePlacementGroup'
-    { _dpgDryRun = Nothing
-    , _dpgGroupName = pGroupName_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dpgDryRun :: Lens' DeletePlacementGroup (Maybe Bool)
-dpgDryRun = lens _dpgDryRun (\ s a -> s{_dpgDryRun = a});
-
--- | The name of the placement group.
-dpgGroupName :: Lens' DeletePlacementGroup Text
-dpgGroupName = lens _dpgGroupName (\ s a -> s{_dpgGroupName = a});
-
-instance AWSRequest DeletePlacementGroup where
-        type Rs DeletePlacementGroup =
-             DeletePlacementGroupResponse
-        request = postQuery ec2
-        response = receiveNull DeletePlacementGroupResponse'
-
-instance Hashable DeletePlacementGroup
-
-instance NFData DeletePlacementGroup
-
-instance ToHeaders DeletePlacementGroup where
-        toHeaders = const mempty
-
-instance ToPath DeletePlacementGroup where
-        toPath = const "/"
-
-instance ToQuery DeletePlacementGroup where
-        toQuery DeletePlacementGroup'{..}
-          = mconcat
-              ["Action" =: ("DeletePlacementGroup" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dpgDryRun, "GroupName" =: _dpgGroupName]
-
--- | /See:/ 'deletePlacementGroupResponse' smart constructor.
-data DeletePlacementGroupResponse =
-    DeletePlacementGroupResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeletePlacementGroupResponse' with the minimum fields required to make a request.
---
-deletePlacementGroupResponse
-    :: DeletePlacementGroupResponse
-deletePlacementGroupResponse = DeletePlacementGroupResponse'
-
-instance NFData DeletePlacementGroupResponse
diff --git a/gen/Network/AWS/EC2/DeleteRoute.hs b/gen/Network/AWS/EC2/DeleteRoute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteRoute.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteRoute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified route from the specified route table.
---
---
-module Network.AWS.EC2.DeleteRoute
-    (
-    -- * Creating a Request
-      deleteRoute
-    , DeleteRoute
-    -- * Request Lenses
-    , drDestinationIPv6CidrBlock
-    , drDryRun
-    , drDestinationCidrBlock
-    , drRouteTableId
-
-    -- * Destructuring the Response
-    , deleteRouteResponse
-    , DeleteRouteResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteRoute.
---
---
---
--- /See:/ 'deleteRoute' smart constructor.
-data DeleteRoute = DeleteRoute'
-    { _drDestinationIPv6CidrBlock :: !(Maybe Text)
-    , _drDryRun                   :: !(Maybe Bool)
-    , _drDestinationCidrBlock     :: !(Maybe Text)
-    , _drRouteTableId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drDestinationIPv6CidrBlock' - The IPv6 CIDR range for the route. The value you specify must match the CIDR for the route exactly.
---
--- * 'drDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'drDestinationCidrBlock' - The IPv4 CIDR range for the route. The value you specify must match the CIDR for the route exactly.
---
--- * 'drRouteTableId' - The ID of the route table.
-deleteRoute
-    :: Text -- ^ 'drRouteTableId'
-    -> DeleteRoute
-deleteRoute pRouteTableId_ =
-    DeleteRoute'
-    { _drDestinationIPv6CidrBlock = Nothing
-    , _drDryRun = Nothing
-    , _drDestinationCidrBlock = Nothing
-    , _drRouteTableId = pRouteTableId_
-    }
-
--- | The IPv6 CIDR range for the route. The value you specify must match the CIDR for the route exactly.
-drDestinationIPv6CidrBlock :: Lens' DeleteRoute (Maybe Text)
-drDestinationIPv6CidrBlock = lens _drDestinationIPv6CidrBlock (\ s a -> s{_drDestinationIPv6CidrBlock = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-drDryRun :: Lens' DeleteRoute (Maybe Bool)
-drDryRun = lens _drDryRun (\ s a -> s{_drDryRun = a});
-
--- | The IPv4 CIDR range for the route. The value you specify must match the CIDR for the route exactly.
-drDestinationCidrBlock :: Lens' DeleteRoute (Maybe Text)
-drDestinationCidrBlock = lens _drDestinationCidrBlock (\ s a -> s{_drDestinationCidrBlock = a});
-
--- | The ID of the route table.
-drRouteTableId :: Lens' DeleteRoute Text
-drRouteTableId = lens _drRouteTableId (\ s a -> s{_drRouteTableId = a});
-
-instance AWSRequest DeleteRoute where
-        type Rs DeleteRoute = DeleteRouteResponse
-        request = postQuery ec2
-        response = receiveNull DeleteRouteResponse'
-
-instance Hashable DeleteRoute
-
-instance NFData DeleteRoute
-
-instance ToHeaders DeleteRoute where
-        toHeaders = const mempty
-
-instance ToPath DeleteRoute where
-        toPath = const "/"
-
-instance ToQuery DeleteRoute where
-        toQuery DeleteRoute'{..}
-          = mconcat
-              ["Action" =: ("DeleteRoute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DestinationIpv6CidrBlock" =:
-                 _drDestinationIPv6CidrBlock,
-               "DryRun" =: _drDryRun,
-               "DestinationCidrBlock" =: _drDestinationCidrBlock,
-               "RouteTableId" =: _drRouteTableId]
-
--- | /See:/ 'deleteRouteResponse' smart constructor.
-data DeleteRouteResponse =
-    DeleteRouteResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteRouteResponse' with the minimum fields required to make a request.
---
-deleteRouteResponse
-    :: DeleteRouteResponse
-deleteRouteResponse = DeleteRouteResponse'
-
-instance NFData DeleteRouteResponse
diff --git a/gen/Network/AWS/EC2/DeleteRouteTable.hs b/gen/Network/AWS/EC2/DeleteRouteTable.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteRouteTable.hs
+++ /dev/null
@@ -1,113 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteRouteTable
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified route table. You must disassociate the route table from any subnets before you can delete it. You can't delete the main route table.
---
---
-module Network.AWS.EC2.DeleteRouteTable
-    (
-    -- * Creating a Request
-      deleteRouteTable
-    , DeleteRouteTable
-    -- * Request Lenses
-    , drtrDryRun
-    , drtrRouteTableId
-
-    -- * Destructuring the Response
-    , deleteRouteTableResponse
-    , DeleteRouteTableResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteRouteTable.
---
---
---
--- /See:/ 'deleteRouteTable' smart constructor.
-data DeleteRouteTable = DeleteRouteTable'
-    { _drtrDryRun       :: !(Maybe Bool)
-    , _drtrRouteTableId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteRouteTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drtrDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'drtrRouteTableId' - The ID of the route table.
-deleteRouteTable
-    :: Text -- ^ 'drtrRouteTableId'
-    -> DeleteRouteTable
-deleteRouteTable pRouteTableId_ =
-    DeleteRouteTable'
-    { _drtrDryRun = Nothing
-    , _drtrRouteTableId = pRouteTableId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-drtrDryRun :: Lens' DeleteRouteTable (Maybe Bool)
-drtrDryRun = lens _drtrDryRun (\ s a -> s{_drtrDryRun = a});
-
--- | The ID of the route table.
-drtrRouteTableId :: Lens' DeleteRouteTable Text
-drtrRouteTableId = lens _drtrRouteTableId (\ s a -> s{_drtrRouteTableId = a});
-
-instance AWSRequest DeleteRouteTable where
-        type Rs DeleteRouteTable = DeleteRouteTableResponse
-        request = postQuery ec2
-        response = receiveNull DeleteRouteTableResponse'
-
-instance Hashable DeleteRouteTable
-
-instance NFData DeleteRouteTable
-
-instance ToHeaders DeleteRouteTable where
-        toHeaders = const mempty
-
-instance ToPath DeleteRouteTable where
-        toPath = const "/"
-
-instance ToQuery DeleteRouteTable where
-        toQuery DeleteRouteTable'{..}
-          = mconcat
-              ["Action" =: ("DeleteRouteTable" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _drtrDryRun,
-               "RouteTableId" =: _drtrRouteTableId]
-
--- | /See:/ 'deleteRouteTableResponse' smart constructor.
-data DeleteRouteTableResponse =
-    DeleteRouteTableResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteRouteTableResponse' with the minimum fields required to make a request.
---
-deleteRouteTableResponse
-    :: DeleteRouteTableResponse
-deleteRouteTableResponse = DeleteRouteTableResponse'
-
-instance NFData DeleteRouteTableResponse
diff --git a/gen/Network/AWS/EC2/DeleteSecurityGroup.hs b/gen/Network/AWS/EC2/DeleteSecurityGroup.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteSecurityGroup.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteSecurityGroup
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a security group.
---
---
--- If you attempt to delete a security group that is associated with an instance, or is referenced by another security group, the operation fails with @InvalidGroup.InUse@ in EC2-Classic or @DependencyViolation@ in EC2-VPC.
---
-module Network.AWS.EC2.DeleteSecurityGroup
-    (
-    -- * Creating a Request
-      deleteSecurityGroup
-    , DeleteSecurityGroup
-    -- * Request Lenses
-    , dsgGroupId
-    , dsgGroupName
-    , dsgDryRun
-
-    -- * Destructuring the Response
-    , deleteSecurityGroupResponse
-    , DeleteSecurityGroupResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteSecurityGroup.
---
---
---
--- /See:/ 'deleteSecurityGroup' smart constructor.
-data DeleteSecurityGroup = DeleteSecurityGroup'
-    { _dsgGroupId   :: !(Maybe Text)
-    , _dsgGroupName :: !(Maybe Text)
-    , _dsgDryRun    :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSecurityGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgGroupId' - The ID of the security group. Required for a nondefault VPC.
---
--- * 'dsgGroupName' - [EC2-Classic, default VPC] The name of the security group. You can specify either the security group name or the security group ID.
---
--- * 'dsgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-deleteSecurityGroup
-    :: DeleteSecurityGroup
-deleteSecurityGroup =
-    DeleteSecurityGroup'
-    { _dsgGroupId = Nothing
-    , _dsgGroupName = Nothing
-    , _dsgDryRun = Nothing
-    }
-
--- | The ID of the security group. Required for a nondefault VPC.
-dsgGroupId :: Lens' DeleteSecurityGroup (Maybe Text)
-dsgGroupId = lens _dsgGroupId (\ s a -> s{_dsgGroupId = a});
-
--- | [EC2-Classic, default VPC] The name of the security group. You can specify either the security group name or the security group ID.
-dsgGroupName :: Lens' DeleteSecurityGroup (Maybe Text)
-dsgGroupName = lens _dsgGroupName (\ s a -> s{_dsgGroupName = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsgDryRun :: Lens' DeleteSecurityGroup (Maybe Bool)
-dsgDryRun = lens _dsgDryRun (\ s a -> s{_dsgDryRun = a});
-
-instance AWSRequest DeleteSecurityGroup where
-        type Rs DeleteSecurityGroup =
-             DeleteSecurityGroupResponse
-        request = postQuery ec2
-        response = receiveNull DeleteSecurityGroupResponse'
-
-instance Hashable DeleteSecurityGroup
-
-instance NFData DeleteSecurityGroup
-
-instance ToHeaders DeleteSecurityGroup where
-        toHeaders = const mempty
-
-instance ToPath DeleteSecurityGroup where
-        toPath = const "/"
-
-instance ToQuery DeleteSecurityGroup where
-        toQuery DeleteSecurityGroup'{..}
-          = mconcat
-              ["Action" =: ("DeleteSecurityGroup" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "GroupId" =: _dsgGroupId,
-               "GroupName" =: _dsgGroupName, "DryRun" =: _dsgDryRun]
-
--- | /See:/ 'deleteSecurityGroupResponse' smart constructor.
-data DeleteSecurityGroupResponse =
-    DeleteSecurityGroupResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSecurityGroupResponse' with the minimum fields required to make a request.
---
-deleteSecurityGroupResponse
-    :: DeleteSecurityGroupResponse
-deleteSecurityGroupResponse = DeleteSecurityGroupResponse'
-
-instance NFData DeleteSecurityGroupResponse
diff --git a/gen/Network/AWS/EC2/DeleteSnapshot.hs b/gen/Network/AWS/EC2/DeleteSnapshot.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteSnapshot.hs
+++ /dev/null
@@ -1,119 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified snapshot.
---
---
--- When you make periodic snapshots of a volume, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the volume.
---
--- You cannot delete a snapshot of the root device of an EBS volume used by a registered AMI. You must first de-register the AMI before you can delete the snapshot.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html Deleting an Amazon EBS Snapshot> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DeleteSnapshot
-    (
-    -- * Creating a Request
-      deleteSnapshot
-    , DeleteSnapshot
-    -- * Request Lenses
-    , deleDryRun
-    , deleSnapshotId
-
-    -- * Destructuring the Response
-    , deleteSnapshotResponse
-    , DeleteSnapshotResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteSnapshot.
---
---
---
--- /See:/ 'deleteSnapshot' smart constructor.
-data DeleteSnapshot = DeleteSnapshot'
-    { _deleDryRun     :: !(Maybe Bool)
-    , _deleSnapshotId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSnapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deleDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'deleSnapshotId' - The ID of the EBS snapshot.
-deleteSnapshot
-    :: Text -- ^ 'deleSnapshotId'
-    -> DeleteSnapshot
-deleteSnapshot pSnapshotId_ =
-    DeleteSnapshot'
-    { _deleDryRun = Nothing
-    , _deleSnapshotId = pSnapshotId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-deleDryRun :: Lens' DeleteSnapshot (Maybe Bool)
-deleDryRun = lens _deleDryRun (\ s a -> s{_deleDryRun = a});
-
--- | The ID of the EBS snapshot.
-deleSnapshotId :: Lens' DeleteSnapshot Text
-deleSnapshotId = lens _deleSnapshotId (\ s a -> s{_deleSnapshotId = a});
-
-instance AWSRequest DeleteSnapshot where
-        type Rs DeleteSnapshot = DeleteSnapshotResponse
-        request = postQuery ec2
-        response = receiveNull DeleteSnapshotResponse'
-
-instance Hashable DeleteSnapshot
-
-instance NFData DeleteSnapshot
-
-instance ToHeaders DeleteSnapshot where
-        toHeaders = const mempty
-
-instance ToPath DeleteSnapshot where
-        toPath = const "/"
-
-instance ToQuery DeleteSnapshot where
-        toQuery DeleteSnapshot'{..}
-          = mconcat
-              ["Action" =: ("DeleteSnapshot" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _deleDryRun,
-               "SnapshotId" =: _deleSnapshotId]
-
--- | /See:/ 'deleteSnapshotResponse' smart constructor.
-data DeleteSnapshotResponse =
-    DeleteSnapshotResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSnapshotResponse' with the minimum fields required to make a request.
---
-deleteSnapshotResponse
-    :: DeleteSnapshotResponse
-deleteSnapshotResponse = DeleteSnapshotResponse'
-
-instance NFData DeleteSnapshotResponse
diff --git a/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs b/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs
+++ /dev/null
@@ -1,109 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteSpotDatafeedSubscription
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the data feed for Spot instances.
---
---
-module Network.AWS.EC2.DeleteSpotDatafeedSubscription
-    (
-    -- * Creating a Request
-      deleteSpotDatafeedSubscription
-    , DeleteSpotDatafeedSubscription
-    -- * Request Lenses
-    , dsdssDryRun
-
-    -- * Destructuring the Response
-    , deleteSpotDatafeedSubscriptionResponse
-    , DeleteSpotDatafeedSubscriptionResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteSpotDatafeedSubscription.
---
---
---
--- /See:/ 'deleteSpotDatafeedSubscription' smart constructor.
-newtype DeleteSpotDatafeedSubscription = DeleteSpotDatafeedSubscription'
-    { _dsdssDryRun :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSpotDatafeedSubscription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsdssDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-deleteSpotDatafeedSubscription
-    :: DeleteSpotDatafeedSubscription
-deleteSpotDatafeedSubscription =
-    DeleteSpotDatafeedSubscription'
-    { _dsdssDryRun = Nothing
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsdssDryRun :: Lens' DeleteSpotDatafeedSubscription (Maybe Bool)
-dsdssDryRun = lens _dsdssDryRun (\ s a -> s{_dsdssDryRun = a});
-
-instance AWSRequest DeleteSpotDatafeedSubscription
-         where
-        type Rs DeleteSpotDatafeedSubscription =
-             DeleteSpotDatafeedSubscriptionResponse
-        request = postQuery ec2
-        response
-          = receiveNull DeleteSpotDatafeedSubscriptionResponse'
-
-instance Hashable DeleteSpotDatafeedSubscription
-
-instance NFData DeleteSpotDatafeedSubscription
-
-instance ToHeaders DeleteSpotDatafeedSubscription
-         where
-        toHeaders = const mempty
-
-instance ToPath DeleteSpotDatafeedSubscription where
-        toPath = const "/"
-
-instance ToQuery DeleteSpotDatafeedSubscription where
-        toQuery DeleteSpotDatafeedSubscription'{..}
-          = mconcat
-              ["Action" =:
-                 ("DeleteSpotDatafeedSubscription" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dsdssDryRun]
-
--- | /See:/ 'deleteSpotDatafeedSubscriptionResponse' smart constructor.
-data DeleteSpotDatafeedSubscriptionResponse =
-    DeleteSpotDatafeedSubscriptionResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSpotDatafeedSubscriptionResponse' with the minimum fields required to make a request.
---
-deleteSpotDatafeedSubscriptionResponse
-    :: DeleteSpotDatafeedSubscriptionResponse
-deleteSpotDatafeedSubscriptionResponse =
-    DeleteSpotDatafeedSubscriptionResponse'
-
-instance NFData
-         DeleteSpotDatafeedSubscriptionResponse
diff --git a/gen/Network/AWS/EC2/DeleteSubnet.hs b/gen/Network/AWS/EC2/DeleteSubnet.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteSubnet.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteSubnet
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified subnet. You must terminate all running instances in the subnet before you can delete the subnet.
---
---
-module Network.AWS.EC2.DeleteSubnet
-    (
-    -- * Creating a Request
-      deleteSubnet
-    , DeleteSubnet
-    -- * Request Lenses
-    , ddDryRun
-    , ddSubnetId
-
-    -- * Destructuring the Response
-    , deleteSubnetResponse
-    , DeleteSubnetResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteSubnet.
---
---
---
--- /See:/ 'deleteSubnet' smart constructor.
-data DeleteSubnet = DeleteSubnet'
-    { _ddDryRun   :: !(Maybe Bool)
-    , _ddSubnetId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSubnet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ddSubnetId' - The ID of the subnet.
-deleteSubnet
-    :: Text -- ^ 'ddSubnetId'
-    -> DeleteSubnet
-deleteSubnet pSubnetId_ =
-    DeleteSubnet'
-    { _ddDryRun = Nothing
-    , _ddSubnetId = pSubnetId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ddDryRun :: Lens' DeleteSubnet (Maybe Bool)
-ddDryRun = lens _ddDryRun (\ s a -> s{_ddDryRun = a});
-
--- | The ID of the subnet.
-ddSubnetId :: Lens' DeleteSubnet Text
-ddSubnetId = lens _ddSubnetId (\ s a -> s{_ddSubnetId = a});
-
-instance AWSRequest DeleteSubnet where
-        type Rs DeleteSubnet = DeleteSubnetResponse
-        request = postQuery ec2
-        response = receiveNull DeleteSubnetResponse'
-
-instance Hashable DeleteSubnet
-
-instance NFData DeleteSubnet
-
-instance ToHeaders DeleteSubnet where
-        toHeaders = const mempty
-
-instance ToPath DeleteSubnet where
-        toPath = const "/"
-
-instance ToQuery DeleteSubnet where
-        toQuery DeleteSubnet'{..}
-          = mconcat
-              ["Action" =: ("DeleteSubnet" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _ddDryRun, "SubnetId" =: _ddSubnetId]
-
--- | /See:/ 'deleteSubnetResponse' smart constructor.
-data DeleteSubnetResponse =
-    DeleteSubnetResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteSubnetResponse' with the minimum fields required to make a request.
---
-deleteSubnetResponse
-    :: DeleteSubnetResponse
-deleteSubnetResponse = DeleteSubnetResponse'
-
-instance NFData DeleteSubnetResponse
diff --git a/gen/Network/AWS/EC2/DeleteTags.hs b/gen/Network/AWS/EC2/DeleteTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteTags.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteTags
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified set of tags from the specified set of resources. This call is designed to follow a @DescribeTags@ request.
---
---
--- For more information about tags, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging Your Resources> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DeleteTags
-    (
-    -- * Creating a Request
-      deleteTags
-    , DeleteTags
-    -- * Request Lenses
-    , dtsDryRun
-    , dtsTags
-    , dtsResources
-
-    -- * Destructuring the Response
-    , deleteTagsResponse
-    , DeleteTagsResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteTags.
---
---
---
--- /See:/ 'deleteTags' smart constructor.
-data DeleteTags = DeleteTags'
-    { _dtsDryRun    :: !(Maybe Bool)
-    , _dtsTags      :: !(Maybe [Tag])
-    , _dtsResources :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dtsTags' - One or more tags to delete. If you omit the @value@ parameter, we delete the tag regardless of its value. If you specify this parameter with an empty string as the value, we delete the key only if its value is an empty string.
---
--- * 'dtsResources' - The ID of the resource. For example, ami-1a2b3c4d. You can specify more than one resource ID.
-deleteTags
-    :: DeleteTags
-deleteTags =
-    DeleteTags'
-    { _dtsDryRun = Nothing
-    , _dtsTags = Nothing
-    , _dtsResources = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dtsDryRun :: Lens' DeleteTags (Maybe Bool)
-dtsDryRun = lens _dtsDryRun (\ s a -> s{_dtsDryRun = a});
-
--- | One or more tags to delete. If you omit the @value@ parameter, we delete the tag regardless of its value. If you specify this parameter with an empty string as the value, we delete the key only if its value is an empty string.
-dtsTags :: Lens' DeleteTags [Tag]
-dtsTags = lens _dtsTags (\ s a -> s{_dtsTags = a}) . _Default . _Coerce;
-
--- | The ID of the resource. For example, ami-1a2b3c4d. You can specify more than one resource ID.
-dtsResources :: Lens' DeleteTags [Text]
-dtsResources = lens _dtsResources (\ s a -> s{_dtsResources = a}) . _Coerce;
-
-instance AWSRequest DeleteTags where
-        type Rs DeleteTags = DeleteTagsResponse
-        request = postQuery ec2
-        response = receiveNull DeleteTagsResponse'
-
-instance Hashable DeleteTags
-
-instance NFData DeleteTags
-
-instance ToHeaders DeleteTags where
-        toHeaders = const mempty
-
-instance ToPath DeleteTags where
-        toPath = const "/"
-
-instance ToQuery DeleteTags where
-        toQuery DeleteTags'{..}
-          = mconcat
-              ["Action" =: ("DeleteTags" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dtsDryRun,
-               toQuery (toQueryList "Tag" <$> _dtsTags),
-               toQueryList "ResourceId" _dtsResources]
-
--- | /See:/ 'deleteTagsResponse' smart constructor.
-data DeleteTagsResponse =
-    DeleteTagsResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteTagsResponse' with the minimum fields required to make a request.
---
-deleteTagsResponse
-    :: DeleteTagsResponse
-deleteTagsResponse = DeleteTagsResponse'
-
-instance NFData DeleteTagsResponse
diff --git a/gen/Network/AWS/EC2/DeleteVPC.hs b/gen/Network/AWS/EC2/DeleteVPC.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVPC.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified VPC. You must detach or delete all gateways and resources that are associated with the VPC before you can delete it. For example, you must terminate all instances running in the VPC, delete all security groups associated with the VPC (except the default one), delete all route tables associated with the VPC (except the default one), and so on.
---
---
-module Network.AWS.EC2.DeleteVPC
-    (
-    -- * Creating a Request
-      deleteVPC
-    , DeleteVPC
-    -- * Request Lenses
-    , delDryRun
-    , delVPCId
-
-    -- * Destructuring the Response
-    , deleteVPCResponse
-    , DeleteVPCResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVpc.
---
---
---
--- /See:/ 'deleteVPC' smart constructor.
-data DeleteVPC = DeleteVPC'
-    { _delDryRun :: !(Maybe Bool)
-    , _delVPCId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'delDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'delVPCId' - The ID of the VPC.
-deleteVPC
-    :: Text -- ^ 'delVPCId'
-    -> DeleteVPC
-deleteVPC pVPCId_ =
-    DeleteVPC'
-    { _delDryRun = Nothing
-    , _delVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-delDryRun :: Lens' DeleteVPC (Maybe Bool)
-delDryRun = lens _delDryRun (\ s a -> s{_delDryRun = a});
-
--- | The ID of the VPC.
-delVPCId :: Lens' DeleteVPC Text
-delVPCId = lens _delVPCId (\ s a -> s{_delVPCId = a});
-
-instance AWSRequest DeleteVPC where
-        type Rs DeleteVPC = DeleteVPCResponse
-        request = postQuery ec2
-        response = receiveNull DeleteVPCResponse'
-
-instance Hashable DeleteVPC
-
-instance NFData DeleteVPC
-
-instance ToHeaders DeleteVPC where
-        toHeaders = const mempty
-
-instance ToPath DeleteVPC where
-        toPath = const "/"
-
-instance ToQuery DeleteVPC where
-        toQuery DeleteVPC'{..}
-          = mconcat
-              ["Action" =: ("DeleteVpc" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _delDryRun, "VpcId" =: _delVPCId]
-
--- | /See:/ 'deleteVPCResponse' smart constructor.
-data DeleteVPCResponse =
-    DeleteVPCResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPCResponse' with the minimum fields required to make a request.
---
-deleteVPCResponse
-    :: DeleteVPCResponse
-deleteVPCResponse = DeleteVPCResponse'
-
-instance NFData DeleteVPCResponse
diff --git a/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs b/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVPCEndpoints
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes one or more specified VPC endpoints. Deleting the endpoint also deletes the endpoint routes in the route tables that were associated with the endpoint.
---
---
-module Network.AWS.EC2.DeleteVPCEndpoints
-    (
-    -- * Creating a Request
-      deleteVPCEndpoints
-    , DeleteVPCEndpoints
-    -- * Request Lenses
-    , dveDryRun
-    , dveVPCEndpointIds
-
-    -- * Destructuring the Response
-    , deleteVPCEndpointsResponse
-    , DeleteVPCEndpointsResponse
-    -- * Response Lenses
-    , dversUnsuccessful
-    , dversResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVpcEndpoints.
---
---
---
--- /See:/ 'deleteVPCEndpoints' smart constructor.
-data DeleteVPCEndpoints = DeleteVPCEndpoints'
-    { _dveDryRun         :: !(Maybe Bool)
-    , _dveVPCEndpointIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPCEndpoints' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dveDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dveVPCEndpointIds' - One or more endpoint IDs.
-deleteVPCEndpoints
-    :: DeleteVPCEndpoints
-deleteVPCEndpoints =
-    DeleteVPCEndpoints'
-    { _dveDryRun = Nothing
-    , _dveVPCEndpointIds = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dveDryRun :: Lens' DeleteVPCEndpoints (Maybe Bool)
-dveDryRun = lens _dveDryRun (\ s a -> s{_dveDryRun = a});
-
--- | One or more endpoint IDs.
-dveVPCEndpointIds :: Lens' DeleteVPCEndpoints [Text]
-dveVPCEndpointIds = lens _dveVPCEndpointIds (\ s a -> s{_dveVPCEndpointIds = a}) . _Coerce;
-
-instance AWSRequest DeleteVPCEndpoints where
-        type Rs DeleteVPCEndpoints =
-             DeleteVPCEndpointsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DeleteVPCEndpointsResponse' <$>
-                   (x .@? "unsuccessful" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DeleteVPCEndpoints
-
-instance NFData DeleteVPCEndpoints
-
-instance ToHeaders DeleteVPCEndpoints where
-        toHeaders = const mempty
-
-instance ToPath DeleteVPCEndpoints where
-        toPath = const "/"
-
-instance ToQuery DeleteVPCEndpoints where
-        toQuery DeleteVPCEndpoints'{..}
-          = mconcat
-              ["Action" =: ("DeleteVpcEndpoints" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dveDryRun,
-               toQueryList "VpcEndpointId" _dveVPCEndpointIds]
-
--- | Contains the output of DeleteVpcEndpoints.
---
---
---
--- /See:/ 'deleteVPCEndpointsResponse' smart constructor.
-data DeleteVPCEndpointsResponse = DeleteVPCEndpointsResponse'
-    { _dversUnsuccessful   :: !(Maybe [UnsuccessfulItem])
-    , _dversResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPCEndpointsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dversUnsuccessful' - Information about the endpoints that were not successfully deleted.
---
--- * 'dversResponseStatus' - -- | The response status code.
-deleteVPCEndpointsResponse
-    :: Int -- ^ 'dversResponseStatus'
-    -> DeleteVPCEndpointsResponse
-deleteVPCEndpointsResponse pResponseStatus_ =
-    DeleteVPCEndpointsResponse'
-    { _dversUnsuccessful = Nothing
-    , _dversResponseStatus = pResponseStatus_
-    }
-
--- | Information about the endpoints that were not successfully deleted.
-dversUnsuccessful :: Lens' DeleteVPCEndpointsResponse [UnsuccessfulItem]
-dversUnsuccessful = lens _dversUnsuccessful (\ s a -> s{_dversUnsuccessful = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dversResponseStatus :: Lens' DeleteVPCEndpointsResponse Int
-dversResponseStatus = lens _dversResponseStatus (\ s a -> s{_dversResponseStatus = a});
-
-instance NFData DeleteVPCEndpointsResponse
diff --git a/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs b/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVPCPeeringConnection
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes a VPC peering connection. Either the owner of the requester VPC or the owner of the peer VPC can delete the VPC peering connection if it's in the @active@ state. The owner of the requester VPC can delete a VPC peering connection in the @pending-acceptance@ state.
---
---
-module Network.AWS.EC2.DeleteVPCPeeringConnection
-    (
-    -- * Creating a Request
-      deleteVPCPeeringConnection
-    , DeleteVPCPeeringConnection
-    -- * Request Lenses
-    , dvpcDryRun
-    , dvpcVPCPeeringConnectionId
-
-    -- * Destructuring the Response
-    , deleteVPCPeeringConnectionResponse
-    , DeleteVPCPeeringConnectionResponse
-    -- * Response Lenses
-    , dvpcrsReturn
-    , dvpcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVpcPeeringConnection.
---
---
---
--- /See:/ 'deleteVPCPeeringConnection' smart constructor.
-data DeleteVPCPeeringConnection = DeleteVPCPeeringConnection'
-    { _dvpcDryRun                 :: !(Maybe Bool)
-    , _dvpcVPCPeeringConnectionId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPCPeeringConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvpcVPCPeeringConnectionId' - The ID of the VPC peering connection.
-deleteVPCPeeringConnection
-    :: Text -- ^ 'dvpcVPCPeeringConnectionId'
-    -> DeleteVPCPeeringConnection
-deleteVPCPeeringConnection pVPCPeeringConnectionId_ =
-    DeleteVPCPeeringConnection'
-    { _dvpcDryRun = Nothing
-    , _dvpcVPCPeeringConnectionId = pVPCPeeringConnectionId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpcDryRun :: Lens' DeleteVPCPeeringConnection (Maybe Bool)
-dvpcDryRun = lens _dvpcDryRun (\ s a -> s{_dvpcDryRun = a});
-
--- | The ID of the VPC peering connection.
-dvpcVPCPeeringConnectionId :: Lens' DeleteVPCPeeringConnection Text
-dvpcVPCPeeringConnectionId = lens _dvpcVPCPeeringConnectionId (\ s a -> s{_dvpcVPCPeeringConnectionId = a});
-
-instance AWSRequest DeleteVPCPeeringConnection where
-        type Rs DeleteVPCPeeringConnection =
-             DeleteVPCPeeringConnectionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DeleteVPCPeeringConnectionResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable DeleteVPCPeeringConnection
-
-instance NFData DeleteVPCPeeringConnection
-
-instance ToHeaders DeleteVPCPeeringConnection where
-        toHeaders = const mempty
-
-instance ToPath DeleteVPCPeeringConnection where
-        toPath = const "/"
-
-instance ToQuery DeleteVPCPeeringConnection where
-        toQuery DeleteVPCPeeringConnection'{..}
-          = mconcat
-              ["Action" =:
-                 ("DeleteVpcPeeringConnection" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvpcDryRun,
-               "VpcPeeringConnectionId" =:
-                 _dvpcVPCPeeringConnectionId]
-
--- | Contains the output of DeleteVpcPeeringConnection.
---
---
---
--- /See:/ 'deleteVPCPeeringConnectionResponse' smart constructor.
-data DeleteVPCPeeringConnectionResponse = DeleteVPCPeeringConnectionResponse'
-    { _dvpcrsReturn         :: !(Maybe Bool)
-    , _dvpcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPCPeeringConnectionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'dvpcrsResponseStatus' - -- | The response status code.
-deleteVPCPeeringConnectionResponse
-    :: Int -- ^ 'dvpcrsResponseStatus'
-    -> DeleteVPCPeeringConnectionResponse
-deleteVPCPeeringConnectionResponse pResponseStatus_ =
-    DeleteVPCPeeringConnectionResponse'
-    { _dvpcrsReturn = Nothing
-    , _dvpcrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-dvpcrsReturn :: Lens' DeleteVPCPeeringConnectionResponse (Maybe Bool)
-dvpcrsReturn = lens _dvpcrsReturn (\ s a -> s{_dvpcrsReturn = a});
-
--- | -- | The response status code.
-dvpcrsResponseStatus :: Lens' DeleteVPCPeeringConnectionResponse Int
-dvpcrsResponseStatus = lens _dvpcrsResponseStatus (\ s a -> s{_dvpcrsResponseStatus = a});
-
-instance NFData DeleteVPCPeeringConnectionResponse
diff --git a/gen/Network/AWS/EC2/DeleteVPNConnection.hs b/gen/Network/AWS/EC2/DeleteVPNConnection.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVPNConnection.hs
+++ /dev/null
@@ -1,116 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVPNConnection
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified VPN connection.
---
---
--- If you're deleting the VPC and its associated components, we recommend that you detach the virtual private gateway from the VPC and delete the VPC before deleting the VPN connection. If you believe that the tunnel credentials for your VPN connection have been compromised, you can delete the VPN connection and create a new one that has new keys, without needing to delete the VPC or virtual private gateway. If you create a new VPN connection, you must reconfigure the customer gateway using the new configuration information returned with the new VPN connection ID.
---
-module Network.AWS.EC2.DeleteVPNConnection
-    (
-    -- * Creating a Request
-      deleteVPNConnection
-    , DeleteVPNConnection
-    -- * Request Lenses
-    , dvcDryRun
-    , dvcVPNConnectionId
-
-    -- * Destructuring the Response
-    , deleteVPNConnectionResponse
-    , DeleteVPNConnectionResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVpnConnection.
---
---
---
--- /See:/ 'deleteVPNConnection' smart constructor.
-data DeleteVPNConnection = DeleteVPNConnection'
-    { _dvcDryRun          :: !(Maybe Bool)
-    , _dvcVPNConnectionId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPNConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvcVPNConnectionId' - The ID of the VPN connection.
-deleteVPNConnection
-    :: Text -- ^ 'dvcVPNConnectionId'
-    -> DeleteVPNConnection
-deleteVPNConnection pVPNConnectionId_ =
-    DeleteVPNConnection'
-    { _dvcDryRun = Nothing
-    , _dvcVPNConnectionId = pVPNConnectionId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvcDryRun :: Lens' DeleteVPNConnection (Maybe Bool)
-dvcDryRun = lens _dvcDryRun (\ s a -> s{_dvcDryRun = a});
-
--- | The ID of the VPN connection.
-dvcVPNConnectionId :: Lens' DeleteVPNConnection Text
-dvcVPNConnectionId = lens _dvcVPNConnectionId (\ s a -> s{_dvcVPNConnectionId = a});
-
-instance AWSRequest DeleteVPNConnection where
-        type Rs DeleteVPNConnection =
-             DeleteVPNConnectionResponse
-        request = postQuery ec2
-        response = receiveNull DeleteVPNConnectionResponse'
-
-instance Hashable DeleteVPNConnection
-
-instance NFData DeleteVPNConnection
-
-instance ToHeaders DeleteVPNConnection where
-        toHeaders = const mempty
-
-instance ToPath DeleteVPNConnection where
-        toPath = const "/"
-
-instance ToQuery DeleteVPNConnection where
-        toQuery DeleteVPNConnection'{..}
-          = mconcat
-              ["Action" =: ("DeleteVpnConnection" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvcDryRun,
-               "VpnConnectionId" =: _dvcVPNConnectionId]
-
--- | /See:/ 'deleteVPNConnectionResponse' smart constructor.
-data DeleteVPNConnectionResponse =
-    DeleteVPNConnectionResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPNConnectionResponse' with the minimum fields required to make a request.
---
-deleteVPNConnectionResponse
-    :: DeleteVPNConnectionResponse
-deleteVPNConnectionResponse = DeleteVPNConnectionResponse'
-
-instance NFData DeleteVPNConnectionResponse
diff --git a/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs b/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVPNConnectionRoute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified static route associated with a VPN connection between an existing virtual private gateway and a VPN customer gateway. The static route allows traffic to be routed from the virtual private gateway to the VPN customer gateway.
---
---
-module Network.AWS.EC2.DeleteVPNConnectionRoute
-    (
-    -- * Creating a Request
-      deleteVPNConnectionRoute
-    , DeleteVPNConnectionRoute
-    -- * Request Lenses
-    , dvcrVPNConnectionId
-    , dvcrDestinationCidrBlock
-
-    -- * Destructuring the Response
-    , deleteVPNConnectionRouteResponse
-    , DeleteVPNConnectionRouteResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVpnConnectionRoute.
---
---
---
--- /See:/ 'deleteVPNConnectionRoute' smart constructor.
-data DeleteVPNConnectionRoute = DeleteVPNConnectionRoute'
-    { _dvcrVPNConnectionId      :: !Text
-    , _dvcrDestinationCidrBlock :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPNConnectionRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcrVPNConnectionId' - The ID of the VPN connection.
---
--- * 'dvcrDestinationCidrBlock' - The CIDR block associated with the local subnet of the customer network.
-deleteVPNConnectionRoute
-    :: Text -- ^ 'dvcrVPNConnectionId'
-    -> Text -- ^ 'dvcrDestinationCidrBlock'
-    -> DeleteVPNConnectionRoute
-deleteVPNConnectionRoute pVPNConnectionId_ pDestinationCidrBlock_ =
-    DeleteVPNConnectionRoute'
-    { _dvcrVPNConnectionId = pVPNConnectionId_
-    , _dvcrDestinationCidrBlock = pDestinationCidrBlock_
-    }
-
--- | The ID of the VPN connection.
-dvcrVPNConnectionId :: Lens' DeleteVPNConnectionRoute Text
-dvcrVPNConnectionId = lens _dvcrVPNConnectionId (\ s a -> s{_dvcrVPNConnectionId = a});
-
--- | The CIDR block associated with the local subnet of the customer network.
-dvcrDestinationCidrBlock :: Lens' DeleteVPNConnectionRoute Text
-dvcrDestinationCidrBlock = lens _dvcrDestinationCidrBlock (\ s a -> s{_dvcrDestinationCidrBlock = a});
-
-instance AWSRequest DeleteVPNConnectionRoute where
-        type Rs DeleteVPNConnectionRoute =
-             DeleteVPNConnectionRouteResponse
-        request = postQuery ec2
-        response
-          = receiveNull DeleteVPNConnectionRouteResponse'
-
-instance Hashable DeleteVPNConnectionRoute
-
-instance NFData DeleteVPNConnectionRoute
-
-instance ToHeaders DeleteVPNConnectionRoute where
-        toHeaders = const mempty
-
-instance ToPath DeleteVPNConnectionRoute where
-        toPath = const "/"
-
-instance ToQuery DeleteVPNConnectionRoute where
-        toQuery DeleteVPNConnectionRoute'{..}
-          = mconcat
-              ["Action" =:
-                 ("DeleteVpnConnectionRoute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpnConnectionId" =: _dvcrVPNConnectionId,
-               "DestinationCidrBlock" =: _dvcrDestinationCidrBlock]
-
--- | /See:/ 'deleteVPNConnectionRouteResponse' smart constructor.
-data DeleteVPNConnectionRouteResponse =
-    DeleteVPNConnectionRouteResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPNConnectionRouteResponse' with the minimum fields required to make a request.
---
-deleteVPNConnectionRouteResponse
-    :: DeleteVPNConnectionRouteResponse
-deleteVPNConnectionRouteResponse = DeleteVPNConnectionRouteResponse'
-
-instance NFData DeleteVPNConnectionRouteResponse
diff --git a/gen/Network/AWS/EC2/DeleteVPNGateway.hs b/gen/Network/AWS/EC2/DeleteVPNGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVPNGateway.hs
+++ /dev/null
@@ -1,113 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVPNGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified virtual private gateway. We recommend that before you delete a virtual private gateway, you detach it from the VPC and delete the VPN connection. Note that you don't need to delete the virtual private gateway if you plan to delete and recreate the VPN connection between your VPC and your network.
---
---
-module Network.AWS.EC2.DeleteVPNGateway
-    (
-    -- * Creating a Request
-      deleteVPNGateway
-    , DeleteVPNGateway
-    -- * Request Lenses
-    , dvgDryRun
-    , dvgVPNGatewayId
-
-    -- * Destructuring the Response
-    , deleteVPNGatewayResponse
-    , DeleteVPNGatewayResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVpnGateway.
---
---
---
--- /See:/ 'deleteVPNGateway' smart constructor.
-data DeleteVPNGateway = DeleteVPNGateway'
-    { _dvgDryRun       :: !(Maybe Bool)
-    , _dvgVPNGatewayId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvgVPNGatewayId' - The ID of the virtual private gateway.
-deleteVPNGateway
-    :: Text -- ^ 'dvgVPNGatewayId'
-    -> DeleteVPNGateway
-deleteVPNGateway pVPNGatewayId_ =
-    DeleteVPNGateway'
-    { _dvgDryRun = Nothing
-    , _dvgVPNGatewayId = pVPNGatewayId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvgDryRun :: Lens' DeleteVPNGateway (Maybe Bool)
-dvgDryRun = lens _dvgDryRun (\ s a -> s{_dvgDryRun = a});
-
--- | The ID of the virtual private gateway.
-dvgVPNGatewayId :: Lens' DeleteVPNGateway Text
-dvgVPNGatewayId = lens _dvgVPNGatewayId (\ s a -> s{_dvgVPNGatewayId = a});
-
-instance AWSRequest DeleteVPNGateway where
-        type Rs DeleteVPNGateway = DeleteVPNGatewayResponse
-        request = postQuery ec2
-        response = receiveNull DeleteVPNGatewayResponse'
-
-instance Hashable DeleteVPNGateway
-
-instance NFData DeleteVPNGateway
-
-instance ToHeaders DeleteVPNGateway where
-        toHeaders = const mempty
-
-instance ToPath DeleteVPNGateway where
-        toPath = const "/"
-
-instance ToQuery DeleteVPNGateway where
-        toQuery DeleteVPNGateway'{..}
-          = mconcat
-              ["Action" =: ("DeleteVpnGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvgDryRun,
-               "VpnGatewayId" =: _dvgVPNGatewayId]
-
--- | /See:/ 'deleteVPNGatewayResponse' smart constructor.
-data DeleteVPNGatewayResponse =
-    DeleteVPNGatewayResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVPNGatewayResponse' with the minimum fields required to make a request.
---
-deleteVPNGatewayResponse
-    :: DeleteVPNGatewayResponse
-deleteVPNGatewayResponse = DeleteVPNGatewayResponse'
-
-instance NFData DeleteVPNGatewayResponse
diff --git a/gen/Network/AWS/EC2/DeleteVolume.hs b/gen/Network/AWS/EC2/DeleteVolume.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeleteVolume.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeleteVolume
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified EBS volume. The volume must be in the @available@ state (not attached to an instance).
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html Deleting an Amazon EBS Volume> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DeleteVolume
-    (
-    -- * Creating a Request
-      deleteVolume
-    , DeleteVolume
-    -- * Request Lenses
-    , dvvDryRun
-    , dvvVolumeId
-
-    -- * Destructuring the Response
-    , deleteVolumeResponse
-    , DeleteVolumeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeleteVolume.
---
---
---
--- /See:/ 'deleteVolume' smart constructor.
-data DeleteVolume = DeleteVolume'
-    { _dvvDryRun   :: !(Maybe Bool)
-    , _dvvVolumeId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVolume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvvDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvvVolumeId' - The ID of the volume.
-deleteVolume
-    :: Text -- ^ 'dvvVolumeId'
-    -> DeleteVolume
-deleteVolume pVolumeId_ =
-    DeleteVolume'
-    { _dvvDryRun = Nothing
-    , _dvvVolumeId = pVolumeId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvvDryRun :: Lens' DeleteVolume (Maybe Bool)
-dvvDryRun = lens _dvvDryRun (\ s a -> s{_dvvDryRun = a});
-
--- | The ID of the volume.
-dvvVolumeId :: Lens' DeleteVolume Text
-dvvVolumeId = lens _dvvVolumeId (\ s a -> s{_dvvVolumeId = a});
-
-instance AWSRequest DeleteVolume where
-        type Rs DeleteVolume = DeleteVolumeResponse
-        request = postQuery ec2
-        response = receiveNull DeleteVolumeResponse'
-
-instance Hashable DeleteVolume
-
-instance NFData DeleteVolume
-
-instance ToHeaders DeleteVolume where
-        toHeaders = const mempty
-
-instance ToPath DeleteVolume where
-        toPath = const "/"
-
-instance ToQuery DeleteVolume where
-        toQuery DeleteVolume'{..}
-          = mconcat
-              ["Action" =: ("DeleteVolume" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvvDryRun, "VolumeId" =: _dvvVolumeId]
-
--- | /See:/ 'deleteVolumeResponse' smart constructor.
-data DeleteVolumeResponse =
-    DeleteVolumeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeleteVolumeResponse' with the minimum fields required to make a request.
---
-deleteVolumeResponse
-    :: DeleteVolumeResponse
-deleteVolumeResponse = DeleteVolumeResponse'
-
-instance NFData DeleteVolumeResponse
diff --git a/gen/Network/AWS/EC2/DeregisterImage.hs b/gen/Network/AWS/EC2/DeregisterImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DeregisterImage.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DeregisterImage
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deregisters the specified AMI. After you deregister an AMI, it can't be used to launch new instances.
---
---
--- This command does not delete the AMI.
---
-module Network.AWS.EC2.DeregisterImage
-    (
-    -- * Creating a Request
-      deregisterImage
-    , DeregisterImage
-    -- * Request Lenses
-    , diDryRun
-    , diImageId
-
-    -- * Destructuring the Response
-    , deregisterImageResponse
-    , DeregisterImageResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DeregisterImage.
---
---
---
--- /See:/ 'deregisterImage' smart constructor.
-data DeregisterImage = DeregisterImage'
-    { _diDryRun  :: !(Maybe Bool)
-    , _diImageId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeregisterImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'diImageId' - The ID of the AMI.
-deregisterImage
-    :: Text -- ^ 'diImageId'
-    -> DeregisterImage
-deregisterImage pImageId_ =
-    DeregisterImage'
-    { _diDryRun = Nothing
-    , _diImageId = pImageId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-diDryRun :: Lens' DeregisterImage (Maybe Bool)
-diDryRun = lens _diDryRun (\ s a -> s{_diDryRun = a});
-
--- | The ID of the AMI.
-diImageId :: Lens' DeregisterImage Text
-diImageId = lens _diImageId (\ s a -> s{_diImageId = a});
-
-instance AWSRequest DeregisterImage where
-        type Rs DeregisterImage = DeregisterImageResponse
-        request = postQuery ec2
-        response = receiveNull DeregisterImageResponse'
-
-instance Hashable DeregisterImage
-
-instance NFData DeregisterImage
-
-instance ToHeaders DeregisterImage where
-        toHeaders = const mempty
-
-instance ToPath DeregisterImage where
-        toPath = const "/"
-
-instance ToQuery DeregisterImage where
-        toQuery DeregisterImage'{..}
-          = mconcat
-              ["Action" =: ("DeregisterImage" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _diDryRun, "ImageId" =: _diImageId]
-
--- | /See:/ 'deregisterImageResponse' smart constructor.
-data DeregisterImageResponse =
-    DeregisterImageResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DeregisterImageResponse' with the minimum fields required to make a request.
---
-deregisterImageResponse
-    :: DeregisterImageResponse
-deregisterImageResponse = DeregisterImageResponse'
-
-instance NFData DeregisterImageResponse
diff --git a/gen/Network/AWS/EC2/DescribeAccountAttributes.hs b/gen/Network/AWS/EC2/DescribeAccountAttributes.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeAccountAttributes.hs
+++ /dev/null
@@ -1,161 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeAccountAttributes
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes attributes of your AWS account. The following are the supported account attributes:
---
---
---     * @supported-platforms@ : Indicates whether your account can launch instances into EC2-Classic and EC2-VPC, or only into EC2-VPC.
---
---     * @default-vpc@ : The ID of the default VPC for your account, or @none@ .
---
---     * @max-instances@ : The maximum number of On-Demand instances that you can run.
---
---     * @vpc-max-security-groups-per-interface@ : The maximum number of security groups that you can assign to a network interface.
---
---     * @max-elastic-ips@ : The maximum number of Elastic IP addresses that you can allocate for use with EC2-Classic.
---
---     * @vpc-max-elastic-ips@ : The maximum number of Elastic IP addresses that you can allocate for use with EC2-VPC.
---
---
---
-module Network.AWS.EC2.DescribeAccountAttributes
-    (
-    -- * Creating a Request
-      describeAccountAttributes
-    , DescribeAccountAttributes
-    -- * Request Lenses
-    , daaAttributeNames
-    , daaDryRun
-
-    -- * Destructuring the Response
-    , describeAccountAttributesResponse
-    , DescribeAccountAttributesResponse
-    -- * Response Lenses
-    , daarsAccountAttributes
-    , daarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeAccountAttributes.
---
---
---
--- /See:/ 'describeAccountAttributes' smart constructor.
-data DescribeAccountAttributes = DescribeAccountAttributes'
-    { _daaAttributeNames :: !(Maybe [AccountAttributeName])
-    , _daaDryRun         :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeAccountAttributes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daaAttributeNames' - One or more account attribute names.
---
--- * 'daaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeAccountAttributes
-    :: DescribeAccountAttributes
-describeAccountAttributes =
-    DescribeAccountAttributes'
-    { _daaAttributeNames = Nothing
-    , _daaDryRun = Nothing
-    }
-
--- | One or more account attribute names.
-daaAttributeNames :: Lens' DescribeAccountAttributes [AccountAttributeName]
-daaAttributeNames = lens _daaAttributeNames (\ s a -> s{_daaAttributeNames = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-daaDryRun :: Lens' DescribeAccountAttributes (Maybe Bool)
-daaDryRun = lens _daaDryRun (\ s a -> s{_daaDryRun = a});
-
-instance AWSRequest DescribeAccountAttributes where
-        type Rs DescribeAccountAttributes =
-             DescribeAccountAttributesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeAccountAttributesResponse' <$>
-                   (x .@? "accountAttributeSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeAccountAttributes
-
-instance NFData DescribeAccountAttributes
-
-instance ToHeaders DescribeAccountAttributes where
-        toHeaders = const mempty
-
-instance ToPath DescribeAccountAttributes where
-        toPath = const "/"
-
-instance ToQuery DescribeAccountAttributes where
-        toQuery DescribeAccountAttributes'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeAccountAttributes" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "AttributeName" <$> _daaAttributeNames),
-               "DryRun" =: _daaDryRun]
-
--- | Contains the output of DescribeAccountAttributes.
---
---
---
--- /See:/ 'describeAccountAttributesResponse' smart constructor.
-data DescribeAccountAttributesResponse = DescribeAccountAttributesResponse'
-    { _daarsAccountAttributes :: !(Maybe [AccountAttribute])
-    , _daarsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeAccountAttributesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daarsAccountAttributes' - Information about one or more account attributes.
---
--- * 'daarsResponseStatus' - -- | The response status code.
-describeAccountAttributesResponse
-    :: Int -- ^ 'daarsResponseStatus'
-    -> DescribeAccountAttributesResponse
-describeAccountAttributesResponse pResponseStatus_ =
-    DescribeAccountAttributesResponse'
-    { _daarsAccountAttributes = Nothing
-    , _daarsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more account attributes.
-daarsAccountAttributes :: Lens' DescribeAccountAttributesResponse [AccountAttribute]
-daarsAccountAttributes = lens _daarsAccountAttributes (\ s a -> s{_daarsAccountAttributes = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-daarsResponseStatus :: Lens' DescribeAccountAttributesResponse Int
-daarsResponseStatus = lens _daarsResponseStatus (\ s a -> s{_daarsResponseStatus = a});
-
-instance NFData DescribeAccountAttributesResponse
diff --git a/gen/Network/AWS/EC2/DescribeAddresses.hs b/gen/Network/AWS/EC2/DescribeAddresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeAddresses.hs
+++ /dev/null
@@ -1,167 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeAddresses
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your Elastic IP addresses.
---
---
--- An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeAddresses
-    (
-    -- * Creating a Request
-      describeAddresses
-    , DescribeAddresses
-    -- * Request Lenses
-    , daFilters
-    , daPublicIPs
-    , daAllocationIds
-    , daDryRun
-
-    -- * Destructuring the Response
-    , describeAddressesResponse
-    , DescribeAddressesResponse
-    -- * Response Lenses
-    , darsAddresses
-    , darsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeAddresses.
---
---
---
--- /See:/ 'describeAddresses' smart constructor.
-data DescribeAddresses = DescribeAddresses'
-    { _daFilters       :: !(Maybe [Filter])
-    , _daPublicIPs     :: !(Maybe [Text])
-    , _daAllocationIds :: !(Maybe [Text])
-    , _daDryRun        :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeAddresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daFilters' - One or more filters. Filter names and values are case-sensitive.     * @allocation-id@ - [EC2-VPC] The allocation ID for the address.     * @association-id@ - [EC2-VPC] The association ID for the address.     * @domain@ - Indicates whether the address is for use in EC2-Classic (@standard@ ) or in a VPC (@vpc@ ).     * @instance-id@ - The ID of the instance the address is associated with, if any.     * @network-interface-id@ - [EC2-VPC] The ID of the network interface that the address is associated with, if any.     * @network-interface-owner-id@ - The AWS account ID of the owner.     * @private-ip-address@ - [EC2-VPC] The private IP address associated with the Elastic IP address.     * @public-ip@ - The Elastic IP address.
---
--- * 'daPublicIPs' - [EC2-Classic] One or more Elastic IP addresses. Default: Describes all your Elastic IP addresses.
---
--- * 'daAllocationIds' - [EC2-VPC] One or more allocation IDs. Default: Describes all your Elastic IP addresses.
---
--- * 'daDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeAddresses
-    :: DescribeAddresses
-describeAddresses =
-    DescribeAddresses'
-    { _daFilters = Nothing
-    , _daPublicIPs = Nothing
-    , _daAllocationIds = Nothing
-    , _daDryRun = Nothing
-    }
-
--- | One or more filters. Filter names and values are case-sensitive.     * @allocation-id@ - [EC2-VPC] The allocation ID for the address.     * @association-id@ - [EC2-VPC] The association ID for the address.     * @domain@ - Indicates whether the address is for use in EC2-Classic (@standard@ ) or in a VPC (@vpc@ ).     * @instance-id@ - The ID of the instance the address is associated with, if any.     * @network-interface-id@ - [EC2-VPC] The ID of the network interface that the address is associated with, if any.     * @network-interface-owner-id@ - The AWS account ID of the owner.     * @private-ip-address@ - [EC2-VPC] The private IP address associated with the Elastic IP address.     * @public-ip@ - The Elastic IP address.
-daFilters :: Lens' DescribeAddresses [Filter]
-daFilters = lens _daFilters (\ s a -> s{_daFilters = a}) . _Default . _Coerce;
-
--- | [EC2-Classic] One or more Elastic IP addresses. Default: Describes all your Elastic IP addresses.
-daPublicIPs :: Lens' DescribeAddresses [Text]
-daPublicIPs = lens _daPublicIPs (\ s a -> s{_daPublicIPs = a}) . _Default . _Coerce;
-
--- | [EC2-VPC] One or more allocation IDs. Default: Describes all your Elastic IP addresses.
-daAllocationIds :: Lens' DescribeAddresses [Text]
-daAllocationIds = lens _daAllocationIds (\ s a -> s{_daAllocationIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-daDryRun :: Lens' DescribeAddresses (Maybe Bool)
-daDryRun = lens _daDryRun (\ s a -> s{_daDryRun = a});
-
-instance AWSRequest DescribeAddresses where
-        type Rs DescribeAddresses = DescribeAddressesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeAddressesResponse' <$>
-                   (x .@? "addressesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeAddresses
-
-instance NFData DescribeAddresses
-
-instance ToHeaders DescribeAddresses where
-        toHeaders = const mempty
-
-instance ToPath DescribeAddresses where
-        toPath = const "/"
-
-instance ToQuery DescribeAddresses where
-        toQuery DescribeAddresses'{..}
-          = mconcat
-              ["Action" =: ("DescribeAddresses" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _daFilters),
-               toQuery (toQueryList "PublicIp" <$> _daPublicIPs),
-               toQuery
-                 (toQueryList "AllocationId" <$> _daAllocationIds),
-               "DryRun" =: _daDryRun]
-
--- | Contains the output of DescribeAddresses.
---
---
---
--- /See:/ 'describeAddressesResponse' smart constructor.
-data DescribeAddressesResponse = DescribeAddressesResponse'
-    { _darsAddresses      :: !(Maybe [Address])
-    , _darsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeAddressesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'darsAddresses' - Information about one or more Elastic IP addresses.
---
--- * 'darsResponseStatus' - -- | The response status code.
-describeAddressesResponse
-    :: Int -- ^ 'darsResponseStatus'
-    -> DescribeAddressesResponse
-describeAddressesResponse pResponseStatus_ =
-    DescribeAddressesResponse'
-    { _darsAddresses = Nothing
-    , _darsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more Elastic IP addresses.
-darsAddresses :: Lens' DescribeAddressesResponse [Address]
-darsAddresses = lens _darsAddresses (\ s a -> s{_darsAddresses = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-darsResponseStatus :: Lens' DescribeAddressesResponse Int
-darsResponseStatus = lens _darsResponseStatus (\ s a -> s{_darsResponseStatus = a});
-
-instance NFData DescribeAddressesResponse
diff --git a/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs b/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeAvailabilityZones
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of the Availability Zones that are available to you. The results include zones only for the region you're currently using. If there is an event impacting an Availability Zone, you can use this request to view the state and any provided message for that Availability Zone.
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html Regions and Availability Zones> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeAvailabilityZones
-    (
-    -- * Creating a Request
-      describeAvailabilityZones
-    , DescribeAvailabilityZones
-    -- * Request Lenses
-    , dazZoneNames
-    , dazFilters
-    , dazDryRun
-
-    -- * Destructuring the Response
-    , describeAvailabilityZonesResponse
-    , DescribeAvailabilityZonesResponse
-    -- * Response Lenses
-    , dazrsAvailabilityZones
-    , dazrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeAvailabilityZones.
---
---
---
--- /See:/ 'describeAvailabilityZones' smart constructor.
-data DescribeAvailabilityZones = DescribeAvailabilityZones'
-    { _dazZoneNames :: !(Maybe [Text])
-    , _dazFilters   :: !(Maybe [Filter])
-    , _dazDryRun    :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeAvailabilityZones' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dazZoneNames' - The names of one or more Availability Zones.
---
--- * 'dazFilters' - One or more filters.     * @message@ - Information about the Availability Zone.     * @region-name@ - The name of the region for the Availability Zone (for example, @us-east-1@ ).     * @state@ - The state of the Availability Zone (@available@ | @information@ | @impaired@ | @unavailable@ ).     * @zone-name@ - The name of the Availability Zone (for example, @us-east-1a@ ).
---
--- * 'dazDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeAvailabilityZones
-    :: DescribeAvailabilityZones
-describeAvailabilityZones =
-    DescribeAvailabilityZones'
-    { _dazZoneNames = Nothing
-    , _dazFilters = Nothing
-    , _dazDryRun = Nothing
-    }
-
--- | The names of one or more Availability Zones.
-dazZoneNames :: Lens' DescribeAvailabilityZones [Text]
-dazZoneNames = lens _dazZoneNames (\ s a -> s{_dazZoneNames = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @message@ - Information about the Availability Zone.     * @region-name@ - The name of the region for the Availability Zone (for example, @us-east-1@ ).     * @state@ - The state of the Availability Zone (@available@ | @information@ | @impaired@ | @unavailable@ ).     * @zone-name@ - The name of the Availability Zone (for example, @us-east-1a@ ).
-dazFilters :: Lens' DescribeAvailabilityZones [Filter]
-dazFilters = lens _dazFilters (\ s a -> s{_dazFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dazDryRun :: Lens' DescribeAvailabilityZones (Maybe Bool)
-dazDryRun = lens _dazDryRun (\ s a -> s{_dazDryRun = a});
-
-instance AWSRequest DescribeAvailabilityZones where
-        type Rs DescribeAvailabilityZones =
-             DescribeAvailabilityZonesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeAvailabilityZonesResponse' <$>
-                   (x .@? "availabilityZoneInfo" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeAvailabilityZones
-
-instance NFData DescribeAvailabilityZones
-
-instance ToHeaders DescribeAvailabilityZones where
-        toHeaders = const mempty
-
-instance ToPath DescribeAvailabilityZones where
-        toPath = const "/"
-
-instance ToQuery DescribeAvailabilityZones where
-        toQuery DescribeAvailabilityZones'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeAvailabilityZones" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "ZoneName" <$> _dazZoneNames),
-               toQuery (toQueryList "Filter" <$> _dazFilters),
-               "DryRun" =: _dazDryRun]
-
--- | Contains the output of DescribeAvailabiltyZones.
---
---
---
--- /See:/ 'describeAvailabilityZonesResponse' smart constructor.
-data DescribeAvailabilityZonesResponse = DescribeAvailabilityZonesResponse'
-    { _dazrsAvailabilityZones :: !(Maybe [AvailabilityZone])
-    , _dazrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeAvailabilityZonesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dazrsAvailabilityZones' - Information about one or more Availability Zones.
---
--- * 'dazrsResponseStatus' - -- | The response status code.
-describeAvailabilityZonesResponse
-    :: Int -- ^ 'dazrsResponseStatus'
-    -> DescribeAvailabilityZonesResponse
-describeAvailabilityZonesResponse pResponseStatus_ =
-    DescribeAvailabilityZonesResponse'
-    { _dazrsAvailabilityZones = Nothing
-    , _dazrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more Availability Zones.
-dazrsAvailabilityZones :: Lens' DescribeAvailabilityZonesResponse [AvailabilityZone]
-dazrsAvailabilityZones = lens _dazrsAvailabilityZones (\ s a -> s{_dazrsAvailabilityZones = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dazrsResponseStatus :: Lens' DescribeAvailabilityZonesResponse Int
-dazrsResponseStatus = lens _dazrsResponseStatus (\ s a -> s{_dazrsResponseStatus = a});
-
-instance NFData DescribeAvailabilityZonesResponse
diff --git a/gen/Network/AWS/EC2/DescribeBundleTasks.hs b/gen/Network/AWS/EC2/DescribeBundleTasks.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeBundleTasks.hs
+++ /dev/null
@@ -1,155 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeBundleTasks
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your bundling tasks.
---
---
-module Network.AWS.EC2.DescribeBundleTasks
-    (
-    -- * Creating a Request
-      describeBundleTasks
-    , DescribeBundleTasks
-    -- * Request Lenses
-    , dbtBundleIds
-    , dbtFilters
-    , dbtDryRun
-
-    -- * Destructuring the Response
-    , describeBundleTasksResponse
-    , DescribeBundleTasksResponse
-    -- * Response Lenses
-    , dbtrsBundleTasks
-    , dbtrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeBundleTasks.
---
---
---
--- /See:/ 'describeBundleTasks' smart constructor.
-data DescribeBundleTasks = DescribeBundleTasks'
-    { _dbtBundleIds :: !(Maybe [Text])
-    , _dbtFilters   :: !(Maybe [Filter])
-    , _dbtDryRun    :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeBundleTasks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dbtBundleIds' - One or more bundle task IDs. Default: Describes all your bundle tasks.
---
--- * 'dbtFilters' - One or more filters.     * @bundle-id@ - The ID of the bundle task.     * @error-code@ - If the task failed, the error code returned.     * @error-message@ - If the task failed, the error message returned.     * @instance-id@ - The ID of the instance.     * @progress@ - The level of task completion, as a percentage (for example, 20%).     * @s3-bucket@ - The Amazon S3 bucket to store the AMI.     * @s3-prefix@ - The beginning of the AMI name.     * @start-time@ - The time the task started (for example, 2013-09-15T17:15:20.000Z).     * @state@ - The state of the task (@pending@ | @waiting-for-shutdown@ | @bundling@ | @storing@ | @cancelling@ | @complete@ | @failed@ ).     * @update-time@ - The time of the most recent update for the task.
---
--- * 'dbtDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeBundleTasks
-    :: DescribeBundleTasks
-describeBundleTasks =
-    DescribeBundleTasks'
-    { _dbtBundleIds = Nothing
-    , _dbtFilters = Nothing
-    , _dbtDryRun = Nothing
-    }
-
--- | One or more bundle task IDs. Default: Describes all your bundle tasks.
-dbtBundleIds :: Lens' DescribeBundleTasks [Text]
-dbtBundleIds = lens _dbtBundleIds (\ s a -> s{_dbtBundleIds = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @bundle-id@ - The ID of the bundle task.     * @error-code@ - If the task failed, the error code returned.     * @error-message@ - If the task failed, the error message returned.     * @instance-id@ - The ID of the instance.     * @progress@ - The level of task completion, as a percentage (for example, 20%).     * @s3-bucket@ - The Amazon S3 bucket to store the AMI.     * @s3-prefix@ - The beginning of the AMI name.     * @start-time@ - The time the task started (for example, 2013-09-15T17:15:20.000Z).     * @state@ - The state of the task (@pending@ | @waiting-for-shutdown@ | @bundling@ | @storing@ | @cancelling@ | @complete@ | @failed@ ).     * @update-time@ - The time of the most recent update for the task.
-dbtFilters :: Lens' DescribeBundleTasks [Filter]
-dbtFilters = lens _dbtFilters (\ s a -> s{_dbtFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dbtDryRun :: Lens' DescribeBundleTasks (Maybe Bool)
-dbtDryRun = lens _dbtDryRun (\ s a -> s{_dbtDryRun = a});
-
-instance AWSRequest DescribeBundleTasks where
-        type Rs DescribeBundleTasks =
-             DescribeBundleTasksResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeBundleTasksResponse' <$>
-                   (x .@? "bundleInstanceTasksSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeBundleTasks
-
-instance NFData DescribeBundleTasks
-
-instance ToHeaders DescribeBundleTasks where
-        toHeaders = const mempty
-
-instance ToPath DescribeBundleTasks where
-        toPath = const "/"
-
-instance ToQuery DescribeBundleTasks where
-        toQuery DescribeBundleTasks'{..}
-          = mconcat
-              ["Action" =: ("DescribeBundleTasks" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "BundleId" <$> _dbtBundleIds),
-               toQuery (toQueryList "Filter" <$> _dbtFilters),
-               "DryRun" =: _dbtDryRun]
-
--- | Contains the output of DescribeBundleTasks.
---
---
---
--- /See:/ 'describeBundleTasksResponse' smart constructor.
-data DescribeBundleTasksResponse = DescribeBundleTasksResponse'
-    { _dbtrsBundleTasks    :: !(Maybe [BundleTask])
-    , _dbtrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeBundleTasksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dbtrsBundleTasks' - Information about one or more bundle tasks.
---
--- * 'dbtrsResponseStatus' - -- | The response status code.
-describeBundleTasksResponse
-    :: Int -- ^ 'dbtrsResponseStatus'
-    -> DescribeBundleTasksResponse
-describeBundleTasksResponse pResponseStatus_ =
-    DescribeBundleTasksResponse'
-    { _dbtrsBundleTasks = Nothing
-    , _dbtrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more bundle tasks.
-dbtrsBundleTasks :: Lens' DescribeBundleTasksResponse [BundleTask]
-dbtrsBundleTasks = lens _dbtrsBundleTasks (\ s a -> s{_dbtrsBundleTasks = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dbtrsResponseStatus :: Lens' DescribeBundleTasksResponse Int
-dbtrsResponseStatus = lens _dbtrsResponseStatus (\ s a -> s{_dbtrsResponseStatus = a});
-
-instance NFData DescribeBundleTasksResponse
diff --git a/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs b/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs
+++ /dev/null
@@ -1,188 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeClassicLinkInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your linked EC2-Classic instances. This request only returns information about EC2-Classic instances linked to a VPC through ClassicLink; you cannot use this request to return information about other instances.
---
---
-module Network.AWS.EC2.DescribeClassicLinkInstances
-    (
-    -- * Creating a Request
-      describeClassicLinkInstances
-    , DescribeClassicLinkInstances
-    -- * Request Lenses
-    , dcliFilters
-    , dcliNextToken
-    , dcliInstanceIds
-    , dcliDryRun
-    , dcliMaxResults
-
-    -- * Destructuring the Response
-    , describeClassicLinkInstancesResponse
-    , DescribeClassicLinkInstancesResponse
-    -- * Response Lenses
-    , dclirsNextToken
-    , dclirsInstances
-    , dclirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeClassicLinkInstances.
---
---
---
--- /See:/ 'describeClassicLinkInstances' smart constructor.
-data DescribeClassicLinkInstances = DescribeClassicLinkInstances'
-    { _dcliFilters     :: !(Maybe [Filter])
-    , _dcliNextToken   :: !(Maybe Text)
-    , _dcliInstanceIds :: !(Maybe [Text])
-    , _dcliDryRun      :: !(Maybe Bool)
-    , _dcliMaxResults  :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeClassicLinkInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcliFilters' - One or more filters.     * @group-id@ - The ID of a VPC security group that's associated with the instance.     * @instance-id@ - The ID of the instance.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC that the instance is linked to.
---
--- * 'dcliNextToken' - The token to retrieve the next page of results.
---
--- * 'dcliInstanceIds' - One or more instance IDs. Must be instances linked to a VPC through ClassicLink.
---
--- * 'dcliDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dcliMaxResults' - The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. You cannot specify this parameter and the instance IDs parameter in the same request. Constraint: If the value is greater than 1000, we return only 1000 items.
-describeClassicLinkInstances
-    :: DescribeClassicLinkInstances
-describeClassicLinkInstances =
-    DescribeClassicLinkInstances'
-    { _dcliFilters = Nothing
-    , _dcliNextToken = Nothing
-    , _dcliInstanceIds = Nothing
-    , _dcliDryRun = Nothing
-    , _dcliMaxResults = Nothing
-    }
-
--- | One or more filters.     * @group-id@ - The ID of a VPC security group that's associated with the instance.     * @instance-id@ - The ID of the instance.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC that the instance is linked to.
-dcliFilters :: Lens' DescribeClassicLinkInstances [Filter]
-dcliFilters = lens _dcliFilters (\ s a -> s{_dcliFilters = a}) . _Default . _Coerce;
-
--- | The token to retrieve the next page of results.
-dcliNextToken :: Lens' DescribeClassicLinkInstances (Maybe Text)
-dcliNextToken = lens _dcliNextToken (\ s a -> s{_dcliNextToken = a});
-
--- | One or more instance IDs. Must be instances linked to a VPC through ClassicLink.
-dcliInstanceIds :: Lens' DescribeClassicLinkInstances [Text]
-dcliInstanceIds = lens _dcliInstanceIds (\ s a -> s{_dcliInstanceIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dcliDryRun :: Lens' DescribeClassicLinkInstances (Maybe Bool)
-dcliDryRun = lens _dcliDryRun (\ s a -> s{_dcliDryRun = a});
-
--- | The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. You cannot specify this parameter and the instance IDs parameter in the same request. Constraint: If the value is greater than 1000, we return only 1000 items.
-dcliMaxResults :: Lens' DescribeClassicLinkInstances (Maybe Int)
-dcliMaxResults = lens _dcliMaxResults (\ s a -> s{_dcliMaxResults = a});
-
-instance AWSRequest DescribeClassicLinkInstances
-         where
-        type Rs DescribeClassicLinkInstances =
-             DescribeClassicLinkInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeClassicLinkInstancesResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "instancesSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeClassicLinkInstances
-
-instance NFData DescribeClassicLinkInstances
-
-instance ToHeaders DescribeClassicLinkInstances where
-        toHeaders = const mempty
-
-instance ToPath DescribeClassicLinkInstances where
-        toPath = const "/"
-
-instance ToQuery DescribeClassicLinkInstances where
-        toQuery DescribeClassicLinkInstances'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeClassicLinkInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dcliFilters),
-               "NextToken" =: _dcliNextToken,
-               toQuery
-                 (toQueryList "InstanceId" <$> _dcliInstanceIds),
-               "DryRun" =: _dcliDryRun,
-               "MaxResults" =: _dcliMaxResults]
-
--- | Contains the output of DescribeClassicLinkInstances.
---
---
---
--- /See:/ 'describeClassicLinkInstancesResponse' smart constructor.
-data DescribeClassicLinkInstancesResponse = DescribeClassicLinkInstancesResponse'
-    { _dclirsNextToken      :: !(Maybe Text)
-    , _dclirsInstances      :: !(Maybe [ClassicLinkInstance])
-    , _dclirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeClassicLinkInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dclirsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dclirsInstances' - Information about one or more linked EC2-Classic instances.
---
--- * 'dclirsResponseStatus' - -- | The response status code.
-describeClassicLinkInstancesResponse
-    :: Int -- ^ 'dclirsResponseStatus'
-    -> DescribeClassicLinkInstancesResponse
-describeClassicLinkInstancesResponse pResponseStatus_ =
-    DescribeClassicLinkInstancesResponse'
-    { _dclirsNextToken = Nothing
-    , _dclirsInstances = Nothing
-    , _dclirsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dclirsNextToken :: Lens' DescribeClassicLinkInstancesResponse (Maybe Text)
-dclirsNextToken = lens _dclirsNextToken (\ s a -> s{_dclirsNextToken = a});
-
--- | Information about one or more linked EC2-Classic instances.
-dclirsInstances :: Lens' DescribeClassicLinkInstancesResponse [ClassicLinkInstance]
-dclirsInstances = lens _dclirsInstances (\ s a -> s{_dclirsInstances = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dclirsResponseStatus :: Lens' DescribeClassicLinkInstancesResponse Int
-dclirsResponseStatus = lens _dclirsResponseStatus (\ s a -> s{_dclirsResponseStatus = a});
-
-instance NFData DescribeClassicLinkInstancesResponse
diff --git a/gen/Network/AWS/EC2/DescribeConversionTasks.hs b/gen/Network/AWS/EC2/DescribeConversionTasks.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeConversionTasks.hs
+++ /dev/null
@@ -1,150 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeConversionTasks
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your conversion tasks. For more information, see the <http://docs.aws.amazon.com/vm-import/latest/userguide/ VM Import/Export User Guide> .
---
---
--- For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
---
-module Network.AWS.EC2.DescribeConversionTasks
-    (
-    -- * Creating a Request
-      describeConversionTasks
-    , DescribeConversionTasks
-    -- * Request Lenses
-    , dctConversionTaskIds
-    , dctDryRun
-
-    -- * Destructuring the Response
-    , describeConversionTasksResponse
-    , DescribeConversionTasksResponse
-    -- * Response Lenses
-    , dctrsConversionTasks
-    , dctrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeConversionTasks.
---
---
---
--- /See:/ 'describeConversionTasks' smart constructor.
-data DescribeConversionTasks = DescribeConversionTasks'
-    { _dctConversionTaskIds :: !(Maybe [Text])
-    , _dctDryRun            :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeConversionTasks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dctConversionTaskIds' - One or more conversion task IDs.
---
--- * 'dctDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeConversionTasks
-    :: DescribeConversionTasks
-describeConversionTasks =
-    DescribeConversionTasks'
-    { _dctConversionTaskIds = Nothing
-    , _dctDryRun = Nothing
-    }
-
--- | One or more conversion task IDs.
-dctConversionTaskIds :: Lens' DescribeConversionTasks [Text]
-dctConversionTaskIds = lens _dctConversionTaskIds (\ s a -> s{_dctConversionTaskIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dctDryRun :: Lens' DescribeConversionTasks (Maybe Bool)
-dctDryRun = lens _dctDryRun (\ s a -> s{_dctDryRun = a});
-
-instance AWSRequest DescribeConversionTasks where
-        type Rs DescribeConversionTasks =
-             DescribeConversionTasksResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeConversionTasksResponse' <$>
-                   (x .@? "conversionTasks" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeConversionTasks
-
-instance NFData DescribeConversionTasks
-
-instance ToHeaders DescribeConversionTasks where
-        toHeaders = const mempty
-
-instance ToPath DescribeConversionTasks where
-        toPath = const "/"
-
-instance ToQuery DescribeConversionTasks where
-        toQuery DescribeConversionTasks'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeConversionTasks" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "ConversionTaskId" <$>
-                    _dctConversionTaskIds),
-               "DryRun" =: _dctDryRun]
-
--- | Contains the output for DescribeConversionTasks.
---
---
---
--- /See:/ 'describeConversionTasksResponse' smart constructor.
-data DescribeConversionTasksResponse = DescribeConversionTasksResponse'
-    { _dctrsConversionTasks :: !(Maybe [ConversionTask])
-    , _dctrsResponseStatus  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeConversionTasksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dctrsConversionTasks' - Information about the conversion tasks.
---
--- * 'dctrsResponseStatus' - -- | The response status code.
-describeConversionTasksResponse
-    :: Int -- ^ 'dctrsResponseStatus'
-    -> DescribeConversionTasksResponse
-describeConversionTasksResponse pResponseStatus_ =
-    DescribeConversionTasksResponse'
-    { _dctrsConversionTasks = Nothing
-    , _dctrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the conversion tasks.
-dctrsConversionTasks :: Lens' DescribeConversionTasksResponse [ConversionTask]
-dctrsConversionTasks = lens _dctrsConversionTasks (\ s a -> s{_dctrsConversionTasks = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dctrsResponseStatus :: Lens' DescribeConversionTasksResponse Int
-dctrsResponseStatus = lens _dctrsResponseStatus (\ s a -> s{_dctrsResponseStatus = a});
-
-instance NFData DescribeConversionTasksResponse
diff --git a/gen/Network/AWS/EC2/DescribeCustomerGateways.hs b/gen/Network/AWS/EC2/DescribeCustomerGateways.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeCustomerGateways.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeCustomerGateways
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your VPN customer gateways.
---
---
--- For more information about VPN customer gateways, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeCustomerGateways
-    (
-    -- * Creating a Request
-      describeCustomerGateways
-    , DescribeCustomerGateways
-    -- * Request Lenses
-    , dcgCustomerGatewayIds
-    , dcgFilters
-    , dcgDryRun
-
-    -- * Destructuring the Response
-    , describeCustomerGatewaysResponse
-    , DescribeCustomerGatewaysResponse
-    -- * Response Lenses
-    , dcgrsCustomerGateways
-    , dcgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeCustomerGateways.
---
---
---
--- /See:/ 'describeCustomerGateways' smart constructor.
-data DescribeCustomerGateways = DescribeCustomerGateways'
-    { _dcgCustomerGatewayIds :: !(Maybe [Text])
-    , _dcgFilters            :: !(Maybe [Filter])
-    , _dcgDryRun             :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeCustomerGateways' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcgCustomerGatewayIds' - One or more customer gateway IDs. Default: Describes all your customer gateways.
---
--- * 'dcgFilters' - One or more filters.     * @bgp-asn@ - The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).     * @customer-gateway-id@ - The ID of the customer gateway.     * @ip-address@ - The IP address of the customer gateway's Internet-routable external interface.     * @state@ - The state of the customer gateway (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @type@ - The type of customer gateway. Currently, the only supported type is @ipsec.1@ .     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
---
--- * 'dcgDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeCustomerGateways
-    :: DescribeCustomerGateways
-describeCustomerGateways =
-    DescribeCustomerGateways'
-    { _dcgCustomerGatewayIds = Nothing
-    , _dcgFilters = Nothing
-    , _dcgDryRun = Nothing
-    }
-
--- | One or more customer gateway IDs. Default: Describes all your customer gateways.
-dcgCustomerGatewayIds :: Lens' DescribeCustomerGateways [Text]
-dcgCustomerGatewayIds = lens _dcgCustomerGatewayIds (\ s a -> s{_dcgCustomerGatewayIds = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @bgp-asn@ - The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).     * @customer-gateway-id@ - The ID of the customer gateway.     * @ip-address@ - The IP address of the customer gateway's Internet-routable external interface.     * @state@ - The state of the customer gateway (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @type@ - The type of customer gateway. Currently, the only supported type is @ipsec.1@ .     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
-dcgFilters :: Lens' DescribeCustomerGateways [Filter]
-dcgFilters = lens _dcgFilters (\ s a -> s{_dcgFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dcgDryRun :: Lens' DescribeCustomerGateways (Maybe Bool)
-dcgDryRun = lens _dcgDryRun (\ s a -> s{_dcgDryRun = a});
-
-instance AWSRequest DescribeCustomerGateways where
-        type Rs DescribeCustomerGateways =
-             DescribeCustomerGatewaysResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeCustomerGatewaysResponse' <$>
-                   (x .@? "customerGatewaySet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeCustomerGateways
-
-instance NFData DescribeCustomerGateways
-
-instance ToHeaders DescribeCustomerGateways where
-        toHeaders = const mempty
-
-instance ToPath DescribeCustomerGateways where
-        toPath = const "/"
-
-instance ToQuery DescribeCustomerGateways where
-        toQuery DescribeCustomerGateways'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeCustomerGateways" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "CustomerGatewayId" <$>
-                    _dcgCustomerGatewayIds),
-               toQuery (toQueryList "Filter" <$> _dcgFilters),
-               "DryRun" =: _dcgDryRun]
-
--- | Contains the output of DescribeCustomerGateways.
---
---
---
--- /See:/ 'describeCustomerGatewaysResponse' smart constructor.
-data DescribeCustomerGatewaysResponse = DescribeCustomerGatewaysResponse'
-    { _dcgrsCustomerGateways :: !(Maybe [CustomerGateway])
-    , _dcgrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeCustomerGatewaysResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcgrsCustomerGateways' - Information about one or more customer gateways.
---
--- * 'dcgrsResponseStatus' - -- | The response status code.
-describeCustomerGatewaysResponse
-    :: Int -- ^ 'dcgrsResponseStatus'
-    -> DescribeCustomerGatewaysResponse
-describeCustomerGatewaysResponse pResponseStatus_ =
-    DescribeCustomerGatewaysResponse'
-    { _dcgrsCustomerGateways = Nothing
-    , _dcgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more customer gateways.
-dcgrsCustomerGateways :: Lens' DescribeCustomerGatewaysResponse [CustomerGateway]
-dcgrsCustomerGateways = lens _dcgrsCustomerGateways (\ s a -> s{_dcgrsCustomerGateways = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dcgrsResponseStatus :: Lens' DescribeCustomerGatewaysResponse Int
-dcgrsResponseStatus = lens _dcgrsResponseStatus (\ s a -> s{_dcgrsResponseStatus = a});
-
-instance NFData DescribeCustomerGatewaysResponse
diff --git a/gen/Network/AWS/EC2/DescribeDHCPOptions.hs b/gen/Network/AWS/EC2/DescribeDHCPOptions.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeDHCPOptions.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeDHCPOptions
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your DHCP options sets.
---
---
--- For more information about DHCP options sets, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeDHCPOptions
-    (
-    -- * Creating a Request
-      describeDHCPOptions
-    , DescribeDHCPOptions
-    -- * Request Lenses
-    , ddoFilters
-    , ddoDHCPOptionsIds
-    , ddoDryRun
-
-    -- * Destructuring the Response
-    , describeDHCPOptionsResponse
-    , DescribeDHCPOptionsResponse
-    -- * Response Lenses
-    , ddorsDHCPOptions
-    , ddorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeDhcpOptions.
---
---
---
--- /See:/ 'describeDHCPOptions' smart constructor.
-data DescribeDHCPOptions = DescribeDHCPOptions'
-    { _ddoFilters        :: !(Maybe [Filter])
-    , _ddoDHCPOptionsIds :: !(Maybe [Text])
-    , _ddoDryRun         :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeDHCPOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddoFilters' - One or more filters.     * @dhcp-options-id@ - The ID of a set of DHCP options.     * @key@ - The key for one of the options (for example, @domain-name@ ).     * @value@ - The value for one of the options.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
---
--- * 'ddoDHCPOptionsIds' - The IDs of one or more DHCP options sets. Default: Describes all your DHCP options sets.
---
--- * 'ddoDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeDHCPOptions
-    :: DescribeDHCPOptions
-describeDHCPOptions =
-    DescribeDHCPOptions'
-    { _ddoFilters = Nothing
-    , _ddoDHCPOptionsIds = Nothing
-    , _ddoDryRun = Nothing
-    }
-
--- | One or more filters.     * @dhcp-options-id@ - The ID of a set of DHCP options.     * @key@ - The key for one of the options (for example, @domain-name@ ).     * @value@ - The value for one of the options.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
-ddoFilters :: Lens' DescribeDHCPOptions [Filter]
-ddoFilters = lens _ddoFilters (\ s a -> s{_ddoFilters = a}) . _Default . _Coerce;
-
--- | The IDs of one or more DHCP options sets. Default: Describes all your DHCP options sets.
-ddoDHCPOptionsIds :: Lens' DescribeDHCPOptions [Text]
-ddoDHCPOptionsIds = lens _ddoDHCPOptionsIds (\ s a -> s{_ddoDHCPOptionsIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ddoDryRun :: Lens' DescribeDHCPOptions (Maybe Bool)
-ddoDryRun = lens _ddoDryRun (\ s a -> s{_ddoDryRun = a});
-
-instance AWSRequest DescribeDHCPOptions where
-        type Rs DescribeDHCPOptions =
-             DescribeDHCPOptionsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeDHCPOptionsResponse' <$>
-                   (x .@? "dhcpOptionsSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeDHCPOptions
-
-instance NFData DescribeDHCPOptions
-
-instance ToHeaders DescribeDHCPOptions where
-        toHeaders = const mempty
-
-instance ToPath DescribeDHCPOptions where
-        toPath = const "/"
-
-instance ToQuery DescribeDHCPOptions where
-        toQuery DescribeDHCPOptions'{..}
-          = mconcat
-              ["Action" =: ("DescribeDhcpOptions" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _ddoFilters),
-               toQuery
-                 (toQueryList "DhcpOptionsId" <$> _ddoDHCPOptionsIds),
-               "DryRun" =: _ddoDryRun]
-
--- | Contains the output of DescribeDhcpOptions.
---
---
---
--- /See:/ 'describeDHCPOptionsResponse' smart constructor.
-data DescribeDHCPOptionsResponse = DescribeDHCPOptionsResponse'
-    { _ddorsDHCPOptions    :: !(Maybe [DHCPOptions])
-    , _ddorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeDHCPOptionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddorsDHCPOptions' - Information about one or more DHCP options sets.
---
--- * 'ddorsResponseStatus' - -- | The response status code.
-describeDHCPOptionsResponse
-    :: Int -- ^ 'ddorsResponseStatus'
-    -> DescribeDHCPOptionsResponse
-describeDHCPOptionsResponse pResponseStatus_ =
-    DescribeDHCPOptionsResponse'
-    { _ddorsDHCPOptions = Nothing
-    , _ddorsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more DHCP options sets.
-ddorsDHCPOptions :: Lens' DescribeDHCPOptionsResponse [DHCPOptions]
-ddorsDHCPOptions = lens _ddorsDHCPOptions (\ s a -> s{_ddorsDHCPOptions = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-ddorsResponseStatus :: Lens' DescribeDHCPOptionsResponse Int
-ddorsResponseStatus = lens _ddorsResponseStatus (\ s a -> s{_ddorsResponseStatus = a});
-
-instance NFData DescribeDHCPOptionsResponse
diff --git a/gen/Network/AWS/EC2/DescribeEgressOnlyInternetGateways.hs b/gen/Network/AWS/EC2/DescribeEgressOnlyInternetGateways.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeEgressOnlyInternetGateways.hs
+++ /dev/null
@@ -1,175 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeEgressOnlyInternetGateways
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your egress-only Internet gateways.
---
---
-module Network.AWS.EC2.DescribeEgressOnlyInternetGateways
-    (
-    -- * Creating a Request
-      describeEgressOnlyInternetGateways
-    , DescribeEgressOnlyInternetGateways
-    -- * Request Lenses
-    , deoigEgressOnlyInternetGatewayIds
-    , deoigNextToken
-    , deoigDryRun
-    , deoigMaxResults
-
-    -- * Destructuring the Response
-    , describeEgressOnlyInternetGatewaysResponse
-    , DescribeEgressOnlyInternetGatewaysResponse
-    -- * Response Lenses
-    , deoigrsEgressOnlyInternetGateways
-    , deoigrsNextToken
-    , deoigrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'describeEgressOnlyInternetGateways' smart constructor.
-data DescribeEgressOnlyInternetGateways = DescribeEgressOnlyInternetGateways'
-    { _deoigEgressOnlyInternetGatewayIds :: !(Maybe [Text])
-    , _deoigNextToken                    :: !(Maybe Text)
-    , _deoigDryRun                       :: !(Maybe Bool)
-    , _deoigMaxResults                   :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeEgressOnlyInternetGateways' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deoigEgressOnlyInternetGatewayIds' - One or more egress-only Internet gateway IDs.
---
--- * 'deoigNextToken' - The token to retrieve the next page of results.
---
--- * 'deoigDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'deoigMaxResults' - The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned.
-describeEgressOnlyInternetGateways
-    :: DescribeEgressOnlyInternetGateways
-describeEgressOnlyInternetGateways =
-    DescribeEgressOnlyInternetGateways'
-    { _deoigEgressOnlyInternetGatewayIds = Nothing
-    , _deoigNextToken = Nothing
-    , _deoigDryRun = Nothing
-    , _deoigMaxResults = Nothing
-    }
-
--- | One or more egress-only Internet gateway IDs.
-deoigEgressOnlyInternetGatewayIds :: Lens' DescribeEgressOnlyInternetGateways [Text]
-deoigEgressOnlyInternetGatewayIds = lens _deoigEgressOnlyInternetGatewayIds (\ s a -> s{_deoigEgressOnlyInternetGatewayIds = a}) . _Default . _Coerce;
-
--- | The token to retrieve the next page of results.
-deoigNextToken :: Lens' DescribeEgressOnlyInternetGateways (Maybe Text)
-deoigNextToken = lens _deoigNextToken (\ s a -> s{_deoigNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-deoigDryRun :: Lens' DescribeEgressOnlyInternetGateways (Maybe Bool)
-deoigDryRun = lens _deoigDryRun (\ s a -> s{_deoigDryRun = a});
-
--- | The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned.
-deoigMaxResults :: Lens' DescribeEgressOnlyInternetGateways (Maybe Int)
-deoigMaxResults = lens _deoigMaxResults (\ s a -> s{_deoigMaxResults = a});
-
-instance AWSRequest
-         DescribeEgressOnlyInternetGateways where
-        type Rs DescribeEgressOnlyInternetGateways =
-             DescribeEgressOnlyInternetGatewaysResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeEgressOnlyInternetGatewaysResponse' <$>
-                   (x .@? "egressOnlyInternetGatewaySet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeEgressOnlyInternetGateways
-
-instance NFData DescribeEgressOnlyInternetGateways
-
-instance ToHeaders DescribeEgressOnlyInternetGateways
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeEgressOnlyInternetGateways
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeEgressOnlyInternetGateways
-         where
-        toQuery DescribeEgressOnlyInternetGateways'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeEgressOnlyInternetGateways" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "EgressOnlyInternetGatewayId" <$>
-                    _deoigEgressOnlyInternetGatewayIds),
-               "NextToken" =: _deoigNextToken,
-               "DryRun" =: _deoigDryRun,
-               "MaxResults" =: _deoigMaxResults]
-
--- | /See:/ 'describeEgressOnlyInternetGatewaysResponse' smart constructor.
-data DescribeEgressOnlyInternetGatewaysResponse = DescribeEgressOnlyInternetGatewaysResponse'
-    { _deoigrsEgressOnlyInternetGateways :: !(Maybe [EgressOnlyInternetGateway])
-    , _deoigrsNextToken                  :: !(Maybe Text)
-    , _deoigrsResponseStatus             :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeEgressOnlyInternetGatewaysResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deoigrsEgressOnlyInternetGateways' - Information about the egress-only Internet gateways.
---
--- * 'deoigrsNextToken' - The token to use to retrieve the next page of results.
---
--- * 'deoigrsResponseStatus' - -- | The response status code.
-describeEgressOnlyInternetGatewaysResponse
-    :: Int -- ^ 'deoigrsResponseStatus'
-    -> DescribeEgressOnlyInternetGatewaysResponse
-describeEgressOnlyInternetGatewaysResponse pResponseStatus_ =
-    DescribeEgressOnlyInternetGatewaysResponse'
-    { _deoigrsEgressOnlyInternetGateways = Nothing
-    , _deoigrsNextToken = Nothing
-    , _deoigrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the egress-only Internet gateways.
-deoigrsEgressOnlyInternetGateways :: Lens' DescribeEgressOnlyInternetGatewaysResponse [EgressOnlyInternetGateway]
-deoigrsEgressOnlyInternetGateways = lens _deoigrsEgressOnlyInternetGateways (\ s a -> s{_deoigrsEgressOnlyInternetGateways = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results.
-deoigrsNextToken :: Lens' DescribeEgressOnlyInternetGatewaysResponse (Maybe Text)
-deoigrsNextToken = lens _deoigrsNextToken (\ s a -> s{_deoigrsNextToken = a});
-
--- | -- | The response status code.
-deoigrsResponseStatus :: Lens' DescribeEgressOnlyInternetGatewaysResponse Int
-deoigrsResponseStatus = lens _deoigrsResponseStatus (\ s a -> s{_deoigrsResponseStatus = a});
-
-instance NFData
-         DescribeEgressOnlyInternetGatewaysResponse
diff --git a/gen/Network/AWS/EC2/DescribeExportTasks.hs b/gen/Network/AWS/EC2/DescribeExportTasks.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeExportTasks.hs
+++ /dev/null
@@ -1,136 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeExportTasks
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your export tasks.
---
---
-module Network.AWS.EC2.DescribeExportTasks
-    (
-    -- * Creating a Request
-      describeExportTasks
-    , DescribeExportTasks
-    -- * Request Lenses
-    , detExportTaskIds
-
-    -- * Destructuring the Response
-    , describeExportTasksResponse
-    , DescribeExportTasksResponse
-    -- * Response Lenses
-    , detrsExportTasks
-    , detrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeExportTasks.
---
---
---
--- /See:/ 'describeExportTasks' smart constructor.
-newtype DescribeExportTasks = DescribeExportTasks'
-    { _detExportTaskIds :: Maybe [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeExportTasks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'detExportTaskIds' - One or more export task IDs.
-describeExportTasks
-    :: DescribeExportTasks
-describeExportTasks =
-    DescribeExportTasks'
-    { _detExportTaskIds = Nothing
-    }
-
--- | One or more export task IDs.
-detExportTaskIds :: Lens' DescribeExportTasks [Text]
-detExportTaskIds = lens _detExportTaskIds (\ s a -> s{_detExportTaskIds = a}) . _Default . _Coerce;
-
-instance AWSRequest DescribeExportTasks where
-        type Rs DescribeExportTasks =
-             DescribeExportTasksResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeExportTasksResponse' <$>
-                   (x .@? "exportTaskSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeExportTasks
-
-instance NFData DescribeExportTasks
-
-instance ToHeaders DescribeExportTasks where
-        toHeaders = const mempty
-
-instance ToPath DescribeExportTasks where
-        toPath = const "/"
-
-instance ToQuery DescribeExportTasks where
-        toQuery DescribeExportTasks'{..}
-          = mconcat
-              ["Action" =: ("DescribeExportTasks" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "ExportTaskId" <$> _detExportTaskIds)]
-
--- | Contains the output for DescribeExportTasks.
---
---
---
--- /See:/ 'describeExportTasksResponse' smart constructor.
-data DescribeExportTasksResponse = DescribeExportTasksResponse'
-    { _detrsExportTasks    :: !(Maybe [ExportTask])
-    , _detrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeExportTasksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'detrsExportTasks' - Information about the export tasks.
---
--- * 'detrsResponseStatus' - -- | The response status code.
-describeExportTasksResponse
-    :: Int -- ^ 'detrsResponseStatus'
-    -> DescribeExportTasksResponse
-describeExportTasksResponse pResponseStatus_ =
-    DescribeExportTasksResponse'
-    { _detrsExportTasks = Nothing
-    , _detrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the export tasks.
-detrsExportTasks :: Lens' DescribeExportTasksResponse [ExportTask]
-detrsExportTasks = lens _detrsExportTasks (\ s a -> s{_detrsExportTasks = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-detrsResponseStatus :: Lens' DescribeExportTasksResponse Int
-detrsResponseStatus = lens _detrsResponseStatus (\ s a -> s{_detrsResponseStatus = a});
-
-instance NFData DescribeExportTasksResponse
diff --git a/gen/Network/AWS/EC2/DescribeFlowLogs.hs b/gen/Network/AWS/EC2/DescribeFlowLogs.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeFlowLogs.hs
+++ /dev/null
@@ -1,174 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeFlowLogs
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more flow logs. To view the information in your flow logs (the log streams for the network interfaces), you must use the CloudWatch Logs console or the CloudWatch Logs API.
---
---
-module Network.AWS.EC2.DescribeFlowLogs
-    (
-    -- * Creating a Request
-      describeFlowLogs
-    , DescribeFlowLogs
-    -- * Request Lenses
-    , dNextToken
-    , dFlowLogIds
-    , dFilter
-    , dMaxResults
-
-    -- * Destructuring the Response
-    , describeFlowLogsResponse
-    , DescribeFlowLogsResponse
-    -- * Response Lenses
-    , dflsrsNextToken
-    , dflsrsFlowLogs
-    , dflsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeFlowLogs.
---
---
---
--- /See:/ 'describeFlowLogs' smart constructor.
-data DescribeFlowLogs = DescribeFlowLogs'
-    { _dNextToken  :: !(Maybe Text)
-    , _dFlowLogIds :: !(Maybe [Text])
-    , _dFilter     :: !(Maybe [Filter])
-    , _dMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeFlowLogs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dNextToken' - The token to retrieve the next page of results.
---
--- * 'dFlowLogIds' - One or more flow log IDs.
---
--- * 'dFilter' - One or more filters.     * @deliver-log-status@ - The status of the logs delivery (@SUCCESS@ | @FAILED@ ).     * @flow-log-id@ - The ID of the flow log.     * @log-group-name@ - The name of the log group.     * @resource-id@ - The ID of the VPC, subnet, or network interface.     * @traffic-type@ - The type of traffic (@ACCEPT@ | @REJECT@ | @ALL@ )
---
--- * 'dMaxResults' - The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. You cannot specify this parameter and the flow log IDs parameter in the same request.
-describeFlowLogs
-    :: DescribeFlowLogs
-describeFlowLogs =
-    DescribeFlowLogs'
-    { _dNextToken = Nothing
-    , _dFlowLogIds = Nothing
-    , _dFilter = Nothing
-    , _dMaxResults = Nothing
-    }
-
--- | The token to retrieve the next page of results.
-dNextToken :: Lens' DescribeFlowLogs (Maybe Text)
-dNextToken = lens _dNextToken (\ s a -> s{_dNextToken = a});
-
--- | One or more flow log IDs.
-dFlowLogIds :: Lens' DescribeFlowLogs [Text]
-dFlowLogIds = lens _dFlowLogIds (\ s a -> s{_dFlowLogIds = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @deliver-log-status@ - The status of the logs delivery (@SUCCESS@ | @FAILED@ ).     * @flow-log-id@ - The ID of the flow log.     * @log-group-name@ - The name of the log group.     * @resource-id@ - The ID of the VPC, subnet, or network interface.     * @traffic-type@ - The type of traffic (@ACCEPT@ | @REJECT@ | @ALL@ )
-dFilter :: Lens' DescribeFlowLogs [Filter]
-dFilter = lens _dFilter (\ s a -> s{_dFilter = a}) . _Default . _Coerce;
-
--- | The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. You cannot specify this parameter and the flow log IDs parameter in the same request.
-dMaxResults :: Lens' DescribeFlowLogs (Maybe Int)
-dMaxResults = lens _dMaxResults (\ s a -> s{_dMaxResults = a});
-
-instance AWSRequest DescribeFlowLogs where
-        type Rs DescribeFlowLogs = DescribeFlowLogsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeFlowLogsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "flowLogSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeFlowLogs
-
-instance NFData DescribeFlowLogs
-
-instance ToHeaders DescribeFlowLogs where
-        toHeaders = const mempty
-
-instance ToPath DescribeFlowLogs where
-        toPath = const "/"
-
-instance ToQuery DescribeFlowLogs where
-        toQuery DescribeFlowLogs'{..}
-          = mconcat
-              ["Action" =: ("DescribeFlowLogs" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dNextToken,
-               toQuery (toQueryList "FlowLogId" <$> _dFlowLogIds),
-               toQuery (toQueryList "Filter" <$> _dFilter),
-               "MaxResults" =: _dMaxResults]
-
--- | Contains the output of DescribeFlowLogs.
---
---
---
--- /See:/ 'describeFlowLogsResponse' smart constructor.
-data DescribeFlowLogsResponse = DescribeFlowLogsResponse'
-    { _dflsrsNextToken      :: !(Maybe Text)
-    , _dflsrsFlowLogs       :: !(Maybe [FlowLog])
-    , _dflsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeFlowLogsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dflsrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dflsrsFlowLogs' - Information about the flow logs.
---
--- * 'dflsrsResponseStatus' - -- | The response status code.
-describeFlowLogsResponse
-    :: Int -- ^ 'dflsrsResponseStatus'
-    -> DescribeFlowLogsResponse
-describeFlowLogsResponse pResponseStatus_ =
-    DescribeFlowLogsResponse'
-    { _dflsrsNextToken = Nothing
-    , _dflsrsFlowLogs = Nothing
-    , _dflsrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dflsrsNextToken :: Lens' DescribeFlowLogsResponse (Maybe Text)
-dflsrsNextToken = lens _dflsrsNextToken (\ s a -> s{_dflsrsNextToken = a});
-
--- | Information about the flow logs.
-dflsrsFlowLogs :: Lens' DescribeFlowLogsResponse [FlowLog]
-dflsrsFlowLogs = lens _dflsrsFlowLogs (\ s a -> s{_dflsrsFlowLogs = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dflsrsResponseStatus :: Lens' DescribeFlowLogsResponse Int
-dflsrsResponseStatus = lens _dflsrsResponseStatus (\ s a -> s{_dflsrsResponseStatus = a});
-
-instance NFData DescribeFlowLogsResponse
diff --git a/gen/Network/AWS/EC2/DescribeHostReservationOfferings.hs b/gen/Network/AWS/EC2/DescribeHostReservationOfferings.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeHostReservationOfferings.hs
+++ /dev/null
@@ -1,195 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeHostReservationOfferings
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the Dedicated Host Reservations that are available to purchase.
---
---
--- The results describe all the Dedicated Host Reservation offerings, including offerings that may not match the instance family and region of your Dedicated Hosts. When purchasing an offering, ensure that the the instance family and region of the offering matches that of the Dedicated Host/s it will be associated with. For an overview of supported instance types, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-hosts-overview.html Dedicated Hosts Overview> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeHostReservationOfferings
-    (
-    -- * Creating a Request
-      describeHostReservationOfferings
-    , DescribeHostReservationOfferings
-    -- * Request Lenses
-    , dhroMaxDuration
-    , dhroNextToken
-    , dhroMinDuration
-    , dhroOfferingId
-    , dhroFilter
-    , dhroMaxResults
-
-    -- * Destructuring the Response
-    , describeHostReservationOfferingsResponse
-    , DescribeHostReservationOfferingsResponse
-    -- * Response Lenses
-    , dhrorsOfferingSet
-    , dhrorsNextToken
-    , dhrorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'describeHostReservationOfferings' smart constructor.
-data DescribeHostReservationOfferings = DescribeHostReservationOfferings'
-    { _dhroMaxDuration :: !(Maybe Int)
-    , _dhroNextToken   :: !(Maybe Text)
-    , _dhroMinDuration :: !(Maybe Int)
-    , _dhroOfferingId  :: !(Maybe Text)
-    , _dhroFilter      :: !(Maybe [Filter])
-    , _dhroMaxResults  :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeHostReservationOfferings' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dhroMaxDuration' - This is the maximum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 94608000 for three years.
---
--- * 'dhroNextToken' - The token to use to retrieve the next page of results.
---
--- * 'dhroMinDuration' - This is the minimum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 31536000 for one year.
---
--- * 'dhroOfferingId' - The ID of the reservation offering.
---
--- * 'dhroFilter' - One or more filters.     * @instance-family@ - The instance family of the offering (e.g., @m4@ ).     * @payment-option@ - The payment option (@No Upfront@ | @Partial Upfront@ | @All Upfront@ ).
---
--- * 'dhroMaxResults' - The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @nextToken@ value. This value can be between 5 and 500; if @maxResults@ is given a larger value than 500, you will receive an error.
-describeHostReservationOfferings
-    :: DescribeHostReservationOfferings
-describeHostReservationOfferings =
-    DescribeHostReservationOfferings'
-    { _dhroMaxDuration = Nothing
-    , _dhroNextToken = Nothing
-    , _dhroMinDuration = Nothing
-    , _dhroOfferingId = Nothing
-    , _dhroFilter = Nothing
-    , _dhroMaxResults = Nothing
-    }
-
--- | This is the maximum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 94608000 for three years.
-dhroMaxDuration :: Lens' DescribeHostReservationOfferings (Maybe Int)
-dhroMaxDuration = lens _dhroMaxDuration (\ s a -> s{_dhroMaxDuration = a});
-
--- | The token to use to retrieve the next page of results.
-dhroNextToken :: Lens' DescribeHostReservationOfferings (Maybe Text)
-dhroNextToken = lens _dhroNextToken (\ s a -> s{_dhroNextToken = a});
-
--- | This is the minimum duration of the reservation you'd like to purchase, specified in seconds. Reservations are available in one-year and three-year terms. The number of seconds specified must be the number of seconds in a year (365x24x60x60) times one of the supported durations (1 or 3). For example, specify 31536000 for one year.
-dhroMinDuration :: Lens' DescribeHostReservationOfferings (Maybe Int)
-dhroMinDuration = lens _dhroMinDuration (\ s a -> s{_dhroMinDuration = a});
-
--- | The ID of the reservation offering.
-dhroOfferingId :: Lens' DescribeHostReservationOfferings (Maybe Text)
-dhroOfferingId = lens _dhroOfferingId (\ s a -> s{_dhroOfferingId = a});
-
--- | One or more filters.     * @instance-family@ - The instance family of the offering (e.g., @m4@ ).     * @payment-option@ - The payment option (@No Upfront@ | @Partial Upfront@ | @All Upfront@ ).
-dhroFilter :: Lens' DescribeHostReservationOfferings [Filter]
-dhroFilter = lens _dhroFilter (\ s a -> s{_dhroFilter = a}) . _Default . _Coerce;
-
--- | The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @nextToken@ value. This value can be between 5 and 500; if @maxResults@ is given a larger value than 500, you will receive an error.
-dhroMaxResults :: Lens' DescribeHostReservationOfferings (Maybe Int)
-dhroMaxResults = lens _dhroMaxResults (\ s a -> s{_dhroMaxResults = a});
-
-instance AWSRequest DescribeHostReservationOfferings
-         where
-        type Rs DescribeHostReservationOfferings =
-             DescribeHostReservationOfferingsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeHostReservationOfferingsResponse' <$>
-                   (x .@? "offeringSet" .!@ mempty >>=
-                      may (parseXMLList "member"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeHostReservationOfferings
-
-instance NFData DescribeHostReservationOfferings
-
-instance ToHeaders DescribeHostReservationOfferings
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeHostReservationOfferings
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeHostReservationOfferings
-         where
-        toQuery DescribeHostReservationOfferings'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeHostReservationOfferings" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "MaxDuration" =: _dhroMaxDuration,
-               "NextToken" =: _dhroNextToken,
-               "MinDuration" =: _dhroMinDuration,
-               "OfferingId" =: _dhroOfferingId,
-               toQuery (toQueryList "Filter" <$> _dhroFilter),
-               "MaxResults" =: _dhroMaxResults]
-
--- | /See:/ 'describeHostReservationOfferingsResponse' smart constructor.
-data DescribeHostReservationOfferingsResponse = DescribeHostReservationOfferingsResponse'
-    { _dhrorsOfferingSet    :: !(Maybe [HostOffering])
-    , _dhrorsNextToken      :: !(Maybe Text)
-    , _dhrorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeHostReservationOfferingsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dhrorsOfferingSet' - Information about the offerings.
---
--- * 'dhrorsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dhrorsResponseStatus' - -- | The response status code.
-describeHostReservationOfferingsResponse
-    :: Int -- ^ 'dhrorsResponseStatus'
-    -> DescribeHostReservationOfferingsResponse
-describeHostReservationOfferingsResponse pResponseStatus_ =
-    DescribeHostReservationOfferingsResponse'
-    { _dhrorsOfferingSet = Nothing
-    , _dhrorsNextToken = Nothing
-    , _dhrorsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the offerings.
-dhrorsOfferingSet :: Lens' DescribeHostReservationOfferingsResponse [HostOffering]
-dhrorsOfferingSet = lens _dhrorsOfferingSet (\ s a -> s{_dhrorsOfferingSet = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dhrorsNextToken :: Lens' DescribeHostReservationOfferingsResponse (Maybe Text)
-dhrorsNextToken = lens _dhrorsNextToken (\ s a -> s{_dhrorsNextToken = a});
-
--- | -- | The response status code.
-dhrorsResponseStatus :: Lens' DescribeHostReservationOfferingsResponse Int
-dhrorsResponseStatus = lens _dhrorsResponseStatus (\ s a -> s{_dhrorsResponseStatus = a});
-
-instance NFData
-         DescribeHostReservationOfferingsResponse
diff --git a/gen/Network/AWS/EC2/DescribeHostReservations.hs b/gen/Network/AWS/EC2/DescribeHostReservations.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeHostReservations.hs
+++ /dev/null
@@ -1,170 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeHostReservations
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes Dedicated Host Reservations which are associated with Dedicated Hosts in your account.
---
---
-module Network.AWS.EC2.DescribeHostReservations
-    (
-    -- * Creating a Request
-      describeHostReservations
-    , DescribeHostReservations
-    -- * Request Lenses
-    , dhrNextToken
-    , dhrHostReservationIdSet
-    , dhrFilter
-    , dhrMaxResults
-
-    -- * Destructuring the Response
-    , describeHostReservationsResponse
-    , DescribeHostReservationsResponse
-    -- * Response Lenses
-    , dhrrsNextToken
-    , dhrrsHostReservationSet
-    , dhrrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'describeHostReservations' smart constructor.
-data DescribeHostReservations = DescribeHostReservations'
-    { _dhrNextToken            :: !(Maybe Text)
-    , _dhrHostReservationIdSet :: !(Maybe [Text])
-    , _dhrFilter               :: !(Maybe [Filter])
-    , _dhrMaxResults           :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeHostReservations' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dhrNextToken' - The token to use to retrieve the next page of results.
---
--- * 'dhrHostReservationIdSet' - One or more host reservation IDs.
---
--- * 'dhrFilter' - One or more filters.     * @instance-family@ - The instance family (e.g., @m4@ ).     * @payment-option@ - The payment option (@No Upfront@ | @Partial Upfront@ | @All Upfront@ ).     * @state@ - The state of the reservation (@payment-pending@ | @payment-failed@ | @active@ | @retired@ ).
---
--- * 'dhrMaxResults' - The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @nextToken@ value. This value can be between 5 and 500; if @maxResults@ is given a larger value than 500, you will receive an error.
-describeHostReservations
-    :: DescribeHostReservations
-describeHostReservations =
-    DescribeHostReservations'
-    { _dhrNextToken = Nothing
-    , _dhrHostReservationIdSet = Nothing
-    , _dhrFilter = Nothing
-    , _dhrMaxResults = Nothing
-    }
-
--- | The token to use to retrieve the next page of results.
-dhrNextToken :: Lens' DescribeHostReservations (Maybe Text)
-dhrNextToken = lens _dhrNextToken (\ s a -> s{_dhrNextToken = a});
-
--- | One or more host reservation IDs.
-dhrHostReservationIdSet :: Lens' DescribeHostReservations [Text]
-dhrHostReservationIdSet = lens _dhrHostReservationIdSet (\ s a -> s{_dhrHostReservationIdSet = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @instance-family@ - The instance family (e.g., @m4@ ).     * @payment-option@ - The payment option (@No Upfront@ | @Partial Upfront@ | @All Upfront@ ).     * @state@ - The state of the reservation (@payment-pending@ | @payment-failed@ | @active@ | @retired@ ).
-dhrFilter :: Lens' DescribeHostReservations [Filter]
-dhrFilter = lens _dhrFilter (\ s a -> s{_dhrFilter = a}) . _Default . _Coerce;
-
--- | The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @nextToken@ value. This value can be between 5 and 500; if @maxResults@ is given a larger value than 500, you will receive an error.
-dhrMaxResults :: Lens' DescribeHostReservations (Maybe Int)
-dhrMaxResults = lens _dhrMaxResults (\ s a -> s{_dhrMaxResults = a});
-
-instance AWSRequest DescribeHostReservations where
-        type Rs DescribeHostReservations =
-             DescribeHostReservationsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeHostReservationsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "hostReservationSet" .!@ mempty >>=
-                        may (parseXMLList "member"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeHostReservations
-
-instance NFData DescribeHostReservations
-
-instance ToHeaders DescribeHostReservations where
-        toHeaders = const mempty
-
-instance ToPath DescribeHostReservations where
-        toPath = const "/"
-
-instance ToQuery DescribeHostReservations where
-        toQuery DescribeHostReservations'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeHostReservations" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dhrNextToken,
-               toQuery
-                 (toQueryList "HostReservationIdSet" <$>
-                    _dhrHostReservationIdSet),
-               toQuery (toQueryList "Filter" <$> _dhrFilter),
-               "MaxResults" =: _dhrMaxResults]
-
--- | /See:/ 'describeHostReservationsResponse' smart constructor.
-data DescribeHostReservationsResponse = DescribeHostReservationsResponse'
-    { _dhrrsNextToken          :: !(Maybe Text)
-    , _dhrrsHostReservationSet :: !(Maybe [HostReservation])
-    , _dhrrsResponseStatus     :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeHostReservationsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dhrrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dhrrsHostReservationSet' - Details about the reservation's configuration.
---
--- * 'dhrrsResponseStatus' - -- | The response status code.
-describeHostReservationsResponse
-    :: Int -- ^ 'dhrrsResponseStatus'
-    -> DescribeHostReservationsResponse
-describeHostReservationsResponse pResponseStatus_ =
-    DescribeHostReservationsResponse'
-    { _dhrrsNextToken = Nothing
-    , _dhrrsHostReservationSet = Nothing
-    , _dhrrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dhrrsNextToken :: Lens' DescribeHostReservationsResponse (Maybe Text)
-dhrrsNextToken = lens _dhrrsNextToken (\ s a -> s{_dhrrsNextToken = a});
-
--- | Details about the reservation's configuration.
-dhrrsHostReservationSet :: Lens' DescribeHostReservationsResponse [HostReservation]
-dhrrsHostReservationSet = lens _dhrrsHostReservationSet (\ s a -> s{_dhrrsHostReservationSet = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dhrrsResponseStatus :: Lens' DescribeHostReservationsResponse Int
-dhrrsResponseStatus = lens _dhrrsResponseStatus (\ s a -> s{_dhrrsResponseStatus = a});
-
-instance NFData DescribeHostReservationsResponse
diff --git a/gen/Network/AWS/EC2/DescribeHosts.hs b/gen/Network/AWS/EC2/DescribeHosts.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeHosts.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeHosts
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your Dedicated Hosts.
---
---
--- The results describe only the Dedicated Hosts in the region you're currently using. All listed instances consume capacity on your Dedicated Host. Dedicated Hosts that have recently been released will be listed with the state @released@ .
---
-module Network.AWS.EC2.DescribeHosts
-    (
-    -- * Creating a Request
-      describeHosts
-    , DescribeHosts
-    -- * Request Lenses
-    , dhNextToken
-    , dhFilter
-    , dhHostIds
-    , dhMaxResults
-
-    -- * Destructuring the Response
-    , describeHostsResponse
-    , DescribeHostsResponse
-    -- * Response Lenses
-    , dhrsHosts
-    , dhrsNextToken
-    , dhrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeHosts.
---
---
---
--- /See:/ 'describeHosts' smart constructor.
-data DescribeHosts = DescribeHosts'
-    { _dhNextToken  :: !(Maybe Text)
-    , _dhFilter     :: !(Maybe [Filter])
-    , _dhHostIds    :: !(Maybe [Text])
-    , _dhMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeHosts' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dhNextToken' - The token to retrieve the next page of results.
---
--- * 'dhFilter' - One or more filters.     * @instance-type@ - The instance type size that the Dedicated Host is configured to support.     * @auto-placement@ - Whether auto-placement is enabled or disabled (@on@ | @off@ ).     * @host-reservation-id@ - The ID of the reservation assigned to this host.     * @client-token@ - The idempotency token you provided when you launched the instance     * @state@ - The allocation state of the Dedicated Host (@available@ | @under-assessment@ | @permanent-failure@ | @released@ | @released-permanent-failure@ ).     * @availability-zone@ - The Availability Zone of the host.
---
--- * 'dhHostIds' - The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches.
---
--- * 'dhMaxResults' - The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @nextToken@ value. This value can be between 5 and 500; if @maxResults@ is given a larger value than 500, you will receive an error. You cannot specify this parameter and the host IDs parameter in the same request.
-describeHosts
-    :: DescribeHosts
-describeHosts =
-    DescribeHosts'
-    { _dhNextToken = Nothing
-    , _dhFilter = Nothing
-    , _dhHostIds = Nothing
-    , _dhMaxResults = Nothing
-    }
-
--- | The token to retrieve the next page of results.
-dhNextToken :: Lens' DescribeHosts (Maybe Text)
-dhNextToken = lens _dhNextToken (\ s a -> s{_dhNextToken = a});
-
--- | One or more filters.     * @instance-type@ - The instance type size that the Dedicated Host is configured to support.     * @auto-placement@ - Whether auto-placement is enabled or disabled (@on@ | @off@ ).     * @host-reservation-id@ - The ID of the reservation assigned to this host.     * @client-token@ - The idempotency token you provided when you launched the instance     * @state@ - The allocation state of the Dedicated Host (@available@ | @under-assessment@ | @permanent-failure@ | @released@ | @released-permanent-failure@ ).     * @availability-zone@ - The Availability Zone of the host.
-dhFilter :: Lens' DescribeHosts [Filter]
-dhFilter = lens _dhFilter (\ s a -> s{_dhFilter = a}) . _Default . _Coerce;
-
--- | The IDs of the Dedicated Hosts. The IDs are used for targeted instance launches.
-dhHostIds :: Lens' DescribeHosts [Text]
-dhHostIds = lens _dhHostIds (\ s a -> s{_dhHostIds = a}) . _Default . _Coerce;
-
--- | The maximum number of results to return for the request in a single page. The remaining results can be seen by sending another request with the returned @nextToken@ value. This value can be between 5 and 500; if @maxResults@ is given a larger value than 500, you will receive an error. You cannot specify this parameter and the host IDs parameter in the same request.
-dhMaxResults :: Lens' DescribeHosts (Maybe Int)
-dhMaxResults = lens _dhMaxResults (\ s a -> s{_dhMaxResults = a});
-
-instance AWSRequest DescribeHosts where
-        type Rs DescribeHosts = DescribeHostsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeHostsResponse' <$>
-                   (x .@? "hostSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeHosts
-
-instance NFData DescribeHosts
-
-instance ToHeaders DescribeHosts where
-        toHeaders = const mempty
-
-instance ToPath DescribeHosts where
-        toPath = const "/"
-
-instance ToQuery DescribeHosts where
-        toQuery DescribeHosts'{..}
-          = mconcat
-              ["Action" =: ("DescribeHosts" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dhNextToken,
-               toQuery (toQueryList "Filter" <$> _dhFilter),
-               toQuery (toQueryList "HostId" <$> _dhHostIds),
-               "MaxResults" =: _dhMaxResults]
-
--- | Contains the output of DescribeHosts.
---
---
---
--- /See:/ 'describeHostsResponse' smart constructor.
-data DescribeHostsResponse = DescribeHostsResponse'
-    { _dhrsHosts          :: !(Maybe [Host])
-    , _dhrsNextToken      :: !(Maybe Text)
-    , _dhrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeHostsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dhrsHosts' - Information about the Dedicated Hosts.
---
--- * 'dhrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dhrsResponseStatus' - -- | The response status code.
-describeHostsResponse
-    :: Int -- ^ 'dhrsResponseStatus'
-    -> DescribeHostsResponse
-describeHostsResponse pResponseStatus_ =
-    DescribeHostsResponse'
-    { _dhrsHosts = Nothing
-    , _dhrsNextToken = Nothing
-    , _dhrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the Dedicated Hosts.
-dhrsHosts :: Lens' DescribeHostsResponse [Host]
-dhrsHosts = lens _dhrsHosts (\ s a -> s{_dhrsHosts = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dhrsNextToken :: Lens' DescribeHostsResponse (Maybe Text)
-dhrsNextToken = lens _dhrsNextToken (\ s a -> s{_dhrsNextToken = a});
-
--- | -- | The response status code.
-dhrsResponseStatus :: Lens' DescribeHostsResponse Int
-dhrsResponseStatus = lens _dhrsResponseStatus (\ s a -> s{_dhrsResponseStatus = a});
-
-instance NFData DescribeHostsResponse
diff --git a/gen/Network/AWS/EC2/DescribeIdFormat.hs b/gen/Network/AWS/EC2/DescribeIdFormat.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeIdFormat.hs
+++ /dev/null
@@ -1,138 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeIdFormat
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the ID format settings for your resources on a per-region basis, for example, to view which resource types are enabled for longer IDs. This request only returns information about resource types whose ID formats can be modified; it does not return information about other resource types.
---
---
--- The following resource types support longer IDs: @instance@ | @reservation@ | @snapshot@ | @volume@ .
---
--- These settings apply to the IAM user who makes the request; they do not apply to the entire AWS account. By default, an IAM user defaults to the same settings as the root user, unless they explicitly override the settings by running the 'ModifyIdFormat' command. Resources created with longer IDs are visible to all IAM users, regardless of these settings and provided that they have permission to use the relevant @Describe@ command for the resource type.
---
-module Network.AWS.EC2.DescribeIdFormat
-    (
-    -- * Creating a Request
-      describeIdFormat
-    , DescribeIdFormat
-    -- * Request Lenses
-    , difResource
-
-    -- * Destructuring the Response
-    , describeIdFormatResponse
-    , DescribeIdFormatResponse
-    -- * Response Lenses
-    , difrsStatuses
-    , difrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeIdFormat.
---
---
---
--- /See:/ 'describeIdFormat' smart constructor.
-newtype DescribeIdFormat = DescribeIdFormat'
-    { _difResource :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeIdFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'difResource' - The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
-describeIdFormat
-    :: DescribeIdFormat
-describeIdFormat =
-    DescribeIdFormat'
-    { _difResource = Nothing
-    }
-
--- | The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
-difResource :: Lens' DescribeIdFormat (Maybe Text)
-difResource = lens _difResource (\ s a -> s{_difResource = a});
-
-instance AWSRequest DescribeIdFormat where
-        type Rs DescribeIdFormat = DescribeIdFormatResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeIdFormatResponse' <$>
-                   (x .@? "statusSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeIdFormat
-
-instance NFData DescribeIdFormat
-
-instance ToHeaders DescribeIdFormat where
-        toHeaders = const mempty
-
-instance ToPath DescribeIdFormat where
-        toPath = const "/"
-
-instance ToQuery DescribeIdFormat where
-        toQuery DescribeIdFormat'{..}
-          = mconcat
-              ["Action" =: ("DescribeIdFormat" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Resource" =: _difResource]
-
--- | Contains the output of DescribeIdFormat.
---
---
---
--- /See:/ 'describeIdFormatResponse' smart constructor.
-data DescribeIdFormatResponse = DescribeIdFormatResponse'
-    { _difrsStatuses       :: !(Maybe [IdFormat])
-    , _difrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeIdFormatResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'difrsStatuses' - Information about the ID format for the resource.
---
--- * 'difrsResponseStatus' - -- | The response status code.
-describeIdFormatResponse
-    :: Int -- ^ 'difrsResponseStatus'
-    -> DescribeIdFormatResponse
-describeIdFormatResponse pResponseStatus_ =
-    DescribeIdFormatResponse'
-    { _difrsStatuses = Nothing
-    , _difrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the ID format for the resource.
-difrsStatuses :: Lens' DescribeIdFormatResponse [IdFormat]
-difrsStatuses = lens _difrsStatuses (\ s a -> s{_difrsStatuses = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-difrsResponseStatus :: Lens' DescribeIdFormatResponse Int
-difrsResponseStatus = lens _difrsResponseStatus (\ s a -> s{_difrsResponseStatus = a});
-
-instance NFData DescribeIdFormatResponse
diff --git a/gen/Network/AWS/EC2/DescribeIdentityIdFormat.hs b/gen/Network/AWS/EC2/DescribeIdentityIdFormat.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeIdentityIdFormat.hs
+++ /dev/null
@@ -1,151 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeIdentityIdFormat
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the ID format settings for resources for the specified IAM user, IAM role, or root user. For example, you can view the resource types that are enabled for longer IDs. This request only returns information about resource types whose ID formats can be modified; it does not return information about other resource types. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html Resource IDs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- The following resource types support longer IDs: @instance@ | @reservation@ | @snapshot@ | @volume@ .
---
--- These settings apply to the principal specified in the request. They do not apply to the principal that makes the request.
---
-module Network.AWS.EC2.DescribeIdentityIdFormat
-    (
-    -- * Creating a Request
-      describeIdentityIdFormat
-    , DescribeIdentityIdFormat
-    -- * Request Lenses
-    , diifResource
-    , diifPrincipalARN
-
-    -- * Destructuring the Response
-    , describeIdentityIdFormatResponse
-    , DescribeIdentityIdFormatResponse
-    -- * Response Lenses
-    , diifrsStatuses
-    , diifrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeIdentityIdFormat.
---
---
---
--- /See:/ 'describeIdentityIdFormat' smart constructor.
-data DescribeIdentityIdFormat = DescribeIdentityIdFormat'
-    { _diifResource     :: !(Maybe Text)
-    , _diifPrincipalARN :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeIdentityIdFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diifResource' - The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
---
--- * 'diifPrincipalARN' - The ARN of the principal, which can be an IAM role, IAM user, or the root user.
-describeIdentityIdFormat
-    :: Text -- ^ 'diifPrincipalARN'
-    -> DescribeIdentityIdFormat
-describeIdentityIdFormat pPrincipalARN_ =
-    DescribeIdentityIdFormat'
-    { _diifResource = Nothing
-    , _diifPrincipalARN = pPrincipalARN_
-    }
-
--- | The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
-diifResource :: Lens' DescribeIdentityIdFormat (Maybe Text)
-diifResource = lens _diifResource (\ s a -> s{_diifResource = a});
-
--- | The ARN of the principal, which can be an IAM role, IAM user, or the root user.
-diifPrincipalARN :: Lens' DescribeIdentityIdFormat Text
-diifPrincipalARN = lens _diifPrincipalARN (\ s a -> s{_diifPrincipalARN = a});
-
-instance AWSRequest DescribeIdentityIdFormat where
-        type Rs DescribeIdentityIdFormat =
-             DescribeIdentityIdFormatResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeIdentityIdFormatResponse' <$>
-                   (x .@? "statusSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeIdentityIdFormat
-
-instance NFData DescribeIdentityIdFormat
-
-instance ToHeaders DescribeIdentityIdFormat where
-        toHeaders = const mempty
-
-instance ToPath DescribeIdentityIdFormat where
-        toPath = const "/"
-
-instance ToQuery DescribeIdentityIdFormat where
-        toQuery DescribeIdentityIdFormat'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeIdentityIdFormat" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Resource" =: _diifResource,
-               "PrincipalArn" =: _diifPrincipalARN]
-
--- | Contains the output of DescribeIdentityIdFormat.
---
---
---
--- /See:/ 'describeIdentityIdFormatResponse' smart constructor.
-data DescribeIdentityIdFormatResponse = DescribeIdentityIdFormatResponse'
-    { _diifrsStatuses       :: !(Maybe [IdFormat])
-    , _diifrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeIdentityIdFormatResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diifrsStatuses' - Information about the ID format for the resources.
---
--- * 'diifrsResponseStatus' - -- | The response status code.
-describeIdentityIdFormatResponse
-    :: Int -- ^ 'diifrsResponseStatus'
-    -> DescribeIdentityIdFormatResponse
-describeIdentityIdFormatResponse pResponseStatus_ =
-    DescribeIdentityIdFormatResponse'
-    { _diifrsStatuses = Nothing
-    , _diifrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the ID format for the resources.
-diifrsStatuses :: Lens' DescribeIdentityIdFormatResponse [IdFormat]
-diifrsStatuses = lens _diifrsStatuses (\ s a -> s{_diifrsStatuses = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-diifrsResponseStatus :: Lens' DescribeIdentityIdFormatResponse Int
-diifrsResponseStatus = lens _diifrsResponseStatus (\ s a -> s{_diifrsResponseStatus = a});
-
-instance NFData DescribeIdentityIdFormatResponse
diff --git a/gen/Network/AWS/EC2/DescribeImageAttribute.hs b/gen/Network/AWS/EC2/DescribeImageAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeImageAttribute.hs
+++ /dev/null
@@ -1,231 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeImageAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified attribute of the specified AMI. You can specify only one attribute at a time.
---
---
-module Network.AWS.EC2.DescribeImageAttribute
-    (
-    -- * Creating a Request
-      describeImageAttribute
-    , DescribeImageAttribute
-    -- * Request Lenses
-    , diaiDryRun
-    , diaiImageId
-    , diaiAttribute
-
-    -- * Destructuring the Response
-    , describeImageAttributeResponse
-    , DescribeImageAttributeResponse
-    -- * Response Lenses
-    , diarsLaunchPermissions
-    , diarsRAMDiskId
-    , diarsKernelId
-    , diarsSRIOVNetSupport
-    , diarsImageId
-    , diarsProductCodes
-    , diarsDescription
-    , diarsBlockDeviceMappings
-    , diarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeImageAttribute.
---
---
---
--- /See:/ 'describeImageAttribute' smart constructor.
-data DescribeImageAttribute = DescribeImageAttribute'
-    { _diaiDryRun    :: !(Maybe Bool)
-    , _diaiImageId   :: !Text
-    , _diaiAttribute :: !ImageAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImageAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diaiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'diaiImageId' - The ID of the AMI.
---
--- * 'diaiAttribute' - The AMI attribute. __Note__ : Depending on your account privileges, the @blockDeviceMapping@ attribute may return a @Client.AuthFailure@ error. If this happens, use 'DescribeImages' to get information about the block device mapping for the AMI.
-describeImageAttribute
-    :: Text -- ^ 'diaiImageId'
-    -> ImageAttributeName -- ^ 'diaiAttribute'
-    -> DescribeImageAttribute
-describeImageAttribute pImageId_ pAttribute_ =
-    DescribeImageAttribute'
-    { _diaiDryRun = Nothing
-    , _diaiImageId = pImageId_
-    , _diaiAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-diaiDryRun :: Lens' DescribeImageAttribute (Maybe Bool)
-diaiDryRun = lens _diaiDryRun (\ s a -> s{_diaiDryRun = a});
-
--- | The ID of the AMI.
-diaiImageId :: Lens' DescribeImageAttribute Text
-diaiImageId = lens _diaiImageId (\ s a -> s{_diaiImageId = a});
-
--- | The AMI attribute. __Note__ : Depending on your account privileges, the @blockDeviceMapping@ attribute may return a @Client.AuthFailure@ error. If this happens, use 'DescribeImages' to get information about the block device mapping for the AMI.
-diaiAttribute :: Lens' DescribeImageAttribute ImageAttributeName
-diaiAttribute = lens _diaiAttribute (\ s a -> s{_diaiAttribute = a});
-
-instance AWSRequest DescribeImageAttribute where
-        type Rs DescribeImageAttribute =
-             DescribeImageAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeImageAttributeResponse' <$>
-                   (x .@? "launchPermission" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "ramdisk")
-                     <*> (x .@? "kernel")
-                     <*> (x .@? "sriovNetSupport")
-                     <*> (x .@? "imageId")
-                     <*>
-                     (x .@? "productCodes" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "description")
-                     <*>
-                     (x .@? "blockDeviceMapping" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeImageAttribute
-
-instance NFData DescribeImageAttribute
-
-instance ToHeaders DescribeImageAttribute where
-        toHeaders = const mempty
-
-instance ToPath DescribeImageAttribute where
-        toPath = const "/"
-
-instance ToQuery DescribeImageAttribute where
-        toQuery DescribeImageAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeImageAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _diaiDryRun, "ImageId" =: _diaiImageId,
-               "Attribute" =: _diaiAttribute]
-
--- | Describes an image attribute.
---
---
---
--- /See:/ 'describeImageAttributeResponse' smart constructor.
-data DescribeImageAttributeResponse = DescribeImageAttributeResponse'
-    { _diarsLaunchPermissions   :: !(Maybe [LaunchPermission])
-    , _diarsRAMDiskId           :: !(Maybe AttributeValue)
-    , _diarsKernelId            :: !(Maybe AttributeValue)
-    , _diarsSRIOVNetSupport     :: !(Maybe AttributeValue)
-    , _diarsImageId             :: !(Maybe Text)
-    , _diarsProductCodes        :: !(Maybe [ProductCode])
-    , _diarsDescription         :: !(Maybe AttributeValue)
-    , _diarsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _diarsResponseStatus      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImageAttributeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diarsLaunchPermissions' - One or more launch permissions.
---
--- * 'diarsRAMDiskId' - The RAM disk ID.
---
--- * 'diarsKernelId' - The kernel ID.
---
--- * 'diarsSRIOVNetSupport' - Indicates whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
---
--- * 'diarsImageId' - The ID of the AMI.
---
--- * 'diarsProductCodes' - One or more product codes.
---
--- * 'diarsDescription' - A description for the AMI.
---
--- * 'diarsBlockDeviceMappings' - One or more block device mapping entries.
---
--- * 'diarsResponseStatus' - -- | The response status code.
-describeImageAttributeResponse
-    :: Int -- ^ 'diarsResponseStatus'
-    -> DescribeImageAttributeResponse
-describeImageAttributeResponse pResponseStatus_ =
-    DescribeImageAttributeResponse'
-    { _diarsLaunchPermissions = Nothing
-    , _diarsRAMDiskId = Nothing
-    , _diarsKernelId = Nothing
-    , _diarsSRIOVNetSupport = Nothing
-    , _diarsImageId = Nothing
-    , _diarsProductCodes = Nothing
-    , _diarsDescription = Nothing
-    , _diarsBlockDeviceMappings = Nothing
-    , _diarsResponseStatus = pResponseStatus_
-    }
-
--- | One or more launch permissions.
-diarsLaunchPermissions :: Lens' DescribeImageAttributeResponse [LaunchPermission]
-diarsLaunchPermissions = lens _diarsLaunchPermissions (\ s a -> s{_diarsLaunchPermissions = a}) . _Default . _Coerce;
-
--- | The RAM disk ID.
-diarsRAMDiskId :: Lens' DescribeImageAttributeResponse (Maybe AttributeValue)
-diarsRAMDiskId = lens _diarsRAMDiskId (\ s a -> s{_diarsRAMDiskId = a});
-
--- | The kernel ID.
-diarsKernelId :: Lens' DescribeImageAttributeResponse (Maybe AttributeValue)
-diarsKernelId = lens _diarsKernelId (\ s a -> s{_diarsKernelId = a});
-
--- | Indicates whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
-diarsSRIOVNetSupport :: Lens' DescribeImageAttributeResponse (Maybe AttributeValue)
-diarsSRIOVNetSupport = lens _diarsSRIOVNetSupport (\ s a -> s{_diarsSRIOVNetSupport = a});
-
--- | The ID of the AMI.
-diarsImageId :: Lens' DescribeImageAttributeResponse (Maybe Text)
-diarsImageId = lens _diarsImageId (\ s a -> s{_diarsImageId = a});
-
--- | One or more product codes.
-diarsProductCodes :: Lens' DescribeImageAttributeResponse [ProductCode]
-diarsProductCodes = lens _diarsProductCodes (\ s a -> s{_diarsProductCodes = a}) . _Default . _Coerce;
-
--- | A description for the AMI.
-diarsDescription :: Lens' DescribeImageAttributeResponse (Maybe AttributeValue)
-diarsDescription = lens _diarsDescription (\ s a -> s{_diarsDescription = a});
-
--- | One or more block device mapping entries.
-diarsBlockDeviceMappings :: Lens' DescribeImageAttributeResponse [BlockDeviceMapping]
-diarsBlockDeviceMappings = lens _diarsBlockDeviceMappings (\ s a -> s{_diarsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-diarsResponseStatus :: Lens' DescribeImageAttributeResponse Int
-diarsResponseStatus = lens _diarsResponseStatus (\ s a -> s{_diarsResponseStatus = a});
-
-instance NFData DescribeImageAttributeResponse
diff --git a/gen/Network/AWS/EC2/DescribeImages.hs b/gen/Network/AWS/EC2/DescribeImages.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeImages.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeImages
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of the images (AMIs, AKIs, and ARIs) available to you. Images available to you include public images, private images that you own, and private images owned by other AWS accounts but for which you have explicit launch permissions.
---
---
-module Network.AWS.EC2.DescribeImages
-    (
-    -- * Creating a Request
-      describeImages
-    , DescribeImages
-    -- * Request Lenses
-    , deseOwners
-    , deseExecutableUsers
-    , deseFilters
-    , deseImageIds
-    , deseDryRun
-
-    -- * Destructuring the Response
-    , describeImagesResponse
-    , DescribeImagesResponse
-    -- * Response Lenses
-    , desrsImages
-    , desrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeImages.
---
---
---
--- /See:/ 'describeImages' smart constructor.
-data DescribeImages = DescribeImages'
-    { _deseOwners          :: !(Maybe [Text])
-    , _deseExecutableUsers :: !(Maybe [Text])
-    , _deseFilters         :: !(Maybe [Filter])
-    , _deseImageIds        :: !(Maybe [Text])
-    , _deseDryRun          :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImages' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deseOwners' - Filters the images by the owner. Specify an AWS account ID, @self@ (owner is the sender of the request), or an AWS owner alias (valid values are @amazon@ | @aws-marketplace@ | @microsoft@ ). Omitting this option returns all images for which you have launch permissions, regardless of ownership.
---
--- * 'deseExecutableUsers' - Scopes the images by users with explicit launch permissions. Specify an AWS account ID, @self@ (the sender of the request), or @all@ (public AMIs).
---
--- * 'deseFilters' - One or more filters.     * @architecture@ - The image architecture (@i386@ | @x86_64@ ).     * @block-device-mapping.delete-on-termination@ - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.     * @block-device-mapping.device-name@ - The device name for the EBS volume (for example, @/dev/sdh@ ).     * @block-device-mapping.snapshot-id@ - The ID of the snapshot used for the EBS volume.     * @block-device-mapping.volume-size@ - The volume size of the EBS volume, in GiB.     * @block-device-mapping.volume-type@ - The volume type of the EBS volume (@gp2@ | @io1@ | @st1 @ | @sc1@ | @standard@ ).     * @description@ - The description of the image (provided during image creation).     * @ena-support@ - A Boolean that indicates whether enhanced networking with ENA is enabled.     * @hypervisor@ - The hypervisor type (@ovm@ | @xen@ ).     * @image-id@ - The ID of the image.     * @image-type@ - The image type (@machine@ | @kernel@ | @ramdisk@ ).     * @is-public@ - A Boolean that indicates whether the image is public.     * @kernel-id@ - The kernel ID.     * @manifest-location@ - The location of the image manifest.     * @name@ - The name of the AMI (provided during image creation).     * @owner-alias@ - String value from an Amazon-maintained list (@amazon@ | @aws-marketplace@ | @microsoft@ ) of snapshot owners. Not to be confused with the user-configured AWS account alias, which is set from the IAM console.     * @owner-id@ - The AWS account ID of the image owner.     * @platform@ - The platform. To only list Windows-based AMIs, use @windows@ .     * @product-code@ - The product code.     * @product-code.type@ - The type of the product code (@devpay@ | @marketplace@ ).     * @ramdisk-id@ - The RAM disk ID.     * @root-device-name@ - The name of the root device volume (for example, @/dev/sda1@ ).     * @root-device-type@ - The type of the root device volume (@ebs@ | @instance-store@ ).     * @state@ - The state of the image (@available@ | @pending@ | @failed@ ).     * @state-reason-code@ - The reason code for the state change.     * @state-reason-message@ - The message for the state change.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the tag-value filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @virtualization-type@ - The virtualization type (@paravirtual@ | @hvm@ ).
---
--- * 'deseImageIds' - One or more image IDs. Default: Describes all images available to you.
---
--- * 'deseDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeImages
-    :: DescribeImages
-describeImages =
-    DescribeImages'
-    { _deseOwners = Nothing
-    , _deseExecutableUsers = Nothing
-    , _deseFilters = Nothing
-    , _deseImageIds = Nothing
-    , _deseDryRun = Nothing
-    }
-
--- | Filters the images by the owner. Specify an AWS account ID, @self@ (owner is the sender of the request), or an AWS owner alias (valid values are @amazon@ | @aws-marketplace@ | @microsoft@ ). Omitting this option returns all images for which you have launch permissions, regardless of ownership.
-deseOwners :: Lens' DescribeImages [Text]
-deseOwners = lens _deseOwners (\ s a -> s{_deseOwners = a}) . _Default . _Coerce;
-
--- | Scopes the images by users with explicit launch permissions. Specify an AWS account ID, @self@ (the sender of the request), or @all@ (public AMIs).
-deseExecutableUsers :: Lens' DescribeImages [Text]
-deseExecutableUsers = lens _deseExecutableUsers (\ s a -> s{_deseExecutableUsers = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @architecture@ - The image architecture (@i386@ | @x86_64@ ).     * @block-device-mapping.delete-on-termination@ - A Boolean value that indicates whether the Amazon EBS volume is deleted on instance termination.     * @block-device-mapping.device-name@ - The device name for the EBS volume (for example, @/dev/sdh@ ).     * @block-device-mapping.snapshot-id@ - The ID of the snapshot used for the EBS volume.     * @block-device-mapping.volume-size@ - The volume size of the EBS volume, in GiB.     * @block-device-mapping.volume-type@ - The volume type of the EBS volume (@gp2@ | @io1@ | @st1 @ | @sc1@ | @standard@ ).     * @description@ - The description of the image (provided during image creation).     * @ena-support@ - A Boolean that indicates whether enhanced networking with ENA is enabled.     * @hypervisor@ - The hypervisor type (@ovm@ | @xen@ ).     * @image-id@ - The ID of the image.     * @image-type@ - The image type (@machine@ | @kernel@ | @ramdisk@ ).     * @is-public@ - A Boolean that indicates whether the image is public.     * @kernel-id@ - The kernel ID.     * @manifest-location@ - The location of the image manifest.     * @name@ - The name of the AMI (provided during image creation).     * @owner-alias@ - String value from an Amazon-maintained list (@amazon@ | @aws-marketplace@ | @microsoft@ ) of snapshot owners. Not to be confused with the user-configured AWS account alias, which is set from the IAM console.     * @owner-id@ - The AWS account ID of the image owner.     * @platform@ - The platform. To only list Windows-based AMIs, use @windows@ .     * @product-code@ - The product code.     * @product-code.type@ - The type of the product code (@devpay@ | @marketplace@ ).     * @ramdisk-id@ - The RAM disk ID.     * @root-device-name@ - The name of the root device volume (for example, @/dev/sda1@ ).     * @root-device-type@ - The type of the root device volume (@ebs@ | @instance-store@ ).     * @state@ - The state of the image (@available@ | @pending@ | @failed@ ).     * @state-reason-code@ - The reason code for the state change.     * @state-reason-message@ - The message for the state change.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the tag-value filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @virtualization-type@ - The virtualization type (@paravirtual@ | @hvm@ ).
-deseFilters :: Lens' DescribeImages [Filter]
-deseFilters = lens _deseFilters (\ s a -> s{_deseFilters = a}) . _Default . _Coerce;
-
--- | One or more image IDs. Default: Describes all images available to you.
-deseImageIds :: Lens' DescribeImages [Text]
-deseImageIds = lens _deseImageIds (\ s a -> s{_deseImageIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-deseDryRun :: Lens' DescribeImages (Maybe Bool)
-deseDryRun = lens _deseDryRun (\ s a -> s{_deseDryRun = a});
-
-instance AWSRequest DescribeImages where
-        type Rs DescribeImages = DescribeImagesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeImagesResponse' <$>
-                   (x .@? "imagesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeImages
-
-instance NFData DescribeImages
-
-instance ToHeaders DescribeImages where
-        toHeaders = const mempty
-
-instance ToPath DescribeImages where
-        toPath = const "/"
-
-instance ToQuery DescribeImages where
-        toQuery DescribeImages'{..}
-          = mconcat
-              ["Action" =: ("DescribeImages" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Owner" <$> _deseOwners),
-               toQuery
-                 (toQueryList "ExecutableBy" <$>
-                    _deseExecutableUsers),
-               toQuery (toQueryList "Filter" <$> _deseFilters),
-               toQuery (toQueryList "ImageId" <$> _deseImageIds),
-               "DryRun" =: _deseDryRun]
-
--- | Contains the output of DescribeImages.
---
---
---
--- /See:/ 'describeImagesResponse' smart constructor.
-data DescribeImagesResponse = DescribeImagesResponse'
-    { _desrsImages         :: !(Maybe [Image])
-    , _desrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImagesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'desrsImages' - Information about one or more images.
---
--- * 'desrsResponseStatus' - -- | The response status code.
-describeImagesResponse
-    :: Int -- ^ 'desrsResponseStatus'
-    -> DescribeImagesResponse
-describeImagesResponse pResponseStatus_ =
-    DescribeImagesResponse'
-    { _desrsImages = Nothing
-    , _desrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more images.
-desrsImages :: Lens' DescribeImagesResponse [Image]
-desrsImages = lens _desrsImages (\ s a -> s{_desrsImages = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-desrsResponseStatus :: Lens' DescribeImagesResponse Int
-desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a});
-
-instance NFData DescribeImagesResponse
diff --git a/gen/Network/AWS/EC2/DescribeImportImageTasks.hs b/gen/Network/AWS/EC2/DescribeImportImageTasks.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeImportImageTasks.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeImportImageTasks
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Displays details about an import virtual machine or import snapshot tasks that are already created.
---
---
-module Network.AWS.EC2.DescribeImportImageTasks
-    (
-    -- * Creating a Request
-      describeImportImageTasks
-    , DescribeImportImageTasks
-    -- * Request Lenses
-    , diitFilters
-    , diitImportTaskIds
-    , diitNextToken
-    , diitDryRun
-    , diitMaxResults
-
-    -- * Destructuring the Response
-    , describeImportImageTasksResponse
-    , DescribeImportImageTasksResponse
-    -- * Response Lenses
-    , diitrsNextToken
-    , diitrsImportImageTasks
-    , diitrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeImportImageTasks.
---
---
---
--- /See:/ 'describeImportImageTasks' smart constructor.
-data DescribeImportImageTasks = DescribeImportImageTasks'
-    { _diitFilters       :: !(Maybe [Filter])
-    , _diitImportTaskIds :: !(Maybe [Text])
-    , _diitNextToken     :: !(Maybe Text)
-    , _diitDryRun        :: !(Maybe Bool)
-    , _diitMaxResults    :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImportImageTasks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diitFilters' - Filter tasks using the @task-state@ filter and one of the following values: active, completed, deleting, deleted.
---
--- * 'diitImportTaskIds' - A list of import image task IDs.
---
--- * 'diitNextToken' - A token that indicates the next page of results.
---
--- * 'diitDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'diitMaxResults' - The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-describeImportImageTasks
-    :: DescribeImportImageTasks
-describeImportImageTasks =
-    DescribeImportImageTasks'
-    { _diitFilters = Nothing
-    , _diitImportTaskIds = Nothing
-    , _diitNextToken = Nothing
-    , _diitDryRun = Nothing
-    , _diitMaxResults = Nothing
-    }
-
--- | Filter tasks using the @task-state@ filter and one of the following values: active, completed, deleting, deleted.
-diitFilters :: Lens' DescribeImportImageTasks [Filter]
-diitFilters = lens _diitFilters (\ s a -> s{_diitFilters = a}) . _Default . _Coerce;
-
--- | A list of import image task IDs.
-diitImportTaskIds :: Lens' DescribeImportImageTasks [Text]
-diitImportTaskIds = lens _diitImportTaskIds (\ s a -> s{_diitImportTaskIds = a}) . _Default . _Coerce;
-
--- | A token that indicates the next page of results.
-diitNextToken :: Lens' DescribeImportImageTasks (Maybe Text)
-diitNextToken = lens _diitNextToken (\ s a -> s{_diitNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-diitDryRun :: Lens' DescribeImportImageTasks (Maybe Bool)
-diitDryRun = lens _diitDryRun (\ s a -> s{_diitDryRun = a});
-
--- | The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-diitMaxResults :: Lens' DescribeImportImageTasks (Maybe Int)
-diitMaxResults = lens _diitMaxResults (\ s a -> s{_diitMaxResults = a});
-
-instance AWSRequest DescribeImportImageTasks where
-        type Rs DescribeImportImageTasks =
-             DescribeImportImageTasksResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeImportImageTasksResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "importImageTaskSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeImportImageTasks
-
-instance NFData DescribeImportImageTasks
-
-instance ToHeaders DescribeImportImageTasks where
-        toHeaders = const mempty
-
-instance ToPath DescribeImportImageTasks where
-        toPath = const "/"
-
-instance ToQuery DescribeImportImageTasks where
-        toQuery DescribeImportImageTasks'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeImportImageTasks" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filters" <$> _diitFilters),
-               toQuery
-                 (toQueryList "ImportTaskId" <$> _diitImportTaskIds),
-               "NextToken" =: _diitNextToken,
-               "DryRun" =: _diitDryRun,
-               "MaxResults" =: _diitMaxResults]
-
--- | Contains the output for DescribeImportImageTasks.
---
---
---
--- /See:/ 'describeImportImageTasksResponse' smart constructor.
-data DescribeImportImageTasksResponse = DescribeImportImageTasksResponse'
-    { _diitrsNextToken        :: !(Maybe Text)
-    , _diitrsImportImageTasks :: !(Maybe [ImportImageTask])
-    , _diitrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImportImageTasksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diitrsNextToken' - The token to use to get the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'diitrsImportImageTasks' - A list of zero or more import image tasks that are currently active or were completed or canceled in the previous 7 days.
---
--- * 'diitrsResponseStatus' - -- | The response status code.
-describeImportImageTasksResponse
-    :: Int -- ^ 'diitrsResponseStatus'
-    -> DescribeImportImageTasksResponse
-describeImportImageTasksResponse pResponseStatus_ =
-    DescribeImportImageTasksResponse'
-    { _diitrsNextToken = Nothing
-    , _diitrsImportImageTasks = Nothing
-    , _diitrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to get the next page of results. This value is @null@ when there are no more results to return.
-diitrsNextToken :: Lens' DescribeImportImageTasksResponse (Maybe Text)
-diitrsNextToken = lens _diitrsNextToken (\ s a -> s{_diitrsNextToken = a});
-
--- | A list of zero or more import image tasks that are currently active or were completed or canceled in the previous 7 days.
-diitrsImportImageTasks :: Lens' DescribeImportImageTasksResponse [ImportImageTask]
-diitrsImportImageTasks = lens _diitrsImportImageTasks (\ s a -> s{_diitrsImportImageTasks = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-diitrsResponseStatus :: Lens' DescribeImportImageTasksResponse Int
-diitrsResponseStatus = lens _diitrsResponseStatus (\ s a -> s{_diitrsResponseStatus = a});
-
-instance NFData DescribeImportImageTasksResponse
diff --git a/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs b/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeImportSnapshotTasks
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes your import snapshot tasks.
---
---
-module Network.AWS.EC2.DescribeImportSnapshotTasks
-    (
-    -- * Creating a Request
-      describeImportSnapshotTasks
-    , DescribeImportSnapshotTasks
-    -- * Request Lenses
-    , distFilters
-    , distImportTaskIds
-    , distNextToken
-    , distDryRun
-    , distMaxResults
-
-    -- * Destructuring the Response
-    , describeImportSnapshotTasksResponse
-    , DescribeImportSnapshotTasksResponse
-    -- * Response Lenses
-    , distrsNextToken
-    , distrsImportSnapshotTasks
-    , distrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeImportSnapshotTasks.
---
---
---
--- /See:/ 'describeImportSnapshotTasks' smart constructor.
-data DescribeImportSnapshotTasks = DescribeImportSnapshotTasks'
-    { _distFilters       :: !(Maybe [Filter])
-    , _distImportTaskIds :: !(Maybe [Text])
-    , _distNextToken     :: !(Maybe Text)
-    , _distDryRun        :: !(Maybe Bool)
-    , _distMaxResults    :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImportSnapshotTasks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'distFilters' - One or more filters.
---
--- * 'distImportTaskIds' - A list of import snapshot task IDs.
---
--- * 'distNextToken' - A token that indicates the next page of results.
---
--- * 'distDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'distMaxResults' - The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-describeImportSnapshotTasks
-    :: DescribeImportSnapshotTasks
-describeImportSnapshotTasks =
-    DescribeImportSnapshotTasks'
-    { _distFilters = Nothing
-    , _distImportTaskIds = Nothing
-    , _distNextToken = Nothing
-    , _distDryRun = Nothing
-    , _distMaxResults = Nothing
-    }
-
--- | One or more filters.
-distFilters :: Lens' DescribeImportSnapshotTasks [Filter]
-distFilters = lens _distFilters (\ s a -> s{_distFilters = a}) . _Default . _Coerce;
-
--- | A list of import snapshot task IDs.
-distImportTaskIds :: Lens' DescribeImportSnapshotTasks [Text]
-distImportTaskIds = lens _distImportTaskIds (\ s a -> s{_distImportTaskIds = a}) . _Default . _Coerce;
-
--- | A token that indicates the next page of results.
-distNextToken :: Lens' DescribeImportSnapshotTasks (Maybe Text)
-distNextToken = lens _distNextToken (\ s a -> s{_distNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-distDryRun :: Lens' DescribeImportSnapshotTasks (Maybe Bool)
-distDryRun = lens _distDryRun (\ s a -> s{_distDryRun = a});
-
--- | The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-distMaxResults :: Lens' DescribeImportSnapshotTasks (Maybe Int)
-distMaxResults = lens _distMaxResults (\ s a -> s{_distMaxResults = a});
-
-instance AWSRequest DescribeImportSnapshotTasks where
-        type Rs DescribeImportSnapshotTasks =
-             DescribeImportSnapshotTasksResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeImportSnapshotTasksResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "importSnapshotTaskSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeImportSnapshotTasks
-
-instance NFData DescribeImportSnapshotTasks
-
-instance ToHeaders DescribeImportSnapshotTasks where
-        toHeaders = const mempty
-
-instance ToPath DescribeImportSnapshotTasks where
-        toPath = const "/"
-
-instance ToQuery DescribeImportSnapshotTasks where
-        toQuery DescribeImportSnapshotTasks'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeImportSnapshotTasks" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filters" <$> _distFilters),
-               toQuery
-                 (toQueryList "ImportTaskId" <$> _distImportTaskIds),
-               "NextToken" =: _distNextToken,
-               "DryRun" =: _distDryRun,
-               "MaxResults" =: _distMaxResults]
-
--- | Contains the output for DescribeImportSnapshotTasks.
---
---
---
--- /See:/ 'describeImportSnapshotTasksResponse' smart constructor.
-data DescribeImportSnapshotTasksResponse = DescribeImportSnapshotTasksResponse'
-    { _distrsNextToken           :: !(Maybe Text)
-    , _distrsImportSnapshotTasks :: !(Maybe [ImportSnapshotTask])
-    , _distrsResponseStatus      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeImportSnapshotTasksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'distrsNextToken' - The token to use to get the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'distrsImportSnapshotTasks' - A list of zero or more import snapshot tasks that are currently active or were completed or canceled in the previous 7 days.
---
--- * 'distrsResponseStatus' - -- | The response status code.
-describeImportSnapshotTasksResponse
-    :: Int -- ^ 'distrsResponseStatus'
-    -> DescribeImportSnapshotTasksResponse
-describeImportSnapshotTasksResponse pResponseStatus_ =
-    DescribeImportSnapshotTasksResponse'
-    { _distrsNextToken = Nothing
-    , _distrsImportSnapshotTasks = Nothing
-    , _distrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to get the next page of results. This value is @null@ when there are no more results to return.
-distrsNextToken :: Lens' DescribeImportSnapshotTasksResponse (Maybe Text)
-distrsNextToken = lens _distrsNextToken (\ s a -> s{_distrsNextToken = a});
-
--- | A list of zero or more import snapshot tasks that are currently active or were completed or canceled in the previous 7 days.
-distrsImportSnapshotTasks :: Lens' DescribeImportSnapshotTasksResponse [ImportSnapshotTask]
-distrsImportSnapshotTasks = lens _distrsImportSnapshotTasks (\ s a -> s{_distrsImportSnapshotTasks = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-distrsResponseStatus :: Lens' DescribeImportSnapshotTasksResponse Int
-distrsResponseStatus = lens _distrsResponseStatus (\ s a -> s{_distrsResponseStatus = a});
-
-instance NFData DescribeImportSnapshotTasksResponse
diff --git a/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs b/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs
+++ /dev/null
@@ -1,302 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeInstanceAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified attribute of the specified instance. You can specify only one attribute at a time. Valid attribute values are: @instanceType@ | @kernel@ | @ramdisk@ | @userData@ | @disableApiTermination@ | @instanceInitiatedShutdownBehavior@ | @rootDeviceName@ | @blockDeviceMapping@ | @productCodes@ | @sourceDestCheck@ | @groupSet@ | @ebsOptimized@ | @sriovNetSupport@
---
---
-module Network.AWS.EC2.DescribeInstanceAttribute
-    (
-    -- * Creating a Request
-      describeInstanceAttribute
-    , DescribeInstanceAttribute
-    -- * Request Lenses
-    , diaDryRun
-    , diaInstanceId
-    , diaAttribute
-
-    -- * Destructuring the Response
-    , describeInstanceAttributeResponse
-    , DescribeInstanceAttributeResponse
-    -- * Response Lenses
-    , drsInstanceId
-    , drsGroups
-    , drsEnaSupport
-    , drsSourceDestCheck
-    , drsDisableAPITermination
-    , drsRAMDiskId
-    , drsKernelId
-    , drsRootDeviceName
-    , drsInstanceType
-    , drsSRIOVNetSupport
-    , drsEBSOptimized
-    , drsUserData
-    , drsInstanceInitiatedShutdownBehavior
-    , drsProductCodes
-    , drsBlockDeviceMappings
-    , drsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeInstanceAttribute.
---
---
---
--- /See:/ 'describeInstanceAttribute' smart constructor.
-data DescribeInstanceAttribute = DescribeInstanceAttribute'
-    { _diaDryRun     :: !(Maybe Bool)
-    , _diaInstanceId :: !Text
-    , _diaAttribute  :: !InstanceAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInstanceAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'diaInstanceId' - The ID of the instance.
---
--- * 'diaAttribute' - The instance attribute. Note: The @enaSupport@ attribute is not supported at this time.
-describeInstanceAttribute
-    :: Text -- ^ 'diaInstanceId'
-    -> InstanceAttributeName -- ^ 'diaAttribute'
-    -> DescribeInstanceAttribute
-describeInstanceAttribute pInstanceId_ pAttribute_ =
-    DescribeInstanceAttribute'
-    { _diaDryRun = Nothing
-    , _diaInstanceId = pInstanceId_
-    , _diaAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-diaDryRun :: Lens' DescribeInstanceAttribute (Maybe Bool)
-diaDryRun = lens _diaDryRun (\ s a -> s{_diaDryRun = a});
-
--- | The ID of the instance.
-diaInstanceId :: Lens' DescribeInstanceAttribute Text
-diaInstanceId = lens _diaInstanceId (\ s a -> s{_diaInstanceId = a});
-
--- | The instance attribute. Note: The @enaSupport@ attribute is not supported at this time.
-diaAttribute :: Lens' DescribeInstanceAttribute InstanceAttributeName
-diaAttribute = lens _diaAttribute (\ s a -> s{_diaAttribute = a});
-
-instance AWSRequest DescribeInstanceAttribute where
-        type Rs DescribeInstanceAttribute =
-             DescribeInstanceAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeInstanceAttributeResponse' <$>
-                   (x .@? "instanceId") <*>
-                     (x .@? "groupSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "enaSupport")
-                     <*> (x .@? "sourceDestCheck")
-                     <*> (x .@? "disableApiTermination")
-                     <*> (x .@? "ramdisk")
-                     <*> (x .@? "kernel")
-                     <*> (x .@? "rootDeviceName")
-                     <*> (x .@? "instanceType")
-                     <*> (x .@? "sriovNetSupport")
-                     <*> (x .@? "ebsOptimized")
-                     <*> (x .@? "userData")
-                     <*> (x .@? "instanceInitiatedShutdownBehavior")
-                     <*>
-                     (x .@? "productCodes" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*>
-                     (x .@? "blockDeviceMapping" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeInstanceAttribute
-
-instance NFData DescribeInstanceAttribute
-
-instance ToHeaders DescribeInstanceAttribute where
-        toHeaders = const mempty
-
-instance ToPath DescribeInstanceAttribute where
-        toPath = const "/"
-
-instance ToQuery DescribeInstanceAttribute where
-        toQuery DescribeInstanceAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeInstanceAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _diaDryRun,
-               "InstanceId" =: _diaInstanceId,
-               "Attribute" =: _diaAttribute]
-
--- | Describes an instance attribute.
---
---
---
--- /See:/ 'describeInstanceAttributeResponse' smart constructor.
-data DescribeInstanceAttributeResponse = DescribeInstanceAttributeResponse'
-    { _drsInstanceId                        :: !(Maybe Text)
-    , _drsGroups                            :: !(Maybe [GroupIdentifier])
-    , _drsEnaSupport                        :: !(Maybe AttributeBooleanValue)
-    , _drsSourceDestCheck                   :: !(Maybe AttributeBooleanValue)
-    , _drsDisableAPITermination             :: !(Maybe AttributeBooleanValue)
-    , _drsRAMDiskId                         :: !(Maybe AttributeValue)
-    , _drsKernelId                          :: !(Maybe AttributeValue)
-    , _drsRootDeviceName                    :: !(Maybe AttributeValue)
-    , _drsInstanceType                      :: !(Maybe AttributeValue)
-    , _drsSRIOVNetSupport                   :: !(Maybe AttributeValue)
-    , _drsEBSOptimized                      :: !(Maybe AttributeBooleanValue)
-    , _drsUserData                          :: !(Maybe AttributeValue)
-    , _drsInstanceInitiatedShutdownBehavior :: !(Maybe AttributeValue)
-    , _drsProductCodes                      :: !(Maybe [ProductCode])
-    , _drsBlockDeviceMappings               :: !(Maybe [InstanceBlockDeviceMapping])
-    , _drsResponseStatus                    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInstanceAttributeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsInstanceId' - The ID of the instance.
---
--- * 'drsGroups' - The security groups associated with the instance.
---
--- * 'drsEnaSupport' - Indicates whether enhanced networking with ENA is enabled.
---
--- * 'drsSourceDestCheck' - Indicates whether source/destination checking is enabled. A value of @true@ means checking is enabled, and @false@ means checking is disabled. This value must be @false@ for a NAT instance to perform NAT.
---
--- * 'drsDisableAPITermination' - If the value is @true@ , you can't terminate the instance through the Amazon EC2 console, CLI, or API; otherwise, you can.
---
--- * 'drsRAMDiskId' - The RAM disk ID.
---
--- * 'drsKernelId' - The kernel ID.
---
--- * 'drsRootDeviceName' - The name of the root device (for example, @/dev/sda1@ or @/dev/xvda@ ).
---
--- * 'drsInstanceType' - The instance type.
---
--- * 'drsSRIOVNetSupport' - Indicates whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
---
--- * 'drsEBSOptimized' - Indicates whether the instance is optimized for EBS I/O.
---
--- * 'drsUserData' - The user data.
---
--- * 'drsInstanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
---
--- * 'drsProductCodes' - A list of product codes.
---
--- * 'drsBlockDeviceMappings' - The block device mapping of the instance.
---
--- * 'drsResponseStatus' - -- | The response status code.
-describeInstanceAttributeResponse
-    :: Int -- ^ 'drsResponseStatus'
-    -> DescribeInstanceAttributeResponse
-describeInstanceAttributeResponse pResponseStatus_ =
-    DescribeInstanceAttributeResponse'
-    { _drsInstanceId = Nothing
-    , _drsGroups = Nothing
-    , _drsEnaSupport = Nothing
-    , _drsSourceDestCheck = Nothing
-    , _drsDisableAPITermination = Nothing
-    , _drsRAMDiskId = Nothing
-    , _drsKernelId = Nothing
-    , _drsRootDeviceName = Nothing
-    , _drsInstanceType = Nothing
-    , _drsSRIOVNetSupport = Nothing
-    , _drsEBSOptimized = Nothing
-    , _drsUserData = Nothing
-    , _drsInstanceInitiatedShutdownBehavior = Nothing
-    , _drsProductCodes = Nothing
-    , _drsBlockDeviceMappings = Nothing
-    , _drsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the instance.
-drsInstanceId :: Lens' DescribeInstanceAttributeResponse (Maybe Text)
-drsInstanceId = lens _drsInstanceId (\ s a -> s{_drsInstanceId = a});
-
--- | The security groups associated with the instance.
-drsGroups :: Lens' DescribeInstanceAttributeResponse [GroupIdentifier]
-drsGroups = lens _drsGroups (\ s a -> s{_drsGroups = a}) . _Default . _Coerce;
-
--- | Indicates whether enhanced networking with ENA is enabled.
-drsEnaSupport :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeBooleanValue)
-drsEnaSupport = lens _drsEnaSupport (\ s a -> s{_drsEnaSupport = a});
-
--- | Indicates whether source/destination checking is enabled. A value of @true@ means checking is enabled, and @false@ means checking is disabled. This value must be @false@ for a NAT instance to perform NAT.
-drsSourceDestCheck :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeBooleanValue)
-drsSourceDestCheck = lens _drsSourceDestCheck (\ s a -> s{_drsSourceDestCheck = a});
-
--- | If the value is @true@ , you can't terminate the instance through the Amazon EC2 console, CLI, or API; otherwise, you can.
-drsDisableAPITermination :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeBooleanValue)
-drsDisableAPITermination = lens _drsDisableAPITermination (\ s a -> s{_drsDisableAPITermination = a});
-
--- | The RAM disk ID.
-drsRAMDiskId :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsRAMDiskId = lens _drsRAMDiskId (\ s a -> s{_drsRAMDiskId = a});
-
--- | The kernel ID.
-drsKernelId :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsKernelId = lens _drsKernelId (\ s a -> s{_drsKernelId = a});
-
--- | The name of the root device (for example, @/dev/sda1@ or @/dev/xvda@ ).
-drsRootDeviceName :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsRootDeviceName = lens _drsRootDeviceName (\ s a -> s{_drsRootDeviceName = a});
-
--- | The instance type.
-drsInstanceType :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsInstanceType = lens _drsInstanceType (\ s a -> s{_drsInstanceType = a});
-
--- | Indicates whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
-drsSRIOVNetSupport :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsSRIOVNetSupport = lens _drsSRIOVNetSupport (\ s a -> s{_drsSRIOVNetSupport = a});
-
--- | Indicates whether the instance is optimized for EBS I/O.
-drsEBSOptimized :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeBooleanValue)
-drsEBSOptimized = lens _drsEBSOptimized (\ s a -> s{_drsEBSOptimized = a});
-
--- | The user data.
-drsUserData :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsUserData = lens _drsUserData (\ s a -> s{_drsUserData = a});
-
--- | Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
-drsInstanceInitiatedShutdownBehavior :: Lens' DescribeInstanceAttributeResponse (Maybe AttributeValue)
-drsInstanceInitiatedShutdownBehavior = lens _drsInstanceInitiatedShutdownBehavior (\ s a -> s{_drsInstanceInitiatedShutdownBehavior = a});
-
--- | A list of product codes.
-drsProductCodes :: Lens' DescribeInstanceAttributeResponse [ProductCode]
-drsProductCodes = lens _drsProductCodes (\ s a -> s{_drsProductCodes = a}) . _Default . _Coerce;
-
--- | The block device mapping of the instance.
-drsBlockDeviceMappings :: Lens' DescribeInstanceAttributeResponse [InstanceBlockDeviceMapping]
-drsBlockDeviceMappings = lens _drsBlockDeviceMappings (\ s a -> s{_drsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-drsResponseStatus :: Lens' DescribeInstanceAttributeResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
-
-instance NFData DescribeInstanceAttributeResponse
diff --git a/gen/Network/AWS/EC2/DescribeInstanceStatus.hs b/gen/Network/AWS/EC2/DescribeInstanceStatus.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeInstanceStatus.hs
+++ /dev/null
@@ -1,217 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeInstanceStatus
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the status of one or more instances. By default, only running instances are described, unless specified otherwise.
---
---
--- Instance status includes the following components:
---
---     * __Status checks__ - Amazon EC2 performs status checks on running EC2 instances to identify hardware and software issues. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html Status Checks for Your Instances> and <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstances.html Troubleshooting Instances with Failed Status Checks> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---     * __Scheduled events__ - Amazon EC2 can schedule events (such as reboot, stop, or terminate) for your instances related to hardware issues, software updates, or system maintenance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html Scheduled Events for Your Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---     * __Instance state__ - You can manage your instances from the moment you launch them through their termination. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance Lifecycle> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeInstanceStatus
-    (
-    -- * Creating a Request
-      describeInstanceStatus
-    , DescribeInstanceStatus
-    -- * Request Lenses
-    , disIncludeAllInstances
-    , disFilters
-    , disNextToken
-    , disInstanceIds
-    , disDryRun
-    , disMaxResults
-
-    -- * Destructuring the Response
-    , describeInstanceStatusResponse
-    , DescribeInstanceStatusResponse
-    -- * Response Lenses
-    , disrsInstanceStatuses
-    , disrsNextToken
-    , disrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeInstanceStatus.
---
---
---
--- /See:/ 'describeInstanceStatus' smart constructor.
-data DescribeInstanceStatus = DescribeInstanceStatus'
-    { _disIncludeAllInstances :: !(Maybe Bool)
-    , _disFilters             :: !(Maybe [Filter])
-    , _disNextToken           :: !(Maybe Text)
-    , _disInstanceIds         :: !(Maybe [Text])
-    , _disDryRun              :: !(Maybe Bool)
-    , _disMaxResults          :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInstanceStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'disIncludeAllInstances' - When @true@ , includes the health status for all instances. When @false@ , includes the health status for running instances only. Default: @false@
---
--- * 'disFilters' - One or more filters.     * @availability-zone@ - The Availability Zone of the instance.     * @event.code@ - The code for the scheduled event (@instance-reboot@ | @system-reboot@ | @system-maintenance@ | @instance-retirement@ | @instance-stop@ ).     * @event.description@ - A description of the event.     * @event.not-after@ - The latest end time for the scheduled event (for example, @2014-09-15T17:15:20.000Z@ ).     * @event.not-before@ - The earliest start time for the scheduled event (for example, @2014-09-15T17:15:20.000Z@ ).     * @instance-state-code@ - The code for the instance state, as a 16-bit unsigned integer. The high byte is an opaque internal value 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).     * @instance-state-name@ - The state of the instance (@pending@ | @running@ | @shutting-down@ | @terminated@ | @stopping@ | @stopped@ ).     * @instance-status.reachability@ - Filters on instance status where the name is @reachability@ (@passed@ | @failed@ | @initializing@ | @insufficient-data@ ).     * @instance-status.status@ - The status of the instance (@ok@ | @impaired@ | @initializing@ | @insufficient-data@ | @not-applicable@ ).     * @system-status.reachability@ - Filters on system status where the name is @reachability@ (@passed@ | @failed@ | @initializing@ | @insufficient-data@ ).     * @system-status.status@ - The system status of the instance (@ok@ | @impaired@ | @initializing@ | @insufficient-data@ | @not-applicable@ ).
---
--- * 'disNextToken' - The token to retrieve the next page of results.
---
--- * 'disInstanceIds' - One or more instance IDs. Default: Describes all your instances. Constraints: Maximum 100 explicitly specified instance IDs.
---
--- * 'disDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'disMaxResults' - The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.
-describeInstanceStatus
-    :: DescribeInstanceStatus
-describeInstanceStatus =
-    DescribeInstanceStatus'
-    { _disIncludeAllInstances = Nothing
-    , _disFilters = Nothing
-    , _disNextToken = Nothing
-    , _disInstanceIds = Nothing
-    , _disDryRun = Nothing
-    , _disMaxResults = Nothing
-    }
-
--- | When @true@ , includes the health status for all instances. When @false@ , includes the health status for running instances only. Default: @false@
-disIncludeAllInstances :: Lens' DescribeInstanceStatus (Maybe Bool)
-disIncludeAllInstances = lens _disIncludeAllInstances (\ s a -> s{_disIncludeAllInstances = a});
-
--- | One or more filters.     * @availability-zone@ - The Availability Zone of the instance.     * @event.code@ - The code for the scheduled event (@instance-reboot@ | @system-reboot@ | @system-maintenance@ | @instance-retirement@ | @instance-stop@ ).     * @event.description@ - A description of the event.     * @event.not-after@ - The latest end time for the scheduled event (for example, @2014-09-15T17:15:20.000Z@ ).     * @event.not-before@ - The earliest start time for the scheduled event (for example, @2014-09-15T17:15:20.000Z@ ).     * @instance-state-code@ - The code for the instance state, as a 16-bit unsigned integer. The high byte is an opaque internal value 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).     * @instance-state-name@ - The state of the instance (@pending@ | @running@ | @shutting-down@ | @terminated@ | @stopping@ | @stopped@ ).     * @instance-status.reachability@ - Filters on instance status where the name is @reachability@ (@passed@ | @failed@ | @initializing@ | @insufficient-data@ ).     * @instance-status.status@ - The status of the instance (@ok@ | @impaired@ | @initializing@ | @insufficient-data@ | @not-applicable@ ).     * @system-status.reachability@ - Filters on system status where the name is @reachability@ (@passed@ | @failed@ | @initializing@ | @insufficient-data@ ).     * @system-status.status@ - The system status of the instance (@ok@ | @impaired@ | @initializing@ | @insufficient-data@ | @not-applicable@ ).
-disFilters :: Lens' DescribeInstanceStatus [Filter]
-disFilters = lens _disFilters (\ s a -> s{_disFilters = a}) . _Default . _Coerce;
-
--- | The token to retrieve the next page of results.
-disNextToken :: Lens' DescribeInstanceStatus (Maybe Text)
-disNextToken = lens _disNextToken (\ s a -> s{_disNextToken = a});
-
--- | One or more instance IDs. Default: Describes all your instances. Constraints: Maximum 100 explicitly specified instance IDs.
-disInstanceIds :: Lens' DescribeInstanceStatus [Text]
-disInstanceIds = lens _disInstanceIds (\ s a -> s{_disInstanceIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-disDryRun :: Lens' DescribeInstanceStatus (Maybe Bool)
-disDryRun = lens _disDryRun (\ s a -> s{_disDryRun = a});
-
--- | The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter in the same call.
-disMaxResults :: Lens' DescribeInstanceStatus (Maybe Int)
-disMaxResults = lens _disMaxResults (\ s a -> s{_disMaxResults = a});
-
-instance AWSPager DescribeInstanceStatus where
-        page rq rs
-          | stop (rs ^. disrsNextToken) = Nothing
-          | stop (rs ^. disrsInstanceStatuses) = Nothing
-          | otherwise =
-            Just $ rq & disNextToken .~ rs ^. disrsNextToken
-
-instance AWSRequest DescribeInstanceStatus where
-        type Rs DescribeInstanceStatus =
-             DescribeInstanceStatusResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeInstanceStatusResponse' <$>
-                   (x .@? "instanceStatusSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeInstanceStatus
-
-instance NFData DescribeInstanceStatus
-
-instance ToHeaders DescribeInstanceStatus where
-        toHeaders = const mempty
-
-instance ToPath DescribeInstanceStatus where
-        toPath = const "/"
-
-instance ToQuery DescribeInstanceStatus where
-        toQuery DescribeInstanceStatus'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeInstanceStatus" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "IncludeAllInstances" =: _disIncludeAllInstances,
-               toQuery (toQueryList "Filter" <$> _disFilters),
-               "NextToken" =: _disNextToken,
-               toQuery
-                 (toQueryList "InstanceId" <$> _disInstanceIds),
-               "DryRun" =: _disDryRun,
-               "MaxResults" =: _disMaxResults]
-
--- | Contains the output of DescribeInstanceStatus.
---
---
---
--- /See:/ 'describeInstanceStatusResponse' smart constructor.
-data DescribeInstanceStatusResponse = DescribeInstanceStatusResponse'
-    { _disrsInstanceStatuses :: !(Maybe [InstanceStatus])
-    , _disrsNextToken        :: !(Maybe Text)
-    , _disrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInstanceStatusResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'disrsInstanceStatuses' - One or more instance status descriptions.
---
--- * 'disrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'disrsResponseStatus' - -- | The response status code.
-describeInstanceStatusResponse
-    :: Int -- ^ 'disrsResponseStatus'
-    -> DescribeInstanceStatusResponse
-describeInstanceStatusResponse pResponseStatus_ =
-    DescribeInstanceStatusResponse'
-    { _disrsInstanceStatuses = Nothing
-    , _disrsNextToken = Nothing
-    , _disrsResponseStatus = pResponseStatus_
-    }
-
--- | One or more instance status descriptions.
-disrsInstanceStatuses :: Lens' DescribeInstanceStatusResponse [InstanceStatus]
-disrsInstanceStatuses = lens _disrsInstanceStatuses (\ s a -> s{_disrsInstanceStatuses = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-disrsNextToken :: Lens' DescribeInstanceStatusResponse (Maybe Text)
-disrsNextToken = lens _disrsNextToken (\ s a -> s{_disrsNextToken = a});
-
--- | -- | The response status code.
-disrsResponseStatus :: Lens' DescribeInstanceStatusResponse Int
-disrsResponseStatus = lens _disrsResponseStatus (\ s a -> s{_disrsResponseStatus = a});
-
-instance NFData DescribeInstanceStatusResponse
diff --git a/gen/Network/AWS/EC2/DescribeInstances.hs b/gen/Network/AWS/EC2/DescribeInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeInstances.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your instances.
---
---
--- If you specify one or more instance IDs, Amazon EC2 returns information for those instances. If you do not specify instance IDs, Amazon EC2 returns information for all relevant instances. If you specify an instance ID that is not valid, an error is returned. If you specify an instance that you do not own, it is not included in the returned results.
---
--- Recently terminated instances might appear in the returned results. This interval is usually less than one hour.
---
--- If you describe instances in the rare case where an Availability Zone is experiencing a service disruption and you specify instance IDs that are in the affected zone, or do not specify any instance IDs at all, the call fails. If you describe instances and specify only instance IDs that are in an unaffected zone, the call works normally.
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeInstances
-    (
-    -- * Creating a Request
-      describeInstances
-    , DescribeInstances
-    -- * Request Lenses
-    , diiFilters
-    , diiNextToken
-    , diiInstanceIds
-    , diiDryRun
-    , diiMaxResults
-
-    -- * Destructuring the Response
-    , describeInstancesResponse
-    , DescribeInstancesResponse
-    -- * Response Lenses
-    , dirsNextToken
-    , dirsReservations
-    , dirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeInstances.
---
---
---
--- /See:/ 'describeInstances' smart constructor.
-data DescribeInstances = DescribeInstances'
-    { _diiFilters     :: !(Maybe [Filter])
-    , _diiNextToken   :: !(Maybe Text)
-    , _diiInstanceIds :: !(Maybe [Text])
-    , _diiDryRun      :: !(Maybe Bool)
-    , _diiMaxResults  :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diiFilters' - One or more filters.     * @affinity@ - The affinity setting for an instance running on a Dedicated Host (@default@ | @host@ ).     * @architecture@ - The instance architecture (@i386@ | @x86_64@ ).     * @association.public-ip@ - The address of the Elastic IP address (IPv4) bound to the network interface.     * @association.ip-owner-id@ - The owner of the Elastic IP address (IPv4) associated with the network interface.     * @association.allocation-id@ - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.     * @association.association-id@ - The association ID returned when the network interface was associated with an IPv4 address.     * @availability-zone@ - The Availability Zone of the instance.     * @block-device-mapping.attach-time@ - The attach time for an EBS volume mapped to the instance, for example, @2010-09-15T17:15:20.000Z@ .     * @block-device-mapping.delete-on-termination@ - A Boolean that indicates whether the EBS volume is deleted on instance termination.     * @block-device-mapping.device-name@ - The device name for the EBS volume (for example, @/dev/sdh@ or @xvdh@ ).     * @block-device-mapping.status@ - The status for the EBS volume (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @block-device-mapping.volume-id@ - The volume ID of the EBS volume.     * @client-token@ - The idempotency token you provided when you launched the instance.     * @dns-name@ - The public DNS name of the instance.     * @group-id@ - The ID of the security group for the instance. EC2-Classic only.     * @group-name@ - The name of the security group for the instance. EC2-Classic only.     * @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@ ).     * @iam-instance-profile.arn@ - The instance profile associated with the instance. Specified as an ARN.     * @image-id@ - The ID of the image used to launch the instance.     * @instance-id@ - The ID of the instance.     * @instance-lifecycle@ - Indicates whether this is a Spot Instance or a Scheduled Instance (@spot@ | @scheduled@ ).     * @instance-state-code@ - The state of the instance, as a 16-bit unsigned integer. The high byte is an opaque internal value 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).     * @instance-state-name@ - The state of the instance (@pending@ | @running@ | @shutting-down@ | @terminated@ | @stopping@ | @stopped@ ).     * @instance-type@ - The type of instance (for example, @t2.micro@ ).     * @instance.group-id@ - The ID of the security group for the instance.      * @instance.group-name@ - The name of the security group for the instance.      * @ip-address@ - The public IPv4 address of the instance.     * @kernel-id@ - The kernel ID.     * @key-name@ - The name of the key pair used when the instance was launched.     * @launch-index@ - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on).      * @launch-time@ - The time when the instance was launched.     * @monitoring-state@ - Indicates whether detailed monitoring is enabled (@disabled@ | @enabled@ ).     * @network-interface.addresses.private-ip-address@ - The private IPv4 address associated with the network interface.     * @network-interface.addresses.primary@ - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.     * @network-interface.addresses.association.public-ip@ - The ID of the association of an Elastic IP address (IPv4) with a network interface.     * @network-interface.addresses.association.ip-owner-id@ - The owner ID of the private IPv4 address associated with the network interface.     * @network-interface.attachment.attachment-id@ - The ID of the interface attachment.     * @network-interface.attachment.instance-id@ - The ID of the instance to which the network interface is attached.     * @network-interface.attachment.instance-owner-id@ - The owner ID of the instance to which the network interface is attached.     * @network-interface.attachment.device-index@ - The device index to which the network interface is attached.     * @network-interface.attachment.status@ - The status of the attachment (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @network-interface.attachment.attach-time@ - The time that the network interface was attached to an instance.     * @network-interface.attachment.delete-on-termination@ - Specifies whether the attachment is deleted when an instance is terminated.     * @network-interface.availability-zone@ - The Availability Zone for the network interface.     * @network-interface.description@ - The description of the network interface.     * @network-interface.group-id@ - The ID of a security group associated with the network interface.     * @network-interface.group-name@ - The name of a security group associated with the network interface.     * @network-interface.ipv6-addresses.ipv6-address@ - The IPv6 address associated with the network interface.     * @network-interface.mac-address@ - The MAC address of the network interface.     * @network-interface.network-interface-id@ - The ID of the network interface.     * @network-interface.owner-id@ - The ID of the owner of the network interface.     * @network-interface.private-dns-name@ - The private DNS name of the network interface.     * @network-interface.requester-id@ - The requester ID for the network interface.     * @network-interface.requester-managed@ - Indicates whether the network interface is being managed by AWS.     * @network-interface.status@ - The status of the network interface (@available@ ) | @in-use@ ).     * @network-interface.source-dest-check@ - Whether the network interface performs source/destination checking. A value of @true@ means checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the network interface to perform network address translation (NAT) in your VPC.     * @network-interface.subnet-id@ - The ID of the subnet for the network interface.     * @network-interface.vpc-id@ - The ID of the VPC for the network interface.     * @owner-id@ - The AWS account ID of the instance owner.     * @placement-group-name@ - The name of the placement group for the instance.     * @platform@ - The platform. Use @windows@ if you have Windows instances; otherwise, leave blank.     * @private-dns-name@ - The private IPv4 DNS name of the instance.     * @private-ip-address@ - The private IPv4 address of the instance.     * @product-code@ - The product code associated with the AMI used to launch the instance.     * @product-code.type@ - The type of product code (@devpay@ | @marketplace@ ).     * @ramdisk-id@ - The RAM disk ID.     * @reason@ - 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.     * @requester-id@ - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console, Auto Scaling, and so on).     * @reservation-id@ - 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'll get one reservation ID. If you launch ten instances using the same launch request, you'll also get one reservation ID.     * @root-device-name@ - The name of the root device for the instance (for example, @/dev/sda1@ or @/dev/xvda@ ).     * @root-device-type@ - The type of root device that the instance uses (@ebs@ | @instance-store@ ).     * @source-dest-check@ - Indicates whether the instance performs source/destination checking. A value of @true@ means that checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the instance to perform network address translation (NAT) in your VPC.      * @spot-instance-request-id@ - The ID of the Spot instance request.     * @state-reason-code@ - The reason code for the state change.     * @state-reason-message@ - A message that describes the state change.     * @subnet-id@ - The ID of the subnet for the instance.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource, where @tag@ :/key/ is the tag's key.      * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @tenancy@ - The tenancy of an instance (@dedicated@ | @default@ | @host@ ).     * @virtualization-type@ - The virtualization type of the instance (@paravirtual@ | @hvm@ ).     * @vpc-id@ - The ID of the VPC that the instance is running in.
---
--- * 'diiNextToken' - The token to request the next page of results.
---
--- * 'diiInstanceIds' - One or more instance IDs. Default: Describes all your instances.
---
--- * 'diiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'diiMaxResults' - The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter or tag filters in the same call.
-describeInstances
-    :: DescribeInstances
-describeInstances =
-    DescribeInstances'
-    { _diiFilters = Nothing
-    , _diiNextToken = Nothing
-    , _diiInstanceIds = Nothing
-    , _diiDryRun = Nothing
-    , _diiMaxResults = Nothing
-    }
-
--- | One or more filters.     * @affinity@ - The affinity setting for an instance running on a Dedicated Host (@default@ | @host@ ).     * @architecture@ - The instance architecture (@i386@ | @x86_64@ ).     * @association.public-ip@ - The address of the Elastic IP address (IPv4) bound to the network interface.     * @association.ip-owner-id@ - The owner of the Elastic IP address (IPv4) associated with the network interface.     * @association.allocation-id@ - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.     * @association.association-id@ - The association ID returned when the network interface was associated with an IPv4 address.     * @availability-zone@ - The Availability Zone of the instance.     * @block-device-mapping.attach-time@ - The attach time for an EBS volume mapped to the instance, for example, @2010-09-15T17:15:20.000Z@ .     * @block-device-mapping.delete-on-termination@ - A Boolean that indicates whether the EBS volume is deleted on instance termination.     * @block-device-mapping.device-name@ - The device name for the EBS volume (for example, @/dev/sdh@ or @xvdh@ ).     * @block-device-mapping.status@ - The status for the EBS volume (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @block-device-mapping.volume-id@ - The volume ID of the EBS volume.     * @client-token@ - The idempotency token you provided when you launched the instance.     * @dns-name@ - The public DNS name of the instance.     * @group-id@ - The ID of the security group for the instance. EC2-Classic only.     * @group-name@ - The name of the security group for the instance. EC2-Classic only.     * @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@ ).     * @iam-instance-profile.arn@ - The instance profile associated with the instance. Specified as an ARN.     * @image-id@ - The ID of the image used to launch the instance.     * @instance-id@ - The ID of the instance.     * @instance-lifecycle@ - Indicates whether this is a Spot Instance or a Scheduled Instance (@spot@ | @scheduled@ ).     * @instance-state-code@ - The state of the instance, as a 16-bit unsigned integer. The high byte is an opaque internal value 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).     * @instance-state-name@ - The state of the instance (@pending@ | @running@ | @shutting-down@ | @terminated@ | @stopping@ | @stopped@ ).     * @instance-type@ - The type of instance (for example, @t2.micro@ ).     * @instance.group-id@ - The ID of the security group for the instance.      * @instance.group-name@ - The name of the security group for the instance.      * @ip-address@ - The public IPv4 address of the instance.     * @kernel-id@ - The kernel ID.     * @key-name@ - The name of the key pair used when the instance was launched.     * @launch-index@ - When launching multiple instances, this is the index for the instance in the launch group (for example, 0, 1, 2, and so on).      * @launch-time@ - The time when the instance was launched.     * @monitoring-state@ - Indicates whether detailed monitoring is enabled (@disabled@ | @enabled@ ).     * @network-interface.addresses.private-ip-address@ - The private IPv4 address associated with the network interface.     * @network-interface.addresses.primary@ - Specifies whether the IPv4 address of the network interface is the primary private IPv4 address.     * @network-interface.addresses.association.public-ip@ - The ID of the association of an Elastic IP address (IPv4) with a network interface.     * @network-interface.addresses.association.ip-owner-id@ - The owner ID of the private IPv4 address associated with the network interface.     * @network-interface.attachment.attachment-id@ - The ID of the interface attachment.     * @network-interface.attachment.instance-id@ - The ID of the instance to which the network interface is attached.     * @network-interface.attachment.instance-owner-id@ - The owner ID of the instance to which the network interface is attached.     * @network-interface.attachment.device-index@ - The device index to which the network interface is attached.     * @network-interface.attachment.status@ - The status of the attachment (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @network-interface.attachment.attach-time@ - The time that the network interface was attached to an instance.     * @network-interface.attachment.delete-on-termination@ - Specifies whether the attachment is deleted when an instance is terminated.     * @network-interface.availability-zone@ - The Availability Zone for the network interface.     * @network-interface.description@ - The description of the network interface.     * @network-interface.group-id@ - The ID of a security group associated with the network interface.     * @network-interface.group-name@ - The name of a security group associated with the network interface.     * @network-interface.ipv6-addresses.ipv6-address@ - The IPv6 address associated with the network interface.     * @network-interface.mac-address@ - The MAC address of the network interface.     * @network-interface.network-interface-id@ - The ID of the network interface.     * @network-interface.owner-id@ - The ID of the owner of the network interface.     * @network-interface.private-dns-name@ - The private DNS name of the network interface.     * @network-interface.requester-id@ - The requester ID for the network interface.     * @network-interface.requester-managed@ - Indicates whether the network interface is being managed by AWS.     * @network-interface.status@ - The status of the network interface (@available@ ) | @in-use@ ).     * @network-interface.source-dest-check@ - Whether the network interface performs source/destination checking. A value of @true@ means checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the network interface to perform network address translation (NAT) in your VPC.     * @network-interface.subnet-id@ - The ID of the subnet for the network interface.     * @network-interface.vpc-id@ - The ID of the VPC for the network interface.     * @owner-id@ - The AWS account ID of the instance owner.     * @placement-group-name@ - The name of the placement group for the instance.     * @platform@ - The platform. Use @windows@ if you have Windows instances; otherwise, leave blank.     * @private-dns-name@ - The private IPv4 DNS name of the instance.     * @private-ip-address@ - The private IPv4 address of the instance.     * @product-code@ - The product code associated with the AMI used to launch the instance.     * @product-code.type@ - The type of product code (@devpay@ | @marketplace@ ).     * @ramdisk-id@ - The RAM disk ID.     * @reason@ - 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.     * @requester-id@ - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console, Auto Scaling, and so on).     * @reservation-id@ - 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'll get one reservation ID. If you launch ten instances using the same launch request, you'll also get one reservation ID.     * @root-device-name@ - The name of the root device for the instance (for example, @/dev/sda1@ or @/dev/xvda@ ).     * @root-device-type@ - The type of root device that the instance uses (@ebs@ | @instance-store@ ).     * @source-dest-check@ - Indicates whether the instance performs source/destination checking. A value of @true@ means that checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the instance to perform network address translation (NAT) in your VPC.      * @spot-instance-request-id@ - The ID of the Spot instance request.     * @state-reason-code@ - The reason code for the state change.     * @state-reason-message@ - A message that describes the state change.     * @subnet-id@ - The ID of the subnet for the instance.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource, where @tag@ :/key/ is the tag's key.      * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @tenancy@ - The tenancy of an instance (@dedicated@ | @default@ | @host@ ).     * @virtualization-type@ - The virtualization type of the instance (@paravirtual@ | @hvm@ ).     * @vpc-id@ - The ID of the VPC that the instance is running in.
-diiFilters :: Lens' DescribeInstances [Filter]
-diiFilters = lens _diiFilters (\ s a -> s{_diiFilters = a}) . _Default . _Coerce;
-
--- | The token to request the next page of results.
-diiNextToken :: Lens' DescribeInstances (Maybe Text)
-diiNextToken = lens _diiNextToken (\ s a -> s{_diiNextToken = a});
-
--- | One or more instance IDs. Default: Describes all your instances.
-diiInstanceIds :: Lens' DescribeInstances [Text]
-diiInstanceIds = lens _diiInstanceIds (\ s a -> s{_diiInstanceIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-diiDryRun :: Lens' DescribeInstances (Maybe Bool)
-diiDryRun = lens _diiDryRun (\ s a -> s{_diiDryRun = a});
-
--- | The maximum number of results to return in a single call. To retrieve the remaining results, make another call with the returned @NextToken@ value. This value can be between 5 and 1000. You cannot specify this parameter and the instance IDs parameter or tag filters in the same call.
-diiMaxResults :: Lens' DescribeInstances (Maybe Int)
-diiMaxResults = lens _diiMaxResults (\ s a -> s{_diiMaxResults = a});
-
-instance AWSPager DescribeInstances where
-        page rq rs
-          | stop (rs ^. dirsNextToken) = Nothing
-          | stop (rs ^. dirsReservations) = Nothing
-          | otherwise =
-            Just $ rq & diiNextToken .~ rs ^. dirsNextToken
-
-instance AWSRequest DescribeInstances where
-        type Rs DescribeInstances = DescribeInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeInstancesResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "reservationSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeInstances
-
-instance NFData DescribeInstances
-
-instance ToHeaders DescribeInstances where
-        toHeaders = const mempty
-
-instance ToPath DescribeInstances where
-        toPath = const "/"
-
-instance ToQuery DescribeInstances where
-        toQuery DescribeInstances'{..}
-          = mconcat
-              ["Action" =: ("DescribeInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _diiFilters),
-               "NextToken" =: _diiNextToken,
-               toQuery
-                 (toQueryList "InstanceId" <$> _diiInstanceIds),
-               "DryRun" =: _diiDryRun,
-               "MaxResults" =: _diiMaxResults]
-
--- | Contains the output of DescribeInstances.
---
---
---
--- /See:/ 'describeInstancesResponse' smart constructor.
-data DescribeInstancesResponse = DescribeInstancesResponse'
-    { _dirsNextToken      :: !(Maybe Text)
-    , _dirsReservations   :: !(Maybe [Reservation])
-    , _dirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dirsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dirsReservations' - Zero or more reservations.
---
--- * 'dirsResponseStatus' - -- | The response status code.
-describeInstancesResponse
-    :: Int -- ^ 'dirsResponseStatus'
-    -> DescribeInstancesResponse
-describeInstancesResponse pResponseStatus_ =
-    DescribeInstancesResponse'
-    { _dirsNextToken = Nothing
-    , _dirsReservations = Nothing
-    , _dirsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dirsNextToken :: Lens' DescribeInstancesResponse (Maybe Text)
-dirsNextToken = lens _dirsNextToken (\ s a -> s{_dirsNextToken = a});
-
--- | Zero or more reservations.
-dirsReservations :: Lens' DescribeInstancesResponse [Reservation]
-dirsReservations = lens _dirsReservations (\ s a -> s{_dirsReservations = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dirsResponseStatus :: Lens' DescribeInstancesResponse Int
-dirsResponseStatus = lens _dirsResponseStatus (\ s a -> s{_dirsResponseStatus = a});
-
-instance NFData DescribeInstancesResponse
diff --git a/gen/Network/AWS/EC2/DescribeInternetGateways.hs b/gen/Network/AWS/EC2/DescribeInternetGateways.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeInternetGateways.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeInternetGateways
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your Internet gateways.
---
---
-module Network.AWS.EC2.DescribeInternetGateways
-    (
-    -- * Creating a Request
-      describeInternetGateways
-    , DescribeInternetGateways
-    -- * Request Lenses
-    , dFilters
-    , dInternetGatewayIds
-    , dDryRun
-
-    -- * Destructuring the Response
-    , describeInternetGatewaysResponse
-    , DescribeInternetGatewaysResponse
-    -- * Response Lenses
-    , digrsInternetGateways
-    , digrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeInternetGateways.
---
---
---
--- /See:/ 'describeInternetGateways' smart constructor.
-data DescribeInternetGateways = DescribeInternetGateways'
-    { _dFilters            :: !(Maybe [Filter])
-    , _dInternetGatewayIds :: !(Maybe [Text])
-    , _dDryRun             :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInternetGateways' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dFilters' - One or more filters.     * @attachment.state@ - The current state of the attachment between the gateway and the VPC (@available@ ). Present only if a VPC is attached.     * @attachment.vpc-id@ - The ID of an attached VPC.     * @internet-gateway-id@ - The ID of the Internet gateway.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
---
--- * 'dInternetGatewayIds' - One or more Internet gateway IDs. Default: Describes all your Internet gateways.
---
--- * 'dDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeInternetGateways
-    :: DescribeInternetGateways
-describeInternetGateways =
-    DescribeInternetGateways'
-    { _dFilters = Nothing
-    , _dInternetGatewayIds = Nothing
-    , _dDryRun = Nothing
-    }
-
--- | One or more filters.     * @attachment.state@ - The current state of the attachment between the gateway and the VPC (@available@ ). Present only if a VPC is attached.     * @attachment.vpc-id@ - The ID of an attached VPC.     * @internet-gateway-id@ - The ID of the Internet gateway.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
-dFilters :: Lens' DescribeInternetGateways [Filter]
-dFilters = lens _dFilters (\ s a -> s{_dFilters = a}) . _Default . _Coerce;
-
--- | One or more Internet gateway IDs. Default: Describes all your Internet gateways.
-dInternetGatewayIds :: Lens' DescribeInternetGateways [Text]
-dInternetGatewayIds = lens _dInternetGatewayIds (\ s a -> s{_dInternetGatewayIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dDryRun :: Lens' DescribeInternetGateways (Maybe Bool)
-dDryRun = lens _dDryRun (\ s a -> s{_dDryRun = a});
-
-instance AWSRequest DescribeInternetGateways where
-        type Rs DescribeInternetGateways =
-             DescribeInternetGatewaysResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeInternetGatewaysResponse' <$>
-                   (x .@? "internetGatewaySet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeInternetGateways
-
-instance NFData DescribeInternetGateways
-
-instance ToHeaders DescribeInternetGateways where
-        toHeaders = const mempty
-
-instance ToPath DescribeInternetGateways where
-        toPath = const "/"
-
-instance ToQuery DescribeInternetGateways where
-        toQuery DescribeInternetGateways'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeInternetGateways" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dFilters),
-               toQuery
-                 (toQueryList "InternetGatewayId" <$>
-                    _dInternetGatewayIds),
-               "DryRun" =: _dDryRun]
-
--- | Contains the output of DescribeInternetGateways.
---
---
---
--- /See:/ 'describeInternetGatewaysResponse' smart constructor.
-data DescribeInternetGatewaysResponse = DescribeInternetGatewaysResponse'
-    { _digrsInternetGateways :: !(Maybe [InternetGateway])
-    , _digrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeInternetGatewaysResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digrsInternetGateways' - Information about one or more Internet gateways.
---
--- * 'digrsResponseStatus' - -- | The response status code.
-describeInternetGatewaysResponse
-    :: Int -- ^ 'digrsResponseStatus'
-    -> DescribeInternetGatewaysResponse
-describeInternetGatewaysResponse pResponseStatus_ =
-    DescribeInternetGatewaysResponse'
-    { _digrsInternetGateways = Nothing
-    , _digrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more Internet gateways.
-digrsInternetGateways :: Lens' DescribeInternetGatewaysResponse [InternetGateway]
-digrsInternetGateways = lens _digrsInternetGateways (\ s a -> s{_digrsInternetGateways = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-digrsResponseStatus :: Lens' DescribeInternetGatewaysResponse Int
-digrsResponseStatus = lens _digrsResponseStatus (\ s a -> s{_digrsResponseStatus = a});
-
-instance NFData DescribeInternetGatewaysResponse
diff --git a/gen/Network/AWS/EC2/DescribeKeyPairs.hs b/gen/Network/AWS/EC2/DescribeKeyPairs.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeKeyPairs.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeKeyPairs
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your key pairs.
---
---
--- For more information about key pairs, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeKeyPairs
-    (
-    -- * Creating a Request
-      describeKeyPairs
-    , DescribeKeyPairs
-    -- * Request Lenses
-    , dkpsFilters
-    , dkpsKeyNames
-    , dkpsDryRun
-
-    -- * Destructuring the Response
-    , describeKeyPairsResponse
-    , DescribeKeyPairsResponse
-    -- * Response Lenses
-    , dkprsKeyPairs
-    , dkprsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeKeyPairs.
---
---
---
--- /See:/ 'describeKeyPairs' smart constructor.
-data DescribeKeyPairs = DescribeKeyPairs'
-    { _dkpsFilters  :: !(Maybe [Filter])
-    , _dkpsKeyNames :: !(Maybe [Text])
-    , _dkpsDryRun   :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeKeyPairs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dkpsFilters' - One or more filters.     * @fingerprint@ - The fingerprint of the key pair.     * @key-name@ - The name of the key pair.
---
--- * 'dkpsKeyNames' - One or more key pair names. Default: Describes all your key pairs.
---
--- * 'dkpsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeKeyPairs
-    :: DescribeKeyPairs
-describeKeyPairs =
-    DescribeKeyPairs'
-    { _dkpsFilters = Nothing
-    , _dkpsKeyNames = Nothing
-    , _dkpsDryRun = Nothing
-    }
-
--- | One or more filters.     * @fingerprint@ - The fingerprint of the key pair.     * @key-name@ - The name of the key pair.
-dkpsFilters :: Lens' DescribeKeyPairs [Filter]
-dkpsFilters = lens _dkpsFilters (\ s a -> s{_dkpsFilters = a}) . _Default . _Coerce;
-
--- | One or more key pair names. Default: Describes all your key pairs.
-dkpsKeyNames :: Lens' DescribeKeyPairs [Text]
-dkpsKeyNames = lens _dkpsKeyNames (\ s a -> s{_dkpsKeyNames = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dkpsDryRun :: Lens' DescribeKeyPairs (Maybe Bool)
-dkpsDryRun = lens _dkpsDryRun (\ s a -> s{_dkpsDryRun = a});
-
-instance AWSRequest DescribeKeyPairs where
-        type Rs DescribeKeyPairs = DescribeKeyPairsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeKeyPairsResponse' <$>
-                   (x .@? "keySet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeKeyPairs
-
-instance NFData DescribeKeyPairs
-
-instance ToHeaders DescribeKeyPairs where
-        toHeaders = const mempty
-
-instance ToPath DescribeKeyPairs where
-        toPath = const "/"
-
-instance ToQuery DescribeKeyPairs where
-        toQuery DescribeKeyPairs'{..}
-          = mconcat
-              ["Action" =: ("DescribeKeyPairs" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dkpsFilters),
-               toQuery (toQueryList "KeyName" <$> _dkpsKeyNames),
-               "DryRun" =: _dkpsDryRun]
-
--- | Contains the output of DescribeKeyPairs.
---
---
---
--- /See:/ 'describeKeyPairsResponse' smart constructor.
-data DescribeKeyPairsResponse = DescribeKeyPairsResponse'
-    { _dkprsKeyPairs       :: !(Maybe [KeyPairInfo])
-    , _dkprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeKeyPairsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dkprsKeyPairs' - Information about one or more key pairs.
---
--- * 'dkprsResponseStatus' - -- | The response status code.
-describeKeyPairsResponse
-    :: Int -- ^ 'dkprsResponseStatus'
-    -> DescribeKeyPairsResponse
-describeKeyPairsResponse pResponseStatus_ =
-    DescribeKeyPairsResponse'
-    { _dkprsKeyPairs = Nothing
-    , _dkprsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more key pairs.
-dkprsKeyPairs :: Lens' DescribeKeyPairsResponse [KeyPairInfo]
-dkprsKeyPairs = lens _dkprsKeyPairs (\ s a -> s{_dkprsKeyPairs = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dkprsResponseStatus :: Lens' DescribeKeyPairsResponse Int
-dkprsResponseStatus = lens _dkprsResponseStatus (\ s a -> s{_dkprsResponseStatus = a});
-
-instance NFData DescribeKeyPairsResponse
diff --git a/gen/Network/AWS/EC2/DescribeMovingAddresses.hs b/gen/Network/AWS/EC2/DescribeMovingAddresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeMovingAddresses.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeMovingAddresses
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes your Elastic IP addresses that are being moved to the EC2-VPC platform, or that are being restored to the EC2-Classic platform. This request does not return information about any other Elastic IP addresses in your account.
---
---
-module Network.AWS.EC2.DescribeMovingAddresses
-    (
-    -- * Creating a Request
-      describeMovingAddresses
-    , DescribeMovingAddresses
-    -- * Request Lenses
-    , dmaFilters
-    , dmaPublicIPs
-    , dmaNextToken
-    , dmaDryRun
-    , dmaMaxResults
-
-    -- * Destructuring the Response
-    , describeMovingAddressesResponse
-    , DescribeMovingAddressesResponse
-    -- * Response Lenses
-    , dmarsMovingAddressStatuses
-    , dmarsNextToken
-    , dmarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeMovingAddresses.
---
---
---
--- /See:/ 'describeMovingAddresses' smart constructor.
-data DescribeMovingAddresses = DescribeMovingAddresses'
-    { _dmaFilters    :: !(Maybe [Filter])
-    , _dmaPublicIPs  :: !(Maybe [Text])
-    , _dmaNextToken  :: !(Maybe Text)
-    , _dmaDryRun     :: !(Maybe Bool)
-    , _dmaMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeMovingAddresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmaFilters' - One or more filters.     * @moving-status@ - The status of the Elastic IP address (@MovingToVpc@ | @RestoringToClassic@ ).
---
--- * 'dmaPublicIPs' - One or more Elastic IP addresses.
---
--- * 'dmaNextToken' - The token to use to retrieve the next page of results.
---
--- * 'dmaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dmaMaxResults' - The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value outside of this range, an error is returned. Default: If no value is provided, the default is 1000.
-describeMovingAddresses
-    :: DescribeMovingAddresses
-describeMovingAddresses =
-    DescribeMovingAddresses'
-    { _dmaFilters = Nothing
-    , _dmaPublicIPs = Nothing
-    , _dmaNextToken = Nothing
-    , _dmaDryRun = Nothing
-    , _dmaMaxResults = Nothing
-    }
-
--- | One or more filters.     * @moving-status@ - The status of the Elastic IP address (@MovingToVpc@ | @RestoringToClassic@ ).
-dmaFilters :: Lens' DescribeMovingAddresses [Filter]
-dmaFilters = lens _dmaFilters (\ s a -> s{_dmaFilters = a}) . _Default . _Coerce;
-
--- | One or more Elastic IP addresses.
-dmaPublicIPs :: Lens' DescribeMovingAddresses [Text]
-dmaPublicIPs = lens _dmaPublicIPs (\ s a -> s{_dmaPublicIPs = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results.
-dmaNextToken :: Lens' DescribeMovingAddresses (Maybe Text)
-dmaNextToken = lens _dmaNextToken (\ s a -> s{_dmaNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dmaDryRun :: Lens' DescribeMovingAddresses (Maybe Bool)
-dmaDryRun = lens _dmaDryRun (\ s a -> s{_dmaDryRun = a});
-
--- | The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value outside of this range, an error is returned. Default: If no value is provided, the default is 1000.
-dmaMaxResults :: Lens' DescribeMovingAddresses (Maybe Int)
-dmaMaxResults = lens _dmaMaxResults (\ s a -> s{_dmaMaxResults = a});
-
-instance AWSRequest DescribeMovingAddresses where
-        type Rs DescribeMovingAddresses =
-             DescribeMovingAddressesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeMovingAddressesResponse' <$>
-                   (x .@? "movingAddressStatusSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeMovingAddresses
-
-instance NFData DescribeMovingAddresses
-
-instance ToHeaders DescribeMovingAddresses where
-        toHeaders = const mempty
-
-instance ToPath DescribeMovingAddresses where
-        toPath = const "/"
-
-instance ToQuery DescribeMovingAddresses where
-        toQuery DescribeMovingAddresses'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeMovingAddresses" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dmaFilters),
-               toQuery (toQueryList "PublicIp" <$> _dmaPublicIPs),
-               "NextToken" =: _dmaNextToken, "DryRun" =: _dmaDryRun,
-               "MaxResults" =: _dmaMaxResults]
-
--- | Contains the output of DescribeMovingAddresses.
---
---
---
--- /See:/ 'describeMovingAddressesResponse' smart constructor.
-data DescribeMovingAddressesResponse = DescribeMovingAddressesResponse'
-    { _dmarsMovingAddressStatuses :: !(Maybe [MovingAddressStatus])
-    , _dmarsNextToken             :: !(Maybe Text)
-    , _dmarsResponseStatus        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeMovingAddressesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmarsMovingAddressStatuses' - The status for each Elastic IP address.
---
--- * 'dmarsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dmarsResponseStatus' - -- | The response status code.
-describeMovingAddressesResponse
-    :: Int -- ^ 'dmarsResponseStatus'
-    -> DescribeMovingAddressesResponse
-describeMovingAddressesResponse pResponseStatus_ =
-    DescribeMovingAddressesResponse'
-    { _dmarsMovingAddressStatuses = Nothing
-    , _dmarsNextToken = Nothing
-    , _dmarsResponseStatus = pResponseStatus_
-    }
-
--- | The status for each Elastic IP address.
-dmarsMovingAddressStatuses :: Lens' DescribeMovingAddressesResponse [MovingAddressStatus]
-dmarsMovingAddressStatuses = lens _dmarsMovingAddressStatuses (\ s a -> s{_dmarsMovingAddressStatuses = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dmarsNextToken :: Lens' DescribeMovingAddressesResponse (Maybe Text)
-dmarsNextToken = lens _dmarsNextToken (\ s a -> s{_dmarsNextToken = a});
-
--- | -- | The response status code.
-dmarsResponseStatus :: Lens' DescribeMovingAddressesResponse Int
-dmarsResponseStatus = lens _dmarsResponseStatus (\ s a -> s{_dmarsResponseStatus = a});
-
-instance NFData DescribeMovingAddressesResponse
diff --git a/gen/Network/AWS/EC2/DescribeNatGateways.hs b/gen/Network/AWS/EC2/DescribeNatGateways.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeNatGateways.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeNatGateways
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of the your NAT gateways.
---
---
-module Network.AWS.EC2.DescribeNatGateways
-    (
-    -- * Creating a Request
-      describeNatGateways
-    , DescribeNatGateways
-    -- * Request Lenses
-    , dngNatGatewayIds
-    , dngNextToken
-    , dngFilter
-    , dngMaxResults
-
-    -- * Destructuring the Response
-    , describeNatGatewaysResponse
-    , DescribeNatGatewaysResponse
-    -- * Response Lenses
-    , dngrsNatGateways
-    , dngrsNextToken
-    , dngrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeNatGateways.
---
---
---
--- /See:/ 'describeNatGateways' smart constructor.
-data DescribeNatGateways = DescribeNatGateways'
-    { _dngNatGatewayIds :: !(Maybe [Text])
-    , _dngNextToken     :: !(Maybe Text)
-    , _dngFilter        :: !(Maybe [Filter])
-    , _dngMaxResults    :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNatGateways' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dngNatGatewayIds' - One or more NAT gateway IDs.
---
--- * 'dngNextToken' - The token to retrieve the next page of results.
---
--- * 'dngFilter' - One or more filters.     * @nat-gateway-id@ - The ID of the NAT gateway.     * @state@ - The state of the NAT gateway (@pending@ | @failed@ | @available@ | @deleting@ | @deleted@ ).     * @subnet-id@ - The ID of the subnet in which the NAT gateway resides.     * @vpc-id@ - The ID of the VPC in which the NAT gateway resides.
---
--- * 'dngMaxResults' - The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value specified is greater than 1000, we return only 1000 items.
-describeNatGateways
-    :: DescribeNatGateways
-describeNatGateways =
-    DescribeNatGateways'
-    { _dngNatGatewayIds = Nothing
-    , _dngNextToken = Nothing
-    , _dngFilter = Nothing
-    , _dngMaxResults = Nothing
-    }
-
--- | One or more NAT gateway IDs.
-dngNatGatewayIds :: Lens' DescribeNatGateways [Text]
-dngNatGatewayIds = lens _dngNatGatewayIds (\ s a -> s{_dngNatGatewayIds = a}) . _Default . _Coerce;
-
--- | The token to retrieve the next page of results.
-dngNextToken :: Lens' DescribeNatGateways (Maybe Text)
-dngNextToken = lens _dngNextToken (\ s a -> s{_dngNextToken = a});
-
--- | One or more filters.     * @nat-gateway-id@ - The ID of the NAT gateway.     * @state@ - The state of the NAT gateway (@pending@ | @failed@ | @available@ | @deleting@ | @deleted@ ).     * @subnet-id@ - The ID of the subnet in which the NAT gateway resides.     * @vpc-id@ - The ID of the VPC in which the NAT gateway resides.
-dngFilter :: Lens' DescribeNatGateways [Filter]
-dngFilter = lens _dngFilter (\ s a -> s{_dngFilter = a}) . _Default . _Coerce;
-
--- | The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value specified is greater than 1000, we return only 1000 items.
-dngMaxResults :: Lens' DescribeNatGateways (Maybe Int)
-dngMaxResults = lens _dngMaxResults (\ s a -> s{_dngMaxResults = a});
-
-instance AWSRequest DescribeNatGateways where
-        type Rs DescribeNatGateways =
-             DescribeNatGatewaysResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeNatGatewaysResponse' <$>
-                   (x .@? "natGatewaySet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeNatGateways
-
-instance NFData DescribeNatGateways
-
-instance ToHeaders DescribeNatGateways where
-        toHeaders = const mempty
-
-instance ToPath DescribeNatGateways where
-        toPath = const "/"
-
-instance ToQuery DescribeNatGateways where
-        toQuery DescribeNatGateways'{..}
-          = mconcat
-              ["Action" =: ("DescribeNatGateways" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "NatGatewayId" <$> _dngNatGatewayIds),
-               "NextToken" =: _dngNextToken,
-               toQuery (toQueryList "Filter" <$> _dngFilter),
-               "MaxResults" =: _dngMaxResults]
-
--- | Contains the output of DescribeNatGateways.
---
---
---
--- /See:/ 'describeNatGatewaysResponse' smart constructor.
-data DescribeNatGatewaysResponse = DescribeNatGatewaysResponse'
-    { _dngrsNatGateways    :: !(Maybe [NatGateway])
-    , _dngrsNextToken      :: !(Maybe Text)
-    , _dngrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNatGatewaysResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dngrsNatGateways' - Information about the NAT gateways.
---
--- * 'dngrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dngrsResponseStatus' - -- | The response status code.
-describeNatGatewaysResponse
-    :: Int -- ^ 'dngrsResponseStatus'
-    -> DescribeNatGatewaysResponse
-describeNatGatewaysResponse pResponseStatus_ =
-    DescribeNatGatewaysResponse'
-    { _dngrsNatGateways = Nothing
-    , _dngrsNextToken = Nothing
-    , _dngrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the NAT gateways.
-dngrsNatGateways :: Lens' DescribeNatGatewaysResponse [NatGateway]
-dngrsNatGateways = lens _dngrsNatGateways (\ s a -> s{_dngrsNatGateways = a}) . _Default . _Coerce;
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dngrsNextToken :: Lens' DescribeNatGatewaysResponse (Maybe Text)
-dngrsNextToken = lens _dngrsNextToken (\ s a -> s{_dngrsNextToken = a});
-
--- | -- | The response status code.
-dngrsResponseStatus :: Lens' DescribeNatGatewaysResponse Int
-dngrsResponseStatus = lens _dngrsResponseStatus (\ s a -> s{_dngrsResponseStatus = a});
-
-instance NFData DescribeNatGatewaysResponse
diff --git a/gen/Network/AWS/EC2/DescribeNetworkACLs.hs b/gen/Network/AWS/EC2/DescribeNetworkACLs.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeNetworkACLs.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeNetworkACLs
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your network ACLs.
---
---
--- For more information about network ACLs, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeNetworkACLs
-    (
-    -- * Creating a Request
-      describeNetworkACLs
-    , DescribeNetworkACLs
-    -- * Request Lenses
-    , dnaclFilters
-    , dnaclNetworkACLIds
-    , dnaclDryRun
-
-    -- * Destructuring the Response
-    , describeNetworkACLsResponse
-    , DescribeNetworkACLsResponse
-    -- * Response Lenses
-    , dnarsNetworkACLs
-    , dnarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeNetworkAcls.
---
---
---
--- /See:/ 'describeNetworkACLs' smart constructor.
-data DescribeNetworkACLs = DescribeNetworkACLs'
-    { _dnaclFilters       :: !(Maybe [Filter])
-    , _dnaclNetworkACLIds :: !(Maybe [Text])
-    , _dnaclDryRun        :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNetworkACLs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnaclFilters' - One or more filters.     * @association.association-id@ - The ID of an association ID for the ACL.     * @association.network-acl-id@ - The ID of the network ACL involved in the association.     * @association.subnet-id@ - The ID of the subnet involved in the association.     * @default@ - Indicates whether the ACL is the default network ACL for the VPC.     * @entry.cidr@ - The IPv4 CIDR range specified in the entry.     * @entry.egress@ - Indicates whether the entry applies to egress traffic.     * @entry.icmp.code@ - The ICMP code specified in the entry, if any.     * @entry.icmp.type@ - The ICMP type specified in the entry, if any.     * @entry.ipv6-cidr@ - The IPv6 CIDR range specified in the entry.     * @entry.port-range.from@ - The start of the port range specified in the entry.      * @entry.port-range.to@ - The end of the port range specified in the entry.      * @entry.protocol@ - The protocol specified in the entry (@tcp@ | @udp@ | @icmp@ or a protocol number).     * @entry.rule-action@ - Allows or denies the matching traffic (@allow@ | @deny@ ).     * @entry.rule-number@ - The number of an entry (in other words, rule) in the ACL's set of entries.     * @network-acl-id@ - The ID of the network ACL.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the network ACL.
---
--- * 'dnaclNetworkACLIds' - One or more network ACL IDs. Default: Describes all your network ACLs.
---
--- * 'dnaclDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeNetworkACLs
-    :: DescribeNetworkACLs
-describeNetworkACLs =
-    DescribeNetworkACLs'
-    { _dnaclFilters = Nothing
-    , _dnaclNetworkACLIds = Nothing
-    , _dnaclDryRun = Nothing
-    }
-
--- | One or more filters.     * @association.association-id@ - The ID of an association ID for the ACL.     * @association.network-acl-id@ - The ID of the network ACL involved in the association.     * @association.subnet-id@ - The ID of the subnet involved in the association.     * @default@ - Indicates whether the ACL is the default network ACL for the VPC.     * @entry.cidr@ - The IPv4 CIDR range specified in the entry.     * @entry.egress@ - Indicates whether the entry applies to egress traffic.     * @entry.icmp.code@ - The ICMP code specified in the entry, if any.     * @entry.icmp.type@ - The ICMP type specified in the entry, if any.     * @entry.ipv6-cidr@ - The IPv6 CIDR range specified in the entry.     * @entry.port-range.from@ - The start of the port range specified in the entry.      * @entry.port-range.to@ - The end of the port range specified in the entry.      * @entry.protocol@ - The protocol specified in the entry (@tcp@ | @udp@ | @icmp@ or a protocol number).     * @entry.rule-action@ - Allows or denies the matching traffic (@allow@ | @deny@ ).     * @entry.rule-number@ - The number of an entry (in other words, rule) in the ACL's set of entries.     * @network-acl-id@ - The ID of the network ACL.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the network ACL.
-dnaclFilters :: Lens' DescribeNetworkACLs [Filter]
-dnaclFilters = lens _dnaclFilters (\ s a -> s{_dnaclFilters = a}) . _Default . _Coerce;
-
--- | One or more network ACL IDs. Default: Describes all your network ACLs.
-dnaclNetworkACLIds :: Lens' DescribeNetworkACLs [Text]
-dnaclNetworkACLIds = lens _dnaclNetworkACLIds (\ s a -> s{_dnaclNetworkACLIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dnaclDryRun :: Lens' DescribeNetworkACLs (Maybe Bool)
-dnaclDryRun = lens _dnaclDryRun (\ s a -> s{_dnaclDryRun = a});
-
-instance AWSRequest DescribeNetworkACLs where
-        type Rs DescribeNetworkACLs =
-             DescribeNetworkACLsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeNetworkACLsResponse' <$>
-                   (x .@? "networkAclSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeNetworkACLs
-
-instance NFData DescribeNetworkACLs
-
-instance ToHeaders DescribeNetworkACLs where
-        toHeaders = const mempty
-
-instance ToPath DescribeNetworkACLs where
-        toPath = const "/"
-
-instance ToQuery DescribeNetworkACLs where
-        toQuery DescribeNetworkACLs'{..}
-          = mconcat
-              ["Action" =: ("DescribeNetworkAcls" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dnaclFilters),
-               toQuery
-                 (toQueryList "NetworkAclId" <$> _dnaclNetworkACLIds),
-               "DryRun" =: _dnaclDryRun]
-
--- | Contains the output of DescribeNetworkAcls.
---
---
---
--- /See:/ 'describeNetworkACLsResponse' smart constructor.
-data DescribeNetworkACLsResponse = DescribeNetworkACLsResponse'
-    { _dnarsNetworkACLs    :: !(Maybe [NetworkACL])
-    , _dnarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNetworkACLsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnarsNetworkACLs' - Information about one or more network ACLs.
---
--- * 'dnarsResponseStatus' - -- | The response status code.
-describeNetworkACLsResponse
-    :: Int -- ^ 'dnarsResponseStatus'
-    -> DescribeNetworkACLsResponse
-describeNetworkACLsResponse pResponseStatus_ =
-    DescribeNetworkACLsResponse'
-    { _dnarsNetworkACLs = Nothing
-    , _dnarsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more network ACLs.
-dnarsNetworkACLs :: Lens' DescribeNetworkACLsResponse [NetworkACL]
-dnarsNetworkACLs = lens _dnarsNetworkACLs (\ s a -> s{_dnarsNetworkACLs = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dnarsResponseStatus :: Lens' DescribeNetworkACLsResponse Int
-dnarsResponseStatus = lens _dnarsResponseStatus (\ s a -> s{_dnarsResponseStatus = a});
-
-instance NFData DescribeNetworkACLsResponse
diff --git a/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs b/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs
+++ /dev/null
@@ -1,202 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeNetworkInterfaceAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes a network interface attribute. You can specify only one attribute at a time.
---
---
-module Network.AWS.EC2.DescribeNetworkInterfaceAttribute
-    (
-    -- * Creating a Request
-      describeNetworkInterfaceAttribute
-    , DescribeNetworkInterfaceAttribute
-    -- * Request Lenses
-    , dniaAttribute
-    , dniaDryRun
-    , dniaNetworkInterfaceId
-
-    -- * Destructuring the Response
-    , describeNetworkInterfaceAttributeResponse
-    , DescribeNetworkInterfaceAttributeResponse
-    -- * Response Lenses
-    , dniarsGroups
-    , dniarsSourceDestCheck
-    , dniarsNetworkInterfaceId
-    , dniarsAttachment
-    , dniarsDescription
-    , dniarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeNetworkInterfaceAttribute.
---
---
---
--- /See:/ 'describeNetworkInterfaceAttribute' smart constructor.
-data DescribeNetworkInterfaceAttribute = DescribeNetworkInterfaceAttribute'
-    { _dniaAttribute          :: !(Maybe NetworkInterfaceAttribute)
-    , _dniaDryRun             :: !(Maybe Bool)
-    , _dniaNetworkInterfaceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNetworkInterfaceAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dniaAttribute' - The attribute of the network interface.
---
--- * 'dniaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dniaNetworkInterfaceId' - The ID of the network interface.
-describeNetworkInterfaceAttribute
-    :: Text -- ^ 'dniaNetworkInterfaceId'
-    -> DescribeNetworkInterfaceAttribute
-describeNetworkInterfaceAttribute pNetworkInterfaceId_ =
-    DescribeNetworkInterfaceAttribute'
-    { _dniaAttribute = Nothing
-    , _dniaDryRun = Nothing
-    , _dniaNetworkInterfaceId = pNetworkInterfaceId_
-    }
-
--- | The attribute of the network interface.
-dniaAttribute :: Lens' DescribeNetworkInterfaceAttribute (Maybe NetworkInterfaceAttribute)
-dniaAttribute = lens _dniaAttribute (\ s a -> s{_dniaAttribute = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dniaDryRun :: Lens' DescribeNetworkInterfaceAttribute (Maybe Bool)
-dniaDryRun = lens _dniaDryRun (\ s a -> s{_dniaDryRun = a});
-
--- | The ID of the network interface.
-dniaNetworkInterfaceId :: Lens' DescribeNetworkInterfaceAttribute Text
-dniaNetworkInterfaceId = lens _dniaNetworkInterfaceId (\ s a -> s{_dniaNetworkInterfaceId = a});
-
-instance AWSRequest DescribeNetworkInterfaceAttribute
-         where
-        type Rs DescribeNetworkInterfaceAttribute =
-             DescribeNetworkInterfaceAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeNetworkInterfaceAttributeResponse' <$>
-                   (x .@? "groupSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "sourceDestCheck")
-                     <*> (x .@? "networkInterfaceId")
-                     <*> (x .@? "attachment")
-                     <*> (x .@? "description")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeNetworkInterfaceAttribute
-
-instance NFData DescribeNetworkInterfaceAttribute
-
-instance ToHeaders DescribeNetworkInterfaceAttribute
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeNetworkInterfaceAttribute
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeNetworkInterfaceAttribute
-         where
-        toQuery DescribeNetworkInterfaceAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeNetworkInterfaceAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Attribute" =: _dniaAttribute,
-               "DryRun" =: _dniaDryRun,
-               "NetworkInterfaceId" =: _dniaNetworkInterfaceId]
-
--- | Contains the output of DescribeNetworkInterfaceAttribute.
---
---
---
--- /See:/ 'describeNetworkInterfaceAttributeResponse' smart constructor.
-data DescribeNetworkInterfaceAttributeResponse = DescribeNetworkInterfaceAttributeResponse'
-    { _dniarsGroups             :: !(Maybe [GroupIdentifier])
-    , _dniarsSourceDestCheck    :: !(Maybe AttributeBooleanValue)
-    , _dniarsNetworkInterfaceId :: !(Maybe Text)
-    , _dniarsAttachment         :: !(Maybe NetworkInterfaceAttachment)
-    , _dniarsDescription        :: !(Maybe AttributeValue)
-    , _dniarsResponseStatus     :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNetworkInterfaceAttributeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dniarsGroups' - The security groups associated with the network interface.
---
--- * 'dniarsSourceDestCheck' - Indicates whether source/destination checking is enabled.
---
--- * 'dniarsNetworkInterfaceId' - The ID of the network interface.
---
--- * 'dniarsAttachment' - The attachment (if any) of the network interface.
---
--- * 'dniarsDescription' - The description of the network interface.
---
--- * 'dniarsResponseStatus' - -- | The response status code.
-describeNetworkInterfaceAttributeResponse
-    :: Int -- ^ 'dniarsResponseStatus'
-    -> DescribeNetworkInterfaceAttributeResponse
-describeNetworkInterfaceAttributeResponse pResponseStatus_ =
-    DescribeNetworkInterfaceAttributeResponse'
-    { _dniarsGroups = Nothing
-    , _dniarsSourceDestCheck = Nothing
-    , _dniarsNetworkInterfaceId = Nothing
-    , _dniarsAttachment = Nothing
-    , _dniarsDescription = Nothing
-    , _dniarsResponseStatus = pResponseStatus_
-    }
-
--- | The security groups associated with the network interface.
-dniarsGroups :: Lens' DescribeNetworkInterfaceAttributeResponse [GroupIdentifier]
-dniarsGroups = lens _dniarsGroups (\ s a -> s{_dniarsGroups = a}) . _Default . _Coerce;
-
--- | Indicates whether source/destination checking is enabled.
-dniarsSourceDestCheck :: Lens' DescribeNetworkInterfaceAttributeResponse (Maybe AttributeBooleanValue)
-dniarsSourceDestCheck = lens _dniarsSourceDestCheck (\ s a -> s{_dniarsSourceDestCheck = a});
-
--- | The ID of the network interface.
-dniarsNetworkInterfaceId :: Lens' DescribeNetworkInterfaceAttributeResponse (Maybe Text)
-dniarsNetworkInterfaceId = lens _dniarsNetworkInterfaceId (\ s a -> s{_dniarsNetworkInterfaceId = a});
-
--- | The attachment (if any) of the network interface.
-dniarsAttachment :: Lens' DescribeNetworkInterfaceAttributeResponse (Maybe NetworkInterfaceAttachment)
-dniarsAttachment = lens _dniarsAttachment (\ s a -> s{_dniarsAttachment = a});
-
--- | The description of the network interface.
-dniarsDescription :: Lens' DescribeNetworkInterfaceAttributeResponse (Maybe AttributeValue)
-dniarsDescription = lens _dniarsDescription (\ s a -> s{_dniarsDescription = a});
-
--- | -- | The response status code.
-dniarsResponseStatus :: Lens' DescribeNetworkInterfaceAttributeResponse Int
-dniarsResponseStatus = lens _dniarsResponseStatus (\ s a -> s{_dniarsResponseStatus = a});
-
-instance NFData
-         DescribeNetworkInterfaceAttributeResponse
diff --git a/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs b/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeNetworkInterfaces
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your network interfaces.
---
---
-module Network.AWS.EC2.DescribeNetworkInterfaces
-    (
-    -- * Creating a Request
-      describeNetworkInterfaces
-    , DescribeNetworkInterfaces
-    -- * Request Lenses
-    , dnisNetworkInterfaceIds
-    , dnisFilters
-    , dnisDryRun
-
-    -- * Destructuring the Response
-    , describeNetworkInterfacesResponse
-    , DescribeNetworkInterfacesResponse
-    -- * Response Lenses
-    , dnirsNetworkInterfaces
-    , dnirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeNetworkInterfaces.
---
---
---
--- /See:/ 'describeNetworkInterfaces' smart constructor.
-data DescribeNetworkInterfaces = DescribeNetworkInterfaces'
-    { _dnisNetworkInterfaceIds :: !(Maybe [Text])
-    , _dnisFilters             :: !(Maybe [Filter])
-    , _dnisDryRun              :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNetworkInterfaces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnisNetworkInterfaceIds' - One or more network interface IDs. Default: Describes all your network interfaces.
---
--- * 'dnisFilters' - One or more filters.     * @addresses.private-ip-address@ - The private IPv4 addresses associated with the network interface.     * @addresses.primary@ - Whether the private IPv4 address is the primary IP address associated with the network interface.      * @addresses.association.public-ip@ - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).     * @addresses.association.owner-id@ - The owner ID of the addresses associated with the network interface.     * @association.association-id@ - The association ID returned when the network interface was associated with an IPv4 address.     * @association.allocation-id@ - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.     * @association.ip-owner-id@ - The owner of the Elastic IP address (IPv4) associated with the network interface.     * @association.public-ip@ - The address of the Elastic IP address (IPv4) bound to the network interface.     * @association.public-dns-name@ - The public DNS name for the network interface (IPv4).     * @attachment.attachment-id@ - The ID of the interface attachment.     * @attachment.attach.time@ - The time that the network interface was attached to an instance.     * @attachment.delete-on-termination@ - Indicates whether the attachment is deleted when an instance is terminated.     * @attachment.device-index@ - The device index to which the network interface is attached.     * @attachment.instance-id@ - The ID of the instance to which the network interface is attached.     * @attachment.instance-owner-id@ - The owner ID of the instance to which the network interface is attached.     * @attachment.nat-gateway-id@ - The ID of the NAT gateway to which the network interface is attached.     * @attachment.status@ - The status of the attachment (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @availability-zone@ - The Availability Zone of the network interface.     * @description@ - The description of the network interface.     * @group-id@ - The ID of a security group associated with the network interface.     * @group-name@ - The name of a security group associated with the network interface.     * @ipv6-addresses.ipv6-address@ - An IPv6 address associated with the network interface.     * @mac-address@ - The MAC address of the network interface.     * @network-interface-id@ - The ID of the network interface.     * @owner-id@ - The AWS account ID of the network interface owner.     * @private-ip-address@ - The private IPv4 address or addresses of the network interface.     * @private-dns-name@ - The private DNS name of the network interface (IPv4).     * @requester-id@ - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console, Auto Scaling, and so on).     * @requester-managed@ - Indicates whether the network interface is being managed by an AWS service (for example, AWS Management Console, Auto Scaling, and so on).     * @source-desk-check@ - Indicates whether the network interface performs source/destination checking. A value of @true@ means checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the network interface to perform network address translation (NAT) in your VPC.      * @status@ - The status of the network interface. If the network interface is not attached to an instance, the status is @available@ ; if a network interface is attached to an instance the status is @in-use@ .     * @subnet-id@ - The ID of the subnet for the network interface.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the network interface.
---
--- * 'dnisDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeNetworkInterfaces
-    :: DescribeNetworkInterfaces
-describeNetworkInterfaces =
-    DescribeNetworkInterfaces'
-    { _dnisNetworkInterfaceIds = Nothing
-    , _dnisFilters = Nothing
-    , _dnisDryRun = Nothing
-    }
-
--- | One or more network interface IDs. Default: Describes all your network interfaces.
-dnisNetworkInterfaceIds :: Lens' DescribeNetworkInterfaces [Text]
-dnisNetworkInterfaceIds = lens _dnisNetworkInterfaceIds (\ s a -> s{_dnisNetworkInterfaceIds = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @addresses.private-ip-address@ - The private IPv4 addresses associated with the network interface.     * @addresses.primary@ - Whether the private IPv4 address is the primary IP address associated with the network interface.      * @addresses.association.public-ip@ - The association ID returned when the network interface was associated with the Elastic IP address (IPv4).     * @addresses.association.owner-id@ - The owner ID of the addresses associated with the network interface.     * @association.association-id@ - The association ID returned when the network interface was associated with an IPv4 address.     * @association.allocation-id@ - The allocation ID returned when you allocated the Elastic IP address (IPv4) for your network interface.     * @association.ip-owner-id@ - The owner of the Elastic IP address (IPv4) associated with the network interface.     * @association.public-ip@ - The address of the Elastic IP address (IPv4) bound to the network interface.     * @association.public-dns-name@ - The public DNS name for the network interface (IPv4).     * @attachment.attachment-id@ - The ID of the interface attachment.     * @attachment.attach.time@ - The time that the network interface was attached to an instance.     * @attachment.delete-on-termination@ - Indicates whether the attachment is deleted when an instance is terminated.     * @attachment.device-index@ - The device index to which the network interface is attached.     * @attachment.instance-id@ - The ID of the instance to which the network interface is attached.     * @attachment.instance-owner-id@ - The owner ID of the instance to which the network interface is attached.     * @attachment.nat-gateway-id@ - The ID of the NAT gateway to which the network interface is attached.     * @attachment.status@ - The status of the attachment (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @availability-zone@ - The Availability Zone of the network interface.     * @description@ - The description of the network interface.     * @group-id@ - The ID of a security group associated with the network interface.     * @group-name@ - The name of a security group associated with the network interface.     * @ipv6-addresses.ipv6-address@ - An IPv6 address associated with the network interface.     * @mac-address@ - The MAC address of the network interface.     * @network-interface-id@ - The ID of the network interface.     * @owner-id@ - The AWS account ID of the network interface owner.     * @private-ip-address@ - The private IPv4 address or addresses of the network interface.     * @private-dns-name@ - The private DNS name of the network interface (IPv4).     * @requester-id@ - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console, Auto Scaling, and so on).     * @requester-managed@ - Indicates whether the network interface is being managed by an AWS service (for example, AWS Management Console, Auto Scaling, and so on).     * @source-desk-check@ - Indicates whether the network interface performs source/destination checking. A value of @true@ means checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the network interface to perform network address translation (NAT) in your VPC.      * @status@ - The status of the network interface. If the network interface is not attached to an instance, the status is @available@ ; if a network interface is attached to an instance the status is @in-use@ .     * @subnet-id@ - The ID of the subnet for the network interface.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the network interface.
-dnisFilters :: Lens' DescribeNetworkInterfaces [Filter]
-dnisFilters = lens _dnisFilters (\ s a -> s{_dnisFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dnisDryRun :: Lens' DescribeNetworkInterfaces (Maybe Bool)
-dnisDryRun = lens _dnisDryRun (\ s a -> s{_dnisDryRun = a});
-
-instance AWSRequest DescribeNetworkInterfaces where
-        type Rs DescribeNetworkInterfaces =
-             DescribeNetworkInterfacesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeNetworkInterfacesResponse' <$>
-                   (x .@? "networkInterfaceSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeNetworkInterfaces
-
-instance NFData DescribeNetworkInterfaces
-
-instance ToHeaders DescribeNetworkInterfaces where
-        toHeaders = const mempty
-
-instance ToPath DescribeNetworkInterfaces where
-        toPath = const "/"
-
-instance ToQuery DescribeNetworkInterfaces where
-        toQuery DescribeNetworkInterfaces'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeNetworkInterfaces" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "NetworkInterfaceId" <$>
-                    _dnisNetworkInterfaceIds),
-               toQuery (toQueryList "Filter" <$> _dnisFilters),
-               "DryRun" =: _dnisDryRun]
-
--- | Contains the output of DescribeNetworkInterfaces.
---
---
---
--- /See:/ 'describeNetworkInterfacesResponse' smart constructor.
-data DescribeNetworkInterfacesResponse = DescribeNetworkInterfacesResponse'
-    { _dnirsNetworkInterfaces :: !(Maybe [NetworkInterface])
-    , _dnirsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeNetworkInterfacesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dnirsNetworkInterfaces' - Information about one or more network interfaces.
---
--- * 'dnirsResponseStatus' - -- | The response status code.
-describeNetworkInterfacesResponse
-    :: Int -- ^ 'dnirsResponseStatus'
-    -> DescribeNetworkInterfacesResponse
-describeNetworkInterfacesResponse pResponseStatus_ =
-    DescribeNetworkInterfacesResponse'
-    { _dnirsNetworkInterfaces = Nothing
-    , _dnirsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more network interfaces.
-dnirsNetworkInterfaces :: Lens' DescribeNetworkInterfacesResponse [NetworkInterface]
-dnirsNetworkInterfaces = lens _dnirsNetworkInterfaces (\ s a -> s{_dnirsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dnirsResponseStatus :: Lens' DescribeNetworkInterfacesResponse Int
-dnirsResponseStatus = lens _dnirsResponseStatus (\ s a -> s{_dnirsResponseStatus = a});
-
-instance NFData DescribeNetworkInterfacesResponse
diff --git a/gen/Network/AWS/EC2/DescribePlacementGroups.hs b/gen/Network/AWS/EC2/DescribePlacementGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribePlacementGroups.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribePlacementGroups
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your placement groups. For more information about placement groups and cluster instances, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html Cluster Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.DescribePlacementGroups
-    (
-    -- * Creating a Request
-      describePlacementGroups
-    , DescribePlacementGroups
-    -- * Request Lenses
-    , dpgsFilters
-    , dpgsGroupNames
-    , dpgsDryRun
-
-    -- * Destructuring the Response
-    , describePlacementGroupsResponse
-    , DescribePlacementGroupsResponse
-    -- * Response Lenses
-    , dpgrsPlacementGroups
-    , dpgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribePlacementGroups.
---
---
---
--- /See:/ 'describePlacementGroups' smart constructor.
-data DescribePlacementGroups = DescribePlacementGroups'
-    { _dpgsFilters    :: !(Maybe [Filter])
-    , _dpgsGroupNames :: !(Maybe [Text])
-    , _dpgsDryRun     :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribePlacementGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dpgsFilters' - One or more filters.     * @group-name@ - The name of the placement group.     * @state@ - The state of the placement group (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @strategy@ - The strategy of the placement group (@cluster@ ).
---
--- * 'dpgsGroupNames' - One or more placement group names. Default: Describes all your placement groups, or only those otherwise specified.
---
--- * 'dpgsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describePlacementGroups
-    :: DescribePlacementGroups
-describePlacementGroups =
-    DescribePlacementGroups'
-    { _dpgsFilters = Nothing
-    , _dpgsGroupNames = Nothing
-    , _dpgsDryRun = Nothing
-    }
-
--- | One or more filters.     * @group-name@ - The name of the placement group.     * @state@ - The state of the placement group (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @strategy@ - The strategy of the placement group (@cluster@ ).
-dpgsFilters :: Lens' DescribePlacementGroups [Filter]
-dpgsFilters = lens _dpgsFilters (\ s a -> s{_dpgsFilters = a}) . _Default . _Coerce;
-
--- | One or more placement group names. Default: Describes all your placement groups, or only those otherwise specified.
-dpgsGroupNames :: Lens' DescribePlacementGroups [Text]
-dpgsGroupNames = lens _dpgsGroupNames (\ s a -> s{_dpgsGroupNames = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dpgsDryRun :: Lens' DescribePlacementGroups (Maybe Bool)
-dpgsDryRun = lens _dpgsDryRun (\ s a -> s{_dpgsDryRun = a});
-
-instance AWSRequest DescribePlacementGroups where
-        type Rs DescribePlacementGroups =
-             DescribePlacementGroupsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribePlacementGroupsResponse' <$>
-                   (x .@? "placementGroupSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribePlacementGroups
-
-instance NFData DescribePlacementGroups
-
-instance ToHeaders DescribePlacementGroups where
-        toHeaders = const mempty
-
-instance ToPath DescribePlacementGroups where
-        toPath = const "/"
-
-instance ToQuery DescribePlacementGroups where
-        toQuery DescribePlacementGroups'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribePlacementGroups" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dpgsFilters),
-               toQuery
-                 (toQueryList "GroupName" <$> _dpgsGroupNames),
-               "DryRun" =: _dpgsDryRun]
-
--- | Contains the output of DescribePlacementGroups.
---
---
---
--- /See:/ 'describePlacementGroupsResponse' smart constructor.
-data DescribePlacementGroupsResponse = DescribePlacementGroupsResponse'
-    { _dpgrsPlacementGroups :: !(Maybe [PlacementGroup])
-    , _dpgrsResponseStatus  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribePlacementGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dpgrsPlacementGroups' - One or more placement groups.
---
--- * 'dpgrsResponseStatus' - -- | The response status code.
-describePlacementGroupsResponse
-    :: Int -- ^ 'dpgrsResponseStatus'
-    -> DescribePlacementGroupsResponse
-describePlacementGroupsResponse pResponseStatus_ =
-    DescribePlacementGroupsResponse'
-    { _dpgrsPlacementGroups = Nothing
-    , _dpgrsResponseStatus = pResponseStatus_
-    }
-
--- | One or more placement groups.
-dpgrsPlacementGroups :: Lens' DescribePlacementGroupsResponse [PlacementGroup]
-dpgrsPlacementGroups = lens _dpgrsPlacementGroups (\ s a -> s{_dpgrsPlacementGroups = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dpgrsResponseStatus :: Lens' DescribePlacementGroupsResponse Int
-dpgrsResponseStatus = lens _dpgrsResponseStatus (\ s a -> s{_dpgrsResponseStatus = a});
-
-instance NFData DescribePlacementGroupsResponse
diff --git a/gen/Network/AWS/EC2/DescribePrefixLists.hs b/gen/Network/AWS/EC2/DescribePrefixLists.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribePrefixLists.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribePrefixLists
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes available AWS services in a prefix list format, which includes the prefix list name and prefix list ID of the service and the IP address range for the service. A prefix list ID is required for creating an outbound security group rule that allows traffic from a VPC to access an AWS service through a VPC endpoint.
---
---
-module Network.AWS.EC2.DescribePrefixLists
-    (
-    -- * Creating a Request
-      describePrefixLists
-    , DescribePrefixLists
-    -- * Request Lenses
-    , dplFilters
-    , dplPrefixListIds
-    , dplNextToken
-    , dplDryRun
-    , dplMaxResults
-
-    -- * Destructuring the Response
-    , describePrefixListsResponse
-    , DescribePrefixListsResponse
-    -- * Response Lenses
-    , dplrsNextToken
-    , dplrsPrefixLists
-    , dplrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribePrefixLists.
---
---
---
--- /See:/ 'describePrefixLists' smart constructor.
-data DescribePrefixLists = DescribePrefixLists'
-    { _dplFilters       :: !(Maybe [Filter])
-    , _dplPrefixListIds :: !(Maybe [Text])
-    , _dplNextToken     :: !(Maybe Text)
-    , _dplDryRun        :: !(Maybe Bool)
-    , _dplMaxResults    :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribePrefixLists' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dplFilters' - One or more filters.     * @prefix-list-id@ : The ID of a prefix list.     * @prefix-list-name@ : The name of a prefix list.
---
--- * 'dplPrefixListIds' - One or more prefix list IDs.
---
--- * 'dplNextToken' - The token for the next set of items to return. (You received this token from a prior call.)
---
--- * 'dplDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dplMaxResults' - The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value specified is greater than 1000, we return only 1000 items.
-describePrefixLists
-    :: DescribePrefixLists
-describePrefixLists =
-    DescribePrefixLists'
-    { _dplFilters = Nothing
-    , _dplPrefixListIds = Nothing
-    , _dplNextToken = Nothing
-    , _dplDryRun = Nothing
-    , _dplMaxResults = Nothing
-    }
-
--- | One or more filters.     * @prefix-list-id@ : The ID of a prefix list.     * @prefix-list-name@ : The name of a prefix list.
-dplFilters :: Lens' DescribePrefixLists [Filter]
-dplFilters = lens _dplFilters (\ s a -> s{_dplFilters = a}) . _Default . _Coerce;
-
--- | One or more prefix list IDs.
-dplPrefixListIds :: Lens' DescribePrefixLists [Text]
-dplPrefixListIds = lens _dplPrefixListIds (\ s a -> s{_dplPrefixListIds = a}) . _Default . _Coerce;
-
--- | The token for the next set of items to return. (You received this token from a prior call.)
-dplNextToken :: Lens' DescribePrefixLists (Maybe Text)
-dplNextToken = lens _dplNextToken (\ s a -> s{_dplNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dplDryRun :: Lens' DescribePrefixLists (Maybe Bool)
-dplDryRun = lens _dplDryRun (\ s a -> s{_dplDryRun = a});
-
--- | The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value specified is greater than 1000, we return only 1000 items.
-dplMaxResults :: Lens' DescribePrefixLists (Maybe Int)
-dplMaxResults = lens _dplMaxResults (\ s a -> s{_dplMaxResults = a});
-
-instance AWSRequest DescribePrefixLists where
-        type Rs DescribePrefixLists =
-             DescribePrefixListsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribePrefixListsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "prefixListSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribePrefixLists
-
-instance NFData DescribePrefixLists
-
-instance ToHeaders DescribePrefixLists where
-        toHeaders = const mempty
-
-instance ToPath DescribePrefixLists where
-        toPath = const "/"
-
-instance ToQuery DescribePrefixLists where
-        toQuery DescribePrefixLists'{..}
-          = mconcat
-              ["Action" =: ("DescribePrefixLists" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dplFilters),
-               toQuery
-                 (toQueryList "PrefixListId" <$> _dplPrefixListIds),
-               "NextToken" =: _dplNextToken, "DryRun" =: _dplDryRun,
-               "MaxResults" =: _dplMaxResults]
-
--- | Contains the output of DescribePrefixLists.
---
---
---
--- /See:/ 'describePrefixListsResponse' smart constructor.
-data DescribePrefixListsResponse = DescribePrefixListsResponse'
-    { _dplrsNextToken      :: !(Maybe Text)
-    , _dplrsPrefixLists    :: !(Maybe [PrefixList])
-    , _dplrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribePrefixListsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dplrsNextToken' - The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
---
--- * 'dplrsPrefixLists' - All available prefix lists.
---
--- * 'dplrsResponseStatus' - -- | The response status code.
-describePrefixListsResponse
-    :: Int -- ^ 'dplrsResponseStatus'
-    -> DescribePrefixListsResponse
-describePrefixListsResponse pResponseStatus_ =
-    DescribePrefixListsResponse'
-    { _dplrsNextToken = Nothing
-    , _dplrsPrefixLists = Nothing
-    , _dplrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
-dplrsNextToken :: Lens' DescribePrefixListsResponse (Maybe Text)
-dplrsNextToken = lens _dplrsNextToken (\ s a -> s{_dplrsNextToken = a});
-
--- | All available prefix lists.
-dplrsPrefixLists :: Lens' DescribePrefixListsResponse [PrefixList]
-dplrsPrefixLists = lens _dplrsPrefixLists (\ s a -> s{_dplrsPrefixLists = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dplrsResponseStatus :: Lens' DescribePrefixListsResponse Int
-dplrsResponseStatus = lens _dplrsResponseStatus (\ s a -> s{_dplrsResponseStatus = a});
-
-instance NFData DescribePrefixListsResponse
diff --git a/gen/Network/AWS/EC2/DescribeRegions.hs b/gen/Network/AWS/EC2/DescribeRegions.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeRegions.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeRegions
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more regions that are currently available to you.
---
---
--- For a list of the regions supported by Amazon EC2, see <http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region Regions and Endpoints> .
---
-module Network.AWS.EC2.DescribeRegions
-    (
-    -- * Creating a Request
-      describeRegions
-    , DescribeRegions
-    -- * Request Lenses
-    , drsRegionNames
-    , drsFilters
-    , drsDryRun
-
-    -- * Destructuring the Response
-    , describeRegionsResponse
-    , DescribeRegionsResponse
-    -- * Response Lenses
-    , drrsRegions
-    , drrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeRegions.
---
---
---
--- /See:/ 'describeRegions' smart constructor.
-data DescribeRegions = DescribeRegions'
-    { _drsRegionNames :: !(Maybe [Text])
-    , _drsFilters     :: !(Maybe [Filter])
-    , _drsDryRun      :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeRegions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsRegionNames' - The names of one or more regions.
---
--- * 'drsFilters' - One or more filters.     * @endpoint@ - The endpoint of the region (for example, @ec2.us-east-1.amazonaws.com@ ).     * @region-name@ - The name of the region (for example, @us-east-1@ ).
---
--- * 'drsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeRegions
-    :: DescribeRegions
-describeRegions =
-    DescribeRegions'
-    { _drsRegionNames = Nothing
-    , _drsFilters = Nothing
-    , _drsDryRun = Nothing
-    }
-
--- | The names of one or more regions.
-drsRegionNames :: Lens' DescribeRegions [Text]
-drsRegionNames = lens _drsRegionNames (\ s a -> s{_drsRegionNames = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @endpoint@ - The endpoint of the region (for example, @ec2.us-east-1.amazonaws.com@ ).     * @region-name@ - The name of the region (for example, @us-east-1@ ).
-drsFilters :: Lens' DescribeRegions [Filter]
-drsFilters = lens _drsFilters (\ s a -> s{_drsFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-drsDryRun :: Lens' DescribeRegions (Maybe Bool)
-drsDryRun = lens _drsDryRun (\ s a -> s{_drsDryRun = a});
-
-instance AWSRequest DescribeRegions where
-        type Rs DescribeRegions = DescribeRegionsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeRegionsResponse' <$>
-                   (x .@? "regionInfo" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeRegions
-
-instance NFData DescribeRegions
-
-instance ToHeaders DescribeRegions where
-        toHeaders = const mempty
-
-instance ToPath DescribeRegions where
-        toPath = const "/"
-
-instance ToQuery DescribeRegions where
-        toQuery DescribeRegions'{..}
-          = mconcat
-              ["Action" =: ("DescribeRegions" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "RegionName" <$> _drsRegionNames),
-               toQuery (toQueryList "Filter" <$> _drsFilters),
-               "DryRun" =: _drsDryRun]
-
--- | Contains the output of DescribeRegions.
---
---
---
--- /See:/ 'describeRegionsResponse' smart constructor.
-data DescribeRegionsResponse = DescribeRegionsResponse'
-    { _drrsRegions        :: !(Maybe [RegionInfo])
-    , _drrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeRegionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drrsRegions' - Information about one or more regions.
---
--- * 'drrsResponseStatus' - -- | The response status code.
-describeRegionsResponse
-    :: Int -- ^ 'drrsResponseStatus'
-    -> DescribeRegionsResponse
-describeRegionsResponse pResponseStatus_ =
-    DescribeRegionsResponse'
-    { _drrsRegions = Nothing
-    , _drrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more regions.
-drrsRegions :: Lens' DescribeRegionsResponse [RegionInfo]
-drrsRegions = lens _drrsRegions (\ s a -> s{_drrsRegions = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-drrsResponseStatus :: Lens' DescribeRegionsResponse Int
-drrsResponseStatus = lens _drrsResponseStatus (\ s a -> s{_drrsResponseStatus = a});
-
-instance NFData DescribeRegionsResponse
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstances.hs b/gen/Network/AWS/EC2/DescribeReservedInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeReservedInstances.hs
+++ /dev/null
@@ -1,180 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeReservedInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of the Reserved Instances that you purchased.
---
---
--- For more information about Reserved Instances, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeReservedInstances
-    (
-    -- * Creating a Request
-      describeReservedInstances
-    , DescribeReservedInstances
-    -- * Request Lenses
-    , driFilters
-    , driReservedInstancesIds
-    , driOfferingType
-    , driOfferingClass
-    , driDryRun
-
-    -- * Destructuring the Response
-    , describeReservedInstancesResponse
-    , DescribeReservedInstancesResponse
-    -- * Response Lenses
-    , drirsReservedInstances
-    , drirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeReservedInstances.
---
---
---
--- /See:/ 'describeReservedInstances' smart constructor.
-data DescribeReservedInstances = DescribeReservedInstances'
-    { _driFilters              :: !(Maybe [Filter])
-    , _driReservedInstancesIds :: !(Maybe [Text])
-    , _driOfferingType         :: !(Maybe OfferingTypeValues)
-    , _driOfferingClass        :: !(Maybe OfferingClassType)
-    , _driDryRun               :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'driFilters' - One or more filters.     * @availability-zone@ - The Availability Zone where the Reserved Instance can be used.     * @duration@ - The duration of the Reserved Instance (one year or three years), in seconds (@31536000@ | @94608000@ ).     * @end@ - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).     * @fixed-price@ - The purchase price of the Reserved Instance (for example, 9800.0).     * @instance-type@ - The instance type that is covered by the reservation.     * @scope@ - The scope of the Reserved Instance (@Region@ or @Availability Zone@ ).     * @product-description@ - The Reserved Instance product platform description. Instances that include @(Amazon VPC)@ in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC (@Linux/UNIX@ | @Linux/UNIX (Amazon VPC)@ | @SUSE Linux@ | @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ | @Red Hat Enterprise Linux (Amazon VPC)@ | @Windows@ | @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ | @Windows with SQL Server Standard (Amazon VPC)@ | @Windows with SQL Server Web@ | @Windows with SQL Server Web (Amazon VPC)@ | @Windows with SQL Server Enterprise@ | @Windows with SQL Server Enterprise (Amazon VPC)@ ).     * @reserved-instances-id@ - The ID of the Reserved Instance.     * @start@ - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).     * @state@ - The state of the Reserved Instance (@payment-pending@ | @active@ | @payment-failed@ | @retired@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @usage-price@ - The usage price of the Reserved Instance, per hour (for example, 0.84).
---
--- * 'driReservedInstancesIds' - One or more Reserved Instance IDs. Default: Describes all your Reserved Instances, or only those otherwise specified.
---
--- * 'driOfferingType' - The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the @Medium Utilization@ Reserved Instance offering type.
---
--- * 'driOfferingClass' - Describes whether the Reserved Instance is Standard or Convertible.
---
--- * 'driDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeReservedInstances
-    :: DescribeReservedInstances
-describeReservedInstances =
-    DescribeReservedInstances'
-    { _driFilters = Nothing
-    , _driReservedInstancesIds = Nothing
-    , _driOfferingType = Nothing
-    , _driOfferingClass = Nothing
-    , _driDryRun = Nothing
-    }
-
--- | One or more filters.     * @availability-zone@ - The Availability Zone where the Reserved Instance can be used.     * @duration@ - The duration of the Reserved Instance (one year or three years), in seconds (@31536000@ | @94608000@ ).     * @end@ - The time when the Reserved Instance expires (for example, 2015-08-07T11:54:42.000Z).     * @fixed-price@ - The purchase price of the Reserved Instance (for example, 9800.0).     * @instance-type@ - The instance type that is covered by the reservation.     * @scope@ - The scope of the Reserved Instance (@Region@ or @Availability Zone@ ).     * @product-description@ - The Reserved Instance product platform description. Instances that include @(Amazon VPC)@ in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC (@Linux/UNIX@ | @Linux/UNIX (Amazon VPC)@ | @SUSE Linux@ | @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ | @Red Hat Enterprise Linux (Amazon VPC)@ | @Windows@ | @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ | @Windows with SQL Server Standard (Amazon VPC)@ | @Windows with SQL Server Web@ | @Windows with SQL Server Web (Amazon VPC)@ | @Windows with SQL Server Enterprise@ | @Windows with SQL Server Enterprise (Amazon VPC)@ ).     * @reserved-instances-id@ - The ID of the Reserved Instance.     * @start@ - The time at which the Reserved Instance purchase request was placed (for example, 2014-08-07T11:54:42.000Z).     * @state@ - The state of the Reserved Instance (@payment-pending@ | @active@ | @payment-failed@ | @retired@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @usage-price@ - The usage price of the Reserved Instance, per hour (for example, 0.84).
-driFilters :: Lens' DescribeReservedInstances [Filter]
-driFilters = lens _driFilters (\ s a -> s{_driFilters = a}) . _Default . _Coerce;
-
--- | One or more Reserved Instance IDs. Default: Describes all your Reserved Instances, or only those otherwise specified.
-driReservedInstancesIds :: Lens' DescribeReservedInstances [Text]
-driReservedInstancesIds = lens _driReservedInstancesIds (\ s a -> s{_driReservedInstancesIds = a}) . _Default . _Coerce;
-
--- | The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the @Medium Utilization@ Reserved Instance offering type.
-driOfferingType :: Lens' DescribeReservedInstances (Maybe OfferingTypeValues)
-driOfferingType = lens _driOfferingType (\ s a -> s{_driOfferingType = a});
-
--- | Describes whether the Reserved Instance is Standard or Convertible.
-driOfferingClass :: Lens' DescribeReservedInstances (Maybe OfferingClassType)
-driOfferingClass = lens _driOfferingClass (\ s a -> s{_driOfferingClass = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-driDryRun :: Lens' DescribeReservedInstances (Maybe Bool)
-driDryRun = lens _driDryRun (\ s a -> s{_driDryRun = a});
-
-instance AWSRequest DescribeReservedInstances where
-        type Rs DescribeReservedInstances =
-             DescribeReservedInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeReservedInstancesResponse' <$>
-                   (x .@? "reservedInstancesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeReservedInstances
-
-instance NFData DescribeReservedInstances
-
-instance ToHeaders DescribeReservedInstances where
-        toHeaders = const mempty
-
-instance ToPath DescribeReservedInstances where
-        toPath = const "/"
-
-instance ToQuery DescribeReservedInstances where
-        toQuery DescribeReservedInstances'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeReservedInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _driFilters),
-               toQuery
-                 (toQueryList "ReservedInstancesId" <$>
-                    _driReservedInstancesIds),
-               "OfferingType" =: _driOfferingType,
-               "OfferingClass" =: _driOfferingClass,
-               "DryRun" =: _driDryRun]
-
--- | Contains the output for DescribeReservedInstances.
---
---
---
--- /See:/ 'describeReservedInstancesResponse' smart constructor.
-data DescribeReservedInstancesResponse = DescribeReservedInstancesResponse'
-    { _drirsReservedInstances :: !(Maybe [ReservedInstances])
-    , _drirsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drirsReservedInstances' - A list of Reserved Instances.
---
--- * 'drirsResponseStatus' - -- | The response status code.
-describeReservedInstancesResponse
-    :: Int -- ^ 'drirsResponseStatus'
-    -> DescribeReservedInstancesResponse
-describeReservedInstancesResponse pResponseStatus_ =
-    DescribeReservedInstancesResponse'
-    { _drirsReservedInstances = Nothing
-    , _drirsResponseStatus = pResponseStatus_
-    }
-
--- | A list of Reserved Instances.
-drirsReservedInstances :: Lens' DescribeReservedInstancesResponse [ReservedInstances]
-drirsReservedInstances = lens _drirsReservedInstances (\ s a -> s{_drirsReservedInstances = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-drirsResponseStatus :: Lens' DescribeReservedInstancesResponse Int
-drirsResponseStatus = lens _drirsResponseStatus (\ s a -> s{_drirsResponseStatus = a});
-
-instance NFData DescribeReservedInstancesResponse
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs b/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs
+++ /dev/null
@@ -1,170 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeReservedInstancesListings
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes your account's Reserved Instance listings in the Reserved Instance Marketplace.
---
---
--- The Reserved Instance Marketplace matches sellers who want to resell Reserved Instance capacity that they no longer need with buyers who want to purchase additional capacity. Reserved Instances bought and sold through the Reserved Instance Marketplace work like any other Reserved Instances.
---
--- As a seller, you choose to list some or all of your Reserved Instances, and you specify the upfront price to receive for them. Your Reserved Instances are then listed in the Reserved Instance Marketplace and are available for purchase.
---
--- As a buyer, you specify the configuration of the Reserved Instance to purchase, and the Marketplace matches what you're searching for with what's available. The Marketplace first sells the lowest priced Reserved Instances to you, and continues to sell available Reserved Instance listings to you until your demand is met. You are charged based on the total price of all of the listings that you purchase.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeReservedInstancesListings
-    (
-    -- * Creating a Request
-      describeReservedInstancesListings
-    , DescribeReservedInstancesListings
-    -- * Request Lenses
-    , drilFilters
-    , drilReservedInstancesId
-    , drilReservedInstancesListingId
-
-    -- * Destructuring the Response
-    , describeReservedInstancesListingsResponse
-    , DescribeReservedInstancesListingsResponse
-    -- * Response Lenses
-    , drilrsReservedInstancesListings
-    , drilrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeReservedInstancesListings.
---
---
---
--- /See:/ 'describeReservedInstancesListings' smart constructor.
-data DescribeReservedInstancesListings = DescribeReservedInstancesListings'
-    { _drilFilters                    :: !(Maybe [Filter])
-    , _drilReservedInstancesId        :: !(Maybe Text)
-    , _drilReservedInstancesListingId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesListings' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drilFilters' - One or more filters.     * @reserved-instances-id@ - The ID of the Reserved Instances.     * @reserved-instances-listing-id@ - The ID of the Reserved Instances listing.     * @status@ - The status of the Reserved Instance listing (@pending@ | @active@ | @cancelled@ | @closed@ ).     * @status-message@ - The reason for the status.
---
--- * 'drilReservedInstancesId' - One or more Reserved Instance IDs.
---
--- * 'drilReservedInstancesListingId' - One or more Reserved Instance listing IDs.
-describeReservedInstancesListings
-    :: DescribeReservedInstancesListings
-describeReservedInstancesListings =
-    DescribeReservedInstancesListings'
-    { _drilFilters = Nothing
-    , _drilReservedInstancesId = Nothing
-    , _drilReservedInstancesListingId = Nothing
-    }
-
--- | One or more filters.     * @reserved-instances-id@ - The ID of the Reserved Instances.     * @reserved-instances-listing-id@ - The ID of the Reserved Instances listing.     * @status@ - The status of the Reserved Instance listing (@pending@ | @active@ | @cancelled@ | @closed@ ).     * @status-message@ - The reason for the status.
-drilFilters :: Lens' DescribeReservedInstancesListings [Filter]
-drilFilters = lens _drilFilters (\ s a -> s{_drilFilters = a}) . _Default . _Coerce;
-
--- | One or more Reserved Instance IDs.
-drilReservedInstancesId :: Lens' DescribeReservedInstancesListings (Maybe Text)
-drilReservedInstancesId = lens _drilReservedInstancesId (\ s a -> s{_drilReservedInstancesId = a});
-
--- | One or more Reserved Instance listing IDs.
-drilReservedInstancesListingId :: Lens' DescribeReservedInstancesListings (Maybe Text)
-drilReservedInstancesListingId = lens _drilReservedInstancesListingId (\ s a -> s{_drilReservedInstancesListingId = a});
-
-instance AWSRequest DescribeReservedInstancesListings
-         where
-        type Rs DescribeReservedInstancesListings =
-             DescribeReservedInstancesListingsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeReservedInstancesListingsResponse' <$>
-                   (x .@? "reservedInstancesListingsSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeReservedInstancesListings
-
-instance NFData DescribeReservedInstancesListings
-
-instance ToHeaders DescribeReservedInstancesListings
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeReservedInstancesListings
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeReservedInstancesListings
-         where
-        toQuery DescribeReservedInstancesListings'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeReservedInstancesListings" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _drilFilters),
-               "ReservedInstancesId" =: _drilReservedInstancesId,
-               "ReservedInstancesListingId" =:
-                 _drilReservedInstancesListingId]
-
--- | Contains the output of DescribeReservedInstancesListings.
---
---
---
--- /See:/ 'describeReservedInstancesListingsResponse' smart constructor.
-data DescribeReservedInstancesListingsResponse = DescribeReservedInstancesListingsResponse'
-    { _drilrsReservedInstancesListings :: !(Maybe [ReservedInstancesListing])
-    , _drilrsResponseStatus            :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesListingsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drilrsReservedInstancesListings' - Information about the Reserved Instance listing.
---
--- * 'drilrsResponseStatus' - -- | The response status code.
-describeReservedInstancesListingsResponse
-    :: Int -- ^ 'drilrsResponseStatus'
-    -> DescribeReservedInstancesListingsResponse
-describeReservedInstancesListingsResponse pResponseStatus_ =
-    DescribeReservedInstancesListingsResponse'
-    { _drilrsReservedInstancesListings = Nothing
-    , _drilrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the Reserved Instance listing.
-drilrsReservedInstancesListings :: Lens' DescribeReservedInstancesListingsResponse [ReservedInstancesListing]
-drilrsReservedInstancesListings = lens _drilrsReservedInstancesListings (\ s a -> s{_drilrsReservedInstancesListings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-drilrsResponseStatus :: Lens' DescribeReservedInstancesListingsResponse Int
-drilrsResponseStatus = lens _drilrsResponseStatus (\ s a -> s{_drilrsResponseStatus = a});
-
-instance NFData
-         DescribeReservedInstancesListingsResponse
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs b/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs
+++ /dev/null
@@ -1,190 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeReservedInstancesModifications
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the modifications made to your Reserved Instances. If no parameter is specified, information about all your Reserved Instances modification requests is returned. If a modification ID is specified, only information about the specific modification is returned.
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html Modifying Reserved Instances> in the Amazon Elastic Compute Cloud User Guide.
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeReservedInstancesModifications
-    (
-    -- * Creating a Request
-      describeReservedInstancesModifications
-    , DescribeReservedInstancesModifications
-    -- * Request Lenses
-    , drimFilters
-    , drimReservedInstancesModificationIds
-    , drimNextToken
-
-    -- * Destructuring the Response
-    , describeReservedInstancesModificationsResponse
-    , DescribeReservedInstancesModificationsResponse
-    -- * Response Lenses
-    , drimrsNextToken
-    , drimrsReservedInstancesModifications
-    , drimrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeReservedInstancesModifications.
---
---
---
--- /See:/ 'describeReservedInstancesModifications' smart constructor.
-data DescribeReservedInstancesModifications = DescribeReservedInstancesModifications'
-    { _drimFilters                          :: !(Maybe [Filter])
-    , _drimReservedInstancesModificationIds :: !(Maybe [Text])
-    , _drimNextToken                        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesModifications' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drimFilters' - One or more filters.     * @client-token@ - The idempotency token for the modification request.     * @create-date@ - The time when the modification request was created.     * @effective-date@ - The time when the modification becomes effective.     * @modification-result.reserved-instances-id@ - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is @fulfilled@ .     * @modification-result.target-configuration.availability-zone@ - The Availability Zone for the new Reserved Instances.     * @modification-result.target-configuration.instance-count @ - The number of new Reserved Instances.     * @modification-result.target-configuration.instance-type@ - The instance type of the new Reserved Instances.     * @modification-result.target-configuration.platform@ - The network platform of the new Reserved Instances (@EC2-Classic@ | @EC2-VPC@ ).     * @reserved-instances-id@ - The ID of the Reserved Instances modified.     * @reserved-instances-modification-id@ - The ID of the modification request.     * @status@ - The status of the Reserved Instances modification request (@processing@ | @fulfilled@ | @failed@ ).     * @status-message@ - The reason for the status.     * @update-date@ - The time when the modification request was last updated.
---
--- * 'drimReservedInstancesModificationIds' - IDs for the submitted modification request.
---
--- * 'drimNextToken' - The token to retrieve the next page of results.
-describeReservedInstancesModifications
-    :: DescribeReservedInstancesModifications
-describeReservedInstancesModifications =
-    DescribeReservedInstancesModifications'
-    { _drimFilters = Nothing
-    , _drimReservedInstancesModificationIds = Nothing
-    , _drimNextToken = Nothing
-    }
-
--- | One or more filters.     * @client-token@ - The idempotency token for the modification request.     * @create-date@ - The time when the modification request was created.     * @effective-date@ - The time when the modification becomes effective.     * @modification-result.reserved-instances-id@ - The ID for the Reserved Instances created as part of the modification request. This ID is only available when the status of the modification is @fulfilled@ .     * @modification-result.target-configuration.availability-zone@ - The Availability Zone for the new Reserved Instances.     * @modification-result.target-configuration.instance-count @ - The number of new Reserved Instances.     * @modification-result.target-configuration.instance-type@ - The instance type of the new Reserved Instances.     * @modification-result.target-configuration.platform@ - The network platform of the new Reserved Instances (@EC2-Classic@ | @EC2-VPC@ ).     * @reserved-instances-id@ - The ID of the Reserved Instances modified.     * @reserved-instances-modification-id@ - The ID of the modification request.     * @status@ - The status of the Reserved Instances modification request (@processing@ | @fulfilled@ | @failed@ ).     * @status-message@ - The reason for the status.     * @update-date@ - The time when the modification request was last updated.
-drimFilters :: Lens' DescribeReservedInstancesModifications [Filter]
-drimFilters = lens _drimFilters (\ s a -> s{_drimFilters = a}) . _Default . _Coerce;
-
--- | IDs for the submitted modification request.
-drimReservedInstancesModificationIds :: Lens' DescribeReservedInstancesModifications [Text]
-drimReservedInstancesModificationIds = lens _drimReservedInstancesModificationIds (\ s a -> s{_drimReservedInstancesModificationIds = a}) . _Default . _Coerce;
-
--- | The token to retrieve the next page of results.
-drimNextToken :: Lens' DescribeReservedInstancesModifications (Maybe Text)
-drimNextToken = lens _drimNextToken (\ s a -> s{_drimNextToken = a});
-
-instance AWSPager
-         DescribeReservedInstancesModifications where
-        page rq rs
-          | stop (rs ^. drimrsNextToken) = Nothing
-          | stop (rs ^. drimrsReservedInstancesModifications) =
-            Nothing
-          | otherwise =
-            Just $ rq & drimNextToken .~ rs ^. drimrsNextToken
-
-instance AWSRequest
-         DescribeReservedInstancesModifications where
-        type Rs DescribeReservedInstancesModifications =
-             DescribeReservedInstancesModificationsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeReservedInstancesModificationsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "reservedInstancesModificationsSet" .!@ mempty
-                        >>= may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable
-         DescribeReservedInstancesModifications
-
-instance NFData
-         DescribeReservedInstancesModifications
-
-instance ToHeaders
-         DescribeReservedInstancesModifications where
-        toHeaders = const mempty
-
-instance ToPath
-         DescribeReservedInstancesModifications where
-        toPath = const "/"
-
-instance ToQuery
-         DescribeReservedInstancesModifications where
-        toQuery DescribeReservedInstancesModifications'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeReservedInstancesModifications" ::
-                    ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _drimFilters),
-               toQuery
-                 (toQueryList "ReservedInstancesModificationId" <$>
-                    _drimReservedInstancesModificationIds),
-               "NextToken" =: _drimNextToken]
-
--- | Contains the output of DescribeReservedInstancesModifications.
---
---
---
--- /See:/ 'describeReservedInstancesModificationsResponse' smart constructor.
-data DescribeReservedInstancesModificationsResponse = DescribeReservedInstancesModificationsResponse'
-    { _drimrsNextToken                      :: !(Maybe Text)
-    , _drimrsReservedInstancesModifications :: !(Maybe [ReservedInstancesModification])
-    , _drimrsResponseStatus                 :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesModificationsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drimrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'drimrsReservedInstancesModifications' - The Reserved Instance modification information.
---
--- * 'drimrsResponseStatus' - -- | The response status code.
-describeReservedInstancesModificationsResponse
-    :: Int -- ^ 'drimrsResponseStatus'
-    -> DescribeReservedInstancesModificationsResponse
-describeReservedInstancesModificationsResponse pResponseStatus_ =
-    DescribeReservedInstancesModificationsResponse'
-    { _drimrsNextToken = Nothing
-    , _drimrsReservedInstancesModifications = Nothing
-    , _drimrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-drimrsNextToken :: Lens' DescribeReservedInstancesModificationsResponse (Maybe Text)
-drimrsNextToken = lens _drimrsNextToken (\ s a -> s{_drimrsNextToken = a});
-
--- | The Reserved Instance modification information.
-drimrsReservedInstancesModifications :: Lens' DescribeReservedInstancesModificationsResponse [ReservedInstancesModification]
-drimrsReservedInstancesModifications = lens _drimrsReservedInstancesModifications (\ s a -> s{_drimrsReservedInstancesModifications = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-drimrsResponseStatus :: Lens' DescribeReservedInstancesModificationsResponse Int
-drimrsResponseStatus = lens _drimrsResponseStatus (\ s a -> s{_drimrsResponseStatus = a});
-
-instance NFData
-         DescribeReservedInstancesModificationsResponse
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs b/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs
+++ /dev/null
@@ -1,309 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeReservedInstancesOfferings
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes Reserved Instance offerings that are available for purchase. With Reserved Instances, you purchase the right to launch instances for a period of time. During that time period, you do not receive insufficient capacity errors, and you pay a lower usage rate than the rate charged for On-Demand instances for the actual time used.
---
---
--- If you have listed your own Reserved Instances for sale in the Reserved Instance Marketplace, they will be excluded from these results. This is to ensure that you do not purchase your own Reserved Instances.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeReservedInstancesOfferings
-    (
-    -- * Creating a Request
-      describeReservedInstancesOfferings
-    , DescribeReservedInstancesOfferings
-    -- * Request Lenses
-    , drioMaxDuration
-    , drioProductDescription
-    , drioFilters
-    , drioIncludeMarketplace
-    , drioInstanceType
-    , drioNextToken
-    , drioMinDuration
-    , drioAvailabilityZone
-    , drioOfferingType
-    , drioReservedInstancesOfferingIds
-    , drioInstanceTenancy
-    , drioOfferingClass
-    , drioMaxInstanceCount
-    , drioDryRun
-    , drioMaxResults
-
-    -- * Destructuring the Response
-    , describeReservedInstancesOfferingsResponse
-    , DescribeReservedInstancesOfferingsResponse
-    -- * Response Lenses
-    , driorsNextToken
-    , driorsReservedInstancesOfferings
-    , driorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeReservedInstancesOfferings.
---
---
---
--- /See:/ 'describeReservedInstancesOfferings' smart constructor.
-data DescribeReservedInstancesOfferings = DescribeReservedInstancesOfferings'
-    { _drioMaxDuration                  :: !(Maybe Integer)
-    , _drioProductDescription           :: !(Maybe RIProductDescription)
-    , _drioFilters                      :: !(Maybe [Filter])
-    , _drioIncludeMarketplace           :: !(Maybe Bool)
-    , _drioInstanceType                 :: !(Maybe InstanceType)
-    , _drioNextToken                    :: !(Maybe Text)
-    , _drioMinDuration                  :: !(Maybe Integer)
-    , _drioAvailabilityZone             :: !(Maybe Text)
-    , _drioOfferingType                 :: !(Maybe OfferingTypeValues)
-    , _drioReservedInstancesOfferingIds :: !(Maybe [Text])
-    , _drioInstanceTenancy              :: !(Maybe Tenancy)
-    , _drioOfferingClass                :: !(Maybe OfferingClassType)
-    , _drioMaxInstanceCount             :: !(Maybe Int)
-    , _drioDryRun                       :: !(Maybe Bool)
-    , _drioMaxResults                   :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesOfferings' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drioMaxDuration' - The maximum duration (in seconds) to filter when searching for offerings. Default: 94608000 (3 years)
---
--- * 'drioProductDescription' - The Reserved Instance product platform description. Instances that include @(Amazon VPC)@ in the description are for use with Amazon VPC.
---
--- * 'drioFilters' - One or more filters.     * @availability-zone@ - The Availability Zone where the Reserved Instance can be used.     * @duration@ - The duration of the Reserved Instance (for example, one year or three years), in seconds (@31536000@ | @94608000@ ).     * @fixed-price@ - The purchase price of the Reserved Instance (for example, 9800.0).     * @instance-type@ - The instance type that is covered by the reservation.     * @marketplace@ - Set to @true@ to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both AWS and the Reserved Instance Marketplace are listed.     * @product-description@ - The Reserved Instance product platform description. Instances that include @(Amazon VPC)@ in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC. (@Linux/UNIX@ | @Linux/UNIX (Amazon VPC)@ | @SUSE Linux@ | @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ | @Red Hat Enterprise Linux (Amazon VPC)@ | @Windows@ | @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ | @Windows with SQL Server Standard (Amazon VPC)@ | @Windows with SQL Server Web@ | @Windows with SQL Server Web (Amazon VPC)@ | @Windows with SQL Server Enterprise@ | @Windows with SQL Server Enterprise (Amazon VPC)@ )      * @reserved-instances-offering-id@ - The Reserved Instances offering ID.     * @scope@ - The scope of the Reserved Instance (@Availability Zone@ or @Region@ ).     * @usage-price@ - The usage price of the Reserved Instance, per hour (for example, 0.84).
---
--- * 'drioIncludeMarketplace' - Include Reserved Instance Marketplace offerings in the response.
---
--- * 'drioInstanceType' - The instance type that the reservation will cover (for example, @m1.small@ ). For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'drioNextToken' - The token to retrieve the next page of results.
---
--- * 'drioMinDuration' - The minimum duration (in seconds) to filter when searching for offerings. Default: 2592000 (1 month)
---
--- * 'drioAvailabilityZone' - The Availability Zone in which the Reserved Instance can be used.
---
--- * 'drioOfferingType' - The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the @Medium Utilization@ Reserved Instance offering type.
---
--- * 'drioReservedInstancesOfferingIds' - One or more Reserved Instances offering IDs.
---
--- * 'drioInstanceTenancy' - The tenancy of the instances covered by the reservation. A Reserved Instance with a tenancy of @dedicated@ is applied to instances that run in a VPC on single-tenant hardware (i.e., Dedicated Instances). Default: @default@
---
--- * 'drioOfferingClass' - The offering class of the Reserved Instance. Can be @standard@ or @convertible@ .
---
--- * 'drioMaxInstanceCount' - The maximum number of instances to filter when searching for offerings. Default: 20
---
--- * 'drioDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'drioMaxResults' - The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. The maximum is 100. Default: 100
-describeReservedInstancesOfferings
-    :: DescribeReservedInstancesOfferings
-describeReservedInstancesOfferings =
-    DescribeReservedInstancesOfferings'
-    { _drioMaxDuration = Nothing
-    , _drioProductDescription = Nothing
-    , _drioFilters = Nothing
-    , _drioIncludeMarketplace = Nothing
-    , _drioInstanceType = Nothing
-    , _drioNextToken = Nothing
-    , _drioMinDuration = Nothing
-    , _drioAvailabilityZone = Nothing
-    , _drioOfferingType = Nothing
-    , _drioReservedInstancesOfferingIds = Nothing
-    , _drioInstanceTenancy = Nothing
-    , _drioOfferingClass = Nothing
-    , _drioMaxInstanceCount = Nothing
-    , _drioDryRun = Nothing
-    , _drioMaxResults = Nothing
-    }
-
--- | The maximum duration (in seconds) to filter when searching for offerings. Default: 94608000 (3 years)
-drioMaxDuration :: Lens' DescribeReservedInstancesOfferings (Maybe Integer)
-drioMaxDuration = lens _drioMaxDuration (\ s a -> s{_drioMaxDuration = a});
-
--- | The Reserved Instance product platform description. Instances that include @(Amazon VPC)@ in the description are for use with Amazon VPC.
-drioProductDescription :: Lens' DescribeReservedInstancesOfferings (Maybe RIProductDescription)
-drioProductDescription = lens _drioProductDescription (\ s a -> s{_drioProductDescription = a});
-
--- | One or more filters.     * @availability-zone@ - The Availability Zone where the Reserved Instance can be used.     * @duration@ - The duration of the Reserved Instance (for example, one year or three years), in seconds (@31536000@ | @94608000@ ).     * @fixed-price@ - The purchase price of the Reserved Instance (for example, 9800.0).     * @instance-type@ - The instance type that is covered by the reservation.     * @marketplace@ - Set to @true@ to show only Reserved Instance Marketplace offerings. When this filter is not used, which is the default behavior, all offerings from both AWS and the Reserved Instance Marketplace are listed.     * @product-description@ - The Reserved Instance product platform description. Instances that include @(Amazon VPC)@ in the product platform description will only be displayed to EC2-Classic account holders and are for use with Amazon VPC. (@Linux/UNIX@ | @Linux/UNIX (Amazon VPC)@ | @SUSE Linux@ | @SUSE Linux (Amazon VPC)@ | @Red Hat Enterprise Linux@ | @Red Hat Enterprise Linux (Amazon VPC)@ | @Windows@ | @Windows (Amazon VPC)@ | @Windows with SQL Server Standard@ | @Windows with SQL Server Standard (Amazon VPC)@ | @Windows with SQL Server Web@ | @Windows with SQL Server Web (Amazon VPC)@ | @Windows with SQL Server Enterprise@ | @Windows with SQL Server Enterprise (Amazon VPC)@ )      * @reserved-instances-offering-id@ - The Reserved Instances offering ID.     * @scope@ - The scope of the Reserved Instance (@Availability Zone@ or @Region@ ).     * @usage-price@ - The usage price of the Reserved Instance, per hour (for example, 0.84).
-drioFilters :: Lens' DescribeReservedInstancesOfferings [Filter]
-drioFilters = lens _drioFilters (\ s a -> s{_drioFilters = a}) . _Default . _Coerce;
-
--- | Include Reserved Instance Marketplace offerings in the response.
-drioIncludeMarketplace :: Lens' DescribeReservedInstancesOfferings (Maybe Bool)
-drioIncludeMarketplace = lens _drioIncludeMarketplace (\ s a -> s{_drioIncludeMarketplace = a});
-
--- | The instance type that the reservation will cover (for example, @m1.small@ ). For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> in the /Amazon Elastic Compute Cloud User Guide/ .
-drioInstanceType :: Lens' DescribeReservedInstancesOfferings (Maybe InstanceType)
-drioInstanceType = lens _drioInstanceType (\ s a -> s{_drioInstanceType = a});
-
--- | The token to retrieve the next page of results.
-drioNextToken :: Lens' DescribeReservedInstancesOfferings (Maybe Text)
-drioNextToken = lens _drioNextToken (\ s a -> s{_drioNextToken = a});
-
--- | The minimum duration (in seconds) to filter when searching for offerings. Default: 2592000 (1 month)
-drioMinDuration :: Lens' DescribeReservedInstancesOfferings (Maybe Integer)
-drioMinDuration = lens _drioMinDuration (\ s a -> s{_drioMinDuration = a});
-
--- | The Availability Zone in which the Reserved Instance can be used.
-drioAvailabilityZone :: Lens' DescribeReservedInstancesOfferings (Maybe Text)
-drioAvailabilityZone = lens _drioAvailabilityZone (\ s a -> s{_drioAvailabilityZone = a});
-
--- | The Reserved Instance offering type. If you are using tools that predate the 2011-11-01 API version, you only have access to the @Medium Utilization@ Reserved Instance offering type.
-drioOfferingType :: Lens' DescribeReservedInstancesOfferings (Maybe OfferingTypeValues)
-drioOfferingType = lens _drioOfferingType (\ s a -> s{_drioOfferingType = a});
-
--- | One or more Reserved Instances offering IDs.
-drioReservedInstancesOfferingIds :: Lens' DescribeReservedInstancesOfferings [Text]
-drioReservedInstancesOfferingIds = lens _drioReservedInstancesOfferingIds (\ s a -> s{_drioReservedInstancesOfferingIds = a}) . _Default . _Coerce;
-
--- | The tenancy of the instances covered by the reservation. A Reserved Instance with a tenancy of @dedicated@ is applied to instances that run in a VPC on single-tenant hardware (i.e., Dedicated Instances). Default: @default@
-drioInstanceTenancy :: Lens' DescribeReservedInstancesOfferings (Maybe Tenancy)
-drioInstanceTenancy = lens _drioInstanceTenancy (\ s a -> s{_drioInstanceTenancy = a});
-
--- | The offering class of the Reserved Instance. Can be @standard@ or @convertible@ .
-drioOfferingClass :: Lens' DescribeReservedInstancesOfferings (Maybe OfferingClassType)
-drioOfferingClass = lens _drioOfferingClass (\ s a -> s{_drioOfferingClass = a});
-
--- | The maximum number of instances to filter when searching for offerings. Default: 20
-drioMaxInstanceCount :: Lens' DescribeReservedInstancesOfferings (Maybe Int)
-drioMaxInstanceCount = lens _drioMaxInstanceCount (\ s a -> s{_drioMaxInstanceCount = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-drioDryRun :: Lens' DescribeReservedInstancesOfferings (Maybe Bool)
-drioDryRun = lens _drioDryRun (\ s a -> s{_drioDryRun = a});
-
--- | The maximum number of results to return for the request in a single page. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. The maximum is 100. Default: 100
-drioMaxResults :: Lens' DescribeReservedInstancesOfferings (Maybe Int)
-drioMaxResults = lens _drioMaxResults (\ s a -> s{_drioMaxResults = a});
-
-instance AWSPager DescribeReservedInstancesOfferings
-         where
-        page rq rs
-          | stop (rs ^. driorsNextToken) = Nothing
-          | stop (rs ^. driorsReservedInstancesOfferings) =
-            Nothing
-          | otherwise =
-            Just $ rq & drioNextToken .~ rs ^. driorsNextToken
-
-instance AWSRequest
-         DescribeReservedInstancesOfferings where
-        type Rs DescribeReservedInstancesOfferings =
-             DescribeReservedInstancesOfferingsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeReservedInstancesOfferingsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "reservedInstancesOfferingsSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeReservedInstancesOfferings
-
-instance NFData DescribeReservedInstancesOfferings
-
-instance ToHeaders DescribeReservedInstancesOfferings
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeReservedInstancesOfferings
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeReservedInstancesOfferings
-         where
-        toQuery DescribeReservedInstancesOfferings'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeReservedInstancesOfferings" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "MaxDuration" =: _drioMaxDuration,
-               "ProductDescription" =: _drioProductDescription,
-               toQuery (toQueryList "Filter" <$> _drioFilters),
-               "IncludeMarketplace" =: _drioIncludeMarketplace,
-               "InstanceType" =: _drioInstanceType,
-               "NextToken" =: _drioNextToken,
-               "MinDuration" =: _drioMinDuration,
-               "AvailabilityZone" =: _drioAvailabilityZone,
-               "OfferingType" =: _drioOfferingType,
-               toQuery
-                 (toQueryList "ReservedInstancesOfferingId" <$>
-                    _drioReservedInstancesOfferingIds),
-               "InstanceTenancy" =: _drioInstanceTenancy,
-               "OfferingClass" =: _drioOfferingClass,
-               "MaxInstanceCount" =: _drioMaxInstanceCount,
-               "DryRun" =: _drioDryRun,
-               "MaxResults" =: _drioMaxResults]
-
--- | Contains the output of DescribeReservedInstancesOfferings.
---
---
---
--- /See:/ 'describeReservedInstancesOfferingsResponse' smart constructor.
-data DescribeReservedInstancesOfferingsResponse = DescribeReservedInstancesOfferingsResponse'
-    { _driorsNextToken                  :: !(Maybe Text)
-    , _driorsReservedInstancesOfferings :: !(Maybe [ReservedInstancesOffering])
-    , _driorsResponseStatus             :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeReservedInstancesOfferingsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'driorsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'driorsReservedInstancesOfferings' - A list of Reserved Instances offerings.
---
--- * 'driorsResponseStatus' - -- | The response status code.
-describeReservedInstancesOfferingsResponse
-    :: Int -- ^ 'driorsResponseStatus'
-    -> DescribeReservedInstancesOfferingsResponse
-describeReservedInstancesOfferingsResponse pResponseStatus_ =
-    DescribeReservedInstancesOfferingsResponse'
-    { _driorsNextToken = Nothing
-    , _driorsReservedInstancesOfferings = Nothing
-    , _driorsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-driorsNextToken :: Lens' DescribeReservedInstancesOfferingsResponse (Maybe Text)
-driorsNextToken = lens _driorsNextToken (\ s a -> s{_driorsNextToken = a});
-
--- | A list of Reserved Instances offerings.
-driorsReservedInstancesOfferings :: Lens' DescribeReservedInstancesOfferingsResponse [ReservedInstancesOffering]
-driorsReservedInstancesOfferings = lens _driorsReservedInstancesOfferings (\ s a -> s{_driorsReservedInstancesOfferings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-driorsResponseStatus :: Lens' DescribeReservedInstancesOfferingsResponse Int
-driorsResponseStatus = lens _driorsResponseStatus (\ s a -> s{_driorsResponseStatus = a});
-
-instance NFData
-         DescribeReservedInstancesOfferingsResponse
diff --git a/gen/Network/AWS/EC2/DescribeRouteTables.hs b/gen/Network/AWS/EC2/DescribeRouteTables.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeRouteTables.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeRouteTables
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your route tables.
---
---
--- Each subnet in your VPC must be associated with a route table. If a subnet is not explicitly associated with any route table, it is implicitly associated with the main route table. This command does not return the subnet ID for implicit associations.
---
--- For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeRouteTables
-    (
-    -- * Creating a Request
-      describeRouteTables
-    , DescribeRouteTables
-    -- * Request Lenses
-    , drtsFilters
-    , drtsDryRun
-    , drtsRouteTableIds
-
-    -- * Destructuring the Response
-    , describeRouteTablesResponse
-    , DescribeRouteTablesResponse
-    -- * Response Lenses
-    , drtrsRouteTables
-    , drtrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeRouteTables.
---
---
---
--- /See:/ 'describeRouteTables' smart constructor.
-data DescribeRouteTables = DescribeRouteTables'
-    { _drtsFilters       :: !(Maybe [Filter])
-    , _drtsDryRun        :: !(Maybe Bool)
-    , _drtsRouteTableIds :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeRouteTables' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drtsFilters' - One or more filters.     * @association.route-table-association-id@ - The ID of an association ID for the route table.     * @association.route-table-id@ - The ID of the route table involved in the association.     * @association.subnet-id@ - The ID of the subnet involved in the association.     * @association.main@ - Indicates whether the route table is the main route table for the VPC (@true@ | @false@ ).     * @route-table-id@ - The ID of the route table.     * @route.destination-cidr-block@ - The IPv4 CIDR range specified in a route in the table.     * @route.destination-ipv6-cidr-block@ - The IPv6 CIDR range specified in a route in the route table.     * @route.destination-prefix-list-id@ - The ID (prefix) of the AWS service specified in a route in the table.     * @route.egress-only-internet-gateway-id@ - The ID of an egress-only Internet gateway specified in a route in the route table.     * @route.gateway-id@ - The ID of a gateway specified in a route in the table.     * @route.instance-id@ - The ID of an instance specified in a route in the table.     * @route.nat-gateway-id@ - The ID of a NAT gateway.     * @route.origin@ - Describes how the route was created. @CreateRouteTable@ indicates that the route was automatically created when the route table was created; @CreateRoute@ indicates that the route was manually added to the route table; @EnableVgwRoutePropagation@ indicates that the route was propagated by route propagation.     * @route.state@ - The state of a route in the route table (@active@ | @blackhole@ ). The blackhole state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, the specified NAT instance has been terminated, and so on).     * @route.vpc-peering-connection-id@ - The ID of a VPC peering connection specified in a route in the table.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the route table.
---
--- * 'drtsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'drtsRouteTableIds' - One or more route table IDs. Default: Describes all your route tables.
-describeRouteTables
-    :: DescribeRouteTables
-describeRouteTables =
-    DescribeRouteTables'
-    { _drtsFilters = Nothing
-    , _drtsDryRun = Nothing
-    , _drtsRouteTableIds = Nothing
-    }
-
--- | One or more filters.     * @association.route-table-association-id@ - The ID of an association ID for the route table.     * @association.route-table-id@ - The ID of the route table involved in the association.     * @association.subnet-id@ - The ID of the subnet involved in the association.     * @association.main@ - Indicates whether the route table is the main route table for the VPC (@true@ | @false@ ).     * @route-table-id@ - The ID of the route table.     * @route.destination-cidr-block@ - The IPv4 CIDR range specified in a route in the table.     * @route.destination-ipv6-cidr-block@ - The IPv6 CIDR range specified in a route in the route table.     * @route.destination-prefix-list-id@ - The ID (prefix) of the AWS service specified in a route in the table.     * @route.egress-only-internet-gateway-id@ - The ID of an egress-only Internet gateway specified in a route in the route table.     * @route.gateway-id@ - The ID of a gateway specified in a route in the table.     * @route.instance-id@ - The ID of an instance specified in a route in the table.     * @route.nat-gateway-id@ - The ID of a NAT gateway.     * @route.origin@ - Describes how the route was created. @CreateRouteTable@ indicates that the route was automatically created when the route table was created; @CreateRoute@ indicates that the route was manually added to the route table; @EnableVgwRoutePropagation@ indicates that the route was propagated by route propagation.     * @route.state@ - The state of a route in the route table (@active@ | @blackhole@ ). The blackhole state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, the specified NAT instance has been terminated, and so on).     * @route.vpc-peering-connection-id@ - The ID of a VPC peering connection specified in a route in the table.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the route table.
-drtsFilters :: Lens' DescribeRouteTables [Filter]
-drtsFilters = lens _drtsFilters (\ s a -> s{_drtsFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-drtsDryRun :: Lens' DescribeRouteTables (Maybe Bool)
-drtsDryRun = lens _drtsDryRun (\ s a -> s{_drtsDryRun = a});
-
--- | One or more route table IDs. Default: Describes all your route tables.
-drtsRouteTableIds :: Lens' DescribeRouteTables [Text]
-drtsRouteTableIds = lens _drtsRouteTableIds (\ s a -> s{_drtsRouteTableIds = a}) . _Default . _Coerce;
-
-instance AWSRequest DescribeRouteTables where
-        type Rs DescribeRouteTables =
-             DescribeRouteTablesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeRouteTablesResponse' <$>
-                   (x .@? "routeTableSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeRouteTables
-
-instance NFData DescribeRouteTables
-
-instance ToHeaders DescribeRouteTables where
-        toHeaders = const mempty
-
-instance ToPath DescribeRouteTables where
-        toPath = const "/"
-
-instance ToQuery DescribeRouteTables where
-        toQuery DescribeRouteTables'{..}
-          = mconcat
-              ["Action" =: ("DescribeRouteTables" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _drtsFilters),
-               "DryRun" =: _drtsDryRun,
-               toQuery
-                 (toQueryList "RouteTableId" <$> _drtsRouteTableIds)]
-
--- | Contains the output of DescribeRouteTables.
---
---
---
--- /See:/ 'describeRouteTablesResponse' smart constructor.
-data DescribeRouteTablesResponse = DescribeRouteTablesResponse'
-    { _drtrsRouteTables    :: !(Maybe [RouteTable])
-    , _drtrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeRouteTablesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drtrsRouteTables' - Information about one or more route tables.
---
--- * 'drtrsResponseStatus' - -- | The response status code.
-describeRouteTablesResponse
-    :: Int -- ^ 'drtrsResponseStatus'
-    -> DescribeRouteTablesResponse
-describeRouteTablesResponse pResponseStatus_ =
-    DescribeRouteTablesResponse'
-    { _drtrsRouteTables = Nothing
-    , _drtrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more route tables.
-drtrsRouteTables :: Lens' DescribeRouteTablesResponse [RouteTable]
-drtrsRouteTables = lens _drtrsRouteTables (\ s a -> s{_drtrsRouteTables = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-drtrsResponseStatus :: Lens' DescribeRouteTablesResponse Int
-drtrsResponseStatus = lens _drtrsResponseStatus (\ s a -> s{_drtrsResponseStatus = a});
-
-instance NFData DescribeRouteTablesResponse
diff --git a/gen/Network/AWS/EC2/DescribeScheduledInstanceAvailability.hs b/gen/Network/AWS/EC2/DescribeScheduledInstanceAvailability.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeScheduledInstanceAvailability.hs
+++ /dev/null
@@ -1,232 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeScheduledInstanceAvailability
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Finds available schedules that meet the specified criteria.
---
---
--- You can search for an available schedule no more than 3 months in advance. You must meet the minimum required duration of 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.
---
--- After you find a schedule that meets your needs, call 'PurchaseScheduledInstances' to purchase Scheduled Instances with that schedule.
---
-module Network.AWS.EC2.DescribeScheduledInstanceAvailability
-    (
-    -- * Creating a Request
-      describeScheduledInstanceAvailability
-    , DescribeScheduledInstanceAvailability
-    -- * Request Lenses
-    , dsiaMinSlotDurationInHours
-    , dsiaFilters
-    , dsiaNextToken
-    , dsiaMaxSlotDurationInHours
-    , dsiaDryRun
-    , dsiaMaxResults
-    , dsiaRecurrence
-    , dsiaFirstSlotStartTimeRange
-
-    -- * Destructuring the Response
-    , describeScheduledInstanceAvailabilityResponse
-    , DescribeScheduledInstanceAvailabilityResponse
-    -- * Response Lenses
-    , dsiarsScheduledInstanceAvailabilitySet
-    , dsiarsNextToken
-    , dsiarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeScheduledInstanceAvailability.
---
---
---
--- /See:/ 'describeScheduledInstanceAvailability' smart constructor.
-data DescribeScheduledInstanceAvailability = DescribeScheduledInstanceAvailability'
-    { _dsiaMinSlotDurationInHours  :: !(Maybe Int)
-    , _dsiaFilters                 :: !(Maybe [Filter])
-    , _dsiaNextToken               :: !(Maybe Text)
-    , _dsiaMaxSlotDurationInHours  :: !(Maybe Int)
-    , _dsiaDryRun                  :: !(Maybe Bool)
-    , _dsiaMaxResults              :: !(Maybe Int)
-    , _dsiaRecurrence              :: !ScheduledInstanceRecurrenceRequest
-    , _dsiaFirstSlotStartTimeRange :: !SlotDateTimeRangeRequest
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeScheduledInstanceAvailability' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsiaMinSlotDurationInHours' - The minimum available duration, in hours. The minimum required duration is 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.
---
--- * 'dsiaFilters' - One or more filters.     * @availability-zone@ - The Availability Zone (for example, @us-west-2a@ ).     * @instance-type@ - The instance type (for example, @c4.large@ ).     * @network-platform@ - The network platform (@EC2-Classic@ or @EC2-VPC@ ).     * @platform@ - The platform (@Linux/UNIX@ or @Windows@ ).
---
--- * 'dsiaNextToken' - The token for the next set of results.
---
--- * 'dsiaMaxSlotDurationInHours' - The maximum available duration, in hours. This value must be greater than @MinSlotDurationInHours@ and less than 1,720.
---
--- * 'dsiaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsiaMaxResults' - The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 300. To retrieve the remaining results, make another call with the returned @NextToken@ value.
---
--- * 'dsiaRecurrence' - The schedule recurrence.
---
--- * 'dsiaFirstSlotStartTimeRange' - The time period for the first schedule to start.
-describeScheduledInstanceAvailability
-    :: ScheduledInstanceRecurrenceRequest -- ^ 'dsiaRecurrence'
-    -> SlotDateTimeRangeRequest -- ^ 'dsiaFirstSlotStartTimeRange'
-    -> DescribeScheduledInstanceAvailability
-describeScheduledInstanceAvailability pRecurrence_ pFirstSlotStartTimeRange_ =
-    DescribeScheduledInstanceAvailability'
-    { _dsiaMinSlotDurationInHours = Nothing
-    , _dsiaFilters = Nothing
-    , _dsiaNextToken = Nothing
-    , _dsiaMaxSlotDurationInHours = Nothing
-    , _dsiaDryRun = Nothing
-    , _dsiaMaxResults = Nothing
-    , _dsiaRecurrence = pRecurrence_
-    , _dsiaFirstSlotStartTimeRange = pFirstSlotStartTimeRange_
-    }
-
--- | The minimum available duration, in hours. The minimum required duration is 1,200 hours per year. For example, the minimum daily schedule is 4 hours, the minimum weekly schedule is 24 hours, and the minimum monthly schedule is 100 hours.
-dsiaMinSlotDurationInHours :: Lens' DescribeScheduledInstanceAvailability (Maybe Int)
-dsiaMinSlotDurationInHours = lens _dsiaMinSlotDurationInHours (\ s a -> s{_dsiaMinSlotDurationInHours = a});
-
--- | One or more filters.     * @availability-zone@ - The Availability Zone (for example, @us-west-2a@ ).     * @instance-type@ - The instance type (for example, @c4.large@ ).     * @network-platform@ - The network platform (@EC2-Classic@ or @EC2-VPC@ ).     * @platform@ - The platform (@Linux/UNIX@ or @Windows@ ).
-dsiaFilters :: Lens' DescribeScheduledInstanceAvailability [Filter]
-dsiaFilters = lens _dsiaFilters (\ s a -> s{_dsiaFilters = a}) . _Default . _Coerce;
-
--- | The token for the next set of results.
-dsiaNextToken :: Lens' DescribeScheduledInstanceAvailability (Maybe Text)
-dsiaNextToken = lens _dsiaNextToken (\ s a -> s{_dsiaNextToken = a});
-
--- | The maximum available duration, in hours. This value must be greater than @MinSlotDurationInHours@ and less than 1,720.
-dsiaMaxSlotDurationInHours :: Lens' DescribeScheduledInstanceAvailability (Maybe Int)
-dsiaMaxSlotDurationInHours = lens _dsiaMaxSlotDurationInHours (\ s a -> s{_dsiaMaxSlotDurationInHours = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsiaDryRun :: Lens' DescribeScheduledInstanceAvailability (Maybe Bool)
-dsiaDryRun = lens _dsiaDryRun (\ s a -> s{_dsiaDryRun = a});
-
--- | The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 300. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dsiaMaxResults :: Lens' DescribeScheduledInstanceAvailability (Maybe Int)
-dsiaMaxResults = lens _dsiaMaxResults (\ s a -> s{_dsiaMaxResults = a});
-
--- | The schedule recurrence.
-dsiaRecurrence :: Lens' DescribeScheduledInstanceAvailability ScheduledInstanceRecurrenceRequest
-dsiaRecurrence = lens _dsiaRecurrence (\ s a -> s{_dsiaRecurrence = a});
-
--- | The time period for the first schedule to start.
-dsiaFirstSlotStartTimeRange :: Lens' DescribeScheduledInstanceAvailability SlotDateTimeRangeRequest
-dsiaFirstSlotStartTimeRange = lens _dsiaFirstSlotStartTimeRange (\ s a -> s{_dsiaFirstSlotStartTimeRange = a});
-
-instance AWSRequest
-         DescribeScheduledInstanceAvailability where
-        type Rs DescribeScheduledInstanceAvailability =
-             DescribeScheduledInstanceAvailabilityResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeScheduledInstanceAvailabilityResponse' <$>
-                   (x .@? "scheduledInstanceAvailabilitySet" .!@ mempty
-                      >>= may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable
-         DescribeScheduledInstanceAvailability
-
-instance NFData DescribeScheduledInstanceAvailability
-
-instance ToHeaders
-         DescribeScheduledInstanceAvailability where
-        toHeaders = const mempty
-
-instance ToPath DescribeScheduledInstanceAvailability
-         where
-        toPath = const "/"
-
-instance ToQuery
-         DescribeScheduledInstanceAvailability where
-        toQuery DescribeScheduledInstanceAvailability'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeScheduledInstanceAvailability" ::
-                    ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "MinSlotDurationInHours" =:
-                 _dsiaMinSlotDurationInHours,
-               toQuery (toQueryList "Filter" <$> _dsiaFilters),
-               "NextToken" =: _dsiaNextToken,
-               "MaxSlotDurationInHours" =:
-                 _dsiaMaxSlotDurationInHours,
-               "DryRun" =: _dsiaDryRun,
-               "MaxResults" =: _dsiaMaxResults,
-               "Recurrence" =: _dsiaRecurrence,
-               "FirstSlotStartTimeRange" =:
-                 _dsiaFirstSlotStartTimeRange]
-
--- | Contains the output of DescribeScheduledInstanceAvailability.
---
---
---
--- /See:/ 'describeScheduledInstanceAvailabilityResponse' smart constructor.
-data DescribeScheduledInstanceAvailabilityResponse = DescribeScheduledInstanceAvailabilityResponse'
-    { _dsiarsScheduledInstanceAvailabilitySet :: !(Maybe [ScheduledInstanceAvailability])
-    , _dsiarsNextToken                        :: !(Maybe Text)
-    , _dsiarsResponseStatus                   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeScheduledInstanceAvailabilityResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsiarsScheduledInstanceAvailabilitySet' - Information about the available Scheduled Instances.
---
--- * 'dsiarsNextToken' - The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
---
--- * 'dsiarsResponseStatus' - -- | The response status code.
-describeScheduledInstanceAvailabilityResponse
-    :: Int -- ^ 'dsiarsResponseStatus'
-    -> DescribeScheduledInstanceAvailabilityResponse
-describeScheduledInstanceAvailabilityResponse pResponseStatus_ =
-    DescribeScheduledInstanceAvailabilityResponse'
-    { _dsiarsScheduledInstanceAvailabilitySet = Nothing
-    , _dsiarsNextToken = Nothing
-    , _dsiarsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the available Scheduled Instances.
-dsiarsScheduledInstanceAvailabilitySet :: Lens' DescribeScheduledInstanceAvailabilityResponse [ScheduledInstanceAvailability]
-dsiarsScheduledInstanceAvailabilitySet = lens _dsiarsScheduledInstanceAvailabilitySet (\ s a -> s{_dsiarsScheduledInstanceAvailabilitySet = a}) . _Default . _Coerce;
-
--- | The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
-dsiarsNextToken :: Lens' DescribeScheduledInstanceAvailabilityResponse (Maybe Text)
-dsiarsNextToken = lens _dsiarsNextToken (\ s a -> s{_dsiarsNextToken = a});
-
--- | -- | The response status code.
-dsiarsResponseStatus :: Lens' DescribeScheduledInstanceAvailabilityResponse Int
-dsiarsResponseStatus = lens _dsiarsResponseStatus (\ s a -> s{_dsiarsResponseStatus = a});
-
-instance NFData
-         DescribeScheduledInstanceAvailabilityResponse
diff --git a/gen/Network/AWS/EC2/DescribeScheduledInstances.hs b/gen/Network/AWS/EC2/DescribeScheduledInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeScheduledInstances.hs
+++ /dev/null
@@ -1,198 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeScheduledInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your Scheduled Instances.
---
---
-module Network.AWS.EC2.DescribeScheduledInstances
-    (
-    -- * Creating a Request
-      describeScheduledInstances
-    , DescribeScheduledInstances
-    -- * Request Lenses
-    , dsiFilters
-    , dsiSlotStartTimeRange
-    , dsiNextToken
-    , dsiScheduledInstanceIds
-    , dsiDryRun
-    , dsiMaxResults
-
-    -- * Destructuring the Response
-    , describeScheduledInstancesResponse
-    , DescribeScheduledInstancesResponse
-    -- * Response Lenses
-    , dsirsNextToken
-    , dsirsScheduledInstanceSet
-    , dsirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeScheduledInstances.
---
---
---
--- /See:/ 'describeScheduledInstances' smart constructor.
-data DescribeScheduledInstances = DescribeScheduledInstances'
-    { _dsiFilters              :: !(Maybe [Filter])
-    , _dsiSlotStartTimeRange   :: !(Maybe SlotStartTimeRangeRequest)
-    , _dsiNextToken            :: !(Maybe Text)
-    , _dsiScheduledInstanceIds :: !(Maybe [Text])
-    , _dsiDryRun               :: !(Maybe Bool)
-    , _dsiMaxResults           :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeScheduledInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsiFilters' - One or more filters.     * @availability-zone@ - The Availability Zone (for example, @us-west-2a@ ).     * @instance-type@ - The instance type (for example, @c4.large@ ).     * @network-platform@ - The network platform (@EC2-Classic@ or @EC2-VPC@ ).     * @platform@ - The platform (@Linux/UNIX@ or @Windows@ ).
---
--- * 'dsiSlotStartTimeRange' - The time period for the first schedule to start.
---
--- * 'dsiNextToken' - The token for the next set of results.
---
--- * 'dsiScheduledInstanceIds' - One or more Scheduled Instance IDs.
---
--- * 'dsiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsiMaxResults' - The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 100. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-describeScheduledInstances
-    :: DescribeScheduledInstances
-describeScheduledInstances =
-    DescribeScheduledInstances'
-    { _dsiFilters = Nothing
-    , _dsiSlotStartTimeRange = Nothing
-    , _dsiNextToken = Nothing
-    , _dsiScheduledInstanceIds = Nothing
-    , _dsiDryRun = Nothing
-    , _dsiMaxResults = Nothing
-    }
-
--- | One or more filters.     * @availability-zone@ - The Availability Zone (for example, @us-west-2a@ ).     * @instance-type@ - The instance type (for example, @c4.large@ ).     * @network-platform@ - The network platform (@EC2-Classic@ or @EC2-VPC@ ).     * @platform@ - The platform (@Linux/UNIX@ or @Windows@ ).
-dsiFilters :: Lens' DescribeScheduledInstances [Filter]
-dsiFilters = lens _dsiFilters (\ s a -> s{_dsiFilters = a}) . _Default . _Coerce;
-
--- | The time period for the first schedule to start.
-dsiSlotStartTimeRange :: Lens' DescribeScheduledInstances (Maybe SlotStartTimeRangeRequest)
-dsiSlotStartTimeRange = lens _dsiSlotStartTimeRange (\ s a -> s{_dsiSlotStartTimeRange = a});
-
--- | The token for the next set of results.
-dsiNextToken :: Lens' DescribeScheduledInstances (Maybe Text)
-dsiNextToken = lens _dsiNextToken (\ s a -> s{_dsiNextToken = a});
-
--- | One or more Scheduled Instance IDs.
-dsiScheduledInstanceIds :: Lens' DescribeScheduledInstances [Text]
-dsiScheduledInstanceIds = lens _dsiScheduledInstanceIds (\ s a -> s{_dsiScheduledInstanceIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsiDryRun :: Lens' DescribeScheduledInstances (Maybe Bool)
-dsiDryRun = lens _dsiDryRun (\ s a -> s{_dsiDryRun = a});
-
--- | The maximum number of results to return in a single call. This value can be between 5 and 300. The default value is 100. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dsiMaxResults :: Lens' DescribeScheduledInstances (Maybe Int)
-dsiMaxResults = lens _dsiMaxResults (\ s a -> s{_dsiMaxResults = a});
-
-instance AWSRequest DescribeScheduledInstances where
-        type Rs DescribeScheduledInstances =
-             DescribeScheduledInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeScheduledInstancesResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "scheduledInstanceSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeScheduledInstances
-
-instance NFData DescribeScheduledInstances
-
-instance ToHeaders DescribeScheduledInstances where
-        toHeaders = const mempty
-
-instance ToPath DescribeScheduledInstances where
-        toPath = const "/"
-
-instance ToQuery DescribeScheduledInstances where
-        toQuery DescribeScheduledInstances'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeScheduledInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dsiFilters),
-               "SlotStartTimeRange" =: _dsiSlotStartTimeRange,
-               "NextToken" =: _dsiNextToken,
-               toQuery
-                 (toQueryList "ScheduledInstanceId" <$>
-                    _dsiScheduledInstanceIds),
-               "DryRun" =: _dsiDryRun,
-               "MaxResults" =: _dsiMaxResults]
-
--- | Contains the output of DescribeScheduledInstances.
---
---
---
--- /See:/ 'describeScheduledInstancesResponse' smart constructor.
-data DescribeScheduledInstancesResponse = DescribeScheduledInstancesResponse'
-    { _dsirsNextToken            :: !(Maybe Text)
-    , _dsirsScheduledInstanceSet :: !(Maybe [ScheduledInstance])
-    , _dsirsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeScheduledInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsirsNextToken' - The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
---
--- * 'dsirsScheduledInstanceSet' - Information about the Scheduled Instances.
---
--- * 'dsirsResponseStatus' - -- | The response status code.
-describeScheduledInstancesResponse
-    :: Int -- ^ 'dsirsResponseStatus'
-    -> DescribeScheduledInstancesResponse
-describeScheduledInstancesResponse pResponseStatus_ =
-    DescribeScheduledInstancesResponse'
-    { _dsirsNextToken = Nothing
-    , _dsirsScheduledInstanceSet = Nothing
-    , _dsirsResponseStatus = pResponseStatus_
-    }
-
--- | The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
-dsirsNextToken :: Lens' DescribeScheduledInstancesResponse (Maybe Text)
-dsirsNextToken = lens _dsirsNextToken (\ s a -> s{_dsirsNextToken = a});
-
--- | Information about the Scheduled Instances.
-dsirsScheduledInstanceSet :: Lens' DescribeScheduledInstancesResponse [ScheduledInstance]
-dsirsScheduledInstanceSet = lens _dsirsScheduledInstanceSet (\ s a -> s{_dsirsScheduledInstanceSet = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dsirsResponseStatus :: Lens' DescribeScheduledInstancesResponse Int
-dsirsResponseStatus = lens _dsirsResponseStatus (\ s a -> s{_dsirsResponseStatus = a});
-
-instance NFData DescribeScheduledInstancesResponse
diff --git a/gen/Network/AWS/EC2/DescribeSecurityGroupReferences.hs b/gen/Network/AWS/EC2/DescribeSecurityGroupReferences.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSecurityGroupReferences.hs
+++ /dev/null
@@ -1,142 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSecurityGroupReferences
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- [EC2-VPC only] Describes the VPCs on the other side of a VPC peering connection that are referencing the security groups you've specified in this request.
---
---
-module Network.AWS.EC2.DescribeSecurityGroupReferences
-    (
-    -- * Creating a Request
-      describeSecurityGroupReferences
-    , DescribeSecurityGroupReferences
-    -- * Request Lenses
-    , dsgrDryRun
-    , dsgrGroupId
-
-    -- * Destructuring the Response
-    , describeSecurityGroupReferencesResponse
-    , DescribeSecurityGroupReferencesResponse
-    -- * Response Lenses
-    , dsgrrsSecurityGroupReferenceSet
-    , dsgrrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'describeSecurityGroupReferences' smart constructor.
-data DescribeSecurityGroupReferences = DescribeSecurityGroupReferences'
-    { _dsgrDryRun  :: !(Maybe Bool)
-    , _dsgrGroupId :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSecurityGroupReferences' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgrDryRun' - Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.
---
--- * 'dsgrGroupId' - One or more security group IDs in your account.
-describeSecurityGroupReferences
-    :: DescribeSecurityGroupReferences
-describeSecurityGroupReferences =
-    DescribeSecurityGroupReferences'
-    { _dsgrDryRun = Nothing
-    , _dsgrGroupId = mempty
-    }
-
--- | Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.
-dsgrDryRun :: Lens' DescribeSecurityGroupReferences (Maybe Bool)
-dsgrDryRun = lens _dsgrDryRun (\ s a -> s{_dsgrDryRun = a});
-
--- | One or more security group IDs in your account.
-dsgrGroupId :: Lens' DescribeSecurityGroupReferences [Text]
-dsgrGroupId = lens _dsgrGroupId (\ s a -> s{_dsgrGroupId = a}) . _Coerce;
-
-instance AWSRequest DescribeSecurityGroupReferences
-         where
-        type Rs DescribeSecurityGroupReferences =
-             DescribeSecurityGroupReferencesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSecurityGroupReferencesResponse' <$>
-                   (x .@? "securityGroupReferenceSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSecurityGroupReferences
-
-instance NFData DescribeSecurityGroupReferences
-
-instance ToHeaders DescribeSecurityGroupReferences
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeSecurityGroupReferences where
-        toPath = const "/"
-
-instance ToQuery DescribeSecurityGroupReferences
-         where
-        toQuery DescribeSecurityGroupReferences'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSecurityGroupReferences" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dsgrDryRun,
-               toQueryList "GroupId" _dsgrGroupId]
-
--- | /See:/ 'describeSecurityGroupReferencesResponse' smart constructor.
-data DescribeSecurityGroupReferencesResponse = DescribeSecurityGroupReferencesResponse'
-    { _dsgrrsSecurityGroupReferenceSet :: !(Maybe [SecurityGroupReference])
-    , _dsgrrsResponseStatus            :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSecurityGroupReferencesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgrrsSecurityGroupReferenceSet' - Information about the VPCs with the referencing security groups.
---
--- * 'dsgrrsResponseStatus' - -- | The response status code.
-describeSecurityGroupReferencesResponse
-    :: Int -- ^ 'dsgrrsResponseStatus'
-    -> DescribeSecurityGroupReferencesResponse
-describeSecurityGroupReferencesResponse pResponseStatus_ =
-    DescribeSecurityGroupReferencesResponse'
-    { _dsgrrsSecurityGroupReferenceSet = Nothing
-    , _dsgrrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPCs with the referencing security groups.
-dsgrrsSecurityGroupReferenceSet :: Lens' DescribeSecurityGroupReferencesResponse [SecurityGroupReference]
-dsgrrsSecurityGroupReferenceSet = lens _dsgrrsSecurityGroupReferenceSet (\ s a -> s{_dsgrrsSecurityGroupReferenceSet = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dsgrrsResponseStatus :: Lens' DescribeSecurityGroupReferencesResponse Int
-dsgrrsResponseStatus = lens _dsgrrsResponseStatus (\ s a -> s{_dsgrrsResponseStatus = a});
-
-instance NFData
-         DescribeSecurityGroupReferencesResponse
diff --git a/gen/Network/AWS/EC2/DescribeSecurityGroups.hs b/gen/Network/AWS/EC2/DescribeSecurityGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSecurityGroups.hs
+++ /dev/null
@@ -1,169 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSecurityGroups
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your security groups.
---
---
--- A security group is for use with instances either in the EC2-Classic platform or in a specific VPC. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Amazon EC2 Security Groups> in the /Amazon Elastic Compute Cloud User Guide/ and <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security Groups for Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeSecurityGroups
-    (
-    -- * Creating a Request
-      describeSecurityGroups
-    , DescribeSecurityGroups
-    -- * Request Lenses
-    , dsgsFilters
-    , dsgsGroupNames
-    , dsgsGroupIds
-    , dsgsDryRun
-
-    -- * Destructuring the Response
-    , describeSecurityGroupsResponse
-    , DescribeSecurityGroupsResponse
-    -- * Response Lenses
-    , dsgrsSecurityGroups
-    , dsgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSecurityGroups.
---
---
---
--- /See:/ 'describeSecurityGroups' smart constructor.
-data DescribeSecurityGroups = DescribeSecurityGroups'
-    { _dsgsFilters    :: !(Maybe [Filter])
-    , _dsgsGroupNames :: !(Maybe [Text])
-    , _dsgsGroupIds   :: !(Maybe [Text])
-    , _dsgsDryRun     :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSecurityGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgsFilters' - One or more filters. If using multiple filters for rules, the results include security groups for which any combination of rules - not necessarily a single rule - match all filters.     * @description@ - The description of the security group.     * @egress.ip-permission.prefix-list-id@ - The ID (prefix) of the AWS service to which the security group allows access.     * @group-id@ - The ID of the security group.      * @group-name@ - The name of the security group.     * @ip-permission.cidr@ - An IPv4 CIDR range that has been granted permission in a security group rule.     * @ip-permission.from-port@ - The start of port range for the TCP and UDP protocols, or an ICMP type number.     * @ip-permission.group-id@ - The ID of a security group that has been granted permission.     * @ip-permission.group-name@ - The name of a security group that has been granted permission.     * @ip-permission.ipv6-cidr@ - An IPv6 CIDR range that has been granted permission in a security group rule.     * @ip-permission.protocol@ - The IP protocol for the permission (@tcp@ | @udp@ | @icmp@ or a protocol number).     * @ip-permission.to-port@ - The end of port range for the TCP and UDP protocols, or an ICMP code.     * @ip-permission.user-id@ - The ID of an AWS account that has been granted permission.     * @owner-id@ - The AWS account ID of the owner of the security group.     * @tag-key@ - The key of a tag assigned to the security group.     * @tag-value@ - The value of a tag assigned to the security group.     * @vpc-id@ - The ID of the VPC specified when the security group was created.
---
--- * 'dsgsGroupNames' - [EC2-Classic and default VPC only] One or more security group names. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, use the @group-name@ filter to describe security groups by name. Default: Describes all your security groups.
---
--- * 'dsgsGroupIds' - One or more security group IDs. Required for security groups in a nondefault VPC. Default: Describes all your security groups.
---
--- * 'dsgsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeSecurityGroups
-    :: DescribeSecurityGroups
-describeSecurityGroups =
-    DescribeSecurityGroups'
-    { _dsgsFilters = Nothing
-    , _dsgsGroupNames = Nothing
-    , _dsgsGroupIds = Nothing
-    , _dsgsDryRun = Nothing
-    }
-
--- | One or more filters. If using multiple filters for rules, the results include security groups for which any combination of rules - not necessarily a single rule - match all filters.     * @description@ - The description of the security group.     * @egress.ip-permission.prefix-list-id@ - The ID (prefix) of the AWS service to which the security group allows access.     * @group-id@ - The ID of the security group.      * @group-name@ - The name of the security group.     * @ip-permission.cidr@ - An IPv4 CIDR range that has been granted permission in a security group rule.     * @ip-permission.from-port@ - The start of port range for the TCP and UDP protocols, or an ICMP type number.     * @ip-permission.group-id@ - The ID of a security group that has been granted permission.     * @ip-permission.group-name@ - The name of a security group that has been granted permission.     * @ip-permission.ipv6-cidr@ - An IPv6 CIDR range that has been granted permission in a security group rule.     * @ip-permission.protocol@ - The IP protocol for the permission (@tcp@ | @udp@ | @icmp@ or a protocol number).     * @ip-permission.to-port@ - The end of port range for the TCP and UDP protocols, or an ICMP code.     * @ip-permission.user-id@ - The ID of an AWS account that has been granted permission.     * @owner-id@ - The AWS account ID of the owner of the security group.     * @tag-key@ - The key of a tag assigned to the security group.     * @tag-value@ - The value of a tag assigned to the security group.     * @vpc-id@ - The ID of the VPC specified when the security group was created.
-dsgsFilters :: Lens' DescribeSecurityGroups [Filter]
-dsgsFilters = lens _dsgsFilters (\ s a -> s{_dsgsFilters = a}) . _Default . _Coerce;
-
--- | [EC2-Classic and default VPC only] One or more security group names. You can specify either the security group name or the security group ID. For security groups in a nondefault VPC, use the @group-name@ filter to describe security groups by name. Default: Describes all your security groups.
-dsgsGroupNames :: Lens' DescribeSecurityGroups [Text]
-dsgsGroupNames = lens _dsgsGroupNames (\ s a -> s{_dsgsGroupNames = a}) . _Default . _Coerce;
-
--- | One or more security group IDs. Required for security groups in a nondefault VPC. Default: Describes all your security groups.
-dsgsGroupIds :: Lens' DescribeSecurityGroups [Text]
-dsgsGroupIds = lens _dsgsGroupIds (\ s a -> s{_dsgsGroupIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsgsDryRun :: Lens' DescribeSecurityGroups (Maybe Bool)
-dsgsDryRun = lens _dsgsDryRun (\ s a -> s{_dsgsDryRun = a});
-
-instance AWSRequest DescribeSecurityGroups where
-        type Rs DescribeSecurityGroups =
-             DescribeSecurityGroupsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSecurityGroupsResponse' <$>
-                   (x .@? "securityGroupInfo" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSecurityGroups
-
-instance NFData DescribeSecurityGroups
-
-instance ToHeaders DescribeSecurityGroups where
-        toHeaders = const mempty
-
-instance ToPath DescribeSecurityGroups where
-        toPath = const "/"
-
-instance ToQuery DescribeSecurityGroups where
-        toQuery DescribeSecurityGroups'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSecurityGroups" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dsgsFilters),
-               toQuery
-                 (toQueryList "GroupName" <$> _dsgsGroupNames),
-               toQuery (toQueryList "GroupId" <$> _dsgsGroupIds),
-               "DryRun" =: _dsgsDryRun]
-
--- | Contains the output of DescribeSecurityGroups.
---
---
---
--- /See:/ 'describeSecurityGroupsResponse' smart constructor.
-data DescribeSecurityGroupsResponse = DescribeSecurityGroupsResponse'
-    { _dsgrsSecurityGroups :: !(Maybe [SecurityGroup])
-    , _dsgrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSecurityGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsgrsSecurityGroups' - Information about one or more security groups.
---
--- * 'dsgrsResponseStatus' - -- | The response status code.
-describeSecurityGroupsResponse
-    :: Int -- ^ 'dsgrsResponseStatus'
-    -> DescribeSecurityGroupsResponse
-describeSecurityGroupsResponse pResponseStatus_ =
-    DescribeSecurityGroupsResponse'
-    { _dsgrsSecurityGroups = Nothing
-    , _dsgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more security groups.
-dsgrsSecurityGroups :: Lens' DescribeSecurityGroupsResponse [SecurityGroup]
-dsgrsSecurityGroups = lens _dsgrsSecurityGroups (\ s a -> s{_dsgrsSecurityGroups = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dsgrsResponseStatus :: Lens' DescribeSecurityGroupsResponse Int
-dsgrsResponseStatus = lens _dsgrsResponseStatus (\ s a -> s{_dsgrsResponseStatus = a});
-
-instance NFData DescribeSecurityGroupsResponse
diff --git a/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs b/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs
+++ /dev/null
@@ -1,182 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSnapshotAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified attribute of the specified snapshot. You can specify only one attribute at a time.
---
---
--- For more information about EBS snapshots, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html Amazon EBS Snapshots> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeSnapshotAttribute
-    (
-    -- * Creating a Request
-      describeSnapshotAttribute
-    , DescribeSnapshotAttribute
-    -- * Request Lenses
-    , dsaDryRun
-    , dsaSnapshotId
-    , dsaAttribute
-
-    -- * Destructuring the Response
-    , describeSnapshotAttributeResponse
-    , DescribeSnapshotAttributeResponse
-    -- * Response Lenses
-    , dsarsCreateVolumePermissions
-    , dsarsProductCodes
-    , dsarsSnapshotId
-    , dsarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSnapshotAttribute.
---
---
---
--- /See:/ 'describeSnapshotAttribute' smart constructor.
-data DescribeSnapshotAttribute = DescribeSnapshotAttribute'
-    { _dsaDryRun     :: !(Maybe Bool)
-    , _dsaSnapshotId :: !Text
-    , _dsaAttribute  :: !SnapshotAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSnapshotAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsaSnapshotId' - The ID of the EBS snapshot.
---
--- * 'dsaAttribute' - The snapshot attribute you would like to view.
-describeSnapshotAttribute
-    :: Text -- ^ 'dsaSnapshotId'
-    -> SnapshotAttributeName -- ^ 'dsaAttribute'
-    -> DescribeSnapshotAttribute
-describeSnapshotAttribute pSnapshotId_ pAttribute_ =
-    DescribeSnapshotAttribute'
-    { _dsaDryRun = Nothing
-    , _dsaSnapshotId = pSnapshotId_
-    , _dsaAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsaDryRun :: Lens' DescribeSnapshotAttribute (Maybe Bool)
-dsaDryRun = lens _dsaDryRun (\ s a -> s{_dsaDryRun = a});
-
--- | The ID of the EBS snapshot.
-dsaSnapshotId :: Lens' DescribeSnapshotAttribute Text
-dsaSnapshotId = lens _dsaSnapshotId (\ s a -> s{_dsaSnapshotId = a});
-
--- | The snapshot attribute you would like to view.
-dsaAttribute :: Lens' DescribeSnapshotAttribute SnapshotAttributeName
-dsaAttribute = lens _dsaAttribute (\ s a -> s{_dsaAttribute = a});
-
-instance AWSRequest DescribeSnapshotAttribute where
-        type Rs DescribeSnapshotAttribute =
-             DescribeSnapshotAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSnapshotAttributeResponse' <$>
-                   (x .@? "createVolumePermission" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*>
-                     (x .@? "productCodes" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "snapshotId")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSnapshotAttribute
-
-instance NFData DescribeSnapshotAttribute
-
-instance ToHeaders DescribeSnapshotAttribute where
-        toHeaders = const mempty
-
-instance ToPath DescribeSnapshotAttribute where
-        toPath = const "/"
-
-instance ToQuery DescribeSnapshotAttribute where
-        toQuery DescribeSnapshotAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSnapshotAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dsaDryRun,
-               "SnapshotId" =: _dsaSnapshotId,
-               "Attribute" =: _dsaAttribute]
-
--- | Contains the output of DescribeSnapshotAttribute.
---
---
---
--- /See:/ 'describeSnapshotAttributeResponse' smart constructor.
-data DescribeSnapshotAttributeResponse = DescribeSnapshotAttributeResponse'
-    { _dsarsCreateVolumePermissions :: !(Maybe [CreateVolumePermission])
-    , _dsarsProductCodes            :: !(Maybe [ProductCode])
-    , _dsarsSnapshotId              :: !(Maybe Text)
-    , _dsarsResponseStatus          :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSnapshotAttributeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsarsCreateVolumePermissions' - A list of permissions for creating volumes from the snapshot.
---
--- * 'dsarsProductCodes' - A list of product codes.
---
--- * 'dsarsSnapshotId' - The ID of the EBS snapshot.
---
--- * 'dsarsResponseStatus' - -- | The response status code.
-describeSnapshotAttributeResponse
-    :: Int -- ^ 'dsarsResponseStatus'
-    -> DescribeSnapshotAttributeResponse
-describeSnapshotAttributeResponse pResponseStatus_ =
-    DescribeSnapshotAttributeResponse'
-    { _dsarsCreateVolumePermissions = Nothing
-    , _dsarsProductCodes = Nothing
-    , _dsarsSnapshotId = Nothing
-    , _dsarsResponseStatus = pResponseStatus_
-    }
-
--- | A list of permissions for creating volumes from the snapshot.
-dsarsCreateVolumePermissions :: Lens' DescribeSnapshotAttributeResponse [CreateVolumePermission]
-dsarsCreateVolumePermissions = lens _dsarsCreateVolumePermissions (\ s a -> s{_dsarsCreateVolumePermissions = a}) . _Default . _Coerce;
-
--- | A list of product codes.
-dsarsProductCodes :: Lens' DescribeSnapshotAttributeResponse [ProductCode]
-dsarsProductCodes = lens _dsarsProductCodes (\ s a -> s{_dsarsProductCodes = a}) . _Default . _Coerce;
-
--- | The ID of the EBS snapshot.
-dsarsSnapshotId :: Lens' DescribeSnapshotAttributeResponse (Maybe Text)
-dsarsSnapshotId = lens _dsarsSnapshotId (\ s a -> s{_dsarsSnapshotId = a});
-
--- | -- | The response status code.
-dsarsResponseStatus :: Lens' DescribeSnapshotAttributeResponse Int
-dsarsResponseStatus = lens _dsarsResponseStatus (\ s a -> s{_dsarsResponseStatus = a});
-
-instance NFData DescribeSnapshotAttributeResponse
diff --git a/gen/Network/AWS/EC2/DescribeSnapshots.hs b/gen/Network/AWS/EC2/DescribeSnapshots.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSnapshots.hs
+++ /dev/null
@@ -1,239 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSnapshots
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of the EBS snapshots available to you. Available snapshots include public snapshots available for any AWS account to launch, private snapshots that you own, and private snapshots owned by another AWS account but for which you've been given explicit create volume permissions.
---
---
--- The create volume permissions fall into the following categories:
---
---     * /public/ : The owner of the snapshot granted create volume permissions for the snapshot to the @all@ group. All AWS accounts have create volume permissions for these snapshots.
---
---     * /explicit/ : The owner of the snapshot granted create volume permissions to a specific AWS account.
---
---     * /implicit/ : An AWS account has implicit create volume permissions for all snapshots it owns.
---
---
---
--- The list of snapshots returned can be modified by specifying snapshot IDs, snapshot owners, or AWS accounts with create volume permissions. If no options are specified, Amazon EC2 returns all snapshots for which you have create volume permissions.
---
--- If you specify one or more snapshot IDs, only snapshots that have the specified IDs are returned. If you specify an invalid snapshot ID, an error is returned. If you specify a snapshot ID for which you do not have access, it is not included in the returned results.
---
--- If you specify one or more snapshot owners using the @OwnerIds@ option, only snapshots from the specified owners and for which you have access are returned. The results can include the AWS account IDs of the specified owners, @amazon@ for snapshots owned by Amazon, or @self@ for snapshots that you own.
---
--- If you specify a list of restorable users, only snapshots with create snapshot permissions for those users are returned. You can specify AWS account IDs (if you own the snapshots), @self@ for snapshots for which you own or have explicit permissions, or @all@ for public snapshots.
---
--- If you are describing a long list of snapshots, you can paginate the output to make the list more manageable. The @MaxResults@ parameter sets the maximum number of results returned in a single page. If the list of results exceeds your @MaxResults@ value, then that number of results is returned along with a @NextToken@ value that can be passed to a subsequent @DescribeSnapshots@ request to retrieve the remaining results.
---
--- For more information about EBS snapshots, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html Amazon EBS Snapshots> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeSnapshots
-    (
-    -- * Creating a Request
-      describeSnapshots
-    , DescribeSnapshots
-    -- * Request Lenses
-    , dssOwnerIds
-    , dssFilters
-    , dssNextToken
-    , dssSnapshotIds
-    , dssRestorableByUserIds
-    , dssDryRun
-    , dssMaxResults
-
-    -- * Destructuring the Response
-    , describeSnapshotsResponse
-    , DescribeSnapshotsResponse
-    -- * Response Lenses
-    , dssrsNextToken
-    , dssrsSnapshots
-    , dssrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSnapshots.
---
---
---
--- /See:/ 'describeSnapshots' smart constructor.
-data DescribeSnapshots = DescribeSnapshots'
-    { _dssOwnerIds            :: !(Maybe [Text])
-    , _dssFilters             :: !(Maybe [Filter])
-    , _dssNextToken           :: !(Maybe Text)
-    , _dssSnapshotIds         :: !(Maybe [Text])
-    , _dssRestorableByUserIds :: !(Maybe [Text])
-    , _dssDryRun              :: !(Maybe Bool)
-    , _dssMaxResults          :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSnapshots' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dssOwnerIds' - Returns the snapshots owned by the specified owner. Multiple owners can be specified.
---
--- * 'dssFilters' - One or more filters.     * @description@ - A description of the snapshot.     * @owner-alias@ - Value from an Amazon-maintained list (@amazon@ | @aws-marketplace@ | @microsoft@ ) of snapshot owners. Not to be confused with the user-configured AWS account alias, which is set from the IAM consolew.     * @owner-id@ - The ID of the AWS account that owns the snapshot.     * @progress@ - The progress of the snapshot, as a percentage (for example, 80%).     * @snapshot-id@ - The snapshot ID.     * @start-time@ - The time stamp when the snapshot was initiated.     * @status@ - The status of the snapshot (@pending@ | @completed@ | @error@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @volume-id@ - The ID of the volume the snapshot is for.     * @volume-size@ - The size of the volume, in GiB.
---
--- * 'dssNextToken' - The @NextToken@ value returned from a previous paginated @DescribeSnapshots@ request where @MaxResults@ was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the @NextToken@ value. This value is @null@ when there are no more results to return.
---
--- * 'dssSnapshotIds' - One or more snapshot IDs. Default: Describes snapshots for which you have launch permissions.
---
--- * 'dssRestorableByUserIds' - One or more AWS accounts IDs that can create volumes from the snapshot.
---
--- * 'dssDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dssMaxResults' - The maximum number of snapshot results returned by @DescribeSnapshots@ in paginated output. When this parameter is used, @DescribeSnapshots@ only returns @MaxResults@ results in a single page along with a @NextToken@ response element. The remaining results of the initial request can be seen by sending another @DescribeSnapshots@ request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. If this parameter is not used, then @DescribeSnapshots@ returns all results. You cannot specify this parameter and the snapshot IDs parameter in the same request.
-describeSnapshots
-    :: DescribeSnapshots
-describeSnapshots =
-    DescribeSnapshots'
-    { _dssOwnerIds = Nothing
-    , _dssFilters = Nothing
-    , _dssNextToken = Nothing
-    , _dssSnapshotIds = Nothing
-    , _dssRestorableByUserIds = Nothing
-    , _dssDryRun = Nothing
-    , _dssMaxResults = Nothing
-    }
-
--- | Returns the snapshots owned by the specified owner. Multiple owners can be specified.
-dssOwnerIds :: Lens' DescribeSnapshots [Text]
-dssOwnerIds = lens _dssOwnerIds (\ s a -> s{_dssOwnerIds = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @description@ - A description of the snapshot.     * @owner-alias@ - Value from an Amazon-maintained list (@amazon@ | @aws-marketplace@ | @microsoft@ ) of snapshot owners. Not to be confused with the user-configured AWS account alias, which is set from the IAM consolew.     * @owner-id@ - The ID of the AWS account that owns the snapshot.     * @progress@ - The progress of the snapshot, as a percentage (for example, 80%).     * @snapshot-id@ - The snapshot ID.     * @start-time@ - The time stamp when the snapshot was initiated.     * @status@ - The status of the snapshot (@pending@ | @completed@ | @error@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @volume-id@ - The ID of the volume the snapshot is for.     * @volume-size@ - The size of the volume, in GiB.
-dssFilters :: Lens' DescribeSnapshots [Filter]
-dssFilters = lens _dssFilters (\ s a -> s{_dssFilters = a}) . _Default . _Coerce;
-
--- | The @NextToken@ value returned from a previous paginated @DescribeSnapshots@ request where @MaxResults@ was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the @NextToken@ value. This value is @null@ when there are no more results to return.
-dssNextToken :: Lens' DescribeSnapshots (Maybe Text)
-dssNextToken = lens _dssNextToken (\ s a -> s{_dssNextToken = a});
-
--- | One or more snapshot IDs. Default: Describes snapshots for which you have launch permissions.
-dssSnapshotIds :: Lens' DescribeSnapshots [Text]
-dssSnapshotIds = lens _dssSnapshotIds (\ s a -> s{_dssSnapshotIds = a}) . _Default . _Coerce;
-
--- | One or more AWS accounts IDs that can create volumes from the snapshot.
-dssRestorableByUserIds :: Lens' DescribeSnapshots [Text]
-dssRestorableByUserIds = lens _dssRestorableByUserIds (\ s a -> s{_dssRestorableByUserIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dssDryRun :: Lens' DescribeSnapshots (Maybe Bool)
-dssDryRun = lens _dssDryRun (\ s a -> s{_dssDryRun = a});
-
--- | The maximum number of snapshot results returned by @DescribeSnapshots@ in paginated output. When this parameter is used, @DescribeSnapshots@ only returns @MaxResults@ results in a single page along with a @NextToken@ response element. The remaining results of the initial request can be seen by sending another @DescribeSnapshots@ request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. If this parameter is not used, then @DescribeSnapshots@ returns all results. You cannot specify this parameter and the snapshot IDs parameter in the same request.
-dssMaxResults :: Lens' DescribeSnapshots (Maybe Int)
-dssMaxResults = lens _dssMaxResults (\ s a -> s{_dssMaxResults = a});
-
-instance AWSPager DescribeSnapshots where
-        page rq rs
-          | stop (rs ^. dssrsNextToken) = Nothing
-          | stop (rs ^. dssrsSnapshots) = Nothing
-          | otherwise =
-            Just $ rq & dssNextToken .~ rs ^. dssrsNextToken
-
-instance AWSRequest DescribeSnapshots where
-        type Rs DescribeSnapshots = DescribeSnapshotsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSnapshotsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "snapshotSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSnapshots
-
-instance NFData DescribeSnapshots
-
-instance ToHeaders DescribeSnapshots where
-        toHeaders = const mempty
-
-instance ToPath DescribeSnapshots where
-        toPath = const "/"
-
-instance ToQuery DescribeSnapshots where
-        toQuery DescribeSnapshots'{..}
-          = mconcat
-              ["Action" =: ("DescribeSnapshots" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Owner" <$> _dssOwnerIds),
-               toQuery (toQueryList "Filter" <$> _dssFilters),
-               "NextToken" =: _dssNextToken,
-               toQuery
-                 (toQueryList "SnapshotId" <$> _dssSnapshotIds),
-               toQuery
-                 (toQueryList "RestorableBy" <$>
-                    _dssRestorableByUserIds),
-               "DryRun" =: _dssDryRun,
-               "MaxResults" =: _dssMaxResults]
-
--- | Contains the output of DescribeSnapshots.
---
---
---
--- /See:/ 'describeSnapshotsResponse' smart constructor.
-data DescribeSnapshotsResponse = DescribeSnapshotsResponse'
-    { _dssrsNextToken      :: !(Maybe Text)
-    , _dssrsSnapshots      :: !(Maybe [Snapshot])
-    , _dssrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSnapshotsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dssrsNextToken' - The @NextToken@ value to include in a future @DescribeSnapshots@ request. When the results of a @DescribeSnapshots@ request exceed @MaxResults@ , this value can be used to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dssrsSnapshots' - Information about the snapshots.
---
--- * 'dssrsResponseStatus' - -- | The response status code.
-describeSnapshotsResponse
-    :: Int -- ^ 'dssrsResponseStatus'
-    -> DescribeSnapshotsResponse
-describeSnapshotsResponse pResponseStatus_ =
-    DescribeSnapshotsResponse'
-    { _dssrsNextToken = Nothing
-    , _dssrsSnapshots = Nothing
-    , _dssrsResponseStatus = pResponseStatus_
-    }
-
--- | The @NextToken@ value to include in a future @DescribeSnapshots@ request. When the results of a @DescribeSnapshots@ request exceed @MaxResults@ , this value can be used to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dssrsNextToken :: Lens' DescribeSnapshotsResponse (Maybe Text)
-dssrsNextToken = lens _dssrsNextToken (\ s a -> s{_dssrsNextToken = a});
-
--- | Information about the snapshots.
-dssrsSnapshots :: Lens' DescribeSnapshotsResponse [Snapshot]
-dssrsSnapshots = lens _dssrsSnapshots (\ s a -> s{_dssrsSnapshots = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dssrsResponseStatus :: Lens' DescribeSnapshotsResponse Int
-dssrsResponseStatus = lens _dssrsResponseStatus (\ s a -> s{_dssrsResponseStatus = a});
-
-instance NFData DescribeSnapshotsResponse
diff --git a/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs b/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs
+++ /dev/null
@@ -1,140 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSpotDatafeedSubscription
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the data feed for Spot instances. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html Spot Instance Data Feed> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.DescribeSpotDatafeedSubscription
-    (
-    -- * Creating a Request
-      describeSpotDatafeedSubscription
-    , DescribeSpotDatafeedSubscription
-    -- * Request Lenses
-    , dsdsDryRun
-
-    -- * Destructuring the Response
-    , describeSpotDatafeedSubscriptionResponse
-    , DescribeSpotDatafeedSubscriptionResponse
-    -- * Response Lenses
-    , dsdsrsSpotDatafeedSubscription
-    , dsdsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSpotDatafeedSubscription.
---
---
---
--- /See:/ 'describeSpotDatafeedSubscription' smart constructor.
-newtype DescribeSpotDatafeedSubscription = DescribeSpotDatafeedSubscription'
-    { _dsdsDryRun :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotDatafeedSubscription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsdsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeSpotDatafeedSubscription
-    :: DescribeSpotDatafeedSubscription
-describeSpotDatafeedSubscription =
-    DescribeSpotDatafeedSubscription'
-    { _dsdsDryRun = Nothing
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsdsDryRun :: Lens' DescribeSpotDatafeedSubscription (Maybe Bool)
-dsdsDryRun = lens _dsdsDryRun (\ s a -> s{_dsdsDryRun = a});
-
-instance AWSRequest DescribeSpotDatafeedSubscription
-         where
-        type Rs DescribeSpotDatafeedSubscription =
-             DescribeSpotDatafeedSubscriptionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSpotDatafeedSubscriptionResponse' <$>
-                   (x .@? "spotDatafeedSubscription") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable DescribeSpotDatafeedSubscription
-
-instance NFData DescribeSpotDatafeedSubscription
-
-instance ToHeaders DescribeSpotDatafeedSubscription
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeSpotDatafeedSubscription
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeSpotDatafeedSubscription
-         where
-        toQuery DescribeSpotDatafeedSubscription'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSpotDatafeedSubscription" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dsdsDryRun]
-
--- | Contains the output of DescribeSpotDatafeedSubscription.
---
---
---
--- /See:/ 'describeSpotDatafeedSubscriptionResponse' smart constructor.
-data DescribeSpotDatafeedSubscriptionResponse = DescribeSpotDatafeedSubscriptionResponse'
-    { _dsdsrsSpotDatafeedSubscription :: !(Maybe SpotDatafeedSubscription)
-    , _dsdsrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotDatafeedSubscriptionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsdsrsSpotDatafeedSubscription' - The Spot instance data feed subscription.
---
--- * 'dsdsrsResponseStatus' - -- | The response status code.
-describeSpotDatafeedSubscriptionResponse
-    :: Int -- ^ 'dsdsrsResponseStatus'
-    -> DescribeSpotDatafeedSubscriptionResponse
-describeSpotDatafeedSubscriptionResponse pResponseStatus_ =
-    DescribeSpotDatafeedSubscriptionResponse'
-    { _dsdsrsSpotDatafeedSubscription = Nothing
-    , _dsdsrsResponseStatus = pResponseStatus_
-    }
-
--- | The Spot instance data feed subscription.
-dsdsrsSpotDatafeedSubscription :: Lens' DescribeSpotDatafeedSubscriptionResponse (Maybe SpotDatafeedSubscription)
-dsdsrsSpotDatafeedSubscription = lens _dsdsrsSpotDatafeedSubscription (\ s a -> s{_dsdsrsSpotDatafeedSubscription = a});
-
--- | -- | The response status code.
-dsdsrsResponseStatus :: Lens' DescribeSpotDatafeedSubscriptionResponse Int
-dsdsrsResponseStatus = lens _dsdsrsResponseStatus (\ s a -> s{_dsdsrsResponseStatus = a});
-
-instance NFData
-         DescribeSpotDatafeedSubscriptionResponse
diff --git a/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs b/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs
+++ /dev/null
@@ -1,188 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSpotFleetInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the running instances for the specified Spot fleet.
---
---
-module Network.AWS.EC2.DescribeSpotFleetInstances
-    (
-    -- * Creating a Request
-      describeSpotFleetInstances
-    , DescribeSpotFleetInstances
-    -- * Request Lenses
-    , dsfiNextToken
-    , dsfiDryRun
-    , dsfiMaxResults
-    , dsfiSpotFleetRequestId
-
-    -- * Destructuring the Response
-    , describeSpotFleetInstancesResponse
-    , DescribeSpotFleetInstancesResponse
-    -- * Response Lenses
-    , dsfirsNextToken
-    , dsfirsResponseStatus
-    , dsfirsSpotFleetRequestId
-    , dsfirsActiveInstances
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSpotFleetInstances.
---
---
---
--- /See:/ 'describeSpotFleetInstances' smart constructor.
-data DescribeSpotFleetInstances = DescribeSpotFleetInstances'
-    { _dsfiNextToken          :: !(Maybe Text)
-    , _dsfiDryRun             :: !(Maybe Bool)
-    , _dsfiMaxResults         :: !(Maybe Int)
-    , _dsfiSpotFleetRequestId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotFleetInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfiNextToken' - The token for the next set of results.
---
--- * 'dsfiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsfiMaxResults' - The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
---
--- * 'dsfiSpotFleetRequestId' - The ID of the Spot fleet request.
-describeSpotFleetInstances
-    :: Text -- ^ 'dsfiSpotFleetRequestId'
-    -> DescribeSpotFleetInstances
-describeSpotFleetInstances pSpotFleetRequestId_ =
-    DescribeSpotFleetInstances'
-    { _dsfiNextToken = Nothing
-    , _dsfiDryRun = Nothing
-    , _dsfiMaxResults = Nothing
-    , _dsfiSpotFleetRequestId = pSpotFleetRequestId_
-    }
-
--- | The token for the next set of results.
-dsfiNextToken :: Lens' DescribeSpotFleetInstances (Maybe Text)
-dsfiNextToken = lens _dsfiNextToken (\ s a -> s{_dsfiNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsfiDryRun :: Lens' DescribeSpotFleetInstances (Maybe Bool)
-dsfiDryRun = lens _dsfiDryRun (\ s a -> s{_dsfiDryRun = a});
-
--- | The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dsfiMaxResults :: Lens' DescribeSpotFleetInstances (Maybe Int)
-dsfiMaxResults = lens _dsfiMaxResults (\ s a -> s{_dsfiMaxResults = a});
-
--- | The ID of the Spot fleet request.
-dsfiSpotFleetRequestId :: Lens' DescribeSpotFleetInstances Text
-dsfiSpotFleetRequestId = lens _dsfiSpotFleetRequestId (\ s a -> s{_dsfiSpotFleetRequestId = a});
-
-instance AWSRequest DescribeSpotFleetInstances where
-        type Rs DescribeSpotFleetInstances =
-             DescribeSpotFleetInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSpotFleetInstancesResponse' <$>
-                   (x .@? "nextToken") <*> (pure (fromEnum s)) <*>
-                     (x .@ "spotFleetRequestId")
-                     <*>
-                     (x .@? "activeInstanceSet" .!@ mempty >>=
-                        parseXMLList "item"))
-
-instance Hashable DescribeSpotFleetInstances
-
-instance NFData DescribeSpotFleetInstances
-
-instance ToHeaders DescribeSpotFleetInstances where
-        toHeaders = const mempty
-
-instance ToPath DescribeSpotFleetInstances where
-        toPath = const "/"
-
-instance ToQuery DescribeSpotFleetInstances where
-        toQuery DescribeSpotFleetInstances'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSpotFleetInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dsfiNextToken,
-               "DryRun" =: _dsfiDryRun,
-               "MaxResults" =: _dsfiMaxResults,
-               "SpotFleetRequestId" =: _dsfiSpotFleetRequestId]
-
--- | Contains the output of DescribeSpotFleetInstances.
---
---
---
--- /See:/ 'describeSpotFleetInstancesResponse' smart constructor.
-data DescribeSpotFleetInstancesResponse = DescribeSpotFleetInstancesResponse'
-    { _dsfirsNextToken          :: !(Maybe Text)
-    , _dsfirsResponseStatus     :: !Int
-    , _dsfirsSpotFleetRequestId :: !Text
-    , _dsfirsActiveInstances    :: ![ActiveInstance]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotFleetInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfirsNextToken' - The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
---
--- * 'dsfirsResponseStatus' - -- | The response status code.
---
--- * 'dsfirsSpotFleetRequestId' - The ID of the Spot fleet request.
---
--- * 'dsfirsActiveInstances' - The running instances. Note that this list is refreshed periodically and might be out of date.
-describeSpotFleetInstancesResponse
-    :: Int -- ^ 'dsfirsResponseStatus'
-    -> Text -- ^ 'dsfirsSpotFleetRequestId'
-    -> DescribeSpotFleetInstancesResponse
-describeSpotFleetInstancesResponse pResponseStatus_ pSpotFleetRequestId_ =
-    DescribeSpotFleetInstancesResponse'
-    { _dsfirsNextToken = Nothing
-    , _dsfirsResponseStatus = pResponseStatus_
-    , _dsfirsSpotFleetRequestId = pSpotFleetRequestId_
-    , _dsfirsActiveInstances = mempty
-    }
-
--- | The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
-dsfirsNextToken :: Lens' DescribeSpotFleetInstancesResponse (Maybe Text)
-dsfirsNextToken = lens _dsfirsNextToken (\ s a -> s{_dsfirsNextToken = a});
-
--- | -- | The response status code.
-dsfirsResponseStatus :: Lens' DescribeSpotFleetInstancesResponse Int
-dsfirsResponseStatus = lens _dsfirsResponseStatus (\ s a -> s{_dsfirsResponseStatus = a});
-
--- | The ID of the Spot fleet request.
-dsfirsSpotFleetRequestId :: Lens' DescribeSpotFleetInstancesResponse Text
-dsfirsSpotFleetRequestId = lens _dsfirsSpotFleetRequestId (\ s a -> s{_dsfirsSpotFleetRequestId = a});
-
--- | The running instances. Note that this list is refreshed periodically and might be out of date.
-dsfirsActiveInstances :: Lens' DescribeSpotFleetInstancesResponse [ActiveInstance]
-dsfirsActiveInstances = lens _dsfirsActiveInstances (\ s a -> s{_dsfirsActiveInstances = a}) . _Coerce;
-
-instance NFData DescribeSpotFleetInstancesResponse
diff --git a/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs b/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs
+++ /dev/null
@@ -1,237 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSpotFleetRequestHistory
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the events for the specified Spot fleet request during the specified time.
---
---
--- Spot fleet events are delayed by up to 30 seconds before they can be described. This ensures that you can query by the last evaluated time and not miss a recorded event.
---
-module Network.AWS.EC2.DescribeSpotFleetRequestHistory
-    (
-    -- * Creating a Request
-      describeSpotFleetRequestHistory
-    , DescribeSpotFleetRequestHistory
-    -- * Request Lenses
-    , dsfrhNextToken
-    , dsfrhEventType
-    , dsfrhDryRun
-    , dsfrhMaxResults
-    , dsfrhSpotFleetRequestId
-    , dsfrhStartTime
-
-    -- * Destructuring the Response
-    , describeSpotFleetRequestHistoryResponse
-    , DescribeSpotFleetRequestHistoryResponse
-    -- * Response Lenses
-    , dsfrhrsNextToken
-    , dsfrhrsResponseStatus
-    , dsfrhrsSpotFleetRequestId
-    , dsfrhrsStartTime
-    , dsfrhrsLastEvaluatedTime
-    , dsfrhrsHistoryRecords
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSpotFleetRequestHistory.
---
---
---
--- /See:/ 'describeSpotFleetRequestHistory' smart constructor.
-data DescribeSpotFleetRequestHistory = DescribeSpotFleetRequestHistory'
-    { _dsfrhNextToken          :: !(Maybe Text)
-    , _dsfrhEventType          :: !(Maybe EventType)
-    , _dsfrhDryRun             :: !(Maybe Bool)
-    , _dsfrhMaxResults         :: !(Maybe Int)
-    , _dsfrhSpotFleetRequestId :: !Text
-    , _dsfrhStartTime          :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotFleetRequestHistory' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfrhNextToken' - The token for the next set of results.
---
--- * 'dsfrhEventType' - The type of events to describe. By default, all events are described.
---
--- * 'dsfrhDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsfrhMaxResults' - The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
---
--- * 'dsfrhSpotFleetRequestId' - The ID of the Spot fleet request.
---
--- * 'dsfrhStartTime' - The starting date and time for the events, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-describeSpotFleetRequestHistory
-    :: Text -- ^ 'dsfrhSpotFleetRequestId'
-    -> UTCTime -- ^ 'dsfrhStartTime'
-    -> DescribeSpotFleetRequestHistory
-describeSpotFleetRequestHistory pSpotFleetRequestId_ pStartTime_ =
-    DescribeSpotFleetRequestHistory'
-    { _dsfrhNextToken = Nothing
-    , _dsfrhEventType = Nothing
-    , _dsfrhDryRun = Nothing
-    , _dsfrhMaxResults = Nothing
-    , _dsfrhSpotFleetRequestId = pSpotFleetRequestId_
-    , _dsfrhStartTime = _Time # pStartTime_
-    }
-
--- | The token for the next set of results.
-dsfrhNextToken :: Lens' DescribeSpotFleetRequestHistory (Maybe Text)
-dsfrhNextToken = lens _dsfrhNextToken (\ s a -> s{_dsfrhNextToken = a});
-
--- | The type of events to describe. By default, all events are described.
-dsfrhEventType :: Lens' DescribeSpotFleetRequestHistory (Maybe EventType)
-dsfrhEventType = lens _dsfrhEventType (\ s a -> s{_dsfrhEventType = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsfrhDryRun :: Lens' DescribeSpotFleetRequestHistory (Maybe Bool)
-dsfrhDryRun = lens _dsfrhDryRun (\ s a -> s{_dsfrhDryRun = a});
-
--- | The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dsfrhMaxResults :: Lens' DescribeSpotFleetRequestHistory (Maybe Int)
-dsfrhMaxResults = lens _dsfrhMaxResults (\ s a -> s{_dsfrhMaxResults = a});
-
--- | The ID of the Spot fleet request.
-dsfrhSpotFleetRequestId :: Lens' DescribeSpotFleetRequestHistory Text
-dsfrhSpotFleetRequestId = lens _dsfrhSpotFleetRequestId (\ s a -> s{_dsfrhSpotFleetRequestId = a});
-
--- | The starting date and time for the events, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-dsfrhStartTime :: Lens' DescribeSpotFleetRequestHistory UTCTime
-dsfrhStartTime = lens _dsfrhStartTime (\ s a -> s{_dsfrhStartTime = a}) . _Time;
-
-instance AWSRequest DescribeSpotFleetRequestHistory
-         where
-        type Rs DescribeSpotFleetRequestHistory =
-             DescribeSpotFleetRequestHistoryResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSpotFleetRequestHistoryResponse' <$>
-                   (x .@? "nextToken") <*> (pure (fromEnum s)) <*>
-                     (x .@ "spotFleetRequestId")
-                     <*> (x .@ "startTime")
-                     <*> (x .@ "lastEvaluatedTime")
-                     <*>
-                     (x .@? "historyRecordSet" .!@ mempty >>=
-                        parseXMLList "item"))
-
-instance Hashable DescribeSpotFleetRequestHistory
-
-instance NFData DescribeSpotFleetRequestHistory
-
-instance ToHeaders DescribeSpotFleetRequestHistory
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeSpotFleetRequestHistory where
-        toPath = const "/"
-
-instance ToQuery DescribeSpotFleetRequestHistory
-         where
-        toQuery DescribeSpotFleetRequestHistory'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSpotFleetRequestHistory" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dsfrhNextToken,
-               "EventType" =: _dsfrhEventType,
-               "DryRun" =: _dsfrhDryRun,
-               "MaxResults" =: _dsfrhMaxResults,
-               "SpotFleetRequestId" =: _dsfrhSpotFleetRequestId,
-               "StartTime" =: _dsfrhStartTime]
-
--- | Contains the output of DescribeSpotFleetRequestHistory.
---
---
---
--- /See:/ 'describeSpotFleetRequestHistoryResponse' smart constructor.
-data DescribeSpotFleetRequestHistoryResponse = DescribeSpotFleetRequestHistoryResponse'
-    { _dsfrhrsNextToken          :: !(Maybe Text)
-    , _dsfrhrsResponseStatus     :: !Int
-    , _dsfrhrsSpotFleetRequestId :: !Text
-    , _dsfrhrsStartTime          :: !ISO8601
-    , _dsfrhrsLastEvaluatedTime  :: !ISO8601
-    , _dsfrhrsHistoryRecords     :: ![HistoryRecord]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotFleetRequestHistoryResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfrhrsNextToken' - The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
---
--- * 'dsfrhrsResponseStatus' - -- | The response status code.
---
--- * 'dsfrhrsSpotFleetRequestId' - The ID of the Spot fleet request.
---
--- * 'dsfrhrsStartTime' - The starting date and time for the events, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
---
--- * 'dsfrhrsLastEvaluatedTime' - The last date and time for the events, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). All records up to this time were retrieved. If @nextToken@ indicates that there are more results, this value is not present.
---
--- * 'dsfrhrsHistoryRecords' - Information about the events in the history of the Spot fleet request.
-describeSpotFleetRequestHistoryResponse
-    :: Int -- ^ 'dsfrhrsResponseStatus'
-    -> Text -- ^ 'dsfrhrsSpotFleetRequestId'
-    -> UTCTime -- ^ 'dsfrhrsStartTime'
-    -> UTCTime -- ^ 'dsfrhrsLastEvaluatedTime'
-    -> DescribeSpotFleetRequestHistoryResponse
-describeSpotFleetRequestHistoryResponse pResponseStatus_ pSpotFleetRequestId_ pStartTime_ pLastEvaluatedTime_ =
-    DescribeSpotFleetRequestHistoryResponse'
-    { _dsfrhrsNextToken = Nothing
-    , _dsfrhrsResponseStatus = pResponseStatus_
-    , _dsfrhrsSpotFleetRequestId = pSpotFleetRequestId_
-    , _dsfrhrsStartTime = _Time # pStartTime_
-    , _dsfrhrsLastEvaluatedTime = _Time # pLastEvaluatedTime_
-    , _dsfrhrsHistoryRecords = mempty
-    }
-
--- | The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
-dsfrhrsNextToken :: Lens' DescribeSpotFleetRequestHistoryResponse (Maybe Text)
-dsfrhrsNextToken = lens _dsfrhrsNextToken (\ s a -> s{_dsfrhrsNextToken = a});
-
--- | -- | The response status code.
-dsfrhrsResponseStatus :: Lens' DescribeSpotFleetRequestHistoryResponse Int
-dsfrhrsResponseStatus = lens _dsfrhrsResponseStatus (\ s a -> s{_dsfrhrsResponseStatus = a});
-
--- | The ID of the Spot fleet request.
-dsfrhrsSpotFleetRequestId :: Lens' DescribeSpotFleetRequestHistoryResponse Text
-dsfrhrsSpotFleetRequestId = lens _dsfrhrsSpotFleetRequestId (\ s a -> s{_dsfrhrsSpotFleetRequestId = a});
-
--- | The starting date and time for the events, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-dsfrhrsStartTime :: Lens' DescribeSpotFleetRequestHistoryResponse UTCTime
-dsfrhrsStartTime = lens _dsfrhrsStartTime (\ s a -> s{_dsfrhrsStartTime = a}) . _Time;
-
--- | The last date and time for the events, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). All records up to this time were retrieved. If @nextToken@ indicates that there are more results, this value is not present.
-dsfrhrsLastEvaluatedTime :: Lens' DescribeSpotFleetRequestHistoryResponse UTCTime
-dsfrhrsLastEvaluatedTime = lens _dsfrhrsLastEvaluatedTime (\ s a -> s{_dsfrhrsLastEvaluatedTime = a}) . _Time;
-
--- | Information about the events in the history of the Spot fleet request.
-dsfrhrsHistoryRecords :: Lens' DescribeSpotFleetRequestHistoryResponse [HistoryRecord]
-dsfrhrsHistoryRecords = lens _dsfrhrsHistoryRecords (\ s a -> s{_dsfrhrsHistoryRecords = a}) . _Coerce;
-
-instance NFData
-         DescribeSpotFleetRequestHistoryResponse
diff --git a/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs b/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs
+++ /dev/null
@@ -1,190 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSpotFleetRequests
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes your Spot fleet requests.
---
---
--- Spot fleet requests are deleted 48 hours after they are canceled and their instances are terminated.
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeSpotFleetRequests
-    (
-    -- * Creating a Request
-      describeSpotFleetRequests
-    , DescribeSpotFleetRequests
-    -- * Request Lenses
-    , dsfrSpotFleetRequestIds
-    , dsfrNextToken
-    , dsfrDryRun
-    , dsfrMaxResults
-
-    -- * Destructuring the Response
-    , describeSpotFleetRequestsResponse
-    , DescribeSpotFleetRequestsResponse
-    -- * Response Lenses
-    , dsfrrsNextToken
-    , dsfrrsResponseStatus
-    , dsfrrsSpotFleetRequestConfigs
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSpotFleetRequests.
---
---
---
--- /See:/ 'describeSpotFleetRequests' smart constructor.
-data DescribeSpotFleetRequests = DescribeSpotFleetRequests'
-    { _dsfrSpotFleetRequestIds :: !(Maybe [Text])
-    , _dsfrNextToken           :: !(Maybe Text)
-    , _dsfrDryRun              :: !(Maybe Bool)
-    , _dsfrMaxResults          :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotFleetRequests' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfrSpotFleetRequestIds' - The IDs of the Spot fleet requests.
---
--- * 'dsfrNextToken' - The token for the next set of results.
---
--- * 'dsfrDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsfrMaxResults' - The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-describeSpotFleetRequests
-    :: DescribeSpotFleetRequests
-describeSpotFleetRequests =
-    DescribeSpotFleetRequests'
-    { _dsfrSpotFleetRequestIds = Nothing
-    , _dsfrNextToken = Nothing
-    , _dsfrDryRun = Nothing
-    , _dsfrMaxResults = Nothing
-    }
-
--- | The IDs of the Spot fleet requests.
-dsfrSpotFleetRequestIds :: Lens' DescribeSpotFleetRequests [Text]
-dsfrSpotFleetRequestIds = lens _dsfrSpotFleetRequestIds (\ s a -> s{_dsfrSpotFleetRequestIds = a}) . _Default . _Coerce;
-
--- | The token for the next set of results.
-dsfrNextToken :: Lens' DescribeSpotFleetRequests (Maybe Text)
-dsfrNextToken = lens _dsfrNextToken (\ s a -> s{_dsfrNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsfrDryRun :: Lens' DescribeSpotFleetRequests (Maybe Bool)
-dsfrDryRun = lens _dsfrDryRun (\ s a -> s{_dsfrDryRun = a});
-
--- | The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dsfrMaxResults :: Lens' DescribeSpotFleetRequests (Maybe Int)
-dsfrMaxResults = lens _dsfrMaxResults (\ s a -> s{_dsfrMaxResults = a});
-
-instance AWSPager DescribeSpotFleetRequests where
-        page rq rs
-          | stop (rs ^. dsfrrsNextToken) = Nothing
-          | stop (rs ^. dsfrrsSpotFleetRequestConfigs) =
-            Nothing
-          | otherwise =
-            Just $ rq & dsfrNextToken .~ rs ^. dsfrrsNextToken
-
-instance AWSRequest DescribeSpotFleetRequests where
-        type Rs DescribeSpotFleetRequests =
-             DescribeSpotFleetRequestsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSpotFleetRequestsResponse' <$>
-                   (x .@? "nextToken") <*> (pure (fromEnum s)) <*>
-                     (x .@? "spotFleetRequestConfigSet" .!@ mempty >>=
-                        parseXMLList "item"))
-
-instance Hashable DescribeSpotFleetRequests
-
-instance NFData DescribeSpotFleetRequests
-
-instance ToHeaders DescribeSpotFleetRequests where
-        toHeaders = const mempty
-
-instance ToPath DescribeSpotFleetRequests where
-        toPath = const "/"
-
-instance ToQuery DescribeSpotFleetRequests where
-        toQuery DescribeSpotFleetRequests'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSpotFleetRequests" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "SpotFleetRequestId" <$>
-                    _dsfrSpotFleetRequestIds),
-               "NextToken" =: _dsfrNextToken,
-               "DryRun" =: _dsfrDryRun,
-               "MaxResults" =: _dsfrMaxResults]
-
--- | Contains the output of DescribeSpotFleetRequests.
---
---
---
--- /See:/ 'describeSpotFleetRequestsResponse' smart constructor.
-data DescribeSpotFleetRequestsResponse = DescribeSpotFleetRequestsResponse'
-    { _dsfrrsNextToken               :: !(Maybe Text)
-    , _dsfrrsResponseStatus          :: !Int
-    , _dsfrrsSpotFleetRequestConfigs :: ![SpotFleetRequestConfig]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotFleetRequestsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsfrrsNextToken' - The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
---
--- * 'dsfrrsResponseStatus' - -- | The response status code.
---
--- * 'dsfrrsSpotFleetRequestConfigs' - Information about the configuration of your Spot fleet.
-describeSpotFleetRequestsResponse
-    :: Int -- ^ 'dsfrrsResponseStatus'
-    -> DescribeSpotFleetRequestsResponse
-describeSpotFleetRequestsResponse pResponseStatus_ =
-    DescribeSpotFleetRequestsResponse'
-    { _dsfrrsNextToken = Nothing
-    , _dsfrrsResponseStatus = pResponseStatus_
-    , _dsfrrsSpotFleetRequestConfigs = mempty
-    }
-
--- | The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
-dsfrrsNextToken :: Lens' DescribeSpotFleetRequestsResponse (Maybe Text)
-dsfrrsNextToken = lens _dsfrrsNextToken (\ s a -> s{_dsfrrsNextToken = a});
-
--- | -- | The response status code.
-dsfrrsResponseStatus :: Lens' DescribeSpotFleetRequestsResponse Int
-dsfrrsResponseStatus = lens _dsfrrsResponseStatus (\ s a -> s{_dsfrrsResponseStatus = a});
-
--- | Information about the configuration of your Spot fleet.
-dsfrrsSpotFleetRequestConfigs :: Lens' DescribeSpotFleetRequestsResponse [SpotFleetRequestConfig]
-dsfrrsSpotFleetRequestConfigs = lens _dsfrrsSpotFleetRequestConfigs (\ s a -> s{_dsfrrsSpotFleetRequestConfigs = a}) . _Coerce;
-
-instance NFData DescribeSpotFleetRequestsResponse
diff --git a/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs b/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSpotInstanceRequests
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the Spot instance requests that belong to your account. Spot instances are instances that Amazon EC2 launches when the bid price that you specify exceeds the current Spot price. Amazon EC2 periodically sets the Spot price based on available Spot instance capacity and current Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html Spot Instance Requests> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- You can use @DescribeSpotInstanceRequests@ to find a running Spot instance by examining the response. If the status of the Spot instance is @fulfilled@ , the instance ID appears in the response and contains the identifier of the instance. Alternatively, you can use 'DescribeInstances' with a filter to look for instances where the instance lifecycle is @spot@ .
---
--- Spot instance requests are deleted 4 hours after they are canceled and their instances are terminated.
---
-module Network.AWS.EC2.DescribeSpotInstanceRequests
-    (
-    -- * Creating a Request
-      describeSpotInstanceRequests
-    , DescribeSpotInstanceRequests
-    -- * Request Lenses
-    , dsirFilters
-    , dsirSpotInstanceRequestIds
-    , dsirDryRun
-
-    -- * Destructuring the Response
-    , describeSpotInstanceRequestsResponse
-    , DescribeSpotInstanceRequestsResponse
-    -- * Response Lenses
-    , dsirrsSpotInstanceRequests
-    , dsirrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSpotInstanceRequests.
---
---
---
--- /See:/ 'describeSpotInstanceRequests' smart constructor.
-data DescribeSpotInstanceRequests = DescribeSpotInstanceRequests'
-    { _dsirFilters                :: !(Maybe [Filter])
-    , _dsirSpotInstanceRequestIds :: !(Maybe [Text])
-    , _dsirDryRun                 :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotInstanceRequests' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsirFilters' - One or more filters.     * @availability-zone-group@ - The Availability Zone group.     * @create-time@ - The time stamp when the Spot instance request was created.     * @fault-code@ - The fault code related to the request.     * @fault-message@ - The fault message related to the request.     * @instance-id@ - The ID of the instance that fulfilled the request.     * @launch-group@ - The Spot instance launch group.     * @launch.block-device-mapping.delete-on-termination@ - Indicates whether the Amazon EBS volume is deleted on instance termination.     * @launch.block-device-mapping.device-name@ - The device name for the Amazon EBS volume (for example, @/dev/sdh@ ).     * @launch.block-device-mapping.snapshot-id@ - The ID of the snapshot used for the Amazon EBS volume.     * @launch.block-device-mapping.volume-size@ - The size of the Amazon EBS volume, in GiB.     * @launch.block-device-mapping.volume-type@ - The type of the Amazon EBS volume: @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic.     * @launch.group-id@ - The security group for the instance.     * @launch.image-id@ - The ID of the AMI.     * @launch.instance-type@ - The type of instance (for example, @m3.medium@ ).     * @launch.kernel-id@ - The kernel ID.     * @launch.key-name@ - The name of the key pair the instance launched with.     * @launch.monitoring-enabled@ - Whether monitoring is enabled for the Spot instance.     * @launch.ramdisk-id@ - The RAM disk ID.     * @network-interface.network-interface-id@ - The ID of the network interface.     * @network-interface.device-index@ - The index of the device for the network interface attachment on the instance.     * @network-interface.subnet-id@ - The ID of the subnet for the instance.     * @network-interface.description@ - A description of the network interface.     * @network-interface.private-ip-address@ - The primary private IP address of the network interface.     * @network-interface.delete-on-termination@ - Indicates whether the network interface is deleted when the instance is terminated.     * @network-interface.group-id@ - The ID of the security group associated with the network interface.     * @network-interface.group-name@ - The name of the security group associated with the network interface.     * @network-interface.addresses.primary@ - Indicates whether the IP address is the primary private IP address.     * @product-description@ - The product description associated with the instance (@Linux/UNIX@ | @Windows@ ).     * @spot-instance-request-id@ - The Spot instance request ID.     * @spot-price@ - The maximum hourly price for any Spot instance launched to fulfill the request.     * @state@ - The state of the Spot instance request (@open@ | @active@ | @closed@ | @cancelled@ | @failed@ ). Spot bid status information can help you track your Amazon EC2 Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html Spot Bid Status> in the Amazon Elastic Compute Cloud User Guide.     * @status-code@ - The short code describing the most recent evaluation of your Spot instance request.     * @status-message@ - The message explaining the status of the Spot instance request.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @type@ - The type of Spot instance request (@one-time@ | @persistent@ ).     * @launched-availability-zone@ - The Availability Zone in which the bid is launched.     * @valid-from@ - The start date of the request.     * @valid-until@ - The end date of the request.
---
--- * 'dsirSpotInstanceRequestIds' - One or more Spot instance request IDs.
---
--- * 'dsirDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeSpotInstanceRequests
-    :: DescribeSpotInstanceRequests
-describeSpotInstanceRequests =
-    DescribeSpotInstanceRequests'
-    { _dsirFilters = Nothing
-    , _dsirSpotInstanceRequestIds = Nothing
-    , _dsirDryRun = Nothing
-    }
-
--- | One or more filters.     * @availability-zone-group@ - The Availability Zone group.     * @create-time@ - The time stamp when the Spot instance request was created.     * @fault-code@ - The fault code related to the request.     * @fault-message@ - The fault message related to the request.     * @instance-id@ - The ID of the instance that fulfilled the request.     * @launch-group@ - The Spot instance launch group.     * @launch.block-device-mapping.delete-on-termination@ - Indicates whether the Amazon EBS volume is deleted on instance termination.     * @launch.block-device-mapping.device-name@ - The device name for the Amazon EBS volume (for example, @/dev/sdh@ ).     * @launch.block-device-mapping.snapshot-id@ - The ID of the snapshot used for the Amazon EBS volume.     * @launch.block-device-mapping.volume-size@ - The size of the Amazon EBS volume, in GiB.     * @launch.block-device-mapping.volume-type@ - The type of the Amazon EBS volume: @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic.     * @launch.group-id@ - The security group for the instance.     * @launch.image-id@ - The ID of the AMI.     * @launch.instance-type@ - The type of instance (for example, @m3.medium@ ).     * @launch.kernel-id@ - The kernel ID.     * @launch.key-name@ - The name of the key pair the instance launched with.     * @launch.monitoring-enabled@ - Whether monitoring is enabled for the Spot instance.     * @launch.ramdisk-id@ - The RAM disk ID.     * @network-interface.network-interface-id@ - The ID of the network interface.     * @network-interface.device-index@ - The index of the device for the network interface attachment on the instance.     * @network-interface.subnet-id@ - The ID of the subnet for the instance.     * @network-interface.description@ - A description of the network interface.     * @network-interface.private-ip-address@ - The primary private IP address of the network interface.     * @network-interface.delete-on-termination@ - Indicates whether the network interface is deleted when the instance is terminated.     * @network-interface.group-id@ - The ID of the security group associated with the network interface.     * @network-interface.group-name@ - The name of the security group associated with the network interface.     * @network-interface.addresses.primary@ - Indicates whether the IP address is the primary private IP address.     * @product-description@ - The product description associated with the instance (@Linux/UNIX@ | @Windows@ ).     * @spot-instance-request-id@ - The Spot instance request ID.     * @spot-price@ - The maximum hourly price for any Spot instance launched to fulfill the request.     * @state@ - The state of the Spot instance request (@open@ | @active@ | @closed@ | @cancelled@ | @failed@ ). Spot bid status information can help you track your Amazon EC2 Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html Spot Bid Status> in the Amazon Elastic Compute Cloud User Guide.     * @status-code@ - The short code describing the most recent evaluation of your Spot instance request.     * @status-message@ - The message explaining the status of the Spot instance request.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @type@ - The type of Spot instance request (@one-time@ | @persistent@ ).     * @launched-availability-zone@ - The Availability Zone in which the bid is launched.     * @valid-from@ - The start date of the request.     * @valid-until@ - The end date of the request.
-dsirFilters :: Lens' DescribeSpotInstanceRequests [Filter]
-dsirFilters = lens _dsirFilters (\ s a -> s{_dsirFilters = a}) . _Default . _Coerce;
-
--- | One or more Spot instance request IDs.
-dsirSpotInstanceRequestIds :: Lens' DescribeSpotInstanceRequests [Text]
-dsirSpotInstanceRequestIds = lens _dsirSpotInstanceRequestIds (\ s a -> s{_dsirSpotInstanceRequestIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsirDryRun :: Lens' DescribeSpotInstanceRequests (Maybe Bool)
-dsirDryRun = lens _dsirDryRun (\ s a -> s{_dsirDryRun = a});
-
-instance AWSRequest DescribeSpotInstanceRequests
-         where
-        type Rs DescribeSpotInstanceRequests =
-             DescribeSpotInstanceRequestsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSpotInstanceRequestsResponse' <$>
-                   (x .@? "spotInstanceRequestSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSpotInstanceRequests
-
-instance NFData DescribeSpotInstanceRequests
-
-instance ToHeaders DescribeSpotInstanceRequests where
-        toHeaders = const mempty
-
-instance ToPath DescribeSpotInstanceRequests where
-        toPath = const "/"
-
-instance ToQuery DescribeSpotInstanceRequests where
-        toQuery DescribeSpotInstanceRequests'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSpotInstanceRequests" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dsirFilters),
-               toQuery
-                 (toQueryList "SpotInstanceRequestId" <$>
-                    _dsirSpotInstanceRequestIds),
-               "DryRun" =: _dsirDryRun]
-
--- | Contains the output of DescribeSpotInstanceRequests.
---
---
---
--- /See:/ 'describeSpotInstanceRequestsResponse' smart constructor.
-data DescribeSpotInstanceRequestsResponse = DescribeSpotInstanceRequestsResponse'
-    { _dsirrsSpotInstanceRequests :: !(Maybe [SpotInstanceRequest])
-    , _dsirrsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotInstanceRequestsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsirrsSpotInstanceRequests' - One or more Spot instance requests.
---
--- * 'dsirrsResponseStatus' - -- | The response status code.
-describeSpotInstanceRequestsResponse
-    :: Int -- ^ 'dsirrsResponseStatus'
-    -> DescribeSpotInstanceRequestsResponse
-describeSpotInstanceRequestsResponse pResponseStatus_ =
-    DescribeSpotInstanceRequestsResponse'
-    { _dsirrsSpotInstanceRequests = Nothing
-    , _dsirrsResponseStatus = pResponseStatus_
-    }
-
--- | One or more Spot instance requests.
-dsirrsSpotInstanceRequests :: Lens' DescribeSpotInstanceRequestsResponse [SpotInstanceRequest]
-dsirrsSpotInstanceRequests = lens _dsirrsSpotInstanceRequests (\ s a -> s{_dsirrsSpotInstanceRequests = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dsirrsResponseStatus :: Lens' DescribeSpotInstanceRequestsResponse Int
-dsirrsResponseStatus = lens _dsirrsResponseStatus (\ s a -> s{_dsirrsResponseStatus = a});
-
-instance NFData DescribeSpotInstanceRequestsResponse
diff --git a/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs b/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs
+++ /dev/null
@@ -1,241 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSpotPriceHistory
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the Spot price history. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances-history.html Spot Instance Pricing History> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- When you specify a start and end time, this operation returns the prices of the instance types within the time range that you specified and the time when the price changed. The price is valid within the time period that you specified; the response merely indicates the last time that the price changed.
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeSpotPriceHistory
-    (
-    -- * Creating a Request
-      describeSpotPriceHistory
-    , DescribeSpotPriceHistory
-    -- * Request Lenses
-    , dsphInstanceTypes
-    , dsphStartTime
-    , dsphFilters
-    , dsphNextToken
-    , dsphAvailabilityZone
-    , dsphEndTime
-    , dsphProductDescriptions
-    , dsphDryRun
-    , dsphMaxResults
-
-    -- * Destructuring the Response
-    , describeSpotPriceHistoryResponse
-    , DescribeSpotPriceHistoryResponse
-    -- * Response Lenses
-    , dsphrsNextToken
-    , dsphrsSpotPriceHistory
-    , dsphrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSpotPriceHistory.
---
---
---
--- /See:/ 'describeSpotPriceHistory' smart constructor.
-data DescribeSpotPriceHistory = DescribeSpotPriceHistory'
-    { _dsphInstanceTypes       :: !(Maybe [InstanceType])
-    , _dsphStartTime           :: !(Maybe ISO8601)
-    , _dsphFilters             :: !(Maybe [Filter])
-    , _dsphNextToken           :: !(Maybe Text)
-    , _dsphAvailabilityZone    :: !(Maybe Text)
-    , _dsphEndTime             :: !(Maybe ISO8601)
-    , _dsphProductDescriptions :: !(Maybe [Text])
-    , _dsphDryRun              :: !(Maybe Bool)
-    , _dsphMaxResults          :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotPriceHistory' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsphInstanceTypes' - Filters the results by the specified instance types. Note that T2 and HS1 instance types are not supported.
---
--- * 'dsphStartTime' - The date and time, up to the past 90 days, from which to start retrieving the price history data, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
---
--- * 'dsphFilters' - One or more filters.     * @availability-zone@ - The Availability Zone for which prices should be returned.     * @instance-type@ - The type of instance (for example, @m3.medium@ ).     * @product-description@ - The product description for the Spot price (@Linux/UNIX@ | @SUSE Linux@ | @Windows@ | @Linux/UNIX (Amazon VPC)@ | @SUSE Linux (Amazon VPC)@ | @Windows (Amazon VPC)@ ).     * @spot-price@ - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).     * @timestamp@ - The timestamp of the Spot price history, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). You can use wildcards (* and ?). Greater than or less than comparison is not supported.
---
--- * 'dsphNextToken' - The token for the next set of results.
---
--- * 'dsphAvailabilityZone' - Filters the results by the specified Availability Zone.
---
--- * 'dsphEndTime' - The date and time, up to the current date, from which to stop retrieving the price history data, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
---
--- * 'dsphProductDescriptions' - Filters the results by the specified basic product descriptions.
---
--- * 'dsphDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dsphMaxResults' - The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-describeSpotPriceHistory
-    :: DescribeSpotPriceHistory
-describeSpotPriceHistory =
-    DescribeSpotPriceHistory'
-    { _dsphInstanceTypes = Nothing
-    , _dsphStartTime = Nothing
-    , _dsphFilters = Nothing
-    , _dsphNextToken = Nothing
-    , _dsphAvailabilityZone = Nothing
-    , _dsphEndTime = Nothing
-    , _dsphProductDescriptions = Nothing
-    , _dsphDryRun = Nothing
-    , _dsphMaxResults = Nothing
-    }
-
--- | Filters the results by the specified instance types. Note that T2 and HS1 instance types are not supported.
-dsphInstanceTypes :: Lens' DescribeSpotPriceHistory [InstanceType]
-dsphInstanceTypes = lens _dsphInstanceTypes (\ s a -> s{_dsphInstanceTypes = a}) . _Default . _Coerce;
-
--- | The date and time, up to the past 90 days, from which to start retrieving the price history data, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-dsphStartTime :: Lens' DescribeSpotPriceHistory (Maybe UTCTime)
-dsphStartTime = lens _dsphStartTime (\ s a -> s{_dsphStartTime = a}) . mapping _Time;
-
--- | One or more filters.     * @availability-zone@ - The Availability Zone for which prices should be returned.     * @instance-type@ - The type of instance (for example, @m3.medium@ ).     * @product-description@ - The product description for the Spot price (@Linux/UNIX@ | @SUSE Linux@ | @Windows@ | @Linux/UNIX (Amazon VPC)@ | @SUSE Linux (Amazon VPC)@ | @Windows (Amazon VPC)@ ).     * @spot-price@ - The Spot price. The value must match exactly (or use wildcards; greater than or less than comparison is not supported).     * @timestamp@ - The timestamp of the Spot price history, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). You can use wildcards (* and ?). Greater than or less than comparison is not supported.
-dsphFilters :: Lens' DescribeSpotPriceHistory [Filter]
-dsphFilters = lens _dsphFilters (\ s a -> s{_dsphFilters = a}) . _Default . _Coerce;
-
--- | The token for the next set of results.
-dsphNextToken :: Lens' DescribeSpotPriceHistory (Maybe Text)
-dsphNextToken = lens _dsphNextToken (\ s a -> s{_dsphNextToken = a});
-
--- | Filters the results by the specified Availability Zone.
-dsphAvailabilityZone :: Lens' DescribeSpotPriceHistory (Maybe Text)
-dsphAvailabilityZone = lens _dsphAvailabilityZone (\ s a -> s{_dsphAvailabilityZone = a});
-
--- | The date and time, up to the current date, from which to stop retrieving the price history data, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-dsphEndTime :: Lens' DescribeSpotPriceHistory (Maybe UTCTime)
-dsphEndTime = lens _dsphEndTime (\ s a -> s{_dsphEndTime = a}) . mapping _Time;
-
--- | Filters the results by the specified basic product descriptions.
-dsphProductDescriptions :: Lens' DescribeSpotPriceHistory [Text]
-dsphProductDescriptions = lens _dsphProductDescriptions (\ s a -> s{_dsphProductDescriptions = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsphDryRun :: Lens' DescribeSpotPriceHistory (Maybe Bool)
-dsphDryRun = lens _dsphDryRun (\ s a -> s{_dsphDryRun = a});
-
--- | The maximum number of results to return in a single call. Specify a value between 1 and 1000. The default value is 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dsphMaxResults :: Lens' DescribeSpotPriceHistory (Maybe Int)
-dsphMaxResults = lens _dsphMaxResults (\ s a -> s{_dsphMaxResults = a});
-
-instance AWSPager DescribeSpotPriceHistory where
-        page rq rs
-          | stop (rs ^. dsphrsNextToken) = Nothing
-          | stop (rs ^. dsphrsSpotPriceHistory) = Nothing
-          | otherwise =
-            Just $ rq & dsphNextToken .~ rs ^. dsphrsNextToken
-
-instance AWSRequest DescribeSpotPriceHistory where
-        type Rs DescribeSpotPriceHistory =
-             DescribeSpotPriceHistoryResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSpotPriceHistoryResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "spotPriceHistorySet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSpotPriceHistory
-
-instance NFData DescribeSpotPriceHistory
-
-instance ToHeaders DescribeSpotPriceHistory where
-        toHeaders = const mempty
-
-instance ToPath DescribeSpotPriceHistory where
-        toPath = const "/"
-
-instance ToQuery DescribeSpotPriceHistory where
-        toQuery DescribeSpotPriceHistory'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeSpotPriceHistory" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "InstanceType" <$> _dsphInstanceTypes),
-               "StartTime" =: _dsphStartTime,
-               toQuery (toQueryList "Filter" <$> _dsphFilters),
-               "NextToken" =: _dsphNextToken,
-               "AvailabilityZone" =: _dsphAvailabilityZone,
-               "EndTime" =: _dsphEndTime,
-               toQuery
-                 (toQueryList "ProductDescription" <$>
-                    _dsphProductDescriptions),
-               "DryRun" =: _dsphDryRun,
-               "MaxResults" =: _dsphMaxResults]
-
--- | Contains the output of DescribeSpotPriceHistory.
---
---
---
--- /See:/ 'describeSpotPriceHistoryResponse' smart constructor.
-data DescribeSpotPriceHistoryResponse = DescribeSpotPriceHistoryResponse'
-    { _dsphrsNextToken        :: !(Maybe Text)
-    , _dsphrsSpotPriceHistory :: !(Maybe [SpotPrice])
-    , _dsphrsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSpotPriceHistoryResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsphrsNextToken' - The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
---
--- * 'dsphrsSpotPriceHistory' - The historical Spot prices.
---
--- * 'dsphrsResponseStatus' - -- | The response status code.
-describeSpotPriceHistoryResponse
-    :: Int -- ^ 'dsphrsResponseStatus'
-    -> DescribeSpotPriceHistoryResponse
-describeSpotPriceHistoryResponse pResponseStatus_ =
-    DescribeSpotPriceHistoryResponse'
-    { _dsphrsNextToken = Nothing
-    , _dsphrsSpotPriceHistory = Nothing
-    , _dsphrsResponseStatus = pResponseStatus_
-    }
-
--- | The token required to retrieve the next set of results. This value is @null@ when there are no more results to return.
-dsphrsNextToken :: Lens' DescribeSpotPriceHistoryResponse (Maybe Text)
-dsphrsNextToken = lens _dsphrsNextToken (\ s a -> s{_dsphrsNextToken = a});
-
--- | The historical Spot prices.
-dsphrsSpotPriceHistory :: Lens' DescribeSpotPriceHistoryResponse [SpotPrice]
-dsphrsSpotPriceHistory = lens _dsphrsSpotPriceHistory (\ s a -> s{_dsphrsSpotPriceHistory = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dsphrsResponseStatus :: Lens' DescribeSpotPriceHistoryResponse Int
-dsphrsResponseStatus = lens _dsphrsResponseStatus (\ s a -> s{_dsphrsResponseStatus = a});
-
-instance NFData DescribeSpotPriceHistoryResponse
diff --git a/gen/Network/AWS/EC2/DescribeStaleSecurityGroups.hs b/gen/Network/AWS/EC2/DescribeStaleSecurityGroups.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeStaleSecurityGroups.hs
+++ /dev/null
@@ -1,169 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeStaleSecurityGroups
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- [EC2-VPC only] Describes the stale security group rules for security groups in a specified VPC. Rules are stale when they reference a deleted security group in a peer VPC, or a security group in a peer VPC for which the VPC peering connection has been deleted.
---
---
-module Network.AWS.EC2.DescribeStaleSecurityGroups
-    (
-    -- * Creating a Request
-      describeStaleSecurityGroups
-    , DescribeStaleSecurityGroups
-    -- * Request Lenses
-    , dssgNextToken
-    , dssgDryRun
-    , dssgMaxResults
-    , dssgVPCId
-
-    -- * Destructuring the Response
-    , describeStaleSecurityGroupsResponse
-    , DescribeStaleSecurityGroupsResponse
-    -- * Response Lenses
-    , dssgrsStaleSecurityGroupSet
-    , dssgrsNextToken
-    , dssgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'describeStaleSecurityGroups' smart constructor.
-data DescribeStaleSecurityGroups = DescribeStaleSecurityGroups'
-    { _dssgNextToken  :: !(Maybe Text)
-    , _dssgDryRun     :: !(Maybe Bool)
-    , _dssgMaxResults :: !(Maybe Nat)
-    , _dssgVPCId      :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeStaleSecurityGroups' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dssgNextToken' - The token for the next set of items to return. (You received this token from a prior call.)
---
--- * 'dssgDryRun' - Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.
---
--- * 'dssgMaxResults' - The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.
---
--- * 'dssgVPCId' - The ID of the VPC.
-describeStaleSecurityGroups
-    :: Text -- ^ 'dssgVPCId'
-    -> DescribeStaleSecurityGroups
-describeStaleSecurityGroups pVPCId_ =
-    DescribeStaleSecurityGroups'
-    { _dssgNextToken = Nothing
-    , _dssgDryRun = Nothing
-    , _dssgMaxResults = Nothing
-    , _dssgVPCId = pVPCId_
-    }
-
--- | The token for the next set of items to return. (You received this token from a prior call.)
-dssgNextToken :: Lens' DescribeStaleSecurityGroups (Maybe Text)
-dssgNextToken = lens _dssgNextToken (\ s a -> s{_dssgNextToken = a});
-
--- | Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is DryRunOperation. Otherwise, it is UnauthorizedOperation.
-dssgDryRun :: Lens' DescribeStaleSecurityGroups (Maybe Bool)
-dssgDryRun = lens _dssgDryRun (\ s a -> s{_dssgDryRun = a});
-
--- | The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.
-dssgMaxResults :: Lens' DescribeStaleSecurityGroups (Maybe Natural)
-dssgMaxResults = lens _dssgMaxResults (\ s a -> s{_dssgMaxResults = a}) . mapping _Nat;
-
--- | The ID of the VPC.
-dssgVPCId :: Lens' DescribeStaleSecurityGroups Text
-dssgVPCId = lens _dssgVPCId (\ s a -> s{_dssgVPCId = a});
-
-instance AWSRequest DescribeStaleSecurityGroups where
-        type Rs DescribeStaleSecurityGroups =
-             DescribeStaleSecurityGroupsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeStaleSecurityGroupsResponse' <$>
-                   (x .@? "staleSecurityGroupSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeStaleSecurityGroups
-
-instance NFData DescribeStaleSecurityGroups
-
-instance ToHeaders DescribeStaleSecurityGroups where
-        toHeaders = const mempty
-
-instance ToPath DescribeStaleSecurityGroups where
-        toPath = const "/"
-
-instance ToQuery DescribeStaleSecurityGroups where
-        toQuery DescribeStaleSecurityGroups'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeStaleSecurityGroups" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dssgNextToken,
-               "DryRun" =: _dssgDryRun,
-               "MaxResults" =: _dssgMaxResults,
-               "VpcId" =: _dssgVPCId]
-
--- | /See:/ 'describeStaleSecurityGroupsResponse' smart constructor.
-data DescribeStaleSecurityGroupsResponse = DescribeStaleSecurityGroupsResponse'
-    { _dssgrsStaleSecurityGroupSet :: !(Maybe [StaleSecurityGroup])
-    , _dssgrsNextToken             :: !(Maybe Text)
-    , _dssgrsResponseStatus        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeStaleSecurityGroupsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dssgrsStaleSecurityGroupSet' - Information about the stale security groups.
---
--- * 'dssgrsNextToken' - The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
---
--- * 'dssgrsResponseStatus' - -- | The response status code.
-describeStaleSecurityGroupsResponse
-    :: Int -- ^ 'dssgrsResponseStatus'
-    -> DescribeStaleSecurityGroupsResponse
-describeStaleSecurityGroupsResponse pResponseStatus_ =
-    DescribeStaleSecurityGroupsResponse'
-    { _dssgrsStaleSecurityGroupSet = Nothing
-    , _dssgrsNextToken = Nothing
-    , _dssgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the stale security groups.
-dssgrsStaleSecurityGroupSet :: Lens' DescribeStaleSecurityGroupsResponse [StaleSecurityGroup]
-dssgrsStaleSecurityGroupSet = lens _dssgrsStaleSecurityGroupSet (\ s a -> s{_dssgrsStaleSecurityGroupSet = a}) . _Default . _Coerce;
-
--- | The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
-dssgrsNextToken :: Lens' DescribeStaleSecurityGroupsResponse (Maybe Text)
-dssgrsNextToken = lens _dssgrsNextToken (\ s a -> s{_dssgrsNextToken = a});
-
--- | -- | The response status code.
-dssgrsResponseStatus :: Lens' DescribeStaleSecurityGroupsResponse Int
-dssgrsResponseStatus = lens _dssgrsResponseStatus (\ s a -> s{_dssgrsResponseStatus = a});
-
-instance NFData DescribeStaleSecurityGroupsResponse
diff --git a/gen/Network/AWS/EC2/DescribeSubnets.hs b/gen/Network/AWS/EC2/DescribeSubnets.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeSubnets.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeSubnets
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your subnets.
---
---
--- For more information about subnets, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html Your VPC and Subnets> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeSubnets
-    (
-    -- * Creating a Request
-      describeSubnets
-    , DescribeSubnets
-    -- * Request Lenses
-    , dsSubnetIds
-    , dsFilters
-    , dsDryRun
-
-    -- * Destructuring the Response
-    , describeSubnetsResponse
-    , DescribeSubnetsResponse
-    -- * Response Lenses
-    , dsrsSubnets
-    , dsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeSubnets.
---
---
---
--- /See:/ 'describeSubnets' smart constructor.
-data DescribeSubnets = DescribeSubnets'
-    { _dsSubnetIds :: !(Maybe [Text])
-    , _dsFilters   :: !(Maybe [Filter])
-    , _dsDryRun    :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSubnets' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsSubnetIds' - One or more subnet IDs. Default: Describes all your subnets.
---
--- * 'dsFilters' - One or more filters.     * @availabilityZone@ - The Availability Zone for the subnet. You can also use @availability-zone@ as the filter name.     * @available-ip-address-count@ - The number of IPv4 addresses in the subnet that are available.     * @cidrBlock@ - The IPv4 CIDR block of the subnet. The CIDR block you specify must exactly match the subnet's CIDR block for information to be returned for the subnet. You can also use @cidr@ or @cidr-block@ as the filter names.     * @defaultForAz@ - Indicates whether this is the default subnet for the Availability Zone. You can also use @default-for-az@ as the filter name.     * @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block associated with the subnet.     * @ipv6-cidr-block-association.association-id@ - An association ID for an IPv6 CIDR block associated with the subnet.     * @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR block associated with the subnet.     * @state@ - The state of the subnet (@pending@ | @available@ ).     * @subnet-id@ - The ID of the subnet.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the subnet.
---
--- * 'dsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeSubnets
-    :: DescribeSubnets
-describeSubnets =
-    DescribeSubnets'
-    { _dsSubnetIds = Nothing
-    , _dsFilters = Nothing
-    , _dsDryRun = Nothing
-    }
-
--- | One or more subnet IDs. Default: Describes all your subnets.
-dsSubnetIds :: Lens' DescribeSubnets [Text]
-dsSubnetIds = lens _dsSubnetIds (\ s a -> s{_dsSubnetIds = a}) . _Default . _Coerce;
-
--- | One or more filters.     * @availabilityZone@ - The Availability Zone for the subnet. You can also use @availability-zone@ as the filter name.     * @available-ip-address-count@ - The number of IPv4 addresses in the subnet that are available.     * @cidrBlock@ - The IPv4 CIDR block of the subnet. The CIDR block you specify must exactly match the subnet's CIDR block for information to be returned for the subnet. You can also use @cidr@ or @cidr-block@ as the filter names.     * @defaultForAz@ - Indicates whether this is the default subnet for the Availability Zone. You can also use @default-for-az@ as the filter name.     * @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block associated with the subnet.     * @ipv6-cidr-block-association.association-id@ - An association ID for an IPv6 CIDR block associated with the subnet.     * @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR block associated with the subnet.     * @state@ - The state of the subnet (@pending@ | @available@ ).     * @subnet-id@ - The ID of the subnet.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC for the subnet.
-dsFilters :: Lens' DescribeSubnets [Filter]
-dsFilters = lens _dsFilters (\ s a -> s{_dsFilters = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dsDryRun :: Lens' DescribeSubnets (Maybe Bool)
-dsDryRun = lens _dsDryRun (\ s a -> s{_dsDryRun = a});
-
-instance AWSRequest DescribeSubnets where
-        type Rs DescribeSubnets = DescribeSubnetsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeSubnetsResponse' <$>
-                   (x .@? "subnetSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSubnets
-
-instance NFData DescribeSubnets
-
-instance ToHeaders DescribeSubnets where
-        toHeaders = const mempty
-
-instance ToPath DescribeSubnets where
-        toPath = const "/"
-
-instance ToQuery DescribeSubnets where
-        toQuery DescribeSubnets'{..}
-          = mconcat
-              ["Action" =: ("DescribeSubnets" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "SubnetId" <$> _dsSubnetIds),
-               toQuery (toQueryList "Filter" <$> _dsFilters),
-               "DryRun" =: _dsDryRun]
-
--- | Contains the output of DescribeSubnets.
---
---
---
--- /See:/ 'describeSubnetsResponse' smart constructor.
-data DescribeSubnetsResponse = DescribeSubnetsResponse'
-    { _dsrsSubnets        :: !(Maybe [Subnet])
-    , _dsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeSubnetsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrsSubnets' - Information about one or more subnets.
---
--- * 'dsrsResponseStatus' - -- | The response status code.
-describeSubnetsResponse
-    :: Int -- ^ 'dsrsResponseStatus'
-    -> DescribeSubnetsResponse
-describeSubnetsResponse pResponseStatus_ =
-    DescribeSubnetsResponse'
-    { _dsrsSubnets = Nothing
-    , _dsrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more subnets.
-dsrsSubnets :: Lens' DescribeSubnetsResponse [Subnet]
-dsrsSubnets = lens _dsrsSubnets (\ s a -> s{_dsrsSubnets = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dsrsResponseStatus :: Lens' DescribeSubnetsResponse Int
-dsrsResponseStatus = lens _dsrsResponseStatus (\ s a -> s{_dsrsResponseStatus = a});
-
-instance NFData DescribeSubnetsResponse
diff --git a/gen/Network/AWS/EC2/DescribeTags.hs b/gen/Network/AWS/EC2/DescribeTags.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeTags.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeTags
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of the tags for your EC2 resources.
---
---
--- For more information about tags, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging Your Resources> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeTags
-    (
-    -- * Creating a Request
-      describeTags
-    , DescribeTags
-    -- * Request Lenses
-    , dtFilters
-    , dtNextToken
-    , dtDryRun
-    , dtMaxResults
-
-    -- * Destructuring the Response
-    , describeTagsResponse
-    , DescribeTagsResponse
-    -- * Response Lenses
-    , dtrsNextToken
-    , dtrsTags
-    , dtrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeTags.
---
---
---
--- /See:/ 'describeTags' smart constructor.
-data DescribeTags = DescribeTags'
-    { _dtFilters    :: !(Maybe [Filter])
-    , _dtNextToken  :: !(Maybe Text)
-    , _dtDryRun     :: !(Maybe Bool)
-    , _dtMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeTags' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtFilters' - One or more filters.     * @key@ - The tag key.     * @resource-id@ - The resource ID.     * @resource-type@ - The resource type (@customer-gateway@ | @dhcp-options@ | @image@ | @instance@ | @internet-gateway@ | @network-acl@ | @network-interface@ | @reserved-instances@ | @route-table@ | @security-group@ | @snapshot@ | @spot-instances-request@ | @subnet@ | @volume@ | @vpc@ | @vpn-connection@ | @vpn-gateway@ ).     * @value@ - The tag value.
---
--- * 'dtNextToken' - The token to retrieve the next page of results.
---
--- * 'dtDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dtMaxResults' - The maximum number of results to return in a single call. This value can be between 5 and 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-describeTags
-    :: DescribeTags
-describeTags =
-    DescribeTags'
-    { _dtFilters = Nothing
-    , _dtNextToken = Nothing
-    , _dtDryRun = Nothing
-    , _dtMaxResults = Nothing
-    }
-
--- | One or more filters.     * @key@ - The tag key.     * @resource-id@ - The resource ID.     * @resource-type@ - The resource type (@customer-gateway@ | @dhcp-options@ | @image@ | @instance@ | @internet-gateway@ | @network-acl@ | @network-interface@ | @reserved-instances@ | @route-table@ | @security-group@ | @snapshot@ | @spot-instances-request@ | @subnet@ | @volume@ | @vpc@ | @vpn-connection@ | @vpn-gateway@ ).     * @value@ - The tag value.
-dtFilters :: Lens' DescribeTags [Filter]
-dtFilters = lens _dtFilters (\ s a -> s{_dtFilters = a}) . _Default . _Coerce;
-
--- | The token to retrieve the next page of results.
-dtNextToken :: Lens' DescribeTags (Maybe Text)
-dtNextToken = lens _dtNextToken (\ s a -> s{_dtNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dtDryRun :: Lens' DescribeTags (Maybe Bool)
-dtDryRun = lens _dtDryRun (\ s a -> s{_dtDryRun = a});
-
--- | The maximum number of results to return in a single call. This value can be between 5 and 1000. To retrieve the remaining results, make another call with the returned @NextToken@ value.
-dtMaxResults :: Lens' DescribeTags (Maybe Int)
-dtMaxResults = lens _dtMaxResults (\ s a -> s{_dtMaxResults = a});
-
-instance AWSPager DescribeTags where
-        page rq rs
-          | stop (rs ^. dtrsNextToken) = Nothing
-          | stop (rs ^. dtrsTags) = Nothing
-          | otherwise =
-            Just $ rq & dtNextToken .~ rs ^. dtrsNextToken
-
-instance AWSRequest DescribeTags where
-        type Rs DescribeTags = DescribeTagsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeTagsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "tagSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeTags
-
-instance NFData DescribeTags
-
-instance ToHeaders DescribeTags where
-        toHeaders = const mempty
-
-instance ToPath DescribeTags where
-        toPath = const "/"
-
-instance ToQuery DescribeTags where
-        toQuery DescribeTags'{..}
-          = mconcat
-              ["Action" =: ("DescribeTags" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dtFilters),
-               "NextToken" =: _dtNextToken, "DryRun" =: _dtDryRun,
-               "MaxResults" =: _dtMaxResults]
-
--- | Contains the output of DescribeTags.
---
---
---
--- /See:/ 'describeTagsResponse' smart constructor.
-data DescribeTagsResponse = DescribeTagsResponse'
-    { _dtrsNextToken      :: !(Maybe Text)
-    , _dtrsTags           :: !(Maybe [TagDescription])
-    , _dtrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeTagsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return..
---
--- * 'dtrsTags' - A list of tags.
---
--- * 'dtrsResponseStatus' - -- | The response status code.
-describeTagsResponse
-    :: Int -- ^ 'dtrsResponseStatus'
-    -> DescribeTagsResponse
-describeTagsResponse pResponseStatus_ =
-    DescribeTagsResponse'
-    { _dtrsNextToken = Nothing
-    , _dtrsTags = Nothing
-    , _dtrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return..
-dtrsNextToken :: Lens' DescribeTagsResponse (Maybe Text)
-dtrsNextToken = lens _dtrsNextToken (\ s a -> s{_dtrsNextToken = a});
-
--- | A list of tags.
-dtrsTags :: Lens' DescribeTagsResponse [TagDescription]
-dtrsTags = lens _dtrsTags (\ s a -> s{_dtrsTags = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dtrsResponseStatus :: Lens' DescribeTagsResponse Int
-dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a});
-
-instance NFData DescribeTagsResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCAttribute.hs b/gen/Network/AWS/EC2/DescribeVPCAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCAttribute.hs
+++ /dev/null
@@ -1,175 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified attribute of the specified VPC. You can specify only one attribute at a time.
---
---
-module Network.AWS.EC2.DescribeVPCAttribute
-    (
-    -- * Creating a Request
-      describeVPCAttribute
-    , DescribeVPCAttribute
-    -- * Request Lenses
-    , dvpcaDryRun
-    , dvpcaVPCId
-    , dvpcaAttribute
-
-    -- * Destructuring the Response
-    , describeVPCAttributeResponse
-    , DescribeVPCAttributeResponse
-    -- * Response Lenses
-    , dvpcarsEnableDNSHostnames
-    , dvpcarsEnableDNSSupport
-    , dvpcarsVPCId
-    , dvpcarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcAttribute.
---
---
---
--- /See:/ 'describeVPCAttribute' smart constructor.
-data DescribeVPCAttribute = DescribeVPCAttribute'
-    { _dvpcaDryRun    :: !(Maybe Bool)
-    , _dvpcaVPCId     :: !Text
-    , _dvpcaAttribute :: !VPCAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvpcaVPCId' - The ID of the VPC.
---
--- * 'dvpcaAttribute' - The VPC attribute.
-describeVPCAttribute
-    :: Text -- ^ 'dvpcaVPCId'
-    -> VPCAttributeName -- ^ 'dvpcaAttribute'
-    -> DescribeVPCAttribute
-describeVPCAttribute pVPCId_ pAttribute_ =
-    DescribeVPCAttribute'
-    { _dvpcaDryRun = Nothing
-    , _dvpcaVPCId = pVPCId_
-    , _dvpcaAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpcaDryRun :: Lens' DescribeVPCAttribute (Maybe Bool)
-dvpcaDryRun = lens _dvpcaDryRun (\ s a -> s{_dvpcaDryRun = a});
-
--- | The ID of the VPC.
-dvpcaVPCId :: Lens' DescribeVPCAttribute Text
-dvpcaVPCId = lens _dvpcaVPCId (\ s a -> s{_dvpcaVPCId = a});
-
--- | The VPC attribute.
-dvpcaAttribute :: Lens' DescribeVPCAttribute VPCAttributeName
-dvpcaAttribute = lens _dvpcaAttribute (\ s a -> s{_dvpcaAttribute = a});
-
-instance AWSRequest DescribeVPCAttribute where
-        type Rs DescribeVPCAttribute =
-             DescribeVPCAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCAttributeResponse' <$>
-                   (x .@? "enableDnsHostnames") <*>
-                     (x .@? "enableDnsSupport")
-                     <*> (x .@? "vpcId")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCAttribute
-
-instance NFData DescribeVPCAttribute
-
-instance ToHeaders DescribeVPCAttribute where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCAttribute where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCAttribute where
-        toQuery DescribeVPCAttribute'{..}
-          = mconcat
-              ["Action" =: ("DescribeVpcAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvpcaDryRun, "VpcId" =: _dvpcaVPCId,
-               "Attribute" =: _dvpcaAttribute]
-
--- | Contains the output of DescribeVpcAttribute.
---
---
---
--- /See:/ 'describeVPCAttributeResponse' smart constructor.
-data DescribeVPCAttributeResponse = DescribeVPCAttributeResponse'
-    { _dvpcarsEnableDNSHostnames :: !(Maybe AttributeBooleanValue)
-    , _dvpcarsEnableDNSSupport   :: !(Maybe AttributeBooleanValue)
-    , _dvpcarsVPCId              :: !(Maybe Text)
-    , _dvpcarsResponseStatus     :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCAttributeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcarsEnableDNSHostnames' - Indicates whether the instances launched in the VPC get DNS hostnames. If this attribute is @true@ , instances in the VPC get DNS hostnames; otherwise, they do not.
---
--- * 'dvpcarsEnableDNSSupport' - Indicates whether DNS resolution is enabled for the VPC. If this attribute is @true@ , the Amazon DNS server resolves DNS hostnames for your instances to their corresponding IP addresses; otherwise, it does not.
---
--- * 'dvpcarsVPCId' - The ID of the VPC.
---
--- * 'dvpcarsResponseStatus' - -- | The response status code.
-describeVPCAttributeResponse
-    :: Int -- ^ 'dvpcarsResponseStatus'
-    -> DescribeVPCAttributeResponse
-describeVPCAttributeResponse pResponseStatus_ =
-    DescribeVPCAttributeResponse'
-    { _dvpcarsEnableDNSHostnames = Nothing
-    , _dvpcarsEnableDNSSupport = Nothing
-    , _dvpcarsVPCId = Nothing
-    , _dvpcarsResponseStatus = pResponseStatus_
-    }
-
--- | Indicates whether the instances launched in the VPC get DNS hostnames. If this attribute is @true@ , instances in the VPC get DNS hostnames; otherwise, they do not.
-dvpcarsEnableDNSHostnames :: Lens' DescribeVPCAttributeResponse (Maybe AttributeBooleanValue)
-dvpcarsEnableDNSHostnames = lens _dvpcarsEnableDNSHostnames (\ s a -> s{_dvpcarsEnableDNSHostnames = a});
-
--- | Indicates whether DNS resolution is enabled for the VPC. If this attribute is @true@ , the Amazon DNS server resolves DNS hostnames for your instances to their corresponding IP addresses; otherwise, it does not.
-dvpcarsEnableDNSSupport :: Lens' DescribeVPCAttributeResponse (Maybe AttributeBooleanValue)
-dvpcarsEnableDNSSupport = lens _dvpcarsEnableDNSSupport (\ s a -> s{_dvpcarsEnableDNSSupport = a});
-
--- | The ID of the VPC.
-dvpcarsVPCId :: Lens' DescribeVPCAttributeResponse (Maybe Text)
-dvpcarsVPCId = lens _dvpcarsVPCId (\ s a -> s{_dvpcarsVPCId = a});
-
--- | -- | The response status code.
-dvpcarsResponseStatus :: Lens' DescribeVPCAttributeResponse Int
-dvpcarsResponseStatus = lens _dvpcarsResponseStatus (\ s a -> s{_dvpcarsResponseStatus = a});
-
-instance NFData DescribeVPCAttributeResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs b/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCClassicLink
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the ClassicLink status of one or more VPCs.
---
---
-module Network.AWS.EC2.DescribeVPCClassicLink
-    (
-    -- * Creating a Request
-      describeVPCClassicLink
-    , DescribeVPCClassicLink
-    -- * Request Lenses
-    , dvclFilters
-    , dvclVPCIds
-    , dvclDryRun
-
-    -- * Destructuring the Response
-    , describeVPCClassicLinkResponse
-    , DescribeVPCClassicLinkResponse
-    -- * Response Lenses
-    , dvclrsVPCs
-    , dvclrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcClassicLink.
---
---
---
--- /See:/ 'describeVPCClassicLink' smart constructor.
-data DescribeVPCClassicLink = DescribeVPCClassicLink'
-    { _dvclFilters :: !(Maybe [Filter])
-    , _dvclVPCIds  :: !(Maybe [Text])
-    , _dvclDryRun  :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCClassicLink' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvclFilters' - One or more filters.     * @is-classic-link-enabled@ - Whether the VPC is enabled for ClassicLink (@true@ | @false@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
---
--- * 'dvclVPCIds' - One or more VPCs for which you want to describe the ClassicLink status.
---
--- * 'dvclDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeVPCClassicLink
-    :: DescribeVPCClassicLink
-describeVPCClassicLink =
-    DescribeVPCClassicLink'
-    { _dvclFilters = Nothing
-    , _dvclVPCIds = Nothing
-    , _dvclDryRun = Nothing
-    }
-
--- | One or more filters.     * @is-classic-link-enabled@ - Whether the VPC is enabled for ClassicLink (@true@ | @false@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.
-dvclFilters :: Lens' DescribeVPCClassicLink [Filter]
-dvclFilters = lens _dvclFilters (\ s a -> s{_dvclFilters = a}) . _Default . _Coerce;
-
--- | One or more VPCs for which you want to describe the ClassicLink status.
-dvclVPCIds :: Lens' DescribeVPCClassicLink [Text]
-dvclVPCIds = lens _dvclVPCIds (\ s a -> s{_dvclVPCIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvclDryRun :: Lens' DescribeVPCClassicLink (Maybe Bool)
-dvclDryRun = lens _dvclDryRun (\ s a -> s{_dvclDryRun = a});
-
-instance AWSRequest DescribeVPCClassicLink where
-        type Rs DescribeVPCClassicLink =
-             DescribeVPCClassicLinkResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCClassicLinkResponse' <$>
-                   (x .@? "vpcSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCClassicLink
-
-instance NFData DescribeVPCClassicLink
-
-instance ToHeaders DescribeVPCClassicLink where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCClassicLink where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCClassicLink where
-        toQuery DescribeVPCClassicLink'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeVpcClassicLink" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvclFilters),
-               toQuery (toQueryList "VpcId" <$> _dvclVPCIds),
-               "DryRun" =: _dvclDryRun]
-
--- | Contains the output of DescribeVpcClassicLink.
---
---
---
--- /See:/ 'describeVPCClassicLinkResponse' smart constructor.
-data DescribeVPCClassicLinkResponse = DescribeVPCClassicLinkResponse'
-    { _dvclrsVPCs           :: !(Maybe [VPCClassicLink])
-    , _dvclrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCClassicLinkResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvclrsVPCs' - The ClassicLink status of one or more VPCs.
---
--- * 'dvclrsResponseStatus' - -- | The response status code.
-describeVPCClassicLinkResponse
-    :: Int -- ^ 'dvclrsResponseStatus'
-    -> DescribeVPCClassicLinkResponse
-describeVPCClassicLinkResponse pResponseStatus_ =
-    DescribeVPCClassicLinkResponse'
-    { _dvclrsVPCs = Nothing
-    , _dvclrsResponseStatus = pResponseStatus_
-    }
-
--- | The ClassicLink status of one or more VPCs.
-dvclrsVPCs :: Lens' DescribeVPCClassicLinkResponse [VPCClassicLink]
-dvclrsVPCs = lens _dvclrsVPCs (\ s a -> s{_dvclrsVPCs = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvclrsResponseStatus :: Lens' DescribeVPCClassicLinkResponse Int
-dvclrsResponseStatus = lens _dvclrsResponseStatus (\ s a -> s{_dvclrsResponseStatus = a});
-
-instance NFData DescribeVPCClassicLinkResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCClassicLinkDNSSupport.hs b/gen/Network/AWS/EC2/DescribeVPCClassicLinkDNSSupport.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCClassicLinkDNSSupport.hs
+++ /dev/null
@@ -1,171 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the ClassicLink DNS support status of one or more VPCs. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information about ClassicLink, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink> in the Amazon Elastic Compute Cloud User Guide.
---
---
-module Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
-    (
-    -- * Creating a Request
-      describeVPCClassicLinkDNSSupport
-    , DescribeVPCClassicLinkDNSSupport
-    -- * Request Lenses
-    , dvcldsNextToken
-    , dvcldsVPCIds
-    , dvcldsMaxResults
-
-    -- * Destructuring the Response
-    , describeVPCClassicLinkDNSSupportResponse
-    , DescribeVPCClassicLinkDNSSupportResponse
-    -- * Response Lenses
-    , dvpccldnssrsVPCs
-    , dvpccldnssrsNextToken
-    , dvpccldnssrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcClassicLinkDnsSupport.
---
---
---
--- /See:/ 'describeVPCClassicLinkDNSSupport' smart constructor.
-data DescribeVPCClassicLinkDNSSupport = DescribeVPCClassicLinkDNSSupport'
-    { _dvcldsNextToken  :: !(Maybe Text)
-    , _dvcldsVPCIds     :: !(Maybe [Text])
-    , _dvcldsMaxResults :: !(Maybe Nat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCClassicLinkDNSSupport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcldsNextToken' - The token for the next set of items to return. (You received this token from a prior call.)
---
--- * 'dvcldsVPCIds' - One or more VPC IDs.
---
--- * 'dvcldsMaxResults' - The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.
-describeVPCClassicLinkDNSSupport
-    :: DescribeVPCClassicLinkDNSSupport
-describeVPCClassicLinkDNSSupport =
-    DescribeVPCClassicLinkDNSSupport'
-    { _dvcldsNextToken = Nothing
-    , _dvcldsVPCIds = Nothing
-    , _dvcldsMaxResults = Nothing
-    }
-
--- | The token for the next set of items to return. (You received this token from a prior call.)
-dvcldsNextToken :: Lens' DescribeVPCClassicLinkDNSSupport (Maybe Text)
-dvcldsNextToken = lens _dvcldsNextToken (\ s a -> s{_dvcldsNextToken = a});
-
--- | One or more VPC IDs.
-dvcldsVPCIds :: Lens' DescribeVPCClassicLinkDNSSupport [Text]
-dvcldsVPCIds = lens _dvcldsVPCIds (\ s a -> s{_dvcldsVPCIds = a}) . _Default . _Coerce;
-
--- | The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results.
-dvcldsMaxResults :: Lens' DescribeVPCClassicLinkDNSSupport (Maybe Natural)
-dvcldsMaxResults = lens _dvcldsMaxResults (\ s a -> s{_dvcldsMaxResults = a}) . mapping _Nat;
-
-instance AWSRequest DescribeVPCClassicLinkDNSSupport
-         where
-        type Rs DescribeVPCClassicLinkDNSSupport =
-             DescribeVPCClassicLinkDNSSupportResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCClassicLinkDNSSupportResponse' <$>
-                   (x .@? "vpcs" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCClassicLinkDNSSupport
-
-instance NFData DescribeVPCClassicLinkDNSSupport
-
-instance ToHeaders DescribeVPCClassicLinkDNSSupport
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCClassicLinkDNSSupport
-         where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCClassicLinkDNSSupport
-         where
-        toQuery DescribeVPCClassicLinkDNSSupport'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeVpcClassicLinkDnsSupport" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dvcldsNextToken,
-               toQuery (toQueryList "VpcIds" <$> _dvcldsVPCIds),
-               "MaxResults" =: _dvcldsMaxResults]
-
--- | Contains the output of DescribeVpcClassicLinkDnsSupport.
---
---
---
--- /See:/ 'describeVPCClassicLinkDNSSupportResponse' smart constructor.
-data DescribeVPCClassicLinkDNSSupportResponse = DescribeVPCClassicLinkDNSSupportResponse'
-    { _dvpccldnssrsVPCs           :: !(Maybe [ClassicLinkDNSSupport])
-    , _dvpccldnssrsNextToken      :: !(Maybe Text)
-    , _dvpccldnssrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCClassicLinkDNSSupportResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpccldnssrsVPCs' - Information about the ClassicLink DNS support status of the VPCs.
---
--- * 'dvpccldnssrsNextToken' - The token to use when requesting the next set of items.
---
--- * 'dvpccldnssrsResponseStatus' - -- | The response status code.
-describeVPCClassicLinkDNSSupportResponse
-    :: Int -- ^ 'dvpccldnssrsResponseStatus'
-    -> DescribeVPCClassicLinkDNSSupportResponse
-describeVPCClassicLinkDNSSupportResponse pResponseStatus_ =
-    DescribeVPCClassicLinkDNSSupportResponse'
-    { _dvpccldnssrsVPCs = Nothing
-    , _dvpccldnssrsNextToken = Nothing
-    , _dvpccldnssrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the ClassicLink DNS support status of the VPCs.
-dvpccldnssrsVPCs :: Lens' DescribeVPCClassicLinkDNSSupportResponse [ClassicLinkDNSSupport]
-dvpccldnssrsVPCs = lens _dvpccldnssrsVPCs (\ s a -> s{_dvpccldnssrsVPCs = a}) . _Default . _Coerce;
-
--- | The token to use when requesting the next set of items.
-dvpccldnssrsNextToken :: Lens' DescribeVPCClassicLinkDNSSupportResponse (Maybe Text)
-dvpccldnssrsNextToken = lens _dvpccldnssrsNextToken (\ s a -> s{_dvpccldnssrsNextToken = a});
-
--- | -- | The response status code.
-dvpccldnssrsResponseStatus :: Lens' DescribeVPCClassicLinkDNSSupportResponse Int
-dvpccldnssrsResponseStatus = lens _dvpccldnssrsResponseStatus (\ s a -> s{_dvpccldnssrsResponseStatus = a});
-
-instance NFData
-         DescribeVPCClassicLinkDNSSupportResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs b/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCEndpointServices
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes all supported AWS services that can be specified when creating a VPC endpoint.
---
---
-module Network.AWS.EC2.DescribeVPCEndpointServices
-    (
-    -- * Creating a Request
-      describeVPCEndpointServices
-    , DescribeVPCEndpointServices
-    -- * Request Lenses
-    , dvesNextToken
-    , dvesDryRun
-    , dvesMaxResults
-
-    -- * Destructuring the Response
-    , describeVPCEndpointServicesResponse
-    , DescribeVPCEndpointServicesResponse
-    -- * Response Lenses
-    , dvesrsServiceNames
-    , dvesrsNextToken
-    , dvesrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcEndpointServices.
---
---
---
--- /See:/ 'describeVPCEndpointServices' smart constructor.
-data DescribeVPCEndpointServices = DescribeVPCEndpointServices'
-    { _dvesNextToken  :: !(Maybe Text)
-    , _dvesDryRun     :: !(Maybe Bool)
-    , _dvesMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCEndpointServices' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvesNextToken' - The token for the next set of items to return. (You received this token from a prior call.)
---
--- * 'dvesDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvesMaxResults' - The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value is greater than 1000, we return only 1000 items.
-describeVPCEndpointServices
-    :: DescribeVPCEndpointServices
-describeVPCEndpointServices =
-    DescribeVPCEndpointServices'
-    { _dvesNextToken = Nothing
-    , _dvesDryRun = Nothing
-    , _dvesMaxResults = Nothing
-    }
-
--- | The token for the next set of items to return. (You received this token from a prior call.)
-dvesNextToken :: Lens' DescribeVPCEndpointServices (Maybe Text)
-dvesNextToken = lens _dvesNextToken (\ s a -> s{_dvesNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvesDryRun :: Lens' DescribeVPCEndpointServices (Maybe Bool)
-dvesDryRun = lens _dvesDryRun (\ s a -> s{_dvesDryRun = a});
-
--- | The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value is greater than 1000, we return only 1000 items.
-dvesMaxResults :: Lens' DescribeVPCEndpointServices (Maybe Int)
-dvesMaxResults = lens _dvesMaxResults (\ s a -> s{_dvesMaxResults = a});
-
-instance AWSRequest DescribeVPCEndpointServices where
-        type Rs DescribeVPCEndpointServices =
-             DescribeVPCEndpointServicesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCEndpointServicesResponse' <$>
-                   (x .@? "serviceNameSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (x .@? "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCEndpointServices
-
-instance NFData DescribeVPCEndpointServices
-
-instance ToHeaders DescribeVPCEndpointServices where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCEndpointServices where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCEndpointServices where
-        toQuery DescribeVPCEndpointServices'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeVpcEndpointServices" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NextToken" =: _dvesNextToken,
-               "DryRun" =: _dvesDryRun,
-               "MaxResults" =: _dvesMaxResults]
-
--- | Contains the output of DescribeVpcEndpointServices.
---
---
---
--- /See:/ 'describeVPCEndpointServicesResponse' smart constructor.
-data DescribeVPCEndpointServicesResponse = DescribeVPCEndpointServicesResponse'
-    { _dvesrsServiceNames   :: !(Maybe [Text])
-    , _dvesrsNextToken      :: !(Maybe Text)
-    , _dvesrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCEndpointServicesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvesrsServiceNames' - A list of supported AWS services.
---
--- * 'dvesrsNextToken' - The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
---
--- * 'dvesrsResponseStatus' - -- | The response status code.
-describeVPCEndpointServicesResponse
-    :: Int -- ^ 'dvesrsResponseStatus'
-    -> DescribeVPCEndpointServicesResponse
-describeVPCEndpointServicesResponse pResponseStatus_ =
-    DescribeVPCEndpointServicesResponse'
-    { _dvesrsServiceNames = Nothing
-    , _dvesrsNextToken = Nothing
-    , _dvesrsResponseStatus = pResponseStatus_
-    }
-
--- | A list of supported AWS services.
-dvesrsServiceNames :: Lens' DescribeVPCEndpointServicesResponse [Text]
-dvesrsServiceNames = lens _dvesrsServiceNames (\ s a -> s{_dvesrsServiceNames = a}) . _Default . _Coerce;
-
--- | The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
-dvesrsNextToken :: Lens' DescribeVPCEndpointServicesResponse (Maybe Text)
-dvesrsNextToken = lens _dvesrsNextToken (\ s a -> s{_dvesrsNextToken = a});
-
--- | -- | The response status code.
-dvesrsResponseStatus :: Lens' DescribeVPCEndpointServicesResponse Int
-dvesrsResponseStatus = lens _dvesrsResponseStatus (\ s a -> s{_dvesrsResponseStatus = a});
-
-instance NFData DescribeVPCEndpointServicesResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs b/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCEndpoints
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your VPC endpoints.
---
---
-module Network.AWS.EC2.DescribeVPCEndpoints
-    (
-    -- * Creating a Request
-      describeVPCEndpoints
-    , DescribeVPCEndpoints
-    -- * Request Lenses
-    , dvpceFilters
-    , dvpceNextToken
-    , dvpceVPCEndpointIds
-    , dvpceDryRun
-    , dvpceMaxResults
-
-    -- * Destructuring the Response
-    , describeVPCEndpointsResponse
-    , DescribeVPCEndpointsResponse
-    -- * Response Lenses
-    , dvpcersNextToken
-    , dvpcersVPCEndpoints
-    , dvpcersResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcEndpoints.
---
---
---
--- /See:/ 'describeVPCEndpoints' smart constructor.
-data DescribeVPCEndpoints = DescribeVPCEndpoints'
-    { _dvpceFilters        :: !(Maybe [Filter])
-    , _dvpceNextToken      :: !(Maybe Text)
-    , _dvpceVPCEndpointIds :: !(Maybe [Text])
-    , _dvpceDryRun         :: !(Maybe Bool)
-    , _dvpceMaxResults     :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCEndpoints' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpceFilters' - One or more filters.     * @service-name@ : The name of the AWS service.     * @vpc-id@ : The ID of the VPC in which the endpoint resides.     * @vpc-endpoint-id@ : The ID of the endpoint.     * @vpc-endpoint-state@ : The state of the endpoint. (@pending@ | @available@ | @deleting@ | @deleted@ )
---
--- * 'dvpceNextToken' - The token for the next set of items to return. (You received this token from a prior call.)
---
--- * 'dvpceVPCEndpointIds' - One or more endpoint IDs.
---
--- * 'dvpceDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvpceMaxResults' - The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value is greater than 1000, we return only 1000 items.
-describeVPCEndpoints
-    :: DescribeVPCEndpoints
-describeVPCEndpoints =
-    DescribeVPCEndpoints'
-    { _dvpceFilters = Nothing
-    , _dvpceNextToken = Nothing
-    , _dvpceVPCEndpointIds = Nothing
-    , _dvpceDryRun = Nothing
-    , _dvpceMaxResults = Nothing
-    }
-
--- | One or more filters.     * @service-name@ : The name of the AWS service.     * @vpc-id@ : The ID of the VPC in which the endpoint resides.     * @vpc-endpoint-id@ : The ID of the endpoint.     * @vpc-endpoint-state@ : The state of the endpoint. (@pending@ | @available@ | @deleting@ | @deleted@ )
-dvpceFilters :: Lens' DescribeVPCEndpoints [Filter]
-dvpceFilters = lens _dvpceFilters (\ s a -> s{_dvpceFilters = a}) . _Default . _Coerce;
-
--- | The token for the next set of items to return. (You received this token from a prior call.)
-dvpceNextToken :: Lens' DescribeVPCEndpoints (Maybe Text)
-dvpceNextToken = lens _dvpceNextToken (\ s a -> s{_dvpceNextToken = a});
-
--- | One or more endpoint IDs.
-dvpceVPCEndpointIds :: Lens' DescribeVPCEndpoints [Text]
-dvpceVPCEndpointIds = lens _dvpceVPCEndpointIds (\ s a -> s{_dvpceVPCEndpointIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpceDryRun :: Lens' DescribeVPCEndpoints (Maybe Bool)
-dvpceDryRun = lens _dvpceDryRun (\ s a -> s{_dvpceDryRun = a});
-
--- | The maximum number of items to return for this request. The request returns a token that you can specify in a subsequent call to get the next set of results. Constraint: If the value is greater than 1000, we return only 1000 items.
-dvpceMaxResults :: Lens' DescribeVPCEndpoints (Maybe Int)
-dvpceMaxResults = lens _dvpceMaxResults (\ s a -> s{_dvpceMaxResults = a});
-
-instance AWSRequest DescribeVPCEndpoints where
-        type Rs DescribeVPCEndpoints =
-             DescribeVPCEndpointsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCEndpointsResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "vpcEndpointSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCEndpoints
-
-instance NFData DescribeVPCEndpoints
-
-instance ToHeaders DescribeVPCEndpoints where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCEndpoints where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCEndpoints where
-        toQuery DescribeVPCEndpoints'{..}
-          = mconcat
-              ["Action" =: ("DescribeVpcEndpoints" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvpceFilters),
-               "NextToken" =: _dvpceNextToken,
-               toQuery
-                 (toQueryList "VpcEndpointId" <$>
-                    _dvpceVPCEndpointIds),
-               "DryRun" =: _dvpceDryRun,
-               "MaxResults" =: _dvpceMaxResults]
-
--- | Contains the output of DescribeVpcEndpoints.
---
---
---
--- /See:/ 'describeVPCEndpointsResponse' smart constructor.
-data DescribeVPCEndpointsResponse = DescribeVPCEndpointsResponse'
-    { _dvpcersNextToken      :: !(Maybe Text)
-    , _dvpcersVPCEndpoints   :: !(Maybe [VPCEndpoint])
-    , _dvpcersResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCEndpointsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcersNextToken' - The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
---
--- * 'dvpcersVPCEndpoints' - Information about the endpoints.
---
--- * 'dvpcersResponseStatus' - -- | The response status code.
-describeVPCEndpointsResponse
-    :: Int -- ^ 'dvpcersResponseStatus'
-    -> DescribeVPCEndpointsResponse
-describeVPCEndpointsResponse pResponseStatus_ =
-    DescribeVPCEndpointsResponse'
-    { _dvpcersNextToken = Nothing
-    , _dvpcersVPCEndpoints = Nothing
-    , _dvpcersResponseStatus = pResponseStatus_
-    }
-
--- | The token to use when requesting the next set of items. If there are no additional items to return, the string is empty.
-dvpcersNextToken :: Lens' DescribeVPCEndpointsResponse (Maybe Text)
-dvpcersNextToken = lens _dvpcersNextToken (\ s a -> s{_dvpcersNextToken = a});
-
--- | Information about the endpoints.
-dvpcersVPCEndpoints :: Lens' DescribeVPCEndpointsResponse [VPCEndpoint]
-dvpcersVPCEndpoints = lens _dvpcersVPCEndpoints (\ s a -> s{_dvpcersVPCEndpoints = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvpcersResponseStatus :: Lens' DescribeVPCEndpointsResponse Int
-dvpcersResponseStatus = lens _dvpcersResponseStatus (\ s a -> s{_dvpcersResponseStatus = a});
-
-instance NFData DescribeVPCEndpointsResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs b/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCPeeringConnections
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your VPC peering connections.
---
---
-module Network.AWS.EC2.DescribeVPCPeeringConnections
-    (
-    -- * Creating a Request
-      describeVPCPeeringConnections
-    , DescribeVPCPeeringConnections
-    -- * Request Lenses
-    , dvpcpcFilters
-    , dvpcpcVPCPeeringConnectionIds
-    , dvpcpcDryRun
-
-    -- * Destructuring the Response
-    , describeVPCPeeringConnectionsResponse
-    , DescribeVPCPeeringConnectionsResponse
-    -- * Response Lenses
-    , dvpcpcrsVPCPeeringConnections
-    , dvpcpcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcPeeringConnections.
---
---
---
--- /See:/ 'describeVPCPeeringConnections' smart constructor.
-data DescribeVPCPeeringConnections = DescribeVPCPeeringConnections'
-    { _dvpcpcFilters                 :: !(Maybe [Filter])
-    , _dvpcpcVPCPeeringConnectionIds :: !(Maybe [Text])
-    , _dvpcpcDryRun                  :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCPeeringConnections' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcpcFilters' - One or more filters.     * @accepter-vpc-info.cidr-block@ - The IPv4 CIDR block of the peer VPC.     * @accepter-vpc-info.owner-id@ - The AWS account ID of the owner of the peer VPC.     * @accepter-vpc-info.vpc-id@ - The ID of the peer VPC.     * @expiration-time@ - The expiration date and time for the VPC peering connection.     * @requester-vpc-info.cidr-block@ - The IPv4 CIDR block of the requester's VPC.     * @requester-vpc-info.owner-id@ - The AWS account ID of the owner of the requester VPC.     * @requester-vpc-info.vpc-id@ - The ID of the requester VPC.     * @status-code@ - The status of the VPC peering connection (@pending-acceptance@ | @failed@ | @expired@ | @provisioning@ | @active@ | @deleted@ | @rejected@ ).     * @status-message@ - A message that provides more information about the status of the VPC peering connection, if applicable.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-peering-connection-id@ - The ID of the VPC peering connection.
---
--- * 'dvpcpcVPCPeeringConnectionIds' - One or more VPC peering connection IDs. Default: Describes all your VPC peering connections.
---
--- * 'dvpcpcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeVPCPeeringConnections
-    :: DescribeVPCPeeringConnections
-describeVPCPeeringConnections =
-    DescribeVPCPeeringConnections'
-    { _dvpcpcFilters = Nothing
-    , _dvpcpcVPCPeeringConnectionIds = Nothing
-    , _dvpcpcDryRun = Nothing
-    }
-
--- | One or more filters.     * @accepter-vpc-info.cidr-block@ - The IPv4 CIDR block of the peer VPC.     * @accepter-vpc-info.owner-id@ - The AWS account ID of the owner of the peer VPC.     * @accepter-vpc-info.vpc-id@ - The ID of the peer VPC.     * @expiration-time@ - The expiration date and time for the VPC peering connection.     * @requester-vpc-info.cidr-block@ - The IPv4 CIDR block of the requester's VPC.     * @requester-vpc-info.owner-id@ - The AWS account ID of the owner of the requester VPC.     * @requester-vpc-info.vpc-id@ - The ID of the requester VPC.     * @status-code@ - The status of the VPC peering connection (@pending-acceptance@ | @failed@ | @expired@ | @provisioning@ | @active@ | @deleted@ | @rejected@ ).     * @status-message@ - A message that provides more information about the status of the VPC peering connection, if applicable.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-peering-connection-id@ - The ID of the VPC peering connection.
-dvpcpcFilters :: Lens' DescribeVPCPeeringConnections [Filter]
-dvpcpcFilters = lens _dvpcpcFilters (\ s a -> s{_dvpcpcFilters = a}) . _Default . _Coerce;
-
--- | One or more VPC peering connection IDs. Default: Describes all your VPC peering connections.
-dvpcpcVPCPeeringConnectionIds :: Lens' DescribeVPCPeeringConnections [Text]
-dvpcpcVPCPeeringConnectionIds = lens _dvpcpcVPCPeeringConnectionIds (\ s a -> s{_dvpcpcVPCPeeringConnectionIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpcpcDryRun :: Lens' DescribeVPCPeeringConnections (Maybe Bool)
-dvpcpcDryRun = lens _dvpcpcDryRun (\ s a -> s{_dvpcpcDryRun = a});
-
-instance AWSRequest DescribeVPCPeeringConnections
-         where
-        type Rs DescribeVPCPeeringConnections =
-             DescribeVPCPeeringConnectionsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCPeeringConnectionsResponse' <$>
-                   (x .@? "vpcPeeringConnectionSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCPeeringConnections
-
-instance NFData DescribeVPCPeeringConnections
-
-instance ToHeaders DescribeVPCPeeringConnections
-         where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCPeeringConnections where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCPeeringConnections where
-        toQuery DescribeVPCPeeringConnections'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeVpcPeeringConnections" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvpcpcFilters),
-               toQuery
-                 (toQueryList "VpcPeeringConnectionId" <$>
-                    _dvpcpcVPCPeeringConnectionIds),
-               "DryRun" =: _dvpcpcDryRun]
-
--- | Contains the output of DescribeVpcPeeringConnections.
---
---
---
--- /See:/ 'describeVPCPeeringConnectionsResponse' smart constructor.
-data DescribeVPCPeeringConnectionsResponse = DescribeVPCPeeringConnectionsResponse'
-    { _dvpcpcrsVPCPeeringConnections :: !(Maybe [VPCPeeringConnection])
-    , _dvpcpcrsResponseStatus        :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCPeeringConnectionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcpcrsVPCPeeringConnections' - Information about the VPC peering connections.
---
--- * 'dvpcpcrsResponseStatus' - -- | The response status code.
-describeVPCPeeringConnectionsResponse
-    :: Int -- ^ 'dvpcpcrsResponseStatus'
-    -> DescribeVPCPeeringConnectionsResponse
-describeVPCPeeringConnectionsResponse pResponseStatus_ =
-    DescribeVPCPeeringConnectionsResponse'
-    { _dvpcpcrsVPCPeeringConnections = Nothing
-    , _dvpcpcrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPC peering connections.
-dvpcpcrsVPCPeeringConnections :: Lens' DescribeVPCPeeringConnectionsResponse [VPCPeeringConnection]
-dvpcpcrsVPCPeeringConnections = lens _dvpcpcrsVPCPeeringConnections (\ s a -> s{_dvpcpcrsVPCPeeringConnections = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvpcpcrsResponseStatus :: Lens' DescribeVPCPeeringConnectionsResponse Int
-dvpcpcrsResponseStatus = lens _dvpcpcrsResponseStatus (\ s a -> s{_dvpcpcrsResponseStatus = a});
-
-instance NFData DescribeVPCPeeringConnectionsResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPCs.hs b/gen/Network/AWS/EC2/DescribeVPCs.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPCs.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPCs
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your VPCs.
---
---
-module Network.AWS.EC2.DescribeVPCs
-    (
-    -- * Creating a Request
-      describeVPCs
-    , DescribeVPCs
-    -- * Request Lenses
-    , dvsFilters
-    , dvsVPCIds
-    , dvsDryRun
-
-    -- * Destructuring the Response
-    , describeVPCsResponse
-    , DescribeVPCsResponse
-    -- * Response Lenses
-    , dvrsVPCs
-    , dvrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpcs.
---
---
---
--- /See:/ 'describeVPCs' smart constructor.
-data DescribeVPCs = DescribeVPCs'
-    { _dvsFilters :: !(Maybe [Filter])
-    , _dvsVPCIds  :: !(Maybe [Text])
-    , _dvsDryRun  :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvsFilters' - One or more filters.     * @cidr@ - The IPv4 CIDR block of the VPC. The CIDR block you specify must exactly match the VPC's CIDR block for information to be returned for the VPC. Must contain the slash followed by one or two digits (for example, @/28@ ).     * @dhcp-options-id@ - The ID of a set of DHCP options.     * @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block associated with the VPC.     * @ipv6-cidr-block-association.association-id@ - The association ID for an IPv6 CIDR block associated with the VPC.     * @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR block associated with the VPC.     * @isDefault@ - Indicates whether the VPC is the default VPC.     * @state@ - The state of the VPC (@pending@ | @available@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC.
---
--- * 'dvsVPCIds' - One or more VPC IDs. Default: Describes all your VPCs.
---
--- * 'dvsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeVPCs
-    :: DescribeVPCs
-describeVPCs =
-    DescribeVPCs'
-    { _dvsFilters = Nothing
-    , _dvsVPCIds = Nothing
-    , _dvsDryRun = Nothing
-    }
-
--- | One or more filters.     * @cidr@ - The IPv4 CIDR block of the VPC. The CIDR block you specify must exactly match the VPC's CIDR block for information to be returned for the VPC. Must contain the slash followed by one or two digits (for example, @/28@ ).     * @dhcp-options-id@ - The ID of a set of DHCP options.     * @ipv6-cidr-block-association.ipv6-cidr-block@ - An IPv6 CIDR block associated with the VPC.     * @ipv6-cidr-block-association.association-id@ - The association ID for an IPv6 CIDR block associated with the VPC.     * @ipv6-cidr-block-association.state@ - The state of an IPv6 CIDR block associated with the VPC.     * @isDefault@ - Indicates whether the VPC is the default VPC.     * @state@ - The state of the VPC (@pending@ | @available@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @vpc-id@ - The ID of the VPC.
-dvsFilters :: Lens' DescribeVPCs [Filter]
-dvsFilters = lens _dvsFilters (\ s a -> s{_dvsFilters = a}) . _Default . _Coerce;
-
--- | One or more VPC IDs. Default: Describes all your VPCs.
-dvsVPCIds :: Lens' DescribeVPCs [Text]
-dvsVPCIds = lens _dvsVPCIds (\ s a -> s{_dvsVPCIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvsDryRun :: Lens' DescribeVPCs (Maybe Bool)
-dvsDryRun = lens _dvsDryRun (\ s a -> s{_dvsDryRun = a});
-
-instance AWSRequest DescribeVPCs where
-        type Rs DescribeVPCs = DescribeVPCsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPCsResponse' <$>
-                   (x .@? "vpcSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPCs
-
-instance NFData DescribeVPCs
-
-instance ToHeaders DescribeVPCs where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPCs where
-        toPath = const "/"
-
-instance ToQuery DescribeVPCs where
-        toQuery DescribeVPCs'{..}
-          = mconcat
-              ["Action" =: ("DescribeVpcs" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvsFilters),
-               toQuery (toQueryList "VpcId" <$> _dvsVPCIds),
-               "DryRun" =: _dvsDryRun]
-
--- | Contains the output of DescribeVpcs.
---
---
---
--- /See:/ 'describeVPCsResponse' smart constructor.
-data DescribeVPCsResponse = DescribeVPCsResponse'
-    { _dvrsVPCs           :: !(Maybe [VPC])
-    , _dvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPCsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvrsVPCs' - Information about one or more VPCs.
---
--- * 'dvrsResponseStatus' - -- | The response status code.
-describeVPCsResponse
-    :: Int -- ^ 'dvrsResponseStatus'
-    -> DescribeVPCsResponse
-describeVPCsResponse pResponseStatus_ =
-    DescribeVPCsResponse'
-    { _dvrsVPCs = Nothing
-    , _dvrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more VPCs.
-dvrsVPCs :: Lens' DescribeVPCsResponse [VPC]
-dvrsVPCs = lens _dvrsVPCs (\ s a -> s{_dvrsVPCs = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvrsResponseStatus :: Lens' DescribeVPCsResponse Int
-dvrsResponseStatus = lens _dvrsResponseStatus (\ s a -> s{_dvrsResponseStatus = a});
-
-instance NFData DescribeVPCsResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPNConnections.hs b/gen/Network/AWS/EC2/DescribeVPNConnections.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPNConnections.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPNConnections
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your VPN connections.
---
---
--- For more information about VPN connections, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeVPNConnections
-    (
-    -- * Creating a Request
-      describeVPNConnections
-    , DescribeVPNConnections
-    -- * Request Lenses
-    , dvpncFilters
-    , dvpncVPNConnectionIds
-    , dvpncDryRun
-
-    -- * Destructuring the Response
-    , describeVPNConnectionsResponse
-    , DescribeVPNConnectionsResponse
-    -- * Response Lenses
-    , dvcrsVPNConnections
-    , dvcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpnConnections.
---
---
---
--- /See:/ 'describeVPNConnections' smart constructor.
-data DescribeVPNConnections = DescribeVPNConnections'
-    { _dvpncFilters          :: !(Maybe [Filter])
-    , _dvpncVPNConnectionIds :: !(Maybe [Text])
-    , _dvpncDryRun           :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPNConnections' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpncFilters' - One or more filters.     * @customer-gateway-configuration@ - The configuration information for the customer gateway.     * @customer-gateway-id@ - The ID of a customer gateway associated with the VPN connection.     * @state@ - The state of the VPN connection (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @option.static-routes-only@ - Indicates whether the connection has static routes only. Used for devices that do not support Border Gateway Protocol (BGP).     * @route.destination-cidr-block@ - The destination CIDR block. This corresponds to the subnet used in a customer data center.     * @bgp-asn@ - The BGP Autonomous System Number (ASN) associated with a BGP device.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @type@ - The type of VPN connection. Currently the only supported type is @ipsec.1@ .     * @vpn-connection-id@ - The ID of the VPN connection.     * @vpn-gateway-id@ - The ID of a virtual private gateway associated with the VPN connection.
---
--- * 'dvpncVPNConnectionIds' - One or more VPN connection IDs. Default: Describes your VPN connections.
---
--- * 'dvpncDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeVPNConnections
-    :: DescribeVPNConnections
-describeVPNConnections =
-    DescribeVPNConnections'
-    { _dvpncFilters = Nothing
-    , _dvpncVPNConnectionIds = Nothing
-    , _dvpncDryRun = Nothing
-    }
-
--- | One or more filters.     * @customer-gateway-configuration@ - The configuration information for the customer gateway.     * @customer-gateway-id@ - The ID of a customer gateway associated with the VPN connection.     * @state@ - The state of the VPN connection (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @option.static-routes-only@ - Indicates whether the connection has static routes only. Used for devices that do not support Border Gateway Protocol (BGP).     * @route.destination-cidr-block@ - The destination CIDR block. This corresponds to the subnet used in a customer data center.     * @bgp-asn@ - The BGP Autonomous System Number (ASN) associated with a BGP device.     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @type@ - The type of VPN connection. Currently the only supported type is @ipsec.1@ .     * @vpn-connection-id@ - The ID of the VPN connection.     * @vpn-gateway-id@ - The ID of a virtual private gateway associated with the VPN connection.
-dvpncFilters :: Lens' DescribeVPNConnections [Filter]
-dvpncFilters = lens _dvpncFilters (\ s a -> s{_dvpncFilters = a}) . _Default . _Coerce;
-
--- | One or more VPN connection IDs. Default: Describes your VPN connections.
-dvpncVPNConnectionIds :: Lens' DescribeVPNConnections [Text]
-dvpncVPNConnectionIds = lens _dvpncVPNConnectionIds (\ s a -> s{_dvpncVPNConnectionIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpncDryRun :: Lens' DescribeVPNConnections (Maybe Bool)
-dvpncDryRun = lens _dvpncDryRun (\ s a -> s{_dvpncDryRun = a});
-
-instance AWSRequest DescribeVPNConnections where
-        type Rs DescribeVPNConnections =
-             DescribeVPNConnectionsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPNConnectionsResponse' <$>
-                   (x .@? "vpnConnectionSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPNConnections
-
-instance NFData DescribeVPNConnections
-
-instance ToHeaders DescribeVPNConnections where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPNConnections where
-        toPath = const "/"
-
-instance ToQuery DescribeVPNConnections where
-        toQuery DescribeVPNConnections'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeVpnConnections" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvpncFilters),
-               toQuery
-                 (toQueryList "VpnConnectionId" <$>
-                    _dvpncVPNConnectionIds),
-               "DryRun" =: _dvpncDryRun]
-
--- | Contains the output of DescribeVpnConnections.
---
---
---
--- /See:/ 'describeVPNConnectionsResponse' smart constructor.
-data DescribeVPNConnectionsResponse = DescribeVPNConnectionsResponse'
-    { _dvcrsVPNConnections :: !(Maybe [VPNConnection])
-    , _dvcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPNConnectionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcrsVPNConnections' - Information about one or more VPN connections.
---
--- * 'dvcrsResponseStatus' - -- | The response status code.
-describeVPNConnectionsResponse
-    :: Int -- ^ 'dvcrsResponseStatus'
-    -> DescribeVPNConnectionsResponse
-describeVPNConnectionsResponse pResponseStatus_ =
-    DescribeVPNConnectionsResponse'
-    { _dvcrsVPNConnections = Nothing
-    , _dvcrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more VPN connections.
-dvcrsVPNConnections :: Lens' DescribeVPNConnectionsResponse [VPNConnection]
-dvcrsVPNConnections = lens _dvcrsVPNConnections (\ s a -> s{_dvcrsVPNConnections = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvcrsResponseStatus :: Lens' DescribeVPNConnectionsResponse Int
-dvcrsResponseStatus = lens _dvcrsResponseStatus (\ s a -> s{_dvcrsResponseStatus = a});
-
-instance NFData DescribeVPNConnectionsResponse
diff --git a/gen/Network/AWS/EC2/DescribeVPNGateways.hs b/gen/Network/AWS/EC2/DescribeVPNGateways.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVPNGateways.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVPNGateways
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes one or more of your virtual private gateways.
---
---
--- For more information about virtual private gateways, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding an IPsec Hardware VPN to Your VPC> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeVPNGateways
-    (
-    -- * Creating a Request
-      describeVPNGateways
-    , DescribeVPNGateways
-    -- * Request Lenses
-    , dvgsFilters
-    , dvgsVPNGatewayIds
-    , dvgsDryRun
-
-    -- * Destructuring the Response
-    , describeVPNGatewaysResponse
-    , DescribeVPNGatewaysResponse
-    -- * Response Lenses
-    , dvgrsVPNGateways
-    , dvgrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVpnGateways.
---
---
---
--- /See:/ 'describeVPNGateways' smart constructor.
-data DescribeVPNGateways = DescribeVPNGateways'
-    { _dvgsFilters       :: !(Maybe [Filter])
-    , _dvgsVPNGatewayIds :: !(Maybe [Text])
-    , _dvgsDryRun        :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPNGateways' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvgsFilters' - One or more filters.     * @attachment.state@ - The current state of the attachment between the gateway and the VPC (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @attachment.vpc-id@ - The ID of an attached VPC.     * @availability-zone@ - The Availability Zone for the virtual private gateway (if applicable).     * @state@ - The state of the virtual private gateway (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @type@ - The type of virtual private gateway. Currently the only supported type is @ipsec.1@ .     * @vpn-gateway-id@ - The ID of the virtual private gateway.
---
--- * 'dvgsVPNGatewayIds' - One or more virtual private gateway IDs. Default: Describes all your virtual private gateways.
---
--- * 'dvgsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-describeVPNGateways
-    :: DescribeVPNGateways
-describeVPNGateways =
-    DescribeVPNGateways'
-    { _dvgsFilters = Nothing
-    , _dvgsVPNGatewayIds = Nothing
-    , _dvgsDryRun = Nothing
-    }
-
--- | One or more filters.     * @attachment.state@ - The current state of the attachment between the gateway and the VPC (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @attachment.vpc-id@ - The ID of an attached VPC.     * @availability-zone@ - The Availability Zone for the virtual private gateway (if applicable).     * @state@ - The state of the virtual private gateway (@pending@ | @available@ | @deleting@ | @deleted@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @type@ - The type of virtual private gateway. Currently the only supported type is @ipsec.1@ .     * @vpn-gateway-id@ - The ID of the virtual private gateway.
-dvgsFilters :: Lens' DescribeVPNGateways [Filter]
-dvgsFilters = lens _dvgsFilters (\ s a -> s{_dvgsFilters = a}) . _Default . _Coerce;
-
--- | One or more virtual private gateway IDs. Default: Describes all your virtual private gateways.
-dvgsVPNGatewayIds :: Lens' DescribeVPNGateways [Text]
-dvgsVPNGatewayIds = lens _dvgsVPNGatewayIds (\ s a -> s{_dvgsVPNGatewayIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvgsDryRun :: Lens' DescribeVPNGateways (Maybe Bool)
-dvgsDryRun = lens _dvgsDryRun (\ s a -> s{_dvgsDryRun = a});
-
-instance AWSRequest DescribeVPNGateways where
-        type Rs DescribeVPNGateways =
-             DescribeVPNGatewaysResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVPNGatewaysResponse' <$>
-                   (x .@? "vpnGatewaySet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVPNGateways
-
-instance NFData DescribeVPNGateways
-
-instance ToHeaders DescribeVPNGateways where
-        toHeaders = const mempty
-
-instance ToPath DescribeVPNGateways where
-        toPath = const "/"
-
-instance ToQuery DescribeVPNGateways where
-        toQuery DescribeVPNGateways'{..}
-          = mconcat
-              ["Action" =: ("DescribeVpnGateways" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvgsFilters),
-               toQuery
-                 (toQueryList "VpnGatewayId" <$> _dvgsVPNGatewayIds),
-               "DryRun" =: _dvgsDryRun]
-
--- | Contains the output of DescribeVpnGateways.
---
---
---
--- /See:/ 'describeVPNGatewaysResponse' smart constructor.
-data DescribeVPNGatewaysResponse = DescribeVPNGatewaysResponse'
-    { _dvgrsVPNGateways    :: !(Maybe [VPNGateway])
-    , _dvgrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVPNGatewaysResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvgrsVPNGateways' - Information about one or more virtual private gateways.
---
--- * 'dvgrsResponseStatus' - -- | The response status code.
-describeVPNGatewaysResponse
-    :: Int -- ^ 'dvgrsResponseStatus'
-    -> DescribeVPNGatewaysResponse
-describeVPNGatewaysResponse pResponseStatus_ =
-    DescribeVPNGatewaysResponse'
-    { _dvgrsVPNGateways = Nothing
-    , _dvgrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more virtual private gateways.
-dvgrsVPNGateways :: Lens' DescribeVPNGatewaysResponse [VPNGateway]
-dvgrsVPNGateways = lens _dvgrsVPNGateways (\ s a -> s{_dvgrsVPNGateways = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvgrsResponseStatus :: Lens' DescribeVPNGatewaysResponse Int
-dvgrsResponseStatus = lens _dvgrsResponseStatus (\ s a -> s{_dvgrsResponseStatus = a});
-
-instance NFData DescribeVPNGatewaysResponse
diff --git a/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs b/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs
+++ /dev/null
@@ -1,178 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVolumeAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified attribute of the specified volume. You can specify only one attribute at a time.
---
---
--- For more information about EBS volumes, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html Amazon EBS Volumes> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DescribeVolumeAttribute
-    (
-    -- * Creating a Request
-      describeVolumeAttribute
-    , DescribeVolumeAttribute
-    -- * Request Lenses
-    , dvaAttribute
-    , dvaDryRun
-    , dvaVolumeId
-
-    -- * Destructuring the Response
-    , describeVolumeAttributeResponse
-    , DescribeVolumeAttributeResponse
-    -- * Response Lenses
-    , dvarsVolumeId
-    , dvarsProductCodes
-    , dvarsAutoEnableIO
-    , dvarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVolumeAttribute.
---
---
---
--- /See:/ 'describeVolumeAttribute' smart constructor.
-data DescribeVolumeAttribute = DescribeVolumeAttribute'
-    { _dvaAttribute :: !(Maybe VolumeAttributeName)
-    , _dvaDryRun    :: !(Maybe Bool)
-    , _dvaVolumeId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVolumeAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvaAttribute' - The instance attribute.
---
--- * 'dvaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvaVolumeId' - The ID of the volume.
-describeVolumeAttribute
-    :: Text -- ^ 'dvaVolumeId'
-    -> DescribeVolumeAttribute
-describeVolumeAttribute pVolumeId_ =
-    DescribeVolumeAttribute'
-    { _dvaAttribute = Nothing
-    , _dvaDryRun = Nothing
-    , _dvaVolumeId = pVolumeId_
-    }
-
--- | The instance attribute.
-dvaAttribute :: Lens' DescribeVolumeAttribute (Maybe VolumeAttributeName)
-dvaAttribute = lens _dvaAttribute (\ s a -> s{_dvaAttribute = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvaDryRun :: Lens' DescribeVolumeAttribute (Maybe Bool)
-dvaDryRun = lens _dvaDryRun (\ s a -> s{_dvaDryRun = a});
-
--- | The ID of the volume.
-dvaVolumeId :: Lens' DescribeVolumeAttribute Text
-dvaVolumeId = lens _dvaVolumeId (\ s a -> s{_dvaVolumeId = a});
-
-instance AWSRequest DescribeVolumeAttribute where
-        type Rs DescribeVolumeAttribute =
-             DescribeVolumeAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVolumeAttributeResponse' <$>
-                   (x .@? "volumeId") <*>
-                     (x .@? "productCodes" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "autoEnableIO")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVolumeAttribute
-
-instance NFData DescribeVolumeAttribute
-
-instance ToHeaders DescribeVolumeAttribute where
-        toHeaders = const mempty
-
-instance ToPath DescribeVolumeAttribute where
-        toPath = const "/"
-
-instance ToQuery DescribeVolumeAttribute where
-        toQuery DescribeVolumeAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("DescribeVolumeAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Attribute" =: _dvaAttribute, "DryRun" =: _dvaDryRun,
-               "VolumeId" =: _dvaVolumeId]
-
--- | Contains the output of DescribeVolumeAttribute.
---
---
---
--- /See:/ 'describeVolumeAttributeResponse' smart constructor.
-data DescribeVolumeAttributeResponse = DescribeVolumeAttributeResponse'
-    { _dvarsVolumeId       :: !(Maybe Text)
-    , _dvarsProductCodes   :: !(Maybe [ProductCode])
-    , _dvarsAutoEnableIO   :: !(Maybe AttributeBooleanValue)
-    , _dvarsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVolumeAttributeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvarsVolumeId' - The ID of the volume.
---
--- * 'dvarsProductCodes' - A list of product codes.
---
--- * 'dvarsAutoEnableIO' - The state of @autoEnableIO@ attribute.
---
--- * 'dvarsResponseStatus' - -- | The response status code.
-describeVolumeAttributeResponse
-    :: Int -- ^ 'dvarsResponseStatus'
-    -> DescribeVolumeAttributeResponse
-describeVolumeAttributeResponse pResponseStatus_ =
-    DescribeVolumeAttributeResponse'
-    { _dvarsVolumeId = Nothing
-    , _dvarsProductCodes = Nothing
-    , _dvarsAutoEnableIO = Nothing
-    , _dvarsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the volume.
-dvarsVolumeId :: Lens' DescribeVolumeAttributeResponse (Maybe Text)
-dvarsVolumeId = lens _dvarsVolumeId (\ s a -> s{_dvarsVolumeId = a});
-
--- | A list of product codes.
-dvarsProductCodes :: Lens' DescribeVolumeAttributeResponse [ProductCode]
-dvarsProductCodes = lens _dvarsProductCodes (\ s a -> s{_dvarsProductCodes = a}) . _Default . _Coerce;
-
--- | The state of @autoEnableIO@ attribute.
-dvarsAutoEnableIO :: Lens' DescribeVolumeAttributeResponse (Maybe AttributeBooleanValue)
-dvarsAutoEnableIO = lens _dvarsAutoEnableIO (\ s a -> s{_dvarsAutoEnableIO = a});
-
--- | -- | The response status code.
-dvarsResponseStatus :: Lens' DescribeVolumeAttributeResponse Int
-dvarsResponseStatus = lens _dvarsResponseStatus (\ s a -> s{_dvarsResponseStatus = a});
-
-instance NFData DescribeVolumeAttributeResponse
diff --git a/gen/Network/AWS/EC2/DescribeVolumeStatus.hs b/gen/Network/AWS/EC2/DescribeVolumeStatus.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVolumeStatus.hs
+++ /dev/null
@@ -1,203 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVolumeStatus
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the status of the specified volumes. Volume status provides the result of the checks performed on your volumes to determine events that can impair the performance of your volumes. The performance of a volume can be affected if an issue occurs on the volume's underlying host. If the volume's underlying host experiences a power outage or system issue, after the system is restored, there could be data inconsistencies on the volume. Volume events notify you if this occurs. Volume actions notify you if any action needs to be taken in response to the event.
---
---
--- The @DescribeVolumeStatus@ operation provides the following information about the specified volumes:
---
--- /Status/ : Reflects the current status of the volume. The possible values are @ok@ , @impaired@ , @warning@ , or @insufficient-data@ . If all checks pass, the overall status of the volume is @ok@ . If the check fails, the overall status is @impaired@ . If the status is @insufficient-data@ , then the checks may still be taking place on your volume at the time. We recommend that you retry the request. For more information on volume status, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-volume-status.html Monitoring the Status of Your Volumes> .
---
--- /Events/ : Reflect the cause of a volume status and may require you to take action. For example, if your volume returns an @impaired@ status, then the volume event might be @potential-data-inconsistency@ . This means that your volume has been affected by an issue with the underlying host, has all I/O operations disabled, and may have inconsistent data.
---
--- /Actions/ : Reflect the actions you may have to take in response to an event. For example, if the status of the volume is @impaired@ and the volume event shows @potential-data-inconsistency@ , then the action shows @enable-volume-io@ . This means that you may want to enable the I/O operations for the volume by calling the 'EnableVolumeIO' action and then check the volume for data consistency.
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeVolumeStatus
-    (
-    -- * Creating a Request
-      describeVolumeStatus
-    , DescribeVolumeStatus
-    -- * Request Lenses
-    , dvssFilters
-    , dvssVolumeIds
-    , dvssNextToken
-    , dvssDryRun
-    , dvssMaxResults
-
-    -- * Destructuring the Response
-    , describeVolumeStatusResponse
-    , DescribeVolumeStatusResponse
-    -- * Response Lenses
-    , dvsrsNextToken
-    , dvsrsVolumeStatuses
-    , dvsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVolumeStatus.
---
---
---
--- /See:/ 'describeVolumeStatus' smart constructor.
-data DescribeVolumeStatus = DescribeVolumeStatus'
-    { _dvssFilters    :: !(Maybe [Filter])
-    , _dvssVolumeIds  :: !(Maybe [Text])
-    , _dvssNextToken  :: !(Maybe Text)
-    , _dvssDryRun     :: !(Maybe Bool)
-    , _dvssMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVolumeStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvssFilters' - One or more filters.     * @action.code@ - The action code for the event (for example, @enable-volume-io@ ).     * @action.description@ - A description of the action.     * @action.event-id@ - The event ID associated with the action.     * @availability-zone@ - The Availability Zone of the instance.     * @event.description@ - A description of the event.     * @event.event-id@ - The event ID.     * @event.event-type@ - The event type (for @io-enabled@ : @passed@ | @failed@ ; for @io-performance@ : @io-performance:degraded@ | @io-performance:severely-degraded@ | @io-performance:stalled@ ).     * @event.not-after@ - The latest end time for the event.     * @event.not-before@ - The earliest start time for the event.     * @volume-status.details-name@ - The cause for @volume-status.status@ (@io-enabled@ | @io-performance@ ).     * @volume-status.details-status@ - The status of @volume-status.details-name@ (for @io-enabled@ : @passed@ | @failed@ ; for @io-performance@ : @normal@ | @degraded@ | @severely-degraded@ | @stalled@ ).     * @volume-status.status@ - The status of the volume (@ok@ | @impaired@ | @warning@ | @insufficient-data@ ).
---
--- * 'dvssVolumeIds' - One or more volume IDs. Default: Describes all your volumes.
---
--- * 'dvssNextToken' - The @NextToken@ value to include in a future @DescribeVolumeStatus@ request. When the results of the request exceed @MaxResults@ , this value can be used to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dvssDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvssMaxResults' - The maximum number of volume results returned by @DescribeVolumeStatus@ in paginated output. When this parameter is used, the request only returns @MaxResults@ results in a single page along with a @NextToken@ response element. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. If this parameter is not used, then @DescribeVolumeStatus@ returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.
-describeVolumeStatus
-    :: DescribeVolumeStatus
-describeVolumeStatus =
-    DescribeVolumeStatus'
-    { _dvssFilters = Nothing
-    , _dvssVolumeIds = Nothing
-    , _dvssNextToken = Nothing
-    , _dvssDryRun = Nothing
-    , _dvssMaxResults = Nothing
-    }
-
--- | One or more filters.     * @action.code@ - The action code for the event (for example, @enable-volume-io@ ).     * @action.description@ - A description of the action.     * @action.event-id@ - The event ID associated with the action.     * @availability-zone@ - The Availability Zone of the instance.     * @event.description@ - A description of the event.     * @event.event-id@ - The event ID.     * @event.event-type@ - The event type (for @io-enabled@ : @passed@ | @failed@ ; for @io-performance@ : @io-performance:degraded@ | @io-performance:severely-degraded@ | @io-performance:stalled@ ).     * @event.not-after@ - The latest end time for the event.     * @event.not-before@ - The earliest start time for the event.     * @volume-status.details-name@ - The cause for @volume-status.status@ (@io-enabled@ | @io-performance@ ).     * @volume-status.details-status@ - The status of @volume-status.details-name@ (for @io-enabled@ : @passed@ | @failed@ ; for @io-performance@ : @normal@ | @degraded@ | @severely-degraded@ | @stalled@ ).     * @volume-status.status@ - The status of the volume (@ok@ | @impaired@ | @warning@ | @insufficient-data@ ).
-dvssFilters :: Lens' DescribeVolumeStatus [Filter]
-dvssFilters = lens _dvssFilters (\ s a -> s{_dvssFilters = a}) . _Default . _Coerce;
-
--- | One or more volume IDs. Default: Describes all your volumes.
-dvssVolumeIds :: Lens' DescribeVolumeStatus [Text]
-dvssVolumeIds = lens _dvssVolumeIds (\ s a -> s{_dvssVolumeIds = a}) . _Default . _Coerce;
-
--- | The @NextToken@ value to include in a future @DescribeVolumeStatus@ request. When the results of the request exceed @MaxResults@ , this value can be used to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dvssNextToken :: Lens' DescribeVolumeStatus (Maybe Text)
-dvssNextToken = lens _dvssNextToken (\ s a -> s{_dvssNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvssDryRun :: Lens' DescribeVolumeStatus (Maybe Bool)
-dvssDryRun = lens _dvssDryRun (\ s a -> s{_dvssDryRun = a});
-
--- | The maximum number of volume results returned by @DescribeVolumeStatus@ in paginated output. When this parameter is used, the request only returns @MaxResults@ results in a single page along with a @NextToken@ response element. The remaining results of the initial request can be seen by sending another request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. If this parameter is not used, then @DescribeVolumeStatus@ returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.
-dvssMaxResults :: Lens' DescribeVolumeStatus (Maybe Int)
-dvssMaxResults = lens _dvssMaxResults (\ s a -> s{_dvssMaxResults = a});
-
-instance AWSPager DescribeVolumeStatus where
-        page rq rs
-          | stop (rs ^. dvsrsNextToken) = Nothing
-          | stop (rs ^. dvsrsVolumeStatuses) = Nothing
-          | otherwise =
-            Just $ rq & dvssNextToken .~ rs ^. dvsrsNextToken
-
-instance AWSRequest DescribeVolumeStatus where
-        type Rs DescribeVolumeStatus =
-             DescribeVolumeStatusResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVolumeStatusResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "volumeStatusSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVolumeStatus
-
-instance NFData DescribeVolumeStatus
-
-instance ToHeaders DescribeVolumeStatus where
-        toHeaders = const mempty
-
-instance ToPath DescribeVolumeStatus where
-        toPath = const "/"
-
-instance ToQuery DescribeVolumeStatus where
-        toQuery DescribeVolumeStatus'{..}
-          = mconcat
-              ["Action" =: ("DescribeVolumeStatus" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _dvssFilters),
-               toQuery (toQueryList "VolumeId" <$> _dvssVolumeIds),
-               "NextToken" =: _dvssNextToken,
-               "DryRun" =: _dvssDryRun,
-               "MaxResults" =: _dvssMaxResults]
-
--- | Contains the output of DescribeVolumeStatus.
---
---
---
--- /See:/ 'describeVolumeStatusResponse' smart constructor.
-data DescribeVolumeStatusResponse = DescribeVolumeStatusResponse'
-    { _dvsrsNextToken      :: !(Maybe Text)
-    , _dvsrsVolumeStatuses :: !(Maybe [VolumeStatusItem])
-    , _dvsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVolumeStatusResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvsrsNextToken' - The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dvsrsVolumeStatuses' - A list of volumes.
---
--- * 'dvsrsResponseStatus' - -- | The response status code.
-describeVolumeStatusResponse
-    :: Int -- ^ 'dvsrsResponseStatus'
-    -> DescribeVolumeStatusResponse
-describeVolumeStatusResponse pResponseStatus_ =
-    DescribeVolumeStatusResponse'
-    { _dvsrsNextToken = Nothing
-    , _dvsrsVolumeStatuses = Nothing
-    , _dvsrsResponseStatus = pResponseStatus_
-    }
-
--- | The token to use to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dvsrsNextToken :: Lens' DescribeVolumeStatusResponse (Maybe Text)
-dvsrsNextToken = lens _dvsrsNextToken (\ s a -> s{_dvsrsNextToken = a});
-
--- | A list of volumes.
-dvsrsVolumeStatuses :: Lens' DescribeVolumeStatusResponse [VolumeStatusItem]
-dvsrsVolumeStatuses = lens _dvsrsVolumeStatuses (\ s a -> s{_dvsrsVolumeStatuses = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvsrsResponseStatus :: Lens' DescribeVolumeStatusResponse Int
-dvsrsResponseStatus = lens _dvsrsResponseStatus (\ s a -> s{_dvsrsResponseStatus = a});
-
-instance NFData DescribeVolumeStatusResponse
diff --git a/gen/Network/AWS/EC2/DescribeVolumes.hs b/gen/Network/AWS/EC2/DescribeVolumes.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DescribeVolumes.hs
+++ /dev/null
@@ -1,197 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DescribeVolumes
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified EBS volumes.
---
---
--- If you are describing a long list of volumes, you can paginate the output to make the list more manageable. The @MaxResults@ parameter sets the maximum number of results returned in a single page. If the list of results exceeds your @MaxResults@ value, then that number of results is returned along with a @NextToken@ value that can be passed to a subsequent @DescribeVolumes@ request to retrieve the remaining results.
---
--- For more information about EBS volumes, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html Amazon EBS Volumes> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- This operation returns paginated results.
-module Network.AWS.EC2.DescribeVolumes
-    (
-    -- * Creating a Request
-      describeVolumes
-    , DescribeVolumes
-    -- * Request Lenses
-    , desFilters
-    , desVolumeIds
-    , desNextToken
-    , desDryRun
-    , desMaxResults
-
-    -- * Destructuring the Response
-    , describeVolumesResponse
-    , DescribeVolumesResponse
-    -- * Response Lenses
-    , dvvrsNextToken
-    , dvvrsVolumes
-    , dvvrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Pager
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DescribeVolumes.
---
---
---
--- /See:/ 'describeVolumes' smart constructor.
-data DescribeVolumes = DescribeVolumes'
-    { _desFilters    :: !(Maybe [Filter])
-    , _desVolumeIds  :: !(Maybe [Text])
-    , _desNextToken  :: !(Maybe Text)
-    , _desDryRun     :: !(Maybe Bool)
-    , _desMaxResults :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVolumes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'desFilters' - One or more filters.     * @attachment.attach-time@ - The time stamp when the attachment initiated.     * @attachment.delete-on-termination@ - Whether the volume is deleted on instance termination.     * @attachment.device@ - The device name that is exposed to the instance (for example, @/dev/sda1@ ).     * @attachment.instance-id@ - The ID of the instance the volume is attached to.     * @attachment.status@ - The attachment state (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @availability-zone@ - The Availability Zone in which the volume was created.     * @create-time@ - The time stamp when the volume was created.     * @encrypted@ - The encryption status of the volume.     * @size@ - The size of the volume, in GiB.     * @snapshot-id@ - The snapshot from which the volume was created.     * @status@ - The status of the volume (@creating@ | @available@ | @in-use@ | @deleting@ | @deleted@ | @error@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @volume-id@ - The volume ID.     * @volume-type@ - The Amazon EBS volume type. This can be @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic volumes.
---
--- * 'desVolumeIds' - One or more volume IDs.
---
--- * 'desNextToken' - The @NextToken@ value returned from a previous paginated @DescribeVolumes@ request where @MaxResults@ was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the @NextToken@ value. This value is @null@ when there are no more results to return.
---
--- * 'desDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'desMaxResults' - The maximum number of volume results returned by @DescribeVolumes@ in paginated output. When this parameter is used, @DescribeVolumes@ only returns @MaxResults@ results in a single page along with a @NextToken@ response element. The remaining results of the initial request can be seen by sending another @DescribeVolumes@ request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. If this parameter is not used, then @DescribeVolumes@ returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.
-describeVolumes
-    :: DescribeVolumes
-describeVolumes =
-    DescribeVolumes'
-    { _desFilters = Nothing
-    , _desVolumeIds = Nothing
-    , _desNextToken = Nothing
-    , _desDryRun = Nothing
-    , _desMaxResults = Nothing
-    }
-
--- | One or more filters.     * @attachment.attach-time@ - The time stamp when the attachment initiated.     * @attachment.delete-on-termination@ - Whether the volume is deleted on instance termination.     * @attachment.device@ - The device name that is exposed to the instance (for example, @/dev/sda1@ ).     * @attachment.instance-id@ - The ID of the instance the volume is attached to.     * @attachment.status@ - The attachment state (@attaching@ | @attached@ | @detaching@ | @detached@ ).     * @availability-zone@ - The Availability Zone in which the volume was created.     * @create-time@ - The time stamp when the volume was created.     * @encrypted@ - The encryption status of the volume.     * @size@ - The size of the volume, in GiB.     * @snapshot-id@ - The snapshot from which the volume was created.     * @status@ - The status of the volume (@creating@ | @available@ | @in-use@ | @deleting@ | @deleted@ | @error@ ).     * @tag@ :/key/ =/value/ - The key/value combination of a tag assigned to the resource.     * @tag-key@ - The key of a tag assigned to the resource. This filter is independent of the @tag-value@ filter. For example, if you use both the filter "tag-key=Purpose" and the filter "tag-value=X", you get any resources assigned both the tag key Purpose (regardless of what the tag's value is), and the tag value X (regardless of what the tag's key is). If you want to list only resources where Purpose is X, see the @tag@ :/key/ =/value/ filter.     * @tag-value@ - The value of a tag assigned to the resource. This filter is independent of the @tag-key@ filter.     * @volume-id@ - The volume ID.     * @volume-type@ - The Amazon EBS volume type. This can be @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic volumes.
-desFilters :: Lens' DescribeVolumes [Filter]
-desFilters = lens _desFilters (\ s a -> s{_desFilters = a}) . _Default . _Coerce;
-
--- | One or more volume IDs.
-desVolumeIds :: Lens' DescribeVolumes [Text]
-desVolumeIds = lens _desVolumeIds (\ s a -> s{_desVolumeIds = a}) . _Default . _Coerce;
-
--- | The @NextToken@ value returned from a previous paginated @DescribeVolumes@ request where @MaxResults@ was used and the results exceeded the value of that parameter. Pagination continues from the end of the previous results that returned the @NextToken@ value. This value is @null@ when there are no more results to return.
-desNextToken :: Lens' DescribeVolumes (Maybe Text)
-desNextToken = lens _desNextToken (\ s a -> s{_desNextToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-desDryRun :: Lens' DescribeVolumes (Maybe Bool)
-desDryRun = lens _desDryRun (\ s a -> s{_desDryRun = a});
-
--- | The maximum number of volume results returned by @DescribeVolumes@ in paginated output. When this parameter is used, @DescribeVolumes@ only returns @MaxResults@ results in a single page along with a @NextToken@ response element. The remaining results of the initial request can be seen by sending another @DescribeVolumes@ request with the returned @NextToken@ value. This value can be between 5 and 1000; if @MaxResults@ is given a value larger than 1000, only 1000 results are returned. If this parameter is not used, then @DescribeVolumes@ returns all results. You cannot specify this parameter and the volume IDs parameter in the same request.
-desMaxResults :: Lens' DescribeVolumes (Maybe Int)
-desMaxResults = lens _desMaxResults (\ s a -> s{_desMaxResults = a});
-
-instance AWSPager DescribeVolumes where
-        page rq rs
-          | stop (rs ^. dvvrsNextToken) = Nothing
-          | stop (rs ^. dvvrsVolumes) = Nothing
-          | otherwise =
-            Just $ rq & desNextToken .~ rs ^. dvvrsNextToken
-
-instance AWSRequest DescribeVolumes where
-        type Rs DescribeVolumes = DescribeVolumesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DescribeVolumesResponse' <$>
-                   (x .@? "nextToken") <*>
-                     (x .@? "volumeSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeVolumes
-
-instance NFData DescribeVolumes
-
-instance ToHeaders DescribeVolumes where
-        toHeaders = const mempty
-
-instance ToPath DescribeVolumes where
-        toPath = const "/"
-
-instance ToQuery DescribeVolumes where
-        toQuery DescribeVolumes'{..}
-          = mconcat
-              ["Action" =: ("DescribeVolumes" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "Filter" <$> _desFilters),
-               toQuery (toQueryList "VolumeId" <$> _desVolumeIds),
-               "NextToken" =: _desNextToken, "DryRun" =: _desDryRun,
-               "MaxResults" =: _desMaxResults]
-
--- | Contains the output of DescribeVolumes.
---
---
---
--- /See:/ 'describeVolumesResponse' smart constructor.
-data DescribeVolumesResponse = DescribeVolumesResponse'
-    { _dvvrsNextToken      :: !(Maybe Text)
-    , _dvvrsVolumes        :: !(Maybe [Volume])
-    , _dvvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DescribeVolumesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvvrsNextToken' - The @NextToken@ value to include in a future @DescribeVolumes@ request. When the results of a @DescribeVolumes@ request exceed @MaxResults@ , this value can be used to retrieve the next page of results. This value is @null@ when there are no more results to return.
---
--- * 'dvvrsVolumes' - Information about the volumes.
---
--- * 'dvvrsResponseStatus' - -- | The response status code.
-describeVolumesResponse
-    :: Int -- ^ 'dvvrsResponseStatus'
-    -> DescribeVolumesResponse
-describeVolumesResponse pResponseStatus_ =
-    DescribeVolumesResponse'
-    { _dvvrsNextToken = Nothing
-    , _dvvrsVolumes = Nothing
-    , _dvvrsResponseStatus = pResponseStatus_
-    }
-
--- | The @NextToken@ value to include in a future @DescribeVolumes@ request. When the results of a @DescribeVolumes@ request exceed @MaxResults@ , this value can be used to retrieve the next page of results. This value is @null@ when there are no more results to return.
-dvvrsNextToken :: Lens' DescribeVolumesResponse (Maybe Text)
-dvvrsNextToken = lens _dvvrsNextToken (\ s a -> s{_dvvrsNextToken = a});
-
--- | Information about the volumes.
-dvvrsVolumes :: Lens' DescribeVolumesResponse [Volume]
-dvvrsVolumes = lens _dvvrsVolumes (\ s a -> s{_dvvrsVolumes = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-dvvrsResponseStatus :: Lens' DescribeVolumesResponse Int
-dvvrsResponseStatus = lens _dvvrsResponseStatus (\ s a -> s{_dvvrsResponseStatus = a});
-
-instance NFData DescribeVolumesResponse
diff --git a/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs b/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs
+++ /dev/null
@@ -1,155 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DetachClassicLinkVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Unlinks (detaches) a linked EC2-Classic instance from a VPC. After the instance has been unlinked, the VPC security groups are no longer associated with it. An instance is automatically unlinked from a VPC when it's stopped.
---
---
-module Network.AWS.EC2.DetachClassicLinkVPC
-    (
-    -- * Creating a Request
-      detachClassicLinkVPC
-    , DetachClassicLinkVPC
-    -- * Request Lenses
-    , dclvDryRun
-    , dclvInstanceId
-    , dclvVPCId
-
-    -- * Destructuring the Response
-    , detachClassicLinkVPCResponse
-    , DetachClassicLinkVPCResponse
-    -- * Response Lenses
-    , dclvrsReturn
-    , dclvrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DetachClassicLinkVpc.
---
---
---
--- /See:/ 'detachClassicLinkVPC' smart constructor.
-data DetachClassicLinkVPC = DetachClassicLinkVPC'
-    { _dclvDryRun     :: !(Maybe Bool)
-    , _dclvInstanceId :: !Text
-    , _dclvVPCId      :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachClassicLinkVPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dclvDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dclvInstanceId' - The ID of the instance to unlink from the VPC.
---
--- * 'dclvVPCId' - The ID of the VPC to which the instance is linked.
-detachClassicLinkVPC
-    :: Text -- ^ 'dclvInstanceId'
-    -> Text -- ^ 'dclvVPCId'
-    -> DetachClassicLinkVPC
-detachClassicLinkVPC pInstanceId_ pVPCId_ =
-    DetachClassicLinkVPC'
-    { _dclvDryRun = Nothing
-    , _dclvInstanceId = pInstanceId_
-    , _dclvVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dclvDryRun :: Lens' DetachClassicLinkVPC (Maybe Bool)
-dclvDryRun = lens _dclvDryRun (\ s a -> s{_dclvDryRun = a});
-
--- | The ID of the instance to unlink from the VPC.
-dclvInstanceId :: Lens' DetachClassicLinkVPC Text
-dclvInstanceId = lens _dclvInstanceId (\ s a -> s{_dclvInstanceId = a});
-
--- | The ID of the VPC to which the instance is linked.
-dclvVPCId :: Lens' DetachClassicLinkVPC Text
-dclvVPCId = lens _dclvVPCId (\ s a -> s{_dclvVPCId = a});
-
-instance AWSRequest DetachClassicLinkVPC where
-        type Rs DetachClassicLinkVPC =
-             DetachClassicLinkVPCResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DetachClassicLinkVPCResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable DetachClassicLinkVPC
-
-instance NFData DetachClassicLinkVPC
-
-instance ToHeaders DetachClassicLinkVPC where
-        toHeaders = const mempty
-
-instance ToPath DetachClassicLinkVPC where
-        toPath = const "/"
-
-instance ToQuery DetachClassicLinkVPC where
-        toQuery DetachClassicLinkVPC'{..}
-          = mconcat
-              ["Action" =: ("DetachClassicLinkVpc" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dclvDryRun,
-               "InstanceId" =: _dclvInstanceId,
-               "VpcId" =: _dclvVPCId]
-
--- | Contains the output of DetachClassicLinkVpc.
---
---
---
--- /See:/ 'detachClassicLinkVPCResponse' smart constructor.
-data DetachClassicLinkVPCResponse = DetachClassicLinkVPCResponse'
-    { _dclvrsReturn         :: !(Maybe Bool)
-    , _dclvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachClassicLinkVPCResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dclvrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'dclvrsResponseStatus' - -- | The response status code.
-detachClassicLinkVPCResponse
-    :: Int -- ^ 'dclvrsResponseStatus'
-    -> DetachClassicLinkVPCResponse
-detachClassicLinkVPCResponse pResponseStatus_ =
-    DetachClassicLinkVPCResponse'
-    { _dclvrsReturn = Nothing
-    , _dclvrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-dclvrsReturn :: Lens' DetachClassicLinkVPCResponse (Maybe Bool)
-dclvrsReturn = lens _dclvrsReturn (\ s a -> s{_dclvrsReturn = a});
-
--- | -- | The response status code.
-dclvrsResponseStatus :: Lens' DetachClassicLinkVPCResponse Int
-dclvrsResponseStatus = lens _dclvrsResponseStatus (\ s a -> s{_dclvrsResponseStatus = a});
-
-instance NFData DetachClassicLinkVPCResponse
diff --git a/gen/Network/AWS/EC2/DetachInternetGateway.hs b/gen/Network/AWS/EC2/DetachInternetGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DetachInternetGateway.hs
+++ /dev/null
@@ -1,125 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DetachInternetGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Detaches an Internet gateway from a VPC, disabling connectivity between the Internet and the VPC. The VPC must not contain any running instances with Elastic IP addresses.
---
---
-module Network.AWS.EC2.DetachInternetGateway
-    (
-    -- * Creating a Request
-      detachInternetGateway
-    , DetachInternetGateway
-    -- * Request Lenses
-    , digDryRun
-    , digInternetGatewayId
-    , digVPCId
-
-    -- * Destructuring the Response
-    , detachInternetGatewayResponse
-    , DetachInternetGatewayResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DetachInternetGateway.
---
---
---
--- /See:/ 'detachInternetGateway' smart constructor.
-data DetachInternetGateway = DetachInternetGateway'
-    { _digDryRun            :: !(Maybe Bool)
-    , _digInternetGatewayId :: !Text
-    , _digVPCId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'digDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'digInternetGatewayId' - The ID of the Internet gateway.
---
--- * 'digVPCId' - The ID of the VPC.
-detachInternetGateway
-    :: Text -- ^ 'digInternetGatewayId'
-    -> Text -- ^ 'digVPCId'
-    -> DetachInternetGateway
-detachInternetGateway pInternetGatewayId_ pVPCId_ =
-    DetachInternetGateway'
-    { _digDryRun = Nothing
-    , _digInternetGatewayId = pInternetGatewayId_
-    , _digVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-digDryRun :: Lens' DetachInternetGateway (Maybe Bool)
-digDryRun = lens _digDryRun (\ s a -> s{_digDryRun = a});
-
--- | The ID of the Internet gateway.
-digInternetGatewayId :: Lens' DetachInternetGateway Text
-digInternetGatewayId = lens _digInternetGatewayId (\ s a -> s{_digInternetGatewayId = a});
-
--- | The ID of the VPC.
-digVPCId :: Lens' DetachInternetGateway Text
-digVPCId = lens _digVPCId (\ s a -> s{_digVPCId = a});
-
-instance AWSRequest DetachInternetGateway where
-        type Rs DetachInternetGateway =
-             DetachInternetGatewayResponse
-        request = postQuery ec2
-        response = receiveNull DetachInternetGatewayResponse'
-
-instance Hashable DetachInternetGateway
-
-instance NFData DetachInternetGateway
-
-instance ToHeaders DetachInternetGateway where
-        toHeaders = const mempty
-
-instance ToPath DetachInternetGateway where
-        toPath = const "/"
-
-instance ToQuery DetachInternetGateway where
-        toQuery DetachInternetGateway'{..}
-          = mconcat
-              ["Action" =: ("DetachInternetGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _digDryRun,
-               "InternetGatewayId" =: _digInternetGatewayId,
-               "VpcId" =: _digVPCId]
-
--- | /See:/ 'detachInternetGatewayResponse' smart constructor.
-data DetachInternetGatewayResponse =
-    DetachInternetGatewayResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachInternetGatewayResponse' with the minimum fields required to make a request.
---
-detachInternetGatewayResponse
-    :: DetachInternetGatewayResponse
-detachInternetGatewayResponse = DetachInternetGatewayResponse'
-
-instance NFData DetachInternetGatewayResponse
diff --git a/gen/Network/AWS/EC2/DetachNetworkInterface.hs b/gen/Network/AWS/EC2/DetachNetworkInterface.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DetachNetworkInterface.hs
+++ /dev/null
@@ -1,125 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DetachNetworkInterface
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Detaches a network interface from an instance.
---
---
-module Network.AWS.EC2.DetachNetworkInterface
-    (
-    -- * Creating a Request
-      detachNetworkInterface
-    , DetachNetworkInterface
-    -- * Request Lenses
-    , dniForce
-    , dniDryRun
-    , dniAttachmentId
-
-    -- * Destructuring the Response
-    , detachNetworkInterfaceResponse
-    , DetachNetworkInterfaceResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DetachNetworkInterface.
---
---
---
--- /See:/ 'detachNetworkInterface' smart constructor.
-data DetachNetworkInterface = DetachNetworkInterface'
-    { _dniForce        :: !(Maybe Bool)
-    , _dniDryRun       :: !(Maybe Bool)
-    , _dniAttachmentId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dniForce' - Specifies whether to force a detachment.
---
--- * 'dniDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dniAttachmentId' - The ID of the attachment.
-detachNetworkInterface
-    :: Text -- ^ 'dniAttachmentId'
-    -> DetachNetworkInterface
-detachNetworkInterface pAttachmentId_ =
-    DetachNetworkInterface'
-    { _dniForce = Nothing
-    , _dniDryRun = Nothing
-    , _dniAttachmentId = pAttachmentId_
-    }
-
--- | Specifies whether to force a detachment.
-dniForce :: Lens' DetachNetworkInterface (Maybe Bool)
-dniForce = lens _dniForce (\ s a -> s{_dniForce = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dniDryRun :: Lens' DetachNetworkInterface (Maybe Bool)
-dniDryRun = lens _dniDryRun (\ s a -> s{_dniDryRun = a});
-
--- | The ID of the attachment.
-dniAttachmentId :: Lens' DetachNetworkInterface Text
-dniAttachmentId = lens _dniAttachmentId (\ s a -> s{_dniAttachmentId = a});
-
-instance AWSRequest DetachNetworkInterface where
-        type Rs DetachNetworkInterface =
-             DetachNetworkInterfaceResponse
-        request = postQuery ec2
-        response
-          = receiveNull DetachNetworkInterfaceResponse'
-
-instance Hashable DetachNetworkInterface
-
-instance NFData DetachNetworkInterface
-
-instance ToHeaders DetachNetworkInterface where
-        toHeaders = const mempty
-
-instance ToPath DetachNetworkInterface where
-        toPath = const "/"
-
-instance ToQuery DetachNetworkInterface where
-        toQuery DetachNetworkInterface'{..}
-          = mconcat
-              ["Action" =:
-                 ("DetachNetworkInterface" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Force" =: _dniForce, "DryRun" =: _dniDryRun,
-               "AttachmentId" =: _dniAttachmentId]
-
--- | /See:/ 'detachNetworkInterfaceResponse' smart constructor.
-data DetachNetworkInterfaceResponse =
-    DetachNetworkInterfaceResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachNetworkInterfaceResponse' with the minimum fields required to make a request.
---
-detachNetworkInterfaceResponse
-    :: DetachNetworkInterfaceResponse
-detachNetworkInterfaceResponse = DetachNetworkInterfaceResponse'
-
-instance NFData DetachNetworkInterfaceResponse
diff --git a/gen/Network/AWS/EC2/DetachVPNGateway.hs b/gen/Network/AWS/EC2/DetachVPNGateway.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DetachVPNGateway.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DetachVPNGateway
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Detaches a virtual private gateway from a VPC. You do this if you're planning to turn off the VPC and not use it anymore. You can confirm a virtual private gateway has been completely detached from a VPC by describing the virtual private gateway (any attachments to the virtual private gateway are also described).
---
---
--- You must wait for the attachment's state to switch to @detached@ before you can delete the VPC or attach a different VPC to the virtual private gateway.
---
-module Network.AWS.EC2.DetachVPNGateway
-    (
-    -- * Creating a Request
-      detachVPNGateway
-    , DetachVPNGateway
-    -- * Request Lenses
-    , dvpngDryRun
-    , dvpngVPNGatewayId
-    , dvpngVPCId
-
-    -- * Destructuring the Response
-    , detachVPNGatewayResponse
-    , DetachVPNGatewayResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DetachVpnGateway.
---
---
---
--- /See:/ 'detachVPNGateway' smart constructor.
-data DetachVPNGateway = DetachVPNGateway'
-    { _dvpngDryRun       :: !(Maybe Bool)
-    , _dvpngVPNGatewayId :: !Text
-    , _dvpngVPCId        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachVPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpngDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvpngVPNGatewayId' - The ID of the virtual private gateway.
---
--- * 'dvpngVPCId' - The ID of the VPC.
-detachVPNGateway
-    :: Text -- ^ 'dvpngVPNGatewayId'
-    -> Text -- ^ 'dvpngVPCId'
-    -> DetachVPNGateway
-detachVPNGateway pVPNGatewayId_ pVPCId_ =
-    DetachVPNGateway'
-    { _dvpngDryRun = Nothing
-    , _dvpngVPNGatewayId = pVPNGatewayId_
-    , _dvpngVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpngDryRun :: Lens' DetachVPNGateway (Maybe Bool)
-dvpngDryRun = lens _dvpngDryRun (\ s a -> s{_dvpngDryRun = a});
-
--- | The ID of the virtual private gateway.
-dvpngVPNGatewayId :: Lens' DetachVPNGateway Text
-dvpngVPNGatewayId = lens _dvpngVPNGatewayId (\ s a -> s{_dvpngVPNGatewayId = a});
-
--- | The ID of the VPC.
-dvpngVPCId :: Lens' DetachVPNGateway Text
-dvpngVPCId = lens _dvpngVPCId (\ s a -> s{_dvpngVPCId = a});
-
-instance AWSRequest DetachVPNGateway where
-        type Rs DetachVPNGateway = DetachVPNGatewayResponse
-        request = postQuery ec2
-        response = receiveNull DetachVPNGatewayResponse'
-
-instance Hashable DetachVPNGateway
-
-instance NFData DetachVPNGateway
-
-instance ToHeaders DetachVPNGateway where
-        toHeaders = const mempty
-
-instance ToPath DetachVPNGateway where
-        toPath = const "/"
-
-instance ToQuery DetachVPNGateway where
-        toQuery DetachVPNGateway'{..}
-          = mconcat
-              ["Action" =: ("DetachVpnGateway" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvpngDryRun,
-               "VpnGatewayId" =: _dvpngVPNGatewayId,
-               "VpcId" =: _dvpngVPCId]
-
--- | /See:/ 'detachVPNGatewayResponse' smart constructor.
-data DetachVPNGatewayResponse =
-    DetachVPNGatewayResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachVPNGatewayResponse' with the minimum fields required to make a request.
---
-detachVPNGatewayResponse
-    :: DetachVPNGatewayResponse
-detachVPNGatewayResponse = DetachVPNGatewayResponse'
-
-instance NFData DetachVPNGatewayResponse
diff --git a/gen/Network/AWS/EC2/DetachVolume.hs b/gen/Network/AWS/EC2/DetachVolume.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DetachVolume.hs
+++ /dev/null
@@ -1,139 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DetachVolume
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Detaches an EBS volume from an instance. Make sure to unmount any file systems on the device within your operating system before detaching the volume. Failure to do so can result in the volume becoming stuck in the @busy@ state while detaching. If this happens, detachment can be delayed indefinitely until you unmount the volume, force detachment, reboot the instance, or all three. If an EBS volume is the root device of an instance, it can't be detached while the instance is running. To detach the root volume, stop the instance first.
---
---
--- When a volume with an AWS Marketplace product code is detached from an instance, the product code is no longer associated with the instance.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html Detaching an Amazon EBS Volume> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.DetachVolume
-    (
-    -- * Creating a Request
-      detachVolume
-    , DetachVolume
-    -- * Request Lenses
-    , dvInstanceId
-    , dvForce
-    , dvDevice
-    , dvDryRun
-    , dvVolumeId
-
-    -- * Destructuring the Response
-    , volumeAttachment
-    , VolumeAttachment
-    -- * Response Lenses
-    , volInstanceId
-    , volDeleteOnTermination
-    , volState
-    , volDevice
-    , volVolumeId
-    , volAttachTime
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DetachVolume.
---
---
---
--- /See:/ 'detachVolume' smart constructor.
-data DetachVolume = DetachVolume'
-    { _dvInstanceId :: !(Maybe Text)
-    , _dvForce      :: !(Maybe Bool)
-    , _dvDevice     :: !(Maybe Text)
-    , _dvDryRun     :: !(Maybe Bool)
-    , _dvVolumeId   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DetachVolume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvInstanceId' - The ID of the instance.
---
--- * 'dvForce' - Forces detachment if the previous detachment attempt did not occur cleanly (for example, logging into an instance, unmounting the volume, and detaching normally). This option can lead to data loss or a corrupted file system. Use this option only as a last resort to detach a volume from a failed instance. The instance won't have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures.
---
--- * 'dvDevice' - The device name.
---
--- * 'dvDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvVolumeId' - The ID of the volume.
-detachVolume
-    :: Text -- ^ 'dvVolumeId'
-    -> DetachVolume
-detachVolume pVolumeId_ =
-    DetachVolume'
-    { _dvInstanceId = Nothing
-    , _dvForce = Nothing
-    , _dvDevice = Nothing
-    , _dvDryRun = Nothing
-    , _dvVolumeId = pVolumeId_
-    }
-
--- | The ID of the instance.
-dvInstanceId :: Lens' DetachVolume (Maybe Text)
-dvInstanceId = lens _dvInstanceId (\ s a -> s{_dvInstanceId = a});
-
--- | Forces detachment if the previous detachment attempt did not occur cleanly (for example, logging into an instance, unmounting the volume, and detaching normally). This option can lead to data loss or a corrupted file system. Use this option only as a last resort to detach a volume from a failed instance. The instance won't have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures.
-dvForce :: Lens' DetachVolume (Maybe Bool)
-dvForce = lens _dvForce (\ s a -> s{_dvForce = a});
-
--- | The device name.
-dvDevice :: Lens' DetachVolume (Maybe Text)
-dvDevice = lens _dvDevice (\ s a -> s{_dvDevice = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvDryRun :: Lens' DetachVolume (Maybe Bool)
-dvDryRun = lens _dvDryRun (\ s a -> s{_dvDryRun = a});
-
--- | The ID of the volume.
-dvVolumeId :: Lens' DetachVolume Text
-dvVolumeId = lens _dvVolumeId (\ s a -> s{_dvVolumeId = a});
-
-instance AWSRequest DetachVolume where
-        type Rs DetachVolume = VolumeAttachment
-        request = postQuery ec2
-        response = receiveXML (\ s h x -> parseXML x)
-
-instance Hashable DetachVolume
-
-instance NFData DetachVolume
-
-instance ToHeaders DetachVolume where
-        toHeaders = const mempty
-
-instance ToPath DetachVolume where
-        toPath = const "/"
-
-instance ToQuery DetachVolume where
-        toQuery DetachVolume'{..}
-          = mconcat
-              ["Action" =: ("DetachVolume" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "InstanceId" =: _dvInstanceId, "Force" =: _dvForce,
-               "Device" =: _dvDevice, "DryRun" =: _dvDryRun,
-               "VolumeId" =: _dvVolumeId]
diff --git a/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs b/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisableVGWRoutePropagation
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disables a virtual private gateway (VGW) from propagating routes to a specified route table of a VPC.
---
---
-module Network.AWS.EC2.DisableVGWRoutePropagation
-    (
-    -- * Creating a Request
-      disableVGWRoutePropagation
-    , DisableVGWRoutePropagation
-    -- * Request Lenses
-    , dvrpRouteTableId
-    , dvrpGatewayId
-
-    -- * Destructuring the Response
-    , disableVGWRoutePropagationResponse
-    , DisableVGWRoutePropagationResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DisableVgwRoutePropagation.
---
---
---
--- /See:/ 'disableVGWRoutePropagation' smart constructor.
-data DisableVGWRoutePropagation = DisableVGWRoutePropagation'
-    { _dvrpRouteTableId :: !Text
-    , _dvrpGatewayId    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisableVGWRoutePropagation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvrpRouteTableId' - The ID of the route table.
---
--- * 'dvrpGatewayId' - The ID of the virtual private gateway.
-disableVGWRoutePropagation
-    :: Text -- ^ 'dvrpRouteTableId'
-    -> Text -- ^ 'dvrpGatewayId'
-    -> DisableVGWRoutePropagation
-disableVGWRoutePropagation pRouteTableId_ pGatewayId_ =
-    DisableVGWRoutePropagation'
-    { _dvrpRouteTableId = pRouteTableId_
-    , _dvrpGatewayId = pGatewayId_
-    }
-
--- | The ID of the route table.
-dvrpRouteTableId :: Lens' DisableVGWRoutePropagation Text
-dvrpRouteTableId = lens _dvrpRouteTableId (\ s a -> s{_dvrpRouteTableId = a});
-
--- | The ID of the virtual private gateway.
-dvrpGatewayId :: Lens' DisableVGWRoutePropagation Text
-dvrpGatewayId = lens _dvrpGatewayId (\ s a -> s{_dvrpGatewayId = a});
-
-instance AWSRequest DisableVGWRoutePropagation where
-        type Rs DisableVGWRoutePropagation =
-             DisableVGWRoutePropagationResponse
-        request = postQuery ec2
-        response
-          = receiveNull DisableVGWRoutePropagationResponse'
-
-instance Hashable DisableVGWRoutePropagation
-
-instance NFData DisableVGWRoutePropagation
-
-instance ToHeaders DisableVGWRoutePropagation where
-        toHeaders = const mempty
-
-instance ToPath DisableVGWRoutePropagation where
-        toPath = const "/"
-
-instance ToQuery DisableVGWRoutePropagation where
-        toQuery DisableVGWRoutePropagation'{..}
-          = mconcat
-              ["Action" =:
-                 ("DisableVgwRoutePropagation" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "RouteTableId" =: _dvrpRouteTableId,
-               "GatewayId" =: _dvrpGatewayId]
-
--- | /See:/ 'disableVGWRoutePropagationResponse' smart constructor.
-data DisableVGWRoutePropagationResponse =
-    DisableVGWRoutePropagationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisableVGWRoutePropagationResponse' with the minimum fields required to make a request.
---
-disableVGWRoutePropagationResponse
-    :: DisableVGWRoutePropagationResponse
-disableVGWRoutePropagationResponse = DisableVGWRoutePropagationResponse'
-
-instance NFData DisableVGWRoutePropagationResponse
diff --git a/gen/Network/AWS/EC2/DisableVPCClassicLink.hs b/gen/Network/AWS/EC2/DisableVPCClassicLink.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisableVPCClassicLink.hs
+++ /dev/null
@@ -1,143 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisableVPCClassicLink
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC that has EC2-Classic instances linked to it.
---
---
-module Network.AWS.EC2.DisableVPCClassicLink
-    (
-    -- * Creating a Request
-      disableVPCClassicLink
-    , DisableVPCClassicLink
-    -- * Request Lenses
-    , dvpcclDryRun
-    , dvpcclVPCId
-
-    -- * Destructuring the Response
-    , disableVPCClassicLinkResponse
-    , DisableVPCClassicLinkResponse
-    -- * Response Lenses
-    , dvpcclrsReturn
-    , dvpcclrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DisableVpcClassicLink.
---
---
---
--- /See:/ 'disableVPCClassicLink' smart constructor.
-data DisableVPCClassicLink = DisableVPCClassicLink'
-    { _dvpcclDryRun :: !(Maybe Bool)
-    , _dvpcclVPCId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisableVPCClassicLink' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcclDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'dvpcclVPCId' - The ID of the VPC.
-disableVPCClassicLink
-    :: Text -- ^ 'dvpcclVPCId'
-    -> DisableVPCClassicLink
-disableVPCClassicLink pVPCId_ =
-    DisableVPCClassicLink'
-    { _dvpcclDryRun = Nothing
-    , _dvpcclVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dvpcclDryRun :: Lens' DisableVPCClassicLink (Maybe Bool)
-dvpcclDryRun = lens _dvpcclDryRun (\ s a -> s{_dvpcclDryRun = a});
-
--- | The ID of the VPC.
-dvpcclVPCId :: Lens' DisableVPCClassicLink Text
-dvpcclVPCId = lens _dvpcclVPCId (\ s a -> s{_dvpcclVPCId = a});
-
-instance AWSRequest DisableVPCClassicLink where
-        type Rs DisableVPCClassicLink =
-             DisableVPCClassicLinkResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DisableVPCClassicLinkResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable DisableVPCClassicLink
-
-instance NFData DisableVPCClassicLink
-
-instance ToHeaders DisableVPCClassicLink where
-        toHeaders = const mempty
-
-instance ToPath DisableVPCClassicLink where
-        toPath = const "/"
-
-instance ToQuery DisableVPCClassicLink where
-        toQuery DisableVPCClassicLink'{..}
-          = mconcat
-              ["Action" =: ("DisableVpcClassicLink" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _dvpcclDryRun, "VpcId" =: _dvpcclVPCId]
-
--- | Contains the output of DisableVpcClassicLink.
---
---
---
--- /See:/ 'disableVPCClassicLinkResponse' smart constructor.
-data DisableVPCClassicLinkResponse = DisableVPCClassicLinkResponse'
-    { _dvpcclrsReturn         :: !(Maybe Bool)
-    , _dvpcclrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisableVPCClassicLinkResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvpcclrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'dvpcclrsResponseStatus' - -- | The response status code.
-disableVPCClassicLinkResponse
-    :: Int -- ^ 'dvpcclrsResponseStatus'
-    -> DisableVPCClassicLinkResponse
-disableVPCClassicLinkResponse pResponseStatus_ =
-    DisableVPCClassicLinkResponse'
-    { _dvpcclrsReturn = Nothing
-    , _dvpcclrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-dvpcclrsReturn :: Lens' DisableVPCClassicLinkResponse (Maybe Bool)
-dvpcclrsReturn = lens _dvpcclrsReturn (\ s a -> s{_dvpcclrsReturn = a});
-
--- | -- | The response status code.
-dvpcclrsResponseStatus :: Lens' DisableVPCClassicLinkResponse Int
-dvpcclrsResponseStatus = lens _dvpcclrsResponseStatus (\ s a -> s{_dvpcclrsResponseStatus = a});
-
-instance NFData DisableVPCClassicLinkResponse
diff --git a/gen/Network/AWS/EC2/DisableVPCClassicLinkDNSSupport.hs b/gen/Network/AWS/EC2/DisableVPCClassicLinkDNSSupport.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisableVPCClassicLinkDNSSupport.hs
+++ /dev/null
@@ -1,138 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames resolve to public IP addresses when addressed between a linked EC2-Classic instance and instances in the VPC to which it's linked. For more information about ClassicLink, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink> in the Amazon Elastic Compute Cloud User Guide.
---
---
-module Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
-    (
-    -- * Creating a Request
-      disableVPCClassicLinkDNSSupport
-    , DisableVPCClassicLinkDNSSupport
-    -- * Request Lenses
-    , dvcldsVPCId
-
-    -- * Destructuring the Response
-    , disableVPCClassicLinkDNSSupportResponse
-    , DisableVPCClassicLinkDNSSupportResponse
-    -- * Response Lenses
-    , dvcldsrsReturn
-    , dvcldsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DisableVpcClassicLinkDnsSupport.
---
---
---
--- /See:/ 'disableVPCClassicLinkDNSSupport' smart constructor.
-newtype DisableVPCClassicLinkDNSSupport = DisableVPCClassicLinkDNSSupport'
-    { _dvcldsVPCId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisableVPCClassicLinkDNSSupport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcldsVPCId' - The ID of the VPC.
-disableVPCClassicLinkDNSSupport
-    :: DisableVPCClassicLinkDNSSupport
-disableVPCClassicLinkDNSSupport =
-    DisableVPCClassicLinkDNSSupport'
-    { _dvcldsVPCId = Nothing
-    }
-
--- | The ID of the VPC.
-dvcldsVPCId :: Lens' DisableVPCClassicLinkDNSSupport (Maybe Text)
-dvcldsVPCId = lens _dvcldsVPCId (\ s a -> s{_dvcldsVPCId = a});
-
-instance AWSRequest DisableVPCClassicLinkDNSSupport
-         where
-        type Rs DisableVPCClassicLinkDNSSupport =
-             DisableVPCClassicLinkDNSSupportResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DisableVPCClassicLinkDNSSupportResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable DisableVPCClassicLinkDNSSupport
-
-instance NFData DisableVPCClassicLinkDNSSupport
-
-instance ToHeaders DisableVPCClassicLinkDNSSupport
-         where
-        toHeaders = const mempty
-
-instance ToPath DisableVPCClassicLinkDNSSupport where
-        toPath = const "/"
-
-instance ToQuery DisableVPCClassicLinkDNSSupport
-         where
-        toQuery DisableVPCClassicLinkDNSSupport'{..}
-          = mconcat
-              ["Action" =:
-                 ("DisableVpcClassicLinkDnsSupport" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpcId" =: _dvcldsVPCId]
-
--- | Contains the output of DisableVpcClassicLinkDnsSupport.
---
---
---
--- /See:/ 'disableVPCClassicLinkDNSSupportResponse' smart constructor.
-data DisableVPCClassicLinkDNSSupportResponse = DisableVPCClassicLinkDNSSupportResponse'
-    { _dvcldsrsReturn         :: !(Maybe Bool)
-    , _dvcldsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisableVPCClassicLinkDNSSupportResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcldsrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'dvcldsrsResponseStatus' - -- | The response status code.
-disableVPCClassicLinkDNSSupportResponse
-    :: Int -- ^ 'dvcldsrsResponseStatus'
-    -> DisableVPCClassicLinkDNSSupportResponse
-disableVPCClassicLinkDNSSupportResponse pResponseStatus_ =
-    DisableVPCClassicLinkDNSSupportResponse'
-    { _dvcldsrsReturn = Nothing
-    , _dvcldsrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-dvcldsrsReturn :: Lens' DisableVPCClassicLinkDNSSupportResponse (Maybe Bool)
-dvcldsrsReturn = lens _dvcldsrsReturn (\ s a -> s{_dvcldsrsReturn = a});
-
--- | -- | The response status code.
-dvcldsrsResponseStatus :: Lens' DisableVPCClassicLinkDNSSupportResponse Int
-dvcldsrsResponseStatus = lens _dvcldsrsResponseStatus (\ s a -> s{_dvcldsrsResponseStatus = a});
-
-instance NFData
-         DisableVPCClassicLinkDNSSupportResponse
diff --git a/gen/Network/AWS/EC2/DisassociateAddress.hs b/gen/Network/AWS/EC2/DisassociateAddress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisassociateAddress.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisassociateAddress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates an Elastic IP address from the instance or network interface it's associated with.
---
---
--- An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error.
---
-module Network.AWS.EC2.DisassociateAddress
-    (
-    -- * Creating a Request
-      disassociateAddress
-    , DisassociateAddress
-    -- * Request Lenses
-    , dasAssociationId
-    , dasPublicIP
-    , dasDryRun
-
-    -- * Destructuring the Response
-    , disassociateAddressResponse
-    , DisassociateAddressResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DisassociateAddress.
---
---
---
--- /See:/ 'disassociateAddress' smart constructor.
-data DisassociateAddress = DisassociateAddress'
-    { _dasAssociationId :: !(Maybe Text)
-    , _dasPublicIP      :: !(Maybe Text)
-    , _dasDryRun        :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dasAssociationId' - [EC2-VPC] The association ID. Required for EC2-VPC.
---
--- * 'dasPublicIP' - [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
---
--- * 'dasDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-disassociateAddress
-    :: DisassociateAddress
-disassociateAddress =
-    DisassociateAddress'
-    { _dasAssociationId = Nothing
-    , _dasPublicIP = Nothing
-    , _dasDryRun = Nothing
-    }
-
--- | [EC2-VPC] The association ID. Required for EC2-VPC.
-dasAssociationId :: Lens' DisassociateAddress (Maybe Text)
-dasAssociationId = lens _dasAssociationId (\ s a -> s{_dasAssociationId = a});
-
--- | [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
-dasPublicIP :: Lens' DisassociateAddress (Maybe Text)
-dasPublicIP = lens _dasPublicIP (\ s a -> s{_dasPublicIP = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-dasDryRun :: Lens' DisassociateAddress (Maybe Bool)
-dasDryRun = lens _dasDryRun (\ s a -> s{_dasDryRun = a});
-
-instance AWSRequest DisassociateAddress where
-        type Rs DisassociateAddress =
-             DisassociateAddressResponse
-        request = postQuery ec2
-        response = receiveNull DisassociateAddressResponse'
-
-instance Hashable DisassociateAddress
-
-instance NFData DisassociateAddress
-
-instance ToHeaders DisassociateAddress where
-        toHeaders = const mempty
-
-instance ToPath DisassociateAddress where
-        toPath = const "/"
-
-instance ToQuery DisassociateAddress where
-        toQuery DisassociateAddress'{..}
-          = mconcat
-              ["Action" =: ("DisassociateAddress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AssociationId" =: _dasAssociationId,
-               "PublicIp" =: _dasPublicIP, "DryRun" =: _dasDryRun]
-
--- | /See:/ 'disassociateAddressResponse' smart constructor.
-data DisassociateAddressResponse =
-    DisassociateAddressResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateAddressResponse' with the minimum fields required to make a request.
---
-disassociateAddressResponse
-    :: DisassociateAddressResponse
-disassociateAddressResponse = DisassociateAddressResponse'
-
-instance NFData DisassociateAddressResponse
diff --git a/gen/Network/AWS/EC2/DisassociateRouteTable.hs b/gen/Network/AWS/EC2/DisassociateRouteTable.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisassociateRouteTable.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisassociateRouteTable
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates a subnet from a route table.
---
---
--- After you perform this action, the subnet no longer uses the routes in the route table. Instead, it uses the routes in the VPC's main route table. For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.DisassociateRouteTable
-    (
-    -- * Creating a Request
-      disassociateRouteTable
-    , DisassociateRouteTable
-    -- * Request Lenses
-    , drtDryRun
-    , drtAssociationId
-
-    -- * Destructuring the Response
-    , disassociateRouteTableResponse
-    , DisassociateRouteTableResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for DisassociateRouteTable.
---
---
---
--- /See:/ 'disassociateRouteTable' smart constructor.
-data DisassociateRouteTable = DisassociateRouteTable'
-    { _drtDryRun        :: !(Maybe Bool)
-    , _drtAssociationId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateRouteTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drtDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'drtAssociationId' - The association ID representing the current association between the route table and subnet.
-disassociateRouteTable
-    :: Text -- ^ 'drtAssociationId'
-    -> DisassociateRouteTable
-disassociateRouteTable pAssociationId_ =
-    DisassociateRouteTable'
-    { _drtDryRun = Nothing
-    , _drtAssociationId = pAssociationId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-drtDryRun :: Lens' DisassociateRouteTable (Maybe Bool)
-drtDryRun = lens _drtDryRun (\ s a -> s{_drtDryRun = a});
-
--- | The association ID representing the current association between the route table and subnet.
-drtAssociationId :: Lens' DisassociateRouteTable Text
-drtAssociationId = lens _drtAssociationId (\ s a -> s{_drtAssociationId = a});
-
-instance AWSRequest DisassociateRouteTable where
-        type Rs DisassociateRouteTable =
-             DisassociateRouteTableResponse
-        request = postQuery ec2
-        response
-          = receiveNull DisassociateRouteTableResponse'
-
-instance Hashable DisassociateRouteTable
-
-instance NFData DisassociateRouteTable
-
-instance ToHeaders DisassociateRouteTable where
-        toHeaders = const mempty
-
-instance ToPath DisassociateRouteTable where
-        toPath = const "/"
-
-instance ToQuery DisassociateRouteTable where
-        toQuery DisassociateRouteTable'{..}
-          = mconcat
-              ["Action" =:
-                 ("DisassociateRouteTable" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _drtDryRun,
-               "AssociationId" =: _drtAssociationId]
-
--- | /See:/ 'disassociateRouteTableResponse' smart constructor.
-data DisassociateRouteTableResponse =
-    DisassociateRouteTableResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateRouteTableResponse' with the minimum fields required to make a request.
---
-disassociateRouteTableResponse
-    :: DisassociateRouteTableResponse
-disassociateRouteTableResponse = DisassociateRouteTableResponse'
-
-instance NFData DisassociateRouteTableResponse
diff --git a/gen/Network/AWS/EC2/DisassociateSubnetCidrBlock.hs b/gen/Network/AWS/EC2/DisassociateSubnetCidrBlock.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisassociateSubnetCidrBlock.hs
+++ /dev/null
@@ -1,138 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisassociateSubnetCidrBlock
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates a CIDR block from a subnet. Currently, you can disassociate an IPv6 CIDR block only. You must detach or delete all gateways and resources that are associated with the CIDR block before you can disassociate it.
---
---
-module Network.AWS.EC2.DisassociateSubnetCidrBlock
-    (
-    -- * Creating a Request
-      disassociateSubnetCidrBlock
-    , DisassociateSubnetCidrBlock
-    -- * Request Lenses
-    , dscbAssociationId
-
-    -- * Destructuring the Response
-    , disassociateSubnetCidrBlockResponse
-    , DisassociateSubnetCidrBlockResponse
-    -- * Response Lenses
-    , dscbrsSubnetId
-    , dscbrsIPv6CidrBlockAssociation
-    , dscbrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'disassociateSubnetCidrBlock' smart constructor.
-newtype DisassociateSubnetCidrBlock = DisassociateSubnetCidrBlock'
-    { _dscbAssociationId :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateSubnetCidrBlock' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dscbAssociationId' - The association ID for the CIDR block.
-disassociateSubnetCidrBlock
-    :: Text -- ^ 'dscbAssociationId'
-    -> DisassociateSubnetCidrBlock
-disassociateSubnetCidrBlock pAssociationId_ =
-    DisassociateSubnetCidrBlock'
-    { _dscbAssociationId = pAssociationId_
-    }
-
--- | The association ID for the CIDR block.
-dscbAssociationId :: Lens' DisassociateSubnetCidrBlock Text
-dscbAssociationId = lens _dscbAssociationId (\ s a -> s{_dscbAssociationId = a});
-
-instance AWSRequest DisassociateSubnetCidrBlock where
-        type Rs DisassociateSubnetCidrBlock =
-             DisassociateSubnetCidrBlockResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DisassociateSubnetCidrBlockResponse' <$>
-                   (x .@? "subnetId") <*>
-                     (x .@? "ipv6CidrBlockAssociation")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DisassociateSubnetCidrBlock
-
-instance NFData DisassociateSubnetCidrBlock
-
-instance ToHeaders DisassociateSubnetCidrBlock where
-        toHeaders = const mempty
-
-instance ToPath DisassociateSubnetCidrBlock where
-        toPath = const "/"
-
-instance ToQuery DisassociateSubnetCidrBlock where
-        toQuery DisassociateSubnetCidrBlock'{..}
-          = mconcat
-              ["Action" =:
-                 ("DisassociateSubnetCidrBlock" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AssociationId" =: _dscbAssociationId]
-
--- | /See:/ 'disassociateSubnetCidrBlockResponse' smart constructor.
-data DisassociateSubnetCidrBlockResponse = DisassociateSubnetCidrBlockResponse'
-    { _dscbrsSubnetId                 :: !(Maybe Text)
-    , _dscbrsIPv6CidrBlockAssociation :: !(Maybe SubnetIPv6CidrBlockAssociation)
-    , _dscbrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateSubnetCidrBlockResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dscbrsSubnetId' - The ID of the subnet.
---
--- * 'dscbrsIPv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
---
--- * 'dscbrsResponseStatus' - -- | The response status code.
-disassociateSubnetCidrBlockResponse
-    :: Int -- ^ 'dscbrsResponseStatus'
-    -> DisassociateSubnetCidrBlockResponse
-disassociateSubnetCidrBlockResponse pResponseStatus_ =
-    DisassociateSubnetCidrBlockResponse'
-    { _dscbrsSubnetId = Nothing
-    , _dscbrsIPv6CidrBlockAssociation = Nothing
-    , _dscbrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the subnet.
-dscbrsSubnetId :: Lens' DisassociateSubnetCidrBlockResponse (Maybe Text)
-dscbrsSubnetId = lens _dscbrsSubnetId (\ s a -> s{_dscbrsSubnetId = a});
-
--- | Information about the IPv6 CIDR block association.
-dscbrsIPv6CidrBlockAssociation :: Lens' DisassociateSubnetCidrBlockResponse (Maybe SubnetIPv6CidrBlockAssociation)
-dscbrsIPv6CidrBlockAssociation = lens _dscbrsIPv6CidrBlockAssociation (\ s a -> s{_dscbrsIPv6CidrBlockAssociation = a});
-
--- | -- | The response status code.
-dscbrsResponseStatus :: Lens' DisassociateSubnetCidrBlockResponse Int
-dscbrsResponseStatus = lens _dscbrsResponseStatus (\ s a -> s{_dscbrsResponseStatus = a});
-
-instance NFData DisassociateSubnetCidrBlockResponse
diff --git a/gen/Network/AWS/EC2/DisassociateVPCCidrBlock.hs b/gen/Network/AWS/EC2/DisassociateVPCCidrBlock.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/DisassociateVPCCidrBlock.hs
+++ /dev/null
@@ -1,138 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.DisassociateVPCCidrBlock
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates a CIDR block from a VPC. Currently, you can disassociate an IPv6 CIDR block only. You must detach or delete all gateways and resources that are associated with the CIDR block before you can disassociate it.
---
---
-module Network.AWS.EC2.DisassociateVPCCidrBlock
-    (
-    -- * Creating a Request
-      disassociateVPCCidrBlock
-    , DisassociateVPCCidrBlock
-    -- * Request Lenses
-    , dvcbAssociationId
-
-    -- * Destructuring the Response
-    , disassociateVPCCidrBlockResponse
-    , DisassociateVPCCidrBlockResponse
-    -- * Response Lenses
-    , dvcbrsVPCId
-    , dvcbrsIPv6CidrBlockAssociation
-    , dvcbrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'disassociateVPCCidrBlock' smart constructor.
-newtype DisassociateVPCCidrBlock = DisassociateVPCCidrBlock'
-    { _dvcbAssociationId :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateVPCCidrBlock' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcbAssociationId' - The association ID for the CIDR block.
-disassociateVPCCidrBlock
-    :: Text -- ^ 'dvcbAssociationId'
-    -> DisassociateVPCCidrBlock
-disassociateVPCCidrBlock pAssociationId_ =
-    DisassociateVPCCidrBlock'
-    { _dvcbAssociationId = pAssociationId_
-    }
-
--- | The association ID for the CIDR block.
-dvcbAssociationId :: Lens' DisassociateVPCCidrBlock Text
-dvcbAssociationId = lens _dvcbAssociationId (\ s a -> s{_dvcbAssociationId = a});
-
-instance AWSRequest DisassociateVPCCidrBlock where
-        type Rs DisassociateVPCCidrBlock =
-             DisassociateVPCCidrBlockResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 DisassociateVPCCidrBlockResponse' <$>
-                   (x .@? "vpcId") <*>
-                     (x .@? "ipv6CidrBlockAssociation")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DisassociateVPCCidrBlock
-
-instance NFData DisassociateVPCCidrBlock
-
-instance ToHeaders DisassociateVPCCidrBlock where
-        toHeaders = const mempty
-
-instance ToPath DisassociateVPCCidrBlock where
-        toPath = const "/"
-
-instance ToQuery DisassociateVPCCidrBlock where
-        toQuery DisassociateVPCCidrBlock'{..}
-          = mconcat
-              ["Action" =:
-                 ("DisassociateVpcCidrBlock" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AssociationId" =: _dvcbAssociationId]
-
--- | /See:/ 'disassociateVPCCidrBlockResponse' smart constructor.
-data DisassociateVPCCidrBlockResponse = DisassociateVPCCidrBlockResponse'
-    { _dvcbrsVPCId                    :: !(Maybe Text)
-    , _dvcbrsIPv6CidrBlockAssociation :: !(Maybe VPCIPv6CidrBlockAssociation)
-    , _dvcbrsResponseStatus           :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DisassociateVPCCidrBlockResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dvcbrsVPCId' - The ID of the VPC.
---
--- * 'dvcbrsIPv6CidrBlockAssociation' - Information about the IPv6 CIDR block association.
---
--- * 'dvcbrsResponseStatus' - -- | The response status code.
-disassociateVPCCidrBlockResponse
-    :: Int -- ^ 'dvcbrsResponseStatus'
-    -> DisassociateVPCCidrBlockResponse
-disassociateVPCCidrBlockResponse pResponseStatus_ =
-    DisassociateVPCCidrBlockResponse'
-    { _dvcbrsVPCId = Nothing
-    , _dvcbrsIPv6CidrBlockAssociation = Nothing
-    , _dvcbrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the VPC.
-dvcbrsVPCId :: Lens' DisassociateVPCCidrBlockResponse (Maybe Text)
-dvcbrsVPCId = lens _dvcbrsVPCId (\ s a -> s{_dvcbrsVPCId = a});
-
--- | Information about the IPv6 CIDR block association.
-dvcbrsIPv6CidrBlockAssociation :: Lens' DisassociateVPCCidrBlockResponse (Maybe VPCIPv6CidrBlockAssociation)
-dvcbrsIPv6CidrBlockAssociation = lens _dvcbrsIPv6CidrBlockAssociation (\ s a -> s{_dvcbrsIPv6CidrBlockAssociation = a});
-
--- | -- | The response status code.
-dvcbrsResponseStatus :: Lens' DisassociateVPCCidrBlockResponse Int
-dvcbrsResponseStatus = lens _dvcbrsResponseStatus (\ s a -> s{_dvcbrsResponseStatus = a});
-
-instance NFData DisassociateVPCCidrBlockResponse
diff --git a/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs b/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.EnableVGWRoutePropagation
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Enables a virtual private gateway (VGW) to propagate routes to the specified route table of a VPC.
---
---
-module Network.AWS.EC2.EnableVGWRoutePropagation
-    (
-    -- * Creating a Request
-      enableVGWRoutePropagation
-    , EnableVGWRoutePropagation
-    -- * Request Lenses
-    , evrpRouteTableId
-    , evrpGatewayId
-
-    -- * Destructuring the Response
-    , enableVGWRoutePropagationResponse
-    , EnableVGWRoutePropagationResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for EnableVgwRoutePropagation.
---
---
---
--- /See:/ 'enableVGWRoutePropagation' smart constructor.
-data EnableVGWRoutePropagation = EnableVGWRoutePropagation'
-    { _evrpRouteTableId :: !Text
-    , _evrpGatewayId    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVGWRoutePropagation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evrpRouteTableId' - The ID of the route table.
---
--- * 'evrpGatewayId' - The ID of the virtual private gateway.
-enableVGWRoutePropagation
-    :: Text -- ^ 'evrpRouteTableId'
-    -> Text -- ^ 'evrpGatewayId'
-    -> EnableVGWRoutePropagation
-enableVGWRoutePropagation pRouteTableId_ pGatewayId_ =
-    EnableVGWRoutePropagation'
-    { _evrpRouteTableId = pRouteTableId_
-    , _evrpGatewayId = pGatewayId_
-    }
-
--- | The ID of the route table.
-evrpRouteTableId :: Lens' EnableVGWRoutePropagation Text
-evrpRouteTableId = lens _evrpRouteTableId (\ s a -> s{_evrpRouteTableId = a});
-
--- | The ID of the virtual private gateway.
-evrpGatewayId :: Lens' EnableVGWRoutePropagation Text
-evrpGatewayId = lens _evrpGatewayId (\ s a -> s{_evrpGatewayId = a});
-
-instance AWSRequest EnableVGWRoutePropagation where
-        type Rs EnableVGWRoutePropagation =
-             EnableVGWRoutePropagationResponse
-        request = postQuery ec2
-        response
-          = receiveNull EnableVGWRoutePropagationResponse'
-
-instance Hashable EnableVGWRoutePropagation
-
-instance NFData EnableVGWRoutePropagation
-
-instance ToHeaders EnableVGWRoutePropagation where
-        toHeaders = const mempty
-
-instance ToPath EnableVGWRoutePropagation where
-        toPath = const "/"
-
-instance ToQuery EnableVGWRoutePropagation where
-        toQuery EnableVGWRoutePropagation'{..}
-          = mconcat
-              ["Action" =:
-                 ("EnableVgwRoutePropagation" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "RouteTableId" =: _evrpRouteTableId,
-               "GatewayId" =: _evrpGatewayId]
-
--- | /See:/ 'enableVGWRoutePropagationResponse' smart constructor.
-data EnableVGWRoutePropagationResponse =
-    EnableVGWRoutePropagationResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVGWRoutePropagationResponse' with the minimum fields required to make a request.
---
-enableVGWRoutePropagationResponse
-    :: EnableVGWRoutePropagationResponse
-enableVGWRoutePropagationResponse = EnableVGWRoutePropagationResponse'
-
-instance NFData EnableVGWRoutePropagationResponse
diff --git a/gen/Network/AWS/EC2/EnableVPCClassicLink.hs b/gen/Network/AWS/EC2/EnableVPCClassicLink.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/EnableVPCClassicLink.hs
+++ /dev/null
@@ -1,143 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.EnableVPCClassicLink
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Enables a VPC for ClassicLink. You can then link EC2-Classic instances to your ClassicLink-enabled VPC to allow communication over private IP addresses. You cannot enable your VPC for ClassicLink if any of your VPC's route tables have existing routes for address ranges within the @10.0.0.0/8@ IP address range, excluding local routes for VPCs in the @10.0.0.0/16@ and @10.1.0.0/16@ IP address ranges. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink> in the Amazon Elastic Compute Cloud User Guide.
---
---
-module Network.AWS.EC2.EnableVPCClassicLink
-    (
-    -- * Creating a Request
-      enableVPCClassicLink
-    , EnableVPCClassicLink
-    -- * Request Lenses
-    , evclDryRun
-    , evclVPCId
-
-    -- * Destructuring the Response
-    , enableVPCClassicLinkResponse
-    , EnableVPCClassicLinkResponse
-    -- * Response Lenses
-    , evclrsReturn
-    , evclrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for EnableVpcClassicLink.
---
---
---
--- /See:/ 'enableVPCClassicLink' smart constructor.
-data EnableVPCClassicLink = EnableVPCClassicLink'
-    { _evclDryRun :: !(Maybe Bool)
-    , _evclVPCId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVPCClassicLink' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evclDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'evclVPCId' - The ID of the VPC.
-enableVPCClassicLink
-    :: Text -- ^ 'evclVPCId'
-    -> EnableVPCClassicLink
-enableVPCClassicLink pVPCId_ =
-    EnableVPCClassicLink'
-    { _evclDryRun = Nothing
-    , _evclVPCId = pVPCId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-evclDryRun :: Lens' EnableVPCClassicLink (Maybe Bool)
-evclDryRun = lens _evclDryRun (\ s a -> s{_evclDryRun = a});
-
--- | The ID of the VPC.
-evclVPCId :: Lens' EnableVPCClassicLink Text
-evclVPCId = lens _evclVPCId (\ s a -> s{_evclVPCId = a});
-
-instance AWSRequest EnableVPCClassicLink where
-        type Rs EnableVPCClassicLink =
-             EnableVPCClassicLinkResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 EnableVPCClassicLinkResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable EnableVPCClassicLink
-
-instance NFData EnableVPCClassicLink
-
-instance ToHeaders EnableVPCClassicLink where
-        toHeaders = const mempty
-
-instance ToPath EnableVPCClassicLink where
-        toPath = const "/"
-
-instance ToQuery EnableVPCClassicLink where
-        toQuery EnableVPCClassicLink'{..}
-          = mconcat
-              ["Action" =: ("EnableVpcClassicLink" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _evclDryRun, "VpcId" =: _evclVPCId]
-
--- | Contains the output of EnableVpcClassicLink.
---
---
---
--- /See:/ 'enableVPCClassicLinkResponse' smart constructor.
-data EnableVPCClassicLinkResponse = EnableVPCClassicLinkResponse'
-    { _evclrsReturn         :: !(Maybe Bool)
-    , _evclrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVPCClassicLinkResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evclrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'evclrsResponseStatus' - -- | The response status code.
-enableVPCClassicLinkResponse
-    :: Int -- ^ 'evclrsResponseStatus'
-    -> EnableVPCClassicLinkResponse
-enableVPCClassicLinkResponse pResponseStatus_ =
-    EnableVPCClassicLinkResponse'
-    { _evclrsReturn = Nothing
-    , _evclrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-evclrsReturn :: Lens' EnableVPCClassicLinkResponse (Maybe Bool)
-evclrsReturn = lens _evclrsReturn (\ s a -> s{_evclrsReturn = a});
-
--- | -- | The response status code.
-evclrsResponseStatus :: Lens' EnableVPCClassicLinkResponse Int
-evclrsResponseStatus = lens _evclrsResponseStatus (\ s a -> s{_evclrsResponseStatus = a});
-
-instance NFData EnableVPCClassicLinkResponse
diff --git a/gen/Network/AWS/EC2/EnableVPCClassicLinkDNSSupport.hs b/gen/Network/AWS/EC2/EnableVPCClassicLinkDNSSupport.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/EnableVPCClassicLinkDNSSupport.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Enables a VPC to support DNS hostname resolution for ClassicLink. If enabled, the DNS hostname of a linked EC2-Classic instance resolves to its private IP address when addressed from an instance in the VPC to which it's linked. Similarly, the DNS hostname of an instance in a VPC resolves to its private IP address when addressed from a linked EC2-Classic instance. For more information about ClassicLink, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
-    (
-    -- * Creating a Request
-      enableVPCClassicLinkDNSSupport
-    , EnableVPCClassicLinkDNSSupport
-    -- * Request Lenses
-    , evcldsVPCId
-
-    -- * Destructuring the Response
-    , enableVPCClassicLinkDNSSupportResponse
-    , EnableVPCClassicLinkDNSSupportResponse
-    -- * Response Lenses
-    , evcldsrsReturn
-    , evcldsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for EnableVpcClassicLinkDnsSupport.
---
---
---
--- /See:/ 'enableVPCClassicLinkDNSSupport' smart constructor.
-newtype EnableVPCClassicLinkDNSSupport = EnableVPCClassicLinkDNSSupport'
-    { _evcldsVPCId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVPCClassicLinkDNSSupport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evcldsVPCId' - The ID of the VPC.
-enableVPCClassicLinkDNSSupport
-    :: EnableVPCClassicLinkDNSSupport
-enableVPCClassicLinkDNSSupport =
-    EnableVPCClassicLinkDNSSupport'
-    { _evcldsVPCId = Nothing
-    }
-
--- | The ID of the VPC.
-evcldsVPCId :: Lens' EnableVPCClassicLinkDNSSupport (Maybe Text)
-evcldsVPCId = lens _evcldsVPCId (\ s a -> s{_evcldsVPCId = a});
-
-instance AWSRequest EnableVPCClassicLinkDNSSupport
-         where
-        type Rs EnableVPCClassicLinkDNSSupport =
-             EnableVPCClassicLinkDNSSupportResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 EnableVPCClassicLinkDNSSupportResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable EnableVPCClassicLinkDNSSupport
-
-instance NFData EnableVPCClassicLinkDNSSupport
-
-instance ToHeaders EnableVPCClassicLinkDNSSupport
-         where
-        toHeaders = const mempty
-
-instance ToPath EnableVPCClassicLinkDNSSupport where
-        toPath = const "/"
-
-instance ToQuery EnableVPCClassicLinkDNSSupport where
-        toQuery EnableVPCClassicLinkDNSSupport'{..}
-          = mconcat
-              ["Action" =:
-                 ("EnableVpcClassicLinkDnsSupport" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpcId" =: _evcldsVPCId]
-
--- | Contains the output of EnableVpcClassicLinkDnsSupport.
---
---
---
--- /See:/ 'enableVPCClassicLinkDNSSupportResponse' smart constructor.
-data EnableVPCClassicLinkDNSSupportResponse = EnableVPCClassicLinkDNSSupportResponse'
-    { _evcldsrsReturn         :: !(Maybe Bool)
-    , _evcldsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVPCClassicLinkDNSSupportResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evcldsrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'evcldsrsResponseStatus' - -- | The response status code.
-enableVPCClassicLinkDNSSupportResponse
-    :: Int -- ^ 'evcldsrsResponseStatus'
-    -> EnableVPCClassicLinkDNSSupportResponse
-enableVPCClassicLinkDNSSupportResponse pResponseStatus_ =
-    EnableVPCClassicLinkDNSSupportResponse'
-    { _evcldsrsReturn = Nothing
-    , _evcldsrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-evcldsrsReturn :: Lens' EnableVPCClassicLinkDNSSupportResponse (Maybe Bool)
-evcldsrsReturn = lens _evcldsrsReturn (\ s a -> s{_evcldsrsReturn = a});
-
--- | -- | The response status code.
-evcldsrsResponseStatus :: Lens' EnableVPCClassicLinkDNSSupportResponse Int
-evcldsrsResponseStatus = lens _evcldsrsResponseStatus (\ s a -> s{_evcldsrsResponseStatus = a});
-
-instance NFData
-         EnableVPCClassicLinkDNSSupportResponse
diff --git a/gen/Network/AWS/EC2/EnableVolumeIO.hs b/gen/Network/AWS/EC2/EnableVolumeIO.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/EnableVolumeIO.hs
+++ /dev/null
@@ -1,112 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.EnableVolumeIO
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Enables I/O operations for a volume that had I/O operations disabled because the data on the volume was potentially inconsistent.
---
---
-module Network.AWS.EC2.EnableVolumeIO
-    (
-    -- * Creating a Request
-      enableVolumeIO
-    , EnableVolumeIO
-    -- * Request Lenses
-    , evioDryRun
-    , evioVolumeId
-
-    -- * Destructuring the Response
-    , enableVolumeIOResponse
-    , EnableVolumeIOResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for EnableVolumeIO.
---
---
---
--- /See:/ 'enableVolumeIO' smart constructor.
-data EnableVolumeIO = EnableVolumeIO'
-    { _evioDryRun   :: !(Maybe Bool)
-    , _evioVolumeId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVolumeIO' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'evioDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'evioVolumeId' - The ID of the volume.
-enableVolumeIO
-    :: Text -- ^ 'evioVolumeId'
-    -> EnableVolumeIO
-enableVolumeIO pVolumeId_ =
-    EnableVolumeIO'
-    { _evioDryRun = Nothing
-    , _evioVolumeId = pVolumeId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-evioDryRun :: Lens' EnableVolumeIO (Maybe Bool)
-evioDryRun = lens _evioDryRun (\ s a -> s{_evioDryRun = a});
-
--- | The ID of the volume.
-evioVolumeId :: Lens' EnableVolumeIO Text
-evioVolumeId = lens _evioVolumeId (\ s a -> s{_evioVolumeId = a});
-
-instance AWSRequest EnableVolumeIO where
-        type Rs EnableVolumeIO = EnableVolumeIOResponse
-        request = postQuery ec2
-        response = receiveNull EnableVolumeIOResponse'
-
-instance Hashable EnableVolumeIO
-
-instance NFData EnableVolumeIO
-
-instance ToHeaders EnableVolumeIO where
-        toHeaders = const mempty
-
-instance ToPath EnableVolumeIO where
-        toPath = const "/"
-
-instance ToQuery EnableVolumeIO where
-        toQuery EnableVolumeIO'{..}
-          = mconcat
-              ["Action" =: ("EnableVolumeIO" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _evioDryRun, "VolumeId" =: _evioVolumeId]
-
--- | /See:/ 'enableVolumeIOResponse' smart constructor.
-data EnableVolumeIOResponse =
-    EnableVolumeIOResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EnableVolumeIOResponse' with the minimum fields required to make a request.
---
-enableVolumeIOResponse
-    :: EnableVolumeIOResponse
-enableVolumeIOResponse = EnableVolumeIOResponse'
-
-instance NFData EnableVolumeIOResponse
diff --git a/gen/Network/AWS/EC2/GetConsoleOutput.hs b/gen/Network/AWS/EC2/GetConsoleOutput.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/GetConsoleOutput.hs
+++ /dev/null
@@ -1,171 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.GetConsoleOutput
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets the console output for the specified instance.
---
---
--- Instances do not have a physical monitor through which you can view their console output. They also lack physical controls that allow you to power up, reboot, or shut them down. To allow these actions, we provide them through the Amazon EC2 API and command line interface.
---
--- Instance console output is buffered and posted shortly after instance boot, reboot, and termination. Amazon EC2 preserves the most recent 64 KB output which is available for at least one hour after the most recent post.
---
--- For Linux instances, the instance console output displays the exact console output that would normally be displayed on a physical monitor attached to a computer. This output is buffered because the instance produces it and then posts it to a store where the instance's owner can retrieve it.
---
--- For Windows instances, the instance console output includes output from the EC2Config service.
---
-module Network.AWS.EC2.GetConsoleOutput
-    (
-    -- * Creating a Request
-      getConsoleOutput
-    , GetConsoleOutput
-    -- * Request Lenses
-    , gcoDryRun
-    , gcoInstanceId
-
-    -- * Destructuring the Response
-    , getConsoleOutputResponse
-    , GetConsoleOutputResponse
-    -- * Response Lenses
-    , gcorsInstanceId
-    , gcorsOutput
-    , gcorsTimestamp
-    , gcorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for GetConsoleOutput.
---
---
---
--- /See:/ 'getConsoleOutput' smart constructor.
-data GetConsoleOutput = GetConsoleOutput'
-    { _gcoDryRun     :: !(Maybe Bool)
-    , _gcoInstanceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetConsoleOutput' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcoDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'gcoInstanceId' - The ID of the instance.
-getConsoleOutput
-    :: Text -- ^ 'gcoInstanceId'
-    -> GetConsoleOutput
-getConsoleOutput pInstanceId_ =
-    GetConsoleOutput'
-    { _gcoDryRun = Nothing
-    , _gcoInstanceId = pInstanceId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-gcoDryRun :: Lens' GetConsoleOutput (Maybe Bool)
-gcoDryRun = lens _gcoDryRun (\ s a -> s{_gcoDryRun = a});
-
--- | The ID of the instance.
-gcoInstanceId :: Lens' GetConsoleOutput Text
-gcoInstanceId = lens _gcoInstanceId (\ s a -> s{_gcoInstanceId = a});
-
-instance AWSRequest GetConsoleOutput where
-        type Rs GetConsoleOutput = GetConsoleOutputResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 GetConsoleOutputResponse' <$>
-                   (x .@? "instanceId") <*> (x .@? "output") <*>
-                     (x .@? "timestamp")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetConsoleOutput
-
-instance NFData GetConsoleOutput
-
-instance ToHeaders GetConsoleOutput where
-        toHeaders = const mempty
-
-instance ToPath GetConsoleOutput where
-        toPath = const "/"
-
-instance ToQuery GetConsoleOutput where
-        toQuery GetConsoleOutput'{..}
-          = mconcat
-              ["Action" =: ("GetConsoleOutput" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _gcoDryRun,
-               "InstanceId" =: _gcoInstanceId]
-
--- | Contains the output of GetConsoleOutput.
---
---
---
--- /See:/ 'getConsoleOutputResponse' smart constructor.
-data GetConsoleOutputResponse = GetConsoleOutputResponse'
-    { _gcorsInstanceId     :: !(Maybe Text)
-    , _gcorsOutput         :: !(Maybe Text)
-    , _gcorsTimestamp      :: !(Maybe ISO8601)
-    , _gcorsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetConsoleOutputResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcorsInstanceId' - The ID of the instance.
---
--- * 'gcorsOutput' - The console output, Base64-encoded. If using a command line tool, the tool decodes the output for you.
---
--- * 'gcorsTimestamp' - The time the output was last updated.
---
--- * 'gcorsResponseStatus' - -- | The response status code.
-getConsoleOutputResponse
-    :: Int -- ^ 'gcorsResponseStatus'
-    -> GetConsoleOutputResponse
-getConsoleOutputResponse pResponseStatus_ =
-    GetConsoleOutputResponse'
-    { _gcorsInstanceId = Nothing
-    , _gcorsOutput = Nothing
-    , _gcorsTimestamp = Nothing
-    , _gcorsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the instance.
-gcorsInstanceId :: Lens' GetConsoleOutputResponse (Maybe Text)
-gcorsInstanceId = lens _gcorsInstanceId (\ s a -> s{_gcorsInstanceId = a});
-
--- | The console output, Base64-encoded. If using a command line tool, the tool decodes the output for you.
-gcorsOutput :: Lens' GetConsoleOutputResponse (Maybe Text)
-gcorsOutput = lens _gcorsOutput (\ s a -> s{_gcorsOutput = a});
-
--- | The time the output was last updated.
-gcorsTimestamp :: Lens' GetConsoleOutputResponse (Maybe UTCTime)
-gcorsTimestamp = lens _gcorsTimestamp (\ s a -> s{_gcorsTimestamp = a}) . mapping _Time;
-
--- | -- | The response status code.
-gcorsResponseStatus :: Lens' GetConsoleOutputResponse Int
-gcorsResponseStatus = lens _gcorsResponseStatus (\ s a -> s{_gcorsResponseStatus = a});
-
-instance NFData GetConsoleOutputResponse
diff --git a/gen/Network/AWS/EC2/GetConsoleScreenshot.hs b/gen/Network/AWS/EC2/GetConsoleScreenshot.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/GetConsoleScreenshot.hs
+++ /dev/null
@@ -1,165 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.GetConsoleScreenshot
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Retrieve a JPG-format screenshot of a running instance to help with troubleshooting.
---
---
--- The returned content is Base64-encoded.
---
-module Network.AWS.EC2.GetConsoleScreenshot
-    (
-    -- * Creating a Request
-      getConsoleScreenshot
-    , GetConsoleScreenshot
-    -- * Request Lenses
-    , gcsWakeUp
-    , gcsDryRun
-    , gcsInstanceId
-
-    -- * Destructuring the Response
-    , getConsoleScreenshotResponse
-    , GetConsoleScreenshotResponse
-    -- * Response Lenses
-    , gcsrsInstanceId
-    , gcsrsImageData
-    , gcsrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for the request.
---
---
---
--- /See:/ 'getConsoleScreenshot' smart constructor.
-data GetConsoleScreenshot = GetConsoleScreenshot'
-    { _gcsWakeUp     :: !(Maybe Bool)
-    , _gcsDryRun     :: !(Maybe Bool)
-    , _gcsInstanceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetConsoleScreenshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcsWakeUp' - When set to @true@ , acts as keystroke input and wakes up an instance that's in standby or "sleep" mode.
---
--- * 'gcsDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'gcsInstanceId' - The ID of the instance.
-getConsoleScreenshot
-    :: Text -- ^ 'gcsInstanceId'
-    -> GetConsoleScreenshot
-getConsoleScreenshot pInstanceId_ =
-    GetConsoleScreenshot'
-    { _gcsWakeUp = Nothing
-    , _gcsDryRun = Nothing
-    , _gcsInstanceId = pInstanceId_
-    }
-
--- | When set to @true@ , acts as keystroke input and wakes up an instance that's in standby or "sleep" mode.
-gcsWakeUp :: Lens' GetConsoleScreenshot (Maybe Bool)
-gcsWakeUp = lens _gcsWakeUp (\ s a -> s{_gcsWakeUp = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-gcsDryRun :: Lens' GetConsoleScreenshot (Maybe Bool)
-gcsDryRun = lens _gcsDryRun (\ s a -> s{_gcsDryRun = a});
-
--- | The ID of the instance.
-gcsInstanceId :: Lens' GetConsoleScreenshot Text
-gcsInstanceId = lens _gcsInstanceId (\ s a -> s{_gcsInstanceId = a});
-
-instance AWSRequest GetConsoleScreenshot where
-        type Rs GetConsoleScreenshot =
-             GetConsoleScreenshotResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 GetConsoleScreenshotResponse' <$>
-                   (x .@? "instanceId") <*> (x .@? "imageData") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable GetConsoleScreenshot
-
-instance NFData GetConsoleScreenshot
-
-instance ToHeaders GetConsoleScreenshot where
-        toHeaders = const mempty
-
-instance ToPath GetConsoleScreenshot where
-        toPath = const "/"
-
-instance ToQuery GetConsoleScreenshot where
-        toQuery GetConsoleScreenshot'{..}
-          = mconcat
-              ["Action" =: ("GetConsoleScreenshot" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "WakeUp" =: _gcsWakeUp, "DryRun" =: _gcsDryRun,
-               "InstanceId" =: _gcsInstanceId]
-
--- | Contains the output of the request.
---
---
---
--- /See:/ 'getConsoleScreenshotResponse' smart constructor.
-data GetConsoleScreenshotResponse = GetConsoleScreenshotResponse'
-    { _gcsrsInstanceId     :: !(Maybe Text)
-    , _gcsrsImageData      :: !(Maybe Text)
-    , _gcsrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetConsoleScreenshotResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcsrsInstanceId' - The ID of the instance.
---
--- * 'gcsrsImageData' - The data that comprises the image.
---
--- * 'gcsrsResponseStatus' - -- | The response status code.
-getConsoleScreenshotResponse
-    :: Int -- ^ 'gcsrsResponseStatus'
-    -> GetConsoleScreenshotResponse
-getConsoleScreenshotResponse pResponseStatus_ =
-    GetConsoleScreenshotResponse'
-    { _gcsrsInstanceId = Nothing
-    , _gcsrsImageData = Nothing
-    , _gcsrsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the instance.
-gcsrsInstanceId :: Lens' GetConsoleScreenshotResponse (Maybe Text)
-gcsrsInstanceId = lens _gcsrsInstanceId (\ s a -> s{_gcsrsInstanceId = a});
-
--- | The data that comprises the image.
-gcsrsImageData :: Lens' GetConsoleScreenshotResponse (Maybe Text)
-gcsrsImageData = lens _gcsrsImageData (\ s a -> s{_gcsrsImageData = a});
-
--- | -- | The response status code.
-gcsrsResponseStatus :: Lens' GetConsoleScreenshotResponse Int
-gcsrsResponseStatus = lens _gcsrsResponseStatus (\ s a -> s{_gcsrsResponseStatus = a});
-
-instance NFData GetConsoleScreenshotResponse
diff --git a/gen/Network/AWS/EC2/GetHostReservationPurchasePreview.hs b/gen/Network/AWS/EC2/GetHostReservationPurchasePreview.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/GetHostReservationPurchasePreview.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.GetHostReservationPurchasePreview
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Preview a reservation purchase with configurations that match those of your Dedicated Host. You must have active Dedicated Hosts in your account before you purchase a reservation.
---
---
--- This is a preview of the 'PurchaseHostReservation' action and does not result in the offering being purchased.
---
-module Network.AWS.EC2.GetHostReservationPurchasePreview
-    (
-    -- * Creating a Request
-      getHostReservationPurchasePreview
-    , GetHostReservationPurchasePreview
-    -- * Request Lenses
-    , ghrppOfferingId
-    , ghrppHostIdSet
-
-    -- * Destructuring the Response
-    , getHostReservationPurchasePreviewResponse
-    , GetHostReservationPurchasePreviewResponse
-    -- * Response Lenses
-    , ghrpprsCurrencyCode
-    , ghrpprsTotalHourlyPrice
-    , ghrpprsTotalUpfrontPrice
-    , ghrpprsPurchase
-    , ghrpprsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'getHostReservationPurchasePreview' smart constructor.
-data GetHostReservationPurchasePreview = GetHostReservationPurchasePreview'
-    { _ghrppOfferingId :: !Text
-    , _ghrppHostIdSet  :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetHostReservationPurchasePreview' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ghrppOfferingId' - The offering ID of the reservation.
---
--- * 'ghrppHostIdSet' - The ID/s of the Dedicated Host/s that the reservation will be associated with.
-getHostReservationPurchasePreview
-    :: Text -- ^ 'ghrppOfferingId'
-    -> GetHostReservationPurchasePreview
-getHostReservationPurchasePreview pOfferingId_ =
-    GetHostReservationPurchasePreview'
-    { _ghrppOfferingId = pOfferingId_
-    , _ghrppHostIdSet = mempty
-    }
-
--- | The offering ID of the reservation.
-ghrppOfferingId :: Lens' GetHostReservationPurchasePreview Text
-ghrppOfferingId = lens _ghrppOfferingId (\ s a -> s{_ghrppOfferingId = a});
-
--- | The ID/s of the Dedicated Host/s that the reservation will be associated with.
-ghrppHostIdSet :: Lens' GetHostReservationPurchasePreview [Text]
-ghrppHostIdSet = lens _ghrppHostIdSet (\ s a -> s{_ghrppHostIdSet = a}) . _Coerce;
-
-instance AWSRequest GetHostReservationPurchasePreview
-         where
-        type Rs GetHostReservationPurchasePreview =
-             GetHostReservationPurchasePreviewResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 GetHostReservationPurchasePreviewResponse' <$>
-                   (x .@? "currencyCode") <*> (x .@? "totalHourlyPrice")
-                     <*> (x .@? "totalUpfrontPrice")
-                     <*>
-                     (x .@? "purchase" .!@ mempty >>=
-                        may (parseXMLList "member"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetHostReservationPurchasePreview
-
-instance NFData GetHostReservationPurchasePreview
-
-instance ToHeaders GetHostReservationPurchasePreview
-         where
-        toHeaders = const mempty
-
-instance ToPath GetHostReservationPurchasePreview
-         where
-        toPath = const "/"
-
-instance ToQuery GetHostReservationPurchasePreview
-         where
-        toQuery GetHostReservationPurchasePreview'{..}
-          = mconcat
-              ["Action" =:
-                 ("GetHostReservationPurchasePreview" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "OfferingId" =: _ghrppOfferingId,
-               toQueryList "HostIdSet" _ghrppHostIdSet]
-
--- | /See:/ 'getHostReservationPurchasePreviewResponse' smart constructor.
-data GetHostReservationPurchasePreviewResponse = GetHostReservationPurchasePreviewResponse'
-    { _ghrpprsCurrencyCode      :: !(Maybe CurrencyCodeValues)
-    , _ghrpprsTotalHourlyPrice  :: !(Maybe Text)
-    , _ghrpprsTotalUpfrontPrice :: !(Maybe Text)
-    , _ghrpprsPurchase          :: !(Maybe [Purchase])
-    , _ghrpprsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetHostReservationPurchasePreviewResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ghrpprsCurrencyCode' - The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
---
--- * 'ghrpprsTotalHourlyPrice' - The potential total hourly price of the reservation per hour.
---
--- * 'ghrpprsTotalUpfrontPrice' - The potential total upfront price. This is billed immediately.
---
--- * 'ghrpprsPurchase' - The purchase information of the Dedicated Host Reservation and the Dedicated Hosts associated with it.
---
--- * 'ghrpprsResponseStatus' - -- | The response status code.
-getHostReservationPurchasePreviewResponse
-    :: Int -- ^ 'ghrpprsResponseStatus'
-    -> GetHostReservationPurchasePreviewResponse
-getHostReservationPurchasePreviewResponse pResponseStatus_ =
-    GetHostReservationPurchasePreviewResponse'
-    { _ghrpprsCurrencyCode = Nothing
-    , _ghrpprsTotalHourlyPrice = Nothing
-    , _ghrpprsTotalUpfrontPrice = Nothing
-    , _ghrpprsPurchase = Nothing
-    , _ghrpprsResponseStatus = pResponseStatus_
-    }
-
--- | The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
-ghrpprsCurrencyCode :: Lens' GetHostReservationPurchasePreviewResponse (Maybe CurrencyCodeValues)
-ghrpprsCurrencyCode = lens _ghrpprsCurrencyCode (\ s a -> s{_ghrpprsCurrencyCode = a});
-
--- | The potential total hourly price of the reservation per hour.
-ghrpprsTotalHourlyPrice :: Lens' GetHostReservationPurchasePreviewResponse (Maybe Text)
-ghrpprsTotalHourlyPrice = lens _ghrpprsTotalHourlyPrice (\ s a -> s{_ghrpprsTotalHourlyPrice = a});
-
--- | The potential total upfront price. This is billed immediately.
-ghrpprsTotalUpfrontPrice :: Lens' GetHostReservationPurchasePreviewResponse (Maybe Text)
-ghrpprsTotalUpfrontPrice = lens _ghrpprsTotalUpfrontPrice (\ s a -> s{_ghrpprsTotalUpfrontPrice = a});
-
--- | The purchase information of the Dedicated Host Reservation and the Dedicated Hosts associated with it.
-ghrpprsPurchase :: Lens' GetHostReservationPurchasePreviewResponse [Purchase]
-ghrpprsPurchase = lens _ghrpprsPurchase (\ s a -> s{_ghrpprsPurchase = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-ghrpprsResponseStatus :: Lens' GetHostReservationPurchasePreviewResponse Int
-ghrpprsResponseStatus = lens _ghrpprsResponseStatus (\ s a -> s{_ghrpprsResponseStatus = a});
-
-instance NFData
-         GetHostReservationPurchasePreviewResponse
diff --git a/gen/Network/AWS/EC2/GetPasswordData.hs b/gen/Network/AWS/EC2/GetPasswordData.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/GetPasswordData.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.GetPasswordData
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Retrieves the encrypted administrator password for an instance running Windows.
---
---
--- The Windows password is generated at boot if the @EC2Config@ service plugin, @Ec2SetPassword@ , is enabled. This usually only happens the first time an AMI is launched, and then @Ec2SetPassword@ is automatically disabled. The password is not generated for rebundled AMIs unless @Ec2SetPassword@ is enabled before bundling.
---
--- The password is encrypted using the key pair that you specified when you launched the instance. You must provide the corresponding key pair file.
---
--- Password generation and encryption takes a few moments. We recommend that you wait up to 15 minutes after launching an instance before trying to retrieve the generated password.
---
-module Network.AWS.EC2.GetPasswordData
-    (
-    -- * Creating a Request
-      getPasswordData
-    , GetPasswordData
-    -- * Request Lenses
-    , gpdDryRun
-    , gpdInstanceId
-
-    -- * Destructuring the Response
-    , getPasswordDataResponse
-    , GetPasswordDataResponse
-    -- * Response Lenses
-    , gpdrsResponseStatus
-    , gpdrsInstanceId
-    , gpdrsPasswordData
-    , gpdrsTimestamp
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for GetPasswordData.
---
---
---
--- /See:/ 'getPasswordData' smart constructor.
-data GetPasswordData = GetPasswordData'
-    { _gpdDryRun     :: !(Maybe Bool)
-    , _gpdInstanceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetPasswordData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gpdDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'gpdInstanceId' - The ID of the Windows instance.
-getPasswordData
-    :: Text -- ^ 'gpdInstanceId'
-    -> GetPasswordData
-getPasswordData pInstanceId_ =
-    GetPasswordData'
-    { _gpdDryRun = Nothing
-    , _gpdInstanceId = pInstanceId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-gpdDryRun :: Lens' GetPasswordData (Maybe Bool)
-gpdDryRun = lens _gpdDryRun (\ s a -> s{_gpdDryRun = a});
-
--- | The ID of the Windows instance.
-gpdInstanceId :: Lens' GetPasswordData Text
-gpdInstanceId = lens _gpdInstanceId (\ s a -> s{_gpdInstanceId = a});
-
-instance AWSRequest GetPasswordData where
-        type Rs GetPasswordData = GetPasswordDataResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 GetPasswordDataResponse' <$>
-                   (pure (fromEnum s)) <*> (x .@ "instanceId") <*>
-                     (x .@ "passwordData")
-                     <*> (x .@ "timestamp"))
-
-instance Hashable GetPasswordData
-
-instance NFData GetPasswordData
-
-instance ToHeaders GetPasswordData where
-        toHeaders = const mempty
-
-instance ToPath GetPasswordData where
-        toPath = const "/"
-
-instance ToQuery GetPasswordData where
-        toQuery GetPasswordData'{..}
-          = mconcat
-              ["Action" =: ("GetPasswordData" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _gpdDryRun,
-               "InstanceId" =: _gpdInstanceId]
-
--- | Contains the output of GetPasswordData.
---
---
---
--- /See:/ 'getPasswordDataResponse' smart constructor.
-data GetPasswordDataResponse = GetPasswordDataResponse'
-    { _gpdrsResponseStatus :: !Int
-    , _gpdrsInstanceId     :: !Text
-    , _gpdrsPasswordData   :: !Text
-    , _gpdrsTimestamp      :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetPasswordDataResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gpdrsResponseStatus' - -- | The response status code.
---
--- * 'gpdrsInstanceId' - The ID of the Windows instance.
---
--- * 'gpdrsPasswordData' - The password of the instance.
---
--- * 'gpdrsTimestamp' - The time the data was last updated.
-getPasswordDataResponse
-    :: Int -- ^ 'gpdrsResponseStatus'
-    -> Text -- ^ 'gpdrsInstanceId'
-    -> Text -- ^ 'gpdrsPasswordData'
-    -> UTCTime -- ^ 'gpdrsTimestamp'
-    -> GetPasswordDataResponse
-getPasswordDataResponse pResponseStatus_ pInstanceId_ pPasswordData_ pTimestamp_ =
-    GetPasswordDataResponse'
-    { _gpdrsResponseStatus = pResponseStatus_
-    , _gpdrsInstanceId = pInstanceId_
-    , _gpdrsPasswordData = pPasswordData_
-    , _gpdrsTimestamp = _Time # pTimestamp_
-    }
-
--- | -- | The response status code.
-gpdrsResponseStatus :: Lens' GetPasswordDataResponse Int
-gpdrsResponseStatus = lens _gpdrsResponseStatus (\ s a -> s{_gpdrsResponseStatus = a});
-
--- | The ID of the Windows instance.
-gpdrsInstanceId :: Lens' GetPasswordDataResponse Text
-gpdrsInstanceId = lens _gpdrsInstanceId (\ s a -> s{_gpdrsInstanceId = a});
-
--- | The password of the instance.
-gpdrsPasswordData :: Lens' GetPasswordDataResponse Text
-gpdrsPasswordData = lens _gpdrsPasswordData (\ s a -> s{_gpdrsPasswordData = a});
-
--- | The time the data was last updated.
-gpdrsTimestamp :: Lens' GetPasswordDataResponse UTCTime
-gpdrsTimestamp = lens _gpdrsTimestamp (\ s a -> s{_gpdrsTimestamp = a}) . _Time;
-
-instance NFData GetPasswordDataResponse
diff --git a/gen/Network/AWS/EC2/GetReservedInstancesExchangeQuote.hs b/gen/Network/AWS/EC2/GetReservedInstancesExchangeQuote.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/GetReservedInstancesExchangeQuote.hs
+++ /dev/null
@@ -1,247 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.GetReservedInstancesExchangeQuote
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns details about the values and term of your specified Convertible Reserved Instances. When a target configuration is specified, it returns information about whether the exchange is valid and can be performed.
---
---
-module Network.AWS.EC2.GetReservedInstancesExchangeQuote
-    (
-    -- * Creating a Request
-      getReservedInstancesExchangeQuote
-    , GetReservedInstancesExchangeQuote
-    -- * Request Lenses
-    , grieqTargetConfigurations
-    , grieqDryRun
-    , grieqReservedInstanceIds
-
-    -- * Destructuring the Response
-    , getReservedInstancesExchangeQuoteResponse
-    , GetReservedInstancesExchangeQuoteResponse
-    -- * Response Lenses
-    , grieqrsValidationFailureReason
-    , grieqrsTargetConfigurationValueRollup
-    , grieqrsCurrencyCode
-    , grieqrsTargetConfigurationValueSet
-    , grieqrsReservedInstanceValueRollup
-    , grieqrsOutputReservedInstancesWillExpireAt
-    , grieqrsReservedInstanceValueSet
-    , grieqrsIsValidExchange
-    , grieqrsPaymentDue
-    , grieqrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for GetReservedInstanceExchangeQuote.
---
---
---
--- /See:/ 'getReservedInstancesExchangeQuote' smart constructor.
-data GetReservedInstancesExchangeQuote = GetReservedInstancesExchangeQuote'
-    { _grieqTargetConfigurations :: !(Maybe [TargetConfigurationRequest])
-    , _grieqDryRun               :: !(Maybe Bool)
-    , _grieqReservedInstanceIds  :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetReservedInstancesExchangeQuote' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grieqTargetConfigurations' - The configuration requirements of the Convertible Reserved Instances to exchange for your current Convertible Reserved Instances.
---
--- * 'grieqDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'grieqReservedInstanceIds' - The IDs of the Convertible Reserved Instances to exchange.
-getReservedInstancesExchangeQuote
-    :: GetReservedInstancesExchangeQuote
-getReservedInstancesExchangeQuote =
-    GetReservedInstancesExchangeQuote'
-    { _grieqTargetConfigurations = Nothing
-    , _grieqDryRun = Nothing
-    , _grieqReservedInstanceIds = mempty
-    }
-
--- | The configuration requirements of the Convertible Reserved Instances to exchange for your current Convertible Reserved Instances.
-grieqTargetConfigurations :: Lens' GetReservedInstancesExchangeQuote [TargetConfigurationRequest]
-grieqTargetConfigurations = lens _grieqTargetConfigurations (\ s a -> s{_grieqTargetConfigurations = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-grieqDryRun :: Lens' GetReservedInstancesExchangeQuote (Maybe Bool)
-grieqDryRun = lens _grieqDryRun (\ s a -> s{_grieqDryRun = a});
-
--- | The IDs of the Convertible Reserved Instances to exchange.
-grieqReservedInstanceIds :: Lens' GetReservedInstancesExchangeQuote [Text]
-grieqReservedInstanceIds = lens _grieqReservedInstanceIds (\ s a -> s{_grieqReservedInstanceIds = a}) . _Coerce;
-
-instance AWSRequest GetReservedInstancesExchangeQuote
-         where
-        type Rs GetReservedInstancesExchangeQuote =
-             GetReservedInstancesExchangeQuoteResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 GetReservedInstancesExchangeQuoteResponse' <$>
-                   (x .@? "validationFailureReason") <*>
-                     (x .@? "targetConfigurationValueRollup")
-                     <*> (x .@? "currencyCode")
-                     <*>
-                     (x .@? "targetConfigurationValueSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "reservedInstanceValueRollup")
-                     <*> (x .@? "outputReservedInstancesWillExpireAt")
-                     <*>
-                     (x .@? "reservedInstanceValueSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "isValidExchange")
-                     <*> (x .@? "paymentDue")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetReservedInstancesExchangeQuote
-
-instance NFData GetReservedInstancesExchangeQuote
-
-instance ToHeaders GetReservedInstancesExchangeQuote
-         where
-        toHeaders = const mempty
-
-instance ToPath GetReservedInstancesExchangeQuote
-         where
-        toPath = const "/"
-
-instance ToQuery GetReservedInstancesExchangeQuote
-         where
-        toQuery GetReservedInstancesExchangeQuote'{..}
-          = mconcat
-              ["Action" =:
-                 ("GetReservedInstancesExchangeQuote" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "TargetConfiguration" <$>
-                    _grieqTargetConfigurations),
-               "DryRun" =: _grieqDryRun,
-               toQueryList "ReservedInstanceId"
-                 _grieqReservedInstanceIds]
-
--- | Contains the output of GetReservedInstancesExchangeQuote.
---
---
---
--- /See:/ 'getReservedInstancesExchangeQuoteResponse' smart constructor.
-data GetReservedInstancesExchangeQuoteResponse = GetReservedInstancesExchangeQuoteResponse'
-    { _grieqrsValidationFailureReason             :: !(Maybe Text)
-    , _grieqrsTargetConfigurationValueRollup      :: !(Maybe ReservationValue)
-    , _grieqrsCurrencyCode                        :: !(Maybe Text)
-    , _grieqrsTargetConfigurationValueSet         :: !(Maybe [TargetReservationValue])
-    , _grieqrsReservedInstanceValueRollup         :: !(Maybe ReservationValue)
-    , _grieqrsOutputReservedInstancesWillExpireAt :: !(Maybe ISO8601)
-    , _grieqrsReservedInstanceValueSet            :: !(Maybe [ReservedInstanceReservationValue])
-    , _grieqrsIsValidExchange                     :: !(Maybe Bool)
-    , _grieqrsPaymentDue                          :: !(Maybe Text)
-    , _grieqrsResponseStatus                      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GetReservedInstancesExchangeQuoteResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grieqrsValidationFailureReason' - Describes the reason why the exchange cannot be completed.
---
--- * 'grieqrsTargetConfigurationValueRollup' - Undocumented member.
---
--- * 'grieqrsCurrencyCode' - The currency of the transaction.
---
--- * 'grieqrsTargetConfigurationValueSet' - The values of the target Convertible Reserved Instances.
---
--- * 'grieqrsReservedInstanceValueRollup' - Undocumented member.
---
--- * 'grieqrsOutputReservedInstancesWillExpireAt' - The new end date of the reservation term.
---
--- * 'grieqrsReservedInstanceValueSet' - The configuration of your Convertible Reserved Instances.
---
--- * 'grieqrsIsValidExchange' - If @true@ , the exchange is valid. If @false@ , the exchange cannot be completed.
---
--- * 'grieqrsPaymentDue' - The total true upfront charge for the exchange.
---
--- * 'grieqrsResponseStatus' - -- | The response status code.
-getReservedInstancesExchangeQuoteResponse
-    :: Int -- ^ 'grieqrsResponseStatus'
-    -> GetReservedInstancesExchangeQuoteResponse
-getReservedInstancesExchangeQuoteResponse pResponseStatus_ =
-    GetReservedInstancesExchangeQuoteResponse'
-    { _grieqrsValidationFailureReason = Nothing
-    , _grieqrsTargetConfigurationValueRollup = Nothing
-    , _grieqrsCurrencyCode = Nothing
-    , _grieqrsTargetConfigurationValueSet = Nothing
-    , _grieqrsReservedInstanceValueRollup = Nothing
-    , _grieqrsOutputReservedInstancesWillExpireAt = Nothing
-    , _grieqrsReservedInstanceValueSet = Nothing
-    , _grieqrsIsValidExchange = Nothing
-    , _grieqrsPaymentDue = Nothing
-    , _grieqrsResponseStatus = pResponseStatus_
-    }
-
--- | Describes the reason why the exchange cannot be completed.
-grieqrsValidationFailureReason :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe Text)
-grieqrsValidationFailureReason = lens _grieqrsValidationFailureReason (\ s a -> s{_grieqrsValidationFailureReason = a});
-
--- | Undocumented member.
-grieqrsTargetConfigurationValueRollup :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe ReservationValue)
-grieqrsTargetConfigurationValueRollup = lens _grieqrsTargetConfigurationValueRollup (\ s a -> s{_grieqrsTargetConfigurationValueRollup = a});
-
--- | The currency of the transaction.
-grieqrsCurrencyCode :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe Text)
-grieqrsCurrencyCode = lens _grieqrsCurrencyCode (\ s a -> s{_grieqrsCurrencyCode = a});
-
--- | The values of the target Convertible Reserved Instances.
-grieqrsTargetConfigurationValueSet :: Lens' GetReservedInstancesExchangeQuoteResponse [TargetReservationValue]
-grieqrsTargetConfigurationValueSet = lens _grieqrsTargetConfigurationValueSet (\ s a -> s{_grieqrsTargetConfigurationValueSet = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-grieqrsReservedInstanceValueRollup :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe ReservationValue)
-grieqrsReservedInstanceValueRollup = lens _grieqrsReservedInstanceValueRollup (\ s a -> s{_grieqrsReservedInstanceValueRollup = a});
-
--- | The new end date of the reservation term.
-grieqrsOutputReservedInstancesWillExpireAt :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe UTCTime)
-grieqrsOutputReservedInstancesWillExpireAt = lens _grieqrsOutputReservedInstancesWillExpireAt (\ s a -> s{_grieqrsOutputReservedInstancesWillExpireAt = a}) . mapping _Time;
-
--- | The configuration of your Convertible Reserved Instances.
-grieqrsReservedInstanceValueSet :: Lens' GetReservedInstancesExchangeQuoteResponse [ReservedInstanceReservationValue]
-grieqrsReservedInstanceValueSet = lens _grieqrsReservedInstanceValueSet (\ s a -> s{_grieqrsReservedInstanceValueSet = a}) . _Default . _Coerce;
-
--- | If @true@ , the exchange is valid. If @false@ , the exchange cannot be completed.
-grieqrsIsValidExchange :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe Bool)
-grieqrsIsValidExchange = lens _grieqrsIsValidExchange (\ s a -> s{_grieqrsIsValidExchange = a});
-
--- | The total true upfront charge for the exchange.
-grieqrsPaymentDue :: Lens' GetReservedInstancesExchangeQuoteResponse (Maybe Text)
-grieqrsPaymentDue = lens _grieqrsPaymentDue (\ s a -> s{_grieqrsPaymentDue = a});
-
--- | -- | The response status code.
-grieqrsResponseStatus :: Lens' GetReservedInstancesExchangeQuoteResponse Int
-grieqrsResponseStatus = lens _grieqrsResponseStatus (\ s a -> s{_grieqrsResponseStatus = a});
-
-instance NFData
-         GetReservedInstancesExchangeQuoteResponse
diff --git a/gen/Network/AWS/EC2/ImportImage.hs b/gen/Network/AWS/EC2/ImportImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ImportImage.hs
+++ /dev/null
@@ -1,325 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ImportImage
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Import single or multi-volume disk images or EBS snapshots into an Amazon Machine Image (AMI). For more information, see <http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html Importing a VM as an Image Using VM Import/Export> in the /VM Import\/Export User Guide/ .
---
---
-module Network.AWS.EC2.ImportImage
-    (
-    -- * Creating a Request
-      importImage
-    , ImportImage
-    -- * Request Lenses
-    , impHypervisor
-    , impPlatform
-    , impClientToken
-    , impLicenseType
-    , impRoleName
-    , impArchitecture
-    , impDescription
-    , impDryRun
-    , impClientData
-    , impDiskContainers
-
-    -- * Destructuring the Response
-    , importImageResponse
-    , ImportImageResponse
-    -- * Response Lenses
-    , irsStatus
-    , irsHypervisor
-    , irsPlatform
-    , irsProgress
-    , irsLicenseType
-    , irsSnapshotDetails
-    , irsStatusMessage
-    , irsImageId
-    , irsImportTaskId
-    , irsArchitecture
-    , irsDescription
-    , irsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ImportImage.
---
---
---
--- /See:/ 'importImage' smart constructor.
-data ImportImage = ImportImage'
-    { _impHypervisor     :: !(Maybe Text)
-    , _impPlatform       :: !(Maybe Text)
-    , _impClientToken    :: !(Maybe Text)
-    , _impLicenseType    :: !(Maybe Text)
-    , _impRoleName       :: !(Maybe Text)
-    , _impArchitecture   :: !(Maybe Text)
-    , _impDescription    :: !(Maybe Text)
-    , _impDryRun         :: !(Maybe Bool)
-    , _impClientData     :: !(Maybe ClientData)
-    , _impDiskContainers :: !(Maybe [ImageDiskContainer])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'impHypervisor' - The target hypervisor platform. Valid values: @xen@
---
--- * 'impPlatform' - The operating system of the virtual machine. Valid values: @Windows@ | @Linux@
---
--- * 'impClientToken' - The token to enable idempotency for VM import requests.
---
--- * 'impLicenseType' - The license type to be used for the Amazon Machine Image (AMI) after importing. __Note:__ You may only use BYOL if you have existing licenses with rights to use these licenses in a third party cloud like AWS. For more information, see <http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image Prerequisites> in the VM Import/Export User Guide. Valid values: @AWS@ | @BYOL@
---
--- * 'impRoleName' - The name of the role to use when not using the default role, 'vmimport'.
---
--- * 'impArchitecture' - The architecture of the virtual machine. Valid values: @i386@ | @x86_64@
---
--- * 'impDescription' - A description string for the import image task.
---
--- * 'impDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'impClientData' - The client-specific data.
---
--- * 'impDiskContainers' - Information about the disk containers.
-importImage
-    :: ImportImage
-importImage =
-    ImportImage'
-    { _impHypervisor = Nothing
-    , _impPlatform = Nothing
-    , _impClientToken = Nothing
-    , _impLicenseType = Nothing
-    , _impRoleName = Nothing
-    , _impArchitecture = Nothing
-    , _impDescription = Nothing
-    , _impDryRun = Nothing
-    , _impClientData = Nothing
-    , _impDiskContainers = Nothing
-    }
-
--- | The target hypervisor platform. Valid values: @xen@
-impHypervisor :: Lens' ImportImage (Maybe Text)
-impHypervisor = lens _impHypervisor (\ s a -> s{_impHypervisor = a});
-
--- | The operating system of the virtual machine. Valid values: @Windows@ | @Linux@
-impPlatform :: Lens' ImportImage (Maybe Text)
-impPlatform = lens _impPlatform (\ s a -> s{_impPlatform = a});
-
--- | The token to enable idempotency for VM import requests.
-impClientToken :: Lens' ImportImage (Maybe Text)
-impClientToken = lens _impClientToken (\ s a -> s{_impClientToken = a});
-
--- | The license type to be used for the Amazon Machine Image (AMI) after importing. __Note:__ You may only use BYOL if you have existing licenses with rights to use these licenses in a third party cloud like AWS. For more information, see <http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#prerequisites-image Prerequisites> in the VM Import/Export User Guide. Valid values: @AWS@ | @BYOL@
-impLicenseType :: Lens' ImportImage (Maybe Text)
-impLicenseType = lens _impLicenseType (\ s a -> s{_impLicenseType = a});
-
--- | The name of the role to use when not using the default role, 'vmimport'.
-impRoleName :: Lens' ImportImage (Maybe Text)
-impRoleName = lens _impRoleName (\ s a -> s{_impRoleName = a});
-
--- | The architecture of the virtual machine. Valid values: @i386@ | @x86_64@
-impArchitecture :: Lens' ImportImage (Maybe Text)
-impArchitecture = lens _impArchitecture (\ s a -> s{_impArchitecture = a});
-
--- | A description string for the import image task.
-impDescription :: Lens' ImportImage (Maybe Text)
-impDescription = lens _impDescription (\ s a -> s{_impDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-impDryRun :: Lens' ImportImage (Maybe Bool)
-impDryRun = lens _impDryRun (\ s a -> s{_impDryRun = a});
-
--- | The client-specific data.
-impClientData :: Lens' ImportImage (Maybe ClientData)
-impClientData = lens _impClientData (\ s a -> s{_impClientData = a});
-
--- | Information about the disk containers.
-impDiskContainers :: Lens' ImportImage [ImageDiskContainer]
-impDiskContainers = lens _impDiskContainers (\ s a -> s{_impDiskContainers = a}) . _Default . _Coerce;
-
-instance AWSRequest ImportImage where
-        type Rs ImportImage = ImportImageResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ImportImageResponse' <$>
-                   (x .@? "status") <*> (x .@? "hypervisor") <*>
-                     (x .@? "platform")
-                     <*> (x .@? "progress")
-                     <*> (x .@? "licenseType")
-                     <*>
-                     (x .@? "snapshotDetailSet" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (x .@? "statusMessage")
-                     <*> (x .@? "imageId")
-                     <*> (x .@? "importTaskId")
-                     <*> (x .@? "architecture")
-                     <*> (x .@? "description")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ImportImage
-
-instance NFData ImportImage
-
-instance ToHeaders ImportImage where
-        toHeaders = const mempty
-
-instance ToPath ImportImage where
-        toPath = const "/"
-
-instance ToQuery ImportImage where
-        toQuery ImportImage'{..}
-          = mconcat
-              ["Action" =: ("ImportImage" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Hypervisor" =: _impHypervisor,
-               "Platform" =: _impPlatform,
-               "ClientToken" =: _impClientToken,
-               "LicenseType" =: _impLicenseType,
-               "RoleName" =: _impRoleName,
-               "Architecture" =: _impArchitecture,
-               "Description" =: _impDescription,
-               "DryRun" =: _impDryRun,
-               "ClientData" =: _impClientData,
-               toQuery
-                 (toQueryList "DiskContainer" <$> _impDiskContainers)]
-
--- | Contains the output for ImportImage.
---
---
---
--- /See:/ 'importImageResponse' smart constructor.
-data ImportImageResponse = ImportImageResponse'
-    { _irsStatus          :: !(Maybe Text)
-    , _irsHypervisor      :: !(Maybe Text)
-    , _irsPlatform        :: !(Maybe Text)
-    , _irsProgress        :: !(Maybe Text)
-    , _irsLicenseType     :: !(Maybe Text)
-    , _irsSnapshotDetails :: !(Maybe [SnapshotDetail])
-    , _irsStatusMessage   :: !(Maybe Text)
-    , _irsImageId         :: !(Maybe Text)
-    , _irsImportTaskId    :: !(Maybe Text)
-    , _irsArchitecture    :: !(Maybe Text)
-    , _irsDescription     :: !(Maybe Text)
-    , _irsResponseStatus  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportImageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'irsStatus' - A brief status of the task.
---
--- * 'irsHypervisor' - The target hypervisor of the import task.
---
--- * 'irsPlatform' - The operating system of the virtual machine.
---
--- * 'irsProgress' - The progress of the task.
---
--- * 'irsLicenseType' - The license type of the virtual machine.
---
--- * 'irsSnapshotDetails' - Information about the snapshots.
---
--- * 'irsStatusMessage' - A detailed status message of the import task.
---
--- * 'irsImageId' - The ID of the Amazon Machine Image (AMI) created by the import task.
---
--- * 'irsImportTaskId' - The task ID of the import image task.
---
--- * 'irsArchitecture' - The architecture of the virtual machine.
---
--- * 'irsDescription' - A description of the import task.
---
--- * 'irsResponseStatus' - -- | The response status code.
-importImageResponse
-    :: Int -- ^ 'irsResponseStatus'
-    -> ImportImageResponse
-importImageResponse pResponseStatus_ =
-    ImportImageResponse'
-    { _irsStatus = Nothing
-    , _irsHypervisor = Nothing
-    , _irsPlatform = Nothing
-    , _irsProgress = Nothing
-    , _irsLicenseType = Nothing
-    , _irsSnapshotDetails = Nothing
-    , _irsStatusMessage = Nothing
-    , _irsImageId = Nothing
-    , _irsImportTaskId = Nothing
-    , _irsArchitecture = Nothing
-    , _irsDescription = Nothing
-    , _irsResponseStatus = pResponseStatus_
-    }
-
--- | A brief status of the task.
-irsStatus :: Lens' ImportImageResponse (Maybe Text)
-irsStatus = lens _irsStatus (\ s a -> s{_irsStatus = a});
-
--- | The target hypervisor of the import task.
-irsHypervisor :: Lens' ImportImageResponse (Maybe Text)
-irsHypervisor = lens _irsHypervisor (\ s a -> s{_irsHypervisor = a});
-
--- | The operating system of the virtual machine.
-irsPlatform :: Lens' ImportImageResponse (Maybe Text)
-irsPlatform = lens _irsPlatform (\ s a -> s{_irsPlatform = a});
-
--- | The progress of the task.
-irsProgress :: Lens' ImportImageResponse (Maybe Text)
-irsProgress = lens _irsProgress (\ s a -> s{_irsProgress = a});
-
--- | The license type of the virtual machine.
-irsLicenseType :: Lens' ImportImageResponse (Maybe Text)
-irsLicenseType = lens _irsLicenseType (\ s a -> s{_irsLicenseType = a});
-
--- | Information about the snapshots.
-irsSnapshotDetails :: Lens' ImportImageResponse [SnapshotDetail]
-irsSnapshotDetails = lens _irsSnapshotDetails (\ s a -> s{_irsSnapshotDetails = a}) . _Default . _Coerce;
-
--- | A detailed status message of the import task.
-irsStatusMessage :: Lens' ImportImageResponse (Maybe Text)
-irsStatusMessage = lens _irsStatusMessage (\ s a -> s{_irsStatusMessage = a});
-
--- | The ID of the Amazon Machine Image (AMI) created by the import task.
-irsImageId :: Lens' ImportImageResponse (Maybe Text)
-irsImageId = lens _irsImageId (\ s a -> s{_irsImageId = a});
-
--- | The task ID of the import image task.
-irsImportTaskId :: Lens' ImportImageResponse (Maybe Text)
-irsImportTaskId = lens _irsImportTaskId (\ s a -> s{_irsImportTaskId = a});
-
--- | The architecture of the virtual machine.
-irsArchitecture :: Lens' ImportImageResponse (Maybe Text)
-irsArchitecture = lens _irsArchitecture (\ s a -> s{_irsArchitecture = a});
-
--- | A description of the import task.
-irsDescription :: Lens' ImportImageResponse (Maybe Text)
-irsDescription = lens _irsDescription (\ s a -> s{_irsDescription = a});
-
--- | -- | The response status code.
-irsResponseStatus :: Lens' ImportImageResponse Int
-irsResponseStatus = lens _irsResponseStatus (\ s a -> s{_irsResponseStatus = a});
-
-instance NFData ImportImageResponse
diff --git a/gen/Network/AWS/EC2/ImportInstance.hs b/gen/Network/AWS/EC2/ImportInstance.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ImportInstance.hs
+++ /dev/null
@@ -1,174 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ImportInstance
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an import instance task using metadata from the specified disk image. @ImportInstance@ only supports single-volume VMs. To import multi-volume VMs, use 'ImportImage' . For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html Importing a Virtual Machine Using the Amazon EC2 CLI> .
---
---
--- For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
---
-module Network.AWS.EC2.ImportInstance
-    (
-    -- * Creating a Request
-      importInstance
-    , ImportInstance
-    -- * Request Lenses
-    , iiLaunchSpecification
-    , iiDiskImages
-    , iiDescription
-    , iiDryRun
-    , iiPlatform
-
-    -- * Destructuring the Response
-    , importInstanceResponse
-    , ImportInstanceResponse
-    -- * Response Lenses
-    , iirsConversionTask
-    , iirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ImportInstance.
---
---
---
--- /See:/ 'importInstance' smart constructor.
-data ImportInstance = ImportInstance'
-    { _iiLaunchSpecification :: !(Maybe ImportInstanceLaunchSpecification)
-    , _iiDiskImages          :: !(Maybe [DiskImage])
-    , _iiDescription         :: !(Maybe Text)
-    , _iiDryRun              :: !(Maybe Bool)
-    , _iiPlatform            :: !PlatformValues
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iiLaunchSpecification' - The launch specification.
---
--- * 'iiDiskImages' - The disk image.
---
--- * 'iiDescription' - A description for the instance being imported.
---
--- * 'iiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'iiPlatform' - The instance operating system.
-importInstance
-    :: PlatformValues -- ^ 'iiPlatform'
-    -> ImportInstance
-importInstance pPlatform_ =
-    ImportInstance'
-    { _iiLaunchSpecification = Nothing
-    , _iiDiskImages = Nothing
-    , _iiDescription = Nothing
-    , _iiDryRun = Nothing
-    , _iiPlatform = pPlatform_
-    }
-
--- | The launch specification.
-iiLaunchSpecification :: Lens' ImportInstance (Maybe ImportInstanceLaunchSpecification)
-iiLaunchSpecification = lens _iiLaunchSpecification (\ s a -> s{_iiLaunchSpecification = a});
-
--- | The disk image.
-iiDiskImages :: Lens' ImportInstance [DiskImage]
-iiDiskImages = lens _iiDiskImages (\ s a -> s{_iiDiskImages = a}) . _Default . _Coerce;
-
--- | A description for the instance being imported.
-iiDescription :: Lens' ImportInstance (Maybe Text)
-iiDescription = lens _iiDescription (\ s a -> s{_iiDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-iiDryRun :: Lens' ImportInstance (Maybe Bool)
-iiDryRun = lens _iiDryRun (\ s a -> s{_iiDryRun = a});
-
--- | The instance operating system.
-iiPlatform :: Lens' ImportInstance PlatformValues
-iiPlatform = lens _iiPlatform (\ s a -> s{_iiPlatform = a});
-
-instance AWSRequest ImportInstance where
-        type Rs ImportInstance = ImportInstanceResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ImportInstanceResponse' <$>
-                   (x .@? "conversionTask") <*> (pure (fromEnum s)))
-
-instance Hashable ImportInstance
-
-instance NFData ImportInstance
-
-instance ToHeaders ImportInstance where
-        toHeaders = const mempty
-
-instance ToPath ImportInstance where
-        toPath = const "/"
-
-instance ToQuery ImportInstance where
-        toQuery ImportInstance'{..}
-          = mconcat
-              ["Action" =: ("ImportInstance" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "LaunchSpecification" =: _iiLaunchSpecification,
-               toQuery (toQueryList "DiskImage" <$> _iiDiskImages),
-               "Description" =: _iiDescription,
-               "DryRun" =: _iiDryRun, "Platform" =: _iiPlatform]
-
--- | Contains the output for ImportInstance.
---
---
---
--- /See:/ 'importInstanceResponse' smart constructor.
-data ImportInstanceResponse = ImportInstanceResponse'
-    { _iirsConversionTask :: !(Maybe ConversionTask)
-    , _iirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iirsConversionTask' - Information about the conversion task.
---
--- * 'iirsResponseStatus' - -- | The response status code.
-importInstanceResponse
-    :: Int -- ^ 'iirsResponseStatus'
-    -> ImportInstanceResponse
-importInstanceResponse pResponseStatus_ =
-    ImportInstanceResponse'
-    { _iirsConversionTask = Nothing
-    , _iirsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the conversion task.
-iirsConversionTask :: Lens' ImportInstanceResponse (Maybe ConversionTask)
-iirsConversionTask = lens _iirsConversionTask (\ s a -> s{_iirsConversionTask = a});
-
--- | -- | The response status code.
-iirsResponseStatus :: Lens' ImportInstanceResponse Int
-iirsResponseStatus = lens _iirsResponseStatus (\ s a -> s{_iirsResponseStatus = a});
-
-instance NFData ImportInstanceResponse
diff --git a/gen/Network/AWS/EC2/ImportKeyPair.hs b/gen/Network/AWS/EC2/ImportKeyPair.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ImportKeyPair.hs
+++ /dev/null
@@ -1,165 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ImportKeyPair
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Imports the public key from an RSA key pair that you created with a third-party tool. Compare this with 'CreateKeyPair' , 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.
---
---
--- For more information about key pairs, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.ImportKeyPair
-    (
-    -- * Creating a Request
-      importKeyPair
-    , ImportKeyPair
-    -- * Request Lenses
-    , ikpDryRun
-    , ikpKeyName
-    , ikpPublicKeyMaterial
-
-    -- * Destructuring the Response
-    , importKeyPairResponse
-    , ImportKeyPairResponse
-    -- * Response Lenses
-    , ikprsKeyFingerprint
-    , ikprsKeyName
-    , ikprsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ImportKeyPair.
---
---
---
--- /See:/ 'importKeyPair' smart constructor.
-data ImportKeyPair = ImportKeyPair'
-    { _ikpDryRun            :: !(Maybe Bool)
-    , _ikpKeyName           :: !Text
-    , _ikpPublicKeyMaterial :: !Base64
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportKeyPair' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ikpDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ikpKeyName' - A unique name for the key pair.
---
--- * 'ikpPublicKeyMaterial' - The public key. For API calls, the text must be base64-encoded. For command line tools, base64 encoding is performed for you.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-importKeyPair
-    :: Text -- ^ 'ikpKeyName'
-    -> ByteString -- ^ 'ikpPublicKeyMaterial'
-    -> ImportKeyPair
-importKeyPair pKeyName_ pPublicKeyMaterial_ =
-    ImportKeyPair'
-    { _ikpDryRun = Nothing
-    , _ikpKeyName = pKeyName_
-    , _ikpPublicKeyMaterial = _Base64 # pPublicKeyMaterial_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ikpDryRun :: Lens' ImportKeyPair (Maybe Bool)
-ikpDryRun = lens _ikpDryRun (\ s a -> s{_ikpDryRun = a});
-
--- | A unique name for the key pair.
-ikpKeyName :: Lens' ImportKeyPair Text
-ikpKeyName = lens _ikpKeyName (\ s a -> s{_ikpKeyName = a});
-
--- | The public key. For API calls, the text must be base64-encoded. For command line tools, base64 encoding is performed for you.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-ikpPublicKeyMaterial :: Lens' ImportKeyPair ByteString
-ikpPublicKeyMaterial = lens _ikpPublicKeyMaterial (\ s a -> s{_ikpPublicKeyMaterial = a}) . _Base64;
-
-instance AWSRequest ImportKeyPair where
-        type Rs ImportKeyPair = ImportKeyPairResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ImportKeyPairResponse' <$>
-                   (x .@? "keyFingerprint") <*> (x .@? "keyName") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable ImportKeyPair
-
-instance NFData ImportKeyPair
-
-instance ToHeaders ImportKeyPair where
-        toHeaders = const mempty
-
-instance ToPath ImportKeyPair where
-        toPath = const "/"
-
-instance ToQuery ImportKeyPair where
-        toQuery ImportKeyPair'{..}
-          = mconcat
-              ["Action" =: ("ImportKeyPair" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _ikpDryRun, "KeyName" =: _ikpKeyName,
-               "PublicKeyMaterial" =: _ikpPublicKeyMaterial]
-
--- | Contains the output of ImportKeyPair.
---
---
---
--- /See:/ 'importKeyPairResponse' smart constructor.
-data ImportKeyPairResponse = ImportKeyPairResponse'
-    { _ikprsKeyFingerprint :: !(Maybe Text)
-    , _ikprsKeyName        :: !(Maybe Text)
-    , _ikprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportKeyPairResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ikprsKeyFingerprint' - The MD5 public key fingerprint as specified in section 4 of RFC 4716.
---
--- * 'ikprsKeyName' - The key pair name you provided.
---
--- * 'ikprsResponseStatus' - -- | The response status code.
-importKeyPairResponse
-    :: Int -- ^ 'ikprsResponseStatus'
-    -> ImportKeyPairResponse
-importKeyPairResponse pResponseStatus_ =
-    ImportKeyPairResponse'
-    { _ikprsKeyFingerprint = Nothing
-    , _ikprsKeyName = Nothing
-    , _ikprsResponseStatus = pResponseStatus_
-    }
-
--- | The MD5 public key fingerprint as specified in section 4 of RFC 4716.
-ikprsKeyFingerprint :: Lens' ImportKeyPairResponse (Maybe Text)
-ikprsKeyFingerprint = lens _ikprsKeyFingerprint (\ s a -> s{_ikprsKeyFingerprint = a});
-
--- | The key pair name you provided.
-ikprsKeyName :: Lens' ImportKeyPairResponse (Maybe Text)
-ikprsKeyName = lens _ikprsKeyName (\ s a -> s{_ikprsKeyName = a});
-
--- | -- | The response status code.
-ikprsResponseStatus :: Lens' ImportKeyPairResponse Int
-ikprsResponseStatus = lens _ikprsResponseStatus (\ s a -> s{_ikprsResponseStatus = a});
-
-instance NFData ImportKeyPairResponse
diff --git a/gen/Network/AWS/EC2/ImportSnapshot.hs b/gen/Network/AWS/EC2/ImportSnapshot.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ImportSnapshot.hs
+++ /dev/null
@@ -1,202 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ImportSnapshot
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Imports a disk into an EBS snapshot.
---
---
-module Network.AWS.EC2.ImportSnapshot
-    (
-    -- * Creating a Request
-      importSnapshot
-    , ImportSnapshot
-    -- * Request Lenses
-    , isDiskContainer
-    , isClientToken
-    , isRoleName
-    , isDescription
-    , isDryRun
-    , isClientData
-
-    -- * Destructuring the Response
-    , importSnapshotResponse
-    , ImportSnapshotResponse
-    -- * Response Lenses
-    , isrsSnapshotTaskDetail
-    , isrsImportTaskId
-    , isrsDescription
-    , isrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ImportSnapshot.
---
---
---
--- /See:/ 'importSnapshot' smart constructor.
-data ImportSnapshot = ImportSnapshot'
-    { _isDiskContainer :: !(Maybe SnapshotDiskContainer)
-    , _isClientToken   :: !(Maybe Text)
-    , _isRoleName      :: !(Maybe Text)
-    , _isDescription   :: !(Maybe Text)
-    , _isDryRun        :: !(Maybe Bool)
-    , _isClientData    :: !(Maybe ClientData)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportSnapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isDiskContainer' - Information about the disk container.
---
--- * 'isClientToken' - Token to enable idempotency for VM import requests.
---
--- * 'isRoleName' - The name of the role to use when not using the default role, 'vmimport'.
---
--- * 'isDescription' - The description string for the import snapshot task.
---
--- * 'isDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'isClientData' - The client-specific data.
-importSnapshot
-    :: ImportSnapshot
-importSnapshot =
-    ImportSnapshot'
-    { _isDiskContainer = Nothing
-    , _isClientToken = Nothing
-    , _isRoleName = Nothing
-    , _isDescription = Nothing
-    , _isDryRun = Nothing
-    , _isClientData = Nothing
-    }
-
--- | Information about the disk container.
-isDiskContainer :: Lens' ImportSnapshot (Maybe SnapshotDiskContainer)
-isDiskContainer = lens _isDiskContainer (\ s a -> s{_isDiskContainer = a});
-
--- | Token to enable idempotency for VM import requests.
-isClientToken :: Lens' ImportSnapshot (Maybe Text)
-isClientToken = lens _isClientToken (\ s a -> s{_isClientToken = a});
-
--- | The name of the role to use when not using the default role, 'vmimport'.
-isRoleName :: Lens' ImportSnapshot (Maybe Text)
-isRoleName = lens _isRoleName (\ s a -> s{_isRoleName = a});
-
--- | The description string for the import snapshot task.
-isDescription :: Lens' ImportSnapshot (Maybe Text)
-isDescription = lens _isDescription (\ s a -> s{_isDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-isDryRun :: Lens' ImportSnapshot (Maybe Bool)
-isDryRun = lens _isDryRun (\ s a -> s{_isDryRun = a});
-
--- | The client-specific data.
-isClientData :: Lens' ImportSnapshot (Maybe ClientData)
-isClientData = lens _isClientData (\ s a -> s{_isClientData = a});
-
-instance AWSRequest ImportSnapshot where
-        type Rs ImportSnapshot = ImportSnapshotResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ImportSnapshotResponse' <$>
-                   (x .@? "snapshotTaskDetail") <*>
-                     (x .@? "importTaskId")
-                     <*> (x .@? "description")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ImportSnapshot
-
-instance NFData ImportSnapshot
-
-instance ToHeaders ImportSnapshot where
-        toHeaders = const mempty
-
-instance ToPath ImportSnapshot where
-        toPath = const "/"
-
-instance ToQuery ImportSnapshot where
-        toQuery ImportSnapshot'{..}
-          = mconcat
-              ["Action" =: ("ImportSnapshot" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DiskContainer" =: _isDiskContainer,
-               "ClientToken" =: _isClientToken,
-               "RoleName" =: _isRoleName,
-               "Description" =: _isDescription,
-               "DryRun" =: _isDryRun, "ClientData" =: _isClientData]
-
--- | Contains the output for ImportSnapshot.
---
---
---
--- /See:/ 'importSnapshotResponse' smart constructor.
-data ImportSnapshotResponse = ImportSnapshotResponse'
-    { _isrsSnapshotTaskDetail :: !(Maybe SnapshotTaskDetail)
-    , _isrsImportTaskId       :: !(Maybe Text)
-    , _isrsDescription        :: !(Maybe Text)
-    , _isrsResponseStatus     :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportSnapshotResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isrsSnapshotTaskDetail' - Information about the import snapshot task.
---
--- * 'isrsImportTaskId' - The ID of the import snapshot task.
---
--- * 'isrsDescription' - A description of the import snapshot task.
---
--- * 'isrsResponseStatus' - -- | The response status code.
-importSnapshotResponse
-    :: Int -- ^ 'isrsResponseStatus'
-    -> ImportSnapshotResponse
-importSnapshotResponse pResponseStatus_ =
-    ImportSnapshotResponse'
-    { _isrsSnapshotTaskDetail = Nothing
-    , _isrsImportTaskId = Nothing
-    , _isrsDescription = Nothing
-    , _isrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the import snapshot task.
-isrsSnapshotTaskDetail :: Lens' ImportSnapshotResponse (Maybe SnapshotTaskDetail)
-isrsSnapshotTaskDetail = lens _isrsSnapshotTaskDetail (\ s a -> s{_isrsSnapshotTaskDetail = a});
-
--- | The ID of the import snapshot task.
-isrsImportTaskId :: Lens' ImportSnapshotResponse (Maybe Text)
-isrsImportTaskId = lens _isrsImportTaskId (\ s a -> s{_isrsImportTaskId = a});
-
--- | A description of the import snapshot task.
-isrsDescription :: Lens' ImportSnapshotResponse (Maybe Text)
-isrsDescription = lens _isrsDescription (\ s a -> s{_isrsDescription = a});
-
--- | -- | The response status code.
-isrsResponseStatus :: Lens' ImportSnapshotResponse Int
-isrsResponseStatus = lens _isrsResponseStatus (\ s a -> s{_isrsResponseStatus = a});
-
-instance NFData ImportSnapshotResponse
diff --git a/gen/Network/AWS/EC2/ImportVolume.hs b/gen/Network/AWS/EC2/ImportVolume.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ImportVolume.hs
+++ /dev/null
@@ -1,176 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ImportVolume
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an import volume task using metadata from the specified disk image.For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/importing-your-volumes-into-amazon-ebs.html Importing Disks to Amazon EBS> .
---
---
--- For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
---
-module Network.AWS.EC2.ImportVolume
-    (
-    -- * Creating a Request
-      importVolume
-    , ImportVolume
-    -- * Request Lenses
-    , ivDescription
-    , ivDryRun
-    , ivAvailabilityZone
-    , ivImage
-    , ivVolume
-
-    -- * Destructuring the Response
-    , importVolumeResponse
-    , ImportVolumeResponse
-    -- * Response Lenses
-    , ivrsConversionTask
-    , ivrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ImportVolume.
---
---
---
--- /See:/ 'importVolume' smart constructor.
-data ImportVolume = ImportVolume'
-    { _ivDescription      :: !(Maybe Text)
-    , _ivDryRun           :: !(Maybe Bool)
-    , _ivAvailabilityZone :: !Text
-    , _ivImage            :: !DiskImageDetail
-    , _ivVolume           :: !VolumeDetail
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportVolume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ivDescription' - A description of the volume.
---
--- * 'ivDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ivAvailabilityZone' - The Availability Zone for the resulting EBS volume.
---
--- * 'ivImage' - The disk image.
---
--- * 'ivVolume' - The volume size.
-importVolume
-    :: Text -- ^ 'ivAvailabilityZone'
-    -> DiskImageDetail -- ^ 'ivImage'
-    -> VolumeDetail -- ^ 'ivVolume'
-    -> ImportVolume
-importVolume pAvailabilityZone_ pImage_ pVolume_ =
-    ImportVolume'
-    { _ivDescription = Nothing
-    , _ivDryRun = Nothing
-    , _ivAvailabilityZone = pAvailabilityZone_
-    , _ivImage = pImage_
-    , _ivVolume = pVolume_
-    }
-
--- | A description of the volume.
-ivDescription :: Lens' ImportVolume (Maybe Text)
-ivDescription = lens _ivDescription (\ s a -> s{_ivDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ivDryRun :: Lens' ImportVolume (Maybe Bool)
-ivDryRun = lens _ivDryRun (\ s a -> s{_ivDryRun = a});
-
--- | The Availability Zone for the resulting EBS volume.
-ivAvailabilityZone :: Lens' ImportVolume Text
-ivAvailabilityZone = lens _ivAvailabilityZone (\ s a -> s{_ivAvailabilityZone = a});
-
--- | The disk image.
-ivImage :: Lens' ImportVolume DiskImageDetail
-ivImage = lens _ivImage (\ s a -> s{_ivImage = a});
-
--- | The volume size.
-ivVolume :: Lens' ImportVolume VolumeDetail
-ivVolume = lens _ivVolume (\ s a -> s{_ivVolume = a});
-
-instance AWSRequest ImportVolume where
-        type Rs ImportVolume = ImportVolumeResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ImportVolumeResponse' <$>
-                   (x .@? "conversionTask") <*> (pure (fromEnum s)))
-
-instance Hashable ImportVolume
-
-instance NFData ImportVolume
-
-instance ToHeaders ImportVolume where
-        toHeaders = const mempty
-
-instance ToPath ImportVolume where
-        toPath = const "/"
-
-instance ToQuery ImportVolume where
-        toQuery ImportVolume'{..}
-          = mconcat
-              ["Action" =: ("ImportVolume" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Description" =: _ivDescription,
-               "DryRun" =: _ivDryRun,
-               "AvailabilityZone" =: _ivAvailabilityZone,
-               "Image" =: _ivImage, "Volume" =: _ivVolume]
-
--- | Contains the output for ImportVolume.
---
---
---
--- /See:/ 'importVolumeResponse' smart constructor.
-data ImportVolumeResponse = ImportVolumeResponse'
-    { _ivrsConversionTask :: !(Maybe ConversionTask)
-    , _ivrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportVolumeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ivrsConversionTask' - Information about the conversion task.
---
--- * 'ivrsResponseStatus' - -- | The response status code.
-importVolumeResponse
-    :: Int -- ^ 'ivrsResponseStatus'
-    -> ImportVolumeResponse
-importVolumeResponse pResponseStatus_ =
-    ImportVolumeResponse'
-    { _ivrsConversionTask = Nothing
-    , _ivrsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the conversion task.
-ivrsConversionTask :: Lens' ImportVolumeResponse (Maybe ConversionTask)
-ivrsConversionTask = lens _ivrsConversionTask (\ s a -> s{_ivrsConversionTask = a});
-
--- | -- | The response status code.
-ivrsResponseStatus :: Lens' ImportVolumeResponse Int
-ivrsResponseStatus = lens _ivrsResponseStatus (\ s a -> s{_ivrsResponseStatus = a});
-
-instance NFData ImportVolumeResponse
diff --git a/gen/Network/AWS/EC2/ModifyHosts.hs b/gen/Network/AWS/EC2/ModifyHosts.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyHosts.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyHosts
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modify the auto-placement setting of a Dedicated Host. When auto-placement is enabled, AWS will place instances that you launch with a tenancy of @host@ , but without targeting a specific host ID, onto any available Dedicated Host in your account which has auto-placement enabled. When auto-placement is disabled, you need to provide a host ID if you want the instance to launch onto a specific host. If no host ID is provided, the instance will be launched onto a suitable host which has auto-placement enabled.
---
---
-module Network.AWS.EC2.ModifyHosts
-    (
-    -- * Creating a Request
-      modifyHosts
-    , ModifyHosts
-    -- * Request Lenses
-    , mhHostIds
-    , mhAutoPlacement
-
-    -- * Destructuring the Response
-    , modifyHostsResponse
-    , ModifyHostsResponse
-    -- * Response Lenses
-    , mhrsUnsuccessful
-    , mhrsSuccessful
-    , mhrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyHosts.
---
---
---
--- /See:/ 'modifyHosts' smart constructor.
-data ModifyHosts = ModifyHosts'
-    { _mhHostIds       :: ![Text]
-    , _mhAutoPlacement :: !AutoPlacement
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyHosts' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mhHostIds' - The host IDs of the Dedicated Hosts you want to modify.
---
--- * 'mhAutoPlacement' - Specify whether to enable or disable auto-placement.
-modifyHosts
-    :: AutoPlacement -- ^ 'mhAutoPlacement'
-    -> ModifyHosts
-modifyHosts pAutoPlacement_ =
-    ModifyHosts'
-    { _mhHostIds = mempty
-    , _mhAutoPlacement = pAutoPlacement_
-    }
-
--- | The host IDs of the Dedicated Hosts you want to modify.
-mhHostIds :: Lens' ModifyHosts [Text]
-mhHostIds = lens _mhHostIds (\ s a -> s{_mhHostIds = a}) . _Coerce;
-
--- | Specify whether to enable or disable auto-placement.
-mhAutoPlacement :: Lens' ModifyHosts AutoPlacement
-mhAutoPlacement = lens _mhAutoPlacement (\ s a -> s{_mhAutoPlacement = a});
-
-instance AWSRequest ModifyHosts where
-        type Rs ModifyHosts = ModifyHostsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ModifyHostsResponse' <$>
-                   (x .@? "unsuccessful" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*>
-                     (x .@? "successful" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ModifyHosts
-
-instance NFData ModifyHosts
-
-instance ToHeaders ModifyHosts where
-        toHeaders = const mempty
-
-instance ToPath ModifyHosts where
-        toPath = const "/"
-
-instance ToQuery ModifyHosts where
-        toQuery ModifyHosts'{..}
-          = mconcat
-              ["Action" =: ("ModifyHosts" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQueryList "HostId" _mhHostIds,
-               "AutoPlacement" =: _mhAutoPlacement]
-
--- | Contains the output of ModifyHosts.
---
---
---
--- /See:/ 'modifyHostsResponse' smart constructor.
-data ModifyHostsResponse = ModifyHostsResponse'
-    { _mhrsUnsuccessful   :: !(Maybe [UnsuccessfulItem])
-    , _mhrsSuccessful     :: !(Maybe [Text])
-    , _mhrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyHostsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mhrsUnsuccessful' - The IDs of the Dedicated Hosts that could not be modified. Check whether the setting you requested can be used.
---
--- * 'mhrsSuccessful' - The IDs of the Dedicated Hosts that were successfully modified.
---
--- * 'mhrsResponseStatus' - -- | The response status code.
-modifyHostsResponse
-    :: Int -- ^ 'mhrsResponseStatus'
-    -> ModifyHostsResponse
-modifyHostsResponse pResponseStatus_ =
-    ModifyHostsResponse'
-    { _mhrsUnsuccessful = Nothing
-    , _mhrsSuccessful = Nothing
-    , _mhrsResponseStatus = pResponseStatus_
-    }
-
--- | The IDs of the Dedicated Hosts that could not be modified. Check whether the setting you requested can be used.
-mhrsUnsuccessful :: Lens' ModifyHostsResponse [UnsuccessfulItem]
-mhrsUnsuccessful = lens _mhrsUnsuccessful (\ s a -> s{_mhrsUnsuccessful = a}) . _Default . _Coerce;
-
--- | The IDs of the Dedicated Hosts that were successfully modified.
-mhrsSuccessful :: Lens' ModifyHostsResponse [Text]
-mhrsSuccessful = lens _mhrsSuccessful (\ s a -> s{_mhrsSuccessful = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-mhrsResponseStatus :: Lens' ModifyHostsResponse Int
-mhrsResponseStatus = lens _mhrsResponseStatus (\ s a -> s{_mhrsResponseStatus = a});
-
-instance NFData ModifyHostsResponse
diff --git a/gen/Network/AWS/EC2/ModifyIdFormat.hs b/gen/Network/AWS/EC2/ModifyIdFormat.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyIdFormat.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyIdFormat
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the ID format for the specified resource on a per-region basis. You can specify that resources should receive longer IDs (17-character IDs) when they are created. The following resource types support longer IDs: @instance@ | @reservation@ | @snapshot@ | @volume@ .
---
---
--- This setting applies to the IAM user who makes the request; it does not apply to the entire AWS account. By default, an IAM user defaults to the same settings as the root user. If you're using this action as the root user, then these settings apply to the entire account, unless an IAM user explicitly overrides these settings for themselves. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html Resource IDs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- Resources created with longer IDs are visible to all IAM roles and users, regardless of these settings and provided that they have permission to use the relevant @Describe@ command for the resource type.
---
-module Network.AWS.EC2.ModifyIdFormat
-    (
-    -- * Creating a Request
-      modifyIdFormat
-    , ModifyIdFormat
-    -- * Request Lenses
-    , mifResource
-    , mifUseLongIds
-
-    -- * Destructuring the Response
-    , modifyIdFormatResponse
-    , ModifyIdFormatResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters of ModifyIdFormat.
---
---
---
--- /See:/ 'modifyIdFormat' smart constructor.
-data ModifyIdFormat = ModifyIdFormat'
-    { _mifResource   :: !Text
-    , _mifUseLongIds :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyIdFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mifResource' - The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
---
--- * 'mifUseLongIds' - Indicate whether the resource should use longer IDs (17-character IDs).
-modifyIdFormat
-    :: Text -- ^ 'mifResource'
-    -> Bool -- ^ 'mifUseLongIds'
-    -> ModifyIdFormat
-modifyIdFormat pResource_ pUseLongIds_ =
-    ModifyIdFormat'
-    { _mifResource = pResource_
-    , _mifUseLongIds = pUseLongIds_
-    }
-
--- | The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
-mifResource :: Lens' ModifyIdFormat Text
-mifResource = lens _mifResource (\ s a -> s{_mifResource = a});
-
--- | Indicate whether the resource should use longer IDs (17-character IDs).
-mifUseLongIds :: Lens' ModifyIdFormat Bool
-mifUseLongIds = lens _mifUseLongIds (\ s a -> s{_mifUseLongIds = a});
-
-instance AWSRequest ModifyIdFormat where
-        type Rs ModifyIdFormat = ModifyIdFormatResponse
-        request = postQuery ec2
-        response = receiveNull ModifyIdFormatResponse'
-
-instance Hashable ModifyIdFormat
-
-instance NFData ModifyIdFormat
-
-instance ToHeaders ModifyIdFormat where
-        toHeaders = const mempty
-
-instance ToPath ModifyIdFormat where
-        toPath = const "/"
-
-instance ToQuery ModifyIdFormat where
-        toQuery ModifyIdFormat'{..}
-          = mconcat
-              ["Action" =: ("ModifyIdFormat" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Resource" =: _mifResource,
-               "UseLongIds" =: _mifUseLongIds]
-
--- | /See:/ 'modifyIdFormatResponse' smart constructor.
-data ModifyIdFormatResponse =
-    ModifyIdFormatResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyIdFormatResponse' with the minimum fields required to make a request.
---
-modifyIdFormatResponse
-    :: ModifyIdFormatResponse
-modifyIdFormatResponse = ModifyIdFormatResponse'
-
-instance NFData ModifyIdFormatResponse
diff --git a/gen/Network/AWS/EC2/ModifyIdentityIdFormat.hs b/gen/Network/AWS/EC2/ModifyIdentityIdFormat.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyIdentityIdFormat.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyIdentityIdFormat
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the ID format of a resource for a specified IAM user, IAM role, or the root user for an account; or all IAM users, IAM roles, and the root user for an account. You can specify that resources should receive longer IDs (17-character IDs) when they are created.
---
---
--- The following resource types support longer IDs: @instance@ | @reservation@ | @snapshot@ | @volume@ . For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html Resource IDs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- This setting applies to the principal specified in the request; it does not apply to the principal that makes the request.
---
--- Resources created with longer IDs are visible to all IAM roles and users, regardless of these settings and provided that they have permission to use the relevant @Describe@ command for the resource type.
---
-module Network.AWS.EC2.ModifyIdentityIdFormat
-    (
-    -- * Creating a Request
-      modifyIdentityIdFormat
-    , ModifyIdentityIdFormat
-    -- * Request Lenses
-    , miifResource
-    , miifUseLongIds
-    , miifPrincipalARN
-
-    -- * Destructuring the Response
-    , modifyIdentityIdFormatResponse
-    , ModifyIdentityIdFormatResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters of ModifyIdentityIdFormat.
---
---
---
--- /See:/ 'modifyIdentityIdFormat' smart constructor.
-data ModifyIdentityIdFormat = ModifyIdentityIdFormat'
-    { _miifResource     :: !Text
-    , _miifUseLongIds   :: !Bool
-    , _miifPrincipalARN :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyIdentityIdFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miifResource' - The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
---
--- * 'miifUseLongIds' - Indicates whether the resource should use longer IDs (17-character IDs)
---
--- * 'miifPrincipalARN' - The ARN of the principal, which can be an IAM user, IAM role, or the root user. Specify @all@ to modify the ID format for all IAM users, IAM roles, and the root user of the account.
-modifyIdentityIdFormat
-    :: Text -- ^ 'miifResource'
-    -> Bool -- ^ 'miifUseLongIds'
-    -> Text -- ^ 'miifPrincipalARN'
-    -> ModifyIdentityIdFormat
-modifyIdentityIdFormat pResource_ pUseLongIds_ pPrincipalARN_ =
-    ModifyIdentityIdFormat'
-    { _miifResource = pResource_
-    , _miifUseLongIds = pUseLongIds_
-    , _miifPrincipalARN = pPrincipalARN_
-    }
-
--- | The type of resource: @instance@ | @reservation@ | @snapshot@ | @volume@
-miifResource :: Lens' ModifyIdentityIdFormat Text
-miifResource = lens _miifResource (\ s a -> s{_miifResource = a});
-
--- | Indicates whether the resource should use longer IDs (17-character IDs)
-miifUseLongIds :: Lens' ModifyIdentityIdFormat Bool
-miifUseLongIds = lens _miifUseLongIds (\ s a -> s{_miifUseLongIds = a});
-
--- | The ARN of the principal, which can be an IAM user, IAM role, or the root user. Specify @all@ to modify the ID format for all IAM users, IAM roles, and the root user of the account.
-miifPrincipalARN :: Lens' ModifyIdentityIdFormat Text
-miifPrincipalARN = lens _miifPrincipalARN (\ s a -> s{_miifPrincipalARN = a});
-
-instance AWSRequest ModifyIdentityIdFormat where
-        type Rs ModifyIdentityIdFormat =
-             ModifyIdentityIdFormatResponse
-        request = postQuery ec2
-        response
-          = receiveNull ModifyIdentityIdFormatResponse'
-
-instance Hashable ModifyIdentityIdFormat
-
-instance NFData ModifyIdentityIdFormat
-
-instance ToHeaders ModifyIdentityIdFormat where
-        toHeaders = const mempty
-
-instance ToPath ModifyIdentityIdFormat where
-        toPath = const "/"
-
-instance ToQuery ModifyIdentityIdFormat where
-        toQuery ModifyIdentityIdFormat'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifyIdentityIdFormat" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Resource" =: _miifResource,
-               "UseLongIds" =: _miifUseLongIds,
-               "PrincipalArn" =: _miifPrincipalARN]
-
--- | /See:/ 'modifyIdentityIdFormatResponse' smart constructor.
-data ModifyIdentityIdFormatResponse =
-    ModifyIdentityIdFormatResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyIdentityIdFormatResponse' with the minimum fields required to make a request.
---
-modifyIdentityIdFormatResponse
-    :: ModifyIdentityIdFormatResponse
-modifyIdentityIdFormatResponse = ModifyIdentityIdFormatResponse'
-
-instance NFData ModifyIdentityIdFormatResponse
diff --git a/gen/Network/AWS/EC2/ModifyImageAttribute.hs b/gen/Network/AWS/EC2/ModifyImageAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyImageAttribute.hs
+++ /dev/null
@@ -1,194 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyImageAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the specified attribute of the specified AMI. You can specify only one attribute at a time.
---
---
-module Network.AWS.EC2.ModifyImageAttribute
-    (
-    -- * Creating a Request
-      modifyImageAttribute
-    , ModifyImageAttribute
-    -- * Request Lenses
-    , miaAttribute
-    , miaUserIds
-    , miaUserGroups
-    , miaValue
-    , miaLaunchPermission
-    , miaOperationType
-    , miaProductCodes
-    , miaDescription
-    , miaDryRun
-    , miaImageId
-
-    -- * Destructuring the Response
-    , modifyImageAttributeResponse
-    , ModifyImageAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyImageAttribute.
---
---
---
--- /See:/ 'modifyImageAttribute' smart constructor.
-data ModifyImageAttribute = ModifyImageAttribute'
-    { _miaAttribute        :: !(Maybe Text)
-    , _miaUserIds          :: !(Maybe [Text])
-    , _miaUserGroups       :: !(Maybe [Text])
-    , _miaValue            :: !(Maybe Text)
-    , _miaLaunchPermission :: !(Maybe LaunchPermissionModifications)
-    , _miaOperationType    :: !(Maybe OperationType)
-    , _miaProductCodes     :: !(Maybe [Text])
-    , _miaDescription      :: !(Maybe AttributeValue)
-    , _miaDryRun           :: !(Maybe Bool)
-    , _miaImageId          :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyImageAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miaAttribute' - The name of the attribute to modify.
---
--- * 'miaUserIds' - One or more AWS account IDs. This is only valid when modifying the @launchPermission@ attribute.
---
--- * 'miaUserGroups' - One or more user groups. This is only valid when modifying the @launchPermission@ attribute.
---
--- * 'miaValue' - The value of the attribute being modified. This is only valid when modifying the @description@ attribute.
---
--- * 'miaLaunchPermission' - A launch permission modification.
---
--- * 'miaOperationType' - The operation type.
---
--- * 'miaProductCodes' - One or more product codes. After you add a product code to an AMI, it can't be removed. This is only valid when modifying the @productCodes@ attribute.
---
--- * 'miaDescription' - A description for the AMI.
---
--- * 'miaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'miaImageId' - The ID of the AMI.
-modifyImageAttribute
-    :: Text -- ^ 'miaImageId'
-    -> ModifyImageAttribute
-modifyImageAttribute pImageId_ =
-    ModifyImageAttribute'
-    { _miaAttribute = Nothing
-    , _miaUserIds = Nothing
-    , _miaUserGroups = Nothing
-    , _miaValue = Nothing
-    , _miaLaunchPermission = Nothing
-    , _miaOperationType = Nothing
-    , _miaProductCodes = Nothing
-    , _miaDescription = Nothing
-    , _miaDryRun = Nothing
-    , _miaImageId = pImageId_
-    }
-
--- | The name of the attribute to modify.
-miaAttribute :: Lens' ModifyImageAttribute (Maybe Text)
-miaAttribute = lens _miaAttribute (\ s a -> s{_miaAttribute = a});
-
--- | One or more AWS account IDs. This is only valid when modifying the @launchPermission@ attribute.
-miaUserIds :: Lens' ModifyImageAttribute [Text]
-miaUserIds = lens _miaUserIds (\ s a -> s{_miaUserIds = a}) . _Default . _Coerce;
-
--- | One or more user groups. This is only valid when modifying the @launchPermission@ attribute.
-miaUserGroups :: Lens' ModifyImageAttribute [Text]
-miaUserGroups = lens _miaUserGroups (\ s a -> s{_miaUserGroups = a}) . _Default . _Coerce;
-
--- | The value of the attribute being modified. This is only valid when modifying the @description@ attribute.
-miaValue :: Lens' ModifyImageAttribute (Maybe Text)
-miaValue = lens _miaValue (\ s a -> s{_miaValue = a});
-
--- | A launch permission modification.
-miaLaunchPermission :: Lens' ModifyImageAttribute (Maybe LaunchPermissionModifications)
-miaLaunchPermission = lens _miaLaunchPermission (\ s a -> s{_miaLaunchPermission = a});
-
--- | The operation type.
-miaOperationType :: Lens' ModifyImageAttribute (Maybe OperationType)
-miaOperationType = lens _miaOperationType (\ s a -> s{_miaOperationType = a});
-
--- | One or more product codes. After you add a product code to an AMI, it can't be removed. This is only valid when modifying the @productCodes@ attribute.
-miaProductCodes :: Lens' ModifyImageAttribute [Text]
-miaProductCodes = lens _miaProductCodes (\ s a -> s{_miaProductCodes = a}) . _Default . _Coerce;
-
--- | A description for the AMI.
-miaDescription :: Lens' ModifyImageAttribute (Maybe AttributeValue)
-miaDescription = lens _miaDescription (\ s a -> s{_miaDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-miaDryRun :: Lens' ModifyImageAttribute (Maybe Bool)
-miaDryRun = lens _miaDryRun (\ s a -> s{_miaDryRun = a});
-
--- | The ID of the AMI.
-miaImageId :: Lens' ModifyImageAttribute Text
-miaImageId = lens _miaImageId (\ s a -> s{_miaImageId = a});
-
-instance AWSRequest ModifyImageAttribute where
-        type Rs ModifyImageAttribute =
-             ModifyImageAttributeResponse
-        request = postQuery ec2
-        response = receiveNull ModifyImageAttributeResponse'
-
-instance Hashable ModifyImageAttribute
-
-instance NFData ModifyImageAttribute
-
-instance ToHeaders ModifyImageAttribute where
-        toHeaders = const mempty
-
-instance ToPath ModifyImageAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifyImageAttribute where
-        toQuery ModifyImageAttribute'{..}
-          = mconcat
-              ["Action" =: ("ModifyImageAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Attribute" =: _miaAttribute,
-               toQuery (toQueryList "UserId" <$> _miaUserIds),
-               toQuery (toQueryList "UserGroup" <$> _miaUserGroups),
-               "Value" =: _miaValue,
-               "LaunchPermission" =: _miaLaunchPermission,
-               "OperationType" =: _miaOperationType,
-               toQuery
-                 (toQueryList "ProductCode" <$> _miaProductCodes),
-               "Description" =: _miaDescription,
-               "DryRun" =: _miaDryRun, "ImageId" =: _miaImageId]
-
--- | /See:/ 'modifyImageAttributeResponse' smart constructor.
-data ModifyImageAttributeResponse =
-    ModifyImageAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyImageAttributeResponse' with the minimum fields required to make a request.
---
-modifyImageAttributeResponse
-    :: ModifyImageAttributeResponse
-modifyImageAttributeResponse = ModifyImageAttributeResponse'
-
-instance NFData ModifyImageAttributeResponse
diff --git a/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs b/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs
+++ /dev/null
@@ -1,258 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyInstanceAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the specified attribute of the specified instance. You can specify only one attribute at a time.
---
---
--- To modify some attributes, the instance must be stopped. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html Modifying Attributes of a Stopped Instance> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.ModifyInstanceAttribute
-    (
-    -- * Creating a Request
-      modifyInstanceAttribute
-    , ModifyInstanceAttribute
-    -- * Request Lenses
-    , mGroups
-    , mAttribute
-    , mEnaSupport
-    , mSourceDestCheck
-    , mDisableAPITermination
-    , mKernel
-    , mRAMDisk
-    , mValue
-    , mInstanceType
-    , mSRIOVNetSupport
-    , mEBSOptimized
-    , mUserData
-    , mInstanceInitiatedShutdownBehavior
-    , mBlockDeviceMappings
-    , mDryRun
-    , mInstanceId
-
-    -- * Destructuring the Response
-    , modifyInstanceAttributeResponse
-    , ModifyInstanceAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyInstanceAttribute.
---
---
---
--- /See:/ 'modifyInstanceAttribute' smart constructor.
-data ModifyInstanceAttribute = ModifyInstanceAttribute'
-    { _mGroups                            :: !(Maybe [Text])
-    , _mAttribute                         :: !(Maybe InstanceAttributeName)
-    , _mEnaSupport                        :: !(Maybe AttributeBooleanValue)
-    , _mSourceDestCheck                   :: !(Maybe AttributeBooleanValue)
-    , _mDisableAPITermination             :: !(Maybe AttributeBooleanValue)
-    , _mKernel                            :: !(Maybe AttributeValue)
-    , _mRAMDisk                           :: !(Maybe AttributeValue)
-    , _mValue                             :: !(Maybe Text)
-    , _mInstanceType                      :: !(Maybe AttributeValue)
-    , _mSRIOVNetSupport                   :: !(Maybe AttributeValue)
-    , _mEBSOptimized                      :: !(Maybe AttributeBooleanValue)
-    , _mUserData                          :: !(Maybe BlobAttributeValue)
-    , _mInstanceInitiatedShutdownBehavior :: !(Maybe AttributeValue)
-    , _mBlockDeviceMappings               :: !(Maybe [InstanceBlockDeviceMappingSpecification])
-    , _mDryRun                            :: !(Maybe Bool)
-    , _mInstanceId                        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyInstanceAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mGroups' - [EC2-VPC] Changes the security groups of the instance. You must specify at least one security group, even if it's just the default security group for the VPC. You must specify the security group ID, not the security group name.
---
--- * 'mAttribute' - The name of the attribute.
---
--- * 'mEnaSupport' - Set to @true@ to enable enhanced networking with ENA for the instance. This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.
---
--- * 'mSourceDestCheck' - Specifies whether source/destination checking is enabled. A value of @true@ means that checking is enabled, and @false@ means checking is disabled. This value must be @false@ for a NAT instance to perform NAT.
---
--- * 'mDisableAPITermination' - If the value is @true@ , you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this paramater for Spot Instances.
---
--- * 'mKernel' - Changes the instance's kernel to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB> .
---
--- * 'mRAMDisk' - Changes the instance's RAM disk to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB> .
---
--- * 'mValue' - A new value for the attribute. Use only with the @kernel@ , @ramdisk@ , @userData@ , @disableApiTermination@ , or @instanceInitiatedShutdownBehavior@ attribute.
---
--- * 'mInstanceType' - Changes the instance type to the specified value. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> . If the instance type is not valid, the error returned is @InvalidInstanceAttributeValue@ .
---
--- * 'mSRIOVNetSupport' - Set to @simple@ to enable enhanced networking with the Intel 82599 Virtual Function interface for the instance. There is no way to disable enhanced networking with the Intel 82599 Virtual Function interface at this time. This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.
---
--- * 'mEBSOptimized' - Specifies whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.
---
--- * 'mUserData' - Changes the instance's user data to the specified value. If you are using an AWS SDK or 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.
---
--- * 'mInstanceInitiatedShutdownBehavior' - Specifies whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
---
--- * 'mBlockDeviceMappings' - Modifies the @DeleteOnTermination@ attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for @DeleteOnTermination@ , the default is @true@ and the volume is deleted when the instance is terminated. To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM Updating the Block Device Mapping when Launching an Instance> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'mDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'mInstanceId' - The ID of the instance.
-modifyInstanceAttribute
-    :: Text -- ^ 'mInstanceId'
-    -> ModifyInstanceAttribute
-modifyInstanceAttribute pInstanceId_ =
-    ModifyInstanceAttribute'
-    { _mGroups = Nothing
-    , _mAttribute = Nothing
-    , _mEnaSupport = Nothing
-    , _mSourceDestCheck = Nothing
-    , _mDisableAPITermination = Nothing
-    , _mKernel = Nothing
-    , _mRAMDisk = Nothing
-    , _mValue = Nothing
-    , _mInstanceType = Nothing
-    , _mSRIOVNetSupport = Nothing
-    , _mEBSOptimized = Nothing
-    , _mUserData = Nothing
-    , _mInstanceInitiatedShutdownBehavior = Nothing
-    , _mBlockDeviceMappings = Nothing
-    , _mDryRun = Nothing
-    , _mInstanceId = pInstanceId_
-    }
-
--- | [EC2-VPC] Changes the security groups of the instance. You must specify at least one security group, even if it's just the default security group for the VPC. You must specify the security group ID, not the security group name.
-mGroups :: Lens' ModifyInstanceAttribute [Text]
-mGroups = lens _mGroups (\ s a -> s{_mGroups = a}) . _Default . _Coerce;
-
--- | The name of the attribute.
-mAttribute :: Lens' ModifyInstanceAttribute (Maybe InstanceAttributeName)
-mAttribute = lens _mAttribute (\ s a -> s{_mAttribute = a});
-
--- | Set to @true@ to enable enhanced networking with ENA for the instance. This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.
-mEnaSupport :: Lens' ModifyInstanceAttribute (Maybe AttributeBooleanValue)
-mEnaSupport = lens _mEnaSupport (\ s a -> s{_mEnaSupport = a});
-
--- | Specifies whether source/destination checking is enabled. A value of @true@ means that checking is enabled, and @false@ means checking is disabled. This value must be @false@ for a NAT instance to perform NAT.
-mSourceDestCheck :: Lens' ModifyInstanceAttribute (Maybe AttributeBooleanValue)
-mSourceDestCheck = lens _mSourceDestCheck (\ s a -> s{_mSourceDestCheck = a});
-
--- | If the value is @true@ , you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. You cannot use this paramater for Spot Instances.
-mDisableAPITermination :: Lens' ModifyInstanceAttribute (Maybe AttributeBooleanValue)
-mDisableAPITermination = lens _mDisableAPITermination (\ s a -> s{_mDisableAPITermination = a});
-
--- | Changes the instance's kernel to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB> .
-mKernel :: Lens' ModifyInstanceAttribute (Maybe AttributeValue)
-mKernel = lens _mKernel (\ s a -> s{_mKernel = a});
-
--- | Changes the instance's RAM disk to the specified value. We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedKernels.html PV-GRUB> .
-mRAMDisk :: Lens' ModifyInstanceAttribute (Maybe AttributeValue)
-mRAMDisk = lens _mRAMDisk (\ s a -> s{_mRAMDisk = a});
-
--- | A new value for the attribute. Use only with the @kernel@ , @ramdisk@ , @userData@ , @disableApiTermination@ , or @instanceInitiatedShutdownBehavior@ attribute.
-mValue :: Lens' ModifyInstanceAttribute (Maybe Text)
-mValue = lens _mValue (\ s a -> s{_mValue = a});
-
--- | Changes the instance type to the specified value. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> . If the instance type is not valid, the error returned is @InvalidInstanceAttributeValue@ .
-mInstanceType :: Lens' ModifyInstanceAttribute (Maybe AttributeValue)
-mInstanceType = lens _mInstanceType (\ s a -> s{_mInstanceType = a});
-
--- | Set to @simple@ to enable enhanced networking with the Intel 82599 Virtual Function interface for the instance. There is no way to disable enhanced networking with the Intel 82599 Virtual Function interface at this time. This option is supported only for HVM instances. Specifying this option with a PV instance can make it unreachable.
-mSRIOVNetSupport :: Lens' ModifyInstanceAttribute (Maybe AttributeValue)
-mSRIOVNetSupport = lens _mSRIOVNetSupport (\ s a -> s{_mSRIOVNetSupport = a});
-
--- | Specifies whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.
-mEBSOptimized :: Lens' ModifyInstanceAttribute (Maybe AttributeBooleanValue)
-mEBSOptimized = lens _mEBSOptimized (\ s a -> s{_mEBSOptimized = a});
-
--- | Changes the instance's user data to the specified value. If you are using an AWS SDK or 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.
-mUserData :: Lens' ModifyInstanceAttribute (Maybe BlobAttributeValue)
-mUserData = lens _mUserData (\ s a -> s{_mUserData = a});
-
--- | Specifies whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
-mInstanceInitiatedShutdownBehavior :: Lens' ModifyInstanceAttribute (Maybe AttributeValue)
-mInstanceInitiatedShutdownBehavior = lens _mInstanceInitiatedShutdownBehavior (\ s a -> s{_mInstanceInitiatedShutdownBehavior = a});
-
--- | Modifies the @DeleteOnTermination@ attribute for volumes that are currently attached. The volume must be owned by the caller. If no value is specified for @DeleteOnTermination@ , the default is @true@ and the volume is deleted when the instance is terminated. To add instance store volumes to an Amazon EBS-backed instance, you must add them when you launch the instance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html#Using_OverridingAMIBDM Updating the Block Device Mapping when Launching an Instance> in the /Amazon Elastic Compute Cloud User Guide/ .
-mBlockDeviceMappings :: Lens' ModifyInstanceAttribute [InstanceBlockDeviceMappingSpecification]
-mBlockDeviceMappings = lens _mBlockDeviceMappings (\ s a -> s{_mBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-mDryRun :: Lens' ModifyInstanceAttribute (Maybe Bool)
-mDryRun = lens _mDryRun (\ s a -> s{_mDryRun = a});
-
--- | The ID of the instance.
-mInstanceId :: Lens' ModifyInstanceAttribute Text
-mInstanceId = lens _mInstanceId (\ s a -> s{_mInstanceId = a});
-
-instance AWSRequest ModifyInstanceAttribute where
-        type Rs ModifyInstanceAttribute =
-             ModifyInstanceAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveNull ModifyInstanceAttributeResponse'
-
-instance Hashable ModifyInstanceAttribute
-
-instance NFData ModifyInstanceAttribute
-
-instance ToHeaders ModifyInstanceAttribute where
-        toHeaders = const mempty
-
-instance ToPath ModifyInstanceAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifyInstanceAttribute where
-        toQuery ModifyInstanceAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifyInstanceAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery (toQueryList "GroupId" <$> _mGroups),
-               "Attribute" =: _mAttribute,
-               "EnaSupport" =: _mEnaSupport,
-               "SourceDestCheck" =: _mSourceDestCheck,
-               "DisableApiTermination" =: _mDisableAPITermination,
-               "Kernel" =: _mKernel, "Ramdisk" =: _mRAMDisk,
-               "Value" =: _mValue, "InstanceType" =: _mInstanceType,
-               "SriovNetSupport" =: _mSRIOVNetSupport,
-               "EbsOptimized" =: _mEBSOptimized,
-               "UserData" =: _mUserData,
-               "InstanceInitiatedShutdownBehavior" =:
-                 _mInstanceInitiatedShutdownBehavior,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _mBlockDeviceMappings),
-               "DryRun" =: _mDryRun, "InstanceId" =: _mInstanceId]
-
--- | /See:/ 'modifyInstanceAttributeResponse' smart constructor.
-data ModifyInstanceAttributeResponse =
-    ModifyInstanceAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyInstanceAttributeResponse' with the minimum fields required to make a request.
---
-modifyInstanceAttributeResponse
-    :: ModifyInstanceAttributeResponse
-modifyInstanceAttributeResponse = ModifyInstanceAttributeResponse'
-
-instance NFData ModifyInstanceAttributeResponse
diff --git a/gen/Network/AWS/EC2/ModifyInstancePlacement.hs b/gen/Network/AWS/EC2/ModifyInstancePlacement.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyInstancePlacement.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyInstancePlacement
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Set the instance affinity value for a specific stopped instance and modify the instance tenancy setting.
---
---
--- Instance affinity is disabled by default. When instance affinity is @host@ and it is not associated with a specific Dedicated Host, the next time it is launched it will automatically be associated with the host it lands on. This relationship will persist if the instance is stopped/started, or rebooted.
---
--- You can modify the host ID associated with a stopped instance. If a stopped instance has a new host ID association, the instance will target that host when restarted.
---
--- You can modify the tenancy of a stopped instance with a tenancy of @host@ or @dedicated@ .
---
--- Affinity, hostID, and tenancy are not required parameters, but at least one of them must be specified in the request. Affinity and tenancy can be modified in the same request, but tenancy can only be modified on instances that are stopped.
---
-module Network.AWS.EC2.ModifyInstancePlacement
-    (
-    -- * Creating a Request
-      modifyInstancePlacement
-    , ModifyInstancePlacement
-    -- * Request Lenses
-    , mipAffinity
-    , mipHostId
-    , mipTenancy
-    , mipInstanceId
-
-    -- * Destructuring the Response
-    , modifyInstancePlacementResponse
-    , ModifyInstancePlacementResponse
-    -- * Response Lenses
-    , miprsReturn
-    , miprsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyInstancePlacement.
---
---
---
--- /See:/ 'modifyInstancePlacement' smart constructor.
-data ModifyInstancePlacement = ModifyInstancePlacement'
-    { _mipAffinity   :: !(Maybe Affinity)
-    , _mipHostId     :: !(Maybe Text)
-    , _mipTenancy    :: !(Maybe HostTenancy)
-    , _mipInstanceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyInstancePlacement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mipAffinity' - The new affinity setting for the instance.
---
--- * 'mipHostId' - The ID of the Dedicated Host that the instance will have affinity with.
---
--- * 'mipTenancy' - The tenancy of the instance that you are modifying.
---
--- * 'mipInstanceId' - The ID of the instance that you are modifying.
-modifyInstancePlacement
-    :: Text -- ^ 'mipInstanceId'
-    -> ModifyInstancePlacement
-modifyInstancePlacement pInstanceId_ =
-    ModifyInstancePlacement'
-    { _mipAffinity = Nothing
-    , _mipHostId = Nothing
-    , _mipTenancy = Nothing
-    , _mipInstanceId = pInstanceId_
-    }
-
--- | The new affinity setting for the instance.
-mipAffinity :: Lens' ModifyInstancePlacement (Maybe Affinity)
-mipAffinity = lens _mipAffinity (\ s a -> s{_mipAffinity = a});
-
--- | The ID of the Dedicated Host that the instance will have affinity with.
-mipHostId :: Lens' ModifyInstancePlacement (Maybe Text)
-mipHostId = lens _mipHostId (\ s a -> s{_mipHostId = a});
-
--- | The tenancy of the instance that you are modifying.
-mipTenancy :: Lens' ModifyInstancePlacement (Maybe HostTenancy)
-mipTenancy = lens _mipTenancy (\ s a -> s{_mipTenancy = a});
-
--- | The ID of the instance that you are modifying.
-mipInstanceId :: Lens' ModifyInstancePlacement Text
-mipInstanceId = lens _mipInstanceId (\ s a -> s{_mipInstanceId = a});
-
-instance AWSRequest ModifyInstancePlacement where
-        type Rs ModifyInstancePlacement =
-             ModifyInstancePlacementResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ModifyInstancePlacementResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable ModifyInstancePlacement
-
-instance NFData ModifyInstancePlacement
-
-instance ToHeaders ModifyInstancePlacement where
-        toHeaders = const mempty
-
-instance ToPath ModifyInstancePlacement where
-        toPath = const "/"
-
-instance ToQuery ModifyInstancePlacement where
-        toQuery ModifyInstancePlacement'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifyInstancePlacement" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Affinity" =: _mipAffinity, "HostId" =: _mipHostId,
-               "Tenancy" =: _mipTenancy,
-               "InstanceId" =: _mipInstanceId]
-
--- | Contains the output of ModifyInstancePlacement.
---
---
---
--- /See:/ 'modifyInstancePlacementResponse' smart constructor.
-data ModifyInstancePlacementResponse = ModifyInstancePlacementResponse'
-    { _miprsReturn         :: !(Maybe Bool)
-    , _miprsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyInstancePlacementResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miprsReturn' - Is @true@ if the request succeeds, and an error otherwise.
---
--- * 'miprsResponseStatus' - -- | The response status code.
-modifyInstancePlacementResponse
-    :: Int -- ^ 'miprsResponseStatus'
-    -> ModifyInstancePlacementResponse
-modifyInstancePlacementResponse pResponseStatus_ =
-    ModifyInstancePlacementResponse'
-    { _miprsReturn = Nothing
-    , _miprsResponseStatus = pResponseStatus_
-    }
-
--- | Is @true@ if the request succeeds, and an error otherwise.
-miprsReturn :: Lens' ModifyInstancePlacementResponse (Maybe Bool)
-miprsReturn = lens _miprsReturn (\ s a -> s{_miprsReturn = a});
-
--- | -- | The response status code.
-miprsResponseStatus :: Lens' ModifyInstancePlacementResponse Int
-miprsResponseStatus = lens _miprsResponseStatus (\ s a -> s{_miprsResponseStatus = a});
-
-instance NFData ModifyInstancePlacementResponse
diff --git a/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs b/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyNetworkInterfaceAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the specified network interface attribute. You can specify only one attribute at a time.
---
---
-module Network.AWS.EC2.ModifyNetworkInterfaceAttribute
-    (
-    -- * Creating a Request
-      modifyNetworkInterfaceAttribute
-    , ModifyNetworkInterfaceAttribute
-    -- * Request Lenses
-    , mniaGroups
-    , mniaSourceDestCheck
-    , mniaAttachment
-    , mniaDescription
-    , mniaDryRun
-    , mniaNetworkInterfaceId
-
-    -- * Destructuring the Response
-    , modifyNetworkInterfaceAttributeResponse
-    , ModifyNetworkInterfaceAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyNetworkInterfaceAttribute.
---
---
---
--- /See:/ 'modifyNetworkInterfaceAttribute' smart constructor.
-data ModifyNetworkInterfaceAttribute = ModifyNetworkInterfaceAttribute'
-    { _mniaGroups             :: !(Maybe [Text])
-    , _mniaSourceDestCheck    :: !(Maybe AttributeBooleanValue)
-    , _mniaAttachment         :: !(Maybe NetworkInterfaceAttachmentChanges)
-    , _mniaDescription        :: !(Maybe AttributeValue)
-    , _mniaDryRun             :: !(Maybe Bool)
-    , _mniaNetworkInterfaceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyNetworkInterfaceAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mniaGroups' - Changes the security groups for the network interface. The new set of groups you specify replaces the current set. You must specify at least one group, even if it's just the default security group in the VPC. You must specify the ID of the security group, not the name.
---
--- * 'mniaSourceDestCheck' - Indicates whether source/destination checking is enabled. A value of @true@ means checking is enabled, and @false@ means checking is disabled. This value must be @false@ for a NAT instance to perform NAT. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances> in the /Amazon Virtual Private Cloud User Guide/ .
---
--- * 'mniaAttachment' - Information about the interface attachment. If modifying the 'delete on termination' attribute, you must specify the ID of the interface attachment.
---
--- * 'mniaDescription' - A description for the network interface.
---
--- * 'mniaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'mniaNetworkInterfaceId' - The ID of the network interface.
-modifyNetworkInterfaceAttribute
-    :: Text -- ^ 'mniaNetworkInterfaceId'
-    -> ModifyNetworkInterfaceAttribute
-modifyNetworkInterfaceAttribute pNetworkInterfaceId_ =
-    ModifyNetworkInterfaceAttribute'
-    { _mniaGroups = Nothing
-    , _mniaSourceDestCheck = Nothing
-    , _mniaAttachment = Nothing
-    , _mniaDescription = Nothing
-    , _mniaDryRun = Nothing
-    , _mniaNetworkInterfaceId = pNetworkInterfaceId_
-    }
-
--- | Changes the security groups for the network interface. The new set of groups you specify replaces the current set. You must specify at least one group, even if it's just the default security group in the VPC. You must specify the ID of the security group, not the name.
-mniaGroups :: Lens' ModifyNetworkInterfaceAttribute [Text]
-mniaGroups = lens _mniaGroups (\ s a -> s{_mniaGroups = a}) . _Default . _Coerce;
-
--- | Indicates whether source/destination checking is enabled. A value of @true@ means checking is enabled, and @false@ means checking is disabled. This value must be @false@ for a NAT instance to perform NAT. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances> in the /Amazon Virtual Private Cloud User Guide/ .
-mniaSourceDestCheck :: Lens' ModifyNetworkInterfaceAttribute (Maybe AttributeBooleanValue)
-mniaSourceDestCheck = lens _mniaSourceDestCheck (\ s a -> s{_mniaSourceDestCheck = a});
-
--- | Information about the interface attachment. If modifying the 'delete on termination' attribute, you must specify the ID of the interface attachment.
-mniaAttachment :: Lens' ModifyNetworkInterfaceAttribute (Maybe NetworkInterfaceAttachmentChanges)
-mniaAttachment = lens _mniaAttachment (\ s a -> s{_mniaAttachment = a});
-
--- | A description for the network interface.
-mniaDescription :: Lens' ModifyNetworkInterfaceAttribute (Maybe AttributeValue)
-mniaDescription = lens _mniaDescription (\ s a -> s{_mniaDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-mniaDryRun :: Lens' ModifyNetworkInterfaceAttribute (Maybe Bool)
-mniaDryRun = lens _mniaDryRun (\ s a -> s{_mniaDryRun = a});
-
--- | The ID of the network interface.
-mniaNetworkInterfaceId :: Lens' ModifyNetworkInterfaceAttribute Text
-mniaNetworkInterfaceId = lens _mniaNetworkInterfaceId (\ s a -> s{_mniaNetworkInterfaceId = a});
-
-instance AWSRequest ModifyNetworkInterfaceAttribute
-         where
-        type Rs ModifyNetworkInterfaceAttribute =
-             ModifyNetworkInterfaceAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveNull
-              ModifyNetworkInterfaceAttributeResponse'
-
-instance Hashable ModifyNetworkInterfaceAttribute
-
-instance NFData ModifyNetworkInterfaceAttribute
-
-instance ToHeaders ModifyNetworkInterfaceAttribute
-         where
-        toHeaders = const mempty
-
-instance ToPath ModifyNetworkInterfaceAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifyNetworkInterfaceAttribute
-         where
-        toQuery ModifyNetworkInterfaceAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifyNetworkInterfaceAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQuery
-                 (toQueryList "SecurityGroupId" <$> _mniaGroups),
-               "SourceDestCheck" =: _mniaSourceDestCheck,
-               "Attachment" =: _mniaAttachment,
-               "Description" =: _mniaDescription,
-               "DryRun" =: _mniaDryRun,
-               "NetworkInterfaceId" =: _mniaNetworkInterfaceId]
-
--- | /See:/ 'modifyNetworkInterfaceAttributeResponse' smart constructor.
-data ModifyNetworkInterfaceAttributeResponse =
-    ModifyNetworkInterfaceAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyNetworkInterfaceAttributeResponse' with the minimum fields required to make a request.
---
-modifyNetworkInterfaceAttributeResponse
-    :: ModifyNetworkInterfaceAttributeResponse
-modifyNetworkInterfaceAttributeResponse =
-    ModifyNetworkInterfaceAttributeResponse'
-
-instance NFData
-         ModifyNetworkInterfaceAttributeResponse
diff --git a/gen/Network/AWS/EC2/ModifyReservedInstances.hs b/gen/Network/AWS/EC2/ModifyReservedInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyReservedInstances.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyReservedInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the Availability Zone, instance count, instance type, or network platform (EC2-Classic or EC2-VPC) of your Standard Reserved Instances. The Reserved Instances to be modified must be identical, except for Availability Zone, network platform, and instance type.
---
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html Modifying Reserved Instances> in the Amazon Elastic Compute Cloud User Guide.
---
-module Network.AWS.EC2.ModifyReservedInstances
-    (
-    -- * Creating a Request
-      modifyReservedInstances
-    , ModifyReservedInstances
-    -- * Request Lenses
-    , mriClientToken
-    , mriReservedInstancesIds
-    , mriTargetConfigurations
-
-    -- * Destructuring the Response
-    , modifyReservedInstancesResponse
-    , ModifyReservedInstancesResponse
-    -- * Response Lenses
-    , mrirsReservedInstancesModificationId
-    , mrirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyReservedInstances.
---
---
---
--- /See:/ 'modifyReservedInstances' smart constructor.
-data ModifyReservedInstances = ModifyReservedInstances'
-    { _mriClientToken          :: !(Maybe Text)
-    , _mriReservedInstancesIds :: ![Text]
-    , _mriTargetConfigurations :: ![ReservedInstancesConfiguration]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyReservedInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mriClientToken' - A unique, case-sensitive token you provide to ensure idempotency of your modification request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
---
--- * 'mriReservedInstancesIds' - The IDs of the Reserved Instances to modify.
---
--- * 'mriTargetConfigurations' - The configuration settings for the Reserved Instances to modify.
-modifyReservedInstances
-    :: ModifyReservedInstances
-modifyReservedInstances =
-    ModifyReservedInstances'
-    { _mriClientToken = Nothing
-    , _mriReservedInstancesIds = mempty
-    , _mriTargetConfigurations = mempty
-    }
-
--- | A unique, case-sensitive token you provide to ensure idempotency of your modification request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-mriClientToken :: Lens' ModifyReservedInstances (Maybe Text)
-mriClientToken = lens _mriClientToken (\ s a -> s{_mriClientToken = a});
-
--- | The IDs of the Reserved Instances to modify.
-mriReservedInstancesIds :: Lens' ModifyReservedInstances [Text]
-mriReservedInstancesIds = lens _mriReservedInstancesIds (\ s a -> s{_mriReservedInstancesIds = a}) . _Coerce;
-
--- | The configuration settings for the Reserved Instances to modify.
-mriTargetConfigurations :: Lens' ModifyReservedInstances [ReservedInstancesConfiguration]
-mriTargetConfigurations = lens _mriTargetConfigurations (\ s a -> s{_mriTargetConfigurations = a}) . _Coerce;
-
-instance AWSRequest ModifyReservedInstances where
-        type Rs ModifyReservedInstances =
-             ModifyReservedInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ModifyReservedInstancesResponse' <$>
-                   (x .@? "reservedInstancesModificationId") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable ModifyReservedInstances
-
-instance NFData ModifyReservedInstances
-
-instance ToHeaders ModifyReservedInstances where
-        toHeaders = const mempty
-
-instance ToPath ModifyReservedInstances where
-        toPath = const "/"
-
-instance ToQuery ModifyReservedInstances where
-        toQuery ModifyReservedInstances'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifyReservedInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _mriClientToken,
-               toQueryList "ReservedInstancesId"
-                 _mriReservedInstancesIds,
-               toQueryList
-                 "ReservedInstancesConfigurationSetItemType"
-                 _mriTargetConfigurations]
-
--- | Contains the output of ModifyReservedInstances.
---
---
---
--- /See:/ 'modifyReservedInstancesResponse' smart constructor.
-data ModifyReservedInstancesResponse = ModifyReservedInstancesResponse'
-    { _mrirsReservedInstancesModificationId :: !(Maybe Text)
-    , _mrirsResponseStatus                  :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyReservedInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mrirsReservedInstancesModificationId' - The ID for the modification.
---
--- * 'mrirsResponseStatus' - -- | The response status code.
-modifyReservedInstancesResponse
-    :: Int -- ^ 'mrirsResponseStatus'
-    -> ModifyReservedInstancesResponse
-modifyReservedInstancesResponse pResponseStatus_ =
-    ModifyReservedInstancesResponse'
-    { _mrirsReservedInstancesModificationId = Nothing
-    , _mrirsResponseStatus = pResponseStatus_
-    }
-
--- | The ID for the modification.
-mrirsReservedInstancesModificationId :: Lens' ModifyReservedInstancesResponse (Maybe Text)
-mrirsReservedInstancesModificationId = lens _mrirsReservedInstancesModificationId (\ s a -> s{_mrirsReservedInstancesModificationId = a});
-
--- | -- | The response status code.
-mrirsResponseStatus :: Lens' ModifyReservedInstancesResponse Int
-mrirsResponseStatus = lens _mrirsResponseStatus (\ s a -> s{_mrirsResponseStatus = a});
-
-instance NFData ModifyReservedInstancesResponse
diff --git a/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs b/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs
+++ /dev/null
@@ -1,169 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifySnapshotAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Adds or removes permission settings for the specified snapshot. You may add or remove specified AWS account IDs from a snapshot's list of create volume permissions, but you cannot do both in a single API call. If you need to both add and remove account IDs for a snapshot, you must use multiple API calls.
---
---
--- For more information on modifying snapshot permissions, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html Sharing Snapshots> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.ModifySnapshotAttribute
-    (
-    -- * Creating a Request
-      modifySnapshotAttribute
-    , ModifySnapshotAttribute
-    -- * Request Lenses
-    , msaAttribute
-    , msaCreateVolumePermission
-    , msaUserIds
-    , msaGroupNames
-    , msaOperationType
-    , msaDryRun
-    , msaSnapshotId
-
-    -- * Destructuring the Response
-    , modifySnapshotAttributeResponse
-    , ModifySnapshotAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifySnapshotAttribute.
---
---
---
--- /See:/ 'modifySnapshotAttribute' smart constructor.
-data ModifySnapshotAttribute = ModifySnapshotAttribute'
-    { _msaAttribute              :: !(Maybe SnapshotAttributeName)
-    , _msaCreateVolumePermission :: !(Maybe CreateVolumePermissionModifications)
-    , _msaUserIds                :: !(Maybe [Text])
-    , _msaGroupNames             :: !(Maybe [Text])
-    , _msaOperationType          :: !(Maybe OperationType)
-    , _msaDryRun                 :: !(Maybe Bool)
-    , _msaSnapshotId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifySnapshotAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'msaAttribute' - The snapshot attribute to modify.
---
--- * 'msaCreateVolumePermission' - A JSON representation of the snapshot attribute modification.
---
--- * 'msaUserIds' - The account ID to modify for the snapshot.
---
--- * 'msaGroupNames' - The group to modify for the snapshot.
---
--- * 'msaOperationType' - The type of operation to perform to the attribute.
---
--- * 'msaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'msaSnapshotId' - The ID of the snapshot.
-modifySnapshotAttribute
-    :: Text -- ^ 'msaSnapshotId'
-    -> ModifySnapshotAttribute
-modifySnapshotAttribute pSnapshotId_ =
-    ModifySnapshotAttribute'
-    { _msaAttribute = Nothing
-    , _msaCreateVolumePermission = Nothing
-    , _msaUserIds = Nothing
-    , _msaGroupNames = Nothing
-    , _msaOperationType = Nothing
-    , _msaDryRun = Nothing
-    , _msaSnapshotId = pSnapshotId_
-    }
-
--- | The snapshot attribute to modify.
-msaAttribute :: Lens' ModifySnapshotAttribute (Maybe SnapshotAttributeName)
-msaAttribute = lens _msaAttribute (\ s a -> s{_msaAttribute = a});
-
--- | A JSON representation of the snapshot attribute modification.
-msaCreateVolumePermission :: Lens' ModifySnapshotAttribute (Maybe CreateVolumePermissionModifications)
-msaCreateVolumePermission = lens _msaCreateVolumePermission (\ s a -> s{_msaCreateVolumePermission = a});
-
--- | The account ID to modify for the snapshot.
-msaUserIds :: Lens' ModifySnapshotAttribute [Text]
-msaUserIds = lens _msaUserIds (\ s a -> s{_msaUserIds = a}) . _Default . _Coerce;
-
--- | The group to modify for the snapshot.
-msaGroupNames :: Lens' ModifySnapshotAttribute [Text]
-msaGroupNames = lens _msaGroupNames (\ s a -> s{_msaGroupNames = a}) . _Default . _Coerce;
-
--- | The type of operation to perform to the attribute.
-msaOperationType :: Lens' ModifySnapshotAttribute (Maybe OperationType)
-msaOperationType = lens _msaOperationType (\ s a -> s{_msaOperationType = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-msaDryRun :: Lens' ModifySnapshotAttribute (Maybe Bool)
-msaDryRun = lens _msaDryRun (\ s a -> s{_msaDryRun = a});
-
--- | The ID of the snapshot.
-msaSnapshotId :: Lens' ModifySnapshotAttribute Text
-msaSnapshotId = lens _msaSnapshotId (\ s a -> s{_msaSnapshotId = a});
-
-instance AWSRequest ModifySnapshotAttribute where
-        type Rs ModifySnapshotAttribute =
-             ModifySnapshotAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveNull ModifySnapshotAttributeResponse'
-
-instance Hashable ModifySnapshotAttribute
-
-instance NFData ModifySnapshotAttribute
-
-instance ToHeaders ModifySnapshotAttribute where
-        toHeaders = const mempty
-
-instance ToPath ModifySnapshotAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifySnapshotAttribute where
-        toQuery ModifySnapshotAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifySnapshotAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Attribute" =: _msaAttribute,
-               "CreateVolumePermission" =:
-                 _msaCreateVolumePermission,
-               toQuery (toQueryList "UserId" <$> _msaUserIds),
-               toQuery (toQueryList "UserGroup" <$> _msaGroupNames),
-               "OperationType" =: _msaOperationType,
-               "DryRun" =: _msaDryRun,
-               "SnapshotId" =: _msaSnapshotId]
-
--- | /See:/ 'modifySnapshotAttributeResponse' smart constructor.
-data ModifySnapshotAttributeResponse =
-    ModifySnapshotAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifySnapshotAttributeResponse' with the minimum fields required to make a request.
---
-modifySnapshotAttributeResponse
-    :: ModifySnapshotAttributeResponse
-modifySnapshotAttributeResponse = ModifySnapshotAttributeResponse'
-
-instance NFData ModifySnapshotAttributeResponse
diff --git a/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs b/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifySpotFleetRequest
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the specified Spot fleet request.
---
---
--- While the Spot fleet request is being modified, it is in the @modifying@ state.
---
--- To scale up your Spot fleet, increase its target capacity. The Spot fleet launches the additional Spot instances according to the allocation strategy for the Spot fleet request. If the allocation strategy is @lowestPrice@ , the Spot fleet launches instances using the Spot pool with the lowest price. If the allocation strategy is @diversified@ , the Spot fleet distributes the instances across the Spot pools.
---
--- To scale down your Spot fleet, decrease its target capacity. First, the Spot fleet cancels any open bids that exceed the new target capacity. You can request that the Spot fleet terminate Spot instances until the size of the fleet no longer exceeds the new target capacity. If the allocation strategy is @lowestPrice@ , the Spot fleet terminates the instances with the highest price per unit. If the allocation strategy is @diversified@ , the Spot fleet terminates instances across the Spot pools. Alternatively, you can request that the Spot fleet keep the fleet at its current size, but not replace any Spot instances that are interrupted or that you terminate manually.
---
-module Network.AWS.EC2.ModifySpotFleetRequest
-    (
-    -- * Creating a Request
-      modifySpotFleetRequest
-    , ModifySpotFleetRequest
-    -- * Request Lenses
-    , msfrTargetCapacity
-    , msfrExcessCapacityTerminationPolicy
-    , msfrSpotFleetRequestId
-
-    -- * Destructuring the Response
-    , modifySpotFleetRequestResponse
-    , ModifySpotFleetRequestResponse
-    -- * Response Lenses
-    , msfrrsReturn
-    , msfrrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifySpotFleetRequest.
---
---
---
--- /See:/ 'modifySpotFleetRequest' smart constructor.
-data ModifySpotFleetRequest = ModifySpotFleetRequest'
-    { _msfrTargetCapacity                  :: !(Maybe Int)
-    , _msfrExcessCapacityTerminationPolicy :: !(Maybe ExcessCapacityTerminationPolicy)
-    , _msfrSpotFleetRequestId              :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifySpotFleetRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'msfrTargetCapacity' - The size of the fleet.
---
--- * 'msfrExcessCapacityTerminationPolicy' - Indicates whether running Spot instances should be terminated if the target capacity of the Spot fleet request is decreased below the current size of the Spot fleet.
---
--- * 'msfrSpotFleetRequestId' - The ID of the Spot fleet request.
-modifySpotFleetRequest
-    :: Text -- ^ 'msfrSpotFleetRequestId'
-    -> ModifySpotFleetRequest
-modifySpotFleetRequest pSpotFleetRequestId_ =
-    ModifySpotFleetRequest'
-    { _msfrTargetCapacity = Nothing
-    , _msfrExcessCapacityTerminationPolicy = Nothing
-    , _msfrSpotFleetRequestId = pSpotFleetRequestId_
-    }
-
--- | The size of the fleet.
-msfrTargetCapacity :: Lens' ModifySpotFleetRequest (Maybe Int)
-msfrTargetCapacity = lens _msfrTargetCapacity (\ s a -> s{_msfrTargetCapacity = a});
-
--- | Indicates whether running Spot instances should be terminated if the target capacity of the Spot fleet request is decreased below the current size of the Spot fleet.
-msfrExcessCapacityTerminationPolicy :: Lens' ModifySpotFleetRequest (Maybe ExcessCapacityTerminationPolicy)
-msfrExcessCapacityTerminationPolicy = lens _msfrExcessCapacityTerminationPolicy (\ s a -> s{_msfrExcessCapacityTerminationPolicy = a});
-
--- | The ID of the Spot fleet request.
-msfrSpotFleetRequestId :: Lens' ModifySpotFleetRequest Text
-msfrSpotFleetRequestId = lens _msfrSpotFleetRequestId (\ s a -> s{_msfrSpotFleetRequestId = a});
-
-instance AWSRequest ModifySpotFleetRequest where
-        type Rs ModifySpotFleetRequest =
-             ModifySpotFleetRequestResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ModifySpotFleetRequestResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable ModifySpotFleetRequest
-
-instance NFData ModifySpotFleetRequest
-
-instance ToHeaders ModifySpotFleetRequest where
-        toHeaders = const mempty
-
-instance ToPath ModifySpotFleetRequest where
-        toPath = const "/"
-
-instance ToQuery ModifySpotFleetRequest where
-        toQuery ModifySpotFleetRequest'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifySpotFleetRequest" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "TargetCapacity" =: _msfrTargetCapacity,
-               "ExcessCapacityTerminationPolicy" =:
-                 _msfrExcessCapacityTerminationPolicy,
-               "SpotFleetRequestId" =: _msfrSpotFleetRequestId]
-
--- | Contains the output of ModifySpotFleetRequest.
---
---
---
--- /See:/ 'modifySpotFleetRequestResponse' smart constructor.
-data ModifySpotFleetRequestResponse = ModifySpotFleetRequestResponse'
-    { _msfrrsReturn         :: !(Maybe Bool)
-    , _msfrrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifySpotFleetRequestResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'msfrrsReturn' - Is @true@ if the request succeeds, and an error otherwise.
---
--- * 'msfrrsResponseStatus' - -- | The response status code.
-modifySpotFleetRequestResponse
-    :: Int -- ^ 'msfrrsResponseStatus'
-    -> ModifySpotFleetRequestResponse
-modifySpotFleetRequestResponse pResponseStatus_ =
-    ModifySpotFleetRequestResponse'
-    { _msfrrsReturn = Nothing
-    , _msfrrsResponseStatus = pResponseStatus_
-    }
-
--- | Is @true@ if the request succeeds, and an error otherwise.
-msfrrsReturn :: Lens' ModifySpotFleetRequestResponse (Maybe Bool)
-msfrrsReturn = lens _msfrrsReturn (\ s a -> s{_msfrrsReturn = a});
-
--- | -- | The response status code.
-msfrrsResponseStatus :: Lens' ModifySpotFleetRequestResponse Int
-msfrrsResponseStatus = lens _msfrrsResponseStatus (\ s a -> s{_msfrrsResponseStatus = a});
-
-instance NFData ModifySpotFleetRequestResponse
diff --git a/gen/Network/AWS/EC2/ModifySubnetAttribute.hs b/gen/Network/AWS/EC2/ModifySubnetAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifySubnetAttribute.hs
+++ /dev/null
@@ -1,125 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifySubnetAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies a subnet attribute. You can only modify one attribute at a time.
---
---
-module Network.AWS.EC2.ModifySubnetAttribute
-    (
-    -- * Creating a Request
-      modifySubnetAttribute
-    , ModifySubnetAttribute
-    -- * Request Lenses
-    , msaAssignIPv6AddressOnCreation
-    , msaMapPublicIPOnLaunch
-    , msaSubnetId
-
-    -- * Destructuring the Response
-    , modifySubnetAttributeResponse
-    , ModifySubnetAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifySubnetAttribute.
---
---
---
--- /See:/ 'modifySubnetAttribute' smart constructor.
-data ModifySubnetAttribute = ModifySubnetAttribute'
-    { _msaAssignIPv6AddressOnCreation :: !(Maybe AttributeBooleanValue)
-    , _msaMapPublicIPOnLaunch         :: !(Maybe AttributeBooleanValue)
-    , _msaSubnetId                    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifySubnetAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'msaAssignIPv6AddressOnCreation' - Specify @true@ to indicate that network interfaces created in the specified subnet should be assigned an IPv6 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives an IPv6 address).
---
--- * 'msaMapPublicIPOnLaunch' - Specify @true@ to indicate that network interfaces created in the specified subnet should be assigned a public IPv4 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives a public IPv4 address).
---
--- * 'msaSubnetId' - The ID of the subnet.
-modifySubnetAttribute
-    :: Text -- ^ 'msaSubnetId'
-    -> ModifySubnetAttribute
-modifySubnetAttribute pSubnetId_ =
-    ModifySubnetAttribute'
-    { _msaAssignIPv6AddressOnCreation = Nothing
-    , _msaMapPublicIPOnLaunch = Nothing
-    , _msaSubnetId = pSubnetId_
-    }
-
--- | Specify @true@ to indicate that network interfaces created in the specified subnet should be assigned an IPv6 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives an IPv6 address).
-msaAssignIPv6AddressOnCreation :: Lens' ModifySubnetAttribute (Maybe AttributeBooleanValue)
-msaAssignIPv6AddressOnCreation = lens _msaAssignIPv6AddressOnCreation (\ s a -> s{_msaAssignIPv6AddressOnCreation = a});
-
--- | Specify @true@ to indicate that network interfaces created in the specified subnet should be assigned a public IPv4 address. This includes a network interface that's created when launching an instance into the subnet (the instance therefore receives a public IPv4 address).
-msaMapPublicIPOnLaunch :: Lens' ModifySubnetAttribute (Maybe AttributeBooleanValue)
-msaMapPublicIPOnLaunch = lens _msaMapPublicIPOnLaunch (\ s a -> s{_msaMapPublicIPOnLaunch = a});
-
--- | The ID of the subnet.
-msaSubnetId :: Lens' ModifySubnetAttribute Text
-msaSubnetId = lens _msaSubnetId (\ s a -> s{_msaSubnetId = a});
-
-instance AWSRequest ModifySubnetAttribute where
-        type Rs ModifySubnetAttribute =
-             ModifySubnetAttributeResponse
-        request = postQuery ec2
-        response = receiveNull ModifySubnetAttributeResponse'
-
-instance Hashable ModifySubnetAttribute
-
-instance NFData ModifySubnetAttribute
-
-instance ToHeaders ModifySubnetAttribute where
-        toHeaders = const mempty
-
-instance ToPath ModifySubnetAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifySubnetAttribute where
-        toQuery ModifySubnetAttribute'{..}
-          = mconcat
-              ["Action" =: ("ModifySubnetAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AssignIpv6AddressOnCreation" =:
-                 _msaAssignIPv6AddressOnCreation,
-               "MapPublicIpOnLaunch" =: _msaMapPublicIPOnLaunch,
-               "SubnetId" =: _msaSubnetId]
-
--- | /See:/ 'modifySubnetAttributeResponse' smart constructor.
-data ModifySubnetAttributeResponse =
-    ModifySubnetAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifySubnetAttributeResponse' with the minimum fields required to make a request.
---
-modifySubnetAttributeResponse
-    :: ModifySubnetAttributeResponse
-modifySubnetAttributeResponse = ModifySubnetAttributeResponse'
-
-instance NFData ModifySubnetAttributeResponse
diff --git a/gen/Network/AWS/EC2/ModifyVPCAttribute.hs b/gen/Network/AWS/EC2/ModifyVPCAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyVPCAttribute.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyVPCAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the specified attribute of the specified VPC.
---
---
-module Network.AWS.EC2.ModifyVPCAttribute
-    (
-    -- * Creating a Request
-      modifyVPCAttribute
-    , ModifyVPCAttribute
-    -- * Request Lenses
-    , mvaEnableDNSHostnames
-    , mvaEnableDNSSupport
-    , mvaVPCId
-
-    -- * Destructuring the Response
-    , modifyVPCAttributeResponse
-    , ModifyVPCAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyVpcAttribute.
---
---
---
--- /See:/ 'modifyVPCAttribute' smart constructor.
-data ModifyVPCAttribute = ModifyVPCAttribute'
-    { _mvaEnableDNSHostnames :: !(Maybe AttributeBooleanValue)
-    , _mvaEnableDNSSupport   :: !(Maybe AttributeBooleanValue)
-    , _mvaVPCId              :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVPCAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mvaEnableDNSHostnames' - Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not. You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute. You can only enable DNS hostnames if you've enabled DNS support.
---
--- * 'mvaEnableDNSSupport' - Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range "plus two" will succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled. You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute.
---
--- * 'mvaVPCId' - The ID of the VPC.
-modifyVPCAttribute
-    :: Text -- ^ 'mvaVPCId'
-    -> ModifyVPCAttribute
-modifyVPCAttribute pVPCId_ =
-    ModifyVPCAttribute'
-    { _mvaEnableDNSHostnames = Nothing
-    , _mvaEnableDNSSupport = Nothing
-    , _mvaVPCId = pVPCId_
-    }
-
--- | Indicates whether the instances launched in the VPC get DNS hostnames. If enabled, instances in the VPC get DNS hostnames; otherwise, they do not. You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute. You can only enable DNS hostnames if you've enabled DNS support.
-mvaEnableDNSHostnames :: Lens' ModifyVPCAttribute (Maybe AttributeBooleanValue)
-mvaEnableDNSHostnames = lens _mvaEnableDNSHostnames (\ s a -> s{_mvaEnableDNSHostnames = a});
-
--- | Indicates whether the DNS resolution is supported for the VPC. If enabled, queries to the Amazon provided DNS server at the 169.254.169.253 IP address, or the reserved IP address at the base of the VPC network range "plus two" will succeed. If disabled, the Amazon provided DNS service in the VPC that resolves public DNS hostnames to IP addresses is not enabled. You cannot modify the DNS resolution and DNS hostnames attributes in the same request. Use separate requests for each attribute.
-mvaEnableDNSSupport :: Lens' ModifyVPCAttribute (Maybe AttributeBooleanValue)
-mvaEnableDNSSupport = lens _mvaEnableDNSSupport (\ s a -> s{_mvaEnableDNSSupport = a});
-
--- | The ID of the VPC.
-mvaVPCId :: Lens' ModifyVPCAttribute Text
-mvaVPCId = lens _mvaVPCId (\ s a -> s{_mvaVPCId = a});
-
-instance AWSRequest ModifyVPCAttribute where
-        type Rs ModifyVPCAttribute =
-             ModifyVPCAttributeResponse
-        request = postQuery ec2
-        response = receiveNull ModifyVPCAttributeResponse'
-
-instance Hashable ModifyVPCAttribute
-
-instance NFData ModifyVPCAttribute
-
-instance ToHeaders ModifyVPCAttribute where
-        toHeaders = const mempty
-
-instance ToPath ModifyVPCAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifyVPCAttribute where
-        toQuery ModifyVPCAttribute'{..}
-          = mconcat
-              ["Action" =: ("ModifyVpcAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "EnableDnsHostnames" =: _mvaEnableDNSHostnames,
-               "EnableDnsSupport" =: _mvaEnableDNSSupport,
-               "VpcId" =: _mvaVPCId]
-
--- | /See:/ 'modifyVPCAttributeResponse' smart constructor.
-data ModifyVPCAttributeResponse =
-    ModifyVPCAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVPCAttributeResponse' with the minimum fields required to make a request.
---
-modifyVPCAttributeResponse
-    :: ModifyVPCAttributeResponse
-modifyVPCAttributeResponse = ModifyVPCAttributeResponse'
-
-instance NFData ModifyVPCAttributeResponse
diff --git a/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs b/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyVPCEndpoint
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies attributes of a specified VPC endpoint. You can modify the policy associated with the endpoint, and you can add and remove route tables associated with the endpoint.
---
---
-module Network.AWS.EC2.ModifyVPCEndpoint
-    (
-    -- * Creating a Request
-      modifyVPCEndpoint
-    , ModifyVPCEndpoint
-    -- * Request Lenses
-    , mvePolicyDocument
-    , mveRemoveRouteTableIds
-    , mveResetPolicy
-    , mveAddRouteTableIds
-    , mveDryRun
-    , mveVPCEndpointId
-
-    -- * Destructuring the Response
-    , modifyVPCEndpointResponse
-    , ModifyVPCEndpointResponse
-    -- * Response Lenses
-    , mversReturn
-    , mversResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyVpcEndpoint.
---
---
---
--- /See:/ 'modifyVPCEndpoint' smart constructor.
-data ModifyVPCEndpoint = ModifyVPCEndpoint'
-    { _mvePolicyDocument      :: !(Maybe Text)
-    , _mveRemoveRouteTableIds :: !(Maybe [Text])
-    , _mveResetPolicy         :: !(Maybe Bool)
-    , _mveAddRouteTableIds    :: !(Maybe [Text])
-    , _mveDryRun              :: !(Maybe Bool)
-    , _mveVPCEndpointId       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVPCEndpoint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mvePolicyDocument' - A policy document to attach to the endpoint. The policy must be in valid JSON format.
---
--- * 'mveRemoveRouteTableIds' - One or more route table IDs to disassociate from the endpoint.
---
--- * 'mveResetPolicy' - Specify @true@ to reset the policy document to the default policy. The default policy allows access to the service.
---
--- * 'mveAddRouteTableIds' - One or more route tables IDs to associate with the endpoint.
---
--- * 'mveDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'mveVPCEndpointId' - The ID of the endpoint.
-modifyVPCEndpoint
-    :: Text -- ^ 'mveVPCEndpointId'
-    -> ModifyVPCEndpoint
-modifyVPCEndpoint pVPCEndpointId_ =
-    ModifyVPCEndpoint'
-    { _mvePolicyDocument = Nothing
-    , _mveRemoveRouteTableIds = Nothing
-    , _mveResetPolicy = Nothing
-    , _mveAddRouteTableIds = Nothing
-    , _mveDryRun = Nothing
-    , _mveVPCEndpointId = pVPCEndpointId_
-    }
-
--- | A policy document to attach to the endpoint. The policy must be in valid JSON format.
-mvePolicyDocument :: Lens' ModifyVPCEndpoint (Maybe Text)
-mvePolicyDocument = lens _mvePolicyDocument (\ s a -> s{_mvePolicyDocument = a});
-
--- | One or more route table IDs to disassociate from the endpoint.
-mveRemoveRouteTableIds :: Lens' ModifyVPCEndpoint [Text]
-mveRemoveRouteTableIds = lens _mveRemoveRouteTableIds (\ s a -> s{_mveRemoveRouteTableIds = a}) . _Default . _Coerce;
-
--- | Specify @true@ to reset the policy document to the default policy. The default policy allows access to the service.
-mveResetPolicy :: Lens' ModifyVPCEndpoint (Maybe Bool)
-mveResetPolicy = lens _mveResetPolicy (\ s a -> s{_mveResetPolicy = a});
-
--- | One or more route tables IDs to associate with the endpoint.
-mveAddRouteTableIds :: Lens' ModifyVPCEndpoint [Text]
-mveAddRouteTableIds = lens _mveAddRouteTableIds (\ s a -> s{_mveAddRouteTableIds = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-mveDryRun :: Lens' ModifyVPCEndpoint (Maybe Bool)
-mveDryRun = lens _mveDryRun (\ s a -> s{_mveDryRun = a});
-
--- | The ID of the endpoint.
-mveVPCEndpointId :: Lens' ModifyVPCEndpoint Text
-mveVPCEndpointId = lens _mveVPCEndpointId (\ s a -> s{_mveVPCEndpointId = a});
-
-instance AWSRequest ModifyVPCEndpoint where
-        type Rs ModifyVPCEndpoint = ModifyVPCEndpointResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ModifyVPCEndpointResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable ModifyVPCEndpoint
-
-instance NFData ModifyVPCEndpoint
-
-instance ToHeaders ModifyVPCEndpoint where
-        toHeaders = const mempty
-
-instance ToPath ModifyVPCEndpoint where
-        toPath = const "/"
-
-instance ToQuery ModifyVPCEndpoint where
-        toQuery ModifyVPCEndpoint'{..}
-          = mconcat
-              ["Action" =: ("ModifyVpcEndpoint" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "PolicyDocument" =: _mvePolicyDocument,
-               toQuery
-                 (toQueryList "RemoveRouteTableId" <$>
-                    _mveRemoveRouteTableIds),
-               "ResetPolicy" =: _mveResetPolicy,
-               toQuery
-                 (toQueryList "AddRouteTableId" <$>
-                    _mveAddRouteTableIds),
-               "DryRun" =: _mveDryRun,
-               "VpcEndpointId" =: _mveVPCEndpointId]
-
--- | Contains the output of ModifyVpcEndpoint.
---
---
---
--- /See:/ 'modifyVPCEndpointResponse' smart constructor.
-data ModifyVPCEndpointResponse = ModifyVPCEndpointResponse'
-    { _mversReturn         :: !(Maybe Bool)
-    , _mversResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVPCEndpointResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mversReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'mversResponseStatus' - -- | The response status code.
-modifyVPCEndpointResponse
-    :: Int -- ^ 'mversResponseStatus'
-    -> ModifyVPCEndpointResponse
-modifyVPCEndpointResponse pResponseStatus_ =
-    ModifyVPCEndpointResponse'
-    { _mversReturn = Nothing
-    , _mversResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-mversReturn :: Lens' ModifyVPCEndpointResponse (Maybe Bool)
-mversReturn = lens _mversReturn (\ s a -> s{_mversReturn = a});
-
--- | -- | The response status code.
-mversResponseStatus :: Lens' ModifyVPCEndpointResponse Int
-mversResponseStatus = lens _mversResponseStatus (\ s a -> s{_mversResponseStatus = a});
-
-instance NFData ModifyVPCEndpointResponse
diff --git a/gen/Network/AWS/EC2/ModifyVPCPeeringConnectionOptions.hs b/gen/Network/AWS/EC2/ModifyVPCPeeringConnectionOptions.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyVPCPeeringConnectionOptions.hs
+++ /dev/null
@@ -1,186 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyVPCPeeringConnectionOptions
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies the VPC peering connection options on one side of a VPC peering connection. You can do the following:
---
---
---     * Enable/disable communication over the peering connection between an EC2-Classic instance that's linked to your VPC (using ClassicLink) and instances in the peer VPC.
---
---     * Enable/disable communication over the peering connection between instances in your VPC and an EC2-Classic instance that's linked to the peer VPC.
---
---     * Enable/disable a local VPC to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC.
---
---
---
--- If the peered VPCs are in different accounts, each owner must initiate a separate request to modify the peering connection options, depending on whether their VPC was the requester or accepter for the VPC peering connection. If the peered VPCs are in the same account, you can modify the requester and accepter options in the same request. To confirm which VPC is the accepter and requester for a VPC peering connection, use the 'DescribeVpcPeeringConnections' command.
---
-module Network.AWS.EC2.ModifyVPCPeeringConnectionOptions
-    (
-    -- * Creating a Request
-      modifyVPCPeeringConnectionOptions
-    , ModifyVPCPeeringConnectionOptions
-    -- * Request Lenses
-    , mvpcoRequesterPeeringConnectionOptions
-    , mvpcoAccepterPeeringConnectionOptions
-    , mvpcoDryRun
-    , mvpcoVPCPeeringConnectionId
-
-    -- * Destructuring the Response
-    , modifyVPCPeeringConnectionOptionsResponse
-    , ModifyVPCPeeringConnectionOptionsResponse
-    -- * Response Lenses
-    , mvpcorsRequesterPeeringConnectionOptions
-    , mvpcorsAccepterPeeringConnectionOptions
-    , mvpcorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'modifyVPCPeeringConnectionOptions' smart constructor.
-data ModifyVPCPeeringConnectionOptions = ModifyVPCPeeringConnectionOptions'
-    { _mvpcoRequesterPeeringConnectionOptions :: !(Maybe PeeringConnectionOptionsRequest)
-    , _mvpcoAccepterPeeringConnectionOptions  :: !(Maybe PeeringConnectionOptionsRequest)
-    , _mvpcoDryRun                            :: !(Maybe Bool)
-    , _mvpcoVPCPeeringConnectionId            :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVPCPeeringConnectionOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mvpcoRequesterPeeringConnectionOptions' - The VPC peering connection options for the requester VPC.
---
--- * 'mvpcoAccepterPeeringConnectionOptions' - The VPC peering connection options for the accepter VPC.
---
--- * 'mvpcoDryRun' - Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'mvpcoVPCPeeringConnectionId' - The ID of the VPC peering connection.
-modifyVPCPeeringConnectionOptions
-    :: Text -- ^ 'mvpcoVPCPeeringConnectionId'
-    -> ModifyVPCPeeringConnectionOptions
-modifyVPCPeeringConnectionOptions pVPCPeeringConnectionId_ =
-    ModifyVPCPeeringConnectionOptions'
-    { _mvpcoRequesterPeeringConnectionOptions = Nothing
-    , _mvpcoAccepterPeeringConnectionOptions = Nothing
-    , _mvpcoDryRun = Nothing
-    , _mvpcoVPCPeeringConnectionId = pVPCPeeringConnectionId_
-    }
-
--- | The VPC peering connection options for the requester VPC.
-mvpcoRequesterPeeringConnectionOptions :: Lens' ModifyVPCPeeringConnectionOptions (Maybe PeeringConnectionOptionsRequest)
-mvpcoRequesterPeeringConnectionOptions = lens _mvpcoRequesterPeeringConnectionOptions (\ s a -> s{_mvpcoRequesterPeeringConnectionOptions = a});
-
--- | The VPC peering connection options for the accepter VPC.
-mvpcoAccepterPeeringConnectionOptions :: Lens' ModifyVPCPeeringConnectionOptions (Maybe PeeringConnectionOptionsRequest)
-mvpcoAccepterPeeringConnectionOptions = lens _mvpcoAccepterPeeringConnectionOptions (\ s a -> s{_mvpcoAccepterPeeringConnectionOptions = a});
-
--- | Checks whether you have the required permissions for the operation, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-mvpcoDryRun :: Lens' ModifyVPCPeeringConnectionOptions (Maybe Bool)
-mvpcoDryRun = lens _mvpcoDryRun (\ s a -> s{_mvpcoDryRun = a});
-
--- | The ID of the VPC peering connection.
-mvpcoVPCPeeringConnectionId :: Lens' ModifyVPCPeeringConnectionOptions Text
-mvpcoVPCPeeringConnectionId = lens _mvpcoVPCPeeringConnectionId (\ s a -> s{_mvpcoVPCPeeringConnectionId = a});
-
-instance AWSRequest ModifyVPCPeeringConnectionOptions
-         where
-        type Rs ModifyVPCPeeringConnectionOptions =
-             ModifyVPCPeeringConnectionOptionsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ModifyVPCPeeringConnectionOptionsResponse' <$>
-                   (x .@? "requesterPeeringConnectionOptions") <*>
-                     (x .@? "accepterPeeringConnectionOptions")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ModifyVPCPeeringConnectionOptions
-
-instance NFData ModifyVPCPeeringConnectionOptions
-
-instance ToHeaders ModifyVPCPeeringConnectionOptions
-         where
-        toHeaders = const mempty
-
-instance ToPath ModifyVPCPeeringConnectionOptions
-         where
-        toPath = const "/"
-
-instance ToQuery ModifyVPCPeeringConnectionOptions
-         where
-        toQuery ModifyVPCPeeringConnectionOptions'{..}
-          = mconcat
-              ["Action" =:
-                 ("ModifyVpcPeeringConnectionOptions" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "RequesterPeeringConnectionOptions" =:
-                 _mvpcoRequesterPeeringConnectionOptions,
-               "AccepterPeeringConnectionOptions" =:
-                 _mvpcoAccepterPeeringConnectionOptions,
-               "DryRun" =: _mvpcoDryRun,
-               "VpcPeeringConnectionId" =:
-                 _mvpcoVPCPeeringConnectionId]
-
--- | /See:/ 'modifyVPCPeeringConnectionOptionsResponse' smart constructor.
-data ModifyVPCPeeringConnectionOptionsResponse = ModifyVPCPeeringConnectionOptionsResponse'
-    { _mvpcorsRequesterPeeringConnectionOptions :: !(Maybe PeeringConnectionOptions)
-    , _mvpcorsAccepterPeeringConnectionOptions  :: !(Maybe PeeringConnectionOptions)
-    , _mvpcorsResponseStatus                    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVPCPeeringConnectionOptionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mvpcorsRequesterPeeringConnectionOptions' - Information about the VPC peering connection options for the requester VPC.
---
--- * 'mvpcorsAccepterPeeringConnectionOptions' - Information about the VPC peering connection options for the accepter VPC.
---
--- * 'mvpcorsResponseStatus' - -- | The response status code.
-modifyVPCPeeringConnectionOptionsResponse
-    :: Int -- ^ 'mvpcorsResponseStatus'
-    -> ModifyVPCPeeringConnectionOptionsResponse
-modifyVPCPeeringConnectionOptionsResponse pResponseStatus_ =
-    ModifyVPCPeeringConnectionOptionsResponse'
-    { _mvpcorsRequesterPeeringConnectionOptions = Nothing
-    , _mvpcorsAccepterPeeringConnectionOptions = Nothing
-    , _mvpcorsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the VPC peering connection options for the requester VPC.
-mvpcorsRequesterPeeringConnectionOptions :: Lens' ModifyVPCPeeringConnectionOptionsResponse (Maybe PeeringConnectionOptions)
-mvpcorsRequesterPeeringConnectionOptions = lens _mvpcorsRequesterPeeringConnectionOptions (\ s a -> s{_mvpcorsRequesterPeeringConnectionOptions = a});
-
--- | Information about the VPC peering connection options for the accepter VPC.
-mvpcorsAccepterPeeringConnectionOptions :: Lens' ModifyVPCPeeringConnectionOptionsResponse (Maybe PeeringConnectionOptions)
-mvpcorsAccepterPeeringConnectionOptions = lens _mvpcorsAccepterPeeringConnectionOptions (\ s a -> s{_mvpcorsAccepterPeeringConnectionOptions = a});
-
--- | -- | The response status code.
-mvpcorsResponseStatus :: Lens' ModifyVPCPeeringConnectionOptionsResponse Int
-mvpcorsResponseStatus = lens _mvpcorsResponseStatus (\ s a -> s{_mvpcorsResponseStatus = a});
-
-instance NFData
-         ModifyVPCPeeringConnectionOptionsResponse
diff --git a/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs b/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs
+++ /dev/null
@@ -1,127 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ModifyVolumeAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Modifies a volume attribute.
---
---
--- By default, all I/O operations for the volume are suspended when the data on the volume is determined to be potentially inconsistent, to prevent undetectable, latent data corruption. The I/O access to the volume can be resumed by first enabling I/O access and then checking the data consistency on your volume.
---
--- You can change the default behavior to resume I/O operations. We recommend that you change this only for boot volumes or for volumes that are stateless or disposable.
---
-module Network.AWS.EC2.ModifyVolumeAttribute
-    (
-    -- * Creating a Request
-      modifyVolumeAttribute
-    , ModifyVolumeAttribute
-    -- * Request Lenses
-    , mvaAutoEnableIO
-    , mvaDryRun
-    , mvaVolumeId
-
-    -- * Destructuring the Response
-    , modifyVolumeAttributeResponse
-    , ModifyVolumeAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ModifyVolumeAttribute.
---
---
---
--- /See:/ 'modifyVolumeAttribute' smart constructor.
-data ModifyVolumeAttribute = ModifyVolumeAttribute'
-    { _mvaAutoEnableIO :: !(Maybe AttributeBooleanValue)
-    , _mvaDryRun       :: !(Maybe Bool)
-    , _mvaVolumeId     :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVolumeAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mvaAutoEnableIO' - Indicates whether the volume should be auto-enabled for I/O operations.
---
--- * 'mvaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'mvaVolumeId' - The ID of the volume.
-modifyVolumeAttribute
-    :: Text -- ^ 'mvaVolumeId'
-    -> ModifyVolumeAttribute
-modifyVolumeAttribute pVolumeId_ =
-    ModifyVolumeAttribute'
-    { _mvaAutoEnableIO = Nothing
-    , _mvaDryRun = Nothing
-    , _mvaVolumeId = pVolumeId_
-    }
-
--- | Indicates whether the volume should be auto-enabled for I/O operations.
-mvaAutoEnableIO :: Lens' ModifyVolumeAttribute (Maybe AttributeBooleanValue)
-mvaAutoEnableIO = lens _mvaAutoEnableIO (\ s a -> s{_mvaAutoEnableIO = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-mvaDryRun :: Lens' ModifyVolumeAttribute (Maybe Bool)
-mvaDryRun = lens _mvaDryRun (\ s a -> s{_mvaDryRun = a});
-
--- | The ID of the volume.
-mvaVolumeId :: Lens' ModifyVolumeAttribute Text
-mvaVolumeId = lens _mvaVolumeId (\ s a -> s{_mvaVolumeId = a});
-
-instance AWSRequest ModifyVolumeAttribute where
-        type Rs ModifyVolumeAttribute =
-             ModifyVolumeAttributeResponse
-        request = postQuery ec2
-        response = receiveNull ModifyVolumeAttributeResponse'
-
-instance Hashable ModifyVolumeAttribute
-
-instance NFData ModifyVolumeAttribute
-
-instance ToHeaders ModifyVolumeAttribute where
-        toHeaders = const mempty
-
-instance ToPath ModifyVolumeAttribute where
-        toPath = const "/"
-
-instance ToQuery ModifyVolumeAttribute where
-        toQuery ModifyVolumeAttribute'{..}
-          = mconcat
-              ["Action" =: ("ModifyVolumeAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AutoEnableIO" =: _mvaAutoEnableIO,
-               "DryRun" =: _mvaDryRun, "VolumeId" =: _mvaVolumeId]
-
--- | /See:/ 'modifyVolumeAttributeResponse' smart constructor.
-data ModifyVolumeAttributeResponse =
-    ModifyVolumeAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ModifyVolumeAttributeResponse' with the minimum fields required to make a request.
---
-modifyVolumeAttributeResponse
-    :: ModifyVolumeAttributeResponse
-modifyVolumeAttributeResponse = ModifyVolumeAttributeResponse'
-
-instance NFData ModifyVolumeAttributeResponse
diff --git a/gen/Network/AWS/EC2/MonitorInstances.hs b/gen/Network/AWS/EC2/MonitorInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/MonitorInstances.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.MonitorInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Enables detailed monitoring for a running instance. Otherwise, basic monitoring is enabled. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html Monitoring Your Instances and Volumes> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- To disable detailed monitoring, see .
---
-module Network.AWS.EC2.MonitorInstances
-    (
-    -- * Creating a Request
-      monitorInstances
-    , MonitorInstances
-    -- * Request Lenses
-    , miDryRun
-    , miInstanceIds
-
-    -- * Destructuring the Response
-    , monitorInstancesResponse
-    , MonitorInstancesResponse
-    -- * Response Lenses
-    , mirsInstanceMonitorings
-    , mirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for MonitorInstances.
---
---
---
--- /See:/ 'monitorInstances' smart constructor.
-data MonitorInstances = MonitorInstances'
-    { _miDryRun      :: !(Maybe Bool)
-    , _miInstanceIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MonitorInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'miDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'miInstanceIds' - One or more instance IDs.
-monitorInstances
-    :: MonitorInstances
-monitorInstances =
-    MonitorInstances'
-    { _miDryRun = Nothing
-    , _miInstanceIds = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-miDryRun :: Lens' MonitorInstances (Maybe Bool)
-miDryRun = lens _miDryRun (\ s a -> s{_miDryRun = a});
-
--- | One or more instance IDs.
-miInstanceIds :: Lens' MonitorInstances [Text]
-miInstanceIds = lens _miInstanceIds (\ s a -> s{_miInstanceIds = a}) . _Coerce;
-
-instance AWSRequest MonitorInstances where
-        type Rs MonitorInstances = MonitorInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 MonitorInstancesResponse' <$>
-                   (x .@? "instancesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable MonitorInstances
-
-instance NFData MonitorInstances
-
-instance ToHeaders MonitorInstances where
-        toHeaders = const mempty
-
-instance ToPath MonitorInstances where
-        toPath = const "/"
-
-instance ToQuery MonitorInstances where
-        toQuery MonitorInstances'{..}
-          = mconcat
-              ["Action" =: ("MonitorInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _miDryRun,
-               toQueryList "InstanceId" _miInstanceIds]
-
--- | Contains the output of MonitorInstances.
---
---
---
--- /See:/ 'monitorInstancesResponse' smart constructor.
-data MonitorInstancesResponse = MonitorInstancesResponse'
-    { _mirsInstanceMonitorings :: !(Maybe [InstanceMonitoring])
-    , _mirsResponseStatus      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MonitorInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mirsInstanceMonitorings' - The monitoring information.
---
--- * 'mirsResponseStatus' - -- | The response status code.
-monitorInstancesResponse
-    :: Int -- ^ 'mirsResponseStatus'
-    -> MonitorInstancesResponse
-monitorInstancesResponse pResponseStatus_ =
-    MonitorInstancesResponse'
-    { _mirsInstanceMonitorings = Nothing
-    , _mirsResponseStatus = pResponseStatus_
-    }
-
--- | The monitoring information.
-mirsInstanceMonitorings :: Lens' MonitorInstancesResponse [InstanceMonitoring]
-mirsInstanceMonitorings = lens _mirsInstanceMonitorings (\ s a -> s{_mirsInstanceMonitorings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-mirsResponseStatus :: Lens' MonitorInstancesResponse Int
-mirsResponseStatus = lens _mirsResponseStatus (\ s a -> s{_mirsResponseStatus = a});
-
-instance NFData MonitorInstancesResponse
diff --git a/gen/Network/AWS/EC2/MoveAddressToVPC.hs b/gen/Network/AWS/EC2/MoveAddressToVPC.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/MoveAddressToVPC.hs
+++ /dev/null
@@ -1,152 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.MoveAddressToVPC
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC platform. The Elastic IP address must be allocated to your account for more than 24 hours, and it must not be associated with an instance. After the Elastic IP address is moved, it is no longer available for use in the EC2-Classic platform, unless you move it back using the 'RestoreAddressToClassic' request. You cannot move an Elastic IP address that was originally allocated for use in the EC2-VPC platform to the EC2-Classic platform.
---
---
-module Network.AWS.EC2.MoveAddressToVPC
-    (
-    -- * Creating a Request
-      moveAddressToVPC
-    , MoveAddressToVPC
-    -- * Request Lenses
-    , matvDryRun
-    , matvPublicIP
-
-    -- * Destructuring the Response
-    , moveAddressToVPCResponse
-    , MoveAddressToVPCResponse
-    -- * Response Lenses
-    , matvrsStatus
-    , matvrsAllocationId
-    , matvrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for MoveAddressToVpc.
---
---
---
--- /See:/ 'moveAddressToVPC' smart constructor.
-data MoveAddressToVPC = MoveAddressToVPC'
-    { _matvDryRun   :: !(Maybe Bool)
-    , _matvPublicIP :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MoveAddressToVPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'matvDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'matvPublicIP' - The Elastic IP address.
-moveAddressToVPC
-    :: Text -- ^ 'matvPublicIP'
-    -> MoveAddressToVPC
-moveAddressToVPC pPublicIP_ =
-    MoveAddressToVPC'
-    { _matvDryRun = Nothing
-    , _matvPublicIP = pPublicIP_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-matvDryRun :: Lens' MoveAddressToVPC (Maybe Bool)
-matvDryRun = lens _matvDryRun (\ s a -> s{_matvDryRun = a});
-
--- | The Elastic IP address.
-matvPublicIP :: Lens' MoveAddressToVPC Text
-matvPublicIP = lens _matvPublicIP (\ s a -> s{_matvPublicIP = a});
-
-instance AWSRequest MoveAddressToVPC where
-        type Rs MoveAddressToVPC = MoveAddressToVPCResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 MoveAddressToVPCResponse' <$>
-                   (x .@? "status") <*> (x .@? "allocationId") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable MoveAddressToVPC
-
-instance NFData MoveAddressToVPC
-
-instance ToHeaders MoveAddressToVPC where
-        toHeaders = const mempty
-
-instance ToPath MoveAddressToVPC where
-        toPath = const "/"
-
-instance ToQuery MoveAddressToVPC where
-        toQuery MoveAddressToVPC'{..}
-          = mconcat
-              ["Action" =: ("MoveAddressToVpc" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _matvDryRun, "PublicIp" =: _matvPublicIP]
-
--- | Contains the output of MoveAddressToVpc.
---
---
---
--- /See:/ 'moveAddressToVPCResponse' smart constructor.
-data MoveAddressToVPCResponse = MoveAddressToVPCResponse'
-    { _matvrsStatus         :: !(Maybe AddressStatus)
-    , _matvrsAllocationId   :: !(Maybe Text)
-    , _matvrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MoveAddressToVPCResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'matvrsStatus' - The status of the move of the IP address.
---
--- * 'matvrsAllocationId' - The allocation ID for the Elastic IP address.
---
--- * 'matvrsResponseStatus' - -- | The response status code.
-moveAddressToVPCResponse
-    :: Int -- ^ 'matvrsResponseStatus'
-    -> MoveAddressToVPCResponse
-moveAddressToVPCResponse pResponseStatus_ =
-    MoveAddressToVPCResponse'
-    { _matvrsStatus = Nothing
-    , _matvrsAllocationId = Nothing
-    , _matvrsResponseStatus = pResponseStatus_
-    }
-
--- | The status of the move of the IP address.
-matvrsStatus :: Lens' MoveAddressToVPCResponse (Maybe AddressStatus)
-matvrsStatus = lens _matvrsStatus (\ s a -> s{_matvrsStatus = a});
-
--- | The allocation ID for the Elastic IP address.
-matvrsAllocationId :: Lens' MoveAddressToVPCResponse (Maybe Text)
-matvrsAllocationId = lens _matvrsAllocationId (\ s a -> s{_matvrsAllocationId = a});
-
--- | -- | The response status code.
-matvrsResponseStatus :: Lens' MoveAddressToVPCResponse Int
-matvrsResponseStatus = lens _matvrsResponseStatus (\ s a -> s{_matvrsResponseStatus = a});
-
-instance NFData MoveAddressToVPCResponse
diff --git a/gen/Network/AWS/EC2/PurchaseHostReservation.hs b/gen/Network/AWS/EC2/PurchaseHostReservation.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/PurchaseHostReservation.hs
+++ /dev/null
@@ -1,209 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.PurchaseHostReservation
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Purchase a reservation with configurations that match those of your Dedicated Host. You must have active Dedicated Hosts in your account before you purchase a reservation. This action results in the specified reservation being purchased and charged to your account.
---
---
-module Network.AWS.EC2.PurchaseHostReservation
-    (
-    -- * Creating a Request
-      purchaseHostReservation
-    , PurchaseHostReservation
-    -- * Request Lenses
-    , phrCurrencyCode
-    , phrClientToken
-    , phrLimitPrice
-    , phrOfferingId
-    , phrHostIdSet
-
-    -- * Destructuring the Response
-    , purchaseHostReservationResponse
-    , PurchaseHostReservationResponse
-    -- * Response Lenses
-    , phrrsCurrencyCode
-    , phrrsClientToken
-    , phrrsTotalHourlyPrice
-    , phrrsTotalUpfrontPrice
-    , phrrsPurchase
-    , phrrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'purchaseHostReservation' smart constructor.
-data PurchaseHostReservation = PurchaseHostReservation'
-    { _phrCurrencyCode :: !(Maybe CurrencyCodeValues)
-    , _phrClientToken  :: !(Maybe Text)
-    , _phrLimitPrice   :: !(Maybe Text)
-    , _phrOfferingId   :: !Text
-    , _phrHostIdSet    :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseHostReservation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'phrCurrencyCode' - The currency in which the @totalUpfrontPrice@ , @LimitPrice@ , and @totalHourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
---
--- * 'phrClientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'phrLimitPrice' - The specified limit is checked against the total upfront cost of the reservation (calculated as the offering's upfront cost multiplied by the host count). If the total upfront cost is greater than the specified price limit, the request will fail. This is used to ensure that the purchase does not exceed the expected upfront cost of the purchase. At this time, the only supported currency is @USD@ . For example, to indicate a limit price of USD 100, specify 100.00.
---
--- * 'phrOfferingId' - The ID of the offering.
---
--- * 'phrHostIdSet' - The ID/s of the Dedicated Host/s that the reservation will be associated with.
-purchaseHostReservation
-    :: Text -- ^ 'phrOfferingId'
-    -> PurchaseHostReservation
-purchaseHostReservation pOfferingId_ =
-    PurchaseHostReservation'
-    { _phrCurrencyCode = Nothing
-    , _phrClientToken = Nothing
-    , _phrLimitPrice = Nothing
-    , _phrOfferingId = pOfferingId_
-    , _phrHostIdSet = mempty
-    }
-
--- | The currency in which the @totalUpfrontPrice@ , @LimitPrice@ , and @totalHourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
-phrCurrencyCode :: Lens' PurchaseHostReservation (Maybe CurrencyCodeValues)
-phrCurrencyCode = lens _phrCurrencyCode (\ s a -> s{_phrCurrencyCode = a});
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
-phrClientToken :: Lens' PurchaseHostReservation (Maybe Text)
-phrClientToken = lens _phrClientToken (\ s a -> s{_phrClientToken = a});
-
--- | The specified limit is checked against the total upfront cost of the reservation (calculated as the offering's upfront cost multiplied by the host count). If the total upfront cost is greater than the specified price limit, the request will fail. This is used to ensure that the purchase does not exceed the expected upfront cost of the purchase. At this time, the only supported currency is @USD@ . For example, to indicate a limit price of USD 100, specify 100.00.
-phrLimitPrice :: Lens' PurchaseHostReservation (Maybe Text)
-phrLimitPrice = lens _phrLimitPrice (\ s a -> s{_phrLimitPrice = a});
-
--- | The ID of the offering.
-phrOfferingId :: Lens' PurchaseHostReservation Text
-phrOfferingId = lens _phrOfferingId (\ s a -> s{_phrOfferingId = a});
-
--- | The ID/s of the Dedicated Host/s that the reservation will be associated with.
-phrHostIdSet :: Lens' PurchaseHostReservation [Text]
-phrHostIdSet = lens _phrHostIdSet (\ s a -> s{_phrHostIdSet = a}) . _Coerce;
-
-instance AWSRequest PurchaseHostReservation where
-        type Rs PurchaseHostReservation =
-             PurchaseHostReservationResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 PurchaseHostReservationResponse' <$>
-                   (x .@? "currencyCode") <*> (x .@? "clientToken") <*>
-                     (x .@? "totalHourlyPrice")
-                     <*> (x .@? "totalUpfrontPrice")
-                     <*>
-                     (x .@? "purchase" .!@ mempty >>=
-                        may (parseXMLList "member"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable PurchaseHostReservation
-
-instance NFData PurchaseHostReservation
-
-instance ToHeaders PurchaseHostReservation where
-        toHeaders = const mempty
-
-instance ToPath PurchaseHostReservation where
-        toPath = const "/"
-
-instance ToQuery PurchaseHostReservation where
-        toQuery PurchaseHostReservation'{..}
-          = mconcat
-              ["Action" =:
-                 ("PurchaseHostReservation" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "CurrencyCode" =: _phrCurrencyCode,
-               "ClientToken" =: _phrClientToken,
-               "LimitPrice" =: _phrLimitPrice,
-               "OfferingId" =: _phrOfferingId,
-               toQueryList "HostIdSet" _phrHostIdSet]
-
--- | /See:/ 'purchaseHostReservationResponse' smart constructor.
-data PurchaseHostReservationResponse = PurchaseHostReservationResponse'
-    { _phrrsCurrencyCode      :: !(Maybe CurrencyCodeValues)
-    , _phrrsClientToken       :: !(Maybe Text)
-    , _phrrsTotalHourlyPrice  :: !(Maybe Text)
-    , _phrrsTotalUpfrontPrice :: !(Maybe Text)
-    , _phrrsPurchase          :: !(Maybe [Purchase])
-    , _phrrsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseHostReservationResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'phrrsCurrencyCode' - The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
---
--- * 'phrrsClientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/
---
--- * 'phrrsTotalHourlyPrice' - The total hourly price of the reservation calculated per hour.
---
--- * 'phrrsTotalUpfrontPrice' - The total amount that will be charged to your account when you purchase the reservation.
---
--- * 'phrrsPurchase' - Describes the details of the purchase.
---
--- * 'phrrsResponseStatus' - -- | The response status code.
-purchaseHostReservationResponse
-    :: Int -- ^ 'phrrsResponseStatus'
-    -> PurchaseHostReservationResponse
-purchaseHostReservationResponse pResponseStatus_ =
-    PurchaseHostReservationResponse'
-    { _phrrsCurrencyCode = Nothing
-    , _phrrsClientToken = Nothing
-    , _phrrsTotalHourlyPrice = Nothing
-    , _phrrsTotalUpfrontPrice = Nothing
-    , _phrrsPurchase = Nothing
-    , _phrrsResponseStatus = pResponseStatus_
-    }
-
--- | The currency in which the @totalUpfrontPrice@ and @totalHourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
-phrrsCurrencyCode :: Lens' PurchaseHostReservationResponse (Maybe CurrencyCodeValues)
-phrrsCurrencyCode = lens _phrrsCurrencyCode (\ s a -> s{_phrrsCurrencyCode = a});
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/
-phrrsClientToken :: Lens' PurchaseHostReservationResponse (Maybe Text)
-phrrsClientToken = lens _phrrsClientToken (\ s a -> s{_phrrsClientToken = a});
-
--- | The total hourly price of the reservation calculated per hour.
-phrrsTotalHourlyPrice :: Lens' PurchaseHostReservationResponse (Maybe Text)
-phrrsTotalHourlyPrice = lens _phrrsTotalHourlyPrice (\ s a -> s{_phrrsTotalHourlyPrice = a});
-
--- | The total amount that will be charged to your account when you purchase the reservation.
-phrrsTotalUpfrontPrice :: Lens' PurchaseHostReservationResponse (Maybe Text)
-phrrsTotalUpfrontPrice = lens _phrrsTotalUpfrontPrice (\ s a -> s{_phrrsTotalUpfrontPrice = a});
-
--- | Describes the details of the purchase.
-phrrsPurchase :: Lens' PurchaseHostReservationResponse [Purchase]
-phrrsPurchase = lens _phrrsPurchase (\ s a -> s{_phrrsPurchase = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-phrrsResponseStatus :: Lens' PurchaseHostReservationResponse Int
-phrrsResponseStatus = lens _phrrsResponseStatus (\ s a -> s{_phrrsResponseStatus = a});
-
-instance NFData PurchaseHostReservationResponse
diff --git a/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs b/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs
+++ /dev/null
@@ -1,177 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.PurchaseReservedInstancesOffering
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Purchases a Reserved Instance for use with your account. With Reserved Instances, you pay a lower hourly rate compared to On-Demand instance pricing.
---
---
--- Use 'DescribeReservedInstancesOfferings' to get a list of Reserved Instance offerings that match your specifications. After you've purchased a Reserved Instance, you can check for your new Reserved Instance with 'DescribeReservedInstances' .
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances> and <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.PurchaseReservedInstancesOffering
-    (
-    -- * Creating a Request
-      purchaseReservedInstancesOffering
-    , PurchaseReservedInstancesOffering
-    -- * Request Lenses
-    , prioLimitPrice
-    , prioDryRun
-    , prioReservedInstancesOfferingId
-    , prioInstanceCount
-
-    -- * Destructuring the Response
-    , purchaseReservedInstancesOfferingResponse
-    , PurchaseReservedInstancesOfferingResponse
-    -- * Response Lenses
-    , priorsReservedInstancesId
-    , priorsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for PurchaseReservedInstancesOffering.
---
---
---
--- /See:/ 'purchaseReservedInstancesOffering' smart constructor.
-data PurchaseReservedInstancesOffering = PurchaseReservedInstancesOffering'
-    { _prioLimitPrice                  :: !(Maybe ReservedInstanceLimitPrice)
-    , _prioDryRun                      :: !(Maybe Bool)
-    , _prioReservedInstancesOfferingId :: !Text
-    , _prioInstanceCount               :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseReservedInstancesOffering' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prioLimitPrice' - Specified for Reserved Instance Marketplace offerings to limit the total order and ensure that the Reserved Instances are not purchased at unexpected prices.
---
--- * 'prioDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'prioReservedInstancesOfferingId' - The ID of the Reserved Instance offering to purchase.
---
--- * 'prioInstanceCount' - The number of Reserved Instances to purchase.
-purchaseReservedInstancesOffering
-    :: Text -- ^ 'prioReservedInstancesOfferingId'
-    -> Int -- ^ 'prioInstanceCount'
-    -> PurchaseReservedInstancesOffering
-purchaseReservedInstancesOffering pReservedInstancesOfferingId_ pInstanceCount_ =
-    PurchaseReservedInstancesOffering'
-    { _prioLimitPrice = Nothing
-    , _prioDryRun = Nothing
-    , _prioReservedInstancesOfferingId = pReservedInstancesOfferingId_
-    , _prioInstanceCount = pInstanceCount_
-    }
-
--- | Specified for Reserved Instance Marketplace offerings to limit the total order and ensure that the Reserved Instances are not purchased at unexpected prices.
-prioLimitPrice :: Lens' PurchaseReservedInstancesOffering (Maybe ReservedInstanceLimitPrice)
-prioLimitPrice = lens _prioLimitPrice (\ s a -> s{_prioLimitPrice = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-prioDryRun :: Lens' PurchaseReservedInstancesOffering (Maybe Bool)
-prioDryRun = lens _prioDryRun (\ s a -> s{_prioDryRun = a});
-
--- | The ID of the Reserved Instance offering to purchase.
-prioReservedInstancesOfferingId :: Lens' PurchaseReservedInstancesOffering Text
-prioReservedInstancesOfferingId = lens _prioReservedInstancesOfferingId (\ s a -> s{_prioReservedInstancesOfferingId = a});
-
--- | The number of Reserved Instances to purchase.
-prioInstanceCount :: Lens' PurchaseReservedInstancesOffering Int
-prioInstanceCount = lens _prioInstanceCount (\ s a -> s{_prioInstanceCount = a});
-
-instance AWSRequest PurchaseReservedInstancesOffering
-         where
-        type Rs PurchaseReservedInstancesOffering =
-             PurchaseReservedInstancesOfferingResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 PurchaseReservedInstancesOfferingResponse' <$>
-                   (x .@? "reservedInstancesId") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable PurchaseReservedInstancesOffering
-
-instance NFData PurchaseReservedInstancesOffering
-
-instance ToHeaders PurchaseReservedInstancesOffering
-         where
-        toHeaders = const mempty
-
-instance ToPath PurchaseReservedInstancesOffering
-         where
-        toPath = const "/"
-
-instance ToQuery PurchaseReservedInstancesOffering
-         where
-        toQuery PurchaseReservedInstancesOffering'{..}
-          = mconcat
-              ["Action" =:
-                 ("PurchaseReservedInstancesOffering" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "LimitPrice" =: _prioLimitPrice,
-               "DryRun" =: _prioDryRun,
-               "ReservedInstancesOfferingId" =:
-                 _prioReservedInstancesOfferingId,
-               "InstanceCount" =: _prioInstanceCount]
-
--- | Contains the output of PurchaseReservedInstancesOffering.
---
---
---
--- /See:/ 'purchaseReservedInstancesOfferingResponse' smart constructor.
-data PurchaseReservedInstancesOfferingResponse = PurchaseReservedInstancesOfferingResponse'
-    { _priorsReservedInstancesId :: !(Maybe Text)
-    , _priorsResponseStatus      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseReservedInstancesOfferingResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'priorsReservedInstancesId' - The IDs of the purchased Reserved Instances.
---
--- * 'priorsResponseStatus' - -- | The response status code.
-purchaseReservedInstancesOfferingResponse
-    :: Int -- ^ 'priorsResponseStatus'
-    -> PurchaseReservedInstancesOfferingResponse
-purchaseReservedInstancesOfferingResponse pResponseStatus_ =
-    PurchaseReservedInstancesOfferingResponse'
-    { _priorsReservedInstancesId = Nothing
-    , _priorsResponseStatus = pResponseStatus_
-    }
-
--- | The IDs of the purchased Reserved Instances.
-priorsReservedInstancesId :: Lens' PurchaseReservedInstancesOfferingResponse (Maybe Text)
-priorsReservedInstancesId = lens _priorsReservedInstancesId (\ s a -> s{_priorsReservedInstancesId = a});
-
--- | -- | The response status code.
-priorsResponseStatus :: Lens' PurchaseReservedInstancesOfferingResponse Int
-priorsResponseStatus = lens _priorsResponseStatus (\ s a -> s{_priorsResponseStatus = a});
-
-instance NFData
-         PurchaseReservedInstancesOfferingResponse
diff --git a/gen/Network/AWS/EC2/PurchaseScheduledInstances.hs b/gen/Network/AWS/EC2/PurchaseScheduledInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/PurchaseScheduledInstances.hs
+++ /dev/null
@@ -1,161 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.PurchaseScheduledInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Purchases one or more Scheduled Instances with the specified schedule.
---
---
--- Scheduled Instances enable you to purchase Amazon EC2 compute capacity by the hour for a one-year term. Before you can purchase a Scheduled Instance, you must call 'DescribeScheduledInstanceAvailability' to check for available schedules and obtain a purchase token. After you purchase a Scheduled Instance, you must call 'RunScheduledInstances' during each scheduled time period.
---
--- After you purchase a Scheduled Instance, you can't cancel, modify, or resell your purchase.
---
-module Network.AWS.EC2.PurchaseScheduledInstances
-    (
-    -- * Creating a Request
-      purchaseScheduledInstances
-    , PurchaseScheduledInstances
-    -- * Request Lenses
-    , psiClientToken
-    , psiDryRun
-    , psiPurchaseRequests
-
-    -- * Destructuring the Response
-    , purchaseScheduledInstancesResponse
-    , PurchaseScheduledInstancesResponse
-    -- * Response Lenses
-    , psirsScheduledInstanceSet
-    , psirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for PurchaseScheduledInstances.
---
---
---
--- /See:/ 'purchaseScheduledInstances' smart constructor.
-data PurchaseScheduledInstances = PurchaseScheduledInstances'
-    { _psiClientToken      :: !(Maybe Text)
-    , _psiDryRun           :: !(Maybe Bool)
-    , _psiPurchaseRequests :: !(List1 PurchaseRequest)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseScheduledInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psiClientToken' - Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
---
--- * 'psiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'psiPurchaseRequests' - One or more purchase requests.
-purchaseScheduledInstances
-    :: NonEmpty PurchaseRequest -- ^ 'psiPurchaseRequests'
-    -> PurchaseScheduledInstances
-purchaseScheduledInstances pPurchaseRequests_ =
-    PurchaseScheduledInstances'
-    { _psiClientToken = Nothing
-    , _psiDryRun = Nothing
-    , _psiPurchaseRequests = _List1 # pPurchaseRequests_
-    }
-
--- | Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-psiClientToken :: Lens' PurchaseScheduledInstances (Maybe Text)
-psiClientToken = lens _psiClientToken (\ s a -> s{_psiClientToken = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-psiDryRun :: Lens' PurchaseScheduledInstances (Maybe Bool)
-psiDryRun = lens _psiDryRun (\ s a -> s{_psiDryRun = a});
-
--- | One or more purchase requests.
-psiPurchaseRequests :: Lens' PurchaseScheduledInstances (NonEmpty PurchaseRequest)
-psiPurchaseRequests = lens _psiPurchaseRequests (\ s a -> s{_psiPurchaseRequests = a}) . _List1;
-
-instance AWSRequest PurchaseScheduledInstances where
-        type Rs PurchaseScheduledInstances =
-             PurchaseScheduledInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 PurchaseScheduledInstancesResponse' <$>
-                   (x .@? "scheduledInstanceSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable PurchaseScheduledInstances
-
-instance NFData PurchaseScheduledInstances
-
-instance ToHeaders PurchaseScheduledInstances where
-        toHeaders = const mempty
-
-instance ToPath PurchaseScheduledInstances where
-        toPath = const "/"
-
-instance ToQuery PurchaseScheduledInstances where
-        toQuery PurchaseScheduledInstances'{..}
-          = mconcat
-              ["Action" =:
-                 ("PurchaseScheduledInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _psiClientToken,
-               "DryRun" =: _psiDryRun,
-               toQueryList "PurchaseRequest" _psiPurchaseRequests]
-
--- | Contains the output of PurchaseScheduledInstances.
---
---
---
--- /See:/ 'purchaseScheduledInstancesResponse' smart constructor.
-data PurchaseScheduledInstancesResponse = PurchaseScheduledInstancesResponse'
-    { _psirsScheduledInstanceSet :: !(Maybe [ScheduledInstance])
-    , _psirsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseScheduledInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psirsScheduledInstanceSet' - Information about the Scheduled Instances.
---
--- * 'psirsResponseStatus' - -- | The response status code.
-purchaseScheduledInstancesResponse
-    :: Int -- ^ 'psirsResponseStatus'
-    -> PurchaseScheduledInstancesResponse
-purchaseScheduledInstancesResponse pResponseStatus_ =
-    PurchaseScheduledInstancesResponse'
-    { _psirsScheduledInstanceSet = Nothing
-    , _psirsResponseStatus = pResponseStatus_
-    }
-
--- | Information about the Scheduled Instances.
-psirsScheduledInstanceSet :: Lens' PurchaseScheduledInstancesResponse [ScheduledInstance]
-psirsScheduledInstanceSet = lens _psirsScheduledInstanceSet (\ s a -> s{_psirsScheduledInstanceSet = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-psirsResponseStatus :: Lens' PurchaseScheduledInstancesResponse Int
-psirsResponseStatus = lens _psirsResponseStatus (\ s a -> s{_psirsResponseStatus = a});
-
-instance NFData PurchaseScheduledInstancesResponse
diff --git a/gen/Network/AWS/EC2/RebootInstances.hs b/gen/Network/AWS/EC2/RebootInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RebootInstances.hs
+++ /dev/null
@@ -1,116 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RebootInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Requests a reboot of one or more instances. This operation is asynchronous; it only queues a request to reboot the specified instances. The operation succeeds if the instances are valid and belong to you. Requests to reboot terminated instances are ignored.
---
---
--- If an instance does not cleanly shut down within four minutes, Amazon EC2 performs a hard reboot.
---
--- For more information about troubleshooting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html Getting Console Output and Rebooting Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.RebootInstances
-    (
-    -- * Creating a Request
-      rebootInstances
-    , RebootInstances
-    -- * Request Lenses
-    , rebDryRun
-    , rebInstanceIds
-
-    -- * Destructuring the Response
-    , rebootInstancesResponse
-    , RebootInstancesResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RebootInstances.
---
---
---
--- /See:/ 'rebootInstances' smart constructor.
-data RebootInstances = RebootInstances'
-    { _rebDryRun      :: !(Maybe Bool)
-    , _rebInstanceIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RebootInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rebDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rebInstanceIds' - One or more instance IDs.
-rebootInstances
-    :: RebootInstances
-rebootInstances =
-    RebootInstances'
-    { _rebDryRun = Nothing
-    , _rebInstanceIds = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rebDryRun :: Lens' RebootInstances (Maybe Bool)
-rebDryRun = lens _rebDryRun (\ s a -> s{_rebDryRun = a});
-
--- | One or more instance IDs.
-rebInstanceIds :: Lens' RebootInstances [Text]
-rebInstanceIds = lens _rebInstanceIds (\ s a -> s{_rebInstanceIds = a}) . _Coerce;
-
-instance AWSRequest RebootInstances where
-        type Rs RebootInstances = RebootInstancesResponse
-        request = postQuery ec2
-        response = receiveNull RebootInstancesResponse'
-
-instance Hashable RebootInstances
-
-instance NFData RebootInstances
-
-instance ToHeaders RebootInstances where
-        toHeaders = const mempty
-
-instance ToPath RebootInstances where
-        toPath = const "/"
-
-instance ToQuery RebootInstances where
-        toQuery RebootInstances'{..}
-          = mconcat
-              ["Action" =: ("RebootInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _rebDryRun,
-               toQueryList "InstanceId" _rebInstanceIds]
-
--- | /See:/ 'rebootInstancesResponse' smart constructor.
-data RebootInstancesResponse =
-    RebootInstancesResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RebootInstancesResponse' with the minimum fields required to make a request.
---
-rebootInstancesResponse
-    :: RebootInstancesResponse
-rebootInstancesResponse = RebootInstancesResponse'
-
-instance NFData RebootInstancesResponse
diff --git a/gen/Network/AWS/EC2/RegisterImage.hs b/gen/Network/AWS/EC2/RegisterImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RegisterImage.hs
+++ /dev/null
@@ -1,254 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RegisterImage
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Registers an AMI. When you're creating an AMI, this is the final step you must complete before you can launch an instance from the AMI. For more information about creating AMIs, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html Creating Your Own AMIs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
--- You can also use @RegisterImage@ to create an Amazon EBS-backed Linux AMI from a snapshot of a root device volume. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_LaunchingInstanceFromSnapshot.html Launching an Instance from a Snapshot> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- /Important:/ Some Linux distributions, such as Red Hat Enterprise Linux (RHEL) and SUSE Linux Enterprise Server (SLES), use the EC2 @billingProduct@ code associated with an AMI to verify subscription status for package updates. Creating an AMI from an EBS snapshot does not maintain this billing code, and subsequent instances launched from such an AMI will not be able to connect to package update infrastructure.
---
--- Similarly, although you can create a Windows AMI from a snapshot, you can't successfully launch an instance from the AMI.
---
--- To create Windows AMIs or to create AMIs for Linux operating systems that must retain AMI billing codes to work properly, see 'CreateImage' .
---
--- If needed, you can deregister an AMI at any time. Any modifications you make to an AMI backed by an instance store volume invalidates its registration. If you make changes to an image, deregister the previous image and register the new image.
---
-module Network.AWS.EC2.RegisterImage
-    (
-    -- * Creating a Request
-      registerImage
-    , RegisterImage
-    -- * Request Lenses
-    , riVirtualizationType
-    , riImageLocation
-    , riEnaSupport
-    , riRAMDiskId
-    , riKernelId
-    , riRootDeviceName
-    , riSRIOVNetSupport
-    , riArchitecture
-    , riDescription
-    , riBlockDeviceMappings
-    , riDryRun
-    , riName
-
-    -- * Destructuring the Response
-    , registerImageResponse
-    , RegisterImageResponse
-    -- * Response Lenses
-    , rirsImageId
-    , rirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RegisterImage.
---
---
---
--- /See:/ 'registerImage' smart constructor.
-data RegisterImage = RegisterImage'
-    { _riVirtualizationType  :: !(Maybe Text)
-    , _riImageLocation       :: !(Maybe Text)
-    , _riEnaSupport          :: !(Maybe Bool)
-    , _riRAMDiskId           :: !(Maybe Text)
-    , _riKernelId            :: !(Maybe Text)
-    , _riRootDeviceName      :: !(Maybe Text)
-    , _riSRIOVNetSupport     :: !(Maybe Text)
-    , _riArchitecture        :: !(Maybe ArchitectureValues)
-    , _riDescription         :: !(Maybe Text)
-    , _riBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _riDryRun              :: !(Maybe Bool)
-    , _riName                :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RegisterImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riVirtualizationType' - The type of virtualization. Default: @paravirtual@
---
--- * 'riImageLocation' - The full path to your AMI manifest in Amazon S3 storage.
---
--- * 'riEnaSupport' - Set to @true@ to enable enhanced networking with ENA for the AMI and any instances that you launch from the AMI. This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.
---
--- * 'riRAMDiskId' - The ID of the RAM disk.
---
--- * 'riKernelId' - The ID of the kernel.
---
--- * 'riRootDeviceName' - The name of the root device (for example, @/dev/sda1@ , or @/dev/xvda@ ).
---
--- * 'riSRIOVNetSupport' - Set to @simple@ to enable enhanced networking with the Intel 82599 Virtual Function interface for the AMI and any instances that you launch from the AMI. There is no way to disable @sriovNetSupport@ at this time. This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.
---
--- * 'riArchitecture' - The architecture of the AMI. Default: For Amazon EBS-backed AMIs, @i386@ . For instance store-backed AMIs, the architecture specified in the manifest file.
---
--- * 'riDescription' - A description for your AMI.
---
--- * 'riBlockDeviceMappings' - One or more block device mapping entries.
---
--- * 'riDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'riName' - A name for your AMI. Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)
-registerImage
-    :: Text -- ^ 'riName'
-    -> RegisterImage
-registerImage pName_ =
-    RegisterImage'
-    { _riVirtualizationType = Nothing
-    , _riImageLocation = Nothing
-    , _riEnaSupport = Nothing
-    , _riRAMDiskId = Nothing
-    , _riKernelId = Nothing
-    , _riRootDeviceName = Nothing
-    , _riSRIOVNetSupport = Nothing
-    , _riArchitecture = Nothing
-    , _riDescription = Nothing
-    , _riBlockDeviceMappings = Nothing
-    , _riDryRun = Nothing
-    , _riName = pName_
-    }
-
--- | The type of virtualization. Default: @paravirtual@
-riVirtualizationType :: Lens' RegisterImage (Maybe Text)
-riVirtualizationType = lens _riVirtualizationType (\ s a -> s{_riVirtualizationType = a});
-
--- | The full path to your AMI manifest in Amazon S3 storage.
-riImageLocation :: Lens' RegisterImage (Maybe Text)
-riImageLocation = lens _riImageLocation (\ s a -> s{_riImageLocation = a});
-
--- | Set to @true@ to enable enhanced networking with ENA for the AMI and any instances that you launch from the AMI. This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.
-riEnaSupport :: Lens' RegisterImage (Maybe Bool)
-riEnaSupport = lens _riEnaSupport (\ s a -> s{_riEnaSupport = a});
-
--- | The ID of the RAM disk.
-riRAMDiskId :: Lens' RegisterImage (Maybe Text)
-riRAMDiskId = lens _riRAMDiskId (\ s a -> s{_riRAMDiskId = a});
-
--- | The ID of the kernel.
-riKernelId :: Lens' RegisterImage (Maybe Text)
-riKernelId = lens _riKernelId (\ s a -> s{_riKernelId = a});
-
--- | The name of the root device (for example, @/dev/sda1@ , or @/dev/xvda@ ).
-riRootDeviceName :: Lens' RegisterImage (Maybe Text)
-riRootDeviceName = lens _riRootDeviceName (\ s a -> s{_riRootDeviceName = a});
-
--- | Set to @simple@ to enable enhanced networking with the Intel 82599 Virtual Function interface for the AMI and any instances that you launch from the AMI. There is no way to disable @sriovNetSupport@ at this time. This option is supported only for HVM AMIs. Specifying this option with a PV AMI can make instances launched from the AMI unreachable.
-riSRIOVNetSupport :: Lens' RegisterImage (Maybe Text)
-riSRIOVNetSupport = lens _riSRIOVNetSupport (\ s a -> s{_riSRIOVNetSupport = a});
-
--- | The architecture of the AMI. Default: For Amazon EBS-backed AMIs, @i386@ . For instance store-backed AMIs, the architecture specified in the manifest file.
-riArchitecture :: Lens' RegisterImage (Maybe ArchitectureValues)
-riArchitecture = lens _riArchitecture (\ s a -> s{_riArchitecture = a});
-
--- | A description for your AMI.
-riDescription :: Lens' RegisterImage (Maybe Text)
-riDescription = lens _riDescription (\ s a -> s{_riDescription = a});
-
--- | One or more block device mapping entries.
-riBlockDeviceMappings :: Lens' RegisterImage [BlockDeviceMapping]
-riBlockDeviceMappings = lens _riBlockDeviceMappings (\ s a -> s{_riBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-riDryRun :: Lens' RegisterImage (Maybe Bool)
-riDryRun = lens _riDryRun (\ s a -> s{_riDryRun = a});
-
--- | A name for your AMI. Constraints: 3-128 alphanumeric characters, parentheses (()), square brackets ([]), spaces ( ), periods (.), slashes (/), dashes (-), single quotes ('), at-signs (@), or underscores(_)
-riName :: Lens' RegisterImage Text
-riName = lens _riName (\ s a -> s{_riName = a});
-
-instance AWSRequest RegisterImage where
-        type Rs RegisterImage = RegisterImageResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 RegisterImageResponse' <$>
-                   (x .@? "imageId") <*> (pure (fromEnum s)))
-
-instance Hashable RegisterImage
-
-instance NFData RegisterImage
-
-instance ToHeaders RegisterImage where
-        toHeaders = const mempty
-
-instance ToPath RegisterImage where
-        toPath = const "/"
-
-instance ToQuery RegisterImage where
-        toQuery RegisterImage'{..}
-          = mconcat
-              ["Action" =: ("RegisterImage" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VirtualizationType" =: _riVirtualizationType,
-               "ImageLocation" =: _riImageLocation,
-               "EnaSupport" =: _riEnaSupport,
-               "RamdiskId" =: _riRAMDiskId,
-               "KernelId" =: _riKernelId,
-               "RootDeviceName" =: _riRootDeviceName,
-               "SriovNetSupport" =: _riSRIOVNetSupport,
-               "Architecture" =: _riArchitecture,
-               "Description" =: _riDescription,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _riBlockDeviceMappings),
-               "DryRun" =: _riDryRun, "Name" =: _riName]
-
--- | Contains the output of RegisterImage.
---
---
---
--- /See:/ 'registerImageResponse' smart constructor.
-data RegisterImageResponse = RegisterImageResponse'
-    { _rirsImageId        :: !(Maybe Text)
-    , _rirsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RegisterImageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rirsImageId' - The ID of the newly registered AMI.
---
--- * 'rirsResponseStatus' - -- | The response status code.
-registerImageResponse
-    :: Int -- ^ 'rirsResponseStatus'
-    -> RegisterImageResponse
-registerImageResponse pResponseStatus_ =
-    RegisterImageResponse'
-    { _rirsImageId = Nothing
-    , _rirsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the newly registered AMI.
-rirsImageId :: Lens' RegisterImageResponse (Maybe Text)
-rirsImageId = lens _rirsImageId (\ s a -> s{_rirsImageId = a});
-
--- | -- | The response status code.
-rirsResponseStatus :: Lens' RegisterImageResponse Int
-rirsResponseStatus = lens _rirsResponseStatus (\ s a -> s{_rirsResponseStatus = a});
-
-instance NFData RegisterImageResponse
diff --git a/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs b/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RejectVPCPeeringConnection
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Rejects a VPC peering connection request. The VPC peering connection must be in the @pending-acceptance@ state. Use the 'DescribeVpcPeeringConnections' request to view your outstanding VPC peering connection requests. To delete an active VPC peering connection, or to delete a VPC peering connection request that you initiated, use 'DeleteVpcPeeringConnection' .
---
---
-module Network.AWS.EC2.RejectVPCPeeringConnection
-    (
-    -- * Creating a Request
-      rejectVPCPeeringConnection
-    , RejectVPCPeeringConnection
-    -- * Request Lenses
-    , rvpcDryRun
-    , rvpcVPCPeeringConnectionId
-
-    -- * Destructuring the Response
-    , rejectVPCPeeringConnectionResponse
-    , RejectVPCPeeringConnectionResponse
-    -- * Response Lenses
-    , rvpcrsReturn
-    , rvpcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RejectVpcPeeringConnection.
---
---
---
--- /See:/ 'rejectVPCPeeringConnection' smart constructor.
-data RejectVPCPeeringConnection = RejectVPCPeeringConnection'
-    { _rvpcDryRun                 :: !(Maybe Bool)
-    , _rvpcVPCPeeringConnectionId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RejectVPCPeeringConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rvpcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rvpcVPCPeeringConnectionId' - The ID of the VPC peering connection.
-rejectVPCPeeringConnection
-    :: Text -- ^ 'rvpcVPCPeeringConnectionId'
-    -> RejectVPCPeeringConnection
-rejectVPCPeeringConnection pVPCPeeringConnectionId_ =
-    RejectVPCPeeringConnection'
-    { _rvpcDryRun = Nothing
-    , _rvpcVPCPeeringConnectionId = pVPCPeeringConnectionId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rvpcDryRun :: Lens' RejectVPCPeeringConnection (Maybe Bool)
-rvpcDryRun = lens _rvpcDryRun (\ s a -> s{_rvpcDryRun = a});
-
--- | The ID of the VPC peering connection.
-rvpcVPCPeeringConnectionId :: Lens' RejectVPCPeeringConnection Text
-rvpcVPCPeeringConnectionId = lens _rvpcVPCPeeringConnectionId (\ s a -> s{_rvpcVPCPeeringConnectionId = a});
-
-instance AWSRequest RejectVPCPeeringConnection where
-        type Rs RejectVPCPeeringConnection =
-             RejectVPCPeeringConnectionResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 RejectVPCPeeringConnectionResponse' <$>
-                   (x .@? "return") <*> (pure (fromEnum s)))
-
-instance Hashable RejectVPCPeeringConnection
-
-instance NFData RejectVPCPeeringConnection
-
-instance ToHeaders RejectVPCPeeringConnection where
-        toHeaders = const mempty
-
-instance ToPath RejectVPCPeeringConnection where
-        toPath = const "/"
-
-instance ToQuery RejectVPCPeeringConnection where
-        toQuery RejectVPCPeeringConnection'{..}
-          = mconcat
-              ["Action" =:
-                 ("RejectVpcPeeringConnection" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _rvpcDryRun,
-               "VpcPeeringConnectionId" =:
-                 _rvpcVPCPeeringConnectionId]
-
--- | Contains the output of RejectVpcPeeringConnection.
---
---
---
--- /See:/ 'rejectVPCPeeringConnectionResponse' smart constructor.
-data RejectVPCPeeringConnectionResponse = RejectVPCPeeringConnectionResponse'
-    { _rvpcrsReturn         :: !(Maybe Bool)
-    , _rvpcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RejectVPCPeeringConnectionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rvpcrsReturn' - Returns @true@ if the request succeeds; otherwise, it returns an error.
---
--- * 'rvpcrsResponseStatus' - -- | The response status code.
-rejectVPCPeeringConnectionResponse
-    :: Int -- ^ 'rvpcrsResponseStatus'
-    -> RejectVPCPeeringConnectionResponse
-rejectVPCPeeringConnectionResponse pResponseStatus_ =
-    RejectVPCPeeringConnectionResponse'
-    { _rvpcrsReturn = Nothing
-    , _rvpcrsResponseStatus = pResponseStatus_
-    }
-
--- | Returns @true@ if the request succeeds; otherwise, it returns an error.
-rvpcrsReturn :: Lens' RejectVPCPeeringConnectionResponse (Maybe Bool)
-rvpcrsReturn = lens _rvpcrsReturn (\ s a -> s{_rvpcrsReturn = a});
-
--- | -- | The response status code.
-rvpcrsResponseStatus :: Lens' RejectVPCPeeringConnectionResponse Int
-rvpcrsResponseStatus = lens _rvpcrsResponseStatus (\ s a -> s{_rvpcrsResponseStatus = a});
-
-instance NFData RejectVPCPeeringConnectionResponse
diff --git a/gen/Network/AWS/EC2/ReleaseAddress.hs b/gen/Network/AWS/EC2/ReleaseAddress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReleaseAddress.hs
+++ /dev/null
@@ -1,127 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReleaseAddress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Releases the specified Elastic IP address.
---
---
--- After releasing an Elastic IP address, it is released to the IP address pool and might be unavailable to you. Be sure to update your DNS records and any servers or devices that communicate with the address. If you attempt to release an Elastic IP address that you already released, you'll get an @AuthFailure@ error if the address is already allocated to another AWS account.
---
--- [EC2-Classic, default VPC] Releasing an Elastic IP address automatically disassociates it from any instance that it's associated with. To disassociate an Elastic IP address without releasing it, use 'DisassociateAddress' .
---
--- [Nondefault VPC] You must use 'DisassociateAddress' to disassociate the Elastic IP address before you try to release it. Otherwise, Amazon EC2 returns an error (@InvalidIPAddress.InUse@ ).
---
-module Network.AWS.EC2.ReleaseAddress
-    (
-    -- * Creating a Request
-      releaseAddress
-    , ReleaseAddress
-    -- * Request Lenses
-    , raAllocationId
-    , raPublicIP
-    , raDryRun
-
-    -- * Destructuring the Response
-    , releaseAddressResponse
-    , ReleaseAddressResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReleaseAddress.
---
---
---
--- /See:/ 'releaseAddress' smart constructor.
-data ReleaseAddress = ReleaseAddress'
-    { _raAllocationId :: !(Maybe Text)
-    , _raPublicIP     :: !(Maybe Text)
-    , _raDryRun       :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReleaseAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'raAllocationId' - [EC2-VPC] The allocation ID. Required for EC2-VPC.
---
--- * 'raPublicIP' - [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
---
--- * 'raDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-releaseAddress
-    :: ReleaseAddress
-releaseAddress =
-    ReleaseAddress'
-    { _raAllocationId = Nothing
-    , _raPublicIP = Nothing
-    , _raDryRun = Nothing
-    }
-
--- | [EC2-VPC] The allocation ID. Required for EC2-VPC.
-raAllocationId :: Lens' ReleaseAddress (Maybe Text)
-raAllocationId = lens _raAllocationId (\ s a -> s{_raAllocationId = a});
-
--- | [EC2-Classic] The Elastic IP address. Required for EC2-Classic.
-raPublicIP :: Lens' ReleaseAddress (Maybe Text)
-raPublicIP = lens _raPublicIP (\ s a -> s{_raPublicIP = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-raDryRun :: Lens' ReleaseAddress (Maybe Bool)
-raDryRun = lens _raDryRun (\ s a -> s{_raDryRun = a});
-
-instance AWSRequest ReleaseAddress where
-        type Rs ReleaseAddress = ReleaseAddressResponse
-        request = postQuery ec2
-        response = receiveNull ReleaseAddressResponse'
-
-instance Hashable ReleaseAddress
-
-instance NFData ReleaseAddress
-
-instance ToHeaders ReleaseAddress where
-        toHeaders = const mempty
-
-instance ToPath ReleaseAddress where
-        toPath = const "/"
-
-instance ToQuery ReleaseAddress where
-        toQuery ReleaseAddress'{..}
-          = mconcat
-              ["Action" =: ("ReleaseAddress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AllocationId" =: _raAllocationId,
-               "PublicIp" =: _raPublicIP, "DryRun" =: _raDryRun]
-
--- | /See:/ 'releaseAddressResponse' smart constructor.
-data ReleaseAddressResponse =
-    ReleaseAddressResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReleaseAddressResponse' with the minimum fields required to make a request.
---
-releaseAddressResponse
-    :: ReleaseAddressResponse
-releaseAddressResponse = ReleaseAddressResponse'
-
-instance NFData ReleaseAddressResponse
diff --git a/gen/Network/AWS/EC2/ReleaseHosts.hs b/gen/Network/AWS/EC2/ReleaseHosts.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReleaseHosts.hs
+++ /dev/null
@@ -1,150 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReleaseHosts
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- When you no longer want to use an On-Demand Dedicated Host it can be released. On-Demand billing is stopped and the host goes into @released@ state. The host ID of Dedicated Hosts that have been released can no longer be specified in another request, e.g., ModifyHosts. You must stop or terminate all instances on a host before it can be released.
---
---
--- When Dedicated Hosts are released, it make take some time for them to stop counting toward your limit and you may receive capacity errors when trying to allocate new Dedicated hosts. Try waiting a few minutes, and then try again.
---
--- Released hosts will still appear in a 'DescribeHosts' response.
---
-module Network.AWS.EC2.ReleaseHosts
-    (
-    -- * Creating a Request
-      releaseHosts
-    , ReleaseHosts
-    -- * Request Lenses
-    , rhHostIds
-
-    -- * Destructuring the Response
-    , releaseHostsResponse
-    , ReleaseHostsResponse
-    -- * Response Lenses
-    , rhrsUnsuccessful
-    , rhrsSuccessful
-    , rhrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReleaseHosts.
---
---
---
--- /See:/ 'releaseHosts' smart constructor.
-newtype ReleaseHosts = ReleaseHosts'
-    { _rhHostIds :: [Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReleaseHosts' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rhHostIds' - The IDs of the Dedicated Hosts you want to release.
-releaseHosts
-    :: ReleaseHosts
-releaseHosts =
-    ReleaseHosts'
-    { _rhHostIds = mempty
-    }
-
--- | The IDs of the Dedicated Hosts you want to release.
-rhHostIds :: Lens' ReleaseHosts [Text]
-rhHostIds = lens _rhHostIds (\ s a -> s{_rhHostIds = a}) . _Coerce;
-
-instance AWSRequest ReleaseHosts where
-        type Rs ReleaseHosts = ReleaseHostsResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ReleaseHostsResponse' <$>
-                   (x .@? "unsuccessful" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*>
-                     (x .@? "successful" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ReleaseHosts
-
-instance NFData ReleaseHosts
-
-instance ToHeaders ReleaseHosts where
-        toHeaders = const mempty
-
-instance ToPath ReleaseHosts where
-        toPath = const "/"
-
-instance ToQuery ReleaseHosts where
-        toQuery ReleaseHosts'{..}
-          = mconcat
-              ["Action" =: ("ReleaseHosts" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               toQueryList "HostId" _rhHostIds]
-
--- | Contains the output of ReleaseHosts.
---
---
---
--- /See:/ 'releaseHostsResponse' smart constructor.
-data ReleaseHostsResponse = ReleaseHostsResponse'
-    { _rhrsUnsuccessful   :: !(Maybe [UnsuccessfulItem])
-    , _rhrsSuccessful     :: !(Maybe [Text])
-    , _rhrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReleaseHostsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rhrsUnsuccessful' - The IDs of the Dedicated Hosts that could not be released, including an error message.
---
--- * 'rhrsSuccessful' - The IDs of the Dedicated Hosts that were successfully released.
---
--- * 'rhrsResponseStatus' - -- | The response status code.
-releaseHostsResponse
-    :: Int -- ^ 'rhrsResponseStatus'
-    -> ReleaseHostsResponse
-releaseHostsResponse pResponseStatus_ =
-    ReleaseHostsResponse'
-    { _rhrsUnsuccessful = Nothing
-    , _rhrsSuccessful = Nothing
-    , _rhrsResponseStatus = pResponseStatus_
-    }
-
--- | The IDs of the Dedicated Hosts that could not be released, including an error message.
-rhrsUnsuccessful :: Lens' ReleaseHostsResponse [UnsuccessfulItem]
-rhrsUnsuccessful = lens _rhrsUnsuccessful (\ s a -> s{_rhrsUnsuccessful = a}) . _Default . _Coerce;
-
--- | The IDs of the Dedicated Hosts that were successfully released.
-rhrsSuccessful :: Lens' ReleaseHostsResponse [Text]
-rhrsSuccessful = lens _rhrsSuccessful (\ s a -> s{_rhrsSuccessful = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-rhrsResponseStatus :: Lens' ReleaseHostsResponse Int
-rhrsResponseStatus = lens _rhrsResponseStatus (\ s a -> s{_rhrsResponseStatus = a});
-
-instance NFData ReleaseHostsResponse
diff --git a/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs b/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs
+++ /dev/null
@@ -1,157 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReplaceNetworkACLAssociation
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Changes which network ACL a subnet is associated with. By default when you create a subnet, it's automatically associated with the default network ACL. For more information about network ACLs, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs> in the /Amazon Virtual Private Cloud User Guide/ .
---
---
-module Network.AWS.EC2.ReplaceNetworkACLAssociation
-    (
-    -- * Creating a Request
-      replaceNetworkACLAssociation
-    , ReplaceNetworkACLAssociation
-    -- * Request Lenses
-    , rnaaDryRun
-    , rnaaAssociationId
-    , rnaaNetworkACLId
-
-    -- * Destructuring the Response
-    , replaceNetworkACLAssociationResponse
-    , ReplaceNetworkACLAssociationResponse
-    -- * Response Lenses
-    , rnaarsNewAssociationId
-    , rnaarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReplaceNetworkAclAssociation.
---
---
---
--- /See:/ 'replaceNetworkACLAssociation' smart constructor.
-data ReplaceNetworkACLAssociation = ReplaceNetworkACLAssociation'
-    { _rnaaDryRun        :: !(Maybe Bool)
-    , _rnaaAssociationId :: !Text
-    , _rnaaNetworkACLId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceNetworkACLAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rnaaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rnaaAssociationId' - The ID of the current association between the original network ACL and the subnet.
---
--- * 'rnaaNetworkACLId' - The ID of the new network ACL to associate with the subnet.
-replaceNetworkACLAssociation
-    :: Text -- ^ 'rnaaAssociationId'
-    -> Text -- ^ 'rnaaNetworkACLId'
-    -> ReplaceNetworkACLAssociation
-replaceNetworkACLAssociation pAssociationId_ pNetworkACLId_ =
-    ReplaceNetworkACLAssociation'
-    { _rnaaDryRun = Nothing
-    , _rnaaAssociationId = pAssociationId_
-    , _rnaaNetworkACLId = pNetworkACLId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rnaaDryRun :: Lens' ReplaceNetworkACLAssociation (Maybe Bool)
-rnaaDryRun = lens _rnaaDryRun (\ s a -> s{_rnaaDryRun = a});
-
--- | The ID of the current association between the original network ACL and the subnet.
-rnaaAssociationId :: Lens' ReplaceNetworkACLAssociation Text
-rnaaAssociationId = lens _rnaaAssociationId (\ s a -> s{_rnaaAssociationId = a});
-
--- | The ID of the new network ACL to associate with the subnet.
-rnaaNetworkACLId :: Lens' ReplaceNetworkACLAssociation Text
-rnaaNetworkACLId = lens _rnaaNetworkACLId (\ s a -> s{_rnaaNetworkACLId = a});
-
-instance AWSRequest ReplaceNetworkACLAssociation
-         where
-        type Rs ReplaceNetworkACLAssociation =
-             ReplaceNetworkACLAssociationResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ReplaceNetworkACLAssociationResponse' <$>
-                   (x .@? "newAssociationId") <*> (pure (fromEnum s)))
-
-instance Hashable ReplaceNetworkACLAssociation
-
-instance NFData ReplaceNetworkACLAssociation
-
-instance ToHeaders ReplaceNetworkACLAssociation where
-        toHeaders = const mempty
-
-instance ToPath ReplaceNetworkACLAssociation where
-        toPath = const "/"
-
-instance ToQuery ReplaceNetworkACLAssociation where
-        toQuery ReplaceNetworkACLAssociation'{..}
-          = mconcat
-              ["Action" =:
-                 ("ReplaceNetworkAclAssociation" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _rnaaDryRun,
-               "AssociationId" =: _rnaaAssociationId,
-               "NetworkAclId" =: _rnaaNetworkACLId]
-
--- | Contains the output of ReplaceNetworkAclAssociation.
---
---
---
--- /See:/ 'replaceNetworkACLAssociationResponse' smart constructor.
-data ReplaceNetworkACLAssociationResponse = ReplaceNetworkACLAssociationResponse'
-    { _rnaarsNewAssociationId :: !(Maybe Text)
-    , _rnaarsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceNetworkACLAssociationResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rnaarsNewAssociationId' - The ID of the new association.
---
--- * 'rnaarsResponseStatus' - -- | The response status code.
-replaceNetworkACLAssociationResponse
-    :: Int -- ^ 'rnaarsResponseStatus'
-    -> ReplaceNetworkACLAssociationResponse
-replaceNetworkACLAssociationResponse pResponseStatus_ =
-    ReplaceNetworkACLAssociationResponse'
-    { _rnaarsNewAssociationId = Nothing
-    , _rnaarsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the new association.
-rnaarsNewAssociationId :: Lens' ReplaceNetworkACLAssociationResponse (Maybe Text)
-rnaarsNewAssociationId = lens _rnaarsNewAssociationId (\ s a -> s{_rnaarsNewAssociationId = a});
-
--- | -- | The response status code.
-rnaarsResponseStatus :: Lens' ReplaceNetworkACLAssociationResponse Int
-rnaarsResponseStatus = lens _rnaarsResponseStatus (\ s a -> s{_rnaarsResponseStatus = a});
-
-instance NFData ReplaceNetworkACLAssociationResponse
diff --git a/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs b/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs
+++ /dev/null
@@ -1,200 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReplaceNetworkACLEntry
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Replaces an entry (rule) in a network ACL. For more information about network ACLs, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs> in the /Amazon Virtual Private Cloud User Guide/ .
---
---
-module Network.AWS.EC2.ReplaceNetworkACLEntry
-    (
-    -- * Creating a Request
-      replaceNetworkACLEntry
-    , ReplaceNetworkACLEntry
-    -- * Request Lenses
-    , rnaeIPv6CidrBlock
-    , rnaeICMPTypeCode
-    , rnaePortRange
-    , rnaeCidrBlock
-    , rnaeDryRun
-    , rnaeNetworkACLId
-    , rnaeRuleNumber
-    , rnaeProtocol
-    , rnaeRuleAction
-    , rnaeEgress
-
-    -- * Destructuring the Response
-    , replaceNetworkACLEntryResponse
-    , ReplaceNetworkACLEntryResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReplaceNetworkAclEntry.
---
---
---
--- /See:/ 'replaceNetworkACLEntry' smart constructor.
-data ReplaceNetworkACLEntry = ReplaceNetworkACLEntry'
-    { _rnaeIPv6CidrBlock :: !(Maybe Text)
-    , _rnaeICMPTypeCode  :: !(Maybe ICMPTypeCode)
-    , _rnaePortRange     :: !(Maybe PortRange)
-    , _rnaeCidrBlock     :: !(Maybe Text)
-    , _rnaeDryRun        :: !(Maybe Bool)
-    , _rnaeNetworkACLId  :: !Text
-    , _rnaeRuleNumber    :: !Int
-    , _rnaeProtocol      :: !Text
-    , _rnaeRuleAction    :: !RuleAction
-    , _rnaeEgress        :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceNetworkACLEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rnaeIPv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation (for example @2001:bd8:1234:1a00::/64@ ).
---
--- * 'rnaeICMPTypeCode' - ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying the ICMP (1) protocol, or protocol 58 (ICMPv6) with an IPv6 CIDR block.
---
--- * 'rnaePortRange' - TCP or UDP protocols: The range of ports the rule applies to. Required if specifying TCP (6) or UDP (17) for the protocol.
---
--- * 'rnaeCidrBlock' - The IPv4 network range to allow or deny, in CIDR notation (for example @172.16.0.0/24@ ).
---
--- * 'rnaeDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rnaeNetworkACLId' - The ID of the ACL.
---
--- * 'rnaeRuleNumber' - The rule number of the entry to replace.
---
--- * 'rnaeProtocol' - The IP protocol. You can specify @all@ or @-1@ to mean all protocols. If you specify @all@ , @-1@ , or a protocol number other than @tcp@ , @udp@ , or @icmp@ , traffic on all ports is allowed, regardless of any ports or ICMP types or codes you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.
---
--- * 'rnaeRuleAction' - Indicates whether to allow or deny the traffic that matches the rule.
---
--- * 'rnaeEgress' - Indicates whether to replace the egress rule. Default: If no value is specified, we replace the ingress rule.
-replaceNetworkACLEntry
-    :: Text -- ^ 'rnaeNetworkACLId'
-    -> Int -- ^ 'rnaeRuleNumber'
-    -> Text -- ^ 'rnaeProtocol'
-    -> RuleAction -- ^ 'rnaeRuleAction'
-    -> Bool -- ^ 'rnaeEgress'
-    -> ReplaceNetworkACLEntry
-replaceNetworkACLEntry pNetworkACLId_ pRuleNumber_ pProtocol_ pRuleAction_ pEgress_ =
-    ReplaceNetworkACLEntry'
-    { _rnaeIPv6CidrBlock = Nothing
-    , _rnaeICMPTypeCode = Nothing
-    , _rnaePortRange = Nothing
-    , _rnaeCidrBlock = Nothing
-    , _rnaeDryRun = Nothing
-    , _rnaeNetworkACLId = pNetworkACLId_
-    , _rnaeRuleNumber = pRuleNumber_
-    , _rnaeProtocol = pProtocol_
-    , _rnaeRuleAction = pRuleAction_
-    , _rnaeEgress = pEgress_
-    }
-
--- | The IPv6 network range to allow or deny, in CIDR notation (for example @2001:bd8:1234:1a00::/64@ ).
-rnaeIPv6CidrBlock :: Lens' ReplaceNetworkACLEntry (Maybe Text)
-rnaeIPv6CidrBlock = lens _rnaeIPv6CidrBlock (\ s a -> s{_rnaeIPv6CidrBlock = a});
-
--- | ICMP protocol: The ICMP or ICMPv6 type and code. Required if specifying the ICMP (1) protocol, or protocol 58 (ICMPv6) with an IPv6 CIDR block.
-rnaeICMPTypeCode :: Lens' ReplaceNetworkACLEntry (Maybe ICMPTypeCode)
-rnaeICMPTypeCode = lens _rnaeICMPTypeCode (\ s a -> s{_rnaeICMPTypeCode = a});
-
--- | TCP or UDP protocols: The range of ports the rule applies to. Required if specifying TCP (6) or UDP (17) for the protocol.
-rnaePortRange :: Lens' ReplaceNetworkACLEntry (Maybe PortRange)
-rnaePortRange = lens _rnaePortRange (\ s a -> s{_rnaePortRange = a});
-
--- | The IPv4 network range to allow or deny, in CIDR notation (for example @172.16.0.0/24@ ).
-rnaeCidrBlock :: Lens' ReplaceNetworkACLEntry (Maybe Text)
-rnaeCidrBlock = lens _rnaeCidrBlock (\ s a -> s{_rnaeCidrBlock = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rnaeDryRun :: Lens' ReplaceNetworkACLEntry (Maybe Bool)
-rnaeDryRun = lens _rnaeDryRun (\ s a -> s{_rnaeDryRun = a});
-
--- | The ID of the ACL.
-rnaeNetworkACLId :: Lens' ReplaceNetworkACLEntry Text
-rnaeNetworkACLId = lens _rnaeNetworkACLId (\ s a -> s{_rnaeNetworkACLId = a});
-
--- | The rule number of the entry to replace.
-rnaeRuleNumber :: Lens' ReplaceNetworkACLEntry Int
-rnaeRuleNumber = lens _rnaeRuleNumber (\ s a -> s{_rnaeRuleNumber = a});
-
--- | The IP protocol. You can specify @all@ or @-1@ to mean all protocols. If you specify @all@ , @-1@ , or a protocol number other than @tcp@ , @udp@ , or @icmp@ , traffic on all ports is allowed, regardless of any ports or ICMP types or codes you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv4 CIDR block, traffic for all ICMP types and codes allowed, regardless of any that you specify. If you specify protocol @58@ (ICMPv6) and specify an IPv6 CIDR block, you must specify an ICMP type and code.
-rnaeProtocol :: Lens' ReplaceNetworkACLEntry Text
-rnaeProtocol = lens _rnaeProtocol (\ s a -> s{_rnaeProtocol = a});
-
--- | Indicates whether to allow or deny the traffic that matches the rule.
-rnaeRuleAction :: Lens' ReplaceNetworkACLEntry RuleAction
-rnaeRuleAction = lens _rnaeRuleAction (\ s a -> s{_rnaeRuleAction = a});
-
--- | Indicates whether to replace the egress rule. Default: If no value is specified, we replace the ingress rule.
-rnaeEgress :: Lens' ReplaceNetworkACLEntry Bool
-rnaeEgress = lens _rnaeEgress (\ s a -> s{_rnaeEgress = a});
-
-instance AWSRequest ReplaceNetworkACLEntry where
-        type Rs ReplaceNetworkACLEntry =
-             ReplaceNetworkACLEntryResponse
-        request = postQuery ec2
-        response
-          = receiveNull ReplaceNetworkACLEntryResponse'
-
-instance Hashable ReplaceNetworkACLEntry
-
-instance NFData ReplaceNetworkACLEntry
-
-instance ToHeaders ReplaceNetworkACLEntry where
-        toHeaders = const mempty
-
-instance ToPath ReplaceNetworkACLEntry where
-        toPath = const "/"
-
-instance ToQuery ReplaceNetworkACLEntry where
-        toQuery ReplaceNetworkACLEntry'{..}
-          = mconcat
-              ["Action" =:
-                 ("ReplaceNetworkAclEntry" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Ipv6CidrBlock" =: _rnaeIPv6CidrBlock,
-               "Icmp" =: _rnaeICMPTypeCode,
-               "PortRange" =: _rnaePortRange,
-               "CidrBlock" =: _rnaeCidrBlock,
-               "DryRun" =: _rnaeDryRun,
-               "NetworkAclId" =: _rnaeNetworkACLId,
-               "RuleNumber" =: _rnaeRuleNumber,
-               "Protocol" =: _rnaeProtocol,
-               "RuleAction" =: _rnaeRuleAction,
-               "Egress" =: _rnaeEgress]
-
--- | /See:/ 'replaceNetworkACLEntryResponse' smart constructor.
-data ReplaceNetworkACLEntryResponse =
-    ReplaceNetworkACLEntryResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceNetworkACLEntryResponse' with the minimum fields required to make a request.
---
-replaceNetworkACLEntryResponse
-    :: ReplaceNetworkACLEntryResponse
-replaceNetworkACLEntryResponse = ReplaceNetworkACLEntryResponse'
-
-instance NFData ReplaceNetworkACLEntryResponse
diff --git a/gen/Network/AWS/EC2/ReplaceRoute.hs b/gen/Network/AWS/EC2/ReplaceRoute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReplaceRoute.hs
+++ /dev/null
@@ -1,197 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReplaceRoute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Replaces an existing route within a route table in a VPC. You must provide only one of the following: Internet gateway or virtual private gateway, NAT instance, NAT gateway, VPC peering connection, network interface, or egress-only Internet gateway.
---
---
--- For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.ReplaceRoute
-    (
-    -- * Creating a Request
-      replaceRoute
-    , ReplaceRoute
-    -- * Request Lenses
-    , rrVPCPeeringConnectionId
-    , rrInstanceId
-    , rrEgressOnlyInternetGatewayId
-    , rrDestinationIPv6CidrBlock
-    , rrNatGatewayId
-    , rrNetworkInterfaceId
-    , rrGatewayId
-    , rrDryRun
-    , rrDestinationCidrBlock
-    , rrRouteTableId
-
-    -- * Destructuring the Response
-    , replaceRouteResponse
-    , ReplaceRouteResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReplaceRoute.
---
---
---
--- /See:/ 'replaceRoute' smart constructor.
-data ReplaceRoute = ReplaceRoute'
-    { _rrVPCPeeringConnectionId      :: !(Maybe Text)
-    , _rrInstanceId                  :: !(Maybe Text)
-    , _rrEgressOnlyInternetGatewayId :: !(Maybe Text)
-    , _rrDestinationIPv6CidrBlock    :: !(Maybe Text)
-    , _rrNatGatewayId                :: !(Maybe Text)
-    , _rrNetworkInterfaceId          :: !(Maybe Text)
-    , _rrGatewayId                   :: !(Maybe Text)
-    , _rrDryRun                      :: !(Maybe Bool)
-    , _rrDestinationCidrBlock        :: !(Maybe Text)
-    , _rrRouteTableId                :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrVPCPeeringConnectionId' - The ID of a VPC peering connection.
---
--- * 'rrInstanceId' - The ID of a NAT instance in your VPC.
---
--- * 'rrEgressOnlyInternetGatewayId' - [IPv6 traffic only] The ID of an egress-only Internet gateway.
---
--- * 'rrDestinationIPv6CidrBlock' - The IPv6 CIDR address block used for the destination match. The value you provide must match the CIDR of an existing route in the table.
---
--- * 'rrNatGatewayId' - [IPv4 traffic only] The ID of a NAT gateway.
---
--- * 'rrNetworkInterfaceId' - The ID of a network interface.
---
--- * 'rrGatewayId' - The ID of an Internet gateway or virtual private gateway.
---
--- * 'rrDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rrDestinationCidrBlock' - The IPv4 CIDR address block used for the destination match. The value you provide must match the CIDR of an existing route in the table.
---
--- * 'rrRouteTableId' - The ID of the route table.
-replaceRoute
-    :: Text -- ^ 'rrRouteTableId'
-    -> ReplaceRoute
-replaceRoute pRouteTableId_ =
-    ReplaceRoute'
-    { _rrVPCPeeringConnectionId = Nothing
-    , _rrInstanceId = Nothing
-    , _rrEgressOnlyInternetGatewayId = Nothing
-    , _rrDestinationIPv6CidrBlock = Nothing
-    , _rrNatGatewayId = Nothing
-    , _rrNetworkInterfaceId = Nothing
-    , _rrGatewayId = Nothing
-    , _rrDryRun = Nothing
-    , _rrDestinationCidrBlock = Nothing
-    , _rrRouteTableId = pRouteTableId_
-    }
-
--- | The ID of a VPC peering connection.
-rrVPCPeeringConnectionId :: Lens' ReplaceRoute (Maybe Text)
-rrVPCPeeringConnectionId = lens _rrVPCPeeringConnectionId (\ s a -> s{_rrVPCPeeringConnectionId = a});
-
--- | The ID of a NAT instance in your VPC.
-rrInstanceId :: Lens' ReplaceRoute (Maybe Text)
-rrInstanceId = lens _rrInstanceId (\ s a -> s{_rrInstanceId = a});
-
--- | [IPv6 traffic only] The ID of an egress-only Internet gateway.
-rrEgressOnlyInternetGatewayId :: Lens' ReplaceRoute (Maybe Text)
-rrEgressOnlyInternetGatewayId = lens _rrEgressOnlyInternetGatewayId (\ s a -> s{_rrEgressOnlyInternetGatewayId = a});
-
--- | The IPv6 CIDR address block used for the destination match. The value you provide must match the CIDR of an existing route in the table.
-rrDestinationIPv6CidrBlock :: Lens' ReplaceRoute (Maybe Text)
-rrDestinationIPv6CidrBlock = lens _rrDestinationIPv6CidrBlock (\ s a -> s{_rrDestinationIPv6CidrBlock = a});
-
--- | [IPv4 traffic only] The ID of a NAT gateway.
-rrNatGatewayId :: Lens' ReplaceRoute (Maybe Text)
-rrNatGatewayId = lens _rrNatGatewayId (\ s a -> s{_rrNatGatewayId = a});
-
--- | The ID of a network interface.
-rrNetworkInterfaceId :: Lens' ReplaceRoute (Maybe Text)
-rrNetworkInterfaceId = lens _rrNetworkInterfaceId (\ s a -> s{_rrNetworkInterfaceId = a});
-
--- | The ID of an Internet gateway or virtual private gateway.
-rrGatewayId :: Lens' ReplaceRoute (Maybe Text)
-rrGatewayId = lens _rrGatewayId (\ s a -> s{_rrGatewayId = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rrDryRun :: Lens' ReplaceRoute (Maybe Bool)
-rrDryRun = lens _rrDryRun (\ s a -> s{_rrDryRun = a});
-
--- | The IPv4 CIDR address block used for the destination match. The value you provide must match the CIDR of an existing route in the table.
-rrDestinationCidrBlock :: Lens' ReplaceRoute (Maybe Text)
-rrDestinationCidrBlock = lens _rrDestinationCidrBlock (\ s a -> s{_rrDestinationCidrBlock = a});
-
--- | The ID of the route table.
-rrRouteTableId :: Lens' ReplaceRoute Text
-rrRouteTableId = lens _rrRouteTableId (\ s a -> s{_rrRouteTableId = a});
-
-instance AWSRequest ReplaceRoute where
-        type Rs ReplaceRoute = ReplaceRouteResponse
-        request = postQuery ec2
-        response = receiveNull ReplaceRouteResponse'
-
-instance Hashable ReplaceRoute
-
-instance NFData ReplaceRoute
-
-instance ToHeaders ReplaceRoute where
-        toHeaders = const mempty
-
-instance ToPath ReplaceRoute where
-        toPath = const "/"
-
-instance ToQuery ReplaceRoute where
-        toQuery ReplaceRoute'{..}
-          = mconcat
-              ["Action" =: ("ReplaceRoute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "VpcPeeringConnectionId" =:
-                 _rrVPCPeeringConnectionId,
-               "InstanceId" =: _rrInstanceId,
-               "EgressOnlyInternetGatewayId" =:
-                 _rrEgressOnlyInternetGatewayId,
-               "DestinationIpv6CidrBlock" =:
-                 _rrDestinationIPv6CidrBlock,
-               "NatGatewayId" =: _rrNatGatewayId,
-               "NetworkInterfaceId" =: _rrNetworkInterfaceId,
-               "GatewayId" =: _rrGatewayId, "DryRun" =: _rrDryRun,
-               "DestinationCidrBlock" =: _rrDestinationCidrBlock,
-               "RouteTableId" =: _rrRouteTableId]
-
--- | /See:/ 'replaceRouteResponse' smart constructor.
-data ReplaceRouteResponse =
-    ReplaceRouteResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceRouteResponse' with the minimum fields required to make a request.
---
-replaceRouteResponse
-    :: ReplaceRouteResponse
-replaceRouteResponse = ReplaceRouteResponse'
-
-instance NFData ReplaceRouteResponse
diff --git a/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs b/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs
+++ /dev/null
@@ -1,159 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReplaceRouteTableAssociation
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Changes the route table associated with a given subnet in a VPC. After the operation completes, the subnet uses the routes in the new route table it's associated with. For more information about route tables, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables> in the /Amazon Virtual Private Cloud User Guide/ .
---
---
--- You can also use ReplaceRouteTableAssociation to change which table is the main route table in the VPC. You just specify the main route table's association ID and the route table to be the new main route table.
---
-module Network.AWS.EC2.ReplaceRouteTableAssociation
-    (
-    -- * Creating a Request
-      replaceRouteTableAssociation
-    , ReplaceRouteTableAssociation
-    -- * Request Lenses
-    , rrtaDryRun
-    , rrtaAssociationId
-    , rrtaRouteTableId
-
-    -- * Destructuring the Response
-    , replaceRouteTableAssociationResponse
-    , ReplaceRouteTableAssociationResponse
-    -- * Response Lenses
-    , rrtarsNewAssociationId
-    , rrtarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReplaceRouteTableAssociation.
---
---
---
--- /See:/ 'replaceRouteTableAssociation' smart constructor.
-data ReplaceRouteTableAssociation = ReplaceRouteTableAssociation'
-    { _rrtaDryRun        :: !(Maybe Bool)
-    , _rrtaAssociationId :: !Text
-    , _rrtaRouteTableId  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceRouteTableAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrtaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rrtaAssociationId' - The association ID.
---
--- * 'rrtaRouteTableId' - The ID of the new route table to associate with the subnet.
-replaceRouteTableAssociation
-    :: Text -- ^ 'rrtaAssociationId'
-    -> Text -- ^ 'rrtaRouteTableId'
-    -> ReplaceRouteTableAssociation
-replaceRouteTableAssociation pAssociationId_ pRouteTableId_ =
-    ReplaceRouteTableAssociation'
-    { _rrtaDryRun = Nothing
-    , _rrtaAssociationId = pAssociationId_
-    , _rrtaRouteTableId = pRouteTableId_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rrtaDryRun :: Lens' ReplaceRouteTableAssociation (Maybe Bool)
-rrtaDryRun = lens _rrtaDryRun (\ s a -> s{_rrtaDryRun = a});
-
--- | The association ID.
-rrtaAssociationId :: Lens' ReplaceRouteTableAssociation Text
-rrtaAssociationId = lens _rrtaAssociationId (\ s a -> s{_rrtaAssociationId = a});
-
--- | The ID of the new route table to associate with the subnet.
-rrtaRouteTableId :: Lens' ReplaceRouteTableAssociation Text
-rrtaRouteTableId = lens _rrtaRouteTableId (\ s a -> s{_rrtaRouteTableId = a});
-
-instance AWSRequest ReplaceRouteTableAssociation
-         where
-        type Rs ReplaceRouteTableAssociation =
-             ReplaceRouteTableAssociationResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 ReplaceRouteTableAssociationResponse' <$>
-                   (x .@? "newAssociationId") <*> (pure (fromEnum s)))
-
-instance Hashable ReplaceRouteTableAssociation
-
-instance NFData ReplaceRouteTableAssociation
-
-instance ToHeaders ReplaceRouteTableAssociation where
-        toHeaders = const mempty
-
-instance ToPath ReplaceRouteTableAssociation where
-        toPath = const "/"
-
-instance ToQuery ReplaceRouteTableAssociation where
-        toQuery ReplaceRouteTableAssociation'{..}
-          = mconcat
-              ["Action" =:
-                 ("ReplaceRouteTableAssociation" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _rrtaDryRun,
-               "AssociationId" =: _rrtaAssociationId,
-               "RouteTableId" =: _rrtaRouteTableId]
-
--- | Contains the output of ReplaceRouteTableAssociation.
---
---
---
--- /See:/ 'replaceRouteTableAssociationResponse' smart constructor.
-data ReplaceRouteTableAssociationResponse = ReplaceRouteTableAssociationResponse'
-    { _rrtarsNewAssociationId :: !(Maybe Text)
-    , _rrtarsResponseStatus   :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReplaceRouteTableAssociationResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrtarsNewAssociationId' - The ID of the new association.
---
--- * 'rrtarsResponseStatus' - -- | The response status code.
-replaceRouteTableAssociationResponse
-    :: Int -- ^ 'rrtarsResponseStatus'
-    -> ReplaceRouteTableAssociationResponse
-replaceRouteTableAssociationResponse pResponseStatus_ =
-    ReplaceRouteTableAssociationResponse'
-    { _rrtarsNewAssociationId = Nothing
-    , _rrtarsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the new association.
-rrtarsNewAssociationId :: Lens' ReplaceRouteTableAssociationResponse (Maybe Text)
-rrtarsNewAssociationId = lens _rrtarsNewAssociationId (\ s a -> s{_rrtarsNewAssociationId = a});
-
--- | -- | The response status code.
-rrtarsResponseStatus :: Lens' ReplaceRouteTableAssociationResponse Int
-rrtarsResponseStatus = lens _rrtarsResponseStatus (\ s a -> s{_rrtarsResponseStatus = a});
-
-instance NFData ReplaceRouteTableAssociationResponse
diff --git a/gen/Network/AWS/EC2/ReportInstanceStatus.hs b/gen/Network/AWS/EC2/ReportInstanceStatus.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ReportInstanceStatus.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ReportInstanceStatus
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Submits feedback about the status of an instance. The instance must be in the @running@ state. If your experience with the instance differs from the instance status returned by 'DescribeInstanceStatus' , use 'ReportInstanceStatus' to report your experience with the instance. Amazon EC2 collects this information to improve the accuracy of status checks.
---
---
--- Use of this action does not change the value returned by 'DescribeInstanceStatus' .
---
-module Network.AWS.EC2.ReportInstanceStatus
-    (
-    -- * Creating a Request
-      reportInstanceStatus
-    , ReportInstanceStatus
-    -- * Request Lenses
-    , risStartTime
-    , risEndTime
-    , risDescription
-    , risDryRun
-    , risInstances
-    , risStatus
-    , risReasonCodes
-
-    -- * Destructuring the Response
-    , reportInstanceStatusResponse
-    , ReportInstanceStatusResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ReportInstanceStatus.
---
---
---
--- /See:/ 'reportInstanceStatus' smart constructor.
-data ReportInstanceStatus = ReportInstanceStatus'
-    { _risStartTime   :: !(Maybe ISO8601)
-    , _risEndTime     :: !(Maybe ISO8601)
-    , _risDescription :: !(Maybe Text)
-    , _risDryRun      :: !(Maybe Bool)
-    , _risInstances   :: ![Text]
-    , _risStatus      :: !ReportStatusType
-    , _risReasonCodes :: ![ReportInstanceReasonCodes]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReportInstanceStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'risStartTime' - The time at which the reported instance health state began.
---
--- * 'risEndTime' - The time at which the reported instance health state ended.
---
--- * 'risDescription' - Descriptive text about the health state of your instance.
---
--- * 'risDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'risInstances' - One or more instances.
---
--- * 'risStatus' - The status of all instances listed.
---
--- * 'risReasonCodes' - One or more reason codes that describes the health state of your instance.     * @instance-stuck-in-state@ : My instance is stuck in a state.     * @unresponsive@ : My instance is unresponsive.     * @not-accepting-credentials@ : My instance is not accepting my credentials.     * @password-not-available@ : A password is not available for my instance.     * @performance-network@ : My instance is experiencing performance problems which I believe are network related.     * @performance-instance-store@ : My instance is experiencing performance problems which I believe are related to the instance stores.     * @performance-ebs-volume@ : My instance is experiencing performance problems which I believe are related to an EBS volume.     * @performance-other@ : My instance is experiencing performance problems.     * @other@ : [explain using the description parameter]
-reportInstanceStatus
-    :: ReportStatusType -- ^ 'risStatus'
-    -> ReportInstanceStatus
-reportInstanceStatus pStatus_ =
-    ReportInstanceStatus'
-    { _risStartTime = Nothing
-    , _risEndTime = Nothing
-    , _risDescription = Nothing
-    , _risDryRun = Nothing
-    , _risInstances = mempty
-    , _risStatus = pStatus_
-    , _risReasonCodes = mempty
-    }
-
--- | The time at which the reported instance health state began.
-risStartTime :: Lens' ReportInstanceStatus (Maybe UTCTime)
-risStartTime = lens _risStartTime (\ s a -> s{_risStartTime = a}) . mapping _Time;
-
--- | The time at which the reported instance health state ended.
-risEndTime :: Lens' ReportInstanceStatus (Maybe UTCTime)
-risEndTime = lens _risEndTime (\ s a -> s{_risEndTime = a}) . mapping _Time;
-
--- | Descriptive text about the health state of your instance.
-risDescription :: Lens' ReportInstanceStatus (Maybe Text)
-risDescription = lens _risDescription (\ s a -> s{_risDescription = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-risDryRun :: Lens' ReportInstanceStatus (Maybe Bool)
-risDryRun = lens _risDryRun (\ s a -> s{_risDryRun = a});
-
--- | One or more instances.
-risInstances :: Lens' ReportInstanceStatus [Text]
-risInstances = lens _risInstances (\ s a -> s{_risInstances = a}) . _Coerce;
-
--- | The status of all instances listed.
-risStatus :: Lens' ReportInstanceStatus ReportStatusType
-risStatus = lens _risStatus (\ s a -> s{_risStatus = a});
-
--- | One or more reason codes that describes the health state of your instance.     * @instance-stuck-in-state@ : My instance is stuck in a state.     * @unresponsive@ : My instance is unresponsive.     * @not-accepting-credentials@ : My instance is not accepting my credentials.     * @password-not-available@ : A password is not available for my instance.     * @performance-network@ : My instance is experiencing performance problems which I believe are network related.     * @performance-instance-store@ : My instance is experiencing performance problems which I believe are related to the instance stores.     * @performance-ebs-volume@ : My instance is experiencing performance problems which I believe are related to an EBS volume.     * @performance-other@ : My instance is experiencing performance problems.     * @other@ : [explain using the description parameter]
-risReasonCodes :: Lens' ReportInstanceStatus [ReportInstanceReasonCodes]
-risReasonCodes = lens _risReasonCodes (\ s a -> s{_risReasonCodes = a}) . _Coerce;
-
-instance AWSRequest ReportInstanceStatus where
-        type Rs ReportInstanceStatus =
-             ReportInstanceStatusResponse
-        request = postQuery ec2
-        response = receiveNull ReportInstanceStatusResponse'
-
-instance Hashable ReportInstanceStatus
-
-instance NFData ReportInstanceStatus
-
-instance ToHeaders ReportInstanceStatus where
-        toHeaders = const mempty
-
-instance ToPath ReportInstanceStatus where
-        toPath = const "/"
-
-instance ToQuery ReportInstanceStatus where
-        toQuery ReportInstanceStatus'{..}
-          = mconcat
-              ["Action" =: ("ReportInstanceStatus" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "StartTime" =: _risStartTime,
-               "EndTime" =: _risEndTime,
-               "Description" =: _risDescription,
-               "DryRun" =: _risDryRun,
-               toQueryList "InstanceId" _risInstances,
-               "Status" =: _risStatus,
-               toQueryList "ReasonCode" _risReasonCodes]
-
--- | /See:/ 'reportInstanceStatusResponse' smart constructor.
-data ReportInstanceStatusResponse =
-    ReportInstanceStatusResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReportInstanceStatusResponse' with the minimum fields required to make a request.
---
-reportInstanceStatusResponse
-    :: ReportInstanceStatusResponse
-reportInstanceStatusResponse = ReportInstanceStatusResponse'
-
-instance NFData ReportInstanceStatusResponse
diff --git a/gen/Network/AWS/EC2/RequestSpotFleet.hs b/gen/Network/AWS/EC2/RequestSpotFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RequestSpotFleet.hs
+++ /dev/null
@@ -1,153 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RequestSpotFleet
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a Spot fleet request.
---
---
--- You can submit a single request that includes multiple launch specifications that vary by instance type, AMI, Availability Zone, or subnet.
---
--- By default, the Spot fleet requests Spot instances in the Spot 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.
---
--- 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.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html Spot Fleet Requests> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.RequestSpotFleet
-    (
-    -- * Creating a Request
-      requestSpotFleet
-    , RequestSpotFleet
-    -- * Request Lenses
-    , rsfDryRun
-    , rsfSpotFleetRequestConfig
-
-    -- * Destructuring the Response
-    , requestSpotFleetResponse
-    , RequestSpotFleetResponse
-    -- * Response Lenses
-    , rsfrsResponseStatus
-    , rsfrsSpotFleetRequestId
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RequestSpotFleet.
---
---
---
--- /See:/ 'requestSpotFleet' smart constructor.
-data RequestSpotFleet = RequestSpotFleet'
-    { _rsfDryRun                 :: !(Maybe Bool)
-    , _rsfSpotFleetRequestConfig :: !SpotFleetRequestConfigData
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestSpotFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsfDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rsfSpotFleetRequestConfig' - The configuration for the Spot fleet request.
-requestSpotFleet
-    :: SpotFleetRequestConfigData -- ^ 'rsfSpotFleetRequestConfig'
-    -> RequestSpotFleet
-requestSpotFleet pSpotFleetRequestConfig_ =
-    RequestSpotFleet'
-    { _rsfDryRun = Nothing
-    , _rsfSpotFleetRequestConfig = pSpotFleetRequestConfig_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rsfDryRun :: Lens' RequestSpotFleet (Maybe Bool)
-rsfDryRun = lens _rsfDryRun (\ s a -> s{_rsfDryRun = a});
-
--- | The configuration for the Spot fleet request.
-rsfSpotFleetRequestConfig :: Lens' RequestSpotFleet SpotFleetRequestConfigData
-rsfSpotFleetRequestConfig = lens _rsfSpotFleetRequestConfig (\ s a -> s{_rsfSpotFleetRequestConfig = a});
-
-instance AWSRequest RequestSpotFleet where
-        type Rs RequestSpotFleet = RequestSpotFleetResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 RequestSpotFleetResponse' <$>
-                   (pure (fromEnum s)) <*> (x .@ "spotFleetRequestId"))
-
-instance Hashable RequestSpotFleet
-
-instance NFData RequestSpotFleet
-
-instance ToHeaders RequestSpotFleet where
-        toHeaders = const mempty
-
-instance ToPath RequestSpotFleet where
-        toPath = const "/"
-
-instance ToQuery RequestSpotFleet where
-        toQuery RequestSpotFleet'{..}
-          = mconcat
-              ["Action" =: ("RequestSpotFleet" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _rsfDryRun,
-               "SpotFleetRequestConfig" =:
-                 _rsfSpotFleetRequestConfig]
-
--- | Contains the output of RequestSpotFleet.
---
---
---
--- /See:/ 'requestSpotFleetResponse' smart constructor.
-data RequestSpotFleetResponse = RequestSpotFleetResponse'
-    { _rsfrsResponseStatus     :: !Int
-    , _rsfrsSpotFleetRequestId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestSpotFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsfrsResponseStatus' - -- | The response status code.
---
--- * 'rsfrsSpotFleetRequestId' - The ID of the Spot fleet request.
-requestSpotFleetResponse
-    :: Int -- ^ 'rsfrsResponseStatus'
-    -> Text -- ^ 'rsfrsSpotFleetRequestId'
-    -> RequestSpotFleetResponse
-requestSpotFleetResponse pResponseStatus_ pSpotFleetRequestId_ =
-    RequestSpotFleetResponse'
-    { _rsfrsResponseStatus = pResponseStatus_
-    , _rsfrsSpotFleetRequestId = pSpotFleetRequestId_
-    }
-
--- | -- | The response status code.
-rsfrsResponseStatus :: Lens' RequestSpotFleetResponse Int
-rsfrsResponseStatus = lens _rsfrsResponseStatus (\ s a -> s{_rsfrsResponseStatus = a});
-
--- | The ID of the Spot fleet request.
-rsfrsSpotFleetRequestId :: Lens' RequestSpotFleetResponse Text
-rsfrsSpotFleetRequestId = lens _rsfrsSpotFleetRequestId (\ s a -> s{_rsfrsSpotFleetRequestId = a});
-
-instance NFData RequestSpotFleetResponse
diff --git a/gen/Network/AWS/EC2/RequestSpotInstances.hs b/gen/Network/AWS/EC2/RequestSpotInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RequestSpotInstances.hs
+++ /dev/null
@@ -1,236 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RequestSpotInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a Spot instance request. Spot instances are instances that Amazon EC2 launches when the bid price that you specify exceeds the current Spot price. Amazon EC2 periodically sets the Spot price based on available Spot Instance capacity and current Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html Spot Instance Requests> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.RequestSpotInstances
-    (
-    -- * Creating a Request
-      requestSpotInstances
-    , RequestSpotInstances
-    -- * Request Lenses
-    , rsisBlockDurationMinutes
-    , rsisClientToken
-    , rsisInstanceCount
-    , rsisLaunchSpecification
-    , rsisAvailabilityZoneGroup
-    , rsisValidUntil
-    , rsisLaunchGroup
-    , rsisType
-    , rsisValidFrom
-    , rsisDryRun
-    , rsisSpotPrice
-
-    -- * Destructuring the Response
-    , requestSpotInstancesResponse
-    , RequestSpotInstancesResponse
-    -- * Response Lenses
-    , rsirsSpotInstanceRequests
-    , rsirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RequestSpotInstances.
---
---
---
--- /See:/ 'requestSpotInstances' smart constructor.
-data RequestSpotInstances = RequestSpotInstances'
-    { _rsisBlockDurationMinutes  :: !(Maybe Int)
-    , _rsisClientToken           :: !(Maybe Text)
-    , _rsisInstanceCount         :: !(Maybe Int)
-    , _rsisLaunchSpecification   :: !(Maybe RequestSpotLaunchSpecification)
-    , _rsisAvailabilityZoneGroup :: !(Maybe Text)
-    , _rsisValidUntil            :: !(Maybe ISO8601)
-    , _rsisLaunchGroup           :: !(Maybe Text)
-    , _rsisType                  :: !(Maybe SpotInstanceType)
-    , _rsisValidFrom             :: !(Maybe ISO8601)
-    , _rsisDryRun                :: !(Maybe Bool)
-    , _rsisSpotPrice             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestSpotInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsisBlockDurationMinutes' - The required duration for the Spot instances (also known as Spot blocks), in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, or 360). The duration period starts as soon as your Spot instance receives its instance ID. At the end of the duration period, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. Note that you can't specify an Availability Zone group or a launch group if you specify a duration.
---
--- * 'rsisClientToken' - Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'rsisInstanceCount' - The maximum number of Spot instances to launch. Default: 1
---
--- * 'rsisLaunchSpecification' - Undocumented member.
---
--- * 'rsisAvailabilityZoneGroup' - The user-specified name for a logical grouping of bids. When you specify an Availability Zone group in a Spot Instance request, all Spot instances in the request are launched in the same Availability Zone. Instance proximity is maintained with this parameter, but the choice of Availability Zone is not. The group applies only to bids for Spot Instances of the same instance type. Any additional Spot instance requests that are specified with the same Availability Zone group name are launched in that same Availability Zone, as long as at least one instance from the group is still active. If there is no active instance running in the Availability Zone group that you specify for a new Spot instance request (all instances are terminated, the bid is expired, or the bid falls below current market), then Amazon EC2 launches the instance in any Availability Zone where the constraint can be met. Consequently, the subsequent set of Spot instances could be placed in a different zone from the original request, even if you specified the same Availability Zone group. Default: Instances are launched in any available Availability Zone.
---
--- * 'rsisValidUntil' - The end date of the request. If this is a one-time request, the request remains active until all instances launch, the request is canceled, or this date is reached. If the request is persistent, it remains active until it is canceled or this date and time is reached. Default: The request is effective indefinitely.
---
--- * 'rsisLaunchGroup' - The instance launch group. Launch groups are Spot instances that launch together and terminate together. Default: Instances are launched and terminated individually
---
--- * 'rsisType' - The Spot instance request type. Default: @one-time@
---
--- * 'rsisValidFrom' - The start date of the request. If this is a one-time request, the request becomes active at this date and time and remains active until all instances launch, the request expires, or the request is canceled. If the request is persistent, the request becomes active at this date and time and remains active until it expires or is canceled. Default: The request is effective indefinitely.
---
--- * 'rsisDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rsisSpotPrice' - The maximum hourly price (bid) for any Spot instance launched to fulfill the request.
-requestSpotInstances
-    :: Text -- ^ 'rsisSpotPrice'
-    -> RequestSpotInstances
-requestSpotInstances pSpotPrice_ =
-    RequestSpotInstances'
-    { _rsisBlockDurationMinutes = Nothing
-    , _rsisClientToken = Nothing
-    , _rsisInstanceCount = Nothing
-    , _rsisLaunchSpecification = Nothing
-    , _rsisAvailabilityZoneGroup = Nothing
-    , _rsisValidUntil = Nothing
-    , _rsisLaunchGroup = Nothing
-    , _rsisType = Nothing
-    , _rsisValidFrom = Nothing
-    , _rsisDryRun = Nothing
-    , _rsisSpotPrice = pSpotPrice_
-    }
-
--- | The required duration for the Spot instances (also known as Spot blocks), in minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, or 360). The duration period starts as soon as your Spot instance receives its instance ID. At the end of the duration period, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. Note that you can't specify an Availability Zone group or a launch group if you specify a duration.
-rsisBlockDurationMinutes :: Lens' RequestSpotInstances (Maybe Int)
-rsisBlockDurationMinutes = lens _rsisBlockDurationMinutes (\ s a -> s{_rsisBlockDurationMinutes = a});
-
--- | Unique, case-sensitive identifier that you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
-rsisClientToken :: Lens' RequestSpotInstances (Maybe Text)
-rsisClientToken = lens _rsisClientToken (\ s a -> s{_rsisClientToken = a});
-
--- | The maximum number of Spot instances to launch. Default: 1
-rsisInstanceCount :: Lens' RequestSpotInstances (Maybe Int)
-rsisInstanceCount = lens _rsisInstanceCount (\ s a -> s{_rsisInstanceCount = a});
-
--- | Undocumented member.
-rsisLaunchSpecification :: Lens' RequestSpotInstances (Maybe RequestSpotLaunchSpecification)
-rsisLaunchSpecification = lens _rsisLaunchSpecification (\ s a -> s{_rsisLaunchSpecification = a});
-
--- | The user-specified name for a logical grouping of bids. When you specify an Availability Zone group in a Spot Instance request, all Spot instances in the request are launched in the same Availability Zone. Instance proximity is maintained with this parameter, but the choice of Availability Zone is not. The group applies only to bids for Spot Instances of the same instance type. Any additional Spot instance requests that are specified with the same Availability Zone group name are launched in that same Availability Zone, as long as at least one instance from the group is still active. If there is no active instance running in the Availability Zone group that you specify for a new Spot instance request (all instances are terminated, the bid is expired, or the bid falls below current market), then Amazon EC2 launches the instance in any Availability Zone where the constraint can be met. Consequently, the subsequent set of Spot instances could be placed in a different zone from the original request, even if you specified the same Availability Zone group. Default: Instances are launched in any available Availability Zone.
-rsisAvailabilityZoneGroup :: Lens' RequestSpotInstances (Maybe Text)
-rsisAvailabilityZoneGroup = lens _rsisAvailabilityZoneGroup (\ s a -> s{_rsisAvailabilityZoneGroup = a});
-
--- | The end date of the request. If this is a one-time request, the request remains active until all instances launch, the request is canceled, or this date is reached. If the request is persistent, it remains active until it is canceled or this date and time is reached. Default: The request is effective indefinitely.
-rsisValidUntil :: Lens' RequestSpotInstances (Maybe UTCTime)
-rsisValidUntil = lens _rsisValidUntil (\ s a -> s{_rsisValidUntil = a}) . mapping _Time;
-
--- | The instance launch group. Launch groups are Spot instances that launch together and terminate together. Default: Instances are launched and terminated individually
-rsisLaunchGroup :: Lens' RequestSpotInstances (Maybe Text)
-rsisLaunchGroup = lens _rsisLaunchGroup (\ s a -> s{_rsisLaunchGroup = a});
-
--- | The Spot instance request type. Default: @one-time@
-rsisType :: Lens' RequestSpotInstances (Maybe SpotInstanceType)
-rsisType = lens _rsisType (\ s a -> s{_rsisType = a});
-
--- | The start date of the request. If this is a one-time request, the request becomes active at this date and time and remains active until all instances launch, the request expires, or the request is canceled. If the request is persistent, the request becomes active at this date and time and remains active until it expires or is canceled. Default: The request is effective indefinitely.
-rsisValidFrom :: Lens' RequestSpotInstances (Maybe UTCTime)
-rsisValidFrom = lens _rsisValidFrom (\ s a -> s{_rsisValidFrom = a}) . mapping _Time;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rsisDryRun :: Lens' RequestSpotInstances (Maybe Bool)
-rsisDryRun = lens _rsisDryRun (\ s a -> s{_rsisDryRun = a});
-
--- | The maximum hourly price (bid) for any Spot instance launched to fulfill the request.
-rsisSpotPrice :: Lens' RequestSpotInstances Text
-rsisSpotPrice = lens _rsisSpotPrice (\ s a -> s{_rsisSpotPrice = a});
-
-instance AWSRequest RequestSpotInstances where
-        type Rs RequestSpotInstances =
-             RequestSpotInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 RequestSpotInstancesResponse' <$>
-                   (x .@? "spotInstanceRequestSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable RequestSpotInstances
-
-instance NFData RequestSpotInstances
-
-instance ToHeaders RequestSpotInstances where
-        toHeaders = const mempty
-
-instance ToPath RequestSpotInstances where
-        toPath = const "/"
-
-instance ToQuery RequestSpotInstances where
-        toQuery RequestSpotInstances'{..}
-          = mconcat
-              ["Action" =: ("RequestSpotInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "BlockDurationMinutes" =: _rsisBlockDurationMinutes,
-               "ClientToken" =: _rsisClientToken,
-               "InstanceCount" =: _rsisInstanceCount,
-               "LaunchSpecification" =: _rsisLaunchSpecification,
-               "AvailabilityZoneGroup" =:
-                 _rsisAvailabilityZoneGroup,
-               "ValidUntil" =: _rsisValidUntil,
-               "LaunchGroup" =: _rsisLaunchGroup,
-               "Type" =: _rsisType, "ValidFrom" =: _rsisValidFrom,
-               "DryRun" =: _rsisDryRun,
-               "SpotPrice" =: _rsisSpotPrice]
-
--- | Contains the output of RequestSpotInstances.
---
---
---
--- /See:/ 'requestSpotInstancesResponse' smart constructor.
-data RequestSpotInstancesResponse = RequestSpotInstancesResponse'
-    { _rsirsSpotInstanceRequests :: !(Maybe [SpotInstanceRequest])
-    , _rsirsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestSpotInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsirsSpotInstanceRequests' - One or more Spot instance requests.
---
--- * 'rsirsResponseStatus' - -- | The response status code.
-requestSpotInstancesResponse
-    :: Int -- ^ 'rsirsResponseStatus'
-    -> RequestSpotInstancesResponse
-requestSpotInstancesResponse pResponseStatus_ =
-    RequestSpotInstancesResponse'
-    { _rsirsSpotInstanceRequests = Nothing
-    , _rsirsResponseStatus = pResponseStatus_
-    }
-
--- | One or more Spot instance requests.
-rsirsSpotInstanceRequests :: Lens' RequestSpotInstancesResponse [SpotInstanceRequest]
-rsirsSpotInstanceRequests = lens _rsirsSpotInstanceRequests (\ s a -> s{_rsirsSpotInstanceRequests = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-rsirsResponseStatus :: Lens' RequestSpotInstancesResponse Int
-rsirsResponseStatus = lens _rsirsResponseStatus (\ s a -> s{_rsirsResponseStatus = a});
-
-instance NFData RequestSpotInstancesResponse
diff --git a/gen/Network/AWS/EC2/ResetImageAttribute.hs b/gen/Network/AWS/EC2/ResetImageAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ResetImageAttribute.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ResetImageAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Resets an attribute of an AMI to its default value.
---
---
-module Network.AWS.EC2.ResetImageAttribute
-    (
-    -- * Creating a Request
-      resetImageAttribute
-    , ResetImageAttribute
-    -- * Request Lenses
-    , resDryRun
-    , resImageId
-    , resAttribute
-
-    -- * Destructuring the Response
-    , resetImageAttributeResponse
-    , ResetImageAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ResetImageAttribute.
---
---
---
--- /See:/ 'resetImageAttribute' smart constructor.
-data ResetImageAttribute = ResetImageAttribute'
-    { _resDryRun    :: !(Maybe Bool)
-    , _resImageId   :: !Text
-    , _resAttribute :: !ResetImageAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetImageAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'resDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'resImageId' - The ID of the AMI.
---
--- * 'resAttribute' - The attribute to reset (currently you can only reset the launch permission attribute).
-resetImageAttribute
-    :: Text -- ^ 'resImageId'
-    -> ResetImageAttributeName -- ^ 'resAttribute'
-    -> ResetImageAttribute
-resetImageAttribute pImageId_ pAttribute_ =
-    ResetImageAttribute'
-    { _resDryRun = Nothing
-    , _resImageId = pImageId_
-    , _resAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-resDryRun :: Lens' ResetImageAttribute (Maybe Bool)
-resDryRun = lens _resDryRun (\ s a -> s{_resDryRun = a});
-
--- | The ID of the AMI.
-resImageId :: Lens' ResetImageAttribute Text
-resImageId = lens _resImageId (\ s a -> s{_resImageId = a});
-
--- | The attribute to reset (currently you can only reset the launch permission attribute).
-resAttribute :: Lens' ResetImageAttribute ResetImageAttributeName
-resAttribute = lens _resAttribute (\ s a -> s{_resAttribute = a});
-
-instance AWSRequest ResetImageAttribute where
-        type Rs ResetImageAttribute =
-             ResetImageAttributeResponse
-        request = postQuery ec2
-        response = receiveNull ResetImageAttributeResponse'
-
-instance Hashable ResetImageAttribute
-
-instance NFData ResetImageAttribute
-
-instance ToHeaders ResetImageAttribute where
-        toHeaders = const mempty
-
-instance ToPath ResetImageAttribute where
-        toPath = const "/"
-
-instance ToQuery ResetImageAttribute where
-        toQuery ResetImageAttribute'{..}
-          = mconcat
-              ["Action" =: ("ResetImageAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _resDryRun, "ImageId" =: _resImageId,
-               "Attribute" =: _resAttribute]
-
--- | /See:/ 'resetImageAttributeResponse' smart constructor.
-data ResetImageAttributeResponse =
-    ResetImageAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetImageAttributeResponse' with the minimum fields required to make a request.
---
-resetImageAttributeResponse
-    :: ResetImageAttributeResponse
-resetImageAttributeResponse = ResetImageAttributeResponse'
-
-instance NFData ResetImageAttributeResponse
diff --git a/gen/Network/AWS/EC2/ResetInstanceAttribute.hs b/gen/Network/AWS/EC2/ResetInstanceAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ResetInstanceAttribute.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ResetInstanceAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Resets an attribute of an instance to its default value. To reset the @kernel@ or @ramdisk@ , the instance must be in a stopped state. To reset the @sourceDestCheck@ , the instance can be either running or stopped.
---
---
--- The @sourceDestCheck@ attribute controls whether source/destination checking is enabled. The default value is @true@ , which means checking is enabled. This value must be @false@ for a NAT instance to perform NAT. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances> in the /Amazon Virtual Private Cloud User Guide/ .
---
-module Network.AWS.EC2.ResetInstanceAttribute
-    (
-    -- * Creating a Request
-      resetInstanceAttribute
-    , ResetInstanceAttribute
-    -- * Request Lenses
-    , riaDryRun
-    , riaInstanceId
-    , riaAttribute
-
-    -- * Destructuring the Response
-    , resetInstanceAttributeResponse
-    , ResetInstanceAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ResetInstanceAttribute.
---
---
---
--- /See:/ 'resetInstanceAttribute' smart constructor.
-data ResetInstanceAttribute = ResetInstanceAttribute'
-    { _riaDryRun     :: !(Maybe Bool)
-    , _riaInstanceId :: !Text
-    , _riaAttribute  :: !InstanceAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetInstanceAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'riaInstanceId' - The ID of the instance.
---
--- * 'riaAttribute' - The attribute to reset. /Important:/ You can only reset the following attributes: @kernel@ | @ramdisk@ | @sourceDestCheck@ . To change an instance attribute, use 'ModifyInstanceAttribute' .
-resetInstanceAttribute
-    :: Text -- ^ 'riaInstanceId'
-    -> InstanceAttributeName -- ^ 'riaAttribute'
-    -> ResetInstanceAttribute
-resetInstanceAttribute pInstanceId_ pAttribute_ =
-    ResetInstanceAttribute'
-    { _riaDryRun = Nothing
-    , _riaInstanceId = pInstanceId_
-    , _riaAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-riaDryRun :: Lens' ResetInstanceAttribute (Maybe Bool)
-riaDryRun = lens _riaDryRun (\ s a -> s{_riaDryRun = a});
-
--- | The ID of the instance.
-riaInstanceId :: Lens' ResetInstanceAttribute Text
-riaInstanceId = lens _riaInstanceId (\ s a -> s{_riaInstanceId = a});
-
--- | The attribute to reset. /Important:/ You can only reset the following attributes: @kernel@ | @ramdisk@ | @sourceDestCheck@ . To change an instance attribute, use 'ModifyInstanceAttribute' .
-riaAttribute :: Lens' ResetInstanceAttribute InstanceAttributeName
-riaAttribute = lens _riaAttribute (\ s a -> s{_riaAttribute = a});
-
-instance AWSRequest ResetInstanceAttribute where
-        type Rs ResetInstanceAttribute =
-             ResetInstanceAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveNull ResetInstanceAttributeResponse'
-
-instance Hashable ResetInstanceAttribute
-
-instance NFData ResetInstanceAttribute
-
-instance ToHeaders ResetInstanceAttribute where
-        toHeaders = const mempty
-
-instance ToPath ResetInstanceAttribute where
-        toPath = const "/"
-
-instance ToQuery ResetInstanceAttribute where
-        toQuery ResetInstanceAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("ResetInstanceAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _riaDryRun,
-               "InstanceId" =: _riaInstanceId,
-               "Attribute" =: _riaAttribute]
-
--- | /See:/ 'resetInstanceAttributeResponse' smart constructor.
-data ResetInstanceAttributeResponse =
-    ResetInstanceAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetInstanceAttributeResponse' with the minimum fields required to make a request.
---
-resetInstanceAttributeResponse
-    :: ResetInstanceAttributeResponse
-resetInstanceAttributeResponse = ResetInstanceAttributeResponse'
-
-instance NFData ResetInstanceAttributeResponse
diff --git a/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs b/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ResetNetworkInterfaceAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Resets a network interface attribute. You can specify only one attribute at a time.
---
---
-module Network.AWS.EC2.ResetNetworkInterfaceAttribute
-    (
-    -- * Creating a Request
-      resetNetworkInterfaceAttribute
-    , ResetNetworkInterfaceAttribute
-    -- * Request Lenses
-    , rniaSourceDestCheck
-    , rniaDryRun
-    , rniaNetworkInterfaceId
-
-    -- * Destructuring the Response
-    , resetNetworkInterfaceAttributeResponse
-    , ResetNetworkInterfaceAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ResetNetworkInterfaceAttribute.
---
---
---
--- /See:/ 'resetNetworkInterfaceAttribute' smart constructor.
-data ResetNetworkInterfaceAttribute = ResetNetworkInterfaceAttribute'
-    { _rniaSourceDestCheck    :: !(Maybe Text)
-    , _rniaDryRun             :: !(Maybe Bool)
-    , _rniaNetworkInterfaceId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetNetworkInterfaceAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rniaSourceDestCheck' - The source/destination checking attribute. Resets the value to @true@ .
---
--- * 'rniaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rniaNetworkInterfaceId' - The ID of the network interface.
-resetNetworkInterfaceAttribute
-    :: Text -- ^ 'rniaNetworkInterfaceId'
-    -> ResetNetworkInterfaceAttribute
-resetNetworkInterfaceAttribute pNetworkInterfaceId_ =
-    ResetNetworkInterfaceAttribute'
-    { _rniaSourceDestCheck = Nothing
-    , _rniaDryRun = Nothing
-    , _rniaNetworkInterfaceId = pNetworkInterfaceId_
-    }
-
--- | The source/destination checking attribute. Resets the value to @true@ .
-rniaSourceDestCheck :: Lens' ResetNetworkInterfaceAttribute (Maybe Text)
-rniaSourceDestCheck = lens _rniaSourceDestCheck (\ s a -> s{_rniaSourceDestCheck = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rniaDryRun :: Lens' ResetNetworkInterfaceAttribute (Maybe Bool)
-rniaDryRun = lens _rniaDryRun (\ s a -> s{_rniaDryRun = a});
-
--- | The ID of the network interface.
-rniaNetworkInterfaceId :: Lens' ResetNetworkInterfaceAttribute Text
-rniaNetworkInterfaceId = lens _rniaNetworkInterfaceId (\ s a -> s{_rniaNetworkInterfaceId = a});
-
-instance AWSRequest ResetNetworkInterfaceAttribute
-         where
-        type Rs ResetNetworkInterfaceAttribute =
-             ResetNetworkInterfaceAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveNull ResetNetworkInterfaceAttributeResponse'
-
-instance Hashable ResetNetworkInterfaceAttribute
-
-instance NFData ResetNetworkInterfaceAttribute
-
-instance ToHeaders ResetNetworkInterfaceAttribute
-         where
-        toHeaders = const mempty
-
-instance ToPath ResetNetworkInterfaceAttribute where
-        toPath = const "/"
-
-instance ToQuery ResetNetworkInterfaceAttribute where
-        toQuery ResetNetworkInterfaceAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("ResetNetworkInterfaceAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "SourceDestCheck" =: _rniaSourceDestCheck,
-               "DryRun" =: _rniaDryRun,
-               "NetworkInterfaceId" =: _rniaNetworkInterfaceId]
-
--- | /See:/ 'resetNetworkInterfaceAttributeResponse' smart constructor.
-data ResetNetworkInterfaceAttributeResponse =
-    ResetNetworkInterfaceAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetNetworkInterfaceAttributeResponse' with the minimum fields required to make a request.
---
-resetNetworkInterfaceAttributeResponse
-    :: ResetNetworkInterfaceAttributeResponse
-resetNetworkInterfaceAttributeResponse =
-    ResetNetworkInterfaceAttributeResponse'
-
-instance NFData
-         ResetNetworkInterfaceAttributeResponse
diff --git a/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs b/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs
+++ /dev/null
@@ -1,129 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.ResetSnapshotAttribute
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Resets permission settings for the specified snapshot.
---
---
--- For more information on modifying snapshot permissions, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html Sharing Snapshots> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.ResetSnapshotAttribute
-    (
-    -- * Creating a Request
-      resetSnapshotAttribute
-    , ResetSnapshotAttribute
-    -- * Request Lenses
-    , rsaDryRun
-    , rsaSnapshotId
-    , rsaAttribute
-
-    -- * Destructuring the Response
-    , resetSnapshotAttributeResponse
-    , ResetSnapshotAttributeResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for ResetSnapshotAttribute.
---
---
---
--- /See:/ 'resetSnapshotAttribute' smart constructor.
-data ResetSnapshotAttribute = ResetSnapshotAttribute'
-    { _rsaDryRun     :: !(Maybe Bool)
-    , _rsaSnapshotId :: !Text
-    , _rsaAttribute  :: !SnapshotAttributeName
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetSnapshotAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsaDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rsaSnapshotId' - The ID of the snapshot.
---
--- * 'rsaAttribute' - The attribute to reset. Currently, only the attribute for permission to create volumes can be reset.
-resetSnapshotAttribute
-    :: Text -- ^ 'rsaSnapshotId'
-    -> SnapshotAttributeName -- ^ 'rsaAttribute'
-    -> ResetSnapshotAttribute
-resetSnapshotAttribute pSnapshotId_ pAttribute_ =
-    ResetSnapshotAttribute'
-    { _rsaDryRun = Nothing
-    , _rsaSnapshotId = pSnapshotId_
-    , _rsaAttribute = pAttribute_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rsaDryRun :: Lens' ResetSnapshotAttribute (Maybe Bool)
-rsaDryRun = lens _rsaDryRun (\ s a -> s{_rsaDryRun = a});
-
--- | The ID of the snapshot.
-rsaSnapshotId :: Lens' ResetSnapshotAttribute Text
-rsaSnapshotId = lens _rsaSnapshotId (\ s a -> s{_rsaSnapshotId = a});
-
--- | The attribute to reset. Currently, only the attribute for permission to create volumes can be reset.
-rsaAttribute :: Lens' ResetSnapshotAttribute SnapshotAttributeName
-rsaAttribute = lens _rsaAttribute (\ s a -> s{_rsaAttribute = a});
-
-instance AWSRequest ResetSnapshotAttribute where
-        type Rs ResetSnapshotAttribute =
-             ResetSnapshotAttributeResponse
-        request = postQuery ec2
-        response
-          = receiveNull ResetSnapshotAttributeResponse'
-
-instance Hashable ResetSnapshotAttribute
-
-instance NFData ResetSnapshotAttribute
-
-instance ToHeaders ResetSnapshotAttribute where
-        toHeaders = const mempty
-
-instance ToPath ResetSnapshotAttribute where
-        toPath = const "/"
-
-instance ToQuery ResetSnapshotAttribute where
-        toQuery ResetSnapshotAttribute'{..}
-          = mconcat
-              ["Action" =:
-                 ("ResetSnapshotAttribute" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _rsaDryRun,
-               "SnapshotId" =: _rsaSnapshotId,
-               "Attribute" =: _rsaAttribute]
-
--- | /See:/ 'resetSnapshotAttributeResponse' smart constructor.
-data ResetSnapshotAttributeResponse =
-    ResetSnapshotAttributeResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ResetSnapshotAttributeResponse' with the minimum fields required to make a request.
---
-resetSnapshotAttributeResponse
-    :: ResetSnapshotAttributeResponse
-resetSnapshotAttributeResponse = ResetSnapshotAttributeResponse'
-
-instance NFData ResetSnapshotAttributeResponse
diff --git a/gen/Network/AWS/EC2/RestoreAddressToClassic.hs b/gen/Network/AWS/EC2/RestoreAddressToClassic.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RestoreAddressToClassic.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RestoreAddressToClassic
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Restores an Elastic IP address that was previously moved to the EC2-VPC platform back to the EC2-Classic platform. You cannot move an Elastic IP address that was originally allocated for use in EC2-VPC. The Elastic IP address must not be associated with an instance or network interface.
---
---
-module Network.AWS.EC2.RestoreAddressToClassic
-    (
-    -- * Creating a Request
-      restoreAddressToClassic
-    , RestoreAddressToClassic
-    -- * Request Lenses
-    , ratcDryRun
-    , ratcPublicIP
-
-    -- * Destructuring the Response
-    , restoreAddressToClassicResponse
-    , RestoreAddressToClassicResponse
-    -- * Response Lenses
-    , ratcrsStatus
-    , ratcrsPublicIP
-    , ratcrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RestoreAddressToClassic.
---
---
---
--- /See:/ 'restoreAddressToClassic' smart constructor.
-data RestoreAddressToClassic = RestoreAddressToClassic'
-    { _ratcDryRun   :: !(Maybe Bool)
-    , _ratcPublicIP :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RestoreAddressToClassic' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ratcDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'ratcPublicIP' - The Elastic IP address.
-restoreAddressToClassic
-    :: Text -- ^ 'ratcPublicIP'
-    -> RestoreAddressToClassic
-restoreAddressToClassic pPublicIP_ =
-    RestoreAddressToClassic'
-    { _ratcDryRun = Nothing
-    , _ratcPublicIP = pPublicIP_
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-ratcDryRun :: Lens' RestoreAddressToClassic (Maybe Bool)
-ratcDryRun = lens _ratcDryRun (\ s a -> s{_ratcDryRun = a});
-
--- | The Elastic IP address.
-ratcPublicIP :: Lens' RestoreAddressToClassic Text
-ratcPublicIP = lens _ratcPublicIP (\ s a -> s{_ratcPublicIP = a});
-
-instance AWSRequest RestoreAddressToClassic where
-        type Rs RestoreAddressToClassic =
-             RestoreAddressToClassicResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 RestoreAddressToClassicResponse' <$>
-                   (x .@? "status") <*> (x .@? "publicIp") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable RestoreAddressToClassic
-
-instance NFData RestoreAddressToClassic
-
-instance ToHeaders RestoreAddressToClassic where
-        toHeaders = const mempty
-
-instance ToPath RestoreAddressToClassic where
-        toPath = const "/"
-
-instance ToQuery RestoreAddressToClassic where
-        toQuery RestoreAddressToClassic'{..}
-          = mconcat
-              ["Action" =:
-                 ("RestoreAddressToClassic" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _ratcDryRun, "PublicIp" =: _ratcPublicIP]
-
--- | Contains the output of RestoreAddressToClassic.
---
---
---
--- /See:/ 'restoreAddressToClassicResponse' smart constructor.
-data RestoreAddressToClassicResponse = RestoreAddressToClassicResponse'
-    { _ratcrsStatus         :: !(Maybe AddressStatus)
-    , _ratcrsPublicIP       :: !(Maybe Text)
-    , _ratcrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RestoreAddressToClassicResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ratcrsStatus' - The move status for the IP address.
---
--- * 'ratcrsPublicIP' - The Elastic IP address.
---
--- * 'ratcrsResponseStatus' - -- | The response status code.
-restoreAddressToClassicResponse
-    :: Int -- ^ 'ratcrsResponseStatus'
-    -> RestoreAddressToClassicResponse
-restoreAddressToClassicResponse pResponseStatus_ =
-    RestoreAddressToClassicResponse'
-    { _ratcrsStatus = Nothing
-    , _ratcrsPublicIP = Nothing
-    , _ratcrsResponseStatus = pResponseStatus_
-    }
-
--- | The move status for the IP address.
-ratcrsStatus :: Lens' RestoreAddressToClassicResponse (Maybe AddressStatus)
-ratcrsStatus = lens _ratcrsStatus (\ s a -> s{_ratcrsStatus = a});
-
--- | The Elastic IP address.
-ratcrsPublicIP :: Lens' RestoreAddressToClassicResponse (Maybe Text)
-ratcrsPublicIP = lens _ratcrsPublicIP (\ s a -> s{_ratcrsPublicIP = a});
-
--- | -- | The response status code.
-ratcrsResponseStatus :: Lens' RestoreAddressToClassicResponse Int
-ratcrsResponseStatus = lens _ratcrsResponseStatus (\ s a -> s{_ratcrsResponseStatus = a});
-
-instance NFData RestoreAddressToClassicResponse
diff --git a/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs b/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs
+++ /dev/null
@@ -1,191 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RevokeSecurityGroupEgress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- [EC2-VPC only] Removes one or more egress rules from a security group for EC2-VPC. This action doesn't apply to security groups for use in EC2-Classic. The values that you specify in the revoke request (for example, ports) must match the existing rule's values for the rule to be revoked.
---
---
--- Each rule consists of the protocol and the IPv4 or IPv6 CIDR range or source security group. For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code.
---
--- Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.
---
-module Network.AWS.EC2.RevokeSecurityGroupEgress
-    (
-    -- * Creating a Request
-      revokeSecurityGroupEgress
-    , RevokeSecurityGroupEgress
-    -- * Request Lenses
-    , rsgeFromPort
-    , rsgeIPPermissions
-    , rsgeIPProtocol
-    , rsgeToPort
-    , rsgeCidrIP
-    , rsgeSourceSecurityGroupOwnerId
-    , rsgeSourceSecurityGroupName
-    , rsgeDryRun
-    , rsgeGroupId
-
-    -- * Destructuring the Response
-    , revokeSecurityGroupEgressResponse
-    , RevokeSecurityGroupEgressResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RevokeSecurityGroupEgress.
---
---
---
--- /See:/ 'revokeSecurityGroupEgress' smart constructor.
-data RevokeSecurityGroupEgress = RevokeSecurityGroupEgress'
-    { _rsgeFromPort                   :: !(Maybe Int)
-    , _rsgeIPPermissions              :: !(Maybe [IPPermission])
-    , _rsgeIPProtocol                 :: !(Maybe Text)
-    , _rsgeToPort                     :: !(Maybe Int)
-    , _rsgeCidrIP                     :: !(Maybe Text)
-    , _rsgeSourceSecurityGroupOwnerId :: !(Maybe Text)
-    , _rsgeSourceSecurityGroupName    :: !(Maybe Text)
-    , _rsgeDryRun                     :: !(Maybe Bool)
-    , _rsgeGroupId                    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RevokeSecurityGroupEgress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsgeFromPort' - The start of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
---
--- * 'rsgeIPPermissions' - A set of IP permissions. You can't specify a destination security group and a CIDR IP address range.
---
--- * 'rsgeIPProtocol' - The IP protocol name or number. We recommend that you specify the protocol in a set of IP permissions instead.
---
--- * 'rsgeToPort' - The end of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
---
--- * 'rsgeCidrIP' - The CIDR IP address range. We recommend that you specify the CIDR range in a set of IP permissions instead.
---
--- * 'rsgeSourceSecurityGroupOwnerId' - The AWS account number for a destination security group. To revoke outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
---
--- * 'rsgeSourceSecurityGroupName' - The name of a destination security group. To revoke outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
---
--- * 'rsgeDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rsgeGroupId' - The ID of the security group.
-revokeSecurityGroupEgress
-    :: Text -- ^ 'rsgeGroupId'
-    -> RevokeSecurityGroupEgress
-revokeSecurityGroupEgress pGroupId_ =
-    RevokeSecurityGroupEgress'
-    { _rsgeFromPort = Nothing
-    , _rsgeIPPermissions = Nothing
-    , _rsgeIPProtocol = Nothing
-    , _rsgeToPort = Nothing
-    , _rsgeCidrIP = Nothing
-    , _rsgeSourceSecurityGroupOwnerId = Nothing
-    , _rsgeSourceSecurityGroupName = Nothing
-    , _rsgeDryRun = Nothing
-    , _rsgeGroupId = pGroupId_
-    }
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
-rsgeFromPort :: Lens' RevokeSecurityGroupEgress (Maybe Int)
-rsgeFromPort = lens _rsgeFromPort (\ s a -> s{_rsgeFromPort = a});
-
--- | A set of IP permissions. You can't specify a destination security group and a CIDR IP address range.
-rsgeIPPermissions :: Lens' RevokeSecurityGroupEgress [IPPermission]
-rsgeIPPermissions = lens _rsgeIPPermissions (\ s a -> s{_rsgeIPPermissions = a}) . _Default . _Coerce;
-
--- | The IP protocol name or number. We recommend that you specify the protocol in a set of IP permissions instead.
-rsgeIPProtocol :: Lens' RevokeSecurityGroupEgress (Maybe Text)
-rsgeIPProtocol = lens _rsgeIPProtocol (\ s a -> s{_rsgeIPProtocol = a});
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP type number. We recommend that you specify the port range in a set of IP permissions instead.
-rsgeToPort :: Lens' RevokeSecurityGroupEgress (Maybe Int)
-rsgeToPort = lens _rsgeToPort (\ s a -> s{_rsgeToPort = a});
-
--- | The CIDR IP address range. We recommend that you specify the CIDR range in a set of IP permissions instead.
-rsgeCidrIP :: Lens' RevokeSecurityGroupEgress (Maybe Text)
-rsgeCidrIP = lens _rsgeCidrIP (\ s a -> s{_rsgeCidrIP = a});
-
--- | The AWS account number for a destination security group. To revoke outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
-rsgeSourceSecurityGroupOwnerId :: Lens' RevokeSecurityGroupEgress (Maybe Text)
-rsgeSourceSecurityGroupOwnerId = lens _rsgeSourceSecurityGroupOwnerId (\ s a -> s{_rsgeSourceSecurityGroupOwnerId = a});
-
--- | The name of a destination security group. To revoke outbound access to a destination security group, we recommend that you use a set of IP permissions instead.
-rsgeSourceSecurityGroupName :: Lens' RevokeSecurityGroupEgress (Maybe Text)
-rsgeSourceSecurityGroupName = lens _rsgeSourceSecurityGroupName (\ s a -> s{_rsgeSourceSecurityGroupName = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rsgeDryRun :: Lens' RevokeSecurityGroupEgress (Maybe Bool)
-rsgeDryRun = lens _rsgeDryRun (\ s a -> s{_rsgeDryRun = a});
-
--- | The ID of the security group.
-rsgeGroupId :: Lens' RevokeSecurityGroupEgress Text
-rsgeGroupId = lens _rsgeGroupId (\ s a -> s{_rsgeGroupId = a});
-
-instance AWSRequest RevokeSecurityGroupEgress where
-        type Rs RevokeSecurityGroupEgress =
-             RevokeSecurityGroupEgressResponse
-        request = postQuery ec2
-        response
-          = receiveNull RevokeSecurityGroupEgressResponse'
-
-instance Hashable RevokeSecurityGroupEgress
-
-instance NFData RevokeSecurityGroupEgress
-
-instance ToHeaders RevokeSecurityGroupEgress where
-        toHeaders = const mempty
-
-instance ToPath RevokeSecurityGroupEgress where
-        toPath = const "/"
-
-instance ToQuery RevokeSecurityGroupEgress where
-        toQuery RevokeSecurityGroupEgress'{..}
-          = mconcat
-              ["Action" =:
-                 ("RevokeSecurityGroupEgress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "FromPort" =: _rsgeFromPort,
-               toQuery
-                 (toQueryList "IpPermissions" <$> _rsgeIPPermissions),
-               "IpProtocol" =: _rsgeIPProtocol,
-               "ToPort" =: _rsgeToPort, "CidrIp" =: _rsgeCidrIP,
-               "SourceSecurityGroupOwnerId" =:
-                 _rsgeSourceSecurityGroupOwnerId,
-               "SourceSecurityGroupName" =:
-                 _rsgeSourceSecurityGroupName,
-               "DryRun" =: _rsgeDryRun, "GroupId" =: _rsgeGroupId]
-
--- | /See:/ 'revokeSecurityGroupEgressResponse' smart constructor.
-data RevokeSecurityGroupEgressResponse =
-    RevokeSecurityGroupEgressResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RevokeSecurityGroupEgressResponse' with the minimum fields required to make a request.
---
-revokeSecurityGroupEgressResponse
-    :: RevokeSecurityGroupEgressResponse
-revokeSecurityGroupEgressResponse = RevokeSecurityGroupEgressResponse'
-
-instance NFData RevokeSecurityGroupEgressResponse
diff --git a/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs b/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RevokeSecurityGroupIngress
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Removes one or more ingress rules from a security group. The values that you specify in the revoke request (for example, ports) must match the existing rule's values for the rule to be removed.
---
---
--- Each rule consists of the protocol and the CIDR range or source security group. For the TCP and UDP protocols, you must also specify the destination port or range of ports. For the ICMP protocol, you must also specify the ICMP type and code.
---
--- Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.
---
-module Network.AWS.EC2.RevokeSecurityGroupIngress
-    (
-    -- * Creating a Request
-      revokeSecurityGroupIngress
-    , RevokeSecurityGroupIngress
-    -- * Request Lenses
-    , rsgiFromPort
-    , rsgiIPPermissions
-    , rsgiIPProtocol
-    , rsgiGroupId
-    , rsgiToPort
-    , rsgiCidrIP
-    , rsgiSourceSecurityGroupOwnerId
-    , rsgiGroupName
-    , rsgiSourceSecurityGroupName
-    , rsgiDryRun
-
-    -- * Destructuring the Response
-    , revokeSecurityGroupIngressResponse
-    , RevokeSecurityGroupIngressResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RevokeSecurityGroupIngress.
---
---
---
--- /See:/ 'revokeSecurityGroupIngress' smart constructor.
-data RevokeSecurityGroupIngress = RevokeSecurityGroupIngress'
-    { _rsgiFromPort                   :: !(Maybe Int)
-    , _rsgiIPPermissions              :: !(Maybe [IPPermission])
-    , _rsgiIPProtocol                 :: !(Maybe Text)
-    , _rsgiGroupId                    :: !(Maybe Text)
-    , _rsgiToPort                     :: !(Maybe Int)
-    , _rsgiCidrIP                     :: !(Maybe Text)
-    , _rsgiSourceSecurityGroupOwnerId :: !(Maybe Text)
-    , _rsgiGroupName                  :: !(Maybe Text)
-    , _rsgiSourceSecurityGroupName    :: !(Maybe Text)
-    , _rsgiDryRun                     :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RevokeSecurityGroupIngress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsgiFromPort' - The start of port range for the TCP and UDP protocols, or an ICMP type number. For the ICMP type number, use @-1@ to specify all ICMP types.
---
--- * 'rsgiIPPermissions' - A set of IP permissions. You can't specify a source security group and a CIDR IP address range.
---
--- * 'rsgiIPProtocol' - The IP protocol name (@tcp@ , @udp@ , @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers> ). Use @-1@ to specify all.
---
--- * 'rsgiGroupId' - The ID of the security group. Required for a security group in a nondefault VPC.
---
--- * 'rsgiToPort' - The end of port range for the TCP and UDP protocols, or an ICMP code number. For the ICMP code number, use @-1@ to specify all ICMP codes for the ICMP type.
---
--- * 'rsgiCidrIP' - The CIDR IP address range. You can't specify this parameter when specifying a source security group.
---
--- * 'rsgiSourceSecurityGroupOwnerId' - [EC2-Classic] The AWS account ID of the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.
---
--- * 'rsgiGroupName' - [EC2-Classic, default VPC] The name of the security group.
---
--- * 'rsgiSourceSecurityGroupName' - [EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. For EC2-VPC, the source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.
---
--- * 'rsgiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-revokeSecurityGroupIngress
-    :: RevokeSecurityGroupIngress
-revokeSecurityGroupIngress =
-    RevokeSecurityGroupIngress'
-    { _rsgiFromPort = Nothing
-    , _rsgiIPPermissions = Nothing
-    , _rsgiIPProtocol = Nothing
-    , _rsgiGroupId = Nothing
-    , _rsgiToPort = Nothing
-    , _rsgiCidrIP = Nothing
-    , _rsgiSourceSecurityGroupOwnerId = Nothing
-    , _rsgiGroupName = Nothing
-    , _rsgiSourceSecurityGroupName = Nothing
-    , _rsgiDryRun = Nothing
-    }
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP type number. For the ICMP type number, use @-1@ to specify all ICMP types.
-rsgiFromPort :: Lens' RevokeSecurityGroupIngress (Maybe Int)
-rsgiFromPort = lens _rsgiFromPort (\ s a -> s{_rsgiFromPort = a});
-
--- | A set of IP permissions. You can't specify a source security group and a CIDR IP address range.
-rsgiIPPermissions :: Lens' RevokeSecurityGroupIngress [IPPermission]
-rsgiIPPermissions = lens _rsgiIPPermissions (\ s a -> s{_rsgiIPPermissions = a}) . _Default . _Coerce;
-
--- | The IP protocol name (@tcp@ , @udp@ , @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers> ). Use @-1@ to specify all.
-rsgiIPProtocol :: Lens' RevokeSecurityGroupIngress (Maybe Text)
-rsgiIPProtocol = lens _rsgiIPProtocol (\ s a -> s{_rsgiIPProtocol = a});
-
--- | The ID of the security group. Required for a security group in a nondefault VPC.
-rsgiGroupId :: Lens' RevokeSecurityGroupIngress (Maybe Text)
-rsgiGroupId = lens _rsgiGroupId (\ s a -> s{_rsgiGroupId = a});
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP code number. For the ICMP code number, use @-1@ to specify all ICMP codes for the ICMP type.
-rsgiToPort :: Lens' RevokeSecurityGroupIngress (Maybe Int)
-rsgiToPort = lens _rsgiToPort (\ s a -> s{_rsgiToPort = a});
-
--- | The CIDR IP address range. You can't specify this parameter when specifying a source security group.
-rsgiCidrIP :: Lens' RevokeSecurityGroupIngress (Maybe Text)
-rsgiCidrIP = lens _rsgiCidrIP (\ s a -> s{_rsgiCidrIP = a});
-
--- | [EC2-Classic] The AWS account ID of the source security group, if the source security group is in a different account. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the IP protocol, the start of the port range, and the end of the port range. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.
-rsgiSourceSecurityGroupOwnerId :: Lens' RevokeSecurityGroupIngress (Maybe Text)
-rsgiSourceSecurityGroupOwnerId = lens _rsgiSourceSecurityGroupOwnerId (\ s a -> s{_rsgiSourceSecurityGroupOwnerId = a});
-
--- | [EC2-Classic, default VPC] The name of the security group.
-rsgiGroupName :: Lens' RevokeSecurityGroupIngress (Maybe Text)
-rsgiGroupName = lens _rsgiGroupName (\ s a -> s{_rsgiGroupName = a});
-
--- | [EC2-Classic, default VPC] The name of the source security group. You can't specify this parameter in combination with the following parameters: the CIDR IP address range, the start of the port range, the IP protocol, and the end of the port range. For EC2-VPC, the source security group must be in the same VPC. To revoke a specific rule for an IP protocol and port range, use a set of IP permissions instead.
-rsgiSourceSecurityGroupName :: Lens' RevokeSecurityGroupIngress (Maybe Text)
-rsgiSourceSecurityGroupName = lens _rsgiSourceSecurityGroupName (\ s a -> s{_rsgiSourceSecurityGroupName = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rsgiDryRun :: Lens' RevokeSecurityGroupIngress (Maybe Bool)
-rsgiDryRun = lens _rsgiDryRun (\ s a -> s{_rsgiDryRun = a});
-
-instance AWSRequest RevokeSecurityGroupIngress where
-        type Rs RevokeSecurityGroupIngress =
-             RevokeSecurityGroupIngressResponse
-        request = postQuery ec2
-        response
-          = receiveNull RevokeSecurityGroupIngressResponse'
-
-instance Hashable RevokeSecurityGroupIngress
-
-instance NFData RevokeSecurityGroupIngress
-
-instance ToHeaders RevokeSecurityGroupIngress where
-        toHeaders = const mempty
-
-instance ToPath RevokeSecurityGroupIngress where
-        toPath = const "/"
-
-instance ToQuery RevokeSecurityGroupIngress where
-        toQuery RevokeSecurityGroupIngress'{..}
-          = mconcat
-              ["Action" =:
-                 ("RevokeSecurityGroupIngress" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "FromPort" =: _rsgiFromPort,
-               toQuery
-                 (toQueryList "IpPermissions" <$> _rsgiIPPermissions),
-               "IpProtocol" =: _rsgiIPProtocol,
-               "GroupId" =: _rsgiGroupId, "ToPort" =: _rsgiToPort,
-               "CidrIp" =: _rsgiCidrIP,
-               "SourceSecurityGroupOwnerId" =:
-                 _rsgiSourceSecurityGroupOwnerId,
-               "GroupName" =: _rsgiGroupName,
-               "SourceSecurityGroupName" =:
-                 _rsgiSourceSecurityGroupName,
-               "DryRun" =: _rsgiDryRun]
-
--- | /See:/ 'revokeSecurityGroupIngressResponse' smart constructor.
-data RevokeSecurityGroupIngressResponse =
-    RevokeSecurityGroupIngressResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RevokeSecurityGroupIngressResponse' with the minimum fields required to make a request.
---
-revokeSecurityGroupIngressResponse
-    :: RevokeSecurityGroupIngressResponse
-revokeSecurityGroupIngressResponse = RevokeSecurityGroupIngressResponse'
-
-instance NFData RevokeSecurityGroupIngressResponse
diff --git a/gen/Network/AWS/EC2/RunInstances.hs b/gen/Network/AWS/EC2/RunInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RunInstances.hs
+++ /dev/null
@@ -1,370 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RunInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Launches the specified number of instances using an AMI for which you have permissions.
---
---
--- You can specify a number of options, or leave the default options. The following rules apply:
---
---     * [EC2-VPC] If you don't specify a subnet ID, we choose a default subnet from your default VPC for you. If you don't have a default VPC, you must specify a subnet ID in the request.
---
---     * [EC2-Classic] If don't specify an Availability Zone, we choose one for you.
---
---     * Some instance types must be launched into a VPC. If you do not have a default VPC, or if you do not specify a subnet ID, the request fails. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types Instance Types Available Only in a VPC> .
---
---     * [EC2-VPC] All instances have a network interface with a primary private IPv4 address. If you don't specify this address, we choose one from the IPv4 range of your subnet.
---
---     * Not all instance types support IPv6 addresses. For more information, see <http://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types> .
---
---     * If you don't specify a security group ID, we use the default security group. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Security Groups> .
---
---     * If any of the AMIs have a product code attached for which the user has not subscribed, the request fails.
---
---
---
--- To ensure faster instance launches, break up large requests into smaller batches. For example, create 5 separate launch requests for 100 instances each instead of 1 launch request for 500 instances.
---
--- An instance is ready for you to use when it's in the @running@ state. You can check the state of your instance using 'DescribeInstances' . After launch, you can apply tags to your running instance (requires a resource ID). For more information, see 'CreateTags' and <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging Your Amazon EC2 Resources> .
---
--- Linux instances have access to the public key of the key pair at boot. You can use this key to provide secure access to the instance. Amazon EC2 public images use this feature to provide secure access without passwords. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- For troubleshooting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html What To Do If An Instance Immediately Terminates> , and <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html Troubleshooting Connecting to Your Instance> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.RunInstances
-    (
-    -- * Creating a Request
-      runInstances
-    , RunInstances
-    -- * Request Lenses
-    , rAdditionalInfo
-    , rSecurityGroupIds
-    , rSecurityGroups
-    , rClientToken
-    , rDisableAPITermination
-    , rKeyName
-    , rNetworkInterfaces
-    , rRAMDiskId
-    , rSubnetId
-    , rKernelId
-    , rInstanceType
-    , rEBSOptimized
-    , rUserData
-    , rMonitoring
-    , rIPv6AddressCount
-    , rIAMInstanceProfile
-    , rPrivateIPAddress
-    , rInstanceInitiatedShutdownBehavior
-    , rBlockDeviceMappings
-    , rDryRun
-    , rPlacement
-    , rIPv6Addresses
-    , rImageId
-    , rMinCount
-    , rMaxCount
-
-    -- * Destructuring the Response
-    , reservation
-    , Reservation
-    -- * Response Lenses
-    , rGroups
-    , rInstances
-    , rRequesterId
-    , rReservationId
-    , rOwnerId
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RunInstances.
---
---
---
--- /See:/ 'runInstances' smart constructor.
-data RunInstances = RunInstances'
-    { _rAdditionalInfo                    :: !(Maybe Text)
-    , _rSecurityGroupIds                  :: !(Maybe [Text])
-    , _rSecurityGroups                    :: !(Maybe [Text])
-    , _rClientToken                       :: !(Maybe Text)
-    , _rDisableAPITermination             :: !(Maybe Bool)
-    , _rKeyName                           :: !(Maybe Text)
-    , _rNetworkInterfaces                 :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _rRAMDiskId                         :: !(Maybe Text)
-    , _rSubnetId                          :: !(Maybe Text)
-    , _rKernelId                          :: !(Maybe Text)
-    , _rInstanceType                      :: !(Maybe InstanceType)
-    , _rEBSOptimized                      :: !(Maybe Bool)
-    , _rUserData                          :: !(Maybe Text)
-    , _rMonitoring                        :: !(Maybe RunInstancesMonitoringEnabled)
-    , _rIPv6AddressCount                  :: !(Maybe Int)
-    , _rIAMInstanceProfile                :: !(Maybe IAMInstanceProfileSpecification)
-    , _rPrivateIPAddress                  :: !(Maybe Text)
-    , _rInstanceInitiatedShutdownBehavior :: !(Maybe ShutdownBehavior)
-    , _rBlockDeviceMappings               :: !(Maybe [BlockDeviceMapping])
-    , _rDryRun                            :: !(Maybe Bool)
-    , _rPlacement                         :: !(Maybe Placement)
-    , _rIPv6Addresses                     :: !(Maybe [InstanceIPv6Address])
-    , _rImageId                           :: !Text
-    , _rMinCount                          :: !Int
-    , _rMaxCount                          :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rAdditionalInfo' - Reserved.
---
--- * 'rSecurityGroupIds' - One or more security group IDs. You can create a security group using 'CreateSecurityGroup' . Default: Amazon EC2 uses the default security group.
---
--- * 'rSecurityGroups' - [EC2-Classic, default VPC] One or more security group names. For a nondefault VPC, you must use security group IDs instead. Default: Amazon EC2 uses the default security group.
---
--- * 'rClientToken' - Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> . Constraints: Maximum 64 ASCII characters
---
--- * 'rDisableAPITermination' - If you set this parameter to @true@ , you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute to @false@ after launch, use 'ModifyInstanceAttribute' . Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to @terminate@ , you can terminate the instance by running the shutdown command from the instance. Default: @false@
---
--- * 'rKeyName' - The name of the key pair. You can create a key pair using 'CreateKeyPair' or 'ImportKeyPair' . /Important:/ If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.
---
--- * 'rNetworkInterfaces' - One or more network interfaces.
---
--- * 'rRAMDiskId' - The ID of the RAM disk. /Important:/ We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'rSubnetId' - [EC2-VPC] The ID of the subnet to launch the instance into.
---
--- * 'rKernelId' - The ID of the kernel. /Important:/ We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'rInstanceType' - The instance type. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> in the /Amazon Elastic Compute Cloud User Guide/ . Default: @m1.small@
---
--- * 'rEBSOptimized' - Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance. Default: @false@
---
--- * 'rUserData' - The user data to make available to the instance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Running Commands on Your Linux Instance at Launch> (Linux) and <http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data Adding User Data> (Windows). If you are using an AWS SDK or 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.
---
--- * 'rMonitoring' - The monitoring for the instance.
---
--- * 'rIPv6AddressCount' - [EC2-VPC] A number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.
---
--- * 'rIAMInstanceProfile' - The IAM instance profile.
---
--- * 'rPrivateIPAddress' - [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet. 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.
---
--- * 'rInstanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown). Default: @stop@
---
--- * 'rBlockDeviceMappings' - The block device mapping. /Important:/ Supplying both a snapshot ID and an encryption value as arguments for block-device mapping results in an error. This is because only blank volumes can be encrypted on start, and these are not created from a snapshot. If a snapshot is the basis for the volume, it contains data by definition and its encryption status cannot be changed using this action.
---
--- * 'rDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rPlacement' - The placement for the instance.
---
--- * 'rIPv6Addresses' - [EC2-VPC] Specify one or more IPv6 addresses from the range of the subnet to associate with the primary network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.
---
--- * 'rImageId' - The ID of the AMI, which you can get by calling 'DescribeImages' .
---
--- * 'rMinCount' - The minimum number of instances to launch. If you specify a minimum that is more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches no instances. Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2> in the Amazon EC2 General FAQ.
---
--- * 'rMaxCount' - The maximum number of instances to launch. If you specify more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above @MinCount@ . Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2> in the Amazon EC2 FAQ.
-runInstances
-    :: Text -- ^ 'rImageId'
-    -> Int -- ^ 'rMinCount'
-    -> Int -- ^ 'rMaxCount'
-    -> RunInstances
-runInstances pImageId_ pMinCount_ pMaxCount_ =
-    RunInstances'
-    { _rAdditionalInfo = Nothing
-    , _rSecurityGroupIds = Nothing
-    , _rSecurityGroups = Nothing
-    , _rClientToken = Nothing
-    , _rDisableAPITermination = Nothing
-    , _rKeyName = Nothing
-    , _rNetworkInterfaces = Nothing
-    , _rRAMDiskId = Nothing
-    , _rSubnetId = Nothing
-    , _rKernelId = Nothing
-    , _rInstanceType = Nothing
-    , _rEBSOptimized = Nothing
-    , _rUserData = Nothing
-    , _rMonitoring = Nothing
-    , _rIPv6AddressCount = Nothing
-    , _rIAMInstanceProfile = Nothing
-    , _rPrivateIPAddress = Nothing
-    , _rInstanceInitiatedShutdownBehavior = Nothing
-    , _rBlockDeviceMappings = Nothing
-    , _rDryRun = Nothing
-    , _rPlacement = Nothing
-    , _rIPv6Addresses = Nothing
-    , _rImageId = pImageId_
-    , _rMinCount = pMinCount_
-    , _rMaxCount = pMaxCount_
-    }
-
--- | Reserved.
-rAdditionalInfo :: Lens' RunInstances (Maybe Text)
-rAdditionalInfo = lens _rAdditionalInfo (\ s a -> s{_rAdditionalInfo = a});
-
--- | One or more security group IDs. You can create a security group using 'CreateSecurityGroup' . Default: Amazon EC2 uses the default security group.
-rSecurityGroupIds :: Lens' RunInstances [Text]
-rSecurityGroupIds = lens _rSecurityGroupIds (\ s a -> s{_rSecurityGroupIds = a}) . _Default . _Coerce;
-
--- | [EC2-Classic, default VPC] One or more security group names. For a nondefault VPC, you must use security group IDs instead. Default: Amazon EC2 uses the default security group.
-rSecurityGroups :: Lens' RunInstances [Text]
-rSecurityGroups = lens _rSecurityGroups (\ s a -> s{_rSecurityGroups = a}) . _Default . _Coerce;
-
--- | Unique, case-sensitive identifier you provide to ensure the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> . Constraints: Maximum 64 ASCII characters
-rClientToken :: Lens' RunInstances (Maybe Text)
-rClientToken = lens _rClientToken (\ s a -> s{_rClientToken = a});
-
--- | If you set this parameter to @true@ , you can't terminate the instance using the Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute to @false@ after launch, use 'ModifyInstanceAttribute' . Alternatively, if you set @InstanceInitiatedShutdownBehavior@ to @terminate@ , you can terminate the instance by running the shutdown command from the instance. Default: @false@
-rDisableAPITermination :: Lens' RunInstances (Maybe Bool)
-rDisableAPITermination = lens _rDisableAPITermination (\ s a -> s{_rDisableAPITermination = a});
-
--- | The name of the key pair. You can create a key pair using 'CreateKeyPair' or 'ImportKeyPair' . /Important:/ If you do not specify a key pair, you can't connect to the instance unless you choose an AMI that is configured to allow users another way to log in.
-rKeyName :: Lens' RunInstances (Maybe Text)
-rKeyName = lens _rKeyName (\ s a -> s{_rKeyName = a});
-
--- | One or more network interfaces.
-rNetworkInterfaces :: Lens' RunInstances [InstanceNetworkInterfaceSpecification]
-rNetworkInterfaces = lens _rNetworkInterfaces (\ s a -> s{_rNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk. /Important:/ We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB> in the /Amazon Elastic Compute Cloud User Guide/ .
-rRAMDiskId :: Lens' RunInstances (Maybe Text)
-rRAMDiskId = lens _rRAMDiskId (\ s a -> s{_rRAMDiskId = a});
-
--- | [EC2-VPC] The ID of the subnet to launch the instance into.
-rSubnetId :: Lens' RunInstances (Maybe Text)
-rSubnetId = lens _rSubnetId (\ s a -> s{_rSubnetId = a});
-
--- | The ID of the kernel. /Important:/ We recommend that you use PV-GRUB instead of kernels and RAM disks. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html PV-GRUB> in the /Amazon Elastic Compute Cloud User Guide/ .
-rKernelId :: Lens' RunInstances (Maybe Text)
-rKernelId = lens _rKernelId (\ s a -> s{_rKernelId = a});
-
--- | The instance type. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html Instance Types> in the /Amazon Elastic Compute Cloud User Guide/ . Default: @m1.small@
-rInstanceType :: Lens' RunInstances (Maybe InstanceType)
-rInstanceType = lens _rInstanceType (\ s a -> s{_rInstanceType = a});
-
--- | Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance. Default: @false@
-rEBSOptimized :: Lens' RunInstances (Maybe Bool)
-rEBSOptimized = lens _rEBSOptimized (\ s a -> s{_rEBSOptimized = a});
-
--- | The user data to make available to the instance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Running Commands on Your Linux Instance at Launch> (Linux) and <http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data Adding User Data> (Windows). If you are using an AWS SDK or 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.
-rUserData :: Lens' RunInstances (Maybe Text)
-rUserData = lens _rUserData (\ s a -> s{_rUserData = a});
-
--- | The monitoring for the instance.
-rMonitoring :: Lens' RunInstances (Maybe RunInstancesMonitoringEnabled)
-rMonitoring = lens _rMonitoring (\ s a -> s{_rMonitoring = a});
-
--- | [EC2-VPC] A number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.
-rIPv6AddressCount :: Lens' RunInstances (Maybe Int)
-rIPv6AddressCount = lens _rIPv6AddressCount (\ s a -> s{_rIPv6AddressCount = a});
-
--- | The IAM instance profile.
-rIAMInstanceProfile :: Lens' RunInstances (Maybe IAMInstanceProfileSpecification)
-rIAMInstanceProfile = lens _rIAMInstanceProfile (\ s a -> s{_rIAMInstanceProfile = a});
-
--- | [EC2-VPC] The primary IPv4 address. You must specify a value from the IPv4 address range of the subnet. 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.
-rPrivateIPAddress :: Lens' RunInstances (Maybe Text)
-rPrivateIPAddress = lens _rPrivateIPAddress (\ s a -> s{_rPrivateIPAddress = a});
-
--- | Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown). Default: @stop@
-rInstanceInitiatedShutdownBehavior :: Lens' RunInstances (Maybe ShutdownBehavior)
-rInstanceInitiatedShutdownBehavior = lens _rInstanceInitiatedShutdownBehavior (\ s a -> s{_rInstanceInitiatedShutdownBehavior = a});
-
--- | The block device mapping. /Important:/ Supplying both a snapshot ID and an encryption value as arguments for block-device mapping results in an error. This is because only blank volumes can be encrypted on start, and these are not created from a snapshot. If a snapshot is the basis for the volume, it contains data by definition and its encryption status cannot be changed using this action.
-rBlockDeviceMappings :: Lens' RunInstances [BlockDeviceMapping]
-rBlockDeviceMappings = lens _rBlockDeviceMappings (\ s a -> s{_rBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rDryRun :: Lens' RunInstances (Maybe Bool)
-rDryRun = lens _rDryRun (\ s a -> s{_rDryRun = a});
-
--- | The placement for the instance.
-rPlacement :: Lens' RunInstances (Maybe Placement)
-rPlacement = lens _rPlacement (\ s a -> s{_rPlacement = a});
-
--- | [EC2-VPC] Specify one or more IPv6 addresses from the range of the subnet to associate with the primary network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.
-rIPv6Addresses :: Lens' RunInstances [InstanceIPv6Address]
-rIPv6Addresses = lens _rIPv6Addresses (\ s a -> s{_rIPv6Addresses = a}) . _Default . _Coerce;
-
--- | The ID of the AMI, which you can get by calling 'DescribeImages' .
-rImageId :: Lens' RunInstances Text
-rImageId = lens _rImageId (\ s a -> s{_rImageId = a});
-
--- | The minimum number of instances to launch. If you specify a minimum that is more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches no instances. Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2> in the Amazon EC2 General FAQ.
-rMinCount :: Lens' RunInstances Int
-rMinCount = lens _rMinCount (\ s a -> s{_rMinCount = a});
-
--- | The maximum number of instances to launch. If you specify more instances than Amazon EC2 can launch in the target Availability Zone, Amazon EC2 launches the largest possible number of instances above @MinCount@ . Constraints: Between 1 and the maximum number you're allowed for the specified instance type. For more information about the default limits, and how to request an increase, see <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2> in the Amazon EC2 FAQ.
-rMaxCount :: Lens' RunInstances Int
-rMaxCount = lens _rMaxCount (\ s a -> s{_rMaxCount = a});
-
-instance AWSRequest RunInstances where
-        type Rs RunInstances = Reservation
-        request = postQuery ec2
-        response = receiveXML (\ s h x -> parseXML x)
-
-instance Hashable RunInstances
-
-instance NFData RunInstances
-
-instance ToHeaders RunInstances where
-        toHeaders = const mempty
-
-instance ToPath RunInstances where
-        toPath = const "/"
-
-instance ToQuery RunInstances where
-        toQuery RunInstances'{..}
-          = mconcat
-              ["Action" =: ("RunInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AdditionalInfo" =: _rAdditionalInfo,
-               toQuery
-                 (toQueryList "SecurityGroupId" <$>
-                    _rSecurityGroupIds),
-               toQuery
-                 (toQueryList "SecurityGroup" <$> _rSecurityGroups),
-               "ClientToken" =: _rClientToken,
-               "DisableApiTermination" =: _rDisableAPITermination,
-               "KeyName" =: _rKeyName,
-               toQuery
-                 (toQueryList "NetworkInterface" <$>
-                    _rNetworkInterfaces),
-               "RamdiskId" =: _rRAMDiskId, "SubnetId" =: _rSubnetId,
-               "KernelId" =: _rKernelId,
-               "InstanceType" =: _rInstanceType,
-               "EbsOptimized" =: _rEBSOptimized,
-               "UserData" =: _rUserData,
-               "Monitoring" =: _rMonitoring,
-               "Ipv6AddressCount" =: _rIPv6AddressCount,
-               "IamInstanceProfile" =: _rIAMInstanceProfile,
-               "PrivateIpAddress" =: _rPrivateIPAddress,
-               "InstanceInitiatedShutdownBehavior" =:
-                 _rInstanceInitiatedShutdownBehavior,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _rBlockDeviceMappings),
-               "DryRun" =: _rDryRun, "Placement" =: _rPlacement,
-               toQuery
-                 (toQueryList "Ipv6Address" <$> _rIPv6Addresses),
-               "ImageId" =: _rImageId, "MinCount" =: _rMinCount,
-               "MaxCount" =: _rMaxCount]
diff --git a/gen/Network/AWS/EC2/RunScheduledInstances.hs b/gen/Network/AWS/EC2/RunScheduledInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/RunScheduledInstances.hs
+++ /dev/null
@@ -1,181 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.RunScheduledInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Launches the specified Scheduled Instances.
---
---
--- Before you can launch a Scheduled Instance, you must purchase it and obtain an identifier using 'PurchaseScheduledInstances' .
---
--- You must launch a Scheduled Instance during its scheduled time period. You can't stop or reboot a Scheduled Instance, but you can terminate it as needed. If you terminate a Scheduled Instance before the current scheduled time period ends, you can launch it again after a few minutes. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-scheduled-instances.html Scheduled Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.RunScheduledInstances
-    (
-    -- * Creating a Request
-      runScheduledInstances
-    , RunScheduledInstances
-    -- * Request Lenses
-    , rsiClientToken
-    , rsiInstanceCount
-    , rsiDryRun
-    , rsiScheduledInstanceId
-    , rsiLaunchSpecification
-
-    -- * Destructuring the Response
-    , runScheduledInstancesResponse
-    , RunScheduledInstancesResponse
-    -- * Response Lenses
-    , rrsInstanceIdSet
-    , rrsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for RunScheduledInstances.
---
---
---
--- /See:/ 'runScheduledInstances' smart constructor.
-data RunScheduledInstances = RunScheduledInstances'
-    { _rsiClientToken         :: !(Maybe Text)
-    , _rsiInstanceCount       :: !(Maybe Int)
-    , _rsiDryRun              :: !(Maybe Bool)
-    , _rsiScheduledInstanceId :: !Text
-    , _rsiLaunchSpecification :: !ScheduledInstancesLaunchSpecification
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunScheduledInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rsiClientToken' - Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
---
--- * 'rsiInstanceCount' - The number of instances. Default: 1
---
--- * 'rsiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'rsiScheduledInstanceId' - The Scheduled Instance ID.
---
--- * 'rsiLaunchSpecification' - The launch specification. You must match the instance type, Availability Zone, network, and platform of the schedule that you purchased.
-runScheduledInstances
-    :: Text -- ^ 'rsiScheduledInstanceId'
-    -> ScheduledInstancesLaunchSpecification -- ^ 'rsiLaunchSpecification'
-    -> RunScheduledInstances
-runScheduledInstances pScheduledInstanceId_ pLaunchSpecification_ =
-    RunScheduledInstances'
-    { _rsiClientToken = Nothing
-    , _rsiInstanceCount = Nothing
-    , _rsiDryRun = Nothing
-    , _rsiScheduledInstanceId = pScheduledInstanceId_
-    , _rsiLaunchSpecification = pLaunchSpecification_
-    }
-
--- | Unique, case-sensitive identifier that ensures the idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-rsiClientToken :: Lens' RunScheduledInstances (Maybe Text)
-rsiClientToken = lens _rsiClientToken (\ s a -> s{_rsiClientToken = a});
-
--- | The number of instances. Default: 1
-rsiInstanceCount :: Lens' RunScheduledInstances (Maybe Int)
-rsiInstanceCount = lens _rsiInstanceCount (\ s a -> s{_rsiInstanceCount = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-rsiDryRun :: Lens' RunScheduledInstances (Maybe Bool)
-rsiDryRun = lens _rsiDryRun (\ s a -> s{_rsiDryRun = a});
-
--- | The Scheduled Instance ID.
-rsiScheduledInstanceId :: Lens' RunScheduledInstances Text
-rsiScheduledInstanceId = lens _rsiScheduledInstanceId (\ s a -> s{_rsiScheduledInstanceId = a});
-
--- | The launch specification. You must match the instance type, Availability Zone, network, and platform of the schedule that you purchased.
-rsiLaunchSpecification :: Lens' RunScheduledInstances ScheduledInstancesLaunchSpecification
-rsiLaunchSpecification = lens _rsiLaunchSpecification (\ s a -> s{_rsiLaunchSpecification = a});
-
-instance AWSRequest RunScheduledInstances where
-        type Rs RunScheduledInstances =
-             RunScheduledInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 RunScheduledInstancesResponse' <$>
-                   (x .@? "instanceIdSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable RunScheduledInstances
-
-instance NFData RunScheduledInstances
-
-instance ToHeaders RunScheduledInstances where
-        toHeaders = const mempty
-
-instance ToPath RunScheduledInstances where
-        toPath = const "/"
-
-instance ToQuery RunScheduledInstances where
-        toQuery RunScheduledInstances'{..}
-          = mconcat
-              ["Action" =: ("RunScheduledInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "ClientToken" =: _rsiClientToken,
-               "InstanceCount" =: _rsiInstanceCount,
-               "DryRun" =: _rsiDryRun,
-               "ScheduledInstanceId" =: _rsiScheduledInstanceId,
-               "LaunchSpecification" =: _rsiLaunchSpecification]
-
--- | Contains the output of RunScheduledInstances.
---
---
---
--- /See:/ 'runScheduledInstancesResponse' smart constructor.
-data RunScheduledInstancesResponse = RunScheduledInstancesResponse'
-    { _rrsInstanceIdSet  :: !(Maybe [Text])
-    , _rrsResponseStatus :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunScheduledInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrsInstanceIdSet' - The IDs of the newly launched instances.
---
--- * 'rrsResponseStatus' - -- | The response status code.
-runScheduledInstancesResponse
-    :: Int -- ^ 'rrsResponseStatus'
-    -> RunScheduledInstancesResponse
-runScheduledInstancesResponse pResponseStatus_ =
-    RunScheduledInstancesResponse'
-    { _rrsInstanceIdSet = Nothing
-    , _rrsResponseStatus = pResponseStatus_
-    }
-
--- | The IDs of the newly launched instances.
-rrsInstanceIdSet :: Lens' RunScheduledInstancesResponse [Text]
-rrsInstanceIdSet = lens _rrsInstanceIdSet (\ s a -> s{_rrsInstanceIdSet = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-rrsResponseStatus :: Lens' RunScheduledInstancesResponse Int
-rrsResponseStatus = lens _rrsResponseStatus (\ s a -> s{_rrsResponseStatus = a});
-
-instance NFData RunScheduledInstancesResponse
diff --git a/gen/Network/AWS/EC2/StartInstances.hs b/gen/Network/AWS/EC2/StartInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/StartInstances.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.StartInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Starts an Amazon EBS-backed AMI that you've previously stopped.
---
---
--- 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 hourly instance usage. However, your root partition Amazon EBS volume remains, continues to persist your data, and you are charged for Amazon EBS volume usage. You can restart your instance at any time. Each time you transition an instance from stopped to started, Amazon EC2 charges a full instance hour, even if transitions happen multiple times within a single hour.
---
--- 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.
---
--- Performing this operation on an instance that uses an instance store as its root device returns an error.
---
--- For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html Stopping Instances> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.StartInstances
-    (
-    -- * Creating a Request
-      startInstances
-    , StartInstances
-    -- * Request Lenses
-    , sAdditionalInfo
-    , sDryRun
-    , sInstanceIds
-
-    -- * Destructuring the Response
-    , startInstancesResponse
-    , StartInstancesResponse
-    -- * Response Lenses
-    , srsStartingInstances
-    , srsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for StartInstances.
---
---
---
--- /See:/ 'startInstances' smart constructor.
-data StartInstances = StartInstances'
-    { _sAdditionalInfo :: !(Maybe Text)
-    , _sDryRun         :: !(Maybe Bool)
-    , _sInstanceIds    :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StartInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sAdditionalInfo' - Reserved.
---
--- * 'sDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'sInstanceIds' - One or more instance IDs.
-startInstances
-    :: StartInstances
-startInstances =
-    StartInstances'
-    { _sAdditionalInfo = Nothing
-    , _sDryRun = Nothing
-    , _sInstanceIds = mempty
-    }
-
--- | Reserved.
-sAdditionalInfo :: Lens' StartInstances (Maybe Text)
-sAdditionalInfo = lens _sAdditionalInfo (\ s a -> s{_sAdditionalInfo = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-sDryRun :: Lens' StartInstances (Maybe Bool)
-sDryRun = lens _sDryRun (\ s a -> s{_sDryRun = a});
-
--- | One or more instance IDs.
-sInstanceIds :: Lens' StartInstances [Text]
-sInstanceIds = lens _sInstanceIds (\ s a -> s{_sInstanceIds = a}) . _Coerce;
-
-instance AWSRequest StartInstances where
-        type Rs StartInstances = StartInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 StartInstancesResponse' <$>
-                   (x .@? "instancesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable StartInstances
-
-instance NFData StartInstances
-
-instance ToHeaders StartInstances where
-        toHeaders = const mempty
-
-instance ToPath StartInstances where
-        toPath = const "/"
-
-instance ToQuery StartInstances where
-        toQuery StartInstances'{..}
-          = mconcat
-              ["Action" =: ("StartInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "AdditionalInfo" =: _sAdditionalInfo,
-               "DryRun" =: _sDryRun,
-               toQueryList "InstanceId" _sInstanceIds]
-
--- | Contains the output of StartInstances.
---
---
---
--- /See:/ 'startInstancesResponse' smart constructor.
-data StartInstancesResponse = StartInstancesResponse'
-    { _srsStartingInstances :: !(Maybe [InstanceStateChange])
-    , _srsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StartInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srsStartingInstances' - Information about one or more started instances.
---
--- * 'srsResponseStatus' - -- | The response status code.
-startInstancesResponse
-    :: Int -- ^ 'srsResponseStatus'
-    -> StartInstancesResponse
-startInstancesResponse pResponseStatus_ =
-    StartInstancesResponse'
-    { _srsStartingInstances = Nothing
-    , _srsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more started instances.
-srsStartingInstances :: Lens' StartInstancesResponse [InstanceStateChange]
-srsStartingInstances = lens _srsStartingInstances (\ s a -> s{_srsStartingInstances = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-srsResponseStatus :: Lens' StartInstancesResponse Int
-srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
-
-instance NFData StartInstancesResponse
diff --git a/gen/Network/AWS/EC2/StopInstances.hs b/gen/Network/AWS/EC2/StopInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/StopInstances.hs
+++ /dev/null
@@ -1,163 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.StopInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Stops an Amazon EBS-backed instance.
---
---
--- We don't charge hourly usage for a stopped instance, or data transfer fees; however, your root partition Amazon EBS volume remains, continues to persist your data, and you are charged for Amazon EBS volume usage. Each time you transition an instance from stopped to started, Amazon EC2 charges a full instance hour, even if transitions happen multiple times within a single hour.
---
--- You can't start or stop Spot instances, and you can't stop instance store-backed instances.
---
--- When you stop an instance, we shut it down. You can restart your instance at any time. 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.
---
--- Stopping an instance is different to rebooting or terminating 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, the root device and any other devices attached during the instance launch are automatically deleted. For more information about the differences between rebooting, stopping, and terminating instances, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance Lifecycle> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- 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 <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html Troubleshooting Stopping Your Instance> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.StopInstances
-    (
-    -- * Creating a Request
-      stopInstances
-    , StopInstances
-    -- * Request Lenses
-    , siForce
-    , siDryRun
-    , siInstanceIds
-
-    -- * Destructuring the Response
-    , stopInstancesResponse
-    , StopInstancesResponse
-    -- * Response Lenses
-    , sirsStoppingInstances
-    , sirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for StopInstances.
---
---
---
--- /See:/ 'stopInstances' smart constructor.
-data StopInstances = StopInstances'
-    { _siForce       :: !(Maybe Bool)
-    , _siDryRun      :: !(Maybe Bool)
-    , _siInstanceIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StopInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siForce' - Forces the instances to stop. The instances do not have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances. Default: @false@
---
--- * 'siDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'siInstanceIds' - One or more instance IDs.
-stopInstances
-    :: StopInstances
-stopInstances =
-    StopInstances'
-    { _siForce = Nothing
-    , _siDryRun = Nothing
-    , _siInstanceIds = mempty
-    }
-
--- | Forces the instances to stop. The instances do not have an opportunity to flush file system caches or file system metadata. If you use this option, you must perform file system check and repair procedures. This option is not recommended for Windows instances. Default: @false@
-siForce :: Lens' StopInstances (Maybe Bool)
-siForce = lens _siForce (\ s a -> s{_siForce = a});
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-siDryRun :: Lens' StopInstances (Maybe Bool)
-siDryRun = lens _siDryRun (\ s a -> s{_siDryRun = a});
-
--- | One or more instance IDs.
-siInstanceIds :: Lens' StopInstances [Text]
-siInstanceIds = lens _siInstanceIds (\ s a -> s{_siInstanceIds = a}) . _Coerce;
-
-instance AWSRequest StopInstances where
-        type Rs StopInstances = StopInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 StopInstancesResponse' <$>
-                   (x .@? "instancesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable StopInstances
-
-instance NFData StopInstances
-
-instance ToHeaders StopInstances where
-        toHeaders = const mempty
-
-instance ToPath StopInstances where
-        toPath = const "/"
-
-instance ToQuery StopInstances where
-        toQuery StopInstances'{..}
-          = mconcat
-              ["Action" =: ("StopInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "Force" =: _siForce, "DryRun" =: _siDryRun,
-               toQueryList "InstanceId" _siInstanceIds]
-
--- | Contains the output of StopInstances.
---
---
---
--- /See:/ 'stopInstancesResponse' smart constructor.
-data StopInstancesResponse = StopInstancesResponse'
-    { _sirsStoppingInstances :: !(Maybe [InstanceStateChange])
-    , _sirsResponseStatus    :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StopInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sirsStoppingInstances' - Information about one or more stopped instances.
---
--- * 'sirsResponseStatus' - -- | The response status code.
-stopInstancesResponse
-    :: Int -- ^ 'sirsResponseStatus'
-    -> StopInstancesResponse
-stopInstancesResponse pResponseStatus_ =
-    StopInstancesResponse'
-    { _sirsStoppingInstances = Nothing
-    , _sirsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more stopped instances.
-sirsStoppingInstances :: Lens' StopInstancesResponse [InstanceStateChange]
-sirsStoppingInstances = lens _sirsStoppingInstances (\ s a -> s{_sirsStoppingInstances = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-sirsResponseStatus :: Lens' StopInstancesResponse Int
-sirsResponseStatus = lens _sirsResponseStatus (\ s a -> s{_sirsResponseStatus = a});
-
-instance NFData StopInstancesResponse
diff --git a/gen/Network/AWS/EC2/TerminateInstances.hs b/gen/Network/AWS/EC2/TerminateInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/TerminateInstances.hs
+++ /dev/null
@@ -1,155 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.TerminateInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Shuts down one or more instances. This operation is idempotent; if you terminate an instance more than once, each call succeeds.
---
---
--- If you specify multiple instances and the request fails (for example, because of a single incorrect instance ID), none of the instances are terminated.
---
--- Terminated instances remain visible after termination (for approximately one hour).
---
--- By default, Amazon EC2 deletes all EBS volumes that were attached when the instance launched. Volumes attached after instance launch continue running.
---
--- 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 @DeleteOnTermination@ block device mapping parameter set to @true@ are automatically deleted. For more information about the differences between stopping and terminating instances, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-lifecycle.html Instance Lifecycle> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- For more information about troubleshooting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html Troubleshooting Terminating Your Instance> in the /Amazon Elastic Compute Cloud User Guide/ .
---
-module Network.AWS.EC2.TerminateInstances
-    (
-    -- * Creating a Request
-      terminateInstances
-    , TerminateInstances
-    -- * Request Lenses
-    , tiDryRun
-    , tiInstanceIds
-
-    -- * Destructuring the Response
-    , terminateInstancesResponse
-    , TerminateInstancesResponse
-    -- * Response Lenses
-    , tirsTerminatingInstances
-    , tirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for TerminateInstances.
---
---
---
--- /See:/ 'terminateInstances' smart constructor.
-data TerminateInstances = TerminateInstances'
-    { _tiDryRun      :: !(Maybe Bool)
-    , _tiInstanceIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TerminateInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'tiInstanceIds' - One or more instance IDs. Constraints: Up to 1000 instance IDs. We recommend breaking up this request into smaller batches.
-terminateInstances
-    :: TerminateInstances
-terminateInstances =
-    TerminateInstances'
-    { _tiDryRun = Nothing
-    , _tiInstanceIds = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-tiDryRun :: Lens' TerminateInstances (Maybe Bool)
-tiDryRun = lens _tiDryRun (\ s a -> s{_tiDryRun = a});
-
--- | One or more instance IDs. Constraints: Up to 1000 instance IDs. We recommend breaking up this request into smaller batches.
-tiInstanceIds :: Lens' TerminateInstances [Text]
-tiInstanceIds = lens _tiInstanceIds (\ s a -> s{_tiInstanceIds = a}) . _Coerce;
-
-instance AWSRequest TerminateInstances where
-        type Rs TerminateInstances =
-             TerminateInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 TerminateInstancesResponse' <$>
-                   (x .@? "instancesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable TerminateInstances
-
-instance NFData TerminateInstances
-
-instance ToHeaders TerminateInstances where
-        toHeaders = const mempty
-
-instance ToPath TerminateInstances where
-        toPath = const "/"
-
-instance ToQuery TerminateInstances where
-        toQuery TerminateInstances'{..}
-          = mconcat
-              ["Action" =: ("TerminateInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _tiDryRun,
-               toQueryList "InstanceId" _tiInstanceIds]
-
--- | Contains the output of TerminateInstances.
---
---
---
--- /See:/ 'terminateInstancesResponse' smart constructor.
-data TerminateInstancesResponse = TerminateInstancesResponse'
-    { _tirsTerminatingInstances :: !(Maybe [InstanceStateChange])
-    , _tirsResponseStatus       :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TerminateInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tirsTerminatingInstances' - Information about one or more terminated instances.
---
--- * 'tirsResponseStatus' - -- | The response status code.
-terminateInstancesResponse
-    :: Int -- ^ 'tirsResponseStatus'
-    -> TerminateInstancesResponse
-terminateInstancesResponse pResponseStatus_ =
-    TerminateInstancesResponse'
-    { _tirsTerminatingInstances = Nothing
-    , _tirsResponseStatus = pResponseStatus_
-    }
-
--- | Information about one or more terminated instances.
-tirsTerminatingInstances :: Lens' TerminateInstancesResponse [InstanceStateChange]
-tirsTerminatingInstances = lens _tirsTerminatingInstances (\ s a -> s{_tirsTerminatingInstances = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-tirsResponseStatus :: Lens' TerminateInstancesResponse Int
-tirsResponseStatus = lens _tirsResponseStatus (\ s a -> s{_tirsResponseStatus = a});
-
-instance NFData TerminateInstancesResponse
diff --git a/gen/Network/AWS/EC2/Types.hs b/gen/Network/AWS/EC2/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/Types.hs
+++ /dev/null
@@ -1,2199 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.Types
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.EC2.Types
-    (
-    -- * Service Configuration
-      ec2
-
-    -- * Errors
-
-    -- * Re-exported Types
-    , module Network.AWS.EC2.Internal
-
-    -- * AccountAttributeName
-    , AccountAttributeName (..)
-
-    -- * ActivityStatus
-    , ActivityStatus (..)
-
-    -- * AddressStatus
-    , AddressStatus (..)
-
-    -- * Affinity
-    , Affinity (..)
-
-    -- * AllocationState
-    , AllocationState (..)
-
-    -- * AllocationStrategy
-    , AllocationStrategy (..)
-
-    -- * ArchitectureValues
-    , ArchitectureValues (..)
-
-    -- * AttachmentStatus
-    , AttachmentStatus (..)
-
-    -- * AutoPlacement
-    , AutoPlacement (..)
-
-    -- * AvailabilityZoneState
-    , AvailabilityZoneState (..)
-
-    -- * BatchState
-    , BatchState (..)
-
-    -- * BundleTaskState
-    , BundleTaskState (..)
-
-    -- * CancelBatchErrorCode
-    , CancelBatchErrorCode (..)
-
-    -- * CancelSpotInstanceRequestState
-    , CancelSpotInstanceRequestState (..)
-
-    -- * ContainerFormat
-    , ContainerFormat (..)
-
-    -- * ConversionTaskState
-    , ConversionTaskState (..)
-
-    -- * CurrencyCodeValues
-    , CurrencyCodeValues (..)
-
-    -- * DatafeedSubscriptionState
-    , DatafeedSubscriptionState (..)
-
-    -- * DeviceType
-    , DeviceType (..)
-
-    -- * DiskImageFormat
-    , DiskImageFormat (..)
-
-    -- * DomainType
-    , DomainType (..)
-
-    -- * EventCode
-    , EventCode (..)
-
-    -- * EventType
-    , EventType (..)
-
-    -- * ExcessCapacityTerminationPolicy
-    , ExcessCapacityTerminationPolicy (..)
-
-    -- * ExportEnvironment
-    , ExportEnvironment (..)
-
-    -- * ExportTaskState
-    , ExportTaskState (..)
-
-    -- * FleetType
-    , FleetType (..)
-
-    -- * FlowLogsResourceType
-    , FlowLogsResourceType (..)
-
-    -- * GatewayType
-    , GatewayType (..)
-
-    -- * HostTenancy
-    , HostTenancy (..)
-
-    -- * HypervisorType
-    , HypervisorType (..)
-
-    -- * ImageAttributeName
-    , ImageAttributeName (..)
-
-    -- * ImageState
-    , ImageState (..)
-
-    -- * ImageTypeValues
-    , ImageTypeValues (..)
-
-    -- * InstanceAttributeName
-    , InstanceAttributeName (..)
-
-    -- * InstanceLifecycleType
-    , InstanceLifecycleType (..)
-
-    -- * InstanceStateName
-    , InstanceStateName (..)
-
-    -- * InstanceType
-    , InstanceType (..)
-
-    -- * ListingState
-    , ListingState (..)
-
-    -- * ListingStatus
-    , ListingStatus (..)
-
-    -- * MonitoringState
-    , MonitoringState (..)
-
-    -- * MoveStatus
-    , MoveStatus (..)
-
-    -- * NatGatewayState
-    , NatGatewayState (..)
-
-    -- * NetworkInterfaceAttribute
-    , NetworkInterfaceAttribute (..)
-
-    -- * NetworkInterfaceStatus
-    , NetworkInterfaceStatus (..)
-
-    -- * NetworkInterfaceType
-    , NetworkInterfaceType (..)
-
-    -- * OfferingClassType
-    , OfferingClassType (..)
-
-    -- * OfferingTypeValues
-    , OfferingTypeValues (..)
-
-    -- * OperationType
-    , OperationType (..)
-
-    -- * PaymentOption
-    , PaymentOption (..)
-
-    -- * PermissionGroup
-    , PermissionGroup (..)
-
-    -- * PlacementGroupState
-    , PlacementGroupState (..)
-
-    -- * PlacementStrategy
-    , PlacementStrategy (..)
-
-    -- * PlatformValues
-    , PlatformValues (..)
-
-    -- * ProductCodeValues
-    , ProductCodeValues (..)
-
-    -- * RIProductDescription
-    , RIProductDescription (..)
-
-    -- * RecurringChargeFrequency
-    , RecurringChargeFrequency (..)
-
-    -- * ReportInstanceReasonCodes
-    , ReportInstanceReasonCodes (..)
-
-    -- * ReportStatusType
-    , ReportStatusType (..)
-
-    -- * ReservationState
-    , ReservationState (..)
-
-    -- * ReservedInstanceState
-    , ReservedInstanceState (..)
-
-    -- * ResetImageAttributeName
-    , ResetImageAttributeName (..)
-
-    -- * ResourceType
-    , ResourceType (..)
-
-    -- * RouteOrigin
-    , RouteOrigin (..)
-
-    -- * RouteState
-    , RouteState (..)
-
-    -- * RuleAction
-    , RuleAction (..)
-
-    -- * Scope
-    , Scope (..)
-
-    -- * ShutdownBehavior
-    , ShutdownBehavior (..)
-
-    -- * SnapshotAttributeName
-    , SnapshotAttributeName (..)
-
-    -- * SnapshotState
-    , SnapshotState (..)
-
-    -- * SpotInstanceState
-    , SpotInstanceState (..)
-
-    -- * SpotInstanceType
-    , SpotInstanceType (..)
-
-    -- * State
-    , State (..)
-
-    -- * StatusName
-    , StatusName (..)
-
-    -- * StatusType
-    , StatusType (..)
-
-    -- * SubnetCidrBlockStateCode
-    , SubnetCidrBlockStateCode (..)
-
-    -- * SubnetState
-    , SubnetState (..)
-
-    -- * SummaryStatus
-    , SummaryStatus (..)
-
-    -- * TelemetryStatus
-    , TelemetryStatus (..)
-
-    -- * Tenancy
-    , Tenancy (..)
-
-    -- * TrafficType
-    , TrafficType (..)
-
-    -- * VPCAttributeName
-    , VPCAttributeName (..)
-
-    -- * VPCCidrBlockStateCode
-    , VPCCidrBlockStateCode (..)
-
-    -- * VPCPeeringConnectionStateReasonCode
-    , VPCPeeringConnectionStateReasonCode (..)
-
-    -- * VPCState
-    , VPCState (..)
-
-    -- * VPNState
-    , VPNState (..)
-
-    -- * VPNStaticRouteSource
-    , VPNStaticRouteSource (..)
-
-    -- * VirtualizationType
-    , VirtualizationType (..)
-
-    -- * VolumeAttachmentState
-    , VolumeAttachmentState (..)
-
-    -- * VolumeAttributeName
-    , VolumeAttributeName (..)
-
-    -- * VolumeState
-    , VolumeState (..)
-
-    -- * VolumeStatusInfoStatus
-    , VolumeStatusInfoStatus (..)
-
-    -- * VolumeStatusName
-    , VolumeStatusName (..)
-
-    -- * VolumeType
-    , VolumeType (..)
-
-    -- * AccountAttribute
-    , AccountAttribute
-    , accountAttribute
-    , aaAttributeValues
-    , aaAttributeName
-
-    -- * AccountAttributeValue
-    , AccountAttributeValue
-    , accountAttributeValue
-    , aavAttributeValue
-
-    -- * ActiveInstance
-    , ActiveInstance
-    , activeInstance
-    , aiInstanceId
-    , aiInstanceType
-    , aiSpotInstanceRequestId
-
-    -- * Address
-    , Address
-    , address
-    , aAssociationId
-    , aInstanceId
-    , aNetworkInterfaceOwnerId
-    , aAllocationId
-    , aDomain
-    , aNetworkInterfaceId
-    , aPrivateIPAddress
-    , aPublicIP
-
-    -- * AttributeBooleanValue
-    , AttributeBooleanValue
-    , attributeBooleanValue
-    , abvValue
-
-    -- * AttributeValue
-    , AttributeValue
-    , attributeValue
-    , avValue
-
-    -- * AvailabilityZone
-    , AvailabilityZone
-    , availabilityZone
-    , azState
-    , azRegionName
-    , azZoneName
-    , azMessages
-
-    -- * AvailabilityZoneMessage
-    , AvailabilityZoneMessage
-    , availabilityZoneMessage
-    , azmMessage
-
-    -- * AvailableCapacity
-    , AvailableCapacity
-    , availableCapacity
-    , acAvailableInstanceCapacity
-    , acAvailableVCPUs
-
-    -- * BlobAttributeValue
-    , BlobAttributeValue
-    , blobAttributeValue
-    , bavValue
-
-    -- * BlockDeviceMapping
-    , BlockDeviceMapping
-    , blockDeviceMapping
-    , bdmVirtualName
-    , bdmNoDevice
-    , bdmEBS
-    , bdmDeviceName
-
-    -- * BundleTask
-    , BundleTask
-    , bundleTask
-    , btBundleTaskError
-    , btBundleId
-    , btInstanceId
-    , btProgress
-    , btStartTime
-    , btState
-    , btStorage
-    , btUpdateTime
-
-    -- * BundleTaskError
-    , BundleTaskError
-    , bundleTaskError
-    , bteCode
-    , bteMessage
-
-    -- * CancelSpotFleetRequestsError
-    , CancelSpotFleetRequestsError
-    , cancelSpotFleetRequestsError
-    , csfreCode
-    , csfreMessage
-
-    -- * CancelSpotFleetRequestsErrorItem
-    , CancelSpotFleetRequestsErrorItem
-    , cancelSpotFleetRequestsErrorItem
-    , csfreiSpotFleetRequestId
-    , csfreiError
-
-    -- * CancelSpotFleetRequestsSuccessItem
-    , CancelSpotFleetRequestsSuccessItem
-    , cancelSpotFleetRequestsSuccessItem
-    , csfrsiSpotFleetRequestId
-    , csfrsiCurrentSpotFleetRequestState
-    , csfrsiPreviousSpotFleetRequestState
-
-    -- * CancelledSpotInstanceRequest
-    , CancelledSpotInstanceRequest
-    , cancelledSpotInstanceRequest
-    , csirState
-    , csirSpotInstanceRequestId
-
-    -- * ClassicLinkDNSSupport
-    , ClassicLinkDNSSupport
-    , classicLinkDNSSupport
-    , cldsVPCId
-    , cldsClassicLinkDNSSupported
-
-    -- * ClassicLinkInstance
-    , ClassicLinkInstance
-    , classicLinkInstance
-    , cliInstanceId
-    , cliGroups
-    , cliVPCId
-    , cliTags
-
-    -- * ClientData
-    , ClientData
-    , clientData
-    , cdUploadStart
-    , cdUploadSize
-    , cdUploadEnd
-    , cdComment
-
-    -- * ConversionTask
-    , ConversionTask
-    , conversionTask
-    , ctImportInstance
-    , ctStatusMessage
-    , ctImportVolume
-    , ctExpirationTime
-    , ctTags
-    , ctConversionTaskId
-    , ctState
-
-    -- * CreateVolumePermission
-    , CreateVolumePermission
-    , createVolumePermission
-    , cvpGroup
-    , cvpUserId
-
-    -- * CreateVolumePermissionModifications
-    , CreateVolumePermissionModifications
-    , createVolumePermissionModifications
-    , cvpmRemove
-    , cvpmAdd
-
-    -- * CustomerGateway
-    , CustomerGateway
-    , customerGateway
-    , cgTags
-    , cgBGPASN
-    , cgCustomerGatewayId
-    , cgIPAddress
-    , cgState
-    , cgType
-
-    -- * DHCPConfiguration
-    , DHCPConfiguration
-    , dhcpConfiguration
-    , dcValues
-    , dcKey
-
-    -- * DHCPOptions
-    , DHCPOptions
-    , dhcpOptions
-    , doDHCPConfigurations
-    , doDHCPOptionsId
-    , doTags
-
-    -- * DiskImage
-    , DiskImage
-    , diskImage
-    , diImage
-    , diVolume
-    , diDescription
-
-    -- * DiskImageDescription
-    , DiskImageDescription
-    , diskImageDescription
-    , dChecksum
-    , dFormat
-    , dSize
-    , dImportManifestURL
-
-    -- * DiskImageDetail
-    , DiskImageDetail
-    , diskImageDetail
-    , didFormat
-    , didBytes
-    , didImportManifestURL
-
-    -- * DiskImageVolumeDescription
-    , DiskImageVolumeDescription
-    , diskImageVolumeDescription
-    , divdSize
-    , divdId
-
-    -- * EBSBlockDevice
-    , EBSBlockDevice
-    , ebsBlockDevice
-    , ebdDeleteOnTermination
-    , ebdVolumeSize
-    , ebdIOPS
-    , ebdEncrypted
-    , ebdVolumeType
-    , ebdSnapshotId
-
-    -- * EBSInstanceBlockDevice
-    , EBSInstanceBlockDevice
-    , ebsInstanceBlockDevice
-    , eibdStatus
-    , eibdDeleteOnTermination
-    , eibdVolumeId
-    , eibdAttachTime
-
-    -- * EBSInstanceBlockDeviceSpecification
-    , EBSInstanceBlockDeviceSpecification
-    , ebsInstanceBlockDeviceSpecification
-    , eibdsDeleteOnTermination
-    , eibdsVolumeId
-
-    -- * EgressOnlyInternetGateway
-    , EgressOnlyInternetGateway
-    , egressOnlyInternetGateway
-    , eoigEgressOnlyInternetGatewayId
-    , eoigAttachments
-
-    -- * EventInformation
-    , EventInformation
-    , eventInformation
-    , eiInstanceId
-    , eiEventDescription
-    , eiEventSubType
-
-    -- * ExportTask
-    , ExportTask
-    , exportTask
-    , etDescription
-    , etExportTaskId
-    , etExportToS3Task
-    , etInstanceExportDetails
-    , etState
-    , etStatusMessage
-
-    -- * ExportToS3Task
-    , ExportToS3Task
-    , exportToS3Task
-    , etstS3Key
-    , etstContainerFormat
-    , etstS3Bucket
-    , etstDiskImageFormat
-
-    -- * ExportToS3TaskSpecification
-    , ExportToS3TaskSpecification
-    , exportToS3TaskSpecification
-    , etstsContainerFormat
-    , etstsS3Prefix
-    , etstsS3Bucket
-    , etstsDiskImageFormat
-
-    -- * Filter
-    , Filter
-    , filter'
-    , fValues
-    , fName
-
-    -- * FlowLog
-    , FlowLog
-    , flowLog
-    , flCreationTime
-    , flResourceId
-    , flFlowLogStatus
-    , flTrafficType
-    , flDeliverLogsStatus
-    , flDeliverLogsErrorMessage
-    , flLogGroupName
-    , flDeliverLogsPermissionARN
-    , flFlowLogId
-
-    -- * GroupIdentifier
-    , GroupIdentifier
-    , groupIdentifier
-    , giGroupId
-    , giGroupName
-
-    -- * HistoryRecord
-    , HistoryRecord
-    , historyRecord
-    , hrTimestamp
-    , hrEventType
-    , hrEventInformation
-
-    -- * Host
-    , Host
-    , host
-    , hState
-    , hClientToken
-    , hHostId
-    , hAvailableCapacity
-    , hHostReservationId
-    , hHostProperties
-    , hAvailabilityZone
-    , hInstances
-    , hAutoPlacement
-
-    -- * HostInstance
-    , HostInstance
-    , hostInstance
-    , hiInstanceId
-    , hiInstanceType
-
-    -- * HostOffering
-    , HostOffering
-    , hostOffering
-    , hoInstanceFamily
-    , hoCurrencyCode
-    , hoHourlyPrice
-    , hoUpfrontPrice
-    , hoOfferingId
-    , hoDuration
-    , hoPaymentOption
-
-    -- * HostProperties
-    , HostProperties
-    , hostProperties
-    , hpInstanceType
-    , hpTotalVCPUs
-    , hpCores
-    , hpSockets
-
-    -- * HostReservation
-    , HostReservation
-    , hostReservation
-    , hrState
-    , hrInstanceFamily
-    , hrCurrencyCode
-    , hrHostReservationId
-    , hrStart
-    , hrHourlyPrice
-    , hrCount
-    , hrUpfrontPrice
-    , hrEnd
-    , hrHostIdSet
-    , hrOfferingId
-    , hrDuration
-    , hrPaymentOption
-
-    -- * IAMInstanceProfile
-    , IAMInstanceProfile
-    , iamInstanceProfile
-    , iapARN
-    , iapId
-
-    -- * IAMInstanceProfileSpecification
-    , IAMInstanceProfileSpecification
-    , iamInstanceProfileSpecification
-    , iapsARN
-    , iapsName
-
-    -- * ICMPTypeCode
-    , ICMPTypeCode
-    , icmpTypeCode
-    , itcCode
-    , itcType
-
-    -- * IPPermission
-    , IPPermission
-    , ipPermission
-    , ipFromPort
-    , ipUserIdGroupPairs
-    , ipPrefixListIds
-    , ipToPort
-    , ipIPv6Ranges
-    , ipIPRanges
-    , ipIPProtocol
-
-    -- * IPRange
-    , IPRange
-    , ipRange
-    , irCidrIP
-
-    -- * IPv6CidrBlock
-    , IPv6CidrBlock
-    , ipv6CidrBlock
-    , icbIPv6CidrBlock
-
-    -- * IPv6Range
-    , IPv6Range
-    , ipv6Range
-    , irCidrIPv6
-
-    -- * IdFormat
-    , IdFormat
-    , idFormat
-    , ifUseLongIds
-    , ifDeadline
-    , ifResource
-
-    -- * Image
-    , Image
-    , image
-    , iPlatform
-    , iEnaSupport
-    , iImageOwnerAlias
-    , iRAMDiskId
-    , iKernelId
-    , iRootDeviceName
-    , iSRIOVNetSupport
-    , iName
-    , iCreationDate
-    , iProductCodes
-    , iStateReason
-    , iDescription
-    , iBlockDeviceMappings
-    , iTags
-    , iImageId
-    , iImageLocation
-    , iState
-    , iOwnerId
-    , iPublic
-    , iArchitecture
-    , iImageType
-    , iRootDeviceType
-    , iVirtualizationType
-    , iHypervisor
-
-    -- * ImageDiskContainer
-    , ImageDiskContainer
-    , imageDiskContainer
-    , idcFormat
-    , idcURL
-    , idcDeviceName
-    , idcUserBucket
-    , idcDescription
-    , idcSnapshotId
-
-    -- * ImportImageTask
-    , ImportImageTask
-    , importImageTask
-    , iitStatus
-    , iitHypervisor
-    , iitPlatform
-    , iitProgress
-    , iitLicenseType
-    , iitSnapshotDetails
-    , iitStatusMessage
-    , iitImageId
-    , iitImportTaskId
-    , iitArchitecture
-    , iitDescription
-
-    -- * ImportInstanceLaunchSpecification
-    , ImportInstanceLaunchSpecification
-    , importInstanceLaunchSpecification
-    , iilsAdditionalInfo
-    , iilsGroupNames
-    , iilsSubnetId
-    , iilsInstanceType
-    , iilsGroupIds
-    , iilsUserData
-    , iilsMonitoring
-    , iilsPrivateIPAddress
-    , iilsInstanceInitiatedShutdownBehavior
-    , iilsArchitecture
-    , iilsPlacement
-
-    -- * ImportInstanceTaskDetails
-    , ImportInstanceTaskDetails
-    , importInstanceTaskDetails
-    , iitdInstanceId
-    , iitdPlatform
-    , iitdDescription
-    , iitdVolumes
-
-    -- * ImportInstanceVolumeDetailItem
-    , ImportInstanceVolumeDetailItem
-    , importInstanceVolumeDetailItem
-    , iivdiStatusMessage
-    , iivdiDescription
-    , iivdiBytesConverted
-    , iivdiAvailabilityZone
-    , iivdiImage
-    , iivdiVolume
-    , iivdiStatus
-
-    -- * ImportSnapshotTask
-    , ImportSnapshotTask
-    , importSnapshotTask
-    , istSnapshotTaskDetail
-    , istImportTaskId
-    , istDescription
-
-    -- * ImportVolumeTaskDetails
-    , ImportVolumeTaskDetails
-    , importVolumeTaskDetails
-    , ivtdDescription
-    , ivtdBytesConverted
-    , ivtdAvailabilityZone
-    , ivtdImage
-    , ivtdVolume
-
-    -- * Instance
-    , Instance
-    , instance'
-    , insPublicDNSName
-    , insPlatform
-    , insSecurityGroups
-    , insClientToken
-    , insEnaSupport
-    , insSourceDestCheck
-    , insVPCId
-    , insKeyName
-    , insNetworkInterfaces
-    , insRAMDiskId
-    , insSubnetId
-    , insKernelId
-    , insRootDeviceName
-    , insSRIOVNetSupport
-    , insEBSOptimized
-    , insStateTransitionReason
-    , insInstanceLifecycle
-    , insIAMInstanceProfile
-    , insPrivateIPAddress
-    , insProductCodes
-    , insSpotInstanceRequestId
-    , insPrivateDNSName
-    , insStateReason
-    , insBlockDeviceMappings
-    , insPublicIPAddress
-    , insTags
-    , insInstanceId
-    , insImageId
-    , insAMILaunchIndex
-    , insInstanceType
-    , insLaunchTime
-    , insPlacement
-    , insMonitoring
-    , insArchitecture
-    , insRootDeviceType
-    , insVirtualizationType
-    , insHypervisor
-    , insState
-
-    -- * InstanceBlockDeviceMapping
-    , InstanceBlockDeviceMapping
-    , instanceBlockDeviceMapping
-    , ibdmEBS
-    , ibdmDeviceName
-
-    -- * InstanceBlockDeviceMappingSpecification
-    , InstanceBlockDeviceMappingSpecification
-    , instanceBlockDeviceMappingSpecification
-    , ibdmsVirtualName
-    , ibdmsNoDevice
-    , ibdmsEBS
-    , ibdmsDeviceName
-
-    -- * InstanceCapacity
-    , InstanceCapacity
-    , instanceCapacity
-    , icAvailableCapacity
-    , icInstanceType
-    , icTotalCapacity
-
-    -- * InstanceCount
-    , InstanceCount
-    , instanceCount
-    , icState
-    , icInstanceCount
-
-    -- * InstanceExportDetails
-    , InstanceExportDetails
-    , instanceExportDetails
-    , iedTargetEnvironment
-    , iedInstanceId
-
-    -- * InstanceIPv6Address
-    , InstanceIPv6Address
-    , instanceIPv6Address
-    , iiaIPv6Address
-
-    -- * InstanceMonitoring
-    , InstanceMonitoring
-    , instanceMonitoring
-    , imInstanceId
-    , imMonitoring
-
-    -- * InstanceNetworkInterface
-    , InstanceNetworkInterface
-    , instanceNetworkInterface
-    , iniGroups
-    , iniStatus
-    , iniPrivateIPAddresses
-    , iniSourceDestCheck
-    , iniVPCId
-    , iniNetworkInterfaceId
-    , iniSubnetId
-    , iniMACAddress
-    , iniAttachment
-    , iniOwnerId
-    , iniPrivateIPAddress
-    , iniPrivateDNSName
-    , iniDescription
-    , iniAssociation
-    , iniIPv6Addresses
-
-    -- * InstanceNetworkInterfaceAssociation
-    , InstanceNetworkInterfaceAssociation
-    , instanceNetworkInterfaceAssociation
-    , iniaPublicDNSName
-    , iniaIPOwnerId
-    , iniaPublicIP
-
-    -- * InstanceNetworkInterfaceAttachment
-    , InstanceNetworkInterfaceAttachment
-    , instanceNetworkInterfaceAttachment
-    , iniaStatus
-    , iniaDeleteOnTermination
-    , iniaAttachmentId
-    , iniaAttachTime
-    , iniaDeviceIndex
-
-    -- * InstanceNetworkInterfaceSpecification
-    , InstanceNetworkInterfaceSpecification
-    , instanceNetworkInterfaceSpecification
-    , inisGroups
-    , inisPrivateIPAddresses
-    , inisDeleteOnTermination
-    , inisAssociatePublicIPAddress
-    , inisNetworkInterfaceId
-    , inisSubnetId
-    , inisIPv6AddressCount
-    , inisPrivateIPAddress
-    , inisSecondaryPrivateIPAddressCount
-    , inisDescription
-    , inisDeviceIndex
-    , inisIPv6Addresses
-
-    -- * InstancePrivateIPAddress
-    , InstancePrivateIPAddress
-    , instancePrivateIPAddress
-    , ipiaPrimary
-    , ipiaPrivateIPAddress
-    , ipiaPrivateDNSName
-    , ipiaAssociation
-
-    -- * InstanceState
-    , InstanceState
-    , instanceState
-    , isName
-    , isCode
-
-    -- * InstanceStateChange
-    , InstanceStateChange
-    , instanceStateChange
-    , iscInstanceId
-    , iscCurrentState
-    , iscPreviousState
-
-    -- * InstanceStatus
-    , InstanceStatus
-    , instanceStatus
-    , isInstanceId
-    , isSystemStatus
-    , isEvents
-    , isAvailabilityZone
-    , isInstanceStatus
-    , isInstanceState
-
-    -- * InstanceStatusDetails
-    , InstanceStatusDetails
-    , instanceStatusDetails
-    , isdStatus
-    , isdImpairedSince
-    , isdName
-
-    -- * InstanceStatusEvent
-    , InstanceStatusEvent
-    , instanceStatusEvent
-    , iseNotBefore
-    , iseCode
-    , iseDescription
-    , iseNotAfter
-
-    -- * InstanceStatusSummary
-    , InstanceStatusSummary
-    , instanceStatusSummary
-    , issDetails
-    , issStatus
-
-    -- * InternetGateway
-    , InternetGateway
-    , internetGateway
-    , igAttachments
-    , igTags
-    , igInternetGatewayId
-
-    -- * InternetGatewayAttachment
-    , InternetGatewayAttachment
-    , internetGatewayAttachment
-    , igaState
-    , igaVPCId
-
-    -- * KeyPairInfo
-    , KeyPairInfo
-    , keyPairInfo
-    , kpiKeyFingerprint
-    , kpiKeyName
-
-    -- * LaunchPermission
-    , LaunchPermission
-    , launchPermission
-    , lpGroup
-    , lpUserId
-
-    -- * LaunchPermissionModifications
-    , LaunchPermissionModifications
-    , launchPermissionModifications
-    , lpmRemove
-    , lpmAdd
-
-    -- * LaunchSpecification
-    , LaunchSpecification
-    , launchSpecification
-    , lsSecurityGroups
-    , lsKeyName
-    , lsNetworkInterfaces
-    , lsRAMDiskId
-    , lsSubnetId
-    , lsKernelId
-    , lsInstanceType
-    , lsEBSOptimized
-    , lsUserData
-    , lsMonitoring
-    , lsIAMInstanceProfile
-    , lsImageId
-    , lsAddressingType
-    , lsBlockDeviceMappings
-    , lsPlacement
-
-    -- * Monitoring
-    , Monitoring
-    , monitoring
-    , mState
-
-    -- * MovingAddressStatus
-    , MovingAddressStatus
-    , movingAddressStatus
-    , masMoveStatus
-    , masPublicIP
-
-    -- * NatGateway
-    , NatGateway
-    , natGateway
-    , ngState
-    , ngFailureCode
-    , ngVPCId
-    , ngFailureMessage
-    , ngNatGatewayId
-    , ngSubnetId
-    , ngDeleteTime
-    , ngProvisionedBandwidth
-    , ngNatGatewayAddresses
-    , ngCreateTime
-
-    -- * NatGatewayAddress
-    , NatGatewayAddress
-    , natGatewayAddress
-    , ngaPrivateIP
-    , ngaAllocationId
-    , ngaNetworkInterfaceId
-    , ngaPublicIP
-
-    -- * NetworkACL
-    , NetworkACL
-    , networkACL
-    , naEntries
-    , naNetworkACLId
-    , naVPCId
-    , naAssociations
-    , naTags
-    , naIsDefault
-
-    -- * NetworkACLAssociation
-    , NetworkACLAssociation
-    , networkACLAssociation
-    , naaNetworkACLId
-    , naaSubnetId
-    , naaNetworkACLAssociationId
-
-    -- * NetworkACLEntry
-    , NetworkACLEntry
-    , networkACLEntry
-    , naeIPv6CidrBlock
-    , naeICMPTypeCode
-    , naeRuleNumber
-    , naeRuleAction
-    , naeProtocol
-    , naePortRange
-    , naeCidrBlock
-    , naeEgress
-
-    -- * NetworkInterface
-    , NetworkInterface
-    , networkInterface
-    , niGroups
-    , niStatus
-    , niPrivateIPAddresses
-    , niSourceDestCheck
-    , niInterfaceType
-    , niVPCId
-    , niTagSet
-    , niRequesterManaged
-    , niNetworkInterfaceId
-    , niSubnetId
-    , niMACAddress
-    , niAttachment
-    , niOwnerId
-    , niAvailabilityZone
-    , niPrivateIPAddress
-    , niPrivateDNSName
-    , niRequesterId
-    , niDescription
-    , niAssociation
-    , niIPv6Addresses
-
-    -- * NetworkInterfaceAssociation
-    , NetworkInterfaceAssociation
-    , networkInterfaceAssociation
-    , niaAssociationId
-    , niaPublicDNSName
-    , niaAllocationId
-    , niaIPOwnerId
-    , niaPublicIP
-
-    -- * NetworkInterfaceAttachment
-    , NetworkInterfaceAttachment
-    , networkInterfaceAttachment
-    , niaInstanceId
-    , niaStatus
-    , niaDeleteOnTermination
-    , niaAttachmentId
-    , niaInstanceOwnerId
-    , niaAttachTime
-    , niaDeviceIndex
-
-    -- * NetworkInterfaceAttachmentChanges
-    , NetworkInterfaceAttachmentChanges
-    , networkInterfaceAttachmentChanges
-    , niacDeleteOnTermination
-    , niacAttachmentId
-
-    -- * NetworkInterfaceIPv6Address
-    , NetworkInterfaceIPv6Address
-    , networkInterfaceIPv6Address
-    , niiaIPv6Address
-
-    -- * NetworkInterfacePrivateIPAddress
-    , NetworkInterfacePrivateIPAddress
-    , networkInterfacePrivateIPAddress
-    , nipiaPrimary
-    , nipiaPrivateIPAddress
-    , nipiaPrivateDNSName
-    , nipiaAssociation
-
-    -- * NewDHCPConfiguration
-    , NewDHCPConfiguration
-    , newDHCPConfiguration
-    , ndcValues
-    , ndcKey
-
-    -- * PeeringConnectionOptions
-    , PeeringConnectionOptions
-    , peeringConnectionOptions
-    , pcoAllowEgressFromLocalVPCToRemoteClassicLink
-    , pcoAllowEgressFromLocalClassicLinkToRemoteVPC
-    , pcoAllowDNSResolutionFromRemoteVPC
-
-    -- * PeeringConnectionOptionsRequest
-    , PeeringConnectionOptionsRequest
-    , peeringConnectionOptionsRequest
-    , pcorAllowEgressFromLocalVPCToRemoteClassicLink
-    , pcorAllowEgressFromLocalClassicLinkToRemoteVPC
-    , pcorAllowDNSResolutionFromRemoteVPC
-
-    -- * Placement
-    , Placement
-    , placement
-    , pAffinity
-    , pHostId
-    , pAvailabilityZone
-    , pTenancy
-    , pGroupName
-
-    -- * PlacementGroup
-    , PlacementGroup
-    , placementGroup
-    , pgState
-    , pgStrategy
-    , pgGroupName
-
-    -- * PortRange
-    , PortRange
-    , portRange
-    , prTo
-    , prFrom
-
-    -- * PrefixList
-    , PrefixList
-    , prefixList
-    , plCidrs
-    , plPrefixListId
-    , plPrefixListName
-
-    -- * PrefixListId
-    , PrefixListId
-    , prefixListId
-    , pliPrefixListId
-
-    -- * PriceSchedule
-    , PriceSchedule
-    , priceSchedule
-    , psCurrencyCode
-    , psTerm
-    , psActive
-    , psPrice
-
-    -- * PriceScheduleSpecification
-    , PriceScheduleSpecification
-    , priceScheduleSpecification
-    , pssCurrencyCode
-    , pssTerm
-    , pssPrice
-
-    -- * PricingDetail
-    , PricingDetail
-    , pricingDetail
-    , pdCount
-    , pdPrice
-
-    -- * PrivateIPAddressSpecification
-    , PrivateIPAddressSpecification
-    , privateIPAddressSpecification
-    , piasPrimary
-    , piasPrivateIPAddress
-
-    -- * ProductCode
-    , ProductCode
-    , productCode
-    , pcProductCodeType
-    , pcProductCodeId
-
-    -- * PropagatingVGW
-    , PropagatingVGW
-    , propagatingVGW
-    , pvGatewayId
-
-    -- * ProvisionedBandwidth
-    , ProvisionedBandwidth
-    , provisionedBandwidth
-    , pbStatus
-    , pbRequested
-    , pbProvisioned
-    , pbRequestTime
-    , pbProvisionTime
-
-    -- * Purchase
-    , Purchase
-    , purchase
-    , pInstanceFamily
-    , pCurrencyCode
-    , pHostReservationId
-    , pHourlyPrice
-    , pUpfrontPrice
-    , pHostIdSet
-    , pDuration
-    , pPaymentOption
-
-    -- * PurchaseRequest
-    , PurchaseRequest
-    , purchaseRequest
-    , prPurchaseToken
-    , prInstanceCount
-
-    -- * RecurringCharge
-    , RecurringCharge
-    , recurringCharge
-    , rcAmount
-    , rcFrequency
-
-    -- * RegionInfo
-    , RegionInfo
-    , regionInfo
-    , riRegionName
-    , riEndpoint
-
-    -- * RequestSpotLaunchSpecification
-    , RequestSpotLaunchSpecification
-    , requestSpotLaunchSpecification
-    , rslsSecurityGroupIds
-    , rslsSecurityGroups
-    , rslsKeyName
-    , rslsNetworkInterfaces
-    , rslsRAMDiskId
-    , rslsSubnetId
-    , rslsKernelId
-    , rslsInstanceType
-    , rslsEBSOptimized
-    , rslsUserData
-    , rslsMonitoring
-    , rslsIAMInstanceProfile
-    , rslsImageId
-    , rslsAddressingType
-    , rslsBlockDeviceMappings
-    , rslsPlacement
-
-    -- * Reservation
-    , Reservation
-    , reservation
-    , rGroups
-    , rInstances
-    , rRequesterId
-    , rReservationId
-    , rOwnerId
-
-    -- * ReservationValue
-    , ReservationValue
-    , reservationValue
-    , rvHourlyPrice
-    , rvRemainingTotalValue
-    , rvRemainingUpfrontValue
-
-    -- * ReservedInstanceLimitPrice
-    , ReservedInstanceLimitPrice
-    , reservedInstanceLimitPrice
-    , rilpAmount
-    , rilpCurrencyCode
-
-    -- * ReservedInstanceReservationValue
-    , ReservedInstanceReservationValue
-    , reservedInstanceReservationValue
-    , rirvReservationValue
-    , rirvReservedInstanceId
-
-    -- * ReservedInstances
-    , ReservedInstances
-    , reservedInstances
-    , riState
-    , riCurrencyCode
-    , riInstanceCount
-    , riProductDescription
-    , riStart
-    , riInstanceType
-    , riEnd
-    , riAvailabilityZone
-    , riScope
-    , riRecurringCharges
-    , riOfferingType
-    , riUsagePrice
-    , riFixedPrice
-    , riReservedInstancesId
-    , riInstanceTenancy
-    , riOfferingClass
-    , riDuration
-    , riTags
-
-    -- * ReservedInstancesConfiguration
-    , ReservedInstancesConfiguration
-    , reservedInstancesConfiguration
-    , ricPlatform
-    , ricInstanceCount
-    , ricInstanceType
-    , ricAvailabilityZone
-    , ricScope
-
-    -- * ReservedInstancesId
-    , ReservedInstancesId
-    , reservedInstancesId
-    , riiReservedInstancesId
-
-    -- * ReservedInstancesListing
-    , ReservedInstancesListing
-    , reservedInstancesListing
-    , rilStatus
-    , rilClientToken
-    , rilUpdateDate
-    , rilCreateDate
-    , rilPriceSchedules
-    , rilStatusMessage
-    , rilReservedInstancesId
-    , rilTags
-    , rilInstanceCounts
-    , rilReservedInstancesListingId
-
-    -- * ReservedInstancesModification
-    , ReservedInstancesModification
-    , reservedInstancesModification
-    , rimModificationResults
-    , rimStatus
-    , rimClientToken
-    , rimUpdateDate
-    , rimCreateDate
-    , rimEffectiveDate
-    , rimStatusMessage
-    , rimReservedInstancesModificationId
-    , rimReservedInstancesIds
-
-    -- * ReservedInstancesModificationResult
-    , ReservedInstancesModificationResult
-    , reservedInstancesModificationResult
-    , rimrReservedInstancesId
-    , rimrTargetConfiguration
-
-    -- * ReservedInstancesOffering
-    , ReservedInstancesOffering
-    , reservedInstancesOffering
-    , rioMarketplace
-    , rioCurrencyCode
-    , rioProductDescription
-    , rioInstanceType
-    , rioAvailabilityZone
-    , rioPricingDetails
-    , rioScope
-    , rioRecurringCharges
-    , rioOfferingType
-    , rioUsagePrice
-    , rioFixedPrice
-    , rioInstanceTenancy
-    , rioReservedInstancesOfferingId
-    , rioOfferingClass
-    , rioDuration
-
-    -- * Route
-    , Route
-    , route
-    , rVPCPeeringConnectionId
-    , rInstanceId
-    , rOrigin
-    , rState
-    , rEgressOnlyInternetGatewayId
-    , rDestinationIPv6CidrBlock
-    , rNatGatewayId
-    , rNetworkInterfaceId
-    , rGatewayId
-    , rInstanceOwnerId
-    , rDestinationPrefixListId
-    , rDestinationCidrBlock
-
-    -- * RouteTable
-    , RouteTable
-    , routeTable
-    , rtRouteTableId
-    , rtRoutes
-    , rtVPCId
-    , rtPropagatingVGWs
-    , rtAssociations
-    , rtTags
-
-    -- * RouteTableAssociation
-    , RouteTableAssociation
-    , routeTableAssociation
-    , rtaRouteTableId
-    , rtaRouteTableAssociationId
-    , rtaMain
-    , rtaSubnetId
-
-    -- * RunInstancesMonitoringEnabled
-    , RunInstancesMonitoringEnabled
-    , runInstancesMonitoringEnabled
-    , rimeEnabled
-
-    -- * S3Storage
-    , S3Storage
-    , s3Storage
-    , ssPrefix
-    , ssUploadPolicy
-    , ssBucket
-    , ssUploadPolicySignature
-    , ssAWSAccessKeyId
-
-    -- * ScheduledInstance
-    , ScheduledInstance
-    , scheduledInstance
-    , siPreviousSlotEndTime
-    , siPlatform
-    , siTermStartDate
-    , siInstanceCount
-    , siScheduledInstanceId
-    , siHourlyPrice
-    , siCreateDate
-    , siSlotDurationInHours
-    , siTotalScheduledInstanceHours
-    , siInstanceType
-    , siRecurrence
-    , siAvailabilityZone
-    , siTermEndDate
-    , siNextSlotStartTime
-    , siNetworkPlatform
-
-    -- * ScheduledInstanceAvailability
-    , ScheduledInstanceAvailability
-    , scheduledInstanceAvailability
-    , siaMaxTermDurationInDays
-    , siaPlatform
-    , siaPurchaseToken
-    , siaHourlyPrice
-    , siaAvailableInstanceCount
-    , siaSlotDurationInHours
-    , siaTotalScheduledInstanceHours
-    , siaInstanceType
-    , siaRecurrence
-    , siaAvailabilityZone
-    , siaMinTermDurationInDays
-    , siaFirstSlotStartTime
-    , siaNetworkPlatform
-
-    -- * ScheduledInstanceRecurrence
-    , ScheduledInstanceRecurrence
-    , scheduledInstanceRecurrence
-    , sirFrequency
-    , sirOccurrenceRelativeToEnd
-    , sirOccurrenceUnit
-    , sirInterval
-    , sirOccurrenceDaySet
-
-    -- * ScheduledInstanceRecurrenceRequest
-    , ScheduledInstanceRecurrenceRequest
-    , scheduledInstanceRecurrenceRequest
-    , sirrFrequency
-    , sirrOccurrenceRelativeToEnd
-    , sirrOccurrenceDays
-    , sirrOccurrenceUnit
-    , sirrInterval
-
-    -- * ScheduledInstancesBlockDeviceMapping
-    , ScheduledInstancesBlockDeviceMapping
-    , scheduledInstancesBlockDeviceMapping
-    , sibdmVirtualName
-    , sibdmNoDevice
-    , sibdmEBS
-    , sibdmDeviceName
-
-    -- * ScheduledInstancesEBS
-    , ScheduledInstancesEBS
-    , scheduledInstancesEBS
-    , sieDeleteOnTermination
-    , sieVolumeSize
-    , sieIOPS
-    , sieEncrypted
-    , sieVolumeType
-    , sieSnapshotId
-
-    -- * ScheduledInstancesIAMInstanceProfile
-    , ScheduledInstancesIAMInstanceProfile
-    , scheduledInstancesIAMInstanceProfile
-    , siiapARN
-    , siiapName
-
-    -- * ScheduledInstancesIPv6Address
-    , ScheduledInstancesIPv6Address
-    , scheduledInstancesIPv6Address
-    , siiaIPv6Address
-
-    -- * ScheduledInstancesLaunchSpecification
-    , ScheduledInstancesLaunchSpecification
-    , scheduledInstancesLaunchSpecification
-    , silsSecurityGroupIds
-    , silsKeyName
-    , silsNetworkInterfaces
-    , silsRAMDiskId
-    , silsSubnetId
-    , silsKernelId
-    , silsInstanceType
-    , silsEBSOptimized
-    , silsUserData
-    , silsMonitoring
-    , silsIAMInstanceProfile
-    , silsBlockDeviceMappings
-    , silsPlacement
-    , silsImageId
-
-    -- * ScheduledInstancesMonitoring
-    , ScheduledInstancesMonitoring
-    , scheduledInstancesMonitoring
-    , simEnabled
-
-    -- * ScheduledInstancesNetworkInterface
-    , ScheduledInstancesNetworkInterface
-    , scheduledInstancesNetworkInterface
-    , siniGroups
-    , siniDeleteOnTermination
-    , siniAssociatePublicIPAddress
-    , siniPrivateIPAddressConfigs
-    , siniNetworkInterfaceId
-    , siniSubnetId
-    , siniIPv6AddressCount
-    , siniPrivateIPAddress
-    , siniSecondaryPrivateIPAddressCount
-    , siniDescription
-    , siniDeviceIndex
-    , siniIPv6Addresses
-
-    -- * ScheduledInstancesPlacement
-    , ScheduledInstancesPlacement
-    , scheduledInstancesPlacement
-    , sipAvailabilityZone
-    , sipGroupName
-
-    -- * ScheduledInstancesPrivateIPAddressConfig
-    , ScheduledInstancesPrivateIPAddressConfig
-    , scheduledInstancesPrivateIPAddressConfig
-    , sipiacPrimary
-    , sipiacPrivateIPAddress
-
-    -- * SecurityGroup
-    , SecurityGroup
-    , securityGroup
-    , sgVPCId
-    , sgIPPermissions
-    , sgIPPermissionsEgress
-    , sgTags
-    , sgOwnerId
-    , sgGroupId
-    , sgGroupName
-    , sgDescription
-
-    -- * SecurityGroupReference
-    , SecurityGroupReference
-    , securityGroupReference
-    , sgrVPCPeeringConnectionId
-    , sgrGroupId
-    , sgrReferencingVPCId
-
-    -- * SlotDateTimeRangeRequest
-    , SlotDateTimeRangeRequest
-    , slotDateTimeRangeRequest
-    , sdtrrEarliestTime
-    , sdtrrLatestTime
-
-    -- * SlotStartTimeRangeRequest
-    , SlotStartTimeRangeRequest
-    , slotStartTimeRangeRequest
-    , sstrrLatestTime
-    , sstrrEarliestTime
-
-    -- * Snapshot
-    , Snapshot
-    , snapshot
-    , sStateMessage
-    , sOwnerAlias
-    , sDataEncryptionKeyId
-    , sKMSKeyId
-    , sTags
-    , sSnapshotId
-    , sOwnerId
-    , sVolumeId
-    , sVolumeSize
-    , sDescription
-    , sStartTime
-    , sProgress
-    , sState
-    , sEncrypted
-
-    -- * SnapshotDetail
-    , SnapshotDetail
-    , snapshotDetail
-    , sdStatus
-    , sdProgress
-    , sdFormat
-    , sdURL
-    , sdDeviceName
-    , sdStatusMessage
-    , sdUserBucket
-    , sdDiskImageSize
-    , sdDescription
-    , sdSnapshotId
-
-    -- * SnapshotDiskContainer
-    , SnapshotDiskContainer
-    , snapshotDiskContainer
-    , sdcFormat
-    , sdcURL
-    , sdcUserBucket
-    , sdcDescription
-
-    -- * SnapshotTaskDetail
-    , SnapshotTaskDetail
-    , snapshotTaskDetail
-    , stdStatus
-    , stdProgress
-    , stdFormat
-    , stdURL
-    , stdStatusMessage
-    , stdUserBucket
-    , stdDiskImageSize
-    , stdDescription
-    , stdSnapshotId
-
-    -- * SpotDatafeedSubscription
-    , SpotDatafeedSubscription
-    , spotDatafeedSubscription
-    , sdsState
-    , sdsPrefix
-    , sdsBucket
-    , sdsOwnerId
-    , sdsFault
-
-    -- * SpotFleetLaunchSpecification
-    , SpotFleetLaunchSpecification
-    , spotFleetLaunchSpecification
-    , sflsSecurityGroups
-    , sflsSpotPrice
-    , sflsWeightedCapacity
-    , sflsKeyName
-    , sflsNetworkInterfaces
-    , sflsRAMDiskId
-    , sflsSubnetId
-    , sflsKernelId
-    , sflsInstanceType
-    , sflsEBSOptimized
-    , sflsUserData
-    , sflsMonitoring
-    , sflsIAMInstanceProfile
-    , sflsImageId
-    , sflsAddressingType
-    , sflsBlockDeviceMappings
-    , sflsPlacement
-
-    -- * SpotFleetMonitoring
-    , SpotFleetMonitoring
-    , spotFleetMonitoring
-    , sfmEnabled
-
-    -- * SpotFleetRequestConfig
-    , SpotFleetRequestConfig
-    , spotFleetRequestConfig
-    , sfrcActivityStatus
-    , sfrcSpotFleetRequestId
-    , sfrcSpotFleetRequestState
-    , sfrcSpotFleetRequestConfig
-    , sfrcCreateTime
-
-    -- * SpotFleetRequestConfigData
-    , SpotFleetRequestConfigData
-    , spotFleetRequestConfigData
-    , sfrcdClientToken
-    , sfrcdExcessCapacityTerminationPolicy
-    , sfrcdValidUntil
-    , sfrcdTerminateInstancesWithExpiration
-    , sfrcdFulfilledCapacity
-    , sfrcdType
-    , sfrcdValidFrom
-    , sfrcdAllocationStrategy
-    , sfrcdSpotPrice
-    , sfrcdTargetCapacity
-    , sfrcdIAMFleetRole
-    , sfrcdLaunchSpecifications
-
-    -- * SpotInstanceRequest
-    , SpotInstanceRequest
-    , spotInstanceRequest
-    , sirInstanceId
-    , sirStatus
-    , sirState
-    , sirActualBlockHourlyPrice
-    , sirBlockDurationMinutes
-    , sirProductDescription
-    , sirSpotPrice
-    , sirLaunchSpecification
-    , sirAvailabilityZoneGroup
-    , sirLaunchedAvailabilityZone
-    , sirValidUntil
-    , sirLaunchGroup
-    , sirFault
-    , sirSpotInstanceRequestId
-    , sirType
-    , sirValidFrom
-    , sirCreateTime
-    , sirTags
-
-    -- * SpotInstanceStateFault
-    , SpotInstanceStateFault
-    , spotInstanceStateFault
-    , sisfCode
-    , sisfMessage
-
-    -- * SpotInstanceStatus
-    , SpotInstanceStatus
-    , spotInstanceStatus
-    , sisUpdateTime
-    , sisCode
-    , sisMessage
-
-    -- * SpotPlacement
-    , SpotPlacement
-    , spotPlacement
-    , spAvailabilityZone
-    , spGroupName
-
-    -- * SpotPrice
-    , SpotPrice
-    , spotPrice
-    , sProductDescription
-    , sSpotPrice
-    , sInstanceType
-    , sAvailabilityZone
-    , sTimestamp
-
-    -- * StaleIPPermission
-    , StaleIPPermission
-    , staleIPPermission
-    , sipFromPort
-    , sipUserIdGroupPairs
-    , sipPrefixListIds
-    , sipIPProtocol
-    , sipToPort
-    , sipIPRanges
-
-    -- * StaleSecurityGroup
-    , StaleSecurityGroup
-    , staleSecurityGroup
-    , ssgVPCId
-    , ssgGroupName
-    , ssgStaleIPPermissionsEgress
-    , ssgStaleIPPermissions
-    , ssgDescription
-    , ssgGroupId
-
-    -- * StateReason
-    , StateReason
-    , stateReason
-    , srCode
-    , srMessage
-
-    -- * Storage
-    , Storage
-    , storage
-    , sS3
-
-    -- * Subnet
-    , Subnet
-    , subnet
-    , subIPv6CidrBlockAssociationSet
-    , subAssignIPv6AddressOnCreation
-    , subMapPublicIPOnLaunch
-    , subDefaultForAz
-    , subTags
-    , subAvailabilityZone
-    , subAvailableIPAddressCount
-    , subCidrBlock
-    , subState
-    , subSubnetId
-    , subVPCId
-
-    -- * SubnetCidrBlockState
-    , SubnetCidrBlockState
-    , subnetCidrBlockState
-    , scbsState
-    , scbsStatusMessage
-
-    -- * SubnetIPv6CidrBlockAssociation
-    , SubnetIPv6CidrBlockAssociation
-    , subnetIPv6CidrBlockAssociation
-    , sicbaAssociationId
-    , sicbaIPv6CidrBlock
-    , sicbaIPv6CidrBlockState
-
-    -- * Tag
-    , Tag
-    , tag
-    , tagKey
-    , tagValue
-
-    -- * TagDescription
-    , TagDescription
-    , tagDescription
-    , tdResourceId
-    , tdResourceType
-    , tdKey
-    , tdValue
-
-    -- * TargetConfiguration
-    , TargetConfiguration
-    , targetConfiguration
-    , tcInstanceCount
-    , tcOfferingId
-
-    -- * TargetConfigurationRequest
-    , TargetConfigurationRequest
-    , targetConfigurationRequest
-    , tcrInstanceCount
-    , tcrOfferingId
-
-    -- * TargetReservationValue
-    , TargetReservationValue
-    , targetReservationValue
-    , trvReservationValue
-    , trvTargetConfiguration
-
-    -- * UnsuccessfulItem
-    , UnsuccessfulItem
-    , unsuccessfulItem
-    , uiResourceId
-    , uiError
-
-    -- * UnsuccessfulItemError
-    , UnsuccessfulItemError
-    , unsuccessfulItemError
-    , uieCode
-    , uieMessage
-
-    -- * UserBucket
-    , UserBucket
-    , userBucket
-    , ubS3Key
-    , ubS3Bucket
-
-    -- * UserBucketDetails
-    , UserBucketDetails
-    , userBucketDetails
-    , ubdS3Key
-    , ubdS3Bucket
-
-    -- * UserData
-    , UserData
-    , userData
-    , udData
-
-    -- * UserIdGroupPair
-    , UserIdGroupPair
-    , userIdGroupPair
-    , uigpVPCPeeringConnectionId
-    , uigpVPCId
-    , uigpUserId
-    , uigpGroupId
-    , uigpGroupName
-    , uigpPeeringStatus
-
-    -- * VGWTelemetry
-    , VGWTelemetry
-    , vgwTelemetry
-    , vtStatus
-    , vtOutsideIPAddress
-    , vtLastStatusChange
-    , vtAcceptedRouteCount
-    , vtStatusMessage
-
-    -- * VPC
-    , VPC
-    , vpc
-    , vpcIPv6CidrBlockAssociationSet
-    , vpcTags
-    , vpcIsDefault
-    , vpcCidrBlock
-    , vpcDHCPOptionsId
-    , vpcInstanceTenancy
-    , vpcState
-    , vpcVPCId
-
-    -- * VPCAttachment
-    , VPCAttachment
-    , vpcAttachment
-    , vaState
-    , vaVPCId
-
-    -- * VPCCidrBlockState
-    , VPCCidrBlockState
-    , vpcCidrBlockState
-    , vcbsState
-    , vcbsStatusMessage
-
-    -- * VPCClassicLink
-    , VPCClassicLink
-    , vpcClassicLink
-    , vclVPCId
-    , vclTags
-    , vclClassicLinkEnabled
-
-    -- * VPCEndpoint
-    , VPCEndpoint
-    , vpcEndpoint
-    , veState
-    , vePolicyDocument
-    , veVPCId
-    , veCreationTimestamp
-    , veServiceName
-    , veVPCEndpointId
-    , veRouteTableIds
-
-    -- * VPCIPv6CidrBlockAssociation
-    , VPCIPv6CidrBlockAssociation
-    , vpcIPv6CidrBlockAssociation
-    , vicbaAssociationId
-    , vicbaIPv6CidrBlock
-    , vicbaIPv6CidrBlockState
-
-    -- * VPCPeeringConnection
-    , VPCPeeringConnection
-    , vpcPeeringConnection
-    , vpcpcVPCPeeringConnectionId
-    , vpcpcStatus
-    , vpcpcAccepterVPCInfo
-    , vpcpcRequesterVPCInfo
-    , vpcpcExpirationTime
-    , vpcpcTags
-
-    -- * VPCPeeringConnectionOptionsDescription
-    , VPCPeeringConnectionOptionsDescription
-    , vpcPeeringConnectionOptionsDescription
-    , vpcodAllowEgressFromLocalVPCToRemoteClassicLink
-    , vpcodAllowEgressFromLocalClassicLinkToRemoteVPC
-    , vpcodAllowDNSResolutionFromRemoteVPC
-
-    -- * VPCPeeringConnectionStateReason
-    , VPCPeeringConnectionStateReason
-    , vpcPeeringConnectionStateReason
-    , vpcsrCode
-    , vpcsrMessage
-
-    -- * VPCPeeringConnectionVPCInfo
-    , VPCPeeringConnectionVPCInfo
-    , vpcPeeringConnectionVPCInfo
-    , vpcviVPCId
-    , vpcviOwnerId
-    , vpcviPeeringOptions
-    , vpcviCidrBlock
-    , vpcviIPv6CidrBlockSet
-
-    -- * VPNConnection
-    , VPNConnection
-    , vpnConnection
-    , vcCustomerGatewayConfiguration
-    , vcRoutes
-    , vcVPNGatewayId
-    , vcOptions
-    , vcTags
-    , vcVGWTelemetry
-    , vcVPNConnectionId
-    , vcCustomerGatewayId
-    , vcState
-    , vcType
-
-    -- * VPNConnectionOptions
-    , VPNConnectionOptions
-    , vpnConnectionOptions
-    , vcoStaticRoutesOnly
-
-    -- * VPNConnectionOptionsSpecification
-    , VPNConnectionOptionsSpecification
-    , vpnConnectionOptionsSpecification
-    , vcosStaticRoutesOnly
-
-    -- * VPNGateway
-    , VPNGateway
-    , vpnGateway
-    , vgState
-    , vgVPCAttachments
-    , vgVPNGatewayId
-    , vgAvailabilityZone
-    , vgType
-    , vgTags
-
-    -- * VPNStaticRoute
-    , VPNStaticRoute
-    , vpnStaticRoute
-    , vsrState
-    , vsrSource
-    , vsrDestinationCidrBlock
-
-    -- * Volume
-    , Volume
-    , volume
-    , vAttachments
-    , vIOPS
-    , vKMSKeyId
-    , vTags
-    , vAvailabilityZone
-    , vCreateTime
-    , vEncrypted
-    , vSize
-    , vSnapshotId
-    , vState
-    , vVolumeId
-    , vVolumeType
-
-    -- * VolumeAttachment
-    , VolumeAttachment
-    , volumeAttachment
-    , volInstanceId
-    , volDeleteOnTermination
-    , volState
-    , volDevice
-    , volVolumeId
-    , volAttachTime
-
-    -- * VolumeDetail
-    , VolumeDetail
-    , volumeDetail
-    , vdSize
-
-    -- * VolumeStatusAction
-    , VolumeStatusAction
-    , volumeStatusAction
-    , vsaEventType
-    , vsaCode
-    , vsaDescription
-    , vsaEventId
-
-    -- * VolumeStatusDetails
-    , VolumeStatusDetails
-    , volumeStatusDetails
-    , vsdStatus
-    , vsdName
-
-    -- * VolumeStatusEvent
-    , VolumeStatusEvent
-    , volumeStatusEvent
-    , vseNotBefore
-    , vseEventType
-    , vseDescription
-    , vseNotAfter
-    , vseEventId
-
-    -- * VolumeStatusInfo
-    , VolumeStatusInfo
-    , volumeStatusInfo
-    , vsiStatus
-    , vsiDetails
-
-    -- * VolumeStatusItem
-    , VolumeStatusItem
-    , volumeStatusItem
-    , vsiVolumeStatus
-    , vsiActions
-    , vsiEvents
-    , vsiAvailabilityZone
-    , vsiVolumeId
-    ) where
-
-import           Network.AWS.EC2.Internal
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.EC2.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Sign.V4
-
--- | API version @2016-11-15@ of the Amazon Elastic Compute Cloud SDK configuration.
-ec2 :: Service
-ec2 =
-    Service
-    { _svcAbbrev = "EC2"
-    , _svcSigner = v4
-    , _svcPrefix = "ec2"
-    , _svcVersion = "2016-11-15"
-    , _svcEndpoint = defaultEndpoint ec2
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseXMLError "EC2"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-        Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "RequestLimitExceeded" . hasStatus 503) e =
-          Just "request_limit_exceeded"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-          Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
diff --git a/gen/Network/AWS/EC2/Types/Product.hs b/gen/Network/AWS/EC2/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/Types/Product.hs
+++ /dev/null
@@ -1,14803 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.Types.Product
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.EC2.Types.Product where
-
-import           Network.AWS.EC2.Internal
-import           Network.AWS.EC2.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-
--- | Describes an account attribute.
---
---
---
--- /See:/ 'accountAttribute' smart constructor.
-data AccountAttribute = AccountAttribute'
-    { _aaAttributeValues :: !(Maybe [AccountAttributeValue])
-    , _aaAttributeName   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccountAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaAttributeValues' - One or more values for the account attribute.
---
--- * 'aaAttributeName' - The name of the account attribute.
-accountAttribute
-    :: AccountAttribute
-accountAttribute =
-    AccountAttribute'
-    { _aaAttributeValues = Nothing
-    , _aaAttributeName = Nothing
-    }
-
--- | One or more values for the account attribute.
-aaAttributeValues :: Lens' AccountAttribute [AccountAttributeValue]
-aaAttributeValues = lens _aaAttributeValues (\ s a -> s{_aaAttributeValues = a}) . _Default . _Coerce;
-
--- | The name of the account attribute.
-aaAttributeName :: Lens' AccountAttribute (Maybe Text)
-aaAttributeName = lens _aaAttributeName (\ s a -> s{_aaAttributeName = a});
-
-instance FromXML AccountAttribute where
-        parseXML x
-          = AccountAttribute' <$>
-              (x .@? "attributeValueSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "attributeName")
-
-instance Hashable AccountAttribute
-
-instance NFData AccountAttribute
-
--- | Describes a value of an account attribute.
---
---
---
--- /See:/ 'accountAttributeValue' smart constructor.
-newtype AccountAttributeValue = AccountAttributeValue'
-    { _aavAttributeValue :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccountAttributeValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aavAttributeValue' - The value of the attribute.
-accountAttributeValue
-    :: AccountAttributeValue
-accountAttributeValue =
-    AccountAttributeValue'
-    { _aavAttributeValue = Nothing
-    }
-
--- | The value of the attribute.
-aavAttributeValue :: Lens' AccountAttributeValue (Maybe Text)
-aavAttributeValue = lens _aavAttributeValue (\ s a -> s{_aavAttributeValue = a});
-
-instance FromXML AccountAttributeValue where
-        parseXML x
-          = AccountAttributeValue' <$> (x .@? "attributeValue")
-
-instance Hashable AccountAttributeValue
-
-instance NFData AccountAttributeValue
-
--- | Describes a running instance in a Spot fleet.
---
---
---
--- /See:/ 'activeInstance' smart constructor.
-data ActiveInstance = ActiveInstance'
-    { _aiInstanceId            :: !(Maybe Text)
-    , _aiInstanceType          :: !(Maybe Text)
-    , _aiSpotInstanceRequestId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ActiveInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aiInstanceId' - The ID of the instance.
---
--- * 'aiInstanceType' - The instance type.
---
--- * 'aiSpotInstanceRequestId' - The ID of the Spot instance request.
-activeInstance
-    :: ActiveInstance
-activeInstance =
-    ActiveInstance'
-    { _aiInstanceId = Nothing
-    , _aiInstanceType = Nothing
-    , _aiSpotInstanceRequestId = Nothing
-    }
-
--- | The ID of the instance.
-aiInstanceId :: Lens' ActiveInstance (Maybe Text)
-aiInstanceId = lens _aiInstanceId (\ s a -> s{_aiInstanceId = a});
-
--- | The instance type.
-aiInstanceType :: Lens' ActiveInstance (Maybe Text)
-aiInstanceType = lens _aiInstanceType (\ s a -> s{_aiInstanceType = a});
-
--- | The ID of the Spot instance request.
-aiSpotInstanceRequestId :: Lens' ActiveInstance (Maybe Text)
-aiSpotInstanceRequestId = lens _aiSpotInstanceRequestId (\ s a -> s{_aiSpotInstanceRequestId = a});
-
-instance FromXML ActiveInstance where
-        parseXML x
-          = ActiveInstance' <$>
-              (x .@? "instanceId") <*> (x .@? "instanceType") <*>
-                (x .@? "spotInstanceRequestId")
-
-instance Hashable ActiveInstance
-
-instance NFData ActiveInstance
-
--- | Describes an Elastic IP address.
---
---
---
--- /See:/ 'address' smart constructor.
-data Address = Address'
-    { _aAssociationId           :: !(Maybe Text)
-    , _aInstanceId              :: !(Maybe Text)
-    , _aNetworkInterfaceOwnerId :: !(Maybe Text)
-    , _aAllocationId            :: !(Maybe Text)
-    , _aDomain                  :: !(Maybe DomainType)
-    , _aNetworkInterfaceId      :: !(Maybe Text)
-    , _aPrivateIPAddress        :: !(Maybe Text)
-    , _aPublicIP                :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aAssociationId' - The ID representing the association of the address with an instance in a VPC.
---
--- * 'aInstanceId' - The ID of the instance that the address is associated with (if any).
---
--- * 'aNetworkInterfaceOwnerId' - The ID of the AWS account that owns the network interface.
---
--- * 'aAllocationId' - The ID representing the allocation of the address for use with EC2-VPC.
---
--- * 'aDomain' - Indicates whether this Elastic IP address is for use with instances in EC2-Classic (@standard@ ) or instances in a VPC (@vpc@ ).
---
--- * 'aNetworkInterfaceId' - The ID of the network interface.
---
--- * 'aPrivateIPAddress' - The private IP address associated with the Elastic IP address.
---
--- * 'aPublicIP' - The Elastic IP address.
-address
-    :: Address
-address =
-    Address'
-    { _aAssociationId = Nothing
-    , _aInstanceId = Nothing
-    , _aNetworkInterfaceOwnerId = Nothing
-    , _aAllocationId = Nothing
-    , _aDomain = Nothing
-    , _aNetworkInterfaceId = Nothing
-    , _aPrivateIPAddress = Nothing
-    , _aPublicIP = Nothing
-    }
-
--- | The ID representing the association of the address with an instance in a VPC.
-aAssociationId :: Lens' Address (Maybe Text)
-aAssociationId = lens _aAssociationId (\ s a -> s{_aAssociationId = a});
-
--- | The ID of the instance that the address is associated with (if any).
-aInstanceId :: Lens' Address (Maybe Text)
-aInstanceId = lens _aInstanceId (\ s a -> s{_aInstanceId = a});
-
--- | The ID of the AWS account that owns the network interface.
-aNetworkInterfaceOwnerId :: Lens' Address (Maybe Text)
-aNetworkInterfaceOwnerId = lens _aNetworkInterfaceOwnerId (\ s a -> s{_aNetworkInterfaceOwnerId = a});
-
--- | The ID representing the allocation of the address for use with EC2-VPC.
-aAllocationId :: Lens' Address (Maybe Text)
-aAllocationId = lens _aAllocationId (\ s a -> s{_aAllocationId = a});
-
--- | Indicates whether this Elastic IP address is for use with instances in EC2-Classic (@standard@ ) or instances in a VPC (@vpc@ ).
-aDomain :: Lens' Address (Maybe DomainType)
-aDomain = lens _aDomain (\ s a -> s{_aDomain = a});
-
--- | The ID of the network interface.
-aNetworkInterfaceId :: Lens' Address (Maybe Text)
-aNetworkInterfaceId = lens _aNetworkInterfaceId (\ s a -> s{_aNetworkInterfaceId = a});
-
--- | The private IP address associated with the Elastic IP address.
-aPrivateIPAddress :: Lens' Address (Maybe Text)
-aPrivateIPAddress = lens _aPrivateIPAddress (\ s a -> s{_aPrivateIPAddress = a});
-
--- | The Elastic IP address.
-aPublicIP :: Lens' Address (Maybe Text)
-aPublicIP = lens _aPublicIP (\ s a -> s{_aPublicIP = a});
-
-instance FromXML Address where
-        parseXML x
-          = Address' <$>
-              (x .@? "associationId") <*> (x .@? "instanceId") <*>
-                (x .@? "networkInterfaceOwnerId")
-                <*> (x .@? "allocationId")
-                <*> (x .@? "domain")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "publicIp")
-
-instance Hashable Address
-
-instance NFData Address
-
--- | Describes a value for a resource attribute that is a Boolean value.
---
---
---
--- /See:/ 'attributeBooleanValue' smart constructor.
-newtype AttributeBooleanValue = AttributeBooleanValue'
-    { _abvValue :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttributeBooleanValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'abvValue' - The attribute value. The valid values are @true@ or @false@ .
-attributeBooleanValue
-    :: AttributeBooleanValue
-attributeBooleanValue =
-    AttributeBooleanValue'
-    { _abvValue = Nothing
-    }
-
--- | The attribute value. The valid values are @true@ or @false@ .
-abvValue :: Lens' AttributeBooleanValue (Maybe Bool)
-abvValue = lens _abvValue (\ s a -> s{_abvValue = a});
-
-instance FromXML AttributeBooleanValue where
-        parseXML x
-          = AttributeBooleanValue' <$> (x .@? "value")
-
-instance Hashable AttributeBooleanValue
-
-instance NFData AttributeBooleanValue
-
-instance ToQuery AttributeBooleanValue where
-        toQuery AttributeBooleanValue'{..}
-          = mconcat ["Value" =: _abvValue]
-
--- | Describes a value for a resource attribute that is a String.
---
---
---
--- /See:/ 'attributeValue' smart constructor.
-newtype AttributeValue = AttributeValue'
-    { _avValue :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttributeValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avValue' - The attribute value. Note that the value is case-sensitive.
-attributeValue
-    :: AttributeValue
-attributeValue =
-    AttributeValue'
-    { _avValue = Nothing
-    }
-
--- | The attribute value. Note that the value is case-sensitive.
-avValue :: Lens' AttributeValue (Maybe Text)
-avValue = lens _avValue (\ s a -> s{_avValue = a});
-
-instance FromXML AttributeValue where
-        parseXML x = AttributeValue' <$> (x .@? "value")
-
-instance Hashable AttributeValue
-
-instance NFData AttributeValue
-
-instance ToQuery AttributeValue where
-        toQuery AttributeValue'{..}
-          = mconcat ["Value" =: _avValue]
-
--- | Describes an Availability Zone.
---
---
---
--- /See:/ 'availabilityZone' smart constructor.
-data AvailabilityZone = AvailabilityZone'
-    { _azState      :: !(Maybe AvailabilityZoneState)
-    , _azRegionName :: !(Maybe Text)
-    , _azZoneName   :: !(Maybe Text)
-    , _azMessages   :: !(Maybe [AvailabilityZoneMessage])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'azState' - The state of the Availability Zone.
---
--- * 'azRegionName' - The name of the region.
---
--- * 'azZoneName' - The name of the Availability Zone.
---
--- * 'azMessages' - Any messages about the Availability Zone.
-availabilityZone
-    :: AvailabilityZone
-availabilityZone =
-    AvailabilityZone'
-    { _azState = Nothing
-    , _azRegionName = Nothing
-    , _azZoneName = Nothing
-    , _azMessages = Nothing
-    }
-
--- | The state of the Availability Zone.
-azState :: Lens' AvailabilityZone (Maybe AvailabilityZoneState)
-azState = lens _azState (\ s a -> s{_azState = a});
-
--- | The name of the region.
-azRegionName :: Lens' AvailabilityZone (Maybe Text)
-azRegionName = lens _azRegionName (\ s a -> s{_azRegionName = a});
-
--- | The name of the Availability Zone.
-azZoneName :: Lens' AvailabilityZone (Maybe Text)
-azZoneName = lens _azZoneName (\ s a -> s{_azZoneName = a});
-
--- | Any messages about the Availability Zone.
-azMessages :: Lens' AvailabilityZone [AvailabilityZoneMessage]
-azMessages = lens _azMessages (\ s a -> s{_azMessages = a}) . _Default . _Coerce;
-
-instance FromXML AvailabilityZone where
-        parseXML x
-          = AvailabilityZone' <$>
-              (x .@? "zoneState") <*> (x .@? "regionName") <*>
-                (x .@? "zoneName")
-                <*>
-                (x .@? "messageSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable AvailabilityZone
-
-instance NFData AvailabilityZone
-
--- | Describes a message about an Availability Zone.
---
---
---
--- /See:/ 'availabilityZoneMessage' smart constructor.
-newtype AvailabilityZoneMessage = AvailabilityZoneMessage'
-    { _azmMessage :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailabilityZoneMessage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'azmMessage' - The message about the Availability Zone.
-availabilityZoneMessage
-    :: AvailabilityZoneMessage
-availabilityZoneMessage =
-    AvailabilityZoneMessage'
-    { _azmMessage = Nothing
-    }
-
--- | The message about the Availability Zone.
-azmMessage :: Lens' AvailabilityZoneMessage (Maybe Text)
-azmMessage = lens _azmMessage (\ s a -> s{_azmMessage = a});
-
-instance FromXML AvailabilityZoneMessage where
-        parseXML x
-          = AvailabilityZoneMessage' <$> (x .@? "message")
-
-instance Hashable AvailabilityZoneMessage
-
-instance NFData AvailabilityZoneMessage
-
--- | The capacity information for instances launched onto the Dedicated Host.
---
---
---
--- /See:/ 'availableCapacity' smart constructor.
-data AvailableCapacity = AvailableCapacity'
-    { _acAvailableInstanceCapacity :: !(Maybe [InstanceCapacity])
-    , _acAvailableVCPUs            :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailableCapacity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acAvailableInstanceCapacity' - The total number of instances that the Dedicated Host supports.
---
--- * 'acAvailableVCPUs' - The number of vCPUs available on the Dedicated Host.
-availableCapacity
-    :: AvailableCapacity
-availableCapacity =
-    AvailableCapacity'
-    { _acAvailableInstanceCapacity = Nothing
-    , _acAvailableVCPUs = Nothing
-    }
-
--- | The total number of instances that the Dedicated Host supports.
-acAvailableInstanceCapacity :: Lens' AvailableCapacity [InstanceCapacity]
-acAvailableInstanceCapacity = lens _acAvailableInstanceCapacity (\ s a -> s{_acAvailableInstanceCapacity = a}) . _Default . _Coerce;
-
--- | The number of vCPUs available on the Dedicated Host.
-acAvailableVCPUs :: Lens' AvailableCapacity (Maybe Int)
-acAvailableVCPUs = lens _acAvailableVCPUs (\ s a -> s{_acAvailableVCPUs = a});
-
-instance FromXML AvailableCapacity where
-        parseXML x
-          = AvailableCapacity' <$>
-              (x .@? "availableInstanceCapacity" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "availableVCpus")
-
-instance Hashable AvailableCapacity
-
-instance NFData AvailableCapacity
-
--- | /See:/ 'blobAttributeValue' smart constructor.
-newtype BlobAttributeValue = BlobAttributeValue'
-    { _bavValue :: Maybe Base64
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BlobAttributeValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bavValue' - Undocumented member.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-blobAttributeValue
-    :: BlobAttributeValue
-blobAttributeValue =
-    BlobAttributeValue'
-    { _bavValue = Nothing
-    }
-
--- | Undocumented member.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-bavValue :: Lens' BlobAttributeValue (Maybe ByteString)
-bavValue = lens _bavValue (\ s a -> s{_bavValue = a}) . mapping _Base64;
-
-instance Hashable BlobAttributeValue
-
-instance NFData BlobAttributeValue
-
-instance ToQuery BlobAttributeValue where
-        toQuery BlobAttributeValue'{..}
-          = mconcat ["Value" =: _bavValue]
-
--- | Describes a block device mapping.
---
---
---
--- /See:/ 'blockDeviceMapping' smart constructor.
-data BlockDeviceMapping = BlockDeviceMapping'
-    { _bdmVirtualName :: !(Maybe Text)
-    , _bdmNoDevice    :: !(Maybe Text)
-    , _bdmEBS         :: !(Maybe EBSBlockDevice)
-    , _bdmDeviceName  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BlockDeviceMapping' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bdmVirtualName' - The virtual device name (@ephemeral@ N). 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. Constraints: For M3 instances, you must specify instance store volumes in the block device mapping for the instance. When you launch an M3 instance, we ignore any instance store volumes specified in the block device mapping for the AMI.
---
--- * 'bdmNoDevice' - Suppresses the specified device included in the block device mapping of the AMI.
---
--- * 'bdmEBS' - Parameters used to automatically set up EBS volumes when the instance is launched.
---
--- * 'bdmDeviceName' - The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-blockDeviceMapping
-    :: Text -- ^ 'bdmDeviceName'
-    -> BlockDeviceMapping
-blockDeviceMapping pDeviceName_ =
-    BlockDeviceMapping'
-    { _bdmVirtualName = Nothing
-    , _bdmNoDevice = Nothing
-    , _bdmEBS = Nothing
-    , _bdmDeviceName = pDeviceName_
-    }
-
--- | The virtual device name (@ephemeral@ N). 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. Constraints: For M3 instances, you must specify instance store volumes in the block device mapping for the instance. When you launch an M3 instance, we ignore any instance store volumes specified in the block device mapping for the AMI.
-bdmVirtualName :: Lens' BlockDeviceMapping (Maybe Text)
-bdmVirtualName = lens _bdmVirtualName (\ s a -> s{_bdmVirtualName = a});
-
--- | Suppresses the specified device included in the block device mapping of the AMI.
-bdmNoDevice :: Lens' BlockDeviceMapping (Maybe Text)
-bdmNoDevice = lens _bdmNoDevice (\ s a -> s{_bdmNoDevice = a});
-
--- | Parameters used to automatically set up EBS volumes when the instance is launched.
-bdmEBS :: Lens' BlockDeviceMapping (Maybe EBSBlockDevice)
-bdmEBS = lens _bdmEBS (\ s a -> s{_bdmEBS = a});
-
--- | The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-bdmDeviceName :: Lens' BlockDeviceMapping Text
-bdmDeviceName = lens _bdmDeviceName (\ s a -> s{_bdmDeviceName = a});
-
-instance FromXML BlockDeviceMapping where
-        parseXML x
-          = BlockDeviceMapping' <$>
-              (x .@? "virtualName") <*> (x .@? "noDevice") <*>
-                (x .@? "ebs")
-                <*> (x .@ "deviceName")
-
-instance Hashable BlockDeviceMapping
-
-instance NFData BlockDeviceMapping
-
-instance ToQuery BlockDeviceMapping where
-        toQuery BlockDeviceMapping'{..}
-          = mconcat
-              ["VirtualName" =: _bdmVirtualName,
-               "NoDevice" =: _bdmNoDevice, "Ebs" =: _bdmEBS,
-               "DeviceName" =: _bdmDeviceName]
-
--- | Describes a bundle task.
---
---
---
--- /See:/ 'bundleTask' smart constructor.
-data BundleTask = BundleTask'
-    { _btBundleTaskError :: !(Maybe BundleTaskError)
-    , _btBundleId        :: !Text
-    , _btInstanceId      :: !Text
-    , _btProgress        :: !Text
-    , _btStartTime       :: !ISO8601
-    , _btState           :: !BundleTaskState
-    , _btStorage         :: !Storage
-    , _btUpdateTime      :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BundleTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'btBundleTaskError' - If the task fails, a description of the error.
---
--- * 'btBundleId' - The ID of the bundle task.
---
--- * 'btInstanceId' - The ID of the instance associated with this bundle task.
---
--- * 'btProgress' - The level of task completion, as a percent (for example, 20%).
---
--- * 'btStartTime' - The time this task started.
---
--- * 'btState' - The state of the task.
---
--- * 'btStorage' - The Amazon S3 storage locations.
---
--- * 'btUpdateTime' - The time of the most recent update for the task.
-bundleTask
-    :: Text -- ^ 'btBundleId'
-    -> Text -- ^ 'btInstanceId'
-    -> Text -- ^ 'btProgress'
-    -> UTCTime -- ^ 'btStartTime'
-    -> BundleTaskState -- ^ 'btState'
-    -> Storage -- ^ 'btStorage'
-    -> UTCTime -- ^ 'btUpdateTime'
-    -> BundleTask
-bundleTask pBundleId_ pInstanceId_ pProgress_ pStartTime_ pState_ pStorage_ pUpdateTime_ =
-    BundleTask'
-    { _btBundleTaskError = Nothing
-    , _btBundleId = pBundleId_
-    , _btInstanceId = pInstanceId_
-    , _btProgress = pProgress_
-    , _btStartTime = _Time # pStartTime_
-    , _btState = pState_
-    , _btStorage = pStorage_
-    , _btUpdateTime = _Time # pUpdateTime_
-    }
-
--- | If the task fails, a description of the error.
-btBundleTaskError :: Lens' BundleTask (Maybe BundleTaskError)
-btBundleTaskError = lens _btBundleTaskError (\ s a -> s{_btBundleTaskError = a});
-
--- | The ID of the bundle task.
-btBundleId :: Lens' BundleTask Text
-btBundleId = lens _btBundleId (\ s a -> s{_btBundleId = a});
-
--- | The ID of the instance associated with this bundle task.
-btInstanceId :: Lens' BundleTask Text
-btInstanceId = lens _btInstanceId (\ s a -> s{_btInstanceId = a});
-
--- | The level of task completion, as a percent (for example, 20%).
-btProgress :: Lens' BundleTask Text
-btProgress = lens _btProgress (\ s a -> s{_btProgress = a});
-
--- | The time this task started.
-btStartTime :: Lens' BundleTask UTCTime
-btStartTime = lens _btStartTime (\ s a -> s{_btStartTime = a}) . _Time;
-
--- | The state of the task.
-btState :: Lens' BundleTask BundleTaskState
-btState = lens _btState (\ s a -> s{_btState = a});
-
--- | The Amazon S3 storage locations.
-btStorage :: Lens' BundleTask Storage
-btStorage = lens _btStorage (\ s a -> s{_btStorage = a});
-
--- | The time of the most recent update for the task.
-btUpdateTime :: Lens' BundleTask UTCTime
-btUpdateTime = lens _btUpdateTime (\ s a -> s{_btUpdateTime = a}) . _Time;
-
-instance FromXML BundleTask where
-        parseXML x
-          = BundleTask' <$>
-              (x .@? "error") <*> (x .@ "bundleId") <*>
-                (x .@ "instanceId")
-                <*> (x .@ "progress")
-                <*> (x .@ "startTime")
-                <*> (x .@ "state")
-                <*> (x .@ "storage")
-                <*> (x .@ "updateTime")
-
-instance Hashable BundleTask
-
-instance NFData BundleTask
-
--- | Describes an error for 'BundleInstance' .
---
---
---
--- /See:/ 'bundleTaskError' smart constructor.
-data BundleTaskError = BundleTaskError'
-    { _bteCode    :: !(Maybe Text)
-    , _bteMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BundleTaskError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bteCode' - The error code.
---
--- * 'bteMessage' - The error message.
-bundleTaskError
-    :: BundleTaskError
-bundleTaskError =
-    BundleTaskError'
-    { _bteCode = Nothing
-    , _bteMessage = Nothing
-    }
-
--- | The error code.
-bteCode :: Lens' BundleTaskError (Maybe Text)
-bteCode = lens _bteCode (\ s a -> s{_bteCode = a});
-
--- | The error message.
-bteMessage :: Lens' BundleTaskError (Maybe Text)
-bteMessage = lens _bteMessage (\ s a -> s{_bteMessage = a});
-
-instance FromXML BundleTaskError where
-        parseXML x
-          = BundleTaskError' <$>
-              (x .@? "code") <*> (x .@? "message")
-
-instance Hashable BundleTaskError
-
-instance NFData BundleTaskError
-
--- | Describes a Spot fleet error.
---
---
---
--- /See:/ 'cancelSpotFleetRequestsError' smart constructor.
-data CancelSpotFleetRequestsError = CancelSpotFleetRequestsError'
-    { _csfreCode    :: !CancelBatchErrorCode
-    , _csfreMessage :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfreCode' - The error code.
---
--- * 'csfreMessage' - The description for the error code.
-cancelSpotFleetRequestsError
-    :: CancelBatchErrorCode -- ^ 'csfreCode'
-    -> Text -- ^ 'csfreMessage'
-    -> CancelSpotFleetRequestsError
-cancelSpotFleetRequestsError pCode_ pMessage_ =
-    CancelSpotFleetRequestsError'
-    { _csfreCode = pCode_
-    , _csfreMessage = pMessage_
-    }
-
--- | The error code.
-csfreCode :: Lens' CancelSpotFleetRequestsError CancelBatchErrorCode
-csfreCode = lens _csfreCode (\ s a -> s{_csfreCode = a});
-
--- | The description for the error code.
-csfreMessage :: Lens' CancelSpotFleetRequestsError Text
-csfreMessage = lens _csfreMessage (\ s a -> s{_csfreMessage = a});
-
-instance FromXML CancelSpotFleetRequestsError where
-        parseXML x
-          = CancelSpotFleetRequestsError' <$>
-              (x .@ "code") <*> (x .@ "message")
-
-instance Hashable CancelSpotFleetRequestsError
-
-instance NFData CancelSpotFleetRequestsError
-
--- | Describes a Spot fleet request that was not successfully canceled.
---
---
---
--- /See:/ 'cancelSpotFleetRequestsErrorItem' smart constructor.
-data CancelSpotFleetRequestsErrorItem = CancelSpotFleetRequestsErrorItem'
-    { _csfreiSpotFleetRequestId :: !Text
-    , _csfreiError              :: !CancelSpotFleetRequestsError
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsErrorItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfreiSpotFleetRequestId' - The ID of the Spot fleet request.
---
--- * 'csfreiError' - The error.
-cancelSpotFleetRequestsErrorItem
-    :: Text -- ^ 'csfreiSpotFleetRequestId'
-    -> CancelSpotFleetRequestsError -- ^ 'csfreiError'
-    -> CancelSpotFleetRequestsErrorItem
-cancelSpotFleetRequestsErrorItem pSpotFleetRequestId_ pError_ =
-    CancelSpotFleetRequestsErrorItem'
-    { _csfreiSpotFleetRequestId = pSpotFleetRequestId_
-    , _csfreiError = pError_
-    }
-
--- | The ID of the Spot fleet request.
-csfreiSpotFleetRequestId :: Lens' CancelSpotFleetRequestsErrorItem Text
-csfreiSpotFleetRequestId = lens _csfreiSpotFleetRequestId (\ s a -> s{_csfreiSpotFleetRequestId = a});
-
--- | The error.
-csfreiError :: Lens' CancelSpotFleetRequestsErrorItem CancelSpotFleetRequestsError
-csfreiError = lens _csfreiError (\ s a -> s{_csfreiError = a});
-
-instance FromXML CancelSpotFleetRequestsErrorItem
-         where
-        parseXML x
-          = CancelSpotFleetRequestsErrorItem' <$>
-              (x .@ "spotFleetRequestId") <*> (x .@ "error")
-
-instance Hashable CancelSpotFleetRequestsErrorItem
-
-instance NFData CancelSpotFleetRequestsErrorItem
-
--- | Describes a Spot fleet request that was successfully canceled.
---
---
---
--- /See:/ 'cancelSpotFleetRequestsSuccessItem' smart constructor.
-data CancelSpotFleetRequestsSuccessItem = CancelSpotFleetRequestsSuccessItem'
-    { _csfrsiSpotFleetRequestId            :: !Text
-    , _csfrsiCurrentSpotFleetRequestState  :: !BatchState
-    , _csfrsiPreviousSpotFleetRequestState :: !BatchState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsSuccessItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfrsiSpotFleetRequestId' - The ID of the Spot fleet request.
---
--- * 'csfrsiCurrentSpotFleetRequestState' - The current state of the Spot fleet request.
---
--- * 'csfrsiPreviousSpotFleetRequestState' - The previous state of the Spot fleet request.
-cancelSpotFleetRequestsSuccessItem
-    :: Text -- ^ 'csfrsiSpotFleetRequestId'
-    -> BatchState -- ^ 'csfrsiCurrentSpotFleetRequestState'
-    -> BatchState -- ^ 'csfrsiPreviousSpotFleetRequestState'
-    -> CancelSpotFleetRequestsSuccessItem
-cancelSpotFleetRequestsSuccessItem pSpotFleetRequestId_ pCurrentSpotFleetRequestState_ pPreviousSpotFleetRequestState_ =
-    CancelSpotFleetRequestsSuccessItem'
-    { _csfrsiSpotFleetRequestId = pSpotFleetRequestId_
-    , _csfrsiCurrentSpotFleetRequestState = pCurrentSpotFleetRequestState_
-    , _csfrsiPreviousSpotFleetRequestState = pPreviousSpotFleetRequestState_
-    }
-
--- | The ID of the Spot fleet request.
-csfrsiSpotFleetRequestId :: Lens' CancelSpotFleetRequestsSuccessItem Text
-csfrsiSpotFleetRequestId = lens _csfrsiSpotFleetRequestId (\ s a -> s{_csfrsiSpotFleetRequestId = a});
-
--- | The current state of the Spot fleet request.
-csfrsiCurrentSpotFleetRequestState :: Lens' CancelSpotFleetRequestsSuccessItem BatchState
-csfrsiCurrentSpotFleetRequestState = lens _csfrsiCurrentSpotFleetRequestState (\ s a -> s{_csfrsiCurrentSpotFleetRequestState = a});
-
--- | The previous state of the Spot fleet request.
-csfrsiPreviousSpotFleetRequestState :: Lens' CancelSpotFleetRequestsSuccessItem BatchState
-csfrsiPreviousSpotFleetRequestState = lens _csfrsiPreviousSpotFleetRequestState (\ s a -> s{_csfrsiPreviousSpotFleetRequestState = a});
-
-instance FromXML CancelSpotFleetRequestsSuccessItem
-         where
-        parseXML x
-          = CancelSpotFleetRequestsSuccessItem' <$>
-              (x .@ "spotFleetRequestId") <*>
-                (x .@ "currentSpotFleetRequestState")
-                <*> (x .@ "previousSpotFleetRequestState")
-
-instance Hashable CancelSpotFleetRequestsSuccessItem
-
-instance NFData CancelSpotFleetRequestsSuccessItem
-
--- | Describes a request to cancel a Spot instance.
---
---
---
--- /See:/ 'cancelledSpotInstanceRequest' smart constructor.
-data CancelledSpotInstanceRequest = CancelledSpotInstanceRequest'
-    { _csirState                 :: !(Maybe CancelSpotInstanceRequestState)
-    , _csirSpotInstanceRequestId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelledSpotInstanceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csirState' - The state of the Spot instance request.
---
--- * 'csirSpotInstanceRequestId' - The ID of the Spot instance request.
-cancelledSpotInstanceRequest
-    :: CancelledSpotInstanceRequest
-cancelledSpotInstanceRequest =
-    CancelledSpotInstanceRequest'
-    { _csirState = Nothing
-    , _csirSpotInstanceRequestId = Nothing
-    }
-
--- | The state of the Spot instance request.
-csirState :: Lens' CancelledSpotInstanceRequest (Maybe CancelSpotInstanceRequestState)
-csirState = lens _csirState (\ s a -> s{_csirState = a});
-
--- | The ID of the Spot instance request.
-csirSpotInstanceRequestId :: Lens' CancelledSpotInstanceRequest (Maybe Text)
-csirSpotInstanceRequestId = lens _csirSpotInstanceRequestId (\ s a -> s{_csirSpotInstanceRequestId = a});
-
-instance FromXML CancelledSpotInstanceRequest where
-        parseXML x
-          = CancelledSpotInstanceRequest' <$>
-              (x .@? "state") <*> (x .@? "spotInstanceRequestId")
-
-instance Hashable CancelledSpotInstanceRequest
-
-instance NFData CancelledSpotInstanceRequest
-
--- | Describes the ClassicLink DNS support status of a VPC.
---
---
---
--- /See:/ 'classicLinkDNSSupport' smart constructor.
-data ClassicLinkDNSSupport = ClassicLinkDNSSupport'
-    { _cldsVPCId                   :: !(Maybe Text)
-    , _cldsClassicLinkDNSSupported :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClassicLinkDNSSupport' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cldsVPCId' - The ID of the VPC.
---
--- * 'cldsClassicLinkDNSSupported' - Indicates whether ClassicLink DNS support is enabled for the VPC.
-classicLinkDNSSupport
-    :: ClassicLinkDNSSupport
-classicLinkDNSSupport =
-    ClassicLinkDNSSupport'
-    { _cldsVPCId = Nothing
-    , _cldsClassicLinkDNSSupported = Nothing
-    }
-
--- | The ID of the VPC.
-cldsVPCId :: Lens' ClassicLinkDNSSupport (Maybe Text)
-cldsVPCId = lens _cldsVPCId (\ s a -> s{_cldsVPCId = a});
-
--- | Indicates whether ClassicLink DNS support is enabled for the VPC.
-cldsClassicLinkDNSSupported :: Lens' ClassicLinkDNSSupport (Maybe Bool)
-cldsClassicLinkDNSSupported = lens _cldsClassicLinkDNSSupported (\ s a -> s{_cldsClassicLinkDNSSupported = a});
-
-instance FromXML ClassicLinkDNSSupport where
-        parseXML x
-          = ClassicLinkDNSSupport' <$>
-              (x .@? "vpcId") <*> (x .@? "classicLinkDnsSupported")
-
-instance Hashable ClassicLinkDNSSupport
-
-instance NFData ClassicLinkDNSSupport
-
--- | Describes a linked EC2-Classic instance.
---
---
---
--- /See:/ 'classicLinkInstance' smart constructor.
-data ClassicLinkInstance = ClassicLinkInstance'
-    { _cliInstanceId :: !(Maybe Text)
-    , _cliGroups     :: !(Maybe [GroupIdentifier])
-    , _cliVPCId      :: !(Maybe Text)
-    , _cliTags       :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClassicLinkInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cliInstanceId' - The ID of the instance.
---
--- * 'cliGroups' - A list of security groups.
---
--- * 'cliVPCId' - The ID of the VPC.
---
--- * 'cliTags' - Any tags assigned to the instance.
-classicLinkInstance
-    :: ClassicLinkInstance
-classicLinkInstance =
-    ClassicLinkInstance'
-    { _cliInstanceId = Nothing
-    , _cliGroups = Nothing
-    , _cliVPCId = Nothing
-    , _cliTags = Nothing
-    }
-
--- | The ID of the instance.
-cliInstanceId :: Lens' ClassicLinkInstance (Maybe Text)
-cliInstanceId = lens _cliInstanceId (\ s a -> s{_cliInstanceId = a});
-
--- | A list of security groups.
-cliGroups :: Lens' ClassicLinkInstance [GroupIdentifier]
-cliGroups = lens _cliGroups (\ s a -> s{_cliGroups = a}) . _Default . _Coerce;
-
--- | The ID of the VPC.
-cliVPCId :: Lens' ClassicLinkInstance (Maybe Text)
-cliVPCId = lens _cliVPCId (\ s a -> s{_cliVPCId = a});
-
--- | Any tags assigned to the instance.
-cliTags :: Lens' ClassicLinkInstance [Tag]
-cliTags = lens _cliTags (\ s a -> s{_cliTags = a}) . _Default . _Coerce;
-
-instance FromXML ClassicLinkInstance where
-        parseXML x
-          = ClassicLinkInstance' <$>
-              (x .@? "instanceId") <*>
-                (x .@? "groupSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable ClassicLinkInstance
-
-instance NFData ClassicLinkInstance
-
--- | Describes the client-specific data.
---
---
---
--- /See:/ 'clientData' smart constructor.
-data ClientData = ClientData'
-    { _cdUploadStart :: !(Maybe ISO8601)
-    , _cdUploadSize  :: !(Maybe Double)
-    , _cdUploadEnd   :: !(Maybe ISO8601)
-    , _cdComment     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClientData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdUploadStart' - The time that the disk upload starts.
---
--- * 'cdUploadSize' - The size of the uploaded disk image, in GiB.
---
--- * 'cdUploadEnd' - The time that the disk upload ends.
---
--- * 'cdComment' - A user-defined comment about the disk upload.
-clientData
-    :: ClientData
-clientData =
-    ClientData'
-    { _cdUploadStart = Nothing
-    , _cdUploadSize = Nothing
-    , _cdUploadEnd = Nothing
-    , _cdComment = Nothing
-    }
-
--- | The time that the disk upload starts.
-cdUploadStart :: Lens' ClientData (Maybe UTCTime)
-cdUploadStart = lens _cdUploadStart (\ s a -> s{_cdUploadStart = a}) . mapping _Time;
-
--- | The size of the uploaded disk image, in GiB.
-cdUploadSize :: Lens' ClientData (Maybe Double)
-cdUploadSize = lens _cdUploadSize (\ s a -> s{_cdUploadSize = a});
-
--- | The time that the disk upload ends.
-cdUploadEnd :: Lens' ClientData (Maybe UTCTime)
-cdUploadEnd = lens _cdUploadEnd (\ s a -> s{_cdUploadEnd = a}) . mapping _Time;
-
--- | A user-defined comment about the disk upload.
-cdComment :: Lens' ClientData (Maybe Text)
-cdComment = lens _cdComment (\ s a -> s{_cdComment = a});
-
-instance Hashable ClientData
-
-instance NFData ClientData
-
-instance ToQuery ClientData where
-        toQuery ClientData'{..}
-          = mconcat
-              ["UploadStart" =: _cdUploadStart,
-               "UploadSize" =: _cdUploadSize,
-               "UploadEnd" =: _cdUploadEnd, "Comment" =: _cdComment]
-
--- | Describes a conversion task.
---
---
---
--- /See:/ 'conversionTask' smart constructor.
-data ConversionTask = ConversionTask'
-    { _ctImportInstance   :: !(Maybe ImportInstanceTaskDetails)
-    , _ctStatusMessage    :: !(Maybe Text)
-    , _ctImportVolume     :: !(Maybe ImportVolumeTaskDetails)
-    , _ctExpirationTime   :: !(Maybe Text)
-    , _ctTags             :: !(Maybe [Tag])
-    , _ctConversionTaskId :: !Text
-    , _ctState            :: !ConversionTaskState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConversionTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ctImportInstance' - If the task is for importing an instance, this contains information about the import instance task.
---
--- * 'ctStatusMessage' - The status message related to the conversion task.
---
--- * 'ctImportVolume' - If the task is for importing a volume, this contains information about the import volume task.
---
--- * 'ctExpirationTime' - The time when the task expires. If the upload isn't complete before the expiration time, we automatically cancel the task.
---
--- * 'ctTags' - Any tags assigned to the task.
---
--- * 'ctConversionTaskId' - The ID of the conversion task.
---
--- * 'ctState' - The state of the conversion task.
-conversionTask
-    :: Text -- ^ 'ctConversionTaskId'
-    -> ConversionTaskState -- ^ 'ctState'
-    -> ConversionTask
-conversionTask pConversionTaskId_ pState_ =
-    ConversionTask'
-    { _ctImportInstance = Nothing
-    , _ctStatusMessage = Nothing
-    , _ctImportVolume = Nothing
-    , _ctExpirationTime = Nothing
-    , _ctTags = Nothing
-    , _ctConversionTaskId = pConversionTaskId_
-    , _ctState = pState_
-    }
-
--- | If the task is for importing an instance, this contains information about the import instance task.
-ctImportInstance :: Lens' ConversionTask (Maybe ImportInstanceTaskDetails)
-ctImportInstance = lens _ctImportInstance (\ s a -> s{_ctImportInstance = a});
-
--- | The status message related to the conversion task.
-ctStatusMessage :: Lens' ConversionTask (Maybe Text)
-ctStatusMessage = lens _ctStatusMessage (\ s a -> s{_ctStatusMessage = a});
-
--- | If the task is for importing a volume, this contains information about the import volume task.
-ctImportVolume :: Lens' ConversionTask (Maybe ImportVolumeTaskDetails)
-ctImportVolume = lens _ctImportVolume (\ s a -> s{_ctImportVolume = a});
-
--- | The time when the task expires. If the upload isn't complete before the expiration time, we automatically cancel the task.
-ctExpirationTime :: Lens' ConversionTask (Maybe Text)
-ctExpirationTime = lens _ctExpirationTime (\ s a -> s{_ctExpirationTime = a});
-
--- | Any tags assigned to the task.
-ctTags :: Lens' ConversionTask [Tag]
-ctTags = lens _ctTags (\ s a -> s{_ctTags = a}) . _Default . _Coerce;
-
--- | The ID of the conversion task.
-ctConversionTaskId :: Lens' ConversionTask Text
-ctConversionTaskId = lens _ctConversionTaskId (\ s a -> s{_ctConversionTaskId = a});
-
--- | The state of the conversion task.
-ctState :: Lens' ConversionTask ConversionTaskState
-ctState = lens _ctState (\ s a -> s{_ctState = a});
-
-instance FromXML ConversionTask where
-        parseXML x
-          = ConversionTask' <$>
-              (x .@? "importInstance") <*> (x .@? "statusMessage")
-                <*> (x .@? "importVolume")
-                <*> (x .@? "expirationTime")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "conversionTaskId")
-                <*> (x .@ "state")
-
-instance Hashable ConversionTask
-
-instance NFData ConversionTask
-
--- | Describes the user or group to be added or removed from the permissions for a volume.
---
---
---
--- /See:/ 'createVolumePermission' smart constructor.
-data CreateVolumePermission = CreateVolumePermission'
-    { _cvpGroup  :: !(Maybe PermissionGroup)
-    , _cvpUserId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVolumePermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvpGroup' - The specific group that is to be added or removed from a volume's list of create volume permissions.
---
--- * 'cvpUserId' - The specific AWS account ID that is to be added or removed from a volume's list of create volume permissions.
-createVolumePermission
-    :: CreateVolumePermission
-createVolumePermission =
-    CreateVolumePermission'
-    { _cvpGroup = Nothing
-    , _cvpUserId = Nothing
-    }
-
--- | The specific group that is to be added or removed from a volume's list of create volume permissions.
-cvpGroup :: Lens' CreateVolumePermission (Maybe PermissionGroup)
-cvpGroup = lens _cvpGroup (\ s a -> s{_cvpGroup = a});
-
--- | The specific AWS account ID that is to be added or removed from a volume's list of create volume permissions.
-cvpUserId :: Lens' CreateVolumePermission (Maybe Text)
-cvpUserId = lens _cvpUserId (\ s a -> s{_cvpUserId = a});
-
-instance FromXML CreateVolumePermission where
-        parseXML x
-          = CreateVolumePermission' <$>
-              (x .@? "group") <*> (x .@? "userId")
-
-instance Hashable CreateVolumePermission
-
-instance NFData CreateVolumePermission
-
-instance ToQuery CreateVolumePermission where
-        toQuery CreateVolumePermission'{..}
-          = mconcat
-              ["Group" =: _cvpGroup, "UserId" =: _cvpUserId]
-
--- | Describes modifications to the permissions for a volume.
---
---
---
--- /See:/ 'createVolumePermissionModifications' smart constructor.
-data CreateVolumePermissionModifications = CreateVolumePermissionModifications'
-    { _cvpmRemove :: !(Maybe [CreateVolumePermission])
-    , _cvpmAdd    :: !(Maybe [CreateVolumePermission])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVolumePermissionModifications' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvpmRemove' - Removes a specific AWS account ID or group from a volume's list of create volume permissions.
---
--- * 'cvpmAdd' - Adds a specific AWS account ID or group to a volume's list of create volume permissions.
-createVolumePermissionModifications
-    :: CreateVolumePermissionModifications
-createVolumePermissionModifications =
-    CreateVolumePermissionModifications'
-    { _cvpmRemove = Nothing
-    , _cvpmAdd = Nothing
-    }
-
--- | Removes a specific AWS account ID or group from a volume's list of create volume permissions.
-cvpmRemove :: Lens' CreateVolumePermissionModifications [CreateVolumePermission]
-cvpmRemove = lens _cvpmRemove (\ s a -> s{_cvpmRemove = a}) . _Default . _Coerce;
-
--- | Adds a specific AWS account ID or group to a volume's list of create volume permissions.
-cvpmAdd :: Lens' CreateVolumePermissionModifications [CreateVolumePermission]
-cvpmAdd = lens _cvpmAdd (\ s a -> s{_cvpmAdd = a}) . _Default . _Coerce;
-
-instance Hashable CreateVolumePermissionModifications
-
-instance NFData CreateVolumePermissionModifications
-
-instance ToQuery CreateVolumePermissionModifications
-         where
-        toQuery CreateVolumePermissionModifications'{..}
-          = mconcat
-              [toQuery (toQueryList "Remove" <$> _cvpmRemove),
-               toQuery (toQueryList "Add" <$> _cvpmAdd)]
-
--- | Describes a customer gateway.
---
---
---
--- /See:/ 'customerGateway' smart constructor.
-data CustomerGateway = CustomerGateway'
-    { _cgTags              :: !(Maybe [Tag])
-    , _cgBGPASN            :: !Text
-    , _cgCustomerGatewayId :: !Text
-    , _cgIPAddress         :: !Text
-    , _cgState             :: !Text
-    , _cgType              :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CustomerGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cgTags' - Any tags assigned to the customer gateway.
---
--- * 'cgBGPASN' - The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).
---
--- * 'cgCustomerGatewayId' - The ID of the customer gateway.
---
--- * 'cgIPAddress' - The Internet-routable IP address of the customer gateway's outside interface.
---
--- * 'cgState' - The current state of the customer gateway (@pending | available | deleting | deleted@ ).
---
--- * 'cgType' - The type of VPN connection the customer gateway supports (@ipsec.1@ ).
-customerGateway
-    :: Text -- ^ 'cgBGPASN'
-    -> Text -- ^ 'cgCustomerGatewayId'
-    -> Text -- ^ 'cgIPAddress'
-    -> Text -- ^ 'cgState'
-    -> Text -- ^ 'cgType'
-    -> CustomerGateway
-customerGateway pBGPASN_ pCustomerGatewayId_ pIPAddress_ pState_ pType_ =
-    CustomerGateway'
-    { _cgTags = Nothing
-    , _cgBGPASN = pBGPASN_
-    , _cgCustomerGatewayId = pCustomerGatewayId_
-    , _cgIPAddress = pIPAddress_
-    , _cgState = pState_
-    , _cgType = pType_
-    }
-
--- | Any tags assigned to the customer gateway.
-cgTags :: Lens' CustomerGateway [Tag]
-cgTags = lens _cgTags (\ s a -> s{_cgTags = a}) . _Default . _Coerce;
-
--- | The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number (ASN).
-cgBGPASN :: Lens' CustomerGateway Text
-cgBGPASN = lens _cgBGPASN (\ s a -> s{_cgBGPASN = a});
-
--- | The ID of the customer gateway.
-cgCustomerGatewayId :: Lens' CustomerGateway Text
-cgCustomerGatewayId = lens _cgCustomerGatewayId (\ s a -> s{_cgCustomerGatewayId = a});
-
--- | The Internet-routable IP address of the customer gateway's outside interface.
-cgIPAddress :: Lens' CustomerGateway Text
-cgIPAddress = lens _cgIPAddress (\ s a -> s{_cgIPAddress = a});
-
--- | The current state of the customer gateway (@pending | available | deleting | deleted@ ).
-cgState :: Lens' CustomerGateway Text
-cgState = lens _cgState (\ s a -> s{_cgState = a});
-
--- | The type of VPN connection the customer gateway supports (@ipsec.1@ ).
-cgType :: Lens' CustomerGateway Text
-cgType = lens _cgType (\ s a -> s{_cgType = a});
-
-instance FromXML CustomerGateway where
-        parseXML x
-          = CustomerGateway' <$>
-              (x .@? "tagSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@ "bgpAsn")
-                <*> (x .@ "customerGatewayId")
-                <*> (x .@ "ipAddress")
-                <*> (x .@ "state")
-                <*> (x .@ "type")
-
-instance Hashable CustomerGateway
-
-instance NFData CustomerGateway
-
--- | Describes a DHCP configuration option.
---
---
---
--- /See:/ 'dhcpConfiguration' smart constructor.
-data DHCPConfiguration = DHCPConfiguration'
-    { _dcValues :: !(Maybe [AttributeValue])
-    , _dcKey    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DHCPConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcValues' - One or more values for the DHCP option.
---
--- * 'dcKey' - The name of a DHCP option.
-dhcpConfiguration
-    :: DHCPConfiguration
-dhcpConfiguration =
-    DHCPConfiguration'
-    { _dcValues = Nothing
-    , _dcKey = Nothing
-    }
-
--- | One or more values for the DHCP option.
-dcValues :: Lens' DHCPConfiguration [AttributeValue]
-dcValues = lens _dcValues (\ s a -> s{_dcValues = a}) . _Default . _Coerce;
-
--- | The name of a DHCP option.
-dcKey :: Lens' DHCPConfiguration (Maybe Text)
-dcKey = lens _dcKey (\ s a -> s{_dcKey = a});
-
-instance FromXML DHCPConfiguration where
-        parseXML x
-          = DHCPConfiguration' <$>
-              (x .@? "valueSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "key")
-
-instance Hashable DHCPConfiguration
-
-instance NFData DHCPConfiguration
-
--- | Describes a set of DHCP options.
---
---
---
--- /See:/ 'dhcpOptions' smart constructor.
-data DHCPOptions = DHCPOptions'
-    { _doDHCPConfigurations :: !(Maybe [DHCPConfiguration])
-    , _doDHCPOptionsId      :: !(Maybe Text)
-    , _doTags               :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DHCPOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'doDHCPConfigurations' - One or more DHCP options in the set.
---
--- * 'doDHCPOptionsId' - The ID of the set of DHCP options.
---
--- * 'doTags' - Any tags assigned to the DHCP options set.
-dhcpOptions
-    :: DHCPOptions
-dhcpOptions =
-    DHCPOptions'
-    { _doDHCPConfigurations = Nothing
-    , _doDHCPOptionsId = Nothing
-    , _doTags = Nothing
-    }
-
--- | One or more DHCP options in the set.
-doDHCPConfigurations :: Lens' DHCPOptions [DHCPConfiguration]
-doDHCPConfigurations = lens _doDHCPConfigurations (\ s a -> s{_doDHCPConfigurations = a}) . _Default . _Coerce;
-
--- | The ID of the set of DHCP options.
-doDHCPOptionsId :: Lens' DHCPOptions (Maybe Text)
-doDHCPOptionsId = lens _doDHCPOptionsId (\ s a -> s{_doDHCPOptionsId = a});
-
--- | Any tags assigned to the DHCP options set.
-doTags :: Lens' DHCPOptions [Tag]
-doTags = lens _doTags (\ s a -> s{_doTags = a}) . _Default . _Coerce;
-
-instance FromXML DHCPOptions where
-        parseXML x
-          = DHCPOptions' <$>
-              (x .@? "dhcpConfigurationSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "dhcpOptionsId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable DHCPOptions
-
-instance NFData DHCPOptions
-
--- | Describes a disk image.
---
---
---
--- /See:/ 'diskImage' smart constructor.
-data DiskImage = DiskImage'
-    { _diImage       :: !(Maybe DiskImageDetail)
-    , _diVolume      :: !(Maybe VolumeDetail)
-    , _diDescription :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diImage' - Information about the disk image.
---
--- * 'diVolume' - Information about the volume.
---
--- * 'diDescription' - A description of the disk image.
-diskImage
-    :: DiskImage
-diskImage =
-    DiskImage'
-    { _diImage = Nothing
-    , _diVolume = Nothing
-    , _diDescription = Nothing
-    }
-
--- | Information about the disk image.
-diImage :: Lens' DiskImage (Maybe DiskImageDetail)
-diImage = lens _diImage (\ s a -> s{_diImage = a});
-
--- | Information about the volume.
-diVolume :: Lens' DiskImage (Maybe VolumeDetail)
-diVolume = lens _diVolume (\ s a -> s{_diVolume = a});
-
--- | A description of the disk image.
-diDescription :: Lens' DiskImage (Maybe Text)
-diDescription = lens _diDescription (\ s a -> s{_diDescription = a});
-
-instance Hashable DiskImage
-
-instance NFData DiskImage
-
-instance ToQuery DiskImage where
-        toQuery DiskImage'{..}
-          = mconcat
-              ["Image" =: _diImage, "Volume" =: _diVolume,
-               "Description" =: _diDescription]
-
--- | Describes a disk image.
---
---
---
--- /See:/ 'diskImageDescription' smart constructor.
-data DiskImageDescription = DiskImageDescription'
-    { _dChecksum          :: !(Maybe Text)
-    , _dFormat            :: !DiskImageFormat
-    , _dSize              :: !Integer
-    , _dImportManifestURL :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImageDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dChecksum' - The checksum computed for the disk image.
---
--- * 'dFormat' - The disk image format.
---
--- * 'dSize' - The size of the disk image, in GiB.
---
--- * 'dImportManifestURL' - A presigned URL for the import manifest stored in Amazon S3. For information about creating a presigned URL for an Amazon S3 object, read the "Query String Request Authentication Alternative" section of the <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests> topic in the /Amazon Simple Storage Service Developer Guide/ . For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
-diskImageDescription
-    :: DiskImageFormat -- ^ 'dFormat'
-    -> Integer -- ^ 'dSize'
-    -> Text -- ^ 'dImportManifestURL'
-    -> DiskImageDescription
-diskImageDescription pFormat_ pSize_ pImportManifestURL_ =
-    DiskImageDescription'
-    { _dChecksum = Nothing
-    , _dFormat = pFormat_
-    , _dSize = pSize_
-    , _dImportManifestURL = pImportManifestURL_
-    }
-
--- | The checksum computed for the disk image.
-dChecksum :: Lens' DiskImageDescription (Maybe Text)
-dChecksum = lens _dChecksum (\ s a -> s{_dChecksum = a});
-
--- | The disk image format.
-dFormat :: Lens' DiskImageDescription DiskImageFormat
-dFormat = lens _dFormat (\ s a -> s{_dFormat = a});
-
--- | The size of the disk image, in GiB.
-dSize :: Lens' DiskImageDescription Integer
-dSize = lens _dSize (\ s a -> s{_dSize = a});
-
--- | A presigned URL for the import manifest stored in Amazon S3. For information about creating a presigned URL for an Amazon S3 object, read the "Query String Request Authentication Alternative" section of the <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests> topic in the /Amazon Simple Storage Service Developer Guide/ . For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
-dImportManifestURL :: Lens' DiskImageDescription Text
-dImportManifestURL = lens _dImportManifestURL (\ s a -> s{_dImportManifestURL = a});
-
-instance FromXML DiskImageDescription where
-        parseXML x
-          = DiskImageDescription' <$>
-              (x .@? "checksum") <*> (x .@ "format") <*>
-                (x .@ "size")
-                <*> (x .@ "importManifestUrl")
-
-instance Hashable DiskImageDescription
-
-instance NFData DiskImageDescription
-
--- | Describes a disk image.
---
---
---
--- /See:/ 'diskImageDetail' smart constructor.
-data DiskImageDetail = DiskImageDetail'
-    { _didFormat            :: !DiskImageFormat
-    , _didBytes             :: !Integer
-    , _didImportManifestURL :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImageDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'didFormat' - The disk image format.
---
--- * 'didBytes' - The size of the disk image, in GiB.
---
--- * 'didImportManifestURL' - A presigned URL for the import manifest stored in Amazon S3 and presented here as an Amazon S3 presigned URL. For information about creating a presigned URL for an Amazon S3 object, read the "Query String Request Authentication Alternative" section of the <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests> topic in the /Amazon Simple Storage Service Developer Guide/ . For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
-diskImageDetail
-    :: DiskImageFormat -- ^ 'didFormat'
-    -> Integer -- ^ 'didBytes'
-    -> Text -- ^ 'didImportManifestURL'
-    -> DiskImageDetail
-diskImageDetail pFormat_ pBytes_ pImportManifestURL_ =
-    DiskImageDetail'
-    { _didFormat = pFormat_
-    , _didBytes = pBytes_
-    , _didImportManifestURL = pImportManifestURL_
-    }
-
--- | The disk image format.
-didFormat :: Lens' DiskImageDetail DiskImageFormat
-didFormat = lens _didFormat (\ s a -> s{_didFormat = a});
-
--- | The size of the disk image, in GiB.
-didBytes :: Lens' DiskImageDetail Integer
-didBytes = lens _didBytes (\ s a -> s{_didBytes = a});
-
--- | A presigned URL for the import manifest stored in Amazon S3 and presented here as an Amazon S3 presigned URL. For information about creating a presigned URL for an Amazon S3 object, read the "Query String Request Authentication Alternative" section of the <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests> topic in the /Amazon Simple Storage Service Developer Guide/ . For information about the import manifest referenced by this API action, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest> .
-didImportManifestURL :: Lens' DiskImageDetail Text
-didImportManifestURL = lens _didImportManifestURL (\ s a -> s{_didImportManifestURL = a});
-
-instance Hashable DiskImageDetail
-
-instance NFData DiskImageDetail
-
-instance ToQuery DiskImageDetail where
-        toQuery DiskImageDetail'{..}
-          = mconcat
-              ["Format" =: _didFormat, "Bytes" =: _didBytes,
-               "ImportManifestUrl" =: _didImportManifestURL]
-
--- | Describes a disk image volume.
---
---
---
--- /See:/ 'diskImageVolumeDescription' smart constructor.
-data DiskImageVolumeDescription = DiskImageVolumeDescription'
-    { _divdSize :: !(Maybe Integer)
-    , _divdId   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImageVolumeDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'divdSize' - The size of the volume, in GiB.
---
--- * 'divdId' - The volume identifier.
-diskImageVolumeDescription
-    :: Text -- ^ 'divdId'
-    -> DiskImageVolumeDescription
-diskImageVolumeDescription pId_ =
-    DiskImageVolumeDescription'
-    { _divdSize = Nothing
-    , _divdId = pId_
-    }
-
--- | The size of the volume, in GiB.
-divdSize :: Lens' DiskImageVolumeDescription (Maybe Integer)
-divdSize = lens _divdSize (\ s a -> s{_divdSize = a});
-
--- | The volume identifier.
-divdId :: Lens' DiskImageVolumeDescription Text
-divdId = lens _divdId (\ s a -> s{_divdId = a});
-
-instance FromXML DiskImageVolumeDescription where
-        parseXML x
-          = DiskImageVolumeDescription' <$>
-              (x .@? "size") <*> (x .@ "id")
-
-instance Hashable DiskImageVolumeDescription
-
-instance NFData DiskImageVolumeDescription
-
--- | Describes a block device for an EBS volume.
---
---
---
--- /See:/ 'ebsBlockDevice' smart constructor.
-data EBSBlockDevice = EBSBlockDevice'
-    { _ebdDeleteOnTermination :: !(Maybe Bool)
-    , _ebdVolumeSize          :: !(Maybe Int)
-    , _ebdIOPS                :: !(Maybe Int)
-    , _ebdEncrypted           :: !(Maybe Bool)
-    , _ebdVolumeType          :: !(Maybe VolumeType)
-    , _ebdSnapshotId          :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EBSBlockDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ebdDeleteOnTermination' - Indicates whether the EBS volume is deleted on instance termination.
---
--- * 'ebdVolumeSize' - The size of the volume, in GiB. Constraints: 1-16384 for General Purpose SSD (@gp2@ ), 4-16384 for Provisioned IOPS SSD (@io1@ ), 500-16384 for Throughput Optimized HDD (@st1@ ), 500-16384 for Cold HDD (@sc1@ ), and 1-1024 for Magnetic (@standard@ ) volumes. If you specify a snapshot, the volume size must be equal to or larger than the snapshot size. Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.
---
--- * 'ebdIOPS' - The number of I/O operations per second (IOPS) that the volume supports. For @io1@ , this represents the number of IOPS that are provisioned for the volume. For @gp2@ , this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information about General Purpose SSD baseline performance, I/O credits, and bursting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types> in the /Amazon Elastic Compute Cloud User Guide/ . Constraint: Range is 100-20000 IOPS for @io1@ volumes and 100-10000 IOPS for @gp2@ volumes. Condition: This parameter is required for requests to create @io1@ volumes; it is not used in requests to create @gp2@ , @st1@ , @sc1@ , or @standard@ volumes.
---
--- * 'ebdEncrypted' - Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS volumes may only be attached to instances that support Amazon EBS encryption.
---
--- * 'ebdVolumeType' - The volume type: @gp2@ , @io1@ , @st1@ , @sc1@ , or @standard@ . Default: @standard@
---
--- * 'ebdSnapshotId' - The ID of the snapshot.
-ebsBlockDevice
-    :: EBSBlockDevice
-ebsBlockDevice =
-    EBSBlockDevice'
-    { _ebdDeleteOnTermination = Nothing
-    , _ebdVolumeSize = Nothing
-    , _ebdIOPS = Nothing
-    , _ebdEncrypted = Nothing
-    , _ebdVolumeType = Nothing
-    , _ebdSnapshotId = Nothing
-    }
-
--- | Indicates whether the EBS volume is deleted on instance termination.
-ebdDeleteOnTermination :: Lens' EBSBlockDevice (Maybe Bool)
-ebdDeleteOnTermination = lens _ebdDeleteOnTermination (\ s a -> s{_ebdDeleteOnTermination = a});
-
--- | The size of the volume, in GiB. Constraints: 1-16384 for General Purpose SSD (@gp2@ ), 4-16384 for Provisioned IOPS SSD (@io1@ ), 500-16384 for Throughput Optimized HDD (@st1@ ), 500-16384 for Cold HDD (@sc1@ ), and 1-1024 for Magnetic (@standard@ ) volumes. If you specify a snapshot, the volume size must be equal to or larger than the snapshot size. Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.
-ebdVolumeSize :: Lens' EBSBlockDevice (Maybe Int)
-ebdVolumeSize = lens _ebdVolumeSize (\ s a -> s{_ebdVolumeSize = a});
-
--- | The number of I/O operations per second (IOPS) that the volume supports. For @io1@ , this represents the number of IOPS that are provisioned for the volume. For @gp2@ , this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information about General Purpose SSD baseline performance, I/O credits, and bursting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types> in the /Amazon Elastic Compute Cloud User Guide/ . Constraint: Range is 100-20000 IOPS for @io1@ volumes and 100-10000 IOPS for @gp2@ volumes. Condition: This parameter is required for requests to create @io1@ volumes; it is not used in requests to create @gp2@ , @st1@ , @sc1@ , or @standard@ volumes.
-ebdIOPS :: Lens' EBSBlockDevice (Maybe Int)
-ebdIOPS = lens _ebdIOPS (\ s a -> s{_ebdIOPS = a});
-
--- | Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS volumes may only be attached to instances that support Amazon EBS encryption.
-ebdEncrypted :: Lens' EBSBlockDevice (Maybe Bool)
-ebdEncrypted = lens _ebdEncrypted (\ s a -> s{_ebdEncrypted = a});
-
--- | The volume type: @gp2@ , @io1@ , @st1@ , @sc1@ , or @standard@ . Default: @standard@
-ebdVolumeType :: Lens' EBSBlockDevice (Maybe VolumeType)
-ebdVolumeType = lens _ebdVolumeType (\ s a -> s{_ebdVolumeType = a});
-
--- | The ID of the snapshot.
-ebdSnapshotId :: Lens' EBSBlockDevice (Maybe Text)
-ebdSnapshotId = lens _ebdSnapshotId (\ s a -> s{_ebdSnapshotId = a});
-
-instance FromXML EBSBlockDevice where
-        parseXML x
-          = EBSBlockDevice' <$>
-              (x .@? "deleteOnTermination") <*>
-                (x .@? "volumeSize")
-                <*> (x .@? "iops")
-                <*> (x .@? "encrypted")
-                <*> (x .@? "volumeType")
-                <*> (x .@? "snapshotId")
-
-instance Hashable EBSBlockDevice
-
-instance NFData EBSBlockDevice
-
-instance ToQuery EBSBlockDevice where
-        toQuery EBSBlockDevice'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _ebdDeleteOnTermination,
-               "VolumeSize" =: _ebdVolumeSize, "Iops" =: _ebdIOPS,
-               "Encrypted" =: _ebdEncrypted,
-               "VolumeType" =: _ebdVolumeType,
-               "SnapshotId" =: _ebdSnapshotId]
-
--- | Describes a parameter used to set up an EBS volume in a block device mapping.
---
---
---
--- /See:/ 'ebsInstanceBlockDevice' smart constructor.
-data EBSInstanceBlockDevice = EBSInstanceBlockDevice'
-    { _eibdStatus              :: !(Maybe AttachmentStatus)
-    , _eibdDeleteOnTermination :: !(Maybe Bool)
-    , _eibdVolumeId            :: !(Maybe Text)
-    , _eibdAttachTime          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EBSInstanceBlockDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eibdStatus' - The attachment state.
---
--- * 'eibdDeleteOnTermination' - Indicates whether the volume is deleted on instance termination.
---
--- * 'eibdVolumeId' - The ID of the EBS volume.
---
--- * 'eibdAttachTime' - The time stamp when the attachment initiated.
-ebsInstanceBlockDevice
-    :: EBSInstanceBlockDevice
-ebsInstanceBlockDevice =
-    EBSInstanceBlockDevice'
-    { _eibdStatus = Nothing
-    , _eibdDeleteOnTermination = Nothing
-    , _eibdVolumeId = Nothing
-    , _eibdAttachTime = Nothing
-    }
-
--- | The attachment state.
-eibdStatus :: Lens' EBSInstanceBlockDevice (Maybe AttachmentStatus)
-eibdStatus = lens _eibdStatus (\ s a -> s{_eibdStatus = a});
-
--- | Indicates whether the volume is deleted on instance termination.
-eibdDeleteOnTermination :: Lens' EBSInstanceBlockDevice (Maybe Bool)
-eibdDeleteOnTermination = lens _eibdDeleteOnTermination (\ s a -> s{_eibdDeleteOnTermination = a});
-
--- | The ID of the EBS volume.
-eibdVolumeId :: Lens' EBSInstanceBlockDevice (Maybe Text)
-eibdVolumeId = lens _eibdVolumeId (\ s a -> s{_eibdVolumeId = a});
-
--- | The time stamp when the attachment initiated.
-eibdAttachTime :: Lens' EBSInstanceBlockDevice (Maybe UTCTime)
-eibdAttachTime = lens _eibdAttachTime (\ s a -> s{_eibdAttachTime = a}) . mapping _Time;
-
-instance FromXML EBSInstanceBlockDevice where
-        parseXML x
-          = EBSInstanceBlockDevice' <$>
-              (x .@? "status") <*> (x .@? "deleteOnTermination")
-                <*> (x .@? "volumeId")
-                <*> (x .@? "attachTime")
-
-instance Hashable EBSInstanceBlockDevice
-
-instance NFData EBSInstanceBlockDevice
-
--- | Describes information used to set up an EBS volume specified in a block device mapping.
---
---
---
--- /See:/ 'ebsInstanceBlockDeviceSpecification' smart constructor.
-data EBSInstanceBlockDeviceSpecification = EBSInstanceBlockDeviceSpecification'
-    { _eibdsDeleteOnTermination :: !(Maybe Bool)
-    , _eibdsVolumeId            :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EBSInstanceBlockDeviceSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eibdsDeleteOnTermination' - Indicates whether the volume is deleted on instance termination.
---
--- * 'eibdsVolumeId' - The ID of the EBS volume.
-ebsInstanceBlockDeviceSpecification
-    :: EBSInstanceBlockDeviceSpecification
-ebsInstanceBlockDeviceSpecification =
-    EBSInstanceBlockDeviceSpecification'
-    { _eibdsDeleteOnTermination = Nothing
-    , _eibdsVolumeId = Nothing
-    }
-
--- | Indicates whether the volume is deleted on instance termination.
-eibdsDeleteOnTermination :: Lens' EBSInstanceBlockDeviceSpecification (Maybe Bool)
-eibdsDeleteOnTermination = lens _eibdsDeleteOnTermination (\ s a -> s{_eibdsDeleteOnTermination = a});
-
--- | The ID of the EBS volume.
-eibdsVolumeId :: Lens' EBSInstanceBlockDeviceSpecification (Maybe Text)
-eibdsVolumeId = lens _eibdsVolumeId (\ s a -> s{_eibdsVolumeId = a});
-
-instance Hashable EBSInstanceBlockDeviceSpecification
-
-instance NFData EBSInstanceBlockDeviceSpecification
-
-instance ToQuery EBSInstanceBlockDeviceSpecification
-         where
-        toQuery EBSInstanceBlockDeviceSpecification'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _eibdsDeleteOnTermination,
-               "VolumeId" =: _eibdsVolumeId]
-
--- | Describes an egress-only Internet gateway.
---
---
---
--- /See:/ 'egressOnlyInternetGateway' smart constructor.
-data EgressOnlyInternetGateway = EgressOnlyInternetGateway'
-    { _eoigEgressOnlyInternetGatewayId :: !(Maybe Text)
-    , _eoigAttachments                 :: !(Maybe [InternetGatewayAttachment])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EgressOnlyInternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eoigEgressOnlyInternetGatewayId' - The ID of the egress-only Internet gateway.
---
--- * 'eoigAttachments' - Information about the attachment of the egress-only Internet gateway.
-egressOnlyInternetGateway
-    :: EgressOnlyInternetGateway
-egressOnlyInternetGateway =
-    EgressOnlyInternetGateway'
-    { _eoigEgressOnlyInternetGatewayId = Nothing
-    , _eoigAttachments = Nothing
-    }
-
--- | The ID of the egress-only Internet gateway.
-eoigEgressOnlyInternetGatewayId :: Lens' EgressOnlyInternetGateway (Maybe Text)
-eoigEgressOnlyInternetGatewayId = lens _eoigEgressOnlyInternetGatewayId (\ s a -> s{_eoigEgressOnlyInternetGatewayId = a});
-
--- | Information about the attachment of the egress-only Internet gateway.
-eoigAttachments :: Lens' EgressOnlyInternetGateway [InternetGatewayAttachment]
-eoigAttachments = lens _eoigAttachments (\ s a -> s{_eoigAttachments = a}) . _Default . _Coerce;
-
-instance FromXML EgressOnlyInternetGateway where
-        parseXML x
-          = EgressOnlyInternetGateway' <$>
-              (x .@? "egressOnlyInternetGatewayId") <*>
-                (x .@? "attachmentSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable EgressOnlyInternetGateway
-
-instance NFData EgressOnlyInternetGateway
-
--- | Describes a Spot fleet event.
---
---
---
--- /See:/ 'eventInformation' smart constructor.
-data EventInformation = EventInformation'
-    { _eiInstanceId       :: !(Maybe Text)
-    , _eiEventDescription :: !(Maybe Text)
-    , _eiEventSubType     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EventInformation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eiInstanceId' - The ID of the instance. This information is available only for @instanceChange@ events.
---
--- * 'eiEventDescription' - The description of the event.
---
--- * 'eiEventSubType' - The event. The following are the @error@ events.     * @iamFleetRoleInvalid@ - The Spot fleet did not have the required permissions either to launch or terminate an instance.     * @launchSpecTemporarilyBlacklisted@ - The configuration is not valid and several attempts to launch instances have failed. For more information, see the description of the event.     * @spotFleetRequestConfigurationInvalid@ - The configuration is not valid. For more information, see the description of the event.     * @spotInstanceCountLimitExceeded@ - You've reached the limit on the number of Spot instances that you can launch. The following are the @fleetRequestChange@ events.     * @active@ - The Spot fleet has been validated and Amazon EC2 is attempting to maintain the target number of running Spot instances.     * @cancelled@ - The Spot fleet is canceled and has no running Spot instances. The Spot fleet will be deleted two days after its instances were terminated.     * @cancelled_running@ - The Spot fleet is canceled and will not launch additional Spot instances, but its existing Spot instances continue to run until they are interrupted or terminated.     * @cancelled_terminating@ - The Spot fleet is canceled and its Spot instances are terminating.     * @expired@ - The Spot fleet request has expired. A subsequent event indicates that the instances were terminated, if the request was created with @TerminateInstancesWithExpiration@ set.     * @modify_in_progress@ - A request to modify the Spot fleet request was accepted and is in progress.     * @modify_successful@ - The Spot fleet request was modified.     * @price_update@ - The bid price for a launch configuration was adjusted because it was too high. This change is permanent.     * @submitted@ - The Spot fleet request is being evaluated and Amazon EC2 is preparing to launch the target number of Spot instances. The following are the @instanceChange@ events.     * @launched@ - A bid was fulfilled and a new instance was launched.     * @terminated@ - An instance was terminated by the user.
-eventInformation
-    :: EventInformation
-eventInformation =
-    EventInformation'
-    { _eiInstanceId = Nothing
-    , _eiEventDescription = Nothing
-    , _eiEventSubType = Nothing
-    }
-
--- | The ID of the instance. This information is available only for @instanceChange@ events.
-eiInstanceId :: Lens' EventInformation (Maybe Text)
-eiInstanceId = lens _eiInstanceId (\ s a -> s{_eiInstanceId = a});
-
--- | The description of the event.
-eiEventDescription :: Lens' EventInformation (Maybe Text)
-eiEventDescription = lens _eiEventDescription (\ s a -> s{_eiEventDescription = a});
-
--- | The event. The following are the @error@ events.     * @iamFleetRoleInvalid@ - The Spot fleet did not have the required permissions either to launch or terminate an instance.     * @launchSpecTemporarilyBlacklisted@ - The configuration is not valid and several attempts to launch instances have failed. For more information, see the description of the event.     * @spotFleetRequestConfigurationInvalid@ - The configuration is not valid. For more information, see the description of the event.     * @spotInstanceCountLimitExceeded@ - You've reached the limit on the number of Spot instances that you can launch. The following are the @fleetRequestChange@ events.     * @active@ - The Spot fleet has been validated and Amazon EC2 is attempting to maintain the target number of running Spot instances.     * @cancelled@ - The Spot fleet is canceled and has no running Spot instances. The Spot fleet will be deleted two days after its instances were terminated.     * @cancelled_running@ - The Spot fleet is canceled and will not launch additional Spot instances, but its existing Spot instances continue to run until they are interrupted or terminated.     * @cancelled_terminating@ - The Spot fleet is canceled and its Spot instances are terminating.     * @expired@ - The Spot fleet request has expired. A subsequent event indicates that the instances were terminated, if the request was created with @TerminateInstancesWithExpiration@ set.     * @modify_in_progress@ - A request to modify the Spot fleet request was accepted and is in progress.     * @modify_successful@ - The Spot fleet request was modified.     * @price_update@ - The bid price for a launch configuration was adjusted because it was too high. This change is permanent.     * @submitted@ - The Spot fleet request is being evaluated and Amazon EC2 is preparing to launch the target number of Spot instances. The following are the @instanceChange@ events.     * @launched@ - A bid was fulfilled and a new instance was launched.     * @terminated@ - An instance was terminated by the user.
-eiEventSubType :: Lens' EventInformation (Maybe Text)
-eiEventSubType = lens _eiEventSubType (\ s a -> s{_eiEventSubType = a});
-
-instance FromXML EventInformation where
-        parseXML x
-          = EventInformation' <$>
-              (x .@? "instanceId") <*> (x .@? "eventDescription")
-                <*> (x .@? "eventSubType")
-
-instance Hashable EventInformation
-
-instance NFData EventInformation
-
--- | Describes an instance export task.
---
---
---
--- /See:/ 'exportTask' smart constructor.
-data ExportTask = ExportTask'
-    { _etDescription           :: !Text
-    , _etExportTaskId          :: !Text
-    , _etExportToS3Task        :: !ExportToS3Task
-    , _etInstanceExportDetails :: !InstanceExportDetails
-    , _etState                 :: !ExportTaskState
-    , _etStatusMessage         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etDescription' - A description of the resource being exported.
---
--- * 'etExportTaskId' - The ID of the export task.
---
--- * 'etExportToS3Task' - Information about the export task.
---
--- * 'etInstanceExportDetails' - Information about the instance to export.
---
--- * 'etState' - The state of the export task.
---
--- * 'etStatusMessage' - The status message related to the export task.
-exportTask
-    :: Text -- ^ 'etDescription'
-    -> Text -- ^ 'etExportTaskId'
-    -> ExportToS3Task -- ^ 'etExportToS3Task'
-    -> InstanceExportDetails -- ^ 'etInstanceExportDetails'
-    -> ExportTaskState -- ^ 'etState'
-    -> Text -- ^ 'etStatusMessage'
-    -> ExportTask
-exportTask pDescription_ pExportTaskId_ pExportToS3Task_ pInstanceExportDetails_ pState_ pStatusMessage_ =
-    ExportTask'
-    { _etDescription = pDescription_
-    , _etExportTaskId = pExportTaskId_
-    , _etExportToS3Task = pExportToS3Task_
-    , _etInstanceExportDetails = pInstanceExportDetails_
-    , _etState = pState_
-    , _etStatusMessage = pStatusMessage_
-    }
-
--- | A description of the resource being exported.
-etDescription :: Lens' ExportTask Text
-etDescription = lens _etDescription (\ s a -> s{_etDescription = a});
-
--- | The ID of the export task.
-etExportTaskId :: Lens' ExportTask Text
-etExportTaskId = lens _etExportTaskId (\ s a -> s{_etExportTaskId = a});
-
--- | Information about the export task.
-etExportToS3Task :: Lens' ExportTask ExportToS3Task
-etExportToS3Task = lens _etExportToS3Task (\ s a -> s{_etExportToS3Task = a});
-
--- | Information about the instance to export.
-etInstanceExportDetails :: Lens' ExportTask InstanceExportDetails
-etInstanceExportDetails = lens _etInstanceExportDetails (\ s a -> s{_etInstanceExportDetails = a});
-
--- | The state of the export task.
-etState :: Lens' ExportTask ExportTaskState
-etState = lens _etState (\ s a -> s{_etState = a});
-
--- | The status message related to the export task.
-etStatusMessage :: Lens' ExportTask Text
-etStatusMessage = lens _etStatusMessage (\ s a -> s{_etStatusMessage = a});
-
-instance FromXML ExportTask where
-        parseXML x
-          = ExportTask' <$>
-              (x .@ "description") <*> (x .@ "exportTaskId") <*>
-                (x .@ "exportToS3")
-                <*> (x .@ "instanceExport")
-                <*> (x .@ "state")
-                <*> (x .@ "statusMessage")
-
-instance Hashable ExportTask
-
-instance NFData ExportTask
-
--- | Describes the format and location for an instance export task.
---
---
---
--- /See:/ 'exportToS3Task' smart constructor.
-data ExportToS3Task = ExportToS3Task'
-    { _etstS3Key           :: !(Maybe Text)
-    , _etstContainerFormat :: !(Maybe ContainerFormat)
-    , _etstS3Bucket        :: !(Maybe Text)
-    , _etstDiskImageFormat :: !(Maybe DiskImageFormat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExportToS3Task' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etstS3Key' - The encryption key for your S3 bucket.
---
--- * 'etstContainerFormat' - The container format used to combine disk images with metadata (such as OVF). If absent, only the disk image is exported.
---
--- * 'etstS3Bucket' - The S3 bucket for the destination image. The destination bucket must exist and grant WRITE and READ_ACP permissions to the AWS account @vm-import-export@amazon.com@ .
---
--- * 'etstDiskImageFormat' - The format for the exported image.
-exportToS3Task
-    :: ExportToS3Task
-exportToS3Task =
-    ExportToS3Task'
-    { _etstS3Key = Nothing
-    , _etstContainerFormat = Nothing
-    , _etstS3Bucket = Nothing
-    , _etstDiskImageFormat = Nothing
-    }
-
--- | The encryption key for your S3 bucket.
-etstS3Key :: Lens' ExportToS3Task (Maybe Text)
-etstS3Key = lens _etstS3Key (\ s a -> s{_etstS3Key = a});
-
--- | The container format used to combine disk images with metadata (such as OVF). If absent, only the disk image is exported.
-etstContainerFormat :: Lens' ExportToS3Task (Maybe ContainerFormat)
-etstContainerFormat = lens _etstContainerFormat (\ s a -> s{_etstContainerFormat = a});
-
--- | The S3 bucket for the destination image. The destination bucket must exist and grant WRITE and READ_ACP permissions to the AWS account @vm-import-export@amazon.com@ .
-etstS3Bucket :: Lens' ExportToS3Task (Maybe Text)
-etstS3Bucket = lens _etstS3Bucket (\ s a -> s{_etstS3Bucket = a});
-
--- | The format for the exported image.
-etstDiskImageFormat :: Lens' ExportToS3Task (Maybe DiskImageFormat)
-etstDiskImageFormat = lens _etstDiskImageFormat (\ s a -> s{_etstDiskImageFormat = a});
-
-instance FromXML ExportToS3Task where
-        parseXML x
-          = ExportToS3Task' <$>
-              (x .@? "s3Key") <*> (x .@? "containerFormat") <*>
-                (x .@? "s3Bucket")
-                <*> (x .@? "diskImageFormat")
-
-instance Hashable ExportToS3Task
-
-instance NFData ExportToS3Task
-
--- | Describes an instance export task.
---
---
---
--- /See:/ 'exportToS3TaskSpecification' smart constructor.
-data ExportToS3TaskSpecification = ExportToS3TaskSpecification'
-    { _etstsContainerFormat :: !(Maybe ContainerFormat)
-    , _etstsS3Prefix        :: !(Maybe Text)
-    , _etstsS3Bucket        :: !(Maybe Text)
-    , _etstsDiskImageFormat :: !(Maybe DiskImageFormat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExportToS3TaskSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etstsContainerFormat' - The container format used to combine disk images with metadata (such as OVF). If absent, only the disk image is exported.
---
--- * 'etstsS3Prefix' - The image is written to a single object in the S3 bucket at the S3 key s3prefix + exportTaskId + '.' + diskImageFormat.
---
--- * 'etstsS3Bucket' - The S3 bucket for the destination image. The destination bucket must exist and grant WRITE and READ_ACP permissions to the AWS account @vm-import-export@amazon.com@ .
---
--- * 'etstsDiskImageFormat' - The format for the exported image.
-exportToS3TaskSpecification
-    :: ExportToS3TaskSpecification
-exportToS3TaskSpecification =
-    ExportToS3TaskSpecification'
-    { _etstsContainerFormat = Nothing
-    , _etstsS3Prefix = Nothing
-    , _etstsS3Bucket = Nothing
-    , _etstsDiskImageFormat = Nothing
-    }
-
--- | The container format used to combine disk images with metadata (such as OVF). If absent, only the disk image is exported.
-etstsContainerFormat :: Lens' ExportToS3TaskSpecification (Maybe ContainerFormat)
-etstsContainerFormat = lens _etstsContainerFormat (\ s a -> s{_etstsContainerFormat = a});
-
--- | The image is written to a single object in the S3 bucket at the S3 key s3prefix + exportTaskId + '.' + diskImageFormat.
-etstsS3Prefix :: Lens' ExportToS3TaskSpecification (Maybe Text)
-etstsS3Prefix = lens _etstsS3Prefix (\ s a -> s{_etstsS3Prefix = a});
-
--- | The S3 bucket for the destination image. The destination bucket must exist and grant WRITE and READ_ACP permissions to the AWS account @vm-import-export@amazon.com@ .
-etstsS3Bucket :: Lens' ExportToS3TaskSpecification (Maybe Text)
-etstsS3Bucket = lens _etstsS3Bucket (\ s a -> s{_etstsS3Bucket = a});
-
--- | The format for the exported image.
-etstsDiskImageFormat :: Lens' ExportToS3TaskSpecification (Maybe DiskImageFormat)
-etstsDiskImageFormat = lens _etstsDiskImageFormat (\ s a -> s{_etstsDiskImageFormat = a});
-
-instance Hashable ExportToS3TaskSpecification
-
-instance NFData ExportToS3TaskSpecification
-
-instance ToQuery ExportToS3TaskSpecification where
-        toQuery ExportToS3TaskSpecification'{..}
-          = mconcat
-              ["ContainerFormat" =: _etstsContainerFormat,
-               "S3Prefix" =: _etstsS3Prefix,
-               "S3Bucket" =: _etstsS3Bucket,
-               "DiskImageFormat" =: _etstsDiskImageFormat]
-
--- | A filter name and value pair that is used to return a more specific list of results. Filters can be used to match a set of resources by various criteria, such as tags, attributes, or IDs.
---
---
---
--- /See:/ 'filter'' smart constructor.
-data Filter = Filter'
-    { _fValues :: !(Maybe [Text])
-    , _fName   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Filter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fValues' - One or more filter values. Filter values are case-sensitive.
---
--- * 'fName' - The name of the filter. Filter names are case-sensitive.
-filter'
-    :: Text -- ^ 'fName'
-    -> Filter
-filter' pName_ =
-    Filter'
-    { _fValues = Nothing
-    , _fName = pName_
-    }
-
--- | One or more filter values. Filter values are case-sensitive.
-fValues :: Lens' Filter [Text]
-fValues = lens _fValues (\ s a -> s{_fValues = a}) . _Default . _Coerce;
-
--- | The name of the filter. Filter names are case-sensitive.
-fName :: Lens' Filter Text
-fName = lens _fName (\ s a -> s{_fName = a});
-
-instance Hashable Filter
-
-instance NFData Filter
-
-instance ToQuery Filter where
-        toQuery Filter'{..}
-          = mconcat
-              [toQuery (toQueryList "Value" <$> _fValues),
-               "Name" =: _fName]
-
--- | Describes a flow log.
---
---
---
--- /See:/ 'flowLog' smart constructor.
-data FlowLog = FlowLog'
-    { _flCreationTime             :: !(Maybe ISO8601)
-    , _flResourceId               :: !(Maybe Text)
-    , _flFlowLogStatus            :: !(Maybe Text)
-    , _flTrafficType              :: !(Maybe TrafficType)
-    , _flDeliverLogsStatus        :: !(Maybe Text)
-    , _flDeliverLogsErrorMessage  :: !(Maybe Text)
-    , _flLogGroupName             :: !(Maybe Text)
-    , _flDeliverLogsPermissionARN :: !(Maybe Text)
-    , _flFlowLogId                :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FlowLog' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'flCreationTime' - The date and time the flow log was created.
---
--- * 'flResourceId' - The ID of the resource on which the flow log was created.
---
--- * 'flFlowLogStatus' - The status of the flow log (@ACTIVE@ ).
---
--- * 'flTrafficType' - The type of traffic captured for the flow log.
---
--- * 'flDeliverLogsStatus' - The status of the logs delivery (@SUCCESS@ | @FAILED@ ).
---
--- * 'flDeliverLogsErrorMessage' - Information about the error that occurred. @Rate limited@ indicates that CloudWatch logs throttling has been applied for one or more network interfaces, or that you've reached the limit on the number of CloudWatch Logs log groups that you can create. @Access error@ indicates that the IAM role associated with the flow log does not have sufficient permissions to publish to CloudWatch Logs. @Unknown error@ indicates an internal error.
---
--- * 'flLogGroupName' - The name of the flow log group.
---
--- * 'flDeliverLogsPermissionARN' - The ARN of the IAM role that posts logs to CloudWatch Logs.
---
--- * 'flFlowLogId' - The flow log ID.
-flowLog
-    :: FlowLog
-flowLog =
-    FlowLog'
-    { _flCreationTime = Nothing
-    , _flResourceId = Nothing
-    , _flFlowLogStatus = Nothing
-    , _flTrafficType = Nothing
-    , _flDeliverLogsStatus = Nothing
-    , _flDeliverLogsErrorMessage = Nothing
-    , _flLogGroupName = Nothing
-    , _flDeliverLogsPermissionARN = Nothing
-    , _flFlowLogId = Nothing
-    }
-
--- | The date and time the flow log was created.
-flCreationTime :: Lens' FlowLog (Maybe UTCTime)
-flCreationTime = lens _flCreationTime (\ s a -> s{_flCreationTime = a}) . mapping _Time;
-
--- | The ID of the resource on which the flow log was created.
-flResourceId :: Lens' FlowLog (Maybe Text)
-flResourceId = lens _flResourceId (\ s a -> s{_flResourceId = a});
-
--- | The status of the flow log (@ACTIVE@ ).
-flFlowLogStatus :: Lens' FlowLog (Maybe Text)
-flFlowLogStatus = lens _flFlowLogStatus (\ s a -> s{_flFlowLogStatus = a});
-
--- | The type of traffic captured for the flow log.
-flTrafficType :: Lens' FlowLog (Maybe TrafficType)
-flTrafficType = lens _flTrafficType (\ s a -> s{_flTrafficType = a});
-
--- | The status of the logs delivery (@SUCCESS@ | @FAILED@ ).
-flDeliverLogsStatus :: Lens' FlowLog (Maybe Text)
-flDeliverLogsStatus = lens _flDeliverLogsStatus (\ s a -> s{_flDeliverLogsStatus = a});
-
--- | Information about the error that occurred. @Rate limited@ indicates that CloudWatch logs throttling has been applied for one or more network interfaces, or that you've reached the limit on the number of CloudWatch Logs log groups that you can create. @Access error@ indicates that the IAM role associated with the flow log does not have sufficient permissions to publish to CloudWatch Logs. @Unknown error@ indicates an internal error.
-flDeliverLogsErrorMessage :: Lens' FlowLog (Maybe Text)
-flDeliverLogsErrorMessage = lens _flDeliverLogsErrorMessage (\ s a -> s{_flDeliverLogsErrorMessage = a});
-
--- | The name of the flow log group.
-flLogGroupName :: Lens' FlowLog (Maybe Text)
-flLogGroupName = lens _flLogGroupName (\ s a -> s{_flLogGroupName = a});
-
--- | The ARN of the IAM role that posts logs to CloudWatch Logs.
-flDeliverLogsPermissionARN :: Lens' FlowLog (Maybe Text)
-flDeliverLogsPermissionARN = lens _flDeliverLogsPermissionARN (\ s a -> s{_flDeliverLogsPermissionARN = a});
-
--- | The flow log ID.
-flFlowLogId :: Lens' FlowLog (Maybe Text)
-flFlowLogId = lens _flFlowLogId (\ s a -> s{_flFlowLogId = a});
-
-instance FromXML FlowLog where
-        parseXML x
-          = FlowLog' <$>
-              (x .@? "creationTime") <*> (x .@? "resourceId") <*>
-                (x .@? "flowLogStatus")
-                <*> (x .@? "trafficType")
-                <*> (x .@? "deliverLogsStatus")
-                <*> (x .@? "deliverLogsErrorMessage")
-                <*> (x .@? "logGroupName")
-                <*> (x .@? "deliverLogsPermissionArn")
-                <*> (x .@? "flowLogId")
-
-instance Hashable FlowLog
-
-instance NFData FlowLog
-
--- | Describes a security group.
---
---
---
--- /See:/ 'groupIdentifier' smart constructor.
-data GroupIdentifier = GroupIdentifier'
-    { _giGroupId   :: !(Maybe Text)
-    , _giGroupName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GroupIdentifier' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'giGroupId' - The ID of the security group.
---
--- * 'giGroupName' - The name of the security group.
-groupIdentifier
-    :: GroupIdentifier
-groupIdentifier =
-    GroupIdentifier'
-    { _giGroupId = Nothing
-    , _giGroupName = Nothing
-    }
-
--- | The ID of the security group.
-giGroupId :: Lens' GroupIdentifier (Maybe Text)
-giGroupId = lens _giGroupId (\ s a -> s{_giGroupId = a});
-
--- | The name of the security group.
-giGroupName :: Lens' GroupIdentifier (Maybe Text)
-giGroupName = lens _giGroupName (\ s a -> s{_giGroupName = a});
-
-instance FromXML GroupIdentifier where
-        parseXML x
-          = GroupIdentifier' <$>
-              (x .@? "groupId") <*> (x .@? "groupName")
-
-instance Hashable GroupIdentifier
-
-instance NFData GroupIdentifier
-
-instance ToQuery GroupIdentifier where
-        toQuery GroupIdentifier'{..}
-          = mconcat
-              ["GroupId" =: _giGroupId,
-               "GroupName" =: _giGroupName]
-
--- | Describes an event in the history of the Spot fleet request.
---
---
---
--- /See:/ 'historyRecord' smart constructor.
-data HistoryRecord = HistoryRecord'
-    { _hrTimestamp        :: !ISO8601
-    , _hrEventType        :: !EventType
-    , _hrEventInformation :: !EventInformation
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HistoryRecord' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hrTimestamp' - The date and time of the event, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
---
--- * 'hrEventType' - The event type.     * @error@ - Indicates an error with the Spot fleet request.     * @fleetRequestChange@ - Indicates a change in the status or configuration of the Spot fleet request.     * @instanceChange@ - Indicates that an instance was launched or terminated.
---
--- * 'hrEventInformation' - Information about the event.
-historyRecord
-    :: UTCTime -- ^ 'hrTimestamp'
-    -> EventType -- ^ 'hrEventType'
-    -> EventInformation -- ^ 'hrEventInformation'
-    -> HistoryRecord
-historyRecord pTimestamp_ pEventType_ pEventInformation_ =
-    HistoryRecord'
-    { _hrTimestamp = _Time # pTimestamp_
-    , _hrEventType = pEventType_
-    , _hrEventInformation = pEventInformation_
-    }
-
--- | The date and time of the event, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-hrTimestamp :: Lens' HistoryRecord UTCTime
-hrTimestamp = lens _hrTimestamp (\ s a -> s{_hrTimestamp = a}) . _Time;
-
--- | The event type.     * @error@ - Indicates an error with the Spot fleet request.     * @fleetRequestChange@ - Indicates a change in the status or configuration of the Spot fleet request.     * @instanceChange@ - Indicates that an instance was launched or terminated.
-hrEventType :: Lens' HistoryRecord EventType
-hrEventType = lens _hrEventType (\ s a -> s{_hrEventType = a});
-
--- | Information about the event.
-hrEventInformation :: Lens' HistoryRecord EventInformation
-hrEventInformation = lens _hrEventInformation (\ s a -> s{_hrEventInformation = a});
-
-instance FromXML HistoryRecord where
-        parseXML x
-          = HistoryRecord' <$>
-              (x .@ "timestamp") <*> (x .@ "eventType") <*>
-                (x .@ "eventInformation")
-
-instance Hashable HistoryRecord
-
-instance NFData HistoryRecord
-
--- | Describes the properties of the Dedicated Host.
---
---
---
--- /See:/ 'host' smart constructor.
-data Host = Host'
-    { _hState             :: !(Maybe AllocationState)
-    , _hClientToken       :: !(Maybe Text)
-    , _hHostId            :: !(Maybe Text)
-    , _hAvailableCapacity :: !(Maybe AvailableCapacity)
-    , _hHostReservationId :: !(Maybe Text)
-    , _hHostProperties    :: !(Maybe HostProperties)
-    , _hAvailabilityZone  :: !(Maybe Text)
-    , _hInstances         :: !(Maybe [HostInstance])
-    , _hAutoPlacement     :: !(Maybe AutoPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Host' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hState' - The Dedicated Host's state.
---
--- * 'hClientToken' - Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'hHostId' - The ID of the Dedicated Host.
---
--- * 'hAvailableCapacity' - The number of new instances that can be launched onto the Dedicated Host.
---
--- * 'hHostReservationId' - The reservation ID of the Dedicated Host. This returns a @null@ response if the Dedicated Host doesn't have an associated reservation.
---
--- * 'hHostProperties' - The hardware specifications of the Dedicated Host.
---
--- * 'hAvailabilityZone' - The Availability Zone of the Dedicated Host.
---
--- * 'hInstances' - The IDs and instance type that are currently running on the Dedicated Host.
---
--- * 'hAutoPlacement' - Whether auto-placement is on or off.
-host
-    :: Host
-host =
-    Host'
-    { _hState = Nothing
-    , _hClientToken = Nothing
-    , _hHostId = Nothing
-    , _hAvailableCapacity = Nothing
-    , _hHostReservationId = Nothing
-    , _hHostProperties = Nothing
-    , _hAvailabilityZone = Nothing
-    , _hInstances = Nothing
-    , _hAutoPlacement = Nothing
-    }
-
--- | The Dedicated Host's state.
-hState :: Lens' Host (Maybe AllocationState)
-hState = lens _hState (\ s a -> s{_hState = a});
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of the request. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency> in the /Amazon Elastic Compute Cloud User Guide/ .
-hClientToken :: Lens' Host (Maybe Text)
-hClientToken = lens _hClientToken (\ s a -> s{_hClientToken = a});
-
--- | The ID of the Dedicated Host.
-hHostId :: Lens' Host (Maybe Text)
-hHostId = lens _hHostId (\ s a -> s{_hHostId = a});
-
--- | The number of new instances that can be launched onto the Dedicated Host.
-hAvailableCapacity :: Lens' Host (Maybe AvailableCapacity)
-hAvailableCapacity = lens _hAvailableCapacity (\ s a -> s{_hAvailableCapacity = a});
-
--- | The reservation ID of the Dedicated Host. This returns a @null@ response if the Dedicated Host doesn't have an associated reservation.
-hHostReservationId :: Lens' Host (Maybe Text)
-hHostReservationId = lens _hHostReservationId (\ s a -> s{_hHostReservationId = a});
-
--- | The hardware specifications of the Dedicated Host.
-hHostProperties :: Lens' Host (Maybe HostProperties)
-hHostProperties = lens _hHostProperties (\ s a -> s{_hHostProperties = a});
-
--- | The Availability Zone of the Dedicated Host.
-hAvailabilityZone :: Lens' Host (Maybe Text)
-hAvailabilityZone = lens _hAvailabilityZone (\ s a -> s{_hAvailabilityZone = a});
-
--- | The IDs and instance type that are currently running on the Dedicated Host.
-hInstances :: Lens' Host [HostInstance]
-hInstances = lens _hInstances (\ s a -> s{_hInstances = a}) . _Default . _Coerce;
-
--- | Whether auto-placement is on or off.
-hAutoPlacement :: Lens' Host (Maybe AutoPlacement)
-hAutoPlacement = lens _hAutoPlacement (\ s a -> s{_hAutoPlacement = a});
-
-instance FromXML Host where
-        parseXML x
-          = Host' <$>
-              (x .@? "state") <*> (x .@? "clientToken") <*>
-                (x .@? "hostId")
-                <*> (x .@? "availableCapacity")
-                <*> (x .@? "hostReservationId")
-                <*> (x .@? "hostProperties")
-                <*> (x .@? "availabilityZone")
-                <*>
-                (x .@? "instances" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "autoPlacement")
-
-instance Hashable Host
-
-instance NFData Host
-
--- | Describes an instance running on a Dedicated Host.
---
---
---
--- /See:/ 'hostInstance' smart constructor.
-data HostInstance = HostInstance'
-    { _hiInstanceId   :: !(Maybe Text)
-    , _hiInstanceType :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hiInstanceId' - the IDs of instances that are running on the Dedicated Host.
---
--- * 'hiInstanceType' - The instance type size (for example, @m3.medium@ ) of the running instance.
-hostInstance
-    :: HostInstance
-hostInstance =
-    HostInstance'
-    { _hiInstanceId = Nothing
-    , _hiInstanceType = Nothing
-    }
-
--- | the IDs of instances that are running on the Dedicated Host.
-hiInstanceId :: Lens' HostInstance (Maybe Text)
-hiInstanceId = lens _hiInstanceId (\ s a -> s{_hiInstanceId = a});
-
--- | The instance type size (for example, @m3.medium@ ) of the running instance.
-hiInstanceType :: Lens' HostInstance (Maybe Text)
-hiInstanceType = lens _hiInstanceType (\ s a -> s{_hiInstanceType = a});
-
-instance FromXML HostInstance where
-        parseXML x
-          = HostInstance' <$>
-              (x .@? "instanceId") <*> (x .@? "instanceType")
-
-instance Hashable HostInstance
-
-instance NFData HostInstance
-
--- | Details about the Dedicated Host Reservation offering.
---
---
---
--- /See:/ 'hostOffering' smart constructor.
-data HostOffering = HostOffering'
-    { _hoInstanceFamily :: !(Maybe Text)
-    , _hoCurrencyCode   :: !(Maybe CurrencyCodeValues)
-    , _hoHourlyPrice    :: !(Maybe Text)
-    , _hoUpfrontPrice   :: !(Maybe Text)
-    , _hoOfferingId     :: !(Maybe Text)
-    , _hoDuration       :: !(Maybe Int)
-    , _hoPaymentOption  :: !(Maybe PaymentOption)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostOffering' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hoInstanceFamily' - The instance family of the offering.
---
--- * 'hoCurrencyCode' - The currency of the offering.
---
--- * 'hoHourlyPrice' - The hourly price of the offering.
---
--- * 'hoUpfrontPrice' - The upfront price of the offering. Does not apply to No Upfront offerings.
---
--- * 'hoOfferingId' - The ID of the offering.
---
--- * 'hoDuration' - The duration of the offering (in seconds).
---
--- * 'hoPaymentOption' - The available payment option.
-hostOffering
-    :: HostOffering
-hostOffering =
-    HostOffering'
-    { _hoInstanceFamily = Nothing
-    , _hoCurrencyCode = Nothing
-    , _hoHourlyPrice = Nothing
-    , _hoUpfrontPrice = Nothing
-    , _hoOfferingId = Nothing
-    , _hoDuration = Nothing
-    , _hoPaymentOption = Nothing
-    }
-
--- | The instance family of the offering.
-hoInstanceFamily :: Lens' HostOffering (Maybe Text)
-hoInstanceFamily = lens _hoInstanceFamily (\ s a -> s{_hoInstanceFamily = a});
-
--- | The currency of the offering.
-hoCurrencyCode :: Lens' HostOffering (Maybe CurrencyCodeValues)
-hoCurrencyCode = lens _hoCurrencyCode (\ s a -> s{_hoCurrencyCode = a});
-
--- | The hourly price of the offering.
-hoHourlyPrice :: Lens' HostOffering (Maybe Text)
-hoHourlyPrice = lens _hoHourlyPrice (\ s a -> s{_hoHourlyPrice = a});
-
--- | The upfront price of the offering. Does not apply to No Upfront offerings.
-hoUpfrontPrice :: Lens' HostOffering (Maybe Text)
-hoUpfrontPrice = lens _hoUpfrontPrice (\ s a -> s{_hoUpfrontPrice = a});
-
--- | The ID of the offering.
-hoOfferingId :: Lens' HostOffering (Maybe Text)
-hoOfferingId = lens _hoOfferingId (\ s a -> s{_hoOfferingId = a});
-
--- | The duration of the offering (in seconds).
-hoDuration :: Lens' HostOffering (Maybe Int)
-hoDuration = lens _hoDuration (\ s a -> s{_hoDuration = a});
-
--- | The available payment option.
-hoPaymentOption :: Lens' HostOffering (Maybe PaymentOption)
-hoPaymentOption = lens _hoPaymentOption (\ s a -> s{_hoPaymentOption = a});
-
-instance FromXML HostOffering where
-        parseXML x
-          = HostOffering' <$>
-              (x .@? "instanceFamily") <*> (x .@? "currencyCode")
-                <*> (x .@? "hourlyPrice")
-                <*> (x .@? "upfrontPrice")
-                <*> (x .@? "offeringId")
-                <*> (x .@? "duration")
-                <*> (x .@? "paymentOption")
-
-instance Hashable HostOffering
-
-instance NFData HostOffering
-
--- | Describes properties of a Dedicated Host.
---
---
---
--- /See:/ 'hostProperties' smart constructor.
-data HostProperties = HostProperties'
-    { _hpInstanceType :: !(Maybe Text)
-    , _hpTotalVCPUs   :: !(Maybe Int)
-    , _hpCores        :: !(Maybe Int)
-    , _hpSockets      :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hpInstanceType' - The instance type size that the Dedicated Host supports (for example, @m3.medium@ ).
---
--- * 'hpTotalVCPUs' - The number of vCPUs on the Dedicated Host.
---
--- * 'hpCores' - The number of cores on the Dedicated Host.
---
--- * 'hpSockets' - The number of sockets on the Dedicated Host.
-hostProperties
-    :: HostProperties
-hostProperties =
-    HostProperties'
-    { _hpInstanceType = Nothing
-    , _hpTotalVCPUs = Nothing
-    , _hpCores = Nothing
-    , _hpSockets = Nothing
-    }
-
--- | The instance type size that the Dedicated Host supports (for example, @m3.medium@ ).
-hpInstanceType :: Lens' HostProperties (Maybe Text)
-hpInstanceType = lens _hpInstanceType (\ s a -> s{_hpInstanceType = a});
-
--- | The number of vCPUs on the Dedicated Host.
-hpTotalVCPUs :: Lens' HostProperties (Maybe Int)
-hpTotalVCPUs = lens _hpTotalVCPUs (\ s a -> s{_hpTotalVCPUs = a});
-
--- | The number of cores on the Dedicated Host.
-hpCores :: Lens' HostProperties (Maybe Int)
-hpCores = lens _hpCores (\ s a -> s{_hpCores = a});
-
--- | The number of sockets on the Dedicated Host.
-hpSockets :: Lens' HostProperties (Maybe Int)
-hpSockets = lens _hpSockets (\ s a -> s{_hpSockets = a});
-
-instance FromXML HostProperties where
-        parseXML x
-          = HostProperties' <$>
-              (x .@? "instanceType") <*> (x .@? "totalVCpus") <*>
-                (x .@? "cores")
-                <*> (x .@? "sockets")
-
-instance Hashable HostProperties
-
-instance NFData HostProperties
-
--- | Details about the Dedicated Host Reservation and associated Dedicated Hosts.
---
---
---
--- /See:/ 'hostReservation' smart constructor.
-data HostReservation = HostReservation'
-    { _hrState             :: !(Maybe ReservationState)
-    , _hrInstanceFamily    :: !(Maybe Text)
-    , _hrCurrencyCode      :: !(Maybe CurrencyCodeValues)
-    , _hrHostReservationId :: !(Maybe Text)
-    , _hrStart             :: !(Maybe ISO8601)
-    , _hrHourlyPrice       :: !(Maybe Text)
-    , _hrCount             :: !(Maybe Int)
-    , _hrUpfrontPrice      :: !(Maybe Text)
-    , _hrEnd               :: !(Maybe ISO8601)
-    , _hrHostIdSet         :: !(Maybe [Text])
-    , _hrOfferingId        :: !(Maybe Text)
-    , _hrDuration          :: !(Maybe Int)
-    , _hrPaymentOption     :: !(Maybe PaymentOption)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostReservation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hrState' - The state of the reservation.
---
--- * 'hrInstanceFamily' - The instance family of the Dedicated Host Reservation. The instance family on the Dedicated Host must be the same in order for it to benefit from the reservation.
---
--- * 'hrCurrencyCode' - The currency in which the @upfrontPrice@ and @hourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
---
--- * 'hrHostReservationId' - The ID of the reservation that specifies the associated Dedicated Hosts.
---
--- * 'hrStart' - The date and time that the reservation started.
---
--- * 'hrHourlyPrice' - The hourly price of the reservation.
---
--- * 'hrCount' - The number of Dedicated Hosts the reservation is associated with.
---
--- * 'hrUpfrontPrice' - The upfront price of the reservation.
---
--- * 'hrEnd' - The date and time that the reservation ends.
---
--- * 'hrHostIdSet' - The IDs of the Dedicated Hosts associated with the reservation.
---
--- * 'hrOfferingId' - The ID of the reservation. This remains the same regardless of which Dedicated Hosts are associated with it.
---
--- * 'hrDuration' - The length of the reservation's term, specified in seconds. Can be @31536000 (1 year)@ | @94608000 (3 years)@ .
---
--- * 'hrPaymentOption' - The payment option selected for this reservation.
-hostReservation
-    :: HostReservation
-hostReservation =
-    HostReservation'
-    { _hrState = Nothing
-    , _hrInstanceFamily = Nothing
-    , _hrCurrencyCode = Nothing
-    , _hrHostReservationId = Nothing
-    , _hrStart = Nothing
-    , _hrHourlyPrice = Nothing
-    , _hrCount = Nothing
-    , _hrUpfrontPrice = Nothing
-    , _hrEnd = Nothing
-    , _hrHostIdSet = Nothing
-    , _hrOfferingId = Nothing
-    , _hrDuration = Nothing
-    , _hrPaymentOption = Nothing
-    }
-
--- | The state of the reservation.
-hrState :: Lens' HostReservation (Maybe ReservationState)
-hrState = lens _hrState (\ s a -> s{_hrState = a});
-
--- | The instance family of the Dedicated Host Reservation. The instance family on the Dedicated Host must be the same in order for it to benefit from the reservation.
-hrInstanceFamily :: Lens' HostReservation (Maybe Text)
-hrInstanceFamily = lens _hrInstanceFamily (\ s a -> s{_hrInstanceFamily = a});
-
--- | The currency in which the @upfrontPrice@ and @hourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
-hrCurrencyCode :: Lens' HostReservation (Maybe CurrencyCodeValues)
-hrCurrencyCode = lens _hrCurrencyCode (\ s a -> s{_hrCurrencyCode = a});
-
--- | The ID of the reservation that specifies the associated Dedicated Hosts.
-hrHostReservationId :: Lens' HostReservation (Maybe Text)
-hrHostReservationId = lens _hrHostReservationId (\ s a -> s{_hrHostReservationId = a});
-
--- | The date and time that the reservation started.
-hrStart :: Lens' HostReservation (Maybe UTCTime)
-hrStart = lens _hrStart (\ s a -> s{_hrStart = a}) . mapping _Time;
-
--- | The hourly price of the reservation.
-hrHourlyPrice :: Lens' HostReservation (Maybe Text)
-hrHourlyPrice = lens _hrHourlyPrice (\ s a -> s{_hrHourlyPrice = a});
-
--- | The number of Dedicated Hosts the reservation is associated with.
-hrCount :: Lens' HostReservation (Maybe Int)
-hrCount = lens _hrCount (\ s a -> s{_hrCount = a});
-
--- | The upfront price of the reservation.
-hrUpfrontPrice :: Lens' HostReservation (Maybe Text)
-hrUpfrontPrice = lens _hrUpfrontPrice (\ s a -> s{_hrUpfrontPrice = a});
-
--- | The date and time that the reservation ends.
-hrEnd :: Lens' HostReservation (Maybe UTCTime)
-hrEnd = lens _hrEnd (\ s a -> s{_hrEnd = a}) . mapping _Time;
-
--- | The IDs of the Dedicated Hosts associated with the reservation.
-hrHostIdSet :: Lens' HostReservation [Text]
-hrHostIdSet = lens _hrHostIdSet (\ s a -> s{_hrHostIdSet = a}) . _Default . _Coerce;
-
--- | The ID of the reservation. This remains the same regardless of which Dedicated Hosts are associated with it.
-hrOfferingId :: Lens' HostReservation (Maybe Text)
-hrOfferingId = lens _hrOfferingId (\ s a -> s{_hrOfferingId = a});
-
--- | The length of the reservation's term, specified in seconds. Can be @31536000 (1 year)@ | @94608000 (3 years)@ .
-hrDuration :: Lens' HostReservation (Maybe Int)
-hrDuration = lens _hrDuration (\ s a -> s{_hrDuration = a});
-
--- | The payment option selected for this reservation.
-hrPaymentOption :: Lens' HostReservation (Maybe PaymentOption)
-hrPaymentOption = lens _hrPaymentOption (\ s a -> s{_hrPaymentOption = a});
-
-instance FromXML HostReservation where
-        parseXML x
-          = HostReservation' <$>
-              (x .@? "state") <*> (x .@? "instanceFamily") <*>
-                (x .@? "currencyCode")
-                <*> (x .@? "hostReservationId")
-                <*> (x .@? "start")
-                <*> (x .@? "hourlyPrice")
-                <*> (x .@? "count")
-                <*> (x .@? "upfrontPrice")
-                <*> (x .@? "end")
-                <*>
-                (x .@? "hostIdSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "offeringId")
-                <*> (x .@? "duration")
-                <*> (x .@? "paymentOption")
-
-instance Hashable HostReservation
-
-instance NFData HostReservation
-
--- | Describes an IAM instance profile.
---
---
---
--- /See:/ 'iamInstanceProfile' smart constructor.
-data IAMInstanceProfile = IAMInstanceProfile'
-    { _iapARN :: !(Maybe Text)
-    , _iapId  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IAMInstanceProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iapARN' - The Amazon Resource Name (ARN) of the instance profile.
---
--- * 'iapId' - The ID of the instance profile.
-iamInstanceProfile
-    :: IAMInstanceProfile
-iamInstanceProfile =
-    IAMInstanceProfile'
-    { _iapARN = Nothing
-    , _iapId = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the instance profile.
-iapARN :: Lens' IAMInstanceProfile (Maybe Text)
-iapARN = lens _iapARN (\ s a -> s{_iapARN = a});
-
--- | The ID of the instance profile.
-iapId :: Lens' IAMInstanceProfile (Maybe Text)
-iapId = lens _iapId (\ s a -> s{_iapId = a});
-
-instance FromXML IAMInstanceProfile where
-        parseXML x
-          = IAMInstanceProfile' <$>
-              (x .@? "arn") <*> (x .@? "id")
-
-instance Hashable IAMInstanceProfile
-
-instance NFData IAMInstanceProfile
-
--- | Describes an IAM instance profile.
---
---
---
--- /See:/ 'iamInstanceProfileSpecification' smart constructor.
-data IAMInstanceProfileSpecification = IAMInstanceProfileSpecification'
-    { _iapsARN  :: !(Maybe Text)
-    , _iapsName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IAMInstanceProfileSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iapsARN' - The Amazon Resource Name (ARN) of the instance profile.
---
--- * 'iapsName' - The name of the instance profile.
-iamInstanceProfileSpecification
-    :: IAMInstanceProfileSpecification
-iamInstanceProfileSpecification =
-    IAMInstanceProfileSpecification'
-    { _iapsARN = Nothing
-    , _iapsName = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the instance profile.
-iapsARN :: Lens' IAMInstanceProfileSpecification (Maybe Text)
-iapsARN = lens _iapsARN (\ s a -> s{_iapsARN = a});
-
--- | The name of the instance profile.
-iapsName :: Lens' IAMInstanceProfileSpecification (Maybe Text)
-iapsName = lens _iapsName (\ s a -> s{_iapsName = a});
-
-instance FromXML IAMInstanceProfileSpecification
-         where
-        parseXML x
-          = IAMInstanceProfileSpecification' <$>
-              (x .@? "arn") <*> (x .@? "name")
-
-instance Hashable IAMInstanceProfileSpecification
-
-instance NFData IAMInstanceProfileSpecification
-
-instance ToQuery IAMInstanceProfileSpecification
-         where
-        toQuery IAMInstanceProfileSpecification'{..}
-          = mconcat ["Arn" =: _iapsARN, "Name" =: _iapsName]
-
--- | Describes the ICMP type and code.
---
---
---
--- /See:/ 'icmpTypeCode' smart constructor.
-data ICMPTypeCode = ICMPTypeCode'
-    { _itcCode :: !(Maybe Int)
-    , _itcType :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ICMPTypeCode' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'itcCode' - The ICMP code. A value of -1 means all codes for the specified ICMP type.
---
--- * 'itcType' - The ICMP type. A value of -1 means all types.
-icmpTypeCode
-    :: ICMPTypeCode
-icmpTypeCode =
-    ICMPTypeCode'
-    { _itcCode = Nothing
-    , _itcType = Nothing
-    }
-
--- | The ICMP code. A value of -1 means all codes for the specified ICMP type.
-itcCode :: Lens' ICMPTypeCode (Maybe Int)
-itcCode = lens _itcCode (\ s a -> s{_itcCode = a});
-
--- | The ICMP type. A value of -1 means all types.
-itcType :: Lens' ICMPTypeCode (Maybe Int)
-itcType = lens _itcType (\ s a -> s{_itcType = a});
-
-instance FromXML ICMPTypeCode where
-        parseXML x
-          = ICMPTypeCode' <$> (x .@? "code") <*> (x .@? "type")
-
-instance Hashable ICMPTypeCode
-
-instance NFData ICMPTypeCode
-
-instance ToQuery ICMPTypeCode where
-        toQuery ICMPTypeCode'{..}
-          = mconcat ["Code" =: _itcCode, "Type" =: _itcType]
-
--- | Describes a security group rule.
---
---
---
--- /See:/ 'ipPermission' smart constructor.
-data IPPermission = IPPermission'
-    { _ipFromPort         :: !(Maybe Int)
-    , _ipUserIdGroupPairs :: !(Maybe [UserIdGroupPair])
-    , _ipPrefixListIds    :: !(Maybe [PrefixListId])
-    , _ipToPort           :: !(Maybe Int)
-    , _ipIPv6Ranges       :: !(Maybe [IPv6Range])
-    , _ipIPRanges         :: !(Maybe [IPRange])
-    , _ipIPProtocol       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IPPermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipFromPort' - The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. A value of @-1@ indicates all ICMP/ICMPv6 types.
---
--- * 'ipUserIdGroupPairs' - One or more security group and AWS account ID pairs.
---
--- * 'ipPrefixListIds' - (Valid for 'AuthorizeSecurityGroupEgress' , 'RevokeSecurityGroupEgress' and 'DescribeSecurityGroups' only) One or more prefix list IDs for an AWS service. In an 'AuthorizeSecurityGroupEgress' request, this is the AWS service that you want to access through a VPC endpoint from instances associated with the security group.
---
--- * 'ipToPort' - The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. A value of @-1@ indicates all ICMP/ICMPv6 codes for the specified ICMP type.
---
--- * 'ipIPv6Ranges' - [EC2-VPC only] One or more IPv6 ranges.
---
--- * 'ipIPRanges' - One or more IPv4 ranges.
---
--- * 'ipIPProtocol' - The IP protocol name (@tcp@ , @udp@ , @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers> ).  [EC2-VPC only] Use @-1@ to specify all protocols. When authorizing security group rules, specifying @-1@ or a protocol number other than @tcp@ , @udp@ , @icmp@ , or @58@ (ICMPv6) allows traffic on all ports, regardless of any port range you specify. For @tcp@ , @udp@ , and @icmp@ , you must specify a port range. For @58@ (ICMPv6), you can optionally specify a port range; if you don't, traffic for all types and codes is allowed when authorizing rules.
-ipPermission
-    :: Text -- ^ 'ipIPProtocol'
-    -> IPPermission
-ipPermission pIPProtocol_ =
-    IPPermission'
-    { _ipFromPort = Nothing
-    , _ipUserIdGroupPairs = Nothing
-    , _ipPrefixListIds = Nothing
-    , _ipToPort = Nothing
-    , _ipIPv6Ranges = Nothing
-    , _ipIPRanges = Nothing
-    , _ipIPProtocol = pIPProtocol_
-    }
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 type number. A value of @-1@ indicates all ICMP/ICMPv6 types.
-ipFromPort :: Lens' IPPermission (Maybe Int)
-ipFromPort = lens _ipFromPort (\ s a -> s{_ipFromPort = a});
-
--- | One or more security group and AWS account ID pairs.
-ipUserIdGroupPairs :: Lens' IPPermission [UserIdGroupPair]
-ipUserIdGroupPairs = lens _ipUserIdGroupPairs (\ s a -> s{_ipUserIdGroupPairs = a}) . _Default . _Coerce;
-
--- | (Valid for 'AuthorizeSecurityGroupEgress' , 'RevokeSecurityGroupEgress' and 'DescribeSecurityGroups' only) One or more prefix list IDs for an AWS service. In an 'AuthorizeSecurityGroupEgress' request, this is the AWS service that you want to access through a VPC endpoint from instances associated with the security group.
-ipPrefixListIds :: Lens' IPPermission [PrefixListId]
-ipPrefixListIds = lens _ipPrefixListIds (\ s a -> s{_ipPrefixListIds = a}) . _Default . _Coerce;
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP/ICMPv6 code. A value of @-1@ indicates all ICMP/ICMPv6 codes for the specified ICMP type.
-ipToPort :: Lens' IPPermission (Maybe Int)
-ipToPort = lens _ipToPort (\ s a -> s{_ipToPort = a});
-
--- | [EC2-VPC only] One or more IPv6 ranges.
-ipIPv6Ranges :: Lens' IPPermission [IPv6Range]
-ipIPv6Ranges = lens _ipIPv6Ranges (\ s a -> s{_ipIPv6Ranges = a}) . _Default . _Coerce;
-
--- | One or more IPv4 ranges.
-ipIPRanges :: Lens' IPPermission [IPRange]
-ipIPRanges = lens _ipIPRanges (\ s a -> s{_ipIPRanges = a}) . _Default . _Coerce;
-
--- | The IP protocol name (@tcp@ , @udp@ , @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers> ).  [EC2-VPC only] Use @-1@ to specify all protocols. When authorizing security group rules, specifying @-1@ or a protocol number other than @tcp@ , @udp@ , @icmp@ , or @58@ (ICMPv6) allows traffic on all ports, regardless of any port range you specify. For @tcp@ , @udp@ , and @icmp@ , you must specify a port range. For @58@ (ICMPv6), you can optionally specify a port range; if you don't, traffic for all types and codes is allowed when authorizing rules.
-ipIPProtocol :: Lens' IPPermission Text
-ipIPProtocol = lens _ipIPProtocol (\ s a -> s{_ipIPProtocol = a});
-
-instance FromXML IPPermission where
-        parseXML x
-          = IPPermission' <$>
-              (x .@? "fromPort") <*>
-                (x .@? "groups" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "prefixListIds" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "toPort")
-                <*>
-                (x .@? "ipv6Ranges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "ipRanges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "ipProtocol")
-
-instance Hashable IPPermission
-
-instance NFData IPPermission
-
-instance ToQuery IPPermission where
-        toQuery IPPermission'{..}
-          = mconcat
-              ["FromPort" =: _ipFromPort,
-               toQuery
-                 (toQueryList "Groups" <$> _ipUserIdGroupPairs),
-               toQuery
-                 (toQueryList "PrefixListIds" <$> _ipPrefixListIds),
-               "ToPort" =: _ipToPort,
-               toQuery (toQueryList "Ipv6Ranges" <$> _ipIPv6Ranges),
-               toQuery (toQueryList "IpRanges" <$> _ipIPRanges),
-               "IpProtocol" =: _ipIPProtocol]
-
--- | Describes an IPv4 range.
---
---
---
--- /See:/ 'ipRange' smart constructor.
-newtype IPRange = IPRange'
-    { _irCidrIP :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IPRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'irCidrIP' - The IPv4 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv4 address, use the /32 prefix.
-ipRange
-    :: Text -- ^ 'irCidrIP'
-    -> IPRange
-ipRange pCidrIP_ =
-    IPRange'
-    { _irCidrIP = pCidrIP_
-    }
-
--- | The IPv4 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv4 address, use the /32 prefix.
-irCidrIP :: Lens' IPRange Text
-irCidrIP = lens _irCidrIP (\ s a -> s{_irCidrIP = a});
-
-instance FromXML IPRange where
-        parseXML x = IPRange' <$> (x .@ "cidrIp")
-
-instance Hashable IPRange
-
-instance NFData IPRange
-
-instance ToQuery IPRange where
-        toQuery IPRange'{..}
-          = mconcat ["CidrIp" =: _irCidrIP]
-
--- | Describes an IPv6 CIDR block.
---
---
---
--- /See:/ 'ipv6CidrBlock' smart constructor.
-newtype IPv6CidrBlock = IPv6CidrBlock'
-    { _icbIPv6CidrBlock :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IPv6CidrBlock' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icbIPv6CidrBlock' - The IPv6 CIDR block.
-ipv6CidrBlock
-    :: IPv6CidrBlock
-ipv6CidrBlock =
-    IPv6CidrBlock'
-    { _icbIPv6CidrBlock = Nothing
-    }
-
--- | The IPv6 CIDR block.
-icbIPv6CidrBlock :: Lens' IPv6CidrBlock (Maybe Text)
-icbIPv6CidrBlock = lens _icbIPv6CidrBlock (\ s a -> s{_icbIPv6CidrBlock = a});
-
-instance FromXML IPv6CidrBlock where
-        parseXML x
-          = IPv6CidrBlock' <$> (x .@? "ipv6CidrBlock")
-
-instance Hashable IPv6CidrBlock
-
-instance NFData IPv6CidrBlock
-
--- | [EC2-VPC only] Describes an IPv6 range.
---
---
---
--- /See:/ 'ipv6Range' smart constructor.
-newtype IPv6Range = IPv6Range'
-    { _irCidrIPv6 :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IPv6Range' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'irCidrIPv6' - The IPv6 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv6 address, use the /128 prefix.
-ipv6Range
-    :: IPv6Range
-ipv6Range =
-    IPv6Range'
-    { _irCidrIPv6 = Nothing
-    }
-
--- | The IPv6 CIDR range. You can either specify a CIDR range or a source security group, not both. To specify a single IPv6 address, use the /128 prefix.
-irCidrIPv6 :: Lens' IPv6Range (Maybe Text)
-irCidrIPv6 = lens _irCidrIPv6 (\ s a -> s{_irCidrIPv6 = a});
-
-instance FromXML IPv6Range where
-        parseXML x = IPv6Range' <$> (x .@? "cidrIpv6")
-
-instance Hashable IPv6Range
-
-instance NFData IPv6Range
-
-instance ToQuery IPv6Range where
-        toQuery IPv6Range'{..}
-          = mconcat ["CidrIpv6" =: _irCidrIPv6]
-
--- | Describes the ID format for a resource.
---
---
---
--- /See:/ 'idFormat' smart constructor.
-data IdFormat = IdFormat'
-    { _ifUseLongIds :: !(Maybe Bool)
-    , _ifDeadline   :: !(Maybe ISO8601)
-    , _ifResource   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IdFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ifUseLongIds' - Indicates whether longer IDs (17-character IDs) are enabled for the resource.
---
--- * 'ifDeadline' - The date in UTC at which you are permanently switched over to using longer IDs. If a deadline is not yet available for this resource type, this field is not returned.
---
--- * 'ifResource' - The type of resource.
-idFormat
-    :: IdFormat
-idFormat =
-    IdFormat'
-    { _ifUseLongIds = Nothing
-    , _ifDeadline = Nothing
-    , _ifResource = Nothing
-    }
-
--- | Indicates whether longer IDs (17-character IDs) are enabled for the resource.
-ifUseLongIds :: Lens' IdFormat (Maybe Bool)
-ifUseLongIds = lens _ifUseLongIds (\ s a -> s{_ifUseLongIds = a});
-
--- | The date in UTC at which you are permanently switched over to using longer IDs. If a deadline is not yet available for this resource type, this field is not returned.
-ifDeadline :: Lens' IdFormat (Maybe UTCTime)
-ifDeadline = lens _ifDeadline (\ s a -> s{_ifDeadline = a}) . mapping _Time;
-
--- | The type of resource.
-ifResource :: Lens' IdFormat (Maybe Text)
-ifResource = lens _ifResource (\ s a -> s{_ifResource = a});
-
-instance FromXML IdFormat where
-        parseXML x
-          = IdFormat' <$>
-              (x .@? "useLongIds") <*> (x .@? "deadline") <*>
-                (x .@? "resource")
-
-instance Hashable IdFormat
-
-instance NFData IdFormat
-
--- | Describes an image.
---
---
---
--- /See:/ 'image' smart constructor.
-data Image = Image'
-    { _iPlatform            :: !(Maybe PlatformValues)
-    , _iEnaSupport          :: !(Maybe Bool)
-    , _iImageOwnerAlias     :: !(Maybe Text)
-    , _iRAMDiskId           :: !(Maybe Text)
-    , _iKernelId            :: !(Maybe Text)
-    , _iRootDeviceName      :: !(Maybe Text)
-    , _iSRIOVNetSupport     :: !(Maybe Text)
-    , _iName                :: !(Maybe Text)
-    , _iCreationDate        :: !(Maybe Text)
-    , _iProductCodes        :: !(Maybe [ProductCode])
-    , _iStateReason         :: !(Maybe StateReason)
-    , _iDescription         :: !(Maybe Text)
-    , _iBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _iTags                :: !(Maybe [Tag])
-    , _iImageId             :: !Text
-    , _iImageLocation       :: !Text
-    , _iState               :: !ImageState
-    , _iOwnerId             :: !Text
-    , _iPublic              :: !Bool
-    , _iArchitecture        :: !ArchitectureValues
-    , _iImageType           :: !ImageTypeValues
-    , _iRootDeviceType      :: !DeviceType
-    , _iVirtualizationType  :: !VirtualizationType
-    , _iHypervisor          :: !HypervisorType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Image' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iPlatform' - The value is @Windows@ for Windows AMIs; otherwise blank.
---
--- * 'iEnaSupport' - Specifies whether enhanced networking with ENA is enabled.
---
--- * 'iImageOwnerAlias' - The AWS account alias (for example, @amazon@ , @self@ ) or the AWS account ID of the AMI owner.
---
--- * 'iRAMDiskId' - The RAM disk associated with the image, if any. Only applicable for machine images.
---
--- * 'iKernelId' - The kernel associated with the image, if any. Only applicable for machine images.
---
--- * 'iRootDeviceName' - The device name of the root device (for example, @/dev/sda1@ or @/dev/xvda@ ).
---
--- * 'iSRIOVNetSupport' - Specifies whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
---
--- * 'iName' - The name of the AMI that was provided during image creation.
---
--- * 'iCreationDate' - The date and time the image was created.
---
--- * 'iProductCodes' - Any product codes associated with the AMI.
---
--- * 'iStateReason' - The reason for the state change.
---
--- * 'iDescription' - The description of the AMI that was provided during image creation.
---
--- * 'iBlockDeviceMappings' - Any block device mapping entries.
---
--- * 'iTags' - Any tags assigned to the image.
---
--- * 'iImageId' - The ID of the AMI.
---
--- * 'iImageLocation' - The location of the AMI.
---
--- * 'iState' - The current state of the AMI. If the state is @available@ , the image is successfully registered and can be used to launch an instance.
---
--- * 'iOwnerId' - The AWS account ID of the image owner.
---
--- * 'iPublic' - Indicates whether the image has public launch permissions. The value is @true@ if this image has public launch permissions or @false@ if it has only implicit and explicit launch permissions.
---
--- * 'iArchitecture' - The architecture of the image.
---
--- * 'iImageType' - The type of image.
---
--- * 'iRootDeviceType' - The type of root device used by the AMI. The AMI can use an EBS volume or an instance store volume.
---
--- * 'iVirtualizationType' - The type of virtualization of the AMI.
---
--- * 'iHypervisor' - The hypervisor type of the image.
-image
-    :: Text -- ^ 'iImageId'
-    -> Text -- ^ 'iImageLocation'
-    -> ImageState -- ^ 'iState'
-    -> Text -- ^ 'iOwnerId'
-    -> Bool -- ^ 'iPublic'
-    -> ArchitectureValues -- ^ 'iArchitecture'
-    -> ImageTypeValues -- ^ 'iImageType'
-    -> DeviceType -- ^ 'iRootDeviceType'
-    -> VirtualizationType -- ^ 'iVirtualizationType'
-    -> HypervisorType -- ^ 'iHypervisor'
-    -> Image
-image pImageId_ pImageLocation_ pState_ pOwnerId_ pPublic_ pArchitecture_ pImageType_ pRootDeviceType_ pVirtualizationType_ pHypervisor_ =
-    Image'
-    { _iPlatform = Nothing
-    , _iEnaSupport = Nothing
-    , _iImageOwnerAlias = Nothing
-    , _iRAMDiskId = Nothing
-    , _iKernelId = Nothing
-    , _iRootDeviceName = Nothing
-    , _iSRIOVNetSupport = Nothing
-    , _iName = Nothing
-    , _iCreationDate = Nothing
-    , _iProductCodes = Nothing
-    , _iStateReason = Nothing
-    , _iDescription = Nothing
-    , _iBlockDeviceMappings = Nothing
-    , _iTags = Nothing
-    , _iImageId = pImageId_
-    , _iImageLocation = pImageLocation_
-    , _iState = pState_
-    , _iOwnerId = pOwnerId_
-    , _iPublic = pPublic_
-    , _iArchitecture = pArchitecture_
-    , _iImageType = pImageType_
-    , _iRootDeviceType = pRootDeviceType_
-    , _iVirtualizationType = pVirtualizationType_
-    , _iHypervisor = pHypervisor_
-    }
-
--- | The value is @Windows@ for Windows AMIs; otherwise blank.
-iPlatform :: Lens' Image (Maybe PlatformValues)
-iPlatform = lens _iPlatform (\ s a -> s{_iPlatform = a});
-
--- | Specifies whether enhanced networking with ENA is enabled.
-iEnaSupport :: Lens' Image (Maybe Bool)
-iEnaSupport = lens _iEnaSupport (\ s a -> s{_iEnaSupport = a});
-
--- | The AWS account alias (for example, @amazon@ , @self@ ) or the AWS account ID of the AMI owner.
-iImageOwnerAlias :: Lens' Image (Maybe Text)
-iImageOwnerAlias = lens _iImageOwnerAlias (\ s a -> s{_iImageOwnerAlias = a});
-
--- | The RAM disk associated with the image, if any. Only applicable for machine images.
-iRAMDiskId :: Lens' Image (Maybe Text)
-iRAMDiskId = lens _iRAMDiskId (\ s a -> s{_iRAMDiskId = a});
-
--- | The kernel associated with the image, if any. Only applicable for machine images.
-iKernelId :: Lens' Image (Maybe Text)
-iKernelId = lens _iKernelId (\ s a -> s{_iKernelId = a});
-
--- | The device name of the root device (for example, @/dev/sda1@ or @/dev/xvda@ ).
-iRootDeviceName :: Lens' Image (Maybe Text)
-iRootDeviceName = lens _iRootDeviceName (\ s a -> s{_iRootDeviceName = a});
-
--- | Specifies whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
-iSRIOVNetSupport :: Lens' Image (Maybe Text)
-iSRIOVNetSupport = lens _iSRIOVNetSupport (\ s a -> s{_iSRIOVNetSupport = a});
-
--- | The name of the AMI that was provided during image creation.
-iName :: Lens' Image (Maybe Text)
-iName = lens _iName (\ s a -> s{_iName = a});
-
--- | The date and time the image was created.
-iCreationDate :: Lens' Image (Maybe Text)
-iCreationDate = lens _iCreationDate (\ s a -> s{_iCreationDate = a});
-
--- | Any product codes associated with the AMI.
-iProductCodes :: Lens' Image [ProductCode]
-iProductCodes = lens _iProductCodes (\ s a -> s{_iProductCodes = a}) . _Default . _Coerce;
-
--- | The reason for the state change.
-iStateReason :: Lens' Image (Maybe StateReason)
-iStateReason = lens _iStateReason (\ s a -> s{_iStateReason = a});
-
--- | The description of the AMI that was provided during image creation.
-iDescription :: Lens' Image (Maybe Text)
-iDescription = lens _iDescription (\ s a -> s{_iDescription = a});
-
--- | Any block device mapping entries.
-iBlockDeviceMappings :: Lens' Image [BlockDeviceMapping]
-iBlockDeviceMappings = lens _iBlockDeviceMappings (\ s a -> s{_iBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the image.
-iTags :: Lens' Image [Tag]
-iTags = lens _iTags (\ s a -> s{_iTags = a}) . _Default . _Coerce;
-
--- | The ID of the AMI.
-iImageId :: Lens' Image Text
-iImageId = lens _iImageId (\ s a -> s{_iImageId = a});
-
--- | The location of the AMI.
-iImageLocation :: Lens' Image Text
-iImageLocation = lens _iImageLocation (\ s a -> s{_iImageLocation = a});
-
--- | The current state of the AMI. If the state is @available@ , the image is successfully registered and can be used to launch an instance.
-iState :: Lens' Image ImageState
-iState = lens _iState (\ s a -> s{_iState = a});
-
--- | The AWS account ID of the image owner.
-iOwnerId :: Lens' Image Text
-iOwnerId = lens _iOwnerId (\ s a -> s{_iOwnerId = a});
-
--- | Indicates whether the image has public launch permissions. The value is @true@ if this image has public launch permissions or @false@ if it has only implicit and explicit launch permissions.
-iPublic :: Lens' Image Bool
-iPublic = lens _iPublic (\ s a -> s{_iPublic = a});
-
--- | The architecture of the image.
-iArchitecture :: Lens' Image ArchitectureValues
-iArchitecture = lens _iArchitecture (\ s a -> s{_iArchitecture = a});
-
--- | The type of image.
-iImageType :: Lens' Image ImageTypeValues
-iImageType = lens _iImageType (\ s a -> s{_iImageType = a});
-
--- | The type of root device used by the AMI. The AMI can use an EBS volume or an instance store volume.
-iRootDeviceType :: Lens' Image DeviceType
-iRootDeviceType = lens _iRootDeviceType (\ s a -> s{_iRootDeviceType = a});
-
--- | The type of virtualization of the AMI.
-iVirtualizationType :: Lens' Image VirtualizationType
-iVirtualizationType = lens _iVirtualizationType (\ s a -> s{_iVirtualizationType = a});
-
--- | The hypervisor type of the image.
-iHypervisor :: Lens' Image HypervisorType
-iHypervisor = lens _iHypervisor (\ s a -> s{_iHypervisor = a});
-
-instance FromXML Image where
-        parseXML x
-          = Image' <$>
-              (x .@? "platform") <*> (x .@? "enaSupport") <*>
-                (x .@? "imageOwnerAlias")
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "rootDeviceName")
-                <*> (x .@? "sriovNetSupport")
-                <*> (x .@? "name")
-                <*> (x .@? "creationDate")
-                <*>
-                (x .@? "productCodes" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "stateReason")
-                <*> (x .@? "description")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "imageId")
-                <*> (x .@ "imageLocation")
-                <*> (x .@ "imageState")
-                <*> (x .@ "imageOwnerId")
-                <*> (x .@ "isPublic")
-                <*> (x .@ "architecture")
-                <*> (x .@ "imageType")
-                <*> (x .@ "rootDeviceType")
-                <*> (x .@ "virtualizationType")
-                <*> (x .@ "hypervisor")
-
-instance Hashable Image
-
-instance NFData Image
-
--- | Describes the disk container object for an import image task.
---
---
---
--- /See:/ 'imageDiskContainer' smart constructor.
-data ImageDiskContainer = ImageDiskContainer'
-    { _idcFormat      :: !(Maybe Text)
-    , _idcURL         :: !(Maybe Text)
-    , _idcDeviceName  :: !(Maybe Text)
-    , _idcUserBucket  :: !(Maybe UserBucket)
-    , _idcDescription :: !(Maybe Text)
-    , _idcSnapshotId  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImageDiskContainer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idcFormat' - The format of the disk image being imported. Valid values: @RAW@ | @VHD@ | @VMDK@ | @OVA@
---
--- * 'idcURL' - The URL to the Amazon S3-based disk image being imported. The URL can either be a https URL (https://..) or an Amazon S3 URL (s3://..)
---
--- * 'idcDeviceName' - The block device mapping for the disk.
---
--- * 'idcUserBucket' - The S3 bucket for the disk image.
---
--- * 'idcDescription' - The description of the disk image.
---
--- * 'idcSnapshotId' - The ID of the EBS snapshot to be used for importing the snapshot.
-imageDiskContainer
-    :: ImageDiskContainer
-imageDiskContainer =
-    ImageDiskContainer'
-    { _idcFormat = Nothing
-    , _idcURL = Nothing
-    , _idcDeviceName = Nothing
-    , _idcUserBucket = Nothing
-    , _idcDescription = Nothing
-    , _idcSnapshotId = Nothing
-    }
-
--- | The format of the disk image being imported. Valid values: @RAW@ | @VHD@ | @VMDK@ | @OVA@
-idcFormat :: Lens' ImageDiskContainer (Maybe Text)
-idcFormat = lens _idcFormat (\ s a -> s{_idcFormat = a});
-
--- | The URL to the Amazon S3-based disk image being imported. The URL can either be a https URL (https://..) or an Amazon S3 URL (s3://..)
-idcURL :: Lens' ImageDiskContainer (Maybe Text)
-idcURL = lens _idcURL (\ s a -> s{_idcURL = a});
-
--- | The block device mapping for the disk.
-idcDeviceName :: Lens' ImageDiskContainer (Maybe Text)
-idcDeviceName = lens _idcDeviceName (\ s a -> s{_idcDeviceName = a});
-
--- | The S3 bucket for the disk image.
-idcUserBucket :: Lens' ImageDiskContainer (Maybe UserBucket)
-idcUserBucket = lens _idcUserBucket (\ s a -> s{_idcUserBucket = a});
-
--- | The description of the disk image.
-idcDescription :: Lens' ImageDiskContainer (Maybe Text)
-idcDescription = lens _idcDescription (\ s a -> s{_idcDescription = a});
-
--- | The ID of the EBS snapshot to be used for importing the snapshot.
-idcSnapshotId :: Lens' ImageDiskContainer (Maybe Text)
-idcSnapshotId = lens _idcSnapshotId (\ s a -> s{_idcSnapshotId = a});
-
-instance Hashable ImageDiskContainer
-
-instance NFData ImageDiskContainer
-
-instance ToQuery ImageDiskContainer where
-        toQuery ImageDiskContainer'{..}
-          = mconcat
-              ["Format" =: _idcFormat, "Url" =: _idcURL,
-               "DeviceName" =: _idcDeviceName,
-               "UserBucket" =: _idcUserBucket,
-               "Description" =: _idcDescription,
-               "SnapshotId" =: _idcSnapshotId]
-
--- | Describes an import image task.
---
---
---
--- /See:/ 'importImageTask' smart constructor.
-data ImportImageTask = ImportImageTask'
-    { _iitStatus          :: !(Maybe Text)
-    , _iitHypervisor      :: !(Maybe Text)
-    , _iitPlatform        :: !(Maybe Text)
-    , _iitProgress        :: !(Maybe Text)
-    , _iitLicenseType     :: !(Maybe Text)
-    , _iitSnapshotDetails :: !(Maybe [SnapshotDetail])
-    , _iitStatusMessage   :: !(Maybe Text)
-    , _iitImageId         :: !(Maybe Text)
-    , _iitImportTaskId    :: !(Maybe Text)
-    , _iitArchitecture    :: !(Maybe Text)
-    , _iitDescription     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportImageTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iitStatus' - A brief status for the import image task.
---
--- * 'iitHypervisor' - The target hypervisor for the import task. Valid values: @xen@
---
--- * 'iitPlatform' - The description string for the import image task.
---
--- * 'iitProgress' - The percentage of progress of the import image task.
---
--- * 'iitLicenseType' - The license type of the virtual machine.
---
--- * 'iitSnapshotDetails' - Information about the snapshots.
---
--- * 'iitStatusMessage' - A descriptive status message for the import image task.
---
--- * 'iitImageId' - The ID of the Amazon Machine Image (AMI) of the imported virtual machine.
---
--- * 'iitImportTaskId' - The ID of the import image task.
---
--- * 'iitArchitecture' - The architecture of the virtual machine. Valid values: @i386@ | @x86_64@
---
--- * 'iitDescription' - A description of the import task.
-importImageTask
-    :: ImportImageTask
-importImageTask =
-    ImportImageTask'
-    { _iitStatus = Nothing
-    , _iitHypervisor = Nothing
-    , _iitPlatform = Nothing
-    , _iitProgress = Nothing
-    , _iitLicenseType = Nothing
-    , _iitSnapshotDetails = Nothing
-    , _iitStatusMessage = Nothing
-    , _iitImageId = Nothing
-    , _iitImportTaskId = Nothing
-    , _iitArchitecture = Nothing
-    , _iitDescription = Nothing
-    }
-
--- | A brief status for the import image task.
-iitStatus :: Lens' ImportImageTask (Maybe Text)
-iitStatus = lens _iitStatus (\ s a -> s{_iitStatus = a});
-
--- | The target hypervisor for the import task. Valid values: @xen@
-iitHypervisor :: Lens' ImportImageTask (Maybe Text)
-iitHypervisor = lens _iitHypervisor (\ s a -> s{_iitHypervisor = a});
-
--- | The description string for the import image task.
-iitPlatform :: Lens' ImportImageTask (Maybe Text)
-iitPlatform = lens _iitPlatform (\ s a -> s{_iitPlatform = a});
-
--- | The percentage of progress of the import image task.
-iitProgress :: Lens' ImportImageTask (Maybe Text)
-iitProgress = lens _iitProgress (\ s a -> s{_iitProgress = a});
-
--- | The license type of the virtual machine.
-iitLicenseType :: Lens' ImportImageTask (Maybe Text)
-iitLicenseType = lens _iitLicenseType (\ s a -> s{_iitLicenseType = a});
-
--- | Information about the snapshots.
-iitSnapshotDetails :: Lens' ImportImageTask [SnapshotDetail]
-iitSnapshotDetails = lens _iitSnapshotDetails (\ s a -> s{_iitSnapshotDetails = a}) . _Default . _Coerce;
-
--- | A descriptive status message for the import image task.
-iitStatusMessage :: Lens' ImportImageTask (Maybe Text)
-iitStatusMessage = lens _iitStatusMessage (\ s a -> s{_iitStatusMessage = a});
-
--- | The ID of the Amazon Machine Image (AMI) of the imported virtual machine.
-iitImageId :: Lens' ImportImageTask (Maybe Text)
-iitImageId = lens _iitImageId (\ s a -> s{_iitImageId = a});
-
--- | The ID of the import image task.
-iitImportTaskId :: Lens' ImportImageTask (Maybe Text)
-iitImportTaskId = lens _iitImportTaskId (\ s a -> s{_iitImportTaskId = a});
-
--- | The architecture of the virtual machine. Valid values: @i386@ | @x86_64@
-iitArchitecture :: Lens' ImportImageTask (Maybe Text)
-iitArchitecture = lens _iitArchitecture (\ s a -> s{_iitArchitecture = a});
-
--- | A description of the import task.
-iitDescription :: Lens' ImportImageTask (Maybe Text)
-iitDescription = lens _iitDescription (\ s a -> s{_iitDescription = a});
-
-instance FromXML ImportImageTask where
-        parseXML x
-          = ImportImageTask' <$>
-              (x .@? "status") <*> (x .@? "hypervisor") <*>
-                (x .@? "platform")
-                <*> (x .@? "progress")
-                <*> (x .@? "licenseType")
-                <*>
-                (x .@? "snapshotDetailSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "imageId")
-                <*> (x .@? "importTaskId")
-                <*> (x .@? "architecture")
-                <*> (x .@? "description")
-
-instance Hashable ImportImageTask
-
-instance NFData ImportImageTask
-
--- | Describes the launch specification for VM import.
---
---
---
--- /See:/ 'importInstanceLaunchSpecification' smart constructor.
-data ImportInstanceLaunchSpecification = ImportInstanceLaunchSpecification'
-    { _iilsAdditionalInfo                    :: !(Maybe Text)
-    , _iilsGroupNames                        :: !(Maybe [Text])
-    , _iilsSubnetId                          :: !(Maybe Text)
-    , _iilsInstanceType                      :: !(Maybe InstanceType)
-    , _iilsGroupIds                          :: !(Maybe [Text])
-    , _iilsUserData                          :: !(Maybe UserData)
-    , _iilsMonitoring                        :: !(Maybe Bool)
-    , _iilsPrivateIPAddress                  :: !(Maybe Text)
-    , _iilsInstanceInitiatedShutdownBehavior :: !(Maybe ShutdownBehavior)
-    , _iilsArchitecture                      :: !(Maybe ArchitectureValues)
-    , _iilsPlacement                         :: !(Maybe Placement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iilsAdditionalInfo' - Reserved.
---
--- * 'iilsGroupNames' - One or more security group names.
---
--- * 'iilsSubnetId' - [EC2-VPC] The ID of the subnet in which to launch the instance.
---
--- * 'iilsInstanceType' - The instance type. For more information about the instance types that you can import, see <http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#vmimport-instance-types Instance Types> in the VM Import/Export User Guide.
---
--- * 'iilsGroupIds' - One or more security group IDs.
---
--- * 'iilsUserData' - The user data to make available to the instance. If you are using an AWS SDK or 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.
---
--- * 'iilsMonitoring' - Indicates whether monitoring is enabled.
---
--- * 'iilsPrivateIPAddress' - [EC2-VPC] An available IP address from the IP address range of the subnet.
---
--- * 'iilsInstanceInitiatedShutdownBehavior' - Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
---
--- * 'iilsArchitecture' - The architecture of the instance.
---
--- * 'iilsPlacement' - The placement information for the instance.
-importInstanceLaunchSpecification
-    :: ImportInstanceLaunchSpecification
-importInstanceLaunchSpecification =
-    ImportInstanceLaunchSpecification'
-    { _iilsAdditionalInfo = Nothing
-    , _iilsGroupNames = Nothing
-    , _iilsSubnetId = Nothing
-    , _iilsInstanceType = Nothing
-    , _iilsGroupIds = Nothing
-    , _iilsUserData = Nothing
-    , _iilsMonitoring = Nothing
-    , _iilsPrivateIPAddress = Nothing
-    , _iilsInstanceInitiatedShutdownBehavior = Nothing
-    , _iilsArchitecture = Nothing
-    , _iilsPlacement = Nothing
-    }
-
--- | Reserved.
-iilsAdditionalInfo :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
-iilsAdditionalInfo = lens _iilsAdditionalInfo (\ s a -> s{_iilsAdditionalInfo = a});
-
--- | One or more security group names.
-iilsGroupNames :: Lens' ImportInstanceLaunchSpecification [Text]
-iilsGroupNames = lens _iilsGroupNames (\ s a -> s{_iilsGroupNames = a}) . _Default . _Coerce;
-
--- | [EC2-VPC] The ID of the subnet in which to launch the instance.
-iilsSubnetId :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
-iilsSubnetId = lens _iilsSubnetId (\ s a -> s{_iilsSubnetId = a});
-
--- | The instance type. For more information about the instance types that you can import, see <http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html#vmimport-instance-types Instance Types> in the VM Import/Export User Guide.
-iilsInstanceType :: Lens' ImportInstanceLaunchSpecification (Maybe InstanceType)
-iilsInstanceType = lens _iilsInstanceType (\ s a -> s{_iilsInstanceType = a});
-
--- | One or more security group IDs.
-iilsGroupIds :: Lens' ImportInstanceLaunchSpecification [Text]
-iilsGroupIds = lens _iilsGroupIds (\ s a -> s{_iilsGroupIds = a}) . _Default . _Coerce;
-
--- | The user data to make available to the instance. If you are using an AWS SDK or 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.
-iilsUserData :: Lens' ImportInstanceLaunchSpecification (Maybe UserData)
-iilsUserData = lens _iilsUserData (\ s a -> s{_iilsUserData = a});
-
--- | Indicates whether monitoring is enabled.
-iilsMonitoring :: Lens' ImportInstanceLaunchSpecification (Maybe Bool)
-iilsMonitoring = lens _iilsMonitoring (\ s a -> s{_iilsMonitoring = a});
-
--- | [EC2-VPC] An available IP address from the IP address range of the subnet.
-iilsPrivateIPAddress :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
-iilsPrivateIPAddress = lens _iilsPrivateIPAddress (\ s a -> s{_iilsPrivateIPAddress = a});
-
--- | Indicates whether an instance stops or terminates when you initiate shutdown from the instance (using the operating system command for system shutdown).
-iilsInstanceInitiatedShutdownBehavior :: Lens' ImportInstanceLaunchSpecification (Maybe ShutdownBehavior)
-iilsInstanceInitiatedShutdownBehavior = lens _iilsInstanceInitiatedShutdownBehavior (\ s a -> s{_iilsInstanceInitiatedShutdownBehavior = a});
-
--- | The architecture of the instance.
-iilsArchitecture :: Lens' ImportInstanceLaunchSpecification (Maybe ArchitectureValues)
-iilsArchitecture = lens _iilsArchitecture (\ s a -> s{_iilsArchitecture = a});
-
--- | The placement information for the instance.
-iilsPlacement :: Lens' ImportInstanceLaunchSpecification (Maybe Placement)
-iilsPlacement = lens _iilsPlacement (\ s a -> s{_iilsPlacement = a});
-
-instance Hashable ImportInstanceLaunchSpecification
-
-instance NFData ImportInstanceLaunchSpecification
-
-instance ToQuery ImportInstanceLaunchSpecification
-         where
-        toQuery ImportInstanceLaunchSpecification'{..}
-          = mconcat
-              ["AdditionalInfo" =: _iilsAdditionalInfo,
-               toQuery
-                 (toQueryList "GroupName" <$> _iilsGroupNames),
-               "SubnetId" =: _iilsSubnetId,
-               "InstanceType" =: _iilsInstanceType,
-               toQuery (toQueryList "GroupId" <$> _iilsGroupIds),
-               "UserData" =: _iilsUserData,
-               "Monitoring" =: _iilsMonitoring,
-               "PrivateIpAddress" =: _iilsPrivateIPAddress,
-               "InstanceInitiatedShutdownBehavior" =:
-                 _iilsInstanceInitiatedShutdownBehavior,
-               "Architecture" =: _iilsArchitecture,
-               "Placement" =: _iilsPlacement]
-
--- | Describes an import instance task.
---
---
---
--- /See:/ 'importInstanceTaskDetails' smart constructor.
-data ImportInstanceTaskDetails = ImportInstanceTaskDetails'
-    { _iitdInstanceId  :: !(Maybe Text)
-    , _iitdPlatform    :: !(Maybe PlatformValues)
-    , _iitdDescription :: !(Maybe Text)
-    , _iitdVolumes     :: ![ImportInstanceVolumeDetailItem]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceTaskDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iitdInstanceId' - The ID of the instance.
---
--- * 'iitdPlatform' - The instance operating system.
---
--- * 'iitdDescription' - A description of the task.
---
--- * 'iitdVolumes' - One or more volumes.
-importInstanceTaskDetails
-    :: ImportInstanceTaskDetails
-importInstanceTaskDetails =
-    ImportInstanceTaskDetails'
-    { _iitdInstanceId = Nothing
-    , _iitdPlatform = Nothing
-    , _iitdDescription = Nothing
-    , _iitdVolumes = mempty
-    }
-
--- | The ID of the instance.
-iitdInstanceId :: Lens' ImportInstanceTaskDetails (Maybe Text)
-iitdInstanceId = lens _iitdInstanceId (\ s a -> s{_iitdInstanceId = a});
-
--- | The instance operating system.
-iitdPlatform :: Lens' ImportInstanceTaskDetails (Maybe PlatformValues)
-iitdPlatform = lens _iitdPlatform (\ s a -> s{_iitdPlatform = a});
-
--- | A description of the task.
-iitdDescription :: Lens' ImportInstanceTaskDetails (Maybe Text)
-iitdDescription = lens _iitdDescription (\ s a -> s{_iitdDescription = a});
-
--- | One or more volumes.
-iitdVolumes :: Lens' ImportInstanceTaskDetails [ImportInstanceVolumeDetailItem]
-iitdVolumes = lens _iitdVolumes (\ s a -> s{_iitdVolumes = a}) . _Coerce;
-
-instance FromXML ImportInstanceTaskDetails where
-        parseXML x
-          = ImportInstanceTaskDetails' <$>
-              (x .@? "instanceId") <*> (x .@? "platform") <*>
-                (x .@? "description")
-                <*>
-                (x .@? "volumes" .!@ mempty >>= parseXMLList "item")
-
-instance Hashable ImportInstanceTaskDetails
-
-instance NFData ImportInstanceTaskDetails
-
--- | Describes an import volume task.
---
---
---
--- /See:/ 'importInstanceVolumeDetailItem' smart constructor.
-data ImportInstanceVolumeDetailItem = ImportInstanceVolumeDetailItem'
-    { _iivdiStatusMessage    :: !(Maybe Text)
-    , _iivdiDescription      :: !(Maybe Text)
-    , _iivdiBytesConverted   :: !Integer
-    , _iivdiAvailabilityZone :: !Text
-    , _iivdiImage            :: !DiskImageDescription
-    , _iivdiVolume           :: !DiskImageVolumeDescription
-    , _iivdiStatus           :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceVolumeDetailItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iivdiStatusMessage' - The status information or errors related to the disk image.
---
--- * 'iivdiDescription' - A description of the task.
---
--- * 'iivdiBytesConverted' - The number of bytes converted so far.
---
--- * 'iivdiAvailabilityZone' - The Availability Zone where the resulting instance will reside.
---
--- * 'iivdiImage' - The image.
---
--- * 'iivdiVolume' - The volume.
---
--- * 'iivdiStatus' - The status of the import of this particular disk image.
-importInstanceVolumeDetailItem
-    :: Integer -- ^ 'iivdiBytesConverted'
-    -> Text -- ^ 'iivdiAvailabilityZone'
-    -> DiskImageDescription -- ^ 'iivdiImage'
-    -> DiskImageVolumeDescription -- ^ 'iivdiVolume'
-    -> Text -- ^ 'iivdiStatus'
-    -> ImportInstanceVolumeDetailItem
-importInstanceVolumeDetailItem pBytesConverted_ pAvailabilityZone_ pImage_ pVolume_ pStatus_ =
-    ImportInstanceVolumeDetailItem'
-    { _iivdiStatusMessage = Nothing
-    , _iivdiDescription = Nothing
-    , _iivdiBytesConverted = pBytesConverted_
-    , _iivdiAvailabilityZone = pAvailabilityZone_
-    , _iivdiImage = pImage_
-    , _iivdiVolume = pVolume_
-    , _iivdiStatus = pStatus_
-    }
-
--- | The status information or errors related to the disk image.
-iivdiStatusMessage :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
-iivdiStatusMessage = lens _iivdiStatusMessage (\ s a -> s{_iivdiStatusMessage = a});
-
--- | A description of the task.
-iivdiDescription :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
-iivdiDescription = lens _iivdiDescription (\ s a -> s{_iivdiDescription = a});
-
--- | The number of bytes converted so far.
-iivdiBytesConverted :: Lens' ImportInstanceVolumeDetailItem Integer
-iivdiBytesConverted = lens _iivdiBytesConverted (\ s a -> s{_iivdiBytesConverted = a});
-
--- | The Availability Zone where the resulting instance will reside.
-iivdiAvailabilityZone :: Lens' ImportInstanceVolumeDetailItem Text
-iivdiAvailabilityZone = lens _iivdiAvailabilityZone (\ s a -> s{_iivdiAvailabilityZone = a});
-
--- | The image.
-iivdiImage :: Lens' ImportInstanceVolumeDetailItem DiskImageDescription
-iivdiImage = lens _iivdiImage (\ s a -> s{_iivdiImage = a});
-
--- | The volume.
-iivdiVolume :: Lens' ImportInstanceVolumeDetailItem DiskImageVolumeDescription
-iivdiVolume = lens _iivdiVolume (\ s a -> s{_iivdiVolume = a});
-
--- | The status of the import of this particular disk image.
-iivdiStatus :: Lens' ImportInstanceVolumeDetailItem Text
-iivdiStatus = lens _iivdiStatus (\ s a -> s{_iivdiStatus = a});
-
-instance FromXML ImportInstanceVolumeDetailItem where
-        parseXML x
-          = ImportInstanceVolumeDetailItem' <$>
-              (x .@? "statusMessage") <*> (x .@? "description") <*>
-                (x .@ "bytesConverted")
-                <*> (x .@ "availabilityZone")
-                <*> (x .@ "image")
-                <*> (x .@ "volume")
-                <*> (x .@ "status")
-
-instance Hashable ImportInstanceVolumeDetailItem
-
-instance NFData ImportInstanceVolumeDetailItem
-
--- | Describes an import snapshot task.
---
---
---
--- /See:/ 'importSnapshotTask' smart constructor.
-data ImportSnapshotTask = ImportSnapshotTask'
-    { _istSnapshotTaskDetail :: !(Maybe SnapshotTaskDetail)
-    , _istImportTaskId       :: !(Maybe Text)
-    , _istDescription        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportSnapshotTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'istSnapshotTaskDetail' - Describes an import snapshot task.
---
--- * 'istImportTaskId' - The ID of the import snapshot task.
---
--- * 'istDescription' - A description of the import snapshot task.
-importSnapshotTask
-    :: ImportSnapshotTask
-importSnapshotTask =
-    ImportSnapshotTask'
-    { _istSnapshotTaskDetail = Nothing
-    , _istImportTaskId = Nothing
-    , _istDescription = Nothing
-    }
-
--- | Describes an import snapshot task.
-istSnapshotTaskDetail :: Lens' ImportSnapshotTask (Maybe SnapshotTaskDetail)
-istSnapshotTaskDetail = lens _istSnapshotTaskDetail (\ s a -> s{_istSnapshotTaskDetail = a});
-
--- | The ID of the import snapshot task.
-istImportTaskId :: Lens' ImportSnapshotTask (Maybe Text)
-istImportTaskId = lens _istImportTaskId (\ s a -> s{_istImportTaskId = a});
-
--- | A description of the import snapshot task.
-istDescription :: Lens' ImportSnapshotTask (Maybe Text)
-istDescription = lens _istDescription (\ s a -> s{_istDescription = a});
-
-instance FromXML ImportSnapshotTask where
-        parseXML x
-          = ImportSnapshotTask' <$>
-              (x .@? "snapshotTaskDetail") <*>
-                (x .@? "importTaskId")
-                <*> (x .@? "description")
-
-instance Hashable ImportSnapshotTask
-
-instance NFData ImportSnapshotTask
-
--- | Describes an import volume task.
---
---
---
--- /See:/ 'importVolumeTaskDetails' smart constructor.
-data ImportVolumeTaskDetails = ImportVolumeTaskDetails'
-    { _ivtdDescription      :: !(Maybe Text)
-    , _ivtdBytesConverted   :: !Integer
-    , _ivtdAvailabilityZone :: !Text
-    , _ivtdImage            :: !DiskImageDescription
-    , _ivtdVolume           :: !DiskImageVolumeDescription
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportVolumeTaskDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ivtdDescription' - The description you provided when starting the import volume task.
---
--- * 'ivtdBytesConverted' - The number of bytes converted so far.
---
--- * 'ivtdAvailabilityZone' - The Availability Zone where the resulting volume will reside.
---
--- * 'ivtdImage' - The image.
---
--- * 'ivtdVolume' - The volume.
-importVolumeTaskDetails
-    :: Integer -- ^ 'ivtdBytesConverted'
-    -> Text -- ^ 'ivtdAvailabilityZone'
-    -> DiskImageDescription -- ^ 'ivtdImage'
-    -> DiskImageVolumeDescription -- ^ 'ivtdVolume'
-    -> ImportVolumeTaskDetails
-importVolumeTaskDetails pBytesConverted_ pAvailabilityZone_ pImage_ pVolume_ =
-    ImportVolumeTaskDetails'
-    { _ivtdDescription = Nothing
-    , _ivtdBytesConverted = pBytesConverted_
-    , _ivtdAvailabilityZone = pAvailabilityZone_
-    , _ivtdImage = pImage_
-    , _ivtdVolume = pVolume_
-    }
-
--- | The description you provided when starting the import volume task.
-ivtdDescription :: Lens' ImportVolumeTaskDetails (Maybe Text)
-ivtdDescription = lens _ivtdDescription (\ s a -> s{_ivtdDescription = a});
-
--- | The number of bytes converted so far.
-ivtdBytesConverted :: Lens' ImportVolumeTaskDetails Integer
-ivtdBytesConverted = lens _ivtdBytesConverted (\ s a -> s{_ivtdBytesConverted = a});
-
--- | The Availability Zone where the resulting volume will reside.
-ivtdAvailabilityZone :: Lens' ImportVolumeTaskDetails Text
-ivtdAvailabilityZone = lens _ivtdAvailabilityZone (\ s a -> s{_ivtdAvailabilityZone = a});
-
--- | The image.
-ivtdImage :: Lens' ImportVolumeTaskDetails DiskImageDescription
-ivtdImage = lens _ivtdImage (\ s a -> s{_ivtdImage = a});
-
--- | The volume.
-ivtdVolume :: Lens' ImportVolumeTaskDetails DiskImageVolumeDescription
-ivtdVolume = lens _ivtdVolume (\ s a -> s{_ivtdVolume = a});
-
-instance FromXML ImportVolumeTaskDetails where
-        parseXML x
-          = ImportVolumeTaskDetails' <$>
-              (x .@? "description") <*> (x .@ "bytesConverted") <*>
-                (x .@ "availabilityZone")
-                <*> (x .@ "image")
-                <*> (x .@ "volume")
-
-instance Hashable ImportVolumeTaskDetails
-
-instance NFData ImportVolumeTaskDetails
-
--- | Describes an instance.
---
---
---
--- /See:/ 'instance'' smart constructor.
-data Instance = Instance'
-    { _insPublicDNSName         :: !(Maybe Text)
-    , _insPlatform              :: !(Maybe PlatformValues)
-    , _insSecurityGroups        :: !(Maybe [GroupIdentifier])
-    , _insClientToken           :: !(Maybe Text)
-    , _insEnaSupport            :: !(Maybe Bool)
-    , _insSourceDestCheck       :: !(Maybe Bool)
-    , _insVPCId                 :: !(Maybe Text)
-    , _insKeyName               :: !(Maybe Text)
-    , _insNetworkInterfaces     :: !(Maybe [InstanceNetworkInterface])
-    , _insRAMDiskId             :: !(Maybe Text)
-    , _insSubnetId              :: !(Maybe Text)
-    , _insKernelId              :: !(Maybe Text)
-    , _insRootDeviceName        :: !(Maybe Text)
-    , _insSRIOVNetSupport       :: !(Maybe Text)
-    , _insEBSOptimized          :: !(Maybe Bool)
-    , _insStateTransitionReason :: !(Maybe Text)
-    , _insInstanceLifecycle     :: !(Maybe InstanceLifecycleType)
-    , _insIAMInstanceProfile    :: !(Maybe IAMInstanceProfile)
-    , _insPrivateIPAddress      :: !(Maybe Text)
-    , _insProductCodes          :: !(Maybe [ProductCode])
-    , _insSpotInstanceRequestId :: !(Maybe Text)
-    , _insPrivateDNSName        :: !(Maybe Text)
-    , _insStateReason           :: !(Maybe StateReason)
-    , _insBlockDeviceMappings   :: !(Maybe [InstanceBlockDeviceMapping])
-    , _insPublicIPAddress       :: !(Maybe Text)
-    , _insTags                  :: !(Maybe [Tag])
-    , _insInstanceId            :: !Text
-    , _insImageId               :: !Text
-    , _insAMILaunchIndex        :: !Int
-    , _insInstanceType          :: !InstanceType
-    , _insLaunchTime            :: !ISO8601
-    , _insPlacement             :: !Placement
-    , _insMonitoring            :: !Monitoring
-    , _insArchitecture          :: !ArchitectureValues
-    , _insRootDeviceType        :: !DeviceType
-    , _insVirtualizationType    :: !VirtualizationType
-    , _insHypervisor            :: !HypervisorType
-    , _insState                 :: !InstanceState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Instance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'insPublicDNSName' - (IPv4 only) The public DNS name assigned to the instance. This name is not available until the instance enters the @running@ state. For EC2-VPC, this name is only available if you've enabled DNS hostnames for your VPC.
---
--- * 'insPlatform' - The value is @Windows@ for Windows instances; otherwise blank.
---
--- * 'insSecurityGroups' - One or more security groups for the instance.
---
--- * 'insClientToken' - The idempotency token you provided when you launched the instance, if applicable.
---
--- * 'insEnaSupport' - Specifies whether enhanced networking with ENA is enabled.
---
--- * 'insSourceDestCheck' - Specifies whether to enable an instance launched in a VPC to perform NAT. This controls whether source/destination checking is enabled on the instance. A value of @true@ means checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the instance to perform NAT. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances> in the /Amazon Virtual Private Cloud User Guide/ .
---
--- * 'insVPCId' - [EC2-VPC] The ID of the VPC in which the instance is running.
---
--- * 'insKeyName' - The name of the key pair, if this instance was launched with an associated key pair.
---
--- * 'insNetworkInterfaces' - [EC2-VPC] One or more network interfaces for the instance.
---
--- * 'insRAMDiskId' - The RAM disk associated with this instance, if applicable.
---
--- * 'insSubnetId' - [EC2-VPC] The ID of the subnet in which the instance is running.
---
--- * 'insKernelId' - The kernel associated with this instance, if applicable.
---
--- * 'insRootDeviceName' - The root device name (for example, @/dev/sda1@ or @/dev/xvda@ ).
---
--- * 'insSRIOVNetSupport' - Specifies whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
---
--- * 'insEBSOptimized' - Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.
---
--- * 'insStateTransitionReason' - The reason for the most recent state transition. This might be an empty string.
---
--- * 'insInstanceLifecycle' - Indicates whether this is a Spot instance or a Scheduled Instance.
---
--- * 'insIAMInstanceProfile' - The IAM instance profile associated with the instance, if applicable.
---
--- * 'insPrivateIPAddress' - The private IPv4 address assigned to the instance.
---
--- * 'insProductCodes' - The product codes attached to this instance, if applicable.
---
--- * 'insSpotInstanceRequestId' - If the request is a Spot instance request, the ID of the request.
---
--- * 'insPrivateDNSName' - (IPv4 only) The private DNS hostname name assigned to the instance. This DNS hostname can only be used inside the Amazon EC2 network. This name is not available until the instance enters the @running@ state.  [EC2-VPC] The Amazon-provided DNS server will resolve Amazon-provided private DNS hostnames if you've enabled DNS resolution and DNS hostnames in your VPC. If you are not using the Amazon-provided DNS server in your VPC, your custom domain name servers must resolve the hostname as appropriate.
---
--- * 'insStateReason' - The reason for the most recent state transition.
---
--- * 'insBlockDeviceMappings' - Any block device mapping entries for the instance.
---
--- * 'insPublicIPAddress' - The public IPv4 address assigned to the instance, if applicable.
---
--- * 'insTags' - Any tags assigned to the instance.
---
--- * 'insInstanceId' - The ID of the instance.
---
--- * 'insImageId' - The ID of the AMI used to launch the instance.
---
--- * 'insAMILaunchIndex' - The AMI launch index, which can be used to find this instance in the launch group.
---
--- * 'insInstanceType' - The instance type.
---
--- * 'insLaunchTime' - The time the instance was launched.
---
--- * 'insPlacement' - The location where the instance launched, if applicable.
---
--- * 'insMonitoring' - The monitoring for the instance.
---
--- * 'insArchitecture' - The architecture of the image.
---
--- * 'insRootDeviceType' - The root device type used by the AMI. The AMI can use an EBS volume or an instance store volume.
---
--- * 'insVirtualizationType' - The virtualization type of the instance.
---
--- * 'insHypervisor' - The hypervisor type of the instance.
---
--- * 'insState' - The current state of the instance.
-instance'
-    :: Text -- ^ 'insInstanceId'
-    -> Text -- ^ 'insImageId'
-    -> Int -- ^ 'insAMILaunchIndex'
-    -> InstanceType -- ^ 'insInstanceType'
-    -> UTCTime -- ^ 'insLaunchTime'
-    -> Placement -- ^ 'insPlacement'
-    -> Monitoring -- ^ 'insMonitoring'
-    -> ArchitectureValues -- ^ 'insArchitecture'
-    -> DeviceType -- ^ 'insRootDeviceType'
-    -> VirtualizationType -- ^ 'insVirtualizationType'
-    -> HypervisorType -- ^ 'insHypervisor'
-    -> InstanceState -- ^ 'insState'
-    -> Instance
-instance' pInstanceId_ pImageId_ pAMILaunchIndex_ pInstanceType_ pLaunchTime_ pPlacement_ pMonitoring_ pArchitecture_ pRootDeviceType_ pVirtualizationType_ pHypervisor_ pState_ =
-    Instance'
-    { _insPublicDNSName = Nothing
-    , _insPlatform = Nothing
-    , _insSecurityGroups = Nothing
-    , _insClientToken = Nothing
-    , _insEnaSupport = Nothing
-    , _insSourceDestCheck = Nothing
-    , _insVPCId = Nothing
-    , _insKeyName = Nothing
-    , _insNetworkInterfaces = Nothing
-    , _insRAMDiskId = Nothing
-    , _insSubnetId = Nothing
-    , _insKernelId = Nothing
-    , _insRootDeviceName = Nothing
-    , _insSRIOVNetSupport = Nothing
-    , _insEBSOptimized = Nothing
-    , _insStateTransitionReason = Nothing
-    , _insInstanceLifecycle = Nothing
-    , _insIAMInstanceProfile = Nothing
-    , _insPrivateIPAddress = Nothing
-    , _insProductCodes = Nothing
-    , _insSpotInstanceRequestId = Nothing
-    , _insPrivateDNSName = Nothing
-    , _insStateReason = Nothing
-    , _insBlockDeviceMappings = Nothing
-    , _insPublicIPAddress = Nothing
-    , _insTags = Nothing
-    , _insInstanceId = pInstanceId_
-    , _insImageId = pImageId_
-    , _insAMILaunchIndex = pAMILaunchIndex_
-    , _insInstanceType = pInstanceType_
-    , _insLaunchTime = _Time # pLaunchTime_
-    , _insPlacement = pPlacement_
-    , _insMonitoring = pMonitoring_
-    , _insArchitecture = pArchitecture_
-    , _insRootDeviceType = pRootDeviceType_
-    , _insVirtualizationType = pVirtualizationType_
-    , _insHypervisor = pHypervisor_
-    , _insState = pState_
-    }
-
--- | (IPv4 only) The public DNS name assigned to the instance. This name is not available until the instance enters the @running@ state. For EC2-VPC, this name is only available if you've enabled DNS hostnames for your VPC.
-insPublicDNSName :: Lens' Instance (Maybe Text)
-insPublicDNSName = lens _insPublicDNSName (\ s a -> s{_insPublicDNSName = a});
-
--- | The value is @Windows@ for Windows instances; otherwise blank.
-insPlatform :: Lens' Instance (Maybe PlatformValues)
-insPlatform = lens _insPlatform (\ s a -> s{_insPlatform = a});
-
--- | One or more security groups for the instance.
-insSecurityGroups :: Lens' Instance [GroupIdentifier]
-insSecurityGroups = lens _insSecurityGroups (\ s a -> s{_insSecurityGroups = a}) . _Default . _Coerce;
-
--- | The idempotency token you provided when you launched the instance, if applicable.
-insClientToken :: Lens' Instance (Maybe Text)
-insClientToken = lens _insClientToken (\ s a -> s{_insClientToken = a});
-
--- | Specifies whether enhanced networking with ENA is enabled.
-insEnaSupport :: Lens' Instance (Maybe Bool)
-insEnaSupport = lens _insEnaSupport (\ s a -> s{_insEnaSupport = a});
-
--- | Specifies whether to enable an instance launched in a VPC to perform NAT. This controls whether source/destination checking is enabled on the instance. A value of @true@ means checking is enabled, and @false@ means checking is disabled. The value must be @false@ for the instance to perform NAT. For more information, see <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances> in the /Amazon Virtual Private Cloud User Guide/ .
-insSourceDestCheck :: Lens' Instance (Maybe Bool)
-insSourceDestCheck = lens _insSourceDestCheck (\ s a -> s{_insSourceDestCheck = a});
-
--- | [EC2-VPC] The ID of the VPC in which the instance is running.
-insVPCId :: Lens' Instance (Maybe Text)
-insVPCId = lens _insVPCId (\ s a -> s{_insVPCId = a});
-
--- | The name of the key pair, if this instance was launched with an associated key pair.
-insKeyName :: Lens' Instance (Maybe Text)
-insKeyName = lens _insKeyName (\ s a -> s{_insKeyName = a});
-
--- | [EC2-VPC] One or more network interfaces for the instance.
-insNetworkInterfaces :: Lens' Instance [InstanceNetworkInterface]
-insNetworkInterfaces = lens _insNetworkInterfaces (\ s a -> s{_insNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The RAM disk associated with this instance, if applicable.
-insRAMDiskId :: Lens' Instance (Maybe Text)
-insRAMDiskId = lens _insRAMDiskId (\ s a -> s{_insRAMDiskId = a});
-
--- | [EC2-VPC] The ID of the subnet in which the instance is running.
-insSubnetId :: Lens' Instance (Maybe Text)
-insSubnetId = lens _insSubnetId (\ s a -> s{_insSubnetId = a});
-
--- | The kernel associated with this instance, if applicable.
-insKernelId :: Lens' Instance (Maybe Text)
-insKernelId = lens _insKernelId (\ s a -> s{_insKernelId = a});
-
--- | The root device name (for example, @/dev/sda1@ or @/dev/xvda@ ).
-insRootDeviceName :: Lens' Instance (Maybe Text)
-insRootDeviceName = lens _insRootDeviceName (\ s a -> s{_insRootDeviceName = a});
-
--- | Specifies whether enhanced networking with the Intel 82599 Virtual Function interface is enabled.
-insSRIOVNetSupport :: Lens' Instance (Maybe Text)
-insSRIOVNetSupport = lens _insSRIOVNetSupport (\ s a -> s{_insSRIOVNetSupport = a});
-
--- | Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance.
-insEBSOptimized :: Lens' Instance (Maybe Bool)
-insEBSOptimized = lens _insEBSOptimized (\ s a -> s{_insEBSOptimized = a});
-
--- | The reason for the most recent state transition. This might be an empty string.
-insStateTransitionReason :: Lens' Instance (Maybe Text)
-insStateTransitionReason = lens _insStateTransitionReason (\ s a -> s{_insStateTransitionReason = a});
-
--- | Indicates whether this is a Spot instance or a Scheduled Instance.
-insInstanceLifecycle :: Lens' Instance (Maybe InstanceLifecycleType)
-insInstanceLifecycle = lens _insInstanceLifecycle (\ s a -> s{_insInstanceLifecycle = a});
-
--- | The IAM instance profile associated with the instance, if applicable.
-insIAMInstanceProfile :: Lens' Instance (Maybe IAMInstanceProfile)
-insIAMInstanceProfile = lens _insIAMInstanceProfile (\ s a -> s{_insIAMInstanceProfile = a});
-
--- | The private IPv4 address assigned to the instance.
-insPrivateIPAddress :: Lens' Instance (Maybe Text)
-insPrivateIPAddress = lens _insPrivateIPAddress (\ s a -> s{_insPrivateIPAddress = a});
-
--- | The product codes attached to this instance, if applicable.
-insProductCodes :: Lens' Instance [ProductCode]
-insProductCodes = lens _insProductCodes (\ s a -> s{_insProductCodes = a}) . _Default . _Coerce;
-
--- | If the request is a Spot instance request, the ID of the request.
-insSpotInstanceRequestId :: Lens' Instance (Maybe Text)
-insSpotInstanceRequestId = lens _insSpotInstanceRequestId (\ s a -> s{_insSpotInstanceRequestId = a});
-
--- | (IPv4 only) The private DNS hostname name assigned to the instance. This DNS hostname can only be used inside the Amazon EC2 network. This name is not available until the instance enters the @running@ state.  [EC2-VPC] The Amazon-provided DNS server will resolve Amazon-provided private DNS hostnames if you've enabled DNS resolution and DNS hostnames in your VPC. If you are not using the Amazon-provided DNS server in your VPC, your custom domain name servers must resolve the hostname as appropriate.
-insPrivateDNSName :: Lens' Instance (Maybe Text)
-insPrivateDNSName = lens _insPrivateDNSName (\ s a -> s{_insPrivateDNSName = a});
-
--- | The reason for the most recent state transition.
-insStateReason :: Lens' Instance (Maybe StateReason)
-insStateReason = lens _insStateReason (\ s a -> s{_insStateReason = a});
-
--- | Any block device mapping entries for the instance.
-insBlockDeviceMappings :: Lens' Instance [InstanceBlockDeviceMapping]
-insBlockDeviceMappings = lens _insBlockDeviceMappings (\ s a -> s{_insBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The public IPv4 address assigned to the instance, if applicable.
-insPublicIPAddress :: Lens' Instance (Maybe Text)
-insPublicIPAddress = lens _insPublicIPAddress (\ s a -> s{_insPublicIPAddress = a});
-
--- | Any tags assigned to the instance.
-insTags :: Lens' Instance [Tag]
-insTags = lens _insTags (\ s a -> s{_insTags = a}) . _Default . _Coerce;
-
--- | The ID of the instance.
-insInstanceId :: Lens' Instance Text
-insInstanceId = lens _insInstanceId (\ s a -> s{_insInstanceId = a});
-
--- | The ID of the AMI used to launch the instance.
-insImageId :: Lens' Instance Text
-insImageId = lens _insImageId (\ s a -> s{_insImageId = a});
-
--- | The AMI launch index, which can be used to find this instance in the launch group.
-insAMILaunchIndex :: Lens' Instance Int
-insAMILaunchIndex = lens _insAMILaunchIndex (\ s a -> s{_insAMILaunchIndex = a});
-
--- | The instance type.
-insInstanceType :: Lens' Instance InstanceType
-insInstanceType = lens _insInstanceType (\ s a -> s{_insInstanceType = a});
-
--- | The time the instance was launched.
-insLaunchTime :: Lens' Instance UTCTime
-insLaunchTime = lens _insLaunchTime (\ s a -> s{_insLaunchTime = a}) . _Time;
-
--- | The location where the instance launched, if applicable.
-insPlacement :: Lens' Instance Placement
-insPlacement = lens _insPlacement (\ s a -> s{_insPlacement = a});
-
--- | The monitoring for the instance.
-insMonitoring :: Lens' Instance Monitoring
-insMonitoring = lens _insMonitoring (\ s a -> s{_insMonitoring = a});
-
--- | The architecture of the image.
-insArchitecture :: Lens' Instance ArchitectureValues
-insArchitecture = lens _insArchitecture (\ s a -> s{_insArchitecture = a});
-
--- | The root device type used by the AMI. The AMI can use an EBS volume or an instance store volume.
-insRootDeviceType :: Lens' Instance DeviceType
-insRootDeviceType = lens _insRootDeviceType (\ s a -> s{_insRootDeviceType = a});
-
--- | The virtualization type of the instance.
-insVirtualizationType :: Lens' Instance VirtualizationType
-insVirtualizationType = lens _insVirtualizationType (\ s a -> s{_insVirtualizationType = a});
-
--- | The hypervisor type of the instance.
-insHypervisor :: Lens' Instance HypervisorType
-insHypervisor = lens _insHypervisor (\ s a -> s{_insHypervisor = a});
-
--- | The current state of the instance.
-insState :: Lens' Instance InstanceState
-insState = lens _insState (\ s a -> s{_insState = a});
-
-instance FromXML Instance where
-        parseXML x
-          = Instance' <$>
-              (x .@? "dnsName") <*> (x .@? "platform") <*>
-                (x .@? "groupSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "clientToken")
-                <*> (x .@? "enaSupport")
-                <*> (x .@? "sourceDestCheck")
-                <*> (x .@? "vpcId")
-                <*> (x .@? "keyName")
-                <*>
-                (x .@? "networkInterfaceSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "rootDeviceName")
-                <*> (x .@? "sriovNetSupport")
-                <*> (x .@? "ebsOptimized")
-                <*> (x .@? "reason")
-                <*> (x .@? "instanceLifecycle")
-                <*> (x .@? "iamInstanceProfile")
-                <*> (x .@? "privateIpAddress")
-                <*>
-                (x .@? "productCodes" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "spotInstanceRequestId")
-                <*> (x .@? "privateDnsName")
-                <*> (x .@? "stateReason")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ipAddress")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "instanceId")
-                <*> (x .@ "imageId")
-                <*> (x .@ "amiLaunchIndex")
-                <*> (x .@ "instanceType")
-                <*> (x .@ "launchTime")
-                <*> (x .@ "placement")
-                <*> (x .@ "monitoring")
-                <*> (x .@ "architecture")
-                <*> (x .@ "rootDeviceType")
-                <*> (x .@ "virtualizationType")
-                <*> (x .@ "hypervisor")
-                <*> (x .@ "instanceState")
-
-instance Hashable Instance
-
-instance NFData Instance
-
--- | Describes a block device mapping.
---
---
---
--- /See:/ 'instanceBlockDeviceMapping' smart constructor.
-data InstanceBlockDeviceMapping = InstanceBlockDeviceMapping'
-    { _ibdmEBS        :: !(Maybe EBSInstanceBlockDevice)
-    , _ibdmDeviceName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceBlockDeviceMapping' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ibdmEBS' - Parameters used to automatically set up EBS volumes when the instance is launched.
---
--- * 'ibdmDeviceName' - The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-instanceBlockDeviceMapping
-    :: InstanceBlockDeviceMapping
-instanceBlockDeviceMapping =
-    InstanceBlockDeviceMapping'
-    { _ibdmEBS = Nothing
-    , _ibdmDeviceName = Nothing
-    }
-
--- | Parameters used to automatically set up EBS volumes when the instance is launched.
-ibdmEBS :: Lens' InstanceBlockDeviceMapping (Maybe EBSInstanceBlockDevice)
-ibdmEBS = lens _ibdmEBS (\ s a -> s{_ibdmEBS = a});
-
--- | The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-ibdmDeviceName :: Lens' InstanceBlockDeviceMapping (Maybe Text)
-ibdmDeviceName = lens _ibdmDeviceName (\ s a -> s{_ibdmDeviceName = a});
-
-instance FromXML InstanceBlockDeviceMapping where
-        parseXML x
-          = InstanceBlockDeviceMapping' <$>
-              (x .@? "ebs") <*> (x .@? "deviceName")
-
-instance Hashable InstanceBlockDeviceMapping
-
-instance NFData InstanceBlockDeviceMapping
-
--- | Describes a block device mapping entry.
---
---
---
--- /See:/ 'instanceBlockDeviceMappingSpecification' smart constructor.
-data InstanceBlockDeviceMappingSpecification = InstanceBlockDeviceMappingSpecification'
-    { _ibdmsVirtualName :: !(Maybe Text)
-    , _ibdmsNoDevice    :: !(Maybe Text)
-    , _ibdmsEBS         :: !(Maybe EBSInstanceBlockDeviceSpecification)
-    , _ibdmsDeviceName  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceBlockDeviceMappingSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ibdmsVirtualName' - The virtual device name.
---
--- * 'ibdmsNoDevice' - suppress the specified device included in the block device mapping.
---
--- * 'ibdmsEBS' - Parameters used to automatically set up EBS volumes when the instance is launched.
---
--- * 'ibdmsDeviceName' - The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-instanceBlockDeviceMappingSpecification
-    :: InstanceBlockDeviceMappingSpecification
-instanceBlockDeviceMappingSpecification =
-    InstanceBlockDeviceMappingSpecification'
-    { _ibdmsVirtualName = Nothing
-    , _ibdmsNoDevice = Nothing
-    , _ibdmsEBS = Nothing
-    , _ibdmsDeviceName = Nothing
-    }
-
--- | The virtual device name.
-ibdmsVirtualName :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
-ibdmsVirtualName = lens _ibdmsVirtualName (\ s a -> s{_ibdmsVirtualName = a});
-
--- | suppress the specified device included in the block device mapping.
-ibdmsNoDevice :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
-ibdmsNoDevice = lens _ibdmsNoDevice (\ s a -> s{_ibdmsNoDevice = a});
-
--- | Parameters used to automatically set up EBS volumes when the instance is launched.
-ibdmsEBS :: Lens' InstanceBlockDeviceMappingSpecification (Maybe EBSInstanceBlockDeviceSpecification)
-ibdmsEBS = lens _ibdmsEBS (\ s a -> s{_ibdmsEBS = a});
-
--- | The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-ibdmsDeviceName :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
-ibdmsDeviceName = lens _ibdmsDeviceName (\ s a -> s{_ibdmsDeviceName = a});
-
-instance Hashable
-         InstanceBlockDeviceMappingSpecification
-
-instance NFData
-         InstanceBlockDeviceMappingSpecification
-
-instance ToQuery
-         InstanceBlockDeviceMappingSpecification where
-        toQuery InstanceBlockDeviceMappingSpecification'{..}
-          = mconcat
-              ["VirtualName" =: _ibdmsVirtualName,
-               "NoDevice" =: _ibdmsNoDevice, "Ebs" =: _ibdmsEBS,
-               "DeviceName" =: _ibdmsDeviceName]
-
--- | Information about the instance type that the Dedicated Host supports.
---
---
---
--- /See:/ 'instanceCapacity' smart constructor.
-data InstanceCapacity = InstanceCapacity'
-    { _icAvailableCapacity :: !(Maybe Int)
-    , _icInstanceType      :: !(Maybe Text)
-    , _icTotalCapacity     :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceCapacity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icAvailableCapacity' - The number of instances that can still be launched onto the Dedicated Host.
---
--- * 'icInstanceType' - The instance type size supported by the Dedicated Host.
---
--- * 'icTotalCapacity' - The total number of instances that can be launched onto the Dedicated Host.
-instanceCapacity
-    :: InstanceCapacity
-instanceCapacity =
-    InstanceCapacity'
-    { _icAvailableCapacity = Nothing
-    , _icInstanceType = Nothing
-    , _icTotalCapacity = Nothing
-    }
-
--- | The number of instances that can still be launched onto the Dedicated Host.
-icAvailableCapacity :: Lens' InstanceCapacity (Maybe Int)
-icAvailableCapacity = lens _icAvailableCapacity (\ s a -> s{_icAvailableCapacity = a});
-
--- | The instance type size supported by the Dedicated Host.
-icInstanceType :: Lens' InstanceCapacity (Maybe Text)
-icInstanceType = lens _icInstanceType (\ s a -> s{_icInstanceType = a});
-
--- | The total number of instances that can be launched onto the Dedicated Host.
-icTotalCapacity :: Lens' InstanceCapacity (Maybe Int)
-icTotalCapacity = lens _icTotalCapacity (\ s a -> s{_icTotalCapacity = a});
-
-instance FromXML InstanceCapacity where
-        parseXML x
-          = InstanceCapacity' <$>
-              (x .@? "availableCapacity") <*>
-                (x .@? "instanceType")
-                <*> (x .@? "totalCapacity")
-
-instance Hashable InstanceCapacity
-
-instance NFData InstanceCapacity
-
--- | Describes a Reserved Instance listing state.
---
---
---
--- /See:/ 'instanceCount' smart constructor.
-data InstanceCount = InstanceCount'
-    { _icState         :: !(Maybe ListingState)
-    , _icInstanceCount :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceCount' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icState' - The states of the listed Reserved Instances.
---
--- * 'icInstanceCount' - The number of listed Reserved Instances in the state specified by the @state@ .
-instanceCount
-    :: InstanceCount
-instanceCount =
-    InstanceCount'
-    { _icState = Nothing
-    , _icInstanceCount = Nothing
-    }
-
--- | The states of the listed Reserved Instances.
-icState :: Lens' InstanceCount (Maybe ListingState)
-icState = lens _icState (\ s a -> s{_icState = a});
-
--- | The number of listed Reserved Instances in the state specified by the @state@ .
-icInstanceCount :: Lens' InstanceCount (Maybe Int)
-icInstanceCount = lens _icInstanceCount (\ s a -> s{_icInstanceCount = a});
-
-instance FromXML InstanceCount where
-        parseXML x
-          = InstanceCount' <$>
-              (x .@? "state") <*> (x .@? "instanceCount")
-
-instance Hashable InstanceCount
-
-instance NFData InstanceCount
-
--- | Describes an instance to export.
---
---
---
--- /See:/ 'instanceExportDetails' smart constructor.
-data InstanceExportDetails = InstanceExportDetails'
-    { _iedTargetEnvironment :: !(Maybe ExportEnvironment)
-    , _iedInstanceId        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceExportDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iedTargetEnvironment' - The target virtualization environment.
---
--- * 'iedInstanceId' - The ID of the resource being exported.
-instanceExportDetails
-    :: InstanceExportDetails
-instanceExportDetails =
-    InstanceExportDetails'
-    { _iedTargetEnvironment = Nothing
-    , _iedInstanceId = Nothing
-    }
-
--- | The target virtualization environment.
-iedTargetEnvironment :: Lens' InstanceExportDetails (Maybe ExportEnvironment)
-iedTargetEnvironment = lens _iedTargetEnvironment (\ s a -> s{_iedTargetEnvironment = a});
-
--- | The ID of the resource being exported.
-iedInstanceId :: Lens' InstanceExportDetails (Maybe Text)
-iedInstanceId = lens _iedInstanceId (\ s a -> s{_iedInstanceId = a});
-
-instance FromXML InstanceExportDetails where
-        parseXML x
-          = InstanceExportDetails' <$>
-              (x .@? "targetEnvironment") <*> (x .@? "instanceId")
-
-instance Hashable InstanceExportDetails
-
-instance NFData InstanceExportDetails
-
--- | Describes an IPv6 address.
---
---
---
--- /See:/ 'instanceIPv6Address' smart constructor.
-newtype InstanceIPv6Address = InstanceIPv6Address'
-    { _iiaIPv6Address :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceIPv6Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iiaIPv6Address' - The IPv6 address.
-instanceIPv6Address
-    :: InstanceIPv6Address
-instanceIPv6Address =
-    InstanceIPv6Address'
-    { _iiaIPv6Address = Nothing
-    }
-
--- | The IPv6 address.
-iiaIPv6Address :: Lens' InstanceIPv6Address (Maybe Text)
-iiaIPv6Address = lens _iiaIPv6Address (\ s a -> s{_iiaIPv6Address = a});
-
-instance FromXML InstanceIPv6Address where
-        parseXML x
-          = InstanceIPv6Address' <$> (x .@? "ipv6Address")
-
-instance Hashable InstanceIPv6Address
-
-instance NFData InstanceIPv6Address
-
-instance ToQuery InstanceIPv6Address where
-        toQuery InstanceIPv6Address'{..}
-          = mconcat ["Ipv6Address" =: _iiaIPv6Address]
-
--- | Describes the monitoring of an instance.
---
---
---
--- /See:/ 'instanceMonitoring' smart constructor.
-data InstanceMonitoring = InstanceMonitoring'
-    { _imInstanceId :: !(Maybe Text)
-    , _imMonitoring :: !(Maybe Monitoring)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceMonitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'imInstanceId' - The ID of the instance.
---
--- * 'imMonitoring' - The monitoring for the instance.
-instanceMonitoring
-    :: InstanceMonitoring
-instanceMonitoring =
-    InstanceMonitoring'
-    { _imInstanceId = Nothing
-    , _imMonitoring = Nothing
-    }
-
--- | The ID of the instance.
-imInstanceId :: Lens' InstanceMonitoring (Maybe Text)
-imInstanceId = lens _imInstanceId (\ s a -> s{_imInstanceId = a});
-
--- | The monitoring for the instance.
-imMonitoring :: Lens' InstanceMonitoring (Maybe Monitoring)
-imMonitoring = lens _imMonitoring (\ s a -> s{_imMonitoring = a});
-
-instance FromXML InstanceMonitoring where
-        parseXML x
-          = InstanceMonitoring' <$>
-              (x .@? "instanceId") <*> (x .@? "monitoring")
-
-instance Hashable InstanceMonitoring
-
-instance NFData InstanceMonitoring
-
--- | Describes a network interface.
---
---
---
--- /See:/ 'instanceNetworkInterface' smart constructor.
-data InstanceNetworkInterface = InstanceNetworkInterface'
-    { _iniGroups             :: !(Maybe [GroupIdentifier])
-    , _iniStatus             :: !(Maybe NetworkInterfaceStatus)
-    , _iniPrivateIPAddresses :: !(Maybe [InstancePrivateIPAddress])
-    , _iniSourceDestCheck    :: !(Maybe Bool)
-    , _iniVPCId              :: !(Maybe Text)
-    , _iniNetworkInterfaceId :: !(Maybe Text)
-    , _iniSubnetId           :: !(Maybe Text)
-    , _iniMACAddress         :: !(Maybe Text)
-    , _iniAttachment         :: !(Maybe InstanceNetworkInterfaceAttachment)
-    , _iniOwnerId            :: !(Maybe Text)
-    , _iniPrivateIPAddress   :: !(Maybe Text)
-    , _iniPrivateDNSName     :: !(Maybe Text)
-    , _iniDescription        :: !(Maybe Text)
-    , _iniAssociation        :: !(Maybe InstanceNetworkInterfaceAssociation)
-    , _iniIPv6Addresses      :: !(Maybe [InstanceIPv6Address])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iniGroups' - One or more security groups.
---
--- * 'iniStatus' - The status of the network interface.
---
--- * 'iniPrivateIPAddresses' - One or more private IPv4 addresses associated with the network interface.
---
--- * 'iniSourceDestCheck' - Indicates whether to validate network traffic to or from this network interface.
---
--- * 'iniVPCId' - The ID of the VPC.
---
--- * 'iniNetworkInterfaceId' - The ID of the network interface.
---
--- * 'iniSubnetId' - The ID of the subnet.
---
--- * 'iniMACAddress' - The MAC address.
---
--- * 'iniAttachment' - The network interface attachment.
---
--- * 'iniOwnerId' - The ID of the AWS account that created the network interface.
---
--- * 'iniPrivateIPAddress' - The IPv4 address of the network interface within the subnet.
---
--- * 'iniPrivateDNSName' - The private DNS name.
---
--- * 'iniDescription' - The description.
---
--- * 'iniAssociation' - The association information for an Elastic IPv4 associated with the network interface.
---
--- * 'iniIPv6Addresses' - One or more IPv6 addresses associated with the network interface.
-instanceNetworkInterface
-    :: InstanceNetworkInterface
-instanceNetworkInterface =
-    InstanceNetworkInterface'
-    { _iniGroups = Nothing
-    , _iniStatus = Nothing
-    , _iniPrivateIPAddresses = Nothing
-    , _iniSourceDestCheck = Nothing
-    , _iniVPCId = Nothing
-    , _iniNetworkInterfaceId = Nothing
-    , _iniSubnetId = Nothing
-    , _iniMACAddress = Nothing
-    , _iniAttachment = Nothing
-    , _iniOwnerId = Nothing
-    , _iniPrivateIPAddress = Nothing
-    , _iniPrivateDNSName = Nothing
-    , _iniDescription = Nothing
-    , _iniAssociation = Nothing
-    , _iniIPv6Addresses = Nothing
-    }
-
--- | One or more security groups.
-iniGroups :: Lens' InstanceNetworkInterface [GroupIdentifier]
-iniGroups = lens _iniGroups (\ s a -> s{_iniGroups = a}) . _Default . _Coerce;
-
--- | The status of the network interface.
-iniStatus :: Lens' InstanceNetworkInterface (Maybe NetworkInterfaceStatus)
-iniStatus = lens _iniStatus (\ s a -> s{_iniStatus = a});
-
--- | One or more private IPv4 addresses associated with the network interface.
-iniPrivateIPAddresses :: Lens' InstanceNetworkInterface [InstancePrivateIPAddress]
-iniPrivateIPAddresses = lens _iniPrivateIPAddresses (\ s a -> s{_iniPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | Indicates whether to validate network traffic to or from this network interface.
-iniSourceDestCheck :: Lens' InstanceNetworkInterface (Maybe Bool)
-iniSourceDestCheck = lens _iniSourceDestCheck (\ s a -> s{_iniSourceDestCheck = a});
-
--- | The ID of the VPC.
-iniVPCId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniVPCId = lens _iniVPCId (\ s a -> s{_iniVPCId = a});
-
--- | The ID of the network interface.
-iniNetworkInterfaceId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniNetworkInterfaceId = lens _iniNetworkInterfaceId (\ s a -> s{_iniNetworkInterfaceId = a});
-
--- | The ID of the subnet.
-iniSubnetId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniSubnetId = lens _iniSubnetId (\ s a -> s{_iniSubnetId = a});
-
--- | The MAC address.
-iniMACAddress :: Lens' InstanceNetworkInterface (Maybe Text)
-iniMACAddress = lens _iniMACAddress (\ s a -> s{_iniMACAddress = a});
-
--- | The network interface attachment.
-iniAttachment :: Lens' InstanceNetworkInterface (Maybe InstanceNetworkInterfaceAttachment)
-iniAttachment = lens _iniAttachment (\ s a -> s{_iniAttachment = a});
-
--- | The ID of the AWS account that created the network interface.
-iniOwnerId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniOwnerId = lens _iniOwnerId (\ s a -> s{_iniOwnerId = a});
-
--- | The IPv4 address of the network interface within the subnet.
-iniPrivateIPAddress :: Lens' InstanceNetworkInterface (Maybe Text)
-iniPrivateIPAddress = lens _iniPrivateIPAddress (\ s a -> s{_iniPrivateIPAddress = a});
-
--- | The private DNS name.
-iniPrivateDNSName :: Lens' InstanceNetworkInterface (Maybe Text)
-iniPrivateDNSName = lens _iniPrivateDNSName (\ s a -> s{_iniPrivateDNSName = a});
-
--- | The description.
-iniDescription :: Lens' InstanceNetworkInterface (Maybe Text)
-iniDescription = lens _iniDescription (\ s a -> s{_iniDescription = a});
-
--- | The association information for an Elastic IPv4 associated with the network interface.
-iniAssociation :: Lens' InstanceNetworkInterface (Maybe InstanceNetworkInterfaceAssociation)
-iniAssociation = lens _iniAssociation (\ s a -> s{_iniAssociation = a});
-
--- | One or more IPv6 addresses associated with the network interface.
-iniIPv6Addresses :: Lens' InstanceNetworkInterface [InstanceIPv6Address]
-iniIPv6Addresses = lens _iniIPv6Addresses (\ s a -> s{_iniIPv6Addresses = a}) . _Default . _Coerce;
-
-instance FromXML InstanceNetworkInterface where
-        parseXML x
-          = InstanceNetworkInterface' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "status")
-                <*>
-                (x .@? "privateIpAddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "sourceDestCheck")
-                <*> (x .@? "vpcId")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "macAddress")
-                <*> (x .@? "attachment")
-                <*> (x .@? "ownerId")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "privateDnsName")
-                <*> (x .@? "description")
-                <*> (x .@? "association")
-                <*>
-                (x .@? "ipv6AddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable InstanceNetworkInterface
-
-instance NFData InstanceNetworkInterface
-
--- | Describes association information for an Elastic IP address (IPv4).
---
---
---
--- /See:/ 'instanceNetworkInterfaceAssociation' smart constructor.
-data InstanceNetworkInterfaceAssociation = InstanceNetworkInterfaceAssociation'
-    { _iniaPublicDNSName :: !(Maybe Text)
-    , _iniaIPOwnerId     :: !(Maybe Text)
-    , _iniaPublicIP      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterfaceAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iniaPublicDNSName' - The public DNS name.
---
--- * 'iniaIPOwnerId' - The ID of the owner of the Elastic IP address.
---
--- * 'iniaPublicIP' - The public IP address or Elastic IP address bound to the network interface.
-instanceNetworkInterfaceAssociation
-    :: InstanceNetworkInterfaceAssociation
-instanceNetworkInterfaceAssociation =
-    InstanceNetworkInterfaceAssociation'
-    { _iniaPublicDNSName = Nothing
-    , _iniaIPOwnerId = Nothing
-    , _iniaPublicIP = Nothing
-    }
-
--- | The public DNS name.
-iniaPublicDNSName :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
-iniaPublicDNSName = lens _iniaPublicDNSName (\ s a -> s{_iniaPublicDNSName = a});
-
--- | The ID of the owner of the Elastic IP address.
-iniaIPOwnerId :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
-iniaIPOwnerId = lens _iniaIPOwnerId (\ s a -> s{_iniaIPOwnerId = a});
-
--- | The public IP address or Elastic IP address bound to the network interface.
-iniaPublicIP :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
-iniaPublicIP = lens _iniaPublicIP (\ s a -> s{_iniaPublicIP = a});
-
-instance FromXML InstanceNetworkInterfaceAssociation
-         where
-        parseXML x
-          = InstanceNetworkInterfaceAssociation' <$>
-              (x .@? "publicDnsName") <*> (x .@? "ipOwnerId") <*>
-                (x .@? "publicIp")
-
-instance Hashable InstanceNetworkInterfaceAssociation
-
-instance NFData InstanceNetworkInterfaceAssociation
-
--- | Describes a network interface attachment.
---
---
---
--- /See:/ 'instanceNetworkInterfaceAttachment' smart constructor.
-data InstanceNetworkInterfaceAttachment = InstanceNetworkInterfaceAttachment'
-    { _iniaStatus              :: !(Maybe AttachmentStatus)
-    , _iniaDeleteOnTermination :: !(Maybe Bool)
-    , _iniaAttachmentId        :: !(Maybe Text)
-    , _iniaAttachTime          :: !(Maybe ISO8601)
-    , _iniaDeviceIndex         :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterfaceAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iniaStatus' - The attachment state.
---
--- * 'iniaDeleteOnTermination' - Indicates whether the network interface is deleted when the instance is terminated.
---
--- * 'iniaAttachmentId' - The ID of the network interface attachment.
---
--- * 'iniaAttachTime' - The time stamp when the attachment initiated.
---
--- * 'iniaDeviceIndex' - The index of the device on the instance for the network interface attachment.
-instanceNetworkInterfaceAttachment
-    :: InstanceNetworkInterfaceAttachment
-instanceNetworkInterfaceAttachment =
-    InstanceNetworkInterfaceAttachment'
-    { _iniaStatus = Nothing
-    , _iniaDeleteOnTermination = Nothing
-    , _iniaAttachmentId = Nothing
-    , _iniaAttachTime = Nothing
-    , _iniaDeviceIndex = Nothing
-    }
-
--- | The attachment state.
-iniaStatus :: Lens' InstanceNetworkInterfaceAttachment (Maybe AttachmentStatus)
-iniaStatus = lens _iniaStatus (\ s a -> s{_iniaStatus = a});
-
--- | Indicates whether the network interface is deleted when the instance is terminated.
-iniaDeleteOnTermination :: Lens' InstanceNetworkInterfaceAttachment (Maybe Bool)
-iniaDeleteOnTermination = lens _iniaDeleteOnTermination (\ s a -> s{_iniaDeleteOnTermination = a});
-
--- | The ID of the network interface attachment.
-iniaAttachmentId :: Lens' InstanceNetworkInterfaceAttachment (Maybe Text)
-iniaAttachmentId = lens _iniaAttachmentId (\ s a -> s{_iniaAttachmentId = a});
-
--- | The time stamp when the attachment initiated.
-iniaAttachTime :: Lens' InstanceNetworkInterfaceAttachment (Maybe UTCTime)
-iniaAttachTime = lens _iniaAttachTime (\ s a -> s{_iniaAttachTime = a}) . mapping _Time;
-
--- | The index of the device on the instance for the network interface attachment.
-iniaDeviceIndex :: Lens' InstanceNetworkInterfaceAttachment (Maybe Int)
-iniaDeviceIndex = lens _iniaDeviceIndex (\ s a -> s{_iniaDeviceIndex = a});
-
-instance FromXML InstanceNetworkInterfaceAttachment
-         where
-        parseXML x
-          = InstanceNetworkInterfaceAttachment' <$>
-              (x .@? "status") <*> (x .@? "deleteOnTermination")
-                <*> (x .@? "attachmentId")
-                <*> (x .@? "attachTime")
-                <*> (x .@? "deviceIndex")
-
-instance Hashable InstanceNetworkInterfaceAttachment
-
-instance NFData InstanceNetworkInterfaceAttachment
-
--- | Describes a network interface.
---
---
---
--- /See:/ 'instanceNetworkInterfaceSpecification' smart constructor.
-data InstanceNetworkInterfaceSpecification = InstanceNetworkInterfaceSpecification'
-    { _inisGroups                         :: !(Maybe [Text])
-    , _inisPrivateIPAddresses             :: !(Maybe [PrivateIPAddressSpecification])
-    , _inisDeleteOnTermination            :: !(Maybe Bool)
-    , _inisAssociatePublicIPAddress       :: !(Maybe Bool)
-    , _inisNetworkInterfaceId             :: !(Maybe Text)
-    , _inisSubnetId                       :: !(Maybe Text)
-    , _inisIPv6AddressCount               :: !(Maybe Int)
-    , _inisPrivateIPAddress               :: !(Maybe Text)
-    , _inisSecondaryPrivateIPAddressCount :: !(Maybe Int)
-    , _inisDescription                    :: !(Maybe Text)
-    , _inisDeviceIndex                    :: !(Maybe Int)
-    , _inisIPv6Addresses                  :: !(Maybe [InstanceIPv6Address])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterfaceSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'inisGroups' - The IDs of the security groups for the network interface. Applies only if creating a network interface when launching an instance.
---
--- * 'inisPrivateIPAddresses' - One or more private IPv4 addresses to assign to the network interface. Only one private IPv4 address can be designated as primary. You cannot specify this option if you're launching more than one instance in a 'RunInstances' request.
---
--- * 'inisDeleteOnTermination' - If set to @true@ , the interface is deleted when the instance is terminated. You can specify @true@ only if creating a new network interface when launching an instance.
---
--- * 'inisAssociatePublicIPAddress' - Indicates whether to assign a public IPv4 address to an instance you launch in a VPC. The public IP address can only be assigned to a network interface for eth0, and can only be assigned to a new network interface, not an existing one. You cannot specify more than one network interface in the request. If launching into a default subnet, the default value is @true@ .
---
--- * 'inisNetworkInterfaceId' - The ID of the network interface.
---
--- * 'inisSubnetId' - The ID of the subnet associated with the network string. Applies only if creating a network interface when launching an instance.
---
--- * 'inisIPv6AddressCount' - A number of IPv6 addresses to assign to the network interface. Amazon EC2 chooses the IPv6 addresses from the range of the subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.
---
--- * 'inisPrivateIPAddress' - The private IPv4 address of the network interface. Applies only if creating a network interface when launching an instance. You cannot specify this option if you're launching more than one instance in a 'RunInstances' request.
---
--- * 'inisSecondaryPrivateIPAddressCount' - The number of secondary private IPv4 addresses. You can't specify this option and specify more than one private IP address using the private IP addresses option. You cannot specify this option if you're launching more than one instance in a 'RunInstances' request.
---
--- * 'inisDescription' - The description of the network interface. Applies only if creating a network interface when launching an instance.
---
--- * 'inisDeviceIndex' - The index of the device on the instance for the network interface attachment. If you are specifying a network interface in a 'RunInstances' request, you must provide the device index.
---
--- * 'inisIPv6Addresses' - One or more IPv6 addresses to assign to the network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.
-instanceNetworkInterfaceSpecification
-    :: InstanceNetworkInterfaceSpecification
-instanceNetworkInterfaceSpecification =
-    InstanceNetworkInterfaceSpecification'
-    { _inisGroups = Nothing
-    , _inisPrivateIPAddresses = Nothing
-    , _inisDeleteOnTermination = Nothing
-    , _inisAssociatePublicIPAddress = Nothing
-    , _inisNetworkInterfaceId = Nothing
-    , _inisSubnetId = Nothing
-    , _inisIPv6AddressCount = Nothing
-    , _inisPrivateIPAddress = Nothing
-    , _inisSecondaryPrivateIPAddressCount = Nothing
-    , _inisDescription = Nothing
-    , _inisDeviceIndex = Nothing
-    , _inisIPv6Addresses = Nothing
-    }
-
--- | The IDs of the security groups for the network interface. Applies only if creating a network interface when launching an instance.
-inisGroups :: Lens' InstanceNetworkInterfaceSpecification [Text]
-inisGroups = lens _inisGroups (\ s a -> s{_inisGroups = a}) . _Default . _Coerce;
-
--- | One or more private IPv4 addresses to assign to the network interface. Only one private IPv4 address can be designated as primary. You cannot specify this option if you're launching more than one instance in a 'RunInstances' request.
-inisPrivateIPAddresses :: Lens' InstanceNetworkInterfaceSpecification [PrivateIPAddressSpecification]
-inisPrivateIPAddresses = lens _inisPrivateIPAddresses (\ s a -> s{_inisPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | If set to @true@ , the interface is deleted when the instance is terminated. You can specify @true@ only if creating a new network interface when launching an instance.
-inisDeleteOnTermination :: Lens' InstanceNetworkInterfaceSpecification (Maybe Bool)
-inisDeleteOnTermination = lens _inisDeleteOnTermination (\ s a -> s{_inisDeleteOnTermination = a});
-
--- | Indicates whether to assign a public IPv4 address to an instance you launch in a VPC. The public IP address can only be assigned to a network interface for eth0, and can only be assigned to a new network interface, not an existing one. You cannot specify more than one network interface in the request. If launching into a default subnet, the default value is @true@ .
-inisAssociatePublicIPAddress :: Lens' InstanceNetworkInterfaceSpecification (Maybe Bool)
-inisAssociatePublicIPAddress = lens _inisAssociatePublicIPAddress (\ s a -> s{_inisAssociatePublicIPAddress = a});
-
--- | The ID of the network interface.
-inisNetworkInterfaceId :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisNetworkInterfaceId = lens _inisNetworkInterfaceId (\ s a -> s{_inisNetworkInterfaceId = a});
-
--- | The ID of the subnet associated with the network string. Applies only if creating a network interface when launching an instance.
-inisSubnetId :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisSubnetId = lens _inisSubnetId (\ s a -> s{_inisSubnetId = a});
-
--- | A number of IPv6 addresses to assign to the network interface. Amazon EC2 chooses the IPv6 addresses from the range of the subnet. You cannot specify this option and the option to assign specific IPv6 addresses in the same request. You can specify this option if you've specified a minimum number of instances to launch.
-inisIPv6AddressCount :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
-inisIPv6AddressCount = lens _inisIPv6AddressCount (\ s a -> s{_inisIPv6AddressCount = a});
-
--- | The private IPv4 address of the network interface. Applies only if creating a network interface when launching an instance. You cannot specify this option if you're launching more than one instance in a 'RunInstances' request.
-inisPrivateIPAddress :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisPrivateIPAddress = lens _inisPrivateIPAddress (\ s a -> s{_inisPrivateIPAddress = a});
-
--- | The number of secondary private IPv4 addresses. You can't specify this option and specify more than one private IP address using the private IP addresses option. You cannot specify this option if you're launching more than one instance in a 'RunInstances' request.
-inisSecondaryPrivateIPAddressCount :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
-inisSecondaryPrivateIPAddressCount = lens _inisSecondaryPrivateIPAddressCount (\ s a -> s{_inisSecondaryPrivateIPAddressCount = a});
-
--- | The description of the network interface. Applies only if creating a network interface when launching an instance.
-inisDescription :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisDescription = lens _inisDescription (\ s a -> s{_inisDescription = a});
-
--- | The index of the device on the instance for the network interface attachment. If you are specifying a network interface in a 'RunInstances' request, you must provide the device index.
-inisDeviceIndex :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
-inisDeviceIndex = lens _inisDeviceIndex (\ s a -> s{_inisDeviceIndex = a});
-
--- | One or more IPv6 addresses to assign to the network interface. You cannot specify this option and the option to assign a number of IPv6 addresses in the same request. You cannot specify this option if you've specified a minimum number of instances to launch.
-inisIPv6Addresses :: Lens' InstanceNetworkInterfaceSpecification [InstanceIPv6Address]
-inisIPv6Addresses = lens _inisIPv6Addresses (\ s a -> s{_inisIPv6Addresses = a}) . _Default . _Coerce;
-
-instance FromXML
-         InstanceNetworkInterfaceSpecification where
-        parseXML x
-          = InstanceNetworkInterfaceSpecification' <$>
-              (x .@? "SecurityGroupId" .!@ mempty >>=
-                 may (parseXMLList "SecurityGroupId"))
-                <*>
-                (x .@? "privateIpAddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "deleteOnTermination")
-                <*> (x .@? "associatePublicIpAddress")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "ipv6AddressCount")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "secondaryPrivateIpAddressCount")
-                <*> (x .@? "description")
-                <*> (x .@? "deviceIndex")
-                <*>
-                (x .@? "ipv6AddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable
-         InstanceNetworkInterfaceSpecification
-
-instance NFData InstanceNetworkInterfaceSpecification
-
-instance ToQuery
-         InstanceNetworkInterfaceSpecification where
-        toQuery InstanceNetworkInterfaceSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "SecurityGroupId" <$> _inisGroups),
-               toQuery
-                 (toQueryList "PrivateIpAddresses" <$>
-                    _inisPrivateIPAddresses),
-               "DeleteOnTermination" =: _inisDeleteOnTermination,
-               "AssociatePublicIpAddress" =:
-                 _inisAssociatePublicIPAddress,
-               "NetworkInterfaceId" =: _inisNetworkInterfaceId,
-               "SubnetId" =: _inisSubnetId,
-               "Ipv6AddressCount" =: _inisIPv6AddressCount,
-               "PrivateIpAddress" =: _inisPrivateIPAddress,
-               "SecondaryPrivateIpAddressCount" =:
-                 _inisSecondaryPrivateIPAddressCount,
-               "Description" =: _inisDescription,
-               "DeviceIndex" =: _inisDeviceIndex,
-               toQuery
-                 (toQueryList "Ipv6Addresses" <$> _inisIPv6Addresses)]
-
--- | Describes a private IPv4 address.
---
---
---
--- /See:/ 'instancePrivateIPAddress' smart constructor.
-data InstancePrivateIPAddress = InstancePrivateIPAddress'
-    { _ipiaPrimary          :: !(Maybe Bool)
-    , _ipiaPrivateIPAddress :: !(Maybe Text)
-    , _ipiaPrivateDNSName   :: !(Maybe Text)
-    , _ipiaAssociation      :: !(Maybe InstanceNetworkInterfaceAssociation)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstancePrivateIPAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipiaPrimary' - Indicates whether this IPv4 address is the primary private IP address of the network interface.
---
--- * 'ipiaPrivateIPAddress' - The private IPv4 address of the network interface.
---
--- * 'ipiaPrivateDNSName' - The private IPv4 DNS name.
---
--- * 'ipiaAssociation' - The association information for an Elastic IP address for the network interface.
-instancePrivateIPAddress
-    :: InstancePrivateIPAddress
-instancePrivateIPAddress =
-    InstancePrivateIPAddress'
-    { _ipiaPrimary = Nothing
-    , _ipiaPrivateIPAddress = Nothing
-    , _ipiaPrivateDNSName = Nothing
-    , _ipiaAssociation = Nothing
-    }
-
--- | Indicates whether this IPv4 address is the primary private IP address of the network interface.
-ipiaPrimary :: Lens' InstancePrivateIPAddress (Maybe Bool)
-ipiaPrimary = lens _ipiaPrimary (\ s a -> s{_ipiaPrimary = a});
-
--- | The private IPv4 address of the network interface.
-ipiaPrivateIPAddress :: Lens' InstancePrivateIPAddress (Maybe Text)
-ipiaPrivateIPAddress = lens _ipiaPrivateIPAddress (\ s a -> s{_ipiaPrivateIPAddress = a});
-
--- | The private IPv4 DNS name.
-ipiaPrivateDNSName :: Lens' InstancePrivateIPAddress (Maybe Text)
-ipiaPrivateDNSName = lens _ipiaPrivateDNSName (\ s a -> s{_ipiaPrivateDNSName = a});
-
--- | The association information for an Elastic IP address for the network interface.
-ipiaAssociation :: Lens' InstancePrivateIPAddress (Maybe InstanceNetworkInterfaceAssociation)
-ipiaAssociation = lens _ipiaAssociation (\ s a -> s{_ipiaAssociation = a});
-
-instance FromXML InstancePrivateIPAddress where
-        parseXML x
-          = InstancePrivateIPAddress' <$>
-              (x .@? "primary") <*> (x .@? "privateIpAddress") <*>
-                (x .@? "privateDnsName")
-                <*> (x .@? "association")
-
-instance Hashable InstancePrivateIPAddress
-
-instance NFData InstancePrivateIPAddress
-
--- | Describes the current state of an instance.
---
---
---
--- /See:/ 'instanceState' smart constructor.
-data InstanceState = InstanceState'
-    { _isName :: !InstanceStateName
-    , _isCode :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isName' - The current state of the instance.
---
--- * 'isCode' - The low byte represents the state. The high byte is an opaque internal value and should be ignored.     * @0@ : @pending@      * @16@ : @running@      * @32@ : @shutting-down@      * @48@ : @terminated@      * @64@ : @stopping@      * @80@ : @stopped@
-instanceState
-    :: InstanceStateName -- ^ 'isName'
-    -> Int -- ^ 'isCode'
-    -> InstanceState
-instanceState pName_ pCode_ =
-    InstanceState'
-    { _isName = pName_
-    , _isCode = pCode_
-    }
-
--- | The current state of the instance.
-isName :: Lens' InstanceState InstanceStateName
-isName = lens _isName (\ s a -> s{_isName = a});
-
--- | The low byte represents the state. The high byte is an opaque internal value and should be ignored.     * @0@ : @pending@      * @16@ : @running@      * @32@ : @shutting-down@      * @48@ : @terminated@      * @64@ : @stopping@      * @80@ : @stopped@
-isCode :: Lens' InstanceState Int
-isCode = lens _isCode (\ s a -> s{_isCode = a});
-
-instance FromXML InstanceState where
-        parseXML x
-          = InstanceState' <$> (x .@ "name") <*> (x .@ "code")
-
-instance Hashable InstanceState
-
-instance NFData InstanceState
-
--- | Describes an instance state change.
---
---
---
--- /See:/ 'instanceStateChange' smart constructor.
-data InstanceStateChange = InstanceStateChange'
-    { _iscInstanceId    :: !(Maybe Text)
-    , _iscCurrentState  :: !(Maybe InstanceState)
-    , _iscPreviousState :: !(Maybe InstanceState)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStateChange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iscInstanceId' - The ID of the instance.
---
--- * 'iscCurrentState' - The current state of the instance.
---
--- * 'iscPreviousState' - The previous state of the instance.
-instanceStateChange
-    :: InstanceStateChange
-instanceStateChange =
-    InstanceStateChange'
-    { _iscInstanceId = Nothing
-    , _iscCurrentState = Nothing
-    , _iscPreviousState = Nothing
-    }
-
--- | The ID of the instance.
-iscInstanceId :: Lens' InstanceStateChange (Maybe Text)
-iscInstanceId = lens _iscInstanceId (\ s a -> s{_iscInstanceId = a});
-
--- | The current state of the instance.
-iscCurrentState :: Lens' InstanceStateChange (Maybe InstanceState)
-iscCurrentState = lens _iscCurrentState (\ s a -> s{_iscCurrentState = a});
-
--- | The previous state of the instance.
-iscPreviousState :: Lens' InstanceStateChange (Maybe InstanceState)
-iscPreviousState = lens _iscPreviousState (\ s a -> s{_iscPreviousState = a});
-
-instance FromXML InstanceStateChange where
-        parseXML x
-          = InstanceStateChange' <$>
-              (x .@? "instanceId") <*> (x .@? "currentState") <*>
-                (x .@? "previousState")
-
-instance Hashable InstanceStateChange
-
-instance NFData InstanceStateChange
-
--- | Describes the status of an instance.
---
---
---
--- /See:/ 'instanceStatus' smart constructor.
-data InstanceStatus = InstanceStatus'
-    { _isInstanceId       :: !(Maybe Text)
-    , _isSystemStatus     :: !(Maybe InstanceStatusSummary)
-    , _isEvents           :: !(Maybe [InstanceStatusEvent])
-    , _isAvailabilityZone :: !(Maybe Text)
-    , _isInstanceStatus   :: !(Maybe InstanceStatusSummary)
-    , _isInstanceState    :: !(Maybe InstanceState)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isInstanceId' - The ID of the instance.
---
--- * 'isSystemStatus' - Reports impaired functionality that stems from issues related to the systems that support an instance, such as hardware failures and network connectivity problems.
---
--- * 'isEvents' - Any scheduled events associated with the instance.
---
--- * 'isAvailabilityZone' - The Availability Zone of the instance.
---
--- * 'isInstanceStatus' - Reports impaired functionality that stems from issues internal to the instance, such as impaired reachability.
---
--- * 'isInstanceState' - The intended state of the instance. 'DescribeInstanceStatus' requires that an instance be in the @running@ state.
-instanceStatus
-    :: InstanceStatus
-instanceStatus =
-    InstanceStatus'
-    { _isInstanceId = Nothing
-    , _isSystemStatus = Nothing
-    , _isEvents = Nothing
-    , _isAvailabilityZone = Nothing
-    , _isInstanceStatus = Nothing
-    , _isInstanceState = Nothing
-    }
-
--- | The ID of the instance.
-isInstanceId :: Lens' InstanceStatus (Maybe Text)
-isInstanceId = lens _isInstanceId (\ s a -> s{_isInstanceId = a});
-
--- | Reports impaired functionality that stems from issues related to the systems that support an instance, such as hardware failures and network connectivity problems.
-isSystemStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
-isSystemStatus = lens _isSystemStatus (\ s a -> s{_isSystemStatus = a});
-
--- | Any scheduled events associated with the instance.
-isEvents :: Lens' InstanceStatus [InstanceStatusEvent]
-isEvents = lens _isEvents (\ s a -> s{_isEvents = a}) . _Default . _Coerce;
-
--- | The Availability Zone of the instance.
-isAvailabilityZone :: Lens' InstanceStatus (Maybe Text)
-isAvailabilityZone = lens _isAvailabilityZone (\ s a -> s{_isAvailabilityZone = a});
-
--- | Reports impaired functionality that stems from issues internal to the instance, such as impaired reachability.
-isInstanceStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
-isInstanceStatus = lens _isInstanceStatus (\ s a -> s{_isInstanceStatus = a});
-
--- | The intended state of the instance. 'DescribeInstanceStatus' requires that an instance be in the @running@ state.
-isInstanceState :: Lens' InstanceStatus (Maybe InstanceState)
-isInstanceState = lens _isInstanceState (\ s a -> s{_isInstanceState = a});
-
-instance FromXML InstanceStatus where
-        parseXML x
-          = InstanceStatus' <$>
-              (x .@? "instanceId") <*> (x .@? "systemStatus") <*>
-                (x .@? "eventsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "instanceStatus")
-                <*> (x .@? "instanceState")
-
-instance Hashable InstanceStatus
-
-instance NFData InstanceStatus
-
--- | Describes the instance status.
---
---
---
--- /See:/ 'instanceStatusDetails' smart constructor.
-data InstanceStatusDetails = InstanceStatusDetails'
-    { _isdStatus        :: !(Maybe StatusType)
-    , _isdImpairedSince :: !(Maybe ISO8601)
-    , _isdName          :: !(Maybe StatusName)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatusDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isdStatus' - The status.
---
--- * 'isdImpairedSince' - The time when a status check failed. For an instance that was launched and impaired, this is the time when the instance was launched.
---
--- * 'isdName' - The type of instance status.
-instanceStatusDetails
-    :: InstanceStatusDetails
-instanceStatusDetails =
-    InstanceStatusDetails'
-    { _isdStatus = Nothing
-    , _isdImpairedSince = Nothing
-    , _isdName = Nothing
-    }
-
--- | The status.
-isdStatus :: Lens' InstanceStatusDetails (Maybe StatusType)
-isdStatus = lens _isdStatus (\ s a -> s{_isdStatus = a});
-
--- | The time when a status check failed. For an instance that was launched and impaired, this is the time when the instance was launched.
-isdImpairedSince :: Lens' InstanceStatusDetails (Maybe UTCTime)
-isdImpairedSince = lens _isdImpairedSince (\ s a -> s{_isdImpairedSince = a}) . mapping _Time;
-
--- | The type of instance status.
-isdName :: Lens' InstanceStatusDetails (Maybe StatusName)
-isdName = lens _isdName (\ s a -> s{_isdName = a});
-
-instance FromXML InstanceStatusDetails where
-        parseXML x
-          = InstanceStatusDetails' <$>
-              (x .@? "status") <*> (x .@? "impairedSince") <*>
-                (x .@? "name")
-
-instance Hashable InstanceStatusDetails
-
-instance NFData InstanceStatusDetails
-
--- | Describes a scheduled event for an instance.
---
---
---
--- /See:/ 'instanceStatusEvent' smart constructor.
-data InstanceStatusEvent = InstanceStatusEvent'
-    { _iseNotBefore   :: !(Maybe ISO8601)
-    , _iseCode        :: !(Maybe EventCode)
-    , _iseDescription :: !(Maybe Text)
-    , _iseNotAfter    :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatusEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iseNotBefore' - The earliest scheduled start time for the event.
---
--- * 'iseCode' - The event code.
---
--- * 'iseDescription' - A description of the event. After a scheduled event is completed, it can still be described for up to a week. If the event has been completed, this description starts with the following text: [Completed].
---
--- * 'iseNotAfter' - The latest scheduled end time for the event.
-instanceStatusEvent
-    :: InstanceStatusEvent
-instanceStatusEvent =
-    InstanceStatusEvent'
-    { _iseNotBefore = Nothing
-    , _iseCode = Nothing
-    , _iseDescription = Nothing
-    , _iseNotAfter = Nothing
-    }
-
--- | The earliest scheduled start time for the event.
-iseNotBefore :: Lens' InstanceStatusEvent (Maybe UTCTime)
-iseNotBefore = lens _iseNotBefore (\ s a -> s{_iseNotBefore = a}) . mapping _Time;
-
--- | The event code.
-iseCode :: Lens' InstanceStatusEvent (Maybe EventCode)
-iseCode = lens _iseCode (\ s a -> s{_iseCode = a});
-
--- | A description of the event. After a scheduled event is completed, it can still be described for up to a week. If the event has been completed, this description starts with the following text: [Completed].
-iseDescription :: Lens' InstanceStatusEvent (Maybe Text)
-iseDescription = lens _iseDescription (\ s a -> s{_iseDescription = a});
-
--- | The latest scheduled end time for the event.
-iseNotAfter :: Lens' InstanceStatusEvent (Maybe UTCTime)
-iseNotAfter = lens _iseNotAfter (\ s a -> s{_iseNotAfter = a}) . mapping _Time;
-
-instance FromXML InstanceStatusEvent where
-        parseXML x
-          = InstanceStatusEvent' <$>
-              (x .@? "notBefore") <*> (x .@? "code") <*>
-                (x .@? "description")
-                <*> (x .@? "notAfter")
-
-instance Hashable InstanceStatusEvent
-
-instance NFData InstanceStatusEvent
-
--- | Describes the status of an instance.
---
---
---
--- /See:/ 'instanceStatusSummary' smart constructor.
-data InstanceStatusSummary = InstanceStatusSummary'
-    { _issDetails :: !(Maybe [InstanceStatusDetails])
-    , _issStatus  :: !SummaryStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatusSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'issDetails' - The system instance health or application instance health.
---
--- * 'issStatus' - The status.
-instanceStatusSummary
-    :: SummaryStatus -- ^ 'issStatus'
-    -> InstanceStatusSummary
-instanceStatusSummary pStatus_ =
-    InstanceStatusSummary'
-    { _issDetails = Nothing
-    , _issStatus = pStatus_
-    }
-
--- | The system instance health or application instance health.
-issDetails :: Lens' InstanceStatusSummary [InstanceStatusDetails]
-issDetails = lens _issDetails (\ s a -> s{_issDetails = a}) . _Default . _Coerce;
-
--- | The status.
-issStatus :: Lens' InstanceStatusSummary SummaryStatus
-issStatus = lens _issStatus (\ s a -> s{_issStatus = a});
-
-instance FromXML InstanceStatusSummary where
-        parseXML x
-          = InstanceStatusSummary' <$>
-              (x .@? "details" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@ "status")
-
-instance Hashable InstanceStatusSummary
-
-instance NFData InstanceStatusSummary
-
--- | Describes an Internet gateway.
---
---
---
--- /See:/ 'internetGateway' smart constructor.
-data InternetGateway = InternetGateway'
-    { _igAttachments       :: !(Maybe [InternetGatewayAttachment])
-    , _igTags              :: !(Maybe [Tag])
-    , _igInternetGatewayId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igAttachments' - Any VPCs attached to the Internet gateway.
---
--- * 'igTags' - Any tags assigned to the Internet gateway.
---
--- * 'igInternetGatewayId' - The ID of the Internet gateway.
-internetGateway
-    :: Text -- ^ 'igInternetGatewayId'
-    -> InternetGateway
-internetGateway pInternetGatewayId_ =
-    InternetGateway'
-    { _igAttachments = Nothing
-    , _igTags = Nothing
-    , _igInternetGatewayId = pInternetGatewayId_
-    }
-
--- | Any VPCs attached to the Internet gateway.
-igAttachments :: Lens' InternetGateway [InternetGatewayAttachment]
-igAttachments = lens _igAttachments (\ s a -> s{_igAttachments = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the Internet gateway.
-igTags :: Lens' InternetGateway [Tag]
-igTags = lens _igTags (\ s a -> s{_igTags = a}) . _Default . _Coerce;
-
--- | The ID of the Internet gateway.
-igInternetGatewayId :: Lens' InternetGateway Text
-igInternetGatewayId = lens _igInternetGatewayId (\ s a -> s{_igInternetGatewayId = a});
-
-instance FromXML InternetGateway where
-        parseXML x
-          = InternetGateway' <$>
-              (x .@? "attachmentSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "internetGatewayId")
-
-instance Hashable InternetGateway
-
-instance NFData InternetGateway
-
--- | Describes the attachment of a VPC to an Internet gateway or an egress-only Internet gateway.
---
---
---
--- /See:/ 'internetGatewayAttachment' smart constructor.
-data InternetGatewayAttachment = InternetGatewayAttachment'
-    { _igaState :: !AttachmentStatus
-    , _igaVPCId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InternetGatewayAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igaState' - The current state of the attachment.
---
--- * 'igaVPCId' - The ID of the VPC.
-internetGatewayAttachment
-    :: AttachmentStatus -- ^ 'igaState'
-    -> Text -- ^ 'igaVPCId'
-    -> InternetGatewayAttachment
-internetGatewayAttachment pState_ pVPCId_ =
-    InternetGatewayAttachment'
-    { _igaState = pState_
-    , _igaVPCId = pVPCId_
-    }
-
--- | The current state of the attachment.
-igaState :: Lens' InternetGatewayAttachment AttachmentStatus
-igaState = lens _igaState (\ s a -> s{_igaState = a});
-
--- | The ID of the VPC.
-igaVPCId :: Lens' InternetGatewayAttachment Text
-igaVPCId = lens _igaVPCId (\ s a -> s{_igaVPCId = a});
-
-instance FromXML InternetGatewayAttachment where
-        parseXML x
-          = InternetGatewayAttachment' <$>
-              (x .@ "state") <*> (x .@ "vpcId")
-
-instance Hashable InternetGatewayAttachment
-
-instance NFData InternetGatewayAttachment
-
--- | Describes a key pair.
---
---
---
--- /See:/ 'keyPairInfo' smart constructor.
-data KeyPairInfo = KeyPairInfo'
-    { _kpiKeyFingerprint :: !(Maybe Text)
-    , _kpiKeyName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'KeyPairInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kpiKeyFingerprint' - If you used 'CreateKeyPair' to create the key pair, this is the SHA-1 digest of the DER encoded private key. If you used 'ImportKeyPair' to provide AWS the public key, this is the MD5 public key fingerprint as specified in section 4 of RFC4716.
---
--- * 'kpiKeyName' - The name of the key pair.
-keyPairInfo
-    :: KeyPairInfo
-keyPairInfo =
-    KeyPairInfo'
-    { _kpiKeyFingerprint = Nothing
-    , _kpiKeyName = Nothing
-    }
-
--- | If you used 'CreateKeyPair' to create the key pair, this is the SHA-1 digest of the DER encoded private key. If you used 'ImportKeyPair' to provide AWS the public key, this is the MD5 public key fingerprint as specified in section 4 of RFC4716.
-kpiKeyFingerprint :: Lens' KeyPairInfo (Maybe Text)
-kpiKeyFingerprint = lens _kpiKeyFingerprint (\ s a -> s{_kpiKeyFingerprint = a});
-
--- | The name of the key pair.
-kpiKeyName :: Lens' KeyPairInfo (Maybe Text)
-kpiKeyName = lens _kpiKeyName (\ s a -> s{_kpiKeyName = a});
-
-instance FromXML KeyPairInfo where
-        parseXML x
-          = KeyPairInfo' <$>
-              (x .@? "keyFingerprint") <*> (x .@? "keyName")
-
-instance Hashable KeyPairInfo
-
-instance NFData KeyPairInfo
-
--- | Describes a launch permission.
---
---
---
--- /See:/ 'launchPermission' smart constructor.
-data LaunchPermission = LaunchPermission'
-    { _lpGroup  :: !(Maybe PermissionGroup)
-    , _lpUserId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LaunchPermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lpGroup' - The name of the group.
---
--- * 'lpUserId' - The AWS account ID.
-launchPermission
-    :: LaunchPermission
-launchPermission =
-    LaunchPermission'
-    { _lpGroup = Nothing
-    , _lpUserId = Nothing
-    }
-
--- | The name of the group.
-lpGroup :: Lens' LaunchPermission (Maybe PermissionGroup)
-lpGroup = lens _lpGroup (\ s a -> s{_lpGroup = a});
-
--- | The AWS account ID.
-lpUserId :: Lens' LaunchPermission (Maybe Text)
-lpUserId = lens _lpUserId (\ s a -> s{_lpUserId = a});
-
-instance FromXML LaunchPermission where
-        parseXML x
-          = LaunchPermission' <$>
-              (x .@? "group") <*> (x .@? "userId")
-
-instance Hashable LaunchPermission
-
-instance NFData LaunchPermission
-
-instance ToQuery LaunchPermission where
-        toQuery LaunchPermission'{..}
-          = mconcat
-              ["Group" =: _lpGroup, "UserId" =: _lpUserId]
-
--- | Describes a launch permission modification.
---
---
---
--- /See:/ 'launchPermissionModifications' smart constructor.
-data LaunchPermissionModifications = LaunchPermissionModifications'
-    { _lpmRemove :: !(Maybe [LaunchPermission])
-    , _lpmAdd    :: !(Maybe [LaunchPermission])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LaunchPermissionModifications' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lpmRemove' - The AWS account ID to remove from the list of launch permissions for the AMI.
---
--- * 'lpmAdd' - The AWS account ID to add to the list of launch permissions for the AMI.
-launchPermissionModifications
-    :: LaunchPermissionModifications
-launchPermissionModifications =
-    LaunchPermissionModifications'
-    { _lpmRemove = Nothing
-    , _lpmAdd = Nothing
-    }
-
--- | The AWS account ID to remove from the list of launch permissions for the AMI.
-lpmRemove :: Lens' LaunchPermissionModifications [LaunchPermission]
-lpmRemove = lens _lpmRemove (\ s a -> s{_lpmRemove = a}) . _Default . _Coerce;
-
--- | The AWS account ID to add to the list of launch permissions for the AMI.
-lpmAdd :: Lens' LaunchPermissionModifications [LaunchPermission]
-lpmAdd = lens _lpmAdd (\ s a -> s{_lpmAdd = a}) . _Default . _Coerce;
-
-instance Hashable LaunchPermissionModifications
-
-instance NFData LaunchPermissionModifications
-
-instance ToQuery LaunchPermissionModifications where
-        toQuery LaunchPermissionModifications'{..}
-          = mconcat
-              [toQuery (toQueryList "Remove" <$> _lpmRemove),
-               toQuery (toQueryList "Add" <$> _lpmAdd)]
-
--- | Describes the launch specification for an instance.
---
---
---
--- /See:/ 'launchSpecification' smart constructor.
-data LaunchSpecification = LaunchSpecification'
-    { _lsSecurityGroups      :: !(Maybe [GroupIdentifier])
-    , _lsKeyName             :: !(Maybe Text)
-    , _lsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _lsRAMDiskId           :: !(Maybe Text)
-    , _lsSubnetId            :: !(Maybe Text)
-    , _lsKernelId            :: !(Maybe Text)
-    , _lsInstanceType        :: !(Maybe InstanceType)
-    , _lsEBSOptimized        :: !(Maybe Bool)
-    , _lsUserData            :: !(Maybe Text)
-    , _lsMonitoring          :: !(Maybe RunInstancesMonitoringEnabled)
-    , _lsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
-    , _lsImageId             :: !(Maybe Text)
-    , _lsAddressingType      :: !(Maybe Text)
-    , _lsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _lsPlacement           :: !(Maybe SpotPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lsSecurityGroups' - One or more security groups. When requesting instances in a VPC, you must specify the IDs of the security groups. When requesting instances in EC2-Classic, you can specify the names or the IDs of the security groups.
---
--- * 'lsKeyName' - The name of the key pair.
---
--- * 'lsNetworkInterfaces' - One or more network interfaces. If you specify a network interface, you must specify subnet IDs and security group IDs using the network interface.
---
--- * 'lsRAMDiskId' - The ID of the RAM disk.
---
--- * 'lsSubnetId' - The ID of the subnet in which to launch the instance.
---
--- * 'lsKernelId' - The ID of the kernel.
---
--- * 'lsInstanceType' - The instance type.
---
--- * 'lsEBSOptimized' - Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance. Default: @false@
---
--- * 'lsUserData' - The user data to make available to the instances. If you are using an AWS SDK or 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.
---
--- * 'lsMonitoring' - Undocumented member.
---
--- * 'lsIAMInstanceProfile' - The IAM instance profile.
---
--- * 'lsImageId' - The ID of the AMI.
---
--- * 'lsAddressingType' - Deprecated.
---
--- * 'lsBlockDeviceMappings' - One or more block device mapping entries. Although you can specify encrypted EBS volumes in this block device mapping for your Spot Instances, these volumes are not encrypted.
---
--- * 'lsPlacement' - The placement information for the instance.
-launchSpecification
-    :: LaunchSpecification
-launchSpecification =
-    LaunchSpecification'
-    { _lsSecurityGroups = Nothing
-    , _lsKeyName = Nothing
-    , _lsNetworkInterfaces = Nothing
-    , _lsRAMDiskId = Nothing
-    , _lsSubnetId = Nothing
-    , _lsKernelId = Nothing
-    , _lsInstanceType = Nothing
-    , _lsEBSOptimized = Nothing
-    , _lsUserData = Nothing
-    , _lsMonitoring = Nothing
-    , _lsIAMInstanceProfile = Nothing
-    , _lsImageId = Nothing
-    , _lsAddressingType = Nothing
-    , _lsBlockDeviceMappings = Nothing
-    , _lsPlacement = Nothing
-    }
-
--- | One or more security groups. When requesting instances in a VPC, you must specify the IDs of the security groups. When requesting instances in EC2-Classic, you can specify the names or the IDs of the security groups.
-lsSecurityGroups :: Lens' LaunchSpecification [GroupIdentifier]
-lsSecurityGroups = lens _lsSecurityGroups (\ s a -> s{_lsSecurityGroups = a}) . _Default . _Coerce;
-
--- | The name of the key pair.
-lsKeyName :: Lens' LaunchSpecification (Maybe Text)
-lsKeyName = lens _lsKeyName (\ s a -> s{_lsKeyName = a});
-
--- | One or more network interfaces. If you specify a network interface, you must specify subnet IDs and security group IDs using the network interface.
-lsNetworkInterfaces :: Lens' LaunchSpecification [InstanceNetworkInterfaceSpecification]
-lsNetworkInterfaces = lens _lsNetworkInterfaces (\ s a -> s{_lsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-lsRAMDiskId :: Lens' LaunchSpecification (Maybe Text)
-lsRAMDiskId = lens _lsRAMDiskId (\ s a -> s{_lsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instance.
-lsSubnetId :: Lens' LaunchSpecification (Maybe Text)
-lsSubnetId = lens _lsSubnetId (\ s a -> s{_lsSubnetId = a});
-
--- | The ID of the kernel.
-lsKernelId :: Lens' LaunchSpecification (Maybe Text)
-lsKernelId = lens _lsKernelId (\ s a -> s{_lsKernelId = a});
-
--- | The instance type.
-lsInstanceType :: Lens' LaunchSpecification (Maybe InstanceType)
-lsInstanceType = lens _lsInstanceType (\ s a -> s{_lsInstanceType = a});
-
--- | Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance. Default: @false@
-lsEBSOptimized :: Lens' LaunchSpecification (Maybe Bool)
-lsEBSOptimized = lens _lsEBSOptimized (\ s a -> s{_lsEBSOptimized = a});
-
--- | The user data to make available to the instances. If you are using an AWS SDK or 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.
-lsUserData :: Lens' LaunchSpecification (Maybe Text)
-lsUserData = lens _lsUserData (\ s a -> s{_lsUserData = a});
-
--- | Undocumented member.
-lsMonitoring :: Lens' LaunchSpecification (Maybe RunInstancesMonitoringEnabled)
-lsMonitoring = lens _lsMonitoring (\ s a -> s{_lsMonitoring = a});
-
--- | The IAM instance profile.
-lsIAMInstanceProfile :: Lens' LaunchSpecification (Maybe IAMInstanceProfileSpecification)
-lsIAMInstanceProfile = lens _lsIAMInstanceProfile (\ s a -> s{_lsIAMInstanceProfile = a});
-
--- | The ID of the AMI.
-lsImageId :: Lens' LaunchSpecification (Maybe Text)
-lsImageId = lens _lsImageId (\ s a -> s{_lsImageId = a});
-
--- | Deprecated.
-lsAddressingType :: Lens' LaunchSpecification (Maybe Text)
-lsAddressingType = lens _lsAddressingType (\ s a -> s{_lsAddressingType = a});
-
--- | One or more block device mapping entries. Although you can specify encrypted EBS volumes in this block device mapping for your Spot Instances, these volumes are not encrypted.
-lsBlockDeviceMappings :: Lens' LaunchSpecification [BlockDeviceMapping]
-lsBlockDeviceMappings = lens _lsBlockDeviceMappings (\ s a -> s{_lsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information for the instance.
-lsPlacement :: Lens' LaunchSpecification (Maybe SpotPlacement)
-lsPlacement = lens _lsPlacement (\ s a -> s{_lsPlacement = a});
-
-instance FromXML LaunchSpecification where
-        parseXML x
-          = LaunchSpecification' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "keyName")
-                <*>
-                (x .@? "networkInterfaceSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "ebsOptimized")
-                <*> (x .@? "userData")
-                <*> (x .@? "monitoring")
-                <*> (x .@? "iamInstanceProfile")
-                <*> (x .@? "imageId")
-                <*> (x .@? "addressingType")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "placement")
-
-instance Hashable LaunchSpecification
-
-instance NFData LaunchSpecification
-
--- | Describes the monitoring of an instance.
---
---
---
--- /See:/ 'monitoring' smart constructor.
-newtype Monitoring = Monitoring'
-    { _mState :: Maybe MonitoringState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Monitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mState' - Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring is enabled.
-monitoring
-    :: Monitoring
-monitoring =
-    Monitoring'
-    { _mState = Nothing
-    }
-
--- | Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring is enabled.
-mState :: Lens' Monitoring (Maybe MonitoringState)
-mState = lens _mState (\ s a -> s{_mState = a});
-
-instance FromXML Monitoring where
-        parseXML x = Monitoring' <$> (x .@? "state")
-
-instance Hashable Monitoring
-
-instance NFData Monitoring
-
--- | Describes the status of a moving Elastic IP address.
---
---
---
--- /See:/ 'movingAddressStatus' smart constructor.
-data MovingAddressStatus = MovingAddressStatus'
-    { _masMoveStatus :: !(Maybe MoveStatus)
-    , _masPublicIP   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MovingAddressStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'masMoveStatus' - The status of the Elastic IP address that's being moved to the EC2-VPC platform, or restored to the EC2-Classic platform.
---
--- * 'masPublicIP' - The Elastic IP address.
-movingAddressStatus
-    :: MovingAddressStatus
-movingAddressStatus =
-    MovingAddressStatus'
-    { _masMoveStatus = Nothing
-    , _masPublicIP = Nothing
-    }
-
--- | The status of the Elastic IP address that's being moved to the EC2-VPC platform, or restored to the EC2-Classic platform.
-masMoveStatus :: Lens' MovingAddressStatus (Maybe MoveStatus)
-masMoveStatus = lens _masMoveStatus (\ s a -> s{_masMoveStatus = a});
-
--- | The Elastic IP address.
-masPublicIP :: Lens' MovingAddressStatus (Maybe Text)
-masPublicIP = lens _masPublicIP (\ s a -> s{_masPublicIP = a});
-
-instance FromXML MovingAddressStatus where
-        parseXML x
-          = MovingAddressStatus' <$>
-              (x .@? "moveStatus") <*> (x .@? "publicIp")
-
-instance Hashable MovingAddressStatus
-
-instance NFData MovingAddressStatus
-
--- | Describes a NAT gateway.
---
---
---
--- /See:/ 'natGateway' smart constructor.
-data NatGateway = NatGateway'
-    { _ngState                :: !(Maybe NatGatewayState)
-    , _ngFailureCode          :: !(Maybe Text)
-    , _ngVPCId                :: !(Maybe Text)
-    , _ngFailureMessage       :: !(Maybe Text)
-    , _ngNatGatewayId         :: !(Maybe Text)
-    , _ngSubnetId             :: !(Maybe Text)
-    , _ngDeleteTime           :: !(Maybe ISO8601)
-    , _ngProvisionedBandwidth :: !(Maybe ProvisionedBandwidth)
-    , _ngNatGatewayAddresses  :: !(Maybe [NatGatewayAddress])
-    , _ngCreateTime           :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NatGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ngState' - The state of the NAT gateway.     * @pending@ : The NAT gateway is being created and is not ready to process traffic.     * @failed@ : The NAT gateway could not be created. Check the @failureCode@ and @failureMessage@ fields for the reason.     * @available@ : The NAT gateway is able to process traffic. This status remains until you delete the NAT gateway, and does not indicate the health of the NAT gateway.     * @deleting@ : The NAT gateway is in the process of being terminated and may still be processing traffic.     * @deleted@ : The NAT gateway has been terminated and is no longer processing traffic.
---
--- * 'ngFailureCode' - If the NAT gateway could not be created, specifies the error code for the failure. (@InsufficientFreeAddressesInSubnet@ | @Gateway.NotAttached@ | @InvalidAllocationID.NotFound@ | @Resource.AlreadyAssociated@ | @InternalError@ | @InvalidSubnetID.NotFound@ )
---
--- * 'ngVPCId' - The ID of the VPC in which the NAT gateway is located.
---
--- * 'ngFailureMessage' - If the NAT gateway could not be created, specifies the error message for the failure, that corresponds to the error code.     * For InsufficientFreeAddressesInSubnet: "Subnet has insufficient free addresses to create this NAT gateway"     * For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet gateway attached"     * For InvalidAllocationID.NotFound: "Elastic IP address eipalloc-xxxxxxxx could not be associated with this NAT gateway"     * For Resource.AlreadyAssociated: "Elastic IP address eipalloc-xxxxxxxx is already associated"     * For InternalError: "Network interface eni-xxxxxxxx, created and used internally by this NAT gateway is in an invalid state. Please try again."     * For InvalidSubnetID.NotFound: "The specified subnet subnet-xxxxxxxx does not exist or could not be found."
---
--- * 'ngNatGatewayId' - The ID of the NAT gateway.
---
--- * 'ngSubnetId' - The ID of the subnet in which the NAT gateway is located.
---
--- * 'ngDeleteTime' - The date and time the NAT gateway was deleted, if applicable.
---
--- * 'ngProvisionedBandwidth' - Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
---
--- * 'ngNatGatewayAddresses' - Information about the IP addresses and network interface associated with the NAT gateway.
---
--- * 'ngCreateTime' - The date and time the NAT gateway was created.
-natGateway
-    :: NatGateway
-natGateway =
-    NatGateway'
-    { _ngState = Nothing
-    , _ngFailureCode = Nothing
-    , _ngVPCId = Nothing
-    , _ngFailureMessage = Nothing
-    , _ngNatGatewayId = Nothing
-    , _ngSubnetId = Nothing
-    , _ngDeleteTime = Nothing
-    , _ngProvisionedBandwidth = Nothing
-    , _ngNatGatewayAddresses = Nothing
-    , _ngCreateTime = Nothing
-    }
-
--- | The state of the NAT gateway.     * @pending@ : The NAT gateway is being created and is not ready to process traffic.     * @failed@ : The NAT gateway could not be created. Check the @failureCode@ and @failureMessage@ fields for the reason.     * @available@ : The NAT gateway is able to process traffic. This status remains until you delete the NAT gateway, and does not indicate the health of the NAT gateway.     * @deleting@ : The NAT gateway is in the process of being terminated and may still be processing traffic.     * @deleted@ : The NAT gateway has been terminated and is no longer processing traffic.
-ngState :: Lens' NatGateway (Maybe NatGatewayState)
-ngState = lens _ngState (\ s a -> s{_ngState = a});
-
--- | If the NAT gateway could not be created, specifies the error code for the failure. (@InsufficientFreeAddressesInSubnet@ | @Gateway.NotAttached@ | @InvalidAllocationID.NotFound@ | @Resource.AlreadyAssociated@ | @InternalError@ | @InvalidSubnetID.NotFound@ )
-ngFailureCode :: Lens' NatGateway (Maybe Text)
-ngFailureCode = lens _ngFailureCode (\ s a -> s{_ngFailureCode = a});
-
--- | The ID of the VPC in which the NAT gateway is located.
-ngVPCId :: Lens' NatGateway (Maybe Text)
-ngVPCId = lens _ngVPCId (\ s a -> s{_ngVPCId = a});
-
--- | If the NAT gateway could not be created, specifies the error message for the failure, that corresponds to the error code.     * For InsufficientFreeAddressesInSubnet: "Subnet has insufficient free addresses to create this NAT gateway"     * For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet gateway attached"     * For InvalidAllocationID.NotFound: "Elastic IP address eipalloc-xxxxxxxx could not be associated with this NAT gateway"     * For Resource.AlreadyAssociated: "Elastic IP address eipalloc-xxxxxxxx is already associated"     * For InternalError: "Network interface eni-xxxxxxxx, created and used internally by this NAT gateway is in an invalid state. Please try again."     * For InvalidSubnetID.NotFound: "The specified subnet subnet-xxxxxxxx does not exist or could not be found."
-ngFailureMessage :: Lens' NatGateway (Maybe Text)
-ngFailureMessage = lens _ngFailureMessage (\ s a -> s{_ngFailureMessage = a});
-
--- | The ID of the NAT gateway.
-ngNatGatewayId :: Lens' NatGateway (Maybe Text)
-ngNatGatewayId = lens _ngNatGatewayId (\ s a -> s{_ngNatGatewayId = a});
-
--- | The ID of the subnet in which the NAT gateway is located.
-ngSubnetId :: Lens' NatGateway (Maybe Text)
-ngSubnetId = lens _ngSubnetId (\ s a -> s{_ngSubnetId = a});
-
--- | The date and time the NAT gateway was deleted, if applicable.
-ngDeleteTime :: Lens' NatGateway (Maybe UTCTime)
-ngDeleteTime = lens _ngDeleteTime (\ s a -> s{_ngDeleteTime = a}) . mapping _Time;
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-ngProvisionedBandwidth :: Lens' NatGateway (Maybe ProvisionedBandwidth)
-ngProvisionedBandwidth = lens _ngProvisionedBandwidth (\ s a -> s{_ngProvisionedBandwidth = a});
-
--- | Information about the IP addresses and network interface associated with the NAT gateway.
-ngNatGatewayAddresses :: Lens' NatGateway [NatGatewayAddress]
-ngNatGatewayAddresses = lens _ngNatGatewayAddresses (\ s a -> s{_ngNatGatewayAddresses = a}) . _Default . _Coerce;
-
--- | The date and time the NAT gateway was created.
-ngCreateTime :: Lens' NatGateway (Maybe UTCTime)
-ngCreateTime = lens _ngCreateTime (\ s a -> s{_ngCreateTime = a}) . mapping _Time;
-
-instance FromXML NatGateway where
-        parseXML x
-          = NatGateway' <$>
-              (x .@? "state") <*> (x .@? "failureCode") <*>
-                (x .@? "vpcId")
-                <*> (x .@? "failureMessage")
-                <*> (x .@? "natGatewayId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "deleteTime")
-                <*> (x .@? "provisionedBandwidth")
-                <*>
-                (x .@? "natGatewayAddressSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "createTime")
-
-instance Hashable NatGateway
-
-instance NFData NatGateway
-
--- | Describes the IP addresses and network interface associated with a NAT gateway.
---
---
---
--- /See:/ 'natGatewayAddress' smart constructor.
-data NatGatewayAddress = NatGatewayAddress'
-    { _ngaPrivateIP          :: !(Maybe Text)
-    , _ngaAllocationId       :: !(Maybe Text)
-    , _ngaNetworkInterfaceId :: !(Maybe Text)
-    , _ngaPublicIP           :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NatGatewayAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ngaPrivateIP' - The private IP address associated with the Elastic IP address.
---
--- * 'ngaAllocationId' - The allocation ID of the Elastic IP address that's associated with the NAT gateway.
---
--- * 'ngaNetworkInterfaceId' - The ID of the network interface associated with the NAT gateway.
---
--- * 'ngaPublicIP' - The Elastic IP address associated with the NAT gateway.
-natGatewayAddress
-    :: NatGatewayAddress
-natGatewayAddress =
-    NatGatewayAddress'
-    { _ngaPrivateIP = Nothing
-    , _ngaAllocationId = Nothing
-    , _ngaNetworkInterfaceId = Nothing
-    , _ngaPublicIP = Nothing
-    }
-
--- | The private IP address associated with the Elastic IP address.
-ngaPrivateIP :: Lens' NatGatewayAddress (Maybe Text)
-ngaPrivateIP = lens _ngaPrivateIP (\ s a -> s{_ngaPrivateIP = a});
-
--- | The allocation ID of the Elastic IP address that's associated with the NAT gateway.
-ngaAllocationId :: Lens' NatGatewayAddress (Maybe Text)
-ngaAllocationId = lens _ngaAllocationId (\ s a -> s{_ngaAllocationId = a});
-
--- | The ID of the network interface associated with the NAT gateway.
-ngaNetworkInterfaceId :: Lens' NatGatewayAddress (Maybe Text)
-ngaNetworkInterfaceId = lens _ngaNetworkInterfaceId (\ s a -> s{_ngaNetworkInterfaceId = a});
-
--- | The Elastic IP address associated with the NAT gateway.
-ngaPublicIP :: Lens' NatGatewayAddress (Maybe Text)
-ngaPublicIP = lens _ngaPublicIP (\ s a -> s{_ngaPublicIP = a});
-
-instance FromXML NatGatewayAddress where
-        parseXML x
-          = NatGatewayAddress' <$>
-              (x .@? "privateIp") <*> (x .@? "allocationId") <*>
-                (x .@? "networkInterfaceId")
-                <*> (x .@? "publicIp")
-
-instance Hashable NatGatewayAddress
-
-instance NFData NatGatewayAddress
-
--- | Describes a network ACL.
---
---
---
--- /See:/ 'networkACL' smart constructor.
-data NetworkACL = NetworkACL'
-    { _naEntries      :: !(Maybe [NetworkACLEntry])
-    , _naNetworkACLId :: !(Maybe Text)
-    , _naVPCId        :: !(Maybe Text)
-    , _naAssociations :: !(Maybe [NetworkACLAssociation])
-    , _naTags         :: !(Maybe [Tag])
-    , _naIsDefault    :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkACL' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'naEntries' - One or more entries (rules) in the network ACL.
---
--- * 'naNetworkACLId' - The ID of the network ACL.
---
--- * 'naVPCId' - The ID of the VPC for the network ACL.
---
--- * 'naAssociations' - Any associations between the network ACL and one or more subnets
---
--- * 'naTags' - Any tags assigned to the network ACL.
---
--- * 'naIsDefault' - Indicates whether this is the default network ACL for the VPC.
-networkACL
-    :: NetworkACL
-networkACL =
-    NetworkACL'
-    { _naEntries = Nothing
-    , _naNetworkACLId = Nothing
-    , _naVPCId = Nothing
-    , _naAssociations = Nothing
-    , _naTags = Nothing
-    , _naIsDefault = Nothing
-    }
-
--- | One or more entries (rules) in the network ACL.
-naEntries :: Lens' NetworkACL [NetworkACLEntry]
-naEntries = lens _naEntries (\ s a -> s{_naEntries = a}) . _Default . _Coerce;
-
--- | The ID of the network ACL.
-naNetworkACLId :: Lens' NetworkACL (Maybe Text)
-naNetworkACLId = lens _naNetworkACLId (\ s a -> s{_naNetworkACLId = a});
-
--- | The ID of the VPC for the network ACL.
-naVPCId :: Lens' NetworkACL (Maybe Text)
-naVPCId = lens _naVPCId (\ s a -> s{_naVPCId = a});
-
--- | Any associations between the network ACL and one or more subnets
-naAssociations :: Lens' NetworkACL [NetworkACLAssociation]
-naAssociations = lens _naAssociations (\ s a -> s{_naAssociations = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the network ACL.
-naTags :: Lens' NetworkACL [Tag]
-naTags = lens _naTags (\ s a -> s{_naTags = a}) . _Default . _Coerce;
-
--- | Indicates whether this is the default network ACL for the VPC.
-naIsDefault :: Lens' NetworkACL (Maybe Bool)
-naIsDefault = lens _naIsDefault (\ s a -> s{_naIsDefault = a});
-
-instance FromXML NetworkACL where
-        parseXML x
-          = NetworkACL' <$>
-              (x .@? "entrySet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "networkAclId")
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "associationSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "default")
-
-instance Hashable NetworkACL
-
-instance NFData NetworkACL
-
--- | Describes an association between a network ACL and a subnet.
---
---
---
--- /See:/ 'networkACLAssociation' smart constructor.
-data NetworkACLAssociation = NetworkACLAssociation'
-    { _naaNetworkACLId            :: !(Maybe Text)
-    , _naaSubnetId                :: !(Maybe Text)
-    , _naaNetworkACLAssociationId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkACLAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'naaNetworkACLId' - The ID of the network ACL.
---
--- * 'naaSubnetId' - The ID of the subnet.
---
--- * 'naaNetworkACLAssociationId' - The ID of the association between a network ACL and a subnet.
-networkACLAssociation
-    :: NetworkACLAssociation
-networkACLAssociation =
-    NetworkACLAssociation'
-    { _naaNetworkACLId = Nothing
-    , _naaSubnetId = Nothing
-    , _naaNetworkACLAssociationId = Nothing
-    }
-
--- | The ID of the network ACL.
-naaNetworkACLId :: Lens' NetworkACLAssociation (Maybe Text)
-naaNetworkACLId = lens _naaNetworkACLId (\ s a -> s{_naaNetworkACLId = a});
-
--- | The ID of the subnet.
-naaSubnetId :: Lens' NetworkACLAssociation (Maybe Text)
-naaSubnetId = lens _naaSubnetId (\ s a -> s{_naaSubnetId = a});
-
--- | The ID of the association between a network ACL and a subnet.
-naaNetworkACLAssociationId :: Lens' NetworkACLAssociation (Maybe Text)
-naaNetworkACLAssociationId = lens _naaNetworkACLAssociationId (\ s a -> s{_naaNetworkACLAssociationId = a});
-
-instance FromXML NetworkACLAssociation where
-        parseXML x
-          = NetworkACLAssociation' <$>
-              (x .@? "networkAclId") <*> (x .@? "subnetId") <*>
-                (x .@? "networkAclAssociationId")
-
-instance Hashable NetworkACLAssociation
-
-instance NFData NetworkACLAssociation
-
--- | Describes an entry in a network ACL.
---
---
---
--- /See:/ 'networkACLEntry' smart constructor.
-data NetworkACLEntry = NetworkACLEntry'
-    { _naeIPv6CidrBlock :: !(Maybe Text)
-    , _naeICMPTypeCode  :: !(Maybe ICMPTypeCode)
-    , _naeRuleNumber    :: !(Maybe Int)
-    , _naeRuleAction    :: !(Maybe RuleAction)
-    , _naeProtocol      :: !(Maybe Text)
-    , _naePortRange     :: !(Maybe PortRange)
-    , _naeCidrBlock     :: !(Maybe Text)
-    , _naeEgress        :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkACLEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'naeIPv6CidrBlock' - The IPv6 network range to allow or deny, in CIDR notation.
---
--- * 'naeICMPTypeCode' - ICMP protocol: The ICMP type and code.
---
--- * 'naeRuleNumber' - The rule number for the entry. ACL entries are processed in ascending order by rule number.
---
--- * 'naeRuleAction' - Indicates whether to allow or deny the traffic that matches the rule.
---
--- * 'naeProtocol' - The protocol. A value of @-1@ means all protocols.
---
--- * 'naePortRange' - TCP or UDP protocols: The range of ports the rule applies to.
---
--- * 'naeCidrBlock' - The IPv4 network range to allow or deny, in CIDR notation.
---
--- * 'naeEgress' - Indicates whether the rule is an egress rule (applied to traffic leaving the subnet).
-networkACLEntry
-    :: NetworkACLEntry
-networkACLEntry =
-    NetworkACLEntry'
-    { _naeIPv6CidrBlock = Nothing
-    , _naeICMPTypeCode = Nothing
-    , _naeRuleNumber = Nothing
-    , _naeRuleAction = Nothing
-    , _naeProtocol = Nothing
-    , _naePortRange = Nothing
-    , _naeCidrBlock = Nothing
-    , _naeEgress = Nothing
-    }
-
--- | The IPv6 network range to allow or deny, in CIDR notation.
-naeIPv6CidrBlock :: Lens' NetworkACLEntry (Maybe Text)
-naeIPv6CidrBlock = lens _naeIPv6CidrBlock (\ s a -> s{_naeIPv6CidrBlock = a});
-
--- | ICMP protocol: The ICMP type and code.
-naeICMPTypeCode :: Lens' NetworkACLEntry (Maybe ICMPTypeCode)
-naeICMPTypeCode = lens _naeICMPTypeCode (\ s a -> s{_naeICMPTypeCode = a});
-
--- | The rule number for the entry. ACL entries are processed in ascending order by rule number.
-naeRuleNumber :: Lens' NetworkACLEntry (Maybe Int)
-naeRuleNumber = lens _naeRuleNumber (\ s a -> s{_naeRuleNumber = a});
-
--- | Indicates whether to allow or deny the traffic that matches the rule.
-naeRuleAction :: Lens' NetworkACLEntry (Maybe RuleAction)
-naeRuleAction = lens _naeRuleAction (\ s a -> s{_naeRuleAction = a});
-
--- | The protocol. A value of @-1@ means all protocols.
-naeProtocol :: Lens' NetworkACLEntry (Maybe Text)
-naeProtocol = lens _naeProtocol (\ s a -> s{_naeProtocol = a});
-
--- | TCP or UDP protocols: The range of ports the rule applies to.
-naePortRange :: Lens' NetworkACLEntry (Maybe PortRange)
-naePortRange = lens _naePortRange (\ s a -> s{_naePortRange = a});
-
--- | The IPv4 network range to allow or deny, in CIDR notation.
-naeCidrBlock :: Lens' NetworkACLEntry (Maybe Text)
-naeCidrBlock = lens _naeCidrBlock (\ s a -> s{_naeCidrBlock = a});
-
--- | Indicates whether the rule is an egress rule (applied to traffic leaving the subnet).
-naeEgress :: Lens' NetworkACLEntry (Maybe Bool)
-naeEgress = lens _naeEgress (\ s a -> s{_naeEgress = a});
-
-instance FromXML NetworkACLEntry where
-        parseXML x
-          = NetworkACLEntry' <$>
-              (x .@? "ipv6CidrBlock") <*> (x .@? "icmpTypeCode")
-                <*> (x .@? "ruleNumber")
-                <*> (x .@? "ruleAction")
-                <*> (x .@? "protocol")
-                <*> (x .@? "portRange")
-                <*> (x .@? "cidrBlock")
-                <*> (x .@? "egress")
-
-instance Hashable NetworkACLEntry
-
-instance NFData NetworkACLEntry
-
--- | Describes a network interface.
---
---
---
--- /See:/ 'networkInterface' smart constructor.
-data NetworkInterface = NetworkInterface'
-    { _niGroups             :: !(Maybe [GroupIdentifier])
-    , _niStatus             :: !(Maybe NetworkInterfaceStatus)
-    , _niPrivateIPAddresses :: !(Maybe [NetworkInterfacePrivateIPAddress])
-    , _niSourceDestCheck    :: !(Maybe Bool)
-    , _niInterfaceType      :: !(Maybe NetworkInterfaceType)
-    , _niVPCId              :: !(Maybe Text)
-    , _niTagSet             :: !(Maybe [Tag])
-    , _niRequesterManaged   :: !(Maybe Bool)
-    , _niNetworkInterfaceId :: !(Maybe Text)
-    , _niSubnetId           :: !(Maybe Text)
-    , _niMACAddress         :: !(Maybe Text)
-    , _niAttachment         :: !(Maybe NetworkInterfaceAttachment)
-    , _niOwnerId            :: !(Maybe Text)
-    , _niAvailabilityZone   :: !(Maybe Text)
-    , _niPrivateIPAddress   :: !(Maybe Text)
-    , _niPrivateDNSName     :: !(Maybe Text)
-    , _niRequesterId        :: !(Maybe Text)
-    , _niDescription        :: !(Maybe Text)
-    , _niAssociation        :: !(Maybe NetworkInterfaceAssociation)
-    , _niIPv6Addresses      :: !(Maybe [NetworkInterfaceIPv6Address])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niGroups' - Any security groups for the network interface.
---
--- * 'niStatus' - The status of the network interface.
---
--- * 'niPrivateIPAddresses' - The private IPv4 addresses associated with the network interface.
---
--- * 'niSourceDestCheck' - Indicates whether traffic to or from the instance is validated.
---
--- * 'niInterfaceType' - The type of interface.
---
--- * 'niVPCId' - The ID of the VPC.
---
--- * 'niTagSet' - Any tags assigned to the network interface.
---
--- * 'niRequesterManaged' - Indicates whether the network interface is being managed by AWS.
---
--- * 'niNetworkInterfaceId' - The ID of the network interface.
---
--- * 'niSubnetId' - The ID of the subnet.
---
--- * 'niMACAddress' - The MAC address.
---
--- * 'niAttachment' - The network interface attachment.
---
--- * 'niOwnerId' - The AWS account ID of the owner of the network interface.
---
--- * 'niAvailabilityZone' - The Availability Zone.
---
--- * 'niPrivateIPAddress' - The IPv4 address of the network interface within the subnet.
---
--- * 'niPrivateDNSName' - The private DNS name.
---
--- * 'niRequesterId' - The ID of the entity that launched the instance on your behalf (for example, AWS Management Console or Auto Scaling).
---
--- * 'niDescription' - A description.
---
--- * 'niAssociation' - The association information for an Elastic IP address (IPv4) associated with the network interface.
---
--- * 'niIPv6Addresses' - The IPv6 addresses associated with the network interface.
-networkInterface
-    :: NetworkInterface
-networkInterface =
-    NetworkInterface'
-    { _niGroups = Nothing
-    , _niStatus = Nothing
-    , _niPrivateIPAddresses = Nothing
-    , _niSourceDestCheck = Nothing
-    , _niInterfaceType = Nothing
-    , _niVPCId = Nothing
-    , _niTagSet = Nothing
-    , _niRequesterManaged = Nothing
-    , _niNetworkInterfaceId = Nothing
-    , _niSubnetId = Nothing
-    , _niMACAddress = Nothing
-    , _niAttachment = Nothing
-    , _niOwnerId = Nothing
-    , _niAvailabilityZone = Nothing
-    , _niPrivateIPAddress = Nothing
-    , _niPrivateDNSName = Nothing
-    , _niRequesterId = Nothing
-    , _niDescription = Nothing
-    , _niAssociation = Nothing
-    , _niIPv6Addresses = Nothing
-    }
-
--- | Any security groups for the network interface.
-niGroups :: Lens' NetworkInterface [GroupIdentifier]
-niGroups = lens _niGroups (\ s a -> s{_niGroups = a}) . _Default . _Coerce;
-
--- | The status of the network interface.
-niStatus :: Lens' NetworkInterface (Maybe NetworkInterfaceStatus)
-niStatus = lens _niStatus (\ s a -> s{_niStatus = a});
-
--- | The private IPv4 addresses associated with the network interface.
-niPrivateIPAddresses :: Lens' NetworkInterface [NetworkInterfacePrivateIPAddress]
-niPrivateIPAddresses = lens _niPrivateIPAddresses (\ s a -> s{_niPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | Indicates whether traffic to or from the instance is validated.
-niSourceDestCheck :: Lens' NetworkInterface (Maybe Bool)
-niSourceDestCheck = lens _niSourceDestCheck (\ s a -> s{_niSourceDestCheck = a});
-
--- | The type of interface.
-niInterfaceType :: Lens' NetworkInterface (Maybe NetworkInterfaceType)
-niInterfaceType = lens _niInterfaceType (\ s a -> s{_niInterfaceType = a});
-
--- | The ID of the VPC.
-niVPCId :: Lens' NetworkInterface (Maybe Text)
-niVPCId = lens _niVPCId (\ s a -> s{_niVPCId = a});
-
--- | Any tags assigned to the network interface.
-niTagSet :: Lens' NetworkInterface [Tag]
-niTagSet = lens _niTagSet (\ s a -> s{_niTagSet = a}) . _Default . _Coerce;
-
--- | Indicates whether the network interface is being managed by AWS.
-niRequesterManaged :: Lens' NetworkInterface (Maybe Bool)
-niRequesterManaged = lens _niRequesterManaged (\ s a -> s{_niRequesterManaged = a});
-
--- | The ID of the network interface.
-niNetworkInterfaceId :: Lens' NetworkInterface (Maybe Text)
-niNetworkInterfaceId = lens _niNetworkInterfaceId (\ s a -> s{_niNetworkInterfaceId = a});
-
--- | The ID of the subnet.
-niSubnetId :: Lens' NetworkInterface (Maybe Text)
-niSubnetId = lens _niSubnetId (\ s a -> s{_niSubnetId = a});
-
--- | The MAC address.
-niMACAddress :: Lens' NetworkInterface (Maybe Text)
-niMACAddress = lens _niMACAddress (\ s a -> s{_niMACAddress = a});
-
--- | The network interface attachment.
-niAttachment :: Lens' NetworkInterface (Maybe NetworkInterfaceAttachment)
-niAttachment = lens _niAttachment (\ s a -> s{_niAttachment = a});
-
--- | The AWS account ID of the owner of the network interface.
-niOwnerId :: Lens' NetworkInterface (Maybe Text)
-niOwnerId = lens _niOwnerId (\ s a -> s{_niOwnerId = a});
-
--- | The Availability Zone.
-niAvailabilityZone :: Lens' NetworkInterface (Maybe Text)
-niAvailabilityZone = lens _niAvailabilityZone (\ s a -> s{_niAvailabilityZone = a});
-
--- | The IPv4 address of the network interface within the subnet.
-niPrivateIPAddress :: Lens' NetworkInterface (Maybe Text)
-niPrivateIPAddress = lens _niPrivateIPAddress (\ s a -> s{_niPrivateIPAddress = a});
-
--- | The private DNS name.
-niPrivateDNSName :: Lens' NetworkInterface (Maybe Text)
-niPrivateDNSName = lens _niPrivateDNSName (\ s a -> s{_niPrivateDNSName = a});
-
--- | The ID of the entity that launched the instance on your behalf (for example, AWS Management Console or Auto Scaling).
-niRequesterId :: Lens' NetworkInterface (Maybe Text)
-niRequesterId = lens _niRequesterId (\ s a -> s{_niRequesterId = a});
-
--- | A description.
-niDescription :: Lens' NetworkInterface (Maybe Text)
-niDescription = lens _niDescription (\ s a -> s{_niDescription = a});
-
--- | The association information for an Elastic IP address (IPv4) associated with the network interface.
-niAssociation :: Lens' NetworkInterface (Maybe NetworkInterfaceAssociation)
-niAssociation = lens _niAssociation (\ s a -> s{_niAssociation = a});
-
--- | The IPv6 addresses associated with the network interface.
-niIPv6Addresses :: Lens' NetworkInterface [NetworkInterfaceIPv6Address]
-niIPv6Addresses = lens _niIPv6Addresses (\ s a -> s{_niIPv6Addresses = a}) . _Default . _Coerce;
-
-instance FromXML NetworkInterface where
-        parseXML x
-          = NetworkInterface' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "status")
-                <*>
-                (x .@? "privateIpAddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "sourceDestCheck")
-                <*> (x .@? "interfaceType")
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "requesterManaged")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "macAddress")
-                <*> (x .@? "attachment")
-                <*> (x .@? "ownerId")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "privateDnsName")
-                <*> (x .@? "requesterId")
-                <*> (x .@? "description")
-                <*> (x .@? "association")
-                <*>
-                (x .@? "ipv6AddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable NetworkInterface
-
-instance NFData NetworkInterface
-
--- | Describes association information for an Elastic IP address (IPv4 only).
---
---
---
--- /See:/ 'networkInterfaceAssociation' smart constructor.
-data NetworkInterfaceAssociation = NetworkInterfaceAssociation'
-    { _niaAssociationId :: !(Maybe Text)
-    , _niaPublicDNSName :: !(Maybe Text)
-    , _niaAllocationId  :: !(Maybe Text)
-    , _niaIPOwnerId     :: !(Maybe Text)
-    , _niaPublicIP      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niaAssociationId' - The association ID.
---
--- * 'niaPublicDNSName' - The public DNS name.
---
--- * 'niaAllocationId' - The allocation ID.
---
--- * 'niaIPOwnerId' - The ID of the Elastic IP address owner.
---
--- * 'niaPublicIP' - The address of the Elastic IP address bound to the network interface.
-networkInterfaceAssociation
-    :: NetworkInterfaceAssociation
-networkInterfaceAssociation =
-    NetworkInterfaceAssociation'
-    { _niaAssociationId = Nothing
-    , _niaPublicDNSName = Nothing
-    , _niaAllocationId = Nothing
-    , _niaIPOwnerId = Nothing
-    , _niaPublicIP = Nothing
-    }
-
--- | The association ID.
-niaAssociationId :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaAssociationId = lens _niaAssociationId (\ s a -> s{_niaAssociationId = a});
-
--- | The public DNS name.
-niaPublicDNSName :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaPublicDNSName = lens _niaPublicDNSName (\ s a -> s{_niaPublicDNSName = a});
-
--- | The allocation ID.
-niaAllocationId :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaAllocationId = lens _niaAllocationId (\ s a -> s{_niaAllocationId = a});
-
--- | The ID of the Elastic IP address owner.
-niaIPOwnerId :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaIPOwnerId = lens _niaIPOwnerId (\ s a -> s{_niaIPOwnerId = a});
-
--- | The address of the Elastic IP address bound to the network interface.
-niaPublicIP :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaPublicIP = lens _niaPublicIP (\ s a -> s{_niaPublicIP = a});
-
-instance FromXML NetworkInterfaceAssociation where
-        parseXML x
-          = NetworkInterfaceAssociation' <$>
-              (x .@? "associationId") <*> (x .@? "publicDnsName")
-                <*> (x .@? "allocationId")
-                <*> (x .@? "ipOwnerId")
-                <*> (x .@? "publicIp")
-
-instance Hashable NetworkInterfaceAssociation
-
-instance NFData NetworkInterfaceAssociation
-
--- | Describes a network interface attachment.
---
---
---
--- /See:/ 'networkInterfaceAttachment' smart constructor.
-data NetworkInterfaceAttachment = NetworkInterfaceAttachment'
-    { _niaInstanceId          :: !(Maybe Text)
-    , _niaStatus              :: !(Maybe AttachmentStatus)
-    , _niaDeleteOnTermination :: !(Maybe Bool)
-    , _niaAttachmentId        :: !(Maybe Text)
-    , _niaInstanceOwnerId     :: !(Maybe Text)
-    , _niaAttachTime          :: !(Maybe ISO8601)
-    , _niaDeviceIndex         :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niaInstanceId' - The ID of the instance.
---
--- * 'niaStatus' - The attachment state.
---
--- * 'niaDeleteOnTermination' - Indicates whether the network interface is deleted when the instance is terminated.
---
--- * 'niaAttachmentId' - The ID of the network interface attachment.
---
--- * 'niaInstanceOwnerId' - The AWS account ID of the owner of the instance.
---
--- * 'niaAttachTime' - The timestamp indicating when the attachment initiated.
---
--- * 'niaDeviceIndex' - The device index of the network interface attachment on the instance.
-networkInterfaceAttachment
-    :: NetworkInterfaceAttachment
-networkInterfaceAttachment =
-    NetworkInterfaceAttachment'
-    { _niaInstanceId = Nothing
-    , _niaStatus = Nothing
-    , _niaDeleteOnTermination = Nothing
-    , _niaAttachmentId = Nothing
-    , _niaInstanceOwnerId = Nothing
-    , _niaAttachTime = Nothing
-    , _niaDeviceIndex = Nothing
-    }
-
--- | The ID of the instance.
-niaInstanceId :: Lens' NetworkInterfaceAttachment (Maybe Text)
-niaInstanceId = lens _niaInstanceId (\ s a -> s{_niaInstanceId = a});
-
--- | The attachment state.
-niaStatus :: Lens' NetworkInterfaceAttachment (Maybe AttachmentStatus)
-niaStatus = lens _niaStatus (\ s a -> s{_niaStatus = a});
-
--- | Indicates whether the network interface is deleted when the instance is terminated.
-niaDeleteOnTermination :: Lens' NetworkInterfaceAttachment (Maybe Bool)
-niaDeleteOnTermination = lens _niaDeleteOnTermination (\ s a -> s{_niaDeleteOnTermination = a});
-
--- | The ID of the network interface attachment.
-niaAttachmentId :: Lens' NetworkInterfaceAttachment (Maybe Text)
-niaAttachmentId = lens _niaAttachmentId (\ s a -> s{_niaAttachmentId = a});
-
--- | The AWS account ID of the owner of the instance.
-niaInstanceOwnerId :: Lens' NetworkInterfaceAttachment (Maybe Text)
-niaInstanceOwnerId = lens _niaInstanceOwnerId (\ s a -> s{_niaInstanceOwnerId = a});
-
--- | The timestamp indicating when the attachment initiated.
-niaAttachTime :: Lens' NetworkInterfaceAttachment (Maybe UTCTime)
-niaAttachTime = lens _niaAttachTime (\ s a -> s{_niaAttachTime = a}) . mapping _Time;
-
--- | The device index of the network interface attachment on the instance.
-niaDeviceIndex :: Lens' NetworkInterfaceAttachment (Maybe Int)
-niaDeviceIndex = lens _niaDeviceIndex (\ s a -> s{_niaDeviceIndex = a});
-
-instance FromXML NetworkInterfaceAttachment where
-        parseXML x
-          = NetworkInterfaceAttachment' <$>
-              (x .@? "instanceId") <*> (x .@? "status") <*>
-                (x .@? "deleteOnTermination")
-                <*> (x .@? "attachmentId")
-                <*> (x .@? "instanceOwnerId")
-                <*> (x .@? "attachTime")
-                <*> (x .@? "deviceIndex")
-
-instance Hashable NetworkInterfaceAttachment
-
-instance NFData NetworkInterfaceAttachment
-
--- | Describes an attachment change.
---
---
---
--- /See:/ 'networkInterfaceAttachmentChanges' smart constructor.
-data NetworkInterfaceAttachmentChanges = NetworkInterfaceAttachmentChanges'
-    { _niacDeleteOnTermination :: !(Maybe Bool)
-    , _niacAttachmentId        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceAttachmentChanges' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niacDeleteOnTermination' - Indicates whether the network interface is deleted when the instance is terminated.
---
--- * 'niacAttachmentId' - The ID of the network interface attachment.
-networkInterfaceAttachmentChanges
-    :: NetworkInterfaceAttachmentChanges
-networkInterfaceAttachmentChanges =
-    NetworkInterfaceAttachmentChanges'
-    { _niacDeleteOnTermination = Nothing
-    , _niacAttachmentId = Nothing
-    }
-
--- | Indicates whether the network interface is deleted when the instance is terminated.
-niacDeleteOnTermination :: Lens' NetworkInterfaceAttachmentChanges (Maybe Bool)
-niacDeleteOnTermination = lens _niacDeleteOnTermination (\ s a -> s{_niacDeleteOnTermination = a});
-
--- | The ID of the network interface attachment.
-niacAttachmentId :: Lens' NetworkInterfaceAttachmentChanges (Maybe Text)
-niacAttachmentId = lens _niacAttachmentId (\ s a -> s{_niacAttachmentId = a});
-
-instance Hashable NetworkInterfaceAttachmentChanges
-
-instance NFData NetworkInterfaceAttachmentChanges
-
-instance ToQuery NetworkInterfaceAttachmentChanges
-         where
-        toQuery NetworkInterfaceAttachmentChanges'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _niacDeleteOnTermination,
-               "AttachmentId" =: _niacAttachmentId]
-
--- | Describes an IPv6 address associated with a network interface.
---
---
---
--- /See:/ 'networkInterfaceIPv6Address' smart constructor.
-newtype NetworkInterfaceIPv6Address = NetworkInterfaceIPv6Address'
-    { _niiaIPv6Address :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceIPv6Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niiaIPv6Address' - The IPv6 address.
-networkInterfaceIPv6Address
-    :: NetworkInterfaceIPv6Address
-networkInterfaceIPv6Address =
-    NetworkInterfaceIPv6Address'
-    { _niiaIPv6Address = Nothing
-    }
-
--- | The IPv6 address.
-niiaIPv6Address :: Lens' NetworkInterfaceIPv6Address (Maybe Text)
-niiaIPv6Address = lens _niiaIPv6Address (\ s a -> s{_niiaIPv6Address = a});
-
-instance FromXML NetworkInterfaceIPv6Address where
-        parseXML x
-          = NetworkInterfaceIPv6Address' <$>
-              (x .@? "ipv6Address")
-
-instance Hashable NetworkInterfaceIPv6Address
-
-instance NFData NetworkInterfaceIPv6Address
-
--- | Describes the private IPv4 address of a network interface.
---
---
---
--- /See:/ 'networkInterfacePrivateIPAddress' smart constructor.
-data NetworkInterfacePrivateIPAddress = NetworkInterfacePrivateIPAddress'
-    { _nipiaPrimary          :: !(Maybe Bool)
-    , _nipiaPrivateIPAddress :: !(Maybe Text)
-    , _nipiaPrivateDNSName   :: !(Maybe Text)
-    , _nipiaAssociation      :: !(Maybe NetworkInterfaceAssociation)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfacePrivateIPAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nipiaPrimary' - Indicates whether this IPv4 address is the primary private IPv4 address of the network interface.
---
--- * 'nipiaPrivateIPAddress' - The private IPv4 address.
---
--- * 'nipiaPrivateDNSName' - The private DNS name.
---
--- * 'nipiaAssociation' - The association information for an Elastic IP address (IPv4) associated with the network interface.
-networkInterfacePrivateIPAddress
-    :: NetworkInterfacePrivateIPAddress
-networkInterfacePrivateIPAddress =
-    NetworkInterfacePrivateIPAddress'
-    { _nipiaPrimary = Nothing
-    , _nipiaPrivateIPAddress = Nothing
-    , _nipiaPrivateDNSName = Nothing
-    , _nipiaAssociation = Nothing
-    }
-
--- | Indicates whether this IPv4 address is the primary private IPv4 address of the network interface.
-nipiaPrimary :: Lens' NetworkInterfacePrivateIPAddress (Maybe Bool)
-nipiaPrimary = lens _nipiaPrimary (\ s a -> s{_nipiaPrimary = a});
-
--- | The private IPv4 address.
-nipiaPrivateIPAddress :: Lens' NetworkInterfacePrivateIPAddress (Maybe Text)
-nipiaPrivateIPAddress = lens _nipiaPrivateIPAddress (\ s a -> s{_nipiaPrivateIPAddress = a});
-
--- | The private DNS name.
-nipiaPrivateDNSName :: Lens' NetworkInterfacePrivateIPAddress (Maybe Text)
-nipiaPrivateDNSName = lens _nipiaPrivateDNSName (\ s a -> s{_nipiaPrivateDNSName = a});
-
--- | The association information for an Elastic IP address (IPv4) associated with the network interface.
-nipiaAssociation :: Lens' NetworkInterfacePrivateIPAddress (Maybe NetworkInterfaceAssociation)
-nipiaAssociation = lens _nipiaAssociation (\ s a -> s{_nipiaAssociation = a});
-
-instance FromXML NetworkInterfacePrivateIPAddress
-         where
-        parseXML x
-          = NetworkInterfacePrivateIPAddress' <$>
-              (x .@? "primary") <*> (x .@? "privateIpAddress") <*>
-                (x .@? "privateDnsName")
-                <*> (x .@? "association")
-
-instance Hashable NetworkInterfacePrivateIPAddress
-
-instance NFData NetworkInterfacePrivateIPAddress
-
--- | /See:/ 'newDHCPConfiguration' smart constructor.
-data NewDHCPConfiguration = NewDHCPConfiguration'
-    { _ndcValues :: !(Maybe [Text])
-    , _ndcKey    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NewDHCPConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ndcValues' - Undocumented member.
---
--- * 'ndcKey' - Undocumented member.
-newDHCPConfiguration
-    :: NewDHCPConfiguration
-newDHCPConfiguration =
-    NewDHCPConfiguration'
-    { _ndcValues = Nothing
-    , _ndcKey = Nothing
-    }
-
--- | Undocumented member.
-ndcValues :: Lens' NewDHCPConfiguration [Text]
-ndcValues = lens _ndcValues (\ s a -> s{_ndcValues = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-ndcKey :: Lens' NewDHCPConfiguration (Maybe Text)
-ndcKey = lens _ndcKey (\ s a -> s{_ndcKey = a});
-
-instance Hashable NewDHCPConfiguration
-
-instance NFData NewDHCPConfiguration
-
-instance ToQuery NewDHCPConfiguration where
-        toQuery NewDHCPConfiguration'{..}
-          = mconcat
-              [toQuery (toQueryList "Value" <$> _ndcValues),
-               "Key" =: _ndcKey]
-
--- | Describes the VPC peering connection options.
---
---
---
--- /See:/ 'peeringConnectionOptions' smart constructor.
-data PeeringConnectionOptions = PeeringConnectionOptions'
-    { _pcoAllowEgressFromLocalVPCToRemoteClassicLink :: !(Maybe Bool)
-    , _pcoAllowEgressFromLocalClassicLinkToRemoteVPC :: !(Maybe Bool)
-    , _pcoAllowDNSResolutionFromRemoteVPC            :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PeeringConnectionOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pcoAllowEgressFromLocalVPCToRemoteClassicLink' - If true, enables outbound communication from instances in a local VPC to an EC2-Classic instance that's linked to a peer VPC via ClassicLink.
---
--- * 'pcoAllowEgressFromLocalClassicLinkToRemoteVPC' - If true, enables outbound communication from an EC2-Classic instance that's linked to a local VPC via ClassicLink to instances in a peer VPC.
---
--- * 'pcoAllowDNSResolutionFromRemoteVPC' - If true, enables a local VPC to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC.
-peeringConnectionOptions
-    :: PeeringConnectionOptions
-peeringConnectionOptions =
-    PeeringConnectionOptions'
-    { _pcoAllowEgressFromLocalVPCToRemoteClassicLink = Nothing
-    , _pcoAllowEgressFromLocalClassicLinkToRemoteVPC = Nothing
-    , _pcoAllowDNSResolutionFromRemoteVPC = Nothing
-    }
-
--- | If true, enables outbound communication from instances in a local VPC to an EC2-Classic instance that's linked to a peer VPC via ClassicLink.
-pcoAllowEgressFromLocalVPCToRemoteClassicLink :: Lens' PeeringConnectionOptions (Maybe Bool)
-pcoAllowEgressFromLocalVPCToRemoteClassicLink = lens _pcoAllowEgressFromLocalVPCToRemoteClassicLink (\ s a -> s{_pcoAllowEgressFromLocalVPCToRemoteClassicLink = a});
-
--- | If true, enables outbound communication from an EC2-Classic instance that's linked to a local VPC via ClassicLink to instances in a peer VPC.
-pcoAllowEgressFromLocalClassicLinkToRemoteVPC :: Lens' PeeringConnectionOptions (Maybe Bool)
-pcoAllowEgressFromLocalClassicLinkToRemoteVPC = lens _pcoAllowEgressFromLocalClassicLinkToRemoteVPC (\ s a -> s{_pcoAllowEgressFromLocalClassicLinkToRemoteVPC = a});
-
--- | If true, enables a local VPC to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC.
-pcoAllowDNSResolutionFromRemoteVPC :: Lens' PeeringConnectionOptions (Maybe Bool)
-pcoAllowDNSResolutionFromRemoteVPC = lens _pcoAllowDNSResolutionFromRemoteVPC (\ s a -> s{_pcoAllowDNSResolutionFromRemoteVPC = a});
-
-instance FromXML PeeringConnectionOptions where
-        parseXML x
-          = PeeringConnectionOptions' <$>
-              (x .@? "allowEgressFromLocalVpcToRemoteClassicLink")
-                <*>
-                (x .@? "allowEgressFromLocalClassicLinkToRemoteVpc")
-                <*> (x .@? "allowDnsResolutionFromRemoteVpc")
-
-instance Hashable PeeringConnectionOptions
-
-instance NFData PeeringConnectionOptions
-
--- | The VPC peering connection options.
---
---
---
--- /See:/ 'peeringConnectionOptionsRequest' smart constructor.
-data PeeringConnectionOptionsRequest = PeeringConnectionOptionsRequest'
-    { _pcorAllowEgressFromLocalVPCToRemoteClassicLink :: !(Maybe Bool)
-    , _pcorAllowEgressFromLocalClassicLinkToRemoteVPC :: !(Maybe Bool)
-    , _pcorAllowDNSResolutionFromRemoteVPC            :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PeeringConnectionOptionsRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pcorAllowEgressFromLocalVPCToRemoteClassicLink' - If true, enables outbound communication from instances in a local VPC to an EC2-Classic instance that's linked to a peer VPC via ClassicLink.
---
--- * 'pcorAllowEgressFromLocalClassicLinkToRemoteVPC' - If true, enables outbound communication from an EC2-Classic instance that's linked to a local VPC via ClassicLink to instances in a peer VPC.
---
--- * 'pcorAllowDNSResolutionFromRemoteVPC' - If true, enables a local VPC to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC.
-peeringConnectionOptionsRequest
-    :: PeeringConnectionOptionsRequest
-peeringConnectionOptionsRequest =
-    PeeringConnectionOptionsRequest'
-    { _pcorAllowEgressFromLocalVPCToRemoteClassicLink = Nothing
-    , _pcorAllowEgressFromLocalClassicLinkToRemoteVPC = Nothing
-    , _pcorAllowDNSResolutionFromRemoteVPC = Nothing
-    }
-
--- | If true, enables outbound communication from instances in a local VPC to an EC2-Classic instance that's linked to a peer VPC via ClassicLink.
-pcorAllowEgressFromLocalVPCToRemoteClassicLink :: Lens' PeeringConnectionOptionsRequest (Maybe Bool)
-pcorAllowEgressFromLocalVPCToRemoteClassicLink = lens _pcorAllowEgressFromLocalVPCToRemoteClassicLink (\ s a -> s{_pcorAllowEgressFromLocalVPCToRemoteClassicLink = a});
-
--- | If true, enables outbound communication from an EC2-Classic instance that's linked to a local VPC via ClassicLink to instances in a peer VPC.
-pcorAllowEgressFromLocalClassicLinkToRemoteVPC :: Lens' PeeringConnectionOptionsRequest (Maybe Bool)
-pcorAllowEgressFromLocalClassicLinkToRemoteVPC = lens _pcorAllowEgressFromLocalClassicLinkToRemoteVPC (\ s a -> s{_pcorAllowEgressFromLocalClassicLinkToRemoteVPC = a});
-
--- | If true, enables a local VPC to resolve public DNS hostnames to private IP addresses when queried from instances in the peer VPC.
-pcorAllowDNSResolutionFromRemoteVPC :: Lens' PeeringConnectionOptionsRequest (Maybe Bool)
-pcorAllowDNSResolutionFromRemoteVPC = lens _pcorAllowDNSResolutionFromRemoteVPC (\ s a -> s{_pcorAllowDNSResolutionFromRemoteVPC = a});
-
-instance Hashable PeeringConnectionOptionsRequest
-
-instance NFData PeeringConnectionOptionsRequest
-
-instance ToQuery PeeringConnectionOptionsRequest
-         where
-        toQuery PeeringConnectionOptionsRequest'{..}
-          = mconcat
-              ["AllowEgressFromLocalVpcToRemoteClassicLink" =:
-                 _pcorAllowEgressFromLocalVPCToRemoteClassicLink,
-               "AllowEgressFromLocalClassicLinkToRemoteVpc" =:
-                 _pcorAllowEgressFromLocalClassicLinkToRemoteVPC,
-               "AllowDnsResolutionFromRemoteVpc" =:
-                 _pcorAllowDNSResolutionFromRemoteVPC]
-
--- | Describes the placement of an instance.
---
---
---
--- /See:/ 'placement' smart constructor.
-data Placement = Placement'
-    { _pAffinity         :: !(Maybe Text)
-    , _pHostId           :: !(Maybe Text)
-    , _pAvailabilityZone :: !(Maybe Text)
-    , _pTenancy          :: !(Maybe Tenancy)
-    , _pGroupName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Placement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pAffinity' - The affinity setting for the instance on the Dedicated Host. This parameter is not supported for the 'ImportInstance' command.
---
--- * 'pHostId' - The ID of the Dedicted host on which the instance resides. This parameter is not support for the 'ImportInstance' command.
---
--- * 'pAvailabilityZone' - The Availability Zone of the instance.
---
--- * 'pTenancy' - The tenancy of the instance (if the instance is running in a VPC). An instance with a tenancy of @dedicated@ runs on single-tenant hardware. The @host@ tenancy is not supported for the 'ImportInstance' command.
---
--- * 'pGroupName' - The name of the placement group the instance is in (for cluster compute instances).
-placement
-    :: Placement
-placement =
-    Placement'
-    { _pAffinity = Nothing
-    , _pHostId = Nothing
-    , _pAvailabilityZone = Nothing
-    , _pTenancy = Nothing
-    , _pGroupName = Nothing
-    }
-
--- | The affinity setting for the instance on the Dedicated Host. This parameter is not supported for the 'ImportInstance' command.
-pAffinity :: Lens' Placement (Maybe Text)
-pAffinity = lens _pAffinity (\ s a -> s{_pAffinity = a});
-
--- | The ID of the Dedicted host on which the instance resides. This parameter is not support for the 'ImportInstance' command.
-pHostId :: Lens' Placement (Maybe Text)
-pHostId = lens _pHostId (\ s a -> s{_pHostId = a});
-
--- | The Availability Zone of the instance.
-pAvailabilityZone :: Lens' Placement (Maybe Text)
-pAvailabilityZone = lens _pAvailabilityZone (\ s a -> s{_pAvailabilityZone = a});
-
--- | The tenancy of the instance (if the instance is running in a VPC). An instance with a tenancy of @dedicated@ runs on single-tenant hardware. The @host@ tenancy is not supported for the 'ImportInstance' command.
-pTenancy :: Lens' Placement (Maybe Tenancy)
-pTenancy = lens _pTenancy (\ s a -> s{_pTenancy = a});
-
--- | The name of the placement group the instance is in (for cluster compute instances).
-pGroupName :: Lens' Placement (Maybe Text)
-pGroupName = lens _pGroupName (\ s a -> s{_pGroupName = a});
-
-instance FromXML Placement where
-        parseXML x
-          = Placement' <$>
-              (x .@? "affinity") <*> (x .@? "hostId") <*>
-                (x .@? "availabilityZone")
-                <*> (x .@? "tenancy")
-                <*> (x .@? "groupName")
-
-instance Hashable Placement
-
-instance NFData Placement
-
-instance ToQuery Placement where
-        toQuery Placement'{..}
-          = mconcat
-              ["Affinity" =: _pAffinity, "HostId" =: _pHostId,
-               "AvailabilityZone" =: _pAvailabilityZone,
-               "Tenancy" =: _pTenancy, "GroupName" =: _pGroupName]
-
--- | Describes a placement group.
---
---
---
--- /See:/ 'placementGroup' smart constructor.
-data PlacementGroup = PlacementGroup'
-    { _pgState     :: !(Maybe PlacementGroupState)
-    , _pgStrategy  :: !(Maybe PlacementStrategy)
-    , _pgGroupName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PlacementGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pgState' - The state of the placement group.
---
--- * 'pgStrategy' - The placement strategy.
---
--- * 'pgGroupName' - The name of the placement group.
-placementGroup
-    :: PlacementGroup
-placementGroup =
-    PlacementGroup'
-    { _pgState = Nothing
-    , _pgStrategy = Nothing
-    , _pgGroupName = Nothing
-    }
-
--- | The state of the placement group.
-pgState :: Lens' PlacementGroup (Maybe PlacementGroupState)
-pgState = lens _pgState (\ s a -> s{_pgState = a});
-
--- | The placement strategy.
-pgStrategy :: Lens' PlacementGroup (Maybe PlacementStrategy)
-pgStrategy = lens _pgStrategy (\ s a -> s{_pgStrategy = a});
-
--- | The name of the placement group.
-pgGroupName :: Lens' PlacementGroup (Maybe Text)
-pgGroupName = lens _pgGroupName (\ s a -> s{_pgGroupName = a});
-
-instance FromXML PlacementGroup where
-        parseXML x
-          = PlacementGroup' <$>
-              (x .@? "state") <*> (x .@? "strategy") <*>
-                (x .@? "groupName")
-
-instance Hashable PlacementGroup
-
-instance NFData PlacementGroup
-
--- | Describes a range of ports.
---
---
---
--- /See:/ 'portRange' smart constructor.
-data PortRange = PortRange'
-    { _prTo   :: !(Maybe Int)
-    , _prFrom :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PortRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prTo' - The last port in the range.
---
--- * 'prFrom' - The first port in the range.
-portRange
-    :: PortRange
-portRange =
-    PortRange'
-    { _prTo = Nothing
-    , _prFrom = Nothing
-    }
-
--- | The last port in the range.
-prTo :: Lens' PortRange (Maybe Int)
-prTo = lens _prTo (\ s a -> s{_prTo = a});
-
--- | The first port in the range.
-prFrom :: Lens' PortRange (Maybe Int)
-prFrom = lens _prFrom (\ s a -> s{_prFrom = a});
-
-instance FromXML PortRange where
-        parseXML x
-          = PortRange' <$> (x .@? "to") <*> (x .@? "from")
-
-instance Hashable PortRange
-
-instance NFData PortRange
-
-instance ToQuery PortRange where
-        toQuery PortRange'{..}
-          = mconcat ["To" =: _prTo, "From" =: _prFrom]
-
--- | Describes prefixes for AWS services.
---
---
---
--- /See:/ 'prefixList' smart constructor.
-data PrefixList = PrefixList'
-    { _plCidrs          :: !(Maybe [Text])
-    , _plPrefixListId   :: !(Maybe Text)
-    , _plPrefixListName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PrefixList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'plCidrs' - The IP address range of the AWS service.
---
--- * 'plPrefixListId' - The ID of the prefix.
---
--- * 'plPrefixListName' - The name of the prefix.
-prefixList
-    :: PrefixList
-prefixList =
-    PrefixList'
-    { _plCidrs = Nothing
-    , _plPrefixListId = Nothing
-    , _plPrefixListName = Nothing
-    }
-
--- | The IP address range of the AWS service.
-plCidrs :: Lens' PrefixList [Text]
-plCidrs = lens _plCidrs (\ s a -> s{_plCidrs = a}) . _Default . _Coerce;
-
--- | The ID of the prefix.
-plPrefixListId :: Lens' PrefixList (Maybe Text)
-plPrefixListId = lens _plPrefixListId (\ s a -> s{_plPrefixListId = a});
-
--- | The name of the prefix.
-plPrefixListName :: Lens' PrefixList (Maybe Text)
-plPrefixListName = lens _plPrefixListName (\ s a -> s{_plPrefixListName = a});
-
-instance FromXML PrefixList where
-        parseXML x
-          = PrefixList' <$>
-              (x .@? "cidrSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "prefixListId")
-                <*> (x .@? "prefixListName")
-
-instance Hashable PrefixList
-
-instance NFData PrefixList
-
--- | The ID of the prefix.
---
---
---
--- /See:/ 'prefixListId' smart constructor.
-newtype PrefixListId = PrefixListId'
-    { _pliPrefixListId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PrefixListId' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pliPrefixListId' - The ID of the prefix.
-prefixListId
-    :: PrefixListId
-prefixListId =
-    PrefixListId'
-    { _pliPrefixListId = Nothing
-    }
-
--- | The ID of the prefix.
-pliPrefixListId :: Lens' PrefixListId (Maybe Text)
-pliPrefixListId = lens _pliPrefixListId (\ s a -> s{_pliPrefixListId = a});
-
-instance FromXML PrefixListId where
-        parseXML x = PrefixListId' <$> (x .@? "prefixListId")
-
-instance Hashable PrefixListId
-
-instance NFData PrefixListId
-
-instance ToQuery PrefixListId where
-        toQuery PrefixListId'{..}
-          = mconcat ["PrefixListId" =: _pliPrefixListId]
-
--- | Describes the price for a Reserved Instance.
---
---
---
--- /See:/ 'priceSchedule' smart constructor.
-data PriceSchedule = PriceSchedule'
-    { _psCurrencyCode :: !(Maybe CurrencyCodeValues)
-    , _psTerm         :: !(Maybe Integer)
-    , _psActive       :: !(Maybe Bool)
-    , _psPrice        :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PriceSchedule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psCurrencyCode' - The currency for transacting the Reserved Instance resale. At this time, the only supported currency is @USD@ .
---
--- * 'psTerm' - The number of months remaining in the reservation. For example, 2 is the second to the last month before the capacity reservation expires.
---
--- * 'psActive' - The current price schedule, as determined by the term remaining for the Reserved Instance in the listing. A specific price schedule is always in effect, but only one price schedule can be active at any time. Take, for example, a Reserved Instance listing that has five months remaining in its term. When you specify price schedules for five months and two months, this means that schedule 1, covering the first three months of the remaining term, will be active during months 5, 4, and 3. Then schedule 2, covering the last two months of the term, will be active for months 2 and 1.
---
--- * 'psPrice' - The fixed price for the term.
-priceSchedule
-    :: PriceSchedule
-priceSchedule =
-    PriceSchedule'
-    { _psCurrencyCode = Nothing
-    , _psTerm = Nothing
-    , _psActive = Nothing
-    , _psPrice = Nothing
-    }
-
--- | The currency for transacting the Reserved Instance resale. At this time, the only supported currency is @USD@ .
-psCurrencyCode :: Lens' PriceSchedule (Maybe CurrencyCodeValues)
-psCurrencyCode = lens _psCurrencyCode (\ s a -> s{_psCurrencyCode = a});
-
--- | The number of months remaining in the reservation. For example, 2 is the second to the last month before the capacity reservation expires.
-psTerm :: Lens' PriceSchedule (Maybe Integer)
-psTerm = lens _psTerm (\ s a -> s{_psTerm = a});
-
--- | The current price schedule, as determined by the term remaining for the Reserved Instance in the listing. A specific price schedule is always in effect, but only one price schedule can be active at any time. Take, for example, a Reserved Instance listing that has five months remaining in its term. When you specify price schedules for five months and two months, this means that schedule 1, covering the first three months of the remaining term, will be active during months 5, 4, and 3. Then schedule 2, covering the last two months of the term, will be active for months 2 and 1.
-psActive :: Lens' PriceSchedule (Maybe Bool)
-psActive = lens _psActive (\ s a -> s{_psActive = a});
-
--- | The fixed price for the term.
-psPrice :: Lens' PriceSchedule (Maybe Double)
-psPrice = lens _psPrice (\ s a -> s{_psPrice = a});
-
-instance FromXML PriceSchedule where
-        parseXML x
-          = PriceSchedule' <$>
-              (x .@? "currencyCode") <*> (x .@? "term") <*>
-                (x .@? "active")
-                <*> (x .@? "price")
-
-instance Hashable PriceSchedule
-
-instance NFData PriceSchedule
-
--- | Describes the price for a Reserved Instance.
---
---
---
--- /See:/ 'priceScheduleSpecification' smart constructor.
-data PriceScheduleSpecification = PriceScheduleSpecification'
-    { _pssCurrencyCode :: !(Maybe CurrencyCodeValues)
-    , _pssTerm         :: !(Maybe Integer)
-    , _pssPrice        :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PriceScheduleSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pssCurrencyCode' - The currency for transacting the Reserved Instance resale. At this time, the only supported currency is @USD@ .
---
--- * 'pssTerm' - The number of months remaining in the reservation. For example, 2 is the second to the last month before the capacity reservation expires.
---
--- * 'pssPrice' - The fixed price for the term.
-priceScheduleSpecification
-    :: PriceScheduleSpecification
-priceScheduleSpecification =
-    PriceScheduleSpecification'
-    { _pssCurrencyCode = Nothing
-    , _pssTerm = Nothing
-    , _pssPrice = Nothing
-    }
-
--- | The currency for transacting the Reserved Instance resale. At this time, the only supported currency is @USD@ .
-pssCurrencyCode :: Lens' PriceScheduleSpecification (Maybe CurrencyCodeValues)
-pssCurrencyCode = lens _pssCurrencyCode (\ s a -> s{_pssCurrencyCode = a});
-
--- | The number of months remaining in the reservation. For example, 2 is the second to the last month before the capacity reservation expires.
-pssTerm :: Lens' PriceScheduleSpecification (Maybe Integer)
-pssTerm = lens _pssTerm (\ s a -> s{_pssTerm = a});
-
--- | The fixed price for the term.
-pssPrice :: Lens' PriceScheduleSpecification (Maybe Double)
-pssPrice = lens _pssPrice (\ s a -> s{_pssPrice = a});
-
-instance Hashable PriceScheduleSpecification
-
-instance NFData PriceScheduleSpecification
-
-instance ToQuery PriceScheduleSpecification where
-        toQuery PriceScheduleSpecification'{..}
-          = mconcat
-              ["CurrencyCode" =: _pssCurrencyCode,
-               "Term" =: _pssTerm, "Price" =: _pssPrice]
-
--- | Describes a Reserved Instance offering.
---
---
---
--- /See:/ 'pricingDetail' smart constructor.
-data PricingDetail = PricingDetail'
-    { _pdCount :: !(Maybe Int)
-    , _pdPrice :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PricingDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdCount' - The number of reservations available for the price.
---
--- * 'pdPrice' - The price per instance.
-pricingDetail
-    :: PricingDetail
-pricingDetail =
-    PricingDetail'
-    { _pdCount = Nothing
-    , _pdPrice = Nothing
-    }
-
--- | The number of reservations available for the price.
-pdCount :: Lens' PricingDetail (Maybe Int)
-pdCount = lens _pdCount (\ s a -> s{_pdCount = a});
-
--- | The price per instance.
-pdPrice :: Lens' PricingDetail (Maybe Double)
-pdPrice = lens _pdPrice (\ s a -> s{_pdPrice = a});
-
-instance FromXML PricingDetail where
-        parseXML x
-          = PricingDetail' <$>
-              (x .@? "count") <*> (x .@? "price")
-
-instance Hashable PricingDetail
-
-instance NFData PricingDetail
-
--- | Describes a secondary private IPv4 address for a network interface.
---
---
---
--- /See:/ 'privateIPAddressSpecification' smart constructor.
-data PrivateIPAddressSpecification = PrivateIPAddressSpecification'
-    { _piasPrimary          :: !(Maybe Bool)
-    , _piasPrivateIPAddress :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PrivateIPAddressSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'piasPrimary' - Indicates whether the private IPv4 address is the primary private IPv4 address. Only one IPv4 address can be designated as primary.
---
--- * 'piasPrivateIPAddress' - The private IPv4 addresses.
-privateIPAddressSpecification
-    :: Text -- ^ 'piasPrivateIPAddress'
-    -> PrivateIPAddressSpecification
-privateIPAddressSpecification pPrivateIPAddress_ =
-    PrivateIPAddressSpecification'
-    { _piasPrimary = Nothing
-    , _piasPrivateIPAddress = pPrivateIPAddress_
-    }
-
--- | Indicates whether the private IPv4 address is the primary private IPv4 address. Only one IPv4 address can be designated as primary.
-piasPrimary :: Lens' PrivateIPAddressSpecification (Maybe Bool)
-piasPrimary = lens _piasPrimary (\ s a -> s{_piasPrimary = a});
-
--- | The private IPv4 addresses.
-piasPrivateIPAddress :: Lens' PrivateIPAddressSpecification Text
-piasPrivateIPAddress = lens _piasPrivateIPAddress (\ s a -> s{_piasPrivateIPAddress = a});
-
-instance FromXML PrivateIPAddressSpecification where
-        parseXML x
-          = PrivateIPAddressSpecification' <$>
-              (x .@? "primary") <*> (x .@ "privateIpAddress")
-
-instance Hashable PrivateIPAddressSpecification
-
-instance NFData PrivateIPAddressSpecification
-
-instance ToQuery PrivateIPAddressSpecification where
-        toQuery PrivateIPAddressSpecification'{..}
-          = mconcat
-              ["Primary" =: _piasPrimary,
-               "PrivateIpAddress" =: _piasPrivateIPAddress]
-
--- | Describes a product code.
---
---
---
--- /See:/ 'productCode' smart constructor.
-data ProductCode = ProductCode'
-    { _pcProductCodeType :: !(Maybe ProductCodeValues)
-    , _pcProductCodeId   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProductCode' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pcProductCodeType' - The type of product code.
---
--- * 'pcProductCodeId' - The product code.
-productCode
-    :: ProductCode
-productCode =
-    ProductCode'
-    { _pcProductCodeType = Nothing
-    , _pcProductCodeId = Nothing
-    }
-
--- | The type of product code.
-pcProductCodeType :: Lens' ProductCode (Maybe ProductCodeValues)
-pcProductCodeType = lens _pcProductCodeType (\ s a -> s{_pcProductCodeType = a});
-
--- | The product code.
-pcProductCodeId :: Lens' ProductCode (Maybe Text)
-pcProductCodeId = lens _pcProductCodeId (\ s a -> s{_pcProductCodeId = a});
-
-instance FromXML ProductCode where
-        parseXML x
-          = ProductCode' <$>
-              (x .@? "type") <*> (x .@? "productCode")
-
-instance Hashable ProductCode
-
-instance NFData ProductCode
-
--- | Describes a virtual private gateway propagating route.
---
---
---
--- /See:/ 'propagatingVGW' smart constructor.
-newtype PropagatingVGW = PropagatingVGW'
-    { _pvGatewayId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PropagatingVGW' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pvGatewayId' - The ID of the virtual private gateway (VGW).
-propagatingVGW
-    :: PropagatingVGW
-propagatingVGW =
-    PropagatingVGW'
-    { _pvGatewayId = Nothing
-    }
-
--- | The ID of the virtual private gateway (VGW).
-pvGatewayId :: Lens' PropagatingVGW (Maybe Text)
-pvGatewayId = lens _pvGatewayId (\ s a -> s{_pvGatewayId = a});
-
-instance FromXML PropagatingVGW where
-        parseXML x = PropagatingVGW' <$> (x .@? "gatewayId")
-
-instance Hashable PropagatingVGW
-
-instance NFData PropagatingVGW
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
---
---
---
--- /See:/ 'provisionedBandwidth' smart constructor.
-data ProvisionedBandwidth = ProvisionedBandwidth'
-    { _pbStatus        :: !(Maybe Text)
-    , _pbRequested     :: !(Maybe Text)
-    , _pbProvisioned   :: !(Maybe Text)
-    , _pbRequestTime   :: !(Maybe ISO8601)
-    , _pbProvisionTime :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProvisionedBandwidth' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pbStatus' - Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
---
--- * 'pbRequested' - Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
---
--- * 'pbProvisioned' - Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
---
--- * 'pbRequestTime' - Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
---
--- * 'pbProvisionTime' - Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-provisionedBandwidth
-    :: ProvisionedBandwidth
-provisionedBandwidth =
-    ProvisionedBandwidth'
-    { _pbStatus = Nothing
-    , _pbRequested = Nothing
-    , _pbProvisioned = Nothing
-    , _pbRequestTime = Nothing
-    , _pbProvisionTime = Nothing
-    }
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-pbStatus :: Lens' ProvisionedBandwidth (Maybe Text)
-pbStatus = lens _pbStatus (\ s a -> s{_pbStatus = a});
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-pbRequested :: Lens' ProvisionedBandwidth (Maybe Text)
-pbRequested = lens _pbRequested (\ s a -> s{_pbRequested = a});
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-pbProvisioned :: Lens' ProvisionedBandwidth (Maybe Text)
-pbProvisioned = lens _pbProvisioned (\ s a -> s{_pbProvisioned = a});
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-pbRequestTime :: Lens' ProvisionedBandwidth (Maybe UTCTime)
-pbRequestTime = lens _pbRequestTime (\ s a -> s{_pbRequestTime = a}) . mapping _Time;
-
--- | Reserved. If you need to sustain traffic greater than the <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html documented limits> , contact us through the <https://console.aws.amazon.com/support/home? Support Center> .
-pbProvisionTime :: Lens' ProvisionedBandwidth (Maybe UTCTime)
-pbProvisionTime = lens _pbProvisionTime (\ s a -> s{_pbProvisionTime = a}) . mapping _Time;
-
-instance FromXML ProvisionedBandwidth where
-        parseXML x
-          = ProvisionedBandwidth' <$>
-              (x .@? "status") <*> (x .@? "requested") <*>
-                (x .@? "provisioned")
-                <*> (x .@? "requestTime")
-                <*> (x .@? "provisionTime")
-
-instance Hashable ProvisionedBandwidth
-
-instance NFData ProvisionedBandwidth
-
--- | Describes the result of the purchase.
---
---
---
--- /See:/ 'purchase' smart constructor.
-data Purchase = Purchase'
-    { _pInstanceFamily    :: !(Maybe Text)
-    , _pCurrencyCode      :: !(Maybe CurrencyCodeValues)
-    , _pHostReservationId :: !(Maybe Text)
-    , _pHourlyPrice       :: !(Maybe Text)
-    , _pUpfrontPrice      :: !(Maybe Text)
-    , _pHostIdSet         :: !(Maybe [Text])
-    , _pDuration          :: !(Maybe Int)
-    , _pPaymentOption     :: !(Maybe PaymentOption)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Purchase' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pInstanceFamily' - The instance family on the Dedicated Host that the reservation can be associated with.
---
--- * 'pCurrencyCode' - The currency in which the @UpfrontPrice@ and @HourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
---
--- * 'pHostReservationId' - The ID of the reservation.
---
--- * 'pHourlyPrice' - The hourly price of the reservation per hour.
---
--- * 'pUpfrontPrice' - The upfront price of the reservation.
---
--- * 'pHostIdSet' - The IDs of the Dedicated Hosts associated with the reservation.
---
--- * 'pDuration' - The duration of the reservation's term in seconds.
---
--- * 'pPaymentOption' - The payment option for the reservation.
-purchase
-    :: Purchase
-purchase =
-    Purchase'
-    { _pInstanceFamily = Nothing
-    , _pCurrencyCode = Nothing
-    , _pHostReservationId = Nothing
-    , _pHourlyPrice = Nothing
-    , _pUpfrontPrice = Nothing
-    , _pHostIdSet = Nothing
-    , _pDuration = Nothing
-    , _pPaymentOption = Nothing
-    }
-
--- | The instance family on the Dedicated Host that the reservation can be associated with.
-pInstanceFamily :: Lens' Purchase (Maybe Text)
-pInstanceFamily = lens _pInstanceFamily (\ s a -> s{_pInstanceFamily = a});
-
--- | The currency in which the @UpfrontPrice@ and @HourlyPrice@ amounts are specified. At this time, the only supported currency is @USD@ .
-pCurrencyCode :: Lens' Purchase (Maybe CurrencyCodeValues)
-pCurrencyCode = lens _pCurrencyCode (\ s a -> s{_pCurrencyCode = a});
-
--- | The ID of the reservation.
-pHostReservationId :: Lens' Purchase (Maybe Text)
-pHostReservationId = lens _pHostReservationId (\ s a -> s{_pHostReservationId = a});
-
--- | The hourly price of the reservation per hour.
-pHourlyPrice :: Lens' Purchase (Maybe Text)
-pHourlyPrice = lens _pHourlyPrice (\ s a -> s{_pHourlyPrice = a});
-
--- | The upfront price of the reservation.
-pUpfrontPrice :: Lens' Purchase (Maybe Text)
-pUpfrontPrice = lens _pUpfrontPrice (\ s a -> s{_pUpfrontPrice = a});
-
--- | The IDs of the Dedicated Hosts associated with the reservation.
-pHostIdSet :: Lens' Purchase [Text]
-pHostIdSet = lens _pHostIdSet (\ s a -> s{_pHostIdSet = a}) . _Default . _Coerce;
-
--- | The duration of the reservation's term in seconds.
-pDuration :: Lens' Purchase (Maybe Int)
-pDuration = lens _pDuration (\ s a -> s{_pDuration = a});
-
--- | The payment option for the reservation.
-pPaymentOption :: Lens' Purchase (Maybe PaymentOption)
-pPaymentOption = lens _pPaymentOption (\ s a -> s{_pPaymentOption = a});
-
-instance FromXML Purchase where
-        parseXML x
-          = Purchase' <$>
-              (x .@? "instanceFamily") <*> (x .@? "currencyCode")
-                <*> (x .@? "hostReservationId")
-                <*> (x .@? "hourlyPrice")
-                <*> (x .@? "upfrontPrice")
-                <*>
-                (x .@? "hostIdSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "duration")
-                <*> (x .@? "paymentOption")
-
-instance Hashable Purchase
-
-instance NFData Purchase
-
--- | Describes a request to purchase Scheduled Instances.
---
---
---
--- /See:/ 'purchaseRequest' smart constructor.
-data PurchaseRequest = PurchaseRequest'
-    { _prPurchaseToken :: !Text
-    , _prInstanceCount :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PurchaseRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prPurchaseToken' - The purchase token.
---
--- * 'prInstanceCount' - The number of instances.
-purchaseRequest
-    :: Text -- ^ 'prPurchaseToken'
-    -> Int -- ^ 'prInstanceCount'
-    -> PurchaseRequest
-purchaseRequest pPurchaseToken_ pInstanceCount_ =
-    PurchaseRequest'
-    { _prPurchaseToken = pPurchaseToken_
-    , _prInstanceCount = pInstanceCount_
-    }
-
--- | The purchase token.
-prPurchaseToken :: Lens' PurchaseRequest Text
-prPurchaseToken = lens _prPurchaseToken (\ s a -> s{_prPurchaseToken = a});
-
--- | The number of instances.
-prInstanceCount :: Lens' PurchaseRequest Int
-prInstanceCount = lens _prInstanceCount (\ s a -> s{_prInstanceCount = a});
-
-instance Hashable PurchaseRequest
-
-instance NFData PurchaseRequest
-
-instance ToQuery PurchaseRequest where
-        toQuery PurchaseRequest'{..}
-          = mconcat
-              ["PurchaseToken" =: _prPurchaseToken,
-               "InstanceCount" =: _prInstanceCount]
-
--- | Describes a recurring charge.
---
---
---
--- /See:/ 'recurringCharge' smart constructor.
-data RecurringCharge = RecurringCharge'
-    { _rcAmount    :: !(Maybe Double)
-    , _rcFrequency :: !(Maybe RecurringChargeFrequency)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RecurringCharge' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcAmount' - The amount of the recurring charge.
---
--- * 'rcFrequency' - The frequency of the recurring charge.
-recurringCharge
-    :: RecurringCharge
-recurringCharge =
-    RecurringCharge'
-    { _rcAmount = Nothing
-    , _rcFrequency = Nothing
-    }
-
--- | The amount of the recurring charge.
-rcAmount :: Lens' RecurringCharge (Maybe Double)
-rcAmount = lens _rcAmount (\ s a -> s{_rcAmount = a});
-
--- | The frequency of the recurring charge.
-rcFrequency :: Lens' RecurringCharge (Maybe RecurringChargeFrequency)
-rcFrequency = lens _rcFrequency (\ s a -> s{_rcFrequency = a});
-
-instance FromXML RecurringCharge where
-        parseXML x
-          = RecurringCharge' <$>
-              (x .@? "amount") <*> (x .@? "frequency")
-
-instance Hashable RecurringCharge
-
-instance NFData RecurringCharge
-
--- | Describes a region.
---
---
---
--- /See:/ 'regionInfo' smart constructor.
-data RegionInfo = RegionInfo'
-    { _riRegionName :: !(Maybe Text)
-    , _riEndpoint   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RegionInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riRegionName' - The name of the region.
---
--- * 'riEndpoint' - The region service endpoint.
-regionInfo
-    :: RegionInfo
-regionInfo =
-    RegionInfo'
-    { _riRegionName = Nothing
-    , _riEndpoint = Nothing
-    }
-
--- | The name of the region.
-riRegionName :: Lens' RegionInfo (Maybe Text)
-riRegionName = lens _riRegionName (\ s a -> s{_riRegionName = a});
-
--- | The region service endpoint.
-riEndpoint :: Lens' RegionInfo (Maybe Text)
-riEndpoint = lens _riEndpoint (\ s a -> s{_riEndpoint = a});
-
-instance FromXML RegionInfo where
-        parseXML x
-          = RegionInfo' <$>
-              (x .@? "regionName") <*> (x .@? "regionEndpoint")
-
-instance Hashable RegionInfo
-
-instance NFData RegionInfo
-
--- | Describes the launch specification for an instance.
---
---
---
--- /See:/ 'requestSpotLaunchSpecification' smart constructor.
-data RequestSpotLaunchSpecification = RequestSpotLaunchSpecification'
-    { _rslsSecurityGroupIds    :: !(Maybe [Text])
-    , _rslsSecurityGroups      :: !(Maybe [Text])
-    , _rslsKeyName             :: !(Maybe Text)
-    , _rslsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _rslsRAMDiskId           :: !(Maybe Text)
-    , _rslsSubnetId            :: !(Maybe Text)
-    , _rslsKernelId            :: !(Maybe Text)
-    , _rslsInstanceType        :: !(Maybe InstanceType)
-    , _rslsEBSOptimized        :: !(Maybe Bool)
-    , _rslsUserData            :: !(Maybe Text)
-    , _rslsMonitoring          :: !(Maybe RunInstancesMonitoringEnabled)
-    , _rslsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
-    , _rslsImageId             :: !(Maybe Text)
-    , _rslsAddressingType      :: !(Maybe Text)
-    , _rslsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _rslsPlacement           :: !(Maybe SpotPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestSpotLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rslsSecurityGroupIds' - Undocumented member.
---
--- * 'rslsSecurityGroups' - Undocumented member.
---
--- * 'rslsKeyName' - The name of the key pair.
---
--- * 'rslsNetworkInterfaces' - One or more network interfaces. If you specify a network interface, you must specify subnet IDs and security group IDs using the network interface.
---
--- * 'rslsRAMDiskId' - The ID of the RAM disk.
---
--- * 'rslsSubnetId' - The ID of the subnet in which to launch the instance.
---
--- * 'rslsKernelId' - The ID of the kernel.
---
--- * 'rslsInstanceType' - The instance type.
---
--- * 'rslsEBSOptimized' - Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance. Default: @false@
---
--- * 'rslsUserData' - The user data to make available to the instances. If you are using an AWS SDK or 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.
---
--- * 'rslsMonitoring' - Undocumented member.
---
--- * 'rslsIAMInstanceProfile' - The IAM instance profile.
---
--- * 'rslsImageId' - The ID of the AMI.
---
--- * 'rslsAddressingType' - Deprecated.
---
--- * 'rslsBlockDeviceMappings' - One or more block device mapping entries. Although you can specify encrypted EBS volumes in this block device mapping for your Spot Instances, these volumes are not encrypted.
---
--- * 'rslsPlacement' - The placement information for the instance.
-requestSpotLaunchSpecification
-    :: RequestSpotLaunchSpecification
-requestSpotLaunchSpecification =
-    RequestSpotLaunchSpecification'
-    { _rslsSecurityGroupIds = Nothing
-    , _rslsSecurityGroups = Nothing
-    , _rslsKeyName = Nothing
-    , _rslsNetworkInterfaces = Nothing
-    , _rslsRAMDiskId = Nothing
-    , _rslsSubnetId = Nothing
-    , _rslsKernelId = Nothing
-    , _rslsInstanceType = Nothing
-    , _rslsEBSOptimized = Nothing
-    , _rslsUserData = Nothing
-    , _rslsMonitoring = Nothing
-    , _rslsIAMInstanceProfile = Nothing
-    , _rslsImageId = Nothing
-    , _rslsAddressingType = Nothing
-    , _rslsBlockDeviceMappings = Nothing
-    , _rslsPlacement = Nothing
-    }
-
--- | Undocumented member.
-rslsSecurityGroupIds :: Lens' RequestSpotLaunchSpecification [Text]
-rslsSecurityGroupIds = lens _rslsSecurityGroupIds (\ s a -> s{_rslsSecurityGroupIds = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-rslsSecurityGroups :: Lens' RequestSpotLaunchSpecification [Text]
-rslsSecurityGroups = lens _rslsSecurityGroups (\ s a -> s{_rslsSecurityGroups = a}) . _Default . _Coerce;
-
--- | The name of the key pair.
-rslsKeyName :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsKeyName = lens _rslsKeyName (\ s a -> s{_rslsKeyName = a});
-
--- | One or more network interfaces. If you specify a network interface, you must specify subnet IDs and security group IDs using the network interface.
-rslsNetworkInterfaces :: Lens' RequestSpotLaunchSpecification [InstanceNetworkInterfaceSpecification]
-rslsNetworkInterfaces = lens _rslsNetworkInterfaces (\ s a -> s{_rslsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-rslsRAMDiskId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsRAMDiskId = lens _rslsRAMDiskId (\ s a -> s{_rslsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instance.
-rslsSubnetId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsSubnetId = lens _rslsSubnetId (\ s a -> s{_rslsSubnetId = a});
-
--- | The ID of the kernel.
-rslsKernelId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsKernelId = lens _rslsKernelId (\ s a -> s{_rslsKernelId = a});
-
--- | The instance type.
-rslsInstanceType :: Lens' RequestSpotLaunchSpecification (Maybe InstanceType)
-rslsInstanceType = lens _rslsInstanceType (\ s a -> s{_rslsInstanceType = a});
-
--- | Indicates whether the instance is optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance. Default: @false@
-rslsEBSOptimized :: Lens' RequestSpotLaunchSpecification (Maybe Bool)
-rslsEBSOptimized = lens _rslsEBSOptimized (\ s a -> s{_rslsEBSOptimized = a});
-
--- | The user data to make available to the instances. If you are using an AWS SDK or 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.
-rslsUserData :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsUserData = lens _rslsUserData (\ s a -> s{_rslsUserData = a});
-
--- | Undocumented member.
-rslsMonitoring :: Lens' RequestSpotLaunchSpecification (Maybe RunInstancesMonitoringEnabled)
-rslsMonitoring = lens _rslsMonitoring (\ s a -> s{_rslsMonitoring = a});
-
--- | The IAM instance profile.
-rslsIAMInstanceProfile :: Lens' RequestSpotLaunchSpecification (Maybe IAMInstanceProfileSpecification)
-rslsIAMInstanceProfile = lens _rslsIAMInstanceProfile (\ s a -> s{_rslsIAMInstanceProfile = a});
-
--- | The ID of the AMI.
-rslsImageId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsImageId = lens _rslsImageId (\ s a -> s{_rslsImageId = a});
-
--- | Deprecated.
-rslsAddressingType :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsAddressingType = lens _rslsAddressingType (\ s a -> s{_rslsAddressingType = a});
-
--- | One or more block device mapping entries. Although you can specify encrypted EBS volumes in this block device mapping for your Spot Instances, these volumes are not encrypted.
-rslsBlockDeviceMappings :: Lens' RequestSpotLaunchSpecification [BlockDeviceMapping]
-rslsBlockDeviceMappings = lens _rslsBlockDeviceMappings (\ s a -> s{_rslsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information for the instance.
-rslsPlacement :: Lens' RequestSpotLaunchSpecification (Maybe SpotPlacement)
-rslsPlacement = lens _rslsPlacement (\ s a -> s{_rslsPlacement = a});
-
-instance Hashable RequestSpotLaunchSpecification
-
-instance NFData RequestSpotLaunchSpecification
-
-instance ToQuery RequestSpotLaunchSpecification where
-        toQuery RequestSpotLaunchSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "SecurityGroupId" <$>
-                    _rslsSecurityGroupIds),
-               toQuery
-                 (toQueryList "SecurityGroup" <$>
-                    _rslsSecurityGroups),
-               "KeyName" =: _rslsKeyName,
-               toQuery
-                 (toQueryList "NetworkInterface" <$>
-                    _rslsNetworkInterfaces),
-               "RamdiskId" =: _rslsRAMDiskId,
-               "SubnetId" =: _rslsSubnetId,
-               "KernelId" =: _rslsKernelId,
-               "InstanceType" =: _rslsInstanceType,
-               "EbsOptimized" =: _rslsEBSOptimized,
-               "UserData" =: _rslsUserData,
-               "Monitoring" =: _rslsMonitoring,
-               "IamInstanceProfile" =: _rslsIAMInstanceProfile,
-               "ImageId" =: _rslsImageId,
-               "AddressingType" =: _rslsAddressingType,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _rslsBlockDeviceMappings),
-               "Placement" =: _rslsPlacement]
-
--- | Describes a reservation.
---
---
---
--- /See:/ 'reservation' smart constructor.
-data Reservation = Reservation'
-    { _rGroups        :: !(Maybe [GroupIdentifier])
-    , _rInstances     :: !(Maybe [Instance])
-    , _rRequesterId   :: !(Maybe Text)
-    , _rReservationId :: !Text
-    , _rOwnerId       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Reservation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rGroups' - [EC2-Classic only] One or more security groups.
---
--- * 'rInstances' - One or more instances.
---
--- * 'rRequesterId' - The ID of the requester that launched the instances on your behalf (for example, AWS Management Console or Auto Scaling).
---
--- * 'rReservationId' - The ID of the reservation.
---
--- * 'rOwnerId' - The ID of the AWS account that owns the reservation.
-reservation
-    :: Text -- ^ 'rReservationId'
-    -> Text -- ^ 'rOwnerId'
-    -> Reservation
-reservation pReservationId_ pOwnerId_ =
-    Reservation'
-    { _rGroups = Nothing
-    , _rInstances = Nothing
-    , _rRequesterId = Nothing
-    , _rReservationId = pReservationId_
-    , _rOwnerId = pOwnerId_
-    }
-
--- | [EC2-Classic only] One or more security groups.
-rGroups :: Lens' Reservation [GroupIdentifier]
-rGroups = lens _rGroups (\ s a -> s{_rGroups = a}) . _Default . _Coerce;
-
--- | One or more instances.
-rInstances :: Lens' Reservation [Instance]
-rInstances = lens _rInstances (\ s a -> s{_rInstances = a}) . _Default . _Coerce;
-
--- | The ID of the requester that launched the instances on your behalf (for example, AWS Management Console or Auto Scaling).
-rRequesterId :: Lens' Reservation (Maybe Text)
-rRequesterId = lens _rRequesterId (\ s a -> s{_rRequesterId = a});
-
--- | The ID of the reservation.
-rReservationId :: Lens' Reservation Text
-rReservationId = lens _rReservationId (\ s a -> s{_rReservationId = a});
-
--- | The ID of the AWS account that owns the reservation.
-rOwnerId :: Lens' Reservation Text
-rOwnerId = lens _rOwnerId (\ s a -> s{_rOwnerId = a});
-
-instance FromXML Reservation where
-        parseXML x
-          = Reservation' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*>
-                (x .@? "instancesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "requesterId")
-                <*> (x .@ "reservationId")
-                <*> (x .@ "ownerId")
-
-instance Hashable Reservation
-
-instance NFData Reservation
-
--- | The cost associated with the Reserved Instance.
---
---
---
--- /See:/ 'reservationValue' smart constructor.
-data ReservationValue = ReservationValue'
-    { _rvHourlyPrice           :: !(Maybe Text)
-    , _rvRemainingTotalValue   :: !(Maybe Text)
-    , _rvRemainingUpfrontValue :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservationValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rvHourlyPrice' - The hourly rate of the reservation.
---
--- * 'rvRemainingTotalValue' - The balance of the total value (the sum of remainingUpfrontValue + hourlyPrice * number of hours remaining).
---
--- * 'rvRemainingUpfrontValue' - The remaining upfront cost of the reservation.
-reservationValue
-    :: ReservationValue
-reservationValue =
-    ReservationValue'
-    { _rvHourlyPrice = Nothing
-    , _rvRemainingTotalValue = Nothing
-    , _rvRemainingUpfrontValue = Nothing
-    }
-
--- | The hourly rate of the reservation.
-rvHourlyPrice :: Lens' ReservationValue (Maybe Text)
-rvHourlyPrice = lens _rvHourlyPrice (\ s a -> s{_rvHourlyPrice = a});
-
--- | The balance of the total value (the sum of remainingUpfrontValue + hourlyPrice * number of hours remaining).
-rvRemainingTotalValue :: Lens' ReservationValue (Maybe Text)
-rvRemainingTotalValue = lens _rvRemainingTotalValue (\ s a -> s{_rvRemainingTotalValue = a});
-
--- | The remaining upfront cost of the reservation.
-rvRemainingUpfrontValue :: Lens' ReservationValue (Maybe Text)
-rvRemainingUpfrontValue = lens _rvRemainingUpfrontValue (\ s a -> s{_rvRemainingUpfrontValue = a});
-
-instance FromXML ReservationValue where
-        parseXML x
-          = ReservationValue' <$>
-              (x .@? "hourlyPrice") <*>
-                (x .@? "remainingTotalValue")
-                <*> (x .@? "remainingUpfrontValue")
-
-instance Hashable ReservationValue
-
-instance NFData ReservationValue
-
--- | Describes the limit price of a Reserved Instance offering.
---
---
---
--- /See:/ 'reservedInstanceLimitPrice' smart constructor.
-data ReservedInstanceLimitPrice = ReservedInstanceLimitPrice'
-    { _rilpAmount       :: !(Maybe Double)
-    , _rilpCurrencyCode :: !(Maybe CurrencyCodeValues)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstanceLimitPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rilpAmount' - Used for Reserved Instance Marketplace offerings. Specifies the limit price on the total order (instanceCount * price).
---
--- * 'rilpCurrencyCode' - The currency in which the @limitPrice@ amount is specified. At this time, the only supported currency is @USD@ .
-reservedInstanceLimitPrice
-    :: ReservedInstanceLimitPrice
-reservedInstanceLimitPrice =
-    ReservedInstanceLimitPrice'
-    { _rilpAmount = Nothing
-    , _rilpCurrencyCode = Nothing
-    }
-
--- | Used for Reserved Instance Marketplace offerings. Specifies the limit price on the total order (instanceCount * price).
-rilpAmount :: Lens' ReservedInstanceLimitPrice (Maybe Double)
-rilpAmount = lens _rilpAmount (\ s a -> s{_rilpAmount = a});
-
--- | The currency in which the @limitPrice@ amount is specified. At this time, the only supported currency is @USD@ .
-rilpCurrencyCode :: Lens' ReservedInstanceLimitPrice (Maybe CurrencyCodeValues)
-rilpCurrencyCode = lens _rilpCurrencyCode (\ s a -> s{_rilpCurrencyCode = a});
-
-instance Hashable ReservedInstanceLimitPrice
-
-instance NFData ReservedInstanceLimitPrice
-
-instance ToQuery ReservedInstanceLimitPrice where
-        toQuery ReservedInstanceLimitPrice'{..}
-          = mconcat
-              ["Amount" =: _rilpAmount,
-               "CurrencyCode" =: _rilpCurrencyCode]
-
--- | The total value of the Convertible Reserved Instance.
---
---
---
--- /See:/ 'reservedInstanceReservationValue' smart constructor.
-data ReservedInstanceReservationValue = ReservedInstanceReservationValue'
-    { _rirvReservationValue   :: !(Maybe ReservationValue)
-    , _rirvReservedInstanceId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstanceReservationValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rirvReservationValue' - The total value of the Convertible Reserved Instance that you are exchanging.
---
--- * 'rirvReservedInstanceId' - The ID of the Convertible Reserved Instance that you are exchanging.
-reservedInstanceReservationValue
-    :: ReservedInstanceReservationValue
-reservedInstanceReservationValue =
-    ReservedInstanceReservationValue'
-    { _rirvReservationValue = Nothing
-    , _rirvReservedInstanceId = Nothing
-    }
-
--- | The total value of the Convertible Reserved Instance that you are exchanging.
-rirvReservationValue :: Lens' ReservedInstanceReservationValue (Maybe ReservationValue)
-rirvReservationValue = lens _rirvReservationValue (\ s a -> s{_rirvReservationValue = a});
-
--- | The ID of the Convertible Reserved Instance that you are exchanging.
-rirvReservedInstanceId :: Lens' ReservedInstanceReservationValue (Maybe Text)
-rirvReservedInstanceId = lens _rirvReservedInstanceId (\ s a -> s{_rirvReservedInstanceId = a});
-
-instance FromXML ReservedInstanceReservationValue
-         where
-        parseXML x
-          = ReservedInstanceReservationValue' <$>
-              (x .@? "reservationValue") <*>
-                (x .@? "reservedInstanceId")
-
-instance Hashable ReservedInstanceReservationValue
-
-instance NFData ReservedInstanceReservationValue
-
--- | Describes a Reserved Instance.
---
---
---
--- /See:/ 'reservedInstances' smart constructor.
-data ReservedInstances = ReservedInstances'
-    { _riState               :: !(Maybe ReservedInstanceState)
-    , _riCurrencyCode        :: !(Maybe CurrencyCodeValues)
-    , _riInstanceCount       :: !(Maybe Int)
-    , _riProductDescription  :: !(Maybe RIProductDescription)
-    , _riStart               :: !(Maybe ISO8601)
-    , _riInstanceType        :: !(Maybe InstanceType)
-    , _riEnd                 :: !(Maybe ISO8601)
-    , _riAvailabilityZone    :: !(Maybe Text)
-    , _riScope               :: !(Maybe Scope)
-    , _riRecurringCharges    :: !(Maybe [RecurringCharge])
-    , _riOfferingType        :: !(Maybe OfferingTypeValues)
-    , _riUsagePrice          :: !(Maybe Double)
-    , _riFixedPrice          :: !(Maybe Double)
-    , _riReservedInstancesId :: !(Maybe Text)
-    , _riInstanceTenancy     :: !(Maybe Tenancy)
-    , _riOfferingClass       :: !(Maybe OfferingClassType)
-    , _riDuration            :: !(Maybe Integer)
-    , _riTags                :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riState' - The state of the Reserved Instance purchase.
---
--- * 'riCurrencyCode' - The currency of the Reserved Instance. It's specified using ISO 4217 standard currency codes. At this time, the only supported currency is @USD@ .
---
--- * 'riInstanceCount' - The number of reservations purchased.
---
--- * 'riProductDescription' - The Reserved Instance product platform description.
---
--- * 'riStart' - The date and time the Reserved Instance started.
---
--- * 'riInstanceType' - The instance type on which the Reserved Instance can be used.
---
--- * 'riEnd' - The time when the Reserved Instance expires.
---
--- * 'riAvailabilityZone' - The Availability Zone in which the Reserved Instance can be used.
---
--- * 'riScope' - The scope of the Reserved Instance.
---
--- * 'riRecurringCharges' - The recurring charge tag assigned to the resource.
---
--- * 'riOfferingType' - The Reserved Instance offering type.
---
--- * 'riUsagePrice' - The usage price of the Reserved Instance, per hour.
---
--- * 'riFixedPrice' - The purchase price of the Reserved Instance.
---
--- * 'riReservedInstancesId' - The ID of the Reserved Instance.
---
--- * 'riInstanceTenancy' - The tenancy of the instance.
---
--- * 'riOfferingClass' - The offering class of the Reserved Instance.
---
--- * 'riDuration' - The duration of the Reserved Instance, in seconds.
---
--- * 'riTags' - Any tags assigned to the resource.
-reservedInstances
-    :: ReservedInstances
-reservedInstances =
-    ReservedInstances'
-    { _riState = Nothing
-    , _riCurrencyCode = Nothing
-    , _riInstanceCount = Nothing
-    , _riProductDescription = Nothing
-    , _riStart = Nothing
-    , _riInstanceType = Nothing
-    , _riEnd = Nothing
-    , _riAvailabilityZone = Nothing
-    , _riScope = Nothing
-    , _riRecurringCharges = Nothing
-    , _riOfferingType = Nothing
-    , _riUsagePrice = Nothing
-    , _riFixedPrice = Nothing
-    , _riReservedInstancesId = Nothing
-    , _riInstanceTenancy = Nothing
-    , _riOfferingClass = Nothing
-    , _riDuration = Nothing
-    , _riTags = Nothing
-    }
-
--- | The state of the Reserved Instance purchase.
-riState :: Lens' ReservedInstances (Maybe ReservedInstanceState)
-riState = lens _riState (\ s a -> s{_riState = a});
-
--- | The currency of the Reserved Instance. It's specified using ISO 4217 standard currency codes. At this time, the only supported currency is @USD@ .
-riCurrencyCode :: Lens' ReservedInstances (Maybe CurrencyCodeValues)
-riCurrencyCode = lens _riCurrencyCode (\ s a -> s{_riCurrencyCode = a});
-
--- | The number of reservations purchased.
-riInstanceCount :: Lens' ReservedInstances (Maybe Int)
-riInstanceCount = lens _riInstanceCount (\ s a -> s{_riInstanceCount = a});
-
--- | The Reserved Instance product platform description.
-riProductDescription :: Lens' ReservedInstances (Maybe RIProductDescription)
-riProductDescription = lens _riProductDescription (\ s a -> s{_riProductDescription = a});
-
--- | The date and time the Reserved Instance started.
-riStart :: Lens' ReservedInstances (Maybe UTCTime)
-riStart = lens _riStart (\ s a -> s{_riStart = a}) . mapping _Time;
-
--- | The instance type on which the Reserved Instance can be used.
-riInstanceType :: Lens' ReservedInstances (Maybe InstanceType)
-riInstanceType = lens _riInstanceType (\ s a -> s{_riInstanceType = a});
-
--- | The time when the Reserved Instance expires.
-riEnd :: Lens' ReservedInstances (Maybe UTCTime)
-riEnd = lens _riEnd (\ s a -> s{_riEnd = a}) . mapping _Time;
-
--- | The Availability Zone in which the Reserved Instance can be used.
-riAvailabilityZone :: Lens' ReservedInstances (Maybe Text)
-riAvailabilityZone = lens _riAvailabilityZone (\ s a -> s{_riAvailabilityZone = a});
-
--- | The scope of the Reserved Instance.
-riScope :: Lens' ReservedInstances (Maybe Scope)
-riScope = lens _riScope (\ s a -> s{_riScope = a});
-
--- | The recurring charge tag assigned to the resource.
-riRecurringCharges :: Lens' ReservedInstances [RecurringCharge]
-riRecurringCharges = lens _riRecurringCharges (\ s a -> s{_riRecurringCharges = a}) . _Default . _Coerce;
-
--- | The Reserved Instance offering type.
-riOfferingType :: Lens' ReservedInstances (Maybe OfferingTypeValues)
-riOfferingType = lens _riOfferingType (\ s a -> s{_riOfferingType = a});
-
--- | The usage price of the Reserved Instance, per hour.
-riUsagePrice :: Lens' ReservedInstances (Maybe Double)
-riUsagePrice = lens _riUsagePrice (\ s a -> s{_riUsagePrice = a});
-
--- | The purchase price of the Reserved Instance.
-riFixedPrice :: Lens' ReservedInstances (Maybe Double)
-riFixedPrice = lens _riFixedPrice (\ s a -> s{_riFixedPrice = a});
-
--- | The ID of the Reserved Instance.
-riReservedInstancesId :: Lens' ReservedInstances (Maybe Text)
-riReservedInstancesId = lens _riReservedInstancesId (\ s a -> s{_riReservedInstancesId = a});
-
--- | The tenancy of the instance.
-riInstanceTenancy :: Lens' ReservedInstances (Maybe Tenancy)
-riInstanceTenancy = lens _riInstanceTenancy (\ s a -> s{_riInstanceTenancy = a});
-
--- | The offering class of the Reserved Instance.
-riOfferingClass :: Lens' ReservedInstances (Maybe OfferingClassType)
-riOfferingClass = lens _riOfferingClass (\ s a -> s{_riOfferingClass = a});
-
--- | The duration of the Reserved Instance, in seconds.
-riDuration :: Lens' ReservedInstances (Maybe Integer)
-riDuration = lens _riDuration (\ s a -> s{_riDuration = a});
-
--- | Any tags assigned to the resource.
-riTags :: Lens' ReservedInstances [Tag]
-riTags = lens _riTags (\ s a -> s{_riTags = a}) . _Default . _Coerce;
-
-instance FromXML ReservedInstances where
-        parseXML x
-          = ReservedInstances' <$>
-              (x .@? "state") <*> (x .@? "currencyCode") <*>
-                (x .@? "instanceCount")
-                <*> (x .@? "productDescription")
-                <*> (x .@? "start")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "end")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "scope")
-                <*>
-                (x .@? "recurringCharges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "offeringType")
-                <*> (x .@? "usagePrice")
-                <*> (x .@? "fixedPrice")
-                <*> (x .@? "reservedInstancesId")
-                <*> (x .@? "instanceTenancy")
-                <*> (x .@? "offeringClass")
-                <*> (x .@? "duration")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable ReservedInstances
-
-instance NFData ReservedInstances
-
--- | Describes the configuration settings for the modified Reserved Instances.
---
---
---
--- /See:/ 'reservedInstancesConfiguration' smart constructor.
-data ReservedInstancesConfiguration = ReservedInstancesConfiguration'
-    { _ricPlatform         :: !(Maybe Text)
-    , _ricInstanceCount    :: !(Maybe Int)
-    , _ricInstanceType     :: !(Maybe InstanceType)
-    , _ricAvailabilityZone :: !(Maybe Text)
-    , _ricScope            :: !(Maybe Scope)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ricPlatform' - The network platform of the modified Reserved Instances, which is either EC2-Classic or EC2-VPC.
---
--- * 'ricInstanceCount' - The number of modified Reserved Instances.
---
--- * 'ricInstanceType' - The instance type for the modified Reserved Instances.
---
--- * 'ricAvailabilityZone' - The Availability Zone for the modified Reserved Instances.
---
--- * 'ricScope' - Whether the Reserved Instance is applied to instances in a region or instances in a specific Availability Zone.
-reservedInstancesConfiguration
-    :: ReservedInstancesConfiguration
-reservedInstancesConfiguration =
-    ReservedInstancesConfiguration'
-    { _ricPlatform = Nothing
-    , _ricInstanceCount = Nothing
-    , _ricInstanceType = Nothing
-    , _ricAvailabilityZone = Nothing
-    , _ricScope = Nothing
-    }
-
--- | The network platform of the modified Reserved Instances, which is either EC2-Classic or EC2-VPC.
-ricPlatform :: Lens' ReservedInstancesConfiguration (Maybe Text)
-ricPlatform = lens _ricPlatform (\ s a -> s{_ricPlatform = a});
-
--- | The number of modified Reserved Instances.
-ricInstanceCount :: Lens' ReservedInstancesConfiguration (Maybe Int)
-ricInstanceCount = lens _ricInstanceCount (\ s a -> s{_ricInstanceCount = a});
-
--- | The instance type for the modified Reserved Instances.
-ricInstanceType :: Lens' ReservedInstancesConfiguration (Maybe InstanceType)
-ricInstanceType = lens _ricInstanceType (\ s a -> s{_ricInstanceType = a});
-
--- | The Availability Zone for the modified Reserved Instances.
-ricAvailabilityZone :: Lens' ReservedInstancesConfiguration (Maybe Text)
-ricAvailabilityZone = lens _ricAvailabilityZone (\ s a -> s{_ricAvailabilityZone = a});
-
--- | Whether the Reserved Instance is applied to instances in a region or instances in a specific Availability Zone.
-ricScope :: Lens' ReservedInstancesConfiguration (Maybe Scope)
-ricScope = lens _ricScope (\ s a -> s{_ricScope = a});
-
-instance FromXML ReservedInstancesConfiguration where
-        parseXML x
-          = ReservedInstancesConfiguration' <$>
-              (x .@? "platform") <*> (x .@? "instanceCount") <*>
-                (x .@? "instanceType")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "scope")
-
-instance Hashable ReservedInstancesConfiguration
-
-instance NFData ReservedInstancesConfiguration
-
-instance ToQuery ReservedInstancesConfiguration where
-        toQuery ReservedInstancesConfiguration'{..}
-          = mconcat
-              ["Platform" =: _ricPlatform,
-               "InstanceCount" =: _ricInstanceCount,
-               "InstanceType" =: _ricInstanceType,
-               "AvailabilityZone" =: _ricAvailabilityZone,
-               "Scope" =: _ricScope]
-
--- | Describes the ID of a Reserved Instance.
---
---
---
--- /See:/ 'reservedInstancesId' smart constructor.
-newtype ReservedInstancesId = ReservedInstancesId'
-    { _riiReservedInstancesId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesId' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riiReservedInstancesId' - The ID of the Reserved Instance.
-reservedInstancesId
-    :: ReservedInstancesId
-reservedInstancesId =
-    ReservedInstancesId'
-    { _riiReservedInstancesId = Nothing
-    }
-
--- | The ID of the Reserved Instance.
-riiReservedInstancesId :: Lens' ReservedInstancesId (Maybe Text)
-riiReservedInstancesId = lens _riiReservedInstancesId (\ s a -> s{_riiReservedInstancesId = a});
-
-instance FromXML ReservedInstancesId where
-        parseXML x
-          = ReservedInstancesId' <$>
-              (x .@? "reservedInstancesId")
-
-instance Hashable ReservedInstancesId
-
-instance NFData ReservedInstancesId
-
--- | Describes a Reserved Instance listing.
---
---
---
--- /See:/ 'reservedInstancesListing' smart constructor.
-data ReservedInstancesListing = ReservedInstancesListing'
-    { _rilStatus                     :: !(Maybe ListingStatus)
-    , _rilClientToken                :: !(Maybe Text)
-    , _rilUpdateDate                 :: !(Maybe ISO8601)
-    , _rilCreateDate                 :: !(Maybe ISO8601)
-    , _rilPriceSchedules             :: !(Maybe [PriceSchedule])
-    , _rilStatusMessage              :: !(Maybe Text)
-    , _rilReservedInstancesId        :: !(Maybe Text)
-    , _rilTags                       :: !(Maybe [Tag])
-    , _rilInstanceCounts             :: !(Maybe [InstanceCount])
-    , _rilReservedInstancesListingId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesListing' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rilStatus' - The status of the Reserved Instance listing.
---
--- * 'rilClientToken' - A unique, case-sensitive key supplied by the client to ensure that the request is idempotent. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
---
--- * 'rilUpdateDate' - The last modified timestamp of the listing.
---
--- * 'rilCreateDate' - The time the listing was created.
---
--- * 'rilPriceSchedules' - The price of the Reserved Instance listing.
---
--- * 'rilStatusMessage' - The reason for the current status of the Reserved Instance listing. The response can be blank.
---
--- * 'rilReservedInstancesId' - The ID of the Reserved Instance.
---
--- * 'rilTags' - Any tags assigned to the resource.
---
--- * 'rilInstanceCounts' - The number of instances in this state.
---
--- * 'rilReservedInstancesListingId' - The ID of the Reserved Instance listing.
-reservedInstancesListing
-    :: ReservedInstancesListing
-reservedInstancesListing =
-    ReservedInstancesListing'
-    { _rilStatus = Nothing
-    , _rilClientToken = Nothing
-    , _rilUpdateDate = Nothing
-    , _rilCreateDate = Nothing
-    , _rilPriceSchedules = Nothing
-    , _rilStatusMessage = Nothing
-    , _rilReservedInstancesId = Nothing
-    , _rilTags = Nothing
-    , _rilInstanceCounts = Nothing
-    , _rilReservedInstancesListingId = Nothing
-    }
-
--- | The status of the Reserved Instance listing.
-rilStatus :: Lens' ReservedInstancesListing (Maybe ListingStatus)
-rilStatus = lens _rilStatus (\ s a -> s{_rilStatus = a});
-
--- | A unique, case-sensitive key supplied by the client to ensure that the request is idempotent. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-rilClientToken :: Lens' ReservedInstancesListing (Maybe Text)
-rilClientToken = lens _rilClientToken (\ s a -> s{_rilClientToken = a});
-
--- | The last modified timestamp of the listing.
-rilUpdateDate :: Lens' ReservedInstancesListing (Maybe UTCTime)
-rilUpdateDate = lens _rilUpdateDate (\ s a -> s{_rilUpdateDate = a}) . mapping _Time;
-
--- | The time the listing was created.
-rilCreateDate :: Lens' ReservedInstancesListing (Maybe UTCTime)
-rilCreateDate = lens _rilCreateDate (\ s a -> s{_rilCreateDate = a}) . mapping _Time;
-
--- | The price of the Reserved Instance listing.
-rilPriceSchedules :: Lens' ReservedInstancesListing [PriceSchedule]
-rilPriceSchedules = lens _rilPriceSchedules (\ s a -> s{_rilPriceSchedules = a}) . _Default . _Coerce;
-
--- | The reason for the current status of the Reserved Instance listing. The response can be blank.
-rilStatusMessage :: Lens' ReservedInstancesListing (Maybe Text)
-rilStatusMessage = lens _rilStatusMessage (\ s a -> s{_rilStatusMessage = a});
-
--- | The ID of the Reserved Instance.
-rilReservedInstancesId :: Lens' ReservedInstancesListing (Maybe Text)
-rilReservedInstancesId = lens _rilReservedInstancesId (\ s a -> s{_rilReservedInstancesId = a});
-
--- | Any tags assigned to the resource.
-rilTags :: Lens' ReservedInstancesListing [Tag]
-rilTags = lens _rilTags (\ s a -> s{_rilTags = a}) . _Default . _Coerce;
-
--- | The number of instances in this state.
-rilInstanceCounts :: Lens' ReservedInstancesListing [InstanceCount]
-rilInstanceCounts = lens _rilInstanceCounts (\ s a -> s{_rilInstanceCounts = a}) . _Default . _Coerce;
-
--- | The ID of the Reserved Instance listing.
-rilReservedInstancesListingId :: Lens' ReservedInstancesListing (Maybe Text)
-rilReservedInstancesListingId = lens _rilReservedInstancesListingId (\ s a -> s{_rilReservedInstancesListingId = a});
-
-instance FromXML ReservedInstancesListing where
-        parseXML x
-          = ReservedInstancesListing' <$>
-              (x .@? "status") <*> (x .@? "clientToken") <*>
-                (x .@? "updateDate")
-                <*> (x .@? "createDate")
-                <*>
-                (x .@? "priceSchedules" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "reservedInstancesId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "instanceCounts" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "reservedInstancesListingId")
-
-instance Hashable ReservedInstancesListing
-
-instance NFData ReservedInstancesListing
-
--- | Describes a Reserved Instance modification.
---
---
---
--- /See:/ 'reservedInstancesModification' smart constructor.
-data ReservedInstancesModification = ReservedInstancesModification'
-    { _rimModificationResults             :: !(Maybe [ReservedInstancesModificationResult])
-    , _rimStatus                          :: !(Maybe Text)
-    , _rimClientToken                     :: !(Maybe Text)
-    , _rimUpdateDate                      :: !(Maybe ISO8601)
-    , _rimCreateDate                      :: !(Maybe ISO8601)
-    , _rimEffectiveDate                   :: !(Maybe ISO8601)
-    , _rimStatusMessage                   :: !(Maybe Text)
-    , _rimReservedInstancesModificationId :: !(Maybe Text)
-    , _rimReservedInstancesIds            :: !(Maybe [ReservedInstancesId])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesModification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rimModificationResults' - Contains target configurations along with their corresponding new Reserved Instance IDs.
---
--- * 'rimStatus' - The status of the Reserved Instances modification request.
---
--- * 'rimClientToken' - A unique, case-sensitive key supplied by the client to ensure that the request is idempotent. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
---
--- * 'rimUpdateDate' - The time when the modification request was last updated.
---
--- * 'rimCreateDate' - The time when the modification request was created.
---
--- * 'rimEffectiveDate' - The time for the modification to become effective.
---
--- * 'rimStatusMessage' - The reason for the status.
---
--- * 'rimReservedInstancesModificationId' - A unique ID for the Reserved Instance modification.
---
--- * 'rimReservedInstancesIds' - The IDs of one or more Reserved Instances.
-reservedInstancesModification
-    :: ReservedInstancesModification
-reservedInstancesModification =
-    ReservedInstancesModification'
-    { _rimModificationResults = Nothing
-    , _rimStatus = Nothing
-    , _rimClientToken = Nothing
-    , _rimUpdateDate = Nothing
-    , _rimCreateDate = Nothing
-    , _rimEffectiveDate = Nothing
-    , _rimStatusMessage = Nothing
-    , _rimReservedInstancesModificationId = Nothing
-    , _rimReservedInstancesIds = Nothing
-    }
-
--- | Contains target configurations along with their corresponding new Reserved Instance IDs.
-rimModificationResults :: Lens' ReservedInstancesModification [ReservedInstancesModificationResult]
-rimModificationResults = lens _rimModificationResults (\ s a -> s{_rimModificationResults = a}) . _Default . _Coerce;
-
--- | The status of the Reserved Instances modification request.
-rimStatus :: Lens' ReservedInstancesModification (Maybe Text)
-rimStatus = lens _rimStatus (\ s a -> s{_rimStatus = a});
-
--- | A unique, case-sensitive key supplied by the client to ensure that the request is idempotent. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-rimClientToken :: Lens' ReservedInstancesModification (Maybe Text)
-rimClientToken = lens _rimClientToken (\ s a -> s{_rimClientToken = a});
-
--- | The time when the modification request was last updated.
-rimUpdateDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
-rimUpdateDate = lens _rimUpdateDate (\ s a -> s{_rimUpdateDate = a}) . mapping _Time;
-
--- | The time when the modification request was created.
-rimCreateDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
-rimCreateDate = lens _rimCreateDate (\ s a -> s{_rimCreateDate = a}) . mapping _Time;
-
--- | The time for the modification to become effective.
-rimEffectiveDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
-rimEffectiveDate = lens _rimEffectiveDate (\ s a -> s{_rimEffectiveDate = a}) . mapping _Time;
-
--- | The reason for the status.
-rimStatusMessage :: Lens' ReservedInstancesModification (Maybe Text)
-rimStatusMessage = lens _rimStatusMessage (\ s a -> s{_rimStatusMessage = a});
-
--- | A unique ID for the Reserved Instance modification.
-rimReservedInstancesModificationId :: Lens' ReservedInstancesModification (Maybe Text)
-rimReservedInstancesModificationId = lens _rimReservedInstancesModificationId (\ s a -> s{_rimReservedInstancesModificationId = a});
-
--- | The IDs of one or more Reserved Instances.
-rimReservedInstancesIds :: Lens' ReservedInstancesModification [ReservedInstancesId]
-rimReservedInstancesIds = lens _rimReservedInstancesIds (\ s a -> s{_rimReservedInstancesIds = a}) . _Default . _Coerce;
-
-instance FromXML ReservedInstancesModification where
-        parseXML x
-          = ReservedInstancesModification' <$>
-              (x .@? "modificationResultSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "status")
-                <*> (x .@? "clientToken")
-                <*> (x .@? "updateDate")
-                <*> (x .@? "createDate")
-                <*> (x .@? "effectiveDate")
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "reservedInstancesModificationId")
-                <*>
-                (x .@? "reservedInstancesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable ReservedInstancesModification
-
-instance NFData ReservedInstancesModification
-
--- | Describes the modification request/s.
---
---
---
--- /See:/ 'reservedInstancesModificationResult' smart constructor.
-data ReservedInstancesModificationResult = ReservedInstancesModificationResult'
-    { _rimrReservedInstancesId :: !(Maybe Text)
-    , _rimrTargetConfiguration :: !(Maybe ReservedInstancesConfiguration)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesModificationResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rimrReservedInstancesId' - The ID for the Reserved Instances that were created as part of the modification request. This field is only available when the modification is fulfilled.
---
--- * 'rimrTargetConfiguration' - The target Reserved Instances configurations supplied as part of the modification request.
-reservedInstancesModificationResult
-    :: ReservedInstancesModificationResult
-reservedInstancesModificationResult =
-    ReservedInstancesModificationResult'
-    { _rimrReservedInstancesId = Nothing
-    , _rimrTargetConfiguration = Nothing
-    }
-
--- | The ID for the Reserved Instances that were created as part of the modification request. This field is only available when the modification is fulfilled.
-rimrReservedInstancesId :: Lens' ReservedInstancesModificationResult (Maybe Text)
-rimrReservedInstancesId = lens _rimrReservedInstancesId (\ s a -> s{_rimrReservedInstancesId = a});
-
--- | The target Reserved Instances configurations supplied as part of the modification request.
-rimrTargetConfiguration :: Lens' ReservedInstancesModificationResult (Maybe ReservedInstancesConfiguration)
-rimrTargetConfiguration = lens _rimrTargetConfiguration (\ s a -> s{_rimrTargetConfiguration = a});
-
-instance FromXML ReservedInstancesModificationResult
-         where
-        parseXML x
-          = ReservedInstancesModificationResult' <$>
-              (x .@? "reservedInstancesId") <*>
-                (x .@? "targetConfiguration")
-
-instance Hashable ReservedInstancesModificationResult
-
-instance NFData ReservedInstancesModificationResult
-
--- | Describes a Reserved Instance offering.
---
---
---
--- /See:/ 'reservedInstancesOffering' smart constructor.
-data ReservedInstancesOffering = ReservedInstancesOffering'
-    { _rioMarketplace                 :: !(Maybe Bool)
-    , _rioCurrencyCode                :: !(Maybe CurrencyCodeValues)
-    , _rioProductDescription          :: !(Maybe RIProductDescription)
-    , _rioInstanceType                :: !(Maybe InstanceType)
-    , _rioAvailabilityZone            :: !(Maybe Text)
-    , _rioPricingDetails              :: !(Maybe [PricingDetail])
-    , _rioScope                       :: !(Maybe Scope)
-    , _rioRecurringCharges            :: !(Maybe [RecurringCharge])
-    , _rioOfferingType                :: !(Maybe OfferingTypeValues)
-    , _rioUsagePrice                  :: !(Maybe Double)
-    , _rioFixedPrice                  :: !(Maybe Double)
-    , _rioInstanceTenancy             :: !(Maybe Tenancy)
-    , _rioReservedInstancesOfferingId :: !(Maybe Text)
-    , _rioOfferingClass               :: !(Maybe OfferingClassType)
-    , _rioDuration                    :: !(Maybe Integer)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesOffering' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rioMarketplace' - Indicates whether the offering is available through the Reserved Instance Marketplace (resale) or AWS. If it's a Reserved Instance Marketplace offering, this is @true@ .
---
--- * 'rioCurrencyCode' - The currency of the Reserved Instance offering you are purchasing. It's specified using ISO 4217 standard currency codes. At this time, the only supported currency is @USD@ .
---
--- * 'rioProductDescription' - The Reserved Instance product platform description.
---
--- * 'rioInstanceType' - The instance type on which the Reserved Instance can be used.
---
--- * 'rioAvailabilityZone' - The Availability Zone in which the Reserved Instance can be used.
---
--- * 'rioPricingDetails' - The pricing details of the Reserved Instance offering.
---
--- * 'rioScope' - Whether the Reserved Instance is applied to instances in a region or an Availability Zone.
---
--- * 'rioRecurringCharges' - The recurring charge tag assigned to the resource.
---
--- * 'rioOfferingType' - The Reserved Instance offering type.
---
--- * 'rioUsagePrice' - The usage price of the Reserved Instance, per hour.
---
--- * 'rioFixedPrice' - The purchase price of the Reserved Instance.
---
--- * 'rioInstanceTenancy' - The tenancy of the instance.
---
--- * 'rioReservedInstancesOfferingId' - The ID of the Reserved Instance offering. This is the offering ID used in 'GetReservedInstancesExchangeQuote' to confirm that an exchange can be made.
---
--- * 'rioOfferingClass' - If @convertible@ it can be exchanged for Reserved Instances of the same or higher monetary value, with different configurations. If @standard@ , it is not possible to perform an exchange.
---
--- * 'rioDuration' - The duration of the Reserved Instance, in seconds.
-reservedInstancesOffering
-    :: ReservedInstancesOffering
-reservedInstancesOffering =
-    ReservedInstancesOffering'
-    { _rioMarketplace = Nothing
-    , _rioCurrencyCode = Nothing
-    , _rioProductDescription = Nothing
-    , _rioInstanceType = Nothing
-    , _rioAvailabilityZone = Nothing
-    , _rioPricingDetails = Nothing
-    , _rioScope = Nothing
-    , _rioRecurringCharges = Nothing
-    , _rioOfferingType = Nothing
-    , _rioUsagePrice = Nothing
-    , _rioFixedPrice = Nothing
-    , _rioInstanceTenancy = Nothing
-    , _rioReservedInstancesOfferingId = Nothing
-    , _rioOfferingClass = Nothing
-    , _rioDuration = Nothing
-    }
-
--- | Indicates whether the offering is available through the Reserved Instance Marketplace (resale) or AWS. If it's a Reserved Instance Marketplace offering, this is @true@ .
-rioMarketplace :: Lens' ReservedInstancesOffering (Maybe Bool)
-rioMarketplace = lens _rioMarketplace (\ s a -> s{_rioMarketplace = a});
-
--- | The currency of the Reserved Instance offering you are purchasing. It's specified using ISO 4217 standard currency codes. At this time, the only supported currency is @USD@ .
-rioCurrencyCode :: Lens' ReservedInstancesOffering (Maybe CurrencyCodeValues)
-rioCurrencyCode = lens _rioCurrencyCode (\ s a -> s{_rioCurrencyCode = a});
-
--- | The Reserved Instance product platform description.
-rioProductDescription :: Lens' ReservedInstancesOffering (Maybe RIProductDescription)
-rioProductDescription = lens _rioProductDescription (\ s a -> s{_rioProductDescription = a});
-
--- | The instance type on which the Reserved Instance can be used.
-rioInstanceType :: Lens' ReservedInstancesOffering (Maybe InstanceType)
-rioInstanceType = lens _rioInstanceType (\ s a -> s{_rioInstanceType = a});
-
--- | The Availability Zone in which the Reserved Instance can be used.
-rioAvailabilityZone :: Lens' ReservedInstancesOffering (Maybe Text)
-rioAvailabilityZone = lens _rioAvailabilityZone (\ s a -> s{_rioAvailabilityZone = a});
-
--- | The pricing details of the Reserved Instance offering.
-rioPricingDetails :: Lens' ReservedInstancesOffering [PricingDetail]
-rioPricingDetails = lens _rioPricingDetails (\ s a -> s{_rioPricingDetails = a}) . _Default . _Coerce;
-
--- | Whether the Reserved Instance is applied to instances in a region or an Availability Zone.
-rioScope :: Lens' ReservedInstancesOffering (Maybe Scope)
-rioScope = lens _rioScope (\ s a -> s{_rioScope = a});
-
--- | The recurring charge tag assigned to the resource.
-rioRecurringCharges :: Lens' ReservedInstancesOffering [RecurringCharge]
-rioRecurringCharges = lens _rioRecurringCharges (\ s a -> s{_rioRecurringCharges = a}) . _Default . _Coerce;
-
--- | The Reserved Instance offering type.
-rioOfferingType :: Lens' ReservedInstancesOffering (Maybe OfferingTypeValues)
-rioOfferingType = lens _rioOfferingType (\ s a -> s{_rioOfferingType = a});
-
--- | The usage price of the Reserved Instance, per hour.
-rioUsagePrice :: Lens' ReservedInstancesOffering (Maybe Double)
-rioUsagePrice = lens _rioUsagePrice (\ s a -> s{_rioUsagePrice = a});
-
--- | The purchase price of the Reserved Instance.
-rioFixedPrice :: Lens' ReservedInstancesOffering (Maybe Double)
-rioFixedPrice = lens _rioFixedPrice (\ s a -> s{_rioFixedPrice = a});
-
--- | The tenancy of the instance.
-rioInstanceTenancy :: Lens' ReservedInstancesOffering (Maybe Tenancy)
-rioInstanceTenancy = lens _rioInstanceTenancy (\ s a -> s{_rioInstanceTenancy = a});
-
--- | The ID of the Reserved Instance offering. This is the offering ID used in 'GetReservedInstancesExchangeQuote' to confirm that an exchange can be made.
-rioReservedInstancesOfferingId :: Lens' ReservedInstancesOffering (Maybe Text)
-rioReservedInstancesOfferingId = lens _rioReservedInstancesOfferingId (\ s a -> s{_rioReservedInstancesOfferingId = a});
-
--- | If @convertible@ it can be exchanged for Reserved Instances of the same or higher monetary value, with different configurations. If @standard@ , it is not possible to perform an exchange.
-rioOfferingClass :: Lens' ReservedInstancesOffering (Maybe OfferingClassType)
-rioOfferingClass = lens _rioOfferingClass (\ s a -> s{_rioOfferingClass = a});
-
--- | The duration of the Reserved Instance, in seconds.
-rioDuration :: Lens' ReservedInstancesOffering (Maybe Integer)
-rioDuration = lens _rioDuration (\ s a -> s{_rioDuration = a});
-
-instance FromXML ReservedInstancesOffering where
-        parseXML x
-          = ReservedInstancesOffering' <$>
-              (x .@? "marketplace") <*> (x .@? "currencyCode") <*>
-                (x .@? "productDescription")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "availabilityZone")
-                <*>
-                (x .@? "pricingDetailsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "scope")
-                <*>
-                (x .@? "recurringCharges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "offeringType")
-                <*> (x .@? "usagePrice")
-                <*> (x .@? "fixedPrice")
-                <*> (x .@? "instanceTenancy")
-                <*> (x .@? "reservedInstancesOfferingId")
-                <*> (x .@? "offeringClass")
-                <*> (x .@? "duration")
-
-instance Hashable ReservedInstancesOffering
-
-instance NFData ReservedInstancesOffering
-
--- | Describes a route in a route table.
---
---
---
--- /See:/ 'route' smart constructor.
-data Route = Route'
-    { _rVPCPeeringConnectionId      :: !(Maybe Text)
-    , _rInstanceId                  :: !(Maybe Text)
-    , _rOrigin                      :: !(Maybe RouteOrigin)
-    , _rState                       :: !(Maybe RouteState)
-    , _rEgressOnlyInternetGatewayId :: !(Maybe Text)
-    , _rDestinationIPv6CidrBlock    :: !(Maybe Text)
-    , _rNatGatewayId                :: !(Maybe Text)
-    , _rNetworkInterfaceId          :: !(Maybe Text)
-    , _rGatewayId                   :: !(Maybe Text)
-    , _rInstanceOwnerId             :: !(Maybe Text)
-    , _rDestinationPrefixListId     :: !(Maybe Text)
-    , _rDestinationCidrBlock        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Route' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rVPCPeeringConnectionId' - The ID of the VPC peering connection.
---
--- * 'rInstanceId' - The ID of a NAT instance in your VPC.
---
--- * 'rOrigin' - Describes how the route was created.     * @CreateRouteTable@ - The route was automatically created when the route table was created.     * @CreateRoute@ - The route was manually added to the route table.     * @EnableVgwRoutePropagation@ - The route was propagated by route propagation.
---
--- * 'rState' - The state of the route. The @blackhole@ state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, or the specified NAT instance has been terminated).
---
--- * 'rEgressOnlyInternetGatewayId' - The ID of the egress-only Internet gateway.
---
--- * 'rDestinationIPv6CidrBlock' - The IPv6 CIDR block used for the destination match.
---
--- * 'rNatGatewayId' - The ID of a NAT gateway.
---
--- * 'rNetworkInterfaceId' - The ID of the network interface.
---
--- * 'rGatewayId' - The ID of a gateway attached to your VPC.
---
--- * 'rInstanceOwnerId' - The AWS account ID of the owner of the instance.
---
--- * 'rDestinationPrefixListId' - The prefix of the AWS service.
---
--- * 'rDestinationCidrBlock' - The IPv4 CIDR block used for the destination match.
-route
-    :: Route
-route =
-    Route'
-    { _rVPCPeeringConnectionId = Nothing
-    , _rInstanceId = Nothing
-    , _rOrigin = Nothing
-    , _rState = Nothing
-    , _rEgressOnlyInternetGatewayId = Nothing
-    , _rDestinationIPv6CidrBlock = Nothing
-    , _rNatGatewayId = Nothing
-    , _rNetworkInterfaceId = Nothing
-    , _rGatewayId = Nothing
-    , _rInstanceOwnerId = Nothing
-    , _rDestinationPrefixListId = Nothing
-    , _rDestinationCidrBlock = Nothing
-    }
-
--- | The ID of the VPC peering connection.
-rVPCPeeringConnectionId :: Lens' Route (Maybe Text)
-rVPCPeeringConnectionId = lens _rVPCPeeringConnectionId (\ s a -> s{_rVPCPeeringConnectionId = a});
-
--- | The ID of a NAT instance in your VPC.
-rInstanceId :: Lens' Route (Maybe Text)
-rInstanceId = lens _rInstanceId (\ s a -> s{_rInstanceId = a});
-
--- | Describes how the route was created.     * @CreateRouteTable@ - The route was automatically created when the route table was created.     * @CreateRoute@ - The route was manually added to the route table.     * @EnableVgwRoutePropagation@ - The route was propagated by route propagation.
-rOrigin :: Lens' Route (Maybe RouteOrigin)
-rOrigin = lens _rOrigin (\ s a -> s{_rOrigin = a});
-
--- | The state of the route. The @blackhole@ state indicates that the route's target isn't available (for example, the specified gateway isn't attached to the VPC, or the specified NAT instance has been terminated).
-rState :: Lens' Route (Maybe RouteState)
-rState = lens _rState (\ s a -> s{_rState = a});
-
--- | The ID of the egress-only Internet gateway.
-rEgressOnlyInternetGatewayId :: Lens' Route (Maybe Text)
-rEgressOnlyInternetGatewayId = lens _rEgressOnlyInternetGatewayId (\ s a -> s{_rEgressOnlyInternetGatewayId = a});
-
--- | The IPv6 CIDR block used for the destination match.
-rDestinationIPv6CidrBlock :: Lens' Route (Maybe Text)
-rDestinationIPv6CidrBlock = lens _rDestinationIPv6CidrBlock (\ s a -> s{_rDestinationIPv6CidrBlock = a});
-
--- | The ID of a NAT gateway.
-rNatGatewayId :: Lens' Route (Maybe Text)
-rNatGatewayId = lens _rNatGatewayId (\ s a -> s{_rNatGatewayId = a});
-
--- | The ID of the network interface.
-rNetworkInterfaceId :: Lens' Route (Maybe Text)
-rNetworkInterfaceId = lens _rNetworkInterfaceId (\ s a -> s{_rNetworkInterfaceId = a});
-
--- | The ID of a gateway attached to your VPC.
-rGatewayId :: Lens' Route (Maybe Text)
-rGatewayId = lens _rGatewayId (\ s a -> s{_rGatewayId = a});
-
--- | The AWS account ID of the owner of the instance.
-rInstanceOwnerId :: Lens' Route (Maybe Text)
-rInstanceOwnerId = lens _rInstanceOwnerId (\ s a -> s{_rInstanceOwnerId = a});
-
--- | The prefix of the AWS service.
-rDestinationPrefixListId :: Lens' Route (Maybe Text)
-rDestinationPrefixListId = lens _rDestinationPrefixListId (\ s a -> s{_rDestinationPrefixListId = a});
-
--- | The IPv4 CIDR block used for the destination match.
-rDestinationCidrBlock :: Lens' Route (Maybe Text)
-rDestinationCidrBlock = lens _rDestinationCidrBlock (\ s a -> s{_rDestinationCidrBlock = a});
-
-instance FromXML Route where
-        parseXML x
-          = Route' <$>
-              (x .@? "vpcPeeringConnectionId") <*>
-                (x .@? "instanceId")
-                <*> (x .@? "origin")
-                <*> (x .@? "state")
-                <*> (x .@? "egressOnlyInternetGatewayId")
-                <*> (x .@? "destinationIpv6CidrBlock")
-                <*> (x .@? "natGatewayId")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "gatewayId")
-                <*> (x .@? "instanceOwnerId")
-                <*> (x .@? "destinationPrefixListId")
-                <*> (x .@? "destinationCidrBlock")
-
-instance Hashable Route
-
-instance NFData Route
-
--- | Describes a route table.
---
---
---
--- /See:/ 'routeTable' smart constructor.
-data RouteTable = RouteTable'
-    { _rtRouteTableId    :: !(Maybe Text)
-    , _rtRoutes          :: !(Maybe [Route])
-    , _rtVPCId           :: !(Maybe Text)
-    , _rtPropagatingVGWs :: !(Maybe [PropagatingVGW])
-    , _rtAssociations    :: !(Maybe [RouteTableAssociation])
-    , _rtTags            :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rtRouteTableId' - The ID of the route table.
---
--- * 'rtRoutes' - The routes in the route table.
---
--- * 'rtVPCId' - The ID of the VPC.
---
--- * 'rtPropagatingVGWs' - Any virtual private gateway (VGW) propagating routes.
---
--- * 'rtAssociations' - The associations between the route table and one or more subnets.
---
--- * 'rtTags' - Any tags assigned to the route table.
-routeTable
-    :: RouteTable
-routeTable =
-    RouteTable'
-    { _rtRouteTableId = Nothing
-    , _rtRoutes = Nothing
-    , _rtVPCId = Nothing
-    , _rtPropagatingVGWs = Nothing
-    , _rtAssociations = Nothing
-    , _rtTags = Nothing
-    }
-
--- | The ID of the route table.
-rtRouteTableId :: Lens' RouteTable (Maybe Text)
-rtRouteTableId = lens _rtRouteTableId (\ s a -> s{_rtRouteTableId = a});
-
--- | The routes in the route table.
-rtRoutes :: Lens' RouteTable [Route]
-rtRoutes = lens _rtRoutes (\ s a -> s{_rtRoutes = a}) . _Default . _Coerce;
-
--- | The ID of the VPC.
-rtVPCId :: Lens' RouteTable (Maybe Text)
-rtVPCId = lens _rtVPCId (\ s a -> s{_rtVPCId = a});
-
--- | Any virtual private gateway (VGW) propagating routes.
-rtPropagatingVGWs :: Lens' RouteTable [PropagatingVGW]
-rtPropagatingVGWs = lens _rtPropagatingVGWs (\ s a -> s{_rtPropagatingVGWs = a}) . _Default . _Coerce;
-
--- | The associations between the route table and one or more subnets.
-rtAssociations :: Lens' RouteTable [RouteTableAssociation]
-rtAssociations = lens _rtAssociations (\ s a -> s{_rtAssociations = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the route table.
-rtTags :: Lens' RouteTable [Tag]
-rtTags = lens _rtTags (\ s a -> s{_rtTags = a}) . _Default . _Coerce;
-
-instance FromXML RouteTable where
-        parseXML x
-          = RouteTable' <$>
-              (x .@? "routeTableId") <*>
-                (x .@? "routeSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "propagatingVgwSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "associationSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable RouteTable
-
-instance NFData RouteTable
-
--- | Describes an association between a route table and a subnet.
---
---
---
--- /See:/ 'routeTableAssociation' smart constructor.
-data RouteTableAssociation = RouteTableAssociation'
-    { _rtaRouteTableId            :: !(Maybe Text)
-    , _rtaRouteTableAssociationId :: !(Maybe Text)
-    , _rtaMain                    :: !(Maybe Bool)
-    , _rtaSubnetId                :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteTableAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rtaRouteTableId' - The ID of the route table.
---
--- * 'rtaRouteTableAssociationId' - The ID of the association between a route table and a subnet.
---
--- * 'rtaMain' - Indicates whether this is the main route table.
---
--- * 'rtaSubnetId' - The ID of the subnet. A subnet ID is not returned for an implicit association.
-routeTableAssociation
-    :: RouteTableAssociation
-routeTableAssociation =
-    RouteTableAssociation'
-    { _rtaRouteTableId = Nothing
-    , _rtaRouteTableAssociationId = Nothing
-    , _rtaMain = Nothing
-    , _rtaSubnetId = Nothing
-    }
-
--- | The ID of the route table.
-rtaRouteTableId :: Lens' RouteTableAssociation (Maybe Text)
-rtaRouteTableId = lens _rtaRouteTableId (\ s a -> s{_rtaRouteTableId = a});
-
--- | The ID of the association between a route table and a subnet.
-rtaRouteTableAssociationId :: Lens' RouteTableAssociation (Maybe Text)
-rtaRouteTableAssociationId = lens _rtaRouteTableAssociationId (\ s a -> s{_rtaRouteTableAssociationId = a});
-
--- | Indicates whether this is the main route table.
-rtaMain :: Lens' RouteTableAssociation (Maybe Bool)
-rtaMain = lens _rtaMain (\ s a -> s{_rtaMain = a});
-
--- | The ID of the subnet. A subnet ID is not returned for an implicit association.
-rtaSubnetId :: Lens' RouteTableAssociation (Maybe Text)
-rtaSubnetId = lens _rtaSubnetId (\ s a -> s{_rtaSubnetId = a});
-
-instance FromXML RouteTableAssociation where
-        parseXML x
-          = RouteTableAssociation' <$>
-              (x .@? "routeTableId") <*>
-                (x .@? "routeTableAssociationId")
-                <*> (x .@? "main")
-                <*> (x .@? "subnetId")
-
-instance Hashable RouteTableAssociation
-
-instance NFData RouteTableAssociation
-
--- | Describes the monitoring of an instance.
---
---
---
--- /See:/ 'runInstancesMonitoringEnabled' smart constructor.
-newtype RunInstancesMonitoringEnabled = RunInstancesMonitoringEnabled'
-    { _rimeEnabled :: Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunInstancesMonitoringEnabled' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rimeEnabled' - Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring is enabled.
-runInstancesMonitoringEnabled
-    :: Bool -- ^ 'rimeEnabled'
-    -> RunInstancesMonitoringEnabled
-runInstancesMonitoringEnabled pEnabled_ =
-    RunInstancesMonitoringEnabled'
-    { _rimeEnabled = pEnabled_
-    }
-
--- | Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring is enabled.
-rimeEnabled :: Lens' RunInstancesMonitoringEnabled Bool
-rimeEnabled = lens _rimeEnabled (\ s a -> s{_rimeEnabled = a});
-
-instance FromXML RunInstancesMonitoringEnabled where
-        parseXML x
-          = RunInstancesMonitoringEnabled' <$> (x .@ "enabled")
-
-instance Hashable RunInstancesMonitoringEnabled
-
-instance NFData RunInstancesMonitoringEnabled
-
-instance ToQuery RunInstancesMonitoringEnabled where
-        toQuery RunInstancesMonitoringEnabled'{..}
-          = mconcat ["Enabled" =: _rimeEnabled]
-
--- | Describes the storage parameters for S3 and S3 buckets for an instance store-backed AMI.
---
---
---
--- /See:/ 's3Storage' smart constructor.
-data S3Storage = S3Storage'
-    { _ssPrefix                :: !(Maybe Text)
-    , _ssUploadPolicy          :: !(Maybe Base64)
-    , _ssBucket                :: !(Maybe Text)
-    , _ssUploadPolicySignature :: !(Maybe Text)
-    , _ssAWSAccessKeyId        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'S3Storage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssPrefix' - The beginning of the file name of the AMI.
---
--- * 'ssUploadPolicy' - An Amazon S3 upload policy that gives Amazon EC2 permission to upload items into Amazon S3 on your behalf.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
---
--- * 'ssBucket' - The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.
---
--- * 'ssUploadPolicySignature' - The signature of the JSON document.
---
--- * 'ssAWSAccessKeyId' - 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 <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best Practices for Managing AWS Access Keys> .
-s3Storage
-    :: S3Storage
-s3Storage =
-    S3Storage'
-    { _ssPrefix = Nothing
-    , _ssUploadPolicy = Nothing
-    , _ssBucket = Nothing
-    , _ssUploadPolicySignature = Nothing
-    , _ssAWSAccessKeyId = Nothing
-    }
-
--- | The beginning of the file name of the AMI.
-ssPrefix :: Lens' S3Storage (Maybe Text)
-ssPrefix = lens _ssPrefix (\ s a -> s{_ssPrefix = a});
-
--- | An Amazon S3 upload policy that gives Amazon EC2 permission to upload items into Amazon S3 on your behalf.-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data. The underlying isomorphism will encode to Base64 representation during serialisation, and decode from Base64 representation during deserialisation. This 'Lens' accepts and returns only raw unencoded data.
-ssUploadPolicy :: Lens' S3Storage (Maybe ByteString)
-ssUploadPolicy = lens _ssUploadPolicy (\ s a -> s{_ssUploadPolicy = a}) . mapping _Base64;
-
--- | The bucket in which to store the AMI. You can specify a bucket that you already own or a new bucket that Amazon EC2 creates on your behalf. If you specify a bucket that belongs to someone else, Amazon EC2 returns an error.
-ssBucket :: Lens' S3Storage (Maybe Text)
-ssBucket = lens _ssBucket (\ s a -> s{_ssBucket = a});
-
--- | The signature of the JSON document.
-ssUploadPolicySignature :: Lens' S3Storage (Maybe Text)
-ssUploadPolicySignature = lens _ssUploadPolicySignature (\ s a -> s{_ssUploadPolicySignature = a});
-
--- | 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 <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best Practices for Managing AWS Access Keys> .
-ssAWSAccessKeyId :: Lens' S3Storage (Maybe Text)
-ssAWSAccessKeyId = lens _ssAWSAccessKeyId (\ s a -> s{_ssAWSAccessKeyId = a});
-
-instance FromXML S3Storage where
-        parseXML x
-          = S3Storage' <$>
-              (x .@? "prefix") <*> (x .@? "uploadPolicy") <*>
-                (x .@? "bucket")
-                <*> (x .@? "uploadPolicySignature")
-                <*> (x .@? "AWSAccessKeyId")
-
-instance Hashable S3Storage
-
-instance NFData S3Storage
-
-instance ToQuery S3Storage where
-        toQuery S3Storage'{..}
-          = mconcat
-              ["Prefix" =: _ssPrefix,
-               "UploadPolicy" =: _ssUploadPolicy,
-               "Bucket" =: _ssBucket,
-               "UploadPolicySignature" =: _ssUploadPolicySignature,
-               "AWSAccessKeyId" =: _ssAWSAccessKeyId]
-
--- | Describes a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstance' smart constructor.
-data ScheduledInstance = ScheduledInstance'
-    { _siPreviousSlotEndTime         :: !(Maybe ISO8601)
-    , _siPlatform                    :: !(Maybe Text)
-    , _siTermStartDate               :: !(Maybe ISO8601)
-    , _siInstanceCount               :: !(Maybe Int)
-    , _siScheduledInstanceId         :: !(Maybe Text)
-    , _siHourlyPrice                 :: !(Maybe Text)
-    , _siCreateDate                  :: !(Maybe ISO8601)
-    , _siSlotDurationInHours         :: !(Maybe Int)
-    , _siTotalScheduledInstanceHours :: !(Maybe Int)
-    , _siInstanceType                :: !(Maybe Text)
-    , _siRecurrence                  :: !(Maybe ScheduledInstanceRecurrence)
-    , _siAvailabilityZone            :: !(Maybe Text)
-    , _siTermEndDate                 :: !(Maybe ISO8601)
-    , _siNextSlotStartTime           :: !(Maybe ISO8601)
-    , _siNetworkPlatform             :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siPreviousSlotEndTime' - The time that the previous schedule ended or will end.
---
--- * 'siPlatform' - The platform (@Linux/UNIX@ or @Windows@ ).
---
--- * 'siTermStartDate' - The start date for the Scheduled Instance.
---
--- * 'siInstanceCount' - The number of instances.
---
--- * 'siScheduledInstanceId' - The Scheduled Instance ID.
---
--- * 'siHourlyPrice' - The hourly price for a single instance.
---
--- * 'siCreateDate' - The date when the Scheduled Instance was purchased.
---
--- * 'siSlotDurationInHours' - The number of hours in the schedule.
---
--- * 'siTotalScheduledInstanceHours' - The total number of hours for a single instance for the entire term.
---
--- * 'siInstanceType' - The instance type.
---
--- * 'siRecurrence' - The schedule recurrence.
---
--- * 'siAvailabilityZone' - The Availability Zone.
---
--- * 'siTermEndDate' - The end date for the Scheduled Instance.
---
--- * 'siNextSlotStartTime' - The time for the next schedule to start.
---
--- * 'siNetworkPlatform' - The network platform (@EC2-Classic@ or @EC2-VPC@ ).
-scheduledInstance
-    :: ScheduledInstance
-scheduledInstance =
-    ScheduledInstance'
-    { _siPreviousSlotEndTime = Nothing
-    , _siPlatform = Nothing
-    , _siTermStartDate = Nothing
-    , _siInstanceCount = Nothing
-    , _siScheduledInstanceId = Nothing
-    , _siHourlyPrice = Nothing
-    , _siCreateDate = Nothing
-    , _siSlotDurationInHours = Nothing
-    , _siTotalScheduledInstanceHours = Nothing
-    , _siInstanceType = Nothing
-    , _siRecurrence = Nothing
-    , _siAvailabilityZone = Nothing
-    , _siTermEndDate = Nothing
-    , _siNextSlotStartTime = Nothing
-    , _siNetworkPlatform = Nothing
-    }
-
--- | The time that the previous schedule ended or will end.
-siPreviousSlotEndTime :: Lens' ScheduledInstance (Maybe UTCTime)
-siPreviousSlotEndTime = lens _siPreviousSlotEndTime (\ s a -> s{_siPreviousSlotEndTime = a}) . mapping _Time;
-
--- | The platform (@Linux/UNIX@ or @Windows@ ).
-siPlatform :: Lens' ScheduledInstance (Maybe Text)
-siPlatform = lens _siPlatform (\ s a -> s{_siPlatform = a});
-
--- | The start date for the Scheduled Instance.
-siTermStartDate :: Lens' ScheduledInstance (Maybe UTCTime)
-siTermStartDate = lens _siTermStartDate (\ s a -> s{_siTermStartDate = a}) . mapping _Time;
-
--- | The number of instances.
-siInstanceCount :: Lens' ScheduledInstance (Maybe Int)
-siInstanceCount = lens _siInstanceCount (\ s a -> s{_siInstanceCount = a});
-
--- | The Scheduled Instance ID.
-siScheduledInstanceId :: Lens' ScheduledInstance (Maybe Text)
-siScheduledInstanceId = lens _siScheduledInstanceId (\ s a -> s{_siScheduledInstanceId = a});
-
--- | The hourly price for a single instance.
-siHourlyPrice :: Lens' ScheduledInstance (Maybe Text)
-siHourlyPrice = lens _siHourlyPrice (\ s a -> s{_siHourlyPrice = a});
-
--- | The date when the Scheduled Instance was purchased.
-siCreateDate :: Lens' ScheduledInstance (Maybe UTCTime)
-siCreateDate = lens _siCreateDate (\ s a -> s{_siCreateDate = a}) . mapping _Time;
-
--- | The number of hours in the schedule.
-siSlotDurationInHours :: Lens' ScheduledInstance (Maybe Int)
-siSlotDurationInHours = lens _siSlotDurationInHours (\ s a -> s{_siSlotDurationInHours = a});
-
--- | The total number of hours for a single instance for the entire term.
-siTotalScheduledInstanceHours :: Lens' ScheduledInstance (Maybe Int)
-siTotalScheduledInstanceHours = lens _siTotalScheduledInstanceHours (\ s a -> s{_siTotalScheduledInstanceHours = a});
-
--- | The instance type.
-siInstanceType :: Lens' ScheduledInstance (Maybe Text)
-siInstanceType = lens _siInstanceType (\ s a -> s{_siInstanceType = a});
-
--- | The schedule recurrence.
-siRecurrence :: Lens' ScheduledInstance (Maybe ScheduledInstanceRecurrence)
-siRecurrence = lens _siRecurrence (\ s a -> s{_siRecurrence = a});
-
--- | The Availability Zone.
-siAvailabilityZone :: Lens' ScheduledInstance (Maybe Text)
-siAvailabilityZone = lens _siAvailabilityZone (\ s a -> s{_siAvailabilityZone = a});
-
--- | The end date for the Scheduled Instance.
-siTermEndDate :: Lens' ScheduledInstance (Maybe UTCTime)
-siTermEndDate = lens _siTermEndDate (\ s a -> s{_siTermEndDate = a}) . mapping _Time;
-
--- | The time for the next schedule to start.
-siNextSlotStartTime :: Lens' ScheduledInstance (Maybe UTCTime)
-siNextSlotStartTime = lens _siNextSlotStartTime (\ s a -> s{_siNextSlotStartTime = a}) . mapping _Time;
-
--- | The network platform (@EC2-Classic@ or @EC2-VPC@ ).
-siNetworkPlatform :: Lens' ScheduledInstance (Maybe Text)
-siNetworkPlatform = lens _siNetworkPlatform (\ s a -> s{_siNetworkPlatform = a});
-
-instance FromXML ScheduledInstance where
-        parseXML x
-          = ScheduledInstance' <$>
-              (x .@? "previousSlotEndTime") <*> (x .@? "platform")
-                <*> (x .@? "termStartDate")
-                <*> (x .@? "instanceCount")
-                <*> (x .@? "scheduledInstanceId")
-                <*> (x .@? "hourlyPrice")
-                <*> (x .@? "createDate")
-                <*> (x .@? "slotDurationInHours")
-                <*> (x .@? "totalScheduledInstanceHours")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "recurrence")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "termEndDate")
-                <*> (x .@? "nextSlotStartTime")
-                <*> (x .@? "networkPlatform")
-
-instance Hashable ScheduledInstance
-
-instance NFData ScheduledInstance
-
--- | Describes a schedule that is available for your Scheduled Instances.
---
---
---
--- /See:/ 'scheduledInstanceAvailability' smart constructor.
-data ScheduledInstanceAvailability = ScheduledInstanceAvailability'
-    { _siaMaxTermDurationInDays       :: !(Maybe Int)
-    , _siaPlatform                    :: !(Maybe Text)
-    , _siaPurchaseToken               :: !(Maybe Text)
-    , _siaHourlyPrice                 :: !(Maybe Text)
-    , _siaAvailableInstanceCount      :: !(Maybe Int)
-    , _siaSlotDurationInHours         :: !(Maybe Int)
-    , _siaTotalScheduledInstanceHours :: !(Maybe Int)
-    , _siaInstanceType                :: !(Maybe Text)
-    , _siaRecurrence                  :: !(Maybe ScheduledInstanceRecurrence)
-    , _siaAvailabilityZone            :: !(Maybe Text)
-    , _siaMinTermDurationInDays       :: !(Maybe Int)
-    , _siaFirstSlotStartTime          :: !(Maybe ISO8601)
-    , _siaNetworkPlatform             :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstanceAvailability' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siaMaxTermDurationInDays' - The maximum term. The only possible value is 365 days.
---
--- * 'siaPlatform' - The platform (@Linux/UNIX@ or @Windows@ ).
---
--- * 'siaPurchaseToken' - The purchase token. This token expires in two hours.
---
--- * 'siaHourlyPrice' - The hourly price for a single instance.
---
--- * 'siaAvailableInstanceCount' - The number of available instances.
---
--- * 'siaSlotDurationInHours' - The number of hours in the schedule.
---
--- * 'siaTotalScheduledInstanceHours' - The total number of hours for a single instance for the entire term.
---
--- * 'siaInstanceType' - The instance type. You can specify one of the C3, C4, M4, or R3 instance types.
---
--- * 'siaRecurrence' - The schedule recurrence.
---
--- * 'siaAvailabilityZone' - The Availability Zone.
---
--- * 'siaMinTermDurationInDays' - The minimum term. The only possible value is 365 days.
---
--- * 'siaFirstSlotStartTime' - The time period for the first schedule to start.
---
--- * 'siaNetworkPlatform' - The network platform (@EC2-Classic@ or @EC2-VPC@ ).
-scheduledInstanceAvailability
-    :: ScheduledInstanceAvailability
-scheduledInstanceAvailability =
-    ScheduledInstanceAvailability'
-    { _siaMaxTermDurationInDays = Nothing
-    , _siaPlatform = Nothing
-    , _siaPurchaseToken = Nothing
-    , _siaHourlyPrice = Nothing
-    , _siaAvailableInstanceCount = Nothing
-    , _siaSlotDurationInHours = Nothing
-    , _siaTotalScheduledInstanceHours = Nothing
-    , _siaInstanceType = Nothing
-    , _siaRecurrence = Nothing
-    , _siaAvailabilityZone = Nothing
-    , _siaMinTermDurationInDays = Nothing
-    , _siaFirstSlotStartTime = Nothing
-    , _siaNetworkPlatform = Nothing
-    }
-
--- | The maximum term. The only possible value is 365 days.
-siaMaxTermDurationInDays :: Lens' ScheduledInstanceAvailability (Maybe Int)
-siaMaxTermDurationInDays = lens _siaMaxTermDurationInDays (\ s a -> s{_siaMaxTermDurationInDays = a});
-
--- | The platform (@Linux/UNIX@ or @Windows@ ).
-siaPlatform :: Lens' ScheduledInstanceAvailability (Maybe Text)
-siaPlatform = lens _siaPlatform (\ s a -> s{_siaPlatform = a});
-
--- | The purchase token. This token expires in two hours.
-siaPurchaseToken :: Lens' ScheduledInstanceAvailability (Maybe Text)
-siaPurchaseToken = lens _siaPurchaseToken (\ s a -> s{_siaPurchaseToken = a});
-
--- | The hourly price for a single instance.
-siaHourlyPrice :: Lens' ScheduledInstanceAvailability (Maybe Text)
-siaHourlyPrice = lens _siaHourlyPrice (\ s a -> s{_siaHourlyPrice = a});
-
--- | The number of available instances.
-siaAvailableInstanceCount :: Lens' ScheduledInstanceAvailability (Maybe Int)
-siaAvailableInstanceCount = lens _siaAvailableInstanceCount (\ s a -> s{_siaAvailableInstanceCount = a});
-
--- | The number of hours in the schedule.
-siaSlotDurationInHours :: Lens' ScheduledInstanceAvailability (Maybe Int)
-siaSlotDurationInHours = lens _siaSlotDurationInHours (\ s a -> s{_siaSlotDurationInHours = a});
-
--- | The total number of hours for a single instance for the entire term.
-siaTotalScheduledInstanceHours :: Lens' ScheduledInstanceAvailability (Maybe Int)
-siaTotalScheduledInstanceHours = lens _siaTotalScheduledInstanceHours (\ s a -> s{_siaTotalScheduledInstanceHours = a});
-
--- | The instance type. You can specify one of the C3, C4, M4, or R3 instance types.
-siaInstanceType :: Lens' ScheduledInstanceAvailability (Maybe Text)
-siaInstanceType = lens _siaInstanceType (\ s a -> s{_siaInstanceType = a});
-
--- | The schedule recurrence.
-siaRecurrence :: Lens' ScheduledInstanceAvailability (Maybe ScheduledInstanceRecurrence)
-siaRecurrence = lens _siaRecurrence (\ s a -> s{_siaRecurrence = a});
-
--- | The Availability Zone.
-siaAvailabilityZone :: Lens' ScheduledInstanceAvailability (Maybe Text)
-siaAvailabilityZone = lens _siaAvailabilityZone (\ s a -> s{_siaAvailabilityZone = a});
-
--- | The minimum term. The only possible value is 365 days.
-siaMinTermDurationInDays :: Lens' ScheduledInstanceAvailability (Maybe Int)
-siaMinTermDurationInDays = lens _siaMinTermDurationInDays (\ s a -> s{_siaMinTermDurationInDays = a});
-
--- | The time period for the first schedule to start.
-siaFirstSlotStartTime :: Lens' ScheduledInstanceAvailability (Maybe UTCTime)
-siaFirstSlotStartTime = lens _siaFirstSlotStartTime (\ s a -> s{_siaFirstSlotStartTime = a}) . mapping _Time;
-
--- | The network platform (@EC2-Classic@ or @EC2-VPC@ ).
-siaNetworkPlatform :: Lens' ScheduledInstanceAvailability (Maybe Text)
-siaNetworkPlatform = lens _siaNetworkPlatform (\ s a -> s{_siaNetworkPlatform = a});
-
-instance FromXML ScheduledInstanceAvailability where
-        parseXML x
-          = ScheduledInstanceAvailability' <$>
-              (x .@? "maxTermDurationInDays") <*>
-                (x .@? "platform")
-                <*> (x .@? "purchaseToken")
-                <*> (x .@? "hourlyPrice")
-                <*> (x .@? "availableInstanceCount")
-                <*> (x .@? "slotDurationInHours")
-                <*> (x .@? "totalScheduledInstanceHours")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "recurrence")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "minTermDurationInDays")
-                <*> (x .@? "firstSlotStartTime")
-                <*> (x .@? "networkPlatform")
-
-instance Hashable ScheduledInstanceAvailability
-
-instance NFData ScheduledInstanceAvailability
-
--- | Describes the recurring schedule for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstanceRecurrence' smart constructor.
-data ScheduledInstanceRecurrence = ScheduledInstanceRecurrence'
-    { _sirFrequency               :: !(Maybe Text)
-    , _sirOccurrenceRelativeToEnd :: !(Maybe Bool)
-    , _sirOccurrenceUnit          :: !(Maybe Text)
-    , _sirInterval                :: !(Maybe Int)
-    , _sirOccurrenceDaySet        :: !(Maybe [Int])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstanceRecurrence' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sirFrequency' - The frequency (@Daily@ , @Weekly@ , or @Monthly@ ).
---
--- * 'sirOccurrenceRelativeToEnd' - Indicates whether the occurrence is relative to the end of the specified week or month.
---
--- * 'sirOccurrenceUnit' - The unit for @occurrenceDaySet@ (@DayOfWeek@ or @DayOfMonth@ ).
---
--- * 'sirInterval' - The interval quantity. The interval unit depends on the value of @frequency@ . For example, every 2 weeks or every 2 months.
---
--- * 'sirOccurrenceDaySet' - The days. For a monthly schedule, this is one or more days of the month (1-31). For a weekly schedule, this is one or more days of the week (1-7, where 1 is Sunday).
-scheduledInstanceRecurrence
-    :: ScheduledInstanceRecurrence
-scheduledInstanceRecurrence =
-    ScheduledInstanceRecurrence'
-    { _sirFrequency = Nothing
-    , _sirOccurrenceRelativeToEnd = Nothing
-    , _sirOccurrenceUnit = Nothing
-    , _sirInterval = Nothing
-    , _sirOccurrenceDaySet = Nothing
-    }
-
--- | The frequency (@Daily@ , @Weekly@ , or @Monthly@ ).
-sirFrequency :: Lens' ScheduledInstanceRecurrence (Maybe Text)
-sirFrequency = lens _sirFrequency (\ s a -> s{_sirFrequency = a});
-
--- | Indicates whether the occurrence is relative to the end of the specified week or month.
-sirOccurrenceRelativeToEnd :: Lens' ScheduledInstanceRecurrence (Maybe Bool)
-sirOccurrenceRelativeToEnd = lens _sirOccurrenceRelativeToEnd (\ s a -> s{_sirOccurrenceRelativeToEnd = a});
-
--- | The unit for @occurrenceDaySet@ (@DayOfWeek@ or @DayOfMonth@ ).
-sirOccurrenceUnit :: Lens' ScheduledInstanceRecurrence (Maybe Text)
-sirOccurrenceUnit = lens _sirOccurrenceUnit (\ s a -> s{_sirOccurrenceUnit = a});
-
--- | The interval quantity. The interval unit depends on the value of @frequency@ . For example, every 2 weeks or every 2 months.
-sirInterval :: Lens' ScheduledInstanceRecurrence (Maybe Int)
-sirInterval = lens _sirInterval (\ s a -> s{_sirInterval = a});
-
--- | The days. For a monthly schedule, this is one or more days of the month (1-31). For a weekly schedule, this is one or more days of the week (1-7, where 1 is Sunday).
-sirOccurrenceDaySet :: Lens' ScheduledInstanceRecurrence [Int]
-sirOccurrenceDaySet = lens _sirOccurrenceDaySet (\ s a -> s{_sirOccurrenceDaySet = a}) . _Default . _Coerce;
-
-instance FromXML ScheduledInstanceRecurrence where
-        parseXML x
-          = ScheduledInstanceRecurrence' <$>
-              (x .@? "frequency") <*>
-                (x .@? "occurrenceRelativeToEnd")
-                <*> (x .@? "occurrenceUnit")
-                <*> (x .@? "interval")
-                <*>
-                (x .@? "occurrenceDaySet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable ScheduledInstanceRecurrence
-
-instance NFData ScheduledInstanceRecurrence
-
--- | Describes the recurring schedule for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstanceRecurrenceRequest' smart constructor.
-data ScheduledInstanceRecurrenceRequest = ScheduledInstanceRecurrenceRequest'
-    { _sirrFrequency               :: !(Maybe Text)
-    , _sirrOccurrenceRelativeToEnd :: !(Maybe Bool)
-    , _sirrOccurrenceDays          :: !(Maybe [Int])
-    , _sirrOccurrenceUnit          :: !(Maybe Text)
-    , _sirrInterval                :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstanceRecurrenceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sirrFrequency' - The frequency (@Daily@ , @Weekly@ , or @Monthly@ ).
---
--- * 'sirrOccurrenceRelativeToEnd' - Indicates whether the occurrence is relative to the end of the specified week or month. You can't specify this value with a daily schedule.
---
--- * 'sirrOccurrenceDays' - The days. For a monthly schedule, this is one or more days of the month (1-31). For a weekly schedule, this is one or more days of the week (1-7, where 1 is Sunday). You can't specify this value with a daily schedule. If the occurrence is relative to the end of the month, you can specify only a single day.
---
--- * 'sirrOccurrenceUnit' - The unit for @OccurrenceDays@ (@DayOfWeek@ or @DayOfMonth@ ). This value is required for a monthly schedule. You can't specify @DayOfWeek@ with a weekly schedule. You can't specify this value with a daily schedule.
---
--- * 'sirrInterval' - The interval quantity. The interval unit depends on the value of @Frequency@ . For example, every 2 weeks or every 2 months.
-scheduledInstanceRecurrenceRequest
-    :: ScheduledInstanceRecurrenceRequest
-scheduledInstanceRecurrenceRequest =
-    ScheduledInstanceRecurrenceRequest'
-    { _sirrFrequency = Nothing
-    , _sirrOccurrenceRelativeToEnd = Nothing
-    , _sirrOccurrenceDays = Nothing
-    , _sirrOccurrenceUnit = Nothing
-    , _sirrInterval = Nothing
-    }
-
--- | The frequency (@Daily@ , @Weekly@ , or @Monthly@ ).
-sirrFrequency :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Text)
-sirrFrequency = lens _sirrFrequency (\ s a -> s{_sirrFrequency = a});
-
--- | Indicates whether the occurrence is relative to the end of the specified week or month. You can't specify this value with a daily schedule.
-sirrOccurrenceRelativeToEnd :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Bool)
-sirrOccurrenceRelativeToEnd = lens _sirrOccurrenceRelativeToEnd (\ s a -> s{_sirrOccurrenceRelativeToEnd = a});
-
--- | The days. For a monthly schedule, this is one or more days of the month (1-31). For a weekly schedule, this is one or more days of the week (1-7, where 1 is Sunday). You can't specify this value with a daily schedule. If the occurrence is relative to the end of the month, you can specify only a single day.
-sirrOccurrenceDays :: Lens' ScheduledInstanceRecurrenceRequest [Int]
-sirrOccurrenceDays = lens _sirrOccurrenceDays (\ s a -> s{_sirrOccurrenceDays = a}) . _Default . _Coerce;
-
--- | The unit for @OccurrenceDays@ (@DayOfWeek@ or @DayOfMonth@ ). This value is required for a monthly schedule. You can't specify @DayOfWeek@ with a weekly schedule. You can't specify this value with a daily schedule.
-sirrOccurrenceUnit :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Text)
-sirrOccurrenceUnit = lens _sirrOccurrenceUnit (\ s a -> s{_sirrOccurrenceUnit = a});
-
--- | The interval quantity. The interval unit depends on the value of @Frequency@ . For example, every 2 weeks or every 2 months.
-sirrInterval :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Int)
-sirrInterval = lens _sirrInterval (\ s a -> s{_sirrInterval = a});
-
-instance Hashable ScheduledInstanceRecurrenceRequest
-
-instance NFData ScheduledInstanceRecurrenceRequest
-
-instance ToQuery ScheduledInstanceRecurrenceRequest
-         where
-        toQuery ScheduledInstanceRecurrenceRequest'{..}
-          = mconcat
-              ["Frequency" =: _sirrFrequency,
-               "OccurrenceRelativeToEnd" =:
-                 _sirrOccurrenceRelativeToEnd,
-               toQuery
-                 (toQueryList "OccurrenceDay" <$>
-                    _sirrOccurrenceDays),
-               "OccurrenceUnit" =: _sirrOccurrenceUnit,
-               "Interval" =: _sirrInterval]
-
--- | Describes a block device mapping for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesBlockDeviceMapping' smart constructor.
-data ScheduledInstancesBlockDeviceMapping = ScheduledInstancesBlockDeviceMapping'
-    { _sibdmVirtualName :: !(Maybe Text)
-    , _sibdmNoDevice    :: !(Maybe Text)
-    , _sibdmEBS         :: !(Maybe ScheduledInstancesEBS)
-    , _sibdmDeviceName  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesBlockDeviceMapping' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sibdmVirtualName' - The virtual device name (@ephemeral@ N). Instance store volumes are numbered starting from 0. An instance type with two 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. Constraints: For M3 instances, you must specify instance store volumes in the block device mapping for the instance. When you launch an M3 instance, we ignore any instance store volumes specified in the block device mapping for the AMI.
---
--- * 'sibdmNoDevice' - Suppresses the specified device included in the block device mapping of the AMI.
---
--- * 'sibdmEBS' - Parameters used to set up EBS volumes automatically when the instance is launched.
---
--- * 'sibdmDeviceName' - The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-scheduledInstancesBlockDeviceMapping
-    :: ScheduledInstancesBlockDeviceMapping
-scheduledInstancesBlockDeviceMapping =
-    ScheduledInstancesBlockDeviceMapping'
-    { _sibdmVirtualName = Nothing
-    , _sibdmNoDevice = Nothing
-    , _sibdmEBS = Nothing
-    , _sibdmDeviceName = Nothing
-    }
-
--- | The virtual device name (@ephemeral@ N). Instance store volumes are numbered starting from 0. An instance type with two 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. Constraints: For M3 instances, you must specify instance store volumes in the block device mapping for the instance. When you launch an M3 instance, we ignore any instance store volumes specified in the block device mapping for the AMI.
-sibdmVirtualName :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe Text)
-sibdmVirtualName = lens _sibdmVirtualName (\ s a -> s{_sibdmVirtualName = a});
-
--- | Suppresses the specified device included in the block device mapping of the AMI.
-sibdmNoDevice :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe Text)
-sibdmNoDevice = lens _sibdmNoDevice (\ s a -> s{_sibdmNoDevice = a});
-
--- | Parameters used to set up EBS volumes automatically when the instance is launched.
-sibdmEBS :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe ScheduledInstancesEBS)
-sibdmEBS = lens _sibdmEBS (\ s a -> s{_sibdmEBS = a});
-
--- | The device name exposed to the instance (for example, @/dev/sdh@ or @xvdh@ ).
-sibdmDeviceName :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe Text)
-sibdmDeviceName = lens _sibdmDeviceName (\ s a -> s{_sibdmDeviceName = a});
-
-instance Hashable
-         ScheduledInstancesBlockDeviceMapping
-
-instance NFData ScheduledInstancesBlockDeviceMapping
-
-instance ToQuery ScheduledInstancesBlockDeviceMapping
-         where
-        toQuery ScheduledInstancesBlockDeviceMapping'{..}
-          = mconcat
-              ["VirtualName" =: _sibdmVirtualName,
-               "NoDevice" =: _sibdmNoDevice, "Ebs" =: _sibdmEBS,
-               "DeviceName" =: _sibdmDeviceName]
-
--- | Describes an EBS volume for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesEBS' smart constructor.
-data ScheduledInstancesEBS = ScheduledInstancesEBS'
-    { _sieDeleteOnTermination :: !(Maybe Bool)
-    , _sieVolumeSize          :: !(Maybe Int)
-    , _sieIOPS                :: !(Maybe Int)
-    , _sieEncrypted           :: !(Maybe Bool)
-    , _sieVolumeType          :: !(Maybe Text)
-    , _sieSnapshotId          :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesEBS' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sieDeleteOnTermination' - Indicates whether the volume is deleted on instance termination.
---
--- * 'sieVolumeSize' - The size of the volume, in GiB. Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.
---
--- * 'sieIOPS' - The number of I/O operations per second (IOPS) that the volume supports. For io1 volumes, this represents the number of IOPS that are provisioned for the volume. For @gp2@ volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information about @gp2@ baseline performance, I/O credits, and bursting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types> in the /Amazon Elastic Compute Cloud User Guide/ . Constraint: Range is 100-20000 IOPS for @io1@ volumes and 100-10000 IOPS for @gp2@ volumes. Condition: This parameter is required for requests to create @io1@ volumes; it is not used in requests to create @gp2@ , @st1@ , @sc1@ , or @standard@ volumes.
---
--- * 'sieEncrypted' - Indicates whether the volume is encrypted. You can attached encrypted volumes only to instances that support them.
---
--- * 'sieVolumeType' - The volume type. @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, Throughput Optimized HDD for @st1@ , Cold HDD for @sc1@ , or @standard@ for Magnetic. Default: @standard@
---
--- * 'sieSnapshotId' - The ID of the snapshot.
-scheduledInstancesEBS
-    :: ScheduledInstancesEBS
-scheduledInstancesEBS =
-    ScheduledInstancesEBS'
-    { _sieDeleteOnTermination = Nothing
-    , _sieVolumeSize = Nothing
-    , _sieIOPS = Nothing
-    , _sieEncrypted = Nothing
-    , _sieVolumeType = Nothing
-    , _sieSnapshotId = Nothing
-    }
-
--- | Indicates whether the volume is deleted on instance termination.
-sieDeleteOnTermination :: Lens' ScheduledInstancesEBS (Maybe Bool)
-sieDeleteOnTermination = lens _sieDeleteOnTermination (\ s a -> s{_sieDeleteOnTermination = a});
-
--- | The size of the volume, in GiB. Default: If you're creating the volume from a snapshot and don't specify a volume size, the default is the snapshot size.
-sieVolumeSize :: Lens' ScheduledInstancesEBS (Maybe Int)
-sieVolumeSize = lens _sieVolumeSize (\ s a -> s{_sieVolumeSize = a});
-
--- | The number of I/O operations per second (IOPS) that the volume supports. For io1 volumes, this represents the number of IOPS that are provisioned for the volume. For @gp2@ volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information about @gp2@ baseline performance, I/O credits, and bursting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types> in the /Amazon Elastic Compute Cloud User Guide/ . Constraint: Range is 100-20000 IOPS for @io1@ volumes and 100-10000 IOPS for @gp2@ volumes. Condition: This parameter is required for requests to create @io1@ volumes; it is not used in requests to create @gp2@ , @st1@ , @sc1@ , or @standard@ volumes.
-sieIOPS :: Lens' ScheduledInstancesEBS (Maybe Int)
-sieIOPS = lens _sieIOPS (\ s a -> s{_sieIOPS = a});
-
--- | Indicates whether the volume is encrypted. You can attached encrypted volumes only to instances that support them.
-sieEncrypted :: Lens' ScheduledInstancesEBS (Maybe Bool)
-sieEncrypted = lens _sieEncrypted (\ s a -> s{_sieEncrypted = a});
-
--- | The volume type. @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, Throughput Optimized HDD for @st1@ , Cold HDD for @sc1@ , or @standard@ for Magnetic. Default: @standard@
-sieVolumeType :: Lens' ScheduledInstancesEBS (Maybe Text)
-sieVolumeType = lens _sieVolumeType (\ s a -> s{_sieVolumeType = a});
-
--- | The ID of the snapshot.
-sieSnapshotId :: Lens' ScheduledInstancesEBS (Maybe Text)
-sieSnapshotId = lens _sieSnapshotId (\ s a -> s{_sieSnapshotId = a});
-
-instance Hashable ScheduledInstancesEBS
-
-instance NFData ScheduledInstancesEBS
-
-instance ToQuery ScheduledInstancesEBS where
-        toQuery ScheduledInstancesEBS'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _sieDeleteOnTermination,
-               "VolumeSize" =: _sieVolumeSize, "Iops" =: _sieIOPS,
-               "Encrypted" =: _sieEncrypted,
-               "VolumeType" =: _sieVolumeType,
-               "SnapshotId" =: _sieSnapshotId]
-
--- | Describes an IAM instance profile for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesIAMInstanceProfile' smart constructor.
-data ScheduledInstancesIAMInstanceProfile = ScheduledInstancesIAMInstanceProfile'
-    { _siiapARN  :: !(Maybe Text)
-    , _siiapName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesIAMInstanceProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siiapARN' - The Amazon Resource Name (ARN).
---
--- * 'siiapName' - The name.
-scheduledInstancesIAMInstanceProfile
-    :: ScheduledInstancesIAMInstanceProfile
-scheduledInstancesIAMInstanceProfile =
-    ScheduledInstancesIAMInstanceProfile'
-    { _siiapARN = Nothing
-    , _siiapName = Nothing
-    }
-
--- | The Amazon Resource Name (ARN).
-siiapARN :: Lens' ScheduledInstancesIAMInstanceProfile (Maybe Text)
-siiapARN = lens _siiapARN (\ s a -> s{_siiapARN = a});
-
--- | The name.
-siiapName :: Lens' ScheduledInstancesIAMInstanceProfile (Maybe Text)
-siiapName = lens _siiapName (\ s a -> s{_siiapName = a});
-
-instance Hashable
-         ScheduledInstancesIAMInstanceProfile
-
-instance NFData ScheduledInstancesIAMInstanceProfile
-
-instance ToQuery ScheduledInstancesIAMInstanceProfile
-         where
-        toQuery ScheduledInstancesIAMInstanceProfile'{..}
-          = mconcat ["Arn" =: _siiapARN, "Name" =: _siiapName]
-
--- | Describes an IPv6 address.
---
---
---
--- /See:/ 'scheduledInstancesIPv6Address' smart constructor.
-newtype ScheduledInstancesIPv6Address = ScheduledInstancesIPv6Address'
-    { _siiaIPv6Address :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesIPv6Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siiaIPv6Address' - The IPv6 address.
-scheduledInstancesIPv6Address
-    :: ScheduledInstancesIPv6Address
-scheduledInstancesIPv6Address =
-    ScheduledInstancesIPv6Address'
-    { _siiaIPv6Address = Nothing
-    }
-
--- | The IPv6 address.
-siiaIPv6Address :: Lens' ScheduledInstancesIPv6Address (Maybe Text)
-siiaIPv6Address = lens _siiaIPv6Address (\ s a -> s{_siiaIPv6Address = a});
-
-instance Hashable ScheduledInstancesIPv6Address
-
-instance NFData ScheduledInstancesIPv6Address
-
-instance ToQuery ScheduledInstancesIPv6Address where
-        toQuery ScheduledInstancesIPv6Address'{..}
-          = mconcat ["Ipv6Address" =: _siiaIPv6Address]
-
--- | Describes the launch specification for a Scheduled Instance.
---
---
--- If you are launching the Scheduled Instance in EC2-VPC, you must specify the ID of the subnet. You can specify the subnet using either @SubnetId@ or @NetworkInterface@ .
---
---
--- /See:/ 'scheduledInstancesLaunchSpecification' smart constructor.
-data ScheduledInstancesLaunchSpecification = ScheduledInstancesLaunchSpecification'
-    { _silsSecurityGroupIds    :: !(Maybe [Text])
-    , _silsKeyName             :: !(Maybe Text)
-    , _silsNetworkInterfaces   :: !(Maybe [ScheduledInstancesNetworkInterface])
-    , _silsRAMDiskId           :: !(Maybe Text)
-    , _silsSubnetId            :: !(Maybe Text)
-    , _silsKernelId            :: !(Maybe Text)
-    , _silsInstanceType        :: !(Maybe Text)
-    , _silsEBSOptimized        :: !(Maybe Bool)
-    , _silsUserData            :: !(Maybe Text)
-    , _silsMonitoring          :: !(Maybe ScheduledInstancesMonitoring)
-    , _silsIAMInstanceProfile  :: !(Maybe ScheduledInstancesIAMInstanceProfile)
-    , _silsBlockDeviceMappings :: !(Maybe [ScheduledInstancesBlockDeviceMapping])
-    , _silsPlacement           :: !(Maybe ScheduledInstancesPlacement)
-    , _silsImageId             :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'silsSecurityGroupIds' - The IDs of one or more security groups.
---
--- * 'silsKeyName' - The name of the key pair.
---
--- * 'silsNetworkInterfaces' - One or more network interfaces.
---
--- * 'silsRAMDiskId' - The ID of the RAM disk.
---
--- * 'silsSubnetId' - The ID of the subnet in which to launch the instances.
---
--- * 'silsKernelId' - The ID of the kernel.
---
--- * 'silsInstanceType' - The instance type.
---
--- * 'silsEBSOptimized' - Indicates whether the instances are optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance. Default: @false@
---
--- * 'silsUserData' - The base64-encoded MIME user data.
---
--- * 'silsMonitoring' - Enable or disable monitoring for the instances.
---
--- * 'silsIAMInstanceProfile' - The IAM instance profile.
---
--- * 'silsBlockDeviceMappings' - One or more block device mapping entries.
---
--- * 'silsPlacement' - The placement information.
---
--- * 'silsImageId' - The ID of the Amazon Machine Image (AMI).
-scheduledInstancesLaunchSpecification
-    :: Text -- ^ 'silsImageId'
-    -> ScheduledInstancesLaunchSpecification
-scheduledInstancesLaunchSpecification pImageId_ =
-    ScheduledInstancesLaunchSpecification'
-    { _silsSecurityGroupIds = Nothing
-    , _silsKeyName = Nothing
-    , _silsNetworkInterfaces = Nothing
-    , _silsRAMDiskId = Nothing
-    , _silsSubnetId = Nothing
-    , _silsKernelId = Nothing
-    , _silsInstanceType = Nothing
-    , _silsEBSOptimized = Nothing
-    , _silsUserData = Nothing
-    , _silsMonitoring = Nothing
-    , _silsIAMInstanceProfile = Nothing
-    , _silsBlockDeviceMappings = Nothing
-    , _silsPlacement = Nothing
-    , _silsImageId = pImageId_
-    }
-
--- | The IDs of one or more security groups.
-silsSecurityGroupIds :: Lens' ScheduledInstancesLaunchSpecification [Text]
-silsSecurityGroupIds = lens _silsSecurityGroupIds (\ s a -> s{_silsSecurityGroupIds = a}) . _Default . _Coerce;
-
--- | The name of the key pair.
-silsKeyName :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
-silsKeyName = lens _silsKeyName (\ s a -> s{_silsKeyName = a});
-
--- | One or more network interfaces.
-silsNetworkInterfaces :: Lens' ScheduledInstancesLaunchSpecification [ScheduledInstancesNetworkInterface]
-silsNetworkInterfaces = lens _silsNetworkInterfaces (\ s a -> s{_silsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-silsRAMDiskId :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
-silsRAMDiskId = lens _silsRAMDiskId (\ s a -> s{_silsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instances.
-silsSubnetId :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
-silsSubnetId = lens _silsSubnetId (\ s a -> s{_silsSubnetId = a});
-
--- | The ID of the kernel.
-silsKernelId :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
-silsKernelId = lens _silsKernelId (\ s a -> s{_silsKernelId = a});
-
--- | The instance type.
-silsInstanceType :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
-silsInstanceType = lens _silsInstanceType (\ s a -> s{_silsInstanceType = a});
-
--- | Indicates whether the instances are optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS-optimized instance. Default: @false@
-silsEBSOptimized :: Lens' ScheduledInstancesLaunchSpecification (Maybe Bool)
-silsEBSOptimized = lens _silsEBSOptimized (\ s a -> s{_silsEBSOptimized = a});
-
--- | The base64-encoded MIME user data.
-silsUserData :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
-silsUserData = lens _silsUserData (\ s a -> s{_silsUserData = a});
-
--- | Enable or disable monitoring for the instances.
-silsMonitoring :: Lens' ScheduledInstancesLaunchSpecification (Maybe ScheduledInstancesMonitoring)
-silsMonitoring = lens _silsMonitoring (\ s a -> s{_silsMonitoring = a});
-
--- | The IAM instance profile.
-silsIAMInstanceProfile :: Lens' ScheduledInstancesLaunchSpecification (Maybe ScheduledInstancesIAMInstanceProfile)
-silsIAMInstanceProfile = lens _silsIAMInstanceProfile (\ s a -> s{_silsIAMInstanceProfile = a});
-
--- | One or more block device mapping entries.
-silsBlockDeviceMappings :: Lens' ScheduledInstancesLaunchSpecification [ScheduledInstancesBlockDeviceMapping]
-silsBlockDeviceMappings = lens _silsBlockDeviceMappings (\ s a -> s{_silsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information.
-silsPlacement :: Lens' ScheduledInstancesLaunchSpecification (Maybe ScheduledInstancesPlacement)
-silsPlacement = lens _silsPlacement (\ s a -> s{_silsPlacement = a});
-
--- | The ID of the Amazon Machine Image (AMI).
-silsImageId :: Lens' ScheduledInstancesLaunchSpecification Text
-silsImageId = lens _silsImageId (\ s a -> s{_silsImageId = a});
-
-instance Hashable
-         ScheduledInstancesLaunchSpecification
-
-instance NFData ScheduledInstancesLaunchSpecification
-
-instance ToQuery
-         ScheduledInstancesLaunchSpecification where
-        toQuery ScheduledInstancesLaunchSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "SecurityGroupId" <$>
-                    _silsSecurityGroupIds),
-               "KeyName" =: _silsKeyName,
-               toQuery
-                 (toQueryList "NetworkInterface" <$>
-                    _silsNetworkInterfaces),
-               "RamdiskId" =: _silsRAMDiskId,
-               "SubnetId" =: _silsSubnetId,
-               "KernelId" =: _silsKernelId,
-               "InstanceType" =: _silsInstanceType,
-               "EbsOptimized" =: _silsEBSOptimized,
-               "UserData" =: _silsUserData,
-               "Monitoring" =: _silsMonitoring,
-               "IamInstanceProfile" =: _silsIAMInstanceProfile,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _silsBlockDeviceMappings),
-               "Placement" =: _silsPlacement,
-               "ImageId" =: _silsImageId]
-
--- | Describes whether monitoring is enabled for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesMonitoring' smart constructor.
-newtype ScheduledInstancesMonitoring = ScheduledInstancesMonitoring'
-    { _simEnabled :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesMonitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'simEnabled' - Indicates whether monitoring is enabled.
-scheduledInstancesMonitoring
-    :: ScheduledInstancesMonitoring
-scheduledInstancesMonitoring =
-    ScheduledInstancesMonitoring'
-    { _simEnabled = Nothing
-    }
-
--- | Indicates whether monitoring is enabled.
-simEnabled :: Lens' ScheduledInstancesMonitoring (Maybe Bool)
-simEnabled = lens _simEnabled (\ s a -> s{_simEnabled = a});
-
-instance Hashable ScheduledInstancesMonitoring
-
-instance NFData ScheduledInstancesMonitoring
-
-instance ToQuery ScheduledInstancesMonitoring where
-        toQuery ScheduledInstancesMonitoring'{..}
-          = mconcat ["Enabled" =: _simEnabled]
-
--- | Describes a network interface for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesNetworkInterface' smart constructor.
-data ScheduledInstancesNetworkInterface = ScheduledInstancesNetworkInterface'
-    { _siniGroups                         :: !(Maybe [Text])
-    , _siniDeleteOnTermination            :: !(Maybe Bool)
-    , _siniAssociatePublicIPAddress       :: !(Maybe Bool)
-    , _siniPrivateIPAddressConfigs        :: !(Maybe [ScheduledInstancesPrivateIPAddressConfig])
-    , _siniNetworkInterfaceId             :: !(Maybe Text)
-    , _siniSubnetId                       :: !(Maybe Text)
-    , _siniIPv6AddressCount               :: !(Maybe Int)
-    , _siniPrivateIPAddress               :: !(Maybe Text)
-    , _siniSecondaryPrivateIPAddressCount :: !(Maybe Int)
-    , _siniDescription                    :: !(Maybe Text)
-    , _siniDeviceIndex                    :: !(Maybe Int)
-    , _siniIPv6Addresses                  :: !(Maybe [ScheduledInstancesIPv6Address])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'siniGroups' - The IDs of one or more security groups.
---
--- * 'siniDeleteOnTermination' - Indicates whether to delete the interface when the instance is terminated.
---
--- * 'siniAssociatePublicIPAddress' - Indicates whether to assign a public IPv4 address to instances launched in a VPC. The public IPv4 address can only be assigned to a network interface for eth0, and can only be assigned to a new network interface, not an existing one. You cannot specify more than one network interface in the request. If launching into a default subnet, the default value is @true@ .
---
--- * 'siniPrivateIPAddressConfigs' - The private IPv4 addresses.
---
--- * 'siniNetworkInterfaceId' - The ID of the network interface.
---
--- * 'siniSubnetId' - The ID of the subnet.
---
--- * 'siniIPv6AddressCount' - The number of IPv6 addresses to assign to the network interface. The IPv6 addresses are automatically selected from the subnet range.
---
--- * 'siniPrivateIPAddress' - The IPv4 address of the network interface within the subnet.
---
--- * 'siniSecondaryPrivateIPAddressCount' - The number of secondary private IPv4 addresses.
---
--- * 'siniDescription' - The description.
---
--- * 'siniDeviceIndex' - The index of the device for the network interface attachment.
---
--- * 'siniIPv6Addresses' - One or more specific IPv6 addresses from the subnet range.
-scheduledInstancesNetworkInterface
-    :: ScheduledInstancesNetworkInterface
-scheduledInstancesNetworkInterface =
-    ScheduledInstancesNetworkInterface'
-    { _siniGroups = Nothing
-    , _siniDeleteOnTermination = Nothing
-    , _siniAssociatePublicIPAddress = Nothing
-    , _siniPrivateIPAddressConfigs = Nothing
-    , _siniNetworkInterfaceId = Nothing
-    , _siniSubnetId = Nothing
-    , _siniIPv6AddressCount = Nothing
-    , _siniPrivateIPAddress = Nothing
-    , _siniSecondaryPrivateIPAddressCount = Nothing
-    , _siniDescription = Nothing
-    , _siniDeviceIndex = Nothing
-    , _siniIPv6Addresses = Nothing
-    }
-
--- | The IDs of one or more security groups.
-siniGroups :: Lens' ScheduledInstancesNetworkInterface [Text]
-siniGroups = lens _siniGroups (\ s a -> s{_siniGroups = a}) . _Default . _Coerce;
-
--- | Indicates whether to delete the interface when the instance is terminated.
-siniDeleteOnTermination :: Lens' ScheduledInstancesNetworkInterface (Maybe Bool)
-siniDeleteOnTermination = lens _siniDeleteOnTermination (\ s a -> s{_siniDeleteOnTermination = a});
-
--- | Indicates whether to assign a public IPv4 address to instances launched in a VPC. The public IPv4 address can only be assigned to a network interface for eth0, and can only be assigned to a new network interface, not an existing one. You cannot specify more than one network interface in the request. If launching into a default subnet, the default value is @true@ .
-siniAssociatePublicIPAddress :: Lens' ScheduledInstancesNetworkInterface (Maybe Bool)
-siniAssociatePublicIPAddress = lens _siniAssociatePublicIPAddress (\ s a -> s{_siniAssociatePublicIPAddress = a});
-
--- | The private IPv4 addresses.
-siniPrivateIPAddressConfigs :: Lens' ScheduledInstancesNetworkInterface [ScheduledInstancesPrivateIPAddressConfig]
-siniPrivateIPAddressConfigs = lens _siniPrivateIPAddressConfigs (\ s a -> s{_siniPrivateIPAddressConfigs = a}) . _Default . _Coerce;
-
--- | The ID of the network interface.
-siniNetworkInterfaceId :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
-siniNetworkInterfaceId = lens _siniNetworkInterfaceId (\ s a -> s{_siniNetworkInterfaceId = a});
-
--- | The ID of the subnet.
-siniSubnetId :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
-siniSubnetId = lens _siniSubnetId (\ s a -> s{_siniSubnetId = a});
-
--- | The number of IPv6 addresses to assign to the network interface. The IPv6 addresses are automatically selected from the subnet range.
-siniIPv6AddressCount :: Lens' ScheduledInstancesNetworkInterface (Maybe Int)
-siniIPv6AddressCount = lens _siniIPv6AddressCount (\ s a -> s{_siniIPv6AddressCount = a});
-
--- | The IPv4 address of the network interface within the subnet.
-siniPrivateIPAddress :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
-siniPrivateIPAddress = lens _siniPrivateIPAddress (\ s a -> s{_siniPrivateIPAddress = a});
-
--- | The number of secondary private IPv4 addresses.
-siniSecondaryPrivateIPAddressCount :: Lens' ScheduledInstancesNetworkInterface (Maybe Int)
-siniSecondaryPrivateIPAddressCount = lens _siniSecondaryPrivateIPAddressCount (\ s a -> s{_siniSecondaryPrivateIPAddressCount = a});
-
--- | The description.
-siniDescription :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
-siniDescription = lens _siniDescription (\ s a -> s{_siniDescription = a});
-
--- | The index of the device for the network interface attachment.
-siniDeviceIndex :: Lens' ScheduledInstancesNetworkInterface (Maybe Int)
-siniDeviceIndex = lens _siniDeviceIndex (\ s a -> s{_siniDeviceIndex = a});
-
--- | One or more specific IPv6 addresses from the subnet range.
-siniIPv6Addresses :: Lens' ScheduledInstancesNetworkInterface [ScheduledInstancesIPv6Address]
-siniIPv6Addresses = lens _siniIPv6Addresses (\ s a -> s{_siniIPv6Addresses = a}) . _Default . _Coerce;
-
-instance Hashable ScheduledInstancesNetworkInterface
-
-instance NFData ScheduledInstancesNetworkInterface
-
-instance ToQuery ScheduledInstancesNetworkInterface
-         where
-        toQuery ScheduledInstancesNetworkInterface'{..}
-          = mconcat
-              [toQuery (toQueryList "Group" <$> _siniGroups),
-               "DeleteOnTermination" =: _siniDeleteOnTermination,
-               "AssociatePublicIpAddress" =:
-                 _siniAssociatePublicIPAddress,
-               toQuery
-                 (toQueryList "PrivateIpAddressConfig" <$>
-                    _siniPrivateIPAddressConfigs),
-               "NetworkInterfaceId" =: _siniNetworkInterfaceId,
-               "SubnetId" =: _siniSubnetId,
-               "Ipv6AddressCount" =: _siniIPv6AddressCount,
-               "PrivateIpAddress" =: _siniPrivateIPAddress,
-               "SecondaryPrivateIpAddressCount" =:
-                 _siniSecondaryPrivateIPAddressCount,
-               "Description" =: _siniDescription,
-               "DeviceIndex" =: _siniDeviceIndex,
-               toQuery
-                 (toQueryList "Ipv6Address" <$> _siniIPv6Addresses)]
-
--- | Describes the placement for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesPlacement' smart constructor.
-data ScheduledInstancesPlacement = ScheduledInstancesPlacement'
-    { _sipAvailabilityZone :: !(Maybe Text)
-    , _sipGroupName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesPlacement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sipAvailabilityZone' - The Availability Zone.
---
--- * 'sipGroupName' - The name of the placement group.
-scheduledInstancesPlacement
-    :: ScheduledInstancesPlacement
-scheduledInstancesPlacement =
-    ScheduledInstancesPlacement'
-    { _sipAvailabilityZone = Nothing
-    , _sipGroupName = Nothing
-    }
-
--- | The Availability Zone.
-sipAvailabilityZone :: Lens' ScheduledInstancesPlacement (Maybe Text)
-sipAvailabilityZone = lens _sipAvailabilityZone (\ s a -> s{_sipAvailabilityZone = a});
-
--- | The name of the placement group.
-sipGroupName :: Lens' ScheduledInstancesPlacement (Maybe Text)
-sipGroupName = lens _sipGroupName (\ s a -> s{_sipGroupName = a});
-
-instance Hashable ScheduledInstancesPlacement
-
-instance NFData ScheduledInstancesPlacement
-
-instance ToQuery ScheduledInstancesPlacement where
-        toQuery ScheduledInstancesPlacement'{..}
-          = mconcat
-              ["AvailabilityZone" =: _sipAvailabilityZone,
-               "GroupName" =: _sipGroupName]
-
--- | Describes a private IPv4 address for a Scheduled Instance.
---
---
---
--- /See:/ 'scheduledInstancesPrivateIPAddressConfig' smart constructor.
-data ScheduledInstancesPrivateIPAddressConfig = ScheduledInstancesPrivateIPAddressConfig'
-    { _sipiacPrimary          :: !(Maybe Bool)
-    , _sipiacPrivateIPAddress :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ScheduledInstancesPrivateIPAddressConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sipiacPrimary' - Indicates whether this is a primary IPv4 address. Otherwise, this is a secondary IPv4 address.
---
--- * 'sipiacPrivateIPAddress' - The IPv4 address.
-scheduledInstancesPrivateIPAddressConfig
-    :: ScheduledInstancesPrivateIPAddressConfig
-scheduledInstancesPrivateIPAddressConfig =
-    ScheduledInstancesPrivateIPAddressConfig'
-    { _sipiacPrimary = Nothing
-    , _sipiacPrivateIPAddress = Nothing
-    }
-
--- | Indicates whether this is a primary IPv4 address. Otherwise, this is a secondary IPv4 address.
-sipiacPrimary :: Lens' ScheduledInstancesPrivateIPAddressConfig (Maybe Bool)
-sipiacPrimary = lens _sipiacPrimary (\ s a -> s{_sipiacPrimary = a});
-
--- | The IPv4 address.
-sipiacPrivateIPAddress :: Lens' ScheduledInstancesPrivateIPAddressConfig (Maybe Text)
-sipiacPrivateIPAddress = lens _sipiacPrivateIPAddress (\ s a -> s{_sipiacPrivateIPAddress = a});
-
-instance Hashable
-         ScheduledInstancesPrivateIPAddressConfig
-
-instance NFData
-         ScheduledInstancesPrivateIPAddressConfig
-
-instance ToQuery
-         ScheduledInstancesPrivateIPAddressConfig where
-        toQuery ScheduledInstancesPrivateIPAddressConfig'{..}
-          = mconcat
-              ["Primary" =: _sipiacPrimary,
-               "PrivateIpAddress" =: _sipiacPrivateIPAddress]
-
--- | Describes a security group
---
---
---
--- /See:/ 'securityGroup' smart constructor.
-data SecurityGroup = SecurityGroup'
-    { _sgVPCId               :: !(Maybe Text)
-    , _sgIPPermissions       :: !(Maybe [IPPermission])
-    , _sgIPPermissionsEgress :: !(Maybe [IPPermission])
-    , _sgTags                :: !(Maybe [Tag])
-    , _sgOwnerId             :: !Text
-    , _sgGroupId             :: !Text
-    , _sgGroupName           :: !Text
-    , _sgDescription         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SecurityGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sgVPCId' - [EC2-VPC] The ID of the VPC for the security group.
---
--- * 'sgIPPermissions' - One or more inbound rules associated with the security group.
---
--- * 'sgIPPermissionsEgress' - [EC2-VPC] One or more outbound rules associated with the security group.
---
--- * 'sgTags' - Any tags assigned to the security group.
---
--- * 'sgOwnerId' - The AWS account ID of the owner of the security group.
---
--- * 'sgGroupId' - The ID of the security group.
---
--- * 'sgGroupName' - The name of the security group.
---
--- * 'sgDescription' - A description of the security group.
-securityGroup
-    :: Text -- ^ 'sgOwnerId'
-    -> Text -- ^ 'sgGroupId'
-    -> Text -- ^ 'sgGroupName'
-    -> Text -- ^ 'sgDescription'
-    -> SecurityGroup
-securityGroup pOwnerId_ pGroupId_ pGroupName_ pDescription_ =
-    SecurityGroup'
-    { _sgVPCId = Nothing
-    , _sgIPPermissions = Nothing
-    , _sgIPPermissionsEgress = Nothing
-    , _sgTags = Nothing
-    , _sgOwnerId = pOwnerId_
-    , _sgGroupId = pGroupId_
-    , _sgGroupName = pGroupName_
-    , _sgDescription = pDescription_
-    }
-
--- | [EC2-VPC] The ID of the VPC for the security group.
-sgVPCId :: Lens' SecurityGroup (Maybe Text)
-sgVPCId = lens _sgVPCId (\ s a -> s{_sgVPCId = a});
-
--- | One or more inbound rules associated with the security group.
-sgIPPermissions :: Lens' SecurityGroup [IPPermission]
-sgIPPermissions = lens _sgIPPermissions (\ s a -> s{_sgIPPermissions = a}) . _Default . _Coerce;
-
--- | [EC2-VPC] One or more outbound rules associated with the security group.
-sgIPPermissionsEgress :: Lens' SecurityGroup [IPPermission]
-sgIPPermissionsEgress = lens _sgIPPermissionsEgress (\ s a -> s{_sgIPPermissionsEgress = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the security group.
-sgTags :: Lens' SecurityGroup [Tag]
-sgTags = lens _sgTags (\ s a -> s{_sgTags = a}) . _Default . _Coerce;
-
--- | The AWS account ID of the owner of the security group.
-sgOwnerId :: Lens' SecurityGroup Text
-sgOwnerId = lens _sgOwnerId (\ s a -> s{_sgOwnerId = a});
-
--- | The ID of the security group.
-sgGroupId :: Lens' SecurityGroup Text
-sgGroupId = lens _sgGroupId (\ s a -> s{_sgGroupId = a});
-
--- | The name of the security group.
-sgGroupName :: Lens' SecurityGroup Text
-sgGroupName = lens _sgGroupName (\ s a -> s{_sgGroupName = a});
-
--- | A description of the security group.
-sgDescription :: Lens' SecurityGroup Text
-sgDescription = lens _sgDescription (\ s a -> s{_sgDescription = a});
-
-instance FromXML SecurityGroup where
-        parseXML x
-          = SecurityGroup' <$>
-              (x .@? "vpcId") <*>
-                (x .@? "ipPermissions" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "ipPermissionsEgress" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "ownerId")
-                <*> (x .@ "groupId")
-                <*> (x .@ "groupName")
-                <*> (x .@ "groupDescription")
-
-instance Hashable SecurityGroup
-
-instance NFData SecurityGroup
-
--- | Describes a VPC with a security group that references your security group.
---
---
---
--- /See:/ 'securityGroupReference' smart constructor.
-data SecurityGroupReference = SecurityGroupReference'
-    { _sgrVPCPeeringConnectionId :: !(Maybe Text)
-    , _sgrGroupId                :: !Text
-    , _sgrReferencingVPCId       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SecurityGroupReference' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sgrVPCPeeringConnectionId' - The ID of the VPC peering connection.
---
--- * 'sgrGroupId' - The ID of your security group.
---
--- * 'sgrReferencingVPCId' - The ID of the VPC with the referencing security group.
-securityGroupReference
-    :: Text -- ^ 'sgrGroupId'
-    -> Text -- ^ 'sgrReferencingVPCId'
-    -> SecurityGroupReference
-securityGroupReference pGroupId_ pReferencingVPCId_ =
-    SecurityGroupReference'
-    { _sgrVPCPeeringConnectionId = Nothing
-    , _sgrGroupId = pGroupId_
-    , _sgrReferencingVPCId = pReferencingVPCId_
-    }
-
--- | The ID of the VPC peering connection.
-sgrVPCPeeringConnectionId :: Lens' SecurityGroupReference (Maybe Text)
-sgrVPCPeeringConnectionId = lens _sgrVPCPeeringConnectionId (\ s a -> s{_sgrVPCPeeringConnectionId = a});
-
--- | The ID of your security group.
-sgrGroupId :: Lens' SecurityGroupReference Text
-sgrGroupId = lens _sgrGroupId (\ s a -> s{_sgrGroupId = a});
-
--- | The ID of the VPC with the referencing security group.
-sgrReferencingVPCId :: Lens' SecurityGroupReference Text
-sgrReferencingVPCId = lens _sgrReferencingVPCId (\ s a -> s{_sgrReferencingVPCId = a});
-
-instance FromXML SecurityGroupReference where
-        parseXML x
-          = SecurityGroupReference' <$>
-              (x .@? "vpcPeeringConnectionId") <*> (x .@ "groupId")
-                <*> (x .@ "referencingVpcId")
-
-instance Hashable SecurityGroupReference
-
-instance NFData SecurityGroupReference
-
--- | Describes the time period for a Scheduled Instance to start its first schedule. The time period must span less than one day.
---
---
---
--- /See:/ 'slotDateTimeRangeRequest' smart constructor.
-data SlotDateTimeRangeRequest = SlotDateTimeRangeRequest'
-    { _sdtrrEarliestTime :: !ISO8601
-    , _sdtrrLatestTime   :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SlotDateTimeRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdtrrEarliestTime' - The earliest date and time, in UTC, for the Scheduled Instance to start.
---
--- * 'sdtrrLatestTime' - The latest date and time, in UTC, for the Scheduled Instance to start. This value must be later than or equal to the earliest date and at most three months in the future.
-slotDateTimeRangeRequest
-    :: UTCTime -- ^ 'sdtrrEarliestTime'
-    -> UTCTime -- ^ 'sdtrrLatestTime'
-    -> SlotDateTimeRangeRequest
-slotDateTimeRangeRequest pEarliestTime_ pLatestTime_ =
-    SlotDateTimeRangeRequest'
-    { _sdtrrEarliestTime = _Time # pEarliestTime_
-    , _sdtrrLatestTime = _Time # pLatestTime_
-    }
-
--- | The earliest date and time, in UTC, for the Scheduled Instance to start.
-sdtrrEarliestTime :: Lens' SlotDateTimeRangeRequest UTCTime
-sdtrrEarliestTime = lens _sdtrrEarliestTime (\ s a -> s{_sdtrrEarliestTime = a}) . _Time;
-
--- | The latest date and time, in UTC, for the Scheduled Instance to start. This value must be later than or equal to the earliest date and at most three months in the future.
-sdtrrLatestTime :: Lens' SlotDateTimeRangeRequest UTCTime
-sdtrrLatestTime = lens _sdtrrLatestTime (\ s a -> s{_sdtrrLatestTime = a}) . _Time;
-
-instance Hashable SlotDateTimeRangeRequest
-
-instance NFData SlotDateTimeRangeRequest
-
-instance ToQuery SlotDateTimeRangeRequest where
-        toQuery SlotDateTimeRangeRequest'{..}
-          = mconcat
-              ["EarliestTime" =: _sdtrrEarliestTime,
-               "LatestTime" =: _sdtrrLatestTime]
-
--- | Describes the time period for a Scheduled Instance to start its first schedule.
---
---
---
--- /See:/ 'slotStartTimeRangeRequest' smart constructor.
-data SlotStartTimeRangeRequest = SlotStartTimeRangeRequest'
-    { _sstrrLatestTime   :: !(Maybe ISO8601)
-    , _sstrrEarliestTime :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SlotStartTimeRangeRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sstrrLatestTime' - The latest date and time, in UTC, for the Scheduled Instance to start.
---
--- * 'sstrrEarliestTime' - The earliest date and time, in UTC, for the Scheduled Instance to start.
-slotStartTimeRangeRequest
-    :: SlotStartTimeRangeRequest
-slotStartTimeRangeRequest =
-    SlotStartTimeRangeRequest'
-    { _sstrrLatestTime = Nothing
-    , _sstrrEarliestTime = Nothing
-    }
-
--- | The latest date and time, in UTC, for the Scheduled Instance to start.
-sstrrLatestTime :: Lens' SlotStartTimeRangeRequest (Maybe UTCTime)
-sstrrLatestTime = lens _sstrrLatestTime (\ s a -> s{_sstrrLatestTime = a}) . mapping _Time;
-
--- | The earliest date and time, in UTC, for the Scheduled Instance to start.
-sstrrEarliestTime :: Lens' SlotStartTimeRangeRequest (Maybe UTCTime)
-sstrrEarliestTime = lens _sstrrEarliestTime (\ s a -> s{_sstrrEarliestTime = a}) . mapping _Time;
-
-instance Hashable SlotStartTimeRangeRequest
-
-instance NFData SlotStartTimeRangeRequest
-
-instance ToQuery SlotStartTimeRangeRequest where
-        toQuery SlotStartTimeRangeRequest'{..}
-          = mconcat
-              ["LatestTime" =: _sstrrLatestTime,
-               "EarliestTime" =: _sstrrEarliestTime]
-
--- | Describes a snapshot.
---
---
---
--- /See:/ 'snapshot' smart constructor.
-data Snapshot = Snapshot'
-    { _sStateMessage        :: !(Maybe Text)
-    , _sOwnerAlias          :: !(Maybe Text)
-    , _sDataEncryptionKeyId :: !(Maybe Text)
-    , _sKMSKeyId            :: !(Maybe Text)
-    , _sTags                :: !(Maybe [Tag])
-    , _sSnapshotId          :: !Text
-    , _sOwnerId             :: !Text
-    , _sVolumeId            :: !Text
-    , _sVolumeSize          :: !Int
-    , _sDescription         :: !Text
-    , _sStartTime           :: !ISO8601
-    , _sProgress            :: !Text
-    , _sState               :: !SnapshotState
-    , _sEncrypted           :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Snapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sStateMessage' - Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper AWS Key Management Service (AWS KMS) permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by the 'DescribeSnapshots' API operation.
---
--- * 'sOwnerAlias' - Value from an Amazon-maintained list (@amazon@ | @aws-marketplace@ | @microsoft@ ) of snapshot owners. Not to be confused with the user-configured AWS account alias, which is set from the IAM console.
---
--- * 'sDataEncryptionKeyId' - The data encryption key identifier for the snapshot. This value is a unique identifier that corresponds to the data encryption key that was used to encrypt the original volume or snapshot copy. Because data encryption keys are inherited by volumes created from snapshots, and vice versa, if snapshots share the same data encryption key identifier, then they belong to the same volume/snapshot lineage. This parameter is only returned by the 'DescribeSnapshots' API operation.
---
--- * 'sKMSKeyId' - The full ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) that was used to protect the volume encryption key for the parent volume.
---
--- * 'sTags' - Any tags assigned to the snapshot.
---
--- * 'sSnapshotId' - The ID of the snapshot. Each snapshot receives a unique identifier when it is created.
---
--- * 'sOwnerId' - The AWS account ID of the EBS snapshot owner.
---
--- * 'sVolumeId' - The ID of the volume that was used to create the snapshot. Snapshots created by the 'CopySnapshot' action have an arbitrary volume ID that should not be used for any purpose.
---
--- * 'sVolumeSize' - The size of the volume, in GiB.
---
--- * 'sDescription' - The description for the snapshot.
---
--- * 'sStartTime' - The time stamp when the snapshot was initiated.
---
--- * 'sProgress' - The progress of the snapshot, as a percentage.
---
--- * 'sState' - The snapshot state.
---
--- * 'sEncrypted' - Indicates whether the snapshot is encrypted.
-snapshot
-    :: Text -- ^ 'sSnapshotId'
-    -> Text -- ^ 'sOwnerId'
-    -> Text -- ^ 'sVolumeId'
-    -> Int -- ^ 'sVolumeSize'
-    -> Text -- ^ 'sDescription'
-    -> UTCTime -- ^ 'sStartTime'
-    -> Text -- ^ 'sProgress'
-    -> SnapshotState -- ^ 'sState'
-    -> Bool -- ^ 'sEncrypted'
-    -> Snapshot
-snapshot pSnapshotId_ pOwnerId_ pVolumeId_ pVolumeSize_ pDescription_ pStartTime_ pProgress_ pState_ pEncrypted_ =
-    Snapshot'
-    { _sStateMessage = Nothing
-    , _sOwnerAlias = Nothing
-    , _sDataEncryptionKeyId = Nothing
-    , _sKMSKeyId = Nothing
-    , _sTags = Nothing
-    , _sSnapshotId = pSnapshotId_
-    , _sOwnerId = pOwnerId_
-    , _sVolumeId = pVolumeId_
-    , _sVolumeSize = pVolumeSize_
-    , _sDescription = pDescription_
-    , _sStartTime = _Time # pStartTime_
-    , _sProgress = pProgress_
-    , _sState = pState_
-    , _sEncrypted = pEncrypted_
-    }
-
--- | Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy operation fails (for example, if the proper AWS Key Management Service (AWS KMS) permissions are not obtained) this field displays error state details to help you diagnose why the error occurred. This parameter is only returned by the 'DescribeSnapshots' API operation.
-sStateMessage :: Lens' Snapshot (Maybe Text)
-sStateMessage = lens _sStateMessage (\ s a -> s{_sStateMessage = a});
-
--- | Value from an Amazon-maintained list (@amazon@ | @aws-marketplace@ | @microsoft@ ) of snapshot owners. Not to be confused with the user-configured AWS account alias, which is set from the IAM console.
-sOwnerAlias :: Lens' Snapshot (Maybe Text)
-sOwnerAlias = lens _sOwnerAlias (\ s a -> s{_sOwnerAlias = a});
-
--- | The data encryption key identifier for the snapshot. This value is a unique identifier that corresponds to the data encryption key that was used to encrypt the original volume or snapshot copy. Because data encryption keys are inherited by volumes created from snapshots, and vice versa, if snapshots share the same data encryption key identifier, then they belong to the same volume/snapshot lineage. This parameter is only returned by the 'DescribeSnapshots' API operation.
-sDataEncryptionKeyId :: Lens' Snapshot (Maybe Text)
-sDataEncryptionKeyId = lens _sDataEncryptionKeyId (\ s a -> s{_sDataEncryptionKeyId = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) that was used to protect the volume encryption key for the parent volume.
-sKMSKeyId :: Lens' Snapshot (Maybe Text)
-sKMSKeyId = lens _sKMSKeyId (\ s a -> s{_sKMSKeyId = a});
-
--- | Any tags assigned to the snapshot.
-sTags :: Lens' Snapshot [Tag]
-sTags = lens _sTags (\ s a -> s{_sTags = a}) . _Default . _Coerce;
-
--- | The ID of the snapshot. Each snapshot receives a unique identifier when it is created.
-sSnapshotId :: Lens' Snapshot Text
-sSnapshotId = lens _sSnapshotId (\ s a -> s{_sSnapshotId = a});
-
--- | The AWS account ID of the EBS snapshot owner.
-sOwnerId :: Lens' Snapshot Text
-sOwnerId = lens _sOwnerId (\ s a -> s{_sOwnerId = a});
-
--- | The ID of the volume that was used to create the snapshot. Snapshots created by the 'CopySnapshot' action have an arbitrary volume ID that should not be used for any purpose.
-sVolumeId :: Lens' Snapshot Text
-sVolumeId = lens _sVolumeId (\ s a -> s{_sVolumeId = a});
-
--- | The size of the volume, in GiB.
-sVolumeSize :: Lens' Snapshot Int
-sVolumeSize = lens _sVolumeSize (\ s a -> s{_sVolumeSize = a});
-
--- | The description for the snapshot.
-sDescription :: Lens' Snapshot Text
-sDescription = lens _sDescription (\ s a -> s{_sDescription = a});
-
--- | The time stamp when the snapshot was initiated.
-sStartTime :: Lens' Snapshot UTCTime
-sStartTime = lens _sStartTime (\ s a -> s{_sStartTime = a}) . _Time;
-
--- | The progress of the snapshot, as a percentage.
-sProgress :: Lens' Snapshot Text
-sProgress = lens _sProgress (\ s a -> s{_sProgress = a});
-
--- | The snapshot state.
-sState :: Lens' Snapshot SnapshotState
-sState = lens _sState (\ s a -> s{_sState = a});
-
--- | Indicates whether the snapshot is encrypted.
-sEncrypted :: Lens' Snapshot Bool
-sEncrypted = lens _sEncrypted (\ s a -> s{_sEncrypted = a});
-
-instance FromXML Snapshot where
-        parseXML x
-          = Snapshot' <$>
-              (x .@? "statusMessage") <*> (x .@? "ownerAlias") <*>
-                (x .@? "dataEncryptionKeyId")
-                <*> (x .@? "kmsKeyId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "snapshotId")
-                <*> (x .@ "ownerId")
-                <*> (x .@ "volumeId")
-                <*> (x .@ "volumeSize")
-                <*> (x .@ "description")
-                <*> (x .@ "startTime")
-                <*> (x .@ "progress")
-                <*> (x .@ "status")
-                <*> (x .@ "encrypted")
-
-instance Hashable Snapshot
-
-instance NFData Snapshot
-
--- | Describes the snapshot created from the imported disk.
---
---
---
--- /See:/ 'snapshotDetail' smart constructor.
-data SnapshotDetail = SnapshotDetail'
-    { _sdStatus        :: !(Maybe Text)
-    , _sdProgress      :: !(Maybe Text)
-    , _sdFormat        :: !(Maybe Text)
-    , _sdURL           :: !(Maybe Text)
-    , _sdDeviceName    :: !(Maybe Text)
-    , _sdStatusMessage :: !(Maybe Text)
-    , _sdUserBucket    :: !(Maybe UserBucketDetails)
-    , _sdDiskImageSize :: !(Maybe Double)
-    , _sdDescription   :: !(Maybe Text)
-    , _sdSnapshotId    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdStatus' - A brief status of the snapshot creation.
---
--- * 'sdProgress' - The percentage of progress for the task.
---
--- * 'sdFormat' - The format of the disk image from which the snapshot is created.
---
--- * 'sdURL' - The URL used to access the disk image.
---
--- * 'sdDeviceName' - The block device mapping for the snapshot.
---
--- * 'sdStatusMessage' - A detailed status message for the snapshot creation.
---
--- * 'sdUserBucket' - The S3 bucket for the disk image.
---
--- * 'sdDiskImageSize' - The size of the disk in the snapshot, in GiB.
---
--- * 'sdDescription' - A description for the snapshot.
---
--- * 'sdSnapshotId' - The snapshot ID of the disk being imported.
-snapshotDetail
-    :: SnapshotDetail
-snapshotDetail =
-    SnapshotDetail'
-    { _sdStatus = Nothing
-    , _sdProgress = Nothing
-    , _sdFormat = Nothing
-    , _sdURL = Nothing
-    , _sdDeviceName = Nothing
-    , _sdStatusMessage = Nothing
-    , _sdUserBucket = Nothing
-    , _sdDiskImageSize = Nothing
-    , _sdDescription = Nothing
-    , _sdSnapshotId = Nothing
-    }
-
--- | A brief status of the snapshot creation.
-sdStatus :: Lens' SnapshotDetail (Maybe Text)
-sdStatus = lens _sdStatus (\ s a -> s{_sdStatus = a});
-
--- | The percentage of progress for the task.
-sdProgress :: Lens' SnapshotDetail (Maybe Text)
-sdProgress = lens _sdProgress (\ s a -> s{_sdProgress = a});
-
--- | The format of the disk image from which the snapshot is created.
-sdFormat :: Lens' SnapshotDetail (Maybe Text)
-sdFormat = lens _sdFormat (\ s a -> s{_sdFormat = a});
-
--- | The URL used to access the disk image.
-sdURL :: Lens' SnapshotDetail (Maybe Text)
-sdURL = lens _sdURL (\ s a -> s{_sdURL = a});
-
--- | The block device mapping for the snapshot.
-sdDeviceName :: Lens' SnapshotDetail (Maybe Text)
-sdDeviceName = lens _sdDeviceName (\ s a -> s{_sdDeviceName = a});
-
--- | A detailed status message for the snapshot creation.
-sdStatusMessage :: Lens' SnapshotDetail (Maybe Text)
-sdStatusMessage = lens _sdStatusMessage (\ s a -> s{_sdStatusMessage = a});
-
--- | The S3 bucket for the disk image.
-sdUserBucket :: Lens' SnapshotDetail (Maybe UserBucketDetails)
-sdUserBucket = lens _sdUserBucket (\ s a -> s{_sdUserBucket = a});
-
--- | The size of the disk in the snapshot, in GiB.
-sdDiskImageSize :: Lens' SnapshotDetail (Maybe Double)
-sdDiskImageSize = lens _sdDiskImageSize (\ s a -> s{_sdDiskImageSize = a});
-
--- | A description for the snapshot.
-sdDescription :: Lens' SnapshotDetail (Maybe Text)
-sdDescription = lens _sdDescription (\ s a -> s{_sdDescription = a});
-
--- | The snapshot ID of the disk being imported.
-sdSnapshotId :: Lens' SnapshotDetail (Maybe Text)
-sdSnapshotId = lens _sdSnapshotId (\ s a -> s{_sdSnapshotId = a});
-
-instance FromXML SnapshotDetail where
-        parseXML x
-          = SnapshotDetail' <$>
-              (x .@? "status") <*> (x .@? "progress") <*>
-                (x .@? "format")
-                <*> (x .@? "url")
-                <*> (x .@? "deviceName")
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "userBucket")
-                <*> (x .@? "diskImageSize")
-                <*> (x .@? "description")
-                <*> (x .@? "snapshotId")
-
-instance Hashable SnapshotDetail
-
-instance NFData SnapshotDetail
-
--- | The disk container object for the import snapshot request.
---
---
---
--- /See:/ 'snapshotDiskContainer' smart constructor.
-data SnapshotDiskContainer = SnapshotDiskContainer'
-    { _sdcFormat      :: !(Maybe Text)
-    , _sdcURL         :: !(Maybe Text)
-    , _sdcUserBucket  :: !(Maybe UserBucket)
-    , _sdcDescription :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotDiskContainer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdcFormat' - The format of the disk image being imported. Valid values: @RAW@ | @VHD@ | @VMDK@ | @OVA@
---
--- * 'sdcURL' - The URL to the Amazon S3-based disk image being imported. It can either be a https URL (https://..) or an Amazon S3 URL (s3://..).
---
--- * 'sdcUserBucket' - The S3 bucket for the disk image.
---
--- * 'sdcDescription' - The description of the disk image being imported.
-snapshotDiskContainer
-    :: SnapshotDiskContainer
-snapshotDiskContainer =
-    SnapshotDiskContainer'
-    { _sdcFormat = Nothing
-    , _sdcURL = Nothing
-    , _sdcUserBucket = Nothing
-    , _sdcDescription = Nothing
-    }
-
--- | The format of the disk image being imported. Valid values: @RAW@ | @VHD@ | @VMDK@ | @OVA@
-sdcFormat :: Lens' SnapshotDiskContainer (Maybe Text)
-sdcFormat = lens _sdcFormat (\ s a -> s{_sdcFormat = a});
-
--- | The URL to the Amazon S3-based disk image being imported. It can either be a https URL (https://..) or an Amazon S3 URL (s3://..).
-sdcURL :: Lens' SnapshotDiskContainer (Maybe Text)
-sdcURL = lens _sdcURL (\ s a -> s{_sdcURL = a});
-
--- | The S3 bucket for the disk image.
-sdcUserBucket :: Lens' SnapshotDiskContainer (Maybe UserBucket)
-sdcUserBucket = lens _sdcUserBucket (\ s a -> s{_sdcUserBucket = a});
-
--- | The description of the disk image being imported.
-sdcDescription :: Lens' SnapshotDiskContainer (Maybe Text)
-sdcDescription = lens _sdcDescription (\ s a -> s{_sdcDescription = a});
-
-instance Hashable SnapshotDiskContainer
-
-instance NFData SnapshotDiskContainer
-
-instance ToQuery SnapshotDiskContainer where
-        toQuery SnapshotDiskContainer'{..}
-          = mconcat
-              ["Format" =: _sdcFormat, "Url" =: _sdcURL,
-               "UserBucket" =: _sdcUserBucket,
-               "Description" =: _sdcDescription]
-
--- | Details about the import snapshot task.
---
---
---
--- /See:/ 'snapshotTaskDetail' smart constructor.
-data SnapshotTaskDetail = SnapshotTaskDetail'
-    { _stdStatus        :: !(Maybe Text)
-    , _stdProgress      :: !(Maybe Text)
-    , _stdFormat        :: !(Maybe Text)
-    , _stdURL           :: !(Maybe Text)
-    , _stdStatusMessage :: !(Maybe Text)
-    , _stdUserBucket    :: !(Maybe UserBucketDetails)
-    , _stdDiskImageSize :: !(Maybe Double)
-    , _stdDescription   :: !(Maybe Text)
-    , _stdSnapshotId    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotTaskDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'stdStatus' - A brief status for the import snapshot task.
---
--- * 'stdProgress' - The percentage of completion for the import snapshot task.
---
--- * 'stdFormat' - The format of the disk image from which the snapshot is created.
---
--- * 'stdURL' - The URL of the disk image from which the snapshot is created.
---
--- * 'stdStatusMessage' - A detailed status message for the import snapshot task.
---
--- * 'stdUserBucket' - The S3 bucket for the disk image.
---
--- * 'stdDiskImageSize' - The size of the disk in the snapshot, in GiB.
---
--- * 'stdDescription' - The description of the snapshot.
---
--- * 'stdSnapshotId' - The snapshot ID of the disk being imported.
-snapshotTaskDetail
-    :: SnapshotTaskDetail
-snapshotTaskDetail =
-    SnapshotTaskDetail'
-    { _stdStatus = Nothing
-    , _stdProgress = Nothing
-    , _stdFormat = Nothing
-    , _stdURL = Nothing
-    , _stdStatusMessage = Nothing
-    , _stdUserBucket = Nothing
-    , _stdDiskImageSize = Nothing
-    , _stdDescription = Nothing
-    , _stdSnapshotId = Nothing
-    }
-
--- | A brief status for the import snapshot task.
-stdStatus :: Lens' SnapshotTaskDetail (Maybe Text)
-stdStatus = lens _stdStatus (\ s a -> s{_stdStatus = a});
-
--- | The percentage of completion for the import snapshot task.
-stdProgress :: Lens' SnapshotTaskDetail (Maybe Text)
-stdProgress = lens _stdProgress (\ s a -> s{_stdProgress = a});
-
--- | The format of the disk image from which the snapshot is created.
-stdFormat :: Lens' SnapshotTaskDetail (Maybe Text)
-stdFormat = lens _stdFormat (\ s a -> s{_stdFormat = a});
-
--- | The URL of the disk image from which the snapshot is created.
-stdURL :: Lens' SnapshotTaskDetail (Maybe Text)
-stdURL = lens _stdURL (\ s a -> s{_stdURL = a});
-
--- | A detailed status message for the import snapshot task.
-stdStatusMessage :: Lens' SnapshotTaskDetail (Maybe Text)
-stdStatusMessage = lens _stdStatusMessage (\ s a -> s{_stdStatusMessage = a});
-
--- | The S3 bucket for the disk image.
-stdUserBucket :: Lens' SnapshotTaskDetail (Maybe UserBucketDetails)
-stdUserBucket = lens _stdUserBucket (\ s a -> s{_stdUserBucket = a});
-
--- | The size of the disk in the snapshot, in GiB.
-stdDiskImageSize :: Lens' SnapshotTaskDetail (Maybe Double)
-stdDiskImageSize = lens _stdDiskImageSize (\ s a -> s{_stdDiskImageSize = a});
-
--- | The description of the snapshot.
-stdDescription :: Lens' SnapshotTaskDetail (Maybe Text)
-stdDescription = lens _stdDescription (\ s a -> s{_stdDescription = a});
-
--- | The snapshot ID of the disk being imported.
-stdSnapshotId :: Lens' SnapshotTaskDetail (Maybe Text)
-stdSnapshotId = lens _stdSnapshotId (\ s a -> s{_stdSnapshotId = a});
-
-instance FromXML SnapshotTaskDetail where
-        parseXML x
-          = SnapshotTaskDetail' <$>
-              (x .@? "status") <*> (x .@? "progress") <*>
-                (x .@? "format")
-                <*> (x .@? "url")
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "userBucket")
-                <*> (x .@? "diskImageSize")
-                <*> (x .@? "description")
-                <*> (x .@? "snapshotId")
-
-instance Hashable SnapshotTaskDetail
-
-instance NFData SnapshotTaskDetail
-
--- | Describes the data feed for a Spot instance.
---
---
---
--- /See:/ 'spotDatafeedSubscription' smart constructor.
-data SpotDatafeedSubscription = SpotDatafeedSubscription'
-    { _sdsState   :: !(Maybe DatafeedSubscriptionState)
-    , _sdsPrefix  :: !(Maybe Text)
-    , _sdsBucket  :: !(Maybe Text)
-    , _sdsOwnerId :: !(Maybe Text)
-    , _sdsFault   :: !(Maybe SpotInstanceStateFault)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotDatafeedSubscription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdsState' - The state of the Spot instance data feed subscription.
---
--- * 'sdsPrefix' - The prefix that is prepended to data feed files.
---
--- * 'sdsBucket' - The Amazon S3 bucket where the Spot instance data feed is located.
---
--- * 'sdsOwnerId' - The AWS account ID of the account.
---
--- * 'sdsFault' - The fault codes for the Spot instance request, if any.
-spotDatafeedSubscription
-    :: SpotDatafeedSubscription
-spotDatafeedSubscription =
-    SpotDatafeedSubscription'
-    { _sdsState = Nothing
-    , _sdsPrefix = Nothing
-    , _sdsBucket = Nothing
-    , _sdsOwnerId = Nothing
-    , _sdsFault = Nothing
-    }
-
--- | The state of the Spot instance data feed subscription.
-sdsState :: Lens' SpotDatafeedSubscription (Maybe DatafeedSubscriptionState)
-sdsState = lens _sdsState (\ s a -> s{_sdsState = a});
-
--- | The prefix that is prepended to data feed files.
-sdsPrefix :: Lens' SpotDatafeedSubscription (Maybe Text)
-sdsPrefix = lens _sdsPrefix (\ s a -> s{_sdsPrefix = a});
-
--- | The Amazon S3 bucket where the Spot instance data feed is located.
-sdsBucket :: Lens' SpotDatafeedSubscription (Maybe Text)
-sdsBucket = lens _sdsBucket (\ s a -> s{_sdsBucket = a});
-
--- | The AWS account ID of the account.
-sdsOwnerId :: Lens' SpotDatafeedSubscription (Maybe Text)
-sdsOwnerId = lens _sdsOwnerId (\ s a -> s{_sdsOwnerId = a});
-
--- | The fault codes for the Spot instance request, if any.
-sdsFault :: Lens' SpotDatafeedSubscription (Maybe SpotInstanceStateFault)
-sdsFault = lens _sdsFault (\ s a -> s{_sdsFault = a});
-
-instance FromXML SpotDatafeedSubscription where
-        parseXML x
-          = SpotDatafeedSubscription' <$>
-              (x .@? "state") <*> (x .@? "prefix") <*>
-                (x .@? "bucket")
-                <*> (x .@? "ownerId")
-                <*> (x .@? "fault")
-
-instance Hashable SpotDatafeedSubscription
-
-instance NFData SpotDatafeedSubscription
-
--- | Describes the launch specification for one or more Spot instances.
---
---
---
--- /See:/ 'spotFleetLaunchSpecification' smart constructor.
-data SpotFleetLaunchSpecification = SpotFleetLaunchSpecification'
-    { _sflsSecurityGroups      :: !(Maybe [GroupIdentifier])
-    , _sflsSpotPrice           :: !(Maybe Text)
-    , _sflsWeightedCapacity    :: !(Maybe Double)
-    , _sflsKeyName             :: !(Maybe Text)
-    , _sflsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _sflsRAMDiskId           :: !(Maybe Text)
-    , _sflsSubnetId            :: !(Maybe Text)
-    , _sflsKernelId            :: !(Maybe Text)
-    , _sflsInstanceType        :: !(Maybe InstanceType)
-    , _sflsEBSOptimized        :: !(Maybe Bool)
-    , _sflsUserData            :: !(Maybe Text)
-    , _sflsMonitoring          :: !(Maybe SpotFleetMonitoring)
-    , _sflsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
-    , _sflsImageId             :: !(Maybe Text)
-    , _sflsAddressingType      :: !(Maybe Text)
-    , _sflsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _sflsPlacement           :: !(Maybe SpotPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sflsSecurityGroups' - One or more security groups. When requesting instances in a VPC, you must specify the IDs of the security groups. When requesting instances in EC2-Classic, you can specify the names or the IDs of the security groups.
---
--- * 'sflsSpotPrice' - The bid price per unit hour for the specified instance type. If this value is not specified, the default is the Spot bid price specified for the fleet. To determine the bid price per unit hour, divide the Spot bid price by the value of @WeightedCapacity@ .
---
--- * 'sflsWeightedCapacity' - The number of units provided by the specified instance type. These are the same units that you chose to set the target capacity in terms (instances or a performance characteristic such as vCPUs, memory, or I/O). If the target capacity divided by this value is not a whole number, we round the number of instances to the next whole number. If this value is not specified, the default is 1.
---
--- * 'sflsKeyName' - The name of the key pair.
---
--- * 'sflsNetworkInterfaces' - One or more network interfaces. If you specify a network interface, you must specify subnet IDs and security group IDs using the network interface.
---
--- * 'sflsRAMDiskId' - The ID of the RAM disk.
---
--- * 'sflsSubnetId' - The ID of the subnet in which to launch the instances. To specify multiple subnets, separate them using commas; for example, "subnet-a61dafcf, subnet-65ea5f08".
---
--- * 'sflsKernelId' - The ID of the kernel.
---
--- * 'sflsInstanceType' - The instance type. Note that T2 and HS1 instance types are not supported.
---
--- * 'sflsEBSOptimized' - Indicates whether the instances are optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance. Default: @false@
---
--- * 'sflsUserData' - The user data to make available to the instances. If you are using an AWS SDK or 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.
---
--- * 'sflsMonitoring' - Enable or disable monitoring for the instances.
---
--- * 'sflsIAMInstanceProfile' - The IAM instance profile.
---
--- * 'sflsImageId' - The ID of the AMI.
---
--- * 'sflsAddressingType' - Deprecated.
---
--- * 'sflsBlockDeviceMappings' - One or more block device mapping entries.
---
--- * 'sflsPlacement' - The placement information.
-spotFleetLaunchSpecification
-    :: SpotFleetLaunchSpecification
-spotFleetLaunchSpecification =
-    SpotFleetLaunchSpecification'
-    { _sflsSecurityGroups = Nothing
-    , _sflsSpotPrice = Nothing
-    , _sflsWeightedCapacity = Nothing
-    , _sflsKeyName = Nothing
-    , _sflsNetworkInterfaces = Nothing
-    , _sflsRAMDiskId = Nothing
-    , _sflsSubnetId = Nothing
-    , _sflsKernelId = Nothing
-    , _sflsInstanceType = Nothing
-    , _sflsEBSOptimized = Nothing
-    , _sflsUserData = Nothing
-    , _sflsMonitoring = Nothing
-    , _sflsIAMInstanceProfile = Nothing
-    , _sflsImageId = Nothing
-    , _sflsAddressingType = Nothing
-    , _sflsBlockDeviceMappings = Nothing
-    , _sflsPlacement = Nothing
-    }
-
--- | One or more security groups. When requesting instances in a VPC, you must specify the IDs of the security groups. When requesting instances in EC2-Classic, you can specify the names or the IDs of the security groups.
-sflsSecurityGroups :: Lens' SpotFleetLaunchSpecification [GroupIdentifier]
-sflsSecurityGroups = lens _sflsSecurityGroups (\ s a -> s{_sflsSecurityGroups = a}) . _Default . _Coerce;
-
--- | The bid price per unit hour for the specified instance type. If this value is not specified, the default is the Spot bid price specified for the fleet. To determine the bid price per unit hour, divide the Spot bid price by the value of @WeightedCapacity@ .
-sflsSpotPrice :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsSpotPrice = lens _sflsSpotPrice (\ s a -> s{_sflsSpotPrice = a});
-
--- | The number of units provided by the specified instance type. These are the same units that you chose to set the target capacity in terms (instances or a performance characteristic such as vCPUs, memory, or I/O). If the target capacity divided by this value is not a whole number, we round the number of instances to the next whole number. If this value is not specified, the default is 1.
-sflsWeightedCapacity :: Lens' SpotFleetLaunchSpecification (Maybe Double)
-sflsWeightedCapacity = lens _sflsWeightedCapacity (\ s a -> s{_sflsWeightedCapacity = a});
-
--- | The name of the key pair.
-sflsKeyName :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsKeyName = lens _sflsKeyName (\ s a -> s{_sflsKeyName = a});
-
--- | One or more network interfaces. If you specify a network interface, you must specify subnet IDs and security group IDs using the network interface.
-sflsNetworkInterfaces :: Lens' SpotFleetLaunchSpecification [InstanceNetworkInterfaceSpecification]
-sflsNetworkInterfaces = lens _sflsNetworkInterfaces (\ s a -> s{_sflsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-sflsRAMDiskId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsRAMDiskId = lens _sflsRAMDiskId (\ s a -> s{_sflsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instances. To specify multiple subnets, separate them using commas; for example, "subnet-a61dafcf, subnet-65ea5f08".
-sflsSubnetId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsSubnetId = lens _sflsSubnetId (\ s a -> s{_sflsSubnetId = a});
-
--- | The ID of the kernel.
-sflsKernelId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsKernelId = lens _sflsKernelId (\ s a -> s{_sflsKernelId = a});
-
--- | The instance type. Note that T2 and HS1 instance types are not supported.
-sflsInstanceType :: Lens' SpotFleetLaunchSpecification (Maybe InstanceType)
-sflsInstanceType = lens _sflsInstanceType (\ s a -> s{_sflsInstanceType = a});
-
--- | Indicates whether the instances are optimized for EBS I/O. This optimization provides dedicated throughput to Amazon EBS and an optimized configuration stack to provide optimal EBS I/O performance. This optimization isn't available with all instance types. Additional usage charges apply when using an EBS Optimized instance. Default: @false@
-sflsEBSOptimized :: Lens' SpotFleetLaunchSpecification (Maybe Bool)
-sflsEBSOptimized = lens _sflsEBSOptimized (\ s a -> s{_sflsEBSOptimized = a});
-
--- | The user data to make available to the instances. If you are using an AWS SDK or 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.
-sflsUserData :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsUserData = lens _sflsUserData (\ s a -> s{_sflsUserData = a});
-
--- | Enable or disable monitoring for the instances.
-sflsMonitoring :: Lens' SpotFleetLaunchSpecification (Maybe SpotFleetMonitoring)
-sflsMonitoring = lens _sflsMonitoring (\ s a -> s{_sflsMonitoring = a});
-
--- | The IAM instance profile.
-sflsIAMInstanceProfile :: Lens' SpotFleetLaunchSpecification (Maybe IAMInstanceProfileSpecification)
-sflsIAMInstanceProfile = lens _sflsIAMInstanceProfile (\ s a -> s{_sflsIAMInstanceProfile = a});
-
--- | The ID of the AMI.
-sflsImageId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsImageId = lens _sflsImageId (\ s a -> s{_sflsImageId = a});
-
--- | Deprecated.
-sflsAddressingType :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsAddressingType = lens _sflsAddressingType (\ s a -> s{_sflsAddressingType = a});
-
--- | One or more block device mapping entries.
-sflsBlockDeviceMappings :: Lens' SpotFleetLaunchSpecification [BlockDeviceMapping]
-sflsBlockDeviceMappings = lens _sflsBlockDeviceMappings (\ s a -> s{_sflsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information.
-sflsPlacement :: Lens' SpotFleetLaunchSpecification (Maybe SpotPlacement)
-sflsPlacement = lens _sflsPlacement (\ s a -> s{_sflsPlacement = a});
-
-instance FromXML SpotFleetLaunchSpecification where
-        parseXML x
-          = SpotFleetLaunchSpecification' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "spotPrice")
-                <*> (x .@? "weightedCapacity")
-                <*> (x .@? "keyName")
-                <*>
-                (x .@? "networkInterfaceSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "ebsOptimized")
-                <*> (x .@? "userData")
-                <*> (x .@? "monitoring")
-                <*> (x .@? "iamInstanceProfile")
-                <*> (x .@? "imageId")
-                <*> (x .@? "addressingType")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "placement")
-
-instance Hashable SpotFleetLaunchSpecification
-
-instance NFData SpotFleetLaunchSpecification
-
-instance ToQuery SpotFleetLaunchSpecification where
-        toQuery SpotFleetLaunchSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "GroupSet" <$> _sflsSecurityGroups),
-               "SpotPrice" =: _sflsSpotPrice,
-               "WeightedCapacity" =: _sflsWeightedCapacity,
-               "KeyName" =: _sflsKeyName,
-               toQuery
-                 (toQueryList "NetworkInterfaceSet" <$>
-                    _sflsNetworkInterfaces),
-               "RamdiskId" =: _sflsRAMDiskId,
-               "SubnetId" =: _sflsSubnetId,
-               "KernelId" =: _sflsKernelId,
-               "InstanceType" =: _sflsInstanceType,
-               "EbsOptimized" =: _sflsEBSOptimized,
-               "UserData" =: _sflsUserData,
-               "Monitoring" =: _sflsMonitoring,
-               "IamInstanceProfile" =: _sflsIAMInstanceProfile,
-               "ImageId" =: _sflsImageId,
-               "AddressingType" =: _sflsAddressingType,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _sflsBlockDeviceMappings),
-               "Placement" =: _sflsPlacement]
-
--- | Describes whether monitoring is enabled.
---
---
---
--- /See:/ 'spotFleetMonitoring' smart constructor.
-newtype SpotFleetMonitoring = SpotFleetMonitoring'
-    { _sfmEnabled :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetMonitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfmEnabled' - Enables monitoring for the instance. Default: @false@
-spotFleetMonitoring
-    :: SpotFleetMonitoring
-spotFleetMonitoring =
-    SpotFleetMonitoring'
-    { _sfmEnabled = Nothing
-    }
-
--- | Enables monitoring for the instance. Default: @false@
-sfmEnabled :: Lens' SpotFleetMonitoring (Maybe Bool)
-sfmEnabled = lens _sfmEnabled (\ s a -> s{_sfmEnabled = a});
-
-instance FromXML SpotFleetMonitoring where
-        parseXML x
-          = SpotFleetMonitoring' <$> (x .@? "enabled")
-
-instance Hashable SpotFleetMonitoring
-
-instance NFData SpotFleetMonitoring
-
-instance ToQuery SpotFleetMonitoring where
-        toQuery SpotFleetMonitoring'{..}
-          = mconcat ["Enabled" =: _sfmEnabled]
-
--- | Describes a Spot fleet request.
---
---
---
--- /See:/ 'spotFleetRequestConfig' smart constructor.
-data SpotFleetRequestConfig = SpotFleetRequestConfig'
-    { _sfrcActivityStatus         :: !(Maybe ActivityStatus)
-    , _sfrcSpotFleetRequestId     :: !Text
-    , _sfrcSpotFleetRequestState  :: !BatchState
-    , _sfrcSpotFleetRequestConfig :: !SpotFleetRequestConfigData
-    , _sfrcCreateTime             :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetRequestConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfrcActivityStatus' - The progress of the Spot fleet request. If there is an error, the status is @error@ . After all bids are placed, the status is @pending_fulfillment@ . If the size of the fleet is equal to or greater than its target capacity, the status is @fulfilled@ . If the size of the fleet is decreased, the status is @pending_termination@ while Spot instances are terminating.
---
--- * 'sfrcSpotFleetRequestId' - The ID of the Spot fleet request.
---
--- * 'sfrcSpotFleetRequestState' - The state of the Spot fleet request.
---
--- * 'sfrcSpotFleetRequestConfig' - Information about the configuration of the Spot fleet request.
---
--- * 'sfrcCreateTime' - The creation date and time of the request.
-spotFleetRequestConfig
-    :: Text -- ^ 'sfrcSpotFleetRequestId'
-    -> BatchState -- ^ 'sfrcSpotFleetRequestState'
-    -> SpotFleetRequestConfigData -- ^ 'sfrcSpotFleetRequestConfig'
-    -> UTCTime -- ^ 'sfrcCreateTime'
-    -> SpotFleetRequestConfig
-spotFleetRequestConfig pSpotFleetRequestId_ pSpotFleetRequestState_ pSpotFleetRequestConfig_ pCreateTime_ =
-    SpotFleetRequestConfig'
-    { _sfrcActivityStatus = Nothing
-    , _sfrcSpotFleetRequestId = pSpotFleetRequestId_
-    , _sfrcSpotFleetRequestState = pSpotFleetRequestState_
-    , _sfrcSpotFleetRequestConfig = pSpotFleetRequestConfig_
-    , _sfrcCreateTime = _Time # pCreateTime_
-    }
-
--- | The progress of the Spot fleet request. If there is an error, the status is @error@ . After all bids are placed, the status is @pending_fulfillment@ . If the size of the fleet is equal to or greater than its target capacity, the status is @fulfilled@ . If the size of the fleet is decreased, the status is @pending_termination@ while Spot instances are terminating.
-sfrcActivityStatus :: Lens' SpotFleetRequestConfig (Maybe ActivityStatus)
-sfrcActivityStatus = lens _sfrcActivityStatus (\ s a -> s{_sfrcActivityStatus = a});
-
--- | The ID of the Spot fleet request.
-sfrcSpotFleetRequestId :: Lens' SpotFleetRequestConfig Text
-sfrcSpotFleetRequestId = lens _sfrcSpotFleetRequestId (\ s a -> s{_sfrcSpotFleetRequestId = a});
-
--- | The state of the Spot fleet request.
-sfrcSpotFleetRequestState :: Lens' SpotFleetRequestConfig BatchState
-sfrcSpotFleetRequestState = lens _sfrcSpotFleetRequestState (\ s a -> s{_sfrcSpotFleetRequestState = a});
-
--- | Information about the configuration of the Spot fleet request.
-sfrcSpotFleetRequestConfig :: Lens' SpotFleetRequestConfig SpotFleetRequestConfigData
-sfrcSpotFleetRequestConfig = lens _sfrcSpotFleetRequestConfig (\ s a -> s{_sfrcSpotFleetRequestConfig = a});
-
--- | The creation date and time of the request.
-sfrcCreateTime :: Lens' SpotFleetRequestConfig UTCTime
-sfrcCreateTime = lens _sfrcCreateTime (\ s a -> s{_sfrcCreateTime = a}) . _Time;
-
-instance FromXML SpotFleetRequestConfig where
-        parseXML x
-          = SpotFleetRequestConfig' <$>
-              (x .@? "activityStatus") <*>
-                (x .@ "spotFleetRequestId")
-                <*> (x .@ "spotFleetRequestState")
-                <*> (x .@ "spotFleetRequestConfig")
-                <*> (x .@ "createTime")
-
-instance Hashable SpotFleetRequestConfig
-
-instance NFData SpotFleetRequestConfig
-
--- | Describes the configuration of a Spot fleet request.
---
---
---
--- /See:/ 'spotFleetRequestConfigData' smart constructor.
-data SpotFleetRequestConfigData = SpotFleetRequestConfigData'
-    { _sfrcdClientToken                      :: !(Maybe Text)
-    , _sfrcdExcessCapacityTerminationPolicy  :: !(Maybe ExcessCapacityTerminationPolicy)
-    , _sfrcdValidUntil                       :: !(Maybe ISO8601)
-    , _sfrcdTerminateInstancesWithExpiration :: !(Maybe Bool)
-    , _sfrcdFulfilledCapacity                :: !(Maybe Double)
-    , _sfrcdType                             :: !(Maybe FleetType)
-    , _sfrcdValidFrom                        :: !(Maybe ISO8601)
-    , _sfrcdAllocationStrategy               :: !(Maybe AllocationStrategy)
-    , _sfrcdSpotPrice                        :: !Text
-    , _sfrcdTargetCapacity                   :: !Int
-    , _sfrcdIAMFleetRole                     :: !Text
-    , _sfrcdLaunchSpecifications             :: !(List1 SpotFleetLaunchSpecification)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetRequestConfigData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfrcdClientToken' - A unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
---
--- * 'sfrcdExcessCapacityTerminationPolicy' - Indicates whether running Spot instances should be terminated if the target capacity of the Spot fleet request is decreased below the current size of the Spot fleet.
---
--- * 'sfrcdValidUntil' - The end date and time of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). At this point, no new Spot instance requests are placed or enabled to fulfill the request.
---
--- * 'sfrcdTerminateInstancesWithExpiration' - Indicates whether running Spot instances should be terminated when the Spot fleet request expires.
---
--- * 'sfrcdFulfilledCapacity' - The number of units fulfilled by this request compared to the set target capacity.
---
--- * 'sfrcdType' - The type of request. Indicates whether the fleet will only @request@ the target capacity or also attempt to @maintain@ it. When you @request@ a certain target capacity, the fleet will only place the required bids. It will not attempt to replenish Spot instances if capacity is diminished, nor will it submit bids in alternative Spot pools if capacity is not available. When you want to @maintain@ a certain target capacity, fleet will place the required bids to meet this target capacity. It will also automatically replenish any interrupted instances. Default: @maintain@ .
---
--- * 'sfrcdValidFrom' - The start date and time of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). The default is to start fulfilling the request immediately.
---
--- * 'sfrcdAllocationStrategy' - Indicates how to allocate the target capacity across the Spot pools specified by the Spot fleet request. The default is @lowestPrice@ .
---
--- * 'sfrcdSpotPrice' - The bid price per unit hour.
---
--- * 'sfrcdTargetCapacity' - The number of units to request. You can choose to set the target capacity in terms of instances or a performance characteristic that is important to your application workload, such as vCPUs, memory, or I/O.
---
--- * 'sfrcdIAMFleetRole' - Grants the Spot fleet permission to terminate Spot instances on your behalf when you cancel its Spot fleet request using 'CancelSpotFleetRequests' or when the Spot fleet request expires, if you set @terminateInstancesWithExpiration@ .
---
--- * 'sfrcdLaunchSpecifications' - Information about the launch specifications for the Spot fleet request.
-spotFleetRequestConfigData
-    :: Text -- ^ 'sfrcdSpotPrice'
-    -> Int -- ^ 'sfrcdTargetCapacity'
-    -> Text -- ^ 'sfrcdIAMFleetRole'
-    -> NonEmpty SpotFleetLaunchSpecification -- ^ 'sfrcdLaunchSpecifications'
-    -> SpotFleetRequestConfigData
-spotFleetRequestConfigData pSpotPrice_ pTargetCapacity_ pIAMFleetRole_ pLaunchSpecifications_ =
-    SpotFleetRequestConfigData'
-    { _sfrcdClientToken = Nothing
-    , _sfrcdExcessCapacityTerminationPolicy = Nothing
-    , _sfrcdValidUntil = Nothing
-    , _sfrcdTerminateInstancesWithExpiration = Nothing
-    , _sfrcdFulfilledCapacity = Nothing
-    , _sfrcdType = Nothing
-    , _sfrcdValidFrom = Nothing
-    , _sfrcdAllocationStrategy = Nothing
-    , _sfrcdSpotPrice = pSpotPrice_
-    , _sfrcdTargetCapacity = pTargetCapacity_
-    , _sfrcdIAMFleetRole = pIAMFleetRole_
-    , _sfrcdLaunchSpecifications = _List1 # pLaunchSpecifications_
-    }
-
--- | A unique, case-sensitive identifier you provide to ensure idempotency of your listings. This helps avoid duplicate listings. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency> .
-sfrcdClientToken :: Lens' SpotFleetRequestConfigData (Maybe Text)
-sfrcdClientToken = lens _sfrcdClientToken (\ s a -> s{_sfrcdClientToken = a});
-
--- | Indicates whether running Spot instances should be terminated if the target capacity of the Spot fleet request is decreased below the current size of the Spot fleet.
-sfrcdExcessCapacityTerminationPolicy :: Lens' SpotFleetRequestConfigData (Maybe ExcessCapacityTerminationPolicy)
-sfrcdExcessCapacityTerminationPolicy = lens _sfrcdExcessCapacityTerminationPolicy (\ s a -> s{_sfrcdExcessCapacityTerminationPolicy = a});
-
--- | The end date and time of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). At this point, no new Spot instance requests are placed or enabled to fulfill the request.
-sfrcdValidUntil :: Lens' SpotFleetRequestConfigData (Maybe UTCTime)
-sfrcdValidUntil = lens _sfrcdValidUntil (\ s a -> s{_sfrcdValidUntil = a}) . mapping _Time;
-
--- | Indicates whether running Spot instances should be terminated when the Spot fleet request expires.
-sfrcdTerminateInstancesWithExpiration :: Lens' SpotFleetRequestConfigData (Maybe Bool)
-sfrcdTerminateInstancesWithExpiration = lens _sfrcdTerminateInstancesWithExpiration (\ s a -> s{_sfrcdTerminateInstancesWithExpiration = a});
-
--- | The number of units fulfilled by this request compared to the set target capacity.
-sfrcdFulfilledCapacity :: Lens' SpotFleetRequestConfigData (Maybe Double)
-sfrcdFulfilledCapacity = lens _sfrcdFulfilledCapacity (\ s a -> s{_sfrcdFulfilledCapacity = a});
-
--- | The type of request. Indicates whether the fleet will only @request@ the target capacity or also attempt to @maintain@ it. When you @request@ a certain target capacity, the fleet will only place the required bids. It will not attempt to replenish Spot instances if capacity is diminished, nor will it submit bids in alternative Spot pools if capacity is not available. When you want to @maintain@ a certain target capacity, fleet will place the required bids to meet this target capacity. It will also automatically replenish any interrupted instances. Default: @maintain@ .
-sfrcdType :: Lens' SpotFleetRequestConfigData (Maybe FleetType)
-sfrcdType = lens _sfrcdType (\ s a -> s{_sfrcdType = a});
-
--- | The start date and time of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). The default is to start fulfilling the request immediately.
-sfrcdValidFrom :: Lens' SpotFleetRequestConfigData (Maybe UTCTime)
-sfrcdValidFrom = lens _sfrcdValidFrom (\ s a -> s{_sfrcdValidFrom = a}) . mapping _Time;
-
--- | Indicates how to allocate the target capacity across the Spot pools specified by the Spot fleet request. The default is @lowestPrice@ .
-sfrcdAllocationStrategy :: Lens' SpotFleetRequestConfigData (Maybe AllocationStrategy)
-sfrcdAllocationStrategy = lens _sfrcdAllocationStrategy (\ s a -> s{_sfrcdAllocationStrategy = a});
-
--- | The bid price per unit hour.
-sfrcdSpotPrice :: Lens' SpotFleetRequestConfigData Text
-sfrcdSpotPrice = lens _sfrcdSpotPrice (\ s a -> s{_sfrcdSpotPrice = a});
-
--- | The number of units to request. You can choose to set the target capacity in terms of instances or a performance characteristic that is important to your application workload, such as vCPUs, memory, or I/O.
-sfrcdTargetCapacity :: Lens' SpotFleetRequestConfigData Int
-sfrcdTargetCapacity = lens _sfrcdTargetCapacity (\ s a -> s{_sfrcdTargetCapacity = a});
-
--- | Grants the Spot fleet permission to terminate Spot instances on your behalf when you cancel its Spot fleet request using 'CancelSpotFleetRequests' or when the Spot fleet request expires, if you set @terminateInstancesWithExpiration@ .
-sfrcdIAMFleetRole :: Lens' SpotFleetRequestConfigData Text
-sfrcdIAMFleetRole = lens _sfrcdIAMFleetRole (\ s a -> s{_sfrcdIAMFleetRole = a});
-
--- | Information about the launch specifications for the Spot fleet request.
-sfrcdLaunchSpecifications :: Lens' SpotFleetRequestConfigData (NonEmpty SpotFleetLaunchSpecification)
-sfrcdLaunchSpecifications = lens _sfrcdLaunchSpecifications (\ s a -> s{_sfrcdLaunchSpecifications = a}) . _List1;
-
-instance FromXML SpotFleetRequestConfigData where
-        parseXML x
-          = SpotFleetRequestConfigData' <$>
-              (x .@? "clientToken") <*>
-                (x .@? "excessCapacityTerminationPolicy")
-                <*> (x .@? "validUntil")
-                <*> (x .@? "terminateInstancesWithExpiration")
-                <*> (x .@? "fulfilledCapacity")
-                <*> (x .@? "type")
-                <*> (x .@? "validFrom")
-                <*> (x .@? "allocationStrategy")
-                <*> (x .@ "spotPrice")
-                <*> (x .@ "targetCapacity")
-                <*> (x .@ "iamFleetRole")
-                <*>
-                (x .@? "launchSpecifications" .!@ mempty >>=
-                   parseXMLList1 "item")
-
-instance Hashable SpotFleetRequestConfigData
-
-instance NFData SpotFleetRequestConfigData
-
-instance ToQuery SpotFleetRequestConfigData where
-        toQuery SpotFleetRequestConfigData'{..}
-          = mconcat
-              ["ClientToken" =: _sfrcdClientToken,
-               "ExcessCapacityTerminationPolicy" =:
-                 _sfrcdExcessCapacityTerminationPolicy,
-               "ValidUntil" =: _sfrcdValidUntil,
-               "TerminateInstancesWithExpiration" =:
-                 _sfrcdTerminateInstancesWithExpiration,
-               "FulfilledCapacity" =: _sfrcdFulfilledCapacity,
-               "Type" =: _sfrcdType, "ValidFrom" =: _sfrcdValidFrom,
-               "AllocationStrategy" =: _sfrcdAllocationStrategy,
-               "SpotPrice" =: _sfrcdSpotPrice,
-               "TargetCapacity" =: _sfrcdTargetCapacity,
-               "IamFleetRole" =: _sfrcdIAMFleetRole,
-               toQueryList "LaunchSpecifications"
-                 _sfrcdLaunchSpecifications]
-
--- | Describes a Spot instance request.
---
---
---
--- /See:/ 'spotInstanceRequest' smart constructor.
-data SpotInstanceRequest = SpotInstanceRequest'
-    { _sirInstanceId               :: !(Maybe Text)
-    , _sirStatus                   :: !(Maybe SpotInstanceStatus)
-    , _sirState                    :: !(Maybe SpotInstanceState)
-    , _sirActualBlockHourlyPrice   :: !(Maybe Text)
-    , _sirBlockDurationMinutes     :: !(Maybe Int)
-    , _sirProductDescription       :: !(Maybe RIProductDescription)
-    , _sirSpotPrice                :: !(Maybe Text)
-    , _sirLaunchSpecification      :: !(Maybe LaunchSpecification)
-    , _sirAvailabilityZoneGroup    :: !(Maybe Text)
-    , _sirLaunchedAvailabilityZone :: !(Maybe Text)
-    , _sirValidUntil               :: !(Maybe ISO8601)
-    , _sirLaunchGroup              :: !(Maybe Text)
-    , _sirFault                    :: !(Maybe SpotInstanceStateFault)
-    , _sirSpotInstanceRequestId    :: !(Maybe Text)
-    , _sirType                     :: !(Maybe SpotInstanceType)
-    , _sirValidFrom                :: !(Maybe ISO8601)
-    , _sirCreateTime               :: !(Maybe ISO8601)
-    , _sirTags                     :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotInstanceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sirInstanceId' - The instance ID, if an instance has been launched to fulfill the Spot instance request.
---
--- * 'sirStatus' - The status code and status message describing the Spot instance request.
---
--- * 'sirState' - The state of the Spot instance request. Spot bid status information can help you track your Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html Spot Bid Status> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'sirActualBlockHourlyPrice' - If you specified a duration and your Spot instance request was fulfilled, this is the fixed hourly price in effect for the Spot instance while it runs.
---
--- * 'sirBlockDurationMinutes' - The duration for the Spot instance, in minutes.
---
--- * 'sirProductDescription' - The product description associated with the Spot instance.
---
--- * 'sirSpotPrice' - The maximum hourly price (bid) for the Spot instance launched to fulfill the request.
---
--- * 'sirLaunchSpecification' - Additional information for launching instances.
---
--- * 'sirAvailabilityZoneGroup' - The Availability Zone group. If you specify the same Availability Zone group for all Spot instance requests, all Spot instances are launched in the same Availability Zone.
---
--- * 'sirLaunchedAvailabilityZone' - The Availability Zone in which the bid is launched.
---
--- * 'sirValidUntil' - The end date of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). If this is a one-time request, it remains active until all instances launch, the request is canceled, or this date is reached. If the request is persistent, it remains active until it is canceled or this date is reached.
---
--- * 'sirLaunchGroup' - The instance launch group. Launch groups are Spot instances that launch together and terminate together.
---
--- * 'sirFault' - The fault codes for the Spot instance request, if any.
---
--- * 'sirSpotInstanceRequestId' - The ID of the Spot instance request.
---
--- * 'sirType' - The Spot instance request type.
---
--- * 'sirValidFrom' - The start date of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). The request becomes active at this date and time.
---
--- * 'sirCreateTime' - The date and time when the Spot instance request was created, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
---
--- * 'sirTags' - Any tags assigned to the resource.
-spotInstanceRequest
-    :: SpotInstanceRequest
-spotInstanceRequest =
-    SpotInstanceRequest'
-    { _sirInstanceId = Nothing
-    , _sirStatus = Nothing
-    , _sirState = Nothing
-    , _sirActualBlockHourlyPrice = Nothing
-    , _sirBlockDurationMinutes = Nothing
-    , _sirProductDescription = Nothing
-    , _sirSpotPrice = Nothing
-    , _sirLaunchSpecification = Nothing
-    , _sirAvailabilityZoneGroup = Nothing
-    , _sirLaunchedAvailabilityZone = Nothing
-    , _sirValidUntil = Nothing
-    , _sirLaunchGroup = Nothing
-    , _sirFault = Nothing
-    , _sirSpotInstanceRequestId = Nothing
-    , _sirType = Nothing
-    , _sirValidFrom = Nothing
-    , _sirCreateTime = Nothing
-    , _sirTags = Nothing
-    }
-
--- | The instance ID, if an instance has been launched to fulfill the Spot instance request.
-sirInstanceId :: Lens' SpotInstanceRequest (Maybe Text)
-sirInstanceId = lens _sirInstanceId (\ s a -> s{_sirInstanceId = a});
-
--- | The status code and status message describing the Spot instance request.
-sirStatus :: Lens' SpotInstanceRequest (Maybe SpotInstanceStatus)
-sirStatus = lens _sirStatus (\ s a -> s{_sirStatus = a});
-
--- | The state of the Spot instance request. Spot bid status information can help you track your Spot instance requests. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html Spot Bid Status> in the /Amazon Elastic Compute Cloud User Guide/ .
-sirState :: Lens' SpotInstanceRequest (Maybe SpotInstanceState)
-sirState = lens _sirState (\ s a -> s{_sirState = a});
-
--- | If you specified a duration and your Spot instance request was fulfilled, this is the fixed hourly price in effect for the Spot instance while it runs.
-sirActualBlockHourlyPrice :: Lens' SpotInstanceRequest (Maybe Text)
-sirActualBlockHourlyPrice = lens _sirActualBlockHourlyPrice (\ s a -> s{_sirActualBlockHourlyPrice = a});
-
--- | The duration for the Spot instance, in minutes.
-sirBlockDurationMinutes :: Lens' SpotInstanceRequest (Maybe Int)
-sirBlockDurationMinutes = lens _sirBlockDurationMinutes (\ s a -> s{_sirBlockDurationMinutes = a});
-
--- | The product description associated with the Spot instance.
-sirProductDescription :: Lens' SpotInstanceRequest (Maybe RIProductDescription)
-sirProductDescription = lens _sirProductDescription (\ s a -> s{_sirProductDescription = a});
-
--- | The maximum hourly price (bid) for the Spot instance launched to fulfill the request.
-sirSpotPrice :: Lens' SpotInstanceRequest (Maybe Text)
-sirSpotPrice = lens _sirSpotPrice (\ s a -> s{_sirSpotPrice = a});
-
--- | Additional information for launching instances.
-sirLaunchSpecification :: Lens' SpotInstanceRequest (Maybe LaunchSpecification)
-sirLaunchSpecification = lens _sirLaunchSpecification (\ s a -> s{_sirLaunchSpecification = a});
-
--- | The Availability Zone group. If you specify the same Availability Zone group for all Spot instance requests, all Spot instances are launched in the same Availability Zone.
-sirAvailabilityZoneGroup :: Lens' SpotInstanceRequest (Maybe Text)
-sirAvailabilityZoneGroup = lens _sirAvailabilityZoneGroup (\ s a -> s{_sirAvailabilityZoneGroup = a});
-
--- | The Availability Zone in which the bid is launched.
-sirLaunchedAvailabilityZone :: Lens' SpotInstanceRequest (Maybe Text)
-sirLaunchedAvailabilityZone = lens _sirLaunchedAvailabilityZone (\ s a -> s{_sirLaunchedAvailabilityZone = a});
-
--- | The end date of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). If this is a one-time request, it remains active until all instances launch, the request is canceled, or this date is reached. If the request is persistent, it remains active until it is canceled or this date is reached.
-sirValidUntil :: Lens' SpotInstanceRequest (Maybe UTCTime)
-sirValidUntil = lens _sirValidUntil (\ s a -> s{_sirValidUntil = a}) . mapping _Time;
-
--- | The instance launch group. Launch groups are Spot instances that launch together and terminate together.
-sirLaunchGroup :: Lens' SpotInstanceRequest (Maybe Text)
-sirLaunchGroup = lens _sirLaunchGroup (\ s a -> s{_sirLaunchGroup = a});
-
--- | The fault codes for the Spot instance request, if any.
-sirFault :: Lens' SpotInstanceRequest (Maybe SpotInstanceStateFault)
-sirFault = lens _sirFault (\ s a -> s{_sirFault = a});
-
--- | The ID of the Spot instance request.
-sirSpotInstanceRequestId :: Lens' SpotInstanceRequest (Maybe Text)
-sirSpotInstanceRequestId = lens _sirSpotInstanceRequestId (\ s a -> s{_sirSpotInstanceRequestId = a});
-
--- | The Spot instance request type.
-sirType :: Lens' SpotInstanceRequest (Maybe SpotInstanceType)
-sirType = lens _sirType (\ s a -> s{_sirType = a});
-
--- | The start date of the request, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z). The request becomes active at this date and time.
-sirValidFrom :: Lens' SpotInstanceRequest (Maybe UTCTime)
-sirValidFrom = lens _sirValidFrom (\ s a -> s{_sirValidFrom = a}) . mapping _Time;
-
--- | The date and time when the Spot instance request was created, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-sirCreateTime :: Lens' SpotInstanceRequest (Maybe UTCTime)
-sirCreateTime = lens _sirCreateTime (\ s a -> s{_sirCreateTime = a}) . mapping _Time;
-
--- | Any tags assigned to the resource.
-sirTags :: Lens' SpotInstanceRequest [Tag]
-sirTags = lens _sirTags (\ s a -> s{_sirTags = a}) . _Default . _Coerce;
-
-instance FromXML SpotInstanceRequest where
-        parseXML x
-          = SpotInstanceRequest' <$>
-              (x .@? "instanceId") <*> (x .@? "status") <*>
-                (x .@? "state")
-                <*> (x .@? "actualBlockHourlyPrice")
-                <*> (x .@? "blockDurationMinutes")
-                <*> (x .@? "productDescription")
-                <*> (x .@? "spotPrice")
-                <*> (x .@? "launchSpecification")
-                <*> (x .@? "availabilityZoneGroup")
-                <*> (x .@? "launchedAvailabilityZone")
-                <*> (x .@? "validUntil")
-                <*> (x .@? "launchGroup")
-                <*> (x .@? "fault")
-                <*> (x .@? "spotInstanceRequestId")
-                <*> (x .@? "type")
-                <*> (x .@? "validFrom")
-                <*> (x .@? "createTime")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable SpotInstanceRequest
-
-instance NFData SpotInstanceRequest
-
--- | Describes a Spot instance state change.
---
---
---
--- /See:/ 'spotInstanceStateFault' smart constructor.
-data SpotInstanceStateFault = SpotInstanceStateFault'
-    { _sisfCode    :: !(Maybe Text)
-    , _sisfMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotInstanceStateFault' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sisfCode' - The reason code for the Spot instance state change.
---
--- * 'sisfMessage' - The message for the Spot instance state change.
-spotInstanceStateFault
-    :: SpotInstanceStateFault
-spotInstanceStateFault =
-    SpotInstanceStateFault'
-    { _sisfCode = Nothing
-    , _sisfMessage = Nothing
-    }
-
--- | The reason code for the Spot instance state change.
-sisfCode :: Lens' SpotInstanceStateFault (Maybe Text)
-sisfCode = lens _sisfCode (\ s a -> s{_sisfCode = a});
-
--- | The message for the Spot instance state change.
-sisfMessage :: Lens' SpotInstanceStateFault (Maybe Text)
-sisfMessage = lens _sisfMessage (\ s a -> s{_sisfMessage = a});
-
-instance FromXML SpotInstanceStateFault where
-        parseXML x
-          = SpotInstanceStateFault' <$>
-              (x .@? "code") <*> (x .@? "message")
-
-instance Hashable SpotInstanceStateFault
-
-instance NFData SpotInstanceStateFault
-
--- | Describes the status of a Spot instance request.
---
---
---
--- /See:/ 'spotInstanceStatus' smart constructor.
-data SpotInstanceStatus = SpotInstanceStatus'
-    { _sisUpdateTime :: !(Maybe ISO8601)
-    , _sisCode       :: !(Maybe Text)
-    , _sisMessage    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotInstanceStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sisUpdateTime' - The date and time of the most recent status update, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
---
--- * 'sisCode' - The status code. For a list of status codes, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand Spot Bid Status Codes> in the /Amazon Elastic Compute Cloud User Guide/ .
---
--- * 'sisMessage' - The description for the status code.
-spotInstanceStatus
-    :: SpotInstanceStatus
-spotInstanceStatus =
-    SpotInstanceStatus'
-    { _sisUpdateTime = Nothing
-    , _sisCode = Nothing
-    , _sisMessage = Nothing
-    }
-
--- | The date and time of the most recent status update, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-sisUpdateTime :: Lens' SpotInstanceStatus (Maybe UTCTime)
-sisUpdateTime = lens _sisUpdateTime (\ s a -> s{_sisUpdateTime = a}) . mapping _Time;
-
--- | The status code. For a list of status codes, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand Spot Bid Status Codes> in the /Amazon Elastic Compute Cloud User Guide/ .
-sisCode :: Lens' SpotInstanceStatus (Maybe Text)
-sisCode = lens _sisCode (\ s a -> s{_sisCode = a});
-
--- | The description for the status code.
-sisMessage :: Lens' SpotInstanceStatus (Maybe Text)
-sisMessage = lens _sisMessage (\ s a -> s{_sisMessage = a});
-
-instance FromXML SpotInstanceStatus where
-        parseXML x
-          = SpotInstanceStatus' <$>
-              (x .@? "updateTime") <*> (x .@? "code") <*>
-                (x .@? "message")
-
-instance Hashable SpotInstanceStatus
-
-instance NFData SpotInstanceStatus
-
--- | Describes Spot instance placement.
---
---
---
--- /See:/ 'spotPlacement' smart constructor.
-data SpotPlacement = SpotPlacement'
-    { _spAvailabilityZone :: !(Maybe Text)
-    , _spGroupName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotPlacement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'spAvailabilityZone' - The Availability Zone. [Spot fleet only] To specify multiple Availability Zones, separate them using commas; for example, "us-west-2a, us-west-2b".
---
--- * 'spGroupName' - The name of the placement group (for cluster instances).
-spotPlacement
-    :: SpotPlacement
-spotPlacement =
-    SpotPlacement'
-    { _spAvailabilityZone = Nothing
-    , _spGroupName = Nothing
-    }
-
--- | The Availability Zone. [Spot fleet only] To specify multiple Availability Zones, separate them using commas; for example, "us-west-2a, us-west-2b".
-spAvailabilityZone :: Lens' SpotPlacement (Maybe Text)
-spAvailabilityZone = lens _spAvailabilityZone (\ s a -> s{_spAvailabilityZone = a});
-
--- | The name of the placement group (for cluster instances).
-spGroupName :: Lens' SpotPlacement (Maybe Text)
-spGroupName = lens _spGroupName (\ s a -> s{_spGroupName = a});
-
-instance FromXML SpotPlacement where
-        parseXML x
-          = SpotPlacement' <$>
-              (x .@? "availabilityZone") <*> (x .@? "groupName")
-
-instance Hashable SpotPlacement
-
-instance NFData SpotPlacement
-
-instance ToQuery SpotPlacement where
-        toQuery SpotPlacement'{..}
-          = mconcat
-              ["AvailabilityZone" =: _spAvailabilityZone,
-               "GroupName" =: _spGroupName]
-
--- | Describes the maximum hourly price (bid) for any Spot instance launched to fulfill the request.
---
---
---
--- /See:/ 'spotPrice' smart constructor.
-data SpotPrice = SpotPrice'
-    { _sProductDescription :: !(Maybe RIProductDescription)
-    , _sSpotPrice          :: !(Maybe Text)
-    , _sInstanceType       :: !(Maybe InstanceType)
-    , _sAvailabilityZone   :: !(Maybe Text)
-    , _sTimestamp          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sProductDescription' - A general description of the AMI.
---
--- * 'sSpotPrice' - The maximum price (bid) that you are willing to pay for a Spot instance.
---
--- * 'sInstanceType' - The instance type. Note that T2 and HS1 instance types are not supported.
---
--- * 'sAvailabilityZone' - The Availability Zone.
---
--- * 'sTimestamp' - The date and time the request was created, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-spotPrice
-    :: SpotPrice
-spotPrice =
-    SpotPrice'
-    { _sProductDescription = Nothing
-    , _sSpotPrice = Nothing
-    , _sInstanceType = Nothing
-    , _sAvailabilityZone = Nothing
-    , _sTimestamp = Nothing
-    }
-
--- | A general description of the AMI.
-sProductDescription :: Lens' SpotPrice (Maybe RIProductDescription)
-sProductDescription = lens _sProductDescription (\ s a -> s{_sProductDescription = a});
-
--- | The maximum price (bid) that you are willing to pay for a Spot instance.
-sSpotPrice :: Lens' SpotPrice (Maybe Text)
-sSpotPrice = lens _sSpotPrice (\ s a -> s{_sSpotPrice = a});
-
--- | The instance type. Note that T2 and HS1 instance types are not supported.
-sInstanceType :: Lens' SpotPrice (Maybe InstanceType)
-sInstanceType = lens _sInstanceType (\ s a -> s{_sInstanceType = a});
-
--- | The Availability Zone.
-sAvailabilityZone :: Lens' SpotPrice (Maybe Text)
-sAvailabilityZone = lens _sAvailabilityZone (\ s a -> s{_sAvailabilityZone = a});
-
--- | The date and time the request was created, in UTC format (for example, /YYYY/ -/MM/ -/DD/ T/HH/ :/MM/ :/SS/ Z).
-sTimestamp :: Lens' SpotPrice (Maybe UTCTime)
-sTimestamp = lens _sTimestamp (\ s a -> s{_sTimestamp = a}) . mapping _Time;
-
-instance FromXML SpotPrice where
-        parseXML x
-          = SpotPrice' <$>
-              (x .@? "productDescription") <*> (x .@? "spotPrice")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "timestamp")
-
-instance Hashable SpotPrice
-
-instance NFData SpotPrice
-
--- | Describes a stale rule in a security group.
---
---
---
--- /See:/ 'staleIPPermission' smart constructor.
-data StaleIPPermission = StaleIPPermission'
-    { _sipFromPort         :: !(Maybe Int)
-    , _sipUserIdGroupPairs :: !(Maybe [UserIdGroupPair])
-    , _sipPrefixListIds    :: !(Maybe [Text])
-    , _sipIPProtocol       :: !(Maybe Text)
-    , _sipToPort           :: !(Maybe Int)
-    , _sipIPRanges         :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StaleIPPermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sipFromPort' - The start of the port range for the TCP and UDP protocols, or an ICMP type number. A value of @-1@ indicates all ICMP types.
---
--- * 'sipUserIdGroupPairs' - One or more security group pairs. Returns the ID of the referenced security group and VPC, and the ID and status of the VPC peering connection.
---
--- * 'sipPrefixListIds' - One or more prefix list IDs for an AWS service. Not applicable for stale security group rules.
---
--- * 'sipIPProtocol' - The IP protocol name (for @tcp@ , @udp@ , and @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers)> .
---
--- * 'sipToPort' - The end of the port range for the TCP and UDP protocols, or an ICMP type number. A value of @-1@ indicates all ICMP types.
---
--- * 'sipIPRanges' - One or more IP ranges. Not applicable for stale security group rules.
-staleIPPermission
-    :: StaleIPPermission
-staleIPPermission =
-    StaleIPPermission'
-    { _sipFromPort = Nothing
-    , _sipUserIdGroupPairs = Nothing
-    , _sipPrefixListIds = Nothing
-    , _sipIPProtocol = Nothing
-    , _sipToPort = Nothing
-    , _sipIPRanges = Nothing
-    }
-
--- | The start of the port range for the TCP and UDP protocols, or an ICMP type number. A value of @-1@ indicates all ICMP types.
-sipFromPort :: Lens' StaleIPPermission (Maybe Int)
-sipFromPort = lens _sipFromPort (\ s a -> s{_sipFromPort = a});
-
--- | One or more security group pairs. Returns the ID of the referenced security group and VPC, and the ID and status of the VPC peering connection.
-sipUserIdGroupPairs :: Lens' StaleIPPermission [UserIdGroupPair]
-sipUserIdGroupPairs = lens _sipUserIdGroupPairs (\ s a -> s{_sipUserIdGroupPairs = a}) . _Default . _Coerce;
-
--- | One or more prefix list IDs for an AWS service. Not applicable for stale security group rules.
-sipPrefixListIds :: Lens' StaleIPPermission [Text]
-sipPrefixListIds = lens _sipPrefixListIds (\ s a -> s{_sipPrefixListIds = a}) . _Default . _Coerce;
-
--- | The IP protocol name (for @tcp@ , @udp@ , and @icmp@ ) or number (see <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers)> .
-sipIPProtocol :: Lens' StaleIPPermission (Maybe Text)
-sipIPProtocol = lens _sipIPProtocol (\ s a -> s{_sipIPProtocol = a});
-
--- | The end of the port range for the TCP and UDP protocols, or an ICMP type number. A value of @-1@ indicates all ICMP types.
-sipToPort :: Lens' StaleIPPermission (Maybe Int)
-sipToPort = lens _sipToPort (\ s a -> s{_sipToPort = a});
-
--- | One or more IP ranges. Not applicable for stale security group rules.
-sipIPRanges :: Lens' StaleIPPermission [Text]
-sipIPRanges = lens _sipIPRanges (\ s a -> s{_sipIPRanges = a}) . _Default . _Coerce;
-
-instance FromXML StaleIPPermission where
-        parseXML x
-          = StaleIPPermission' <$>
-              (x .@? "fromPort") <*>
-                (x .@? "groups" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "prefixListIds" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ipProtocol")
-                <*> (x .@? "toPort")
-                <*>
-                (x .@? "ipRanges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable StaleIPPermission
-
-instance NFData StaleIPPermission
-
--- | Describes a stale security group (a security group that contains stale rules).
---
---
---
--- /See:/ 'staleSecurityGroup' smart constructor.
-data StaleSecurityGroup = StaleSecurityGroup'
-    { _ssgVPCId                    :: !(Maybe Text)
-    , _ssgGroupName                :: !(Maybe Text)
-    , _ssgStaleIPPermissionsEgress :: !(Maybe [StaleIPPermission])
-    , _ssgStaleIPPermissions       :: !(Maybe [StaleIPPermission])
-    , _ssgDescription              :: !(Maybe Text)
-    , _ssgGroupId                  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StaleSecurityGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssgVPCId' - The ID of the VPC for the security group.
---
--- * 'ssgGroupName' - The name of the security group.
---
--- * 'ssgStaleIPPermissionsEgress' - Information about the stale outbound rules in the security group.
---
--- * 'ssgStaleIPPermissions' - Information about the stale inbound rules in the security group.
---
--- * 'ssgDescription' - The description of the security group.
---
--- * 'ssgGroupId' - The ID of the security group.
-staleSecurityGroup
-    :: Text -- ^ 'ssgGroupId'
-    -> StaleSecurityGroup
-staleSecurityGroup pGroupId_ =
-    StaleSecurityGroup'
-    { _ssgVPCId = Nothing
-    , _ssgGroupName = Nothing
-    , _ssgStaleIPPermissionsEgress = Nothing
-    , _ssgStaleIPPermissions = Nothing
-    , _ssgDescription = Nothing
-    , _ssgGroupId = pGroupId_
-    }
-
--- | The ID of the VPC for the security group.
-ssgVPCId :: Lens' StaleSecurityGroup (Maybe Text)
-ssgVPCId = lens _ssgVPCId (\ s a -> s{_ssgVPCId = a});
-
--- | The name of the security group.
-ssgGroupName :: Lens' StaleSecurityGroup (Maybe Text)
-ssgGroupName = lens _ssgGroupName (\ s a -> s{_ssgGroupName = a});
-
--- | Information about the stale outbound rules in the security group.
-ssgStaleIPPermissionsEgress :: Lens' StaleSecurityGroup [StaleIPPermission]
-ssgStaleIPPermissionsEgress = lens _ssgStaleIPPermissionsEgress (\ s a -> s{_ssgStaleIPPermissionsEgress = a}) . _Default . _Coerce;
-
--- | Information about the stale inbound rules in the security group.
-ssgStaleIPPermissions :: Lens' StaleSecurityGroup [StaleIPPermission]
-ssgStaleIPPermissions = lens _ssgStaleIPPermissions (\ s a -> s{_ssgStaleIPPermissions = a}) . _Default . _Coerce;
-
--- | The description of the security group.
-ssgDescription :: Lens' StaleSecurityGroup (Maybe Text)
-ssgDescription = lens _ssgDescription (\ s a -> s{_ssgDescription = a});
-
--- | The ID of the security group.
-ssgGroupId :: Lens' StaleSecurityGroup Text
-ssgGroupId = lens _ssgGroupId (\ s a -> s{_ssgGroupId = a});
-
-instance FromXML StaleSecurityGroup where
-        parseXML x
-          = StaleSecurityGroup' <$>
-              (x .@? "vpcId") <*> (x .@? "groupName") <*>
-                (x .@? "staleIpPermissionsEgress" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "staleIpPermissions" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "description")
-                <*> (x .@ "groupId")
-
-instance Hashable StaleSecurityGroup
-
-instance NFData StaleSecurityGroup
-
--- | Describes a state change.
---
---
---
--- /See:/ 'stateReason' smart constructor.
-data StateReason = StateReason'
-    { _srCode    :: !(Maybe Text)
-    , _srMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StateReason' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srCode' - The reason code for the state change.
---
--- * 'srMessage' - The message for the state change.     * @Server.SpotInstanceTermination@ : A Spot instance was terminated due to an increase in the market price.     * @Server.InternalError@ : An internal error occurred during instance launch, resulting in termination.     * @Server.InsufficientInstanceCapacity@ : There was insufficient instance capacity to satisfy the launch request.     * @Client.InternalError@ : A client error caused the instance to terminate on launch.     * @Client.InstanceInitiatedShutdown@ : The instance was shut down using the @shutdown -h@ command from the instance.     * @Client.UserInitiatedShutdown@ : The instance was shut down using the Amazon EC2 API.     * @Client.VolumeLimitExceeded@ : The limit on the number of EBS volumes or total storage was exceeded. Decrease usage or request an increase in your limits.     * @Client.InvalidSnapshot.NotFound@ : The specified snapshot was not found.
-stateReason
-    :: StateReason
-stateReason =
-    StateReason'
-    { _srCode = Nothing
-    , _srMessage = Nothing
-    }
-
--- | The reason code for the state change.
-srCode :: Lens' StateReason (Maybe Text)
-srCode = lens _srCode (\ s a -> s{_srCode = a});
-
--- | The message for the state change.     * @Server.SpotInstanceTermination@ : A Spot instance was terminated due to an increase in the market price.     * @Server.InternalError@ : An internal error occurred during instance launch, resulting in termination.     * @Server.InsufficientInstanceCapacity@ : There was insufficient instance capacity to satisfy the launch request.     * @Client.InternalError@ : A client error caused the instance to terminate on launch.     * @Client.InstanceInitiatedShutdown@ : The instance was shut down using the @shutdown -h@ command from the instance.     * @Client.UserInitiatedShutdown@ : The instance was shut down using the Amazon EC2 API.     * @Client.VolumeLimitExceeded@ : The limit on the number of EBS volumes or total storage was exceeded. Decrease usage or request an increase in your limits.     * @Client.InvalidSnapshot.NotFound@ : The specified snapshot was not found.
-srMessage :: Lens' StateReason (Maybe Text)
-srMessage = lens _srMessage (\ s a -> s{_srMessage = a});
-
-instance FromXML StateReason where
-        parseXML x
-          = StateReason' <$>
-              (x .@? "code") <*> (x .@? "message")
-
-instance Hashable StateReason
-
-instance NFData StateReason
-
--- | Describes the storage location for an instance store-backed AMI.
---
---
---
--- /See:/ 'storage' smart constructor.
-newtype Storage = Storage'
-    { _sS3 :: Maybe S3Storage
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Storage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sS3' - An Amazon S3 storage location.
-storage
-    :: Storage
-storage =
-    Storage'
-    { _sS3 = Nothing
-    }
-
--- | An Amazon S3 storage location.
-sS3 :: Lens' Storage (Maybe S3Storage)
-sS3 = lens _sS3 (\ s a -> s{_sS3 = a});
-
-instance FromXML Storage where
-        parseXML x = Storage' <$> (x .@? "S3")
-
-instance Hashable Storage
-
-instance NFData Storage
-
-instance ToQuery Storage where
-        toQuery Storage'{..} = mconcat ["S3" =: _sS3]
-
--- | Describes a subnet.
---
---
---
--- /See:/ 'subnet' smart constructor.
-data Subnet = Subnet'
-    { _subIPv6CidrBlockAssociationSet :: !(Maybe [SubnetIPv6CidrBlockAssociation])
-    , _subAssignIPv6AddressOnCreation :: !(Maybe Bool)
-    , _subMapPublicIPOnLaunch         :: !(Maybe Bool)
-    , _subDefaultForAz                :: !(Maybe Bool)
-    , _subTags                        :: !(Maybe [Tag])
-    , _subAvailabilityZone            :: !Text
-    , _subAvailableIPAddressCount     :: !Int
-    , _subCidrBlock                   :: !Text
-    , _subState                       :: !SubnetState
-    , _subSubnetId                    :: !Text
-    , _subVPCId                       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Subnet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'subIPv6CidrBlockAssociationSet' - Information about the IPv6 CIDR blocks associated with the subnet.
---
--- * 'subAssignIPv6AddressOnCreation' - Indicates whether a network interface created in this subnet (including a network interface created by 'RunInstances' ) receives an IPv6 address.
---
--- * 'subMapPublicIPOnLaunch' - Indicates whether instances launched in this subnet receive a public IPv4 address.
---
--- * 'subDefaultForAz' - Indicates whether this is the default subnet for the Availability Zone.
---
--- * 'subTags' - Any tags assigned to the subnet.
---
--- * 'subAvailabilityZone' - The Availability Zone of the subnet.
---
--- * 'subAvailableIPAddressCount' - The number of unused private IPv4 addresses in the subnet. Note that the IPv4 addresses for any stopped instances are considered unavailable.
---
--- * 'subCidrBlock' - The IPv4 CIDR block assigned to the subnet.
---
--- * 'subState' - The current state of the subnet.
---
--- * 'subSubnetId' - The ID of the subnet.
---
--- * 'subVPCId' - The ID of the VPC the subnet is in.
-subnet
-    :: Text -- ^ 'subAvailabilityZone'
-    -> Int -- ^ 'subAvailableIPAddressCount'
-    -> Text -- ^ 'subCidrBlock'
-    -> SubnetState -- ^ 'subState'
-    -> Text -- ^ 'subSubnetId'
-    -> Text -- ^ 'subVPCId'
-    -> Subnet
-subnet pAvailabilityZone_ pAvailableIPAddressCount_ pCidrBlock_ pState_ pSubnetId_ pVPCId_ =
-    Subnet'
-    { _subIPv6CidrBlockAssociationSet = Nothing
-    , _subAssignIPv6AddressOnCreation = Nothing
-    , _subMapPublicIPOnLaunch = Nothing
-    , _subDefaultForAz = Nothing
-    , _subTags = Nothing
-    , _subAvailabilityZone = pAvailabilityZone_
-    , _subAvailableIPAddressCount = pAvailableIPAddressCount_
-    , _subCidrBlock = pCidrBlock_
-    , _subState = pState_
-    , _subSubnetId = pSubnetId_
-    , _subVPCId = pVPCId_
-    }
-
--- | Information about the IPv6 CIDR blocks associated with the subnet.
-subIPv6CidrBlockAssociationSet :: Lens' Subnet [SubnetIPv6CidrBlockAssociation]
-subIPv6CidrBlockAssociationSet = lens _subIPv6CidrBlockAssociationSet (\ s a -> s{_subIPv6CidrBlockAssociationSet = a}) . _Default . _Coerce;
-
--- | Indicates whether a network interface created in this subnet (including a network interface created by 'RunInstances' ) receives an IPv6 address.
-subAssignIPv6AddressOnCreation :: Lens' Subnet (Maybe Bool)
-subAssignIPv6AddressOnCreation = lens _subAssignIPv6AddressOnCreation (\ s a -> s{_subAssignIPv6AddressOnCreation = a});
-
--- | Indicates whether instances launched in this subnet receive a public IPv4 address.
-subMapPublicIPOnLaunch :: Lens' Subnet (Maybe Bool)
-subMapPublicIPOnLaunch = lens _subMapPublicIPOnLaunch (\ s a -> s{_subMapPublicIPOnLaunch = a});
-
--- | Indicates whether this is the default subnet for the Availability Zone.
-subDefaultForAz :: Lens' Subnet (Maybe Bool)
-subDefaultForAz = lens _subDefaultForAz (\ s a -> s{_subDefaultForAz = a});
-
--- | Any tags assigned to the subnet.
-subTags :: Lens' Subnet [Tag]
-subTags = lens _subTags (\ s a -> s{_subTags = a}) . _Default . _Coerce;
-
--- | The Availability Zone of the subnet.
-subAvailabilityZone :: Lens' Subnet Text
-subAvailabilityZone = lens _subAvailabilityZone (\ s a -> s{_subAvailabilityZone = a});
-
--- | The number of unused private IPv4 addresses in the subnet. Note that the IPv4 addresses for any stopped instances are considered unavailable.
-subAvailableIPAddressCount :: Lens' Subnet Int
-subAvailableIPAddressCount = lens _subAvailableIPAddressCount (\ s a -> s{_subAvailableIPAddressCount = a});
-
--- | The IPv4 CIDR block assigned to the subnet.
-subCidrBlock :: Lens' Subnet Text
-subCidrBlock = lens _subCidrBlock (\ s a -> s{_subCidrBlock = a});
-
--- | The current state of the subnet.
-subState :: Lens' Subnet SubnetState
-subState = lens _subState (\ s a -> s{_subState = a});
-
--- | The ID of the subnet.
-subSubnetId :: Lens' Subnet Text
-subSubnetId = lens _subSubnetId (\ s a -> s{_subSubnetId = a});
-
--- | The ID of the VPC the subnet is in.
-subVPCId :: Lens' Subnet Text
-subVPCId = lens _subVPCId (\ s a -> s{_subVPCId = a});
-
-instance FromXML Subnet where
-        parseXML x
-          = Subnet' <$>
-              (x .@? "ipv6CidrBlockAssociationSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "assignIpv6AddressOnCreation")
-                <*> (x .@? "mapPublicIpOnLaunch")
-                <*> (x .@? "defaultForAz")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "availabilityZone")
-                <*> (x .@ "availableIpAddressCount")
-                <*> (x .@ "cidrBlock")
-                <*> (x .@ "state")
-                <*> (x .@ "subnetId")
-                <*> (x .@ "vpcId")
-
-instance Hashable Subnet
-
-instance NFData Subnet
-
--- | Describes the state of a CIDR block.
---
---
---
--- /See:/ 'subnetCidrBlockState' smart constructor.
-data SubnetCidrBlockState = SubnetCidrBlockState'
-    { _scbsState         :: !(Maybe SubnetCidrBlockStateCode)
-    , _scbsStatusMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SubnetCidrBlockState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scbsState' - The state of a CIDR block.
---
--- * 'scbsStatusMessage' - A message about the status of the CIDR block, if applicable.
-subnetCidrBlockState
-    :: SubnetCidrBlockState
-subnetCidrBlockState =
-    SubnetCidrBlockState'
-    { _scbsState = Nothing
-    , _scbsStatusMessage = Nothing
-    }
-
--- | The state of a CIDR block.
-scbsState :: Lens' SubnetCidrBlockState (Maybe SubnetCidrBlockStateCode)
-scbsState = lens _scbsState (\ s a -> s{_scbsState = a});
-
--- | A message about the status of the CIDR block, if applicable.
-scbsStatusMessage :: Lens' SubnetCidrBlockState (Maybe Text)
-scbsStatusMessage = lens _scbsStatusMessage (\ s a -> s{_scbsStatusMessage = a});
-
-instance FromXML SubnetCidrBlockState where
-        parseXML x
-          = SubnetCidrBlockState' <$>
-              (x .@? "state") <*> (x .@? "statusMessage")
-
-instance Hashable SubnetCidrBlockState
-
-instance NFData SubnetCidrBlockState
-
--- | Describes an IPv6 CIDR block associated with a subnet.
---
---
---
--- /See:/ 'subnetIPv6CidrBlockAssociation' smart constructor.
-data SubnetIPv6CidrBlockAssociation = SubnetIPv6CidrBlockAssociation'
-    { _sicbaAssociationId      :: !(Maybe Text)
-    , _sicbaIPv6CidrBlock      :: !(Maybe Text)
-    , _sicbaIPv6CidrBlockState :: !(Maybe SubnetCidrBlockState)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SubnetIPv6CidrBlockAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sicbaAssociationId' - The association ID for the CIDR block.
---
--- * 'sicbaIPv6CidrBlock' - The IPv6 CIDR block.
---
--- * 'sicbaIPv6CidrBlockState' - Information about the state of the CIDR block.
-subnetIPv6CidrBlockAssociation
-    :: SubnetIPv6CidrBlockAssociation
-subnetIPv6CidrBlockAssociation =
-    SubnetIPv6CidrBlockAssociation'
-    { _sicbaAssociationId = Nothing
-    , _sicbaIPv6CidrBlock = Nothing
-    , _sicbaIPv6CidrBlockState = Nothing
-    }
-
--- | The association ID for the CIDR block.
-sicbaAssociationId :: Lens' SubnetIPv6CidrBlockAssociation (Maybe Text)
-sicbaAssociationId = lens _sicbaAssociationId (\ s a -> s{_sicbaAssociationId = a});
-
--- | The IPv6 CIDR block.
-sicbaIPv6CidrBlock :: Lens' SubnetIPv6CidrBlockAssociation (Maybe Text)
-sicbaIPv6CidrBlock = lens _sicbaIPv6CidrBlock (\ s a -> s{_sicbaIPv6CidrBlock = a});
-
--- | Information about the state of the CIDR block.
-sicbaIPv6CidrBlockState :: Lens' SubnetIPv6CidrBlockAssociation (Maybe SubnetCidrBlockState)
-sicbaIPv6CidrBlockState = lens _sicbaIPv6CidrBlockState (\ s a -> s{_sicbaIPv6CidrBlockState = a});
-
-instance FromXML SubnetIPv6CidrBlockAssociation where
-        parseXML x
-          = SubnetIPv6CidrBlockAssociation' <$>
-              (x .@? "associationId") <*> (x .@? "ipv6CidrBlock")
-                <*> (x .@? "ipv6CidrBlockState")
-
-instance Hashable SubnetIPv6CidrBlockAssociation
-
-instance NFData SubnetIPv6CidrBlockAssociation
-
--- | Describes a tag.
---
---
---
--- /See:/ 'tag' smart constructor.
-data Tag = Tag'
-    { _tagKey   :: !Text
-    , _tagValue :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagKey' - The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with @aws:@
---
--- * 'tagValue' - The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.
-tag
-    :: Text -- ^ 'tagKey'
-    -> Text -- ^ 'tagValue'
-    -> Tag
-tag pKey_ pValue_ =
-    Tag'
-    { _tagKey = pKey_
-    , _tagValue = pValue_
-    }
-
--- | The key of the tag. Constraints: Tag keys are case-sensitive and accept a maximum of 127 Unicode characters. May not begin with @aws:@
-tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
-
--- | The value of the tag. Constraints: Tag values are case-sensitive and accept a maximum of 255 Unicode characters.
-tagValue :: Lens' Tag Text
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
-
-instance FromXML Tag where
-        parseXML x = Tag' <$> (x .@ "key") <*> (x .@ "value")
-
-instance Hashable Tag
-
-instance NFData Tag
-
-instance ToQuery Tag where
-        toQuery Tag'{..}
-          = mconcat ["Key" =: _tagKey, "Value" =: _tagValue]
-
--- | Describes a tag.
---
---
---
--- /See:/ 'tagDescription' smart constructor.
-data TagDescription = TagDescription'
-    { _tdResourceId   :: !Text
-    , _tdResourceType :: !ResourceType
-    , _tdKey          :: !Text
-    , _tdValue        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TagDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdResourceId' - The ID of the resource. For example, @ami-1a2b3c4d@ .
---
--- * 'tdResourceType' - The resource type.
---
--- * 'tdKey' - The tag key.
---
--- * 'tdValue' - The tag value.
-tagDescription
-    :: Text -- ^ 'tdResourceId'
-    -> ResourceType -- ^ 'tdResourceType'
-    -> Text -- ^ 'tdKey'
-    -> Text -- ^ 'tdValue'
-    -> TagDescription
-tagDescription pResourceId_ pResourceType_ pKey_ pValue_ =
-    TagDescription'
-    { _tdResourceId = pResourceId_
-    , _tdResourceType = pResourceType_
-    , _tdKey = pKey_
-    , _tdValue = pValue_
-    }
-
--- | The ID of the resource. For example, @ami-1a2b3c4d@ .
-tdResourceId :: Lens' TagDescription Text
-tdResourceId = lens _tdResourceId (\ s a -> s{_tdResourceId = a});
-
--- | The resource type.
-tdResourceType :: Lens' TagDescription ResourceType
-tdResourceType = lens _tdResourceType (\ s a -> s{_tdResourceType = a});
-
--- | The tag key.
-tdKey :: Lens' TagDescription Text
-tdKey = lens _tdKey (\ s a -> s{_tdKey = a});
-
--- | The tag value.
-tdValue :: Lens' TagDescription Text
-tdValue = lens _tdValue (\ s a -> s{_tdValue = a});
-
-instance FromXML TagDescription where
-        parseXML x
-          = TagDescription' <$>
-              (x .@ "resourceId") <*> (x .@ "resourceType") <*>
-                (x .@ "key")
-                <*> (x .@ "value")
-
-instance Hashable TagDescription
-
-instance NFData TagDescription
-
--- | Information about the Convertible Reserved Instance offering.
---
---
---
--- /See:/ 'targetConfiguration' smart constructor.
-data TargetConfiguration = TargetConfiguration'
-    { _tcInstanceCount :: !(Maybe Int)
-    , _tcOfferingId    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tcInstanceCount' - The number of instances the Convertible Reserved Instance offering can be applied to. This parameter is reserved and cannot be specified in a request
---
--- * 'tcOfferingId' - The ID of the Convertible Reserved Instance offering.
-targetConfiguration
-    :: TargetConfiguration
-targetConfiguration =
-    TargetConfiguration'
-    { _tcInstanceCount = Nothing
-    , _tcOfferingId = Nothing
-    }
-
--- | The number of instances the Convertible Reserved Instance offering can be applied to. This parameter is reserved and cannot be specified in a request
-tcInstanceCount :: Lens' TargetConfiguration (Maybe Int)
-tcInstanceCount = lens _tcInstanceCount (\ s a -> s{_tcInstanceCount = a});
-
--- | The ID of the Convertible Reserved Instance offering.
-tcOfferingId :: Lens' TargetConfiguration (Maybe Text)
-tcOfferingId = lens _tcOfferingId (\ s a -> s{_tcOfferingId = a});
-
-instance FromXML TargetConfiguration where
-        parseXML x
-          = TargetConfiguration' <$>
-              (x .@? "instanceCount") <*> (x .@? "offeringId")
-
-instance Hashable TargetConfiguration
-
-instance NFData TargetConfiguration
-
--- | Details about the target configuration.
---
---
---
--- /See:/ 'targetConfigurationRequest' smart constructor.
-data TargetConfigurationRequest = TargetConfigurationRequest'
-    { _tcrInstanceCount :: !(Maybe Int)
-    , _tcrOfferingId    :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetConfigurationRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tcrInstanceCount' - The number of instances the Covertible Reserved Instance offering can be applied to. This parameter is reserved and cannot be specified in a request
---
--- * 'tcrOfferingId' - The Convertible Reserved Instance offering ID.
-targetConfigurationRequest
-    :: Text -- ^ 'tcrOfferingId'
-    -> TargetConfigurationRequest
-targetConfigurationRequest pOfferingId_ =
-    TargetConfigurationRequest'
-    { _tcrInstanceCount = Nothing
-    , _tcrOfferingId = pOfferingId_
-    }
-
--- | The number of instances the Covertible Reserved Instance offering can be applied to. This parameter is reserved and cannot be specified in a request
-tcrInstanceCount :: Lens' TargetConfigurationRequest (Maybe Int)
-tcrInstanceCount = lens _tcrInstanceCount (\ s a -> s{_tcrInstanceCount = a});
-
--- | The Convertible Reserved Instance offering ID.
-tcrOfferingId :: Lens' TargetConfigurationRequest Text
-tcrOfferingId = lens _tcrOfferingId (\ s a -> s{_tcrOfferingId = a});
-
-instance Hashable TargetConfigurationRequest
-
-instance NFData TargetConfigurationRequest
-
-instance ToQuery TargetConfigurationRequest where
-        toQuery TargetConfigurationRequest'{..}
-          = mconcat
-              ["InstanceCount" =: _tcrInstanceCount,
-               "OfferingId" =: _tcrOfferingId]
-
--- | The total value of the new Convertible Reserved Instances.
---
---
---
--- /See:/ 'targetReservationValue' smart constructor.
-data TargetReservationValue = TargetReservationValue'
-    { _trvReservationValue    :: !(Maybe ReservationValue)
-    , _trvTargetConfiguration :: !(Maybe TargetConfiguration)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TargetReservationValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trvReservationValue' - The total value of the Convertible Reserved Instances that make up the exchange. This is the sum of the list value, remaining upfront price, and additional upfront cost of the exchange.
---
--- * 'trvTargetConfiguration' - The configuration of the Convertible Reserved Instances that make up the exchange.
-targetReservationValue
-    :: TargetReservationValue
-targetReservationValue =
-    TargetReservationValue'
-    { _trvReservationValue = Nothing
-    , _trvTargetConfiguration = Nothing
-    }
-
--- | The total value of the Convertible Reserved Instances that make up the exchange. This is the sum of the list value, remaining upfront price, and additional upfront cost of the exchange.
-trvReservationValue :: Lens' TargetReservationValue (Maybe ReservationValue)
-trvReservationValue = lens _trvReservationValue (\ s a -> s{_trvReservationValue = a});
-
--- | The configuration of the Convertible Reserved Instances that make up the exchange.
-trvTargetConfiguration :: Lens' TargetReservationValue (Maybe TargetConfiguration)
-trvTargetConfiguration = lens _trvTargetConfiguration (\ s a -> s{_trvTargetConfiguration = a});
-
-instance FromXML TargetReservationValue where
-        parseXML x
-          = TargetReservationValue' <$>
-              (x .@? "reservationValue") <*>
-                (x .@? "targetConfiguration")
-
-instance Hashable TargetReservationValue
-
-instance NFData TargetReservationValue
-
--- | Information about items that were not successfully processed in a batch call.
---
---
---
--- /See:/ 'unsuccessfulItem' smart constructor.
-data UnsuccessfulItem = UnsuccessfulItem'
-    { _uiResourceId :: !(Maybe Text)
-    , _uiError      :: !UnsuccessfulItemError
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnsuccessfulItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uiResourceId' - The ID of the resource.
---
--- * 'uiError' - Information about the error.
-unsuccessfulItem
-    :: UnsuccessfulItemError -- ^ 'uiError'
-    -> UnsuccessfulItem
-unsuccessfulItem pError_ =
-    UnsuccessfulItem'
-    { _uiResourceId = Nothing
-    , _uiError = pError_
-    }
-
--- | The ID of the resource.
-uiResourceId :: Lens' UnsuccessfulItem (Maybe Text)
-uiResourceId = lens _uiResourceId (\ s a -> s{_uiResourceId = a});
-
--- | Information about the error.
-uiError :: Lens' UnsuccessfulItem UnsuccessfulItemError
-uiError = lens _uiError (\ s a -> s{_uiError = a});
-
-instance FromXML UnsuccessfulItem where
-        parseXML x
-          = UnsuccessfulItem' <$>
-              (x .@? "resourceId") <*> (x .@ "error")
-
-instance Hashable UnsuccessfulItem
-
-instance NFData UnsuccessfulItem
-
--- | Information about the error that occurred. For more information about errors, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error Codes> .
---
---
---
--- /See:/ 'unsuccessfulItemError' smart constructor.
-data UnsuccessfulItemError = UnsuccessfulItemError'
-    { _uieCode    :: !Text
-    , _uieMessage :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnsuccessfulItemError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uieCode' - The error code.
---
--- * 'uieMessage' - The error message accompanying the error code.
-unsuccessfulItemError
-    :: Text -- ^ 'uieCode'
-    -> Text -- ^ 'uieMessage'
-    -> UnsuccessfulItemError
-unsuccessfulItemError pCode_ pMessage_ =
-    UnsuccessfulItemError'
-    { _uieCode = pCode_
-    , _uieMessage = pMessage_
-    }
-
--- | The error code.
-uieCode :: Lens' UnsuccessfulItemError Text
-uieCode = lens _uieCode (\ s a -> s{_uieCode = a});
-
--- | The error message accompanying the error code.
-uieMessage :: Lens' UnsuccessfulItemError Text
-uieMessage = lens _uieMessage (\ s a -> s{_uieMessage = a});
-
-instance FromXML UnsuccessfulItemError where
-        parseXML x
-          = UnsuccessfulItemError' <$>
-              (x .@ "code") <*> (x .@ "message")
-
-instance Hashable UnsuccessfulItemError
-
-instance NFData UnsuccessfulItemError
-
--- | Describes the S3 bucket for the disk image.
---
---
---
--- /See:/ 'userBucket' smart constructor.
-data UserBucket = UserBucket'
-    { _ubS3Key    :: !(Maybe Text)
-    , _ubS3Bucket :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserBucket' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ubS3Key' - The file name of the disk image.
---
--- * 'ubS3Bucket' - The name of the S3 bucket where the disk image is located.
-userBucket
-    :: UserBucket
-userBucket =
-    UserBucket'
-    { _ubS3Key = Nothing
-    , _ubS3Bucket = Nothing
-    }
-
--- | The file name of the disk image.
-ubS3Key :: Lens' UserBucket (Maybe Text)
-ubS3Key = lens _ubS3Key (\ s a -> s{_ubS3Key = a});
-
--- | The name of the S3 bucket where the disk image is located.
-ubS3Bucket :: Lens' UserBucket (Maybe Text)
-ubS3Bucket = lens _ubS3Bucket (\ s a -> s{_ubS3Bucket = a});
-
-instance Hashable UserBucket
-
-instance NFData UserBucket
-
-instance ToQuery UserBucket where
-        toQuery UserBucket'{..}
-          = mconcat
-              ["S3Key" =: _ubS3Key, "S3Bucket" =: _ubS3Bucket]
-
--- | Describes the S3 bucket for the disk image.
---
---
---
--- /See:/ 'userBucketDetails' smart constructor.
-data UserBucketDetails = UserBucketDetails'
-    { _ubdS3Key    :: !(Maybe Text)
-    , _ubdS3Bucket :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserBucketDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ubdS3Key' - The file name of the disk image.
---
--- * 'ubdS3Bucket' - The S3 bucket from which the disk image was created.
-userBucketDetails
-    :: UserBucketDetails
-userBucketDetails =
-    UserBucketDetails'
-    { _ubdS3Key = Nothing
-    , _ubdS3Bucket = Nothing
-    }
-
--- | The file name of the disk image.
-ubdS3Key :: Lens' UserBucketDetails (Maybe Text)
-ubdS3Key = lens _ubdS3Key (\ s a -> s{_ubdS3Key = a});
-
--- | The S3 bucket from which the disk image was created.
-ubdS3Bucket :: Lens' UserBucketDetails (Maybe Text)
-ubdS3Bucket = lens _ubdS3Bucket (\ s a -> s{_ubdS3Bucket = a});
-
-instance FromXML UserBucketDetails where
-        parseXML x
-          = UserBucketDetails' <$>
-              (x .@? "s3Key") <*> (x .@? "s3Bucket")
-
-instance Hashable UserBucketDetails
-
-instance NFData UserBucketDetails
-
--- | Describes the user data for an instance.
---
---
---
--- /See:/ 'userData' smart constructor.
-newtype UserData = UserData'
-    { _udData :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udData' - The user data. If you are using an AWS SDK or 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.
-userData
-    :: UserData
-userData =
-    UserData'
-    { _udData = Nothing
-    }
-
--- | The user data. If you are using an AWS SDK or 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.
-udData :: Lens' UserData (Maybe Text)
-udData = lens _udData (\ s a -> s{_udData = a});
-
-instance Hashable UserData
-
-instance NFData UserData
-
-instance ToQuery UserData where
-        toQuery UserData'{..} = mconcat ["Data" =: _udData]
-
--- | Describes a security group and AWS account ID pair.
---
---
---
--- /See:/ 'userIdGroupPair' smart constructor.
-data UserIdGroupPair = UserIdGroupPair'
-    { _uigpVPCPeeringConnectionId :: !(Maybe Text)
-    , _uigpVPCId                  :: !(Maybe Text)
-    , _uigpUserId                 :: !(Maybe Text)
-    , _uigpGroupId                :: !(Maybe Text)
-    , _uigpGroupName              :: !(Maybe Text)
-    , _uigpPeeringStatus          :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserIdGroupPair' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uigpVPCPeeringConnectionId' - The ID of the VPC peering connection, if applicable.
---
--- * 'uigpVPCId' - The ID of the VPC for the referenced security group, if applicable.
---
--- * 'uigpUserId' - The ID of an AWS account. For a referenced security group in another VPC, the account ID of the referenced security group is returned. [EC2-Classic] Required when adding or removing rules that reference a security group in another AWS account.
---
--- * 'uigpGroupId' - The ID of the security group.
---
--- * 'uigpGroupName' - The name of the security group. In a request, use this parameter for a security group in EC2-Classic or a default VPC only. For a security group in a nondefault VPC, use the security group ID.
---
--- * 'uigpPeeringStatus' - The status of a VPC peering connection, if applicable.
-userIdGroupPair
-    :: UserIdGroupPair
-userIdGroupPair =
-    UserIdGroupPair'
-    { _uigpVPCPeeringConnectionId = Nothing
-    , _uigpVPCId = Nothing
-    , _uigpUserId = Nothing
-    , _uigpGroupId = Nothing
-    , _uigpGroupName = Nothing
-    , _uigpPeeringStatus = Nothing
-    }
-
--- | The ID of the VPC peering connection, if applicable.
-uigpVPCPeeringConnectionId :: Lens' UserIdGroupPair (Maybe Text)
-uigpVPCPeeringConnectionId = lens _uigpVPCPeeringConnectionId (\ s a -> s{_uigpVPCPeeringConnectionId = a});
-
--- | The ID of the VPC for the referenced security group, if applicable.
-uigpVPCId :: Lens' UserIdGroupPair (Maybe Text)
-uigpVPCId = lens _uigpVPCId (\ s a -> s{_uigpVPCId = a});
-
--- | The ID of an AWS account. For a referenced security group in another VPC, the account ID of the referenced security group is returned. [EC2-Classic] Required when adding or removing rules that reference a security group in another AWS account.
-uigpUserId :: Lens' UserIdGroupPair (Maybe Text)
-uigpUserId = lens _uigpUserId (\ s a -> s{_uigpUserId = a});
-
--- | The ID of the security group.
-uigpGroupId :: Lens' UserIdGroupPair (Maybe Text)
-uigpGroupId = lens _uigpGroupId (\ s a -> s{_uigpGroupId = a});
-
--- | The name of the security group. In a request, use this parameter for a security group in EC2-Classic or a default VPC only. For a security group in a nondefault VPC, use the security group ID.
-uigpGroupName :: Lens' UserIdGroupPair (Maybe Text)
-uigpGroupName = lens _uigpGroupName (\ s a -> s{_uigpGroupName = a});
-
--- | The status of a VPC peering connection, if applicable.
-uigpPeeringStatus :: Lens' UserIdGroupPair (Maybe Text)
-uigpPeeringStatus = lens _uigpPeeringStatus (\ s a -> s{_uigpPeeringStatus = a});
-
-instance FromXML UserIdGroupPair where
-        parseXML x
-          = UserIdGroupPair' <$>
-              (x .@? "vpcPeeringConnectionId") <*> (x .@? "vpcId")
-                <*> (x .@? "userId")
-                <*> (x .@? "groupId")
-                <*> (x .@? "groupName")
-                <*> (x .@? "peeringStatus")
-
-instance Hashable UserIdGroupPair
-
-instance NFData UserIdGroupPair
-
-instance ToQuery UserIdGroupPair where
-        toQuery UserIdGroupPair'{..}
-          = mconcat
-              ["VpcPeeringConnectionId" =:
-                 _uigpVPCPeeringConnectionId,
-               "VpcId" =: _uigpVPCId, "UserId" =: _uigpUserId,
-               "GroupId" =: _uigpGroupId,
-               "GroupName" =: _uigpGroupName,
-               "PeeringStatus" =: _uigpPeeringStatus]
-
--- | Describes telemetry for a VPN tunnel.
---
---
---
--- /See:/ 'vgwTelemetry' smart constructor.
-data VGWTelemetry = VGWTelemetry'
-    { _vtStatus             :: !(Maybe TelemetryStatus)
-    , _vtOutsideIPAddress   :: !(Maybe Text)
-    , _vtLastStatusChange   :: !(Maybe ISO8601)
-    , _vtAcceptedRouteCount :: !(Maybe Int)
-    , _vtStatusMessage      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VGWTelemetry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtStatus' - The status of the VPN tunnel.
---
--- * 'vtOutsideIPAddress' - The Internet-routable IP address of the virtual private gateway's outside interface.
---
--- * 'vtLastStatusChange' - The date and time of the last change in status.
---
--- * 'vtAcceptedRouteCount' - The number of accepted routes.
---
--- * 'vtStatusMessage' - If an error occurs, a description of the error.
-vgwTelemetry
-    :: VGWTelemetry
-vgwTelemetry =
-    VGWTelemetry'
-    { _vtStatus = Nothing
-    , _vtOutsideIPAddress = Nothing
-    , _vtLastStatusChange = Nothing
-    , _vtAcceptedRouteCount = Nothing
-    , _vtStatusMessage = Nothing
-    }
-
--- | The status of the VPN tunnel.
-vtStatus :: Lens' VGWTelemetry (Maybe TelemetryStatus)
-vtStatus = lens _vtStatus (\ s a -> s{_vtStatus = a});
-
--- | The Internet-routable IP address of the virtual private gateway's outside interface.
-vtOutsideIPAddress :: Lens' VGWTelemetry (Maybe Text)
-vtOutsideIPAddress = lens _vtOutsideIPAddress (\ s a -> s{_vtOutsideIPAddress = a});
-
--- | The date and time of the last change in status.
-vtLastStatusChange :: Lens' VGWTelemetry (Maybe UTCTime)
-vtLastStatusChange = lens _vtLastStatusChange (\ s a -> s{_vtLastStatusChange = a}) . mapping _Time;
-
--- | The number of accepted routes.
-vtAcceptedRouteCount :: Lens' VGWTelemetry (Maybe Int)
-vtAcceptedRouteCount = lens _vtAcceptedRouteCount (\ s a -> s{_vtAcceptedRouteCount = a});
-
--- | If an error occurs, a description of the error.
-vtStatusMessage :: Lens' VGWTelemetry (Maybe Text)
-vtStatusMessage = lens _vtStatusMessage (\ s a -> s{_vtStatusMessage = a});
-
-instance FromXML VGWTelemetry where
-        parseXML x
-          = VGWTelemetry' <$>
-              (x .@? "status") <*> (x .@? "outsideIpAddress") <*>
-                (x .@? "lastStatusChange")
-                <*> (x .@? "acceptedRouteCount")
-                <*> (x .@? "statusMessage")
-
-instance Hashable VGWTelemetry
-
-instance NFData VGWTelemetry
-
--- | Describes a VPC.
---
---
---
--- /See:/ 'vpc' smart constructor.
-data VPC = VPC'
-    { _vpcIPv6CidrBlockAssociationSet :: !(Maybe [VPCIPv6CidrBlockAssociation])
-    , _vpcTags                        :: !(Maybe [Tag])
-    , _vpcIsDefault                   :: !(Maybe Bool)
-    , _vpcCidrBlock                   :: !Text
-    , _vpcDHCPOptionsId               :: !Text
-    , _vpcInstanceTenancy             :: !Tenancy
-    , _vpcState                       :: !VPCState
-    , _vpcVPCId                       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcIPv6CidrBlockAssociationSet' - Information about the IPv6 CIDR blocks associated with the VPC.
---
--- * 'vpcTags' - Any tags assigned to the VPC.
---
--- * 'vpcIsDefault' - Indicates whether the VPC is the default VPC.
---
--- * 'vpcCidrBlock' - The IPv4 CIDR block for the VPC.
---
--- * 'vpcDHCPOptionsId' - The ID of the set of DHCP options you've associated with the VPC (or @default@ if the default options are associated with the VPC).
---
--- * 'vpcInstanceTenancy' - The allowed tenancy of instances launched into the VPC.
---
--- * 'vpcState' - The current state of the VPC.
---
--- * 'vpcVPCId' - The ID of the VPC.
-vpc
-    :: Text -- ^ 'vpcCidrBlock'
-    -> Text -- ^ 'vpcDHCPOptionsId'
-    -> Tenancy -- ^ 'vpcInstanceTenancy'
-    -> VPCState -- ^ 'vpcState'
-    -> Text -- ^ 'vpcVPCId'
-    -> VPC
-vpc pCidrBlock_ pDHCPOptionsId_ pInstanceTenancy_ pState_ pVPCId_ =
-    VPC'
-    { _vpcIPv6CidrBlockAssociationSet = Nothing
-    , _vpcTags = Nothing
-    , _vpcIsDefault = Nothing
-    , _vpcCidrBlock = pCidrBlock_
-    , _vpcDHCPOptionsId = pDHCPOptionsId_
-    , _vpcInstanceTenancy = pInstanceTenancy_
-    , _vpcState = pState_
-    , _vpcVPCId = pVPCId_
-    }
-
--- | Information about the IPv6 CIDR blocks associated with the VPC.
-vpcIPv6CidrBlockAssociationSet :: Lens' VPC [VPCIPv6CidrBlockAssociation]
-vpcIPv6CidrBlockAssociationSet = lens _vpcIPv6CidrBlockAssociationSet (\ s a -> s{_vpcIPv6CidrBlockAssociationSet = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the VPC.
-vpcTags :: Lens' VPC [Tag]
-vpcTags = lens _vpcTags (\ s a -> s{_vpcTags = a}) . _Default . _Coerce;
-
--- | Indicates whether the VPC is the default VPC.
-vpcIsDefault :: Lens' VPC (Maybe Bool)
-vpcIsDefault = lens _vpcIsDefault (\ s a -> s{_vpcIsDefault = a});
-
--- | The IPv4 CIDR block for the VPC.
-vpcCidrBlock :: Lens' VPC Text
-vpcCidrBlock = lens _vpcCidrBlock (\ s a -> s{_vpcCidrBlock = a});
-
--- | The ID of the set of DHCP options you've associated with the VPC (or @default@ if the default options are associated with the VPC).
-vpcDHCPOptionsId :: Lens' VPC Text
-vpcDHCPOptionsId = lens _vpcDHCPOptionsId (\ s a -> s{_vpcDHCPOptionsId = a});
-
--- | The allowed tenancy of instances launched into the VPC.
-vpcInstanceTenancy :: Lens' VPC Tenancy
-vpcInstanceTenancy = lens _vpcInstanceTenancy (\ s a -> s{_vpcInstanceTenancy = a});
-
--- | The current state of the VPC.
-vpcState :: Lens' VPC VPCState
-vpcState = lens _vpcState (\ s a -> s{_vpcState = a});
-
--- | The ID of the VPC.
-vpcVPCId :: Lens' VPC Text
-vpcVPCId = lens _vpcVPCId (\ s a -> s{_vpcVPCId = a});
-
-instance FromXML VPC where
-        parseXML x
-          = VPC' <$>
-              (x .@? "ipv6CidrBlockAssociationSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "isDefault")
-                <*> (x .@ "cidrBlock")
-                <*> (x .@ "dhcpOptionsId")
-                <*> (x .@ "instanceTenancy")
-                <*> (x .@ "state")
-                <*> (x .@ "vpcId")
-
-instance Hashable VPC
-
-instance NFData VPC
-
--- | Describes an attachment between a virtual private gateway and a VPC.
---
---
---
--- /See:/ 'vpcAttachment' smart constructor.
-data VPCAttachment = VPCAttachment'
-    { _vaState :: !(Maybe AttachmentStatus)
-    , _vaVPCId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vaState' - The current state of the attachment.
---
--- * 'vaVPCId' - The ID of the VPC.
-vpcAttachment
-    :: VPCAttachment
-vpcAttachment =
-    VPCAttachment'
-    { _vaState = Nothing
-    , _vaVPCId = Nothing
-    }
-
--- | The current state of the attachment.
-vaState :: Lens' VPCAttachment (Maybe AttachmentStatus)
-vaState = lens _vaState (\ s a -> s{_vaState = a});
-
--- | The ID of the VPC.
-vaVPCId :: Lens' VPCAttachment (Maybe Text)
-vaVPCId = lens _vaVPCId (\ s a -> s{_vaVPCId = a});
-
-instance FromXML VPCAttachment where
-        parseXML x
-          = VPCAttachment' <$>
-              (x .@? "state") <*> (x .@? "vpcId")
-
-instance Hashable VPCAttachment
-
-instance NFData VPCAttachment
-
--- | Describes the state of a CIDR block.
---
---
---
--- /See:/ 'vpcCidrBlockState' smart constructor.
-data VPCCidrBlockState = VPCCidrBlockState'
-    { _vcbsState         :: !(Maybe VPCCidrBlockStateCode)
-    , _vcbsStatusMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCCidrBlockState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcbsState' - The state of the CIDR block.
---
--- * 'vcbsStatusMessage' - A message about the status of the CIDR block, if applicable.
-vpcCidrBlockState
-    :: VPCCidrBlockState
-vpcCidrBlockState =
-    VPCCidrBlockState'
-    { _vcbsState = Nothing
-    , _vcbsStatusMessage = Nothing
-    }
-
--- | The state of the CIDR block.
-vcbsState :: Lens' VPCCidrBlockState (Maybe VPCCidrBlockStateCode)
-vcbsState = lens _vcbsState (\ s a -> s{_vcbsState = a});
-
--- | A message about the status of the CIDR block, if applicable.
-vcbsStatusMessage :: Lens' VPCCidrBlockState (Maybe Text)
-vcbsStatusMessage = lens _vcbsStatusMessage (\ s a -> s{_vcbsStatusMessage = a});
-
-instance FromXML VPCCidrBlockState where
-        parseXML x
-          = VPCCidrBlockState' <$>
-              (x .@? "state") <*> (x .@? "statusMessage")
-
-instance Hashable VPCCidrBlockState
-
-instance NFData VPCCidrBlockState
-
--- | Describes whether a VPC is enabled for ClassicLink.
---
---
---
--- /See:/ 'vpcClassicLink' smart constructor.
-data VPCClassicLink = VPCClassicLink'
-    { _vclVPCId              :: !(Maybe Text)
-    , _vclTags               :: !(Maybe [Tag])
-    , _vclClassicLinkEnabled :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCClassicLink' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vclVPCId' - The ID of the VPC.
---
--- * 'vclTags' - Any tags assigned to the VPC.
---
--- * 'vclClassicLinkEnabled' - Indicates whether the VPC is enabled for ClassicLink.
-vpcClassicLink
-    :: VPCClassicLink
-vpcClassicLink =
-    VPCClassicLink'
-    { _vclVPCId = Nothing
-    , _vclTags = Nothing
-    , _vclClassicLinkEnabled = Nothing
-    }
-
--- | The ID of the VPC.
-vclVPCId :: Lens' VPCClassicLink (Maybe Text)
-vclVPCId = lens _vclVPCId (\ s a -> s{_vclVPCId = a});
-
--- | Any tags assigned to the VPC.
-vclTags :: Lens' VPCClassicLink [Tag]
-vclTags = lens _vclTags (\ s a -> s{_vclTags = a}) . _Default . _Coerce;
-
--- | Indicates whether the VPC is enabled for ClassicLink.
-vclClassicLinkEnabled :: Lens' VPCClassicLink (Maybe Bool)
-vclClassicLinkEnabled = lens _vclClassicLinkEnabled (\ s a -> s{_vclClassicLinkEnabled = a});
-
-instance FromXML VPCClassicLink where
-        parseXML x
-          = VPCClassicLink' <$>
-              (x .@? "vpcId") <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "classicLinkEnabled")
-
-instance Hashable VPCClassicLink
-
-instance NFData VPCClassicLink
-
--- | Describes a VPC endpoint.
---
---
---
--- /See:/ 'vpcEndpoint' smart constructor.
-data VPCEndpoint = VPCEndpoint'
-    { _veState             :: !(Maybe State)
-    , _vePolicyDocument    :: !(Maybe Text)
-    , _veVPCId             :: !(Maybe Text)
-    , _veCreationTimestamp :: !(Maybe ISO8601)
-    , _veServiceName       :: !(Maybe Text)
-    , _veVPCEndpointId     :: !(Maybe Text)
-    , _veRouteTableIds     :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCEndpoint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'veState' - The state of the VPC endpoint.
---
--- * 'vePolicyDocument' - The policy document associated with the endpoint.
---
--- * 'veVPCId' - The ID of the VPC to which the endpoint is associated.
---
--- * 'veCreationTimestamp' - The date and time the VPC endpoint was created.
---
--- * 'veServiceName' - The name of the AWS service to which the endpoint is associated.
---
--- * 'veVPCEndpointId' - The ID of the VPC endpoint.
---
--- * 'veRouteTableIds' - One or more route tables associated with the endpoint.
-vpcEndpoint
-    :: VPCEndpoint
-vpcEndpoint =
-    VPCEndpoint'
-    { _veState = Nothing
-    , _vePolicyDocument = Nothing
-    , _veVPCId = Nothing
-    , _veCreationTimestamp = Nothing
-    , _veServiceName = Nothing
-    , _veVPCEndpointId = Nothing
-    , _veRouteTableIds = Nothing
-    }
-
--- | The state of the VPC endpoint.
-veState :: Lens' VPCEndpoint (Maybe State)
-veState = lens _veState (\ s a -> s{_veState = a});
-
--- | The policy document associated with the endpoint.
-vePolicyDocument :: Lens' VPCEndpoint (Maybe Text)
-vePolicyDocument = lens _vePolicyDocument (\ s a -> s{_vePolicyDocument = a});
-
--- | The ID of the VPC to which the endpoint is associated.
-veVPCId :: Lens' VPCEndpoint (Maybe Text)
-veVPCId = lens _veVPCId (\ s a -> s{_veVPCId = a});
-
--- | The date and time the VPC endpoint was created.
-veCreationTimestamp :: Lens' VPCEndpoint (Maybe UTCTime)
-veCreationTimestamp = lens _veCreationTimestamp (\ s a -> s{_veCreationTimestamp = a}) . mapping _Time;
-
--- | The name of the AWS service to which the endpoint is associated.
-veServiceName :: Lens' VPCEndpoint (Maybe Text)
-veServiceName = lens _veServiceName (\ s a -> s{_veServiceName = a});
-
--- | The ID of the VPC endpoint.
-veVPCEndpointId :: Lens' VPCEndpoint (Maybe Text)
-veVPCEndpointId = lens _veVPCEndpointId (\ s a -> s{_veVPCEndpointId = a});
-
--- | One or more route tables associated with the endpoint.
-veRouteTableIds :: Lens' VPCEndpoint [Text]
-veRouteTableIds = lens _veRouteTableIds (\ s a -> s{_veRouteTableIds = a}) . _Default . _Coerce;
-
-instance FromXML VPCEndpoint where
-        parseXML x
-          = VPCEndpoint' <$>
-              (x .@? "state") <*> (x .@? "policyDocument") <*>
-                (x .@? "vpcId")
-                <*> (x .@? "creationTimestamp")
-                <*> (x .@? "serviceName")
-                <*> (x .@? "vpcEndpointId")
-                <*>
-                (x .@? "routeTableIdSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable VPCEndpoint
-
-instance NFData VPCEndpoint
-
--- | Describes an IPv6 CIDR block associated with a VPC.
---
---
---
--- /See:/ 'vpcIPv6CidrBlockAssociation' smart constructor.
-data VPCIPv6CidrBlockAssociation = VPCIPv6CidrBlockAssociation'
-    { _vicbaAssociationId      :: !(Maybe Text)
-    , _vicbaIPv6CidrBlock      :: !(Maybe Text)
-    , _vicbaIPv6CidrBlockState :: !(Maybe VPCCidrBlockState)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCIPv6CidrBlockAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vicbaAssociationId' - The association ID for the IPv6 CIDR block.
---
--- * 'vicbaIPv6CidrBlock' - The IPv6 CIDR block.
---
--- * 'vicbaIPv6CidrBlockState' - Information about the state of the CIDR block.
-vpcIPv6CidrBlockAssociation
-    :: VPCIPv6CidrBlockAssociation
-vpcIPv6CidrBlockAssociation =
-    VPCIPv6CidrBlockAssociation'
-    { _vicbaAssociationId = Nothing
-    , _vicbaIPv6CidrBlock = Nothing
-    , _vicbaIPv6CidrBlockState = Nothing
-    }
-
--- | The association ID for the IPv6 CIDR block.
-vicbaAssociationId :: Lens' VPCIPv6CidrBlockAssociation (Maybe Text)
-vicbaAssociationId = lens _vicbaAssociationId (\ s a -> s{_vicbaAssociationId = a});
-
--- | The IPv6 CIDR block.
-vicbaIPv6CidrBlock :: Lens' VPCIPv6CidrBlockAssociation (Maybe Text)
-vicbaIPv6CidrBlock = lens _vicbaIPv6CidrBlock (\ s a -> s{_vicbaIPv6CidrBlock = a});
-
--- | Information about the state of the CIDR block.
-vicbaIPv6CidrBlockState :: Lens' VPCIPv6CidrBlockAssociation (Maybe VPCCidrBlockState)
-vicbaIPv6CidrBlockState = lens _vicbaIPv6CidrBlockState (\ s a -> s{_vicbaIPv6CidrBlockState = a});
-
-instance FromXML VPCIPv6CidrBlockAssociation where
-        parseXML x
-          = VPCIPv6CidrBlockAssociation' <$>
-              (x .@? "associationId") <*> (x .@? "ipv6CidrBlock")
-                <*> (x .@? "ipv6CidrBlockState")
-
-instance Hashable VPCIPv6CidrBlockAssociation
-
-instance NFData VPCIPv6CidrBlockAssociation
-
--- | Describes a VPC peering connection.
---
---
---
--- /See:/ 'vpcPeeringConnection' smart constructor.
-data VPCPeeringConnection = VPCPeeringConnection'
-    { _vpcpcVPCPeeringConnectionId :: !(Maybe Text)
-    , _vpcpcStatus                 :: !(Maybe VPCPeeringConnectionStateReason)
-    , _vpcpcAccepterVPCInfo        :: !(Maybe VPCPeeringConnectionVPCInfo)
-    , _vpcpcRequesterVPCInfo       :: !(Maybe VPCPeeringConnectionVPCInfo)
-    , _vpcpcExpirationTime         :: !(Maybe ISO8601)
-    , _vpcpcTags                   :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcpcVPCPeeringConnectionId' - The ID of the VPC peering connection.
---
--- * 'vpcpcStatus' - The status of the VPC peering connection.
---
--- * 'vpcpcAccepterVPCInfo' - Information about the accepter VPC. CIDR block information is not returned when creating a VPC peering connection, or when describing a VPC peering connection that's in the @initiating-request@ or @pending-acceptance@ state.
---
--- * 'vpcpcRequesterVPCInfo' - Information about the requester VPC.
---
--- * 'vpcpcExpirationTime' - The time that an unaccepted VPC peering connection will expire.
---
--- * 'vpcpcTags' - Any tags assigned to the resource.
-vpcPeeringConnection
-    :: VPCPeeringConnection
-vpcPeeringConnection =
-    VPCPeeringConnection'
-    { _vpcpcVPCPeeringConnectionId = Nothing
-    , _vpcpcStatus = Nothing
-    , _vpcpcAccepterVPCInfo = Nothing
-    , _vpcpcRequesterVPCInfo = Nothing
-    , _vpcpcExpirationTime = Nothing
-    , _vpcpcTags = Nothing
-    }
-
--- | The ID of the VPC peering connection.
-vpcpcVPCPeeringConnectionId :: Lens' VPCPeeringConnection (Maybe Text)
-vpcpcVPCPeeringConnectionId = lens _vpcpcVPCPeeringConnectionId (\ s a -> s{_vpcpcVPCPeeringConnectionId = a});
-
--- | The status of the VPC peering connection.
-vpcpcStatus :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionStateReason)
-vpcpcStatus = lens _vpcpcStatus (\ s a -> s{_vpcpcStatus = a});
-
--- | Information about the accepter VPC. CIDR block information is not returned when creating a VPC peering connection, or when describing a VPC peering connection that's in the @initiating-request@ or @pending-acceptance@ state.
-vpcpcAccepterVPCInfo :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionVPCInfo)
-vpcpcAccepterVPCInfo = lens _vpcpcAccepterVPCInfo (\ s a -> s{_vpcpcAccepterVPCInfo = a});
-
--- | Information about the requester VPC.
-vpcpcRequesterVPCInfo :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionVPCInfo)
-vpcpcRequesterVPCInfo = lens _vpcpcRequesterVPCInfo (\ s a -> s{_vpcpcRequesterVPCInfo = a});
-
--- | The time that an unaccepted VPC peering connection will expire.
-vpcpcExpirationTime :: Lens' VPCPeeringConnection (Maybe UTCTime)
-vpcpcExpirationTime = lens _vpcpcExpirationTime (\ s a -> s{_vpcpcExpirationTime = a}) . mapping _Time;
-
--- | Any tags assigned to the resource.
-vpcpcTags :: Lens' VPCPeeringConnection [Tag]
-vpcpcTags = lens _vpcpcTags (\ s a -> s{_vpcpcTags = a}) . _Default . _Coerce;
-
-instance FromXML VPCPeeringConnection where
-        parseXML x
-          = VPCPeeringConnection' <$>
-              (x .@? "vpcPeeringConnectionId") <*> (x .@? "status")
-                <*> (x .@? "accepterVpcInfo")
-                <*> (x .@? "requesterVpcInfo")
-                <*> (x .@? "expirationTime")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable VPCPeeringConnection
-
-instance NFData VPCPeeringConnection
-
--- | Describes the VPC peering connection options.
---
---
---
--- /See:/ 'vpcPeeringConnectionOptionsDescription' smart constructor.
-data VPCPeeringConnectionOptionsDescription = VPCPeeringConnectionOptionsDescription'
-    { _vpcodAllowEgressFromLocalVPCToRemoteClassicLink :: !(Maybe Bool)
-    , _vpcodAllowEgressFromLocalClassicLinkToRemoteVPC :: !(Maybe Bool)
-    , _vpcodAllowDNSResolutionFromRemoteVPC            :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnectionOptionsDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcodAllowEgressFromLocalVPCToRemoteClassicLink' - Indicates whether a local VPC can communicate with a ClassicLink connection in the peer VPC over the VPC peering connection.
---
--- * 'vpcodAllowEgressFromLocalClassicLinkToRemoteVPC' - Indicates whether a local ClassicLink connection can communicate with the peer VPC over the VPC peering connection.
---
--- * 'vpcodAllowDNSResolutionFromRemoteVPC' - Indicates whether a local VPC can resolve public DNS hostnames to private IP addresses when queried from instances in a peer VPC.
-vpcPeeringConnectionOptionsDescription
-    :: VPCPeeringConnectionOptionsDescription
-vpcPeeringConnectionOptionsDescription =
-    VPCPeeringConnectionOptionsDescription'
-    { _vpcodAllowEgressFromLocalVPCToRemoteClassicLink = Nothing
-    , _vpcodAllowEgressFromLocalClassicLinkToRemoteVPC = Nothing
-    , _vpcodAllowDNSResolutionFromRemoteVPC = Nothing
-    }
-
--- | Indicates whether a local VPC can communicate with a ClassicLink connection in the peer VPC over the VPC peering connection.
-vpcodAllowEgressFromLocalVPCToRemoteClassicLink :: Lens' VPCPeeringConnectionOptionsDescription (Maybe Bool)
-vpcodAllowEgressFromLocalVPCToRemoteClassicLink = lens _vpcodAllowEgressFromLocalVPCToRemoteClassicLink (\ s a -> s{_vpcodAllowEgressFromLocalVPCToRemoteClassicLink = a});
-
--- | Indicates whether a local ClassicLink connection can communicate with the peer VPC over the VPC peering connection.
-vpcodAllowEgressFromLocalClassicLinkToRemoteVPC :: Lens' VPCPeeringConnectionOptionsDescription (Maybe Bool)
-vpcodAllowEgressFromLocalClassicLinkToRemoteVPC = lens _vpcodAllowEgressFromLocalClassicLinkToRemoteVPC (\ s a -> s{_vpcodAllowEgressFromLocalClassicLinkToRemoteVPC = a});
-
--- | Indicates whether a local VPC can resolve public DNS hostnames to private IP addresses when queried from instances in a peer VPC.
-vpcodAllowDNSResolutionFromRemoteVPC :: Lens' VPCPeeringConnectionOptionsDescription (Maybe Bool)
-vpcodAllowDNSResolutionFromRemoteVPC = lens _vpcodAllowDNSResolutionFromRemoteVPC (\ s a -> s{_vpcodAllowDNSResolutionFromRemoteVPC = a});
-
-instance FromXML
-         VPCPeeringConnectionOptionsDescription where
-        parseXML x
-          = VPCPeeringConnectionOptionsDescription' <$>
-              (x .@? "allowEgressFromLocalVpcToRemoteClassicLink")
-                <*>
-                (x .@? "allowEgressFromLocalClassicLinkToRemoteVpc")
-                <*> (x .@? "allowDnsResolutionFromRemoteVpc")
-
-instance Hashable
-         VPCPeeringConnectionOptionsDescription
-
-instance NFData
-         VPCPeeringConnectionOptionsDescription
-
--- | Describes the status of a VPC peering connection.
---
---
---
--- /See:/ 'vpcPeeringConnectionStateReason' smart constructor.
-data VPCPeeringConnectionStateReason = VPCPeeringConnectionStateReason'
-    { _vpcsrCode    :: !(Maybe VPCPeeringConnectionStateReasonCode)
-    , _vpcsrMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnectionStateReason' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcsrCode' - The status of the VPC peering connection.
---
--- * 'vpcsrMessage' - A message that provides more information about the status, if applicable.
-vpcPeeringConnectionStateReason
-    :: VPCPeeringConnectionStateReason
-vpcPeeringConnectionStateReason =
-    VPCPeeringConnectionStateReason'
-    { _vpcsrCode = Nothing
-    , _vpcsrMessage = Nothing
-    }
-
--- | The status of the VPC peering connection.
-vpcsrCode :: Lens' VPCPeeringConnectionStateReason (Maybe VPCPeeringConnectionStateReasonCode)
-vpcsrCode = lens _vpcsrCode (\ s a -> s{_vpcsrCode = a});
-
--- | A message that provides more information about the status, if applicable.
-vpcsrMessage :: Lens' VPCPeeringConnectionStateReason (Maybe Text)
-vpcsrMessage = lens _vpcsrMessage (\ s a -> s{_vpcsrMessage = a});
-
-instance FromXML VPCPeeringConnectionStateReason
-         where
-        parseXML x
-          = VPCPeeringConnectionStateReason' <$>
-              (x .@? "code") <*> (x .@? "message")
-
-instance Hashable VPCPeeringConnectionStateReason
-
-instance NFData VPCPeeringConnectionStateReason
-
--- | Describes a VPC in a VPC peering connection.
---
---
---
--- /See:/ 'vpcPeeringConnectionVPCInfo' smart constructor.
-data VPCPeeringConnectionVPCInfo = VPCPeeringConnectionVPCInfo'
-    { _vpcviVPCId            :: !(Maybe Text)
-    , _vpcviOwnerId          :: !(Maybe Text)
-    , _vpcviPeeringOptions   :: !(Maybe VPCPeeringConnectionOptionsDescription)
-    , _vpcviCidrBlock        :: !(Maybe Text)
-    , _vpcviIPv6CidrBlockSet :: !(Maybe [IPv6CidrBlock])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnectionVPCInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcviVPCId' - The ID of the VPC.
---
--- * 'vpcviOwnerId' - The AWS account ID of the VPC owner.
---
--- * 'vpcviPeeringOptions' - Information about the VPC peering connection options for the accepter or requester VPC.
---
--- * 'vpcviCidrBlock' - The IPv4 CIDR block for the VPC.
---
--- * 'vpcviIPv6CidrBlockSet' - The IPv6 CIDR block for the VPC.
-vpcPeeringConnectionVPCInfo
-    :: VPCPeeringConnectionVPCInfo
-vpcPeeringConnectionVPCInfo =
-    VPCPeeringConnectionVPCInfo'
-    { _vpcviVPCId = Nothing
-    , _vpcviOwnerId = Nothing
-    , _vpcviPeeringOptions = Nothing
-    , _vpcviCidrBlock = Nothing
-    , _vpcviIPv6CidrBlockSet = Nothing
-    }
-
--- | The ID of the VPC.
-vpcviVPCId :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
-vpcviVPCId = lens _vpcviVPCId (\ s a -> s{_vpcviVPCId = a});
-
--- | The AWS account ID of the VPC owner.
-vpcviOwnerId :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
-vpcviOwnerId = lens _vpcviOwnerId (\ s a -> s{_vpcviOwnerId = a});
-
--- | Information about the VPC peering connection options for the accepter or requester VPC.
-vpcviPeeringOptions :: Lens' VPCPeeringConnectionVPCInfo (Maybe VPCPeeringConnectionOptionsDescription)
-vpcviPeeringOptions = lens _vpcviPeeringOptions (\ s a -> s{_vpcviPeeringOptions = a});
-
--- | The IPv4 CIDR block for the VPC.
-vpcviCidrBlock :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
-vpcviCidrBlock = lens _vpcviCidrBlock (\ s a -> s{_vpcviCidrBlock = a});
-
--- | The IPv6 CIDR block for the VPC.
-vpcviIPv6CidrBlockSet :: Lens' VPCPeeringConnectionVPCInfo [IPv6CidrBlock]
-vpcviIPv6CidrBlockSet = lens _vpcviIPv6CidrBlockSet (\ s a -> s{_vpcviIPv6CidrBlockSet = a}) . _Default . _Coerce;
-
-instance FromXML VPCPeeringConnectionVPCInfo where
-        parseXML x
-          = VPCPeeringConnectionVPCInfo' <$>
-              (x .@? "vpcId") <*> (x .@? "ownerId") <*>
-                (x .@? "peeringOptions")
-                <*> (x .@? "cidrBlock")
-                <*>
-                (x .@? "ipv6CidrBlockSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable VPCPeeringConnectionVPCInfo
-
-instance NFData VPCPeeringConnectionVPCInfo
-
--- | Describes a VPN connection.
---
---
---
--- /See:/ 'vpnConnection' smart constructor.
-data VPNConnection = VPNConnection'
-    { _vcCustomerGatewayConfiguration :: !(Maybe Text)
-    , _vcRoutes                       :: !(Maybe [VPNStaticRoute])
-    , _vcVPNGatewayId                 :: !(Maybe Text)
-    , _vcOptions                      :: !(Maybe VPNConnectionOptions)
-    , _vcTags                         :: !(Maybe [Tag])
-    , _vcVGWTelemetry                 :: !(Maybe [VGWTelemetry])
-    , _vcVPNConnectionId              :: !Text
-    , _vcCustomerGatewayId            :: !Text
-    , _vcState                        :: !VPNState
-    , _vcType                         :: !GatewayType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcCustomerGatewayConfiguration' - The configuration information for the VPN connection's customer gateway (in the native XML format). This element is always present in the 'CreateVpnConnection' response; however, it's present in the 'DescribeVpnConnections' response only if the VPN connection is in the @pending@ or @available@ state.
---
--- * 'vcRoutes' - The static routes associated with the VPN connection.
---
--- * 'vcVPNGatewayId' - The ID of the virtual private gateway at the AWS side of the VPN connection.
---
--- * 'vcOptions' - The VPN connection options.
---
--- * 'vcTags' - Any tags assigned to the VPN connection.
---
--- * 'vcVGWTelemetry' - Information about the VPN tunnel.
---
--- * 'vcVPNConnectionId' - The ID of the VPN connection.
---
--- * 'vcCustomerGatewayId' - The ID of the customer gateway at your end of the VPN connection.
---
--- * 'vcState' - The current state of the VPN connection.
---
--- * 'vcType' - The type of VPN connection.
-vpnConnection
-    :: Text -- ^ 'vcVPNConnectionId'
-    -> Text -- ^ 'vcCustomerGatewayId'
-    -> VPNState -- ^ 'vcState'
-    -> GatewayType -- ^ 'vcType'
-    -> VPNConnection
-vpnConnection pVPNConnectionId_ pCustomerGatewayId_ pState_ pType_ =
-    VPNConnection'
-    { _vcCustomerGatewayConfiguration = Nothing
-    , _vcRoutes = Nothing
-    , _vcVPNGatewayId = Nothing
-    , _vcOptions = Nothing
-    , _vcTags = Nothing
-    , _vcVGWTelemetry = Nothing
-    , _vcVPNConnectionId = pVPNConnectionId_
-    , _vcCustomerGatewayId = pCustomerGatewayId_
-    , _vcState = pState_
-    , _vcType = pType_
-    }
-
--- | The configuration information for the VPN connection's customer gateway (in the native XML format). This element is always present in the 'CreateVpnConnection' response; however, it's present in the 'DescribeVpnConnections' response only if the VPN connection is in the @pending@ or @available@ state.
-vcCustomerGatewayConfiguration :: Lens' VPNConnection (Maybe Text)
-vcCustomerGatewayConfiguration = lens _vcCustomerGatewayConfiguration (\ s a -> s{_vcCustomerGatewayConfiguration = a});
-
--- | The static routes associated with the VPN connection.
-vcRoutes :: Lens' VPNConnection [VPNStaticRoute]
-vcRoutes = lens _vcRoutes (\ s a -> s{_vcRoutes = a}) . _Default . _Coerce;
-
--- | The ID of the virtual private gateway at the AWS side of the VPN connection.
-vcVPNGatewayId :: Lens' VPNConnection (Maybe Text)
-vcVPNGatewayId = lens _vcVPNGatewayId (\ s a -> s{_vcVPNGatewayId = a});
-
--- | The VPN connection options.
-vcOptions :: Lens' VPNConnection (Maybe VPNConnectionOptions)
-vcOptions = lens _vcOptions (\ s a -> s{_vcOptions = a});
-
--- | Any tags assigned to the VPN connection.
-vcTags :: Lens' VPNConnection [Tag]
-vcTags = lens _vcTags (\ s a -> s{_vcTags = a}) . _Default . _Coerce;
-
--- | Information about the VPN tunnel.
-vcVGWTelemetry :: Lens' VPNConnection [VGWTelemetry]
-vcVGWTelemetry = lens _vcVGWTelemetry (\ s a -> s{_vcVGWTelemetry = a}) . _Default . _Coerce;
-
--- | The ID of the VPN connection.
-vcVPNConnectionId :: Lens' VPNConnection Text
-vcVPNConnectionId = lens _vcVPNConnectionId (\ s a -> s{_vcVPNConnectionId = a});
-
--- | The ID of the customer gateway at your end of the VPN connection.
-vcCustomerGatewayId :: Lens' VPNConnection Text
-vcCustomerGatewayId = lens _vcCustomerGatewayId (\ s a -> s{_vcCustomerGatewayId = a});
-
--- | The current state of the VPN connection.
-vcState :: Lens' VPNConnection VPNState
-vcState = lens _vcState (\ s a -> s{_vcState = a});
-
--- | The type of VPN connection.
-vcType :: Lens' VPNConnection GatewayType
-vcType = lens _vcType (\ s a -> s{_vcType = a});
-
-instance FromXML VPNConnection where
-        parseXML x
-          = VPNConnection' <$>
-              (x .@? "customerGatewayConfiguration") <*>
-                (x .@? "routes" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpnGatewayId")
-                <*> (x .@? "options")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "vgwTelemetry" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "vpnConnectionId")
-                <*> (x .@ "customerGatewayId")
-                <*> (x .@ "state")
-                <*> (x .@ "type")
-
-instance Hashable VPNConnection
-
-instance NFData VPNConnection
-
--- | Describes VPN connection options.
---
---
---
--- /See:/ 'vpnConnectionOptions' smart constructor.
-newtype VPNConnectionOptions = VPNConnectionOptions'
-    { _vcoStaticRoutesOnly :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNConnectionOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcoStaticRoutesOnly' - Indicates whether the VPN connection uses static routes only. Static routes must be used for devices that don't support BGP.
-vpnConnectionOptions
-    :: VPNConnectionOptions
-vpnConnectionOptions =
-    VPNConnectionOptions'
-    { _vcoStaticRoutesOnly = Nothing
-    }
-
--- | Indicates whether the VPN connection uses static routes only. Static routes must be used for devices that don't support BGP.
-vcoStaticRoutesOnly :: Lens' VPNConnectionOptions (Maybe Bool)
-vcoStaticRoutesOnly = lens _vcoStaticRoutesOnly (\ s a -> s{_vcoStaticRoutesOnly = a});
-
-instance FromXML VPNConnectionOptions where
-        parseXML x
-          = VPNConnectionOptions' <$>
-              (x .@? "staticRoutesOnly")
-
-instance Hashable VPNConnectionOptions
-
-instance NFData VPNConnectionOptions
-
--- | Describes VPN connection options.
---
---
---
--- /See:/ 'vpnConnectionOptionsSpecification' smart constructor.
-newtype VPNConnectionOptionsSpecification = VPNConnectionOptionsSpecification'
-    { _vcosStaticRoutesOnly :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNConnectionOptionsSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcosStaticRoutesOnly' - Indicates whether the VPN connection uses static routes only. Static routes must be used for devices that don't support BGP.
-vpnConnectionOptionsSpecification
-    :: VPNConnectionOptionsSpecification
-vpnConnectionOptionsSpecification =
-    VPNConnectionOptionsSpecification'
-    { _vcosStaticRoutesOnly = Nothing
-    }
-
--- | Indicates whether the VPN connection uses static routes only. Static routes must be used for devices that don't support BGP.
-vcosStaticRoutesOnly :: Lens' VPNConnectionOptionsSpecification (Maybe Bool)
-vcosStaticRoutesOnly = lens _vcosStaticRoutesOnly (\ s a -> s{_vcosStaticRoutesOnly = a});
-
-instance Hashable VPNConnectionOptionsSpecification
-
-instance NFData VPNConnectionOptionsSpecification
-
-instance ToQuery VPNConnectionOptionsSpecification
-         where
-        toQuery VPNConnectionOptionsSpecification'{..}
-          = mconcat
-              ["StaticRoutesOnly" =: _vcosStaticRoutesOnly]
-
--- | Describes a virtual private gateway.
---
---
---
--- /See:/ 'vpnGateway' smart constructor.
-data VPNGateway = VPNGateway'
-    { _vgState            :: !(Maybe VPNState)
-    , _vgVPCAttachments   :: !(Maybe [VPCAttachment])
-    , _vgVPNGatewayId     :: !(Maybe Text)
-    , _vgAvailabilityZone :: !(Maybe Text)
-    , _vgType             :: !(Maybe GatewayType)
-    , _vgTags             :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vgState' - The current state of the virtual private gateway.
---
--- * 'vgVPCAttachments' - Any VPCs attached to the virtual private gateway.
---
--- * 'vgVPNGatewayId' - The ID of the virtual private gateway.
---
--- * 'vgAvailabilityZone' - The Availability Zone where the virtual private gateway was created, if applicable. This field may be empty or not returned.
---
--- * 'vgType' - The type of VPN connection the virtual private gateway supports.
---
--- * 'vgTags' - Any tags assigned to the virtual private gateway.
-vpnGateway
-    :: VPNGateway
-vpnGateway =
-    VPNGateway'
-    { _vgState = Nothing
-    , _vgVPCAttachments = Nothing
-    , _vgVPNGatewayId = Nothing
-    , _vgAvailabilityZone = Nothing
-    , _vgType = Nothing
-    , _vgTags = Nothing
-    }
-
--- | The current state of the virtual private gateway.
-vgState :: Lens' VPNGateway (Maybe VPNState)
-vgState = lens _vgState (\ s a -> s{_vgState = a});
-
--- | Any VPCs attached to the virtual private gateway.
-vgVPCAttachments :: Lens' VPNGateway [VPCAttachment]
-vgVPCAttachments = lens _vgVPCAttachments (\ s a -> s{_vgVPCAttachments = a}) . _Default . _Coerce;
-
--- | The ID of the virtual private gateway.
-vgVPNGatewayId :: Lens' VPNGateway (Maybe Text)
-vgVPNGatewayId = lens _vgVPNGatewayId (\ s a -> s{_vgVPNGatewayId = a});
-
--- | The Availability Zone where the virtual private gateway was created, if applicable. This field may be empty or not returned.
-vgAvailabilityZone :: Lens' VPNGateway (Maybe Text)
-vgAvailabilityZone = lens _vgAvailabilityZone (\ s a -> s{_vgAvailabilityZone = a});
-
--- | The type of VPN connection the virtual private gateway supports.
-vgType :: Lens' VPNGateway (Maybe GatewayType)
-vgType = lens _vgType (\ s a -> s{_vgType = a});
-
--- | Any tags assigned to the virtual private gateway.
-vgTags :: Lens' VPNGateway [Tag]
-vgTags = lens _vgTags (\ s a -> s{_vgTags = a}) . _Default . _Coerce;
-
-instance FromXML VPNGateway where
-        parseXML x
-          = VPNGateway' <$>
-              (x .@? "state") <*>
-                (x .@? "attachments" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpnGatewayId")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "type")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable VPNGateway
-
-instance NFData VPNGateway
-
--- | Describes a static route for a VPN connection.
---
---
---
--- /See:/ 'vpnStaticRoute' smart constructor.
-data VPNStaticRoute = VPNStaticRoute'
-    { _vsrState                :: !(Maybe VPNState)
-    , _vsrSource               :: !(Maybe VPNStaticRouteSource)
-    , _vsrDestinationCidrBlock :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNStaticRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsrState' - The current state of the static route.
---
--- * 'vsrSource' - Indicates how the routes were provided.
---
--- * 'vsrDestinationCidrBlock' - The CIDR block associated with the local subnet of the customer data center.
-vpnStaticRoute
-    :: VPNStaticRoute
-vpnStaticRoute =
-    VPNStaticRoute'
-    { _vsrState = Nothing
-    , _vsrSource = Nothing
-    , _vsrDestinationCidrBlock = Nothing
-    }
-
--- | The current state of the static route.
-vsrState :: Lens' VPNStaticRoute (Maybe VPNState)
-vsrState = lens _vsrState (\ s a -> s{_vsrState = a});
-
--- | Indicates how the routes were provided.
-vsrSource :: Lens' VPNStaticRoute (Maybe VPNStaticRouteSource)
-vsrSource = lens _vsrSource (\ s a -> s{_vsrSource = a});
-
--- | The CIDR block associated with the local subnet of the customer data center.
-vsrDestinationCidrBlock :: Lens' VPNStaticRoute (Maybe Text)
-vsrDestinationCidrBlock = lens _vsrDestinationCidrBlock (\ s a -> s{_vsrDestinationCidrBlock = a});
-
-instance FromXML VPNStaticRoute where
-        parseXML x
-          = VPNStaticRoute' <$>
-              (x .@? "state") <*> (x .@? "source") <*>
-                (x .@? "destinationCidrBlock")
-
-instance Hashable VPNStaticRoute
-
-instance NFData VPNStaticRoute
-
--- | Describes a volume.
---
---
---
--- /See:/ 'volume' smart constructor.
-data Volume = Volume'
-    { _vAttachments      :: !(Maybe [VolumeAttachment])
-    , _vIOPS             :: !(Maybe Int)
-    , _vKMSKeyId         :: !(Maybe Text)
-    , _vTags             :: !(Maybe [Tag])
-    , _vAvailabilityZone :: !Text
-    , _vCreateTime       :: !ISO8601
-    , _vEncrypted        :: !Bool
-    , _vSize             :: !Int
-    , _vSnapshotId       :: !Text
-    , _vState            :: !VolumeState
-    , _vVolumeId         :: !Text
-    , _vVolumeType       :: !VolumeType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vAttachments' - Information about the volume attachments.
---
--- * 'vIOPS' - The number of I/O operations per second (IOPS) that the volume supports. For Provisioned IOPS SSD volumes, this represents the number of IOPS that are provisioned for the volume. For General Purpose SSD volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information on General Purpose SSD baseline performance, I/O credits, and bursting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types> in the /Amazon Elastic Compute Cloud User Guide/ . Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for @gp2@ volumes. Condition: This parameter is required for requests to create @io1@ volumes; it is not used in requests to create @gp2@ , @st1@ , @sc1@ , or @standard@ volumes.
---
--- * 'vKMSKeyId' - The full ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) that was used to protect the volume encryption key for the volume.
---
--- * 'vTags' - Any tags assigned to the volume.
---
--- * 'vAvailabilityZone' - The Availability Zone for the volume.
---
--- * 'vCreateTime' - The time stamp when volume creation was initiated.
---
--- * 'vEncrypted' - Indicates whether the volume will be encrypted.
---
--- * 'vSize' - The size of the volume, in GiBs.
---
--- * 'vSnapshotId' - The snapshot from which the volume was created, if applicable.
---
--- * 'vState' - The volume state.
---
--- * 'vVolumeId' - The ID of the volume.
---
--- * 'vVolumeType' - The volume type. This can be @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic volumes.
-volume
-    :: Text -- ^ 'vAvailabilityZone'
-    -> UTCTime -- ^ 'vCreateTime'
-    -> Bool -- ^ 'vEncrypted'
-    -> Int -- ^ 'vSize'
-    -> Text -- ^ 'vSnapshotId'
-    -> VolumeState -- ^ 'vState'
-    -> Text -- ^ 'vVolumeId'
-    -> VolumeType -- ^ 'vVolumeType'
-    -> Volume
-volume pAvailabilityZone_ pCreateTime_ pEncrypted_ pSize_ pSnapshotId_ pState_ pVolumeId_ pVolumeType_ =
-    Volume'
-    { _vAttachments = Nothing
-    , _vIOPS = Nothing
-    , _vKMSKeyId = Nothing
-    , _vTags = Nothing
-    , _vAvailabilityZone = pAvailabilityZone_
-    , _vCreateTime = _Time # pCreateTime_
-    , _vEncrypted = pEncrypted_
-    , _vSize = pSize_
-    , _vSnapshotId = pSnapshotId_
-    , _vState = pState_
-    , _vVolumeId = pVolumeId_
-    , _vVolumeType = pVolumeType_
-    }
-
--- | Information about the volume attachments.
-vAttachments :: Lens' Volume [VolumeAttachment]
-vAttachments = lens _vAttachments (\ s a -> s{_vAttachments = a}) . _Default . _Coerce;
-
--- | The number of I/O operations per second (IOPS) that the volume supports. For Provisioned IOPS SSD volumes, this represents the number of IOPS that are provisioned for the volume. For General Purpose SSD volumes, this represents the baseline performance of the volume and the rate at which the volume accumulates I/O credits for bursting. For more information on General Purpose SSD baseline performance, I/O credits, and bursting, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types> in the /Amazon Elastic Compute Cloud User Guide/ . Constraint: Range is 100-20000 IOPS for io1 volumes and 100-10000 IOPS for @gp2@ volumes. Condition: This parameter is required for requests to create @io1@ volumes; it is not used in requests to create @gp2@ , @st1@ , @sc1@ , or @standard@ volumes.
-vIOPS :: Lens' Volume (Maybe Int)
-vIOPS = lens _vIOPS (\ s a -> s{_vIOPS = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) customer master key (CMK) that was used to protect the volume encryption key for the volume.
-vKMSKeyId :: Lens' Volume (Maybe Text)
-vKMSKeyId = lens _vKMSKeyId (\ s a -> s{_vKMSKeyId = a});
-
--- | Any tags assigned to the volume.
-vTags :: Lens' Volume [Tag]
-vTags = lens _vTags (\ s a -> s{_vTags = a}) . _Default . _Coerce;
-
--- | The Availability Zone for the volume.
-vAvailabilityZone :: Lens' Volume Text
-vAvailabilityZone = lens _vAvailabilityZone (\ s a -> s{_vAvailabilityZone = a});
-
--- | The time stamp when volume creation was initiated.
-vCreateTime :: Lens' Volume UTCTime
-vCreateTime = lens _vCreateTime (\ s a -> s{_vCreateTime = a}) . _Time;
-
--- | Indicates whether the volume will be encrypted.
-vEncrypted :: Lens' Volume Bool
-vEncrypted = lens _vEncrypted (\ s a -> s{_vEncrypted = a});
-
--- | The size of the volume, in GiBs.
-vSize :: Lens' Volume Int
-vSize = lens _vSize (\ s a -> s{_vSize = a});
-
--- | The snapshot from which the volume was created, if applicable.
-vSnapshotId :: Lens' Volume Text
-vSnapshotId = lens _vSnapshotId (\ s a -> s{_vSnapshotId = a});
-
--- | The volume state.
-vState :: Lens' Volume VolumeState
-vState = lens _vState (\ s a -> s{_vState = a});
-
--- | The ID of the volume.
-vVolumeId :: Lens' Volume Text
-vVolumeId = lens _vVolumeId (\ s a -> s{_vVolumeId = a});
-
--- | The volume type. This can be @gp2@ for General Purpose SSD, @io1@ for Provisioned IOPS SSD, @st1@ for Throughput Optimized HDD, @sc1@ for Cold HDD, or @standard@ for Magnetic volumes.
-vVolumeType :: Lens' Volume VolumeType
-vVolumeType = lens _vVolumeType (\ s a -> s{_vVolumeType = a});
-
-instance FromXML Volume where
-        parseXML x
-          = Volume' <$>
-              (x .@? "attachmentSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "iops")
-                <*> (x .@? "kmsKeyId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "availabilityZone")
-                <*> (x .@ "createTime")
-                <*> (x .@ "encrypted")
-                <*> (x .@ "size")
-                <*> (x .@ "snapshotId")
-                <*> (x .@ "status")
-                <*> (x .@ "volumeId")
-                <*> (x .@ "volumeType")
-
-instance Hashable Volume
-
-instance NFData Volume
-
--- | Describes volume attachment details.
---
---
---
--- /See:/ 'volumeAttachment' smart constructor.
-data VolumeAttachment = VolumeAttachment'
-    { _volInstanceId          :: !(Maybe Text)
-    , _volDeleteOnTermination :: !(Maybe Bool)
-    , _volState               :: !(Maybe VolumeAttachmentState)
-    , _volDevice              :: !(Maybe Text)
-    , _volVolumeId            :: !(Maybe Text)
-    , _volAttachTime          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'volInstanceId' - The ID of the instance.
---
--- * 'volDeleteOnTermination' - Indicates whether the EBS volume is deleted on instance termination.
---
--- * 'volState' - The attachment state of the volume.
---
--- * 'volDevice' - The device name.
---
--- * 'volVolumeId' - The ID of the volume.
---
--- * 'volAttachTime' - The time stamp when the attachment initiated.
-volumeAttachment
-    :: VolumeAttachment
-volumeAttachment =
-    VolumeAttachment'
-    { _volInstanceId = Nothing
-    , _volDeleteOnTermination = Nothing
-    , _volState = Nothing
-    , _volDevice = Nothing
-    , _volVolumeId = Nothing
-    , _volAttachTime = Nothing
-    }
-
--- | The ID of the instance.
-volInstanceId :: Lens' VolumeAttachment (Maybe Text)
-volInstanceId = lens _volInstanceId (\ s a -> s{_volInstanceId = a});
-
--- | Indicates whether the EBS volume is deleted on instance termination.
-volDeleteOnTermination :: Lens' VolumeAttachment (Maybe Bool)
-volDeleteOnTermination = lens _volDeleteOnTermination (\ s a -> s{_volDeleteOnTermination = a});
-
--- | The attachment state of the volume.
-volState :: Lens' VolumeAttachment (Maybe VolumeAttachmentState)
-volState = lens _volState (\ s a -> s{_volState = a});
-
--- | The device name.
-volDevice :: Lens' VolumeAttachment (Maybe Text)
-volDevice = lens _volDevice (\ s a -> s{_volDevice = a});
-
--- | The ID of the volume.
-volVolumeId :: Lens' VolumeAttachment (Maybe Text)
-volVolumeId = lens _volVolumeId (\ s a -> s{_volVolumeId = a});
-
--- | The time stamp when the attachment initiated.
-volAttachTime :: Lens' VolumeAttachment (Maybe UTCTime)
-volAttachTime = lens _volAttachTime (\ s a -> s{_volAttachTime = a}) . mapping _Time;
-
-instance FromXML VolumeAttachment where
-        parseXML x
-          = VolumeAttachment' <$>
-              (x .@? "instanceId") <*>
-                (x .@? "deleteOnTermination")
-                <*> (x .@? "status")
-                <*> (x .@? "device")
-                <*> (x .@? "volumeId")
-                <*> (x .@? "attachTime")
-
-instance Hashable VolumeAttachment
-
-instance NFData VolumeAttachment
-
--- | Describes an EBS volume.
---
---
---
--- /See:/ 'volumeDetail' smart constructor.
-newtype VolumeDetail = VolumeDetail'
-    { _vdSize :: Integer
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vdSize' - The size of the volume, in GiB.
-volumeDetail
-    :: Integer -- ^ 'vdSize'
-    -> VolumeDetail
-volumeDetail pSize_ =
-    VolumeDetail'
-    { _vdSize = pSize_
-    }
-
--- | The size of the volume, in GiB.
-vdSize :: Lens' VolumeDetail Integer
-vdSize = lens _vdSize (\ s a -> s{_vdSize = a});
-
-instance Hashable VolumeDetail
-
-instance NFData VolumeDetail
-
-instance ToQuery VolumeDetail where
-        toQuery VolumeDetail'{..}
-          = mconcat ["Size" =: _vdSize]
-
--- | Describes a volume status operation code.
---
---
---
--- /See:/ 'volumeStatusAction' smart constructor.
-data VolumeStatusAction = VolumeStatusAction'
-    { _vsaEventType   :: !(Maybe Text)
-    , _vsaCode        :: !(Maybe Text)
-    , _vsaDescription :: !(Maybe Text)
-    , _vsaEventId     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusAction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsaEventType' - The event type associated with this operation.
---
--- * 'vsaCode' - The code identifying the operation, for example, @enable-volume-io@ .
---
--- * 'vsaDescription' - A description of the operation.
---
--- * 'vsaEventId' - The ID of the event associated with this operation.
-volumeStatusAction
-    :: VolumeStatusAction
-volumeStatusAction =
-    VolumeStatusAction'
-    { _vsaEventType = Nothing
-    , _vsaCode = Nothing
-    , _vsaDescription = Nothing
-    , _vsaEventId = Nothing
-    }
-
--- | The event type associated with this operation.
-vsaEventType :: Lens' VolumeStatusAction (Maybe Text)
-vsaEventType = lens _vsaEventType (\ s a -> s{_vsaEventType = a});
-
--- | The code identifying the operation, for example, @enable-volume-io@ .
-vsaCode :: Lens' VolumeStatusAction (Maybe Text)
-vsaCode = lens _vsaCode (\ s a -> s{_vsaCode = a});
-
--- | A description of the operation.
-vsaDescription :: Lens' VolumeStatusAction (Maybe Text)
-vsaDescription = lens _vsaDescription (\ s a -> s{_vsaDescription = a});
-
--- | The ID of the event associated with this operation.
-vsaEventId :: Lens' VolumeStatusAction (Maybe Text)
-vsaEventId = lens _vsaEventId (\ s a -> s{_vsaEventId = a});
-
-instance FromXML VolumeStatusAction where
-        parseXML x
-          = VolumeStatusAction' <$>
-              (x .@? "eventType") <*> (x .@? "code") <*>
-                (x .@? "description")
-                <*> (x .@? "eventId")
-
-instance Hashable VolumeStatusAction
-
-instance NFData VolumeStatusAction
-
--- | Describes a volume status.
---
---
---
--- /See:/ 'volumeStatusDetails' smart constructor.
-data VolumeStatusDetails = VolumeStatusDetails'
-    { _vsdStatus :: !(Maybe Text)
-    , _vsdName   :: !(Maybe VolumeStatusName)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsdStatus' - The intended status of the volume status.
---
--- * 'vsdName' - The name of the volume status.
-volumeStatusDetails
-    :: VolumeStatusDetails
-volumeStatusDetails =
-    VolumeStatusDetails'
-    { _vsdStatus = Nothing
-    , _vsdName = Nothing
-    }
-
--- | The intended status of the volume status.
-vsdStatus :: Lens' VolumeStatusDetails (Maybe Text)
-vsdStatus = lens _vsdStatus (\ s a -> s{_vsdStatus = a});
-
--- | The name of the volume status.
-vsdName :: Lens' VolumeStatusDetails (Maybe VolumeStatusName)
-vsdName = lens _vsdName (\ s a -> s{_vsdName = a});
-
-instance FromXML VolumeStatusDetails where
-        parseXML x
-          = VolumeStatusDetails' <$>
-              (x .@? "status") <*> (x .@? "name")
-
-instance Hashable VolumeStatusDetails
-
-instance NFData VolumeStatusDetails
-
--- | Describes a volume status event.
---
---
---
--- /See:/ 'volumeStatusEvent' smart constructor.
-data VolumeStatusEvent = VolumeStatusEvent'
-    { _vseNotBefore   :: !(Maybe ISO8601)
-    , _vseEventType   :: !(Maybe Text)
-    , _vseDescription :: !(Maybe Text)
-    , _vseNotAfter    :: !(Maybe ISO8601)
-    , _vseEventId     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vseNotBefore' - The earliest start time of the event.
---
--- * 'vseEventType' - The type of this event.
---
--- * 'vseDescription' - A description of the event.
---
--- * 'vseNotAfter' - The latest end time of the event.
---
--- * 'vseEventId' - The ID of this event.
-volumeStatusEvent
-    :: VolumeStatusEvent
-volumeStatusEvent =
-    VolumeStatusEvent'
-    { _vseNotBefore = Nothing
-    , _vseEventType = Nothing
-    , _vseDescription = Nothing
-    , _vseNotAfter = Nothing
-    , _vseEventId = Nothing
-    }
-
--- | The earliest start time of the event.
-vseNotBefore :: Lens' VolumeStatusEvent (Maybe UTCTime)
-vseNotBefore = lens _vseNotBefore (\ s a -> s{_vseNotBefore = a}) . mapping _Time;
-
--- | The type of this event.
-vseEventType :: Lens' VolumeStatusEvent (Maybe Text)
-vseEventType = lens _vseEventType (\ s a -> s{_vseEventType = a});
-
--- | A description of the event.
-vseDescription :: Lens' VolumeStatusEvent (Maybe Text)
-vseDescription = lens _vseDescription (\ s a -> s{_vseDescription = a});
-
--- | The latest end time of the event.
-vseNotAfter :: Lens' VolumeStatusEvent (Maybe UTCTime)
-vseNotAfter = lens _vseNotAfter (\ s a -> s{_vseNotAfter = a}) . mapping _Time;
-
--- | The ID of this event.
-vseEventId :: Lens' VolumeStatusEvent (Maybe Text)
-vseEventId = lens _vseEventId (\ s a -> s{_vseEventId = a});
-
-instance FromXML VolumeStatusEvent where
-        parseXML x
-          = VolumeStatusEvent' <$>
-              (x .@? "notBefore") <*> (x .@? "eventType") <*>
-                (x .@? "description")
-                <*> (x .@? "notAfter")
-                <*> (x .@? "eventId")
-
-instance Hashable VolumeStatusEvent
-
-instance NFData VolumeStatusEvent
-
--- | Describes the status of a volume.
---
---
---
--- /See:/ 'volumeStatusInfo' smart constructor.
-data VolumeStatusInfo = VolumeStatusInfo'
-    { _vsiStatus  :: !(Maybe VolumeStatusInfoStatus)
-    , _vsiDetails :: !(Maybe [VolumeStatusDetails])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsiStatus' - The status of the volume.
---
--- * 'vsiDetails' - The details of the volume status.
-volumeStatusInfo
-    :: VolumeStatusInfo
-volumeStatusInfo =
-    VolumeStatusInfo'
-    { _vsiStatus = Nothing
-    , _vsiDetails = Nothing
-    }
-
--- | The status of the volume.
-vsiStatus :: Lens' VolumeStatusInfo (Maybe VolumeStatusInfoStatus)
-vsiStatus = lens _vsiStatus (\ s a -> s{_vsiStatus = a});
-
--- | The details of the volume status.
-vsiDetails :: Lens' VolumeStatusInfo [VolumeStatusDetails]
-vsiDetails = lens _vsiDetails (\ s a -> s{_vsiDetails = a}) . _Default . _Coerce;
-
-instance FromXML VolumeStatusInfo where
-        parseXML x
-          = VolumeStatusInfo' <$>
-              (x .@? "status") <*>
-                (x .@? "details" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
-instance Hashable VolumeStatusInfo
-
-instance NFData VolumeStatusInfo
-
--- | Describes the volume status.
---
---
---
--- /See:/ 'volumeStatusItem' smart constructor.
-data VolumeStatusItem = VolumeStatusItem'
-    { _vsiVolumeStatus     :: !(Maybe VolumeStatusInfo)
-    , _vsiActions          :: !(Maybe [VolumeStatusAction])
-    , _vsiEvents           :: !(Maybe [VolumeStatusEvent])
-    , _vsiAvailabilityZone :: !(Maybe Text)
-    , _vsiVolumeId         :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsiVolumeStatus' - The volume status.
---
--- * 'vsiActions' - The details of the operation.
---
--- * 'vsiEvents' - A list of events associated with the volume.
---
--- * 'vsiAvailabilityZone' - The Availability Zone of the volume.
---
--- * 'vsiVolumeId' - The volume ID.
-volumeStatusItem
-    :: VolumeStatusItem
-volumeStatusItem =
-    VolumeStatusItem'
-    { _vsiVolumeStatus = Nothing
-    , _vsiActions = Nothing
-    , _vsiEvents = Nothing
-    , _vsiAvailabilityZone = Nothing
-    , _vsiVolumeId = Nothing
-    }
-
--- | The volume status.
-vsiVolumeStatus :: Lens' VolumeStatusItem (Maybe VolumeStatusInfo)
-vsiVolumeStatus = lens _vsiVolumeStatus (\ s a -> s{_vsiVolumeStatus = a});
-
--- | The details of the operation.
-vsiActions :: Lens' VolumeStatusItem [VolumeStatusAction]
-vsiActions = lens _vsiActions (\ s a -> s{_vsiActions = a}) . _Default . _Coerce;
-
--- | A list of events associated with the volume.
-vsiEvents :: Lens' VolumeStatusItem [VolumeStatusEvent]
-vsiEvents = lens _vsiEvents (\ s a -> s{_vsiEvents = a}) . _Default . _Coerce;
-
--- | The Availability Zone of the volume.
-vsiAvailabilityZone :: Lens' VolumeStatusItem (Maybe Text)
-vsiAvailabilityZone = lens _vsiAvailabilityZone (\ s a -> s{_vsiAvailabilityZone = a});
-
--- | The volume ID.
-vsiVolumeId :: Lens' VolumeStatusItem (Maybe Text)
-vsiVolumeId = lens _vsiVolumeId (\ s a -> s{_vsiVolumeId = a});
-
-instance FromXML VolumeStatusItem where
-        parseXML x
-          = VolumeStatusItem' <$>
-              (x .@? "volumeStatus") <*>
-                (x .@? "actionsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "eventsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "volumeId")
-
-instance Hashable VolumeStatusItem
-
-instance NFData VolumeStatusItem
diff --git a/gen/Network/AWS/EC2/Types/Sum.hs b/gen/Network/AWS/EC2/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/Types/Sum.hs
+++ /dev/null
@@ -1,3038 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.Types.Sum
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.EC2.Types.Sum where
-
-import           Network.AWS.EC2.Internal
-import           Network.AWS.Prelude
-
-data AccountAttributeName
-    = DefaultVPC
-    | SupportedPlatforms
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AccountAttributeName where
-    parser = takeLowerText >>= \case
-        "default-vpc" -> pure DefaultVPC
-        "supported-platforms" -> pure SupportedPlatforms
-        e -> fromTextError $ "Failure parsing AccountAttributeName from value: '" <> e
-           <> "'. Accepted values: default-vpc, supported-platforms"
-
-instance ToText AccountAttributeName where
-    toText = \case
-        DefaultVPC -> "default-vpc"
-        SupportedPlatforms -> "supported-platforms"
-
-instance Hashable     AccountAttributeName
-instance NFData       AccountAttributeName
-instance ToByteString AccountAttributeName
-instance ToQuery      AccountAttributeName
-instance ToHeader     AccountAttributeName
-
-data ActivityStatus
-    = Error'
-    | Fulfilled
-    | PendingFulfillment
-    | PendingTermination
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ActivityStatus where
-    parser = takeLowerText >>= \case
-        "error" -> pure Error'
-        "fulfilled" -> pure Fulfilled
-        "pending_fulfillment" -> pure PendingFulfillment
-        "pending_termination" -> pure PendingTermination
-        e -> fromTextError $ "Failure parsing ActivityStatus from value: '" <> e
-           <> "'. Accepted values: error, fulfilled, pending_fulfillment, pending_termination"
-
-instance ToText ActivityStatus where
-    toText = \case
-        Error' -> "error"
-        Fulfilled -> "fulfilled"
-        PendingFulfillment -> "pending_fulfillment"
-        PendingTermination -> "pending_termination"
-
-instance Hashable     ActivityStatus
-instance NFData       ActivityStatus
-instance ToByteString ActivityStatus
-instance ToQuery      ActivityStatus
-instance ToHeader     ActivityStatus
-
-instance FromXML ActivityStatus where
-    parseXML = parseXMLText "ActivityStatus"
-
-data AddressStatus
-    = InClassic
-    | InVPC
-    | MoveInProgress
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AddressStatus where
-    parser = takeLowerText >>= \case
-        "inclassic" -> pure InClassic
-        "invpc" -> pure InVPC
-        "moveinprogress" -> pure MoveInProgress
-        e -> fromTextError $ "Failure parsing AddressStatus from value: '" <> e
-           <> "'. Accepted values: inclassic, invpc, moveinprogress"
-
-instance ToText AddressStatus where
-    toText = \case
-        InClassic -> "InClassic"
-        InVPC -> "InVpc"
-        MoveInProgress -> "MoveInProgress"
-
-instance Hashable     AddressStatus
-instance NFData       AddressStatus
-instance ToByteString AddressStatus
-instance ToQuery      AddressStatus
-instance ToHeader     AddressStatus
-
-instance FromXML AddressStatus where
-    parseXML = parseXMLText "AddressStatus"
-
-data Affinity
-    = ADefault
-    | AHost
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText Affinity where
-    parser = takeLowerText >>= \case
-        "default" -> pure ADefault
-        "host" -> pure AHost
-        e -> fromTextError $ "Failure parsing Affinity from value: '" <> e
-           <> "'. Accepted values: default, host"
-
-instance ToText Affinity where
-    toText = \case
-        ADefault -> "default"
-        AHost -> "host"
-
-instance Hashable     Affinity
-instance NFData       Affinity
-instance ToByteString Affinity
-instance ToQuery      Affinity
-instance ToHeader     Affinity
-
-data AllocationState
-    = ASAvailable
-    | ASPermanentFailure
-    | ASReleased
-    | ASReleasedPermanentFailure
-    | ASUnderAssessment
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AllocationState where
-    parser = takeLowerText >>= \case
-        "available" -> pure ASAvailable
-        "permanent-failure" -> pure ASPermanentFailure
-        "released" -> pure ASReleased
-        "released-permanent-failure" -> pure ASReleasedPermanentFailure
-        "under-assessment" -> pure ASUnderAssessment
-        e -> fromTextError $ "Failure parsing AllocationState from value: '" <> e
-           <> "'. Accepted values: available, permanent-failure, released, released-permanent-failure, under-assessment"
-
-instance ToText AllocationState where
-    toText = \case
-        ASAvailable -> "available"
-        ASPermanentFailure -> "permanent-failure"
-        ASReleased -> "released"
-        ASReleasedPermanentFailure -> "released-permanent-failure"
-        ASUnderAssessment -> "under-assessment"
-
-instance Hashable     AllocationState
-instance NFData       AllocationState
-instance ToByteString AllocationState
-instance ToQuery      AllocationState
-instance ToHeader     AllocationState
-
-instance FromXML AllocationState where
-    parseXML = parseXMLText "AllocationState"
-
-data AllocationStrategy
-    = Diversified
-    | LowestPrice
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AllocationStrategy where
-    parser = takeLowerText >>= \case
-        "diversified" -> pure Diversified
-        "lowestprice" -> pure LowestPrice
-        e -> fromTextError $ "Failure parsing AllocationStrategy from value: '" <> e
-           <> "'. Accepted values: diversified, lowestprice"
-
-instance ToText AllocationStrategy where
-    toText = \case
-        Diversified -> "diversified"
-        LowestPrice -> "lowestPrice"
-
-instance Hashable     AllocationStrategy
-instance NFData       AllocationStrategy
-instance ToByteString AllocationStrategy
-instance ToQuery      AllocationStrategy
-instance ToHeader     AllocationStrategy
-
-instance FromXML AllocationStrategy where
-    parseXML = parseXMLText "AllocationStrategy"
-
-data ArchitectureValues
-    = I386
-    | X86_64
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ArchitectureValues where
-    parser = takeLowerText >>= \case
-        "i386" -> pure I386
-        "x86_64" -> pure X86_64
-        e -> fromTextError $ "Failure parsing ArchitectureValues from value: '" <> e
-           <> "'. Accepted values: i386, x86_64"
-
-instance ToText ArchitectureValues where
-    toText = \case
-        I386 -> "i386"
-        X86_64 -> "x86_64"
-
-instance Hashable     ArchitectureValues
-instance NFData       ArchitectureValues
-instance ToByteString ArchitectureValues
-instance ToQuery      ArchitectureValues
-instance ToHeader     ArchitectureValues
-
-instance FromXML ArchitectureValues where
-    parseXML = parseXMLText "ArchitectureValues"
-
-data AttachmentStatus
-    = AAttached
-    | AAttaching
-    | AAvailable
-    | ABusy
-    | ADetached
-    | ADetaching
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AttachmentStatus where
-    parser = takeLowerText >>= \case
-        "attached" -> pure AAttached
-        "attaching" -> pure AAttaching
-        "available" -> pure AAvailable
-        "busy" -> pure ABusy
-        "detached" -> pure ADetached
-        "detaching" -> pure ADetaching
-        e -> fromTextError $ "Failure parsing AttachmentStatus from value: '" <> e
-           <> "'. Accepted values: attached, attaching, available, busy, detached, detaching"
-
-instance ToText AttachmentStatus where
-    toText = \case
-        AAttached -> "attached"
-        AAttaching -> "attaching"
-        AAvailable -> "available"
-        ABusy -> "busy"
-        ADetached -> "detached"
-        ADetaching -> "detaching"
-
-instance Hashable     AttachmentStatus
-instance NFData       AttachmentStatus
-instance ToByteString AttachmentStatus
-instance ToQuery      AttachmentStatus
-instance ToHeader     AttachmentStatus
-
-instance FromXML AttachmentStatus where
-    parseXML = parseXMLText "AttachmentStatus"
-
-data AutoPlacement
-    = ON
-    | Off
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AutoPlacement where
-    parser = takeLowerText >>= \case
-        "on" -> pure ON
-        "off" -> pure Off
-        e -> fromTextError $ "Failure parsing AutoPlacement from value: '" <> e
-           <> "'. Accepted values: on, off"
-
-instance ToText AutoPlacement where
-    toText = \case
-        ON -> "on"
-        Off -> "off"
-
-instance Hashable     AutoPlacement
-instance NFData       AutoPlacement
-instance ToByteString AutoPlacement
-instance ToQuery      AutoPlacement
-instance ToHeader     AutoPlacement
-
-instance FromXML AutoPlacement where
-    parseXML = parseXMLText "AutoPlacement"
-
-data AvailabilityZoneState
-    = AZSAvailable
-    | AZSImpaired
-    | AZSInformation
-    | AZSUnavailable
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText AvailabilityZoneState where
-    parser = takeLowerText >>= \case
-        "available" -> pure AZSAvailable
-        "impaired" -> pure AZSImpaired
-        "information" -> pure AZSInformation
-        "unavailable" -> pure AZSUnavailable
-        e -> fromTextError $ "Failure parsing AvailabilityZoneState from value: '" <> e
-           <> "'. Accepted values: available, impaired, information, unavailable"
-
-instance ToText AvailabilityZoneState where
-    toText = \case
-        AZSAvailable -> "available"
-        AZSImpaired -> "impaired"
-        AZSInformation -> "information"
-        AZSUnavailable -> "unavailable"
-
-instance Hashable     AvailabilityZoneState
-instance NFData       AvailabilityZoneState
-instance ToByteString AvailabilityZoneState
-instance ToQuery      AvailabilityZoneState
-instance ToHeader     AvailabilityZoneState
-
-instance FromXML AvailabilityZoneState where
-    parseXML = parseXMLText "AvailabilityZoneState"
-
-data BatchState
-    = BSActive
-    | BSCancelled
-    | BSCancelledRunning
-    | BSCancelledTerminating
-    | BSFailed
-    | BSModifying
-    | BSSubmitted
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText BatchState where
-    parser = takeLowerText >>= \case
-        "active" -> pure BSActive
-        "cancelled" -> pure BSCancelled
-        "cancelled_running" -> pure BSCancelledRunning
-        "cancelled_terminating" -> pure BSCancelledTerminating
-        "failed" -> pure BSFailed
-        "modifying" -> pure BSModifying
-        "submitted" -> pure BSSubmitted
-        e -> fromTextError $ "Failure parsing BatchState from value: '" <> e
-           <> "'. Accepted values: active, cancelled, cancelled_running, cancelled_terminating, failed, modifying, submitted"
-
-instance ToText BatchState where
-    toText = \case
-        BSActive -> "active"
-        BSCancelled -> "cancelled"
-        BSCancelledRunning -> "cancelled_running"
-        BSCancelledTerminating -> "cancelled_terminating"
-        BSFailed -> "failed"
-        BSModifying -> "modifying"
-        BSSubmitted -> "submitted"
-
-instance Hashable     BatchState
-instance NFData       BatchState
-instance ToByteString BatchState
-instance ToQuery      BatchState
-instance ToHeader     BatchState
-
-instance FromXML BatchState where
-    parseXML = parseXMLText "BatchState"
-
-data BundleTaskState
-    = BTSBundling
-    | BTSCancelling
-    | BTSComplete
-    | BTSFailed
-    | BTSPending
-    | BTSStoring
-    | BTSWaitingForShutdown
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText BundleTaskState where
-    parser = takeLowerText >>= \case
-        "bundling" -> pure BTSBundling
-        "cancelling" -> pure BTSCancelling
-        "complete" -> pure BTSComplete
-        "failed" -> pure BTSFailed
-        "pending" -> pure BTSPending
-        "storing" -> pure BTSStoring
-        "waiting-for-shutdown" -> pure BTSWaitingForShutdown
-        e -> fromTextError $ "Failure parsing BundleTaskState from value: '" <> e
-           <> "'. Accepted values: bundling, cancelling, complete, failed, pending, storing, waiting-for-shutdown"
-
-instance ToText BundleTaskState where
-    toText = \case
-        BTSBundling -> "bundling"
-        BTSCancelling -> "cancelling"
-        BTSComplete -> "complete"
-        BTSFailed -> "failed"
-        BTSPending -> "pending"
-        BTSStoring -> "storing"
-        BTSWaitingForShutdown -> "waiting-for-shutdown"
-
-instance Hashable     BundleTaskState
-instance NFData       BundleTaskState
-instance ToByteString BundleTaskState
-instance ToQuery      BundleTaskState
-instance ToHeader     BundleTaskState
-
-instance FromXML BundleTaskState where
-    parseXML = parseXMLText "BundleTaskState"
-
-data CancelBatchErrorCode
-    = FleetRequestIdDoesNotExist
-    | FleetRequestIdMalformed
-    | FleetRequestNotInCancellableState
-    | UnexpectedError
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText CancelBatchErrorCode where
-    parser = takeLowerText >>= \case
-        "fleetrequestiddoesnotexist" -> pure FleetRequestIdDoesNotExist
-        "fleetrequestidmalformed" -> pure FleetRequestIdMalformed
-        "fleetrequestnotincancellablestate" -> pure FleetRequestNotInCancellableState
-        "unexpectederror" -> pure UnexpectedError
-        e -> fromTextError $ "Failure parsing CancelBatchErrorCode from value: '" <> e
-           <> "'. Accepted values: fleetrequestiddoesnotexist, fleetrequestidmalformed, fleetrequestnotincancellablestate, unexpectederror"
-
-instance ToText CancelBatchErrorCode where
-    toText = \case
-        FleetRequestIdDoesNotExist -> "fleetRequestIdDoesNotExist"
-        FleetRequestIdMalformed -> "fleetRequestIdMalformed"
-        FleetRequestNotInCancellableState -> "fleetRequestNotInCancellableState"
-        UnexpectedError -> "unexpectedError"
-
-instance Hashable     CancelBatchErrorCode
-instance NFData       CancelBatchErrorCode
-instance ToByteString CancelBatchErrorCode
-instance ToQuery      CancelBatchErrorCode
-instance ToHeader     CancelBatchErrorCode
-
-instance FromXML CancelBatchErrorCode where
-    parseXML = parseXMLText "CancelBatchErrorCode"
-
-data CancelSpotInstanceRequestState
-    = CSIRSActive
-    | CSIRSCancelled
-    | CSIRSClosed
-    | CSIRSCompleted
-    | CSIRSOpen
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText CancelSpotInstanceRequestState where
-    parser = takeLowerText >>= \case
-        "active" -> pure CSIRSActive
-        "cancelled" -> pure CSIRSCancelled
-        "closed" -> pure CSIRSClosed
-        "completed" -> pure CSIRSCompleted
-        "open" -> pure CSIRSOpen
-        e -> fromTextError $ "Failure parsing CancelSpotInstanceRequestState from value: '" <> e
-           <> "'. Accepted values: active, cancelled, closed, completed, open"
-
-instance ToText CancelSpotInstanceRequestState where
-    toText = \case
-        CSIRSActive -> "active"
-        CSIRSCancelled -> "cancelled"
-        CSIRSClosed -> "closed"
-        CSIRSCompleted -> "completed"
-        CSIRSOpen -> "open"
-
-instance Hashable     CancelSpotInstanceRequestState
-instance NFData       CancelSpotInstanceRequestState
-instance ToByteString CancelSpotInstanceRequestState
-instance ToQuery      CancelSpotInstanceRequestState
-instance ToHeader     CancelSpotInstanceRequestState
-
-instance FromXML CancelSpotInstanceRequestState where
-    parseXML = parseXMLText "CancelSpotInstanceRequestState"
-
-data ContainerFormat =
-    Ova
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ContainerFormat where
-    parser = takeLowerText >>= \case
-        "ova" -> pure Ova
-        e -> fromTextError $ "Failure parsing ContainerFormat from value: '" <> e
-           <> "'. Accepted values: ova"
-
-instance ToText ContainerFormat where
-    toText = \case
-        Ova -> "ova"
-
-instance Hashable     ContainerFormat
-instance NFData       ContainerFormat
-instance ToByteString ContainerFormat
-instance ToQuery      ContainerFormat
-instance ToHeader     ContainerFormat
-
-instance FromXML ContainerFormat where
-    parseXML = parseXMLText "ContainerFormat"
-
-data ConversionTaskState
-    = CTSActive
-    | CTSCancelled
-    | CTSCancelling
-    | CTSCompleted
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ConversionTaskState where
-    parser = takeLowerText >>= \case
-        "active" -> pure CTSActive
-        "cancelled" -> pure CTSCancelled
-        "cancelling" -> pure CTSCancelling
-        "completed" -> pure CTSCompleted
-        e -> fromTextError $ "Failure parsing ConversionTaskState from value: '" <> e
-           <> "'. Accepted values: active, cancelled, cancelling, completed"
-
-instance ToText ConversionTaskState where
-    toText = \case
-        CTSActive -> "active"
-        CTSCancelled -> "cancelled"
-        CTSCancelling -> "cancelling"
-        CTSCompleted -> "completed"
-
-instance Hashable     ConversionTaskState
-instance NFData       ConversionTaskState
-instance ToByteString ConversionTaskState
-instance ToQuery      ConversionTaskState
-instance ToHeader     ConversionTaskState
-
-instance FromXML ConversionTaskState where
-    parseXML = parseXMLText "ConversionTaskState"
-
-data CurrencyCodeValues =
-    Usd
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText CurrencyCodeValues where
-    parser = takeLowerText >>= \case
-        "usd" -> pure Usd
-        e -> fromTextError $ "Failure parsing CurrencyCodeValues from value: '" <> e
-           <> "'. Accepted values: usd"
-
-instance ToText CurrencyCodeValues where
-    toText = \case
-        Usd -> "USD"
-
-instance Hashable     CurrencyCodeValues
-instance NFData       CurrencyCodeValues
-instance ToByteString CurrencyCodeValues
-instance ToQuery      CurrencyCodeValues
-instance ToHeader     CurrencyCodeValues
-
-instance FromXML CurrencyCodeValues where
-    parseXML = parseXMLText "CurrencyCodeValues"
-
-data DatafeedSubscriptionState
-    = DSSActive
-    | DSSInactive
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText DatafeedSubscriptionState where
-    parser = takeLowerText >>= \case
-        "active" -> pure DSSActive
-        "inactive" -> pure DSSInactive
-        e -> fromTextError $ "Failure parsing DatafeedSubscriptionState from value: '" <> e
-           <> "'. Accepted values: active, inactive"
-
-instance ToText DatafeedSubscriptionState where
-    toText = \case
-        DSSActive -> "Active"
-        DSSInactive -> "Inactive"
-
-instance Hashable     DatafeedSubscriptionState
-instance NFData       DatafeedSubscriptionState
-instance ToByteString DatafeedSubscriptionState
-instance ToQuery      DatafeedSubscriptionState
-instance ToHeader     DatafeedSubscriptionState
-
-instance FromXML DatafeedSubscriptionState where
-    parseXML = parseXMLText "DatafeedSubscriptionState"
-
-data DeviceType
-    = EBS
-    | InstanceStore
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText DeviceType where
-    parser = takeLowerText >>= \case
-        "ebs" -> pure EBS
-        "instance-store" -> pure InstanceStore
-        e -> fromTextError $ "Failure parsing DeviceType from value: '" <> e
-           <> "'. Accepted values: ebs, instance-store"
-
-instance ToText DeviceType where
-    toText = \case
-        EBS -> "ebs"
-        InstanceStore -> "instance-store"
-
-instance Hashable     DeviceType
-instance NFData       DeviceType
-instance ToByteString DeviceType
-instance ToQuery      DeviceType
-instance ToHeader     DeviceType
-
-instance FromXML DeviceType where
-    parseXML = parseXMLText "DeviceType"
-
-data DiskImageFormat
-    = Raw
-    | VHD
-    | VMDK
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText DiskImageFormat where
-    parser = takeLowerText >>= \case
-        "raw" -> pure Raw
-        "vhd" -> pure VHD
-        "vmdk" -> pure VMDK
-        e -> fromTextError $ "Failure parsing DiskImageFormat from value: '" <> e
-           <> "'. Accepted values: raw, vhd, vmdk"
-
-instance ToText DiskImageFormat where
-    toText = \case
-        Raw -> "RAW"
-        VHD -> "VHD"
-        VMDK -> "VMDK"
-
-instance Hashable     DiskImageFormat
-instance NFData       DiskImageFormat
-instance ToByteString DiskImageFormat
-instance ToQuery      DiskImageFormat
-instance ToHeader     DiskImageFormat
-
-instance FromXML DiskImageFormat where
-    parseXML = parseXMLText "DiskImageFormat"
-
-data DomainType
-    = DTStandard
-    | DTVPC
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText DomainType where
-    parser = takeLowerText >>= \case
-        "standard" -> pure DTStandard
-        "vpc" -> pure DTVPC
-        e -> fromTextError $ "Failure parsing DomainType from value: '" <> e
-           <> "'. Accepted values: standard, vpc"
-
-instance ToText DomainType where
-    toText = \case
-        DTStandard -> "standard"
-        DTVPC -> "vpc"
-
-instance Hashable     DomainType
-instance NFData       DomainType
-instance ToByteString DomainType
-instance ToQuery      DomainType
-instance ToHeader     DomainType
-
-instance FromXML DomainType where
-    parseXML = parseXMLText "DomainType"
-
-data EventCode
-    = InstanceReboot
-    | InstanceRetirement
-    | InstanceStop
-    | SystemMaintenance
-    | SystemReboot
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText EventCode where
-    parser = takeLowerText >>= \case
-        "instance-reboot" -> pure InstanceReboot
-        "instance-retirement" -> pure InstanceRetirement
-        "instance-stop" -> pure InstanceStop
-        "system-maintenance" -> pure SystemMaintenance
-        "system-reboot" -> pure SystemReboot
-        e -> fromTextError $ "Failure parsing EventCode from value: '" <> e
-           <> "'. Accepted values: instance-reboot, instance-retirement, instance-stop, system-maintenance, system-reboot"
-
-instance ToText EventCode where
-    toText = \case
-        InstanceReboot -> "instance-reboot"
-        InstanceRetirement -> "instance-retirement"
-        InstanceStop -> "instance-stop"
-        SystemMaintenance -> "system-maintenance"
-        SystemReboot -> "system-reboot"
-
-instance Hashable     EventCode
-instance NFData       EventCode
-instance ToByteString EventCode
-instance ToQuery      EventCode
-instance ToHeader     EventCode
-
-instance FromXML EventCode where
-    parseXML = parseXMLText "EventCode"
-
-data EventType
-    = ETError'
-    | ETFleetRequestChange
-    | ETInstanceChange
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText EventType where
-    parser = takeLowerText >>= \case
-        "error" -> pure ETError'
-        "fleetrequestchange" -> pure ETFleetRequestChange
-        "instancechange" -> pure ETInstanceChange
-        e -> fromTextError $ "Failure parsing EventType from value: '" <> e
-           <> "'. Accepted values: error, fleetrequestchange, instancechange"
-
-instance ToText EventType where
-    toText = \case
-        ETError' -> "error"
-        ETFleetRequestChange -> "fleetRequestChange"
-        ETInstanceChange -> "instanceChange"
-
-instance Hashable     EventType
-instance NFData       EventType
-instance ToByteString EventType
-instance ToQuery      EventType
-instance ToHeader     EventType
-
-instance FromXML EventType where
-    parseXML = parseXMLText "EventType"
-
-data ExcessCapacityTerminationPolicy
-    = ECTPDefault
-    | ECTPNoTermination
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ExcessCapacityTerminationPolicy where
-    parser = takeLowerText >>= \case
-        "default" -> pure ECTPDefault
-        "notermination" -> pure ECTPNoTermination
-        e -> fromTextError $ "Failure parsing ExcessCapacityTerminationPolicy from value: '" <> e
-           <> "'. Accepted values: default, notermination"
-
-instance ToText ExcessCapacityTerminationPolicy where
-    toText = \case
-        ECTPDefault -> "default"
-        ECTPNoTermination -> "noTermination"
-
-instance Hashable     ExcessCapacityTerminationPolicy
-instance NFData       ExcessCapacityTerminationPolicy
-instance ToByteString ExcessCapacityTerminationPolicy
-instance ToQuery      ExcessCapacityTerminationPolicy
-instance ToHeader     ExcessCapacityTerminationPolicy
-
-instance FromXML ExcessCapacityTerminationPolicy where
-    parseXML = parseXMLText "ExcessCapacityTerminationPolicy"
-
-data ExportEnvironment
-    = Citrix
-    | Microsoft
-    | VMware
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ExportEnvironment where
-    parser = takeLowerText >>= \case
-        "citrix" -> pure Citrix
-        "microsoft" -> pure Microsoft
-        "vmware" -> pure VMware
-        e -> fromTextError $ "Failure parsing ExportEnvironment from value: '" <> e
-           <> "'. Accepted values: citrix, microsoft, vmware"
-
-instance ToText ExportEnvironment where
-    toText = \case
-        Citrix -> "citrix"
-        Microsoft -> "microsoft"
-        VMware -> "vmware"
-
-instance Hashable     ExportEnvironment
-instance NFData       ExportEnvironment
-instance ToByteString ExportEnvironment
-instance ToQuery      ExportEnvironment
-instance ToHeader     ExportEnvironment
-
-instance FromXML ExportEnvironment where
-    parseXML = parseXMLText "ExportEnvironment"
-
-data ExportTaskState
-    = ETSActive
-    | ETSCancelled
-    | ETSCancelling
-    | ETSCompleted
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ExportTaskState where
-    parser = takeLowerText >>= \case
-        "active" -> pure ETSActive
-        "cancelled" -> pure ETSCancelled
-        "cancelling" -> pure ETSCancelling
-        "completed" -> pure ETSCompleted
-        e -> fromTextError $ "Failure parsing ExportTaskState from value: '" <> e
-           <> "'. Accepted values: active, cancelled, cancelling, completed"
-
-instance ToText ExportTaskState where
-    toText = \case
-        ETSActive -> "active"
-        ETSCancelled -> "cancelled"
-        ETSCancelling -> "cancelling"
-        ETSCompleted -> "completed"
-
-instance Hashable     ExportTaskState
-instance NFData       ExportTaskState
-instance ToByteString ExportTaskState
-instance ToQuery      ExportTaskState
-instance ToHeader     ExportTaskState
-
-instance FromXML ExportTaskState where
-    parseXML = parseXMLText "ExportTaskState"
-
-data FleetType
-    = FTMaintain
-    | FTRequest
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText FleetType where
-    parser = takeLowerText >>= \case
-        "maintain" -> pure FTMaintain
-        "request" -> pure FTRequest
-        e -> fromTextError $ "Failure parsing FleetType from value: '" <> e
-           <> "'. Accepted values: maintain, request"
-
-instance ToText FleetType where
-    toText = \case
-        FTMaintain -> "maintain"
-        FTRequest -> "request"
-
-instance Hashable     FleetType
-instance NFData       FleetType
-instance ToByteString FleetType
-instance ToQuery      FleetType
-instance ToHeader     FleetType
-
-instance FromXML FleetType where
-    parseXML = parseXMLText "FleetType"
-
-data FlowLogsResourceType
-    = FLRTNetworkInterface
-    | FLRTSubnet
-    | FLRTVPC
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText FlowLogsResourceType where
-    parser = takeLowerText >>= \case
-        "networkinterface" -> pure FLRTNetworkInterface
-        "subnet" -> pure FLRTSubnet
-        "vpc" -> pure FLRTVPC
-        e -> fromTextError $ "Failure parsing FlowLogsResourceType from value: '" <> e
-           <> "'. Accepted values: networkinterface, subnet, vpc"
-
-instance ToText FlowLogsResourceType where
-    toText = \case
-        FLRTNetworkInterface -> "NetworkInterface"
-        FLRTSubnet -> "Subnet"
-        FLRTVPC -> "VPC"
-
-instance Hashable     FlowLogsResourceType
-instance NFData       FlowLogsResourceType
-instance ToByteString FlowLogsResourceType
-instance ToQuery      FlowLogsResourceType
-instance ToHeader     FlowLogsResourceType
-
-data GatewayType =
-    IPsec_1
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText GatewayType where
-    parser = takeLowerText >>= \case
-        "ipsec.1" -> pure IPsec_1
-        e -> fromTextError $ "Failure parsing GatewayType from value: '" <> e
-           <> "'. Accepted values: ipsec.1"
-
-instance ToText GatewayType where
-    toText = \case
-        IPsec_1 -> "ipsec.1"
-
-instance Hashable     GatewayType
-instance NFData       GatewayType
-instance ToByteString GatewayType
-instance ToQuery      GatewayType
-instance ToHeader     GatewayType
-
-instance FromXML GatewayType where
-    parseXML = parseXMLText "GatewayType"
-
-data HostTenancy
-    = HTDedicated
-    | HTHost
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText HostTenancy where
-    parser = takeLowerText >>= \case
-        "dedicated" -> pure HTDedicated
-        "host" -> pure HTHost
-        e -> fromTextError $ "Failure parsing HostTenancy from value: '" <> e
-           <> "'. Accepted values: dedicated, host"
-
-instance ToText HostTenancy where
-    toText = \case
-        HTDedicated -> "dedicated"
-        HTHost -> "host"
-
-instance Hashable     HostTenancy
-instance NFData       HostTenancy
-instance ToByteString HostTenancy
-instance ToQuery      HostTenancy
-instance ToHeader     HostTenancy
-
-data HypervisorType
-    = Ovm
-    | Xen
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText HypervisorType where
-    parser = takeLowerText >>= \case
-        "ovm" -> pure Ovm
-        "xen" -> pure Xen
-        e -> fromTextError $ "Failure parsing HypervisorType from value: '" <> e
-           <> "'. Accepted values: ovm, xen"
-
-instance ToText HypervisorType where
-    toText = \case
-        Ovm -> "ovm"
-        Xen -> "xen"
-
-instance Hashable     HypervisorType
-instance NFData       HypervisorType
-instance ToByteString HypervisorType
-instance ToQuery      HypervisorType
-instance ToHeader     HypervisorType
-
-instance FromXML HypervisorType where
-    parseXML = parseXMLText "HypervisorType"
-
-data ImageAttributeName
-    = BlockDeviceMapping
-    | Description
-    | Kernel
-    | LaunchPermission
-    | ProductCodes
-    | RAMDisk
-    | SRIOVNetSupport
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ImageAttributeName where
-    parser = takeLowerText >>= \case
-        "blockdevicemapping" -> pure BlockDeviceMapping
-        "description" -> pure Description
-        "kernel" -> pure Kernel
-        "launchpermission" -> pure LaunchPermission
-        "productcodes" -> pure ProductCodes
-        "ramdisk" -> pure RAMDisk
-        "sriovnetsupport" -> pure SRIOVNetSupport
-        e -> fromTextError $ "Failure parsing ImageAttributeName from value: '" <> e
-           <> "'. Accepted values: blockdevicemapping, description, kernel, launchpermission, productcodes, ramdisk, sriovnetsupport"
-
-instance ToText ImageAttributeName where
-    toText = \case
-        BlockDeviceMapping -> "blockDeviceMapping"
-        Description -> "description"
-        Kernel -> "kernel"
-        LaunchPermission -> "launchPermission"
-        ProductCodes -> "productCodes"
-        RAMDisk -> "ramdisk"
-        SRIOVNetSupport -> "sriovNetSupport"
-
-instance Hashable     ImageAttributeName
-instance NFData       ImageAttributeName
-instance ToByteString ImageAttributeName
-instance ToQuery      ImageAttributeName
-instance ToHeader     ImageAttributeName
-
-data ImageState
-    = ISAvailable
-    | ISDeregistered
-    | ISError'
-    | ISFailed
-    | ISInvalid
-    | ISPending
-    | ISTransient
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ImageState where
-    parser = takeLowerText >>= \case
-        "available" -> pure ISAvailable
-        "deregistered" -> pure ISDeregistered
-        "error" -> pure ISError'
-        "failed" -> pure ISFailed
-        "invalid" -> pure ISInvalid
-        "pending" -> pure ISPending
-        "transient" -> pure ISTransient
-        e -> fromTextError $ "Failure parsing ImageState from value: '" <> e
-           <> "'. Accepted values: available, deregistered, error, failed, invalid, pending, transient"
-
-instance ToText ImageState where
-    toText = \case
-        ISAvailable -> "available"
-        ISDeregistered -> "deregistered"
-        ISError' -> "error"
-        ISFailed -> "failed"
-        ISInvalid -> "invalid"
-        ISPending -> "pending"
-        ISTransient -> "transient"
-
-instance Hashable     ImageState
-instance NFData       ImageState
-instance ToByteString ImageState
-instance ToQuery      ImageState
-instance ToHeader     ImageState
-
-instance FromXML ImageState where
-    parseXML = parseXMLText "ImageState"
-
-data ImageTypeValues
-    = ITVKernel
-    | ITVMachine
-    | ITVRAMDisk
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ImageTypeValues where
-    parser = takeLowerText >>= \case
-        "kernel" -> pure ITVKernel
-        "machine" -> pure ITVMachine
-        "ramdisk" -> pure ITVRAMDisk
-        e -> fromTextError $ "Failure parsing ImageTypeValues from value: '" <> e
-           <> "'. Accepted values: kernel, machine, ramdisk"
-
-instance ToText ImageTypeValues where
-    toText = \case
-        ITVKernel -> "kernel"
-        ITVMachine -> "machine"
-        ITVRAMDisk -> "ramdisk"
-
-instance Hashable     ImageTypeValues
-instance NFData       ImageTypeValues
-instance ToByteString ImageTypeValues
-instance ToQuery      ImageTypeValues
-instance ToHeader     ImageTypeValues
-
-instance FromXML ImageTypeValues where
-    parseXML = parseXMLText "ImageTypeValues"
-
-data InstanceAttributeName
-    = IANBlockDeviceMapping
-    | IANDisableAPITermination
-    | IANEBSOptimized
-    | IANEnaSupport
-    | IANGroupSet
-    | IANInstanceInitiatedShutdownBehavior
-    | IANInstanceType
-    | IANKernel
-    | IANProductCodes
-    | IANRAMDisk
-    | IANRootDeviceName
-    | IANSRIOVNetSupport
-    | IANSourceDestCheck
-    | IANUserData
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText InstanceAttributeName where
-    parser = takeLowerText >>= \case
-        "blockdevicemapping" -> pure IANBlockDeviceMapping
-        "disableapitermination" -> pure IANDisableAPITermination
-        "ebsoptimized" -> pure IANEBSOptimized
-        "enasupport" -> pure IANEnaSupport
-        "groupset" -> pure IANGroupSet
-        "instanceinitiatedshutdownbehavior" -> pure IANInstanceInitiatedShutdownBehavior
-        "instancetype" -> pure IANInstanceType
-        "kernel" -> pure IANKernel
-        "productcodes" -> pure IANProductCodes
-        "ramdisk" -> pure IANRAMDisk
-        "rootdevicename" -> pure IANRootDeviceName
-        "sriovnetsupport" -> pure IANSRIOVNetSupport
-        "sourcedestcheck" -> pure IANSourceDestCheck
-        "userdata" -> pure IANUserData
-        e -> fromTextError $ "Failure parsing InstanceAttributeName from value: '" <> e
-           <> "'. Accepted values: blockdevicemapping, disableapitermination, ebsoptimized, enasupport, groupset, instanceinitiatedshutdownbehavior, instancetype, kernel, productcodes, ramdisk, rootdevicename, sriovnetsupport, sourcedestcheck, userdata"
-
-instance ToText InstanceAttributeName where
-    toText = \case
-        IANBlockDeviceMapping -> "blockDeviceMapping"
-        IANDisableAPITermination -> "disableApiTermination"
-        IANEBSOptimized -> "ebsOptimized"
-        IANEnaSupport -> "enaSupport"
-        IANGroupSet -> "groupSet"
-        IANInstanceInitiatedShutdownBehavior -> "instanceInitiatedShutdownBehavior"
-        IANInstanceType -> "instanceType"
-        IANKernel -> "kernel"
-        IANProductCodes -> "productCodes"
-        IANRAMDisk -> "ramdisk"
-        IANRootDeviceName -> "rootDeviceName"
-        IANSRIOVNetSupport -> "sriovNetSupport"
-        IANSourceDestCheck -> "sourceDestCheck"
-        IANUserData -> "userData"
-
-instance Hashable     InstanceAttributeName
-instance NFData       InstanceAttributeName
-instance ToByteString InstanceAttributeName
-instance ToQuery      InstanceAttributeName
-instance ToHeader     InstanceAttributeName
-
-data InstanceLifecycleType
-    = Scheduled
-    | Spot
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText InstanceLifecycleType where
-    parser = takeLowerText >>= \case
-        "scheduled" -> pure Scheduled
-        "spot" -> pure Spot
-        e -> fromTextError $ "Failure parsing InstanceLifecycleType from value: '" <> e
-           <> "'. Accepted values: scheduled, spot"
-
-instance ToText InstanceLifecycleType where
-    toText = \case
-        Scheduled -> "scheduled"
-        Spot -> "spot"
-
-instance Hashable     InstanceLifecycleType
-instance NFData       InstanceLifecycleType
-instance ToByteString InstanceLifecycleType
-instance ToQuery      InstanceLifecycleType
-instance ToHeader     InstanceLifecycleType
-
-instance FromXML InstanceLifecycleType where
-    parseXML = parseXMLText "InstanceLifecycleType"
-
-data InstanceStateName
-    = ISNPending
-    | ISNRunning
-    | ISNShuttingDown
-    | ISNStopped
-    | ISNStopping
-    | ISNTerminated
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText InstanceStateName where
-    parser = takeLowerText >>= \case
-        "pending" -> pure ISNPending
-        "running" -> pure ISNRunning
-        "shutting-down" -> pure ISNShuttingDown
-        "stopped" -> pure ISNStopped
-        "stopping" -> pure ISNStopping
-        "terminated" -> pure ISNTerminated
-        e -> fromTextError $ "Failure parsing InstanceStateName from value: '" <> e
-           <> "'. Accepted values: pending, running, shutting-down, stopped, stopping, terminated"
-
-instance ToText InstanceStateName where
-    toText = \case
-        ISNPending -> "pending"
-        ISNRunning -> "running"
-        ISNShuttingDown -> "shutting-down"
-        ISNStopped -> "stopped"
-        ISNStopping -> "stopping"
-        ISNTerminated -> "terminated"
-
-instance Hashable     InstanceStateName
-instance NFData       InstanceStateName
-instance ToByteString InstanceStateName
-instance ToQuery      InstanceStateName
-instance ToHeader     InstanceStateName
-
-instance FromXML InstanceStateName where
-    parseXML = parseXMLText "InstanceStateName"
-
-data InstanceType
-    = C1_Medium
-    | C1_XLarge
-    | C3_2XLarge
-    | C3_4XLarge
-    | C3_8XLarge
-    | C3_Large
-    | C3_XLarge
-    | C4_2XLarge
-    | C4_4XLarge
-    | C4_8XLarge
-    | C4_Large
-    | C4_XLarge
-    | CC1_4XLarge
-    | CC2_8XLarge
-    | CG1_4XLarge
-    | CR1_8XLarge
-    | D2_2XLarge
-    | D2_4XLarge
-    | D2_8XLarge
-    | D2_XLarge
-    | F1_16XLarge
-    | F1_2XLarge
-    | G2_2XLarge
-    | G2_8XLarge
-    | HI1_4XLarge
-    | HS1_8XLarge
-    | I2_2XLarge
-    | I2_4XLarge
-    | I2_8XLarge
-    | I2_XLarge
-    | M1_Large
-    | M1_Medium
-    | M1_Small
-    | M1_XLarge
-    | M2_2XLarge
-    | M2_4XLarge
-    | M2_XLarge
-    | M3_2XLarge
-    | M3_Large
-    | M3_Medium
-    | M3_XLarge
-    | M4_10XLarge
-    | M4_16XLarge
-    | M4_2XLarge
-    | M4_4XLarge
-    | M4_Large
-    | M4_XLarge
-    | P2_16XLarge
-    | P2_8XLarge
-    | P2_XLarge
-    | R3_2XLarge
-    | R3_4XLarge
-    | R3_8XLarge
-    | R3_Large
-    | R3_XLarge
-    | T1_Micro
-    | T2_Large
-    | T2_Medium
-    | T2_Micro
-    | T2_Nano
-    | T2_Small
-    | X1_16XLarge
-    | X1_32XLarge
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText InstanceType where
-    parser = takeLowerText >>= \case
-        "c1.medium" -> pure C1_Medium
-        "c1.xlarge" -> pure C1_XLarge
-        "c3.2xlarge" -> pure C3_2XLarge
-        "c3.4xlarge" -> pure C3_4XLarge
-        "c3.8xlarge" -> pure C3_8XLarge
-        "c3.large" -> pure C3_Large
-        "c3.xlarge" -> pure C3_XLarge
-        "c4.2xlarge" -> pure C4_2XLarge
-        "c4.4xlarge" -> pure C4_4XLarge
-        "c4.8xlarge" -> pure C4_8XLarge
-        "c4.large" -> pure C4_Large
-        "c4.xlarge" -> pure C4_XLarge
-        "cc1.4xlarge" -> pure CC1_4XLarge
-        "cc2.8xlarge" -> pure CC2_8XLarge
-        "cg1.4xlarge" -> pure CG1_4XLarge
-        "cr1.8xlarge" -> pure CR1_8XLarge
-        "d2.2xlarge" -> pure D2_2XLarge
-        "d2.4xlarge" -> pure D2_4XLarge
-        "d2.8xlarge" -> pure D2_8XLarge
-        "d2.xlarge" -> pure D2_XLarge
-        "f1.16xlarge" -> pure F1_16XLarge
-        "f1.2xlarge" -> pure F1_2XLarge
-        "g2.2xlarge" -> pure G2_2XLarge
-        "g2.8xlarge" -> pure G2_8XLarge
-        "hi1.4xlarge" -> pure HI1_4XLarge
-        "hs1.8xlarge" -> pure HS1_8XLarge
-        "i2.2xlarge" -> pure I2_2XLarge
-        "i2.4xlarge" -> pure I2_4XLarge
-        "i2.8xlarge" -> pure I2_8XLarge
-        "i2.xlarge" -> pure I2_XLarge
-        "m1.large" -> pure M1_Large
-        "m1.medium" -> pure M1_Medium
-        "m1.small" -> pure M1_Small
-        "m1.xlarge" -> pure M1_XLarge
-        "m2.2xlarge" -> pure M2_2XLarge
-        "m2.4xlarge" -> pure M2_4XLarge
-        "m2.xlarge" -> pure M2_XLarge
-        "m3.2xlarge" -> pure M3_2XLarge
-        "m3.large" -> pure M3_Large
-        "m3.medium" -> pure M3_Medium
-        "m3.xlarge" -> pure M3_XLarge
-        "m4.10xlarge" -> pure M4_10XLarge
-        "m4.16xlarge" -> pure M4_16XLarge
-        "m4.2xlarge" -> pure M4_2XLarge
-        "m4.4xlarge" -> pure M4_4XLarge
-        "m4.large" -> pure M4_Large
-        "m4.xlarge" -> pure M4_XLarge
-        "p2.16xlarge" -> pure P2_16XLarge
-        "p2.8xlarge" -> pure P2_8XLarge
-        "p2.xlarge" -> pure P2_XLarge
-        "r3.2xlarge" -> pure R3_2XLarge
-        "r3.4xlarge" -> pure R3_4XLarge
-        "r3.8xlarge" -> pure R3_8XLarge
-        "r3.large" -> pure R3_Large
-        "r3.xlarge" -> pure R3_XLarge
-        "t1.micro" -> pure T1_Micro
-        "t2.large" -> pure T2_Large
-        "t2.medium" -> pure T2_Medium
-        "t2.micro" -> pure T2_Micro
-        "t2.nano" -> pure T2_Nano
-        "t2.small" -> pure T2_Small
-        "x1.16xlarge" -> pure X1_16XLarge
-        "x1.32xlarge" -> pure X1_32XLarge
-        e -> fromTextError $ "Failure parsing InstanceType from value: '" <> e
-           <> "'. Accepted values: c1.medium, c1.xlarge, c3.2xlarge, c3.4xlarge, c3.8xlarge, c3.large, c3.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c4.large, c4.xlarge, cc1.4xlarge, cc2.8xlarge, cg1.4xlarge, cr1.8xlarge, d2.2xlarge, d2.4xlarge, d2.8xlarge, d2.xlarge, f1.16xlarge, f1.2xlarge, g2.2xlarge, g2.8xlarge, hi1.4xlarge, hs1.8xlarge, i2.2xlarge, i2.4xlarge, i2.8xlarge, i2.xlarge, m1.large, m1.medium, m1.small, m1.xlarge, m2.2xlarge, m2.4xlarge, m2.xlarge, m3.2xlarge, m3.large, m3.medium, m3.xlarge, m4.10xlarge, m4.16xlarge, m4.2xlarge, m4.4xlarge, m4.large, m4.xlarge, p2.16xlarge, p2.8xlarge, p2.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r3.large, r3.xlarge, t1.micro, t2.large, t2.medium, t2.micro, t2.nano, t2.small, x1.16xlarge, x1.32xlarge"
-
-instance ToText InstanceType where
-    toText = \case
-        C1_Medium -> "c1.medium"
-        C1_XLarge -> "c1.xlarge"
-        C3_2XLarge -> "c3.2xlarge"
-        C3_4XLarge -> "c3.4xlarge"
-        C3_8XLarge -> "c3.8xlarge"
-        C3_Large -> "c3.large"
-        C3_XLarge -> "c3.xlarge"
-        C4_2XLarge -> "c4.2xlarge"
-        C4_4XLarge -> "c4.4xlarge"
-        C4_8XLarge -> "c4.8xlarge"
-        C4_Large -> "c4.large"
-        C4_XLarge -> "c4.xlarge"
-        CC1_4XLarge -> "cc1.4xlarge"
-        CC2_8XLarge -> "cc2.8xlarge"
-        CG1_4XLarge -> "cg1.4xlarge"
-        CR1_8XLarge -> "cr1.8xlarge"
-        D2_2XLarge -> "d2.2xlarge"
-        D2_4XLarge -> "d2.4xlarge"
-        D2_8XLarge -> "d2.8xlarge"
-        D2_XLarge -> "d2.xlarge"
-        F1_16XLarge -> "f1.16xlarge"
-        F1_2XLarge -> "f1.2xlarge"
-        G2_2XLarge -> "g2.2xlarge"
-        G2_8XLarge -> "g2.8xlarge"
-        HI1_4XLarge -> "hi1.4xlarge"
-        HS1_8XLarge -> "hs1.8xlarge"
-        I2_2XLarge -> "i2.2xlarge"
-        I2_4XLarge -> "i2.4xlarge"
-        I2_8XLarge -> "i2.8xlarge"
-        I2_XLarge -> "i2.xlarge"
-        M1_Large -> "m1.large"
-        M1_Medium -> "m1.medium"
-        M1_Small -> "m1.small"
-        M1_XLarge -> "m1.xlarge"
-        M2_2XLarge -> "m2.2xlarge"
-        M2_4XLarge -> "m2.4xlarge"
-        M2_XLarge -> "m2.xlarge"
-        M3_2XLarge -> "m3.2xlarge"
-        M3_Large -> "m3.large"
-        M3_Medium -> "m3.medium"
-        M3_XLarge -> "m3.xlarge"
-        M4_10XLarge -> "m4.10xlarge"
-        M4_16XLarge -> "m4.16xlarge"
-        M4_2XLarge -> "m4.2xlarge"
-        M4_4XLarge -> "m4.4xlarge"
-        M4_Large -> "m4.large"
-        M4_XLarge -> "m4.xlarge"
-        P2_16XLarge -> "p2.16xlarge"
-        P2_8XLarge -> "p2.8xlarge"
-        P2_XLarge -> "p2.xlarge"
-        R3_2XLarge -> "r3.2xlarge"
-        R3_4XLarge -> "r3.4xlarge"
-        R3_8XLarge -> "r3.8xlarge"
-        R3_Large -> "r3.large"
-        R3_XLarge -> "r3.xlarge"
-        T1_Micro -> "t1.micro"
-        T2_Large -> "t2.large"
-        T2_Medium -> "t2.medium"
-        T2_Micro -> "t2.micro"
-        T2_Nano -> "t2.nano"
-        T2_Small -> "t2.small"
-        X1_16XLarge -> "x1.16xlarge"
-        X1_32XLarge -> "x1.32xlarge"
-
-instance Hashable     InstanceType
-instance NFData       InstanceType
-instance ToByteString InstanceType
-instance ToQuery      InstanceType
-instance ToHeader     InstanceType
-
-instance FromXML InstanceType where
-    parseXML = parseXMLText "InstanceType"
-
-data ListingState
-    = LAvailable
-    | LCancelled
-    | LPending
-    | LSold
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ListingState where
-    parser = takeLowerText >>= \case
-        "available" -> pure LAvailable
-        "cancelled" -> pure LCancelled
-        "pending" -> pure LPending
-        "sold" -> pure LSold
-        e -> fromTextError $ "Failure parsing ListingState from value: '" <> e
-           <> "'. Accepted values: available, cancelled, pending, sold"
-
-instance ToText ListingState where
-    toText = \case
-        LAvailable -> "available"
-        LCancelled -> "cancelled"
-        LPending -> "pending"
-        LSold -> "sold"
-
-instance Hashable     ListingState
-instance NFData       ListingState
-instance ToByteString ListingState
-instance ToQuery      ListingState
-instance ToHeader     ListingState
-
-instance FromXML ListingState where
-    parseXML = parseXMLText "ListingState"
-
-data ListingStatus
-    = LSActive
-    | LSCancelled
-    | LSClosed
-    | LSPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ListingStatus where
-    parser = takeLowerText >>= \case
-        "active" -> pure LSActive
-        "cancelled" -> pure LSCancelled
-        "closed" -> pure LSClosed
-        "pending" -> pure LSPending
-        e -> fromTextError $ "Failure parsing ListingStatus from value: '" <> e
-           <> "'. Accepted values: active, cancelled, closed, pending"
-
-instance ToText ListingStatus where
-    toText = \case
-        LSActive -> "active"
-        LSCancelled -> "cancelled"
-        LSClosed -> "closed"
-        LSPending -> "pending"
-
-instance Hashable     ListingStatus
-instance NFData       ListingStatus
-instance ToByteString ListingStatus
-instance ToQuery      ListingStatus
-instance ToHeader     ListingStatus
-
-instance FromXML ListingStatus where
-    parseXML = parseXMLText "ListingStatus"
-
-data MonitoringState
-    = MSDisabled
-    | MSDisabling
-    | MSEnabled
-    | MSPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText MonitoringState where
-    parser = takeLowerText >>= \case
-        "disabled" -> pure MSDisabled
-        "disabling" -> pure MSDisabling
-        "enabled" -> pure MSEnabled
-        "pending" -> pure MSPending
-        e -> fromTextError $ "Failure parsing MonitoringState from value: '" <> e
-           <> "'. Accepted values: disabled, disabling, enabled, pending"
-
-instance ToText MonitoringState where
-    toText = \case
-        MSDisabled -> "disabled"
-        MSDisabling -> "disabling"
-        MSEnabled -> "enabled"
-        MSPending -> "pending"
-
-instance Hashable     MonitoringState
-instance NFData       MonitoringState
-instance ToByteString MonitoringState
-instance ToQuery      MonitoringState
-instance ToHeader     MonitoringState
-
-instance FromXML MonitoringState where
-    parseXML = parseXMLText "MonitoringState"
-
-data MoveStatus
-    = MovingToVPC
-    | RestoringToClassic
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText MoveStatus where
-    parser = takeLowerText >>= \case
-        "movingtovpc" -> pure MovingToVPC
-        "restoringtoclassic" -> pure RestoringToClassic
-        e -> fromTextError $ "Failure parsing MoveStatus from value: '" <> e
-           <> "'. Accepted values: movingtovpc, restoringtoclassic"
-
-instance ToText MoveStatus where
-    toText = \case
-        MovingToVPC -> "movingToVpc"
-        RestoringToClassic -> "restoringToClassic"
-
-instance Hashable     MoveStatus
-instance NFData       MoveStatus
-instance ToByteString MoveStatus
-instance ToQuery      MoveStatus
-instance ToHeader     MoveStatus
-
-instance FromXML MoveStatus where
-    parseXML = parseXMLText "MoveStatus"
-
-data NatGatewayState
-    = NGSAvailable
-    | NGSDeleted
-    | NGSDeleting
-    | NGSFailed
-    | NGSPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText NatGatewayState where
-    parser = takeLowerText >>= \case
-        "available" -> pure NGSAvailable
-        "deleted" -> pure NGSDeleted
-        "deleting" -> pure NGSDeleting
-        "failed" -> pure NGSFailed
-        "pending" -> pure NGSPending
-        e -> fromTextError $ "Failure parsing NatGatewayState from value: '" <> e
-           <> "'. Accepted values: available, deleted, deleting, failed, pending"
-
-instance ToText NatGatewayState where
-    toText = \case
-        NGSAvailable -> "available"
-        NGSDeleted -> "deleted"
-        NGSDeleting -> "deleting"
-        NGSFailed -> "failed"
-        NGSPending -> "pending"
-
-instance Hashable     NatGatewayState
-instance NFData       NatGatewayState
-instance ToByteString NatGatewayState
-instance ToQuery      NatGatewayState
-instance ToHeader     NatGatewayState
-
-instance FromXML NatGatewayState where
-    parseXML = parseXMLText "NatGatewayState"
-
-data NetworkInterfaceAttribute
-    = NIAAttachment
-    | NIADescription
-    | NIAGroupSet
-    | NIASourceDestCheck
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText NetworkInterfaceAttribute where
-    parser = takeLowerText >>= \case
-        "attachment" -> pure NIAAttachment
-        "description" -> pure NIADescription
-        "groupset" -> pure NIAGroupSet
-        "sourcedestcheck" -> pure NIASourceDestCheck
-        e -> fromTextError $ "Failure parsing NetworkInterfaceAttribute from value: '" <> e
-           <> "'. Accepted values: attachment, description, groupset, sourcedestcheck"
-
-instance ToText NetworkInterfaceAttribute where
-    toText = \case
-        NIAAttachment -> "attachment"
-        NIADescription -> "description"
-        NIAGroupSet -> "groupSet"
-        NIASourceDestCheck -> "sourceDestCheck"
-
-instance Hashable     NetworkInterfaceAttribute
-instance NFData       NetworkInterfaceAttribute
-instance ToByteString NetworkInterfaceAttribute
-instance ToQuery      NetworkInterfaceAttribute
-instance ToHeader     NetworkInterfaceAttribute
-
-data NetworkInterfaceStatus
-    = NISAttaching
-    | NISAvailable
-    | NISDetaching
-    | NISInUse
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText NetworkInterfaceStatus where
-    parser = takeLowerText >>= \case
-        "attaching" -> pure NISAttaching
-        "available" -> pure NISAvailable
-        "detaching" -> pure NISDetaching
-        "in-use" -> pure NISInUse
-        e -> fromTextError $ "Failure parsing NetworkInterfaceStatus from value: '" <> e
-           <> "'. Accepted values: attaching, available, detaching, in-use"
-
-instance ToText NetworkInterfaceStatus where
-    toText = \case
-        NISAttaching -> "attaching"
-        NISAvailable -> "available"
-        NISDetaching -> "detaching"
-        NISInUse -> "in-use"
-
-instance Hashable     NetworkInterfaceStatus
-instance NFData       NetworkInterfaceStatus
-instance ToByteString NetworkInterfaceStatus
-instance ToQuery      NetworkInterfaceStatus
-instance ToHeader     NetworkInterfaceStatus
-
-instance FromXML NetworkInterfaceStatus where
-    parseXML = parseXMLText "NetworkInterfaceStatus"
-
-data NetworkInterfaceType
-    = Interface
-    | NatGateway
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText NetworkInterfaceType where
-    parser = takeLowerText >>= \case
-        "interface" -> pure Interface
-        "natgateway" -> pure NatGateway
-        e -> fromTextError $ "Failure parsing NetworkInterfaceType from value: '" <> e
-           <> "'. Accepted values: interface, natgateway"
-
-instance ToText NetworkInterfaceType where
-    toText = \case
-        Interface -> "interface"
-        NatGateway -> "natGateway"
-
-instance Hashable     NetworkInterfaceType
-instance NFData       NetworkInterfaceType
-instance ToByteString NetworkInterfaceType
-instance ToQuery      NetworkInterfaceType
-instance ToHeader     NetworkInterfaceType
-
-instance FromXML NetworkInterfaceType where
-    parseXML = parseXMLText "NetworkInterfaceType"
-
-data OfferingClassType
-    = Convertible
-    | Standard
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText OfferingClassType where
-    parser = takeLowerText >>= \case
-        "convertible" -> pure Convertible
-        "standard" -> pure Standard
-        e -> fromTextError $ "Failure parsing OfferingClassType from value: '" <> e
-           <> "'. Accepted values: convertible, standard"
-
-instance ToText OfferingClassType where
-    toText = \case
-        Convertible -> "convertible"
-        Standard -> "standard"
-
-instance Hashable     OfferingClassType
-instance NFData       OfferingClassType
-instance ToByteString OfferingClassType
-instance ToQuery      OfferingClassType
-instance ToHeader     OfferingClassType
-
-instance FromXML OfferingClassType where
-    parseXML = parseXMLText "OfferingClassType"
-
-data OfferingTypeValues
-    = AllUpfront
-    | HeavyUtilization
-    | LightUtilization
-    | MediumUtilization
-    | NoUpfront
-    | PartialUpfront
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText OfferingTypeValues where
-    parser = takeLowerText >>= \case
-        "all upfront" -> pure AllUpfront
-        "heavy utilization" -> pure HeavyUtilization
-        "light utilization" -> pure LightUtilization
-        "medium utilization" -> pure MediumUtilization
-        "no upfront" -> pure NoUpfront
-        "partial upfront" -> pure PartialUpfront
-        e -> fromTextError $ "Failure parsing OfferingTypeValues from value: '" <> e
-           <> "'. Accepted values: all upfront, heavy utilization, light utilization, medium utilization, no upfront, partial upfront"
-
-instance ToText OfferingTypeValues where
-    toText = \case
-        AllUpfront -> "All Upfront"
-        HeavyUtilization -> "Heavy Utilization"
-        LightUtilization -> "Light Utilization"
-        MediumUtilization -> "Medium Utilization"
-        NoUpfront -> "No Upfront"
-        PartialUpfront -> "Partial Upfront"
-
-instance Hashable     OfferingTypeValues
-instance NFData       OfferingTypeValues
-instance ToByteString OfferingTypeValues
-instance ToQuery      OfferingTypeValues
-instance ToHeader     OfferingTypeValues
-
-instance FromXML OfferingTypeValues where
-    parseXML = parseXMLText "OfferingTypeValues"
-
-data OperationType
-    = Add
-    | Remove
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText OperationType where
-    parser = takeLowerText >>= \case
-        "add" -> pure Add
-        "remove" -> pure Remove
-        e -> fromTextError $ "Failure parsing OperationType from value: '" <> e
-           <> "'. Accepted values: add, remove"
-
-instance ToText OperationType where
-    toText = \case
-        Add -> "add"
-        Remove -> "remove"
-
-instance Hashable     OperationType
-instance NFData       OperationType
-instance ToByteString OperationType
-instance ToQuery      OperationType
-instance ToHeader     OperationType
-
-data PaymentOption
-    = POAllUpfront
-    | PONoUpfront
-    | POPartialUpfront
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText PaymentOption where
-    parser = takeLowerText >>= \case
-        "allupfront" -> pure POAllUpfront
-        "noupfront" -> pure PONoUpfront
-        "partialupfront" -> pure POPartialUpfront
-        e -> fromTextError $ "Failure parsing PaymentOption from value: '" <> e
-           <> "'. Accepted values: allupfront, noupfront, partialupfront"
-
-instance ToText PaymentOption where
-    toText = \case
-        POAllUpfront -> "AllUpfront"
-        PONoUpfront -> "NoUpfront"
-        POPartialUpfront -> "PartialUpfront"
-
-instance Hashable     PaymentOption
-instance NFData       PaymentOption
-instance ToByteString PaymentOption
-instance ToQuery      PaymentOption
-instance ToHeader     PaymentOption
-
-instance FromXML PaymentOption where
-    parseXML = parseXMLText "PaymentOption"
-
-data PermissionGroup =
-    All
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText PermissionGroup where
-    parser = takeLowerText >>= \case
-        "all" -> pure All
-        e -> fromTextError $ "Failure parsing PermissionGroup from value: '" <> e
-           <> "'. Accepted values: all"
-
-instance ToText PermissionGroup where
-    toText = \case
-        All -> "all"
-
-instance Hashable     PermissionGroup
-instance NFData       PermissionGroup
-instance ToByteString PermissionGroup
-instance ToQuery      PermissionGroup
-instance ToHeader     PermissionGroup
-
-instance FromXML PermissionGroup where
-    parseXML = parseXMLText "PermissionGroup"
-
-data PlacementGroupState
-    = Available
-    | Deleted
-    | Deleting
-    | Pending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText PlacementGroupState where
-    parser = takeLowerText >>= \case
-        "available" -> pure Available
-        "deleted" -> pure Deleted
-        "deleting" -> pure Deleting
-        "pending" -> pure Pending
-        e -> fromTextError $ "Failure parsing PlacementGroupState from value: '" <> e
-           <> "'. Accepted values: available, deleted, deleting, pending"
-
-instance ToText PlacementGroupState where
-    toText = \case
-        Available -> "available"
-        Deleted -> "deleted"
-        Deleting -> "deleting"
-        Pending -> "pending"
-
-instance Hashable     PlacementGroupState
-instance NFData       PlacementGroupState
-instance ToByteString PlacementGroupState
-instance ToQuery      PlacementGroupState
-instance ToHeader     PlacementGroupState
-
-instance FromXML PlacementGroupState where
-    parseXML = parseXMLText "PlacementGroupState"
-
-data PlacementStrategy =
-    Cluster
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText PlacementStrategy where
-    parser = takeLowerText >>= \case
-        "cluster" -> pure Cluster
-        e -> fromTextError $ "Failure parsing PlacementStrategy from value: '" <> e
-           <> "'. Accepted values: cluster"
-
-instance ToText PlacementStrategy where
-    toText = \case
-        Cluster -> "cluster"
-
-instance Hashable     PlacementStrategy
-instance NFData       PlacementStrategy
-instance ToByteString PlacementStrategy
-instance ToQuery      PlacementStrategy
-instance ToHeader     PlacementStrategy
-
-instance FromXML PlacementStrategy where
-    parseXML = parseXMLText "PlacementStrategy"
-
-data PlatformValues =
-    Windows
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText PlatformValues where
-    parser = takeLowerText >>= \case
-        "windows" -> pure Windows
-        e -> fromTextError $ "Failure parsing PlatformValues from value: '" <> e
-           <> "'. Accepted values: windows"
-
-instance ToText PlatformValues where
-    toText = \case
-        Windows -> "Windows"
-
-instance Hashable     PlatformValues
-instance NFData       PlatformValues
-instance ToByteString PlatformValues
-instance ToQuery      PlatformValues
-instance ToHeader     PlatformValues
-
-instance FromXML PlatformValues where
-    parseXML = parseXMLText "PlatformValues"
-
-data ProductCodeValues
-    = Devpay
-    | Marketplace
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ProductCodeValues where
-    parser = takeLowerText >>= \case
-        "devpay" -> pure Devpay
-        "marketplace" -> pure Marketplace
-        e -> fromTextError $ "Failure parsing ProductCodeValues from value: '" <> e
-           <> "'. Accepted values: devpay, marketplace"
-
-instance ToText ProductCodeValues where
-    toText = \case
-        Devpay -> "devpay"
-        Marketplace -> "marketplace"
-
-instance Hashable     ProductCodeValues
-instance NFData       ProductCodeValues
-instance ToByteString ProductCodeValues
-instance ToQuery      ProductCodeValues
-instance ToHeader     ProductCodeValues
-
-instance FromXML ProductCodeValues where
-    parseXML = parseXMLText "ProductCodeValues"
-
-data RIProductDescription
-    = RIDLinuxUnix
-    | RIDLinuxUnixAmazonVPC
-    | RIDWindows
-    | RIDWindowsAmazonVPC
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText RIProductDescription where
-    parser = takeLowerText >>= \case
-        "linux/unix" -> pure RIDLinuxUnix
-        "linux/unix (amazon vpc)" -> pure RIDLinuxUnixAmazonVPC
-        "windows" -> pure RIDWindows
-        "windows (amazon vpc)" -> pure RIDWindowsAmazonVPC
-        e -> fromTextError $ "Failure parsing RIProductDescription from value: '" <> e
-           <> "'. Accepted values: linux/unix, linux/unix (amazon vpc), windows, windows (amazon vpc)"
-
-instance ToText RIProductDescription where
-    toText = \case
-        RIDLinuxUnix -> "Linux/UNIX"
-        RIDLinuxUnixAmazonVPC -> "Linux/UNIX (Amazon VPC)"
-        RIDWindows -> "Windows"
-        RIDWindowsAmazonVPC -> "Windows (Amazon VPC)"
-
-instance Hashable     RIProductDescription
-instance NFData       RIProductDescription
-instance ToByteString RIProductDescription
-instance ToQuery      RIProductDescription
-instance ToHeader     RIProductDescription
-
-instance FromXML RIProductDescription where
-    parseXML = parseXMLText "RIProductDescription"
-
-data RecurringChargeFrequency =
-    Hourly
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText RecurringChargeFrequency where
-    parser = takeLowerText >>= \case
-        "hourly" -> pure Hourly
-        e -> fromTextError $ "Failure parsing RecurringChargeFrequency from value: '" <> e
-           <> "'. Accepted values: hourly"
-
-instance ToText RecurringChargeFrequency where
-    toText = \case
-        Hourly -> "Hourly"
-
-instance Hashable     RecurringChargeFrequency
-instance NFData       RecurringChargeFrequency
-instance ToByteString RecurringChargeFrequency
-instance ToQuery      RecurringChargeFrequency
-instance ToHeader     RecurringChargeFrequency
-
-instance FromXML RecurringChargeFrequency where
-    parseXML = parseXMLText "RecurringChargeFrequency"
-
-data ReportInstanceReasonCodes
-    = InstanceStuckInState
-    | NotAcceptingCredentials
-    | Other
-    | PasswordNotAvailable
-    | PerformanceEBSVolume
-    | PerformanceInstanceStore
-    | PerformanceNetwork
-    | PerformanceOther
-    | Unresponsive
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ReportInstanceReasonCodes where
-    parser = takeLowerText >>= \case
-        "instance-stuck-in-state" -> pure InstanceStuckInState
-        "not-accepting-credentials" -> pure NotAcceptingCredentials
-        "other" -> pure Other
-        "password-not-available" -> pure PasswordNotAvailable
-        "performance-ebs-volume" -> pure PerformanceEBSVolume
-        "performance-instance-store" -> pure PerformanceInstanceStore
-        "performance-network" -> pure PerformanceNetwork
-        "performance-other" -> pure PerformanceOther
-        "unresponsive" -> pure Unresponsive
-        e -> fromTextError $ "Failure parsing ReportInstanceReasonCodes from value: '" <> e
-           <> "'. Accepted values: instance-stuck-in-state, not-accepting-credentials, other, password-not-available, performance-ebs-volume, performance-instance-store, performance-network, performance-other, unresponsive"
-
-instance ToText ReportInstanceReasonCodes where
-    toText = \case
-        InstanceStuckInState -> "instance-stuck-in-state"
-        NotAcceptingCredentials -> "not-accepting-credentials"
-        Other -> "other"
-        PasswordNotAvailable -> "password-not-available"
-        PerformanceEBSVolume -> "performance-ebs-volume"
-        PerformanceInstanceStore -> "performance-instance-store"
-        PerformanceNetwork -> "performance-network"
-        PerformanceOther -> "performance-other"
-        Unresponsive -> "unresponsive"
-
-instance Hashable     ReportInstanceReasonCodes
-instance NFData       ReportInstanceReasonCodes
-instance ToByteString ReportInstanceReasonCodes
-instance ToQuery      ReportInstanceReasonCodes
-instance ToHeader     ReportInstanceReasonCodes
-
-data ReportStatusType
-    = RSTImpaired
-    | RSTOK
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ReportStatusType where
-    parser = takeLowerText >>= \case
-        "impaired" -> pure RSTImpaired
-        "ok" -> pure RSTOK
-        e -> fromTextError $ "Failure parsing ReportStatusType from value: '" <> e
-           <> "'. Accepted values: impaired, ok"
-
-instance ToText ReportStatusType where
-    toText = \case
-        RSTImpaired -> "impaired"
-        RSTOK -> "ok"
-
-instance Hashable     ReportStatusType
-instance NFData       ReportStatusType
-instance ToByteString ReportStatusType
-instance ToQuery      ReportStatusType
-instance ToHeader     ReportStatusType
-
-data ReservationState
-    = RSActive
-    | RSPaymentFailed
-    | RSPaymentPending
-    | RSRetired
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ReservationState where
-    parser = takeLowerText >>= \case
-        "active" -> pure RSActive
-        "payment-failed" -> pure RSPaymentFailed
-        "payment-pending" -> pure RSPaymentPending
-        "retired" -> pure RSRetired
-        e -> fromTextError $ "Failure parsing ReservationState from value: '" <> e
-           <> "'. Accepted values: active, payment-failed, payment-pending, retired"
-
-instance ToText ReservationState where
-    toText = \case
-        RSActive -> "active"
-        RSPaymentFailed -> "payment-failed"
-        RSPaymentPending -> "payment-pending"
-        RSRetired -> "retired"
-
-instance Hashable     ReservationState
-instance NFData       ReservationState
-instance ToByteString ReservationState
-instance ToQuery      ReservationState
-instance ToHeader     ReservationState
-
-instance FromXML ReservationState where
-    parseXML = parseXMLText "ReservationState"
-
-data ReservedInstanceState
-    = Active
-    | PaymentFailed
-    | PaymentPending
-    | Retired
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ReservedInstanceState where
-    parser = takeLowerText >>= \case
-        "active" -> pure Active
-        "payment-failed" -> pure PaymentFailed
-        "payment-pending" -> pure PaymentPending
-        "retired" -> pure Retired
-        e -> fromTextError $ "Failure parsing ReservedInstanceState from value: '" <> e
-           <> "'. Accepted values: active, payment-failed, payment-pending, retired"
-
-instance ToText ReservedInstanceState where
-    toText = \case
-        Active -> "active"
-        PaymentFailed -> "payment-failed"
-        PaymentPending -> "payment-pending"
-        Retired -> "retired"
-
-instance Hashable     ReservedInstanceState
-instance NFData       ReservedInstanceState
-instance ToByteString ReservedInstanceState
-instance ToQuery      ReservedInstanceState
-instance ToHeader     ReservedInstanceState
-
-instance FromXML ReservedInstanceState where
-    parseXML = parseXMLText "ReservedInstanceState"
-
-data ResetImageAttributeName =
-    RIANLaunchPermission
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ResetImageAttributeName where
-    parser = takeLowerText >>= \case
-        "launchpermission" -> pure RIANLaunchPermission
-        e -> fromTextError $ "Failure parsing ResetImageAttributeName from value: '" <> e
-           <> "'. Accepted values: launchpermission"
-
-instance ToText ResetImageAttributeName where
-    toText = \case
-        RIANLaunchPermission -> "launchPermission"
-
-instance Hashable     ResetImageAttributeName
-instance NFData       ResetImageAttributeName
-instance ToByteString ResetImageAttributeName
-instance ToQuery      ResetImageAttributeName
-instance ToHeader     ResetImageAttributeName
-
-data ResourceType
-    = CustomerGateway
-    | DHCPOptions
-    | Image
-    | Instance
-    | InternetGateway
-    | NetworkACL
-    | NetworkInterface
-    | ReservedInstances
-    | RouteTable
-    | SecurityGroup
-    | Snapshot
-    | SpotInstancesRequest
-    | Subnet
-    | VPC
-    | VPNConnection
-    | VPNGateway
-    | Volume
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ResourceType where
-    parser = takeLowerText >>= \case
-        "customer-gateway" -> pure CustomerGateway
-        "dhcp-options" -> pure DHCPOptions
-        "image" -> pure Image
-        "instance" -> pure Instance
-        "internet-gateway" -> pure InternetGateway
-        "network-acl" -> pure NetworkACL
-        "network-interface" -> pure NetworkInterface
-        "reserved-instances" -> pure ReservedInstances
-        "route-table" -> pure RouteTable
-        "security-group" -> pure SecurityGroup
-        "snapshot" -> pure Snapshot
-        "spot-instances-request" -> pure SpotInstancesRequest
-        "subnet" -> pure Subnet
-        "vpc" -> pure VPC
-        "vpn-connection" -> pure VPNConnection
-        "vpn-gateway" -> pure VPNGateway
-        "volume" -> pure Volume
-        e -> fromTextError $ "Failure parsing ResourceType from value: '" <> e
-           <> "'. Accepted values: customer-gateway, dhcp-options, image, instance, internet-gateway, network-acl, network-interface, reserved-instances, route-table, security-group, snapshot, spot-instances-request, subnet, vpc, vpn-connection, vpn-gateway, volume"
-
-instance ToText ResourceType where
-    toText = \case
-        CustomerGateway -> "customer-gateway"
-        DHCPOptions -> "dhcp-options"
-        Image -> "image"
-        Instance -> "instance"
-        InternetGateway -> "internet-gateway"
-        NetworkACL -> "network-acl"
-        NetworkInterface -> "network-interface"
-        ReservedInstances -> "reserved-instances"
-        RouteTable -> "route-table"
-        SecurityGroup -> "security-group"
-        Snapshot -> "snapshot"
-        SpotInstancesRequest -> "spot-instances-request"
-        Subnet -> "subnet"
-        VPC -> "vpc"
-        VPNConnection -> "vpn-connection"
-        VPNGateway -> "vpn-gateway"
-        Volume -> "volume"
-
-instance Hashable     ResourceType
-instance NFData       ResourceType
-instance ToByteString ResourceType
-instance ToQuery      ResourceType
-instance ToHeader     ResourceType
-
-instance FromXML ResourceType where
-    parseXML = parseXMLText "ResourceType"
-
-data RouteOrigin
-    = CreateRoute
-    | CreateRouteTable
-    | EnableVGWRoutePropagation
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText RouteOrigin where
-    parser = takeLowerText >>= \case
-        "createroute" -> pure CreateRoute
-        "createroutetable" -> pure CreateRouteTable
-        "enablevgwroutepropagation" -> pure EnableVGWRoutePropagation
-        e -> fromTextError $ "Failure parsing RouteOrigin from value: '" <> e
-           <> "'. Accepted values: createroute, createroutetable, enablevgwroutepropagation"
-
-instance ToText RouteOrigin where
-    toText = \case
-        CreateRoute -> "CreateRoute"
-        CreateRouteTable -> "CreateRouteTable"
-        EnableVGWRoutePropagation -> "EnableVgwRoutePropagation"
-
-instance Hashable     RouteOrigin
-instance NFData       RouteOrigin
-instance ToByteString RouteOrigin
-instance ToQuery      RouteOrigin
-instance ToHeader     RouteOrigin
-
-instance FromXML RouteOrigin where
-    parseXML = parseXMLText "RouteOrigin"
-
-data RouteState
-    = RActive
-    | RBlackhole
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText RouteState where
-    parser = takeLowerText >>= \case
-        "active" -> pure RActive
-        "blackhole" -> pure RBlackhole
-        e -> fromTextError $ "Failure parsing RouteState from value: '" <> e
-           <> "'. Accepted values: active, blackhole"
-
-instance ToText RouteState where
-    toText = \case
-        RActive -> "active"
-        RBlackhole -> "blackhole"
-
-instance Hashable     RouteState
-instance NFData       RouteState
-instance ToByteString RouteState
-instance ToQuery      RouteState
-instance ToHeader     RouteState
-
-instance FromXML RouteState where
-    parseXML = parseXMLText "RouteState"
-
-data RuleAction
-    = Allow
-    | Deny
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText RuleAction where
-    parser = takeLowerText >>= \case
-        "allow" -> pure Allow
-        "deny" -> pure Deny
-        e -> fromTextError $ "Failure parsing RuleAction from value: '" <> e
-           <> "'. Accepted values: allow, deny"
-
-instance ToText RuleAction where
-    toText = \case
-        Allow -> "allow"
-        Deny -> "deny"
-
-instance Hashable     RuleAction
-instance NFData       RuleAction
-instance ToByteString RuleAction
-instance ToQuery      RuleAction
-instance ToHeader     RuleAction
-
-instance FromXML RuleAction where
-    parseXML = parseXMLText "RuleAction"
-
-data Scope
-    = AvailabilityZone
-    | Region
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText Scope where
-    parser = takeLowerText >>= \case
-        "availability zone" -> pure AvailabilityZone
-        "region" -> pure Region
-        e -> fromTextError $ "Failure parsing Scope from value: '" <> e
-           <> "'. Accepted values: availability zone, region"
-
-instance ToText Scope where
-    toText = \case
-        AvailabilityZone -> "Availability Zone"
-        Region -> "Region"
-
-instance Hashable     Scope
-instance NFData       Scope
-instance ToByteString Scope
-instance ToQuery      Scope
-instance ToHeader     Scope
-
-instance FromXML Scope where
-    parseXML = parseXMLText "Scope"
-
-data ShutdownBehavior
-    = Stop
-    | Terminate
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText ShutdownBehavior where
-    parser = takeLowerText >>= \case
-        "stop" -> pure Stop
-        "terminate" -> pure Terminate
-        e -> fromTextError $ "Failure parsing ShutdownBehavior from value: '" <> e
-           <> "'. Accepted values: stop, terminate"
-
-instance ToText ShutdownBehavior where
-    toText = \case
-        Stop -> "stop"
-        Terminate -> "terminate"
-
-instance Hashable     ShutdownBehavior
-instance NFData       ShutdownBehavior
-instance ToByteString ShutdownBehavior
-instance ToQuery      ShutdownBehavior
-instance ToHeader     ShutdownBehavior
-
-data SnapshotAttributeName
-    = SANCreateVolumePermission
-    | SANProductCodes
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SnapshotAttributeName where
-    parser = takeLowerText >>= \case
-        "createvolumepermission" -> pure SANCreateVolumePermission
-        "productcodes" -> pure SANProductCodes
-        e -> fromTextError $ "Failure parsing SnapshotAttributeName from value: '" <> e
-           <> "'. Accepted values: createvolumepermission, productcodes"
-
-instance ToText SnapshotAttributeName where
-    toText = \case
-        SANCreateVolumePermission -> "createVolumePermission"
-        SANProductCodes -> "productCodes"
-
-instance Hashable     SnapshotAttributeName
-instance NFData       SnapshotAttributeName
-instance ToByteString SnapshotAttributeName
-instance ToQuery      SnapshotAttributeName
-instance ToHeader     SnapshotAttributeName
-
-data SnapshotState
-    = SSCompleted
-    | SSError'
-    | SSPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SnapshotState where
-    parser = takeLowerText >>= \case
-        "completed" -> pure SSCompleted
-        "error" -> pure SSError'
-        "pending" -> pure SSPending
-        e -> fromTextError $ "Failure parsing SnapshotState from value: '" <> e
-           <> "'. Accepted values: completed, error, pending"
-
-instance ToText SnapshotState where
-    toText = \case
-        SSCompleted -> "completed"
-        SSError' -> "error"
-        SSPending -> "pending"
-
-instance Hashable     SnapshotState
-instance NFData       SnapshotState
-instance ToByteString SnapshotState
-instance ToQuery      SnapshotState
-instance ToHeader     SnapshotState
-
-instance FromXML SnapshotState where
-    parseXML = parseXMLText "SnapshotState"
-
-data SpotInstanceState
-    = SISActive
-    | SISCancelled
-    | SISClosed
-    | SISFailed
-    | SISOpen
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SpotInstanceState where
-    parser = takeLowerText >>= \case
-        "active" -> pure SISActive
-        "cancelled" -> pure SISCancelled
-        "closed" -> pure SISClosed
-        "failed" -> pure SISFailed
-        "open" -> pure SISOpen
-        e -> fromTextError $ "Failure parsing SpotInstanceState from value: '" <> e
-           <> "'. Accepted values: active, cancelled, closed, failed, open"
-
-instance ToText SpotInstanceState where
-    toText = \case
-        SISActive -> "active"
-        SISCancelled -> "cancelled"
-        SISClosed -> "closed"
-        SISFailed -> "failed"
-        SISOpen -> "open"
-
-instance Hashable     SpotInstanceState
-instance NFData       SpotInstanceState
-instance ToByteString SpotInstanceState
-instance ToQuery      SpotInstanceState
-instance ToHeader     SpotInstanceState
-
-instance FromXML SpotInstanceState where
-    parseXML = parseXMLText "SpotInstanceState"
-
-data SpotInstanceType
-    = OneTime
-    | Persistent
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SpotInstanceType where
-    parser = takeLowerText >>= \case
-        "one-time" -> pure OneTime
-        "persistent" -> pure Persistent
-        e -> fromTextError $ "Failure parsing SpotInstanceType from value: '" <> e
-           <> "'. Accepted values: one-time, persistent"
-
-instance ToText SpotInstanceType where
-    toText = \case
-        OneTime -> "one-time"
-        Persistent -> "persistent"
-
-instance Hashable     SpotInstanceType
-instance NFData       SpotInstanceType
-instance ToByteString SpotInstanceType
-instance ToQuery      SpotInstanceType
-instance ToHeader     SpotInstanceType
-
-instance FromXML SpotInstanceType where
-    parseXML = parseXMLText "SpotInstanceType"
-
-data State
-    = SAvailable
-    | SDeleted
-    | SDeleting
-    | SPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText State where
-    parser = takeLowerText >>= \case
-        "available" -> pure SAvailable
-        "deleted" -> pure SDeleted
-        "deleting" -> pure SDeleting
-        "pending" -> pure SPending
-        e -> fromTextError $ "Failure parsing State from value: '" <> e
-           <> "'. Accepted values: available, deleted, deleting, pending"
-
-instance ToText State where
-    toText = \case
-        SAvailable -> "Available"
-        SDeleted -> "Deleted"
-        SDeleting -> "Deleting"
-        SPending -> "Pending"
-
-instance Hashable     State
-instance NFData       State
-instance ToByteString State
-instance ToQuery      State
-instance ToHeader     State
-
-instance FromXML State where
-    parseXML = parseXMLText "State"
-
-data StatusName =
-    Reachability
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText StatusName where
-    parser = takeLowerText >>= \case
-        "reachability" -> pure Reachability
-        e -> fromTextError $ "Failure parsing StatusName from value: '" <> e
-           <> "'. Accepted values: reachability"
-
-instance ToText StatusName where
-    toText = \case
-        Reachability -> "reachability"
-
-instance Hashable     StatusName
-instance NFData       StatusName
-instance ToByteString StatusName
-instance ToQuery      StatusName
-instance ToHeader     StatusName
-
-instance FromXML StatusName where
-    parseXML = parseXMLText "StatusName"
-
-data StatusType
-    = STFailed
-    | STInitializing
-    | STInsufficientData
-    | STPassed
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText StatusType where
-    parser = takeLowerText >>= \case
-        "failed" -> pure STFailed
-        "initializing" -> pure STInitializing
-        "insufficient-data" -> pure STInsufficientData
-        "passed" -> pure STPassed
-        e -> fromTextError $ "Failure parsing StatusType from value: '" <> e
-           <> "'. Accepted values: failed, initializing, insufficient-data, passed"
-
-instance ToText StatusType where
-    toText = \case
-        STFailed -> "failed"
-        STInitializing -> "initializing"
-        STInsufficientData -> "insufficient-data"
-        STPassed -> "passed"
-
-instance Hashable     StatusType
-instance NFData       StatusType
-instance ToByteString StatusType
-instance ToQuery      StatusType
-instance ToHeader     StatusType
-
-instance FromXML StatusType where
-    parseXML = parseXMLText "StatusType"
-
-data SubnetCidrBlockStateCode
-    = Associated
-    | Associating
-    | Disassociated
-    | Disassociating
-    | Failed
-    | Failing
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SubnetCidrBlockStateCode where
-    parser = takeLowerText >>= \case
-        "associated" -> pure Associated
-        "associating" -> pure Associating
-        "disassociated" -> pure Disassociated
-        "disassociating" -> pure Disassociating
-        "failed" -> pure Failed
-        "failing" -> pure Failing
-        e -> fromTextError $ "Failure parsing SubnetCidrBlockStateCode from value: '" <> e
-           <> "'. Accepted values: associated, associating, disassociated, disassociating, failed, failing"
-
-instance ToText SubnetCidrBlockStateCode where
-    toText = \case
-        Associated -> "associated"
-        Associating -> "associating"
-        Disassociated -> "disassociated"
-        Disassociating -> "disassociating"
-        Failed -> "failed"
-        Failing -> "failing"
-
-instance Hashable     SubnetCidrBlockStateCode
-instance NFData       SubnetCidrBlockStateCode
-instance ToByteString SubnetCidrBlockStateCode
-instance ToQuery      SubnetCidrBlockStateCode
-instance ToHeader     SubnetCidrBlockStateCode
-
-instance FromXML SubnetCidrBlockStateCode where
-    parseXML = parseXMLText "SubnetCidrBlockStateCode"
-
-data SubnetState
-    = SubAvailable
-    | SubPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SubnetState where
-    parser = takeLowerText >>= \case
-        "available" -> pure SubAvailable
-        "pending" -> pure SubPending
-        e -> fromTextError $ "Failure parsing SubnetState from value: '" <> e
-           <> "'. Accepted values: available, pending"
-
-instance ToText SubnetState where
-    toText = \case
-        SubAvailable -> "available"
-        SubPending -> "pending"
-
-instance Hashable     SubnetState
-instance NFData       SubnetState
-instance ToByteString SubnetState
-instance ToQuery      SubnetState
-instance ToHeader     SubnetState
-
-instance FromXML SubnetState where
-    parseXML = parseXMLText "SubnetState"
-
-data SummaryStatus
-    = SSImpaired
-    | SSInitializing
-    | SSInsufficientData
-    | SSNotApplicable
-    | SSOK
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText SummaryStatus where
-    parser = takeLowerText >>= \case
-        "impaired" -> pure SSImpaired
-        "initializing" -> pure SSInitializing
-        "insufficient-data" -> pure SSInsufficientData
-        "not-applicable" -> pure SSNotApplicable
-        "ok" -> pure SSOK
-        e -> fromTextError $ "Failure parsing SummaryStatus from value: '" <> e
-           <> "'. Accepted values: impaired, initializing, insufficient-data, not-applicable, ok"
-
-instance ToText SummaryStatus where
-    toText = \case
-        SSImpaired -> "impaired"
-        SSInitializing -> "initializing"
-        SSInsufficientData -> "insufficient-data"
-        SSNotApplicable -> "not-applicable"
-        SSOK -> "ok"
-
-instance Hashable     SummaryStatus
-instance NFData       SummaryStatus
-instance ToByteString SummaryStatus
-instance ToQuery      SummaryStatus
-instance ToHeader     SummaryStatus
-
-instance FromXML SummaryStatus where
-    parseXML = parseXMLText "SummaryStatus"
-
-data TelemetryStatus
-    = Down
-    | UP
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText TelemetryStatus where
-    parser = takeLowerText >>= \case
-        "down" -> pure Down
-        "up" -> pure UP
-        e -> fromTextError $ "Failure parsing TelemetryStatus from value: '" <> e
-           <> "'. Accepted values: down, up"
-
-instance ToText TelemetryStatus where
-    toText = \case
-        Down -> "DOWN"
-        UP -> "UP"
-
-instance Hashable     TelemetryStatus
-instance NFData       TelemetryStatus
-instance ToByteString TelemetryStatus
-instance ToQuery      TelemetryStatus
-instance ToHeader     TelemetryStatus
-
-instance FromXML TelemetryStatus where
-    parseXML = parseXMLText "TelemetryStatus"
-
-data Tenancy
-    = Dedicated
-    | Default
-    | Host
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText Tenancy where
-    parser = takeLowerText >>= \case
-        "dedicated" -> pure Dedicated
-        "default" -> pure Default
-        "host" -> pure Host
-        e -> fromTextError $ "Failure parsing Tenancy from value: '" <> e
-           <> "'. Accepted values: dedicated, default, host"
-
-instance ToText Tenancy where
-    toText = \case
-        Dedicated -> "dedicated"
-        Default -> "default"
-        Host -> "host"
-
-instance Hashable     Tenancy
-instance NFData       Tenancy
-instance ToByteString Tenancy
-instance ToQuery      Tenancy
-instance ToHeader     Tenancy
-
-instance FromXML Tenancy where
-    parseXML = parseXMLText "Tenancy"
-
-data TrafficType
-    = TTAccept
-    | TTAll
-    | TTReject
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText TrafficType where
-    parser = takeLowerText >>= \case
-        "accept" -> pure TTAccept
-        "all" -> pure TTAll
-        "reject" -> pure TTReject
-        e -> fromTextError $ "Failure parsing TrafficType from value: '" <> e
-           <> "'. Accepted values: accept, all, reject"
-
-instance ToText TrafficType where
-    toText = \case
-        TTAccept -> "ACCEPT"
-        TTAll -> "ALL"
-        TTReject -> "REJECT"
-
-instance Hashable     TrafficType
-instance NFData       TrafficType
-instance ToByteString TrafficType
-instance ToQuery      TrafficType
-instance ToHeader     TrafficType
-
-instance FromXML TrafficType where
-    parseXML = parseXMLText "TrafficType"
-
-data VPCAttributeName
-    = EnableDNSHostnames
-    | EnableDNSSupport
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VPCAttributeName where
-    parser = takeLowerText >>= \case
-        "enablednshostnames" -> pure EnableDNSHostnames
-        "enablednssupport" -> pure EnableDNSSupport
-        e -> fromTextError $ "Failure parsing VPCAttributeName from value: '" <> e
-           <> "'. Accepted values: enablednshostnames, enablednssupport"
-
-instance ToText VPCAttributeName where
-    toText = \case
-        EnableDNSHostnames -> "enableDnsHostnames"
-        EnableDNSSupport -> "enableDnsSupport"
-
-instance Hashable     VPCAttributeName
-instance NFData       VPCAttributeName
-instance ToByteString VPCAttributeName
-instance ToQuery      VPCAttributeName
-instance ToHeader     VPCAttributeName
-
-data VPCCidrBlockStateCode
-    = VCBSCAssociated
-    | VCBSCAssociating
-    | VCBSCDisassociated
-    | VCBSCDisassociating
-    | VCBSCFailed
-    | VCBSCFailing
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VPCCidrBlockStateCode where
-    parser = takeLowerText >>= \case
-        "associated" -> pure VCBSCAssociated
-        "associating" -> pure VCBSCAssociating
-        "disassociated" -> pure VCBSCDisassociated
-        "disassociating" -> pure VCBSCDisassociating
-        "failed" -> pure VCBSCFailed
-        "failing" -> pure VCBSCFailing
-        e -> fromTextError $ "Failure parsing VPCCidrBlockStateCode from value: '" <> e
-           <> "'. Accepted values: associated, associating, disassociated, disassociating, failed, failing"
-
-instance ToText VPCCidrBlockStateCode where
-    toText = \case
-        VCBSCAssociated -> "associated"
-        VCBSCAssociating -> "associating"
-        VCBSCDisassociated -> "disassociated"
-        VCBSCDisassociating -> "disassociating"
-        VCBSCFailed -> "failed"
-        VCBSCFailing -> "failing"
-
-instance Hashable     VPCCidrBlockStateCode
-instance NFData       VPCCidrBlockStateCode
-instance ToByteString VPCCidrBlockStateCode
-instance ToQuery      VPCCidrBlockStateCode
-instance ToHeader     VPCCidrBlockStateCode
-
-instance FromXML VPCCidrBlockStateCode where
-    parseXML = parseXMLText "VPCCidrBlockStateCode"
-
-data VPCPeeringConnectionStateReasonCode
-    = VPCSRCActive
-    | VPCSRCDeleted
-    | VPCSRCDeleting
-    | VPCSRCExpired
-    | VPCSRCFailed
-    | VPCSRCInitiatingRequest
-    | VPCSRCPendingAcceptance
-    | VPCSRCProvisioning
-    | VPCSRCRejected
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VPCPeeringConnectionStateReasonCode where
-    parser = takeLowerText >>= \case
-        "active" -> pure VPCSRCActive
-        "deleted" -> pure VPCSRCDeleted
-        "deleting" -> pure VPCSRCDeleting
-        "expired" -> pure VPCSRCExpired
-        "failed" -> pure VPCSRCFailed
-        "initiating-request" -> pure VPCSRCInitiatingRequest
-        "pending-acceptance" -> pure VPCSRCPendingAcceptance
-        "provisioning" -> pure VPCSRCProvisioning
-        "rejected" -> pure VPCSRCRejected
-        e -> fromTextError $ "Failure parsing VPCPeeringConnectionStateReasonCode from value: '" <> e
-           <> "'. Accepted values: active, deleted, deleting, expired, failed, initiating-request, pending-acceptance, provisioning, rejected"
-
-instance ToText VPCPeeringConnectionStateReasonCode where
-    toText = \case
-        VPCSRCActive -> "active"
-        VPCSRCDeleted -> "deleted"
-        VPCSRCDeleting -> "deleting"
-        VPCSRCExpired -> "expired"
-        VPCSRCFailed -> "failed"
-        VPCSRCInitiatingRequest -> "initiating-request"
-        VPCSRCPendingAcceptance -> "pending-acceptance"
-        VPCSRCProvisioning -> "provisioning"
-        VPCSRCRejected -> "rejected"
-
-instance Hashable     VPCPeeringConnectionStateReasonCode
-instance NFData       VPCPeeringConnectionStateReasonCode
-instance ToByteString VPCPeeringConnectionStateReasonCode
-instance ToQuery      VPCPeeringConnectionStateReasonCode
-instance ToHeader     VPCPeeringConnectionStateReasonCode
-
-instance FromXML VPCPeeringConnectionStateReasonCode where
-    parseXML = parseXMLText "VPCPeeringConnectionStateReasonCode"
-
-data VPCState
-    = VPCSAvailable
-    | VPCSPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VPCState where
-    parser = takeLowerText >>= \case
-        "available" -> pure VPCSAvailable
-        "pending" -> pure VPCSPending
-        e -> fromTextError $ "Failure parsing VPCState from value: '" <> e
-           <> "'. Accepted values: available, pending"
-
-instance ToText VPCState where
-    toText = \case
-        VPCSAvailable -> "available"
-        VPCSPending -> "pending"
-
-instance Hashable     VPCState
-instance NFData       VPCState
-instance ToByteString VPCState
-instance ToQuery      VPCState
-instance ToHeader     VPCState
-
-instance FromXML VPCState where
-    parseXML = parseXMLText "VPCState"
-
-data VPNState
-    = VSAvailable
-    | VSDeleted
-    | VSDeleting
-    | VSPending
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VPNState where
-    parser = takeLowerText >>= \case
-        "available" -> pure VSAvailable
-        "deleted" -> pure VSDeleted
-        "deleting" -> pure VSDeleting
-        "pending" -> pure VSPending
-        e -> fromTextError $ "Failure parsing VPNState from value: '" <> e
-           <> "'. Accepted values: available, deleted, deleting, pending"
-
-instance ToText VPNState where
-    toText = \case
-        VSAvailable -> "available"
-        VSDeleted -> "deleted"
-        VSDeleting -> "deleting"
-        VSPending -> "pending"
-
-instance Hashable     VPNState
-instance NFData       VPNState
-instance ToByteString VPNState
-instance ToQuery      VPNState
-instance ToHeader     VPNState
-
-instance FromXML VPNState where
-    parseXML = parseXMLText "VPNState"
-
-data VPNStaticRouteSource =
-    Static
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VPNStaticRouteSource where
-    parser = takeLowerText >>= \case
-        "static" -> pure Static
-        e -> fromTextError $ "Failure parsing VPNStaticRouteSource from value: '" <> e
-           <> "'. Accepted values: static"
-
-instance ToText VPNStaticRouteSource where
-    toText = \case
-        Static -> "Static"
-
-instance Hashable     VPNStaticRouteSource
-instance NFData       VPNStaticRouteSource
-instance ToByteString VPNStaticRouteSource
-instance ToQuery      VPNStaticRouteSource
-instance ToHeader     VPNStaticRouteSource
-
-instance FromXML VPNStaticRouteSource where
-    parseXML = parseXMLText "VPNStaticRouteSource"
-
-data VirtualizationType
-    = HVM
-    | Paravirtual
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VirtualizationType where
-    parser = takeLowerText >>= \case
-        "hvm" -> pure HVM
-        "paravirtual" -> pure Paravirtual
-        e -> fromTextError $ "Failure parsing VirtualizationType from value: '" <> e
-           <> "'. Accepted values: hvm, paravirtual"
-
-instance ToText VirtualizationType where
-    toText = \case
-        HVM -> "hvm"
-        Paravirtual -> "paravirtual"
-
-instance Hashable     VirtualizationType
-instance NFData       VirtualizationType
-instance ToByteString VirtualizationType
-instance ToQuery      VirtualizationType
-instance ToHeader     VirtualizationType
-
-instance FromXML VirtualizationType where
-    parseXML = parseXMLText "VirtualizationType"
-
-data VolumeAttachmentState
-    = VAttached
-    | VAttaching
-    | VBusy
-    | VDetached
-    | VDetaching
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VolumeAttachmentState where
-    parser = takeLowerText >>= \case
-        "attached" -> pure VAttached
-        "attaching" -> pure VAttaching
-        "busy" -> pure VBusy
-        "detached" -> pure VDetached
-        "detaching" -> pure VDetaching
-        e -> fromTextError $ "Failure parsing VolumeAttachmentState from value: '" <> e
-           <> "'. Accepted values: attached, attaching, busy, detached, detaching"
-
-instance ToText VolumeAttachmentState where
-    toText = \case
-        VAttached -> "attached"
-        VAttaching -> "attaching"
-        VBusy -> "busy"
-        VDetached -> "detached"
-        VDetaching -> "detaching"
-
-instance Hashable     VolumeAttachmentState
-instance NFData       VolumeAttachmentState
-instance ToByteString VolumeAttachmentState
-instance ToQuery      VolumeAttachmentState
-instance ToHeader     VolumeAttachmentState
-
-instance FromXML VolumeAttachmentState where
-    parseXML = parseXMLText "VolumeAttachmentState"
-
-data VolumeAttributeName
-    = VANAutoEnableIO
-    | VANProductCodes
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VolumeAttributeName where
-    parser = takeLowerText >>= \case
-        "autoenableio" -> pure VANAutoEnableIO
-        "productcodes" -> pure VANProductCodes
-        e -> fromTextError $ "Failure parsing VolumeAttributeName from value: '" <> e
-           <> "'. Accepted values: autoenableio, productcodes"
-
-instance ToText VolumeAttributeName where
-    toText = \case
-        VANAutoEnableIO -> "autoEnableIO"
-        VANProductCodes -> "productCodes"
-
-instance Hashable     VolumeAttributeName
-instance NFData       VolumeAttributeName
-instance ToByteString VolumeAttributeName
-instance ToQuery      VolumeAttributeName
-instance ToHeader     VolumeAttributeName
-
-data VolumeState
-    = VAvailable
-    | VCreating
-    | VDeleted
-    | VDeleting
-    | VError'
-    | VInUse
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VolumeState where
-    parser = takeLowerText >>= \case
-        "available" -> pure VAvailable
-        "creating" -> pure VCreating
-        "deleted" -> pure VDeleted
-        "deleting" -> pure VDeleting
-        "error" -> pure VError'
-        "in-use" -> pure VInUse
-        e -> fromTextError $ "Failure parsing VolumeState from value: '" <> e
-           <> "'. Accepted values: available, creating, deleted, deleting, error, in-use"
-
-instance ToText VolumeState where
-    toText = \case
-        VAvailable -> "available"
-        VCreating -> "creating"
-        VDeleted -> "deleted"
-        VDeleting -> "deleting"
-        VError' -> "error"
-        VInUse -> "in-use"
-
-instance Hashable     VolumeState
-instance NFData       VolumeState
-instance ToByteString VolumeState
-instance ToQuery      VolumeState
-instance ToHeader     VolumeState
-
-instance FromXML VolumeState where
-    parseXML = parseXMLText "VolumeState"
-
-data VolumeStatusInfoStatus
-    = Impaired
-    | InsufficientData
-    | OK
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VolumeStatusInfoStatus where
-    parser = takeLowerText >>= \case
-        "impaired" -> pure Impaired
-        "insufficient-data" -> pure InsufficientData
-        "ok" -> pure OK
-        e -> fromTextError $ "Failure parsing VolumeStatusInfoStatus from value: '" <> e
-           <> "'. Accepted values: impaired, insufficient-data, ok"
-
-instance ToText VolumeStatusInfoStatus where
-    toText = \case
-        Impaired -> "impaired"
-        InsufficientData -> "insufficient-data"
-        OK -> "ok"
-
-instance Hashable     VolumeStatusInfoStatus
-instance NFData       VolumeStatusInfoStatus
-instance ToByteString VolumeStatusInfoStatus
-instance ToQuery      VolumeStatusInfoStatus
-instance ToHeader     VolumeStatusInfoStatus
-
-instance FromXML VolumeStatusInfoStatus where
-    parseXML = parseXMLText "VolumeStatusInfoStatus"
-
-data VolumeStatusName
-    = IOEnabled
-    | IOPerformance
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VolumeStatusName where
-    parser = takeLowerText >>= \case
-        "io-enabled" -> pure IOEnabled
-        "io-performance" -> pure IOPerformance
-        e -> fromTextError $ "Failure parsing VolumeStatusName from value: '" <> e
-           <> "'. Accepted values: io-enabled, io-performance"
-
-instance ToText VolumeStatusName where
-    toText = \case
-        IOEnabled -> "io-enabled"
-        IOPerformance -> "io-performance"
-
-instance Hashable     VolumeStatusName
-instance NFData       VolumeStatusName
-instance ToByteString VolumeStatusName
-instance ToQuery      VolumeStatusName
-instance ToHeader     VolumeStatusName
-
-instance FromXML VolumeStatusName where
-    parseXML = parseXMLText "VolumeStatusName"
-
-data VolumeType
-    = VTGP2
-    | VTIO1
-    | VTSC1
-    | VTST1
-    | VTStandard
-    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
-
-instance FromText VolumeType where
-    parser = takeLowerText >>= \case
-        "gp2" -> pure VTGP2
-        "io1" -> pure VTIO1
-        "sc1" -> pure VTSC1
-        "st1" -> pure VTST1
-        "standard" -> pure VTStandard
-        e -> fromTextError $ "Failure parsing VolumeType from value: '" <> e
-           <> "'. Accepted values: gp2, io1, sc1, st1, standard"
-
-instance ToText VolumeType where
-    toText = \case
-        VTGP2 -> "gp2"
-        VTIO1 -> "io1"
-        VTSC1 -> "sc1"
-        VTST1 -> "st1"
-        VTStandard -> "standard"
-
-instance Hashable     VolumeType
-instance NFData       VolumeType
-instance ToByteString VolumeType
-instance ToQuery      VolumeType
-instance ToHeader     VolumeType
-
-instance FromXML VolumeType where
-    parseXML = parseXMLText "VolumeType"
diff --git a/gen/Network/AWS/EC2/UnassignIPv6Addresses.hs b/gen/Network/AWS/EC2/UnassignIPv6Addresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/UnassignIPv6Addresses.hs
+++ /dev/null
@@ -1,148 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.UnassignIPv6Addresses
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Unassigns one or more IPv6 addresses from a network interface.
---
---
-module Network.AWS.EC2.UnassignIPv6Addresses
-    (
-    -- * Creating a Request
-      unassignIPv6Addresses
-    , UnassignIPv6Addresses
-    -- * Request Lenses
-    , uiaNetworkInterfaceId
-    , uiaIPv6Addresses
-
-    -- * Destructuring the Response
-    , unassignIPv6AddressesResponse
-    , UnassignIPv6AddressesResponse
-    -- * Response Lenses
-    , uiarsNetworkInterfaceId
-    , uiarsUnassignedIPv6Addresses
-    , uiarsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | /See:/ 'unassignIPv6Addresses' smart constructor.
-data UnassignIPv6Addresses = UnassignIPv6Addresses'
-    { _uiaNetworkInterfaceId :: !Text
-    , _uiaIPv6Addresses      :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnassignIPv6Addresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uiaNetworkInterfaceId' - The ID of the network interface.
---
--- * 'uiaIPv6Addresses' - The IPv6 addresses to unassign from the network interface.
-unassignIPv6Addresses
-    :: Text -- ^ 'uiaNetworkInterfaceId'
-    -> UnassignIPv6Addresses
-unassignIPv6Addresses pNetworkInterfaceId_ =
-    UnassignIPv6Addresses'
-    { _uiaNetworkInterfaceId = pNetworkInterfaceId_
-    , _uiaIPv6Addresses = mempty
-    }
-
--- | The ID of the network interface.
-uiaNetworkInterfaceId :: Lens' UnassignIPv6Addresses Text
-uiaNetworkInterfaceId = lens _uiaNetworkInterfaceId (\ s a -> s{_uiaNetworkInterfaceId = a});
-
--- | The IPv6 addresses to unassign from the network interface.
-uiaIPv6Addresses :: Lens' UnassignIPv6Addresses [Text]
-uiaIPv6Addresses = lens _uiaIPv6Addresses (\ s a -> s{_uiaIPv6Addresses = a}) . _Coerce;
-
-instance AWSRequest UnassignIPv6Addresses where
-        type Rs UnassignIPv6Addresses =
-             UnassignIPv6AddressesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 UnassignIPv6AddressesResponse' <$>
-                   (x .@? "networkInterfaceId") <*>
-                     (x .@? "unassignedIpv6Addresses" .!@ mempty >>=
-                        may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable UnassignIPv6Addresses
-
-instance NFData UnassignIPv6Addresses
-
-instance ToHeaders UnassignIPv6Addresses where
-        toHeaders = const mempty
-
-instance ToPath UnassignIPv6Addresses where
-        toPath = const "/"
-
-instance ToQuery UnassignIPv6Addresses where
-        toQuery UnassignIPv6Addresses'{..}
-          = mconcat
-              ["Action" =: ("UnassignIpv6Addresses" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NetworkInterfaceId" =: _uiaNetworkInterfaceId,
-               toQueryList "Ipv6Addresses" _uiaIPv6Addresses]
-
--- | /See:/ 'unassignIPv6AddressesResponse' smart constructor.
-data UnassignIPv6AddressesResponse = UnassignIPv6AddressesResponse'
-    { _uiarsNetworkInterfaceId      :: !(Maybe Text)
-    , _uiarsUnassignedIPv6Addresses :: !(Maybe [Text])
-    , _uiarsResponseStatus          :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnassignIPv6AddressesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uiarsNetworkInterfaceId' - The ID of the network interface.
---
--- * 'uiarsUnassignedIPv6Addresses' - The IPv6 addresses that have been unassigned from the network interface.
---
--- * 'uiarsResponseStatus' - -- | The response status code.
-unassignIPv6AddressesResponse
-    :: Int -- ^ 'uiarsResponseStatus'
-    -> UnassignIPv6AddressesResponse
-unassignIPv6AddressesResponse pResponseStatus_ =
-    UnassignIPv6AddressesResponse'
-    { _uiarsNetworkInterfaceId = Nothing
-    , _uiarsUnassignedIPv6Addresses = Nothing
-    , _uiarsResponseStatus = pResponseStatus_
-    }
-
--- | The ID of the network interface.
-uiarsNetworkInterfaceId :: Lens' UnassignIPv6AddressesResponse (Maybe Text)
-uiarsNetworkInterfaceId = lens _uiarsNetworkInterfaceId (\ s a -> s{_uiarsNetworkInterfaceId = a});
-
--- | The IPv6 addresses that have been unassigned from the network interface.
-uiarsUnassignedIPv6Addresses :: Lens' UnassignIPv6AddressesResponse [Text]
-uiarsUnassignedIPv6Addresses = lens _uiarsUnassignedIPv6Addresses (\ s a -> s{_uiarsUnassignedIPv6Addresses = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-uiarsResponseStatus :: Lens' UnassignIPv6AddressesResponse Int
-uiarsResponseStatus = lens _uiarsResponseStatus (\ s a -> s{_uiarsResponseStatus = a});
-
-instance NFData UnassignIPv6AddressesResponse
diff --git a/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs b/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs
+++ /dev/null
@@ -1,117 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.UnassignPrivateIPAddresses
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Unassigns one or more secondary private IP addresses from a network interface.
---
---
-module Network.AWS.EC2.UnassignPrivateIPAddresses
-    (
-    -- * Creating a Request
-      unassignPrivateIPAddresses
-    , UnassignPrivateIPAddresses
-    -- * Request Lenses
-    , upiaNetworkInterfaceId
-    , upiaPrivateIPAddresses
-
-    -- * Destructuring the Response
-    , unassignPrivateIPAddressesResponse
-    , UnassignPrivateIPAddressesResponse
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for UnassignPrivateIpAddresses.
---
---
---
--- /See:/ 'unassignPrivateIPAddresses' smart constructor.
-data UnassignPrivateIPAddresses = UnassignPrivateIPAddresses'
-    { _upiaNetworkInterfaceId :: !Text
-    , _upiaPrivateIPAddresses :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnassignPrivateIPAddresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'upiaNetworkInterfaceId' - The ID of the network interface.
---
--- * 'upiaPrivateIPAddresses' - The secondary private IP addresses to unassign from the network interface. You can specify this option multiple times to unassign more than one IP address.
-unassignPrivateIPAddresses
-    :: Text -- ^ 'upiaNetworkInterfaceId'
-    -> UnassignPrivateIPAddresses
-unassignPrivateIPAddresses pNetworkInterfaceId_ =
-    UnassignPrivateIPAddresses'
-    { _upiaNetworkInterfaceId = pNetworkInterfaceId_
-    , _upiaPrivateIPAddresses = mempty
-    }
-
--- | The ID of the network interface.
-upiaNetworkInterfaceId :: Lens' UnassignPrivateIPAddresses Text
-upiaNetworkInterfaceId = lens _upiaNetworkInterfaceId (\ s a -> s{_upiaNetworkInterfaceId = a});
-
--- | The secondary private IP addresses to unassign from the network interface. You can specify this option multiple times to unassign more than one IP address.
-upiaPrivateIPAddresses :: Lens' UnassignPrivateIPAddresses [Text]
-upiaPrivateIPAddresses = lens _upiaPrivateIPAddresses (\ s a -> s{_upiaPrivateIPAddresses = a}) . _Coerce;
-
-instance AWSRequest UnassignPrivateIPAddresses where
-        type Rs UnassignPrivateIPAddresses =
-             UnassignPrivateIPAddressesResponse
-        request = postQuery ec2
-        response
-          = receiveNull UnassignPrivateIPAddressesResponse'
-
-instance Hashable UnassignPrivateIPAddresses
-
-instance NFData UnassignPrivateIPAddresses
-
-instance ToHeaders UnassignPrivateIPAddresses where
-        toHeaders = const mempty
-
-instance ToPath UnassignPrivateIPAddresses where
-        toPath = const "/"
-
-instance ToQuery UnassignPrivateIPAddresses where
-        toQuery UnassignPrivateIPAddresses'{..}
-          = mconcat
-              ["Action" =:
-                 ("UnassignPrivateIpAddresses" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "NetworkInterfaceId" =: _upiaNetworkInterfaceId,
-               toQueryList "PrivateIpAddress"
-                 _upiaPrivateIPAddresses]
-
--- | /See:/ 'unassignPrivateIPAddressesResponse' smart constructor.
-data UnassignPrivateIPAddressesResponse =
-    UnassignPrivateIPAddressesResponse'
-    deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnassignPrivateIPAddressesResponse' with the minimum fields required to make a request.
---
-unassignPrivateIPAddressesResponse
-    :: UnassignPrivateIPAddressesResponse
-unassignPrivateIPAddressesResponse = UnassignPrivateIPAddressesResponse'
-
-instance NFData UnassignPrivateIPAddressesResponse
diff --git a/gen/Network/AWS/EC2/UnmonitorInstances.hs b/gen/Network/AWS/EC2/UnmonitorInstances.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/UnmonitorInstances.hs
+++ /dev/null
@@ -1,145 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.UnmonitorInstances
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disables detailed monitoring for a running instance. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html Monitoring Your Instances and Volumes> in the /Amazon Elastic Compute Cloud User Guide/ .
---
---
-module Network.AWS.EC2.UnmonitorInstances
-    (
-    -- * Creating a Request
-      unmonitorInstances
-    , UnmonitorInstances
-    -- * Request Lenses
-    , uiDryRun
-    , uiInstanceIds
-
-    -- * Destructuring the Response
-    , unmonitorInstancesResponse
-    , UnmonitorInstancesResponse
-    -- * Response Lenses
-    , uirsInstanceMonitorings
-    , uirsResponseStatus
-    ) where
-
-import           Network.AWS.EC2.Types
-import           Network.AWS.EC2.Types.Product
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Request
-import           Network.AWS.Response
-
--- | Contains the parameters for UnmonitorInstances.
---
---
---
--- /See:/ 'unmonitorInstances' smart constructor.
-data UnmonitorInstances = UnmonitorInstances'
-    { _uiDryRun      :: !(Maybe Bool)
-    , _uiInstanceIds :: ![Text]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnmonitorInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uiDryRun' - Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
---
--- * 'uiInstanceIds' - One or more instance IDs.
-unmonitorInstances
-    :: UnmonitorInstances
-unmonitorInstances =
-    UnmonitorInstances'
-    { _uiDryRun = Nothing
-    , _uiInstanceIds = mempty
-    }
-
--- | Checks whether you have the required permissions for the action, without actually making the request, and provides an error response. If you have the required permissions, the error response is @DryRunOperation@ . Otherwise, it is @UnauthorizedOperation@ .
-uiDryRun :: Lens' UnmonitorInstances (Maybe Bool)
-uiDryRun = lens _uiDryRun (\ s a -> s{_uiDryRun = a});
-
--- | One or more instance IDs.
-uiInstanceIds :: Lens' UnmonitorInstances [Text]
-uiInstanceIds = lens _uiInstanceIds (\ s a -> s{_uiInstanceIds = a}) . _Coerce;
-
-instance AWSRequest UnmonitorInstances where
-        type Rs UnmonitorInstances =
-             UnmonitorInstancesResponse
-        request = postQuery ec2
-        response
-          = receiveXML
-              (\ s h x ->
-                 UnmonitorInstancesResponse' <$>
-                   (x .@? "instancesSet" .!@ mempty >>=
-                      may (parseXMLList "item"))
-                     <*> (pure (fromEnum s)))
-
-instance Hashable UnmonitorInstances
-
-instance NFData UnmonitorInstances
-
-instance ToHeaders UnmonitorInstances where
-        toHeaders = const mempty
-
-instance ToPath UnmonitorInstances where
-        toPath = const "/"
-
-instance ToQuery UnmonitorInstances where
-        toQuery UnmonitorInstances'{..}
-          = mconcat
-              ["Action" =: ("UnmonitorInstances" :: ByteString),
-               "Version" =: ("2016-11-15" :: ByteString),
-               "DryRun" =: _uiDryRun,
-               toQueryList "InstanceId" _uiInstanceIds]
-
--- | Contains the output of UnmonitorInstances.
---
---
---
--- /See:/ 'unmonitorInstancesResponse' smart constructor.
-data UnmonitorInstancesResponse = UnmonitorInstancesResponse'
-    { _uirsInstanceMonitorings :: !(Maybe [InstanceMonitoring])
-    , _uirsResponseStatus      :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnmonitorInstancesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uirsInstanceMonitorings' - The monitoring information.
---
--- * 'uirsResponseStatus' - -- | The response status code.
-unmonitorInstancesResponse
-    :: Int -- ^ 'uirsResponseStatus'
-    -> UnmonitorInstancesResponse
-unmonitorInstancesResponse pResponseStatus_ =
-    UnmonitorInstancesResponse'
-    { _uirsInstanceMonitorings = Nothing
-    , _uirsResponseStatus = pResponseStatus_
-    }
-
--- | The monitoring information.
-uirsInstanceMonitorings :: Lens' UnmonitorInstancesResponse [InstanceMonitoring]
-uirsInstanceMonitorings = lens _uirsInstanceMonitorings (\ s a -> s{_uirsInstanceMonitorings = a}) . _Default . _Coerce;
-
--- | -- | The response status code.
-uirsResponseStatus :: Lens' UnmonitorInstancesResponse Int
-uirsResponseStatus = lens _uirsResponseStatus (\ s a -> s{_uirsResponseStatus = a});
-
-instance NFData UnmonitorInstancesResponse
diff --git a/gen/Network/AWS/EC2/Waiters.hs b/gen/Network/AWS/EC2/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/EC2/Waiters.hs
+++ /dev/null
@@ -1,576 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.EC2.Waiters
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.EC2.Waiters where
-
-import           Network.AWS.EC2.DescribeBundleTasks
-import           Network.AWS.EC2.DescribeConversionTasks
-import           Network.AWS.EC2.DescribeConversionTasks
-import           Network.AWS.EC2.DescribeConversionTasks
-import           Network.AWS.EC2.DescribeCustomerGateways
-import           Network.AWS.EC2.DescribeExportTasks
-import           Network.AWS.EC2.DescribeExportTasks
-import           Network.AWS.EC2.DescribeImages
-import           Network.AWS.EC2.DescribeInstances
-import           Network.AWS.EC2.DescribeInstances
-import           Network.AWS.EC2.DescribeInstances
-import           Network.AWS.EC2.DescribeInstances
-import           Network.AWS.EC2.DescribeInstanceStatus
-import           Network.AWS.EC2.DescribeInstanceStatus
-import           Network.AWS.EC2.DescribeNatGateways
-import           Network.AWS.EC2.DescribeNetworkInterfaces
-import           Network.AWS.EC2.DescribeSnapshots
-import           Network.AWS.EC2.DescribeSpotInstanceRequests
-import           Network.AWS.EC2.DescribeSubnets
-import           Network.AWS.EC2.DescribeVolumes
-import           Network.AWS.EC2.DescribeVolumes
-import           Network.AWS.EC2.DescribeVolumes
-import           Network.AWS.EC2.DescribeVPCPeeringConnections
-import           Network.AWS.EC2.DescribeVPCs
-import           Network.AWS.EC2.DescribeVPCs
-import           Network.AWS.EC2.DescribeVPNConnections
-import           Network.AWS.EC2.DescribeVPNConnections
-import           Network.AWS.EC2.GetPasswordData
-import           Network.AWS.EC2.Types
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-import           Network.AWS.Waiter
-
--- | Polls 'Network.AWS.EC2.DescribeInstances' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-instanceTerminated :: Wait DescribeInstances
-instanceTerminated =
-    Wait
-    { _waitName = "InstanceTerminated"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "terminated"
-                             AcceptSuccess
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "pending"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "stopping"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVolumes' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-volumeInUse :: Wait DescribeVolumes
-volumeInUse =
-    Wait
-    { _waitName = "VolumeInUse"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "in-use"
-                             AcceptSuccess
-                             (folding (concatOf dvvrsVolumes) .
-                              vState . to toTextCI)
-                       , matchAny
-                             "deleted"
-                             AcceptFailure
-                             (folding (concatOf dvvrsVolumes) .
-                              vState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeNatGateways' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-natGatewayAvailable :: Wait DescribeNatGateways
-natGatewayAvailable =
-    Wait
-    { _waitName = "NatGatewayAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dngrsNatGateways) .
-                              ngState . _Just . to toTextCI)
-                       , matchAny
-                             "failed"
-                             AcceptFailure
-                             (folding (concatOf dngrsNatGateways) .
-                              ngState . _Just . to toTextCI)
-                       , matchAny
-                             "deleting"
-                             AcceptFailure
-                             (folding (concatOf dngrsNatGateways) .
-                              ngState . _Just . to toTextCI)
-                       , matchAny
-                             "deleted"
-                             AcceptFailure
-                             (folding (concatOf dngrsNatGateways) .
-                              ngState . _Just . to toTextCI)
-                       , matchError "NatGatewayNotFound" AcceptRetry]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeSubnets' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-subnetAvailable :: Wait DescribeSubnets
-subnetAvailable =
-    Wait
-    { _waitName = "SubnetAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dsrsSubnets) .
-                              subState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeNetworkInterfaces' every 20 seconds until a successful state is reached. An error is returned after 10 failed checks.
-networkInterfaceAvailable :: Wait DescribeNetworkInterfaces
-networkInterfaceAvailable =
-    Wait
-    { _waitName = "NetworkInterfaceAvailable"
-    , _waitAttempts = 10
-    , _waitDelay = 20
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dnirsNetworkInterfaces) .
-                              niStatus . _Just . to toTextCI)
-                       , matchError
-                             "InvalidNetworkInterfaceID.NotFound"
-                             AcceptFailure]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeInstanceStatus' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-systemStatusOK :: Wait DescribeInstanceStatus
-systemStatusOK =
-    Wait
-    { _waitName = "SystemStatusOk"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "ok"
-                             AcceptSuccess
-                             (folding (concatOf disrsInstanceStatuses) .
-                              isSystemStatus . _Just . issStatus . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeCustomerGateways' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-customerGatewayAvailable :: Wait DescribeCustomerGateways
-customerGatewayAvailable =
-    Wait
-    { _waitName = "CustomerGatewayAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dcgrsCustomerGateways) .
-                              cgState . to toTextCI)
-                       , matchAny
-                             "deleted"
-                             AcceptFailure
-                             (folding (concatOf dcgrsCustomerGateways) .
-                              cgState . to toTextCI)
-                       , matchAny
-                             "deleting"
-                             AcceptFailure
-                             (folding (concatOf dcgrsCustomerGateways) .
-                              cgState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeConversionTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-conversionTaskCompleted :: Wait DescribeConversionTasks
-conversionTaskCompleted =
-    Wait
-    { _waitName = "ConversionTaskCompleted"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "completed"
-                             AcceptSuccess
-                             (folding (concatOf dctrsConversionTasks) .
-                              ctState . to toTextCI)
-                       , matchAny
-                             "cancelled"
-                             AcceptFailure
-                             (folding (concatOf dctrsConversionTasks) .
-                              ctState . to toTextCI)
-                       , matchAny
-                             "cancelling"
-                             AcceptFailure
-                             (folding (concatOf dctrsConversionTasks) .
-                              ctState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeInstances' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-instanceStopped :: Wait DescribeInstances
-instanceStopped =
-    Wait
-    { _waitName = "InstanceStopped"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "stopped"
-                             AcceptSuccess
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "pending"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "terminated"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeConversionTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-conversionTaskDeleted :: Wait DescribeConversionTasks
-conversionTaskDeleted =
-    Wait
-    { _waitName = "ConversionTaskDeleted"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "deleted"
-                             AcceptSuccess
-                             (folding (concatOf dctrsConversionTasks) .
-                              ctState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.GetPasswordData' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-passwordDataAvailable :: Wait GetPasswordData
-passwordDataAvailable =
-    Wait
-    { _waitName = "PasswordDataAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             True
-                             AcceptSuccess
-                             (nonEmpty gpdrsPasswordData)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeInstances' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-instanceRunning :: Wait DescribeInstances
-instanceRunning =
-    Wait
-    { _waitName = "InstanceRunning"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "running"
-                             AcceptSuccess
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "shutting-down"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "terminated"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchAny
-                             "stopping"
-                             AcceptFailure
-                             (folding (concatOf dirsReservations) .
-                              folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)
-                       , matchError "InvalidInstanceID.NotFound" AcceptRetry]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeSpotInstanceRequests' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-spotInstanceRequestFulfilled :: Wait DescribeSpotInstanceRequests
-spotInstanceRequestFulfilled =
-    Wait
-    { _waitName = "SpotInstanceRequestFulfilled"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "fulfilled"
-                             AcceptSuccess
-                             (folding (concatOf dsirrsSpotInstanceRequests) .
-                              sirStatus . _Just . sisCode . _Just . to toTextCI)
-                       , matchAny
-                             "schedule-expired"
-                             AcceptFailure
-                             (folding (concatOf dsirrsSpotInstanceRequests) .
-                              sirStatus . _Just . sisCode . _Just . to toTextCI)
-                       , matchAny
-                             "canceled-before-fulfillment"
-                             AcceptFailure
-                             (folding (concatOf dsirrsSpotInstanceRequests) .
-                              sirStatus . _Just . sisCode . _Just . to toTextCI)
-                       , matchAny
-                             "bad-parameters"
-                             AcceptFailure
-                             (folding (concatOf dsirrsSpotInstanceRequests) .
-                              sirStatus . _Just . sisCode . _Just . to toTextCI)
-                       , matchAny
-                             "system-error"
-                             AcceptFailure
-                             (folding (concatOf dsirrsSpotInstanceRequests) .
-                              sirStatus . _Just . sisCode . _Just . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVPCs' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-vpcAvailable :: Wait DescribeVPCs
-vpcAvailable =
-    Wait
-    { _waitName = "VpcAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dvrsVPCs) .
-                              vpcState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeExportTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-exportTaskCompleted :: Wait DescribeExportTasks
-exportTaskCompleted =
-    Wait
-    { _waitName = "ExportTaskCompleted"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "completed"
-                             AcceptSuccess
-                             (folding (concatOf detrsExportTasks) .
-                              etState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVPNConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-vpnConnectionAvailable :: Wait DescribeVPNConnections
-vpnConnectionAvailable =
-    Wait
-    { _waitName = "VpnConnectionAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dvcrsVPNConnections) .
-                              vcState . to toTextCI)
-                       , matchAny
-                             "deleting"
-                             AcceptFailure
-                             (folding (concatOf dvcrsVPNConnections) .
-                              vcState . to toTextCI)
-                       , matchAny
-                             "deleted"
-                             AcceptFailure
-                             (folding (concatOf dvcrsVPNConnections) .
-                              vcState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeExportTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-exportTaskCancelled :: Wait DescribeExportTasks
-exportTaskCancelled =
-    Wait
-    { _waitName = "ExportTaskCancelled"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "cancelled"
-                             AcceptSuccess
-                             (folding (concatOf detrsExportTasks) .
-                              etState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVolumes' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-volumeDeleted :: Wait DescribeVolumes
-volumeDeleted =
-    Wait
-    { _waitName = "VolumeDeleted"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "deleted"
-                             AcceptSuccess
-                             (folding (concatOf dvvrsVolumes) .
-                              vState . to toTextCI)
-                       , matchError "InvalidVolume.NotFound" AcceptSuccess]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVPCs' every 1 seconds until a successful state is reached. An error is returned after 5 failed checks.
-vpcExists :: Wait DescribeVPCs
-vpcExists =
-    Wait
-    { _waitName = "VpcExists"
-    , _waitAttempts = 5
-    , _waitDelay = 1
-    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
-                       , matchError "InvalidVpcID.NotFound" AcceptRetry]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeBundleTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-bundleTaskComplete :: Wait DescribeBundleTasks
-bundleTaskComplete =
-    Wait
-    { _waitName = "BundleTaskComplete"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "complete"
-                             AcceptSuccess
-                             (folding (concatOf dbtrsBundleTasks) .
-                              btState . to toTextCI)
-                       , matchAny
-                             "failed"
-                             AcceptFailure
-                             (folding (concatOf dbtrsBundleTasks) .
-                              btState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVPNConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-vpnConnectionDeleted :: Wait DescribeVPNConnections
-vpnConnectionDeleted =
-    Wait
-    { _waitName = "VpnConnectionDeleted"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "deleted"
-                             AcceptSuccess
-                             (folding (concatOf dvcrsVPNConnections) .
-                              vcState . to toTextCI)
-                       , matchAny
-                             "pending"
-                             AcceptFailure
-                             (folding (concatOf dvcrsVPNConnections) .
-                              vcState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeConversionTasks' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-conversionTaskCancelled :: Wait DescribeConversionTasks
-conversionTaskCancelled =
-    Wait
-    { _waitName = "ConversionTaskCancelled"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "cancelled"
-                             AcceptSuccess
-                             (folding (concatOf dctrsConversionTasks) .
-                              ctState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeImages' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-imageAvailable :: Wait DescribeImages
-imageAvailable =
-    Wait
-    { _waitName = "ImageAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf desrsImages) .
-                              iState . to toTextCI)
-                       , matchAny
-                             "deregistered"
-                             AcceptFailure
-                             (folding (concatOf desrsImages) .
-                              iState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVPCPeeringConnections' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-vpcPeeringConnectionExists :: Wait DescribeVPCPeeringConnections
-vpcPeeringConnectionExists =
-    Wait
-    { _waitName = "VpcPeeringConnectionExists"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
-                       , matchError
-                             "InvalidVpcPeeringConnectionID.NotFound"
-                             AcceptRetry]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeSnapshots' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-snapshotCompleted :: Wait DescribeSnapshots
-snapshotCompleted =
-    Wait
-    { _waitName = "SnapshotCompleted"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "completed"
-                             AcceptSuccess
-                             (folding (concatOf dssrsSnapshots) .
-                              sState . to toTextCI)]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeInstances' every 5 seconds until a successful state is reached. An error is returned after 40 failed checks.
-instanceExists :: Wait DescribeInstances
-instanceExists =
-    Wait
-    { _waitName = "InstanceExists"
-    , _waitAttempts = 40
-    , _waitDelay = 5
-    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
-                       , matchError "InvalidInstanceIDNotFound" AcceptRetry]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeInstanceStatus' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-instanceStatusOK :: Wait DescribeInstanceStatus
-instanceStatusOK =
-    Wait
-    { _waitName = "InstanceStatusOk"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "ok"
-                             AcceptSuccess
-                             (folding (concatOf disrsInstanceStatuses) .
-                              isInstanceStatus .
-                              _Just . issStatus . to toTextCI)
-                       , matchError "InvalidInstanceID.NotFound" AcceptRetry]
-    }
-
--- | Polls 'Network.AWS.EC2.DescribeVolumes' every 15 seconds until a successful state is reached. An error is returned after 40 failed checks.
-volumeAvailable :: Wait DescribeVolumes
-volumeAvailable =
-    Wait
-    { _waitName = "VolumeAvailable"
-    , _waitAttempts = 40
-    , _waitDelay = 15
-    , _waitAcceptors = [ matchAll
-                             "available"
-                             AcceptSuccess
-                             (folding (concatOf dvvrsVolumes) .
-                              vState . to toTextCI)
-                       , matchAny
-                             "deleted"
-                             AcceptFailure
-                             (folding (concatOf dvvrsVolumes) .
-                              vState . to toTextCI)]
-    }
diff --git a/src/Amazonka/EC2/Internal.hs b/src/Amazonka/EC2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/src/Amazonka/EC2/Internal.hs
@@ -0,0 +1,54 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+
+-- |
+-- Module      : Amazonka.EC2.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+module Amazonka.EC2.Internal where
+
+import Amazonka.Core.Lens.Internal
+import Amazonka.Data
+import Amazonka.Prelude
+
+-- | Custom 'Tag' type which has an optional value component.
+--
+-- /See:/ 'tag' smart constructor.
+data DeleteTag = DeleteTag'
+  { -- | Tag keys are case-sensitive and accept a maximum of 127
+    -- Unicode characters. May not begin with 'aws:'
+    key :: !Text,
+    -- | Tag values are case-sensitive and accept a maximum of 255
+    -- Unicode characters.
+    value :: !(Maybe Text)
+  }
+  deriving (Eq, Read, Show, Generic)
+
+newDeleteTag ::
+  -- | 'key'
+  Text ->
+  DeleteTag
+newDeleteTag key = DeleteTag' {key, value = Nothing}
+
+{-# INLINE deleteTag_key #-}
+deleteTag_key :: Lens' DeleteTag Text
+deleteTag_key = lens key (\s a -> s {key = a})
+
+{-# INLINE deleteTag_value #-}
+deleteTag_value :: Lens' DeleteTag (Maybe Text)
+deleteTag_value = lens value (\s a -> s {value = a})
+
+instance FromXML DeleteTag where
+  parseXML x = DeleteTag' <$> (x .@ "key") <*> (x .@? "value")
+
+instance ToQuery DeleteTag where
+  toQuery DeleteTag' {..} =
+    mconcat
+      [ "Key" =: key,
+        "Value" =: value
+      ]
diff --git a/src/Network/AWS/EC2/Internal.hs b/src/Network/AWS/EC2/Internal.hs
deleted file mode 100644
--- a/src/Network/AWS/EC2/Internal.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
--- |
--- Module      : Network.AWS.EC2.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.EC2.Internal where
-
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-
--- | Custom 'Tag' type which has an optional value component.
---
--- /See:/ 'tag' smart constructor.
-data DeleteTag = DeleteTag
-    { _deleteTagKey   :: !Text
-    , _deleteTagValue :: !(Maybe Text)
-    } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-deleteTag :: Text -- ^ 'deleteTagKey'
-          -> DeleteTag
-deleteTag k = DeleteTag k Nothing
-
--- | The key of the tag to delete.
---
--- Constraints: Tag keys are case-sensitive and accept a maximum of 127
--- Unicode characters. May not begin with 'aws:'
-deleteTagKey :: Lens' DeleteTag Text
-deleteTagKey = lens _deleteTagKey (\s a -> s { _deleteTagKey = a })
-
--- | The optional value of the tag to delete.
---
--- Constraints: Tag values are case-sensitive and accept a maximum of 255
--- Unicode characters.
-deleteTagValue :: Lens' DeleteTag (Maybe Text)
-deleteTagValue = lens _deleteTagValue (\ s a -> s{_deleteTagValue = a});
-
-instance FromXML DeleteTag where
-    parseXML x = DeleteTag <$> (x .@ "key") <*> (x .@? "value")
-
-instance ToQuery DeleteTag where
-    toQuery DeleteTag {..} = mconcat
-        [ "Key"   =: _deleteTagKey
-        , "Value" =: _deleteTagValue
-        ]
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2016 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.EC2
+import Test.Amazonka.EC2.Internal
 import Test.Tasty
-import Test.AWS.EC2
-import Test.AWS.EC2.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "EC2"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "EC2"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/EC2.hs b/test/Test/AWS/EC2.hs
deleted file mode 100644
--- a/test/Test/AWS/EC2.hs
+++ /dev/null
@@ -1,140 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TemplateHaskell   #-}
-
--- |
--- Module      : Test.AWS.EC2
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.EC2
-    ( tests
-    , fixtures
-    ) where
-
-import           Data.Time
-import           Network.AWS.EC2
-import           Network.AWS.Lens    ((&), (.~), (?~))
-import           Network.AWS.Prelude
-import           Test.AWS.Gen.EC2
-import           Test.AWS.TH
-import           Test.Tasty
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures =
-    [ testGroup "request"
-        [ requestDescribeVolumes $ describeVolumes
-            & desVolumeIds .~ ["foo", "bar", "baz"]
-            & desFilters   .~
-                [ filter' "tag:Name" & fValues .~ ["octopus"]
-                , filter' "tag:Role" & fValues .~ ["database", "server"]
-                ]
-
-        , requestDescribeImages $ describeImages
-            & deseFilters .~
-                [ filter' "is-public"    & fValues .~ ["true"]
-                , filter' "architecture" & fValues .~ ["x86_64"]
-                , filter' "platform"     & fValues .~ ["windows"]
-                ]
-
-        , requestDescribeInstances $ describeInstances
-            & diiInstanceIds .~ ["i-foo", "i-bar", "i-baz"]
-            & diiFilters     .~
-                [ filter' "instance-type"
-                    & fValues .~ ["m1.small", "m1.large"]
-                , filter' "block-device-mapping.status"
-                    & fValues .~ ["attached"]
-                ]
-
-        , requestCopySnapshot $ copySnapshot "us-west-1" "snap-1a2b3c4d"
-            & csDescription ?~ "My_snapshot"
-
-        ]
-
-    , testGroup "response"
-        [ responseDescribeInstances $ describeInstancesResponse 200
-            & dirsReservations .~
-                [ reservation "r-1a2b3c4d" "123456789012"
-                    & rGroups .~
-                        [ groupIdentifier
-                            & giGroupId   ?~ "sg-1a2b3c4d"
-                            & giGroupName ?~ "my-security-group"
-                        ]
-
-                    & rInstances .~
-                        [ instance' "i-1a2b3c4d" "ami-1a2b3c4d" 0 C1_Medium
-                            $(mkTime "2014-03-18T21:47:02+0000")
-                            (placement & pAvailabilityZone ?~ "us-west-2a"
-                                       & pTenancy          ?~ Default)
-                            (monitoring & mState ?~ MSDisabled)
-                            X86_64 EBS HVM Xen
-                            (instanceState ISNRunning 16)
-                                & insPlatform            ?~ Windows
-                                & insClientToken         ?~ "ABCDE1234567890123"
-                                & insSourceDestCheck     ?~ True
-                                & insVPCId               ?~ "vpc-1a2b3c4d"
-                                & insKeyName             ?~ "my-key-pair"
-                                & insSubnetId            ?~ "subnet-1a2b3c4d"
-                                & insRootDeviceName      ?~ "/dev/sda1"
-                                & insPrivateIPAddress    ?~ "10.0.0.12"
-                                & insPublicIPAddress     ?~ "46.51.219.63"
-                                & insTags                .~ [tag "Name" "Windows Instance"]
-                                & insState               .~ instanceState ISNRunning 16
-                                & insSecurityGroups      .~
-                                    [ groupIdentifier
-                                        & giGroupId   ?~ "sg-1a2b3c4d"
-                                        & giGroupName ?~ "my-security-group"
-                                    ]
-
-                                & insBlockDeviceMappings .~
-                                    [ instanceBlockDeviceMapping
-                                        & ibdmDeviceName ?~ "/dev/sda1"
-                                        & ibdmEBS        ?~
-                                            (ebsInstanceBlockDevice
-                                                & eibdDeleteOnTermination ?~ True
-                                                & eibdStatus              ?~ AAttached
-                                                & eibdVolumeId            ?~ "vol-1a2b3c4d"
-                                                & eibdAttachTime          ?~ $(mkTime "2014-03-18T21:47:02+0000"))
-                                    ]
-
-                                & insNetworkInterfaces   .~
-                                    [ instanceNetworkInterface
-                                        & iniStatus              ?~ NISInUse
-                                        & iniSourceDestCheck     ?~ True
-                                        & iniVPCId               ?~ "vpc-1a2b3c4d"
-                                        & iniNetworkInterfaceId  ?~ "eni-1a2b3c4d"
-                                        & iniSubnetId            ?~ "subnet-1a2b3c4d"
-                                        & iniMACAddress          ?~ "1b:2b:3c:4d:5e:6f"
-                                        & iniOwnerId             ?~ "123456789012"
-                                        & iniPrivateIPAddress    ?~ "10.0.0.12"
-                                        & iniDescription         ?~ "Primary network interface"
-                                        & iniAttachment          ?~
-                                            (instanceNetworkInterfaceAttachment
-                                                & iniaDeleteOnTermination ?~ True
-                                                & iniaStatus              ?~ AAttached
-                                                & iniaAttachmentId        ?~ "eni-attach-1a2b3c4d"
-                                                & iniaAttachTime          ?~ $(mkTime "2014-03-18T21:47:02+0000")
-                                                & iniaDeviceIndex         ?~ 0)
-
-                                        & iniAssociation         ?~
-                                            (instanceNetworkInterfaceAssociation
-                                                & iniaIPOwnerId  ?~ "123456789012"
-                                                & iniaPublicIP   ?~ "198.51.100.63")
-
-                                        & iniGroups              .~
-                                            [ groupIdentifier
-                                                & giGroupId   ?~ "sg-1a2b3c4d"
-                                                & giGroupName ?~ "my-security-group"
-                                            ]
-                                    ]
-
-                        ]
-                ]
-        ]
-    ]
-
diff --git a/test/Test/AWS/EC2/Internal.hs b/test/Test/AWS/EC2/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/EC2/Internal.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.EC2.Internal
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.EC2.Internal where
-
-import Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/EC2.hs b/test/Test/AWS/Gen/EC2.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/EC2.hs
+++ /dev/null
@@ -1,4017 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.EC2
--- Copyright   : (c) 2013-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.EC2 where
-
-import Data.Proxy
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.Tasty
-import Network.AWS.EC2
-import Test.AWS.EC2.Internal
-
--- Auto-generated: the actual test selection needs to be manually placed into
--- the top-level so that real test data can be incrementally added.
---
--- This commented snippet is what the entire set should look like:
-
--- fixtures :: TestTree
--- fixtures =
---     [ testGroup "request"
---         [ requestImportInstance $
---             importInstance
---
---         , requestRevokeSecurityGroupEgress $
---             revokeSecurityGroupEgress
---
---         , requestCreateVPNGateway $
---             createVPNGateway
---
---         , requestCreateNetworkACL $
---             createNetworkACL
---
---         , requestDeleteKeyPair $
---             deleteKeyPair
---
---         , requestDescribeSecurityGroupReferences $
---             describeSecurityGroupReferences
---
---         , requestDescribeTags $
---             describeTags
---
---         , requestDisassociateSubnetCidrBlock $
---             disassociateSubnetCidrBlock
---
---         , requestDetachNetworkInterface $
---             detachNetworkInterface
---
---         , requestDetachInternetGateway $
---             detachInternetGateway
---
---         , requestDeleteVPCEndpoints $
---             deleteVPCEndpoints
---
---         , requestDeleteFlowLogs $
---             deleteFlowLogs
---
---         , requestDescribeVPCClassicLink $
---             describeVPCClassicLink
---
---         , requestModifySubnetAttribute $
---             modifySubnetAttribute
---
---         , requestDetachVolume $
---             detachVolume
---
---         , requestCancelBundleTask $
---             cancelBundleTask
---
---         , requestAcceptReservedInstancesExchangeQuote $
---             acceptReservedInstancesExchangeQuote
---
---         , requestReleaseAddress $
---             releaseAddress
---
---         , requestCreateInternetGateway $
---             createInternetGateway
---
---         , requestDeleteVPNConnection $
---             deleteVPNConnection
---
---         , requestDescribeBundleTasks $
---             describeBundleTasks
---
---         , requestAuthorizeSecurityGroupEgress $
---             authorizeSecurityGroupEgress
---
---         , requestDeregisterImage $
---             deregisterImage
---
---         , requestModifyNetworkInterfaceAttribute $
---             modifyNetworkInterfaceAttribute
---
---         , requestCancelReservedInstancesListing $
---             cancelReservedInstancesListing
---
---         , requestAttachClassicLinkVPC $
---             attachClassicLinkVPC
---
---         , requestDescribeVPCClassicLinkDNSSupport $
---             describeVPCClassicLinkDNSSupport
---
---         , requestAssociateSubnetCidrBlock $
---             associateSubnetCidrBlock
---
---         , requestRunScheduledInstances $
---             runScheduledInstances
---
---         , requestCancelSpotFleetRequests $
---             cancelSpotFleetRequests
---
---         , requestDescribeSpotPriceHistory $
---             describeSpotPriceHistory
---
---         , requestDescribeDHCPOptions $
---             describeDHCPOptions
---
---         , requestImportImage $
---             importImage
---
---         , requestStopInstances $
---             stopInstances
---
---         , requestDescribeInternetGateways $
---             describeInternetGateways
---
---         , requestDisableVPCClassicLink $
---             disableVPCClassicLink
---
---         , requestBundleInstance $
---             bundleInstance
---
---         , requestDescribeNetworkInterfaces $
---             describeNetworkInterfaces
---
---         , requestReplaceNetworkACLAssociation $
---             replaceNetworkACLAssociation
---
---         , requestDescribeNatGateways $
---             describeNatGateways
---
---         , requestDescribeAddresses $
---             describeAddresses
---
---         , requestDescribeSnapshotAttribute $
---             describeSnapshotAttribute
---
---         , requestDescribeIdentityIdFormat $
---             describeIdentityIdFormat
---
---         , requestReplaceRoute $
---             replaceRoute
---
---         , requestDescribeVPCEndpointServices $
---             describeVPCEndpointServices
---
---         , requestAuthorizeSecurityGroupIngress $
---             authorizeSecurityGroupIngress
---
---         , requestCreateVPCPeeringConnection $
---             createVPCPeeringConnection
---
---         , requestDescribeSubnets $
---             describeSubnets
---
---         , requestCreateTags $
---             createTags
---
---         , requestPurchaseReservedInstancesOffering $
---             purchaseReservedInstancesOffering
---
---         , requestDeleteNetworkACLEntry $
---             deleteNetworkACLEntry
---
---         , requestResetSnapshotAttribute $
---             resetSnapshotAttribute
---
---         , requestDescribeVPNConnections $
---             describeVPNConnections
---
---         , requestDeleteRoute $
---             deleteRoute
---
---         , requestReplaceNetworkACLEntry $
---             replaceNetworkACLEntry
---
---         , requestDescribeVPCEndpoints $
---             describeVPCEndpoints
---
---         , requestResetInstanceAttribute $
---             resetInstanceAttribute
---
---         , requestModifyIdentityIdFormat $
---             modifyIdentityIdFormat
---
---         , requestAttachNetworkInterface $
---             attachNetworkInterface
---
---         , requestDescribeInstanceStatus $
---             describeInstanceStatus
---
---         , requestImportKeyPair $
---             importKeyPair
---
---         , requestDeleteTags $
---             deleteTags
---
---         , requestConfirmProductInstance $
---             confirmProductInstance
---
---         , requestDescribeInstanceAttribute $
---             describeInstanceAttribute
---
---         , requestDescribeReservedInstancesOfferings $
---             describeReservedInstancesOfferings
---
---         , requestCreateCustomerGateway $
---             createCustomerGateway
---
---         , requestDeleteSecurityGroup $
---             deleteSecurityGroup
---
---         , requestDeleteVPCPeeringConnection $
---             deleteVPCPeeringConnection
---
---         , requestAttachInternetGateway $
---             attachInternetGateway
---
---         , requestModifyInstancePlacement $
---             modifyInstancePlacement
---
---         , requestDescribeFlowLogs $
---             describeFlowLogs
---
---         , requestRunInstances $
---             runInstances
---
---         , requestAssociateDHCPOptions $
---             associateDHCPOptions
---
---         , requestDescribeReservedInstances $
---             describeReservedInstances
---
---         , requestDescribeIdFormat $
---             describeIdFormat
---
---         , requestDescribeVPCs $
---             describeVPCs
---
---         , requestDescribeConversionTasks $
---             describeConversionTasks
---
---         , requestDisableVPCClassicLinkDNSSupport $
---             disableVPCClassicLinkDNSSupport
---
---         , requestAllocateAddress $
---             allocateAddress
---
---         , requestCancelConversionTask $
---             cancelConversionTask
---
---         , requestModifyImageAttribute $
---             modifyImageAttribute
---
---         , requestCreateRouteTable $
---             createRouteTable
---
---         , requestReportInstanceStatus $
---             reportInstanceStatus
---
---         , requestAttachVolume $
---             attachVolume
---
---         , requestRequestSpotInstances $
---             requestSpotInstances
---
---         , requestDescribeHostReservationOfferings $
---             describeHostReservationOfferings
---
---         , requestDescribeVolumes $
---             describeVolumes
---
---         , requestRejectVPCPeeringConnection $
---             rejectVPCPeeringConnection
---
---         , requestDeleteVPNConnectionRoute $
---             deleteVPNConnectionRoute
---
---         , requestModifyVPCEndpoint $
---             modifyVPCEndpoint
---
---         , requestAllocateHosts $
---             allocateHosts
---
---         , requestRegisterImage $
---             registerImage
---
---         , requestRevokeSecurityGroupIngress $
---             revokeSecurityGroupIngress
---
---         , requestDescribeHostReservations $
---             describeHostReservations
---
---         , requestEnableVPCClassicLinkDNSSupport $
---             enableVPCClassicLinkDNSSupport
---
---         , requestModifyReservedInstances $
---             modifyReservedInstances
---
---         , requestDescribeScheduledInstances $
---             describeScheduledInstances
---
---         , requestCreateFlowLogs $
---             createFlowLogs
---
---         , requestDescribeSpotFleetRequests $
---             describeSpotFleetRequests
---
---         , requestMoveAddressToVPC $
---             moveAddressToVPC
---
---         , requestDeleteNetworkACL $
---             deleteNetworkACL
---
---         , requestDeleteVPNGateway $
---             deleteVPNGateway
---
---         , requestDescribeImportImageTasks $
---             describeImportImageTasks
---
---         , requestDescribeVolumeAttribute $
---             describeVolumeAttribute
---
---         , requestDescribeMovingAddresses $
---             describeMovingAddresses
---
---         , requestGetPasswordData $
---             getPasswordData
---
---         , requestCreateVPC $
---             createVPC
---
---         , requestModifyVPCPeeringConnectionOptions $
---             modifyVPCPeeringConnectionOptions
---
---         , requestCopySnapshot $
---             copySnapshot
---
---         , requestDisassociateAddress $
---             disassociateAddress
---
---         , requestDescribeEgressOnlyInternetGateways $
---             describeEgressOnlyInternetGateways
---
---         , requestDeleteVPC $
---             deleteVPC
---
---         , requestCreateInstanceExportTask $
---             createInstanceExportTask
---
---         , requestAssociateVPCCidrBlock $
---             associateVPCCidrBlock
---
---         , requestDescribeVPCAttribute $
---             describeVPCAttribute
---
---         , requestCreateVolume $
---             createVolume
---
---         , requestDescribeScheduledInstanceAvailability $
---             describeScheduledInstanceAvailability
---
---         , requestModifyVolumeAttribute $
---             modifyVolumeAttribute
---
---         , requestDescribeSpotDatafeedSubscription $
---             describeSpotDatafeedSubscription
---
---         , requestDescribePrefixLists $
---             describePrefixLists
---
---         , requestDeletePlacementGroup $
---             deletePlacementGroup
---
---         , requestRequestSpotFleet $
---             requestSpotFleet
---
---         , requestCreateSubnet $
---             createSubnet
---
---         , requestCreateNetworkInterface $
---             createNetworkInterface
---
---         , requestDescribeSecurityGroups $
---             describeSecurityGroups
---
---         , requestDescribeExportTasks $
---             describeExportTasks
---
---         , requestModifySpotFleetRequest $
---             modifySpotFleetRequest
---
---         , requestDetachVPNGateway $
---             detachVPNGateway
---
---         , requestGetHostReservationPurchasePreview $
---             getHostReservationPurchasePreview
---
---         , requestEnableVolumeIO $
---             enableVolumeIO
---
---         , requestDescribeInstances $
---             describeInstances
---
---         , requestCreateNatGateway $
---             createNatGateway
---
---         , requestDescribeVPCPeeringConnections $
---             describeVPCPeeringConnections
---
---         , requestCancelExportTask $
---             cancelExportTask
---
---         , requestDisassociateVPCCidrBlock $
---             disassociateVPCCidrBlock
---
---         , requestDeleteNetworkInterface $
---             deleteNetworkInterface
---
---         , requestReplaceRouteTableAssociation $
---             replaceRouteTableAssociation
---
---         , requestStartInstances $
---             startInstances
---
---         , requestCreatePlacementGroup $
---             createPlacementGroup
---
---         , requestDescribeSnapshots $
---             describeSnapshots
---
---         , requestAssociateAddress $
---             associateAddress
---
---         , requestDescribeNetworkInterfaceAttribute $
---             describeNetworkInterfaceAttribute
---
---         , requestReleaseHosts $
---             releaseHosts
---
---         , requestResetNetworkInterfaceAttribute $
---             resetNetworkInterfaceAttribute
---
---         , requestDeleteInternetGateway $
---             deleteInternetGateway
---
---         , requestDescribeReservedInstancesListings $
---             describeReservedInstancesListings
---
---         , requestCreateVPNConnection $
---             createVPNConnection
---
---         , requestDeleteNatGateway $
---             deleteNatGateway
---
---         , requestDescribeImportSnapshotTasks $
---             describeImportSnapshotTasks
---
---         , requestDescribeCustomerGateways $
---             describeCustomerGateways
---
---         , requestDeleteSubnet $
---             deleteSubnet
---
---         , requestCopyImage $
---             copyImage
---
---         , requestCreateVPCEndpoint $
---             createVPCEndpoint
---
---         , requestUnmonitorInstances $
---             unmonitorInstances
---
---         , requestCreateSecurityGroup $
---             createSecurityGroup
---
---         , requestImportVolume $
---             importVolume
---
---         , requestDisableVGWRoutePropagation $
---             disableVGWRoutePropagation
---
---         , requestCreateSpotDatafeedSubscription $
---             createSpotDatafeedSubscription
---
---         , requestCancelSpotInstanceRequests $
---             cancelSpotInstanceRequests
---
---         , requestCreateRoute $
---             createRoute
---
---         , requestDeleteSnapshot $
---             deleteSnapshot
---
---         , requestAssignPrivateIPAddresses $
---             assignPrivateIPAddresses
---
---         , requestModifyInstanceAttribute $
---             modifyInstanceAttribute
---
---         , requestDeleteCustomerGateway $
---             deleteCustomerGateway
---
---         , requestDisassociateRouteTable $
---             disassociateRouteTable
---
---         , requestGetConsoleScreenshot $
---             getConsoleScreenshot
---
---         , requestAssignIPv6Addresses $
---             assignIPv6Addresses
---
---         , requestDeleteSpotDatafeedSubscription $
---             deleteSpotDatafeedSubscription
---
---         , requestEnableVPCClassicLink $
---             enableVPCClassicLink
---
---         , requestDescribePlacementGroups $
---             describePlacementGroups
---
---         , requestDescribeStaleSecurityGroups $
---             describeStaleSecurityGroups
---
---         , requestPurchaseScheduledInstances $
---             purchaseScheduledInstances
---
---         , requestEnableVGWRoutePropagation $
---             enableVGWRoutePropagation
---
---         , requestDescribeSpotFleetRequestHistory $
---             describeSpotFleetRequestHistory
---
---         , requestModifySnapshotAttribute $
---             modifySnapshotAttribute
---
---         , requestCreateSnapshot $
---             createSnapshot
---
---         , requestCreateNetworkACLEntry $
---             createNetworkACLEntry
---
---         , requestCreateReservedInstancesListing $
---             createReservedInstancesListing
---
---         , requestAttachVPNGateway $
---             attachVPNGateway
---
---         , requestCreateDHCPOptions $
---             createDHCPOptions
---
---         , requestDescribeAccountAttributes $
---             describeAccountAttributes
---
---         , requestModifyHosts $
---             modifyHosts
---
---         , requestRebootInstances $
---             rebootInstances
---
---         , requestUnassignIPv6Addresses $
---             unassignIPv6Addresses
---
---         , requestDeleteEgressOnlyInternetGateway $
---             deleteEgressOnlyInternetGateway
---
---         , requestPurchaseHostReservation $
---             purchaseHostReservation
---
---         , requestCreateImage $
---             createImage
---
---         , requestDescribeClassicLinkInstances $
---             describeClassicLinkInstances
---
---         , requestTerminateInstances $
---             terminateInstances
---
---         , requestDescribeKeyPairs $
---             describeKeyPairs
---
---         , requestCreateVPNConnectionRoute $
---             createVPNConnectionRoute
---
---         , requestAssociateRouteTable $
---             associateRouteTable
---
---         , requestDescribeVPNGateways $
---             describeVPNGateways
---
---         , requestGetConsoleOutput $
---             getConsoleOutput
---
---         , requestDescribeHosts $
---             describeHosts
---
---         , requestDescribeImageAttribute $
---             describeImageAttribute
---
---         , requestModifyIdFormat $
---             modifyIdFormat
---
---         , requestDeleteRouteTable $
---             deleteRouteTable
---
---         , requestResetImageAttribute $
---             resetImageAttribute
---
---         , requestCreateEgressOnlyInternetGateway $
---             createEgressOnlyInternetGateway
---
---         , requestDescribeReservedInstancesModifications $
---             describeReservedInstancesModifications
---
---         , requestDescribeSpotInstanceRequests $
---             describeSpotInstanceRequests
---
---         , requestUnassignPrivateIPAddresses $
---             unassignPrivateIPAddresses
---
---         , requestDeleteDHCPOptions $
---             deleteDHCPOptions
---
---         , requestDescribeNetworkACLs $
---             describeNetworkACLs
---
---         , requestCancelImportTask $
---             cancelImportTask
---
---         , requestDetachClassicLinkVPC $
---             detachClassicLinkVPC
---
---         , requestDescribeRegions $
---             describeRegions
---
---         , requestMonitorInstances $
---             monitorInstances
---
---         , requestAcceptVPCPeeringConnection $
---             acceptVPCPeeringConnection
---
---         , requestImportSnapshot $
---             importSnapshot
---
---         , requestDescribeVolumeStatus $
---             describeVolumeStatus
---
---         , requestDescribeRouteTables $
---             describeRouteTables
---
---         , requestDescribeAvailabilityZones $
---             describeAvailabilityZones
---
---         , requestModifyVPCAttribute $
---             modifyVPCAttribute
---
---         , requestDescribeImages $
---             describeImages
---
---         , requestRestoreAddressToClassic $
---             restoreAddressToClassic
---
---         , requestCreateKeyPair $
---             createKeyPair
---
---         , requestGetReservedInstancesExchangeQuote $
---             getReservedInstancesExchangeQuote
---
---         , requestDeleteVolume $
---             deleteVolume
---
---         , requestDescribeSpotFleetInstances $
---             describeSpotFleetInstances
---
---           ]
-
---     , testGroup "response"
---         [ responseImportInstance $
---             importInstanceResponse
---
---         , responseRevokeSecurityGroupEgress $
---             revokeSecurityGroupEgressResponse
---
---         , responseCreateVPNGateway $
---             createVPNGatewayResponse
---
---         , responseCreateNetworkACL $
---             createNetworkACLResponse
---
---         , responseDeleteKeyPair $
---             deleteKeyPairResponse
---
---         , responseDescribeSecurityGroupReferences $
---             describeSecurityGroupReferencesResponse
---
---         , responseDescribeTags $
---             describeTagsResponse
---
---         , responseDisassociateSubnetCidrBlock $
---             disassociateSubnetCidrBlockResponse
---
---         , responseDetachNetworkInterface $
---             detachNetworkInterfaceResponse
---
---         , responseDetachInternetGateway $
---             detachInternetGatewayResponse
---
---         , responseDeleteVPCEndpoints $
---             deleteVPCEndpointsResponse
---
---         , responseDeleteFlowLogs $
---             deleteFlowLogsResponse
---
---         , responseDescribeVPCClassicLink $
---             describeVPCClassicLinkResponse
---
---         , responseModifySubnetAttribute $
---             modifySubnetAttributeResponse
---
---         , responseDetachVolume $
---             volumeAttachment
---
---         , responseCancelBundleTask $
---             cancelBundleTaskResponse
---
---         , responseAcceptReservedInstancesExchangeQuote $
---             acceptReservedInstancesExchangeQuoteResponse
---
---         , responseReleaseAddress $
---             releaseAddressResponse
---
---         , responseCreateInternetGateway $
---             createInternetGatewayResponse
---
---         , responseDeleteVPNConnection $
---             deleteVPNConnectionResponse
---
---         , responseDescribeBundleTasks $
---             describeBundleTasksResponse
---
---         , responseAuthorizeSecurityGroupEgress $
---             authorizeSecurityGroupEgressResponse
---
---         , responseDeregisterImage $
---             deregisterImageResponse
---
---         , responseModifyNetworkInterfaceAttribute $
---             modifyNetworkInterfaceAttributeResponse
---
---         , responseCancelReservedInstancesListing $
---             cancelReservedInstancesListingResponse
---
---         , responseAttachClassicLinkVPC $
---             attachClassicLinkVPCResponse
---
---         , responseDescribeVPCClassicLinkDNSSupport $
---             describeVPCClassicLinkDNSSupportResponse
---
---         , responseAssociateSubnetCidrBlock $
---             associateSubnetCidrBlockResponse
---
---         , responseRunScheduledInstances $
---             runScheduledInstancesResponse
---
---         , responseCancelSpotFleetRequests $
---             cancelSpotFleetRequestsResponse
---
---         , responseDescribeSpotPriceHistory $
---             describeSpotPriceHistoryResponse
---
---         , responseDescribeDHCPOptions $
---             describeDHCPOptionsResponse
---
---         , responseImportImage $
---             importImageResponse
---
---         , responseStopInstances $
---             stopInstancesResponse
---
---         , responseDescribeInternetGateways $
---             describeInternetGatewaysResponse
---
---         , responseDisableVPCClassicLink $
---             disableVPCClassicLinkResponse
---
---         , responseBundleInstance $
---             bundleInstanceResponse
---
---         , responseDescribeNetworkInterfaces $
---             describeNetworkInterfacesResponse
---
---         , responseReplaceNetworkACLAssociation $
---             replaceNetworkACLAssociationResponse
---
---         , responseDescribeNatGateways $
---             describeNatGatewaysResponse
---
---         , responseDescribeAddresses $
---             describeAddressesResponse
---
---         , responseDescribeSnapshotAttribute $
---             describeSnapshotAttributeResponse
---
---         , responseDescribeIdentityIdFormat $
---             describeIdentityIdFormatResponse
---
---         , responseReplaceRoute $
---             replaceRouteResponse
---
---         , responseDescribeVPCEndpointServices $
---             describeVPCEndpointServicesResponse
---
---         , responseAuthorizeSecurityGroupIngress $
---             authorizeSecurityGroupIngressResponse
---
---         , responseCreateVPCPeeringConnection $
---             createVPCPeeringConnectionResponse
---
---         , responseDescribeSubnets $
---             describeSubnetsResponse
---
---         , responseCreateTags $
---             createTagsResponse
---
---         , responsePurchaseReservedInstancesOffering $
---             purchaseReservedInstancesOfferingResponse
---
---         , responseDeleteNetworkACLEntry $
---             deleteNetworkACLEntryResponse
---
---         , responseResetSnapshotAttribute $
---             resetSnapshotAttributeResponse
---
---         , responseDescribeVPNConnections $
---             describeVPNConnectionsResponse
---
---         , responseDeleteRoute $
---             deleteRouteResponse
---
---         , responseReplaceNetworkACLEntry $
---             replaceNetworkACLEntryResponse
---
---         , responseDescribeVPCEndpoints $
---             describeVPCEndpointsResponse
---
---         , responseResetInstanceAttribute $
---             resetInstanceAttributeResponse
---
---         , responseModifyIdentityIdFormat $
---             modifyIdentityIdFormatResponse
---
---         , responseAttachNetworkInterface $
---             attachNetworkInterfaceResponse
---
---         , responseDescribeInstanceStatus $
---             describeInstanceStatusResponse
---
---         , responseImportKeyPair $
---             importKeyPairResponse
---
---         , responseDeleteTags $
---             deleteTagsResponse
---
---         , responseConfirmProductInstance $
---             confirmProductInstanceResponse
---
---         , responseDescribeInstanceAttribute $
---             describeInstanceAttributeResponse
---
---         , responseDescribeReservedInstancesOfferings $
---             describeReservedInstancesOfferingsResponse
---
---         , responseCreateCustomerGateway $
---             createCustomerGatewayResponse
---
---         , responseDeleteSecurityGroup $
---             deleteSecurityGroupResponse
---
---         , responseDeleteVPCPeeringConnection $
---             deleteVPCPeeringConnectionResponse
---
---         , responseAttachInternetGateway $
---             attachInternetGatewayResponse
---
---         , responseModifyInstancePlacement $
---             modifyInstancePlacementResponse
---
---         , responseDescribeFlowLogs $
---             describeFlowLogsResponse
---
---         , responseRunInstances $
---             reservation
---
---         , responseAssociateDHCPOptions $
---             associateDHCPOptionsResponse
---
---         , responseDescribeReservedInstances $
---             describeReservedInstancesResponse
---
---         , responseDescribeIdFormat $
---             describeIdFormatResponse
---
---         , responseDescribeVPCs $
---             describeVPCsResponse
---
---         , responseDescribeConversionTasks $
---             describeConversionTasksResponse
---
---         , responseDisableVPCClassicLinkDNSSupport $
---             disableVPCClassicLinkDNSSupportResponse
---
---         , responseAllocateAddress $
---             allocateAddressResponse
---
---         , responseCancelConversionTask $
---             cancelConversionTaskResponse
---
---         , responseModifyImageAttribute $
---             modifyImageAttributeResponse
---
---         , responseCreateRouteTable $
---             createRouteTableResponse
---
---         , responseReportInstanceStatus $
---             reportInstanceStatusResponse
---
---         , responseAttachVolume $
---             volumeAttachment
---
---         , responseRequestSpotInstances $
---             requestSpotInstancesResponse
---
---         , responseDescribeHostReservationOfferings $
---             describeHostReservationOfferingsResponse
---
---         , responseDescribeVolumes $
---             describeVolumesResponse
---
---         , responseRejectVPCPeeringConnection $
---             rejectVPCPeeringConnectionResponse
---
---         , responseDeleteVPNConnectionRoute $
---             deleteVPNConnectionRouteResponse
---
---         , responseModifyVPCEndpoint $
---             modifyVPCEndpointResponse
---
---         , responseAllocateHosts $
---             allocateHostsResponse
---
---         , responseRegisterImage $
---             registerImageResponse
---
---         , responseRevokeSecurityGroupIngress $
---             revokeSecurityGroupIngressResponse
---
---         , responseDescribeHostReservations $
---             describeHostReservationsResponse
---
---         , responseEnableVPCClassicLinkDNSSupport $
---             enableVPCClassicLinkDNSSupportResponse
---
---         , responseModifyReservedInstances $
---             modifyReservedInstancesResponse
---
---         , responseDescribeScheduledInstances $
---             describeScheduledInstancesResponse
---
---         , responseCreateFlowLogs $
---             createFlowLogsResponse
---
---         , responseDescribeSpotFleetRequests $
---             describeSpotFleetRequestsResponse
---
---         , responseMoveAddressToVPC $
---             moveAddressToVPCResponse
---
---         , responseDeleteNetworkACL $
---             deleteNetworkACLResponse
---
---         , responseDeleteVPNGateway $
---             deleteVPNGatewayResponse
---
---         , responseDescribeImportImageTasks $
---             describeImportImageTasksResponse
---
---         , responseDescribeVolumeAttribute $
---             describeVolumeAttributeResponse
---
---         , responseDescribeMovingAddresses $
---             describeMovingAddressesResponse
---
---         , responseGetPasswordData $
---             getPasswordDataResponse
---
---         , responseCreateVPC $
---             createVPCResponse
---
---         , responseModifyVPCPeeringConnectionOptions $
---             modifyVPCPeeringConnectionOptionsResponse
---
---         , responseCopySnapshot $
---             copySnapshotResponse
---
---         , responseDisassociateAddress $
---             disassociateAddressResponse
---
---         , responseDescribeEgressOnlyInternetGateways $
---             describeEgressOnlyInternetGatewaysResponse
---
---         , responseDeleteVPC $
---             deleteVPCResponse
---
---         , responseCreateInstanceExportTask $
---             createInstanceExportTaskResponse
---
---         , responseAssociateVPCCidrBlock $
---             associateVPCCidrBlockResponse
---
---         , responseDescribeVPCAttribute $
---             describeVPCAttributeResponse
---
---         , responseCreateVolume $
---             volume
---
---         , responseDescribeScheduledInstanceAvailability $
---             describeScheduledInstanceAvailabilityResponse
---
---         , responseModifyVolumeAttribute $
---             modifyVolumeAttributeResponse
---
---         , responseDescribeSpotDatafeedSubscription $
---             describeSpotDatafeedSubscriptionResponse
---
---         , responseDescribePrefixLists $
---             describePrefixListsResponse
---
---         , responseDeletePlacementGroup $
---             deletePlacementGroupResponse
---
---         , responseRequestSpotFleet $
---             requestSpotFleetResponse
---
---         , responseCreateSubnet $
---             createSubnetResponse
---
---         , responseCreateNetworkInterface $
---             createNetworkInterfaceResponse
---
---         , responseDescribeSecurityGroups $
---             describeSecurityGroupsResponse
---
---         , responseDescribeExportTasks $
---             describeExportTasksResponse
---
---         , responseModifySpotFleetRequest $
---             modifySpotFleetRequestResponse
---
---         , responseDetachVPNGateway $
---             detachVPNGatewayResponse
---
---         , responseGetHostReservationPurchasePreview $
---             getHostReservationPurchasePreviewResponse
---
---         , responseEnableVolumeIO $
---             enableVolumeIOResponse
---
---         , responseDescribeInstances $
---             describeInstancesResponse
---
---         , responseCreateNatGateway $
---             createNatGatewayResponse
---
---         , responseDescribeVPCPeeringConnections $
---             describeVPCPeeringConnectionsResponse
---
---         , responseCancelExportTask $
---             cancelExportTaskResponse
---
---         , responseDisassociateVPCCidrBlock $
---             disassociateVPCCidrBlockResponse
---
---         , responseDeleteNetworkInterface $
---             deleteNetworkInterfaceResponse
---
---         , responseReplaceRouteTableAssociation $
---             replaceRouteTableAssociationResponse
---
---         , responseStartInstances $
---             startInstancesResponse
---
---         , responseCreatePlacementGroup $
---             createPlacementGroupResponse
---
---         , responseDescribeSnapshots $
---             describeSnapshotsResponse
---
---         , responseAssociateAddress $
---             associateAddressResponse
---
---         , responseDescribeNetworkInterfaceAttribute $
---             describeNetworkInterfaceAttributeResponse
---
---         , responseReleaseHosts $
---             releaseHostsResponse
---
---         , responseResetNetworkInterfaceAttribute $
---             resetNetworkInterfaceAttributeResponse
---
---         , responseDeleteInternetGateway $
---             deleteInternetGatewayResponse
---
---         , responseDescribeReservedInstancesListings $
---             describeReservedInstancesListingsResponse
---
---         , responseCreateVPNConnection $
---             createVPNConnectionResponse
---
---         , responseDeleteNatGateway $
---             deleteNatGatewayResponse
---
---         , responseDescribeImportSnapshotTasks $
---             describeImportSnapshotTasksResponse
---
---         , responseDescribeCustomerGateways $
---             describeCustomerGatewaysResponse
---
---         , responseDeleteSubnet $
---             deleteSubnetResponse
---
---         , responseCopyImage $
---             copyImageResponse
---
---         , responseCreateVPCEndpoint $
---             createVPCEndpointResponse
---
---         , responseUnmonitorInstances $
---             unmonitorInstancesResponse
---
---         , responseCreateSecurityGroup $
---             createSecurityGroupResponse
---
---         , responseImportVolume $
---             importVolumeResponse
---
---         , responseDisableVGWRoutePropagation $
---             disableVGWRoutePropagationResponse
---
---         , responseCreateSpotDatafeedSubscription $
---             createSpotDatafeedSubscriptionResponse
---
---         , responseCancelSpotInstanceRequests $
---             cancelSpotInstanceRequestsResponse
---
---         , responseCreateRoute $
---             createRouteResponse
---
---         , responseDeleteSnapshot $
---             deleteSnapshotResponse
---
---         , responseAssignPrivateIPAddresses $
---             assignPrivateIPAddressesResponse
---
---         , responseModifyInstanceAttribute $
---             modifyInstanceAttributeResponse
---
---         , responseDeleteCustomerGateway $
---             deleteCustomerGatewayResponse
---
---         , responseDisassociateRouteTable $
---             disassociateRouteTableResponse
---
---         , responseGetConsoleScreenshot $
---             getConsoleScreenshotResponse
---
---         , responseAssignIPv6Addresses $
---             assignIPv6AddressesResponse
---
---         , responseDeleteSpotDatafeedSubscription $
---             deleteSpotDatafeedSubscriptionResponse
---
---         , responseEnableVPCClassicLink $
---             enableVPCClassicLinkResponse
---
---         , responseDescribePlacementGroups $
---             describePlacementGroupsResponse
---
---         , responseDescribeStaleSecurityGroups $
---             describeStaleSecurityGroupsResponse
---
---         , responsePurchaseScheduledInstances $
---             purchaseScheduledInstancesResponse
---
---         , responseEnableVGWRoutePropagation $
---             enableVGWRoutePropagationResponse
---
---         , responseDescribeSpotFleetRequestHistory $
---             describeSpotFleetRequestHistoryResponse
---
---         , responseModifySnapshotAttribute $
---             modifySnapshotAttributeResponse
---
---         , responseCreateSnapshot $
---             snapshot
---
---         , responseCreateNetworkACLEntry $
---             createNetworkACLEntryResponse
---
---         , responseCreateReservedInstancesListing $
---             createReservedInstancesListingResponse
---
---         , responseAttachVPNGateway $
---             attachVPNGatewayResponse
---
---         , responseCreateDHCPOptions $
---             createDHCPOptionsResponse
---
---         , responseDescribeAccountAttributes $
---             describeAccountAttributesResponse
---
---         , responseModifyHosts $
---             modifyHostsResponse
---
---         , responseRebootInstances $
---             rebootInstancesResponse
---
---         , responseUnassignIPv6Addresses $
---             unassignIPv6AddressesResponse
---
---         , responseDeleteEgressOnlyInternetGateway $
---             deleteEgressOnlyInternetGatewayResponse
---
---         , responsePurchaseHostReservation $
---             purchaseHostReservationResponse
---
---         , responseCreateImage $
---             createImageResponse
---
---         , responseDescribeClassicLinkInstances $
---             describeClassicLinkInstancesResponse
---
---         , responseTerminateInstances $
---             terminateInstancesResponse
---
---         , responseDescribeKeyPairs $
---             describeKeyPairsResponse
---
---         , responseCreateVPNConnectionRoute $
---             createVPNConnectionRouteResponse
---
---         , responseAssociateRouteTable $
---             associateRouteTableResponse
---
---         , responseDescribeVPNGateways $
---             describeVPNGatewaysResponse
---
---         , responseGetConsoleOutput $
---             getConsoleOutputResponse
---
---         , responseDescribeHosts $
---             describeHostsResponse
---
---         , responseDescribeImageAttribute $
---             describeImageAttributeResponse
---
---         , responseModifyIdFormat $
---             modifyIdFormatResponse
---
---         , responseDeleteRouteTable $
---             deleteRouteTableResponse
---
---         , responseResetImageAttribute $
---             resetImageAttributeResponse
---
---         , responseCreateEgressOnlyInternetGateway $
---             createEgressOnlyInternetGatewayResponse
---
---         , responseDescribeReservedInstancesModifications $
---             describeReservedInstancesModificationsResponse
---
---         , responseDescribeSpotInstanceRequests $
---             describeSpotInstanceRequestsResponse
---
---         , responseUnassignPrivateIPAddresses $
---             unassignPrivateIPAddressesResponse
---
---         , responseDeleteDHCPOptions $
---             deleteDHCPOptionsResponse
---
---         , responseDescribeNetworkACLs $
---             describeNetworkACLsResponse
---
---         , responseCancelImportTask $
---             cancelImportTaskResponse
---
---         , responseDetachClassicLinkVPC $
---             detachClassicLinkVPCResponse
---
---         , responseDescribeRegions $
---             describeRegionsResponse
---
---         , responseMonitorInstances $
---             monitorInstancesResponse
---
---         , responseAcceptVPCPeeringConnection $
---             acceptVPCPeeringConnectionResponse
---
---         , responseImportSnapshot $
---             importSnapshotResponse
---
---         , responseDescribeVolumeStatus $
---             describeVolumeStatusResponse
---
---         , responseDescribeRouteTables $
---             describeRouteTablesResponse
---
---         , responseDescribeAvailabilityZones $
---             describeAvailabilityZonesResponse
---
---         , responseModifyVPCAttribute $
---             modifyVPCAttributeResponse
---
---         , responseDescribeImages $
---             describeImagesResponse
---
---         , responseRestoreAddressToClassic $
---             restoreAddressToClassicResponse
---
---         , responseCreateKeyPair $
---             createKeyPairResponse
---
---         , responseGetReservedInstancesExchangeQuote $
---             getReservedInstancesExchangeQuoteResponse
---
---         , responseDeleteVolume $
---             deleteVolumeResponse
---
---         , responseDescribeSpotFleetInstances $
---             describeSpotFleetInstancesResponse
---
---           ]
---     ]
-
--- Requests
-
-requestImportInstance :: ImportInstance -> TestTree
-requestImportInstance = req
-    "ImportInstance"
-    "fixture/ImportInstance.yaml"
-
-requestRevokeSecurityGroupEgress :: RevokeSecurityGroupEgress -> TestTree
-requestRevokeSecurityGroupEgress = req
-    "RevokeSecurityGroupEgress"
-    "fixture/RevokeSecurityGroupEgress.yaml"
-
-requestCreateVPNGateway :: CreateVPNGateway -> TestTree
-requestCreateVPNGateway = req
-    "CreateVPNGateway"
-    "fixture/CreateVPNGateway.yaml"
-
-requestCreateNetworkACL :: CreateNetworkACL -> TestTree
-requestCreateNetworkACL = req
-    "CreateNetworkACL"
-    "fixture/CreateNetworkACL.yaml"
-
-requestDeleteKeyPair :: DeleteKeyPair -> TestTree
-requestDeleteKeyPair = req
-    "DeleteKeyPair"
-    "fixture/DeleteKeyPair.yaml"
-
-requestDescribeSecurityGroupReferences :: DescribeSecurityGroupReferences -> TestTree
-requestDescribeSecurityGroupReferences = req
-    "DescribeSecurityGroupReferences"
-    "fixture/DescribeSecurityGroupReferences.yaml"
-
-requestDescribeTags :: DescribeTags -> TestTree
-requestDescribeTags = req
-    "DescribeTags"
-    "fixture/DescribeTags.yaml"
-
-requestDisassociateSubnetCidrBlock :: DisassociateSubnetCidrBlock -> TestTree
-requestDisassociateSubnetCidrBlock = req
-    "DisassociateSubnetCidrBlock"
-    "fixture/DisassociateSubnetCidrBlock.yaml"
-
-requestDetachNetworkInterface :: DetachNetworkInterface -> TestTree
-requestDetachNetworkInterface = req
-    "DetachNetworkInterface"
-    "fixture/DetachNetworkInterface.yaml"
-
-requestDetachInternetGateway :: DetachInternetGateway -> TestTree
-requestDetachInternetGateway = req
-    "DetachInternetGateway"
-    "fixture/DetachInternetGateway.yaml"
-
-requestDeleteVPCEndpoints :: DeleteVPCEndpoints -> TestTree
-requestDeleteVPCEndpoints = req
-    "DeleteVPCEndpoints"
-    "fixture/DeleteVPCEndpoints.yaml"
-
-requestDeleteFlowLogs :: DeleteFlowLogs -> TestTree
-requestDeleteFlowLogs = req
-    "DeleteFlowLogs"
-    "fixture/DeleteFlowLogs.yaml"
-
-requestDescribeVPCClassicLink :: DescribeVPCClassicLink -> TestTree
-requestDescribeVPCClassicLink = req
-    "DescribeVPCClassicLink"
-    "fixture/DescribeVPCClassicLink.yaml"
-
-requestModifySubnetAttribute :: ModifySubnetAttribute -> TestTree
-requestModifySubnetAttribute = req
-    "ModifySubnetAttribute"
-    "fixture/ModifySubnetAttribute.yaml"
-
-requestDetachVolume :: DetachVolume -> TestTree
-requestDetachVolume = req
-    "DetachVolume"
-    "fixture/DetachVolume.yaml"
-
-requestCancelBundleTask :: CancelBundleTask -> TestTree
-requestCancelBundleTask = req
-    "CancelBundleTask"
-    "fixture/CancelBundleTask.yaml"
-
-requestAcceptReservedInstancesExchangeQuote :: AcceptReservedInstancesExchangeQuote -> TestTree
-requestAcceptReservedInstancesExchangeQuote = req
-    "AcceptReservedInstancesExchangeQuote"
-    "fixture/AcceptReservedInstancesExchangeQuote.yaml"
-
-requestReleaseAddress :: ReleaseAddress -> TestTree
-requestReleaseAddress = req
-    "ReleaseAddress"
-    "fixture/ReleaseAddress.yaml"
-
-requestCreateInternetGateway :: CreateInternetGateway -> TestTree
-requestCreateInternetGateway = req
-    "CreateInternetGateway"
-    "fixture/CreateInternetGateway.yaml"
-
-requestDeleteVPNConnection :: DeleteVPNConnection -> TestTree
-requestDeleteVPNConnection = req
-    "DeleteVPNConnection"
-    "fixture/DeleteVPNConnection.yaml"
-
-requestDescribeBundleTasks :: DescribeBundleTasks -> TestTree
-requestDescribeBundleTasks = req
-    "DescribeBundleTasks"
-    "fixture/DescribeBundleTasks.yaml"
-
-requestAuthorizeSecurityGroupEgress :: AuthorizeSecurityGroupEgress -> TestTree
-requestAuthorizeSecurityGroupEgress = req
-    "AuthorizeSecurityGroupEgress"
-    "fixture/AuthorizeSecurityGroupEgress.yaml"
-
-requestDeregisterImage :: DeregisterImage -> TestTree
-requestDeregisterImage = req
-    "DeregisterImage"
-    "fixture/DeregisterImage.yaml"
-
-requestModifyNetworkInterfaceAttribute :: ModifyNetworkInterfaceAttribute -> TestTree
-requestModifyNetworkInterfaceAttribute = req
-    "ModifyNetworkInterfaceAttribute"
-    "fixture/ModifyNetworkInterfaceAttribute.yaml"
-
-requestCancelReservedInstancesListing :: CancelReservedInstancesListing -> TestTree
-requestCancelReservedInstancesListing = req
-    "CancelReservedInstancesListing"
-    "fixture/CancelReservedInstancesListing.yaml"
-
-requestAttachClassicLinkVPC :: AttachClassicLinkVPC -> TestTree
-requestAttachClassicLinkVPC = req
-    "AttachClassicLinkVPC"
-    "fixture/AttachClassicLinkVPC.yaml"
-
-requestDescribeVPCClassicLinkDNSSupport :: DescribeVPCClassicLinkDNSSupport -> TestTree
-requestDescribeVPCClassicLinkDNSSupport = req
-    "DescribeVPCClassicLinkDNSSupport"
-    "fixture/DescribeVPCClassicLinkDNSSupport.yaml"
-
-requestAssociateSubnetCidrBlock :: AssociateSubnetCidrBlock -> TestTree
-requestAssociateSubnetCidrBlock = req
-    "AssociateSubnetCidrBlock"
-    "fixture/AssociateSubnetCidrBlock.yaml"
-
-requestRunScheduledInstances :: RunScheduledInstances -> TestTree
-requestRunScheduledInstances = req
-    "RunScheduledInstances"
-    "fixture/RunScheduledInstances.yaml"
-
-requestCancelSpotFleetRequests :: CancelSpotFleetRequests -> TestTree
-requestCancelSpotFleetRequests = req
-    "CancelSpotFleetRequests"
-    "fixture/CancelSpotFleetRequests.yaml"
-
-requestDescribeSpotPriceHistory :: DescribeSpotPriceHistory -> TestTree
-requestDescribeSpotPriceHistory = req
-    "DescribeSpotPriceHistory"
-    "fixture/DescribeSpotPriceHistory.yaml"
-
-requestDescribeDHCPOptions :: DescribeDHCPOptions -> TestTree
-requestDescribeDHCPOptions = req
-    "DescribeDHCPOptions"
-    "fixture/DescribeDHCPOptions.yaml"
-
-requestImportImage :: ImportImage -> TestTree
-requestImportImage = req
-    "ImportImage"
-    "fixture/ImportImage.yaml"
-
-requestStopInstances :: StopInstances -> TestTree
-requestStopInstances = req
-    "StopInstances"
-    "fixture/StopInstances.yaml"
-
-requestDescribeInternetGateways :: DescribeInternetGateways -> TestTree
-requestDescribeInternetGateways = req
-    "DescribeInternetGateways"
-    "fixture/DescribeInternetGateways.yaml"
-
-requestDisableVPCClassicLink :: DisableVPCClassicLink -> TestTree
-requestDisableVPCClassicLink = req
-    "DisableVPCClassicLink"
-    "fixture/DisableVPCClassicLink.yaml"
-
-requestBundleInstance :: BundleInstance -> TestTree
-requestBundleInstance = req
-    "BundleInstance"
-    "fixture/BundleInstance.yaml"
-
-requestDescribeNetworkInterfaces :: DescribeNetworkInterfaces -> TestTree
-requestDescribeNetworkInterfaces = req
-    "DescribeNetworkInterfaces"
-    "fixture/DescribeNetworkInterfaces.yaml"
-
-requestReplaceNetworkACLAssociation :: ReplaceNetworkACLAssociation -> TestTree
-requestReplaceNetworkACLAssociation = req
-    "ReplaceNetworkACLAssociation"
-    "fixture/ReplaceNetworkACLAssociation.yaml"
-
-requestDescribeNatGateways :: DescribeNatGateways -> TestTree
-requestDescribeNatGateways = req
-    "DescribeNatGateways"
-    "fixture/DescribeNatGateways.yaml"
-
-requestDescribeAddresses :: DescribeAddresses -> TestTree
-requestDescribeAddresses = req
-    "DescribeAddresses"
-    "fixture/DescribeAddresses.yaml"
-
-requestDescribeSnapshotAttribute :: DescribeSnapshotAttribute -> TestTree
-requestDescribeSnapshotAttribute = req
-    "DescribeSnapshotAttribute"
-    "fixture/DescribeSnapshotAttribute.yaml"
-
-requestDescribeIdentityIdFormat :: DescribeIdentityIdFormat -> TestTree
-requestDescribeIdentityIdFormat = req
-    "DescribeIdentityIdFormat"
-    "fixture/DescribeIdentityIdFormat.yaml"
-
-requestReplaceRoute :: ReplaceRoute -> TestTree
-requestReplaceRoute = req
-    "ReplaceRoute"
-    "fixture/ReplaceRoute.yaml"
-
-requestDescribeVPCEndpointServices :: DescribeVPCEndpointServices -> TestTree
-requestDescribeVPCEndpointServices = req
-    "DescribeVPCEndpointServices"
-    "fixture/DescribeVPCEndpointServices.yaml"
-
-requestAuthorizeSecurityGroupIngress :: AuthorizeSecurityGroupIngress -> TestTree
-requestAuthorizeSecurityGroupIngress = req
-    "AuthorizeSecurityGroupIngress"
-    "fixture/AuthorizeSecurityGroupIngress.yaml"
-
-requestCreateVPCPeeringConnection :: CreateVPCPeeringConnection -> TestTree
-requestCreateVPCPeeringConnection = req
-    "CreateVPCPeeringConnection"
-    "fixture/CreateVPCPeeringConnection.yaml"
-
-requestDescribeSubnets :: DescribeSubnets -> TestTree
-requestDescribeSubnets = req
-    "DescribeSubnets"
-    "fixture/DescribeSubnets.yaml"
-
-requestCreateTags :: CreateTags -> TestTree
-requestCreateTags = req
-    "CreateTags"
-    "fixture/CreateTags.yaml"
-
-requestPurchaseReservedInstancesOffering :: PurchaseReservedInstancesOffering -> TestTree
-requestPurchaseReservedInstancesOffering = req
-    "PurchaseReservedInstancesOffering"
-    "fixture/PurchaseReservedInstancesOffering.yaml"
-
-requestDeleteNetworkACLEntry :: DeleteNetworkACLEntry -> TestTree
-requestDeleteNetworkACLEntry = req
-    "DeleteNetworkACLEntry"
-    "fixture/DeleteNetworkACLEntry.yaml"
-
-requestResetSnapshotAttribute :: ResetSnapshotAttribute -> TestTree
-requestResetSnapshotAttribute = req
-    "ResetSnapshotAttribute"
-    "fixture/ResetSnapshotAttribute.yaml"
-
-requestDescribeVPNConnections :: DescribeVPNConnections -> TestTree
-requestDescribeVPNConnections = req
-    "DescribeVPNConnections"
-    "fixture/DescribeVPNConnections.yaml"
-
-requestDeleteRoute :: DeleteRoute -> TestTree
-requestDeleteRoute = req
-    "DeleteRoute"
-    "fixture/DeleteRoute.yaml"
-
-requestReplaceNetworkACLEntry :: ReplaceNetworkACLEntry -> TestTree
-requestReplaceNetworkACLEntry = req
-    "ReplaceNetworkACLEntry"
-    "fixture/ReplaceNetworkACLEntry.yaml"
-
-requestDescribeVPCEndpoints :: DescribeVPCEndpoints -> TestTree
-requestDescribeVPCEndpoints = req
-    "DescribeVPCEndpoints"
-    "fixture/DescribeVPCEndpoints.yaml"
-
-requestResetInstanceAttribute :: ResetInstanceAttribute -> TestTree
-requestResetInstanceAttribute = req
-    "ResetInstanceAttribute"
-    "fixture/ResetInstanceAttribute.yaml"
-
-requestModifyIdentityIdFormat :: ModifyIdentityIdFormat -> TestTree
-requestModifyIdentityIdFormat = req
-    "ModifyIdentityIdFormat"
-    "fixture/ModifyIdentityIdFormat.yaml"
-
-requestAttachNetworkInterface :: AttachNetworkInterface -> TestTree
-requestAttachNetworkInterface = req
-    "AttachNetworkInterface"
-    "fixture/AttachNetworkInterface.yaml"
-
-requestDescribeInstanceStatus :: DescribeInstanceStatus -> TestTree
-requestDescribeInstanceStatus = req
-    "DescribeInstanceStatus"
-    "fixture/DescribeInstanceStatus.yaml"
-
-requestImportKeyPair :: ImportKeyPair -> TestTree
-requestImportKeyPair = req
-    "ImportKeyPair"
-    "fixture/ImportKeyPair.yaml"
-
-requestDeleteTags :: DeleteTags -> TestTree
-requestDeleteTags = req
-    "DeleteTags"
-    "fixture/DeleteTags.yaml"
-
-requestConfirmProductInstance :: ConfirmProductInstance -> TestTree
-requestConfirmProductInstance = req
-    "ConfirmProductInstance"
-    "fixture/ConfirmProductInstance.yaml"
-
-requestDescribeInstanceAttribute :: DescribeInstanceAttribute -> TestTree
-requestDescribeInstanceAttribute = req
-    "DescribeInstanceAttribute"
-    "fixture/DescribeInstanceAttribute.yaml"
-
-requestDescribeReservedInstancesOfferings :: DescribeReservedInstancesOfferings -> TestTree
-requestDescribeReservedInstancesOfferings = req
-    "DescribeReservedInstancesOfferings"
-    "fixture/DescribeReservedInstancesOfferings.yaml"
-
-requestCreateCustomerGateway :: CreateCustomerGateway -> TestTree
-requestCreateCustomerGateway = req
-    "CreateCustomerGateway"
-    "fixture/CreateCustomerGateway.yaml"
-
-requestDeleteSecurityGroup :: DeleteSecurityGroup -> TestTree
-requestDeleteSecurityGroup = req
-    "DeleteSecurityGroup"
-    "fixture/DeleteSecurityGroup.yaml"
-
-requestDeleteVPCPeeringConnection :: DeleteVPCPeeringConnection -> TestTree
-requestDeleteVPCPeeringConnection = req
-    "DeleteVPCPeeringConnection"
-    "fixture/DeleteVPCPeeringConnection.yaml"
-
-requestAttachInternetGateway :: AttachInternetGateway -> TestTree
-requestAttachInternetGateway = req
-    "AttachInternetGateway"
-    "fixture/AttachInternetGateway.yaml"
-
-requestModifyInstancePlacement :: ModifyInstancePlacement -> TestTree
-requestModifyInstancePlacement = req
-    "ModifyInstancePlacement"
-    "fixture/ModifyInstancePlacement.yaml"
-
-requestDescribeFlowLogs :: DescribeFlowLogs -> TestTree
-requestDescribeFlowLogs = req
-    "DescribeFlowLogs"
-    "fixture/DescribeFlowLogs.yaml"
-
-requestRunInstances :: RunInstances -> TestTree
-requestRunInstances = req
-    "RunInstances"
-    "fixture/RunInstances.yaml"
-
-requestAssociateDHCPOptions :: AssociateDHCPOptions -> TestTree
-requestAssociateDHCPOptions = req
-    "AssociateDHCPOptions"
-    "fixture/AssociateDHCPOptions.yaml"
-
-requestDescribeReservedInstances :: DescribeReservedInstances -> TestTree
-requestDescribeReservedInstances = req
-    "DescribeReservedInstances"
-    "fixture/DescribeReservedInstances.yaml"
-
-requestDescribeIdFormat :: DescribeIdFormat -> TestTree
-requestDescribeIdFormat = req
-    "DescribeIdFormat"
-    "fixture/DescribeIdFormat.yaml"
-
-requestDescribeVPCs :: DescribeVPCs -> TestTree
-requestDescribeVPCs = req
-    "DescribeVPCs"
-    "fixture/DescribeVPCs.yaml"
-
-requestDescribeConversionTasks :: DescribeConversionTasks -> TestTree
-requestDescribeConversionTasks = req
-    "DescribeConversionTasks"
-    "fixture/DescribeConversionTasks.yaml"
-
-requestDisableVPCClassicLinkDNSSupport :: DisableVPCClassicLinkDNSSupport -> TestTree
-requestDisableVPCClassicLinkDNSSupport = req
-    "DisableVPCClassicLinkDNSSupport"
-    "fixture/DisableVPCClassicLinkDNSSupport.yaml"
-
-requestAllocateAddress :: AllocateAddress -> TestTree
-requestAllocateAddress = req
-    "AllocateAddress"
-    "fixture/AllocateAddress.yaml"
-
-requestCancelConversionTask :: CancelConversionTask -> TestTree
-requestCancelConversionTask = req
-    "CancelConversionTask"
-    "fixture/CancelConversionTask.yaml"
-
-requestModifyImageAttribute :: ModifyImageAttribute -> TestTree
-requestModifyImageAttribute = req
-    "ModifyImageAttribute"
-    "fixture/ModifyImageAttribute.yaml"
-
-requestCreateRouteTable :: CreateRouteTable -> TestTree
-requestCreateRouteTable = req
-    "CreateRouteTable"
-    "fixture/CreateRouteTable.yaml"
-
-requestReportInstanceStatus :: ReportInstanceStatus -> TestTree
-requestReportInstanceStatus = req
-    "ReportInstanceStatus"
-    "fixture/ReportInstanceStatus.yaml"
-
-requestAttachVolume :: AttachVolume -> TestTree
-requestAttachVolume = req
-    "AttachVolume"
-    "fixture/AttachVolume.yaml"
-
-requestRequestSpotInstances :: RequestSpotInstances -> TestTree
-requestRequestSpotInstances = req
-    "RequestSpotInstances"
-    "fixture/RequestSpotInstances.yaml"
-
-requestDescribeHostReservationOfferings :: DescribeHostReservationOfferings -> TestTree
-requestDescribeHostReservationOfferings = req
-    "DescribeHostReservationOfferings"
-    "fixture/DescribeHostReservationOfferings.yaml"
-
-requestDescribeVolumes :: DescribeVolumes -> TestTree
-requestDescribeVolumes = req
-    "DescribeVolumes"
-    "fixture/DescribeVolumes.yaml"
-
-requestRejectVPCPeeringConnection :: RejectVPCPeeringConnection -> TestTree
-requestRejectVPCPeeringConnection = req
-    "RejectVPCPeeringConnection"
-    "fixture/RejectVPCPeeringConnection.yaml"
-
-requestDeleteVPNConnectionRoute :: DeleteVPNConnectionRoute -> TestTree
-requestDeleteVPNConnectionRoute = req
-    "DeleteVPNConnectionRoute"
-    "fixture/DeleteVPNConnectionRoute.yaml"
-
-requestModifyVPCEndpoint :: ModifyVPCEndpoint -> TestTree
-requestModifyVPCEndpoint = req
-    "ModifyVPCEndpoint"
-    "fixture/ModifyVPCEndpoint.yaml"
-
-requestAllocateHosts :: AllocateHosts -> TestTree
-requestAllocateHosts = req
-    "AllocateHosts"
-    "fixture/AllocateHosts.yaml"
-
-requestRegisterImage :: RegisterImage -> TestTree
-requestRegisterImage = req
-    "RegisterImage"
-    "fixture/RegisterImage.yaml"
-
-requestRevokeSecurityGroupIngress :: RevokeSecurityGroupIngress -> TestTree
-requestRevokeSecurityGroupIngress = req
-    "RevokeSecurityGroupIngress"
-    "fixture/RevokeSecurityGroupIngress.yaml"
-
-requestDescribeHostReservations :: DescribeHostReservations -> TestTree
-requestDescribeHostReservations = req
-    "DescribeHostReservations"
-    "fixture/DescribeHostReservations.yaml"
-
-requestEnableVPCClassicLinkDNSSupport :: EnableVPCClassicLinkDNSSupport -> TestTree
-requestEnableVPCClassicLinkDNSSupport = req
-    "EnableVPCClassicLinkDNSSupport"
-    "fixture/EnableVPCClassicLinkDNSSupport.yaml"
-
-requestModifyReservedInstances :: ModifyReservedInstances -> TestTree
-requestModifyReservedInstances = req
-    "ModifyReservedInstances"
-    "fixture/ModifyReservedInstances.yaml"
-
-requestDescribeScheduledInstances :: DescribeScheduledInstances -> TestTree
-requestDescribeScheduledInstances = req
-    "DescribeScheduledInstances"
-    "fixture/DescribeScheduledInstances.yaml"
-
-requestCreateFlowLogs :: CreateFlowLogs -> TestTree
-requestCreateFlowLogs = req
-    "CreateFlowLogs"
-    "fixture/CreateFlowLogs.yaml"
-
-requestDescribeSpotFleetRequests :: DescribeSpotFleetRequests -> TestTree
-requestDescribeSpotFleetRequests = req
-    "DescribeSpotFleetRequests"
-    "fixture/DescribeSpotFleetRequests.yaml"
-
-requestMoveAddressToVPC :: MoveAddressToVPC -> TestTree
-requestMoveAddressToVPC = req
-    "MoveAddressToVPC"
-    "fixture/MoveAddressToVPC.yaml"
-
-requestDeleteNetworkACL :: DeleteNetworkACL -> TestTree
-requestDeleteNetworkACL = req
-    "DeleteNetworkACL"
-    "fixture/DeleteNetworkACL.yaml"
-
-requestDeleteVPNGateway :: DeleteVPNGateway -> TestTree
-requestDeleteVPNGateway = req
-    "DeleteVPNGateway"
-    "fixture/DeleteVPNGateway.yaml"
-
-requestDescribeImportImageTasks :: DescribeImportImageTasks -> TestTree
-requestDescribeImportImageTasks = req
-    "DescribeImportImageTasks"
-    "fixture/DescribeImportImageTasks.yaml"
-
-requestDescribeVolumeAttribute :: DescribeVolumeAttribute -> TestTree
-requestDescribeVolumeAttribute = req
-    "DescribeVolumeAttribute"
-    "fixture/DescribeVolumeAttribute.yaml"
-
-requestDescribeMovingAddresses :: DescribeMovingAddresses -> TestTree
-requestDescribeMovingAddresses = req
-    "DescribeMovingAddresses"
-    "fixture/DescribeMovingAddresses.yaml"
-
-requestGetPasswordData :: GetPasswordData -> TestTree
-requestGetPasswordData = req
-    "GetPasswordData"
-    "fixture/GetPasswordData.yaml"
-
-requestCreateVPC :: CreateVPC -> TestTree
-requestCreateVPC = req
-    "CreateVPC"
-    "fixture/CreateVPC.yaml"
-
-requestModifyVPCPeeringConnectionOptions :: ModifyVPCPeeringConnectionOptions -> TestTree
-requestModifyVPCPeeringConnectionOptions = req
-    "ModifyVPCPeeringConnectionOptions"
-    "fixture/ModifyVPCPeeringConnectionOptions.yaml"
-
-requestCopySnapshot :: CopySnapshot -> TestTree
-requestCopySnapshot = req
-    "CopySnapshot"
-    "fixture/CopySnapshot.yaml"
-
-requestDisassociateAddress :: DisassociateAddress -> TestTree
-requestDisassociateAddress = req
-    "DisassociateAddress"
-    "fixture/DisassociateAddress.yaml"
-
-requestDescribeEgressOnlyInternetGateways :: DescribeEgressOnlyInternetGateways -> TestTree
-requestDescribeEgressOnlyInternetGateways = req
-    "DescribeEgressOnlyInternetGateways"
-    "fixture/DescribeEgressOnlyInternetGateways.yaml"
-
-requestDeleteVPC :: DeleteVPC -> TestTree
-requestDeleteVPC = req
-    "DeleteVPC"
-    "fixture/DeleteVPC.yaml"
-
-requestCreateInstanceExportTask :: CreateInstanceExportTask -> TestTree
-requestCreateInstanceExportTask = req
-    "CreateInstanceExportTask"
-    "fixture/CreateInstanceExportTask.yaml"
-
-requestAssociateVPCCidrBlock :: AssociateVPCCidrBlock -> TestTree
-requestAssociateVPCCidrBlock = req
-    "AssociateVPCCidrBlock"
-    "fixture/AssociateVPCCidrBlock.yaml"
-
-requestDescribeVPCAttribute :: DescribeVPCAttribute -> TestTree
-requestDescribeVPCAttribute = req
-    "DescribeVPCAttribute"
-    "fixture/DescribeVPCAttribute.yaml"
-
-requestCreateVolume :: CreateVolume -> TestTree
-requestCreateVolume = req
-    "CreateVolume"
-    "fixture/CreateVolume.yaml"
-
-requestDescribeScheduledInstanceAvailability :: DescribeScheduledInstanceAvailability -> TestTree
-requestDescribeScheduledInstanceAvailability = req
-    "DescribeScheduledInstanceAvailability"
-    "fixture/DescribeScheduledInstanceAvailability.yaml"
-
-requestModifyVolumeAttribute :: ModifyVolumeAttribute -> TestTree
-requestModifyVolumeAttribute = req
-    "ModifyVolumeAttribute"
-    "fixture/ModifyVolumeAttribute.yaml"
-
-requestDescribeSpotDatafeedSubscription :: DescribeSpotDatafeedSubscription -> TestTree
-requestDescribeSpotDatafeedSubscription = req
-    "DescribeSpotDatafeedSubscription"
-    "fixture/DescribeSpotDatafeedSubscription.yaml"
-
-requestDescribePrefixLists :: DescribePrefixLists -> TestTree
-requestDescribePrefixLists = req
-    "DescribePrefixLists"
-    "fixture/DescribePrefixLists.yaml"
-
-requestDeletePlacementGroup :: DeletePlacementGroup -> TestTree
-requestDeletePlacementGroup = req
-    "DeletePlacementGroup"
-    "fixture/DeletePlacementGroup.yaml"
-
-requestRequestSpotFleet :: RequestSpotFleet -> TestTree
-requestRequestSpotFleet = req
-    "RequestSpotFleet"
-    "fixture/RequestSpotFleet.yaml"
-
-requestCreateSubnet :: CreateSubnet -> TestTree
-requestCreateSubnet = req
-    "CreateSubnet"
-    "fixture/CreateSubnet.yaml"
-
-requestCreateNetworkInterface :: CreateNetworkInterface -> TestTree
-requestCreateNetworkInterface = req
-    "CreateNetworkInterface"
-    "fixture/CreateNetworkInterface.yaml"
-
-requestDescribeSecurityGroups :: DescribeSecurityGroups -> TestTree
-requestDescribeSecurityGroups = req
-    "DescribeSecurityGroups"
-    "fixture/DescribeSecurityGroups.yaml"
-
-requestDescribeExportTasks :: DescribeExportTasks -> TestTree
-requestDescribeExportTasks = req
-    "DescribeExportTasks"
-    "fixture/DescribeExportTasks.yaml"
-
-requestModifySpotFleetRequest :: ModifySpotFleetRequest -> TestTree
-requestModifySpotFleetRequest = req
-    "ModifySpotFleetRequest"
-    "fixture/ModifySpotFleetRequest.yaml"
-
-requestDetachVPNGateway :: DetachVPNGateway -> TestTree
-requestDetachVPNGateway = req
-    "DetachVPNGateway"
-    "fixture/DetachVPNGateway.yaml"
-
-requestGetHostReservationPurchasePreview :: GetHostReservationPurchasePreview -> TestTree
-requestGetHostReservationPurchasePreview = req
-    "GetHostReservationPurchasePreview"
-    "fixture/GetHostReservationPurchasePreview.yaml"
-
-requestEnableVolumeIO :: EnableVolumeIO -> TestTree
-requestEnableVolumeIO = req
-    "EnableVolumeIO"
-    "fixture/EnableVolumeIO.yaml"
-
-requestDescribeInstances :: DescribeInstances -> TestTree
-requestDescribeInstances = req
-    "DescribeInstances"
-    "fixture/DescribeInstances.yaml"
-
-requestCreateNatGateway :: CreateNatGateway -> TestTree
-requestCreateNatGateway = req
-    "CreateNatGateway"
-    "fixture/CreateNatGateway.yaml"
-
-requestDescribeVPCPeeringConnections :: DescribeVPCPeeringConnections -> TestTree
-requestDescribeVPCPeeringConnections = req
-    "DescribeVPCPeeringConnections"
-    "fixture/DescribeVPCPeeringConnections.yaml"
-
-requestCancelExportTask :: CancelExportTask -> TestTree
-requestCancelExportTask = req
-    "CancelExportTask"
-    "fixture/CancelExportTask.yaml"
-
-requestDisassociateVPCCidrBlock :: DisassociateVPCCidrBlock -> TestTree
-requestDisassociateVPCCidrBlock = req
-    "DisassociateVPCCidrBlock"
-    "fixture/DisassociateVPCCidrBlock.yaml"
-
-requestDeleteNetworkInterface :: DeleteNetworkInterface -> TestTree
-requestDeleteNetworkInterface = req
-    "DeleteNetworkInterface"
-    "fixture/DeleteNetworkInterface.yaml"
-
-requestReplaceRouteTableAssociation :: ReplaceRouteTableAssociation -> TestTree
-requestReplaceRouteTableAssociation = req
-    "ReplaceRouteTableAssociation"
-    "fixture/ReplaceRouteTableAssociation.yaml"
-
-requestStartInstances :: StartInstances -> TestTree
-requestStartInstances = req
-    "StartInstances"
-    "fixture/StartInstances.yaml"
-
-requestCreatePlacementGroup :: CreatePlacementGroup -> TestTree
-requestCreatePlacementGroup = req
-    "CreatePlacementGroup"
-    "fixture/CreatePlacementGroup.yaml"
-
-requestDescribeSnapshots :: DescribeSnapshots -> TestTree
-requestDescribeSnapshots = req
-    "DescribeSnapshots"
-    "fixture/DescribeSnapshots.yaml"
-
-requestAssociateAddress :: AssociateAddress -> TestTree
-requestAssociateAddress = req
-    "AssociateAddress"
-    "fixture/AssociateAddress.yaml"
-
-requestDescribeNetworkInterfaceAttribute :: DescribeNetworkInterfaceAttribute -> TestTree
-requestDescribeNetworkInterfaceAttribute = req
-    "DescribeNetworkInterfaceAttribute"
-    "fixture/DescribeNetworkInterfaceAttribute.yaml"
-
-requestReleaseHosts :: ReleaseHosts -> TestTree
-requestReleaseHosts = req
-    "ReleaseHosts"
-    "fixture/ReleaseHosts.yaml"
-
-requestResetNetworkInterfaceAttribute :: ResetNetworkInterfaceAttribute -> TestTree
-requestResetNetworkInterfaceAttribute = req
-    "ResetNetworkInterfaceAttribute"
-    "fixture/ResetNetworkInterfaceAttribute.yaml"
-
-requestDeleteInternetGateway :: DeleteInternetGateway -> TestTree
-requestDeleteInternetGateway = req
-    "DeleteInternetGateway"
-    "fixture/DeleteInternetGateway.yaml"
-
-requestDescribeReservedInstancesListings :: DescribeReservedInstancesListings -> TestTree
-requestDescribeReservedInstancesListings = req
-    "DescribeReservedInstancesListings"
-    "fixture/DescribeReservedInstancesListings.yaml"
-
-requestCreateVPNConnection :: CreateVPNConnection -> TestTree
-requestCreateVPNConnection = req
-    "CreateVPNConnection"
-    "fixture/CreateVPNConnection.yaml"
-
-requestDeleteNatGateway :: DeleteNatGateway -> TestTree
-requestDeleteNatGateway = req
-    "DeleteNatGateway"
-    "fixture/DeleteNatGateway.yaml"
-
-requestDescribeImportSnapshotTasks :: DescribeImportSnapshotTasks -> TestTree
-requestDescribeImportSnapshotTasks = req
-    "DescribeImportSnapshotTasks"
-    "fixture/DescribeImportSnapshotTasks.yaml"
-
-requestDescribeCustomerGateways :: DescribeCustomerGateways -> TestTree
-requestDescribeCustomerGateways = req
-    "DescribeCustomerGateways"
-    "fixture/DescribeCustomerGateways.yaml"
-
-requestDeleteSubnet :: DeleteSubnet -> TestTree
-requestDeleteSubnet = req
-    "DeleteSubnet"
-    "fixture/DeleteSubnet.yaml"
-
-requestCopyImage :: CopyImage -> TestTree
-requestCopyImage = req
-    "CopyImage"
-    "fixture/CopyImage.yaml"
-
-requestCreateVPCEndpoint :: CreateVPCEndpoint -> TestTree
-requestCreateVPCEndpoint = req
-    "CreateVPCEndpoint"
-    "fixture/CreateVPCEndpoint.yaml"
-
-requestUnmonitorInstances :: UnmonitorInstances -> TestTree
-requestUnmonitorInstances = req
-    "UnmonitorInstances"
-    "fixture/UnmonitorInstances.yaml"
-
-requestCreateSecurityGroup :: CreateSecurityGroup -> TestTree
-requestCreateSecurityGroup = req
-    "CreateSecurityGroup"
-    "fixture/CreateSecurityGroup.yaml"
-
-requestImportVolume :: ImportVolume -> TestTree
-requestImportVolume = req
-    "ImportVolume"
-    "fixture/ImportVolume.yaml"
-
-requestDisableVGWRoutePropagation :: DisableVGWRoutePropagation -> TestTree
-requestDisableVGWRoutePropagation = req
-    "DisableVGWRoutePropagation"
-    "fixture/DisableVGWRoutePropagation.yaml"
-
-requestCreateSpotDatafeedSubscription :: CreateSpotDatafeedSubscription -> TestTree
-requestCreateSpotDatafeedSubscription = req
-    "CreateSpotDatafeedSubscription"
-    "fixture/CreateSpotDatafeedSubscription.yaml"
-
-requestCancelSpotInstanceRequests :: CancelSpotInstanceRequests -> TestTree
-requestCancelSpotInstanceRequests = req
-    "CancelSpotInstanceRequests"
-    "fixture/CancelSpotInstanceRequests.yaml"
-
-requestCreateRoute :: CreateRoute -> TestTree
-requestCreateRoute = req
-    "CreateRoute"
-    "fixture/CreateRoute.yaml"
-
-requestDeleteSnapshot :: DeleteSnapshot -> TestTree
-requestDeleteSnapshot = req
-    "DeleteSnapshot"
-    "fixture/DeleteSnapshot.yaml"
-
-requestAssignPrivateIPAddresses :: AssignPrivateIPAddresses -> TestTree
-requestAssignPrivateIPAddresses = req
-    "AssignPrivateIPAddresses"
-    "fixture/AssignPrivateIPAddresses.yaml"
-
-requestModifyInstanceAttribute :: ModifyInstanceAttribute -> TestTree
-requestModifyInstanceAttribute = req
-    "ModifyInstanceAttribute"
-    "fixture/ModifyInstanceAttribute.yaml"
-
-requestDeleteCustomerGateway :: DeleteCustomerGateway -> TestTree
-requestDeleteCustomerGateway = req
-    "DeleteCustomerGateway"
-    "fixture/DeleteCustomerGateway.yaml"
-
-requestDisassociateRouteTable :: DisassociateRouteTable -> TestTree
-requestDisassociateRouteTable = req
-    "DisassociateRouteTable"
-    "fixture/DisassociateRouteTable.yaml"
-
-requestGetConsoleScreenshot :: GetConsoleScreenshot -> TestTree
-requestGetConsoleScreenshot = req
-    "GetConsoleScreenshot"
-    "fixture/GetConsoleScreenshot.yaml"
-
-requestAssignIPv6Addresses :: AssignIPv6Addresses -> TestTree
-requestAssignIPv6Addresses = req
-    "AssignIPv6Addresses"
-    "fixture/AssignIPv6Addresses.yaml"
-
-requestDeleteSpotDatafeedSubscription :: DeleteSpotDatafeedSubscription -> TestTree
-requestDeleteSpotDatafeedSubscription = req
-    "DeleteSpotDatafeedSubscription"
-    "fixture/DeleteSpotDatafeedSubscription.yaml"
-
-requestEnableVPCClassicLink :: EnableVPCClassicLink -> TestTree
-requestEnableVPCClassicLink = req
-    "EnableVPCClassicLink"
-    "fixture/EnableVPCClassicLink.yaml"
-
-requestDescribePlacementGroups :: DescribePlacementGroups -> TestTree
-requestDescribePlacementGroups = req
-    "DescribePlacementGroups"
-    "fixture/DescribePlacementGroups.yaml"
-
-requestDescribeStaleSecurityGroups :: DescribeStaleSecurityGroups -> TestTree
-requestDescribeStaleSecurityGroups = req
-    "DescribeStaleSecurityGroups"
-    "fixture/DescribeStaleSecurityGroups.yaml"
-
-requestPurchaseScheduledInstances :: PurchaseScheduledInstances -> TestTree
-requestPurchaseScheduledInstances = req
-    "PurchaseScheduledInstances"
-    "fixture/PurchaseScheduledInstances.yaml"
-
-requestEnableVGWRoutePropagation :: EnableVGWRoutePropagation -> TestTree
-requestEnableVGWRoutePropagation = req
-    "EnableVGWRoutePropagation"
-    "fixture/EnableVGWRoutePropagation.yaml"
-
-requestDescribeSpotFleetRequestHistory :: DescribeSpotFleetRequestHistory -> TestTree
-requestDescribeSpotFleetRequestHistory = req
-    "DescribeSpotFleetRequestHistory"
-    "fixture/DescribeSpotFleetRequestHistory.yaml"
-
-requestModifySnapshotAttribute :: ModifySnapshotAttribute -> TestTree
-requestModifySnapshotAttribute = req
-    "ModifySnapshotAttribute"
-    "fixture/ModifySnapshotAttribute.yaml"
-
-requestCreateSnapshot :: CreateSnapshot -> TestTree
-requestCreateSnapshot = req
-    "CreateSnapshot"
-    "fixture/CreateSnapshot.yaml"
-
-requestCreateNetworkACLEntry :: CreateNetworkACLEntry -> TestTree
-requestCreateNetworkACLEntry = req
-    "CreateNetworkACLEntry"
-    "fixture/CreateNetworkACLEntry.yaml"
-
-requestCreateReservedInstancesListing :: CreateReservedInstancesListing -> TestTree
-requestCreateReservedInstancesListing = req
-    "CreateReservedInstancesListing"
-    "fixture/CreateReservedInstancesListing.yaml"
-
-requestAttachVPNGateway :: AttachVPNGateway -> TestTree
-requestAttachVPNGateway = req
-    "AttachVPNGateway"
-    "fixture/AttachVPNGateway.yaml"
-
-requestCreateDHCPOptions :: CreateDHCPOptions -> TestTree
-requestCreateDHCPOptions = req
-    "CreateDHCPOptions"
-    "fixture/CreateDHCPOptions.yaml"
-
-requestDescribeAccountAttributes :: DescribeAccountAttributes -> TestTree
-requestDescribeAccountAttributes = req
-    "DescribeAccountAttributes"
-    "fixture/DescribeAccountAttributes.yaml"
-
-requestModifyHosts :: ModifyHosts -> TestTree
-requestModifyHosts = req
-    "ModifyHosts"
-    "fixture/ModifyHosts.yaml"
-
-requestRebootInstances :: RebootInstances -> TestTree
-requestRebootInstances = req
-    "RebootInstances"
-    "fixture/RebootInstances.yaml"
-
-requestUnassignIPv6Addresses :: UnassignIPv6Addresses -> TestTree
-requestUnassignIPv6Addresses = req
-    "UnassignIPv6Addresses"
-    "fixture/UnassignIPv6Addresses.yaml"
-
-requestDeleteEgressOnlyInternetGateway :: DeleteEgressOnlyInternetGateway -> TestTree
-requestDeleteEgressOnlyInternetGateway = req
-    "DeleteEgressOnlyInternetGateway"
-    "fixture/DeleteEgressOnlyInternetGateway.yaml"
-
-requestPurchaseHostReservation :: PurchaseHostReservation -> TestTree
-requestPurchaseHostReservation = req
-    "PurchaseHostReservation"
-    "fixture/PurchaseHostReservation.yaml"
-
-requestCreateImage :: CreateImage -> TestTree
-requestCreateImage = req
-    "CreateImage"
-    "fixture/CreateImage.yaml"
-
-requestDescribeClassicLinkInstances :: DescribeClassicLinkInstances -> TestTree
-requestDescribeClassicLinkInstances = req
-    "DescribeClassicLinkInstances"
-    "fixture/DescribeClassicLinkInstances.yaml"
-
-requestTerminateInstances :: TerminateInstances -> TestTree
-requestTerminateInstances = req
-    "TerminateInstances"
-    "fixture/TerminateInstances.yaml"
-
-requestDescribeKeyPairs :: DescribeKeyPairs -> TestTree
-requestDescribeKeyPairs = req
-    "DescribeKeyPairs"
-    "fixture/DescribeKeyPairs.yaml"
-
-requestCreateVPNConnectionRoute :: CreateVPNConnectionRoute -> TestTree
-requestCreateVPNConnectionRoute = req
-    "CreateVPNConnectionRoute"
-    "fixture/CreateVPNConnectionRoute.yaml"
-
-requestAssociateRouteTable :: AssociateRouteTable -> TestTree
-requestAssociateRouteTable = req
-    "AssociateRouteTable"
-    "fixture/AssociateRouteTable.yaml"
-
-requestDescribeVPNGateways :: DescribeVPNGateways -> TestTree
-requestDescribeVPNGateways = req
-    "DescribeVPNGateways"
-    "fixture/DescribeVPNGateways.yaml"
-
-requestGetConsoleOutput :: GetConsoleOutput -> TestTree
-requestGetConsoleOutput = req
-    "GetConsoleOutput"
-    "fixture/GetConsoleOutput.yaml"
-
-requestDescribeHosts :: DescribeHosts -> TestTree
-requestDescribeHosts = req
-    "DescribeHosts"
-    "fixture/DescribeHosts.yaml"
-
-requestDescribeImageAttribute :: DescribeImageAttribute -> TestTree
-requestDescribeImageAttribute = req
-    "DescribeImageAttribute"
-    "fixture/DescribeImageAttribute.yaml"
-
-requestModifyIdFormat :: ModifyIdFormat -> TestTree
-requestModifyIdFormat = req
-    "ModifyIdFormat"
-    "fixture/ModifyIdFormat.yaml"
-
-requestDeleteRouteTable :: DeleteRouteTable -> TestTree
-requestDeleteRouteTable = req
-    "DeleteRouteTable"
-    "fixture/DeleteRouteTable.yaml"
-
-requestResetImageAttribute :: ResetImageAttribute -> TestTree
-requestResetImageAttribute = req
-    "ResetImageAttribute"
-    "fixture/ResetImageAttribute.yaml"
-
-requestCreateEgressOnlyInternetGateway :: CreateEgressOnlyInternetGateway -> TestTree
-requestCreateEgressOnlyInternetGateway = req
-    "CreateEgressOnlyInternetGateway"
-    "fixture/CreateEgressOnlyInternetGateway.yaml"
-
-requestDescribeReservedInstancesModifications :: DescribeReservedInstancesModifications -> TestTree
-requestDescribeReservedInstancesModifications = req
-    "DescribeReservedInstancesModifications"
-    "fixture/DescribeReservedInstancesModifications.yaml"
-
-requestDescribeSpotInstanceRequests :: DescribeSpotInstanceRequests -> TestTree
-requestDescribeSpotInstanceRequests = req
-    "DescribeSpotInstanceRequests"
-    "fixture/DescribeSpotInstanceRequests.yaml"
-
-requestUnassignPrivateIPAddresses :: UnassignPrivateIPAddresses -> TestTree
-requestUnassignPrivateIPAddresses = req
-    "UnassignPrivateIPAddresses"
-    "fixture/UnassignPrivateIPAddresses.yaml"
-
-requestDeleteDHCPOptions :: DeleteDHCPOptions -> TestTree
-requestDeleteDHCPOptions = req
-    "DeleteDHCPOptions"
-    "fixture/DeleteDHCPOptions.yaml"
-
-requestDescribeNetworkACLs :: DescribeNetworkACLs -> TestTree
-requestDescribeNetworkACLs = req
-    "DescribeNetworkACLs"
-    "fixture/DescribeNetworkACLs.yaml"
-
-requestCancelImportTask :: CancelImportTask -> TestTree
-requestCancelImportTask = req
-    "CancelImportTask"
-    "fixture/CancelImportTask.yaml"
-
-requestDetachClassicLinkVPC :: DetachClassicLinkVPC -> TestTree
-requestDetachClassicLinkVPC = req
-    "DetachClassicLinkVPC"
-    "fixture/DetachClassicLinkVPC.yaml"
-
-requestDescribeRegions :: DescribeRegions -> TestTree
-requestDescribeRegions = req
-    "DescribeRegions"
-    "fixture/DescribeRegions.yaml"
-
-requestMonitorInstances :: MonitorInstances -> TestTree
-requestMonitorInstances = req
-    "MonitorInstances"
-    "fixture/MonitorInstances.yaml"
-
-requestAcceptVPCPeeringConnection :: AcceptVPCPeeringConnection -> TestTree
-requestAcceptVPCPeeringConnection = req
-    "AcceptVPCPeeringConnection"
-    "fixture/AcceptVPCPeeringConnection.yaml"
-
-requestImportSnapshot :: ImportSnapshot -> TestTree
-requestImportSnapshot = req
-    "ImportSnapshot"
-    "fixture/ImportSnapshot.yaml"
-
-requestDescribeVolumeStatus :: DescribeVolumeStatus -> TestTree
-requestDescribeVolumeStatus = req
-    "DescribeVolumeStatus"
-    "fixture/DescribeVolumeStatus.yaml"
-
-requestDescribeRouteTables :: DescribeRouteTables -> TestTree
-requestDescribeRouteTables = req
-    "DescribeRouteTables"
-    "fixture/DescribeRouteTables.yaml"
-
-requestDescribeAvailabilityZones :: DescribeAvailabilityZones -> TestTree
-requestDescribeAvailabilityZones = req
-    "DescribeAvailabilityZones"
-    "fixture/DescribeAvailabilityZones.yaml"
-
-requestModifyVPCAttribute :: ModifyVPCAttribute -> TestTree
-requestModifyVPCAttribute = req
-    "ModifyVPCAttribute"
-    "fixture/ModifyVPCAttribute.yaml"
-
-requestDescribeImages :: DescribeImages -> TestTree
-requestDescribeImages = req
-    "DescribeImages"
-    "fixture/DescribeImages.yaml"
-
-requestRestoreAddressToClassic :: RestoreAddressToClassic -> TestTree
-requestRestoreAddressToClassic = req
-    "RestoreAddressToClassic"
-    "fixture/RestoreAddressToClassic.yaml"
-
-requestCreateKeyPair :: CreateKeyPair -> TestTree
-requestCreateKeyPair = req
-    "CreateKeyPair"
-    "fixture/CreateKeyPair.yaml"
-
-requestGetReservedInstancesExchangeQuote :: GetReservedInstancesExchangeQuote -> TestTree
-requestGetReservedInstancesExchangeQuote = req
-    "GetReservedInstancesExchangeQuote"
-    "fixture/GetReservedInstancesExchangeQuote.yaml"
-
-requestDeleteVolume :: DeleteVolume -> TestTree
-requestDeleteVolume = req
-    "DeleteVolume"
-    "fixture/DeleteVolume.yaml"
-
-requestDescribeSpotFleetInstances :: DescribeSpotFleetInstances -> TestTree
-requestDescribeSpotFleetInstances = req
-    "DescribeSpotFleetInstances"
-    "fixture/DescribeSpotFleetInstances.yaml"
-
--- Responses
-
-responseImportInstance :: ImportInstanceResponse -> TestTree
-responseImportInstance = res
-    "ImportInstanceResponse"
-    "fixture/ImportInstanceResponse.proto"
-    ec2
-    (Proxy :: Proxy ImportInstance)
-
-responseRevokeSecurityGroupEgress :: RevokeSecurityGroupEgressResponse -> TestTree
-responseRevokeSecurityGroupEgress = res
-    "RevokeSecurityGroupEgressResponse"
-    "fixture/RevokeSecurityGroupEgressResponse.proto"
-    ec2
-    (Proxy :: Proxy RevokeSecurityGroupEgress)
-
-responseCreateVPNGateway :: CreateVPNGatewayResponse -> TestTree
-responseCreateVPNGateway = res
-    "CreateVPNGatewayResponse"
-    "fixture/CreateVPNGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVPNGateway)
-
-responseCreateNetworkACL :: CreateNetworkACLResponse -> TestTree
-responseCreateNetworkACL = res
-    "CreateNetworkACLResponse"
-    "fixture/CreateNetworkACLResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateNetworkACL)
-
-responseDeleteKeyPair :: DeleteKeyPairResponse -> TestTree
-responseDeleteKeyPair = res
-    "DeleteKeyPairResponse"
-    "fixture/DeleteKeyPairResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteKeyPair)
-
-responseDescribeSecurityGroupReferences :: DescribeSecurityGroupReferencesResponse -> TestTree
-responseDescribeSecurityGroupReferences = res
-    "DescribeSecurityGroupReferencesResponse"
-    "fixture/DescribeSecurityGroupReferencesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSecurityGroupReferences)
-
-responseDescribeTags :: DescribeTagsResponse -> TestTree
-responseDescribeTags = res
-    "DescribeTagsResponse"
-    "fixture/DescribeTagsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeTags)
-
-responseDisassociateSubnetCidrBlock :: DisassociateSubnetCidrBlockResponse -> TestTree
-responseDisassociateSubnetCidrBlock = res
-    "DisassociateSubnetCidrBlockResponse"
-    "fixture/DisassociateSubnetCidrBlockResponse.proto"
-    ec2
-    (Proxy :: Proxy DisassociateSubnetCidrBlock)
-
-responseDetachNetworkInterface :: DetachNetworkInterfaceResponse -> TestTree
-responseDetachNetworkInterface = res
-    "DetachNetworkInterfaceResponse"
-    "fixture/DetachNetworkInterfaceResponse.proto"
-    ec2
-    (Proxy :: Proxy DetachNetworkInterface)
-
-responseDetachInternetGateway :: DetachInternetGatewayResponse -> TestTree
-responseDetachInternetGateway = res
-    "DetachInternetGatewayResponse"
-    "fixture/DetachInternetGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DetachInternetGateway)
-
-responseDeleteVPCEndpoints :: DeleteVPCEndpointsResponse -> TestTree
-responseDeleteVPCEndpoints = res
-    "DeleteVPCEndpointsResponse"
-    "fixture/DeleteVPCEndpointsResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVPCEndpoints)
-
-responseDeleteFlowLogs :: DeleteFlowLogsResponse -> TestTree
-responseDeleteFlowLogs = res
-    "DeleteFlowLogsResponse"
-    "fixture/DeleteFlowLogsResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteFlowLogs)
-
-responseDescribeVPCClassicLink :: DescribeVPCClassicLinkResponse -> TestTree
-responseDescribeVPCClassicLink = res
-    "DescribeVPCClassicLinkResponse"
-    "fixture/DescribeVPCClassicLinkResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCClassicLink)
-
-responseModifySubnetAttribute :: ModifySubnetAttributeResponse -> TestTree
-responseModifySubnetAttribute = res
-    "ModifySubnetAttributeResponse"
-    "fixture/ModifySubnetAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifySubnetAttribute)
-
-responseDetachVolume :: VolumeAttachment -> TestTree
-responseDetachVolume = res
-    "DetachVolumeResponse"
-    "fixture/DetachVolumeResponse.proto"
-    ec2
-    (Proxy :: Proxy DetachVolume)
-
-responseCancelBundleTask :: CancelBundleTaskResponse -> TestTree
-responseCancelBundleTask = res
-    "CancelBundleTaskResponse"
-    "fixture/CancelBundleTaskResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelBundleTask)
-
-responseAcceptReservedInstancesExchangeQuote :: AcceptReservedInstancesExchangeQuoteResponse -> TestTree
-responseAcceptReservedInstancesExchangeQuote = res
-    "AcceptReservedInstancesExchangeQuoteResponse"
-    "fixture/AcceptReservedInstancesExchangeQuoteResponse.proto"
-    ec2
-    (Proxy :: Proxy AcceptReservedInstancesExchangeQuote)
-
-responseReleaseAddress :: ReleaseAddressResponse -> TestTree
-responseReleaseAddress = res
-    "ReleaseAddressResponse"
-    "fixture/ReleaseAddressResponse.proto"
-    ec2
-    (Proxy :: Proxy ReleaseAddress)
-
-responseCreateInternetGateway :: CreateInternetGatewayResponse -> TestTree
-responseCreateInternetGateway = res
-    "CreateInternetGatewayResponse"
-    "fixture/CreateInternetGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateInternetGateway)
-
-responseDeleteVPNConnection :: DeleteVPNConnectionResponse -> TestTree
-responseDeleteVPNConnection = res
-    "DeleteVPNConnectionResponse"
-    "fixture/DeleteVPNConnectionResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVPNConnection)
-
-responseDescribeBundleTasks :: DescribeBundleTasksResponse -> TestTree
-responseDescribeBundleTasks = res
-    "DescribeBundleTasksResponse"
-    "fixture/DescribeBundleTasksResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeBundleTasks)
-
-responseAuthorizeSecurityGroupEgress :: AuthorizeSecurityGroupEgressResponse -> TestTree
-responseAuthorizeSecurityGroupEgress = res
-    "AuthorizeSecurityGroupEgressResponse"
-    "fixture/AuthorizeSecurityGroupEgressResponse.proto"
-    ec2
-    (Proxy :: Proxy AuthorizeSecurityGroupEgress)
-
-responseDeregisterImage :: DeregisterImageResponse -> TestTree
-responseDeregisterImage = res
-    "DeregisterImageResponse"
-    "fixture/DeregisterImageResponse.proto"
-    ec2
-    (Proxy :: Proxy DeregisterImage)
-
-responseModifyNetworkInterfaceAttribute :: ModifyNetworkInterfaceAttributeResponse -> TestTree
-responseModifyNetworkInterfaceAttribute = res
-    "ModifyNetworkInterfaceAttributeResponse"
-    "fixture/ModifyNetworkInterfaceAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyNetworkInterfaceAttribute)
-
-responseCancelReservedInstancesListing :: CancelReservedInstancesListingResponse -> TestTree
-responseCancelReservedInstancesListing = res
-    "CancelReservedInstancesListingResponse"
-    "fixture/CancelReservedInstancesListingResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelReservedInstancesListing)
-
-responseAttachClassicLinkVPC :: AttachClassicLinkVPCResponse -> TestTree
-responseAttachClassicLinkVPC = res
-    "AttachClassicLinkVPCResponse"
-    "fixture/AttachClassicLinkVPCResponse.proto"
-    ec2
-    (Proxy :: Proxy AttachClassicLinkVPC)
-
-responseDescribeVPCClassicLinkDNSSupport :: DescribeVPCClassicLinkDNSSupportResponse -> TestTree
-responseDescribeVPCClassicLinkDNSSupport = res
-    "DescribeVPCClassicLinkDNSSupportResponse"
-    "fixture/DescribeVPCClassicLinkDNSSupportResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCClassicLinkDNSSupport)
-
-responseAssociateSubnetCidrBlock :: AssociateSubnetCidrBlockResponse -> TestTree
-responseAssociateSubnetCidrBlock = res
-    "AssociateSubnetCidrBlockResponse"
-    "fixture/AssociateSubnetCidrBlockResponse.proto"
-    ec2
-    (Proxy :: Proxy AssociateSubnetCidrBlock)
-
-responseRunScheduledInstances :: RunScheduledInstancesResponse -> TestTree
-responseRunScheduledInstances = res
-    "RunScheduledInstancesResponse"
-    "fixture/RunScheduledInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy RunScheduledInstances)
-
-responseCancelSpotFleetRequests :: CancelSpotFleetRequestsResponse -> TestTree
-responseCancelSpotFleetRequests = res
-    "CancelSpotFleetRequestsResponse"
-    "fixture/CancelSpotFleetRequestsResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelSpotFleetRequests)
-
-responseDescribeSpotPriceHistory :: DescribeSpotPriceHistoryResponse -> TestTree
-responseDescribeSpotPriceHistory = res
-    "DescribeSpotPriceHistoryResponse"
-    "fixture/DescribeSpotPriceHistoryResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSpotPriceHistory)
-
-responseDescribeDHCPOptions :: DescribeDHCPOptionsResponse -> TestTree
-responseDescribeDHCPOptions = res
-    "DescribeDHCPOptionsResponse"
-    "fixture/DescribeDHCPOptionsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeDHCPOptions)
-
-responseImportImage :: ImportImageResponse -> TestTree
-responseImportImage = res
-    "ImportImageResponse"
-    "fixture/ImportImageResponse.proto"
-    ec2
-    (Proxy :: Proxy ImportImage)
-
-responseStopInstances :: StopInstancesResponse -> TestTree
-responseStopInstances = res
-    "StopInstancesResponse"
-    "fixture/StopInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy StopInstances)
-
-responseDescribeInternetGateways :: DescribeInternetGatewaysResponse -> TestTree
-responseDescribeInternetGateways = res
-    "DescribeInternetGatewaysResponse"
-    "fixture/DescribeInternetGatewaysResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeInternetGateways)
-
-responseDisableVPCClassicLink :: DisableVPCClassicLinkResponse -> TestTree
-responseDisableVPCClassicLink = res
-    "DisableVPCClassicLinkResponse"
-    "fixture/DisableVPCClassicLinkResponse.proto"
-    ec2
-    (Proxy :: Proxy DisableVPCClassicLink)
-
-responseBundleInstance :: BundleInstanceResponse -> TestTree
-responseBundleInstance = res
-    "BundleInstanceResponse"
-    "fixture/BundleInstanceResponse.proto"
-    ec2
-    (Proxy :: Proxy BundleInstance)
-
-responseDescribeNetworkInterfaces :: DescribeNetworkInterfacesResponse -> TestTree
-responseDescribeNetworkInterfaces = res
-    "DescribeNetworkInterfacesResponse"
-    "fixture/DescribeNetworkInterfacesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeNetworkInterfaces)
-
-responseReplaceNetworkACLAssociation :: ReplaceNetworkACLAssociationResponse -> TestTree
-responseReplaceNetworkACLAssociation = res
-    "ReplaceNetworkACLAssociationResponse"
-    "fixture/ReplaceNetworkACLAssociationResponse.proto"
-    ec2
-    (Proxy :: Proxy ReplaceNetworkACLAssociation)
-
-responseDescribeNatGateways :: DescribeNatGatewaysResponse -> TestTree
-responseDescribeNatGateways = res
-    "DescribeNatGatewaysResponse"
-    "fixture/DescribeNatGatewaysResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeNatGateways)
-
-responseDescribeAddresses :: DescribeAddressesResponse -> TestTree
-responseDescribeAddresses = res
-    "DescribeAddressesResponse"
-    "fixture/DescribeAddressesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeAddresses)
-
-responseDescribeSnapshotAttribute :: DescribeSnapshotAttributeResponse -> TestTree
-responseDescribeSnapshotAttribute = res
-    "DescribeSnapshotAttributeResponse"
-    "fixture/DescribeSnapshotAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSnapshotAttribute)
-
-responseDescribeIdentityIdFormat :: DescribeIdentityIdFormatResponse -> TestTree
-responseDescribeIdentityIdFormat = res
-    "DescribeIdentityIdFormatResponse"
-    "fixture/DescribeIdentityIdFormatResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeIdentityIdFormat)
-
-responseReplaceRoute :: ReplaceRouteResponse -> TestTree
-responseReplaceRoute = res
-    "ReplaceRouteResponse"
-    "fixture/ReplaceRouteResponse.proto"
-    ec2
-    (Proxy :: Proxy ReplaceRoute)
-
-responseDescribeVPCEndpointServices :: DescribeVPCEndpointServicesResponse -> TestTree
-responseDescribeVPCEndpointServices = res
-    "DescribeVPCEndpointServicesResponse"
-    "fixture/DescribeVPCEndpointServicesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCEndpointServices)
-
-responseAuthorizeSecurityGroupIngress :: AuthorizeSecurityGroupIngressResponse -> TestTree
-responseAuthorizeSecurityGroupIngress = res
-    "AuthorizeSecurityGroupIngressResponse"
-    "fixture/AuthorizeSecurityGroupIngressResponse.proto"
-    ec2
-    (Proxy :: Proxy AuthorizeSecurityGroupIngress)
-
-responseCreateVPCPeeringConnection :: CreateVPCPeeringConnectionResponse -> TestTree
-responseCreateVPCPeeringConnection = res
-    "CreateVPCPeeringConnectionResponse"
-    "fixture/CreateVPCPeeringConnectionResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVPCPeeringConnection)
-
-responseDescribeSubnets :: DescribeSubnetsResponse -> TestTree
-responseDescribeSubnets = res
-    "DescribeSubnetsResponse"
-    "fixture/DescribeSubnetsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSubnets)
-
-responseCreateTags :: CreateTagsResponse -> TestTree
-responseCreateTags = res
-    "CreateTagsResponse"
-    "fixture/CreateTagsResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateTags)
-
-responsePurchaseReservedInstancesOffering :: PurchaseReservedInstancesOfferingResponse -> TestTree
-responsePurchaseReservedInstancesOffering = res
-    "PurchaseReservedInstancesOfferingResponse"
-    "fixture/PurchaseReservedInstancesOfferingResponse.proto"
-    ec2
-    (Proxy :: Proxy PurchaseReservedInstancesOffering)
-
-responseDeleteNetworkACLEntry :: DeleteNetworkACLEntryResponse -> TestTree
-responseDeleteNetworkACLEntry = res
-    "DeleteNetworkACLEntryResponse"
-    "fixture/DeleteNetworkACLEntryResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteNetworkACLEntry)
-
-responseResetSnapshotAttribute :: ResetSnapshotAttributeResponse -> TestTree
-responseResetSnapshotAttribute = res
-    "ResetSnapshotAttributeResponse"
-    "fixture/ResetSnapshotAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ResetSnapshotAttribute)
-
-responseDescribeVPNConnections :: DescribeVPNConnectionsResponse -> TestTree
-responseDescribeVPNConnections = res
-    "DescribeVPNConnectionsResponse"
-    "fixture/DescribeVPNConnectionsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPNConnections)
-
-responseDeleteRoute :: DeleteRouteResponse -> TestTree
-responseDeleteRoute = res
-    "DeleteRouteResponse"
-    "fixture/DeleteRouteResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteRoute)
-
-responseReplaceNetworkACLEntry :: ReplaceNetworkACLEntryResponse -> TestTree
-responseReplaceNetworkACLEntry = res
-    "ReplaceNetworkACLEntryResponse"
-    "fixture/ReplaceNetworkACLEntryResponse.proto"
-    ec2
-    (Proxy :: Proxy ReplaceNetworkACLEntry)
-
-responseDescribeVPCEndpoints :: DescribeVPCEndpointsResponse -> TestTree
-responseDescribeVPCEndpoints = res
-    "DescribeVPCEndpointsResponse"
-    "fixture/DescribeVPCEndpointsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCEndpoints)
-
-responseResetInstanceAttribute :: ResetInstanceAttributeResponse -> TestTree
-responseResetInstanceAttribute = res
-    "ResetInstanceAttributeResponse"
-    "fixture/ResetInstanceAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ResetInstanceAttribute)
-
-responseModifyIdentityIdFormat :: ModifyIdentityIdFormatResponse -> TestTree
-responseModifyIdentityIdFormat = res
-    "ModifyIdentityIdFormatResponse"
-    "fixture/ModifyIdentityIdFormatResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyIdentityIdFormat)
-
-responseAttachNetworkInterface :: AttachNetworkInterfaceResponse -> TestTree
-responseAttachNetworkInterface = res
-    "AttachNetworkInterfaceResponse"
-    "fixture/AttachNetworkInterfaceResponse.proto"
-    ec2
-    (Proxy :: Proxy AttachNetworkInterface)
-
-responseDescribeInstanceStatus :: DescribeInstanceStatusResponse -> TestTree
-responseDescribeInstanceStatus = res
-    "DescribeInstanceStatusResponse"
-    "fixture/DescribeInstanceStatusResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeInstanceStatus)
-
-responseImportKeyPair :: ImportKeyPairResponse -> TestTree
-responseImportKeyPair = res
-    "ImportKeyPairResponse"
-    "fixture/ImportKeyPairResponse.proto"
-    ec2
-    (Proxy :: Proxy ImportKeyPair)
-
-responseDeleteTags :: DeleteTagsResponse -> TestTree
-responseDeleteTags = res
-    "DeleteTagsResponse"
-    "fixture/DeleteTagsResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteTags)
-
-responseConfirmProductInstance :: ConfirmProductInstanceResponse -> TestTree
-responseConfirmProductInstance = res
-    "ConfirmProductInstanceResponse"
-    "fixture/ConfirmProductInstanceResponse.proto"
-    ec2
-    (Proxy :: Proxy ConfirmProductInstance)
-
-responseDescribeInstanceAttribute :: DescribeInstanceAttributeResponse -> TestTree
-responseDescribeInstanceAttribute = res
-    "DescribeInstanceAttributeResponse"
-    "fixture/DescribeInstanceAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeInstanceAttribute)
-
-responseDescribeReservedInstancesOfferings :: DescribeReservedInstancesOfferingsResponse -> TestTree
-responseDescribeReservedInstancesOfferings = res
-    "DescribeReservedInstancesOfferingsResponse"
-    "fixture/DescribeReservedInstancesOfferingsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeReservedInstancesOfferings)
-
-responseCreateCustomerGateway :: CreateCustomerGatewayResponse -> TestTree
-responseCreateCustomerGateway = res
-    "CreateCustomerGatewayResponse"
-    "fixture/CreateCustomerGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateCustomerGateway)
-
-responseDeleteSecurityGroup :: DeleteSecurityGroupResponse -> TestTree
-responseDeleteSecurityGroup = res
-    "DeleteSecurityGroupResponse"
-    "fixture/DeleteSecurityGroupResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteSecurityGroup)
-
-responseDeleteVPCPeeringConnection :: DeleteVPCPeeringConnectionResponse -> TestTree
-responseDeleteVPCPeeringConnection = res
-    "DeleteVPCPeeringConnectionResponse"
-    "fixture/DeleteVPCPeeringConnectionResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVPCPeeringConnection)
-
-responseAttachInternetGateway :: AttachInternetGatewayResponse -> TestTree
-responseAttachInternetGateway = res
-    "AttachInternetGatewayResponse"
-    "fixture/AttachInternetGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy AttachInternetGateway)
-
-responseModifyInstancePlacement :: ModifyInstancePlacementResponse -> TestTree
-responseModifyInstancePlacement = res
-    "ModifyInstancePlacementResponse"
-    "fixture/ModifyInstancePlacementResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyInstancePlacement)
-
-responseDescribeFlowLogs :: DescribeFlowLogsResponse -> TestTree
-responseDescribeFlowLogs = res
-    "DescribeFlowLogsResponse"
-    "fixture/DescribeFlowLogsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeFlowLogs)
-
-responseRunInstances :: Reservation -> TestTree
-responseRunInstances = res
-    "RunInstancesResponse"
-    "fixture/RunInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy RunInstances)
-
-responseAssociateDHCPOptions :: AssociateDHCPOptionsResponse -> TestTree
-responseAssociateDHCPOptions = res
-    "AssociateDHCPOptionsResponse"
-    "fixture/AssociateDHCPOptionsResponse.proto"
-    ec2
-    (Proxy :: Proxy AssociateDHCPOptions)
-
-responseDescribeReservedInstances :: DescribeReservedInstancesResponse -> TestTree
-responseDescribeReservedInstances = res
-    "DescribeReservedInstancesResponse"
-    "fixture/DescribeReservedInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeReservedInstances)
-
-responseDescribeIdFormat :: DescribeIdFormatResponse -> TestTree
-responseDescribeIdFormat = res
-    "DescribeIdFormatResponse"
-    "fixture/DescribeIdFormatResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeIdFormat)
-
-responseDescribeVPCs :: DescribeVPCsResponse -> TestTree
-responseDescribeVPCs = res
-    "DescribeVPCsResponse"
-    "fixture/DescribeVPCsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCs)
-
-responseDescribeConversionTasks :: DescribeConversionTasksResponse -> TestTree
-responseDescribeConversionTasks = res
-    "DescribeConversionTasksResponse"
-    "fixture/DescribeConversionTasksResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeConversionTasks)
-
-responseDisableVPCClassicLinkDNSSupport :: DisableVPCClassicLinkDNSSupportResponse -> TestTree
-responseDisableVPCClassicLinkDNSSupport = res
-    "DisableVPCClassicLinkDNSSupportResponse"
-    "fixture/DisableVPCClassicLinkDNSSupportResponse.proto"
-    ec2
-    (Proxy :: Proxy DisableVPCClassicLinkDNSSupport)
-
-responseAllocateAddress :: AllocateAddressResponse -> TestTree
-responseAllocateAddress = res
-    "AllocateAddressResponse"
-    "fixture/AllocateAddressResponse.proto"
-    ec2
-    (Proxy :: Proxy AllocateAddress)
-
-responseCancelConversionTask :: CancelConversionTaskResponse -> TestTree
-responseCancelConversionTask = res
-    "CancelConversionTaskResponse"
-    "fixture/CancelConversionTaskResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelConversionTask)
-
-responseModifyImageAttribute :: ModifyImageAttributeResponse -> TestTree
-responseModifyImageAttribute = res
-    "ModifyImageAttributeResponse"
-    "fixture/ModifyImageAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyImageAttribute)
-
-responseCreateRouteTable :: CreateRouteTableResponse -> TestTree
-responseCreateRouteTable = res
-    "CreateRouteTableResponse"
-    "fixture/CreateRouteTableResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateRouteTable)
-
-responseReportInstanceStatus :: ReportInstanceStatusResponse -> TestTree
-responseReportInstanceStatus = res
-    "ReportInstanceStatusResponse"
-    "fixture/ReportInstanceStatusResponse.proto"
-    ec2
-    (Proxy :: Proxy ReportInstanceStatus)
-
-responseAttachVolume :: VolumeAttachment -> TestTree
-responseAttachVolume = res
-    "AttachVolumeResponse"
-    "fixture/AttachVolumeResponse.proto"
-    ec2
-    (Proxy :: Proxy AttachVolume)
-
-responseRequestSpotInstances :: RequestSpotInstancesResponse -> TestTree
-responseRequestSpotInstances = res
-    "RequestSpotInstancesResponse"
-    "fixture/RequestSpotInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy RequestSpotInstances)
-
-responseDescribeHostReservationOfferings :: DescribeHostReservationOfferingsResponse -> TestTree
-responseDescribeHostReservationOfferings = res
-    "DescribeHostReservationOfferingsResponse"
-    "fixture/DescribeHostReservationOfferingsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeHostReservationOfferings)
-
-responseDescribeVolumes :: DescribeVolumesResponse -> TestTree
-responseDescribeVolumes = res
-    "DescribeVolumesResponse"
-    "fixture/DescribeVolumesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVolumes)
-
-responseRejectVPCPeeringConnection :: RejectVPCPeeringConnectionResponse -> TestTree
-responseRejectVPCPeeringConnection = res
-    "RejectVPCPeeringConnectionResponse"
-    "fixture/RejectVPCPeeringConnectionResponse.proto"
-    ec2
-    (Proxy :: Proxy RejectVPCPeeringConnection)
-
-responseDeleteVPNConnectionRoute :: DeleteVPNConnectionRouteResponse -> TestTree
-responseDeleteVPNConnectionRoute = res
-    "DeleteVPNConnectionRouteResponse"
-    "fixture/DeleteVPNConnectionRouteResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVPNConnectionRoute)
-
-responseModifyVPCEndpoint :: ModifyVPCEndpointResponse -> TestTree
-responseModifyVPCEndpoint = res
-    "ModifyVPCEndpointResponse"
-    "fixture/ModifyVPCEndpointResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyVPCEndpoint)
-
-responseAllocateHosts :: AllocateHostsResponse -> TestTree
-responseAllocateHosts = res
-    "AllocateHostsResponse"
-    "fixture/AllocateHostsResponse.proto"
-    ec2
-    (Proxy :: Proxy AllocateHosts)
-
-responseRegisterImage :: RegisterImageResponse -> TestTree
-responseRegisterImage = res
-    "RegisterImageResponse"
-    "fixture/RegisterImageResponse.proto"
-    ec2
-    (Proxy :: Proxy RegisterImage)
-
-responseRevokeSecurityGroupIngress :: RevokeSecurityGroupIngressResponse -> TestTree
-responseRevokeSecurityGroupIngress = res
-    "RevokeSecurityGroupIngressResponse"
-    "fixture/RevokeSecurityGroupIngressResponse.proto"
-    ec2
-    (Proxy :: Proxy RevokeSecurityGroupIngress)
-
-responseDescribeHostReservations :: DescribeHostReservationsResponse -> TestTree
-responseDescribeHostReservations = res
-    "DescribeHostReservationsResponse"
-    "fixture/DescribeHostReservationsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeHostReservations)
-
-responseEnableVPCClassicLinkDNSSupport :: EnableVPCClassicLinkDNSSupportResponse -> TestTree
-responseEnableVPCClassicLinkDNSSupport = res
-    "EnableVPCClassicLinkDNSSupportResponse"
-    "fixture/EnableVPCClassicLinkDNSSupportResponse.proto"
-    ec2
-    (Proxy :: Proxy EnableVPCClassicLinkDNSSupport)
-
-responseModifyReservedInstances :: ModifyReservedInstancesResponse -> TestTree
-responseModifyReservedInstances = res
-    "ModifyReservedInstancesResponse"
-    "fixture/ModifyReservedInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyReservedInstances)
-
-responseDescribeScheduledInstances :: DescribeScheduledInstancesResponse -> TestTree
-responseDescribeScheduledInstances = res
-    "DescribeScheduledInstancesResponse"
-    "fixture/DescribeScheduledInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeScheduledInstances)
-
-responseCreateFlowLogs :: CreateFlowLogsResponse -> TestTree
-responseCreateFlowLogs = res
-    "CreateFlowLogsResponse"
-    "fixture/CreateFlowLogsResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateFlowLogs)
-
-responseDescribeSpotFleetRequests :: DescribeSpotFleetRequestsResponse -> TestTree
-responseDescribeSpotFleetRequests = res
-    "DescribeSpotFleetRequestsResponse"
-    "fixture/DescribeSpotFleetRequestsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSpotFleetRequests)
-
-responseMoveAddressToVPC :: MoveAddressToVPCResponse -> TestTree
-responseMoveAddressToVPC = res
-    "MoveAddressToVPCResponse"
-    "fixture/MoveAddressToVPCResponse.proto"
-    ec2
-    (Proxy :: Proxy MoveAddressToVPC)
-
-responseDeleteNetworkACL :: DeleteNetworkACLResponse -> TestTree
-responseDeleteNetworkACL = res
-    "DeleteNetworkACLResponse"
-    "fixture/DeleteNetworkACLResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteNetworkACL)
-
-responseDeleteVPNGateway :: DeleteVPNGatewayResponse -> TestTree
-responseDeleteVPNGateway = res
-    "DeleteVPNGatewayResponse"
-    "fixture/DeleteVPNGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVPNGateway)
-
-responseDescribeImportImageTasks :: DescribeImportImageTasksResponse -> TestTree
-responseDescribeImportImageTasks = res
-    "DescribeImportImageTasksResponse"
-    "fixture/DescribeImportImageTasksResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeImportImageTasks)
-
-responseDescribeVolumeAttribute :: DescribeVolumeAttributeResponse -> TestTree
-responseDescribeVolumeAttribute = res
-    "DescribeVolumeAttributeResponse"
-    "fixture/DescribeVolumeAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVolumeAttribute)
-
-responseDescribeMovingAddresses :: DescribeMovingAddressesResponse -> TestTree
-responseDescribeMovingAddresses = res
-    "DescribeMovingAddressesResponse"
-    "fixture/DescribeMovingAddressesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeMovingAddresses)
-
-responseGetPasswordData :: GetPasswordDataResponse -> TestTree
-responseGetPasswordData = res
-    "GetPasswordDataResponse"
-    "fixture/GetPasswordDataResponse.proto"
-    ec2
-    (Proxy :: Proxy GetPasswordData)
-
-responseCreateVPC :: CreateVPCResponse -> TestTree
-responseCreateVPC = res
-    "CreateVPCResponse"
-    "fixture/CreateVPCResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVPC)
-
-responseModifyVPCPeeringConnectionOptions :: ModifyVPCPeeringConnectionOptionsResponse -> TestTree
-responseModifyVPCPeeringConnectionOptions = res
-    "ModifyVPCPeeringConnectionOptionsResponse"
-    "fixture/ModifyVPCPeeringConnectionOptionsResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyVPCPeeringConnectionOptions)
-
-responseCopySnapshot :: CopySnapshotResponse -> TestTree
-responseCopySnapshot = res
-    "CopySnapshotResponse"
-    "fixture/CopySnapshotResponse.proto"
-    ec2
-    (Proxy :: Proxy CopySnapshot)
-
-responseDisassociateAddress :: DisassociateAddressResponse -> TestTree
-responseDisassociateAddress = res
-    "DisassociateAddressResponse"
-    "fixture/DisassociateAddressResponse.proto"
-    ec2
-    (Proxy :: Proxy DisassociateAddress)
-
-responseDescribeEgressOnlyInternetGateways :: DescribeEgressOnlyInternetGatewaysResponse -> TestTree
-responseDescribeEgressOnlyInternetGateways = res
-    "DescribeEgressOnlyInternetGatewaysResponse"
-    "fixture/DescribeEgressOnlyInternetGatewaysResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeEgressOnlyInternetGateways)
-
-responseDeleteVPC :: DeleteVPCResponse -> TestTree
-responseDeleteVPC = res
-    "DeleteVPCResponse"
-    "fixture/DeleteVPCResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVPC)
-
-responseCreateInstanceExportTask :: CreateInstanceExportTaskResponse -> TestTree
-responseCreateInstanceExportTask = res
-    "CreateInstanceExportTaskResponse"
-    "fixture/CreateInstanceExportTaskResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateInstanceExportTask)
-
-responseAssociateVPCCidrBlock :: AssociateVPCCidrBlockResponse -> TestTree
-responseAssociateVPCCidrBlock = res
-    "AssociateVPCCidrBlockResponse"
-    "fixture/AssociateVPCCidrBlockResponse.proto"
-    ec2
-    (Proxy :: Proxy AssociateVPCCidrBlock)
-
-responseDescribeVPCAttribute :: DescribeVPCAttributeResponse -> TestTree
-responseDescribeVPCAttribute = res
-    "DescribeVPCAttributeResponse"
-    "fixture/DescribeVPCAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCAttribute)
-
-responseCreateVolume :: Volume -> TestTree
-responseCreateVolume = res
-    "CreateVolumeResponse"
-    "fixture/CreateVolumeResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVolume)
-
-responseDescribeScheduledInstanceAvailability :: DescribeScheduledInstanceAvailabilityResponse -> TestTree
-responseDescribeScheduledInstanceAvailability = res
-    "DescribeScheduledInstanceAvailabilityResponse"
-    "fixture/DescribeScheduledInstanceAvailabilityResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeScheduledInstanceAvailability)
-
-responseModifyVolumeAttribute :: ModifyVolumeAttributeResponse -> TestTree
-responseModifyVolumeAttribute = res
-    "ModifyVolumeAttributeResponse"
-    "fixture/ModifyVolumeAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyVolumeAttribute)
-
-responseDescribeSpotDatafeedSubscription :: DescribeSpotDatafeedSubscriptionResponse -> TestTree
-responseDescribeSpotDatafeedSubscription = res
-    "DescribeSpotDatafeedSubscriptionResponse"
-    "fixture/DescribeSpotDatafeedSubscriptionResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSpotDatafeedSubscription)
-
-responseDescribePrefixLists :: DescribePrefixListsResponse -> TestTree
-responseDescribePrefixLists = res
-    "DescribePrefixListsResponse"
-    "fixture/DescribePrefixListsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribePrefixLists)
-
-responseDeletePlacementGroup :: DeletePlacementGroupResponse -> TestTree
-responseDeletePlacementGroup = res
-    "DeletePlacementGroupResponse"
-    "fixture/DeletePlacementGroupResponse.proto"
-    ec2
-    (Proxy :: Proxy DeletePlacementGroup)
-
-responseRequestSpotFleet :: RequestSpotFleetResponse -> TestTree
-responseRequestSpotFleet = res
-    "RequestSpotFleetResponse"
-    "fixture/RequestSpotFleetResponse.proto"
-    ec2
-    (Proxy :: Proxy RequestSpotFleet)
-
-responseCreateSubnet :: CreateSubnetResponse -> TestTree
-responseCreateSubnet = res
-    "CreateSubnetResponse"
-    "fixture/CreateSubnetResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateSubnet)
-
-responseCreateNetworkInterface :: CreateNetworkInterfaceResponse -> TestTree
-responseCreateNetworkInterface = res
-    "CreateNetworkInterfaceResponse"
-    "fixture/CreateNetworkInterfaceResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateNetworkInterface)
-
-responseDescribeSecurityGroups :: DescribeSecurityGroupsResponse -> TestTree
-responseDescribeSecurityGroups = res
-    "DescribeSecurityGroupsResponse"
-    "fixture/DescribeSecurityGroupsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSecurityGroups)
-
-responseDescribeExportTasks :: DescribeExportTasksResponse -> TestTree
-responseDescribeExportTasks = res
-    "DescribeExportTasksResponse"
-    "fixture/DescribeExportTasksResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeExportTasks)
-
-responseModifySpotFleetRequest :: ModifySpotFleetRequestResponse -> TestTree
-responseModifySpotFleetRequest = res
-    "ModifySpotFleetRequestResponse"
-    "fixture/ModifySpotFleetRequestResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifySpotFleetRequest)
-
-responseDetachVPNGateway :: DetachVPNGatewayResponse -> TestTree
-responseDetachVPNGateway = res
-    "DetachVPNGatewayResponse"
-    "fixture/DetachVPNGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DetachVPNGateway)
-
-responseGetHostReservationPurchasePreview :: GetHostReservationPurchasePreviewResponse -> TestTree
-responseGetHostReservationPurchasePreview = res
-    "GetHostReservationPurchasePreviewResponse"
-    "fixture/GetHostReservationPurchasePreviewResponse.proto"
-    ec2
-    (Proxy :: Proxy GetHostReservationPurchasePreview)
-
-responseEnableVolumeIO :: EnableVolumeIOResponse -> TestTree
-responseEnableVolumeIO = res
-    "EnableVolumeIOResponse"
-    "fixture/EnableVolumeIOResponse.proto"
-    ec2
-    (Proxy :: Proxy EnableVolumeIO)
-
-responseDescribeInstances :: DescribeInstancesResponse -> TestTree
-responseDescribeInstances = res
-    "DescribeInstancesResponse"
-    "fixture/DescribeInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeInstances)
-
-responseCreateNatGateway :: CreateNatGatewayResponse -> TestTree
-responseCreateNatGateway = res
-    "CreateNatGatewayResponse"
-    "fixture/CreateNatGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateNatGateway)
-
-responseDescribeVPCPeeringConnections :: DescribeVPCPeeringConnectionsResponse -> TestTree
-responseDescribeVPCPeeringConnections = res
-    "DescribeVPCPeeringConnectionsResponse"
-    "fixture/DescribeVPCPeeringConnectionsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPCPeeringConnections)
-
-responseCancelExportTask :: CancelExportTaskResponse -> TestTree
-responseCancelExportTask = res
-    "CancelExportTaskResponse"
-    "fixture/CancelExportTaskResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelExportTask)
-
-responseDisassociateVPCCidrBlock :: DisassociateVPCCidrBlockResponse -> TestTree
-responseDisassociateVPCCidrBlock = res
-    "DisassociateVPCCidrBlockResponse"
-    "fixture/DisassociateVPCCidrBlockResponse.proto"
-    ec2
-    (Proxy :: Proxy DisassociateVPCCidrBlock)
-
-responseDeleteNetworkInterface :: DeleteNetworkInterfaceResponse -> TestTree
-responseDeleteNetworkInterface = res
-    "DeleteNetworkInterfaceResponse"
-    "fixture/DeleteNetworkInterfaceResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteNetworkInterface)
-
-responseReplaceRouteTableAssociation :: ReplaceRouteTableAssociationResponse -> TestTree
-responseReplaceRouteTableAssociation = res
-    "ReplaceRouteTableAssociationResponse"
-    "fixture/ReplaceRouteTableAssociationResponse.proto"
-    ec2
-    (Proxy :: Proxy ReplaceRouteTableAssociation)
-
-responseStartInstances :: StartInstancesResponse -> TestTree
-responseStartInstances = res
-    "StartInstancesResponse"
-    "fixture/StartInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy StartInstances)
-
-responseCreatePlacementGroup :: CreatePlacementGroupResponse -> TestTree
-responseCreatePlacementGroup = res
-    "CreatePlacementGroupResponse"
-    "fixture/CreatePlacementGroupResponse.proto"
-    ec2
-    (Proxy :: Proxy CreatePlacementGroup)
-
-responseDescribeSnapshots :: DescribeSnapshotsResponse -> TestTree
-responseDescribeSnapshots = res
-    "DescribeSnapshotsResponse"
-    "fixture/DescribeSnapshotsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSnapshots)
-
-responseAssociateAddress :: AssociateAddressResponse -> TestTree
-responseAssociateAddress = res
-    "AssociateAddressResponse"
-    "fixture/AssociateAddressResponse.proto"
-    ec2
-    (Proxy :: Proxy AssociateAddress)
-
-responseDescribeNetworkInterfaceAttribute :: DescribeNetworkInterfaceAttributeResponse -> TestTree
-responseDescribeNetworkInterfaceAttribute = res
-    "DescribeNetworkInterfaceAttributeResponse"
-    "fixture/DescribeNetworkInterfaceAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeNetworkInterfaceAttribute)
-
-responseReleaseHosts :: ReleaseHostsResponse -> TestTree
-responseReleaseHosts = res
-    "ReleaseHostsResponse"
-    "fixture/ReleaseHostsResponse.proto"
-    ec2
-    (Proxy :: Proxy ReleaseHosts)
-
-responseResetNetworkInterfaceAttribute :: ResetNetworkInterfaceAttributeResponse -> TestTree
-responseResetNetworkInterfaceAttribute = res
-    "ResetNetworkInterfaceAttributeResponse"
-    "fixture/ResetNetworkInterfaceAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ResetNetworkInterfaceAttribute)
-
-responseDeleteInternetGateway :: DeleteInternetGatewayResponse -> TestTree
-responseDeleteInternetGateway = res
-    "DeleteInternetGatewayResponse"
-    "fixture/DeleteInternetGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteInternetGateway)
-
-responseDescribeReservedInstancesListings :: DescribeReservedInstancesListingsResponse -> TestTree
-responseDescribeReservedInstancesListings = res
-    "DescribeReservedInstancesListingsResponse"
-    "fixture/DescribeReservedInstancesListingsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeReservedInstancesListings)
-
-responseCreateVPNConnection :: CreateVPNConnectionResponse -> TestTree
-responseCreateVPNConnection = res
-    "CreateVPNConnectionResponse"
-    "fixture/CreateVPNConnectionResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVPNConnection)
-
-responseDeleteNatGateway :: DeleteNatGatewayResponse -> TestTree
-responseDeleteNatGateway = res
-    "DeleteNatGatewayResponse"
-    "fixture/DeleteNatGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteNatGateway)
-
-responseDescribeImportSnapshotTasks :: DescribeImportSnapshotTasksResponse -> TestTree
-responseDescribeImportSnapshotTasks = res
-    "DescribeImportSnapshotTasksResponse"
-    "fixture/DescribeImportSnapshotTasksResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeImportSnapshotTasks)
-
-responseDescribeCustomerGateways :: DescribeCustomerGatewaysResponse -> TestTree
-responseDescribeCustomerGateways = res
-    "DescribeCustomerGatewaysResponse"
-    "fixture/DescribeCustomerGatewaysResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeCustomerGateways)
-
-responseDeleteSubnet :: DeleteSubnetResponse -> TestTree
-responseDeleteSubnet = res
-    "DeleteSubnetResponse"
-    "fixture/DeleteSubnetResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteSubnet)
-
-responseCopyImage :: CopyImageResponse -> TestTree
-responseCopyImage = res
-    "CopyImageResponse"
-    "fixture/CopyImageResponse.proto"
-    ec2
-    (Proxy :: Proxy CopyImage)
-
-responseCreateVPCEndpoint :: CreateVPCEndpointResponse -> TestTree
-responseCreateVPCEndpoint = res
-    "CreateVPCEndpointResponse"
-    "fixture/CreateVPCEndpointResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVPCEndpoint)
-
-responseUnmonitorInstances :: UnmonitorInstancesResponse -> TestTree
-responseUnmonitorInstances = res
-    "UnmonitorInstancesResponse"
-    "fixture/UnmonitorInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy UnmonitorInstances)
-
-responseCreateSecurityGroup :: CreateSecurityGroupResponse -> TestTree
-responseCreateSecurityGroup = res
-    "CreateSecurityGroupResponse"
-    "fixture/CreateSecurityGroupResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateSecurityGroup)
-
-responseImportVolume :: ImportVolumeResponse -> TestTree
-responseImportVolume = res
-    "ImportVolumeResponse"
-    "fixture/ImportVolumeResponse.proto"
-    ec2
-    (Proxy :: Proxy ImportVolume)
-
-responseDisableVGWRoutePropagation :: DisableVGWRoutePropagationResponse -> TestTree
-responseDisableVGWRoutePropagation = res
-    "DisableVGWRoutePropagationResponse"
-    "fixture/DisableVGWRoutePropagationResponse.proto"
-    ec2
-    (Proxy :: Proxy DisableVGWRoutePropagation)
-
-responseCreateSpotDatafeedSubscription :: CreateSpotDatafeedSubscriptionResponse -> TestTree
-responseCreateSpotDatafeedSubscription = res
-    "CreateSpotDatafeedSubscriptionResponse"
-    "fixture/CreateSpotDatafeedSubscriptionResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateSpotDatafeedSubscription)
-
-responseCancelSpotInstanceRequests :: CancelSpotInstanceRequestsResponse -> TestTree
-responseCancelSpotInstanceRequests = res
-    "CancelSpotInstanceRequestsResponse"
-    "fixture/CancelSpotInstanceRequestsResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelSpotInstanceRequests)
-
-responseCreateRoute :: CreateRouteResponse -> TestTree
-responseCreateRoute = res
-    "CreateRouteResponse"
-    "fixture/CreateRouteResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateRoute)
-
-responseDeleteSnapshot :: DeleteSnapshotResponse -> TestTree
-responseDeleteSnapshot = res
-    "DeleteSnapshotResponse"
-    "fixture/DeleteSnapshotResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteSnapshot)
-
-responseAssignPrivateIPAddresses :: AssignPrivateIPAddressesResponse -> TestTree
-responseAssignPrivateIPAddresses = res
-    "AssignPrivateIPAddressesResponse"
-    "fixture/AssignPrivateIPAddressesResponse.proto"
-    ec2
-    (Proxy :: Proxy AssignPrivateIPAddresses)
-
-responseModifyInstanceAttribute :: ModifyInstanceAttributeResponse -> TestTree
-responseModifyInstanceAttribute = res
-    "ModifyInstanceAttributeResponse"
-    "fixture/ModifyInstanceAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyInstanceAttribute)
-
-responseDeleteCustomerGateway :: DeleteCustomerGatewayResponse -> TestTree
-responseDeleteCustomerGateway = res
-    "DeleteCustomerGatewayResponse"
-    "fixture/DeleteCustomerGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteCustomerGateway)
-
-responseDisassociateRouteTable :: DisassociateRouteTableResponse -> TestTree
-responseDisassociateRouteTable = res
-    "DisassociateRouteTableResponse"
-    "fixture/DisassociateRouteTableResponse.proto"
-    ec2
-    (Proxy :: Proxy DisassociateRouteTable)
-
-responseGetConsoleScreenshot :: GetConsoleScreenshotResponse -> TestTree
-responseGetConsoleScreenshot = res
-    "GetConsoleScreenshotResponse"
-    "fixture/GetConsoleScreenshotResponse.proto"
-    ec2
-    (Proxy :: Proxy GetConsoleScreenshot)
-
-responseAssignIPv6Addresses :: AssignIPv6AddressesResponse -> TestTree
-responseAssignIPv6Addresses = res
-    "AssignIPv6AddressesResponse"
-    "fixture/AssignIPv6AddressesResponse.proto"
-    ec2
-    (Proxy :: Proxy AssignIPv6Addresses)
-
-responseDeleteSpotDatafeedSubscription :: DeleteSpotDatafeedSubscriptionResponse -> TestTree
-responseDeleteSpotDatafeedSubscription = res
-    "DeleteSpotDatafeedSubscriptionResponse"
-    "fixture/DeleteSpotDatafeedSubscriptionResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteSpotDatafeedSubscription)
-
-responseEnableVPCClassicLink :: EnableVPCClassicLinkResponse -> TestTree
-responseEnableVPCClassicLink = res
-    "EnableVPCClassicLinkResponse"
-    "fixture/EnableVPCClassicLinkResponse.proto"
-    ec2
-    (Proxy :: Proxy EnableVPCClassicLink)
-
-responseDescribePlacementGroups :: DescribePlacementGroupsResponse -> TestTree
-responseDescribePlacementGroups = res
-    "DescribePlacementGroupsResponse"
-    "fixture/DescribePlacementGroupsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribePlacementGroups)
-
-responseDescribeStaleSecurityGroups :: DescribeStaleSecurityGroupsResponse -> TestTree
-responseDescribeStaleSecurityGroups = res
-    "DescribeStaleSecurityGroupsResponse"
-    "fixture/DescribeStaleSecurityGroupsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeStaleSecurityGroups)
-
-responsePurchaseScheduledInstances :: PurchaseScheduledInstancesResponse -> TestTree
-responsePurchaseScheduledInstances = res
-    "PurchaseScheduledInstancesResponse"
-    "fixture/PurchaseScheduledInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy PurchaseScheduledInstances)
-
-responseEnableVGWRoutePropagation :: EnableVGWRoutePropagationResponse -> TestTree
-responseEnableVGWRoutePropagation = res
-    "EnableVGWRoutePropagationResponse"
-    "fixture/EnableVGWRoutePropagationResponse.proto"
-    ec2
-    (Proxy :: Proxy EnableVGWRoutePropagation)
-
-responseDescribeSpotFleetRequestHistory :: DescribeSpotFleetRequestHistoryResponse -> TestTree
-responseDescribeSpotFleetRequestHistory = res
-    "DescribeSpotFleetRequestHistoryResponse"
-    "fixture/DescribeSpotFleetRequestHistoryResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSpotFleetRequestHistory)
-
-responseModifySnapshotAttribute :: ModifySnapshotAttributeResponse -> TestTree
-responseModifySnapshotAttribute = res
-    "ModifySnapshotAttributeResponse"
-    "fixture/ModifySnapshotAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifySnapshotAttribute)
-
-responseCreateSnapshot :: Snapshot -> TestTree
-responseCreateSnapshot = res
-    "CreateSnapshotResponse"
-    "fixture/CreateSnapshotResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateSnapshot)
-
-responseCreateNetworkACLEntry :: CreateNetworkACLEntryResponse -> TestTree
-responseCreateNetworkACLEntry = res
-    "CreateNetworkACLEntryResponse"
-    "fixture/CreateNetworkACLEntryResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateNetworkACLEntry)
-
-responseCreateReservedInstancesListing :: CreateReservedInstancesListingResponse -> TestTree
-responseCreateReservedInstancesListing = res
-    "CreateReservedInstancesListingResponse"
-    "fixture/CreateReservedInstancesListingResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateReservedInstancesListing)
-
-responseAttachVPNGateway :: AttachVPNGatewayResponse -> TestTree
-responseAttachVPNGateway = res
-    "AttachVPNGatewayResponse"
-    "fixture/AttachVPNGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy AttachVPNGateway)
-
-responseCreateDHCPOptions :: CreateDHCPOptionsResponse -> TestTree
-responseCreateDHCPOptions = res
-    "CreateDHCPOptionsResponse"
-    "fixture/CreateDHCPOptionsResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateDHCPOptions)
-
-responseDescribeAccountAttributes :: DescribeAccountAttributesResponse -> TestTree
-responseDescribeAccountAttributes = res
-    "DescribeAccountAttributesResponse"
-    "fixture/DescribeAccountAttributesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeAccountAttributes)
-
-responseModifyHosts :: ModifyHostsResponse -> TestTree
-responseModifyHosts = res
-    "ModifyHostsResponse"
-    "fixture/ModifyHostsResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyHosts)
-
-responseRebootInstances :: RebootInstancesResponse -> TestTree
-responseRebootInstances = res
-    "RebootInstancesResponse"
-    "fixture/RebootInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy RebootInstances)
-
-responseUnassignIPv6Addresses :: UnassignIPv6AddressesResponse -> TestTree
-responseUnassignIPv6Addresses = res
-    "UnassignIPv6AddressesResponse"
-    "fixture/UnassignIPv6AddressesResponse.proto"
-    ec2
-    (Proxy :: Proxy UnassignIPv6Addresses)
-
-responseDeleteEgressOnlyInternetGateway :: DeleteEgressOnlyInternetGatewayResponse -> TestTree
-responseDeleteEgressOnlyInternetGateway = res
-    "DeleteEgressOnlyInternetGatewayResponse"
-    "fixture/DeleteEgressOnlyInternetGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteEgressOnlyInternetGateway)
-
-responsePurchaseHostReservation :: PurchaseHostReservationResponse -> TestTree
-responsePurchaseHostReservation = res
-    "PurchaseHostReservationResponse"
-    "fixture/PurchaseHostReservationResponse.proto"
-    ec2
-    (Proxy :: Proxy PurchaseHostReservation)
-
-responseCreateImage :: CreateImageResponse -> TestTree
-responseCreateImage = res
-    "CreateImageResponse"
-    "fixture/CreateImageResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateImage)
-
-responseDescribeClassicLinkInstances :: DescribeClassicLinkInstancesResponse -> TestTree
-responseDescribeClassicLinkInstances = res
-    "DescribeClassicLinkInstancesResponse"
-    "fixture/DescribeClassicLinkInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeClassicLinkInstances)
-
-responseTerminateInstances :: TerminateInstancesResponse -> TestTree
-responseTerminateInstances = res
-    "TerminateInstancesResponse"
-    "fixture/TerminateInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy TerminateInstances)
-
-responseDescribeKeyPairs :: DescribeKeyPairsResponse -> TestTree
-responseDescribeKeyPairs = res
-    "DescribeKeyPairsResponse"
-    "fixture/DescribeKeyPairsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeKeyPairs)
-
-responseCreateVPNConnectionRoute :: CreateVPNConnectionRouteResponse -> TestTree
-responseCreateVPNConnectionRoute = res
-    "CreateVPNConnectionRouteResponse"
-    "fixture/CreateVPNConnectionRouteResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateVPNConnectionRoute)
-
-responseAssociateRouteTable :: AssociateRouteTableResponse -> TestTree
-responseAssociateRouteTable = res
-    "AssociateRouteTableResponse"
-    "fixture/AssociateRouteTableResponse.proto"
-    ec2
-    (Proxy :: Proxy AssociateRouteTable)
-
-responseDescribeVPNGateways :: DescribeVPNGatewaysResponse -> TestTree
-responseDescribeVPNGateways = res
-    "DescribeVPNGatewaysResponse"
-    "fixture/DescribeVPNGatewaysResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVPNGateways)
-
-responseGetConsoleOutput :: GetConsoleOutputResponse -> TestTree
-responseGetConsoleOutput = res
-    "GetConsoleOutputResponse"
-    "fixture/GetConsoleOutputResponse.proto"
-    ec2
-    (Proxy :: Proxy GetConsoleOutput)
-
-responseDescribeHosts :: DescribeHostsResponse -> TestTree
-responseDescribeHosts = res
-    "DescribeHostsResponse"
-    "fixture/DescribeHostsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeHosts)
-
-responseDescribeImageAttribute :: DescribeImageAttributeResponse -> TestTree
-responseDescribeImageAttribute = res
-    "DescribeImageAttributeResponse"
-    "fixture/DescribeImageAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeImageAttribute)
-
-responseModifyIdFormat :: ModifyIdFormatResponse -> TestTree
-responseModifyIdFormat = res
-    "ModifyIdFormatResponse"
-    "fixture/ModifyIdFormatResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyIdFormat)
-
-responseDeleteRouteTable :: DeleteRouteTableResponse -> TestTree
-responseDeleteRouteTable = res
-    "DeleteRouteTableResponse"
-    "fixture/DeleteRouteTableResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteRouteTable)
-
-responseResetImageAttribute :: ResetImageAttributeResponse -> TestTree
-responseResetImageAttribute = res
-    "ResetImageAttributeResponse"
-    "fixture/ResetImageAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ResetImageAttribute)
-
-responseCreateEgressOnlyInternetGateway :: CreateEgressOnlyInternetGatewayResponse -> TestTree
-responseCreateEgressOnlyInternetGateway = res
-    "CreateEgressOnlyInternetGatewayResponse"
-    "fixture/CreateEgressOnlyInternetGatewayResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateEgressOnlyInternetGateway)
-
-responseDescribeReservedInstancesModifications :: DescribeReservedInstancesModificationsResponse -> TestTree
-responseDescribeReservedInstancesModifications = res
-    "DescribeReservedInstancesModificationsResponse"
-    "fixture/DescribeReservedInstancesModificationsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeReservedInstancesModifications)
-
-responseDescribeSpotInstanceRequests :: DescribeSpotInstanceRequestsResponse -> TestTree
-responseDescribeSpotInstanceRequests = res
-    "DescribeSpotInstanceRequestsResponse"
-    "fixture/DescribeSpotInstanceRequestsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSpotInstanceRequests)
-
-responseUnassignPrivateIPAddresses :: UnassignPrivateIPAddressesResponse -> TestTree
-responseUnassignPrivateIPAddresses = res
-    "UnassignPrivateIPAddressesResponse"
-    "fixture/UnassignPrivateIPAddressesResponse.proto"
-    ec2
-    (Proxy :: Proxy UnassignPrivateIPAddresses)
-
-responseDeleteDHCPOptions :: DeleteDHCPOptionsResponse -> TestTree
-responseDeleteDHCPOptions = res
-    "DeleteDHCPOptionsResponse"
-    "fixture/DeleteDHCPOptionsResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteDHCPOptions)
-
-responseDescribeNetworkACLs :: DescribeNetworkACLsResponse -> TestTree
-responseDescribeNetworkACLs = res
-    "DescribeNetworkACLsResponse"
-    "fixture/DescribeNetworkACLsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeNetworkACLs)
-
-responseCancelImportTask :: CancelImportTaskResponse -> TestTree
-responseCancelImportTask = res
-    "CancelImportTaskResponse"
-    "fixture/CancelImportTaskResponse.proto"
-    ec2
-    (Proxy :: Proxy CancelImportTask)
-
-responseDetachClassicLinkVPC :: DetachClassicLinkVPCResponse -> TestTree
-responseDetachClassicLinkVPC = res
-    "DetachClassicLinkVPCResponse"
-    "fixture/DetachClassicLinkVPCResponse.proto"
-    ec2
-    (Proxy :: Proxy DetachClassicLinkVPC)
-
-responseDescribeRegions :: DescribeRegionsResponse -> TestTree
-responseDescribeRegions = res
-    "DescribeRegionsResponse"
-    "fixture/DescribeRegionsResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeRegions)
-
-responseMonitorInstances :: MonitorInstancesResponse -> TestTree
-responseMonitorInstances = res
-    "MonitorInstancesResponse"
-    "fixture/MonitorInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy MonitorInstances)
-
-responseAcceptVPCPeeringConnection :: AcceptVPCPeeringConnectionResponse -> TestTree
-responseAcceptVPCPeeringConnection = res
-    "AcceptVPCPeeringConnectionResponse"
-    "fixture/AcceptVPCPeeringConnectionResponse.proto"
-    ec2
-    (Proxy :: Proxy AcceptVPCPeeringConnection)
-
-responseImportSnapshot :: ImportSnapshotResponse -> TestTree
-responseImportSnapshot = res
-    "ImportSnapshotResponse"
-    "fixture/ImportSnapshotResponse.proto"
-    ec2
-    (Proxy :: Proxy ImportSnapshot)
-
-responseDescribeVolumeStatus :: DescribeVolumeStatusResponse -> TestTree
-responseDescribeVolumeStatus = res
-    "DescribeVolumeStatusResponse"
-    "fixture/DescribeVolumeStatusResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeVolumeStatus)
-
-responseDescribeRouteTables :: DescribeRouteTablesResponse -> TestTree
-responseDescribeRouteTables = res
-    "DescribeRouteTablesResponse"
-    "fixture/DescribeRouteTablesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeRouteTables)
-
-responseDescribeAvailabilityZones :: DescribeAvailabilityZonesResponse -> TestTree
-responseDescribeAvailabilityZones = res
-    "DescribeAvailabilityZonesResponse"
-    "fixture/DescribeAvailabilityZonesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeAvailabilityZones)
-
-responseModifyVPCAttribute :: ModifyVPCAttributeResponse -> TestTree
-responseModifyVPCAttribute = res
-    "ModifyVPCAttributeResponse"
-    "fixture/ModifyVPCAttributeResponse.proto"
-    ec2
-    (Proxy :: Proxy ModifyVPCAttribute)
-
-responseDescribeImages :: DescribeImagesResponse -> TestTree
-responseDescribeImages = res
-    "DescribeImagesResponse"
-    "fixture/DescribeImagesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeImages)
-
-responseRestoreAddressToClassic :: RestoreAddressToClassicResponse -> TestTree
-responseRestoreAddressToClassic = res
-    "RestoreAddressToClassicResponse"
-    "fixture/RestoreAddressToClassicResponse.proto"
-    ec2
-    (Proxy :: Proxy RestoreAddressToClassic)
-
-responseCreateKeyPair :: CreateKeyPairResponse -> TestTree
-responseCreateKeyPair = res
-    "CreateKeyPairResponse"
-    "fixture/CreateKeyPairResponse.proto"
-    ec2
-    (Proxy :: Proxy CreateKeyPair)
-
-responseGetReservedInstancesExchangeQuote :: GetReservedInstancesExchangeQuoteResponse -> TestTree
-responseGetReservedInstancesExchangeQuote = res
-    "GetReservedInstancesExchangeQuoteResponse"
-    "fixture/GetReservedInstancesExchangeQuoteResponse.proto"
-    ec2
-    (Proxy :: Proxy GetReservedInstancesExchangeQuote)
-
-responseDeleteVolume :: DeleteVolumeResponse -> TestTree
-responseDeleteVolume = res
-    "DeleteVolumeResponse"
-    "fixture/DeleteVolumeResponse.proto"
-    ec2
-    (Proxy :: Proxy DeleteVolume)
-
-responseDescribeSpotFleetInstances :: DescribeSpotFleetInstancesResponse -> TestTree
-responseDescribeSpotFleetInstances = res
-    "DescribeSpotFleetInstancesResponse"
-    "fixture/DescribeSpotFleetInstancesResponse.proto"
-    ec2
-    (Proxy :: Proxy DescribeSpotFleetInstances)
diff --git a/test/Test/Amazonka/EC2.hs b/test/Test/Amazonka/EC2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/EC2.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.EC2
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.EC2
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/EC2/Internal.hs b/test/Test/Amazonka/EC2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/EC2/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.EC2.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.EC2.Internal where
diff --git a/test/Test/Amazonka/Gen/EC2.hs b/test/Test/Amazonka/Gen/EC2.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/EC2.hs
@@ -0,0 +1,11558 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.EC2
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.EC2 where
+
+import Amazonka.EC2
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.EC2.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAcceptAddressTransfer $
+--             newAcceptAddressTransfer
+--
+--         , requestAcceptReservedInstancesExchangeQuote $
+--             newAcceptReservedInstancesExchangeQuote
+--
+--         , requestAcceptTransitGatewayMulticastDomainAssociations $
+--             newAcceptTransitGatewayMulticastDomainAssociations
+--
+--         , requestAcceptTransitGatewayPeeringAttachment $
+--             newAcceptTransitGatewayPeeringAttachment
+--
+--         , requestAcceptTransitGatewayVpcAttachment $
+--             newAcceptTransitGatewayVpcAttachment
+--
+--         , requestAcceptVpcEndpointConnections $
+--             newAcceptVpcEndpointConnections
+--
+--         , requestAcceptVpcPeeringConnection $
+--             newAcceptVpcPeeringConnection
+--
+--         , requestAdvertiseByoipCidr $
+--             newAdvertiseByoipCidr
+--
+--         , requestAllocateAddress $
+--             newAllocateAddress
+--
+--         , requestAllocateHosts $
+--             newAllocateHosts
+--
+--         , requestAllocateIpamPoolCidr $
+--             newAllocateIpamPoolCidr
+--
+--         , requestApplySecurityGroupsToClientVpnTargetNetwork $
+--             newApplySecurityGroupsToClientVpnTargetNetwork
+--
+--         , requestAssignIpv6Addresses $
+--             newAssignIpv6Addresses
+--
+--         , requestAssignPrivateIpAddresses $
+--             newAssignPrivateIpAddresses
+--
+--         , requestAssociateAddress $
+--             newAssociateAddress
+--
+--         , requestAssociateClientVpnTargetNetwork $
+--             newAssociateClientVpnTargetNetwork
+--
+--         , requestAssociateDhcpOptions $
+--             newAssociateDhcpOptions
+--
+--         , requestAssociateEnclaveCertificateIamRole $
+--             newAssociateEnclaveCertificateIamRole
+--
+--         , requestAssociateIamInstanceProfile $
+--             newAssociateIamInstanceProfile
+--
+--         , requestAssociateInstanceEventWindow $
+--             newAssociateInstanceEventWindow
+--
+--         , requestAssociateRouteTable $
+--             newAssociateRouteTable
+--
+--         , requestAssociateSubnetCidrBlock $
+--             newAssociateSubnetCidrBlock
+--
+--         , requestAssociateTransitGatewayMulticastDomain $
+--             newAssociateTransitGatewayMulticastDomain
+--
+--         , requestAssociateTransitGatewayPolicyTable $
+--             newAssociateTransitGatewayPolicyTable
+--
+--         , requestAssociateTransitGatewayRouteTable $
+--             newAssociateTransitGatewayRouteTable
+--
+--         , requestAssociateTrunkInterface $
+--             newAssociateTrunkInterface
+--
+--         , requestAssociateVpcCidrBlock $
+--             newAssociateVpcCidrBlock
+--
+--         , requestAttachClassicLinkVpc $
+--             newAttachClassicLinkVpc
+--
+--         , requestAttachInternetGateway $
+--             newAttachInternetGateway
+--
+--         , requestAttachNetworkInterface $
+--             newAttachNetworkInterface
+--
+--         , requestAttachVerifiedAccessTrustProvider $
+--             newAttachVerifiedAccessTrustProvider
+--
+--         , requestAttachVolume $
+--             newAttachVolume
+--
+--         , requestAttachVpnGateway $
+--             newAttachVpnGateway
+--
+--         , requestAuthorizeClientVpnIngress $
+--             newAuthorizeClientVpnIngress
+--
+--         , requestAuthorizeSecurityGroupEgress $
+--             newAuthorizeSecurityGroupEgress
+--
+--         , requestAuthorizeSecurityGroupIngress $
+--             newAuthorizeSecurityGroupIngress
+--
+--         , requestBundleInstance $
+--             newBundleInstance
+--
+--         , requestCancelBundleTask $
+--             newCancelBundleTask
+--
+--         , requestCancelCapacityReservation $
+--             newCancelCapacityReservation
+--
+--         , requestCancelCapacityReservationFleets $
+--             newCancelCapacityReservationFleets
+--
+--         , requestCancelConversionTask $
+--             newCancelConversionTask
+--
+--         , requestCancelExportTask $
+--             newCancelExportTask
+--
+--         , requestCancelImageLaunchPermission $
+--             newCancelImageLaunchPermission
+--
+--         , requestCancelImportTask $
+--             newCancelImportTask
+--
+--         , requestCancelReservedInstancesListing $
+--             newCancelReservedInstancesListing
+--
+--         , requestCancelSpotFleetRequests $
+--             newCancelSpotFleetRequests
+--
+--         , requestCancelSpotInstanceRequests $
+--             newCancelSpotInstanceRequests
+--
+--         , requestConfirmProductInstance $
+--             newConfirmProductInstance
+--
+--         , requestCopyFpgaImage $
+--             newCopyFpgaImage
+--
+--         , requestCopyImage $
+--             newCopyImage
+--
+--         , requestCopySnapshot $
+--             newCopySnapshot
+--
+--         , requestCreateCapacityReservation $
+--             newCreateCapacityReservation
+--
+--         , requestCreateCapacityReservationFleet $
+--             newCreateCapacityReservationFleet
+--
+--         , requestCreateCarrierGateway $
+--             newCreateCarrierGateway
+--
+--         , requestCreateClientVpnEndpoint $
+--             newCreateClientVpnEndpoint
+--
+--         , requestCreateClientVpnRoute $
+--             newCreateClientVpnRoute
+--
+--         , requestCreateCoipCidr $
+--             newCreateCoipCidr
+--
+--         , requestCreateCoipPool $
+--             newCreateCoipPool
+--
+--         , requestCreateCustomerGateway $
+--             newCreateCustomerGateway
+--
+--         , requestCreateDefaultSubnet $
+--             newCreateDefaultSubnet
+--
+--         , requestCreateDefaultVpc $
+--             newCreateDefaultVpc
+--
+--         , requestCreateDhcpOptions $
+--             newCreateDhcpOptions
+--
+--         , requestCreateEgressOnlyInternetGateway $
+--             newCreateEgressOnlyInternetGateway
+--
+--         , requestCreateFleet $
+--             newCreateFleet
+--
+--         , requestCreateFlowLogs $
+--             newCreateFlowLogs
+--
+--         , requestCreateFpgaImage $
+--             newCreateFpgaImage
+--
+--         , requestCreateImage $
+--             newCreateImage
+--
+--         , requestCreateInstanceEventWindow $
+--             newCreateInstanceEventWindow
+--
+--         , requestCreateInstanceExportTask $
+--             newCreateInstanceExportTask
+--
+--         , requestCreateInternetGateway $
+--             newCreateInternetGateway
+--
+--         , requestCreateIpam $
+--             newCreateIpam
+--
+--         , requestCreateIpamPool $
+--             newCreateIpamPool
+--
+--         , requestCreateIpamScope $
+--             newCreateIpamScope
+--
+--         , requestCreateKeyPair $
+--             newCreateKeyPair
+--
+--         , requestCreateLaunchTemplate $
+--             newCreateLaunchTemplate
+--
+--         , requestCreateLaunchTemplateVersion $
+--             newCreateLaunchTemplateVersion
+--
+--         , requestCreateLocalGatewayRoute $
+--             newCreateLocalGatewayRoute
+--
+--         , requestCreateLocalGatewayRouteTable $
+--             newCreateLocalGatewayRouteTable
+--
+--         , requestCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation $
+--             newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+--
+--         , requestCreateLocalGatewayRouteTableVpcAssociation $
+--             newCreateLocalGatewayRouteTableVpcAssociation
+--
+--         , requestCreateManagedPrefixList $
+--             newCreateManagedPrefixList
+--
+--         , requestCreateNatGateway $
+--             newCreateNatGateway
+--
+--         , requestCreateNetworkAcl $
+--             newCreateNetworkAcl
+--
+--         , requestCreateNetworkAclEntry $
+--             newCreateNetworkAclEntry
+--
+--         , requestCreateNetworkInsightsAccessScope $
+--             newCreateNetworkInsightsAccessScope
+--
+--         , requestCreateNetworkInsightsPath $
+--             newCreateNetworkInsightsPath
+--
+--         , requestCreateNetworkInterface $
+--             newCreateNetworkInterface
+--
+--         , requestCreateNetworkInterfacePermission $
+--             newCreateNetworkInterfacePermission
+--
+--         , requestCreatePlacementGroup $
+--             newCreatePlacementGroup
+--
+--         , requestCreatePublicIpv4Pool $
+--             newCreatePublicIpv4Pool
+--
+--         , requestCreateReplaceRootVolumeTask $
+--             newCreateReplaceRootVolumeTask
+--
+--         , requestCreateReservedInstancesListing $
+--             newCreateReservedInstancesListing
+--
+--         , requestCreateRestoreImageTask $
+--             newCreateRestoreImageTask
+--
+--         , requestCreateRoute $
+--             newCreateRoute
+--
+--         , requestCreateRouteTable $
+--             newCreateRouteTable
+--
+--         , requestCreateSecurityGroup $
+--             newCreateSecurityGroup
+--
+--         , requestCreateSnapshot $
+--             newCreateSnapshot
+--
+--         , requestCreateSnapshots $
+--             newCreateSnapshots
+--
+--         , requestCreateSpotDatafeedSubscription $
+--             newCreateSpotDatafeedSubscription
+--
+--         , requestCreateStoreImageTask $
+--             newCreateStoreImageTask
+--
+--         , requestCreateSubnet $
+--             newCreateSubnet
+--
+--         , requestCreateSubnetCidrReservation $
+--             newCreateSubnetCidrReservation
+--
+--         , requestCreateTags $
+--             newCreateTags
+--
+--         , requestCreateTrafficMirrorFilter $
+--             newCreateTrafficMirrorFilter
+--
+--         , requestCreateTrafficMirrorFilterRule $
+--             newCreateTrafficMirrorFilterRule
+--
+--         , requestCreateTrafficMirrorSession $
+--             newCreateTrafficMirrorSession
+--
+--         , requestCreateTrafficMirrorTarget $
+--             newCreateTrafficMirrorTarget
+--
+--         , requestCreateTransitGateway $
+--             newCreateTransitGateway
+--
+--         , requestCreateTransitGatewayConnect $
+--             newCreateTransitGatewayConnect
+--
+--         , requestCreateTransitGatewayConnectPeer $
+--             newCreateTransitGatewayConnectPeer
+--
+--         , requestCreateTransitGatewayMulticastDomain $
+--             newCreateTransitGatewayMulticastDomain
+--
+--         , requestCreateTransitGatewayPeeringAttachment $
+--             newCreateTransitGatewayPeeringAttachment
+--
+--         , requestCreateTransitGatewayPolicyTable $
+--             newCreateTransitGatewayPolicyTable
+--
+--         , requestCreateTransitGatewayPrefixListReference $
+--             newCreateTransitGatewayPrefixListReference
+--
+--         , requestCreateTransitGatewayRoute $
+--             newCreateTransitGatewayRoute
+--
+--         , requestCreateTransitGatewayRouteTable $
+--             newCreateTransitGatewayRouteTable
+--
+--         , requestCreateTransitGatewayRouteTableAnnouncement $
+--             newCreateTransitGatewayRouteTableAnnouncement
+--
+--         , requestCreateTransitGatewayVpcAttachment $
+--             newCreateTransitGatewayVpcAttachment
+--
+--         , requestCreateVerifiedAccessEndpoint $
+--             newCreateVerifiedAccessEndpoint
+--
+--         , requestCreateVerifiedAccessGroup $
+--             newCreateVerifiedAccessGroup
+--
+--         , requestCreateVerifiedAccessInstance $
+--             newCreateVerifiedAccessInstance
+--
+--         , requestCreateVerifiedAccessTrustProvider $
+--             newCreateVerifiedAccessTrustProvider
+--
+--         , requestCreateVolume $
+--             newCreateVolume
+--
+--         , requestCreateVpc $
+--             newCreateVpc
+--
+--         , requestCreateVpcEndpoint $
+--             newCreateVpcEndpoint
+--
+--         , requestCreateVpcEndpointConnectionNotification $
+--             newCreateVpcEndpointConnectionNotification
+--
+--         , requestCreateVpcEndpointServiceConfiguration $
+--             newCreateVpcEndpointServiceConfiguration
+--
+--         , requestCreateVpcPeeringConnection $
+--             newCreateVpcPeeringConnection
+--
+--         , requestCreateVpnConnection $
+--             newCreateVpnConnection
+--
+--         , requestCreateVpnConnectionRoute $
+--             newCreateVpnConnectionRoute
+--
+--         , requestCreateVpnGateway $
+--             newCreateVpnGateway
+--
+--         , requestDeleteCarrierGateway $
+--             newDeleteCarrierGateway
+--
+--         , requestDeleteClientVpnEndpoint $
+--             newDeleteClientVpnEndpoint
+--
+--         , requestDeleteClientVpnRoute $
+--             newDeleteClientVpnRoute
+--
+--         , requestDeleteCoipCidr $
+--             newDeleteCoipCidr
+--
+--         , requestDeleteCoipPool $
+--             newDeleteCoipPool
+--
+--         , requestDeleteCustomerGateway $
+--             newDeleteCustomerGateway
+--
+--         , requestDeleteDhcpOptions $
+--             newDeleteDhcpOptions
+--
+--         , requestDeleteEgressOnlyInternetGateway $
+--             newDeleteEgressOnlyInternetGateway
+--
+--         , requestDeleteFleets $
+--             newDeleteFleets
+--
+--         , requestDeleteFlowLogs $
+--             newDeleteFlowLogs
+--
+--         , requestDeleteFpgaImage $
+--             newDeleteFpgaImage
+--
+--         , requestDeleteInstanceEventWindow $
+--             newDeleteInstanceEventWindow
+--
+--         , requestDeleteInternetGateway $
+--             newDeleteInternetGateway
+--
+--         , requestDeleteIpam $
+--             newDeleteIpam
+--
+--         , requestDeleteIpamPool $
+--             newDeleteIpamPool
+--
+--         , requestDeleteIpamScope $
+--             newDeleteIpamScope
+--
+--         , requestDeleteKeyPair $
+--             newDeleteKeyPair
+--
+--         , requestDeleteLaunchTemplate $
+--             newDeleteLaunchTemplate
+--
+--         , requestDeleteLaunchTemplateVersions $
+--             newDeleteLaunchTemplateVersions
+--
+--         , requestDeleteLocalGatewayRoute $
+--             newDeleteLocalGatewayRoute
+--
+--         , requestDeleteLocalGatewayRouteTable $
+--             newDeleteLocalGatewayRouteTable
+--
+--         , requestDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation $
+--             newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation
+--
+--         , requestDeleteLocalGatewayRouteTableVpcAssociation $
+--             newDeleteLocalGatewayRouteTableVpcAssociation
+--
+--         , requestDeleteManagedPrefixList $
+--             newDeleteManagedPrefixList
+--
+--         , requestDeleteNatGateway $
+--             newDeleteNatGateway
+--
+--         , requestDeleteNetworkAcl $
+--             newDeleteNetworkAcl
+--
+--         , requestDeleteNetworkAclEntry $
+--             newDeleteNetworkAclEntry
+--
+--         , requestDeleteNetworkInsightsAccessScope $
+--             newDeleteNetworkInsightsAccessScope
+--
+--         , requestDeleteNetworkInsightsAccessScopeAnalysis $
+--             newDeleteNetworkInsightsAccessScopeAnalysis
+--
+--         , requestDeleteNetworkInsightsAnalysis $
+--             newDeleteNetworkInsightsAnalysis
+--
+--         , requestDeleteNetworkInsightsPath $
+--             newDeleteNetworkInsightsPath
+--
+--         , requestDeleteNetworkInterface $
+--             newDeleteNetworkInterface
+--
+--         , requestDeleteNetworkInterfacePermission $
+--             newDeleteNetworkInterfacePermission
+--
+--         , requestDeletePlacementGroup $
+--             newDeletePlacementGroup
+--
+--         , requestDeletePublicIpv4Pool $
+--             newDeletePublicIpv4Pool
+--
+--         , requestDeleteQueuedReservedInstances $
+--             newDeleteQueuedReservedInstances
+--
+--         , requestDeleteRoute $
+--             newDeleteRoute
+--
+--         , requestDeleteRouteTable $
+--             newDeleteRouteTable
+--
+--         , requestDeleteSecurityGroup $
+--             newDeleteSecurityGroup
+--
+--         , requestDeleteSnapshot $
+--             newDeleteSnapshot
+--
+--         , requestDeleteSpotDatafeedSubscription $
+--             newDeleteSpotDatafeedSubscription
+--
+--         , requestDeleteSubnet $
+--             newDeleteSubnet
+--
+--         , requestDeleteSubnetCidrReservation $
+--             newDeleteSubnetCidrReservation
+--
+--         , requestDeleteTags $
+--             newDeleteTags
+--
+--         , requestDeleteTrafficMirrorFilter $
+--             newDeleteTrafficMirrorFilter
+--
+--         , requestDeleteTrafficMirrorFilterRule $
+--             newDeleteTrafficMirrorFilterRule
+--
+--         , requestDeleteTrafficMirrorSession $
+--             newDeleteTrafficMirrorSession
+--
+--         , requestDeleteTrafficMirrorTarget $
+--             newDeleteTrafficMirrorTarget
+--
+--         , requestDeleteTransitGateway $
+--             newDeleteTransitGateway
+--
+--         , requestDeleteTransitGatewayConnect $
+--             newDeleteTransitGatewayConnect
+--
+--         , requestDeleteTransitGatewayConnectPeer $
+--             newDeleteTransitGatewayConnectPeer
+--
+--         , requestDeleteTransitGatewayMulticastDomain $
+--             newDeleteTransitGatewayMulticastDomain
+--
+--         , requestDeleteTransitGatewayPeeringAttachment $
+--             newDeleteTransitGatewayPeeringAttachment
+--
+--         , requestDeleteTransitGatewayPolicyTable $
+--             newDeleteTransitGatewayPolicyTable
+--
+--         , requestDeleteTransitGatewayPrefixListReference $
+--             newDeleteTransitGatewayPrefixListReference
+--
+--         , requestDeleteTransitGatewayRoute $
+--             newDeleteTransitGatewayRoute
+--
+--         , requestDeleteTransitGatewayRouteTable $
+--             newDeleteTransitGatewayRouteTable
+--
+--         , requestDeleteTransitGatewayRouteTableAnnouncement $
+--             newDeleteTransitGatewayRouteTableAnnouncement
+--
+--         , requestDeleteTransitGatewayVpcAttachment $
+--             newDeleteTransitGatewayVpcAttachment
+--
+--         , requestDeleteVerifiedAccessEndpoint $
+--             newDeleteVerifiedAccessEndpoint
+--
+--         , requestDeleteVerifiedAccessGroup $
+--             newDeleteVerifiedAccessGroup
+--
+--         , requestDeleteVerifiedAccessInstance $
+--             newDeleteVerifiedAccessInstance
+--
+--         , requestDeleteVerifiedAccessTrustProvider $
+--             newDeleteVerifiedAccessTrustProvider
+--
+--         , requestDeleteVolume $
+--             newDeleteVolume
+--
+--         , requestDeleteVpc $
+--             newDeleteVpc
+--
+--         , requestDeleteVpcEndpointConnectionNotifications $
+--             newDeleteVpcEndpointConnectionNotifications
+--
+--         , requestDeleteVpcEndpointServiceConfigurations $
+--             newDeleteVpcEndpointServiceConfigurations
+--
+--         , requestDeleteVpcEndpoints $
+--             newDeleteVpcEndpoints
+--
+--         , requestDeleteVpcPeeringConnection $
+--             newDeleteVpcPeeringConnection
+--
+--         , requestDeleteVpnConnection $
+--             newDeleteVpnConnection
+--
+--         , requestDeleteVpnConnectionRoute $
+--             newDeleteVpnConnectionRoute
+--
+--         , requestDeleteVpnGateway $
+--             newDeleteVpnGateway
+--
+--         , requestDeprovisionByoipCidr $
+--             newDeprovisionByoipCidr
+--
+--         , requestDeprovisionIpamPoolCidr $
+--             newDeprovisionIpamPoolCidr
+--
+--         , requestDeprovisionPublicIpv4PoolCidr $
+--             newDeprovisionPublicIpv4PoolCidr
+--
+--         , requestDeregisterImage $
+--             newDeregisterImage
+--
+--         , requestDeregisterInstanceEventNotificationAttributes $
+--             newDeregisterInstanceEventNotificationAttributes
+--
+--         , requestDeregisterTransitGatewayMulticastGroupMembers $
+--             newDeregisterTransitGatewayMulticastGroupMembers
+--
+--         , requestDeregisterTransitGatewayMulticastGroupSources $
+--             newDeregisterTransitGatewayMulticastGroupSources
+--
+--         , requestDescribeAccountAttributes $
+--             newDescribeAccountAttributes
+--
+--         , requestDescribeAddressTransfers $
+--             newDescribeAddressTransfers
+--
+--         , requestDescribeAddresses $
+--             newDescribeAddresses
+--
+--         , requestDescribeAddressesAttribute $
+--             newDescribeAddressesAttribute
+--
+--         , requestDescribeAggregateIdFormat $
+--             newDescribeAggregateIdFormat
+--
+--         , requestDescribeAvailabilityZones $
+--             newDescribeAvailabilityZones
+--
+--         , requestDescribeAwsNetworkPerformanceMetricSubscriptions $
+--             newDescribeAwsNetworkPerformanceMetricSubscriptions
+--
+--         , requestDescribeBundleTasks $
+--             newDescribeBundleTasks
+--
+--         , requestDescribeByoipCidrs $
+--             newDescribeByoipCidrs
+--
+--         , requestDescribeCapacityReservationFleets $
+--             newDescribeCapacityReservationFleets
+--
+--         , requestDescribeCapacityReservations $
+--             newDescribeCapacityReservations
+--
+--         , requestDescribeCarrierGateways $
+--             newDescribeCarrierGateways
+--
+--         , requestDescribeClassicLinkInstances $
+--             newDescribeClassicLinkInstances
+--
+--         , requestDescribeClientVpnAuthorizationRules $
+--             newDescribeClientVpnAuthorizationRules
+--
+--         , requestDescribeClientVpnConnections $
+--             newDescribeClientVpnConnections
+--
+--         , requestDescribeClientVpnEndpoints $
+--             newDescribeClientVpnEndpoints
+--
+--         , requestDescribeClientVpnRoutes $
+--             newDescribeClientVpnRoutes
+--
+--         , requestDescribeClientVpnTargetNetworks $
+--             newDescribeClientVpnTargetNetworks
+--
+--         , requestDescribeCoipPools $
+--             newDescribeCoipPools
+--
+--         , requestDescribeConversionTasks $
+--             newDescribeConversionTasks
+--
+--         , requestDescribeCustomerGateways $
+--             newDescribeCustomerGateways
+--
+--         , requestDescribeDhcpOptions $
+--             newDescribeDhcpOptions
+--
+--         , requestDescribeEgressOnlyInternetGateways $
+--             newDescribeEgressOnlyInternetGateways
+--
+--         , requestDescribeElasticGpus $
+--             newDescribeElasticGpus
+--
+--         , requestDescribeExportImageTasks $
+--             newDescribeExportImageTasks
+--
+--         , requestDescribeExportTasks $
+--             newDescribeExportTasks
+--
+--         , requestDescribeFastLaunchImages $
+--             newDescribeFastLaunchImages
+--
+--         , requestDescribeFastSnapshotRestores $
+--             newDescribeFastSnapshotRestores
+--
+--         , requestDescribeFleetHistory $
+--             newDescribeFleetHistory
+--
+--         , requestDescribeFleetInstances $
+--             newDescribeFleetInstances
+--
+--         , requestDescribeFleets $
+--             newDescribeFleets
+--
+--         , requestDescribeFlowLogs $
+--             newDescribeFlowLogs
+--
+--         , requestDescribeFpgaImageAttribute $
+--             newDescribeFpgaImageAttribute
+--
+--         , requestDescribeFpgaImages $
+--             newDescribeFpgaImages
+--
+--         , requestDescribeHostReservationOfferings $
+--             newDescribeHostReservationOfferings
+--
+--         , requestDescribeHostReservations $
+--             newDescribeHostReservations
+--
+--         , requestDescribeHosts $
+--             newDescribeHosts
+--
+--         , requestDescribeIamInstanceProfileAssociations $
+--             newDescribeIamInstanceProfileAssociations
+--
+--         , requestDescribeIdFormat $
+--             newDescribeIdFormat
+--
+--         , requestDescribeIdentityIdFormat $
+--             newDescribeIdentityIdFormat
+--
+--         , requestDescribeImageAttribute $
+--             newDescribeImageAttribute
+--
+--         , requestDescribeImages $
+--             newDescribeImages
+--
+--         , requestDescribeImportImageTasks $
+--             newDescribeImportImageTasks
+--
+--         , requestDescribeImportSnapshotTasks $
+--             newDescribeImportSnapshotTasks
+--
+--         , requestDescribeInstanceAttribute $
+--             newDescribeInstanceAttribute
+--
+--         , requestDescribeInstanceCreditSpecifications $
+--             newDescribeInstanceCreditSpecifications
+--
+--         , requestDescribeInstanceEventNotificationAttributes $
+--             newDescribeInstanceEventNotificationAttributes
+--
+--         , requestDescribeInstanceEventWindows $
+--             newDescribeInstanceEventWindows
+--
+--         , requestDescribeInstanceStatus $
+--             newDescribeInstanceStatus
+--
+--         , requestDescribeInstanceTypeOfferings $
+--             newDescribeInstanceTypeOfferings
+--
+--         , requestDescribeInstanceTypes $
+--             newDescribeInstanceTypes
+--
+--         , requestDescribeInstances $
+--             newDescribeInstances
+--
+--         , requestDescribeInternetGateways $
+--             newDescribeInternetGateways
+--
+--         , requestDescribeIpamPools $
+--             newDescribeIpamPools
+--
+--         , requestDescribeIpamScopes $
+--             newDescribeIpamScopes
+--
+--         , requestDescribeIpams $
+--             newDescribeIpams
+--
+--         , requestDescribeIpv6Pools $
+--             newDescribeIpv6Pools
+--
+--         , requestDescribeKeyPairs $
+--             newDescribeKeyPairs
+--
+--         , requestDescribeLaunchTemplateVersions $
+--             newDescribeLaunchTemplateVersions
+--
+--         , requestDescribeLaunchTemplates $
+--             newDescribeLaunchTemplates
+--
+--         , requestDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations $
+--             newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations
+--
+--         , requestDescribeLocalGatewayRouteTableVpcAssociations $
+--             newDescribeLocalGatewayRouteTableVpcAssociations
+--
+--         , requestDescribeLocalGatewayRouteTables $
+--             newDescribeLocalGatewayRouteTables
+--
+--         , requestDescribeLocalGatewayVirtualInterfaceGroups $
+--             newDescribeLocalGatewayVirtualInterfaceGroups
+--
+--         , requestDescribeLocalGatewayVirtualInterfaces $
+--             newDescribeLocalGatewayVirtualInterfaces
+--
+--         , requestDescribeLocalGateways $
+--             newDescribeLocalGateways
+--
+--         , requestDescribeManagedPrefixLists $
+--             newDescribeManagedPrefixLists
+--
+--         , requestDescribeMovingAddresses $
+--             newDescribeMovingAddresses
+--
+--         , requestDescribeNatGateways $
+--             newDescribeNatGateways
+--
+--         , requestDescribeNetworkAcls $
+--             newDescribeNetworkAcls
+--
+--         , requestDescribeNetworkInsightsAccessScopeAnalyses $
+--             newDescribeNetworkInsightsAccessScopeAnalyses
+--
+--         , requestDescribeNetworkInsightsAccessScopes $
+--             newDescribeNetworkInsightsAccessScopes
+--
+--         , requestDescribeNetworkInsightsAnalyses $
+--             newDescribeNetworkInsightsAnalyses
+--
+--         , requestDescribeNetworkInsightsPaths $
+--             newDescribeNetworkInsightsPaths
+--
+--         , requestDescribeNetworkInterfaceAttribute $
+--             newDescribeNetworkInterfaceAttribute
+--
+--         , requestDescribeNetworkInterfacePermissions $
+--             newDescribeNetworkInterfacePermissions
+--
+--         , requestDescribeNetworkInterfaces $
+--             newDescribeNetworkInterfaces
+--
+--         , requestDescribePlacementGroups $
+--             newDescribePlacementGroups
+--
+--         , requestDescribePrefixLists $
+--             newDescribePrefixLists
+--
+--         , requestDescribePrincipalIdFormat $
+--             newDescribePrincipalIdFormat
+--
+--         , requestDescribePublicIpv4Pools $
+--             newDescribePublicIpv4Pools
+--
+--         , requestDescribeRegions $
+--             newDescribeRegions
+--
+--         , requestDescribeReplaceRootVolumeTasks $
+--             newDescribeReplaceRootVolumeTasks
+--
+--         , requestDescribeReservedInstances $
+--             newDescribeReservedInstances
+--
+--         , requestDescribeReservedInstancesListings $
+--             newDescribeReservedInstancesListings
+--
+--         , requestDescribeReservedInstancesModifications $
+--             newDescribeReservedInstancesModifications
+--
+--         , requestDescribeReservedInstancesOfferings $
+--             newDescribeReservedInstancesOfferings
+--
+--         , requestDescribeRouteTables $
+--             newDescribeRouteTables
+--
+--         , requestDescribeScheduledInstanceAvailability $
+--             newDescribeScheduledInstanceAvailability
+--
+--         , requestDescribeScheduledInstances $
+--             newDescribeScheduledInstances
+--
+--         , requestDescribeSecurityGroupReferences $
+--             newDescribeSecurityGroupReferences
+--
+--         , requestDescribeSecurityGroupRules $
+--             newDescribeSecurityGroupRules
+--
+--         , requestDescribeSecurityGroups $
+--             newDescribeSecurityGroups
+--
+--         , requestDescribeSnapshotAttribute $
+--             newDescribeSnapshotAttribute
+--
+--         , requestDescribeSnapshotTierStatus $
+--             newDescribeSnapshotTierStatus
+--
+--         , requestDescribeSnapshots $
+--             newDescribeSnapshots
+--
+--         , requestDescribeSpotDatafeedSubscription $
+--             newDescribeSpotDatafeedSubscription
+--
+--         , requestDescribeSpotFleetInstances $
+--             newDescribeSpotFleetInstances
+--
+--         , requestDescribeSpotFleetRequestHistory $
+--             newDescribeSpotFleetRequestHistory
+--
+--         , requestDescribeSpotFleetRequests $
+--             newDescribeSpotFleetRequests
+--
+--         , requestDescribeSpotInstanceRequests $
+--             newDescribeSpotInstanceRequests
+--
+--         , requestDescribeSpotPriceHistory $
+--             newDescribeSpotPriceHistory
+--
+--         , requestDescribeStaleSecurityGroups $
+--             newDescribeStaleSecurityGroups
+--
+--         , requestDescribeStoreImageTasks $
+--             newDescribeStoreImageTasks
+--
+--         , requestDescribeSubnets $
+--             newDescribeSubnets
+--
+--         , requestDescribeTags $
+--             newDescribeTags
+--
+--         , requestDescribeTrafficMirrorFilters $
+--             newDescribeTrafficMirrorFilters
+--
+--         , requestDescribeTrafficMirrorSessions $
+--             newDescribeTrafficMirrorSessions
+--
+--         , requestDescribeTrafficMirrorTargets $
+--             newDescribeTrafficMirrorTargets
+--
+--         , requestDescribeTransitGatewayAttachments $
+--             newDescribeTransitGatewayAttachments
+--
+--         , requestDescribeTransitGatewayConnectPeers $
+--             newDescribeTransitGatewayConnectPeers
+--
+--         , requestDescribeTransitGatewayConnects $
+--             newDescribeTransitGatewayConnects
+--
+--         , requestDescribeTransitGatewayMulticastDomains $
+--             newDescribeTransitGatewayMulticastDomains
+--
+--         , requestDescribeTransitGatewayPeeringAttachments $
+--             newDescribeTransitGatewayPeeringAttachments
+--
+--         , requestDescribeTransitGatewayPolicyTables $
+--             newDescribeTransitGatewayPolicyTables
+--
+--         , requestDescribeTransitGatewayRouteTableAnnouncements $
+--             newDescribeTransitGatewayRouteTableAnnouncements
+--
+--         , requestDescribeTransitGatewayRouteTables $
+--             newDescribeTransitGatewayRouteTables
+--
+--         , requestDescribeTransitGatewayVpcAttachments $
+--             newDescribeTransitGatewayVpcAttachments
+--
+--         , requestDescribeTransitGateways $
+--             newDescribeTransitGateways
+--
+--         , requestDescribeTrunkInterfaceAssociations $
+--             newDescribeTrunkInterfaceAssociations
+--
+--         , requestDescribeVerifiedAccessEndpoints $
+--             newDescribeVerifiedAccessEndpoints
+--
+--         , requestDescribeVerifiedAccessGroups $
+--             newDescribeVerifiedAccessGroups
+--
+--         , requestDescribeVerifiedAccessInstanceLoggingConfigurations $
+--             newDescribeVerifiedAccessInstanceLoggingConfigurations
+--
+--         , requestDescribeVerifiedAccessInstances $
+--             newDescribeVerifiedAccessInstances
+--
+--         , requestDescribeVerifiedAccessTrustProviders $
+--             newDescribeVerifiedAccessTrustProviders
+--
+--         , requestDescribeVolumeAttribute $
+--             newDescribeVolumeAttribute
+--
+--         , requestDescribeVolumeStatus $
+--             newDescribeVolumeStatus
+--
+--         , requestDescribeVolumes $
+--             newDescribeVolumes
+--
+--         , requestDescribeVolumesModifications $
+--             newDescribeVolumesModifications
+--
+--         , requestDescribeVpcAttribute $
+--             newDescribeVpcAttribute
+--
+--         , requestDescribeVpcClassicLink $
+--             newDescribeVpcClassicLink
+--
+--         , requestDescribeVpcClassicLinkDnsSupport $
+--             newDescribeVpcClassicLinkDnsSupport
+--
+--         , requestDescribeVpcEndpointConnectionNotifications $
+--             newDescribeVpcEndpointConnectionNotifications
+--
+--         , requestDescribeVpcEndpointConnections $
+--             newDescribeVpcEndpointConnections
+--
+--         , requestDescribeVpcEndpointServiceConfigurations $
+--             newDescribeVpcEndpointServiceConfigurations
+--
+--         , requestDescribeVpcEndpointServicePermissions $
+--             newDescribeVpcEndpointServicePermissions
+--
+--         , requestDescribeVpcEndpointServices $
+--             newDescribeVpcEndpointServices
+--
+--         , requestDescribeVpcEndpoints $
+--             newDescribeVpcEndpoints
+--
+--         , requestDescribeVpcPeeringConnections $
+--             newDescribeVpcPeeringConnections
+--
+--         , requestDescribeVpcs $
+--             newDescribeVpcs
+--
+--         , requestDescribeVpnConnections $
+--             newDescribeVpnConnections
+--
+--         , requestDescribeVpnGateways $
+--             newDescribeVpnGateways
+--
+--         , requestDetachClassicLinkVpc $
+--             newDetachClassicLinkVpc
+--
+--         , requestDetachInternetGateway $
+--             newDetachInternetGateway
+--
+--         , requestDetachNetworkInterface $
+--             newDetachNetworkInterface
+--
+--         , requestDetachVerifiedAccessTrustProvider $
+--             newDetachVerifiedAccessTrustProvider
+--
+--         , requestDetachVolume $
+--             newDetachVolume
+--
+--         , requestDetachVpnGateway $
+--             newDetachVpnGateway
+--
+--         , requestDisableAddressTransfer $
+--             newDisableAddressTransfer
+--
+--         , requestDisableAwsNetworkPerformanceMetricSubscription $
+--             newDisableAwsNetworkPerformanceMetricSubscription
+--
+--         , requestDisableEbsEncryptionByDefault $
+--             newDisableEbsEncryptionByDefault
+--
+--         , requestDisableFastLaunch $
+--             newDisableFastLaunch
+--
+--         , requestDisableFastSnapshotRestores $
+--             newDisableFastSnapshotRestores
+--
+--         , requestDisableImageDeprecation $
+--             newDisableImageDeprecation
+--
+--         , requestDisableIpamOrganizationAdminAccount $
+--             newDisableIpamOrganizationAdminAccount
+--
+--         , requestDisableSerialConsoleAccess $
+--             newDisableSerialConsoleAccess
+--
+--         , requestDisableTransitGatewayRouteTablePropagation $
+--             newDisableTransitGatewayRouteTablePropagation
+--
+--         , requestDisableVgwRoutePropagation $
+--             newDisableVgwRoutePropagation
+--
+--         , requestDisableVpcClassicLink $
+--             newDisableVpcClassicLink
+--
+--         , requestDisableVpcClassicLinkDnsSupport $
+--             newDisableVpcClassicLinkDnsSupport
+--
+--         , requestDisassociateAddress $
+--             newDisassociateAddress
+--
+--         , requestDisassociateClientVpnTargetNetwork $
+--             newDisassociateClientVpnTargetNetwork
+--
+--         , requestDisassociateEnclaveCertificateIamRole $
+--             newDisassociateEnclaveCertificateIamRole
+--
+--         , requestDisassociateIamInstanceProfile $
+--             newDisassociateIamInstanceProfile
+--
+--         , requestDisassociateInstanceEventWindow $
+--             newDisassociateInstanceEventWindow
+--
+--         , requestDisassociateRouteTable $
+--             newDisassociateRouteTable
+--
+--         , requestDisassociateSubnetCidrBlock $
+--             newDisassociateSubnetCidrBlock
+--
+--         , requestDisassociateTransitGatewayMulticastDomain $
+--             newDisassociateTransitGatewayMulticastDomain
+--
+--         , requestDisassociateTransitGatewayPolicyTable $
+--             newDisassociateTransitGatewayPolicyTable
+--
+--         , requestDisassociateTransitGatewayRouteTable $
+--             newDisassociateTransitGatewayRouteTable
+--
+--         , requestDisassociateTrunkInterface $
+--             newDisassociateTrunkInterface
+--
+--         , requestDisassociateVpcCidrBlock $
+--             newDisassociateVpcCidrBlock
+--
+--         , requestEnableAddressTransfer $
+--             newEnableAddressTransfer
+--
+--         , requestEnableAwsNetworkPerformanceMetricSubscription $
+--             newEnableAwsNetworkPerformanceMetricSubscription
+--
+--         , requestEnableEbsEncryptionByDefault $
+--             newEnableEbsEncryptionByDefault
+--
+--         , requestEnableFastLaunch $
+--             newEnableFastLaunch
+--
+--         , requestEnableFastSnapshotRestores $
+--             newEnableFastSnapshotRestores
+--
+--         , requestEnableImageDeprecation $
+--             newEnableImageDeprecation
+--
+--         , requestEnableIpamOrganizationAdminAccount $
+--             newEnableIpamOrganizationAdminAccount
+--
+--         , requestEnableReachabilityAnalyzerOrganizationSharing $
+--             newEnableReachabilityAnalyzerOrganizationSharing
+--
+--         , requestEnableSerialConsoleAccess $
+--             newEnableSerialConsoleAccess
+--
+--         , requestEnableTransitGatewayRouteTablePropagation $
+--             newEnableTransitGatewayRouteTablePropagation
+--
+--         , requestEnableVgwRoutePropagation $
+--             newEnableVgwRoutePropagation
+--
+--         , requestEnableVolumeIO $
+--             newEnableVolumeIO
+--
+--         , requestEnableVpcClassicLink $
+--             newEnableVpcClassicLink
+--
+--         , requestEnableVpcClassicLinkDnsSupport $
+--             newEnableVpcClassicLinkDnsSupport
+--
+--         , requestExportClientVpnClientCertificateRevocationList $
+--             newExportClientVpnClientCertificateRevocationList
+--
+--         , requestExportClientVpnClientConfiguration $
+--             newExportClientVpnClientConfiguration
+--
+--         , requestExportImage $
+--             newExportImage
+--
+--         , requestExportTransitGatewayRoutes $
+--             newExportTransitGatewayRoutes
+--
+--         , requestGetAssociatedEnclaveCertificateIamRoles $
+--             newGetAssociatedEnclaveCertificateIamRoles
+--
+--         , requestGetAssociatedIpv6PoolCidrs $
+--             newGetAssociatedIpv6PoolCidrs
+--
+--         , requestGetAwsNetworkPerformanceData $
+--             newGetAwsNetworkPerformanceData
+--
+--         , requestGetCapacityReservationUsage $
+--             newGetCapacityReservationUsage
+--
+--         , requestGetCoipPoolUsage $
+--             newGetCoipPoolUsage
+--
+--         , requestGetConsoleOutput $
+--             newGetConsoleOutput
+--
+--         , requestGetConsoleScreenshot $
+--             newGetConsoleScreenshot
+--
+--         , requestGetDefaultCreditSpecification $
+--             newGetDefaultCreditSpecification
+--
+--         , requestGetEbsDefaultKmsKeyId $
+--             newGetEbsDefaultKmsKeyId
+--
+--         , requestGetEbsEncryptionByDefault $
+--             newGetEbsEncryptionByDefault
+--
+--         , requestGetFlowLogsIntegrationTemplate $
+--             newGetFlowLogsIntegrationTemplate
+--
+--         , requestGetGroupsForCapacityReservation $
+--             newGetGroupsForCapacityReservation
+--
+--         , requestGetHostReservationPurchasePreview $
+--             newGetHostReservationPurchasePreview
+--
+--         , requestGetInstanceTypesFromInstanceRequirements $
+--             newGetInstanceTypesFromInstanceRequirements
+--
+--         , requestGetInstanceUefiData $
+--             newGetInstanceUefiData
+--
+--         , requestGetIpamAddressHistory $
+--             newGetIpamAddressHistory
+--
+--         , requestGetIpamPoolAllocations $
+--             newGetIpamPoolAllocations
+--
+--         , requestGetIpamPoolCidrs $
+--             newGetIpamPoolCidrs
+--
+--         , requestGetIpamResourceCidrs $
+--             newGetIpamResourceCidrs
+--
+--         , requestGetLaunchTemplateData $
+--             newGetLaunchTemplateData
+--
+--         , requestGetManagedPrefixListAssociations $
+--             newGetManagedPrefixListAssociations
+--
+--         , requestGetManagedPrefixListEntries $
+--             newGetManagedPrefixListEntries
+--
+--         , requestGetNetworkInsightsAccessScopeAnalysisFindings $
+--             newGetNetworkInsightsAccessScopeAnalysisFindings
+--
+--         , requestGetNetworkInsightsAccessScopeContent $
+--             newGetNetworkInsightsAccessScopeContent
+--
+--         , requestGetPasswordData $
+--             newGetPasswordData
+--
+--         , requestGetReservedInstancesExchangeQuote $
+--             newGetReservedInstancesExchangeQuote
+--
+--         , requestGetSerialConsoleAccessStatus $
+--             newGetSerialConsoleAccessStatus
+--
+--         , requestGetSpotPlacementScores $
+--             newGetSpotPlacementScores
+--
+--         , requestGetSubnetCidrReservations $
+--             newGetSubnetCidrReservations
+--
+--         , requestGetTransitGatewayAttachmentPropagations $
+--             newGetTransitGatewayAttachmentPropagations
+--
+--         , requestGetTransitGatewayMulticastDomainAssociations $
+--             newGetTransitGatewayMulticastDomainAssociations
+--
+--         , requestGetTransitGatewayPolicyTableAssociations $
+--             newGetTransitGatewayPolicyTableAssociations
+--
+--         , requestGetTransitGatewayPolicyTableEntries $
+--             newGetTransitGatewayPolicyTableEntries
+--
+--         , requestGetTransitGatewayPrefixListReferences $
+--             newGetTransitGatewayPrefixListReferences
+--
+--         , requestGetTransitGatewayRouteTableAssociations $
+--             newGetTransitGatewayRouteTableAssociations
+--
+--         , requestGetTransitGatewayRouteTablePropagations $
+--             newGetTransitGatewayRouteTablePropagations
+--
+--         , requestGetVerifiedAccessEndpointPolicy $
+--             newGetVerifiedAccessEndpointPolicy
+--
+--         , requestGetVerifiedAccessGroupPolicy $
+--             newGetVerifiedAccessGroupPolicy
+--
+--         , requestGetVpnConnectionDeviceSampleConfiguration $
+--             newGetVpnConnectionDeviceSampleConfiguration
+--
+--         , requestGetVpnConnectionDeviceTypes $
+--             newGetVpnConnectionDeviceTypes
+--
+--         , requestImportClientVpnClientCertificateRevocationList $
+--             newImportClientVpnClientCertificateRevocationList
+--
+--         , requestImportImage $
+--             newImportImage
+--
+--         , requestImportInstance $
+--             newImportInstance
+--
+--         , requestImportKeyPair $
+--             newImportKeyPair
+--
+--         , requestImportSnapshot $
+--             newImportSnapshot
+--
+--         , requestImportVolume $
+--             newImportVolume
+--
+--         , requestListImagesInRecycleBin $
+--             newListImagesInRecycleBin
+--
+--         , requestListSnapshotsInRecycleBin $
+--             newListSnapshotsInRecycleBin
+--
+--         , requestModifyAddressAttribute $
+--             newModifyAddressAttribute
+--
+--         , requestModifyAvailabilityZoneGroup $
+--             newModifyAvailabilityZoneGroup
+--
+--         , requestModifyCapacityReservation $
+--             newModifyCapacityReservation
+--
+--         , requestModifyCapacityReservationFleet $
+--             newModifyCapacityReservationFleet
+--
+--         , requestModifyClientVpnEndpoint $
+--             newModifyClientVpnEndpoint
+--
+--         , requestModifyDefaultCreditSpecification $
+--             newModifyDefaultCreditSpecification
+--
+--         , requestModifyEbsDefaultKmsKeyId $
+--             newModifyEbsDefaultKmsKeyId
+--
+--         , requestModifyFleet $
+--             newModifyFleet
+--
+--         , requestModifyFpgaImageAttribute $
+--             newModifyFpgaImageAttribute
+--
+--         , requestModifyHosts $
+--             newModifyHosts
+--
+--         , requestModifyIdFormat $
+--             newModifyIdFormat
+--
+--         , requestModifyIdentityIdFormat $
+--             newModifyIdentityIdFormat
+--
+--         , requestModifyImageAttribute $
+--             newModifyImageAttribute
+--
+--         , requestModifyInstanceAttribute $
+--             newModifyInstanceAttribute
+--
+--         , requestModifyInstanceCapacityReservationAttributes $
+--             newModifyInstanceCapacityReservationAttributes
+--
+--         , requestModifyInstanceCreditSpecification $
+--             newModifyInstanceCreditSpecification
+--
+--         , requestModifyInstanceEventStartTime $
+--             newModifyInstanceEventStartTime
+--
+--         , requestModifyInstanceEventWindow $
+--             newModifyInstanceEventWindow
+--
+--         , requestModifyInstanceMaintenanceOptions $
+--             newModifyInstanceMaintenanceOptions
+--
+--         , requestModifyInstanceMetadataOptions $
+--             newModifyInstanceMetadataOptions
+--
+--         , requestModifyInstancePlacement $
+--             newModifyInstancePlacement
+--
+--         , requestModifyIpam $
+--             newModifyIpam
+--
+--         , requestModifyIpamPool $
+--             newModifyIpamPool
+--
+--         , requestModifyIpamResourceCidr $
+--             newModifyIpamResourceCidr
+--
+--         , requestModifyIpamScope $
+--             newModifyIpamScope
+--
+--         , requestModifyLaunchTemplate $
+--             newModifyLaunchTemplate
+--
+--         , requestModifyLocalGatewayRoute $
+--             newModifyLocalGatewayRoute
+--
+--         , requestModifyManagedPrefixList $
+--             newModifyManagedPrefixList
+--
+--         , requestModifyNetworkInterfaceAttribute $
+--             newModifyNetworkInterfaceAttribute
+--
+--         , requestModifyPrivateDnsNameOptions $
+--             newModifyPrivateDnsNameOptions
+--
+--         , requestModifyReservedInstances $
+--             newModifyReservedInstances
+--
+--         , requestModifySecurityGroupRules $
+--             newModifySecurityGroupRules
+--
+--         , requestModifySnapshotAttribute $
+--             newModifySnapshotAttribute
+--
+--         , requestModifySnapshotTier $
+--             newModifySnapshotTier
+--
+--         , requestModifySpotFleetRequest $
+--             newModifySpotFleetRequest
+--
+--         , requestModifySubnetAttribute $
+--             newModifySubnetAttribute
+--
+--         , requestModifyTrafficMirrorFilterNetworkServices $
+--             newModifyTrafficMirrorFilterNetworkServices
+--
+--         , requestModifyTrafficMirrorFilterRule $
+--             newModifyTrafficMirrorFilterRule
+--
+--         , requestModifyTrafficMirrorSession $
+--             newModifyTrafficMirrorSession
+--
+--         , requestModifyTransitGateway $
+--             newModifyTransitGateway
+--
+--         , requestModifyTransitGatewayPrefixListReference $
+--             newModifyTransitGatewayPrefixListReference
+--
+--         , requestModifyTransitGatewayVpcAttachment $
+--             newModifyTransitGatewayVpcAttachment
+--
+--         , requestModifyVerifiedAccessEndpoint $
+--             newModifyVerifiedAccessEndpoint
+--
+--         , requestModifyVerifiedAccessEndpointPolicy $
+--             newModifyVerifiedAccessEndpointPolicy
+--
+--         , requestModifyVerifiedAccessGroup $
+--             newModifyVerifiedAccessGroup
+--
+--         , requestModifyVerifiedAccessGroupPolicy $
+--             newModifyVerifiedAccessGroupPolicy
+--
+--         , requestModifyVerifiedAccessInstance $
+--             newModifyVerifiedAccessInstance
+--
+--         , requestModifyVerifiedAccessInstanceLoggingConfiguration $
+--             newModifyVerifiedAccessInstanceLoggingConfiguration
+--
+--         , requestModifyVerifiedAccessTrustProvider $
+--             newModifyVerifiedAccessTrustProvider
+--
+--         , requestModifyVolume $
+--             newModifyVolume
+--
+--         , requestModifyVolumeAttribute $
+--             newModifyVolumeAttribute
+--
+--         , requestModifyVpcAttribute $
+--             newModifyVpcAttribute
+--
+--         , requestModifyVpcEndpoint $
+--             newModifyVpcEndpoint
+--
+--         , requestModifyVpcEndpointConnectionNotification $
+--             newModifyVpcEndpointConnectionNotification
+--
+--         , requestModifyVpcEndpointServiceConfiguration $
+--             newModifyVpcEndpointServiceConfiguration
+--
+--         , requestModifyVpcEndpointServicePayerResponsibility $
+--             newModifyVpcEndpointServicePayerResponsibility
+--
+--         , requestModifyVpcEndpointServicePermissions $
+--             newModifyVpcEndpointServicePermissions
+--
+--         , requestModifyVpcPeeringConnectionOptions $
+--             newModifyVpcPeeringConnectionOptions
+--
+--         , requestModifyVpcTenancy $
+--             newModifyVpcTenancy
+--
+--         , requestModifyVpnConnection $
+--             newModifyVpnConnection
+--
+--         , requestModifyVpnConnectionOptions $
+--             newModifyVpnConnectionOptions
+--
+--         , requestModifyVpnTunnelCertificate $
+--             newModifyVpnTunnelCertificate
+--
+--         , requestModifyVpnTunnelOptions $
+--             newModifyVpnTunnelOptions
+--
+--         , requestMonitorInstances $
+--             newMonitorInstances
+--
+--         , requestMoveAddressToVpc $
+--             newMoveAddressToVpc
+--
+--         , requestMoveByoipCidrToIpam $
+--             newMoveByoipCidrToIpam
+--
+--         , requestProvisionByoipCidr $
+--             newProvisionByoipCidr
+--
+--         , requestProvisionIpamPoolCidr $
+--             newProvisionIpamPoolCidr
+--
+--         , requestProvisionPublicIpv4PoolCidr $
+--             newProvisionPublicIpv4PoolCidr
+--
+--         , requestPurchaseHostReservation $
+--             newPurchaseHostReservation
+--
+--         , requestPurchaseReservedInstancesOffering $
+--             newPurchaseReservedInstancesOffering
+--
+--         , requestPurchaseScheduledInstances $
+--             newPurchaseScheduledInstances
+--
+--         , requestRebootInstances $
+--             newRebootInstances
+--
+--         , requestRegisterImage $
+--             newRegisterImage
+--
+--         , requestRegisterInstanceEventNotificationAttributes $
+--             newRegisterInstanceEventNotificationAttributes
+--
+--         , requestRegisterTransitGatewayMulticastGroupMembers $
+--             newRegisterTransitGatewayMulticastGroupMembers
+--
+--         , requestRegisterTransitGatewayMulticastGroupSources $
+--             newRegisterTransitGatewayMulticastGroupSources
+--
+--         , requestRejectTransitGatewayMulticastDomainAssociations $
+--             newRejectTransitGatewayMulticastDomainAssociations
+--
+--         , requestRejectTransitGatewayPeeringAttachment $
+--             newRejectTransitGatewayPeeringAttachment
+--
+--         , requestRejectTransitGatewayVpcAttachment $
+--             newRejectTransitGatewayVpcAttachment
+--
+--         , requestRejectVpcEndpointConnections $
+--             newRejectVpcEndpointConnections
+--
+--         , requestRejectVpcPeeringConnection $
+--             newRejectVpcPeeringConnection
+--
+--         , requestReleaseAddress $
+--             newReleaseAddress
+--
+--         , requestReleaseHosts $
+--             newReleaseHosts
+--
+--         , requestReleaseIpamPoolAllocation $
+--             newReleaseIpamPoolAllocation
+--
+--         , requestReplaceIamInstanceProfileAssociation $
+--             newReplaceIamInstanceProfileAssociation
+--
+--         , requestReplaceNetworkAclAssociation $
+--             newReplaceNetworkAclAssociation
+--
+--         , requestReplaceNetworkAclEntry $
+--             newReplaceNetworkAclEntry
+--
+--         , requestReplaceRoute $
+--             newReplaceRoute
+--
+--         , requestReplaceRouteTableAssociation $
+--             newReplaceRouteTableAssociation
+--
+--         , requestReplaceTransitGatewayRoute $
+--             newReplaceTransitGatewayRoute
+--
+--         , requestReportInstanceStatus $
+--             newReportInstanceStatus
+--
+--         , requestRequestSpotFleet $
+--             newRequestSpotFleet
+--
+--         , requestRequestSpotInstances $
+--             newRequestSpotInstances
+--
+--         , requestResetAddressAttribute $
+--             newResetAddressAttribute
+--
+--         , requestResetEbsDefaultKmsKeyId $
+--             newResetEbsDefaultKmsKeyId
+--
+--         , requestResetFpgaImageAttribute $
+--             newResetFpgaImageAttribute
+--
+--         , requestResetImageAttribute $
+--             newResetImageAttribute
+--
+--         , requestResetInstanceAttribute $
+--             newResetInstanceAttribute
+--
+--         , requestResetNetworkInterfaceAttribute $
+--             newResetNetworkInterfaceAttribute
+--
+--         , requestResetSnapshotAttribute $
+--             newResetSnapshotAttribute
+--
+--         , requestRestoreAddressToClassic $
+--             newRestoreAddressToClassic
+--
+--         , requestRestoreImageFromRecycleBin $
+--             newRestoreImageFromRecycleBin
+--
+--         , requestRestoreManagedPrefixListVersion $
+--             newRestoreManagedPrefixListVersion
+--
+--         , requestRestoreSnapshotFromRecycleBin $
+--             newRestoreSnapshotFromRecycleBin
+--
+--         , requestRestoreSnapshotTier $
+--             newRestoreSnapshotTier
+--
+--         , requestRevokeClientVpnIngress $
+--             newRevokeClientVpnIngress
+--
+--         , requestRevokeSecurityGroupEgress $
+--             newRevokeSecurityGroupEgress
+--
+--         , requestRevokeSecurityGroupIngress $
+--             newRevokeSecurityGroupIngress
+--
+--         , requestRunInstances $
+--             newRunInstances
+--
+--         , requestRunScheduledInstances $
+--             newRunScheduledInstances
+--
+--         , requestSearchLocalGatewayRoutes $
+--             newSearchLocalGatewayRoutes
+--
+--         , requestSearchTransitGatewayMulticastGroups $
+--             newSearchTransitGatewayMulticastGroups
+--
+--         , requestSearchTransitGatewayRoutes $
+--             newSearchTransitGatewayRoutes
+--
+--         , requestSendDiagnosticInterrupt $
+--             newSendDiagnosticInterrupt
+--
+--         , requestStartInstances $
+--             newStartInstances
+--
+--         , requestStartNetworkInsightsAccessScopeAnalysis $
+--             newStartNetworkInsightsAccessScopeAnalysis
+--
+--         , requestStartNetworkInsightsAnalysis $
+--             newStartNetworkInsightsAnalysis
+--
+--         , requestStartVpcEndpointServicePrivateDnsVerification $
+--             newStartVpcEndpointServicePrivateDnsVerification
+--
+--         , requestStopInstances $
+--             newStopInstances
+--
+--         , requestTerminateClientVpnConnections $
+--             newTerminateClientVpnConnections
+--
+--         , requestTerminateInstances $
+--             newTerminateInstances
+--
+--         , requestUnassignIpv6Addresses $
+--             newUnassignIpv6Addresses
+--
+--         , requestUnassignPrivateIpAddresses $
+--             newUnassignPrivateIpAddresses
+--
+--         , requestUnmonitorInstances $
+--             newUnmonitorInstances
+--
+--         , requestUpdateSecurityGroupRuleDescriptionsEgress $
+--             newUpdateSecurityGroupRuleDescriptionsEgress
+--
+--         , requestUpdateSecurityGroupRuleDescriptionsIngress $
+--             newUpdateSecurityGroupRuleDescriptionsIngress
+--
+--         , requestWithdrawByoipCidr $
+--             newWithdrawByoipCidr
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAcceptAddressTransfer $
+--             newAcceptAddressTransferResponse
+--
+--         , responseAcceptReservedInstancesExchangeQuote $
+--             newAcceptReservedInstancesExchangeQuoteResponse
+--
+--         , responseAcceptTransitGatewayMulticastDomainAssociations $
+--             newAcceptTransitGatewayMulticastDomainAssociationsResponse
+--
+--         , responseAcceptTransitGatewayPeeringAttachment $
+--             newAcceptTransitGatewayPeeringAttachmentResponse
+--
+--         , responseAcceptTransitGatewayVpcAttachment $
+--             newAcceptTransitGatewayVpcAttachmentResponse
+--
+--         , responseAcceptVpcEndpointConnections $
+--             newAcceptVpcEndpointConnectionsResponse
+--
+--         , responseAcceptVpcPeeringConnection $
+--             newAcceptVpcPeeringConnectionResponse
+--
+--         , responseAdvertiseByoipCidr $
+--             newAdvertiseByoipCidrResponse
+--
+--         , responseAllocateAddress $
+--             newAllocateAddressResponse
+--
+--         , responseAllocateHosts $
+--             newAllocateHostsResponse
+--
+--         , responseAllocateIpamPoolCidr $
+--             newAllocateIpamPoolCidrResponse
+--
+--         , responseApplySecurityGroupsToClientVpnTargetNetwork $
+--             newApplySecurityGroupsToClientVpnTargetNetworkResponse
+--
+--         , responseAssignIpv6Addresses $
+--             newAssignIpv6AddressesResponse
+--
+--         , responseAssignPrivateIpAddresses $
+--             newAssignPrivateIpAddressesResponse
+--
+--         , responseAssociateAddress $
+--             newAssociateAddressResponse
+--
+--         , responseAssociateClientVpnTargetNetwork $
+--             newAssociateClientVpnTargetNetworkResponse
+--
+--         , responseAssociateDhcpOptions $
+--             newAssociateDhcpOptionsResponse
+--
+--         , responseAssociateEnclaveCertificateIamRole $
+--             newAssociateEnclaveCertificateIamRoleResponse
+--
+--         , responseAssociateIamInstanceProfile $
+--             newAssociateIamInstanceProfileResponse
+--
+--         , responseAssociateInstanceEventWindow $
+--             newAssociateInstanceEventWindowResponse
+--
+--         , responseAssociateRouteTable $
+--             newAssociateRouteTableResponse
+--
+--         , responseAssociateSubnetCidrBlock $
+--             newAssociateSubnetCidrBlockResponse
+--
+--         , responseAssociateTransitGatewayMulticastDomain $
+--             newAssociateTransitGatewayMulticastDomainResponse
+--
+--         , responseAssociateTransitGatewayPolicyTable $
+--             newAssociateTransitGatewayPolicyTableResponse
+--
+--         , responseAssociateTransitGatewayRouteTable $
+--             newAssociateTransitGatewayRouteTableResponse
+--
+--         , responseAssociateTrunkInterface $
+--             newAssociateTrunkInterfaceResponse
+--
+--         , responseAssociateVpcCidrBlock $
+--             newAssociateVpcCidrBlockResponse
+--
+--         , responseAttachClassicLinkVpc $
+--             newAttachClassicLinkVpcResponse
+--
+--         , responseAttachInternetGateway $
+--             newAttachInternetGatewayResponse
+--
+--         , responseAttachNetworkInterface $
+--             newAttachNetworkInterfaceResponse
+--
+--         , responseAttachVerifiedAccessTrustProvider $
+--             newAttachVerifiedAccessTrustProviderResponse
+--
+--         , responseAttachVolume $
+--             newVolumeAttachment
+--
+--         , responseAttachVpnGateway $
+--             newAttachVpnGatewayResponse
+--
+--         , responseAuthorizeClientVpnIngress $
+--             newAuthorizeClientVpnIngressResponse
+--
+--         , responseAuthorizeSecurityGroupEgress $
+--             newAuthorizeSecurityGroupEgressResponse
+--
+--         , responseAuthorizeSecurityGroupIngress $
+--             newAuthorizeSecurityGroupIngressResponse
+--
+--         , responseBundleInstance $
+--             newBundleInstanceResponse
+--
+--         , responseCancelBundleTask $
+--             newCancelBundleTaskResponse
+--
+--         , responseCancelCapacityReservation $
+--             newCancelCapacityReservationResponse
+--
+--         , responseCancelCapacityReservationFleets $
+--             newCancelCapacityReservationFleetsResponse
+--
+--         , responseCancelConversionTask $
+--             newCancelConversionTaskResponse
+--
+--         , responseCancelExportTask $
+--             newCancelExportTaskResponse
+--
+--         , responseCancelImageLaunchPermission $
+--             newCancelImageLaunchPermissionResponse
+--
+--         , responseCancelImportTask $
+--             newCancelImportTaskResponse
+--
+--         , responseCancelReservedInstancesListing $
+--             newCancelReservedInstancesListingResponse
+--
+--         , responseCancelSpotFleetRequests $
+--             newCancelSpotFleetRequestsResponse
+--
+--         , responseCancelSpotInstanceRequests $
+--             newCancelSpotInstanceRequestsResponse
+--
+--         , responseConfirmProductInstance $
+--             newConfirmProductInstanceResponse
+--
+--         , responseCopyFpgaImage $
+--             newCopyFpgaImageResponse
+--
+--         , responseCopyImage $
+--             newCopyImageResponse
+--
+--         , responseCopySnapshot $
+--             newCopySnapshotResponse
+--
+--         , responseCreateCapacityReservation $
+--             newCreateCapacityReservationResponse
+--
+--         , responseCreateCapacityReservationFleet $
+--             newCreateCapacityReservationFleetResponse
+--
+--         , responseCreateCarrierGateway $
+--             newCreateCarrierGatewayResponse
+--
+--         , responseCreateClientVpnEndpoint $
+--             newCreateClientVpnEndpointResponse
+--
+--         , responseCreateClientVpnRoute $
+--             newCreateClientVpnRouteResponse
+--
+--         , responseCreateCoipCidr $
+--             newCreateCoipCidrResponse
+--
+--         , responseCreateCoipPool $
+--             newCreateCoipPoolResponse
+--
+--         , responseCreateCustomerGateway $
+--             newCreateCustomerGatewayResponse
+--
+--         , responseCreateDefaultSubnet $
+--             newCreateDefaultSubnetResponse
+--
+--         , responseCreateDefaultVpc $
+--             newCreateDefaultVpcResponse
+--
+--         , responseCreateDhcpOptions $
+--             newCreateDhcpOptionsResponse
+--
+--         , responseCreateEgressOnlyInternetGateway $
+--             newCreateEgressOnlyInternetGatewayResponse
+--
+--         , responseCreateFleet $
+--             newCreateFleetResponse
+--
+--         , responseCreateFlowLogs $
+--             newCreateFlowLogsResponse
+--
+--         , responseCreateFpgaImage $
+--             newCreateFpgaImageResponse
+--
+--         , responseCreateImage $
+--             newCreateImageResponse
+--
+--         , responseCreateInstanceEventWindow $
+--             newCreateInstanceEventWindowResponse
+--
+--         , responseCreateInstanceExportTask $
+--             newCreateInstanceExportTaskResponse
+--
+--         , responseCreateInternetGateway $
+--             newCreateInternetGatewayResponse
+--
+--         , responseCreateIpam $
+--             newCreateIpamResponse
+--
+--         , responseCreateIpamPool $
+--             newCreateIpamPoolResponse
+--
+--         , responseCreateIpamScope $
+--             newCreateIpamScopeResponse
+--
+--         , responseCreateKeyPair $
+--             newCreateKeyPairResponse
+--
+--         , responseCreateLaunchTemplate $
+--             newCreateLaunchTemplateResponse
+--
+--         , responseCreateLaunchTemplateVersion $
+--             newCreateLaunchTemplateVersionResponse
+--
+--         , responseCreateLocalGatewayRoute $
+--             newCreateLocalGatewayRouteResponse
+--
+--         , responseCreateLocalGatewayRouteTable $
+--             newCreateLocalGatewayRouteTableResponse
+--
+--         , responseCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation $
+--             newCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+--
+--         , responseCreateLocalGatewayRouteTableVpcAssociation $
+--             newCreateLocalGatewayRouteTableVpcAssociationResponse
+--
+--         , responseCreateManagedPrefixList $
+--             newCreateManagedPrefixListResponse
+--
+--         , responseCreateNatGateway $
+--             newCreateNatGatewayResponse
+--
+--         , responseCreateNetworkAcl $
+--             newCreateNetworkAclResponse
+--
+--         , responseCreateNetworkAclEntry $
+--             newCreateNetworkAclEntryResponse
+--
+--         , responseCreateNetworkInsightsAccessScope $
+--             newCreateNetworkInsightsAccessScopeResponse
+--
+--         , responseCreateNetworkInsightsPath $
+--             newCreateNetworkInsightsPathResponse
+--
+--         , responseCreateNetworkInterface $
+--             newCreateNetworkInterfaceResponse
+--
+--         , responseCreateNetworkInterfacePermission $
+--             newCreateNetworkInterfacePermissionResponse
+--
+--         , responseCreatePlacementGroup $
+--             newCreatePlacementGroupResponse
+--
+--         , responseCreatePublicIpv4Pool $
+--             newCreatePublicIpv4PoolResponse
+--
+--         , responseCreateReplaceRootVolumeTask $
+--             newCreateReplaceRootVolumeTaskResponse
+--
+--         , responseCreateReservedInstancesListing $
+--             newCreateReservedInstancesListingResponse
+--
+--         , responseCreateRestoreImageTask $
+--             newCreateRestoreImageTaskResponse
+--
+--         , responseCreateRoute $
+--             newCreateRouteResponse
+--
+--         , responseCreateRouteTable $
+--             newCreateRouteTableResponse
+--
+--         , responseCreateSecurityGroup $
+--             newCreateSecurityGroupResponse
+--
+--         , responseCreateSnapshot $
+--             newSnapshot
+--
+--         , responseCreateSnapshots $
+--             newCreateSnapshotsResponse
+--
+--         , responseCreateSpotDatafeedSubscription $
+--             newCreateSpotDatafeedSubscriptionResponse
+--
+--         , responseCreateStoreImageTask $
+--             newCreateStoreImageTaskResponse
+--
+--         , responseCreateSubnet $
+--             newCreateSubnetResponse
+--
+--         , responseCreateSubnetCidrReservation $
+--             newCreateSubnetCidrReservationResponse
+--
+--         , responseCreateTags $
+--             newCreateTagsResponse
+--
+--         , responseCreateTrafficMirrorFilter $
+--             newCreateTrafficMirrorFilterResponse
+--
+--         , responseCreateTrafficMirrorFilterRule $
+--             newCreateTrafficMirrorFilterRuleResponse
+--
+--         , responseCreateTrafficMirrorSession $
+--             newCreateTrafficMirrorSessionResponse
+--
+--         , responseCreateTrafficMirrorTarget $
+--             newCreateTrafficMirrorTargetResponse
+--
+--         , responseCreateTransitGateway $
+--             newCreateTransitGatewayResponse
+--
+--         , responseCreateTransitGatewayConnect $
+--             newCreateTransitGatewayConnectResponse
+--
+--         , responseCreateTransitGatewayConnectPeer $
+--             newCreateTransitGatewayConnectPeerResponse
+--
+--         , responseCreateTransitGatewayMulticastDomain $
+--             newCreateTransitGatewayMulticastDomainResponse
+--
+--         , responseCreateTransitGatewayPeeringAttachment $
+--             newCreateTransitGatewayPeeringAttachmentResponse
+--
+--         , responseCreateTransitGatewayPolicyTable $
+--             newCreateTransitGatewayPolicyTableResponse
+--
+--         , responseCreateTransitGatewayPrefixListReference $
+--             newCreateTransitGatewayPrefixListReferenceResponse
+--
+--         , responseCreateTransitGatewayRoute $
+--             newCreateTransitGatewayRouteResponse
+--
+--         , responseCreateTransitGatewayRouteTable $
+--             newCreateTransitGatewayRouteTableResponse
+--
+--         , responseCreateTransitGatewayRouteTableAnnouncement $
+--             newCreateTransitGatewayRouteTableAnnouncementResponse
+--
+--         , responseCreateTransitGatewayVpcAttachment $
+--             newCreateTransitGatewayVpcAttachmentResponse
+--
+--         , responseCreateVerifiedAccessEndpoint $
+--             newCreateVerifiedAccessEndpointResponse
+--
+--         , responseCreateVerifiedAccessGroup $
+--             newCreateVerifiedAccessGroupResponse
+--
+--         , responseCreateVerifiedAccessInstance $
+--             newCreateVerifiedAccessInstanceResponse
+--
+--         , responseCreateVerifiedAccessTrustProvider $
+--             newCreateVerifiedAccessTrustProviderResponse
+--
+--         , responseCreateVolume $
+--             newVolume
+--
+--         , responseCreateVpc $
+--             newCreateVpcResponse
+--
+--         , responseCreateVpcEndpoint $
+--             newCreateVpcEndpointResponse
+--
+--         , responseCreateVpcEndpointConnectionNotification $
+--             newCreateVpcEndpointConnectionNotificationResponse
+--
+--         , responseCreateVpcEndpointServiceConfiguration $
+--             newCreateVpcEndpointServiceConfigurationResponse
+--
+--         , responseCreateVpcPeeringConnection $
+--             newCreateVpcPeeringConnectionResponse
+--
+--         , responseCreateVpnConnection $
+--             newCreateVpnConnectionResponse
+--
+--         , responseCreateVpnConnectionRoute $
+--             newCreateVpnConnectionRouteResponse
+--
+--         , responseCreateVpnGateway $
+--             newCreateVpnGatewayResponse
+--
+--         , responseDeleteCarrierGateway $
+--             newDeleteCarrierGatewayResponse
+--
+--         , responseDeleteClientVpnEndpoint $
+--             newDeleteClientVpnEndpointResponse
+--
+--         , responseDeleteClientVpnRoute $
+--             newDeleteClientVpnRouteResponse
+--
+--         , responseDeleteCoipCidr $
+--             newDeleteCoipCidrResponse
+--
+--         , responseDeleteCoipPool $
+--             newDeleteCoipPoolResponse
+--
+--         , responseDeleteCustomerGateway $
+--             newDeleteCustomerGatewayResponse
+--
+--         , responseDeleteDhcpOptions $
+--             newDeleteDhcpOptionsResponse
+--
+--         , responseDeleteEgressOnlyInternetGateway $
+--             newDeleteEgressOnlyInternetGatewayResponse
+--
+--         , responseDeleteFleets $
+--             newDeleteFleetsResponse
+--
+--         , responseDeleteFlowLogs $
+--             newDeleteFlowLogsResponse
+--
+--         , responseDeleteFpgaImage $
+--             newDeleteFpgaImageResponse
+--
+--         , responseDeleteInstanceEventWindow $
+--             newDeleteInstanceEventWindowResponse
+--
+--         , responseDeleteInternetGateway $
+--             newDeleteInternetGatewayResponse
+--
+--         , responseDeleteIpam $
+--             newDeleteIpamResponse
+--
+--         , responseDeleteIpamPool $
+--             newDeleteIpamPoolResponse
+--
+--         , responseDeleteIpamScope $
+--             newDeleteIpamScopeResponse
+--
+--         , responseDeleteKeyPair $
+--             newDeleteKeyPairResponse
+--
+--         , responseDeleteLaunchTemplate $
+--             newDeleteLaunchTemplateResponse
+--
+--         , responseDeleteLaunchTemplateVersions $
+--             newDeleteLaunchTemplateVersionsResponse
+--
+--         , responseDeleteLocalGatewayRoute $
+--             newDeleteLocalGatewayRouteResponse
+--
+--         , responseDeleteLocalGatewayRouteTable $
+--             newDeleteLocalGatewayRouteTableResponse
+--
+--         , responseDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation $
+--             newDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse
+--
+--         , responseDeleteLocalGatewayRouteTableVpcAssociation $
+--             newDeleteLocalGatewayRouteTableVpcAssociationResponse
+--
+--         , responseDeleteManagedPrefixList $
+--             newDeleteManagedPrefixListResponse
+--
+--         , responseDeleteNatGateway $
+--             newDeleteNatGatewayResponse
+--
+--         , responseDeleteNetworkAcl $
+--             newDeleteNetworkAclResponse
+--
+--         , responseDeleteNetworkAclEntry $
+--             newDeleteNetworkAclEntryResponse
+--
+--         , responseDeleteNetworkInsightsAccessScope $
+--             newDeleteNetworkInsightsAccessScopeResponse
+--
+--         , responseDeleteNetworkInsightsAccessScopeAnalysis $
+--             newDeleteNetworkInsightsAccessScopeAnalysisResponse
+--
+--         , responseDeleteNetworkInsightsAnalysis $
+--             newDeleteNetworkInsightsAnalysisResponse
+--
+--         , responseDeleteNetworkInsightsPath $
+--             newDeleteNetworkInsightsPathResponse
+--
+--         , responseDeleteNetworkInterface $
+--             newDeleteNetworkInterfaceResponse
+--
+--         , responseDeleteNetworkInterfacePermission $
+--             newDeleteNetworkInterfacePermissionResponse
+--
+--         , responseDeletePlacementGroup $
+--             newDeletePlacementGroupResponse
+--
+--         , responseDeletePublicIpv4Pool $
+--             newDeletePublicIpv4PoolResponse
+--
+--         , responseDeleteQueuedReservedInstances $
+--             newDeleteQueuedReservedInstancesResponse
+--
+--         , responseDeleteRoute $
+--             newDeleteRouteResponse
+--
+--         , responseDeleteRouteTable $
+--             newDeleteRouteTableResponse
+--
+--         , responseDeleteSecurityGroup $
+--             newDeleteSecurityGroupResponse
+--
+--         , responseDeleteSnapshot $
+--             newDeleteSnapshotResponse
+--
+--         , responseDeleteSpotDatafeedSubscription $
+--             newDeleteSpotDatafeedSubscriptionResponse
+--
+--         , responseDeleteSubnet $
+--             newDeleteSubnetResponse
+--
+--         , responseDeleteSubnetCidrReservation $
+--             newDeleteSubnetCidrReservationResponse
+--
+--         , responseDeleteTags $
+--             newDeleteTagsResponse
+--
+--         , responseDeleteTrafficMirrorFilter $
+--             newDeleteTrafficMirrorFilterResponse
+--
+--         , responseDeleteTrafficMirrorFilterRule $
+--             newDeleteTrafficMirrorFilterRuleResponse
+--
+--         , responseDeleteTrafficMirrorSession $
+--             newDeleteTrafficMirrorSessionResponse
+--
+--         , responseDeleteTrafficMirrorTarget $
+--             newDeleteTrafficMirrorTargetResponse
+--
+--         , responseDeleteTransitGateway $
+--             newDeleteTransitGatewayResponse
+--
+--         , responseDeleteTransitGatewayConnect $
+--             newDeleteTransitGatewayConnectResponse
+--
+--         , responseDeleteTransitGatewayConnectPeer $
+--             newDeleteTransitGatewayConnectPeerResponse
+--
+--         , responseDeleteTransitGatewayMulticastDomain $
+--             newDeleteTransitGatewayMulticastDomainResponse
+--
+--         , responseDeleteTransitGatewayPeeringAttachment $
+--             newDeleteTransitGatewayPeeringAttachmentResponse
+--
+--         , responseDeleteTransitGatewayPolicyTable $
+--             newDeleteTransitGatewayPolicyTableResponse
+--
+--         , responseDeleteTransitGatewayPrefixListReference $
+--             newDeleteTransitGatewayPrefixListReferenceResponse
+--
+--         , responseDeleteTransitGatewayRoute $
+--             newDeleteTransitGatewayRouteResponse
+--
+--         , responseDeleteTransitGatewayRouteTable $
+--             newDeleteTransitGatewayRouteTableResponse
+--
+--         , responseDeleteTransitGatewayRouteTableAnnouncement $
+--             newDeleteTransitGatewayRouteTableAnnouncementResponse
+--
+--         , responseDeleteTransitGatewayVpcAttachment $
+--             newDeleteTransitGatewayVpcAttachmentResponse
+--
+--         , responseDeleteVerifiedAccessEndpoint $
+--             newDeleteVerifiedAccessEndpointResponse
+--
+--         , responseDeleteVerifiedAccessGroup $
+--             newDeleteVerifiedAccessGroupResponse
+--
+--         , responseDeleteVerifiedAccessInstance $
+--             newDeleteVerifiedAccessInstanceResponse
+--
+--         , responseDeleteVerifiedAccessTrustProvider $
+--             newDeleteVerifiedAccessTrustProviderResponse
+--
+--         , responseDeleteVolume $
+--             newDeleteVolumeResponse
+--
+--         , responseDeleteVpc $
+--             newDeleteVpcResponse
+--
+--         , responseDeleteVpcEndpointConnectionNotifications $
+--             newDeleteVpcEndpointConnectionNotificationsResponse
+--
+--         , responseDeleteVpcEndpointServiceConfigurations $
+--             newDeleteVpcEndpointServiceConfigurationsResponse
+--
+--         , responseDeleteVpcEndpoints $
+--             newDeleteVpcEndpointsResponse
+--
+--         , responseDeleteVpcPeeringConnection $
+--             newDeleteVpcPeeringConnectionResponse
+--
+--         , responseDeleteVpnConnection $
+--             newDeleteVpnConnectionResponse
+--
+--         , responseDeleteVpnConnectionRoute $
+--             newDeleteVpnConnectionRouteResponse
+--
+--         , responseDeleteVpnGateway $
+--             newDeleteVpnGatewayResponse
+--
+--         , responseDeprovisionByoipCidr $
+--             newDeprovisionByoipCidrResponse
+--
+--         , responseDeprovisionIpamPoolCidr $
+--             newDeprovisionIpamPoolCidrResponse
+--
+--         , responseDeprovisionPublicIpv4PoolCidr $
+--             newDeprovisionPublicIpv4PoolCidrResponse
+--
+--         , responseDeregisterImage $
+--             newDeregisterImageResponse
+--
+--         , responseDeregisterInstanceEventNotificationAttributes $
+--             newDeregisterInstanceEventNotificationAttributesResponse
+--
+--         , responseDeregisterTransitGatewayMulticastGroupMembers $
+--             newDeregisterTransitGatewayMulticastGroupMembersResponse
+--
+--         , responseDeregisterTransitGatewayMulticastGroupSources $
+--             newDeregisterTransitGatewayMulticastGroupSourcesResponse
+--
+--         , responseDescribeAccountAttributes $
+--             newDescribeAccountAttributesResponse
+--
+--         , responseDescribeAddressTransfers $
+--             newDescribeAddressTransfersResponse
+--
+--         , responseDescribeAddresses $
+--             newDescribeAddressesResponse
+--
+--         , responseDescribeAddressesAttribute $
+--             newDescribeAddressesAttributeResponse
+--
+--         , responseDescribeAggregateIdFormat $
+--             newDescribeAggregateIdFormatResponse
+--
+--         , responseDescribeAvailabilityZones $
+--             newDescribeAvailabilityZonesResponse
+--
+--         , responseDescribeAwsNetworkPerformanceMetricSubscriptions $
+--             newDescribeAwsNetworkPerformanceMetricSubscriptionsResponse
+--
+--         , responseDescribeBundleTasks $
+--             newDescribeBundleTasksResponse
+--
+--         , responseDescribeByoipCidrs $
+--             newDescribeByoipCidrsResponse
+--
+--         , responseDescribeCapacityReservationFleets $
+--             newDescribeCapacityReservationFleetsResponse
+--
+--         , responseDescribeCapacityReservations $
+--             newDescribeCapacityReservationsResponse
+--
+--         , responseDescribeCarrierGateways $
+--             newDescribeCarrierGatewaysResponse
+--
+--         , responseDescribeClassicLinkInstances $
+--             newDescribeClassicLinkInstancesResponse
+--
+--         , responseDescribeClientVpnAuthorizationRules $
+--             newDescribeClientVpnAuthorizationRulesResponse
+--
+--         , responseDescribeClientVpnConnections $
+--             newDescribeClientVpnConnectionsResponse
+--
+--         , responseDescribeClientVpnEndpoints $
+--             newDescribeClientVpnEndpointsResponse
+--
+--         , responseDescribeClientVpnRoutes $
+--             newDescribeClientVpnRoutesResponse
+--
+--         , responseDescribeClientVpnTargetNetworks $
+--             newDescribeClientVpnTargetNetworksResponse
+--
+--         , responseDescribeCoipPools $
+--             newDescribeCoipPoolsResponse
+--
+--         , responseDescribeConversionTasks $
+--             newDescribeConversionTasksResponse
+--
+--         , responseDescribeCustomerGateways $
+--             newDescribeCustomerGatewaysResponse
+--
+--         , responseDescribeDhcpOptions $
+--             newDescribeDhcpOptionsResponse
+--
+--         , responseDescribeEgressOnlyInternetGateways $
+--             newDescribeEgressOnlyInternetGatewaysResponse
+--
+--         , responseDescribeElasticGpus $
+--             newDescribeElasticGpusResponse
+--
+--         , responseDescribeExportImageTasks $
+--             newDescribeExportImageTasksResponse
+--
+--         , responseDescribeExportTasks $
+--             newDescribeExportTasksResponse
+--
+--         , responseDescribeFastLaunchImages $
+--             newDescribeFastLaunchImagesResponse
+--
+--         , responseDescribeFastSnapshotRestores $
+--             newDescribeFastSnapshotRestoresResponse
+--
+--         , responseDescribeFleetHistory $
+--             newDescribeFleetHistoryResponse
+--
+--         , responseDescribeFleetInstances $
+--             newDescribeFleetInstancesResponse
+--
+--         , responseDescribeFleets $
+--             newDescribeFleetsResponse
+--
+--         , responseDescribeFlowLogs $
+--             newDescribeFlowLogsResponse
+--
+--         , responseDescribeFpgaImageAttribute $
+--             newDescribeFpgaImageAttributeResponse
+--
+--         , responseDescribeFpgaImages $
+--             newDescribeFpgaImagesResponse
+--
+--         , responseDescribeHostReservationOfferings $
+--             newDescribeHostReservationOfferingsResponse
+--
+--         , responseDescribeHostReservations $
+--             newDescribeHostReservationsResponse
+--
+--         , responseDescribeHosts $
+--             newDescribeHostsResponse
+--
+--         , responseDescribeIamInstanceProfileAssociations $
+--             newDescribeIamInstanceProfileAssociationsResponse
+--
+--         , responseDescribeIdFormat $
+--             newDescribeIdFormatResponse
+--
+--         , responseDescribeIdentityIdFormat $
+--             newDescribeIdentityIdFormatResponse
+--
+--         , responseDescribeImageAttribute $
+--             newDescribeImageAttributeResponse
+--
+--         , responseDescribeImages $
+--             newDescribeImagesResponse
+--
+--         , responseDescribeImportImageTasks $
+--             newDescribeImportImageTasksResponse
+--
+--         , responseDescribeImportSnapshotTasks $
+--             newDescribeImportSnapshotTasksResponse
+--
+--         , responseDescribeInstanceAttribute $
+--             newDescribeInstanceAttributeResponse
+--
+--         , responseDescribeInstanceCreditSpecifications $
+--             newDescribeInstanceCreditSpecificationsResponse
+--
+--         , responseDescribeInstanceEventNotificationAttributes $
+--             newDescribeInstanceEventNotificationAttributesResponse
+--
+--         , responseDescribeInstanceEventWindows $
+--             newDescribeInstanceEventWindowsResponse
+--
+--         , responseDescribeInstanceStatus $
+--             newDescribeInstanceStatusResponse
+--
+--         , responseDescribeInstanceTypeOfferings $
+--             newDescribeInstanceTypeOfferingsResponse
+--
+--         , responseDescribeInstanceTypes $
+--             newDescribeInstanceTypesResponse
+--
+--         , responseDescribeInstances $
+--             newDescribeInstancesResponse
+--
+--         , responseDescribeInternetGateways $
+--             newDescribeInternetGatewaysResponse
+--
+--         , responseDescribeIpamPools $
+--             newDescribeIpamPoolsResponse
+--
+--         , responseDescribeIpamScopes $
+--             newDescribeIpamScopesResponse
+--
+--         , responseDescribeIpams $
+--             newDescribeIpamsResponse
+--
+--         , responseDescribeIpv6Pools $
+--             newDescribeIpv6PoolsResponse
+--
+--         , responseDescribeKeyPairs $
+--             newDescribeKeyPairsResponse
+--
+--         , responseDescribeLaunchTemplateVersions $
+--             newDescribeLaunchTemplateVersionsResponse
+--
+--         , responseDescribeLaunchTemplates $
+--             newDescribeLaunchTemplatesResponse
+--
+--         , responseDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations $
+--             newDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse
+--
+--         , responseDescribeLocalGatewayRouteTableVpcAssociations $
+--             newDescribeLocalGatewayRouteTableVpcAssociationsResponse
+--
+--         , responseDescribeLocalGatewayRouteTables $
+--             newDescribeLocalGatewayRouteTablesResponse
+--
+--         , responseDescribeLocalGatewayVirtualInterfaceGroups $
+--             newDescribeLocalGatewayVirtualInterfaceGroupsResponse
+--
+--         , responseDescribeLocalGatewayVirtualInterfaces $
+--             newDescribeLocalGatewayVirtualInterfacesResponse
+--
+--         , responseDescribeLocalGateways $
+--             newDescribeLocalGatewaysResponse
+--
+--         , responseDescribeManagedPrefixLists $
+--             newDescribeManagedPrefixListsResponse
+--
+--         , responseDescribeMovingAddresses $
+--             newDescribeMovingAddressesResponse
+--
+--         , responseDescribeNatGateways $
+--             newDescribeNatGatewaysResponse
+--
+--         , responseDescribeNetworkAcls $
+--             newDescribeNetworkAclsResponse
+--
+--         , responseDescribeNetworkInsightsAccessScopeAnalyses $
+--             newDescribeNetworkInsightsAccessScopeAnalysesResponse
+--
+--         , responseDescribeNetworkInsightsAccessScopes $
+--             newDescribeNetworkInsightsAccessScopesResponse
+--
+--         , responseDescribeNetworkInsightsAnalyses $
+--             newDescribeNetworkInsightsAnalysesResponse
+--
+--         , responseDescribeNetworkInsightsPaths $
+--             newDescribeNetworkInsightsPathsResponse
+--
+--         , responseDescribeNetworkInterfaceAttribute $
+--             newDescribeNetworkInterfaceAttributeResponse
+--
+--         , responseDescribeNetworkInterfacePermissions $
+--             newDescribeNetworkInterfacePermissionsResponse
+--
+--         , responseDescribeNetworkInterfaces $
+--             newDescribeNetworkInterfacesResponse
+--
+--         , responseDescribePlacementGroups $
+--             newDescribePlacementGroupsResponse
+--
+--         , responseDescribePrefixLists $
+--             newDescribePrefixListsResponse
+--
+--         , responseDescribePrincipalIdFormat $
+--             newDescribePrincipalIdFormatResponse
+--
+--         , responseDescribePublicIpv4Pools $
+--             newDescribePublicIpv4PoolsResponse
+--
+--         , responseDescribeRegions $
+--             newDescribeRegionsResponse
+--
+--         , responseDescribeReplaceRootVolumeTasks $
+--             newDescribeReplaceRootVolumeTasksResponse
+--
+--         , responseDescribeReservedInstances $
+--             newDescribeReservedInstancesResponse
+--
+--         , responseDescribeReservedInstancesListings $
+--             newDescribeReservedInstancesListingsResponse
+--
+--         , responseDescribeReservedInstancesModifications $
+--             newDescribeReservedInstancesModificationsResponse
+--
+--         , responseDescribeReservedInstancesOfferings $
+--             newDescribeReservedInstancesOfferingsResponse
+--
+--         , responseDescribeRouteTables $
+--             newDescribeRouteTablesResponse
+--
+--         , responseDescribeScheduledInstanceAvailability $
+--             newDescribeScheduledInstanceAvailabilityResponse
+--
+--         , responseDescribeScheduledInstances $
+--             newDescribeScheduledInstancesResponse
+--
+--         , responseDescribeSecurityGroupReferences $
+--             newDescribeSecurityGroupReferencesResponse
+--
+--         , responseDescribeSecurityGroupRules $
+--             newDescribeSecurityGroupRulesResponse
+--
+--         , responseDescribeSecurityGroups $
+--             newDescribeSecurityGroupsResponse
+--
+--         , responseDescribeSnapshotAttribute $
+--             newDescribeSnapshotAttributeResponse
+--
+--         , responseDescribeSnapshotTierStatus $
+--             newDescribeSnapshotTierStatusResponse
+--
+--         , responseDescribeSnapshots $
+--             newDescribeSnapshotsResponse
+--
+--         , responseDescribeSpotDatafeedSubscription $
+--             newDescribeSpotDatafeedSubscriptionResponse
+--
+--         , responseDescribeSpotFleetInstances $
+--             newDescribeSpotFleetInstancesResponse
+--
+--         , responseDescribeSpotFleetRequestHistory $
+--             newDescribeSpotFleetRequestHistoryResponse
+--
+--         , responseDescribeSpotFleetRequests $
+--             newDescribeSpotFleetRequestsResponse
+--
+--         , responseDescribeSpotInstanceRequests $
+--             newDescribeSpotInstanceRequestsResponse
+--
+--         , responseDescribeSpotPriceHistory $
+--             newDescribeSpotPriceHistoryResponse
+--
+--         , responseDescribeStaleSecurityGroups $
+--             newDescribeStaleSecurityGroupsResponse
+--
+--         , responseDescribeStoreImageTasks $
+--             newDescribeStoreImageTasksResponse
+--
+--         , responseDescribeSubnets $
+--             newDescribeSubnetsResponse
+--
+--         , responseDescribeTags $
+--             newDescribeTagsResponse
+--
+--         , responseDescribeTrafficMirrorFilters $
+--             newDescribeTrafficMirrorFiltersResponse
+--
+--         , responseDescribeTrafficMirrorSessions $
+--             newDescribeTrafficMirrorSessionsResponse
+--
+--         , responseDescribeTrafficMirrorTargets $
+--             newDescribeTrafficMirrorTargetsResponse
+--
+--         , responseDescribeTransitGatewayAttachments $
+--             newDescribeTransitGatewayAttachmentsResponse
+--
+--         , responseDescribeTransitGatewayConnectPeers $
+--             newDescribeTransitGatewayConnectPeersResponse
+--
+--         , responseDescribeTransitGatewayConnects $
+--             newDescribeTransitGatewayConnectsResponse
+--
+--         , responseDescribeTransitGatewayMulticastDomains $
+--             newDescribeTransitGatewayMulticastDomainsResponse
+--
+--         , responseDescribeTransitGatewayPeeringAttachments $
+--             newDescribeTransitGatewayPeeringAttachmentsResponse
+--
+--         , responseDescribeTransitGatewayPolicyTables $
+--             newDescribeTransitGatewayPolicyTablesResponse
+--
+--         , responseDescribeTransitGatewayRouteTableAnnouncements $
+--             newDescribeTransitGatewayRouteTableAnnouncementsResponse
+--
+--         , responseDescribeTransitGatewayRouteTables $
+--             newDescribeTransitGatewayRouteTablesResponse
+--
+--         , responseDescribeTransitGatewayVpcAttachments $
+--             newDescribeTransitGatewayVpcAttachmentsResponse
+--
+--         , responseDescribeTransitGateways $
+--             newDescribeTransitGatewaysResponse
+--
+--         , responseDescribeTrunkInterfaceAssociations $
+--             newDescribeTrunkInterfaceAssociationsResponse
+--
+--         , responseDescribeVerifiedAccessEndpoints $
+--             newDescribeVerifiedAccessEndpointsResponse
+--
+--         , responseDescribeVerifiedAccessGroups $
+--             newDescribeVerifiedAccessGroupsResponse
+--
+--         , responseDescribeVerifiedAccessInstanceLoggingConfigurations $
+--             newDescribeVerifiedAccessInstanceLoggingConfigurationsResponse
+--
+--         , responseDescribeVerifiedAccessInstances $
+--             newDescribeVerifiedAccessInstancesResponse
+--
+--         , responseDescribeVerifiedAccessTrustProviders $
+--             newDescribeVerifiedAccessTrustProvidersResponse
+--
+--         , responseDescribeVolumeAttribute $
+--             newDescribeVolumeAttributeResponse
+--
+--         , responseDescribeVolumeStatus $
+--             newDescribeVolumeStatusResponse
+--
+--         , responseDescribeVolumes $
+--             newDescribeVolumesResponse
+--
+--         , responseDescribeVolumesModifications $
+--             newDescribeVolumesModificationsResponse
+--
+--         , responseDescribeVpcAttribute $
+--             newDescribeVpcAttributeResponse
+--
+--         , responseDescribeVpcClassicLink $
+--             newDescribeVpcClassicLinkResponse
+--
+--         , responseDescribeVpcClassicLinkDnsSupport $
+--             newDescribeVpcClassicLinkDnsSupportResponse
+--
+--         , responseDescribeVpcEndpointConnectionNotifications $
+--             newDescribeVpcEndpointConnectionNotificationsResponse
+--
+--         , responseDescribeVpcEndpointConnections $
+--             newDescribeVpcEndpointConnectionsResponse
+--
+--         , responseDescribeVpcEndpointServiceConfigurations $
+--             newDescribeVpcEndpointServiceConfigurationsResponse
+--
+--         , responseDescribeVpcEndpointServicePermissions $
+--             newDescribeVpcEndpointServicePermissionsResponse
+--
+--         , responseDescribeVpcEndpointServices $
+--             newDescribeVpcEndpointServicesResponse
+--
+--         , responseDescribeVpcEndpoints $
+--             newDescribeVpcEndpointsResponse
+--
+--         , responseDescribeVpcPeeringConnections $
+--             newDescribeVpcPeeringConnectionsResponse
+--
+--         , responseDescribeVpcs $
+--             newDescribeVpcsResponse
+--
+--         , responseDescribeVpnConnections $
+--             newDescribeVpnConnectionsResponse
+--
+--         , responseDescribeVpnGateways $
+--             newDescribeVpnGatewaysResponse
+--
+--         , responseDetachClassicLinkVpc $
+--             newDetachClassicLinkVpcResponse
+--
+--         , responseDetachInternetGateway $
+--             newDetachInternetGatewayResponse
+--
+--         , responseDetachNetworkInterface $
+--             newDetachNetworkInterfaceResponse
+--
+--         , responseDetachVerifiedAccessTrustProvider $
+--             newDetachVerifiedAccessTrustProviderResponse
+--
+--         , responseDetachVolume $
+--             newVolumeAttachment
+--
+--         , responseDetachVpnGateway $
+--             newDetachVpnGatewayResponse
+--
+--         , responseDisableAddressTransfer $
+--             newDisableAddressTransferResponse
+--
+--         , responseDisableAwsNetworkPerformanceMetricSubscription $
+--             newDisableAwsNetworkPerformanceMetricSubscriptionResponse
+--
+--         , responseDisableEbsEncryptionByDefault $
+--             newDisableEbsEncryptionByDefaultResponse
+--
+--         , responseDisableFastLaunch $
+--             newDisableFastLaunchResponse
+--
+--         , responseDisableFastSnapshotRestores $
+--             newDisableFastSnapshotRestoresResponse
+--
+--         , responseDisableImageDeprecation $
+--             newDisableImageDeprecationResponse
+--
+--         , responseDisableIpamOrganizationAdminAccount $
+--             newDisableIpamOrganizationAdminAccountResponse
+--
+--         , responseDisableSerialConsoleAccess $
+--             newDisableSerialConsoleAccessResponse
+--
+--         , responseDisableTransitGatewayRouteTablePropagation $
+--             newDisableTransitGatewayRouteTablePropagationResponse
+--
+--         , responseDisableVgwRoutePropagation $
+--             newDisableVgwRoutePropagationResponse
+--
+--         , responseDisableVpcClassicLink $
+--             newDisableVpcClassicLinkResponse
+--
+--         , responseDisableVpcClassicLinkDnsSupport $
+--             newDisableVpcClassicLinkDnsSupportResponse
+--
+--         , responseDisassociateAddress $
+--             newDisassociateAddressResponse
+--
+--         , responseDisassociateClientVpnTargetNetwork $
+--             newDisassociateClientVpnTargetNetworkResponse
+--
+--         , responseDisassociateEnclaveCertificateIamRole $
+--             newDisassociateEnclaveCertificateIamRoleResponse
+--
+--         , responseDisassociateIamInstanceProfile $
+--             newDisassociateIamInstanceProfileResponse
+--
+--         , responseDisassociateInstanceEventWindow $
+--             newDisassociateInstanceEventWindowResponse
+--
+--         , responseDisassociateRouteTable $
+--             newDisassociateRouteTableResponse
+--
+--         , responseDisassociateSubnetCidrBlock $
+--             newDisassociateSubnetCidrBlockResponse
+--
+--         , responseDisassociateTransitGatewayMulticastDomain $
+--             newDisassociateTransitGatewayMulticastDomainResponse
+--
+--         , responseDisassociateTransitGatewayPolicyTable $
+--             newDisassociateTransitGatewayPolicyTableResponse
+--
+--         , responseDisassociateTransitGatewayRouteTable $
+--             newDisassociateTransitGatewayRouteTableResponse
+--
+--         , responseDisassociateTrunkInterface $
+--             newDisassociateTrunkInterfaceResponse
+--
+--         , responseDisassociateVpcCidrBlock $
+--             newDisassociateVpcCidrBlockResponse
+--
+--         , responseEnableAddressTransfer $
+--             newEnableAddressTransferResponse
+--
+--         , responseEnableAwsNetworkPerformanceMetricSubscription $
+--             newEnableAwsNetworkPerformanceMetricSubscriptionResponse
+--
+--         , responseEnableEbsEncryptionByDefault $
+--             newEnableEbsEncryptionByDefaultResponse
+--
+--         , responseEnableFastLaunch $
+--             newEnableFastLaunchResponse
+--
+--         , responseEnableFastSnapshotRestores $
+--             newEnableFastSnapshotRestoresResponse
+--
+--         , responseEnableImageDeprecation $
+--             newEnableImageDeprecationResponse
+--
+--         , responseEnableIpamOrganizationAdminAccount $
+--             newEnableIpamOrganizationAdminAccountResponse
+--
+--         , responseEnableReachabilityAnalyzerOrganizationSharing $
+--             newEnableReachabilityAnalyzerOrganizationSharingResponse
+--
+--         , responseEnableSerialConsoleAccess $
+--             newEnableSerialConsoleAccessResponse
+--
+--         , responseEnableTransitGatewayRouteTablePropagation $
+--             newEnableTransitGatewayRouteTablePropagationResponse
+--
+--         , responseEnableVgwRoutePropagation $
+--             newEnableVgwRoutePropagationResponse
+--
+--         , responseEnableVolumeIO $
+--             newEnableVolumeIOResponse
+--
+--         , responseEnableVpcClassicLink $
+--             newEnableVpcClassicLinkResponse
+--
+--         , responseEnableVpcClassicLinkDnsSupport $
+--             newEnableVpcClassicLinkDnsSupportResponse
+--
+--         , responseExportClientVpnClientCertificateRevocationList $
+--             newExportClientVpnClientCertificateRevocationListResponse
+--
+--         , responseExportClientVpnClientConfiguration $
+--             newExportClientVpnClientConfigurationResponse
+--
+--         , responseExportImage $
+--             newExportImageResponse
+--
+--         , responseExportTransitGatewayRoutes $
+--             newExportTransitGatewayRoutesResponse
+--
+--         , responseGetAssociatedEnclaveCertificateIamRoles $
+--             newGetAssociatedEnclaveCertificateIamRolesResponse
+--
+--         , responseGetAssociatedIpv6PoolCidrs $
+--             newGetAssociatedIpv6PoolCidrsResponse
+--
+--         , responseGetAwsNetworkPerformanceData $
+--             newGetAwsNetworkPerformanceDataResponse
+--
+--         , responseGetCapacityReservationUsage $
+--             newGetCapacityReservationUsageResponse
+--
+--         , responseGetCoipPoolUsage $
+--             newGetCoipPoolUsageResponse
+--
+--         , responseGetConsoleOutput $
+--             newGetConsoleOutputResponse
+--
+--         , responseGetConsoleScreenshot $
+--             newGetConsoleScreenshotResponse
+--
+--         , responseGetDefaultCreditSpecification $
+--             newGetDefaultCreditSpecificationResponse
+--
+--         , responseGetEbsDefaultKmsKeyId $
+--             newGetEbsDefaultKmsKeyIdResponse
+--
+--         , responseGetEbsEncryptionByDefault $
+--             newGetEbsEncryptionByDefaultResponse
+--
+--         , responseGetFlowLogsIntegrationTemplate $
+--             newGetFlowLogsIntegrationTemplateResponse
+--
+--         , responseGetGroupsForCapacityReservation $
+--             newGetGroupsForCapacityReservationResponse
+--
+--         , responseGetHostReservationPurchasePreview $
+--             newGetHostReservationPurchasePreviewResponse
+--
+--         , responseGetInstanceTypesFromInstanceRequirements $
+--             newGetInstanceTypesFromInstanceRequirementsResponse
+--
+--         , responseGetInstanceUefiData $
+--             newGetInstanceUefiDataResponse
+--
+--         , responseGetIpamAddressHistory $
+--             newGetIpamAddressHistoryResponse
+--
+--         , responseGetIpamPoolAllocations $
+--             newGetIpamPoolAllocationsResponse
+--
+--         , responseGetIpamPoolCidrs $
+--             newGetIpamPoolCidrsResponse
+--
+--         , responseGetIpamResourceCidrs $
+--             newGetIpamResourceCidrsResponse
+--
+--         , responseGetLaunchTemplateData $
+--             newGetLaunchTemplateDataResponse
+--
+--         , responseGetManagedPrefixListAssociations $
+--             newGetManagedPrefixListAssociationsResponse
+--
+--         , responseGetManagedPrefixListEntries $
+--             newGetManagedPrefixListEntriesResponse
+--
+--         , responseGetNetworkInsightsAccessScopeAnalysisFindings $
+--             newGetNetworkInsightsAccessScopeAnalysisFindingsResponse
+--
+--         , responseGetNetworkInsightsAccessScopeContent $
+--             newGetNetworkInsightsAccessScopeContentResponse
+--
+--         , responseGetPasswordData $
+--             newGetPasswordDataResponse
+--
+--         , responseGetReservedInstancesExchangeQuote $
+--             newGetReservedInstancesExchangeQuoteResponse
+--
+--         , responseGetSerialConsoleAccessStatus $
+--             newGetSerialConsoleAccessStatusResponse
+--
+--         , responseGetSpotPlacementScores $
+--             newGetSpotPlacementScoresResponse
+--
+--         , responseGetSubnetCidrReservations $
+--             newGetSubnetCidrReservationsResponse
+--
+--         , responseGetTransitGatewayAttachmentPropagations $
+--             newGetTransitGatewayAttachmentPropagationsResponse
+--
+--         , responseGetTransitGatewayMulticastDomainAssociations $
+--             newGetTransitGatewayMulticastDomainAssociationsResponse
+--
+--         , responseGetTransitGatewayPolicyTableAssociations $
+--             newGetTransitGatewayPolicyTableAssociationsResponse
+--
+--         , responseGetTransitGatewayPolicyTableEntries $
+--             newGetTransitGatewayPolicyTableEntriesResponse
+--
+--         , responseGetTransitGatewayPrefixListReferences $
+--             newGetTransitGatewayPrefixListReferencesResponse
+--
+--         , responseGetTransitGatewayRouteTableAssociations $
+--             newGetTransitGatewayRouteTableAssociationsResponse
+--
+--         , responseGetTransitGatewayRouteTablePropagations $
+--             newGetTransitGatewayRouteTablePropagationsResponse
+--
+--         , responseGetVerifiedAccessEndpointPolicy $
+--             newGetVerifiedAccessEndpointPolicyResponse
+--
+--         , responseGetVerifiedAccessGroupPolicy $
+--             newGetVerifiedAccessGroupPolicyResponse
+--
+--         , responseGetVpnConnectionDeviceSampleConfiguration $
+--             newGetVpnConnectionDeviceSampleConfigurationResponse
+--
+--         , responseGetVpnConnectionDeviceTypes $
+--             newGetVpnConnectionDeviceTypesResponse
+--
+--         , responseImportClientVpnClientCertificateRevocationList $
+--             newImportClientVpnClientCertificateRevocationListResponse
+--
+--         , responseImportImage $
+--             newImportImageResponse
+--
+--         , responseImportInstance $
+--             newImportInstanceResponse
+--
+--         , responseImportKeyPair $
+--             newImportKeyPairResponse
+--
+--         , responseImportSnapshot $
+--             newImportSnapshotResponse
+--
+--         , responseImportVolume $
+--             newImportVolumeResponse
+--
+--         , responseListImagesInRecycleBin $
+--             newListImagesInRecycleBinResponse
+--
+--         , responseListSnapshotsInRecycleBin $
+--             newListSnapshotsInRecycleBinResponse
+--
+--         , responseModifyAddressAttribute $
+--             newModifyAddressAttributeResponse
+--
+--         , responseModifyAvailabilityZoneGroup $
+--             newModifyAvailabilityZoneGroupResponse
+--
+--         , responseModifyCapacityReservation $
+--             newModifyCapacityReservationResponse
+--
+--         , responseModifyCapacityReservationFleet $
+--             newModifyCapacityReservationFleetResponse
+--
+--         , responseModifyClientVpnEndpoint $
+--             newModifyClientVpnEndpointResponse
+--
+--         , responseModifyDefaultCreditSpecification $
+--             newModifyDefaultCreditSpecificationResponse
+--
+--         , responseModifyEbsDefaultKmsKeyId $
+--             newModifyEbsDefaultKmsKeyIdResponse
+--
+--         , responseModifyFleet $
+--             newModifyFleetResponse
+--
+--         , responseModifyFpgaImageAttribute $
+--             newModifyFpgaImageAttributeResponse
+--
+--         , responseModifyHosts $
+--             newModifyHostsResponse
+--
+--         , responseModifyIdFormat $
+--             newModifyIdFormatResponse
+--
+--         , responseModifyIdentityIdFormat $
+--             newModifyIdentityIdFormatResponse
+--
+--         , responseModifyImageAttribute $
+--             newModifyImageAttributeResponse
+--
+--         , responseModifyInstanceAttribute $
+--             newModifyInstanceAttributeResponse
+--
+--         , responseModifyInstanceCapacityReservationAttributes $
+--             newModifyInstanceCapacityReservationAttributesResponse
+--
+--         , responseModifyInstanceCreditSpecification $
+--             newModifyInstanceCreditSpecificationResponse
+--
+--         , responseModifyInstanceEventStartTime $
+--             newModifyInstanceEventStartTimeResponse
+--
+--         , responseModifyInstanceEventWindow $
+--             newModifyInstanceEventWindowResponse
+--
+--         , responseModifyInstanceMaintenanceOptions $
+--             newModifyInstanceMaintenanceOptionsResponse
+--
+--         , responseModifyInstanceMetadataOptions $
+--             newModifyInstanceMetadataOptionsResponse
+--
+--         , responseModifyInstancePlacement $
+--             newModifyInstancePlacementResponse
+--
+--         , responseModifyIpam $
+--             newModifyIpamResponse
+--
+--         , responseModifyIpamPool $
+--             newModifyIpamPoolResponse
+--
+--         , responseModifyIpamResourceCidr $
+--             newModifyIpamResourceCidrResponse
+--
+--         , responseModifyIpamScope $
+--             newModifyIpamScopeResponse
+--
+--         , responseModifyLaunchTemplate $
+--             newModifyLaunchTemplateResponse
+--
+--         , responseModifyLocalGatewayRoute $
+--             newModifyLocalGatewayRouteResponse
+--
+--         , responseModifyManagedPrefixList $
+--             newModifyManagedPrefixListResponse
+--
+--         , responseModifyNetworkInterfaceAttribute $
+--             newModifyNetworkInterfaceAttributeResponse
+--
+--         , responseModifyPrivateDnsNameOptions $
+--             newModifyPrivateDnsNameOptionsResponse
+--
+--         , responseModifyReservedInstances $
+--             newModifyReservedInstancesResponse
+--
+--         , responseModifySecurityGroupRules $
+--             newModifySecurityGroupRulesResponse
+--
+--         , responseModifySnapshotAttribute $
+--             newModifySnapshotAttributeResponse
+--
+--         , responseModifySnapshotTier $
+--             newModifySnapshotTierResponse
+--
+--         , responseModifySpotFleetRequest $
+--             newModifySpotFleetRequestResponse
+--
+--         , responseModifySubnetAttribute $
+--             newModifySubnetAttributeResponse
+--
+--         , responseModifyTrafficMirrorFilterNetworkServices $
+--             newModifyTrafficMirrorFilterNetworkServicesResponse
+--
+--         , responseModifyTrafficMirrorFilterRule $
+--             newModifyTrafficMirrorFilterRuleResponse
+--
+--         , responseModifyTrafficMirrorSession $
+--             newModifyTrafficMirrorSessionResponse
+--
+--         , responseModifyTransitGateway $
+--             newModifyTransitGatewayResponse
+--
+--         , responseModifyTransitGatewayPrefixListReference $
+--             newModifyTransitGatewayPrefixListReferenceResponse
+--
+--         , responseModifyTransitGatewayVpcAttachment $
+--             newModifyTransitGatewayVpcAttachmentResponse
+--
+--         , responseModifyVerifiedAccessEndpoint $
+--             newModifyVerifiedAccessEndpointResponse
+--
+--         , responseModifyVerifiedAccessEndpointPolicy $
+--             newModifyVerifiedAccessEndpointPolicyResponse
+--
+--         , responseModifyVerifiedAccessGroup $
+--             newModifyVerifiedAccessGroupResponse
+--
+--         , responseModifyVerifiedAccessGroupPolicy $
+--             newModifyVerifiedAccessGroupPolicyResponse
+--
+--         , responseModifyVerifiedAccessInstance $
+--             newModifyVerifiedAccessInstanceResponse
+--
+--         , responseModifyVerifiedAccessInstanceLoggingConfiguration $
+--             newModifyVerifiedAccessInstanceLoggingConfigurationResponse
+--
+--         , responseModifyVerifiedAccessTrustProvider $
+--             newModifyVerifiedAccessTrustProviderResponse
+--
+--         , responseModifyVolume $
+--             newModifyVolumeResponse
+--
+--         , responseModifyVolumeAttribute $
+--             newModifyVolumeAttributeResponse
+--
+--         , responseModifyVpcAttribute $
+--             newModifyVpcAttributeResponse
+--
+--         , responseModifyVpcEndpoint $
+--             newModifyVpcEndpointResponse
+--
+--         , responseModifyVpcEndpointConnectionNotification $
+--             newModifyVpcEndpointConnectionNotificationResponse
+--
+--         , responseModifyVpcEndpointServiceConfiguration $
+--             newModifyVpcEndpointServiceConfigurationResponse
+--
+--         , responseModifyVpcEndpointServicePayerResponsibility $
+--             newModifyVpcEndpointServicePayerResponsibilityResponse
+--
+--         , responseModifyVpcEndpointServicePermissions $
+--             newModifyVpcEndpointServicePermissionsResponse
+--
+--         , responseModifyVpcPeeringConnectionOptions $
+--             newModifyVpcPeeringConnectionOptionsResponse
+--
+--         , responseModifyVpcTenancy $
+--             newModifyVpcTenancyResponse
+--
+--         , responseModifyVpnConnection $
+--             newModifyVpnConnectionResponse
+--
+--         , responseModifyVpnConnectionOptions $
+--             newModifyVpnConnectionOptionsResponse
+--
+--         , responseModifyVpnTunnelCertificate $
+--             newModifyVpnTunnelCertificateResponse
+--
+--         , responseModifyVpnTunnelOptions $
+--             newModifyVpnTunnelOptionsResponse
+--
+--         , responseMonitorInstances $
+--             newMonitorInstancesResponse
+--
+--         , responseMoveAddressToVpc $
+--             newMoveAddressToVpcResponse
+--
+--         , responseMoveByoipCidrToIpam $
+--             newMoveByoipCidrToIpamResponse
+--
+--         , responseProvisionByoipCidr $
+--             newProvisionByoipCidrResponse
+--
+--         , responseProvisionIpamPoolCidr $
+--             newProvisionIpamPoolCidrResponse
+--
+--         , responseProvisionPublicIpv4PoolCidr $
+--             newProvisionPublicIpv4PoolCidrResponse
+--
+--         , responsePurchaseHostReservation $
+--             newPurchaseHostReservationResponse
+--
+--         , responsePurchaseReservedInstancesOffering $
+--             newPurchaseReservedInstancesOfferingResponse
+--
+--         , responsePurchaseScheduledInstances $
+--             newPurchaseScheduledInstancesResponse
+--
+--         , responseRebootInstances $
+--             newRebootInstancesResponse
+--
+--         , responseRegisterImage $
+--             newRegisterImageResponse
+--
+--         , responseRegisterInstanceEventNotificationAttributes $
+--             newRegisterInstanceEventNotificationAttributesResponse
+--
+--         , responseRegisterTransitGatewayMulticastGroupMembers $
+--             newRegisterTransitGatewayMulticastGroupMembersResponse
+--
+--         , responseRegisterTransitGatewayMulticastGroupSources $
+--             newRegisterTransitGatewayMulticastGroupSourcesResponse
+--
+--         , responseRejectTransitGatewayMulticastDomainAssociations $
+--             newRejectTransitGatewayMulticastDomainAssociationsResponse
+--
+--         , responseRejectTransitGatewayPeeringAttachment $
+--             newRejectTransitGatewayPeeringAttachmentResponse
+--
+--         , responseRejectTransitGatewayVpcAttachment $
+--             newRejectTransitGatewayVpcAttachmentResponse
+--
+--         , responseRejectVpcEndpointConnections $
+--             newRejectVpcEndpointConnectionsResponse
+--
+--         , responseRejectVpcPeeringConnection $
+--             newRejectVpcPeeringConnectionResponse
+--
+--         , responseReleaseAddress $
+--             newReleaseAddressResponse
+--
+--         , responseReleaseHosts $
+--             newReleaseHostsResponse
+--
+--         , responseReleaseIpamPoolAllocation $
+--             newReleaseIpamPoolAllocationResponse
+--
+--         , responseReplaceIamInstanceProfileAssociation $
+--             newReplaceIamInstanceProfileAssociationResponse
+--
+--         , responseReplaceNetworkAclAssociation $
+--             newReplaceNetworkAclAssociationResponse
+--
+--         , responseReplaceNetworkAclEntry $
+--             newReplaceNetworkAclEntryResponse
+--
+--         , responseReplaceRoute $
+--             newReplaceRouteResponse
+--
+--         , responseReplaceRouteTableAssociation $
+--             newReplaceRouteTableAssociationResponse
+--
+--         , responseReplaceTransitGatewayRoute $
+--             newReplaceTransitGatewayRouteResponse
+--
+--         , responseReportInstanceStatus $
+--             newReportInstanceStatusResponse
+--
+--         , responseRequestSpotFleet $
+--             newRequestSpotFleetResponse
+--
+--         , responseRequestSpotInstances $
+--             newRequestSpotInstancesResponse
+--
+--         , responseResetAddressAttribute $
+--             newResetAddressAttributeResponse
+--
+--         , responseResetEbsDefaultKmsKeyId $
+--             newResetEbsDefaultKmsKeyIdResponse
+--
+--         , responseResetFpgaImageAttribute $
+--             newResetFpgaImageAttributeResponse
+--
+--         , responseResetImageAttribute $
+--             newResetImageAttributeResponse
+--
+--         , responseResetInstanceAttribute $
+--             newResetInstanceAttributeResponse
+--
+--         , responseResetNetworkInterfaceAttribute $
+--             newResetNetworkInterfaceAttributeResponse
+--
+--         , responseResetSnapshotAttribute $
+--             newResetSnapshotAttributeResponse
+--
+--         , responseRestoreAddressToClassic $
+--             newRestoreAddressToClassicResponse
+--
+--         , responseRestoreImageFromRecycleBin $
+--             newRestoreImageFromRecycleBinResponse
+--
+--         , responseRestoreManagedPrefixListVersion $
+--             newRestoreManagedPrefixListVersionResponse
+--
+--         , responseRestoreSnapshotFromRecycleBin $
+--             newRestoreSnapshotFromRecycleBinResponse
+--
+--         , responseRestoreSnapshotTier $
+--             newRestoreSnapshotTierResponse
+--
+--         , responseRevokeClientVpnIngress $
+--             newRevokeClientVpnIngressResponse
+--
+--         , responseRevokeSecurityGroupEgress $
+--             newRevokeSecurityGroupEgressResponse
+--
+--         , responseRevokeSecurityGroupIngress $
+--             newRevokeSecurityGroupIngressResponse
+--
+--         , responseRunInstances $
+--             newReservation
+--
+--         , responseRunScheduledInstances $
+--             newRunScheduledInstancesResponse
+--
+--         , responseSearchLocalGatewayRoutes $
+--             newSearchLocalGatewayRoutesResponse
+--
+--         , responseSearchTransitGatewayMulticastGroups $
+--             newSearchTransitGatewayMulticastGroupsResponse
+--
+--         , responseSearchTransitGatewayRoutes $
+--             newSearchTransitGatewayRoutesResponse
+--
+--         , responseSendDiagnosticInterrupt $
+--             newSendDiagnosticInterruptResponse
+--
+--         , responseStartInstances $
+--             newStartInstancesResponse
+--
+--         , responseStartNetworkInsightsAccessScopeAnalysis $
+--             newStartNetworkInsightsAccessScopeAnalysisResponse
+--
+--         , responseStartNetworkInsightsAnalysis $
+--             newStartNetworkInsightsAnalysisResponse
+--
+--         , responseStartVpcEndpointServicePrivateDnsVerification $
+--             newStartVpcEndpointServicePrivateDnsVerificationResponse
+--
+--         , responseStopInstances $
+--             newStopInstancesResponse
+--
+--         , responseTerminateClientVpnConnections $
+--             newTerminateClientVpnConnectionsResponse
+--
+--         , responseTerminateInstances $
+--             newTerminateInstancesResponse
+--
+--         , responseUnassignIpv6Addresses $
+--             newUnassignIpv6AddressesResponse
+--
+--         , responseUnassignPrivateIpAddresses $
+--             newUnassignPrivateIpAddressesResponse
+--
+--         , responseUnmonitorInstances $
+--             newUnmonitorInstancesResponse
+--
+--         , responseUpdateSecurityGroupRuleDescriptionsEgress $
+--             newUpdateSecurityGroupRuleDescriptionsEgressResponse
+--
+--         , responseUpdateSecurityGroupRuleDescriptionsIngress $
+--             newUpdateSecurityGroupRuleDescriptionsIngressResponse
+--
+--         , responseWithdrawByoipCidr $
+--             newWithdrawByoipCidrResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAcceptAddressTransfer :: AcceptAddressTransfer -> TestTree
+requestAcceptAddressTransfer =
+  req
+    "AcceptAddressTransfer"
+    "fixture/AcceptAddressTransfer.yaml"
+
+requestAcceptReservedInstancesExchangeQuote :: AcceptReservedInstancesExchangeQuote -> TestTree
+requestAcceptReservedInstancesExchangeQuote =
+  req
+    "AcceptReservedInstancesExchangeQuote"
+    "fixture/AcceptReservedInstancesExchangeQuote.yaml"
+
+requestAcceptTransitGatewayMulticastDomainAssociations :: AcceptTransitGatewayMulticastDomainAssociations -> TestTree
+requestAcceptTransitGatewayMulticastDomainAssociations =
+  req
+    "AcceptTransitGatewayMulticastDomainAssociations"
+    "fixture/AcceptTransitGatewayMulticastDomainAssociations.yaml"
+
+requestAcceptTransitGatewayPeeringAttachment :: AcceptTransitGatewayPeeringAttachment -> TestTree
+requestAcceptTransitGatewayPeeringAttachment =
+  req
+    "AcceptTransitGatewayPeeringAttachment"
+    "fixture/AcceptTransitGatewayPeeringAttachment.yaml"
+
+requestAcceptTransitGatewayVpcAttachment :: AcceptTransitGatewayVpcAttachment -> TestTree
+requestAcceptTransitGatewayVpcAttachment =
+  req
+    "AcceptTransitGatewayVpcAttachment"
+    "fixture/AcceptTransitGatewayVpcAttachment.yaml"
+
+requestAcceptVpcEndpointConnections :: AcceptVpcEndpointConnections -> TestTree
+requestAcceptVpcEndpointConnections =
+  req
+    "AcceptVpcEndpointConnections"
+    "fixture/AcceptVpcEndpointConnections.yaml"
+
+requestAcceptVpcPeeringConnection :: AcceptVpcPeeringConnection -> TestTree
+requestAcceptVpcPeeringConnection =
+  req
+    "AcceptVpcPeeringConnection"
+    "fixture/AcceptVpcPeeringConnection.yaml"
+
+requestAdvertiseByoipCidr :: AdvertiseByoipCidr -> TestTree
+requestAdvertiseByoipCidr =
+  req
+    "AdvertiseByoipCidr"
+    "fixture/AdvertiseByoipCidr.yaml"
+
+requestAllocateAddress :: AllocateAddress -> TestTree
+requestAllocateAddress =
+  req
+    "AllocateAddress"
+    "fixture/AllocateAddress.yaml"
+
+requestAllocateHosts :: AllocateHosts -> TestTree
+requestAllocateHosts =
+  req
+    "AllocateHosts"
+    "fixture/AllocateHosts.yaml"
+
+requestAllocateIpamPoolCidr :: AllocateIpamPoolCidr -> TestTree
+requestAllocateIpamPoolCidr =
+  req
+    "AllocateIpamPoolCidr"
+    "fixture/AllocateIpamPoolCidr.yaml"
+
+requestApplySecurityGroupsToClientVpnTargetNetwork :: ApplySecurityGroupsToClientVpnTargetNetwork -> TestTree
+requestApplySecurityGroupsToClientVpnTargetNetwork =
+  req
+    "ApplySecurityGroupsToClientVpnTargetNetwork"
+    "fixture/ApplySecurityGroupsToClientVpnTargetNetwork.yaml"
+
+requestAssignIpv6Addresses :: AssignIpv6Addresses -> TestTree
+requestAssignIpv6Addresses =
+  req
+    "AssignIpv6Addresses"
+    "fixture/AssignIpv6Addresses.yaml"
+
+requestAssignPrivateIpAddresses :: AssignPrivateIpAddresses -> TestTree
+requestAssignPrivateIpAddresses =
+  req
+    "AssignPrivateIpAddresses"
+    "fixture/AssignPrivateIpAddresses.yaml"
+
+requestAssociateAddress :: AssociateAddress -> TestTree
+requestAssociateAddress =
+  req
+    "AssociateAddress"
+    "fixture/AssociateAddress.yaml"
+
+requestAssociateClientVpnTargetNetwork :: AssociateClientVpnTargetNetwork -> TestTree
+requestAssociateClientVpnTargetNetwork =
+  req
+    "AssociateClientVpnTargetNetwork"
+    "fixture/AssociateClientVpnTargetNetwork.yaml"
+
+requestAssociateDhcpOptions :: AssociateDhcpOptions -> TestTree
+requestAssociateDhcpOptions =
+  req
+    "AssociateDhcpOptions"
+    "fixture/AssociateDhcpOptions.yaml"
+
+requestAssociateEnclaveCertificateIamRole :: AssociateEnclaveCertificateIamRole -> TestTree
+requestAssociateEnclaveCertificateIamRole =
+  req
+    "AssociateEnclaveCertificateIamRole"
+    "fixture/AssociateEnclaveCertificateIamRole.yaml"
+
+requestAssociateIamInstanceProfile :: AssociateIamInstanceProfile -> TestTree
+requestAssociateIamInstanceProfile =
+  req
+    "AssociateIamInstanceProfile"
+    "fixture/AssociateIamInstanceProfile.yaml"
+
+requestAssociateInstanceEventWindow :: AssociateInstanceEventWindow -> TestTree
+requestAssociateInstanceEventWindow =
+  req
+    "AssociateInstanceEventWindow"
+    "fixture/AssociateInstanceEventWindow.yaml"
+
+requestAssociateRouteTable :: AssociateRouteTable -> TestTree
+requestAssociateRouteTable =
+  req
+    "AssociateRouteTable"
+    "fixture/AssociateRouteTable.yaml"
+
+requestAssociateSubnetCidrBlock :: AssociateSubnetCidrBlock -> TestTree
+requestAssociateSubnetCidrBlock =
+  req
+    "AssociateSubnetCidrBlock"
+    "fixture/AssociateSubnetCidrBlock.yaml"
+
+requestAssociateTransitGatewayMulticastDomain :: AssociateTransitGatewayMulticastDomain -> TestTree
+requestAssociateTransitGatewayMulticastDomain =
+  req
+    "AssociateTransitGatewayMulticastDomain"
+    "fixture/AssociateTransitGatewayMulticastDomain.yaml"
+
+requestAssociateTransitGatewayPolicyTable :: AssociateTransitGatewayPolicyTable -> TestTree
+requestAssociateTransitGatewayPolicyTable =
+  req
+    "AssociateTransitGatewayPolicyTable"
+    "fixture/AssociateTransitGatewayPolicyTable.yaml"
+
+requestAssociateTransitGatewayRouteTable :: AssociateTransitGatewayRouteTable -> TestTree
+requestAssociateTransitGatewayRouteTable =
+  req
+    "AssociateTransitGatewayRouteTable"
+    "fixture/AssociateTransitGatewayRouteTable.yaml"
+
+requestAssociateTrunkInterface :: AssociateTrunkInterface -> TestTree
+requestAssociateTrunkInterface =
+  req
+    "AssociateTrunkInterface"
+    "fixture/AssociateTrunkInterface.yaml"
+
+requestAssociateVpcCidrBlock :: AssociateVpcCidrBlock -> TestTree
+requestAssociateVpcCidrBlock =
+  req
+    "AssociateVpcCidrBlock"
+    "fixture/AssociateVpcCidrBlock.yaml"
+
+requestAttachClassicLinkVpc :: AttachClassicLinkVpc -> TestTree
+requestAttachClassicLinkVpc =
+  req
+    "AttachClassicLinkVpc"
+    "fixture/AttachClassicLinkVpc.yaml"
+
+requestAttachInternetGateway :: AttachInternetGateway -> TestTree
+requestAttachInternetGateway =
+  req
+    "AttachInternetGateway"
+    "fixture/AttachInternetGateway.yaml"
+
+requestAttachNetworkInterface :: AttachNetworkInterface -> TestTree
+requestAttachNetworkInterface =
+  req
+    "AttachNetworkInterface"
+    "fixture/AttachNetworkInterface.yaml"
+
+requestAttachVerifiedAccessTrustProvider :: AttachVerifiedAccessTrustProvider -> TestTree
+requestAttachVerifiedAccessTrustProvider =
+  req
+    "AttachVerifiedAccessTrustProvider"
+    "fixture/AttachVerifiedAccessTrustProvider.yaml"
+
+requestAttachVolume :: AttachVolume -> TestTree
+requestAttachVolume =
+  req
+    "AttachVolume"
+    "fixture/AttachVolume.yaml"
+
+requestAttachVpnGateway :: AttachVpnGateway -> TestTree
+requestAttachVpnGateway =
+  req
+    "AttachVpnGateway"
+    "fixture/AttachVpnGateway.yaml"
+
+requestAuthorizeClientVpnIngress :: AuthorizeClientVpnIngress -> TestTree
+requestAuthorizeClientVpnIngress =
+  req
+    "AuthorizeClientVpnIngress"
+    "fixture/AuthorizeClientVpnIngress.yaml"
+
+requestAuthorizeSecurityGroupEgress :: AuthorizeSecurityGroupEgress -> TestTree
+requestAuthorizeSecurityGroupEgress =
+  req
+    "AuthorizeSecurityGroupEgress"
+    "fixture/AuthorizeSecurityGroupEgress.yaml"
+
+requestAuthorizeSecurityGroupIngress :: AuthorizeSecurityGroupIngress -> TestTree
+requestAuthorizeSecurityGroupIngress =
+  req
+    "AuthorizeSecurityGroupIngress"
+    "fixture/AuthorizeSecurityGroupIngress.yaml"
+
+requestBundleInstance :: BundleInstance -> TestTree
+requestBundleInstance =
+  req
+    "BundleInstance"
+    "fixture/BundleInstance.yaml"
+
+requestCancelBundleTask :: CancelBundleTask -> TestTree
+requestCancelBundleTask =
+  req
+    "CancelBundleTask"
+    "fixture/CancelBundleTask.yaml"
+
+requestCancelCapacityReservation :: CancelCapacityReservation -> TestTree
+requestCancelCapacityReservation =
+  req
+    "CancelCapacityReservation"
+    "fixture/CancelCapacityReservation.yaml"
+
+requestCancelCapacityReservationFleets :: CancelCapacityReservationFleets -> TestTree
+requestCancelCapacityReservationFleets =
+  req
+    "CancelCapacityReservationFleets"
+    "fixture/CancelCapacityReservationFleets.yaml"
+
+requestCancelConversionTask :: CancelConversionTask -> TestTree
+requestCancelConversionTask =
+  req
+    "CancelConversionTask"
+    "fixture/CancelConversionTask.yaml"
+
+requestCancelExportTask :: CancelExportTask -> TestTree
+requestCancelExportTask =
+  req
+    "CancelExportTask"
+    "fixture/CancelExportTask.yaml"
+
+requestCancelImageLaunchPermission :: CancelImageLaunchPermission -> TestTree
+requestCancelImageLaunchPermission =
+  req
+    "CancelImageLaunchPermission"
+    "fixture/CancelImageLaunchPermission.yaml"
+
+requestCancelImportTask :: CancelImportTask -> TestTree
+requestCancelImportTask =
+  req
+    "CancelImportTask"
+    "fixture/CancelImportTask.yaml"
+
+requestCancelReservedInstancesListing :: CancelReservedInstancesListing -> TestTree
+requestCancelReservedInstancesListing =
+  req
+    "CancelReservedInstancesListing"
+    "fixture/CancelReservedInstancesListing.yaml"
+
+requestCancelSpotFleetRequests :: CancelSpotFleetRequests -> TestTree
+requestCancelSpotFleetRequests =
+  req
+    "CancelSpotFleetRequests"
+    "fixture/CancelSpotFleetRequests.yaml"
+
+requestCancelSpotInstanceRequests :: CancelSpotInstanceRequests -> TestTree
+requestCancelSpotInstanceRequests =
+  req
+    "CancelSpotInstanceRequests"
+    "fixture/CancelSpotInstanceRequests.yaml"
+
+requestConfirmProductInstance :: ConfirmProductInstance -> TestTree
+requestConfirmProductInstance =
+  req
+    "ConfirmProductInstance"
+    "fixture/ConfirmProductInstance.yaml"
+
+requestCopyFpgaImage :: CopyFpgaImage -> TestTree
+requestCopyFpgaImage =
+  req
+    "CopyFpgaImage"
+    "fixture/CopyFpgaImage.yaml"
+
+requestCopyImage :: CopyImage -> TestTree
+requestCopyImage =
+  req
+    "CopyImage"
+    "fixture/CopyImage.yaml"
+
+requestCopySnapshot :: CopySnapshot -> TestTree
+requestCopySnapshot =
+  req
+    "CopySnapshot"
+    "fixture/CopySnapshot.yaml"
+
+requestCreateCapacityReservation :: CreateCapacityReservation -> TestTree
+requestCreateCapacityReservation =
+  req
+    "CreateCapacityReservation"
+    "fixture/CreateCapacityReservation.yaml"
+
+requestCreateCapacityReservationFleet :: CreateCapacityReservationFleet -> TestTree
+requestCreateCapacityReservationFleet =
+  req
+    "CreateCapacityReservationFleet"
+    "fixture/CreateCapacityReservationFleet.yaml"
+
+requestCreateCarrierGateway :: CreateCarrierGateway -> TestTree
+requestCreateCarrierGateway =
+  req
+    "CreateCarrierGateway"
+    "fixture/CreateCarrierGateway.yaml"
+
+requestCreateClientVpnEndpoint :: CreateClientVpnEndpoint -> TestTree
+requestCreateClientVpnEndpoint =
+  req
+    "CreateClientVpnEndpoint"
+    "fixture/CreateClientVpnEndpoint.yaml"
+
+requestCreateClientVpnRoute :: CreateClientVpnRoute -> TestTree
+requestCreateClientVpnRoute =
+  req
+    "CreateClientVpnRoute"
+    "fixture/CreateClientVpnRoute.yaml"
+
+requestCreateCoipCidr :: CreateCoipCidr -> TestTree
+requestCreateCoipCidr =
+  req
+    "CreateCoipCidr"
+    "fixture/CreateCoipCidr.yaml"
+
+requestCreateCoipPool :: CreateCoipPool -> TestTree
+requestCreateCoipPool =
+  req
+    "CreateCoipPool"
+    "fixture/CreateCoipPool.yaml"
+
+requestCreateCustomerGateway :: CreateCustomerGateway -> TestTree
+requestCreateCustomerGateway =
+  req
+    "CreateCustomerGateway"
+    "fixture/CreateCustomerGateway.yaml"
+
+requestCreateDefaultSubnet :: CreateDefaultSubnet -> TestTree
+requestCreateDefaultSubnet =
+  req
+    "CreateDefaultSubnet"
+    "fixture/CreateDefaultSubnet.yaml"
+
+requestCreateDefaultVpc :: CreateDefaultVpc -> TestTree
+requestCreateDefaultVpc =
+  req
+    "CreateDefaultVpc"
+    "fixture/CreateDefaultVpc.yaml"
+
+requestCreateDhcpOptions :: CreateDhcpOptions -> TestTree
+requestCreateDhcpOptions =
+  req
+    "CreateDhcpOptions"
+    "fixture/CreateDhcpOptions.yaml"
+
+requestCreateEgressOnlyInternetGateway :: CreateEgressOnlyInternetGateway -> TestTree
+requestCreateEgressOnlyInternetGateway =
+  req
+    "CreateEgressOnlyInternetGateway"
+    "fixture/CreateEgressOnlyInternetGateway.yaml"
+
+requestCreateFleet :: CreateFleet -> TestTree
+requestCreateFleet =
+  req
+    "CreateFleet"
+    "fixture/CreateFleet.yaml"
+
+requestCreateFlowLogs :: CreateFlowLogs -> TestTree
+requestCreateFlowLogs =
+  req
+    "CreateFlowLogs"
+    "fixture/CreateFlowLogs.yaml"
+
+requestCreateFpgaImage :: CreateFpgaImage -> TestTree
+requestCreateFpgaImage =
+  req
+    "CreateFpgaImage"
+    "fixture/CreateFpgaImage.yaml"
+
+requestCreateImage :: CreateImage -> TestTree
+requestCreateImage =
+  req
+    "CreateImage"
+    "fixture/CreateImage.yaml"
+
+requestCreateInstanceEventWindow :: CreateInstanceEventWindow -> TestTree
+requestCreateInstanceEventWindow =
+  req
+    "CreateInstanceEventWindow"
+    "fixture/CreateInstanceEventWindow.yaml"
+
+requestCreateInstanceExportTask :: CreateInstanceExportTask -> TestTree
+requestCreateInstanceExportTask =
+  req
+    "CreateInstanceExportTask"
+    "fixture/CreateInstanceExportTask.yaml"
+
+requestCreateInternetGateway :: CreateInternetGateway -> TestTree
+requestCreateInternetGateway =
+  req
+    "CreateInternetGateway"
+    "fixture/CreateInternetGateway.yaml"
+
+requestCreateIpam :: CreateIpam -> TestTree
+requestCreateIpam =
+  req
+    "CreateIpam"
+    "fixture/CreateIpam.yaml"
+
+requestCreateIpamPool :: CreateIpamPool -> TestTree
+requestCreateIpamPool =
+  req
+    "CreateIpamPool"
+    "fixture/CreateIpamPool.yaml"
+
+requestCreateIpamScope :: CreateIpamScope -> TestTree
+requestCreateIpamScope =
+  req
+    "CreateIpamScope"
+    "fixture/CreateIpamScope.yaml"
+
+requestCreateKeyPair :: CreateKeyPair -> TestTree
+requestCreateKeyPair =
+  req
+    "CreateKeyPair"
+    "fixture/CreateKeyPair.yaml"
+
+requestCreateLaunchTemplate :: CreateLaunchTemplate -> TestTree
+requestCreateLaunchTemplate =
+  req
+    "CreateLaunchTemplate"
+    "fixture/CreateLaunchTemplate.yaml"
+
+requestCreateLaunchTemplateVersion :: CreateLaunchTemplateVersion -> TestTree
+requestCreateLaunchTemplateVersion =
+  req
+    "CreateLaunchTemplateVersion"
+    "fixture/CreateLaunchTemplateVersion.yaml"
+
+requestCreateLocalGatewayRoute :: CreateLocalGatewayRoute -> TestTree
+requestCreateLocalGatewayRoute =
+  req
+    "CreateLocalGatewayRoute"
+    "fixture/CreateLocalGatewayRoute.yaml"
+
+requestCreateLocalGatewayRouteTable :: CreateLocalGatewayRouteTable -> TestTree
+requestCreateLocalGatewayRouteTable =
+  req
+    "CreateLocalGatewayRouteTable"
+    "fixture/CreateLocalGatewayRouteTable.yaml"
+
+requestCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation -> TestTree
+requestCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+  req
+    "CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation"
+    "fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml"
+
+requestCreateLocalGatewayRouteTableVpcAssociation :: CreateLocalGatewayRouteTableVpcAssociation -> TestTree
+requestCreateLocalGatewayRouteTableVpcAssociation =
+  req
+    "CreateLocalGatewayRouteTableVpcAssociation"
+    "fixture/CreateLocalGatewayRouteTableVpcAssociation.yaml"
+
+requestCreateManagedPrefixList :: CreateManagedPrefixList -> TestTree
+requestCreateManagedPrefixList =
+  req
+    "CreateManagedPrefixList"
+    "fixture/CreateManagedPrefixList.yaml"
+
+requestCreateNatGateway :: CreateNatGateway -> TestTree
+requestCreateNatGateway =
+  req
+    "CreateNatGateway"
+    "fixture/CreateNatGateway.yaml"
+
+requestCreateNetworkAcl :: CreateNetworkAcl -> TestTree
+requestCreateNetworkAcl =
+  req
+    "CreateNetworkAcl"
+    "fixture/CreateNetworkAcl.yaml"
+
+requestCreateNetworkAclEntry :: CreateNetworkAclEntry -> TestTree
+requestCreateNetworkAclEntry =
+  req
+    "CreateNetworkAclEntry"
+    "fixture/CreateNetworkAclEntry.yaml"
+
+requestCreateNetworkInsightsAccessScope :: CreateNetworkInsightsAccessScope -> TestTree
+requestCreateNetworkInsightsAccessScope =
+  req
+    "CreateNetworkInsightsAccessScope"
+    "fixture/CreateNetworkInsightsAccessScope.yaml"
+
+requestCreateNetworkInsightsPath :: CreateNetworkInsightsPath -> TestTree
+requestCreateNetworkInsightsPath =
+  req
+    "CreateNetworkInsightsPath"
+    "fixture/CreateNetworkInsightsPath.yaml"
+
+requestCreateNetworkInterface :: CreateNetworkInterface -> TestTree
+requestCreateNetworkInterface =
+  req
+    "CreateNetworkInterface"
+    "fixture/CreateNetworkInterface.yaml"
+
+requestCreateNetworkInterfacePermission :: CreateNetworkInterfacePermission -> TestTree
+requestCreateNetworkInterfacePermission =
+  req
+    "CreateNetworkInterfacePermission"
+    "fixture/CreateNetworkInterfacePermission.yaml"
+
+requestCreatePlacementGroup :: CreatePlacementGroup -> TestTree
+requestCreatePlacementGroup =
+  req
+    "CreatePlacementGroup"
+    "fixture/CreatePlacementGroup.yaml"
+
+requestCreatePublicIpv4Pool :: CreatePublicIpv4Pool -> TestTree
+requestCreatePublicIpv4Pool =
+  req
+    "CreatePublicIpv4Pool"
+    "fixture/CreatePublicIpv4Pool.yaml"
+
+requestCreateReplaceRootVolumeTask :: CreateReplaceRootVolumeTask -> TestTree
+requestCreateReplaceRootVolumeTask =
+  req
+    "CreateReplaceRootVolumeTask"
+    "fixture/CreateReplaceRootVolumeTask.yaml"
+
+requestCreateReservedInstancesListing :: CreateReservedInstancesListing -> TestTree
+requestCreateReservedInstancesListing =
+  req
+    "CreateReservedInstancesListing"
+    "fixture/CreateReservedInstancesListing.yaml"
+
+requestCreateRestoreImageTask :: CreateRestoreImageTask -> TestTree
+requestCreateRestoreImageTask =
+  req
+    "CreateRestoreImageTask"
+    "fixture/CreateRestoreImageTask.yaml"
+
+requestCreateRoute :: CreateRoute -> TestTree
+requestCreateRoute =
+  req
+    "CreateRoute"
+    "fixture/CreateRoute.yaml"
+
+requestCreateRouteTable :: CreateRouteTable -> TestTree
+requestCreateRouteTable =
+  req
+    "CreateRouteTable"
+    "fixture/CreateRouteTable.yaml"
+
+requestCreateSecurityGroup :: CreateSecurityGroup -> TestTree
+requestCreateSecurityGroup =
+  req
+    "CreateSecurityGroup"
+    "fixture/CreateSecurityGroup.yaml"
+
+requestCreateSnapshot :: CreateSnapshot -> TestTree
+requestCreateSnapshot =
+  req
+    "CreateSnapshot"
+    "fixture/CreateSnapshot.yaml"
+
+requestCreateSnapshots :: CreateSnapshots -> TestTree
+requestCreateSnapshots =
+  req
+    "CreateSnapshots"
+    "fixture/CreateSnapshots.yaml"
+
+requestCreateSpotDatafeedSubscription :: CreateSpotDatafeedSubscription -> TestTree
+requestCreateSpotDatafeedSubscription =
+  req
+    "CreateSpotDatafeedSubscription"
+    "fixture/CreateSpotDatafeedSubscription.yaml"
+
+requestCreateStoreImageTask :: CreateStoreImageTask -> TestTree
+requestCreateStoreImageTask =
+  req
+    "CreateStoreImageTask"
+    "fixture/CreateStoreImageTask.yaml"
+
+requestCreateSubnet :: CreateSubnet -> TestTree
+requestCreateSubnet =
+  req
+    "CreateSubnet"
+    "fixture/CreateSubnet.yaml"
+
+requestCreateSubnetCidrReservation :: CreateSubnetCidrReservation -> TestTree
+requestCreateSubnetCidrReservation =
+  req
+    "CreateSubnetCidrReservation"
+    "fixture/CreateSubnetCidrReservation.yaml"
+
+requestCreateTags :: CreateTags -> TestTree
+requestCreateTags =
+  req
+    "CreateTags"
+    "fixture/CreateTags.yaml"
+
+requestCreateTrafficMirrorFilter :: CreateTrafficMirrorFilter -> TestTree
+requestCreateTrafficMirrorFilter =
+  req
+    "CreateTrafficMirrorFilter"
+    "fixture/CreateTrafficMirrorFilter.yaml"
+
+requestCreateTrafficMirrorFilterRule :: CreateTrafficMirrorFilterRule -> TestTree
+requestCreateTrafficMirrorFilterRule =
+  req
+    "CreateTrafficMirrorFilterRule"
+    "fixture/CreateTrafficMirrorFilterRule.yaml"
+
+requestCreateTrafficMirrorSession :: CreateTrafficMirrorSession -> TestTree
+requestCreateTrafficMirrorSession =
+  req
+    "CreateTrafficMirrorSession"
+    "fixture/CreateTrafficMirrorSession.yaml"
+
+requestCreateTrafficMirrorTarget :: CreateTrafficMirrorTarget -> TestTree
+requestCreateTrafficMirrorTarget =
+  req
+    "CreateTrafficMirrorTarget"
+    "fixture/CreateTrafficMirrorTarget.yaml"
+
+requestCreateTransitGateway :: CreateTransitGateway -> TestTree
+requestCreateTransitGateway =
+  req
+    "CreateTransitGateway"
+    "fixture/CreateTransitGateway.yaml"
+
+requestCreateTransitGatewayConnect :: CreateTransitGatewayConnect -> TestTree
+requestCreateTransitGatewayConnect =
+  req
+    "CreateTransitGatewayConnect"
+    "fixture/CreateTransitGatewayConnect.yaml"
+
+requestCreateTransitGatewayConnectPeer :: CreateTransitGatewayConnectPeer -> TestTree
+requestCreateTransitGatewayConnectPeer =
+  req
+    "CreateTransitGatewayConnectPeer"
+    "fixture/CreateTransitGatewayConnectPeer.yaml"
+
+requestCreateTransitGatewayMulticastDomain :: CreateTransitGatewayMulticastDomain -> TestTree
+requestCreateTransitGatewayMulticastDomain =
+  req
+    "CreateTransitGatewayMulticastDomain"
+    "fixture/CreateTransitGatewayMulticastDomain.yaml"
+
+requestCreateTransitGatewayPeeringAttachment :: CreateTransitGatewayPeeringAttachment -> TestTree
+requestCreateTransitGatewayPeeringAttachment =
+  req
+    "CreateTransitGatewayPeeringAttachment"
+    "fixture/CreateTransitGatewayPeeringAttachment.yaml"
+
+requestCreateTransitGatewayPolicyTable :: CreateTransitGatewayPolicyTable -> TestTree
+requestCreateTransitGatewayPolicyTable =
+  req
+    "CreateTransitGatewayPolicyTable"
+    "fixture/CreateTransitGatewayPolicyTable.yaml"
+
+requestCreateTransitGatewayPrefixListReference :: CreateTransitGatewayPrefixListReference -> TestTree
+requestCreateTransitGatewayPrefixListReference =
+  req
+    "CreateTransitGatewayPrefixListReference"
+    "fixture/CreateTransitGatewayPrefixListReference.yaml"
+
+requestCreateTransitGatewayRoute :: CreateTransitGatewayRoute -> TestTree
+requestCreateTransitGatewayRoute =
+  req
+    "CreateTransitGatewayRoute"
+    "fixture/CreateTransitGatewayRoute.yaml"
+
+requestCreateTransitGatewayRouteTable :: CreateTransitGatewayRouteTable -> TestTree
+requestCreateTransitGatewayRouteTable =
+  req
+    "CreateTransitGatewayRouteTable"
+    "fixture/CreateTransitGatewayRouteTable.yaml"
+
+requestCreateTransitGatewayRouteTableAnnouncement :: CreateTransitGatewayRouteTableAnnouncement -> TestTree
+requestCreateTransitGatewayRouteTableAnnouncement =
+  req
+    "CreateTransitGatewayRouteTableAnnouncement"
+    "fixture/CreateTransitGatewayRouteTableAnnouncement.yaml"
+
+requestCreateTransitGatewayVpcAttachment :: CreateTransitGatewayVpcAttachment -> TestTree
+requestCreateTransitGatewayVpcAttachment =
+  req
+    "CreateTransitGatewayVpcAttachment"
+    "fixture/CreateTransitGatewayVpcAttachment.yaml"
+
+requestCreateVerifiedAccessEndpoint :: CreateVerifiedAccessEndpoint -> TestTree
+requestCreateVerifiedAccessEndpoint =
+  req
+    "CreateVerifiedAccessEndpoint"
+    "fixture/CreateVerifiedAccessEndpoint.yaml"
+
+requestCreateVerifiedAccessGroup :: CreateVerifiedAccessGroup -> TestTree
+requestCreateVerifiedAccessGroup =
+  req
+    "CreateVerifiedAccessGroup"
+    "fixture/CreateVerifiedAccessGroup.yaml"
+
+requestCreateVerifiedAccessInstance :: CreateVerifiedAccessInstance -> TestTree
+requestCreateVerifiedAccessInstance =
+  req
+    "CreateVerifiedAccessInstance"
+    "fixture/CreateVerifiedAccessInstance.yaml"
+
+requestCreateVerifiedAccessTrustProvider :: CreateVerifiedAccessTrustProvider -> TestTree
+requestCreateVerifiedAccessTrustProvider =
+  req
+    "CreateVerifiedAccessTrustProvider"
+    "fixture/CreateVerifiedAccessTrustProvider.yaml"
+
+requestCreateVolume :: CreateVolume -> TestTree
+requestCreateVolume =
+  req
+    "CreateVolume"
+    "fixture/CreateVolume.yaml"
+
+requestCreateVpc :: CreateVpc -> TestTree
+requestCreateVpc =
+  req
+    "CreateVpc"
+    "fixture/CreateVpc.yaml"
+
+requestCreateVpcEndpoint :: CreateVpcEndpoint -> TestTree
+requestCreateVpcEndpoint =
+  req
+    "CreateVpcEndpoint"
+    "fixture/CreateVpcEndpoint.yaml"
+
+requestCreateVpcEndpointConnectionNotification :: CreateVpcEndpointConnectionNotification -> TestTree
+requestCreateVpcEndpointConnectionNotification =
+  req
+    "CreateVpcEndpointConnectionNotification"
+    "fixture/CreateVpcEndpointConnectionNotification.yaml"
+
+requestCreateVpcEndpointServiceConfiguration :: CreateVpcEndpointServiceConfiguration -> TestTree
+requestCreateVpcEndpointServiceConfiguration =
+  req
+    "CreateVpcEndpointServiceConfiguration"
+    "fixture/CreateVpcEndpointServiceConfiguration.yaml"
+
+requestCreateVpcPeeringConnection :: CreateVpcPeeringConnection -> TestTree
+requestCreateVpcPeeringConnection =
+  req
+    "CreateVpcPeeringConnection"
+    "fixture/CreateVpcPeeringConnection.yaml"
+
+requestCreateVpnConnection :: CreateVpnConnection -> TestTree
+requestCreateVpnConnection =
+  req
+    "CreateVpnConnection"
+    "fixture/CreateVpnConnection.yaml"
+
+requestCreateVpnConnectionRoute :: CreateVpnConnectionRoute -> TestTree
+requestCreateVpnConnectionRoute =
+  req
+    "CreateVpnConnectionRoute"
+    "fixture/CreateVpnConnectionRoute.yaml"
+
+requestCreateVpnGateway :: CreateVpnGateway -> TestTree
+requestCreateVpnGateway =
+  req
+    "CreateVpnGateway"
+    "fixture/CreateVpnGateway.yaml"
+
+requestDeleteCarrierGateway :: DeleteCarrierGateway -> TestTree
+requestDeleteCarrierGateway =
+  req
+    "DeleteCarrierGateway"
+    "fixture/DeleteCarrierGateway.yaml"
+
+requestDeleteClientVpnEndpoint :: DeleteClientVpnEndpoint -> TestTree
+requestDeleteClientVpnEndpoint =
+  req
+    "DeleteClientVpnEndpoint"
+    "fixture/DeleteClientVpnEndpoint.yaml"
+
+requestDeleteClientVpnRoute :: DeleteClientVpnRoute -> TestTree
+requestDeleteClientVpnRoute =
+  req
+    "DeleteClientVpnRoute"
+    "fixture/DeleteClientVpnRoute.yaml"
+
+requestDeleteCoipCidr :: DeleteCoipCidr -> TestTree
+requestDeleteCoipCidr =
+  req
+    "DeleteCoipCidr"
+    "fixture/DeleteCoipCidr.yaml"
+
+requestDeleteCoipPool :: DeleteCoipPool -> TestTree
+requestDeleteCoipPool =
+  req
+    "DeleteCoipPool"
+    "fixture/DeleteCoipPool.yaml"
+
+requestDeleteCustomerGateway :: DeleteCustomerGateway -> TestTree
+requestDeleteCustomerGateway =
+  req
+    "DeleteCustomerGateway"
+    "fixture/DeleteCustomerGateway.yaml"
+
+requestDeleteDhcpOptions :: DeleteDhcpOptions -> TestTree
+requestDeleteDhcpOptions =
+  req
+    "DeleteDhcpOptions"
+    "fixture/DeleteDhcpOptions.yaml"
+
+requestDeleteEgressOnlyInternetGateway :: DeleteEgressOnlyInternetGateway -> TestTree
+requestDeleteEgressOnlyInternetGateway =
+  req
+    "DeleteEgressOnlyInternetGateway"
+    "fixture/DeleteEgressOnlyInternetGateway.yaml"
+
+requestDeleteFleets :: DeleteFleets -> TestTree
+requestDeleteFleets =
+  req
+    "DeleteFleets"
+    "fixture/DeleteFleets.yaml"
+
+requestDeleteFlowLogs :: DeleteFlowLogs -> TestTree
+requestDeleteFlowLogs =
+  req
+    "DeleteFlowLogs"
+    "fixture/DeleteFlowLogs.yaml"
+
+requestDeleteFpgaImage :: DeleteFpgaImage -> TestTree
+requestDeleteFpgaImage =
+  req
+    "DeleteFpgaImage"
+    "fixture/DeleteFpgaImage.yaml"
+
+requestDeleteInstanceEventWindow :: DeleteInstanceEventWindow -> TestTree
+requestDeleteInstanceEventWindow =
+  req
+    "DeleteInstanceEventWindow"
+    "fixture/DeleteInstanceEventWindow.yaml"
+
+requestDeleteInternetGateway :: DeleteInternetGateway -> TestTree
+requestDeleteInternetGateway =
+  req
+    "DeleteInternetGateway"
+    "fixture/DeleteInternetGateway.yaml"
+
+requestDeleteIpam :: DeleteIpam -> TestTree
+requestDeleteIpam =
+  req
+    "DeleteIpam"
+    "fixture/DeleteIpam.yaml"
+
+requestDeleteIpamPool :: DeleteIpamPool -> TestTree
+requestDeleteIpamPool =
+  req
+    "DeleteIpamPool"
+    "fixture/DeleteIpamPool.yaml"
+
+requestDeleteIpamScope :: DeleteIpamScope -> TestTree
+requestDeleteIpamScope =
+  req
+    "DeleteIpamScope"
+    "fixture/DeleteIpamScope.yaml"
+
+requestDeleteKeyPair :: DeleteKeyPair -> TestTree
+requestDeleteKeyPair =
+  req
+    "DeleteKeyPair"
+    "fixture/DeleteKeyPair.yaml"
+
+requestDeleteLaunchTemplate :: DeleteLaunchTemplate -> TestTree
+requestDeleteLaunchTemplate =
+  req
+    "DeleteLaunchTemplate"
+    "fixture/DeleteLaunchTemplate.yaml"
+
+requestDeleteLaunchTemplateVersions :: DeleteLaunchTemplateVersions -> TestTree
+requestDeleteLaunchTemplateVersions =
+  req
+    "DeleteLaunchTemplateVersions"
+    "fixture/DeleteLaunchTemplateVersions.yaml"
+
+requestDeleteLocalGatewayRoute :: DeleteLocalGatewayRoute -> TestTree
+requestDeleteLocalGatewayRoute =
+  req
+    "DeleteLocalGatewayRoute"
+    "fixture/DeleteLocalGatewayRoute.yaml"
+
+requestDeleteLocalGatewayRouteTable :: DeleteLocalGatewayRouteTable -> TestTree
+requestDeleteLocalGatewayRouteTable =
+  req
+    "DeleteLocalGatewayRouteTable"
+    "fixture/DeleteLocalGatewayRouteTable.yaml"
+
+requestDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation :: DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation -> TestTree
+requestDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+  req
+    "DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation"
+    "fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation.yaml"
+
+requestDeleteLocalGatewayRouteTableVpcAssociation :: DeleteLocalGatewayRouteTableVpcAssociation -> TestTree
+requestDeleteLocalGatewayRouteTableVpcAssociation =
+  req
+    "DeleteLocalGatewayRouteTableVpcAssociation"
+    "fixture/DeleteLocalGatewayRouteTableVpcAssociation.yaml"
+
+requestDeleteManagedPrefixList :: DeleteManagedPrefixList -> TestTree
+requestDeleteManagedPrefixList =
+  req
+    "DeleteManagedPrefixList"
+    "fixture/DeleteManagedPrefixList.yaml"
+
+requestDeleteNatGateway :: DeleteNatGateway -> TestTree
+requestDeleteNatGateway =
+  req
+    "DeleteNatGateway"
+    "fixture/DeleteNatGateway.yaml"
+
+requestDeleteNetworkAcl :: DeleteNetworkAcl -> TestTree
+requestDeleteNetworkAcl =
+  req
+    "DeleteNetworkAcl"
+    "fixture/DeleteNetworkAcl.yaml"
+
+requestDeleteNetworkAclEntry :: DeleteNetworkAclEntry -> TestTree
+requestDeleteNetworkAclEntry =
+  req
+    "DeleteNetworkAclEntry"
+    "fixture/DeleteNetworkAclEntry.yaml"
+
+requestDeleteNetworkInsightsAccessScope :: DeleteNetworkInsightsAccessScope -> TestTree
+requestDeleteNetworkInsightsAccessScope =
+  req
+    "DeleteNetworkInsightsAccessScope"
+    "fixture/DeleteNetworkInsightsAccessScope.yaml"
+
+requestDeleteNetworkInsightsAccessScopeAnalysis :: DeleteNetworkInsightsAccessScopeAnalysis -> TestTree
+requestDeleteNetworkInsightsAccessScopeAnalysis =
+  req
+    "DeleteNetworkInsightsAccessScopeAnalysis"
+    "fixture/DeleteNetworkInsightsAccessScopeAnalysis.yaml"
+
+requestDeleteNetworkInsightsAnalysis :: DeleteNetworkInsightsAnalysis -> TestTree
+requestDeleteNetworkInsightsAnalysis =
+  req
+    "DeleteNetworkInsightsAnalysis"
+    "fixture/DeleteNetworkInsightsAnalysis.yaml"
+
+requestDeleteNetworkInsightsPath :: DeleteNetworkInsightsPath -> TestTree
+requestDeleteNetworkInsightsPath =
+  req
+    "DeleteNetworkInsightsPath"
+    "fixture/DeleteNetworkInsightsPath.yaml"
+
+requestDeleteNetworkInterface :: DeleteNetworkInterface -> TestTree
+requestDeleteNetworkInterface =
+  req
+    "DeleteNetworkInterface"
+    "fixture/DeleteNetworkInterface.yaml"
+
+requestDeleteNetworkInterfacePermission :: DeleteNetworkInterfacePermission -> TestTree
+requestDeleteNetworkInterfacePermission =
+  req
+    "DeleteNetworkInterfacePermission"
+    "fixture/DeleteNetworkInterfacePermission.yaml"
+
+requestDeletePlacementGroup :: DeletePlacementGroup -> TestTree
+requestDeletePlacementGroup =
+  req
+    "DeletePlacementGroup"
+    "fixture/DeletePlacementGroup.yaml"
+
+requestDeletePublicIpv4Pool :: DeletePublicIpv4Pool -> TestTree
+requestDeletePublicIpv4Pool =
+  req
+    "DeletePublicIpv4Pool"
+    "fixture/DeletePublicIpv4Pool.yaml"
+
+requestDeleteQueuedReservedInstances :: DeleteQueuedReservedInstances -> TestTree
+requestDeleteQueuedReservedInstances =
+  req
+    "DeleteQueuedReservedInstances"
+    "fixture/DeleteQueuedReservedInstances.yaml"
+
+requestDeleteRoute :: DeleteRoute -> TestTree
+requestDeleteRoute =
+  req
+    "DeleteRoute"
+    "fixture/DeleteRoute.yaml"
+
+requestDeleteRouteTable :: DeleteRouteTable -> TestTree
+requestDeleteRouteTable =
+  req
+    "DeleteRouteTable"
+    "fixture/DeleteRouteTable.yaml"
+
+requestDeleteSecurityGroup :: DeleteSecurityGroup -> TestTree
+requestDeleteSecurityGroup =
+  req
+    "DeleteSecurityGroup"
+    "fixture/DeleteSecurityGroup.yaml"
+
+requestDeleteSnapshot :: DeleteSnapshot -> TestTree
+requestDeleteSnapshot =
+  req
+    "DeleteSnapshot"
+    "fixture/DeleteSnapshot.yaml"
+
+requestDeleteSpotDatafeedSubscription :: DeleteSpotDatafeedSubscription -> TestTree
+requestDeleteSpotDatafeedSubscription =
+  req
+    "DeleteSpotDatafeedSubscription"
+    "fixture/DeleteSpotDatafeedSubscription.yaml"
+
+requestDeleteSubnet :: DeleteSubnet -> TestTree
+requestDeleteSubnet =
+  req
+    "DeleteSubnet"
+    "fixture/DeleteSubnet.yaml"
+
+requestDeleteSubnetCidrReservation :: DeleteSubnetCidrReservation -> TestTree
+requestDeleteSubnetCidrReservation =
+  req
+    "DeleteSubnetCidrReservation"
+    "fixture/DeleteSubnetCidrReservation.yaml"
+
+requestDeleteTags :: DeleteTags -> TestTree
+requestDeleteTags =
+  req
+    "DeleteTags"
+    "fixture/DeleteTags.yaml"
+
+requestDeleteTrafficMirrorFilter :: DeleteTrafficMirrorFilter -> TestTree
+requestDeleteTrafficMirrorFilter =
+  req
+    "DeleteTrafficMirrorFilter"
+    "fixture/DeleteTrafficMirrorFilter.yaml"
+
+requestDeleteTrafficMirrorFilterRule :: DeleteTrafficMirrorFilterRule -> TestTree
+requestDeleteTrafficMirrorFilterRule =
+  req
+    "DeleteTrafficMirrorFilterRule"
+    "fixture/DeleteTrafficMirrorFilterRule.yaml"
+
+requestDeleteTrafficMirrorSession :: DeleteTrafficMirrorSession -> TestTree
+requestDeleteTrafficMirrorSession =
+  req
+    "DeleteTrafficMirrorSession"
+    "fixture/DeleteTrafficMirrorSession.yaml"
+
+requestDeleteTrafficMirrorTarget :: DeleteTrafficMirrorTarget -> TestTree
+requestDeleteTrafficMirrorTarget =
+  req
+    "DeleteTrafficMirrorTarget"
+    "fixture/DeleteTrafficMirrorTarget.yaml"
+
+requestDeleteTransitGateway :: DeleteTransitGateway -> TestTree
+requestDeleteTransitGateway =
+  req
+    "DeleteTransitGateway"
+    "fixture/DeleteTransitGateway.yaml"
+
+requestDeleteTransitGatewayConnect :: DeleteTransitGatewayConnect -> TestTree
+requestDeleteTransitGatewayConnect =
+  req
+    "DeleteTransitGatewayConnect"
+    "fixture/DeleteTransitGatewayConnect.yaml"
+
+requestDeleteTransitGatewayConnectPeer :: DeleteTransitGatewayConnectPeer -> TestTree
+requestDeleteTransitGatewayConnectPeer =
+  req
+    "DeleteTransitGatewayConnectPeer"
+    "fixture/DeleteTransitGatewayConnectPeer.yaml"
+
+requestDeleteTransitGatewayMulticastDomain :: DeleteTransitGatewayMulticastDomain -> TestTree
+requestDeleteTransitGatewayMulticastDomain =
+  req
+    "DeleteTransitGatewayMulticastDomain"
+    "fixture/DeleteTransitGatewayMulticastDomain.yaml"
+
+requestDeleteTransitGatewayPeeringAttachment :: DeleteTransitGatewayPeeringAttachment -> TestTree
+requestDeleteTransitGatewayPeeringAttachment =
+  req
+    "DeleteTransitGatewayPeeringAttachment"
+    "fixture/DeleteTransitGatewayPeeringAttachment.yaml"
+
+requestDeleteTransitGatewayPolicyTable :: DeleteTransitGatewayPolicyTable -> TestTree
+requestDeleteTransitGatewayPolicyTable =
+  req
+    "DeleteTransitGatewayPolicyTable"
+    "fixture/DeleteTransitGatewayPolicyTable.yaml"
+
+requestDeleteTransitGatewayPrefixListReference :: DeleteTransitGatewayPrefixListReference -> TestTree
+requestDeleteTransitGatewayPrefixListReference =
+  req
+    "DeleteTransitGatewayPrefixListReference"
+    "fixture/DeleteTransitGatewayPrefixListReference.yaml"
+
+requestDeleteTransitGatewayRoute :: DeleteTransitGatewayRoute -> TestTree
+requestDeleteTransitGatewayRoute =
+  req
+    "DeleteTransitGatewayRoute"
+    "fixture/DeleteTransitGatewayRoute.yaml"
+
+requestDeleteTransitGatewayRouteTable :: DeleteTransitGatewayRouteTable -> TestTree
+requestDeleteTransitGatewayRouteTable =
+  req
+    "DeleteTransitGatewayRouteTable"
+    "fixture/DeleteTransitGatewayRouteTable.yaml"
+
+requestDeleteTransitGatewayRouteTableAnnouncement :: DeleteTransitGatewayRouteTableAnnouncement -> TestTree
+requestDeleteTransitGatewayRouteTableAnnouncement =
+  req
+    "DeleteTransitGatewayRouteTableAnnouncement"
+    "fixture/DeleteTransitGatewayRouteTableAnnouncement.yaml"
+
+requestDeleteTransitGatewayVpcAttachment :: DeleteTransitGatewayVpcAttachment -> TestTree
+requestDeleteTransitGatewayVpcAttachment =
+  req
+    "DeleteTransitGatewayVpcAttachment"
+    "fixture/DeleteTransitGatewayVpcAttachment.yaml"
+
+requestDeleteVerifiedAccessEndpoint :: DeleteVerifiedAccessEndpoint -> TestTree
+requestDeleteVerifiedAccessEndpoint =
+  req
+    "DeleteVerifiedAccessEndpoint"
+    "fixture/DeleteVerifiedAccessEndpoint.yaml"
+
+requestDeleteVerifiedAccessGroup :: DeleteVerifiedAccessGroup -> TestTree
+requestDeleteVerifiedAccessGroup =
+  req
+    "DeleteVerifiedAccessGroup"
+    "fixture/DeleteVerifiedAccessGroup.yaml"
+
+requestDeleteVerifiedAccessInstance :: DeleteVerifiedAccessInstance -> TestTree
+requestDeleteVerifiedAccessInstance =
+  req
+    "DeleteVerifiedAccessInstance"
+    "fixture/DeleteVerifiedAccessInstance.yaml"
+
+requestDeleteVerifiedAccessTrustProvider :: DeleteVerifiedAccessTrustProvider -> TestTree
+requestDeleteVerifiedAccessTrustProvider =
+  req
+    "DeleteVerifiedAccessTrustProvider"
+    "fixture/DeleteVerifiedAccessTrustProvider.yaml"
+
+requestDeleteVolume :: DeleteVolume -> TestTree
+requestDeleteVolume =
+  req
+    "DeleteVolume"
+    "fixture/DeleteVolume.yaml"
+
+requestDeleteVpc :: DeleteVpc -> TestTree
+requestDeleteVpc =
+  req
+    "DeleteVpc"
+    "fixture/DeleteVpc.yaml"
+
+requestDeleteVpcEndpointConnectionNotifications :: DeleteVpcEndpointConnectionNotifications -> TestTree
+requestDeleteVpcEndpointConnectionNotifications =
+  req
+    "DeleteVpcEndpointConnectionNotifications"
+    "fixture/DeleteVpcEndpointConnectionNotifications.yaml"
+
+requestDeleteVpcEndpointServiceConfigurations :: DeleteVpcEndpointServiceConfigurations -> TestTree
+requestDeleteVpcEndpointServiceConfigurations =
+  req
+    "DeleteVpcEndpointServiceConfigurations"
+    "fixture/DeleteVpcEndpointServiceConfigurations.yaml"
+
+requestDeleteVpcEndpoints :: DeleteVpcEndpoints -> TestTree
+requestDeleteVpcEndpoints =
+  req
+    "DeleteVpcEndpoints"
+    "fixture/DeleteVpcEndpoints.yaml"
+
+requestDeleteVpcPeeringConnection :: DeleteVpcPeeringConnection -> TestTree
+requestDeleteVpcPeeringConnection =
+  req
+    "DeleteVpcPeeringConnection"
+    "fixture/DeleteVpcPeeringConnection.yaml"
+
+requestDeleteVpnConnection :: DeleteVpnConnection -> TestTree
+requestDeleteVpnConnection =
+  req
+    "DeleteVpnConnection"
+    "fixture/DeleteVpnConnection.yaml"
+
+requestDeleteVpnConnectionRoute :: DeleteVpnConnectionRoute -> TestTree
+requestDeleteVpnConnectionRoute =
+  req
+    "DeleteVpnConnectionRoute"
+    "fixture/DeleteVpnConnectionRoute.yaml"
+
+requestDeleteVpnGateway :: DeleteVpnGateway -> TestTree
+requestDeleteVpnGateway =
+  req
+    "DeleteVpnGateway"
+    "fixture/DeleteVpnGateway.yaml"
+
+requestDeprovisionByoipCidr :: DeprovisionByoipCidr -> TestTree
+requestDeprovisionByoipCidr =
+  req
+    "DeprovisionByoipCidr"
+    "fixture/DeprovisionByoipCidr.yaml"
+
+requestDeprovisionIpamPoolCidr :: DeprovisionIpamPoolCidr -> TestTree
+requestDeprovisionIpamPoolCidr =
+  req
+    "DeprovisionIpamPoolCidr"
+    "fixture/DeprovisionIpamPoolCidr.yaml"
+
+requestDeprovisionPublicIpv4PoolCidr :: DeprovisionPublicIpv4PoolCidr -> TestTree
+requestDeprovisionPublicIpv4PoolCidr =
+  req
+    "DeprovisionPublicIpv4PoolCidr"
+    "fixture/DeprovisionPublicIpv4PoolCidr.yaml"
+
+requestDeregisterImage :: DeregisterImage -> TestTree
+requestDeregisterImage =
+  req
+    "DeregisterImage"
+    "fixture/DeregisterImage.yaml"
+
+requestDeregisterInstanceEventNotificationAttributes :: DeregisterInstanceEventNotificationAttributes -> TestTree
+requestDeregisterInstanceEventNotificationAttributes =
+  req
+    "DeregisterInstanceEventNotificationAttributes"
+    "fixture/DeregisterInstanceEventNotificationAttributes.yaml"
+
+requestDeregisterTransitGatewayMulticastGroupMembers :: DeregisterTransitGatewayMulticastGroupMembers -> TestTree
+requestDeregisterTransitGatewayMulticastGroupMembers =
+  req
+    "DeregisterTransitGatewayMulticastGroupMembers"
+    "fixture/DeregisterTransitGatewayMulticastGroupMembers.yaml"
+
+requestDeregisterTransitGatewayMulticastGroupSources :: DeregisterTransitGatewayMulticastGroupSources -> TestTree
+requestDeregisterTransitGatewayMulticastGroupSources =
+  req
+    "DeregisterTransitGatewayMulticastGroupSources"
+    "fixture/DeregisterTransitGatewayMulticastGroupSources.yaml"
+
+requestDescribeAccountAttributes :: DescribeAccountAttributes -> TestTree
+requestDescribeAccountAttributes =
+  req
+    "DescribeAccountAttributes"
+    "fixture/DescribeAccountAttributes.yaml"
+
+requestDescribeAddressTransfers :: DescribeAddressTransfers -> TestTree
+requestDescribeAddressTransfers =
+  req
+    "DescribeAddressTransfers"
+    "fixture/DescribeAddressTransfers.yaml"
+
+requestDescribeAddresses :: DescribeAddresses -> TestTree
+requestDescribeAddresses =
+  req
+    "DescribeAddresses"
+    "fixture/DescribeAddresses.yaml"
+
+requestDescribeAddressesAttribute :: DescribeAddressesAttribute -> TestTree
+requestDescribeAddressesAttribute =
+  req
+    "DescribeAddressesAttribute"
+    "fixture/DescribeAddressesAttribute.yaml"
+
+requestDescribeAggregateIdFormat :: DescribeAggregateIdFormat -> TestTree
+requestDescribeAggregateIdFormat =
+  req
+    "DescribeAggregateIdFormat"
+    "fixture/DescribeAggregateIdFormat.yaml"
+
+requestDescribeAvailabilityZones :: DescribeAvailabilityZones -> TestTree
+requestDescribeAvailabilityZones =
+  req
+    "DescribeAvailabilityZones"
+    "fixture/DescribeAvailabilityZones.yaml"
+
+requestDescribeAwsNetworkPerformanceMetricSubscriptions :: DescribeAwsNetworkPerformanceMetricSubscriptions -> TestTree
+requestDescribeAwsNetworkPerformanceMetricSubscriptions =
+  req
+    "DescribeAwsNetworkPerformanceMetricSubscriptions"
+    "fixture/DescribeAwsNetworkPerformanceMetricSubscriptions.yaml"
+
+requestDescribeBundleTasks :: DescribeBundleTasks -> TestTree
+requestDescribeBundleTasks =
+  req
+    "DescribeBundleTasks"
+    "fixture/DescribeBundleTasks.yaml"
+
+requestDescribeByoipCidrs :: DescribeByoipCidrs -> TestTree
+requestDescribeByoipCidrs =
+  req
+    "DescribeByoipCidrs"
+    "fixture/DescribeByoipCidrs.yaml"
+
+requestDescribeCapacityReservationFleets :: DescribeCapacityReservationFleets -> TestTree
+requestDescribeCapacityReservationFleets =
+  req
+    "DescribeCapacityReservationFleets"
+    "fixture/DescribeCapacityReservationFleets.yaml"
+
+requestDescribeCapacityReservations :: DescribeCapacityReservations -> TestTree
+requestDescribeCapacityReservations =
+  req
+    "DescribeCapacityReservations"
+    "fixture/DescribeCapacityReservations.yaml"
+
+requestDescribeCarrierGateways :: DescribeCarrierGateways -> TestTree
+requestDescribeCarrierGateways =
+  req
+    "DescribeCarrierGateways"
+    "fixture/DescribeCarrierGateways.yaml"
+
+requestDescribeClassicLinkInstances :: DescribeClassicLinkInstances -> TestTree
+requestDescribeClassicLinkInstances =
+  req
+    "DescribeClassicLinkInstances"
+    "fixture/DescribeClassicLinkInstances.yaml"
+
+requestDescribeClientVpnAuthorizationRules :: DescribeClientVpnAuthorizationRules -> TestTree
+requestDescribeClientVpnAuthorizationRules =
+  req
+    "DescribeClientVpnAuthorizationRules"
+    "fixture/DescribeClientVpnAuthorizationRules.yaml"
+
+requestDescribeClientVpnConnections :: DescribeClientVpnConnections -> TestTree
+requestDescribeClientVpnConnections =
+  req
+    "DescribeClientVpnConnections"
+    "fixture/DescribeClientVpnConnections.yaml"
+
+requestDescribeClientVpnEndpoints :: DescribeClientVpnEndpoints -> TestTree
+requestDescribeClientVpnEndpoints =
+  req
+    "DescribeClientVpnEndpoints"
+    "fixture/DescribeClientVpnEndpoints.yaml"
+
+requestDescribeClientVpnRoutes :: DescribeClientVpnRoutes -> TestTree
+requestDescribeClientVpnRoutes =
+  req
+    "DescribeClientVpnRoutes"
+    "fixture/DescribeClientVpnRoutes.yaml"
+
+requestDescribeClientVpnTargetNetworks :: DescribeClientVpnTargetNetworks -> TestTree
+requestDescribeClientVpnTargetNetworks =
+  req
+    "DescribeClientVpnTargetNetworks"
+    "fixture/DescribeClientVpnTargetNetworks.yaml"
+
+requestDescribeCoipPools :: DescribeCoipPools -> TestTree
+requestDescribeCoipPools =
+  req
+    "DescribeCoipPools"
+    "fixture/DescribeCoipPools.yaml"
+
+requestDescribeConversionTasks :: DescribeConversionTasks -> TestTree
+requestDescribeConversionTasks =
+  req
+    "DescribeConversionTasks"
+    "fixture/DescribeConversionTasks.yaml"
+
+requestDescribeCustomerGateways :: DescribeCustomerGateways -> TestTree
+requestDescribeCustomerGateways =
+  req
+    "DescribeCustomerGateways"
+    "fixture/DescribeCustomerGateways.yaml"
+
+requestDescribeDhcpOptions :: DescribeDhcpOptions -> TestTree
+requestDescribeDhcpOptions =
+  req
+    "DescribeDhcpOptions"
+    "fixture/DescribeDhcpOptions.yaml"
+
+requestDescribeEgressOnlyInternetGateways :: DescribeEgressOnlyInternetGateways -> TestTree
+requestDescribeEgressOnlyInternetGateways =
+  req
+    "DescribeEgressOnlyInternetGateways"
+    "fixture/DescribeEgressOnlyInternetGateways.yaml"
+
+requestDescribeElasticGpus :: DescribeElasticGpus -> TestTree
+requestDescribeElasticGpus =
+  req
+    "DescribeElasticGpus"
+    "fixture/DescribeElasticGpus.yaml"
+
+requestDescribeExportImageTasks :: DescribeExportImageTasks -> TestTree
+requestDescribeExportImageTasks =
+  req
+    "DescribeExportImageTasks"
+    "fixture/DescribeExportImageTasks.yaml"
+
+requestDescribeExportTasks :: DescribeExportTasks -> TestTree
+requestDescribeExportTasks =
+  req
+    "DescribeExportTasks"
+    "fixture/DescribeExportTasks.yaml"
+
+requestDescribeFastLaunchImages :: DescribeFastLaunchImages -> TestTree
+requestDescribeFastLaunchImages =
+  req
+    "DescribeFastLaunchImages"
+    "fixture/DescribeFastLaunchImages.yaml"
+
+requestDescribeFastSnapshotRestores :: DescribeFastSnapshotRestores -> TestTree
+requestDescribeFastSnapshotRestores =
+  req
+    "DescribeFastSnapshotRestores"
+    "fixture/DescribeFastSnapshotRestores.yaml"
+
+requestDescribeFleetHistory :: DescribeFleetHistory -> TestTree
+requestDescribeFleetHistory =
+  req
+    "DescribeFleetHistory"
+    "fixture/DescribeFleetHistory.yaml"
+
+requestDescribeFleetInstances :: DescribeFleetInstances -> TestTree
+requestDescribeFleetInstances =
+  req
+    "DescribeFleetInstances"
+    "fixture/DescribeFleetInstances.yaml"
+
+requestDescribeFleets :: DescribeFleets -> TestTree
+requestDescribeFleets =
+  req
+    "DescribeFleets"
+    "fixture/DescribeFleets.yaml"
+
+requestDescribeFlowLogs :: DescribeFlowLogs -> TestTree
+requestDescribeFlowLogs =
+  req
+    "DescribeFlowLogs"
+    "fixture/DescribeFlowLogs.yaml"
+
+requestDescribeFpgaImageAttribute :: DescribeFpgaImageAttribute -> TestTree
+requestDescribeFpgaImageAttribute =
+  req
+    "DescribeFpgaImageAttribute"
+    "fixture/DescribeFpgaImageAttribute.yaml"
+
+requestDescribeFpgaImages :: DescribeFpgaImages -> TestTree
+requestDescribeFpgaImages =
+  req
+    "DescribeFpgaImages"
+    "fixture/DescribeFpgaImages.yaml"
+
+requestDescribeHostReservationOfferings :: DescribeHostReservationOfferings -> TestTree
+requestDescribeHostReservationOfferings =
+  req
+    "DescribeHostReservationOfferings"
+    "fixture/DescribeHostReservationOfferings.yaml"
+
+requestDescribeHostReservations :: DescribeHostReservations -> TestTree
+requestDescribeHostReservations =
+  req
+    "DescribeHostReservations"
+    "fixture/DescribeHostReservations.yaml"
+
+requestDescribeHosts :: DescribeHosts -> TestTree
+requestDescribeHosts =
+  req
+    "DescribeHosts"
+    "fixture/DescribeHosts.yaml"
+
+requestDescribeIamInstanceProfileAssociations :: DescribeIamInstanceProfileAssociations -> TestTree
+requestDescribeIamInstanceProfileAssociations =
+  req
+    "DescribeIamInstanceProfileAssociations"
+    "fixture/DescribeIamInstanceProfileAssociations.yaml"
+
+requestDescribeIdFormat :: DescribeIdFormat -> TestTree
+requestDescribeIdFormat =
+  req
+    "DescribeIdFormat"
+    "fixture/DescribeIdFormat.yaml"
+
+requestDescribeIdentityIdFormat :: DescribeIdentityIdFormat -> TestTree
+requestDescribeIdentityIdFormat =
+  req
+    "DescribeIdentityIdFormat"
+    "fixture/DescribeIdentityIdFormat.yaml"
+
+requestDescribeImageAttribute :: DescribeImageAttribute -> TestTree
+requestDescribeImageAttribute =
+  req
+    "DescribeImageAttribute"
+    "fixture/DescribeImageAttribute.yaml"
+
+requestDescribeImages :: DescribeImages -> TestTree
+requestDescribeImages =
+  req
+    "DescribeImages"
+    "fixture/DescribeImages.yaml"
+
+requestDescribeImportImageTasks :: DescribeImportImageTasks -> TestTree
+requestDescribeImportImageTasks =
+  req
+    "DescribeImportImageTasks"
+    "fixture/DescribeImportImageTasks.yaml"
+
+requestDescribeImportSnapshotTasks :: DescribeImportSnapshotTasks -> TestTree
+requestDescribeImportSnapshotTasks =
+  req
+    "DescribeImportSnapshotTasks"
+    "fixture/DescribeImportSnapshotTasks.yaml"
+
+requestDescribeInstanceAttribute :: DescribeInstanceAttribute -> TestTree
+requestDescribeInstanceAttribute =
+  req
+    "DescribeInstanceAttribute"
+    "fixture/DescribeInstanceAttribute.yaml"
+
+requestDescribeInstanceCreditSpecifications :: DescribeInstanceCreditSpecifications -> TestTree
+requestDescribeInstanceCreditSpecifications =
+  req
+    "DescribeInstanceCreditSpecifications"
+    "fixture/DescribeInstanceCreditSpecifications.yaml"
+
+requestDescribeInstanceEventNotificationAttributes :: DescribeInstanceEventNotificationAttributes -> TestTree
+requestDescribeInstanceEventNotificationAttributes =
+  req
+    "DescribeInstanceEventNotificationAttributes"
+    "fixture/DescribeInstanceEventNotificationAttributes.yaml"
+
+requestDescribeInstanceEventWindows :: DescribeInstanceEventWindows -> TestTree
+requestDescribeInstanceEventWindows =
+  req
+    "DescribeInstanceEventWindows"
+    "fixture/DescribeInstanceEventWindows.yaml"
+
+requestDescribeInstanceStatus :: DescribeInstanceStatus -> TestTree
+requestDescribeInstanceStatus =
+  req
+    "DescribeInstanceStatus"
+    "fixture/DescribeInstanceStatus.yaml"
+
+requestDescribeInstanceTypeOfferings :: DescribeInstanceTypeOfferings -> TestTree
+requestDescribeInstanceTypeOfferings =
+  req
+    "DescribeInstanceTypeOfferings"
+    "fixture/DescribeInstanceTypeOfferings.yaml"
+
+requestDescribeInstanceTypes :: DescribeInstanceTypes -> TestTree
+requestDescribeInstanceTypes =
+  req
+    "DescribeInstanceTypes"
+    "fixture/DescribeInstanceTypes.yaml"
+
+requestDescribeInstances :: DescribeInstances -> TestTree
+requestDescribeInstances =
+  req
+    "DescribeInstances"
+    "fixture/DescribeInstances.yaml"
+
+requestDescribeInternetGateways :: DescribeInternetGateways -> TestTree
+requestDescribeInternetGateways =
+  req
+    "DescribeInternetGateways"
+    "fixture/DescribeInternetGateways.yaml"
+
+requestDescribeIpamPools :: DescribeIpamPools -> TestTree
+requestDescribeIpamPools =
+  req
+    "DescribeIpamPools"
+    "fixture/DescribeIpamPools.yaml"
+
+requestDescribeIpamScopes :: DescribeIpamScopes -> TestTree
+requestDescribeIpamScopes =
+  req
+    "DescribeIpamScopes"
+    "fixture/DescribeIpamScopes.yaml"
+
+requestDescribeIpams :: DescribeIpams -> TestTree
+requestDescribeIpams =
+  req
+    "DescribeIpams"
+    "fixture/DescribeIpams.yaml"
+
+requestDescribeIpv6Pools :: DescribeIpv6Pools -> TestTree
+requestDescribeIpv6Pools =
+  req
+    "DescribeIpv6Pools"
+    "fixture/DescribeIpv6Pools.yaml"
+
+requestDescribeKeyPairs :: DescribeKeyPairs -> TestTree
+requestDescribeKeyPairs =
+  req
+    "DescribeKeyPairs"
+    "fixture/DescribeKeyPairs.yaml"
+
+requestDescribeLaunchTemplateVersions :: DescribeLaunchTemplateVersions -> TestTree
+requestDescribeLaunchTemplateVersions =
+  req
+    "DescribeLaunchTemplateVersions"
+    "fixture/DescribeLaunchTemplateVersions.yaml"
+
+requestDescribeLaunchTemplates :: DescribeLaunchTemplates -> TestTree
+requestDescribeLaunchTemplates =
+  req
+    "DescribeLaunchTemplates"
+    "fixture/DescribeLaunchTemplates.yaml"
+
+requestDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations -> TestTree
+requestDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations =
+  req
+    "DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations"
+    "fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations.yaml"
+
+requestDescribeLocalGatewayRouteTableVpcAssociations :: DescribeLocalGatewayRouteTableVpcAssociations -> TestTree
+requestDescribeLocalGatewayRouteTableVpcAssociations =
+  req
+    "DescribeLocalGatewayRouteTableVpcAssociations"
+    "fixture/DescribeLocalGatewayRouteTableVpcAssociations.yaml"
+
+requestDescribeLocalGatewayRouteTables :: DescribeLocalGatewayRouteTables -> TestTree
+requestDescribeLocalGatewayRouteTables =
+  req
+    "DescribeLocalGatewayRouteTables"
+    "fixture/DescribeLocalGatewayRouteTables.yaml"
+
+requestDescribeLocalGatewayVirtualInterfaceGroups :: DescribeLocalGatewayVirtualInterfaceGroups -> TestTree
+requestDescribeLocalGatewayVirtualInterfaceGroups =
+  req
+    "DescribeLocalGatewayVirtualInterfaceGroups"
+    "fixture/DescribeLocalGatewayVirtualInterfaceGroups.yaml"
+
+requestDescribeLocalGatewayVirtualInterfaces :: DescribeLocalGatewayVirtualInterfaces -> TestTree
+requestDescribeLocalGatewayVirtualInterfaces =
+  req
+    "DescribeLocalGatewayVirtualInterfaces"
+    "fixture/DescribeLocalGatewayVirtualInterfaces.yaml"
+
+requestDescribeLocalGateways :: DescribeLocalGateways -> TestTree
+requestDescribeLocalGateways =
+  req
+    "DescribeLocalGateways"
+    "fixture/DescribeLocalGateways.yaml"
+
+requestDescribeManagedPrefixLists :: DescribeManagedPrefixLists -> TestTree
+requestDescribeManagedPrefixLists =
+  req
+    "DescribeManagedPrefixLists"
+    "fixture/DescribeManagedPrefixLists.yaml"
+
+requestDescribeMovingAddresses :: DescribeMovingAddresses -> TestTree
+requestDescribeMovingAddresses =
+  req
+    "DescribeMovingAddresses"
+    "fixture/DescribeMovingAddresses.yaml"
+
+requestDescribeNatGateways :: DescribeNatGateways -> TestTree
+requestDescribeNatGateways =
+  req
+    "DescribeNatGateways"
+    "fixture/DescribeNatGateways.yaml"
+
+requestDescribeNetworkAcls :: DescribeNetworkAcls -> TestTree
+requestDescribeNetworkAcls =
+  req
+    "DescribeNetworkAcls"
+    "fixture/DescribeNetworkAcls.yaml"
+
+requestDescribeNetworkInsightsAccessScopeAnalyses :: DescribeNetworkInsightsAccessScopeAnalyses -> TestTree
+requestDescribeNetworkInsightsAccessScopeAnalyses =
+  req
+    "DescribeNetworkInsightsAccessScopeAnalyses"
+    "fixture/DescribeNetworkInsightsAccessScopeAnalyses.yaml"
+
+requestDescribeNetworkInsightsAccessScopes :: DescribeNetworkInsightsAccessScopes -> TestTree
+requestDescribeNetworkInsightsAccessScopes =
+  req
+    "DescribeNetworkInsightsAccessScopes"
+    "fixture/DescribeNetworkInsightsAccessScopes.yaml"
+
+requestDescribeNetworkInsightsAnalyses :: DescribeNetworkInsightsAnalyses -> TestTree
+requestDescribeNetworkInsightsAnalyses =
+  req
+    "DescribeNetworkInsightsAnalyses"
+    "fixture/DescribeNetworkInsightsAnalyses.yaml"
+
+requestDescribeNetworkInsightsPaths :: DescribeNetworkInsightsPaths -> TestTree
+requestDescribeNetworkInsightsPaths =
+  req
+    "DescribeNetworkInsightsPaths"
+    "fixture/DescribeNetworkInsightsPaths.yaml"
+
+requestDescribeNetworkInterfaceAttribute :: DescribeNetworkInterfaceAttribute -> TestTree
+requestDescribeNetworkInterfaceAttribute =
+  req
+    "DescribeNetworkInterfaceAttribute"
+    "fixture/DescribeNetworkInterfaceAttribute.yaml"
+
+requestDescribeNetworkInterfacePermissions :: DescribeNetworkInterfacePermissions -> TestTree
+requestDescribeNetworkInterfacePermissions =
+  req
+    "DescribeNetworkInterfacePermissions"
+    "fixture/DescribeNetworkInterfacePermissions.yaml"
+
+requestDescribeNetworkInterfaces :: DescribeNetworkInterfaces -> TestTree
+requestDescribeNetworkInterfaces =
+  req
+    "DescribeNetworkInterfaces"
+    "fixture/DescribeNetworkInterfaces.yaml"
+
+requestDescribePlacementGroups :: DescribePlacementGroups -> TestTree
+requestDescribePlacementGroups =
+  req
+    "DescribePlacementGroups"
+    "fixture/DescribePlacementGroups.yaml"
+
+requestDescribePrefixLists :: DescribePrefixLists -> TestTree
+requestDescribePrefixLists =
+  req
+    "DescribePrefixLists"
+    "fixture/DescribePrefixLists.yaml"
+
+requestDescribePrincipalIdFormat :: DescribePrincipalIdFormat -> TestTree
+requestDescribePrincipalIdFormat =
+  req
+    "DescribePrincipalIdFormat"
+    "fixture/DescribePrincipalIdFormat.yaml"
+
+requestDescribePublicIpv4Pools :: DescribePublicIpv4Pools -> TestTree
+requestDescribePublicIpv4Pools =
+  req
+    "DescribePublicIpv4Pools"
+    "fixture/DescribePublicIpv4Pools.yaml"
+
+requestDescribeRegions :: DescribeRegions -> TestTree
+requestDescribeRegions =
+  req
+    "DescribeRegions"
+    "fixture/DescribeRegions.yaml"
+
+requestDescribeReplaceRootVolumeTasks :: DescribeReplaceRootVolumeTasks -> TestTree
+requestDescribeReplaceRootVolumeTasks =
+  req
+    "DescribeReplaceRootVolumeTasks"
+    "fixture/DescribeReplaceRootVolumeTasks.yaml"
+
+requestDescribeReservedInstances :: DescribeReservedInstances -> TestTree
+requestDescribeReservedInstances =
+  req
+    "DescribeReservedInstances"
+    "fixture/DescribeReservedInstances.yaml"
+
+requestDescribeReservedInstancesListings :: DescribeReservedInstancesListings -> TestTree
+requestDescribeReservedInstancesListings =
+  req
+    "DescribeReservedInstancesListings"
+    "fixture/DescribeReservedInstancesListings.yaml"
+
+requestDescribeReservedInstancesModifications :: DescribeReservedInstancesModifications -> TestTree
+requestDescribeReservedInstancesModifications =
+  req
+    "DescribeReservedInstancesModifications"
+    "fixture/DescribeReservedInstancesModifications.yaml"
+
+requestDescribeReservedInstancesOfferings :: DescribeReservedInstancesOfferings -> TestTree
+requestDescribeReservedInstancesOfferings =
+  req
+    "DescribeReservedInstancesOfferings"
+    "fixture/DescribeReservedInstancesOfferings.yaml"
+
+requestDescribeRouteTables :: DescribeRouteTables -> TestTree
+requestDescribeRouteTables =
+  req
+    "DescribeRouteTables"
+    "fixture/DescribeRouteTables.yaml"
+
+requestDescribeScheduledInstanceAvailability :: DescribeScheduledInstanceAvailability -> TestTree
+requestDescribeScheduledInstanceAvailability =
+  req
+    "DescribeScheduledInstanceAvailability"
+    "fixture/DescribeScheduledInstanceAvailability.yaml"
+
+requestDescribeScheduledInstances :: DescribeScheduledInstances -> TestTree
+requestDescribeScheduledInstances =
+  req
+    "DescribeScheduledInstances"
+    "fixture/DescribeScheduledInstances.yaml"
+
+requestDescribeSecurityGroupReferences :: DescribeSecurityGroupReferences -> TestTree
+requestDescribeSecurityGroupReferences =
+  req
+    "DescribeSecurityGroupReferences"
+    "fixture/DescribeSecurityGroupReferences.yaml"
+
+requestDescribeSecurityGroupRules :: DescribeSecurityGroupRules -> TestTree
+requestDescribeSecurityGroupRules =
+  req
+    "DescribeSecurityGroupRules"
+    "fixture/DescribeSecurityGroupRules.yaml"
+
+requestDescribeSecurityGroups :: DescribeSecurityGroups -> TestTree
+requestDescribeSecurityGroups =
+  req
+    "DescribeSecurityGroups"
+    "fixture/DescribeSecurityGroups.yaml"
+
+requestDescribeSnapshotAttribute :: DescribeSnapshotAttribute -> TestTree
+requestDescribeSnapshotAttribute =
+  req
+    "DescribeSnapshotAttribute"
+    "fixture/DescribeSnapshotAttribute.yaml"
+
+requestDescribeSnapshotTierStatus :: DescribeSnapshotTierStatus -> TestTree
+requestDescribeSnapshotTierStatus =
+  req
+    "DescribeSnapshotTierStatus"
+    "fixture/DescribeSnapshotTierStatus.yaml"
+
+requestDescribeSnapshots :: DescribeSnapshots -> TestTree
+requestDescribeSnapshots =
+  req
+    "DescribeSnapshots"
+    "fixture/DescribeSnapshots.yaml"
+
+requestDescribeSpotDatafeedSubscription :: DescribeSpotDatafeedSubscription -> TestTree
+requestDescribeSpotDatafeedSubscription =
+  req
+    "DescribeSpotDatafeedSubscription"
+    "fixture/DescribeSpotDatafeedSubscription.yaml"
+
+requestDescribeSpotFleetInstances :: DescribeSpotFleetInstances -> TestTree
+requestDescribeSpotFleetInstances =
+  req
+    "DescribeSpotFleetInstances"
+    "fixture/DescribeSpotFleetInstances.yaml"
+
+requestDescribeSpotFleetRequestHistory :: DescribeSpotFleetRequestHistory -> TestTree
+requestDescribeSpotFleetRequestHistory =
+  req
+    "DescribeSpotFleetRequestHistory"
+    "fixture/DescribeSpotFleetRequestHistory.yaml"
+
+requestDescribeSpotFleetRequests :: DescribeSpotFleetRequests -> TestTree
+requestDescribeSpotFleetRequests =
+  req
+    "DescribeSpotFleetRequests"
+    "fixture/DescribeSpotFleetRequests.yaml"
+
+requestDescribeSpotInstanceRequests :: DescribeSpotInstanceRequests -> TestTree
+requestDescribeSpotInstanceRequests =
+  req
+    "DescribeSpotInstanceRequests"
+    "fixture/DescribeSpotInstanceRequests.yaml"
+
+requestDescribeSpotPriceHistory :: DescribeSpotPriceHistory -> TestTree
+requestDescribeSpotPriceHistory =
+  req
+    "DescribeSpotPriceHistory"
+    "fixture/DescribeSpotPriceHistory.yaml"
+
+requestDescribeStaleSecurityGroups :: DescribeStaleSecurityGroups -> TestTree
+requestDescribeStaleSecurityGroups =
+  req
+    "DescribeStaleSecurityGroups"
+    "fixture/DescribeStaleSecurityGroups.yaml"
+
+requestDescribeStoreImageTasks :: DescribeStoreImageTasks -> TestTree
+requestDescribeStoreImageTasks =
+  req
+    "DescribeStoreImageTasks"
+    "fixture/DescribeStoreImageTasks.yaml"
+
+requestDescribeSubnets :: DescribeSubnets -> TestTree
+requestDescribeSubnets =
+  req
+    "DescribeSubnets"
+    "fixture/DescribeSubnets.yaml"
+
+requestDescribeTags :: DescribeTags -> TestTree
+requestDescribeTags =
+  req
+    "DescribeTags"
+    "fixture/DescribeTags.yaml"
+
+requestDescribeTrafficMirrorFilters :: DescribeTrafficMirrorFilters -> TestTree
+requestDescribeTrafficMirrorFilters =
+  req
+    "DescribeTrafficMirrorFilters"
+    "fixture/DescribeTrafficMirrorFilters.yaml"
+
+requestDescribeTrafficMirrorSessions :: DescribeTrafficMirrorSessions -> TestTree
+requestDescribeTrafficMirrorSessions =
+  req
+    "DescribeTrafficMirrorSessions"
+    "fixture/DescribeTrafficMirrorSessions.yaml"
+
+requestDescribeTrafficMirrorTargets :: DescribeTrafficMirrorTargets -> TestTree
+requestDescribeTrafficMirrorTargets =
+  req
+    "DescribeTrafficMirrorTargets"
+    "fixture/DescribeTrafficMirrorTargets.yaml"
+
+requestDescribeTransitGatewayAttachments :: DescribeTransitGatewayAttachments -> TestTree
+requestDescribeTransitGatewayAttachments =
+  req
+    "DescribeTransitGatewayAttachments"
+    "fixture/DescribeTransitGatewayAttachments.yaml"
+
+requestDescribeTransitGatewayConnectPeers :: DescribeTransitGatewayConnectPeers -> TestTree
+requestDescribeTransitGatewayConnectPeers =
+  req
+    "DescribeTransitGatewayConnectPeers"
+    "fixture/DescribeTransitGatewayConnectPeers.yaml"
+
+requestDescribeTransitGatewayConnects :: DescribeTransitGatewayConnects -> TestTree
+requestDescribeTransitGatewayConnects =
+  req
+    "DescribeTransitGatewayConnects"
+    "fixture/DescribeTransitGatewayConnects.yaml"
+
+requestDescribeTransitGatewayMulticastDomains :: DescribeTransitGatewayMulticastDomains -> TestTree
+requestDescribeTransitGatewayMulticastDomains =
+  req
+    "DescribeTransitGatewayMulticastDomains"
+    "fixture/DescribeTransitGatewayMulticastDomains.yaml"
+
+requestDescribeTransitGatewayPeeringAttachments :: DescribeTransitGatewayPeeringAttachments -> TestTree
+requestDescribeTransitGatewayPeeringAttachments =
+  req
+    "DescribeTransitGatewayPeeringAttachments"
+    "fixture/DescribeTransitGatewayPeeringAttachments.yaml"
+
+requestDescribeTransitGatewayPolicyTables :: DescribeTransitGatewayPolicyTables -> TestTree
+requestDescribeTransitGatewayPolicyTables =
+  req
+    "DescribeTransitGatewayPolicyTables"
+    "fixture/DescribeTransitGatewayPolicyTables.yaml"
+
+requestDescribeTransitGatewayRouteTableAnnouncements :: DescribeTransitGatewayRouteTableAnnouncements -> TestTree
+requestDescribeTransitGatewayRouteTableAnnouncements =
+  req
+    "DescribeTransitGatewayRouteTableAnnouncements"
+    "fixture/DescribeTransitGatewayRouteTableAnnouncements.yaml"
+
+requestDescribeTransitGatewayRouteTables :: DescribeTransitGatewayRouteTables -> TestTree
+requestDescribeTransitGatewayRouteTables =
+  req
+    "DescribeTransitGatewayRouteTables"
+    "fixture/DescribeTransitGatewayRouteTables.yaml"
+
+requestDescribeTransitGatewayVpcAttachments :: DescribeTransitGatewayVpcAttachments -> TestTree
+requestDescribeTransitGatewayVpcAttachments =
+  req
+    "DescribeTransitGatewayVpcAttachments"
+    "fixture/DescribeTransitGatewayVpcAttachments.yaml"
+
+requestDescribeTransitGateways :: DescribeTransitGateways -> TestTree
+requestDescribeTransitGateways =
+  req
+    "DescribeTransitGateways"
+    "fixture/DescribeTransitGateways.yaml"
+
+requestDescribeTrunkInterfaceAssociations :: DescribeTrunkInterfaceAssociations -> TestTree
+requestDescribeTrunkInterfaceAssociations =
+  req
+    "DescribeTrunkInterfaceAssociations"
+    "fixture/DescribeTrunkInterfaceAssociations.yaml"
+
+requestDescribeVerifiedAccessEndpoints :: DescribeVerifiedAccessEndpoints -> TestTree
+requestDescribeVerifiedAccessEndpoints =
+  req
+    "DescribeVerifiedAccessEndpoints"
+    "fixture/DescribeVerifiedAccessEndpoints.yaml"
+
+requestDescribeVerifiedAccessGroups :: DescribeVerifiedAccessGroups -> TestTree
+requestDescribeVerifiedAccessGroups =
+  req
+    "DescribeVerifiedAccessGroups"
+    "fixture/DescribeVerifiedAccessGroups.yaml"
+
+requestDescribeVerifiedAccessInstanceLoggingConfigurations :: DescribeVerifiedAccessInstanceLoggingConfigurations -> TestTree
+requestDescribeVerifiedAccessInstanceLoggingConfigurations =
+  req
+    "DescribeVerifiedAccessInstanceLoggingConfigurations"
+    "fixture/DescribeVerifiedAccessInstanceLoggingConfigurations.yaml"
+
+requestDescribeVerifiedAccessInstances :: DescribeVerifiedAccessInstances -> TestTree
+requestDescribeVerifiedAccessInstances =
+  req
+    "DescribeVerifiedAccessInstances"
+    "fixture/DescribeVerifiedAccessInstances.yaml"
+
+requestDescribeVerifiedAccessTrustProviders :: DescribeVerifiedAccessTrustProviders -> TestTree
+requestDescribeVerifiedAccessTrustProviders =
+  req
+    "DescribeVerifiedAccessTrustProviders"
+    "fixture/DescribeVerifiedAccessTrustProviders.yaml"
+
+requestDescribeVolumeAttribute :: DescribeVolumeAttribute -> TestTree
+requestDescribeVolumeAttribute =
+  req
+    "DescribeVolumeAttribute"
+    "fixture/DescribeVolumeAttribute.yaml"
+
+requestDescribeVolumeStatus :: DescribeVolumeStatus -> TestTree
+requestDescribeVolumeStatus =
+  req
+    "DescribeVolumeStatus"
+    "fixture/DescribeVolumeStatus.yaml"
+
+requestDescribeVolumes :: DescribeVolumes -> TestTree
+requestDescribeVolumes =
+  req
+    "DescribeVolumes"
+    "fixture/DescribeVolumes.yaml"
+
+requestDescribeVolumesModifications :: DescribeVolumesModifications -> TestTree
+requestDescribeVolumesModifications =
+  req
+    "DescribeVolumesModifications"
+    "fixture/DescribeVolumesModifications.yaml"
+
+requestDescribeVpcAttribute :: DescribeVpcAttribute -> TestTree
+requestDescribeVpcAttribute =
+  req
+    "DescribeVpcAttribute"
+    "fixture/DescribeVpcAttribute.yaml"
+
+requestDescribeVpcClassicLink :: DescribeVpcClassicLink -> TestTree
+requestDescribeVpcClassicLink =
+  req
+    "DescribeVpcClassicLink"
+    "fixture/DescribeVpcClassicLink.yaml"
+
+requestDescribeVpcClassicLinkDnsSupport :: DescribeVpcClassicLinkDnsSupport -> TestTree
+requestDescribeVpcClassicLinkDnsSupport =
+  req
+    "DescribeVpcClassicLinkDnsSupport"
+    "fixture/DescribeVpcClassicLinkDnsSupport.yaml"
+
+requestDescribeVpcEndpointConnectionNotifications :: DescribeVpcEndpointConnectionNotifications -> TestTree
+requestDescribeVpcEndpointConnectionNotifications =
+  req
+    "DescribeVpcEndpointConnectionNotifications"
+    "fixture/DescribeVpcEndpointConnectionNotifications.yaml"
+
+requestDescribeVpcEndpointConnections :: DescribeVpcEndpointConnections -> TestTree
+requestDescribeVpcEndpointConnections =
+  req
+    "DescribeVpcEndpointConnections"
+    "fixture/DescribeVpcEndpointConnections.yaml"
+
+requestDescribeVpcEndpointServiceConfigurations :: DescribeVpcEndpointServiceConfigurations -> TestTree
+requestDescribeVpcEndpointServiceConfigurations =
+  req
+    "DescribeVpcEndpointServiceConfigurations"
+    "fixture/DescribeVpcEndpointServiceConfigurations.yaml"
+
+requestDescribeVpcEndpointServicePermissions :: DescribeVpcEndpointServicePermissions -> TestTree
+requestDescribeVpcEndpointServicePermissions =
+  req
+    "DescribeVpcEndpointServicePermissions"
+    "fixture/DescribeVpcEndpointServicePermissions.yaml"
+
+requestDescribeVpcEndpointServices :: DescribeVpcEndpointServices -> TestTree
+requestDescribeVpcEndpointServices =
+  req
+    "DescribeVpcEndpointServices"
+    "fixture/DescribeVpcEndpointServices.yaml"
+
+requestDescribeVpcEndpoints :: DescribeVpcEndpoints -> TestTree
+requestDescribeVpcEndpoints =
+  req
+    "DescribeVpcEndpoints"
+    "fixture/DescribeVpcEndpoints.yaml"
+
+requestDescribeVpcPeeringConnections :: DescribeVpcPeeringConnections -> TestTree
+requestDescribeVpcPeeringConnections =
+  req
+    "DescribeVpcPeeringConnections"
+    "fixture/DescribeVpcPeeringConnections.yaml"
+
+requestDescribeVpcs :: DescribeVpcs -> TestTree
+requestDescribeVpcs =
+  req
+    "DescribeVpcs"
+    "fixture/DescribeVpcs.yaml"
+
+requestDescribeVpnConnections :: DescribeVpnConnections -> TestTree
+requestDescribeVpnConnections =
+  req
+    "DescribeVpnConnections"
+    "fixture/DescribeVpnConnections.yaml"
+
+requestDescribeVpnGateways :: DescribeVpnGateways -> TestTree
+requestDescribeVpnGateways =
+  req
+    "DescribeVpnGateways"
+    "fixture/DescribeVpnGateways.yaml"
+
+requestDetachClassicLinkVpc :: DetachClassicLinkVpc -> TestTree
+requestDetachClassicLinkVpc =
+  req
+    "DetachClassicLinkVpc"
+    "fixture/DetachClassicLinkVpc.yaml"
+
+requestDetachInternetGateway :: DetachInternetGateway -> TestTree
+requestDetachInternetGateway =
+  req
+    "DetachInternetGateway"
+    "fixture/DetachInternetGateway.yaml"
+
+requestDetachNetworkInterface :: DetachNetworkInterface -> TestTree
+requestDetachNetworkInterface =
+  req
+    "DetachNetworkInterface"
+    "fixture/DetachNetworkInterface.yaml"
+
+requestDetachVerifiedAccessTrustProvider :: DetachVerifiedAccessTrustProvider -> TestTree
+requestDetachVerifiedAccessTrustProvider =
+  req
+    "DetachVerifiedAccessTrustProvider"
+    "fixture/DetachVerifiedAccessTrustProvider.yaml"
+
+requestDetachVolume :: DetachVolume -> TestTree
+requestDetachVolume =
+  req
+    "DetachVolume"
+    "fixture/DetachVolume.yaml"
+
+requestDetachVpnGateway :: DetachVpnGateway -> TestTree
+requestDetachVpnGateway =
+  req
+    "DetachVpnGateway"
+    "fixture/DetachVpnGateway.yaml"
+
+requestDisableAddressTransfer :: DisableAddressTransfer -> TestTree
+requestDisableAddressTransfer =
+  req
+    "DisableAddressTransfer"
+    "fixture/DisableAddressTransfer.yaml"
+
+requestDisableAwsNetworkPerformanceMetricSubscription :: DisableAwsNetworkPerformanceMetricSubscription -> TestTree
+requestDisableAwsNetworkPerformanceMetricSubscription =
+  req
+    "DisableAwsNetworkPerformanceMetricSubscription"
+    "fixture/DisableAwsNetworkPerformanceMetricSubscription.yaml"
+
+requestDisableEbsEncryptionByDefault :: DisableEbsEncryptionByDefault -> TestTree
+requestDisableEbsEncryptionByDefault =
+  req
+    "DisableEbsEncryptionByDefault"
+    "fixture/DisableEbsEncryptionByDefault.yaml"
+
+requestDisableFastLaunch :: DisableFastLaunch -> TestTree
+requestDisableFastLaunch =
+  req
+    "DisableFastLaunch"
+    "fixture/DisableFastLaunch.yaml"
+
+requestDisableFastSnapshotRestores :: DisableFastSnapshotRestores -> TestTree
+requestDisableFastSnapshotRestores =
+  req
+    "DisableFastSnapshotRestores"
+    "fixture/DisableFastSnapshotRestores.yaml"
+
+requestDisableImageDeprecation :: DisableImageDeprecation -> TestTree
+requestDisableImageDeprecation =
+  req
+    "DisableImageDeprecation"
+    "fixture/DisableImageDeprecation.yaml"
+
+requestDisableIpamOrganizationAdminAccount :: DisableIpamOrganizationAdminAccount -> TestTree
+requestDisableIpamOrganizationAdminAccount =
+  req
+    "DisableIpamOrganizationAdminAccount"
+    "fixture/DisableIpamOrganizationAdminAccount.yaml"
+
+requestDisableSerialConsoleAccess :: DisableSerialConsoleAccess -> TestTree
+requestDisableSerialConsoleAccess =
+  req
+    "DisableSerialConsoleAccess"
+    "fixture/DisableSerialConsoleAccess.yaml"
+
+requestDisableTransitGatewayRouteTablePropagation :: DisableTransitGatewayRouteTablePropagation -> TestTree
+requestDisableTransitGatewayRouteTablePropagation =
+  req
+    "DisableTransitGatewayRouteTablePropagation"
+    "fixture/DisableTransitGatewayRouteTablePropagation.yaml"
+
+requestDisableVgwRoutePropagation :: DisableVgwRoutePropagation -> TestTree
+requestDisableVgwRoutePropagation =
+  req
+    "DisableVgwRoutePropagation"
+    "fixture/DisableVgwRoutePropagation.yaml"
+
+requestDisableVpcClassicLink :: DisableVpcClassicLink -> TestTree
+requestDisableVpcClassicLink =
+  req
+    "DisableVpcClassicLink"
+    "fixture/DisableVpcClassicLink.yaml"
+
+requestDisableVpcClassicLinkDnsSupport :: DisableVpcClassicLinkDnsSupport -> TestTree
+requestDisableVpcClassicLinkDnsSupport =
+  req
+    "DisableVpcClassicLinkDnsSupport"
+    "fixture/DisableVpcClassicLinkDnsSupport.yaml"
+
+requestDisassociateAddress :: DisassociateAddress -> TestTree
+requestDisassociateAddress =
+  req
+    "DisassociateAddress"
+    "fixture/DisassociateAddress.yaml"
+
+requestDisassociateClientVpnTargetNetwork :: DisassociateClientVpnTargetNetwork -> TestTree
+requestDisassociateClientVpnTargetNetwork =
+  req
+    "DisassociateClientVpnTargetNetwork"
+    "fixture/DisassociateClientVpnTargetNetwork.yaml"
+
+requestDisassociateEnclaveCertificateIamRole :: DisassociateEnclaveCertificateIamRole -> TestTree
+requestDisassociateEnclaveCertificateIamRole =
+  req
+    "DisassociateEnclaveCertificateIamRole"
+    "fixture/DisassociateEnclaveCertificateIamRole.yaml"
+
+requestDisassociateIamInstanceProfile :: DisassociateIamInstanceProfile -> TestTree
+requestDisassociateIamInstanceProfile =
+  req
+    "DisassociateIamInstanceProfile"
+    "fixture/DisassociateIamInstanceProfile.yaml"
+
+requestDisassociateInstanceEventWindow :: DisassociateInstanceEventWindow -> TestTree
+requestDisassociateInstanceEventWindow =
+  req
+    "DisassociateInstanceEventWindow"
+    "fixture/DisassociateInstanceEventWindow.yaml"
+
+requestDisassociateRouteTable :: DisassociateRouteTable -> TestTree
+requestDisassociateRouteTable =
+  req
+    "DisassociateRouteTable"
+    "fixture/DisassociateRouteTable.yaml"
+
+requestDisassociateSubnetCidrBlock :: DisassociateSubnetCidrBlock -> TestTree
+requestDisassociateSubnetCidrBlock =
+  req
+    "DisassociateSubnetCidrBlock"
+    "fixture/DisassociateSubnetCidrBlock.yaml"
+
+requestDisassociateTransitGatewayMulticastDomain :: DisassociateTransitGatewayMulticastDomain -> TestTree
+requestDisassociateTransitGatewayMulticastDomain =
+  req
+    "DisassociateTransitGatewayMulticastDomain"
+    "fixture/DisassociateTransitGatewayMulticastDomain.yaml"
+
+requestDisassociateTransitGatewayPolicyTable :: DisassociateTransitGatewayPolicyTable -> TestTree
+requestDisassociateTransitGatewayPolicyTable =
+  req
+    "DisassociateTransitGatewayPolicyTable"
+    "fixture/DisassociateTransitGatewayPolicyTable.yaml"
+
+requestDisassociateTransitGatewayRouteTable :: DisassociateTransitGatewayRouteTable -> TestTree
+requestDisassociateTransitGatewayRouteTable =
+  req
+    "DisassociateTransitGatewayRouteTable"
+    "fixture/DisassociateTransitGatewayRouteTable.yaml"
+
+requestDisassociateTrunkInterface :: DisassociateTrunkInterface -> TestTree
+requestDisassociateTrunkInterface =
+  req
+    "DisassociateTrunkInterface"
+    "fixture/DisassociateTrunkInterface.yaml"
+
+requestDisassociateVpcCidrBlock :: DisassociateVpcCidrBlock -> TestTree
+requestDisassociateVpcCidrBlock =
+  req
+    "DisassociateVpcCidrBlock"
+    "fixture/DisassociateVpcCidrBlock.yaml"
+
+requestEnableAddressTransfer :: EnableAddressTransfer -> TestTree
+requestEnableAddressTransfer =
+  req
+    "EnableAddressTransfer"
+    "fixture/EnableAddressTransfer.yaml"
+
+requestEnableAwsNetworkPerformanceMetricSubscription :: EnableAwsNetworkPerformanceMetricSubscription -> TestTree
+requestEnableAwsNetworkPerformanceMetricSubscription =
+  req
+    "EnableAwsNetworkPerformanceMetricSubscription"
+    "fixture/EnableAwsNetworkPerformanceMetricSubscription.yaml"
+
+requestEnableEbsEncryptionByDefault :: EnableEbsEncryptionByDefault -> TestTree
+requestEnableEbsEncryptionByDefault =
+  req
+    "EnableEbsEncryptionByDefault"
+    "fixture/EnableEbsEncryptionByDefault.yaml"
+
+requestEnableFastLaunch :: EnableFastLaunch -> TestTree
+requestEnableFastLaunch =
+  req
+    "EnableFastLaunch"
+    "fixture/EnableFastLaunch.yaml"
+
+requestEnableFastSnapshotRestores :: EnableFastSnapshotRestores -> TestTree
+requestEnableFastSnapshotRestores =
+  req
+    "EnableFastSnapshotRestores"
+    "fixture/EnableFastSnapshotRestores.yaml"
+
+requestEnableImageDeprecation :: EnableImageDeprecation -> TestTree
+requestEnableImageDeprecation =
+  req
+    "EnableImageDeprecation"
+    "fixture/EnableImageDeprecation.yaml"
+
+requestEnableIpamOrganizationAdminAccount :: EnableIpamOrganizationAdminAccount -> TestTree
+requestEnableIpamOrganizationAdminAccount =
+  req
+    "EnableIpamOrganizationAdminAccount"
+    "fixture/EnableIpamOrganizationAdminAccount.yaml"
+
+requestEnableReachabilityAnalyzerOrganizationSharing :: EnableReachabilityAnalyzerOrganizationSharing -> TestTree
+requestEnableReachabilityAnalyzerOrganizationSharing =
+  req
+    "EnableReachabilityAnalyzerOrganizationSharing"
+    "fixture/EnableReachabilityAnalyzerOrganizationSharing.yaml"
+
+requestEnableSerialConsoleAccess :: EnableSerialConsoleAccess -> TestTree
+requestEnableSerialConsoleAccess =
+  req
+    "EnableSerialConsoleAccess"
+    "fixture/EnableSerialConsoleAccess.yaml"
+
+requestEnableTransitGatewayRouteTablePropagation :: EnableTransitGatewayRouteTablePropagation -> TestTree
+requestEnableTransitGatewayRouteTablePropagation =
+  req
+    "EnableTransitGatewayRouteTablePropagation"
+    "fixture/EnableTransitGatewayRouteTablePropagation.yaml"
+
+requestEnableVgwRoutePropagation :: EnableVgwRoutePropagation -> TestTree
+requestEnableVgwRoutePropagation =
+  req
+    "EnableVgwRoutePropagation"
+    "fixture/EnableVgwRoutePropagation.yaml"
+
+requestEnableVolumeIO :: EnableVolumeIO -> TestTree
+requestEnableVolumeIO =
+  req
+    "EnableVolumeIO"
+    "fixture/EnableVolumeIO.yaml"
+
+requestEnableVpcClassicLink :: EnableVpcClassicLink -> TestTree
+requestEnableVpcClassicLink =
+  req
+    "EnableVpcClassicLink"
+    "fixture/EnableVpcClassicLink.yaml"
+
+requestEnableVpcClassicLinkDnsSupport :: EnableVpcClassicLinkDnsSupport -> TestTree
+requestEnableVpcClassicLinkDnsSupport =
+  req
+    "EnableVpcClassicLinkDnsSupport"
+    "fixture/EnableVpcClassicLinkDnsSupport.yaml"
+
+requestExportClientVpnClientCertificateRevocationList :: ExportClientVpnClientCertificateRevocationList -> TestTree
+requestExportClientVpnClientCertificateRevocationList =
+  req
+    "ExportClientVpnClientCertificateRevocationList"
+    "fixture/ExportClientVpnClientCertificateRevocationList.yaml"
+
+requestExportClientVpnClientConfiguration :: ExportClientVpnClientConfiguration -> TestTree
+requestExportClientVpnClientConfiguration =
+  req
+    "ExportClientVpnClientConfiguration"
+    "fixture/ExportClientVpnClientConfiguration.yaml"
+
+requestExportImage :: ExportImage -> TestTree
+requestExportImage =
+  req
+    "ExportImage"
+    "fixture/ExportImage.yaml"
+
+requestExportTransitGatewayRoutes :: ExportTransitGatewayRoutes -> TestTree
+requestExportTransitGatewayRoutes =
+  req
+    "ExportTransitGatewayRoutes"
+    "fixture/ExportTransitGatewayRoutes.yaml"
+
+requestGetAssociatedEnclaveCertificateIamRoles :: GetAssociatedEnclaveCertificateIamRoles -> TestTree
+requestGetAssociatedEnclaveCertificateIamRoles =
+  req
+    "GetAssociatedEnclaveCertificateIamRoles"
+    "fixture/GetAssociatedEnclaveCertificateIamRoles.yaml"
+
+requestGetAssociatedIpv6PoolCidrs :: GetAssociatedIpv6PoolCidrs -> TestTree
+requestGetAssociatedIpv6PoolCidrs =
+  req
+    "GetAssociatedIpv6PoolCidrs"
+    "fixture/GetAssociatedIpv6PoolCidrs.yaml"
+
+requestGetAwsNetworkPerformanceData :: GetAwsNetworkPerformanceData -> TestTree
+requestGetAwsNetworkPerformanceData =
+  req
+    "GetAwsNetworkPerformanceData"
+    "fixture/GetAwsNetworkPerformanceData.yaml"
+
+requestGetCapacityReservationUsage :: GetCapacityReservationUsage -> TestTree
+requestGetCapacityReservationUsage =
+  req
+    "GetCapacityReservationUsage"
+    "fixture/GetCapacityReservationUsage.yaml"
+
+requestGetCoipPoolUsage :: GetCoipPoolUsage -> TestTree
+requestGetCoipPoolUsage =
+  req
+    "GetCoipPoolUsage"
+    "fixture/GetCoipPoolUsage.yaml"
+
+requestGetConsoleOutput :: GetConsoleOutput -> TestTree
+requestGetConsoleOutput =
+  req
+    "GetConsoleOutput"
+    "fixture/GetConsoleOutput.yaml"
+
+requestGetConsoleScreenshot :: GetConsoleScreenshot -> TestTree
+requestGetConsoleScreenshot =
+  req
+    "GetConsoleScreenshot"
+    "fixture/GetConsoleScreenshot.yaml"
+
+requestGetDefaultCreditSpecification :: GetDefaultCreditSpecification -> TestTree
+requestGetDefaultCreditSpecification =
+  req
+    "GetDefaultCreditSpecification"
+    "fixture/GetDefaultCreditSpecification.yaml"
+
+requestGetEbsDefaultKmsKeyId :: GetEbsDefaultKmsKeyId -> TestTree
+requestGetEbsDefaultKmsKeyId =
+  req
+    "GetEbsDefaultKmsKeyId"
+    "fixture/GetEbsDefaultKmsKeyId.yaml"
+
+requestGetEbsEncryptionByDefault :: GetEbsEncryptionByDefault -> TestTree
+requestGetEbsEncryptionByDefault =
+  req
+    "GetEbsEncryptionByDefault"
+    "fixture/GetEbsEncryptionByDefault.yaml"
+
+requestGetFlowLogsIntegrationTemplate :: GetFlowLogsIntegrationTemplate -> TestTree
+requestGetFlowLogsIntegrationTemplate =
+  req
+    "GetFlowLogsIntegrationTemplate"
+    "fixture/GetFlowLogsIntegrationTemplate.yaml"
+
+requestGetGroupsForCapacityReservation :: GetGroupsForCapacityReservation -> TestTree
+requestGetGroupsForCapacityReservation =
+  req
+    "GetGroupsForCapacityReservation"
+    "fixture/GetGroupsForCapacityReservation.yaml"
+
+requestGetHostReservationPurchasePreview :: GetHostReservationPurchasePreview -> TestTree
+requestGetHostReservationPurchasePreview =
+  req
+    "GetHostReservationPurchasePreview"
+    "fixture/GetHostReservationPurchasePreview.yaml"
+
+requestGetInstanceTypesFromInstanceRequirements :: GetInstanceTypesFromInstanceRequirements -> TestTree
+requestGetInstanceTypesFromInstanceRequirements =
+  req
+    "GetInstanceTypesFromInstanceRequirements"
+    "fixture/GetInstanceTypesFromInstanceRequirements.yaml"
+
+requestGetInstanceUefiData :: GetInstanceUefiData -> TestTree
+requestGetInstanceUefiData =
+  req
+    "GetInstanceUefiData"
+    "fixture/GetInstanceUefiData.yaml"
+
+requestGetIpamAddressHistory :: GetIpamAddressHistory -> TestTree
+requestGetIpamAddressHistory =
+  req
+    "GetIpamAddressHistory"
+    "fixture/GetIpamAddressHistory.yaml"
+
+requestGetIpamPoolAllocations :: GetIpamPoolAllocations -> TestTree
+requestGetIpamPoolAllocations =
+  req
+    "GetIpamPoolAllocations"
+    "fixture/GetIpamPoolAllocations.yaml"
+
+requestGetIpamPoolCidrs :: GetIpamPoolCidrs -> TestTree
+requestGetIpamPoolCidrs =
+  req
+    "GetIpamPoolCidrs"
+    "fixture/GetIpamPoolCidrs.yaml"
+
+requestGetIpamResourceCidrs :: GetIpamResourceCidrs -> TestTree
+requestGetIpamResourceCidrs =
+  req
+    "GetIpamResourceCidrs"
+    "fixture/GetIpamResourceCidrs.yaml"
+
+requestGetLaunchTemplateData :: GetLaunchTemplateData -> TestTree
+requestGetLaunchTemplateData =
+  req
+    "GetLaunchTemplateData"
+    "fixture/GetLaunchTemplateData.yaml"
+
+requestGetManagedPrefixListAssociations :: GetManagedPrefixListAssociations -> TestTree
+requestGetManagedPrefixListAssociations =
+  req
+    "GetManagedPrefixListAssociations"
+    "fixture/GetManagedPrefixListAssociations.yaml"
+
+requestGetManagedPrefixListEntries :: GetManagedPrefixListEntries -> TestTree
+requestGetManagedPrefixListEntries =
+  req
+    "GetManagedPrefixListEntries"
+    "fixture/GetManagedPrefixListEntries.yaml"
+
+requestGetNetworkInsightsAccessScopeAnalysisFindings :: GetNetworkInsightsAccessScopeAnalysisFindings -> TestTree
+requestGetNetworkInsightsAccessScopeAnalysisFindings =
+  req
+    "GetNetworkInsightsAccessScopeAnalysisFindings"
+    "fixture/GetNetworkInsightsAccessScopeAnalysisFindings.yaml"
+
+requestGetNetworkInsightsAccessScopeContent :: GetNetworkInsightsAccessScopeContent -> TestTree
+requestGetNetworkInsightsAccessScopeContent =
+  req
+    "GetNetworkInsightsAccessScopeContent"
+    "fixture/GetNetworkInsightsAccessScopeContent.yaml"
+
+requestGetPasswordData :: GetPasswordData -> TestTree
+requestGetPasswordData =
+  req
+    "GetPasswordData"
+    "fixture/GetPasswordData.yaml"
+
+requestGetReservedInstancesExchangeQuote :: GetReservedInstancesExchangeQuote -> TestTree
+requestGetReservedInstancesExchangeQuote =
+  req
+    "GetReservedInstancesExchangeQuote"
+    "fixture/GetReservedInstancesExchangeQuote.yaml"
+
+requestGetSerialConsoleAccessStatus :: GetSerialConsoleAccessStatus -> TestTree
+requestGetSerialConsoleAccessStatus =
+  req
+    "GetSerialConsoleAccessStatus"
+    "fixture/GetSerialConsoleAccessStatus.yaml"
+
+requestGetSpotPlacementScores :: GetSpotPlacementScores -> TestTree
+requestGetSpotPlacementScores =
+  req
+    "GetSpotPlacementScores"
+    "fixture/GetSpotPlacementScores.yaml"
+
+requestGetSubnetCidrReservations :: GetSubnetCidrReservations -> TestTree
+requestGetSubnetCidrReservations =
+  req
+    "GetSubnetCidrReservations"
+    "fixture/GetSubnetCidrReservations.yaml"
+
+requestGetTransitGatewayAttachmentPropagations :: GetTransitGatewayAttachmentPropagations -> TestTree
+requestGetTransitGatewayAttachmentPropagations =
+  req
+    "GetTransitGatewayAttachmentPropagations"
+    "fixture/GetTransitGatewayAttachmentPropagations.yaml"
+
+requestGetTransitGatewayMulticastDomainAssociations :: GetTransitGatewayMulticastDomainAssociations -> TestTree
+requestGetTransitGatewayMulticastDomainAssociations =
+  req
+    "GetTransitGatewayMulticastDomainAssociations"
+    "fixture/GetTransitGatewayMulticastDomainAssociations.yaml"
+
+requestGetTransitGatewayPolicyTableAssociations :: GetTransitGatewayPolicyTableAssociations -> TestTree
+requestGetTransitGatewayPolicyTableAssociations =
+  req
+    "GetTransitGatewayPolicyTableAssociations"
+    "fixture/GetTransitGatewayPolicyTableAssociations.yaml"
+
+requestGetTransitGatewayPolicyTableEntries :: GetTransitGatewayPolicyTableEntries -> TestTree
+requestGetTransitGatewayPolicyTableEntries =
+  req
+    "GetTransitGatewayPolicyTableEntries"
+    "fixture/GetTransitGatewayPolicyTableEntries.yaml"
+
+requestGetTransitGatewayPrefixListReferences :: GetTransitGatewayPrefixListReferences -> TestTree
+requestGetTransitGatewayPrefixListReferences =
+  req
+    "GetTransitGatewayPrefixListReferences"
+    "fixture/GetTransitGatewayPrefixListReferences.yaml"
+
+requestGetTransitGatewayRouteTableAssociations :: GetTransitGatewayRouteTableAssociations -> TestTree
+requestGetTransitGatewayRouteTableAssociations =
+  req
+    "GetTransitGatewayRouteTableAssociations"
+    "fixture/GetTransitGatewayRouteTableAssociations.yaml"
+
+requestGetTransitGatewayRouteTablePropagations :: GetTransitGatewayRouteTablePropagations -> TestTree
+requestGetTransitGatewayRouteTablePropagations =
+  req
+    "GetTransitGatewayRouteTablePropagations"
+    "fixture/GetTransitGatewayRouteTablePropagations.yaml"
+
+requestGetVerifiedAccessEndpointPolicy :: GetVerifiedAccessEndpointPolicy -> TestTree
+requestGetVerifiedAccessEndpointPolicy =
+  req
+    "GetVerifiedAccessEndpointPolicy"
+    "fixture/GetVerifiedAccessEndpointPolicy.yaml"
+
+requestGetVerifiedAccessGroupPolicy :: GetVerifiedAccessGroupPolicy -> TestTree
+requestGetVerifiedAccessGroupPolicy =
+  req
+    "GetVerifiedAccessGroupPolicy"
+    "fixture/GetVerifiedAccessGroupPolicy.yaml"
+
+requestGetVpnConnectionDeviceSampleConfiguration :: GetVpnConnectionDeviceSampleConfiguration -> TestTree
+requestGetVpnConnectionDeviceSampleConfiguration =
+  req
+    "GetVpnConnectionDeviceSampleConfiguration"
+    "fixture/GetVpnConnectionDeviceSampleConfiguration.yaml"
+
+requestGetVpnConnectionDeviceTypes :: GetVpnConnectionDeviceTypes -> TestTree
+requestGetVpnConnectionDeviceTypes =
+  req
+    "GetVpnConnectionDeviceTypes"
+    "fixture/GetVpnConnectionDeviceTypes.yaml"
+
+requestImportClientVpnClientCertificateRevocationList :: ImportClientVpnClientCertificateRevocationList -> TestTree
+requestImportClientVpnClientCertificateRevocationList =
+  req
+    "ImportClientVpnClientCertificateRevocationList"
+    "fixture/ImportClientVpnClientCertificateRevocationList.yaml"
+
+requestImportImage :: ImportImage -> TestTree
+requestImportImage =
+  req
+    "ImportImage"
+    "fixture/ImportImage.yaml"
+
+requestImportInstance :: ImportInstance -> TestTree
+requestImportInstance =
+  req
+    "ImportInstance"
+    "fixture/ImportInstance.yaml"
+
+requestImportKeyPair :: ImportKeyPair -> TestTree
+requestImportKeyPair =
+  req
+    "ImportKeyPair"
+    "fixture/ImportKeyPair.yaml"
+
+requestImportSnapshot :: ImportSnapshot -> TestTree
+requestImportSnapshot =
+  req
+    "ImportSnapshot"
+    "fixture/ImportSnapshot.yaml"
+
+requestImportVolume :: ImportVolume -> TestTree
+requestImportVolume =
+  req
+    "ImportVolume"
+    "fixture/ImportVolume.yaml"
+
+requestListImagesInRecycleBin :: ListImagesInRecycleBin -> TestTree
+requestListImagesInRecycleBin =
+  req
+    "ListImagesInRecycleBin"
+    "fixture/ListImagesInRecycleBin.yaml"
+
+requestListSnapshotsInRecycleBin :: ListSnapshotsInRecycleBin -> TestTree
+requestListSnapshotsInRecycleBin =
+  req
+    "ListSnapshotsInRecycleBin"
+    "fixture/ListSnapshotsInRecycleBin.yaml"
+
+requestModifyAddressAttribute :: ModifyAddressAttribute -> TestTree
+requestModifyAddressAttribute =
+  req
+    "ModifyAddressAttribute"
+    "fixture/ModifyAddressAttribute.yaml"
+
+requestModifyAvailabilityZoneGroup :: ModifyAvailabilityZoneGroup -> TestTree
+requestModifyAvailabilityZoneGroup =
+  req
+    "ModifyAvailabilityZoneGroup"
+    "fixture/ModifyAvailabilityZoneGroup.yaml"
+
+requestModifyCapacityReservation :: ModifyCapacityReservation -> TestTree
+requestModifyCapacityReservation =
+  req
+    "ModifyCapacityReservation"
+    "fixture/ModifyCapacityReservation.yaml"
+
+requestModifyCapacityReservationFleet :: ModifyCapacityReservationFleet -> TestTree
+requestModifyCapacityReservationFleet =
+  req
+    "ModifyCapacityReservationFleet"
+    "fixture/ModifyCapacityReservationFleet.yaml"
+
+requestModifyClientVpnEndpoint :: ModifyClientVpnEndpoint -> TestTree
+requestModifyClientVpnEndpoint =
+  req
+    "ModifyClientVpnEndpoint"
+    "fixture/ModifyClientVpnEndpoint.yaml"
+
+requestModifyDefaultCreditSpecification :: ModifyDefaultCreditSpecification -> TestTree
+requestModifyDefaultCreditSpecification =
+  req
+    "ModifyDefaultCreditSpecification"
+    "fixture/ModifyDefaultCreditSpecification.yaml"
+
+requestModifyEbsDefaultKmsKeyId :: ModifyEbsDefaultKmsKeyId -> TestTree
+requestModifyEbsDefaultKmsKeyId =
+  req
+    "ModifyEbsDefaultKmsKeyId"
+    "fixture/ModifyEbsDefaultKmsKeyId.yaml"
+
+requestModifyFleet :: ModifyFleet -> TestTree
+requestModifyFleet =
+  req
+    "ModifyFleet"
+    "fixture/ModifyFleet.yaml"
+
+requestModifyFpgaImageAttribute :: ModifyFpgaImageAttribute -> TestTree
+requestModifyFpgaImageAttribute =
+  req
+    "ModifyFpgaImageAttribute"
+    "fixture/ModifyFpgaImageAttribute.yaml"
+
+requestModifyHosts :: ModifyHosts -> TestTree
+requestModifyHosts =
+  req
+    "ModifyHosts"
+    "fixture/ModifyHosts.yaml"
+
+requestModifyIdFormat :: ModifyIdFormat -> TestTree
+requestModifyIdFormat =
+  req
+    "ModifyIdFormat"
+    "fixture/ModifyIdFormat.yaml"
+
+requestModifyIdentityIdFormat :: ModifyIdentityIdFormat -> TestTree
+requestModifyIdentityIdFormat =
+  req
+    "ModifyIdentityIdFormat"
+    "fixture/ModifyIdentityIdFormat.yaml"
+
+requestModifyImageAttribute :: ModifyImageAttribute -> TestTree
+requestModifyImageAttribute =
+  req
+    "ModifyImageAttribute"
+    "fixture/ModifyImageAttribute.yaml"
+
+requestModifyInstanceAttribute :: ModifyInstanceAttribute -> TestTree
+requestModifyInstanceAttribute =
+  req
+    "ModifyInstanceAttribute"
+    "fixture/ModifyInstanceAttribute.yaml"
+
+requestModifyInstanceCapacityReservationAttributes :: ModifyInstanceCapacityReservationAttributes -> TestTree
+requestModifyInstanceCapacityReservationAttributes =
+  req
+    "ModifyInstanceCapacityReservationAttributes"
+    "fixture/ModifyInstanceCapacityReservationAttributes.yaml"
+
+requestModifyInstanceCreditSpecification :: ModifyInstanceCreditSpecification -> TestTree
+requestModifyInstanceCreditSpecification =
+  req
+    "ModifyInstanceCreditSpecification"
+    "fixture/ModifyInstanceCreditSpecification.yaml"
+
+requestModifyInstanceEventStartTime :: ModifyInstanceEventStartTime -> TestTree
+requestModifyInstanceEventStartTime =
+  req
+    "ModifyInstanceEventStartTime"
+    "fixture/ModifyInstanceEventStartTime.yaml"
+
+requestModifyInstanceEventWindow :: ModifyInstanceEventWindow -> TestTree
+requestModifyInstanceEventWindow =
+  req
+    "ModifyInstanceEventWindow"
+    "fixture/ModifyInstanceEventWindow.yaml"
+
+requestModifyInstanceMaintenanceOptions :: ModifyInstanceMaintenanceOptions -> TestTree
+requestModifyInstanceMaintenanceOptions =
+  req
+    "ModifyInstanceMaintenanceOptions"
+    "fixture/ModifyInstanceMaintenanceOptions.yaml"
+
+requestModifyInstanceMetadataOptions :: ModifyInstanceMetadataOptions -> TestTree
+requestModifyInstanceMetadataOptions =
+  req
+    "ModifyInstanceMetadataOptions"
+    "fixture/ModifyInstanceMetadataOptions.yaml"
+
+requestModifyInstancePlacement :: ModifyInstancePlacement -> TestTree
+requestModifyInstancePlacement =
+  req
+    "ModifyInstancePlacement"
+    "fixture/ModifyInstancePlacement.yaml"
+
+requestModifyIpam :: ModifyIpam -> TestTree
+requestModifyIpam =
+  req
+    "ModifyIpam"
+    "fixture/ModifyIpam.yaml"
+
+requestModifyIpamPool :: ModifyIpamPool -> TestTree
+requestModifyIpamPool =
+  req
+    "ModifyIpamPool"
+    "fixture/ModifyIpamPool.yaml"
+
+requestModifyIpamResourceCidr :: ModifyIpamResourceCidr -> TestTree
+requestModifyIpamResourceCidr =
+  req
+    "ModifyIpamResourceCidr"
+    "fixture/ModifyIpamResourceCidr.yaml"
+
+requestModifyIpamScope :: ModifyIpamScope -> TestTree
+requestModifyIpamScope =
+  req
+    "ModifyIpamScope"
+    "fixture/ModifyIpamScope.yaml"
+
+requestModifyLaunchTemplate :: ModifyLaunchTemplate -> TestTree
+requestModifyLaunchTemplate =
+  req
+    "ModifyLaunchTemplate"
+    "fixture/ModifyLaunchTemplate.yaml"
+
+requestModifyLocalGatewayRoute :: ModifyLocalGatewayRoute -> TestTree
+requestModifyLocalGatewayRoute =
+  req
+    "ModifyLocalGatewayRoute"
+    "fixture/ModifyLocalGatewayRoute.yaml"
+
+requestModifyManagedPrefixList :: ModifyManagedPrefixList -> TestTree
+requestModifyManagedPrefixList =
+  req
+    "ModifyManagedPrefixList"
+    "fixture/ModifyManagedPrefixList.yaml"
+
+requestModifyNetworkInterfaceAttribute :: ModifyNetworkInterfaceAttribute -> TestTree
+requestModifyNetworkInterfaceAttribute =
+  req
+    "ModifyNetworkInterfaceAttribute"
+    "fixture/ModifyNetworkInterfaceAttribute.yaml"
+
+requestModifyPrivateDnsNameOptions :: ModifyPrivateDnsNameOptions -> TestTree
+requestModifyPrivateDnsNameOptions =
+  req
+    "ModifyPrivateDnsNameOptions"
+    "fixture/ModifyPrivateDnsNameOptions.yaml"
+
+requestModifyReservedInstances :: ModifyReservedInstances -> TestTree
+requestModifyReservedInstances =
+  req
+    "ModifyReservedInstances"
+    "fixture/ModifyReservedInstances.yaml"
+
+requestModifySecurityGroupRules :: ModifySecurityGroupRules -> TestTree
+requestModifySecurityGroupRules =
+  req
+    "ModifySecurityGroupRules"
+    "fixture/ModifySecurityGroupRules.yaml"
+
+requestModifySnapshotAttribute :: ModifySnapshotAttribute -> TestTree
+requestModifySnapshotAttribute =
+  req
+    "ModifySnapshotAttribute"
+    "fixture/ModifySnapshotAttribute.yaml"
+
+requestModifySnapshotTier :: ModifySnapshotTier -> TestTree
+requestModifySnapshotTier =
+  req
+    "ModifySnapshotTier"
+    "fixture/ModifySnapshotTier.yaml"
+
+requestModifySpotFleetRequest :: ModifySpotFleetRequest -> TestTree
+requestModifySpotFleetRequest =
+  req
+    "ModifySpotFleetRequest"
+    "fixture/ModifySpotFleetRequest.yaml"
+
+requestModifySubnetAttribute :: ModifySubnetAttribute -> TestTree
+requestModifySubnetAttribute =
+  req
+    "ModifySubnetAttribute"
+    "fixture/ModifySubnetAttribute.yaml"
+
+requestModifyTrafficMirrorFilterNetworkServices :: ModifyTrafficMirrorFilterNetworkServices -> TestTree
+requestModifyTrafficMirrorFilterNetworkServices =
+  req
+    "ModifyTrafficMirrorFilterNetworkServices"
+    "fixture/ModifyTrafficMirrorFilterNetworkServices.yaml"
+
+requestModifyTrafficMirrorFilterRule :: ModifyTrafficMirrorFilterRule -> TestTree
+requestModifyTrafficMirrorFilterRule =
+  req
+    "ModifyTrafficMirrorFilterRule"
+    "fixture/ModifyTrafficMirrorFilterRule.yaml"
+
+requestModifyTrafficMirrorSession :: ModifyTrafficMirrorSession -> TestTree
+requestModifyTrafficMirrorSession =
+  req
+    "ModifyTrafficMirrorSession"
+    "fixture/ModifyTrafficMirrorSession.yaml"
+
+requestModifyTransitGateway :: ModifyTransitGateway -> TestTree
+requestModifyTransitGateway =
+  req
+    "ModifyTransitGateway"
+    "fixture/ModifyTransitGateway.yaml"
+
+requestModifyTransitGatewayPrefixListReference :: ModifyTransitGatewayPrefixListReference -> TestTree
+requestModifyTransitGatewayPrefixListReference =
+  req
+    "ModifyTransitGatewayPrefixListReference"
+    "fixture/ModifyTransitGatewayPrefixListReference.yaml"
+
+requestModifyTransitGatewayVpcAttachment :: ModifyTransitGatewayVpcAttachment -> TestTree
+requestModifyTransitGatewayVpcAttachment =
+  req
+    "ModifyTransitGatewayVpcAttachment"
+    "fixture/ModifyTransitGatewayVpcAttachment.yaml"
+
+requestModifyVerifiedAccessEndpoint :: ModifyVerifiedAccessEndpoint -> TestTree
+requestModifyVerifiedAccessEndpoint =
+  req
+    "ModifyVerifiedAccessEndpoint"
+    "fixture/ModifyVerifiedAccessEndpoint.yaml"
+
+requestModifyVerifiedAccessEndpointPolicy :: ModifyVerifiedAccessEndpointPolicy -> TestTree
+requestModifyVerifiedAccessEndpointPolicy =
+  req
+    "ModifyVerifiedAccessEndpointPolicy"
+    "fixture/ModifyVerifiedAccessEndpointPolicy.yaml"
+
+requestModifyVerifiedAccessGroup :: ModifyVerifiedAccessGroup -> TestTree
+requestModifyVerifiedAccessGroup =
+  req
+    "ModifyVerifiedAccessGroup"
+    "fixture/ModifyVerifiedAccessGroup.yaml"
+
+requestModifyVerifiedAccessGroupPolicy :: ModifyVerifiedAccessGroupPolicy -> TestTree
+requestModifyVerifiedAccessGroupPolicy =
+  req
+    "ModifyVerifiedAccessGroupPolicy"
+    "fixture/ModifyVerifiedAccessGroupPolicy.yaml"
+
+requestModifyVerifiedAccessInstance :: ModifyVerifiedAccessInstance -> TestTree
+requestModifyVerifiedAccessInstance =
+  req
+    "ModifyVerifiedAccessInstance"
+    "fixture/ModifyVerifiedAccessInstance.yaml"
+
+requestModifyVerifiedAccessInstanceLoggingConfiguration :: ModifyVerifiedAccessInstanceLoggingConfiguration -> TestTree
+requestModifyVerifiedAccessInstanceLoggingConfiguration =
+  req
+    "ModifyVerifiedAccessInstanceLoggingConfiguration"
+    "fixture/ModifyVerifiedAccessInstanceLoggingConfiguration.yaml"
+
+requestModifyVerifiedAccessTrustProvider :: ModifyVerifiedAccessTrustProvider -> TestTree
+requestModifyVerifiedAccessTrustProvider =
+  req
+    "ModifyVerifiedAccessTrustProvider"
+    "fixture/ModifyVerifiedAccessTrustProvider.yaml"
+
+requestModifyVolume :: ModifyVolume -> TestTree
+requestModifyVolume =
+  req
+    "ModifyVolume"
+    "fixture/ModifyVolume.yaml"
+
+requestModifyVolumeAttribute :: ModifyVolumeAttribute -> TestTree
+requestModifyVolumeAttribute =
+  req
+    "ModifyVolumeAttribute"
+    "fixture/ModifyVolumeAttribute.yaml"
+
+requestModifyVpcAttribute :: ModifyVpcAttribute -> TestTree
+requestModifyVpcAttribute =
+  req
+    "ModifyVpcAttribute"
+    "fixture/ModifyVpcAttribute.yaml"
+
+requestModifyVpcEndpoint :: ModifyVpcEndpoint -> TestTree
+requestModifyVpcEndpoint =
+  req
+    "ModifyVpcEndpoint"
+    "fixture/ModifyVpcEndpoint.yaml"
+
+requestModifyVpcEndpointConnectionNotification :: ModifyVpcEndpointConnectionNotification -> TestTree
+requestModifyVpcEndpointConnectionNotification =
+  req
+    "ModifyVpcEndpointConnectionNotification"
+    "fixture/ModifyVpcEndpointConnectionNotification.yaml"
+
+requestModifyVpcEndpointServiceConfiguration :: ModifyVpcEndpointServiceConfiguration -> TestTree
+requestModifyVpcEndpointServiceConfiguration =
+  req
+    "ModifyVpcEndpointServiceConfiguration"
+    "fixture/ModifyVpcEndpointServiceConfiguration.yaml"
+
+requestModifyVpcEndpointServicePayerResponsibility :: ModifyVpcEndpointServicePayerResponsibility -> TestTree
+requestModifyVpcEndpointServicePayerResponsibility =
+  req
+    "ModifyVpcEndpointServicePayerResponsibility"
+    "fixture/ModifyVpcEndpointServicePayerResponsibility.yaml"
+
+requestModifyVpcEndpointServicePermissions :: ModifyVpcEndpointServicePermissions -> TestTree
+requestModifyVpcEndpointServicePermissions =
+  req
+    "ModifyVpcEndpointServicePermissions"
+    "fixture/ModifyVpcEndpointServicePermissions.yaml"
+
+requestModifyVpcPeeringConnectionOptions :: ModifyVpcPeeringConnectionOptions -> TestTree
+requestModifyVpcPeeringConnectionOptions =
+  req
+    "ModifyVpcPeeringConnectionOptions"
+    "fixture/ModifyVpcPeeringConnectionOptions.yaml"
+
+requestModifyVpcTenancy :: ModifyVpcTenancy -> TestTree
+requestModifyVpcTenancy =
+  req
+    "ModifyVpcTenancy"
+    "fixture/ModifyVpcTenancy.yaml"
+
+requestModifyVpnConnection :: ModifyVpnConnection -> TestTree
+requestModifyVpnConnection =
+  req
+    "ModifyVpnConnection"
+    "fixture/ModifyVpnConnection.yaml"
+
+requestModifyVpnConnectionOptions :: ModifyVpnConnectionOptions -> TestTree
+requestModifyVpnConnectionOptions =
+  req
+    "ModifyVpnConnectionOptions"
+    "fixture/ModifyVpnConnectionOptions.yaml"
+
+requestModifyVpnTunnelCertificate :: ModifyVpnTunnelCertificate -> TestTree
+requestModifyVpnTunnelCertificate =
+  req
+    "ModifyVpnTunnelCertificate"
+    "fixture/ModifyVpnTunnelCertificate.yaml"
+
+requestModifyVpnTunnelOptions :: ModifyVpnTunnelOptions -> TestTree
+requestModifyVpnTunnelOptions =
+  req
+    "ModifyVpnTunnelOptions"
+    "fixture/ModifyVpnTunnelOptions.yaml"
+
+requestMonitorInstances :: MonitorInstances -> TestTree
+requestMonitorInstances =
+  req
+    "MonitorInstances"
+    "fixture/MonitorInstances.yaml"
+
+requestMoveAddressToVpc :: MoveAddressToVpc -> TestTree
+requestMoveAddressToVpc =
+  req
+    "MoveAddressToVpc"
+    "fixture/MoveAddressToVpc.yaml"
+
+requestMoveByoipCidrToIpam :: MoveByoipCidrToIpam -> TestTree
+requestMoveByoipCidrToIpam =
+  req
+    "MoveByoipCidrToIpam"
+    "fixture/MoveByoipCidrToIpam.yaml"
+
+requestProvisionByoipCidr :: ProvisionByoipCidr -> TestTree
+requestProvisionByoipCidr =
+  req
+    "ProvisionByoipCidr"
+    "fixture/ProvisionByoipCidr.yaml"
+
+requestProvisionIpamPoolCidr :: ProvisionIpamPoolCidr -> TestTree
+requestProvisionIpamPoolCidr =
+  req
+    "ProvisionIpamPoolCidr"
+    "fixture/ProvisionIpamPoolCidr.yaml"
+
+requestProvisionPublicIpv4PoolCidr :: ProvisionPublicIpv4PoolCidr -> TestTree
+requestProvisionPublicIpv4PoolCidr =
+  req
+    "ProvisionPublicIpv4PoolCidr"
+    "fixture/ProvisionPublicIpv4PoolCidr.yaml"
+
+requestPurchaseHostReservation :: PurchaseHostReservation -> TestTree
+requestPurchaseHostReservation =
+  req
+    "PurchaseHostReservation"
+    "fixture/PurchaseHostReservation.yaml"
+
+requestPurchaseReservedInstancesOffering :: PurchaseReservedInstancesOffering -> TestTree
+requestPurchaseReservedInstancesOffering =
+  req
+    "PurchaseReservedInstancesOffering"
+    "fixture/PurchaseReservedInstancesOffering.yaml"
+
+requestPurchaseScheduledInstances :: PurchaseScheduledInstances -> TestTree
+requestPurchaseScheduledInstances =
+  req
+    "PurchaseScheduledInstances"
+    "fixture/PurchaseScheduledInstances.yaml"
+
+requestRebootInstances :: RebootInstances -> TestTree
+requestRebootInstances =
+  req
+    "RebootInstances"
+    "fixture/RebootInstances.yaml"
+
+requestRegisterImage :: RegisterImage -> TestTree
+requestRegisterImage =
+  req
+    "RegisterImage"
+    "fixture/RegisterImage.yaml"
+
+requestRegisterInstanceEventNotificationAttributes :: RegisterInstanceEventNotificationAttributes -> TestTree
+requestRegisterInstanceEventNotificationAttributes =
+  req
+    "RegisterInstanceEventNotificationAttributes"
+    "fixture/RegisterInstanceEventNotificationAttributes.yaml"
+
+requestRegisterTransitGatewayMulticastGroupMembers :: RegisterTransitGatewayMulticastGroupMembers -> TestTree
+requestRegisterTransitGatewayMulticastGroupMembers =
+  req
+    "RegisterTransitGatewayMulticastGroupMembers"
+    "fixture/RegisterTransitGatewayMulticastGroupMembers.yaml"
+
+requestRegisterTransitGatewayMulticastGroupSources :: RegisterTransitGatewayMulticastGroupSources -> TestTree
+requestRegisterTransitGatewayMulticastGroupSources =
+  req
+    "RegisterTransitGatewayMulticastGroupSources"
+    "fixture/RegisterTransitGatewayMulticastGroupSources.yaml"
+
+requestRejectTransitGatewayMulticastDomainAssociations :: RejectTransitGatewayMulticastDomainAssociations -> TestTree
+requestRejectTransitGatewayMulticastDomainAssociations =
+  req
+    "RejectTransitGatewayMulticastDomainAssociations"
+    "fixture/RejectTransitGatewayMulticastDomainAssociations.yaml"
+
+requestRejectTransitGatewayPeeringAttachment :: RejectTransitGatewayPeeringAttachment -> TestTree
+requestRejectTransitGatewayPeeringAttachment =
+  req
+    "RejectTransitGatewayPeeringAttachment"
+    "fixture/RejectTransitGatewayPeeringAttachment.yaml"
+
+requestRejectTransitGatewayVpcAttachment :: RejectTransitGatewayVpcAttachment -> TestTree
+requestRejectTransitGatewayVpcAttachment =
+  req
+    "RejectTransitGatewayVpcAttachment"
+    "fixture/RejectTransitGatewayVpcAttachment.yaml"
+
+requestRejectVpcEndpointConnections :: RejectVpcEndpointConnections -> TestTree
+requestRejectVpcEndpointConnections =
+  req
+    "RejectVpcEndpointConnections"
+    "fixture/RejectVpcEndpointConnections.yaml"
+
+requestRejectVpcPeeringConnection :: RejectVpcPeeringConnection -> TestTree
+requestRejectVpcPeeringConnection =
+  req
+    "RejectVpcPeeringConnection"
+    "fixture/RejectVpcPeeringConnection.yaml"
+
+requestReleaseAddress :: ReleaseAddress -> TestTree
+requestReleaseAddress =
+  req
+    "ReleaseAddress"
+    "fixture/ReleaseAddress.yaml"
+
+requestReleaseHosts :: ReleaseHosts -> TestTree
+requestReleaseHosts =
+  req
+    "ReleaseHosts"
+    "fixture/ReleaseHosts.yaml"
+
+requestReleaseIpamPoolAllocation :: ReleaseIpamPoolAllocation -> TestTree
+requestReleaseIpamPoolAllocation =
+  req
+    "ReleaseIpamPoolAllocation"
+    "fixture/ReleaseIpamPoolAllocation.yaml"
+
+requestReplaceIamInstanceProfileAssociation :: ReplaceIamInstanceProfileAssociation -> TestTree
+requestReplaceIamInstanceProfileAssociation =
+  req
+    "ReplaceIamInstanceProfileAssociation"
+    "fixture/ReplaceIamInstanceProfileAssociation.yaml"
+
+requestReplaceNetworkAclAssociation :: ReplaceNetworkAclAssociation -> TestTree
+requestReplaceNetworkAclAssociation =
+  req
+    "ReplaceNetworkAclAssociation"
+    "fixture/ReplaceNetworkAclAssociation.yaml"
+
+requestReplaceNetworkAclEntry :: ReplaceNetworkAclEntry -> TestTree
+requestReplaceNetworkAclEntry =
+  req
+    "ReplaceNetworkAclEntry"
+    "fixture/ReplaceNetworkAclEntry.yaml"
+
+requestReplaceRoute :: ReplaceRoute -> TestTree
+requestReplaceRoute =
+  req
+    "ReplaceRoute"
+    "fixture/ReplaceRoute.yaml"
+
+requestReplaceRouteTableAssociation :: ReplaceRouteTableAssociation -> TestTree
+requestReplaceRouteTableAssociation =
+  req
+    "ReplaceRouteTableAssociation"
+    "fixture/ReplaceRouteTableAssociation.yaml"
+
+requestReplaceTransitGatewayRoute :: ReplaceTransitGatewayRoute -> TestTree
+requestReplaceTransitGatewayRoute =
+  req
+    "ReplaceTransitGatewayRoute"
+    "fixture/ReplaceTransitGatewayRoute.yaml"
+
+requestReportInstanceStatus :: ReportInstanceStatus -> TestTree
+requestReportInstanceStatus =
+  req
+    "ReportInstanceStatus"
+    "fixture/ReportInstanceStatus.yaml"
+
+requestRequestSpotFleet :: RequestSpotFleet -> TestTree
+requestRequestSpotFleet =
+  req
+    "RequestSpotFleet"
+    "fixture/RequestSpotFleet.yaml"
+
+requestRequestSpotInstances :: RequestSpotInstances -> TestTree
+requestRequestSpotInstances =
+  req
+    "RequestSpotInstances"
+    "fixture/RequestSpotInstances.yaml"
+
+requestResetAddressAttribute :: ResetAddressAttribute -> TestTree
+requestResetAddressAttribute =
+  req
+    "ResetAddressAttribute"
+    "fixture/ResetAddressAttribute.yaml"
+
+requestResetEbsDefaultKmsKeyId :: ResetEbsDefaultKmsKeyId -> TestTree
+requestResetEbsDefaultKmsKeyId =
+  req
+    "ResetEbsDefaultKmsKeyId"
+    "fixture/ResetEbsDefaultKmsKeyId.yaml"
+
+requestResetFpgaImageAttribute :: ResetFpgaImageAttribute -> TestTree
+requestResetFpgaImageAttribute =
+  req
+    "ResetFpgaImageAttribute"
+    "fixture/ResetFpgaImageAttribute.yaml"
+
+requestResetImageAttribute :: ResetImageAttribute -> TestTree
+requestResetImageAttribute =
+  req
+    "ResetImageAttribute"
+    "fixture/ResetImageAttribute.yaml"
+
+requestResetInstanceAttribute :: ResetInstanceAttribute -> TestTree
+requestResetInstanceAttribute =
+  req
+    "ResetInstanceAttribute"
+    "fixture/ResetInstanceAttribute.yaml"
+
+requestResetNetworkInterfaceAttribute :: ResetNetworkInterfaceAttribute -> TestTree
+requestResetNetworkInterfaceAttribute =
+  req
+    "ResetNetworkInterfaceAttribute"
+    "fixture/ResetNetworkInterfaceAttribute.yaml"
+
+requestResetSnapshotAttribute :: ResetSnapshotAttribute -> TestTree
+requestResetSnapshotAttribute =
+  req
+    "ResetSnapshotAttribute"
+    "fixture/ResetSnapshotAttribute.yaml"
+
+requestRestoreAddressToClassic :: RestoreAddressToClassic -> TestTree
+requestRestoreAddressToClassic =
+  req
+    "RestoreAddressToClassic"
+    "fixture/RestoreAddressToClassic.yaml"
+
+requestRestoreImageFromRecycleBin :: RestoreImageFromRecycleBin -> TestTree
+requestRestoreImageFromRecycleBin =
+  req
+    "RestoreImageFromRecycleBin"
+    "fixture/RestoreImageFromRecycleBin.yaml"
+
+requestRestoreManagedPrefixListVersion :: RestoreManagedPrefixListVersion -> TestTree
+requestRestoreManagedPrefixListVersion =
+  req
+    "RestoreManagedPrefixListVersion"
+    "fixture/RestoreManagedPrefixListVersion.yaml"
+
+requestRestoreSnapshotFromRecycleBin :: RestoreSnapshotFromRecycleBin -> TestTree
+requestRestoreSnapshotFromRecycleBin =
+  req
+    "RestoreSnapshotFromRecycleBin"
+    "fixture/RestoreSnapshotFromRecycleBin.yaml"
+
+requestRestoreSnapshotTier :: RestoreSnapshotTier -> TestTree
+requestRestoreSnapshotTier =
+  req
+    "RestoreSnapshotTier"
+    "fixture/RestoreSnapshotTier.yaml"
+
+requestRevokeClientVpnIngress :: RevokeClientVpnIngress -> TestTree
+requestRevokeClientVpnIngress =
+  req
+    "RevokeClientVpnIngress"
+    "fixture/RevokeClientVpnIngress.yaml"
+
+requestRevokeSecurityGroupEgress :: RevokeSecurityGroupEgress -> TestTree
+requestRevokeSecurityGroupEgress =
+  req
+    "RevokeSecurityGroupEgress"
+    "fixture/RevokeSecurityGroupEgress.yaml"
+
+requestRevokeSecurityGroupIngress :: RevokeSecurityGroupIngress -> TestTree
+requestRevokeSecurityGroupIngress =
+  req
+    "RevokeSecurityGroupIngress"
+    "fixture/RevokeSecurityGroupIngress.yaml"
+
+requestRunInstances :: RunInstances -> TestTree
+requestRunInstances =
+  req
+    "RunInstances"
+    "fixture/RunInstances.yaml"
+
+requestRunScheduledInstances :: RunScheduledInstances -> TestTree
+requestRunScheduledInstances =
+  req
+    "RunScheduledInstances"
+    "fixture/RunScheduledInstances.yaml"
+
+requestSearchLocalGatewayRoutes :: SearchLocalGatewayRoutes -> TestTree
+requestSearchLocalGatewayRoutes =
+  req
+    "SearchLocalGatewayRoutes"
+    "fixture/SearchLocalGatewayRoutes.yaml"
+
+requestSearchTransitGatewayMulticastGroups :: SearchTransitGatewayMulticastGroups -> TestTree
+requestSearchTransitGatewayMulticastGroups =
+  req
+    "SearchTransitGatewayMulticastGroups"
+    "fixture/SearchTransitGatewayMulticastGroups.yaml"
+
+requestSearchTransitGatewayRoutes :: SearchTransitGatewayRoutes -> TestTree
+requestSearchTransitGatewayRoutes =
+  req
+    "SearchTransitGatewayRoutes"
+    "fixture/SearchTransitGatewayRoutes.yaml"
+
+requestSendDiagnosticInterrupt :: SendDiagnosticInterrupt -> TestTree
+requestSendDiagnosticInterrupt =
+  req
+    "SendDiagnosticInterrupt"
+    "fixture/SendDiagnosticInterrupt.yaml"
+
+requestStartInstances :: StartInstances -> TestTree
+requestStartInstances =
+  req
+    "StartInstances"
+    "fixture/StartInstances.yaml"
+
+requestStartNetworkInsightsAccessScopeAnalysis :: StartNetworkInsightsAccessScopeAnalysis -> TestTree
+requestStartNetworkInsightsAccessScopeAnalysis =
+  req
+    "StartNetworkInsightsAccessScopeAnalysis"
+    "fixture/StartNetworkInsightsAccessScopeAnalysis.yaml"
+
+requestStartNetworkInsightsAnalysis :: StartNetworkInsightsAnalysis -> TestTree
+requestStartNetworkInsightsAnalysis =
+  req
+    "StartNetworkInsightsAnalysis"
+    "fixture/StartNetworkInsightsAnalysis.yaml"
+
+requestStartVpcEndpointServicePrivateDnsVerification :: StartVpcEndpointServicePrivateDnsVerification -> TestTree
+requestStartVpcEndpointServicePrivateDnsVerification =
+  req
+    "StartVpcEndpointServicePrivateDnsVerification"
+    "fixture/StartVpcEndpointServicePrivateDnsVerification.yaml"
+
+requestStopInstances :: StopInstances -> TestTree
+requestStopInstances =
+  req
+    "StopInstances"
+    "fixture/StopInstances.yaml"
+
+requestTerminateClientVpnConnections :: TerminateClientVpnConnections -> TestTree
+requestTerminateClientVpnConnections =
+  req
+    "TerminateClientVpnConnections"
+    "fixture/TerminateClientVpnConnections.yaml"
+
+requestTerminateInstances :: TerminateInstances -> TestTree
+requestTerminateInstances =
+  req
+    "TerminateInstances"
+    "fixture/TerminateInstances.yaml"
+
+requestUnassignIpv6Addresses :: UnassignIpv6Addresses -> TestTree
+requestUnassignIpv6Addresses =
+  req
+    "UnassignIpv6Addresses"
+    "fixture/UnassignIpv6Addresses.yaml"
+
+requestUnassignPrivateIpAddresses :: UnassignPrivateIpAddresses -> TestTree
+requestUnassignPrivateIpAddresses =
+  req
+    "UnassignPrivateIpAddresses"
+    "fixture/UnassignPrivateIpAddresses.yaml"
+
+requestUnmonitorInstances :: UnmonitorInstances -> TestTree
+requestUnmonitorInstances =
+  req
+    "UnmonitorInstances"
+    "fixture/UnmonitorInstances.yaml"
+
+requestUpdateSecurityGroupRuleDescriptionsEgress :: UpdateSecurityGroupRuleDescriptionsEgress -> TestTree
+requestUpdateSecurityGroupRuleDescriptionsEgress =
+  req
+    "UpdateSecurityGroupRuleDescriptionsEgress"
+    "fixture/UpdateSecurityGroupRuleDescriptionsEgress.yaml"
+
+requestUpdateSecurityGroupRuleDescriptionsIngress :: UpdateSecurityGroupRuleDescriptionsIngress -> TestTree
+requestUpdateSecurityGroupRuleDescriptionsIngress =
+  req
+    "UpdateSecurityGroupRuleDescriptionsIngress"
+    "fixture/UpdateSecurityGroupRuleDescriptionsIngress.yaml"
+
+requestWithdrawByoipCidr :: WithdrawByoipCidr -> TestTree
+requestWithdrawByoipCidr =
+  req
+    "WithdrawByoipCidr"
+    "fixture/WithdrawByoipCidr.yaml"
+
+-- Responses
+
+responseAcceptAddressTransfer :: AcceptAddressTransferResponse -> TestTree
+responseAcceptAddressTransfer =
+  res
+    "AcceptAddressTransferResponse"
+    "fixture/AcceptAddressTransferResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptAddressTransfer)
+
+responseAcceptReservedInstancesExchangeQuote :: AcceptReservedInstancesExchangeQuoteResponse -> TestTree
+responseAcceptReservedInstancesExchangeQuote =
+  res
+    "AcceptReservedInstancesExchangeQuoteResponse"
+    "fixture/AcceptReservedInstancesExchangeQuoteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptReservedInstancesExchangeQuote)
+
+responseAcceptTransitGatewayMulticastDomainAssociations :: AcceptTransitGatewayMulticastDomainAssociationsResponse -> TestTree
+responseAcceptTransitGatewayMulticastDomainAssociations =
+  res
+    "AcceptTransitGatewayMulticastDomainAssociationsResponse"
+    "fixture/AcceptTransitGatewayMulticastDomainAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptTransitGatewayMulticastDomainAssociations)
+
+responseAcceptTransitGatewayPeeringAttachment :: AcceptTransitGatewayPeeringAttachmentResponse -> TestTree
+responseAcceptTransitGatewayPeeringAttachment =
+  res
+    "AcceptTransitGatewayPeeringAttachmentResponse"
+    "fixture/AcceptTransitGatewayPeeringAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptTransitGatewayPeeringAttachment)
+
+responseAcceptTransitGatewayVpcAttachment :: AcceptTransitGatewayVpcAttachmentResponse -> TestTree
+responseAcceptTransitGatewayVpcAttachment =
+  res
+    "AcceptTransitGatewayVpcAttachmentResponse"
+    "fixture/AcceptTransitGatewayVpcAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptTransitGatewayVpcAttachment)
+
+responseAcceptVpcEndpointConnections :: AcceptVpcEndpointConnectionsResponse -> TestTree
+responseAcceptVpcEndpointConnections =
+  res
+    "AcceptVpcEndpointConnectionsResponse"
+    "fixture/AcceptVpcEndpointConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptVpcEndpointConnections)
+
+responseAcceptVpcPeeringConnection :: AcceptVpcPeeringConnectionResponse -> TestTree
+responseAcceptVpcPeeringConnection =
+  res
+    "AcceptVpcPeeringConnectionResponse"
+    "fixture/AcceptVpcPeeringConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AcceptVpcPeeringConnection)
+
+responseAdvertiseByoipCidr :: AdvertiseByoipCidrResponse -> TestTree
+responseAdvertiseByoipCidr =
+  res
+    "AdvertiseByoipCidrResponse"
+    "fixture/AdvertiseByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AdvertiseByoipCidr)
+
+responseAllocateAddress :: AllocateAddressResponse -> TestTree
+responseAllocateAddress =
+  res
+    "AllocateAddressResponse"
+    "fixture/AllocateAddressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AllocateAddress)
+
+responseAllocateHosts :: AllocateHostsResponse -> TestTree
+responseAllocateHosts =
+  res
+    "AllocateHostsResponse"
+    "fixture/AllocateHostsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AllocateHosts)
+
+responseAllocateIpamPoolCidr :: AllocateIpamPoolCidrResponse -> TestTree
+responseAllocateIpamPoolCidr =
+  res
+    "AllocateIpamPoolCidrResponse"
+    "fixture/AllocateIpamPoolCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AllocateIpamPoolCidr)
+
+responseApplySecurityGroupsToClientVpnTargetNetwork :: ApplySecurityGroupsToClientVpnTargetNetworkResponse -> TestTree
+responseApplySecurityGroupsToClientVpnTargetNetwork =
+  res
+    "ApplySecurityGroupsToClientVpnTargetNetworkResponse"
+    "fixture/ApplySecurityGroupsToClientVpnTargetNetworkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ApplySecurityGroupsToClientVpnTargetNetwork)
+
+responseAssignIpv6Addresses :: AssignIpv6AddressesResponse -> TestTree
+responseAssignIpv6Addresses =
+  res
+    "AssignIpv6AddressesResponse"
+    "fixture/AssignIpv6AddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssignIpv6Addresses)
+
+responseAssignPrivateIpAddresses :: AssignPrivateIpAddressesResponse -> TestTree
+responseAssignPrivateIpAddresses =
+  res
+    "AssignPrivateIpAddressesResponse"
+    "fixture/AssignPrivateIpAddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssignPrivateIpAddresses)
+
+responseAssociateAddress :: AssociateAddressResponse -> TestTree
+responseAssociateAddress =
+  res
+    "AssociateAddressResponse"
+    "fixture/AssociateAddressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateAddress)
+
+responseAssociateClientVpnTargetNetwork :: AssociateClientVpnTargetNetworkResponse -> TestTree
+responseAssociateClientVpnTargetNetwork =
+  res
+    "AssociateClientVpnTargetNetworkResponse"
+    "fixture/AssociateClientVpnTargetNetworkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateClientVpnTargetNetwork)
+
+responseAssociateDhcpOptions :: AssociateDhcpOptionsResponse -> TestTree
+responseAssociateDhcpOptions =
+  res
+    "AssociateDhcpOptionsResponse"
+    "fixture/AssociateDhcpOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateDhcpOptions)
+
+responseAssociateEnclaveCertificateIamRole :: AssociateEnclaveCertificateIamRoleResponse -> TestTree
+responseAssociateEnclaveCertificateIamRole =
+  res
+    "AssociateEnclaveCertificateIamRoleResponse"
+    "fixture/AssociateEnclaveCertificateIamRoleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateEnclaveCertificateIamRole)
+
+responseAssociateIamInstanceProfile :: AssociateIamInstanceProfileResponse -> TestTree
+responseAssociateIamInstanceProfile =
+  res
+    "AssociateIamInstanceProfileResponse"
+    "fixture/AssociateIamInstanceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateIamInstanceProfile)
+
+responseAssociateInstanceEventWindow :: AssociateInstanceEventWindowResponse -> TestTree
+responseAssociateInstanceEventWindow =
+  res
+    "AssociateInstanceEventWindowResponse"
+    "fixture/AssociateInstanceEventWindowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateInstanceEventWindow)
+
+responseAssociateRouteTable :: AssociateRouteTableResponse -> TestTree
+responseAssociateRouteTable =
+  res
+    "AssociateRouteTableResponse"
+    "fixture/AssociateRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateRouteTable)
+
+responseAssociateSubnetCidrBlock :: AssociateSubnetCidrBlockResponse -> TestTree
+responseAssociateSubnetCidrBlock =
+  res
+    "AssociateSubnetCidrBlockResponse"
+    "fixture/AssociateSubnetCidrBlockResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateSubnetCidrBlock)
+
+responseAssociateTransitGatewayMulticastDomain :: AssociateTransitGatewayMulticastDomainResponse -> TestTree
+responseAssociateTransitGatewayMulticastDomain =
+  res
+    "AssociateTransitGatewayMulticastDomainResponse"
+    "fixture/AssociateTransitGatewayMulticastDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateTransitGatewayMulticastDomain)
+
+responseAssociateTransitGatewayPolicyTable :: AssociateTransitGatewayPolicyTableResponse -> TestTree
+responseAssociateTransitGatewayPolicyTable =
+  res
+    "AssociateTransitGatewayPolicyTableResponse"
+    "fixture/AssociateTransitGatewayPolicyTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateTransitGatewayPolicyTable)
+
+responseAssociateTransitGatewayRouteTable :: AssociateTransitGatewayRouteTableResponse -> TestTree
+responseAssociateTransitGatewayRouteTable =
+  res
+    "AssociateTransitGatewayRouteTableResponse"
+    "fixture/AssociateTransitGatewayRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateTransitGatewayRouteTable)
+
+responseAssociateTrunkInterface :: AssociateTrunkInterfaceResponse -> TestTree
+responseAssociateTrunkInterface =
+  res
+    "AssociateTrunkInterfaceResponse"
+    "fixture/AssociateTrunkInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateTrunkInterface)
+
+responseAssociateVpcCidrBlock :: AssociateVpcCidrBlockResponse -> TestTree
+responseAssociateVpcCidrBlock =
+  res
+    "AssociateVpcCidrBlockResponse"
+    "fixture/AssociateVpcCidrBlockResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateVpcCidrBlock)
+
+responseAttachClassicLinkVpc :: AttachClassicLinkVpcResponse -> TestTree
+responseAttachClassicLinkVpc =
+  res
+    "AttachClassicLinkVpcResponse"
+    "fixture/AttachClassicLinkVpcResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AttachClassicLinkVpc)
+
+responseAttachInternetGateway :: AttachInternetGatewayResponse -> TestTree
+responseAttachInternetGateway =
+  res
+    "AttachInternetGatewayResponse"
+    "fixture/AttachInternetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AttachInternetGateway)
+
+responseAttachNetworkInterface :: AttachNetworkInterfaceResponse -> TestTree
+responseAttachNetworkInterface =
+  res
+    "AttachNetworkInterfaceResponse"
+    "fixture/AttachNetworkInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AttachNetworkInterface)
+
+responseAttachVerifiedAccessTrustProvider :: AttachVerifiedAccessTrustProviderResponse -> TestTree
+responseAttachVerifiedAccessTrustProvider =
+  res
+    "AttachVerifiedAccessTrustProviderResponse"
+    "fixture/AttachVerifiedAccessTrustProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AttachVerifiedAccessTrustProvider)
+
+responseAttachVolume :: VolumeAttachment -> TestTree
+responseAttachVolume =
+  res
+    "AttachVolumeResponse"
+    "fixture/AttachVolumeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AttachVolume)
+
+responseAttachVpnGateway :: AttachVpnGatewayResponse -> TestTree
+responseAttachVpnGateway =
+  res
+    "AttachVpnGatewayResponse"
+    "fixture/AttachVpnGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AttachVpnGateway)
+
+responseAuthorizeClientVpnIngress :: AuthorizeClientVpnIngressResponse -> TestTree
+responseAuthorizeClientVpnIngress =
+  res
+    "AuthorizeClientVpnIngressResponse"
+    "fixture/AuthorizeClientVpnIngressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AuthorizeClientVpnIngress)
+
+responseAuthorizeSecurityGroupEgress :: AuthorizeSecurityGroupEgressResponse -> TestTree
+responseAuthorizeSecurityGroupEgress =
+  res
+    "AuthorizeSecurityGroupEgressResponse"
+    "fixture/AuthorizeSecurityGroupEgressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AuthorizeSecurityGroupEgress)
+
+responseAuthorizeSecurityGroupIngress :: AuthorizeSecurityGroupIngressResponse -> TestTree
+responseAuthorizeSecurityGroupIngress =
+  res
+    "AuthorizeSecurityGroupIngressResponse"
+    "fixture/AuthorizeSecurityGroupIngressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AuthorizeSecurityGroupIngress)
+
+responseBundleInstance :: BundleInstanceResponse -> TestTree
+responseBundleInstance =
+  res
+    "BundleInstanceResponse"
+    "fixture/BundleInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BundleInstance)
+
+responseCancelBundleTask :: CancelBundleTaskResponse -> TestTree
+responseCancelBundleTask =
+  res
+    "CancelBundleTaskResponse"
+    "fixture/CancelBundleTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelBundleTask)
+
+responseCancelCapacityReservation :: CancelCapacityReservationResponse -> TestTree
+responseCancelCapacityReservation =
+  res
+    "CancelCapacityReservationResponse"
+    "fixture/CancelCapacityReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelCapacityReservation)
+
+responseCancelCapacityReservationFleets :: CancelCapacityReservationFleetsResponse -> TestTree
+responseCancelCapacityReservationFleets =
+  res
+    "CancelCapacityReservationFleetsResponse"
+    "fixture/CancelCapacityReservationFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelCapacityReservationFleets)
+
+responseCancelConversionTask :: CancelConversionTaskResponse -> TestTree
+responseCancelConversionTask =
+  res
+    "CancelConversionTaskResponse"
+    "fixture/CancelConversionTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelConversionTask)
+
+responseCancelExportTask :: CancelExportTaskResponse -> TestTree
+responseCancelExportTask =
+  res
+    "CancelExportTaskResponse"
+    "fixture/CancelExportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelExportTask)
+
+responseCancelImageLaunchPermission :: CancelImageLaunchPermissionResponse -> TestTree
+responseCancelImageLaunchPermission =
+  res
+    "CancelImageLaunchPermissionResponse"
+    "fixture/CancelImageLaunchPermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelImageLaunchPermission)
+
+responseCancelImportTask :: CancelImportTaskResponse -> TestTree
+responseCancelImportTask =
+  res
+    "CancelImportTaskResponse"
+    "fixture/CancelImportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelImportTask)
+
+responseCancelReservedInstancesListing :: CancelReservedInstancesListingResponse -> TestTree
+responseCancelReservedInstancesListing =
+  res
+    "CancelReservedInstancesListingResponse"
+    "fixture/CancelReservedInstancesListingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelReservedInstancesListing)
+
+responseCancelSpotFleetRequests :: CancelSpotFleetRequestsResponse -> TestTree
+responseCancelSpotFleetRequests =
+  res
+    "CancelSpotFleetRequestsResponse"
+    "fixture/CancelSpotFleetRequestsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelSpotFleetRequests)
+
+responseCancelSpotInstanceRequests :: CancelSpotInstanceRequestsResponse -> TestTree
+responseCancelSpotInstanceRequests =
+  res
+    "CancelSpotInstanceRequestsResponse"
+    "fixture/CancelSpotInstanceRequestsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelSpotInstanceRequests)
+
+responseConfirmProductInstance :: ConfirmProductInstanceResponse -> TestTree
+responseConfirmProductInstance =
+  res
+    "ConfirmProductInstanceResponse"
+    "fixture/ConfirmProductInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ConfirmProductInstance)
+
+responseCopyFpgaImage :: CopyFpgaImageResponse -> TestTree
+responseCopyFpgaImage =
+  res
+    "CopyFpgaImageResponse"
+    "fixture/CopyFpgaImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CopyFpgaImage)
+
+responseCopyImage :: CopyImageResponse -> TestTree
+responseCopyImage =
+  res
+    "CopyImageResponse"
+    "fixture/CopyImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CopyImage)
+
+responseCopySnapshot :: CopySnapshotResponse -> TestTree
+responseCopySnapshot =
+  res
+    "CopySnapshotResponse"
+    "fixture/CopySnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CopySnapshot)
+
+responseCreateCapacityReservation :: CreateCapacityReservationResponse -> TestTree
+responseCreateCapacityReservation =
+  res
+    "CreateCapacityReservationResponse"
+    "fixture/CreateCapacityReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCapacityReservation)
+
+responseCreateCapacityReservationFleet :: CreateCapacityReservationFleetResponse -> TestTree
+responseCreateCapacityReservationFleet =
+  res
+    "CreateCapacityReservationFleetResponse"
+    "fixture/CreateCapacityReservationFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCapacityReservationFleet)
+
+responseCreateCarrierGateway :: CreateCarrierGatewayResponse -> TestTree
+responseCreateCarrierGateway =
+  res
+    "CreateCarrierGatewayResponse"
+    "fixture/CreateCarrierGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCarrierGateway)
+
+responseCreateClientVpnEndpoint :: CreateClientVpnEndpointResponse -> TestTree
+responseCreateClientVpnEndpoint =
+  res
+    "CreateClientVpnEndpointResponse"
+    "fixture/CreateClientVpnEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateClientVpnEndpoint)
+
+responseCreateClientVpnRoute :: CreateClientVpnRouteResponse -> TestTree
+responseCreateClientVpnRoute =
+  res
+    "CreateClientVpnRouteResponse"
+    "fixture/CreateClientVpnRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateClientVpnRoute)
+
+responseCreateCoipCidr :: CreateCoipCidrResponse -> TestTree
+responseCreateCoipCidr =
+  res
+    "CreateCoipCidrResponse"
+    "fixture/CreateCoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCoipCidr)
+
+responseCreateCoipPool :: CreateCoipPoolResponse -> TestTree
+responseCreateCoipPool =
+  res
+    "CreateCoipPoolResponse"
+    "fixture/CreateCoipPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCoipPool)
+
+responseCreateCustomerGateway :: CreateCustomerGatewayResponse -> TestTree
+responseCreateCustomerGateway =
+  res
+    "CreateCustomerGatewayResponse"
+    "fixture/CreateCustomerGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCustomerGateway)
+
+responseCreateDefaultSubnet :: CreateDefaultSubnetResponse -> TestTree
+responseCreateDefaultSubnet =
+  res
+    "CreateDefaultSubnetResponse"
+    "fixture/CreateDefaultSubnetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDefaultSubnet)
+
+responseCreateDefaultVpc :: CreateDefaultVpcResponse -> TestTree
+responseCreateDefaultVpc =
+  res
+    "CreateDefaultVpcResponse"
+    "fixture/CreateDefaultVpcResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDefaultVpc)
+
+responseCreateDhcpOptions :: CreateDhcpOptionsResponse -> TestTree
+responseCreateDhcpOptions =
+  res
+    "CreateDhcpOptionsResponse"
+    "fixture/CreateDhcpOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDhcpOptions)
+
+responseCreateEgressOnlyInternetGateway :: CreateEgressOnlyInternetGatewayResponse -> TestTree
+responseCreateEgressOnlyInternetGateway =
+  res
+    "CreateEgressOnlyInternetGatewayResponse"
+    "fixture/CreateEgressOnlyInternetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEgressOnlyInternetGateway)
+
+responseCreateFleet :: CreateFleetResponse -> TestTree
+responseCreateFleet =
+  res
+    "CreateFleetResponse"
+    "fixture/CreateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFleet)
+
+responseCreateFlowLogs :: CreateFlowLogsResponse -> TestTree
+responseCreateFlowLogs =
+  res
+    "CreateFlowLogsResponse"
+    "fixture/CreateFlowLogsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFlowLogs)
+
+responseCreateFpgaImage :: CreateFpgaImageResponse -> TestTree
+responseCreateFpgaImage =
+  res
+    "CreateFpgaImageResponse"
+    "fixture/CreateFpgaImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFpgaImage)
+
+responseCreateImage :: CreateImageResponse -> TestTree
+responseCreateImage =
+  res
+    "CreateImageResponse"
+    "fixture/CreateImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImage)
+
+responseCreateInstanceEventWindow :: CreateInstanceEventWindowResponse -> TestTree
+responseCreateInstanceEventWindow =
+  res
+    "CreateInstanceEventWindowResponse"
+    "fixture/CreateInstanceEventWindowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateInstanceEventWindow)
+
+responseCreateInstanceExportTask :: CreateInstanceExportTaskResponse -> TestTree
+responseCreateInstanceExportTask =
+  res
+    "CreateInstanceExportTaskResponse"
+    "fixture/CreateInstanceExportTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateInstanceExportTask)
+
+responseCreateInternetGateway :: CreateInternetGatewayResponse -> TestTree
+responseCreateInternetGateway =
+  res
+    "CreateInternetGatewayResponse"
+    "fixture/CreateInternetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateInternetGateway)
+
+responseCreateIpam :: CreateIpamResponse -> TestTree
+responseCreateIpam =
+  res
+    "CreateIpamResponse"
+    "fixture/CreateIpamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIpam)
+
+responseCreateIpamPool :: CreateIpamPoolResponse -> TestTree
+responseCreateIpamPool =
+  res
+    "CreateIpamPoolResponse"
+    "fixture/CreateIpamPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIpamPool)
+
+responseCreateIpamScope :: CreateIpamScopeResponse -> TestTree
+responseCreateIpamScope =
+  res
+    "CreateIpamScopeResponse"
+    "fixture/CreateIpamScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateIpamScope)
+
+responseCreateKeyPair :: CreateKeyPairResponse -> TestTree
+responseCreateKeyPair =
+  res
+    "CreateKeyPairResponse"
+    "fixture/CreateKeyPairResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateKeyPair)
+
+responseCreateLaunchTemplate :: CreateLaunchTemplateResponse -> TestTree
+responseCreateLaunchTemplate =
+  res
+    "CreateLaunchTemplateResponse"
+    "fixture/CreateLaunchTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLaunchTemplate)
+
+responseCreateLaunchTemplateVersion :: CreateLaunchTemplateVersionResponse -> TestTree
+responseCreateLaunchTemplateVersion =
+  res
+    "CreateLaunchTemplateVersionResponse"
+    "fixture/CreateLaunchTemplateVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLaunchTemplateVersion)
+
+responseCreateLocalGatewayRoute :: CreateLocalGatewayRouteResponse -> TestTree
+responseCreateLocalGatewayRoute =
+  res
+    "CreateLocalGatewayRouteResponse"
+    "fixture/CreateLocalGatewayRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocalGatewayRoute)
+
+responseCreateLocalGatewayRouteTable :: CreateLocalGatewayRouteTableResponse -> TestTree
+responseCreateLocalGatewayRouteTable =
+  res
+    "CreateLocalGatewayRouteTableResponse"
+    "fixture/CreateLocalGatewayRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocalGatewayRouteTable)
+
+responseCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation :: CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse -> TestTree
+responseCreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+  res
+    "CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse"
+    "fixture/CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+responseCreateLocalGatewayRouteTableVpcAssociation :: CreateLocalGatewayRouteTableVpcAssociationResponse -> TestTree
+responseCreateLocalGatewayRouteTableVpcAssociation =
+  res
+    "CreateLocalGatewayRouteTableVpcAssociationResponse"
+    "fixture/CreateLocalGatewayRouteTableVpcAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLocalGatewayRouteTableVpcAssociation)
+
+responseCreateManagedPrefixList :: CreateManagedPrefixListResponse -> TestTree
+responseCreateManagedPrefixList =
+  res
+    "CreateManagedPrefixListResponse"
+    "fixture/CreateManagedPrefixListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateManagedPrefixList)
+
+responseCreateNatGateway :: CreateNatGatewayResponse -> TestTree
+responseCreateNatGateway =
+  res
+    "CreateNatGatewayResponse"
+    "fixture/CreateNatGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNatGateway)
+
+responseCreateNetworkAcl :: CreateNetworkAclResponse -> TestTree
+responseCreateNetworkAcl =
+  res
+    "CreateNetworkAclResponse"
+    "fixture/CreateNetworkAclResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkAcl)
+
+responseCreateNetworkAclEntry :: CreateNetworkAclEntryResponse -> TestTree
+responseCreateNetworkAclEntry =
+  res
+    "CreateNetworkAclEntryResponse"
+    "fixture/CreateNetworkAclEntryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkAclEntry)
+
+responseCreateNetworkInsightsAccessScope :: CreateNetworkInsightsAccessScopeResponse -> TestTree
+responseCreateNetworkInsightsAccessScope =
+  res
+    "CreateNetworkInsightsAccessScopeResponse"
+    "fixture/CreateNetworkInsightsAccessScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkInsightsAccessScope)
+
+responseCreateNetworkInsightsPath :: CreateNetworkInsightsPathResponse -> TestTree
+responseCreateNetworkInsightsPath =
+  res
+    "CreateNetworkInsightsPathResponse"
+    "fixture/CreateNetworkInsightsPathResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkInsightsPath)
+
+responseCreateNetworkInterface :: CreateNetworkInterfaceResponse -> TestTree
+responseCreateNetworkInterface =
+  res
+    "CreateNetworkInterfaceResponse"
+    "fixture/CreateNetworkInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkInterface)
+
+responseCreateNetworkInterfacePermission :: CreateNetworkInterfacePermissionResponse -> TestTree
+responseCreateNetworkInterfacePermission =
+  res
+    "CreateNetworkInterfacePermissionResponse"
+    "fixture/CreateNetworkInterfacePermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateNetworkInterfacePermission)
+
+responseCreatePlacementGroup :: CreatePlacementGroupResponse -> TestTree
+responseCreatePlacementGroup =
+  res
+    "CreatePlacementGroupResponse"
+    "fixture/CreatePlacementGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePlacementGroup)
+
+responseCreatePublicIpv4Pool :: CreatePublicIpv4PoolResponse -> TestTree
+responseCreatePublicIpv4Pool =
+  res
+    "CreatePublicIpv4PoolResponse"
+    "fixture/CreatePublicIpv4PoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreatePublicIpv4Pool)
+
+responseCreateReplaceRootVolumeTask :: CreateReplaceRootVolumeTaskResponse -> TestTree
+responseCreateReplaceRootVolumeTask =
+  res
+    "CreateReplaceRootVolumeTaskResponse"
+    "fixture/CreateReplaceRootVolumeTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReplaceRootVolumeTask)
+
+responseCreateReservedInstancesListing :: CreateReservedInstancesListingResponse -> TestTree
+responseCreateReservedInstancesListing =
+  res
+    "CreateReservedInstancesListingResponse"
+    "fixture/CreateReservedInstancesListingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReservedInstancesListing)
+
+responseCreateRestoreImageTask :: CreateRestoreImageTaskResponse -> TestTree
+responseCreateRestoreImageTask =
+  res
+    "CreateRestoreImageTaskResponse"
+    "fixture/CreateRestoreImageTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRestoreImageTask)
+
+responseCreateRoute :: CreateRouteResponse -> TestTree
+responseCreateRoute =
+  res
+    "CreateRouteResponse"
+    "fixture/CreateRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRoute)
+
+responseCreateRouteTable :: CreateRouteTableResponse -> TestTree
+responseCreateRouteTable =
+  res
+    "CreateRouteTableResponse"
+    "fixture/CreateRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateRouteTable)
+
+responseCreateSecurityGroup :: CreateSecurityGroupResponse -> TestTree
+responseCreateSecurityGroup =
+  res
+    "CreateSecurityGroupResponse"
+    "fixture/CreateSecurityGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSecurityGroup)
+
+responseCreateSnapshot :: Snapshot -> TestTree
+responseCreateSnapshot =
+  res
+    "CreateSnapshotResponse"
+    "fixture/CreateSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSnapshot)
+
+responseCreateSnapshots :: CreateSnapshotsResponse -> TestTree
+responseCreateSnapshots =
+  res
+    "CreateSnapshotsResponse"
+    "fixture/CreateSnapshotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSnapshots)
+
+responseCreateSpotDatafeedSubscription :: CreateSpotDatafeedSubscriptionResponse -> TestTree
+responseCreateSpotDatafeedSubscription =
+  res
+    "CreateSpotDatafeedSubscriptionResponse"
+    "fixture/CreateSpotDatafeedSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSpotDatafeedSubscription)
+
+responseCreateStoreImageTask :: CreateStoreImageTaskResponse -> TestTree
+responseCreateStoreImageTask =
+  res
+    "CreateStoreImageTaskResponse"
+    "fixture/CreateStoreImageTaskResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStoreImageTask)
+
+responseCreateSubnet :: CreateSubnetResponse -> TestTree
+responseCreateSubnet =
+  res
+    "CreateSubnetResponse"
+    "fixture/CreateSubnetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSubnet)
+
+responseCreateSubnetCidrReservation :: CreateSubnetCidrReservationResponse -> TestTree
+responseCreateSubnetCidrReservation =
+  res
+    "CreateSubnetCidrReservationResponse"
+    "fixture/CreateSubnetCidrReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateSubnetCidrReservation)
+
+responseCreateTags :: CreateTagsResponse -> TestTree
+responseCreateTags =
+  res
+    "CreateTagsResponse"
+    "fixture/CreateTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTags)
+
+responseCreateTrafficMirrorFilter :: CreateTrafficMirrorFilterResponse -> TestTree
+responseCreateTrafficMirrorFilter =
+  res
+    "CreateTrafficMirrorFilterResponse"
+    "fixture/CreateTrafficMirrorFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTrafficMirrorFilter)
+
+responseCreateTrafficMirrorFilterRule :: CreateTrafficMirrorFilterRuleResponse -> TestTree
+responseCreateTrafficMirrorFilterRule =
+  res
+    "CreateTrafficMirrorFilterRuleResponse"
+    "fixture/CreateTrafficMirrorFilterRuleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTrafficMirrorFilterRule)
+
+responseCreateTrafficMirrorSession :: CreateTrafficMirrorSessionResponse -> TestTree
+responseCreateTrafficMirrorSession =
+  res
+    "CreateTrafficMirrorSessionResponse"
+    "fixture/CreateTrafficMirrorSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTrafficMirrorSession)
+
+responseCreateTrafficMirrorTarget :: CreateTrafficMirrorTargetResponse -> TestTree
+responseCreateTrafficMirrorTarget =
+  res
+    "CreateTrafficMirrorTargetResponse"
+    "fixture/CreateTrafficMirrorTargetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTrafficMirrorTarget)
+
+responseCreateTransitGateway :: CreateTransitGatewayResponse -> TestTree
+responseCreateTransitGateway =
+  res
+    "CreateTransitGatewayResponse"
+    "fixture/CreateTransitGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGateway)
+
+responseCreateTransitGatewayConnect :: CreateTransitGatewayConnectResponse -> TestTree
+responseCreateTransitGatewayConnect =
+  res
+    "CreateTransitGatewayConnectResponse"
+    "fixture/CreateTransitGatewayConnectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayConnect)
+
+responseCreateTransitGatewayConnectPeer :: CreateTransitGatewayConnectPeerResponse -> TestTree
+responseCreateTransitGatewayConnectPeer =
+  res
+    "CreateTransitGatewayConnectPeerResponse"
+    "fixture/CreateTransitGatewayConnectPeerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayConnectPeer)
+
+responseCreateTransitGatewayMulticastDomain :: CreateTransitGatewayMulticastDomainResponse -> TestTree
+responseCreateTransitGatewayMulticastDomain =
+  res
+    "CreateTransitGatewayMulticastDomainResponse"
+    "fixture/CreateTransitGatewayMulticastDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayMulticastDomain)
+
+responseCreateTransitGatewayPeeringAttachment :: CreateTransitGatewayPeeringAttachmentResponse -> TestTree
+responseCreateTransitGatewayPeeringAttachment =
+  res
+    "CreateTransitGatewayPeeringAttachmentResponse"
+    "fixture/CreateTransitGatewayPeeringAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayPeeringAttachment)
+
+responseCreateTransitGatewayPolicyTable :: CreateTransitGatewayPolicyTableResponse -> TestTree
+responseCreateTransitGatewayPolicyTable =
+  res
+    "CreateTransitGatewayPolicyTableResponse"
+    "fixture/CreateTransitGatewayPolicyTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayPolicyTable)
+
+responseCreateTransitGatewayPrefixListReference :: CreateTransitGatewayPrefixListReferenceResponse -> TestTree
+responseCreateTransitGatewayPrefixListReference =
+  res
+    "CreateTransitGatewayPrefixListReferenceResponse"
+    "fixture/CreateTransitGatewayPrefixListReferenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayPrefixListReference)
+
+responseCreateTransitGatewayRoute :: CreateTransitGatewayRouteResponse -> TestTree
+responseCreateTransitGatewayRoute =
+  res
+    "CreateTransitGatewayRouteResponse"
+    "fixture/CreateTransitGatewayRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayRoute)
+
+responseCreateTransitGatewayRouteTable :: CreateTransitGatewayRouteTableResponse -> TestTree
+responseCreateTransitGatewayRouteTable =
+  res
+    "CreateTransitGatewayRouteTableResponse"
+    "fixture/CreateTransitGatewayRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayRouteTable)
+
+responseCreateTransitGatewayRouteTableAnnouncement :: CreateTransitGatewayRouteTableAnnouncementResponse -> TestTree
+responseCreateTransitGatewayRouteTableAnnouncement =
+  res
+    "CreateTransitGatewayRouteTableAnnouncementResponse"
+    "fixture/CreateTransitGatewayRouteTableAnnouncementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayRouteTableAnnouncement)
+
+responseCreateTransitGatewayVpcAttachment :: CreateTransitGatewayVpcAttachmentResponse -> TestTree
+responseCreateTransitGatewayVpcAttachment =
+  res
+    "CreateTransitGatewayVpcAttachmentResponse"
+    "fixture/CreateTransitGatewayVpcAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTransitGatewayVpcAttachment)
+
+responseCreateVerifiedAccessEndpoint :: CreateVerifiedAccessEndpointResponse -> TestTree
+responseCreateVerifiedAccessEndpoint =
+  res
+    "CreateVerifiedAccessEndpointResponse"
+    "fixture/CreateVerifiedAccessEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVerifiedAccessEndpoint)
+
+responseCreateVerifiedAccessGroup :: CreateVerifiedAccessGroupResponse -> TestTree
+responseCreateVerifiedAccessGroup =
+  res
+    "CreateVerifiedAccessGroupResponse"
+    "fixture/CreateVerifiedAccessGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVerifiedAccessGroup)
+
+responseCreateVerifiedAccessInstance :: CreateVerifiedAccessInstanceResponse -> TestTree
+responseCreateVerifiedAccessInstance =
+  res
+    "CreateVerifiedAccessInstanceResponse"
+    "fixture/CreateVerifiedAccessInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVerifiedAccessInstance)
+
+responseCreateVerifiedAccessTrustProvider :: CreateVerifiedAccessTrustProviderResponse -> TestTree
+responseCreateVerifiedAccessTrustProvider =
+  res
+    "CreateVerifiedAccessTrustProviderResponse"
+    "fixture/CreateVerifiedAccessTrustProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVerifiedAccessTrustProvider)
+
+responseCreateVolume :: Volume -> TestTree
+responseCreateVolume =
+  res
+    "CreateVolumeResponse"
+    "fixture/CreateVolumeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVolume)
+
+responseCreateVpc :: CreateVpcResponse -> TestTree
+responseCreateVpc =
+  res
+    "CreateVpcResponse"
+    "fixture/CreateVpcResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpc)
+
+responseCreateVpcEndpoint :: CreateVpcEndpointResponse -> TestTree
+responseCreateVpcEndpoint =
+  res
+    "CreateVpcEndpointResponse"
+    "fixture/CreateVpcEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcEndpoint)
+
+responseCreateVpcEndpointConnectionNotification :: CreateVpcEndpointConnectionNotificationResponse -> TestTree
+responseCreateVpcEndpointConnectionNotification =
+  res
+    "CreateVpcEndpointConnectionNotificationResponse"
+    "fixture/CreateVpcEndpointConnectionNotificationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcEndpointConnectionNotification)
+
+responseCreateVpcEndpointServiceConfiguration :: CreateVpcEndpointServiceConfigurationResponse -> TestTree
+responseCreateVpcEndpointServiceConfiguration =
+  res
+    "CreateVpcEndpointServiceConfigurationResponse"
+    "fixture/CreateVpcEndpointServiceConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcEndpointServiceConfiguration)
+
+responseCreateVpcPeeringConnection :: CreateVpcPeeringConnectionResponse -> TestTree
+responseCreateVpcPeeringConnection =
+  res
+    "CreateVpcPeeringConnectionResponse"
+    "fixture/CreateVpcPeeringConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpcPeeringConnection)
+
+responseCreateVpnConnection :: CreateVpnConnectionResponse -> TestTree
+responseCreateVpnConnection =
+  res
+    "CreateVpnConnectionResponse"
+    "fixture/CreateVpnConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpnConnection)
+
+responseCreateVpnConnectionRoute :: CreateVpnConnectionRouteResponse -> TestTree
+responseCreateVpnConnectionRoute =
+  res
+    "CreateVpnConnectionRouteResponse"
+    "fixture/CreateVpnConnectionRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpnConnectionRoute)
+
+responseCreateVpnGateway :: CreateVpnGatewayResponse -> TestTree
+responseCreateVpnGateway =
+  res
+    "CreateVpnGatewayResponse"
+    "fixture/CreateVpnGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateVpnGateway)
+
+responseDeleteCarrierGateway :: DeleteCarrierGatewayResponse -> TestTree
+responseDeleteCarrierGateway =
+  res
+    "DeleteCarrierGatewayResponse"
+    "fixture/DeleteCarrierGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCarrierGateway)
+
+responseDeleteClientVpnEndpoint :: DeleteClientVpnEndpointResponse -> TestTree
+responseDeleteClientVpnEndpoint =
+  res
+    "DeleteClientVpnEndpointResponse"
+    "fixture/DeleteClientVpnEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteClientVpnEndpoint)
+
+responseDeleteClientVpnRoute :: DeleteClientVpnRouteResponse -> TestTree
+responseDeleteClientVpnRoute =
+  res
+    "DeleteClientVpnRouteResponse"
+    "fixture/DeleteClientVpnRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteClientVpnRoute)
+
+responseDeleteCoipCidr :: DeleteCoipCidrResponse -> TestTree
+responseDeleteCoipCidr =
+  res
+    "DeleteCoipCidrResponse"
+    "fixture/DeleteCoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCoipCidr)
+
+responseDeleteCoipPool :: DeleteCoipPoolResponse -> TestTree
+responseDeleteCoipPool =
+  res
+    "DeleteCoipPoolResponse"
+    "fixture/DeleteCoipPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCoipPool)
+
+responseDeleteCustomerGateway :: DeleteCustomerGatewayResponse -> TestTree
+responseDeleteCustomerGateway =
+  res
+    "DeleteCustomerGatewayResponse"
+    "fixture/DeleteCustomerGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteCustomerGateway)
+
+responseDeleteDhcpOptions :: DeleteDhcpOptionsResponse -> TestTree
+responseDeleteDhcpOptions =
+  res
+    "DeleteDhcpOptionsResponse"
+    "fixture/DeleteDhcpOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDhcpOptions)
+
+responseDeleteEgressOnlyInternetGateway :: DeleteEgressOnlyInternetGatewayResponse -> TestTree
+responseDeleteEgressOnlyInternetGateway =
+  res
+    "DeleteEgressOnlyInternetGatewayResponse"
+    "fixture/DeleteEgressOnlyInternetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEgressOnlyInternetGateway)
+
+responseDeleteFleets :: DeleteFleetsResponse -> TestTree
+responseDeleteFleets =
+  res
+    "DeleteFleetsResponse"
+    "fixture/DeleteFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFleets)
+
+responseDeleteFlowLogs :: DeleteFlowLogsResponse -> TestTree
+responseDeleteFlowLogs =
+  res
+    "DeleteFlowLogsResponse"
+    "fixture/DeleteFlowLogsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFlowLogs)
+
+responseDeleteFpgaImage :: DeleteFpgaImageResponse -> TestTree
+responseDeleteFpgaImage =
+  res
+    "DeleteFpgaImageResponse"
+    "fixture/DeleteFpgaImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFpgaImage)
+
+responseDeleteInstanceEventWindow :: DeleteInstanceEventWindowResponse -> TestTree
+responseDeleteInstanceEventWindow =
+  res
+    "DeleteInstanceEventWindowResponse"
+    "fixture/DeleteInstanceEventWindowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInstanceEventWindow)
+
+responseDeleteInternetGateway :: DeleteInternetGatewayResponse -> TestTree
+responseDeleteInternetGateway =
+  res
+    "DeleteInternetGatewayResponse"
+    "fixture/DeleteInternetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteInternetGateway)
+
+responseDeleteIpam :: DeleteIpamResponse -> TestTree
+responseDeleteIpam =
+  res
+    "DeleteIpamResponse"
+    "fixture/DeleteIpamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIpam)
+
+responseDeleteIpamPool :: DeleteIpamPoolResponse -> TestTree
+responseDeleteIpamPool =
+  res
+    "DeleteIpamPoolResponse"
+    "fixture/DeleteIpamPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIpamPool)
+
+responseDeleteIpamScope :: DeleteIpamScopeResponse -> TestTree
+responseDeleteIpamScope =
+  res
+    "DeleteIpamScopeResponse"
+    "fixture/DeleteIpamScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteIpamScope)
+
+responseDeleteKeyPair :: DeleteKeyPairResponse -> TestTree
+responseDeleteKeyPair =
+  res
+    "DeleteKeyPairResponse"
+    "fixture/DeleteKeyPairResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteKeyPair)
+
+responseDeleteLaunchTemplate :: DeleteLaunchTemplateResponse -> TestTree
+responseDeleteLaunchTemplate =
+  res
+    "DeleteLaunchTemplateResponse"
+    "fixture/DeleteLaunchTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLaunchTemplate)
+
+responseDeleteLaunchTemplateVersions :: DeleteLaunchTemplateVersionsResponse -> TestTree
+responseDeleteLaunchTemplateVersions =
+  res
+    "DeleteLaunchTemplateVersionsResponse"
+    "fixture/DeleteLaunchTemplateVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLaunchTemplateVersions)
+
+responseDeleteLocalGatewayRoute :: DeleteLocalGatewayRouteResponse -> TestTree
+responseDeleteLocalGatewayRoute =
+  res
+    "DeleteLocalGatewayRouteResponse"
+    "fixture/DeleteLocalGatewayRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLocalGatewayRoute)
+
+responseDeleteLocalGatewayRouteTable :: DeleteLocalGatewayRouteTableResponse -> TestTree
+responseDeleteLocalGatewayRouteTable =
+  res
+    "DeleteLocalGatewayRouteTableResponse"
+    "fixture/DeleteLocalGatewayRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLocalGatewayRouteTable)
+
+responseDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation :: DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse -> TestTree
+responseDeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation =
+  res
+    "DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse"
+    "fixture/DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation)
+
+responseDeleteLocalGatewayRouteTableVpcAssociation :: DeleteLocalGatewayRouteTableVpcAssociationResponse -> TestTree
+responseDeleteLocalGatewayRouteTableVpcAssociation =
+  res
+    "DeleteLocalGatewayRouteTableVpcAssociationResponse"
+    "fixture/DeleteLocalGatewayRouteTableVpcAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteLocalGatewayRouteTableVpcAssociation)
+
+responseDeleteManagedPrefixList :: DeleteManagedPrefixListResponse -> TestTree
+responseDeleteManagedPrefixList =
+  res
+    "DeleteManagedPrefixListResponse"
+    "fixture/DeleteManagedPrefixListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteManagedPrefixList)
+
+responseDeleteNatGateway :: DeleteNatGatewayResponse -> TestTree
+responseDeleteNatGateway =
+  res
+    "DeleteNatGatewayResponse"
+    "fixture/DeleteNatGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNatGateway)
+
+responseDeleteNetworkAcl :: DeleteNetworkAclResponse -> TestTree
+responseDeleteNetworkAcl =
+  res
+    "DeleteNetworkAclResponse"
+    "fixture/DeleteNetworkAclResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkAcl)
+
+responseDeleteNetworkAclEntry :: DeleteNetworkAclEntryResponse -> TestTree
+responseDeleteNetworkAclEntry =
+  res
+    "DeleteNetworkAclEntryResponse"
+    "fixture/DeleteNetworkAclEntryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkAclEntry)
+
+responseDeleteNetworkInsightsAccessScope :: DeleteNetworkInsightsAccessScopeResponse -> TestTree
+responseDeleteNetworkInsightsAccessScope =
+  res
+    "DeleteNetworkInsightsAccessScopeResponse"
+    "fixture/DeleteNetworkInsightsAccessScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkInsightsAccessScope)
+
+responseDeleteNetworkInsightsAccessScopeAnalysis :: DeleteNetworkInsightsAccessScopeAnalysisResponse -> TestTree
+responseDeleteNetworkInsightsAccessScopeAnalysis =
+  res
+    "DeleteNetworkInsightsAccessScopeAnalysisResponse"
+    "fixture/DeleteNetworkInsightsAccessScopeAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkInsightsAccessScopeAnalysis)
+
+responseDeleteNetworkInsightsAnalysis :: DeleteNetworkInsightsAnalysisResponse -> TestTree
+responseDeleteNetworkInsightsAnalysis =
+  res
+    "DeleteNetworkInsightsAnalysisResponse"
+    "fixture/DeleteNetworkInsightsAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkInsightsAnalysis)
+
+responseDeleteNetworkInsightsPath :: DeleteNetworkInsightsPathResponse -> TestTree
+responseDeleteNetworkInsightsPath =
+  res
+    "DeleteNetworkInsightsPathResponse"
+    "fixture/DeleteNetworkInsightsPathResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkInsightsPath)
+
+responseDeleteNetworkInterface :: DeleteNetworkInterfaceResponse -> TestTree
+responseDeleteNetworkInterface =
+  res
+    "DeleteNetworkInterfaceResponse"
+    "fixture/DeleteNetworkInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkInterface)
+
+responseDeleteNetworkInterfacePermission :: DeleteNetworkInterfacePermissionResponse -> TestTree
+responseDeleteNetworkInterfacePermission =
+  res
+    "DeleteNetworkInterfacePermissionResponse"
+    "fixture/DeleteNetworkInterfacePermissionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteNetworkInterfacePermission)
+
+responseDeletePlacementGroup :: DeletePlacementGroupResponse -> TestTree
+responseDeletePlacementGroup =
+  res
+    "DeletePlacementGroupResponse"
+    "fixture/DeletePlacementGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePlacementGroup)
+
+responseDeletePublicIpv4Pool :: DeletePublicIpv4PoolResponse -> TestTree
+responseDeletePublicIpv4Pool =
+  res
+    "DeletePublicIpv4PoolResponse"
+    "fixture/DeletePublicIpv4PoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeletePublicIpv4Pool)
+
+responseDeleteQueuedReservedInstances :: DeleteQueuedReservedInstancesResponse -> TestTree
+responseDeleteQueuedReservedInstances =
+  res
+    "DeleteQueuedReservedInstancesResponse"
+    "fixture/DeleteQueuedReservedInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteQueuedReservedInstances)
+
+responseDeleteRoute :: DeleteRouteResponse -> TestTree
+responseDeleteRoute =
+  res
+    "DeleteRouteResponse"
+    "fixture/DeleteRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRoute)
+
+responseDeleteRouteTable :: DeleteRouteTableResponse -> TestTree
+responseDeleteRouteTable =
+  res
+    "DeleteRouteTableResponse"
+    "fixture/DeleteRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteRouteTable)
+
+responseDeleteSecurityGroup :: DeleteSecurityGroupResponse -> TestTree
+responseDeleteSecurityGroup =
+  res
+    "DeleteSecurityGroupResponse"
+    "fixture/DeleteSecurityGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSecurityGroup)
+
+responseDeleteSnapshot :: DeleteSnapshotResponse -> TestTree
+responseDeleteSnapshot =
+  res
+    "DeleteSnapshotResponse"
+    "fixture/DeleteSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSnapshot)
+
+responseDeleteSpotDatafeedSubscription :: DeleteSpotDatafeedSubscriptionResponse -> TestTree
+responseDeleteSpotDatafeedSubscription =
+  res
+    "DeleteSpotDatafeedSubscriptionResponse"
+    "fixture/DeleteSpotDatafeedSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSpotDatafeedSubscription)
+
+responseDeleteSubnet :: DeleteSubnetResponse -> TestTree
+responseDeleteSubnet =
+  res
+    "DeleteSubnetResponse"
+    "fixture/DeleteSubnetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSubnet)
+
+responseDeleteSubnetCidrReservation :: DeleteSubnetCidrReservationResponse -> TestTree
+responseDeleteSubnetCidrReservation =
+  res
+    "DeleteSubnetCidrReservationResponse"
+    "fixture/DeleteSubnetCidrReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteSubnetCidrReservation)
+
+responseDeleteTags :: DeleteTagsResponse -> TestTree
+responseDeleteTags =
+  res
+    "DeleteTagsResponse"
+    "fixture/DeleteTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTags)
+
+responseDeleteTrafficMirrorFilter :: DeleteTrafficMirrorFilterResponse -> TestTree
+responseDeleteTrafficMirrorFilter =
+  res
+    "DeleteTrafficMirrorFilterResponse"
+    "fixture/DeleteTrafficMirrorFilterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTrafficMirrorFilter)
+
+responseDeleteTrafficMirrorFilterRule :: DeleteTrafficMirrorFilterRuleResponse -> TestTree
+responseDeleteTrafficMirrorFilterRule =
+  res
+    "DeleteTrafficMirrorFilterRuleResponse"
+    "fixture/DeleteTrafficMirrorFilterRuleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTrafficMirrorFilterRule)
+
+responseDeleteTrafficMirrorSession :: DeleteTrafficMirrorSessionResponse -> TestTree
+responseDeleteTrafficMirrorSession =
+  res
+    "DeleteTrafficMirrorSessionResponse"
+    "fixture/DeleteTrafficMirrorSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTrafficMirrorSession)
+
+responseDeleteTrafficMirrorTarget :: DeleteTrafficMirrorTargetResponse -> TestTree
+responseDeleteTrafficMirrorTarget =
+  res
+    "DeleteTrafficMirrorTargetResponse"
+    "fixture/DeleteTrafficMirrorTargetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTrafficMirrorTarget)
+
+responseDeleteTransitGateway :: DeleteTransitGatewayResponse -> TestTree
+responseDeleteTransitGateway =
+  res
+    "DeleteTransitGatewayResponse"
+    "fixture/DeleteTransitGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGateway)
+
+responseDeleteTransitGatewayConnect :: DeleteTransitGatewayConnectResponse -> TestTree
+responseDeleteTransitGatewayConnect =
+  res
+    "DeleteTransitGatewayConnectResponse"
+    "fixture/DeleteTransitGatewayConnectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayConnect)
+
+responseDeleteTransitGatewayConnectPeer :: DeleteTransitGatewayConnectPeerResponse -> TestTree
+responseDeleteTransitGatewayConnectPeer =
+  res
+    "DeleteTransitGatewayConnectPeerResponse"
+    "fixture/DeleteTransitGatewayConnectPeerResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayConnectPeer)
+
+responseDeleteTransitGatewayMulticastDomain :: DeleteTransitGatewayMulticastDomainResponse -> TestTree
+responseDeleteTransitGatewayMulticastDomain =
+  res
+    "DeleteTransitGatewayMulticastDomainResponse"
+    "fixture/DeleteTransitGatewayMulticastDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayMulticastDomain)
+
+responseDeleteTransitGatewayPeeringAttachment :: DeleteTransitGatewayPeeringAttachmentResponse -> TestTree
+responseDeleteTransitGatewayPeeringAttachment =
+  res
+    "DeleteTransitGatewayPeeringAttachmentResponse"
+    "fixture/DeleteTransitGatewayPeeringAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayPeeringAttachment)
+
+responseDeleteTransitGatewayPolicyTable :: DeleteTransitGatewayPolicyTableResponse -> TestTree
+responseDeleteTransitGatewayPolicyTable =
+  res
+    "DeleteTransitGatewayPolicyTableResponse"
+    "fixture/DeleteTransitGatewayPolicyTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayPolicyTable)
+
+responseDeleteTransitGatewayPrefixListReference :: DeleteTransitGatewayPrefixListReferenceResponse -> TestTree
+responseDeleteTransitGatewayPrefixListReference =
+  res
+    "DeleteTransitGatewayPrefixListReferenceResponse"
+    "fixture/DeleteTransitGatewayPrefixListReferenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayPrefixListReference)
+
+responseDeleteTransitGatewayRoute :: DeleteTransitGatewayRouteResponse -> TestTree
+responseDeleteTransitGatewayRoute =
+  res
+    "DeleteTransitGatewayRouteResponse"
+    "fixture/DeleteTransitGatewayRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayRoute)
+
+responseDeleteTransitGatewayRouteTable :: DeleteTransitGatewayRouteTableResponse -> TestTree
+responseDeleteTransitGatewayRouteTable =
+  res
+    "DeleteTransitGatewayRouteTableResponse"
+    "fixture/DeleteTransitGatewayRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayRouteTable)
+
+responseDeleteTransitGatewayRouteTableAnnouncement :: DeleteTransitGatewayRouteTableAnnouncementResponse -> TestTree
+responseDeleteTransitGatewayRouteTableAnnouncement =
+  res
+    "DeleteTransitGatewayRouteTableAnnouncementResponse"
+    "fixture/DeleteTransitGatewayRouteTableAnnouncementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayRouteTableAnnouncement)
+
+responseDeleteTransitGatewayVpcAttachment :: DeleteTransitGatewayVpcAttachmentResponse -> TestTree
+responseDeleteTransitGatewayVpcAttachment =
+  res
+    "DeleteTransitGatewayVpcAttachmentResponse"
+    "fixture/DeleteTransitGatewayVpcAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTransitGatewayVpcAttachment)
+
+responseDeleteVerifiedAccessEndpoint :: DeleteVerifiedAccessEndpointResponse -> TestTree
+responseDeleteVerifiedAccessEndpoint =
+  res
+    "DeleteVerifiedAccessEndpointResponse"
+    "fixture/DeleteVerifiedAccessEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVerifiedAccessEndpoint)
+
+responseDeleteVerifiedAccessGroup :: DeleteVerifiedAccessGroupResponse -> TestTree
+responseDeleteVerifiedAccessGroup =
+  res
+    "DeleteVerifiedAccessGroupResponse"
+    "fixture/DeleteVerifiedAccessGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVerifiedAccessGroup)
+
+responseDeleteVerifiedAccessInstance :: DeleteVerifiedAccessInstanceResponse -> TestTree
+responseDeleteVerifiedAccessInstance =
+  res
+    "DeleteVerifiedAccessInstanceResponse"
+    "fixture/DeleteVerifiedAccessInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVerifiedAccessInstance)
+
+responseDeleteVerifiedAccessTrustProvider :: DeleteVerifiedAccessTrustProviderResponse -> TestTree
+responseDeleteVerifiedAccessTrustProvider =
+  res
+    "DeleteVerifiedAccessTrustProviderResponse"
+    "fixture/DeleteVerifiedAccessTrustProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVerifiedAccessTrustProvider)
+
+responseDeleteVolume :: DeleteVolumeResponse -> TestTree
+responseDeleteVolume =
+  res
+    "DeleteVolumeResponse"
+    "fixture/DeleteVolumeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVolume)
+
+responseDeleteVpc :: DeleteVpcResponse -> TestTree
+responseDeleteVpc =
+  res
+    "DeleteVpcResponse"
+    "fixture/DeleteVpcResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpc)
+
+responseDeleteVpcEndpointConnectionNotifications :: DeleteVpcEndpointConnectionNotificationsResponse -> TestTree
+responseDeleteVpcEndpointConnectionNotifications =
+  res
+    "DeleteVpcEndpointConnectionNotificationsResponse"
+    "fixture/DeleteVpcEndpointConnectionNotificationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcEndpointConnectionNotifications)
+
+responseDeleteVpcEndpointServiceConfigurations :: DeleteVpcEndpointServiceConfigurationsResponse -> TestTree
+responseDeleteVpcEndpointServiceConfigurations =
+  res
+    "DeleteVpcEndpointServiceConfigurationsResponse"
+    "fixture/DeleteVpcEndpointServiceConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcEndpointServiceConfigurations)
+
+responseDeleteVpcEndpoints :: DeleteVpcEndpointsResponse -> TestTree
+responseDeleteVpcEndpoints =
+  res
+    "DeleteVpcEndpointsResponse"
+    "fixture/DeleteVpcEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcEndpoints)
+
+responseDeleteVpcPeeringConnection :: DeleteVpcPeeringConnectionResponse -> TestTree
+responseDeleteVpcPeeringConnection =
+  res
+    "DeleteVpcPeeringConnectionResponse"
+    "fixture/DeleteVpcPeeringConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpcPeeringConnection)
+
+responseDeleteVpnConnection :: DeleteVpnConnectionResponse -> TestTree
+responseDeleteVpnConnection =
+  res
+    "DeleteVpnConnectionResponse"
+    "fixture/DeleteVpnConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpnConnection)
+
+responseDeleteVpnConnectionRoute :: DeleteVpnConnectionRouteResponse -> TestTree
+responseDeleteVpnConnectionRoute =
+  res
+    "DeleteVpnConnectionRouteResponse"
+    "fixture/DeleteVpnConnectionRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpnConnectionRoute)
+
+responseDeleteVpnGateway :: DeleteVpnGatewayResponse -> TestTree
+responseDeleteVpnGateway =
+  res
+    "DeleteVpnGatewayResponse"
+    "fixture/DeleteVpnGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteVpnGateway)
+
+responseDeprovisionByoipCidr :: DeprovisionByoipCidrResponse -> TestTree
+responseDeprovisionByoipCidr =
+  res
+    "DeprovisionByoipCidrResponse"
+    "fixture/DeprovisionByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeprovisionByoipCidr)
+
+responseDeprovisionIpamPoolCidr :: DeprovisionIpamPoolCidrResponse -> TestTree
+responseDeprovisionIpamPoolCidr =
+  res
+    "DeprovisionIpamPoolCidrResponse"
+    "fixture/DeprovisionIpamPoolCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeprovisionIpamPoolCidr)
+
+responseDeprovisionPublicIpv4PoolCidr :: DeprovisionPublicIpv4PoolCidrResponse -> TestTree
+responseDeprovisionPublicIpv4PoolCidr =
+  res
+    "DeprovisionPublicIpv4PoolCidrResponse"
+    "fixture/DeprovisionPublicIpv4PoolCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeprovisionPublicIpv4PoolCidr)
+
+responseDeregisterImage :: DeregisterImageResponse -> TestTree
+responseDeregisterImage =
+  res
+    "DeregisterImageResponse"
+    "fixture/DeregisterImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterImage)
+
+responseDeregisterInstanceEventNotificationAttributes :: DeregisterInstanceEventNotificationAttributesResponse -> TestTree
+responseDeregisterInstanceEventNotificationAttributes =
+  res
+    "DeregisterInstanceEventNotificationAttributesResponse"
+    "fixture/DeregisterInstanceEventNotificationAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterInstanceEventNotificationAttributes)
+
+responseDeregisterTransitGatewayMulticastGroupMembers :: DeregisterTransitGatewayMulticastGroupMembersResponse -> TestTree
+responseDeregisterTransitGatewayMulticastGroupMembers =
+  res
+    "DeregisterTransitGatewayMulticastGroupMembersResponse"
+    "fixture/DeregisterTransitGatewayMulticastGroupMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterTransitGatewayMulticastGroupMembers)
+
+responseDeregisterTransitGatewayMulticastGroupSources :: DeregisterTransitGatewayMulticastGroupSourcesResponse -> TestTree
+responseDeregisterTransitGatewayMulticastGroupSources =
+  res
+    "DeregisterTransitGatewayMulticastGroupSourcesResponse"
+    "fixture/DeregisterTransitGatewayMulticastGroupSourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeregisterTransitGatewayMulticastGroupSources)
+
+responseDescribeAccountAttributes :: DescribeAccountAttributesResponse -> TestTree
+responseDescribeAccountAttributes =
+  res
+    "DescribeAccountAttributesResponse"
+    "fixture/DescribeAccountAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAccountAttributes)
+
+responseDescribeAddressTransfers :: DescribeAddressTransfersResponse -> TestTree
+responseDescribeAddressTransfers =
+  res
+    "DescribeAddressTransfersResponse"
+    "fixture/DescribeAddressTransfersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddressTransfers)
+
+responseDescribeAddresses :: DescribeAddressesResponse -> TestTree
+responseDescribeAddresses =
+  res
+    "DescribeAddressesResponse"
+    "fixture/DescribeAddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddresses)
+
+responseDescribeAddressesAttribute :: DescribeAddressesAttributeResponse -> TestTree
+responseDescribeAddressesAttribute =
+  res
+    "DescribeAddressesAttributeResponse"
+    "fixture/DescribeAddressesAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddressesAttribute)
+
+responseDescribeAggregateIdFormat :: DescribeAggregateIdFormatResponse -> TestTree
+responseDescribeAggregateIdFormat =
+  res
+    "DescribeAggregateIdFormatResponse"
+    "fixture/DescribeAggregateIdFormatResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAggregateIdFormat)
+
+responseDescribeAvailabilityZones :: DescribeAvailabilityZonesResponse -> TestTree
+responseDescribeAvailabilityZones =
+  res
+    "DescribeAvailabilityZonesResponse"
+    "fixture/DescribeAvailabilityZonesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAvailabilityZones)
+
+responseDescribeAwsNetworkPerformanceMetricSubscriptions :: DescribeAwsNetworkPerformanceMetricSubscriptionsResponse -> TestTree
+responseDescribeAwsNetworkPerformanceMetricSubscriptions =
+  res
+    "DescribeAwsNetworkPerformanceMetricSubscriptionsResponse"
+    "fixture/DescribeAwsNetworkPerformanceMetricSubscriptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAwsNetworkPerformanceMetricSubscriptions)
+
+responseDescribeBundleTasks :: DescribeBundleTasksResponse -> TestTree
+responseDescribeBundleTasks =
+  res
+    "DescribeBundleTasksResponse"
+    "fixture/DescribeBundleTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeBundleTasks)
+
+responseDescribeByoipCidrs :: DescribeByoipCidrsResponse -> TestTree
+responseDescribeByoipCidrs =
+  res
+    "DescribeByoipCidrsResponse"
+    "fixture/DescribeByoipCidrsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeByoipCidrs)
+
+responseDescribeCapacityReservationFleets :: DescribeCapacityReservationFleetsResponse -> TestTree
+responseDescribeCapacityReservationFleets =
+  res
+    "DescribeCapacityReservationFleetsResponse"
+    "fixture/DescribeCapacityReservationFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCapacityReservationFleets)
+
+responseDescribeCapacityReservations :: DescribeCapacityReservationsResponse -> TestTree
+responseDescribeCapacityReservations =
+  res
+    "DescribeCapacityReservationsResponse"
+    "fixture/DescribeCapacityReservationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCapacityReservations)
+
+responseDescribeCarrierGateways :: DescribeCarrierGatewaysResponse -> TestTree
+responseDescribeCarrierGateways =
+  res
+    "DescribeCarrierGatewaysResponse"
+    "fixture/DescribeCarrierGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCarrierGateways)
+
+responseDescribeClassicLinkInstances :: DescribeClassicLinkInstancesResponse -> TestTree
+responseDescribeClassicLinkInstances =
+  res
+    "DescribeClassicLinkInstancesResponse"
+    "fixture/DescribeClassicLinkInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClassicLinkInstances)
+
+responseDescribeClientVpnAuthorizationRules :: DescribeClientVpnAuthorizationRulesResponse -> TestTree
+responseDescribeClientVpnAuthorizationRules =
+  res
+    "DescribeClientVpnAuthorizationRulesResponse"
+    "fixture/DescribeClientVpnAuthorizationRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientVpnAuthorizationRules)
+
+responseDescribeClientVpnConnections :: DescribeClientVpnConnectionsResponse -> TestTree
+responseDescribeClientVpnConnections =
+  res
+    "DescribeClientVpnConnectionsResponse"
+    "fixture/DescribeClientVpnConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientVpnConnections)
+
+responseDescribeClientVpnEndpoints :: DescribeClientVpnEndpointsResponse -> TestTree
+responseDescribeClientVpnEndpoints =
+  res
+    "DescribeClientVpnEndpointsResponse"
+    "fixture/DescribeClientVpnEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientVpnEndpoints)
+
+responseDescribeClientVpnRoutes :: DescribeClientVpnRoutesResponse -> TestTree
+responseDescribeClientVpnRoutes =
+  res
+    "DescribeClientVpnRoutesResponse"
+    "fixture/DescribeClientVpnRoutesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientVpnRoutes)
+
+responseDescribeClientVpnTargetNetworks :: DescribeClientVpnTargetNetworksResponse -> TestTree
+responseDescribeClientVpnTargetNetworks =
+  res
+    "DescribeClientVpnTargetNetworksResponse"
+    "fixture/DescribeClientVpnTargetNetworksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeClientVpnTargetNetworks)
+
+responseDescribeCoipPools :: DescribeCoipPoolsResponse -> TestTree
+responseDescribeCoipPools =
+  res
+    "DescribeCoipPoolsResponse"
+    "fixture/DescribeCoipPoolsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCoipPools)
+
+responseDescribeConversionTasks :: DescribeConversionTasksResponse -> TestTree
+responseDescribeConversionTasks =
+  res
+    "DescribeConversionTasksResponse"
+    "fixture/DescribeConversionTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeConversionTasks)
+
+responseDescribeCustomerGateways :: DescribeCustomerGatewaysResponse -> TestTree
+responseDescribeCustomerGateways =
+  res
+    "DescribeCustomerGatewaysResponse"
+    "fixture/DescribeCustomerGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCustomerGateways)
+
+responseDescribeDhcpOptions :: DescribeDhcpOptionsResponse -> TestTree
+responseDescribeDhcpOptions =
+  res
+    "DescribeDhcpOptionsResponse"
+    "fixture/DescribeDhcpOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDhcpOptions)
+
+responseDescribeEgressOnlyInternetGateways :: DescribeEgressOnlyInternetGatewaysResponse -> TestTree
+responseDescribeEgressOnlyInternetGateways =
+  res
+    "DescribeEgressOnlyInternetGatewaysResponse"
+    "fixture/DescribeEgressOnlyInternetGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEgressOnlyInternetGateways)
+
+responseDescribeElasticGpus :: DescribeElasticGpusResponse -> TestTree
+responseDescribeElasticGpus =
+  res
+    "DescribeElasticGpusResponse"
+    "fixture/DescribeElasticGpusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeElasticGpus)
+
+responseDescribeExportImageTasks :: DescribeExportImageTasksResponse -> TestTree
+responseDescribeExportImageTasks =
+  res
+    "DescribeExportImageTasksResponse"
+    "fixture/DescribeExportImageTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExportImageTasks)
+
+responseDescribeExportTasks :: DescribeExportTasksResponse -> TestTree
+responseDescribeExportTasks =
+  res
+    "DescribeExportTasksResponse"
+    "fixture/DescribeExportTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeExportTasks)
+
+responseDescribeFastLaunchImages :: DescribeFastLaunchImagesResponse -> TestTree
+responseDescribeFastLaunchImages =
+  res
+    "DescribeFastLaunchImagesResponse"
+    "fixture/DescribeFastLaunchImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFastLaunchImages)
+
+responseDescribeFastSnapshotRestores :: DescribeFastSnapshotRestoresResponse -> TestTree
+responseDescribeFastSnapshotRestores =
+  res
+    "DescribeFastSnapshotRestoresResponse"
+    "fixture/DescribeFastSnapshotRestoresResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFastSnapshotRestores)
+
+responseDescribeFleetHistory :: DescribeFleetHistoryResponse -> TestTree
+responseDescribeFleetHistory =
+  res
+    "DescribeFleetHistoryResponse"
+    "fixture/DescribeFleetHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFleetHistory)
+
+responseDescribeFleetInstances :: DescribeFleetInstancesResponse -> TestTree
+responseDescribeFleetInstances =
+  res
+    "DescribeFleetInstancesResponse"
+    "fixture/DescribeFleetInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFleetInstances)
+
+responseDescribeFleets :: DescribeFleetsResponse -> TestTree
+responseDescribeFleets =
+  res
+    "DescribeFleetsResponse"
+    "fixture/DescribeFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFleets)
+
+responseDescribeFlowLogs :: DescribeFlowLogsResponse -> TestTree
+responseDescribeFlowLogs =
+  res
+    "DescribeFlowLogsResponse"
+    "fixture/DescribeFlowLogsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFlowLogs)
+
+responseDescribeFpgaImageAttribute :: DescribeFpgaImageAttributeResponse -> TestTree
+responseDescribeFpgaImageAttribute =
+  res
+    "DescribeFpgaImageAttributeResponse"
+    "fixture/DescribeFpgaImageAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFpgaImageAttribute)
+
+responseDescribeFpgaImages :: DescribeFpgaImagesResponse -> TestTree
+responseDescribeFpgaImages =
+  res
+    "DescribeFpgaImagesResponse"
+    "fixture/DescribeFpgaImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFpgaImages)
+
+responseDescribeHostReservationOfferings :: DescribeHostReservationOfferingsResponse -> TestTree
+responseDescribeHostReservationOfferings =
+  res
+    "DescribeHostReservationOfferingsResponse"
+    "fixture/DescribeHostReservationOfferingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeHostReservationOfferings)
+
+responseDescribeHostReservations :: DescribeHostReservationsResponse -> TestTree
+responseDescribeHostReservations =
+  res
+    "DescribeHostReservationsResponse"
+    "fixture/DescribeHostReservationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeHostReservations)
+
+responseDescribeHosts :: DescribeHostsResponse -> TestTree
+responseDescribeHosts =
+  res
+    "DescribeHostsResponse"
+    "fixture/DescribeHostsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeHosts)
+
+responseDescribeIamInstanceProfileAssociations :: DescribeIamInstanceProfileAssociationsResponse -> TestTree
+responseDescribeIamInstanceProfileAssociations =
+  res
+    "DescribeIamInstanceProfileAssociationsResponse"
+    "fixture/DescribeIamInstanceProfileAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIamInstanceProfileAssociations)
+
+responseDescribeIdFormat :: DescribeIdFormatResponse -> TestTree
+responseDescribeIdFormat =
+  res
+    "DescribeIdFormatResponse"
+    "fixture/DescribeIdFormatResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIdFormat)
+
+responseDescribeIdentityIdFormat :: DescribeIdentityIdFormatResponse -> TestTree
+responseDescribeIdentityIdFormat =
+  res
+    "DescribeIdentityIdFormatResponse"
+    "fixture/DescribeIdentityIdFormatResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIdentityIdFormat)
+
+responseDescribeImageAttribute :: DescribeImageAttributeResponse -> TestTree
+responseDescribeImageAttribute =
+  res
+    "DescribeImageAttributeResponse"
+    "fixture/DescribeImageAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImageAttribute)
+
+responseDescribeImages :: DescribeImagesResponse -> TestTree
+responseDescribeImages =
+  res
+    "DescribeImagesResponse"
+    "fixture/DescribeImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImages)
+
+responseDescribeImportImageTasks :: DescribeImportImageTasksResponse -> TestTree
+responseDescribeImportImageTasks =
+  res
+    "DescribeImportImageTasksResponse"
+    "fixture/DescribeImportImageTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImportImageTasks)
+
+responseDescribeImportSnapshotTasks :: DescribeImportSnapshotTasksResponse -> TestTree
+responseDescribeImportSnapshotTasks =
+  res
+    "DescribeImportSnapshotTasksResponse"
+    "fixture/DescribeImportSnapshotTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImportSnapshotTasks)
+
+responseDescribeInstanceAttribute :: DescribeInstanceAttributeResponse -> TestTree
+responseDescribeInstanceAttribute =
+  res
+    "DescribeInstanceAttributeResponse"
+    "fixture/DescribeInstanceAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceAttribute)
+
+responseDescribeInstanceCreditSpecifications :: DescribeInstanceCreditSpecificationsResponse -> TestTree
+responseDescribeInstanceCreditSpecifications =
+  res
+    "DescribeInstanceCreditSpecificationsResponse"
+    "fixture/DescribeInstanceCreditSpecificationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceCreditSpecifications)
+
+responseDescribeInstanceEventNotificationAttributes :: DescribeInstanceEventNotificationAttributesResponse -> TestTree
+responseDescribeInstanceEventNotificationAttributes =
+  res
+    "DescribeInstanceEventNotificationAttributesResponse"
+    "fixture/DescribeInstanceEventNotificationAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceEventNotificationAttributes)
+
+responseDescribeInstanceEventWindows :: DescribeInstanceEventWindowsResponse -> TestTree
+responseDescribeInstanceEventWindows =
+  res
+    "DescribeInstanceEventWindowsResponse"
+    "fixture/DescribeInstanceEventWindowsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceEventWindows)
+
+responseDescribeInstanceStatus :: DescribeInstanceStatusResponse -> TestTree
+responseDescribeInstanceStatus =
+  res
+    "DescribeInstanceStatusResponse"
+    "fixture/DescribeInstanceStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceStatus)
+
+responseDescribeInstanceTypeOfferings :: DescribeInstanceTypeOfferingsResponse -> TestTree
+responseDescribeInstanceTypeOfferings =
+  res
+    "DescribeInstanceTypeOfferingsResponse"
+    "fixture/DescribeInstanceTypeOfferingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceTypeOfferings)
+
+responseDescribeInstanceTypes :: DescribeInstanceTypesResponse -> TestTree
+responseDescribeInstanceTypes =
+  res
+    "DescribeInstanceTypesResponse"
+    "fixture/DescribeInstanceTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstanceTypes)
+
+responseDescribeInstances :: DescribeInstancesResponse -> TestTree
+responseDescribeInstances =
+  res
+    "DescribeInstancesResponse"
+    "fixture/DescribeInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInstances)
+
+responseDescribeInternetGateways :: DescribeInternetGatewaysResponse -> TestTree
+responseDescribeInternetGateways =
+  res
+    "DescribeInternetGatewaysResponse"
+    "fixture/DescribeInternetGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeInternetGateways)
+
+responseDescribeIpamPools :: DescribeIpamPoolsResponse -> TestTree
+responseDescribeIpamPools =
+  res
+    "DescribeIpamPoolsResponse"
+    "fixture/DescribeIpamPoolsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIpamPools)
+
+responseDescribeIpamScopes :: DescribeIpamScopesResponse -> TestTree
+responseDescribeIpamScopes =
+  res
+    "DescribeIpamScopesResponse"
+    "fixture/DescribeIpamScopesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIpamScopes)
+
+responseDescribeIpams :: DescribeIpamsResponse -> TestTree
+responseDescribeIpams =
+  res
+    "DescribeIpamsResponse"
+    "fixture/DescribeIpamsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIpams)
+
+responseDescribeIpv6Pools :: DescribeIpv6PoolsResponse -> TestTree
+responseDescribeIpv6Pools =
+  res
+    "DescribeIpv6PoolsResponse"
+    "fixture/DescribeIpv6PoolsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeIpv6Pools)
+
+responseDescribeKeyPairs :: DescribeKeyPairsResponse -> TestTree
+responseDescribeKeyPairs =
+  res
+    "DescribeKeyPairsResponse"
+    "fixture/DescribeKeyPairsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeKeyPairs)
+
+responseDescribeLaunchTemplateVersions :: DescribeLaunchTemplateVersionsResponse -> TestTree
+responseDescribeLaunchTemplateVersions =
+  res
+    "DescribeLaunchTemplateVersionsResponse"
+    "fixture/DescribeLaunchTemplateVersionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLaunchTemplateVersions)
+
+responseDescribeLaunchTemplates :: DescribeLaunchTemplatesResponse -> TestTree
+responseDescribeLaunchTemplates =
+  res
+    "DescribeLaunchTemplatesResponse"
+    "fixture/DescribeLaunchTemplatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLaunchTemplates)
+
+responseDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations :: DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse -> TestTree
+responseDescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations =
+  res
+    "DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse"
+    "fixture/DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations)
+
+responseDescribeLocalGatewayRouteTableVpcAssociations :: DescribeLocalGatewayRouteTableVpcAssociationsResponse -> TestTree
+responseDescribeLocalGatewayRouteTableVpcAssociations =
+  res
+    "DescribeLocalGatewayRouteTableVpcAssociationsResponse"
+    "fixture/DescribeLocalGatewayRouteTableVpcAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocalGatewayRouteTableVpcAssociations)
+
+responseDescribeLocalGatewayRouteTables :: DescribeLocalGatewayRouteTablesResponse -> TestTree
+responseDescribeLocalGatewayRouteTables =
+  res
+    "DescribeLocalGatewayRouteTablesResponse"
+    "fixture/DescribeLocalGatewayRouteTablesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocalGatewayRouteTables)
+
+responseDescribeLocalGatewayVirtualInterfaceGroups :: DescribeLocalGatewayVirtualInterfaceGroupsResponse -> TestTree
+responseDescribeLocalGatewayVirtualInterfaceGroups =
+  res
+    "DescribeLocalGatewayVirtualInterfaceGroupsResponse"
+    "fixture/DescribeLocalGatewayVirtualInterfaceGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocalGatewayVirtualInterfaceGroups)
+
+responseDescribeLocalGatewayVirtualInterfaces :: DescribeLocalGatewayVirtualInterfacesResponse -> TestTree
+responseDescribeLocalGatewayVirtualInterfaces =
+  res
+    "DescribeLocalGatewayVirtualInterfacesResponse"
+    "fixture/DescribeLocalGatewayVirtualInterfacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocalGatewayVirtualInterfaces)
+
+responseDescribeLocalGateways :: DescribeLocalGatewaysResponse -> TestTree
+responseDescribeLocalGateways =
+  res
+    "DescribeLocalGatewaysResponse"
+    "fixture/DescribeLocalGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeLocalGateways)
+
+responseDescribeManagedPrefixLists :: DescribeManagedPrefixListsResponse -> TestTree
+responseDescribeManagedPrefixLists =
+  res
+    "DescribeManagedPrefixListsResponse"
+    "fixture/DescribeManagedPrefixListsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeManagedPrefixLists)
+
+responseDescribeMovingAddresses :: DescribeMovingAddressesResponse -> TestTree
+responseDescribeMovingAddresses =
+  res
+    "DescribeMovingAddressesResponse"
+    "fixture/DescribeMovingAddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeMovingAddresses)
+
+responseDescribeNatGateways :: DescribeNatGatewaysResponse -> TestTree
+responseDescribeNatGateways =
+  res
+    "DescribeNatGatewaysResponse"
+    "fixture/DescribeNatGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNatGateways)
+
+responseDescribeNetworkAcls :: DescribeNetworkAclsResponse -> TestTree
+responseDescribeNetworkAcls =
+  res
+    "DescribeNetworkAclsResponse"
+    "fixture/DescribeNetworkAclsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkAcls)
+
+responseDescribeNetworkInsightsAccessScopeAnalyses :: DescribeNetworkInsightsAccessScopeAnalysesResponse -> TestTree
+responseDescribeNetworkInsightsAccessScopeAnalyses =
+  res
+    "DescribeNetworkInsightsAccessScopeAnalysesResponse"
+    "fixture/DescribeNetworkInsightsAccessScopeAnalysesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInsightsAccessScopeAnalyses)
+
+responseDescribeNetworkInsightsAccessScopes :: DescribeNetworkInsightsAccessScopesResponse -> TestTree
+responseDescribeNetworkInsightsAccessScopes =
+  res
+    "DescribeNetworkInsightsAccessScopesResponse"
+    "fixture/DescribeNetworkInsightsAccessScopesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInsightsAccessScopes)
+
+responseDescribeNetworkInsightsAnalyses :: DescribeNetworkInsightsAnalysesResponse -> TestTree
+responseDescribeNetworkInsightsAnalyses =
+  res
+    "DescribeNetworkInsightsAnalysesResponse"
+    "fixture/DescribeNetworkInsightsAnalysesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInsightsAnalyses)
+
+responseDescribeNetworkInsightsPaths :: DescribeNetworkInsightsPathsResponse -> TestTree
+responseDescribeNetworkInsightsPaths =
+  res
+    "DescribeNetworkInsightsPathsResponse"
+    "fixture/DescribeNetworkInsightsPathsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInsightsPaths)
+
+responseDescribeNetworkInterfaceAttribute :: DescribeNetworkInterfaceAttributeResponse -> TestTree
+responseDescribeNetworkInterfaceAttribute =
+  res
+    "DescribeNetworkInterfaceAttributeResponse"
+    "fixture/DescribeNetworkInterfaceAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInterfaceAttribute)
+
+responseDescribeNetworkInterfacePermissions :: DescribeNetworkInterfacePermissionsResponse -> TestTree
+responseDescribeNetworkInterfacePermissions =
+  res
+    "DescribeNetworkInterfacePermissionsResponse"
+    "fixture/DescribeNetworkInterfacePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInterfacePermissions)
+
+responseDescribeNetworkInterfaces :: DescribeNetworkInterfacesResponse -> TestTree
+responseDescribeNetworkInterfaces =
+  res
+    "DescribeNetworkInterfacesResponse"
+    "fixture/DescribeNetworkInterfacesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeNetworkInterfaces)
+
+responseDescribePlacementGroups :: DescribePlacementGroupsResponse -> TestTree
+responseDescribePlacementGroups =
+  res
+    "DescribePlacementGroupsResponse"
+    "fixture/DescribePlacementGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePlacementGroups)
+
+responseDescribePrefixLists :: DescribePrefixListsResponse -> TestTree
+responseDescribePrefixLists =
+  res
+    "DescribePrefixListsResponse"
+    "fixture/DescribePrefixListsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePrefixLists)
+
+responseDescribePrincipalIdFormat :: DescribePrincipalIdFormatResponse -> TestTree
+responseDescribePrincipalIdFormat =
+  res
+    "DescribePrincipalIdFormatResponse"
+    "fixture/DescribePrincipalIdFormatResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePrincipalIdFormat)
+
+responseDescribePublicIpv4Pools :: DescribePublicIpv4PoolsResponse -> TestTree
+responseDescribePublicIpv4Pools =
+  res
+    "DescribePublicIpv4PoolsResponse"
+    "fixture/DescribePublicIpv4PoolsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribePublicIpv4Pools)
+
+responseDescribeRegions :: DescribeRegionsResponse -> TestTree
+responseDescribeRegions =
+  res
+    "DescribeRegionsResponse"
+    "fixture/DescribeRegionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRegions)
+
+responseDescribeReplaceRootVolumeTasks :: DescribeReplaceRootVolumeTasksResponse -> TestTree
+responseDescribeReplaceRootVolumeTasks =
+  res
+    "DescribeReplaceRootVolumeTasksResponse"
+    "fixture/DescribeReplaceRootVolumeTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReplaceRootVolumeTasks)
+
+responseDescribeReservedInstances :: DescribeReservedInstancesResponse -> TestTree
+responseDescribeReservedInstances =
+  res
+    "DescribeReservedInstancesResponse"
+    "fixture/DescribeReservedInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReservedInstances)
+
+responseDescribeReservedInstancesListings :: DescribeReservedInstancesListingsResponse -> TestTree
+responseDescribeReservedInstancesListings =
+  res
+    "DescribeReservedInstancesListingsResponse"
+    "fixture/DescribeReservedInstancesListingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReservedInstancesListings)
+
+responseDescribeReservedInstancesModifications :: DescribeReservedInstancesModificationsResponse -> TestTree
+responseDescribeReservedInstancesModifications =
+  res
+    "DescribeReservedInstancesModificationsResponse"
+    "fixture/DescribeReservedInstancesModificationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReservedInstancesModifications)
+
+responseDescribeReservedInstancesOfferings :: DescribeReservedInstancesOfferingsResponse -> TestTree
+responseDescribeReservedInstancesOfferings =
+  res
+    "DescribeReservedInstancesOfferingsResponse"
+    "fixture/DescribeReservedInstancesOfferingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReservedInstancesOfferings)
+
+responseDescribeRouteTables :: DescribeRouteTablesResponse -> TestTree
+responseDescribeRouteTables =
+  res
+    "DescribeRouteTablesResponse"
+    "fixture/DescribeRouteTablesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeRouteTables)
+
+responseDescribeScheduledInstanceAvailability :: DescribeScheduledInstanceAvailabilityResponse -> TestTree
+responseDescribeScheduledInstanceAvailability =
+  res
+    "DescribeScheduledInstanceAvailabilityResponse"
+    "fixture/DescribeScheduledInstanceAvailabilityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeScheduledInstanceAvailability)
+
+responseDescribeScheduledInstances :: DescribeScheduledInstancesResponse -> TestTree
+responseDescribeScheduledInstances =
+  res
+    "DescribeScheduledInstancesResponse"
+    "fixture/DescribeScheduledInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeScheduledInstances)
+
+responseDescribeSecurityGroupReferences :: DescribeSecurityGroupReferencesResponse -> TestTree
+responseDescribeSecurityGroupReferences =
+  res
+    "DescribeSecurityGroupReferencesResponse"
+    "fixture/DescribeSecurityGroupReferencesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSecurityGroupReferences)
+
+responseDescribeSecurityGroupRules :: DescribeSecurityGroupRulesResponse -> TestTree
+responseDescribeSecurityGroupRules =
+  res
+    "DescribeSecurityGroupRulesResponse"
+    "fixture/DescribeSecurityGroupRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSecurityGroupRules)
+
+responseDescribeSecurityGroups :: DescribeSecurityGroupsResponse -> TestTree
+responseDescribeSecurityGroups =
+  res
+    "DescribeSecurityGroupsResponse"
+    "fixture/DescribeSecurityGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSecurityGroups)
+
+responseDescribeSnapshotAttribute :: DescribeSnapshotAttributeResponse -> TestTree
+responseDescribeSnapshotAttribute =
+  res
+    "DescribeSnapshotAttributeResponse"
+    "fixture/DescribeSnapshotAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSnapshotAttribute)
+
+responseDescribeSnapshotTierStatus :: DescribeSnapshotTierStatusResponse -> TestTree
+responseDescribeSnapshotTierStatus =
+  res
+    "DescribeSnapshotTierStatusResponse"
+    "fixture/DescribeSnapshotTierStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSnapshotTierStatus)
+
+responseDescribeSnapshots :: DescribeSnapshotsResponse -> TestTree
+responseDescribeSnapshots =
+  res
+    "DescribeSnapshotsResponse"
+    "fixture/DescribeSnapshotsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSnapshots)
+
+responseDescribeSpotDatafeedSubscription :: DescribeSpotDatafeedSubscriptionResponse -> TestTree
+responseDescribeSpotDatafeedSubscription =
+  res
+    "DescribeSpotDatafeedSubscriptionResponse"
+    "fixture/DescribeSpotDatafeedSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSpotDatafeedSubscription)
+
+responseDescribeSpotFleetInstances :: DescribeSpotFleetInstancesResponse -> TestTree
+responseDescribeSpotFleetInstances =
+  res
+    "DescribeSpotFleetInstancesResponse"
+    "fixture/DescribeSpotFleetInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSpotFleetInstances)
+
+responseDescribeSpotFleetRequestHistory :: DescribeSpotFleetRequestHistoryResponse -> TestTree
+responseDescribeSpotFleetRequestHistory =
+  res
+    "DescribeSpotFleetRequestHistoryResponse"
+    "fixture/DescribeSpotFleetRequestHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSpotFleetRequestHistory)
+
+responseDescribeSpotFleetRequests :: DescribeSpotFleetRequestsResponse -> TestTree
+responseDescribeSpotFleetRequests =
+  res
+    "DescribeSpotFleetRequestsResponse"
+    "fixture/DescribeSpotFleetRequestsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSpotFleetRequests)
+
+responseDescribeSpotInstanceRequests :: DescribeSpotInstanceRequestsResponse -> TestTree
+responseDescribeSpotInstanceRequests =
+  res
+    "DescribeSpotInstanceRequestsResponse"
+    "fixture/DescribeSpotInstanceRequestsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSpotInstanceRequests)
+
+responseDescribeSpotPriceHistory :: DescribeSpotPriceHistoryResponse -> TestTree
+responseDescribeSpotPriceHistory =
+  res
+    "DescribeSpotPriceHistoryResponse"
+    "fixture/DescribeSpotPriceHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSpotPriceHistory)
+
+responseDescribeStaleSecurityGroups :: DescribeStaleSecurityGroupsResponse -> TestTree
+responseDescribeStaleSecurityGroups =
+  res
+    "DescribeStaleSecurityGroupsResponse"
+    "fixture/DescribeStaleSecurityGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeStaleSecurityGroups)
+
+responseDescribeStoreImageTasks :: DescribeStoreImageTasksResponse -> TestTree
+responseDescribeStoreImageTasks =
+  res
+    "DescribeStoreImageTasksResponse"
+    "fixture/DescribeStoreImageTasksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeStoreImageTasks)
+
+responseDescribeSubnets :: DescribeSubnetsResponse -> TestTree
+responseDescribeSubnets =
+  res
+    "DescribeSubnetsResponse"
+    "fixture/DescribeSubnetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSubnets)
+
+responseDescribeTags :: DescribeTagsResponse -> TestTree
+responseDescribeTags =
+  res
+    "DescribeTagsResponse"
+    "fixture/DescribeTagsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTags)
+
+responseDescribeTrafficMirrorFilters :: DescribeTrafficMirrorFiltersResponse -> TestTree
+responseDescribeTrafficMirrorFilters =
+  res
+    "DescribeTrafficMirrorFiltersResponse"
+    "fixture/DescribeTrafficMirrorFiltersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTrafficMirrorFilters)
+
+responseDescribeTrafficMirrorSessions :: DescribeTrafficMirrorSessionsResponse -> TestTree
+responseDescribeTrafficMirrorSessions =
+  res
+    "DescribeTrafficMirrorSessionsResponse"
+    "fixture/DescribeTrafficMirrorSessionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTrafficMirrorSessions)
+
+responseDescribeTrafficMirrorTargets :: DescribeTrafficMirrorTargetsResponse -> TestTree
+responseDescribeTrafficMirrorTargets =
+  res
+    "DescribeTrafficMirrorTargetsResponse"
+    "fixture/DescribeTrafficMirrorTargetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTrafficMirrorTargets)
+
+responseDescribeTransitGatewayAttachments :: DescribeTransitGatewayAttachmentsResponse -> TestTree
+responseDescribeTransitGatewayAttachments =
+  res
+    "DescribeTransitGatewayAttachmentsResponse"
+    "fixture/DescribeTransitGatewayAttachmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayAttachments)
+
+responseDescribeTransitGatewayConnectPeers :: DescribeTransitGatewayConnectPeersResponse -> TestTree
+responseDescribeTransitGatewayConnectPeers =
+  res
+    "DescribeTransitGatewayConnectPeersResponse"
+    "fixture/DescribeTransitGatewayConnectPeersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayConnectPeers)
+
+responseDescribeTransitGatewayConnects :: DescribeTransitGatewayConnectsResponse -> TestTree
+responseDescribeTransitGatewayConnects =
+  res
+    "DescribeTransitGatewayConnectsResponse"
+    "fixture/DescribeTransitGatewayConnectsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayConnects)
+
+responseDescribeTransitGatewayMulticastDomains :: DescribeTransitGatewayMulticastDomainsResponse -> TestTree
+responseDescribeTransitGatewayMulticastDomains =
+  res
+    "DescribeTransitGatewayMulticastDomainsResponse"
+    "fixture/DescribeTransitGatewayMulticastDomainsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayMulticastDomains)
+
+responseDescribeTransitGatewayPeeringAttachments :: DescribeTransitGatewayPeeringAttachmentsResponse -> TestTree
+responseDescribeTransitGatewayPeeringAttachments =
+  res
+    "DescribeTransitGatewayPeeringAttachmentsResponse"
+    "fixture/DescribeTransitGatewayPeeringAttachmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayPeeringAttachments)
+
+responseDescribeTransitGatewayPolicyTables :: DescribeTransitGatewayPolicyTablesResponse -> TestTree
+responseDescribeTransitGatewayPolicyTables =
+  res
+    "DescribeTransitGatewayPolicyTablesResponse"
+    "fixture/DescribeTransitGatewayPolicyTablesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayPolicyTables)
+
+responseDescribeTransitGatewayRouteTableAnnouncements :: DescribeTransitGatewayRouteTableAnnouncementsResponse -> TestTree
+responseDescribeTransitGatewayRouteTableAnnouncements =
+  res
+    "DescribeTransitGatewayRouteTableAnnouncementsResponse"
+    "fixture/DescribeTransitGatewayRouteTableAnnouncementsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayRouteTableAnnouncements)
+
+responseDescribeTransitGatewayRouteTables :: DescribeTransitGatewayRouteTablesResponse -> TestTree
+responseDescribeTransitGatewayRouteTables =
+  res
+    "DescribeTransitGatewayRouteTablesResponse"
+    "fixture/DescribeTransitGatewayRouteTablesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayRouteTables)
+
+responseDescribeTransitGatewayVpcAttachments :: DescribeTransitGatewayVpcAttachmentsResponse -> TestTree
+responseDescribeTransitGatewayVpcAttachments =
+  res
+    "DescribeTransitGatewayVpcAttachmentsResponse"
+    "fixture/DescribeTransitGatewayVpcAttachmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGatewayVpcAttachments)
+
+responseDescribeTransitGateways :: DescribeTransitGatewaysResponse -> TestTree
+responseDescribeTransitGateways =
+  res
+    "DescribeTransitGatewaysResponse"
+    "fixture/DescribeTransitGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTransitGateways)
+
+responseDescribeTrunkInterfaceAssociations :: DescribeTrunkInterfaceAssociationsResponse -> TestTree
+responseDescribeTrunkInterfaceAssociations =
+  res
+    "DescribeTrunkInterfaceAssociationsResponse"
+    "fixture/DescribeTrunkInterfaceAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeTrunkInterfaceAssociations)
+
+responseDescribeVerifiedAccessEndpoints :: DescribeVerifiedAccessEndpointsResponse -> TestTree
+responseDescribeVerifiedAccessEndpoints =
+  res
+    "DescribeVerifiedAccessEndpointsResponse"
+    "fixture/DescribeVerifiedAccessEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVerifiedAccessEndpoints)
+
+responseDescribeVerifiedAccessGroups :: DescribeVerifiedAccessGroupsResponse -> TestTree
+responseDescribeVerifiedAccessGroups =
+  res
+    "DescribeVerifiedAccessGroupsResponse"
+    "fixture/DescribeVerifiedAccessGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVerifiedAccessGroups)
+
+responseDescribeVerifiedAccessInstanceLoggingConfigurations :: DescribeVerifiedAccessInstanceLoggingConfigurationsResponse -> TestTree
+responseDescribeVerifiedAccessInstanceLoggingConfigurations =
+  res
+    "DescribeVerifiedAccessInstanceLoggingConfigurationsResponse"
+    "fixture/DescribeVerifiedAccessInstanceLoggingConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVerifiedAccessInstanceLoggingConfigurations)
+
+responseDescribeVerifiedAccessInstances :: DescribeVerifiedAccessInstancesResponse -> TestTree
+responseDescribeVerifiedAccessInstances =
+  res
+    "DescribeVerifiedAccessInstancesResponse"
+    "fixture/DescribeVerifiedAccessInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVerifiedAccessInstances)
+
+responseDescribeVerifiedAccessTrustProviders :: DescribeVerifiedAccessTrustProvidersResponse -> TestTree
+responseDescribeVerifiedAccessTrustProviders =
+  res
+    "DescribeVerifiedAccessTrustProvidersResponse"
+    "fixture/DescribeVerifiedAccessTrustProvidersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVerifiedAccessTrustProviders)
+
+responseDescribeVolumeAttribute :: DescribeVolumeAttributeResponse -> TestTree
+responseDescribeVolumeAttribute =
+  res
+    "DescribeVolumeAttributeResponse"
+    "fixture/DescribeVolumeAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVolumeAttribute)
+
+responseDescribeVolumeStatus :: DescribeVolumeStatusResponse -> TestTree
+responseDescribeVolumeStatus =
+  res
+    "DescribeVolumeStatusResponse"
+    "fixture/DescribeVolumeStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVolumeStatus)
+
+responseDescribeVolumes :: DescribeVolumesResponse -> TestTree
+responseDescribeVolumes =
+  res
+    "DescribeVolumesResponse"
+    "fixture/DescribeVolumesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVolumes)
+
+responseDescribeVolumesModifications :: DescribeVolumesModificationsResponse -> TestTree
+responseDescribeVolumesModifications =
+  res
+    "DescribeVolumesModificationsResponse"
+    "fixture/DescribeVolumesModificationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVolumesModifications)
+
+responseDescribeVpcAttribute :: DescribeVpcAttributeResponse -> TestTree
+responseDescribeVpcAttribute =
+  res
+    "DescribeVpcAttributeResponse"
+    "fixture/DescribeVpcAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcAttribute)
+
+responseDescribeVpcClassicLink :: DescribeVpcClassicLinkResponse -> TestTree
+responseDescribeVpcClassicLink =
+  res
+    "DescribeVpcClassicLinkResponse"
+    "fixture/DescribeVpcClassicLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcClassicLink)
+
+responseDescribeVpcClassicLinkDnsSupport :: DescribeVpcClassicLinkDnsSupportResponse -> TestTree
+responseDescribeVpcClassicLinkDnsSupport =
+  res
+    "DescribeVpcClassicLinkDnsSupportResponse"
+    "fixture/DescribeVpcClassicLinkDnsSupportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcClassicLinkDnsSupport)
+
+responseDescribeVpcEndpointConnectionNotifications :: DescribeVpcEndpointConnectionNotificationsResponse -> TestTree
+responseDescribeVpcEndpointConnectionNotifications =
+  res
+    "DescribeVpcEndpointConnectionNotificationsResponse"
+    "fixture/DescribeVpcEndpointConnectionNotificationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcEndpointConnectionNotifications)
+
+responseDescribeVpcEndpointConnections :: DescribeVpcEndpointConnectionsResponse -> TestTree
+responseDescribeVpcEndpointConnections =
+  res
+    "DescribeVpcEndpointConnectionsResponse"
+    "fixture/DescribeVpcEndpointConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcEndpointConnections)
+
+responseDescribeVpcEndpointServiceConfigurations :: DescribeVpcEndpointServiceConfigurationsResponse -> TestTree
+responseDescribeVpcEndpointServiceConfigurations =
+  res
+    "DescribeVpcEndpointServiceConfigurationsResponse"
+    "fixture/DescribeVpcEndpointServiceConfigurationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcEndpointServiceConfigurations)
+
+responseDescribeVpcEndpointServicePermissions :: DescribeVpcEndpointServicePermissionsResponse -> TestTree
+responseDescribeVpcEndpointServicePermissions =
+  res
+    "DescribeVpcEndpointServicePermissionsResponse"
+    "fixture/DescribeVpcEndpointServicePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcEndpointServicePermissions)
+
+responseDescribeVpcEndpointServices :: DescribeVpcEndpointServicesResponse -> TestTree
+responseDescribeVpcEndpointServices =
+  res
+    "DescribeVpcEndpointServicesResponse"
+    "fixture/DescribeVpcEndpointServicesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcEndpointServices)
+
+responseDescribeVpcEndpoints :: DescribeVpcEndpointsResponse -> TestTree
+responseDescribeVpcEndpoints =
+  res
+    "DescribeVpcEndpointsResponse"
+    "fixture/DescribeVpcEndpointsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcEndpoints)
+
+responseDescribeVpcPeeringConnections :: DescribeVpcPeeringConnectionsResponse -> TestTree
+responseDescribeVpcPeeringConnections =
+  res
+    "DescribeVpcPeeringConnectionsResponse"
+    "fixture/DescribeVpcPeeringConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcPeeringConnections)
+
+responseDescribeVpcs :: DescribeVpcsResponse -> TestTree
+responseDescribeVpcs =
+  res
+    "DescribeVpcsResponse"
+    "fixture/DescribeVpcsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpcs)
+
+responseDescribeVpnConnections :: DescribeVpnConnectionsResponse -> TestTree
+responseDescribeVpnConnections =
+  res
+    "DescribeVpnConnectionsResponse"
+    "fixture/DescribeVpnConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpnConnections)
+
+responseDescribeVpnGateways :: DescribeVpnGatewaysResponse -> TestTree
+responseDescribeVpnGateways =
+  res
+    "DescribeVpnGatewaysResponse"
+    "fixture/DescribeVpnGatewaysResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeVpnGateways)
+
+responseDetachClassicLinkVpc :: DetachClassicLinkVpcResponse -> TestTree
+responseDetachClassicLinkVpc =
+  res
+    "DetachClassicLinkVpcResponse"
+    "fixture/DetachClassicLinkVpcResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetachClassicLinkVpc)
+
+responseDetachInternetGateway :: DetachInternetGatewayResponse -> TestTree
+responseDetachInternetGateway =
+  res
+    "DetachInternetGatewayResponse"
+    "fixture/DetachInternetGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetachInternetGateway)
+
+responseDetachNetworkInterface :: DetachNetworkInterfaceResponse -> TestTree
+responseDetachNetworkInterface =
+  res
+    "DetachNetworkInterfaceResponse"
+    "fixture/DetachNetworkInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetachNetworkInterface)
+
+responseDetachVerifiedAccessTrustProvider :: DetachVerifiedAccessTrustProviderResponse -> TestTree
+responseDetachVerifiedAccessTrustProvider =
+  res
+    "DetachVerifiedAccessTrustProviderResponse"
+    "fixture/DetachVerifiedAccessTrustProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetachVerifiedAccessTrustProvider)
+
+responseDetachVolume :: VolumeAttachment -> TestTree
+responseDetachVolume =
+  res
+    "DetachVolumeResponse"
+    "fixture/DetachVolumeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetachVolume)
+
+responseDetachVpnGateway :: DetachVpnGatewayResponse -> TestTree
+responseDetachVpnGateway =
+  res
+    "DetachVpnGatewayResponse"
+    "fixture/DetachVpnGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DetachVpnGateway)
+
+responseDisableAddressTransfer :: DisableAddressTransferResponse -> TestTree
+responseDisableAddressTransfer =
+  res
+    "DisableAddressTransferResponse"
+    "fixture/DisableAddressTransferResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableAddressTransfer)
+
+responseDisableAwsNetworkPerformanceMetricSubscription :: DisableAwsNetworkPerformanceMetricSubscriptionResponse -> TestTree
+responseDisableAwsNetworkPerformanceMetricSubscription =
+  res
+    "DisableAwsNetworkPerformanceMetricSubscriptionResponse"
+    "fixture/DisableAwsNetworkPerformanceMetricSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableAwsNetworkPerformanceMetricSubscription)
+
+responseDisableEbsEncryptionByDefault :: DisableEbsEncryptionByDefaultResponse -> TestTree
+responseDisableEbsEncryptionByDefault =
+  res
+    "DisableEbsEncryptionByDefaultResponse"
+    "fixture/DisableEbsEncryptionByDefaultResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableEbsEncryptionByDefault)
+
+responseDisableFastLaunch :: DisableFastLaunchResponse -> TestTree
+responseDisableFastLaunch =
+  res
+    "DisableFastLaunchResponse"
+    "fixture/DisableFastLaunchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableFastLaunch)
+
+responseDisableFastSnapshotRestores :: DisableFastSnapshotRestoresResponse -> TestTree
+responseDisableFastSnapshotRestores =
+  res
+    "DisableFastSnapshotRestoresResponse"
+    "fixture/DisableFastSnapshotRestoresResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableFastSnapshotRestores)
+
+responseDisableImageDeprecation :: DisableImageDeprecationResponse -> TestTree
+responseDisableImageDeprecation =
+  res
+    "DisableImageDeprecationResponse"
+    "fixture/DisableImageDeprecationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableImageDeprecation)
+
+responseDisableIpamOrganizationAdminAccount :: DisableIpamOrganizationAdminAccountResponse -> TestTree
+responseDisableIpamOrganizationAdminAccount =
+  res
+    "DisableIpamOrganizationAdminAccountResponse"
+    "fixture/DisableIpamOrganizationAdminAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableIpamOrganizationAdminAccount)
+
+responseDisableSerialConsoleAccess :: DisableSerialConsoleAccessResponse -> TestTree
+responseDisableSerialConsoleAccess =
+  res
+    "DisableSerialConsoleAccessResponse"
+    "fixture/DisableSerialConsoleAccessResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableSerialConsoleAccess)
+
+responseDisableTransitGatewayRouteTablePropagation :: DisableTransitGatewayRouteTablePropagationResponse -> TestTree
+responseDisableTransitGatewayRouteTablePropagation =
+  res
+    "DisableTransitGatewayRouteTablePropagationResponse"
+    "fixture/DisableTransitGatewayRouteTablePropagationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableTransitGatewayRouteTablePropagation)
+
+responseDisableVgwRoutePropagation :: DisableVgwRoutePropagationResponse -> TestTree
+responseDisableVgwRoutePropagation =
+  res
+    "DisableVgwRoutePropagationResponse"
+    "fixture/DisableVgwRoutePropagationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableVgwRoutePropagation)
+
+responseDisableVpcClassicLink :: DisableVpcClassicLinkResponse -> TestTree
+responseDisableVpcClassicLink =
+  res
+    "DisableVpcClassicLinkResponse"
+    "fixture/DisableVpcClassicLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableVpcClassicLink)
+
+responseDisableVpcClassicLinkDnsSupport :: DisableVpcClassicLinkDnsSupportResponse -> TestTree
+responseDisableVpcClassicLinkDnsSupport =
+  res
+    "DisableVpcClassicLinkDnsSupportResponse"
+    "fixture/DisableVpcClassicLinkDnsSupportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableVpcClassicLinkDnsSupport)
+
+responseDisassociateAddress :: DisassociateAddressResponse -> TestTree
+responseDisassociateAddress =
+  res
+    "DisassociateAddressResponse"
+    "fixture/DisassociateAddressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateAddress)
+
+responseDisassociateClientVpnTargetNetwork :: DisassociateClientVpnTargetNetworkResponse -> TestTree
+responseDisassociateClientVpnTargetNetwork =
+  res
+    "DisassociateClientVpnTargetNetworkResponse"
+    "fixture/DisassociateClientVpnTargetNetworkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateClientVpnTargetNetwork)
+
+responseDisassociateEnclaveCertificateIamRole :: DisassociateEnclaveCertificateIamRoleResponse -> TestTree
+responseDisassociateEnclaveCertificateIamRole =
+  res
+    "DisassociateEnclaveCertificateIamRoleResponse"
+    "fixture/DisassociateEnclaveCertificateIamRoleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateEnclaveCertificateIamRole)
+
+responseDisassociateIamInstanceProfile :: DisassociateIamInstanceProfileResponse -> TestTree
+responseDisassociateIamInstanceProfile =
+  res
+    "DisassociateIamInstanceProfileResponse"
+    "fixture/DisassociateIamInstanceProfileResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateIamInstanceProfile)
+
+responseDisassociateInstanceEventWindow :: DisassociateInstanceEventWindowResponse -> TestTree
+responseDisassociateInstanceEventWindow =
+  res
+    "DisassociateInstanceEventWindowResponse"
+    "fixture/DisassociateInstanceEventWindowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateInstanceEventWindow)
+
+responseDisassociateRouteTable :: DisassociateRouteTableResponse -> TestTree
+responseDisassociateRouteTable =
+  res
+    "DisassociateRouteTableResponse"
+    "fixture/DisassociateRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateRouteTable)
+
+responseDisassociateSubnetCidrBlock :: DisassociateSubnetCidrBlockResponse -> TestTree
+responseDisassociateSubnetCidrBlock =
+  res
+    "DisassociateSubnetCidrBlockResponse"
+    "fixture/DisassociateSubnetCidrBlockResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateSubnetCidrBlock)
+
+responseDisassociateTransitGatewayMulticastDomain :: DisassociateTransitGatewayMulticastDomainResponse -> TestTree
+responseDisassociateTransitGatewayMulticastDomain =
+  res
+    "DisassociateTransitGatewayMulticastDomainResponse"
+    "fixture/DisassociateTransitGatewayMulticastDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateTransitGatewayMulticastDomain)
+
+responseDisassociateTransitGatewayPolicyTable :: DisassociateTransitGatewayPolicyTableResponse -> TestTree
+responseDisassociateTransitGatewayPolicyTable =
+  res
+    "DisassociateTransitGatewayPolicyTableResponse"
+    "fixture/DisassociateTransitGatewayPolicyTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateTransitGatewayPolicyTable)
+
+responseDisassociateTransitGatewayRouteTable :: DisassociateTransitGatewayRouteTableResponse -> TestTree
+responseDisassociateTransitGatewayRouteTable =
+  res
+    "DisassociateTransitGatewayRouteTableResponse"
+    "fixture/DisassociateTransitGatewayRouteTableResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateTransitGatewayRouteTable)
+
+responseDisassociateTrunkInterface :: DisassociateTrunkInterfaceResponse -> TestTree
+responseDisassociateTrunkInterface =
+  res
+    "DisassociateTrunkInterfaceResponse"
+    "fixture/DisassociateTrunkInterfaceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateTrunkInterface)
+
+responseDisassociateVpcCidrBlock :: DisassociateVpcCidrBlockResponse -> TestTree
+responseDisassociateVpcCidrBlock =
+  res
+    "DisassociateVpcCidrBlockResponse"
+    "fixture/DisassociateVpcCidrBlockResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateVpcCidrBlock)
+
+responseEnableAddressTransfer :: EnableAddressTransferResponse -> TestTree
+responseEnableAddressTransfer =
+  res
+    "EnableAddressTransferResponse"
+    "fixture/EnableAddressTransferResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableAddressTransfer)
+
+responseEnableAwsNetworkPerformanceMetricSubscription :: EnableAwsNetworkPerformanceMetricSubscriptionResponse -> TestTree
+responseEnableAwsNetworkPerformanceMetricSubscription =
+  res
+    "EnableAwsNetworkPerformanceMetricSubscriptionResponse"
+    "fixture/EnableAwsNetworkPerformanceMetricSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableAwsNetworkPerformanceMetricSubscription)
+
+responseEnableEbsEncryptionByDefault :: EnableEbsEncryptionByDefaultResponse -> TestTree
+responseEnableEbsEncryptionByDefault =
+  res
+    "EnableEbsEncryptionByDefaultResponse"
+    "fixture/EnableEbsEncryptionByDefaultResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableEbsEncryptionByDefault)
+
+responseEnableFastLaunch :: EnableFastLaunchResponse -> TestTree
+responseEnableFastLaunch =
+  res
+    "EnableFastLaunchResponse"
+    "fixture/EnableFastLaunchResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableFastLaunch)
+
+responseEnableFastSnapshotRestores :: EnableFastSnapshotRestoresResponse -> TestTree
+responseEnableFastSnapshotRestores =
+  res
+    "EnableFastSnapshotRestoresResponse"
+    "fixture/EnableFastSnapshotRestoresResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableFastSnapshotRestores)
+
+responseEnableImageDeprecation :: EnableImageDeprecationResponse -> TestTree
+responseEnableImageDeprecation =
+  res
+    "EnableImageDeprecationResponse"
+    "fixture/EnableImageDeprecationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableImageDeprecation)
+
+responseEnableIpamOrganizationAdminAccount :: EnableIpamOrganizationAdminAccountResponse -> TestTree
+responseEnableIpamOrganizationAdminAccount =
+  res
+    "EnableIpamOrganizationAdminAccountResponse"
+    "fixture/EnableIpamOrganizationAdminAccountResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableIpamOrganizationAdminAccount)
+
+responseEnableReachabilityAnalyzerOrganizationSharing :: EnableReachabilityAnalyzerOrganizationSharingResponse -> TestTree
+responseEnableReachabilityAnalyzerOrganizationSharing =
+  res
+    "EnableReachabilityAnalyzerOrganizationSharingResponse"
+    "fixture/EnableReachabilityAnalyzerOrganizationSharingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableReachabilityAnalyzerOrganizationSharing)
+
+responseEnableSerialConsoleAccess :: EnableSerialConsoleAccessResponse -> TestTree
+responseEnableSerialConsoleAccess =
+  res
+    "EnableSerialConsoleAccessResponse"
+    "fixture/EnableSerialConsoleAccessResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableSerialConsoleAccess)
+
+responseEnableTransitGatewayRouteTablePropagation :: EnableTransitGatewayRouteTablePropagationResponse -> TestTree
+responseEnableTransitGatewayRouteTablePropagation =
+  res
+    "EnableTransitGatewayRouteTablePropagationResponse"
+    "fixture/EnableTransitGatewayRouteTablePropagationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableTransitGatewayRouteTablePropagation)
+
+responseEnableVgwRoutePropagation :: EnableVgwRoutePropagationResponse -> TestTree
+responseEnableVgwRoutePropagation =
+  res
+    "EnableVgwRoutePropagationResponse"
+    "fixture/EnableVgwRoutePropagationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableVgwRoutePropagation)
+
+responseEnableVolumeIO :: EnableVolumeIOResponse -> TestTree
+responseEnableVolumeIO =
+  res
+    "EnableVolumeIOResponse"
+    "fixture/EnableVolumeIOResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableVolumeIO)
+
+responseEnableVpcClassicLink :: EnableVpcClassicLinkResponse -> TestTree
+responseEnableVpcClassicLink =
+  res
+    "EnableVpcClassicLinkResponse"
+    "fixture/EnableVpcClassicLinkResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableVpcClassicLink)
+
+responseEnableVpcClassicLinkDnsSupport :: EnableVpcClassicLinkDnsSupportResponse -> TestTree
+responseEnableVpcClassicLinkDnsSupport =
+  res
+    "EnableVpcClassicLinkDnsSupportResponse"
+    "fixture/EnableVpcClassicLinkDnsSupportResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableVpcClassicLinkDnsSupport)
+
+responseExportClientVpnClientCertificateRevocationList :: ExportClientVpnClientCertificateRevocationListResponse -> TestTree
+responseExportClientVpnClientCertificateRevocationList =
+  res
+    "ExportClientVpnClientCertificateRevocationListResponse"
+    "fixture/ExportClientVpnClientCertificateRevocationListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportClientVpnClientCertificateRevocationList)
+
+responseExportClientVpnClientConfiguration :: ExportClientVpnClientConfigurationResponse -> TestTree
+responseExportClientVpnClientConfiguration =
+  res
+    "ExportClientVpnClientConfigurationResponse"
+    "fixture/ExportClientVpnClientConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportClientVpnClientConfiguration)
+
+responseExportImage :: ExportImageResponse -> TestTree
+responseExportImage =
+  res
+    "ExportImageResponse"
+    "fixture/ExportImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportImage)
+
+responseExportTransitGatewayRoutes :: ExportTransitGatewayRoutesResponse -> TestTree
+responseExportTransitGatewayRoutes =
+  res
+    "ExportTransitGatewayRoutesResponse"
+    "fixture/ExportTransitGatewayRoutesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportTransitGatewayRoutes)
+
+responseGetAssociatedEnclaveCertificateIamRoles :: GetAssociatedEnclaveCertificateIamRolesResponse -> TestTree
+responseGetAssociatedEnclaveCertificateIamRoles =
+  res
+    "GetAssociatedEnclaveCertificateIamRolesResponse"
+    "fixture/GetAssociatedEnclaveCertificateIamRolesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAssociatedEnclaveCertificateIamRoles)
+
+responseGetAssociatedIpv6PoolCidrs :: GetAssociatedIpv6PoolCidrsResponse -> TestTree
+responseGetAssociatedIpv6PoolCidrs =
+  res
+    "GetAssociatedIpv6PoolCidrsResponse"
+    "fixture/GetAssociatedIpv6PoolCidrsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAssociatedIpv6PoolCidrs)
+
+responseGetAwsNetworkPerformanceData :: GetAwsNetworkPerformanceDataResponse -> TestTree
+responseGetAwsNetworkPerformanceData =
+  res
+    "GetAwsNetworkPerformanceDataResponse"
+    "fixture/GetAwsNetworkPerformanceDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAwsNetworkPerformanceData)
+
+responseGetCapacityReservationUsage :: GetCapacityReservationUsageResponse -> TestTree
+responseGetCapacityReservationUsage =
+  res
+    "GetCapacityReservationUsageResponse"
+    "fixture/GetCapacityReservationUsageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCapacityReservationUsage)
+
+responseGetCoipPoolUsage :: GetCoipPoolUsageResponse -> TestTree
+responseGetCoipPoolUsage =
+  res
+    "GetCoipPoolUsageResponse"
+    "fixture/GetCoipPoolUsageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetCoipPoolUsage)
+
+responseGetConsoleOutput :: GetConsoleOutputResponse -> TestTree
+responseGetConsoleOutput =
+  res
+    "GetConsoleOutputResponse"
+    "fixture/GetConsoleOutputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConsoleOutput)
+
+responseGetConsoleScreenshot :: GetConsoleScreenshotResponse -> TestTree
+responseGetConsoleScreenshot =
+  res
+    "GetConsoleScreenshotResponse"
+    "fixture/GetConsoleScreenshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConsoleScreenshot)
+
+responseGetDefaultCreditSpecification :: GetDefaultCreditSpecificationResponse -> TestTree
+responseGetDefaultCreditSpecification =
+  res
+    "GetDefaultCreditSpecificationResponse"
+    "fixture/GetDefaultCreditSpecificationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetDefaultCreditSpecification)
+
+responseGetEbsDefaultKmsKeyId :: GetEbsDefaultKmsKeyIdResponse -> TestTree
+responseGetEbsDefaultKmsKeyId =
+  res
+    "GetEbsDefaultKmsKeyIdResponse"
+    "fixture/GetEbsDefaultKmsKeyIdResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEbsDefaultKmsKeyId)
+
+responseGetEbsEncryptionByDefault :: GetEbsEncryptionByDefaultResponse -> TestTree
+responseGetEbsEncryptionByDefault =
+  res
+    "GetEbsEncryptionByDefaultResponse"
+    "fixture/GetEbsEncryptionByDefaultResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetEbsEncryptionByDefault)
+
+responseGetFlowLogsIntegrationTemplate :: GetFlowLogsIntegrationTemplateResponse -> TestTree
+responseGetFlowLogsIntegrationTemplate =
+  res
+    "GetFlowLogsIntegrationTemplateResponse"
+    "fixture/GetFlowLogsIntegrationTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetFlowLogsIntegrationTemplate)
+
+responseGetGroupsForCapacityReservation :: GetGroupsForCapacityReservationResponse -> TestTree
+responseGetGroupsForCapacityReservation =
+  res
+    "GetGroupsForCapacityReservationResponse"
+    "fixture/GetGroupsForCapacityReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetGroupsForCapacityReservation)
+
+responseGetHostReservationPurchasePreview :: GetHostReservationPurchasePreviewResponse -> TestTree
+responseGetHostReservationPurchasePreview =
+  res
+    "GetHostReservationPurchasePreviewResponse"
+    "fixture/GetHostReservationPurchasePreviewResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetHostReservationPurchasePreview)
+
+responseGetInstanceTypesFromInstanceRequirements :: GetInstanceTypesFromInstanceRequirementsResponse -> TestTree
+responseGetInstanceTypesFromInstanceRequirements =
+  res
+    "GetInstanceTypesFromInstanceRequirementsResponse"
+    "fixture/GetInstanceTypesFromInstanceRequirementsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetInstanceTypesFromInstanceRequirements)
+
+responseGetInstanceUefiData :: GetInstanceUefiDataResponse -> TestTree
+responseGetInstanceUefiData =
+  res
+    "GetInstanceUefiDataResponse"
+    "fixture/GetInstanceUefiDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetInstanceUefiData)
+
+responseGetIpamAddressHistory :: GetIpamAddressHistoryResponse -> TestTree
+responseGetIpamAddressHistory =
+  res
+    "GetIpamAddressHistoryResponse"
+    "fixture/GetIpamAddressHistoryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIpamAddressHistory)
+
+responseGetIpamPoolAllocations :: GetIpamPoolAllocationsResponse -> TestTree
+responseGetIpamPoolAllocations =
+  res
+    "GetIpamPoolAllocationsResponse"
+    "fixture/GetIpamPoolAllocationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIpamPoolAllocations)
+
+responseGetIpamPoolCidrs :: GetIpamPoolCidrsResponse -> TestTree
+responseGetIpamPoolCidrs =
+  res
+    "GetIpamPoolCidrsResponse"
+    "fixture/GetIpamPoolCidrsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIpamPoolCidrs)
+
+responseGetIpamResourceCidrs :: GetIpamResourceCidrsResponse -> TestTree
+responseGetIpamResourceCidrs =
+  res
+    "GetIpamResourceCidrsResponse"
+    "fixture/GetIpamResourceCidrsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetIpamResourceCidrs)
+
+responseGetLaunchTemplateData :: GetLaunchTemplateDataResponse -> TestTree
+responseGetLaunchTemplateData =
+  res
+    "GetLaunchTemplateDataResponse"
+    "fixture/GetLaunchTemplateDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetLaunchTemplateData)
+
+responseGetManagedPrefixListAssociations :: GetManagedPrefixListAssociationsResponse -> TestTree
+responseGetManagedPrefixListAssociations =
+  res
+    "GetManagedPrefixListAssociationsResponse"
+    "fixture/GetManagedPrefixListAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetManagedPrefixListAssociations)
+
+responseGetManagedPrefixListEntries :: GetManagedPrefixListEntriesResponse -> TestTree
+responseGetManagedPrefixListEntries =
+  res
+    "GetManagedPrefixListEntriesResponse"
+    "fixture/GetManagedPrefixListEntriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetManagedPrefixListEntries)
+
+responseGetNetworkInsightsAccessScopeAnalysisFindings :: GetNetworkInsightsAccessScopeAnalysisFindingsResponse -> TestTree
+responseGetNetworkInsightsAccessScopeAnalysisFindings =
+  res
+    "GetNetworkInsightsAccessScopeAnalysisFindingsResponse"
+    "fixture/GetNetworkInsightsAccessScopeAnalysisFindingsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetNetworkInsightsAccessScopeAnalysisFindings)
+
+responseGetNetworkInsightsAccessScopeContent :: GetNetworkInsightsAccessScopeContentResponse -> TestTree
+responseGetNetworkInsightsAccessScopeContent =
+  res
+    "GetNetworkInsightsAccessScopeContentResponse"
+    "fixture/GetNetworkInsightsAccessScopeContentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetNetworkInsightsAccessScopeContent)
+
+responseGetPasswordData :: GetPasswordDataResponse -> TestTree
+responseGetPasswordData =
+  res
+    "GetPasswordDataResponse"
+    "fixture/GetPasswordDataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetPasswordData)
+
+responseGetReservedInstancesExchangeQuote :: GetReservedInstancesExchangeQuoteResponse -> TestTree
+responseGetReservedInstancesExchangeQuote =
+  res
+    "GetReservedInstancesExchangeQuoteResponse"
+    "fixture/GetReservedInstancesExchangeQuoteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReservedInstancesExchangeQuote)
+
+responseGetSerialConsoleAccessStatus :: GetSerialConsoleAccessStatusResponse -> TestTree
+responseGetSerialConsoleAccessStatus =
+  res
+    "GetSerialConsoleAccessStatusResponse"
+    "fixture/GetSerialConsoleAccessStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSerialConsoleAccessStatus)
+
+responseGetSpotPlacementScores :: GetSpotPlacementScoresResponse -> TestTree
+responseGetSpotPlacementScores =
+  res
+    "GetSpotPlacementScoresResponse"
+    "fixture/GetSpotPlacementScoresResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSpotPlacementScores)
+
+responseGetSubnetCidrReservations :: GetSubnetCidrReservationsResponse -> TestTree
+responseGetSubnetCidrReservations =
+  res
+    "GetSubnetCidrReservationsResponse"
+    "fixture/GetSubnetCidrReservationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSubnetCidrReservations)
+
+responseGetTransitGatewayAttachmentPropagations :: GetTransitGatewayAttachmentPropagationsResponse -> TestTree
+responseGetTransitGatewayAttachmentPropagations =
+  res
+    "GetTransitGatewayAttachmentPropagationsResponse"
+    "fixture/GetTransitGatewayAttachmentPropagationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayAttachmentPropagations)
+
+responseGetTransitGatewayMulticastDomainAssociations :: GetTransitGatewayMulticastDomainAssociationsResponse -> TestTree
+responseGetTransitGatewayMulticastDomainAssociations =
+  res
+    "GetTransitGatewayMulticastDomainAssociationsResponse"
+    "fixture/GetTransitGatewayMulticastDomainAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayMulticastDomainAssociations)
+
+responseGetTransitGatewayPolicyTableAssociations :: GetTransitGatewayPolicyTableAssociationsResponse -> TestTree
+responseGetTransitGatewayPolicyTableAssociations =
+  res
+    "GetTransitGatewayPolicyTableAssociationsResponse"
+    "fixture/GetTransitGatewayPolicyTableAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayPolicyTableAssociations)
+
+responseGetTransitGatewayPolicyTableEntries :: GetTransitGatewayPolicyTableEntriesResponse -> TestTree
+responseGetTransitGatewayPolicyTableEntries =
+  res
+    "GetTransitGatewayPolicyTableEntriesResponse"
+    "fixture/GetTransitGatewayPolicyTableEntriesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayPolicyTableEntries)
+
+responseGetTransitGatewayPrefixListReferences :: GetTransitGatewayPrefixListReferencesResponse -> TestTree
+responseGetTransitGatewayPrefixListReferences =
+  res
+    "GetTransitGatewayPrefixListReferencesResponse"
+    "fixture/GetTransitGatewayPrefixListReferencesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayPrefixListReferences)
+
+responseGetTransitGatewayRouteTableAssociations :: GetTransitGatewayRouteTableAssociationsResponse -> TestTree
+responseGetTransitGatewayRouteTableAssociations =
+  res
+    "GetTransitGatewayRouteTableAssociationsResponse"
+    "fixture/GetTransitGatewayRouteTableAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayRouteTableAssociations)
+
+responseGetTransitGatewayRouteTablePropagations :: GetTransitGatewayRouteTablePropagationsResponse -> TestTree
+responseGetTransitGatewayRouteTablePropagations =
+  res
+    "GetTransitGatewayRouteTablePropagationsResponse"
+    "fixture/GetTransitGatewayRouteTablePropagationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTransitGatewayRouteTablePropagations)
+
+responseGetVerifiedAccessEndpointPolicy :: GetVerifiedAccessEndpointPolicyResponse -> TestTree
+responseGetVerifiedAccessEndpointPolicy =
+  res
+    "GetVerifiedAccessEndpointPolicyResponse"
+    "fixture/GetVerifiedAccessEndpointPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVerifiedAccessEndpointPolicy)
+
+responseGetVerifiedAccessGroupPolicy :: GetVerifiedAccessGroupPolicyResponse -> TestTree
+responseGetVerifiedAccessGroupPolicy =
+  res
+    "GetVerifiedAccessGroupPolicyResponse"
+    "fixture/GetVerifiedAccessGroupPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVerifiedAccessGroupPolicy)
+
+responseGetVpnConnectionDeviceSampleConfiguration :: GetVpnConnectionDeviceSampleConfigurationResponse -> TestTree
+responseGetVpnConnectionDeviceSampleConfiguration =
+  res
+    "GetVpnConnectionDeviceSampleConfigurationResponse"
+    "fixture/GetVpnConnectionDeviceSampleConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVpnConnectionDeviceSampleConfiguration)
+
+responseGetVpnConnectionDeviceTypes :: GetVpnConnectionDeviceTypesResponse -> TestTree
+responseGetVpnConnectionDeviceTypes =
+  res
+    "GetVpnConnectionDeviceTypesResponse"
+    "fixture/GetVpnConnectionDeviceTypesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetVpnConnectionDeviceTypes)
+
+responseImportClientVpnClientCertificateRevocationList :: ImportClientVpnClientCertificateRevocationListResponse -> TestTree
+responseImportClientVpnClientCertificateRevocationList =
+  res
+    "ImportClientVpnClientCertificateRevocationListResponse"
+    "fixture/ImportClientVpnClientCertificateRevocationListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportClientVpnClientCertificateRevocationList)
+
+responseImportImage :: ImportImageResponse -> TestTree
+responseImportImage =
+  res
+    "ImportImageResponse"
+    "fixture/ImportImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportImage)
+
+responseImportInstance :: ImportInstanceResponse -> TestTree
+responseImportInstance =
+  res
+    "ImportInstanceResponse"
+    "fixture/ImportInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportInstance)
+
+responseImportKeyPair :: ImportKeyPairResponse -> TestTree
+responseImportKeyPair =
+  res
+    "ImportKeyPairResponse"
+    "fixture/ImportKeyPairResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportKeyPair)
+
+responseImportSnapshot :: ImportSnapshotResponse -> TestTree
+responseImportSnapshot =
+  res
+    "ImportSnapshotResponse"
+    "fixture/ImportSnapshotResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportSnapshot)
+
+responseImportVolume :: ImportVolumeResponse -> TestTree
+responseImportVolume =
+  res
+    "ImportVolumeResponse"
+    "fixture/ImportVolumeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportVolume)
+
+responseListImagesInRecycleBin :: ListImagesInRecycleBinResponse -> TestTree
+responseListImagesInRecycleBin =
+  res
+    "ListImagesInRecycleBinResponse"
+    "fixture/ListImagesInRecycleBinResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListImagesInRecycleBin)
+
+responseListSnapshotsInRecycleBin :: ListSnapshotsInRecycleBinResponse -> TestTree
+responseListSnapshotsInRecycleBin =
+  res
+    "ListSnapshotsInRecycleBinResponse"
+    "fixture/ListSnapshotsInRecycleBinResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListSnapshotsInRecycleBin)
+
+responseModifyAddressAttribute :: ModifyAddressAttributeResponse -> TestTree
+responseModifyAddressAttribute =
+  res
+    "ModifyAddressAttributeResponse"
+    "fixture/ModifyAddressAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyAddressAttribute)
+
+responseModifyAvailabilityZoneGroup :: ModifyAvailabilityZoneGroupResponse -> TestTree
+responseModifyAvailabilityZoneGroup =
+  res
+    "ModifyAvailabilityZoneGroupResponse"
+    "fixture/ModifyAvailabilityZoneGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyAvailabilityZoneGroup)
+
+responseModifyCapacityReservation :: ModifyCapacityReservationResponse -> TestTree
+responseModifyCapacityReservation =
+  res
+    "ModifyCapacityReservationResponse"
+    "fixture/ModifyCapacityReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyCapacityReservation)
+
+responseModifyCapacityReservationFleet :: ModifyCapacityReservationFleetResponse -> TestTree
+responseModifyCapacityReservationFleet =
+  res
+    "ModifyCapacityReservationFleetResponse"
+    "fixture/ModifyCapacityReservationFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyCapacityReservationFleet)
+
+responseModifyClientVpnEndpoint :: ModifyClientVpnEndpointResponse -> TestTree
+responseModifyClientVpnEndpoint =
+  res
+    "ModifyClientVpnEndpointResponse"
+    "fixture/ModifyClientVpnEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyClientVpnEndpoint)
+
+responseModifyDefaultCreditSpecification :: ModifyDefaultCreditSpecificationResponse -> TestTree
+responseModifyDefaultCreditSpecification =
+  res
+    "ModifyDefaultCreditSpecificationResponse"
+    "fixture/ModifyDefaultCreditSpecificationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyDefaultCreditSpecification)
+
+responseModifyEbsDefaultKmsKeyId :: ModifyEbsDefaultKmsKeyIdResponse -> TestTree
+responseModifyEbsDefaultKmsKeyId =
+  res
+    "ModifyEbsDefaultKmsKeyIdResponse"
+    "fixture/ModifyEbsDefaultKmsKeyIdResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyEbsDefaultKmsKeyId)
+
+responseModifyFleet :: ModifyFleetResponse -> TestTree
+responseModifyFleet =
+  res
+    "ModifyFleetResponse"
+    "fixture/ModifyFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyFleet)
+
+responseModifyFpgaImageAttribute :: ModifyFpgaImageAttributeResponse -> TestTree
+responseModifyFpgaImageAttribute =
+  res
+    "ModifyFpgaImageAttributeResponse"
+    "fixture/ModifyFpgaImageAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyFpgaImageAttribute)
+
+responseModifyHosts :: ModifyHostsResponse -> TestTree
+responseModifyHosts =
+  res
+    "ModifyHostsResponse"
+    "fixture/ModifyHostsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyHosts)
+
+responseModifyIdFormat :: ModifyIdFormatResponse -> TestTree
+responseModifyIdFormat =
+  res
+    "ModifyIdFormatResponse"
+    "fixture/ModifyIdFormatResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyIdFormat)
+
+responseModifyIdentityIdFormat :: ModifyIdentityIdFormatResponse -> TestTree
+responseModifyIdentityIdFormat =
+  res
+    "ModifyIdentityIdFormatResponse"
+    "fixture/ModifyIdentityIdFormatResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyIdentityIdFormat)
+
+responseModifyImageAttribute :: ModifyImageAttributeResponse -> TestTree
+responseModifyImageAttribute =
+  res
+    "ModifyImageAttributeResponse"
+    "fixture/ModifyImageAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyImageAttribute)
+
+responseModifyInstanceAttribute :: ModifyInstanceAttributeResponse -> TestTree
+responseModifyInstanceAttribute =
+  res
+    "ModifyInstanceAttributeResponse"
+    "fixture/ModifyInstanceAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceAttribute)
+
+responseModifyInstanceCapacityReservationAttributes :: ModifyInstanceCapacityReservationAttributesResponse -> TestTree
+responseModifyInstanceCapacityReservationAttributes =
+  res
+    "ModifyInstanceCapacityReservationAttributesResponse"
+    "fixture/ModifyInstanceCapacityReservationAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceCapacityReservationAttributes)
+
+responseModifyInstanceCreditSpecification :: ModifyInstanceCreditSpecificationResponse -> TestTree
+responseModifyInstanceCreditSpecification =
+  res
+    "ModifyInstanceCreditSpecificationResponse"
+    "fixture/ModifyInstanceCreditSpecificationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceCreditSpecification)
+
+responseModifyInstanceEventStartTime :: ModifyInstanceEventStartTimeResponse -> TestTree
+responseModifyInstanceEventStartTime =
+  res
+    "ModifyInstanceEventStartTimeResponse"
+    "fixture/ModifyInstanceEventStartTimeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceEventStartTime)
+
+responseModifyInstanceEventWindow :: ModifyInstanceEventWindowResponse -> TestTree
+responseModifyInstanceEventWindow =
+  res
+    "ModifyInstanceEventWindowResponse"
+    "fixture/ModifyInstanceEventWindowResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceEventWindow)
+
+responseModifyInstanceMaintenanceOptions :: ModifyInstanceMaintenanceOptionsResponse -> TestTree
+responseModifyInstanceMaintenanceOptions =
+  res
+    "ModifyInstanceMaintenanceOptionsResponse"
+    "fixture/ModifyInstanceMaintenanceOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceMaintenanceOptions)
+
+responseModifyInstanceMetadataOptions :: ModifyInstanceMetadataOptionsResponse -> TestTree
+responseModifyInstanceMetadataOptions =
+  res
+    "ModifyInstanceMetadataOptionsResponse"
+    "fixture/ModifyInstanceMetadataOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstanceMetadataOptions)
+
+responseModifyInstancePlacement :: ModifyInstancePlacementResponse -> TestTree
+responseModifyInstancePlacement =
+  res
+    "ModifyInstancePlacementResponse"
+    "fixture/ModifyInstancePlacementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyInstancePlacement)
+
+responseModifyIpam :: ModifyIpamResponse -> TestTree
+responseModifyIpam =
+  res
+    "ModifyIpamResponse"
+    "fixture/ModifyIpamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyIpam)
+
+responseModifyIpamPool :: ModifyIpamPoolResponse -> TestTree
+responseModifyIpamPool =
+  res
+    "ModifyIpamPoolResponse"
+    "fixture/ModifyIpamPoolResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyIpamPool)
+
+responseModifyIpamResourceCidr :: ModifyIpamResourceCidrResponse -> TestTree
+responseModifyIpamResourceCidr =
+  res
+    "ModifyIpamResourceCidrResponse"
+    "fixture/ModifyIpamResourceCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyIpamResourceCidr)
+
+responseModifyIpamScope :: ModifyIpamScopeResponse -> TestTree
+responseModifyIpamScope =
+  res
+    "ModifyIpamScopeResponse"
+    "fixture/ModifyIpamScopeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyIpamScope)
+
+responseModifyLaunchTemplate :: ModifyLaunchTemplateResponse -> TestTree
+responseModifyLaunchTemplate =
+  res
+    "ModifyLaunchTemplateResponse"
+    "fixture/ModifyLaunchTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyLaunchTemplate)
+
+responseModifyLocalGatewayRoute :: ModifyLocalGatewayRouteResponse -> TestTree
+responseModifyLocalGatewayRoute =
+  res
+    "ModifyLocalGatewayRouteResponse"
+    "fixture/ModifyLocalGatewayRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyLocalGatewayRoute)
+
+responseModifyManagedPrefixList :: ModifyManagedPrefixListResponse -> TestTree
+responseModifyManagedPrefixList =
+  res
+    "ModifyManagedPrefixListResponse"
+    "fixture/ModifyManagedPrefixListResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyManagedPrefixList)
+
+responseModifyNetworkInterfaceAttribute :: ModifyNetworkInterfaceAttributeResponse -> TestTree
+responseModifyNetworkInterfaceAttribute =
+  res
+    "ModifyNetworkInterfaceAttributeResponse"
+    "fixture/ModifyNetworkInterfaceAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyNetworkInterfaceAttribute)
+
+responseModifyPrivateDnsNameOptions :: ModifyPrivateDnsNameOptionsResponse -> TestTree
+responseModifyPrivateDnsNameOptions =
+  res
+    "ModifyPrivateDnsNameOptionsResponse"
+    "fixture/ModifyPrivateDnsNameOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyPrivateDnsNameOptions)
+
+responseModifyReservedInstances :: ModifyReservedInstancesResponse -> TestTree
+responseModifyReservedInstances =
+  res
+    "ModifyReservedInstancesResponse"
+    "fixture/ModifyReservedInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyReservedInstances)
+
+responseModifySecurityGroupRules :: ModifySecurityGroupRulesResponse -> TestTree
+responseModifySecurityGroupRules =
+  res
+    "ModifySecurityGroupRulesResponse"
+    "fixture/ModifySecurityGroupRulesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySecurityGroupRules)
+
+responseModifySnapshotAttribute :: ModifySnapshotAttributeResponse -> TestTree
+responseModifySnapshotAttribute =
+  res
+    "ModifySnapshotAttributeResponse"
+    "fixture/ModifySnapshotAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySnapshotAttribute)
+
+responseModifySnapshotTier :: ModifySnapshotTierResponse -> TestTree
+responseModifySnapshotTier =
+  res
+    "ModifySnapshotTierResponse"
+    "fixture/ModifySnapshotTierResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySnapshotTier)
+
+responseModifySpotFleetRequest :: ModifySpotFleetRequestResponse -> TestTree
+responseModifySpotFleetRequest =
+  res
+    "ModifySpotFleetRequestResponse"
+    "fixture/ModifySpotFleetRequestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySpotFleetRequest)
+
+responseModifySubnetAttribute :: ModifySubnetAttributeResponse -> TestTree
+responseModifySubnetAttribute =
+  res
+    "ModifySubnetAttributeResponse"
+    "fixture/ModifySubnetAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifySubnetAttribute)
+
+responseModifyTrafficMirrorFilterNetworkServices :: ModifyTrafficMirrorFilterNetworkServicesResponse -> TestTree
+responseModifyTrafficMirrorFilterNetworkServices =
+  res
+    "ModifyTrafficMirrorFilterNetworkServicesResponse"
+    "fixture/ModifyTrafficMirrorFilterNetworkServicesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyTrafficMirrorFilterNetworkServices)
+
+responseModifyTrafficMirrorFilterRule :: ModifyTrafficMirrorFilterRuleResponse -> TestTree
+responseModifyTrafficMirrorFilterRule =
+  res
+    "ModifyTrafficMirrorFilterRuleResponse"
+    "fixture/ModifyTrafficMirrorFilterRuleResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyTrafficMirrorFilterRule)
+
+responseModifyTrafficMirrorSession :: ModifyTrafficMirrorSessionResponse -> TestTree
+responseModifyTrafficMirrorSession =
+  res
+    "ModifyTrafficMirrorSessionResponse"
+    "fixture/ModifyTrafficMirrorSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyTrafficMirrorSession)
+
+responseModifyTransitGateway :: ModifyTransitGatewayResponse -> TestTree
+responseModifyTransitGateway =
+  res
+    "ModifyTransitGatewayResponse"
+    "fixture/ModifyTransitGatewayResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyTransitGateway)
+
+responseModifyTransitGatewayPrefixListReference :: ModifyTransitGatewayPrefixListReferenceResponse -> TestTree
+responseModifyTransitGatewayPrefixListReference =
+  res
+    "ModifyTransitGatewayPrefixListReferenceResponse"
+    "fixture/ModifyTransitGatewayPrefixListReferenceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyTransitGatewayPrefixListReference)
+
+responseModifyTransitGatewayVpcAttachment :: ModifyTransitGatewayVpcAttachmentResponse -> TestTree
+responseModifyTransitGatewayVpcAttachment =
+  res
+    "ModifyTransitGatewayVpcAttachmentResponse"
+    "fixture/ModifyTransitGatewayVpcAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyTransitGatewayVpcAttachment)
+
+responseModifyVerifiedAccessEndpoint :: ModifyVerifiedAccessEndpointResponse -> TestTree
+responseModifyVerifiedAccessEndpoint =
+  res
+    "ModifyVerifiedAccessEndpointResponse"
+    "fixture/ModifyVerifiedAccessEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessEndpoint)
+
+responseModifyVerifiedAccessEndpointPolicy :: ModifyVerifiedAccessEndpointPolicyResponse -> TestTree
+responseModifyVerifiedAccessEndpointPolicy =
+  res
+    "ModifyVerifiedAccessEndpointPolicyResponse"
+    "fixture/ModifyVerifiedAccessEndpointPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessEndpointPolicy)
+
+responseModifyVerifiedAccessGroup :: ModifyVerifiedAccessGroupResponse -> TestTree
+responseModifyVerifiedAccessGroup =
+  res
+    "ModifyVerifiedAccessGroupResponse"
+    "fixture/ModifyVerifiedAccessGroupResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessGroup)
+
+responseModifyVerifiedAccessGroupPolicy :: ModifyVerifiedAccessGroupPolicyResponse -> TestTree
+responseModifyVerifiedAccessGroupPolicy =
+  res
+    "ModifyVerifiedAccessGroupPolicyResponse"
+    "fixture/ModifyVerifiedAccessGroupPolicyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessGroupPolicy)
+
+responseModifyVerifiedAccessInstance :: ModifyVerifiedAccessInstanceResponse -> TestTree
+responseModifyVerifiedAccessInstance =
+  res
+    "ModifyVerifiedAccessInstanceResponse"
+    "fixture/ModifyVerifiedAccessInstanceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessInstance)
+
+responseModifyVerifiedAccessInstanceLoggingConfiguration :: ModifyVerifiedAccessInstanceLoggingConfigurationResponse -> TestTree
+responseModifyVerifiedAccessInstanceLoggingConfiguration =
+  res
+    "ModifyVerifiedAccessInstanceLoggingConfigurationResponse"
+    "fixture/ModifyVerifiedAccessInstanceLoggingConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessInstanceLoggingConfiguration)
+
+responseModifyVerifiedAccessTrustProvider :: ModifyVerifiedAccessTrustProviderResponse -> TestTree
+responseModifyVerifiedAccessTrustProvider =
+  res
+    "ModifyVerifiedAccessTrustProviderResponse"
+    "fixture/ModifyVerifiedAccessTrustProviderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVerifiedAccessTrustProvider)
+
+responseModifyVolume :: ModifyVolumeResponse -> TestTree
+responseModifyVolume =
+  res
+    "ModifyVolumeResponse"
+    "fixture/ModifyVolumeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVolume)
+
+responseModifyVolumeAttribute :: ModifyVolumeAttributeResponse -> TestTree
+responseModifyVolumeAttribute =
+  res
+    "ModifyVolumeAttributeResponse"
+    "fixture/ModifyVolumeAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVolumeAttribute)
+
+responseModifyVpcAttribute :: ModifyVpcAttributeResponse -> TestTree
+responseModifyVpcAttribute =
+  res
+    "ModifyVpcAttributeResponse"
+    "fixture/ModifyVpcAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcAttribute)
+
+responseModifyVpcEndpoint :: ModifyVpcEndpointResponse -> TestTree
+responseModifyVpcEndpoint =
+  res
+    "ModifyVpcEndpointResponse"
+    "fixture/ModifyVpcEndpointResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcEndpoint)
+
+responseModifyVpcEndpointConnectionNotification :: ModifyVpcEndpointConnectionNotificationResponse -> TestTree
+responseModifyVpcEndpointConnectionNotification =
+  res
+    "ModifyVpcEndpointConnectionNotificationResponse"
+    "fixture/ModifyVpcEndpointConnectionNotificationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcEndpointConnectionNotification)
+
+responseModifyVpcEndpointServiceConfiguration :: ModifyVpcEndpointServiceConfigurationResponse -> TestTree
+responseModifyVpcEndpointServiceConfiguration =
+  res
+    "ModifyVpcEndpointServiceConfigurationResponse"
+    "fixture/ModifyVpcEndpointServiceConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcEndpointServiceConfiguration)
+
+responseModifyVpcEndpointServicePayerResponsibility :: ModifyVpcEndpointServicePayerResponsibilityResponse -> TestTree
+responseModifyVpcEndpointServicePayerResponsibility =
+  res
+    "ModifyVpcEndpointServicePayerResponsibilityResponse"
+    "fixture/ModifyVpcEndpointServicePayerResponsibilityResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcEndpointServicePayerResponsibility)
+
+responseModifyVpcEndpointServicePermissions :: ModifyVpcEndpointServicePermissionsResponse -> TestTree
+responseModifyVpcEndpointServicePermissions =
+  res
+    "ModifyVpcEndpointServicePermissionsResponse"
+    "fixture/ModifyVpcEndpointServicePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcEndpointServicePermissions)
+
+responseModifyVpcPeeringConnectionOptions :: ModifyVpcPeeringConnectionOptionsResponse -> TestTree
+responseModifyVpcPeeringConnectionOptions =
+  res
+    "ModifyVpcPeeringConnectionOptionsResponse"
+    "fixture/ModifyVpcPeeringConnectionOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcPeeringConnectionOptions)
+
+responseModifyVpcTenancy :: ModifyVpcTenancyResponse -> TestTree
+responseModifyVpcTenancy =
+  res
+    "ModifyVpcTenancyResponse"
+    "fixture/ModifyVpcTenancyResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpcTenancy)
+
+responseModifyVpnConnection :: ModifyVpnConnectionResponse -> TestTree
+responseModifyVpnConnection =
+  res
+    "ModifyVpnConnectionResponse"
+    "fixture/ModifyVpnConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpnConnection)
+
+responseModifyVpnConnectionOptions :: ModifyVpnConnectionOptionsResponse -> TestTree
+responseModifyVpnConnectionOptions =
+  res
+    "ModifyVpnConnectionOptionsResponse"
+    "fixture/ModifyVpnConnectionOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpnConnectionOptions)
+
+responseModifyVpnTunnelCertificate :: ModifyVpnTunnelCertificateResponse -> TestTree
+responseModifyVpnTunnelCertificate =
+  res
+    "ModifyVpnTunnelCertificateResponse"
+    "fixture/ModifyVpnTunnelCertificateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpnTunnelCertificate)
+
+responseModifyVpnTunnelOptions :: ModifyVpnTunnelOptionsResponse -> TestTree
+responseModifyVpnTunnelOptions =
+  res
+    "ModifyVpnTunnelOptionsResponse"
+    "fixture/ModifyVpnTunnelOptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ModifyVpnTunnelOptions)
+
+responseMonitorInstances :: MonitorInstancesResponse -> TestTree
+responseMonitorInstances =
+  res
+    "MonitorInstancesResponse"
+    "fixture/MonitorInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MonitorInstances)
+
+responseMoveAddressToVpc :: MoveAddressToVpcResponse -> TestTree
+responseMoveAddressToVpc =
+  res
+    "MoveAddressToVpcResponse"
+    "fixture/MoveAddressToVpcResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MoveAddressToVpc)
+
+responseMoveByoipCidrToIpam :: MoveByoipCidrToIpamResponse -> TestTree
+responseMoveByoipCidrToIpam =
+  res
+    "MoveByoipCidrToIpamResponse"
+    "fixture/MoveByoipCidrToIpamResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy MoveByoipCidrToIpam)
+
+responseProvisionByoipCidr :: ProvisionByoipCidrResponse -> TestTree
+responseProvisionByoipCidr =
+  res
+    "ProvisionByoipCidrResponse"
+    "fixture/ProvisionByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ProvisionByoipCidr)
+
+responseProvisionIpamPoolCidr :: ProvisionIpamPoolCidrResponse -> TestTree
+responseProvisionIpamPoolCidr =
+  res
+    "ProvisionIpamPoolCidrResponse"
+    "fixture/ProvisionIpamPoolCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ProvisionIpamPoolCidr)
+
+responseProvisionPublicIpv4PoolCidr :: ProvisionPublicIpv4PoolCidrResponse -> TestTree
+responseProvisionPublicIpv4PoolCidr =
+  res
+    "ProvisionPublicIpv4PoolCidrResponse"
+    "fixture/ProvisionPublicIpv4PoolCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ProvisionPublicIpv4PoolCidr)
+
+responsePurchaseHostReservation :: PurchaseHostReservationResponse -> TestTree
+responsePurchaseHostReservation =
+  res
+    "PurchaseHostReservationResponse"
+    "fixture/PurchaseHostReservationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PurchaseHostReservation)
+
+responsePurchaseReservedInstancesOffering :: PurchaseReservedInstancesOfferingResponse -> TestTree
+responsePurchaseReservedInstancesOffering =
+  res
+    "PurchaseReservedInstancesOfferingResponse"
+    "fixture/PurchaseReservedInstancesOfferingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PurchaseReservedInstancesOffering)
+
+responsePurchaseScheduledInstances :: PurchaseScheduledInstancesResponse -> TestTree
+responsePurchaseScheduledInstances =
+  res
+    "PurchaseScheduledInstancesResponse"
+    "fixture/PurchaseScheduledInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PurchaseScheduledInstances)
+
+responseRebootInstances :: RebootInstancesResponse -> TestTree
+responseRebootInstances =
+  res
+    "RebootInstancesResponse"
+    "fixture/RebootInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RebootInstances)
+
+responseRegisterImage :: RegisterImageResponse -> TestTree
+responseRegisterImage =
+  res
+    "RegisterImageResponse"
+    "fixture/RegisterImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterImage)
+
+responseRegisterInstanceEventNotificationAttributes :: RegisterInstanceEventNotificationAttributesResponse -> TestTree
+responseRegisterInstanceEventNotificationAttributes =
+  res
+    "RegisterInstanceEventNotificationAttributesResponse"
+    "fixture/RegisterInstanceEventNotificationAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterInstanceEventNotificationAttributes)
+
+responseRegisterTransitGatewayMulticastGroupMembers :: RegisterTransitGatewayMulticastGroupMembersResponse -> TestTree
+responseRegisterTransitGatewayMulticastGroupMembers =
+  res
+    "RegisterTransitGatewayMulticastGroupMembersResponse"
+    "fixture/RegisterTransitGatewayMulticastGroupMembersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterTransitGatewayMulticastGroupMembers)
+
+responseRegisterTransitGatewayMulticastGroupSources :: RegisterTransitGatewayMulticastGroupSourcesResponse -> TestTree
+responseRegisterTransitGatewayMulticastGroupSources =
+  res
+    "RegisterTransitGatewayMulticastGroupSourcesResponse"
+    "fixture/RegisterTransitGatewayMulticastGroupSourcesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RegisterTransitGatewayMulticastGroupSources)
+
+responseRejectTransitGatewayMulticastDomainAssociations :: RejectTransitGatewayMulticastDomainAssociationsResponse -> TestTree
+responseRejectTransitGatewayMulticastDomainAssociations =
+  res
+    "RejectTransitGatewayMulticastDomainAssociationsResponse"
+    "fixture/RejectTransitGatewayMulticastDomainAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectTransitGatewayMulticastDomainAssociations)
+
+responseRejectTransitGatewayPeeringAttachment :: RejectTransitGatewayPeeringAttachmentResponse -> TestTree
+responseRejectTransitGatewayPeeringAttachment =
+  res
+    "RejectTransitGatewayPeeringAttachmentResponse"
+    "fixture/RejectTransitGatewayPeeringAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectTransitGatewayPeeringAttachment)
+
+responseRejectTransitGatewayVpcAttachment :: RejectTransitGatewayVpcAttachmentResponse -> TestTree
+responseRejectTransitGatewayVpcAttachment =
+  res
+    "RejectTransitGatewayVpcAttachmentResponse"
+    "fixture/RejectTransitGatewayVpcAttachmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectTransitGatewayVpcAttachment)
+
+responseRejectVpcEndpointConnections :: RejectVpcEndpointConnectionsResponse -> TestTree
+responseRejectVpcEndpointConnections =
+  res
+    "RejectVpcEndpointConnectionsResponse"
+    "fixture/RejectVpcEndpointConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectVpcEndpointConnections)
+
+responseRejectVpcPeeringConnection :: RejectVpcPeeringConnectionResponse -> TestTree
+responseRejectVpcPeeringConnection =
+  res
+    "RejectVpcPeeringConnectionResponse"
+    "fixture/RejectVpcPeeringConnectionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RejectVpcPeeringConnection)
+
+responseReleaseAddress :: ReleaseAddressResponse -> TestTree
+responseReleaseAddress =
+  res
+    "ReleaseAddressResponse"
+    "fixture/ReleaseAddressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReleaseAddress)
+
+responseReleaseHosts :: ReleaseHostsResponse -> TestTree
+responseReleaseHosts =
+  res
+    "ReleaseHostsResponse"
+    "fixture/ReleaseHostsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReleaseHosts)
+
+responseReleaseIpamPoolAllocation :: ReleaseIpamPoolAllocationResponse -> TestTree
+responseReleaseIpamPoolAllocation =
+  res
+    "ReleaseIpamPoolAllocationResponse"
+    "fixture/ReleaseIpamPoolAllocationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReleaseIpamPoolAllocation)
+
+responseReplaceIamInstanceProfileAssociation :: ReplaceIamInstanceProfileAssociationResponse -> TestTree
+responseReplaceIamInstanceProfileAssociation =
+  res
+    "ReplaceIamInstanceProfileAssociationResponse"
+    "fixture/ReplaceIamInstanceProfileAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReplaceIamInstanceProfileAssociation)
+
+responseReplaceNetworkAclAssociation :: ReplaceNetworkAclAssociationResponse -> TestTree
+responseReplaceNetworkAclAssociation =
+  res
+    "ReplaceNetworkAclAssociationResponse"
+    "fixture/ReplaceNetworkAclAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReplaceNetworkAclAssociation)
+
+responseReplaceNetworkAclEntry :: ReplaceNetworkAclEntryResponse -> TestTree
+responseReplaceNetworkAclEntry =
+  res
+    "ReplaceNetworkAclEntryResponse"
+    "fixture/ReplaceNetworkAclEntryResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReplaceNetworkAclEntry)
+
+responseReplaceRoute :: ReplaceRouteResponse -> TestTree
+responseReplaceRoute =
+  res
+    "ReplaceRouteResponse"
+    "fixture/ReplaceRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReplaceRoute)
+
+responseReplaceRouteTableAssociation :: ReplaceRouteTableAssociationResponse -> TestTree
+responseReplaceRouteTableAssociation =
+  res
+    "ReplaceRouteTableAssociationResponse"
+    "fixture/ReplaceRouteTableAssociationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReplaceRouteTableAssociation)
+
+responseReplaceTransitGatewayRoute :: ReplaceTransitGatewayRouteResponse -> TestTree
+responseReplaceTransitGatewayRoute =
+  res
+    "ReplaceTransitGatewayRouteResponse"
+    "fixture/ReplaceTransitGatewayRouteResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReplaceTransitGatewayRoute)
+
+responseReportInstanceStatus :: ReportInstanceStatusResponse -> TestTree
+responseReportInstanceStatus =
+  res
+    "ReportInstanceStatusResponse"
+    "fixture/ReportInstanceStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ReportInstanceStatus)
+
+responseRequestSpotFleet :: RequestSpotFleetResponse -> TestTree
+responseRequestSpotFleet =
+  res
+    "RequestSpotFleetResponse"
+    "fixture/RequestSpotFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RequestSpotFleet)
+
+responseRequestSpotInstances :: RequestSpotInstancesResponse -> TestTree
+responseRequestSpotInstances =
+  res
+    "RequestSpotInstancesResponse"
+    "fixture/RequestSpotInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RequestSpotInstances)
+
+responseResetAddressAttribute :: ResetAddressAttributeResponse -> TestTree
+responseResetAddressAttribute =
+  res
+    "ResetAddressAttributeResponse"
+    "fixture/ResetAddressAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetAddressAttribute)
+
+responseResetEbsDefaultKmsKeyId :: ResetEbsDefaultKmsKeyIdResponse -> TestTree
+responseResetEbsDefaultKmsKeyId =
+  res
+    "ResetEbsDefaultKmsKeyIdResponse"
+    "fixture/ResetEbsDefaultKmsKeyIdResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetEbsDefaultKmsKeyId)
+
+responseResetFpgaImageAttribute :: ResetFpgaImageAttributeResponse -> TestTree
+responseResetFpgaImageAttribute =
+  res
+    "ResetFpgaImageAttributeResponse"
+    "fixture/ResetFpgaImageAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetFpgaImageAttribute)
+
+responseResetImageAttribute :: ResetImageAttributeResponse -> TestTree
+responseResetImageAttribute =
+  res
+    "ResetImageAttributeResponse"
+    "fixture/ResetImageAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetImageAttribute)
+
+responseResetInstanceAttribute :: ResetInstanceAttributeResponse -> TestTree
+responseResetInstanceAttribute =
+  res
+    "ResetInstanceAttributeResponse"
+    "fixture/ResetInstanceAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetInstanceAttribute)
+
+responseResetNetworkInterfaceAttribute :: ResetNetworkInterfaceAttributeResponse -> TestTree
+responseResetNetworkInterfaceAttribute =
+  res
+    "ResetNetworkInterfaceAttributeResponse"
+    "fixture/ResetNetworkInterfaceAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetNetworkInterfaceAttribute)
+
+responseResetSnapshotAttribute :: ResetSnapshotAttributeResponse -> TestTree
+responseResetSnapshotAttribute =
+  res
+    "ResetSnapshotAttributeResponse"
+    "fixture/ResetSnapshotAttributeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ResetSnapshotAttribute)
+
+responseRestoreAddressToClassic :: RestoreAddressToClassicResponse -> TestTree
+responseRestoreAddressToClassic =
+  res
+    "RestoreAddressToClassicResponse"
+    "fixture/RestoreAddressToClassicResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestoreAddressToClassic)
+
+responseRestoreImageFromRecycleBin :: RestoreImageFromRecycleBinResponse -> TestTree
+responseRestoreImageFromRecycleBin =
+  res
+    "RestoreImageFromRecycleBinResponse"
+    "fixture/RestoreImageFromRecycleBinResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestoreImageFromRecycleBin)
+
+responseRestoreManagedPrefixListVersion :: RestoreManagedPrefixListVersionResponse -> TestTree
+responseRestoreManagedPrefixListVersion =
+  res
+    "RestoreManagedPrefixListVersionResponse"
+    "fixture/RestoreManagedPrefixListVersionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestoreManagedPrefixListVersion)
+
+responseRestoreSnapshotFromRecycleBin :: RestoreSnapshotFromRecycleBinResponse -> TestTree
+responseRestoreSnapshotFromRecycleBin =
+  res
+    "RestoreSnapshotFromRecycleBinResponse"
+    "fixture/RestoreSnapshotFromRecycleBinResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestoreSnapshotFromRecycleBin)
+
+responseRestoreSnapshotTier :: RestoreSnapshotTierResponse -> TestTree
+responseRestoreSnapshotTier =
+  res
+    "RestoreSnapshotTierResponse"
+    "fixture/RestoreSnapshotTierResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RestoreSnapshotTier)
+
+responseRevokeClientVpnIngress :: RevokeClientVpnIngressResponse -> TestTree
+responseRevokeClientVpnIngress =
+  res
+    "RevokeClientVpnIngressResponse"
+    "fixture/RevokeClientVpnIngressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeClientVpnIngress)
+
+responseRevokeSecurityGroupEgress :: RevokeSecurityGroupEgressResponse -> TestTree
+responseRevokeSecurityGroupEgress =
+  res
+    "RevokeSecurityGroupEgressResponse"
+    "fixture/RevokeSecurityGroupEgressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeSecurityGroupEgress)
+
+responseRevokeSecurityGroupIngress :: RevokeSecurityGroupIngressResponse -> TestTree
+responseRevokeSecurityGroupIngress =
+  res
+    "RevokeSecurityGroupIngressResponse"
+    "fixture/RevokeSecurityGroupIngressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RevokeSecurityGroupIngress)
+
+responseRunInstances :: Reservation -> TestTree
+responseRunInstances =
+  res
+    "RunInstancesResponse"
+    "fixture/RunInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RunInstances)
+
+responseRunScheduledInstances :: RunScheduledInstancesResponse -> TestTree
+responseRunScheduledInstances =
+  res
+    "RunScheduledInstancesResponse"
+    "fixture/RunScheduledInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RunScheduledInstances)
+
+responseSearchLocalGatewayRoutes :: SearchLocalGatewayRoutesResponse -> TestTree
+responseSearchLocalGatewayRoutes =
+  res
+    "SearchLocalGatewayRoutesResponse"
+    "fixture/SearchLocalGatewayRoutesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchLocalGatewayRoutes)
+
+responseSearchTransitGatewayMulticastGroups :: SearchTransitGatewayMulticastGroupsResponse -> TestTree
+responseSearchTransitGatewayMulticastGroups =
+  res
+    "SearchTransitGatewayMulticastGroupsResponse"
+    "fixture/SearchTransitGatewayMulticastGroupsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchTransitGatewayMulticastGroups)
+
+responseSearchTransitGatewayRoutes :: SearchTransitGatewayRoutesResponse -> TestTree
+responseSearchTransitGatewayRoutes =
+  res
+    "SearchTransitGatewayRoutesResponse"
+    "fixture/SearchTransitGatewayRoutesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SearchTransitGatewayRoutes)
+
+responseSendDiagnosticInterrupt :: SendDiagnosticInterruptResponse -> TestTree
+responseSendDiagnosticInterrupt =
+  res
+    "SendDiagnosticInterruptResponse"
+    "fixture/SendDiagnosticInterruptResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy SendDiagnosticInterrupt)
+
+responseStartInstances :: StartInstancesResponse -> TestTree
+responseStartInstances =
+  res
+    "StartInstancesResponse"
+    "fixture/StartInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartInstances)
+
+responseStartNetworkInsightsAccessScopeAnalysis :: StartNetworkInsightsAccessScopeAnalysisResponse -> TestTree
+responseStartNetworkInsightsAccessScopeAnalysis =
+  res
+    "StartNetworkInsightsAccessScopeAnalysisResponse"
+    "fixture/StartNetworkInsightsAccessScopeAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartNetworkInsightsAccessScopeAnalysis)
+
+responseStartNetworkInsightsAnalysis :: StartNetworkInsightsAnalysisResponse -> TestTree
+responseStartNetworkInsightsAnalysis =
+  res
+    "StartNetworkInsightsAnalysisResponse"
+    "fixture/StartNetworkInsightsAnalysisResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartNetworkInsightsAnalysis)
+
+responseStartVpcEndpointServicePrivateDnsVerification :: StartVpcEndpointServicePrivateDnsVerificationResponse -> TestTree
+responseStartVpcEndpointServicePrivateDnsVerification =
+  res
+    "StartVpcEndpointServicePrivateDnsVerificationResponse"
+    "fixture/StartVpcEndpointServicePrivateDnsVerificationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartVpcEndpointServicePrivateDnsVerification)
+
+responseStopInstances :: StopInstancesResponse -> TestTree
+responseStopInstances =
+  res
+    "StopInstancesResponse"
+    "fixture/StopInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopInstances)
+
+responseTerminateClientVpnConnections :: TerminateClientVpnConnectionsResponse -> TestTree
+responseTerminateClientVpnConnections =
+  res
+    "TerminateClientVpnConnectionsResponse"
+    "fixture/TerminateClientVpnConnectionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TerminateClientVpnConnections)
+
+responseTerminateInstances :: TerminateInstancesResponse -> TestTree
+responseTerminateInstances =
+  res
+    "TerminateInstancesResponse"
+    "fixture/TerminateInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TerminateInstances)
+
+responseUnassignIpv6Addresses :: UnassignIpv6AddressesResponse -> TestTree
+responseUnassignIpv6Addresses =
+  res
+    "UnassignIpv6AddressesResponse"
+    "fixture/UnassignIpv6AddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UnassignIpv6Addresses)
+
+responseUnassignPrivateIpAddresses :: UnassignPrivateIpAddressesResponse -> TestTree
+responseUnassignPrivateIpAddresses =
+  res
+    "UnassignPrivateIpAddressesResponse"
+    "fixture/UnassignPrivateIpAddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UnassignPrivateIpAddresses)
+
+responseUnmonitorInstances :: UnmonitorInstancesResponse -> TestTree
+responseUnmonitorInstances =
+  res
+    "UnmonitorInstancesResponse"
+    "fixture/UnmonitorInstancesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UnmonitorInstances)
+
+responseUpdateSecurityGroupRuleDescriptionsEgress :: UpdateSecurityGroupRuleDescriptionsEgressResponse -> TestTree
+responseUpdateSecurityGroupRuleDescriptionsEgress =
+  res
+    "UpdateSecurityGroupRuleDescriptionsEgressResponse"
+    "fixture/UpdateSecurityGroupRuleDescriptionsEgressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSecurityGroupRuleDescriptionsEgress)
+
+responseUpdateSecurityGroupRuleDescriptionsIngress :: UpdateSecurityGroupRuleDescriptionsIngressResponse -> TestTree
+responseUpdateSecurityGroupRuleDescriptionsIngress =
+  res
+    "UpdateSecurityGroupRuleDescriptionsIngressResponse"
+    "fixture/UpdateSecurityGroupRuleDescriptionsIngressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateSecurityGroupRuleDescriptionsIngress)
+
+responseWithdrawByoipCidr :: WithdrawByoipCidrResponse -> TestTree
+responseWithdrawByoipCidr =
+  res
+    "WithdrawByoipCidrResponse"
+    "fixture/WithdrawByoipCidrResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy WithdrawByoipCidr)
